From c484ce03b879191739e1de2333ab04667a2ffb44 Mon Sep 17 00:00:00 2001 From: Michal Danco Date: Thu, 25 May 2023 21:24:54 +0200 Subject: [PATCH] Mangata dev v0.9.40 (#23) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * guide: remove refences to outdated secondary checkers (#6309) * guide: remove refences to outdated secondary checkers * Update roadmap/implementers-guide/src/glossary.md * guide: remove refences to Fisherman * revert changes to roadmap/parachains.md * Kusama: approve/reject treasury prop by treasurer (#6354) * Add buckets on lower end of distribution to network bridge latency metrics (#6359) * Add two more buckets on lower end of distribution * add even smaller buckets * cargo fmt * Reduce provisioner work (#6328) * Store values needed to create inherent data when needed instead of creating them early on * Point deps to substrate branch * Arc the client * Cargo update * Fix main cargo files * Undo cargo file changes * Add overseer dep to inherents * Update deps * Simplify code * Update benchmark * Update node/client/src/benchmarking.rs Co-authored-by: Bastian Köcher * Update node/core/parachains-inherent/src/lib.rs Co-authored-by: Bastian Köcher * Update node/core/parachains-inherent/src/lib.rs Co-authored-by: Bastian Köcher * Revert "Update node/core/parachains-inherent/src/lib.rs" This reverts commit 8b9555dc2451acfabab173d259e00da2728b7aa2. * Revert "Update node/core/parachains-inherent/src/lib.rs" This reverts commit 816c92d0e001e71f677d0acbcf22bdc3f511bc56. * cargo update -p sp-io * fmt Co-authored-by: Bastian Köcher * update deprecated alias `--all` (#6383) `--all` is a deprecated alias for `--workspace` (https://doc.rust-lang.org/cargo/commands/cargo-test.html) * Upgrade tokio to 1.22.0 (#6262) Co-authored-by: Sebastian Kunert * Set polkadot version in one place (#6095) * rust 1.64 enables workspace properties * add edition, repository and authors. * of course, update the version in one place. Co-authored-by: Andronik * Introduce NIS functionality into Kusama/Rococo (#6352) * Integrate NIS into Kusama/Rococo * Missing files * Fix * Fix * Formatting * Add Kusama weights Signed-off-by: Oliver Tale-Yazdi * Add Rococo weights Signed-off-by: Oliver Tale-Yazdi * Use weights Signed-off-by: Oliver Tale-Yazdi * Bump * Bump * ".git/.scripts/bench-bot.sh" runtime kusama-dev pallet_nis * ".git/.scripts/bench-bot.sh" runtime rococo-dev pallet_nis Signed-off-by: Oliver Tale-Yazdi Co-authored-by: Oliver Tale-Yazdi Co-authored-by: command-bot <> * OpenGov improvements for Kusama (#6372) * Tweaks to optimise gov2 * Use new inactive funds * Introduce migrations * Fixes * Fixes * Fixes * Some constant updates for Fellowship * Further tweaks * Lower floor for whitelisted * Tweak some NIS params (#6393) * Reduce base period, increase queue count * Reduce base period, increase queue count * allow root with gov2 origins (#6390) * Bump Substrate (#6394) * crowdloan: Fix migration. (#6397) The migration would not have been run because of the `current_version == 1` check. * Companion of Substrate PR 12837 (#6385) * rename some crates for publishing to crates.io * s/remote-ext/frame-remote-externalities * cargo update * Make submission deposit reasonable (#6402) * kusama whitelist pallet preimage dep upgrade (#6392) * Bump (#6404) * Companion for paritytech/substrate#12795 (#6374) * Begin removing `parity-util-mem`; remove `collect_memory_stats` * Update some dependencies that were using `parity-util-mem` * Remove `trie-memory-tracker` feature * Update Cargo.lock * Update `kvdb-shared-tests` * Add back jemalloc * Add missing license header * update lockfile for {"substrate"} Co-authored-by: parity-processbot <> Co-authored-by: Andronik * Let the PVF host kill the worker on timeout (#6381) * Let the PVF host kill the worker on timeout * Fix comment * Fix inaccurate comments; add missing return statement * Fix a comment * Fix comment * Companion for paritytech/substrate#12788 (#6360) * Companion for paritytech/substrate#12788 * migrations * rustfmt * update lockfile for {"substrate"} * update lockfile for {"substrate"} Co-authored-by: parity-processbot <> * Make sure to preserve backing votes (#6382) * Guide updates * Consider more dead forks. * Ensure backing votes don't get overridden. * Fix spelling. * Fix comments. * Update node/primitives/src/lib.rs Co-authored-by: Tsvetomir Dimitrov Co-authored-by: eskimor Co-authored-by: Tsvetomir Dimitrov * Refactoring to condense disputes tests (#6395) * Refactoring to condense disputes tests * Removing unhelpful comment lines * Addressing Tsveto's suggestions * Fixing formatting nit * [ci] Adjust check-runtime-migration job (#6107) * [WIP][ci] Add node to check-runtime-migration job * add image * remove sscache from before_script * add nodes * restart pipeline * restart pipeline2 * disable other jobs * debug * remove debug * add ports * restart pipeline * restart pipeline * restart pipeline * try kusama first * run polkadot 1st * disable some jobs * try command from command bot * cargo run * test passing variables * run without condition * adjust kusama and westend * fix * return jobs * fix small nits * split check-runtime-migration Co-authored-by: parity-processbot <> * update weights (sync with 0.9.33) (#6362) * update weights (0.9.33) (#6299) * kusama: update weights * polkadot: update weights * rococo: update weights * westend: update weights * fix deps * Resolve merge Signed-off-by: Oliver Tale-Yazdi * Reset Kusama whitelist weights Signed-off-by: Oliver Tale-Yazdi Signed-off-by: Oliver Tale-Yazdi Co-authored-by: Oliver Tale-Yazdi * Feature gate test `benchmark_storage_works` (#6376) * Feature gate storage bench test Signed-off-by: Oliver Tale-Yazdi * typo Signed-off-by: Oliver Tale-Yazdi Signed-off-by: Oliver Tale-Yazdi Co-authored-by: parity-processbot <> * Companion for paritytech/substrate#12868 (#6406) * Replace WEIGHT_PER_* with WEIGHT_REF_TIME_PER_* * cargo fmt * Update substrate * OpenGov: Tweak parameters further (#6416) * Tweak parameters further * Further tweaks to deposits * companion for #12663 jsonrpsee v0.16 (#6339) * companion for #12663 jsonrpsee v0.16.1 * update substrate * merge master * Update rpc/Cargo.toml Co-authored-by: Alexandru Vasile <60601340+lexnv@users.noreply.github.com> * Update utils/staking-miner/Cargo.toml Co-authored-by: Alexandru Vasile <60601340+lexnv@users.noreply.github.com> * update lockfile for {"substrate"} Co-authored-by: Alexandru Vasile <60601340+lexnv@users.noreply.github.com> Co-authored-by: parity-processbot <> * CI: Remove the excessive variable declaration (#6426) * companion slash chilling update (#6424) * update weights * goddamit * update weights * update lockfile for {"substrate"} Co-authored-by: parity-processbot <> * swap error responses (#6421) * [ci] fix check-transaction-versions (#6425) * [ci] fix check-transaction-versions * allow fail the job * approval-distribution: batched approval/assignment sending (#6401) * Imple batched send Signed-off-by: Andrei Sandu * Add batch tests Signed-off-by: Andrei Sandu * pub MAX_NOTIFICATION_SIZE Signed-off-by: Andrei Sandu * spell check Signed-off-by: Andrei Sandu * spellcheck ... Signed-off-by: Andrei Sandu * Fix comment Signed-off-by: Andrei Sandu * o.O Signed-off-by: Andrei Sandu * 2 constants Signed-off-by: Andrei Sandu * Ensure batch size is at least 1 element Signed-off-by: Andrei Sandu * feedback impl Signed-off-by: Andrei Sandu Signed-off-by: Andrei Sandu * add westend bootnode (#6434) * [ci] add job switcher (#6433) * [ci] add job switcher * add before_script to docker and k8s runners * upd runners * sccache :( * companion for try-runtime revamp (#6187) * update to reflect latest try-runtime stuff * update to latest version * fix * fix miner * update * update * update lockfile for {"substrate"} Co-authored-by: parity-processbot <> * Fix wrong rate limit + add a few logs. (#6440) * Add trace log * More tracing. * Fix redundant rate limit. * Add trace log. * Improve logging. Co-authored-by: eskimor * Make sure errors get logged (#6451) instead of silently dropped. Co-authored-by: eskimor * Adding some more logs (#6455) * Adding some more logs More logs are always better! Joke aside, these logs help to debug certain issues. * Apply suggestions from code review * [bump] orchestra v0.0.4 (#6413) * update orchestra to v0.0.3 * fix locks * update orchestra to v0.0.4 * update lock * Use explicit call indices (#6449) * cargo update -p sp-io Signed-off-by: Oliver Tale-Yazdi * Use explicit call indices Signed-off-by: Oliver Tale-Yazdi Signed-off-by: Oliver Tale-Yazdi * Update Substrate (#6457) * BlockId removal: refactor: HeaderBackend::header (#6418) * BlockId removal: refactor: HeaderBackend::header It changes the arguments of: - `HeaderBackend::header`, - `Client::header` methods from: `BlockId` to: `Block::Hash` This PR is part of BlockId::Number refactoring analysis (paritytech/substrate#11292) * missed fixes * BlockId removal: refactor: HeaderBackend::expect_header It changes the arguments of `HeaderBackend::expect_header` method from: `BlockId` to: `Block::Hash` * update lockfile for {"substrate"} * misspell fixed Co-authored-by: parity-processbot <> * PVF preparation: do not conflate errors (#6384) * PVF preparation: do not conflate errors + Adds some more granularity to the prepare errors. + Better distinguish whether errors occur on the host side or the worker. + Do not kill the worker if the error happened on the host side. + Do not retry preparation if the error was `Panic`. + Removes unnecessary indirection with `Selected` type. * Add missing docs, resolve TODOs * Address review comments and remove TODOs * Fix error in CI * Undo unnecessary change * Update couple of comments * Don't return error for stream shutdown * Update node/core/pvf/src/worker_common.rs * [ci] New try-runtime command (#6445) * [ci] New try-runtime command * restart pipeline * build features * fix --features flag * rm --execution flag * remove --no-spec-check-panic flag * change target dir * debug ccargo target dir * return target * try different location for runtime wasm * build only the runtime crate * check all generated .wasm files * adjust paths again * remove debug command Co-authored-by: joao-paulo-parity * Kusama origins as xcm multi_location (#6273) * Kusamsa origins as xcm multilocation * Fellows origin index * origins to xcm plurality body * cleanup * fix cargo spellcheck * Apply suggestions from code review Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com> * include Fellows into scope * include Fellows into scope Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com> Co-authored-by: Gavin Wood * BlockId removal: refactor: HeaderBackend::status (#6459) * BlockId removal: refactor: HeaderBackend::status It changes the arguments of `HeaderBackend::status` method from: `BlockId` to: `Block::Hash` This PR is part of BlockId::Number refactoring analysis (paritytech/substrate#11292) * Update node/core/chain-api/src/tests.rs Co-authored-by: Adrian Catangiu * unused import removed * update lockfile for {"substrate"} Co-authored-by: Adrian Catangiu Co-authored-by: parity-processbot <> * cargo update -p libp2p-yamux (#6464) * fix dependabot labels (#6468) * Fix runtime-migration label detection (#6469) Signed-off-by: Oliver Tale-Yazdi Signed-off-by: Oliver Tale-Yazdi * Bump secp256k1 from 0.24.0 to 0.24.2 (#6411) Bumps [secp256k1](https://github.com/rust-bitcoin/rust-secp256k1) from 0.24.0 to 0.24.2. - [Release notes](https://github.com/rust-bitcoin/rust-secp256k1/releases) - [Changelog](https://github.com/rust-bitcoin/rust-secp256k1/blob/secp256k1-0.24.2/CHANGELOG.md) - [Commits](https://github.com/rust-bitcoin/rust-secp256k1/compare/secp256k1-0.24.0...secp256k1-0.24.2) --- updated-dependencies: - dependency-name: secp256k1 dependency-type: indirect ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: parity-processbot <> * [Companion] Allow StakingAdmin to set min_commission (#6444) * rename staking origin * fix comments * rename origin * give fake weight before re-benchmarking * ".git/.scripts/bench-bot.sh" runtime westend-dev pallet_staking * ".git/.scripts/bench-bot.sh" runtime polkadot-dev pallet_staking * ".git/.scripts/bench-bot.sh" runtime kusama-dev pallet_staking * update lockfile for {"substrate"} Co-authored-by: parity-processbot <> * Added comment describing satisfied invariant (#6460) * Runtime diagnostics for leaked messages in unbounded channels (part 2) (#6481) * Bump `backtrace` to v0.3.67 * update lockfile for {"substrate"} Co-authored-by: parity-processbot <> * Update disputes subsytems section. (#6329) * Update disputes subsytems section. * Update roadmap/implementers-guide/src/node/disputes/README.md Co-authored-by: Andrei Sandu <54316454+sandreim@users.noreply.github.com> * Update roadmap/implementers-guide/src/node/disputes/README.md Co-authored-by: Andrei Sandu <54316454+sandreim@users.noreply.github.com> * Update roadmap/implementers-guide/src/node/disputes/README.md Co-authored-by: ordian * Update roadmap/implementers-guide/src/node/disputes/README.md Co-authored-by: ordian * Review feedback. Co-authored-by: eskimor Co-authored-by: Andrei Sandu <54316454+sandreim@users.noreply.github.com> Co-authored-by: ordian * Update dispute participation on active leaves update (#6303) * Passed candidate events from scraper to participation * First draft PR 5875 * Added support for timestamp in changes * Some necessary refactoring * Removed SessionIndex from unconfirmed_disputes key * Removed duplicate logic in import statements * Replaced queue_participation call with re-prio * Simplifying refactor. Backed were already handled * Removed unneeded spam slots logic * Implementers guide edits * Undid the spam slots refactor * Added comments and implementers guide edit * Added test for participation upon backing * Round of fixes + ran fmt * Round of changes + fmt * Error handling draft * Changed errors to bubble up from reprioritization * Starting to construct new test * Clarifying participation function rename * Reprio test draft * Very rough bump to priority queue test draft * Improving logging * Most concise reproduction of error on third import * Add `handle_approval_vote_request` * Removing reprioritization on included event test * Removing unneeded test config * cargo fmt * Test works * Fixing final nits * Tweaks to test Tsveto figured out Co-authored-by: eskimor Co-authored-by: Tsvetomir Dimitrov * BlockId removal: refactor: BlockBackend::block|block_status (#6477) * BlockId removal: refactor: BlockBackend::block|block_status It changes the arguments of: - `BlockBackend::block` - `BlockBackend::block_status` method from: `BlockId` to: `Block::Hash` This PR is part of BlockId::Number refactoring analysis (paritytech/substrate#11292) * update lockfile for {"substrate"} * ".git/.scripts/fmt.sh" Co-authored-by: parity-processbot <> * Deploy scheduler agenda cleanup migration (#6465) * Add migration Signed-off-by: Oliver Tale-Yazdi * Add comments Signed-off-by: Oliver Tale-Yazdi * cargo update -p sp-io Signed-off-by: Oliver Tale-Yazdi * cargo update -p sp-io Signed-off-by: Oliver Tale-Yazdi * cargo update -p sp-io Signed-off-by: Oliver Tale-Yazdi Signed-off-by: Oliver Tale-Yazdi * Migrate Staking pallet to v13 (#6365) * add staking v13 migration * add migration to polkadot * only migrate staking * un-remove other migrations * fmt * retrigger ci * cargo update -p sp-io Signed-off-by: Oliver Tale-Yazdi Signed-off-by: Oliver Tale-Yazdi Co-authored-by: parity-processbot <> Co-authored-by: Oliver Tale-Yazdi * Co #13045: Selectable on-runtime-upgrade checks (#6498) * Use UpgradeCheckSelector Signed-off-by: Oliver Tale-Yazdi * update lockfile for {"substrate"} Signed-off-by: Oliver Tale-Yazdi Co-authored-by: parity-processbot <> * Add `try-runtime` to Rococo runtime (#6501) * Add `try-runtime` to Rococo runtime * Enable try-runtime in all pallets * Update runtime/rococo/src/lib.rs Co-authored-by: Oliver Tale-Yazdi * Add dev-dependencies for the try-runtime test Co-authored-by: Oliver Tale-Yazdi * Fix `polkadot-runtime-constants` std build (#6503) * Fix polkadot-runtime-constants std build * Fix kusama, rococo and westend constants std build * Code review fixes * Issue 6274: keeping all backing votes in provisioner vote set (#6494) * Fixing filter to keep all backing votes * Comment and implementers guide edit * Formatting * Using fallthrough * Fmt * Log PVF retries (#6504) * av-store: write meta for unknown finalized blocks (#6452) * av-store: write meta for unknown finalized blocks * fix test * upgrade libp2p to 0.50.0 (#6500) * update asynchronous-codec * update futures-rustls * update rustls * update ipnet * update once_cell * update futures * update futures and its deps * update lockfile for {"substrate"} * Bump zombienet test timeout from 30 to 60 s Signed-off-by: Oliver Tale-Yazdi * Revert "Bump zombienet test timeout from 30 to 60 s" This reverts commit 657738dfffe3234195a3b5b491f08e4660ca7bad. * Update Substrate Signed-off-by: Oliver Tale-Yazdi Co-authored-by: parity-processbot <> Co-authored-by: Oliver Tale-Yazdi Co-authored-by: Bastian Köcher * Update serde because substrate->trybuild needs a newer version (#6505) companion PR for https://github.com/paritytech/substrate/pull/13073 * [ci] Remove check-transaction-versions job (#6509) Co-authored-by: parity-processbot <> * Unlimited Proof size per block (#6085) * Unlimited Proof size per block Signed-off-by: Oliver Tale-Yazdi * fix Signed-off-by: Oliver Tale-Yazdi Signed-off-by: Oliver Tale-Yazdi * Use `polkadot-node-metrics` where possible (#6484) See https://github.com/paritytech/polkadot/issues/6015. (Doesn't close yet, there might be more we can do.) * disputes pallet: Remove spam slots (#6345) * disputes pallet: Filter disputes with votes less than supermajority threshold * Remove `max_spam_slots` usages * Remove `SpamSlots` * Remove `SpamSlotChange` * Remove `Error::PotentialSpam` and stale comments * `create_disputes_with_no_spam` -> `create_disputes` * Make tests compile - wip commit * Rework `test_dispute_timeout`. Rename `update_spam_slots` to `filter_dispute_set` * Remove `dispute_statement_becoming_onesided_due_to_spamslots_is_accepted` and `filter_correctly_accounts_spam_slots` -> they bring no value with removed spam slots * Fix `test_provide_multi_dispute_success_and_other` * Remove an old comment * Remove spam slots from tests - clean todo comments * Remove test - `test_decrement_spam` * todo comments * Update TODO comments * Extract `test_unconfirmed_are_ignored` as separate test case * Remove dead code * Fix `test_unconfirmed_are_ignored` * Remove dead code in `filter_dispute_data` * Fix weights (related to commit "Remove `SpamSlots`") * Disputes migration - first try * Remove `dispute_max_spam_slots` + storage migration * Fix `HostConfig` migration tests * Deprecate `SpamSlots` * Code review feedback * add weight for storage version update * fix bound for clear() * Fix weights in disputes migration * Revert "Deprecate `SpamSlots`" This reverts commit 8c4d967c7b061abd76ba8b551223918c0b9e6370. * Make mod migration public * Remove `SpamSlots` from disputes pallet and use `storage_alias` in the migration * Fix call to `clear()` for `SpamSlots` in migration * Update migration and add a `try-runtime` test * Add `pre_upgrade` `try-runtime` test * Fix some test names in `HostConfiguration` migration * Link spamslots migration in all runtimes * Add `test_unconfirmed_disputes_cause_block_import_error` * Update guide - Remove `SpamSlots` related information from roadmap/implementers-guide/src/runtime/disputes.md - Add 'Disputes filtering' to Runtime section of the Implementor's guide * Update runtime/parachains/src/configuration/migration.rs Co-authored-by: Marcin S. * Code review feedback - update logs * Code review feedback: fix weights * Update runtime/parachains/src/disputes.rs Co-authored-by: s0me0ne-unkn0wn <48632512+s0me0ne-unkn0wn@users.noreply.github.com> * Additional logs in disputes migration * Fix merge conflicts * Add version checks in try-runtime tests * Fix a compilation warning` Co-authored-by: Marcin S. Co-authored-by: s0me0ne-unkn0wn <48632512+s0me0ne-unkn0wn@users.noreply.github.com> * Remove unused code (#6525) Signed-off-by: Andrei Sandu Signed-off-by: Andrei Sandu * Fix flaky test in `dispute-coordinator` (#6524) https://github.com/paritytech/polkadot/pull/6494 updates disputes participation priority on Active Leaves update. This operation might trigger participation in some cases and as a result some of the message ordering is not as nice as it used to be. As a side effect of this `resume_dispute_without_local_statement` was failing occasionally. The solution is not to expect that `BlockNumber`, `CandidateEvents`, `FetchOnChainVotes` and `Ancestors` messages are executed after `FinalizedBlockNumber` and in any specific order. This should be okay as the code is in helper function and doesn't affect the actual test behaviour. Fixes https://github.com/paritytech/polkadot/issues/6514 * Bump tokio from 1.22.0 to 1.24.1 (#6523) Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.22.0 to 1.24.1. - [Release notes](https://github.com/tokio-rs/tokio/releases) - [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.22.0...tokio-1.24.1) --- updated-dependencies: - dependency-name: tokio dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Guide changes 3 (#6520) * Guide changes * Adding clarification * Replace async-std with tokio in PVF subsystem (#6419) * Replace async-std with tokio in PVF subsystem * Rework workers to use `select!` instead of a mutex The improvement in code readability is more important than the thread overhead. * Remove unnecessary `fuse` * Add explanation for `expect()` * Update node/core/pvf/src/worker_common.rs Co-authored-by: Bastian Köcher * Update node/core/pvf/src/worker_common.rs Co-authored-by: Bastian Köcher * Address some review comments * Shutdown tokio runtime * Run cargo fmt * Add a small note about retries * Fix up merge * Rework `cpu_time_monitor_loop` to return when other thread finishes * Add error string to PrepareError::IoErr variant * Log when artifacts fail to prepare * Fix `cpu_time_monitor_loop`; fix test * Fix text * Fix a couple of potential minor data races. First data race was due to logging in the CPU monitor thread even if the job (other thread) finished. It can technically finish before or after the log. Maybe best would be to move this log to the `select!`s, where we are guaranteed to have chosen the timed-out branch, although there would be a bit of duplication. Also, it was possible for this thread to complete before we executed `finished_tx.send` in the other thread, which would trigger an error as the receiver has already been dropped. And right now, such a spurious error from `send` would be returned even if the job otherwise succeeded. * Update Cargo.lock Co-authored-by: Bastian Köcher * Fix cycle dispute-coordinator <-> dispute-distribution (#6489) * First iteration of message sender. * dyn Fn variant (no cloning) * Full implementation + Clone, without allocs on `Send` * Further clarifications/cleanup. * MessageSender -> NestingSender * Doc update/clarification. * dispute-coordinator: Send disputes on startup. + Some fixes, cleanup. * Fix whitespace. * Dispute distribution fixes, cleanup. * Cargo.lock * Fix spaces. * More format fixes. What is cargo fmt doing actually? * More fmt fixes. * Fix nesting sender. * Fixes. * Whitespace * Enable logging. * Guide update. * Fmt fixes, typos. * Remove unused function. * Simplifications, doc fixes. * Update roadmap/implementers-guide/src/node/disputes/dispute-coordinator.md Co-authored-by: Marcin S. * Fmt + doc example fix. Co-authored-by: eskimor Co-authored-by: Marcin S. * Update the GHA srtool-actions to the latest version (#6532) * Minor fixes (#6533) * Minor fixes * Fix compile errors * Trigger update-node-template when a final release tag is created (#6522) * trigger update-node-template when final release tag is created ref https://github.com/paritytech/release-engineering/issues/142 * fix comment * Update scripts/ci/gitlab/pipeline/publish.yml Co-authored-by: Alexander Samusev <41779041+alvicsam@users.noreply.github.com> * fix regular expression Co-authored-by: Alexander Samusev <41779041+alvicsam@users.noreply.github.com> * ci: mark update-weights non-interruptible (#6539) * Bump JasonEtco/create-an-issue from 2.6.0 to 2.9.1 (#6473) Bumps [JasonEtco/create-an-issue](https://github.com/JasonEtco/create-an-issue) from 2.6.0 to 2.9.1. - [Release notes](https://github.com/JasonEtco/create-an-issue/releases) - [Commits](https://github.com/JasonEtco/create-an-issue/compare/9e6213aec58987fa7d2f4deb8b256b99e63107a2...e27dddc79c92bc6e4562f268fffa5ed752639abd) --- updated-dependencies: - dependency-name: JasonEtco/create-an-issue dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: parity-processbot <> * Improve inactive fund tracking (#6471) * Improve inactive fund tracking * Docs * Introduce the re-migration code * Bump * Update runtime/kusama/src/lib.rs Co-authored-by: Oliver Tale-Yazdi * Update runtime/common/src/crowdloan/migration.rs Co-authored-by: Oliver Tale-Yazdi * Update runtime/common/src/crowdloan/migration.rs Co-authored-by: Oliver Tale-Yazdi * Grumbles * Apply comments suggestions from code review Co-authored-by: Bastian Köcher Co-authored-by: Oliver Tale-Yazdi Co-authored-by: muharem Co-authored-by: Bastian Köcher Co-authored-by: parity-processbot <> * Re-export current primitives in crate root (#6487) * Re-export current primitives in crate root * Add missing exports * restart CI * Add a paragraph about slashing in runtime disputes section from the guide (#6531) * Add a paragraph about slashing in runtime disputes section from the guide * Add definition for inconclusive * Westend state trie to version 1 (#6336) * Switch to state V1 and add state-trie-migration pallet with dummy manual account. * Initialize limit on runtime upgrade. * add prelude * sp_std prelude only for no_std * Disable filter for signed migration * revert hex dep * use NeverEnsureOrigin * fix * correct fix * check init state in try-runtime Co-authored-by: parity-processbot <> * handle substrate-node-template and substrate-parachain-template (#6541) * Updated Dwellir bootnodes. Now using wss. (#6534) * pvf: Fix missing execution request when retrying preparation (#6537) * pvf: Add checks for result sender when retrying preparation in tests * pvf: Fix missing execution request when retrying preparation * Update comment * pre-checking: Reject failed PVFs (#6492) * pre-checking: Reject failed PVFs * paras: immediately reject any PVF that cannot reach a supermajority * Make the `quorum` reject condition a bit more clear semantically * Add comment * Update implementer's guide * Update a link Not related to the rest of the PR, but I randomly noticed and fixed this. * Update runtime/parachains/src/paras/tests.rs Co-authored-by: s0me0ne-unkn0wn <48632512+s0me0ne-unkn0wn@users.noreply.github.com> * Remove unneeded loop * Log PVF retries using `info!` * Change retry logs to `warn!` and add preparation failure log * Log PVF execution failure * Clarify why we reject failed PVFs * Fix PVF reject runtime benchmarks Co-authored-by: s0me0ne-unkn0wn <48632512+s0me0ne-unkn0wn@users.noreply.github.com> * Fix set-output deprecation (#6554) set-output is being deprecated by GH. More information at https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/ * add erasure-coding benches (#6308) * add erasure-code benches * revert Cargo.lock changes * revert Cargo.lock changes * CI: Code mark to request a pipeline failure (#6562) * XCM v3 (#4097) * cargo fmt * Create benchmarks for XCM instructions introduced in v3 (#4564) * Create benchmarks for BurnAsset and ExpectAsset * Add benchmarks for ExpectOrigin and ExpectError * Add benchmarks for QueryPallet and ExpectPallet * Add benchmarks for ReportTransactStatus and ClearTransactStatus * cargo fmt * Use AllPalletsWithSystem in mocks * Update XCM generic benchmarks for westend * Remove default impls for some XCM weight functions * Fix compilation error * Add weight_args helper attribute * Remove manually written XcmWeightInfo * Parse trailing comma * Revert "Add weight_args helper attribute" This reverts commit 3b7c47a6182e1b9227036c38b406d494c3fcf6fd. * Fixes * Fixes * XCM v3: Introduce querier field into `QueryReponse` (#4732) * Introduce querier field into QueryReponse * Convert &Option to Option<&MultiLocation> &Option is almost always never quite useful, most of the time it still gets converted to an Option<&T> via `as_ref`, so we should simply make functions that accept Option<&T> instead. * Fix tests * cargo fmt * Fix benchmarks * Appease spellchecker * Fix test * Fix tests * Fix test * Fix mock * Fixes * Fix tests * Add test for response queriers * Update xcm/pallet-xcm/src/lib.rs * Test for non-existence of querier Co-authored-by: Keith Yeung * Fixes * Fixes * Add `starts_with` function to `MultiLocation` and `Junctions` (#4835) * add matches_prefix function to MultiLocation and Junctions * rename matches_prefix to starts_with * remove unnecessary main in doc comment Co-authored-by: Bastian Köcher * Make use of starts_with in match_and_split Co-authored-by: Bastian Köcher Co-authored-by: Keith Yeung * XCM v3: Bridge infrastructure (#4681) * XCM bridge infrastructure * Missing bit of cherry-pick * Revamped XCM proc macros; new NetworkIds * Fixes * Formatting * ExportMessage instruction and config type * Add MessageExporter definitions * Formatting * Missing files * Fixes * Initial bridging config API * Allow for two-stage XCM execution * Update xcm/src/v3/mod.rs Co-authored-by: Keith Yeung * XCM crate building again * Initial bridging primitive * Docs * Docs * More work * More work * Merge branch 'gav-xcm-v3' into gav-xcm-v3-bridging * Make build * WithComputedOrigin and SovereignPaidRemoteExporter * Remove TODOs * Slim bridge API and tests. * Fixes * More work * First bridge test passing * Formatting * Another test * Next round of bridging tests * Repot tests * Cleanups * Paid bridging * Formatting * Tests * Spelling * Formatting * Fees and refactoring * Fixes * Formatting * Refactor SendXcm to become two-phase * Fix tests * Refactoring of SendXcm and ExportXcm complete * Formatting * Rename CannotReachDestination -> NotApplicable * Remove XCM v0 * Minor grumbles * Formatting * Formatting * Fixes * Fixes * Cleanup XCM config * Fee handling * Fixes * Formatting * Fixes * Bump Co-authored-by: Keith Yeung * Bump Substrate * XCM v3: `ExchangeAsset` and Remote-locking (#4945) * Asset Exchange and Locks * Make sure XCM typers impl MaxEncodedLen * Basic implementation for locks * Bump Substrate * Missing files * Use new API * Introduce instruction * Big refactor * Docs * Remove deprecated struct * Remove deprecated struct * Repot XCM builder tests * ExchangeAsset test * Exchange tests * Locking tests * Locking tests * Fixes and tests * Fixes * Formatting * Spelling * Add simulator test for remote locking * Fix tests * Bump * XCM v3: Support for non-fungibles (#4950) * NFT support and a test * New files. * Integration tests for sending NFTs * Formatting * Broken Cargo features * Use 2021 edition * Fixes * Formatting * Formatting * Update xcm/xcm-builder/src/asset_conversion.rs Co-authored-by: Keith Yeung * Update xcm/xcm-builder/src/nonfungibles_adapter.rs Co-authored-by: Keith Yeung * Update xcm/xcm-executor/src/lib.rs Co-authored-by: Keith Yeung * Fixes * Fixes * Fixes * Formatting * Fixes Co-authored-by: Bastian Köcher Co-authored-by: Keith Yeung * XCM v3: Context & ID hash (#4756) * send_xcm returns message hash * cargo fmt * Create topic register and instructions * Fix weights * Use tabs * Sketch out XcmContext * Fix doc test * Add the XCM context as a parameter to executor trait fns * Fixes * Add XcmContext parameter * Revert adding context as an arg to SendXcm trait methods * Revert adding context argument to ConvertOrigin trait methods * cargo fmt * Do not change the API of XcmExecutor::execute * Fixes * Fixes * Fixes * Fixes * Remove convenience method * Fixes * Fixes * cargo fmt * Fixes * Add benchmarks for XCM topic instructions * cargo run --quiet --profile=production --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=pallet_xcm_benchmarks::generic --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --template=./xcm/pallet-xcm-benchmarks/template.hbs --output=./runtime/westend/src/weights/xcm/pallet_xcm_benchmarks_generic.rs * Remove context argument on FilterAssetLocation * Fixes * Remove unused import * Fixes * Fixes * Fixes * Accept XCM hash parameter in ExecuteXcm trait methods * cargo fmt * Properly enable sp-io/std * Fixes * default-features = false * Fixes * Fixes * Fixes * Make XcmContext optional in withdraw_asset * Fixes * Fixes * Fixes * Modify tests to check for the correct XCM hash * Small refactor * cargo fmt * Check for expected hash in xcm-builder unit tests * Add doc comment for the optionality of the XCM context in withdraw_asset * Update xcm/src/v3/traits.rs * Update xcm/src/v3/traits.rs * Store XcmContext and avoid rebuilding * Use ref for XcmContext * Formatting * Fix incorrect hash CC @KiChjang * Refactor and make clear fake hashes * Fixes * Fixes * Fixes * Fix broken hashing * Docs * Fixes * Fixes * Fixes * Formatting * Fixes * Fixes * Fixes * Remove unknowable hash * Formatting * Use message hash for greater identifiability * Formatting * Fixes * Formatting Co-authored-by: Keith Yeung Co-authored-by: Parity Bot * Fixes * Fixes * Fixes * Fixes * Formatting * Fixes * Formatting * Fixes * Fixes * Formatting * Formatting * Remove horrible names * Bump * Remove InvertLocation trait (#5092) * Remove InvertLocation trait * Remove unneeded functions * Formatting * Fixes * Remove XCMv1 (#5094) * Remove XCMv1 * Remove XCMv1 * Formatting * Fixes * Fixes * Formatting * derive serialize/deserialize for xcm primitives (#5036) * derive serialize/deserialize for xcm primitives * derive serialize/deserialize for xcm primitives * update v3 * update v2 Co-authored-by: Gav Wood * Update lock * Fixes * Add benchmarks for the ExchangeAsset instruction * `AliasOrigin` instruction stub (#5122) * AliasOrigin instruction stub * Fixes * Fixes * Update substrate * Fixes * Ensure same array length before using copy_from_slice * Fixes * Add benchmarks for the UniversalOrigin instruction * Remove unused import * Remove unused import * Add benchmarks for SetFeesMode instruction * Add benchmarks for asset (un)locking instructions * Leave AliasOrigin unbenchmarked * Fixes after merge * cargo fmt * Fixes * Fixes * Set TrustedReserves to None on both Kusama and Westend * Remove extraneous reserve_asset_deposited benchmark * Fix universal_origin benchmark * cargo run --quiet --profile=production --features=runtime-benchmarks -- benchmark pallet --chain=westend-dev --steps=50 --repeat=20 --pallet=pallet_xcm_benchmarks::generic --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --template=./xcm/pallet-xcm-benchmarks/template.hbs --output=./runtime/westend/src/weights/xcm/pallet_xcm_benchmarks_generic.rs * Don't rely on skipped benchmark functions * Fixes * cargo run --quiet --profile=production --features=runtime-benchmarks -- benchmark pallet --chain=kusama-dev --steps=50 --repeat=20 --pallet=pallet_xcm_benchmarks::generic --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --template=./xcm/pallet-xcm-benchmarks/template.hbs --output=./runtime/kusama/src/weights/xcm/pallet_xcm_benchmarks_generic.rs * Fix unused variables * Fixes * Spelling * Fixes * Fix codec index of VersionedXcm * Allows to customize how calls are dispatched from XCM (#5657) * CallDispatcher trait * fmt * unused import * fix test-runtime * remove JustDispatch type * fix typo in test-runtime * missing CallDispatcher * more missing CallDispatcher * Update comment `NoteAssetLocked` -> `NoteUnlockable` * Fixes * Fixes * Adjust MultiAssets weights based on new wild card variants * Fixes * Fixes * Fixes * Fixes * Fixes * Some late fixes for XCMv3 (#5237) * Maximise chances that trapped assets can be reclaimed * Do origin check as part of ExportMessage for security * Formatting * Fixes * Cleanup export XCM APIs * Formatting * Update xcm/src/v3/junctions.rs * UnpaidExecution instruction and associated barrier. * Tighten barriers (ClearOrigin/QueryResponse) * Allow only 1 ClearOrigin instruction in AllowTopLevelPaidExecutionFrom * Bi-directional teleport accounting * Revert other fix * Build fixes] * Tests build * Benchmark fixes Co-authored-by: Keith Yeung * Update Substrate * Re-export `pub` stuff from universal_exports.rs + removed unecessary clone (#6145) * Re-export `pub` stuff from universal_exports.rs * Removed unnecessary clone * Use 2D weights in XCM v3 (#6134) * Depend upon sp-core instead of sp-runtime * Make sp-io a dev-dependency * Use 2D weights in XCM v3 * cargo fmt * Add XCM pallet migration to runtimes * Use from_parts * cargo fmt * Fixes * cargo fmt * Remove XCMWeight import * Fixes * Fixes * Fixes * Fixes * Use translate in migration * Increase max upward message size in tests * Fix doc test * Remove most uses of from_ref_time * cargo fmt * Fixes * Fixes * Add extrinsic benchmarking to XCM pallet * cargo fmt * Fixes * Use old syntax * cargo fmt * Fixes * Remove hardcoded weights * Add XCM pallet to benchmarks * Use successful origin * Fix weird type parameter compilation issue * Fixes * ".git/.scripts/bench-bot.sh" runtime westend-dev pallet_xcm * ".git/.scripts/bench-bot.sh" runtime rococo-dev pallet_xcm * ".git/.scripts/bench-bot.sh" runtime kusama-dev pallet_xcm * ".git/.scripts/bench-bot.sh" runtime polkadot-dev pallet_xcm * Use benchmarked XCM pallet weights * Fixes * Fixes * Use override instead of skip * Fixes * Fixes * Fixes * Fixes * ".git/.scripts/bench-bot.sh" runtime polkadot-dev pallet_xcm * Fixes * ".git/.scripts/bench-bot.sh" runtime polkadot-dev pallet_xcm * ".git/.scripts/bench-bot.sh" runtime westend-dev pallet_xcm Co-authored-by: command-bot <> * Replace Weight::MAX with 100b weight units * Add test to ensure all_gte in barriers is correct * Update xcm/src/v3/junction.rs Co-authored-by: asynchronous rob * Add more weight tests * cargo fmt * Create thread_local in XCM executor to limit recursion depth (#6304) * Create thread_local in XCM executor to limit recursion depth * Add unit test for recursion limit * Fix statefulness in tests * Remove panic * Use defer and environmental macro * Fix the implementation * Use nicer interface * Change ThisNetwork to AnyNetwork * Move recursion check up to top level * cargo fmt * Update comment Co-authored-by: Bastian Köcher * Add upper limit on the number of overweight messages in the queue (#6298) * Add upper limit on the number of ovwerweight messages in the queue * Add newline * Introduce whitelist for Transact and limit UMP processing to 10 messages per block (#6280) * Add SafeCallFilter to XcmConfig * Limit UMP to receive 10 messages every block * Place 10 message limit on processing instead of receiving * Always increment the message_processed count whenever a message is processed * Add as_derivative to the Transact whitelist * cargo fmt * Fixes * Update xcm/xcm-builder/src/universal_exports.rs Co-authored-by: Branislav Kontur * Fixes * Fixes * Remove topic register and instead use the topic field in XcmContext * Derive some common traits for DispatchBlobError * Fixes * cargo fmt * Fixes * Fixes * Fix comments * Fixes * Introduce WithOriginFilter and apply it as the CallDispatcher for runtimes * Fixes * Appease clippy and fixes * Fixes * Fix more clippy issues * Fixes * ".git/.scripts/bench-bot.sh" runtime polkadot-dev pallet_xcm * ".git/.scripts/bench-bot.sh" runtime westend-dev pallet_xcm * ".git/.scripts/bench-bot.sh" runtime westend-dev pallet_xcm * Add benchmark function for ExportMessage * Fix comment * Add upper limit to DownwardMessageQueues size * Add max size check for queue in can_queue_downward_message * Fixes * Make Transact runtime call configurable * Return Weight::MAX when there is no successful send XCM origin * Update substrate * Fixes * Fixes * Remove ExportMessage benchmark * Remove assertion on Transact instruction benchmark * Make reachable destination configurable in XCM pallet benchmarks * Fixes * Fixes * Remove cfg attribute in fuzzer * Fixes * Remove cfg attribute for XCM pallet in test runtime * Fixes * Use ReachableDest where possible * Fixes * Add benchmark for UnpaidExecution * Update substrate * Ensure benchmark functions pass filters * Add runtime-benchmarks feature to fuzzer * Ensure FixedRateOfFungible accounts for proof size weights * cargo fmt * Whitelist remark_with_event when runtime-benchmarks feature is enabled * Use remark_with_event for Transact benchmarks * Fix Cargo.lock * Allow up to 3 DescendOrigin instructions before UnpaidExecution * cargo fmt * Edit code comment * Check check_origin for unpaid execution privilege * Fixes * Small nits for xcm-v3 (#6408) * Add possibility to skip benchmark for export_message * ".git/.scripts/bench-bot.sh" xcm westend-dev pallet_xcm_benchmarks::generic * Revert * ".git/.scripts/bench-bot.sh" xcm westend-dev pallet_xcm_benchmarks::generic * Add HaulBlobError to `fn haul_blob` * ".git/.scripts/bench-bot.sh" xcm westend-dev pallet_xcm_benchmarks::generic Co-authored-by: command-bot <> * Revert changes to UnpaidExecution * Change AllowUnpaidExecutionFrom to be explicit * Fix log text * cargo fmt * Add benchmarks for XCM pallet version migration (#6448) * Add benchmarks for XCM pallet version migration * cargo fmt * Fixes * Fixes * Fixes * ".git/.scripts/bench-bot.sh" runtime westend-dev pallet_xcm * ".git/.scripts/bench-bot.sh" runtime kusama-dev pallet_xcm * ".git/.scripts/bench-bot.sh" runtime rococo-dev pallet_xcm * ".git/.scripts/bench-bot.sh" runtime polkadot-dev pallet_xcm * Fix benchmarks * Fix benchmarks * ".git/.scripts/bench-bot.sh" runtime westend-dev pallet_xcm * ".git/.scripts/bench-bot.sh" runtime kusama-dev pallet_xcm * ".git/.scripts/bench-bot.sh" runtime rococo-dev pallet_xcm * ".git/.scripts/bench-bot.sh" runtime polkadot-dev pallet_xcm Co-authored-by: command-bot <> * Merge remote-tracking branch 'origin/master' into gav-xcm-v3 * Fixes * Fix comments (#6470) * Specify Ethereum networks by their chain id (#6286) Co-authored-by: Squirrel * Use for Kusama * Use WithComputedOrigin for Polkadot, Rococo and Westend * Update lock * Fix warning * Update xcm/pallet-xcm/src/tests.rs Co-authored-by: Squirrel * Update runtime/parachains/src/ump/migration.rs Co-authored-by: Oliver Tale-Yazdi * Update xcm/pallet-xcm/src/migration.rs Co-authored-by: Oliver Tale-Yazdi * Fixes * cargo fmt * Typo * Update xcm/src/v3/mod.rs Co-authored-by: Oliver Tale-Yazdi * Docs * Docs * Docs * Docs * Docs * Update xcm/src/v3/multiasset.rs Co-authored-by: Oliver Tale-Yazdi * Add tests for MultiAssets::from_sorted_and_deduplicated * Fail gracefully when same instance NFTs are detected during push * Update Substrate to fix benchmarks * Apply suggestions from code review * Update runtime/kusama/src/xcm_config.rs * Rename arguments * Attempt to fix benchmark * ".git/.scripts/commands/bench/bench.sh" runtime polkadot-dev runtime_parachains::ump * Use actual weights for UMP pallet in Polkadot * ".git/.scripts/commands/bench/bench.sh" runtime kusama-dev runtime_parachains::ump * ".git/.scripts/commands/bench/bench.sh" runtime westend-dev runtime_parachains::ump * ".git/.scripts/commands/bench/bench.sh" runtime rococo-dev runtime_parachains::ump Co-authored-by: Keith Yeung Co-authored-by: Alexander Popiak Co-authored-by: Bastian Köcher Co-authored-by: Bastian Köcher Co-authored-by: Parity Bot Co-authored-by: stanly-johnson Co-authored-by: nanocryk <6422796+nanocryk@users.noreply.github.com> Co-authored-by: Branislav Kontur Co-authored-by: asynchronous rob Co-authored-by: command-bot <> Co-authored-by: Vincent Geddes Co-authored-by: Squirrel Co-authored-by: Oliver Tale-Yazdi Co-authored-by: Shawn Tabrizi * Add runtime-benchmarks feature to test client and test service (#6566) * Exclude CI related dictionary files from the CI team approval (#6563) * Enable treasury.spend by Root origin for Polkadot network before Gov2 (#6490) * Enable treasury.spend by Root origin * EnsureRoot -> EnsureRootWithSuccess * Co #12928: NIS should retain funds in reserve (#6569) * Add new weight functions Signed-off-by: Oliver Tale-Yazdi * Configure NIS pallet ReserveId Signed-off-by: Oliver Tale-Yazdi * Bump Signed-off-by: Oliver Tale-Yazdi Co-authored-by: Gav * Allow AuctionAdmin to use Scheduler (#6573) * Companion for substrate#13154 (#6570) * Remove lifetime from `KeyIterator` * Remove the lifetime from the method too * update lockfile for {"substrate"} Co-authored-by: parity-processbot <> * Added `HaulBlobError` to pub re-exports (#6579) * Issue 4804: Notify chain selection of concluded disputes directly (#6512) * Setting up new ChainSelectionMessage * Partial first pass * Got dispute conclusion data to provisioner * Finished first draft for 4804 code * A bit of polish and code comments * cargo fmt * Implementers guide and code comments * More formatting, and naming issues * Wrote test for ChainSelection side of change * Added dispute coordinator side test * FMT * Addressing Marcin's comments * fmt * Addressing further Marcin comment * Removing unnecessary test line * Rough draft addressing Robert changes * Clean up and test modification * Majorly refactored scraper change * Minor fixes for ChainSelection * Polish and fmt * Condensing inclusions per candidate logic * Addressing Tsveto's comments * Addressing Robert's Comments * Altered inclusions struct to use nested BTreeMaps * Naming fix * Fixing inclusions struct comments * Update node/core/dispute-coordinator/src/scraping/mod.rs Add comment to split_off() use Co-authored-by: Marcin S. * Optimizing removal at block height for inclusions * fmt * Using copy trait Co-authored-by: Marcin S. * XCM: `ExpectTransactStatus` instruction (#6578) * Introduce ExpectTransactStatus instruction * Remove other changes * Implement * Implement rest * Benchmark * Update xcm/src/v3/mod.rs Co-authored-by: Keith Yeung * Update xcm/src/v3/mod.rs Co-authored-by: Keith Yeung Co-authored-by: Keith Yeung * construct mmr leaf prior to session pallet hook (#6577) * move pallet_mmr ahead of pallet_session addresses #11797 * document construction of mmr leaf prior to session * update weights (0.9.37) (#6546) (#6555) * kusama: update weights * polkadot: update weights * westend: update weights * rococo: update weights * Companion for Substrate #13157 (#6582) * Update getrandom and version_check * update lockfile for {"substrate"} Co-authored-by: parity-processbot <> * Companion for substrate: Make DispatchError impl MEL (#6583) * bump parity-scale-codec version * update lockfile for {"substrate"} Co-authored-by: parity-processbot <> * Update changelog templates to use new labels (#6585) * Update changelog template to use new T labels * update readme * changelog gen: remove T6 * sync versions with release branch (0.9.37) (#6556) * sync version to current release (0.9.37) * sync spec_version with current release (9370) * sync transaction_version with current release (9370) * Disallow decoding of phantom asset (#6597) * Disallow decoding of phantom asset * Remove pub * remove references to rpm (#6595) * Warn validators with slow hardware (#6269) * Warn validators with slow hardware * update * cargo update -p sp-io Signed-off-by: Oliver Tale-Yazdi * Fix printing logic Signed-off-by: Oliver Tale-Yazdi * fix Signed-off-by: Oliver Tale-Yazdi * add deps Signed-off-by: Oliver Tale-Yazdi * update lockfile for {"substrate"} * fmt Signed-off-by: Oliver Tale-Yazdi Signed-off-by: Oliver Tale-Yazdi Co-authored-by: parity-processbot <> Co-authored-by: Oliver Tale-Yazdi * Add Polkadotters bootnodes for Westend, Kusama and Polkadot (#6476) * Add Polkadotters bootnodes for Westend, Kusama and Polkadot * Remove newlines in bootnodes config section * Fix some unjustified disputes (#6103) * Fix indentation + add warning on participation errors. * Don't vote invalid on internal errors. * Don't dispute on code compression error. * Remove CodeDecompressionError * Candidate not invalid if PVF preparation fails. Instead: Report error. * Fix malus * Add clarifying comment. * cargo fmt * Fix indentation. * Bump lru from 0.8.1 to 0.9.0 (#6538) Bumps [lru](https://github.com/jeromefroe/lru-rs) from 0.8.1 to 0.9.0. - [Release notes](https://github.com/jeromefroe/lru-rs/releases) - [Changelog](https://github.com/jeromefroe/lru-rs/blob/master/CHANGELOG.md) - [Commits](https://github.com/jeromefroe/lru-rs/compare/0.8.1...0.9.0) --- updated-dependencies: - dependency-name: lru dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * [ci] Change check-labels GHA (#6594) * [ci] Change check-labels GHA * change file spec name * change script when no label * add tags * XCM: Add HRMP to SafeCallFilter (#6606) * XCM: Add HRMP to SafeCallFilter * Whitelist several paras_registrar calls * libc crate update (#6616) cargo update -p libc * Bump parity-db (#6617) * New runners for weights and new weights (#6508) * [DO NOT MERGE] test new vm runner for weights 2 * add image * fix merge conflict * apply weights * new weights Co-authored-by: parity-processbot <> * nix upgrade to 0.26.1 (#6622) * Add pov_size and code_size histograms (#6633) Signed-off-by: Andrei Sandu Signed-off-by: Andrei Sandu * Enable `try-runtime` flag in CI (#6587) * Env gate tests The CI should check that it compiles, but not run it. Signed-off-by: Oliver Tale-Yazdi * Enable try-runtime feature in CI Signed-off-by: Oliver Tale-Yazdi * Fix test Signed-off-by: Oliver Tale-Yazdi Signed-off-by: Oliver Tale-Yazdi * Fix XCM transact bench (#6635) Signed-off-by: Oliver Tale-Yazdi Signed-off-by: Oliver Tale-Yazdi * clear migrations included in 0.9.37 (#6630) * polkadot: clear migrations included in 0.9.37 * rococo: clear migrations included in 0.9.37 * westend: clear migrations included in 0.9.37 * kusama: clear migrations included in 0.9.37 * remove unused import: xcm_config::CheckAccount * Co reducing fast-unstake bench time and more (#6552) * update stuff * remove * update * update * update weights * fix tests * update weights * fix a few small things * ".git/.scripts/commands/bench/bench.sh" runtime polkadot-dev pallet-fast-unstake * ".git/.scripts/commands/bench/bench.sh" runtime polkadot-dev pallet-fast-unstake * ".git/.scripts/commands/bench/bench.sh" runtime kusama-dev pallet-fast-unstake * reduce batch size * ".git/.scripts/commands/bench/bench.sh" runtime polkadot-dev pallet-fast-unstake * update * fix * fix * ".git/.scripts/commands/bench/bench.sh" runtime polkadot-dev pallet-fast-unstake * update lockfile for {"substrate"} * fmt * Env gate migration try_fast_unstake_all Signed-off-by: Oliver Tale-Yazdi --------- Signed-off-by: Oliver Tale-Yazdi Co-authored-by: command-bot <> Co-authored-by: Oliver Tale-Yazdi * 13110 Companion: Add WeightToFee and LengthToFee Runtime API (#6536) * Add WeightToFee runtime API impls * Forgot a couple * cargo update -p sp-io Signed-off-by: Oliver Tale-Yazdi * Use master Cargo.lock Signed-off-by: Oliver Tale-Yazdi * cargo update -p sp-io Signed-off-by: Oliver Tale-Yazdi --------- Signed-off-by: Oliver Tale-Yazdi Co-authored-by: Oliver Tale-Yazdi * Storage monitor added to polkadot node (#6619) * Storage monitor added to polkadot node Related to: https://github.com/paritytech/substrate/issues/12399 * Cargo.lock updated * Cargo.lock update * Revert "Cargo.lock update" This reverts commit 04dfe5fe65ea7d1476d4632ad647f2c1c669ab1a. * Apply suggestions from code review Co-authored-by: Bastian Köcher * missing_docs fixes * Cargo.lock updated --------- Co-authored-by: parity-processbot <> Co-authored-by: Bastian Köcher * Make zombienet tests native friendly (#6588) * Make zombienet tests native friendly * Update zombienet_tests/README.md Co-authored-by: Bastian Köcher * Get rid of `{{ZOMBIENET_NATIVE_BINARY_PREFIX}}` * Remove pointless changes * add set_env helper and doc in readme * changes from feedback --------- Co-authored-by: Bastian Köcher Co-authored-by: Javier Viola * Companion: Remove `uncles` related code (#6615) * Companion: Remove `uncles` related code https://github.com/paritytech/substrate/pull/13216 * Fix compilation * update lockfile for {"substrate"} --------- Co-authored-by: parity-processbot <> * Update benchmark's successful origin api (#6598) * Update benchmark's successful origin api * rustfmt * unwrap for indirect origin dep * replace unwrap by expect with a message --------- Co-authored-by: parity-processbot <> * companion for substrate #13237 (#6626) * companion for https://github.com/paritytech/substrate/pull/13237 * test-runtime: add MaxSetIdSessionEntries * update lockfile for {"substrate"} --------- Co-authored-by: parity-processbot <> * ignore fast-unstake remote test (#6641) * Bump docker/build-push-action from 3 to 4 (#6651) Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 3 to 4. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v3...v4) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Some late short-term fixes for dispute slashing (#6249) * disputes/slashing: slash only backers for ForInvalid * add an assertion in mock impl * fix tests * do not slash backers on onconcluded disputes * slash an intersection of backers and losers * zombienet/disputes: check for offence only for invalid disputes * add backing votes to disputes bench builder * Update runtime/parachains/src/builder.rs * Brad implementers guide revisions 2 (#6239) * Add disputes subsystems fix * Updated dispute approval vote import reasoning * Improved wording of my changes * Resolving issues brought up in comments * Update disputes prioritisation in `dispute-coordinator` (#6130) * Scraper processes CandidateBacked events * Change definition of best-effort * Fix `dispute-coordinator` tests * Unit test for dispute filtering * Clarification comment * Add tests * Fix logic If a dispute is not backed, not included and not confirmed we don't participate but we do import votes. * Add metrics for refrained participations * Revert "Add tests" This reverts commit 7b8391a087922ced942cde9cd2b50ff3f633efc0. * Revert "Unit test for dispute filtering" This reverts commit 92ba5fe678214ab360306313a33c781338e600a0. * fix dispute-coordinator tests * Fix scraping * new tests * Small fixes in guide * Apply suggestions from code review Co-authored-by: Andrei Sandu <54316454+sandreim@users.noreply.github.com> * Fix some comments and remove a pointless test * Code review feedback * Clarification comment in tests * Some tests * Reference counted `CandidateHash` in scraper * Proper handling for Backed and Included candidates in scraper Backed candidates which are not included should be kept for a predetermined window of finalized blocks. E.g. if a candidate is backed but not included in block 2, and the window size is 2, the same candidate should be cleaned after block 4 is finalized. Add reference counting for candidates in scraper. A candidate can be added on multiple block heights so we have to make sure we don't clean it prematurely from the scraper. Add tests. * Update comments in tests * Guide update * Fix cleanup logic for `backed_candidates_by_block_number` * Simplify cleanup * Make spellcheck happy * Update tests * Extract candidate backing logic in separate struct * Code review feedback * Treat backed and included candidates in the same fashion * Update some comments * Small improvements in test * spell check * Fix some more comments * clean -> prune * Code review feedback * Reword comment * spelling Co-authored-by: Andrei Sandu <54316454+sandreim@users.noreply.github.com> * approval-voting: remove redundant validation check (#6266) * approval-voting: remove a redundant check * candidate-validation: remove unreachable check * remove fill_block (#6200) Co-authored-by: parity-processbot <> * fix a compilation warning (#6279) Fixes #6277. * Only report concluded if there is an actual dispute. (#6270) * Only report concluded if there is an actual dispute. Hence no "non"-disputes will be added to disputes anymore. * Fix redundant check. * Test for no onesided disputes. Co-authored-by: eskimor * [ci] fix buildah image (#6281) * Revert special casing of Kusama for grandpa rounds. (#6217) Co-authored-by: eskimor * Fixes "for loop over an `Option`" warnings (#6291) Was seeing these warnings when running `cargo check --all`: ``` warning: for loop over an `Option`. This is more readably written as an `if let` statement --> node/core/approval-voting/src/lib.rs:1147:21 | 1147 | for activated in update.activated { | ^^^^^^^^^^^^^^^^ | = note: `#[warn(for_loops_over_fallibles)]` on by default help: to check pattern in a loop use `while let` | 1147 | while let Some(activated) = update.activated { | ~~~~~~~~~~~~~~~ ~~~ help: consider using `if let` to clear intent | 1147 | if let Some(activated) = update.activated { | ~~~~~~~~~~~~ ~~~ ``` My guess is that `activated` used to be a SmallVec or similar, as is `deactivated`. It was changed to an `Option`, the `for` still compiled (it's technically correct, just weird), and the compiler didn't catch it until now. * companion for #12599 (#6290) * companion for #12599 * update Cargo.lock * use cargo path instead of diener * update lockfile for {"substrate"} Co-authored-by: parity-processbot <> * remove the runtime check and test * append keys on past-session slashing * runtime/disputes: allow importing backing votes after explicit for * explicit MaliciousBacker error and a test * update an outdated comment * Revert "update an outdated comment" This reverts commit 7c4c3f5a848f16e2b61435e981d814f00333ed41. * Revert "remove the runtime check and test" This reverts commit a5bff0c75e77effb5b7d3a1691de1b14bcdbd648. * incremental punishment post conclusion + test * punish backers post FOR vote * remove unnecessary lifetime annotation * add a comment to zombinet test * typo * fmt * post merge test fixes * fix test after changes in master * address review nits --------- Co-authored-by: Bradley Olson <34992650+BradleyOlson64@users.noreply.github.com> Co-authored-by: Tsvetomir Dimitrov Co-authored-by: Andrei Sandu <54316454+sandreim@users.noreply.github.com> Co-authored-by: Sergej Sakac <73715684+Szegoo@users.noreply.github.com> Co-authored-by: eskimor Co-authored-by: eskimor Co-authored-by: Alexander Samusev <41779041+alvicsam@users.noreply.github.com> Co-authored-by: Marcin S Co-authored-by: Niklas Adolfsson * Fix XCM bench for new substrate refs (#6663) * testing new substrate refs * Fix bench Signed-off-by: Oliver Tale-Yazdi * Fix Signed-off-by: Oliver Tale-Yazdi * Propagate features Signed-off-by: Oliver Tale-Yazdi --------- Signed-off-by: Oliver Tale-Yazdi Co-authored-by: Oliver Tale-Yazdi * [Substrate companion] Update beefy-merkle-tree dep to merkle-tree (#6528) * Update beefy-merkle-tree dep to merkle-tree * update merkle-tree to binary-merkle-tree * update substrate refs --------- Co-authored-by: Adrian Catangiu * kusama: allow root to cancel/kill referendums (#6665) * kusama: allow root to cancel/kill referendums * fix semicolons --------- Co-authored-by: parity-processbot <> * Companion for substrate #13215 - Add new BEEFY api to runtimes (#6623) * runtimes: add new BEEFY api * update lockfile for {"substrate"} * Add a CI check ensuring the code has license headers (#6609) * Introduce a job scanning and ensuring there are licenses * Showcase a red test * Add missing licenses * Cleanup * Extend the check * Add missing licenses * CI trigger * Bump parity-scale-codec to 3.3.0 (#6666) * Bump tokio from 1.24.1 to 1.24.2 (#6671) Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.24.1 to 1.24.2. - [Release notes](https://github.com/tokio-rs/tokio/releases) - [Commits](https://github.com/tokio-rs/tokio/commits) --- updated-dependencies: - dependency-name: tokio dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Added Dwellir bootnodes with non-ssl. (#6544) * pvf: Log memory metrics from preparation (#6565) * Add getrusage and memory tracker for precheck preparation * Log memory stats metrics after prechecking * Fix tests * Try to fix errors (linux-only so I'm relying on CI here) * Try to fix CI * Add module docs for `prepare/memory_stats.rs`; fix CI error * Report memory stats for all preparation jobs * Use `RUSAGE_SELF` instead of `RUSAGE_THREAD` Not sure why I did that -- was a brainfart on my end. * Revert last commit (RUSAGE_THREAD is correct) * Use exponential buckets * Use `RUSAGE_SELF` for `getrusage`; enable `max_rss` metric for MacOS * Increase poll interval * Revert "Use `RUSAGE_SELF` for `getrusage`; enable `max_rss` metric for MacOS" This reverts commit becf7a815409ab530fc61370abffcd1b97b9a777. * Add bootnodes to Polkadot, Kusama and Westend (#6499) * Add kusama bootnodes - Gatotech * Add Polkadot bootnodes - Gatotech * Add Westend bootnodes - Gatotech * Add kusama bootnodes - Metaspan * Add Polkadot bootnodes - Metaspan * Add Westend bootnodes - Metaspan * Fix dependabot labels (#6674) * Disable `hostperfcheck` by default (#6640) This feature should only be activated by the polkadot binary. Otherwise parachains may accidentally activate this feature. * Companion for substrate#13160 (#6661) * Update `wasmtime` to 5.0.0 (+ other deps) * update lockfile for {"substrate"} * Update `substrate` to dd4497d8a459d5e3ecac367b991d5dae1f0940c5 * Update `substrate` to 3d60070c1373bc0383aa4f003a5b243c4c4f7118 --------- Co-authored-by: parity-processbot <> * Weights for new referenda/democracy extrinsics (#6638) * Weights for new referenda/democracy extrinsics * fix * substrate update --------- Co-authored-by: parity-processbot <> * Bump bounded-vec from 0.6.0 to 0.7.1 (#6101) Bumps [bounded-vec](https://github.com/ergoplatform/bounded-vec) from 0.6.0 to 0.7.1. - [Release notes](https://github.com/ergoplatform/bounded-vec/releases) - [Changelog](https://github.com/ergoplatform/bounded-vec/blob/develop/CHANGELOG.md) - [Commits](https://github.com/ergoplatform/bounded-vec/compare/v0.6.0...v0.7.1) --- updated-dependencies: - dependency-name: bounded-vec dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Fix update-node-template script (#6679) * fix the branch name * fix usage of $TEMPLATE_SOURCE * Update `mockall` (#6684) * Update `mockall` * update lockfile for {"substrate"} --------- Co-authored-by: parity-processbot <> * companion substrate#13305 (#6680) * fix all runtimes * update lockfile for {"substrate"} --------- Co-authored-by: parity-processbot <> * Remove BoundedVec half-impls in xcm (#6636) * Replace sp-core dependency with more primitive crates * Remove BoundedVec half-impls in xcm * Fixes * Bump bounded-collections * Address review comments * Bump bounded-collections * Fix benchmarks * Fixes * Fixes * cargo fmt * Fix tests * Update url * Bump url to 2.3.1 * Bump anyhow * Use bounded-collections in pallet-xcm * Update substrate * Introduce jemalloc-allocator feature flag (#6675) * Introduce jemalloc-stats feature flag * remove unneeded space * Update node/overseer/src/lib.rs Co-authored-by: Marcin S. * Update Cargo.toml Co-authored-by: Marcin S. * revert making tikv-jemallocator depend on jemalloc-stats * conditionally import memory_stats instead of using dead_code * fix test via expllicit import * Add jemalloc-stats feature to crates, propagate it from root * Apply `jemalloc-stats` feature to prepare mem stats; small refactor * effect changes recommended on PR * Update node/overseer/src/metrics.rs Co-authored-by: Marcin S. * fix compile error on in pipeline for linux. missing import * Update node/overseer/src/lib.rs Co-authored-by: Bastian Köcher * revert to defining collect_memory_stats inline --------- Co-authored-by: Marcin S. Co-authored-by: Marcin S Co-authored-by: Bastian Köcher * New template for a full unfiltered list of PRs (#6692) * av-store: skip processing finalized blocks while syncing (#6691) * edit xcm simulator test code (#6695) * Fix release notes templates (#6697) * WIP * Fix templates - fix conditions to fetch misc PRs - render the misc section only if required - add html comment to help debugging - add a new API section to T2 labels * Companion for substrate #13159 (#6620) * SetMembersOrigin * Update Substrate * Remove bags list from runtime common --------- Co-authored-by: Bastian Köcher * v3::Junction supports small (32-byte max) "vecs". (#6716) * v3::Junction supports small (32-byte max) "vecs". * Formatting * Add test * Refactor PVF preparation memory stats (#6693) * Refactor PVF preparation memory stats The original purpose of this change was to gate metrics that are unsupported by some systems behind conditional compilation directives (#[cfg]); see https://github.com/paritytech/polkadot/pull/6675#discussion_r1099996209. Then I started doing some random cleanups and simplifications and got a bit carried away. 🙈 The code should be overall tidier than before. Changes: - Don't register unsupported metrics (e.g. `max_rss` on non-Linux systems) - Introduce `PrepareStats` struct as an abstraction over the `Ok` values of `PrepareResult`. It is cleaner, and can be easily modified in the future. - Other small changes * Minor fixes to comments * Fix compile errors * Try to fix some Linux errors * Mep * Fix candidate-validation tests * Update docstring * add warp sync params to enable parachain warp sync (#6334) * add warp sync params to enable parachain warp sync * update lockfile for {"substrate"} --------- Co-authored-by: parity-processbot <> * Executor Environment parameterization (#6161) * Re-apply changes without Diener, rebase to the lastest master * Cache pruning * Bit-pack InstantiationStrategy * Move ExecutorParams version inside the structure itself * Rework runtime API and executor parameters storage * Pass executor parameters through backing subsystem * Update Cargo.lock * Introduce `ExecutorParams` to approval voting subsys * Introduce `ExecutorParams` to dispute coordinator * `cargo fmt` * Simplify requests from backing subsys * Fix tests * Replace manual config cloning with `.clone()` * Move constants to module * Parametrize executor performing PVF pre-check * Fix Malus * Fix test runtime * Introduce session executor params as a constant defined by session info pallet * Use Parity SCALE codec instead of hand-crafted binary encoding * Get rid of constants; Add docs * Get rid of constants * Minor typo * Fix Malus after rebase * `cargo fmt` * Use transparent SCALE encoding instead of explicit * Clean up * Get rid of relay parent to session index mapping * Join environment type and version in a single enum element * Use default execution parameters if running an old runtime * `unwrap()` -> `expect()` * Correct API version * Constants are back in town * Use constants for execution environment types * Artifact separation, first try * Get rid of explicit version * PVF execution queue worker separation * Worker handshake * Global renaming * Minor fixes resolving discussions * Two-stage requesting of executor params to make use of runtime API cache * Proper error handling in pvf-checker * Executor params storage bootstrapping * Propagate migration to v3 network runtimes * Fix storage versioning * Ensure `ExecutorParams` serialization determinism; Add comments * Rename constants to make things a bit more deterministic Get rid of stale code * Tidy up a structure of active PVFs * Minor formatting * Fix comment * Add try-runtime hooks * Add storage version write on upgrade Co-authored-by: Andronik * Add pre- and post-upgrade assertions * Require to specify environment type; Remove redundant `impl`s * Add `ExecutorParamHash` creation from `H256` * Fix candidate validation subsys tests * Return splittable error from executor params request fn * Revert "Return splittable error from executor params request fn" This reverts commit a85038da0f9395096fdfd57cb6e60f74fec0258a. * Decompose approval voting metrics * Use more relevant errors * Minor formatting fix * Assert a valid environment type instead of checking * Fix `try-runtime` hooks * After-merge fixes * Add migration logs * Remove dead code * Fix tests * Fix tests * Back to the strongly typed implementation * Promote strong types to executor interface * Remove stale comment * Move executor params to `SessionInfo`: primitives and runtime * Move executor params to `SessionInfo`: node * Try to bump primitives and API version * Get rid of `MallocSizeOf` * Bump target API version to v4 * Make use of session index already in place * Back to v3 * Fix all the tests * Add migrations to all the runtimes * Make use of existing `SessionInfo` in approval voting subsys * Rename `TARGET` -> `LOG_TARGET` * Bump all the primitives to v3 * Fix Rococo ParachainHost API version * Use `RollingSessionWindow` to acquire `ExecutorParams` in disputes * Fix nits from discussions; add comments * Re-evaluate queue logic * Rework job assignment in execution queue * Add documentation * Use `RuntimeInfo` to obtain `SessionInfo` (with blackjack and caching) * Couple `Pvf` with `ExecutorParams` wherever possible * Put members of `PvfWithExecutorParams` under `Arc` for cheap cloning * Fix comment * Fix CI tests * Fix clippy warnings * Address nits from discussions * Add a placeholder for raw data * Fix non exhaustive match * Remove redundant reexports and fix imports * Keep only necessary semantic features, as discussed * Rework `RuntimeInfo` to support mock implementation for tests * Remove unneeded bound * `cargo fmt` * Revert "Remove unneeded bound" This reverts commit 3bdfc68202a371bb4cf2978e5224c9d05d641c24. * Fix PVF host tests * Fix PVF checker tests * Fix overseer declarations * Simplify tests * `MAX_KEEP_WAITING` timeout based on `BACKGING_EXECUTION_TIMEOUT` * Add a unit test for varying executor parameters * Minor fixes from discussions * Add prechecking max. memory parameter (see paritytech/srlabs_findings#110) * Fix and improve a test * Remove `ExecutionEnvironment` and `RawData` * New primitives versioning in parachain host API * `disputes()` implementation for Kusama and Polkadot * Move `ExecutorParams` from `vstaging` to stable primitives * Move disputes from `vstaging` to stable implementation * Fix `try-runtime` * Fixes after merge * Move `ExecutorParams` to the bottom of `SessionInfo` * Revert "Move executor params to `SessionInfo`: primitives and runtime" This reverts commit 198835592041e021138f67e2fa4965652bc1af14. * Always use fresh activated live hash in pvf precheck (re-apply 029b82b7db0a0e5e4fd605e940aa748c59fdda77) * Fixing tests (broken commit) * Fix candidate validation tests * Fix PVF host test * Minor fixes * Address discussions * Restore migration * Fix `use` to only include what is needed instead of `*` * Add comment to never touch `DEFAULT_CONFIG` * Update migration to set default `ExecutorParams` for `dispute_period` sessions back * Use `earliest_stored_session` instead of calculations * Nit * Add logs * Treat any runtime error as `NotSupported` again * Always return default executor params if not available * Revert "Always return default executor params if not available" This reverts commit b58ac4482ef444c67a9852d5776550d08e312f30. * Add paritytech/substrate#9997 workaround * `cargo fmt` * Remove migration (again!) * Bump executor params to API v4 (backport from #6698) --------- Co-authored-by: Andronik * Update release-related templates for the new changelogerator output format (#6702) * update templates to upcoming context.json format * fix merging error * more fixes * fix templates * fix * print "changelogerator --version" * print changelogerator version as debug * remove excluded debug info * WIP * Switch to changelogerator v0.10.1 * Update bundle deps * fix --------- Co-authored-by: Wilfried Kopp * Companion for substrate #12910: BEEFY metrics (#6706) * service: provide prometheus registry for beefy metrics * update lockfile for {"substrate"} --------- Co-authored-by: parity-processbot <> * Use a `BoundedVec` in `ValidationResult` (#6603) * Use a `BoundedVec` in `ValidationResult` > Use a `BoundedVec` for `upward_messages` and `horizontal_messages` in order to > limit the number of individual messages/memory allocations right at decoding > time. The reason for this is that the `ValidationResult` may contain a code > upgrade (including a full PVF binary), so the total size limit can't be set > too low and this limit will still allow several millions of upward messages, > which will (due to the memory allocator overhead) already have a > non-negligible memory footprint in decoded form. * List all fields when hashing so we don't miss one * Define types for `BoundedVec`s of messages * Fix test compile errors * Depend on `bounded-collections` 0.1.4 (fixes allocation issue) * Fix compilation issue * Derive `Hash` instead of manual `impl` * Avoid use of unwrap * Change `MaxMemorySize` to `MaxMemoryPages` (#6728) * Change `MaxMemorySize` to `MaxMemoryPages` We should set the max memory for the executor in pages (64KiB) and not in bytes. The wasm memory is always a multiple of a page and we should use the same terminology. * FMT * Fix warning * Fix a metric description (#6732) * Do not call longest chain by default (#6704) * Do not call longest chain by default We always called longest chain by default just for some potential logging. This was probably some oversight for when this select chain implementation was introduced. * Fix tests * Companion for substrate #13121 - BEEFY Equivocations support (#6593) * runtimes: implement new BeefyApi Signed-off-by: acatangiu * rococo-runtime: add ValidateUnsigned to pallet_beefy * update lockfile for {"substrate"} --------- Signed-off-by: acatangiu Co-authored-by: parity-processbot <> * Retire `OldV1SessionInfo` (#6744) * Use PVF code paired with executor params wherever possible (#6742) * Fix auction bench (#6747) * Adjust command * Move imports * Chain-specific blocktime * update lockfile for {"substrate"} * cargo update -p sp-io Signed-off-by: Oliver Tale-Yazdi * Fix bench Signed-off-by: Oliver Tale-Yazdi * Export constants from node service Signed-off-by: Oliver Tale-Yazdi * Use constants in CLI Signed-off-by: Oliver Tale-Yazdi --------- Signed-off-by: Oliver Tale-Yazdi Co-authored-by: Piotr Mikołajczyk Co-authored-by: parity-processbot <> * `BlockId` removal: refactor of runtime API (#6721) * BlockId removal: refactor of runtime API It changes the first argument of all generated runtime API calls from: `BlockId` to: `Block::Hash` * fmt * update lockfile for {"substrate"} --------- Co-authored-by: parity-processbot <> * Companion for Substrate#13411: frame/beefy: prune entries in set id session mapping (#6743) * rococo-runtime: configure pallet_beefy::MaxSetIdSessionEntries * update lockfile for {"substrate"} --------- Co-authored-by: parity-processbot <> * Companion PR for PR#13119 (#6683) * Companion PR for PR#13119 * restart ci * update lockfile for {"substrate"} * Use Master Cargo.lock Signed-off-by: Oliver Tale-Yazdi * cargo update -p sp-io Signed-off-by: Oliver Tale-Yazdi * Use Master Cargo.lock Signed-off-by: Oliver Tale-Yazdi * cargo update -p sp-io Signed-off-by: Oliver Tale-Yazdi --------- Signed-off-by: Oliver Tale-Yazdi Co-authored-by: parity-processbot <> Co-authored-by: Oliver Tale-Yazdi * `BlockId` removal: `BlockBuilderProvider::new_block_at` (#6734) * `BlockId` removal: `BlockBuilderProvider::new_block_at` It changes the arguments of `BlockBuilderProvider::new_block_at` from: `BlockId` to: `Block::Hash` * useless import removed * update lockfile for {"substrate"} --------- Co-authored-by: parity-processbot <> * Companion for Substrate #13410: Introduce EnsureOrigin to democracy.propose (#6750) * feat: set SubmitOrigin in all affected runtimes * update lockfile for {"substrate"} --------- Co-authored-by: parity-processbot <> * Companion for substrate#13284 (#6653) * Align iterator use to new substrate * update lockfile for {"substrate"} --------- Co-authored-by: parity-processbot <> * Add Turboflakes bootnodes to Polkadot, Kusama and Westend (#6628) * polkadot companion #12608 (Pools claim permissions) (#6753) * update weights functions * + placeholder weight * ".git/.scripts/commands/bench/bench.sh" runtime polkadot-dev pallet_nomination_pools * update weights * update lockfile for {"substrate"} --------- Co-authored-by: command-bot <> * Remove state migration from westend runtime. (#6737) * clean state_trie_migration from westend * update cargo.lock * Revert "clean state_trie_migration from westend" This reverts commit b1d55c688e9a8a2fbd155f0a9ddaba9766ad101c. * cleanup. * use storage_alias * Revert "use storage_alias" This reverts commit 5289745d1592a14db0063d9ee111137473993f41. * Revert "Revert "use storage_alias"" This reverts commit d4c688acdddf29a09c79a4eef52ab4095128e5b3. * Force alias. * magic * clean up executed migrations (#6763) * kusama: clean up executed migrations * polkadot: clean up executed migrations * rococo: clean up executed migrations * westend: clean up executed migrations * Corrected weight trader comment (#6752) * Corrected weight trader comment * ".git/.scripts/commands/fmt/fmt.sh" --------- Co-authored-by: command-bot <> * Improve XCM fuzzer (#6190) * Add improved XCM fuzzer * Add command for running a single input * Add installation command * Fix @m-cat's nit * Add newline Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> * Add info about current directory in fuzzing README * Update Cargo.lock --------- Co-authored-by: Keith Yeung Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> * Revert back to bare metal runners for weights generation (#6762) * Revert back to bare metal runners for weights generation * new old weights --------- Co-authored-by: alvicsam * Companion for Substrate#12520 (#6730) * Companion for Substrate#12520 https://github.com/paritytech/substrate/pull/12520 * Fix * update lockfile for {"substrate"} --------- Co-authored-by: parity-processbot <> * Explicitly Handling ProvisionableData Cases (#6757) * Initial pass * fmt * Lock changes * Implementers guide edit * Reasoning changes * typo Co-authored-by: Marcin S. * Revert "Lock changes" This reverts commit 3131a5245c6349743789270e6d1ad7842dc4c9df. * Getting rid of cargo.lock changes * Argumentation update * fmt --------- Co-authored-by: Marcin S. * Ensure max_weight is assigned properly in AllowTopPaidExecutionFrom (#6787) * Automatically format ci pipeline specs with prettier (#6783) * [Companion] GRANDPA crate renaming (#6776) * Companion for grandpa crate renaming * lock update * Use `BTreeSet` as the internal type of `ParachainsCache` (#6795) * Add tests for ParachainsCache * Use BTreeSet for ParachainsCache internals * Use `into_iter()` instead of cloneing storage vals * XCM: Limit the max number of assets weighable in MultiAssets (#6786) * Limit the max number of assets weighable in MultiAssets * Apply suggestions from code review Co-authored-by: Gavin Wood * Add tests * cargo fmt * Include proof size weight in tests * Add comments --------- Co-authored-by: Gavin Wood * update weights (#6798) * polkadot: update weights * westend: update weights * kusama: update weights * rococo: update weights * [Companion] BEEFY crates renaming (#6799) * Temporary commit to make the Substrate CI happy * Revert "Temporary commit to make the Substrate CI happy" This reverts commit 9eb2fd223c3e36312242d4fda4ebacf3dd732547. * Align to substrate master * Update lock * Adjust some naming according to the new substrate crates * Bump `crossbeam-utils` 0.8.9 -> 0.8.14 (#6800) * changelog: fix migration listing (#6806) * changelog: fix runtime migration listing * changelog: fix db migration listing * Get rid of unnecessary cloning and work. (#6808) Co-authored-by: eskimor * [XCM] Multiple `FungiblesAdapter`s support + `WeightTrader::buy_weight` more accurate error (#6739) * Change ParaId->Sibling for `SiblingParachainConvertsVia` * [XCM] Multiple `FungiblesAdapter`s support + `WeightTrader::buy_weight` more accurate error * Added test for `ConvertedConcreteId` with `AsPrefixedGeneralIndex` * Solution 3. - new MatchedConvertedConcreteId with matching capabilities * Review fixes * Renamed `AssetNotFound` -> `AssetNotHandled` --------- Co-authored-by: parity-processbot <> * Migrate to `Weight::from_parts` (#6794) * Migrate to from_parts Have a look at https://github.com/ggwpez/substrate-scripts/blob/master/migrate-from-parts.py Signed-off-by: Oliver Tale-Yazdi * Adapt to master Signed-off-by: Oliver Tale-Yazdi * update lockfile for {"substrate"} --------- Signed-off-by: Oliver Tale-Yazdi Co-authored-by: parity-processbot <> * Companion for substrate#13509: bump API versions of {Beefy,Mmr}Api (#6809) * version {Beefy,Mmr}Api * update lockfile for {"substrate"} * Forgotten re-export for `MatchedConvertedConcreteId` (#6815) * Removing Outdated References to Misbehavior Arbitration Subsystem (#6814) * Provisioner guide entry update * Removing mentions of misbehavior arbitration sub * fmt * Bump parity-db (#6816) * Bump parity-db * update lockfile for {"substrate"} --------- Co-authored-by: parity-processbot <> * Freeze note on `SessionInfo`. (#6818) * Add note about frozen `SessionInfo`. * Better comment. --------- Co-authored-by: eskimor * Introduce XCM matcher for writing barriers (#6756) * Introduce XCM matcher for writing barriers * Fix compilation * cargo fmt * Add more doc comments * Add mod doc comment * More doc comments * Add tests and fix logic * Remove redundant syntax * Add more doc comments * Add more doc comments * Add more doc comments * Change handle_import_statements to FatalResult (#6820) * Changing dispute db errors to fatal * fmt * Change node-key for bootnodes (#6772) * Additional tracing in `provisioner`, `vote_selection` and `dispute-coordinator` (#6775) * Additional tracing in `provisioner`, `vote_selection` * Add `fetched_onchain_disputes` metric to provisioner * Some tracelines in dispute-coordinator TODO: cherry pick this in the initial branch!!! * Remove spammy logs * Remove some trace lines * Decrease expected peer count in zombinenet tests (#6826) * Decrease expected peer count in zombinenet tests Recent change in the in/out peer ratio caused some of the zombienet tests to fail. Adjust the number of expected peers to reflect the new ratio to make tests pass again. * Increase `--out-peers` to 15 for paritydb test * Don't check the number of connected peers * Polkadot XCM Body constants (#6788) Co-authored-by: parity-processbot <> * Don't send `ActiveLeaves` from leaves in db on startup in Overseer (#6727) * Don't send `ActiveLeaves` from leaves in db on startup in Overseer. Wait for fresh leaves instead. * Don't pass initial set of leaves to Overseer * Fix compilation error in subsystem-test-helpers * Companion for paritytech/substrate#12828 (#6380) * Companion for paritytech/substrate#12828 * Pass sync service * Fix test * Fix tests again * update lockfile for {"substrate"} * cargo fmt --------- Co-authored-by: parity-processbot <> * changelog: update template for new label behavior (E3/E4) (#6804) * update changelog template for new label behavior (E3/E4) This distinguishes E3 and E4 labels in the changelog output * Separate E3/E4 notices in changelog * fixup * Bump `blake2b_simd` to 1.0.1 (#6829) * bump `zombienet` version to v1.3.37 (#6773) * bump zombienet version * remove redundant 'is up' assertion * bump zombienet version * bump to latest version of zombienet * add more time to check peers * Remove hardcoded paths from `dispute-valid-block` zombienet test for malus (#6837) * Companion for Substrate #13425 (#6784) * Align to substrate refactory * update lockfile for {"substrate"} --------- Co-authored-by: parity-processbot <> * Correct comment (#6839) * Move PVF timeouts to executor environment parameters (#6823) * Move PVF timeouts to executor environment parameters * Typo Co-authored-by: Marcin S. * Fix comments * Change handle_import_statements to FatalResult (#6820) * Changing dispute db errors to fatal * fmt * Change node-key for bootnodes (#6772) * Additional tracing in `provisioner`, `vote_selection` and `dispute-coordinator` (#6775) * Additional tracing in `provisioner`, `vote_selection` * Add `fetched_onchain_disputes` metric to provisioner * Some tracelines in dispute-coordinator TODO: cherry pick this in the initial branch!!! * Remove spammy logs * Remove some trace lines * Rename and fix things * Fix comments * Typo * Minor fixes * Add codec indexes; Remove macro --------- Co-authored-by: Marcin S. Co-authored-by: Bradley Olson <34992650+BradleyOlson64@users.noreply.github.com> Co-authored-by: Petr Mensik Co-authored-by: Tsvetomir Dimitrov * Update `substrate` to 48e7cb147cb9a27125fd2e82edbcf4d0ed5927c4 (#6851) * Adding Dispute Participation Metrics (#6838) * Added participation and queue sizes metrics * First draft of all metric code * Tests pass * Changed Metrics to field on participation + queues * fmt * Improving naming * Refactor, placing timer in ParticipationRequest * fmt * Final cleanup * Revert "Final cleanup" This reverts commit 02e5608df64b2e0f7810905e4508673b2037d351. * Changing metric names * Implementing Eq only for unit tests * fmt * Companion for Substrate #13564 (#6845) * Update beefy pallet to last offence report system * update lockfile for {"substrate"} --------- Co-authored-by: parity-processbot <> * Remove use of Store trait (#6835) * Remove use of Store trait from runtime directory * Remove Store trait usage from xcm directory * Run cargo fmt * update lockfile for {"substrate"} --------- Co-authored-by: parity-processbot <> * Delete unused Cargo.lock (#6870) Signed-off-by: Oliver Tale-Yazdi * Update orchestra to the recent version (#6854) * Test the recent orchestra changes * Update orchestra and metered-channel * Companion for paritytech/substrate#13592 (#6869) * Move configs * Start using `NetworkService` traits from `sc-network` * Fix stuff * Remove `sc-network-common` as dependency * update lockfile for {"substrate"} --------- Co-authored-by: parity-processbot <> * Sync versions with current release (0.9.39) (#6875) * PVF: Document that preparation cannot lead to disputes (#6873) * PVF: Document that preparation cannot lead to disputes * Add warning for deterministic errors * Fix warning * Council as SpendOrigin (#6877) * Bump git2 from 0.16.0 to 0.16.1 (#6601) Bumps [git2](https://github.com/rust-lang/git2-rs) from 0.16.0 to 0.16.1. - [Release notes](https://github.com/rust-lang/git2-rs/releases) - [Commits](https://github.com/rust-lang/git2-rs/compare/git2-curl-0.16.0...0.16.1) --- updated-dependencies: - dependency-name: git2 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump bumpalo from 3.8.0 to 3.12.0 (#6599) Bumps [bumpalo](https://github.com/fitzgen/bumpalo) from 3.8.0 to 3.12.0. - [Release notes](https://github.com/fitzgen/bumpalo/releases) - [Changelog](https://github.com/fitzgen/bumpalo/blob/main/CHANGELOG.md) - [Commits](https://github.com/fitzgen/bumpalo/compare/3.8.0...3.12.0) --- updated-dependencies: - dependency-name: bumpalo dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump libgit2-sys from 0.14.1+1.5.0 to 0.14.2+1.5.1 (#6600) Bumps [libgit2-sys](https://github.com/rust-lang/git2-rs) from 0.14.1+1.5.0 to 0.14.2+1.5.1. - [Release notes](https://github.com/rust-lang/git2-rs/releases) - [Commits](https://github.com/rust-lang/git2-rs/compare/0.14.1...libgit2-sys-0.14.2) --- updated-dependencies: - dependency-name: libgit2-sys dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * companion for #13555 (#6842) * companion for #13555 * update lockfile for {"substrate"} * fix: `decl_TryRuntime` -> `decl_for_try_runtime` --------- Co-authored-by: parity-processbot <> * polkadot companion: #13128 (Pools commission) (#6264) * migrate to pools v4 * update types + weights * rm BlockNumberToU32 * fmt * fix * update weights * fix RocksDbWeight * fix function name * weights * use 1 weight format * update claim payout weights * + as u64 * fix rebase + fmt * add weights * more weights * ".git/.scripts/commands/bench/bench.sh" runtime polkadot-dev pallet_nomination_pools * ".git/.scripts/commands/bench/bench.sh" runtime kusama-dev pallet_nomination_pools * ".git/.scripts/commands/bench/bench.sh" runtime westend-dev pallet_nomination_pools * fix * fix * ".git/.scripts/commands/bench/bench.sh" runtime polkadot-dev pallet_nomination_pools * ".git/.scripts/commands/bench/bench.sh" runtime westend-dev pallet_nomination_pools * ".git/.scripts/commands/bench/bench.sh" runtime kusama-dev pallet_nomination_pools * add InitialGlobalMaxCommission * revert * global max commission migration generic * remove StakingMigrationV11OldPallet * initial global max commission * adjust global max * update lockfile for {"substrate"} * Use master lock file Signed-off-by: Oliver Tale-Yazdi * cargo update -p sp-io Signed-off-by: Oliver Tale-Yazdi --------- Signed-off-by: Oliver Tale-Yazdi Co-authored-by: parity-processbot <> Co-authored-by: Oliver Tale-Yazdi * update substrate * Update substrate dependencies * Bump workspace unified version * Bump spec_version to 9400 * remove executed migrations * changelog: fixup * update weights (#6897) * polkadot: update weights * westend: update weights * kusama: update weights * rococo: update weights * remove duplicated arm and fix version index (#6884) * remove duplicated arm * annotate the version index * add tests * fmt * Bump transaction_version for polkadot * Bump transaction_version for kusama * Bump transaction_version for rococo * Bump transaction_version for westend * update reference --------- Signed-off-by: Oliver Tale-Yazdi Signed-off-by: Andrei Sandu Signed-off-by: dependabot[bot] Signed-off-by: acatangiu Co-authored-by: ordian Co-authored-by: Muharem Ismailov Co-authored-by: Mattia L.V. Bradascio <28816406+bredamatt@users.noreply.github.com> Co-authored-by: alexgparity <115470171+alexgparity@users.noreply.github.com> Co-authored-by: Bastian Köcher Co-authored-by: amab8901 <83634595+amab8901@users.noreply.github.com> Co-authored-by: Dmitry Markin Co-authored-by: Sebastian Kunert Co-authored-by: Squirrel Co-authored-by: Gavin Wood Co-authored-by: Oliver Tale-Yazdi Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com> Co-authored-by: João Paulo Silva de Souza <77391175+joao-paulo-parity@users.noreply.github.com> Co-authored-by: Marcin S Co-authored-by: eskimor Co-authored-by: eskimor Co-authored-by: Tsvetomir Dimitrov Co-authored-by: Bradley Olson <34992650+BradleyOlson64@users.noreply.github.com> Co-authored-by: Alexander Samusev <41779041+alvicsam@users.noreply.github.com> Co-authored-by: Mara Robin B Co-authored-by: Keith Yeung Co-authored-by: Niklas Adolfsson Co-authored-by: Alexandru Vasile <60601340+lexnv@users.noreply.github.com> Co-authored-by: Vlad Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> Co-authored-by: Andrei Sandu <54316454+sandreim@users.noreply.github.com> Co-authored-by: tugy <33746108+tugytur@users.noreply.github.com> Co-authored-by: Bernhard Schuster Co-authored-by: Michal Kucharczyk <1728078+michalkucharczyk@users.noreply.github.com> Co-authored-by: joao-paulo-parity Co-authored-by: Adrian Catangiu Co-authored-by: Sergejs Kostjucenko <85877331+sergejparity@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ankan <10196091+Ank4n@users.noreply.github.com> Co-authored-by: Serban Iorga Co-authored-by: Anton Co-authored-by: Falco Hirschenberger Co-authored-by: s0me0ne-unkn0wn <48632512+s0me0ne-unkn0wn@users.noreply.github.com> Co-authored-by: Chevdor Co-authored-by: cheme Co-authored-by: Joakim Nyman Co-authored-by: Alexander Popiak Co-authored-by: Bastian Köcher Co-authored-by: Parity Bot Co-authored-by: stanly-johnson Co-authored-by: nanocryk <6422796+nanocryk@users.noreply.github.com> Co-authored-by: Branislav Kontur Co-authored-by: asynchronous rob Co-authored-by: Vincent Geddes Co-authored-by: Shawn Tabrizi Co-authored-by: Wei Tang Co-authored-by: Koute Co-authored-by: Robert Hambrock Co-authored-by: Sergej Sakac <73715684+Szegoo@users.noreply.github.com> Co-authored-by: Petr Mensik Co-authored-by: Arkadiy Paronyan Co-authored-by: Stephen Shelton Co-authored-by: Javier Viola Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com> Co-authored-by: Davirain Co-authored-by: Przemek Rzad Co-authored-by: Milos Kriz <82968568+miloskriz@users.noreply.github.com> Co-authored-by: Bastian Köcher Co-authored-by: Aaro Altonen <48052676+altonen@users.noreply.github.com> Co-authored-by: Anthony Alaribe Co-authored-by: Marcin S Co-authored-by: Raf Co-authored-by: girazoki Co-authored-by: Sam Elamin Co-authored-by: Wilfried Kopp Co-authored-by: Piotr Mikołajczyk Co-authored-by: Gonçalo Pestana Co-authored-by: Daniel Shiposha Co-authored-by: Paulo Martins Co-authored-by: Ross Bulat Co-authored-by: miss_k <86659575+daredevil3435@users.noreply.github.com> Co-authored-by: Louis Merlin Co-authored-by: Oleg Plakida <112385193+oleg-plakida@users.noreply.github.com> Co-authored-by: alvicsam Co-authored-by: Mira Ressel Co-authored-by: Davide Galassi Co-authored-by: Anton Vilhelm Ásgeirsson Co-authored-by: Guantong <04637@163.com> Co-authored-by: Vivek Pandya Co-authored-by: Vsevolod Stakhov Co-authored-by: Xiliang Chen --- .cargo/config.toml | 2 +- .gitattributes | 2 + .github/dependabot.yml | 4 +- .github/pr-custom-review.yml | 5 +- .github/workflows/auto-label-prs.yml | 21 - .github/workflows/check-D-labels.yml | 50 + .github/workflows/check-labels.yml | 40 +- .github/workflows/check-licenses.yml | 26 + .github/workflows/release-10_candidate.yml | 12 +- .../release-30_publish-draft-release.yml | 9 +- .../release-50_publish-docker-release.yml | 2 +- .../release-51_publish-docker-manual.yml | 2 +- .gitignore | 1 - .gitlab-ci.yml | 125 +- Cargo.lock | 5575 +++++++++++------ Cargo.toml | 32 +- README.md | 17 +- cli/Cargo.toml | 25 +- cli/src/cli.rs | 5 +- cli/src/command.rs | 67 +- cli/src/error.rs | 7 + core-primitives/Cargo.toml | 8 +- erasure-coding/Cargo.toml | 13 +- erasure-coding/benches/README.md | 39 + .../benches/scaling_with_validators.rs | 90 + erasure-coding/fuzzer/src/reconstruct.rs | 16 + erasure-coding/fuzzer/src/round_trip.rs | 18 +- erasure-coding/src/lib.rs | 2 +- node/client/Cargo.toml | 57 +- node/client/src/benchmarking.rs | 6 +- node/client/src/lib.rs | 88 +- node/collation-generation/Cargo.toml | 6 +- node/collation-generation/src/lib.rs | 4 +- node/collation-generation/src/tests.rs | 6 +- node/core/approval-voting/Cargo.toml | 22 +- .../approval-voting/src/approval_checking.rs | 4 +- .../approval-voting/src/approval_db/v1/mod.rs | 2 +- .../src/approval_db/v1/tests.rs | 2 +- node/core/approval-voting/src/backend.rs | 2 +- node/core/approval-voting/src/criteria.rs | 4 +- node/core/approval-voting/src/import.rs | 18 +- node/core/approval-voting/src/lib.rs | 10 +- node/core/approval-voting/src/ops.rs | 2 +- .../approval-voting/src/persisted_entries.rs | 2 +- node/core/approval-voting/src/tests.rs | 23 +- node/core/av-store/Cargo.toml | 7 +- node/core/av-store/src/lib.rs | 27 +- node/core/av-store/src/tests.rs | 60 +- node/core/backing/Cargo.toml | 12 +- node/core/backing/src/error.rs | 2 +- node/core/backing/src/lib.rs | 13 +- node/core/backing/src/tests.rs | 42 +- node/core/bitfield-signing/Cargo.toml | 2 +- node/core/bitfield-signing/src/lib.rs | 2 +- node/core/bitfield-signing/src/tests.rs | 2 +- node/core/candidate-validation/Cargo.toml | 11 +- node/core/candidate-validation/src/lib.rs | 203 +- node/core/candidate-validation/src/metrics.rs | 42 +- node/core/candidate-validation/src/tests.rs | 353 +- node/core/chain-api/Cargo.toml | 12 +- node/core/chain-api/src/lib.rs | 9 +- node/core/chain-api/src/metrics.rs | 2 +- node/core/chain-api/src/tests.rs | 38 +- node/core/chain-selection/Cargo.toml | 4 +- node/core/chain-selection/src/backend.rs | 2 +- .../core/chain-selection/src/db_backend/v1.rs | 2 +- node/core/chain-selection/src/lib.rs | 21 +- node/core/chain-selection/src/tests.rs | 105 +- node/core/chain-selection/src/tree.rs | 105 +- node/core/dispute-coordinator/Cargo.toml | 15 +- node/core/dispute-coordinator/src/backend.rs | 15 +- node/core/dispute-coordinator/src/db/v1.rs | 25 +- node/core/dispute-coordinator/src/import.rs | 111 +- .../dispute-coordinator/src/initialized.rs | 374 +- node/core/dispute-coordinator/src/lib.rs | 269 +- node/core/dispute-coordinator/src/metrics.rs | 68 + .../src/participation/mod.rs | 49 +- .../src/participation/queues/mod.rs | 87 +- .../src/participation/queues/tests.rs | 21 +- .../src/participation/tests.rs | 31 +- .../src/scraping/candidates.rs | 27 +- .../dispute-coordinator/src/scraping/mod.rs | 145 +- .../dispute-coordinator/src/scraping/tests.rs | 72 +- .../dispute-coordinator/src/spam_slots.rs | 2 +- node/core/dispute-coordinator/src/status.rs | 2 +- node/core/dispute-coordinator/src/tests.rs | 687 +- node/core/parachains-inherent/Cargo.toml | 5 +- node/core/parachains-inherent/src/lib.rs | 7 +- node/core/provisioner/Cargo.toml | 4 +- node/core/provisioner/src/disputes/mod.rs | 2 +- .../src/disputes/prioritized_selection/mod.rs | 56 +- .../disputes/prioritized_selection/tests.rs | 2 +- .../src/disputes/random_selection/mod.rs | 2 +- node/core/provisioner/src/error.rs | 2 +- node/core/provisioner/src/lib.rs | 31 +- node/core/provisioner/src/metrics.rs | 16 +- node/core/provisioner/src/tests.rs | 22 +- node/core/pvf-checker/Cargo.toml | 12 +- node/core/pvf-checker/src/interest_view.rs | 2 +- node/core/pvf-checker/src/lib.rs | 16 +- node/core/pvf-checker/src/runtime_api.rs | 2 +- node/core/pvf-checker/src/tests.rs | 27 +- node/core/pvf/Cargo.toml | 43 +- node/core/pvf/src/artifacts.rs | 63 +- node/core/pvf/src/error.rs | 81 +- node/core/pvf/src/execute/queue.rs | 243 +- node/core/pvf/src/execute/worker.rs | 152 +- node/core/pvf/src/executor_intf.rs | 65 +- node/core/pvf/src/host.rs | 396 +- node/core/pvf/src/lib.rs | 4 +- node/core/pvf/src/metrics.rs | 78 +- node/core/pvf/src/prepare/memory_stats.rs | 249 + node/core/pvf/src/prepare/mod.rs | 13 +- node/core/pvf/src/prepare/pool.rs | 113 +- node/core/pvf/src/prepare/queue.rs | 111 +- node/core/pvf/src/prepare/worker.rs | 376 +- node/core/pvf/src/pvf.rs | 95 +- node/core/pvf/src/testing.rs | 6 +- node/core/pvf/src/worker_common.rs | 190 +- node/core/pvf/tests/it/adder.rs | 12 +- node/core/pvf/tests/it/main.rs | 88 +- node/core/pvf/tests/it/worker_common.rs | 4 +- node/core/runtime-api/Cargo.toml | 14 +- node/core/runtime-api/src/cache.rs | 31 +- node/core/runtime-api/src/lib.rs | 56 +- node/core/runtime-api/src/metrics.rs | 2 +- node/core/runtime-api/src/tests.rs | 19 +- node/gum/src/lib.rs | 2 +- node/gum/src/tests.rs | 2 +- node/jaeger/Cargo.toml | 8 +- node/jaeger/src/spans.rs | 8 +- node/malus/Cargo.toml | 6 +- .../0001-dispute-valid-block.toml | 4 +- node/malus/src/variants/common.rs | 10 +- .../src/variants/suggest_garbage_candidate.rs | 7 +- node/metrics/Cargo.toml | 23 +- node/metrics/src/runtime/mod.rs | 2 +- node/metrics/src/runtime/parachain.rs | 2 +- node/metrics/src/tests.rs | 2 +- node/network/approval-distribution/Cargo.toml | 8 +- node/network/approval-distribution/src/lib.rs | 2 +- .../approval-distribution/src/metrics.rs | 2 +- .../approval-distribution/src/tests.rs | 2 +- .../availability-distribution/Cargo.toml | 16 +- .../availability-distribution/src/error.rs | 2 +- .../src/pov_requester/mod.rs | 4 +- .../src/requester/fetch_task/mod.rs | 23 +- .../src/requester/fetch_task/tests.rs | 2 +- .../src/requester/mod.rs | 2 +- .../src/requester/session_cache.rs | 4 +- .../src/requester/tests.rs | 2 +- .../src/responder.rs | 2 +- .../src/tests/mock.rs | 2 +- .../src/tests/mod.rs | 2 +- .../src/tests/state.rs | 2 +- node/network/availability-recovery/Cargo.toml | 14 +- node/network/availability-recovery/src/lib.rs | 2 +- .../availability-recovery/src/tests.rs | 2 +- node/network/bitfield-distribution/Cargo.toml | 10 +- node/network/bitfield-distribution/src/lib.rs | 2 +- .../bitfield-distribution/src/tests.rs | 2 +- node/network/bridge/Cargo.toml | 16 +- node/network/bridge/src/errors.rs | 16 + node/network/bridge/src/metrics.rs | 2 +- node/network/bridge/src/network.rs | 31 +- node/network/bridge/src/rx/mod.rs | 7 +- node/network/bridge/src/rx/tests.rs | 3 +- node/network/bridge/src/tx/tests.rs | 3 +- .../network/bridge/src/validator_discovery.rs | 4 +- node/network/collator-protocol/Cargo.toml | 14 +- .../src/collator_side/mod.rs | 2 +- .../src/collator_side/tests.rs | 2 +- .../src/collator_side/validators_buffer.rs | 2 +- node/network/collator-protocol/src/lib.rs | 2 +- .../src/validator_side/mod.rs | 2 +- .../src/validator_side/tests.rs | 4 +- node/network/dispute-distribution/Cargo.toml | 16 +- node/network/dispute-distribution/src/lib.rs | 72 +- .../src/receiver/batches/batch.rs | 2 +- .../src/receiver/batches/mod.rs | 2 +- .../src/receiver/error.rs | 2 +- .../src/receiver/peer_queues.rs | 2 +- .../dispute-distribution/src/sender/mod.rs | 344 +- .../src/sender/send_task.rs | 24 +- .../dispute-distribution/src/tests/mock.rs | 6 +- .../dispute-distribution/src/tests/mod.rs | 64 +- node/network/gossip-support/Cargo.toml | 16 +- node/network/gossip-support/src/lib.rs | 4 +- node/network/gossip-support/src/tests.rs | 6 +- node/network/protocol/Cargo.toml | 7 +- .../protocol/src/authority_discovery.rs | 2 +- node/network/protocol/src/grid_topology.rs | 2 +- node/network/protocol/src/lib.rs | 8 +- node/network/protocol/src/peer_set.rs | 16 +- node/network/protocol/src/reputation.rs | 16 + .../protocol/src/request_response/mod.rs | 4 +- .../protocol/src/request_response/outgoing.rs | 2 +- .../protocol/src/request_response/v1.rs | 2 +- .../network/statement-distribution/Cargo.toml | 22 +- .../statement-distribution/src/error.rs | 2 +- .../network/statement-distribution/src/lib.rs | 2 +- .../statement-distribution/src/requester.rs | 2 +- .../statement-distribution/src/responder.rs | 2 +- .../statement-distribution/src/tests.rs | 2 +- node/overseer/Cargo.toml | 21 +- node/overseer/examples/minimal-example.rs | 4 +- node/overseer/src/dummy.rs | 4 +- node/overseer/src/lib.rs | 59 +- node/overseer/src/memory_stats.rs | 16 +- node/overseer/src/metrics.rs | 17 +- node/overseer/src/tests.rs | 105 +- node/primitives/Cargo.toml | 17 +- node/primitives/src/approval.rs | 2 +- node/primitives/src/disputes/message.rs | 4 +- node/primitives/src/disputes/mod.rs | 2 +- node/primitives/src/lib.rs | 34 +- node/service/Cargo.toml | 108 +- node/service/chain-specs/kusama.json | 19 +- node/service/chain-specs/polkadot.json | 17 +- node/service/chain-specs/westend.json | 14 +- node/service/src/chain_spec.rs | 24 +- node/service/src/grandpa_support.rs | 49 +- node/service/src/lib.rs | 175 +- node/service/src/overseer.rs | 22 +- node/service/src/relay_chain_selection.rs | 21 +- node/service/src/tests.rs | 4 +- node/subsystem-test-helpers/Cargo.toml | 10 +- node/subsystem-test-helpers/src/lib.rs | 3 +- node/subsystem-test-helpers/src/mock.rs | 2 +- node/subsystem-types/Cargo.toml | 12 +- node/subsystem-types/src/lib.rs | 2 +- node/subsystem-types/src/messages.rs | 167 +- .../src/messages/network_bridge_event.rs | 2 +- node/subsystem-types/src/runtime_client.rs | 97 +- node/subsystem-util/Cargo.toml | 15 +- .../src/determine_new_blocks.rs | 2 +- node/subsystem-util/src/lib.rs | 61 +- node/subsystem-util/src/nesting_sender.rs | 207 + .../src/rolling_session_window.rs | 4 +- node/subsystem-util/src/runtime/error.rs | 2 +- node/subsystem-util/src/runtime/mod.rs | 2 +- node/subsystem/src/lib.rs | 3 + node/test/client/Cargo.toml | 33 +- node/test/client/src/block_builder.rs | 18 +- node/test/client/src/lib.rs | 2 +- node/test/performance-test/Cargo.toml | 1 + node/test/performance-test/src/lib.rs | 7 +- node/test/service/Cargo.toml | 68 +- node/test/service/src/chain_spec.rs | 2 +- node/test/service/src/lib.rs | 10 +- node/zombienet-backchannel/Cargo.toml | 6 +- parachain/Cargo.toml | 12 +- parachain/src/primitives.rs | 21 +- parachain/test-parachains/Cargo.toml | 4 +- parachain/test-parachains/adder/Cargo.toml | 8 +- .../test-parachains/adder/collator/Cargo.toml | 16 +- .../test-parachains/adder/collator/src/lib.rs | 8 +- .../adder/collator/src/main.rs | 2 +- .../adder/collator/tests/integration.rs | 2 +- .../adder/src/wasm_validation.rs | 6 +- parachain/test-parachains/halt/Cargo.toml | 2 +- parachain/test-parachains/undying/Cargo.toml | 8 +- .../undying/collator/Cargo.toml | 16 +- .../undying/collator/src/lib.rs | 8 +- .../undying/collator/src/main.rs | 2 +- .../undying/collator/tests/integration.rs | 2 +- .../undying/src/wasm_validation.rs | 6 +- primitives/Cargo.toml | 26 +- primitives/src/lib.rs | 30 + primitives/src/runtime_api.rs | 51 +- primitives/src/v2/mod.rs | 108 +- primitives/src/vstaging/executor_params.rs | 149 + primitives/src/vstaging/mod.rs | 3 + primitives/test-helpers/Cargo.toml | 8 +- primitives/test-helpers/src/lib.rs | 12 +- roadmap/implementers-guide/src/SUMMARY.md | 1 - .../node/backing/statement-distribution.md | 2 +- .../node/collators/collation-generation.md | 1 - .../src/node/disputes/README.md | 54 +- .../src/node/disputes/dispute-coordinator.md | 50 +- .../src/node/disputes/dispute-distribution.md | 7 +- .../src/node/utility/chain-selection.md | 12 +- .../node/utility/misbehavior-arbitration.md | 7 - .../src/node/utility/provisioner.md | 11 +- .../src/node/utility/pvf-prechecker.md | 23 +- .../src/protocol-disputes.md | 6 +- .../implementers-guide/src/pvf-prechecking.md | 8 +- .../src/runtime/disputes.md | 76 +- .../src/types/overseer-protocol.md | 3 +- rpc/Cargo.toml | 46 +- rpc/src/lib.rs | 20 +- runtime/common/Cargo.toml | 70 +- runtime/common/slot_range_helper/Cargo.toml | 6 +- runtime/common/src/assigned_slots.rs | 8 +- runtime/common/src/auctions.rs | 24 +- runtime/common/src/claims.rs | 8 +- runtime/common/src/crowdloan/migration.rs | 19 +- runtime/common/src/crowdloan/mod.rs | 16 +- runtime/common/src/impls.rs | 22 +- runtime/common/src/integration_tests.rs | 22 +- runtime/common/src/lib.rs | 9 +- runtime/common/src/mock.rs | 2 +- runtime/common/src/paras_registrar.rs | 20 +- runtime/common/src/paras_sudo_wrapper.rs | 9 +- runtime/common/src/purchase.rs | 10 +- runtime/common/src/slots/mod.rs | 22 +- runtime/common/src/traits.rs | 2 +- runtime/common/src/try_runtime.rs | 107 + runtime/common/src/xcm_sender.rs | 89 +- runtime/kusama/Cargo.toml | 158 +- runtime/kusama/constants/Cargo.toml | 11 +- runtime/kusama/constants/src/lib.rs | 6 +- .../constants/src/weights/block_weights.rs | 20 +- .../src/weights/extrinsic_weights.rs | 20 +- runtime/kusama/src/governance/mod.rs | 4 +- runtime/kusama/src/governance/old.rs | 5 + runtime/kusama/src/lib.rs | 246 +- .../weights/frame_benchmarking_baseline.rs | 80 +- .../frame_election_provider_support.rs | 37 +- runtime/kusama/src/weights/frame_system.rs | 86 +- runtime/kusama/src/weights/mod.rs | 1 + .../kusama/src/weights/pallet_bags_list.rs | 68 +- runtime/kusama/src/weights/pallet_balances.rs | 14 +- ...allet_balances_nis_counterpart_balances.rs | 109 +- runtime/kusama/src/weights/pallet_bounties.rs | 189 +- .../src/weights/pallet_child_bounties.rs | 172 +- .../src/weights/pallet_collective_council.rs | 292 +- .../pallet_collective_technical_committee.rs | 292 +- .../src/weights/pallet_conviction_voting.rs | 149 +- .../kusama/src/weights/pallet_democracy.rs | 511 +- .../pallet_election_provider_multi_phase.rs | 264 +- .../src/weights/pallet_elections_phragmen.rs | 289 +- .../kusama/src/weights/pallet_fast_unstake.rs | 203 +- runtime/kusama/src/weights/pallet_identity.rs | 329 +- .../kusama/src/weights/pallet_im_online.rs | 38 +- runtime/kusama/src/weights/pallet_indices.rs | 66 +- .../kusama/src/weights/pallet_membership.rs | 182 +- runtime/kusama/src/weights/pallet_multisig.rs | 128 +- runtime/kusama/src/weights/pallet_nis.rs | 215 +- .../src/weights/pallet_nomination_pools.rs | 671 +- runtime/kusama/src/weights/pallet_preimage.rs | 161 +- runtime/kusama/src/weights/pallet_proxy.rs | 192 +- .../src/weights/pallet_ranked_collective.rs | 141 +- .../pallet_referenda_fellowship_referenda.rs | 506 +- .../src/weights/pallet_referenda_referenda.rs | 503 +- .../kusama/src/weights/pallet_scheduler.rs | 160 +- runtime/kusama/src/weights/pallet_session.rs | 39 +- runtime/kusama/src/weights/pallet_staking.rs | 873 ++- .../kusama/src/weights/pallet_timestamp.rs | 27 +- runtime/kusama/src/weights/pallet_tips.rs | 123 +- runtime/kusama/src/weights/pallet_treasury.rs | 110 +- runtime/kusama/src/weights/pallet_utility.rs | 57 +- runtime/kusama/src/weights/pallet_vesting.rs | 199 +- .../kusama/src/weights/pallet_whitelist.rs | 73 +- runtime/kusama/src/weights/pallet_xcm.rs | 266 + .../src/weights/runtime_common_auctions.rs | 114 +- .../src/weights/runtime_common_claims.rs | 135 +- .../src/weights/runtime_common_crowdloan.rs | 189 +- .../weights/runtime_common_paras_registrar.rs | 202 +- .../src/weights/runtime_common_slots.rs | 92 +- .../runtime_parachains_configuration.rs | 101 +- .../weights/runtime_parachains_disputes.rs | 16 +- .../src/weights/runtime_parachains_hrmp.rs | 269 +- .../weights/runtime_parachains_initializer.rs | 21 +- .../src/weights/runtime_parachains_paras.rs | 273 +- .../runtime_parachains_paras_inherent.rs | 425 +- .../src/weights/runtime_parachains_ump.rs | 54 +- runtime/kusama/src/weights/xcm/mod.rs | 247 +- .../xcm/pallet_xcm_benchmarks_fungible.rs | 16 +- .../xcm/pallet_xcm_benchmarks_generic.rs | 102 +- runtime/kusama/src/xcm_config.rs | 361 +- runtime/metrics/Cargo.toml | 6 +- runtime/metrics/src/with_runtime_metrics.rs | 2 +- .../metrics/src/without_runtime_metrics.rs | 2 +- runtime/parachains/Cargo.toml | 57 +- runtime/parachains/src/builder.rs | 22 +- runtime/parachains/src/configuration.rs | 93 +- .../src/configuration/benchmarking.rs | 2 +- .../parachains/src/configuration/migration.rs | 215 +- runtime/parachains/src/configuration/tests.rs | 61 +- runtime/parachains/src/disputes.rs | 482 +- runtime/parachains/src/disputes/migration.rs | 98 + runtime/parachains/src/disputes/slashing.rs | 89 +- .../src/disputes/slashing/benchmarking.rs | 9 +- runtime/parachains/src/disputes/tests.rs | 1272 ++-- runtime/parachains/src/dmp.rs | 45 +- runtime/parachains/src/dmp/tests.rs | 12 +- runtime/parachains/src/hrmp.rs | 209 +- runtime/parachains/src/hrmp/tests.rs | 25 +- runtime/parachains/src/inclusion/mod.rs | 13 +- runtime/parachains/src/inclusion/tests.rs | 6 +- runtime/parachains/src/initializer.rs | 4 +- .../src/initializer/benchmarking.rs | 2 +- runtime/parachains/src/initializer/tests.rs | 13 +- runtime/parachains/src/lib.rs | 4 +- runtime/parachains/src/metrics.rs | 2 +- runtime/parachains/src/mock.rs | 35 +- runtime/parachains/src/origin.rs | 3 +- runtime/parachains/src/paras/benchmarking.rs | 14 +- .../src/paras/benchmarking/pvf_check.rs | 11 +- runtime/parachains/src/paras/mod.rs | 166 +- runtime/parachains/src/paras/tests.rs | 316 +- runtime/parachains/src/paras_inherent/mod.rs | 8 +- .../parachains/src/paras_inherent/tests.rs | 10 +- .../parachains/src/paras_inherent/weights.rs | 6 +- runtime/parachains/src/reward_points.rs | 2 +- runtime/parachains/src/runtime_api_impl/v2.rs | 4 +- .../src/runtime_api_impl/vstaging.rs | 19 +- runtime/parachains/src/scheduler.rs | 3 +- runtime/parachains/src/scheduler/tests.rs | 4 +- runtime/parachains/src/session_info.rs | 21 +- runtime/parachains/src/session_info/tests.rs | 2 +- runtime/parachains/src/shared.rs | 3 +- runtime/parachains/src/ump.rs | 82 +- runtime/parachains/src/ump/benchmarking.rs | 18 +- runtime/parachains/src/ump/migration.rs | 49 + runtime/parachains/src/ump/tests.rs | 54 +- runtime/parachains/src/util.rs | 4 +- runtime/polkadot/Cargo.toml | 144 +- runtime/polkadot/constants/Cargo.toml | 11 +- runtime/polkadot/constants/src/lib.rs | 18 +- .../constants/src/weights/block_weights.rs | 20 +- .../src/weights/extrinsic_weights.rs | 20 +- runtime/polkadot/src/lib.rs | 231 +- .../weights/frame_benchmarking_baseline.rs | 78 +- .../frame_election_provider_support.rs | 37 +- runtime/polkadot/src/weights/frame_system.rs | 86 +- runtime/polkadot/src/weights/mod.rs | 2 + .../polkadot/src/weights/pallet_bags_list.rs | 68 +- .../polkadot/src/weights/pallet_balances.rs | 82 +- .../polkadot/src/weights/pallet_bounties.rs | 189 +- .../src/weights/pallet_child_bounties.rs | 155 +- .../src/weights/pallet_collective_council.rs | 290 +- .../pallet_collective_technical_committee.rs | 292 +- .../polkadot/src/weights/pallet_democracy.rs | 511 +- .../pallet_election_provider_multi_phase.rs | 264 +- .../src/weights/pallet_elections_phragmen.rs | 289 +- .../src/weights/pallet_fast_unstake.rs | 198 +- .../polkadot/src/weights/pallet_identity.rs | 329 +- .../polkadot/src/weights/pallet_im_online.rs | 38 +- .../polkadot/src/weights/pallet_indices.rs | 66 +- .../polkadot/src/weights/pallet_membership.rs | 182 +- .../polkadot/src/weights/pallet_multisig.rs | 128 +- .../src/weights/pallet_nomination_pools.rs | 669 +- .../polkadot/src/weights/pallet_preimage.rs | 161 +- runtime/polkadot/src/weights/pallet_proxy.rs | 192 +- .../polkadot/src/weights/pallet_scheduler.rs | 160 +- .../polkadot/src/weights/pallet_session.rs | 39 +- .../polkadot/src/weights/pallet_staking.rs | 873 ++- .../polkadot/src/weights/pallet_timestamp.rs | 27 +- runtime/polkadot/src/weights/pallet_tips.rs | 125 +- .../polkadot/src/weights/pallet_treasury.rs | 109 +- .../polkadot/src/weights/pallet_utility.rs | 57 +- .../polkadot/src/weights/pallet_vesting.rs | 199 +- runtime/polkadot/src/weights/pallet_xcm.rs | 278 + .../src/weights/runtime_common_auctions.rs | 114 +- .../src/weights/runtime_common_claims.rs | 135 +- .../src/weights/runtime_common_crowdloan.rs | 189 +- .../weights/runtime_common_paras_registrar.rs | 209 +- .../src/weights/runtime_common_slots.rs | 92 +- .../runtime_parachains_configuration.rs | 116 +- .../weights/runtime_parachains_disputes.rs | 16 +- .../src/weights/runtime_parachains_hrmp.rs | 284 +- .../weights/runtime_parachains_initializer.rs | 21 +- .../src/weights/runtime_parachains_paras.rs | 289 +- .../runtime_parachains_paras_inherent.rs | 437 +- .../src/weights/runtime_parachains_ump.rs | 91 + runtime/polkadot/src/xcm_config.rs | 266 +- runtime/rococo/Cargo.toml | 143 +- runtime/rococo/constants/Cargo.toml | 11 +- runtime/rococo/constants/src/lib.rs | 6 +- .../constants/src/weights/block_weights.rs | 20 +- .../src/weights/extrinsic_weights.rs | 20 +- runtime/rococo/src/lib.rs | 270 +- runtime/rococo/src/validator_manager.rs | 2 + .../weights/frame_benchmarking_baseline.rs | 80 +- runtime/rococo/src/weights/frame_system.rs | 86 +- runtime/rococo/src/weights/mod.rs | 1 + runtime/rococo/src/weights/pallet_balances.rs | 14 +- ...allet_balances_nis_counterpart_balances.rs | 109 +- runtime/rococo/src/weights/pallet_bounties.rs | 124 +- .../src/weights/pallet_child_bounties.rs | 69 +- .../rococo/src/weights/pallet_collective.rs | 62 +- .../src/weights/pallet_collective_council.rs | 290 +- .../pallet_collective_technical_committee.rs | 292 +- .../rococo/src/weights/pallet_democracy.rs | 511 +- .../src/weights/pallet_elections_phragmen.rs | 287 +- runtime/rococo/src/weights/pallet_identity.rs | 329 +- .../rococo/src/weights/pallet_im_online.rs | 41 +- runtime/rococo/src/weights/pallet_indices.rs | 66 +- .../rococo/src/weights/pallet_membership.rs | 182 +- runtime/rococo/src/weights/pallet_multisig.rs | 126 +- runtime/rococo/src/weights/pallet_nis.rs | 215 +- runtime/rococo/src/weights/pallet_preimage.rs | 161 +- runtime/rococo/src/weights/pallet_proxy.rs | 188 +- .../rococo/src/weights/pallet_scheduler.rs | 162 +- runtime/rococo/src/weights/pallet_session.rs | 4 +- .../rococo/src/weights/pallet_timestamp.rs | 27 +- runtime/rococo/src/weights/pallet_tips.rs | 125 +- runtime/rococo/src/weights/pallet_treasury.rs | 101 +- runtime/rococo/src/weights/pallet_utility.rs | 57 +- runtime/rococo/src/weights/pallet_vesting.rs | 199 +- runtime/rococo/src/weights/pallet_xcm.rs | 276 + .../src/weights/runtime_common_auctions.rs | 114 +- .../src/weights/runtime_common_claims.rs | 135 +- .../src/weights/runtime_common_crowdloan.rs | 189 +- .../weights/runtime_common_paras_registrar.rs | 209 +- .../src/weights/runtime_common_slots.rs | 92 +- .../runtime_parachains_configuration.rs | 116 +- .../weights/runtime_parachains_disputes.rs | 16 +- .../src/weights/runtime_parachains_hrmp.rs | 284 +- .../weights/runtime_parachains_initializer.rs | 21 +- .../src/weights/runtime_parachains_paras.rs | 289 +- .../runtime_parachains_paras_inherent.rs | 10 +- .../src/weights/runtime_parachains_ump.rs | 52 +- runtime/rococo/src/weights/xcm/mod.rs | 253 +- .../xcm/pallet_xcm_benchmarks_fungible.rs | 16 +- .../xcm/pallet_xcm_benchmarks_generic.rs | 87 +- runtime/rococo/src/xcm_config.rs | 293 +- runtime/test-runtime/Cargo.toml | 87 +- runtime/test-runtime/constants/Cargo.toml | 8 +- runtime/test-runtime/constants/src/lib.rs | 6 +- .../constants/src/weights/block_weights.rs | 2 +- .../src/weights/extrinsic_weights.rs | 2 +- runtime/test-runtime/src/lib.rs | 139 +- runtime/test-runtime/src/xcm_config.rs | 100 +- runtime/westend/Cargo.toml | 146 +- runtime/westend/constants/Cargo.toml | 11 +- runtime/westend/constants/src/lib.rs | 6 +- .../constants/src/weights/block_weights.rs | 20 +- .../src/weights/extrinsic_weights.rs | 20 +- runtime/westend/src/lib.rs | 285 +- runtime/westend/src/tests.rs | 8 +- .../frame_election_provider_support.rs | 37 +- runtime/westend/src/weights/frame_system.rs | 88 +- runtime/westend/src/weights/mod.rs | 1 + .../westend/src/weights/pallet_bags_list.rs | 68 +- .../westend/src/weights/pallet_balances.rs | 82 +- .../pallet_election_provider_multi_phase.rs | 264 +- .../src/weights/pallet_fast_unstake.rs | 203 +- .../westend/src/weights/pallet_identity.rs | 329 +- .../westend/src/weights/pallet_im_online.rs | 38 +- runtime/westend/src/weights/pallet_indices.rs | 66 +- .../westend/src/weights/pallet_multisig.rs | 128 +- .../src/weights/pallet_nomination_pools.rs | 669 +- .../westend/src/weights/pallet_preimage.rs | 161 +- runtime/westend/src/weights/pallet_proxy.rs | 192 +- .../westend/src/weights/pallet_scheduler.rs | 160 +- runtime/westend/src/weights/pallet_session.rs | 39 +- runtime/westend/src/weights/pallet_staking.rs | 873 ++- .../westend/src/weights/pallet_timestamp.rs | 27 +- runtime/westend/src/weights/pallet_utility.rs | 57 +- runtime/westend/src/weights/pallet_vesting.rs | 199 +- runtime/westend/src/weights/pallet_xcm.rs | 268 + .../src/weights/runtime_common_auctions.rs | 114 +- .../src/weights/runtime_common_crowdloan.rs | 189 +- .../weights/runtime_common_paras_registrar.rs | 200 +- .../src/weights/runtime_common_slots.rs | 92 +- .../runtime_parachains_configuration.rs | 101 +- .../weights/runtime_parachains_disputes.rs | 16 +- .../runtime_parachains_disputes_slashing.rs | 72 +- .../src/weights/runtime_parachains_hrmp.rs | 269 +- .../weights/runtime_parachains_initializer.rs | 21 +- .../src/weights/runtime_parachains_paras.rs | 271 +- .../runtime_parachains_paras_inherent.rs | 427 +- .../src/weights/runtime_parachains_ump.rs | 54 +- runtime/westend/src/weights/xcm/mod.rs | 245 +- .../xcm/pallet_xcm_benchmarks_fungible.rs | 16 +- .../xcm/pallet_xcm_benchmarks_generic.rs | 111 +- runtime/westend/src/xcm_config.rs | 206 +- scripts/ci/changelog/Gemfile | 2 + scripts/ci/changelog/Gemfile.lock | 7 +- scripts/ci/changelog/README.md | 19 +- scripts/ci/changelog/bin/changelog | 3 + scripts/ci/changelog/templates/change.md.tera | 17 +- .../ci/changelog/templates/changes.md.tera | 2 + .../changelog/templates/changes_api.md.tera | 17 + .../templates/changes_client.md.tera | 4 +- .../changelog/templates/changes_misc.md.tera | 11 +- .../templates/changes_runtime.md.tera | 4 +- scripts/ci/changelog/templates/debug.md.tera | 2 +- .../changelog/templates/full_pr_list.md.tera | 16 + .../changelog/templates/high_priority.md.tera | 4 +- .../templates/host_functions.md.tera | 30 +- .../changelog/templates/migrations-db.md.tera | 8 +- .../templates/migrations-runtime.md.tera | 8 +- scripts/ci/gitlab/lingua.dic | 4 + scripts/ci/gitlab/pipeline/build.yml | 78 +- scripts/ci/gitlab/pipeline/check.yml | 59 +- scripts/ci/gitlab/pipeline/publish.yml | 152 +- .../ci/gitlab/pipeline/short-benchmarks.yml | 18 +- scripts/ci/gitlab/pipeline/test.yml | 58 +- scripts/ci/gitlab/pipeline/weights.yml | 28 +- scripts/ci/gitlab/pipeline/zombienet.yml | 170 +- scripts/ci/gitlab/prettier.sh | 6 + src/main.rs | 1 + statement-table/Cargo.toml | 4 +- statement-table/src/generic.rs | 2 +- statement-table/src/lib.rs | 15 +- utils/generate-bags/Cargo.toml | 4 +- utils/remote-ext-tests/bags-list/Cargo.toml | 10 +- utils/staking-miner/Cargo.lock | 4484 ------------- utils/staking-miner/Cargo.toml | 32 +- utils/staking-miner/tests/cli.rs | 16 + xcm/Cargo.toml | 22 +- xcm/pallet-xcm-benchmarks/Cargo.toml | 31 +- .../src/fungible/benchmarking.rs | 91 +- .../src/fungible/mock.rs | 61 +- xcm/pallet-xcm-benchmarks/src/fungible/mod.rs | 6 +- .../src/generic/benchmarking.rs | 466 +- xcm/pallet-xcm-benchmarks/src/generic/mock.rs | 55 +- xcm/pallet-xcm-benchmarks/src/generic/mod.rs | 45 +- xcm/pallet-xcm-benchmarks/src/lib.rs | 24 +- xcm/pallet-xcm-benchmarks/src/mock.rs | 36 +- xcm/pallet-xcm/Cargo.toml | 28 +- xcm/pallet-xcm/src/benchmarking.rs | 196 + xcm/pallet-xcm/src/lib.rs | 1923 ++++-- xcm/pallet-xcm/src/migration.rs | 63 + xcm/pallet-xcm/src/mock.rs | 119 +- xcm/pallet-xcm/src/tests.rs | 561 +- xcm/procedural/src/lib.rs | 25 +- xcm/procedural/src/v0.rs | 17 - xcm/procedural/src/v0/multilocation.rs | 115 - xcm/procedural/src/v1/multilocation.rs | 206 - xcm/procedural/src/v2.rs | 183 + xcm/procedural/src/v3.rs | 186 + xcm/src/lib.rs | 626 +- xcm/src/tests.rs | 183 + xcm/src/v0/junction.rs | 205 - xcm/src/v0/mod.rs | 389 -- xcm/src/v0/multi_asset.rs | 407 -- xcm/src/v0/order.rs | 204 - xcm/src/v0/traits.rs | 267 - xcm/src/v1/mod.rs | 518 -- xcm/src/v1/order.rs | 292 - xcm/src/v1/traits.rs | 277 - xcm/src/{v1 => v2}/junction.rs | 42 +- xcm/src/v2/mod.rs | 581 +- xcm/src/{v1 => v2}/multiasset.rs | 186 +- xcm/src/{v1 => v2}/multilocation.rs | 76 +- xcm/src/v2/traits.rs | 49 +- xcm/src/v3/junction.rs | 408 ++ xcm/src/v3/junctions.rs | 708 +++ xcm/src/v3/matcher.rs | 109 + xcm/src/v3/mod.rs | 1413 +++++ xcm/src/v3/multiasset.rs | 968 +++ xcm/src/v3/multilocation.rs | 710 +++ xcm/src/v3/traits.rs | 541 ++ xcm/xcm-builder/Cargo.toml | 24 +- xcm/xcm-builder/src/asset_conversion.rs | 350 ++ xcm/xcm-builder/src/barriers.rs | 264 +- xcm/xcm-builder/src/currency_adapter.rs | 142 +- xcm/xcm-builder/src/filter_asset_location.rs | 21 +- xcm/xcm-builder/src/fungibles_adapter.rs | 313 +- xcm/xcm-builder/src/lib.rs | 40 +- xcm/xcm-builder/src/location_conversion.rs | 100 +- .../{matches_fungible.rs => matches_token.rs} | 41 +- xcm/xcm-builder/src/mock.rs | 296 - xcm/xcm-builder/src/nonfungibles_adapter.rs | 327 + xcm/xcm-builder/src/origin_conversion.rs | 32 +- xcm/xcm-builder/src/test_utils.rs | 155 +- xcm/xcm-builder/src/tests/assets.rs | 469 ++ xcm/xcm-builder/src/tests/barriers.rs | 278 + xcm/xcm-builder/src/tests/basic.rs | 106 + .../src/tests/bridging/local_para_para.rs | 112 + .../src/tests/bridging/local_relay_relay.rs | 70 + xcm/xcm-builder/src/tests/bridging/mod.rs | 194 + .../tests/bridging/paid_remote_relay_relay.rs | 124 + .../src/tests/bridging/remote_para_para.rs | 124 + .../bridging/remote_para_para_via_relay.rs | 106 + .../src/tests/bridging/remote_relay_relay.rs | 95 + xcm/xcm-builder/src/tests/expecting.rs | 187 + xcm/xcm-builder/src/tests/locking.rs | 234 + xcm/xcm-builder/src/tests/mock.rs | 656 ++ .../v1.rs => xcm-builder/src/tests/mod.rs} | 26 +- xcm/xcm-builder/src/tests/origins.rs | 140 + xcm/xcm-builder/src/tests/querying.rs | 119 + xcm/xcm-builder/src/tests/transacting.rs | 250 + .../src/tests/version_subscriptions.rs | 149 + xcm/xcm-builder/src/tests/weight.rs | 183 + xcm/xcm-builder/src/universal_exports.rs | 382 ++ xcm/xcm-builder/src/weight.rs | 132 +- xcm/xcm-builder/tests/mock/mod.rs | 73 +- xcm/xcm-builder/tests/scenarios.rs | 270 +- xcm/xcm-executor/Cargo.toml | 19 +- xcm/xcm-executor/integration-tests/Cargo.toml | 14 +- xcm/xcm-executor/integration-tests/src/lib.rs | 77 +- xcm/xcm-executor/src/assets.rs | 265 +- xcm/xcm-executor/src/config.rs | 61 +- xcm/xcm-executor/src/lib.rs | 814 ++- xcm/xcm-executor/src/traits/asset_exchange.rs | 58 + xcm/xcm-executor/src/traits/asset_lock.rs | 152 + xcm/xcm-executor/src/traits/conversion.rs | 50 +- xcm/xcm-executor/src/traits/drop_assets.rs | 31 +- xcm/xcm-executor/src/traits/export.rs | 146 + xcm/xcm-executor/src/traits/fee_manager.rs | 59 + .../src/traits/filter_asset_location.rs | 21 +- .../src/traits/matches_fungible.rs | 32 - .../src/traits/matches_fungibles.rs | 58 - xcm/xcm-executor/src/traits/mod.rs | 31 +- xcm/xcm-executor/src/traits/on_response.rs | 40 +- xcm/xcm-executor/src/traits/should_execute.rs | 14 +- xcm/xcm-executor/src/traits/token_matching.rs | 107 + xcm/xcm-executor/src/traits/transact_asset.rs | 214 +- xcm/xcm-executor/src/traits/weight.rs | 21 +- xcm/xcm-simulator/Cargo.toml | 8 +- xcm/xcm-simulator/example/Cargo.toml | 33 +- xcm/xcm-simulator/example/src/lib.rs | 386 +- xcm/xcm-simulator/example/src/parachain.rs | 178 +- xcm/xcm-simulator/example/src/relay_chain.rs | 104 +- xcm/xcm-simulator/fuzzer/.gitignore | 5 + xcm/xcm-simulator/fuzzer/Cargo.toml | 24 +- xcm/xcm-simulator/fuzzer/README.md | 38 + xcm/xcm-simulator/fuzzer/src/fuzz.rs | 143 +- xcm/xcm-simulator/fuzzer/src/parachain.rs | 58 +- xcm/xcm-simulator/fuzzer/src/relay_chain.rs | 53 +- xcm/xcm-simulator/src/lib.rs | 75 +- zombienet_tests/.set_env | 20 + zombienet_tests/README.md | 43 + .../functional/0001-parachains-pvf.zndsl | 42 +- .../functional/0002-parachains-disputes.zndsl | 23 +- .../functional/0003-beefy-and-mmr.zndsl | 6 - .../0003-parachains-garbage-candidate.toml | 2 +- .../0003-parachains-garbage-candidate.zndsl | 10 +- zombienet_tests/misc/0001-paritydb.toml | 2 +- zombienet_tests/misc/0001-paritydb.zndsl | 23 - zombienet_tests/misc/0002-upgrade-node.zndsl | 5 - .../smoke/0001-parachains-smoke-test.toml | 2 +- .../smoke/0001-parachains-smoke-test.zndsl | 3 - .../0002-parachains-upgrade-smoke-test.zndsl | 3 - ...3-deregister-register-validator-smoke.toml | 1 - ...-deregister-register-validator-smoke.zndsl | 5 - 732 files changed, 53717 insertions(+), 28728 deletions(-) create mode 100644 .gitattributes delete mode 100644 .github/workflows/auto-label-prs.yml create mode 100644 .github/workflows/check-D-labels.yml create mode 100644 .github/workflows/check-licenses.yml create mode 100644 erasure-coding/benches/README.md create mode 100644 erasure-coding/benches/scaling_with_validators.rs create mode 100644 node/core/pvf/src/prepare/memory_stats.rs create mode 100644 node/subsystem-util/src/nesting_sender.rs create mode 100644 primitives/src/vstaging/executor_params.rs delete mode 100644 roadmap/implementers-guide/src/node/utility/misbehavior-arbitration.md create mode 100644 runtime/common/src/try_runtime.rs create mode 100644 runtime/kusama/src/weights/pallet_xcm.rs create mode 100644 runtime/parachains/src/disputes/migration.rs create mode 100644 runtime/parachains/src/ump/migration.rs create mode 100644 runtime/polkadot/src/weights/pallet_xcm.rs create mode 100644 runtime/polkadot/src/weights/runtime_parachains_ump.rs create mode 100644 runtime/rococo/src/weights/pallet_xcm.rs create mode 100644 runtime/westend/src/weights/pallet_xcm.rs create mode 100644 scripts/ci/changelog/templates/changes_api.md.tera create mode 100644 scripts/ci/changelog/templates/full_pr_list.md.tera create mode 100755 scripts/ci/gitlab/prettier.sh delete mode 100644 utils/staking-miner/Cargo.lock create mode 100644 xcm/pallet-xcm/src/benchmarking.rs create mode 100644 xcm/pallet-xcm/src/migration.rs delete mode 100644 xcm/procedural/src/v0.rs delete mode 100644 xcm/procedural/src/v0/multilocation.rs delete mode 100644 xcm/procedural/src/v1/multilocation.rs create mode 100644 xcm/procedural/src/v2.rs create mode 100644 xcm/procedural/src/v3.rs create mode 100644 xcm/src/tests.rs delete mode 100644 xcm/src/v0/junction.rs delete mode 100644 xcm/src/v0/mod.rs delete mode 100644 xcm/src/v0/multi_asset.rs delete mode 100644 xcm/src/v0/order.rs delete mode 100644 xcm/src/v0/traits.rs delete mode 100644 xcm/src/v1/mod.rs delete mode 100644 xcm/src/v1/order.rs delete mode 100644 xcm/src/v1/traits.rs rename xcm/src/{v1 => v2}/junction.rs (77%) rename xcm/src/{v1 => v2}/multiasset.rs (81%) rename xcm/src/{v1 => v2}/multilocation.rs (95%) create mode 100644 xcm/src/v3/junction.rs create mode 100644 xcm/src/v3/junctions.rs create mode 100644 xcm/src/v3/matcher.rs create mode 100644 xcm/src/v3/mod.rs create mode 100644 xcm/src/v3/multiasset.rs create mode 100644 xcm/src/v3/multilocation.rs create mode 100644 xcm/src/v3/traits.rs create mode 100644 xcm/xcm-builder/src/asset_conversion.rs rename xcm/xcm-builder/src/{matches_fungible.rs => matches_token.rs} (65%) delete mode 100644 xcm/xcm-builder/src/mock.rs create mode 100644 xcm/xcm-builder/src/nonfungibles_adapter.rs create mode 100644 xcm/xcm-builder/src/tests/assets.rs create mode 100644 xcm/xcm-builder/src/tests/barriers.rs create mode 100644 xcm/xcm-builder/src/tests/basic.rs create mode 100644 xcm/xcm-builder/src/tests/bridging/local_para_para.rs create mode 100644 xcm/xcm-builder/src/tests/bridging/local_relay_relay.rs create mode 100644 xcm/xcm-builder/src/tests/bridging/mod.rs create mode 100644 xcm/xcm-builder/src/tests/bridging/paid_remote_relay_relay.rs create mode 100644 xcm/xcm-builder/src/tests/bridging/remote_para_para.rs create mode 100644 xcm/xcm-builder/src/tests/bridging/remote_para_para_via_relay.rs create mode 100644 xcm/xcm-builder/src/tests/bridging/remote_relay_relay.rs create mode 100644 xcm/xcm-builder/src/tests/expecting.rs create mode 100644 xcm/xcm-builder/src/tests/locking.rs create mode 100644 xcm/xcm-builder/src/tests/mock.rs rename xcm/{procedural/src/v1.rs => xcm-builder/src/tests/mod.rs} (56%) create mode 100644 xcm/xcm-builder/src/tests/origins.rs create mode 100644 xcm/xcm-builder/src/tests/querying.rs create mode 100644 xcm/xcm-builder/src/tests/transacting.rs create mode 100644 xcm/xcm-builder/src/tests/version_subscriptions.rs create mode 100644 xcm/xcm-builder/src/tests/weight.rs create mode 100644 xcm/xcm-builder/src/universal_exports.rs create mode 100644 xcm/xcm-executor/src/traits/asset_exchange.rs create mode 100644 xcm/xcm-executor/src/traits/asset_lock.rs create mode 100644 xcm/xcm-executor/src/traits/export.rs create mode 100644 xcm/xcm-executor/src/traits/fee_manager.rs delete mode 100644 xcm/xcm-executor/src/traits/matches_fungible.rs delete mode 100644 xcm/xcm-executor/src/traits/matches_fungibles.rs create mode 100644 xcm/xcm-executor/src/traits/token_matching.rs create mode 100644 xcm/xcm-simulator/fuzzer/.gitignore create mode 100644 xcm/xcm-simulator/fuzzer/README.md create mode 100644 zombienet_tests/.set_env diff --git a/.cargo/config.toml b/.cargo/config.toml index 66b28b3485d8..6cb38ecbc63f 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -29,4 +29,4 @@ rustflags = [ "-Aclippy::needless_option_as_deref", # false positives "-Aclippy::derivable_impls", # false positives "-Aclippy::stable_sort_primitive", # prefer stable sort -] +] \ No newline at end of file diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000000..2ea1ab2d6b9c --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +/.gitlab-ci.yml filter=ci-prettier +/scripts/ci/gitlab/pipeline/*.yml filter=ci-prettier diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 3fb899fd4366..a1fa925970bb 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -2,7 +2,7 @@ version: 2 updates: - package-ecosystem: "cargo" directory: "/" - labels: ["A2-insubstantial", "B0-silent", "C1-low 📌"] + labels: ["A2-insubstantial", "B0-silent", "C1-low", "E2-dependencies"] # Handle updates for crates from github.com/paritytech/substrate manually. ignore: - dependency-name: "substrate-*" @@ -21,6 +21,6 @@ updates: interval: "daily" - package-ecosystem: github-actions directory: '/' - labels: ["A2-insubstantial", "B0-silent", "C1-low 📌", "E3-dependencies"] + labels: ["A2-insubstantial", "B0-silent", "C1-low", "E2-dependencies"] schedule: interval: daily diff --git a/.github/pr-custom-review.yml b/.github/pr-custom-review.yml index 243b7434108d..739f2c82957e 100644 --- a/.github/pr-custom-review.yml +++ b/.github/pr-custom-review.yml @@ -20,7 +20,7 @@ rules: condition: include: .* # excluding files from 'Runtime files' and 'CI files' rules - exclude: ^runtime/(kusama|polkadot)/src/[^/]+\.rs$|^\.gitlab-ci\.yml|^scripts/ci/.*|^\.github/.* + exclude: ^runtime/(kusama|polkadot)/src/[^/]+\.rs$|^\.gitlab-ci\.yml|^(?!.*\.dic$|.*spellcheck\.toml$)scripts/ci/.*|^\.github/.* min_approvals: 2 teams: - core-devs @@ -28,7 +28,8 @@ rules: - name: CI files check_type: changed_files condition: - include: ^\.gitlab-ci\.yml|^scripts/ci/.*|^\.github/.* + # dictionary files are excluded + include: ^\.gitlab-ci\.yml|^(?!.*\.dic$|.*spellcheck\.toml$)scripts/ci/.*|^\.github/.* min_approvals: 2 teams: - ci diff --git a/.github/workflows/auto-label-prs.yml b/.github/workflows/auto-label-prs.yml deleted file mode 100644 index 50539b80b98b..000000000000 --- a/.github/workflows/auto-label-prs.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: Label PRs -on: - pull_request: - types: [opened,ready_for_review] - -jobs: - label-new-prs: - runs-on: ubuntu-latest - steps: - - name: Label drafts - uses: andymckay/labeler@e6c4322d0397f3240f0e7e30a33b5c5df2d39e90 # 1.0.4 - if: github.event.pull_request.draft == true - with: - add-labels: 'A3-inprogress' - remove-labels: 'A0-pleasereview' - - name: Label PRs - uses: andymckay/labeler@e6c4322d0397f3240f0e7e30a33b5c5df2d39e90 # 1.0.4 - if: github.event.pull_request.draft == false && ! contains(github.event.pull_request.labels.*.name, 'A2-insubstantial') - with: - add-labels: 'A0-pleasereview' - remove-labels: 'A3-inprogress' diff --git a/.github/workflows/check-D-labels.yml b/.github/workflows/check-D-labels.yml new file mode 100644 index 000000000000..9abefaa6fa10 --- /dev/null +++ b/.github/workflows/check-D-labels.yml @@ -0,0 +1,50 @@ +name: Check D labels + +on: + pull_request: + types: [labeled, opened, synchronize, unlabeled] + paths: + - runtime/polkadot/** + - runtime/kusama/** + - runtime/common/** + - primitives/src/** + +jobs: + check-labels: + runs-on: ubuntu-latest + steps: + - name: Pull image + env: + IMAGE: paritytech/ruled_labels:0.4.0 + run: docker pull $IMAGE + + - name: Check labels + env: + IMAGE: paritytech/ruled_labels:0.4.0 + MOUNT: /work + GITHUB_PR: ${{ github.event.pull_request.number }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + API_BASE: https://api.github.com/repos + REPO: ${{ github.repository }} + RULES_PATH: labels/ruled_labels + CHECK_SPECS: specs_polkadot.yaml + run: | + echo "REPO: ${REPO}" + echo "GITHUB_PR: ${GITHUB_PR}" + # Clone repo with labels specs + git clone https://github.com/paritytech/labels + # Fetch the labels for the PR under test + labels=$( curl -H "Authorization: token ${GITHUB_TOKEN}" -s "$API_BASE/${REPO}/pulls/${GITHUB_PR}" | jq '.labels | .[] | .name' | tr "\n" ",") + + if [ -z "${labels}" ]; then + docker run --rm -i -v $PWD/${RULES_PATH}/:$MOUNT $IMAGE check $MOUNT/$CHECK_SPECS --tags audit --no-label + fi + + labels_args=${labels: :-1} + printf "Checking labels: %s\n" "${labels_args}" + + # Prevent the shell from splitting labels with spaces + IFS="," + + # --dev is more useful to debug mode to debug + docker run --rm -i -v $PWD/${RULES_PATH}/:$MOUNT $IMAGE check $MOUNT/$CHECK_SPECS --labels ${labels_args} --dev --tags audit diff --git a/.github/workflows/check-labels.yml b/.github/workflows/check-labels.yml index f0f5556ebede..df0a0e9cf02d 100644 --- a/.github/workflows/check-labels.yml +++ b/.github/workflows/check-labels.yml @@ -8,16 +8,38 @@ jobs: check-labels: runs-on: ubuntu-latest steps: - - name: Checkout sources - uses: actions/checkout@v3 - with: - fetch-depth: 0 - ref: ${{ github.event.pull_request.head.ref }} - repository: ${{ github.event.pull_request.head.repo.full_name }} + - name: Pull image + env: + IMAGE: paritytech/ruled_labels:0.4.0 + run: docker pull $IMAGE + - name: Check labels - run: bash ${{ github.workspace }}/scripts/ci/github/check_labels.sh env: + IMAGE: paritytech/ruled_labels:0.4.0 + MOUNT: /work GITHUB_PR: ${{ github.event.pull_request.number }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - HEAD_SHA: ${{ github.event.pull_request.head.sha }} - BASE_SHA: ${{ github.event.pull_request.base.sha }} + API_BASE: https://api.github.com/repos + REPO: ${{ github.repository }} + RULES_PATH: labels/ruled_labels + CHECK_SPECS: specs_polkadot.yaml + run: | + echo "REPO: ${REPO}" + echo "GITHUB_PR: ${GITHUB_PR}" + # Clone repo with labels specs + git clone https://github.com/paritytech/labels + # Fetch the labels for the PR under test + labels=$( curl -H "Authorization: token ${GITHUB_TOKEN}" -s "$API_BASE/${REPO}/pulls/${GITHUB_PR}" | jq '.labels | .[] | .name' | tr "\n" ",") + + if [ -z "${labels}" ]; then + docker run --rm -i -v $PWD/${RULES_PATH}/:$MOUNT $IMAGE check $MOUNT/$CHECK_SPECS --tags PR --no-label + fi + + labels_args=${labels: :-1} + printf "Checking labels: %s\n" "${labels_args}" + + # Prevent the shell from splitting labels with spaces + IFS="," + + # --dev is more useful to debug mode to debug + docker run --rm -i -v $PWD/${RULES_PATH}/:$MOUNT $IMAGE check $MOUNT/$CHECK_SPECS --labels ${labels_args} --dev --tags PR diff --git a/.github/workflows/check-licenses.yml b/.github/workflows/check-licenses.yml new file mode 100644 index 000000000000..929e9b2e6fec --- /dev/null +++ b/.github/workflows/check-licenses.yml @@ -0,0 +1,26 @@ +name: Check licenses + +on: + pull_request: + +jobs: + check-licenses: + runs-on: ubuntu-22.04 + steps: + - name: Checkout sources + uses: actions/checkout@v3.3.0 + - uses: actions/setup-node@v3.6.0 + with: + node-version: '16.19.0' + registry-url: 'https://npm.pkg.github.com' + scope: '@paritytech' + - name: Check the licenses + run: | + shopt -s globstar + + npx @paritytech/license-scanner@0.0.3 scan \ + --ensure-licenses Apache-2.0 \ + --ensure-licenses GPL-3.0-only \ + ./**/*.rs + env: + NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release-10_candidate.yml b/.github/workflows/release-10_candidate.yml index acffa6842d49..be12406317fa 100644 --- a/.github/workflows/release-10_candidate.yml +++ b/.github/workflows/release-10_candidate.yml @@ -19,7 +19,7 @@ jobs: # Get last rc tag if exists, else set it to {version}-rc1 version=${GITHUB_REF#refs/heads/release-} echo "$version" - echo "::set-output name=version::$version" + echo "version=$version" >> $GITHUB_OUTPUT git tag -l last_rc=$(git tag -l "$version-rc*" | sort -V | tail -n 1) if [ -n "$last_rc" ]; then @@ -27,11 +27,11 @@ jobs: echo $suffix ((suffix++)) echo $suffix - echo "::set-output name=new_tag::$version-rc$suffix" - echo "::set-output name=first_rc::false" + echo "new_tag=$version-rc$suffix" >> $GITHUB_OUTPUT + echo "first_rc=false" >> $GITHUB_OUTPUT else - echo "::set-output name=new_tag::$version-rc1" - echo "::set-output name=first_rc::true" + echo "new_tag=$version-rc1" >> $GITHUB_OUTPUT + echo "first_rc=true" >> $GITHUB_OUTPUT fi - name: Apply new tag uses: tvdias/github-tagger@ed7350546e3e503b5e942dffd65bc8751a95e49d # v0.0.2 @@ -42,7 +42,7 @@ jobs: repo-token: "${{ secrets.RELEASE_BRANCH_TOKEN }}" tag: ${{ steps.compute_tag.outputs.new_tag }} - id: create-issue - uses: JasonEtco/create-an-issue@9e6213aec58987fa7d2f4deb8b256b99e63107a2 # v2.6.0 + uses: JasonEtco/create-an-issue@e27dddc79c92bc6e4562f268fffa5ed752639abd # v2.9.1 # Only create the issue if it's the first release candidate if: steps.compute_tag.outputs.first_rc == 'true' env: diff --git a/.github/workflows/release-30_publish-draft-release.yml b/.github/workflows/release-30_publish-draft-release.yml index bdb17fa9fc68..356a8daa6b43 100644 --- a/.github/workflows/release-30_publish-draft-release.yml +++ b/.github/workflows/release-30_publish-draft-release.yml @@ -17,8 +17,8 @@ jobs: steps: - id: get-rust-versions run: | - echo "::set-output name=stable::$(rustc +stable --version)" - echo "::set-output name=nightly::$(rustc +nightly --version)" + echo "stable=$(rustc +stable --version)" >> $GITHUB_OUTPUT + echo "nightly=$(rustc +nightly --version)" >> $GITHUB_OUTPUT build-runtimes: runs-on: ubuntu-latest @@ -40,9 +40,8 @@ jobs: - name: Build ${{ matrix.runtime }} runtime id: srtool_build - uses: chevdor/srtool-actions@v0.5.0 + uses: chevdor/srtool-actions@v0.6.0 with: - # This is the default with chevdor/srtool-actions@v0.3.0+ but we make it clear image: paritytech/srtool chain: ${{ matrix.runtime }} @@ -167,7 +166,7 @@ jobs: ls "$RUNTIME_DIR/${{ matrix.runtime }}" runtime_ver=$(ruby script.rb) echo "Found version: >$runtime_ver<" - echo "::set-output name=runtime_ver::$runtime_ver" + echo "runtime_ver=$runtime_ver" >> $GITHUB_OUTPUT - name: Upload compressed ${{ matrix.runtime }} wasm uses: actions/upload-release-asset@v1 diff --git a/.github/workflows/release-50_publish-docker-release.yml b/.github/workflows/release-50_publish-docker-release.yml index 5a9d683bc3b3..a6bf19162a46 100644 --- a/.github/workflows/release-50_publish-docker-release.yml +++ b/.github/workflows/release-50_publish-docker-release.yml @@ -27,7 +27,7 @@ jobs: password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build and push id: docker_build - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v4 with: push: true file: scripts/ci/dockerfiles/polkadot_injected_release.Dockerfile diff --git a/.github/workflows/release-51_publish-docker-manual.yml b/.github/workflows/release-51_publish-docker-manual.yml index e0bcf99a8d60..0c973d33b71c 100644 --- a/.github/workflows/release-51_publish-docker-manual.yml +++ b/.github/workflows/release-51_publish-docker-manual.yml @@ -34,7 +34,7 @@ jobs: password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build and push id: docker_build - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v4 with: push: true file: scripts/ci/dockerfiles/polkadot_injected_release.Dockerfile diff --git a/.gitignore b/.gitignore index f9ab33eb63f3..0c6913dac340 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,5 @@ runtime/wasm/target/ .vscode polkadot.* !polkadot.service -!.rpm/* .DS_Store .env diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6d9300ba93a0..7ec774723e7b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -29,38 +29,38 @@ workflow: - if: $CI_COMMIT_BRANCH variables: - GIT_STRATEGY: fetch - GIT_DEPTH: 100 - CI_SERVER_NAME: "GitLab CI" - CI_IMAGE: "paritytech/ci-linux:production" - BUILDAH_IMAGE: "quay.io/buildah/stable:v1.27" - DOCKER_OS: "debian:stretch" - ARCH: "x86_64" - ZOMBIENET_IMAGE: "docker.io/paritytech/zombienet:v1.2.78" + GIT_STRATEGY: fetch + GIT_DEPTH: 100 + CI_SERVER_NAME: "GitLab CI" + CI_IMAGE: "paritytech/ci-linux:production" + BUILDAH_IMAGE: "quay.io/buildah/stable:v1.27" + DOCKER_OS: "debian:stretch" + ARCH: "x86_64" + ZOMBIENET_IMAGE: "docker.io/paritytech/zombienet:v1.3.37" default: - cache: {} + cache: {} retry: max: 2 when: - runner_system_failure - unknown_failure - api_failure - interruptible: true + interruptible: true .collect-artifacts: artifacts: - name: "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}" - when: on_success - expire_in: 7 days + name: "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}" + when: on_success + expire_in: 7 days paths: - ./artifacts/ .collect-artifacts-short: artifacts: - name: "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}" - when: on_success - expire_in: 1 days + name: "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}" + when: on_success + expire_in: 1 days paths: - ./artifacts/ @@ -76,22 +76,22 @@ default: .pipeline-stopper-artifacts: artifacts: - reports: - dotenv: pipeline-stopper.env + reports: + dotenv: pipeline-stopper.env .job-switcher: before_script: - if echo "$CI_DISABLED_JOBS" | grep -xF "$CI_JOB_NAME"; then echo "The job has been cancelled in CI settings"; exit 0; fi .kubernetes-env: - image: "${CI_IMAGE}" + image: "${CI_IMAGE}" before_script: - !reference [.job-switcher, before_script] tags: - kubernetes-parity-build .docker-env: - image: "${CI_IMAGE}" + image: "${CI_IMAGE}" before_script: - !reference [.job-switcher, before_script] tags: @@ -108,7 +108,7 @@ default: - if: $CI_PIPELINE_SOURCE == "web" - if: $CI_PIPELINE_SOURCE == "schedule" - if: $CI_COMMIT_REF_NAME == "master" - - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs + - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs .common-refs: # these jobs run always* @@ -116,15 +116,15 @@ default: - if: $CI_PIPELINE_SOURCE == "web" - if: $CI_PIPELINE_SOURCE == "schedule" - if: $CI_COMMIT_REF_NAME == "master" - - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs - - if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1 - - if: $CI_COMMIT_REF_NAME =~ /^release-v[0-9]+\.[0-9]+.*$/ # i.e. release-v0.9.27 + - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs + - if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1 + - if: $CI_COMMIT_REF_NAME =~ /^release-v[0-9]+\.[0-9]+.*$/ # i.e. release-v0.9.27 .test-pr-refs: rules: - if: $CI_PIPELINE_SOURCE == "pipeline" when: never - - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs + - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs .zombienet-refs: rules: @@ -133,7 +133,7 @@ default: - if: $CI_PIPELINE_SOURCE == "schedule" when: never - if: $CI_COMMIT_REF_NAME == "master" - - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs + - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs .deploy-testnet-refs: rules: @@ -148,9 +148,9 @@ default: when: never - if: $CI_PIPELINE_SOURCE == "schedule" - if: $CI_PIPELINE_SOURCE == "web" && - $CI_COMMIT_REF_NAME == "master" + $CI_COMMIT_REF_NAME == "master" - if: $CI_COMMIT_REF_NAME == "master" - - if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1 + - if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1 .build-push-image: before_script: @@ -162,19 +162,19 @@ default: - echo "Polkadot version = ${VERSION} (EXTRATAG = ${EXTRATAG})" script: - test "$DOCKER_USER" -a "$DOCKER_PASS" || - ( echo "no docker credentials provided"; exit 1 ) + ( echo "no docker credentials provided"; exit 1 ) - cd ./artifacts - buildah bud - --format=docker - --build-arg VCS_REF="${CI_COMMIT_SHA}" - --build-arg BUILD_DATE="$(date -u '+%Y-%m-%dT%H:%M:%SZ')" - --build-arg IMAGE_NAME="${IMAGE_NAME}" - --tag "$IMAGE_NAME:$VERSION" - --tag "$IMAGE_NAME:$EXTRATAG" - --file ${DOCKERFILE} . + --format=docker + --build-arg VCS_REF="${CI_COMMIT_SHA}" + --build-arg BUILD_DATE="$(date -u '+%Y-%m-%dT%H:%M:%SZ')" + --build-arg IMAGE_NAME="${IMAGE_NAME}" + --tag "$IMAGE_NAME:$VERSION" + --tag "$IMAGE_NAME:$EXTRATAG" + --file ${DOCKERFILE} . # The job will success only on the protected branch - echo "$DOCKER_PASS" | - buildah login --username "$DOCKER_USER" --password-stdin docker.io + buildah login --username "$DOCKER_USER" --password-stdin docker.io - buildah info - buildah push --format=v2s2 "$IMAGE_NAME:$VERSION" - buildah push --format=v2s2 "$IMAGE_NAME:$EXTRATAG" @@ -200,50 +200,49 @@ include: #### stage: .post deploy-parity-testnet: - stage: .post + stage: .post extends: - .deploy-testnet-refs variables: - POLKADOT_CI_COMMIT_NAME: "${CI_COMMIT_REF_NAME}" - POLKADOT_CI_COMMIT_REF: "${CI_COMMIT_SHORT_SHA}" - allow_failure: false - trigger: "parity/infrastructure/parity-testnet" + POLKADOT_CI_COMMIT_NAME: "${CI_COMMIT_REF_NAME}" + POLKADOT_CI_COMMIT_REF: "${CI_COMMIT_SHORT_SHA}" + allow_failure: false + trigger: "parity/infrastructure/parity-testnet" # This job cancels the whole pipeline if any of provided jobs fail. # In a DAG, every jobs chain is executed independently of others. The `fail_fast` principle suggests # to fail the pipeline as soon as possible to shorten the feedback loop. .cancel-pipeline-template: - stage: .post + stage: .post rules: - - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs + - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs when: on_failure variables: - PROJECT_ID: "${CI_PROJECT_ID}" - PROJECT_NAME: "${CI_PROJECT_NAME}" - PIPELINE_ID: "${CI_PIPELINE_ID}" - FAILED_JOB_URL: "${FAILED_JOB_URL}" - FAILED_JOB_NAME: "${FAILED_JOB_NAME}" - PR_NUM: "${PR_NUM}" + PROJECT_ID: "${CI_PROJECT_ID}" + PROJECT_NAME: "${CI_PROJECT_NAME}" + PIPELINE_ID: "${CI_PIPELINE_ID}" + FAILED_JOB_URL: "${FAILED_JOB_URL}" + FAILED_JOB_NAME: "${FAILED_JOB_NAME}" + PR_NUM: "${PR_NUM}" trigger: - project: "parity/infrastructure/ci_cd/pipeline-stopper" - branch: "as-improve" + project: "parity/infrastructure/ci_cd/pipeline-stopper" + branch: "as-improve" remove-cancel-pipeline-message: stage: .post rules: - - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs + - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs variables: - PROJECT_ID: "${CI_PROJECT_ID}" - PROJECT_NAME: "${CI_PROJECT_NAME}" - PIPELINE_ID: "${CI_PIPELINE_ID}" - FAILED_JOB_URL: "https://gitlab.com" - FAILED_JOB_NAME: "nope" - PR_NUM: "${CI_COMMIT_REF_NAME}" + PROJECT_ID: "${CI_PROJECT_ID}" + PROJECT_NAME: "${CI_PROJECT_NAME}" + PIPELINE_ID: "${CI_PIPELINE_ID}" + FAILED_JOB_URL: "https://gitlab.com" + FAILED_JOB_NAME: "nope" + PR_NUM: "${CI_COMMIT_REF_NAME}" trigger: - project: "parity/infrastructure/ci_cd/pipeline-stopper" + project: "parity/infrastructure/ci_cd/pipeline-stopper" cancel-pipeline-test-linux-stable: - extends: .cancel-pipeline-template + extends: .cancel-pipeline-template needs: - - job: test-linux-stable - + - job: test-linux-stable diff --git a/Cargo.lock b/Cargo.lock index e9c3c297445b..32bb4a4350c7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -18,7 +18,16 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" dependencies = [ - "gimli", + "gimli 0.26.2", +] + +[[package]] +name = "addr2line" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" +dependencies = [ + "gimli 0.27.2", ] [[package]] @@ -27,13 +36,44 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "aead" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" +dependencies = [ + "generic-array 0.14.7", +] + [[package]] name = "aead" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.7", + "rand_core 0.6.4", +] + +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common", + "generic-array 0.14.7", +] + +[[package]] +name = "aes" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561" +dependencies = [ + "aes-soft", + "aesni", + "cipher 0.2.5", ] [[package]] @@ -43,50 +83,131 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" dependencies = [ "cfg-if", - "cipher", + "cipher 0.3.0", "cpufeatures", "opaque-debug 0.3.0", ] +[[package]] +name = "aes" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241" +dependencies = [ + "cfg-if", + "cipher 0.4.4", + "cpufeatures", +] + [[package]] name = "aes-gcm" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6" dependencies = [ - "aead", - "aes", - "cipher", - "ctr", - "ghash", + "aead 0.4.3", + "aes 0.7.5", + "cipher 0.3.0", + "ctr 0.8.0", + "ghash 0.4.4", + "subtle", +] + +[[package]] +name = "aes-gcm" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82e1366e0c69c9f927b1fa5ce2c7bf9eafc8f9268c0b9800729e8b267612447c" +dependencies = [ + "aead 0.5.2", + "aes 0.8.2", + "cipher 0.4.4", + "ctr 0.9.2", + "ghash 0.5.0", "subtle", ] +[[package]] +name = "aes-soft" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072" +dependencies = [ + "cipher 0.2.5", + "opaque-debug 0.3.0", +] + +[[package]] +name = "aesni" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce" +dependencies = [ + "cipher 0.2.5", + "opaque-debug 0.3.0", +] + [[package]] name = "ahash" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "getrandom 0.2.3", + "getrandom 0.2.9", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +dependencies = [ + "cfg-if", + "getrandom 0.2.9", "once_cell", "version_check", ] [[package]] name = "aho-corasick" -version = "0.7.18" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +dependencies = [ + "memchr", +] + +[[package]] +name = "aho-corasick" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04" dependencies = [ "memchr", ] [[package]] name = "always-assert" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf688625d06217d5b1bb0ea9d9c44a1635fd0ee3534466388d18203174f4d11" +checksum = "4436e0292ab1bb631b42973c61205e704475fe8126af845c8d923c0996328127" + +[[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 = "anes" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" [[package]] name = "ansi_term" @@ -97,38 +218,93 @@ dependencies = [ "winapi", ] +[[package]] +name = "anstream" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is-terminal", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d" + +[[package]] +name = "anstyle-parse" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "anstyle-wincon" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" +dependencies = [ + "anstyle", + "windows-sys 0.48.0", +] + [[package]] name = "anyhow" -version = "1.0.66" +version = "1.0.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6" +checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" [[package]] name = "approx" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "072df7202e63b127ab55acfe16ce97013d5b97bf160489336d3f1840fd78e99e" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" dependencies = [ "num-traits", ] [[package]] name = "arbitrary" -version = "1.0.3" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "510c76ecefdceada737ea728f4f9a84bd2e1ef29f1ba555e560940fe279954de" +checksum = "e2d098ff73c1ca148721f37baad5ea6a465a13f9573aba8641fbbbae8164a54e" + +[[package]] +name = "arc-swap" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" [[package]] name = "array-bytes" -version = "4.1.0" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a913633b0c922e6b745072795f50d90ebea78ba31a57e2ac8c2fc7b50950949" +checksum = "f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6" [[package]] name = "arrayref" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" [[package]] name = "arrayvec" @@ -143,198 +319,168 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" [[package]] -name = "asn1_der" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22d1f4b888c298a027c99dc9048015fac177587de20fc30232a057dfbe24a21" - -[[package]] -name = "assert_cmd" -version = "2.0.4" +name = "asn1-rs" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93ae1ddd39efd67689deb1979d80bad3bf7f2b09c6e6117c8d1f2443b5e2f83e" +checksum = "30ff05a702273012438132f449575dbc804e27b2f3cbe3069aa237d26c98fa33" dependencies = [ - "bstr", - "doc-comment", - "predicates", - "predicates-core", - "predicates-tree", - "wait-timeout", + "asn1-rs-derive 0.1.0", + "asn1-rs-impl", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror", + "time 0.3.21", ] [[package]] -name = "assert_matches" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" - -[[package]] -name = "async-attributes" -version = "1.1.2" +name = "asn1-rs" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5" +checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" dependencies = [ - "quote", - "syn", + "asn1-rs-derive 0.4.0", + "asn1-rs-impl", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror", + "time 0.3.21", ] [[package]] -name = "async-channel" -version = "1.6.1" +name = "asn1-rs-derive" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2114d64672151c0c5eaa5e131ec84a74f06e1e559830dabba01ca30605d66319" +checksum = "db8b7511298d5b7784b40b092d9e9dcd3a627a5707e4b5e507931ab0d44eeebf" dependencies = [ - "concurrent-queue", - "event-listener", - "futures-core", + "proc-macro2", + "quote", + "syn 1.0.109", + "synstructure", ] [[package]] -name = "async-executor" -version = "1.4.1" +name = "asn1-rs-derive" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965" +checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" dependencies = [ - "async-task", - "concurrent-queue", - "fastrand", - "futures-lite", - "once_cell", - "slab", + "proc-macro2", + "quote", + "syn 1.0.109", + "synstructure", ] [[package]] -name = "async-global-executor" -version = "2.0.2" +name = "asn1-rs-impl" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9586ec52317f36de58453159d48351bc244bc24ced3effc1fce22f3d48664af6" +checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" dependencies = [ - "async-channel", - "async-executor", - "async-io", - "async-mutex", - "blocking", - "futures-lite", - "num_cpus", - "once_cell", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "async-io" -version = "1.6.0" +name = "asn1_der" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a811e6a479f2439f0c04038796b5cfb3d2ad56c230e0f2d3f7b04d68cfee607b" -dependencies = [ - "concurrent-queue", - "futures-lite", - "libc", - "log", - "once_cell", - "parking", - "polling", - "slab", - "socket2", - "waker-fn", - "winapi", -] +checksum = "155a5a185e42c6b77ac7b88a15143d930a9e9727a5b7b77eed417404ab15c247" [[package]] -name = "async-lock" -version = "2.4.0" +name = "assert_cmd" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6a8ea61bf9947a1007c5cada31e647dbc77b103c679858150003ba697ea798b" +checksum = "86d6b683edf8d1119fe420a94f8a7e389239666aa72e65495d91c00462510151" dependencies = [ - "event-listener", + "anstyle", + "bstr", + "doc-comment", + "predicates 3.0.3", + "predicates-core", + "predicates-tree", + "wait-timeout", ] [[package]] -name = "async-mutex" -version = "1.4.0" +name = "assert_matches" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479db852db25d9dbf6204e6cb6253698f175c15726470f78af0d918e99d6156e" -dependencies = [ - "event-listener", -] +checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" [[package]] -name = "async-process" -version = "1.3.0" +name = "async-channel" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83137067e3a2a6a06d67168e49e68a0957d215410473a740cea95a2425c0b7c6" +checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833" dependencies = [ - "async-io", - "blocking", - "cfg-if", + "concurrent-queue", "event-listener", - "futures-lite", - "libc", - "once_cell", - "signal-hook", - "winapi", + "futures-core", ] [[package]] -name = "async-std" -version = "1.12.0" +name = "async-io" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" dependencies = [ - "async-attributes", - "async-channel", - "async-global-executor", - "async-io", "async-lock", - "crossbeam-utils", - "futures-channel", - "futures-core", - "futures-io", + "autocfg", + "cfg-if", + "concurrent-queue", "futures-lite", - "gloo-timers", - "kv-log-macro", "log", - "memchr", - "once_cell", - "pin-project-lite 0.2.7", - "pin-utils", + "parking", + "polling", + "rustix 0.37.19", "slab", - "wasm-bindgen-futures", + "socket2", + "waker-fn", ] [[package]] -name = "async-task" -version = "4.0.3" +name = "async-lock" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91831deabf0d6d7ec49552e489aed63b7456a7a3c46cff62adad428110b0af0" +checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" +dependencies = [ + "event-listener", +] [[package]] name = "async-trait" -version = "0.1.58" +version = "0.1.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e805d94e6b5001b651426cf4cd446b1ab5f319d27bab5c644f61de0a804360c" +checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] name = "asynchronous-codec" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0de5164e5edbf51c45fb8c2d9664ae1c095cce1b265ecf7569093c0d66ef690" +checksum = "06a0daa378f5fd10634e44b0a29b2a87b890657658e072a30d6f26e57ddee182" dependencies = [ "bytes", "futures-sink", "futures-util", "memchr", - "pin-project-lite 0.2.7", + "pin-project-lite 0.2.9", ] [[package]] name = "atomic-waker" -version = "1.0.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a" +checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3" [[package]] name = "atty" @@ -342,7 +488,7 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ - "hermit-abi", + "hermit-abi 0.1.19", "libc", "winapi", ] @@ -355,24 +501,24 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "backtrace" -version = "0.3.64" +version = "0.3.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e121dee8023ce33ab248d9ce1493df03c3b38a659b240096fcbd7048ff9c31f" +checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" dependencies = [ - "addr2line", + "addr2line 0.19.0", "cc", "cfg-if", "libc", - "miniz_oxide", - "object 0.27.1", + "miniz_oxide 0.6.2", + "object 0.30.3", "rustc-demangle", ] [[package]] name = "base-x" -version = "0.2.8" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4521f3e3d031370679b3b140beb36dfe4801b09ac77e30c61941f97df3ef28b" +checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" [[package]] name = "base16ct" @@ -388,90 +534,47 @@ checksum = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581" [[package]] name = "base64" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] -name = "base64ct" -version = "1.5.2" +name = "base64" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2b2456fd614d856680dcd9fcc660a51a820fa09daef2e49772b56a193c8474" +checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" [[package]] -name = "beef" -version = "0.5.1" +name = "base64ct" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bed554bd50246729a1ec158d08aa3235d1b69d94ad120ebe187e28894787e736" -dependencies = [ - "serde", -] +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] -name = "beefy-gadget" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +name = "basic-toml" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c0de75129aa8d0cceaf750b89013f0e08804d6ec61416da787b35ad0d7cddf1" dependencies = [ - "array-bytes", - "async-trait", - "fnv", - "futures", - "futures-timer", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "sc-chain-spec", - "sc-client-api", - "sc-consensus", - "sc-finality-grandpa", - "sc-keystore", - "sc-network", - "sc-network-common", - "sc-network-gossip", - "sc-utils", - "sp-api", - "sp-application-crypto", - "sp-arithmetic", - "sp-beefy", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-keystore", - "sp-mmr-primitives", - "sp-runtime", - "substrate-prometheus-endpoint", - "thiserror", - "wasm-timer", + "serde", ] [[package]] -name = "beefy-gadget-rpc" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +name = "beef" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" dependencies = [ - "beefy-gadget", - "futures", - "jsonrpsee", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "sc-rpc", - "sc-utils", "serde", - "sp-beefy", - "sp-core", - "sp-runtime", - "thiserror", ] [[package]] -name = "beefy-merkle-tree" +name = "binary-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ - "sp-api", - "sp-beefy", - "sp-runtime", + "hash-db", + "log", ] [[package]] @@ -485,9 +588,9 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.60.1" +version = "0.64.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "062dddbc1ba4aca46de6338e2bf87771414c335f7b2f2036e8f3e9befebf88e6" +checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4" dependencies = [ "bitflags", "cexpr", @@ -500,6 +603,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", + "syn 1.0.109", ] [[package]] @@ -522,18 +626,18 @@ dependencies = [ [[package]] name = "blake2" -version = "0.10.4" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9cf849ee05b2ee5fba5e36f97ff8ec2533916700fc0758d40d92136a42f3388" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" dependencies = [ - "digest 0.10.3", + "digest 0.10.6", ] [[package]] name = "blake2b_simd" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72936ee4afc7f8f736d1c38383b56480b5497b4617b4a77bdbf1d2ababc76127" +checksum = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc" dependencies = [ "arrayref", "arrayvec 0.7.2", @@ -542,9 +646,9 @@ dependencies = [ [[package]] name = "blake2s_simd" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db539cc2b5f6003621f1cd9ef92d7ded8ea5232c7de0f9faa2de251cd98730d4" +checksum = "6637f448b9e61dfadbdcbae9a885fadee1f3eaffb1f8d3c1965d3ade8bdfd44f" dependencies = [ "arrayref", "arrayvec 0.7.2", @@ -553,16 +657,16 @@ dependencies = [ [[package]] name = "blake3" -version = "1.3.1" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a08e53fc5a564bb15bfe6fae56bd71522205f1f91893f9c0116edad6496c183f" +checksum = "42ae2468a89544a466886840aa467a25b766499f4f04bf7d9fcd10ecee9fccef" dependencies = [ "arrayref", "arrayvec 0.7.2", "cc", "cfg-if", "constant_time_eq", - "digest 0.10.3", + "digest 0.10.6", ] [[package]] @@ -571,7 +675,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" dependencies = [ - "block-padding", + "block-padding 0.1.5", "byte-tools", "byteorder", "generic-array 0.12.4", @@ -583,16 +687,26 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.7", ] [[package]] name = "block-buffer" -version = "0.10.0" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1d36a02058e76b040de25a4464ba1c80935655595b661505c8b39b664828b95" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.7", +] + +[[package]] +name = "block-modes" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57a0e8073e8baa88212fb5823574c02ebccb395136ba9a164ab89379ec6072f0" +dependencies = [ + "block-padding 0.2.1", + "cipher 0.2.5", ] [[package]] @@ -605,24 +719,28 @@ dependencies = [ ] [[package]] -name = "blocking" -version = "1.1.0" +name = "block-padding" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "046e47d4b2d391b1f6f8b407b1deb8dee56c1852ccd868becf2710f601b5f427" +checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" + +[[package]] +name = "bounded-collections" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3888522b497857eb606bf51695988dba7096941822c1bcf676e3a929a9ae7a0" dependencies = [ - "async-channel", - "async-task", - "atomic-waker", - "fastrand", - "futures-lite", - "once_cell", + "log", + "parity-scale-codec", + "scale-info", + "serde", ] [[package]] name = "bounded-vec" -version = "0.6.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3372be4090bf9d4da36bd8ba7ce6ca1669503d0cf6e667236c6df7f053153eb6" +checksum = "68534a48cbf63a4b1323c433cf21238c9ec23711e0df13b08c33e5c2082663ce" dependencies = [ "thiserror", ] @@ -635,13 +753,14 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "0.2.17" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" +checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" dependencies = [ - "lazy_static", "memchr", + "once_cell", "regex-automata", + "serde", ] [[package]] @@ -655,15 +774,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.8.0" +version = "3.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f1e260c3a9040a7c19a12468758f4c16f31a81a1fe087482be9570ec864bb6c" +checksum = "9b1ce199063694f33ffb7dd4e0ee620741495c32833cde5aa08f02a0bf96f0c8" [[package]] name = "byte-slice-cast" -version = "1.2.0" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d30c751592b77c499e7bce34d99d67c2c11bdc0574e9a488ddade14150a4698" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" [[package]] name = "byte-tools" @@ -671,6 +790,12 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" +[[package]] +name = "bytemuck" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" + [[package]] name = "byteorder" version = "1.4.3" @@ -679,9 +804,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" -version = "1.2.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" +checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" [[package]] name = "bzip2-sys" @@ -694,17 +819,11 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "cache-padded" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "631ae5198c9be5e753e5cc215e1bd73c2b466a3565173db433f52bb9d3e66dba" - [[package]] name = "camino" -version = "1.0.5" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52d74260d9bf6944e2208aa46841b4b8f0d7ffc0849a06837b2f510337f86b2b" +checksum = "c530edf18f37068ac2d977409ed5cd50d53d73bc653c7647b48eb78976ac9ae2" dependencies = [ "serde", ] @@ -720,26 +839,44 @@ dependencies = [ [[package]] name = "cargo_metadata" -version = "0.14.2" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" +checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" dependencies = [ "camino", "cargo-platform", - "semver 1.0.4", + "semver 1.0.17", "serde", "serde_json", + "thiserror", ] +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + [[package]] name = "cc" -version = "1.0.73" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" dependencies = [ "jobserver", ] +[[package]] +name = "ccm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aca1a8fbc20b50ac9673ff014abfb2b5f4085ee1a850d408f14a159c5853ac7" +dependencies = [ + "aead 0.3.2", + "cipher 0.2.5", + "subtle", +] + [[package]] name = "cexpr" version = "0.6.0" @@ -777,7 +914,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6" dependencies = [ "cfg-if", - "cipher", + "cipher 0.3.0", "cpufeatures", "zeroize", ] @@ -788,26 +925,55 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5" dependencies = [ - "aead", + "aead 0.4.3", "chacha20", - "cipher", + "cipher 0.3.0", "poly1305", "zeroize", ] [[package]] name = "chrono" -version = "0.4.19" +version = "0.4.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" dependencies = [ - "libc", + "iana-time-zone", + "js-sys", "num-integer", "num-traits", - "time", + "time 0.1.45", + "wasm-bindgen", "winapi", ] +[[package]] +name = "ciborium" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "effd91f6c78e5a4ace8a5d3c0b6bfaec9e2baaef55f3efc00e45fb2e477ee926" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdf919175532b369853f5d5e20b26b43112613fd6fe7aee757e35f7a44642656" + +[[package]] +name = "ciborium-ll" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b" +dependencies = [ + "ciborium-io", + "half", +] + [[package]] name = "cid" version = "0.8.6" @@ -816,18 +982,37 @@ checksum = "f6ed9c8b2d17acb8110c46f1da5bf4a696d745e1474a16db0cd2b49cd0249bf2" dependencies = [ "core2", "multibase", - "multihash", + "multihash 0.16.3", "serde", "unsigned-varint", ] +[[package]] +name = "cipher" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" +dependencies = [ + "generic-array 0.14.7", +] + [[package]] name = "cipher" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.7", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", ] [[package]] @@ -841,9 +1026,9 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.3.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa66045b9cb23c2e9c1520732030608b02ee07e5cfaa5a521ec15ded7fa24c90" +checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" dependencies = [ "glob", "libc", @@ -852,46 +1037,72 @@ dependencies = [ [[package]] name = "clap" -version = "4.0.15" +version = "3.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bf8832993da70a4c6d13c581f4463c2bdda27b9bf1c5498dc4365543abe6d6f" +checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" dependencies = [ - "atty", "bitflags", + "clap_lex 0.2.4", + "indexmap", + "textwrap", +] + +[[package]] +name = "clap" +version = "4.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34d21f9bf1b425d2968943631ec91202fe5e837264063503708b83013f8fc938" +dependencies = [ + "clap_builder", "clap_derive", - "clap_lex", "once_cell", +] + +[[package]] +name = "clap_builder" +version = "4.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "914c8c79fb560f238ef6429439a30023c862f7a28e688c58f7203f12b29970bd" +dependencies = [ + "anstream", + "anstyle", + "bitflags", + "clap_lex 0.4.1", "strsim", - "termcolor", ] [[package]] name = "clap_derive" -version = "4.0.13" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c42f169caba89a7d512b5418b09864543eeb4d497416c917d7137863bd2076ad" +checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4" dependencies = [ "heck", - "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] name = "clap_lex" -version = "0.3.0" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d4198f73e42b4936b35b5bb248d81d2b595ecb170da0bac7655c54eedfa8da8" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" dependencies = [ "os_str_bytes", ] +[[package]] +name = "clap_lex" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" + [[package]] name = "coarsetime" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "454038500439e141804c655b4cd1bc6a70bcb95cd2bc9463af5661b6956f0e46" +checksum = "a90d114103adbc625300f346d4d09dfb4ab1c4a8df6868435dd903392ecf4354" dependencies = [ "libc", "once_cell", @@ -911,9 +1122,9 @@ dependencies = [ [[package]] name = "color-eyre" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ebf286c900a6d5867aeff75cfee3192857bb7f24b547d4f0df2ed6baa812c90" +checksum = "5a667583cca8c4f8436db8de46ea8233c42a7d9ae424a82d338f2e4675229204" dependencies = [ "backtrace", "eyre", @@ -922,11 +1133,17 @@ dependencies = [ "owo-colors", ] +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + [[package]] name = "comfy-table" -version = "6.0.0" +version = "6.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121d8a5b0346092c18a4b2fd6f620d7a06f0eb7ac0a45860939a0884bc579c56" +checksum = "6e7b787b0dc42e8111badfdbe4c3059158ccb2db8780352fa1b01e8ccf45cc4d" dependencies = [ "strum", "strum_macros", @@ -935,24 +1152,24 @@ dependencies = [ [[package]] name = "concurrent-queue" -version = "1.2.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3" +checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" dependencies = [ - "cache-padded", + "crossbeam-utils", ] [[package]] name = "const-oid" -version = "0.9.0" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "722e23542a15cea1f65d4a1419c4cfd7a26706c70871a13a04238ca3f40f1661" +checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913" [[package]] name = "constant_time_eq" -version = "0.1.5" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" +checksum = "13418e745008f7349ec7e449155f419a61b92b58a99cc3616942b926825ec76b" [[package]] name = "convert_case" @@ -962,9 +1179,9 @@ checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" [[package]] name = "core-foundation" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6888e10551bb93e424d8df1d07f1a8b4fceb0001a3a4b048bfc47554946f47b3" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" dependencies = [ "core-foundation-sys", "libc", @@ -972,9 +1189,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "core2" @@ -987,9 +1204,9 @@ dependencies = [ [[package]] name = "cpp_demangle" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "931ab2a3e6330a07900b8e7ca4e106cdcbb93f2b9a52df55e54ee53d8305b55d" +checksum = "eeaa953eaad386a53111e47172c2fedba671e5684c8dd601a5f474f4f118710f" dependencies = [ "cfg-if", ] @@ -1006,27 +1223,27 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.1" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" +checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" dependencies = [ "libc", ] [[package]] name = "cranelift-bforest" -version = "0.88.0" +version = "0.93.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b27bbd3e6c422cf6282b047bcdd51ecd9ca9f3497a3be0132ffa08e509b824b0" +checksum = "2bc42ba2e232e5b20ff7dc299a812d53337dadce9a7e39a238e6a5cb82d2e57b" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.88.0" +version = "0.93.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "872f5d4557a411b087bd731df6347c142ae1004e6467a144a7e33662e5715a01" +checksum = "253531aca9b6f56103c9420369db3263e784df39aa1c90685a1f69cfbba0623e" dependencies = [ "arrayvec 0.7.2", "bumpalo", @@ -1035,7 +1252,8 @@ dependencies = [ "cranelift-codegen-shared", "cranelift-entity", "cranelift-isle", - "gimli", + "gimli 0.26.2", + "hashbrown 0.12.3", "log", "regalloc2", "smallvec", @@ -1044,33 +1262,33 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.88.0" +version = "0.93.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b49fdebb29c62c1fc4da1eeebd609e9d530ecde24a9876def546275f73a244" +checksum = "72f2154365e2bff1b1b8537a7181591fdff50d8e27fa6e40d5c69c3bad0ca7c8" dependencies = [ "cranelift-codegen-shared", ] [[package]] name = "cranelift-codegen-shared" -version = "0.88.0" +version = "0.93.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc0c091e2db055d4d7f6b7cec2d2ead286bcfaea3357c6a52c2a2613a8cb5ac" +checksum = "687e14e3f5775248930e0d5a84195abef8b829958e9794bf8d525104993612b4" [[package]] name = "cranelift-entity" -version = "0.88.0" +version = "0.93.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "354a9597be87996c9b278655e68b8447f65dd907256855ad773864edee8d985c" +checksum = "f42ea692c7b450ad18b8c9889661505d51c09ec4380cf1c2d278dbb2da22cae1" dependencies = [ "serde", ] [[package]] name = "cranelift-frontend" -version = "0.88.0" +version = "0.93.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd8dd3fb8b82c772f4172e87ae1677b971676fffa7c4e3398e3047e650a266b" +checksum = "8483c2db6f45fe9ace984e5adc5d058102227e4c62e5aa2054e16b0275fd3a6e" dependencies = [ "cranelift-codegen", "log", @@ -1080,15 +1298,15 @@ dependencies = [ [[package]] name = "cranelift-isle" -version = "0.88.0" +version = "0.93.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b82527802b1f7d8da288adc28f1dc97ea52943f5871c041213f7b5035ac698a7" +checksum = "e9793158837678902446c411741d87b43f57dadfb944f2440db4287cda8cbd59" [[package]] name = "cranelift-native" -version = "0.88.0" +version = "0.93.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c30ba8b910f1be023af0c39109cb28a8809734942a6b3eecbf2de8993052ea5e" +checksum = "72668c7755f2b880665cb422c8ad2d56db58a88b9bebfef0b73edc2277c13c49" dependencies = [ "cranelift-codegen", "libc", @@ -1097,9 +1315,9 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.88.0" +version = "0.93.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "776a8916d201894aca9637a20814f1e11abc62acd5cfbe0b4eb2e63922756971" +checksum = "3852ce4b088b44ac4e29459573943009a70d1b192c8d77ef949b4e814f656fc1" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -1111,20 +1329,69 @@ dependencies = [ "wasmtime-types", ] +[[package]] +name = "crc" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cace84e55f07e7301bae1c519df89cdad8cc3cd868413d3fdbdeca9ff3db484" + [[package]] name = "crc32fast" -version = "1.3.0" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "738c290dfaea84fc1ca15ad9c168d083b05a714e1efddd8edaab678dc28d2836" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" dependencies = [ "cfg-if", ] +[[package]] +name = "criterion" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c76e09c1aae2bc52b3d2f29e13c6572553b30c4aa1b8a49fd70de6412654cb" +dependencies = [ + "anes", + "atty", + "cast", + "ciborium", + "clap 3.2.25", + "criterion-plot", + "itertools", + "lazy_static", + "num-traits", + "oorandom", + "regex", + "serde", + "serde_derive", + "serde_json", + "tinytemplate", + "walkdir", +] + +[[package]] +name = "criterion-plot" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" +dependencies = [ + "cast", + "itertools", +] + [[package]] name = "crossbeam-channel" -version = "0.5.5" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c02a4d71819009c192cf4872265391563fd6a84c81ff2c0f2a7026ca4c1d85c" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" dependencies = [ "cfg-if", "crossbeam-utils", @@ -1132,9 +1399,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.1" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" dependencies = [ "cfg-if", "crossbeam-epoch", @@ -1143,22 +1410,22 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.5" +version = "0.9.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd" +checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695" dependencies = [ + "autocfg", "cfg-if", "crossbeam-utils", - "lazy_static", - "memoffset", + "memoffset 0.8.0", "scopeguard", ] [[package]] name = "crossbeam-queue" -version = "0.3.5" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f25d8400f4a7a5778f0e4e52384a48cbd9b5c495d110786187fc750075277a2" +checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add" dependencies = [ "cfg-if", "crossbeam-utils", @@ -1166,12 +1433,11 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.9" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ff1f980957787286a554052d03c7aee98d99cc32e09f6d45f0a814133c87978" +checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" dependencies = [ "cfg-if", - "once_cell", ] [[package]] @@ -1186,19 +1452,20 @@ version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" dependencies = [ - "generic-array 0.14.4", - "rand_core 0.6.3", + "generic-array 0.14.7", + "rand_core 0.6.4", "subtle", "zeroize", ] [[package]] name = "crypto-common" -version = "0.1.3" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.7", + "rand_core 0.6.4", "typenum", ] @@ -1208,7 +1475,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.7", "subtle", ] @@ -1218,18 +1485,18 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.7", "subtle", ] [[package]] name = "ctor" -version = "0.1.21" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccc0a48a9b826acdf4028595adc9db92caea352f7af011a3034acd172a52a0aa" +checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" dependencies = [ "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1238,7 +1505,16 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" dependencies = [ - "cipher", + "cipher 0.3.0", +] + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher 0.4.4", ] [[package]] @@ -1269,22 +1545,23 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "4.0.0-pre.1" +version = "4.0.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4033478fbf70d6acf2655ac70da91ee65852d69daf7a67bf7a2f518fb47aafcf" +checksum = "8d4ba9852b42210c7538b75484f9daa0655e9a3ac04f693747bb0f02cf3cfe16" dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.6.3", + "cfg-if", + "fiat-crypto", + "packed_simd_2", + "platforms 3.0.2", "subtle", "zeroize", ] [[package]] name = "cxx" -version = "1.0.80" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b7d4e43b25d3c994662706a1d4fcfc32aaa6afd287502c111b237093bb23f3a" +checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" dependencies = [ "cc", "cxxbridge-flags", @@ -1294,9 +1571,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.80" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84f8829ddc213e2c1368e51a2564c552b65a8cb6a28f31e576270ac81d5e5827" +checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" dependencies = [ "cc", "codespan-reporting", @@ -1304,31 +1581,66 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn", + "syn 2.0.15", ] [[package]] name = "cxxbridge-flags" -version = "1.0.80" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e72537424b474af1460806647c41d4b6d35d09ef7fe031c5c2fa5766047cc56a" +checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" [[package]] name = "cxxbridge-macro" -version = "1.0.80" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] + +[[package]] +name = "darling" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "309e4fb93eed90e1e14bea0da16b209f81813ba9fc7830c20ed151dd7bc0a4d7" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" dependencies = [ + "fnv", + "ident_case", "proc-macro2", "quote", - "syn", + "strsim", + "syn 1.0.109", +] + +[[package]] +name = "darling_macro" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +dependencies = [ + "darling_core", + "quote", + "syn 1.0.109", ] [[package]] name = "data-encoding" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57" +checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" [[package]] name = "data-encoding-macro" @@ -1347,28 +1659,57 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5bbed42daaa95e780b60a50546aa345b8413a1e46f9a40a12907d3598f038db" dependencies = [ "data-encoding", - "syn", + "syn 1.0.109", ] [[package]] name = "debugid" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91cf5a8c2f2097e2a32627123508635d47ce10563d999ec1a95addf08b502ba" +checksum = "d6ee87af31d84ef885378aebca32be3d682b0e0dc119d5b4860a2c5bb5046730" dependencies = [ - "uuid", + "uuid 0.8.2", ] [[package]] name = "der" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dd2ae565c0a381dde7fade45fce95984c568bdcb4700a4fdbe3175e0380b2f" +checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" dependencies = [ "const-oid", + "pem-rfc7468", "zeroize", ] +[[package]] +name = "der-parser" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe398ac75057914d7d07307bf67dc7f3f574a26783b4fc7805a20ffa9f506e82" +dependencies = [ + "asn1-rs 0.3.1", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", +] + +[[package]] +name = "der-parser" +version = "8.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" +dependencies = [ + "asn1-rs 0.5.2", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", +] + [[package]] name = "derivative" version = "2.2.0" @@ -1377,7 +1718,49 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", +] + +[[package]] +name = "derive-syn-parse" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_builder" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d07adf7be193b71cc36b193d0f5fe60b918a3a9db4dad0449f57bcfd519704a3" +dependencies = [ + "derive_builder_macro", +] + +[[package]] +name = "derive_builder_core" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f91d4cfa921f1c05904dc3c57b4a32c38aed3340cce209f3a6fd1478babafc4" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_builder_macro" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68" +dependencies = [ + "derive_builder_core", + "syn 1.0.109", ] [[package]] @@ -1390,14 +1773,14 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn", + "syn 1.0.109", ] [[package]] name = "diff" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e25ea47919b1560c4e3b7fe0aaab9becf5b84a10325ddf7db0f0ba5e1026499" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" [[package]] name = "difflib" @@ -1420,16 +1803,16 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.7", ] [[package]] name = "digest" -version = "0.10.3" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" +checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" dependencies = [ - "block-buffer 0.10.0", + "block-buffer 0.10.4", "crypto-common", "subtle", ] @@ -1455,9 +1838,9 @@ dependencies = [ [[package]] name = "dirs-sys" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" dependencies = [ "libc", "redox_users", @@ -1475,11 +1858,22 @@ dependencies = [ "winapi", ] +[[package]] +name = "displaydoc" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] + [[package]] name = "dissimilar" -version = "1.0.3" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31ad93652f40969dead8d4bf897a41e9462095152eb21c56e5830537e41179dd" +checksum = "210ec60ae7d710bed8683e333e9d2855a8a56a3e9892b38bad3bb0d4d29b0d5e" [[package]] name = "dlmalloc" @@ -1490,16 +1884,6 @@ dependencies = [ "libc", ] -[[package]] -name = "dns-parser" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4d33be9473d06f75f58220f71f7a9317aca647dc061dbd3c361b0bef505fbea" -dependencies = [ - "byteorder", - "quick-error 1.2.3", -] - [[package]] name = "doc-comment" version = "0.3.3" @@ -1520,9 +1904,9 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] name = "dtoa" -version = "1.0.2" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5caaa75cbd2b960ff1e5392d2cfb1f44717fffe12fc1f32b7b5d1267f99732a6" +checksum = "65d09067bfacaa79114679b279d7f5885b53295b1e2cfb4e79c8e4bd3d633169" [[package]] name = "dyn-clonable" @@ -1542,14 +1926,14 @@ checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "dyn-clone" -version = "1.0.4" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee2626afccd7561a06cf1367e2950c4718ea04565e20fb5029b6c7d8ad09abcf" +checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30" [[package]] name = "ecdsa" @@ -1565,9 +1949,9 @@ dependencies = [ [[package]] name = "ed25519" -version = "1.3.0" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74e1069e39f1454367eb2de793ed062fac4c35c2934b76a81d90dd9abcd28816" +checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" dependencies = [ "signature", ] @@ -1582,7 +1966,7 @@ dependencies = [ "ed25519", "rand 0.7.3", "serde", - "sha2 0.9.8", + "sha2 0.9.9", "zeroize", ] @@ -1593,18 +1977,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" dependencies = [ "curve25519-dalek 3.2.0", - "hashbrown", + "hashbrown 0.12.3", "hex", - "rand_core 0.6.3", - "sha2 0.9.8", + "rand_core 0.6.4", + "sha2 0.9.9", "zeroize", ] [[package]] name = "either" -version = "1.6.1" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" [[package]] name = "elliptic-curve" @@ -1615,11 +1999,14 @@ dependencies = [ "base16ct", "crypto-bigint", "der", - "digest 0.10.3", + "digest 0.10.6", "ff", - "generic-array 0.14.4", + "generic-array 0.14.7", "group", - "rand_core 0.6.3", + "hkdf", + "pem-rfc7468", + "pkcs8", + "rand_core 0.6.4", "sec1", "subtle", "zeroize", @@ -1627,9 +2014,9 @@ dependencies = [ [[package]] name = "encoding_rs" -version = "0.8.30" +version = "0.8.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dc8abb250ffdda33912550faa54c88ec8b998dec0b2c55ab224921ce11df" +checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" dependencies = [ "cfg-if", ] @@ -1643,48 +2030,48 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "enumflags2" -version = "0.7.5" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e75d4cd21b95383444831539909fbb14b9dc3fdceb2a6f5d36577329a1f55ccb" +checksum = "c041f5090df68b32bcd905365fd51769c8b9d553fe87fde0b683534f10c01bd2" dependencies = [ "enumflags2_derive", ] [[package]] name = "enumflags2_derive" -version = "0.7.4" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" +checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] name = "enumn" -version = "0.1.5" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038b1afa59052df211f9efd58f8b1d84c242935ede1c3dbaed26b018a9e06ae2" +checksum = "48016319042fb7c87b78d2993084a831793a897a5cd1a2a67cab9d1eeb4b7d76" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] name = "env_logger" -version = "0.7.1" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" dependencies = [ "atty", - "humantime 1.3.0", + "humantime", "log", "regex", "termcolor", @@ -1692,12 +2079,12 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3" +checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" dependencies = [ - "atty", - "humantime 2.1.0", + "humantime", + "is-terminal", "log", "regex", "termcolor", @@ -1705,28 +2092,28 @@ dependencies = [ [[package]] name = "environmental" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b91989ae21441195d7d9b9993a2f9295c7e1a8c96255d8b729accddc124797" +checksum = "e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b" [[package]] name = "erased-serde" -version = "0.3.20" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad132dd8d0d0b546348d7d86cb3191aad14b34e5f979781fc005c80d4ac67ffd" +checksum = "4f2b0c2380453a92ea8b6c8e5f64ecaafccddde8ceab55ff7a8ac1029f894569" dependencies = [ "serde", ] [[package]] name = "errno" -version = "0.2.8" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" dependencies = [ "errno-dragonfly", "libc", - "winapi", + "windows-sys 0.48.0", ] [[package]] @@ -1741,9 +2128,9 @@ dependencies = [ [[package]] name = "event-listener" -version = "2.5.1" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7531096570974c3a9dcf9e4b8e1cede1ec26cf5046219fb3b9d897503b9be59" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "exit-future" @@ -1782,14 +2169,27 @@ dependencies = [ "fs-err", "proc-macro2", "quote", - "syn", + "syn 1.0.109", +] + +[[package]] +name = "expander" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f360349150728553f92e4c997a16af8915f418d3a0f21b440d34c5632f16ed84" +dependencies = [ + "blake2", + "fs-err", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] name = "eyre" -version = "0.6.5" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "221239d1d5ea86bf5d6f91c9d6bc3646ffe471b08ff9b0f91c44f115ac969d2b" +checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb" dependencies = [ "indenter", "once_cell", @@ -1809,9 +2209,9 @@ checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" [[package]] name = "fastrand" -version = "1.7.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" dependencies = [ "instant", ] @@ -1837,7 +2237,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "thiserror", ] @@ -1872,37 +2272,43 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" dependencies = [ - "rand_core 0.6.3", + "rand_core 0.6.4", "subtle", ] +[[package]] +name = "fiat-crypto" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e825f6987101665dea6ec934c09ec6d721de7bc1bf92248e1d5810c8cd636b77" + [[package]] name = "file-per-thread-logger" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fdbe0d94371f9ce939b555dd342d0686cc4c0cadbcd4b61d70af5ff97eb4126" +checksum = "84f2e425d9790201ba4af4630191feac6dcc98765b118d4d18e91d23c2353866" dependencies = [ - "env_logger 0.7.1", + "env_logger 0.10.0", "log", ] [[package]] name = "filetime" -version = "0.2.17" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94a7bbaa59354bc20dd75b67f23e2797b4490e9d6928203fb105c79e448c86c" +checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153" dependencies = [ "cfg-if", "libc", - "redox_syscall", - "windows-sys 0.36.1", + "redox_syscall 0.2.16", + "windows-sys 0.48.0", ] [[package]] name = "finality-grandpa" -version = "0.16.0" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b22349c6a11563a202d95772a68e0fcf56119e74ea8a2a19cf2301460fcd0df5" +checksum = "36530797b9bf31cd4ff126dcfee8170f86b00cfdcea3269d73133cc0415945c3" dependencies = [ "either", "futures", @@ -1940,21 +2346,19 @@ dependencies = [ [[package]] name = "fixedbitset" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "398ea4fabe40b9b0d885340a2a991a44c8a645624075ad966d21f88688e2b69e" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.22" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6988e897c1c9c485f43b47a529cef42fde0547f9d8d41a7062518f1d8fc53f" +checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" dependencies = [ - "cfg-if", "crc32fast", - "libc", "libz-sys", - "miniz_oxide", + "miniz_oxide 0.7.1", ] [[package]] @@ -1990,33 +2394,33 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "parity-scale-codec", ] [[package]] name = "form_urlencoded" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" dependencies = [ - "matches", "percent-encoding", ] [[package]] name = "fragile" -version = "1.2.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85dcb89d2b10c5f6133de2efd8c11959ce9dbb46a2f7a4cab208c4eeda6ce1ab" +checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-support", + "frame-support-procedural", "frame-system", "linregress", "log", @@ -2032,33 +2436,31 @@ dependencies = [ "sp-runtime-interface", "sp-std", "sp-storage", + "static_assertions", ] [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "Inflector", "array-bytes", "chrono", - "clap", + "clap 4.2.7", "comfy-table", "frame-benchmarking", "frame-support", "frame-system", "gethostname", "handlebars", - "hash-db", "itertools", - "kvdb", "lazy_static", "linked-hash-map", "log", - "memory-db", "parity-scale-codec", "rand 0.8.5", - "rand_pcg 0.3.1", + "rand_pcg", "sc-block-builder", "sc-cli", "sc-client-api", @@ -2068,7 +2470,6 @@ dependencies = [ "sc-sysinfo", "serde", "serde_json", - "serde_nanos", "sp-api", "sp-blockchain", "sp-core", @@ -2081,7 +2482,6 @@ dependencies = [ "sp-std", "sp-storage", "sp-trie", - "tempfile", "thiserror", "thousands", ] @@ -2089,18 +2489,18 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2117,7 +2517,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-support", "frame-system", @@ -2133,9 +2533,9 @@ dependencies = [ [[package]] name = "frame-metadata" -version = "15.0.0" +version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df6bb8542ef006ef0de09a5c4420787d79823c0ed7924225822362fd2bf2ff2d" +checksum = "878babb0b136e731cc77ec2fd883ff02745ff21e6fb662729953d44923df009c" dependencies = [ "cfg-if", "parity-scale-codec", @@ -2146,18 +2546,15 @@ dependencies = [ [[package]] name = "frame-remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ - "env_logger 0.9.0", "futures", "log", "parity-scale-codec", "serde", - "serde_json", "sp-core", "sp-io", "sp-runtime", - "sp-version", "substrate-rpc-client", "tokio", ] @@ -2165,9 +2562,10 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "bitflags", + "environmental", "frame-metadata", "frame-support-procedural", "impl-trait-for-tuples", @@ -2197,44 +2595,46 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "Inflector", "cfg-expr", + "derive-syn-parse", "frame-support-procedural-tools", "itertools", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "frame-support-test" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ + "frame-benchmarking", "frame-support", "frame-support-test-pallet", "frame-system", @@ -2256,7 +2656,7 @@ dependencies = [ [[package]] name = "frame-support-test-pallet" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-support", "frame-system", @@ -2267,7 +2667,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-support", "log", @@ -2285,7 +2685,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", @@ -2300,7 +2700,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "parity-scale-codec", "sp-api", @@ -2309,7 +2709,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-support", "parity-scale-codec", @@ -2320,9 +2720,9 @@ dependencies = [ [[package]] name = "fs-err" -version = "2.6.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ebd3504ad6116843b8375ad70df74e7bfe83cac77a1f3fe73200c844d43bfe0" +checksum = "0845fa252299212f0389d64ba26f34fa32cfe41588355f21ed507c59a0f64541" [[package]] name = "fs2" @@ -2335,10 +2735,14 @@ dependencies = [ ] [[package]] -name = "fs_extra" -version = "1.2.0" +name = "fs4" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2022715d62ab30faffd124d40b76f4134a550a87792276512b18d63272333394" +checksum = "a7f5b6908aecca5812a4569056285e58c666588c9573ee59765bf1d3692699e2" +dependencies = [ + "rustix 0.37.19", + "windows-sys 0.48.0", +] [[package]] name = "funty" @@ -2348,9 +2752,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e" +checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" dependencies = [ "futures-channel", "futures-core", @@ -2363,9 +2767,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.23" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bfc52cbddcfd745bf1740338492bb0bd83d76c67b445f91c5fb29fae29ecaa1" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" dependencies = [ "futures-core", "futures-sink", @@ -2373,15 +2777,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.23" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2acedae88d38235936c3922476b10fced7b2b68136f5e3c03c2d5be348a1115" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" [[package]] name = "futures-executor" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6" +checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" dependencies = [ "futures-core", "futures-task", @@ -2391,58 +2795,58 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.23" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93a66fc6d035a26a3ae255a6d2bca35eda63ae4c5512bef54449113f7a1228e5" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" [[package]] name = "futures-lite" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" dependencies = [ "fastrand", "futures-core", "futures-io", "memchr", "parking", - "pin-project-lite 0.2.7", + "pin-project-lite 0.2.9", "waker-fn", ] [[package]] name = "futures-macro" -version = "0.3.23" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0db9cce532b0eae2ccf2766ab246f114b56b9cf6d445e00c2549fbc100ca045d" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] name = "futures-rustls" -version = "0.22.1" +version = "0.22.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01fe9932a224b72b45336d96040aa86386d674a31d0af27d800ea7bc8ca97fe" +checksum = "d2411eed028cdf8c8034eaf21f9915f956b6c3abec4d4c7949ee67f0721127bd" dependencies = [ "futures-io", - "rustls", - "webpki", + "rustls 0.20.8", + "webpki 0.22.0", ] [[package]] name = "futures-sink" -version = "0.3.23" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca0bae1fe9752cf7fd9b0064c674ae63f97b37bc714d745cbde0afb7ec4e6765" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" [[package]] name = "futures-task" -version = "0.3.23" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "842fc63b931f4056a24d59de13fb1272134ce261816e063e634ad0c15cdc5306" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" [[package]] name = "futures-timer" @@ -2452,9 +2856,9 @@ checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" [[package]] name = "futures-util" -version = "0.3.23" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0828a5471e340229c11c77ca80017937ce3c58cb788a17e5f1c2d5c485a9577" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" dependencies = [ "futures-channel", "futures-core", @@ -2463,7 +2867,7 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project-lite 0.2.7", + "pin-project-lite 0.2.9", "pin-utils", "slab", ] @@ -2480,7 +2884,7 @@ dependencies = [ [[package]] name = "generate-bags" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "chrono", "frame-election-provider-support", @@ -2489,7 +2893,6 @@ dependencies = [ "git2", "num-format", "pallet-staking", - "sp-io", ] [[package]] @@ -2503,9 +2906,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.4" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -2528,21 +2931,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" dependencies = [ "cfg-if", - "js-sys", "libc", "wasi 0.9.0+wasi-snapshot-preview1", - "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.2.3" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" +checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" dependencies = [ "cfg-if", "libc", - "wasi 0.10.0+wasi-snapshot-preview1", + "wasi 0.11.0+wasi-snapshot-preview1", ] [[package]] @@ -2552,25 +2953,41 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" dependencies = [ "opaque-debug 0.3.0", - "polyval", + "polyval 0.5.3", +] + +[[package]] +name = "ghash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40" +dependencies = [ + "opaque-debug 0.3.0", + "polyval 0.6.0", ] [[package]] name = "gimli" -version = "0.26.1" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" +checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" dependencies = [ "fallible-iterator", "indexmap", "stable_deref_trait", ] +[[package]] +name = "gimli" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4" + [[package]] name = "git2" -version = "0.14.2" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3826a6e0e2215d7a41c2bfc7c9244123969273f3476b939a226aac0ab56e9e3c" +checksum = "ccf7f68c2995f392c49fffb4f95ae2c873297830eb25c6bc4c114ce8f4562acc" dependencies = [ "bitflags", "libc", @@ -2581,36 +2998,23 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globset" -version = "0.4.8" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10463d9ff00a2a068db14231982f5132edebad0d7660cd956a1c30292dbcbfbd" +checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" dependencies = [ - "aho-corasick", + "aho-corasick 0.7.20", "bstr", "fnv", "log", "regex", ] -[[package]] -name = "gloo-timers" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47204a46aaff920a1ea58b11d03dec6f704287d27561724a4631e450654a891f" -dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "group" version = "0.12.1" @@ -2618,15 +3022,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" dependencies = [ "ff", - "rand_core 0.6.3", + "rand_core 0.6.4", "subtle", ] [[package]] name = "h2" -version = "0.3.11" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9f1f717ddc7b2ba36df7e871fd88db79326551d3d6f1fc406fbfd28b582ff8e" +checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21" dependencies = [ "bytes", "fnv", @@ -2637,29 +3041,35 @@ dependencies = [ "indexmap", "slab", "tokio", - "tokio-util 0.6.9", + "tokio-util", "tracing", ] +[[package]] +name = "half" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" + [[package]] name = "handlebars" -version = "4.2.2" +version = "4.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d6a30320f094710245150395bc763ad23128d6a1ebbad7594dc4164b62c56b" +checksum = "035ef95d03713f2c347a72547b7cd38cbc9af7cd51e6099fb62d586d4a6dee3a" dependencies = [ "log", "pest", "pest_derive", - "quick-error 2.0.1", "serde", "serde_json", + "thiserror", ] [[package]] name = "hash-db" -version = "0.15.2" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d23bd4e7b5eda0d0f3a307e8b381fdc8ba9000f26fbe912250c0a4cc3956364a" +checksum = "8e7d7786361d7425ae2fe4f9e407eb0efaa0840f5212d109cc018c40c35c6ab4" [[package]] name = "hash256-std-hasher" @@ -2676,14 +3086,23 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "ahash", + "ahash 0.7.6", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash 0.8.3", ] [[package]] name = "heck" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" @@ -2694,6 +3113,21 @@ dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" + [[package]] name = "hex" version = "0.4.3" @@ -2706,6 +3140,15 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" +[[package]] +name = "hkdf" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" +dependencies = [ + "hmac 0.12.1", +] + [[package]] name = "hmac" version = "0.8.1" @@ -2732,7 +3175,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.3", + "digest 0.10.6", ] [[package]] @@ -2742,7 +3185,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" dependencies = [ "digest 0.9.0", - "generic-array 0.14.4", + "generic-array 0.14.7", "hmac 0.8.1", ] @@ -2771,9 +3214,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" dependencies = [ "bytes", "fnv", @@ -2788,7 +3231,7 @@ checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" dependencies = [ "bytes", "http", - "pin-project-lite 0.2.7", + "pin-project-lite 0.2.9", ] [[package]] @@ -2799,24 +3242,15 @@ checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" [[package]] name = "httparse" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9100414882e15fb7feccb4897e5f0ff0ff1ca7d1a86a23208ada4d7a18e6c6c4" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" - -[[package]] -name = "humantime" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" -dependencies = [ - "quick-error 1.2.3", -] +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "humantime" @@ -2826,9 +3260,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.20" +version = "0.14.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02c929dc5c39e335a03c405292728118860721b10190d98c2a0f0efd5baafbac" +checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" dependencies = [ "bytes", "futures-channel", @@ -2840,7 +3274,7 @@ dependencies = [ "httparse", "httpdate", "itoa", - "pin-project-lite 0.2.7", + "pin-project-lite 0.2.9", "socket2", "tokio", "tower-service", @@ -2850,14 +3284,14 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.23.0" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac" +checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" dependencies = [ "http", "hyper", "log", - "rustls", + "rustls 0.20.8", "rustls-native-certs", "tokio", "tokio-rustls", @@ -2876,6 +3310,36 @@ dependencies = [ "tokio-native-tls", ] +[[package]] +name = "iana-time-zone" +version = "0.1.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows 0.48.0", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +dependencies = [ + "cxx", + "cxx-build", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + [[package]] name = "idna" version = "0.2.3" @@ -2887,6 +3351,16 @@ dependencies = [ "unicode-normalization", ] +[[package]] +name = "idna" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + [[package]] name = "if-addrs" version = "0.7.0" @@ -2899,9 +3373,9 @@ dependencies = [ [[package]] name = "if-watch" -version = "2.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "065c008e570a43c00de6aed9714035e5ea6a498c255323db9091722af6ee67dd" +checksum = "a9465340214b296cd17a0009acdb890d6160010b8adf8f78a00d0d7ab270f79f" dependencies = [ "async-io", "core-foundation", @@ -2912,7 +3386,8 @@ dependencies = [ "log", "rtnetlink", "system-configuration", - "windows", + "tokio", + "windows 0.34.0", ] [[package]] @@ -2941,7 +3416,7 @@ checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2952,15 +3427,24 @@ checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[package]] name = "indexmap" -version = "1.9.1" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", - "hashbrown", + "hashbrown 0.12.3", "serde", ] +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array 0.14.7", +] + [[package]] name = "instant" version = "0.1.12" @@ -2972,9 +3456,9 @@ dependencies = [ [[package]] name = "integer-encoding" -version = "3.0.2" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90c11140ffea82edce8dcd74137ce9324ec24b3cf0175fc9d7e29164da9915b8" +checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" [[package]] name = "integer-sqrt" @@ -2985,11 +3469,35 @@ dependencies = [ "num-traits", ] +[[package]] +name = "interceptor" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e8a11ae2da61704edada656798b61c94b35ecac2c58eb955156987d5e6be90b" +dependencies = [ + "async-trait", + "bytes", + "log", + "rand 0.8.5", + "rtcp", + "rtp", + "thiserror", + "tokio", + "waitgroup", + "webrtc-srtp", + "webrtc-util", +] + [[package]] name = "io-lifetimes" -version = "0.7.2" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c3f4eff5495aee4c0399d7b6a0dc2b6e81be84242ffbfcf253ebacccc1d0cb" +checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" +dependencies = [ + "hermit-abi 0.3.1", + "libc", + "windows-sys 0.48.0", +] [[package]] name = "ip_network" @@ -2999,51 +3507,63 @@ checksum = "aa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1" [[package]] name = "ipconfig" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "723519edce41262b05d4143ceb95050e4c614f483e78e9fd9e39a8275a84ad98" +checksum = "bd302af1b90f2463a98fa5ad469fc212c8e3175a41c3068601bfa2727591c5be" dependencies = [ "socket2", "widestring", "winapi", - "winreg 0.7.0", + "winreg", ] [[package]] name = "ipnet" -version = "2.3.1" +version = "2.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" + +[[package]] +name = "is-terminal" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9" +checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" +dependencies = [ + "hermit-abi 0.3.1", + "io-lifetimes", + "rustix 0.37.19", + "windows-sys 0.48.0", +] [[package]] name = "itertools" -version = "0.10.3" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" dependencies = [ "either", ] [[package]] name = "itoa" -version = "1.0.4" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" [[package]] name = "jobserver" -version = "0.1.24" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa" +checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.55" +version = "0.3.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cc9ffccd38c451a86bf13657df244e9c3f37493cce8e5e21e940963777acc84" +checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" dependencies = [ "wasm-bindgen", ] @@ -3078,7 +3598,7 @@ dependencies = [ "thiserror", "tokio", "tokio-rustls", - "tokio-util 0.7.1", + "tokio-util", "tracing", "webpki-roots", ] @@ -3121,7 +3641,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3141,7 +3661,7 @@ dependencies = [ "soketto", "tokio", "tokio-stream", - "tokio-util 0.7.1", + "tokio-util", "tower", "tracing", ] @@ -3181,18 +3701,21 @@ dependencies = [ "cfg-if", "ecdsa", "elliptic-curve", - "sha2 0.10.2", + "sha2 0.10.6", ] [[package]] name = "keccak" -version = "0.1.0" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" +checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" +dependencies = [ + "cpufeatures", +] [[package]] name = "kusama-runtime" -version = "0.9.36" +version = "0.9.40" dependencies = [ "bitvec", "frame-benchmarking", @@ -3243,6 +3766,7 @@ dependencies = [ "pallet-session-benchmarking", "pallet-society", "pallet-staking", + "pallet-staking-runtime-api", "pallet-timestamp", "pallet-tips", "pallet-transaction-payment", @@ -3267,9 +3791,9 @@ dependencies = [ "sp-api", "sp-arithmetic", "sp-authority-discovery", - "sp-beefy", "sp-block-builder", "sp-consensus-babe", + "sp-consensus-beefy", "sp-core", "sp-inherents", "sp-io", @@ -3296,7 +3820,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" -version = "0.9.36" +version = "0.9.40" dependencies = [ "frame-support", "polkadot-primitives", @@ -3307,15 +3831,6 @@ dependencies = [ "sp-weights", ] -[[package]] -name = "kv-log-macro" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" -dependencies = [ - "log", -] - [[package]] name = "kvdb" version = "0.13.0" @@ -3372,15 +3887,15 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.126" +version = "0.2.144" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" +checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1" [[package]] name = "libgit2-sys" -version = "0.13.2+1.4.2" +version = "0.14.2+1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a42de9a51a5c12e00fc0e4ca6bc2ea43582fc6418488e8f615e905d886f258b" +checksum = "7f3d95f6b51075fe9810a7ae22c7095f12b98005ab364d8544797a825ce946a4" dependencies = [ "cc", "libc", @@ -3390,9 +3905,9 @@ dependencies = [ [[package]] name = "libloading" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afe203d669ec979b7128619bae5a63b7b42e9203c1b29146079ee05e2f604b52" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" dependencies = [ "cfg-if", "winapi", @@ -3400,23 +3915,28 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.1" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" +checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a" + +[[package]] +name = "libm" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" [[package]] name = "libp2p" -version = "0.49.0" +version = "0.50.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec878fda12ebec479186b3914ebc48ff180fa4c51847e11a1a68bf65249e02c1" +checksum = "9c7b0104790be871edcf97db9bd2356604984e623a08d825c3f27852290266b8" dependencies = [ "bytes", "futures", "futures-timer", - "getrandom 0.2.3", + "getrandom 0.2.9", "instant", - "lazy_static", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-dns", "libp2p-identify", "libp2p-kad", @@ -3425,14 +3945,15 @@ dependencies = [ "libp2p-mplex", "libp2p-noise", "libp2p-ping", + "libp2p-quic", "libp2p-request-response", "libp2p-swarm", - "libp2p-swarm-derive", "libp2p-tcp", "libp2p-wasm-ext", + "libp2p-webrtc", "libp2p-websocket", "libp2p-yamux", - "multiaddr", + "multiaddr 0.16.0", "parking_lot 0.12.1", "pin-project", "smallvec", @@ -3440,9 +3961,9 @@ dependencies = [ [[package]] name = "libp2p-core" -version = "0.37.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799676bb0807c788065e57551c6527d461ad572162b0519d1958946ff9e0539d" +checksum = "b6a8fcd392ff67af6cc3f03b1426c41f7f26b6b9aff2dc632c1c56dd649e571f" dependencies = [ "asn1_der", "bs58", @@ -3452,18 +3973,19 @@ dependencies = [ "futures", "futures-timer", "instant", - "lazy_static", "log", - "multiaddr", - "multihash", + "multiaddr 0.16.0", + "multihash 0.16.3", "multistream-select", + "once_cell", "parking_lot 0.12.1", "pin-project", "prost", "prost-build", "rand 0.8.5", "rw-stream-sink", - "sha2 0.10.2", + "sec1", + "sha2 0.10.6", "smallvec", "thiserror", "unsigned-varint", @@ -3471,14 +3993,42 @@ dependencies = [ "zeroize", ] +[[package]] +name = "libp2p-core" +version = "0.39.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c1df63c0b582aa434fb09b2d86897fa2b419ffeccf934b36f87fcedc8e835c2" +dependencies = [ + "either", + "fnv", + "futures", + "futures-timer", + "instant", + "libp2p-identity", + "log", + "multiaddr 0.17.1", + "multihash 0.17.0", + "multistream-select", + "once_cell", + "parking_lot 0.12.1", + "pin-project", + "quick-protobuf", + "rand 0.8.5", + "rw-stream-sink", + "smallvec", + "thiserror", + "unsigned-varint", + "void", +] + [[package]] name = "libp2p-dns" -version = "0.37.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2322c9fb40d99101def6a01612ee30500c89abbbecb6297b3cd252903a4c1720" +checksum = "8e42a271c1b49f789b92f7fc87749fa79ce5c7bdc88cbdfacb818a4bca47fec5" dependencies = [ "futures", - "libp2p-core", + "libp2p-core 0.38.0", "log", "parking_lot 0.12.1", "smallvec", @@ -3487,17 +4037,17 @@ dependencies = [ [[package]] name = "libp2p-identify" -version = "0.40.0" +version = "0.41.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf9a121f699e8719bda2e6e9e9b6ddafc6cff4602471d6481c1067930ccb29b" +checksum = "c052d0026f4817b44869bfb6810f4e1112f43aec8553f2cb38881c524b563abf" dependencies = [ "asynchronous-codec", "futures", "futures-timer", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-swarm", "log", - "lru", + "lru 0.8.1", "prost", "prost-build", "prost-codec", @@ -3506,11 +4056,29 @@ dependencies = [ "void", ] +[[package]] +name = "libp2p-identity" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e2d584751cecb2aabaa56106be6be91338a60a0f4e420cf2af639204f596fc1" +dependencies = [ + "bs58", + "ed25519-dalek", + "log", + "multiaddr 0.17.1", + "multihash 0.17.0", + "quick-protobuf", + "rand 0.8.5", + "sha2 0.10.6", + "thiserror", + "zeroize", +] + [[package]] name = "libp2p-kad" -version = "0.41.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6721c200e2021f6c3fab8b6cf0272ead8912d871610ee194ebd628cecf428f22" +checksum = "2766dcd2be8c87d5e1f35487deb22d765f49c6ae1251b3633efe3b25698bd3d2" dependencies = [ "arrayvec 0.7.2", "asynchronous-codec", @@ -3520,13 +4088,13 @@ dependencies = [ "futures", "futures-timer", "instant", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-swarm", "log", "prost", "prost-build", "rand 0.8.5", - "sha2 0.10.2", + "sha2 0.10.6", "smallvec", "thiserror", "uint", @@ -3536,31 +4104,31 @@ dependencies = [ [[package]] name = "libp2p-mdns" -version = "0.41.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "761704e727f7d68d58d7bc2231eafae5fc1b9814de24290f126df09d4bd37a15" +checksum = "04f378264aade9872d6ccd315c0accc18be3a35d15fc1b9c36e5b6f983b62b5b" dependencies = [ "data-encoding", - "dns-parser", "futures", "if-watch", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-swarm", "log", "rand 0.8.5", "smallvec", "socket2", "tokio", + "trust-dns-proto", "void", ] [[package]] name = "libp2p-metrics" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ee31b08e78b7b8bfd1c4204a9dd8a87b4fcdf6dafc57eb51701c1c264a81cb9" +checksum = "5ad8a64f29da86005c86a4d2728b8a0719e9b192f4092b609fd8790acb9dec55" dependencies = [ - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-identify", "libp2p-kad", "libp2p-ping", @@ -3570,14 +4138,14 @@ dependencies = [ [[package]] name = "libp2p-mplex" -version = "0.37.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692664acfd98652de739a8acbb0a0d670f1d67190a49be6b4395e22c37337d89" +checksum = "03805b44107aa013e7cbbfa5627b31c36cbedfdfb00603c0311998882bc4bace" dependencies = [ "asynchronous-codec", "bytes", "futures", - "libp2p-core", + "libp2p-core 0.38.0", "log", "nohash-hasher", "parking_lot 0.12.1", @@ -3588,53 +4156,75 @@ dependencies = [ [[package]] name = "libp2p-noise" -version = "0.40.0" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "048155686bd81fe6cb5efdef0c6290f25ad32a0a42e8f4f72625cf6a505a206f" +checksum = "a978cb57efe82e892ec6f348a536bfbd9fee677adbe5689d7a93ad3a9bffbf2e" dependencies = [ "bytes", "curve25519-dalek 3.2.0", "futures", - "lazy_static", - "libp2p-core", + "libp2p-core 0.38.0", "log", + "once_cell", "prost", "prost-build", "rand 0.8.5", - "sha2 0.10.2", + "sha2 0.10.6", "snow", "static_assertions", - "x25519-dalek", + "thiserror", + "x25519-dalek 1.1.1", "zeroize", ] [[package]] name = "libp2p-ping" -version = "0.40.1" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7228b9318d34689521349a86eb39a3c3a802c9efc99a0568062ffb80913e3f91" +checksum = "929fcace45a112536e22b3dcfd4db538723ef9c3cb79f672b98be2cc8e25f37f" dependencies = [ "futures", "futures-timer", "instant", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-swarm", "log", "rand 0.8.5", "void", ] +[[package]] +name = "libp2p-quic" +version = "0.7.0-alpha" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01e7c867e95c8130667b24409d236d37598270e6da69b3baf54213ba31ffca59" +dependencies = [ + "bytes", + "futures", + "futures-timer", + "if-watch", + "libp2p-core 0.38.0", + "libp2p-tls", + "log", + "parking_lot 0.12.1", + "quinn-proto", + "rand 0.8.5", + "rustls 0.20.8", + "thiserror", + "tokio", +] + [[package]] name = "libp2p-request-response" -version = "0.22.1" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8827af16a017b65311a410bb626205a9ad92ec0473967618425039fa5231adc1" +checksum = "3236168796727bfcf4927f766393415361e2c644b08bedb6a6b13d957c9a4884" dependencies = [ "async-trait", "bytes", "futures", "instant", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-swarm", "log", "rand 0.8.5", @@ -3644,75 +4234,127 @@ dependencies = [ [[package]] name = "libp2p-swarm" -version = "0.40.1" +version = "0.41.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46d13df7c37807965d82930c0e4b04a659efcb6cca237373b206043db5398ecf" +checksum = "b2a35472fe3276b3855c00f1c032ea8413615e030256429ad5349cdf67c6e1a0" dependencies = [ "either", "fnv", "futures", "futures-timer", "instant", - "libp2p-core", + "libp2p-core 0.38.0", + "libp2p-swarm-derive", "log", "pin-project", "rand 0.8.5", "smallvec", "thiserror", + "tokio", "void", ] [[package]] name = "libp2p-swarm-derive" -version = "0.30.1" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0eddc4497a8b5a506013c40e8189864f9c3a00db2b25671f428ae9007f3ba32" +checksum = "9d527d5827582abd44a6d80c07ff8b50b4ee238a8979e05998474179e79dc400" dependencies = [ "heck", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "libp2p-tcp" -version = "0.37.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9839d96761491c6d3e238e70554b856956fca0ab60feb9de2cd08eed4473fa92" +checksum = "b4b257baf6df8f2df39678b86c578961d48cc8b68642a12f0f763f56c8e5858d" dependencies = [ "futures", "futures-timer", "if-watch", "libc", - "libp2p-core", + "libp2p-core 0.38.0", "log", "socket2", "tokio", ] +[[package]] +name = "libp2p-tls" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff08d13d0dc66e5e9ba6279c1de417b84fa0d0adc3b03e5732928c180ec02781" +dependencies = [ + "futures", + "futures-rustls", + "libp2p-core 0.39.2", + "libp2p-identity", + "rcgen 0.10.0", + "ring", + "rustls 0.20.8", + "thiserror", + "webpki 0.22.0", + "x509-parser 0.14.0", + "yasna", +] + [[package]] name = "libp2p-wasm-ext" -version = "0.37.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17b5b8e7a73e379e47b1b77f8a82c4721e97eca01abcd18e9cd91a23ca6ce97" +checksum = "1bb1a35299860e0d4b3c02a3e74e3b293ad35ae0cee8a056363b0c862d082069" dependencies = [ "futures", "js-sys", - "libp2p-core", + "libp2p-core 0.38.0", "parity-send-wrapper", "wasm-bindgen", "wasm-bindgen-futures", ] +[[package]] +name = "libp2p-webrtc" +version = "0.4.0-alpha" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb6cd86dd68cba72308ea05de1cebf3ba0ae6e187c40548167955d4e3970f6a" +dependencies = [ + "async-trait", + "asynchronous-codec", + "bytes", + "futures", + "futures-timer", + "hex", + "if-watch", + "libp2p-core 0.38.0", + "libp2p-noise", + "log", + "multihash 0.16.3", + "prost", + "prost-build", + "prost-codec", + "rand 0.8.5", + "rcgen 0.9.3", + "serde", + "stun", + "thiserror", + "tinytemplate", + "tokio", + "tokio-util", + "webrtc", +] + [[package]] name = "libp2p-websocket" -version = "0.39.0" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3758ae6f89b2531a24b6d9f5776bda6a626b60a57600d7185d43dfa75ca5ecc4" +checksum = "1d705506030d5c0aaf2882437c70dab437605f21c5f9811978f694e6917a3b54" dependencies = [ "either", "futures", "futures-rustls", - "libp2p-core", + "libp2p-core 0.38.0", "log", "parking_lot 0.12.1", "quicksink", @@ -3724,12 +4366,12 @@ dependencies = [ [[package]] name = "libp2p-yamux" -version = "0.41.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30f079097a21ad017fc8139460630286f02488c8c13b26affb46623aa20d8845" +checksum = "4f63594a0aa818642d9d4915c791945053877253f08a3626f13416b5cd928a29" dependencies = [ "futures", - "libp2p-core", + "libp2p-core 0.38.0", "log", "parking_lot 0.12.1", "thiserror", @@ -3738,9 +4380,9 @@ dependencies = [ [[package]] name = "librocksdb-sys" -version = "0.8.0+7.4.4" +version = "0.8.3+7.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "611804e4666a25136fcc5f8cf425ab4d26c7f74ea245ffe92ea23b85b6420b5d" +checksum = "557b255ff04123fcc176162f56ed0c9cd42d8f357cf55b3fabeb60f7413741b3" dependencies = [ "bindgen", "bzip2-sys", @@ -3753,12 +4395,12 @@ dependencies = [ [[package]] name = "libsecp256k1" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0452aac8bab02242429380e9b2f94ea20cea2b37e2c1777a1358799bbe97f37" +checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" dependencies = [ "arrayref", - "base64", + "base64 0.13.1", "digest 0.9.0", "hmac-drbg", "libsecp256k1-core", @@ -3766,7 +4408,7 @@ dependencies = [ "libsecp256k1-gen-genmult", "rand 0.8.5", "serde", - "sha2 0.9.8", + "sha2 0.9.9", "typenum", ] @@ -3801,9 +4443,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.3" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de5435b8549c16d423ed0c03dbaafe57cf6c3344744f1242520d59c9d8ecec66" +checksum = "56ee889ecc9568871456d42f603d6a0ce59ff328d291063a45cbdf0036baf6db" dependencies = [ "cc", "libc", @@ -3813,18 +4455,18 @@ dependencies = [ [[package]] name = "link-cplusplus" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9272ab7b96c9046fbc5bc56c06c117cb639fe2d509df0c421cad82d2915cf369" +checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" dependencies = [ "cc", ] [[package]] name = "linked-hash-map" -version = "0.5.4" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linked_hash_set" @@ -3837,26 +4479,32 @@ dependencies = [ [[package]] name = "linregress" -version = "0.4.4" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6c601a85f5ecd1aba625247bca0031585fb1c446461b142878a16f8245ddeb8" +checksum = "475015a7f8f017edb28d2e69813be23500ad4b32cfe3421c4148efc97324ee52" dependencies = [ "nalgebra", - "statrs", ] [[package]] name = "linux-raw-sys" -version = "0.0.46" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" + +[[package]] +name = "linux-raw-sys" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4d2456c373231a208ad294c33dc5bff30051eafd954cd4caae83a712b12854d" +checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f" [[package]] name = "lock_api" -version = "0.4.6" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" dependencies = [ + "autocfg", "scopeguard", ] @@ -3877,7 +4525,16 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909" dependencies = [ - "hashbrown", + "hashbrown 0.12.3", +] + +[[package]] +name = "lru" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e7d46de488603ffdd5f30afbc64fbba2378214a2c3a2fb83abf3d33126df17" +dependencies = [ + "hashbrown 0.13.2", ] [[package]] @@ -3950,60 +4607,87 @@ dependencies = [ [[package]] name = "matches" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" [[package]] name = "matrixmultiply" -version = "0.3.2" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "add85d4dd35074e6fedc608f8c8f513a3548619a9024b751949ef0e8e45a4d84" +checksum = "090126dc04f95dc0d1c1c91f61bdd474b3930ca064c1edc8a849da2c6cbe1e77" dependencies = [ + "autocfg", "rawpointer", ] +[[package]] +name = "md-5" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" +dependencies = [ + "digest 0.10.6", +] + [[package]] name = "memchr" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "memfd" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "480b5a5de855d11ff13195950bdc8b98b5e942ef47afc447f6615cdcc4e15d80" +checksum = "ffc89ccdc6e10d6907450f753537ebc5c5d3460d2e4e62ea74bd571db62c0f9e" dependencies = [ - "rustix", + "rustix 0.37.19", ] [[package]] name = "memmap2" -version = "0.5.0" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4647a11b578fead29cdbb34d4adef8dd3dc35b876c9c6d5240d83f205abfe96e" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" dependencies = [ "libc", ] [[package]] name = "memoffset" -version = "0.6.4" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9" +checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" dependencies = [ "autocfg", ] [[package]] name = "memory-db" -version = "0.31.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e0c7cba9ce19ac7ffd2053ac9f49843bbd3f4318feedfd74e85c19d5fb0ba66" +checksum = "808b50db46293432a45e63bc15ea51e0ab4c0a1647b8eb114e31a3e698dd6fbe" dependencies = [ "hash-db", - "hashbrown", ] [[package]] @@ -4037,9 +4721,9 @@ dependencies = [ [[package]] name = "mime" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "minimal-lexical" @@ -4049,30 +4733,38 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.4.4" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" +dependencies = [ + "adler", +] + +[[package]] +name = "miniz_oxide" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" dependencies = [ "adler", - "autocfg", ] [[package]] name = "mio" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" +checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" dependencies = [ "libc", "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] name = "mmr-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "futures", "log", @@ -4080,11 +4772,10 @@ dependencies = [ "sc-client-api", "sc-offchain", "sp-api", - "sp-beefy", "sp-blockchain", "sp-consensus", + "sp-consensus-beefy", "sp-core", - "sp-io", "sp-mmr-primitives", "sp-runtime", ] @@ -4092,7 +4783,7 @@ dependencies = [ [[package]] name = "mmr-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "anyhow", "jsonrpsee", @@ -4107,42 +4798,61 @@ dependencies = [ [[package]] name = "mockall" -version = "0.11.2" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2be9a9090bc1cac2930688fa9478092a64c6a92ddc6ae0692d46b37d9cab709" +checksum = "4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96" dependencies = [ "cfg-if", "downcast", "fragile", "lazy_static", "mockall_derive", - "predicates", + "predicates 2.1.5", "predicates-tree", ] [[package]] name = "mockall_derive" -version = "0.11.2" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86d702a0530a0141cf4ed147cf5ec7be6f2c187d4e37fcbefc39cf34116bfe8f" +checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb" dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "multiaddr" -version = "0.14.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c580bfdd8803cce319b047d239559a22f809094aaea4ac13902a1fdcfcd4261" +checksum = "a4aebdb21e90f81d13ed01dc84123320838e53963c2ca94b60b305d3fa64f31e" +dependencies = [ + "arrayref", + "byteorder", + "data-encoding", + "multibase", + "multihash 0.16.3", + "percent-encoding", + "serde", + "static_assertions", + "unsigned-varint", + "url", +] + +[[package]] +name = "multiaddr" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b36f567c7099511fa8612bbbb52dda2419ce0bdbacf31714e3a5ffdb766d3bd" dependencies = [ "arrayref", - "bs58", "byteorder", "data-encoding", - "multihash", + "log", + "multibase", + "multihash 0.17.0", "percent-encoding", "serde", "static_assertions", @@ -4163,32 +4873,43 @@ dependencies = [ [[package]] name = "multihash" -version = "0.16.2" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3db354f401db558759dfc1e568d010a5d4146f4d3f637be1275ec4a3cf09689" +checksum = "1c346cf9999c631f002d8f977c4eaeaa0e6386f16007202308d0b3757522c2cc" dependencies = [ "blake2b_simd", "blake2s_simd", "blake3", "core2", - "digest 0.10.3", + "digest 0.10.6", "multihash-derive", - "sha2 0.10.2", + "sha2 0.10.6", "sha3", "unsigned-varint", ] +[[package]] +name = "multihash" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835d6ff01d610179fbce3de1694d007e500bf33a7f29689838941d6bf783ae40" +dependencies = [ + "core2", + "multihash-derive", + "unsigned-varint", +] + [[package]] name = "multihash-derive" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc076939022111618a5026d3be019fd8b366e76314538ff9a1b59ffbcbf98bcd" +checksum = "1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db" dependencies = [ "proc-macro-crate", "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] @@ -4200,9 +4921,9 @@ checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" [[package]] name = "multistream-select" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bc41247ec209813e2fd414d6e16b9d94297dacf3cd613fa6ef09cd4d9755c10" +checksum = "c8552ab875c1313b97b8d20cb857b9fd63e2d1d6a0a1b53ce9821e575405f27a" dependencies = [ "bytes", "futures", @@ -4214,9 +4935,9 @@ dependencies = [ [[package]] name = "nalgebra" -version = "0.27.1" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "462fffe4002f4f2e1f6a9dcf12cc1a6fc0e15989014efc02a941d3e0f5dc2120" +checksum = "d68d47bba83f9e2006d117a9a33af1524e655516b8919caac694427a6fb1e511" dependencies = [ "approx", "matrixmultiply", @@ -4224,21 +4945,19 @@ dependencies = [ "num-complex", "num-rational", "num-traits", - "rand 0.8.5", - "rand_distr", "simba", "typenum", ] [[package]] name = "nalgebra-macros" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01fcc0b8149b4632adc89ac3b7b31a12fb6099a0317a4eb2ebff574ef7de7218" +checksum = "d232c68884c0c99810a5a4d333ef7e47689cfd0edc85efc9e54e1e6bf5212766" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4258,9 +4977,9 @@ checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" [[package]] name = "native-tls" -version = "0.2.8" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48ba9f7719b5a0f42f338907614285fb5fd70e53858141f69898a1fb7203b24d" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" dependencies = [ "lazy_static", "libc", @@ -4302,9 +5021,9 @@ dependencies = [ [[package]] name = "netlink-packet-utils" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25af9cf0dc55498b7bd94a1508af7a78706aa0ab715a73c5169273e03c84845e" +checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" dependencies = [ "anyhow", "byteorder", @@ -4329,40 +5048,54 @@ dependencies = [ [[package]] name = "netlink-sys" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92b654097027250401127914afb37cb1f311df6610a9891ff07a757e94199027" +checksum = "6471bf08e7ac0135876a9581bf3217ef0333c191c128d34878079f42ee150411" dependencies = [ - "async-io", "bytes", "futures", "libc", "log", + "tokio", ] [[package]] name = "nix" -version = "0.23.1" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6" +checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c" dependencies = [ "bitflags", "cc", "cfg-if", "libc", - "memoffset", + "memoffset 0.6.5", ] [[package]] name = "nix" -version = "0.24.1" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" +dependencies = [ + "bitflags", + "cfg-if", + "libc", + "memoffset 0.6.5", +] + +[[package]] +name = "nix" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f17df307904acd05aa8e32e97bb20f2a0df1728bbc2d771ae8f9a90463441e9" +checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" dependencies = [ "bitflags", "cfg-if", "libc", - "memoffset", + "memoffset 0.7.1", + "pin-utils", + "static_assertions", ] [[package]] @@ -4373,13 +5106,12 @@ checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" [[package]] name = "nom" -version = "7.1.0" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d11e1ef389c76fe5b81bcaf2ea32cf88b62bc494e19f493d0b30e7a930109" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ "memchr", "minimal-lexical", - "version_check", ] [[package]] @@ -4388,6 +5120,16 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + [[package]] name = "num-bigint" version = "0.4.3" @@ -4401,18 +5143,18 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.4.0" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26873667bbbb7c5182d4a37c1add32cdf09f841af72da53318fdb81543c15085" +checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d" dependencies = [ "num-traits", ] [[package]] name = "num-format" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b862ff8df690cf089058c98b183676a7ed0f974cc08b426800093227cbff3b" +checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" dependencies = [ "arrayvec 0.7.2", "itoa", @@ -4420,9 +5162,9 @@ dependencies = [ [[package]] name = "num-integer" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" dependencies = [ "autocfg", "num-traits", @@ -4442,50 +5184,73 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", - "libm", ] [[package]] name = "num_cpus" -version = "1.13.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" dependencies = [ - "hermit-abi", + "hermit-abi 0.2.6", "libc", ] [[package]] name = "object" -version = "0.27.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67ac1d3f9a1d3616fd9a60c8d74296f22406a238b6a72f5cc1e6f314df4ffbf9" +checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" dependencies = [ + "crc32fast", + "hashbrown 0.12.3", + "indexmap", "memchr", ] [[package]] name = "object" -version = "0.29.0" +version = "0.30.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" +checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" dependencies = [ - "crc32fast", - "hashbrown", - "indexmap", "memchr", ] +[[package]] +name = "oid-registry" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e20717fa0541f39bd146692035c37bedfa532b3e5071b35761082407546b2a" +dependencies = [ + "asn1-rs 0.3.1", +] + +[[package]] +name = "oid-registry" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" +dependencies = [ + "asn1-rs 0.5.2", +] + [[package]] name = "once_cell" -version = "1.12.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7709cef83f0c1f58f666e746a08b21e0085f7440fa6a29cc194d68aac97a4225" +checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" + +[[package]] +name = "oorandom" +version = "11.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" [[package]] name = "opaque-debug" @@ -4501,31 +5266,42 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl" -version = "0.10.38" +version = "0.10.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7ae222234c30df141154f159066c5093ff73b63204dcda7121eb082fc56a95" +checksum = "01b8574602df80f7b85fdfc5392fa884a4e3b3f4f35402c070ab34c3d3f78d56" 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 2.0.15", +] + [[package]] name = "openssl-probe" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.72" +version = "0.9.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e46109c383602735fa0a2e48dd2b7c892b048e1bf69e5c3b1d804b7d9c203cb" +checksum = "8e17f59264b2809d77ae94f0e1ebabc434773f370d6ca667bd223ea10e06cc7e" dependencies = [ - "autocfg", "cc", "libc", "pkg-config", @@ -4534,9 +5310,9 @@ dependencies = [ [[package]] name = "orchestra" -version = "0.0.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aab54694ddaa8a9b703724c6ef04272b2d27bc32d2c855aae5cdd1857216b43" +checksum = "2b0766f60d83cac01c6e3f3bc36aaa9056e48bea0deddb98a8c74de6021f3061" dependencies = [ "async-trait", "dyn-clonable", @@ -4551,17 +5327,18 @@ dependencies = [ [[package]] name = "orchestra-proc-macro" -version = "0.0.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a702b2f6bf592b3eb06c00d80d05afaf7a8eff6b41bb361e397d799acc21b45a" +checksum = "3c8e83dbd049009426b445424a1104c78e6172a4c13e3614e52a38262785a5d7" dependencies = [ - "expander 0.0.6", + "expander 1.0.0", + "indexmap", "itertools", "petgraph", "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4575,29 +5352,67 @@ dependencies = [ [[package]] name = "os_str_bytes" -version = "6.0.0" +version = "6.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64" +checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267" [[package]] name = "output_vt100" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53cdc5b785b7a58c5aad8216b3dfa114df64b0b06ae6e1501cef91df2fbdf8f9" +checksum = "628223faebab4e3e40667ee0b2336d34a5b960ff60ea743ddfdbcf7770bcfb66" dependencies = [ "winapi", ] +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + [[package]] name = "owo-colors" -version = "3.2.0" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" + +[[package]] +name = "p256" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594" +dependencies = [ + "ecdsa", + "elliptic-curve", + "sha2 0.10.6", +] + +[[package]] +name = "p384" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc8c5bf642dde52bb9e87c0ecd8ca5a76faac2eeed98dedb7c717997e1080aa" +dependencies = [ + "ecdsa", + "elliptic-curve", + "sha2 0.10.6", +] + +[[package]] +name = "packed_simd_2" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20448fd678ec04e6ea15bbe0476874af65e98a01515d667aa49f1434dc44ebf4" +checksum = "a1914cd452d8fccd6f9db48147b29fd4ae05bea9dc5d9ad578509f72415de282" +dependencies = [ + "cfg-if", + "libm 0.1.4", +] [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4612,7 +5427,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-support", "frame-system", @@ -4628,14 +5443,13 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-support", "frame-system", "impl-trait-for-tuples", "parity-scale-codec", "scale-info", - "sp-authorship", "sp-runtime", "sp-std", ] @@ -4643,7 +5457,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4667,7 +5481,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4687,7 +5501,7 @@ dependencies = [ [[package]] name = "pallet-bags-list-remote-tests" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-election-provider-support", "frame-remote-externalities", @@ -4706,7 +5520,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4721,26 +5535,29 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-support", "frame-system", + "pallet-authorship", "pallet-session", "parity-scale-codec", "scale-info", "serde", - "sp-beefy", + "sp-consensus-beefy", "sp-runtime", + "sp-session", + "sp-staking", "sp-std", ] [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "array-bytes", - "beefy-merkle-tree", + "binary-merkle-tree", "frame-support", "frame-system", "log", @@ -4750,7 +5567,8 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-beefy", + "sp-api", + "sp-consensus-beefy", "sp-core", "sp-io", "sp-runtime", @@ -4760,7 +5578,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4778,7 +5596,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4797,7 +5615,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4814,7 +5632,7 @@ dependencies = [ [[package]] name = "pallet-conviction-voting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "assert_matches", "frame-benchmarking", @@ -4831,7 +5649,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4849,7 +5667,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4858,7 +5676,7 @@ dependencies = [ "log", "pallet-election-provider-support-benchmarking", "parity-scale-codec", - "rand 0.7.3", + "rand 0.8.5", "scale-info", "sp-arithmetic", "sp-core", @@ -4866,14 +5684,13 @@ dependencies = [ "sp-npos-elections", "sp-runtime", "sp-std", - "static_assertions", "strum", ] [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4886,7 +5703,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4904,7 +5721,7 @@ dependencies = [ [[package]] name = "pallet-fast-unstake" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4922,7 +5739,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4933,8 +5750,8 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-application-crypto", + "sp-consensus-grandpa", "sp-core", - "sp-finality-grandpa", "sp-io", "sp-runtime", "sp-session", @@ -4945,7 +5762,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4961,7 +5778,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4981,7 +5798,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4998,7 +5815,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", @@ -5015,7 +5832,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", @@ -5032,7 +5849,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", @@ -5048,7 +5865,7 @@ dependencies = [ [[package]] name = "pallet-nis" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", @@ -5064,7 +5881,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-support", "frame-system", @@ -5081,7 +5898,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5101,8 +5918,9 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ + "pallet-nomination-pools", "parity-scale-codec", "sp-api", "sp-std", @@ -5111,7 +5929,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-support", "frame-system", @@ -5128,12 +5946,13 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-election-provider-support", "frame-support", "frame-system", + "log", "pallet-babe", "pallet-balances", "pallet-grandpa", @@ -5151,7 +5970,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", @@ -5168,7 +5987,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", @@ -5183,7 +6002,7 @@ dependencies = [ [[package]] name = "pallet-ranked-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", @@ -5201,7 +6020,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", @@ -5216,7 +6035,7 @@ dependencies = [ [[package]] name = "pallet-referenda" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "assert_matches", "frame-benchmarking", @@ -5235,7 +6054,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", @@ -5252,7 +6071,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-support", "frame-system", @@ -5273,14 +6092,14 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", "pallet-session", "pallet-staking", - "rand 0.7.3", + "rand 0.8.5", "sp-runtime", "sp-session", "sp-std", @@ -5289,7 +6108,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-support", "frame-system", @@ -5303,7 +6122,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5326,27 +6145,36 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "log", "sp-arithmetic", ] +[[package]] +name = "pallet-staking-runtime-api" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" +dependencies = [ + "parity-scale-codec", + "sp-api", +] + [[package]] name = "pallet-state-trie-migration" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", @@ -5363,7 +6191,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-support", "frame-system", @@ -5377,7 +6205,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", @@ -5395,7 +6223,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", @@ -5414,7 +6242,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-support", "frame-system", @@ -5430,7 +6258,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -5446,7 +6274,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -5458,7 +6286,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", @@ -5472,10 +6300,25 @@ dependencies = [ "sp-std", ] +[[package]] +name = "pallet-uniques" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "sp-std", +] + [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", @@ -5491,7 +6334,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", @@ -5506,7 +6349,7 @@ dependencies = [ [[package]] name = "pallet-whitelist" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-benchmarking", "frame-support", @@ -5520,8 +6363,10 @@ dependencies = [ [[package]] name = "pallet-xcm" -version = "0.9.36" +version = "0.9.40" dependencies = [ + "bounded-collections", + "frame-benchmarking", "frame-support", "frame-system", "log", @@ -5542,7 +6387,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" -version = "0.9.36" +version = "0.9.40" dependencies = [ "frame-benchmarking", "frame-support", @@ -5567,9 +6412,9 @@ dependencies = [ [[package]] name = "parity-db" -version = "0.4.2" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a7511a0bec4a336b5929999d02b560d2439c993cccf98c26481484e811adc43" +checksum = "bd4572a52711e2ccff02b4973ec7e4a5b5c23387ebbfbd6cd42b34755714cefc" dependencies = [ "blake2", "crc32fast", @@ -5581,14 +6426,15 @@ dependencies = [ "memmap2", "parking_lot 0.12.1", "rand 0.8.5", + "siphasher", "snap", ] [[package]] name = "parity-scale-codec" -version = "3.1.5" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9182e4a71cae089267ab03e67c99368db7cd877baf50f931e5d6d4b71e195ac0" +checksum = "5ddb756ca205bd108aee3c62c6d3c994e1df84a59b9d6d4a5ea42ee1fd5a9a28" dependencies = [ "arrayvec 0.7.2", "bitvec", @@ -5601,14 +6447,14 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "3.1.3" +version = "3.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9299338969a3d2f491d65f140b00ddec470858402f888af98e8642fb5e8965cd" +checksum = "86b26a931f824dd4eca30b3e43bb4f31cd5f0d3a403c5f5ff27106b805bfde7b" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -5625,9 +6471,9 @@ checksum = "e1ad0aff30c1da14b1254fcb2af73e1fa9a28670e584a626f53a369d0e157304" [[package]] name = "parking" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" +checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" [[package]] name = "parking_lot" @@ -5637,7 +6483,7 @@ checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" dependencies = [ "instant", "lock_api", - "parking_lot_core 0.8.5", + "parking_lot_core 0.8.6", ] [[package]] @@ -5647,58 +6493,58 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.1", + "parking_lot_core 0.9.7", ] [[package]] name = "parking_lot_core" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" dependencies = [ "cfg-if", "instant", "libc", - "redox_syscall", + "redox_syscall 0.2.16", "smallvec", "winapi", ] [[package]] name = "parking_lot_core" -version = "0.9.1" +version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28141e0cc4143da2443301914478dc976a61ffdb3f043058310c70df2fed8954" +checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.2.16", "smallvec", - "windows-sys 0.32.0", + "windows-sys 0.45.0", ] [[package]] name = "paste" -version = "1.0.7" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c520e05135d6e763148b6426a837e239041653ba7becd2e538c076c738025fc" +checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" [[package]] name = "pbkdf2" -version = "0.4.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216eaa586a190f0a738f2f918511eecfa90f13295abec0e457cdebcceda80cbd" +checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa" dependencies = [ - "crypto-mac 0.8.0", + "crypto-mac 0.11.1", ] [[package]] name = "pbkdf2" -version = "0.8.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" dependencies = [ - "crypto-mac 0.11.1", + "digest 0.10.6", ] [[package]] @@ -5707,26 +6553,45 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" +[[package]] +name = "pem" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" +dependencies = [ + "base64 0.13.1", +] + +[[package]] +name = "pem-rfc7468" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d159833a9105500e0398934e205e0773f0b27529557134ecfc51c27646adac" +dependencies = [ + "base64ct", +] + [[package]] name = "percent-encoding" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.1.3" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" +checksum = "e68e84bfb01f0507134eac1e9b410a12ba379d064eab48c50ba4ce329a527b70" dependencies = [ + "thiserror", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.1.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0" +checksum = "6b79d4c71c865a25a4322296122e3924d30bc8ee0834c8bfc8b95f7f054afbfb" dependencies = [ "pest", "pest_generator", @@ -5734,33 +6599,33 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.1.3" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55" +checksum = "6c435bf1076437b851ebc8edc3a18442796b30f1728ffea6262d59bbe28b077e" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] name = "pest_meta" -version = "2.1.3" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d" +checksum = "745a452f8eb71e39ffd8ee32b3c5f51d03845f99786fa9b68db6ff509c505411" dependencies = [ - "maplit", + "once_cell", "pest", - "sha-1 0.8.2", + "sha2 0.10.6", ] [[package]] name = "petgraph" -version = "0.6.0" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a13a2fa9d0b63e5f22328828741e523766fff0ee9e779316902290dff3f824f" +checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" dependencies = [ "fixedbitset", "indexmap", @@ -5783,7 +6648,7 @@ checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -5794,9 +6659,9 @@ checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" [[package]] name = "pin-project-lite" -version = "0.2.7" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" [[package]] name = "pin-utils" @@ -5816,9 +6681,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.22" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12295df4f294471248581bc09bef3c38a5e46f1e36d6a37353621a0c6c357e1f" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" [[package]] name = "platforms" @@ -5826,15 +6691,23 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8d0eef3571242013a0d5dc84861c3ae4a652e56e12adf8bdc26ff5f8cb34c94" +[[package]] +name = "platforms" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d7ddaed09e0eb771a79ab0fd64609ba0afb0a8366421957936ad14cbd13630" + [[package]] name = "polkadot" -version = "0.9.36" +version = "0.9.40" dependencies = [ "assert_cmd", "color-eyre", - "nix 0.24.1", + "nix 0.26.2", "polkadot-cli", "polkadot-core-primitives", + "polkadot-node-core-pvf", + "polkadot-overseer", "substrate-rpc-client", "tempfile", "tikv-jemallocator", @@ -5843,12 +6716,13 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" -version = "0.9.36" +version = "0.9.40" dependencies = [ "assert_matches", - "env_logger 0.9.0", + "env_logger 0.9.3", "futures", "log", + "polkadot-node-metrics", "polkadot-node-network-protocol", "polkadot-node-primitives", "polkadot-node-subsystem", @@ -5867,11 +6741,11 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" -version = "0.9.36" +version = "0.9.40" dependencies = [ "assert_matches", "bitvec", - "env_logger 0.9.0", + "env_logger 0.9.3", "futures", "log", "maplit", @@ -5892,14 +6766,14 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" -version = "0.9.36" +version = "0.9.40" dependencies = [ "assert_matches", "derive_more", "fatality", "futures", "futures-timer", - "lru", + "lru 0.9.0", "parity-scale-codec", "polkadot-erasure-coding", "polkadot-node-network-protocol", @@ -5921,15 +6795,15 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" -version = "0.9.36" +version = "0.9.40" dependencies = [ "assert_matches", - "env_logger 0.9.0", + "env_logger 0.9.3", "fatality", "futures", "futures-timer", "log", - "lru", + "lru 0.9.0", "parity-scale-codec", "polkadot-erasure-coding", "polkadot-node-network-protocol", @@ -5950,9 +6824,9 @@ dependencies = [ [[package]] name = "polkadot-cli" -version = "0.9.36" +version = "0.9.40" dependencies = [ - "clap", + "clap 4.2.7", "frame-benchmarking-cli", "futures", "log", @@ -5965,6 +6839,7 @@ dependencies = [ "sc-cli", "sc-executor", "sc-service", + "sc-storage-monitor", "sc-sysinfo", "sc-tracing", "sp-core", @@ -5977,7 +6852,7 @@ dependencies = [ [[package]] name = "polkadot-client" -version = "0.9.36" +version = "0.9.40" dependencies = [ "async-trait", "frame-benchmarking", @@ -6000,13 +6875,13 @@ dependencies = [ "sc-service", "sp-api", "sp-authority-discovery", - "sp-beefy", "sp-block-builder", "sp-blockchain", "sp-consensus", "sp-consensus-babe", + "sp-consensus-beefy", + "sp-consensus-grandpa", "sp-core", - "sp-finality-grandpa", "sp-inherents", "sp-keyring", "sp-mmr-primitives", @@ -6021,12 +6896,12 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" -version = "0.9.36" +version = "0.9.40" dependencies = [ "always-assert", "assert_matches", "bitvec", - "env_logger 0.9.0", + "env_logger 0.9.3", "fatality", "futures", "futures-timer", @@ -6050,7 +6925,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" -version = "0.9.36" +version = "0.9.40" dependencies = [ "parity-scale-codec", "scale-info", @@ -6061,7 +6936,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" -version = "0.9.36" +version = "0.9.40" dependencies = [ "assert_matches", "async-trait", @@ -6071,7 +6946,7 @@ dependencies = [ "futures-timer", "indexmap", "lazy_static", - "lru", + "lru 0.9.0", "parity-scale-codec", "polkadot-erasure-coding", "polkadot-node-network-protocol", @@ -6093,8 +6968,9 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" -version = "0.9.36" +version = "0.9.40" dependencies = [ + "criterion", "parity-scale-codec", "polkadot-node-primitives", "polkadot-primitives", @@ -6106,7 +6982,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" -version = "0.9.36" +version = "0.9.40" dependencies = [ "assert_matches", "async-trait", @@ -6133,7 +7009,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" -version = "0.9.36" +version = "0.9.40" dependencies = [ "always-assert", "assert_matches", @@ -6144,6 +7020,7 @@ dependencies = [ "futures-timer", "parity-scale-codec", "parking_lot 0.12.1", + "polkadot-node-metrics", "polkadot-node-network-protocol", "polkadot-node-subsystem", "polkadot-node-subsystem-test-helpers", @@ -6152,7 +7029,6 @@ dependencies = [ "polkadot-primitives", "polkadot-primitives-test-helpers", "sc-network", - "sc-network-common", "sp-consensus", "sp-core", "sp-keyring", @@ -6162,7 +7038,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" -version = "0.9.36" +version = "0.9.40" dependencies = [ "futures", "parity-scale-codec", @@ -6181,7 +7057,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" -version = "0.9.36" +version = "0.9.40" dependencies = [ "assert_matches", "async-trait", @@ -6191,7 +7067,7 @@ dependencies = [ "futures-timer", "kvdb", "kvdb-memorydb", - "lru", + "lru 0.9.0", "merlin", "parity-scale-codec", "parking_lot 0.12.1", @@ -6220,11 +7096,11 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" -version = "0.9.36" +version = "0.9.40" dependencies = [ "assert_matches", "bitvec", - "env_logger 0.9.0", + "env_logger 0.9.3", "futures", "futures-timer", "kvdb", @@ -6240,6 +7116,7 @@ dependencies = [ "polkadot-overseer", "polkadot-primitives", "polkadot-primitives-test-helpers", + "sp-consensus", "sp-core", "sp-keyring", "thiserror", @@ -6248,7 +7125,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" -version = "0.9.36" +version = "0.9.40" dependencies = [ "assert_matches", "bitvec", @@ -6274,7 +7151,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" -version = "0.9.36" +version = "0.9.40" dependencies = [ "futures", "polkadot-node-subsystem", @@ -6290,7 +7167,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" -version = "0.9.36" +version = "0.9.40" dependencies = [ "assert_matches", "async-trait", @@ -6298,6 +7175,7 @@ dependencies = [ "futures-timer", "parity-scale-codec", "polkadot-node-core-pvf", + "polkadot-node-metrics", "polkadot-node-primitives", "polkadot-node-subsystem", "polkadot-node-subsystem-test-helpers", @@ -6313,15 +7191,15 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" -version = "0.9.36" +version = "0.9.40" dependencies = [ "futures", "maplit", "parity-scale-codec", + "polkadot-node-metrics", "polkadot-node-primitives", "polkadot-node-subsystem", "polkadot-node-subsystem-test-helpers", - "polkadot-node-subsystem-util", "polkadot-primitives", "sc-client-api", "sc-consensus-babe", @@ -6332,7 +7210,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" -version = "0.9.36" +version = "0.9.40" dependencies = [ "assert_matches", "futures", @@ -6353,7 +7231,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" -version = "0.9.36" +version = "0.9.40" dependencies = [ "assert_matches", "fatality", @@ -6361,7 +7239,7 @@ dependencies = [ "futures-timer", "kvdb", "kvdb-memorydb", - "lru", + "lru 0.9.0", "parity-scale-codec", "polkadot-node-primitives", "polkadot-node-subsystem", @@ -6374,13 +7252,14 @@ dependencies = [ "sp-core", "sp-keyring", "sp-keystore", + "sp-tracing", "thiserror", "tracing-gum", ] [[package]] name = "polkadot-node-core-parachains-inherent" -version = "0.9.36" +version = "0.9.40" dependencies = [ "async-trait", "futures", @@ -6390,14 +7269,13 @@ dependencies = [ "polkadot-primitives", "sp-blockchain", "sp-inherents", - "sp-runtime", "thiserror", "tracing-gum", ] [[package]] name = "polkadot-node-core-provisioner" -version = "0.9.36" +version = "0.9.40" dependencies = [ "bitvec", "fatality", @@ -6418,21 +7296,22 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" -version = "0.9.36" +version = "0.9.40" dependencies = [ "always-assert", "assert_matches", - "async-process", - "async-std", "cpu-time", "futures", "futures-timer", "hex-literal", + "libc", "parity-scale-codec", "pin-project", "polkadot-core-primitives", "polkadot-node-metrics", + "polkadot-node-primitives", "polkadot-parachain", + "polkadot-primitives", "rand 0.8.5", "rayon", "sc-executor", @@ -6448,12 +7327,14 @@ dependencies = [ "tempfile", "test-parachain-adder", "test-parachain-halt", + "tikv-jemalloc-ctl", + "tokio", "tracing-gum", ] [[package]] name = "polkadot-node-core-pvf-checker" -version = "0.9.36" +version = "0.9.40" dependencies = [ "futures", "futures-timer", @@ -6476,15 +7357,15 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" -version = "0.9.36" +version = "0.9.40" dependencies = [ "futures", - "lru", + "lru 0.9.0", + "polkadot-node-metrics", "polkadot-node-primitives", "polkadot-node-subsystem", "polkadot-node-subsystem-test-helpers", "polkadot-node-subsystem-types", - "polkadot-node-subsystem-util", "polkadot-primitives", "polkadot-primitives-test-helpers", "sp-api", @@ -6497,7 +7378,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" -version = "0.9.36" +version = "0.9.40" dependencies = [ "lazy_static", "log", @@ -6514,7 +7395,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" -version = "0.9.36" +version = "0.9.40" dependencies = [ "assert_cmd", "bs58", @@ -6522,7 +7403,6 @@ dependencies = [ "futures-timer", "hyper", "log", - "nix 0.24.1", "parity-scale-codec", "polkadot-primitives", "polkadot-test-service", @@ -6542,7 +7422,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" -version = "0.9.36" +version = "0.9.40" dependencies = [ "async-trait", "derive_more", @@ -6557,7 +7437,6 @@ dependencies = [ "rand_chacha 0.3.1", "sc-authority-discovery", "sc-network", - "sc-network-common", "strum", "thiserror", "tracing-gum", @@ -6565,7 +7444,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" -version = "0.9.36" +version = "0.9.40" dependencies = [ "bounded-vec", "futures", @@ -6581,13 +7460,14 @@ dependencies = [ "sp-core", "sp-keystore", "sp-maybe-compressed-blob", + "sp-runtime", "thiserror", "zstd", ] [[package]] name = "polkadot-node-subsystem" -version = "0.9.36" +version = "0.9.40" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -6596,7 +7476,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" -version = "0.9.36" +version = "0.9.40" dependencies = [ "async-trait", "futures", @@ -6614,7 +7494,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" -version = "0.9.36" +version = "0.9.40" dependencies = [ "async-trait", "derive_more", @@ -6636,21 +7516,22 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" -version = "0.9.36" +version = "0.9.40" dependencies = [ "assert_matches", "async-trait", "derive_more", - "env_logger 0.9.0", + "env_logger 0.9.3", "fatality", "futures", + "futures-channel", "itertools", "kvdb", "kvdb-memorydb", "kvdb-shared-tests", "lazy_static", "log", - "lru", + "lru 0.9.0", "parity-db", "parity-scale-codec", "parking_lot 0.11.2", @@ -6676,14 +7557,14 @@ dependencies = [ [[package]] name = "polkadot-overseer" -version = "0.9.36" +version = "0.9.40" dependencies = [ "assert_matches", "async-trait", "femme", "futures", "futures-timer", - "lru", + "lru 0.9.0", "orchestra", "parking_lot 0.12.1", "polkadot-node-metrics", @@ -6702,8 +7583,9 @@ dependencies = [ [[package]] name = "polkadot-parachain" -version = "0.9.36" +version = "0.9.40" dependencies = [ + "bounded-collections", "derive_more", "frame-support", "parity-scale-codec", @@ -6717,21 +7599,22 @@ dependencies = [ [[package]] name = "polkadot-performance-test" -version = "0.9.36" +version = "0.9.40" dependencies = [ - "env_logger 0.9.0", + "env_logger 0.9.3", "kusama-runtime", "log", "polkadot-erasure-coding", "polkadot-node-core-pvf", "polkadot-node-primitives", + "polkadot-primitives", "quote", "thiserror", ] [[package]] name = "polkadot-primitives" -version = "0.9.36" +version = "0.9.40" dependencies = [ "bitvec", "hex-literal", @@ -6756,7 +7639,7 @@ dependencies = [ [[package]] name = "polkadot-primitives-test-helpers" -version = "0.9.36" +version = "0.9.40" dependencies = [ "polkadot-primitives", "rand 0.8.5", @@ -6768,10 +7651,8 @@ dependencies = [ [[package]] name = "polkadot-rpc" -version = "0.9.36" +version = "0.9.40" dependencies = [ - "beefy-gadget", - "beefy-gadget-rpc", "jsonrpsee", "mmr-rpc", "pallet-transaction-payment-rpc", @@ -6780,9 +7661,11 @@ dependencies = [ "sc-client-api", "sc-consensus-babe", "sc-consensus-babe-rpc", + "sc-consensus-beefy", + "sc-consensus-beefy-rpc", "sc-consensus-epochs", - "sc-finality-grandpa", - "sc-finality-grandpa-rpc", + "sc-consensus-grandpa", + "sc-consensus-grandpa-rpc", "sc-rpc", "sc-sync-state-rpc", "sc-transaction-pool-api", @@ -6799,7 +7682,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" -version = "0.9.36" +version = "0.9.40" dependencies = [ "bitvec", "frame-benchmarking", @@ -6844,6 +7727,7 @@ dependencies = [ "pallet-session-benchmarking", "pallet-staking", "pallet-staking-reward-curve", + "pallet-staking-runtime-api", "pallet-timestamp", "pallet-tips", "pallet-transaction-payment", @@ -6866,9 +7750,9 @@ dependencies = [ "smallvec", "sp-api", "sp-authority-discovery", - "sp-beefy", "sp-block-builder", "sp-consensus-babe", + "sp-consensus-beefy", "sp-core", "sp-inherents", "sp-io", @@ -6895,7 +7779,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" -version = "0.9.36" +version = "0.9.40" dependencies = [ "bitvec", "frame-benchmarking", @@ -6909,10 +7793,9 @@ dependencies = [ "log", "pallet-authorship", "pallet-babe", - "pallet-bags-list", "pallet-balances", - "pallet-beefy-mmr", "pallet-election-provider-multi-phase", + "pallet-fast-unstake", "pallet-session", "pallet-staking", "pallet-staking-reward-fn", @@ -6931,7 +7814,6 @@ dependencies = [ "serde_json", "slot-range-helper", "sp-api", - "sp-beefy", "sp-core", "sp-inherents", "sp-io", @@ -6947,7 +7829,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" -version = "0.9.36" +version = "0.9.40" dependencies = [ "frame-support", "polkadot-primitives", @@ -6960,7 +7842,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" -version = "0.9.36" +version = "0.9.40" dependencies = [ "bs58", "parity-scale-codec", @@ -6971,7 +7853,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" -version = "0.9.36" +version = "0.9.40" dependencies = [ "assert_matches", "bitflags", @@ -6993,6 +7875,7 @@ dependencies = [ "pallet-timestamp", "pallet-vesting", "parity-scale-codec", + "polkadot-parachain", "polkadot-primitives", "polkadot-primitives-test-helpers", "polkadot-runtime-metrics", @@ -7023,12 +7906,12 @@ dependencies = [ [[package]] name = "polkadot-service" -version = "0.9.36" +version = "0.9.40" dependencies = [ "assert_matches", "async-trait", - "beefy-gadget", - "env_logger 0.9.0", + "env_logger 0.9.3", + "frame-benchmarking-cli", "frame-support", "frame-system-rpc-runtime-api", "futures", @@ -7038,7 +7921,7 @@ dependencies = [ "kvdb", "kvdb-rocksdb", "log", - "lru", + "lru 0.9.0", "mmr-gadget", "pallet-babe", "pallet-im-online", @@ -7092,12 +7975,14 @@ dependencies = [ "sc-client-db", "sc-consensus", "sc-consensus-babe", + "sc-consensus-beefy", + "sc-consensus-grandpa", "sc-consensus-slots", "sc-executor", - "sc-finality-grandpa", "sc-keystore", "sc-network", "sc-network-common", + "sc-network-sync", "sc-offchain", "sc-service", "sc-sync-state-rpc", @@ -7108,13 +7993,13 @@ dependencies = [ "serde_json", "sp-api", "sp-authority-discovery", - "sp-beefy", "sp-block-builder", "sp-blockchain", "sp-consensus", "sp-consensus-babe", + "sp-consensus-beefy", + "sp-consensus-grandpa", "sp-core", - "sp-finality-grandpa", "sp-inherents", "sp-io", "sp-keystore", @@ -7137,7 +8022,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" -version = "0.9.36" +version = "0.9.40" dependencies = [ "arrayvec 0.5.2", "assert_matches", @@ -7168,7 +8053,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" -version = "0.9.36" +version = "0.9.40" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -7177,7 +8062,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" -version = "0.9.36" +version = "0.9.40" dependencies = [ "futures", "parity-scale-codec", @@ -7203,11 +8088,11 @@ dependencies = [ [[package]] name = "polkadot-test-malus" -version = "0.9.36" +version = "0.9.40" dependencies = [ "assert_matches", "async-trait", - "clap", + "clap 4.2.7", "color-eyre", "futures", "futures-timer", @@ -7231,7 +8116,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" -version = "0.9.36" +version = "0.9.40" dependencies = [ "bitvec", "frame-election-provider-support", @@ -7270,9 +8155,9 @@ dependencies = [ "smallvec", "sp-api", "sp-authority-discovery", - "sp-beefy", "sp-block-builder", "sp-consensus-babe", + "sp-consensus-beefy", "sp-core", "sp-inherents", "sp-io", @@ -7296,7 +8181,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" -version = "0.9.36" +version = "0.9.40" dependencies = [ "frame-benchmarking", "frame-system", @@ -7322,10 +8207,9 @@ dependencies = [ "sc-client-api", "sc-consensus", "sc-consensus-babe", + "sc-consensus-grandpa", "sc-executor", - "sc-finality-grandpa", "sc-network", - "sc-network-common", "sc-service", "sc-tracing", "sc-transaction-pool", @@ -7335,8 +8219,8 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-consensus-babe", + "sp-consensus-grandpa", "sp-core", - "sp-finality-grandpa", "sp-inherents", "sp-keyring", "sp-runtime", @@ -7351,9 +8235,9 @@ dependencies = [ [[package]] name = "polkadot-voter-bags" -version = "0.9.36" +version = "0.9.40" dependencies = [ - "clap", + "clap 4.2.7", "generate-bags", "kusama-runtime", "polkadot-runtime", @@ -7363,15 +8247,18 @@ dependencies = [ [[package]] name = "polling" -version = "2.2.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "685404d509889fade3e86fe3a5803bca2ec09b0c0778d5ada6ec8bf7a8de5259" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" dependencies = [ + "autocfg", + "bitflags", "cfg-if", + "concurrent-queue", "libc", "log", - "wepoll-ffi", - "winapi", + "pin-project-lite 0.2.9", + "windows-sys 0.48.0", ] [[package]] @@ -7382,7 +8269,7 @@ checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede" dependencies = [ "cpufeatures", "opaque-debug 0.3.0", - "universal-hash", + "universal-hash 0.4.1", ] [[package]] @@ -7394,7 +8281,19 @@ dependencies = [ "cfg-if", "cpufeatures", "opaque-debug 0.3.0", - "universal-hash", + "universal-hash 0.4.1", +] + +[[package]] +name = "polyval" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef234e08c11dfcb2e56f79fd70f6f2eb7f025c0ce2333e82f4f0518ecad30c6" +dependencies = [ + "cfg-if", + "cpufeatures", + "opaque-debug 0.3.0", + "universal-hash 0.5.0", ] [[package]] @@ -7409,7 +8308,7 @@ dependencies = [ "lazy_static", "libc", "log", - "nix 0.23.1", + "nix 0.23.2", "parking_lot 0.11.2", "smallvec", "symbolic-demangle", @@ -7419,15 +8318,15 @@ dependencies = [ [[package]] name = "ppv-lite86" -version = "0.2.15" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "predicates" -version = "2.1.0" +version = "2.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95e5a7689e456ab905c22c2b48225bb921aba7c8dfa58440d68ba13f6222a715" +checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd" dependencies = [ "difflib", "float-cmp", @@ -7437,17 +8336,29 @@ dependencies = [ "regex", ] +[[package]] +name = "predicates" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09963355b9f467184c04017ced4a2ba2d75cbcb4e7462690d388233253d4b1a9" +dependencies = [ + "anstyle", + "difflib", + "itertools", + "predicates-core", +] + [[package]] name = "predicates-core" -version = "1.0.2" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57e35a3326b75e49aa85f5dc6ec15b41108cf5aee58eabb1f274dd18b73c2451" +checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" [[package]] name = "predicates-tree" -version = "1.0.4" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "338c7be2905b732ae3984a2f40032b5e94fd8f52505b186c7d4d68d193445df7" +checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" dependencies = [ "predicates-core", "termtree", @@ -7455,21 +8366,31 @@ dependencies = [ [[package]] name = "pretty_assertions" -version = "1.2.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c89f989ac94207d048d92db058e4f6ec7342b0971fc58d1271ca148b799b3563" +checksum = "a25e9bcb20aa780fd0bb16b72403a9064d6b3f22f026946029acb941a50af755" dependencies = [ - "ansi_term", "ctor", "diff", "output_vt100", + "yansi", +] + +[[package]] +name = "prettyplease" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" +dependencies = [ + "proc-macro2", + "syn 1.0.109", ] [[package]] name = "primitive-types" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cfd65aea0c5fa0bfcc7c9e7ca828c921ef778f43d325325ec84bda371bfa75a" +checksum = "9f3486ccba82358b11a77516035647c34ba167dfa53312630de83b12bd4f3d66" dependencies = [ "fixed-hash", "impl-codec", @@ -7480,10 +8401,11 @@ dependencies = [ [[package]] name = "prioritized-metered-channel" -version = "0.2.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "382698e48a268c832d0b181ed438374a6bb708a82a8ca273bb0f61c74cf209c4" +checksum = "a3caef72a78ca8e77cbdfa87dd516ebb79d4cbe5b42e3b8435b463a8261339ff" dependencies = [ + "async-channel", "coarsetime", "crossbeam-queue", "derive_more", @@ -7513,7 +8435,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "version_check", ] @@ -7530,24 +8452,24 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.43" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" +checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" dependencies = [ "unicode-ident", ] [[package]] name = "prometheus" -version = "0.13.0" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7f64969ffd5dd8f39bd57a68ac53c163a095ed9d0fb707146da1b27025a3504" +checksum = "449811d15fbdf5ceb5c1144416066429cf82316e2ec8ce0c1f6f8a02e7bbcf8c" dependencies = [ "cfg-if", "fnv", "lazy_static", "memchr", - "parking_lot 0.11.2", + "parking_lot 0.12.1", "thiserror", ] @@ -7571,25 +8493,26 @@ checksum = "66a455fbcb954c1a7decf3c586e860fd7889cddf4b8e164be736dbac95a953cd" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "prometheus-parse" -version = "0.2.2" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c996f3caea1c51aa034c0d2dfd8447a12c555f4567b02677ef8a865ac4cce712" +checksum = "0c2aa5feb83bf4b2c8919eaf563f51dbab41183de73ba2353c0e03cd7b6bd892" dependencies = [ "chrono", - "lazy_static", + "itertools", + "once_cell", "regex", ] [[package]] name = "prost" -version = "0.11.0" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "399c3c31cdec40583bb68f0b18403400d01ec4289c383aa047560439952c4dd7" +checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" dependencies = [ "bytes", "prost-derive", @@ -7597,9 +8520,9 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.11.1" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f835c582e6bd972ba8347313300219fed5bfa52caf175298d860b61ff6069bb" +checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" dependencies = [ "bytes", "heck", @@ -7608,18 +8531,20 @@ dependencies = [ "log", "multimap", "petgraph", + "prettyplease", "prost", "prost-types", "regex", + "syn 1.0.109", "tempfile", "which", ] [[package]] name = "prost-codec" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "011ae9ff8359df7915f97302d591cdd9e0e27fbd5a4ddc5bd13b71079bb20987" +checksum = "0dc34979ff898b6e141106178981ce2596c387ea6e62533facfc61a37fc879c0" dependencies = [ "asynchronous-codec", "bytes", @@ -7630,32 +8555,31 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.11.0" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7345d5f0e08c0536d7ac7229952590239e77abf0a0100a1b1d890add6ea96364" +checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" dependencies = [ "anyhow", "itertools", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "prost-types" -version = "0.11.1" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dfaa718ad76a44b3415e6c4d53b17c8f99160dcb3a99b10470fce8ad43f6e3e" +checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" dependencies = [ - "bytes", "prost", ] [[package]] name = "psm" -version = "0.1.16" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd136ff4382c4753fc061cb9e4712ab2af263376b95bbd5bd8cd50c020b78e69" +checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" dependencies = [ "cc", ] @@ -7680,10 +8604,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] -name = "quick-error" -version = "2.0.1" +name = "quick-protobuf" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" +checksum = "9d6da84cc204722a989e01ba2f6e1e276e190f22263d0cb6ce8526fcdb0d2e1f" +dependencies = [ + "byteorder", +] [[package]] name = "quicksink" @@ -7696,11 +8623,29 @@ dependencies = [ "pin-project-lite 0.1.12", ] +[[package]] +name = "quinn-proto" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67c10f662eee9c94ddd7135043e544f3c82fa839a1e7b865911331961b53186c" +dependencies = [ + "bytes", + "rand 0.8.5", + "ring", + "rustc-hash", + "rustls 0.20.8", + "slab", + "thiserror", + "tinyvec", + "tracing", + "webpki 0.22.0", +] + [[package]] name = "quote" -version = "1.0.20" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" +checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500" dependencies = [ "proc-macro2", ] @@ -7722,7 +8667,6 @@ dependencies = [ "rand_chacha 0.2.2", "rand_core 0.5.1", "rand_hc", - "rand_pcg 0.2.1", ] [[package]] @@ -7733,7 +8677,7 @@ checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha 0.3.1", - "rand_core 0.6.3", + "rand_core 0.6.4", ] [[package]] @@ -7753,7 +8697,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core 0.6.3", + "rand_core 0.6.4", ] [[package]] @@ -7767,21 +8711,11 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" -dependencies = [ - "getrandom 0.2.3", -] - -[[package]] -name = "rand_distr" -version = "0.4.2" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "964d548f8e7d12e102ef183a0de7e98180c9f8729f555897a857b96e48122d2f" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "num-traits", - "rand 0.8.5", + "getrandom 0.2.9", ] [[package]] @@ -7793,22 +8727,13 @@ dependencies = [ "rand_core 0.5.1", ] -[[package]] -name = "rand_pcg" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" -dependencies = [ - "rand_core 0.5.1", -] - [[package]] name = "rand_pcg" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e" dependencies = [ - "rand_core 0.6.3", + "rand_core 0.6.4", ] [[package]] @@ -7819,46 +8744,78 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" -version = "1.5.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90" +checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" dependencies = [ - "autocfg", - "crossbeam-deque", "either", "rayon-core", ] [[package]] name = "rayon-core" -version = "1.9.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e" +checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" dependencies = [ "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", - "lazy_static", "num_cpus", ] +[[package]] +name = "rcgen" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6413f3de1edee53342e6138e75b56d32e7bc6e332b3bd62d497b1929d4cfbcdd" +dependencies = [ + "pem", + "ring", + "time 0.3.21", + "x509-parser 0.13.2", + "yasna", +] + +[[package]] +name = "rcgen" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" +dependencies = [ + "pem", + "ring", + "time 0.3.21", + "yasna", +] + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags", +] + [[package]] name = "redox_syscall" -version = "0.2.10" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ "bitflags", ] [[package]] name = "redox_users" -version = "0.4.0" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ - "getrandom 0.2.3", - "redox_syscall", + "getrandom 0.2.9", + "redox_syscall 0.2.16", + "thiserror", ] [[package]] @@ -7876,29 +8833,29 @@ dependencies = [ [[package]] name = "ref-cast" -version = "1.0.6" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "300f2a835d808734ee295d45007adacb9ebb29dd3ae2424acfa17930cae541da" +checksum = "f43faa91b1c8b36841ee70e97188a869d37ae21759da6846d4be66de5bf7b12c" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.6" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c38e3aecd2b21cb3959637b883bb3714bc7e43f0268b9a29d3743ee3e55cdd2" +checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] name = "regalloc2" -version = "0.3.2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d43a209257d978ef079f3d446331d0f1794f5e0fc19b306a199983857833a779" +checksum = "300d4fbfb40c1c66a78ba3ddd41c1110247cf52f97b87d0f2fc9209bd49b030c" dependencies = [ "fxhash", "log", @@ -7908,13 +8865,13 @@ dependencies = [ [[package]] name = "regex" -version = "1.6.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" +checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370" dependencies = [ - "aho-corasick", + "aho-corasick 1.0.1", "memchr", - "regex-syntax", + "regex-syntax 0.7.1", ] [[package]] @@ -7923,20 +8880,38 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" dependencies = [ - "regex-syntax", + "regex-syntax 0.6.29", ] [[package]] name = "regex-syntax" -version = "0.6.27" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c" + +[[package]] +name = "region" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" +checksum = "76e189c2369884dce920945e2ddf79b3dff49e071a167dd1817fa9c4c00d512e" +dependencies = [ + "bitflags", + "libc", + "mach", + "winapi", +] [[package]] name = "remote-ext-tests-bags-list" -version = "0.9.36" +version = "0.9.40" dependencies = [ - "clap", + "clap 4.2.7", "frame-system", "kusama-runtime", "kusama-runtime-constants", @@ -7951,22 +8926,13 @@ dependencies = [ "westend-runtime-constants", ] -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] - [[package]] name = "reqwest" -version = "0.11.11" +version = "0.11.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b75aa69a3f06bbcc66ede33af2af253c6f7a86b1ca0033f60c580a27074fbf92" +checksum = "13293b639a097af28fc8a90f22add145a9c954e49d77da06263d58cf44d5fb91" dependencies = [ - "base64", + "base64 0.21.0", "bytes", "encoding_rs", "futures-core", @@ -7978,12 +8944,12 @@ dependencies = [ "hyper-tls", "ipnet", "js-sys", - "lazy_static", "log", "mime", "native-tls", + "once_cell", "percent-encoding", - "pin-project-lite 0.2.7", + "pin-project-lite 0.2.9", "serde", "serde_json", "serde_urlencoded", @@ -7994,7 +8960,7 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "winreg 0.10.1", + "winreg", ] [[package]] @@ -8004,7 +8970,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" dependencies = [ "hostname", - "quick-error 1.2.3", + "quick-error", ] [[package]] @@ -8045,15 +9011,17 @@ dependencies = [ [[package]] name = "rococo-runtime" -version = "0.9.36" +version = "0.9.40" dependencies = [ - "beefy-merkle-tree", + "binary-merkle-tree", "frame-benchmarking", "frame-executive", + "frame-remote-externalities", "frame-support", "frame-system", "frame-system-benchmarking", "frame-system-rpc-runtime-api", + "frame-try-runtime", "hex-literal", "log", "pallet-authority-discovery", @@ -8108,9 +9076,9 @@ dependencies = [ "smallvec", "sp-api", "sp-authority-discovery", - "sp-beefy", "sp-block-builder", "sp-consensus-babe", + "sp-consensus-beefy", "sp-core", "sp-inherents", "sp-io", @@ -8121,12 +9089,14 @@ dependencies = [ "sp-session", "sp-staking", "sp-std", + "sp-tracing", "sp-transaction-pool", "sp-trie", "sp-version", "static_assertions", "substrate-wasm-builder", "tiny-keccak", + "tokio", "xcm", "xcm-builder", "xcm-executor", @@ -8134,7 +9104,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" -version = "0.9.36" +version = "0.9.40" dependencies = [ "frame-support", "polkadot-primitives", @@ -8147,34 +9117,70 @@ dependencies = [ [[package]] name = "rpassword" -version = "7.0.0" +version = "7.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b763cb66df1c928432cc35053f8bd4cec3335d8559fc16010017d16b3c1680" +checksum = "6678cf63ab3491898c0d021b493c94c9b221d91295294a2a5746eacbe5928322" dependencies = [ "libc", + "rtoolbox", "winapi", ] +[[package]] +name = "rtcp" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1919efd6d4a6a85d13388f9487549bb8e359f17198cc03ffd72f79b553873691" +dependencies = [ + "bytes", + "thiserror", + "webrtc-util", +] + [[package]] name = "rtnetlink" version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "322c53fd76a18698f1c27381d58091de3a043d356aa5bd0d510608b565f469a0" dependencies = [ - "async-global-executor", "futures", "log", "netlink-packet-route", "netlink-proto", - "nix 0.24.1", + "nix 0.24.3", + "thiserror", + "tokio", +] + +[[package]] +name = "rtoolbox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "034e22c514f5c0cb8a10ff341b9b048b5ceb21591f31c8f44c43b960f9b3524a" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "rtp" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2a095411ff00eed7b12e4c6a118ba984d113e1079582570d56a5ee723f11f80" +dependencies = [ + "async-trait", + "bytes", + "rand 0.8.5", + "serde", "thiserror", + "webrtc-util", ] [[package]] name = "rustc-demangle" -version = "0.1.21" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] name = "rustc-hash" @@ -8194,40 +9200,76 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.4", + "semver 1.0.17", +] + +[[package]] +name = "rusticata-macros" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" +dependencies = [ + "nom", +] + +[[package]] +name = "rustix" +version = "0.36.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a38f9520be93aba504e8ca974197f46158de5dcaa9fa04b57c57cd6a679d658" +dependencies = [ + "bitflags", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.1.4", + "windows-sys 0.45.0", ] [[package]] name = "rustix" -version = "0.35.9" +version = "0.37.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72c825b8aa8010eb9ee99b75f05e10180b9278d161583034d7574c9d617aeada" +checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d" dependencies = [ "bitflags", "errno", "io-lifetimes", "libc", - "linux-raw-sys", - "windows-sys 0.36.1", + "linux-raw-sys 0.3.7", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustls" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" +dependencies = [ + "base64 0.13.1", + "log", + "ring", + "sct 0.6.1", + "webpki 0.21.4", ] [[package]] name = "rustls" -version = "0.20.2" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d37e5e2290f3e040b594b1a9e04377c2c671f1a1cfd9bfdef82106ac1c113f84" +checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" dependencies = [ "log", "ring", - "sct", - "webpki", + "sct 0.7.0", + "webpki 0.22.0", ] [[package]] name = "rustls-native-certs" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca9ebdfa27d3fc180e42879037b5338ab1c040c06affd00d8338598e7800943" +checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" dependencies = [ "openssl-probe", "rustls-pemfile", @@ -8237,18 +9279,18 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "0.2.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eebeaeb360c87bfb72e84abdb3447159c0eaececf1bef2aecd65a8be949d1c9" +checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" dependencies = [ - "base64", + "base64 0.21.0", ] [[package]] name = "rustversion" -version = "1.0.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f" +checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" [[package]] name = "rw-stream-sink" @@ -8263,9 +9305,18 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.6" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" + +[[package]] +name = "safe_arch" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c9613b5a66ab9ba26415184cfc41156594925a9cf3a2057e57f31ff145f6568" +checksum = "794821e4ccb0d9f979512f9c1973480123f9bd62a90d74ab0f9426fcf8f4a529" +dependencies = [ + "bytemuck", +] [[package]] name = "same-file" @@ -8279,7 +9330,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "log", "sp-core", @@ -8290,7 +9341,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "async-trait", "futures", @@ -8301,8 +9352,9 @@ dependencies = [ "parity-scale-codec", "prost", "prost-build", - "rand 0.7.3", + "rand 0.8.5", "sc-client-api", + "sc-network", "sc-network-common", "sp-api", "sp-authority-discovery", @@ -8317,7 +9369,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "futures", "futures-timer", @@ -8340,7 +9392,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -8350,52 +9402,53 @@ dependencies = [ "sp-core", "sp-inherents", "sp-runtime", - "sp-state-machine", ] [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ - "impl-trait-for-tuples", "memmap2", - "parity-scale-codec", "sc-chain-spec-derive", - "sc-network-common", + "sc-client-api", + "sc-executor", + "sc-network", "sc-telemetry", "serde", "serde_json", + "sp-blockchain", "sp-core", "sp-runtime", + "sp-state-machine", ] [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "array-bytes", "chrono", - "clap", + "clap 4.2.7", "fdlimit", "futures", "libp2p", "log", "names", "parity-scale-codec", - "rand 0.7.3", + "rand 0.8.5", "regex", "rpassword", "sc-client-api", @@ -8424,11 +9477,10 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "fnv", "futures", - "hash-db", "log", "parity-scale-codec", "parking_lot 0.12.1", @@ -8445,14 +9497,13 @@ dependencies = [ "sp-runtime", "sp-state-machine", "sp-storage", - "sp-trie", "substrate-prometheus-endpoint", ] [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "hash-db", "kvdb", @@ -8465,6 +9516,7 @@ dependencies = [ "parking_lot 0.12.1", "sc-client-api", "sc-state-db", + "schnellru", "sp-arithmetic", "sp-blockchain", "sp-core", @@ -8477,7 +9529,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "async-trait", "futures", @@ -8502,7 +9554,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "async-trait", "fork-tree", @@ -8520,8 +9572,8 @@ dependencies = [ "sc-consensus-slots", "sc-keystore", "sc-telemetry", + "scale-info", "schnorrkel", - "serde", "sp-api", "sp-application-crypto", "sp-block-builder", @@ -8532,10 +9584,8 @@ dependencies = [ "sp-consensus-vrf", "sp-core", "sp-inherents", - "sp-io", "sp-keystore", "sp-runtime", - "sp-version", "substrate-prometheus-endpoint", "thiserror", ] @@ -8543,7 +9593,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "futures", "jsonrpsee", @@ -8562,23 +9612,137 @@ dependencies = [ "thiserror", ] +[[package]] +name = "sc-consensus-beefy" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" +dependencies = [ + "array-bytes", + "async-trait", + "fnv", + "futures", + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "sc-client-api", + "sc-consensus", + "sc-keystore", + "sc-network", + "sc-network-common", + "sc-network-gossip", + "sc-network-sync", + "sc-utils", + "sp-api", + "sp-application-crypto", + "sp-arithmetic", + "sp-blockchain", + "sp-consensus", + "sp-consensus-beefy", + "sp-core", + "sp-keystore", + "sp-mmr-primitives", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror", + "wasm-timer", +] + +[[package]] +name = "sc-consensus-beefy-rpc" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" +dependencies = [ + "futures", + "jsonrpsee", + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "sc-consensus-beefy", + "sc-rpc", + "serde", + "sp-consensus-beefy", + "sp-core", + "sp-runtime", + "thiserror", +] + [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" +dependencies = [ + "fork-tree", + "parity-scale-codec", + "sc-client-api", + "sc-consensus", + "sp-blockchain", + "sp-runtime", +] + +[[package]] +name = "sc-consensus-grandpa" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ + "ahash 0.8.3", + "array-bytes", + "async-trait", + "dyn-clone", + "finality-grandpa", "fork-tree", + "futures", + "futures-timer", + "log", "parity-scale-codec", + "parking_lot 0.12.1", + "rand 0.8.5", + "sc-block-builder", + "sc-chain-spec", "sc-client-api", "sc-consensus", + "sc-network", + "sc-network-common", + "sc-network-gossip", + "sc-telemetry", + "sc-utils", + "serde_json", + "sp-api", + "sp-application-crypto", + "sp-arithmetic", + "sp-blockchain", + "sp-consensus", + "sp-consensus-grandpa", + "sp-core", + "sp-keystore", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror", +] + +[[package]] +name = "sc-consensus-grandpa-rpc" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" +dependencies = [ + "finality-grandpa", + "futures", + "jsonrpsee", + "log", + "parity-scale-codec", + "sc-client-api", + "sc-consensus-grandpa", + "sc-rpc", + "serde", "sp-blockchain", + "sp-core", "sp-runtime", + "thiserror", ] [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "async-trait", "futures", @@ -8596,15 +9760,14 @@ dependencies = [ "sp-inherents", "sp-runtime", "sp-state-machine", - "thiserror", ] [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ - "lru", + "lru 0.8.1", "parity-scale-codec", "parking_lot 0.12.1", "sc-executor-common", @@ -8626,7 +9789,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "sc-allocator", "sp-maybe-compressed-blob", @@ -8639,7 +9802,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "log", "sc-allocator", @@ -8652,13 +9815,14 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ + "anyhow", "cfg-if", "libc", "log", "once_cell", - "rustix", + "rustix 0.36.13", "sc-allocator", "sc-executor-common", "sp-runtime-interface", @@ -8666,80 +9830,18 @@ dependencies = [ "wasmtime", ] -[[package]] -name = "sc-finality-grandpa" -version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" -dependencies = [ - "ahash", - "array-bytes", - "async-trait", - "dyn-clone", - "finality-grandpa", - "fork-tree", - "futures", - "futures-timer", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "rand 0.8.5", - "sc-block-builder", - "sc-chain-spec", - "sc-client-api", - "sc-consensus", - "sc-keystore", - "sc-network", - "sc-network-common", - "sc-network-gossip", - "sc-telemetry", - "sc-utils", - "serde_json", - "sp-api", - "sp-application-crypto", - "sp-arithmetic", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-finality-grandpa", - "sp-keystore", - "sp-runtime", - "substrate-prometheus-endpoint", - "thiserror", -] - -[[package]] -name = "sc-finality-grandpa-rpc" -version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" -dependencies = [ - "finality-grandpa", - "futures", - "jsonrpsee", - "log", - "parity-scale-codec", - "sc-client-api", - "sc-finality-grandpa", - "sc-rpc", - "serde", - "serde_json", - "sp-blockchain", - "sp-core", - "sp-runtime", - "thiserror", -] - [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "ansi_term", "futures", "futures-timer", "log", "sc-client-api", + "sc-network", "sc-network-common", - "sc-transaction-pool-api", "sp-blockchain", "sp-runtime", ] @@ -8747,7 +9849,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "array-bytes", "async-trait", @@ -8762,30 +9864,27 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "array-bytes", + "async-channel", "async-trait", "asynchronous-codec", - "bitflags", "bytes", - "cid", "either", "fnv", - "fork-tree", "futures", "futures-timer", "ip_network", "libp2p", - "linked-hash-map", "linked_hash_set", "log", - "lru", + "lru 0.8.1", + "mockall", "parity-scale-codec", "parking_lot 0.12.1", "pin-project", - "prost", - "rand 0.7.3", + "rand 0.8.5", "sc-block-builder", "sc-client-api", "sc-consensus", @@ -8809,7 +9908,7 @@ dependencies = [ [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "cid", "futures", @@ -8818,51 +9917,54 @@ dependencies = [ "prost", "prost-build", "sc-client-api", + "sc-network", "sc-network-common", "sp-blockchain", "sp-runtime", "thiserror", "unsigned-varint", - "void", ] [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ + "array-bytes", "async-trait", "bitflags", "bytes", "futures", "futures-timer", "libp2p", - "linked_hash_set", "parity-scale-codec", "prost-build", "sc-consensus", "sc-peerset", + "sc-utils", "serde", "smallvec", "sp-blockchain", "sp-consensus", - "sp-finality-grandpa", + "sp-consensus-grandpa", "sp-runtime", "substrate-prometheus-endpoint", "thiserror", + "zeroize", ] [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ - "ahash", + "ahash 0.8.3", "futures", "futures-timer", "libp2p", "log", - "lru", + "lru 0.8.1", + "sc-network", "sc-network-common", "sc-peerset", "sp-runtime", @@ -8873,7 +9975,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "array-bytes", "futures", @@ -8883,6 +9985,7 @@ dependencies = [ "prost", "prost-build", "sc-client-api", + "sc-network", "sc-network-common", "sc-peerset", "sp-blockchain", @@ -8894,21 +9997,23 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "array-bytes", "async-trait", "fork-tree", "futures", + "futures-timer", "libp2p", "log", - "lru", + "lru 0.8.1", "mockall", "parity-scale-codec", "prost", "prost-build", "sc-client-api", "sc-consensus", + "sc-network", "sc-network-common", "sc-peerset", "sc-utils", @@ -8916,8 +10021,8 @@ dependencies = [ "sp-arithmetic", "sp-blockchain", "sp-consensus", + "sp-consensus-grandpa", "sp-core", - "sp-finality-grandpa", "sp-runtime", "substrate-prometheus-endpoint", "thiserror", @@ -8926,17 +10031,18 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "array-bytes", "futures", - "hex", "libp2p", "log", "parity-scale-codec", "pin-project", + "sc-network", "sc-network-common", "sc-peerset", + "sc-utils", "sp-consensus", "sp-runtime", "substrate-prometheus-endpoint", @@ -8945,7 +10051,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "array-bytes", "bytes", @@ -8959,8 +10065,9 @@ dependencies = [ "once_cell", "parity-scale-codec", "parking_lot 0.12.1", - "rand 0.7.3", + "rand 0.8.5", "sc-client-api", + "sc-network", "sc-network-common", "sc-peerset", "sc-utils", @@ -8975,7 +10082,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "futures", "libp2p", @@ -8988,7 +10095,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -8997,10 +10104,9 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "futures", - "hash-db", "jsonrpsee", "log", "parity-scale-codec", @@ -9022,18 +10128,16 @@ dependencies = [ "sp-runtime", "sp-session", "sp-version", + "tokio", ] [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ - "futures", "jsonrpsee", - "log", "parity-scale-codec", - "parking_lot 0.12.1", "sc-chain-spec", "sc-transaction-pool-api", "scale-info", @@ -9042,7 +10146,6 @@ dependencies = [ "sp-core", "sp-rpc", "sp-runtime", - "sp-tracing", "sp-version", "thiserror", ] @@ -9050,9 +10153,8 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ - "futures", "http", "jsonrpsee", "log", @@ -9066,39 +10168,45 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ + "array-bytes", "futures", + "futures-util", "hex", "jsonrpsee", + "log", "parity-scale-codec", + "parking_lot 0.12.1", "sc-chain-spec", + "sc-client-api", "sc-transaction-pool-api", "serde", "sp-api", "sp-blockchain", "sp-core", "sp-runtime", + "sp-version", "thiserror", + "tokio-stream", ] [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "async-trait", "directories", "exit-future", "futures", "futures-timer", - "hash-db", "jsonrpsee", "log", "parity-scale-codec", "parking_lot 0.12.1", "pin-project", - "rand 0.7.3", + "rand 0.8.5", "sc-block-builder", "sc-chain-spec", "sc-client-api", @@ -9117,6 +10225,7 @@ dependencies = [ "sc-rpc", "sc-rpc-server", "sc-rpc-spec-v2", + "sc-storage-monitor", "sc-sysinfo", "sc-telemetry", "sc-tracing", @@ -9126,19 +10235,15 @@ dependencies = [ "serde", "serde_json", "sp-api", - "sp-application-crypto", - "sp-block-builder", "sp-blockchain", "sp-consensus", "sp-core", "sp-externalities", - "sp-inherents", "sp-keystore", "sp-runtime", "sp-session", "sp-state-machine", "sp-storage", - "sp-tracing", "sp-transaction-pool", "sp-transaction-storage-proof", "sp-trie", @@ -9155,19 +10260,34 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "log", "parity-scale-codec", "parking_lot 0.12.1", - "sc-client-api", "sp-core", ] +[[package]] +name = "sc-storage-monitor" +version = "0.1.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" +dependencies = [ + "clap 4.2.7", + "fs4", + "futures", + "log", + "sc-client-db", + "sc-utils", + "sp-core", + "thiserror", + "tokio", +] + [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -9175,7 +10295,7 @@ dependencies = [ "sc-client-api", "sc-consensus-babe", "sc-consensus-epochs", - "sc-finality-grandpa", + "sc-consensus-grandpa", "serde", "serde_json", "sp-blockchain", @@ -9186,13 +10306,13 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "futures", "libc", "log", - "rand 0.7.3", - "rand_pcg 0.2.1", + "rand 0.8.5", + "rand_pcg", "regex", "sc-telemetry", "serde", @@ -9205,7 +10325,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "chrono", "futures", @@ -9213,7 +10333,8 @@ dependencies = [ "log", "parking_lot 0.12.1", "pin-project", - "rand 0.7.3", + "rand 0.8.5", + "sc-utils", "serde", "serde_json", "thiserror", @@ -9223,7 +10344,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "ansi_term", "atty", @@ -9254,24 +10375,25 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "async-trait", "futures", "futures-timer", "linked-hash-map", "log", + "num-traits", "parity-scale-codec", "parking_lot 0.12.1", "sc-client-api", @@ -9291,7 +10413,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "async-trait", "futures", @@ -9305,21 +10427,23 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ + "async-channel", "futures", "futures-timer", "lazy_static", "log", "parking_lot 0.12.1", "prometheus", + "sp-arithmetic", ] [[package]] name = "scale-info" -version = "2.1.2" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c46be926081c9f4dd5dd9b6f1d3e3229f2360bc6502dd8836f84a93b7c75e99a" +checksum = "dfdef77228a4c05dc94211441595746732131ad7f6530c6c18f045da7b7ab937" dependencies = [ "bitvec", "cfg-if", @@ -9331,24 +10455,34 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.1.2" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50e334bb10a245e28e5fd755cabcafd96cfcd167c99ae63a46924ca8d8703a3c" +checksum = "53012eae69e5aa5c14671942a5dd47de59d4cdcff8532a6dd0e081faf1119482" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "schannel" -version = "0.1.19" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" +checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" dependencies = [ - "lazy_static", - "winapi", + "windows-sys 0.42.0", +] + +[[package]] +name = "schnellru" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "772575a524feeb803e5b0fcbc6dd9f367e579488197c94c6e4023aad2305774d" +dependencies = [ + "ahash 0.8.3", + "cfg-if", + "hashbrown 0.13.2", ] [[package]] @@ -9377,9 +10511,19 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "scratch" -version = "1.0.2" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" + +[[package]] +name = "sct" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898" +checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" +dependencies = [ + "ring", + "untrusted", +] [[package]] name = "sct" @@ -9391,6 +10535,18 @@ dependencies = [ "untrusted", ] +[[package]] +name = "sdp" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d22a5ef407871893fd72b4562ee15e4742269b173959db4b8df6f538c414e13" +dependencies = [ + "rand 0.8.5", + "substring", + "thiserror", + "url", +] + [[package]] name = "sec1" version = "0.3.0" @@ -9399,7 +10555,7 @@ checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" dependencies = [ "base16ct", "der", - "generic-array 0.14.4", + "generic-array 0.14.7", "pkcs8", "subtle", "zeroize", @@ -9407,18 +10563,18 @@ dependencies = [ [[package]] name = "secp256k1" -version = "0.24.0" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7649a0b3ffb32636e60c7ce0d70511eda9c52c658cd0634e194d5a19943aeff" +checksum = "6b1629c9c557ef9b293568b338dddfc8208c98a18c59d722a9d53f859d9c9b62" dependencies = [ "secp256k1-sys", ] [[package]] name = "secp256k1-sys" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7058dc8eaf3f2810d7828680320acda0b25a288f6d288e19278e249bbf74226b" +checksum = "83080e2c2fc1006e625be82e5d1eb6a43b7fd9578b617fcc55814daf286bba4b" dependencies = [ "cc", ] @@ -9434,9 +10590,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.4.2" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525bc1abfda2e1998d152c45cf13e696f76d0a4972310b22fac1658b05df7c87" +checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" dependencies = [ "bitflags", "core-foundation", @@ -9447,9 +10603,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.4.2" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9dd14d83160b528b7bfd66439110573efcfbe281b17fc2ca9f39f550d619c7e" +checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" dependencies = [ "core-foundation-sys", "libc", @@ -9466,9 +10622,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.4" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "568a8e6258aa33c13358f81fd834adb854c6f7c9468520910a9b1e8fac068012" +checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" dependencies = [ "serde", ] @@ -9487,53 +10643,44 @@ checksum = "f97841a747eef040fcd2e7b3b9a220a7205926e60488e673d9e4926d27772ce5" [[package]] name = "serde" -version = "1.0.137" +version = "1.0.162" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" +checksum = "71b2f6e1ab5c2b98c05f0f35b236b22e8df7ead6ffbf51d7808da7f8817e7ab6" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.137" +version = "1.0.162" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" +checksum = "a2a0814352fd64b58489904a44ea8d90cb1a91dcb6b4f5ebabc32c8318e93cb6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] name = "serde_fmt" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2963a69a2b3918c1dc75a45a18bd3fcd1120e31d3f59deb1b2f9b5d5ffb8baa4" +checksum = "e1d4ddca14104cd60529e8c7f7ba71a2c8acd8f7f5cfcdc2faf97eeb7c3010a4" dependencies = [ "serde", ] [[package]] name = "serde_json" -version = "1.0.85" +version = "1.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44" +checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" dependencies = [ "itoa", "ryu", "serde", ] -[[package]] -name = "serde_nanos" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e44969a61f5d316be20a42ff97816efb3b407a924d06824c3d8a49fa8450de0e" -dependencies = [ - "serde", -] - [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -9546,18 +10693,6 @@ dependencies = [ "serde", ] -[[package]] -name = "sha-1" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df" -dependencies = [ - "block-buffer 0.7.3", - "digest 0.8.1", - "fake-simd", - "opaque-debug 0.2.3", -] - [[package]] name = "sha-1" version = "0.9.8" @@ -9573,13 +10708,24 @@ dependencies = [ [[package]] name = "sha-1" -version = "0.10.0" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.6", +] + +[[package]] +name = "sha1" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f" +checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.3", + "digest 0.10.6", ] [[package]] @@ -9596,9 +10742,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b69f9a4c9740d74c5baa3fd2e547f9525fa8088a8a958e0ca2409a514e33f5fa" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" dependencies = [ "block-buffer 0.9.0", "cfg-if", @@ -9609,22 +10755,22 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.2" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.3", + "digest 0.10.6", ] [[package]] name = "sha3" -version = "0.10.0" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f935e31cf406e8c0e96c2815a5516181b7004ae8c5f296293221e9b1e356bd" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ - "digest 0.10.3", + "digest 0.10.6", "keccak", ] @@ -9645,9 +10791,9 @@ checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" [[package]] name = "signal-hook" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d" +checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9" dependencies = [ "libc", "signal-hook-registry", @@ -9655,9 +10801,9 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" dependencies = [ "libc", ] @@ -9680,37 +10826,47 @@ version = "1.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" dependencies = [ - "digest 0.10.3", - "rand_core 0.6.3", + "digest 0.10.6", + "rand_core 0.6.4", ] [[package]] name = "simba" -version = "0.5.1" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e82063457853d00243beda9952e910b82593e4b07ae9f721b9278a99a0d3d5c" +checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" dependencies = [ "approx", "num-complex", "num-traits", "paste", + "wide", ] +[[package]] +name = "siphasher" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" + [[package]] name = "slab" -version = "0.4.5" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" +checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +dependencies = [ + "autocfg", +] [[package]] name = "slice-group-by" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" +checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" [[package]] name = "slot-range-helper" -version = "0.9.36" +version = "0.9.40" dependencies = [ "enumn", "parity-scale-codec", @@ -9730,38 +10886,38 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.8.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" [[package]] name = "snap" -version = "1.0.5" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45456094d1983e2ee2a18fdfebce3189fa451699d0502cb8e3b49dba5ba41451" +checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" [[package]] name = "snow" -version = "0.9.0" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "774d05a3edae07ce6d68ea6984f3c05e9bba8927e3dd591e3b479e5b03213d0d" +checksum = "5ccba027ba85743e09d15c03296797cad56395089b832b48b5a5217880f57733" dependencies = [ - "aes-gcm", + "aes-gcm 0.9.4", "blake2", "chacha20poly1305", - "curve25519-dalek 4.0.0-pre.1", - "rand_core 0.6.3", + "curve25519-dalek 4.0.0-rc.1", + "rand_core 0.6.4", "ring", "rustc_version", - "sha2 0.10.2", + "sha2 0.10.6", "subtle", ] [[package]] name = "socket2" -version = "0.4.4" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" dependencies = [ "libc", "winapi", @@ -9773,7 +10929,7 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" dependencies = [ - "base64", + "base64 0.13.1", "bytes", "flate2", "futures", @@ -9787,7 +10943,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "hash-db", "log", @@ -9805,19 +10961,21 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ + "Inflector", "blake2", + "expander 1.0.0", "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "sp-application-crypto" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "parity-scale-codec", "scale-info", @@ -9830,14 +10988,13 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "integer-sqrt", "num-traits", "parity-scale-codec", "scale-info", "serde", - "sp-debug-derive", "sp-std", "static_assertions", ] @@ -9845,41 +11002,12 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" -dependencies = [ - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-application-crypto", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "sp-authorship" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" -dependencies = [ - "async-trait", - "parity-scale-codec", - "sp-inherents", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "sp-beefy" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "parity-scale-codec", "scale-info", - "serde", "sp-api", "sp-application-crypto", - "sp-core", - "sp-io", - "sp-mmr-primitives", "sp-runtime", "sp-std", ] @@ -9887,7 +11015,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "parity-scale-codec", "sp-api", @@ -9899,11 +11027,11 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "futures", "log", - "lru", + "lru 0.8.1", "parity-scale-codec", "parking_lot 0.12.1", "sp-api", @@ -9917,26 +11045,40 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "async-trait", "futures", - "futures-timer", "log", - "parity-scale-codec", "sp-core", "sp-inherents", "sp-runtime", "sp-state-machine", - "sp-std", - "sp-version", "thiserror", ] +[[package]] +name = "sp-consensus-aura" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" +dependencies = [ + "async-trait", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-application-crypto", + "sp-consensus", + "sp-consensus-slots", + "sp-inherents", + "sp-runtime", + "sp-std", + "sp-timestamp", +] + [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "async-trait", "merlin", @@ -9956,16 +11098,51 @@ dependencies = [ "sp-timestamp", ] +[[package]] +name = "sp-consensus-beefy" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" +dependencies = [ + "lazy_static", + "parity-scale-codec", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-io", + "sp-mmr-primitives", + "sp-runtime", + "sp-std", + "strum", +] + +[[package]] +name = "sp-consensus-grandpa" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" +dependencies = [ + "finality-grandpa", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-keystore", + "sp-runtime", + "sp-std", +] + [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-arithmetic", - "sp-runtime", "sp-std", "sp-timestamp", ] @@ -9973,7 +11150,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "parity-scale-codec", "scale-info", @@ -9986,13 +11163,13 @@ dependencies = [ [[package]] name = "sp-core" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "array-bytes", "base58", "bitflags", "blake2", - "byteorder", + "bounded-collections", "dyn-clonable", "ed25519-zebra", "futures", @@ -10003,11 +11180,10 @@ dependencies = [ "libsecp256k1", "log", "merlin", - "num-traits", "parity-scale-codec", "parking_lot 0.12.1", "primitive-types", - "rand 0.7.3", + "rand 0.8.5", "regex", "scale-info", "schnorrkel", @@ -10024,19 +11200,18 @@ dependencies = [ "substrate-bip39", "thiserror", "tiny-bip39", - "wasmi", "zeroize", ] [[package]] name = "sp-core-hashing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ - "blake2", + "blake2b_simd", "byteorder", - "digest 0.10.3", - "sha2 0.10.2", + "digest 0.10.6", + "sha2 0.10.6", "sha3", "sp-std", "twox-hash", @@ -10045,18 +11220,18 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "proc-macro2", "quote", "sp-core-hashing", - "syn", + "syn 1.0.109", ] [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -10065,17 +11240,17 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "sp-externalities" version = "0.13.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "environmental", "parity-scale-codec", @@ -10083,32 +11258,15 @@ dependencies = [ "sp-storage", ] -[[package]] -name = "sp-finality-grandpa" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" -dependencies = [ - "finality-grandpa", - "log", - "parity-scale-codec", - "scale-info", - "serde", - "sp-api", - "sp-application-crypto", - "sp-core", - "sp-keystore", - "sp-runtime", - "sp-std", -] - [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "async-trait", "impl-trait-for-tuples", "parity-scale-codec", + "scale-info", "sp-core", "sp-runtime", "sp-std", @@ -10118,16 +11276,15 @@ dependencies = [ [[package]] name = "sp-io" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "bytes", + "ed25519", "ed25519-dalek", "futures", - "hash-db", "libsecp256k1", "log", "parity-scale-codec", - "parking_lot 0.12.1", "secp256k1", "sp-core", "sp-externalities", @@ -10137,7 +11294,6 @@ dependencies = [ "sp-std", "sp-tracing", "sp-trie", - "sp-wasm-interface", "tracing", "tracing-core", ] @@ -10145,7 +11301,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "lazy_static", "sp-core", @@ -10156,7 +11312,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.13.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "async-trait", "futures", @@ -10173,7 +11329,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "thiserror", "zstd", @@ -10182,7 +11338,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "ckb-merkle-mountain-range", "log", @@ -10200,7 +11356,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "parity-scale-codec", "scale-info", @@ -10214,7 +11370,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "sp-api", "sp-core", @@ -10224,7 +11380,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "backtrace", "lazy_static", @@ -10234,7 +11390,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "rustc-hash", "serde", @@ -10244,7 +11400,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "either", "hash256-std-hasher", @@ -10252,7 +11408,7 @@ dependencies = [ "log", "parity-scale-codec", "paste", - "rand 0.7.3", + "rand 0.8.5", "scale-info", "serde", "sp-application-crypto", @@ -10266,7 +11422,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -10284,19 +11440,19 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "Inflector", "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "parity-scale-codec", "scale-info", @@ -10310,7 +11466,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "parity-scale-codec", "scale-info", @@ -10322,14 +11478,13 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.13.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "hash-db", "log", - "num-traits", "parity-scale-codec", "parking_lot 0.12.1", - "rand 0.7.3", + "rand 0.8.5", "smallvec", "sp-core", "sp-externalities", @@ -10338,18 +11493,17 @@ dependencies = [ "sp-trie", "thiserror", "tracing", - "trie-root", ] [[package]] name = "sp-std" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" [[package]] name = "sp-storage" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "impl-serde", "parity-scale-codec", @@ -10362,13 +11516,12 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "async-trait", "futures-timer", "log", "parity-scale-codec", - "sp-api", "sp-inherents", "sp-runtime", "sp-std", @@ -10378,7 +11531,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "parity-scale-codec", "sp-std", @@ -10390,7 +11543,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "sp-api", "sp-runtime", @@ -10399,7 +11552,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "async-trait", "log", @@ -10415,18 +11568,18 @@ dependencies = [ [[package]] name = "sp-trie" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ - "ahash", + "ahash 0.8.3", "hash-db", - "hashbrown", + "hashbrown 0.12.3", "lazy_static", - "lru", "memory-db", "nohash-hasher", "parity-scale-codec", "parking_lot 0.12.1", "scale-info", + "schnellru", "sp-core", "sp-std", "thiserror", @@ -10438,7 +11591,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "impl-serde", "parity-scale-codec", @@ -10455,19 +11608,20 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "parity-scale-codec", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "sp-wasm-interface" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ + "anyhow", "impl-trait-for-tuples", "log", "parity-scale-codec", @@ -10479,9 +11633,8 @@ dependencies = [ [[package]] name = "sp-weights" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ - "impl-trait-for-tuples", "parity-scale-codec", "scale-info", "serde", @@ -10510,9 +11663,9 @@ dependencies = [ [[package]] name = "ss58-registry" -version = "1.36.0" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d92659e7d18d82b803824a9ba5a6022cff101c3491d027c1c1d8d30e749284" +checksum = "eb47a8ad42e5fc72d5b1eb104a5546937eaf39843499948bb666d6e93c62423b" dependencies = [ "Inflector", "num-format", @@ -10531,10 +11684,10 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "staking-miner" -version = "0.9.36" +version = "0.9.40" dependencies = [ "assert_cmd", - "clap", + "clap 4.2.7", "exitcode", "frame-election-provider-support", "frame-remote-externalities", @@ -10566,7 +11719,7 @@ dependencies = [ "sub-tokens", "thiserror", "tokio", - "tracing-subscriber 0.3.11", + "tracing-subscriber 0.3.17", "westend-runtime", ] @@ -10598,7 +11751,7 @@ dependencies = [ "cfg_aliases", "libc", "parking_lot 0.11.2", - "parking_lot_core 0.8.5", + "parking_lot_core 0.8.6", "static_init_macro 1.0.2", "winapi", ] @@ -10613,7 +11766,7 @@ dependencies = [ "memchr", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -10626,20 +11779,7 @@ dependencies = [ "memchr", "proc-macro2", "quote", - "syn", -] - -[[package]] -name = "statrs" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05bdbb8e4e78216a85785a85d3ec3183144f98d0097b9281802c019bb07a6f05" -dependencies = [ - "approx", - "lazy_static", - "nalgebra", - "num-traits", - "rand 0.8.5", + "syn 1.0.109", ] [[package]] @@ -10659,15 +11799,34 @@ dependencies = [ [[package]] name = "strum_macros" -version = "0.24.0" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6878079b17446e4d3eba6192bb0a2950d5b14f0ed8424b852310e5a94345d0ef" +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" dependencies = [ "heck", "proc-macro2", "quote", "rustversion", - "syn", + "syn 1.0.109", +] + +[[package]] +name = "stun" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7e94b1ec00bad60e6410e058b52f1c66de3dc5fe4d62d09b3e52bb7d3b73e25" +dependencies = [ + "base64 0.13.1", + "crc", + "lazy_static", + "md-5", + "rand 0.8.5", + "ring", + "subtle", + "thiserror", + "tokio", + "url", + "webrtc-util", ] [[package]] @@ -10687,32 +11846,30 @@ dependencies = [ "hmac 0.11.0", "pbkdf2 0.8.0", "schnorrkel", - "sha2 0.9.8", + "sha2 0.9.9", "zeroize", ] [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ - "platforms", + "platforms 2.0.0", ] [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "frame-system-rpc-runtime-api", "futures", "jsonrpsee", "log", "parity-scale-codec", - "sc-client-api", "sc-rpc-api", "sc-transaction-pool-api", - "serde_json", "sp-api", "sp-block-builder", "sp-blockchain", @@ -10723,9 +11880,8 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ - "futures-util", "hyper", "log", "prometheus", @@ -10736,7 +11892,7 @@ dependencies = [ [[package]] name = "substrate-rpc-client" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "async-trait", "jsonrpsee", @@ -10749,7 +11905,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "jsonrpsee", "log", @@ -10759,10 +11915,8 @@ dependencies = [ "scale-info", "serde", "sp-core", - "sp-io", "sp-runtime", "sp-state-machine", - "sp-std", "sp-trie", "trie-db", ] @@ -10770,7 +11924,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "array-bytes", "async-trait", @@ -10796,7 +11950,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "futures", "substrate-test-utils-derive", @@ -10806,18 +11960,18 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ "ansi_term", "build-helper", @@ -10831,6 +11985,15 @@ dependencies = [ "wasm-opt", ] +[[package]] +name = "substring" +version = "1.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ee6433ecef213b2e72f587ef64a2f5943e7cd16fbd82dbe8bc07486c534c86" +dependencies = [ + "autocfg", +] + [[package]] name = "subtle" version = "2.4.1" @@ -10848,21 +12011,21 @@ dependencies = [ [[package]] name = "symbolic-common" -version = "8.6.0" +version = "8.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e92a52f07eed9afba3d6f883652cde7cd75fcf327dd44e84f210958379158737" +checksum = "f551f902d5642e58039aee6a9021a61037926af96e071816361644983966f540" dependencies = [ "debugid", "memmap2", "stable_deref_trait", - "uuid", + "uuid 0.8.2", ] [[package]] name = "symbolic-demangle" -version = "8.6.0" +version = "8.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9abc81544d9964975269165bfe5ad198d8b9e2e809c46527323f95588a57693" +checksum = "4564ca7b4e6eb14105aa8bbbce26e080f6b5d9c4373e67167ab31f7b86443750" dependencies = [ "cpp_demangle", "rustc-demangle", @@ -10871,9 +12034,20 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.98" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" +checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" dependencies = [ "proc-macro2", "quote", @@ -10888,7 +12062,7 @@ checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "unicode-xid", ] @@ -10921,42 +12095,41 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "target-lexicon" -version = "0.12.2" +version = "0.12.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9bffcddbc2458fa3e6058414599e3c838a022abae82e5c67b4f7f80298d5bff" +checksum = "fd1ba337640d60c3e96bc6f0638a939b9c9a7f2c316a1598c279828b3d1dc8c5" [[package]] name = "tempfile" -version = "3.3.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" dependencies = [ "cfg-if", "fastrand", - "libc", - "redox_syscall", - "remove_dir_all", - "winapi", + "redox_syscall 0.3.5", + "rustix 0.37.19", + "windows-sys 0.45.0", ] [[package]] name = "termcolor" -version = "1.1.2" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" dependencies = [ "winapi-util", ] [[package]] name = "termtree" -version = "0.2.3" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" +checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "test-parachain-adder" -version = "0.9.36" +version = "0.9.40" dependencies = [ "dlmalloc", "parity-scale-codec", @@ -10969,9 +12142,9 @@ dependencies = [ [[package]] name = "test-parachain-adder-collator" -version = "0.9.36" +version = "0.9.40" dependencies = [ - "clap", + "clap 4.2.7", "futures", "futures-timer", "log", @@ -10995,14 +12168,14 @@ dependencies = [ [[package]] name = "test-parachain-halt" -version = "0.9.36" +version = "0.9.40" dependencies = [ "substrate-wasm-builder", ] [[package]] name = "test-parachain-undying" -version = "0.9.36" +version = "0.9.40" dependencies = [ "dlmalloc", "log", @@ -11016,9 +12189,9 @@ dependencies = [ [[package]] name = "test-parachain-undying-collator" -version = "0.9.36" +version = "0.9.40" dependencies = [ - "clap", + "clap 4.2.7", "futures", "futures-timer", "log", @@ -11042,7 +12215,7 @@ dependencies = [ [[package]] name = "test-parachains" -version = "0.9.36" +version = "0.9.40" dependencies = [ "parity-scale-codec", "sp-core", @@ -11053,7 +12226,7 @@ dependencies = [ [[package]] name = "test-runtime-constants" -version = "0.9.36" +version = "0.9.40" dependencies = [ "frame-support", "polkadot-primitives", @@ -11064,24 +12237,30 @@ dependencies = [ "sp-weights", ] +[[package]] +name = "textwrap" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" + [[package]] name = "thiserror" -version = "1.0.37" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.37" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] @@ -11092,10 +12271,11 @@ checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820" [[package]] name = "thread_local" -version = "1.1.4" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" dependencies = [ + "cfg-if", "once_cell", ] @@ -11134,12 +12314,11 @@ dependencies = [ [[package]] name = "tikv-jemalloc-sys" -version = "0.5.2+5.3.0-patched" +version = "0.5.3+5.3.0-patched" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec45c14da997d0925c7835883e4d5c181f196fa142f8c19d7643d1e9af2592c3" +checksum = "a678df20055b43e57ef8cddde41cdfda9a3c1a060b67f4c5836dfb1d78543ba8" dependencies = [ "cc", - "fs_extra", "libc", ] @@ -11154,29 +12333,56 @@ dependencies = [ ] [[package]] -name = "time" -version = "0.1.44" +name = "time" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" +dependencies = [ + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", + "winapi", +] + +[[package]] +name = "time" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3403384eaacbca9923fa06940178ac13e4edb725486d70e8e15881d0c836cc" +dependencies = [ + "itoa", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" + +[[package]] +name = "time-macros" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b" dependencies = [ - "libc", - "wasi 0.10.0+wasi-snapshot-preview1", - "winapi", + "time-core", ] [[package]] name = "tiny-bip39" -version = "0.8.2" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc59cb9dfc85bb312c3a78fd6aa8a8582e310b0fa885d5bb877f6dcc601839d" +checksum = "62cc94d358b5a1e84a5cb9109f559aa3c4d634d2b1b4de3d0fa4adc7c78e2861" dependencies = [ "anyhow", - "hmac 0.8.1", + "hmac 0.12.1", "once_cell", - "pbkdf2 0.4.0", - "rand 0.7.3", + "pbkdf2 0.11.0", + "rand 0.8.5", "rustc-hash", - "sha2 0.9.8", + "sha2 0.10.6", "thiserror", "unicode-normalization", "wasm-bindgen", @@ -11192,57 +12398,66 @@ dependencies = [ "crunchy", ] +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", +] + [[package]] name = "tinyvec" -version = "1.5.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" dependencies = [ "tinyvec_macros", ] [[package]] name = "tinyvec_macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.22.0" +version = "1.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76ce4a75fb488c605c54bf610f221cea8b0dafb53333c1a67e8ee199dcd2ae3" +checksum = "c3c786bf8134e5a3a166db9b29ab8f48134739014a3eca7bc6bfa95d673b136f" dependencies = [ "autocfg", "bytes", "libc", - "memchr", "mio", "num_cpus", "parking_lot 0.12.1", - "pin-project-lite 0.2.7", + "pin-project-lite 0.2.9", "signal-hook-registry", "socket2", "tokio-macros", - "winapi", + "windows-sys 0.48.0", ] [[package]] name = "tokio-macros" -version = "1.7.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" +checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] name = "tokio-native-tls" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" dependencies = [ "native-tls", "tokio", @@ -11250,31 +12465,32 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.23.2" +version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27d5f2b839802bd8267fa19b0530f5a08b9c08cd417976be2a65d130fe1c11b" +checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" dependencies = [ - "rustls", + "rustls 0.20.8", "tokio", - "webpki", + "webpki 0.22.0", ] [[package]] name = "tokio-stream" -version = "0.1.9" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df54d54117d6fdc4e4fea40fe1e4e566b3505700e148a6827e59b34b0d2600d9" +checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" dependencies = [ "futures-core", - "pin-project-lite 0.2.7", + "pin-project-lite 0.2.9", "tokio", + "tokio-util", ] [[package]] name = "tokio-tungstenite" -version = "0.17.1" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06cda1232a49558c46f8a504d5b93101d42c0bf7f911f12a105ba48168f821ae" +checksum = "f714dd15bead90401d77e04243611caec13726c2408afd5b31901dfcdcb3b181" dependencies = [ "futures-util", "log", @@ -11284,37 +12500,24 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "log", - "pin-project-lite 0.2.7", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.1" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0edfdeb067411dba2044da6d1cb2df793dd35add7888d73c16e3381ded401764" +checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" dependencies = [ "bytes", "futures-core", "futures-io", "futures-sink", - "pin-project-lite 0.2.7", + "pin-project-lite 0.2.9", "tokio", + "tracing", ] [[package]] name = "toml" -version = "0.5.8" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" dependencies = [ "serde", ] @@ -11343,7 +12546,7 @@ dependencies = [ "http", "http-body", "http-range-header", - "pin-project-lite 0.2.7", + "pin-project-lite 0.2.9", "tower-layer", "tower-service", ] @@ -11356,39 +12559,39 @@ checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" [[package]] name = "tower-service" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.35" +version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a400e31aa60b9d44a52a8ee0343b5b18566b03a8321e0d321f695cf56e940160" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ "cfg-if", "log", - "pin-project-lite 0.2.7", + "pin-project-lite 0.2.9", "tracing-attributes", "tracing-core", ] [[package]] name = "tracing-attributes" -version = "0.1.20" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e65ce065b4b5c53e73bb28912318cb8c9e9ad3921f1d669eb0e68b4c8143a2b" +checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] name = "tracing-core" -version = "0.1.28" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b7358be39f2f274f322d2aaed611acc57f382e8eb1e5b48cb9ae30933495ce7" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" dependencies = [ "once_cell", "valuable", @@ -11406,7 +12609,7 @@ dependencies = [ [[package]] name = "tracing-gum" -version = "0.9.36" +version = "0.9.40" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -11416,14 +12619,14 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" -version = "0.9.36" +version = "0.9.40" dependencies = [ "assert_matches", "expander 0.0.6", "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -11439,9 +12642,9 @@ dependencies = [ [[package]] name = "tracing-serde" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb65ea441fbb84f9f6748fd496cf7f63ec9af5bca94dd86456978d055e8eb28b" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" dependencies = [ "serde", "tracing-core", @@ -11472,13 +12675,13 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.11" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bc28f93baff38037f64e6f43d34cfa1605f27a49c34e8a04c5e78b0babf2596" +checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" dependencies = [ - "ansi_term", - "lazy_static", "matchers 0.1.0", + "nu-ansi-term", + "once_cell", "regex", "sharded-slab", "smallvec", @@ -11490,12 +12693,12 @@ dependencies = [ [[package]] name = "trie-db" -version = "0.24.0" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "004e1e8f92535694b4cb1444dc5a8073ecf0815e3357f729638b9f8fc4062908" +checksum = "767abe6ffed88a1889671a102c2861ae742726f52e0a5a425b92c9fbfa7e9c85" dependencies = [ "hash-db", - "hashbrown", + "hashbrown 0.13.2", "log", "rustc-hex", "smallvec", @@ -11503,9 +12706,9 @@ dependencies = [ [[package]] name = "trie-root" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a36c5ca3911ed3c9a5416ee6c679042064b93fc637ded67e25f92e68d783891" +checksum = "d4ed310ef5ab98f5fa467900ed906cb9232dd5376597e00fd4cba2a449d06c0b" dependencies = [ "hash-db", ] @@ -11523,11 +12726,12 @@ dependencies = [ "futures-channel", "futures-io", "futures-util", - "idna", + "idna 0.2.3", "ipnet", "lazy_static", "rand 0.8.5", "smallvec", + "socket2", "thiserror", "tinyvec", "tokio", @@ -11557,35 +12761,41 @@ dependencies = [ [[package]] name = "try-lock" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.36#cb4f2491b00af7d7817f3a54209c26b20faa1f51" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.40#98f2e3451c9143278ec53c6718940aeabcd3b68a" dependencies = [ - "clap", + "async-trait", + "clap 4.2.7", "frame-remote-externalities", "frame-try-runtime", "hex", "log", "parity-scale-codec", - "sc-chain-spec", "sc-cli", "sc-executor", "sc-service", "serde", + "serde_json", "sp-api", + "sp-consensus-aura", + "sp-consensus-babe", "sp-core", "sp-debug-derive", "sp-externalities", + "sp-inherents", "sp-io", "sp-keystore", "sp-rpc", "sp-runtime", "sp-state-machine", + "sp-timestamp", + "sp-transaction-storage-proof", "sp-version", "sp-weights", "substrate-rpc-client", @@ -11594,10 +12804,11 @@ dependencies = [ [[package]] name = "trybuild" -version = "1.0.61" +version = "1.0.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fc92f558afb6d1d7c6f175eb8d615b8ef49c227543e68e19c123d4ee43d8a7d" +checksum = "501dbdbb99861e4ab6b60eb6a7493956a9defb644fd034bc4a5ef27c693c8a3a" dependencies = [ + "basic-toml", "dissimilar", "glob", "once_cell", @@ -11605,34 +12816,52 @@ dependencies = [ "serde_derive", "serde_json", "termcolor", - "toml", ] [[package]] name = "tt-call" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e66dcbec4290c69dd03c57e76c2469ea5c7ce109c6dd4351c13055cf71ea055" +checksum = "f4f195fd851901624eee5a58c4bb2b4f06399148fcd0ed336e6f1cb60a9881df" [[package]] name = "tungstenite" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d96a2dea40e7570482f28eb57afbe42d97551905da6a9400acc5c328d24004f5" +checksum = "e27992fd6a8c29ee7eef28fc78349aa244134e10ad447ce3b9f0ac0ed0fa4ce0" dependencies = [ - "base64", + "base64 0.13.1", "byteorder", "bytes", "http", "httparse", "log", "rand 0.8.5", - "sha-1 0.10.0", + "sha-1 0.10.1", "thiserror", "url", "utf-8", ] +[[package]] +name = "turn" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4712ee30d123ec7ae26d1e1b218395a16c87cdbaf4b3925d170d684af62ea5e8" +dependencies = [ + "async-trait", + "base64 0.13.1", + "futures", + "log", + "md-5", + "rand 0.8.5", + "ring", + "stun", + "thiserror", + "tokio", + "webrtc-util", +] + [[package]] name = "twox-hash" version = "1.6.3" @@ -11640,28 +12869,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ "cfg-if", - "digest 0.10.3", + "digest 0.10.6", "rand 0.8.5", "static_assertions", ] [[package]] name = "typenum" -version = "1.14.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b63708a265f51345575b27fe43f9500ad611579e764c79edbc2037b1121959ec" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" [[package]] name = "ucd-trie" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" +checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" [[package]] name = "uint" -version = "0.9.1" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6470ab50f482bde894a037a57064480a246dbfdd5960bd65a44824693f08da5f" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" dependencies = [ "byteorder", "crunchy", @@ -11671,36 +12900,36 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.7" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.0" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" [[package]] name = "unicode-normalization" -version = "0.1.19" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" dependencies = [ "tinyvec", ] [[package]] name = "unicode-width" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" [[package]] name = "unicode-xid" -version = "0.2.2" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" [[package]] name = "universal-hash" @@ -11708,7 +12937,17 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.7", + "subtle", +] + +[[package]] +name = "universal-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d3160b73c9a19f7e2939a2fdad446c57c1bbbbf4d919d3213ff1267a580d8b5" +dependencies = [ + "crypto-common", "subtle", ] @@ -11732,13 +12971,12 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "2.2.2" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" dependencies = [ "form_urlencoded", - "idna", - "matches", + "idna 0.3.0", "percent-encoding", ] @@ -11748,12 +12986,27 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + [[package]] name = "uuid" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +[[package]] +name = "uuid" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dad5567ad0cf5b760e5665964bec1b47dfd077ba8a2544b513f3556d3d239a2" +dependencies = [ + "getrandom 0.2.9", +] + [[package]] name = "valuable" version = "0.1.0" @@ -11782,9 +13035,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "void" @@ -11801,6 +13054,15 @@ dependencies = [ "libc", ] +[[package]] +name = "waitgroup" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1f50000a783467e6c0200f9d10642f4bc424e39efc1b770203e88b488f79292" +dependencies = [ + "atomic-waker", +] + [[package]] name = "waker-fn" version = "1.1.0" @@ -11809,12 +13071,11 @@ checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" [[package]] name = "walkdir" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" dependencies = [ "same-file", - "winapi", "winapi-util", ] @@ -11848,9 +13109,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.78" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "632f73e236b219150ea279196e54e610f5dbafa5d61786303d4da54f84e47fce" +checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" dependencies = [ "cfg-if", "serde", @@ -11860,24 +13121,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.78" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a317bf8f9fba2476b4b2c85ef4c4af8ff39c3c7f0cdfeed4f82c34a880aa837b" +checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" dependencies = [ "bumpalo", - "lazy_static", "log", + "once_cell", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.28" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e8d7523cb1f2a4c96c1317ca690031b714a51cc14e05f712446691f413f5d39" +checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" dependencies = [ "cfg-if", "js-sys", @@ -11887,9 +13148,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.78" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56146e7c495528bf6587663bea13a8eb588d39b36b679d83972e1a2dbbdacf9" +checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -11897,22 +13158,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.78" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7803e0eea25835f8abdc585cd3021b3deb11543c6fe226dcd30b228857c5c5ab" +checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.78" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0237232789cf037d5480773fe568aac745bfe2afbc11a863e97901780a6b47cc" +checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" [[package]] name = "wasm-instrument" @@ -11925,9 +13186,9 @@ dependencies = [ [[package]] name = "wasm-opt" -version = "0.110.2" +version = "0.111.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b68e8037b4daf711393f4be2056246d12d975651b14d581520ad5d1f19219cec" +checksum = "84a303793cbc01fb96551badfc7367db6007396bba6bac97936b3c8b6f7fdb41" dependencies = [ "anyhow", "libc", @@ -11941,9 +13202,9 @@ dependencies = [ [[package]] name = "wasm-opt-cxx-sys" -version = "0.110.2" +version = "0.111.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91adbad477e97bba3fbd21dd7bfb594e7ad5ceb9169ab1c93ab9cb0ada636b6f" +checksum = "d9c9deb56f8a9f2ec177b3bd642a8205621835944ed5da55f2388ef216aca5a4" dependencies = [ "anyhow", "cxx", @@ -11953,9 +13214,9 @@ dependencies = [ [[package]] name = "wasm-opt-sys" -version = "0.110.2" +version = "0.111.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec4fa5a322a4e6ac22fd141f498d56afbdbf9df5debeac32380d2dcaa3e06941" +checksum = "4432e28b542738a9776cedf92e8a99d8991c7b4667ee2c7ccddfb479dd2856a7" dependencies = [ "anyhow", "cc", @@ -11981,9 +13242,9 @@ dependencies = [ [[package]] name = "wasmi" -version = "0.13.0" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc13b3c219ca9aafeec59150d80d89851df02e0061bc357b4d66fc55a8d38787" +checksum = "06c326c93fbf86419608361a2c925a31754cf109da1b8b55737070b4d6669422" dependencies = [ "parity-wasm", "wasmi-validation", @@ -12001,31 +13262,33 @@ dependencies = [ [[package]] name = "wasmi_core" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a088e8c4c59c6f2b9eae169bf86328adccc477c00b56d3661e3e9fb397b184" +checksum = "57d20cb3c59b788653d99541c646c561c9dd26506f25c0cebfe810659c54c6d7" dependencies = [ "downcast-rs", - "libm", + "libm 0.2.6", "memory_units", "num-rational", "num-traits", + "region", ] [[package]] name = "wasmparser" -version = "0.89.1" +version = "0.100.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5d3e08b13876f96dd55608d03cd4883a0545884932d5adf11925876c96daef" +checksum = "64b20236ab624147dfbb62cf12a19aaf66af0e41b8398838b66e997d07d269d4" dependencies = [ "indexmap", + "url", ] [[package]] name = "wasmtime" -version = "1.0.0" +version = "6.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a10dc9784d8c3a33c970e3939180424955f08af2e7f20368ec02685a0e8f065" +checksum = "76a222f5fa1e14b2cefc286f1b68494d7a965f4bf57ec04c59bb62673d639af6" dependencies = [ "anyhow", "bincode", @@ -12046,43 +13309,43 @@ dependencies = [ "wasmtime-environ", "wasmtime-jit", "wasmtime-runtime", - "windows-sys 0.36.1", + "windows-sys 0.42.0", ] [[package]] name = "wasmtime-asm-macros" -version = "1.0.0" +version = "6.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee4dbdc6daf68528cad1275ac91e3f51848ce9824385facc94c759f529decdf8" +checksum = "4407a7246e7d2f3d8fb1cf0c72fda8dbafdb6dd34d555ae8bea0e5ae031089cc" dependencies = [ "cfg-if", ] [[package]] name = "wasmtime-cache" -version = "1.0.0" +version = "6.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f507f3fa1ee1b2f9a83644e2514242b1dfe580782c0eb042f1ef70255bc4ffe" +checksum = "5ceb3adf61d654be0be67fffdce42447b0880481348785be5fe40b5dd7663a4c" dependencies = [ "anyhow", - "base64", + "base64 0.13.1", "bincode", "directories-next", "file-per-thread-logger", "log", - "rustix", + "rustix 0.36.13", "serde", - "sha2 0.9.8", + "sha2 0.10.6", "toml", - "windows-sys 0.36.1", + "windows-sys 0.42.0", "zstd", ] [[package]] name = "wasmtime-cranelift" -version = "1.0.0" +version = "6.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f03cf79d982fc68e94ba0bea6a300a3b94621c4eb9705eece0a4f06b235a3b5" +checksum = "3c366bb8647e01fd08cb5589976284b00abfded5529b33d7e7f3f086c68304a4" dependencies = [ "anyhow", "cranelift-codegen", @@ -12090,7 +13353,7 @@ dependencies = [ "cranelift-frontend", "cranelift-native", "cranelift-wasm", - "gimli", + "gimli 0.26.2", "log", "object 0.29.0", "target-lexicon", @@ -12100,138 +13363,357 @@ dependencies = [ ] [[package]] -name = "wasmtime-environ" -version = "1.0.0" +name = "wasmtime-environ" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b8b50962eae38ee319f7b24900b7cf371f03eebdc17400c1dc8575fc10c9a7" +dependencies = [ + "anyhow", + "cranelift-entity", + "gimli 0.26.2", + "indexmap", + "log", + "object 0.29.0", + "serde", + "target-lexicon", + "thiserror", + "wasmparser", + "wasmtime-types", +] + +[[package]] +name = "wasmtime-jit" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffaed4f9a234ba5225d8e64eac7b4a5d13b994aeb37353cde2cbeb3febda9eaa" +dependencies = [ + "addr2line 0.17.0", + "anyhow", + "bincode", + "cfg-if", + "cpp_demangle", + "gimli 0.26.2", + "log", + "object 0.29.0", + "rustc-demangle", + "serde", + "target-lexicon", + "wasmtime-environ", + "wasmtime-jit-debug", + "wasmtime-jit-icache-coherence", + "wasmtime-runtime", + "windows-sys 0.42.0", +] + +[[package]] +name = "wasmtime-jit-debug" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eed41cbcbf74ce3ff6f1d07d1b707888166dc408d1a880f651268f4f7c9194b2" +dependencies = [ + "object 0.29.0", + "once_cell", + "rustix 0.36.13", +] + +[[package]] +name = "wasmtime-jit-icache-coherence" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a28ae1e648461bfdbb79db3efdaee1bca5b940872e4175390f465593a2e54c" +dependencies = [ + "cfg-if", + "libc", + "windows-sys 0.42.0", +] + +[[package]] +name = "wasmtime-runtime" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e704b126e4252788ccfc3526d4d4511d4b23c521bf123e447ac726c14545217b" +dependencies = [ + "anyhow", + "cc", + "cfg-if", + "indexmap", + "libc", + "log", + "mach", + "memfd", + "memoffset 0.6.5", + "paste", + "rand 0.8.5", + "rustix 0.36.13", + "wasmtime-asm-macros", + "wasmtime-environ", + "wasmtime-jit-debug", + "windows-sys 0.42.0", +] + +[[package]] +name = "wasmtime-types" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83e5572c5727c1ee7e8f28717aaa8400e4d22dcbd714ea5457d85b5005206568" +dependencies = [ + "cranelift-entity", + "serde", + "thiserror", + "wasmparser", +] + +[[package]] +name = "web-sys" +version = "0.3.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki" +version = "0.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "webpki" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "webpki-roots" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" +dependencies = [ + "webpki 0.22.0", +] + +[[package]] +name = "webrtc" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c587c62e91c5499df62012b87b88890d0eb470b2ffecc5964e9da967b70c77c" +checksum = "2d3bc9049bdb2cea52f5fd4f6f728184225bdb867ed0dc2410eab6df5bdd67bb" dependencies = [ - "anyhow", - "cranelift-entity", - "gimli", - "indexmap", + "arc-swap", + "async-trait", + "bytes", + "hex", + "interceptor", + "lazy_static", "log", - "object 0.29.0", + "rand 0.8.5", + "rcgen 0.9.3", + "regex", + "ring", + "rtcp", + "rtp", + "rustls 0.19.1", + "sdp", "serde", - "target-lexicon", + "serde_json", + "sha2 0.10.6", + "stun", "thiserror", - "wasmparser", - "wasmtime-types", + "time 0.3.21", + "tokio", + "turn", + "url", + "waitgroup", + "webrtc-data", + "webrtc-dtls", + "webrtc-ice", + "webrtc-mdns", + "webrtc-media", + "webrtc-sctp", + "webrtc-srtp", + "webrtc-util", ] [[package]] -name = "wasmtime-jit" -version = "1.0.0" +name = "webrtc-data" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "047839b5dabeae5424a078c19b8cc897e5943a7fadc69e3d888b9c9a897666b3" +checksum = "0ef36a4d12baa6e842582fe9ec16a57184ba35e1a09308307b67d43ec8883100" dependencies = [ - "addr2line", - "anyhow", - "bincode", - "cfg-if", - "cpp_demangle", - "gimli", + "bytes", + "derive_builder", "log", - "object 0.29.0", - "rustc-demangle", - "rustix", - "serde", - "target-lexicon", "thiserror", - "wasmtime-environ", - "wasmtime-jit-debug", - "wasmtime-runtime", - "windows-sys 0.36.1", + "tokio", + "webrtc-sctp", + "webrtc-util", ] [[package]] -name = "wasmtime-jit-debug" -version = "1.0.0" +name = "webrtc-dtls" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b299569abf6f99b7b8e020afaf84a700e8636c6a42e242069267322cd5818235" +checksum = "942be5bd85f072c3128396f6e5a9bfb93ca8c1939ded735d177b7bcba9a13d05" dependencies = [ - "object 0.29.0", - "once_cell", - "rustix", + "aes 0.6.0", + "aes-gcm 0.10.1", + "async-trait", + "bincode", + "block-modes", + "byteorder", + "ccm", + "curve25519-dalek 3.2.0", + "der-parser 8.2.0", + "elliptic-curve", + "hkdf", + "hmac 0.12.1", + "log", + "oid-registry 0.6.1", + "p256", + "p384", + "rand 0.8.5", + "rand_core 0.6.4", + "rcgen 0.9.3", + "ring", + "rustls 0.19.1", + "sec1", + "serde", + "sha1", + "sha2 0.10.6", + "signature", + "subtle", + "thiserror", + "tokio", + "webpki 0.21.4", + "webrtc-util", + "x25519-dalek 2.0.0-pre.1", + "x509-parser 0.13.2", ] [[package]] -name = "wasmtime-runtime" -version = "1.0.0" +name = "webrtc-ice" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae79e0515160bd5abee5df50a16c4eb8db9f71b530fc988ae1d9ce34dcb8dd01" +checksum = "465a03cc11e9a7d7b4f9f99870558fe37a102b65b93f8045392fef7c67b39e80" dependencies = [ - "anyhow", - "cc", - "cfg-if", - "indexmap", - "libc", + "arc-swap", + "async-trait", + "crc", "log", - "mach", - "memfd", - "memoffset", - "paste", "rand 0.8.5", - "rustix", + "serde", + "serde_json", + "stun", "thiserror", - "wasmtime-asm-macros", - "wasmtime-environ", - "wasmtime-jit-debug", - "windows-sys 0.36.1", + "tokio", + "turn", + "url", + "uuid 1.3.2", + "waitgroup", + "webrtc-mdns", + "webrtc-util", ] [[package]] -name = "wasmtime-types" -version = "1.0.0" +name = "webrtc-mdns" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "790cf43ee8e2d5dad1780af30f00d7a972b74725fb1e4f90c28d62733819b185" +checksum = "f08dfd7a6e3987e255c4dbe710dde5d94d0f0574f8a21afa95d171376c143106" dependencies = [ - "cranelift-entity", - "serde", + "log", + "socket2", "thiserror", - "wasmparser", + "tokio", + "webrtc-util", ] [[package]] -name = "web-sys" -version = "0.3.55" +name = "webrtc-media" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38eb105f1c59d9eaa6b5cdc92b859d85b926e82cb2e0945cd0c9259faa6fe9fb" +checksum = "f72e1650a8ae006017d1a5280efb49e2610c19ccc3c0905b03b648aee9554991" dependencies = [ - "js-sys", - "wasm-bindgen", + "byteorder", + "bytes", + "rand 0.8.5", + "rtp", + "thiserror", ] [[package]] -name = "webpki" -version = "0.22.0" +name = "webrtc-sctp" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" +checksum = "0d47adcd9427eb3ede33d5a7f3424038f63c965491beafcc20bc650a2f6679c0" dependencies = [ - "ring", - "untrusted", + "arc-swap", + "async-trait", + "bytes", + "crc", + "log", + "rand 0.8.5", + "thiserror", + "tokio", + "webrtc-util", ] [[package]] -name = "webpki-roots" -version = "0.22.2" +name = "webrtc-srtp" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "552ceb903e957524388c4d3475725ff2c8b7960922063af6ce53c9a43da07449" +checksum = "6183edc4c1c6c0175f8812eefdce84dfa0aea9c3ece71c2bf6ddd3c964de3da5" dependencies = [ - "webpki", + "aead 0.4.3", + "aes 0.7.5", + "aes-gcm 0.9.4", + "async-trait", + "byteorder", + "bytes", + "ctr 0.8.0", + "hmac 0.11.0", + "log", + "rtcp", + "rtp", + "sha-1 0.9.8", + "subtle", + "thiserror", + "tokio", + "webrtc-util", ] [[package]] -name = "wepoll-ffi" -version = "0.1.2" +name = "webrtc-util" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" +checksum = "93f1db1727772c05cf7a2cfece52c3aca8045ca1e176cd517d323489aa3c6d87" dependencies = [ + "async-trait", + "bitflags", + "bytes", "cc", + "ipnet", + "lazy_static", + "libc", + "log", + "nix 0.24.3", + "rand 0.8.5", + "thiserror", + "tokio", + "winapi", ] [[package]] name = "westend-runtime" -version = "0.9.36" +version = "0.9.40" dependencies = [ "bitvec", "frame-benchmarking", @@ -12276,6 +13758,8 @@ dependencies = [ "pallet-society", "pallet-staking", "pallet-staking-reward-curve", + "pallet-staking-runtime-api", + "pallet-state-trie-migration", "pallet-sudo", "pallet-timestamp", "pallet-transaction-payment", @@ -12298,9 +13782,9 @@ dependencies = [ "smallvec", "sp-api", "sp-authority-discovery", - "sp-beefy", "sp-block-builder", "sp-consensus-babe", + "sp-consensus-beefy", "sp-core", "sp-inherents", "sp-io", @@ -12314,7 +13798,6 @@ dependencies = [ "sp-std", "sp-tracing", "sp-transaction-pool", - "sp-trie", "sp-version", "substrate-wasm-builder", "tiny-keccak", @@ -12327,7 +13810,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" -version = "0.9.36" +version = "0.9.40" dependencies = [ "frame-support", "polkadot-primitives", @@ -12340,13 +13823,23 @@ dependencies = [ [[package]] name = "which" -version = "4.2.2" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea187a8ef279bc014ec368c27a920da2024d2a711109bfbe3440585d5cf27ad9" +checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269" dependencies = [ "either", - "lazy_static", "libc", + "once_cell", +] + +[[package]] +name = "wide" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b689b6c49d6549434bf944e6b0f39238cf63693cb7a147e9d887507fffa3b223" +dependencies = [ + "bytemuck", + "safe_arch", ] [[package]] @@ -12399,58 +13892,89 @@ dependencies = [ "windows_x86_64_msvc 0.34.0", ] +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets 0.48.0", +] + [[package]] name = "windows-sys" -version = "0.32.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3df6e476185f92a12c072be4a189a0210dcdcf512a1891d6dff9edb874deadc6" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ - "windows_aarch64_msvc 0.32.0", - "windows_i686_gnu 0.32.0", - "windows_i686_msvc 0.32.0", - "windows_x86_64_gnu 0.32.0", - "windows_x86_64_msvc 0.32.0", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", ] [[package]] name = "windows-sys" -version = "0.36.1" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows_aarch64_msvc 0.36.1", - "windows_i686_gnu 0.36.1", - "windows_i686_msvc 0.36.1", - "windows_x86_64_gnu 0.36.1", - "windows_x86_64_msvc 0.36.1", + "windows-targets 0.42.2", ] [[package]] name = "windows-sys" -version = "0.42.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.0", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.0", - "windows_i686_gnu 0.42.0", - "windows_i686_msvc 0.42.0", - "windows_x86_64_gnu 0.42.0", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.0", + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] -name = "windows_aarch64_msvc" -version = "0.32.0" +name = "windows_aarch64_gnullvm" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" [[package]] name = "windows_aarch64_msvc" @@ -12460,21 +13984,15 @@ checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" [[package]] name = "windows_aarch64_msvc" -version = "0.36.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_aarch64_msvc" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" - -[[package]] -name = "windows_i686_gnu" -version = "0.32.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" [[package]] name = "windows_i686_gnu" @@ -12484,21 +14002,15 @@ checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" [[package]] name = "windows_i686_gnu" -version = "0.36.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_gnu" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" - -[[package]] -name = "windows_i686_msvc" -version = "0.32.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" [[package]] name = "windows_i686_msvc" @@ -12508,21 +14020,15 @@ checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" [[package]] name = "windows_i686_msvc" -version = "0.36.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_i686_msvc" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.32.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" [[package]] name = "windows_x86_64_gnu" @@ -12532,27 +14038,27 @@ checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" [[package]] name = "windows_x86_64_gnu" -version = "0.36.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnu" -version = "0.42.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] -name = "windows_x86_64_msvc" -version = "0.32.0" +name = "windows_x86_64_gnullvm" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" [[package]] name = "windows_x86_64_msvc" @@ -12562,24 +14068,15 @@ checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" [[package]] name = "windows_x86_64_msvc" -version = "0.36.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "windows_x86_64_msvc" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" - -[[package]] -name = "winreg" -version = "0.7.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" -dependencies = [ - "winapi", -] +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" [[package]] name = "winreg" @@ -12592,9 +14089,9 @@ dependencies = [ [[package]] name = "wyz" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b31594f29d27036c383b53b59ed3476874d518f0efb151b27a4c275141390e" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" dependencies = [ "tap", ] @@ -12610,25 +14107,80 @@ dependencies = [ "zeroize", ] +[[package]] +name = "x25519-dalek" +version = "2.0.0-pre.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5da623d8af10a62342bcbbb230e33e58a63255a58012f8653c578e54bab48df" +dependencies = [ + "curve25519-dalek 3.2.0", + "rand_core 0.6.4", + "zeroize", +] + +[[package]] +name = "x509-parser" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb9bace5b5589ffead1afb76e43e34cff39cd0f3ce7e170ae0c29e53b88eb1c" +dependencies = [ + "asn1-rs 0.3.1", + "base64 0.13.1", + "data-encoding", + "der-parser 7.0.0", + "lazy_static", + "nom", + "oid-registry 0.4.0", + "ring", + "rusticata-macros", + "thiserror", + "time 0.3.21", +] + +[[package]] +name = "x509-parser" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" +dependencies = [ + "asn1-rs 0.5.2", + "base64 0.13.1", + "data-encoding", + "der-parser 8.2.0", + "lazy_static", + "nom", + "oid-registry 0.6.1", + "rusticata-macros", + "thiserror", + "time 0.3.21", +] + [[package]] name = "xcm" -version = "0.9.36" +version = "0.9.40" dependencies = [ + "bounded-collections", "derivative", + "hex", + "hex-literal", "impl-trait-for-tuples", "log", "parity-scale-codec", "scale-info", - "sp-runtime", + "serde", + "sp-io", + "sp-weights", "xcm-procedural", ] [[package]] name = "xcm-builder" -version = "0.9.36" +version = "0.9.40" dependencies = [ + "assert_matches", "frame-support", "frame-system", + "impl-trait-for-tuples", "log", "pallet-balances", "pallet-transaction-payment", @@ -12636,9 +14188,9 @@ dependencies = [ "parity-scale-codec", "polkadot-parachain", "polkadot-runtime-parachains", + "primitive-types", "scale-info", "sp-arithmetic", - "sp-core", "sp-io", "sp-runtime", "sp-std", @@ -12648,8 +14200,9 @@ dependencies = [ [[package]] name = "xcm-executor" -version = "0.9.36" +version = "0.9.40" dependencies = [ + "environmental", "frame-benchmarking", "frame-support", "impl-trait-for-tuples", @@ -12660,12 +14213,13 @@ dependencies = [ "sp-io", "sp-runtime", "sp-std", + "sp-weights", "xcm", ] [[package]] name = "xcm-executor-integration-tests" -version = "0.9.36" +version = "0.9.40" dependencies = [ "frame-support", "frame-system", @@ -12685,17 +14239,17 @@ dependencies = [ [[package]] name = "xcm-procedural" -version = "0.9.36" +version = "0.9.40" dependencies = [ "Inflector", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "xcm-simulator" -version = "0.9.36" +version = "0.9.40" dependencies = [ "frame-support", "parity-scale-codec", @@ -12711,11 +14265,13 @@ dependencies = [ [[package]] name = "xcm-simulator-example" -version = "0.9.36" +version = "0.9.40" dependencies = [ "frame-support", "frame-system", + "log", "pallet-balances", + "pallet-uniques", "pallet-xcm", "parity-scale-codec", "polkadot-core-primitives", @@ -12726,6 +14282,7 @@ dependencies = [ "sp-io", "sp-runtime", "sp-std", + "sp-tracing", "xcm", "xcm-builder", "xcm-executor", @@ -12734,8 +14291,9 @@ dependencies = [ [[package]] name = "xcm-simulator-fuzzer" -version = "0.9.36" +version = "0.9.40" dependencies = [ + "arbitrary", "frame-support", "frame-system", "honggfuzz", @@ -12770,30 +14328,44 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "yansi" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" + +[[package]] +name = "yasna" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" +dependencies = [ + "time 0.3.21", +] + [[package]] name = "zeroize" -version = "1.5.7" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" +checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.3.2" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f8f187641dad4f680d25c4bfc4225b418165984179f26ca76ec4fb6441d3a17" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn", - "synstructure", + "syn 2.0.15", ] [[package]] name = "zombienet-backchannel" -version = "0.9.36" +version = "0.9.40" dependencies = [ "futures-util", "lazy_static", @@ -12829,10 +14401,11 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.1+zstd.1.5.2" +version = "2.0.8+zstd.1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fd07cbbc53846d9145dbffdf6dd09a7a0aa52be46741825f5c97bdd4f73f12b" +checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c" dependencies = [ "cc", "libc", + "pkg-config", ] diff --git a/Cargo.toml b/Cargo.toml index bb0470e8d00d..c5a6e6c61750 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,21 +16,25 @@ version.workspace = true authors = ["Parity Technologies "] edition = "2021" repository = "https://github.com/paritytech/polkadot.git" -version = "0.9.36" +version = "0.9.40" [dependencies] -polkadot-cli = { path = "cli", features = [ "kusama-native", "westend-native", "rococo-native" ] } color-eyre = { version = "0.6.1", default-features = false } tikv-jemallocator = "0.5.0" +# Crates in our workspace, defined as dependencies so we can pass them feature flags. +polkadot-cli = { path = "cli", features = [ "kusama-native", "westend-native", "rococo-native" ] } +polkadot-node-core-pvf = { path = "node/core/pvf" } +polkadot-overseer = { path = "node/overseer" } + [dev-dependencies] assert_cmd = "2.0.4" -nix = "0.24.1" +nix = { version = "0.26.1", features = ["signal"] } tempfile = "3.2.0" -tokio = "1.22.0" -substrate-rpc-client = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +tokio = "1.24.2" +substrate-rpc-client = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } polkadot-core-primitives = { path = "core-primitives" } - + [workspace] members = [ "cli", @@ -202,13 +206,14 @@ try-runtime = [ "polkadot-cli/try-runtime" ] fast-runtime = [ "polkadot-cli/fast-runtime" ] runtime-metrics = [ "polkadot-cli/runtime-metrics" ] pyroscope = ["polkadot-cli/pyroscope"] +jemalloc-allocator = ["polkadot-node-core-pvf/jemalloc-allocator", "polkadot-overseer/jemalloc-allocator"] # Configuration for building a .deb package - for use with `cargo-deb` [package.metadata.deb] name = "polkadot" extended-description = "Implementation of a https://polkadot.network node in Rust based on the Substrate framework." section = "misc" -maintainer = "martin@parity.io" +maintainer = "security@parity.io" license-file = ["LICENSE", "0"] # https://www.debian.org/doc/debian-policy/ch-maintainerscripts.html maintainer-scripts = "scripts/packaging/deb-maintainer-scripts" @@ -220,18 +225,5 @@ conf-files = [ "/etc/default/polkadot" ] -# Configuration for building an .rpm package - for use with `cargo-rpm` -[package.metadata.rpm] -package = "polkadot" - -[package.metadata.rpm.cargo] -buildflags = ["--release"] - -[package.metadata.rpm.targets] -polkadot = { path = "/usr/bin/polkadot" } - -[package.metadata.rpm.files] -"../scripts/packaging/polkadot.service" = { path = "/usr/lib/systemd/system/polkadot.service", mode = "644" } - [package.metadata.spellcheck] config = "./scripts/ci/gitlab/spellcheck.toml" diff --git a/README.md b/README.md index 319e1714fd7b..1f64c941b5ad 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ either run the latest binary from our [releases](https://github.com/paritytech/polkadot/releases) page, or install Polkadot from one of our package repositories. -Installation from the Debian or rpm repositories will create a `systemd` +Installation from the Debian repository will create a `systemd` service that can be used to run a Polkadot node. This is disabled by default, and can be started by running `systemctl start polkadot` on demand (use `systemctl enable polkadot` to make it auto-start after reboot). By default, it @@ -48,21 +48,6 @@ apt install polkadot ``` -### RPM-based (Fedora, CentOS) - -Currently supports Fedora 32 and CentOS 8, and derivatives. - -```bash -# Install dnf-plugins-core (This might already be installed) -dnf install dnf-plugins-core -# Add the repository and enable it -dnf config-manager --add-repo https://releases.parity.io/rpm/polkadot.repo -dnf config-manager --set-enabled polkadot -# Install polkadot (You may have to confirm the import of the GPG key, which -# should have the following fingerprint: 9D4B2B6EB8F97156D19669A9FF0812D491B96798) -dnf install polkadot -``` - ## Building ### Install via Cargo diff --git a/cli/Cargo.toml b/cli/Cargo.toml index e84e25c18176..5693568ddac3 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -25,23 +25,24 @@ polkadot-client = { path = "../node/client", optional = true } polkadot-node-core-pvf = { path = "../node/core/pvf", optional = true } polkadot-performance-test = { path = "../node/test/performance-test", optional = true } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -frame-benchmarking-cli = { git = "https://github.com/paritytech/substrate", optional = true , branch = "polkadot-v0.9.36" } -try-runtime-cli = { git = "https://github.com/paritytech/substrate", optional = true , branch = "polkadot-v0.9.36" } -sc-cli = { git = "https://github.com/paritytech/substrate", optional = true , branch = "polkadot-v0.9.36" } -sc-service = { git = "https://github.com/paritytech/substrate", optional = true , branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +frame-benchmarking-cli = { git = "https://github.com/paritytech/substrate", optional = true , branch = "polkadot-v0.9.40" } +try-runtime-cli = { git = "https://github.com/paritytech/substrate", optional = true , branch = "polkadot-v0.9.40" } +sc-cli = { git = "https://github.com/paritytech/substrate", optional = true , branch = "polkadot-v0.9.40" } +sc-service = { git = "https://github.com/paritytech/substrate", optional = true , branch = "polkadot-v0.9.40" } polkadot-node-metrics = { path = "../node/metrics" } -sc-tracing = { git = "https://github.com/paritytech/substrate", optional = true , branch = "polkadot-v0.9.36" } -sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-executor = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-tracing = { git = "https://github.com/paritytech/substrate", optional = true , branch = "polkadot-v0.9.40" } +sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-executor = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-storage-monitor = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } [build-dependencies] -substrate-build-script-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +substrate-build-script-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } [features] -default = ["db", "cli", "hostperfcheck", "full-node", "polkadot-native"] +default = ["db", "cli", "full-node", "polkadot-native"] db = ["service/db"] cli = [ "clap", diff --git a/cli/src/cli.rs b/cli/src/cli.rs index a6b7f4a3d5c9..37083eb91278 100644 --- a/cli/src/cli.rs +++ b/cli/src/cli.rs @@ -86,7 +86,6 @@ pub struct ValidationWorkerCommand { #[derive(Debug, Parser)] #[group(skip)] pub struct RunCmd { - #[allow(missing_docs)] #[clap(flatten)] pub base: sc_cli::RunCmd, @@ -151,6 +150,10 @@ pub struct RunCmd { pub struct Cli { #[command(subcommand)] pub subcommand: Option, + #[clap(flatten)] pub run: RunCmd, + + #[clap(flatten)] + pub storage_monitor: sc_storage_monitor::StorageMonitorParams, } diff --git a/cli/src/command.rs b/cli/src/command.rs index 81d707e58a24..0d1a3f81639a 100644 --- a/cli/src/command.rs +++ b/cli/src/command.rs @@ -28,6 +28,7 @@ use sp_keyring::Sr25519Keyring; use std::net::ToSocketAddrs; pub use crate::{error::Error, service::BlockId}; +#[cfg(feature = "hostperfcheck")] pub use polkadot_performance_test::PerfCheckError; impl From for Error { @@ -238,7 +239,11 @@ macro_rules! unwrap_client { #[cfg(feature = "rococo-native")] polkadot_client::Client::Rococo($client) => $code, #[allow(unreachable_patterns)] - _ => Err(Error::CommandNotImplemented), + _ => { + let _ = $client; + + Err(Error::CommandNotImplemented) + }, } }; } @@ -246,21 +251,20 @@ macro_rules! unwrap_client { /// Runs performance checks. /// Should only be used in release build since the check would take too much time otherwise. fn host_perf_check() -> Result<()> { - #[cfg(not(build_type = "release"))] + #[cfg(not(feature = "hostperfcheck"))] + { + return Err(Error::FeatureNotEnabled { feature: "hostperfcheck" }.into()) + } + + #[cfg(all(not(build_type = "release"), feature = "hostperfcheck"))] { return Err(PerfCheckError::WrongBuildType.into()) } - #[cfg(build_type = "release")] + + #[cfg(all(feature = "hostperfcheck", build_type = "release"))] { - #[cfg(not(feature = "hostperfcheck"))] - { - return Err(PerfCheckError::FeatureNotEnabled { feature: "hostperfcheck" }.into()) - } - #[cfg(feature = "hostperfcheck")] - { - crate::host_perf_check::host_perf_check()?; - return Ok(()) - } + crate::host_perf_check::host_perf_check()?; + return Ok(()) } } @@ -328,16 +332,15 @@ where }; runner.run_node_until_exit(move |config| async move { - let hwbench = if !cli.run.no_hardware_benchmarks { - config.database.path().map(|database_path| { + let hwbench = (!cli.run.no_hardware_benchmarks) + .then_some(config.database.path().map(|database_path| { let _ = std::fs::create_dir_all(&database_path); sc_sysinfo::gather_hwbench(Some(database_path)) - }) - } else { - None - }; + })) + .flatten(); - service::build_full( + let database_source = config.database.clone(); + let task_manager = service::build_full( config, service::IsCollator::No, grandpa_pause, @@ -350,8 +353,15 @@ where maybe_malus_finality_delay, hwbench, ) - .map(|full| full.task_manager) - .map_err(Into::into) + .map(|full| full.task_manager)?; + + sc_storage_monitor::StorageMonitorService::try_spawn( + cli.storage_monitor, + database_source, + &task_manager.spawn_essential_handle(), + )?; + + Ok(task_manager) }) } @@ -541,7 +551,7 @@ pub fn run() -> Result<()> { ensure_dev(chain_spec).map_err(Error::Other)?; runner.sync_run(|mut config| { let (client, _, _, _) = service::new_chain_ops(&mut config, None)?; - let header = client.header(BlockId::Number(0_u32.into())).unwrap().unwrap(); + let header = client.header(client.info().genesis_hash).unwrap().unwrap(); let inherent_data = benchmark_inherent_data(header) .map_err(|e| format!("generating inherent data: {:?}", e))?; let remark_builder = RemarkBuilder::new(client.clone()); @@ -639,6 +649,9 @@ pub fn run() -> Result<()> { #[cfg(feature = "try-runtime")] Some(Subcommand::TryRuntime(cmd)) => { use sc_executor::{sp_wasm_interface::ExtendedHostFunctions, NativeExecutionDispatch}; + use sc_service::TaskManager; + use try_runtime_cli::block_building_info::timestamp_with_babe_info; + let runner = cli.create_runner(cmd)?; let chain_spec = &runner.config().chain_spec; set_default_ss58_version(chain_spec); @@ -647,7 +660,6 @@ pub fn run() -> Result<()> { ::ExtendHostFunctions, >; - use sc_service::TaskManager; let registry = &runner.config().prometheus_config.as_ref().map(|cfg| &cfg.registry); let task_manager = TaskManager::new(runner.config().tokio_handle.clone(), *registry) .map_err(|e| Error::SubstrateService(sc_service::Error::Prometheus(e)))?; @@ -658,7 +670,8 @@ pub fn run() -> Result<()> { if chain_spec.is_kusama() { return runner.async_run(|_| { Ok(( - cmd.run::>( + cmd.run::, _>( + Some(timestamp_with_babe_info(service::kusama_runtime_constants::time::MILLISECS_PER_BLOCK)) ) .map_err(Error::SubstrateCli), task_manager, @@ -670,7 +683,8 @@ pub fn run() -> Result<()> { if chain_spec.is_westend() { return runner.async_run(|_| { Ok(( - cmd.run::>( + cmd.run::, _>( + Some(timestamp_with_babe_info(service::westend_runtime_constants::time::MILLISECS_PER_BLOCK)) ) .map_err(Error::SubstrateCli), task_manager, @@ -682,7 +696,8 @@ pub fn run() -> Result<()> { { return runner.async_run(|_| { Ok(( - cmd.run::>( + cmd.run::, _>( + Some(timestamp_with_babe_info(service::polkadot_runtime_constants::time::MILLISECS_PER_BLOCK)) ) .map_err(Error::SubstrateCli), task_manager, diff --git a/cli/src/error.rs b/cli/src/error.rs index 69f38bbdd029..e125998c476f 100644 --- a/cli/src/error.rs +++ b/cli/src/error.rs @@ -29,6 +29,7 @@ pub enum Error { SubstrateTracing(#[from] sc_tracing::logging::Error), #[error(transparent)] + #[cfg(feature = "hostperfcheck")] PerfCheck(#[from] polkadot_performance_test::PerfCheckError), #[cfg(not(feature = "pyroscope"))] @@ -48,6 +49,12 @@ pub enum Error { #[error("Command is not implemented")] CommandNotImplemented, + #[error(transparent)] + Storage(#[from] sc_storage_monitor::Error), + #[error("Other: {0}")] Other(String), + + #[error("This subcommand is only available when compiled with `{feature}`")] + FeatureNotEnabled { feature: &'static str }, } diff --git a/core-primitives/Cargo.toml b/core-primitives/Cargo.toml index 25939a245a09..79d4dd509fa7 100644 --- a/core-primitives/Cargo.toml +++ b/core-primitives/Cargo.toml @@ -5,11 +5,11 @@ authors.workspace = true edition.workspace = true [dependencies] -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } scale-info = { version = "2.1.2", default-features = false, features = ["derive"] } -parity-scale-codec = { version = "3.1.5", default-features = false, features = [ "derive" ] } +parity-scale-codec = { version = "3.3.0", default-features = false, features = [ "derive" ] } [features] default = [ "std" ] diff --git a/erasure-coding/Cargo.toml b/erasure-coding/Cargo.toml index d6846ce1cc62..6e9d2470a474 100644 --- a/erasure-coding/Cargo.toml +++ b/erasure-coding/Cargo.toml @@ -8,7 +8,14 @@ edition.workspace = true polkadot-primitives = { path = "../primitives" } polkadot-node-primitives = { package = "polkadot-node-primitives", path = "../node/primitives" } novelpoly = { package = "reed-solomon-novelpoly", version = "1.0.0" } -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["std", "derive"] } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-trie = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["std", "derive"] } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-trie = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } thiserror = "1.0.31" + +[dev-dependencies] +criterion = { version = "0.4.0", default-features = false, features = ["cargo_bench_support"] } + +[[bench]] +name = "scaling_with_validators" +harness = false diff --git a/erasure-coding/benches/README.md b/erasure-coding/benches/README.md new file mode 100644 index 000000000000..e643643229e8 --- /dev/null +++ b/erasure-coding/benches/README.md @@ -0,0 +1,39 @@ +### Run benches +``` +$ cd erasure-coding # ensure you are in the right directory +$ cargo bench +``` + +### `scaling_with_validators` + +This benchmark evaluates the performance of constructing the chunks and the erasure root from PoV and +reconstructing the PoV from chunks. You can see the results of running this bench on 5950x below. +Interestingly, with `10_000` chunks (validators) its slower than with `50_000` for both construction +and reconstruction. +``` +construct/200 time: [93.924 ms 94.525 ms 95.214 ms] + thrpt: [52.513 MiB/s 52.896 MiB/s 53.234 MiB/s] +construct/500 time: [111.25 ms 111.52 ms 111.80 ms] + thrpt: [44.721 MiB/s 44.837 MiB/s 44.946 MiB/s] +construct/1000 time: [117.37 ms 118.28 ms 119.21 ms] + thrpt: [41.941 MiB/s 42.273 MiB/s 42.601 MiB/s] +construct/2000 time: [125.05 ms 125.72 ms 126.38 ms] + thrpt: [39.564 MiB/s 39.772 MiB/s 39.983 MiB/s] +construct/10000 time: [270.46 ms 275.11 ms 279.81 ms] + thrpt: [17.869 MiB/s 18.174 MiB/s 18.487 MiB/s] +construct/50000 time: [205.86 ms 209.66 ms 213.64 ms] + thrpt: [23.404 MiB/s 23.848 MiB/s 24.288 MiB/s] + +reconstruct/200 time: [180.73 ms 184.09 ms 187.73 ms] + thrpt: [26.634 MiB/s 27.160 MiB/s 27.666 MiB/s] +reconstruct/500 time: [195.59 ms 198.58 ms 201.76 ms] + thrpt: [24.781 MiB/s 25.179 MiB/s 25.564 MiB/s] +reconstruct/1000 time: [207.92 ms 211.57 ms 215.57 ms] + thrpt: [23.195 MiB/s 23.633 MiB/s 24.048 MiB/s] +reconstruct/2000 time: [218.59 ms 223.68 ms 229.18 ms] + thrpt: [21.817 MiB/s 22.354 MiB/s 22.874 MiB/s] +reconstruct/10000 time: [496.35 ms 505.17 ms 515.42 ms] + thrpt: [9.7008 MiB/s 9.8977 MiB/s 10.074 MiB/s] +reconstruct/50000 time: [276.56 ms 277.53 ms 278.58 ms] + thrpt: [17.948 MiB/s 18.016 MiB/s 18.079 MiB/s] +``` diff --git a/erasure-coding/benches/scaling_with_validators.rs b/erasure-coding/benches/scaling_with_validators.rs new file mode 100644 index 000000000000..35eff095d2f6 --- /dev/null +++ b/erasure-coding/benches/scaling_with_validators.rs @@ -0,0 +1,90 @@ +// Copyright 2017-2023 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion, Throughput}; +use polkadot_primitives::Hash; +use std::time::Duration; + +fn chunks(n_validators: usize, pov: &Vec) -> Vec> { + polkadot_erasure_coding::obtain_chunks(n_validators, pov).unwrap() +} + +fn erasure_root(n_validators: usize, pov: &Vec) -> Hash { + let chunks = chunks(n_validators, pov); + polkadot_erasure_coding::branches(&chunks).root() +} + +fn construct_and_reconstruct_5mb_pov(c: &mut Criterion) { + const N_VALIDATORS: [usize; 6] = [200, 500, 1000, 2000, 10_000, 50_000]; + + const KB: usize = 1024; + const MB: usize = 1024 * KB; + + let pov = vec![0xfe; 5 * MB]; + + let mut group = c.benchmark_group("construct"); + for n_validators in N_VALIDATORS { + let expected_root = erasure_root(n_validators, &pov); + + group.throughput(Throughput::Bytes(pov.len() as u64)); + group.bench_with_input( + BenchmarkId::from_parameter(n_validators), + &n_validators, + |b, &n| { + b.iter(|| { + let root = erasure_root(n, &pov); + assert_eq!(root, expected_root); + }); + }, + ); + } + group.finish(); + + let mut group = c.benchmark_group("reconstruct"); + for n_validators in N_VALIDATORS { + let all_chunks = chunks(n_validators, &pov); + + let mut c: Vec<_> = all_chunks.iter().enumerate().map(|(i, c)| (&c[..], i)).collect(); + let last_chunks = c.split_off((c.len() - 1) * 2 / 3); + + group.throughput(Throughput::Bytes(pov.len() as u64)); + group.bench_with_input( + BenchmarkId::from_parameter(n_validators), + &n_validators, + |b, &n| { + b.iter(|| { + let _pov: Vec = + polkadot_erasure_coding::reconstruct(n, last_chunks.clone()).unwrap(); + }); + }, + ); + } + group.finish(); +} + +fn criterion_config() -> Criterion { + Criterion::default() + .sample_size(15) + .warm_up_time(Duration::from_millis(200)) + .measurement_time(Duration::from_secs(3)) +} + +criterion_group!( + name = re_construct; + config = criterion_config(); + targets = construct_and_reconstruct_5mb_pov, +); +criterion_main!(re_construct); diff --git a/erasure-coding/fuzzer/src/reconstruct.rs b/erasure-coding/fuzzer/src/reconstruct.rs index ccc623b1caf1..a388a55857d7 100644 --- a/erasure-coding/fuzzer/src/reconstruct.rs +++ b/erasure-coding/fuzzer/src/reconstruct.rs @@ -1,3 +1,19 @@ +// Copyright 2017-2023 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + use polkadot_erasure_coding::*; use primitives::AvailableData; use honggfuzz::fuzz; diff --git a/erasure-coding/fuzzer/src/round_trip.rs b/erasure-coding/fuzzer/src/round_trip.rs index daa57a566fbb..0d4507c98e65 100644 --- a/erasure-coding/fuzzer/src/round_trip.rs +++ b/erasure-coding/fuzzer/src/round_trip.rs @@ -1,8 +1,24 @@ +// Copyright 2017-2023 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + use polkadot_erasure_coding::*; use primitives::{AvailableData, BlockData, PoV}; use std::sync::Arc; use honggfuzz::fuzz; -use polkadot_primitives::v2::PersistedValidationData; +use polkadot_primitives::PersistedValidationData; fn main() { diff --git a/erasure-coding/src/lib.rs b/erasure-coding/src/lib.rs index 6abd7dce4dd3..50c9ca64e0df 100644 --- a/erasure-coding/src/lib.rs +++ b/erasure-coding/src/lib.rs @@ -26,7 +26,7 @@ use parity_scale_codec::{Decode, Encode}; use polkadot_node_primitives::{AvailableData, Proof}; -use polkadot_primitives::v2::{BlakeTwo256, Hash as H256, HashT}; +use polkadot_primitives::{BlakeTwo256, Hash as H256, HashT}; use sp_core::Blake2Hasher; use sp_trie::{ trie_types::{TrieDBBuilder, TrieDBMutBuilderV0 as TrieDBMutBuilder}, diff --git a/node/client/Cargo.toml b/node/client/Cargo.toml index c62f52138b13..364ef80c964b 100644 --- a/node/client/Cargo.toml +++ b/node/client/Cargo.toml @@ -7,37 +7,36 @@ edition.workspace = true [dependencies] async-trait = "0.1.57" futures = "0.3.21" -frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -frame-benchmarking-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +frame-benchmarking-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-storage = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-inherents = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-session = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-finality-grandpa = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-offchain = { package = "sp-offchain", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-mmr-primitives = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-storage = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-inherents = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-session = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-consensus-beefy = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-consensus-grandpa = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-offchain = { package = "sp-offchain", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-mmr-primitives = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } -sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-executor = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-service = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } - -beefy-primitives = { git = "https://github.com/paritytech/substrate", package = "sp-beefy" , branch = "polkadot-v0.9.36" } +sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-executor = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-service = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } # Polkadot Runtimes polkadot-runtime = { path = "../../runtime/polkadot", optional = true } diff --git a/node/client/src/benchmarking.rs b/node/client/src/benchmarking.rs index 17ef63f4ba6e..7ed9bcee5041 100644 --- a/node/client/src/benchmarking.rs +++ b/node/client/src/benchmarking.rs @@ -16,7 +16,7 @@ //! Code related to benchmarking a [`crate::Client`]. -use polkadot_primitives::v2::{AccountId, Balance}; +use polkadot_primitives::{AccountId, Balance}; use sp_core::{Pair, H256}; use sp_keyring::Sr25519Keyring; use sp_runtime::OpaqueExtrinsic; @@ -361,14 +361,14 @@ pub fn benchmark_inherent_data( let timestamp = sp_timestamp::InherentDataProvider::new(d.into()); futures::executor::block_on(timestamp.provide_inherent_data(&mut inherent_data))?; - let para_data = polkadot_primitives::v2::InherentData { + let para_data = polkadot_primitives::InherentData { bitfields: Vec::new(), backed_candidates: Vec::new(), disputes: Vec::new(), parent_header: header, }; - inherent_data.put_data(polkadot_primitives::v2::PARACHAINS_INHERENT_IDENTIFIER, ¶_data)?; + inherent_data.put_data(polkadot_primitives::PARACHAINS_INHERENT_IDENTIFIER, ¶_data)?; Ok(inherent_data) } diff --git a/node/client/src/lib.rs b/node/client/src/lib.rs index d2c119ba04a8..466bfef61efa 100644 --- a/node/client/src/lib.rs +++ b/node/client/src/lib.rs @@ -20,16 +20,17 @@ //! There is also the [`Client`] enum that combines all the different clients into one common structure. use polkadot_primitives::{ - runtime_api::ParachainHost, - v2::{AccountId, Balance, Block, BlockNumber, Hash, Header, Nonce}, + runtime_api::ParachainHost, AccountId, Balance, Block, BlockNumber, Hash, Header, Nonce, +}; +use sc_client_api::{ + AuxStore, Backend as BackendT, BlockchainEvents, KeysIter, PairsIter, UsageProvider, }; -use sc_client_api::{AuxStore, Backend as BackendT, BlockchainEvents, KeyIterator, UsageProvider}; use sc_executor::NativeElseWasmExecutor; use sp_api::{CallApiAt, Encode, NumberFor, ProvideRuntimeApi}; use sp_blockchain::{HeaderBackend, HeaderMetadata}; use sp_consensus::BlockStatus; use sp_runtime::{ - generic::{BlockId, SignedBlock}, + generic::SignedBlock, traits::{BlakeTwo256, Block as BlockT}, Justifications, }; @@ -124,7 +125,7 @@ pub trait RuntimeApiCollection: sp_transaction_pool::runtime_api::TaggedTransactionQueue + sp_api::ApiExt + sp_consensus_babe::BabeApi - + sp_finality_grandpa::GrandpaApi + + sp_consensus_grandpa::GrandpaApi + ParachainHost + sp_block_builder::BlockBuilder + frame_system_rpc_runtime_api::AccountNonceApi @@ -134,7 +135,7 @@ pub trait RuntimeApiCollection: + sp_offchain::OffchainWorkerApi + sp_session::SessionKeys + sp_authority_discovery::AuthorityDiscoveryApi - + beefy_primitives::BeefyApi + + sp_consensus_beefy::BeefyApi where >::StateBackend: sp_api::StateBackend, { @@ -145,7 +146,7 @@ where Api: sp_transaction_pool::runtime_api::TaggedTransactionQueue + sp_api::ApiExt + sp_consensus_babe::BabeApi - + sp_finality_grandpa::GrandpaApi + + sp_consensus_grandpa::GrandpaApi + ParachainHost + sp_block_builder::BlockBuilder + frame_system_rpc_runtime_api::AccountNonceApi @@ -155,7 +156,7 @@ where + sp_offchain::OffchainWorkerApi + sp_session::SessionKeys + sp_authority_discovery::AuthorityDiscoveryApi - + beefy_primitives::BeefyApi, + + sp_consensus_beefy::BeefyApi, >::StateBackend: sp_api::StateBackend, { } @@ -338,22 +339,25 @@ impl sc_client_api::BlockBackend for Client { } } - fn block(&self, id: &BlockId) -> sp_blockchain::Result>> { + fn block( + &self, + hash: ::Hash, + ) -> sp_blockchain::Result>> { with_client! { self, client, { - client.block(id) + client.block(hash) } } } - fn block_status(&self, id: &BlockId) -> sp_blockchain::Result { + fn block_status(&self, hash: ::Hash) -> sp_blockchain::Result { with_client! { self, client, { - client.block_status(id) + client.block_status(hash) } } } @@ -436,20 +440,6 @@ impl sc_client_api::StorageProvider for Client { } } - fn storage_keys( - &self, - hash: ::Hash, - key_prefix: &StorageKey, - ) -> sp_blockchain::Result> { - with_client! { - self, - client, - { - client.storage_keys(hash, key_prefix) - } - } - } - fn storage_hash( &self, hash: ::Hash, @@ -467,30 +457,33 @@ impl sc_client_api::StorageProvider for Client { fn storage_pairs( &self, hash: ::Hash, - key_prefix: &StorageKey, - ) -> sp_blockchain::Result> { + key_prefix: Option<&StorageKey>, + start_key: Option<&StorageKey>, + ) -> sp_blockchain::Result< + PairsIter<>::State, Block>, + > { with_client! { self, client, { - client.storage_pairs(hash, key_prefix) + client.storage_pairs(hash, key_prefix, start_key) } } } - fn storage_keys_iter<'a>( + fn storage_keys( &self, hash: ::Hash, - prefix: Option<&'a StorageKey>, + prefix: Option<&StorageKey>, start_key: Option<&StorageKey>, ) -> sp_blockchain::Result< - KeyIterator<'a, >::State, Block>, + KeysIter<>::State, Block>, > { with_client! { self, client, { - client.storage_keys_iter(hash, prefix, start_key) + client.storage_keys(hash, prefix, start_key) } } } @@ -511,34 +504,19 @@ impl sc_client_api::StorageProvider for Client { } fn child_storage_keys( - &self, - hash: ::Hash, - child_info: &ChildInfo, - key_prefix: &StorageKey, - ) -> sp_blockchain::Result> { - with_client! { - self, - client, - { - client.child_storage_keys(hash, child_info, key_prefix) - } - } - } - - fn child_storage_keys_iter<'a>( &self, hash: ::Hash, child_info: ChildInfo, - prefix: Option<&'a StorageKey>, + prefix: Option<&StorageKey>, start_key: Option<&StorageKey>, ) -> sp_blockchain::Result< - KeyIterator<'a, >::State, Block>, + KeysIter<>::State, Block>, > { with_client! { self, client, { - client.child_storage_keys_iter(hash, child_info, prefix, start_key) + client.child_storage_keys(hash, child_info, prefix, start_key) } } } @@ -560,12 +538,12 @@ impl sc_client_api::StorageProvider for Client { } impl sp_blockchain::HeaderBackend for Client { - fn header(&self, id: BlockId) -> sp_blockchain::Result> { + fn header(&self, hash: Hash) -> sp_blockchain::Result> { with_client! { self, client, { - client.header(&id) + client.header(hash) } } } @@ -580,12 +558,12 @@ impl sp_blockchain::HeaderBackend for Client { } } - fn status(&self, id: BlockId) -> sp_blockchain::Result { + fn status(&self, hash: Hash) -> sp_blockchain::Result { with_client! { self, client, { - client.status(id) + client.status(hash) } } } diff --git a/node/collation-generation/Cargo.toml b/node/collation-generation/Cargo.toml index 4f41df5d4510..67848afaa7ec 100644 --- a/node/collation-generation/Cargo.toml +++ b/node/collation-generation/Cargo.toml @@ -12,10 +12,10 @@ polkadot-node-primitives = { path = "../primitives" } polkadot-node-subsystem = { path = "../subsystem" } polkadot-node-subsystem-util = { path = "../subsystem-util" } polkadot-primitives = { path = "../../primitives" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-maybe-compressed-blob = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-maybe-compressed-blob = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } thiserror = "1.0.31" -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["bit-vec", "derive"] } +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["bit-vec", "derive"] } [dev-dependencies] polkadot-node-subsystem-test-helpers = { path = "../subsystem-test-helpers" } diff --git a/node/collation-generation/src/lib.rs b/node/collation-generation/src/lib.rs index 500b500636ba..b3d728f70a48 100644 --- a/node/collation-generation/src/lib.rs +++ b/node/collation-generation/src/lib.rs @@ -30,7 +30,7 @@ use polkadot_node_subsystem_util::{ request_availability_cores, request_persisted_validation_data, request_validation_code, request_validation_code_hash, request_validators, }; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ collator_signature_payload, CandidateCommitments, CandidateDescriptor, CandidateReceipt, CoreState, Hash, Id as ParaId, OccupiedCoreAssumption, PersistedValidationData, ValidationCodeHash, @@ -177,7 +177,7 @@ async fn handle_new_activations( sender: &mpsc::Sender, ) -> crate::error::Result<()> { // follow the procedure from the guide: - // https://w3f.github.io/parachain-implementers-guide/node/collators/collation-generation.html + // https://paritytech.github.io/polkadot/book/node/collators/collation-generation.html let _overall_timer = metrics.time_new_activations(); diff --git a/node/collation-generation/src/tests.rs b/node/collation-generation/src/tests.rs index ca75666c85e3..9640f07b80e2 100644 --- a/node/collation-generation/src/tests.rs +++ b/node/collation-generation/src/tests.rs @@ -32,15 +32,15 @@ mod handle_new_activations { use polkadot_node_subsystem_test_helpers::{ subsystem_test_harness, TestSubsystemContextHandle, }; - use polkadot_primitives::v2::{ + use polkadot_primitives::{ CollatorPair, Id as ParaId, PersistedValidationData, ScheduledCore, ValidationCode, }; use std::pin::Pin; fn test_collation() -> Collation { Collation { - upward_messages: vec![], - horizontal_messages: vec![], + upward_messages: Default::default(), + horizontal_messages: Default::default(), new_validation_code: None, head_data: dummy_head_data(), proof_of_validity: MaybeCompressedPoV::Raw(PoV { block_data: BlockData(Vec::new()) }), diff --git a/node/core/approval-voting/Cargo.toml b/node/core/approval-voting/Cargo.toml index 5e79e1adcb24..c49c4cc4e533 100644 --- a/node/core/approval-voting/Cargo.toml +++ b/node/core/approval-voting/Cargo.toml @@ -7,10 +7,10 @@ edition.workspace = true [dependencies] futures = "0.3.21" futures-timer = "3.0.2" -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["bit-vec", "derive"] } +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["bit-vec", "derive"] } gum = { package = "tracing-gum", path = "../../gum" } bitvec = { version = "1.0.0", default-features = false, features = ["alloc"] } -lru = "0.8" +lru = "0.9" merlin = "2.0" schnorrkel = "0.9.1" kvdb = "0.13.0" @@ -24,20 +24,20 @@ polkadot-primitives = { path = "../../../primitives" } polkadot-node-primitives = { path = "../../primitives" } polkadot-node-jaeger = { path = "../../jaeger" } -sc-keystore = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-consensus = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-consensus-slots = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-application-crypto = { git = "https://github.com/paritytech/substrate", default-features = false, features = ["full_crypto"] , branch = "polkadot-v0.9.36" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +sc-keystore = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-consensus = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-consensus-slots = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-application-crypto = { git = "https://github.com/paritytech/substrate", default-features = false, features = ["full_crypto"] , branch = "polkadot-v0.9.40" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } [dev-dependencies] async-trait = "0.1.57" parking_lot = "0.12.0" rand_core = "0.5.1" # should match schnorrkel -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } assert_matches = "1.4.0" kvdb-memorydb = "0.13.0" diff --git a/node/core/approval-voting/src/approval_checking.rs b/node/core/approval-voting/src/approval_checking.rs index 82a9a8c89bf5..aba03ed1ce30 100644 --- a/node/core/approval-voting/src/approval_checking.rs +++ b/node/core/approval-voting/src/approval_checking.rs @@ -18,7 +18,7 @@ use bitvec::{order::Lsb0 as BitOrderLsb0, slice::BitSlice}; use polkadot_node_primitives::approval::DelayTranche; -use polkadot_primitives::v2::ValidatorIndex; +use polkadot_primitives::ValidatorIndex; use crate::{ persisted_entries::{ApprovalEntry, CandidateEntry, TrancheEntry}, @@ -460,7 +460,7 @@ mod tests { use crate::{approval_db, BTreeMap}; use ::test_helpers::{dummy_candidate_receipt, dummy_hash}; use bitvec::{bitvec, order::Lsb0 as BitOrderLsb0, vec::BitVec}; - use polkadot_primitives::v2::GroupIndex; + use polkadot_primitives::GroupIndex; #[test] fn pending_is_not_approved() { diff --git a/node/core/approval-voting/src/approval_db/v1/mod.rs b/node/core/approval-voting/src/approval_db/v1/mod.rs index 858bcb8c36fe..a761b7f20e84 100644 --- a/node/core/approval-voting/src/approval_db/v1/mod.rs +++ b/node/core/approval-voting/src/approval_db/v1/mod.rs @@ -20,7 +20,7 @@ use parity_scale_codec::{Decode, Encode}; use polkadot_node_primitives::approval::{AssignmentCert, DelayTranche}; use polkadot_node_subsystem::{SubsystemError, SubsystemResult}; use polkadot_node_subsystem_util::database::{DBTransaction, Database}; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ BlockNumber, CandidateHash, CandidateReceipt, CoreIndex, GroupIndex, Hash, SessionIndex, ValidatorIndex, ValidatorSignature, }; diff --git a/node/core/approval-voting/src/approval_db/v1/tests.rs b/node/core/approval-voting/src/approval_db/v1/tests.rs index 06923c6a539f..5b6602882e59 100644 --- a/node/core/approval-voting/src/approval_db/v1/tests.rs +++ b/node/core/approval-voting/src/approval_db/v1/tests.rs @@ -22,7 +22,7 @@ use crate::{ ops::{add_block_entry, canonicalize, force_approve, NewCandidateInfo}, }; use polkadot_node_subsystem_util::database::Database; -use polkadot_primitives::v2::Id as ParaId; +use polkadot_primitives::Id as ParaId; use std::{collections::HashMap, sync::Arc}; use ::test_helpers::{dummy_candidate_receipt, dummy_candidate_receipt_bad_sig, dummy_hash}; diff --git a/node/core/approval-voting/src/backend.rs b/node/core/approval-voting/src/backend.rs index 9cb2cb59ec78..3fb90fabe574 100644 --- a/node/core/approval-voting/src/backend.rs +++ b/node/core/approval-voting/src/backend.rs @@ -22,7 +22,7 @@ //! before any commit to the underlying storage is made. use polkadot_node_subsystem::SubsystemResult; -use polkadot_primitives::v2::{BlockNumber, CandidateHash, Hash}; +use polkadot_primitives::{BlockNumber, CandidateHash, Hash}; use std::collections::HashMap; diff --git a/node/core/approval-voting/src/criteria.rs b/node/core/approval-voting/src/criteria.rs index 520a1a745056..6707fc5672aa 100644 --- a/node/core/approval-voting/src/criteria.rs +++ b/node/core/approval-voting/src/criteria.rs @@ -20,7 +20,7 @@ use parity_scale_codec::{Decode, Encode}; use polkadot_node_primitives::approval::{ self as approval_types, AssignmentCert, AssignmentCertKind, DelayTranche, RelayVRFStory, }; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ AssignmentId, AssignmentPair, CandidateHash, CoreIndex, GroupIndex, IndexedVec, SessionInfo, ValidatorIndex, }; @@ -553,7 +553,7 @@ fn is_in_backing_group( mod tests { use super::*; use polkadot_node_primitives::approval::{VRFOutput, VRFProof}; - use polkadot_primitives::v2::{Hash, ASSIGNMENT_KEY_TYPE_ID}; + use polkadot_primitives::{Hash, ASSIGNMENT_KEY_TYPE_ID}; use sp_application_crypto::sr25519; use sp_core::crypto::Pair as PairT; use sp_keyring::sr25519::Keyring as Sr25519Keyring; diff --git a/node/core/approval-voting/src/import.rs b/node/core/approval-voting/src/import.rs index 2331b50b6bb1..f36b79c7a4e1 100644 --- a/node/core/approval-voting/src/import.rs +++ b/node/core/approval-voting/src/import.rs @@ -44,7 +44,7 @@ use polkadot_node_subsystem_util::{ determine_new_blocks, rolling_session_window::{RollingSessionWindow, SessionWindowUpdate}, }; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ BlockNumber, CandidateEvent, CandidateHash, CandidateReceipt, ConsensusLog, CoreIndex, GroupIndex, Hash, Header, SessionIndex, }; @@ -617,9 +617,7 @@ pub(crate) mod tests { use polkadot_node_subsystem::messages::{AllMessages, ApprovalVotingMessage}; use polkadot_node_subsystem_test_helpers::make_subsystem_context; use polkadot_node_subsystem_util::database::Database; - use polkadot_primitives::v2::{ - Id as ParaId, IndexedVec, SessionInfo, ValidatorId, ValidatorIndex, - }; + use polkadot_primitives::{Id as ParaId, IndexedVec, SessionInfo, ValidatorId, ValidatorIndex}; pub(crate) use sp_consensus_babe::{ digests::{CompatibleDigestItem, PreDigest, SecondaryVRFPreDigest}, AllowedSlots, BabeEpochConfiguration, Epoch as BabeEpoch, @@ -683,21 +681,21 @@ pub(crate) mod tests { _config: &criteria::Config, _leaving_cores: Vec<( CandidateHash, - polkadot_primitives::v2::CoreIndex, - polkadot_primitives::v2::GroupIndex, + polkadot_primitives::CoreIndex, + polkadot_primitives::GroupIndex, )>, - ) -> HashMap { + ) -> HashMap { HashMap::new() } fn check_assignment_cert( &self, - _claimed_core_index: polkadot_primitives::v2::CoreIndex, - _validator_index: polkadot_primitives::v2::ValidatorIndex, + _claimed_core_index: polkadot_primitives::CoreIndex, + _validator_index: polkadot_primitives::ValidatorIndex, _config: &criteria::Config, _relay_vrf_story: polkadot_node_primitives::approval::RelayVRFStory, _assignment: &polkadot_node_primitives::approval::AssignmentCert, - _backing_group: polkadot_primitives::v2::GroupIndex, + _backing_group: polkadot_primitives::GroupIndex, ) -> Result { Ok(0) } diff --git a/node/core/approval-voting/src/lib.rs b/node/core/approval-voting/src/lib.rs index 14fc87761c42..59db8732a429 100644 --- a/node/core/approval-voting/src/lib.rs +++ b/node/core/approval-voting/src/lib.rs @@ -26,7 +26,7 @@ use polkadot_node_primitives::{ approval::{ BlockApprovalMeta, DelayTranche, IndirectAssignmentCert, IndirectSignedApprovalVote, }, - ValidationResult, APPROVAL_EXECUTION_TIMEOUT, + ValidationResult, }; use polkadot_node_subsystem::{ errors::RecoveryError, @@ -48,10 +48,10 @@ use polkadot_node_subsystem_util::{ }, TimeoutExt, }; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ ApprovalVote, BlockNumber, CandidateHash, CandidateIndex, CandidateReceipt, DisputeStatement, - GroupIndex, Hash, SessionIndex, SessionInfo, ValidDisputeStatementKind, ValidatorId, - ValidatorIndex, ValidatorPair, ValidatorSignature, + GroupIndex, Hash, PvfExecTimeoutKind, SessionIndex, SessionInfo, ValidDisputeStatementKind, + ValidatorId, ValidatorIndex, ValidatorPair, ValidatorSignature, }; use sc_keystore::LocalKeystore; use sp_application_crypto::Pair; @@ -2399,7 +2399,7 @@ async fn launch_approval( validation_code, candidate.clone(), available_data.pov, - APPROVAL_EXECUTION_TIMEOUT, + PvfExecTimeoutKind::Approval, val_tx, )) .await; diff --git a/node/core/approval-voting/src/ops.rs b/node/core/approval-voting/src/ops.rs index 0491009b0740..37f564c34f71 100644 --- a/node/core/approval-voting/src/ops.rs +++ b/node/core/approval-voting/src/ops.rs @@ -20,7 +20,7 @@ use polkadot_node_subsystem::{SubsystemError, SubsystemResult}; use bitvec::order::Lsb0 as BitOrderLsb0; -use polkadot_primitives::v2::{BlockNumber, CandidateHash, CandidateReceipt, GroupIndex, Hash}; +use polkadot_primitives::{BlockNumber, CandidateHash, CandidateReceipt, GroupIndex, Hash}; use std::collections::{hash_map::Entry, BTreeMap, HashMap}; diff --git a/node/core/approval-voting/src/persisted_entries.rs b/node/core/approval-voting/src/persisted_entries.rs index e3ea480816e0..1df0ff91c1a1 100644 --- a/node/core/approval-voting/src/persisted_entries.rs +++ b/node/core/approval-voting/src/persisted_entries.rs @@ -21,7 +21,7 @@ //! data and logic are intertwined. use polkadot_node_primitives::approval::{AssignmentCert, DelayTranche, RelayVRFStory}; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ BlockNumber, CandidateHash, CandidateReceipt, CoreIndex, GroupIndex, Hash, SessionIndex, ValidatorIndex, ValidatorSignature, }; diff --git a/node/core/approval-voting/src/tests.rs b/node/core/approval-voting/src/tests.rs index b9063c8ade25..396d945de6b2 100644 --- a/node/core/approval-voting/src/tests.rs +++ b/node/core/approval-voting/src/tests.rs @@ -33,7 +33,7 @@ use polkadot_node_subsystem::{ use polkadot_node_subsystem_test_helpers as test_helpers; use polkadot_node_subsystem_util::TimeoutExt; use polkadot_overseer::HeadSupportsParachains; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ CandidateCommitments, CandidateEvent, CoreIndex, GroupIndex, Header, Id as ParaId, IndexedVec, ValidationCode, ValidatorSignature, }; @@ -227,7 +227,7 @@ struct MockAssignmentCriteria(Compute, Check); impl AssignmentCriteria for MockAssignmentCriteria where - Compute: Fn() -> HashMap, + Compute: Fn() -> HashMap, Check: Fn(ValidatorIndex) -> Result, { fn compute_assignments( @@ -237,31 +237,28 @@ where _config: &criteria::Config, _leaving_cores: Vec<( CandidateHash, - polkadot_primitives::v2::CoreIndex, - polkadot_primitives::v2::GroupIndex, + polkadot_primitives::CoreIndex, + polkadot_primitives::GroupIndex, )>, - ) -> HashMap { + ) -> HashMap { self.0() } fn check_assignment_cert( &self, - _claimed_core_index: polkadot_primitives::v2::CoreIndex, + _claimed_core_index: polkadot_primitives::CoreIndex, validator_index: ValidatorIndex, _config: &criteria::Config, _relay_vrf_story: polkadot_node_primitives::approval::RelayVRFStory, _assignment: &polkadot_node_primitives::approval::AssignmentCert, - _backing_group: polkadot_primitives::v2::GroupIndex, + _backing_group: polkadot_primitives::GroupIndex, ) -> Result { self.1(validator_index) } } impl - MockAssignmentCriteria< - fn() -> HashMap, - F, - > + MockAssignmentCriteria HashMap, F> { fn check_only(f: F) -> Self { MockAssignmentCriteria(Default::default, f) @@ -480,7 +477,7 @@ fn test_harness>( let keystore = LocalKeystore::in_memory(); let _ = keystore.sr25519_generate_new( - polkadot_primitives::v2::PARACHAIN_KEY_TYPE_ID, + polkadot_primitives::PARACHAIN_KEY_TYPE_ID, Some(&Sr25519Keyring::Alice.to_seed()), ); @@ -2430,7 +2427,7 @@ pub async fn handle_double_assignment_import( }, AllMessages::CandidateValidation( CandidateValidationMessage::ValidateFromExhaustive(_, _, _, _, timeout, tx), - ) if timeout == APPROVAL_EXECUTION_TIMEOUT => { + ) if timeout == PvfExecTimeoutKind::Approval => { tx.send(Ok(ValidationResult::Valid(Default::default(), Default::default()))) .unwrap(); }, diff --git a/node/core/av-store/Cargo.toml b/node/core/av-store/Cargo.toml index fd03cc2bd2e6..eee53047f0a0 100644 --- a/node/core/av-store/Cargo.toml +++ b/node/core/av-store/Cargo.toml @@ -12,13 +12,14 @@ thiserror = "1.0.31" gum = { package = "tracing-gum", path = "../../gum" } bitvec = "1.0.0" -parity-scale-codec = { version = "3.1.5", features = ["derive"] } +parity-scale-codec = { version = "3.3.0", features = ["derive"] } erasure = { package = "polkadot-erasure-coding", path = "../../../erasure-coding" } polkadot-node-subsystem = {path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } polkadot-overseer = { path = "../../overseer" } polkadot-primitives = { path = "../../../primitives" } polkadot-node-primitives = { path = "../../primitives" } +sp-consensus = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } [dev-dependencies] log = "0.4.17" @@ -26,9 +27,9 @@ env_logger = "0.9.0" assert_matches = "1.4.0" kvdb-memorydb = "0.13.0" -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } parking_lot = "0.12.0" test-helpers = { package = "polkadot-primitives-test-helpers", path = "../../../primitives/test-helpers" } diff --git a/node/core/av-store/src/lib.rs b/node/core/av-store/src/lib.rs index cbbbf2bbd7dc..d43dc0657d18 100644 --- a/node/core/av-store/src/lib.rs +++ b/node/core/av-store/src/lib.rs @@ -30,6 +30,7 @@ use futures::{channel::oneshot, future, select, FutureExt}; use futures_timer::Delay; use parity_scale_codec::{Decode, Encode, Error as CodecError, Input}; use polkadot_node_subsystem_util::database::{DBTransaction, Database}; +use sp_consensus::SyncOracle; use bitvec::{order::Lsb0 as BitOrderLsb0, vec::BitVec}; use polkadot_node_primitives::{AvailableData, ErasureChunk}; @@ -39,7 +40,7 @@ use polkadot_node_subsystem::{ overseer, ActiveLeavesUpdate, FromOrchestra, OverseerSignal, SpawnedSubsystem, SubsystemError, }; use polkadot_node_subsystem_util as util; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ BlockNumber, CandidateEvent, CandidateHash, CandidateReceipt, Hash, Header, ValidatorIndex, }; @@ -451,16 +452,23 @@ pub struct AvailabilityStoreSubsystem { finalized_number: Option, metrics: Metrics, clock: Box, + sync_oracle: Box, } impl AvailabilityStoreSubsystem { /// Create a new `AvailabilityStoreSubsystem` with a given config on disk. - pub fn new(db: Arc, config: Config, metrics: Metrics) -> Self { + pub fn new( + db: Arc, + config: Config, + sync_oracle: Box, + metrics: Metrics, + ) -> Self { Self::with_pruning_config_and_clock( db, config, PruningConfig::default(), Box::new(SystemClock), + sync_oracle, metrics, ) } @@ -471,6 +479,7 @@ impl AvailabilityStoreSubsystem { config: Config, pruning_config: PruningConfig, clock: Box, + sync_oracle: Box, metrics: Metrics, ) -> Self { Self { @@ -480,6 +489,7 @@ impl AvailabilityStoreSubsystem { metrics, clock, known_blocks: KnownUnfinalizedBlocks::default(), + sync_oracle, finalized_number: None, } } @@ -570,6 +580,19 @@ async fn run_iteration( FromOrchestra::Signal(OverseerSignal::BlockFinalized(hash, number)) => { let _timer = subsystem.metrics.time_process_block_finalized(); + if !subsystem.known_blocks.is_known(&hash) { + // If we haven't processed this block yet, + // make sure we write the metadata about the + // candidates backed in this finalized block. + // Otherwise, we won't be able to store our chunk + // for these candidates. + if !subsystem.sync_oracle.is_major_syncing() { + // If we're major syncing, processing finalized + // blocks might take quite a very long time + // and make the subsystem unresponsive. + process_block_activated(ctx, subsystem, hash).await?; + } + } subsystem.finalized_number = Some(number); subsystem.known_blocks.prune_finalized(number); process_block_finalized( diff --git a/node/core/av-store/src/tests.rs b/node/core/av-store/src/tests.rs index 0a855bb88057..e26a3507480b 100644 --- a/node/core/av-store/src/tests.rs +++ b/node/core/av-store/src/tests.rs @@ -30,7 +30,7 @@ use polkadot_node_subsystem::{ }; use polkadot_node_subsystem_test_helpers as test_helpers; use polkadot_node_subsystem_util::{database::Database, TimeoutExt}; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ CandidateHash, CandidateReceipt, CoreIndex, GroupIndex, HeadData, Header, PersistedValidationData, ValidatorId, }; @@ -103,6 +103,18 @@ impl Default for TestState { } } +struct NoSyncOracle; + +impl sp_consensus::SyncOracle for NoSyncOracle { + fn is_major_syncing(&self) -> bool { + false + } + + fn is_offline(&self) -> bool { + unimplemented!("not used") + } +} + fn test_harness>( state: TestState, store: Arc, @@ -122,6 +134,7 @@ fn test_harness>( TEST_CONFIG, state.pruning_config.clone(), Box::new(state.clock), + Box::new(NoSyncOracle), Metrics::default(), ); @@ -732,8 +745,49 @@ fn we_dont_miss_anything_if_import_notifications_are_missed() { let test_state = TestState::default(); test_harness(test_state.clone(), store.clone(), |mut virtual_overseer| async move { - overseer_signal(&mut virtual_overseer, OverseerSignal::BlockFinalized(Hash::zero(), 1)) - .await; + let block_hash = Hash::repeat_byte(1); + overseer_signal(&mut virtual_overseer, OverseerSignal::BlockFinalized(block_hash, 1)).await; + + let header = Header { + parent_hash: Hash::repeat_byte(0), + number: 1, + state_root: Hash::zero(), + extrinsics_root: Hash::zero(), + digest: Default::default(), + }; + + assert_matches!( + overseer_recv(&mut virtual_overseer).await, + AllMessages::ChainApi(ChainApiMessage::BlockHeader( + relay_parent, + tx, + )) => { + assert_eq!(relay_parent, block_hash); + tx.send(Ok(Some(header))).unwrap(); + } + ); + + assert_matches!( + overseer_recv(&mut virtual_overseer).await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::CandidateEvents(tx), + )) => { + assert_eq!(relay_parent, block_hash); + tx.send(Ok(Vec::new())).unwrap(); + } + ); + + assert_matches!( + overseer_recv(&mut virtual_overseer).await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::Validators(tx), + )) => { + assert_eq!(relay_parent, Hash::zero()); + tx.send(Ok(Vec::new())).unwrap(); + } + ); let header = Header { parent_hash: Hash::repeat_byte(3), diff --git a/node/core/backing/Cargo.toml b/node/core/backing/Cargo.toml index 2fb3902f321e..8d3c68e1cae6 100644 --- a/node/core/backing/Cargo.toml +++ b/node/core/backing/Cargo.toml @@ -6,7 +6,7 @@ edition.workspace = true [dependencies] futures = "0.3.21" -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } polkadot-primitives = { path = "../../../primitives" } polkadot-node-primitives = { path = "../../primitives" } polkadot-node-subsystem = {path = "../../subsystem" } @@ -19,11 +19,11 @@ thiserror = "1.0.31" fatality = "0.0.6" [dev-dependencies] -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } futures = { version = "0.3.21", features = ["thread-pool"] } assert_matches = "1.4.0" polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } diff --git a/node/core/backing/src/error.rs b/node/core/backing/src/error.rs index 604c6c0a0c37..36d4f859a0a8 100644 --- a/node/core/backing/src/error.rs +++ b/node/core/backing/src/error.rs @@ -19,7 +19,7 @@ use futures::channel::{mpsc, oneshot}; use polkadot_node_subsystem::{messages::ValidationFailed, SubsystemError}; use polkadot_node_subsystem_util::Error as UtilError; -use polkadot_primitives::v2::BackedCandidate; +use polkadot_primitives::BackedCandidate; use crate::LOG_TARGET; diff --git a/node/core/backing/src/lib.rs b/node/core/backing/src/lib.rs index 2f8aa4490f27..520c466af6f8 100644 --- a/node/core/backing/src/lib.rs +++ b/node/core/backing/src/lib.rs @@ -32,7 +32,6 @@ use futures::{ use error::{Error, FatalResult}; use polkadot_node_primitives::{ AvailableData, InvalidCandidate, PoV, SignedFullStatement, Statement, ValidationResult, - BACKING_EXECUTION_TIMEOUT, }; use polkadot_node_subsystem::{ jaeger, @@ -48,10 +47,10 @@ use polkadot_node_subsystem_util::{ self as util, request_from_runtime, request_session_index_for_child, request_validator_groups, request_validators, Validator, }; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ BackedCandidate, CandidateCommitments, CandidateHash, CandidateReceipt, CollatorId, - CommittedCandidateReceipt, CoreIndex, CoreState, Hash, Id as ParaId, SigningContext, - ValidatorId, ValidatorIndex, ValidatorSignature, ValidityAttestation, + CommittedCandidateReceipt, CoreIndex, CoreState, Hash, Id as ParaId, PvfExecTimeoutKind, + SigningContext, ValidatorId, ValidatorIndex, ValidatorSignature, ValidityAttestation, }; use sp_keystore::SyncCryptoStorePtr; use statement_table::{ @@ -587,7 +586,7 @@ async fn make_pov_available( n_validators: usize, pov: Arc, candidate_hash: CandidateHash, - validation_data: polkadot_primitives::v2::PersistedValidationData, + validation_data: polkadot_primitives::PersistedValidationData, expected_erasure_root: Hash, span: Option<&jaeger::Span>, ) -> Result, Error> { @@ -650,7 +649,7 @@ async fn request_candidate_validation( .send_message(CandidateValidationMessage::ValidateFromChainState( candidate_receipt, pov, - BACKING_EXECUTION_TIMEOUT, + PvfExecTimeoutKind::Backing, tx, )) .await; @@ -774,7 +773,7 @@ async fn validate_and_make_available( Err(candidate) }, ValidationResult::Invalid(reason) => { - gum::debug!( + gum::warn!( target: LOG_TARGET, candidate_hash = ?candidate.hash(), reason = ?reason, diff --git a/node/core/backing/src/tests.rs b/node/core/backing/src/tests.rs index 24f671ec5371..96e8c809ec6c 100644 --- a/node/core/backing/src/tests.rs +++ b/node/core/backing/src/tests.rs @@ -30,9 +30,9 @@ use polkadot_node_subsystem::{ ActivatedLeaf, ActiveLeavesUpdate, FromOrchestra, LeafStatus, OverseerSignal, }; use polkadot_node_subsystem_test_helpers as test_helpers; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ CandidateDescriptor, CollatorId, GroupRotationInfo, HeadData, PersistedValidationData, - ScheduledCore, + PvfExecTimeoutKind, ScheduledCore, }; use sp_application_crypto::AppKey; use sp_keyring::Sr25519Keyring; @@ -202,8 +202,8 @@ impl TestCandidateBuilder { }, commitments: CandidateCommitments { head_data: self.head_data, - upward_messages: vec![], - horizontal_messages: vec![], + upward_messages: Default::default(), + horizontal_messages: Default::default(), new_validation_code: None, processed_downward_messages: 0, hrmp_watermark: 0_u32, @@ -307,12 +307,12 @@ fn backing_second_works() { timeout, tx, ) - ) if pov == pov && &candidate_receipt.descriptor == candidate.descriptor() && timeout == BACKING_EXECUTION_TIMEOUT && candidate.commitments.hash() == candidate_receipt.commitments_hash => { + ) if pov == pov && &candidate_receipt.descriptor == candidate.descriptor() && timeout == PvfExecTimeoutKind::Backing && candidate.commitments.hash() == candidate_receipt.commitments_hash => { tx.send(Ok( ValidationResult::Valid(CandidateCommitments { head_data: expected_head_data.clone(), - horizontal_messages: Vec::new(), - upward_messages: Vec::new(), + horizontal_messages: Default::default(), + upward_messages: Default::default(), new_validation_code: None, processed_downward_messages: 0, hrmp_watermark: 0, @@ -453,12 +453,12 @@ fn backing_works() { timeout, tx, ) - ) if pov == pov && c.descriptor() == candidate_a.descriptor() && timeout == BACKING_EXECUTION_TIMEOUT && c.commitments_hash == candidate_a_commitments_hash=> { + ) if pov == pov && c.descriptor() == candidate_a.descriptor() && timeout == PvfExecTimeoutKind::Backing && c.commitments_hash == candidate_a_commitments_hash=> { tx.send(Ok( ValidationResult::Valid(CandidateCommitments { head_data: expected_head_data.clone(), - upward_messages: Vec::new(), - horizontal_messages: Vec::new(), + upward_messages: Default::default(), + horizontal_messages: Default::default(), new_validation_code: None, processed_downward_messages: 0, hrmp_watermark: 0, @@ -625,7 +625,7 @@ fn backing_works_while_validation_ongoing() { timeout, tx, ) - ) if pov == pov && c.descriptor() == candidate_a.descriptor() && timeout == BACKING_EXECUTION_TIMEOUT && candidate_a_commitments_hash == c.commitments_hash => { + ) if pov == pov && c.descriptor() == candidate_a.descriptor() && timeout == PvfExecTimeoutKind::Backing && candidate_a_commitments_hash == c.commitments_hash => { // we never validate the candidate. our local node // shouldn't issue any statements. std::mem::forget(tx); @@ -777,12 +777,12 @@ fn backing_misbehavior_works() { timeout, tx, ) - ) if pov == pov && c.descriptor() == candidate_a.descriptor() && timeout == BACKING_EXECUTION_TIMEOUT && candidate_a_commitments_hash == c.commitments_hash => { + ) if pov == pov && c.descriptor() == candidate_a.descriptor() && timeout == PvfExecTimeoutKind::Backing && candidate_a_commitments_hash == c.commitments_hash => { tx.send(Ok( ValidationResult::Valid(CandidateCommitments { head_data: expected_head_data.clone(), - upward_messages: Vec::new(), - horizontal_messages: Vec::new(), + upward_messages: Default::default(), + horizontal_messages: Default::default(), new_validation_code: None, processed_downward_messages: 0, hrmp_watermark: 0, @@ -921,7 +921,7 @@ fn backing_dont_second_invalid() { timeout, tx, ) - ) if pov == pov && c.descriptor() == candidate_a.descriptor() && timeout == BACKING_EXECUTION_TIMEOUT => { + ) if pov == pov && c.descriptor() == candidate_a.descriptor() && timeout == PvfExecTimeoutKind::Backing => { tx.send(Ok(ValidationResult::Invalid(InvalidCandidate::BadReturn))).unwrap(); } ); @@ -950,12 +950,12 @@ fn backing_dont_second_invalid() { timeout, tx, ) - ) if pov == pov && c.descriptor() == candidate_b.descriptor() && timeout == BACKING_EXECUTION_TIMEOUT => { + ) if pov == pov && c.descriptor() == candidate_b.descriptor() && timeout == PvfExecTimeoutKind::Backing => { tx.send(Ok( ValidationResult::Valid(CandidateCommitments { head_data: expected_head_data.clone(), - upward_messages: Vec::new(), - horizontal_messages: Vec::new(), + upward_messages: Default::default(), + horizontal_messages: Default::default(), new_validation_code: None, processed_downward_messages: 0, hrmp_watermark: 0, @@ -1065,7 +1065,7 @@ fn backing_second_after_first_fails_works() { timeout, tx, ) - ) if pov == pov && c.descriptor() == candidate.descriptor() && timeout == BACKING_EXECUTION_TIMEOUT && c.commitments_hash == candidate.commitments.hash() => { + ) if pov == pov && c.descriptor() == candidate.descriptor() && timeout == PvfExecTimeoutKind::Backing && c.commitments_hash == candidate.commitments.hash() => { tx.send(Ok(ValidationResult::Invalid(InvalidCandidate::BadReturn))).unwrap(); } ); @@ -1191,7 +1191,7 @@ fn backing_works_after_failed_validation() { timeout, tx, ) - ) if pov == pov && c.descriptor() == candidate.descriptor() && timeout == BACKING_EXECUTION_TIMEOUT && c.commitments_hash == candidate.commitments.hash() => { + ) if pov == pov && c.descriptor() == candidate.descriptor() && timeout == PvfExecTimeoutKind::Backing && c.commitments_hash == candidate.commitments.hash() => { tx.send(Err(ValidationFailed("Internal test error".into()))).unwrap(); } ); @@ -1544,7 +1544,7 @@ fn retry_works() { timeout, _tx, ) - ) if pov == pov && c.descriptor() == candidate.descriptor() && timeout == BACKING_EXECUTION_TIMEOUT && c.commitments_hash == candidate.commitments.hash() + ) if pov == pov && c.descriptor() == candidate.descriptor() && timeout == PvfExecTimeoutKind::Backing && c.commitments_hash == candidate.commitments.hash() ); virtual_overseer }); diff --git a/node/core/bitfield-signing/Cargo.toml b/node/core/bitfield-signing/Cargo.toml index 9dc391f9bbbf..2a20a09c16d2 100644 --- a/node/core/bitfield-signing/Cargo.toml +++ b/node/core/bitfield-signing/Cargo.toml @@ -10,7 +10,7 @@ gum = { package = "tracing-gum", path = "../../gum" } polkadot-primitives = { path = "../../../primitives" } polkadot-node-subsystem = { path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } wasm-timer = "0.2.5" thiserror = "1.0.31" diff --git a/node/core/bitfield-signing/src/lib.rs b/node/core/bitfield-signing/src/lib.rs index 64cbb18cc44c..5de75cadf12e 100644 --- a/node/core/bitfield-signing/src/lib.rs +++ b/node/core/bitfield-signing/src/lib.rs @@ -36,7 +36,7 @@ use polkadot_node_subsystem::{ SpawnedSubsystem, SubsystemError, SubsystemResult, SubsystemSender, }; use polkadot_node_subsystem_util::{self as util, Validator}; -use polkadot_primitives::v2::{AvailabilityBitfield, CoreState, Hash, ValidatorIndex}; +use polkadot_primitives::{AvailabilityBitfield, CoreState, Hash, ValidatorIndex}; use sp_keystore::{Error as KeystoreError, SyncCryptoStorePtr}; use std::{collections::HashMap, iter::FromIterator, time::Duration}; use wasm_timer::{Delay, Instant}; diff --git a/node/core/bitfield-signing/src/tests.rs b/node/core/bitfield-signing/src/tests.rs index 19777c29157f..99b8c4f22b52 100644 --- a/node/core/bitfield-signing/src/tests.rs +++ b/node/core/bitfield-signing/src/tests.rs @@ -17,7 +17,7 @@ use super::*; use futures::{executor::block_on, pin_mut, StreamExt}; use polkadot_node_subsystem::messages::AllMessages; -use polkadot_primitives::v2::{CandidateHash, OccupiedCore}; +use polkadot_primitives::{CandidateHash, OccupiedCore}; use test_helpers::dummy_candidate_descriptor; fn occupied_core(para_id: u32, candidate_hash: CandidateHash) -> CoreState { diff --git a/node/core/candidate-validation/Cargo.toml b/node/core/candidate-validation/Cargo.toml index 545f42059b6b..5458dc5fec11 100644 --- a/node/core/candidate-validation/Cargo.toml +++ b/node/core/candidate-validation/Cargo.toml @@ -10,22 +10,23 @@ futures = "0.3.21" futures-timer = "3.0.2" gum = { package = "tracing-gum", path = "../../gum" } -sp-maybe-compressed-blob = { package = "sp-maybe-compressed-blob", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["bit-vec", "derive"] } +sp-maybe-compressed-blob = { package = "sp-maybe-compressed-blob", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["bit-vec", "derive"] } polkadot-primitives = { path = "../../../primitives" } polkadot-parachain = { path = "../../../parachain" } polkadot-node-primitives = { path = "../../primitives" } -polkadot-node-subsystem = {path = "../../subsystem" } +polkadot-node-subsystem = { path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } +polkadot-node-metrics = { path = "../../metrics" } [target.'cfg(not(any(target_os = "android", target_os = "unknown")))'.dependencies] polkadot-node-core-pvf = { path = "../pvf" } [dev-dependencies] -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } futures = { version = "0.3.21", features = ["thread-pool"] } assert_matches = "1.4.0" polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } test-helpers = { package = "polkadot-primitives-test-helpers", path = "../../../primitives/test-helpers" } diff --git a/node/core/candidate-validation/src/lib.rs b/node/core/candidate-validation/src/lib.rs index 74610bc113ec..a1c939b236ac 100644 --- a/node/core/candidate-validation/src/lib.rs +++ b/node/core/candidate-validation/src/lib.rs @@ -24,7 +24,8 @@ #![warn(missing_docs)] use polkadot_node_core_pvf::{ - InvalidCandidate as WasmInvalidCandidate, PrepareError, Pvf, ValidationError, ValidationHost, + InvalidCandidate as WasmInvalidCandidate, PrepareError, PrepareStats, PvfPrepData, + ValidationError, ValidationHost, }; use polkadot_node_primitives::{ BlockData, InvalidCandidate, PoV, ValidationResult, POV_BOMB_LIMIT, VALIDATION_CODE_BOMB_LIMIT, @@ -38,10 +39,12 @@ use polkadot_node_subsystem::{ overseer, FromOrchestra, OverseerSignal, SpawnedSubsystem, SubsystemError, SubsystemResult, SubsystemSender, }; +use polkadot_node_subsystem_util::executor_params_at_relay_parent; use polkadot_parachain::primitives::{ValidationParams, ValidationResult as WasmValidationResult}; -use polkadot_primitives::v2::{ - CandidateCommitments, CandidateDescriptor, CandidateReceipt, Hash, OccupiedCoreAssumption, - PersistedValidationData, ValidationCode, ValidationCodeHash, +use polkadot_primitives::{ + vstaging::ExecutorParams, CandidateCommitments, CandidateDescriptor, CandidateReceipt, Hash, + OccupiedCoreAssumption, PersistedValidationData, PvfExecTimeoutKind, PvfPrepTimeoutKind, + ValidationCode, ValidationCodeHash, }; use parity_scale_codec::Encode; @@ -66,6 +69,13 @@ const PVF_EXECUTION_RETRY_DELAY: Duration = Duration::from_secs(3); #[cfg(test)] const PVF_EXECUTION_RETRY_DELAY: Duration = Duration::from_millis(200); +// Default PVF timeouts. Must never be changed! Use executor environment parameters in +// `session_info` pallet to adjust them. See also `PvfTimeoutKind` docs. +const DEFAULT_PRECHECK_PREPARATION_TIMEOUT: Duration = Duration::from_secs(60); +const DEFAULT_LENIENT_PREPARATION_TIMEOUT: Duration = Duration::from_secs(360); +const DEFAULT_BACKING_EXECUTION_TIMEOUT: Duration = Duration::from_secs(2); +const DEFAULT_APPROVAL_EXECUTION_TIMEOUT: Duration = Duration::from_secs(12); + /// Configuration for the candidate validation subsystem #[derive(Clone)] pub struct Config { @@ -174,12 +184,14 @@ async fn run( response_sender, ) => { let bg = { + let mut sender = ctx.sender().clone(); let metrics = metrics.clone(); let validation_host = validation_host.clone(); async move { let _timer = metrics.time_validate_from_exhaustive(); let res = validate_candidate_exhaustive( + &mut sender, validation_host, persisted_validation_data, validation_code, @@ -295,8 +307,7 @@ where _ => { // The reasoning why this is "failed" and not invalid is because we assume that // during pre-checking voting the relay-chain will pin the code. In case the code - // actually is not there, we issue failed since this looks more like a bug. This - // leads to us abstaining. + // actually is not there, we issue failed since this looks more like a bug. gum::warn!( target: LOG_TARGET, ?relay_parent, @@ -307,25 +318,47 @@ where }, }; - let validation_code = match sp_maybe_compressed_blob::decompress( + let executor_params = + if let Ok(executor_params) = executor_params_at_relay_parent(relay_parent, sender).await { + gum::debug!( + target: LOG_TARGET, + ?relay_parent, + ?validation_code_hash, + "precheck: acquired executor params for the session: {:?}", + executor_params, + ); + executor_params + } else { + gum::warn!( + target: LOG_TARGET, + ?relay_parent, + ?validation_code_hash, + "precheck: failed to acquire executor params for the session, thus voting against.", + ); + return PreCheckOutcome::Invalid + }; + + let timeout = pvf_prep_timeout(&executor_params, PvfPrepTimeoutKind::Precheck); + + let pvf = match sp_maybe_compressed_blob::decompress( &validation_code.0, VALIDATION_CODE_BOMB_LIMIT, ) { - Ok(code) => Pvf::from_code(code.into_owned()), + Ok(code) => PvfPrepData::from_code(code.into_owned(), executor_params, timeout), Err(e) => { gum::debug!(target: LOG_TARGET, err=?e, "precheck: cannot decompress validation code"); return PreCheckOutcome::Invalid }, }; - match validation_backend.precheck_pvf(validation_code).await { + match validation_backend.precheck_pvf(pvf).await { Ok(_) => PreCheckOutcome::Valid, - Err(prepare_err) => match prepare_err { - PrepareError::Prevalidation(_) | - PrepareError::Preparation(_) | - PrepareError::Panic(_) => PreCheckOutcome::Invalid, - PrepareError::TimedOut | PrepareError::DidNotMakeIt => PreCheckOutcome::Failed, - }, + Err(prepare_err) => + if prepare_err.is_deterministic() { + PreCheckOutcome::Invalid + } else { + PreCheckOutcome::Failed + }, } } @@ -442,7 +475,7 @@ async fn validate_from_chain_state( validation_host: ValidationHost, candidate_receipt: CandidateReceipt, pov: Arc, - timeout: Duration, + exec_timeout_kind: PvfExecTimeoutKind, metrics: &Metrics, ) -> Result where @@ -456,12 +489,13 @@ where }; let validation_result = validate_candidate_exhaustive( + sender, validation_host, validation_data, validation_code, candidate_receipt.clone(), pov, - timeout, + exec_timeout_kind, metrics, ) .await; @@ -490,15 +524,19 @@ where validation_result } -async fn validate_candidate_exhaustive( +async fn validate_candidate_exhaustive( + sender: &mut Sender, mut validation_backend: impl ValidationBackend + Send, persisted_validation_data: PersistedValidationData, validation_code: ValidationCode, candidate_receipt: CandidateReceipt, pov: Arc, - timeout: Duration, + exec_timeout_kind: PvfExecTimeoutKind, metrics: &Metrics, -) -> Result { +) -> Result +where + Sender: SubsystemSender, +{ let _timer = metrics.time_validate_candidate_exhaustive(); let validation_code_hash = validation_code.hash(); @@ -528,10 +566,12 @@ async fn validate_candidate_exhaustive( Err(e) => { gum::info!(target: LOG_TARGET, ?para_id, err=?e, "Invalid candidate (validation code)"); - // If the validation code is invalid, the candidate certainly is. - return Ok(ValidationResult::Invalid(InvalidCandidate::CodeDecompressionFailure)) + // Code already passed pre-checking, if decompression fails now this most likley means + // some local corruption happened. + return Err(ValidationFailed("Code decompression failed".to_string())) }, }; + metrics.observe_code_size(raw_validation_code.len()); let raw_block_data = match sp_maybe_compressed_blob::decompress(&pov.block_data.0, POV_BOMB_LIMIT) { @@ -543,6 +583,7 @@ async fn validate_candidate_exhaustive( return Ok(ValidationResult::Invalid(InvalidCandidate::PoVDecompressionFailure)) }, }; + metrics.observe_pov_size(raw_block_data.0.len()); let params = ValidationParams { parent_head: persisted_validation_data.parent_head.clone(), @@ -551,17 +592,42 @@ async fn validate_candidate_exhaustive( relay_parent_storage_root: persisted_validation_data.relay_parent_storage_root, }; + let executor_params = if let Ok(executor_params) = + executor_params_at_relay_parent(candidate_receipt.descriptor.relay_parent, sender).await + { + gum::debug!( + target: LOG_TARGET, + ?validation_code_hash, + ?para_id, + "Acquired executor params for the session: {:?}", + executor_params, + ); + executor_params + } else { + gum::warn!( + target: LOG_TARGET, + ?validation_code_hash, + ?para_id, + "Failed to acquire executor params for the session", + ); + return Ok(ValidationResult::Invalid(InvalidCandidate::BadParent)) + }; + let result = validation_backend - .validate_candidate_with_retry(raw_validation_code.to_vec(), timeout, params) + .validate_candidate_with_retry( + raw_validation_code.to_vec(), + pvf_exec_timeout(&executor_params, exec_timeout_kind), + params, + executor_params, + ) .await; if let Err(ref error) = result { - gum::info!(target: LOG_TARGET, ?para_id, ?error, "Failed to validate candidate",); + gum::info!(target: LOG_TARGET, ?para_id, ?error, "Failed to validate candidate"); } match result { Err(ValidationError::InternalError(e)) => Err(ValidationFailed(e)), - Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::HardTimeout)) => Ok(ValidationResult::Invalid(InvalidCandidate::Timeout)), Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::WorkerReportedError(e))) => @@ -570,9 +636,20 @@ async fn validate_candidate_exhaustive( Ok(ValidationResult::Invalid(InvalidCandidate::ExecutionError( "ambiguous worker death".to_string(), ))), - Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::PrepareError(e))) => - Ok(ValidationResult::Invalid(InvalidCandidate::ExecutionError(e))), - + Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::PrepareError(e))) => { + // In principle if preparation of the `WASM` fails, the current candidate can not be the + // reason for that. So we can't say whether it is invalid or not. In addition, with + // pre-checking enabled only valid runtimes should ever get enacted, so we can be + // reasonably sure that this is some local problem on the current node. However, as this + // particular error *seems* to indicate a deterministic error, we raise a warning. + gum::warn!( + target: LOG_TARGET, + ?para_id, + ?e, + "Deterministic error occurred during preparation (should have been ruled out by pre-checking phase)", + ); + Err(ValidationFailed(e)) + }, Ok(res) => if res.head_data.hash() != candidate_receipt.descriptor.para_head { gum::info!(target: LOG_TARGET, ?para_id, "Invalid candidate (para_head)"); @@ -604,41 +681,54 @@ async fn validate_candidate_exhaustive( #[async_trait] trait ValidationBackend { + /// Tries executing a PVF a single time (no retries). async fn validate_candidate( &mut self, - pvf: Pvf, - timeout: Duration, + pvf: PvfPrepData, + exec_timeout: Duration, encoded_params: Vec, ) -> Result; + /// Tries executing a PVF. Will retry once if an error is encountered that may have been + /// transient. async fn validate_candidate_with_retry( &mut self, raw_validation_code: Vec, - timeout: Duration, + exec_timeout: Duration, params: ValidationParams, + executor_params: ExecutorParams, ) -> Result { // Construct the PVF a single time, since it is an expensive operation. Cloning it is cheap. - let pvf = Pvf::from_code(raw_validation_code); + let prep_timeout = pvf_prep_timeout(&executor_params, PvfPrepTimeoutKind::Lenient); + let pvf = PvfPrepData::from_code(raw_validation_code, executor_params, prep_timeout); - let validation_result = - self.validate_candidate(pvf.clone(), timeout, params.encode()).await; + let mut validation_result = + self.validate_candidate(pvf.clone(), exec_timeout, params.encode()).await; // If we get an AmbiguousWorkerDeath error, retry once after a brief delay, on the - // assumption that the conditions that caused this error may have been transient. + // assumption that the conditions that caused this error may have been transient. Note that + // this error is only a result of execution itself and not of preparation. if let Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::AmbiguousWorkerDeath)) = validation_result { // Wait a brief delay before retrying. futures_timer::Delay::new(PVF_EXECUTION_RETRY_DELAY).await; + + gum::warn!( + target: LOG_TARGET, + ?pvf, + "Re-trying failed candidate validation due to AmbiguousWorkerDeath." + ); + // Encode the params again when re-trying. We expect the retry case to be relatively // rare, and we want to avoid unconditionally cloning data. - self.validate_candidate(pvf, timeout, params.encode()).await - } else { - validation_result + validation_result = self.validate_candidate(pvf, exec_timeout, params.encode()).await; } + + validation_result } - async fn precheck_pvf(&mut self, pvf: Pvf) -> Result; + async fn precheck_pvf(&mut self, pvf: PvfPrepData) -> Result; } #[async_trait] @@ -646,14 +736,14 @@ impl ValidationBackend for ValidationHost { /// Tries executing a PVF a single time (no retries). async fn validate_candidate( &mut self, - pvf: Pvf, - timeout: Duration, + pvf: PvfPrepData, + exec_timeout: Duration, encoded_params: Vec, ) -> Result { let priority = polkadot_node_core_pvf::Priority::Normal; let (tx, rx) = oneshot::channel(); - if let Err(err) = self.execute_pvf(pvf, timeout, encoded_params, priority, tx).await { + if let Err(err) = self.execute_pvf(pvf, exec_timeout, encoded_params, priority, tx).await { return Err(ValidationError::InternalError(format!( "cannot send pvf to the validation host: {:?}", err @@ -664,13 +754,14 @@ impl ValidationBackend for ValidationHost { .map_err(|_| ValidationError::InternalError("validation was cancelled".into()))? } - async fn precheck_pvf(&mut self, pvf: Pvf) -> Result { + async fn precheck_pvf(&mut self, pvf: PvfPrepData) -> Result { let (tx, rx) = oneshot::channel(); - if let Err(_) = self.precheck_pvf(pvf, tx).await { - return Err(PrepareError::DidNotMakeIt) + if let Err(err) = self.precheck_pvf(pvf, tx).await { + // Return an IO error if there was an error communicating with the host. + return Err(PrepareError::IoErr(err)) } - let precheck_result = rx.await.or(Err(PrepareError::DidNotMakeIt))?; + let precheck_result = rx.await.map_err(|err| PrepareError::IoErr(err.to_string()))?; precheck_result } @@ -705,3 +796,23 @@ fn perform_basic_checks( Ok(()) } + +fn pvf_prep_timeout(executor_params: &ExecutorParams, kind: PvfPrepTimeoutKind) -> Duration { + if let Some(timeout) = executor_params.pvf_prep_timeout(kind) { + return timeout + } + match kind { + PvfPrepTimeoutKind::Precheck => DEFAULT_PRECHECK_PREPARATION_TIMEOUT, + PvfPrepTimeoutKind::Lenient => DEFAULT_LENIENT_PREPARATION_TIMEOUT, + } +} + +fn pvf_exec_timeout(executor_params: &ExecutorParams, kind: PvfExecTimeoutKind) -> Duration { + if let Some(timeout) = executor_params.pvf_exec_timeout(kind) { + return timeout + } + match kind { + PvfExecTimeoutKind::Backing => DEFAULT_BACKING_EXECUTION_TIMEOUT, + PvfExecTimeoutKind::Approval => DEFAULT_APPROVAL_EXECUTION_TIMEOUT, + } +} diff --git a/node/core/candidate-validation/src/metrics.rs b/node/core/candidate-validation/src/metrics.rs index 64112c6a387b..f20d70a855c6 100644 --- a/node/core/candidate-validation/src/metrics.rs +++ b/node/core/candidate-validation/src/metrics.rs @@ -15,7 +15,7 @@ // along with Polkadot. If not, see . use super::{ValidationFailed, ValidationResult}; -use polkadot_node_subsystem_util::metrics::{self, prometheus}; +use polkadot_node_metrics::metrics::{self, prometheus}; #[derive(Clone)] pub(crate) struct MetricsInner { @@ -23,6 +23,8 @@ pub(crate) struct MetricsInner { pub(crate) validate_from_chain_state: prometheus::Histogram, pub(crate) validate_from_exhaustive: prometheus::Histogram, pub(crate) validate_candidate_exhaustive: prometheus::Histogram, + pub(crate) pov_size: prometheus::Histogram, + pub(crate) code_size: prometheus::Histogram, } /// Candidate validation metrics. @@ -68,6 +70,18 @@ impl Metrics { .as_ref() .map(|metrics| metrics.validate_candidate_exhaustive.start_timer()) } + + pub fn observe_code_size(&self, code_size: usize) { + if let Some(metrics) = &self.0 { + metrics.code_size.observe(code_size as f64); + } + } + + pub fn observe_pov_size(&self, pov_size: usize) { + if let Some(metrics) = &self.0 { + metrics.pov_size.observe(pov_size as f64); + } + } } impl metrics::Metrics for Metrics { @@ -104,6 +118,32 @@ impl metrics::Metrics for Metrics { ))?, registry, )?, + pov_size: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "polkadot_parachain_candidate_validation_pov_size", + "The size of the decompressed proof of validity of a candidate", + ) + .buckets( + prometheus::exponential_buckets(16384.0, 2.0, 10) + .expect("arguments are always valid; qed"), + ), + )?, + registry, + )?, + code_size: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "polkadot_parachain_candidate_validation_code_size", + "The size of the decompressed WASM validation blob used for checking a candidate", + ) + .buckets( + prometheus::exponential_buckets(16384.0, 2.0, 10) + .expect("arguments are always valid; qed"), + ), + )?, + registry, + )?, }; Ok(Metrics(Some(metrics))) } diff --git a/node/core/candidate-validation/src/tests.rs b/node/core/candidate-validation/src/tests.rs index 5ac93bc7d1f4..9e920f0e9746 100644 --- a/node/core/candidate-validation/src/tests.rs +++ b/node/core/candidate-validation/src/tests.rs @@ -22,10 +22,41 @@ use polkadot_node_core_pvf::PrepareError; use polkadot_node_subsystem::messages::AllMessages; use polkadot_node_subsystem_test_helpers as test_helpers; use polkadot_node_subsystem_util::reexports::SubsystemContext; -use polkadot_primitives::v2::{HeadData, Id as ParaId, UpwardMessage}; +use polkadot_primitives::{HeadData, Id as ParaId, UpwardMessage}; use sp_core::testing::TaskExecutor; use sp_keyring::Sr25519Keyring; +fn test_with_executor_params, R, M>( + mut ctx_handle: test_helpers::TestSubsystemContextHandle, + test: impl FnOnce() -> T, +) -> R { + let test_fut = test(); + + let overseer = async move { + assert_matches!( + ctx_handle.recv().await, + AllMessages::RuntimeApi( + RuntimeApiMessage::Request(_, RuntimeApiRequest::SessionIndexForChild(tx)) + ) => { + tx.send(Ok(1u32.into())).unwrap(); + } + ); + assert_matches!( + ctx_handle.recv().await, + AllMessages::RuntimeApi( + RuntimeApiMessage::Request(_, RuntimeApiRequest::SessionExecutorParams(_, tx)) + ) => { + tx.send(Ok(Some(ExecutorParams::default()))).unwrap(); + } + ); + }; + + futures::pin_mut!(test_fut); + futures::pin_mut!(overseer); + let v = executor::block_on(future::join(test_fut, overseer)); + v.0 +} + #[test] fn correctly_checks_included_assumption() { let validation_data: PersistedValidationData = Default::default(); @@ -365,7 +396,7 @@ impl MockValidateCandidateBackend { impl ValidationBackend for MockValidateCandidateBackend { async fn validate_candidate( &mut self, - _pvf: Pvf, + _pvf: PvfPrepData, _timeout: Duration, _encoded_params: Vec, ) -> Result { @@ -377,7 +408,7 @@ impl ValidationBackend for MockValidateCandidateBackend { result } - async fn precheck_pvf(&mut self, _pvf: Pvf) -> Result { + async fn precheck_pvf(&mut self, _pvf: PvfPrepData) -> Result { unreachable!() } } @@ -412,8 +443,8 @@ fn candidate_validation_ok_is_ok() { let validation_result = WasmValidationResult { head_data, new_validation_code: Some(vec![2, 2, 2].into()), - upward_messages: Vec::new(), - horizontal_messages: Vec::new(), + upward_messages: Default::default(), + horizontal_messages: Default::default(), processed_downward_messages: 0, hrmp_watermark: 0, }; @@ -429,15 +460,23 @@ fn candidate_validation_ok_is_ok() { let candidate_receipt = CandidateReceipt { descriptor, commitments_hash: commitments.hash() }; - let v = executor::block_on(validate_candidate_exhaustive( - MockValidateCandidateBackend::with_hardcoded_result(Ok(validation_result)), - validation_data.clone(), - validation_code, - candidate_receipt, - Arc::new(pov), - Duration::from_secs(0), - &Default::default(), - )) + let pool = TaskExecutor::new(); + let (mut ctx, ctx_handle) = + test_helpers::make_subsystem_context::(pool.clone()); + let metrics = Metrics::default(); + + let v = test_with_executor_params(ctx_handle, || { + validate_candidate_exhaustive( + ctx.sender(), + MockValidateCandidateBackend::with_hardcoded_result(Ok(validation_result)), + validation_data.clone(), + validation_code, + candidate_receipt, + Arc::new(pov), + PvfExecTimeoutKind::Backing, + &metrics, + ) + }) .unwrap(); assert_matches!(v, ValidationResult::Valid(outputs, used_validation_data) => { @@ -478,20 +517,27 @@ fn candidate_validation_bad_return_is_invalid() { let candidate_receipt = CandidateReceipt { descriptor, commitments_hash: Hash::zero() }; - let v = executor::block_on(validate_candidate_exhaustive( - MockValidateCandidateBackend::with_hardcoded_result(Err( - ValidationError::InvalidCandidate(WasmInvalidCandidate::HardTimeout), - )), - validation_data, - validation_code, - candidate_receipt, - Arc::new(pov), - Duration::from_secs(0), - &Default::default(), - )) - .unwrap(); + let pool = TaskExecutor::new(); + let (mut ctx, ctx_handle) = + test_helpers::make_subsystem_context::(pool.clone()); + let metrics = Metrics::default(); - assert_matches!(v, ValidationResult::Invalid(InvalidCandidate::Timeout)); + let v = test_with_executor_params(ctx_handle, || { + validate_candidate_exhaustive( + ctx.sender(), + MockValidateCandidateBackend::with_hardcoded_result(Err( + ValidationError::InvalidCandidate(WasmInvalidCandidate::HardTimeout), + )), + validation_data, + validation_code, + candidate_receipt, + Arc::new(pov), + PvfExecTimeoutKind::Backing, + &metrics, + ) + }); + + assert_matches!(v, Ok(ValidationResult::Invalid(InvalidCandidate::Timeout))); } #[test] @@ -524,8 +570,8 @@ fn candidate_validation_one_ambiguous_error_is_valid() { let validation_result = WasmValidationResult { head_data, new_validation_code: Some(vec![2, 2, 2].into()), - upward_messages: Vec::new(), - horizontal_messages: Vec::new(), + upward_messages: Default::default(), + horizontal_messages: Default::default(), processed_downward_messages: 0, hrmp_watermark: 0, }; @@ -541,18 +587,26 @@ fn candidate_validation_one_ambiguous_error_is_valid() { let candidate_receipt = CandidateReceipt { descriptor, commitments_hash: commitments.hash() }; - let v = executor::block_on(validate_candidate_exhaustive( - MockValidateCandidateBackend::with_hardcoded_result_list(vec![ - Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::AmbiguousWorkerDeath)), - Ok(validation_result), - ]), - validation_data.clone(), - validation_code, - candidate_receipt, - Arc::new(pov), - Duration::from_secs(0), - &Default::default(), - )) + let pool = TaskExecutor::new(); + let (mut ctx, ctx_handle) = + test_helpers::make_subsystem_context::(pool.clone()); + let metrics = Metrics::default(); + + let v = test_with_executor_params(ctx_handle, || { + validate_candidate_exhaustive( + ctx.sender(), + MockValidateCandidateBackend::with_hardcoded_result_list(vec![ + Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::AmbiguousWorkerDeath)), + Ok(validation_result), + ]), + validation_data.clone(), + validation_code, + candidate_receipt, + Arc::new(pov), + PvfExecTimeoutKind::Backing, + &metrics, + ) + }) .unwrap(); assert_matches!(v, ValidationResult::Valid(outputs, used_validation_data) => { @@ -593,18 +647,26 @@ fn candidate_validation_multiple_ambiguous_errors_is_invalid() { let candidate_receipt = CandidateReceipt { descriptor, commitments_hash: Hash::zero() }; - let v = executor::block_on(validate_candidate_exhaustive( - MockValidateCandidateBackend::with_hardcoded_result_list(vec![ - Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::AmbiguousWorkerDeath)), - Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::AmbiguousWorkerDeath)), - ]), - validation_data, - validation_code, - candidate_receipt, - Arc::new(pov), - Duration::from_secs(0), - &Default::default(), - )) + let pool = TaskExecutor::new(); + let (mut ctx, ctx_handle) = + test_helpers::make_subsystem_context::(pool.clone()); + let metrics = Metrics::default(); + + let v = test_with_executor_params(ctx_handle, || { + validate_candidate_exhaustive( + ctx.sender(), + MockValidateCandidateBackend::with_hardcoded_result_list(vec![ + Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::AmbiguousWorkerDeath)), + Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::AmbiguousWorkerDeath)), + ]), + validation_data, + validation_code, + candidate_receipt, + Arc::new(pov), + PvfExecTimeoutKind::Backing, + &metrics, + ) + }) .unwrap(); assert_matches!(v, ValidationResult::Invalid(InvalidCandidate::ExecutionError(_))); @@ -638,17 +700,25 @@ fn candidate_validation_timeout_is_internal_error() { let candidate_receipt = CandidateReceipt { descriptor, commitments_hash: Hash::zero() }; - let v = executor::block_on(validate_candidate_exhaustive( - MockValidateCandidateBackend::with_hardcoded_result(Err( - ValidationError::InvalidCandidate(WasmInvalidCandidate::HardTimeout), - )), - validation_data, - validation_code, - candidate_receipt, - Arc::new(pov), - Duration::from_secs(0), - &Default::default(), - )); + let pool = TaskExecutor::new(); + let (mut ctx, ctx_handle) = + test_helpers::make_subsystem_context::(pool.clone()); + let metrics = Metrics::default(); + + let v = test_with_executor_params(ctx_handle, || { + validate_candidate_exhaustive( + ctx.sender(), + MockValidateCandidateBackend::with_hardcoded_result(Err( + ValidationError::InvalidCandidate(WasmInvalidCandidate::HardTimeout), + )), + validation_data, + validation_code, + candidate_receipt, + Arc::new(pov), + PvfExecTimeoutKind::Backing, + &metrics, + ) + }); assert_matches!(v, Ok(ValidationResult::Invalid(InvalidCandidate::Timeout))); } @@ -678,21 +748,29 @@ fn candidate_validation_commitment_hash_mismatch_is_invalid() { let validation_result = WasmValidationResult { head_data, new_validation_code: None, - upward_messages: Vec::new(), - horizontal_messages: Vec::new(), + upward_messages: Default::default(), + horizontal_messages: Default::default(), processed_downward_messages: 0, hrmp_watermark: 12345, }; - let result = executor::block_on(validate_candidate_exhaustive( - MockValidateCandidateBackend::with_hardcoded_result(Ok(validation_result)), - validation_data, - validation_code, - candidate_receipt, - Arc::new(pov), - Duration::from_secs(0), - &Default::default(), - )) + let pool = TaskExecutor::new(); + let (mut ctx, ctx_handle) = + test_helpers::make_subsystem_context::(pool.clone()); + let metrics = Metrics::default(); + + let result = test_with_executor_params(ctx_handle, || { + validate_candidate_exhaustive( + ctx.sender(), + MockValidateCandidateBackend::with_hardcoded_result(Ok(validation_result)), + validation_data, + validation_code, + candidate_receipt, + Arc::new(pov), + PvfExecTimeoutKind::Backing, + &metrics, + ) + }) .unwrap(); // Ensure `post validation` check on the commitments hash works as expected. @@ -727,7 +805,12 @@ fn candidate_validation_code_mismatch_is_invalid() { let candidate_receipt = CandidateReceipt { descriptor, commitments_hash: Hash::zero() }; + let pool = TaskExecutor::new(); + let (mut ctx, _ctx_handle) = + test_helpers::make_subsystem_context::(pool.clone()); + let v = executor::block_on(validate_candidate_exhaustive( + ctx.sender(), MockValidateCandidateBackend::with_hardcoded_result(Err( ValidationError::InvalidCandidate(WasmInvalidCandidate::HardTimeout), )), @@ -735,7 +818,7 @@ fn candidate_validation_code_mismatch_is_invalid() { validation_code, candidate_receipt, Arc::new(pov), - Duration::from_secs(0), + PvfExecTimeoutKind::Backing, &Default::default(), )) .unwrap(); @@ -768,8 +851,8 @@ fn compressed_code_works() { let validation_result = WasmValidationResult { head_data, new_validation_code: None, - upward_messages: Vec::new(), - horizontal_messages: Vec::new(), + upward_messages: Default::default(), + horizontal_messages: Default::default(), processed_downward_messages: 0, hrmp_watermark: 0, }; @@ -785,21 +868,29 @@ fn compressed_code_works() { let candidate_receipt = CandidateReceipt { descriptor, commitments_hash: commitments.hash() }; - let v = executor::block_on(validate_candidate_exhaustive( - MockValidateCandidateBackend::with_hardcoded_result(Ok(validation_result)), - validation_data, - validation_code, - candidate_receipt, - Arc::new(pov), - Duration::from_secs(0), - &Default::default(), - )); + let pool = TaskExecutor::new(); + let (mut ctx, ctx_handle) = + test_helpers::make_subsystem_context::(pool.clone()); + let metrics = Metrics::default(); + + let v = test_with_executor_params(ctx_handle, || { + validate_candidate_exhaustive( + ctx.sender(), + MockValidateCandidateBackend::with_hardcoded_result(Ok(validation_result)), + validation_data, + validation_code, + candidate_receipt, + Arc::new(pov), + PvfExecTimeoutKind::Backing, + &metrics, + ) + }); assert_matches!(v, Ok(ValidationResult::Valid(_, _))); } #[test] -fn code_decompression_failure_is_invalid() { +fn code_decompression_failure_is_error() { let validation_data = PersistedValidationData { max_pov_size: 1024, ..Default::default() }; let pov = PoV { block_data: BlockData(vec![1; 32]) }; let head_data = HeadData(vec![1, 1, 1]); @@ -824,25 +915,30 @@ fn code_decompression_failure_is_invalid() { let validation_result = WasmValidationResult { head_data, new_validation_code: None, - upward_messages: Vec::new(), - horizontal_messages: Vec::new(), + upward_messages: Default::default(), + horizontal_messages: Default::default(), processed_downward_messages: 0, hrmp_watermark: 0, }; let candidate_receipt = CandidateReceipt { descriptor, commitments_hash: Hash::zero() }; + let pool = TaskExecutor::new(); + let (mut ctx, _ctx_handle) = + test_helpers::make_subsystem_context::(pool.clone()); + let v = executor::block_on(validate_candidate_exhaustive( + ctx.sender(), MockValidateCandidateBackend::with_hardcoded_result(Ok(validation_result)), validation_data, validation_code, candidate_receipt, Arc::new(pov), - Duration::from_secs(0), + PvfExecTimeoutKind::Backing, &Default::default(), )); - assert_matches!(v, Ok(ValidationResult::Invalid(InvalidCandidate::CodeDecompressionFailure))); + assert_matches!(v, Err(_)); } #[test] @@ -872,21 +968,26 @@ fn pov_decompression_failure_is_invalid() { let validation_result = WasmValidationResult { head_data, new_validation_code: None, - upward_messages: Vec::new(), - horizontal_messages: Vec::new(), + upward_messages: Default::default(), + horizontal_messages: Default::default(), processed_downward_messages: 0, hrmp_watermark: 0, }; let candidate_receipt = CandidateReceipt { descriptor, commitments_hash: Hash::zero() }; + let pool = TaskExecutor::new(); + let (mut ctx, _ctx_handle) = + test_helpers::make_subsystem_context::(pool.clone()); + let v = executor::block_on(validate_candidate_exhaustive( + ctx.sender(), MockValidateCandidateBackend::with_hardcoded_result(Ok(validation_result)), validation_data, validation_code, candidate_receipt, Arc::new(pov), - Duration::from_secs(0), + PvfExecTimeoutKind::Backing, &Default::default(), )); @@ -894,11 +995,11 @@ fn pov_decompression_failure_is_invalid() { } struct MockPreCheckBackend { - result: Result, + result: Result, } impl MockPreCheckBackend { - fn with_hardcoded_result(result: Result) -> Self { + fn with_hardcoded_result(result: Result) -> Self { Self { result } } } @@ -907,14 +1008,14 @@ impl MockPreCheckBackend { impl ValidationBackend for MockPreCheckBackend { async fn validate_candidate( &mut self, - _pvf: Pvf, + _pvf: PvfPrepData, _timeout: Duration, _encoded_params: Vec, ) -> Result { unreachable!() } - async fn precheck_pvf(&mut self, _pvf: Pvf) -> Result { + async fn precheck_pvf(&mut self, _pvf: PvfPrepData) -> Result { self.result.clone() } } @@ -931,7 +1032,7 @@ fn precheck_works() { let (check_fut, check_result) = precheck_pvf( ctx.sender(), - MockPreCheckBackend::with_hardcoded_result(Ok(Duration::default())), + MockPreCheckBackend::with_hardcoded_result(Ok(PrepareStats::default())), relay_parent, validation_code_hash, ) @@ -953,6 +1054,22 @@ fn precheck_works() { let _ = tx.send(Ok(Some(validation_code.clone()))); } ); + assert_matches!( + ctx_handle.recv().await, + AllMessages::RuntimeApi( + RuntimeApiMessage::Request(_, RuntimeApiRequest::SessionIndexForChild(tx)) + ) => { + tx.send(Ok(1u32.into())).unwrap(); + } + ); + assert_matches!( + ctx_handle.recv().await, + AllMessages::RuntimeApi( + RuntimeApiMessage::Request(_, RuntimeApiRequest::SessionExecutorParams(_, tx)) + ) => { + tx.send(Ok(Some(ExecutorParams::default()))).unwrap(); + } + ); assert_matches!(check_result.await, PreCheckOutcome::Valid); }; @@ -977,7 +1094,7 @@ fn precheck_invalid_pvf_blob_compression() { let (check_fut, check_result) = precheck_pvf( ctx.sender(), - MockPreCheckBackend::with_hardcoded_result(Ok(Duration::default())), + MockPreCheckBackend::with_hardcoded_result(Ok(PrepareStats::default())), relay_parent, validation_code_hash, ) @@ -999,6 +1116,22 @@ fn precheck_invalid_pvf_blob_compression() { let _ = tx.send(Ok(Some(validation_code.clone()))); } ); + assert_matches!( + ctx_handle.recv().await, + AllMessages::RuntimeApi( + RuntimeApiMessage::Request(_, RuntimeApiRequest::SessionIndexForChild(tx)) + ) => { + tx.send(Ok(1u32.into())).unwrap(); + } + ); + assert_matches!( + ctx_handle.recv().await, + AllMessages::RuntimeApi( + RuntimeApiMessage::Request(_, RuntimeApiRequest::SessionExecutorParams(_, tx)) + ) => { + tx.send(Ok(Some(ExecutorParams::default()))).unwrap(); + } + ); assert_matches!(check_result.await, PreCheckOutcome::Invalid); }; @@ -1041,6 +1174,22 @@ fn precheck_properly_classifies_outcomes() { let _ = tx.send(Ok(Some(validation_code.clone()))); } ); + assert_matches!( + ctx_handle.recv().await, + AllMessages::RuntimeApi( + RuntimeApiMessage::Request(_, RuntimeApiRequest::SessionIndexForChild(tx)) + ) => { + tx.send(Ok(1u32.into())).unwrap(); + } + ); + assert_matches!( + ctx_handle.recv().await, + AllMessages::RuntimeApi( + RuntimeApiMessage::Request(_, RuntimeApiRequest::SessionExecutorParams(_, tx)) + ) => { + tx.send(Ok(Some(ExecutorParams::default()))).unwrap(); + } + ); assert_eq!(check_result.await, precheck_outcome); }; @@ -1053,5 +1202,5 @@ fn precheck_properly_classifies_outcomes() { inner(Err(PrepareError::Panic("baz".to_owned())), PreCheckOutcome::Invalid); inner(Err(PrepareError::TimedOut), PreCheckOutcome::Failed); - inner(Err(PrepareError::DidNotMakeIt), PreCheckOutcome::Failed); + inner(Err(PrepareError::IoErr("fizz".to_owned())), PreCheckOutcome::Failed); } diff --git a/node/core/chain-api/Cargo.toml b/node/core/chain-api/Cargo.toml index e51f063c5d1d..dada8953556c 100644 --- a/node/core/chain-api/Cargo.toml +++ b/node/core/chain-api/Cargo.toml @@ -7,17 +7,17 @@ edition.workspace = true [dependencies] futures = "0.3.21" gum = { package = "tracing-gum", path = "../../gum" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } polkadot-primitives = { path = "../../../primitives" } +polkadot-node-metrics = { path = "../../metrics" } polkadot-node-subsystem = {path = "../../subsystem" } -polkadot-node-subsystem-util = { path = "../../subsystem-util" } -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } [dev-dependencies] futures = { version = "0.3.21", features = ["thread-pool"] } maplit = "1.0.2" -parity-scale-codec = "3.1.5" +parity-scale-codec = "3.3.0" polkadot-node-primitives = { path = "../../primitives" } polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } diff --git a/node/core/chain-api/src/lib.rs b/node/core/chain-api/src/lib.rs index 7205527982c1..012c867f3b29 100644 --- a/node/core/chain-api/src/lib.rs +++ b/node/core/chain-api/src/lib.rs @@ -41,7 +41,7 @@ use polkadot_node_subsystem::{ messages::ChainApiMessage, overseer, FromOrchestra, OverseerSignal, SpawnedSubsystem, SubsystemError, SubsystemResult, }; -use polkadot_primitives::v2::{Block, BlockId}; +use polkadot_primitives::Block; mod metrics; use self::metrics::Metrics; @@ -99,10 +99,7 @@ where }, ChainApiMessage::BlockHeader(hash, response_channel) => { let _timer = subsystem.metrics.time_block_header(); - let result = subsystem - .client - .header(BlockId::Hash(hash)) - .map_err(|e| e.to_string().into()); + let result = subsystem.client.header(hash).map_err(|e| e.to_string().into()); subsystem.metrics.on_request(result.is_ok()); let _ = response_channel.send(result); }, @@ -134,7 +131,7 @@ where let mut hash = hash; let next_parent = core::iter::from_fn(|| { - let maybe_header = subsystem.client.header(BlockId::Hash(hash)); + let maybe_header = subsystem.client.header(hash); match maybe_header { // propagate the error Err(e) => { diff --git a/node/core/chain-api/src/metrics.rs b/node/core/chain-api/src/metrics.rs index 23f455729e16..34c258b84563 100644 --- a/node/core/chain-api/src/metrics.rs +++ b/node/core/chain-api/src/metrics.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use polkadot_node_subsystem_util::metrics::{self, prometheus}; +use polkadot_node_metrics::metrics::{self, prometheus}; #[derive(Clone)] pub(crate) struct MetricsInner { diff --git a/node/core/chain-api/src/tests.rs b/node/core/chain-api/src/tests.rs index aa24b3621200..9289805cc8f8 100644 --- a/node/core/chain-api/src/tests.rs +++ b/node/core/chain-api/src/tests.rs @@ -1,3 +1,19 @@ +// Copyright 2017-2023 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + use super::*; use futures::{channel::oneshot, future::BoxFuture}; @@ -6,7 +22,7 @@ use std::collections::BTreeMap; use polkadot_node_primitives::BlockWeight; use polkadot_node_subsystem_test_helpers::{make_subsystem_context, TestSubsystemContextHandle}; -use polkadot_primitives::v2::{BlockId, BlockNumber, Hash, Header}; +use polkadot_primitives::{BlockNumber, Hash, Header}; use sp_blockchain::Info as BlockInfo; use sp_core::testing::TaskExecutor; @@ -117,16 +133,14 @@ impl HeaderBackend for TestClient { fn hash(&self, number: BlockNumber) -> sp_blockchain::Result> { Ok(self.finalized_blocks.get(&number).copied()) } - fn header(&self, id: BlockId) -> sp_blockchain::Result> { - match id { - // for error path testing - BlockId::Hash(hash) if hash.is_zero() => - Err(sp_blockchain::Error::Backend("Zero hashes are illegal!".into())), - BlockId::Hash(hash) => Ok(self.headers.get(&hash).cloned()), - _ => unreachable!(), + fn header(&self, hash: Hash) -> sp_blockchain::Result> { + if hash.is_zero() { + Err(sp_blockchain::Error::Backend("Zero hashes are illegal!".into())) + } else { + Ok(self.headers.get(&hash).cloned()) } } - fn status(&self, _id: BlockId) -> sp_blockchain::Result { + fn status(&self, _hash: Hash) -> sp_blockchain::Result { unimplemented!() } } @@ -203,10 +217,8 @@ fn request_block_header() { test_harness(|client, mut sender| { async move { const NOT_HERE: Hash = Hash::repeat_byte(0x5); - let test_cases = [ - (TWO, client.header(BlockId::Hash(TWO)).unwrap()), - (NOT_HERE, client.header(BlockId::Hash(NOT_HERE)).unwrap()), - ]; + let test_cases = + [(TWO, client.header(TWO).unwrap()), (NOT_HERE, client.header(NOT_HERE).unwrap())]; for (hash, expected) in &test_cases { let (tx, rx) = oneshot::channel(); diff --git a/node/core/chain-selection/Cargo.toml b/node/core/chain-selection/Cargo.toml index ce858a87dcd6..3b1ca8e8aa90 100644 --- a/node/core/chain-selection/Cargo.toml +++ b/node/core/chain-selection/Cargo.toml @@ -15,11 +15,11 @@ polkadot-node-subsystem = { path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } kvdb = "0.13.0" thiserror = "1.0.31" -parity-scale-codec = "3.1.5" +parity-scale-codec = "3.3.0" [dev-dependencies] polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } parking_lot = "0.12.0" assert_matches = "1" kvdb-memorydb = "0.13.0" diff --git a/node/core/chain-selection/src/backend.rs b/node/core/chain-selection/src/backend.rs index 6c5396a5c64d..3b21e9ea99c9 100644 --- a/node/core/chain-selection/src/backend.rs +++ b/node/core/chain-selection/src/backend.rs @@ -21,7 +21,7 @@ //! [`Backend`], maintaining consistency between queries and temporary writes, //! before any commit to the underlying storage is made. -use polkadot_primitives::v2::{BlockNumber, Hash}; +use polkadot_primitives::{BlockNumber, Hash}; use std::collections::HashMap; diff --git a/node/core/chain-selection/src/db_backend/v1.rs b/node/core/chain-selection/src/db_backend/v1.rs index a037d27baaea..64c4e37b1502 100644 --- a/node/core/chain-selection/src/db_backend/v1.rs +++ b/node/core/chain-selection/src/db_backend/v1.rs @@ -38,7 +38,7 @@ use crate::{ }; use polkadot_node_primitives::BlockWeight; -use polkadot_primitives::v2::{BlockNumber, Hash}; +use polkadot_primitives::{BlockNumber, Hash}; use parity_scale_codec::{Decode, Encode}; use polkadot_node_subsystem_util::database::{DBTransaction, Database}; diff --git a/node/core/chain-selection/src/lib.rs b/node/core/chain-selection/src/lib.rs index 786454fb9891..529b297a4dea 100644 --- a/node/core/chain-selection/src/lib.rs +++ b/node/core/chain-selection/src/lib.rs @@ -24,7 +24,7 @@ use polkadot_node_subsystem::{ FromOrchestra, OverseerSignal, SpawnedSubsystem, SubsystemError, }; use polkadot_node_subsystem_util::database::Database; -use polkadot_primitives::v2::{BlockNumber, ConsensusLog, Hash, Header}; +use polkadot_primitives::{BlockNumber, ConsensusLog, Hash, Header}; use futures::{channel::oneshot, future::Either, prelude::*}; use parity_scale_codec::Error as CodecError; @@ -466,6 +466,10 @@ where let _ = tx.send(best_containing); } + ChainSelectionMessage::RevertBlocks(blocks_to_revert) => { + let write_ops = handle_revert_blocks(backend, blocks_to_revert)?; + backend.write(write_ops)?; + } } } } @@ -678,6 +682,21 @@ fn handle_approved_block(backend: &mut impl Backend, approved_block: Hash) -> Re backend.write(ops) } +// Here we revert a provided group of blocks. The most common cause for this is that +// the dispute coordinator has notified chain selection of a dispute which concluded +// against a candidate. +fn handle_revert_blocks( + backend: &impl Backend, + blocks_to_revert: Vec<(BlockNumber, Hash)>, +) -> Result, Error> { + let mut overlay = OverlayedBackend::new(backend); + for (block_number, block_hash) in blocks_to_revert { + tree::apply_single_reversion(&mut overlay, block_hash, block_number)?; + } + + Ok(overlay.into_write_ops().collect()) +} + fn detect_stagnant( backend: &mut impl Backend, now: Timestamp, diff --git a/node/core/chain-selection/src/tests.rs b/node/core/chain-selection/src/tests.rs index 404b854d894b..3104d16dedf3 100644 --- a/node/core/chain-selection/src/tests.rs +++ b/node/core/chain-selection/src/tests.rs @@ -39,7 +39,7 @@ use polkadot_node_subsystem::{ jaeger, messages::AllMessages, ActivatedLeaf, ActiveLeavesUpdate, LeafStatus, }; use polkadot_node_subsystem_test_helpers as test_helpers; -use polkadot_primitives::v2::{BlakeTwo256, ConsensusLog, HashT}; +use polkadot_primitives::{BlakeTwo256, ConsensusLog, HashT}; #[derive(Default)] struct TestBackendInner { @@ -2014,3 +2014,106 @@ fn stagnant_makes_childless_parent_leaf() { virtual_overseer }) } + +#[test] +fn revert_blocks_message_triggers_proper_reversion() { + test_harness(|backend, _, mut virtual_overseer| async move { + // Building mini chain with 1 finalized block and 3 unfinalized blocks + let finalized_number = 0; + let finalized_hash = Hash::repeat_byte(0); + + let (head_hash, built_chain) = + construct_chain_on_base(vec![1, 2, 3], finalized_number, finalized_hash, |_| {}); + + import_blocks_into( + &mut virtual_overseer, + &backend, + Some((finalized_number, finalized_hash)), + built_chain.clone(), + ) + .await; + + // Checking mini chain + assert_backend_contains(&backend, built_chain.iter().map(|&(ref h, _)| h)); + assert_leaves(&backend, vec![head_hash]); + assert_leaves_query(&mut virtual_overseer, vec![head_hash]).await; + + let block_1_hash = backend.load_blocks_by_number(1).unwrap().get(0).unwrap().clone(); + let block_2_hash = backend.load_blocks_by_number(2).unwrap().get(0).unwrap().clone(); + + // Sending revert blocks message + let (_, write_rx) = backend.await_next_write(); + virtual_overseer + .send(FromOrchestra::Communication { + msg: ChainSelectionMessage::RevertBlocks(Vec::from([(2, block_2_hash)])), + }) + .await; + + write_rx.await.unwrap(); + + // Checking results: + // Block 2 should be explicitly reverted + assert_eq!( + backend + .load_block_entry(&block_2_hash) + .unwrap() + .unwrap() + .viability + .explicitly_reverted, + true + ); + // Block 3 should be non-viable, with 2 as its earliest unviable ancestor + assert_eq!( + backend + .load_block_entry(&head_hash) + .unwrap() + .unwrap() + .viability + .earliest_unviable_ancestor, + Some(block_2_hash) + ); + // Block 1 should be left as the only leaf + assert_leaves(&backend, vec![block_1_hash]); + + virtual_overseer + }) +} + +#[test] +fn revert_blocks_against_finalized_is_ignored() { + test_harness(|backend, _, mut virtual_overseer| async move { + // Building mini chain with 1 finalized block and 3 unfinalized blocks + let finalized_number = 0; + let finalized_hash = Hash::repeat_byte(0); + + let (head_hash, built_chain) = + construct_chain_on_base(vec![1], finalized_number, finalized_hash, |_| {}); + + import_blocks_into( + &mut virtual_overseer, + &backend, + Some((finalized_number, finalized_hash)), + built_chain.clone(), + ) + .await; + + // Checking mini chain + assert_backend_contains(&backend, built_chain.iter().map(|&(ref h, _)| h)); + + // Sending dispute concluded against message + virtual_overseer + .send(FromOrchestra::Communication { + msg: ChainSelectionMessage::RevertBlocks(Vec::from([( + finalized_number, + finalized_hash, + )])), + }) + .await; + + // Leaf should be head if reversion of finalized was properly ignored + assert_leaves(&backend, vec![head_hash]); + assert_leaves_query(&mut virtual_overseer, vec![head_hash]).await; + + virtual_overseer + }) +} diff --git a/node/core/chain-selection/src/tree.rs b/node/core/chain-selection/src/tree.rs index aafd75de5f97..7cb2527243b1 100644 --- a/node/core/chain-selection/src/tree.rs +++ b/node/core/chain-selection/src/tree.rs @@ -25,7 +25,7 @@ use polkadot_node_primitives::BlockWeight; use polkadot_node_subsystem::ChainApiError; -use polkadot_primitives::v2::{BlockNumber, Hash}; +use polkadot_primitives::{BlockNumber, Hash}; use std::collections::HashMap; @@ -247,7 +247,7 @@ pub(crate) fn import_block( stagnant_at: Timestamp, ) -> Result<(), Error> { add_block(backend, block_hash, block_number, parent_hash, weight, stagnant_at)?; - apply_reversions(backend, block_hash, block_number, reversion_logs)?; + apply_ancestor_reversions(backend, block_hash, block_number, reversion_logs)?; Ok(()) } @@ -347,9 +347,9 @@ fn add_block( Ok(()) } -// Assuming that a block is already imported, accepts the number of the block -// as well as a list of reversions triggered by the block in ascending order. -fn apply_reversions( +/// Assuming that a block is already imported, accepts the number of the block +/// as well as a list of reversions triggered by the block in ascending order. +fn apply_ancestor_reversions( backend: &mut OverlayedBackend, block_hash: Hash, block_number: BlockNumber, @@ -358,39 +358,76 @@ fn apply_reversions( // Note: since revert numbers are in ascending order, the expensive propagation // of unviability is only heavy on the first log. for revert_number in reversions { - let mut ancestor_entry = - match load_ancestor(backend, block_hash, block_number, revert_number)? { - None => { - gum::warn!( - target: LOG_TARGET, - ?block_hash, - block_number, - revert_target = revert_number, - "The hammer has dropped. \ - A block has indicated that its finalized ancestor be reverted. \ - Please inform an adult.", - ); + let maybe_block_entry = load_ancestor(backend, block_hash, block_number, revert_number)?; + revert_single_block_entry_if_present( + backend, + maybe_block_entry, + None, + revert_number, + Some(block_hash), + Some(block_number), + )?; + } - continue - }, - Some(ancestor_entry) => { - gum::info!( - target: LOG_TARGET, - ?block_hash, - block_number, - revert_target = revert_number, - revert_hash = ?ancestor_entry.block_hash, - "A block has signaled that its ancestor be reverted due to a bad parachain block.", - ); + Ok(()) +} - ancestor_entry - }, - }; +/// Marks a single block as explicitly reverted, then propagates viability updates +/// to all its children. This is triggered when the disputes subsystem signals that +/// a dispute has concluded against a candidate. +pub(crate) fn apply_single_reversion( + backend: &mut OverlayedBackend, + revert_hash: Hash, + revert_number: BlockNumber, +) -> Result<(), Error> { + let maybe_block_entry = backend.load_block_entry(&revert_hash)?; + revert_single_block_entry_if_present( + backend, + maybe_block_entry, + Some(revert_hash), + revert_number, + None, + None, + )?; + Ok(()) +} - ancestor_entry.viability.explicitly_reverted = true; - propagate_viability_update(backend, ancestor_entry)?; - } +fn revert_single_block_entry_if_present( + backend: &mut OverlayedBackend, + maybe_block_entry: Option, + maybe_revert_hash: Option, + revert_number: BlockNumber, + maybe_reporting_hash: Option, + maybe_reporting_number: Option, +) -> Result<(), Error> { + match maybe_block_entry { + None => { + gum::warn!( + target: LOG_TARGET, + ?maybe_revert_hash, + revert_target = revert_number, + ?maybe_reporting_hash, + ?maybe_reporting_number, + "The hammer has dropped. \ + The protocol has indicated that a finalized block be reverted. \ + Please inform an adult.", + ); + }, + Some(mut block_entry) => { + gum::info!( + target: LOG_TARGET, + ?maybe_revert_hash, + revert_target = revert_number, + ?maybe_reporting_hash, + ?maybe_reporting_number, + "Unfinalized block reverted due to a bad parachain block.", + ); + block_entry.viability.explicitly_reverted = true; + // Marks children of reverted block as non-viable + propagate_viability_update(backend, block_entry)?; + }, + } Ok(()) } diff --git a/node/core/dispute-coordinator/Cargo.toml b/node/core/dispute-coordinator/Cargo.toml index c00e5a597d5e..e5ec1ae35d63 100644 --- a/node/core/dispute-coordinator/Cargo.toml +++ b/node/core/dispute-coordinator/Cargo.toml @@ -7,10 +7,10 @@ edition.workspace = true [dependencies] futures = "0.3.21" gum = { package = "tracing-gum", path = "../../gum" } -parity-scale-codec = "3.1.5" +parity-scale-codec = "3.3.0" kvdb = "0.13.0" thiserror = "1.0.31" -lru = "0.8.0" +lru = "0.9.0" fatality = "0.0.6" polkadot-primitives = { path = "../../../primitives" } @@ -18,19 +18,20 @@ polkadot-node-primitives = { path = "../../primitives" } polkadot-node-subsystem = { path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } -sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } [dev-dependencies] kvdb-memorydb = "0.13.0" polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } assert_matches = "1.4.0" test-helpers = { package = "polkadot-primitives-test-helpers", path = "../../../primitives/test-helpers" } futures-timer = "3.0.2" -sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } [features] # If not enabled, the dispute coordinator will do nothing. diff --git a/node/core/dispute-coordinator/src/backend.rs b/node/core/dispute-coordinator/src/backend.rs index 9e8252f01176..d49ace492549 100644 --- a/node/core/dispute-coordinator/src/backend.rs +++ b/node/core/dispute-coordinator/src/backend.rs @@ -21,8 +21,7 @@ //! [`Backend`], maintaining consistency between queries and temporary writes, //! before any commit to the underlying storage is made. -use polkadot_node_subsystem::SubsystemResult; -use polkadot_primitives::v2::{CandidateHash, SessionIndex}; +use polkadot_primitives::{CandidateHash, SessionIndex}; use std::collections::HashMap; @@ -40,17 +39,17 @@ pub enum BackendWriteOp { /// An abstraction over backend storage for the logic of this subsystem. pub trait Backend { /// Load the earliest session, if any. - fn load_earliest_session(&self) -> SubsystemResult>; + fn load_earliest_session(&self) -> FatalResult>; /// Load the recent disputes, if any. - fn load_recent_disputes(&self) -> SubsystemResult>; + fn load_recent_disputes(&self) -> FatalResult>; /// Load the candidate votes for the specific session-candidate pair, if any. fn load_candidate_votes( &self, session: SessionIndex, candidate_hash: &CandidateHash, - ) -> SubsystemResult>; + ) -> FatalResult>; /// Atomically writes the list of operations, with later operations taking precedence over /// prior. @@ -93,7 +92,7 @@ impl<'a, B: 'a + Backend> OverlayedBackend<'a, B> { } /// Load the earliest session, if any. - pub fn load_earliest_session(&self) -> SubsystemResult> { + pub fn load_earliest_session(&self) -> FatalResult> { if let Some(val) = self.earliest_session { return Ok(Some(val)) } @@ -102,7 +101,7 @@ impl<'a, B: 'a + Backend> OverlayedBackend<'a, B> { } /// Load the recent disputes, if any. - pub fn load_recent_disputes(&self) -> SubsystemResult> { + pub fn load_recent_disputes(&self) -> FatalResult> { if let Some(val) = &self.recent_disputes { return Ok(Some(val.clone())) } @@ -115,7 +114,7 @@ impl<'a, B: 'a + Backend> OverlayedBackend<'a, B> { &self, session: SessionIndex, candidate_hash: &CandidateHash, - ) -> SubsystemResult> { + ) -> FatalResult> { if let Some(val) = self.candidate_votes.get(&(session, *candidate_hash)) { return Ok(val.clone()) } diff --git a/node/core/dispute-coordinator/src/db/v1.rs b/node/core/dispute-coordinator/src/db/v1.rs index ab571108af37..c0f3c9925f1b 100644 --- a/node/core/dispute-coordinator/src/db/v1.rs +++ b/node/core/dispute-coordinator/src/db/v1.rs @@ -17,9 +17,8 @@ //! `V1` database for the dispute coordinator. use polkadot_node_primitives::DisputeStatus; -use polkadot_node_subsystem::{SubsystemError, SubsystemResult}; use polkadot_node_subsystem_util::database::{DBTransaction, Database}; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ CandidateHash, CandidateReceipt, Hash, InvalidDisputeStatementKind, SessionIndex, ValidDisputeStatementKind, ValidatorIndex, ValidatorSignature, }; @@ -109,12 +108,12 @@ impl DbBackend { impl Backend for DbBackend { /// Load the earliest session, if any. - fn load_earliest_session(&self) -> SubsystemResult> { + fn load_earliest_session(&self) -> FatalResult> { load_earliest_session(&*self.inner, &self.config) } /// Load the recent disputes, if any. - fn load_recent_disputes(&self) -> SubsystemResult> { + fn load_recent_disputes(&self) -> FatalResult> { load_recent_disputes(&*self.inner, &self.config) } @@ -123,7 +122,7 @@ impl Backend for DbBackend { &self, session: SessionIndex, candidate_hash: &CandidateHash, - ) -> SubsystemResult> { + ) -> FatalResult> { load_candidate_votes(&*self.inner, &self.config, session, candidate_hash) } @@ -287,27 +286,27 @@ pub(crate) fn load_candidate_votes( config: &ColumnConfiguration, session: SessionIndex, candidate_hash: &CandidateHash, -) -> SubsystemResult> { +) -> FatalResult> { load_decode(db, config.col_dispute_data, &candidate_votes_key(session, candidate_hash)) - .map_err(|e| SubsystemError::with_origin("dispute-coordinator", e)) + .map_err(|e| FatalError::DbReadFailed(e)) } /// Load the earliest session, if any. pub(crate) fn load_earliest_session( db: &dyn Database, config: &ColumnConfiguration, -) -> SubsystemResult> { +) -> FatalResult> { load_decode(db, config.col_dispute_data, EARLIEST_SESSION_KEY) - .map_err(|e| SubsystemError::with_origin("dispute-coordinator", e)) + .map_err(|e| FatalError::DbReadFailed(e)) } /// Load the recent disputes, if any. pub(crate) fn load_recent_disputes( db: &dyn Database, config: &ColumnConfiguration, -) -> SubsystemResult> { +) -> FatalResult> { load_decode(db, config.col_dispute_data, RECENT_DISPUTES_KEY) - .map_err(|e| SubsystemError::with_origin("dispute-coordinator", e)) + .map_err(|e| FatalError::DbReadFailed(e)) } /// Maybe prune data in the DB based on the provided session index. @@ -321,7 +320,7 @@ pub(crate) fn load_recent_disputes( pub(crate) fn note_earliest_session( overlay_db: &mut OverlayedBackend<'_, impl Backend>, new_earliest_session: SessionIndex, -) -> SubsystemResult<()> { +) -> FatalResult<()> { match overlay_db.load_earliest_session()? { None => { // First launch - write new-earliest. @@ -373,7 +372,7 @@ mod tests { use super::*; use ::test_helpers::{dummy_candidate_receipt, dummy_hash}; use polkadot_node_primitives::DISPUTE_WINDOW; - use polkadot_primitives::v2::{Hash, Id as ParaId}; + use polkadot_primitives::{Hash, Id as ParaId}; fn make_db() -> DbBackend { let db = kvdb_memorydb::create(1); diff --git a/node/core/dispute-coordinator/src/import.rs b/node/core/dispute-coordinator/src/import.rs index 84adae167c7a..4f6edc5fcef0 100644 --- a/node/core/dispute-coordinator/src/import.rs +++ b/node/core/dispute-coordinator/src/import.rs @@ -32,7 +32,7 @@ use polkadot_node_primitives::{ disputes::ValidCandidateVotes, CandidateVotes, DisputeStatus, SignedDisputeStatement, Timestamp, }; use polkadot_node_subsystem_util::rolling_session_window::RollingSessionWindow; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ CandidateReceipt, DisputeStatement, IndexedVec, SessionIndex, SessionInfo, ValidDisputeStatementKind, ValidatorId, ValidatorIndex, ValidatorPair, ValidatorSignature, }; @@ -87,60 +87,69 @@ impl<'a> CandidateEnvironment<'a> { /// Whether or not we already issued some statement about a candidate. pub enum OwnVoteState { - /// We already voted/issued a statement for the candidate. - Voted, - /// We already voted/issued a statement for the candidate and it was an approval vote. + /// Our votes, if any. + Voted(Vec<(ValidatorIndex, (DisputeStatement, ValidatorSignature))>), + + /// We are not a parachain validator in the session. /// - /// Needs special treatment as we have to make sure to propagate it to peers, to guarantee the - /// dispute can conclude. - VotedApproval(Vec<(ValidatorIndex, ValidatorSignature)>), - /// We not yet voted for the dispute. - NoVote, + /// Hence we cannot vote. + CannotVote, } impl OwnVoteState { fn new<'a>(votes: &CandidateVotes, env: &CandidateEnvironment<'a>) -> Self { - let mut our_valid_votes = env - .controlled_indices() + let controlled_indices = env.controlled_indices(); + if controlled_indices.is_empty() { + return Self::CannotVote + } + + let our_valid_votes = controlled_indices .iter() .filter_map(|i| votes.valid.raw().get_key_value(i)) - .peekable(); - let mut our_invalid_votes = - env.controlled_indices.iter().filter_map(|i| votes.invalid.get_key_value(i)); - let has_valid_votes = our_valid_votes.peek().is_some(); - let has_invalid_votes = our_invalid_votes.next().is_some(); - let our_approval_votes: Vec<_> = our_valid_votes - .filter_map(|(index, (k, sig))| { - if let ValidDisputeStatementKind::ApprovalChecking = k { - Some((*index, sig.clone())) - } else { - None - } - }) - .collect(); + .map(|(index, (kind, sig))| (*index, (DisputeStatement::Valid(*kind), sig.clone()))); + let our_invalid_votes = controlled_indices + .iter() + .filter_map(|i| votes.invalid.get_key_value(i)) + .map(|(index, (kind, sig))| (*index, (DisputeStatement::Invalid(*kind), sig.clone()))); - if !our_approval_votes.is_empty() { - return Self::VotedApproval(our_approval_votes) - } - if has_valid_votes || has_invalid_votes { - return Self::Voted - } - Self::NoVote + Self::Voted(our_valid_votes.chain(our_invalid_votes).collect()) } - /// Whether or not we issued a statement for the candidate already. - fn voted(&self) -> bool { + /// Is a vote from us missing but we are a validator able to vote? + fn vote_missing(&self) -> bool { match self { - Self::Voted | Self::VotedApproval(_) => true, - Self::NoVote => false, + Self::Voted(votes) if votes.is_empty() => true, + Self::Voted(_) | Self::CannotVote => false, } } /// Get own approval votes, if any. - fn approval_votes(&self) -> Option<&Vec<(ValidatorIndex, ValidatorSignature)>> { + /// + /// Empty iterator means, no approval votes. `None` means, there will never be any (we cannot + /// vote). + fn approval_votes( + &self, + ) -> Option> { match self { - Self::VotedApproval(votes) => Some(&votes), - _ => None, + Self::Voted(votes) => Some(votes.iter().filter_map(|(index, (kind, sig))| { + if let DisputeStatement::Valid(ValidDisputeStatementKind::ApprovalChecking) = kind { + Some((*index, sig)) + } else { + None + } + })), + Self::CannotVote => None, + } + } + + /// Get our votes if there are any. + /// + /// Empty iterator means, no votes. `None` means, there will never be any (we cannot + /// vote). + fn votes(&self) -> Option<&Vec<(ValidatorIndex, (DisputeStatement, ValidatorSignature))>> { + match self { + Self::Voted(votes) => Some(&votes), + Self::CannotVote => None, } } } @@ -170,7 +179,7 @@ impl CandidateVoteState { valid: ValidCandidateVotes::new(), invalid: BTreeMap::new(), }; - Self { votes, own_vote: OwnVoteState::NoVote, dispute_status: None } + Self { votes, own_vote: OwnVoteState::CannotVote, dispute_status: None } } /// Create a new `CandidateVoteState` from already existing votes. @@ -179,15 +188,14 @@ impl CandidateVoteState { let n_validators = env.validators().len(); - let supermajority_threshold = - polkadot_primitives::v2::supermajority_threshold(n_validators); + let supermajority_threshold = polkadot_primitives::supermajority_threshold(n_validators); // We have a dispute, if we have votes on both sides: let is_disputed = !votes.invalid.is_empty() && !votes.valid.raw().is_empty(); let dispute_status = if is_disputed { let mut status = DisputeStatus::active(); - let byzantine_threshold = polkadot_primitives::v2::byzantine_threshold(n_validators); + let byzantine_threshold = polkadot_primitives::byzantine_threshold(n_validators); let is_confirmed = votes.voted_indices().len() > byzantine_threshold; if is_confirmed { status = status.confirm(); @@ -327,16 +335,25 @@ impl CandidateVoteState { self.dispute_status.map_or(false, |s| s.is_confirmed_concluded()) } - /// This machine already cast some vote in that dispute/for that candidate. - pub fn has_own_vote(&self) -> bool { - self.own_vote.voted() + /// Are we a validator in the session, but have not yet voted? + pub fn own_vote_missing(&self) -> bool { + self.own_vote.vote_missing() } /// Own approval votes if any: - pub fn own_approval_votes(&self) -> Option<&Vec<(ValidatorIndex, ValidatorSignature)>> { + pub fn own_approval_votes( + &self, + ) -> Option> { self.own_vote.approval_votes() } + /// Get own votes if there are any. + pub fn own_votes( + &self, + ) -> Option<&Vec<(ValidatorIndex, (DisputeStatement, ValidatorSignature))>> { + self.own_vote.votes() + } + /// Whether or not there is a dispute and it has already enough valid votes to conclude. pub fn has_concluded_for(&self) -> bool { self.dispute_status.map_or(false, |s| s.has_concluded_for()) diff --git a/node/core/dispute-coordinator/src/initialized.rs b/node/core/dispute-coordinator/src/initialized.rs index 245af523685f..620c58fbb7e6 100644 --- a/node/core/dispute-coordinator/src/initialized.rs +++ b/node/core/dispute-coordinator/src/initialized.rs @@ -26,12 +26,11 @@ use futures::{ use sc_keystore::LocalKeystore; use polkadot_node_primitives::{ - disputes::ValidCandidateVotes, CandidateVotes, DisputeMessage, DisputeMessageCheckError, - DisputeStatus, SignedDisputeStatement, Timestamp, + disputes::ValidCandidateVotes, CandidateVotes, DisputeStatus, SignedDisputeStatement, Timestamp, }; use polkadot_node_subsystem::{ messages::{ - ApprovalVotingMessage, BlockDescription, DisputeCoordinatorMessage, + ApprovalVotingMessage, BlockDescription, ChainSelectionMessage, DisputeCoordinatorMessage, DisputeDistributionMessage, ImportStatementsResult, }, overseer, ActivatedLeaf, ActiveLeavesUpdate, FromOrchestra, OverseerSignal, @@ -39,7 +38,7 @@ use polkadot_node_subsystem::{ use polkadot_node_subsystem_util::rolling_session_window::{ RollingSessionWindow, SessionWindowUpdate, SessionsUnavailable, }; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ BlockNumber, CandidateHash, CandidateReceipt, CompactStatement, DisputeStatement, DisputeStatementSet, Hash, ScrapedOnChainVotes, SessionIndex, SessionInfo, ValidDisputeStatementKind, ValidatorId, ValidatorIndex, @@ -48,6 +47,7 @@ use polkadot_primitives::v2::{ use crate::{ error::{log_error, Error, FatalError, FatalResult, JfyiError, JfyiResult, Result}, import::{CandidateEnvironment, CandidateVoteState}, + is_potential_spam, metrics::Metrics, status::{get_active_with_status, Clock}, DisputeCoordinatorSubsystem, LOG_TARGET, @@ -55,7 +55,7 @@ use crate::{ use super::{ backend::Backend, - db, + db, make_dispute_message, participation::{ self, Participation, ParticipationPriority, ParticipationRequest, ParticipationStatement, WorkerMessageReceiver, @@ -96,7 +96,7 @@ impl Initialized { let DisputeCoordinatorSubsystem { config: _, store: _, keystore, metrics } = subsystem; let (participation_sender, participation_receiver) = mpsc::channel(1); - let participation = Participation::new(participation_sender); + let participation = Participation::new(participation_sender, metrics.clone()); let highest_session = rolling_session_window.latest_session(); Self { @@ -198,59 +198,62 @@ impl Initialized { gum::trace!(target: LOG_TARGET, "Waiting for message"); let mut overlay_db = OverlayedBackend::new(backend); let default_confirm = Box::new(|| Ok(())); - let confirm_write = - match MuxedMessage::receive(ctx, &mut self.participation_receiver).await? { - MuxedMessage::Participation(msg) => { - gum::trace!(target: LOG_TARGET, "MuxedMessage::Participation"); - let ParticipationStatement { - session, + let confirm_write = match MuxedMessage::receive(ctx, &mut self.participation_receiver) + .await? + { + MuxedMessage::Participation(msg) => { + gum::trace!(target: LOG_TARGET, "MuxedMessage::Participation"); + let ParticipationStatement { + session, + candidate_hash, + candidate_receipt, + outcome, + } = self.participation.get_participation_result(ctx, msg).await?; + if let Some(valid) = outcome.validity() { + gum::trace!( + target: LOG_TARGET, + ?session, + ?candidate_hash, + ?valid, + "Issuing local statement based on participation outcome." + ); + self.issue_local_statement( + ctx, + &mut overlay_db, candidate_hash, candidate_receipt, - outcome, - } = self.participation.get_participation_result(ctx, msg).await?; - if let Some(valid) = outcome.validity() { - gum::trace!( - target: LOG_TARGET, - ?session, - ?candidate_hash, - ?valid, - "Issuing local statement based on participation outcome." - ); - self.issue_local_statement( - ctx, - &mut overlay_db, - candidate_hash, - candidate_receipt, - session, - valid, - clock.now(), - ) - .await?; - } + session, + valid, + clock.now(), + ) + .await?; + } else { + gum::warn!(target: LOG_TARGET, ?outcome, "Dispute participation failed"); + } + default_confirm + }, + MuxedMessage::Subsystem(msg) => match msg { + FromOrchestra::Signal(OverseerSignal::Conclude) => return Ok(()), + FromOrchestra::Signal(OverseerSignal::ActiveLeaves(update)) => { + gum::trace!(target: LOG_TARGET, "OverseerSignal::ActiveLeaves"); + self.process_active_leaves_update( + ctx, + &mut overlay_db, + update, + clock.now(), + ) + .await?; default_confirm }, - MuxedMessage::Subsystem(msg) => match msg { - FromOrchestra::Signal(OverseerSignal::Conclude) => return Ok(()), - FromOrchestra::Signal(OverseerSignal::ActiveLeaves(update)) => { - gum::trace!(target: LOG_TARGET, "OverseerSignal::ActiveLeaves"); - self.process_active_leaves_update( - ctx, - &mut overlay_db, - update, - clock.now(), - ) - .await?; - default_confirm - }, - FromOrchestra::Signal(OverseerSignal::BlockFinalized(_, n)) => { - gum::trace!(target: LOG_TARGET, "OverseerSignal::BlockFinalized"); - self.scraper.process_finalized_block(&n); - default_confirm - }, - FromOrchestra::Communication { msg } => - self.handle_incoming(ctx, &mut overlay_db, msg, clock.now()).await?, + FromOrchestra::Signal(OverseerSignal::BlockFinalized(_, n)) => { + gum::trace!(target: LOG_TARGET, "OverseerSignal::BlockFinalized"); + self.scraper.process_finalized_block(&n); + default_confirm }, - }; + FromOrchestra::Communication { msg } => + self.handle_incoming(ctx, &mut overlay_db, msg, clock.now()).await?, + }, + }; if !overlay_db.is_empty() { let ops = overlay_db.into_write_ops(); @@ -269,8 +272,14 @@ impl Initialized { update: ActiveLeavesUpdate, now: u64, ) -> Result<()> { - let on_chain_votes = + gum::trace!(target: LOG_TARGET, timestamp = now, "Processing ActiveLeavesUpdate"); + let scraped_updates = self.scraper.process_active_leaves_update(ctx.sender(), &update).await?; + log_error( + self.participation + .bump_to_priority_for_candidates(ctx, &scraped_updates.included_receipts) + .await, + )?; self.participation.process_active_leaves_update(ctx, &update).await?; if let Some(new_leaf) = update.activated { @@ -306,9 +315,16 @@ impl Initialized { Ok(SessionWindowUpdate::Unchanged) => {}, }; + gum::trace!( + target: LOG_TARGET, + timestamp = now, + "Will process {} onchain votes", + scraped_updates.on_chain_votes.len() + ); + // The `runtime-api` subsystem has an internal queue which serializes the execution, - // so there is no point in running these in parallel. - for votes in on_chain_votes { + // so there is no point in running these in parallel + for votes in scraped_updates.on_chain_votes { let _ = self.process_on_chain_votes(ctx, overlay_db, votes, now).await.map_err( |error| { gum::warn!( @@ -321,6 +337,7 @@ impl Initialized { } } + gum::trace!(target: LOG_TARGET, timestamp = now, "Done processing ActiveLeavesUpdate"); Ok(()) } @@ -339,26 +356,26 @@ impl Initialized { return Ok(()) } - // Obtain the session info, for sake of `ValidatorId`s - // either from the rolling session window. - // Must be called _after_ `fn cache_session_info_for_head` - // which guarantees that the session info is available - // for the current session. - let session_info: SessionInfo = - if let Some(session_info) = self.rolling_session_window.session_info(session) { - session_info.clone() - } else { - gum::warn!( - target: LOG_TARGET, - ?session, - "Could not retrieve session info from rolling session window", - ); - return Ok(()) - }; - // Scraped on-chain backing votes for the candidates with // the new active leaf as if we received them via gossip. for (candidate_receipt, backers) in backing_validators_per_candidate { + // Obtain the session info, for sake of `ValidatorId`s + // either from the rolling session window. + // Must be called _after_ `fn cache_session_info_for_head` + // which guarantees that the session info is available + // for the current session. + let session_info: &SessionInfo = + if let Some(session_info) = self.rolling_session_window.session_info(session) { + session_info + } else { + gum::warn!( + target: LOG_TARGET, + ?session, + "Could not retrieve session info from rolling session window", + ); + return Ok(()) + }; + let relay_parent = candidate_receipt.descriptor.relay_parent; let candidate_hash = candidate_receipt.hash(); gum::trace!( @@ -391,19 +408,19 @@ impl Initialized { CompactStatement::Valid(_) => ValidDisputeStatementKind::BackingValid(relay_parent), }; - debug_assert!( - SignedDisputeStatement::new_checked( + debug_assert!( + SignedDisputeStatement::new_checked( DisputeStatement::Valid(valid_statement_kind), candidate_hash, session, validator_public.clone(), validator_signature.clone(), - ).is_ok(), - "Scraped backing votes had invalid signature! candidate: {:?}, session: {:?}, validator_public: {:?}", - candidate_hash, - session, - validator_public, - ); + ).is_ok(), + "Scraped backing votes had invalid signature! candidate: {:?}, session: {:?}, validator_public: {:?}", + candidate_hash, + session, + validator_public, + ); let signed_dispute_statement = SignedDisputeStatement::new_unchecked_from_trusted_source( DisputeStatement::Valid(valid_statement_kind), @@ -416,6 +433,8 @@ impl Initialized { }) .collect(); + // Importantly, handling import statements for backing votes also + // clears spam slots for any newly backed candidates let import_result = self .handle_import_statements( ctx, @@ -444,10 +463,6 @@ impl Initialized { // Import disputes from on-chain, this already went through a vote so it's assumed // as verified. This will only be stored, gossiping it is not necessary. - - // First try to obtain all the backings which ultimately contain the candidate - // receipt which we need. - for DisputeStatementSet { candidate_hash, session, statements } in disputes { gum::trace!( target: LOG_TARGET, @@ -455,22 +470,22 @@ impl Initialized { ?session, "Importing dispute votes from chain for candidate" ); + let session_info = + if let Some(session_info) = self.rolling_session_window.session_info(session) { + session_info + } else { + gum::warn!( + target: LOG_TARGET, + ?candidate_hash, + ?session, + "Could not retrieve session info from rolling session window for recently concluded dispute" + ); + continue + }; + let statements = statements .into_iter() .filter_map(|(dispute_statement, validator_index, validator_signature)| { - let session_info: SessionInfo = if let Some(session_info) = - self.rolling_session_window.session_info(session) - { - session_info.clone() - } else { - gum::warn!( - target: LOG_TARGET, - ?candidate_hash, - ?session, - "Could not retrieve session info from rolling session window for recently concluded dispute"); - return None - }; - let validator_public: ValidatorId = session_info .validators .get(validator_index) @@ -480,26 +495,12 @@ impl Initialized { ?candidate_hash, ?session, "Missing public key for validator {:?} that participated in concluded dispute", - &validator_index); + &validator_index + ); None }) .cloned()?; - debug_assert!( - SignedDisputeStatement::new_checked( - dispute_statement.clone(), - candidate_hash, - session, - validator_public.clone(), - validator_signature.clone(), - ).is_ok(), - "Scraped dispute votes had invalid signature! candidate: {:?}, session: {:?}, dispute_statement: {:?}, validator_public: {:?}", - candidate_hash, - session, - dispute_statement, - validator_public, - ); - Some(( SignedDisputeStatement::new_unchecked_from_trusted_source( dispute_statement, @@ -512,6 +513,10 @@ impl Initialized { )) }) .collect::>(); + if statements.is_empty() { + gum::debug!(target: LOG_TARGET, "Skipping empty from chain dispute import"); + continue + } let import_result = self .handle_import_statements( ctx, @@ -698,6 +703,10 @@ impl Initialized { Ok(()) } + // We use fatal result rather than result here. Reason being, We for example increase + // spam slots in this function. If then the import fails for some non fatal and + // unrelated reason, we should likely actually decrement previously incremented spam + // slots again, for non fatal errors - which is cumbersome and actually not needed async fn handle_import_statements( &mut self, ctx: &mut Context, @@ -706,7 +715,7 @@ impl Initialized { session: SessionIndex, statements: Vec<(SignedDisputeStatement, ValidatorIndex)>, now: Timestamp, - ) -> Result { + ) -> FatalResult { gum::trace!(target: LOG_TARGET, ?statements, "In handle import statements"); if !self.rolling_session_window.contains(session) { // It is not valid to participate in an ancient dispute (spam?) or too new. @@ -837,12 +846,17 @@ impl Initialized { let new_state = import_result.new_state(); let is_included = self.scraper.is_candidate_included(&candidate_hash); - - let potential_spam = !is_included && !new_state.is_confirmed() && !new_state.has_own_vote(); + let is_backed = self.scraper.is_candidate_backed(&candidate_hash); + let own_vote_missing = new_state.own_vote_missing(); + let is_disputed = new_state.is_disputed(); + let is_confirmed = new_state.is_confirmed(); + let potential_spam = is_potential_spam(&self.scraper, &new_state, &candidate_hash); + // We participate only in disputes which are not potential spam. + let allow_participation = !potential_spam; gum::trace!( target: LOG_TARGET, - has_own_vote = ?new_state.has_own_vote(), + ?own_vote_missing, ?potential_spam, ?is_included, ?candidate_hash, @@ -851,8 +865,11 @@ impl Initialized { "Is spam?" ); + // This check is responsible for all clearing of spam slots. It runs + // whenever a vote is imported from on or off chain, and decrements + // slots whenever a candidate is newly backed, confirmed, or has our + // own vote. if !potential_spam { - // Former spammers have not been spammers after all: self.spam_slots.clear(&(session, candidate_hash)); // Potential spam: @@ -880,21 +897,13 @@ impl Initialized { } } - let has_own_vote = new_state.has_own_vote(); - let is_disputed = new_state.is_disputed(); - let has_controlled_indices = !env.controlled_indices().is_empty(); - let is_backed = self.scraper.is_candidate_backed(&candidate_hash); - let is_confirmed = new_state.is_confirmed(); - // We participate only in disputes which are included, backed or confirmed - let allow_participation = is_included || is_backed || is_confirmed; - // Participate in dispute if we did not cast a vote before and actually have keys to cast a // local vote. Disputes should fall in one of the categories below, otherwise we will refrain // from participation: // - `is_included` lands in prioritised queue // - `is_confirmed` | `is_backed` lands in best effort queue // We don't participate in disputes on finalized candidates. - if !has_own_vote && is_disputed && has_controlled_indices && allow_participation { + if own_vote_missing && is_disputed && allow_participation { let priority = ParticipationPriority::with_priority_if(is_included); gum::trace!( target: LOG_TARGET, @@ -907,12 +916,17 @@ impl Initialized { } else { self.metrics.on_queued_best_effort_participation(); } + let request_timer = Arc::new(self.metrics.time_participation_pipeline()); let r = self .participation .queue_participation( ctx, priority, - ParticipationRequest::new(new_state.candidate_receipt().clone(), session), + ParticipationRequest::new( + new_state.candidate_receipt().clone(), + session, + request_timer, + ), ) .await; log_error(r)?; @@ -921,9 +935,8 @@ impl Initialized { target: LOG_TARGET, ?candidate_hash, ?is_confirmed, - ?has_own_vote, + ?own_vote_missing, ?is_disputed, - ?has_controlled_indices, ?allow_participation, ?is_included, ?is_backed, @@ -937,10 +950,9 @@ impl Initialized { // Also send any already existing approval vote on new disputes: if import_result.is_freshly_disputed() { - let no_votes = Vec::new(); - let our_approval_votes = new_state.own_approval_votes().unwrap_or(&no_votes); + let our_approval_votes = new_state.own_approval_votes().into_iter().flatten(); for (validator_index, sig) in our_approval_votes { - let pub_key = match env.validators().get(*validator_index) { + let pub_key = match env.validators().get(validator_index) { None => { gum::error!( target: LOG_TARGET, @@ -970,7 +982,7 @@ impl Initialized { env.session_info(), &new_state.votes(), statement, - *validator_index, + validator_index, ) { Err(err) => { gum::error!( @@ -1018,6 +1030,22 @@ impl Initialized { } } + // Notify ChainSelection if a dispute has concluded against a candidate. ChainSelection + // will need to mark the candidate's relay parent as reverted. + if import_result.is_freshly_concluded_against() { + let blocks_including = self.scraper.get_blocks_including_candidate(&candidate_hash); + if blocks_including.len() > 0 { + ctx.send_message(ChainSelectionMessage::RevertBlocks(blocks_including)).await; + } else { + gum::debug!( + target: LOG_TARGET, + ?candidate_hash, + ?session, + "Could not find an including block for candidate against which a dispute has concluded." + ); + } + } + // Update metrics: if import_result.is_freshly_disputed() { self.metrics.on_open(); @@ -1141,9 +1169,9 @@ impl Initialized { Ok(None) => {}, Err(e) => { gum::error!( - target: LOG_TARGET, - err = ?e, - "Encountered keystore error while signing dispute statement", + target: LOG_TARGET, + err = ?e, + "Encountered keystore error while signing dispute statement", ); }, } @@ -1242,74 +1270,6 @@ impl MaybeCandidateReceipt { } } -#[derive(Debug, thiserror::Error)] -enum DisputeMessageCreationError { - #[error("There was no opposite vote available")] - NoOppositeVote, - #[error("Found vote had an invalid validator index that could not be found")] - InvalidValidatorIndex, - #[error("Statement found in votes had invalid signature.")] - InvalidStoredStatement, - #[error(transparent)] - InvalidStatementCombination(DisputeMessageCheckError), -} - -fn make_dispute_message( - info: &SessionInfo, - votes: &CandidateVotes, - our_vote: SignedDisputeStatement, - our_index: ValidatorIndex, -) -> std::result::Result { - let validators = &info.validators; - - let (valid_statement, valid_index, invalid_statement, invalid_index) = - if let DisputeStatement::Valid(_) = our_vote.statement() { - let (validator_index, (statement_kind, validator_signature)) = - votes.invalid.iter().next().ok_or(DisputeMessageCreationError::NoOppositeVote)?; - let other_vote = SignedDisputeStatement::new_checked( - DisputeStatement::Invalid(*statement_kind), - *our_vote.candidate_hash(), - our_vote.session_index(), - validators - .get(*validator_index) - .ok_or(DisputeMessageCreationError::InvalidValidatorIndex)? - .clone(), - validator_signature.clone(), - ) - .map_err(|()| DisputeMessageCreationError::InvalidStoredStatement)?; - (our_vote, our_index, other_vote, *validator_index) - } else { - let (validator_index, (statement_kind, validator_signature)) = votes - .valid - .raw() - .iter() - .next() - .ok_or(DisputeMessageCreationError::NoOppositeVote)?; - let other_vote = SignedDisputeStatement::new_checked( - DisputeStatement::Valid(*statement_kind), - *our_vote.candidate_hash(), - our_vote.session_index(), - validators - .get(*validator_index) - .ok_or(DisputeMessageCreationError::InvalidValidatorIndex)? - .clone(), - validator_signature.clone(), - ) - .map_err(|()| DisputeMessageCreationError::InvalidStoredStatement)?; - (other_vote, *validator_index, our_vote, our_index) - }; - - DisputeMessage::from_signed_statements( - valid_statement, - valid_index, - invalid_statement, - invalid_index, - votes.candidate_receipt.clone(), - info, - ) - .map_err(DisputeMessageCreationError::InvalidStatementCombination) -} - /// Determine the best block and its block number. /// Assumes `block_descriptions` are sorted from the one /// with the lowest `BlockNumber` to the highest. diff --git a/node/core/dispute-coordinator/src/lib.rs b/node/core/dispute-coordinator/src/lib.rs index e7ac66ce2ece..de155c1e8f42 100644 --- a/node/core/dispute-coordinator/src/lib.rs +++ b/node/core/dispute-coordinator/src/lib.rs @@ -28,17 +28,21 @@ use std::sync::Arc; use futures::FutureExt; +use gum::CandidateHash; use sc_keystore::LocalKeystore; -use polkadot_node_primitives::CandidateVotes; +use polkadot_node_primitives::{ + CandidateVotes, DisputeMessage, DisputeMessageCheckError, SignedDisputeStatement, +}; use polkadot_node_subsystem::{ - overseer, ActivatedLeaf, FromOrchestra, OverseerSignal, SpawnedSubsystem, SubsystemError, + messages::DisputeDistributionMessage, overseer, ActivatedLeaf, FromOrchestra, OverseerSignal, + SpawnedSubsystem, SubsystemError, }; use polkadot_node_subsystem_util::{ database::Database, rolling_session_window::{DatabaseParams, RollingSessionWindow}, }; -use polkadot_primitives::v2::{ScrapedOnChainVotes, ValidatorIndex, ValidatorPair}; +use polkadot_primitives::{DisputeStatement, ScrapedOnChainVotes, SessionInfo, ValidatorIndex}; use crate::{ error::{FatalResult, JfyiError, Result}, @@ -50,6 +54,7 @@ use db::v1::DbBackend; use fatality::Split; use self::{ + import::{CandidateEnvironment, CandidateVoteState}, participation::{ParticipationPriority, ParticipationRequest}, spam_slots::{SpamSlots, UnconfirmedDisputes}, }; @@ -274,10 +279,13 @@ impl DisputeCoordinatorSubsystem { // Prune obsolete disputes: db::v1::note_earliest_session(overlay_db, rolling_session_window.earliest_session())?; + let now = clock.now(); + let active_disputes = match overlay_db.load_recent_disputes() { - Ok(Some(disputes)) => - get_active_with_status(disputes.into_iter(), clock.now()).collect(), - Ok(None) => Vec::new(), + Ok(disputes) => disputes + .map(|disputes| get_active_with_status(disputes.into_iter(), now)) + .into_iter() + .flatten(), Err(e) => { gum::error!(target: LOG_TARGET, "Failed initial load of recent disputes: {:?}", e); return Err(e.into()) @@ -285,9 +293,23 @@ impl DisputeCoordinatorSubsystem { }; let mut participation_requests = Vec::new(); - let mut unconfirmed_disputes: UnconfirmedDisputes = UnconfirmedDisputes::new(); + let mut spam_disputes: UnconfirmedDisputes = UnconfirmedDisputes::new(); let (scraper, votes) = ChainScraper::new(ctx.sender(), initial_head).await?; - for ((session, ref candidate_hash), status) in active_disputes { + for ((session, ref candidate_hash), _) in active_disputes { + let env = + match CandidateEnvironment::new(&self.keystore, &rolling_session_window, session) { + None => { + gum::warn!( + target: LOG_TARGET, + session, + "We are lacking a `SessionInfo` for handling db votes on startup." + ); + + continue + }, + Some(env) => env, + }; + let votes: CandidateVotes = match overlay_db.load_candidate_votes(session, candidate_hash) { Ok(Some(votes)) => votes.into(), @@ -301,60 +323,54 @@ impl DisputeCoordinatorSubsystem { continue }, }; + let vote_state = CandidateVoteState::new(votes, &env, now); - let validators = match rolling_session_window.session_info(session) { - None => { - gum::warn!( + let potential_spam = is_potential_spam(&scraper, &vote_state, candidate_hash); + let is_included = + scraper.is_candidate_included(&vote_state.votes().candidate_receipt.hash()); + + if potential_spam { + gum::trace!( + target: LOG_TARGET, + ?session, + ?candidate_hash, + "Found potential spam dispute on startup" + ); + spam_disputes + .insert((session, *candidate_hash), vote_state.votes().voted_indices()); + } else { + // Participate if need be: + if vote_state.own_vote_missing() { + gum::trace!( target: LOG_TARGET, - session, - "Missing info for session which has an active dispute", + ?session, + ?candidate_hash, + "Found valid dispute, with no vote from us on startup - participating." ); - continue - }, - Some(info) => info.validators.clone(), - }; - - let voted_indices = votes.voted_indices(); - - // Determine if there are any missing local statements for this dispute. Validators are - // filtered if: - // 1) their statement already exists, or - // 2) the validator key is not in the local keystore (i.e. the validator is remote). - // The remaining set only contains local validators that are also missing statements. - let missing_local_statement = validators - .iter() - .enumerate() - .map(|(index, validator)| (ValidatorIndex(index as _), validator)) - .any(|(index, validator)| { - !voted_indices.contains(&index) && - self.keystore - .key_pair::(validator) - .ok() - .map_or(false, |v| v.is_some()) - }); - - let is_included = scraper.is_candidate_included(&votes.candidate_receipt.hash()); - - if !status.is_confirmed_concluded() && !is_included { - unconfirmed_disputes.insert((session, *candidate_hash), voted_indices); - } - - // Participate for all non-concluded disputes which do not have a - // recorded local statement. - if missing_local_statement { - participation_requests.push(( - ParticipationPriority::with_priority_if(is_included), - ParticipationRequest::new(votes.candidate_receipt.clone(), session), - )); + let request_timer = Arc::new(self.metrics.time_participation_pipeline()); + participation_requests.push(( + ParticipationPriority::with_priority_if(is_included), + ParticipationRequest::new( + vote_state.votes().candidate_receipt.clone(), + session, + request_timer, + ), + )); + } + // Else make sure our own vote is distributed: + else { + gum::trace!( + target: LOG_TARGET, + ?session, + ?candidate_hash, + "Found valid dispute, with vote from us on startup - send vote." + ); + send_dispute_messages(ctx, &env, &vote_state).await; + } } } - Ok(( - participation_requests, - votes, - SpamSlots::recover_from_state(unconfirmed_disputes), - scraper, - )) + Ok((participation_requests, votes, SpamSlots::recover_from_state(spam_disputes), scraper)) } } @@ -407,3 +423,144 @@ async fn wait_for_first_leaf(ctx: &mut Context) -> Result( + scraper: &ChainScraper, + vote_state: &CandidateVoteState, + candidate_hash: &CandidateHash, +) -> bool { + let is_disputed = vote_state.is_disputed(); + let is_included = scraper.is_candidate_included(candidate_hash); + let is_backed = scraper.is_candidate_backed(candidate_hash); + let is_confirmed = vote_state.is_confirmed(); + + is_disputed && !is_included && !is_backed && !is_confirmed +} + +/// Tell dispute-distribution to send all our votes. +/// +/// Should be called on startup for all active disputes where there are votes from us already. +#[overseer::contextbounds(DisputeCoordinator, prefix = self::overseer)] +async fn send_dispute_messages( + ctx: &mut Context, + env: &CandidateEnvironment<'_>, + vote_state: &CandidateVoteState, +) { + for own_vote in vote_state.own_votes().into_iter().flatten() { + let (validator_index, (kind, sig)) = own_vote; + let public_key = if let Some(key) = env.session_info().validators.get(*validator_index) { + key.clone() + } else { + gum::error!( + target: LOG_TARGET, + ?validator_index, + session_index = ?env.session_index(), + "Could not find our own key in `SessionInfo`" + ); + continue + }; + let our_vote_signed = SignedDisputeStatement::new_checked( + kind.clone(), + vote_state.votes().candidate_receipt.hash(), + env.session_index(), + public_key, + sig.clone(), + ); + let our_vote_signed = match our_vote_signed { + Ok(signed) => signed, + Err(()) => { + gum::error!( + target: LOG_TARGET, + "Checking our own signature failed - db corruption?" + ); + continue + }, + }; + let dispute_message = match make_dispute_message( + env.session_info(), + vote_state.votes(), + our_vote_signed, + *validator_index, + ) { + Err(err) => { + gum::debug!(target: LOG_TARGET, ?err, "Creating dispute message failed."); + continue + }, + Ok(dispute_message) => dispute_message, + }; + + ctx.send_message(DisputeDistributionMessage::SendDispute(dispute_message)).await; + } +} + +#[derive(Debug, thiserror::Error)] +pub enum DisputeMessageCreationError { + #[error("There was no opposite vote available")] + NoOppositeVote, + #[error("Found vote had an invalid validator index that could not be found")] + InvalidValidatorIndex, + #[error("Statement found in votes had invalid signature.")] + InvalidStoredStatement, + #[error(transparent)] + InvalidStatementCombination(DisputeMessageCheckError), +} + +/// Create a `DisputeMessage` to be sent to `DisputeDistribution`. +pub fn make_dispute_message( + info: &SessionInfo, + votes: &CandidateVotes, + our_vote: SignedDisputeStatement, + our_index: ValidatorIndex, +) -> std::result::Result { + let validators = &info.validators; + + let (valid_statement, valid_index, invalid_statement, invalid_index) = + if let DisputeStatement::Valid(_) = our_vote.statement() { + let (validator_index, (statement_kind, validator_signature)) = + votes.invalid.iter().next().ok_or(DisputeMessageCreationError::NoOppositeVote)?; + let other_vote = SignedDisputeStatement::new_checked( + DisputeStatement::Invalid(*statement_kind), + *our_vote.candidate_hash(), + our_vote.session_index(), + validators + .get(*validator_index) + .ok_or(DisputeMessageCreationError::InvalidValidatorIndex)? + .clone(), + validator_signature.clone(), + ) + .map_err(|()| DisputeMessageCreationError::InvalidStoredStatement)?; + (our_vote, our_index, other_vote, *validator_index) + } else { + let (validator_index, (statement_kind, validator_signature)) = votes + .valid + .raw() + .iter() + .next() + .ok_or(DisputeMessageCreationError::NoOppositeVote)?; + let other_vote = SignedDisputeStatement::new_checked( + DisputeStatement::Valid(*statement_kind), + *our_vote.candidate_hash(), + our_vote.session_index(), + validators + .get(*validator_index) + .ok_or(DisputeMessageCreationError::InvalidValidatorIndex)? + .clone(), + validator_signature.clone(), + ) + .map_err(|()| DisputeMessageCreationError::InvalidStoredStatement)?; + (other_vote, *validator_index, our_vote, our_index) + }; + + DisputeMessage::from_signed_statements( + valid_statement, + valid_index, + invalid_statement, + invalid_index, + votes.candidate_receipt.clone(), + info, + ) + .map_err(DisputeMessageCreationError::InvalidStatementCombination) +} diff --git a/node/core/dispute-coordinator/src/metrics.rs b/node/core/dispute-coordinator/src/metrics.rs index 70cd49ac49d1..977f5cc700f6 100644 --- a/node/core/dispute-coordinator/src/metrics.rs +++ b/node/core/dispute-coordinator/src/metrics.rs @@ -32,6 +32,16 @@ struct MetricsInner { vote_cleanup_time: prometheus::Histogram, /// Number of refrained participations. refrained_participations: prometheus::Counter, + /// Distribution of participation durations. + participation_durations: prometheus::Histogram, + /// Measures the duration of the full participation pipeline: From when + /// a participation request is first queued to when participation in the + /// requested dispute is complete. + participation_pipeline_durations: prometheus::Histogram, + /// Size of participation priority queue + participation_priority_queue_size: prometheus::Gauge, + /// Size of participation best effort queue + participation_best_effort_queue_size: prometheus::Gauge, } /// Candidate validation metrics. @@ -96,6 +106,36 @@ impl Metrics { metrics.refrained_participations.inc(); } } + + /// Provide a timer for participation durations which updates on drop. + pub(crate) fn time_participation( + &self, + ) -> Option { + self.0.as_ref().map(|metrics| metrics.participation_durations.start_timer()) + } + + /// Provide a timer for participation pipeline durations which updates on drop. + pub(crate) fn time_participation_pipeline( + &self, + ) -> Option { + self.0 + .as_ref() + .map(|metrics| metrics.participation_pipeline_durations.start_timer()) + } + + /// Set the priority_queue_size metric + pub fn report_priority_queue_size(&self, size: u64) { + if let Some(metrics) = &self.0 { + metrics.participation_priority_queue_size.set(size); + } + } + + /// Set the best_effort_queue_size metric + pub fn report_best_effort_queue_size(&self, size: u64) { + if let Some(metrics) = &self.0 { + metrics.participation_best_effort_queue_size.set(size); + } + } } impl metrics::Metrics for Metrics { @@ -163,6 +203,34 @@ impl metrics::Metrics for Metrics { ))?, registry, )?, + participation_durations: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "polkadot_parachain_dispute_participation_durations", + "Time spent within fn Participation::participate", + ) + )?, + registry, + )?, + participation_pipeline_durations: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "polkadot_parachain_dispute_participation_pipeline_durations", + "Measures the duration of the full participation pipeline: From when a participation request is first queued to when participation in the requested dispute is complete.", + ) + )?, + registry, + )?, + participation_priority_queue_size: prometheus::register( + prometheus::Gauge::new("polkadot_parachain_dispute_participation_priority_queue_size", + "Number of disputes waiting for local participation in the priority queue.")?, + registry, + )?, + participation_best_effort_queue_size: prometheus::register( + prometheus::Gauge::new("polkadot_parachain_dispute_participation_best_effort_queue_size", + "Number of disputes waiting for local participation in the best effort queue.")?, + registry, + )?, }; Ok(Metrics(Some(metrics))) } diff --git a/node/core/dispute-coordinator/src/participation/mod.rs b/node/core/dispute-coordinator/src/participation/mod.rs index e923e13e8142..e366adc5facb 100644 --- a/node/core/dispute-coordinator/src/participation/mod.rs +++ b/node/core/dispute-coordinator/src/participation/mod.rs @@ -25,13 +25,15 @@ use futures::{ #[cfg(test)] use futures_timer::Delay; -use polkadot_node_primitives::{ValidationResult, APPROVAL_EXECUTION_TIMEOUT}; +use polkadot_node_primitives::ValidationResult; use polkadot_node_subsystem::{ messages::{AvailabilityRecoveryMessage, CandidateValidationMessage}, overseer, ActiveLeavesUpdate, RecoveryError, }; use polkadot_node_subsystem_util::runtime::get_validation_code_by_hash; -use polkadot_primitives::v2::{BlockNumber, CandidateHash, CandidateReceipt, Hash, SessionIndex}; +use polkadot_primitives::{ + BlockNumber, CandidateHash, CandidateReceipt, Hash, PvfExecTimeoutKind, SessionIndex, +}; use crate::LOG_TARGET; @@ -46,12 +48,18 @@ mod queues; use queues::Queues; pub use queues::{ParticipationPriority, ParticipationRequest, QueueError}; +use crate::metrics::Metrics; +use polkadot_node_subsystem_util::metrics::prometheus::prometheus; + /// How many participation processes do we want to run in parallel the most. /// /// This should be a relatively low value, while we might have a speedup once we fetched the data, /// due to multi-core architectures, but the fetching itself can not be improved by parallel /// requests. This means that higher numbers make it harder for a single dispute to resolve fast. +#[cfg(not(test))] const MAX_PARALLEL_PARTICIPATIONS: usize = 3; +#[cfg(test)] +pub(crate) const MAX_PARALLEL_PARTICIPATIONS: usize = 1; /// Keep track of disputes we need to participate in. /// @@ -66,6 +74,8 @@ pub struct Participation { worker_sender: WorkerMessageSender, /// Some recent block for retrieving validation code from chain. recent_block: Option<(BlockNumber, Hash)>, + /// Metrics handle cloned from Initialized + metrics: Metrics, } /// Message from worker tasks. @@ -130,12 +140,13 @@ impl Participation { /// The passed in sender will be used by background workers to communicate back their results. /// The calling context should make sure to call `Participation::on_worker_message()` for the /// received messages. - pub fn new(sender: WorkerMessageSender) -> Self { + pub fn new(sender: WorkerMessageSender, metrics: Metrics) -> Self { Self { running_participations: HashSet::new(), - queue: Queues::new(), + queue: Queues::new(metrics.clone()), worker_sender: sender, recent_block: None, + metrics, } } @@ -212,6 +223,19 @@ impl Participation { Ok(()) } + /// Moving any request concerning the given candidates from best-effort to + /// priority, ignoring any candidates that don't have any queued participation requests. + pub async fn bump_to_priority_for_candidates( + &mut self, + ctx: &mut Context, + included_receipts: &Vec, + ) -> Result<()> { + for receipt in included_receipts { + self.queue.prioritize_if_present(ctx.sender(), receipt).await?; + } + Ok(()) + } + /// Dequeue until `MAX_PARALLEL_PARTICIPATIONS` is reached. async fn dequeue_until_capacity( &mut self, @@ -235,11 +259,19 @@ impl Participation { req: ParticipationRequest, recent_head: Hash, ) -> FatalResult<()> { + let participation_timer = self.metrics.time_participation(); if self.running_participations.insert(*req.candidate_hash()) { let sender = ctx.sender().clone(); ctx.spawn( "participation-worker", - participate(self.worker_sender.clone(), sender, recent_head, req).boxed(), + participate( + self.worker_sender.clone(), + sender, + recent_head, + req, + participation_timer, + ) + .boxed(), ) .map_err(FatalError::SpawnFailed)?; } @@ -251,7 +283,8 @@ async fn participate( mut result_sender: WorkerMessageSender, mut sender: impl overseer::DisputeCoordinatorSenderTrait, block_hash: Hash, - req: ParticipationRequest, + req: ParticipationRequest, // Sends metric data via request_timer field when dropped + _participation_timer: Option, // Sends metric data when dropped ) { #[cfg(test)] // Hack for tests, so we get recovery messages not too early. @@ -332,7 +365,7 @@ async fn participate( validation_code, req.candidate_receipt().clone(), available_data.pov, - APPROVAL_EXECUTION_TIMEOUT, + PvfExecTimeoutKind::Approval, validation_tx, )) .await; @@ -357,7 +390,7 @@ async fn participate( err, ); - send_result(&mut result_sender, req, ParticipationOutcome::Invalid).await; + send_result(&mut result_sender, req, ParticipationOutcome::Error).await; }, Ok(Ok(ValidationResult::Invalid(invalid))) => { diff --git a/node/core/dispute-coordinator/src/participation/queues/mod.rs b/node/core/dispute-coordinator/src/participation/queues/mod.rs index 29380bd77df1..cbfb71e20b42 100644 --- a/node/core/dispute-coordinator/src/participation/queues/mod.rs +++ b/node/core/dispute-coordinator/src/participation/queues/mod.rs @@ -14,17 +14,20 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use std::{cmp::Ordering, collections::BTreeMap}; +use std::{cmp::Ordering, collections::BTreeMap, sync::Arc}; use futures::channel::oneshot; use polkadot_node_subsystem::{messages::ChainApiMessage, overseer}; -use polkadot_primitives::v2::{BlockNumber, CandidateHash, CandidateReceipt, Hash, SessionIndex}; +use polkadot_primitives::{BlockNumber, CandidateHash, CandidateReceipt, Hash, SessionIndex}; use crate::{ error::{FatalError, FatalResult, Result}, LOG_TARGET, }; +use crate::metrics::Metrics; +use polkadot_node_subsystem_util::metrics::prometheus::prometheus; + #[cfg(test)] mod tests; @@ -56,14 +59,18 @@ pub struct Queues { /// Priority queue. priority: BTreeMap, + + /// Handle for recording queues data in metrics + metrics: Metrics, } /// A dispute participation request that can be queued. -#[derive(Debug, PartialEq, Eq, Clone)] +#[derive(Debug, Clone)] pub struct ParticipationRequest { candidate_hash: CandidateHash, candidate_receipt: CandidateReceipt, session: SessionIndex, + _request_timer: Arc>, // Sends metric data when request is dropped } /// Whether a `ParticipationRequest` should be put on best-effort or the priority queue. @@ -107,8 +114,17 @@ pub enum QueueError { impl ParticipationRequest { /// Create a new `ParticipationRequest` to be queued. - pub fn new(candidate_receipt: CandidateReceipt, session: SessionIndex) -> Self { - Self { candidate_hash: candidate_receipt.hash(), candidate_receipt, session } + pub fn new( + candidate_receipt: CandidateReceipt, + session: SessionIndex, + request_timer: Arc>, + ) -> Self { + Self { + candidate_hash: candidate_receipt.hash(), + candidate_receipt, + session, + _request_timer: request_timer, + } } pub fn candidate_receipt(&'_ self) -> &'_ CandidateReceipt { @@ -126,10 +142,29 @@ impl ParticipationRequest { } } +// We want to compare participation requests in unit tests, so we +// only implement Eq for tests. +#[cfg(test)] +impl PartialEq for ParticipationRequest { + fn eq(&self, other: &Self) -> bool { + let ParticipationRequest { + candidate_receipt, + candidate_hash, + session: _session, + _request_timer, + } = self; + candidate_receipt == other.candidate_receipt() && + candidate_hash == other.candidate_hash() && + self.session == other.session() + } +} +#[cfg(test)] +impl Eq for ParticipationRequest {} + impl Queues { /// Create new `Queues`. - pub fn new() -> Self { - Self { best_effort: BTreeMap::new(), priority: BTreeMap::new() } + pub fn new(metrics: Metrics) -> Self { + Self { best_effort: BTreeMap::new(), priority: BTreeMap::new(), metrics } } /// Will put message in queue, either priority or best effort depending on priority. @@ -154,9 +189,42 @@ impl Queues { /// First the priority queue is considered and then the best effort one. pub fn dequeue(&mut self) -> Option { if let Some(req) = self.pop_priority() { + self.metrics.report_priority_queue_size(self.priority.len() as u64); + return Some(req.1) + } + if let Some(req) = self.pop_best_effort() { + self.metrics.report_best_effort_queue_size(self.best_effort.len() as u64); return Some(req.1) } - self.pop_best_effort().map(|d| d.1) + None + } + + /// Reprioritizes any participation requests pertaining to the + /// passed candidates from best effort to priority. + pub async fn prioritize_if_present( + &mut self, + sender: &mut impl overseer::DisputeCoordinatorSenderTrait, + receipt: &CandidateReceipt, + ) -> Result<()> { + let comparator = CandidateComparator::new(sender, receipt).await?; + self.prioritize_with_comparator(comparator)?; + Ok(()) + } + + fn prioritize_with_comparator( + &mut self, + comparator: CandidateComparator, + ) -> std::result::Result<(), QueueError> { + if self.priority.len() >= PRIORITY_QUEUE_SIZE { + return Err(QueueError::PriorityFull) + } + if let Some(request) = self.best_effort.remove(&comparator) { + self.priority.insert(comparator, request); + // Report changes to both queue sizes + self.metrics.report_priority_queue_size(self.priority.len() as u64); + self.metrics.report_best_effort_queue_size(self.best_effort.len() as u64); + } + Ok(()) } fn queue_with_comparator( @@ -172,6 +240,8 @@ impl Queues { // Remove any best effort entry: self.best_effort.remove(&comparator); self.priority.insert(comparator, req); + self.metrics.report_priority_queue_size(self.priority.len() as u64); + self.metrics.report_best_effort_queue_size(self.best_effort.len() as u64); } else { if self.priority.contains_key(&comparator) { // The candidate is already in priority queue - don't @@ -182,6 +252,7 @@ impl Queues { return Err(QueueError::BestEffortFull) } self.best_effort.insert(comparator, req); + self.metrics.report_best_effort_queue_size(self.best_effort.len() as u64); } Ok(()) } diff --git a/node/core/dispute-coordinator/src/participation/queues/tests.rs b/node/core/dispute-coordinator/src/participation/queues/tests.rs index b6af4bd2b55a..63df0d0a11ef 100644 --- a/node/core/dispute-coordinator/src/participation/queues/tests.rs +++ b/node/core/dispute-coordinator/src/participation/queues/tests.rs @@ -14,10 +14,11 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use crate::ParticipationPriority; +use crate::{metrics::Metrics, ParticipationPriority}; use ::test_helpers::{dummy_candidate_receipt, dummy_hash}; use assert_matches::assert_matches; -use polkadot_primitives::v2::{BlockNumber, Hash}; +use polkadot_primitives::{BlockNumber, Hash}; +use std::sync::Arc; use super::{CandidateComparator, ParticipationRequest, QueueError, Queues}; @@ -26,7 +27,8 @@ fn make_participation_request(hash: Hash) -> ParticipationRequest { let mut receipt = dummy_candidate_receipt(dummy_hash()); // make it differ: receipt.commitments_hash = hash; - ParticipationRequest::new(receipt, 1) + let request_timer = Arc::new(Metrics::default().time_participation_pipeline()); + ParticipationRequest::new(receipt, 1, request_timer) } /// Make dummy comparator for request, based on the given block number. @@ -44,7 +46,8 @@ fn make_dummy_comparator( /// block number should be treated with lowest priority. #[test] fn ordering_works_as_expected() { - let mut queue = Queues::new(); + let metrics = Metrics::default(); + let mut queue = Queues::new(metrics.clone()); let req1 = make_participation_request(Hash::repeat_byte(0x01)); let req_prio = make_participation_request(Hash::repeat_byte(0x02)); let req3 = make_participation_request(Hash::repeat_byte(0x03)); @@ -91,7 +94,7 @@ fn ordering_works_as_expected() { queue.queue_with_comparator( make_dummy_comparator(&req_prio_full, Some(3)), ParticipationPriority::Priority, - req_prio_full + req_prio_full, ), Err(QueueError::PriorityFull) ); @@ -99,7 +102,7 @@ fn ordering_works_as_expected() { queue.queue_with_comparator( make_dummy_comparator(&req_full, Some(3)), ParticipationPriority::BestEffort, - req_full + req_full, ), Err(QueueError::BestEffortFull) ); @@ -118,7 +121,8 @@ fn ordering_works_as_expected() { /// No matter how often a candidate gets queued, it should only ever get dequeued once. #[test] fn candidate_is_only_dequeued_once() { - let mut queue = Queues::new(); + let metrics = Metrics::default(); + let mut queue = Queues::new(metrics.clone()); let req1 = make_participation_request(Hash::repeat_byte(0x01)); let req_prio = make_participation_request(Hash::repeat_byte(0x02)); let req_best_effort_then_prio = make_participation_request(Hash::repeat_byte(0x03)); @@ -154,7 +158,6 @@ fn candidate_is_only_dequeued_once() { req_prio.clone(), ) .unwrap(); - // Insert first as best effort: queue .queue_with_comparator( @@ -195,5 +198,5 @@ fn candidate_is_only_dequeued_once() { assert_eq!(queue.dequeue(), Some(req_best_effort_then_prio)); assert_eq!(queue.dequeue(), Some(req_prio_then_best_effort)); assert_eq!(queue.dequeue(), Some(req1)); - assert_eq!(queue.dequeue(), None); + assert_matches!(queue.dequeue(), None); } diff --git a/node/core/dispute-coordinator/src/participation/tests.rs b/node/core/dispute-coordinator/src/participation/tests.rs index bf149a87286f..a6e5f86616d7 100644 --- a/node/core/dispute-coordinator/src/participation/tests.rs +++ b/node/core/dispute-coordinator/src/participation/tests.rs @@ -38,7 +38,7 @@ use polkadot_node_subsystem::{ use polkadot_node_subsystem_test_helpers::{ make_subsystem_context, TestSubsystemContext, TestSubsystemContextHandle, }; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ BlakeTwo256, CandidateCommitments, HashT, Header, PersistedValidationData, ValidationCode, }; @@ -72,7 +72,8 @@ async fn participate_with_commitments_hash( }; let session = 1; - let req = ParticipationRequest::new(candidate_receipt, session); + let request_timer = Arc::new(participation.metrics.time_participation_pipeline()); + let req = ParticipationRequest::new(candidate_receipt, session, request_timer); participation .queue_participation(ctx, ParticipationPriority::BestEffort, req) @@ -120,7 +121,7 @@ pub async fn participation_full_happy_path( ctx_handle.recv().await, AllMessages::CandidateValidation( CandidateValidationMessage::ValidateFromExhaustive(_, _, candidate_receipt, _, timeout, tx) - ) if timeout == APPROVAL_EXECUTION_TIMEOUT => { + ) if timeout == PvfExecTimeoutKind::Approval => { if expected_commitments_hash != candidate_receipt.commitments_hash { tx.send(Ok(ValidationResult::Invalid(InvalidCandidate::CommitmentsHashMismatch))).unwrap(); } else { @@ -189,7 +190,7 @@ fn same_req_wont_get_queued_if_participation_is_already_running() { let (mut ctx, mut ctx_handle) = make_our_subsystem_context(TaskExecutor::new()); let (sender, mut worker_receiver) = mpsc::channel(1); - let mut participation = Participation::new(sender); + let mut participation = Participation::new(sender, Metrics::default()); activate_leaf(&mut ctx, &mut participation, 10).await.unwrap(); participate(&mut ctx, &mut participation).await.unwrap(); for _ in 0..MAX_PARALLEL_PARTICIPATIONS { @@ -228,7 +229,7 @@ fn reqs_get_queued_when_out_of_capacity() { let test = async { let (sender, mut worker_receiver) = mpsc::channel(1); - let mut participation = Participation::new(sender); + let mut participation = Participation::new(sender, Metrics::default()); activate_leaf(&mut ctx, &mut participation, 10).await.unwrap(); participate(&mut ctx, &mut participation).await.unwrap(); for i in 0..MAX_PARALLEL_PARTICIPATIONS { @@ -292,7 +293,7 @@ fn reqs_get_queued_on_no_recent_block() { let (mut unblock_test, mut wait_for_verification) = mpsc::channel(0); let test = async { let (sender, _worker_receiver) = mpsc::channel(1); - let mut participation = Participation::new(sender); + let mut participation = Participation::new(sender, Metrics::default()); participate(&mut ctx, &mut participation).await.unwrap(); // We have initiated participation but we'll block `active_leaf` so that we can check that @@ -342,7 +343,7 @@ fn cannot_participate_if_cannot_recover_available_data() { let (mut ctx, mut ctx_handle) = make_our_subsystem_context(TaskExecutor::new()); let (sender, mut worker_receiver) = mpsc::channel(1); - let mut participation = Participation::new(sender); + let mut participation = Participation::new(sender, Metrics::default()); activate_leaf(&mut ctx, &mut participation, 10).await.unwrap(); participate(&mut ctx, &mut participation).await.unwrap(); @@ -372,7 +373,7 @@ fn cannot_participate_if_cannot_recover_validation_code() { let (mut ctx, mut ctx_handle) = make_our_subsystem_context(TaskExecutor::new()); let (sender, mut worker_receiver) = mpsc::channel(1); - let mut participation = Participation::new(sender); + let mut participation = Participation::new(sender, Metrics::default()); activate_leaf(&mut ctx, &mut participation, 10).await.unwrap(); participate(&mut ctx, &mut participation).await.unwrap(); @@ -409,7 +410,7 @@ fn cast_invalid_vote_if_available_data_is_invalid() { let (mut ctx, mut ctx_handle) = make_our_subsystem_context(TaskExecutor::new()); let (sender, mut worker_receiver) = mpsc::channel(1); - let mut participation = Participation::new(sender); + let mut participation = Participation::new(sender, Metrics::default()); activate_leaf(&mut ctx, &mut participation, 10).await.unwrap(); participate(&mut ctx, &mut participation).await.unwrap(); @@ -440,7 +441,7 @@ fn cast_invalid_vote_if_validation_fails_or_is_invalid() { let (mut ctx, mut ctx_handle) = make_our_subsystem_context(TaskExecutor::new()); let (sender, mut worker_receiver) = mpsc::channel(1); - let mut participation = Participation::new(sender); + let mut participation = Participation::new(sender, Metrics::default()); activate_leaf(&mut ctx, &mut participation, 10).await.unwrap(); participate(&mut ctx, &mut participation).await.unwrap(); @@ -454,7 +455,7 @@ fn cast_invalid_vote_if_validation_fails_or_is_invalid() { ctx_handle.recv().await, AllMessages::CandidateValidation( CandidateValidationMessage::ValidateFromExhaustive(_, _, _, _, timeout, tx) - ) if timeout == APPROVAL_EXECUTION_TIMEOUT => { + ) if timeout == PvfExecTimeoutKind::Approval => { tx.send(Ok(ValidationResult::Invalid(InvalidCandidate::Timeout))).unwrap(); }, "overseer did not receive candidate validation message", @@ -477,7 +478,7 @@ fn cast_invalid_vote_if_commitments_dont_match() { let (mut ctx, mut ctx_handle) = make_our_subsystem_context(TaskExecutor::new()); let (sender, mut worker_receiver) = mpsc::channel(1); - let mut participation = Participation::new(sender); + let mut participation = Participation::new(sender, Metrics::default()); activate_leaf(&mut ctx, &mut participation, 10).await.unwrap(); participate(&mut ctx, &mut participation).await.unwrap(); @@ -491,7 +492,7 @@ fn cast_invalid_vote_if_commitments_dont_match() { ctx_handle.recv().await, AllMessages::CandidateValidation( CandidateValidationMessage::ValidateFromExhaustive(_, _, _, _, timeout, tx) - ) if timeout == APPROVAL_EXECUTION_TIMEOUT => { + ) if timeout == PvfExecTimeoutKind::Approval => { tx.send(Ok(ValidationResult::Invalid(InvalidCandidate::CommitmentsHashMismatch))).unwrap(); }, "overseer did not receive candidate validation message", @@ -514,7 +515,7 @@ fn cast_valid_vote_if_validation_passes() { let (mut ctx, mut ctx_handle) = make_our_subsystem_context(TaskExecutor::new()); let (sender, mut worker_receiver) = mpsc::channel(1); - let mut participation = Participation::new(sender); + let mut participation = Participation::new(sender, Metrics::default()); activate_leaf(&mut ctx, &mut participation, 10).await.unwrap(); participate(&mut ctx, &mut participation).await.unwrap(); @@ -528,7 +529,7 @@ fn cast_valid_vote_if_validation_passes() { ctx_handle.recv().await, AllMessages::CandidateValidation( CandidateValidationMessage::ValidateFromExhaustive(_, _, _, _, timeout, tx) - ) if timeout == APPROVAL_EXECUTION_TIMEOUT => { + ) if timeout == PvfExecTimeoutKind::Approval => { tx.send(Ok(ValidationResult::Valid(dummy_candidate_commitments(None), PersistedValidationData::default()))).unwrap(); }, "overseer did not receive candidate validation message", diff --git a/node/core/dispute-coordinator/src/scraping/candidates.rs b/node/core/dispute-coordinator/src/scraping/candidates.rs index 2fe797768cc2..c84abc59c285 100644 --- a/node/core/dispute-coordinator/src/scraping/candidates.rs +++ b/node/core/dispute-coordinator/src/scraping/candidates.rs @@ -1,4 +1,20 @@ -use polkadot_primitives::v2::{BlockNumber, CandidateHash}; +// Copyright 2017-2023 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +use polkadot_primitives::{BlockNumber, CandidateHash}; use std::collections::{BTreeMap, HashMap, HashSet}; /// Keeps `CandidateHash` in reference counted way. @@ -44,7 +60,7 @@ impl RefCountedCandidates { #[cfg(test)] mod ref_counted_candidates_tests { use super::*; - use polkadot_primitives::v2::{BlakeTwo256, HashT}; + use polkadot_primitives::{BlakeTwo256, HashT}; #[test] fn element_is_removed_when_refcount_reaches_zero() { @@ -102,15 +118,18 @@ impl ScrapedCandidates { } // Removes all candidates up to a given height. The candidates at the block height are NOT removed. - pub fn remove_up_to_height(&mut self, height: &BlockNumber) { + pub fn remove_up_to_height(&mut self, height: &BlockNumber) -> HashSet { + let mut candidates_modified: HashSet = HashSet::new(); let not_stale = self.candidates_by_block_number.split_off(&height); let stale = std::mem::take(&mut self.candidates_by_block_number); self.candidates_by_block_number = not_stale; for candidates in stale.values() { for c in candidates { self.candidates.remove(c); + candidates_modified.insert(*c); } } + candidates_modified } pub fn insert(&mut self, block_number: BlockNumber, candidate_hash: CandidateHash) { @@ -131,7 +150,7 @@ impl ScrapedCandidates { #[cfg(test)] mod scraped_candidates_tests { use super::*; - use polkadot_primitives::v2::{BlakeTwo256, HashT}; + use polkadot_primitives::{BlakeTwo256, HashT}; #[test] fn stale_candidates_are_removed() { diff --git a/node/core/dispute-coordinator/src/scraping/mod.rs b/node/core/dispute-coordinator/src/scraping/mod.rs index 7f4f819756e3..0e3c4ecc29ba 100644 --- a/node/core/dispute-coordinator/src/scraping/mod.rs +++ b/node/core/dispute-coordinator/src/scraping/mod.rs @@ -14,7 +14,10 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use std::num::NonZeroUsize; +use std::{ + collections::{BTreeMap, HashSet}, + num::NonZeroUsize, +}; use futures::channel::oneshot; use lru::LruCache; @@ -25,8 +28,8 @@ use polkadot_node_subsystem::{ SubsystemSender, }; use polkadot_node_subsystem_util::runtime::{get_candidate_events, get_on_chain_votes}; -use polkadot_primitives::v2::{ - BlockNumber, CandidateEvent, CandidateHash, Hash, ScrapedOnChainVotes, +use polkadot_primitives::{ + BlockNumber, CandidateEvent, CandidateHash, CandidateReceipt, Hash, ScrapedOnChainVotes, }; use crate::{ @@ -51,9 +54,91 @@ const LRU_OBSERVED_BLOCKS_CAPACITY: NonZeroUsize = match NonZeroUsize::new(20) { None => panic!("Observed blocks cache size must be non-zero"), }; +/// ScrapedUpdates +/// +/// Updates to on_chain_votes and included receipts for new active leaf and its unprocessed +/// ancestors. +/// +/// on_chain_votes: New votes as seen on chain +/// included_receipts: Newly included parachain block candidate receipts as seen on chain +pub struct ScrapedUpdates { + pub on_chain_votes: Vec, + pub included_receipts: Vec, +} + +impl ScrapedUpdates { + pub fn new() -> Self { + Self { on_chain_votes: Vec::new(), included_receipts: Vec::new() } + } +} + +/// A structure meant to facilitate chain reversions in the event of a dispute +/// concluding against a candidate. Each candidate hash maps to a number of +/// block heights, which in turn map to vectors of blocks at those heights. +pub struct Inclusions { + inclusions_inner: BTreeMap>>, +} + +impl Inclusions { + pub fn new() -> Self { + Self { inclusions_inner: BTreeMap::new() } + } + + // Add parent block to the vector which has CandidateHash as an outer key and + // BlockNumber as an inner key + pub fn insert( + &mut self, + candidate_hash: CandidateHash, + block_number: BlockNumber, + block_hash: Hash, + ) { + if let Some(blocks_including) = self.inclusions_inner.get_mut(&candidate_hash) { + if let Some(blocks_at_height) = blocks_including.get_mut(&block_number) { + blocks_at_height.push(block_hash); + } else { + blocks_including.insert(block_number, Vec::from([block_hash])); + } + } else { + let mut blocks_including: BTreeMap> = BTreeMap::new(); + blocks_including.insert(block_number, Vec::from([block_hash])); + self.inclusions_inner.insert(candidate_hash, blocks_including); + } + } + + pub fn remove_up_to_height( + &mut self, + height: &BlockNumber, + candidates_modified: HashSet, + ) { + for candidate in candidates_modified { + if let Some(blocks_including) = self.inclusions_inner.get_mut(&candidate) { + // Returns everything after the given key, including the key. This works because the blocks are sorted in ascending order. + *blocks_including = blocks_including.split_off(height); + } + } + self.inclusions_inner + .retain(|_, blocks_including| blocks_including.keys().len() > 0); + } + + pub fn get(&mut self, candidate: &CandidateHash) -> Vec<(BlockNumber, Hash)> { + let mut inclusions_as_vec: Vec<(BlockNumber, Hash)> = Vec::new(); + if let Some(blocks_including) = self.inclusions_inner.get(candidate) { + for (height, blocks_at_height) in blocks_including.iter() { + for block in blocks_at_height { + inclusions_as_vec.push((*height, *block)); + } + } + } + inclusions_as_vec + } +} + /// Chain scraper /// -/// Scrapes unfinalized chain in order to collect information from blocks. +/// Scrapes unfinalized chain in order to collect information from blocks. Chain scraping +/// during disputes enables critical spam prevention. It does so by updating two important +/// criteria determining whether a vote sent during dispute distribution is potential +/// spam. Namely, whether the candidate being voted on is backed or included. /// /// Concretely: /// @@ -77,6 +162,11 @@ pub struct ChainScraper { /// We assume that ancestors of cached blocks are already processed, i.e. we have saved /// corresponding included candidates. last_observed_blocks: LruCache, + /// Maps included candidate hashes to one or more relay block heights and hashes. + /// These correspond to all the relay blocks which marked a candidate as included, + /// and are needed to apply reversions in case a dispute is concluded against the + /// candidate. + inclusions: Inclusions, } impl ChainScraper { @@ -101,11 +191,12 @@ impl ChainScraper { included_candidates: candidates::ScrapedCandidates::new(), backed_candidates: candidates::ScrapedCandidates::new(), last_observed_blocks: LruCache::new(LRU_OBSERVED_BLOCKS_CAPACITY), + inclusions: Inclusions::new(), }; let update = ActiveLeavesUpdate { activated: Some(initial_head), deactivated: Default::default() }; - let votes = s.process_active_leaves_update(sender, &update).await?; - Ok((s, votes)) + let updates = s.process_active_leaves_update(sender, &update).await?; + Ok((s, updates.on_chain_votes)) } /// Check whether we have seen a candidate included on any chain. @@ -122,18 +213,19 @@ impl ChainScraper { /// /// and updates current heads, so we can query candidates for all non finalized blocks. /// - /// Returns: On chain vote for the leaf and any ancestors we might not yet have seen. + /// Returns: On chain votes and included candidate receipts for the leaf and any + /// ancestors we might not yet have seen. pub async fn process_active_leaves_update( &mut self, sender: &mut Sender, update: &ActiveLeavesUpdate, - ) -> Result> + ) -> Result where Sender: overseer::DisputeCoordinatorSenderTrait, { let activated = match update.activated.as_ref() { Some(activated) => activated, - None => return Ok(Vec::new()), + None => return Ok(ScrapedUpdates::new()), }; // Fetch ancestry up to last finalized block. @@ -147,20 +239,22 @@ impl ChainScraper { let block_hashes = std::iter::once(activated.hash).chain(ancestors); - let mut on_chain_votes = Vec::new(); + let mut scraped_updates = ScrapedUpdates::new(); for (block_number, block_hash) in block_numbers.zip(block_hashes) { - gum::trace!(?block_number, ?block_hash, "In ancestor processing."); + gum::trace!(target: LOG_TARGET, ?block_number, ?block_hash, "In ancestor processing."); - self.process_candidate_events(sender, block_number, block_hash).await?; + let receipts_for_block = + self.process_candidate_events(sender, block_number, block_hash).await?; + scraped_updates.included_receipts.extend(receipts_for_block); if let Some(votes) = get_on_chain_votes(sender, block_hash).await? { - on_chain_votes.push(votes); + scraped_updates.on_chain_votes.push(votes); } } self.last_observed_blocks.put(activated.hash, ()); - Ok(on_chain_votes) + Ok(scraped_updates) } /// Prune finalized candidates. @@ -174,7 +268,9 @@ impl ChainScraper { { Some(key_to_prune) => { self.backed_candidates.remove_up_to_height(&key_to_prune); - self.included_candidates.remove_up_to_height(&key_to_prune); + let candidates_modified = + self.included_candidates.remove_up_to_height(&key_to_prune); + self.inclusions.remove_up_to_height(&key_to_prune, candidates_modified); }, None => { // Nothing to prune. We are still in the beginning of the chain and there are not @@ -187,17 +283,21 @@ impl ChainScraper { /// Process candidate events of a block. /// /// Keep track of all included and backed candidates. + /// + /// Returns freshly included candidate receipts async fn process_candidate_events( &mut self, sender: &mut Sender, block_number: BlockNumber, block_hash: Hash, - ) -> Result<()> + ) -> Result> where Sender: overseer::DisputeCoordinatorSenderTrait, { + let events = get_candidate_events(sender, block_hash).await?; + let mut included_receipts: Vec = Vec::new(); // Get included and backed events: - for ev in get_candidate_events(sender, block_hash).await? { + for ev in events { match ev { CandidateEvent::CandidateIncluded(receipt, _, _, _) => { let candidate_hash = receipt.hash(); @@ -208,6 +308,8 @@ impl ChainScraper { "Processing included event" ); self.included_candidates.insert(block_number, candidate_hash); + self.inclusions.insert(candidate_hash, block_number, block_hash); + included_receipts.push(receipt); }, CandidateEvent::CandidateBacked(receipt, _, _, _) => { let candidate_hash = receipt.hash(); @@ -224,7 +326,7 @@ impl ChainScraper { }, } } - Ok(()) + Ok(included_receipts) } /// Returns ancestors of `head` in the descending order, stopping @@ -292,6 +394,13 @@ impl ChainScraper { } return Ok(ancestors) } + + pub fn get_blocks_including_candidate( + &mut self, + candidate: &CandidateHash, + ) -> Vec<(BlockNumber, Hash)> { + self.inclusions.get(candidate) + } } async fn get_finalized_block_number(sender: &mut Sender) -> FatalResult diff --git a/node/core/dispute-coordinator/src/scraping/tests.rs b/node/core/dispute-coordinator/src/scraping/tests.rs index 3a6befa2002d..b7183739d8f8 100644 --- a/node/core/dispute-coordinator/src/scraping/tests.rs +++ b/node/core/dispute-coordinator/src/scraping/tests.rs @@ -36,7 +36,7 @@ use polkadot_node_subsystem_test_helpers::{ make_subsystem_context, TestSubsystemContext, TestSubsystemContextHandle, TestSubsystemSender, }; use polkadot_node_subsystem_util::{reexports::SubsystemContext, TimeoutExt}; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ BlakeTwo256, BlockNumber, CandidateDescriptor, CandidateEvent, CandidateReceipt, CoreIndex, GroupIndex, Hash, HashT, HeadData, Id as ParaId, }; @@ -578,3 +578,73 @@ fn scraper_handles_the_same_candidate_incuded_in_two_different_block_heights() { assert!(!scraper.is_candidate_included(&magic_candidate.hash())); }); } + +#[test] +fn inclusions_per_candidate_properly_adds_and_prunes() { + const TEST_TARGET_BLOCK_NUMBER: BlockNumber = 2; + const TEST_TARGET_BLOCK_NUMBER_2: BlockNumber = 3; + + // How many blocks should we skip before sending a leaf update. + const BLOCKS_TO_SKIP: usize = 4; + + futures::executor::block_on(async { + let (state, mut virtual_overseer) = TestState::new().await; + + let TestState { mut chain, mut scraper, mut ctx } = state; + + // 1 because `TestState` starts at leaf 1. + let next_update = (1..BLOCKS_TO_SKIP).map(|_| next_leaf(&mut chain)).last().unwrap(); + + let mut finalized_block_number = 1; + let expected_ancestry_len = BLOCKS_TO_SKIP - finalized_block_number as usize; + let overseer_fut = overseer_process_active_leaves_update( + &mut virtual_overseer, + &chain, + finalized_block_number, + expected_ancestry_len, + |block_num| { + if block_num == TEST_TARGET_BLOCK_NUMBER || block_num == TEST_TARGET_BLOCK_NUMBER_2 + { + get_backed_and_included_candidate_events(TEST_TARGET_BLOCK_NUMBER) + } else { + vec![] + } + }, + ); + join(process_active_leaves_update(ctx.sender(), &mut scraper, next_update), overseer_fut) + .await; + + let candidate = make_candidate_receipt(get_block_number_hash(TEST_TARGET_BLOCK_NUMBER)); + + // We included the same candidate at two different block heights. So both blocks in which + // the candidate is included are recorded + assert_eq!( + scraper.get_blocks_including_candidate(&candidate.hash()), + Vec::from([ + (TEST_TARGET_BLOCK_NUMBER, get_block_number_hash(TEST_TARGET_BLOCK_NUMBER)), + (TEST_TARGET_BLOCK_NUMBER_2, get_block_number_hash(TEST_TARGET_BLOCK_NUMBER_2)) + ]) + ); + + // After `DISPUTE_CANDIDATE_LIFETIME_AFTER_FINALIZATION` blocks the earlier inclusion should be removed + finalized_block_number = + TEST_TARGET_BLOCK_NUMBER + DISPUTE_CANDIDATE_LIFETIME_AFTER_FINALIZATION; + process_finalized_block(&mut scraper, &finalized_block_number); + + // The later inclusion should still be present, as we haven't exceeded its lifetime + assert_eq!( + scraper.get_blocks_including_candidate(&candidate.hash()), + Vec::from([( + TEST_TARGET_BLOCK_NUMBER_2, + get_block_number_hash(TEST_TARGET_BLOCK_NUMBER_2) + )]) + ); + + finalized_block_number = + TEST_TARGET_BLOCK_NUMBER_2 + DISPUTE_CANDIDATE_LIFETIME_AFTER_FINALIZATION; + process_finalized_block(&mut scraper, &finalized_block_number); + + // Now both inclusions have exceeded their lifetimes after finalization and should be purged + assert!(scraper.get_blocks_including_candidate(&candidate.hash()).len() == 0); + }); +} diff --git a/node/core/dispute-coordinator/src/spam_slots.rs b/node/core/dispute-coordinator/src/spam_slots.rs index c0619bf3a1a5..cdb9e6fb0bdc 100644 --- a/node/core/dispute-coordinator/src/spam_slots.rs +++ b/node/core/dispute-coordinator/src/spam_slots.rs @@ -16,7 +16,7 @@ use std::collections::{BTreeSet, HashMap}; -use polkadot_primitives::v2::{CandidateHash, SessionIndex, ValidatorIndex}; +use polkadot_primitives::{CandidateHash, SessionIndex, ValidatorIndex}; use crate::LOG_TARGET; diff --git a/node/core/dispute-coordinator/src/status.rs b/node/core/dispute-coordinator/src/status.rs index 6332c3653274..a74a02f2b083 100644 --- a/node/core/dispute-coordinator/src/status.rs +++ b/node/core/dispute-coordinator/src/status.rs @@ -15,7 +15,7 @@ // along with Polkadot. If not, see . use polkadot_node_primitives::{dispute_is_inactive, DisputeStatus, Timestamp}; -use polkadot_primitives::v2::{CandidateHash, SessionIndex}; +use polkadot_primitives::{CandidateHash, SessionIndex}; use std::time::{SystemTime, UNIX_EPOCH}; use crate::LOG_TARGET; diff --git a/node/core/dispute-coordinator/src/tests.rs b/node/core/dispute-coordinator/src/tests.rs index 75d37790c3d7..7d7243243ddf 100644 --- a/node/core/dispute-coordinator/src/tests.rs +++ b/node/core/dispute-coordinator/src/tests.rs @@ -32,11 +32,11 @@ use futures::{ use polkadot_node_subsystem_util::database::Database; use polkadot_node_primitives::{ - DisputeStatus, SignedDisputeStatement, SignedFullStatement, Statement, + DisputeMessage, DisputeStatus, SignedDisputeStatement, SignedFullStatement, Statement, }; use polkadot_node_subsystem::{ messages::{ - ApprovalVotingMessage, ChainApiMessage, DisputeCoordinatorMessage, + ApprovalVotingMessage, ChainApiMessage, ChainSelectionMessage, DisputeCoordinatorMessage, DisputeDistributionMessage, ImportStatementsResult, }, overseer::FromOrchestra, @@ -60,7 +60,7 @@ use polkadot_node_subsystem::{ use polkadot_node_subsystem_test_helpers::{ make_buffered_subsystem_context, TestSubsystemContextHandle, }; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ ApprovalVote, BlockNumber, CandidateCommitments, CandidateEvent, CandidateHash, CandidateReceipt, CoreIndex, DisputeStatement, GroupIndex, Hash, HeadData, Header, IndexedVec, MultiDisputeStatementSet, ScrapedOnChainVotes, SessionIndex, SessionInfo, SigningContext, @@ -85,7 +85,7 @@ fn make_keystore(seeds: impl Iterator) -> LocalKeystore { for s in seeds { store - .sr25519_generate_new(polkadot_primitives::v2::PARACHAIN_KEY_TYPE_ID, Some(&s)) + .sr25519_generate_new(polkadot_primitives::PARACHAIN_KEY_TYPE_ID, Some(&s)) .unwrap(); } @@ -169,6 +169,7 @@ struct TestState { config: Config, clock: MockClock, headers: HashMap, + block_num_to_header: HashMap, last_block: Hash, // last session the subsystem knows about. known_session: Option, @@ -225,6 +226,8 @@ impl Default for TestState { let mut headers = HashMap::new(); let _ = headers.insert(last_block, genesis_header.clone()); + let mut block_num_to_header = HashMap::new(); + let _ = block_num_to_header.insert(genesis_header.number, last_block); TestState { validators: validators.into_iter().map(|(pair, _)| pair).collect(), @@ -236,6 +239,7 @@ impl Default for TestState { config, clock: MockClock::default(), headers, + block_num_to_header, last_block, known_session: None, } @@ -262,6 +266,7 @@ impl TestState { let block_hash = block_header.hash(); let _ = self.headers.insert(block_hash, block_header.clone()); + let _ = self.block_num_to_header.insert(block_header.number, block_hash); self.last_block = block_hash; gum::debug!(?block_number, "Activating block in activate_leaf_at_session."); @@ -286,6 +291,7 @@ impl TestState { .await; } + /// Returns any sent `DisputeMessage`s. async fn handle_sync_queries( &mut self, virtual_overseer: &mut VirtualOverseer, @@ -293,7 +299,7 @@ impl TestState { block_number: BlockNumber, session: SessionIndex, candidate_events: Vec, - ) { + ) -> Vec { // Order of messages is not fixed (different on initializing): #[derive(Debug)] struct FinishedSteps { @@ -311,6 +317,7 @@ impl TestState { } let mut finished_steps = FinishedSteps::new(); + let mut sent_disputes = Vec::new(); while !finished_steps.is_done() { let recv = overseer_recv(virtual_overseer).await; @@ -390,49 +397,72 @@ impl TestState { ); finished_steps.got_scraping_information = true; tx.send(Ok(0)).unwrap(); - assert_matches!( - overseer_recv(virtual_overseer).await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - _new_leaf, - RuntimeApiRequest::CandidateEvents(tx), - )) => { - tx.send(Ok(candidate_events.clone())).unwrap(); - } - ); - gum::trace!("After answering runtime api request"); - assert_matches!( - overseer_recv(virtual_overseer).await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - _new_leaf, - RuntimeApiRequest::FetchOnChainVotes(tx), - )) => { - //add some `BackedCandidates` or resolved disputes here as needed - tx.send(Ok(Some(ScrapedOnChainVotes { - session, - backing_validators_per_candidate: Vec::default(), - disputes: MultiDisputeStatementSet::default(), - }))).unwrap(); - } - ); - gum::trace!("After answering runtime API request (votes)"); }, AllMessages::ChainApi(ChainApiMessage::BlockNumber(hash, tx)) => { let block_num = self.headers.get(&hash).map(|header| header.number); tx.send(Ok(block_num)).unwrap(); }, + AllMessages::DisputeDistribution(DisputeDistributionMessage::SendDispute(msg)) => { + sent_disputes.push(msg); + }, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + _new_leaf, + RuntimeApiRequest::CandidateEvents(tx), + )) => { + tx.send(Ok(candidate_events.clone())).unwrap(); + }, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + _new_leaf, + RuntimeApiRequest::FetchOnChainVotes(tx), + )) => { + //add some `BackedCandidates` or resolved disputes here as needed + tx.send(Ok(Some(ScrapedOnChainVotes { + session, + backing_validators_per_candidate: Vec::default(), + disputes: MultiDisputeStatementSet::default(), + }))) + .unwrap(); + }, + AllMessages::ChainApi(ChainApiMessage::Ancestors { hash, k, response_channel }) => { + let target_header = self + .headers + .get(&hash) + .expect("The function is called for this block so it should exist"); + let mut response = Vec::new(); + for i in target_header.number.saturating_sub(k as u32)..target_header.number { + response.push( + self.block_num_to_header + .get(&i) + .expect("headers and block_num_to_header should always be in sync") + .clone(), + ); + } + let _ = response_channel.send(Ok(response)); + }, msg => { panic!("Received unexpected message in `handle_sync_queries`: {:?}", msg); }, } } + return sent_disputes } async fn handle_resume_sync( &mut self, virtual_overseer: &mut VirtualOverseer, session: SessionIndex, - ) { + ) -> Vec { + self.handle_resume_sync_with_events(virtual_overseer, session, Vec::new()).await + } + + async fn handle_resume_sync_with_events( + &mut self, + virtual_overseer: &mut VirtualOverseer, + session: SessionIndex, + mut initial_events: Vec, + ) -> Vec { let leaves: Vec = self.headers.keys().cloned().collect(); + let mut messages = Vec::new(); for (n, leaf) in leaves.iter().enumerate() { gum::debug!( block_number= ?n, @@ -449,15 +479,14 @@ impl TestState { ))) .await; - self.handle_sync_queries( - virtual_overseer, - *leaf, - n as BlockNumber, - session, - Vec::new(), - ) - .await; + let events = if n == 1 { std::mem::take(&mut initial_events) } else { Vec::new() }; + + let mut new_messages = self + .handle_sync_queries(virtual_overseer, *leaf, n as BlockNumber, session, events) + .await; + messages.append(&mut new_messages); } + messages } fn session_info(&self) -> SessionInfo { @@ -580,7 +609,34 @@ fn test_harness(test: F) -> TestState where F: FnOnce(TestState, VirtualOverseer) -> BoxFuture<'static, TestState>, { - TestState::default().resume(test) + let mut test_state = TestState::default(); + + // Add two more blocks after the genesis (which is created in `default()`) + let h1 = Header { + parent_hash: test_state.last_block.clone(), + number: 1, + digest: dummy_digest(), + state_root: dummy_hash(), + extrinsics_root: dummy_hash(), + }; + let h1_hash = h1.hash(); + test_state.headers.insert(h1_hash.clone(), h1); + test_state.block_num_to_header.insert(1, h1_hash.clone()); + test_state.last_block = h1_hash; + + let h2 = Header { + parent_hash: test_state.last_block.clone(), + number: 2, + digest: dummy_digest(), + state_root: dummy_hash(), + extrinsics_root: dummy_hash(), + }; + let h2_hash = h2.hash(); + test_state.headers.insert(h2_hash.clone(), h2); + test_state.block_num_to_header.insert(2, h2_hash.clone()); + test_state.last_block = h2_hash; + + test_state.resume(test) } /// Handle participation messages. @@ -648,6 +704,18 @@ pub async fn handle_approval_vote_request( ); } +/// Handle block number request. In the context of these tests this message is required for +/// handling comparator creation for enqueuing participations. +async fn handle_get_block_number(ctx_handle: &mut VirtualOverseer, test_state: &TestState) { + assert_matches!( + ctx_handle.recv().await, + AllMessages::ChainApi( + ChainApiMessage::BlockNumber(hash, tx)) => { + tx.send(Ok(test_state.headers.get(&hash).map(|r| r.number))).unwrap(); + } + ) +} + #[test] fn too_many_unconfirmed_statements_are_considered_spam() { test_harness(|mut test_state, mut virtual_overseer| { @@ -1273,7 +1341,7 @@ fn backing_statements_import_works_and_no_spam() { }) .await; - // Result should be valid, because our node participated, so spam slots are cleared: + // Import should be valid, as spam slots were not filled assert_matches!(confirmation_rx.await, Ok(ImportStatementsResult::ValidImport)); virtual_overseer.send(FromOrchestra::Signal(OverseerSignal::Conclude)).await; @@ -1735,7 +1803,7 @@ fn supermajority_valid_dispute_may_be_finalized() { .await; let supermajority_threshold = - polkadot_primitives::v2::supermajority_threshold(test_state.validators.len()); + polkadot_primitives::supermajority_threshold(test_state.validators.len()); let (valid_vote, invalid_vote) = generate_opposing_votes_pair( &test_state, @@ -1874,7 +1942,7 @@ fn concluded_supermajority_for_non_active_after_time() { .await; let supermajority_threshold = - polkadot_primitives::v2::supermajority_threshold(test_state.validators.len()); + polkadot_primitives::supermajority_threshold(test_state.validators.len()); let (valid_vote, invalid_vote) = generate_opposing_votes_pair( &test_state, @@ -1991,7 +2059,7 @@ fn concluded_supermajority_against_non_active_after_time() { .await; let supermajority_threshold = - polkadot_primitives::v2::supermajority_threshold(test_state.validators.len()); + polkadot_primitives::supermajority_threshold(test_state.validators.len()); let (valid_vote, invalid_vote) = generate_opposing_votes_pair( &test_state, @@ -2095,6 +2163,7 @@ fn concluded_supermajority_against_non_active_after_time() { #[test] fn resume_dispute_without_local_statement() { + sp_tracing::init_for_tests(); let session = 1; test_harness(|mut test_state, mut virtual_overseer| { @@ -2135,10 +2204,8 @@ fn resume_dispute_without_local_statement() { handle_approval_vote_request(&mut virtual_overseer, &candidate_hash, HashMap::new()) .await; - // Missing availability -> No local vote. // Participation won't happen here because the dispute is neither backed, not confirmed // nor the candidate is included. Or in other words - we'll refrain from participation. - assert_eq!(confirmation_rx.await, Ok(ImportStatementsResult::ValidImport)); { @@ -2163,7 +2230,17 @@ fn resume_dispute_without_local_statement() { // local statement for the active dispute. .resume(|mut test_state, mut virtual_overseer| { Box::pin(async move { - test_state.handle_resume_sync(&mut virtual_overseer, session).await; + let candidate_receipt = make_valid_candidate_receipt(); + // Candidate is now backed: + let dispute_messages = test_state + .handle_resume_sync_with_events( + &mut virtual_overseer, + session, + vec![make_candidate_backed_event(candidate_receipt.clone())], + ) + .await; + + assert_eq!(dispute_messages.len(), 0, "We don't expect any messages sent here."); let candidate_receipt = make_valid_candidate_receipt(); let candidate_hash = candidate_receipt.hash(); @@ -2229,6 +2306,7 @@ fn resume_dispute_without_local_statement() { #[test] fn resume_dispute_with_local_statement() { + sp_tracing::init_for_tests(); let session = 1; test_harness(|mut test_state, mut virtual_overseer| { @@ -2306,10 +2384,19 @@ fn resume_dispute_with_local_statement() { }) }) // Alice should not send a DisputeParticiationMessage::Participate on restart since she has a - // local statement for the active dispute. + // local statement for the active dispute, instead she should try to (re-)send her vote. .resume(|mut test_state, mut virtual_overseer| { + let candidate_receipt = make_valid_candidate_receipt(); Box::pin(async move { - test_state.handle_resume_sync(&mut virtual_overseer, session).await; + let messages = test_state + .handle_resume_sync_with_events( + &mut virtual_overseer, + session, + vec![make_candidate_backed_event(candidate_receipt.clone())], + ) + .await; + + assert_eq!(messages.len(), 1, "A message should have gone out."); // Assert that subsystem is not sending Participation messages because we issued a local statement assert!(virtual_overseer.recv().timeout(TEST_TIMEOUT).await.is_none()); @@ -2337,7 +2424,12 @@ fn resume_dispute_without_local_statement_or_local_key() { let candidate_hash = candidate_receipt.hash(); test_state - .activate_leaf_at_session(&mut virtual_overseer, session, 1, Vec::new()) + .activate_leaf_at_session( + &mut virtual_overseer, + session, + 1, + vec![make_candidate_included_event(candidate_receipt.clone())], + ) .await; let (valid_vote, invalid_vote) = generate_opposing_votes_pair( @@ -2411,101 +2503,6 @@ fn resume_dispute_without_local_statement_or_local_key() { }); } -#[test] -fn resume_dispute_with_local_statement_without_local_key() { - let session = 1; - - let test_state = TestState::default(); - let mut test_state = test_state.resume(|mut test_state, mut virtual_overseer| { - Box::pin(async move { - test_state.handle_resume_sync(&mut virtual_overseer, session).await; - - let candidate_receipt = make_valid_candidate_receipt(); - let candidate_hash = candidate_receipt.hash(); - - test_state - .activate_leaf_at_session(&mut virtual_overseer, session, 1, Vec::new()) - .await; - - let local_valid_vote = test_state - .issue_explicit_statement_with_index( - ValidatorIndex(0), - candidate_hash, - session, - true, - ) - .await; - - let (valid_vote, invalid_vote) = generate_opposing_votes_pair( - &test_state, - ValidatorIndex(1), - ValidatorIndex(2), - candidate_hash, - session, - VoteType::Explicit, - ) - .await; - - let (pending_confirmation, confirmation_rx) = oneshot::channel(); - virtual_overseer - .send(FromOrchestra::Communication { - msg: DisputeCoordinatorMessage::ImportStatements { - candidate_receipt: candidate_receipt.clone(), - session, - statements: vec![ - (local_valid_vote, ValidatorIndex(0)), - (valid_vote, ValidatorIndex(1)), - (invalid_vote, ValidatorIndex(2)), - ], - pending_confirmation: Some(pending_confirmation), - }, - }) - .await; - handle_approval_vote_request(&mut virtual_overseer, &candidate_hash, HashMap::new()) - .await; - - assert_eq!(confirmation_rx.await, Ok(ImportStatementsResult::ValidImport)); - - { - let (tx, rx) = oneshot::channel(); - - virtual_overseer - .send(FromOrchestra::Communication { - msg: DisputeCoordinatorMessage::ActiveDisputes(tx), - }) - .await; - - assert_eq!(rx.await.unwrap().len(), 1); - } - - virtual_overseer.send(FromOrchestra::Signal(OverseerSignal::Conclude)).await; - assert!(virtual_overseer.try_recv().await.is_none()); - - test_state - }) - }); - - // No keys: - test_state.subsystem_keystore = - make_keystore(vec![Sr25519Keyring::Two.to_seed()].into_iter()).into(); - // Two should not send a DisputeParticiationMessage::Participate on restart since we gave - // her a non existing key. - test_state.resume(|mut test_state, mut virtual_overseer| { - Box::pin(async move { - test_state.handle_resume_sync(&mut virtual_overseer, session).await; - - // Assert that subsystem is not sending Participation messages because we don't - // have a key. - assert!(virtual_overseer.recv().timeout(TEST_TIMEOUT).await.is_none()); - - virtual_overseer.send(FromOrchestra::Signal(OverseerSignal::Conclude)).await; - assert!(virtual_overseer.try_recv().await.is_none()); - - test_state - }) - }); -} - #[test] fn issue_valid_local_statement_does_cause_distribution_but_not_duplicate_participation() { issue_local_statement_does_cause_distribution_but_not_duplicate_participation(true); @@ -3013,7 +3010,7 @@ fn participation_for_included_candidates() { assert_eq!(rx.await.unwrap().len(), 1); - // check if we have participated (casted a vote) + // check if we have participated (cast a vote) let (tx, rx) = oneshot::channel(); virtual_overseer .send(FromOrchestra::Communication { @@ -3035,3 +3032,401 @@ fn participation_for_included_candidates() { }) }); } + +/// Shows that importing backing votes when a backing event is being processed +/// results in participation. +#[test] +fn local_participation_in_dispute_for_backed_candidate() { + test_harness(|mut test_state, mut virtual_overseer| { + Box::pin(async move { + let session = 1; + + test_state.handle_resume_sync(&mut virtual_overseer, session).await; + + let candidate_receipt = make_valid_candidate_receipt(); + let candidate_hash = candidate_receipt.hash(); + + // Step 1: Show that we don't participate when not backed, confirmed, or included + + // activate leaf - without candidate backed event + test_state + .activate_leaf_at_session(&mut virtual_overseer, session, 1, vec![]) + .await; + + // generate two votes + let (valid_vote, invalid_vote) = generate_opposing_votes_pair( + &test_state, + ValidatorIndex(1), + ValidatorIndex(2), + candidate_hash, + session, + VoteType::Explicit, + ) + .await; + + virtual_overseer + .send(FromOrchestra::Communication { + msg: DisputeCoordinatorMessage::ImportStatements { + candidate_receipt: candidate_receipt.clone(), + session, + statements: vec![ + (valid_vote, ValidatorIndex(1)), + (invalid_vote, ValidatorIndex(2)), + ], + pending_confirmation: None, + }, + }) + .await; + + handle_approval_vote_request(&mut virtual_overseer, &candidate_hash, HashMap::new()) + .await; + + assert_matches!(virtual_overseer.recv().timeout(TEST_TIMEOUT).await, None); + + // Step 2: Show that once backing votes are processed we participate + + // Activate leaf: With candidate backed event + test_state + .activate_leaf_at_session( + &mut virtual_overseer, + session, + 1, + vec![make_candidate_backed_event(candidate_receipt.clone())], + ) + .await; + + let backing_valid = test_state + .issue_backing_statement_with_index(ValidatorIndex(3), candidate_hash, session) + .await; + + virtual_overseer + .send(FromOrchestra::Communication { + msg: DisputeCoordinatorMessage::ImportStatements { + candidate_receipt: candidate_receipt.clone(), + session, + statements: vec![(backing_valid, ValidatorIndex(3))], + pending_confirmation: None, + }, + }) + .await; + + participation_with_distribution( + &mut virtual_overseer, + &candidate_hash, + candidate_receipt.commitments_hash, + ) + .await; + + // Check for our 1 active dispute + let (tx, rx) = oneshot::channel(); + virtual_overseer + .send(FromOrchestra::Communication { + msg: DisputeCoordinatorMessage::ActiveDisputes(tx), + }) + .await; + + assert_eq!(rx.await.unwrap().len(), 1); + + // check if we have participated (casted a vote) + let (tx, rx) = oneshot::channel(); + virtual_overseer + .send(FromOrchestra::Communication { + msg: DisputeCoordinatorMessage::QueryCandidateVotes( + vec![(session, candidate_hash)], + tx, + ), + }) + .await; + + let (_, _, votes) = rx.await.unwrap().get(0).unwrap().clone(); + assert_eq!(votes.valid.raw().len(), 3); // 3 => 1 initial vote, 1 backing vote, and our vote + assert_eq!(votes.invalid.len(), 1); + + // Wrap up + virtual_overseer.send(FromOrchestra::Signal(OverseerSignal::Conclude)).await; + + test_state + }) + }); +} + +/// Shows that when a candidate_included event is scraped from the chain we +/// reprioritize any participation requests pertaining to that candidate. +/// This involves moving the request for this candidate from the best effort +/// queue to the priority queue. +#[test] +fn participation_requests_reprioritized_for_newly_included() { + test_harness(|mut test_state, mut virtual_overseer| { + Box::pin(async move { + let session = 1; + test_state.handle_resume_sync(&mut virtual_overseer, session).await; + let mut receipts: Vec = Vec::new(); + + // Generate all receipts + for repetition in 1..=3u8 { + // Building candidate receipts + let mut candidate_receipt = make_valid_candidate_receipt(); + candidate_receipt.descriptor.pov_hash = Hash::from( + [repetition; 32], // Altering this receipt so its hash will be changed + ); + // Set consecutive parents (starting from zero). They will order the candidates for participation. + let parent_block_num: BlockNumber = repetition as BlockNumber - 1; + candidate_receipt.descriptor.relay_parent = + test_state.block_num_to_header.get(&parent_block_num).unwrap().clone(); + receipts.push(candidate_receipt.clone()); + } + + // Mark all candidates as backed, so their participation requests make it to best effort. + // These calls must all occur before including the candidates due to test overseer + // oddities. + let mut candidate_events = Vec::new(); + for r in receipts.iter() { + candidate_events.push(make_candidate_backed_event(r.clone())) + } + test_state + .activate_leaf_at_session(&mut virtual_overseer, session, 1, candidate_events) + .await; + + for (idx, candidate_receipt) in receipts.iter().enumerate() { + let candidate_hash = candidate_receipt.hash(); + + // Create votes for candidates + let (valid_vote, invalid_vote) = generate_opposing_votes_pair( + &test_state, + ValidatorIndex(1), + ValidatorIndex(2), + candidate_hash, + session, + VoteType::Explicit, + ) + .await; + + // Import votes for candidates + virtual_overseer + .send(FromOrchestra::Communication { + msg: DisputeCoordinatorMessage::ImportStatements { + candidate_receipt: candidate_receipt.clone(), + session, + statements: vec![ + (valid_vote, ValidatorIndex(1)), + (invalid_vote, ValidatorIndex(2)), + ], + pending_confirmation: None, + }, + }) + .await; + + // Handle corresponding messages to unblock import + // we need to handle `ApprovalVotingMessage::GetApprovalSignaturesForCandidate` for import + handle_approval_vote_request( + &mut virtual_overseer, + &candidate_hash, + HashMap::new(), + ) + .await; + + // We'll trigger participation for the first `MAX_PARALLEL_PARTICIPATIONS` candidates. + // The rest will be queued => we need to handle `ChainApiMessage::BlockNumber` for them. + if idx >= crate::participation::MAX_PARALLEL_PARTICIPATIONS { + // We send the `idx` as parent block number, because it is used for ordering. + // This way we get predictable ordering and participation. + handle_get_block_number(&mut virtual_overseer, &test_state).await; + } + } + + // Generate included event for one of the candidates here + test_state + .activate_leaf_at_session( + &mut virtual_overseer, + session, + 2, + vec![make_candidate_included_event( + receipts.last().expect("There is more than one candidate").clone(), + )], + ) + .await; + + // NB: The checks below are a bit racy. In theory candidate 2 can be processed even before candidate 0 and this is okay. If any + // of the asserts in the two functions after this comment fail -> rework `participation_with_distribution` to expect a set of + // commitment hashes instead of just one. + + // This is the candidate for which participation was started initially (`MAX_PARALLEL_PARTICIPATIONS` threshold was not yet hit) + participation_with_distribution( + &mut virtual_overseer, + &receipts.get(0).expect("There is more than one candidate").hash(), + receipts.first().expect("There is more than one candidate").commitments_hash, + ) + .await; + + // This one should have been prioritized + participation_with_distribution( + &mut virtual_overseer, + &receipts.get(2).expect("There is more than one candidate").hash(), + receipts.last().expect("There is more than one candidate").commitments_hash, + ) + .await; + + // And this is the last one + participation_with_distribution( + &mut virtual_overseer, + &receipts.get(1).expect("There is more than one candidate").hash(), + receipts.first().expect("There is more than one candidate").commitments_hash, + ) + .await; + + // Wrap up + virtual_overseer.send(FromOrchestra::Signal(OverseerSignal::Conclude)).await; + + test_state + }) + }); +} + +// When a dispute has concluded against a parachain block candidate we want to notify +// the chain selection subsystem. Then chain selection can revert the relay parents of +// the disputed candidate and mark all descendants as non-viable. This direct +// notification saves time compared to letting chain selection learn about a dispute +// conclusion from an on chain revert log. +#[test] +fn informs_chain_selection_when_dispute_concluded_against() { + test_harness(|mut test_state, mut virtual_overseer| { + Box::pin(async move { + let session = 1; + + test_state.handle_resume_sync(&mut virtual_overseer, session).await; + + let candidate_receipt = make_invalid_candidate_receipt(); + let parent_1_number = 1; + let parent_2_number = 2; + + let candidate_hash = candidate_receipt.hash(); + + // Including test candidate in 2 different parent blocks + let block_1_header = Header { + parent_hash: test_state.last_block, + number: parent_1_number, + digest: dummy_digest(), + state_root: dummy_hash(), + extrinsics_root: dummy_hash(), + }; + let parent_1_hash = block_1_header.hash(); + + test_state + .activate_leaf_at_session( + &mut virtual_overseer, + session, + parent_1_number, + vec![make_candidate_included_event(candidate_receipt.clone())], + ) + .await; + + let block_2_header = Header { + parent_hash: test_state.last_block, + number: parent_2_number, + digest: dummy_digest(), + state_root: dummy_hash(), + extrinsics_root: dummy_hash(), + }; + let parent_2_hash = block_2_header.hash(); + + test_state + .activate_leaf_at_session( + &mut virtual_overseer, + session, + parent_2_number, + vec![make_candidate_included_event(candidate_receipt.clone())], + ) + .await; + + let supermajority_threshold = + polkadot_primitives::supermajority_threshold(test_state.validators.len()); + + let (valid_vote, invalid_vote) = generate_opposing_votes_pair( + &test_state, + ValidatorIndex(2), + ValidatorIndex(1), + candidate_hash, + session, + VoteType::Explicit, + ) + .await; + + let (pending_confirmation, confirmation_rx) = oneshot::channel(); + virtual_overseer + .send(FromOrchestra::Communication { + msg: DisputeCoordinatorMessage::ImportStatements { + candidate_receipt: candidate_receipt.clone(), + session, + statements: vec![ + (valid_vote, ValidatorIndex(2)), + (invalid_vote, ValidatorIndex(1)), + ], + pending_confirmation: Some(pending_confirmation), + }, + }) + .await; + handle_approval_vote_request(&mut virtual_overseer, &candidate_hash, HashMap::new()) + .await; + assert_matches!(confirmation_rx.await.unwrap(), + ImportStatementsResult::ValidImport => {} + ); + + // Use a different expected commitments hash to ensure the candidate validation returns invalid. + participation_with_distribution( + &mut virtual_overseer, + &candidate_hash, + CandidateCommitments::default().hash(), + ) + .await; + + let mut statements = Vec::new(); + // minus 2, because of local vote and one previously imported invalid vote. + for i in (0_u32..supermajority_threshold as u32 - 2).map(|i| i + 3) { + let vote = test_state + .issue_explicit_statement_with_index( + ValidatorIndex(i), + candidate_hash, + session, + false, + ) + .await; + + statements.push((vote, ValidatorIndex(i as _))); + } + + virtual_overseer + .send(FromOrchestra::Communication { + msg: DisputeCoordinatorMessage::ImportStatements { + candidate_receipt: candidate_receipt.clone(), + session, + statements, + pending_confirmation: None, + }, + }) + .await; + handle_approval_vote_request(&mut virtual_overseer, &candidate_hash, HashMap::new()) + .await; + + // Checking that concluded dispute has signaled the reversion of all parent blocks. + assert_matches!( + virtual_overseer.recv().await, + AllMessages::ChainSelection( + ChainSelectionMessage::RevertBlocks(revert_set) + ) => { + assert!(revert_set.contains(&(parent_1_number, parent_1_hash))); + assert!(revert_set.contains(&(parent_2_number, parent_2_hash))); + }, + "Overseer did not receive `ChainSelectionMessage::RevertBlocks` message" + ); + + // Wrap up + virtual_overseer.send(FromOrchestra::Signal(OverseerSignal::Conclude)).await; + assert_matches!( + virtual_overseer.try_recv().await, + None => {} + ); + + test_state + }) + }); +} diff --git a/node/core/parachains-inherent/Cargo.toml b/node/core/parachains-inherent/Cargo.toml index 36727371981c..ef6b2127247c 100644 --- a/node/core/parachains-inherent/Cargo.toml +++ b/node/core/parachains-inherent/Cargo.toml @@ -13,6 +13,5 @@ async-trait = "0.1.57" polkadot-node-subsystem = { path = "../../subsystem" } polkadot-overseer = { path = "../../overseer" } polkadot-primitives = { path = "../../../primitives" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-inherents = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-inherents = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } diff --git a/node/core/parachains-inherent/src/lib.rs b/node/core/parachains-inherent/src/lib.rs index 7634522128e7..2df6b3de8ab6 100644 --- a/node/core/parachains-inherent/src/lib.rs +++ b/node/core/parachains-inherent/src/lib.rs @@ -28,8 +28,7 @@ use futures::{select, FutureExt}; use polkadot_node_subsystem::{ errors::SubsystemError, messages::ProvisionerMessage, overseer::Handle, }; -use polkadot_primitives::v2::{Block, Hash, InherentData as ParachainsInherentData}; -use sp_runtime::generic::BlockId; +use polkadot_primitives::{Block, Hash, InherentData as ParachainsInherentData}; use std::{sync::Arc, time}; pub(crate) const LOG_TARGET: &str = "parachain::parachains-inherent"; @@ -87,7 +86,7 @@ impl> ParachainsInherentDataProvider { let mut timeout = futures_timer::Delay::new(PROVISIONER_TIMEOUT).fuse(); - let parent_header = match client.header(BlockId::Hash(parent)) { + let parent_header = match client.header(parent) { Ok(Some(h)) => h, Ok(None) => return Err(Error::ParentHeaderNotFound(parent)), Err(err) => return Err(Error::Blockchain(err)), @@ -141,7 +140,7 @@ impl> sp_inherents::InherentDataProvider .map_err(|e| sp_inherents::Error::Application(Box::new(e)))?; dst_inherent_data - .put_data(polkadot_primitives::v2::PARACHAINS_INHERENT_IDENTIFIER, &inherent_data) + .put_data(polkadot_primitives::PARACHAINS_INHERENT_IDENTIFIER, &inherent_data) } async fn try_handle_error( diff --git a/node/core/provisioner/Cargo.toml b/node/core/provisioner/Cargo.toml index df7fdc1a9511..5f6e2ae4139f 100644 --- a/node/core/provisioner/Cargo.toml +++ b/node/core/provisioner/Cargo.toml @@ -18,7 +18,7 @@ futures-timer = "3.0.2" fatality = "0.0.6" [dev-dependencies] -sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } test-helpers = { package = "polkadot-primitives-test-helpers", path = "../../../primitives/test-helpers" } diff --git a/node/core/provisioner/src/disputes/mod.rs b/node/core/provisioner/src/disputes/mod.rs index bd19e101bb2e..e5649e7b6c04 100644 --- a/node/core/provisioner/src/disputes/mod.rs +++ b/node/core/provisioner/src/disputes/mod.rs @@ -25,7 +25,7 @@ use crate::LOG_TARGET; use futures::channel::oneshot; use polkadot_node_primitives::CandidateVotes; use polkadot_node_subsystem::{messages::DisputeCoordinatorMessage, overseer}; -use polkadot_primitives::v2::{CandidateHash, SessionIndex}; +use polkadot_primitives::{CandidateHash, SessionIndex}; /// Request the relevant dispute statements for a set of disputes identified by `CandidateHash` and the `SessionIndex`. async fn request_votes( diff --git a/node/core/provisioner/src/disputes/prioritized_selection/mod.rs b/node/core/provisioner/src/disputes/prioritized_selection/mod.rs index 8ac582bb1cc4..630fd33855a5 100644 --- a/node/core/provisioner/src/disputes/prioritized_selection/mod.rs +++ b/node/core/provisioner/src/disputes/prioritized_selection/mod.rs @@ -26,9 +26,9 @@ use polkadot_node_subsystem::{ messages::{DisputeCoordinatorMessage, RuntimeApiMessage, RuntimeApiRequest}, overseer, ActivatedLeaf, }; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ supermajority_threshold, CandidateHash, DisputeState, DisputeStatement, DisputeStatementSet, - Hash, MultiDisputeStatementSet, SessionIndex, ValidatorIndex, + Hash, MultiDisputeStatementSet, SessionIndex, ValidDisputeStatementKind, ValidatorIndex, }; use std::{ collections::{BTreeMap, HashMap}, @@ -100,7 +100,15 @@ where // Fetch the onchain disputes. We'll do a prioritization based on them. let onchain = match get_onchain_disputes(sender, leaf.hash).await { - Ok(r) => r, + Ok(r) => { + gum::trace!( + target: LOG_TARGET, + ?leaf, + "Successfully fetched {} onchain disputes", + r.len() + ); + r + }, Err(GetOnchainDisputesError::NotSupported(runtime_api_err, relay_parent)) => { // Runtime version is checked before calling this method, so the error below should never happen! gum::error!( @@ -129,7 +137,9 @@ where HashMap::new() }, }; + metrics.on_fetched_onchain_disputes(onchain.keys().len() as u64); + gum::trace!(target: LOG_TARGET, ?leaf, "Fetching recent disputes"); let recent_disputes = request_disputes(sender).await; gum::trace!( target: LOG_TARGET, @@ -139,6 +149,8 @@ where onchain.len(), ); + gum::trace!(target: LOG_TARGET, ?leaf, "Filtering recent disputes"); + // Filter out unconfirmed disputes. However if the dispute is already onchain - don't skip it. // In this case we'd better push as much fresh votes as possible to bring it to conclusion faster. let recent_disputes = recent_disputes @@ -146,6 +158,7 @@ where .filter(|d| d.2.is_confirmed_concluded() || onchain.contains_key(&(d.0, d.1))) .collect::>(); + gum::trace!(target: LOG_TARGET, ?leaf, "Partitioning recent disputes"); let partitioned = partition_recent_disputes(recent_disputes, &onchain); metrics.on_partition_recent_disputes(&partitioned); @@ -153,12 +166,15 @@ where gum::warn!( target: LOG_TARGET, ?leaf, - "Got {} inactive unknown onchain disputes. This should not happen!", + "Got {} inactive unknown onchain disputes. This should not happen in normal conditions!", partitioned.inactive_unknown_onchain.len() ); } + + gum::trace!(target: LOG_TARGET, ?leaf, "Vote selection for recent disputes"); let result = vote_selection(sender, partitioned, &onchain).await; + gum::trace!(target: LOG_TARGET, ?leaf, "Convert to multi dispute statement set"); make_multi_dispute_statement_set(metrics, result) } @@ -179,11 +195,13 @@ where let mut result = BTreeMap::new(); let mut request_votes_counter = 0; while !disputes.is_empty() { + gum::trace!(target: LOG_TARGET, "has to process {} disputes left", disputes.len()); let batch_size = std::cmp::min(VOTES_SELECTION_BATCH_SIZE, disputes.len()); let batch = Vec::from_iter(disputes.drain(0..batch_size)); // Filter votes which are already onchain request_votes_counter += 1; + gum::trace!(target: LOG_TARGET, "requesting onchain votes",); let votes = super::request_votes(sender, batch) .await .into_iter() @@ -213,14 +231,25 @@ where (session_index, candidate_hash, votes) }) .collect::>(); + gum::trace!(target: LOG_TARGET, "got {} onchain votes after processing", votes.len()); // Check if votes are within the limit for (session_index, candidate_hash, selected_votes) in votes { let votes_len = selected_votes.valid.raw().len() + selected_votes.invalid.len(); if votes_len + total_votes_len > MAX_DISPUTE_VOTES_FORWARDED_TO_RUNTIME { - // we are done - no more votes can be added + // we are done - no more votes can be added. Importantly, we don't add any votes for a dispute here + // if we can't fit them all. This gives us an important invariant, that backing votes for + // disputes make it into the provisioned vote set. + gum::trace!( + target: LOG_TARGET, + ?request_votes_counter, + ?total_votes_len, + "vote_selection DisputeCoordinatorMessage::QueryCandidateVotes counter", + ); + return result } + result.insert((session_index, candidate_hash), selected_votes); total_votes_len += votes_len } @@ -229,6 +258,7 @@ where gum::trace!( target: LOG_TARGET, ?request_votes_counter, + ?total_votes_len, "vote_selection DisputeCoordinatorMessage::QueryCandidateVotes counter", ); @@ -362,10 +392,20 @@ fn is_vote_worth_to_keep( dispute_statement: DisputeStatement, onchain_state: &DisputeState, ) -> bool { - let offchain_vote = match dispute_statement { - DisputeStatement::Valid(_) => true, - DisputeStatement::Invalid(_) => false, + let (offchain_vote, valid_kind) = match dispute_statement { + DisputeStatement::Valid(kind) => (true, Some(kind)), + DisputeStatement::Invalid(_) => (false, None), }; + // We want to keep all backing votes. This maximizes the number of backers + // punished when misbehaving. + if let Some(kind) = valid_kind { + match kind { + ValidDisputeStatementKind::BackingValid(_) | + ValidDisputeStatementKind::BackingSeconded(_) => return true, + _ => (), + } + } + let in_validators_for = onchain_state .validators_for .get(validator_index.0 as usize) diff --git a/node/core/provisioner/src/disputes/prioritized_selection/tests.rs b/node/core/provisioner/src/disputes/prioritized_selection/tests.rs index 982d19356e6a..96b509a59095 100644 --- a/node/core/provisioner/src/disputes/prioritized_selection/tests.rs +++ b/node/core/provisioner/src/disputes/prioritized_selection/tests.rs @@ -25,7 +25,7 @@ use polkadot_node_subsystem::messages::{ AllMessages, DisputeCoordinatorMessage, RuntimeApiMessage, RuntimeApiRequest, }; use polkadot_node_subsystem_test_helpers::TestSubsystemSender; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ CandidateHash, DisputeState, InvalidDisputeStatementKind, SessionIndex, ValidDisputeStatementKind, ValidatorSignature, }; diff --git a/node/core/provisioner/src/disputes/random_selection/mod.rs b/node/core/provisioner/src/disputes/random_selection/mod.rs index 9a827475aa55..e08ee4c109b1 100644 --- a/node/core/provisioner/src/disputes/random_selection/mod.rs +++ b/node/core/provisioner/src/disputes/random_selection/mod.rs @@ -24,7 +24,7 @@ use crate::{metrics, LOG_TARGET}; use futures::channel::oneshot; use polkadot_node_subsystem::{messages::DisputeCoordinatorMessage, overseer}; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ CandidateHash, DisputeStatement, DisputeStatementSet, MultiDisputeStatementSet, SessionIndex, }; use std::collections::HashSet; diff --git a/node/core/provisioner/src/error.rs b/node/core/provisioner/src/error.rs index 9fb958c4f339..de520fc1fe04 100644 --- a/node/core/provisioner/src/error.rs +++ b/node/core/provisioner/src/error.rs @@ -19,7 +19,7 @@ use fatality::Nested; use futures::channel::{mpsc, oneshot}; use polkadot_node_subsystem::errors::{ChainApiError, RuntimeApiError, SubsystemError}; use polkadot_node_subsystem_util as util; -use polkadot_primitives::v2::Hash; +use polkadot_primitives::Hash; pub type FatalResult = std::result::Result; pub type Result = std::result::Result; diff --git a/node/core/provisioner/src/lib.rs b/node/core/provisioner/src/lib.rs index fcb65d66f286..be0b051a107c 100644 --- a/node/core/provisioner/src/lib.rs +++ b/node/core/provisioner/src/lib.rs @@ -37,7 +37,7 @@ use polkadot_node_subsystem::{ use polkadot_node_subsystem_util::{ request_availability_cores, request_persisted_validation_data, TimeoutExt, }; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ BackedCandidate, BlockNumber, CandidateReceipt, CoreState, Hash, OccupiedCoreAssumption, SignedAvailabilityBitfield, ValidatorIndex, }; @@ -179,11 +179,13 @@ fn handle_active_leaves_update( per_relay_parent: &mut HashMap, inherent_delays: &mut InherentDelays, ) { + gum::trace!(target: LOG_TARGET, "Handle ActiveLeavesUpdate"); for deactivated in &update.deactivated { per_relay_parent.remove(deactivated); } if let Some(leaf) = update.activated { + gum::trace!(target: LOG_TARGET, leaf_hash=?leaf.hash, "Adding delay"); let delay_fut = Delay::new(PRE_PROPOSE_TIMEOUT).map(move |_| leaf.hash).boxed(); per_relay_parent.insert(leaf.hash, PerRelayParent::new(leaf)); inherent_delays.push(delay_fut); @@ -324,7 +326,26 @@ fn note_provisionable_data( .with_para_id(backed_candidate.descriptor().para_id); per_relay_parent.backed_candidates.push(backed_candidate) }, - _ => {}, + // We choose not to punish these forms of misbehavior for the time being. + // Risks from misbehavior are sufficiently mitigated at the protocol level + // via reputation changes. Punitive actions here may become desirable + // enough to dedicate time to in the future. + ProvisionableData::MisbehaviorReport(_, _, _) => {}, + // We wait and do nothing here, preferring to initiate a dispute after the + // parablock candidate is included for the following reasons: + // + // 1. A dispute for a candidate triggered at any point before the candidate + // has been made available, including the backing stage, can't be + // guaranteed to conclude. Non-concluding disputes are unacceptable. + // 2. Candidates which haven't been made available don't pose a security + // risk as they can not be included, approved, or finalized. + // + // Currently we rely on approval checkers to trigger disputes for bad + // parablocks once they are included. But we can do slightly better by + // allowing disagreeing backers to record their disagreement and initiate a + // dispute once the parablock in question has been included. This potential + // change is tracked by: https://github.com/paritytech/polkadot/issues/3232 + ProvisionableData::Dispute(_, _) => {}, } } @@ -590,6 +611,10 @@ async fn select_candidates( } } + gum::trace!(target: LOG_TARGET, + leaf_hash=?relay_parent, + "before GetBackedCandidates"); + // now get the backed candidates corresponding to these candidate receipts let (tx, rx) = oneshot::channel(); sender.send_unbounded_message(CandidateBackingMessage::GetBackedCandidates( @@ -598,6 +623,8 @@ async fn select_candidates( tx, )); let mut candidates = rx.await.map_err(|err| Error::CanceledBackedCandidates(err))?; + gum::trace!(target: LOG_TARGET, leaf_hash=?relay_parent, + "Got {} backed candidates", candidates.len()); // `selected_candidates` is generated in ascending order by core index, and `GetBackedCandidates` // _should_ preserve that property, but let's just make sure. diff --git a/node/core/provisioner/src/metrics.rs b/node/core/provisioner/src/metrics.rs index 8b6bb37284cb..f4f683470227 100644 --- a/node/core/provisioner/src/metrics.rs +++ b/node/core/provisioner/src/metrics.rs @@ -36,6 +36,9 @@ struct MetricsInner { /// The disputes received from `disputes-coordinator` by partition partitioned_disputes: prometheus::CounterVec, + + /// The disputes fetched from the runtime. + fetched_onchain_disputes: prometheus::Counter, } /// Provisioner metrics. @@ -143,6 +146,12 @@ impl Metrics { .inc_by(inactive_concluded_known_onchain.len().try_into().unwrap_or(0)); } } + + pub(crate) fn on_fetched_onchain_disputes(&self, onchain_count: u64) { + if let Some(metrics) = &self.0 { + metrics.fetched_onchain_disputes.inc_by(onchain_count); + } + } } impl metrics::Metrics for Metrics { @@ -202,12 +211,17 @@ impl metrics::Metrics for Metrics { prometheus::CounterVec::new( prometheus::Opts::new( "polkadot_parachain_provisioner_partitioned_disputes", - "some fancy description", + "Number of disputes partitioned by type.", ), &["partition"], )?, ®istry, )?, + fetched_onchain_disputes: prometheus::register( + prometheus::Counter::new("polkadot_parachain_fetched_onchain_disputes", "Number of disputes fetched from the runtime" + )?, + ®istry, + )?, }; Ok(Metrics(Some(metrics))) } diff --git a/node/core/provisioner/src/tests.rs b/node/core/provisioner/src/tests.rs index 08eba8eabe80..fb25129ca924 100644 --- a/node/core/provisioner/src/tests.rs +++ b/node/core/provisioner/src/tests.rs @@ -1,7 +1,23 @@ +// Copyright 2017-2023 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + use super::*; use ::test_helpers::{dummy_candidate_descriptor, dummy_hash}; use bitvec::bitvec; -use polkadot_primitives::v2::{OccupiedCore, ScheduledCore}; +use polkadot_primitives::{OccupiedCore, ScheduledCore}; pub fn occupied_core(para_id: u32) -> CoreState { CoreState::Occupied(OccupiedCore { @@ -41,7 +57,7 @@ pub fn scheduled_core(id: u32) -> ScheduledCore { mod select_availability_bitfields { use super::{super::*, default_bitvec, occupied_core}; use futures::executor::block_on; - use polkadot_primitives::v2::{ScheduledCore, SigningContext, ValidatorId, ValidatorIndex}; + use polkadot_primitives::{ScheduledCore, SigningContext, ValidatorId, ValidatorIndex}; use sp_application_crypto::AppKey; use sp_keystore::{testing::KeyStore, CryptoStore, SyncCryptoStorePtr}; use std::sync::Arc; @@ -234,7 +250,7 @@ mod select_candidates { }, }; use polkadot_node_subsystem_test_helpers::TestSubsystemSender; - use polkadot_primitives::v2::{ + use polkadot_primitives::{ BlockNumber, CandidateCommitments, CommittedCandidateReceipt, PersistedValidationData, }; diff --git a/node/core/pvf-checker/Cargo.toml b/node/core/pvf-checker/Cargo.toml index b24d2378bc74..46c295bdef04 100644 --- a/node/core/pvf-checker/Cargo.toml +++ b/node/core/pvf-checker/Cargo.toml @@ -15,14 +15,14 @@ polkadot-primitives = { path = "../../../primitives" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } polkadot-overseer = { path = "../../overseer" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } [dev-dependencies] -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers"} test-helpers = { package = "polkadot-primitives-test-helpers", path = "../../../primitives/test-helpers" } -sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } futures-timer = "3.0.2" diff --git a/node/core/pvf-checker/src/interest_view.rs b/node/core/pvf-checker/src/interest_view.rs index f6af819e9856..2d537388aa53 100644 --- a/node/core/pvf-checker/src/interest_view.rs +++ b/node/core/pvf-checker/src/interest_view.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use polkadot_primitives::v2::{Hash, ValidationCodeHash}; +use polkadot_primitives::{Hash, ValidationCodeHash}; use std::collections::{ btree_map::{self, BTreeMap}, HashSet, diff --git a/node/core/pvf-checker/src/lib.rs b/node/core/pvf-checker/src/lib.rs index f31f3f728aa6..4278b74e0b15 100644 --- a/node/core/pvf-checker/src/lib.rs +++ b/node/core/pvf-checker/src/lib.rs @@ -26,7 +26,7 @@ use polkadot_node_subsystem::{ overseer, ActiveLeavesUpdate, FromOrchestra, OverseerSignal, SpawnedSubsystem, SubsystemError, SubsystemResult, SubsystemSender, }; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ BlockNumber, Hash, PvfCheckStatement, SessionIndex, ValidationCodeHash, ValidatorId, ValidatorIndex, }; @@ -190,16 +190,18 @@ async fn handle_pvf_check( PreCheckOutcome::Valid => Judgement::Valid, PreCheckOutcome::Invalid => Judgement::Invalid, PreCheckOutcome::Failed => { - // Abstain. + // Always vote against in case of failures. Voting against a PVF when encountering a + // timeout (or an unlikely node-specific issue) can be considered safe, since + // there is no slashing for being on the wrong side on a pre-check vote. // - // Returning here will leave the PVF in the view dangling. Since it is there, no new - // pre-checking request will be sent. + // Also, by being more strict here, we can safely be more lenient during preparation and + // avoid the risk of getting slashed there. gum::info!( target: LOG_TARGET, ?validation_code_hash, - "Pre-check failed, abstaining from voting", + "Pre-check failed, voting against", ); - return + Judgement::Invalid }, }; @@ -295,7 +297,7 @@ async fn handle_leaves_update( metrics.on_pvf_observed(outcome.newcomers.len()); metrics.on_pvf_left(outcome.left_num); for newcomer in outcome.newcomers { - initiate_precheck(state, sender, recent_block_hash, newcomer, metrics).await; + initiate_precheck(state, sender, activated.hash, newcomer, metrics).await; } if let Some((new_session_index, credentials)) = new_session_index { diff --git a/node/core/pvf-checker/src/runtime_api.rs b/node/core/pvf-checker/src/runtime_api.rs index ccdcce4c2c83..b42f5943af56 100644 --- a/node/core/pvf-checker/src/runtime_api.rs +++ b/node/core/pvf-checker/src/runtime_api.rs @@ -21,7 +21,7 @@ use polkadot_node_subsystem::{ messages::{RuntimeApiMessage, RuntimeApiRequest}, SubsystemSender, }; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ Hash, PvfCheckStatement, SessionIndex, ValidationCodeHash, ValidatorId, ValidatorSignature, }; diff --git a/node/core/pvf-checker/src/tests.rs b/node/core/pvf-checker/src/tests.rs index f47e642ae98d..e1b9b8a5b0db 100644 --- a/node/core/pvf-checker/src/tests.rs +++ b/node/core/pvf-checker/src/tests.rs @@ -25,7 +25,7 @@ use polkadot_node_subsystem::{ ActivatedLeaf, ActiveLeavesUpdate, FromOrchestra, LeafStatus, OverseerSignal, RuntimeApiError, }; use polkadot_node_subsystem_test_helpers::{make_subsystem_context, TestSubsystemContextHandle}; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ BlockNumber, Hash, Header, PvfCheckStatement, SessionIndex, ValidationCode, ValidationCodeHash, ValidatorId, }; @@ -157,7 +157,7 @@ impl TestState { self.active_leaves_update(handle, Some(leaf), None, &[]).await } - async fn deactive_leaves( + async fn deactivate_leaves( &mut self, handle: &mut VirtualOverseer, deactivated: impl IntoIterator, @@ -894,8 +894,8 @@ fn unexpected_pvf_check_judgement() { // Catch the pre-check request, but don't reply just yet. let pre_check = test_state.expect_candidate_precheck(&mut handle).await; - // Now deactive the leaf and reply to the precheck request. - test_state.deactive_leaves(&mut handle, &[block_1.block_hash]).await; + // Now deactivate the leaf and reply to the precheck request. + test_state.deactivate_leaves(&mut handle, &[block_1.block_hash]).await; pre_check.reply(PreCheckOutcome::Invalid); // the subsystem must remain silent. @@ -906,14 +906,17 @@ fn unexpected_pvf_check_judgement() { }); } +// Check that we do not abstain for a nondeterministic failure. Currently, this means the behavior +// is the same as if the pre-check returned `PreCheckOutcome::Invalid`. #[test] -fn abstain_for_nondeterministic_pvfcheck_failure() { +fn dont_abstain_for_nondeterministic_pvfcheck_failure() { test_harness(|mut test_state, mut handle| { async move { + let block_1 = FakeLeaf::new(dummy_hash(), 1, vec![dummy_validation_code_hash(1)]); test_state .activate_leaf_with_session( &mut handle, - FakeLeaf::new(dummy_hash(), 1, vec![dummy_validation_code_hash(1)]), + block_1.clone(), StartsNewSession { session_index: 2, validators: vec![OUR_VALIDATOR] }, ) .await; @@ -922,10 +925,14 @@ fn abstain_for_nondeterministic_pvfcheck_failure() { test_state.expect_session_for_child(&mut handle).await; test_state.expect_validators(&mut handle).await; - test_state - .expect_candidate_precheck(&mut handle) - .await - .reply(PreCheckOutcome::Failed); + // Catch the pre-check request, but don't reply just yet. + let pre_check = test_state.expect_candidate_precheck(&mut handle).await; + + // Now deactivate the leaf and reply to the precheck request. + test_state.deactivate_leaves(&mut handle, &[block_1.block_hash]).await; + pre_check.reply(PreCheckOutcome::Failed); + + // the subsystem must remain silent. test_state.send_conclude(&mut handle).await; } diff --git a/node/core/pvf/Cargo.toml b/node/core/pvf/Cargo.toml index 52dc160b709d..ee8895a58a96 100644 --- a/node/core/pvf/Cargo.toml +++ b/node/core/pvf/Cargo.toml @@ -10,37 +10,46 @@ path = "bin/puppet_worker.rs" [dependencies] always-assert = "0.1" -async-std = { version = "1.11.0", features = ["attributes"] } -async-process = "1.3.0" assert_matches = "1.4.0" cpu-time = "1.0.0" futures = "0.3.21" futures-timer = "3.0.2" -slotmap = "1.0" gum = { package = "tracing-gum", path = "../../gum" } pin-project = "1.0.9" rand = "0.8.5" +rayon = "1.6.1" +slotmap = "1.0" tempfile = "3.3.0" -rayon = "1.5.1" +tikv-jemalloc-ctl = { version = "0.5.0", optional = true } +tokio = { version = "1.24.2", features = ["fs", "process"] } -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["derive"] } polkadot-parachain = { path = "../../../parachain" } polkadot-core-primitives = { path = "../../../core-primitives" } -polkadot-node-metrics = { path = "../../metrics"} - -sc-executor = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-executor-wasmtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-executor-common = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-externalities = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-wasm-interface = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-maybe-compressed-blob = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +polkadot-node-metrics = { path = "../../metrics" } +polkadot-node-primitives = { path = "../../primitives" } + +polkadot-primitives = { path = "../../../primitives" } +sc-executor = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-executor-wasmtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-executor-common = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-externalities = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-wasm-interface = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-maybe-compressed-blob = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } + +[target.'cfg(target_os = "linux")'.dependencies] +libc = "0.2.139" +tikv-jemalloc-ctl = "0.5.0" [dev-dependencies] adder = { package = "test-parachain-adder", path = "../../../parachain/test-parachains/adder" } halt = { package = "test-parachain-halt", path = "../../../parachain/test-parachains/halt" } hex-literal = "0.3.4" -tempfile = "3.2.0" +tempfile = "3.3.0" + +[features] +jemalloc-allocator = ["dep:tikv-jemalloc-ctl"] diff --git a/node/core/pvf/src/artifacts.rs b/node/core/pvf/src/artifacts.rs index 413d73b4c558..7ddbaef38c5a 100644 --- a/node/core/pvf/src/artifacts.rs +++ b/node/core/pvf/src/artifacts.rs @@ -14,12 +14,13 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use crate::{error::PrepareError, host::PrepareResultSender}; +use crate::{error::PrepareError, host::PrepareResultSender, prepare::PrepareStats}; use always_assert::always; -use async_std::path::{Path, PathBuf}; use polkadot_parachain::primitives::ValidationCodeHash; +use polkadot_primitives::vstaging::ExecutorParamsHash; use std::{ collections::HashMap, + path::{Path, PathBuf}, time::{Duration, SystemTime}, }; @@ -37,19 +38,19 @@ impl AsRef<[u8]> for CompiledArtifact { } } -/// Identifier of an artifact. Right now it only encodes a code hash of the PVF. But if we get to -/// multiple engine implementations the artifact ID should include the engine type as well. +/// Identifier of an artifact. Encodes a code hash of the PVF and a hash of executor parameter set. #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct ArtifactId { pub(crate) code_hash: ValidationCodeHash, + pub(crate) executor_params_hash: ExecutorParamsHash, } impl ArtifactId { const PREFIX: &'static str = "wasmtime_"; /// Creates a new artifact ID with the given hash. - pub fn new(code_hash: ValidationCodeHash) -> Self { - Self { code_hash } + pub fn new(code_hash: ValidationCodeHash, executor_params_hash: ExecutorParamsHash) -> Self { + Self { code_hash, executor_params_hash } } /// Tries to recover the artifact id from the given file name. @@ -59,14 +60,18 @@ impl ArtifactId { use std::str::FromStr as _; let file_name = file_name.strip_prefix(Self::PREFIX)?; - let code_hash = Hash::from_str(file_name).ok()?.into(); + let (code_hash_str, executor_params_hash_str) = file_name.split_once('_')?; + let code_hash = Hash::from_str(code_hash_str).ok()?.into(); + let executor_params_hash = + ExecutorParamsHash::from_hash(Hash::from_str(executor_params_hash_str).ok()?); - Some(Self { code_hash }) + Some(Self { code_hash, executor_params_hash }) } /// Returns the expected path to this artifact given the root of the cache. pub fn path(&self, cache_path: &Path) -> PathBuf { - let file_name = format!("{}{:#x}", Self::PREFIX, self.code_hash); + let file_name = + format!("{}{:#x}_{:#x}", Self::PREFIX, self.code_hash, self.executor_params_hash); cache_path.join(file_name) } } @@ -101,8 +106,8 @@ pub enum ArtifactState { /// This is updated when we get the heads up for this artifact or when we just discover /// this file. last_time_needed: SystemTime, - /// The CPU time that was taken preparing this artifact. - cpu_time_elapsed: Duration, + /// Stats produced by successful preparation. + prepare_stats: PrepareStats, }, /// A task to prepare this artifact is scheduled. Preparing { @@ -136,8 +141,8 @@ impl Artifacts { pub async fn new(cache_path: &Path) -> Self { // Make sure that the cache path directory and all its parents are created. // First delete the entire cache. Nodes are long-running so this should populate shortly. - let _ = async_std::fs::remove_dir_all(cache_path).await; - let _ = async_std::fs::create_dir_all(cache_path).await; + let _ = tokio::fs::remove_dir_all(cache_path).await; + let _ = tokio::fs::create_dir_all(cache_path).await; Self { artifacts: HashMap::new() } } @@ -177,12 +182,12 @@ impl Artifacts { &mut self, artifact_id: ArtifactId, last_time_needed: SystemTime, - cpu_time_elapsed: Duration, + prepare_stats: PrepareStats, ) { // See the precondition. always!(self .artifacts - .insert(artifact_id, ArtifactState::Prepared { last_time_needed, cpu_time_elapsed }) + .insert(artifact_id, ArtifactState::Prepared { last_time_needed, prepare_stats }) .is_none()); } @@ -214,9 +219,9 @@ impl Artifacts { #[cfg(test)] mod tests { use super::{ArtifactId, Artifacts}; - use async_std::path::Path; + use polkadot_primitives::vstaging::ExecutorParamsHash; use sp_core::H256; - use std::str::FromStr; + use std::{path::Path, str::FromStr}; #[test] fn from_file_name() { @@ -225,13 +230,16 @@ mod tests { assert_eq!( ArtifactId::from_file_name( - "wasmtime_0x0022800000000000000000000000000000000000000000000000000000000000" + "wasmtime_0x0022800000000000000000000000000000000000000000000000000000000000_0x0033900000000000000000000000000000000000000000000000000000000000" ), Some(ArtifactId::new( hex_literal::hex![ "0022800000000000000000000000000000000000000000000000000000000000" ] - .into() + .into(), + ExecutorParamsHash::from_hash(sp_core::H256(hex_literal::hex![ + "0033900000000000000000000000000000000000000000000000000000000000" + ])), )), ); } @@ -241,22 +249,19 @@ mod tests { let path = Path::new("/test"); let hash = H256::from_str("1234567890123456789012345678901234567890123456789012345678901234") - .unwrap() - .into(); + .unwrap(); assert_eq!( - ArtifactId::new(hash).path(path).to_str(), + ArtifactId::new(hash.into(), ExecutorParamsHash::from_hash(hash)).path(path).to_str(), Some( - "/test/wasmtime_0x1234567890123456789012345678901234567890123456789012345678901234" + "/test/wasmtime_0x1234567890123456789012345678901234567890123456789012345678901234_0x1234567890123456789012345678901234567890123456789012345678901234" ), ); } - #[test] - fn artifacts_removes_cache_on_startup() { - let fake_cache_path = async_std::task::block_on(async move { - crate::worker_common::tmpfile("test-cache").await.unwrap() - }); + #[tokio::test] + async fn artifacts_removes_cache_on_startup() { + let fake_cache_path = crate::worker_common::tmpfile("test-cache").await.unwrap(); let fake_artifact_path = { let mut p = fake_cache_path.clone(); p.push("wasmtime_0x1234567890123456789012345678901234567890123456789012345678901234"); @@ -271,7 +276,7 @@ mod tests { // this should remove it and re-create. let p = &fake_cache_path; - async_std::task::block_on(async { Artifacts::new(p).await }); + Artifacts::new(p).await; assert_eq!(std::fs::read_dir(&fake_cache_path).unwrap().count(), 0); diff --git a/node/core/pvf/src/error.rs b/node/core/pvf/src/error.rs index ddcdb2561cfd..5edf435e7190 100644 --- a/node/core/pvf/src/error.rs +++ b/node/core/pvf/src/error.rs @@ -14,12 +14,13 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . +use crate::prepare::PrepareStats; use parity_scale_codec::{Decode, Encode}; -use std::{any::Any, time::Duration}; +use std::{any::Any, fmt}; -/// Result of PVF preparation performed by the validation host. Contains the elapsed CPU time if +/// Result of PVF preparation performed by the validation host. Contains stats about the preparation if /// successful -pub type PrepareResult = Result; +pub type PrepareResult = Result; /// An error that occurred during the prepare part of the PVF pipeline. #[derive(Debug, Clone, Encode, Decode)] @@ -32,9 +33,46 @@ pub enum PrepareError { Panic(String), /// Failed to prepare the PVF due to the time limit. TimedOut, - /// This state indicates that the process assigned to prepare the artifact wasn't responsible - /// or were killed. This state is reported by the validation host (not by the worker). - DidNotMakeIt, + /// An IO error occurred while receiving the result from the worker process. This state is reported by the + /// validation host (not by the worker). + IoErr(String), + /// The temporary file for the artifact could not be created at the given cache path. This state is reported by the + /// validation host (not by the worker). + CreateTmpFileErr(String), + /// The response from the worker is received, but the file cannot be renamed (moved) to the final destination + /// location. This state is reported by the validation host (not by the worker). + RenameTmpFileErr(String), +} + +impl PrepareError { + /// Returns whether this is a deterministic error, i.e. one that should trigger reliably. Those + /// errors depend on the PVF itself and the sc-executor/wasmtime logic. + /// + /// Non-deterministic errors can happen spuriously. Typically, they occur due to resource + /// starvation, e.g. under heavy load or memory pressure. Those errors are typically transient + /// but may persist e.g. if the node is run by overwhelmingly underpowered machine. + pub fn is_deterministic(&self) -> bool { + use PrepareError::*; + match self { + Prevalidation(_) | Preparation(_) | Panic(_) => true, + TimedOut | IoErr(_) | CreateTmpFileErr(_) | RenameTmpFileErr(_) => false, + } + } +} + +impl fmt::Display for PrepareError { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + use PrepareError::*; + match self { + Prevalidation(err) => write!(f, "prevalidation: {}", err), + Preparation(err) => write!(f, "preparation: {}", err), + Panic(err) => write!(f, "panic: {}", err), + TimedOut => write!(f, "prepare: timeout"), + IoErr(err) => write!(f, "prepare: io error while receiving response: {}", err), + CreateTmpFileErr(err) => write!(f, "prepare: error creating tmp file: {}", err), + RenameTmpFileErr(err) => write!(f, "prepare: error renaming tmp file: {}", err), + } + } } /// A error raised during validation of the candidate. @@ -81,32 +119,11 @@ pub enum InvalidCandidate { impl From for ValidationError { fn from(error: PrepareError) -> Self { // Here we need to classify the errors into two errors: deterministic and non-deterministic. - // - // Non-deterministic errors can happen spuriously. Typically, they occur due to resource - // starvation, e.g. under heavy load or memory pressure. Those errors are typically transient - // but may persist e.g. if the node is run by overwhelmingly underpowered machine. - // - // Deterministic errors should trigger reliably. Those errors depend on the PVF itself and - // the sc-executor/wasmtime logic. - // - // For now, at least until the PVF pre-checking lands, the deterministic errors will be - // treated as `InvalidCandidate`. Should those occur they could potentially trigger disputes. - // - // All non-deterministic errors are qualified as `InternalError`s and will not trigger - // disputes. - match error { - PrepareError::Prevalidation(err) => ValidationError::InvalidCandidate( - InvalidCandidate::PrepareError(format!("prevalidation: {}", err)), - ), - PrepareError::Preparation(err) => ValidationError::InvalidCandidate( - InvalidCandidate::PrepareError(format!("preparation: {}", err)), - ), - PrepareError::Panic(err) => ValidationError::InvalidCandidate( - InvalidCandidate::PrepareError(format!("panic: {}", err)), - ), - PrepareError::TimedOut => ValidationError::InternalError("prepare: timeout".to_owned()), - PrepareError::DidNotMakeIt => - ValidationError::InternalError("prepare: did not make it".to_owned()), + // See [`PrepareError::is_deterministic`]. + if error.is_deterministic() { + ValidationError::InvalidCandidate(InvalidCandidate::PrepareError(error.to_string())) + } else { + ValidationError::InternalError(error.to_string()) } } } diff --git a/node/core/pvf/src/execute/queue.rs b/node/core/pvf/src/execute/queue.rs index 72b6e450351b..9a89c46e7a14 100644 --- a/node/core/pvf/src/execute/queue.rs +++ b/node/core/pvf/src/execute/queue.rs @@ -24,15 +24,27 @@ use crate::{ worker_common::{IdleWorker, WorkerHandle}, InvalidCandidate, ValidationError, LOG_TARGET, }; -use async_std::path::PathBuf; use futures::{ channel::mpsc, future::BoxFuture, stream::{FuturesUnordered, StreamExt as _}, Future, FutureExt, }; +use polkadot_primitives::vstaging::{ExecutorParams, ExecutorParamsHash}; use slotmap::HopSlotMap; -use std::{collections::VecDeque, fmt, time::Duration}; +use std::{ + collections::VecDeque, + fmt, + path::PathBuf, + time::{Duration, Instant}, +}; + +/// The amount of time a job for which the queue does not have a compatible worker may wait in the +/// queue. After that time passes, the queue will kill the first worker which becomes idle to +/// re-spawn a new worker to execute the job immediately. +/// To make any sense and not to break things, the value should be greater than minimal execution +/// timeout in use, and less than the block time. +const MAX_KEEP_WAITING: Duration = Duration::from_secs(4); slotmap::new_key_type! { struct Worker; } @@ -40,22 +52,26 @@ slotmap::new_key_type! { struct Worker; } pub enum ToQueue { Enqueue { artifact: ArtifactPathId, - execution_timeout: Duration, + exec_timeout: Duration, params: Vec, + executor_params: ExecutorParams, result_tx: ResultSender, }, } struct ExecuteJob { artifact: ArtifactPathId, - execution_timeout: Duration, + exec_timeout: Duration, params: Vec, + executor_params: ExecutorParams, result_tx: ResultSender, + waiting_since: Instant, } struct WorkerData { idle: Option, handle: WorkerHandle, + executor_params_hash: ExecutorParamsHash, } impl fmt::Debug for WorkerData { @@ -80,7 +96,17 @@ impl Workers { self.spawn_inflight + self.running.len() < self.capacity } - fn find_available(&self) -> Option { + fn find_available(&self, executor_params_hash: ExecutorParamsHash) -> Option { + self.running.iter().find_map(|d| { + if d.1.idle.is_some() && d.1.executor_params_hash == executor_params_hash { + Some(d.0) + } else { + None + } + }) + } + + fn find_idle(&self) -> Option { self.running .iter() .find_map(|d| if d.1.idle.is_some() { Some(d.0) } else { None }) @@ -95,7 +121,7 @@ impl Workers { } enum QueueEvent { - Spawn(IdleWorker, WorkerHandle), + Spawn(IdleWorker, WorkerHandle, ExecuteJob), StartWork(Worker, Outcome, ArtifactId, ResultSender), } @@ -155,6 +181,66 @@ impl Queue { purge_dead(&self.metrics, &mut self.workers).await; } } + + /// Tries to assign a job in the queue to a worker. If an idle worker is provided, it does its + /// best to find a job with a compatible execution environment unless there are jobs in the + /// queue waiting too long. In that case, it kills an existing idle worker and spawns a new + /// one. It may spawn an additional worker if that is affordable. + /// If all the workers are busy or the queue is empty, it does nothing. + /// Should be called every time a new job arrives to the queue or a job finishes. + fn try_assign_next_job(&mut self, finished_worker: Option) { + // New jobs are always pushed to the tail of the queue; the one at its head is always + // the eldest one. + let eldest = if let Some(eldest) = self.queue.get(0) { eldest } else { return }; + + // By default, we're going to execute the eldest job on any worker slot available, even if + // we have to kill and re-spawn a worker + let mut worker = None; + let mut job_index = 0; + + // But if we're not pressed for time, we can try to find a better job-worker pair not + // requiring the expensive kill-spawn operation + if eldest.waiting_since.elapsed() < MAX_KEEP_WAITING { + if let Some(finished_worker) = finished_worker { + if let Some(worker_data) = self.workers.running.get(finished_worker) { + for (i, job) in self.queue.iter().enumerate() { + if worker_data.executor_params_hash == job.executor_params.hash() { + (worker, job_index) = (Some(finished_worker), i); + break + } + } + } + } + } + + if worker.is_none() { + // Try to obtain a worker for the job + worker = self.workers.find_available(self.queue[job_index].executor_params.hash()); + } + + if worker.is_none() { + if let Some(idle) = self.workers.find_idle() { + // No available workers of required type but there are some idle ones of other + // types, have to kill one and re-spawn with the correct type + if self.workers.running.remove(idle).is_some() { + self.metrics.execute_worker().on_retired(); + } + } + } + + if worker.is_none() && !self.workers.can_afford_one_more() { + // Bad luck, no worker slot can be used to execute the job + return + } + + let job = self.queue.remove(job_index).expect("Job is just checked to be in queue; qed"); + + if let Some(worker) = worker { + assign(self, worker, job); + } else { + spawn_extra_worker(self, job); + } + } } async fn purge_dead(metrics: &Metrics, workers: &mut Workers) { @@ -173,29 +259,29 @@ async fn purge_dead(metrics: &Metrics, workers: &mut Workers) { } fn handle_to_queue(queue: &mut Queue, to_queue: ToQueue) { - let ToQueue::Enqueue { artifact, execution_timeout, params, result_tx } = to_queue; + let ToQueue::Enqueue { artifact, exec_timeout, params, executor_params, result_tx } = to_queue; gum::debug!( target: LOG_TARGET, validation_code_hash = ?artifact.id.code_hash, "enqueueing an artifact for execution", ); queue.metrics.execute_enqueued(); - let job = ExecuteJob { artifact, execution_timeout, params, result_tx }; - - if let Some(available) = queue.workers.find_available() { - assign(queue, available, job); - } else { - if queue.workers.can_afford_one_more() { - spawn_extra_worker(queue); - } - queue.queue.push_back(job); - } + let job = ExecuteJob { + artifact, + exec_timeout, + params, + executor_params, + result_tx, + waiting_since: Instant::now(), + }; + queue.queue.push_back(job); + queue.try_assign_next_job(None); } async fn handle_mux(queue: &mut Queue, event: QueueEvent) { match event { - QueueEvent::Spawn(idle, handle) => { - handle_worker_spawned(queue, idle, handle); + QueueEvent::Spawn(idle, handle, job) => { + handle_worker_spawned(queue, idle, handle, job); }, QueueEvent::StartWork(worker, outcome, artifact_id, result_tx) => { handle_job_finish(queue, worker, outcome, artifact_id, result_tx); @@ -203,16 +289,23 @@ async fn handle_mux(queue: &mut Queue, event: QueueEvent) { } } -fn handle_worker_spawned(queue: &mut Queue, idle: IdleWorker, handle: WorkerHandle) { +fn handle_worker_spawned( + queue: &mut Queue, + idle: IdleWorker, + handle: WorkerHandle, + job: ExecuteJob, +) { queue.metrics.execute_worker().on_spawned(); queue.workers.spawn_inflight -= 1; - let worker = queue.workers.running.insert(WorkerData { idle: Some(idle), handle }); + let worker = queue.workers.running.insert(WorkerData { + idle: Some(idle), + handle, + executor_params_hash: job.executor_params.hash(), + }); gum::debug!(target: LOG_TARGET, ?worker, "execute worker spawned"); - if let Some(job) = queue.queue.pop_front() { - assign(queue, worker, job); - } + assign(queue, worker, job); } /// If there are pending jobs in the queue, schedules the next of them onto the just freed up @@ -224,32 +317,48 @@ fn handle_job_finish( artifact_id: ArtifactId, result_tx: ResultSender, ) { - let (idle_worker, result) = match outcome { - Outcome::Ok { result_descriptor, duration: _, idle_worker } => { + let (idle_worker, result, duration) = match outcome { + Outcome::Ok { result_descriptor, duration, idle_worker } => { // TODO: propagate the soft timeout - (Some(idle_worker), Ok(result_descriptor)) + (Some(idle_worker), Ok(result_descriptor), Some(duration)) }, Outcome::InvalidCandidate { err, idle_worker } => ( Some(idle_worker), Err(ValidationError::InvalidCandidate(InvalidCandidate::WorkerReportedError(err))), + None, ), Outcome::InternalError { err, idle_worker } => - (Some(idle_worker), Err(ValidationError::InternalError(err))), + (Some(idle_worker), Err(ValidationError::InternalError(err)), None), Outcome::HardTimeout => - (None, Err(ValidationError::InvalidCandidate(InvalidCandidate::HardTimeout))), - Outcome::IoErr => - (None, Err(ValidationError::InvalidCandidate(InvalidCandidate::AmbiguousWorkerDeath))), + (None, Err(ValidationError::InvalidCandidate(InvalidCandidate::HardTimeout)), None), + Outcome::IoErr => ( + None, + Err(ValidationError::InvalidCandidate(InvalidCandidate::AmbiguousWorkerDeath)), + None, + ), }; queue.metrics.execute_finished(); - gum::debug!( - target: LOG_TARGET, - validation_code_hash = ?artifact_id.code_hash, - ?worker, - worker_rip = idle_worker.is_none(), - "execute worker concluded", - ); + if let Err(ref err) = result { + gum::warn!( + target: LOG_TARGET, + ?artifact_id, + ?worker, + worker_rip = idle_worker.is_none(), + "execution worker concluded, error occurred: {:?}", + err + ); + } else { + gum::debug!( + target: LOG_TARGET, + ?artifact_id, + ?worker, + worker_rip = idle_worker.is_none(), + ?duration, + "execute worker concluded successfully", + ); + } // First we send the result. It may fail due to the other end of the channel being dropped, // that's legitimate and we don't treat that as an error. @@ -265,42 +374,45 @@ fn handle_job_finish( if let Some(idle_worker) = idle_worker { if let Some(data) = queue.workers.running.get_mut(worker) { data.idle = Some(idle_worker); - - if let Some(job) = queue.queue.pop_front() { - assign(queue, worker, job); - } + return queue.try_assign_next_job(Some(worker)) } } else { // Note it's possible that the worker was purged already by `purge_dead` if queue.workers.running.remove(worker).is_some() { queue.metrics.execute_worker().on_retired(); } - - if !queue.queue.is_empty() { - // The worker has died and we still have work we have to do. Request an extra worker. - // - // That can potentially overshoot, but that should be OK. - spawn_extra_worker(queue); - } } + + queue.try_assign_next_job(None); } -fn spawn_extra_worker(queue: &mut Queue) { +fn spawn_extra_worker(queue: &mut Queue, job: ExecuteJob) { queue.metrics.execute_worker().on_begin_spawn(); gum::debug!(target: LOG_TARGET, "spawning an extra worker"); queue .mux - .push(spawn_worker_task(queue.program_path.clone(), queue.spawn_timeout).boxed()); + .push(spawn_worker_task(queue.program_path.clone(), job, queue.spawn_timeout).boxed()); queue.workers.spawn_inflight += 1; } -async fn spawn_worker_task(program_path: PathBuf, spawn_timeout: Duration) -> QueueEvent { +/// Spawns a new worker to execute a pre-assigned job. +/// A worker is never spawned as idle; a job to be executed by the worker has to be determined +/// beforehand. In such a way, a race condition is avoided: during the worker being spawned, +/// another job in the queue, with an incompatible execution environment, may become stale, and +/// the queue would have to kill a newly started worker and spawn another one. +/// Nevertheless, if the worker finishes executing the job, it becomes idle and may be used to execute other jobs with a compatible execution environment. +async fn spawn_worker_task( + program_path: PathBuf, + job: ExecuteJob, + spawn_timeout: Duration, +) -> QueueEvent { use futures_timer::Delay; loop { - match super::worker::spawn(&program_path, spawn_timeout).await { - Ok((idle, handle)) => break QueueEvent::Spawn(idle, handle), + match super::worker::spawn(&program_path, job.executor_params.clone(), spawn_timeout).await + { + Ok((idle, handle)) => break QueueEvent::Spawn(idle, handle, job), Err(err) => { gum::warn!(target: LOG_TARGET, "failed to spawn an execute worker: {:?}", err); @@ -313,7 +425,8 @@ async fn spawn_worker_task(program_path: PathBuf, spawn_timeout: Duration) -> Qu /// Ask the given worker to perform the given job. /// -/// The worker must be running and idle. +/// The worker must be running and idle. The job and the worker must share the same execution +/// environment parameter set. fn assign(queue: &mut Queue, worker: Worker, job: ExecuteJob) { gum::debug!( target: LOG_TARGET, @@ -322,6 +435,16 @@ fn assign(queue: &mut Queue, worker: Worker, job: ExecuteJob) { "assigning the execute worker", ); + debug_assert_eq!( + queue + .workers + .running + .get(worker) + .expect("caller must provide existing worker; qed") + .executor_params_hash, + job.executor_params.hash() + ); + let idle = queue.workers.claim_idle(worker).expect( "this caller must supply a worker which is idle and running; thus claim_idle cannot return None; @@ -331,13 +454,9 @@ fn assign(queue: &mut Queue, worker: Worker, job: ExecuteJob) { queue.mux.push( async move { let _timer = execution_timer; - let outcome = super::worker::start_work( - idle, - job.artifact.clone(), - job.execution_timeout, - job.params, - ) - .await; + let outcome = + super::worker::start_work(idle, job.artifact.clone(), job.exec_timeout, job.params) + .await; QueueEvent::StartWork(worker, outcome, job.artifact.id, job.result_tx) } .boxed(), diff --git a/node/core/pvf/src/execute/worker.rs b/node/core/pvf/src/execute/worker.rs index 105accf18e2b..5db6a6261cc9 100644 --- a/node/core/pvf/src/execute/worker.rs +++ b/node/core/pvf/src/execute/worker.rs @@ -19,39 +19,49 @@ use crate::{ executor_intf::Executor, worker_common::{ bytes_to_path, cpu_time_monitor_loop, framed_recv, framed_send, path_to_bytes, - spawn_with_program_path, worker_event_loop, IdleWorker, JobKind, SpawnErr, WorkerHandle, + spawn_with_program_path, worker_event_loop, IdleWorker, SpawnErr, WorkerHandle, JOB_TIMEOUT_WALL_CLOCK_FACTOR, }, LOG_TARGET, }; -use async_std::{ - io, - os::unix::net::UnixStream, - path::{Path, PathBuf}, - task, -}; use cpu_time::ProcessTime; -use futures::FutureExt; +use futures::{pin_mut, select_biased, FutureExt}; use futures_timer::Delay; use parity_scale_codec::{Decode, Encode}; + use polkadot_parachain::primitives::ValidationResult; +use polkadot_primitives::vstaging::ExecutorParams; use std::{ - sync::{ - atomic::{AtomicBool, Ordering}, - Arc, - }, - thread, + path::{Path, PathBuf}, + sync::{mpsc::channel, Arc}, time::Duration, }; +use tokio::{io, net::UnixStream}; /// Spawns a new worker with the given program path that acts as the worker and the spawn timeout. +/// Sends a handshake message to the worker as soon as it is spawned. /// /// The program should be able to handle ` execute-worker ` invocation. pub async fn spawn( program_path: &Path, + executor_params: ExecutorParams, spawn_timeout: Duration, ) -> Result<(IdleWorker, WorkerHandle), SpawnErr> { - spawn_with_program_path("execute", program_path, &["execute-worker"], spawn_timeout).await + let (mut idle_worker, worker_handle) = + spawn_with_program_path("execute", program_path, &["execute-worker"], spawn_timeout) + .await?; + send_handshake(&mut idle_worker.stream, Handshake { executor_params }) + .await + .map_err(|error| { + gum::warn!( + target: LOG_TARGET, + worker_pid = %idle_worker.pid, + ?error, + "failed to send a handshake to the spawned worker", + ); + SpawnErr::Handshake + })?; + Ok((idle_worker, worker_handle)) } /// Outcome of PVF execution. @@ -150,11 +160,8 @@ pub async fn start_work( target: LOG_TARGET, worker_pid = %pid, validation_code_hash = ?artifact.id.code_hash, - "execution worker exceeded allotted time for execution", + "execution worker exceeded lenient timeout for execution, child worker likely stalled", ); - // TODO: This case is not really a hard timeout as the timeout here in the host is - // lenient. Should fix this as part of - // https://github.com/paritytech/polkadot/issues/3754. Response::TimedOut }, }; @@ -170,6 +177,21 @@ pub async fn start_work( } } +async fn send_handshake(stream: &mut UnixStream, handshake: Handshake) -> io::Result<()> { + framed_send(stream, &handshake.encode()).await +} + +async fn recv_handshake(stream: &mut UnixStream) -> io::Result { + let handshake_enc = framed_recv(stream).await?; + let handshake = Handshake::decode(&mut &handshake_enc[..]).map_err(|_| { + io::Error::new( + io::ErrorKind::Other, + "execute pvf recv_handshake: failed to decode Handshake".to_owned(), + ) + })?; + Ok(handshake) +} + async fn send_request( stream: &mut UnixStream, artifact_path: &Path, @@ -214,6 +236,11 @@ async fn recv_response(stream: &mut UnixStream) -> io::Result { }) } +#[derive(Encode, Decode)] +struct Handshake { + executor_params: ExecutorParams, +} + #[derive(Encode, Decode)] pub enum Response { Ok { result_descriptor: ValidationResult, duration: Duration }, @@ -235,10 +262,12 @@ impl Response { /// The entrypoint that the spawned execute worker should start with. The `socket_path` specifies /// the path to the socket used to communicate with the host. pub fn worker_entrypoint(socket_path: &str) { - worker_event_loop("execute", socket_path, |mut stream| async move { - let executor = Executor::new().map_err(|e| { + worker_event_loop("execute", socket_path, |rt_handle, mut stream| async move { + let handshake = recv_handshake(&mut stream).await?; + + let executor = Arc::new(Executor::new(handshake.executor_params).map_err(|e| { io::Error::new(io::ErrorKind::Other, format!("cannot create executor: {}", e)) - })?; + })?); loop { let (artifact_path, params, execution_timeout) = recv_request(&mut stream).await?; @@ -249,52 +278,61 @@ pub fn worker_entrypoint(socket_path: &str) { artifact_path.display(), ); - // Create a lock flag. We set it when either thread finishes. - let lock = Arc::new(AtomicBool::new(false)); + // Used to signal to the cpu time monitor thread that it can finish. + let (finished_tx, finished_rx) = channel::<()>(); let cpu_time_start = ProcessTime::now(); - // Spawn a new thread that runs the CPU time monitor. Continuously wakes up from - // sleeping and then either sleeps for the remaining CPU time, or kills the process if - // we exceed the CPU timeout. - let (stream_2, cpu_time_start_2, execution_timeout_2, lock_2) = - (stream.clone(), cpu_time_start, execution_timeout, lock.clone()); - let handle = - thread::Builder::new().name("CPU time monitor".into()).spawn(move || { - task::block_on(async { - cpu_time_monitor_loop( - JobKind::Execute, - stream_2, - cpu_time_start_2, - execution_timeout_2, - lock_2, - ) - .await; - }) - })?; - - let response = - validate_using_artifact(&artifact_path, ¶ms, &executor, cpu_time_start).await; - - let lock_result = - lock.compare_exchange(false, true, Ordering::Relaxed, Ordering::Relaxed); - if lock_result.is_err() { - // The other thread is still sending an error response over the socket. Wait on it - // and return. - let _ = handle.join(); - // Monitor thread detected timeout and likely already terminated the process, - // nothing to do. - continue - } + // Spawn a new thread that runs the CPU time monitor. + let thread_fut = rt_handle + .spawn_blocking(move || { + cpu_time_monitor_loop(cpu_time_start, execution_timeout, finished_rx) + }) + .fuse(); + let executor_2 = executor.clone(); + let execute_fut = rt_handle + .spawn_blocking(move || { + validate_using_artifact(&artifact_path, ¶ms, executor_2, cpu_time_start) + }) + .fuse(); + + pin_mut!(thread_fut); + pin_mut!(execute_fut); + + let response = select_biased! { + // If this future is not selected, the join handle is dropped and the thread will + // finish in the background. + join_res = thread_fut => { + match join_res { + Ok(Some(cpu_time_elapsed)) => { + // Log if we exceed the timeout and the other thread hasn't finished. + gum::warn!( + target: LOG_TARGET, + worker_pid = %std::process::id(), + "execute job took {}ms cpu time, exceeded execute timeout {}ms", + cpu_time_elapsed.as_millis(), + execution_timeout.as_millis(), + ); + Response::TimedOut + }, + Ok(None) => Response::InternalError("error communicating over finished channel".into()), + Err(e) => Response::InternalError(format!("{}", e)), + } + }, + execute_res = execute_fut => { + let _ = finished_tx.send(()); + execute_res.unwrap_or_else(|e| Response::InternalError(format!("{}", e))) + }, + }; send_response(&mut stream, response).await?; } }); } -async fn validate_using_artifact( +fn validate_using_artifact( artifact_path: &Path, params: &[u8], - executor: &Executor, + executor: Arc, cpu_time_start: ProcessTime, ) -> Response { let descriptor_bytes = match unsafe { diff --git a/node/core/pvf/src/executor_intf.rs b/node/core/pvf/src/executor_intf.rs index c5578f5f81ad..a1b5f9a4886c 100644 --- a/node/core/pvf/src/executor_intf.rs +++ b/node/core/pvf/src/executor_intf.rs @@ -16,9 +16,10 @@ //! Interface to the Substrate Executor +use polkadot_primitives::vstaging::executor_params::{ExecutorParam, ExecutorParams}; use sc_executor_common::{ runtime_blob::RuntimeBlob, - wasm_runtime::{InvokeMethod, WasmModule as _}, + wasm_runtime::{HeapAllocStrategy, InvokeMethod, WasmModule as _}, }; use sc_executor_wasmtime::{Config, DeterministicStackLimit, Semantics}; use sp_core::storage::{ChildInfo, TrackedStorageKey}; @@ -40,20 +41,23 @@ use std::{ // The data section for runtimes are typically rather small and can fit in a single digit number of // WASM pages, so let's say an extra 16 pages. Thus let's assume that 32 pages or 2 MiB are used for // these needs by default. -const DEFAULT_HEAP_PAGES_ESTIMATE: u64 = 32; -const EXTRA_HEAP_PAGES: u64 = 2048; +const DEFAULT_HEAP_PAGES_ESTIMATE: u32 = 32; +const EXTRA_HEAP_PAGES: u32 = 2048; /// The number of bytes devoted for the stack during wasm execution of a PVF. const NATIVE_STACK_MAX: u32 = 256 * 1024 * 1024; -const CONFIG: Config = Config { +// VALUES OF THE DEFAULT CONFIGURATION SHOULD NEVER BE CHANGED +// They are used as base values for the execution environment parametrization. +// To overwrite them, add new ones to `EXECUTOR_PARAMS` in the `session_info` pallet and perform +// a runtime upgrade to make them active. +const DEFAULT_CONFIG: Config = Config { allow_missing_func_imports: true, cache_path: None, semantics: Semantics { - extra_heap_pages: EXTRA_HEAP_PAGES, - - // NOTE: This is specified in bytes, so we multiply by WASM page size. - max_memory_size: Some(((DEFAULT_HEAP_PAGES_ESTIMATE + EXTRA_HEAP_PAGES) * 65536) as usize), + heap_alloc_strategy: sc_executor_common::wasm_runtime::HeapAllocStrategy::Dynamic { + maximum_pages: Some(DEFAULT_HEAP_PAGES_ESTIMATE + EXTRA_HEAP_PAGES), + }, instantiation_strategy: sc_executor_wasmtime::InstantiationStrategy::RecreateInstanceCopyOnWrite, @@ -97,17 +101,46 @@ pub fn prevalidate(code: &[u8]) -> Result Result, sc_executor_common::error::WasmError> { - sc_executor_wasmtime::prepare_runtime_artifact(blob, &CONFIG.semantics) +pub fn prepare( + blob: RuntimeBlob, + executor_params: &ExecutorParams, +) -> Result, sc_executor_common::error::WasmError> { + let semantics = params_to_wasmtime_semantics(executor_params) + .map_err(|e| sc_executor_common::error::WasmError::Other(e))?; + sc_executor_wasmtime::prepare_runtime_artifact(blob, &semantics) +} + +fn params_to_wasmtime_semantics(par: &ExecutorParams) -> Result { + let mut sem = DEFAULT_CONFIG.semantics.clone(); + let mut stack_limit = if let Some(stack_limit) = sem.deterministic_stack_limit.clone() { + stack_limit + } else { + return Err("No default stack limit set".to_owned()) + }; + + for p in par.iter() { + match p { + ExecutorParam::MaxMemoryPages(max_pages) => + sem.heap_alloc_strategy = + HeapAllocStrategy::Dynamic { maximum_pages: Some(*max_pages) }, + ExecutorParam::StackLogicalMax(slm) => stack_limit.logical_max = *slm, + ExecutorParam::StackNativeMax(snm) => stack_limit.native_stack_max = *snm, + ExecutorParam::PrecheckingMaxMemory(_) => (), // TODO: Not implemented yet + ExecutorParam::PvfPrepTimeout(_, _) | ExecutorParam::PvfExecTimeout(_, _) => (), // Not used here + } + } + sem.deterministic_stack_limit = Some(stack_limit); + Ok(sem) } pub struct Executor { thread_pool: rayon::ThreadPool, spawner: TaskSpawner, + config: Config, } impl Executor { - pub fn new() -> Result { + pub fn new(params: ExecutorParams) -> Result { // Wasmtime powers the Substrate Executor. It compiles the wasm bytecode into native code. // That native code does not create any stacks and just reuses the stack of the thread that // wasmtime was invoked from. @@ -154,7 +187,10 @@ impl Executor { let spawner = TaskSpawner::new().map_err(|e| format!("cannot create task spawner: {}", e))?; - Ok(Self { thread_pool, spawner }) + let mut config = DEFAULT_CONFIG.clone(); + config.semantics = params_to_wasmtime_semantics(¶ms)?; + + Ok(Self { thread_pool, spawner, config }) } /// Executes the given PVF in the form of a compiled artifact and returns the result of execution @@ -183,7 +219,7 @@ impl Executor { s.spawn(move |_| { // spawn does not return a value, so we need to use a variable to pass the result. *result = Some( - do_execute(compiled_artifact_path, params, spawner) + do_execute(compiled_artifact_path, self.config.clone(), params, spawner) .map_err(|err| format!("execute error: {:?}", err)), ); }); @@ -195,6 +231,7 @@ impl Executor { unsafe fn do_execute( compiled_artifact_path: &Path, + config: Config, params: &[u8], spawner: impl sp_core::traits::SpawnNamed + 'static, ) -> Result, sc_executor_common::error::Error> { @@ -208,7 +245,7 @@ unsafe fn do_execute( sc_executor::with_externalities_safe(&mut ext, || { let runtime = sc_executor_wasmtime::create_runtime_from_artifact::( compiled_artifact_path, - CONFIG, + config, )?; runtime.new_instance()?.call(InvokeMethod::Export("validate_block"), params) })? diff --git a/node/core/pvf/src/host.rs b/node/core/pvf/src/host.rs index 0f2e2b839a80..d4071064d41a 100644 --- a/node/core/pvf/src/host.rs +++ b/node/core/pvf/src/host.rs @@ -25,31 +25,21 @@ use crate::{ error::PrepareError, execute, metrics::Metrics, - prepare, PrepareResult, Priority, Pvf, ValidationError, LOG_TARGET, + prepare, PrepareResult, Priority, PvfPrepData, ValidationError, LOG_TARGET, }; use always_assert::never; -use async_std::path::{Path, PathBuf}; use futures::{ channel::{mpsc, oneshot}, Future, FutureExt, SinkExt, StreamExt, }; use polkadot_parachain::primitives::ValidationResult; +use polkadot_primitives::vstaging::ExecutorParams; use std::{ collections::HashMap, + path::{Path, PathBuf}, time::{Duration, SystemTime}, }; -/// For prechecking requests, the time period after which the preparation worker is considered -/// unresponsive and will be killed. -// NOTE: If you change this make sure to fix the buckets of `pvf_preparation_time` metric. -pub const PRECHECK_PREPARATION_TIMEOUT: Duration = Duration::from_secs(60); - -/// For execution and heads-up requests, the time period after which the preparation worker is -/// considered unresponsive and will be killed. More lenient than the timeout for prechecking to -/// prevent honest validators from timing out on valid PVFs. -// NOTE: If you change this make sure to fix the buckets of `pvf_preparation_time` metric. -pub const LENIENT_PREPARATION_TIMEOUT: Duration = Duration::from_secs(360); - /// The time period after which a failed preparation artifact is considered ready to be retried. /// Note that we will only retry if another request comes in after this cooldown has passed. #[cfg(not(test))] @@ -83,7 +73,7 @@ impl ValidationHost { /// Returns an error if the request cannot be sent to the validation host, i.e. if it shut down. pub async fn precheck_pvf( &mut self, - pvf: Pvf, + pvf: PvfPrepData, result_tx: PrepareResultSender, ) -> Result<(), String> { self.to_host_tx @@ -101,8 +91,8 @@ impl ValidationHost { /// Returns an error if the request cannot be sent to the validation host, i.e. if it shut down. pub async fn execute_pvf( &mut self, - pvf: Pvf, - execution_timeout: Duration, + pvf: PvfPrepData, + exec_timeout: Duration, params: Vec, priority: Priority, result_tx: ResultSender, @@ -110,7 +100,7 @@ impl ValidationHost { self.to_host_tx .send(ToHost::ExecutePvf(ExecutePvfInputs { pvf, - execution_timeout, + exec_timeout, params, priority, result_tx, @@ -125,7 +115,7 @@ impl ValidationHost { /// situations this function should return immediately. /// /// Returns an error if the request cannot be sent to the validation host, i.e. if it shut down. - pub async fn heads_up(&mut self, active_pvfs: Vec) -> Result<(), String> { + pub async fn heads_up(&mut self, active_pvfs: Vec) -> Result<(), String> { self.to_host_tx .send(ToHost::HeadsUp { active_pvfs }) .await @@ -134,14 +124,14 @@ impl ValidationHost { } enum ToHost { - PrecheckPvf { pvf: Pvf, result_tx: PrepareResultSender }, + PrecheckPvf { pvf: PvfPrepData, result_tx: PrepareResultSender }, ExecutePvf(ExecutePvfInputs), - HeadsUp { active_pvfs: Vec }, + HeadsUp { active_pvfs: Vec }, } struct ExecutePvfInputs { - pvf: Pvf, - execution_timeout: Duration, + pvf: PvfPrepData, + exec_timeout: Duration, params: Vec, priority: Priority, result_tx: ResultSender, @@ -171,7 +161,7 @@ pub struct Config { impl Config { /// Create a new instance of the configuration. pub fn new(cache_path: std::path::PathBuf, program_path: std::path::PathBuf) -> Self { - // Do not contaminate the other parts of the codebase with the types from `async_std`. + // Do not contaminate the other parts of the codebase with the types from `tokio`. let cache_path = PathBuf::from(cache_path); let program_path = PathBuf::from(program_path); @@ -263,8 +253,9 @@ pub fn start(config: Config, metrics: Metrics) -> (ValidationHost, impl Future, + executor_params: ExecutorParams, result_tx: ResultSender, } @@ -277,13 +268,15 @@ impl AwaitingPrepare { fn add( &mut self, artifact_id: ArtifactId, - execution_timeout: Duration, + exec_timeout: Duration, params: Vec, + executor_params: ExecutorParams, result_tx: ResultSender, ) { self.0.entry(artifact_id).or_default().push(PendingExecutionRequest { - execution_timeout, + exec_timeout, params, + executor_params, result_tx, }); } @@ -354,7 +347,7 @@ async fn run( futures::select_biased! { () = cleanup_pulse.select_next_some() => { // `select_next_some` because we don't expect this to fail, but if it does, we - // still don't fail. The tradeoff is that the compiled cache will start growing + // still don't fail. The trade-off is that the compiled cache will start growing // in size. That is, however, rather a slow process and hopefully the operator // will notice it. @@ -443,22 +436,23 @@ async fn handle_to_host( /// Handles PVF prechecking requests. /// -/// This tries to prepare the PVF by compiling the WASM blob within a given timeout ([`PRECHECK_PREPARATION_TIMEOUT`]). +/// This tries to prepare the PVF by compiling the WASM blob within a timeout set in +/// `PvfPrepData`. /// /// If the prepare job failed previously, we may retry it under certain conditions. async fn handle_precheck_pvf( artifacts: &mut Artifacts, prepare_queue: &mut mpsc::Sender, - pvf: Pvf, + pvf: PvfPrepData, result_sender: PrepareResultSender, ) -> Result<(), Fatal> { let artifact_id = pvf.as_artifact_id(); if let Some(state) = artifacts.artifact_state_mut(&artifact_id) { match state { - ArtifactState::Prepared { last_time_needed, cpu_time_elapsed } => { + ArtifactState::Prepared { last_time_needed, prepare_stats } => { *last_time_needed = SystemTime::now(); - let _ = result_sender.send(Ok(*cpu_time_elapsed)); + let _ = result_sender.send(Ok(prepare_stats.clone())); }, ArtifactState::Preparing { waiting_for_response, num_failures: _ } => waiting_for_response.push(result_sender), @@ -470,15 +464,8 @@ async fn handle_precheck_pvf( } } else { artifacts.insert_preparing(artifact_id, vec![result_sender]); - send_prepare( - prepare_queue, - prepare::ToQueue::Enqueue { - priority: Priority::Normal, - pvf, - preparation_timeout: PRECHECK_PREPARATION_TIMEOUT, - }, - ) - .await?; + send_prepare(prepare_queue, prepare::ToQueue::Enqueue { priority: Priority::Normal, pvf }) + .await?; } Ok(()) } @@ -500,7 +487,7 @@ async fn handle_execute_pvf( awaiting_prepare: &mut AwaitingPrepare, inputs: ExecutePvfInputs, ) -> Result<(), Fatal> { - let ExecutePvfInputs { pvf, execution_timeout, params, priority, result_tx } = inputs; + let ExecutePvfInputs { pvf, exec_timeout, params, priority, result_tx } = inputs; let artifact_id = pvf.as_artifact_id(); if let Some(state) = artifacts.artifact_state_mut(&artifact_id) { @@ -513,33 +500,54 @@ async fn handle_execute_pvf( execute_queue, execute::ToQueue::Enqueue { artifact: ArtifactPathId::new(artifact_id, cache_path), - execution_timeout, + exec_timeout, params, + executor_params: (*pvf.executor_params()).clone(), result_tx, }, ) .await?; }, ArtifactState::Preparing { .. } => { - awaiting_prepare.add(artifact_id, execution_timeout, params, result_tx); + awaiting_prepare.add( + artifact_id, + exec_timeout, + params, + (*pvf.executor_params()).clone(), + result_tx, + ); }, ArtifactState::FailedToProcess { last_time_failed, num_failures, error } => { if can_retry_prepare_after_failure(*last_time_failed, *num_failures, error) { + gum::warn!( + target: LOG_TARGET, + ?pvf, + ?artifact_id, + ?last_time_failed, + %num_failures, + %error, + "handle_execute_pvf: Re-trying failed PVF preparation." + ); + // If we are allowed to retry the failed prepare job, change the state to // Preparing and re-queue this job. *state = ArtifactState::Preparing { waiting_for_response: Vec::new(), num_failures: *num_failures, }; - send_prepare( - prepare_queue, - prepare::ToQueue::Enqueue { - priority, - pvf, - preparation_timeout: LENIENT_PREPARATION_TIMEOUT, - }, - ) - .await?; + let executor_params = (*pvf.executor_params()).clone(); + send_prepare(prepare_queue, prepare::ToQueue::Enqueue { priority, pvf }) + .await?; + + // Add an execution request that will wait to run after this prepare job has + // finished. + awaiting_prepare.add( + artifact_id, + exec_timeout, + params, + executor_params, + result_tx, + ); } else { let _ = result_tx.send(Err(ValidationError::from(error.clone()))); } @@ -548,19 +556,12 @@ async fn handle_execute_pvf( } else { // Artifact is unknown: register it and enqueue a job with the corresponding priority and // PVF. + let executor_params = (*pvf.executor_params()).clone(); artifacts.insert_preparing(artifact_id.clone(), Vec::new()); - send_prepare( - prepare_queue, - prepare::ToQueue::Enqueue { - priority, - pvf, - preparation_timeout: LENIENT_PREPARATION_TIMEOUT, - }, - ) - .await?; + send_prepare(prepare_queue, prepare::ToQueue::Enqueue { priority, pvf }).await?; // Add an execution request that will wait to run after this prepare job has finished. - awaiting_prepare.add(artifact_id, execution_timeout, params, result_tx); + awaiting_prepare.add(artifact_id, exec_timeout, params, executor_params, result_tx); } Ok(()) @@ -569,7 +570,7 @@ async fn handle_execute_pvf( async fn handle_heads_up( artifacts: &mut Artifacts, prepare_queue: &mut mpsc::Sender, - active_pvfs: Vec, + active_pvfs: Vec, ) -> Result<(), Fatal> { let now = SystemTime::now(); @@ -585,6 +586,16 @@ async fn handle_heads_up( }, ArtifactState::FailedToProcess { last_time_failed, num_failures, error } => { if can_retry_prepare_after_failure(*last_time_failed, *num_failures, error) { + gum::warn!( + target: LOG_TARGET, + ?active_pvf, + ?artifact_id, + ?last_time_failed, + %num_failures, + %error, + "handle_heads_up: Re-trying failed PVF preparation." + ); + // If we are allowed to retry the failed prepare job, change the state to // Preparing and re-queue this job. *state = ArtifactState::Preparing { @@ -596,7 +607,6 @@ async fn handle_heads_up( prepare::ToQueue::Enqueue { priority: Priority::Normal, pvf: active_pvf, - preparation_timeout: LENIENT_PREPARATION_TIMEOUT, }, ) .await?; @@ -609,11 +619,7 @@ async fn handle_heads_up( send_prepare( prepare_queue, - prepare::ToQueue::Enqueue { - priority: Priority::Normal, - pvf: active_pvf, - preparation_timeout: LENIENT_PREPARATION_TIMEOUT, - }, + prepare::ToQueue::Enqueue { priority: Priority::Normal, pvf: active_pvf }, ) .await?; } @@ -675,7 +681,9 @@ async fn handle_prepare_done( // It's finally time to dispatch all the execution requests that were waiting for this artifact // to be prepared. let pending_requests = awaiting_prepare.take(&artifact_id); - for PendingExecutionRequest { execution_timeout, params, result_tx } in pending_requests { + for PendingExecutionRequest { exec_timeout, params, executor_params, result_tx } in + pending_requests + { if result_tx.is_canceled() { // Preparation could've taken quite a bit of time and the requester may be not interested // in execution anymore, in which case we just skip the request. @@ -692,8 +700,9 @@ async fn handle_prepare_done( execute_queue, execute::ToQueue::Enqueue { artifact: ArtifactPathId::new(artifact_id.clone(), cache_path), - execution_timeout, + exec_timeout, params, + executor_params, result_tx, }, ) @@ -701,12 +710,21 @@ async fn handle_prepare_done( } *state = match result { - Ok(cpu_time_elapsed) => - ArtifactState::Prepared { last_time_needed: SystemTime::now(), cpu_time_elapsed }, - Err(error) => ArtifactState::FailedToProcess { - last_time_failed: SystemTime::now(), - num_failures: *num_failures + 1, - error, + Ok(prepare_stats) => + ArtifactState::Prepared { last_time_needed: SystemTime::now(), prepare_stats }, + Err(error) => { + let last_time_failed = SystemTime::now(); + let num_failures = *num_failures + 1; + + gum::warn!( + target: LOG_TARGET, + ?artifact_id, + time_failed = ?last_time_failed, + %num_failures, + "artifact preparation failed: {}", + error + ); + ArtifactState::FailedToProcess { last_time_failed, num_failures, error } }, }; @@ -758,7 +776,7 @@ async fn sweeper_task(mut sweeper_rx: mpsc::Receiver) { match sweeper_rx.next().await { None => break, Some(condemned) => { - let result = async_std::fs::remove_file(&condemned).await; + let result = tokio::fs::remove_file(&condemned).await; gum::trace!( target: LOG_TARGET, ?result, @@ -776,16 +794,15 @@ fn can_retry_prepare_after_failure( num_failures: u32, error: &PrepareError, ) -> bool { - use PrepareError::*; - match error { - // Gracefully returned an error, so it will probably be reproducible. Don't retry. - Prevalidation(_) | Preparation(_) => false, - // Retry if the retry cooldown has elapsed and if we have already retried less than - // `NUM_PREPARE_RETRIES` times. IO errors may resolve themselves. - Panic(_) | TimedOut | DidNotMakeIt => - SystemTime::now() >= last_time_failed + PREPARE_FAILURE_COOLDOWN && - num_failures <= NUM_PREPARE_RETRIES, + if error.is_deterministic() { + // This error is considered deterministic, so it will probably be reproducible. Don't retry. + return false } + + // Retry if the retry cooldown has elapsed and if we have already retried less than `NUM_PREPARE_RETRIES` times. IO + // errors may resolve themselves. + SystemTime::now() >= last_time_failed + PREPARE_FAILURE_COOLDOWN && + num_failures <= NUM_PREPARE_RETRIES } /// A stream that yields a pulse continuously at a given interval. @@ -800,20 +817,21 @@ fn pulse_every(interval: std::time::Duration) -> impl futures::Stream } #[cfg(test)] -mod tests { +pub(crate) mod tests { use super::*; - use crate::{InvalidCandidate, PrepareError}; + use crate::{prepare::PrepareStats, InvalidCandidate, PrepareError}; use assert_matches::assert_matches; use futures::future::BoxFuture; const TEST_EXECUTION_TIMEOUT: Duration = Duration::from_secs(3); + pub(crate) const TEST_PREPARATION_TIMEOUT: Duration = Duration::from_secs(30); - #[async_std::test] + #[tokio::test] async fn pulse_test() { let pulse = pulse_every(Duration::from_millis(100)); futures::pin_mut!(pulse); - for _ in 0usize..5usize { + for _ in 0..5 { let start = std::time::Instant::now(); let _ = pulse.next().await.unwrap(); @@ -824,7 +842,7 @@ mod tests { /// Creates a new PVF which artifact id can be uniquely identified by the given number. fn artifact_id(descriminator: u32) -> ArtifactId { - Pvf::from_discriminator(descriminator).as_artifact_id() + PvfPrepData::from_discriminator(descriminator).as_artifact_id() } fn artifact_path(descriminator: u32) -> PathBuf { @@ -903,6 +921,13 @@ mod tests { ValidationHost { to_host_tx } } + async fn poll_and_recv_result(&mut self, result_rx: oneshot::Receiver) -> T + where + T: Send, + { + run_until(&mut self.run, async { result_rx.await.unwrap() }.boxed()).await + } + async fn poll_and_recv_to_prepare_queue(&mut self) -> prepare::ToQueue { let to_prepare_queue_rx = &mut self.to_prepare_queue_rx; run_until(&mut self.run, async { to_prepare_queue_rx.next().await.unwrap() }.boxed()) @@ -963,7 +988,7 @@ mod tests { futures::select! { _ = Delay::new(Duration::from_millis(500)).fuse() => (), msg = to_sweeper_rx.next().fuse() => { - panic!("the sweeper supposed to be empty, but received: {:?}", msg) + panic!("the sweeper is supposed to be empty, but received: {:?}", msg) } } } @@ -998,31 +1023,35 @@ mod tests { } } - #[async_std::test] + #[tokio::test] async fn shutdown_on_handle_drop() { let test = Builder::default().build(); - let join_handle = async_std::task::spawn(test.run); + let join_handle = tokio::task::spawn(test.run); // Dropping the handle will lead to conclusion of the read part and thus will make the event // loop to stop, which in turn will resolve the join handle. drop(test.to_host_tx); - join_handle.await; + join_handle.await.unwrap(); } - #[async_std::test] + #[tokio::test] async fn pruning() { let mock_now = SystemTime::now() - Duration::from_millis(1000); let mut builder = Builder::default(); builder.cleanup_pulse_interval = Duration::from_millis(100); builder.artifact_ttl = Duration::from_millis(500); - builder.artifacts.insert_prepared(artifact_id(1), mock_now, Duration::default()); - builder.artifacts.insert_prepared(artifact_id(2), mock_now, Duration::default()); + builder + .artifacts + .insert_prepared(artifact_id(1), mock_now, PrepareStats::default()); + builder + .artifacts + .insert_prepared(artifact_id(2), mock_now, PrepareStats::default()); let mut test = builder.build(); let mut host = test.host_handle(); - host.heads_up(vec![Pvf::from_discriminator(1)]).await.unwrap(); + host.heads_up(vec![PvfPrepData::from_discriminator(1)]).await.unwrap(); let to_sweeper_rx = &mut test.to_sweeper_rx; run_until( @@ -1036,18 +1065,18 @@ mod tests { // Extend TTL for the first artifact and make sure we don't receive another file removal // request. - host.heads_up(vec![Pvf::from_discriminator(1)]).await.unwrap(); + host.heads_up(vec![PvfPrepData::from_discriminator(1)]).await.unwrap(); test.poll_ensure_to_sweeper_is_empty().await; } - #[async_std::test] + #[tokio::test] async fn execute_pvf_requests() { let mut test = Builder::default().build(); let mut host = test.host_handle(); let (result_tx, result_rx_pvf_1_1) = oneshot::channel(); host.execute_pvf( - Pvf::from_discriminator(1), + PvfPrepData::from_discriminator(1), TEST_EXECUTION_TIMEOUT, b"pvf1".to_vec(), Priority::Normal, @@ -1058,7 +1087,7 @@ mod tests { let (result_tx, result_rx_pvf_1_2) = oneshot::channel(); host.execute_pvf( - Pvf::from_discriminator(1), + PvfPrepData::from_discriminator(1), TEST_EXECUTION_TIMEOUT, b"pvf1".to_vec(), Priority::Critical, @@ -1069,7 +1098,7 @@ mod tests { let (result_tx, result_rx_pvf_2) = oneshot::channel(); host.execute_pvf( - Pvf::from_discriminator(2), + PvfPrepData::from_discriminator(2), TEST_EXECUTION_TIMEOUT, b"pvf2".to_vec(), Priority::Normal, @@ -1090,7 +1119,7 @@ mod tests { test.from_prepare_queue_tx .send(prepare::FromQueue { artifact_id: artifact_id(1), - result: Ok(Duration::default()), + result: Ok(PrepareStats::default()), }) .await .unwrap(); @@ -1106,7 +1135,7 @@ mod tests { test.from_prepare_queue_tx .send(prepare::FromQueue { artifact_id: artifact_id(2), - result: Ok(Duration::default()), + result: Ok(PrepareStats::default()), }) .await .unwrap(); @@ -1140,14 +1169,14 @@ mod tests { ); } - #[async_std::test] + #[tokio::test] async fn precheck_pvf() { let mut test = Builder::default().build(); let mut host = test.host_handle(); // First, test a simple precheck request. let (result_tx, result_rx) = oneshot::channel(); - host.precheck_pvf(Pvf::from_discriminator(1), result_tx).await.unwrap(); + host.precheck_pvf(PvfPrepData::from_discriminator(1), result_tx).await.unwrap(); // The queue received the prepare request. assert_matches!( @@ -1158,7 +1187,7 @@ mod tests { test.from_prepare_queue_tx .send(prepare::FromQueue { artifact_id: artifact_id(1), - result: Ok(Duration::default()), + result: Ok(PrepareStats::default()), }) .await .unwrap(); @@ -1171,7 +1200,7 @@ mod tests { let mut precheck_receivers = Vec::new(); for _ in 0..3 { let (result_tx, result_rx) = oneshot::channel(); - host.precheck_pvf(Pvf::from_discriminator(2), result_tx).await.unwrap(); + host.precheck_pvf(PvfPrepData::from_discriminator(2), result_tx).await.unwrap(); precheck_receivers.push(result_rx); } // Received prepare request. @@ -1195,7 +1224,7 @@ mod tests { } } - #[async_std::test] + #[tokio::test] async fn test_prepare_done() { let mut test = Builder::default().build(); let mut host = test.host_handle(); @@ -1206,7 +1235,7 @@ mod tests { // Send PVF for the execution and request the prechecking for it. let (result_tx, result_rx_execute) = oneshot::channel(); host.execute_pvf( - Pvf::from_discriminator(1), + PvfPrepData::from_discriminator(1), TEST_EXECUTION_TIMEOUT, b"pvf2".to_vec(), Priority::Critical, @@ -1221,7 +1250,7 @@ mod tests { ); let (result_tx, result_rx) = oneshot::channel(); - host.precheck_pvf(Pvf::from_discriminator(1), result_tx).await.unwrap(); + host.precheck_pvf(PvfPrepData::from_discriminator(1), result_tx).await.unwrap(); // Suppose the preparation failed, the execution queue is empty and both // "clients" receive their results. @@ -1243,13 +1272,13 @@ mod tests { let mut precheck_receivers = Vec::new(); for _ in 0..3 { let (result_tx, result_rx) = oneshot::channel(); - host.precheck_pvf(Pvf::from_discriminator(2), result_tx).await.unwrap(); + host.precheck_pvf(PvfPrepData::from_discriminator(2), result_tx).await.unwrap(); precheck_receivers.push(result_rx); } let (result_tx, _result_rx_execute) = oneshot::channel(); host.execute_pvf( - Pvf::from_discriminator(2), + PvfPrepData::from_discriminator(2), TEST_EXECUTION_TIMEOUT, b"pvf2".to_vec(), Priority::Critical, @@ -1265,7 +1294,7 @@ mod tests { test.from_prepare_queue_tx .send(prepare::FromQueue { artifact_id: artifact_id(2), - result: Ok(Duration::default()), + result: Ok(PrepareStats::default()), }) .await .unwrap(); @@ -1282,14 +1311,14 @@ mod tests { // Test that multiple prechecking requests do not trigger preparation retries if the first one // failed. - #[async_std::test] - async fn test_precheck_prepare_retry() { + #[tokio::test] + async fn test_precheck_prepare_no_retry() { let mut test = Builder::default().build(); let mut host = test.host_handle(); // Submit a precheck request that fails. - let (result_tx, _result_rx) = oneshot::channel(); - host.precheck_pvf(Pvf::from_discriminator(1), result_tx).await.unwrap(); + let (result_tx, result_rx) = oneshot::channel(); + host.precheck_pvf(PvfPrepData::from_discriminator(1), result_tx).await.unwrap(); // The queue received the prepare request. assert_matches!( @@ -1305,35 +1334,51 @@ mod tests { .await .unwrap(); + // The result should contain the error. + let result = test.poll_and_recv_result(result_rx).await; + assert_matches!(result, Err(PrepareError::TimedOut)); + // Submit another precheck request. - let (result_tx_2, _result_rx_2) = oneshot::channel(); - host.precheck_pvf(Pvf::from_discriminator(1), result_tx_2).await.unwrap(); + let (result_tx_2, result_rx_2) = oneshot::channel(); + host.precheck_pvf(PvfPrepData::from_discriminator(1), result_tx_2) + .await + .unwrap(); // Assert the prepare queue is empty. test.poll_ensure_to_prepare_queue_is_empty().await; + // The result should contain the original error. + let result = test.poll_and_recv_result(result_rx_2).await; + assert_matches!(result, Err(PrepareError::TimedOut)); + // Pause for enough time to reset the cooldown for this failed prepare request. futures_timer::Delay::new(PREPARE_FAILURE_COOLDOWN).await; // Submit another precheck request. - let (result_tx_3, _result_rx_3) = oneshot::channel(); - host.precheck_pvf(Pvf::from_discriminator(1), result_tx_3).await.unwrap(); + let (result_tx_3, result_rx_3) = oneshot::channel(); + host.precheck_pvf(PvfPrepData::from_discriminator(1), result_tx_3) + .await + .unwrap(); // Assert the prepare queue is empty - we do not retry for precheck requests. test.poll_ensure_to_prepare_queue_is_empty().await; + + // The result should still contain the original error. + let result = test.poll_and_recv_result(result_rx_3).await; + assert_matches!(result, Err(PrepareError::TimedOut)); } // Test that multiple execution requests trigger preparation retries if the first one failed due // to a potentially non-reproducible error. - #[async_std::test] + #[tokio::test] async fn test_execute_prepare_retry() { let mut test = Builder::default().build(); let mut host = test.host_handle(); // Submit a execute request that fails. - let (result_tx, _result_rx) = oneshot::channel(); + let (result_tx, result_rx) = oneshot::channel(); host.execute_pvf( - Pvf::from_discriminator(1), + PvfPrepData::from_discriminator(1), TEST_EXECUTION_TIMEOUT, b"pvf".to_vec(), Priority::Critical, @@ -1356,10 +1401,14 @@ mod tests { .await .unwrap(); - // Submit another execute request. - let (result_tx_2, _result_rx_2) = oneshot::channel(); + // The result should contain the error. + let result = test.poll_and_recv_result(result_rx).await; + assert_matches!(result, Err(ValidationError::InternalError(_))); + + // Submit another execute request. We shouldn't try to prepare again, yet. + let (result_tx_2, result_rx_2) = oneshot::channel(); host.execute_pvf( - Pvf::from_discriminator(1), + PvfPrepData::from_discriminator(1), TEST_EXECUTION_TIMEOUT, b"pvf".to_vec(), Priority::Critical, @@ -1371,13 +1420,17 @@ mod tests { // Assert the prepare queue is empty. test.poll_ensure_to_prepare_queue_is_empty().await; + // The result should contain the original error. + let result = test.poll_and_recv_result(result_rx_2).await; + assert_matches!(result, Err(ValidationError::InternalError(_))); + // Pause for enough time to reset the cooldown for this failed prepare request. futures_timer::Delay::new(PREPARE_FAILURE_COOLDOWN).await; // Submit another execute request. - let (result_tx_3, _result_rx_3) = oneshot::channel(); + let (result_tx_3, result_rx_3) = oneshot::channel(); host.execute_pvf( - Pvf::from_discriminator(1), + PvfPrepData::from_discriminator(1), TEST_EXECUTION_TIMEOUT, b"pvf".to_vec(), Priority::Critical, @@ -1391,19 +1444,43 @@ mod tests { test.poll_and_recv_to_prepare_queue().await, prepare::ToQueue::Enqueue { .. } ); + + test.from_prepare_queue_tx + .send(prepare::FromQueue { + artifact_id: artifact_id(1), + result: Ok(PrepareStats::default()), + }) + .await + .unwrap(); + + // Preparation should have been retried and succeeded this time. + let result_tx_3 = assert_matches!( + test.poll_and_recv_to_execute_queue().await, + execute::ToQueue::Enqueue { result_tx, .. } => result_tx + ); + + // Send an error for the execution here, just so we can check the result receiver is still + // alive. + result_tx_3 + .send(Err(ValidationError::InvalidCandidate(InvalidCandidate::AmbiguousWorkerDeath))) + .unwrap(); + assert_matches!( + result_rx_3.now_or_never().unwrap().unwrap(), + Err(ValidationError::InvalidCandidate(InvalidCandidate::AmbiguousWorkerDeath)) + ); } // Test that multiple execution requests don't trigger preparation retries if the first one - // failed due to reproducible error (e.g. Prevalidation). - #[async_std::test] + // failed due to a reproducible error (e.g. Prevalidation). + #[tokio::test] async fn test_execute_prepare_no_retry() { let mut test = Builder::default().build(); let mut host = test.host_handle(); - // Submit a execute request that fails. - let (result_tx, _result_rx) = oneshot::channel(); + // Submit an execute request that fails. + let (result_tx, result_rx) = oneshot::channel(); host.execute_pvf( - Pvf::from_discriminator(1), + PvfPrepData::from_discriminator(1), TEST_EXECUTION_TIMEOUT, b"pvf".to_vec(), Priority::Critical, @@ -1426,10 +1503,17 @@ mod tests { .await .unwrap(); + // The result should contain the error. + let result = test.poll_and_recv_result(result_rx).await; + assert_matches!( + result, + Err(ValidationError::InvalidCandidate(InvalidCandidate::PrepareError(_))) + ); + // Submit another execute request. - let (result_tx_2, _result_rx_2) = oneshot::channel(); + let (result_tx_2, result_rx_2) = oneshot::channel(); host.execute_pvf( - Pvf::from_discriminator(1), + PvfPrepData::from_discriminator(1), TEST_EXECUTION_TIMEOUT, b"pvf".to_vec(), Priority::Critical, @@ -1441,13 +1525,20 @@ mod tests { // Assert the prepare queue is empty. test.poll_ensure_to_prepare_queue_is_empty().await; + // The result should contain the original error. + let result = test.poll_and_recv_result(result_rx_2).await; + assert_matches!( + result, + Err(ValidationError::InvalidCandidate(InvalidCandidate::PrepareError(_))) + ); + // Pause for enough time to reset the cooldown for this failed prepare request. futures_timer::Delay::new(PREPARE_FAILURE_COOLDOWN).await; // Submit another execute request. - let (result_tx_3, _result_rx_3) = oneshot::channel(); + let (result_tx_3, result_rx_3) = oneshot::channel(); host.execute_pvf( - Pvf::from_discriminator(1), + PvfPrepData::from_discriminator(1), TEST_EXECUTION_TIMEOUT, b"pvf".to_vec(), Priority::Critical, @@ -1458,16 +1549,23 @@ mod tests { // Assert the prepare queue is empty - we do not retry for prevalidation errors. test.poll_ensure_to_prepare_queue_is_empty().await; + + // The result should still contain the original error. + let result = test.poll_and_recv_result(result_rx_3).await; + assert_matches!( + result, + Err(ValidationError::InvalidCandidate(InvalidCandidate::PrepareError(_))) + ); } // Test that multiple heads-up requests trigger preparation retries if the first one failed. - #[async_std::test] + #[tokio::test] async fn test_heads_up_prepare_retry() { let mut test = Builder::default().build(); let mut host = test.host_handle(); // Submit a heads-up request that fails. - host.heads_up(vec![Pvf::from_discriminator(1)]).await.unwrap(); + host.heads_up(vec![PvfPrepData::from_discriminator(1)]).await.unwrap(); // The queue received the prepare request. assert_matches!( @@ -1484,7 +1582,7 @@ mod tests { .unwrap(); // Submit another heads-up request. - host.heads_up(vec![Pvf::from_discriminator(1)]).await.unwrap(); + host.heads_up(vec![PvfPrepData::from_discriminator(1)]).await.unwrap(); // Assert the prepare queue is empty. test.poll_ensure_to_prepare_queue_is_empty().await; @@ -1493,7 +1591,7 @@ mod tests { futures_timer::Delay::new(PREPARE_FAILURE_COOLDOWN).await; // Submit another heads-up request. - host.heads_up(vec![Pvf::from_discriminator(1)]).await.unwrap(); + host.heads_up(vec![PvfPrepData::from_discriminator(1)]).await.unwrap(); // Assert the prepare queue contains the request. assert_matches!( @@ -1502,14 +1600,14 @@ mod tests { ); } - #[async_std::test] + #[tokio::test] async fn cancellation() { let mut test = Builder::default().build(); let mut host = test.host_handle(); let (result_tx, result_rx) = oneshot::channel(); host.execute_pvf( - Pvf::from_discriminator(1), + PvfPrepData::from_discriminator(1), TEST_EXECUTION_TIMEOUT, b"pvf1".to_vec(), Priority::Normal, @@ -1526,7 +1624,7 @@ mod tests { test.from_prepare_queue_tx .send(prepare::FromQueue { artifact_id: artifact_id(1), - result: Ok(Duration::default()), + result: Ok(PrepareStats::default()), }) .await .unwrap(); diff --git a/node/core/pvf/src/lib.rs b/node/core/pvf/src/lib.rs index 1aabb1100437..8c40bbb8b939 100644 --- a/node/core/pvf/src/lib.rs +++ b/node/core/pvf/src/lib.rs @@ -108,11 +108,13 @@ pub mod testing; pub use sp_tracing; pub use error::{InvalidCandidate, PrepareError, PrepareResult, ValidationError}; +pub use prepare::PrepareStats; pub use priority::Priority; -pub use pvf::Pvf; +pub use pvf::PvfPrepData; pub use host::{start, Config, ValidationHost}; pub use metrics::Metrics; +pub use worker_common::JOB_TIMEOUT_WALL_CLOCK_FACTOR; pub use execute::worker_entrypoint as execute_worker_entrypoint; pub use prepare::worker_entrypoint as prepare_worker_entrypoint; diff --git a/node/core/pvf/src/metrics.rs b/node/core/pvf/src/metrics.rs index 8db105d895ea..72e6d01e7a2f 100644 --- a/node/core/pvf/src/metrics.rs +++ b/node/core/pvf/src/metrics.rs @@ -16,6 +16,7 @@ //! Prometheus metrics related to the validation host. +use crate::prepare::MemoryStats; use polkadot_node_metrics::metrics::{self, prometheus}; /// Validation host metrics. @@ -72,6 +73,27 @@ impl Metrics { pub(crate) fn time_execution(&self) -> Option { self.0.as_ref().map(|metrics| metrics.execution_time.start_timer()) } + + /// Observe memory stats for preparation. + #[allow(unused_variables)] + pub(crate) fn observe_preparation_memory_metrics(&self, memory_stats: MemoryStats) { + if let Some(metrics) = &self.0 { + #[cfg(target_os = "linux")] + if let Some(max_rss) = memory_stats.max_rss { + metrics.preparation_max_rss.observe(max_rss as f64); + } + + #[cfg(any(target_os = "linux", feature = "jemalloc-allocator"))] + if let Some(tracker_stats) = memory_stats.memory_tracker_stats { + // We convert these stats from B to KB to match the unit of `ru_maxrss` from `getrusage`. + let max_resident_kb = (tracker_stats.resident / 1024) as f64; + let max_allocated_kb = (tracker_stats.allocated / 1024) as f64; + + metrics.preparation_max_resident.observe(max_resident_kb); + metrics.preparation_max_allocated.observe(max_allocated_kb); + } + } + } } #[derive(Clone)] @@ -85,6 +107,12 @@ struct MetricsInner { execute_finished: prometheus::Counter, preparation_time: prometheus::Histogram, execution_time: prometheus::Histogram, + #[cfg(target_os = "linux")] + preparation_max_rss: prometheus::Histogram, + #[cfg(any(target_os = "linux", feature = "jemalloc-allocator"))] + preparation_max_allocated: prometheus::Histogram, + #[cfg(any(target_os = "linux", feature = "jemalloc-allocator"))] + preparation_max_resident: prometheus::Histogram, } impl metrics::Metrics for Metrics { @@ -155,9 +183,9 @@ impl metrics::Metrics for Metrics { "Time spent in preparing PVF artifacts in seconds", ) .buckets(vec![ - // This is synchronized with the PRECHECK_PREPARATION_TIMEOUT=60s - // and LENIENT_PREPARATION_TIMEOUT=360s constants found in - // src/prepare/worker.rs + // This is synchronized with the `DEFAULT_PRECHECK_PREPARATION_TIMEOUT=60s` + // and `DEFAULT_LENIENT_PREPARATION_TIMEOUT=360s` constants found in + // node/core/candidate-validation/src/lib.rs 0.1, 0.5, 1.0, @@ -181,8 +209,9 @@ impl metrics::Metrics for Metrics { "polkadot_pvf_execution_time", "Time spent in executing PVFs", ).buckets(vec![ - // This is synchronized with `APPROVAL_EXECUTION_TIMEOUT` and - // `BACKING_EXECUTION_TIMEOUT` constants in `node/primitives/src/lib.rs` + // This is synchronized with `DEFAULT_APPROVAL_EXECUTION_TIMEOUT` and + // `DEFAULT_BACKING_EXECUTION_TIMEOUT` constants in + // node/core/candidate-validation/src/lib.rs 0.01, 0.025, 0.05, @@ -202,6 +231,45 @@ impl metrics::Metrics for Metrics { )?, registry, )?, + #[cfg(target_os = "linux")] + preparation_max_rss: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "polkadot_pvf_preparation_max_rss", + "ru_maxrss (maximum resident set size) observed for preparation (in kilobytes)", + ).buckets( + prometheus::exponential_buckets(8192.0, 2.0, 10) + .expect("arguments are always valid; qed"), + ), + )?, + registry, + )?, + #[cfg(any(target_os = "linux", feature = "jemalloc-allocator"))] + preparation_max_resident: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "polkadot_pvf_preparation_max_resident", + "max resident memory observed for preparation (in kilobytes)", + ).buckets( + prometheus::exponential_buckets(8192.0, 2.0, 10) + .expect("arguments are always valid; qed"), + ), + )?, + registry, + )?, + #[cfg(any(target_os = "linux", feature = "jemalloc-allocator"))] + preparation_max_allocated: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "polkadot_pvf_preparation_max_allocated", + "max allocated memory observed for preparation (in kilobytes)", + ).buckets( + prometheus::exponential_buckets(8192.0, 2.0, 10) + .expect("arguments are always valid; qed"), + ), + )?, + registry, + )?, }; Ok(Metrics(Some(inner))) } diff --git a/node/core/pvf/src/prepare/memory_stats.rs b/node/core/pvf/src/prepare/memory_stats.rs new file mode 100644 index 000000000000..0e27fac20875 --- /dev/null +++ b/node/core/pvf/src/prepare/memory_stats.rs @@ -0,0 +1,249 @@ +// Copyright 2023 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +//! Memory stats for preparation. +//! +//! Right now we gather three measurements: +//! +//! - `ru_maxrss` (resident set size) from `getrusage`. +//! - `resident` memory stat provided by `tikv-malloc-ctl`. +//! - `allocated` memory stat also from `tikv-malloc-ctl`. +//! +//! Currently we are only logging these for the purposes of gathering data. In the future, we may +//! use these stats to reject PVFs during pre-checking. See +//! for more +//! background. + +use parity_scale_codec::{Decode, Encode}; + +/// Helper struct to contain all the memory stats, including [`MemoryAllocationStats`] and, if +/// supported by the OS, `ru_maxrss`. +#[derive(Clone, Debug, Default, Encode, Decode)] +pub struct MemoryStats { + /// Memory stats from `tikv_jemalloc_ctl`. + #[cfg(any(target_os = "linux", feature = "jemalloc-allocator"))] + pub memory_tracker_stats: Option, + /// `ru_maxrss` from `getrusage`. A string error since `io::Error` is not `Encode`able. + #[cfg(target_os = "linux")] + pub max_rss: Option, +} + +/// Statistics of collected memory metrics. +#[non_exhaustive] +#[derive(Clone, Debug, Default, Encode, Decode)] +pub struct MemoryAllocationStats { + /// Total resident memory, in bytes. + pub resident: u64, + /// Total allocated memory, in bytes. + pub allocated: u64, +} + +/// Module for the memory tracker. The memory tracker runs in its own thread, where it polls memory +/// usage at an interval. +/// +/// NOTE: Requires jemalloc enabled. +#[cfg(any(target_os = "linux", feature = "jemalloc-allocator"))] +pub mod memory_tracker { + use super::*; + use crate::LOG_TARGET; + use std::{ + sync::mpsc::{Receiver, RecvTimeoutError, Sender}, + time::Duration, + }; + use tikv_jemalloc_ctl::{epoch, stats, Error}; + use tokio::task::JoinHandle; + + #[derive(Clone)] + struct MemoryAllocationTracker { + epoch: tikv_jemalloc_ctl::epoch_mib, + allocated: stats::allocated_mib, + resident: stats::resident_mib, + } + + impl MemoryAllocationTracker { + pub fn new() -> Result { + Ok(Self { + epoch: epoch::mib()?, + allocated: stats::allocated::mib()?, + resident: stats::resident::mib()?, + }) + } + + pub fn snapshot(&self) -> Result { + // update stats by advancing the allocation epoch + self.epoch.advance()?; + + // Convert to `u64`, as `usize` is not `Encode`able. + let allocated = self.allocated.read()? as u64; + let resident = self.resident.read()? as u64; + Ok(MemoryAllocationStats { allocated, resident }) + } + } + + /// Runs a thread in the background that observes memory statistics. The goal is to try to get + /// accurate stats during preparation. + /// + /// # Algorithm + /// + /// 1. Create the memory tracker. + /// + /// 2. Sleep for some short interval. Whenever we wake up, take a snapshot by updating the + /// allocation epoch. + /// + /// 3. When we receive a signal that preparation has completed, take one last snapshot and return + /// the maximum observed values. + /// + /// # Errors + /// + /// For simplicity, any errors are returned as a string. As this is not a critical component, errors + /// are used for informational purposes (logging) only. + pub fn memory_tracker_loop(finished_rx: Receiver<()>) -> Result { + // This doesn't need to be too fine-grained since preparation currently takes 3-10s or more. + // Apart from that, there is not really a science to this number. + const POLL_INTERVAL: Duration = Duration::from_millis(100); + + let tracker = MemoryAllocationTracker::new().map_err(|err| err.to_string())?; + let mut max_stats = MemoryAllocationStats::default(); + + let mut update_stats = || -> Result<(), String> { + let current_stats = tracker.snapshot().map_err(|err| err.to_string())?; + if current_stats.resident > max_stats.resident { + max_stats.resident = current_stats.resident; + } + if current_stats.allocated > max_stats.allocated { + max_stats.allocated = current_stats.allocated; + } + Ok(()) + }; + + loop { + // Take a snapshot and update the max stats. + update_stats()?; + + // Sleep. + match finished_rx.recv_timeout(POLL_INTERVAL) { + // Received finish signal. + Ok(()) => { + update_stats()?; + return Ok(max_stats) + }, + // Timed out, restart loop. + Err(RecvTimeoutError::Timeout) => continue, + Err(RecvTimeoutError::Disconnected) => + return Err("memory_tracker_loop: finished_rx disconnected".into()), + } + } + } + + /// Helper function to terminate the memory tracker thread and get the stats. Helps isolate all this + /// error handling. + pub async fn get_memory_tracker_loop_stats( + fut: JoinHandle>, + tx: Sender<()>, + worker_pid: u32, + ) -> Option { + // Signal to the memory tracker thread to terminate. + if let Err(err) = tx.send(()) { + gum::warn!( + target: LOG_TARGET, + %worker_pid, + "worker: error sending signal to memory tracker_thread: {}", + err + ); + None + } else { + // Join on the thread handle. + match fut.await { + Ok(Ok(stats)) => Some(stats), + Ok(Err(err)) => { + gum::warn!( + target: LOG_TARGET, + %worker_pid, + "worker: error occurred in the memory tracker thread: {}", err + ); + None + }, + Err(err) => { + gum::warn!( + target: LOG_TARGET, + %worker_pid, + "worker: error joining on memory tracker thread: {}", err + ); + None + }, + } + } + } +} + +/// Module for dealing with the `ru_maxrss` (peak resident memory) stat from `getrusage`. +/// +/// NOTE: `getrusage` with the `RUSAGE_THREAD` parameter is only supported on Linux. `RUSAGE_SELF` +/// works on MacOS, but we need to get the max rss only for the preparation thread. Gettng it for +/// the current process would conflate the stats of previous jobs run by the process. +#[cfg(target_os = "linux")] +pub mod max_rss_stat { + use crate::LOG_TARGET; + use libc::{getrusage, rusage, timeval, RUSAGE_THREAD}; + use std::io; + + /// Get the rusage stats for the current thread. + fn getrusage_thread() -> io::Result { + let mut result = rusage { + ru_utime: timeval { tv_sec: 0, tv_usec: 0 }, + ru_stime: timeval { tv_sec: 0, tv_usec: 0 }, + ru_maxrss: 0, + ru_ixrss: 0, + ru_idrss: 0, + ru_isrss: 0, + ru_minflt: 0, + ru_majflt: 0, + ru_nswap: 0, + ru_inblock: 0, + ru_oublock: 0, + ru_msgsnd: 0, + ru_msgrcv: 0, + ru_nsignals: 0, + ru_nvcsw: 0, + ru_nivcsw: 0, + }; + if unsafe { getrusage(RUSAGE_THREAD, &mut result) } == -1 { + return Err(io::Error::last_os_error()) + } + Ok(result) + } + + /// Gets the `ru_maxrss` for the current thread. + pub fn get_max_rss_thread() -> io::Result { + // `c_long` is either `i32` or `i64` depending on architecture. `i64::from` always works. + getrusage_thread().map(|rusage| i64::from(rusage.ru_maxrss)) + } + + /// Extracts the max_rss stat and logs any error. + pub fn extract_max_rss_stat(max_rss: io::Result, worker_pid: u32) -> Option { + max_rss + .map_err(|err| { + gum::warn!( + target: LOG_TARGET, + %worker_pid, + "error getting `ru_maxrss` in preparation thread: {}", + err + ); + err + }) + .ok() + } +} diff --git a/node/core/pvf/src/prepare/mod.rs b/node/core/pvf/src/prepare/mod.rs index ac03cefc6fdb..bac212e514b0 100644 --- a/node/core/pvf/src/prepare/mod.rs +++ b/node/core/pvf/src/prepare/mod.rs @@ -1,4 +1,4 @@ -// Copyright 2021 Parity Technologies (UK) Ltd. +// Copyright 2021-2023 Parity Technologies (UK) Ltd. // This file is part of Polkadot. // Polkadot is free software: you can redistribute it and/or modify @@ -22,10 +22,21 @@ //! The pool will spawn workers in new processes and those should execute pass control to //! [`worker_entrypoint`]. +mod memory_stats; mod pool; mod queue; mod worker; +pub use memory_stats::MemoryStats; pub use pool::start as start_pool; pub use queue::{start as start_queue, FromQueue, ToQueue}; pub use worker::worker_entrypoint; + +use parity_scale_codec::{Decode, Encode}; + +/// Preparation statistics, including the CPU time and memory taken. +#[derive(Debug, Clone, Default, Encode, Decode)] +pub struct PrepareStats { + cpu_time_elapsed: std::time::Duration, + memory_stats: MemoryStats, +} diff --git a/node/core/pvf/src/prepare/pool.rs b/node/core/pvf/src/prepare/pool.rs index 306588eb429a..8587fcb1a6b6 100644 --- a/node/core/pvf/src/prepare/pool.rs +++ b/node/core/pvf/src/prepare/pool.rs @@ -18,17 +18,21 @@ use super::worker::{self, Outcome}; use crate::{ error::{PrepareError, PrepareResult}, metrics::Metrics, + pvf::PvfPrepData, worker_common::{IdleWorker, WorkerHandle}, LOG_TARGET, }; use always_assert::never; -use assert_matches::assert_matches; -use async_std::path::{Path, PathBuf}; use futures::{ channel::mpsc, future::BoxFuture, stream::FuturesUnordered, Future, FutureExt, StreamExt, }; use slotmap::HopSlotMap; -use std::{fmt, sync::Arc, task::Poll, time::Duration}; +use std::{ + fmt, + path::{Path, PathBuf}, + task::Poll, + time::Duration, +}; slotmap::new_key_type! { pub struct Worker; } @@ -61,12 +65,7 @@ pub enum ToPool { /// /// In either case, the worker is considered busy and no further `StartWork` messages should be /// sent until either `Concluded` or `Rip` message is received. - StartWork { - worker: Worker, - code: Arc>, - artifact_path: PathBuf, - preparation_timeout: Duration, - }, + StartWork { worker: Worker, pvf: PvfPrepData, artifact_path: PathBuf }, } /// A message sent from pool to its client. @@ -210,18 +209,18 @@ fn handle_to_pool( metrics.prepare_worker().on_begin_spawn(); mux.push(spawn_worker_task(program_path.to_owned(), spawn_timeout).boxed()); }, - ToPool::StartWork { worker, code, artifact_path, preparation_timeout } => { + ToPool::StartWork { worker, pvf, artifact_path } => { if let Some(data) = spawned.get_mut(worker) { if let Some(idle) = data.idle.take() { let preparation_timer = metrics.time_preparation(); mux.push( start_work_task( + metrics.clone(), worker, idle, - code, + pvf, cache_path.to_owned(), artifact_path, - preparation_timeout, preparation_timer, ) .boxed(), @@ -232,7 +231,7 @@ fn handle_to_pool( // items concluded; // thus idle token is Some; // qed. - never!("unexpected abscence of the idle token in prepare pool"); + never!("unexpected absence of the idle token in prepare pool"); } } else { // That's a relatively normal situation since the queue may send `start_work` and @@ -264,16 +263,15 @@ async fn spawn_worker_task(program_path: PathBuf, spawn_timeout: Duration) -> Po } async fn start_work_task( + metrics: Metrics, worker: Worker, idle: IdleWorker, - code: Arc>, + pvf: PvfPrepData, cache_path: PathBuf, artifact_path: PathBuf, - preparation_timeout: Duration, _preparation_timer: Option, ) -> PoolEvent { - let outcome = - worker::start_work(idle, code, &cache_path, artifact_path, preparation_timeout).await; + let outcome = worker::start_work(&metrics, idle, pvf, &cache_path, artifact_path).await; PoolEvent::StartWork(worker, outcome) } @@ -294,29 +292,28 @@ fn handle_mux( Ok(()) }, PoolEvent::StartWork(worker, outcome) => { - // If we receive any outcome other than `Concluded`, we attempt to kill the worker - // process. + // If we receive an outcome that the worker is unreachable or that an error occurred on + // the worker, we attempt to kill the worker process. match outcome { - Outcome::Concluded { worker: idle, result } => { - let data = match spawned.get_mut(worker) { - None => { - // Perhaps the worker was killed meanwhile and the result is no longer - // relevant. We already send `Rip` when purging if we detect that the - // worker is dead. - return Ok(()) - }, - Some(data) => data, - }; - - // We just replace the idle worker that was loaned from this option during - // the work starting. - let old = data.idle.replace(idle); - assert_matches!(old, None, "attempt to overwrite an idle worker"); - - reply(from_pool, FromPool::Concluded { worker, rip: false, result })?; - - Ok(()) - }, + Outcome::Concluded { worker: idle, result } => + handle_concluded_no_rip(from_pool, spawned, worker, idle, result), + // Return `Concluded`, but do not kill the worker since the error was on the host side. + Outcome::CreateTmpFileErr { worker: idle, err } => handle_concluded_no_rip( + from_pool, + spawned, + worker, + idle, + Err(PrepareError::CreateTmpFileErr(err)), + ), + // Return `Concluded`, but do not kill the worker since the error was on the host side. + Outcome::RenameTmpFileErr { worker: idle, result: _, err } => + handle_concluded_no_rip( + from_pool, + spawned, + worker, + idle, + Err(PrepareError::RenameTmpFileErr(err)), + ), Outcome::Unreachable => { if attempt_retire(metrics, spawned, worker) { reply(from_pool, FromPool::Rip(worker))?; @@ -324,14 +321,14 @@ fn handle_mux( Ok(()) }, - Outcome::DidNotMakeIt => { + Outcome::IoErr(err) => { if attempt_retire(metrics, spawned, worker) { reply( from_pool, FromPool::Concluded { worker, rip: true, - result: Err(PrepareError::DidNotMakeIt), + result: Err(PrepareError::IoErr(err)), }, )?; } @@ -380,6 +377,40 @@ fn attempt_retire( } } +/// Handles the case where we received a response. There potentially was an error, but not the fault +/// of the worker as far as we know, so the worker should not be killed. +/// +/// This function tries to put the idle worker back into the pool and then replies with +/// `FromPool::Concluded` with `rip: false`. +fn handle_concluded_no_rip( + from_pool: &mut mpsc::UnboundedSender, + spawned: &mut HopSlotMap, + worker: Worker, + idle: IdleWorker, + result: PrepareResult, +) -> Result<(), Fatal> { + let data = match spawned.get_mut(worker) { + None => { + // Perhaps the worker was killed meanwhile and the result is no longer relevant. We + // already send `Rip` when purging if we detect that the worker is dead. + return Ok(()) + }, + Some(data) => data, + }; + + // We just replace the idle worker that was loaned from this option during + // the work starting. + let old = data.idle.replace(idle); + never!( + old.is_some(), + "old idle worker was taken out when starting work; we only replace it here; qed" + ); + + reply(from_pool, FromPool::Concluded { worker, rip: false, result })?; + + Ok(()) +} + /// Spins up the pool and returns the future that should be polled to make the pool functional. pub fn start( metrics: Metrics, diff --git a/node/core/pvf/src/prepare/queue.rs b/node/core/pvf/src/prepare/queue.rs index df0a8ec41883..38db463a33b7 100644 --- a/node/core/pvf/src/prepare/queue.rs +++ b/node/core/pvf/src/prepare/queue.rs @@ -17,15 +17,19 @@ //! A queue that handles requests for PVF preparation. use super::pool::{self, Worker}; -use crate::{artifacts::ArtifactId, metrics::Metrics, PrepareResult, Priority, Pvf, LOG_TARGET}; +use crate::{ + artifacts::ArtifactId, metrics::Metrics, PrepareResult, Priority, PvfPrepData, LOG_TARGET, +}; use always_assert::{always, never}; -use async_std::path::PathBuf; use futures::{channel::mpsc, stream::StreamExt as _, Future, SinkExt}; use std::{ collections::{HashMap, VecDeque}, - time::Duration, + path::PathBuf, }; +#[cfg(test)] +use std::time::Duration; + /// A request to pool. #[derive(Debug)] pub enum ToQueue { @@ -33,7 +37,7 @@ pub enum ToQueue { /// /// Note that it is incorrect to enqueue the same PVF again without first receiving the /// [`FromQueue`] response. - Enqueue { priority: Priority, pvf: Pvf, preparation_timeout: Duration }, + Enqueue { priority: Priority, pvf: PvfPrepData }, } /// A response from queue. @@ -78,9 +82,7 @@ slotmap::new_key_type! { pub struct Job; } struct JobData { /// The priority of this job. Can be bumped. priority: Priority, - pvf: Pvf, - /// The timeout for the preparation job. - preparation_timeout: Duration, + pvf: PvfPrepData, worker: Option, } @@ -208,8 +210,8 @@ impl Queue { async fn handle_to_queue(queue: &mut Queue, to_queue: ToQueue) -> Result<(), Fatal> { match to_queue { - ToQueue::Enqueue { priority, pvf, preparation_timeout } => { - handle_enqueue(queue, priority, pvf, preparation_timeout).await?; + ToQueue::Enqueue { priority, pvf } => { + handle_enqueue(queue, priority, pvf).await?; }, } Ok(()) @@ -218,14 +220,13 @@ async fn handle_to_queue(queue: &mut Queue, to_queue: ToQueue) -> Result<(), Fat async fn handle_enqueue( queue: &mut Queue, priority: Priority, - pvf: Pvf, - preparation_timeout: Duration, + pvf: PvfPrepData, ) -> Result<(), Fatal> { gum::debug!( target: LOG_TARGET, - validation_code_hash = ?pvf.code_hash, + validation_code_hash = ?pvf.code_hash(), ?priority, - ?preparation_timeout, + preparation_timeout = ?pvf.prep_timeout, "PVF is enqueued for preparation.", ); queue.metrics.prepare_enqueued(); @@ -247,7 +248,7 @@ async fn handle_enqueue( return Ok(()) } - let job = queue.jobs.insert(JobData { priority, pvf, preparation_timeout, worker: None }); + let job = queue.jobs.insert(JobData { priority, pvf, worker: None }); queue.artifact_id_to_job.insert(artifact_id, job); if let Some(available) = find_idle_worker(queue) { @@ -433,12 +434,7 @@ async fn assign(queue: &mut Queue, worker: Worker, job: Job) -> Result<(), Fatal send_pool( &mut queue.to_pool_tx, - pool::ToPool::StartWork { - worker, - code: job_data.pvf.code.clone(), - artifact_path, - preparation_timeout: job_data.preparation_timeout, - }, + pool::ToPool::StartWork { worker, pvf: job_data.pvf.clone(), artifact_path }, ) .await?; @@ -492,15 +488,17 @@ pub fn start( #[cfg(test)] mod tests { use super::*; - use crate::{error::PrepareError, host::PRECHECK_PREPARATION_TIMEOUT}; + use crate::{ + error::PrepareError, host::tests::TEST_PREPARATION_TIMEOUT, prepare::PrepareStats, + }; use assert_matches::assert_matches; use futures::{future::BoxFuture, FutureExt}; use slotmap::SlotMap; use std::task::Poll; /// Creates a new PVF which artifact id can be uniquely identified by the given number. - fn pvf(descriminator: u32) -> Pvf { - Pvf::from_discriminator(descriminator) + fn pvf(discriminator: u32) -> PvfPrepData { + PvfPrepData::from_discriminator(discriminator) } async fn run_until( @@ -603,15 +601,11 @@ mod tests { } } - #[async_std::test] + #[tokio::test] async fn properly_concludes() { let mut test = Test::new(2, 2); - test.send_queue(ToQueue::Enqueue { - priority: Priority::Normal, - pvf: pvf(1), - preparation_timeout: PRECHECK_PREPARATION_TIMEOUT, - }); + test.send_queue(ToQueue::Enqueue { priority: Priority::Normal, pvf: pvf(1) }); assert_eq!(test.poll_and_recv_to_pool().await, pool::ToPool::Spawn); let w = test.workers.insert(()); @@ -619,21 +613,24 @@ mod tests { test.send_from_pool(pool::FromPool::Concluded { worker: w, rip: false, - result: Ok(Duration::default()), + result: Ok(PrepareStats::default()), }); assert_eq!(test.poll_and_recv_from_queue().await.artifact_id, pvf(1).as_artifact_id()); } - #[async_std::test] + #[tokio::test] async fn dont_spawn_over_soft_limit_unless_critical() { let mut test = Test::new(2, 3); - let preparation_timeout = PRECHECK_PREPARATION_TIMEOUT; let priority = Priority::Normal; - test.send_queue(ToQueue::Enqueue { priority, pvf: pvf(1), preparation_timeout }); - test.send_queue(ToQueue::Enqueue { priority, pvf: pvf(2), preparation_timeout }); - test.send_queue(ToQueue::Enqueue { priority, pvf: pvf(3), preparation_timeout }); + test.send_queue(ToQueue::Enqueue { priority, pvf: PvfPrepData::from_discriminator(1) }); + test.send_queue(ToQueue::Enqueue { priority, pvf: PvfPrepData::from_discriminator(2) }); + // Start a non-precheck preparation for this one. + test.send_queue(ToQueue::Enqueue { + priority, + pvf: PvfPrepData::from_discriminator_and_timeout(3, TEST_PREPARATION_TIMEOUT * 3), + }); // Receive only two spawns. assert_eq!(test.poll_and_recv_to_pool().await, pool::ToPool::Spawn); @@ -652,7 +649,7 @@ mod tests { test.send_from_pool(pool::FromPool::Concluded { worker: w1, rip: false, - result: Ok(Duration::default()), + result: Ok(PrepareStats::default()), }); assert_matches!(test.poll_and_recv_to_pool().await, pool::ToPool::StartWork { .. }); @@ -660,8 +657,7 @@ mod tests { // Enqueue a critical job. test.send_queue(ToQueue::Enqueue { priority: Priority::Critical, - pvf: pvf(4), - preparation_timeout, + pvf: PvfPrepData::from_discriminator(4), }); // 2 out of 2 are working, but there is a critical job incoming. That means that spawning @@ -669,15 +665,13 @@ mod tests { assert_eq!(test.poll_and_recv_to_pool().await, pool::ToPool::Spawn); } - #[async_std::test] + #[tokio::test] async fn cull_unwanted() { let mut test = Test::new(1, 2); - let preparation_timeout = PRECHECK_PREPARATION_TIMEOUT; test.send_queue(ToQueue::Enqueue { priority: Priority::Normal, - pvf: pvf(1), - preparation_timeout, + pvf: PvfPrepData::from_discriminator(1), }); assert_eq!(test.poll_and_recv_to_pool().await, pool::ToPool::Spawn); let w1 = test.workers.insert(()); @@ -687,8 +681,7 @@ mod tests { // Enqueue a critical job, which warrants spawning over the soft limit. test.send_queue(ToQueue::Enqueue { priority: Priority::Critical, - pvf: pvf(2), - preparation_timeout, + pvf: PvfPrepData::from_discriminator(2), }); assert_eq!(test.poll_and_recv_to_pool().await, pool::ToPool::Spawn); @@ -702,19 +695,23 @@ mod tests { test.send_from_pool(pool::FromPool::Concluded { worker: w1, rip: false, - result: Ok(Duration::default()), + result: Ok(PrepareStats::default()), }); assert_eq!(test.poll_and_recv_to_pool().await, pool::ToPool::Kill(w1)); } - #[async_std::test] + #[tokio::test] async fn worker_mass_die_out_doesnt_stall_queue() { let mut test = Test::new(2, 2); - let (priority, preparation_timeout) = (Priority::Normal, PRECHECK_PREPARATION_TIMEOUT); - test.send_queue(ToQueue::Enqueue { priority, pvf: pvf(1), preparation_timeout }); - test.send_queue(ToQueue::Enqueue { priority, pvf: pvf(2), preparation_timeout }); - test.send_queue(ToQueue::Enqueue { priority, pvf: pvf(3), preparation_timeout }); + let priority = Priority::Normal; + test.send_queue(ToQueue::Enqueue { priority, pvf: PvfPrepData::from_discriminator(1) }); + test.send_queue(ToQueue::Enqueue { priority, pvf: PvfPrepData::from_discriminator(2) }); + // Start a non-precheck preparation for this one. + test.send_queue(ToQueue::Enqueue { + priority, + pvf: PvfPrepData::from_discriminator_and_timeout(3, TEST_PREPARATION_TIMEOUT * 3), + }); assert_eq!(test.poll_and_recv_to_pool().await, pool::ToPool::Spawn); assert_eq!(test.poll_and_recv_to_pool().await, pool::ToPool::Spawn); @@ -732,7 +729,7 @@ mod tests { test.send_from_pool(pool::FromPool::Concluded { worker: w1, rip: true, - result: Ok(Duration::default()), + result: Ok(PrepareStats::default()), }); // Since there is still work, the queue requested one extra worker to spawn to handle the @@ -741,14 +738,13 @@ mod tests { assert_eq!(test.poll_and_recv_from_queue().await.artifact_id, pvf(1).as_artifact_id()); } - #[async_std::test] + #[tokio::test] async fn doesnt_resurrect_ripped_worker_if_no_work() { let mut test = Test::new(2, 2); test.send_queue(ToQueue::Enqueue { priority: Priority::Normal, - pvf: pvf(1), - preparation_timeout: PRECHECK_PREPARATION_TIMEOUT, + pvf: PvfPrepData::from_discriminator(1), }); assert_eq!(test.poll_and_recv_to_pool().await, pool::ToPool::Spawn); @@ -761,19 +757,18 @@ mod tests { test.send_from_pool(pool::FromPool::Concluded { worker: w1, rip: true, - result: Err(PrepareError::DidNotMakeIt), + result: Err(PrepareError::IoErr("test".into())), }); test.poll_ensure_to_pool_is_empty().await; } - #[async_std::test] + #[tokio::test] async fn rip_for_start_work() { let mut test = Test::new(2, 2); test.send_queue(ToQueue::Enqueue { priority: Priority::Normal, - pvf: pvf(1), - preparation_timeout: PRECHECK_PREPARATION_TIMEOUT, + pvf: PvfPrepData::from_discriminator(1), }); assert_eq!(test.poll_and_recv_to_pool().await, pool::ToPool::Spawn); diff --git a/node/core/pvf/src/prepare/worker.rs b/node/core/pvf/src/prepare/worker.rs index 91361eacaf26..962ad2742bf8 100644 --- a/node/core/pvf/src/prepare/worker.rs +++ b/node/core/pvf/src/prepare/worker.rs @@ -14,34 +14,36 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . +#[cfg(target_os = "linux")] +use super::memory_stats::max_rss_stat::{extract_max_rss_stat, get_max_rss_thread}; +#[cfg(any(target_os = "linux", feature = "jemalloc-allocator"))] +use super::memory_stats::memory_tracker::{get_memory_tracker_loop_stats, memory_tracker_loop}; +use super::memory_stats::MemoryStats; use crate::{ artifacts::CompiledArtifact, error::{PrepareError, PrepareResult}, + metrics::Metrics, + prepare::PrepareStats, + pvf::PvfPrepData, worker_common::{ bytes_to_path, cpu_time_monitor_loop, framed_recv, framed_send, path_to_bytes, - spawn_with_program_path, tmpfile_in, worker_event_loop, IdleWorker, JobKind, SpawnErr, - WorkerHandle, JOB_TIMEOUT_WALL_CLOCK_FACTOR, + spawn_with_program_path, tmpfile_in, worker_event_loop, IdleWorker, SpawnErr, WorkerHandle, + JOB_TIMEOUT_WALL_CLOCK_FACTOR, }, LOG_TARGET, }; -use async_std::{ - io, - os::unix::net::UnixStream, - path::{Path, PathBuf}, - task, -}; use cpu_time::ProcessTime; +use futures::{pin_mut, select_biased, FutureExt}; use parity_scale_codec::{Decode, Encode}; + use sp_core::hexdisplay::HexDisplay; use std::{ panic, - sync::{ - atomic::{AtomicBool, Ordering}, - Arc, - }, - thread, + path::{Path, PathBuf}, + sync::mpsc::channel, time::Duration, }; +use tokio::{io, net::UnixStream}; /// Spawns a new worker with the given program path that acts as the worker and the spawn timeout. /// @@ -59,36 +61,34 @@ pub enum Outcome { /// The host tried to reach the worker but failed. This is most likely because the worked was /// killed by the system. Unreachable, + /// The temporary file for the artifact could not be created at the given cache path. + CreateTmpFileErr { worker: IdleWorker, err: String }, + /// The response from the worker is received, but the file cannot be renamed (moved) to the + /// final destination location. + RenameTmpFileErr { worker: IdleWorker, result: PrepareResult, err: String }, /// The worker failed to finish the job until the given deadline. /// /// The worker is no longer usable and should be killed. TimedOut, - /// The execution was interrupted abruptly and the worker is not available anymore. + /// An IO error occurred while receiving the result from the worker process. /// /// This doesn't return an idle worker instance, thus this worker is no longer usable. - DidNotMakeIt, -} - -#[derive(Debug)] -enum Selected { - Done(PrepareResult), - IoErr, - Deadline, + IoErr(String), } /// Given the idle token of a worker and parameters of work, communicates with the worker and /// returns the outcome. /// -/// NOTE: Returning the `TimedOut` or `DidNotMakeIt` errors will trigger the child process being -/// killed. +/// NOTE: Returning the `TimedOut`, `IoErr` or `Unreachable` outcomes will trigger the child process +/// being killed. pub async fn start_work( + metrics: &Metrics, worker: IdleWorker, - code: Arc>, + pvf: PvfPrepData, cache_path: &Path, artifact_path: PathBuf, - preparation_timeout: Duration, ) -> Outcome { - let IdleWorker { mut stream, pid } = worker; + let IdleWorker { stream, pid } = worker; gum::debug!( target: LOG_TARGET, @@ -97,8 +97,9 @@ pub async fn start_work( artifact_path.display(), ); - with_tmp_file(pid, cache_path, |tmp_file| async move { - if let Err(err) = send_request(&mut stream, code, &tmp_file, preparation_timeout).await { + with_tmp_file(stream, pid, cache_path, |tmp_file, mut stream| async move { + let preparation_timeout = pvf.prep_timeout; + if let Err(err) = send_request(&mut stream, pvf, &tmp_file).await { gum::warn!( target: LOG_TARGET, worker_pid = %pid, @@ -118,13 +119,15 @@ pub async fn start_work( // load, but the CPU resources of the child can only be measured from the parent after the // child process terminates. let timeout = preparation_timeout * JOB_TIMEOUT_WALL_CLOCK_FACTOR; - let result = async_std::future::timeout(timeout, framed_recv(&mut stream)).await; + let result = tokio::time::timeout(timeout, recv_response(&mut stream, pid)).await; - let selected = match result { + match result { // Received bytes from worker within the time limit. - Ok(Ok(response_bytes)) => - handle_response_bytes( - response_bytes, + Ok(Ok(prepare_result)) => + handle_response( + metrics, + IdleWorker { stream, pid }, + prepare_result, pid, tmp_file, artifact_path, @@ -139,7 +142,7 @@ pub async fn start_work( "failed to recv a prepare response: {:?}", err, ); - Selected::IoErr + Outcome::IoErr(err.to_string()) }, Err(_) => { // Timed out here on the host. @@ -148,18 +151,8 @@ pub async fn start_work( worker_pid = %pid, "did not recv a prepare response within the time limit", ); - Selected::Deadline + Outcome::TimedOut }, - }; - - // NOTE: A `TimedOut` or `DidNotMakeIt` error triggers the child process being killed. - match selected { - // Timed out on the child. This should already be logged by the child. - Selected::Done(Err(PrepareError::TimedOut)) => Outcome::TimedOut, - Selected::Done(result) => - Outcome::Concluded { worker: IdleWorker { stream, pid }, result }, - Selected::Deadline => Outcome::TimedOut, - Selected::IoErr => Outcome::DidNotMakeIt, } }) .await @@ -169,80 +162,73 @@ pub async fn start_work( /// /// NOTE: Here we know the artifact exists, but is still located in a temporary file which will be /// cleared by `with_tmp_file`. -async fn handle_response_bytes( - response_bytes: Vec, - pid: u32, +async fn handle_response( + metrics: &Metrics, + worker: IdleWorker, + result: PrepareResult, + worker_pid: u32, tmp_file: PathBuf, artifact_path: PathBuf, preparation_timeout: Duration, -) -> Selected { - // By convention we expect encoded `PrepareResult`. - let result = match PrepareResult::decode(&mut response_bytes.as_slice()) { - Ok(result) => result, - Err(_) => { - // We received invalid bytes from the worker. - let bound_bytes = &response_bytes[..response_bytes.len().min(4)]; - gum::warn!( - target: LOG_TARGET, - worker_pid = %pid, - "received unexpected response from the prepare worker: {}", - HexDisplay::from(&bound_bytes), - ); - return Selected::IoErr - }, - }; - let cpu_time_elapsed = match result { +) -> Outcome { + let PrepareStats { cpu_time_elapsed, memory_stats } = match result.clone() { Ok(result) => result, - Err(_) => return Selected::Done(result), + // Timed out on the child. This should already be logged by the child. + Err(PrepareError::TimedOut) => return Outcome::TimedOut, + Err(_) => return Outcome::Concluded { worker, result }, }; if cpu_time_elapsed > preparation_timeout { // The job didn't complete within the timeout. gum::warn!( target: LOG_TARGET, - worker_pid = %pid, + %worker_pid, "prepare job took {}ms cpu time, exceeded preparation timeout {}ms. Clearing WIP artifact {}", cpu_time_elapsed.as_millis(), preparation_timeout.as_millis(), tmp_file.display(), ); - - // Return a timeout error. - return Selected::Deadline + return Outcome::TimedOut } gum::debug!( target: LOG_TARGET, - worker_pid = %pid, + %worker_pid, "promoting WIP artifact {} to {}", tmp_file.display(), artifact_path.display(), ); - async_std::fs::rename(&tmp_file, &artifact_path) - .await - .map(|_| Selected::Done(result)) - .unwrap_or_else(|err| { + let outcome = match tokio::fs::rename(&tmp_file, &artifact_path).await { + Ok(()) => Outcome::Concluded { worker, result }, + Err(err) => { gum::warn!( target: LOG_TARGET, - worker_pid = %pid, + %worker_pid, "failed to rename the artifact from {} to {}: {:?}", tmp_file.display(), artifact_path.display(), err, ); - Selected::IoErr - }) + Outcome::RenameTmpFileErr { worker, result, err: format!("{:?}", err) } + }, + }; + + // If there were no errors up until now, log the memory stats for a successful preparation, if + // available. + metrics.observe_preparation_memory_metrics(memory_stats); + + outcome } /// Create a temporary file for an artifact at the given cache path and execute the given /// future/closure passing the file path in. /// /// The function will try best effort to not leave behind the temporary file. -async fn with_tmp_file(pid: u32, cache_path: &Path, f: F) -> Outcome +async fn with_tmp_file(stream: UnixStream, pid: u32, cache_path: &Path, f: F) -> Outcome where Fut: futures::Future, - F: FnOnce(PathBuf) -> Fut, + F: FnOnce(PathBuf, UnixStream) -> Fut, { let tmp_file = match tmpfile_in("prepare-artifact-", cache_path).await { Ok(f) => f, @@ -253,18 +239,21 @@ where "failed to create a temp file for the artifact: {:?}", err, ); - return Outcome::DidNotMakeIt + return Outcome::CreateTmpFileErr { + worker: IdleWorker { stream, pid }, + err: format!("{:?}", err), + } }, }; - let outcome = f(tmp_file.clone()).await; + let outcome = f(tmp_file.clone(), stream).await; // The function called above is expected to move `tmp_file` to a new location upon success. However, // the function may as well fail and in that case we should remove the tmp file here. // // In any case, we try to remove the file here so that there are no leftovers. We only report // errors that are different from the `NotFound`. - match async_std::fs::remove_file(tmp_file).await { + match tokio::fs::remove_file(tmp_file).await { Ok(()) => (), Err(err) if err.kind() == std::io::ErrorKind::NotFound => (), Err(err) => { @@ -282,18 +271,22 @@ where async fn send_request( stream: &mut UnixStream, - code: Arc>, + pvf: PvfPrepData, tmp_file: &Path, - preparation_timeout: Duration, ) -> io::Result<()> { - framed_send(stream, &code).await?; + framed_send(stream, &pvf.encode()).await?; framed_send(stream, path_to_bytes(tmp_file)).await?; - framed_send(stream, &preparation_timeout.encode()).await?; Ok(()) } -async fn recv_request(stream: &mut UnixStream) -> io::Result<(Vec, PathBuf, Duration)> { - let code = framed_recv(stream).await?; +async fn recv_request(stream: &mut UnixStream) -> io::Result<(PvfPrepData, PathBuf)> { + let pvf = framed_recv(stream).await?; + let pvf = PvfPrepData::decode(&mut &pvf[..]).map_err(|e| { + io::Error::new( + io::ErrorKind::Other, + format!("prepare pvf recv_request: failed to decode PvfPrepData: {}", e), + ) + })?; let tmp_file = framed_recv(stream).await?; let tmp_file = bytes_to_path(&tmp_file).ok_or_else(|| { io::Error::new( @@ -301,103 +294,174 @@ async fn recv_request(stream: &mut UnixStream) -> io::Result<(Vec, PathBuf, "prepare pvf recv_request: non utf-8 artifact path".to_string(), ) })?; - let preparation_timeout = framed_recv(stream).await?; - let preparation_timeout = Duration::decode(&mut &preparation_timeout[..]).map_err(|_| { + Ok((pvf, tmp_file)) +} + +async fn send_response(stream: &mut UnixStream, result: PrepareResult) -> io::Result<()> { + framed_send(stream, &result.encode()).await +} + +async fn recv_response(stream: &mut UnixStream, pid: u32) -> io::Result { + let result = framed_recv(stream).await?; + let result = PrepareResult::decode(&mut &result[..]).map_err(|e| { + // We received invalid bytes from the worker. + let bound_bytes = &result[..result.len().min(4)]; + gum::warn!( + target: LOG_TARGET, + worker_pid = %pid, + "received unexpected response from the prepare worker: {}", + HexDisplay::from(&bound_bytes), + ); io::Error::new( io::ErrorKind::Other, - "prepare pvf recv_request: failed to decode duration".to_string(), + format!("prepare pvf recv_response: failed to decode result: {:?}", e), ) })?; - Ok((code, tmp_file, preparation_timeout)) + Ok(result) } /// The entrypoint that the spawned prepare worker should start with. The `socket_path` specifies /// the path to the socket used to communicate with the host. +/// +/// # Flow +/// +/// This runs the following in a loop: +/// +/// 1. Get the code and parameters for preparation from the host. +/// +/// 2. Start a memory tracker in a separate thread. +/// +/// 3. Start the CPU time monitor loop and the actual preparation in two separate threads. +/// +/// 4. Select on the two threads created in step 3. If the CPU timeout was hit, the CPU time monitor +/// thread will trigger first. +/// +/// 5. Stop the memory tracker and get the stats. +/// +/// 6. If compilation succeeded, write the compiled artifact into a temporary file. +/// +/// 7. Send the result of preparation back to the host. If any error occurred in the above steps, we +/// send that in the `PrepareResult`. pub fn worker_entrypoint(socket_path: &str) { - worker_event_loop("prepare", socket_path, |mut stream| async move { + worker_event_loop("prepare", socket_path, |rt_handle, mut stream| async move { loop { - let (code, dest, preparation_timeout) = recv_request(&mut stream).await?; - + let worker_pid = std::process::id(); + let (pvf, dest) = recv_request(&mut stream).await?; gum::debug!( target: LOG_TARGET, - worker_pid = %std::process::id(), + %worker_pid, "worker: preparing artifact", ); - // Create a lock flag. We set it when either thread finishes. - let lock = Arc::new(AtomicBool::new(false)); let cpu_time_start = ProcessTime::now(); - - // Spawn a new thread that runs the CPU time monitor. Continuously wakes up from - // sleeping and then either sleeps for the remaining CPU time, or kills the process if - // we exceed the CPU timeout. - let (stream_2, cpu_time_start_2, preparation_timeout_2, lock_2) = - (stream.clone(), cpu_time_start, preparation_timeout, lock.clone()); - let handle = - thread::Builder::new().name("CPU time monitor".into()).spawn(move || { - task::block_on(async { - cpu_time_monitor_loop( - JobKind::Prepare, - stream_2, - cpu_time_start_2, - preparation_timeout_2, - lock_2, - ) - .await; - }) - })?; - - // Prepares the artifact in a separate thread. - let result = match prepare_artifact(&code).await { - Err(err) => { - // Serialized error will be written into the socket. - Err(err) + let preparation_timeout = pvf.prep_timeout; + + // Run the memory tracker. + #[cfg(any(target_os = "linux", feature = "jemalloc-allocator"))] + let (memory_tracker_tx, memory_tracker_rx) = channel::<()>(); + #[cfg(any(target_os = "linux", feature = "jemalloc-allocator"))] + let memory_tracker_fut = rt_handle.spawn_blocking(move || memory_tracker_loop(memory_tracker_rx)); + + // Spawn a new thread that runs the CPU time monitor. + let (cpu_time_monitor_tx, cpu_time_monitor_rx) = channel::<()>(); + let cpu_time_monitor_fut = rt_handle + .spawn_blocking(move || { + cpu_time_monitor_loop(cpu_time_start, preparation_timeout, cpu_time_monitor_rx) + }) + .fuse(); + // Spawn another thread for preparation. + let prepare_fut = rt_handle + .spawn_blocking(move || { + let result = prepare_artifact(pvf); + + // Get the `ru_maxrss` stat. If supported, call getrusage for the thread. + #[cfg(target_os = "linux")] + let result = result.map(|artifact| (artifact, get_max_rss_thread())); + + result + }) + .fuse(); + + pin_mut!(cpu_time_monitor_fut); + pin_mut!(prepare_fut); + + let result = select_biased! { + // If this future is not selected, the join handle is dropped and the thread will + // finish in the background. + join_res = cpu_time_monitor_fut => { + match join_res { + Ok(Some(cpu_time_elapsed)) => { + // Log if we exceed the timeout and the other thread hasn't finished. + gum::warn!( + target: LOG_TARGET, + %worker_pid, + "prepare job took {}ms cpu time, exceeded prepare timeout {}ms", + cpu_time_elapsed.as_millis(), + preparation_timeout.as_millis(), + ); + Err(PrepareError::TimedOut) + }, + Ok(None) => Err(PrepareError::IoErr("error communicating over finished channel".into())), + Err(err) => Err(PrepareError::IoErr(err.to_string())), + } }, - Ok(compiled_artifact) => { + prepare_res = prepare_fut => { let cpu_time_elapsed = cpu_time_start.elapsed(); - - let lock_result = - lock.compare_exchange(false, true, Ordering::Relaxed, Ordering::Relaxed); - if lock_result.is_err() { - // The other thread is still sending an error response over the socket. Wait on it and - // return. - let _ = handle.join(); - // Monitor thread detected timeout and likely already terminated the - // process, nothing to do. - continue + let _ = cpu_time_monitor_tx.send(()); + + match prepare_res.unwrap_or_else(|err| Err(PrepareError::IoErr(err.to_string()))) { + Err(err) => { + // Serialized error will be written into the socket. + Err(err) + }, + Ok(ok) => { + // Stop the memory stats worker and get its observed memory stats. + #[cfg(any(target_os = "linux", feature = "jemalloc-allocator"))] + let memory_tracker_stats = + get_memory_tracker_loop_stats(memory_tracker_fut, memory_tracker_tx, worker_pid).await; + #[cfg(target_os = "linux")] + let (ok, max_rss) = ok; + let memory_stats = MemoryStats { + #[cfg(any(target_os = "linux", feature = "jemalloc-allocator"))] + memory_tracker_stats, + #[cfg(target_os = "linux")] + max_rss: extract_max_rss_stat(max_rss, worker_pid), + }; + + // Write the serialized artifact into a temp file. + // + // PVF host only keeps artifacts statuses in its memory, successfully + // compiled code gets stored on the disk (and consequently deserialized + // by execute-workers). The prepare worker is only required to send `Ok` + // to the pool to indicate the success. + + gum::debug!( + target: LOG_TARGET, + %worker_pid, + "worker: writing artifact to {}", + dest.display(), + ); + tokio::fs::write(&dest, &ok).await?; + + Ok(PrepareStats{cpu_time_elapsed, memory_stats}) + }, } - - // Write the serialized artifact into a temp file. - // - // PVF host only keeps artifacts statuses in its memory, successfully compiled code gets stored - // on the disk (and consequently deserialized by execute-workers). The prepare worker is only - // required to send `Ok` to the pool to indicate the success. - - gum::debug!( - target: LOG_TARGET, - worker_pid = %std::process::id(), - "worker: writing artifact to {}", - dest.display(), - ); - async_std::fs::write(&dest, &compiled_artifact).await?; - - Ok(cpu_time_elapsed) }, }; - framed_send(&mut stream, result.encode().as_slice()).await?; + send_response(&mut stream, result).await?; } }); } -async fn prepare_artifact(code: &[u8]) -> Result { +fn prepare_artifact(pvf: PvfPrepData) -> Result { panic::catch_unwind(|| { - let blob = match crate::executor_intf::prevalidate(code) { + let blob = match crate::executor_intf::prevalidate(&pvf.code()) { Err(err) => return Err(PrepareError::Prevalidation(format!("{:?}", err))), Ok(b) => b, }; - match crate::executor_intf::prepare(blob) { + match crate::executor_intf::prepare(blob, &pvf.executor_params()) { Ok(compiled_artifact) => Ok(CompiledArtifact::new(compiled_artifact)), Err(err) => Err(PrepareError::Preparation(format!("{:?}", err))), } diff --git a/node/core/pvf/src/pvf.rs b/node/core/pvf/src/pvf.rs index d06968a13d43..3a40b972f09a 100644 --- a/node/core/pvf/src/pvf.rs +++ b/node/core/pvf/src/pvf.rs @@ -15,42 +15,97 @@ // along with Polkadot. If not, see . use crate::artifacts::ArtifactId; +use parity_scale_codec::{Decode, Encode}; use polkadot_parachain::primitives::ValidationCodeHash; +use polkadot_primitives::vstaging::ExecutorParams; use sp_core::blake2_256; -use std::{fmt, sync::Arc}; +use std::{ + cmp::{Eq, PartialEq}, + fmt, + sync::Arc, + time::Duration, +}; -/// A struct that carries code of a parachain validation function and its hash. +#[cfg(test)] +use crate::host::tests::TEST_PREPARATION_TIMEOUT; + +/// A struct that carries the exhaustive set of data to prepare an artifact out of plain +/// Wasm binary /// /// Should be cheap to clone. -#[derive(Clone)] -pub struct Pvf { +#[derive(Clone, Encode, Decode)] +pub struct PvfPrepData { + /// Wasm code (uncompressed) pub(crate) code: Arc>, + /// Wasm code hash pub(crate) code_hash: ValidationCodeHash, + /// Executor environment parameters for the session for which artifact is prepared + pub(crate) executor_params: Arc, + /// Preparation timeout + pub(crate) prep_timeout: Duration, } -impl fmt::Debug for Pvf { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "Pvf {{ code, code_hash: {:?} }}", self.code_hash) - } -} - -impl Pvf { - /// Returns an instance of the PVF out of the given PVF code. - pub fn from_code(code: Vec) -> Self { +impl PvfPrepData { + /// Returns an instance of the PVF out of the given PVF code and executor params. + pub fn from_code( + code: Vec, + executor_params: ExecutorParams, + prep_timeout: Duration, + ) -> Self { let code = Arc::new(code); let code_hash = blake2_256(&code).into(); - Self { code, code_hash } + let executor_params = Arc::new(executor_params); + Self { code, code_hash, executor_params, prep_timeout } + } + + /// Returns artifact ID that corresponds to the PVF with given executor params + pub(crate) fn as_artifact_id(&self) -> ArtifactId { + ArtifactId::new(self.code_hash, self.executor_params.hash()) + } + + /// Returns validation code hash for the PVF + pub(crate) fn code_hash(&self) -> ValidationCodeHash { + self.code_hash + } + + /// Returns PVF code + pub(crate) fn code(&self) -> Arc> { + self.code.clone() + } + + /// Returns executor params + pub(crate) fn executor_params(&self) -> Arc { + self.executor_params.clone() } - /// Creates a new PVF which artifact id can be uniquely identified by the given number. + /// Creates a structure for tests #[cfg(test)] - pub(crate) fn from_discriminator(num: u32) -> Self { + pub(crate) fn from_discriminator_and_timeout(num: u32, timeout: Duration) -> Self { let descriminator_buf = num.to_le_bytes().to_vec(); - Pvf::from_code(descriminator_buf) + Self::from_code(descriminator_buf, ExecutorParams::default(), timeout) } - /// Returns the artifact ID that corresponds to this PVF. - pub(crate) fn as_artifact_id(&self) -> ArtifactId { - ArtifactId::new(self.code_hash) + #[cfg(test)] + pub(crate) fn from_discriminator(num: u32) -> Self { + Self::from_discriminator_and_timeout(num, TEST_PREPARATION_TIMEOUT) } } + +impl fmt::Debug for PvfPrepData { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!( + f, + "Pvf {{ code, code_hash: {:?}, executor_params: {:?}, prep_timeout: {:?} }}", + self.code_hash, self.executor_params, self.prep_timeout + ) + } +} + +impl PartialEq for PvfPrepData { + fn eq(&self, other: &Self) -> bool { + self.code_hash == other.code_hash && + self.executor_params.hash() == other.executor_params.hash() + } +} + +impl Eq for PvfPrepData {} diff --git a/node/core/pvf/src/testing.rs b/node/core/pvf/src/testing.rs index cbd37b06d403..e41b769440df 100644 --- a/node/core/pvf/src/testing.rs +++ b/node/core/pvf/src/testing.rs @@ -19,6 +19,8 @@ //! N.B. This is not guarded with some feature flag. Overexposing items here may affect the final //! artifact even for production builds. +use polkadot_primitives::vstaging::ExecutorParams; + pub mod worker_common { pub use crate::worker_common::{spawn_with_program_path, SpawnErr}; } @@ -35,12 +37,12 @@ pub fn validate_candidate( .expect("Decompressing code failed"); let blob = prevalidate(&code)?; - let artifact = prepare(blob)?; + let artifact = prepare(blob, &ExecutorParams::default())?; let tmpdir = tempfile::tempdir()?; let artifact_path = tmpdir.path().join("blob"); std::fs::write(&artifact_path, &artifact)?; - let executor = Executor::new()?; + let executor = Executor::new(ExecutorParams::default())?; let result = unsafe { // SAFETY: This is trivially safe since the artifact is obtained by calling `prepare` // and is written into a temporary directory in an unmodified state. diff --git a/node/core/pvf/src/worker_common.rs b/node/core/pvf/src/worker_common.rs index f9eaf42dcf67..430a6950fb4f 100644 --- a/node/core/pvf/src/worker_common.rs +++ b/node/core/pvf/src/worker_common.rs @@ -16,30 +16,26 @@ //! Common logic for implementation of worker processes. -use crate::{execute::ExecuteResponse, PrepareError, LOG_TARGET}; -use async_std::{ - io, - os::unix::net::{UnixListener, UnixStream}, - path::{Path, PathBuf}, -}; +use crate::LOG_TARGET; use cpu_time::ProcessTime; -use futures::{ - never::Never, AsyncRead, AsyncReadExt as _, AsyncWrite, AsyncWriteExt as _, FutureExt as _, -}; +use futures::{never::Never, FutureExt as _}; use futures_timer::Delay; -use parity_scale_codec::Encode; use pin_project::pin_project; use rand::Rng; use std::{ fmt, mem, + path::{Path, PathBuf}, pin::Pin, - sync::{ - atomic::{AtomicBool, Ordering}, - Arc, - }, + sync::mpsc::{Receiver, RecvTimeoutError}, task::{Context, Poll}, time::Duration, }; +use tokio::{ + io::{self, AsyncRead, AsyncReadExt as _, AsyncWrite, AsyncWriteExt as _, ReadBuf}, + net::{UnixListener, UnixStream}, + process, + runtime::{Handle, Runtime}, +}; /// A multiple of the job timeout (in CPU time) for which we are willing to wait on the host (in /// wall clock time). This is lenient because CPU time may go slower than wall clock time. @@ -49,21 +45,6 @@ pub const JOB_TIMEOUT_WALL_CLOCK_FACTOR: u32 = 4; /// child process. pub const JOB_TIMEOUT_OVERHEAD: Duration = Duration::from_millis(50); -#[derive(Copy, Clone, Debug)] -pub enum JobKind { - Prepare, - Execute, -} - -impl fmt::Display for JobKind { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - Self::Prepare => write!(f, "prepare"), - Self::Execute => write!(f, "execute"), - } - } -} - /// This is publicly exposed only for integration tests. #[doc(hidden)] pub async fn spawn_with_program_path( @@ -76,7 +57,7 @@ pub async fn spawn_with_program_path( with_transient_socket_path(debug_id, |socket_path| { let socket_path = socket_path.to_owned(); async move { - let listener = UnixListener::bind(&socket_path).await.map_err(|err| { + let listener = UnixListener::bind(&socket_path).map_err(|err| { gum::warn!( target: LOG_TARGET, %debug_id, @@ -131,7 +112,7 @@ where // Best effort to remove the socket file. Under normal circumstances the socket will be removed // by the worker. We make sure that it is removed here, just in case a failed rendezvous. - let _ = async_std::fs::remove_file(socket_path).await; + let _ = tokio::fs::remove_file(socket_path).await; result } @@ -162,7 +143,7 @@ pub async fn tmpfile_in(prefix: &str, dir: &Path) -> io::Result { for _ in 0..NUM_RETRIES { let candidate_path = tmppath(prefix, dir); - if !candidate_path.exists().await { + if !candidate_path.exists() { return Ok(candidate_path) } } @@ -178,16 +159,22 @@ pub async fn tmpfile(prefix: &str) -> io::Result { pub fn worker_event_loop(debug_id: &'static str, socket_path: &str, mut event_loop: F) where - F: FnMut(UnixStream) -> Fut, + F: FnMut(Handle, UnixStream) -> Fut, Fut: futures::Future>, { - let err = async_std::task::block_on::<_, io::Result>(async move { - let stream = UnixStream::connect(socket_path).await?; - let _ = async_std::fs::remove_file(socket_path).await; + let rt = Runtime::new().expect("Creates tokio runtime. If this panics the worker will die and the host will detect that and deal with it."); + let handle = rt.handle(); + let err = rt + .block_on(async move { + let stream = UnixStream::connect(socket_path).await?; + let _ = tokio::fs::remove_file(socket_path).await; - event_loop(stream).await - }) - .unwrap_err(); // it's never `Ok` because it's `Ok(Never)` + let result = event_loop(handle.clone(), stream).await; + + result + }) + // It's never `Ok` because it's `Ok(Never)`. + .unwrap_err(); gum::debug!( target: LOG_TARGET, @@ -196,74 +183,45 @@ where debug_id, err, ); + + // We don't want tokio to wait for the tasks to finish. We want to bring down the worker as fast + // as possible and not wait for stalled validation to finish. This isn't strictly necessary now, + // but may be in the future. + rt.shutdown_background(); } /// Loop that runs in the CPU time monitor thread on prepare and execute jobs. Continuously wakes up -/// from sleeping and then either sleeps for the remaining CPU time, or sends back a timeout error -/// if we exceed the CPU timeout. +/// and then either blocks for the remaining CPU time, or returns if we exceed the CPU timeout. /// -/// NOTE: If the job completes and this thread is still sleeping, it will continue sleeping in the -/// background. When it wakes, it will see that the flag has been set and return. -pub async fn cpu_time_monitor_loop( - job_kind: JobKind, - mut stream: UnixStream, +/// Returning `Some` indicates that we should send a `TimedOut` error to the host. Will return +/// `None` if the other thread finishes first, without us timing out. +/// +/// NOTE: Sending a `TimedOut` error to the host will cause the worker, whether preparation or +/// execution, to be killed by the host. We do not kill the process here because it would interfere +/// with the proper handling of this error. +pub fn cpu_time_monitor_loop( cpu_time_start: ProcessTime, timeout: Duration, - lock: Arc, -) { + finished_rx: Receiver<()>, +) -> Option { loop { let cpu_time_elapsed = cpu_time_start.elapsed(); // Treat the timeout as CPU time, which is less subject to variance due to load. - if cpu_time_elapsed > timeout { - let result = lock.compare_exchange(false, true, Ordering::Relaxed, Ordering::Relaxed); - if result.is_err() { - // Hit the job-completed case first, return from this thread. - return - } - - // Log if we exceed the timeout. - gum::warn!( - target: LOG_TARGET, - worker_pid = %std::process::id(), - "{job_kind} job took {}ms cpu time, exceeded {job_kind} timeout {}ms", - cpu_time_elapsed.as_millis(), - timeout.as_millis(), - ); - - // Send back a `TimedOut` error. - // - // NOTE: This will cause the worker, whether preparation or execution, to be killed by - // the host. We do not kill the process here because it would interfere with the proper - // handling of this error. - let encoded_result = match job_kind { - JobKind::Prepare => { - let result: Result<(), PrepareError> = Err(PrepareError::TimedOut); - result.encode() - }, - JobKind::Execute => { - let result = ExecuteResponse::TimedOut; - result.encode() - }, - }; - // If we error here there is nothing we can do apart from log it. The receiving side - // will just have to time out. - if let Err(err) = framed_send(&mut stream, encoded_result.as_slice()).await { - gum::warn!( - target: LOG_TARGET, - worker_pid = %std::process::id(), - "{job_kind} worker -> pvf host: error sending result over the socket: {:?}", - err - ); + if cpu_time_elapsed <= timeout { + // Sleep for the remaining CPU time, plus a bit to account for overhead. Note that the sleep + // is wall clock time. The CPU clock may be slower than the wall clock. + let sleep_interval = timeout.saturating_sub(cpu_time_elapsed) + JOB_TIMEOUT_OVERHEAD; + match finished_rx.recv_timeout(sleep_interval) { + // Received finish signal. + Ok(()) => return None, + // Timed out, restart loop. + Err(RecvTimeoutError::Timeout) => continue, + Err(RecvTimeoutError::Disconnected) => return None, } - - return } - // Sleep for the remaining CPU time, plus a bit to account for overhead. Note that the sleep - // is wall clock time. The CPU clock may be slower than the wall clock. - let sleep_interval = timeout - cpu_time_elapsed + JOB_TIMEOUT_OVERHEAD; - std::thread::sleep(sleep_interval); + return Some(cpu_time_elapsed) } } @@ -293,6 +251,8 @@ pub enum SpawnErr { ProcessSpawn, /// The deadline allotted for the worker spawning and connecting to the socket has elapsed. AcceptTimeout, + /// Failed to send handshake after successful spawning was signaled + Handshake, } /// This is a representation of a potentially running worker. Drop it and the process will be killed. @@ -304,9 +264,10 @@ pub enum SpawnErr { /// This future relies on the fact that a child process's stdout `fd` is closed upon it's termination. #[pin_project] pub struct WorkerHandle { - child: async_process::Child, + child: process::Child, + child_id: u32, #[pin] - stdout: async_process::ChildStdout, + stdout: process::ChildStdout, program: PathBuf, drop_box: Box<[u8]>, } @@ -317,13 +278,16 @@ impl WorkerHandle { extra_args: &[&str], socket_path: impl AsRef, ) -> io::Result { - let mut child = async_process::Command::new(program.as_ref()) + let mut child = process::Command::new(program.as_ref()) .args(extra_args) .arg(socket_path.as_ref().as_os_str()) - .stdout(async_process::Stdio::piped()) + .stdout(std::process::Stdio::piped()) .kill_on_drop(true) .spawn()?; + let child_id = child + .id() + .ok_or(io::Error::new(io::ErrorKind::Other, "could not get id of spawned process"))?; let stdout = child .stdout .take() @@ -331,6 +295,7 @@ impl WorkerHandle { Ok(WorkerHandle { child, + child_id, stdout, program: program.as_ref().to_path_buf(), // We don't expect the bytes to be ever read. But in case we do, we should not use a buffer @@ -348,7 +313,7 @@ impl WorkerHandle { /// Returns the process id of this worker. pub fn id(&self) -> u32 { - self.child.id() + self.child_id } } @@ -357,15 +322,20 @@ impl futures::Future for WorkerHandle { fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { let me = self.project(); - match futures::ready!(AsyncRead::poll_read(me.stdout, cx, &mut *me.drop_box)) { - Ok(0) => { - // 0 means `EOF` means the child was terminated. Resolve. - Poll::Ready(()) - }, - Ok(_bytes_read) => { - // weird, we've read something. Pretend that never happened and reschedule ourselves. - cx.waker().wake_by_ref(); - Poll::Pending + // Create a `ReadBuf` here instead of storing it in `WorkerHandle` to avoid a lifetime + // parameter on `WorkerHandle`. Creating the `ReadBuf` is fairly cheap. + let mut read_buf = ReadBuf::new(&mut *me.drop_box); + match futures::ready!(AsyncRead::poll_read(me.stdout, cx, &mut read_buf)) { + Ok(()) => { + if read_buf.filled().len() > 0 { + // weird, we've read something. Pretend that never happened and reschedule + // ourselves. + cx.waker().wake_by_ref(); + Poll::Pending + } else { + // Nothing read means `EOF` means the child was terminated. Resolve. + Poll::Ready(()) + } }, Err(err) => { // The implementation is guaranteed to not to return `WouldBlock` and Interrupted. This @@ -374,8 +344,8 @@ impl futures::Future for WorkerHandle { // Log the status code. gum::debug!( target: LOG_TARGET, - worker_pid = %me.child.id(), - status_code = ?me.child.try_status(), + worker_pid = %me.child_id, + status_code = ?me.child.try_wait().ok().flatten().map(|c| c.to_string()), "pvf worker ({}): {:?}", me.program.display(), err, diff --git a/node/core/pvf/tests/it/adder.rs b/node/core/pvf/tests/it/adder.rs index 69b6b7d21979..3c373f7ea517 100644 --- a/node/core/pvf/tests/it/adder.rs +++ b/node/core/pvf/tests/it/adder.rs @@ -22,7 +22,7 @@ use polkadot_parachain::primitives::{ ValidationParams, }; -#[async_std::test] +#[tokio::test] async fn execute_good_block_on_parent() { let parent_head = HeadData { number: 0, parent_hash: [0; 32], post_state: hash_state(0) }; @@ -39,6 +39,7 @@ async fn execute_good_block_on_parent() { relay_parent_number: 1, relay_parent_storage_root: Default::default(), }, + Default::default(), ) .await .unwrap(); @@ -50,7 +51,7 @@ async fn execute_good_block_on_parent() { assert_eq!(new_head.post_state, hash_state(512)); } -#[async_std::test] +#[tokio::test] async fn execute_good_chain_on_parent() { let mut number = 0; let mut parent_hash = [0; 32]; @@ -72,6 +73,7 @@ async fn execute_good_chain_on_parent() { relay_parent_number: number as RelayChainBlockNumber + 1, relay_parent_storage_root: Default::default(), }, + Default::default(), ) .await .unwrap(); @@ -88,7 +90,7 @@ async fn execute_good_chain_on_parent() { } } -#[async_std::test] +#[tokio::test] async fn execute_bad_block_on_parent() { let parent_head = HeadData { number: 0, parent_hash: [0; 32], post_state: hash_state(0) }; @@ -108,12 +110,13 @@ async fn execute_bad_block_on_parent() { relay_parent_number: 1, relay_parent_storage_root: Default::default(), }, + Default::default(), ) .await .unwrap_err(); } -#[async_std::test] +#[tokio::test] async fn stress_spawn() { let host = std::sync::Arc::new(TestHost::new()); @@ -129,6 +132,7 @@ async fn stress_spawn() { relay_parent_number: 1, relay_parent_storage_root: Default::default(), }, + Default::default(), ) .await .unwrap(); diff --git a/node/core/pvf/tests/it/main.rs b/node/core/pvf/tests/it/main.rs index a6aaf5d369d4..c35a638ba43b 100644 --- a/node/core/pvf/tests/it/main.rs +++ b/node/core/pvf/tests/it/main.rs @@ -14,19 +14,23 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use async_std::sync::Mutex; +use assert_matches::assert_matches; use parity_scale_codec::Encode as _; use polkadot_node_core_pvf::{ - start, Config, InvalidCandidate, Metrics, Pvf, ValidationError, ValidationHost, + start, Config, InvalidCandidate, Metrics, PvfPrepData, ValidationError, ValidationHost, + JOB_TIMEOUT_WALL_CLOCK_FACTOR, }; use polkadot_parachain::primitives::{BlockData, ValidationParams, ValidationResult}; +use polkadot_primitives::vstaging::{ExecutorParam, ExecutorParams}; use std::time::Duration; +use tokio::sync::Mutex; mod adder; mod worker_common; const PUPPET_EXE: &str = env!("CARGO_BIN_EXE_puppet_worker"); const TEST_EXECUTION_TIMEOUT: Duration = Duration::from_secs(3); +const TEST_PREPARATION_TIMEOUT: Duration = Duration::from_secs(3); struct TestHost { _cache_dir: tempfile::TempDir, @@ -47,7 +51,7 @@ impl TestHost { let mut config = Config::new(cache_dir.path().to_owned(), program_path); f(&mut config); let (host, task) = start(config, Metrics::default()); - let _ = async_std::task::spawn(task); + let _ = tokio::task::spawn(task); Self { _cache_dir: cache_dir, host: Mutex::new(host) } } @@ -55,6 +59,7 @@ impl TestHost { &self, code: &[u8], params: ValidationParams, + executor_params: ExecutorParams, ) -> Result { let (result_tx, result_rx) = futures::channel::oneshot::channel(); @@ -65,7 +70,7 @@ impl TestHost { .lock() .await .execute_pvf( - Pvf::from_code(code.into()), + PvfPrepData::from_code(code.into(), executor_params, TEST_PREPARATION_TIMEOUT), TEST_EXECUTION_TIMEOUT, params.encode(), polkadot_node_core_pvf::Priority::Normal, @@ -77,10 +82,11 @@ impl TestHost { } } -#[async_std::test] +#[tokio::test] async fn terminates_on_timeout() { let host = TestHost::new(); + let start = std::time::Instant::now(); let result = host .validate_candidate( halt::wasm_binary_unwrap(), @@ -90,6 +96,7 @@ async fn terminates_on_timeout() { relay_parent_number: 1, relay_parent_storage_root: Default::default(), }, + Default::default(), ) .await; @@ -97,10 +104,14 @@ async fn terminates_on_timeout() { Err(ValidationError::InvalidCandidate(InvalidCandidate::HardTimeout)) => {}, r => panic!("{:?}", r), } + + let duration = std::time::Instant::now().duration_since(start); + assert!(duration >= TEST_EXECUTION_TIMEOUT); + assert!(duration < TEST_EXECUTION_TIMEOUT * JOB_TIMEOUT_WALL_CLOCK_FACTOR); } -#[async_std::test] -async fn parallel_execution() { +#[tokio::test] +async fn ensure_parallel_execution() { // Run some jobs that do not complete, thus timing out. let host = TestHost::new(); let execute_pvf_future_1 = host.validate_candidate( @@ -111,6 +122,7 @@ async fn parallel_execution() { relay_parent_number: 1, relay_parent_storage_root: Default::default(), }, + Default::default(), ); let execute_pvf_future_2 = host.validate_candidate( halt::wasm_binary_unwrap(), @@ -120,10 +132,18 @@ async fn parallel_execution() { relay_parent_number: 1, relay_parent_storage_root: Default::default(), }, + Default::default(), ); let start = std::time::Instant::now(); - let (_, _) = futures::join!(execute_pvf_future_1, execute_pvf_future_2); + let (res1, res2) = futures::join!(execute_pvf_future_1, execute_pvf_future_2); + assert_matches!( + (res1, res2), + ( + Err(ValidationError::InvalidCandidate(InvalidCandidate::HardTimeout)), + Err(ValidationError::InvalidCandidate(InvalidCandidate::HardTimeout)) + ) + ); // Total time should be < 2 x TEST_EXECUTION_TIMEOUT (two workers run in parallel). let duration = std::time::Instant::now().duration_since(start); @@ -136,7 +156,7 @@ async fn parallel_execution() { ); } -#[async_std::test] +#[tokio::test] async fn execute_queue_doesnt_stall_if_workers_died() { let host = TestHost::new_with_config(|cfg| { cfg.execute_workers_max_num = 5; @@ -155,6 +175,7 @@ async fn execute_queue_doesnt_stall_if_workers_died() { relay_parent_number: 1, relay_parent_storage_root: Default::default(), }, + Default::default(), ) })) .await; @@ -170,3 +191,52 @@ async fn execute_queue_doesnt_stall_if_workers_died() { max_duration.as_millis() ); } + +#[tokio::test] +async fn execute_queue_doesnt_stall_with_varying_executor_params() { + let host = TestHost::new_with_config(|cfg| { + cfg.execute_workers_max_num = 2; + }); + + let executor_params_1 = ExecutorParams::default(); + let executor_params_2 = ExecutorParams::from(&[ExecutorParam::StackLogicalMax(1024)][..]); + + // Here we spawn 6 validation jobs for the `halt` PVF and share those between 2 workers. Every + // 3rd job will have different set of executor parameters. All the workers should be killed + // and in this case the queue should respawn new workers with needed executor environment + // without waiting. The jobs will be executed in 3 batches, each running two jobs in parallel, + // and execution time would be roughly 3 * TEST_EXECUTION_TIMEOUT + let start = std::time::Instant::now(); + futures::future::join_all((0u8..6).map(|i| { + host.validate_candidate( + halt::wasm_binary_unwrap(), + ValidationParams { + block_data: BlockData(Vec::new()), + parent_head: Default::default(), + relay_parent_number: 1, + relay_parent_storage_root: Default::default(), + }, + match i % 3 { + 0 => executor_params_1.clone(), + _ => executor_params_2.clone(), + }, + ) + })) + .await; + + let duration = std::time::Instant::now().duration_since(start); + let min_duration = 3 * TEST_EXECUTION_TIMEOUT; + let max_duration = 4 * TEST_EXECUTION_TIMEOUT; + assert!( + duration >= min_duration, + "Expected duration {}ms to be greater than or equal to {}ms", + duration.as_millis(), + min_duration.as_millis() + ); + assert!( + duration <= max_duration, + "Expected duration {}ms to be less than or equal to {}ms", + duration.as_millis(), + max_duration.as_millis() + ); +} diff --git a/node/core/pvf/tests/it/worker_common.rs b/node/core/pvf/tests/it/worker_common.rs index 464b80a9fe58..7e00d005df19 100644 --- a/node/core/pvf/tests/it/worker_common.rs +++ b/node/core/pvf/tests/it/worker_common.rs @@ -18,7 +18,7 @@ use crate::PUPPET_EXE; use polkadot_node_core_pvf::testing::worker_common::{spawn_with_program_path, SpawnErr}; use std::time::Duration; -#[async_std::test] +#[tokio::test] async fn spawn_timeout() { let result = spawn_with_program_path("integration-test", PUPPET_EXE, &["sleep"], Duration::from_secs(2)) @@ -26,7 +26,7 @@ async fn spawn_timeout() { assert!(matches!(result, Err(SpawnErr::AcceptTimeout))); } -#[async_std::test] +#[tokio::test] async fn should_connect() { let _ = spawn_with_program_path( "integration-test", diff --git a/node/core/runtime-api/Cargo.toml b/node/core/runtime-api/Cargo.toml index 569e36a10950..8d636774aa06 100644 --- a/node/core/runtime-api/Cargo.toml +++ b/node/core/runtime-api/Cargo.toml @@ -7,20 +7,20 @@ edition.workspace = true [dependencies] futures = "0.3.21" gum = { package = "tracing-gum", path = "../../gum" } -lru = "0.8" +lru = "0.9" -sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } polkadot-primitives = { path = "../../../primitives" } +polkadot-node-metrics = { path = "../../metrics" } polkadot-node-subsystem = { path = "../../subsystem" } polkadot-node-subsystem-types = { path = "../../subsystem-types" } -polkadot-node-subsystem-util = { path = "../../subsystem-util" } [dev-dependencies] -sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } futures = { version = "0.3.21", features = ["thread-pool"] } polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } polkadot-node-primitives = { path = "../../primitives" } diff --git a/node/core/runtime-api/src/cache.rs b/node/core/runtime-api/src/cache.rs index d202b46d0da3..82d2e0dbc8b3 100644 --- a/node/core/runtime-api/src/cache.rs +++ b/node/core/runtime-api/src/cache.rs @@ -19,12 +19,13 @@ use std::{collections::btree_map::BTreeMap, num::NonZeroUsize}; use lru::LruCache; use sp_consensus_babe::Epoch; -use polkadot_primitives::v2::{ - AuthorityDiscoveryId, BlockNumber, CandidateCommitments, CandidateEvent, CandidateHash, - CommittedCandidateReceipt, CoreState, DisputeState, GroupRotationInfo, Hash, Id as ParaId, - InboundDownwardMessage, InboundHrmpMessage, OccupiedCoreAssumption, PersistedValidationData, - PvfCheckStatement, ScrapedOnChainVotes, SessionIndex, SessionInfo, ValidationCode, - ValidationCodeHash, ValidatorId, ValidatorIndex, ValidatorSignature, +use polkadot_primitives::{ + vstaging::ExecutorParams, AuthorityDiscoveryId, BlockNumber, CandidateCommitments, + CandidateEvent, CandidateHash, CommittedCandidateReceipt, CoreState, DisputeState, + GroupRotationInfo, Hash, Id as ParaId, InboundDownwardMessage, InboundHrmpMessage, + OccupiedCoreAssumption, PersistedValidationData, PvfCheckStatement, ScrapedOnChainVotes, + SessionIndex, SessionInfo, ValidationCode, ValidationCodeHash, ValidatorId, ValidatorIndex, + ValidatorSignature, }; /// For consistency we have the same capacity for all caches. We use 128 as we'll only need that @@ -51,6 +52,7 @@ pub(crate) struct RequestResultCache { validation_code_by_hash: LruCache>, candidate_pending_availability: LruCache<(Hash, ParaId), Option>, candidate_events: LruCache>, + session_executor_params: LruCache>, session_info: LruCache, dmq_contents: LruCache<(Hash, ParaId), Vec>>, inbound_hrmp_channels_contents: @@ -79,6 +81,7 @@ impl Default for RequestResultCache { validation_code_by_hash: LruCache::new(DEFAULT_CACHE_CAP), candidate_pending_availability: LruCache::new(DEFAULT_CACHE_CAP), candidate_events: LruCache::new(DEFAULT_CACHE_CAP), + session_executor_params: LruCache::new(DEFAULT_CACHE_CAP), session_info: LruCache::new(DEFAULT_CACHE_CAP), dmq_contents: LruCache::new(DEFAULT_CACHE_CAP), inbound_hrmp_channels_contents: LruCache::new(DEFAULT_CACHE_CAP), @@ -263,6 +266,21 @@ impl RequestResultCache { self.session_info.put(key, value); } + pub(crate) fn session_executor_params( + &mut self, + session_index: SessionIndex, + ) -> Option<&Option> { + self.session_executor_params.get(&session_index) + } + + pub(crate) fn cache_session_executor_params( + &mut self, + session_index: SessionIndex, + value: Option, + ) { + self.session_executor_params.put(session_index, value); + } + pub(crate) fn dmq_contents( &mut self, key: (Hash, ParaId), @@ -389,6 +407,7 @@ pub(crate) enum RequestResult { ValidationCodeByHash(Hash, ValidationCodeHash, Option), CandidatePendingAvailability(Hash, ParaId, Option), CandidateEvents(Hash, Vec), + SessionExecutorParams(Hash, SessionIndex, Option), SessionInfo(Hash, SessionIndex, Option), DmqContents(Hash, ParaId, Vec>), InboundHrmpChannelsContents( diff --git a/node/core/runtime-api/src/lib.rs b/node/core/runtime-api/src/lib.rs index de42ace3af0c..8ea9d1509bf0 100644 --- a/node/core/runtime-api/src/lib.rs +++ b/node/core/runtime-api/src/lib.rs @@ -28,7 +28,7 @@ use polkadot_node_subsystem::{ overseer, FromOrchestra, OverseerSignal, SpawnedSubsystem, SubsystemError, SubsystemResult, }; use polkadot_node_subsystem_types::RuntimeApiSubsystemClient; -use polkadot_primitives::v2::Hash; +use polkadot_primitives::Hash; use cache::{RequestResult, RequestResultCache}; use futures::{channel::oneshot, prelude::*, select, stream::FuturesUnordered}; @@ -132,6 +132,8 @@ where .cache_candidate_pending_availability((relay_parent, para_id), candidate), CandidateEvents(relay_parent, events) => self.requests_cache.cache_candidate_events(relay_parent, events), + SessionExecutorParams(_relay_parent, session_index, index) => + self.requests_cache.cache_session_executor_params(session_index, index), SessionInfo(_relay_parent, session_index, info) => if let Some(info) = info { self.requests_cache.cache_session_info(session_index, info); @@ -229,6 +231,17 @@ where .map(|sender| Request::CandidatePendingAvailability(para, sender)), Request::CandidateEvents(sender) => query!(candidate_events(), sender).map(|sender| Request::CandidateEvents(sender)), + Request::SessionExecutorParams(session_index, sender) => { + if let Some(executor_params) = + self.requests_cache.session_executor_params(session_index) + { + self.metrics.on_cached_request(); + let _ = sender.send(Ok(executor_params.clone())); + None + } else { + Some(Request::SessionExecutorParams(session_index, sender)) + } + }, Request::SessionInfo(index, sender) => { if let Some(info) = self.requests_cache.session_info(index) { self.metrics.on_cached_request(); @@ -447,39 +460,14 @@ where ), Request::CandidateEvents(sender) => query!(CandidateEvents, candidate_events(), ver = 1, sender), - Request::SessionInfo(index, sender) => { - let api_version = client - .api_version_parachain_host(relay_parent) - .await - .unwrap_or_default() - .unwrap_or_default(); - - let res = if api_version >= 2 { - let res = client.session_info(relay_parent, index).await.map_err(|e| { - RuntimeApiError::Execution { - runtime_api_name: "SessionInfo", - source: std::sync::Arc::new(e), - } - }); - metrics.on_request(res.is_ok()); - res - } else { - #[allow(deprecated)] - let res = client.session_info_before_version_2(relay_parent, index).await.map_err(|e| { - RuntimeApiError::Execution { - runtime_api_name: "SessionInfo", - source: std::sync::Arc::new(e), - } - }); - metrics.on_request(res.is_ok()); - - res.map(|r| r.map(|old| old.into())) - }; - - let _ = sender.send(res.clone()); - - res.ok().map(|res| RequestResult::SessionInfo(relay_parent, index, res)) - }, + Request::SessionInfo(index, sender) => + query!(SessionInfo, session_info(index), ver = 2, sender), + Request::SessionExecutorParams(session_index, sender) => query!( + SessionExecutorParams, + session_executor_params(session_index), + ver = Request::EXECUTOR_PARAMS_RUNTIME_REQUIREMENT, + sender + ), Request::DmqContents(id, sender) => query!(DmqContents, dmq_contents(id), ver = 1, sender), Request::InboundHrmpChannelsContents(id, sender) => query!(InboundHrmpChannelsContents, inbound_hrmp_channels_contents(id), ver = 1, sender), diff --git a/node/core/runtime-api/src/metrics.rs b/node/core/runtime-api/src/metrics.rs index c6affaf38914..d9459d1ad57b 100644 --- a/node/core/runtime-api/src/metrics.rs +++ b/node/core/runtime-api/src/metrics.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use polkadot_node_subsystem_util::metrics::{self, prometheus}; +use polkadot_node_metrics::metrics::{self, prometheus}; #[derive(Clone)] pub(crate) struct MetricsInner { diff --git a/node/core/runtime-api/src/tests.rs b/node/core/runtime-api/src/tests.rs index 81629d5b2754..f1cf1c7f4692 100644 --- a/node/core/runtime-api/src/tests.rs +++ b/node/core/runtime-api/src/tests.rs @@ -21,14 +21,11 @@ use polkadot_node_primitives::{BabeAllowedSlots, BabeEpoch, BabeEpochConfigurati use polkadot_node_subsystem::SpawnGlue; use polkadot_node_subsystem_test_helpers::make_subsystem_context; use polkadot_primitives::{ - runtime_api::ParachainHost, - v2::{ - AuthorityDiscoveryId, Block, CandidateEvent, CommittedCandidateReceipt, CoreState, - GroupRotationInfo, Id as ParaId, InboundDownwardMessage, InboundHrmpMessage, - OccupiedCoreAssumption, PersistedValidationData, PvfCheckStatement, ScrapedOnChainVotes, - SessionIndex, SessionInfo, ValidationCode, ValidationCodeHash, ValidatorId, ValidatorIndex, - ValidatorSignature, - }, + runtime_api::ParachainHost, AuthorityDiscoveryId, Block, CandidateEvent, + CommittedCandidateReceipt, CoreState, GroupRotationInfo, Id as ParaId, InboundDownwardMessage, + InboundHrmpMessage, OccupiedCoreAssumption, PersistedValidationData, PvfCheckStatement, + ScrapedOnChainVotes, SessionIndex, SessionInfo, ValidationCode, ValidationCodeHash, + ValidatorId, ValidatorIndex, ValidatorSignature, }; use sp_api::ProvideRuntimeApi; use sp_authority_discovery::AuthorityDiscoveryApi; @@ -115,7 +112,7 @@ sp_api::mock_impl_runtime_apis! { fn check_validation_outputs( &self, para_id: ParaId, - _commitments: polkadot_primitives::v2::CandidateCommitments, + _commitments: polkadot_primitives::CandidateCommitments, ) -> bool { self.validation_outputs_results .get(¶_id) @@ -223,7 +220,7 @@ sp_api::mock_impl_runtime_apis! { } fn submit_report_equivocation_unsigned_extrinsic( - _equivocation_proof: sp_consensus_babe::EquivocationProof, + _equivocation_proof: sp_consensus_babe::EquivocationProof, _key_owner_proof: sp_consensus_babe::OpaqueKeyOwnershipProof, ) -> Option<()> { None @@ -452,7 +449,7 @@ fn requests_check_validation_outputs() { let relay_parent = [1; 32].into(); let para_a = ParaId::from(5_u32); let para_b = ParaId::from(6_u32); - let commitments = polkadot_primitives::v2::CandidateCommitments::default(); + let commitments = polkadot_primitives::CandidateCommitments::default(); let spawner = sp_core::testing::TaskExecutor::new(); runtime_api.validation_outputs_results.insert(para_a, false); diff --git a/node/gum/src/lib.rs b/node/gum/src/lib.rs index 261f1037de7f..9cc6e9ff6620 100644 --- a/node/gum/src/lib.rs +++ b/node/gum/src/lib.rs @@ -27,7 +27,7 @@ pub use tracing::{enabled, event, Level}; pub use jaeger::hash_to_trace_identifier; #[doc(hidden)] -pub use polkadot_primitives::v2::{CandidateHash, Hash}; +pub use polkadot_primitives::{CandidateHash, Hash}; pub use gum_proc_macro::{debug, error, info, trace, warn}; diff --git a/node/gum/src/tests.rs b/node/gum/src/tests.rs index c4077c7615c7..8ca7e3124bdc 100644 --- a/node/gum/src/tests.rs +++ b/node/gum/src/tests.rs @@ -15,7 +15,7 @@ // along with Polkadot. If not, see . use super::*; -pub use polkadot_primitives::v2::{CandidateHash, Hash}; +pub use polkadot_primitives::{CandidateHash, Hash}; #[derive(Default, Debug)] struct Y { diff --git a/node/jaeger/Cargo.toml b/node/jaeger/Cargo.toml index ae8f10363277..3b7384d19b99 100644 --- a/node/jaeger/Cargo.toml +++ b/node/jaeger/Cargo.toml @@ -11,9 +11,9 @@ lazy_static = "1.4" parking_lot = "0.12.0" polkadot-primitives = { path = "../../primitives" } polkadot-node-primitives = { path = "../primitives" } -sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } thiserror = "1.0.31" -tokio = "1.22.0" +tokio = "1.24.2" log = "0.4.17" -parity-scale-codec = { version = "3.1.5", default-features = false } +parity-scale-codec = { version = "3.3.0", default-features = false } diff --git a/node/jaeger/src/spans.rs b/node/jaeger/src/spans.rs index 56902571b88c..de85867d169f 100644 --- a/node/jaeger/src/spans.rs +++ b/node/jaeger/src/spans.rs @@ -17,7 +17,7 @@ //! Polkadot Jaeger span definitions. //! //! ```rust -//! # use polkadot_primitives::v2::{CandidateHash, Hash}; +//! # use polkadot_primitives::{CandidateHash, Hash}; //! # fn main() { //! use polkadot_node_jaeger as jaeger; //! @@ -51,7 +51,7 @@ //! over the course of a function, for this purpose use the non-consuming //! `fn` variants, i.e. //! ```rust -//! # use polkadot_primitives::v2::{CandidateHash, Hash}; +//! # use polkadot_primitives::{CandidateHash, Hash}; //! # fn main() { //! # use polkadot_node_jaeger as jaeger; //! @@ -85,9 +85,7 @@ use parity_scale_codec::Encode; use polkadot_node_primitives::PoV; -use polkadot_primitives::v2::{ - BlakeTwo256, CandidateHash, Hash, HashT, Id as ParaId, ValidatorIndex, -}; +use polkadot_primitives::{BlakeTwo256, CandidateHash, Hash, HashT, Id as ParaId, ValidatorIndex}; use sc_network::PeerId; use std::{fmt, sync::Arc}; diff --git a/node/malus/Cargo.toml b/node/malus/Cargo.toml index 2a27c613868f..9c23e8ce09f8 100644 --- a/node/malus/Cargo.toml +++ b/node/malus/Cargo.toml @@ -26,8 +26,8 @@ polkadot-node-core-pvf = { path = "../core/pvf" } color-eyre = { version = "0.6.1", default-features = false } assert_matches = "1.5" async-trait = "0.1.57" -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } clap = { version = "4.0.9", features = ["derive"] } futures = "0.3.21" futures-timer = "3.0.2" @@ -40,5 +40,5 @@ default = [] [dev-dependencies] polkadot-node-subsystem-test-helpers = { path = "../subsystem-test-helpers" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } futures = { version = "0.3.21", features = ["thread-pool"] } diff --git a/node/malus/integrationtests/0001-dispute-valid-block.toml b/node/malus/integrationtests/0001-dispute-valid-block.toml index 9a4917841d30..43e55402e68c 100644 --- a/node/malus/integrationtests/0001-dispute-valid-block.toml +++ b/node/malus/integrationtests/0001-dispute-valid-block.toml @@ -24,7 +24,7 @@ command = "polkadot" [[relaychain.nodes]] name = "dave" validator = true - command = "/usr/local/bin/malus dispute-ancestor" + command = "malus dispute-ancestor" extra_args = ["--dave", "-lparachain=debug"] image = "{{MALUS_IMAGE}}" autoConnectApi = false @@ -35,5 +35,5 @@ id = 100 [parachains.collator] name = "collator01" image = "{{COL_IMAGE}}" - command = "/usr/local/bin/adder-collator" + command = "adder-collator" args = ["-lparachain=debug"] diff --git a/node/malus/src/variants/common.rs b/node/malus/src/variants/common.rs index 610b43bc33a4..e491b1081281 100644 --- a/node/malus/src/variants/common.rs +++ b/node/malus/src/variants/common.rs @@ -28,7 +28,7 @@ use polkadot_node_subsystem::{ overseer, }; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ CandidateCommitments, CandidateDescriptor, CandidateReceipt, PersistedValidationData, }; @@ -62,8 +62,6 @@ pub enum FakeCandidateValidationError { ParamsTooLarge, /// Code size is over the limit. CodeTooLarge, - /// Code does not decompress correctly. - CodeDecompressionFailure, /// PoV does not decompress correctly. POVDecompressionFailure, /// Validation function returned invalid data. @@ -89,8 +87,6 @@ impl Into for FakeCandidateValidationError { FakeCandidateValidationError::Timeout => InvalidCandidate::Timeout, FakeCandidateValidationError::ParamsTooLarge => InvalidCandidate::ParamsTooLarge(666), FakeCandidateValidationError::CodeTooLarge => InvalidCandidate::CodeTooLarge(666), - FakeCandidateValidationError::CodeDecompressionFailure => - InvalidCandidate::CodeDecompressionFailure, FakeCandidateValidationError::POVDecompressionFailure => InvalidCandidate::PoVDecompressionFailure, FakeCandidateValidationError::BadReturn => InvalidCandidate::BadReturn, @@ -167,8 +163,8 @@ pub fn create_fake_candidate_commitments( persisted_validation_data: &PersistedValidationData, ) -> CandidateCommitments { CandidateCommitments { - upward_messages: Vec::new(), - horizontal_messages: Vec::new(), + upward_messages: Default::default(), + horizontal_messages: Default::default(), new_validation_code: None, head_data: persisted_validation_data.parent_head.clone(), processed_downward_messages: 0, diff --git a/node/malus/src/variants/suggest_garbage_candidate.rs b/node/malus/src/variants/suggest_garbage_candidate.rs index 86b0c49e7125..7e1a9246bc4f 100644 --- a/node/malus/src/variants/suggest_garbage_candidate.rs +++ b/node/malus/src/variants/suggest_garbage_candidate.rs @@ -33,7 +33,7 @@ use polkadot_cli::{ }; use polkadot_node_core_candidate_validation::find_validation_data; use polkadot_node_primitives::{AvailableData, BlockData, PoV}; -use polkadot_primitives::v2::CandidateDescriptor; +use polkadot_primitives::{CandidateDescriptor, CandidateReceipt}; use polkadot_node_subsystem_util::request_validators; use sp_core::traits::SpawnNamed; @@ -53,7 +53,6 @@ use crate::{ // Import extra types relevant to the particular // subsystem. use polkadot_node_subsystem::{messages::CandidateBackingMessage, SpawnGlue}; -use polkadot_primitives::v2::CandidateReceipt; use std::sync::Arc; @@ -166,11 +165,11 @@ where }; let (collator_id, collator_signature) = { - use polkadot_primitives::v2::CollatorPair; + use polkadot_primitives::CollatorPair; use sp_core::crypto::Pair; let collator_pair = CollatorPair::generate().0; - let signature_payload = polkadot_primitives::v2::collator_signature_payload( + let signature_payload = polkadot_primitives::collator_signature_payload( &relay_parent, &candidate.descriptor().para_id, &validation_data_hash, diff --git a/node/metrics/Cargo.toml b/node/metrics/Cargo.toml index e97da1e56fb4..18980a20581c 100644 --- a/node/metrics/Cargo.toml +++ b/node/metrics/Cargo.toml @@ -10,30 +10,29 @@ futures = "0.3.21" futures-timer = "3.0.2" gum = { package = "tracing-gum", path = "../gum" } -metered = { package = "prioritized-metered-channel", version = "0.2.0" } +metered = { package = "prioritized-metered-channel", version = "0.4.0" } # Both `sc-service` and `sc-cli` are required by runtime metrics `logger_hook()`. -sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } -substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -codec = { package = "parity-scale-codec", version = "3.0.0" } +substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +codec = { package = "parity-scale-codec", version = "3.3.0" } primitives = { package = "polkadot-primitives", path = "../../primitives/" } bs58 = { version = "0.4.0", features = ["alloc"] } log = "0.4.17" [dev-dependencies] assert_cmd = "2.0.4" -nix = "0.24.1" tempfile = "3.2.0" hyper = { version = "0.14.20", default-features = false, features = ["http1", "tcp"] } -tokio = "1.22.0" +tokio = "1.24.2" polkadot-test-service = { path = "../test/service", features=["runtime-metrics"]} -substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } prometheus-parse = {version = "0.2.2"} [features] diff --git a/node/metrics/src/runtime/mod.rs b/node/metrics/src/runtime/mod.rs index 2497d63703c8..9ea1b04ec3b2 100644 --- a/node/metrics/src/runtime/mod.rs +++ b/node/metrics/src/runtime/mod.rs @@ -24,7 +24,7 @@ #![cfg(feature = "runtime-metrics")] use codec::Decode; -use primitives::v2::{ +use primitives::{ metric_definitions::{CounterDefinition, CounterVecDefinition}, RuntimeMetricLabelValues, RuntimeMetricOp, RuntimeMetricUpdate, }; diff --git a/node/metrics/src/runtime/parachain.rs b/node/metrics/src/runtime/parachain.rs index d69a7fef97e3..b51fb49c16fc 100644 --- a/node/metrics/src/runtime/parachain.rs +++ b/node/metrics/src/runtime/parachain.rs @@ -18,7 +18,7 @@ //! All of the metrics have a correspondent runtime metric definition. use crate::runtime::RuntimeMetricsProvider; -use primitives::v2::metric_definitions::{ +use primitives::metric_definitions::{ PARACHAIN_CREATE_INHERENT_BITFIELDS_SIGNATURE_CHECKS, PARACHAIN_INHERENT_DATA_BITFIELDS_PROCESSED, PARACHAIN_INHERENT_DATA_CANDIDATES_PROCESSED, PARACHAIN_INHERENT_DATA_DISPUTE_SETS_INCLUDED, PARACHAIN_INHERENT_DATA_DISPUTE_SETS_PROCESSED, diff --git a/node/metrics/src/tests.rs b/node/metrics/src/tests.rs index 932cc7b68be7..23ebcef13788 100644 --- a/node/metrics/src/tests.rs +++ b/node/metrics/src/tests.rs @@ -18,7 +18,7 @@ use hyper::{Client, Uri}; use polkadot_test_service::{node_config, run_validator_node, test_prometheus_config}; -use primitives::v2::metric_definitions::PARACHAIN_INHERENT_DATA_BITFIELDS_PROCESSED; +use primitives::metric_definitions::PARACHAIN_INHERENT_DATA_BITFIELDS_PROCESSED; use sc_client_api::{execution_extensions::ExecutionStrategies, ExecutionStrategy}; use sp_keyring::AccountKeyring::*; use std::collections::HashMap; diff --git a/node/network/approval-distribution/Cargo.toml b/node/network/approval-distribution/Cargo.toml index c743f3b7dc36..558ead852a43 100644 --- a/node/network/approval-distribution/Cargo.toml +++ b/node/network/approval-distribution/Cargo.toml @@ -5,10 +5,10 @@ authors.workspace = true edition.workspace = true [dependencies] -polkadot-node-primitives = { path = "../../primitives" } +polkadot-node-metrics = { path = "../../metrics" } polkadot-node-network-protocol = { path = "../protocol" } +polkadot-node-primitives = { path = "../../primitives" } polkadot-node-subsystem = { path = "../../subsystem" } -polkadot-node-subsystem-util = { path = "../../subsystem-util" } polkadot-primitives = { path = "../../../primitives" } rand = "0.8" @@ -16,8 +16,8 @@ futures = "0.3.21" gum = { package = "tracing-gum", path = "../../gum" } [dev-dependencies] -sp-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", features = ["std"] , branch = "polkadot-v0.9.36" } +sp-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", features = ["std"] , branch = "polkadot-v0.9.40" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } diff --git a/node/network/approval-distribution/src/lib.rs b/node/network/approval-distribution/src/lib.rs index bf8a60fcefba..3c6ed8661e0e 100644 --- a/node/network/approval-distribution/src/lib.rs +++ b/node/network/approval-distribution/src/lib.rs @@ -37,7 +37,7 @@ use polkadot_node_subsystem::{ }, overseer, ActiveLeavesUpdate, FromOrchestra, OverseerSignal, SpawnedSubsystem, SubsystemError, }; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ BlockNumber, CandidateIndex, Hash, SessionIndex, ValidatorIndex, ValidatorSignature, }; use rand::{CryptoRng, Rng, SeedableRng}; diff --git a/node/network/approval-distribution/src/metrics.rs b/node/network/approval-distribution/src/metrics.rs index b14e54c57403..47bae7065a05 100644 --- a/node/network/approval-distribution/src/metrics.rs +++ b/node/network/approval-distribution/src/metrics.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use polkadot_node_subsystem_util::metrics::{prometheus, Metrics as MetricsTrait}; +use polkadot_node_metrics::metrics::{prometheus, Metrics as MetricsTrait}; /// Approval Distribution metrics. #[derive(Default, Clone)] diff --git a/node/network/approval-distribution/src/tests.rs b/node/network/approval-distribution/src/tests.rs index 567cf22f23f1..459b9d4899fb 100644 --- a/node/network/approval-distribution/src/tests.rs +++ b/node/network/approval-distribution/src/tests.rs @@ -29,7 +29,7 @@ use polkadot_node_primitives::approval::{ use polkadot_node_subsystem::messages::{network_bridge_event, AllMessages, ApprovalCheckError}; use polkadot_node_subsystem_test_helpers as test_helpers; use polkadot_node_subsystem_util::TimeoutExt as _; -use polkadot_primitives::v2::{AuthorityDiscoveryId, BlakeTwo256, HashT}; +use polkadot_primitives::{AuthorityDiscoveryId, BlakeTwo256, HashT}; use polkadot_primitives_test_helpers::dummy_signature; use rand::SeedableRng; use sp_authority_discovery::AuthorityPair as AuthorityDiscoveryPair; diff --git a/node/network/availability-distribution/Cargo.toml b/node/network/availability-distribution/Cargo.toml index a90290bb2ed9..c09eb12c3204 100644 --- a/node/network/availability-distribution/Cargo.toml +++ b/node/network/availability-distribution/Cargo.toml @@ -7,27 +7,27 @@ edition.workspace = true [dependencies] futures = "0.3.21" gum = { package = "tracing-gum", path = "../../gum" } -parity-scale-codec = { version = "3.1.5", features = ["std"] } +parity-scale-codec = { version = "3.3.0", features = ["std"] } polkadot-primitives = { path = "../../../primitives" } polkadot-erasure-coding = { path = "../../../erasure-coding" } polkadot-node-network-protocol = { path = "../../network/protocol" } polkadot-node-subsystem = { path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } polkadot-node-primitives = { path = "../../primitives" } -sp-core = { git = "https://github.com/paritytech/substrate", features = ["std"] , branch = "polkadot-v0.9.36" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", features = ["std"] , branch = "polkadot-v0.9.40" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } thiserror = "1.0.31" rand = "0.8.5" derive_more = "0.99.17" -lru = "0.8.0" +lru = "0.9.0" fatality = "0.0.6" [dev-dependencies] polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } -sp-core = { git = "https://github.com/paritytech/substrate", features = ["std"] , branch = "polkadot-v0.9.36" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", features = ["std"] , branch = "polkadot-v0.9.40" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } futures-timer = "3.0.2" assert_matches = "1.4.0" polkadot-primitives-test-helpers = { path = "../../../primitives/test-helpers" } diff --git a/node/network/availability-distribution/src/error.rs b/node/network/availability-distribution/src/error.rs index 13c126360a6d..f4fe86a58732 100644 --- a/node/network/availability-distribution/src/error.rs +++ b/node/network/availability-distribution/src/error.rs @@ -19,7 +19,7 @@ use fatality::Nested; use polkadot_node_network_protocol::request_response::outgoing::RequestError; -use polkadot_primitives::v2::SessionIndex; +use polkadot_primitives::SessionIndex; use futures::channel::oneshot; diff --git a/node/network/availability-distribution/src/pov_requester/mod.rs b/node/network/availability-distribution/src/pov_requester/mod.rs index f32a4bd4821d..2d9f53e63f5f 100644 --- a/node/network/availability-distribution/src/pov_requester/mod.rs +++ b/node/network/availability-distribution/src/pov_requester/mod.rs @@ -30,7 +30,7 @@ use polkadot_node_subsystem::{ overseer, }; use polkadot_node_subsystem_util::runtime::RuntimeInfo; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ AuthorityDiscoveryId, CandidateHash, Hash, Id as ParaId, ValidatorIndex, }; @@ -141,7 +141,7 @@ mod tests { AllMessages, AvailabilityDistributionMessage, RuntimeApiMessage, RuntimeApiRequest, }; use polkadot_node_subsystem_test_helpers as test_helpers; - use polkadot_primitives::v2::{CandidateHash, Hash, ValidatorIndex}; + use polkadot_primitives::{CandidateHash, Hash, ValidatorIndex}; use test_helpers::mock::make_ferdie_keystore; use super::*; diff --git a/node/network/availability-distribution/src/requester/fetch_task/mod.rs b/node/network/availability-distribution/src/requester/fetch_task/mod.rs index 89b634a5ce7e..09e12aece47f 100644 --- a/node/network/availability-distribution/src/requester/fetch_task/mod.rs +++ b/node/network/availability-distribution/src/requester/fetch_task/mod.rs @@ -33,7 +33,7 @@ use polkadot_node_subsystem::{ messages::{AvailabilityStoreMessage, IfDisconnected, NetworkBridgeTxMessage}, overseer, }; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ AuthorityDiscoveryId, BlakeTwo256, CandidateHash, GroupIndex, Hash, HashT, OccupiedCore, SessionIndex, }; @@ -326,6 +326,17 @@ impl RunningTask { &mut self, validator: &AuthorityDiscoveryId, ) -> std::result::Result { + gum::trace!( + target: LOG_TARGET, + origin = ?validator, + relay_parent = ?self.relay_parent, + group_index = ?self.group_index, + session_index = ?self.session_index, + chunk_index = ?self.request.index, + candidate_hash = ?self.request.candidate_hash, + "Starting chunk request", + ); + let (full_request, response_recv) = OutgoingRequest::new(Recipient::Authority(validator.clone()), self.request); let requests = Requests::ChunkFetchingV1(full_request); @@ -346,13 +357,13 @@ impl RunningTask { Err(RequestError::InvalidResponse(err)) => { gum::warn!( target: LOG_TARGET, - origin= ?validator, + origin = ?validator, relay_parent = ?self.relay_parent, group_index = ?self.group_index, session_index = ?self.session_index, chunk_index = ?self.request.index, candidate_hash = ?self.request.candidate_hash, - err= ?err, + err = ?err, "Peer sent us invalid erasure chunk data" ); Err(TaskError::PeerError) @@ -360,13 +371,13 @@ impl RunningTask { Err(RequestError::NetworkError(err)) => { gum::debug!( target: LOG_TARGET, - origin= ?validator, + origin = ?validator, relay_parent = ?self.relay_parent, group_index = ?self.group_index, session_index = ?self.session_index, chunk_index = ?self.request.index, candidate_hash = ?self.request.candidate_hash, - err= ?err, + err = ?err, "Some network error occurred when fetching erasure chunk" ); Err(TaskError::PeerError) @@ -374,7 +385,7 @@ impl RunningTask { Err(RequestError::Canceled(oneshot::Canceled)) => { gum::debug!( target: LOG_TARGET, - origin= ?validator, + origin = ?validator, relay_parent = ?self.relay_parent, group_index = ?self.group_index, session_index = ?self.session_index, diff --git a/node/network/availability-distribution/src/requester/fetch_task/tests.rs b/node/network/availability-distribution/src/requester/fetch_task/tests.rs index 7bc91c0a4d12..2f271ebcf361 100644 --- a/node/network/availability-distribution/src/requester/fetch_task/tests.rs +++ b/node/network/availability-distribution/src/requester/fetch_task/tests.rs @@ -31,7 +31,7 @@ use sp_keyring::Sr25519Keyring; use polkadot_node_network_protocol::request_response::{v1, Recipient}; use polkadot_node_primitives::{BlockData, PoV, Proof}; use polkadot_node_subsystem::messages::AllMessages; -use polkadot_primitives::v2::{CandidateHash, ValidatorIndex}; +use polkadot_primitives::{CandidateHash, ValidatorIndex}; use super::*; use crate::{metrics::Metrics, tests::mock::get_valid_chunk_data}; diff --git a/node/network/availability-distribution/src/requester/mod.rs b/node/network/availability-distribution/src/requester/mod.rs index 105efd2f8948..088937b6e995 100644 --- a/node/network/availability-distribution/src/requester/mod.rs +++ b/node/network/availability-distribution/src/requester/mod.rs @@ -37,7 +37,7 @@ use polkadot_node_subsystem::{ overseer, ActivatedLeaf, ActiveLeavesUpdate, LeafStatus, }; use polkadot_node_subsystem_util::runtime::{get_occupied_cores, RuntimeInfo}; -use polkadot_primitives::v2::{CandidateHash, Hash, OccupiedCore, SessionIndex}; +use polkadot_primitives::{CandidateHash, Hash, OccupiedCore, SessionIndex}; use super::{FatalError, Metrics, Result, LOG_TARGET}; diff --git a/node/network/availability-distribution/src/requester/session_cache.rs b/node/network/availability-distribution/src/requester/session_cache.rs index cf01e448b70b..836634fea332 100644 --- a/node/network/availability-distribution/src/requester/session_cache.rs +++ b/node/network/availability-distribution/src/requester/session_cache.rs @@ -21,9 +21,7 @@ use rand::{seq::SliceRandom, thread_rng}; use polkadot_node_subsystem::overseer; use polkadot_node_subsystem_util::runtime::RuntimeInfo; -use polkadot_primitives::v2::{ - AuthorityDiscoveryId, GroupIndex, Hash, SessionIndex, ValidatorIndex, -}; +use polkadot_primitives::{AuthorityDiscoveryId, GroupIndex, Hash, SessionIndex, ValidatorIndex}; use crate::{ error::{Error, Result}, diff --git a/node/network/availability-distribution/src/requester/tests.rs b/node/network/availability-distribution/src/requester/tests.rs index bd39e7748ca8..59db97176a76 100644 --- a/node/network/availability-distribution/src/requester/tests.rs +++ b/node/network/availability-distribution/src/requester/tests.rs @@ -21,7 +21,7 @@ use futures::FutureExt; use polkadot_node_network_protocol::jaeger; use polkadot_node_primitives::{BlockData, ErasureChunk, PoV}; use polkadot_node_subsystem_util::runtime::RuntimeInfo; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ BlockNumber, CoreState, GroupIndex, Hash, Id as ParaId, ScheduledCore, SessionIndex, SessionInfo, }; diff --git a/node/network/availability-distribution/src/responder.rs b/node/network/availability-distribution/src/responder.rs index 53c363823f72..daf0c3175bf3 100644 --- a/node/network/availability-distribution/src/responder.rs +++ b/node/network/availability-distribution/src/responder.rs @@ -27,7 +27,7 @@ use polkadot_node_network_protocol::{ }; use polkadot_node_primitives::{AvailableData, ErasureChunk}; use polkadot_node_subsystem::{jaeger, messages::AvailabilityStoreMessage, SubsystemSender}; -use polkadot_primitives::v2::{CandidateHash, ValidatorIndex}; +use polkadot_primitives::{CandidateHash, ValidatorIndex}; use crate::{ error::{JfyiError, Result}, diff --git a/node/network/availability-distribution/src/tests/mock.rs b/node/network/availability-distribution/src/tests/mock.rs index 15ea1ab1bc53..bbceea0701af 100644 --- a/node/network/availability-distribution/src/tests/mock.rs +++ b/node/network/availability-distribution/src/tests/mock.rs @@ -22,7 +22,7 @@ use sp_keyring::Sr25519Keyring; use polkadot_erasure_coding::{branches, obtain_chunks_v1 as obtain_chunks}; use polkadot_node_primitives::{AvailableData, BlockData, ErasureChunk, PoV, Proof}; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ CandidateCommitments, CandidateDescriptor, CandidateHash, CommittedCandidateReceipt, GroupIndex, Hash, HeadData, Id as ParaId, IndexedVec, OccupiedCore, PersistedValidationData, SessionInfo, ValidatorIndex, diff --git a/node/network/availability-distribution/src/tests/mod.rs b/node/network/availability-distribution/src/tests/mod.rs index ebbc436a00dd..39f8287e840a 100644 --- a/node/network/availability-distribution/src/tests/mod.rs +++ b/node/network/availability-distribution/src/tests/mod.rs @@ -19,7 +19,7 @@ use std::collections::HashSet; use futures::{executor, future, Future}; use polkadot_node_network_protocol::request_response::{IncomingRequest, ReqProtocolNames}; -use polkadot_primitives::v2::{CoreState, Hash}; +use polkadot_primitives::{CoreState, Hash}; use sp_keystore::SyncCryptoStorePtr; use polkadot_node_subsystem_test_helpers as test_helpers; diff --git a/node/network/availability-distribution/src/tests/state.rs b/node/network/availability-distribution/src/tests/state.rs index be77aa2d023c..6dc035d4849d 100644 --- a/node/network/availability-distribution/src/tests/state.rs +++ b/node/network/availability-distribution/src/tests/state.rs @@ -47,7 +47,7 @@ use polkadot_node_subsystem::{ ActivatedLeaf, ActiveLeavesUpdate, FromOrchestra, LeafStatus, OverseerSignal, }; use polkadot_node_subsystem_test_helpers as test_helpers; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ CandidateHash, CoreState, GroupIndex, Hash, Id as ParaId, ScheduledCore, SessionInfo, ValidatorIndex, }; diff --git a/node/network/availability-recovery/Cargo.toml b/node/network/availability-recovery/Cargo.toml index fde5fba875e5..a553b688ea57 100644 --- a/node/network/availability-recovery/Cargo.toml +++ b/node/network/availability-recovery/Cargo.toml @@ -6,7 +6,7 @@ edition.workspace = true [dependencies] futures = "0.3.21" -lru = "0.8.0" +lru = "0.9.0" rand = "0.8.5" fatality = "0.0.6" thiserror = "1.0.31" @@ -18,8 +18,8 @@ polkadot-node-primitives = { path = "../../primitives" } polkadot-node-subsystem = {path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } polkadot-node-network-protocol = { path = "../../network/protocol" } -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["derive"] } -sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["derive"] } +sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } [dev-dependencies] assert_matches = "1.4.0" @@ -27,10 +27,10 @@ env_logger = "0.9.0" futures-timer = "3.0.2" log = "0.4.17" -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } polkadot-primitives-test-helpers = { path = "../../../primitives/test-helpers" } diff --git a/node/network/availability-recovery/src/lib.rs b/node/network/availability-recovery/src/lib.rs index 38acfbe88ff9..a504021def59 100644 --- a/node/network/availability-recovery/src/lib.rs +++ b/node/network/availability-recovery/src/lib.rs @@ -56,7 +56,7 @@ use polkadot_node_subsystem::{ SubsystemResult, }; use polkadot_node_subsystem_util::request_session_info; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ AuthorityDiscoveryId, BlakeTwo256, BlockNumber, CandidateHash, CandidateReceipt, GroupIndex, Hash, HashT, IndexedVec, SessionIndex, SessionInfo, ValidatorId, ValidatorIndex, }; diff --git a/node/network/availability-recovery/src/tests.rs b/node/network/availability-recovery/src/tests.rs index c77278f645c1..0f25b502b6cd 100644 --- a/node/network/availability-recovery/src/tests.rs +++ b/node/network/availability-recovery/src/tests.rs @@ -36,7 +36,7 @@ use polkadot_node_subsystem::{ }; use polkadot_node_subsystem_test_helpers::{make_subsystem_context, TestSubsystemContextHandle}; use polkadot_node_subsystem_util::TimeoutExt; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ AuthorityDiscoveryId, Hash, HeadData, IndexedVec, PersistedValidationData, ValidatorId, }; use polkadot_primitives_test_helpers::{dummy_candidate_receipt, dummy_hash}; diff --git a/node/network/bitfield-distribution/Cargo.toml b/node/network/bitfield-distribution/Cargo.toml index 4e5377a1950f..a1ff7e1bfef7 100644 --- a/node/network/bitfield-distribution/Cargo.toml +++ b/node/network/bitfield-distribution/Cargo.toml @@ -16,11 +16,11 @@ rand = "0.8" [dev-dependencies] polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } bitvec = { version = "1.0.0", default-features = false, features = ["alloc"] } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } maplit = "1.0.2" log = "0.4.17" env_logger = "0.9.0" diff --git a/node/network/bitfield-distribution/src/lib.rs b/node/network/bitfield-distribution/src/lib.rs index 1bd9230a3787..63a9c4ccf091 100644 --- a/node/network/bitfield-distribution/src/lib.rs +++ b/node/network/bitfield-distribution/src/lib.rs @@ -37,7 +37,7 @@ use polkadot_node_subsystem::{ }; use polkadot_node_subsystem_util::{self as util}; -use polkadot_primitives::v2::{Hash, SignedAvailabilityBitfield, SigningContext, ValidatorId}; +use polkadot_primitives::{Hash, SignedAvailabilityBitfield, SigningContext, ValidatorId}; use rand::{CryptoRng, Rng, SeedableRng}; use std::collections::{HashMap, HashSet}; diff --git a/node/network/bitfield-distribution/src/tests.rs b/node/network/bitfield-distribution/src/tests.rs index 5eb610fe8508..67acc5a65592 100644 --- a/node/network/bitfield-distribution/src/tests.rs +++ b/node/network/bitfield-distribution/src/tests.rs @@ -31,7 +31,7 @@ use polkadot_node_subsystem::{ }; use polkadot_node_subsystem_test_helpers::make_subsystem_context; use polkadot_node_subsystem_util::TimeoutExt; -use polkadot_primitives::v2::{AvailabilityBitfield, Signed, ValidatorIndex}; +use polkadot_primitives::{AvailabilityBitfield, Signed, ValidatorIndex}; use rand_chacha::ChaCha12Rng; use sp_application_crypto::AppKey; use sp_authority_discovery::AuthorityPair as AuthorityDiscoveryPair; diff --git a/node/network/bridge/Cargo.toml b/node/network/bridge/Cargo.toml index 9627026b5d4e..a1a89a8d39c7 100644 --- a/node/network/bridge/Cargo.toml +++ b/node/network/bridge/Cargo.toml @@ -10,14 +10,13 @@ async-trait = "0.1.57" futures = "0.3.21" gum = { package = "tracing-gum", path = "../../gum" } polkadot-primitives = { path = "../../../primitives" } -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["derive"] } -sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-network-common = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["derive"] } +sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +polkadot-node-metrics = { path = "../../metrics"} +polkadot-node-network-protocol = { path = "../protocol" } polkadot-node-subsystem = {path = "../../subsystem" } polkadot-overseer = { path = "../../overseer" } -polkadot-node-network-protocol = { path = "../protocol" } -polkadot-node-subsystem-util = { path = "../../subsystem-util"} parking_lot = "0.12.0" bytes = "1" fatality = "0.0.6" @@ -26,7 +25,8 @@ thiserror = "1" [dev-dependencies] assert_matches = "1.4.0" polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +polkadot-node-subsystem-util = { path = "../../subsystem-util"} +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } futures-timer = "3" polkadot-primitives-test-helpers = { path = "../../../primitives/test-helpers" } diff --git a/node/network/bridge/src/errors.rs b/node/network/bridge/src/errors.rs index 43ba61a58902..ef7a307023a5 100644 --- a/node/network/bridge/src/errors.rs +++ b/node/network/bridge/src/errors.rs @@ -1,3 +1,19 @@ +// Copyright 2017-2023 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + use polkadot_node_subsystem::SubsystemError; pub(crate) use polkadot_overseer::OverseerError; diff --git a/node/network/bridge/src/metrics.rs b/node/network/bridge/src/metrics.rs index 52b3629a66ad..5ca392ee33f8 100644 --- a/node/network/bridge/src/metrics.rs +++ b/node/network/bridge/src/metrics.rs @@ -15,7 +15,7 @@ // along with Polkadot. If not, see . use super::{PeerSet, ProtocolVersion}; -use polkadot_node_subsystem_util::metrics::{self, prometheus}; +use polkadot_node_metrics::metrics::{self, prometheus}; /// Metrics for the network bridge. #[derive(Clone, Default)] diff --git a/node/network/bridge/src/network.rs b/node/network/bridge/src/network.rs index 32dc79d25814..3d598a181a07 100644 --- a/node/network/bridge/src/network.rs +++ b/node/network/bridge/src/network.rs @@ -22,13 +22,9 @@ use futures::{prelude::*, stream::BoxStream}; use parity_scale_codec::Encode; use sc_network::{ - multiaddr::Multiaddr, Event as NetworkEvent, IfDisconnected, NetworkService, OutboundFailure, - RequestFailure, -}; -use sc_network_common::{ - config::parse_addr, - protocol::ProtocolName, - service::{NetworkEventStream, NetworkNotification, NetworkPeers, NetworkRequest}, + config::parse_addr, multiaddr::Multiaddr, types::ProtocolName, Event as NetworkEvent, + IfDisconnected, NetworkEventStream, NetworkNotification, NetworkPeers, NetworkRequest, + NetworkService, OutboundFailure, RequestFailure, }; use polkadot_node_network_protocol::{ @@ -36,7 +32,7 @@ use polkadot_node_network_protocol::{ request_response::{OutgoingRequest, Recipient, ReqProtocolNames, Requests}, PeerId, UnifiedReputationChange as Rep, }; -use polkadot_primitives::v2::{AuthorityDiscoveryId, Block, Hash}; +use polkadot_primitives::{AuthorityDiscoveryId, Block, Hash}; use crate::validator_discovery::AuthorityDiscovery; @@ -161,6 +157,12 @@ impl Network for Arc> { let peer_id = match peer { Recipient::Peer(peer_id) => Some(peer_id), Recipient::Authority(authority) => { + gum::trace!( + target: LOG_TARGET, + ?authority, + "Searching for peer id to connect to authority", + ); + let mut found_peer_id = None; // Note: `get_addresses_by_authority_id` searched in a cache, and it thus expected // to be very quick. @@ -187,8 +189,9 @@ impl Network for Arc> { match pending_response .send(Err(RequestFailure::Network(OutboundFailure::DialFailure))) { - Err(_) => - gum::debug!(target: LOG_TARGET, "Sending failed request response failed."), + Err(_) => { + gum::debug!(target: LOG_TARGET, "Sending failed request response failed.") + }, Ok(_) => {}, } return @@ -196,6 +199,14 @@ impl Network for Arc> { Some(peer_id) => peer_id, }; + gum::trace!( + target: LOG_TARGET, + %peer_id, + protocol = %req_protocol_names.get_name(protocol), + ?if_disconnected, + "Starting request", + ); + NetworkService::start_request( self, peer_id, diff --git a/node/network/bridge/src/rx/mod.rs b/node/network/bridge/src/rx/mod.rs index 1d3052d3a218..a6bfec77ce10 100644 --- a/node/network/bridge/src/rx/mod.rs +++ b/node/network/bridge/src/rx/mod.rs @@ -45,7 +45,7 @@ use polkadot_node_subsystem::{ overseer, ActivatedLeaf, ActiveLeavesUpdate, FromOrchestra, OverseerSignal, SpawnedSubsystem, }; -use polkadot_primitives::v2::{AuthorityDiscoveryId, BlockNumber, Hash, ValidatorIndex}; +use polkadot_primitives::{AuthorityDiscoveryId, BlockNumber, Hash, ValidatorIndex}; /// Peer set info for network initialization. /// @@ -145,14 +145,13 @@ where loop { match network_stream.next().await { None => return Err(Error::EventStreamConcluded), - Some(NetworkEvent::Dht(_)) | - Some(NetworkEvent::SyncConnected { .. }) | - Some(NetworkEvent::SyncDisconnected { .. }) => {}, + Some(NetworkEvent::Dht(_)) => {}, Some(NetworkEvent::NotificationStreamOpened { remote: peer, protocol, role, negotiated_fallback, + received_handshake: _, }) => { let role = ObservedRole::from(role); let (peer_set, version) = { diff --git a/node/network/bridge/src/rx/tests.rs b/node/network/bridge/src/rx/tests.rs index d4353c0342a5..b16287f82f8a 100644 --- a/node/network/bridge/src/rx/tests.rs +++ b/node/network/bridge/src/rx/tests.rs @@ -46,7 +46,7 @@ use polkadot_node_subsystem_test_helpers::{ SingleItemSink, SingleItemStream, TestSubsystemContextHandle, }; use polkadot_node_subsystem_util::metered; -use polkadot_primitives::v2::{AuthorityDiscoveryId, Hash}; +use polkadot_primitives::{AuthorityDiscoveryId, Hash}; use sc_network::Multiaddr; use sp_keyring::Sr25519Keyring; @@ -195,6 +195,7 @@ impl TestNetworkHandle { protocol: self.protocol_names.get_main_name(peer_set), negotiated_fallback: None, role: role.into(), + received_handshake: vec![], }) .await; } diff --git a/node/network/bridge/src/tx/tests.rs b/node/network/bridge/src/tx/tests.rs index c001457d592b..9853927e58c9 100644 --- a/node/network/bridge/src/tx/tests.rs +++ b/node/network/bridge/src/tx/tests.rs @@ -32,7 +32,7 @@ use polkadot_node_network_protocol::{ use polkadot_node_subsystem::{FromOrchestra, OverseerSignal}; use polkadot_node_subsystem_test_helpers::TestSubsystemContextHandle; use polkadot_node_subsystem_util::metered; -use polkadot_primitives::v2::{AuthorityDiscoveryId, Hash}; +use polkadot_primitives::{AuthorityDiscoveryId, Hash}; use polkadot_primitives_test_helpers::dummy_collator_signature; use sc_network::Multiaddr; use sp_keyring::Sr25519Keyring; @@ -173,6 +173,7 @@ impl TestNetworkHandle { protocol: self.peerset_protocol_names.get_main_name(peer_set), negotiated_fallback: None, role: role.into(), + received_handshake: vec![], }) .await; } diff --git a/node/network/bridge/src/validator_discovery.rs b/node/network/bridge/src/validator_discovery.rs index f7cb805428b5..88096c08ce17 100644 --- a/node/network/bridge/src/validator_discovery.rs +++ b/node/network/bridge/src/validator_discovery.rs @@ -30,7 +30,7 @@ use polkadot_node_network_protocol::{ peer_set::{PeerSet, PeerSetProtocolNames, PerPeerSet}, PeerId, }; -use polkadot_primitives::v2::AuthorityDiscoveryId; +use polkadot_primitives::AuthorityDiscoveryId; const LOG_TARGET: &str = "parachain::validator-discovery"; @@ -173,7 +173,7 @@ mod tests { request_response::{outgoing::Requests, ReqProtocolNames}, PeerId, }; - use polkadot_primitives::v2::Hash; + use polkadot_primitives::Hash; use sc_network::{Event as NetworkEvent, IfDisconnected, ProtocolName}; use sp_keyring::Sr25519Keyring; use std::collections::{HashMap, HashSet}; diff --git a/node/network/collator-protocol/Cargo.toml b/node/network/collator-protocol/Cargo.toml index 17a52be8eb44..54f2d16b7d9b 100644 --- a/node/network/collator-protocol/Cargo.toml +++ b/node/network/collator-protocol/Cargo.toml @@ -11,9 +11,9 @@ futures = "0.3.21" futures-timer = "3" gum = { package = "tracing-gum", path = "../../gum" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } polkadot-primitives = { path = "../../../primitives" } polkadot-node-network-protocol = { path = "../../network/protocol" } @@ -28,10 +28,10 @@ log = "0.4.17" env_logger = "0.9.0" assert_matches = "1.4.0" -sp-core = { git = "https://github.com/paritytech/substrate", features = ["std"] , branch = "polkadot-v0.9.36" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -parity-scale-codec = { version = "3.1.5", features = ["std"] } +sp-core = { git = "https://github.com/paritytech/substrate", features = ["std"] , branch = "polkadot-v0.9.40" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +parity-scale-codec = { version = "3.3.0", features = ["std"] } polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } polkadot-primitives-test-helpers = { path = "../../../primitives/test-helpers" } diff --git a/node/network/collator-protocol/src/collator_side/mod.rs b/node/network/collator-protocol/src/collator_side/mod.rs index f7b27583a6dd..cb4a3b4a8f52 100644 --- a/node/network/collator-protocol/src/collator_side/mod.rs +++ b/node/network/collator-protocol/src/collator_side/mod.rs @@ -47,7 +47,7 @@ use polkadot_node_subsystem_util::{ runtime::{get_availability_cores, get_group_rotation_info, RuntimeInfo}, TimeoutExt, }; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ AuthorityDiscoveryId, CandidateHash, CandidateReceipt, CollatorPair, CoreIndex, CoreState, GroupIndex, Hash, Id as ParaId, SessionIndex, }; diff --git a/node/network/collator-protocol/src/collator_side/tests.rs b/node/network/collator-protocol/src/collator_side/tests.rs index 6575259b37b3..d7e7d45fadac 100644 --- a/node/network/collator-protocol/src/collator_side/tests.rs +++ b/node/network/collator-protocol/src/collator_side/tests.rs @@ -43,7 +43,7 @@ use polkadot_node_subsystem::{ }; use polkadot_node_subsystem_test_helpers as test_helpers; use polkadot_node_subsystem_util::TimeoutExt; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ AuthorityDiscoveryId, CollatorPair, GroupIndex, GroupRotationInfo, IndexedVec, ScheduledCore, SessionIndex, SessionInfo, ValidatorId, ValidatorIndex, }; diff --git a/node/network/collator-protocol/src/collator_side/validators_buffer.rs b/node/network/collator-protocol/src/collator_side/validators_buffer.rs index 5bb31c72d6c5..054d8960b77f 100644 --- a/node/network/collator-protocol/src/collator_side/validators_buffer.rs +++ b/node/network/collator-protocol/src/collator_side/validators_buffer.rs @@ -37,7 +37,7 @@ use std::{ use bitvec::{bitvec, vec::BitVec}; -use polkadot_primitives::v2::{AuthorityDiscoveryId, GroupIndex, Hash, SessionIndex}; +use polkadot_primitives::{AuthorityDiscoveryId, GroupIndex, Hash, SessionIndex}; /// The ring buffer stores at most this many unique validator groups. /// diff --git a/node/network/collator-protocol/src/lib.rs b/node/network/collator-protocol/src/lib.rs index b71acc127c88..388121cfc049 100644 --- a/node/network/collator-protocol/src/lib.rs +++ b/node/network/collator-protocol/src/lib.rs @@ -34,7 +34,7 @@ use polkadot_node_network_protocol::{ request_response::{v1 as request_v1, IncomingRequestReceiver}, PeerId, UnifiedReputationChange as Rep, }; -use polkadot_primitives::v2::CollatorPair; +use polkadot_primitives::CollatorPair; use polkadot_node_subsystem::{ errors::SubsystemError, messages::NetworkBridgeTxMessage, overseer, SpawnedSubsystem, diff --git a/node/network/collator-protocol/src/validator_side/mod.rs b/node/network/collator-protocol/src/validator_side/mod.rs index 1442fbcc2bcb..5d5417fb3001 100644 --- a/node/network/collator-protocol/src/validator_side/mod.rs +++ b/node/network/collator-protocol/src/validator_side/mod.rs @@ -53,7 +53,7 @@ use polkadot_node_subsystem::{ overseer, FromOrchestra, OverseerSignal, PerLeafSpan, SubsystemSender, }; use polkadot_node_subsystem_util::metrics::{self, prometheus}; -use polkadot_primitives::v2::{CandidateReceipt, CollatorId, Hash, Id as ParaId}; +use polkadot_primitives::{CandidateReceipt, CollatorId, Hash, Id as ParaId}; use crate::error::Result; diff --git a/node/network/collator-protocol/src/validator_side/tests.rs b/node/network/collator-protocol/src/validator_side/tests.rs index ae8644cea521..7b25ff7be616 100644 --- a/node/network/collator-protocol/src/validator_side/tests.rs +++ b/node/network/collator-protocol/src/validator_side/tests.rs @@ -32,7 +32,7 @@ use polkadot_node_primitives::BlockData; use polkadot_node_subsystem::messages::{AllMessages, RuntimeApiMessage, RuntimeApiRequest}; use polkadot_node_subsystem_test_helpers as test_helpers; use polkadot_node_subsystem_util::TimeoutExt; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ CollatorPair, CoreState, GroupIndex, GroupRotationInfo, OccupiedCore, ScheduledCore, ValidatorId, ValidatorIndex, }; @@ -133,7 +133,7 @@ fn test_harness>(test: impl FnOnce(TestHarne let keystore = TestKeyStore::new(); keystore .sr25519_generate_new( - polkadot_primitives::v2::PARACHAIN_KEY_TYPE_ID, + polkadot_primitives::PARACHAIN_KEY_TYPE_ID, Some(&Sr25519Keyring::Alice.to_seed()), ) .unwrap(); diff --git a/node/network/dispute-distribution/Cargo.toml b/node/network/dispute-distribution/Cargo.toml index 16ce9548e1c2..a3c04eca7dc7 100644 --- a/node/network/dispute-distribution/Cargo.toml +++ b/node/network/dispute-distribution/Cargo.toml @@ -9,27 +9,27 @@ futures = "0.3.21" futures-timer = "3.0.2" gum = { package = "tracing-gum", path = "../../gum" } derive_more = "0.99.17" -parity-scale-codec = { version = "3.1.5", features = ["std"] } +parity-scale-codec = { version = "3.3.0", features = ["std"] } polkadot-primitives = { path = "../../../primitives" } polkadot-erasure-coding = { path = "../../../erasure-coding" } polkadot-node-subsystem = {path = "../../subsystem" } polkadot-node-network-protocol = { path = "../../network/protocol" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } polkadot-node-primitives = { path = "../../primitives" } -sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } thiserror = "1.0.31" fatality = "0.0.6" -lru = "0.8.0" +lru = "0.9.0" indexmap = "1.9.1" [dev-dependencies] async-trait = "0.1.57" polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } futures-timer = "3.0.2" assert_matches = "1.4.0" lazy_static = "1.4.0" diff --git a/node/network/dispute-distribution/src/lib.rs b/node/network/dispute-distribution/src/lib.rs index f109d5e6a40e..f3325a11a659 100644 --- a/node/network/dispute-distribution/src/lib.rs +++ b/node/network/dispute-distribution/src/lib.rs @@ -29,6 +29,7 @@ use std::{num::NonZeroUsize, time::Duration}; use futures::{channel::mpsc, FutureExt, StreamExt, TryFutureExt}; use polkadot_node_network_protocol::authority_discovery::AuthorityDiscovery; +use polkadot_node_subsystem_util::nesting_sender::NestingSender; use sp_keystore::SyncCryptoStorePtr; use polkadot_node_network_protocol::request_response::{incoming::IncomingRequestReceiver, v1}; @@ -51,33 +52,33 @@ use polkadot_node_subsystem_util::{runtime, runtime::RuntimeInfo}; /// to this subsystem, unknown dispute. This is to make sure, we get our vote out, even on /// restarts. /// -/// The actual work of sending and keeping track of transmission attempts to each validator for a -/// particular dispute are done by [`SendTask`]. The purpose of the `DisputeSender` is to keep -/// track of all ongoing disputes and start and clean up `SendTask`s accordingly. +/// The actual work of sending and keeping track of transmission attempts to each validator for a +/// particular dispute are done by [`SendTask`]. The purpose of the `DisputeSender` is to keep +/// track of all ongoing disputes and start and clean up `SendTask`s accordingly. mod sender; -use self::sender::{DisputeSender, TaskFinish}; +use self::sender::{DisputeSender, DisputeSenderMessage}; -/// ## The receiver [`DisputesReceiver`] +/// ## The receiver [`DisputesReceiver`] /// -/// The receiving side is implemented as `DisputesReceiver` and is run as a separate long running task within -/// this subsystem ([`DisputesReceiver::run`]). +/// The receiving side is implemented as `DisputesReceiver` and is run as a separate long running task within +/// this subsystem ([`DisputesReceiver::run`]). /// -/// Conceptually all the receiver has to do, is waiting for incoming requests which are passed in -/// via a dedicated channel and forwarding them to the dispute coordinator via -/// `DisputeCoordinatorMessage::ImportStatements`. Being the interface to the network and untrusted -/// nodes, the reality is not that simple of course. Before importing statements the receiver will -/// batch up imports as well as possible for efficient imports while maintaining timely dispute -/// resolution and handling of spamming validators: +/// Conceptually all the receiver has to do, is waiting for incoming requests which are passed in +/// via a dedicated channel and forwarding them to the dispute coordinator via +/// `DisputeCoordinatorMessage::ImportStatements`. Being the interface to the network and untrusted +/// nodes, the reality is not that simple of course. Before importing statements the receiver will +/// batch up imports as well as possible for efficient imports while maintaining timely dispute +/// resolution and handling of spamming validators: /// -/// - Drop all messages from non validator nodes, for this it requires the [`AuthorityDiscovery`] -/// service. -/// - Drop messages from a node, if it sends at a too high rate. -/// - Filter out duplicate messages (over some period of time). -/// - Drop any obviously invalid votes (invalid signatures for example). -/// - Ban peers whose votes were deemed invalid. +/// - Drop all messages from non validator nodes, for this it requires the [`AuthorityDiscovery`] +/// service. +/// - Drop messages from a node, if it sends at a too high rate. +/// - Filter out duplicate messages (over some period of time). +/// - Drop any obviously invalid votes (invalid signatures for example). +/// - Ban peers whose votes were deemed invalid. /// -/// In general dispute-distribution works on limiting the work the dispute-coordinator will have to -/// do, while at the same time making it aware of new disputes as fast as possible. +/// In general dispute-distribution works on limiting the work the dispute-coordinator will have to +/// do, while at the same time making it aware of new disputes as fast as possible. /// /// For successfully imported votes, we will confirm the receipt of the message back to the sender. /// This way a received confirmation guarantees, that the vote has been stored to disk by the @@ -87,7 +88,7 @@ use self::receiver::DisputesReceiver; /// Error and [`Result`] type for this subsystem. mod error; -use error::{log_error, FatalError, FatalResult, Result}; +use error::{log_error, Error, FatalError, FatalResult, Result}; #[cfg(test)] mod tests; @@ -118,10 +119,10 @@ pub struct DisputeDistributionSubsystem { runtime: RuntimeInfo, /// Sender for our dispute requests. - disputes_sender: DisputeSender, + disputes_sender: DisputeSender, - /// Receive messages from `SendTask`. - sender_rx: mpsc::Receiver, + /// Receive messages from `DisputeSender` background tasks. + sender_rx: mpsc::Receiver, /// Receiver for incoming requests. req_receiver: Option>, @@ -155,7 +156,7 @@ impl DisputeDistributionSubsystem where AD: AuthorityDiscovery + Clone, { - /// Create a new instance of the availability distribution. + /// Create a new instance of the dispute distribution. pub fn new( keystore: SyncCryptoStorePtr, req_receiver: IncomingRequestReceiver, @@ -167,7 +168,7 @@ where session_cache_lru_size: NonZeroUsize::new(DISPUTE_WINDOW.get() as usize) .expect("Dispute window can not be 0; qed"), }); - let (tx, sender_rx) = mpsc::channel(1); + let (tx, sender_rx) = NestingSender::new_root(1); let disputes_sender = DisputeSender::new(tx, metrics.clone()); Self { runtime, @@ -216,9 +217,16 @@ where log_error(result, "on FromOrchestra")?; }, MuxedMessage::Sender(result) => { - self.disputes_sender - .on_task_message(result.ok_or(FatalError::SenderExhausted)?) - .await; + let result = self + .disputes_sender + .on_message( + &mut ctx, + &mut self.runtime, + result.ok_or(FatalError::SenderExhausted)?, + ) + .await + .map_err(Error::Sender); + log_error(result, "on_message")?; }, } } @@ -260,14 +268,14 @@ enum MuxedMessage { /// Messages from other subsystems. Subsystem(FatalResult>), /// Messages from spawned sender background tasks. - Sender(Option), + Sender(Option), } #[overseer::contextbounds(DisputeDistribution, prefix = self::overseer)] impl MuxedMessage { async fn receive( ctx: &mut Context, - from_sender: &mut mpsc::Receiver, + from_sender: &mut mpsc::Receiver, ) -> Self { // We are only fusing here to make `select` happy, in reality we will quit if the stream // ends. diff --git a/node/network/dispute-distribution/src/receiver/batches/batch.rs b/node/network/dispute-distribution/src/receiver/batches/batch.rs index eebed25ed790..cb08df4595f9 100644 --- a/node/network/dispute-distribution/src/receiver/batches/batch.rs +++ b/node/network/dispute-distribution/src/receiver/batches/batch.rs @@ -22,7 +22,7 @@ use polkadot_node_network_protocol::{ PeerId, }; use polkadot_node_primitives::SignedDisputeStatement; -use polkadot_primitives::v2::{CandidateReceipt, ValidatorIndex}; +use polkadot_primitives::{CandidateReceipt, ValidatorIndex}; use crate::receiver::{BATCH_COLLECTING_INTERVAL, MIN_KEEP_BATCH_ALIVE_VOTES}; diff --git a/node/network/dispute-distribution/src/receiver/batches/mod.rs b/node/network/dispute-distribution/src/receiver/batches/mod.rs index b343b55e0b04..8e3e157c92d6 100644 --- a/node/network/dispute-distribution/src/receiver/batches/mod.rs +++ b/node/network/dispute-distribution/src/receiver/batches/mod.rs @@ -22,7 +22,7 @@ use std::{ use futures::future::pending; use polkadot_node_network_protocol::request_response::DISPUTE_REQUEST_TIMEOUT; -use polkadot_primitives::v2::{CandidateHash, CandidateReceipt}; +use polkadot_primitives::{CandidateHash, CandidateReceipt}; use crate::{ receiver::batches::{batch::TickResult, waiting_queue::PendingWake}, diff --git a/node/network/dispute-distribution/src/receiver/error.rs b/node/network/dispute-distribution/src/receiver/error.rs index 4477335440d0..57e3222b89e7 100644 --- a/node/network/dispute-distribution/src/receiver/error.rs +++ b/node/network/dispute-distribution/src/receiver/error.rs @@ -22,7 +22,7 @@ use fatality::Nested; use gum::CandidateHash; use polkadot_node_network_protocol::{request_response::incoming, PeerId}; use polkadot_node_subsystem_util::runtime; -use polkadot_primitives::v2::AuthorityDiscoveryId; +use polkadot_primitives::AuthorityDiscoveryId; use crate::LOG_TARGET; diff --git a/node/network/dispute-distribution/src/receiver/peer_queues.rs b/node/network/dispute-distribution/src/receiver/peer_queues.rs index 138b59c3f867..fc3b969731cd 100644 --- a/node/network/dispute-distribution/src/receiver/peer_queues.rs +++ b/node/network/dispute-distribution/src/receiver/peer_queues.rs @@ -19,7 +19,7 @@ use std::collections::{hash_map::Entry, HashMap, VecDeque}; use futures::future::pending; use futures_timer::Delay; use polkadot_node_network_protocol::request_response::{v1::DisputeRequest, IncomingRequest}; -use polkadot_primitives::v2::AuthorityDiscoveryId; +use polkadot_primitives::AuthorityDiscoveryId; use crate::RECEIVE_RATE_LIMIT; diff --git a/node/network/dispute-distribution/src/sender/mod.rs b/node/network/dispute-distribution/src/sender/mod.rs index a54033945d6f..629c4913b78e 100644 --- a/node/network/dispute-distribution/src/sender/mod.rs +++ b/node/network/dispute-distribution/src/sender/mod.rs @@ -21,19 +21,17 @@ use std::{ time::Duration, }; -use futures::{ - channel::{mpsc, oneshot}, - future::poll_fn, - Future, -}; +use futures::{channel::oneshot, future::poll_fn, Future}; use futures_timer::Delay; use indexmap::{map::Entry, IndexMap}; use polkadot_node_network_protocol::request_response::v1::DisputeRequest; -use polkadot_node_primitives::{CandidateVotes, DisputeMessage, SignedDisputeStatement}; -use polkadot_node_subsystem::{messages::DisputeCoordinatorMessage, overseer, ActiveLeavesUpdate}; -use polkadot_node_subsystem_util::runtime::RuntimeInfo; -use polkadot_primitives::v2::{CandidateHash, DisputeStatement, Hash, SessionIndex}; +use polkadot_node_primitives::{DisputeMessage, DisputeStatus}; +use polkadot_node_subsystem::{ + messages::DisputeCoordinatorMessage, overseer, ActiveLeavesUpdate, SubsystemSender, +}; +use polkadot_node_subsystem_util::{nesting_sender::NestingSender, runtime::RuntimeInfo}; +use polkadot_primitives::{CandidateHash, Hash, SessionIndex}; /// For each ongoing dispute we have a `SendTask` which takes care of it. /// @@ -53,6 +51,15 @@ pub use error::{Error, FatalError, JfyiError, Result}; use self::error::JfyiErrorResult; use crate::{Metrics, LOG_TARGET, SEND_RATE_LIMIT}; +/// Messages as sent by background tasks. +#[derive(Debug)] +pub enum DisputeSenderMessage { + /// A task finished. + TaskFinish(TaskFinish), + /// A request for active disputes to the dispute-coordinator finished. + ActiveDisputesReady(JfyiErrorResult>), +} + /// The `DisputeSender` keeps track of all ongoing disputes we need to send statements out. /// /// For each dispute a `SendTask` is responsible for sending to the concerned validators for that @@ -60,7 +67,7 @@ use crate::{Metrics, LOG_TARGET, SEND_RATE_LIMIT}; /// sessions/validator sets and cleans them up when they become obsolete. /// /// The unit of work for the `DisputeSender` is a dispute, represented by `SendTask`s. -pub struct DisputeSender { +pub struct DisputeSender { /// All heads we currently consider active. active_heads: Vec, @@ -72,10 +79,13 @@ pub struct DisputeSender { /// All ongoing dispute sendings this subsystem is aware of. /// /// Using an `IndexMap` so items can be iterated in the order of insertion. - disputes: IndexMap, + disputes: IndexMap>, /// Sender to be cloned for `SendTask`s. - tx: mpsc::Sender, + tx: NestingSender, + + /// `Some` if we are waiting for a response `DisputeCoordinatorMessage::ActiveDisputes`. + waiting_for_active_disputes: Option, /// Future for delaying too frequent creation of dispute sending tasks. rate_limit: RateLimit, @@ -84,15 +94,25 @@ pub struct DisputeSender { metrics: Metrics, } +/// State we keep while waiting for active disputes. +/// +/// When we send `DisputeCoordinatorMessage::ActiveDisputes`, this is the state we keep while +/// waiting for the response. +struct WaitForActiveDisputesState { + /// Have we seen any new sessions since last refresh? + have_new_sessions: bool, +} + #[overseer::contextbounds(DisputeDistribution, prefix = self::overseer)] -impl DisputeSender { +impl DisputeSender { /// Create a new `DisputeSender` which can be used to start dispute sendings. - pub fn new(tx: mpsc::Sender, metrics: Metrics) -> Self { + pub fn new(tx: NestingSender, metrics: Metrics) -> Self { Self { active_heads: Vec::new(), active_sessions: HashMap::new(), disputes: IndexMap::new(), tx, + waiting_for_active_disputes: None, rate_limit: RateLimit::new(), metrics, } @@ -122,7 +142,7 @@ impl DisputeSender { ctx, runtime, &self.active_sessions, - self.tx.clone(), + NestingSender::new(self.tx.clone(), DisputeSenderMessage::TaskFinish), req, &self.metrics, ) @@ -133,14 +153,47 @@ impl DisputeSender { Ok(()) } + /// Receive message from a background task. + pub async fn on_message( + &mut self, + ctx: &mut Context, + runtime: &mut RuntimeInfo, + msg: DisputeSenderMessage, + ) -> Result<()> { + match msg { + DisputeSenderMessage::TaskFinish(msg) => { + let TaskFinish { candidate_hash, receiver, result } = msg; + + self.metrics.on_sent_request(result.as_metrics_label()); + + let task = match self.disputes.get_mut(&candidate_hash) { + None => { + // Can happen when a dispute ends, with messages still in queue: + gum::trace!( + target: LOG_TARGET, + ?result, + "Received `FromSendingTask::Finished` for non existing dispute." + ); + return Ok(()) + }, + Some(task) => task, + }; + task.on_finished_send(&receiver, result); + }, + DisputeSenderMessage::ActiveDisputesReady(result) => { + let state = self.waiting_for_active_disputes.take(); + let have_new_sessions = state.map(|s| s.have_new_sessions).unwrap_or(false); + let active_disputes = result?; + self.handle_new_active_disputes(ctx, runtime, active_disputes, have_new_sessions) + .await?; + }, + } + Ok(()) + } + /// Take care of a change in active leaves. /// - /// - Initiate a retry of failed sends which are still active. - /// - Get new authorities to send messages to. - /// - Get rid of obsolete tasks and disputes. - /// - Get dispute sending started in case we missed one for some reason (e.g. on node startup) - /// - /// This function ensures the `SEND_RATE_LIMIT`, therefore it might block. + /// Update our knowledge on sessions and initiate fetching for new active disputes. pub async fn update_leaves( &mut self, ctx: &mut Context, @@ -154,14 +207,58 @@ impl DisputeSender { let have_new_sessions = self.refresh_sessions(ctx, runtime).await?; - let active_disputes = get_active_disputes(ctx).await?; - let unknown_disputes = { - let mut disputes = active_disputes.clone(); - disputes.retain(|(_, c)| !self.disputes.contains_key(c)); - disputes - }; + // Not yet waiting for data, request an update: + match self.waiting_for_active_disputes.take() { + None => { + self.waiting_for_active_disputes = + Some(WaitForActiveDisputesState { have_new_sessions }); + let mut sender = ctx.sender().clone(); + let mut tx = self.tx.clone(); + + let get_active_disputes_task = async move { + let result = get_active_disputes(&mut sender).await; + let result = + tx.send_message(DisputeSenderMessage::ActiveDisputesReady(result)).await; + if let Err(err) = result { + gum::debug!( + target: LOG_TARGET, + ?err, + "Sending `DisputeSenderMessage` from background task failed." + ); + } + }; + + ctx.spawn("get_active_disputes", Box::pin(get_active_disputes_task)) + .map_err(FatalError::SpawnTask)?; + }, + Some(state) => { + let have_new_sessions = state.have_new_sessions || have_new_sessions; + let new_state = WaitForActiveDisputesState { have_new_sessions }; + self.waiting_for_active_disputes = Some(new_state); + gum::debug!( + target: LOG_TARGET, + "Dispute coordinator slow? We are still waiting for data on next active leaves update." + ); + }, + } + Ok(()) + } - let active_disputes: HashSet<_> = active_disputes.into_iter().map(|(_, c)| c).collect(); + /// Handle new active disputes response. + /// + /// - Initiate a retry of failed sends which are still active. + /// - Get new authorities to send messages to. + /// - Get rid of obsolete tasks and disputes. + /// + /// This function ensures the `SEND_RATE_LIMIT`, therefore it might block. + async fn handle_new_active_disputes( + &mut self, + ctx: &mut Context, + runtime: &mut RuntimeInfo, + active_disputes: Vec<(SessionIndex, CandidateHash, DisputeStatus)>, + have_new_sessions: bool, + ) -> Result<()> { + let active_disputes: HashSet<_> = active_disputes.into_iter().map(|(_, c, _)| c).collect(); // Cleanup obsolete senders (retain keeps order of remaining elements): self.disputes @@ -188,165 +285,9 @@ impl DisputeSender { should_rate_limit = sends_happened && have_new_sessions; } } - - // This should only be non-empty on startup, but if not - we got you covered. - // - // Initial order will not be maintained in that case, but that should be fine as disputes - // recovered at startup will be relatively "old" anyway and we assume that no more than a - // third of the validators will go offline at any point in time anyway. - for dispute in unknown_disputes { - // Rate limiting handled inside `start_send_for_dispute` (calls `start_sender`). - self.start_send_for_dispute(ctx, runtime, dispute).await?; - } Ok(()) } - /// Receive message from a sending task. - pub async fn on_task_message(&mut self, msg: TaskFinish) { - let TaskFinish { candidate_hash, receiver, result } = msg; - - self.metrics.on_sent_request(result.as_metrics_label()); - - let task = match self.disputes.get_mut(&candidate_hash) { - None => { - // Can happen when a dispute ends, with messages still in queue: - gum::trace!( - target: LOG_TARGET, - ?result, - "Received `FromSendingTask::Finished` for non existing dispute." - ); - return - }, - Some(task) => task, - }; - task.on_finished_send(&receiver, result); - } - - /// Call `start_sender` on all passed in disputes. - /// - /// Recover necessary votes for building up `DisputeMessage` and start sending for all of them. - async fn start_send_for_dispute( - &mut self, - ctx: &mut Context, - runtime: &mut RuntimeInfo, - dispute: (SessionIndex, CandidateHash), - ) -> Result<()> { - let (session_index, candidate_hash) = dispute; - // A relay chain head is required as context for receiving session info information from runtime and - // storage. We will iterate `active_sessions` to find a suitable head. We assume that there is at - // least one active head which, by `session_index`, is at least as recent as the `dispute` passed in. - // We need to avoid picking an older one from a session that might not yet exist in storage. - // Related to . - let ref_head = self - .active_sessions - .iter() - .find_map(|(active_session_index, head_hash)| { - // There might be more than one session index that is at least as recent as the dispute - // so we just pick the first one. Keep in mind we are talking about the session index for the - // child of block identified by `head_hash` and not the session index for the block. - if active_session_index >= &session_index { - Some(head_hash) - } else { - None - } - }) - .ok_or(JfyiError::NoActiveHeads)?; - - let info = runtime - .get_session_info_by_index(ctx.sender(), *ref_head, session_index) - .await?; - let our_index = match info.validator_info.our_index { - None => { - gum::trace!( - target: LOG_TARGET, - "Not a validator in that session - not starting dispute sending." - ); - return Ok(()) - }, - Some(index) => index, - }; - - let votes = match get_candidate_votes(ctx, session_index, candidate_hash).await? { - None => { - gum::debug!( - target: LOG_TARGET, - ?session_index, - ?candidate_hash, - "No votes for active dispute?! - possible, due to race." - ); - return Ok(()) - }, - Some(votes) => votes, - }; - - let our_valid_vote = votes.valid.raw().get(&our_index); - - let our_invalid_vote = votes.invalid.get(&our_index); - - let (valid_vote, invalid_vote) = if let Some(our_valid_vote) = our_valid_vote { - // Get some invalid vote as well: - let invalid_vote = - votes.invalid.iter().next().ok_or(JfyiError::MissingVotesFromCoordinator)?; - ((&our_index, our_valid_vote), invalid_vote) - } else if let Some(our_invalid_vote) = our_invalid_vote { - // Get some valid vote as well: - let valid_vote = - votes.valid.raw().iter().next().ok_or(JfyiError::MissingVotesFromCoordinator)?; - (valid_vote, (&our_index, our_invalid_vote)) - } else { - // There is no vote from us yet - nothing to do. - return Ok(()) - }; - let (valid_index, (kind, signature)) = valid_vote; - let valid_public = info - .session_info - .validators - .get(*valid_index) - .ok_or(JfyiError::InvalidStatementFromCoordinator)?; - let valid_signed = SignedDisputeStatement::new_checked( - DisputeStatement::Valid(*kind), - candidate_hash, - session_index, - valid_public.clone(), - signature.clone(), - ) - .map_err(|()| JfyiError::InvalidStatementFromCoordinator)?; - - let (invalid_index, (kind, signature)) = invalid_vote; - let invalid_public = info - .session_info - .validators - .get(*invalid_index) - .ok_or(JfyiError::InvalidValidatorIndexFromCoordinator)?; - let invalid_signed = SignedDisputeStatement::new_checked( - DisputeStatement::Invalid(*kind), - candidate_hash, - session_index, - invalid_public.clone(), - signature.clone(), - ) - .map_err(|()| JfyiError::InvalidValidatorIndexFromCoordinator)?; - - // Reconstructing the checked signed dispute statements is hardly useful here and wasteful, - // but I don't want to enable a bypass for the below smart constructor and this code path - // is supposed to be only hit on startup basically. - // - // Revisit this decision when the `from_signed_statements` is unneeded for the normal code - // path as well. - let message = DisputeMessage::from_signed_statements( - valid_signed, - *valid_index, - invalid_signed, - *invalid_index, - votes.candidate_receipt, - &info.session_info, - ) - .map_err(JfyiError::InvalidDisputeFromCoordinator)?; - - // Finally, get the party started: - self.start_sender(ctx, runtime, message).await - } - /// Make active sessions correspond to currently active heads. /// /// Returns: true if sessions changed. @@ -431,33 +372,14 @@ async fn get_active_session_indices( } /// Retrieve Set of active disputes from the dispute coordinator. -#[overseer::contextbounds(DisputeDistribution, prefix = self::overseer)] -async fn get_active_disputes( - ctx: &mut Context, -) -> JfyiErrorResult> { +async fn get_active_disputes( + sender: &mut Sender, +) -> JfyiErrorResult> +where + Sender: SubsystemSender, +{ let (tx, rx) = oneshot::channel(); - // Caller scope is in `update_leaves` and this is bounded by fork count. - ctx.send_unbounded_message(DisputeCoordinatorMessage::ActiveDisputes(tx)); - rx.await - .map_err(|_| JfyiError::AskActiveDisputesCanceled) - .map(|disputes| disputes.into_iter().map(|d| (d.0, d.1)).collect()) -} - -/// Get all locally available dispute votes for a given dispute. -#[overseer::contextbounds(DisputeDistribution, prefix = self::overseer)] -async fn get_candidate_votes( - ctx: &mut Context, - session_index: SessionIndex, - candidate_hash: CandidateHash, -) -> JfyiErrorResult> { - let (tx, rx) = oneshot::channel(); - // Caller scope is in `update_leaves` and this is bounded by fork count. - ctx.send_unbounded_message(DisputeCoordinatorMessage::QueryCandidateVotes( - vec![(session_index, candidate_hash)], - tx, - )); - rx.await - .map(|v| v.get(0).map(|inner| inner.to_owned().2)) - .map_err(|_| JfyiError::AskCandidateVotesCanceled) + sender.send_message(DisputeCoordinatorMessage::ActiveDisputes(tx)).await; + rx.await.map_err(|_| JfyiError::AskActiveDisputesCanceled) } diff --git a/node/network/dispute-distribution/src/sender/send_task.rs b/node/network/dispute-distribution/src/sender/send_task.rs index 3852adbc141b..7e01bc1774ac 100644 --- a/node/network/dispute-distribution/src/sender/send_task.rs +++ b/node/network/dispute-distribution/src/sender/send_task.rs @@ -16,7 +16,7 @@ use std::collections::{HashMap, HashSet}; -use futures::{channel::mpsc, future::RemoteHandle, Future, FutureExt, SinkExt}; +use futures::{future::RemoteHandle, Future, FutureExt}; use polkadot_node_network_protocol::{ request_response::{ @@ -27,8 +27,8 @@ use polkadot_node_network_protocol::{ IfDisconnected, }; use polkadot_node_subsystem::{messages::NetworkBridgeTxMessage, overseer}; -use polkadot_node_subsystem_util::{metrics, runtime::RuntimeInfo}; -use polkadot_primitives::v2::{ +use polkadot_node_subsystem_util::{metrics, nesting_sender::NestingSender, runtime::RuntimeInfo}; +use polkadot_primitives::{ AuthorityDiscoveryId, CandidateHash, Hash, SessionIndex, ValidatorIndex, }; @@ -44,7 +44,7 @@ use crate::{ /// Keeps track of all the validators that have to be reached for a dispute. /// /// The unit of work for a `SendTask` is an authority/validator. -pub struct SendTask { +pub struct SendTask { /// The request we are supposed to get out to all `parachain` validators of the dispute's session /// and to all current authorities. request: DisputeRequest, @@ -58,7 +58,7 @@ pub struct SendTask { has_failed_sends: bool, /// Sender to be cloned for tasks. - tx: mpsc::Sender, + tx: NestingSender, } /// Status of a particular vote/statement delivery to a particular validator. @@ -100,7 +100,7 @@ impl TaskResult { } #[overseer::contextbounds(DisputeDistribution, prefix = self::overseer)] -impl SendTask { +impl SendTask { /// Initiates sending a dispute message to peers. /// /// Creation of new `SendTask`s is subject to rate limiting. As each `SendTask` will trigger @@ -110,7 +110,7 @@ impl SendTask { ctx: &mut Context, runtime: &mut RuntimeInfo, active_sessions: &HashMap, - tx: mpsc::Sender, + tx: NestingSender, request: DisputeRequest, metrics: &Metrics, ) -> Result { @@ -272,9 +272,9 @@ impl SendTask { /// /// And spawn tasks for handling the response. #[overseer::contextbounds(DisputeDistribution, prefix = self::overseer)] -async fn send_requests( +async fn send_requests( ctx: &mut Context, - tx: mpsc::Sender, + tx: NestingSender, receivers: Vec, req: DisputeRequest, metrics: &Metrics, @@ -307,11 +307,11 @@ async fn send_requests( } /// Future to be spawned in a task for awaiting a response. -async fn wait_response_task( +async fn wait_response_task( pending_response: impl Future>, candidate_hash: CandidateHash, receiver: AuthorityDiscoveryId, - mut tx: mpsc::Sender, + mut tx: NestingSender, _timer: Option, ) { let result = pending_response.await; @@ -320,7 +320,7 @@ async fn wait_response_task( Ok(DisputeResponse::Confirmed) => TaskFinish { candidate_hash, receiver, result: TaskResult::Succeeded }, }; - if let Err(err) = tx.feed(msg).await { + if let Err(err) = tx.send_message(msg).await { gum::debug!( target: LOG_TARGET, %err, diff --git a/node/network/dispute-distribution/src/tests/mock.rs b/node/network/dispute-distribution/src/tests/mock.rs index bc64734d57a0..6478940c9024 100644 --- a/node/network/dispute-distribution/src/tests/mock.rs +++ b/node/network/dispute-distribution/src/tests/mock.rs @@ -33,7 +33,7 @@ use sp_keyring::Sr25519Keyring; use sp_keystore::{SyncCryptoStore, SyncCryptoStorePtr}; use polkadot_node_primitives::{DisputeMessage, SignedDisputeStatement}; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ AuthorityDiscoveryId, CandidateHash, CandidateReceipt, Hash, SessionIndex, SessionInfo, ValidatorId, ValidatorIndex, }; @@ -210,7 +210,7 @@ impl MockAuthorityDiscovery { impl AuthorityDiscovery for MockAuthorityDiscovery { async fn get_addresses_by_authority_id( &mut self, - _authority: polkadot_primitives::v2::AuthorityDiscoveryId, + _authority: polkadot_primitives::AuthorityDiscoveryId, ) -> Option> { panic!("Not implemented"); } @@ -218,7 +218,7 @@ impl AuthorityDiscovery for MockAuthorityDiscovery { async fn get_authority_ids_by_peer_id( &mut self, peer_id: polkadot_node_network_protocol::PeerId, - ) -> Option> { + ) -> Option> { for (a, p) in self.peer_ids.iter() { if p == &peer_id { let result = diff --git a/node/network/dispute-distribution/src/tests/mod.rs b/node/network/dispute-distribution/src/tests/mod.rs index d6381239965b..ca5f49f4a394 100644 --- a/node/network/dispute-distribution/src/tests/mod.rs +++ b/node/network/dispute-distribution/src/tests/mod.rs @@ -45,7 +45,7 @@ use polkadot_node_network_protocol::{ request_response::{v1::DisputeResponse, Recipient, Requests}, IfDisconnected, }; -use polkadot_node_primitives::{CandidateVotes, DisputeStatus, UncheckedDisputeMessage}; +use polkadot_node_primitives::DisputeStatus; use polkadot_node_subsystem::{ messages::{ AllMessages, DisputeCoordinatorMessage, DisputeDistributionMessage, ImportStatementsResult, @@ -56,7 +56,7 @@ use polkadot_node_subsystem::{ use polkadot_node_subsystem_test_helpers::{ mock::make_ferdie_keystore, subsystem_test_harness, TestSubsystemContextHandle, }; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ AuthorityDiscoveryId, CandidateHash, CandidateReceipt, Hash, SessionIndex, SessionInfo, }; @@ -479,65 +479,6 @@ fn receive_rate_limit_is_enforced() { test_harness(test); } -#[test] -fn disputes_are_recovered_at_startup() { - let test = |mut handle: TestSubsystemContextHandle, _| async move { - let relay_parent = Hash::random(); - let candidate = make_candidate_receipt(relay_parent); - - let _ = handle_subsystem_startup(&mut handle, Some(candidate.hash())).await; - - let message = make_dispute_message(candidate.clone(), ALICE_INDEX, FERDIE_INDEX).await; - // Requests needed session info: - assert_matches!( - handle.recv().await, - AllMessages::DisputeCoordinator( - DisputeCoordinatorMessage::QueryCandidateVotes( - query, - tx, - ) - ) => { - let (session_index, candidate_hash) = query.get(0).unwrap().clone(); - assert_eq!(session_index, MOCK_SESSION_INDEX); - assert_eq!(candidate_hash, candidate.hash()); - let unchecked: UncheckedDisputeMessage = message.into(); - tx.send(vec![(session_index, candidate_hash, CandidateVotes { - candidate_receipt: candidate, - valid: [( - unchecked.valid_vote.validator_index, - (unchecked.valid_vote.kind, - unchecked.valid_vote.signature - ), - )].into_iter().collect(), - invalid: [( - unchecked.invalid_vote.validator_index, - ( - unchecked.invalid_vote.kind, - unchecked.invalid_vote.signature - ), - )].into_iter().collect(), - })]) - .expect("Receiver should stay alive."); - } - ); - - let expected_receivers = { - let info = &MOCK_SESSION_INFO; - info.discovery_keys - .clone() - .into_iter() - .filter(|a| a != &Sr25519Keyring::Ferdie.public().into()) - .collect() - // All validators are also authorities in the first session, so we are - // done here. - }; - check_sent_requests(&mut handle, expected_receivers, true).await; - - conclude(&mut handle).await; - }; - test_harness(test); -} - #[test] fn send_dispute_gets_cleaned_up() { let test = |mut handle: TestSubsystemContextHandle, _| async move { @@ -605,6 +546,7 @@ fn send_dispute_gets_cleaned_up() { #[test] fn dispute_retries_and_works_across_session_boundaries() { + sp_tracing::try_init_simple(); let test = |mut handle: TestSubsystemContextHandle, _| async move { let old_head = handle_subsystem_startup(&mut handle, None).await; diff --git a/node/network/gossip-support/Cargo.toml b/node/network/gossip-support/Cargo.toml index cbd11c5f1363..95ab35f93230 100644 --- a/node/network/gossip-support/Cargo.toml +++ b/node/network/gossip-support/Cargo.toml @@ -5,10 +5,10 @@ authors.workspace = true edition.workspace = true [dependencies] -sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } polkadot-node-network-protocol = { path = "../protocol" } polkadot-node-subsystem = { path = "../../subsystem" } @@ -22,10 +22,10 @@ rand_chacha = { version = "0.3.1", default-features = false } gum = { package = "tracing-gum", path = "../../gum" } [dev-dependencies] -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } diff --git a/node/network/gossip-support/src/lib.rs b/node/network/gossip-support/src/lib.rs index 36459f9c8dab..03d0e2150892 100644 --- a/node/network/gossip-support/src/lib.rs +++ b/node/network/gossip-support/src/lib.rs @@ -51,9 +51,7 @@ use polkadot_node_subsystem::{ overseer, ActiveLeavesUpdate, FromOrchestra, OverseerSignal, SpawnedSubsystem, SubsystemError, }; use polkadot_node_subsystem_util as util; -use polkadot_primitives::v2::{ - AuthorityDiscoveryId, Hash, SessionIndex, SessionInfo, ValidatorIndex, -}; +use polkadot_primitives::{AuthorityDiscoveryId, Hash, SessionIndex, SessionInfo, ValidatorIndex}; #[cfg(test)] mod tests; diff --git a/node/network/gossip-support/src/tests.rs b/node/network/gossip-support/src/tests.rs index 4b2b91f7cdba..797d653e7724 100644 --- a/node/network/gossip-support/src/tests.rs +++ b/node/network/gossip-support/src/tests.rs @@ -37,7 +37,7 @@ use polkadot_node_subsystem::{ }; use polkadot_node_subsystem_test_helpers as test_helpers; use polkadot_node_subsystem_util::TimeoutExt as _; -use polkadot_primitives::v2::{GroupIndex, IndexedVec}; +use polkadot_primitives::{GroupIndex, IndexedVec}; use test_helpers::mock::make_ferdie_keystore; use super::*; @@ -121,14 +121,14 @@ impl MockAuthorityDiscovery { impl AuthorityDiscovery for MockAuthorityDiscovery { async fn get_addresses_by_authority_id( &mut self, - authority: polkadot_primitives::v2::AuthorityDiscoveryId, + authority: polkadot_primitives::AuthorityDiscoveryId, ) -> Option> { self.addrs.get(&authority).cloned() } async fn get_authority_ids_by_peer_id( &mut self, peer_id: polkadot_node_network_protocol::PeerId, - ) -> Option> { + ) -> Option> { self.authorities.get(&peer_id).cloned() } } diff --git a/node/network/protocol/Cargo.toml b/node/network/protocol/Cargo.toml index f04c913b0608..8d9fe1d1ffb4 100644 --- a/node/network/protocol/Cargo.toml +++ b/node/network/protocol/Cargo.toml @@ -11,10 +11,9 @@ hex = "0.4.3" polkadot-primitives = { path = "../../../primitives" } polkadot-node-primitives = { path = "../../primitives" } polkadot-node-jaeger = { path = "../../jaeger" } -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["derive"] } -sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-network-common = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["derive"] } +sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } strum = { version = "0.24", features = ["derive"] } futures = "0.3.21" thiserror = "1.0.31" diff --git a/node/network/protocol/src/authority_discovery.rs b/node/network/protocol/src/authority_discovery.rs index 4c7a7bc801b0..57a8532376cd 100644 --- a/node/network/protocol/src/authority_discovery.rs +++ b/node/network/protocol/src/authority_discovery.rs @@ -22,7 +22,7 @@ use async_trait::async_trait; use sc_authority_discovery::Service as AuthorityDiscoveryService; -use polkadot_primitives::v2::AuthorityDiscoveryId; +use polkadot_primitives::AuthorityDiscoveryId; use sc_network::{Multiaddr, PeerId}; /// An abstraction over the authority discovery service. diff --git a/node/network/protocol/src/grid_topology.rs b/node/network/protocol/src/grid_topology.rs index 2ae43c07c355..6e0512dd59a0 100644 --- a/node/network/protocol/src/grid_topology.rs +++ b/node/network/protocol/src/grid_topology.rs @@ -30,7 +30,7 @@ //! use crate::PeerId; -use polkadot_primitives::v2::{AuthorityDiscoveryId, SessionIndex, ValidatorIndex}; +use polkadot_primitives::{AuthorityDiscoveryId, SessionIndex, ValidatorIndex}; use rand::{CryptoRng, Rng}; use std::{ collections::{hash_map, HashMap, HashSet}, diff --git a/node/network/protocol/src/lib.rs b/node/network/protocol/src/lib.rs index 744217133eed..63024e0fd3f6 100644 --- a/node/network/protocol/src/lib.rs +++ b/node/network/protocol/src/lib.rs @@ -20,7 +20,7 @@ #![warn(missing_docs)] use parity_scale_codec::{Decode, Encode}; -use polkadot_primitives::v2::{BlockNumber, Hash}; +use polkadot_primitives::{BlockNumber, Hash}; use std::{collections::HashMap, fmt}; #[doc(hidden)] @@ -139,7 +139,7 @@ impl std::ops::Deref for OurView { /// /// ``` /// # use polkadot_node_network_protocol::our_view; -/// # use polkadot_primitives::v2::Hash; +/// # use polkadot_primitives::Hash; /// let our_view = our_view![Hash::repeat_byte(1), Hash::repeat_byte(2)]; /// ``` #[macro_export] @@ -173,7 +173,7 @@ pub struct View { /// /// ``` /// # use polkadot_node_network_protocol::view; -/// # use polkadot_primitives::v2::Hash; +/// # use polkadot_primitives::Hash; /// let view = view![Hash::repeat_byte(1), Hash::repeat_byte(2)]; /// ``` #[macro_export] @@ -398,7 +398,7 @@ impl_versioned_try_from!( pub mod v1 { use parity_scale_codec::{Decode, Encode}; - use polkadot_primitives::v2::{ + use polkadot_primitives::{ CandidateHash, CandidateIndex, CollatorId, CollatorSignature, CompactStatement, Hash, Id as ParaId, UncheckedSignedAvailabilityBitfield, ValidatorIndex, ValidatorSignature, }; diff --git a/node/network/protocol/src/peer_set.rs b/node/network/protocol/src/peer_set.rs index 22eddc44c42f..84c41051f753 100644 --- a/node/network/protocol/src/peer_set.rs +++ b/node/network/protocol/src/peer_set.rs @@ -17,10 +17,10 @@ //! All peersets and protocols used for parachains. use derive_more::Display; -use polkadot_primitives::v2::Hash; -use sc_network_common::{ +use polkadot_primitives::Hash; +use sc_network::{ config::{NonDefaultSetConfig, SetConfig}, - protocol::ProtocolName, + types::ProtocolName, }; use std::{ collections::{hash_map::Entry, HashMap}, @@ -81,7 +81,7 @@ impl PeerSet { fallback_names, max_notification_size, handshake: None, - set_config: sc_network_common::config::SetConfig { + set_config: SetConfig { // we allow full nodes to connect to validators for gossip // to ensure any `MIN_GOSSIP_PEERS` always include reserved peers // we limit the amount of non-reserved slots to be less @@ -89,7 +89,7 @@ impl PeerSet { in_peers: super::MIN_GOSSIP_PEERS as u32 / 2 - 1, out_peers: super::MIN_GOSSIP_PEERS as u32 / 2 - 1, reserved_nodes: Vec::new(), - non_reserved_mode: sc_network_common::config::NonReservedPeerMode::Accept, + non_reserved_mode: sc_network::config::NonReservedPeerMode::Accept, }, }, PeerSet::Collation => NonDefaultSetConfig { @@ -103,9 +103,9 @@ impl PeerSet { out_peers: 0, reserved_nodes: Vec::new(), non_reserved_mode: if is_authority == IsAuthority::Yes { - sc_network_common::config::NonReservedPeerMode::Accept + sc_network::config::NonReservedPeerMode::Accept } else { - sc_network_common::config::NonReservedPeerMode::Deny + sc_network::config::NonReservedPeerMode::Deny }, }, }, @@ -190,7 +190,7 @@ impl IndexMut for PerPeerSet { pub fn peer_sets_info( is_authority: IsAuthority, peerset_protocol_names: &PeerSetProtocolNames, -) -> Vec { +) -> Vec { PeerSet::iter() .map(|s| s.get_info(is_authority, &peerset_protocol_names)) .collect() diff --git a/node/network/protocol/src/reputation.rs b/node/network/protocol/src/reputation.rs index 6a98efe1d087..be76eae16f54 100644 --- a/node/network/protocol/src/reputation.rs +++ b/node/network/protocol/src/reputation.rs @@ -1,3 +1,19 @@ +// Copyright 2017-2023 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + pub use sc_network::ReputationChange; /// Unified annoyance cost and good behavior benefits. diff --git a/node/network/protocol/src/request_response/mod.rs b/node/network/protocol/src/request_response/mod.rs index 6ce0c883cc6c..a12905f94ff0 100644 --- a/node/network/protocol/src/request_response/mod.rs +++ b/node/network/protocol/src/request_response/mod.rs @@ -35,7 +35,7 @@ use std::{collections::HashMap, time::Duration, u64}; use futures::channel::mpsc; -use polkadot_primitives::v2::{MAX_CODE_SIZE, MAX_POV_SIZE}; +use polkadot_primitives::{MAX_CODE_SIZE, MAX_POV_SIZE}; use strum::{EnumIter, IntoEnumIterator}; pub use sc_network::{config as network, config::RequestResponseConfig, ProtocolName}; @@ -104,7 +104,7 @@ const STATEMENTS_TIMEOUT: Duration = Duration::from_secs(1); /// We don't want a slow peer to slow down all the others, at the same time we want to get out the /// data quickly in full to at least some peers (as this will reduce load on us as they then can -/// start serving the data). So this value is a tradeoff. 3 seems to be sensible. So we would need +/// start serving the data). So this value is a trade-off. 3 seems to be sensible. So we would need /// to have 3 slow nodes connected, to delay transfer for others by `STATEMENTS_TIMEOUT`. pub const MAX_PARALLEL_STATEMENT_REQUESTS: u32 = 3; diff --git a/node/network/protocol/src/request_response/outgoing.rs b/node/network/protocol/src/request_response/outgoing.rs index b93c4e93cd31..8aa174eb69a7 100644 --- a/node/network/protocol/src/request_response/outgoing.rs +++ b/node/network/protocol/src/request_response/outgoing.rs @@ -21,7 +21,7 @@ use parity_scale_codec::{Decode, Encode, Error as DecodingError}; use sc_network as network; use sc_network::PeerId; -use polkadot_primitives::v2::AuthorityDiscoveryId; +use polkadot_primitives::AuthorityDiscoveryId; use super::{v1, IsRequest, Protocol}; diff --git a/node/network/protocol/src/request_response/v1.rs b/node/network/protocol/src/request_response/v1.rs index 52458d6822d9..ca8f59a8396d 100644 --- a/node/network/protocol/src/request_response/v1.rs +++ b/node/network/protocol/src/request_response/v1.rs @@ -21,7 +21,7 @@ use parity_scale_codec::{Decode, Encode}; use polkadot_node_primitives::{ AvailableData, DisputeMessage, ErasureChunk, PoV, Proof, UncheckedDisputeMessage, }; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ CandidateHash, CandidateReceipt, CommittedCandidateReceipt, Hash, Id as ParaId, ValidatorIndex, }; diff --git a/node/network/statement-distribution/Cargo.toml b/node/network/statement-distribution/Cargo.toml index 9fdf2e6823ef..25397c264475 100644 --- a/node/network/statement-distribution/Cargo.toml +++ b/node/network/statement-distribution/Cargo.toml @@ -9,28 +9,28 @@ edition.workspace = true futures = "0.3.21" gum = { package = "tracing-gum", path = "../../gum" } polkadot-primitives = { path = "../../../primitives" } -sp-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } polkadot-node-subsystem = {path = "../../subsystem" } polkadot-node-primitives = { path = "../../primitives" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } polkadot-node-network-protocol = { path = "../../network/protocol" } arrayvec = "0.5.2" indexmap = "1.9.1" -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["derive"] } thiserror = "1.0.31" fatality = "0.0.6" [dev-dependencies] polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } assert_matches = "1.4.0" -sp-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } futures-timer = "3.0.2" polkadot-primitives-test-helpers = { path = "../../../primitives/test-helpers" } diff --git a/node/network/statement-distribution/src/error.rs b/node/network/statement-distribution/src/error.rs index 01b2efd53b86..86cbbc8a9877 100644 --- a/node/network/statement-distribution/src/error.rs +++ b/node/network/statement-distribution/src/error.rs @@ -20,7 +20,7 @@ use polkadot_node_network_protocol::PeerId; use polkadot_node_subsystem::SubsystemError; use polkadot_node_subsystem_util::runtime; -use polkadot_primitives::v2::{CandidateHash, Hash}; +use polkadot_primitives::{CandidateHash, Hash}; use crate::LOG_TARGET; diff --git a/node/network/statement-distribution/src/lib.rs b/node/network/statement-distribution/src/lib.rs index 271072ab1031..769c50322061 100644 --- a/node/network/statement-distribution/src/lib.rs +++ b/node/network/statement-distribution/src/lib.rs @@ -45,7 +45,7 @@ use polkadot_node_subsystem::{ overseer, ActiveLeavesUpdate, FromOrchestra, OverseerSignal, PerLeafSpan, SpawnedSubsystem, SubsystemError, }; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ AuthorityDiscoveryId, CandidateHash, CommittedCandidateReceipt, CompactStatement, Hash, IndexedVec, SignedStatement, SigningContext, UncheckedSignedStatement, ValidatorId, ValidatorIndex, ValidatorSignature, diff --git a/node/network/statement-distribution/src/requester.rs b/node/network/statement-distribution/src/requester.rs index 24ffa5e41742..941c6772e546 100644 --- a/node/network/statement-distribution/src/requester.rs +++ b/node/network/statement-distribution/src/requester.rs @@ -30,7 +30,7 @@ use polkadot_node_network_protocol::{ }; use polkadot_node_subsystem::{Span, Stage}; use polkadot_node_subsystem_util::TimeoutExt; -use polkadot_primitives::v2::{CandidateHash, CommittedCandidateReceipt, Hash}; +use polkadot_primitives::{CandidateHash, CommittedCandidateReceipt, Hash}; use crate::{metrics::Metrics, COST_WRONG_HASH, LOG_TARGET}; diff --git a/node/network/statement-distribution/src/responder.rs b/node/network/statement-distribution/src/responder.rs index 776652c04e7a..8db38385e581 100644 --- a/node/network/statement-distribution/src/responder.rs +++ b/node/network/statement-distribution/src/responder.rs @@ -29,7 +29,7 @@ use polkadot_node_network_protocol::{ }, PeerId, UnifiedReputationChange as Rep, }; -use polkadot_primitives::v2::{CandidateHash, CommittedCandidateReceipt, Hash}; +use polkadot_primitives::{CandidateHash, CommittedCandidateReceipt, Hash}; use crate::LOG_TARGET; diff --git a/node/network/statement-distribution/src/tests.rs b/node/network/statement-distribution/src/tests.rs index c1636557fdca..87a7cd7a35fe 100644 --- a/node/network/statement-distribution/src/tests.rs +++ b/node/network/statement-distribution/src/tests.rs @@ -35,7 +35,7 @@ use polkadot_node_subsystem::{ ActivatedLeaf, LeafStatus, }; use polkadot_node_subsystem_test_helpers::mock::make_ferdie_keystore; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ GroupIndex, Hash, Id as ParaId, IndexedVec, SessionInfo, ValidationCode, ValidatorId, }; use polkadot_primitives_test_helpers::{ diff --git a/node/overseer/Cargo.toml b/node/overseer/Cargo.toml index 00324f05b28d..9234ca0d2e7b 100644 --- a/node/overseer/Cargo.toml +++ b/node/overseer/Cargo.toml @@ -5,8 +5,8 @@ authors.workspace = true edition.workspace = true [dependencies] -client = { package = "sc-client-api", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +client = { package = "sc-client-api", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } futures = "0.3.21" futures-timer = "3.0.2" parking_lot = "0.12.0" @@ -15,22 +15,27 @@ polkadot-node-primitives = { path = "../primitives" } polkadot-node-subsystem-types = { path = "../subsystem-types" } polkadot-node-metrics = { path = "../metrics" } polkadot-primitives = { path = "../../primitives" } -orchestra = "0.0.2" +orchestra = "0.2.0" gum = { package = "tracing-gum", path = "../gum" } -lru = "0.8" -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +lru = "0.9" +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } async-trait = "0.1.57" -tikv-jemalloc-ctl = "0.5.0" +tikv-jemalloc-ctl = { version = "0.5.0", optional = true } [dev-dependencies] -metered = { package = "prioritized-metered-channel", version = "0.2.0" } +metered = { package = "prioritized-metered-channel", version = "0.4.0" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } futures = { version = "0.3.21", features = ["thread-pool"] } femme = "2.2.1" assert_matches = "1.4.0" test-helpers = { package = "polkadot-primitives-test-helpers", path = "../../primitives/test-helpers" } +[target.'cfg(target_os = "linux")'.dependencies] +tikv-jemalloc-ctl = "0.5.0" + [features] default = [] expand = ["orchestra/expand"] +dotgraph = ["orchestra/dotgraph"] +jemalloc-allocator = ["dep:tikv-jemalloc-ctl"] diff --git a/node/overseer/examples/minimal-example.rs b/node/overseer/examples/minimal-example.rs index be6779819eb7..ac81a231daa0 100644 --- a/node/overseer/examples/minimal-example.rs +++ b/node/overseer/examples/minimal-example.rs @@ -32,7 +32,7 @@ use polkadot_overseer::{ gen::{FromOrchestra, SpawnedSubsystem}, HeadSupportsParachains, SubsystemError, }; -use polkadot_primitives::v2::{CandidateReceipt, Hash}; +use polkadot_primitives::{CandidateReceipt, Hash, PvfExecTimeoutKind}; struct AlwaysSupportsParachains; @@ -76,7 +76,7 @@ impl Subsystem1 { let msg = CandidateValidationMessage::ValidateFromChainState( candidate_receipt, PoV { block_data: BlockData(Vec::new()) }.into(), - Default::default(), + PvfExecTimeoutKind::Backing, tx, ); ctx.send_message(msg).await; diff --git a/node/overseer/src/dummy.rs b/node/overseer/src/dummy.rs index 0706244356aa..cc0d6ff99ba5 100644 --- a/node/overseer/src/dummy.rs +++ b/node/overseer/src/dummy.rs @@ -22,6 +22,9 @@ use crate::{ use lru::LruCache; use orchestra::{FromOrchestra, SpawnedSubsystem, Subsystem, SubsystemContext}; use polkadot_node_subsystem_types::{errors::SubsystemError, messages::*}; +// Generated dummy messages +use crate::messages::*; + /// A dummy subsystem that implements [`Subsystem`] for all /// types of messages. Used for tests or as a placeholder. #[derive(Clone, Copy, Debug)] @@ -187,7 +190,6 @@ where .span_per_active_leaf(Default::default()) .active_leaves(Default::default()) .known_leaves(LruCache::new(KNOWN_LEAVES_CACHE_SIZE)) - .leaves(Default::default()) .spawner(SpawnGlue(spawner)) .metrics(metrics) .supports_parachains(supports_parachains); diff --git a/node/overseer/src/lib.rs b/node/overseer/src/lib.rs index 78d1e1fe7889..f72426b1cb64 100644 --- a/node/overseer/src/lib.rs +++ b/node/overseer/src/lib.rs @@ -72,17 +72,18 @@ use futures::{channel::oneshot, future::BoxFuture, select, Future, FutureExt, St use lru::LruCache; use client::{BlockImportNotification, BlockchainEvents, FinalityNotification}; -use polkadot_primitives::v2::{Block, BlockNumber, Hash}; +use polkadot_primitives::{Block, BlockNumber, Hash}; +use self::messages::{BitfieldSigningMessage, PvfCheckerMessage}; use polkadot_node_subsystem_types::messages::{ ApprovalDistributionMessage, ApprovalVotingMessage, AvailabilityDistributionMessage, AvailabilityRecoveryMessage, AvailabilityStoreMessage, BitfieldDistributionMessage, - BitfieldSigningMessage, CandidateBackingMessage, CandidateValidationMessage, ChainApiMessage, - ChainSelectionMessage, CollationGenerationMessage, CollatorProtocolMessage, - DisputeCoordinatorMessage, DisputeDistributionMessage, GossipSupportMessage, - NetworkBridgeRxMessage, NetworkBridgeTxMessage, ProvisionerMessage, PvfCheckerMessage, - RuntimeApiMessage, StatementDistributionMessage, + CandidateBackingMessage, CandidateValidationMessage, ChainApiMessage, ChainSelectionMessage, + CollationGenerationMessage, CollatorProtocolMessage, DisputeCoordinatorMessage, + DisputeDistributionMessage, GossipSupportMessage, NetworkBridgeRxMessage, + NetworkBridgeTxMessage, ProvisionerMessage, RuntimeApiMessage, StatementDistributionMessage, }; + pub use polkadot_node_subsystem_types::{ errors::{SubsystemError, SubsystemResult}, jaeger, ActivatedLeaf, ActiveLeavesUpdate, LeafStatus, OverseerSignal, @@ -116,14 +117,13 @@ pub const KNOWN_LEAVES_CACHE_SIZE: NonZeroUsize = match NonZeroUsize::new(2 * 24 None => panic!("Known leaves cache size must be non-zero"), }; +#[cfg(any(target_os = "linux", feature = "jemalloc-allocator"))] mod memory_stats; #[cfg(test)] mod tests; use sp_core::traits::SpawnNamed; -use memory_stats::MemoryAllocationTracker; - /// Glue to connect `trait orchestra::Spawner` and `SpawnNamed` from `substrate`. pub struct SpawnGlue(pub S); @@ -369,7 +369,7 @@ pub async fn forward_events>(client: Arc

, mut hand /// # use std::time::Duration; /// # use futures::{executor, pin_mut, select, FutureExt}; /// # use futures_timer::Delay; -/// # use polkadot_primitives::v2::Hash; +/// # use polkadot_primitives::Hash; /// # use polkadot_overseer::{ /// # self as overseer, /// # OverseerSignal, @@ -458,7 +458,7 @@ pub struct Overseer { ])] candidate_validation: CandidateValidation, - #[subsystem(PvfCheckerMessage, sends: [ + #[subsystem(sends: [ CandidateValidationMessage, RuntimeApiMessage, ])] @@ -498,7 +498,7 @@ pub struct Overseer { ])] availability_recovery: AvailabilityRecovery, - #[subsystem(blocking, BitfieldSigningMessage, sends: [ + #[subsystem(blocking, sends: [ AvailabilityStoreMessage, RuntimeApiMessage, BitfieldDistributionMessage, @@ -592,6 +592,7 @@ pub struct Overseer { ApprovalVotingMessage, AvailabilityStoreMessage, AvailabilityRecoveryMessage, + ChainSelectionMessage, ])] dispute_coordinator: DisputeCoordinator, @@ -611,11 +612,6 @@ pub struct Overseer { /// Stores the [`jaeger::Span`] per active leaf. pub span_per_active_leaf: HashMap>, - /// A set of leaves that `Overseer` starts working with. - /// - /// Drained at the beginning of `run` and never used again. - pub leaves: Vec<(Hash, BlockNumber)>, - /// The set of the "active leaves". pub active_leaves: HashMap, @@ -652,8 +648,9 @@ where } let subsystem_meters = overseer.map_subsystems(ExtractNameAndMeters); + #[cfg(any(target_os = "linux", feature = "jemalloc-allocator"))] let collect_memory_stats: Box = - match MemoryAllocationTracker::new() { + match memory_stats::MemoryAllocationTracker::new() { Ok(memory_stats) => Box::new(move |metrics: &OverseerMetrics| match memory_stats.snapshot() { Ok(memory_stats_snapshot) => { @@ -664,8 +661,9 @@ where ); metrics.memory_stats_snapshot(memory_stats_snapshot); }, - Err(e) => - gum::debug!(target: LOG_TARGET, "Failed to obtain memory stats: {:?}", e), + Err(e) => { + gum::debug!(target: LOG_TARGET, "Failed to obtain memory stats: {:?}", e) + }, }), Err(_) => { gum::debug!( @@ -677,6 +675,9 @@ where }, }; + #[cfg(not(any(target_os = "linux", feature = "jemalloc-allocator")))] + let collect_memory_stats: Box = Box::new(|_| {}); + let metronome = Metronome::new(std::time::Duration::from_millis(950)).for_each(move |_| { collect_memory_stats(&metronome_metrics); @@ -711,20 +712,18 @@ where } /// Run the `Overseer`. - pub async fn run(mut self) -> SubsystemResult<()> { + /// + /// Logging any errors. + pub async fn run(self) { + if let Err(err) = self.run_inner().await { + gum::error!(target: LOG_TARGET, ?err, "Overseer exited with error"); + } + } + + async fn run_inner(mut self) -> SubsystemResult<()> { let metrics = self.metrics.clone(); spawn_metronome_metrics(&mut self, metrics)?; - // Notify about active leaves on startup before starting the loop - for (hash, number) in std::mem::take(&mut self.leaves) { - let _ = self.active_leaves.insert(hash, number); - if let Some((span, status)) = self.on_head_activated(&hash, None).await { - let update = - ActiveLeavesUpdate::start_work(ActivatedLeaf { hash, number, status, span }); - self.broadcast_signal(OverseerSignal::ActiveLeaves(update)).await?; - } - } - loop { select! { msg = self.events_rx.select_next_some() => { diff --git a/node/overseer/src/memory_stats.rs b/node/overseer/src/memory_stats.rs index 670762a4935c..9d7ebdb943ea 100644 --- a/node/overseer/src/memory_stats.rs +++ b/node/overseer/src/memory_stats.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use tikv_jemalloc_ctl::{epoch, stats, Error}; +use tikv_jemalloc_ctl::stats; #[derive(Clone)] pub struct MemoryAllocationTracker { @@ -24,20 +24,20 @@ pub struct MemoryAllocationTracker { } impl MemoryAllocationTracker { - pub fn new() -> Result { + pub fn new() -> Result { Ok(Self { - epoch: epoch::mib()?, + epoch: tikv_jemalloc_ctl::epoch::mib()?, allocated: stats::allocated::mib()?, resident: stats::resident::mib()?, }) } - pub fn snapshot(&self) -> Result { + pub fn snapshot(&self) -> Result { // update stats by advancing the allocation epoch self.epoch.advance()?; - let allocated: u64 = self.allocated.read()? as _; - let resident: u64 = self.resident.read()? as _; + let allocated = self.allocated.read()?; + let resident = self.resident.read()?; Ok(MemoryAllocationSnapshot { allocated, resident }) } } @@ -47,7 +47,7 @@ impl MemoryAllocationTracker { #[derive(Debug, Clone)] pub struct MemoryAllocationSnapshot { /// Total resident memory, in bytes. - pub resident: u64, + pub resident: usize, /// Total allocated memory, in bytes. - pub allocated: u64, + pub allocated: usize, } diff --git a/node/overseer/src/metrics.rs b/node/overseer/src/metrics.rs index bb7d98a68f2e..57858fe98073 100644 --- a/node/overseer/src/metrics.rs +++ b/node/overseer/src/metrics.rs @@ -19,8 +19,6 @@ use super::*; pub use polkadot_node_metrics::metrics::{self, prometheus, Metrics as MetricsTrait}; -use memory_stats::MemoryAllocationSnapshot; - /// Overseer Prometheus metrics. #[derive(Clone)] struct MetricsInner { @@ -40,7 +38,9 @@ struct MetricsInner { signals_sent: prometheus::GaugeVec, signals_received: prometheus::GaugeVec, + #[cfg(any(target_os = "linux", feature = "jemalloc-allocator"))] memory_stats_resident: prometheus::Gauge, + #[cfg(any(target_os = "linux", feature = "jemalloc-allocator"))] memory_stats_allocated: prometheus::Gauge, } @@ -67,10 +67,14 @@ impl Metrics { } } - pub(crate) fn memory_stats_snapshot(&self, memory_stats: MemoryAllocationSnapshot) { + #[cfg(any(target_os = "linux", feature = "jemalloc-allocator"))] + pub(crate) fn memory_stats_snapshot( + &self, + memory_stats: memory_stats::MemoryAllocationSnapshot, + ) { if let Some(metrics) = &self.0 { - metrics.memory_stats_allocated.set(memory_stats.allocated); - metrics.memory_stats_resident.set(memory_stats.resident); + metrics.memory_stats_allocated.set(memory_stats.allocated as u64); + metrics.memory_stats_resident.set(memory_stats.resident as u64); } } @@ -246,7 +250,7 @@ impl MetricsTrait for Metrics { )?, registry, )?, - + #[cfg(any(target_os = "linux", feature = "jemalloc-allocator"))] memory_stats_allocated: prometheus::register( prometheus::Gauge::::new( "polkadot_memory_allocated", @@ -254,6 +258,7 @@ impl MetricsTrait for Metrics { )?, registry, )?, + #[cfg(any(target_os = "linux", feature = "jemalloc-allocator"))] memory_stats_resident: prometheus::register( prometheus::Gauge::::new( "polkadot_memory_resident", diff --git a/node/overseer/src/tests.rs b/node/overseer/src/tests.rs index dee4c7cbbba9..f461196606e1 100644 --- a/node/overseer/src/tests.rs +++ b/node/overseer/src/tests.rs @@ -29,9 +29,9 @@ use polkadot_node_subsystem_types::{ messages::{NetworkBridgeEvent, RuntimeApiRequest}, ActivatedLeaf, LeafStatus, }; -use polkadot_primitives::v2::{ - CandidateHash, CandidateReceipt, CollatorPair, InvalidDisputeStatementKind, SessionIndex, - ValidDisputeStatementKind, ValidatorIndex, +use polkadot_primitives::{ + CandidateHash, CandidateReceipt, CollatorPair, InvalidDisputeStatementKind, PvfExecTimeoutKind, + SessionIndex, ValidDisputeStatementKind, ValidatorIndex, }; use crate::{ @@ -47,14 +47,6 @@ use sp_core::crypto::Pair as _; use super::*; -fn block_info_to_pair(blocks: impl IntoIterator) -> Vec<(Hash, BlockNumber)> { - Vec::from_iter( - blocks - .into_iter() - .map(|BlockInfo { hash, parent_hash: _, number }| (hash, number)), - ) -} - type SpawnedSubsystem = crate::gen::SpawnedSubsystem; struct TestSubsystem1(metered::MeteredSender); @@ -114,7 +106,7 @@ where ctx.send_message(CandidateValidationMessage::ValidateFromChainState( candidate_receipt, PoV { block_data: BlockData(Vec::new()) }.into(), - Default::default(), + PvfExecTimeoutKind::Backing, tx, )) .await; @@ -223,30 +215,26 @@ fn overseer_metrics_work() { executor::block_on(async move { let first_block_hash = [1; 32].into(); let second_block_hash = [2; 32].into(); - let third_block_hash = [3; 32].into(); let first_block = BlockInfo { hash: first_block_hash, parent_hash: [0; 32].into(), number: 1 }; let second_block = BlockInfo { hash: second_block_hash, parent_hash: first_block_hash, number: 2 }; - let third_block = - BlockInfo { hash: third_block_hash, parent_hash: second_block_hash, number: 3 }; let registry = prometheus::Registry::new(); let (overseer, handle) = dummy_overseer_builder(spawner, MockSupportsParachains, Some(®istry)) .unwrap() - .leaves(block_info_to_pair(vec![first_block])) .build() .unwrap(); let mut handle = Handle::new(handle); - let overseer_fut = overseer.run().fuse(); + let overseer_fut = overseer.run_inner().fuse(); pin_mut!(overseer_fut); + handle.block_imported(first_block).await; handle.block_imported(second_block).await; - handle.block_imported(third_block).await; handle .send_msg_anon(AllMessages::CandidateValidation(test_candidate_validation_msg())) .await; @@ -256,8 +244,8 @@ fn overseer_metrics_work() { res = overseer_fut => { assert!(res.is_ok()); let metrics = extract_metrics(®istry); - assert_eq!(metrics["activated"], 3); - assert_eq!(metrics["deactivated"], 2); + assert_eq!(metrics["activated"], 2); + assert_eq!(metrics["deactivated"], 1); assert_eq!(metrics["relayed"], 1); }, complete => (), @@ -302,7 +290,7 @@ fn overseer_ends_on_subsystem_exit() { .build() .unwrap(); - overseer.run().await.unwrap(); + overseer.run_inner().await.unwrap(); }) } @@ -379,14 +367,11 @@ fn overseer_start_stop_works() { executor::block_on(async move { let first_block_hash = [1; 32].into(); let second_block_hash = [2; 32].into(); - let third_block_hash = [3; 32].into(); let first_block = BlockInfo { hash: first_block_hash, parent_hash: [0; 32].into(), number: 1 }; let second_block = BlockInfo { hash: second_block_hash, parent_hash: first_block_hash, number: 2 }; - let third_block = - BlockInfo { hash: third_block_hash, parent_hash: second_block_hash, number: 3 }; let (tx_5, mut rx_5) = metered::channel(64); let (tx_6, mut rx_6) = metered::channel(64); @@ -395,44 +380,37 @@ fn overseer_start_stop_works() { .unwrap() .replace_candidate_validation(move |_| TestSubsystem5(tx_5)) .replace_candidate_backing(move |_| TestSubsystem6(tx_6)) - .leaves(block_info_to_pair(vec![first_block])) .build() .unwrap(); let mut handle = Handle::new(handle); - let overseer_fut = overseer.run().fuse(); + let overseer_fut = overseer.run_inner().fuse(); pin_mut!(overseer_fut); let mut ss5_results = Vec::new(); let mut ss6_results = Vec::new(); + handle.block_imported(first_block).await; handle.block_imported(second_block).await; - handle.block_imported(third_block).await; let expected_heartbeats = vec![ - OverseerSignal::ActiveLeaves(ActiveLeavesUpdate::start_work(ActivatedLeaf { - hash: first_block_hash, - number: 1, - span: Arc::new(jaeger::Span::Disabled), - status: LeafStatus::Fresh, - })), OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { activated: Some(ActivatedLeaf { - hash: second_block_hash, - number: 2, + hash: first_block_hash, + number: 1, span: Arc::new(jaeger::Span::Disabled), status: LeafStatus::Fresh, }), - deactivated: [first_block_hash].as_ref().into(), + deactivated: Default::default(), }), OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { activated: Some(ActivatedLeaf { - hash: third_block_hash, - number: 3, + hash: second_block_hash, + number: 2, span: Arc::new(jaeger::Span::Disabled), status: LeafStatus::Fresh, }), - deactivated: [second_block_hash].as_ref().into(), + deactivated: [first_block_hash].as_ref().into(), }), ]; @@ -494,33 +472,42 @@ fn overseer_finalize_works() { .unwrap() .replace_candidate_validation(move |_| TestSubsystem5(tx_5)) .replace_candidate_backing(move |_| TestSubsystem6(tx_6)) - .leaves(block_info_to_pair(vec![first_block, second_block])) .build() .unwrap(); let mut handle = Handle::new(handle); - let overseer_fut = overseer.run().fuse(); + let overseer_fut = overseer.run_inner().fuse(); pin_mut!(overseer_fut); let mut ss5_results = Vec::new(); let mut ss6_results = Vec::new(); + // activate two blocks + handle.block_imported(first_block).await; + handle.block_imported(second_block).await; + // this should stop work on both forks we started with earlier. handle.block_finalized(third_block).await; let expected_heartbeats = vec![ - OverseerSignal::ActiveLeaves(ActiveLeavesUpdate::start_work(ActivatedLeaf { - hash: first_block_hash, - number: 1, - span: Arc::new(jaeger::Span::Disabled), - status: LeafStatus::Fresh, - })), - OverseerSignal::ActiveLeaves(ActiveLeavesUpdate::start_work(ActivatedLeaf { - hash: second_block_hash, - number: 2, - span: Arc::new(jaeger::Span::Disabled), - status: LeafStatus::Fresh, - })), + OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { + activated: Some(ActivatedLeaf { + hash: first_block_hash, + number: 1, + span: Arc::new(jaeger::Span::Disabled), + status: LeafStatus::Fresh, + }), + deactivated: Default::default(), + }), + OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { + activated: Some(ActivatedLeaf { + hash: second_block_hash, + number: 2, + span: Arc::new(jaeger::Span::Disabled), + status: LeafStatus::Fresh, + }), + deactivated: Default::default(), + }), OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { deactivated: [first_block_hash, second_block_hash].as_ref().into(), ..Default::default() @@ -590,17 +577,18 @@ fn overseer_finalize_leaf_preserves_it() { .unwrap() .replace_candidate_validation(move |_| TestSubsystem5(tx_5)) .replace_candidate_backing(move |_| TestSubsystem6(tx_6)) - .leaves(block_info_to_pair(vec![first_block.clone(), second_block])) .build() .unwrap(); let mut handle = Handle::new(handle); - let overseer_fut = overseer.run().fuse(); + let overseer_fut = overseer.run_inner().fuse(); pin_mut!(overseer_fut); let mut ss5_results = Vec::new(); let mut ss6_results = Vec::new(); + handle.block_imported(first_block.clone()).await; + handle.block_imported(second_block).await; // This should stop work on the second block, but only the // second block. handle.block_finalized(first_block).await; @@ -684,7 +672,7 @@ fn do_not_send_empty_leaves_update_on_block_finalization() { let mut handle = Handle::new(handle); - let overseer_fut = overseer.run().fuse(); + let overseer_fut = overseer.run_inner().fuse(); pin_mut!(overseer_fut); let mut ss5_results = Vec::new(); @@ -791,7 +779,7 @@ fn test_candidate_validation_msg() -> CandidateValidationMessage { CandidateValidationMessage::ValidateFromChainState( candidate_receipt, pov, - Duration::default(), + PvfExecTimeoutKind::Backing, sender, ) } @@ -947,7 +935,7 @@ fn overseer_all_subsystems_receive_signals_and_messages() { .unwrap(); let mut handle = Handle::new(handle); - let overseer_fut = overseer.run().fuse(); + let overseer_fut = overseer.run_inner().fuse(); pin_mut!(overseer_fut); @@ -1046,6 +1034,7 @@ fn overseer_all_subsystems_receive_signals_and_messages() { #[test] fn context_holds_onto_message_until_enough_signals_received() { + const CHANNEL_CAPACITY: usize = 1024; let (candidate_validation_bounded_tx, _) = metered::channel(CHANNEL_CAPACITY); let (candidate_backing_bounded_tx, _) = metered::channel(CHANNEL_CAPACITY); let (statement_distribution_bounded_tx, _) = metered::channel(CHANNEL_CAPACITY); diff --git a/node/primitives/Cargo.toml b/node/primitives/Cargo.toml index f139b261df3f..762c24f89535 100644 --- a/node/primitives/Cargo.toml +++ b/node/primitives/Cargo.toml @@ -6,16 +6,17 @@ authors.workspace = true edition.workspace = true [dependencies] -bounded-vec = "0.6" +bounded-vec = "0.7" futures = "0.3.21" polkadot-primitives = { path = "../../primitives" } -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["derive"] } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-consensus-vrf = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-maybe-compressed-blob = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["derive"] } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-consensus-vrf = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-maybe-compressed-blob = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } polkadot-parachain = { path = "../../parachain", default-features = false } schnorrkel = "0.9.1" thiserror = "1.0.31" diff --git a/node/primitives/src/approval.rs b/node/primitives/src/approval.rs index ab9a4ce012bd..809dc57bcbc7 100644 --- a/node/primitives/src/approval.rs +++ b/node/primitives/src/approval.rs @@ -20,7 +20,7 @@ pub use sp_consensus_babe::Slot; pub use sp_consensus_vrf::schnorrkel::{Randomness, VRFOutput, VRFProof}; use parity_scale_codec::{Decode, Encode}; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ BlockNumber, CandidateHash, CandidateIndex, CoreIndex, Hash, Header, SessionIndex, ValidatorIndex, ValidatorSignature, }; diff --git a/node/primitives/src/disputes/message.rs b/node/primitives/src/disputes/message.rs index c31ff1ecb283..4a1650ed8ced 100644 --- a/node/primitives/src/disputes/message.rs +++ b/node/primitives/src/disputes/message.rs @@ -24,11 +24,11 @@ use thiserror::Error; use parity_scale_codec::{Decode, Encode}; use super::{InvalidDisputeVote, SignedDisputeStatement, ValidDisputeVote}; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ CandidateReceipt, DisputeStatement, SessionIndex, SessionInfo, ValidatorIndex, }; -/// A dispute initiating/participating message that is guaranteed to have been built from signed +/// A dispute initiating/participating message that have been built from signed /// statements. /// /// And most likely has been constructed correctly. This is used with diff --git a/node/primitives/src/disputes/mod.rs b/node/primitives/src/disputes/mod.rs index bad2ddbffc46..ebda150a3387 100644 --- a/node/primitives/src/disputes/mod.rs +++ b/node/primitives/src/disputes/mod.rs @@ -25,7 +25,7 @@ use sp_application_crypto::AppKey; use sp_keystore::{CryptoStore, Error as KeystoreError, SyncCryptoStorePtr}; use super::{Statement, UncheckedSignedFullStatement}; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ CandidateHash, CandidateReceipt, DisputeStatement, InvalidDisputeStatementKind, SessionIndex, SigningContext, ValidDisputeStatementKind, ValidatorId, ValidatorIndex, ValidatorSignature, }; diff --git a/node/primitives/src/lib.rs b/node/primitives/src/lib.rs index da0a0eca80be..18b7fa18a0c8 100644 --- a/node/primitives/src/lib.rs +++ b/node/primitives/src/lib.rs @@ -22,24 +22,24 @@ #![deny(missing_docs)] -use std::{pin::Pin, time::Duration}; +use std::pin::Pin; use bounded_vec::BoundedVec; use futures::Future; use parity_scale_codec::{Decode, Encode, Error as CodecError, Input}; use serde::{de, Deserialize, Deserializer, Serialize, Serializer}; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ BlakeTwo256, BlockNumber, CandidateCommitments, CandidateHash, CollatorPair, CommittedCandidateReceipt, CompactStatement, EncodeAs, Hash, HashT, HeadData, Id as ParaId, - OutboundHrmpMessage, PersistedValidationData, SessionIndex, Signed, UncheckedSigned, - UpwardMessage, ValidationCode, ValidatorIndex, MAX_CODE_SIZE, MAX_POV_SIZE, + PersistedValidationData, SessionIndex, Signed, UncheckedSigned, ValidationCode, ValidatorIndex, + MAX_CODE_SIZE, MAX_POV_SIZE, }; pub use sp_consensus_babe::{ AllowedSlots as BabeAllowedSlots, BabeEpochConfiguration, Epoch as BabeEpoch, }; -pub use polkadot_parachain::primitives::BlockData; +pub use polkadot_parachain::primitives::{BlockData, HorizontalMessages, UpwardMessages}; pub mod approval; @@ -64,20 +64,6 @@ pub const VALIDATION_CODE_BOMB_LIMIT: usize = (MAX_CODE_SIZE * 4u32) as usize; /// The bomb limit for decompressing PoV blobs. pub const POV_BOMB_LIMIT: usize = (MAX_POV_SIZE * 4u32) as usize; -/// The amount of time to spend on execution during backing. -pub const BACKING_EXECUTION_TIMEOUT: Duration = Duration::from_secs(2); - -/// The amount of time to spend on execution during approval or disputes. -/// -/// This is deliberately much longer than the backing execution timeout to -/// ensure that in the absence of extremely large disparities between hardware, -/// blocks that pass backing are considered executable by approval checkers or -/// dispute participants. -/// -/// NOTE: If this value is increased significantly, also check the dispute coordinator to consider -/// candidates longer into finalization: `DISPUTE_CANDIDATE_LIFETIME_AFTER_FINALIZATION`. -pub const APPROVAL_EXECUTION_TIMEOUT: Duration = Duration::from_secs(12); - /// How many blocks after finalization an information about backed/included candidate should be /// kept. /// @@ -227,7 +213,7 @@ pub type UncheckedSignedFullStatement = UncheckedSigned { +pub struct Collation { /// Messages destined to be interpreted by the Relay chain itself. - pub upward_messages: Vec, + pub upward_messages: UpwardMessages, /// The horizontal messages sent by the parachain. - pub horizontal_messages: Vec>, + pub horizontal_messages: HorizontalMessages, /// New validation code. pub new_validation_code: Option, /// The head-data produced as a result of execution. diff --git a/node/service/Cargo.toml b/node/service/Cargo.toml index 376010fbc6d7..dc1a886dfd47 100644 --- a/node/service/Cargo.toml +++ b/node/service/Cargo.toml @@ -7,62 +7,64 @@ edition.workspace = true [dependencies] # Substrate Client -sc-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -babe = { package = "sc-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -beefy-primitives = { git = "https://github.com/paritytech/substrate", package = "sp-beefy" , branch = "polkadot-v0.9.36" } -beefy-gadget = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -grandpa = { package = "sc-finality-grandpa", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -mmr-gadget = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-mmr-primitives = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-client-db = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-consensus-slots = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-executor = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-network-common = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-sync-state-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-basic-authorship = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-offchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -service = { package = "sc-service", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -telemetry = { package = "sc-telemetry", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +babe = { package = "sc-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +beefy = { package = "sc-consensus-beefy", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +grandpa = { package = "sc-consensus-grandpa", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +mmr-gadget = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-mmr-primitives = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-client-db = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-consensus-slots = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-executor = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-network-common = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-network-sync = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-sync-state-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-basic-authorship = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-offchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +service = { package = "sc-service", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +telemetry = { package = "sc-telemetry", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } # Substrate Primitives -sp-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -consensus_common = { package = "sp-consensus", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -grandpa_primitives = { package = "sp-finality-grandpa", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-offchain = { package = "sp-offchain", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-session = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-storage = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-trie = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +consensus_common = { package = "sp-consensus", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +beefy-primitives = { package = "sp-consensus-beefy", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +grandpa_primitives = { package = "sp-consensus-grandpa", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-offchain = { package = "sp-offchain", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-session = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-storage = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-trie = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } # Substrate Pallets -pallet-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -pallet-im-online = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -pallet-staking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +pallet-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +pallet-im-online = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +pallet-staking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } # Substrate Other -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -prometheus-endpoint = { package = "substrate-prometheus-endpoint", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +prometheus-endpoint = { package = "substrate-prometheus-endpoint", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +frame-benchmarking-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } # External Crates futures = "0.3.21" @@ -73,10 +75,11 @@ serde_json = "1.0.81" thiserror = "1.0.31" kvdb = "0.13.0" kvdb-rocksdb = { version = "0.17.0", optional = true } -parity-db = { version = "0.4.2", optional = true } +parity-db = { version = "0.4.4", optional = true } async-trait = "0.1.57" -lru = "0.8" +lru = "0.9" +log = "0.4.17" # Polkadot polkadot-node-core-parachains-inherent = { path = "../core/parachains-inherent" } @@ -131,7 +134,6 @@ polkadot-statement-distribution = { path = "../network/statement-distribution", polkadot-test-client = { path = "../test/client" } polkadot-node-subsystem-test-helpers = { path = "../subsystem-test-helpers" } env_logger = "0.9.0" -log = "0.4.17" assert_matches = "1.5.0" tempfile = "3.2" diff --git a/node/service/chain-specs/kusama.json b/node/service/chain-specs/kusama.json index 581f40aff4d6..b917a1fb12d0 100644 --- a/node/service/chain-specs/kusama.json +++ b/node/service/chain-specs/kusama.json @@ -19,13 +19,24 @@ "/dns/kusama-bootnode-0.paritytech.net/tcp/30333/p2p/12D3KooWSueCPH3puP2PcvqPJdNaDNF3jMZjtJtDiSy35pWrbt5h", "/dns/kusama-bootnode-0.paritytech.net/tcp/30334/ws/p2p/12D3KooWSueCPH3puP2PcvqPJdNaDNF3jMZjtJtDiSy35pWrbt5h", "/dns/kusama-bootnode-1.paritytech.net/tcp/30333/p2p/12D3KooWQKqane1SqWJNWMQkbia9qiMWXkcHtAdfW5eVF8hbwEDw", - "/dns/kusama-bootnode.dwellir.com/tcp/30333/ws/p2p/12D3KooWFj2ndawdYyk2spc42Y2arYwb2TUoHLHFAsKuHRzWXwoJ", + "/dns/kusama-boot.dwellir.com/tcp/30333/ws/p2p/12D3KooWFj2ndawdYyk2spc42Y2arYwb2TUoHLHFAsKuHRzWXwoJ", + "/dns/kusama-boot.dwellir.com/tcp/443/wss/p2p/12D3KooWFj2ndawdYyk2spc42Y2arYwb2TUoHLHFAsKuHRzWXwoJ", "/dns/boot.stake.plus/tcp/31333/p2p/12D3KooWLa1UyG5xLPds2GbiRBCTJjpsVwRWHWN7Dff14yiNJRpR", "/dns/boot.stake.plus/tcp/31334/wss/p2p/12D3KooWLa1UyG5xLPds2GbiRBCTJjpsVwRWHWN7Dff14yiNJRpR", "/dns/boot-node.helikon.io/tcp/7060/p2p/12D3KooWL4KPqfAsPE2aY1g5Zo1CxsDwcdJ7mmAghK7cg6M2fdbD", "/dns/boot-node.helikon.io/tcp/7062/wss/p2p/12D3KooWL4KPqfAsPE2aY1g5Zo1CxsDwcdJ7mmAghK7cg6M2fdbD", "/dns/kusama.bootnode.amforc.com/tcp/30333/p2p/12D3KooWLx6nsj6Fpd8biP1VDyuCUjazvRiGWyBam8PsqRJkbUb9", - "/dns/kusama.bootnode.amforc.com/tcp/30334/wss/p2p/12D3KooWLx6nsj6Fpd8biP1VDyuCUjazvRiGWyBam8PsqRJkbUb9" + "/dns/kusama.bootnode.amforc.com/tcp/30334/wss/p2p/12D3KooWLx6nsj6Fpd8biP1VDyuCUjazvRiGWyBam8PsqRJkbUb9", + "/dns/kusama-bootnode.polkadotters.com/tcp/30333/p2p/12D3KooWHB5rTeNkQdXNJ9ynvGz8Lpnmsctt7Tvp7mrYv6bcwbPG", + "/dns/kusama-bootnode.polkadotters.com/tcp/30334/wss/p2p/12D3KooWHB5rTeNkQdXNJ9ynvGz8Lpnmsctt7Tvp7mrYv6bcwbPG", + "/dns/ksm-bootnode-cr.gatotech.network/tcp/31320/p2p/12D3KooWRNZXf99BfzQDE1C8YhuBbuy7Sj18UEf7FNpD8egbURYD", + "/dns/ksm-bootnode-cr.gatotech.network/tcp/31420/ws/p2p/12D3KooWRNZXf99BfzQDE1C8YhuBbuy7Sj18UEf7FNpD8egbURYD", + "/dns/ksm-bootnode-cr.gatotech.network/tcp/31520/wss/p2p/12D3KooWRNZXf99BfzQDE1C8YhuBbuy7Sj18UEf7FNpD8egbURYD", + "/dns/boot-kusama.metaspan.io/tcp/23012/p2p/12D3KooWE1tq9ZL9AAxMiUBBqy1ENmh5pwfWabnoBPMo8gFPXhn6", + "/dns/boot-kusama.metaspan.io/tcp/23015/ws/p2p/12D3KooWE1tq9ZL9AAxMiUBBqy1ENmh5pwfWabnoBPMo8gFPXhn6", + "/dns/boot-kusama.metaspan.io/tcp/23016/wss/p2p/12D3KooWE1tq9ZL9AAxMiUBBqy1ENmh5pwfWabnoBPMo8gFPXhn6", + "/dns/kusama-bootnode.turboflakes.io/tcp/30305/p2p/12D3KooWR6cMhCYRhbJdqYZfzWZT6bcck3unpRLk8GBQGmHBgPwu", + "/dns/kusama-bootnode.turboflakes.io/tcp/30405/wss/p2p/12D3KooWR6cMhCYRhbJdqYZfzWZT6bcck3unpRLk8GBQGmHBgPwu" ], "telemetryEndpoints": [ [ @@ -42,8 +53,8 @@ "consensusEngine": null, "forkBlocks": null, "badBlocks": [ - "0x15b1b925b0aa5cfe43c88cd024f74258cb5cfe3af424882c901014e8acd0d241", - "0x2563260209012232649ab9dc003f62e274c684037de499a23062f8e0e816c605" + "0x15b1b925b0aa5cfe43c88cd024f74258cb5cfe3af424882c901014e8acd0d241", + "0x2563260209012232649ab9dc003f62e274c684037de499a23062f8e0e816c605" ], "genesis": { "raw": [ diff --git a/node/service/chain-specs/polkadot.json b/node/service/chain-specs/polkadot.json index 8fc8ac63ba32..cc7d326625b9 100644 --- a/node/service/chain-specs/polkadot.json +++ b/node/service/chain-specs/polkadot.json @@ -19,13 +19,24 @@ "/dns/p2p.5.polkadot.network/tcp/30333/p2p/12D3KooWSRjL9LcEQd5u2fQTbyLxTEHq1tUFgQ6amXSp8Eu7TfKP", "/dns/cc1-0.parity.tech/tcp/30333/p2p/12D3KooWSz8r2WyCdsfWHgPyvD8GKQdJ1UAiRmrcrs8sQB3fe2KU", "/dns/cc1-1.parity.tech/tcp/30333/p2p/12D3KooWFN2mhgpkJsDBuNuE5427AcDrsib8EoqGMZmkxWwx3Md4", - "/dns/polkadot-bootnode.dwellir.com/tcp/30333/ws/p2p/12D3KooWKvdDyRKqUfSAaUCbYiLwKY8uK3wDWpCuy2FiDLbkPTDJ", + "/dns/polkadot-boot.dwellir.com/tcp/30334/ws/p2p/12D3KooWKvdDyRKqUfSAaUCbYiLwKY8uK3wDWpCuy2FiDLbkPTDJ", + "/dns/polkadot-boot.dwellir.com/tcp/443/wss/p2p/12D3KooWKvdDyRKqUfSAaUCbYiLwKY8uK3wDWpCuy2FiDLbkPTDJ", "/dns/boot.stake.plus/tcp/30333/p2p/12D3KooWKT4ZHNxXH4icMjdrv7EwWBkfbz5duxE5sdJKKeWFYi5n", "/dns/boot.stake.plus/tcp/30334/wss/p2p/12D3KooWKT4ZHNxXH4icMjdrv7EwWBkfbz5duxE5sdJKKeWFYi5n", "/dns/boot-node.helikon.io/tcp/7070/p2p/12D3KooWS9ZcvRxyzrSf6p63QfTCWs12nLoNKhGux865crgxVA4H", "/dns/boot-node.helikon.io/tcp/7072/wss/p2p/12D3KooWS9ZcvRxyzrSf6p63QfTCWs12nLoNKhGux865crgxVA4H", "/dns/polkadot.bootnode.amforc.com/tcp/30333/p2p/12D3KooWAsuCEVCzUVUrtib8W82Yne3jgVGhQZN3hizko5FTnDg3", - "/dns/polkadot.bootnode.amforc.com/tcp/30334/wss/p2p/12D3KooWAsuCEVCzUVUrtib8W82Yne3jgVGhQZN3hizko5FTnDg3" + "/dns/polkadot.bootnode.amforc.com/tcp/30334/wss/p2p/12D3KooWAsuCEVCzUVUrtib8W82Yne3jgVGhQZN3hizko5FTnDg3", + "/dns/polkadot-bootnode.polkadotters.com/tcp/30333/p2p/12D3KooWPAVUgBaBk6n8SztLrMk8ESByncbAfRKUdxY1nygb9zG3", + "/dns/polkadot-bootnode.polkadotters.com/tcp/30334/wss/p2p/12D3KooWPAVUgBaBk6n8SztLrMk8ESByncbAfRKUdxY1nygb9zG3", + "/dns/dot-bootnode-cr.gatotech.network/tcp/31310/p2p/12D3KooWK4E16jKk9nRhvC4RfrDVgcZzExg8Q3Q2G7ABUUitks1w", + "/dns/dot-bootnode-cr.gatotech.network/tcp/31410/ws/p2p/12D3KooWK4E16jKk9nRhvC4RfrDVgcZzExg8Q3Q2G7ABUUitks1w", + "/dns/dot-bootnode-cr.gatotech.network/tcp/31510/wss/p2p/12D3KooWK4E16jKk9nRhvC4RfrDVgcZzExg8Q3Q2G7ABUUitks1w", + "/dns/boot-polkadot.metaspan.io/tcp/13012/p2p/12D3KooWRjHFApinuqSBjoaDjQHvxwubQSpEVy5hrgC9Smvh92WF", + "/dns/boot-polkadot.metaspan.io/tcp/13015/ws/p2p/12D3KooWRjHFApinuqSBjoaDjQHvxwubQSpEVy5hrgC9Smvh92WF", + "/dns/boot-polkadot.metaspan.io/tcp/13016/wss/p2p/12D3KooWRjHFApinuqSBjoaDjQHvxwubQSpEVy5hrgC9Smvh92WF", + "/dns/polkadot-bootnode.turboflakes.io/tcp/30300/p2p/12D3KooWHJBMZgt7ymAdTRtadPcGXpJw79vBGe8z53r9JMkZW7Ha", + "/dns/polkadot-bootnode.turboflakes.io/tcp/30400/wss/p2p/12D3KooWHJBMZgt7ymAdTRtadPcGXpJw79vBGe8z53r9JMkZW7Ha" ], "telemetryEndpoints": [ [ @@ -11695,6 +11706,6 @@ } }, "codeSubstitutes": { - "5203203": "0x0061736d010000000184033660037f7f7f017f60027f7f017f60027f7f0060017f0060047f7f7f7f0060057f7f7f7f7f0060037f7f7f0060017f017e60027e7e0060037f7e7e0060027f7e017f60037f7e7f017f6000017f60027f7f017e60037f7f7e017e60000060017e017f60017f017f60017e0060017e017e60047f7e7e7e017f60027f7e017e6000017e60037e7e7f017e60027e7f017f60057f7f7f7f7f017f60047f7f7f7f017f60067f7f7f7f7f7f0060037e7f7f0060047f7f7f7e0060047f7f7e7e0060067f7f7f7e7e7f0060027e7f0060047e7f7f7f0060097f7f7f7f7f7f7f7f7e0060067f7f7f7f7e7e00600a7f7f7f7f7f7f7f7f7f7f0060097f7f7f7f7f7f7f7f7f0060077f7f7e7e7e7f7f0060027f7e0060077f7e7e7e7e7e7e0060047e7e7e7e017f60037e7f7f017f60047f7e7f7f0060047f7e7e7f0060057f7f7f7e7e0060057e7f7e7e7f0060077f7f7e7e7f7e7e0060067f7f7f7f7f7f017f60057f7f7e7e7f0060057f7f7f7e7e017f60057f7e7e7e7e017f60057f7e7e7f7f0060057f7e7e7e7e0002a70e2d03656e76066d656d6f727902001403656e76206578745f6f6666636861696e5f696e6465785f7365745f76657273696f6e5f31000803656e76196578745f6c6f6767696e675f6c6f675f76657273696f6e5f31000903656e76256578745f63727970746f5f656432353531395f67656e65726174655f76657273696f6e5f31000a03656e76236578745f63727970746f5f656432353531395f7665726966795f76657273696f6e5f31000b03656e76286578745f63727970746f5f66696e6973685f62617463685f7665726966795f76657273696f6e5f31000c03656e762c6578745f63727970746f5f736563703235366b315f65636473615f7265636f7665725f76657273696f6e5f31000d03656e76376578745f63727970746f5f736563703235366b315f65636473615f7265636f7665725f636f6d707265737365645f76657273696f6e5f31000d03656e76256578745f63727970746f5f737232353531395f67656e65726174655f76657273696f6e5f31000a03656e76286578745f63727970746f5f737232353531395f7075626c69635f6b6579735f76657273696f6e5f31000703656e76216578745f63727970746f5f737232353531395f7369676e5f76657273696f6e5f31000e03656e76236578745f63727970746f5f737232353531395f7665726966795f76657273696f6e5f32000b03656e76276578745f63727970746f5f73746172745f62617463685f7665726966795f76657273696f6e5f31000f03656e762a6578745f747269655f626c616b65325f3235365f6f7264657265645f726f6f745f76657273696f6e5f31001003656e761c6578745f616c6c6f6361746f725f667265655f76657273696f6e5f31000303656e761e6578745f616c6c6f6361746f725f6d616c6c6f635f76657273696f6e5f31001103656e76206578745f68617368696e675f626c616b65325f3132385f76657273696f6e5f31001003656e76206578745f68617368696e675f626c616b65325f3235365f76657273696f6e5f31001003656e76206578745f68617368696e675f6b656363616b5f3235365f76657273696f6e5f31001003656e761e6578745f68617368696e675f74776f785f3132385f76657273696f6e5f31001003656e761d6578745f68617368696e675f74776f785f36345f76657273696f6e5f31001003656e761c6578745f6d6973635f7072696e745f6865785f76657273696f6e5f31001203656e761c6578745f6d6973635f7072696e745f6e756d5f76657273696f6e5f31001203656e761d6578745f6d6973635f7072696e745f757466385f76657273696f6e5f31001203656e76226578745f6d6973635f72756e74696d655f76657273696f6e5f76657273696f6e5f31001303656e76236578745f6f6666636861696e5f69735f76616c696461746f725f76657273696f6e5f31000c03656e76346578745f6f6666636861696e5f6c6f63616c5f73746f726167655f636f6d706172655f616e645f7365745f76657273696f6e5f31001403656e76286578745f6f6666636861696e5f6c6f63616c5f73746f726167655f6765745f76657273696f6e5f31001503656e76286578745f6f6666636861696e5f6c6f63616c5f73746f726167655f7365745f76657273696f6e5f31000903656e76246578745f6f6666636861696e5f6e6574776f726b5f73746174655f76657273696f6e5f31001603656e76226578745f6f6666636861696e5f72616e646f6d5f736565645f76657273696f6e5f31000c03656e76296578745f6f6666636861696e5f7375626d69745f7472616e73616374696f6e5f76657273696f6e5f31001303656e761c6578745f73746f726167655f617070656e645f76657273696f6e5f31000803656e76226578745f73746f726167655f6368616e6765735f726f6f745f76657273696f6e5f31001303656e761b6578745f73746f726167655f636c6561725f76657273696f6e5f31001203656e76226578745f73746f726167655f636c6561725f7072656669785f76657273696f6e5f31001203656e76286578745f73746f726167655f636f6d6d69745f7472616e73616374696f6e5f76657273696f6e5f31000f03656e761c6578745f73746f726167655f6578697374735f76657273696f6e5f31001003656e76196578745f73746f726167655f6765745f76657273696f6e5f31001303656e761e6578745f73746f726167655f6e6578745f6b65795f76657273696f6e5f31001303656e761a6578745f73746f726167655f726561645f76657273696f6e5f31001703656e762a6578745f73746f726167655f726f6c6c6261636b5f7472616e73616374696f6e5f76657273696f6e5f31000f03656e761a6578745f73746f726167655f726f6f745f76657273696f6e5f31001603656e76196578745f73746f726167655f7365745f76657273696f6e5f31000803656e76276578745f73746f726167655f73746172745f7472616e73616374696f6e5f76657273696f6e5f31000f03c408c20811110303000011110f0f0f0f0f060602060005000101020102020201180307191a06000501010111110106061b01010101060101000101000101001c00010102011106060202020206060206060606060204010203060604051d05010101020201060201010206020602030602060606060606060602060d0202020202020202020202020602040202020202020206060302010202060202020202020202020202020202020f02020f02020202020202020202020203030202020202020202020202020202030204020202020102061e061e03020206020303020302020202030206060102021a0202020202020202020001010101010106060306050601040303030401050406020606000203020400030303030602021e0206110602061f1e0302030604020602060406020602060603060302021b020201060602030620020306010206020202060403160605020502020502060206070f021103020202060606020606061b040302020203020202030606020c06060202060206050307020602060202020202030303020202020202022103030202110303030203030202030202020206020303030202060303030203030202020203030202020202020202020303030202020303020302020202030303020603020202060602061f0606030602220206062306020602030402010206110f020202020203020202020202030303020202020303020305060606021e1e021e1e0202060206010602241b11110307070204030303062502020202020202020302030303030402262702280202030302032002020303030202021a0202020302030229020f02020604020606020202020202020202060202020202020202022a2b020601020f02110f0f0202020606060206060606020606060606060202060606022c060206060206060206060202020202020203030202020202020202020302020202020206020206050205050d06020306112d060306060203020102020203060211022e0606021e031e0304020202020101010202020204060302040303030303030303030303030303030303030303030303030101020206110202010202040606060606060202020202020604020202030206022f02030402020f03043003040202032904110c020211010201020301030303020202020206061131010303030903030302321a03030302010101020601030f0f040202020203021103050502020203030202020205270202020203030303030203030302030602030303030d0d030f020c03020d0d0d0d0d0d0d0d060d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d040d0d0d0d0d0d0d0d06060d0d0d0d020202021d0511020204020202021d05110402030303020203020202030203020202040206020204031b01021a040203030202030202020202021b051b0602040c0606030202020233060602040303030303020202020234031202030603030306030206110105270202010311020101022c35353535000000002c0407017001910291020619037f01418080c0000b7f0041ecf5cc000b7f0041ecf5cc000b07980b2a195f5f696e6469726563745f66756e6374696f6e5f7461626c6501000c436f72655f76657273696f6e00c20712436f72655f657865637574655f626c6f636b00c30715436f72655f696e697469616c697a655f626c6f636b00ca07114d657461646174615f6d6574616461746100cb071c426c6f636b4275696c6465725f6170706c795f65787472696e73696300cc071b426c6f636b4275696c6465725f66696e616c697a655f626c6f636b00cd0720426c6f636b4275696c6465725f696e686572656e745f65787472696e7369637300ce071c426c6f636b4275696c6465725f636865636b5f696e686572656e747300cf0718426c6f636b4275696c6465725f72616e646f6d5f7365656400d0072b5461676765645472616e73616374696f6e51756575655f76616c69646174655f7472616e73616374696f6e00d107214f6666636861696e576f726b65724170695f6f6666636861696e5f776f726b657200d3071850617261636861696e486f73745f76616c696461746f727300d4071e50617261636861696e486f73745f76616c696461746f725f67726f75707300d5072050617261636861696e486f73745f617661696c6162696c6974795f636f72657300d6072750617261636861696e486f73745f7065727369737465645f76616c69646174696f6e5f6461746100d7072650617261636861696e486f73745f636865636b5f76616c69646174696f6e5f6f75747075747300d8072550617261636861696e486f73745f73657373696f6e5f696e6465785f666f725f6368696c6400d9071a50617261636861696e486f73745f73657373696f6e5f696e666f00da071d50617261636861696e486f73745f76616c69646174696f6e5f636f646500db072850617261636861696e486f73745f686973746f726963616c5f76616c69646174696f6e5f636f646500dc072c50617261636861696e486f73745f63616e6469646174655f70656e64696e675f617661696c6162696c69747900dd071e50617261636861696e486f73745f63616e6469646174655f6576656e747300de071a50617261636861696e486f73745f646d715f636f6e74656e747300df072c50617261636861696e486f73745f696e626f756e645f68726d705f6368616e6e656c735f636f6e74656e747300e0071e4772616e6470614170695f6772616e6470615f617574686f72697469657300e107384772616e6470614170695f7375626d69745f7265706f72745f65717569766f636174696f6e5f756e7369676e65645f65787472696e73696300e207274772616e6470614170695f67656e65726174655f6b65795f6f776e6572736869705f70726f6f6600e30715426162654170695f636f6e66696775726174696f6e00e5071b426162654170695f63757272656e745f65706f63685f737461727400e60715426162654170695f63757272656e745f65706f636800e70712426162654170695f6e6578745f65706f636800e80724426162654170695f67656e65726174655f6b65795f6f776e6572736869705f70726f6f6600e90735426162654170695f7375626d69745f7265706f72745f65717569766f636174696f6e5f756e7369676e65645f65787472696e73696300ea0721417574686f72697479446973636f766572794170695f617574686f72697469657300eb072153657373696f6e4b6579735f67656e65726174655f73657373696f6e5f6b65797300ec071f53657373696f6e4b6579735f6465636f64655f73657373696f6e5f6b65797300ef071d4163636f756e744e6f6e63654170695f6163636f756e745f6e6f6e636500f007205472616e73616374696f6e5061796d656e744170695f71756572795f696e666f00f107275472616e73616374696f6e5061796d656e744170695f71756572795f6665655f64657461696c7300f2070a5f5f646174615f656e6403010b5f5f686561705f626173650302098f04010041010b900243475950dd0851525a69ee02f902ea05ec05ed058f015f5eb9073f40416a4a6061626364657e870189015b85028c08f603f706f806890288028702dc03f6069c029d029e02b802ae02b602b002b102b502b702b902e10898059405ba03b903b803b703e703dd05c103d905c703cb03ca03aa08cf03f203ce03e503a808cd03e203e103e003df03e803e603a708f303f103fb03fa03f903f803a70796059305b004af04b5045cf904f8048a08f704ff0483058105de05db05dc05da05d8059e05d705d605e405e305e205e105e005930694069206b506b606b706c308c2089e06c408d408d208c108b404b3049f06d304ad04ac04ae04d404b407b307b507da03d903a006db0385078407a1068607d306fe048005b807b707c007d505d405a206df058006f604a306c003bf03a406d303a607a507a506be07b207b107a606bf07a308a208a706a608b60888088708a8068f088b08c903c803a906cc03d503d108d008aa06f503f403ab06f703fe03c503c403ac06c603de0281078007ad0682079c07cb08ae06de03dd03af06e403fc03b503b403b006b603d403ef03ee03b106f003fd0384028302b2068602ad02f406f306b306f50694078b078a07b4068c07f106fa06f90688019a0597059c058d078f07900793078e07a807b607ba07c107e208d8088d088908ba02bb02a508a408ab08a908a9029d0599059b05c908c808c708c608c50890010abcce68c20806002000102d0b0700200010df080b06002000102f0b0700200010de080b0a0020002001200210310b2a01017f0240200210df082203450d002003200020022001200120024b1b10e9081a200010de080b20030b0600200010330b1d01017f0240200010df082201450d0020014100200010eb081a0b20010b05001035000b05001037000b05001034000b1700410141cce2cc00410741d4e2cc00412210d90800000b110041d0f0cc004111418080c0001039000b4701017f230041206b22032400200341146a4100360200200341d4e2cc00360210200342013702042003200136021c200320003602182003200341186a360200200320021044000b950101017f02400240200141004e0d0041012102410021010c010b0240024002400240200228020022030d002001450d022001102c21020c010b0240200228020422020d002001450d022001102c21020c010b200320022001103021020b20020d012000200136020441012101410121020c020b410121020b20002002360204410021020b20002002360200200041086a20013602000bde0201067f230041206b2202240020012802002103024002402001280204220441037422050d00410021060c010b200341046a2107410021060340200728020020066a2106200741086a2107200541786a22050d000b0b024002400240200141146a2802000d00200621070c010b02402004450d00410021054101210402402006410f4b0d00200341046a280200450d030b200620066a220720064f0d010c020b4100410041ac80c000103c000b02402007417f4c0d00024020070d0041002105410121040c020b200721052007102c22040d011036000b1038000b20004100360208200020043602002000200536020420022000360204200241086a41106a200141106a290200370300200241086a41086a200141086a290200370300200220012902003703080240200241046a41bc80c000200241086a103d0d00200241206a24000f0b41d480c0004133200241086a418881c000419881c000103e000b6c01017f230041306b2203240020032001360204200320003602002003411c6a41023602002003412c6a41013602002003420237020c2003418c84c000360208200341013602242003200341206a360218200320033602282003200341046a360220200341086a20021044000bc20501097f230041306b22032400200341246a2001360200200341033a00282003428080808080043703082003200036022020034100360218200341003602100240024002400240024020022802082204450d0020022802002105200228020422062002410c6a2802002207200720064b1b2208450d01200020052802002005280204200128020c1100000d03200541086a2100200228021021092008210a034020032004411c6a2d00003a00282003200441046a290200422089370308200441186a28020021014100210741002102024002400240200441146a2802000e03010002010b2001410374210b410021022009200b6a220b2802044102470d01200b28020028020021010b410121020b2003200136021420032002360210200441106a28020021020240024002402004410c6a2802000e03010002010b20024103742101200920016a22012802044102470d01200128020028020021020b410121070b2003200236021c20032007360218200920042802004103746a2202280200200341086a20022802041101000d04200a417f6a220a450d03200441206a2104200041046a210220002802002101200041086a2100200328022020012002280200200328022428020c110000450d000c040b0b2002280200210520022802042206200241146a2802002204200420064b1b2208450d0020022802102104200020052802002005280204200128020c1100000d02200541086a21002008210203402004280200200341086a200441046a2802001101000d032002417f6a2202450d02200441086a2104200041046a210120002802002107200041086a2100200328022020072001280200200328022428020c110000450d000c030b0b410021080b0240200620084d0d002003280220200520084103746a22042802002004280204200328022428020c1100000d010b410021040c010b410121040b200341306a240020040b7e01017f230041c0006b220524002005200136020c2005200036020820052003360214200520023602102005412c6a41023602002005413c6a41033602002005420237021c20054190e2cc00360218200541043602342005200541306a3602282005200541106a3602382005200541086a360230200541186a20041044000b8d0201047f230041206b22032400024002402000280200220041046a2802002204200041086a28020022056b2002490d00200028020021040c010b0240200520026a22062005490d00200441017422052006200520064b1b22054108200541084b1b21050240024020040d00200341003602100c010b200341106a41086a410136020020032004360214200320002802003602100b20032005200341106a103a200341086a2802002105024020032802004101460d00200020032802042204360200200041046a2005360200200041086a28020021050c020b2005450d001036000b1038000b200420056a2001200210e9081a200041086a2200200028020020026a360200200341206a240041000bbf0501047f230041306b2202240020002802002100024002400240024002400240024002402001418001490d002002410036020c2001418010490d0102402001418080044f0d0020022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d410321010c040b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d410421010c030b024020002802082203200041046a280200460d00200028020021040c020b200341016a22042003490d04200341017422052004200520044b1b22044108200441084b1b21040240024020030d00200241003602200c010b200241206a41086a410136020020022003360224200220002802003602200b200241106a2004200241206a103a200241186a2802002103024020022802104101460d00200020022802142204360200200041046a2003360200200028020821030c020b20030d030c040b20022001413f71418001723a000d2002200141067641c001723a000c410221010c010b200420036a20013a00002000200028020841016a3602080c040b0240200041046a2802002204200041086a28020022036b2001490d00200028020021040c030b200320016a22052003490d01200441017422032005200320054b1b22034108200341084b1b21030240024020040d00200241003602200c010b200241206a41086a410136020020022004360224200220002802003602200b200241106a2003200241206a103a200241106a41086a2802002103024020022802104101460d00200020022802142204360200200041046a2003360200200041086a28020021030c030b2003450d010b1036000b1038000b200420036a2002410c6a200110e9081a200041086a2200200028020020016a3602000b200241306a240041000b6301017f230041206b2202240020022000280200360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41bc80c000200241086a103d2101200241206a240020010b6f01017f230041306b2202240020022001360204200220003602002002411c6a41023602002002412c6a41013602002002420337020c2002418c82c000360208200241013602242002200241206a3602182002200241046a36022820022002360220200241086a41a482c0001044000b0b002000350200200110480b3401017f230041106b220224002002200136020c200220003602082002419c84c000360204200241d4e2cc0036020020021049000b6f01017f230041306b2202240020022001360204200220003602002002411c6a41023602002002412c6a41013602002002420337020c200241fc82c000360208200241013602242002200241206a3602182002200241046a36022820022002360220200241086a419483c0001044000b6f01017f230041306b2202240020022001360204200220003602002002411c6a41023602002002412c6a41013602002002420337020c200241d083c000360208200241013602242002200241206a3602182002200241046a36022820022002360220200241086a41e883c0001044000b0d0020002802001a037f0c000b0bd20203027f017e037f230041306b22022400412721030240024020004290ce005a0d00200021040c010b412721030340200241096a20036a2205417c6a20004290ce0080220442f0b17f7e20007ca7220641ffff037141e4006e220741017441de84c0006a2f00003b00002005417e6a2007419c7f6c20066a41ffff037141017441de84c0006a2f00003b00002003417c6a2103200042ffc1d72f5621052004210020050d000b0b02402004a7220541e3004c0d00200241096a2003417e6a22036a2004a7220641ffff037141e4006e2205419c7f6c20066a41ffff037141017441de84c0006a2f00003b00000b02400240200541094a0d00200241096a2003417f6a22036a200541306a3a00000c010b200241096a2003417e6a22036a200541017441de84c0006a2f00003b00000b200141d4e2cc004100200241096a20036a412720036b104b2103200241306a240020030b6f01017f230041c0006b220124002001200036020c200141346a410136020020014201370224200141c4e2cc003602202001410536023c2001200141386a36023020012001410c6a360238200141106a200141206a103b410141cce2cc0041072001280210200128021810d90800000b0c0042f3a38eecb2fea7f4570bea0501067f20002802002205410171220620046a21070240024020054104710d00410021010c010b4100210802402002450d00200221092001210a03402008200a2d000041c00171418001476a2108200a41016a210a2009417f6a22090d000b0b200820076a21070b412b418080c40020061b21080240024020002802084101460d004101210a2000200820012002104c0d012000280218200320042000411c6a28020028020c1100000f0b02402000410c6a280200220920074b0d004101210a2000200820012002104c0d012000280218200320042000411c6a28020028020c1100000f0b024002400240024002402005410871450d00200028020421052000413036020420002d002021064101210a200041013a00202000200820012002104c0d054100210a200920076b22092101410120002d0020220820084103461b4103710e0403020102030b4100210a200920076b22092105024002400240410120002d0020220720074103461b4103710e0402010001020b2009410176210a200941016a41017621050c010b410021052009210a0b200a41016a210a0340200a417f6a220a450d0420002802182000280204200028021c280210110100450d000b41010f0b2009410176210a200941016a41017621010c010b410021012009210a0b200a41016a210a02400340200a417f6a220a450d0120002802182000280204200028021c280210110100450d000b41010f0b200028020421094101210a200028021820032004200028021c28020c1100000d01200141016a2108200028021c210120002802182102024003402008417f6a2208450d014101210a200220092001280210110100450d000c030b0b200020063a00202000200536020441000f0b200028020421094101210a2000200820012002104c0d00200028021820032004200028021c28020c1100000d00200541016a2108200028021c210120002802182100034002402008417f6a22080d0041000f0b4101210a200020092001280210110100450d000b0b200a0b5401017f024002402001418080c400460d0041012104200028021820012000411c6a2802002802101101000d010b024020020d0041000f0b2000280218200220032000411c6a28020028020c11000021040b20040b6c01017f230041306b2203240020032001360204200320003602002003411c6a41023602002003412c6a41013602002003420237020c200341a886c000360208200341013602242003200341206a3602182003200341046a36022820032003360220200341086a20021044000b8908010a7f20002802102103024002400240200028020822044101470d0020034101470d020c010b20034101460d002000280218200120022000411c6a28020028020c1100000f0b200120026a2105024002400240200041146a28020022060d0041002107200121080c010b41002107200121080340200520082203460d02200341016a2108024020032c00002209417f4a0d00200941ff017121090240024020082005470d004100210a2005210b0c010b20032d0001413f71210a200341026a2208210b0b200941e001490d0002400240200b2005470d004100210c2005210b0c010b200b2d0000413f71210c200b41016a2208210b0b200941f001490d0002400240200b2005470d004100210b0c010b200b41016a2108200b2d0000413f71210b0b200a410c742009411274418080f0007172200c41067472200b72418080c400460d030b200820036b20076a21072006417f6a22060d000b0b20052008460d00024020082c00002203417f4a0d0002400240200841016a2005470d0041002108200521060c010b200841026a210620082d0001413f7141067421080b200341ff017141e001490d000240024020062005470d0041002106200521090c010b200641016a210920062d0000413f7121060b200341ff017141f001490d00200341ff01712103200620087221080240024020092005470d00410021050c010b20092d0000413f7121050b20084106742003411274418080f0007172200572418080c400460d010b024002402007450d0020072002460d0041002103200720024f0d01200120076a2c00004140480d010b200121030b2007200220031b21022003200120031b21010b20044101460d002000280218200120022000411c6a28020028020c1100000f0b0240024002402002450d004100210820022107200121030340200820032d000041c00171418001476a2108200341016a21032007417f6a22070d000b2008200028020c22054f0d014100210820022107200121030340200820032d000041c00171418001476a2108200341016a21032007417f6a22070d000c030b0b41002108200028020c22050d010b2000280218200120022000411c6a28020028020c1100000f0b41002103200520086b22052107024002400240410020002d0020220820084103461b4103710e0402010001020b20054101762103200541016a41017621070c010b41002107200521030b200341016a210302400240024003402003417f6a2203450d0120002802182000280204200028021c280210110100450d000c020b0b2000280204210841012103200028021820012002200028021c28020c1100000d01200741016a2103200028021c210720002802182100034002402003417f6a22030d0041000f0b200020082007280210110100450d000b0b410121030b20030be00801067f230041f0006b220524002005200336020c20052002360208410121062001210702402001418102490d00410020016b2108418002210903400240200920014f0d0041002106200020096a2c000041bf7f4c0d00200921070c020b2009417f6a21074100210620094101460d01200820096a210a20072109200a4101470d000b0b200520073602142005200036021020054100410520061b36021c200541d4e2cc0041ea86c00020061b3602180240024002400240200220014b22060d00200320014b0d00200220034b0d01024002402002450d0020012002460d00200120024d0d01200020026a2c00004140480d010b200321020b20052002360220024002402002450d0020022001470d010b200221060c030b200141016a210903400240200220014f0d00200020026a2c00004140480d00200541246a2109200221060c050b2002417f6a210620024101460d03200920024621032006210220030d030c000b0b20052002200320061b360228200541306a41146a4103360200200541c8006a41146a4104360200200541d4006a410436020020054203370234200541f086c0003602302005410136024c2005200541c8006a3602402005200541186a3602582005200541106a3602502005200541286a360248200541306a20041044000b200541e4006a4104360200200541c8006a41146a4104360200200541d4006a4101360200200541306a41146a4104360200200542043702342005418887c0003602302005410136024c2005200541c8006a3602402005200541186a3602602005200541106a36025820052005410c6a3602502005200541086a360248200541306a20041044000b200541246a21090b024020062001460d00410121034100210802400240200020066a22072c000022024100480d002005200241ff0171360224200541286a21010c010b200020016a220121030240200741016a2001460d00200741026a210320072d0001413f7121080b2002411f71210702400240200241ff017141e0014f0d00200820074106747221020c010b410021002001210a024020032001460d00200341016a210a20032d0000413f7121000b200020084106747221030240200241ff017141f0014f0d0020032007410c747221020c010b410021020240200a2001460d00200a2d0000413f7121020b20034106742007411274418080f00071722002722202418080c400460d020b2005200236022441012103200541286a21012002418001490d00410221032002418010490d0041034104200241808004491b21030b200520063602282005200320066a36022c200541306a41146a4105360200200541ec006a4104360200200541e4006a4104360200200541c8006a41146a4106360200200541d4006a410736020020054205370234200541a887c00036023020052001360258200520093602502005410136024c2005200541c8006a3602402005200541186a3602682005200541106a3602602005200541206a360248200541306a20041044000b41e8aac700412b20041039000b1000200120002802002000280204104e0b7c01037f230041206b2202240002402000280200200110550d002001411c6a2802002103200128021821042002411c6a4100360200200241d4e2cc003602182002420137020c2002419088c00036020820042003200241086a103d0d002000280204200110552101200241206a240020010f0b200241206a240041010ba40403037f017e017f410121020240200128021841272001411c6a2802002802101101000d0041f4002103410221040240024002400240024002402000280200220041776a0e1f05010303000303030303030303030303030303030303030303040303030304020b41f2002103410221040c040b41ee002103410221040c030b200041dc00460d010b0240024002400240200010530d0020001054450d01410121040c030b200041017267410276410773ad4280808080d0008421050c010b200041017267410276410773ad4280808080d0008421050b410321040b200021030c010b20002103410221040b03402004210641dc002100410121024101210402400240024002400240024020060e0402010500020b02400240024002402005422088a741ff01710e06050302010006050b200542ffffffff8f608342808080803084210541f50021000c060b200542ffffffff8f608342808080802084210541fb0021000c050b413041d70020032005a72204410274411c7176410f712200410a491b20006a2100024020040d00200542ffffffff8f60834280808080108421050c050b2005427f7c42ffffffff0f832005428080808070838421050c040b200542ffffffff8f6083210541fd0021000c030b41002104200321000c030b20012802184127200128021c2802101101000f0b200542ffffffff8f60834280808080c0008421050b410321040b20012802182000200128021c280210110100450d000b0b20020ba60301047f0240024002404100410f200041a49a04491b2201200141086a2201200141027441b094c0006a280200410b742000410b7422014b1b2202200241046a2202200241027441b094c0006a280200410b7420014b1b2202200241026a2202200241027441b094c0006a280200410b7420014b1b2202200241016a2202200241027441b094c0006a280200410b7420014b1b220241027441b094c0006a280200410b74220320014620032001496a20026a2201411e4b0d0041b105210402402001411e460d00200141027441b494c0006a28020041157621040b4100210202402001417f6a220320014b0d002003411f4f0d03200341027441b094c0006a28020041ffffff007121020b02402004200141027441b094c0006a280200411576220141016a460d00200020026b2102200141b105200141b1054b1b21032004417f6a210441002100034020032001460d032000200141bc95c0006a2d00006a220020024b0d012004200141016a2201470d000b200421010b20014101710f0b2001411f41f09ac000103c000b200341b10541809bc000103c000b2003411f41ac95c000103c000be20601077f024002400240024002400240024002400240200041ffff034b0d0020004180fe0371410876210141ed88c000210241002103200041ff0171210402400340200241026a2105200320022d000122066a21070240024020022d000022022001470d0020072003490d06200741a3024f0d07200341d089c0006a210203402006450d022006417f6a210620022d00002103200241016a210220032004470d000b410021060c050b200220014b0d022007210320052102200541bf89c000470d010c020b2007210320052102200541bf89c000470d000b0b200041ffff0371210441f28bc0002102410121060340200241016a21000240024020022d000022034118744118752207417f4a0d00200041a78ec000460d07200741ff007141087420022d0001722103200241026a21020c010b200021020b200420036b22044100480d0220064101732106200241a78ec000470d000c020b0b0240200041ffff074b0d0020004180fe0371410876210141b88ec000210241002103200041ff0171210402400340200241026a2105200320022d000122066a21070240024020022d000022022001470d0020072003490d09200741b0014f0d0a200341848fc0006a210203402006450d022006417f6a210620022d00002103200241016a210220032004470d000b410021060c050b200220014b0d022007210320052102200541848fc000470d010c020b2007210320052102200541848fc000470d000b0b200041ffff0371210441b390c0002102410121060340200241016a21000240024020022d000022034118744118752207417f4a0d00200041d693c000460d0a200741ff007141087420022d0001722103200241026a21020c010b200021020b200420036b22044100480d0220064101732106200241d693c000470d000c020b0b41002106200041b5d9736a41b5db2b490d00200041e28b746a41e20b490d002000419fa8746a419f18490d00200041dee2746a410e490d00200041feffff0071419ef00a460d00200041a2b2756a4122490d00200041cb91756a410b4f0d070b20064101710f0b2003200741c089c0001057000b200741a20241c089c000104d000b41e8aac700412b41a88ec0001039000b2003200741c089c0001057000b200741af0141c089c000104d000b41e8aac700412b41a88ec0001039000b200041f08338490ba70201037f23004180016b22022400024002400240024020012802002203411071450d00410021030340200220036a41ff006a2000410f712204413072200441d7006a2004410a491b3a00002003417f6a2103200041047622000d000b20034180016a22004181014f0d02200141ac88c0004102200220036a4180016a410020036b104b21000c010b02402003412071450d00410021030340200220036a41ff006a2000410f712204413072200441376a2004410a491b3a00002003417f6a2103200041047622000d000b20034180016a22004181014f0d03200141ac88c0004102200220036a4180016a410020036b104b21000c010b2000ad2001104821000b20024180016a240020000f0b2000418001419c88c0001056000b2000418001419c88c0001056000b6c01017f230041306b2203240020032001360204200320003602002003411c6a41023602002003412c6a41013602002003420237020c200341b088c000360208200341013602242003200341206a3602182003200341046a36022820032003360220200341086a20021044000b6c01017f230041306b2203240020032001360204200320003602002003411c6a41023602002003412c6a41013602002003420237020c200341fc93c000360208200341013602242003200341206a3602182003200341046a36022820032003360220200341086a20021044000bec0201017f230041f0006b220624002006200136020c2006200036020820062003360214200620023602102006410236021c200641f09bc000360218024020042802000d00200641386a41146a4103360200200641c4006a4103360200200641d8006a41146a41033602002006420437025c200641f49bc0003602582006410436023c2006200641386a3602682006200641106a3602482006200641086a3602402006200641186a360238200641d8006a20051044000b200641206a41106a200441106a290200370300200641206a41086a200441086a29020037030020062004290200370320200641d8006a41146a4104360200200641d4006a4108360200200641386a41146a4103360200200641c4006a41033602002006420537025c200641949cc0003602582006410436023c2006200641386a3602682006200641206a3602502006200641106a3602482006200641086a3602402006200641186a360238200641d8006a20051044000b140020002802002001200028020428020c1101000b6401027f230041206b220224002001411c6a280200210320012802182101200241086a41106a200041106a290200370300200241086a41086a200041086a2902003703002002200029020037030820012003200241086a103d2100200241206a240020000b1c00200128021841f39cc000410b2001411c6a28020028020c1100000b1c00200128021841fe9cc000410e2001411c6a28020028020c1100000b5b01017f230041306b220324002003200136020c20032000360208200341246a410136020020034201370214200341c4e2cc003602102003410436022c2003200341286a3602202003200341086a360228200341106a20021044000b6901037f230041206b220224002001411c6a280200210320012802182104200241086a41106a2000280200220141106a290200370300200241086a41086a200141086a2902003703002002200129020037030820042003200241086a103d2101200241206a240020010b15002001200028020022002802002000280204104e0b8a0501077f0240024002402002450d000340024020002802082d0000450d00200028020041c59dc0004104200028020428020c110000450d0041010f0b4100210320022104024002400340200120036a210502400240200441074b0d002004450d03200220036b2106410021070340200520076a2d0000410a460d022006200741016a2207470d000c040b0b024002400240200541036a417c7120056b2207450d0020042007200720044b1b2106410021070340200520076a2d0000410a460d042006200741016a2207470d000b2006200441786a22084b0d020c010b200441786a2108410021060b02400340200520066a220741046a2802002209417f732009418a94a8d0007341fffdfb776a7120072802002207417f732007418a94a8d0007341fffdfb776a7172418081828478710d01200641086a220620084d0d000b0b200620044b0d070b20042006460d02200420066b21092001200620036a6a21054100210702400340200520076a2d0000410a460d012009200741016a2207470d000c040b0b200620076a21070b200720036a220741016a21030240200720024f0d00200120076a2d0000410a470d00410121070c030b200220036b2104200220034f0d000b0b41002107200221030b200028020820073a0000200028020421072000280200210602400240024020022003460d000240200220034d0d00200120036a22052c000041bf7f4a0d020b200120024100200341cc9dc000104f000b200620012002200728020c110000450d0141010f0b0240200620012003200728020c110000450d0041010f0b20052c000041bf7f4c0d040b200120036a2101200220036b22020d000b0b41000f0b20062004418c9ec0001056000b200120022003200241dc9dc000104f000b850201027f230041106b220224002002410036020c02400240024002402001418001490d002001418010490d012002410c6a21032001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d410321010c030b200220013a000c2002410c6a2103410121010c020b20022001413f71418001723a000d2002200141067641c001723a000c2002410c6a2103410221010c010b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d410421010b20002003200110602101200241106a240020010b6001017f230041206b2202240020022000360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41dc9ec000200241086a103d2101200241206a240020010b0d0020002802002001200210600b8c0201027f230041106b22022400200028020021002002410036020c02400240024002402001418001490d002001418010490d012002410c6a21032001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d410321010c030b200220013a000c2002410c6a2103410121010c020b20022001413f71418001723a000d2002200141067641c001723a000c2002410c6a2103410221010c010b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d410421010b20002003200110602101200241106a240020010b6301017f230041206b2202240020022000280200360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41dc9ec000200241086a103d2101200241206a240020010bd40202047f027e230041c0006b2203240041012104024020002d00080d00200028020421050240200028020022062d0000410471450d00024020050d0041012104200628021841f59ec00041022006411c6a28020028020c1100000d02200028020021060b41012104200341013a0017200341346a41c09ec000360200200320062902183703082003200341176a3602102006290208210720062902102108200320062d00203a00382003200837032820032007370320200320062902003703182003200341086a3602302001200341186a200228020c1101000d01200328023041d89ec0004102200328023428020c11000021040c010b41012104200628021841bc9ec00041f49ec00020051b4102410120051b2006411c6a28020028020c1100000d0020012000280200200228020c11010021040b200020043a00082000200028020441016a360204200341c0006a240020000b840703017f027e027f02402002280200220341134c0d00024002400240200042808084fea6dee111540d002002200341706a2203360200200120036a200042808084fea6dee111802204428080fc81d9a19e6e7e20007c2200428080e983b1de1680a741ff017141e4007041017441de84c0006a2f00003b0000200228020020016a41026a20004280a094a58d1d80a741ffff037141e4007041017441de84c0006a2f00003b0000200228020020016a41046a20004280c8afa02580a741e4007041017441de84c0006a2f00003b0000200228020020016a41066a20004280c2d72f80a741e4007041017441de84c0006a2f00003b0000200228020020016a41086a200042c0843d8042e40082a741017441de84c0006a2f00003b0000200228020020016a410a6a20004290ce008042e40082a741017441de84c0006a2f00003b0000200228020020016a410c6a200042e40080220542e40082a741017441de84c0006a2f00003b00002005429c7f7e20007ca72103410e21060c010b024020004280c2d72f5a0d00200021040c020b2002200341786a2203360200200120036a20004280c2d72f8022044280bea8507e20007ca7220341c0843d6e41ff017141e4007041017441de84c0006a2f00003b0000200228020020016a41026a20034190ce006e41ffff037141e4007041017441de84c0006a2f00003b0000200228020020016a41046a200341e4006e220641e4007041017441de84c0006a2f00003b00002006419c7f6c20036a2103410621060b2001200228020020066a6a200341017441de84c0006a2f00003b00000b024002402004a722064190ce004f0d00200621030c010b20022002280200417c6a2203360200200120036a20064190ce006e220341f0b17f6c20066a220641ffff037141e4006e220741017441de84c0006a2f00003b0000200228020020016a41026a2007419c7f6c20066a41ffff037141017441de84c0006a2f00003b00000b0240200341ffff0371220641e400490d0020022002280200417e6a2207360200200120076a200641e4006e2206419c7f6c20036a41ffff037141017441de84c0006a2f00003b0000200621030b0240200341ffff037141094b0d0020022002280200417f6a2206360200200120066a200341306a3a00000f0b20022002280200417e6a2206360200200120066a200341ffff037141017441de84c0006a2f00003b00000f0b41fb9ec000411c41989fc0001039000bd108020b7f017e4101210302400240200228021841222002411c6a2802002802101101000d000240024020010d00410021040c010b200020016a21052000210641002104200021074100210802400340200641016a210902400240024020062c0000220a4100480d00200a41ff0171210b0c010b0240024020092005470d004100210b200521060c010b20062d0001413f71210b200641026a220921060b200a411f7121030240200a41ff0171220a41e0014f0d00200b200341067472210b0c010b0240024020062005470d004100210c2005210d0c010b20062d0000413f71210c200641016a2209210d0b200c200b41067472210b0240200a41f0014f0d00200b2003410c7472210b0c010b02400240200d2005470d004100210a200921060c010b200d41016a2106200d2d0000413f71210a0b200b4106742003411274418080f0007172200a72220b418080c400470d010c030b200921060b4102210941f400210d02400240024002400240024002400240200b41776a0e1f06010303000303030303030303030303030303030303030303040303030304020b41f200210d0c050b41ee00210d0c040b200b41dc00460d010b0240200b10530d00200b10540d040b200b41017267410276410773ad4280808080d00084210e410321090c010b0b200b210d0b0240024020082004490d0002402004450d0020042001460d00200420014f0d01200020046a2c000041bf7f4c0d010b02402008450d0020082001460d00200820014f0d01200020086a2c000041bf7f4c0d010b2002280218200020046a200820046b200228021c28020c110000450d0141010f0b200020012004200841bc9fc000104f000b03402009210a4101210341dc00210441012109024002400240024002400240200a0e0402010500020b0240024002400240200e422088a741ff01710e06050302010006050b200e42ffffffff8f608342808080803084210e4103210941f50021040c070b200e42ffffffff8f608342808080802084210e4103210941fb0021040c060b413041d700200d200ea72209410274411c7176410f712204410a491b20046a2104024020090d00200e42ffffffff8f608342808080801084210e0c050b200e427f7c42ffffffff0f83200e4280808080708384210e0c040b200e42ffffffff8f6083210e4103210941fd0021040c040b41002109200d21040c030b410121090240200b418001490d0041022109200b418010490d0041034104200b41808004491b21090b200920086a21040c040b200e42ffffffff8f60834280808080c00084210e0b410321090b20022802182004200228021c2802101101000d050c000b0b200820076b20066a21082006210720052006470d000b0b2004450d0020042001460d00200420014f0d02200020046a2c000041bf7f4c0d020b410121032002280218200020046a200120046b200228021c28020c1100000d0020022802184122200228021c28021011010021030b20030f0b200020012004200141ac9fc000104f000b870101027f23004180016b2202240020002d00002103410021000340200220006a41ff006a20034101714130723a00002000417f6a2100200341017641ff007122030d000b024020004180016a2203418101490d002003418001419c88c0001056000b200141e79fc0004102200220006a4180016a410020006b104b210020024180016a240020000b1c00200128021841adb3c00041052001411c6a28020028020c1100000bcf0401067e2000420037001720002001290320220242338842137e2001290300220342ffffffffffffff03837c220442137c4233882001290308220542ffffffffffffff038320034233887c22037c4233882001290310220642ffffffffffffff038320054233887c22057c4233882001290318220742ffffffffffffff038320064233887c22067c423388200242ffffffffffffff038320074233887c22077c42338842137e20047c22023c0000200020024228883c0005200020024220883c0004200020024218883c0003200020024210883c0002200020024208883c00012000200242338820037c22044225883c000b20002004421d883c000a200020044215883c000920002004420d883c0008200020044205883c00072000200442338820057c2203422a883c0012200020034222883c001120002003421a883c0010200020034212883c000f20002003420a883c000e200020034202883c000d2000200442ffffffffffffff038322044203862002423088420783843c00062000200342338820067c2202421f883c0017200020024227883c0018200020024217883c001620002002420f883c0015200020024207883c00142000200342ffffffffffffff038322054206862004422d88843c000c2000200242338820077c22034204883c001a20002003420c883c001b200020034214883c001c20002003421c883c001d200020034224883c001e2000200242ffffffffffffff038322024201862005423288843c00132000200342ffffffffffffff03832203422c883c001f200020034204862002422f88843c00190b7101027f230041c0006b2202240020022000106b200241206a2001106b41002101410121000340200241206a20016a2d0000200220016a2d0000732203410020036b72417f7341800171410776106d2000712100200141016a22014120470d000b2000106d2101200241c0006a240020010b1501017f230041106b220120003a000f20012d000f0bd00702017f147e230041f0016b2203240020012903202104200129031821052001290310210620012903082107200129030021080340200341b0016a200842002008420010e80820034180016a20074200200442137e2209420010e808200341c0006a200542137e220a42002006420010e808200341e0016a200a42002005420010e808200341f0006a200842002007420010e808200341306a200642002009420010e808200341e0006a200742002007420010e808200341206a200842002006420010e808200341d0016a200a42002004420010e808200341c0016a200942002004420010e808200341a0016a200842002005420010e808200341106a200742002006420010e8082003200642002006420010e80820034190016a200842002004420010e808200341d0006a200742002005420010e808200329039001220b20032903507c2206420186220c20032903007c220720032903a001220d20032903107c2208420186220e20032903c0017c22042003290320220f20032903d0017c2205420186221020032903607c22092003290370221120032903307c220a420186221220032903e0017c2213200329038001221420032903407c2215420186221620032903b0017c221742338820034180016a41086a290300200341c0006a41086a2903007c2015201454ad7c4201862015423f8884200341b0016a41086a2903007c2017201654ad7c420d86847c2215423388200341f0006a41086a290300200341306a41086a2903007c200a201154ad7c420186200a423f8884200341e0016a41086a2903007c2013201254ad7c2015201354ad7c420d86847c220a423388200341206a41086a290300200341d0016a41086a2903007c2005200f54ad7c4201862005423f8884200341e0006a41086a2903007c2009201054ad7c200a200954ad7c420d86847c2205423388200341a0016a41086a290300200341106a41086a2903007c2008200d54ad7c4201862008423f8884200341c0016a41086a2903007c2004200e54ad7c2005200454ad7c420d86847c220442338820034190016a41086a290300200341d0006a41086a2903007c2006200b54ad7c4201862006423f8884200341086a2903007c2007200c54ad7c2004200754ad7c420d868442137e201742ffffffffffffff03837c220642ffffffffffffff038321082006423388201542ffffffffffffff03837c2107200442ffffffffffffff03832104200542ffffffffffffff03832105200a42ffffffffffffff038321062002417f6a22020d000b2000200437032020002005370318200020063703102000200737030820002008370300200341f0016a24000bbbd40103017f297e037f230041d0c1006b22032400200341a8c1006a20024101106e200341a0386a20022903002204420020032903a8412205420010e808200341b0396a20032903c841220642002002290308220742137e2208420010e808200341f0396a20032903c041220942002002290310220a42137e220b420010e808200341b03a6a20032903b841220c42002002290318220d42137e220e420010e808200341f03a6a20032903b041220f42002002290320221042137e2211420010e808200341f0386a200f42002004420010e808200341b0386a200542002007420010e808200341c0396a20064200200b420010e808200341803a6a20094200200e420010e808200341c03a6a200c42002011420010e80820034180396a200c42002004420010e808200341803b6a200f42002007420010e808200341c0386a20054200200a420010e808200341d0396a20064200200e420010e808200341903a6a200942002011420010e80820034190396a200942002004420010e808200341d03a6a200c42002007420010e808200341903b6a200f4200200a420010e808200341d0386a20054200200d420010e808200341e0396a200642002011420010e808200341a0396a200642002004420010e808200341a03a6a200942002007420010e808200341e03a6a200c4200200a420010e808200341a03b6a200f4200200d420010e808200341e0386a200542002010420010e808200320032903d039221220032903c0387c220520032903903a7c22062003290380397c220920032903803b7c220c20032903c039221320032903b0387c220f20032903803a7c221420032903c03a7c221520032903f0387c221620032903b039221720032903a0387c221820032903f0397c221920032903b03a7c221a20032903f03a7c221b423388200341b0396a41086a290300200341a0386a41086a2903007c2018201754ad7c200341f0396a41086a2903007c2019201854ad7c200341b03a6a41086a2903007c201a201954ad7c200341f03a6a41086a2903007c201b201a54ad7c420d86847c2219423388200341c0396a41086a290300200341b0386a41086a2903007c200f201354ad7c200341803a6a41086a2903007c2014200f54ad7c200341c03a6a41086a2903007c2015201454ad7c200341f0386a41086a2903007c2016201554ad7c2019201654ad7c420d86847c220f42ffffffffffffff038322143703c03b200320032903e039221720032903d0387c22152003290390397c221620032903d03a7c221a20032903903b7c2213200f423388200341d0396a41086a290300200341c0386a41086a2903007c2005201254ad7c200341903a6a41086a2903007c2006200554ad7c20034180396a41086a2903007c2009200654ad7c200341803b6a41086a2903007c200c200954ad7c200f200c54ad7c420d86847c220542ffffffffffffff038322183703c83b200320032903a039221220032903e0387c220620032903a03a7c220920032903e03a7c220c20032903a03b7c220f2005423388200341e0396a41086a290300200341d0386a41086a2903007c2015201754ad7c20034190396a41086a2903007c2016201554ad7c200341d03a6a41086a2903007c201a201654ad7c200341903b6a41086a2903007c2013201a54ad7c2005201354ad7c420d86847c220542ffffffffffffff0383221a3703d03b20032005423388200341a0396a41086a290300200341e0386a41086a2903007c2006201254ad7c200341a03a6a41086a2903007c2009200654ad7c200341e03a6a41086a2903007c200c200954ad7c200341a03b6a41086a2903007c200f200c54ad7c2005200f54ad7c420d868442137e201b42ffffffffffffff03837c220542ffffffffffffff0383220c3703b03b20032005423388201942ffffffffffffff03837c220f3703b83b200341a8c1006a200341b03b6a4101106e20034190356a20032903a841220542002004420010e808200341e0356a20032903c841220642002008420010e808200341b0366a20032903c04122094200200b420010e80820034180376a20032903b84122154200200e420010e808200341d0376a20032903b041221642002011420010e808200341e0376a201642002004420010e808200341a0356a200542002007420010e808200341f0356a20064200200b420010e808200341c0366a20094200200e420010e80820034190376a201542002011420010e808200341a0376a201542002004420010e808200341f0376a201642002007420010e808200341b0356a20054200200a420010e80820034180366a20064200200e420010e808200341d0366a200942002011420010e808200341e0366a200942002004420010e808200341b0376a201542002007420010e80820034180386a20164200200a420010e808200341c0356a20054200200d420010e80820034190366a200642002011420010e808200341a0366a200642002004420010e808200341f0366a200942002007420010e808200341c0376a20154200200a420010e80820034190386a20164200200d420010e808200341d0356a200542002010420010e808200341800d6a200c420020012903002211420010e80820034190346a200f42137e42002001290320220e420010e808200341d0336a200129031822054200201442137e220b420010e80820034190336a200129031022064200201842137e2216420010e808200341c0326a200129030822094200201a42137e2215420010e808200341f00c6a20094200200c420010e80820034180356a200f42002011420010e80820034180346a200e4200200b420010e808200341c0336a200542002016420010e80820034180336a200642002015420010e808200341e00c6a200c42002006420010e808200341b0326a200f42002009420010e808200341f0346a201142002014420010e808200341f0336a200e42002016420010e808200341b0336a200542002015420010e808200341800c6a200c42002005420010e808200341f0326a200f42002006420010e808200341a0326a200942002014420010e808200341e0346a201142002018420010e808200341e0336a20154200200e420010e808200341a00b6a200c4200200e420010e808200341a0336a200f42002005420010e808200341e0326a200642002014420010e80820034190326a200942002018420010e808200341d0346a201a42002011420010e80820034180306a20032903a036221c20032903d0357c220c20032903f0367c220f20032903c0377c22142003290390387c2215200329039036221d20032903c0357c221620032903e0367c220b20032903b0377c22182003290380387c2219200329038036221e20032903b0357c221a20032903d0367c221b20032903a0377c221320032903f0377c220820032903f035221f20032903a0357c221220032903c0367c22172003290390377c222020032903e0377c222120032903e03522222003290390357c222320032903b0367c22242003290380377c222520032903d0377c2226423388200341e0356a41086a29030020034190356a41086a2903007c2023202254ad7c200341b0366a41086a2903007c2024202354ad7c20034180376a41086a2903007c2025202454ad7c200341d0376a41086a2903007c2026202554ad7c420d86847c2223423388200341f0356a41086a290300200341a0356a41086a2903007c2012201f54ad7c200341c0366a41086a2903007c2017201254ad7c20034190376a41086a2903007c2020201754ad7c200341e0376a41086a2903007c2021202054ad7c2023202154ad7c420d86847c221242338820034180366a41086a290300200341b0356a41086a2903007c201a201e54ad7c200341d0366a41086a2903007c201b201a54ad7c200341a0376a41086a2903007c2013201b54ad7c200341f0376a41086a2903007c2008201354ad7c2012200854ad7c420d86847c221a42338820034190366a41086a290300200341c0356a41086a2903007c2016201d54ad7c200341e0366a41086a2903007c200b201654ad7c200341b0376a41086a2903007c2018200b54ad7c20034180386a41086a2903007c2019201854ad7c201a201954ad7c420d86847c2216423388200341a0366a41086a290300200341d0356a41086a2903007c200c201c54ad7c200341f0366a41086a2903007c200f200c54ad7c200341c0376a41086a2903007c2014200f54ad7c20034190386a41086a2903007c2015201454ad7c2016201554ad7c420d868442137e202642ffffffffffffff03837c220f42ffffffffffffff0383220c42002011420010e808200341d0306a200f423388202342ffffffffffffff03837c220f42137e4200200e420010e808200341f0306a201242ffffffffffffff0383221442137e221942002005420010e808200341a0316a201a42ffffffffffffff0383220b42137e221842002006420010e808200341e0316a201642ffffffffffffff0383221642137e221542002009420010e808200341f02f6a200c42002009420010e808200341c0306a200f42002011420010e808200341e0306a20194200200e420010e80820034190316a201842002005420010e808200341d0316a201542002006420010e808200341e02f6a200c42002006420010e808200341b0306a200f42002009420010e808200341c0346a201442002011420010e80820034180316a20184200200e420010e808200341c0316a201542002005420010e808200341d02f6a200c42002005420010e808200341a0306a200f42002006420010e80820034180326a201442002009420010e808200341b0346a200b42002011420010e808200341b0316a20154200200e420010e808200341c02f6a200c4200200e420010e80820034190306a200f42002005420010e808200341d0326a201442002006420010e808200341f0316a200b42002009420010e808200341a0346a201642002011420010e8082003200329038031221220032903c0347c220f20032903c0317c221420032903e02f7c221520032903b0307c2216200329039031221720032903e0307c220c20032903d0317c220b20032903f02f7c221820032903c0307c221920032903a031222020032903f0307c221a20032903e0317c221b2003290380307c221320032903d0307c2208423388200341a0316a41086a290300200341f0306a41086a2903007c201a202054ad7c200341e0316a41086a2903007c201b201a54ad7c20034180306a41086a2903007c2013201b54ad7c200341d0306a41086a2903007c2008201354ad7c420d86847c221a42338820034190316a41086a290300200341e0306a41086a2903007c200c201754ad7c200341d0316a41086a2903007c200b200c54ad7c200341f02f6a41086a2903007c2018200b54ad7c200341c0306a41086a2903007c2019201854ad7c201a201954ad7c420d86847c220b42ffffffffffffff0383220c3703e83b200320032903b03422172003290380327c221820032903b0317c221920032903d02f7c221b20032903a0307c2213200b42338820034180316a41086a290300200341c0346a41086a2903007c200f201254ad7c200341c0316a41086a2903007c2014200f54ad7c200341e02f6a41086a2903007c2015201454ad7c200341b0306a41086a2903007c2016201554ad7c200b201654ad7c420d86847c221442ffffffffffffff0383220f3703f03b200320032903f031222020032903d0327c221520032903a0347c221620032903c02f7c220b2003290390307c22122014423388200341b0346a41086a29030020034180326a41086a2903007c2018201754ad7c200341b0316a41086a2903007c2019201854ad7c200341d02f6a41086a2903007c201b201954ad7c200341a0306a41086a2903007c2013201b54ad7c2014201354ad7c420d86847c221842ffffffffffffff038322143703f83b20032018423388200341f0316a41086a290300200341d0326a41086a2903007c2015202054ad7c200341a0346a41086a2903007c2016201554ad7c200341c02f6a41086a2903007c200b201654ad7c20034190306a41086a2903007c2012200b54ad7c2018201254ad7c420d868442137e200842ffffffffffffff03837c221642ffffffffffffff038322153703d83b20032016423388201a42ffffffffffffff03837c22163703e03b200341803c6a200341d83b6a4101106e200341a8c1006a200341803c6a4101106e200341a83c6a200341a8c1006a4101106e200341b02f6a20032903a83c220b42002015420010e808200341b02c6a2014420020032903b03c221842137e420010e808200341902d6a200f420020032903b83c221942137e2208420010e808200341f02d6a200c420020032903c03c221b42137e2213420010e808200341d02e6a2016420020032903c83c221242137e221a420010e808200341a02f6a20164200200b420010e808200341f02c6a201542002018420010e808200341802d6a201442002008420010e808200341e02d6a200f42002013420010e808200341c02e6a200c4200201a420010e808200341902f6a200c4200200b420010e808200341e02c6a201642002018420010e808200341c02d6a201542002019420010e808200341d02d6a201442002013420010e808200341b02e6a200f4200201a420010e808200341802f6a200f4200200b420010e808200341d02c6a200c42002018420010e808200341b02d6a201642002019420010e808200341902e6a20154200201b420010e808200341a02e6a20144200201a420010e808200341f02e6a20144200200b420010e808200341c02c6a200f42002018420010e808200341a02d6a200c42002019420010e808200341802e6a20164200201b420010e808200341e02e6a201542002012420010e808200341e0296a20032903f02e222720032903e02e7c220b20032903c02c7c221820032903a02d7c221920032903802e7c221a20032903a02e222820032903902e7c221b20032903802f7c221320032903d02c7c220820032903b02d7c221220032903d02d222920032903c02d7c221720032903b02e7c222020032903902f7c222120032903e02c7c222320032903802d222a20032903f02c7c222420032903e02d7c222520032903c02e7c222620032903a02f7c221c20032903b02c222b20032903b02f7c221d20032903902d7c221e20032903f02d7c221f20032903d02e7c2222423388200341b02c6a41086a290300200341b02f6a41086a2903007c201d202b54ad7c200341902d6a41086a2903007c201e201d54ad7c200341f02d6a41086a2903007c201f201e54ad7c200341d02e6a41086a2903007c2022201f54ad7c420d86847c221d423388200341802d6a41086a290300200341f02c6a41086a2903007c2024202a54ad7c200341e02d6a41086a2903007c2025202454ad7c200341c02e6a41086a2903007c2026202554ad7c200341a02f6a41086a2903007c201c202654ad7c201d201c54ad7c420d86847c2224423388200341d02d6a41086a290300200341c02d6a41086a2903007c2017202954ad7c200341b02e6a41086a2903007c2020201754ad7c200341902f6a41086a2903007c2021202054ad7c200341e02c6a41086a2903007c2023202154ad7c2024202354ad7c420d86847c2217423388200341a02e6a41086a290300200341902e6a41086a2903007c201b202854ad7c200341802f6a41086a2903007c2013201b54ad7c200341d02c6a41086a2903007c2008201354ad7c200341b02d6a41086a2903007c2012200854ad7c2017201254ad7c420d86847c221b423388200341f02e6a41086a290300200341e02e6a41086a2903007c200b202754ad7c200341c02c6a41086a2903007c2018200b54ad7c200341a02d6a41086a2903007c2019201854ad7c200341802e6a41086a2903007c201a201954ad7c201b201a54ad7c420d868442137e202242ffffffffffffff03837c221842ffffffffffffff0383220b420020032903803c2213420010e808200341b02a6a2018423388201d42ffffffffffffff03837c221842137e420020032903a03c2208420010e808200341d02a6a202442ffffffffffffff0383221942137e2224420020032903983c2212420010e808200341802b6a201742ffffffffffffff0383221a42137e2223420020032903903c2217420010e808200341c02b6a201b42ffffffffffffff0383221b42137e2221420020032903883c2220420010e808200341d0296a200b42002020420010e808200341a02a6a201842002013420010e808200341c02a6a202442002008420010e808200341f02a6a202342002012420010e808200341b02b6a202142002017420010e808200341c0296a200b42002017420010e808200341902a6a201842002020420010e808200341d02b6a201942002013420010e808200341e02a6a202342002008420010e808200341a02b6a202142002012420010e808200341b0296a200b42002012420010e808200341802a6a201842002017420010e808200341e02b6a201942002020420010e808200341802c6a201a42002013420010e808200341902b6a202142002008420010e808200341a0296a200b42002008420010e808200341f0296a201842002012420010e808200341f02b6a201942002017420010e808200341902c6a201a42002020420010e808200341a02c6a201b42002013420010e808200320032903e02a221e20032903d02b7c221320032903a02b7c220820032903c0297c221220032903902a7c221720032903f02a221f20032903c02a7c222020032903b02b7c222120032903d0297c222320032903a02a7c222420032903802b222220032903d02a7c222520032903c02b7c222620032903e0297c221c20032903b02a7c221d423388200341802b6a41086a290300200341d02a6a41086a2903007c2025202254ad7c200341c02b6a41086a2903007c2026202554ad7c200341e0296a41086a2903007c201c202654ad7c200341b02a6a41086a2903007c201d201c54ad7c420d86847c2225423388200341f02a6a41086a290300200341c02a6a41086a2903007c2020201f54ad7c200341b02b6a41086a2903007c2021202054ad7c200341d0296a41086a2903007c2023202154ad7c200341a02a6a41086a2903007c2024202354ad7c2025202454ad7c420d86847c222042ffffffffffffff03833703e03c200320032903802c221c20032903e02b7c222120032903902b7c222320032903b0297c222420032903802a7c22262020423388200341e02a6a41086a290300200341d02b6a41086a2903007c2013201e54ad7c200341a02b6a41086a2903007c2008201354ad7c200341c0296a41086a2903007c2012200854ad7c200341902a6a41086a2903007c2017201254ad7c2020201754ad7c420d86847c221342ffffffffffffff03833703e83c200320032903902c221e20032903f02b7c220820032903a02c7c221220032903a0297c221720032903f0297c22202013423388200341802c6a41086a290300200341e02b6a41086a2903007c2021201c54ad7c200341902b6a41086a2903007c2023202154ad7c200341b0296a41086a2903007c2024202354ad7c200341802a6a41086a2903007c2026202454ad7c2013202654ad7c420d86847c221342ffffffffffffff03833703f03c20032013423388200341902c6a41086a290300200341f02b6a41086a2903007c2008201e54ad7c200341a02c6a41086a2903007c2012200854ad7c200341a0296a41086a2903007c2017201254ad7c200341f0296a41086a2903007c2020201754ad7c2013202054ad7c420d868442137e201d42ffffffffffffff03837c221342ffffffffffffff03833703d03c20032013423388202542ffffffffffffff03837c3703d83c200341f83c6a200341d03c6a4101106e20034190296a200b420020032903f83c2213420010e80820034190266a201b420020032903803d220842137e420010e808200341f0266a20032903883d221242137e22234200201a420010e808200341d0276a20032903903d222042137e222142002019420010e808200341b0286a2018420020032903983d222442137e2217420010e80820034180296a201842002013420010e808200341d0266a200b42002008420010e808200341e0266a201b42002023420010e808200341c0276a20214200201a420010e808200341a0286a201742002019420010e808200341f0286a201342002019420010e808200341c0266a201842002008420010e808200341a0276a200b42002012420010e808200341b0276a20214200201b420010e80820034190286a20174200201a420010e808200341e0286a20134200201a420010e808200341b0266a200842002019420010e80820034190276a201842002012420010e808200341f0276a200b42002020420010e80820034180286a20174200201b420010e808200341d0286a20134200201b420010e808200341a0266a20084200201a420010e80820034180276a201242002019420010e808200341e0276a201842002020420010e808200341c0286a200b42002024420010e8082003200329039028222520032903b0277c220b20032903f0287c221820032903a0277c221a20032903c0267c221b20032903c027222420032903e0267c221920032903a0287c221320032903d0267c22082003290380297c221220032903f02622262003290390267c221720032903d0277c22202003290390297c222120032903b0287c2223423388200341f0266a41086a29030020034190266a41086a2903007c2017202654ad7c200341d0276a41086a2903007c2020201754ad7c20034190296a41086a2903007c2021202054ad7c200341b0286a41086a2903007c2023202154ad7c420d86847c2220423388200341c0276a41086a290300200341e0266a41086a2903007c2019202454ad7c200341a0286a41086a2903007c2013201954ad7c200341d0266a41086a2903007c2008201354ad7c20034180296a41086a2903007c2012200854ad7c2020201254ad7c420d86847c221342ffffffffffffff038322193703b03d2003200329038028222620032903b0267c220820032903e0287c221220032903f0277c22212003290390277c2224201342338820034190286a41086a290300200341b0276a41086a2903007c200b202554ad7c200341f0286a41086a2903007c2018200b54ad7c200341a0276a41086a2903007c201a201854ad7c200341c0266a41086a2903007c201b201a54ad7c2013201b54ad7c420d86847c220b42ffffffffffffff038322173703b83d2003200329038027222520032903a0267c221820032903d0287c221a20032903c0287c221b20032903e0277c2213200b42338820034180286a41086a290300200341b0266a41086a2903007c2008202654ad7c200341e0286a41086a2903007c2012200854ad7c200341f0276a41086a2903007c2021201254ad7c20034190276a41086a2903007c2024202154ad7c200b202454ad7c420d86847c220b42ffffffffffffff038322213703c03d2003200b42338820034180276a41086a290300200341a0266a41086a2903007c2018202554ad7c200341d0286a41086a2903007c201a201854ad7c200341c0286a41086a2903007c201b201a54ad7c200341e0276a41086a2903007c2013201b54ad7c200b201354ad7c420d868442137e202342ffffffffffffff03837c221842ffffffffffffff0383220b3703a03d20032018423388202042ffffffffffffff03837c22183703a83d200341c83d6a200341a03d6a4105106e200341c0236a200b420020032903c83d221a420010e808200341c0246a201842137e420020032903e83d221b420010e80820034180256a201942137e2224420020032903e03d2213420010e808200341c0256a201742137e2223420020032903d83d2208420010e80820034180266a202142137e2220420020032903d03d2212420010e808200341b0236a200b42002012420010e80820034180246a20184200201a420010e808200341b0246a20244200201b420010e808200341f0246a202342002013420010e808200341b0256a202042002008420010e808200341a0236a200b42002008420010e808200341f0256a201842002012420010e808200341f0236a20194200201a420010e808200341a0246a20234200201b420010e808200341e0246a202042002013420010e80820034190236a200b42002013420010e808200341a0256a201842002008420010e808200341e0256a201942002012420010e808200341e0236a20174200201a420010e80820034190246a20204200201b420010e80820034180236a200b4200201b420010e808200341d0246a201842002013420010e80820034190256a201942002008420010e808200341d0256a201742002012420010e808200341d0236a20214200201a420010e808200320032903a024222420032903f0237c220b20032903e0247c221820032903a0237c221a20032903f0257c221b20032903f024222520032903b0247c221920032903b0257c221320032903b0237c22082003290380247c221220032903c02522262003290380257c22172003290380267c222020032903c0237c222120032903c0247c2223423388200341c0256a41086a29030020034180256a41086a2903007c2017202654ad7c20034180266a41086a2903007c2020201754ad7c200341c0236a41086a2903007c2021202054ad7c200341c0246a41086a2903007c2023202154ad7c420d86847c2217423388200341f0246a41086a290300200341b0246a41086a2903007c2019202554ad7c200341b0256a41086a2903007c2013201954ad7c200341b0236a41086a2903007c2008201354ad7c20034180246a41086a2903007c2012200854ad7c2017201254ad7c420d86847c221342ffffffffffffff038322193703803e200320032903e023222520032903e0257c22082003290390247c22122003290390237c222020032903a0257c22212013423388200341a0246a41086a290300200341f0236a41086a2903007c200b202454ad7c200341e0246a41086a2903007c2018200b54ad7c200341a0236a41086a2903007c201a201854ad7c200341f0256a41086a2903007c201b201a54ad7c2013201b54ad7c420d86847c220b42ffffffffffffff0383221b3703883e200320032903d025221c2003290390257c221820032903d0237c221a2003290380237c221320032903d0247c2224200b423388200341e0236a41086a290300200341e0256a41086a2903007c2008202554ad7c20034190246a41086a2903007c2012200854ad7c20034190236a41086a2903007c2020201254ad7c200341a0256a41086a2903007c2021202054ad7c200b202154ad7c420d86847c220b42ffffffffffffff038322263703903e2003200b423388200341d0256a41086a29030020034190256a41086a2903007c2018201c54ad7c200341d0236a41086a2903007c201a201854ad7c20034180236a41086a2903007c2013201a54ad7c200341d0246a41086a2903007c2024201354ad7c200b202454ad7c420d868442137e202342ffffffffffffff03837c221842ffffffffffffff0383220b3703f03d20032018423388201742ffffffffffffff03837c22183703f83d200341983e6a200341f03d6a410a106e200341b0206a200b420020032903983e2208420010e80820034180216a201842137e2228420020032903b83e2212420010e808200341d0216a201942137e221c420020032903b03e2217420010e808200341a0226a201b42137e2213420020032903a83e2220420010e808200341f0226a202642137e221a420020032903a03e2221420010e808200341e0226a200b42002021420010e808200341a0206a201842002008420010e808200341f0206a201c42002012420010e808200341c0216a201342002017420010e80820034190226a201a42002020420010e80820034180226a200b42002020420010e808200341d0226a201842002021420010e80820034190206a201942002008420010e808200341e0206a201342002012420010e808200341b0216a201a42002017420010e808200341a0216a200b42002017420010e808200341f0216a201842002020420010e808200341c0226a201942002021420010e80820034180206a201b42002008420010e808200341d0206a201a42002012420010e808200341c0206a200b42002012420010e80820034190216a201842002017420010e808200341e0216a201942002020420010e808200341b0226a201b42002021420010e808200341f01f6a202642002008420010e808200320032903e02022292003290390207c220820032903b0217c22122003290380227c222020032903d0227c222120032903c021222720032903f0207c22172003290390227c222320032903e0227c222420032903a0207c222520032903a022222a20032903d0217c221d20032903f0227c221e20032903b0207c221f2003290380217c2222423388200341a0226a41086a290300200341d0216a41086a2903007c201d202a54ad7c200341f0226a41086a2903007c201e201d54ad7c200341b0206a41086a2903007c201f201e54ad7c20034180216a41086a2903007c2022201f54ad7c420d86847c221e423388200341c0216a41086a290300200341f0206a41086a2903007c2017202754ad7c20034190226a41086a2903007c2023201754ad7c200341e0226a41086a2903007c2024202354ad7c200341a0206a41086a2903007c2025202454ad7c201e202554ad7c420d86847c222342ffffffffffffff038322173703d03e2003200329038020222a20032903c0227c222420032903d0207c222520032903a0217c221f20032903f0217c22272023423388200341e0206a41086a29030020034190206a41086a2903007c2008202954ad7c200341b0216a41086a2903007c2012200854ad7c20034180226a41086a2903007c2020201254ad7c200341d0226a41086a2903007c2021202054ad7c2023202154ad7c420d86847c220842ffffffffffffff0383221d3703d83e200320032903b022222920032903e0217c221220032903f01f7c222020032903c0207c22212003290390217c2223200842338820034180206a41086a290300200341c0226a41086a2903007c2024202a54ad7c200341d0206a41086a2903007c2025202454ad7c200341a0216a41086a2903007c201f202554ad7c200341f0216a41086a2903007c2027201f54ad7c2008202754ad7c420d86847c220842ffffffffffffff0383221f3703e03e20032008423388200341b0226a41086a290300200341e0216a41086a2903007c2012202954ad7c200341f01f6a41086a2903007c2020201254ad7c200341c0206a41086a2903007c2021202054ad7c20034190216a41086a2903007c2023202154ad7c2008202354ad7c420d868442137e202242ffffffffffffff03837c221242ffffffffffffff038322083703c03e20032012423388201e42ffffffffffffff03837c22123703c83e200341e83e6a200341c03e6a4114106e200341a01d6a2008420020032903e83e2220420010e808200341f01d6a201242137e420020032903883f2221420010e808200341c01e6a201742137e2227420020032903803f2223420010e808200341901f6a201d42137e2222420020032903f83e2224420010e808200341e01f6a201f42137e221e420020032903f03e2225420010e808200341d01f6a200842002025420010e808200341901d6a201242002020420010e808200341e01d6a202742002021420010e808200341b01e6a202242002023420010e808200341801f6a201e42002024420010e808200341f01e6a200842002024420010e808200341c01f6a201242002025420010e808200341801d6a201742002020420010e808200341d01d6a202242002021420010e808200341a01e6a201e42002023420010e808200341901e6a200842002023420010e808200341e01e6a201242002024420010e808200341b01f6a201742002025420010e808200341f01c6a201d42002020420010e808200341c01d6a201e42002021420010e808200341b01d6a200842002021420010e808200341801e6a201242002023420010e808200341d01e6a201742002024420010e808200341a01f6a201d42002025420010e808200341e01c6a201f42002020420010e808200320032903d01d222720032903801d7c220820032903a01e7c221220032903f01e7c221720032903c01f7c222020032903b01e222920032903e01d7c222120032903801f7c222320032903d01f7c222420032903901d7c222520032903901f222a20032903c01e7c221d20032903e01f7c221e20032903a01d7c221f20032903f01d7c2222423388200341901f6a41086a290300200341c01e6a41086a2903007c201d202a54ad7c200341e01f6a41086a2903007c201e201d54ad7c200341a01d6a41086a2903007c201f201e54ad7c200341f01d6a41086a2903007c2022201f54ad7c420d86847c221d423388200341b01e6a41086a290300200341e01d6a41086a2903007c2021202954ad7c200341801f6a41086a2903007c2023202154ad7c200341d01f6a41086a2903007c2024202354ad7c200341901d6a41086a2903007c2025202454ad7c201d202554ad7c420d86847c222142ffffffffffffff03833703a03f200320032903f01c221f20032903b01f7c222320032903c01d7c222420032903901e7c222520032903e01e7c221e2021423388200341d01d6a41086a290300200341801d6a41086a2903007c2008202754ad7c200341a01e6a41086a2903007c2012200854ad7c200341f01e6a41086a2903007c2017201254ad7c200341c01f6a41086a2903007c2020201754ad7c2021202054ad7c420d86847c220842ffffffffffffff03833703a83f200320032903a01f222720032903d01e7c221220032903e01c7c221720032903b01d7c222020032903801e7c22212008423388200341f01c6a41086a290300200341b01f6a41086a2903007c2023201f54ad7c200341c01d6a41086a2903007c2024202354ad7c200341901e6a41086a2903007c2025202454ad7c200341e01e6a41086a2903007c201e202554ad7c2008201e54ad7c420d86847c220842ffffffffffffff03833703b03f20032008423388200341a01f6a41086a290300200341d01e6a41086a2903007c2012202754ad7c200341e01c6a41086a2903007c2017201254ad7c200341b01d6a41086a2903007c2020201754ad7c200341801e6a41086a2903007c2021202054ad7c2008202154ad7c420d868442137e202242ffffffffffffff03837c220842ffffffffffffff03833703903f20032008423388201d42ffffffffffffff03837c3703983f200341b83f6a200341903f6a410a106e200341901a6a200b420020032903b83f2208420010e808200341e01a6a2028420020032903d83f2212420010e808200341b01b6a20032903d03f22174200201c420010e808200341801c6a20032903c83f222042002013420010e808200341d01c6a20032903c03f22214200201a420010e808200341c01c6a20214200200b420010e808200341801a6a201842002008420010e808200341d01a6a20124200201c420010e808200341a01b6a201742002013420010e808200341f01b6a20204200201a420010e808200341e01b6a20204200200b420010e808200341b01c6a202142002018420010e808200341f0196a200842002019420010e808200341c01a6a201242002013420010e808200341901b6a20174200201a420010e808200341801b6a20174200200b420010e808200341d01b6a202042002018420010e808200341a01c6a202142002019420010e808200341e0196a20084200201b420010e808200341b01a6a20124200201a420010e808200341a01a6a20124200200b420010e808200341f01a6a201742002018420010e808200341c01b6a202042002019420010e808200341901c6a20214200201b420010e808200341d0196a200842002026420010e808200320032903c01a222420032903f0197c220b20032903901b7c221820032903e01b7c221a20032903b01c7c221b20032903801a222520032903d01a7c221920032903a01b7c221320032903f01b7c220820032903c01c7c221220032903b01b222620032903901a7c221720032903e01a7c222020032903801c7c222120032903d01c7c2223423388200341b01b6a41086a290300200341901a6a41086a2903007c2017202654ad7c200341e01a6a41086a2903007c2020201754ad7c200341801c6a41086a2903007c2021202054ad7c200341d01c6a41086a2903007c2023202154ad7c420d86847c2217423388200341801a6a41086a290300200341d01a6a41086a2903007c2019202554ad7c200341a01b6a41086a2903007c2013201954ad7c200341f01b6a41086a2903007c2008201354ad7c200341c01c6a41086a2903007c2012200854ad7c2017201254ad7c420d86847c221342ffffffffffffff038322193703f03f200320032903b01a222520032903e0197c220820032903801b7c221220032903d01b7c222020032903a01c7c22212013423388200341c01a6a41086a290300200341f0196a41086a2903007c200b202454ad7c200341901b6a41086a2903007c2018200b54ad7c200341e01b6a41086a2903007c201a201854ad7c200341b01c6a41086a2903007c201b201a54ad7c2013201b54ad7c420d86847c220b42ffffffffffffff0383221b3703f83f200320032903a01a221c20032903d0197c221820032903f01a7c221a20032903c01b7c221320032903901c7c2224200b423388200341b01a6a41086a290300200341e0196a41086a2903007c2008202554ad7c200341801b6a41086a2903007c2012200854ad7c200341d01b6a41086a2903007c2020201254ad7c200341a01c6a41086a2903007c2021202054ad7c200b202154ad7c420d86847c220b42ffffffffffffff03832226370380402003200b423388200341a01a6a41086a290300200341d0196a41086a2903007c2018201c54ad7c200341f01a6a41086a2903007c201a201854ad7c200341c01b6a41086a2903007c2013201a54ad7c200341901c6a41086a2903007c2024201354ad7c200b202454ad7c420d868442137e202342ffffffffffffff03837c221842ffffffffffffff0383220b3703e03f20032018423388201742ffffffffffffff03837c22183703e83f20034188c0006a200341e03f6a4132106e20034180176a200b42002003290388402208420010e808200341d0176a201842137e2228420020032903a8402212420010e808200341a0186a201942137e221c420020032903a0402217420010e808200341f0186a201b42137e221342002003290398402220420010e808200341c0196a202642137e221a42002003290390402221420010e808200341b0196a200b42002021420010e808200341f0166a201842002008420010e808200341c0176a201c42002012420010e80820034190186a201342002017420010e808200341e0186a201a42002020420010e808200341d0186a200b42002020420010e808200341a0196a201842002021420010e808200341e0166a201942002008420010e808200341b0176a201342002012420010e80820034180186a201a42002017420010e808200341f0176a200b42002017420010e808200341c0186a201842002020420010e80820034190196a202142002019420010e808200341d0166a201b42002008420010e808200341a0176a201a42002012420010e80820034190176a200b42002012420010e808200341e0176a201842002017420010e808200341b0186a201942002020420010e80820034180196a201b42002021420010e808200341c0166a202642002008420010e808200320032903b017222920032903e0167c22082003290380187c221220032903d0187c222020032903a0197c2221200329039018222720032903c0177c221720032903e0187c222320032903b0197c222420032903f0167c222520032903f018222a20032903a0187c221d20032903c0197c221e2003290380177c221f20032903d0177c2222423388200341f0186a41086a290300200341a0186a41086a2903007c201d202a54ad7c200341c0196a41086a2903007c201e201d54ad7c20034180176a41086a2903007c201f201e54ad7c200341d0176a41086a2903007c2022201f54ad7c420d86847c221e42338820034190186a41086a290300200341c0176a41086a2903007c2017202754ad7c200341e0186a41086a2903007c2023201754ad7c200341b0196a41086a2903007c2024202354ad7c200341f0166a41086a2903007c2025202454ad7c201e202554ad7c420d86847c222342ffffffffffffff038322173703c040200320032903d016222a2003290390197c222420032903a0177c222520032903f0177c221f20032903c0187c22272023423388200341b0176a41086a290300200341e0166a41086a2903007c2008202954ad7c20034180186a41086a2903007c2012200854ad7c200341d0186a41086a2903007c2020201254ad7c200341a0196a41086a2903007c2021202054ad7c2023202154ad7c420d86847c220842ffffffffffffff0383221d3703c8402003200329038019222920032903b0187c221220032903c0167c22202003290390177c222120032903e0177c22232008423388200341d0166a41086a29030020034190196a41086a2903007c2024202a54ad7c200341a0176a41086a2903007c2025202454ad7c200341f0176a41086a2903007c201f202554ad7c200341c0186a41086a2903007c2027201f54ad7c2008202754ad7c420d86847c220842ffffffffffffff0383221f3703d0402003200842338820034180196a41086a290300200341b0186a41086a2903007c2012202954ad7c200341c0166a41086a2903007c2020201254ad7c20034190176a41086a2903007c2021202054ad7c200341e0176a41086a2903007c2023202154ad7c2008202354ad7c420d868442137e202242ffffffffffffff03837c221242ffffffffffffff038322083703b04020032012423388201e42ffffffffffffff03837c22123703b840200341d8c0006a200341b0c0006a41e400106e200341f0136a2008420020032903d8402220420010e808200341c0146a201242137e420020032903f8402221420010e80820034190156a201742137e2227420020032903f0402223420010e808200341e0156a201d42137e2222420020032903e8402224420010e808200341b0166a201f42137e221e420020032903e0402225420010e808200341a0166a200842002025420010e808200341e0136a201242002020420010e808200341b0146a202742002021420010e80820034180156a202242002023420010e808200341d0156a201e42002024420010e808200341c0156a200842002024420010e80820034190166a201242002025420010e808200341d0136a201742002020420010e808200341a0146a202242002021420010e808200341f0146a201e42002023420010e808200341e0146a200842002023420010e808200341b0156a201242002024420010e80820034180166a201742002025420010e808200341c0136a201d42002020420010e80820034190146a201e42002021420010e80820034180146a200842002021420010e808200341d0146a201242002023420010e808200341a0156a201742002024420010e808200341f0156a201d42002025420010e808200341b0136a201f42002020420010e808200320032903a014222720032903d0137c220820032903f0147c221220032903c0157c22172003290390167c2220200329038015222920032903b0147c222120032903d0157c222320032903a0167c222420032903e0137c222520032903e015222a2003290390157c221d20032903b0167c221e20032903f0137c221f20032903c0147c2222423388200341e0156a41086a29030020034190156a41086a2903007c201d202a54ad7c200341b0166a41086a2903007c201e201d54ad7c200341f0136a41086a2903007c201f201e54ad7c200341c0146a41086a2903007c2022201f54ad7c420d86847c221d42338820034180156a41086a290300200341b0146a41086a2903007c2021202954ad7c200341d0156a41086a2903007c2023202154ad7c200341a0166a41086a2903007c2024202354ad7c200341e0136a41086a2903007c2025202454ad7c201d202554ad7c420d86847c222142ffffffffffffff038337039041200320032903c013221f2003290380167c22232003290390147c222420032903e0147c222520032903b0157c221e2021423388200341a0146a41086a290300200341d0136a41086a2903007c2008202754ad7c200341f0146a41086a2903007c2012200854ad7c200341c0156a41086a2903007c2017201254ad7c20034190166a41086a2903007c2020201754ad7c2021202054ad7c420d86847c220842ffffffffffffff038337039841200320032903f015222720032903a0157c221220032903b0137c22172003290380147c222020032903d0147c22212008423388200341c0136a41086a29030020034180166a41086a2903007c2023201f54ad7c20034190146a41086a2903007c2024202354ad7c200341e0146a41086a2903007c2025202454ad7c200341b0156a41086a2903007c201e202554ad7c2008201e54ad7c420d86847c220842ffffffffffffff03833703a04120032008423388200341f0156a41086a290300200341a0156a41086a2903007c2012202754ad7c200341b0136a41086a2903007c2017201254ad7c20034180146a41086a2903007c2020201754ad7c200341d0146a41086a2903007c2021202054ad7c2008202154ad7c420d868442137e202242ffffffffffffff03837c220842ffffffffffffff03833703804120032008423388201d42ffffffffffffff03837c37038841200341a8c1006a20034180c1006a4132106e200341a0106a20032903a84122084200200b420010e808200341f0106a20032903c841221242002028420010e808200341c0116a20032903c04122174200201c420010e80820034190126a20032903b841222042002013420010e808200341e0126a20032903b04122214200201a420010e808200341f0126a20214200200b420010e808200341b0106a200842002018420010e80820034180116a20124200201c420010e808200341d0116a201742002013420010e808200341a0126a20204200201a420010e808200341b0126a20204200200b420010e80820034180136a202142002018420010e808200341c0106a200842002019420010e80820034190116a201242002013420010e808200341e0116a20174200201a420010e808200341f0116a20174200200b420010e808200341c0126a202042002018420010e80820034190136a202142002019420010e808200341d0106a20084200201b420010e808200341a0116a20124200201a420010e808200341b0116a20124200200b420010e80820034180126a201742002018420010e808200341d0126a202042002019420010e808200341a0136a20214200201b420010e808200341e0106a200842002026420010e8082003200329039011222420032903c0107c220b20032903e0117c221820032903b0127c22192003290380137c221a200329038011222520032903b0107c221b20032903d0117c221320032903a0127c220820032903f0127c221220032903f010222620032903a0107c221720032903c0117c22202003290390127c222120032903e0127c2223423388200341f0106a41086a290300200341a0106a41086a2903007c2017202654ad7c200341c0116a41086a2903007c2020201754ad7c20034190126a41086a2903007c2021202054ad7c200341e0126a41086a2903007c2023202154ad7c420d86847c221742338820034180116a41086a290300200341b0106a41086a2903007c201b202554ad7c200341d0116a41086a2903007c2013201b54ad7c200341a0126a41086a2903007c2008201354ad7c200341f0126a41086a2903007c2012200854ad7c2017201254ad7c420d86847c221b42ffffffffffffff038337039041200320032903a011222120032903d0107c221320032903f0117c220820032903c0127c22122003290390137c2220201b42338820034190116a41086a290300200341c0106a41086a2903007c200b202454ad7c200341e0116a41086a2903007c2018200b54ad7c200341b0126a41086a2903007c2019201854ad7c20034180136a41086a2903007c201a201954ad7c201b201a54ad7c420d86847c220b42ffffffffffffff038337039841200320032903b011222420032903e0107c22182003290380127c221920032903d0127c221a20032903a0137c221b200b423388200341a0116a41086a290300200341d0106a41086a2903007c2013202154ad7c200341f0116a41086a2903007c2008201354ad7c200341c0126a41086a2903007c2012200854ad7c20034190136a41086a2903007c2020201254ad7c200b202054ad7c420d86847c220b42ffffffffffffff03833703a0412003200b423388200341b0116a41086a290300200341e0106a41086a2903007c2018202454ad7c20034180126a41086a2903007c2019201854ad7c200341d0126a41086a2903007c201a201954ad7c200341a0136a41086a2903007c201b201a54ad7c200b201b54ad7c420d868442137e202342ffffffffffffff03837c220b42ffffffffffffff0383370380412003200b423388201742ffffffffffffff03837c37038841200341a8c1006a20034180c1006a4102106e200341900d6a2015420020032903a841220b420010e80820034190106a2014420020032903b041221842137e420010e808200341c00f6a200f420020032903b841221942137e2208420010e808200341f00e6a200c420020032903c041221b42137e2213420010e808200341a00e6a2016420020032903c841221242137e221a420010e808200341a00d6a20164200200b420010e80820034180106a201542002018420010e808200341b00f6a201442002008420010e808200341e00e6a200f42002013420010e808200341900e6a200c4200201a420010e808200341b00d6a200c4200200b420010e808200341f00f6a201642002018420010e808200341a00f6a201542002019420010e808200341d00e6a201442002013420010e808200341800e6a200f4200201a420010e808200341c00d6a200f4200200b420010e808200341e00f6a200c42002018420010e808200341900f6a201642002019420010e808200341c00e6a20154200201b420010e808200341f00d6a20144200201a420010e808200341d00d6a20144200200b420010e808200341d00f6a200f42002018420010e808200341800f6a200c42002019420010e808200341b00e6a20164200201b420010e808200341e00d6a201542002012420010e808200341f0096a20032903d00f221c20032903800f7c220c20032903d00d7c220f20032903e00d7c221420032903b00e7c221520032903c00d221d20032903e00f7c221620032903f00d7c220b20032903c00e7c221820032903900f7c221920032903800e221e20032903b00d7c221a20032903d00e7c221b20032903a00f7c221320032903f00f7c220820032903e00e221f20032903900e7c221220032903b00f7c22172003290380107c222020032903a00d7c222120032903c00f222220032903f00e7c22232003290390107c222420032903900d7c222520032903a00e7c2226423388200341c00f6a41086a290300200341f00e6a41086a2903007c2023202254ad7c20034190106a41086a2903007c2024202354ad7c200341900d6a41086a2903007c2025202454ad7c200341a00e6a41086a2903007c2026202554ad7c420d86847c2223423388200341e00e6a41086a290300200341900e6a41086a2903007c2012201f54ad7c200341b00f6a41086a2903007c2017201254ad7c20034180106a41086a2903007c2020201754ad7c200341a00d6a41086a2903007c2021202054ad7c2023202154ad7c420d86847c2212423388200341800e6a41086a290300200341b00d6a41086a2903007c201a201e54ad7c200341d00e6a41086a2903007c201b201a54ad7c200341a00f6a41086a2903007c2013201b54ad7c200341f00f6a41086a2903007c2008201354ad7c2012200854ad7c420d86847c221a423388200341c00d6a41086a290300200341e00f6a41086a2903007c2016201d54ad7c200341f00d6a41086a2903007c200b201654ad7c200341c00e6a41086a2903007c2018200b54ad7c200341900f6a41086a2903007c2019201854ad7c201a201954ad7c420d86847c2218423388200341d00f6a41086a290300200341800f6a41086a2903007c200c201c54ad7c200341d00d6a41086a2903007c200f200c54ad7c200341e00d6a41086a2903007c2014200f54ad7c200341b00e6a41086a2903007c2015201454ad7c2018201554ad7c420d868442137e202642ffffffffffffff03837c222742ffffffffffffff0383220c420020032903e032222820032903d0347c220f20032903a00b7c22142003290390327c221520032903a0337c221620032903e033222920032903e0347c220b20032903800c7c221920032903a0327c221b20032903f0327c221320032903f033222a20032903f0347c220820032903b0337c221720032903e00c7c222020032903b0327c222120032903c033222b2003290380347c22242003290380337c222520032903f00c7c22262003290380357c221c200329039033222c20032903d0337c221d20032903800d7c221e20032903c0327c221f2003290390347c222242338820034190336a41086a290300200341d0336a41086a2903007c201d202c54ad7c200341800d6a41086a2903007c201e201d54ad7c200341c0326a41086a2903007c201f201e54ad7c20034190346a41086a2903007c2022201f54ad7c420d86847c221d423388200341c0336a41086a29030020034180346a41086a2903007c2024202b54ad7c20034180336a41086a2903007c2025202454ad7c200341f00c6a41086a2903007c2026202554ad7c20034180356a41086a2903007c201c202654ad7c201d201c54ad7c420d86847c2224423388200341f0336a41086a290300200341f0346a41086a2903007c2008202a54ad7c200341b0336a41086a2903007c2017200854ad7c200341e00c6a41086a2903007c2020201754ad7c200341b0326a41086a2903007c2021202054ad7c2024202154ad7c420d86847c2208423388200341e0336a41086a290300200341e0346a41086a2903007c200b202954ad7c200341800c6a41086a2903007c2019200b54ad7c200341a0326a41086a2903007c201b201954ad7c200341f0326a41086a2903007c2013201b54ad7c2008201354ad7c420d86847c220b423388200341e0326a41086a290300200341d0346a41086a2903007c200f202854ad7c200341a00b6a41086a2903007c2014200f54ad7c20034190326a41086a2903007c2015201454ad7c200341a0336a41086a2903007c2016201554ad7c200b201654ad7c420d868442137e202242ffffffffffffff03837c221742ffffffffffffff0383220f420010e808200341900b6a200b42ffffffffffffff0383221442002027423388202342ffffffffffffff03837c221542137e420010e808200341f00b6a200842ffffffffffffff038322164200201242ffffffffffffff0383221942137e2208420010e808200341d00c6a202442ffffffffffffff0383220b4200201a42ffffffffffffff0383221b42137e2213420010e808200341c00a6a201842ffffffffffffff0383221242137e221a42002017423388201d42ffffffffffffff03837c2218420010e808200341b00a6a200c42002018420010e808200341e0096a20154200200f420010e808200341800b6a201442002008420010e808200341e00b6a201642002013420010e808200341c00c6a200b4200201a420010e808200341b00c6a200b4200200c420010e808200341a00a6a201542002018420010e808200341d0096a20194200200f420010e808200341f00a6a201442002013420010e808200341d00b6a20164200201a420010e808200341c00b6a20164200200c420010e808200341a00c6a200b42002015420010e808200341900a6a201942002018420010e808200341c0096a201b4200200f420010e808200341e00a6a20144200201a420010e808200341d00a6a20144200200c420010e808200341b00b6a201642002015420010e808200341900c6a200b42002019420010e808200341800a6a201b42002018420010e808200341b0096a20124200200f420010e808200320032903f00a221220032903d0097c220c20032903d00b7c220f20032903b00c7c221420032903a00a7c221520032903e00b221720032903800b7c221620032903c00c7c220b20032903b00a7c221820032903e0097c221920032903d00c222020032903f00b7c221a20032903c00a7c221b20032903f0097c221320032903900b7c2208423388200341d00c6a41086a290300200341f00b6a41086a2903007c201a202054ad7c200341c00a6a41086a2903007c201b201a54ad7c200341f0096a41086a2903007c2013201b54ad7c200341900b6a41086a2903007c2008201354ad7c221b420d86847c221a423388200341e00b6a41086a290300200341800b6a41086a2903007c2016201754ad7c200341c00c6a41086a2903007c200b201654ad7c200341b00a6a41086a2903007c2018200b54ad7c200341e0096a41086a2903007c2019201854ad7c201b4233887c201a201954ad7c2213420d86847c221642ffffffffffffff03833703e840200320032903c009221720032903900a7c220b20032903e00a7c221820032903c00b7c221920032903a00c7c221b2016423388200341f00a6a41086a290300200341d0096a41086a2903007c200c201254ad7c200341d00b6a41086a2903007c200f200c54ad7c200341b00c6a41086a2903007c2014200f54ad7c200341a00a6a41086a2903007c2015201454ad7c20134233887c2016201554ad7c2213420d86847c220c42ffffffffffffff03833703f040200320032903800a221220032903900c7c220f20032903b0097c221420032903d00a7c221520032903b00b7c2216200c423388200341c0096a41086a290300200341900a6a41086a2903007c200b201754ad7c200341e00a6a41086a2903007c2018200b54ad7c200341c00b6a41086a2903007c2019201854ad7c200341a00c6a41086a2903007c201b201954ad7c20134233887c200c201b54ad7c220b420d86847c220c42ffffffffffffff03833703f8402003200c423388200341800a6a41086a290300200341900c6a41086a2903007c200f201254ad7c200341b0096a41086a2903007c2014200f54ad7c200341d00a6a41086a2903007c2015201454ad7c200341b00b6a41086a2903007c2016201554ad7c200b4233887c200c201654ad7c420d868442137e200842ffffffffffffff03837c220c42ffffffffffffff03833703d8402003200c423388201a42ffffffffffffff03837c3703e040200341a8c1006a200341d8c0006a4101106e200341a0066a20032903a841220c42002004420010e808200341a0096a20032903b041220f42137e42002010420010e808200341d0086a20032903b841221442137e22184200200d420010e80820034180086a20032903c041221642137e220b4200200a420010e808200341b0076a20032903c841221942137e221542002007420010e808200341b0066a200c42002007420010e80820034190096a200f42002004420010e808200341c0086a201842002010420010e808200341f0076a200b4200200d420010e808200341a0076a20154200200a420010e808200341c0066a200c4200200a420010e80820034180096a200f42002007420010e808200341b0086a201442002004420010e808200341e0076a200b42002010420010e80820034190076a20154200200d420010e808200341d0066a200c4200200d420010e808200341f0086a200f4200200a420010e808200341a0086a201442002007420010e808200341d0076a201642002004420010e80820034180076a201542002010420010e808200341e0066a200c42002010420010e808200341e0086a200f4200200d420010e80820034190086a20144200200a420010e808200341c0076a201642002007420010e808200341f0066a201942002004420010e808200320032903b00822102003290380097c220420032903e0077c22072003290390077c220a20032903c0067c220c20032903c008221a2003290390097c220f20032903f0077c221420032903a0077c221520032903b0067c221620032903d008221b20032903a0097c220b2003290380087c220d20032903a0067c221820032903b0077c2219423388200341d0086a41086a290300200341a0096a41086a2903007c200b201b54ad7c20034180086a41086a2903007c200d200b54ad7c200341a0066a41086a2903007c2018200d54ad7c200341b0076a41086a2903007c2019201854ad7c420d86847c220b423388200341c0086a41086a29030020034190096a41086a2903007c200f201a54ad7c200341f0076a41086a2903007c2014200f54ad7c200341a0076a41086a2903007c2015201454ad7c200341b0066a41086a2903007c2016201554ad7c200b201654ad7c420d86847c220f42ffffffffffffff038337039041200320032903a008221820032903f0087c221420032903d0077c22152003290380077c221620032903d0067c220d200f423388200341b0086a41086a29030020034180096a41086a2903007c2004201054ad7c200341e0076a41086a2903007c2007200454ad7c20034190076a41086a2903007c200a200754ad7c200341c0066a41086a2903007c200c200a54ad7c200f200c54ad7c420d86847c220442ffffffffffffff0383370398412003200329039008221020032903e0087c220720032903c0077c220a20032903f0067c220c20032903e0067c220f2004423388200341a0086a41086a290300200341f0086a41086a2903007c2014201854ad7c200341d0076a41086a2903007c2015201454ad7c20034180076a41086a2903007c2016201554ad7c200341d0066a41086a2903007c200d201654ad7c2004200d54ad7c420d86847c220442ffffffffffffff03833703a0412003200442338820034190086a41086a290300200341e0086a41086a2903007c2007201054ad7c200341c0076a41086a2903007c200a200754ad7c200341f0066a41086a2903007c200c200a54ad7c200341e0066a41086a2903007c200f200c54ad7c2004200f54ad7c420d868442137e201942ffffffffffffff03837c220442ffffffffffffff03833703804120032004423388200b42ffffffffffffff03837c37038841200341b0c0006a20034180c1006a106b20034188c0006a2001106b410021024101212d034020034188c0006a20026a2d0000200341b0c0006a20026a2d000073222e4100202e6b72417f7341800171410776106d202d71212d200241016a22024120470d000b202d106d212f200341a8c1006a41086a42f0ffffffffffff3f200141086a2903007d220442ffffffffffffff038342d0fdffffffffff3f20012903007d22074233887c370300200341a8c1006a41106a42f0ffffffffffff3f200141106a2903007d220a42ffffffffffffff038320044233887c370300200341a8c1006a41186a42f0ffffffffffff3f200141186a2903007d220442ffffffffffffff0383200a4233887c370300200341a8c1006a41206a42f0ffffffffffff3f200141206a2903007d220a42ffffffffffffff038320044233887c3703002003200a42338842137e200742ffffffffffffff03837c3703a841200341b0c0006a20034180c1006a106b20034188c0006a200341a8c1006a106b410021024101212d034020034188c0006a20026a2d0000200341b0c0006a20026a2d000073222e4100202e6b72417f7341800171410776106d202d71212d200241016a22024120470d000b200341a0046a42f0ffffffffffff3f200e7d220742338842137e42d0fdffffffffff3f20117d220e42ffffffffffffff03837c2204420042b0c1bad0f4e48603420010e808200341d0036a42f0ffffffffffff3f20057d220a423388200742ffffffffffffff03837c2207420042a7a7fbf49beaf607420010e808200341f0046a42f0ffffffffffff3f20067d2211423388200a42ffffffffffffff03837c220a420042a0d69f90da80b1cb00420010e808200341c0056a42f0ffffffffffff3f20097d2205423388201142ffffffffffffff03837c2211420042badf96dcb5c3bac700420010e80820034190066a200542ffffffffffffff0383200e4233887c220e420042a7ecfac2b5f7ea19420010e80820034180066a200e420042b0c1bad0f4e48603420010e80820034190046a20044200429db1bce4dfb435420010e808200341c0036a2007420042a0d69f90da80b1cb00420010e808200341e0046a200a420042badf96dcb5c3bac700420010e808200341b0056a2011420042a7ecfac2b5f7ea19420010e808200341a0056a2011420042b0c1bad0f4e48603420010e808200341f0056a200e4200429db1bce4dfb435420010e80820034180046a2004420042e098f4e5e9ebfb03420010e808200341b0036a2007420042badf96dcb5c3bac700420010e808200341d0046a200a420042a7ecfac2b5f7ea19420010e808200341c0046a200a420042b0c1bad0f4e48603420010e80820034190056a20114200429db1bce4dfb435420010e808200341e0056a200e420042e098f4e5e9ebfb03420010e808200341f0036a20044200429e9981b4dab2e103420010e808200341a0036a2007420042a7ecfac2b5f7ea19420010e80820034190036a2007420042b0c1bad0f4e48603420010e808200341b0046a200a4200429db1bce4dfb435420010e80820034180056a2011420042e098f4e5e9ebfb03420010e808200341d0056a200e4200429e9981b4dab2e103420010e808200341e0036a20044200429df893c0a486ae01420010e808200341c0036a41086a290300211820034190046a41086a290300211920032903c00321042003290390042109200341e0046a41086a290300211020032903e004210c200341b0056a41086a290300211a20032903b005210f20034180066a41086a290300211b2003290380062114200341d0036a41086a2903002113200341a0046a41086a290300210820032903d003210720032903a0042115200341f0046a41086a290300211220032903f0042116200341c0056a41086a290300211720032903c005210b20034190066a41086a2903002120200329039006210d20032903b003210a200329038004211120032903d004210e20032903a005210520032903f0052106202d106d2101200320062005200e200a20117c22117c220e7c22057c22062014200f200c200420097c22097c220c7c220f7c2214200d200b2016200720157c22157c22167c220b7c220d423388202020172012201320087c2015200754ad7c7c2016201554ad7c7c200b201654ad7c7c200d200b54ad7c2215420d86847c2207423388201b201a2010201820197c2009200454ad7c7c200c200954ad7c7c200f200c54ad7c7c2014200f54ad7c20154233887c2007201454ad7c2215420d86847c220442ffffffffffffff03833703b841200320032903a003221620032903f0037c220920032903c0047c220c2003290390057c220f20032903e0057c22142004423388200341b0036a41086a29030020034180046a41086a2903007c2011200a54ad7c200341d0046a41086a2903007c200e201154ad7c200341a0056a41086a2903007c2005200e54ad7c200341f0056a41086a2903007c2006200554ad7c20154233887c2004200654ad7c2206420d86847c220442ffffffffffffff03833703c0412003200329039003221520032903e0037c220a20032903b0047c22112003290380057c220e20032903d0057c22052004423388200341a0036a41086a290300200341f0036a41086a2903007c2009201654ad7c200341c0046a41086a2903007c200c200954ad7c20034190056a41086a2903007c200f200c54ad7c200341e0056a41086a2903007c2014200f54ad7c20064233887c2004201454ad7c2206420d86847c220442ffffffffffffff03833703c8412003200442338820034190036a41086a290300200341e0036a41086a2903007c200a201554ad7c200341b0046a41086a2903007c2011200a54ad7c20034180056a41086a2903007c200e201154ad7c200341d0056a41086a2903007c2005200e54ad7c20064233887c2004200554ad7c420d868442137e200d42ffffffffffffff03837c220442ffffffffffffff03833703a84120032004423388200742ffffffffffffff03837c3703b041200341b0c0006a20034180c1006a106b20034188c0006a200341a8c1006a106b410021024101212d034020034188c0006a20026a2d0000200341b0c0006a20026a2d000073222e4100202e6b72417f7341800171410776106d202d71212d200241016a22024120470d000b202d106d210220034180036a20032903d8402204420042b0c1bad0f4e48603420010e808200320032903e040220742137e4200429df893c0a486ae01420010e808200341e0006a20032903e840220a42137e22064200429e9981b4dab2e103420010e808200341c0016a20032903f040220e42137e2205420042e098f4e5e9ebfb03420010e808200341a0026a20032903f840220942137e22114200429db1bce4dfb435420010e808200341f0026a20044200429db1bce4dfb435420010e808200341c0006a2007420042b0c1bad0f4e48603420010e808200341d0006a20064200429df893c0a486ae01420010e808200341b0016a20054200429e9981b4dab2e103420010e80820034190026a2011420042e098f4e5e9ebfb03420010e808200341e0026a2004420042e098f4e5e9ebfb03420010e808200341306a20074200429db1bce4dfb435420010e80820034190016a200a420042b0c1bad0f4e48603420010e808200341a0016a20054200429df893c0a486ae01420010e80820034180026a20114200429e9981b4dab2e103420010e808200341d0026a20044200429e9981b4dab2e103420010e808200341206a2007420042e098f4e5e9ebfb03420010e80820034180016a200a4200429db1bce4dfb435420010e808200341e0016a200e420042b0c1bad0f4e48603420010e808200341f0016a20114200429df893c0a486ae01420010e808200341c0026a20044200429df893c0a486ae01420010e808200341106a20074200429e9981b4dab2e103420010e808200341f0006a200a420042e098f4e5e9ebfb03420010e808200341d0016a200e4200429db1bce4dfb435420010e808200341b0026a2009420042b0c1bad0f4e48603420010e8082003200420042003290370220820032903107c220720032903d0017c220a20032903b0027c221120032903c0027c220e200329038001221220032903207c220520032903e0017c220620032903f0017c220920032903d0027c220c200329039001221720032903307c220f20032903a0017c22142003290380027c221520032903e0027c22162003290350222020032903407c220b20032903b0017c220d2003290390027c221820032903f0027c22192003290360222120032903007c221020032903c0017c221a2003290380037c221b20032903a0027c2213423388200341e0006a41086a290300200341086a2903007c2010202154ad7c200341c0016a41086a2903007c201a201054ad7c20034180036a41086a2903007c201b201a54ad7c200341a0026a41086a2903007c2013201b54ad7c420d86847c2210423388200341d0006a41086a290300200341c0006a41086a2903007c200b202054ad7c200341b0016a41086a2903007c200d200b54ad7c20034190026a41086a2903007c2018200d54ad7c200341f0026a41086a2903007c2019201854ad7c2010201954ad7c420d86847c220b42338820034190016a41086a290300200341306a41086a2903007c200f201754ad7c200341a0016a41086a2903007c2014200f54ad7c20034180026a41086a2903007c2015201454ad7c200341e0026a41086a2903007c2016201554ad7c200b201654ad7c420d86847c220f42338820034180016a41086a290300200341206a41086a2903007c2005201254ad7c200341e0016a41086a2903007c2006200554ad7c200341f0016a41086a2903007c2009200654ad7c200341d0026a41086a2903007c200c200954ad7c200f200c54ad7c420d86847c2205423388200341f0006a41086a290300200341106a41086a2903007c2007200854ad7c200341d0016a41086a2903007c200a200754ad7c200341b0026a41086a2903007c2011200a54ad7c200341c0026a41086a2903007c200e201154ad7c2005200e54ad7c420d868442137e201342ffffffffffffff03837c221142ffffffffffffff03838542002002200172106dad42ff01837d22078385220a3703d84020032011423388201042ffffffffffffff03837c20032903e04022048520078320048522113703e0402003200542ffffffffffffff038320032903f840220485200783200485220e3703f8402003200f42ffffffffffffff038320032903f04022048520078320048522053703f0402003200b42ffffffffffffff038320032903e84022048520078320048522073703e84020034188c0006a200341d8c0006a106b200342f0ffffffffffff3f200e7d220642ffffffffffffff038342f0ffffffffffff3f20057d22094233887c200e85420020032d008840410171106dad42ff01837d220483200e853703f8402003200942ffffffffffffff038342f0ffffffffffff3f20077d220e4233887c2005852004832005853703f0402003200e42ffffffffffffff038342f0ffffffffffff3f20117d220e4233887c2007852004832007853703e8402003200e42ffffffffffffff038342d0fdffffffffff3f200a7d22074233887c2011852004832011853703e0402003200642338842137e200742ffffffffffffff03837c200a85200483200a853703d84020002001202f72106d3a0000200020032903d840370308200041106a20032903e040370300200041186a20032903e840370300200041206a20032903f040370300200041286a20032903f840370300200341d0c1006a24000bd003011a7e200131001221022001310011210320013100102104200131000f2105200131000d2106200131000e2107200131001f2108200131001e2109200131001d210a200131001c210b200131001b210c200131001a210d200131000c210e200131000b210f200131000a21102001310009211120013100072112200131000821132001310019211420013100182115200131001721162001310016211720013100132118200131001421192001310015211a200020013500002001310004422086842001310005422886842001310006221b4230868442ffffffffffffff038337030020002018201942088684201a4210868420174218868420164220868420154228868420144230868442018842ffffffffffffff03833703182000201b201242088684201342108684201142188684201042208684200f42288684200e4230868442038842ffffffffffffff038337030820002015201442088684200d42108684200c42188684200b42208684200a42288684200942308684200842388684420c8842ffffffffffffff03833703202000200e20064208868420074210868420054218868420044220868420034228868420024230868420184238868442068842ffffffffffffff03833703100ba5990104017f237e057f0d7e230041f02b6b22022400200242003703e028200242013703d828200242003703e828200242003703f028200242003703f828200241c82a6a20014101106e200241c8256a20022903c82a2203420042b0c1bad0f4e48603420010e808200241c8286a20022903d02a220442137e4200429df893c0a486ae01420010e808200241f8276a20022903d82a220542137e22064200429e9981b4dab2e103420010e808200241a8276a20022903e02a220742137e2208420042e098f4e5e9ebfb03420010e808200241d8266a20022903e82a220942137e220a4200429db1bce4dfb435420010e808200241d8256a20034200429db1bce4dfb435420010e808200241b8286a2004420042b0c1bad0f4e48603420010e808200241e8276a20064200429df893c0a486ae01420010e80820024198276a20084200429e9981b4dab2e103420010e808200241c8266a200a420042e098f4e5e9ebfb03420010e808200241e8256a2003420042e098f4e5e9ebfb03420010e808200241a8286a20044200429db1bce4dfb435420010e808200241d8276a2005420042b0c1bad0f4e48603420010e80820024188276a20084200429df893c0a486ae01420010e808200241b8266a200a4200429e9981b4dab2e103420010e808200241f8256a20034200429e9981b4dab2e103420010e80820024198286a2004420042e098f4e5e9ebfb03420010e808200241c8276a20054200429db1bce4dfb435420010e808200241f8266a2007420042b0c1bad0f4e48603420010e808200241a8266a200a4200429df893c0a486ae01420010e80820024188266a20034200429df893c0a486ae01420010e80820024188286a20044200429e9981b4dab2e103420010e808200241b8276a2005420042e098f4e5e9ebfb03420010e808200241e8266a20074200429db1bce4dfb435420010e80820024198266a2009420042b0c1bad0f4e48603420010e808200241b81d6a200229038826220b2002290398267c22032002290388287c220420022903b8277c220520022903e8267c220a20022903a826220c20022903f8267c220720022903f8257c22082002290398287c220620022903c8277c2209200229038827220d20022903d8277c220e20022903b8267c220f20022903e8257c221020022903a8287c221120022903e827221220022903b8287c22132002290398277c221420022903c8267c221520022903d8257c221620022903c828221720022903c8257c221820022903f8277c221920022903a8277c221a20022903d8267c221b423388200241c8286a41086a290300200241c8256a41086a2903007c2018201754ad7c200241f8276a41086a2903007c2019201854ad7c200241a8276a41086a2903007c201a201954ad7c200241d8266a41086a2903007c201b201a54ad7c420d86847c2218423388200241e8276a41086a290300200241b8286a41086a2903007c2013201254ad7c20024198276a41086a2903007c2014201354ad7c200241c8266a41086a2903007c2015201454ad7c200241d8256a41086a2903007c2016201554ad7c2018201654ad7c420d86847c221342338820024188276a41086a290300200241d8276a41086a2903007c200e200d54ad7c200241b8266a41086a2903007c200f200e54ad7c200241e8256a41086a2903007c2010200f54ad7c200241a8286a41086a2903007c2011201054ad7c2013201154ad7c420d86847c220e423388200241a8266a41086a290300200241f8266a41086a2903007c2007200c54ad7c200241f8256a41086a2903007c2008200754ad7c20024198286a41086a2903007c2006200854ad7c200241c8276a41086a2903007c2009200654ad7c200e200954ad7c420d86847c220742338820024188266a41086a29030020024198266a41086a2903007c2003200b54ad7c20024188286a41086a2903007c2004200354ad7c200241b8276a41086a2903007c2005200454ad7c200241e8266a41086a2903007c200a200554ad7c2007200a54ad7c420d868442137e201b42ffffffffffffff03837c220442ffffffffffffff0383220320022903d8287c2208420042f682ffa299b88202420010e808200241d81c6a200742ffffffffffffff0383220720022903f8287c2206420042ddf396f0fbf7b9c300420010e808200241e81c6a200e42ffffffffffffff0383220a20022903f0287c2209420042ccf7d9e9fbcee010420010e80820024188236a201342ffffffffffffff0383220520022903e8287c220e4200428df582a3b0868004420010e808200241e8216a2004423388201842ffffffffffffff03837c220420022903e0287c220f4200429aebd0c282f1c201420010e808200241f8216a200f420042f682ffa299b88202420010e808200241c81d6a2008420042cff887b5bcb5c603420010e808200241c81c6a2006420042ccf7d9e9fbcee010420010e808200241f81c6a20094200428df582a3b0868004420010e80820024198236a200e4200429aebd0c282f1c201420010e808200241a8236a200e420042f682ffa299b88202420010e80820024188226a200f420042cff887b5bcb5c603420010e808200241d81d6a2008420042848dc885f9eff000420010e808200241b81c6a20064200428df582a3b0868004420010e808200241881d6a20094200429aebd0c282f1c201420010e808200241981d6a2009420042f682ffa299b88202420010e808200241b8236a200e420042cff887b5bcb5c603420010e80820024198226a200f420042848dc885f9eff000420010e808200241e81d6a2008420042dfddd7d2ccf91a420010e808200241a81c6a20064200429aebd0c282f1c201420010e808200241981c6a2006420042f682ffa299b88202420010e808200241a81d6a2009420042cff887b5bcb5c603420010e808200241c8236a200e420042848dc885f9eff000420010e808200241a8226a200f420042dfddd7d2ccf91a420010e808200241f81d6a2008420042bed6acd4f2a00a420010e808200220022903b81c221920022903d81d7c220820022903881d7c220620022903a8237c22092002290388227c220e20022903c81c221a20022903c81d7c220f20022903f81c7c22102002290398237c221120022903f8217c221320022903d81c221b20022903b81d7c221420022903e81c7c22152002290388237c221620022903e8217c2218423388200241d81c6a41086a290300200241b81d6a41086a2903007c2014201b54ad7c200241e81c6a41086a2903007c2015201454ad7c20024188236a41086a2903007c2016201554ad7c200241e8216a41086a2903007c2018201654ad7c420d86847c2214423388200241c81c6a41086a290300200241c81d6a41086a2903007c200f201a54ad7c200241f81c6a41086a2903007c2010200f54ad7c20024198236a41086a2903007c2011201054ad7c200241f8216a41086a2903007c2013201154ad7c2014201354ad7c420d86847c220f42ffffffffffffff038337039029200220022903a81c221620022903e81d7c221020022903981d7c221120022903b8237c22132002290398227c2215200f423388200241b81c6a41086a290300200241d81d6a41086a2903007c2008201954ad7c200241881d6a41086a2903007c2006200854ad7c200241a8236a41086a2903007c2009200654ad7c20024188226a41086a2903007c200e200954ad7c200f200e54ad7c420d86847c220842ffffffffffffff038337039829200220022903981c221920022903f81d7c220620022903a81d7c220920022903c8237c220e20022903a8227c220f2008423388200241a81c6a41086a290300200241e81d6a41086a2903007c2010201654ad7c200241981d6a41086a2903007c2011201054ad7c200241b8236a41086a2903007c2013201154ad7c20024198226a41086a2903007c2015201354ad7c2008201554ad7c420d86847c220842ffffffffffffff03833703a02920022008423388200241981c6a41086a290300200241f81d6a41086a2903007c2006201954ad7c200241a81d6a41086a2903007c2009200654ad7c200241c8236a41086a2903007c200e200954ad7c200241a8226a41086a2903007c200f200e54ad7c2008200f54ad7c420d868442137e201842ffffffffffffff03837c220842ffffffffffffff03833703802920022008423388201442ffffffffffffff03837c37038829200241d8216a2003420042a3f1e59aa1b9d301420010e808200241f8226a200442137e221c420042ffed8af7ec86c802420010e808200241e8236a200542137e2210420042bbf9809de6b8ce03420010e80820024198246a200a42137e2211420042a9808780a6f4f902420010e808200241d8246a200742137e2208420042bdddd5d88385ea00420010e808200241c8216a2003420042bdddd5d88385ea00420010e808200241e8226a2004420042a3f1e59aa1b9d301420010e808200241d8236a2010420042ffed8af7ec86c802420010e80820024188246a2011420042bbf9809de6b8ce03420010e808200241c8246a2008420042a9808780a6f4f902420010e808200241b8216a2003420042a9808780a6f4f902420010e808200241d8226a2004420042bdddd5d88385ea00420010e808200241e8246a2005420042a3f1e59aa1b9d301420010e808200241f8236a2011420042ffed8af7ec86c802420010e808200241b8246a2008420042bbf9809de6b8ce03420010e808200241a8216a2003420042bbf9809de6b8ce03420010e808200241c8226a2004420042a9808780a6f4f902420010e808200241f8246a2005420042bdddd5d88385ea00420010e80820024198256a200a420042a3f1e59aa1b9d301420010e808200241a8246a2008420042ffed8af7ec86c802420010e808200241d8206a2003420042ffed8af7ec86c802420010e808200241b8226a2004420042bbf9809de6b8ce03420010e80820024188256a2005420042a9808780a6f4f902420010e808200241a8256a200a420042bdddd5d88385ea00420010e808200241b8256a2007420042a3f1e59aa1b9d301420010e808200241881e6a200342a3f1e59aa1b9d3017c2206420042efffffffffffffc30020022903d820221d20022903b8257c220920022903b8227c220e2002290388257c220f20022903a8257c221320022903a824221e2002290398257c221420022903a8217c221520022903c8227c221620022903f8247c221820022903f823221f20022903e8247c221920022903b8247c221a20022903b8217c221b20022903d8227c220b20022903d823222020022903e8227c220c2002290388247c220d20022903c8247c221220022903c8217c221720022903f822222120022903d8217c222220022903e8237c22232002290398247c222420022903d8247c2225423388200241f8226a41086a290300200241d8216a41086a2903007c2022202154ad7c200241e8236a41086a2903007c2023202254ad7c20024198246a41086a2903007c2024202354ad7c200241d8246a41086a2903007c2025202454ad7c420d86847c2222423388200241d8236a41086a290300200241e8226a41086a2903007c200c202054ad7c20024188246a41086a2903007c200d200c54ad7c200241c8246a41086a2903007c2012200d54ad7c200241c8216a41086a2903007c2017201254ad7c2022201754ad7c420d86847c220c423388200241f8236a41086a290300200241e8246a41086a2903007c2019201f54ad7c200241b8246a41086a2903007c201a201954ad7c200241b8216a41086a2903007c201b201a54ad7c200241d8226a41086a2903007c200b201b54ad7c200c200b54ad7c420d86847c2219423388200241a8246a41086a29030020024198256a41086a2903007c2014201e54ad7c200241a8216a41086a2903007c2015201454ad7c200241c8226a41086a2903007c2016201554ad7c200241f8246a41086a2903007c2018201654ad7c2019201854ad7c420d86847c221442ffffffffffffff03837d221542338842137e42bcfdffffffffffc3002014423388200241d8206a41086a290300200241b8256a41086a2903007c2009201d54ad7c200241b8226a41086a2903007c200e200954ad7c20024188256a41086a2903007c200f200e54ad7c200241a8256a41086a2903007c2013200f54ad7c2014201354ad7c420d868442137e202542ffffffffffffff03837c221342ffffffffffffff03837d221642ffffffffffffff03837c2209420010e808200241881f6a201542ffffffffffffff038342efffffffffffffc300201942ffffffffffffff03837d220f4233887c220e4200201c4287f0dc94c6dfde0f7c420010e80820024198216a200f42ffffffffffffff038342efffffffffffffc300200c42ffffffffffffff03837d22144233887c220f42002010428b868581d2a18c387c2215420010e808200241c8206a201442ffffffffffffff038342efffffffffffffc3002013423388202242ffffffffffffff03837c7d22134233887c22104200201142e18392a796b7d2c4007c2214420010e80820024188206a201342ffffffffffffff038320164233887c22114200200842eda9ced69582d9307c2208420010e808200241981e6a201142002006420010e808200241c81f6a20094200200442bdddd5d88385ea007c2213420010e808200241f81e6a200e42002015420010e80820024188216a200f42002014420010e808200241b8206a201042002008420010e808200241a81e6a201042002006420010e808200241f81f6a201142002013420010e808200241b81f6a20094200200542a9808780a6f4f9027c2215420010e808200241e81e6a200e42002014420010e808200241f8206a200f42002008420010e808200241b81e6a200f42002006420010e808200241a8206a201042002013420010e808200241e81f6a201142002015420010e808200241a81f6a20094200200a42bbf9809de6b8ce037c2214420010e808200241d81e6a200e42002008420010e808200241c81e6a200e42002006420010e808200241e8206a200f42002013420010e80820024198206a201042002015420010e808200241d81f6a201142002014420010e808200241981f6a20094200200742ffed8af7ec86c8027c420010e808200220022903e81e221920022903b81f7c220820022903f8207c220620022903a81e7c220920022903f81f7c220e20022903f81e221a20022903c81f7c220f2002290388217c221020022903b8207c221120022903981e7c221320022903881f221b20022903881e7c22142002290398217c221520022903c8207c22162002290388207c2218423388200241881f6a41086a290300200241881e6a41086a2903007c2014201b54ad7c20024198216a41086a2903007c2015201454ad7c200241c8206a41086a2903007c2016201554ad7c20024188206a41086a2903007c2018201654ad7c420d86847c2214423388200241f81e6a41086a290300200241c81f6a41086a2903007c200f201a54ad7c20024188216a41086a2903007c2010200f54ad7c200241b8206a41086a2903007c2011201054ad7c200241981e6a41086a2903007c2013201154ad7c2014201354ad7c420d86847c220f42ffffffffffffff03833703e029200220022903d81e221620022903a81f7c221020022903b81e7c221120022903a8207c221320022903e81f7c2215200f423388200241e81e6a41086a290300200241b81f6a41086a2903007c2008201954ad7c200241f8206a41086a2903007c2006200854ad7c200241a81e6a41086a2903007c2009200654ad7c200241f81f6a41086a2903007c200e200954ad7c200f200e54ad7c420d86847c220842ffffffffffffff03833703e829200220022903c81e221920022903981f7c220620022903e8207c22092002290398207c220e20022903d81f7c220f2008423388200241d81e6a41086a290300200241a81f6a41086a2903007c2010201654ad7c200241b81e6a41086a2903007c2011201054ad7c200241a8206a41086a2903007c2013201154ad7c200241e81f6a41086a2903007c2015201354ad7c2008201554ad7c420d86847c220842ffffffffffffff03833703f02920022008423388200241c81e6a41086a290300200241981f6a41086a2903007c2006201954ad7c200241e8206a41086a2903007c2009200654ad7c20024198206a41086a2903007c200e200954ad7c200241d81f6a41086a2903007c200f200e54ad7c2008200f54ad7c420d868442137e201842ffffffffffffff03837c220842ffffffffffffff03833703d02920022008423388201442ffffffffffffff03837c3703d829200241c82a6a20024180296a200241d0296a106f20022d00c82a2126200241a02a6a41206a2227200241f02a6a2903002208370300200241a02a6a41186a2228200241c82a6a41206a2903002206370300200241a02a6a41106a2229200241c82a6a41186a2903002209370300200241a02a6a41086a222a200241c82a6a41106a290300220e370300200220022903d02a220f3703a02a20024188196a200129030022104200200f420010e808200241881c6a200842002001290308221142137e420010e808200241b81b6a200642002001290310221342137e2218420010e808200241e81a6a200942002001290318221542137e2216420010e808200241981a6a200e42002001290320221942137e2214420010e80820024198196a200e42002010420010e808200241f81b6a200f42002011420010e808200241a81b6a200842002018420010e808200241d81a6a200642002016420010e808200241881a6a200942002014420010e808200241a8196a200942002010420010e808200241e81b6a200e42002011420010e808200241981b6a200f42002013420010e808200241c81a6a200842002016420010e808200241f8196a200642002014420010e808200241b8196a200642002010420010e808200241d81b6a200942002011420010e808200241881b6a200e42002013420010e808200241b81a6a200f42002015420010e808200241e8196a200842002014420010e808200241c8196a200842002010420010e808200241c81b6a200642002011420010e808200241f81a6a200942002013420010e808200241a81a6a200e42002015420010e808200241d8196a200f42002019420010e808200220022903c819222220022903d8197c220820022903c81b7c220620022903f81a7c220920022903a81a7c220e20022903e819222320022903b81a7c220f20022903b8197c221020022903d81b7c221120022903881b7c221320022903c81a222420022903981b7c221420022903f8197c221520022903a8197c221620022903e81b7c221820022903a81b222520022903f81b7c221920022903d81a7c221a20022903881a7c221b2002290398197c220b20022903881c221c2002290388197c220c20022903b81b7c220d20022903e81a7c221220022903981a7c2217423388200241881c6a41086a29030020024188196a41086a2903007c200c201c54ad7c200241b81b6a41086a2903007c200d200c54ad7c200241e81a6a41086a2903007c2012200d54ad7c200241981a6a41086a2903007c2017201254ad7c420d86847c220c423388200241a81b6a41086a290300200241f81b6a41086a2903007c2019202554ad7c200241d81a6a41086a2903007c201a201954ad7c200241881a6a41086a2903007c201b201a54ad7c20024198196a41086a2903007c200b201b54ad7c200c200b54ad7c420d86847c2219423388200241c81a6a41086a290300200241981b6a41086a2903007c2014202454ad7c200241f8196a41086a2903007c2015201454ad7c200241a8196a41086a2903007c2016201554ad7c200241e81b6a41086a2903007c2018201654ad7c2019201854ad7c420d86847c2214423388200241e8196a41086a290300200241b81a6a41086a2903007c200f202354ad7c200241b8196a41086a2903007c2010200f54ad7c200241d81b6a41086a2903007c2011201054ad7c200241881b6a41086a2903007c2013201154ad7c2014201354ad7c420d86847c220f423388200241c8196a41086a290300200241d8196a41086a2903007c2008202254ad7c200241c81b6a41086a2903007c2006200854ad7c200241f81a6a41086a2903007c2009200654ad7c200241a81a6a41086a2903007c200e200954ad7c200f200e54ad7c420d868442137e201742ffffffffffffff03837c220842ffffffffffffff03833703f82a20022008423388200c42ffffffffffffff03837c22063703802b2002200f42ffffffffffffff038322093703982b2002201442ffffffffffffff0383220e3703902b2002201942ffffffffffffff0383220f3703882b200241c82a6a200241f82a6a106b20022d00c82a410171106d417f73410171106d21012002200642f0ffffffffffff3f20067d221142ffffffffffffff038342d0fdffffffffff3f20022903f82a22107d22134233887c8542002001ad42ff01837d22088320068522063703802b2002200942f0ffffffffffff3f20097d221442ffffffffffffff038342f0ffffffffffff3f200e7d22154233887c8520088320098522093703982b2002200f42f0ffffffffffff3f200f7d221642ffffffffffffff038320114233887c85200883200f85220f3703882b200220102010201442338842137e201342ffffffffffffff03837c852008838522103703f82a2002200e201542ffffffffffffff038320164233887c85200883200e85220e3703902b2026417f734101712201106d2126202a202a290300221120068542002026ad42ff01837d220883201185370300202920292903002206200f85200883200685370300202820282903002206200e85200883200685370300202720272903002206200985200883200685370300200220022903a02a22062010852008832006853703a02a2001106d2101200241c80f6a200720022903f8287d42f0ffffffffffff3f7c221142338842137e200320022903d8287d42d0fdffffffffff3f7c220942ffffffffffffff03837c22084200200342ecffffffffffff038542002001ad42ff01837d22038342ecffffffffffff03852206420010e808200241880d6a200742ffffffffffffff038520038342ffffffffffffff038522074200200420022903e0287d42f0ffffffffffff3f7c220f42ffffffffffffff038320094233887c220942137e420010e808200241d80d6a200a42ffffffffffffff038520038342ffffffffffffff0385220e4200200520022903e8287d42f0ffffffffffff3f7c221042ffffffffffffff0383200f4233887c220f42137e2213420010e808200241a80e6a200542ffffffffffffff038520038342ffffffffffffff038522054200200a20022903f0287d42f0ffffffffffff3f7c221442ffffffffffffff038320104233887c220a42137e2210420010e808200241f80e6a200442ffffffffffffff038520038342ffffffffffffff038522034200201142ffffffffffffff038320144233887c221142137e2204420010e808200241e80e6a200342002008420010e808200241b80f6a200642002009420010e808200241f80c6a200742002013420010e808200241c80d6a200e42002010420010e808200241980e6a200542002004420010e808200241880e6a200542002008420010e808200241d80e6a200342002009420010e808200241a80f6a20064200200f420010e808200241e80c6a200742002010420010e808200241b80d6a200e42002004420010e808200241a80d6a200e42002008420010e808200241f80d6a200542002009420010e808200241c80e6a20034200200f420010e808200241980f6a20064200200a420010e808200241880c6a200742002004420010e808200241a80b6a200742002008420010e808200241980d6a200e42002009420010e808200241e80d6a20054200200f420010e808200241b80e6a20034200200a420010e808200241880f6a200642002011420010e808200241f8096a20022903a80b220b20022903880f7c220320022903980d7c220420022903e80d7c220520022903b80e7c220a20022903880c220c20022903980f7c220720022903a80d7c220820022903f80d7c220620022903c80e7c220920022903e80c220d20022903a80f7c220e20022903b80d7c220f20022903880e7c221020022903d80e7c221120022903f80c221220022903b80f7c221320022903c80d7c221420022903980e7c221520022903e80e7c221620022903880d221720022903c80f7c221820022903d80d7c221920022903a80e7c221a20022903f80e7c221b423388200241880d6a41086a290300200241c80f6a41086a2903007c2018201754ad7c200241d80d6a41086a2903007c2019201854ad7c200241a80e6a41086a2903007c201a201954ad7c200241f80e6a41086a2903007c201b201a54ad7c420d86847c2218423388200241f80c6a41086a290300200241b80f6a41086a2903007c2013201254ad7c200241c80d6a41086a2903007c2014201354ad7c200241980e6a41086a2903007c2015201454ad7c200241e80e6a41086a2903007c2016201554ad7c2018201654ad7c420d86847c2213423388200241e80c6a41086a290300200241a80f6a41086a2903007c200e200d54ad7c200241b80d6a41086a2903007c200f200e54ad7c200241880e6a41086a2903007c2010200f54ad7c200241d80e6a41086a2903007c2011201054ad7c2013201154ad7c420d86847c220e423388200241880c6a41086a290300200241980f6a41086a2903007c2007200c54ad7c200241a80d6a41086a2903007c2008200754ad7c200241f80d6a41086a2903007c2006200854ad7c200241c80e6a41086a2903007c2009200654ad7c200e200954ad7c420d86847c2207423388200241a80b6a41086a290300200241880f6a41086a2903007c2003200b54ad7c200241980d6a41086a2903007c2004200354ad7c200241e80d6a41086a2903007c2005200454ad7c200241b80e6a41086a2903007c200a200554ad7c2007200a54ad7c420d868442137e201b42ffffffffffffff03837c220842ffffffffffffff03832203420042a09ab5a7a4d5d602420010e808200241980b6a200742ffffffffffffff03832204420042efabafe6f7c88835420010e808200241f80b6a200e42ffffffffffffff03832205420042f8fb9b94e0ed8617420010e808200241d80c6a201342ffffffffffffff0383220a4200428b83d98ea38bdb0a420010e808200241c80a6a2008423388201842ffffffffffffff03837c2207420042e6c09290d28a8b35420010e808200241b80a6a2007420042a09ab5a7a4d5d602420010e808200241e8096a2003420042b5cccc99bcc0e502420010e808200241880b6a2004420042f8fb9b94e0ed8617420010e808200241e80b6a20054200428b83d98ea38bdb0a420010e808200241c80c6a200a420042e6c09290d28a8b35420010e808200241b80c6a200a420042a09ab5a7a4d5d602420010e808200241a80a6a2007420042b5cccc99bcc0e502420010e808200241d8096a2003420042a8f2a9fabaa79b01420010e808200241f80a6a20044200428b83d98ea38bdb0a420010e808200241d80b6a2005420042e6c09290d28a8b35420010e808200241c80b6a2005420042a09ab5a7a4d5d602420010e808200241a80c6a200a420042b5cccc99bcc0e502420010e808200241980a6a2007420042a8f2a9fabaa79b01420010e808200241c8096a2003420042a9afa6f3e694c800420010e808200241e80a6a2004420042e6c09290d28a8b35420010e808200241d80a6a2004420042a09ab5a7a4d5d602420010e808200241b80b6a2005420042b5cccc99bcc0e502420010e808200241980c6a200a420042a8f2a9fabaa79b01420010e808200241880a6a2007420042a9afa6f3e694c800420010e808200241b8096a2003420042c2cdbdbdb3d1e502420010e80820022903f029210f20022903e829210e20022903e029210520022903d829210320022903d0292104200241a02b6a200241a02a6a4101106e200241c82b6a41106a220120292903002207370300200241c82b6a41086a202a290300220a200a7c220a3703002001200720077c2207370300200241c82b6a41186a2028290300220820087c2208370300200241c82b6a41206a2027290300220620067c2206370300200220022903a02a220920097c22093703c82b200241c8176a200442002009420010e808200241b8176a20064200200342137e420010e808200241c8166a20084200200542137e2213420010e80820024188186a20074200200e42137e2211420010e808200241b8166a200a4200200f42137e2210420010e808200241c8186a200a42002004420010e808200241d8176a200942002003420010e808200241a8176a200642002013420010e808200241d8166a200842002011420010e808200241a8166a200742002010420010e80820024198186a200742002004420010e808200241d8186a200a42002003420010e808200241e8176a200942002005420010e80820024198176a200642002011420010e80820024198166a200842002010420010e808200241e8166a200842002004420010e808200241a8186a200742002003420010e808200241e8186a200a42002005420010e808200241f8176a20094200200e420010e808200241e8146a200642002010420010e80820024188176a200642002004420010e808200241f8166a200842002003420010e808200241b8186a200742002005420010e808200241f8186a200a4200200e420010e808200241b8136a20094200200f420010e808200241e8066a20022903d80a222220022903b8097c220a20022903b80b7c220720022903980c7c220820022903880a7c220620022903e80a222320022903c8097c220920022903c80b7c221020022903a80c7c221120022903980a7c221320022903f80a222420022903d8097c221420022903d80b7c221520022903b80c7c221620022903a80a7c221820022903880b222520022903e8097c221920022903e80b7c221a20022903c80c7c221b20022903b80a7c220b20022903980b221c20022903f8097c220c20022903f80b7c220d20022903d80c7c221220022903c80a7c2217423388200241980b6a41086a290300200241f8096a41086a2903007c200c201c54ad7c200241f80b6a41086a2903007c200d200c54ad7c200241d80c6a41086a2903007c2012200d54ad7c200241c80a6a41086a2903007c2017201254ad7c420d86847c220c423388200241880b6a41086a290300200241e8096a41086a2903007c2019202554ad7c200241e80b6a41086a2903007c201a201954ad7c200241c80c6a41086a2903007c201b201a54ad7c200241b80a6a41086a2903007c200b201b54ad7c200c200b54ad7c420d86847c2219423388200241f80a6a41086a290300200241d8096a41086a2903007c2014202454ad7c200241d80b6a41086a2903007c2015201454ad7c200241b80c6a41086a2903007c2016201554ad7c200241a80a6a41086a2903007c2018201654ad7c2019201854ad7c420d86847c2214423388200241e80a6a41086a290300200241c8096a41086a2903007c2009202354ad7c200241c80b6a41086a2903007c2010200954ad7c200241a80c6a41086a2903007c2011201054ad7c200241980a6a41086a2903007c2013201154ad7c2014201354ad7c420d86847c220942ffffffffffffff0383200f7d42f0ffffffffffff3f7c220f42338842137e2009423388200241d80a6a41086a290300200241b8096a41086a2903007c200a202254ad7c200241b80b6a41086a2903007c2007200a54ad7c200241980c6a41086a2903007c2008200754ad7c200241880a6a41086a2903007c2006200854ad7c2009200654ad7c420d868442137e201742ffffffffffffff03837c220742ffffffffffffff038320047d42d0fdffffffffff3f7c220842ffffffffffffff03837c22044200429bdceccb84d4fd03420010e808200241b8076a200f42ffffffffffffff0383201442ffffffffffffff0383200e7d42f0ffffffffffff3f7c22064233887c220a420042969988cadca7b00e420010e808200241a8096a200642ffffffffffffff0383201942ffffffffffffff038320057d42f0ffffffffffff3f7c22064233887c2205420042a88c8b81f5cabeca00420010e808200241d8086a200642ffffffffffffff03832007423388200c42ffffffffffffff03837c20037d42f0ffffffffffff3f7c22074233887c2203420042c8ee859b8cd29829420010e80820024188086a200742ffffffffffffff038320084233887c2207420042dcd78e98b19df320420010e808200241f8076a20074200429bdceccb84d4fd03420010e808200241d8066a2004420042d2dfded4f0ede000420010e808200241a8076a200a420042a88c8b81f5cabeca00420010e80820024198096a2005420042c8ee859b8cd29829420010e808200241c8086a2003420042dcd78e98b19df320420010e808200241b8086a20034200429bdceccb84d4fd03420010e808200241e8076a2007420042d2dfded4f0ede000420010e808200241c8066a2004420042b8ecf9b5ffe8f503420010e80820024198076a200a420042c8ee859b8cd29829420010e80820024188096a2005420042dcd78e98b19df320420010e808200241f8086a20054200429bdceccb84d4fd03420010e808200241a8086a2003420042d2dfded4f0ede000420010e808200241d8076a2007420042b8ecf9b5ffe8f503420010e80820024198056a200442004298c9f9f3f9c09502420010e80820024188076a200a420042dcd78e98b19df320420010e808200241f8066a200a4200429bdceccb84d4fd03420010e808200241e8086a2005420042d2dfded4f0ede000420010e80820024198086a2003420042b8ecf9b5ffe8f503420010e808200241c8076a200742004298c9f9f3f9c09502420010e808200241e8036a2004420042b4f0cadfb1d2dd01420010e80820022903b82b212320022903b02b212420022903a82b212520022903c02b211c20022903a02b211d200242003703d02a200242013703c82a200242003703d82a200242003703e02a200242003703e82a200220022903a02b42017c22033703c82a200220022903a82b22043703d02a200220022903b02b22103703d82a200220022903b82b22153703e02a200241e8106a20034200200229038817221720022903b8137c220520022903f8167c220a20022903b8187c220720022903f8187c220820022903e814222220022903f8177c220620022903e8167c220920022903a8187c220e20022903e8187c220f200229039817221e20022903e8177c22112002290398167c22132002290398187c221420022903d8187c221620022903a817221f20022903d8177c221820022903d8167c221920022903a8167c221a20022903c8187c221b20022903b817222020022903c8177c220b20022903c8167c220c2002290388187c220d20022903b8167c2212423388200241b8176a41086a290300200241c8176a41086a2903007c200b202054ad7c200241c8166a41086a2903007c200c200b54ad7c20024188186a41086a2903007c200d200c54ad7c200241b8166a41086a2903007c2012200d54ad7c420d86847c220b423388200241a8176a41086a290300200241d8176a41086a2903007c2018201f54ad7c200241d8166a41086a2903007c2019201854ad7c200241a8166a41086a2903007c201a201954ad7c200241c8186a41086a2903007c201b201a54ad7c200b201b54ad7c420d86847c221942338820024198176a41086a290300200241e8176a41086a2903007c2011201e54ad7c20024198166a41086a2903007c2013201154ad7c20024198186a41086a2903007c2014201354ad7c200241d8186a41086a2903007c2016201454ad7c2019201654ad7c420d86847c2211423388200241e8146a41086a290300200241f8176a41086a2903007c2006202254ad7c200241e8166a41086a2903007c2009200654ad7c200241a8186a41086a2903007c200e200954ad7c200241e8186a41086a2903007c200f200e54ad7c2011200f54ad7c420d86847c220642338820024188176a41086a290300200241b8136a41086a2903007c2005201754ad7c200241f8166a41086a2903007c200a200554ad7c200241b8186a41086a2903007c2007200a54ad7c200241f8186a41086a2903007c2008200754ad7c2006200854ad7c420d868442137e201242ffffffffffffff03837c220942ffffffffffffff03832205420010e808200241a8136a200642ffffffffffffff0383220a4200200442137e222b420010e808200241d8146a201142ffffffffffffff038322074200201042137e2218420010e80820024188166a201942ffffffffffffff038322084200201542137e2216420010e80820024188126a2009423388200b42ffffffffffffff03837c2206420020022903c02b221a42137e2211420010e808200241f8116a200642002003420010e808200241d8106a200542002004420010e80820024198136a200a42002018420010e808200241c8146a200742002016420010e808200241f8156a200842002011420010e808200241e8156a200842002003420010e808200241e8116a200642002004420010e808200241c8106a200542002010420010e80820024188136a200a42002016420010e808200241b8146a200742002011420010e808200241a8146a200742002003420010e808200241d8156a200842002004420010e808200241d8116a200642002010420010e808200241b8106a200542002015420010e808200241f8126a200a42002011420010e808200241e8126a200a42002003420010e80820024198146a200742002004420010e808200241c8156a200842002010420010e808200241c8116a200642002015420010e808200241a8106a20054200201a420010e8082000200229038813222c20022903c8107c221b20022903b8147c220b20022903e8157c220c20022903e8117c220d200229039813222220022903d8107c220920022903c8147c220e20022903f8157c220f20022903f8117c221320022903a813221e20022903e8107c221420022903d8147c22192002290388167c22122002290388127c2217423388200241a8136a41086a290300200241e8106a41086a2903007c2014201e54ad7c200241d8146a41086a2903007c2019201454ad7c20024188166a41086a2903007c2012201954ad7c20024188126a41086a2903007c2017201254ad7c420d86847c221242338820024198136a41086a290300200241d8106a41086a2903007c2009202254ad7c200241c8146a41086a2903007c200e200954ad7c200241f8156a41086a2903007c200f200e54ad7c200241f8116a41086a2903007c2013200f54ad7c2012201354ad7c420d86847c222242ffffffffffffff038337031020024198106a42f0ffffffffffff3f201c7d221442338842137e42d1fdffffffffff3f201d7d220e42ffffffffffffff03837c220942002005420010e808200241d8126a200a420042f0ffffffffffff3f20257d220f42ffffffffffffff0383200e4233887c220e42137e420010e80820024188146a2007420042f0ffffffffffff3f20247d221342ffffffffffffff0383200f4233887c220f42137e2224420010e808200241b8156a2008420042f0ffffffffffff3f20237d221942ffffffffffffff038320134233887c221342137e2223420010e808200241b8116a20064200201442ffffffffffffff038320194233887c221442137e2219420010e808200241a8116a200642002009420010e80820024188106a20054200200e420010e808200241c8126a200a42002024420010e808200241f8136a200742002023420010e808200241a8156a200842002019420010e80820024198156a200842002009420010e80820024198116a20064200200e420010e808200241f80f6a20054200200f420010e808200241b8126a200a42002023420010e808200241e8136a200742002019420010e808200241d8136a200742002009420010e80820024188156a20084200200e420010e80820024188116a20064200200f420010e808200241e80f6a200542002013420010e808200241a8126a200a42002019420010e80820004190016a20022903a812222d20022903e80f7c221920022903d8137c22232002290388157c22242002290388117c222520022903b812222e20022903f80f7c221c20022903e8137c221d2002290398157c221e2002290398117c221f20022903c812222f2002290388107c222020022903f8137c222120022903a8157c223020022903a8117c223120022903d81222322002290398107c22332002290388147c223420022903b8157c223520022903b8117c2236423388200241d8126a41086a29030020024198106a41086a2903007c2033203254ad7c20024188146a41086a2903007c2034203354ad7c200241b8156a41086a2903007c2035203454ad7c200241b8116a41086a2903007c2036203554ad7c420d86847c2233423388200241c8126a41086a29030020024188106a41086a2903007c2020202f54ad7c200241f8136a41086a2903007c2021202054ad7c200241a8156a41086a2903007c2030202154ad7c200241a8116a41086a2903007c2031203054ad7c2033203154ad7c420d86847c2220423388200241b8126a41086a290300200241f80f6a41086a2903007c201c202e54ad7c200241e8136a41086a2903007c201d201c54ad7c20024198156a41086a2903007c201e201d54ad7c20024198116a41086a2903007c201f201e54ad7c2020201f54ad7c420d86847c221c42ffffffffffffff0383370300200020022903f812223020022903b8107c221d20022903a8147c221e20022903d8157c221f20022903d8117c2221202242338820024188136a41086a290300200241c8106a41086a2903007c201b202c54ad7c200241b8146a41086a2903007c200b201b54ad7c200241e8156a41086a2903007c200c200b54ad7c200241e8116a41086a2903007c200d200c54ad7c2022200d54ad7c420d86847c221b42ffffffffffffff038337031820024198126a200a42002009420010e808200241c8136a20074200200e420010e808200241f8146a20084200200f420010e808200241f8106a200642002013420010e808200241d80f6a200542002014420010e80820004198016a200229039812222c20022903d80f7c220b20022903c8137c220c20022903f8147c220d20022903f8107c2222201c423388200241a8126a41086a290300200241e80f6a41086a2903007c2019202d54ad7c200241d8136a41086a2903007c2023201954ad7c20024188156a41086a2903007c2024202354ad7c20024188116a41086a2903007c2025202454ad7c201c202554ad7c420d86847c222342ffffffffffffff0383370300200020022903e812221920022903a8107c22052002290398147c220a20022903c8157c220720022903c8117c2208201b423388200241f8126a41086a290300200241b8106a41086a2903007c201d203054ad7c200241a8146a41086a2903007c201e201d54ad7c200241d8156a41086a2903007c201f201e54ad7c200241d8116a41086a2903007c2021201f54ad7c201b202154ad7c420d86847c220642ffffffffffffff038337032020002006423388200241e8126a41086a290300200241a8106a41086a2903007c2005201954ad7c20024198146a41086a2903007c200a200554ad7c200241c8156a41086a2903007c2007200a54ad7c200241c8116a41086a2903007c2008200754ad7c2006200854ad7c420d868442137e201742ffffffffffffff03837c220542ffffffffffffff038337030020002005423388201242ffffffffffffff03837c370308200241d8016a20022903f806222d20022903e8037c220520022903e8087c220a2002290398087c220720022903c8077c2208200229038807222e2002290398057c220620022903f8087c221920022903a8087c221b20022903d8077c2212200229039807222f20022903c8067c22172002290388097c222420022903b8087c222520022903e8077c221c20022903a807223220022903d8067c221d2002290398097c221e20022903c8087c221f20022903f8077c222120022903b807223720022903e8067c223020022903a8097c223120022903d8087c22342002290388087c2235423388200241b8076a41086a290300200241e8066a41086a2903007c2030203754ad7c200241a8096a41086a2903007c2031203054ad7c200241d8086a41086a2903007c2034203154ad7c20024188086a41086a2903007c2035203454ad7c420d86847c2230423388200241a8076a41086a290300200241d8066a41086a2903007c201d203254ad7c20024198096a41086a2903007c201e201d54ad7c200241c8086a41086a2903007c201f201e54ad7c200241f8076a41086a2903007c2021201f54ad7c2030202154ad7c420d86847c221d42338820024198076a41086a290300200241c8066a41086a2903007c2017202f54ad7c20024188096a41086a2903007c2024201754ad7c200241b8086a41086a2903007c2025202454ad7c200241e8076a41086a2903007c201c202554ad7c201d201c54ad7c420d86847c221742338820024188076a41086a29030020024198056a41086a2903007c2006202e54ad7c200241f8086a41086a2903007c2019200654ad7c200241a8086a41086a2903007c201b201954ad7c200241d8076a41086a2903007c2012201b54ad7c2017201254ad7c420d86847c2206423388200241f8066a41086a290300200241e8036a41086a2903007c2005202d54ad7c200241e8086a41086a2903007c200a200554ad7c20024198086a41086a2903007c2007200a54ad7c200241c8076a41086a2903007c2008200754ad7c2006200854ad7c420d868442137e203542ffffffffffffff03837c220a42ffffffffffffff0383220542002009420010e808200241f8026a20144200200a423388203042ffffffffffffff03837c220a42137e420010e808200241b8056a20134200201d42ffffffffffffff0383220742137e2212420010e80820024198046a200f4200201742ffffffffffffff0383220842137e221b420010e808200241386a200e4200200642ffffffffffffff0383220642137e2219420010e808200241c8016a200e42002005420010e808200241e8026a20094200200a420010e808200241a8056a201442002012420010e80820024188046a20134200201b420010e808200241286a200f42002019420010e808200241b8016a200f42002005420010e808200241d8026a200e4200200a420010e808200241c8056a200942002007420010e808200241f8036a20144200201b420010e808200241186a201342002019420010e808200241a8016a201342002005420010e808200241c8026a200f4200200a420010e808200241d8056a200e42002007420010e808200241a8046a200942002008420010e808200241086a201442002019420010e80820024198016a201442002005420010e808200241b8026a20134200200a420010e808200241e8056a200f42002007420010e808200241b8046a200e42002008420010e80820024188036a200942002006420010e80820024188016a200342002005420010e80820024198036a20064200202b420010e808200241c8046a200842002018420010e808200241f8056a200742002016420010e808200241a8026a200a42002011420010e80820024198026a200a42002003420010e808200241f8006a200542002004420010e808200241a8036a200642002018420010e808200241d8046a200842002016420010e80820024188066a200742002011420010e80820024198066a200742002003420010e80820024188026a200a42002004420010e808200241e8006a200542002010420010e808200241b8036a200642002016420010e808200241e8046a200842002011420010e808200241f8046a200842002003420010e808200241a8066a200742002004420010e808200241f8016a200a42002010420010e808200241d8006a200542002015420010e808200241c8036a200642002011420010e808200241d8036a200642002003420010e80820024188056a200842002004420010e808200241b8066a200742002010420010e808200241e8016a200a42002015420010e808200241c8006a20054200201a420010e80820004188016a202042ffffffffffffff03833703002000202342338820024198126a41086a290300200241d80f6a41086a2903007c200b202c54ad7c200241c8136a41086a2903007c200c200b54ad7c200241f8146a41086a2903007c200d200c54ad7c200241f8106a41086a2903007c2022200d54ad7c2023202254ad7c420d868442137e203642ffffffffffffff03837c220342ffffffffffffff038337037820004180016a2003423388203342ffffffffffffff03837c370300200041e0006a20022903b803221b20022903687c220320022903e8047c22042002290398067c22052002290388027c220a20022903a803221320022903787c220720022903d8047c22082002290388067c22062002290398027c220920022903980322142002290388017c220e20022903c8047c220f20022903f8057c221020022903a8027c221142338820024198036a41086a29030020024188016a41086a2903007c200e201454ad7c200241c8046a41086a2903007c200f200e54ad7c200241f8056a41086a2903007c2010200f54ad7c200241a8026a41086a2903007c2011201054ad7c420d86847c220e423388200241a8036a41086a290300200241f8006a41086a2903007c2007201354ad7c200241d8046a41086a2903007c2008200754ad7c20024188066a41086a2903007c2006200854ad7c20024198026a41086a2903007c2009200654ad7c200e200954ad7c420d86847c220742ffffffffffffff0383370300200041386a20022903f803220b20022903c8057c220820022903187c220620022903b8017c220920022903d8027c220f20022903a805220c20022903e8027c22102002290388047c221320022903287c221420022903c8017c221520022903f802220d20022903d8017c221620022903b8057c22182002290398047c221920022903387c221a423388200241f8026a41086a290300200241d8016a41086a2903007c2016200d54ad7c200241b8056a41086a2903007c2018201654ad7c20024198046a41086a2903007c2019201854ad7c200241386a41086a2903007c201a201954ad7c420d86847c2216423388200241a8056a41086a290300200241e8026a41086a2903007c2010200c54ad7c20024188046a41086a2903007c2013201054ad7c200241286a41086a2903007c2014201354ad7c200241c8016a41086a2903007c2015201454ad7c2016201554ad7c420d86847c221042ffffffffffffff0383370300200041e8006a20022903c803221920022903587c221320022903f8047c221420022903a8067c221520022903f8017c22182007423388200241b8036a41086a290300200241e8006a41086a2903007c2003201b54ad7c200241e8046a41086a2903007c2004200354ad7c20024198066a41086a2903007c2005200454ad7c20024188026a41086a2903007c200a200554ad7c2007200a54ad7c420d86847c220342ffffffffffffff0383370300200041c0006a2002290308221b20022903a8047c220420022903a8017c220520022903c8027c220a20022903d8057c22072010423388200241f8036a41086a290300200241c8056a41086a2903007c2008200b54ad7c200241186a41086a2903007c2006200854ad7c200241b8016a41086a2903007c2009200654ad7c200241d8026a41086a2903007c200f200954ad7c2010200f54ad7c420d86847c220842ffffffffffffff0383370300200041f0006a20022903d803220b20022903487c22062002290388057c220920022903b8067c220f20022903e8017c22102003423388200241c8036a41086a290300200241d8006a41086a2903007c2013201954ad7c200241f8046a41086a2903007c2014201354ad7c200241a8066a41086a2903007c2015201454ad7c200241f8016a41086a2903007c2018201554ad7c2003201854ad7c420d86847c220342ffffffffffffff0383370300200041c8006a20022903980122192002290388037c221320022903b8027c221420022903e8057c221520022903b8047c22182008423388200241086a41086a290300200241a8046a41086a2903007c2004201b54ad7c200241a8016a41086a2903007c2005200454ad7c200241c8026a41086a2903007c200a200554ad7c200241d8056a41086a2903007c2007200a54ad7c2008200754ad7c420d86847c220442ffffffffffffff038337030020002003423388200241d8036a41086a290300200241c8006a41086a2903007c2006200b54ad7c20024188056a41086a2903007c2009200654ad7c200241b8066a41086a2903007c200f200954ad7c200241e8016a41086a2903007c2010200f54ad7c2003201054ad7c420d868442137e201142ffffffffffffff03837c220342ffffffffffffff0383370350200041d8006a2003423388200e42ffffffffffffff03837c3703002000200442338820024198016a41086a29030020024188036a41086a2903007c2013201954ad7c200241b8026a41086a2903007c2014201354ad7c200241e8056a41086a2903007c2015201454ad7c200241b8046a41086a2903007c2018201554ad7c2004201854ad7c420d868442137e201a42ffffffffffffff03837c220342ffffffffffffff0383370328200041306a2003423388201642ffffffffffffff03837c370300200241f02b6a24000bd32004047f017e027f1c7e23004190066b220224000240024020012c001f417f4a0d00200041003a00000c010b20024180056a41186a2203200141186a29000037030020024180056a41106a2204200141106a29000037030020024180056a41086a2205200141086a29000037030020022001290000220637038005200220022d009f0541ff00713a009f05200241c0056a41186a22074200370300200241c0056a41106a22084200370300200241c0056a41086a220142003703002002200231008205421086200231008105420886200642ff0183848422063703c005200220023100830542188620068422063703c005200220023100840542208620068422063703c005200220023100850542288620068422063703c005200220023100860542308620068422063703c00520022002310087054238862006843703c005200120012903002005310000842206370300200120023100890542088620068422063703002001200231008a0542108620068422063703002001200231008b0542188620068422063703002001200231008c0542208620068422063703002001200231008d0542288620068422063703002001200231008e0542308620068422063703002001200231008f0542388620068437030020082008290300200431000084220637030020082002310091054208862006842206370300200820023100920542108620068422063703002008200231009305421886200684220637030020082002310094054220862006842206370300200820023100950542288620068422063703002008200231009605423086200684220637030020082002310097054238862006842209370300200720072903002003310000842206370300200720023100990542088620068422063703002007200231009a0542108620068422063703002007200231009b0542188620068422063703002007200231009c0542208620068422063703002007200231009d0542288620068422063703002007200231009e0542308620068422063703002007200231009f05423886200684220a37030020024180036a20022903c005220b42ffffffffffffff07832206420042edcd87b9d697d207420010e808200241c0026a2006420042dac89fe3dad6ee01420010e80820024180026a2001290300220c420c864280e0ffffffffff0783200b42348884220b420042edcd87b9d697d207420010e808200241b0026a20064200429bcad7d9feffff07420010e808200241c0016a200b420042dac89fe3dad6ee01420010e808200241d0036a200942188642808080f8ffffff0783200c42288884220c420042edcd87b9d697d207420010e808200241a0026a2006420042ffffffffffffff07420010e80820024180016a200b4200429bcad7d9feffff07420010e808200241c0036a200c420042dac89fe3dad6ee01420010e808200241a0046a200a422486428080808080feff07832009421c88842209420042edcd87b9d697d207420010e80820024190026a2006420042ffffffffffff03420010e808200241c0006a200b420042ffffffffffffff07420010e808200241b0036a200c4200429bcad7d9feffff07420010e80820024190046a2009420042dac89fe3dad6ee01420010e808200241f0046a200a4210882206420042edcd87b9d697d207420010e8082002200b420042ffffffffffff03420010e808200241a0036a200c420042ffffffffffffff07420010e80820024180046a20094200429bcad7d9feffff07420010e808200241e0046a2006420042dac89fe3dad6ee01420010e80820024190036a200c420042ffffffffffff03420010e808200241f0036a2009420042ffffffffffffff07420010e808200241d0046a20064200429bcad7d9feffff07420010e808200241e0036a2009420042ffffffffffff03420010e808200241c0046a2006420042ffffffffffffff07420010e808200241b0046a2006420042ffffffffffff03420010e808200241f0026a200229038003220b429bfcd192b1b4c7027e42ffffffffffffff07832206420042eda7d7e7a5e39801420010e808200241e0026a200642004281cbb5cef7c5fa06420010e808200241f0016a200229038002220d20022903c0027c220c200b20022903f00222097c220b423488200241f0026a41086a29030020024180036a41086a2903007c200b200954ad7c220e420c86847c220920022903e0027c220a429bfcd192b1b4c7027e42ffffffffffffff0783220b420042eda7d7e7a5e39801420010e808200241d0026a2006420042f9bdd300420010e808200241e0016a200b42004281cbb5cef7c5fa06420010e808200241b0016a20022903c001220f20022903b0027c221020022903d0037c221120022903d0027c221220022903e0017c221320022903f0012214200a7c2215423488200241f0016a41086a29030020024180026a41086a290300200241c0026a41086a2903007c200c200d54ad7c200e4234887c2009200c54ad7c200241e0026a41086a2903007c200a200954ad7c7c2015201454ad7c2216420c86847c2209429bfcd192b1b4c7027e42ffffffffffffff0783220c420042eda7d7e7a5e39801420010e808200241d0016a200b420042f9bdd300420010e808200241a0016a200c42004281cbb5cef7c5fa06420010e808200241f0006a200229038001221720022903a0027c220a20022903c0037c220d20022903a0047c220e20022903d0017c221420022903a0017c221520022903b001221820097c2219423488200241b0016a41086a290300200241c0016a41086a290300200241b0026a41086a2903007c2010200f54ad7c200241d0036a41086a2903007c2011201054ad7c200241d0026a41086a2903007c2012201154ad7c200241e0016a41086a2903007c2013201254ad7c20164234887c2009201354ad7c7c2019201854ad7c221a420c86847c2210429bfcd192b1b4c7027e42ffffffffffffff07832209420042eda7d7e7a5e39801420010e80820024190016a200c420042f9bdd300420010e808200241e0006a200942004281cbb5cef7c5fa06420010e808200241306a2002290340221b2002290390027c221120022903b0037c22122002290390047c221320022903f0047c220f2006422c867c22162002290390017c221820022903607c22192002290370221c20107c221d423488200241f0006a41086a29030020024180016a41086a290300200241a0026a41086a2903007c200a201754ad7c200241c0036a41086a2903007c200d200a54ad7c200241a0046a41086a2903007c200e200d54ad7c200241d0016a41086a2903007c2014200e54ad7c200241a0016a41086a2903007c2015201454ad7c201a4234887c2010201554ad7c7c201d201c54ad7c221e420c86847c2210429bfcd192b1b4c7027e42ffffffffffffff0783220a420042eda7d7e7a5e39801420010e808200241d0006a2009420042f9bdd300420010e808200241206a200a42004281cbb5cef7c5fa06420010e808200241106a200a420042f9bdd300420010e808200120022903f003221f2002290390037c220d20022903d0047c220e200c422c867c221420022903107c221520022903a003222020022903007c22172002290380047c221a20022903e0047c221c200b422c867c221d20022903507c222120022903207c22222002290330222320107c2224423488200241306a41086a290300200241c0006a41086a29030020024190026a41086a2903007c2011201b54ad7c200241b0036a41086a2903007c2012201154ad7c20024190046a41086a2903007c2013201254ad7c200241f0046a41086a2903007c200f201354ad7c20064214887c2016200f54ad7c20024190016a41086a2903007c2018201654ad7c200241e0006a41086a2903007c2019201854ad7c201e4234887c2010201954ad7c7c2024202354ad7c2210420c86847c2206423488200241a0036a41086a290300200241086a2903007c2017202054ad7c20024180046a41086a2903007c201a201754ad7c200241e0046a41086a2903007c201c201a54ad7c200b4214887c201d201c54ad7c200241d0006a41086a2903007c2021201d54ad7c200241206a41086a2903007c2022202154ad7c20104234887c2006202254ad7c2212420c86847c220b42ffffffffffffff0783200642ffffffffffffff07834293d8a898da9ce77e7c2206423f877c42ffb4cab188ba85797c221342ffffffffffffff0783200642ffffffffffffff0783200a422c86220f20022903b0047c220620022903c004221620022903e0037c22102009422c867c2211200b423488200241f0036a41086a29030020024190036a41086a2903007c200d201f54ad7c200241d0046a41086a2903007c200e200d54ad7c200c4214887c2014200e54ad7c200241106a41086a2903007c2015201454ad7c20124234887c200b201554ad7c220c420c86847c220b423488200241c0046a41086a290300200241e0036a41086a2903007c2010201654ad7c20094214887c2011201054ad7c200c4234887c200b201154ad7c2209420c86847c220c423488200a421488200241b0046a41086a2903007c2006200f54ad7c20094234887c200c200654ad7c420c8684200c42ffffffffffffff0783200b42ffffffffffffff07832013423f877c4287c2ac7f7c220c423f877c2209423f877c428080808080807c7c2210423f87220a42eda7d7e7a5e39801837c22064234887c200a4281cbb5cef7c5fa06837c220b42ffffffffffffff078322113703002008200c42ffffffffffffff0783200b4234887c200a42f9bdd300837c220c42ffffffffffffff078322123703002007200942ffffffffffffff0783200c4234887c220942ffffffffffffff07832213370300200241e0056a201042ffffffffffffff078320094234887c200a4280808080808004837c220a42ffffffffffffff07833703002002200642ffffffffffffff078322103703c0052002200a4228883c00bf052002200a4220883c00be052002200a4218883c00bd052002200a4210883c00bc052002200a4208883c00bb052002200a3c00ba0520022009422c883c00b905200220094224883c00b80520022009421c883c00b705200220094214883c00b60520022009420c883c00b505200220094204883c00b405200220134204862012423088843c00b3052002200c4228883c00b2052002200c4220883c00b1052002200c4218883c00b0052002200c4210883c00af052002200c4208883c00ae052002200c3c00ad052002200b422c883c00ac052002200b4224883c00ab052002200b421c883c00aa052002200b4214883c00a9052002200b420c883c00a8052002200b4204883c00a705200220114204862010423088843c00a605200220064228883c00a505200220064220883c00a405200220064218883c00a305200220064210883c00a205200220064208883c00a105200220063c00a0052006a72108200241a0056a4101722103410021014101210702400340200820024180056a20016a2d0000732208410020086b72417f7341800171410776106d20077121072001411f460d01200320016a2d00002108200141016a21010c000b0b4100210102402007106d41ff01714101470d002000200229038005370001200041196a20024198056a290300370000200041116a20024190056a290300370000200041096a20024188056a290300370000410121010b200020013a00000b20024190066a24000bc60101017f230041106b2202240002400240024002400240024002400240200041ff01710e0700010203040506070b200241003a000f20012002410f6a410110740c060b200241013a000f20012002410f6a410110740c050b200241023a000f20012002410f6a410110740c040b200241033a000f20012002410f6a410110740c030b200241043a000f20012002410f6a410110740c020b200241053a000f20012002410f6a410110740c010b200241063a000f20012002410f6a410110740b200241106a24000b880201047f230041206b2203240002400240200041046a2802002204200041086a28020022056b2002490d00200028020021040c010b0240200520026a22062005490d00200441017422052006200520064b1b22054108200541084b1b21050240024020040d00200341003602100c010b200341106a41086a410136020020032004360214200320002802003602100b200320054101200341106a107d200341086a2802002105024020032802004101460d00200020032802042204360200200041046a2005360200200041086a28020021050c020b2005450d001036000b1038000b200420056a2001200210e9081a200041086a2200200028020020026a360200200341206a24000bfa0201057f230041106b2203240002402001450d002000200141386c6a210403402000220528020421012005280208220620021076200220012006107420052802102101200528021422062002107620022001200610740240024020052802184101470d00200528021c2101200528022422062002107620022001200610740c010b2003200528021c200528022028020c11020020032802002101200328020822062002107620022001200610742003280204450d002001102e0b200541386a2100200528022c21010240024020052802284101470d00200528023422052002107620054103742205450d01200120056a2107034020012802002105200141046a2802002206200210762002200520061074200141086a22012007470d000c020b0b200528023022052002107620054103742205450d00200120056a2107034020012802002105200141046a2802002206200210762002200520061074200141086a22012007470d000b0b20002004470d000b0b200341106a24000bab0101017f230041106b220224000240024002400240200041c000490d00200041808001490d012000418080808004490d02200241033a00032001200241036a41011074200220003602042001200241046a410410740c030b200220004102743a00032001200241036a410110740c020b200220004102744101723b010a20012002410a6a410210740c010b2002200041027441027236020c20012002410c6a410410740b200241106a24000bec0101047f02402001450d0020002001411c6c6a21030340200022042802042101200428020822052002107620022001200510742004411c6a21002004280210210102400240200428020c4101470d00200428021822042002107620044103742204450d01200120046a2106034020012802002104200141046a2802002205200210762002200420051074200141086a22012006470d000c020b0b200428021422042002107620044103742204450d00200120046a2106034020012802002104200141046a2802002205200210762002200420051074200141086a22012006470d000b0b20002003470d000b0b0be40301057f02402001450d0020002001412c6c6a21030340200022042802042101200428020822052002107620022001200510742004280210210102400240200428020c4101470d0020042802182205200210762005450d01200541186c2105200141146a21010340200141706a2802002106200141746a28020022072002107620022006200710742001417c6a280200210620012802002207200210762002200620071074200141186a2101200541686a22050d000c020b0b200441146a2802002205200210762005450d00200541186c2105200141146a21010340200141706a2802002106200141746a28020022072002107620022006200710742001417c6a280200210620012802002207200210762002200620071074200141186a2101200541686a22050d000b0b2004412c6a21002004280220210102400240200428021c4101470d00200428022822052002107620054103742205450d01200120056a2107034020012802002105200141046a2802002206200210762002200520061074200141086a22012007470d000c020b0b200428022422052002107620054103742205450d00200120056a2107034020012802002105200141046a2802002206200210762002200520061074200141086a22012007470d000b0b20002003470d000b0b0bb00701057f230041c0006b2203240002402001450d002000200141f0006c6a21040340200028020421012000280208220520021076200220012005107402400240200028020c22014102470d00200341003a00202002200341206a410110740c010b200341013a00202002200341206a41011074024020014101470d002000280214210120002802182205200210762002200120051074200028022021010240200028021c4101470d002000280228220520021076200120052002107a0c020b200041246a280200220520021076200120052002107a0c010b200341206a20002802101103002003280224210120032802282205200210762002200120051074200328023021060240200328022c4101460d002003280234220120021076200620012002107a0c010b2003280238220120021076200620012002107a024020032802382201450d00200141d8006c21074100210503400240200620056a220141346a280200450d002001413c6a280200450d00200141386a280200102e0b0240200141c4006a280200450d00200141cc006a28020041ffffffff0171450d00200141c8006a280200102e0b2007200541d8006a2205470d000b0b20032802342201450d00200141d8006c450d002006102e0b02400240200028022c22014102470d00200341003a00202002200341206a410110740c010b200341013a00202002200341206a41011074024020014101470d0020002802302101200028023822052002107620012005200210780c010b200341186a200028023011030020032802182101200328021c22052002107620012005200210780b02400240200028023c22014102470d00200341003a00202002200341206a410110740c010b200341013a00202002200341206a41011074024020014101470d00200028024021012000280248220520021076200120052002107b0c010b200341106a2000280240110300200328021021012003280214220520021076200120052002107b0b02400240200028024c4101470d0020002802502101200028025822052002107620012005200210750c010b200341086a200028025011030020032802082101200328020c22052002107620012005200210750b200041f0006a210102400240200028025c4101470d0020002802602105200028026822062002107620052006200210770c010b2003200028026011030020032802002105200328020422062002107620052006200210770b200320002d006c3a00202002200341206a410110742001210020012004470d000b0b200341c0006a24000bc10501057f230041106b2203240002402001450d002000200141d8006c6a21040340200022052802042101200528020822062002107620022001200610740240024020052d00544101460d00200341003a000f20022003410f6a410110740c010b200341013a000f20022003410f6a410110740b024002400240024020052d000c0e03000102030b200341003a000f20022003410f6a4101107420052802142101200528021822062002107620022001200610740c020b200341013a000f20022003410f6a410110742005410d6a2d0000200210732005280214210120052802182206200210762002200120061074200528022021012005280224220620021076200220012006107420032005410e6a2d00003a000f20022003410f6a410110740c010b200341023a000f20022003410f6a410110742005410d6a2d00002002107320052802142101200528021822062002107620022001200610742005280220210120052802242206200210762002200120061074200528022c2101200528023022062002107620022001200610742005410e6a2d0000200210730b0240024020052802344101470d0020052802382101200528024022062002107620022001200610740c010b20032005280238200528023c28020c11020020032802002101200328020822062002107620022001200610742003280204450d002001102e0b200541d8006a2100200528024821010240024020052802444101470d00200528025022052002107620054103742205450d01200120056a2107034020012802002105200141046a2802002206200210762002200520061074200141086a22012007470d000c020b0b200528024c22052002107620054103742205450d00200120056a2107034020012802002105200141046a2802002206200210762002200520061074200141086a22012007470d000b0b20002004470d000b0b200341106a24000b950301057f02402001450d0020002001412c6c6a21030340200022042802042101200428020822052002107620022001200510742004280210210102400240200428020c4101470d00200428021822052002107620054103742205450d01200120056a2106034020012802002105200141046a2802002207200210762002200520071074200141086a22012006470d000c020b0b200428021422052002107620054103742205450d00200120056a2106034020012802002105200141046a2802002207200210762002200520071074200141086a22012006470d000b0b2004412c6a21002004280220210102400240200428021c4101470d00200428022822052002107620054103742205450d01200120056a2106034020012802002105200141046a2802002207200210762002200520071074200141086a22012006470d000c020b0b200428022422052002107620054103742205450d00200120056a2106034020012802002105200141046a2802002207200210762002200520071074200141086a22012006470d000b0b20002003470d000b0b0be207010c7f230041206b220224002001410c6a2802002103200128020821042001280204210502400240024002400240024002400240024002400240200128020022060d002004450d01200320046b21070c020b200520066b2101024020040d00200121070c020b2001200320046b6a220720014f0d012000420137020041002107200041086a22084100360200200520066b2109410121010c040b2000420137020041002107200041086a22084100360200410121010c010b2007417f4c0d070240024020070d00410121010c010b2007102c2201450d050b20002001360200200041086a22084100360200200041046a200736020020060d010b200320046b410020041b21090c020b200520066b21092004450d010b02402009200320046b6a220a2009490d00200a21090c010b0240024020052006460d00200641016a210b0c010b2004450d0420032004460d044100210b20042106200441016a21040b200041046a210c4100210d034020042109200b210a20062d0000210602400240024002400240200d2007470d0002400240200a0d00200320096b410020091b21040c010b2005200a6b21042009450d00417f2004200320096b6a220b200b2004491b21040b200720076b417f200441016a220b200b2004491b22044f0d00200720046a22042007490d0a2007410174220b2004200b20044b1b22044108200441084b1b21040240024020070d00200241003602100c010b2002410136021820022007360214200220013602100b200220044101200241106a107d2002280208210720022802004101460d01200020022802042201360200200c20073602000b2001200d6a20063a00002008200d41016a220d360200200a0d01200a210b0c020b2007450d080c050b200a2005470d014100210b0b2009450d0520092003460d05200941016a2104200921060c010b200a41016a210b20092104200a21060c000b0b200720094f0d012007410174220a2009200a20094b1b22094108200941084b1b21090240024020070d00200241003602100c010b200241106a41086a410136020020022007360214200220013602100b200220094101200241106a107d200241086a2802002109024020022802004101460d00200020022802042201360200200041046a20093602000c020b2009450d030b1036000b4100210902402006450d0020052006460d00200520066b21090340200120062d00003a0000200141016a21012005200641016a2206470d000b0b02402004450d0020032004460d00200920046b21060340200120042d00003a0000200141016a21012003200441016a2204470d000b200320066a21090b200820093602000b200241206a24000f0b1038000bbd0101017f0240024002400240024002402002450d0020014100480d01024002400240200328020022040d002001450d010c050b200328020422030d0120010d040b200221030c050b20042003200110302203450d030c040b2000200136020420004101360200200041086a41003602000f0b20004101360200200041086a41003602000f0b2001102c22030d010b2000200136020441012103200221010c010b20002003360204410021030b20002003360200200041086a20013602000b1c002001280218419eeacc00410f2001411c6a28020028020c1100000b9f0904017f017e017f087e230041b0046b22022400200141bc016a350200210320012802b8012104200241c0016a200141b80110e9081a024002400240200241e8016a2903004201510d0020022903c80121050c010b200241f0016a290300220620022903c8012205560d010b200521060b200220063703c801024002400240200241a0026a2903004201510d0020022903c80121050c010b200241a8026a290300220620022903c8012205560d010b200521060b200220063703c801024002400240200241d8026a2903004201510d0020022903c80121050c010b200241e0026a290300220620022903c8012205560d010b200521060b200220063703c80102402004450d002006428094ebdc038020037e2006428094ebdc038220037e2206428094ebdc038042ffffffff0f2006428080808080c0b2cd3b541b2006428094ebdc03824280cab5ee0156ad7c42ffffffff0f837c21060240200241d8016a2903004201510d00200241e0016a42004200200241f0016a290300220320067d220520052003561b220320022903d0017d220520052003561b3703002002200241e8016a2903003703d8010b024020024190026a2903004201510d0020024198026a42004200200241a8026a290300220320067d220520052003561b220320024188026a2903007d220520052003561b3703002002200241a0026a290300370390020b200241c8026a2903004201510d00200241d0026a42004200200241e0026a290300220320067d220620062003561b2206200241c0026a2903007d220320032006561b3703002002200241d8026a2903003703c8020b200241f8026a200241c0016a41b80110e9081a02400240200229038003220620022903f8022203200241f8036a29030022077c580d002006420020024198046a290300220520024190046a2903005022011b540d00427e200241a8046a290300427f7c200241a0046a290300501b2007540d0020024188046a29030022085020024180046a2903002209420052710d00420020082009501b4200427f200520011b220520077d220820082005561b560d0020062003200241c0036a29030022097c580d0020064200200241e0036a2903002208200241f8026a41e0006a2903005022011b540d00427e200241f0036a290300427f7c200241e8036a290300501b2009540d00200241d0036a290300220a50200241c8036a290300220b420052710d004200200a200b501b4200427f200820011b220820097d220a200a2008561b560d0020062003200229038803220a7c580d0020064200200241a8036a290300220b200241a0036a2903005022011b540d00427e200241b8036a290300427f7c200241b0036a290300501b200a540d0020024198036a29030022065020024190036a290300220c420052710d0042002006200c501b4200427f200b20011b2206200a7d220b200b2006561b560d002006502006200a5620062003567172450d00200850200820095620082003567172450d002005502005200756200520035671720d010b200241013a000241d3a0c00041e000200241026a41ec9fc00041b4a1c000103e000b2000200241086a200241f8026a41b80110e90841b80110e9081a200241b0046a24000ba90803197e017f147e20002903c0012101200029039801210220002903702103200029034821042000290320210520002903b8012106200029039001210720002903682108200029034021092000290318210a20002903b001210b200029038801210c2000290360210d2000290338210e2000290310210f20002903a8012110200029038001211120002903582112200029033021132000290308211420002903a00121152000290378211620002903502117200029032821182000290300211941c07e211a0340200b200c200d200e200f85858585221b4201892015201620172018201985858585221c85221d201385211e20012006200720082009200a85858585221f201c42018985221c85212020012002200320042005858585852221420189201b85221b2009854237892222201f4201892010201120122013201485858585220985221f200f85423e892223427f8583201d201085420289222485210120222021200942018985220f20168542298922212003201c854227892225427f8583852110201b2006854238892226201f200c85420f892227427f8583201d201285420a89222885210c2028200f2018854224892229427f85832005201c85421b89222a852116200f2015854212892215201f200e85420689222b201d201485420189222c427f85838521032002201c85420889222d201b200885421989222e427f8583202b8521122004201c85421489221c201b200a85421c89220a427f8583201f200b85423d89220e852104200a200e427f8583201d201185422d89221d852109200f2017854203892214200e201d427f858385210e201d2014427f8583201c852113200a2014201c427f8583852118201b200785421589221d200f201985221c2020420e89221b427f858385210a201b201d427f8583201f200d85422b89221f85210f201d201f427f8583201e422c89221d852114201a4198a3c0006a290300201c201f201d427f85838585211920262029202a427f858385221f2102201d201c427f8583201b85221d2105202120232024427f858385221c2106202a2026427f8583202785221b2107202c2015427f8583202d852226210820242021427f85832025852224210b202e2015202d427f8583852221210d202920272028427f8583852227211120252022427f858320238522222115202e202b427f8583202c8522232117201a41086a221a0d000b200020223703a00120002016370378200020233703502000201837032820002019370300200020103703a8012000202737038001200020123703582000201337033020002014370308200020243703b0012000200c37038801200020213703602000200e3703382000200f3703102000201c3703b8012000201b3703900120002026370368200020093703402000200a370318200020013703c0012000201f3703980120002003370370200020043703482000201d3703200be61801037f230041f0016b22032400200341106a41126a410041b60110eb081a2003411e6a41002800b6a340360100200341002f00aca3403b0114200341002800a8a340360210200341002900aea340370116200341106a1080012000200341106a41c80110e908220041003a00ca01200041003b01c801200041124100108201024020002d00c801220441c7014b0d00200020046a220420042d000041cd00733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200441c8014f0d010b200020046a220420042d000041e500733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200441c7014b0d010b200020046a220420042d000041f200733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200441c7014b0d010b200020046a220420042d000041ec00733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200441c7014b0d010b200020046a220420042d000041e900733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200441c7014b0d010b200020046a220420042d000041ee00733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200441c7014b0d010b200020046a220420042d00004120733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200441c7014b0d010b200020046a220420042d000041f600733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200441c7014b0d010b200020046a220420042d00004131733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200441c7014b0d010b200020046a220420042d0000412e733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200441c7014b0d010b200020046a220420042d00004130733a0000200020002d00c80141016a22043a00c8010240200441ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a7012000108001200041003b01c8010b2003200236020c200041124100108201024020002d00c801220441c8014f0d00200020046a220420042d000041e400733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200541c8014f0d010b2000200441ff01716a220420042d000041ef00733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d000041ed00733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d0000412d733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d000041f300733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d000041e500733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200541c7014b0d010b200041ca016a21052000200441ff01716a220420042d000041f000733a0000200020002d00c80141016a22043a00c8010240200441ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010b200341123a00df01024020052d00004112460d00200341e0016a410c6a4109360200200341246a4102360200200341106a410c6a4102360200200341186a41aca4c000360200200341023602142003419ca4c000360210200341093602e401200320053602e001200341206a200341e0016a3602002003200341df016a3602e8012005200341df016a200341106a41eca4c000108301000b0240200441ff0171220541c7014b0d00200020056a220420042d000020032d000c733a0000200020002d00c80141016a22043a00c80102400240200441ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200441ff017141c8014f0d010b2000200441ff01716a220420042d000020032d000d733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d000020032d000e733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d000020032d000f733a0000200020002d00c80141016a22043a00c8010240200441ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a7012000108001200041003b01c8010b200041024100108201024002402002450d0020002d00c80121040340200441ff0171220441c7014b0d02200020046a220420042d000020012d0000733a0000200020002d00c80141016a22043a00c8010240200441ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010b200141016a21012002417f6a22020d000b0b200341f0016a24000f0b200441c80141bca3c000103c000b200441ff017141c80141bca3c000103c000b200441ff017141c80141bca3c000103c000b200441c80141bca3c000103c000bd30501027f230041306b22032400200320013a000702400240024002402002450d0020002d00ca01200141ff0171460d01200341086a410c6a41093602002003412c6a4102360200200341186a410c6a4102360200200341206a41aca4c0003602002003410236021c2003419ca4c0003602182003410936020c2003200041ca016a2200360208200341286a200341086a3602002003200341076a3602102000200341076a200341186a41eca4c000108301000b2003200141087122023a00080240024020020d00200020013a00ca0120002d00c9012104200020002d00c801220241016a3a00c901200320013a0019200320043a00180240200241c7014b0d00200020026a220120012d000020032d0018733a0000200020002d00c80141016a22023a00c8010240200241ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002102200041003b01c8010c030b200141c801490d020b200241ff017141c80141bca3c000103c000b2003412c6a4100360200200341286a41d4e2cc003602002003420137021c200341fca4c000360218200341086a41aad3c800200341186a4184a5c000108301000b2000200241ff01716a220120012d000020032d0019733a0000200020002d00c80141016a22013a00c8010240200141ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002101200041003b01c8010b20032d0007412471450d00200141ff01712201450d00200141c7014b0d01200020016a220120012d000020002d00c901733a000020002d00c80141016a41ff0171220141c8014f0d02200020016a220120012d00004104733a0000200020002d00a701418001733a00a7012000108001200041003b01c8010b200341306a24000f0b200141c8014194a5c000103c000b200141c80141a4a5c000103c000b6601017f230041206b220424002004200136020420042000360200200441086a41106a200241106a290200370300200441086a41086a200241086a2902003703002004200229020037030820044198a3c000200441046a4198a3c000200441086a20031058000b960801027f230041306b2205240020052004360200200041124100108201024002400240024002402002450d0020002d00c80121060340200641ff0171220641c7014b0d02200020066a220620062d000020012d0000733a0000200020002d00c80141016a22063a00c8010240200641ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002106200041003b01c8010b200141016a21012002417f6a22020d000b0b200541123a000720002d00ca014112470d0120002d00c801220641c7014b0d03200020066a220620062d000020052d0000733a0000200020002d00c80141016a22063a00c8010240200641ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002106200041003b01c8010c030b200141c801490d020c030b200641c80141bca3c000103c000b200541206a410c6a41093602002005411c6a4102360200200541086a410c6a4102360200200541106a41aca4c0003602002005410236020c2005419ca4c000360208200541093602242005200041ca016a2200360220200541186a200541206a3602002005200541076a3602282000200541076a200541086a41eca4c000108301000b2000200641ff01716a220620062d000020052d0001733a0000200020002d00c80141016a22063a00c80102400240200641ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002106200041003b01c8010c010b200141c7014b0d010b2000200641ff01716a220620062d000020052d0002733a0000200020002d00c80141016a22063a00c80102400240200641ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002106200041003b01c8010c010b200141c7014b0d010b2000200641ff01716a220620062d000020052d0003733a0000200020002d00c80141016a22063a00c8010240200641ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a7012000108001200041003b01c8010b200041024100108201024002402004450d0020002d00c80121060340200641ff0171220641c7014b0d02200020066a220620062d000020032d0000733a0000200020002d00c80141016a22063a00c8010240200641ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002106200041003b01c8010b200341016a21032004417f6a22040d000b0b200541306a24000f0b200641c80141bca3c000103c000b200641ff017141c80141bca3c000103c000be00e01027f230041c0006b220424002004200337030820044108360210200041124100108201024002400240024002402002450d0020002d00c80121050340200541ff0171220541c7014b0d02200020056a220520052d000020012d0000733a0000200020002d00c80141016a22053a00c8010240200541ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002105200041003b01c8010b200141016a21012002417f6a22020d000b0b200441123a001720002d00ca014112470d0120002d00c801220541c7014b0d03200020056a220520052d000020042d0010733a0000200020002d00c80141016a22053a00c8010240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002105200041003b01c8010c030b200141c801490d020c030b200541c80141bca3c000103c000b200441306a410c6a41093602002004412c6a4102360200200441186a410c6a4102360200200441206a41aca4c0003602002004410236021c2004419ca4c000360218200441093602342004200041ca016a2200360230200441286a200441306a3602002004200441176a3602382000200441176a200441186a41eca4c000108301000b2000200541ff01716a220520052d000020042d0011733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d0012733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d0013733a0000200020002d00c80141016a22053a00c8010240200541ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a7012000108001200041003b01c8010b200041024100108201024020002d00c801220541c8014f0d00200020056a220520052d000020042d0008733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002105200041003b01c8010c010b200141c8014f0d010b2000200541ff01716a220520052d000020042d0009733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d000a733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d000b733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d000c733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d000d733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d000e733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d000f733a0000200020002d00c80141016a22053a00c8010240200541ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a7012000108001200041003b01c8010b200441c0006a24000f0b200541ff017141c80141bca3c000103c000b200541ff017141c80141bca3c000103c000bb80801027f230041306b2205240020052004360200200041124100108201024002400240024002402002450d0020002d00c80121060340200641ff0171220641c7014b0d02200020066a220620062d000020012d0000733a0000200020002d00c80141016a22063a00c8010240200641ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002106200041003b01c8010b200141016a21012002417f6a22020d000b0b200541123a000720002d00ca014112470d0120002d00c801220641c7014b0d03200020066a220620062d000020052d0000733a0000200020002d00c80141016a22063a00c8010240200641ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002106200041003b01c8010c030b200141c801490d020c030b200641c80141bca3c000103c000b200541206a410c6a41093602002005411c6a4102360200200541086a410c6a4102360200200541106a41aca4c0003602002005410236020c2005419ca4c000360208200541093602242005200041ca016a2200360220200541186a200541206a3602002005200541076a3602282000200541076a200541086a41eca4c000108301000b2000200641ff01716a220620062d000020052d0001733a0000200020002d00c80141016a22063a00c80102400240200641ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002106200041003b01c8010c010b200141c7014b0d010b2000200641ff01716a220620062d000020052d0002733a0000200020002d00c80141016a22063a00c80102400240200641ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002106200041003b01c8010c010b200141c7014b0d010b2000200641ff01716a220620062d000020052d0003733a0000200020002d00c80141016a22063a00c8010240200641ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a7012000108001200041003b01c8010b20004107410010820102402004450d0020002d00c8012106024002400340200641ff0171220641c7014b0d012003200020066a2d00003a000020002d00c801220641c7014b0d02200020066a41003a0000200020002d00c80141016a22063a00c8010240200641ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002106200041003b01c8010b200341016a21032004417f6a22040d000c030b0b200641c80141a4a6c000103c000b200641c80141b4a6c000103c000b200541306a24000f0b200641ff017141c80141bca3c000103c000bc60201037f23004180016b2202240020002802002100024002400240024020012802002203411071450d0020002d00002104410021000340200220006a41ff006a2004410f712203413072200341d7006a2003410a491b3a00002000417f6a21002004410476410f7122040d000b20004180016a22044181014f0d02200141ac88c0004102200220006a4180016a410020006b104b21000c010b20002d0000210402402003412071450d00410021000340200220006a41ff006a2004410f712203413072200341376a2003410a491b3a00002000417f6a21002004410476410f7122040d000b20004180016a22044181014f0d03200141ac88c0004102200220006a4180016a410020006b104b21000c010b2004ad42ff01832001104821000b20024180016a240020000f0b2004418001419c88c0001056000b2004418001419c88c0001056000b820401027f230041106b220224000240024002400240024002400240024002402000280200417b6a2203410220034108491b0e080102030405060700010b200128021841e4a6c000410c2001411c6a28020028020c11000021010c070b200128021841f0a6c00041102001411c6a28020028020c11000021010c060b20012802184180a7c00041132001411c6a28020028020c11000021010c050b200220012802184193a7c000410c2001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200036020c20022002410c6a41a0a7c00010661a20022d0008210120022802042203450d04200141ff0171210041012101024020000d00024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841f79ec00041012000411c6a28020028020c1100000d010b2002280200220128021841f89ec00041012001411c6a28020028020c11000021010b200220013a00080c040b200128021841b0a7c000410b2001411c6a28020028020c11000021010c030b200128021841bba7c000410c2001411c6a28020028020c11000021010c020b200128021841c7a7c000410d2001411c6a28020028020c11000021010c010b200128021841d4a7c000410c2001411c6a28020028020c11000021010b200241106a2400200141ff01714100470b1c002001280218419eeacc00410f2001411c6a28020028020c1100000bd10201057f230041106b22022400024002400240024002400240024002400240024020012d00000e06010203040500010b20024181ca003b01082002200141216a3602042002200141016a3602000c050b410110322201450d062000428180808010370204200020013602000c050b2001410c6a22032802002204412020044120491b220541016a2204102c2206450d0520062004200410eb082106200328020022032005490d06200641016a200141046a280200200510e9081a2000200436020820002004360204200020063602000c040b20024181c4003b01082002200141216a3602042002200141016a3602000c020b20024181c6003b01082002200141216a3602042002200141016a3602000c010b20024181c8003b01082002200141216a3602042002200141016a3602000b20002002108b010b200241106a24000f0b1036000b2005200341b8aac000104d000bef06010c7f230041206b22022400200141096a2d0000210320012802042104200128020021050240024002400240024002400240024002400240024020012d000822064102470d0002402005450d00200420056b21070c020b2000420137020041002107200041086a22084100360200410121010c030b20064101462101024020050d00200121070c020b2001200420056b6a220720014f0d002000420137020041002107200041086a2208410036020041012101200641014621090c040b2007417f4c0d080b0240024020070d00410121010c010b2007102c2201450d050b20002001360200200041086a22084100360200200041046a200736020020064102470d010b200420056b410020051b21090c020b200641014621092005450d010b02402009200420056b6a220a2009490d00200a21090c010b200041046a210b410021090340024002400240200641ff01714102470d002003210a0c010b4100210a2006410171450d00410021060c010b2005450d0520052004460d0520052d0000210341022106200541016a21050b0240024020092007470d00200720076b417f200420056b410020051b220c41016a220d200d200c491b220c4f0d002007200c6a220c2007490d072007410174220d200c200d200c4b1b220c4108200c41084b1b210c0240024020070d00200241003602100c010b2002410136021820022007360214200220013602100b2002200c4101200241106a107d2002280208210720022802004101460d01200020022802042201360200200b20073602000b200120096a20033a00002008200941016a2209360200200a21030c010b0b2007450d040c010b200720094f0d012007410174220a2009200a20094b1b22094108200941084b1b21090240024020070d00200241003602100c010b200241106a41086a410136020020022007360214200220013602100b200220094101200241106a107d200241086a2802002107024020022802004101460d00200020022802042201360200200041046a20073602000c020b2007450d030b1036000b410021070240024020060e03010001000b200120033a000041012107200141016a21010b02402005450d0020042005460d00200720056b21070340200120052d00003a0000200141016a21012004200541016a2205470d000b200420076a21070b200820073602000b200241206a24000f0b1038000bc10201067f230041206b2202240041002103024002400240200141016a2204200028020422054d0d000240200041146a22062802002201200041106a280200470d00200141016a22032001490d03200141017422072003200720034b1b22034104200341044b1b220341ffffffff03712003464102742107200341027421030240024020010d00200241003602100c010b200241186a4104360200200220014102743602142002200028020c3602100b200220032007200241106a107d200241086a280200210320022802004101460d022000200228020436020c200041106a20034102763602000b200028020c220341046a2003200141027410ea081a2003200420056b36020020002004360204410121032006200141016a3602002000200028020041016a3602000b200241206a240020030f0b2003450d001036000b1038000bc60101097f200141146a28020022034102742104200128020c210520012802002106417f210720012802042208210902400340024020040d00410021040c020b200741016a21072004417c6a21042005280200210a200920024b210b200541046a21052009200a6b2109200b0d000b200620036b2205210402402003200b20076a2209490d00200141146a20093602002006200b6b20076b21040b20002005360204200041086a2004360200410121040b20002004360200200120082002200820024b1b3602040b810201057f0240024020012802042202450d002001280200210303402002418c016a210420022f018a012105410021010240034020052001460d01418fafc0002004410810ec082206450d04200141016a2101200441086a21042006417f4a0d000b2001417f6a21050b2003450d012003417f6a2103200220054102746a41e4016a28020021020c000b0b200041003602042000410c6a4128360200200041086a4197afc000360200200041013602000f0b024020022001410c6c6a2201410c6a2802004108490d00200041086a200141046a280200290000370300200041003602000f0b20004201370300200041086a41bfafc000ad42808080809005843702000b1c00200128021841a2b3c000410b2001411c6a28020028020c1100000b1c00200128021841adb3c00041052001411c6a28020028020c1100000b800201047f230041206b2202240002400240200041046a280200200041086a2802002203460d00200028020021040c010b0240200341016a22042003490d00200341017422052004200520044b1b22044108200441084b1b21040240024020030d00200241003602100c010b200241106a41086a410136020020022003360214200220002802003602100b200220044101200241106a107d200241086a2802002103024020022802004101460d00200020022802042204360200200041046a2003360200200041086a28020021030c020b2003450d001036000b1038000b200420036a20013a0000200041086a2200200028020041016a360200200241206a24000bc004010b7f23004180016b2203240002400240024002400240200220012802044105762204200420024b1b22054105742204417f4c0d000240024020050d00410121060c010b2004102c2206450d030b024020020d00410021020c040b200341c8006a41017221044100210741002108410021090340200341c8006a2001109301200341286a41086a220a200441086a290000370300200341286a41106a220b200441106a290000370300200341286a41186a220c200441186a2900003703002003200429000037032820032d00484101460d02200341086a41186a220d200c290300370300200341086a41106a220c200b290300370300200341086a41086a220b200a290300370300200320032903283703080240024020092005470d002007200941016a220a2007200a4b1b220a4104200a41044b1b220a41ffffff3f71200a462105200a410574210a0240024020090d00200341003602480c010b200341013602502003200836024c200320063602480b200341f0006a200a2005200341c8006a107d2003280278210a20032802704101460d0120032802742106200a41057621050b200620086a220a2003290308370000200a41186a200d290300370000200a41106a200c290300370000200a41086a200b290300370000200741026a2107200841206a21082002200941016a2209460d050c010b0b200a0d020b1038000b20004100360200200541ffffff3f71450d022006102e0c020b1036000b2000200536020420002006360200200041086a20023602000b20034180016a24000bfd0202047f047e230041b0016b2202240041002103200241003a00682001280204417f6a210402400240024003402004417f460d01200241c8006a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00682004417f6a21042005210320054120470d000b200241f0006a41086a2204200241c8006a41086a290300370300200241f0006a41106a2201200241c8006a41106a290300370300200241f0006a41186a2203200241c8006a41186a29030037030020022002290348370370200541ff0171411f4d0d01200241286a41186a20032903002206370300200241086a41086a20042903002207370300200241086a41106a20012903002208370300200241086a41186a2006370300200220022903702209370308200041196a2006370000200041116a2008370000200041096a200737000020002009370001410021040c020b200341ff0171450d00200241003a00680b410121040b200020043a0000200241b0016a24000bcc0403027f017e077f230041a0076b2203240002400240024002400240024002402002200128020028020441b0026e2204200420024b1bad42b0027e2205422088a70d002005a72204417f4c0d000240024020040d00410821060c010b2004102c2206450d040b2001200128020441016a2207360204200441b0026e210802400240200720012802084b0d0020020d01410021020c070b200041003602000c030b200341e0046a41047221094100210a41002104410021070340200341e0046a200110950120032802e004210b200341b4026a200941ac0210e9081a200b411c460d02200341086a200341b4026a41ac0210e9081a0240024020072008470d00200a200741016a2208200a20084b1b22084104200841044b1bad42b0027e2205422088a74541037421082005a7210c0240024020070d00200341003602e0040c010b200341083602e804200320043602e404200320063602e0040b20034190076a200c2008200341e0046a107d20032802980721082003280290074101460d012003280294072106200841b0026e21080b200620046a220c200b360200200c41046a200341086a41ac0210e9081a200a41026a210a200441b0026a21042002200741016a2207460d060c010b0b20080d030b1038000b200041003602002007450d002006210703402007109601200741b0026a2107200441d07d6a22040d000b0b2008450d03200841b0026c450d032006102e0c030b1036000b200128020421070b2000200836020420002006360200200041086a200236020020012007417f6a3602040b200341a0076a24000b93e9030d057f017e037f027e027f077e0f7f027e017f027e017f017e0e7f230041c01a6b220224000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020020060e250102030405060708090a290b0c0d0e0f101112132929292914151629172e2d2929292c2b2a290b2000411c3602000c560b200128020022032802042204450d54200328020022052d0000210620032004417f6a3602042003200541016a36020002400240024002400240024002400240024002400240024020060e0a00010203040506070809600b2001280200220128020422034104490d5f20012802002205280000210420012003417c6a3602042001200541046a3602002004418194ebdc034f0d5f410121010c0a0b2002200110ad0120022802000d5e20012802002205280204220620022802042203490d5e2003417f4c0d560240024020030d00410121040c010b200310322204450d5c2001280200220528020421060b20062003490d5d20042005280200200310e9082101200528020422062003490d302005200620036b3602042005200528020020036a3602002001450d5e2003ad220742208620078421074102410b20011b21010c080b2001280200220128020422034108490d5d2001280200220429000021072001200341786a3602042001200441086a360200410321010c080b200241086a200110ad0120022802080d5c200128020022052802042206200228020c2203490d5c2003417f4c0d540240024020030d00410121040c010b200310322204450d5a2001280200220528020421060b20062003490d5b20042005280200200310e9082101200528020422062003490d262005200620036b3602042005200528020020036a3602002001450d5c2003ad220742208620078421074104410b20011b21010c060b200241106a200110ad0120022802100d5b20012802002205280204220620022802142203490d5b2003417f4c0d530240024020030d00410121040c010b200310322204450d592001280200220528020421060b20062003490d5a20042005280200200310e9082101200528020422062003490d242005200620036b3602042005200528020020036a3602002001450d5b2003ad220742208620078421074105410b20011b21010c050b200241c0156a200110fd0520022802c01522044102460d5a20022902c4152107410621010c040b200241286a200110ad0120022802280d59200228022c2206200128020028020441186e2203200320064b1bad42187e2207422088a70d512007a72203417f4c0d510240024020030d00410421040c010b2003102c2204450d570b2001200128020441016a2205360204200341186ead2107200520012802084b0d57024002402006450d000340200241206a200110ad0120022802200d5a20012802002205280204220820022802242203490d5a2003417f4c0d540240024020030d00410121090c010b200310322209450d5a2001280200220528020421080b0240024020082003490d0020092005280200200310e90821082005280204220a2003490d2f2005200a20036b3602042005200528020020036a3602002008450d5c200241186a200110ad012003ad220b422086200b84220ca7210d024020022802180d0020012802002205280204220a200228021c2203490d002003417f4c0d570240024020030d004101210e0c010b20031032220e450d5d20012802002205280204210a0b02400240200a2003490d00200e2005280200200310e908210a2005280204220e20034f0d012003200e41b8b2c0001056000b200e102e0c010b2005200e20036b3602042005200528020020036a360200200a0d020b200d450d5c0b2009102e0c5b0b02402007422088220ba722052007a7470d00200541016a22092005490d552005410174220e20092009200e491b22094104200941044b1bad42187e220b422088a7454102742109200ba7210e0240024020050d00200241003602c0150c010b200241043602c815200220043602c0152002200541186c3602c4150b200241e0076a200e2009200241c0156a107d20022802e807210920022802e0074101460d0320022802e40721042007422088220ba72105200941186ead21070b2004200541186c6a2205200d36020420052008360200200541146a2003ad220f422086200f84220f422088a73602002005410c6a200f422086200aad84370200200541086a200c422088a7360200200b422086200742ffffffff0f83844280808080107c21072006417f6a22060d000b200128020421050b20012005417f6a3602042004450d5a4107410b20041b21010c040b2009450d510c560b200241c0156a200110e80120022802c0152204450d5820022902c4152107410821010c020b200241306a200110ad0120022802300d5720012802002205280204220620022802342203490d572003417f4c0d4f0240024020030d00410121040c010b200310322204450d552001280200220528020421060b20062003490d5620042005280200200310e9082106200528020422082003490d1f2005200820036b3602042005200528020020036a3602002006450d572003ad2207422086200784210702402001280200220128020422054104490d0020012802002206280000210320012005417c6a3602042001200641046a360200410921010c030b2007a70d560c570b200241386a200110ad0120022802380d56200128020022052802042206200228023c2203490d562003417f4c0d4e0240024020030d00410121040c010b200310322204450d542001280200220528020421060b20062003490d5520042005280200200310e9082101200528020422062003490d1d2005200620036b3602042005200528020020036a3602002001450d562003ad22074220862007842107410a410b20011b21010b0b20004100360200200041186a2003360200200041106a20073702002000410c6a2004360200200041086a2001360200200041206a200241f0176a41900210e9081a0c550b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020002400240024002400240024002400240024020060e06000102030405090b2001280200220428020422054104490d0820042802002206280000210320042005417c6a3602042004200641046a360200200241f0176a200110fd0520022802f01722044102460d08200128020022062802042209450d08200241f8176a280200210820022802f417210a2006280200220d2d0000210520062009417f6a3602042006200d41016a3602002001200128020441016a2206360204200620012802084b0d08200241f0176a200110950120022802f0172109200241c0156a200241f0176a41047241ac0210e9081a2009411c460d08200241f0176a200241c0156a41ac0210e9081a41b002102c2206450d5920062009360200200641046a200241f0176a41ac0210e9081a20012001280204417f6a36020441012101420021070c050b2001280200220428020422054104490d0720042802002206280000210320042005417c6a3602042004200641046a3602002001280200220128020422054104490d0720012802002206280000210420012005417c6a3602042001200641046a3602004102210141002106420021070c040b200241c0006a200110ad0120022802400d0620012802002205280204220620022802442204490d062004417f4c0d520240024020040d00410121030c010b200410322203450d582001280200220528020421060b20062004490d0520032005280200200410e9082106200528020422082004490d2a2005200820046b3602042005200528020020046a3602002006450d062004ad2207422086200784220ba721042001280200220528020422064104490d042005280200220a280000210820052006417c6a3602042005200a41046a360200200241f0176a200110fd0520022802f01722064102460d042001280200220a2802042209450d0420022902f4172107200a280200220d2d00002105200a2009417f6a360204200a200d41016a3602002001200128020441016a220a360204200a20012802084b0d04200241f0176a200110950120022802f017210d200241c0156a200241f0176a41047241ac0210e9081a200d411c460d04200241f0176a200241c0156a41ac0210e9081a41b002102c2209450d57200b422088a7210a2009200d360200200941046a200241f0176a41ac0210e9081a20012001280204417f6a360204410321010c030b200241c8006a200110ad0120022802480d05200128020022052802042206200228024c2204490d052004417f4c0d510240024020040d00410121030c010b200410322203450d572001280200220528020421060b20062004490d0420032005280200200410e9082101200528020422062004490d1f2005200620046b3602042005200528020020046a3602002001450d052004ad22074220862007842207422088a7210a2007a721044104210141002106410021080c020b2001280200220428020422054104490d0420042802002206280000210320042005417c6a3602042004200641046a360200200241f0176a200110fd0520022802f01722044102460d04200128020022062802042208450d0420022902f41721072006280200220a2d0000210520062008417f6a3602042006200a41016a3602002001200128020441016a2206360204200620012802084b0d04200241f0176a200110950120022802f0172108200241c0156a200241f0176a41047241ac0210e9081a2008411c460d04200241f0176a200241c0156a41ac0210e9081a41b002102c2206450d5520062008360200200641046a200241f0176a41ac0210e9081a20012001280204417f6a3602042007422088a721082007a7210a41052101420021070c010b200241d0006a200110ad0120022802500d0320012802002205280204220620022802542204490d032004417f4c0d4f0240024020040d00410121030c010b200410322203450d552001280200220528020421060b20062004490d0220032005280200200410e9082106200528020422082004490d1c2005200820046b3602042005200528020020046a3602002006450d032004ad2207422086200784220ba721042001280200220528020422064104490d012005280200220a280000210820052006417c6a3602042005200a41046a360200200241f0176a200110fd0520022802f01722064102460d012001280200220a2802042209450d0120022902f4172107200a280200220d2d00002105200a2009417f6a360204200a200d41016a3602002001200128020441016a220a360204200a20012802084b0d01200241f0176a200110950120022802f017210d200241c0156a200241f0176a41047241ac0210e9081a200d411c460d01200241f0176a200241c0156a41ac0210e9081a41b002102c2209450d54200b422088a7210a2009200d360200200941046a200241f0176a41ac0210e9081a20012001280204417f6a360204410621010b200020053a0005200020013a000420004101360200200041246a20093602002000411c6a2007370200200041186a2006360200200041146a2008360200200041106a200a3602002000410c6a2004360200200041086a2003360200200041286a200241e0076a41880210e9081a0c570b2004450d010b2003102e0b2000411c3602000c540b200128020022032802042204450d4e200328020022052d0000210620032004417f6a3602042003200541016a3602000240024002400240024020060e03000103530b200241f0176a2001109802200241fc176a2802002204450d5220024184186a280200210320024180186a280200210520022802f817210920022903f0172107200241e0076a20024188186a41e40010e9081a200241f4186a2802002108200241f0176a4180016a2802002106200241ec186a280200210a200241c0156a200241f8186a41800110e9081a200241f0176a200110f601024020022802f417450d00200241fc176a290200210c20022902f417210b20022802f0172101200241a80e6a200241e0076a41e40010e9081a200241d8116a200241c0156a41800110e9081a4101210d0c040b02402003450d00200341246c21032004210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012003415c6a22030d000b0b02402005450d00200541246c450d002004102e0b02402008450d00200841246c2103200a210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012003415c6a22030d000b0b2006450d52200641246c0d010c520b200241f0176a2001109802200241fc176a2802002204450d5120024184186a280200210320024180186a280200210520022802f817210920022903f0172107200241e0076a20024188186a41e40010e9081a200241f4186a2802002108200241f0176a4180016a2802002106200241ec186a280200210a200241c0156a200241f8186a41800110e9081a200241f0176a200110f601024020022802f417450d00200241fc176a290200210c20022902f417210b20022802f0172101200241a80e6a200241e0076a41e40010e9081a200241d8116a200241c0156a41800110e9081a4102210d0c030b02402003450d00200341246c21032004210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012003415c6a22030d000b0b02402005450d00200541246c450d002004102e0b02402008450d00200841246c2103200a210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012003415c6a22030d000b0b2006450d51200641246c450d510b200a102e0c500b200128020022032802042204450d4f200328020022052d0000210620032004417f6a3602042003200541016a36020020064101470d4f2001280200220328020422044108490d4f20032802002205290000210b2003200441786a3602042003200541086a3602002001280200220328020422044108490d4f20032802002205290000210c2003200441786a3602042003200541086a360200200128020022012802042203450d4f200128020022042d0000210520012003417f6a3602042001200441016a3602004200210702400240024020050e03020001520b420121070c010b420221070b200241a80e6a200241d8146a41e40010e9081a200241d8116a200241e0076a41800110e9081a4103210d0b200241d00a6a200241a80e6a41e40010e9081a20024198106a200241d8116a41800110e9081a200041186a200c370200200041106a200b370200200041346a2003360200200041306a20053602002000412c6a2004360200200041286a2009360200200041206a20073702002000410c6a2001360200200041086a200d36020020004102360200200041386a200241d00a6a41e40010e9081a200041a4016a2008360200200041a0016a20063602002000419c016a200a360200200041a8016a20024198106a41800110e9081a0c530b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020020060d00200241d8006a200110da042002290358a70d002002290360210720004103360200200041086a2007370300200041106a200241f0176a41a00210e9081a0c530b2000411c3602000c520b200128020022032802042204450d49200328020022052d0000210620032004417f6a3602042003200541016a3602000240024002400240024020060e0500010203044e0b2001280200220128020422044104490d4d20012802002205280000210320012004417c6a3602042001200541046a36020042002107410121084200210b0c4f0b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2203200241c0156a410f6a290000370000200241e0076a41086a2204200241c0156a41086a290300370300200241d8116a410f6a22052003290000370000200241d8116a41086a2203200429030037030020024198106a41086a2204200329030037030020024198106a410f6a22032005290000370000200220022903c01537039810200241df156a310000210b20022900d7152107200241f8136a410f6a22052003290000370000200241f8136a41086a200429030037030020022002290398103703f8132001280200220128020422084104490d4d2005280000210a200228008b14210920022900ff13210c20022800fb13210320022f00f913210420022d00f81321052001280200220d280000210620012008417c6a3602042001200d41046a36020020022007421888a73b00eb1420022007421088a73a00ea1420022007a73b01e81420022009ad422086200aad843703e01420022007422888200b42188684a722013600ed142001411076210a2002200c3703d814200c421888a7210d200c420888a72109200241d8146a410f6a290000210b20022900df142107200ca7210e410221080c4f0b200441ff0171450d4c200241003a00e0150c4c0b2001280200220128020422044104490d4b20012802002205280000210320012004417c6a3602042001200541046a36020042002107410321080c4c0b41002104200241003a00e0150240024002400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2203200241c0156a410f6a290000370000200241e0076a41086a2204200241c0156a41086a290300370300200241d8116a410f6a22052003290000370000200241d8116a41086a2203200429030037030020024198106a41086a2204200329030037030020024198106a410f6a22032005290000370000200220022903c01537039810200241df156a310000210b20022900d7152107200241f8136a410f6a22052003290000370000200241f8136a41086a200429030037030020022002290398103703f81320012802002208280204220a4104490d4d2005280000210d200228008b14210e20022900ff13210c20022800fb13210320022f00f913210420022d00f81321052008280200220928000021062008200a417c6a3602042008200941046a360200200128020022012802042208450d4d2001280200220a2d0000210920012008417f6a3602042001200a41016a3602004100210120090e0202014d0b200441ff0171450d4c200241003a00e0150c4c0b410121010b2002200e3602f4092002200d3602f009200220073703f8092007423888200b42ff018342088684a7210a2002200c3703e809200c421888a7210d200c420888a72109200241f7096a290000210b20022900ef092107200ca7210e410421080c4c0b2001280200220128020422044104490d4920012802002205280000210320012004417c6a3602042001200541046a36020042002107410521080c4a0b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a360200024002400240024002400240024020060e0400010203070b200241c0156a200110eb0120022d00c0154105460d06200241c0156a41106a290300210b200241c8156a2903002107200241e0156a2802002103200241d8156a290300210c20022802c415210520022802c0152104200241e8006a200110820202402002290368a70d00200241e8006a41106a29030021102005ad4220862004ad8421112002290370220f422088a72105200fa72104410121010c040b200441ff01714102470d062007a7450d062005102e0c060b200241c0156a200110eb0120022d00c0154105460d05200241c0156a41106a290300210b200241e0156a2802002103200241d8156a290300210c200241c8156a290300210720022802c415210520022802c015210420024198016a2001108202200229039801a70d0420024198016a41106a290300211020022903a001210f20024180016a2001108202200229038001a70d0420024180016a41106a290300211220022903880121132005ad4220862004ad842111200f422088a72105200fa72104410221010c020b200241c0156a200110eb0120022d00c0154105460d04200241c0156a41106a290300210b200241e0156a22042802002103200241d8156a290300210c200241c0156a41086a2205290300210720022802c415210820022802c0152106200241c0156a200110eb01024020022d00c0154105460d00200241d8116a41086a200241c0156a41146a290200370300200241d8116a41106a200241dc156a2802003602002002200241c0156a410c6a2902003703d8112005280200210a2004350200210f20022802c415210520022802c0152104200241b0016a2001108202024020022903b001a70d00200241b0016a41106a290300211420022903b8012115200241e0076a41146a200241d8116a41106a280200360200200241e0076a410c6a200241e0116a290300370200200220022903d8113702e4072002200a3602e0072008ad4220862006ad842111200241e0076a41106a290300211220022903e007211020022903e8072113410321010c030b200441ff01714102470d00200a450d002005102e0b200641ff01714102470d042007a7450d042008102e0c040b200241c0156a200110eb0120022d00c0154105460d03200241c0156a41106a290300210b200241c8156a2903002107200241e0156a2802002103200241d8156a290300210c20022802c415210520022802c0152104200241c8016a200110820220022903c801a70d01200241c8016a41106a29030021102005ad4220862004ad84211120022903d001220f422088a72105200fa721044200210f4104210142002113420021120b20004105360200200041e0006a2014370200200041d8006a2015370200200041c8006a2012370200200041c0006a2013370200200041386a20103702002000411c6a200b370200200041146a2007370200200041d0006a200f3702002000412c6a2003360200200041246a200c3702002000410c6a2011370200200041086a2001360200200041306a2005ad4220862004ad84370200200041e8006a200241f0176a41c80110e9081a0c530b200441ff01714102470d012007a7450d012005102e0c010b200441ff01714102470d002007a7450d002005102e0b2000411c3602000c500b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020020060d00200241e0016a200110ad0120022802e0010d0020022802e4012205200128020028020441f0006e2203200320054b1bad42f0007e2207422088a70d472007a72203417f4c0d470240024020030d00410421060c010b2003102c2206450d4d0b2001200128020441016a2204360204200341f0006ead21070240200420012802084b0d00024002402005450d00200241c0156a41086a21090340200241c0156a200110990220022802c415210420022802c0152108200241e0076a200941e80010e9081a2004450d03200241d8116a200241e0076a41e80010e9081a02402007422088220ba722032007a7470d00200341016a220a2003490d4c2003410174220d200a200a200d491b220a4104200a41044b1bad42f0007e220b422088a745410274210a200ba7210d0240024020030d00200241003602c0150c010b200241043602c815200220063602c0152002200341f0006c3602c4150b20024198106a200d200a200241c0156a107d20022802a010210a2002280298104101460d03200228029c1021062007422088220ba72103200a41f0006ead21070b2006200341f0006c6a2203200436020420032008360200200341086a200241d8116a41e80010e9081a200b422086200742ffffffff0f83844280808080107c21072005417f6a22050d000b200128020421040b20012004417f6a3602042006450d022000200636020420004106360200200041086a2007370200200041106a200241f0176a41a00210e9081a0c520b200a0d4d0c480b02402007422088a72201450d002006200141f0006c6a2105200621010340024020012204410c6a2802002203450d0020042802042101200341246c210303400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012003415c6a22030d000b0b200441f0006a21010240200441086a2802002203450d00200341246c450d002004280204102e0b20012005470d000b0b2007a72201450d00200141f0006c450d002006102e0b2000411c3602000c4f0b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a360200410021164100210e410721090240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020060e170001020304055c060708090a0b0c0d0e0f101112131415170b200241c0156a200110eb0120022d00c0154105460d16200241d8116a41086a200241d4156a290200370300200241d8116a41106a200241dc156a2902003703002002200241cc156a2902003703d811200241c0156a41086a280200210820022802c415210a20022802c0152105200241e8016a2001108202024002400240024020022903e801a70d00200128020022032802042204450d00200241e8016a41106a290300210c20022903f001210b200328020022062d0000210e20032004417f6a360204410121092003200641016a36020041002104024002400240200e0e050600010204030b410121040c050b410221040c030b41002104200241003a00e01502400340200128020022032802042206450d01200241c0156a20046a2003280200220d2d00003a000020032006417f6a3602042003200d41016a3602002002200441016a22033a00e0152003210420034120470d000b200241a80e6a410f6a2201200241c0156a410f6a290000370000200241a80e6a41086a2203200241c0156a41086a290300370300200241d8146a410f6a22042001290000370000200241d8146a41086a22012003290300370300200241d00a6a41086a22032001290300370300200241d00a6a410f6a22012004290000370000200220022903c0153703d00a200241c0156a411f6a310000210720022900d715210f200241f8136a410f6a22042001290000370000200241f8136a41086a2003290300370300200220022903d00a3703f8132004290000211020022800fb13210120022900ff13211120022d00f8132103200220022f00f9133b00e107200220033a00e007200241e0076a411f6a20073c0000200241e0076a410f6a20103700002002200f3700f707200220113700e707200220013600e3074103210420022f01e007210d0c040b200441ff0171450d00200241003a00e0150b200541ff01714102470d192008450d19200a102e0c190b410421040b0b20024198106a41106a200241d8116a41106a29030037030020024198106a41086a200241d8116a41086a290300221137030020022901e607220f422088200241ee076a2901002210422086842107200fa7220e41807e7121162010422088210f20022d00ff07211720022800fb07211820022f00f907211920022d00f807211a20022f01f607211b20022801e207210320022903d811211020022802ac10211c20022f01aa10211d20022d00a910211e20022800a510211f20022f00a310212020022d00a21021212011a721220c5b0b20024180026a2001108202200229038002a70d15200229038802220b42208820024190026a290300220c422086842107200c422088210f200ba7220e41807e712116410221090c580b20024198026a2001108202200229039802a70d1420022903a002220b422088200241a8026a290300220c422086842107200c422088210f200ba7220e41807e712116410321090c570b410421092001280200220128020422044104490d1320012802002205280000210320012004417c6a3602042001200541046a360200420021070c550b200241b0026a200110ad0120022802b0020d1220022802b40221032002418094ebdc033602c415200220033602c015200128020022012802042204450d12200241c0156a2003418094ebdc034b4102746a2802002103200128020022052d0000210620012004417f6a3602042001200541016a360200410521094100210e024020060e025800130b4101210e0c550b200241c0156a200110ea0120022802c0152203450d1120022802c415220e41807e712116200241c8156a35020021074200210f410621090c540b200128020022032802042204450d0f200328020022052d0000210620032004417f6a3602042003200541016a36020002400240024002400240024020060e050001020304050b200241003a00d8140c590b200241013a00d8140c580b200241023a00d8140c570b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241d8116a410f6a2201200241c0156a410f6a290000370000200241d8116a41086a2203200241c0156a41086a29030037030020024198106a410f6a2204200129000037000020024198106a41086a22012003290300370300200241a80e6a41086a22032001290300370300200241a80e6a410f6a22012004290000370000200220022903c0153703a80e200241df156a310000211020022900d715210b200241f8136a410f6a22042001290000370000200241f8136a41086a2003290300370300200220022903a80e3703f8132004290000210c20022900ff13210720022d00f813210120022f00f9132103200220022800fb133602dc14200220033b01da14200220013a00d914200241033a00d8140c570b0240200441ff0171450d00200241003a00e0150b200241053a00d8140c120b200241043a00d8140c550b200241053a00d8140c100b200241c0156a200110eb0120022d00c0154105460d0f20022902c415220c422088200241cc156a290200220f422086842107200241d4156a290200220b422888200241dc156a31000042188684a72118200ca7220e41807e712116200f422088210f200b421888a72119200b421088a7211a200241e0156a2802002105200241de156a2f01002123200241dd156a2d0000211720022802c0152103200ba7211b410921090c520b200241b8026a200110ad0120022802b8020d0e20022802bc02210342002107410a21090c500b200241c0026a200110ad0120022802c0020d0d20022802c402210342002107410b21090c4f0b200128020022012802042203450d0c200128020022052d0000210420012003417f6a3602042001200541016a360200200441e5004f0d0c42002107410c21094100210e4200210f0c510b410d21094100210e0c4e0b410e21094100210e0c4d0b200241c0156a200110e40120022802c0152203450d0920022802c415220e41807e712116200241c8156a35020021074200210f410f21090c4c0b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2203200241c0156a410f6a290000370000200241e0076a41086a2204200241c0156a41086a290300370300200241d8116a410f6a22052003290000370000200241d8116a41086a2203200429030037030020024198106a41086a2204200329030037030020024198106a410f6a22032005290000370000200220022903c01537039810200241df156a310000210720022900d715210b200241f8136a410f6a22052003290000370000200241f8136a41086a200429030037030020022002290398103703f81320022800fb13210320022f00f913210d20022d00f8132104200241d8146a41086a22062005290000370300200220022900ff133703d814200241f0146a20073c00002002200b3703e8142001280200220128020422084104490d092001280200220a280000210520012008417c6a3602042001200a41046a36020020022903d814220b4220882006290300220c422086842107200c422088210f200ba7220e41807e71211620022800ed14211820022f00eb14211920022d00ea14211a20022f01e814211b411021090c4e0b200441ff0171450d08200241003a00e0150c080b411121094100210e0c4a0b2001280200220428020422054104490d0620042802002206280000210320042005417c6a3602042004200641046a360200200241c8026a200110ad0120022802c8020d0620022802cc02220441ffffffff03712004470d06200441027422052001280200220628020422084b0d062005417f4c0d4c0240024020050d004104210e0c010b20051032220e450d522001280200220628020421080b02400240200820044102742201490d00200e2006280200200110e90821082006280204220a20014f0d012001200a41b8b2c0001056000b2005450d07200e102e0c070b2006200a20016b3602042006200628020020016a3602002008450d062004ad4220862005410276ad842107200841807e7121164200210f411221090c490b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2203200241c0156a410f6a290000370000200241e0076a41086a2204200241c0156a41086a290300370300200241d8116a410f6a22052003290000370000200241d8116a41086a2203200429030037030020024198106a41086a2204200329030037030020024198106a410f6a22032005290000370000200220022903c01537039810200241df156a310000210b20022900d7152107200241f8136a410f6a22052003290000370000200241f8136a41086a200429030037030020022002290398103703f8132001280200220128020422084104490d062007422888200b42188684a721182005350000210c200228008b14210620022900ff13210b20022800fb13210320022f00f913210d20022d00f81321042007421888a721192007421088a7211a2007a7211b2001280200220a280000210520012008417c6a3602042001200a41046a3602002006411076ad423086200641087641ff0171ad42288684200c2006ad4220864280808080f01f8384842207422088210f200b4220882007422086842107200ba7220e41807e712116411321090c4b0b200441ff0171450d05200241003a00e0150c050b200241d0026a200110820220022903d002a70d0420022903d802220b422088200241e0026a290300220c422086842107200c422088210f200ba7220e41807e712116411421090c470b200241f0026a200110ad0120022802f0020d0320022802f4022103200241e8026a200110ad0120022802e8020d0320022802ec02220e41807e712116411521090c460b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2203200241c0156a410f6a290000370000200241e0076a41086a2204200241c0156a41086a290300370300200241d8116a410f6a22052003290000370000200241d8116a41086a2203200429030037030020024198106a41086a2204200329030037030020024198106a410f6a22032005290000370000200220022903c01537039810200241df156a310000210c20022900d715210b200241f8136a410f6a22052003290000370000200241f8136a41086a200429030037030020022002290398103703f8132001280200220128020422064104490d0320052800002108200228008b14210a20022900ff13210f20022800fb13210320022f00f913210d20022d00f813210420012802002209280000210520012006417c6a3602042001200941046a3602002002200a3602f409200220083602f009200f42208820022903f0092210422086842107200b422888200c42188684a72118200fa7220e41807e7121162010422088210f200b421888a72119200b421088a7211a200ba7211b411621090c480b200441ff0171450d02200241003a00e0150c020b200241c0156a200110ea0120022802c0152203450d0120022902c415220b4220882107200ba7220e41807e7121164200210f411721090c440b200241053a00d8140b2000411c3602000c4e0b0240200128020022012802042203450d0020012003417f6a3602042001200128020041016a3602000b2000411c3602000c4d0b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a3602004100212402400240024020060e020001030b41002104200241003a00e015024002400240024002400240024002400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241d8146a410f6a2203200241c0156a410f6a290000370000200241d8146a41086a2204200241c0156a41086a290300370300200241e8096a410f6a22052003290000370000200241e8096a41086a22032004290300370300200241c80d6a41086a22042003290300370300200241c80d6a410f6a22032005290000370000200220022903c0153703c80d200241df156a310000210c20022900d715210b200241f8136a410f6a22052003290000370000200241f8136a41086a2004290300370300200220022903c80d3703f8132005290000210720022800fb13210920022f00f913210a20022d00f813210820022900ff13211241002104200241003a00e015200b422888200c42188684a721212012428080808070832125200b421888a72122200b421088a7210e200ba7210d0340200128020022032802042205450d02200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e8096a410f6a2203200241c0156a410f6a290000370000200241e8096a41086a2204200241c0156a41086a290300370300200241c80d6a410f6a22052003290000370000200241c80d6a41086a22032004290300370300200241a00d6a41086a22042003290300370300200241a00d6a410f6a22032005290000370000200220022903c0153703a00d200241df156a310000210b20022900d715210c200241f8136a410f6a22052003290000370000200241f8136a41086a2004290300370300200220022903a00d3703f8132005290000210f20022800fb13211e20022f00f913211f20022d00f813212020022900ff132110200241f0146a200b3c00002002200c3703e8142002200f3703e014200220103703d81441002104200241003a00e0150340200128020022032802042205450d03200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e8096a410f6a2203200241c0156a410f6a290000370000200241e8096a41086a2204200241c0156a41086a290300370300200241c80d6a410f6a22052003290000370000200241c80d6a41086a22032004290300370300200241a00d6a41086a22042003290300370300200241a00d6a410f6a22032005290000370000200220022903c0153703a00d200241df156a310000211020022900d715210f200241f8136a410f6a22052003290000370000200241f8136a41086a2004290300370300200220022903a00d3703f8132005290000210c20022900ff13210b20022800fb13211720022f00f913211c20022d00f813211d41002104200241003a00e015200f422888201042188684a72118200f421888a72119200f421088a7211b200fa721230340200128020022032802042205450d04200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e8096a410f6a2203200241c0156a410f6a290000370000200241e8096a41086a2204200241c0156a41086a290300370300200241c80d6a410f6a22052003290000370000200241c80d6a41086a22032004290300370300200241a00d6a41086a22042003290300370300200241a00d6a410f6a22032005290000370000200220022903c0153703a00d200241df156a310000211120022900d7152110200241f8136a410f6a22052003290000370000200241f8136a41086a2004290300370300200220022903a00d3703f8132005350000212620022900ff13210f20022800fb13210520022f00f913210420022d00f8132103200228008b1421064100211a200241003a00e015200641087621272006ad42208621282006411076ad21290340200128020022062802042216450d05200241c0156a201a6a2006280200222a2d00003a000020062016417f6a3602042006202a41016a3602002002201a41016a22063a00e0152006211a20064120470d000b200241c80d6a410f6a2206200241c0156a410f6a290000370000200241c80d6a41086a221a200241c0156a41086a290300370300200241a00d6a410f6a22162006290000370000200241a00d6a41086a2206201a290300370300200241e80c6a41086a221a2006290300370300200241e80c6a410f6a22062016290000370000200220022903c0153703e80c200241df156a310000211520022900d7152114200241f8136a410f6a22162006290000370000200241f8136a41086a201a290300370300200220022903e80c3703f8132016290000211320022800fb13212a20022f00f913211620022d00f813211a20022900ff13212b200241800a6a20153c0000200220143703f809200220133703f0092002202b3703e8094100212c200241003a00e015034020012802002206280204222d450d06200241c0156a202c6a2006280200222e2d00003a00002006202d417f6a3602042006202e41016a3602002002202c41016a22063a00e0152006212c20064120470d000b200241c80d6a410f6a2206200241c0156a410f6a290000370000200241c80d6a41086a222c200241c0156a41086a290300370300200241a00d6a410f6a222d2006290000370000200241a00d6a41086a2206202c290300370300200241e80c6a41086a222c2006290300370300200241e80c6a410f6a2206202d290000370000200220022903c0153703e80c200241df156a310000211320022900d7152114200241f8136a410f6a222d2006290000370000200241f8136a41086a202c290300370300200220022903e80c3703f813202d280000212f200228008b14213020022900ff13211520022800fb13212e20022f00f913212d20022d00f813212c200241e0076a41186a2206200241d8146a41186a2d00003a0000200241e0076a41106a2224200241d8146a41106a290300370300200241e0076a41086a2231200241d8146a41086a290300370300200220022903d8143703e007200241d8116a41186a2232200241e8096a41186a2d00003a0000200241d8116a41106a2233200241e8096a41106a290300370300200241d8116a41086a2234200241e8096a41086a290300370300200220022903e8093703d81120024198106a41186a20062d00003a000020024198106a41106a202429030037030020024198106a41086a2031290300370300200220022903e00737039810200241a80e6a41186a20322d00003a0000200241a80e6a41106a2033290300370300200241a80e6a41086a2034290300370300200220022903d8113703a80e200241f8026a200110ad0120022802f8020d0a20012802002231280204223220022802fc022206490d0a2006417f4c0d4e20060d06410121240c070b200441ff0171450d09200241003a00e0150c090b200441ff0171450d08200241003a00e0150c080b200441ff0171450d07200241003a00e0150c070b200441ff0171450d06200241003a00e0150c060b201a41ff0171450d05200241003a00e0150c050b202c41ff0171450d04200241003a00e0150c040b200610322224450d4c2001280200223128020421320b20322006490d0120242031280200200610e9082101203128020422322006490d1d2031203220066b3602042031203128020020066a3602002001450d022029423086202741ff0171ad4228868420284280808080f01f832026848421262025201242ffffffff0f838421252006ad22124220862012842112200241d00a6a41186a20024198106a41186a2d00003a0000200241d00a6a41106a20024198106a41106a290300370300200241d00a6a41086a20024198106a41086a29030037030020024198136a41086a200241a80e6a41086a29030037030020024198136a41106a200241a80e6a41106a29030037030020024198136a41186a200241a80e6a41186a2d00003a000020022002290398103703d00a200220022903a80e370398130b200241e80f6a41186a2201200241d00a6a41186a2d00003a0000200241e80f6a41106a2206200241d00a6a41106a290300370300200241e80f6a41086a2227200241d00a6a41086a290300370300200241f80d6a41086a223120024198136a41086a290300370300200241f80d6a41106a223220024198136a41106a290300370300200241f80d6a41186a223320024198136a41186a2d00003a0000200220022903d00a3703e80f20022002290398133703f80d2000411f6a2007370000200041176a2025370000200041336a201e360000200041316a201f3b0000200041306a20203a00002000412c6a20213602002000412a6a20223b01002000200e3a0029200041276a200d3b0000200041136a2009360000200041116a200a3b0000200041106a20083a0000200041086a20123702002000202436020420004109360200200020022903e80f3700372000413f6a2027290300370000200041c7006a2006290300370000200041cf006a20012d00003a00002000418f016a20113c000020004187016a2010370000200041ff006a2026370000200041f7006a200f370000200041df006a200c370000200041d7006a200b37000020004193016a202a36000020004191016a20163b000020004190016a201a3a0000200041f3006a2005360000200041f1006a20043b0000200041f0006a20033a0000200041ec006a2018360200200041ea006a20193b01002000201b3a0069200041e7006a20233b0000200041d3006a2017360000200041d1006a201c3b0000200041d0006a201d3a0000200041b3016a202e360000200041b7016a2015370000200041bf016a202f360000200041c3016a2030360000200041cf016a20133c0000200041c7016a2014370000200041b1016a202d3b0000200041b0016a202c3a0000200041af016a20332d00003a0000200041a7016a20322903003700002000419f016a2031290300370000200020022903f80d37009701200041d0016a200241f0176a41e00010e9081a0c4e0b2024102e0b2000411c3602000c4c0b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a360200024002400240024020060e03000102040b200241f0176a200110cb0620022903f81722074202510d0320022802fc17210320022802f417210420022802f0172105200241e0076a20024180186a41e40010e9081a200241e8186a280200210620022802ec18210820022802e418210a200241c0156a200241f0176a4180016a41800110e9081a200241f0176a200110f60120022802f417450d032007a72101200241fc176a290200210b20022802f017210920022902f417210c200241d00a6a200241e0076a41e40010e9081a200241d8116a200241c0156a41800110e9081a200c422088200b422086842107200b422088210b200ca7210d4101210e0c020b200241f0176a200110cb0620022903f81722074202510d0220022802fc17210320022802f417210420022802f0172105200241a80e6a20024180186a41e40010e9081a200241e8186a280200210620022802ec18210820022802e418210a200241c0156a200241f0176a4180016a41800110e9081a200241f0176a200110f60120022802f417450d022007a72101200241fc176a290200210b20022802f017210920022902f417210c200241d8146a200241a80e6a41e40010e9081a200241e0076a200241c0156a41800110e9081a200241d00a6a200241d8146a41e40010e9081a200241d8116a200241e0076a41800110e9081a200c422088200b422086842107200b422088210b200ca7210d4102210e0c010b2001280200220328020422044104490d0120032802002205280000210920032004417c6a3602042003200541046a3602002001280200220128020422034104490d0120012802002204280000210d20012003417c6a3602042001200441046a360200200241d00a6a200241c0156a41e40010e9081a200241d8116a200241f0176a41800110e9081a4103210e0b200241e8096a200241d00a6a41e40010e9081a20024198106a200241d8116a41800110e9081a2000411c6a200b3e0200200041146a20073702002000412c6a2003360200200041286a2001360200200041246a2004360200200041206a2005360200200041106a200d3602002000410c6a2009360200200041086a200e3602002000410a360200200041306a200241e8096a41e40010e9081a2000419c016a200836020020004198016a200636020020004194016a200a360200200041a0016a20024198106a41800110e9081a200041a8026a20024198136a41086a290300370300200041a0026a2002290398133703000c4c0b2000411c3602000c4b0b200128020022032802042204450d3b200328020022052d0000210620032004417f6a3602042003200541016a36020020060d3b2001280200220328020422044104490d3b20032802002205280000210620032004417c6a3602042003200541046a36020020024190036a200110ad012002280290030d3b2001280200220428020422052002280294032203490d3b2003417f4c0d410240024020030d00410121080c010b200310322208450d472001280200220428020421050b0240024020052003490d0020082004280200200310e90821052004280204220820034f0d012003200841b8b2c0001056000b2008102e0c3c0b2004200820036b3602042004200428020020036a3602002005450d3b2003ad2207422086200784210b20024188036a200110ad012002280288030d3a200228028c0322082001280200280204410c6e2203200320084b1bad420c7e2207422088a70d412007a72203417f4c0d410240024020030d004104210a0c010b2003102c220a450d470b2001200128020441016a22043602042003410c6ead2107200420012802084b0d3902402008450d00034020024180036a200110ad012002280280030d3b2001280200220428020422092002280284032203490d3b2003417f4c0d430240024020030d004101210d0c010b20031032220d450d492001280200220428020421090b20092003490d3a200d2004280200200310e90821092004280204220d2003490d192004200d20036b3602042004200428020020036a3602002009450d3b02402007422088220ca722042007a7470d00200441016a220d2004490d442004410174220e200d200d200e491b220d4104200d41044b1bad420c7e220c422088a745410274210d200ca7210e0240024020040d00200241003602e0070c010b200241043602e8072002200a3602e00720022004410c6c3602e4070b200241d8116a200e200d200241e0076a107d20022802e011210d20022802d8114101460d3f20022802dc11210a2007422088220ca72104200d410c6ead21070b200a2004410c6c6a22042003ad220f422086200f8437020420042009360200200c422086200742ffffffff0f83844280808080107c21072008417f6a22080d000b200128020421040b20012004417f6a360204200a450d3a2002200a3602c815200128020022032802042104200220073702cc152002200b3703c015200ba7210d20044104490d3720032802002208280000210e20032004417c6a3602042003200841046a3602002001280200220328020422044104490d3720032802002208280000212020032004417c6a3602042003200841046a3602002001280200220328020422044104490d3720032802002208280000211e20032004417c6a3602042003200841046a360200200241cc156a290200210720022902c415210b4100210a200241003a008016200b422088a7211f2007422088a72121200ba7211d2007a7212241c000210402400240034002400240200128020022032802042208450d002003280200220a2d0000210920032008417f6a3602042003200a41016a36020020022d008016220341c000490d01200220093a00e00741bcf5cc00412b200241e0076a41e0c0cb0041e4decc00103e000b200a41ff0171450d02200241003a0080160c020b200241c0156a20036a20093a00002002200341016a220a3a0080162004417f6a22040d000b2003413e4b0d010b0240200d450d002005102e0b02402021450d002021410c6c2103201f210103400240200141046a280200450d002001280200102e0b2001410c6a2101200341746a22030d000b0b2022450d3c2022410c6c450d3c201f102e0c3c0b2005450d3b200241f8156a290300210720022903f015210b20022802ec15210120022f01ea15210320022800e515210420022f00e315210820022d00e215210a20022f01e015210920022903d815210c20022802d415211c20022802d015211720022802cc15212320022f01ca15211b20022d00c915211920022800c515211820022f00c315211a20022d00c215211620022f01c015212a200020022d00e9153a00552000200a3a004e200020193a0035200020163a002e200020063602042000410b360200200041e4006a2007370200200041dc006a200b370200200041d8006a2001360200200041d6006a20033b0100200041d1006a2004360000200041cf006a20083b0000200041cc006a20093b0100200041c4006a200c370200200041c0006a201c3602002000413c6a2017360200200041386a2023360200200041366a201b3b0100200041316a20183600002000412f6a201a3b00002000412c6a202a3b0100200041286a201e360200200041246a2020360200200041206a200e3602002000411c6a2021360200200041186a2022360200200041146a201f360200200041106a201d3602002000410c6a200d360200200041086a2005360200200041ec006a200241f0176a41c40110e9081a0c4a0b0240200128020022012802042203450d0020012003417f6a3602042001200128020041016a3602000b2000411c3602000c490b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a3602004200210f42002107410d21080240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020060e19000102030405060708090a0b18170c0d0e0f101112131415161a0b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b20022802dc15210d20022f01da15210920022d00d915210e20022f00d715210a20022900cf15210720022800cb15212220022800c715212120022800c315210320022f00c115210420022d00c015210520024198036a2001108202200229039803a70d1a200241a8036a290300210c20022903a003210b2007422088210f410121080c180b200441ff0171450d19200241003a00e0150c190b200241b8036a200110ad0120022802b8030d1820022802bc032103200241b0036a200110ad0120022802b0030d1820022802b403212141022108420021070c160b200241c0036a200110ad0120022802c0030d17200128020022042802042205450d1720022802c4032103200428020022062d0000210820042005417f6a3602042004200641016a36020002400240024020080e0200011a0b200128020022042802042205450d19200428020022082d0000210620042005417f6a3602042004200841016a360200410021040240024002400240024002400240200641ff00710e0706000102030405200b4180800421040c050b4180800821040c040b4180800c21040c030b4180801021040c020b4180801421040c010b4180801821040b2001280200220128020422054110490d192001280200220841086a290000210b200829000021072001200841106a3602002001200541706a360204200242003703d015200220073703c0152002200b3703c8152006410174418002712101410021050c010b2001280200220428020422054110490d182004280200220641086a290000210b200629000021072004200641106a3602002004200541706a3602042001280200220128020422044110490d182001280200220541086a290000210c2005290000210f2001200541106a360200200241d8156a200c3703002001200441706a360204200220073703c0152002200b3703c8152002200f3703d0154100210141012105410021040b2007422088210f20044180801c71200172200572212120022903d815210b20022802d415211f20022f01d215211e20022d00d115212020022800cd15210d20022f00cb15210920022d00ca15210e20022f01c815210a4200210c410321080c150b410421082001280200220128020422044104490d1620012802002205280000210320012004417c6a3602042001200541046a360200420021070c140b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b20022900cf152207422088210f20022802dc15210d20022f01da15210920022d00d915210e20022f00d715210a20022800cb15212220022800c715212120022800c315210320022f00c115210420022d00c0152105410521080c140b200441ff0171450d15200241003a00e0150c150b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b20022900cf152207422088210f20022802dc15210d20022f01da15210920022d00d915210e20022f00d715210a20022800cb15212220022800c715212120022800c315210320022f00c115210420022d00c0152105410621080c130b200441ff0171450d14200241003a00e0150c140b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b20022900cf152207422088210f20022802dc15210d20022f01da15210920022d00d915210e20022f00d715210a20022800cb15212220022800c715212120022800c315210320022f00c115210420022d00c0152105410721080c120b200441ff0171450d13200241003a00e0150c130b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b2001280200220628020422084104490d1320022802dc15210d20022f01da15210920022d00d915210e20022f00d715210a20022900cf15210720022800cb15212220022800c715212120022800c315210320022f00c115210420022d00c015210520062802002220280000211f20062008417c6a3602042006202041046a3602002001280200220128020422064104490d1320012802002208350000210b20012006417c6a3602042001200841046a3602002007422088210f4200210c410821080c110b200441ff0171450d12200241003a00e0150c120b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b20022900cf152207422088210f20022802dc15210d20022f01da15210920022d00d915210e20022f00d715210a20022800cb15212220022800c715212120022800c315210320022f00c115210420022d00c0152105410921080c100b200441ff0171450d11200241003a00e0150c110b200241c8036a200110ad0120022802c8030d1020022802cc032103410a2108420021070c0e0b2001280200220128020422044104490d0f20012802002205280000210320012004417c6a3602042001200541046a360200410b2108420021070c0d0b41002104200241003a00e015024002400240024002400240024002400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2203200241c0156a410f6a290000370000200241e0076a41086a2204200241c0156a41086a290300370300200241d8116a410f6a22052003290000370000200241d8116a41086a2203200429030037030020024198106a41086a2204200329030037030020024198106a410f6a22032005290000370000200220022903c01537039810200241df156a310000210720022900d715210b200241f8136a410f6a22052003290000370000200241f8136a41086a200429030037030020022002290398103703f813200128020022062802042208450d16200235008b14210f2005350000210c200228008314212220022800ff13212120022800fb13210320022f00f913210420022d00f81321052006280200220a2d0000210920062008417f6a3602042006200a41016a3602004100212020090e0707060102030405160b200441ff0171450d15200241003a00e0150c150b410221200c050b410321200c040b410421200c030b410521200c020b410621200c010b410121200b2001280200220128020422064110490d0e200b422888200742188684a7210d200f422086200c842107200b421888a72109200b421088a7210e200ba7210a2001280200220841086a290000210c2008290000210b2001200841106a3602002001200641706a360204410c21080c0c0b200241d0036a200110ad0120022802d0030d0d20012802002205280204220620022802d4032204490d0d2004417f4c0d4d0240024020040d00410121030c010b200410322203450d532001280200220528020421060b20062004490d0c20032005280200200410e9082101200528020422062004490d222005200620046b3602042005200528020020046a3602002001450d0d2004ad22074220862007842207422088a721222007a72121410f2108420021070c0b0b200241d8036a200110ad0120022802d8030d0c20012802002205280204220620022802dc032204490d0c2004417f4c0d4c0240024020040d00410121030c010b200410322203450d522001280200220528020421060b20062004490d0b20032005280200200410e9082101200528020422062004490d182005200620046b3602042005200528020020046a3602002001450d0c2004ad22074220862007842207422088a721222007a7212141102108420021070c0a0b200241e0036a200110ad0120022802e0030d0b20012802002205280204220620022802e4032204490d0b2004417f4c0d4b0240024020040d00410121030c010b200410322203450d512001280200220528020421060b20062004490d0a20032005280200200410e9082101200528020422062004490d162005200620046b3602042005200528020020046a3602002001450d0b2004ad22074220862007842207422088a721222007a7212141112108420021070c090b200241e8036a200110ad0120022802e8030d0a20012802002205280204220620022802ec032204490d0a2004417f4c0d4a0240024020040d00410121030c010b200410322203450d502001280200220528020421060b20062004490d0920032005280200200410e9082101200528020422062004490d142005200620046b3602042005200528020020046a3602002001450d0a2004ad22074220862007842207422088a721222007a7212141122108420021070c080b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241cf156a290000210720022802dc15210d20022f01da15210920022d00d915210e20022f00d715210a20022800c315210320022f00c115210420022d00c015210520022900c715210b200241f0036a200110ad0120022802f0030d0a200b422088a72122200ba7212120022802f403211f2007422088210f411321080c080b200441ff0171450d09200241003a00e0150c090b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2201200241c0156a410f6a290000370000200241e0076a41086a2203200241c0156a41086a290300370300200241d8116a410f6a22042001290000370000200241d8116a41086a2201200329030037030020024198106a41086a2203200129030037030020024198106a410f6a22012004290000370000200220022903c01537039810200241df156a310000210720022900d715210b200241f8136a410f6a22042001290000370000200241f8136a41086a200329030037030020022002290398103703f813200b422888200742188684a7210d200235008b14220f4220862004350000842107200b421888a72109200b421088a7210e20022900ff13220c422088a7212220022800fb13210320022f00f913210420022d00f8132105200ba7210a200ca72121411421080c070b200441ff0171450d08200241003a00e0150c080b2001280200220128020422044104490d0720012802002205280000210320012004417c6a3602042001200541046a36020041152108420021070c050b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2203200241c0156a410f6a290000370000200241e0076a41086a2204200241c0156a41086a290300370300200241d8116a410f6a22052003290000370000200241d8116a41086a2203200429030037030020024198106a41086a2204200329030037030020024198106a410f6a22032005290000370000200220022903c01537039810200241df156a310000210b20022900d7152107200241f8136a410f6a22052003290000370000200241f8136a41086a200429030037030020022002290398103703f8132001280200220128020422064104490d072007422888200b42188684a7210d2005350000210c200235008b14210f20022900ff13210b20022800fb13210320022f00f913210420022d00f81321052007421888a721092007421088a7210e2007a7210a20012802002208280000211f20012006417c6a3602042001200841046a360200200c200f422086842107200b422088a72122200ba72121411621080c050b200441ff0171450d06200241003a00e0150c060b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241d8116a41086a2206200241cf156a29000037030041172108200241d8116a41106a220a200241c0156a41176a290000370300200241d8116a41186a2209200241df156a2d00003a0000200220022900c71522073703e007200220073703d81120022d00c015210520022f00c115210420022800c3152103200241e8096a41186a220d20092d00003a0000200241e8096a41106a200a290300370300200241e8096a41086a220a2006290300370300200220022903d8113703e8092001280200220128020422064104490d0620012802002209280000211f20012006417c6a3602042001200941046a36020020022903f809220b422888200d31000042188684a7210d200a2903002207422088210f200b421888a72109200b421088a7210e20022903e809220c422088a72122200ba7210a200ca721210c040b200441ff0171450d05200241003a00e0150c050b41002104200241003a00e0150240024002400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200128020022062802042208450d0720022900d715210b200241df156a310000210f200241cf156a290000210720022900c715210c20022800c315210320022f00c115210420022d00c01521052006280200220a2d0000210920062008417f6a3602042006200a41016a3602004100211f20090e020201070b200441ff0171450d06200241003a00e0150c060b2001280200220128020422084104490d052001280200220a280000210620012008417c6a3602042001200a41046a3602004101211f0b200b422888200f42188684a7210d2007422088210f200b421888a72109200b421088a7210e200ba7210a200c422088a721222006ad210b200ca721214200210c411821080c020b200241f8036a200110ad0120022802f8030d0320022802fc03210341192108420021070c010b410e2108420021070b2000201e3b012a200020203a0029200020093b00232000200e3a0022200020043b000a200020053a00092000410d360200200041386a200c370200200041306a200b3702002000412c6a201f360200200041256a200d360000200041206a200a3b0100200041146a2022360200200041106a20213602002000410c6a2003360200200041086a20083a0000200041186a200f422086200742ffffffff0f8384370200200041c0006a200241f0176a41f00110e9081a0c4a0b2003102e0b2000411c3602000c480b200241e0076a200110cc06024020022d00e0074107460d00200241d8116a41306a200241e0076a41306a2903002207370300200241d8116a41286a200241e0076a41286a290300220b370300200241d8116a41206a200241e0076a41206a290300220c370300200241d8116a41186a200241e0076a41186a290300220f370300200241c0156a410c6a200241e0076a41086a290300370200200241c0156a41146a200241e0076a41106a290300370200200241c0156a411c6a200f370200200241c0156a41246a200c370200200241c0156a412c6a200b370200200241c0156a41346a2007370200200220022903e0073702c4152000410e360200200020022902c0153702042000410c6a200241c0156a41086a290200370200200041146a200241c0156a41106a2902003702002000411c6a200241c0156a41186a290200370200200041246a200241c0156a41206a2902003702002000412c6a200241c0156a41286a290200370200200041346a200241c0156a41306a2902003702002000413c6a200241f8156a280200360200200041c0006a200241f0176a41f00110e9081a0c480b2000411c3602000c470b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020002400240024002400240024002400240024020060e06000102030405090b200241c0156a200110e40120022802c0152208450d0820022802c415210a200128020022032802042204450d05200241c8156a2802002109200328020022052d0000210620032004417f6a3602042003200541016a360200024002400240024020060e020201000b200241023a00d8140c090b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241d8116a410f6a2203200241c0156a410f6a290000370000200241d8116a41086a2204200241c0156a41086a29030037030020024198106a410f6a2205200329000037000020024198106a41086a22032004290300370300200241a80e6a41086a22042003290300370300200241a80e6a410f6a22032005290000370000200220022903c0153703a80e200241df156a310000210f20022900d7152110200241f8136a410f6a22052003290000370000200241f8136a41086a2004290300370300200220022903a80e3703f8132005290000210b20022900ff13210c20022d00f813210320022f00f9132104200220022800fb1322053602dc14200220043b01da14200220033a00d914200241013a00d814200541187621040c020b0240200441ff0171450d00200241003a00e0150b200241023a00d8140c080b200241003a00d81420022d00df1421040b2001280200220128020422054104490d0620022d00da14210620022f01d814210e20022800db1421032002200c3700e107200241e9076a200b3700002001280200220d350000210720012005417c6a3602042001200d41046a360200200220103700f107200220043a00e007200c423888200b42088684a7210d200e20064110747222044180feff07714108762105200fa741ff01712101200c421888a7210e200b421888a72122200241f8076a310000210b20022802e007210620022903f007210c410121210c3b0b200110cc042203450d0720024180046a200110ad012002280280040d0620022802840421064200210c41022121410021224200210b42002107410021090c3a0b20024190046a200110ad012002280290040d062002280294042103200110cc042206450d0620024188046a200110ad0102402002280288040d00200228028c04210e4200210c41032121410021224200210b42002107410021090c390b2006108b022006102e0c060b41002104200241003a00e0150240024002400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241cf156a290000210720022900c715210f20022802dc15210620022f01da15210a20022d00d915210920022f00d715210d20022800c315210320022f00c115210520022d00c015210420024198046a200110ad012002280298040d0820012802002201280204220e450d08200228029c042108200128020022222d000021212001200e417f6a3602042001202241016a3602004100210120210e020201080b200441ff0171450d07200241003a00e0150c070b410121010b200220063600ed142002200a3b00eb14200220093a00ea142002200d3b01e814200f422088a7210e2007422088a72122200241f0146a310000210b20022903e814210c200fa721062007a7210d410421210c380b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241d8116a41086a2206200241cf156a290000370300200241d8116a41106a2208200241d7156a290000370300200241d8116a41186a220a200241df156a2d00003a0000200220022900c71522073703e007200220073703d81120022d00c015210420022f00c115210520022800c3152103200241e8096a41186a200a2d00003a0000200241e8096a41106a2008290300370300200241e8096a41086a2006290300370300200220022903d8113703e809200241b8046a200110ad0120022802b8040d0520022802bc042108200241a8046a200110da0420022903a804a70d0520022903b0042107200241a0046a200110ad0120022802a0040d0520022802a404210a20022903e809220f422088a7210e200241f0096a2903002210422088a72122200241800a6a310000210b20022903f809210c200fa721062010a7210d410521210c370b200441ff0171450d04200241003a00e0150c040b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b20022900c7152207422088a7210e200241df156a310000210b20022900d715210c20022800d315212220022800cf15210d20022800c315210320022f00c115210520022d00c01521042007a721064106212141002109420021070c360b200441ff0171450d03200241003a00e0150c030b200241023a00d8140b200a41ffffff3f71450d012008102e0c010b2003108b022003102e0b2000411c3602000c460b200128020022032802042204450d2f200328020022052d0000210620032004417f6a3602042003200541016a3602004102210e02400240024002400240024020060e06003401020304350b200241c0156a200110e40120022802c0152203450d3420022902c415210b200241c0046a2001108202024020022903c004a70d0020022903c8042207423888200241d0046a290300220c42088684a7210d200b422088a72104200c423888a7210a200c421888a72109200ba721054101210e0c330b200b42ffffff3f83500d342003102e0c340b200241d8046a200110ad0120022802d8040d3320022802dc04210320023502801420024184146a33010020024186146a31000042108684422086842107200228008b142109200228008714210d20022802fc1321044103210e4200210b0c310b200128020022032802042204450d32200328020022052d0000210620032004417f6a3602042003200541016a3602004104210e4100210a410021094100210d41002103024020060e03320300330b200241e0046a200110ad0120022802e0040d3220022802e4042105410221030c2f0b200241c0156a200110eb0120022d00c0154105460d31200241e0076a41086a200241d4156a290200370300200241f0076a200241dc156a2902003703002002200241cc156a2902003703e007200241c0156a41086a280200210420022802c415210520022802c01521030240200128020022012802042206450d00200128020022082d0000210a20012006417f6a3602042001200841016a3602004100210802400240200a0e020100020b410121080b20022903e0072207423888200241e8076a290300220b42088684a7210d200b423888a7210a200b421888a72109200241f0076a290300210b4105210e0c310b200341ff01714102470d312004450d312005102e0c310b2001280200220428020422054104490d3020042802002206280000210320042005417c6a3602042004200641046a3602002001280200220128020422044104490d3020012802002206280000210520012004417c6a3602042001200641046a3602004106210e0c2d0b4100210a410021094100210d410121030c2d0b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a3602004107210302400240024002400240024020060e0700010203040531060b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2201200241c0156a410f6a290000370000200241e0076a41086a2203200241c0156a41086a290300370300200241d8116a410f6a22042001290000370000200241d8116a41086a2201200329030037030020024198106a41086a2203200129030037030020024198106a410f6a22012004290000370000200220022903c01537039810200241df156a310000210720022900d715210b200241f8136a410f6a22042001290000370000200241f8136a41086a200329030037030020022002290398103703f813200b422888200742188684a7211b200b421888a72120200b421088a721192004280000210e200228008b14210d20022900ff13210720022800fb13210820022f00f913210a20022d00f8132109200ba72122410121030c310b200441ff0171450d05200241003a00e0150c050b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2201200241c0156a410f6a290000370000200241e0076a41086a2203200241c0156a41086a290300370300200241d8116a410f6a22042001290000370000200241d8116a41086a2201200329030037030020024198106a41086a2203200129030037030020024198106a410f6a22012004290000370000200220022903c01537039810200241df156a310000210720022900d715210b200241f8136a410f6a22042001290000370000200241f8136a41086a200329030037030020022002290398103703f81320022800fb13210820022f00f913210a20022d00f8132109200241d8146a41086a22012004290000370300200220022900ff133703d814200241f0146a20073c00002002200b3703e814200b422888200742188684a7211b200b421888a72120200b421088a721192001290300220c422088a7210d20022903d8142107200ba72122200ca7210e410221030c300b200441ff0171450d04200241003a00e0150c040b41002104200241003a00e015024002400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2203200241c0156a410f6a290000370000200241e0076a41086a2204200241c0156a41086a290300370300200241d8116a410f6a22052003290000370000200241d8116a41086a2203200429030037030020024198106a41086a2204200329030037030020024198106a410f6a22032005290000370000200220022903c01537039810200241df156a310000210720022900d715210b200241f8136a410f6a22052003290000370000200241f8136a41086a200429030037030020022002290398103703f81320022800fb13210820022f00f913210a20022d00f8132109200241e8096a41086a2005290000370300200220022900ff133703e809200241800a6a20073c00002002200b3703f80941002104200241003a00e0150340200128020022032802042205450d02200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2201200241c0156a410f6a290000370000200241e0076a41086a2203200241c0156a41086a290300370300200241d8116a410f6a22042001290000370000200241d8116a41086a2201200329030037030020024198106a41086a2203200129030037030020024198106a410f6a22012004290000370000200220022903c01537039810200241df156a310000210720022900d715210f200241f8136a410f6a22042001290000370000200241f8136a41086a200329030037030020022002290398103703f813200f422888200742188684a7211e2004290000210c20022900ff13210b20022800fb13211c20022f00f913211720022d00f813212320022903f8092210422888200241800a6a31000042188684a7211b200f421888a7211f200f421088a7211d2010421888a721202010421088a72119200241e8096a41086a2903002211422088a7210d20022903e8092107200fa721212010a721222011a7210e410321030c300b200441ff0171450d04200241003a00e0150c040b200441ff0171450d03200241003a00e0150c030b200241d8116a200110e40120022802d8112208450d0220022902dc112107200241cc156a290200210c20022902c415210b20022f01e807212220022d00ea07211920022f00eb07212020022d009c10212320022f009d10211720022f01d415212120022d00d615211d20022f00d715211f20022800d915211e20022d00dd15210520022f01de152104410421034100210d4100210e0c2d0b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2201200241c0156a410f6a290000370000200241e0076a41086a2203200241c0156a41086a290300370300200241d8116a410f6a22042001290000370000200241d8116a41086a2201200329030037030020024198106a41086a2203200129030037030020024198106a410f6a22012004290000370000200220022903c01537039810200241df156a310000210720022900d715210b200241f8136a410f6a22042001290000370000200241f8136a41086a200329030037030020022002290398103703f813200b422888200742188684a7211b200b421888a72120200b421088a721192004280000210e200228008b14210d20022900ff13210720022800fb13210820022f00f913210a20022d00f8132109200ba72122410521030c2d0b200441ff0171450d01200241003a00e0150c010b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2201200241c0156a410f6a290000370000200241e0076a41086a2203200241c0156a41086a290300370300200241d8116a410f6a22042001290000370000200241d8116a41086a2201200329030037030020024198106a41086a2203200129030037030020024198106a410f6a22012004290000370000200220022903c01537039810200241df156a310000210720022900d715210b200241f8136a410f6a22042001290000370000200241f8136a41086a200329030037030020022002290398103703f813200b422888200742188684a7211b200b421888a72120200b421088a721192004280000210e200228008b14210d20022900ff13210720022800fb13210820022f00f913210a20022d00f8132109200ba72122410621030c2c0b200441ff0171450d00200241003a00e0150b2000411c3602000c440b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a3602000240024002400240024020060e03000102050b200241e8046a200110820220022903e804a70d04200241f8046a290300210720022903f004210b200241c0156a200110eb0120022d00c0154105460d0420022903c0152211422088a72101200241d0156a290300210c200241c8156a290300210f200241e0156a2802002103200241d8156a29030021102011a72104410121050c030b20024180056a200110ad0120022802800522010d034104410220011b210520022802840521040c010b20024188056a200110ad0120022802880522010d024104410320011b2105200228028c0521040b0b20004112360200200041386a2007370200200041306a200b3702002000411c6a200c370200200041146a200f3702002000412c6a2003360200200041246a2010370200200041106a20013602002000410c6a2004360200200041086a2005360200200041c0006a200241f0176a41f00110e9081a0c440b2000411c3602000c430b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020002400240024002400240024002400240024020060e050001020304090b41002104200241003a00e015024002400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241df156a310000210b20022900c715210c20022800c315210d20022f00c115210920022d00c015210a20023500cf15210f20022800d315210e20022900d715210741002104200241003a0081162007422888200b42188684a72122200f200ead42208684210b2007421888a721212007421088a721202007a7211f0340200128020022032802042205450d02200328020022062d0000210820032005417f6a3602042003200641016a360200200241c0156a20046a20083a00002002200441016a22033a00811620032104200341c100470d000b2002200c3703d814200220223600ed14200220213b00eb14200220203a00ea142002201f3b01e8142002200b3703e014200e4110762101200e4108762120200241ef156a290000211020022900e715210f20022f00ff15211f20022800fb15211e20022800f715211d20022800e315210320022f00e115210420022d00e015210520022802dc15210620022f01da15210820022d00d915210e20022f00d715212220022900cf15210720022800cb15211c20022800c715212120023502c01520023301c41520023100c6154210868442208684420886200241f0146a31000084211120022903e8142115410121230c060b200441ff0171450d09200241003a00e0150c090b200441ff0171450d08200241003a0081160c080b41002104200241003a00d4150240024002400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00d4152003210420034114470d000b200220022802d0153602f007200220022903c8153702e807200220022802c4153602e407200220022802c015220a3602e0072001280200220328020422044110490d0a2003280200220541086a2900002111200529000021152003200541106a3602002003200441706a360204200128020022032802042204450d0a200328020022052d0000210920032004417f6a3602042003200541016a3602004100212120090e0202010a0b200441ff0171450d09200241003a00d4150c090b2001280200220328020422044110490d082003280200220541086a290000210b200529000021072003200541106a3602002003200441706a3602042001280200220328020422044110490d082003280200220541086a290000210f2005290000210c2003200541106a3602002003200441706a36020420012802002203280204220441034d0d0820032802002205280000210620032004417c6a3602042003200541046a3602002002200c3703d0152002200b3703c815200220063602e01520022802d415210320022f01d215210420022d00d115210520022f00cb15210820022800cd15210620022d00ca15210e20022f01c815212220022903e0152110410121210b20012802002209280204220d450d07200928020022202d0000211f2009200d417f6a3602042009202041016a360200410221234102212002400240201f0e020100090b200128020022012802042209450d082001280200220d2d0000211f20012009417f6a3602042001200d41016a360200410021200240201f0e020100090b410121200b200a410876210920023500ef07200241f3076a31000042208684210b20022900e707210c20022800e307210d4100211c0c030b41002104200241003a00e01502400240024002400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241800a6a200241df156a3100003c0000200220022900d7153703f809200220022900cf153703f009200220022900c7153703e80920022800c315210d20022f00c115210920022d00c015210a41002104200241003a0081160340200128020022032802042205450d02200328020022062d0000210820032005417f6a3602042003200641016a360200200241c0156a20046a20083a00002002200441016a22033a00811620032104200341c100470d000b200241ef156a290000211020022900e715210f20022f00ff15211f20022800fb15211e20022800f715211d20022800e315210320022f00e115210420022d00e015210520022802dc15210620022f01da15210820022d00d915210e20022f00d715212220022900cf15210720022800cb15211c20022800c715212120023502c015210b20023301c415210c20023100c615211120024190056a200110ad012002280290050d0a20012802002223280204221b2002280294052220490d0a2020417f4c0d4420200d02410121170c030b200441ff0171450d09200241003a00e0150c090b200441ff0171450d08200241003a0081160c080b202010322217450d4620012802002223280204211b0b201b2020490d0420172023280200202010e90821012023280204221b2020490d142023201b20206b3602042023202328020020206a3602002001450d06200b200c20114210868442208684420886200241800a6a3100008421112020ad220b422086200b842214422088a72118200241f0096a290300220b423088a72101200b422888a7212020022903f809211520022903e809210c2014a72119410321230c020b20024198056a200110ad012002280298050d05200128020022042802042205200228029c052203490d052003417f4c0d3f0240024020030d004101210d0c010b20031032220d450d452001280200220428020421050b20052003490d04200d2004280200200310e9082101200428020422052003490d122004200520036b3602042004200428020020036a3602002001450d052003ad2207422086200784210c410421230c010b41002104200241003a00d41502400240024002400240024002400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00d4152003210420034114470d000b20022802d015210d20022903c815210720022802c015210a20022802c415210841002104200241003a00d4152008411876210e200a411876211f200a41087621090340200128020022032802042205450d02200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00d4152003210420034114470d000b200128020022032802042204450d0220022802c415212220022802c015212020022802d015212120022903c815210b200328020022052d0000210620032004417f6a3602042003200541016a36020020060e020405030b200441ff0171450d0a200241003a00d4150c0a0b200441ff0171450d09200241003a00d4150c090b200241023a00e8090c080b200241023a00e8090c070b200241003a00e8090c010b41002104200241003a00e0150340200128020022032802042205450d03200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241d8116a410f6a2201200241c0156a410f6a290000370000200241d8116a41086a2203200241c0156a41086a290300370300200241a80e6a410f6a22042001290000370000200241a80e6a41086a22012003290300370300200241d8146a41086a22032001290300370300200241d8146a410f6a22012004290000370000200220022903c0153703d814200241df156a310000210f20022900d7152114200241f8136a410f6a22042001290000370000200241f8136a41086a2003290300370300200220022903d8143703f8132004290000211020022900ff13210c20022d00f813210120022f00f9132103200220022800fb133602ec09200220033b01ea09200220013a00e909200241013a00e8090b202041087621012002200c3700e107200241e9076a2010370000200241dc0a6a2021410874ad200b423888843e0200200220022d00ef093a00e0072002200b4208862022411876ad843702d40a200220224108742020411876723602d00a2014423888200f42ff018342088684210f202141187620022f01e80920022d00ea0941107472410874722121200dad42088620074238888442ffffffffff1f83210b200c423888201042088684a721222007420886200ead84210c2008410874201f72210d2014421888a721032014420888a721042010422088a721062010421088a721082010420888a7210e20022800eb09211c200241d00a6a41086a2903002111200228029810211d200228029c10211e20022f01a010211f20022f01a210211b20022802a410211720022802a810211920022802ac10211820022903e007210720022903d00a21152014a7210542002110410521230b200020053a00492000200e3a0042200020013b011e200020203a001d200020093b000a2000200a3a0009200041133602002000411c6a200b4220883c0000200041186a200b3e0000200041d8006a2010370200200041d0006a200f370200200041286a2011370200200041206a2015370200200041f4006a2018360200200041f0006a2019360200200041ec006a2017360200200041ea006a201b3b0100200041e8006a201f3b0100200041e4006a201e360200200041e0006a201d360200200041cc006a2003360200200041ca006a20043b0100200041c5006a2006360000200041c3006a20083b0000200041c0006a20223b0100200041386a2007370200200041346a201c360200200041306a2021360200200041106a200c3700002000410c6a200d360000200041086a20233a0000200041f8006a200241f0176a41b80110e9081a0c460b0240200441ff0171450d00200241003a00e0150b200241023a00e8090c020b2017102e0c010b200d102e0b2000411c3602000c420b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602044101210a2003200541016a360200024002400240024002400240024020060e0403000102070b200241c0156a200110eb0120022d00c0154105460d0620022903c015220b422088a72103200241d0156a290300210f200241c8156a2903002107200241e0156a2802002105200241d8156a290300210c200ba721044102210a0c020b200241c0156a200110eb0120022d00c01522044105460d05200241d8116a41086a200241d4156a290200370300200241d8116a41106a200241dc156a2802003602002002200241cc156a2902003703d811200241c0156a41086a280200210a20022802c415210302402001280200220628020422084110490d0020022d00c315210d20022f00c115210e200241e0156a28020021052006280200220941086a290000210b200929000021102006200941106a3602002006200841706a3602042001280200220628020422084110490d002006280200220941086a2900002111200929000021152006200941106a3602002006200841706a3602042001280200220128020422064104490d0020012802002209280000210820012006417c6a3602042001200941046a360200200241ec076a200241d8116a41086a290300370200200241f4076a200241d8116a41106a2802003602002002200a3602e007200220022903d8113702e407200e200d411074724108742004722104200241e0076a41086a290300210f20022903e007210720022903f007210c420021124103210a420021250c020b20044102470d05200a0d040c050b200241c0156a200110eb0120022d00c0154105460d04200241c0156a41106a2208290300210f200241e0156a220a2802002105200241d8156a2209290300210c200241c8156a2206290300210720022802c415210320022802c0152104200241c0156a200110eb0120022d00c0154105460d022006290300210b20022802c415210e20022802c015210d2001280200220628020422224110490d0120082903002115200a2802002108200929030021112006280200220a41086a2900002114200a29000021102006200a41106a3602002006202241706a36020420012802002206280204220a4110490d012006280200220941086a2900002113200929000021282006200941106a3602002006200a41706a3602044104210a2001280200220128020422064104490d0120012802002209280000212220012006417c6a3602042001200941046a360200200220223602d0152014422086201042208884212520104220862112200ead422086200dad842110200220283703c01520022802c415210d20022903d01521262028a721090b20004114360200200041f8006a2026370200200041f0006a2013370200200041dc006a20253e0200200041d4006a2012370200200041c0006a2015370200200041386a200b3702002000411c6a200f370200200041146a2007370200200041ec006a200d360200200041e8006a2009360200200041e0006a2014370200200041d0006a2008360200200041c8006a2011370200200041306a20103702002000412c6a2005360200200041246a200c370200200041086a200a3602002000410c6a2003ad4220862004ad8437020020004180016a200241f0176a41b00110e9081a0c450b200d41ff01714102470d00200ba7450d00200e102e0b200441ff01714102470d012007a7450d010b2003102e0b2000411c3602000c410b200241c0156a200110cd06024020022f01c0154104460d00200241e0076a41086a200241c0156a41086a2903002207370300200220022903c015220b3703e007200041153602002000200b3702042000410c6a2007370200200041146a200241f0176a419c0210e9081a0c410b2000411c3602000c400b200128020022032802042204450d24200328020022052d0000210620032004417f6a3602042003200541016a3602004104210a0240024020060e0f00012425232221201f1e1d1c1b1a19260b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241900d6a41086a200241e8096a41086a2800003602002002418c0d6a41026a20024198136a41026a2d00003a0000200241c80d6a41106a200241e0076a41106a290000370300200241c80d6a41086a200241e0076a41086a290000370300200220022900e8093703900d200220022f0098133b018c0d200220022900e0073703c80d200241df156a310000210c20022900d715210b20022900c715210720022800c315210820022f00c115212a20022d00c015212c20023500cf15210f20023500d3152110200241880d6a41026a200241e80f6a41026a2d00003a0000200220022f00e80f3b01880d200241a00d6a41106a200241d8116a41106a290000370300200241a00d6a41086a200241d8116a41086a290000370300200220022900d8113703a00d200241840d6a41026a200241f80d6a41026a2d00003a0000200220022f00f80d3b01840d200241e80c6a41106a20024198106a41106a290000370300200241e80c6a41086a20024198106a41086a29000037030020022002290098103703e80c200241e40c6a41026a200241f8136a41026a2d00003a0000200220022f00f8133b01e40c200241c80c6a41106a200241a80e6a41106a290000370300200241c80c6a41086a200241a80e6a41086a290000370300200220022900a80e3703c80c200241d8146a41206a200241f0176a41206a280000360200200241d8146a41186a200241f0176a41186a290000370300200241d8146a41106a200241f0176a41106a290000370300200241d8146a41086a200241f0176a41086a290000370300200220022900f0173703d814201042208622104280808080806083200f20104280808080f01f838484210f4101210a0c250b200441ff0171450d25200241003a00e0150c250b200241a0056a200110ad0120022802a0050d2420022802a4052205200128020028020441c8006e2203200320054b1bad42c8007e2207422088a70d362007a72203417f4c0d360240024020030d00410421080c010b2003102c2208450d3c0b2001200128020441016a2204360204200341c8006ead210702400240024002400240024002400240024002400240200420012802084b0d00024002402005450d00200241c0156a410c6a211f200241c0156a410172211c0340200241c0156a200110ed0302400240024020022d00c01522044106460d00200241f8136a41026a220a201c41026a2d00003a0000200241e8096a41086a2209201f41086a290200370300200241e8096a41106a220d201f41106a2902003703002002201c2f00003b01f8132002201f2902003703e80920022802c415210620022802c8152103200241f0176a200110ed0320022d00f0174106470d0120044101470d002003450d002006102e0b410621040c010b200241b4146a41026a200a2d00003a000020024198136a41086a200929030037030020024198136a41106a200d290300370300200241e0076a41086a200241f0176a41086a290300370300200241e0076a41106a200241f0176a41106a290300370300200241e0076a41186a200241f0176a41186a290300370300200241e0076a41206a200241f0176a41206a280200360200200220022f01f8133b01b414200220022903e80937039813200220022903f0173703e0072003211e2006211d0b200241b0146a41026a2203200241b4146a41026a2d00003a0000200241e80f6a41086a220620024198136a41086a290300370300200241e80f6a41106a220a20024198136a41106a290300370300200241d8116a41086a2209200241e0076a41086a290300370300200241d8116a41106a220d200241e0076a41106a290300370300200241d8116a41186a220e200241e0076a41186a290300370300200241d8116a41206a2222200241e0076a41206a280200360200200220022f01b4143b01b01420022002290398133703e80f200220022903e0073703d81120044106460d03200241ac146a41026a222120032d00003a0000200241f80d6a41086a22202006290300370300200241f80d6a41106a2206200a29030037030020024198106a41086a220a200929030037030020024198106a41106a2209200d29030037030020024198106a41186a220d200e29030037030020024198106a41206a220e2022280200360200200220022f01b0143b01ac14200220022903e80f3703f80d200220022903d8113703981002402007422088220ba722032007a7470d00200341016a22222003490d4520034101742217202220222017491b22224104202241044b1bad42c8007e220b422088a7454102742122200ba721170240024020030d00200241003602f0170c010b200241043602f817200220083602f0172002200341c8006c3602f4170b200241c0156a20172022200241f0176a107d20022802c815212220022802c0154101460d0320022802c41521082007422088220ba72103202241c8006ead21070b2008200341c8006c6a220320043a0000200341086a201e360000200341046a201d360000200341036a20212d00003a0000200320022f01ac143b00012003410c6a20022903f80d370000200341146a20202903003700002003411c6a2006290300370000200341346a20092903003700002003412c6a200a2903003700002003413c6a200d290300370000200341246a200229039810370000200341c4006a200e280200360000200b422086200742ffffffff0f83844280808080107c21072005417f6a22050d000b200128020421040b20012004417f6a3602042008450d30200241f0176a200110ed0320022d00f0174106460d0a20024180186a310000210c20024190186a220a350200210f20024188186a2209290300211420024184186a220d280200210320024182186a2f0100210420024181186a2d00002105200241f0176a41086a220e290300210b20022802f417212a20022802f0172106200241f0176a200110ed0320022d00f0174106460d09200241e8096a41086a200a280200360200200220092903003703e809200d280200210d200241fc176a220a2902002110200e280200212d20022802f417212e20022802f017212c200241f0176a200110ed0320022d00f01722094106460d08200241f8136a41026a20022d00f3173a000020024198106a41086a20024184186a222029020037030020024198106a41106a2002418c186a221f290200370300200220022f00f1173b01f8132002200a29020037039810200241f0176a41086a220a280200210e20022802f4172122200241f0176a200110ed0320022d00f01722214106460d07200241f80d6a41026a20022d00f3173a0000200241d8116a41086a2020290200370300200241d8116a41106a201f290200370300200220022f00f1173b01f80d2002200241fc176a221d2902003703d811200a280200212020022802f417211f200241f0176a200110ed0320022d00f017221e4106460d06200241ea0f6a20022d00f3173a0000200241e0076a41086a20024184186a290200370300200241f0076a2002418c186a290200370300200220022f00f1173b01e80f2002201d2902003703e007200241f0176a41086a280200211d20022802f417211c2001280200220a2802042217450d05200a28020022232d00002118200a2017417f6a360204200a202341016a3602004100212f420021114100212320180e020302050b20220d460c410b02402007422088a72201450d002008200141c8006c6a2103200821010340024020012d00004101470d00200141086a280200450d00200141046a280200102e0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102e0b200141c8006a22012003470d000b0b2007a72201450d2e200141c8006c450d2e2008102e0c2e0b41002117200241003a00841803402001280200220a2802042223450d02200241f0176a20176a200a280200221b2d00003a0000200a2023417f6a360204200a201b41016a3602002002201741016a220a3a008418200a2117200a4114470d000b20022802f417220a41087420022802f0172217411876722119200a41187621302017410876211b200228028018212f20022903f8172111410121230b200241f0176a200110ed0320022d00f01722184106460d014102210a20024198136a41026a222420022d00f3173a0000200241c0156a41086a222720024184186a290200370300200241c0156a41106a22312002418c186a290200370300200220022f00f1173b0198132002200241fc176a2902003703c015200241f0176a41086a2232280200211a20022802f4172116200241f0176a200110ed0320022d00f0174106470d0720184101470d01201a450d012016102e0c010b201741ff0171450d00200241003a0084180b201e4101470d00201d450d00201c102e0b20214101470d002020450d00201f102e0b20094101470d00200e450d002022102e0b202c41ff01714101470d00202d450d00202e102e0b200641ff01714101470d00200ba7450d00202a102e0b02402007422088a72201450d002008200141c8006c6a2103200821010340024020012d00004101470d00200141086a280200450d00200141046a280200102e0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102e0b200141c8006a22012003470d000b0b2007a72201450d25200141c8006c450d252008102e0c250b200241a80e6a41206a2201200241f0176a41206a280200360200200241a80e6a41186a2233200241f0176a41186a290300370300200241a80e6a41106a2234200241f0176a41106a290300370300200241a80e6a41086a22352032290300370300200241900d6a41086a200241e8096a41086a2802003602002002418c0d6a41026a200241f8136a41026a2d00003a0000200220022903f0173703a80e200220022903e8093703900d200220022f01f8133b018c0d200241c80d6a41106a20024198106a41106a290300370300200241c80d6a41086a20024198106a41086a29030037030020022002290398103703c80d200241880d6a41026a200241f80d6a41026a2d00003a0000200220022f01f80d3b01880d200241a00d6a41106a200241d8116a41106a290300370300200241a00d6a41086a200241d8116a41086a290300370300200220022903d8113703a00d200241840d6a41026a200241e80f6a41026a2d00003a0000200220022f01e80f3b01840d200241e80c6a41106a200241e0076a41106a290300370300200241e80c6a41086a200241e0076a41086a290300370300200220022903e0073703e80c200241e40c6a41026a20242d00003a0000200220022f0198133b01e40c200241c80c6a41106a2031290300370300200241c80c6a41086a2027290300370300200220022903c0153703c80c200241d8146a41206a2001280200360200200241d8146a41186a2033290300370300200241d8146a41106a2034290300370300200241d8146a41086a2035290300370300200220022903a80e3703d81420114208862030ad42ff0183842113202fad42088620114238888442ffffffffff1f832112202dad422086202ead842111202cad422086200f842115202aad4220862006ad84210f0c230b2004200641b8b2c0001056000b2004200641b8b2c0001056000b2004200641b8b2c0001056000b2004200841b8b2c0001056000b2004200641b8b2c0001056000b2003200641b8b2c0001056000b2003200841b8b2c0001056000b2003200641b8b2c0001056000b2003200641b8b2c0001056000b2003200541b8b2c0001056000b2020201b41b8b2c0001056000b2004200641b8b2c0001056000b2003200d41b8b2c0001056000b2006203241b8b2c0001056000b2004200841b8b2c0001056000b2003200a41b8b2c0001056000b2003200641b8b2c0001056000b2000411c3602000c2d0b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020020060d00200241d8116a200110950620022802d811450d0020024198106a200241d8116a41c00110e9081a200241003a00881202402001280200220328020422044110490d002003280200220541086a29000021072005290000210b2003200541106a3602002003200441706a360204200241013a0088122002200b3703d811200220073703e0110240200128020022032802042204410f4d0d002003280200220541086a29000021072005290000210b2003200541106a3602002003200441706a360204200241d8116a41186a22042007370300200241023a0088122002200b3703e8112001280200220328020422054110490d002003280200220641086a29000021072006290000210b2003200641106a360200200241d8116a41286a20073703002003200541706a360204200241033a0088122002200b3703f811200241d00a6a41086a200241d8116a41086a290300220c370300200241d00a6a41106a200241d8116a41106a290300220f370300200241d00a6a41186a20042903002210370300200241d00a6a41206a200b370300200241d00a6a41286a2007370300200220022903d81122113703d00a200241e8096a41286a22032007370300200241e8096a41206a2204200b370300200241e8096a41186a22052010370300200241e8096a41106a2206200f370300200241e8096a41086a2208200c370300200220113703e80920024198136a41286a220a200329030037030020024198136a41206a2209200429030037030020024198136a41186a200529030037030020024198136a41106a200629030037030020024198136a41086a22042008290300370300200220022903e809370398132001280200220328020422054104490d0120032802002206280000210820032005417c6a3602042003200641046a3602002002280298102103200241a80e6a20024198106a41047241bc0110e9081a200241e80f6a41286a200a290300370300200241e80f6a41206a2009290300370300200241e80f6a41186a220520024198136a41186a290300370300200241e80f6a41106a220620024198136a41106a290300370300200241e80f6a41086a200429030037030020022002290398133703e80f2003450d02200241f0176a41286a200241e80f6a41286a290300370300200241f0176a41206a200241e80f6a41206a290300370300200241f0176a41186a2005290300370300200241f0176a41106a2006290300370300200241f0176a41086a200241e80f6a41086a290300370300200220022903e80f3703f017200220033602a018200241a4186a200241a80e6a41bc0110e9082104200220083602e019200241d8076a200110ad010240024020022802d8070d0020022802dc072105200241d0076a200110ad0120022802d007450d010b200241a0186a109b060c030b20022802d4072101200241f80d6a41286a2206200241f0176a41286a290300370300200241f80d6a41206a2208200241f0176a41206a290300370300200241f80d6a41186a220a200241f0176a41186a290300370300200241f80d6a41106a2209200241f0176a41106a290300370300200241f80d6a41086a220d200241f0176a41086a290300370300200220022903f0173703f80d200241c0156a200441c40110e9081a200241c80d6a41086a2204200d290300370300200241c80d6a41106a220d2009290300370300200241c80d6a41186a2209200a290300370300200241c80d6a41206a220a2008290300370300200241c80d6a41286a22082006290300370300200220022903f80d3703c80d200241e0076a200241c0156a41c40110e9081a200241d8146a412c6a2008290300370200200241d8146a41246a200a290300370200200241d8146a411c6a2009290300370200200241d8146a41146a200d290300370200200241d8146a410c6a2004290300370200200220022903c80d3702dc142000411b360200200020022902d8143702042000410c6a200241d8146a41086a290200370200200041146a200241d8146a41106a2902003702002000411c6a200241d8146a41186a290200370200200041246a200241d8146a41206a2902003702002000412c6a200241d8146a41286a290200370200200041346a20024188156a280200360200200041386a20033602002000413c6a200241e0076a41c40110e9081a20004184026a200136020020004180026a200536020020004188026a20022903a00d37030020004190026a200241a00d6a41086a29030037030020004198026a200241a00d6a41106a290300370300200041a0026a200241a00d6a41186a290300370300200041a8026a200241a00d6a41206a2903003703000c2f0b200241003a0088120b20024198106a109b060b2000411c3602000c2c0b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020002400240024002400240024002400240024002400240024020060e060001020304050c0b20024190076a200110ad012002280290070d0b2001280200220528020422062002280294072204490d0b2004417f4c0d2e0240024020040d00410121030c010b200410322203450d342001280200220528020421060b20062004490d0a20032005280200200410e9082106200528020422082004490d082005200820046b3602042005200528020020046a3602002006450d0b41002105200241003a00e0152004ad22074220862007842207422088a7210d2007a7210902400340200128020022042802042206450d01200241c0156a20056a200428020022082d00003a000020042006417f6a3602042004200841016a3602002002200541016a22043a00e0152004210520044120470d000b200241e0076a410f6a2201200241c0156a410f6a290000370000200241e0076a41086a2204200241c0156a41086a290300370300200241d8116a410f6a22052001290000370000200241d8116a41086a22012004290300370300200241d8146a41086a22042001290300370300200241d8146a410f6a22012005290000370000200220022903c0153703d814200241df156a310000210c20022900d715210b200241f8136a410f6a22052001290000370000200241f8136a41086a2004290300370300200220022903d8143703f81320052800002108200228008b14210a20022900ff13210720022800fb13210420022f00f913210520022d00f8132106200242003703a0102002200d36029c102002200936029810200b422888200c42188684a72109200b421888a7210d200b421088a7210e200ba72122410121210c070b0240200541ff0171450d00200241003a00e0150b2009450d0b0c0a0b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b20024198106a41086a200241e0076a41086a29000037030020024198106a41106a200241e0076a41106a290000370300200220022900e00737039810200241cf156a290000220b422088a7210a20022900c715210720022802dc15210920022f01da15210d20022d00d915210e20022f00d715212220022800c315210420022f00c115210520022d00c0152106200ba72108410221210c050b200441ff0171450d0a200241003a00e0150c0a0b200241b0076a200110ad0120022802b0070d0920012802002205280204220620022802b4072204490d092004417f4c0d2c0240024020040d00410121030c010b200410322203450d322001280200220528020421060b20062004490d0820032005280200200410e9082106200528020422082004490d072005200820046b3602042005200528020020046a3602002006450d092004ad2207422086200784210b41002105200241003a00e015024002400340200128020022042802042206450d01200241c0156a20056a200428020022082d00003a000020042006417f6a3602042004200841016a3602002002200541016a22043a00e0152004210520044120470d000b200241e0076a410f6a2204200241c0156a410f6a290000370000200241e0076a41086a2205200241c0156a41086a290300370300200241d8116a410f6a22062004290000370000200241d8116a41086a22042005290300370300200241d00a6a41086a22052004290300370300200241d00a6a410f6a22042006290000370000200220022903c0153703d00a200241df156a310000210f20022900d715210c200241f8136a410f6a22062004290000370000200241f8136a41086a2005290300370300200220022903d00a3703f81320062800002108200228008b14210a20022900ff13210720022800fb13210420022f00f913210520022d00f813210620024198076a2001108202200229039807a70d01200c422888200f42188684a72109200c421888a7210d200c421088a7210e200ca7212220022903a007210c20024198106a41106a20024198076a41106a2903003703002002200b370398102002200c3703a010410321210c060b200541ff0171450d00200241003a00e0150b200ba70d080c090b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241d8116a41086a2203200241cf156a290000370300200241d8116a41106a2208200241d7156a290000370300200241d8116a41186a220a200241df156a2d00003a0000200220022900c71522073703e007200220073703d81120022d00c015210620022f00c115210520022800c3152104200241e8096a41186a2209200a2d00003a0000200241e8096a41106a2008290300370300200241e8096a41086a22082003290300370300200220022903d8113703e809200241b8076a200110820220022903b807a70d09200241b8076a41106a2903002107200220022903c00737039810200220073703a01020022903f809220b422888200931000042188684a72109200b421888a7210d200b421088a7210e2008290300220c422088a7210a20022903e8092107200ba72122200ca72108410421210c030b200441ff0171450d08200241003a00e0150c080b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b20024198106a41086a200241e0076a41086a29000037030020024198106a41106a200241e0076a41106a290000370300200220022900e0073703981020022900d715220b422888200241df156a31000042188684a72109200b421888a7210d200b421088a7210e20022800d315210a20022800cf15210820022900c715210720022800c315210420022f00c115210520022d00c0152106200ba72122410521210c020b200441ff0171450d07200241003a00e0150c070b41002104200241003a00e0150340200128020022032802042205450d03200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b20024198106a41086a200241e0076a41086a29000037030020024198106a41106a200241e0076a41106a290000370300200220022900e0073703981020022900d715220b422888200241df156a31000042188684a72109200b421888a7210d200b421088a7210e200241cf156a290000220c422088a7210a20022900c715210720022800c315210420022f00c115210520022d00c0152106200ba72122200ca72108410621210b0b200241a80e6a41106a220120024198106a41106a290300370300200241a80e6a41086a20024198106a41086a290300220b3703002002200229039810220c3703a80e200041186a200aad4220862008ad84370000200041106a20073700002000412c6a2003360000200020093600252000200d3b00232000200e3a0022200041206a20223b00002000410c6a2004360000200020053b000a200020063a0009200041086a20213a00002000411a360200200041306a200c370200200041386a200b370200200041c0006a2001290300370200200041c8006a200241f0176a41e80110e9081a0c300b200441ff0171450d03200241003a00e0150c030b2004200841b8b2c0001056000b2004200841b8b2c0001056000b2003102e0b2000411c3602000c2b0b02400240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a360200024002400240024002400240024002400240024002400240024020060e090001020304050608070d0b20024198066a2001108202200229039806a70d0c200241a8066a290300210b20022903a006210720024190066a200110ad012002280290060d0c2001280200220528020422062002280294062204490d0c2004417f4c0d2f0240024020040d00410121030c010b200410322203450d352001280200220528020421060b20062004490d0b20032005280200200410e9082101200528020422062004490d0d2005200620046b3602042005200528020020046a3602002001450d0c2004ad220c422086200c84220c422088210f200ca72104410121010c090b200241b0066a200110ad0120022802b00622010d0b410a410220011b21014200210f20022802b40621030c070b200241d0066a200110ad0120022802d0060d0a20022802d4062103200241c0156a200110eb0120022d00c0154105460d0a200241c0156a41106a290300210b200241c8156a2903002107200241e0156a2802002105200241d8156a290300210c20022802c415210620022802c0152104200241b8066a2001108202024020022903b806a70d00200241b8066a41106a290300211120022903c00621102006ad210f410321010c090b200441ff01714102470d0a2007a7450d0a2006102e0c0a0b200241d8066a200110ad0120022802d80622010d09410a410420011b21014200210f20022802dc0621030c050b200241e0066a200110ad0120022802e00622010d08410a410520011b21014200210f20022802e40621030c040b200241e8066a200110ad0120022802e8060d0720022802ec062103200241c0156a200110eb0120022d00c0154105460d0720022903c0152210422088210f200241d0156a290300210b200241c8156a2903002107200241e0156a2802002105200241d8156a290300210c2010a721044200211041062101420021110c050b200241f0066a200110ad0120022802f00622010d06410a410720011b21014200210f20022802f40621030c020b20024188076a200110ad012002280288070d05200228028c07210320024180076a200110ad012002280280070d052001280200220628020422082002280284072205490d052005417f4c0d280240024020050d00410121040c010b200510322204450d2e2001280200220628020421080b0240024020082005490d0020042006280200200510e90821012006280204220820054f0d012005200841b8b2c0001056000b2004102e0c060b2006200820056b3602042006200628020020056a3602002001450d052005ad2207422086200784220f42208821074200210b410921010c020b200241f8066a200110ad0120022802f80622010d04410a410820011b21014200210f20022802fc0621030b0b0b20004119360200200041c0006a2011370200200041386a2010370200200041206a200b370200200041186a2007370200200041306a2005360200200041286a200c3702002000410c6a2003360200200041086a2001360200200041106a200f4220862004ad84370200200041c8006a200241f0176a41e80110e9081a0c2d0b2003102e0b2000411c3602000c2b0b2004200641b8b2c0001056000b024002400240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a3602000240024002400240024002400240024020060e0400010203080b200241d8116a200110e40120022802d8112203450d0720022902dc11210b0240200110cc042204450d0020022902d815220c42808080807083210f20022902d0152207428080808070832110200241ec076a310000211120022902e407211520022802cc15210e20022802c8152109200228009b10210820022f009910210a2007a7210d410121010c0a0b200b42ffffff3f8350450d060c070b2001280200220328020422044102490d06200328020022062f0000210520032004417e6a3602042003200641026a360200200241c0156a200110e40120022802c0152203450d0620022902c415210b200241c0156a200110fd0520022802c01522044102460d04200241c8156a280200210a20022802c415210620024188066a200110ad012002280288060d0420012802002209280204220d200228028c062208490d042008417f4c0d290240024020080d004101210e0c010b20081032220e450d2f20012802002209280204210d0b200d2008490d03200e2009280200200810e908210d200928020422222008490d072009202220086b3602042009200928020020086a360200200d450d042008ad2207422086200784210c200128020022082802042209450d02200828020022222d0000212120082009417f6a3602042008202241016a360200410021220240024020210e020100040b410121220b2001280200220128020422094108490d02200c422088a721082001280200220e29000021072001200941786a3602042001200e41086a360200200c422086200dad84220f4220882111200f422086200aad842115200c421088a7210a200c420888a72121410221014100210d4200210c4200210f420021100c080b2001280200220328020422044102490d05200328020022052f0000210a20032004417e6a3602042003200541026a360200200241c0156a200110e40120022802c0152208450d0520022902c4152107200241c0156a200110fd05024020022802c0154102460d00200241c8156a280200210d20022903c015211041002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b2001280200220128020422094108490d01200241df156a310000211120022900d715211520022900c715210b20022800c315210320022f00c115210520022d00c0152122200241cf156a290000220c422088a72106200ca721042001280200220e290000210c2001200941786a3602042001200e41086a360200200c42808080807083210f2010422088a7210e2010a7210941032101420021100c090b200441ff0171450d00200241003a00e0150b200742ffffff3f83500d052008102e0c050b2001280200220328020422044102490d04200328020022052f0000210a20032004417e6a3602042003200541026a360200200241c0156a200110e40120022802c0152208450d0420022902c415210702402001280200220328020422044104490d0020032802002205280000210920032004417c6a3602042003200541046a3602002001280200220328020422044104490d0020032802002205280000210e20032004417c6a3602042003200541046a36020041002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2201200241c0156a410f6a290000370000200241e0076a41086a2203200241c0156a41086a290300370300200241d8116a410f6a22042001290000370000200241d8116a41086a2201200329030037030020024198106a41086a2203200129030037030020024198106a410f6a22012004290000370000200220022903c01537039810200241df156a310000211120022900d7152115200241f8136a410f6a22042001290000370000200241f8136a41086a200329030037030020022002290398103703f81320042800002104200228008b14210620022900ff13210b20022800fb13210320022f00f913210520022d00f8132122410421014100210d4200210c4200210f420021100c080b200441ff0171450d00200241003a00e0150b200742ffffff3f83500d042008102e0c040b200ca7450d010b200e102e0b200b42ffffff3f83500d010b2003102e0b2000411c3602000c2b0b2008202241b8b2c0001056000b200020213a0029200020223a000920004118360200200041286a20113c0000200041206a20153702002000413c6a200e360200200041386a2009360200200041306a20073702002000412c6a20083602002000412a6a200a3b01002000411c6a2006360200200041186a2004360200200041106a200b3702002000410c6a20033602002000410a6a20053b0100200041086a20013a0000200041c8006a200f200c42ffffffff0f8384370200200041c0006a2010200dad84370200200041d0006a200241f0176a41e00110e9081a0c290b200241c0156a200110bc03024020022d00c015410b460d00200241e0076a200241c0156a41c80010e9081a20004117360200200041046a200241e0076a41c80010e9081a200041cc006a200241f0176a41e40110e9081a0c290b2000411c3602000c280b410f210a0c0b0b200241f0176a200110eb0120022d00f0174105460d0b200241900d6a41086a200241e8096a41086a2802003602002002418c0d6a41026a20024198136a41026a2d00003a0000200241c80d6a41086a200241e0076a41086a290200370300200241c80d6a41106a200241e0076a41106a290200370300200220022902e8093703900d200220022f0098133b018c0d200220022902e0073703c80d2002418c186a310000210c20024184186a290200210b200241fc176a290200210f200241f0176a41206a28020021032002418e186a2f010021042002418d186a2d0000210520022902f417210720022802f0172108200241880d6a41026a200241e80f6a41026a2d00003a0000200220022f00e80f3b01880d200241a00d6a41106a200241d8116a41106a290200370300200241a00d6a41086a200241d8116a41086a290200370300200220022902d8113703a00d200241840d6a41026a200241f80d6a41026a2d00003a0000200220022f00f80d3b01840d200241e80c6a41106a20024198106a41106a290200370300200241e80c6a41086a20024198106a41086a29020037030020022002290298103703e80c200241e40c6a41026a200241f8136a41026a2d00003a0000200220022f00f8133b01e40c200241c80c6a41106a200241a80e6a41106a290200370300200241c80c6a41086a200241a80e6a41086a290200370300200220022902a80e3703c80c200241d8146a41206a200241c0156a41206a280200360200200241d8146a41186a200241c0156a41186a290200370300200241d8146a41106a200241c0156a41106a290200370300200241d8146a41086a200241c0156a41086a290200370300200220022902c0153703d814410e210a0c0a0b200241f0176a200110eb0120022d00f0174105460d0a2002418c186a310000210c20024184186a290200210b200241f0176a41206a220928020021032002418e186a2f010021042002418d186a2d00002105200241fc176a290200210f200241f0176a41086a220e280200210620022802f417210a20022802f0172108200241f0176a200110ed03024020022d00f0174106460d00200241900d6a41086a200241e8096a41086a2802003602002002418c0d6a41026a20024198136a41026a2d00003a0000200241c80d6a41086a200241e0076a41086a290200370300200241c80d6a41106a200241e0076a41106a290200370300200220022902e8093703900d200220022f0098133b018c0d200220022902e0073703c80d200241f0176a41186a2903002110200241f0176a41106a29030021112009280200210d200e290300211520022903f0172114200241880d6a41026a200241e80f6a41026a2d00003a0000200220022f00e80f3b01880d200241a00d6a41106a200241d8116a41106a290200370300200241a00d6a41086a200241d8116a41086a290200370300200220022902d8113703a00d200241840d6a41026a200241f80d6a41026a2d00003a0000200220022f00f80d3b01840d200241e80c6a41106a20024198106a41106a290200370300200241e80c6a41086a20024198106a41086a29020037030020022002290298103703e80c200241e40c6a41026a200241f8136a41026a2d00003a0000200220022f00f8133b01e40c200241c80c6a41106a200241a80e6a41106a290200370300200241c80c6a41086a200241a80e6a41086a290200370300200220022902a80e3703c80c200241d8146a41206a200241c0156a41206a280200360200200241d8146a41186a200241c0156a41186a290200370300200241d8146a41106a200241c0156a41106a290200370300200241d8146a41086a200241c0156a41086a290200370300200220022902c0153703d8142006ad422086200aad842107410d210a0c0a0b200841ff01714102470d0a2006450d0a200a102e0c0a0b200241f0176a200110eb0120022d00f0174105460d092002418c186a310000210c20024184186a290200210b200241f0176a41206a220d28020021032002418e186a2f010021042002418d186a2d00002105410c210a200241f0176a410c6a290200210f200241f0176a41086a220e280200210620022802f417210920022802f0172108200241f0176a200110ed03024020022d00f0174106460d00200241900d6a41086a200241e8096a41086a2802003602002002418c0d6a41026a20024198136a41026a2d00003a0000200241c80d6a41086a200241e0076a41086a290200370300200241c80d6a41106a200241e0076a41106a290200370300200220022902e8093703900d200220022f0098133b018c0d200220022902e0073703c80d200241f0176a41186a2903002110200241f0176a41106a2903002111200d280200210d200e290300211520022903f0172114200241880d6a41026a200241e80f6a41026a2d00003a0000200220022f00e80f3b01880d200241a00d6a41106a200241d8116a41106a290200370300200241a00d6a41086a200241d8116a41086a290200370300200220022902d8113703a00d200241840d6a41026a200241f80d6a41026a2d00003a0000200220022f00f80d3b01840d200241e80c6a41106a20024198106a41106a290200370300200241e80c6a41086a20024198106a41086a29020037030020022002290298103703e80c200241e40c6a41026a200241f8136a41026a2d00003a0000200220022f00f8133b01e40c200241c80c6a41106a200241a80e6a41106a290200370300200241c80c6a41086a200241a80e6a41086a290200370300200220022902a80e3703c80c200241d8146a41206a200241c0156a41206a280200360200200241d8146a41186a200241c0156a41186a290200370300200241d8146a41106a200241c0156a41106a290200370300200241d8146a41086a200241c0156a41086a290200370300200220022902c0153703d8142006ad4220862009ad8421070c090b200841ff01714102470d092006450d092009102e0c090b200241f0176a200110eb0120022d00f0174105460d08200241900d6a41086a200241e8096a41086a2802003602002002418c0d6a41026a20024198136a41026a2d00003a0000200241c80d6a41086a200241e0076a41086a290200370300200241c80d6a41106a200241e0076a41106a290200370300200220022902e8093703900d200220022f0098133b018c0d200220022902e0073703c80d2002418c186a310000210c20024184186a290200210b200241fc176a290200210f200241f0176a41206a28020021032002418e186a2f010021042002418d186a2d0000210520022902f417210720022802f0172108200241880d6a41026a200241e80f6a41026a2d00003a0000200220022f00e80f3b01880d200241a00d6a41106a200241d8116a41106a290200370300200241a00d6a41086a200241d8116a41086a290200370300200220022902d8113703a00d200241840d6a41026a200241f80d6a41026a2d00003a0000200220022f00f80d3b01840d200241e80c6a41106a20024198106a41106a290200370300200241e80c6a41086a20024198106a41086a29020037030020022002290298103703e80c200241e40c6a41026a200241f8136a41026a2d00003a0000200220022f00f8133b01e40c200241c80c6a41106a200241a80e6a41106a290200370300200241c80c6a41086a200241a80e6a41086a290200370300200220022902a80e3703c80c200241d8146a41206a200241c0156a41206a280200360200200241d8146a41186a200241c0156a41186a290200370300200241d8146a41106a200241c0156a41106a290200370300200241d8146a41086a200241c0156a41086a290200370300200220022902c0153703d814410b210a0c070b20024180066a200110ad012002280280060d072002280284062108200241f0176a200110eb0120022d00f0174105460d07200241f8176a280200210920022802f417210d20022802f017210a0240024020012802002206280204220e450d0020024188186a310000210c20024180186a290300210b20024190186a35020021142002418c186a28020021032002418a186a2f0100210420024189186a2d00002105200241fc176a3502002107200628020022222d000021212006200e417f6a3602042006202241016a3602004200211502400240024002400240024020210e0707000102030405060b2001280200220128020422064110490d052001280200220e41086a2900002110200e29000021112001200e41106a3602002001200641706a360204420121150c060b420221150c050b420321150c040b420421150c030b420521150c020b420621150c010b200a41ff01714102470d082009450d08200d102e0c080b200241900d6a41086a200241e8096a41086a2802003602002002418c0d6a41026a20024198136a41026a2d00003a0000200241c80d6a41086a200241e0076a41086a290200370300200241c80d6a41106a200241e0076a41106a290200370300200241880d6a41026a200241e80f6a41026a2d00003a0000200220022902e8093703900d200220022f0098133b018c0d200220022902e0073703c80d200220022f00e80f3b01880d200241a00d6a41106a200241d8116a41106a290200370300200241a00d6a41086a200241d8116a41086a290200370300200241840d6a41026a200241f80d6a41026a2d00003a0000200241e80c6a41086a20024198106a41086a290200370300200241e80c6a41106a20024198106a41106a290200370300200241e40c6a41026a200241f8136a41026a2d00003a0000200220022902d8113703a00d200220022f00f80d3b01840d20022002290298103703e80c200220022f00f8133b01e40c200241c80c6a41106a200241a80e6a41106a290200370300200241c80c6a41086a200241a80e6a41086a290200370300200241d8146a41206a200241c0156a41206a280200360200200241d8146a41186a200241c0156a41186a290200370300200241d8146a41106a200241c0156a41106a290200370300200241d8146a41086a200241c0156a41086a290200370300200220022902a80e3703c80c200220022902c0153703d81420074220862009ad84210f200dad422086200aad842107410a210a0c060b200241f8056a200110ad0120022802f8050d062001280200220128020422034108490d0620022802fc0521082001280200220429000021072001200341786a3602042001200441086a360200200742ff01560d06200241900d6a41086a200241a80e6a41086a2802003602002002418c0d6a41026a200241e8096a41026a2d00003a0000200241c80d6a41086a200241c0156a41086a290200370300200241c80d6a41106a200241c0156a41106a290200370300200241880d6a41026a20024198136a41026a2d00003a0000200220022902a80e3703900d200220022f00e8093b018c0d200220022902c0153703c80d200220022f0098133b01880d200241a00d6a41106a200241e0076a41106a290200370300200241a00d6a41086a200241e0076a41086a290200370300200241840d6a41026a200241e80f6a41026a2d00003a0000200241e80c6a41086a200241d8116a41086a290200370300200241e80c6a41106a200241d8116a41106a290200370300200241e40c6a41026a200241f80d6a41026a2d00003a0000200220022902e0073703a00d200220022f00e80f3b01840d200220022902d8113703e80c200220022f00f80d3b01e40c200241c80c6a41106a20024198106a41106a290200370300200241c80c6a41086a20024198106a41086a290200370300200241d8146a41206a200241f0176a41206a280200360200200241d8146a41186a200241f0176a41186a290200370300200241d8146a41106a200241f0176a41106a290200370300200241d8146a41086a200241f0176a41086a29020037030020022002290298103703c80c200220022902f0173703d814200742ff018321074109210a0c050b200241f0056a200110ad0120022802f0050d0520022802f405210341002105200241003a00e01502400340200128020022042802042206450d01200241c0156a20056a200428020022082d00003a000020042006417f6a3602042004200841016a3602002002200541016a22043a00e0152004210520044120470d000b200241e8096a41186a200241df156a310000220c3c00004108210a200241900d6a41086a20024198136a41086a2802003602002002418c0d6a41026a200241e80f6a41026a2d00003a0000200220022900cf15220f3703f009200220022900c71522073703e809200220022900d715220b3703f80920022002290298133703900d200220022f00e80f3b018c0d20022800c315210820022f00c115212a20022d00c015212c200241c80d6a41106a200241e0076a41106a290200370300200241c80d6a41086a200241e0076a41086a290200370300200220022902e0073703c80d200241880d6a41026a200241f80d6a41026a2d00003a0000200220022f00f80d3b01880d200241a00d6a41106a200241d8116a41106a290200370300200241a00d6a41086a200241d8116a41086a290200370300200220022902d8113703a00d200241840d6a41026a200241f8136a41026a2d00003a0000200220022f00f8133b01840d200241e80c6a41106a20024198106a41106a290200370300200241e80c6a41086a20024198106a41086a29020037030020022002290298103703e80c200241e40c6a41026a200241b4146a41026a2d00003a0000200220022f00b4143b01e40c200241c80c6a41106a200241a80e6a41106a290200370300200241c80c6a41086a200241a80e6a41086a290200370300200220022902a80e3703c80c200241d8146a41206a200241f0176a41206a280200360200200241d8146a41186a200241f0176a41186a290200370300200241d8146a41106a200241f0176a41106a290200370300200241d8146a41086a200241f0176a41086a290200370300200220022902f0173703d8140c050b200541ff0171450d05200241003a00e0150c050b200241e8056a200110ad0120022802e8050d0420022802ec052108200241d0056a200110820220022903d005a70d04200241d0056a41106a290300210f20022903d8052107200241900d6a41086a200241a80e6a41086a2802003602002002418c0d6a41026a200241e8096a41026a2d00003a0000200241c80d6a41086a200241c0156a41086a290200370300200241c80d6a41106a200241c0156a41106a290200370300200241880d6a41026a20024198136a41026a2d00003a0000200220022902a80e3703900d200220022f00e8093b018c0d200220022902c0153703c80d200220022f0098133b01880d200241a00d6a41106a200241e0076a41106a290200370300200241a00d6a41086a200241e0076a41086a290200370300200241840d6a41026a200241e80f6a41026a2d00003a0000200241e80c6a41086a200241d8116a41086a290200370300200241e80c6a41106a200241d8116a41106a290200370300200241e40c6a41026a200241f80d6a41026a2d00003a0000200220022902e0073703a00d200220022f00e80f3b01840d200220022902d8113703e80c200220022f00f80d3b01e40c200241c80c6a41106a20024198106a41106a290200370300200241c80c6a41086a20024198106a41086a290200370300200241d8146a41206a200241f0176a41206a280200360200200241d8146a41186a200241f0176a41186a290200370300200241d8146a41106a200241f0176a41106a290200370300200241d8146a41086a200241f0176a41086a29020037030020022002290298103703c80c200220022902f0173703d8144107210a0c030b2001280200220128020422034104490d0320012802002204280000210820012003417c6a3602042001200441046a360200200241900d6a41086a200241a80e6a41086a2802003602002002418c0d6a41026a200241e8096a41026a2d00003a0000200241c80d6a41086a200241c0156a41086a290200370300200241c80d6a41106a200241c0156a41106a290200370300200220022902a80e3703900d200220022f00e8093b018c0d200220022902c0153703c80d200241880d6a41026a20024198136a41026a2d00003a0000200220022f0098133b01880d200241a00d6a41106a200241e0076a41106a290200370300200241a00d6a41086a200241e0076a41086a290200370300200220022902e0073703a00d200241840d6a41026a200241e80f6a41026a2d00003a0000200220022f00e80f3b01840d200241e80c6a41106a200241d8116a41106a290200370300200241e80c6a41086a200241d8116a41086a290200370300200220022902d8113703e80c200241e40c6a41026a200241f80d6a41026a2d00003a0000200220022f00f80d3b01e40c200241c80c6a41106a20024198106a41106a290200370300200241c80c6a41086a20024198106a41086a29020037030020022002290298103703c80c200241d8146a41206a200241f0176a41206a280200360200200241d8146a41186a200241f0176a41186a290200370300200241d8146a41106a200241f0176a41106a290200370300200241d8146a41086a200241f0176a41086a290200370300200220022902f0173703d8144106210a4200210f0c020b200241c8056a200110ad0120022802c8050d0220022802cc052108200241b0056a200110820220022903b005a70d02200241b0056a41106a290300210f20022903b8052107200241900d6a41086a200241a80e6a41086a2802003602002002418c0d6a41026a200241e8096a41026a2d00003a0000200241c80d6a41086a200241c0156a41086a290200370300200241c80d6a41106a200241c0156a41106a290200370300200241880d6a41026a20024198136a41026a2d00003a0000200220022902a80e3703900d200220022f00e8093b018c0d200220022902c0153703c80d200220022f0098133b01880d200241a00d6a41106a200241e0076a41106a290200370300200241a00d6a41086a200241e0076a41086a290200370300200241840d6a41026a200241e80f6a41026a2d00003a0000200241e80c6a41086a200241d8116a41086a290200370300200241e80c6a41106a200241d8116a41106a290200370300200241e40c6a41026a200241f80d6a41026a2d00003a0000200220022902e0073703a00d200220022f00e80f3b01840d200220022902d8113703e80c200220022f00f80d3b01e40c200241c80c6a41106a20024198106a41106a290200370300200241c80c6a41086a20024198106a41086a290200370300200241d8146a41206a200241f0176a41206a280200360200200241d8146a41186a200241f0176a41186a290200370300200241d8146a41106a200241f0176a41106a290200370300200241d8146a41086a200241f0176a41086a29020037030020022002290298103703c80c200220022902f0173703d8144105210a0c010b200241a8056a200110ad0120022802a8050d0120022802ac052222200128020028020441c4006e2203200320224b1bad42c4007e2207422088a70d132007a72203417f4c0d130240024020030d00410421080c010b2003102c2208450d190b2001200128020441016a2204360204200341c4006ead21070240200420012802084b0d00024002402022450d00200241f8136a410f6a211a20024180186a212c4100210a0340200241003a009018200a41016a210a410021040240024002400340200128020022032802042205450d01200241f0176a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a0090182003210420034120470d000b200241f0176a411f6a310000210b200229008718210c20022d00f017210320022f00f117210520022800f317210620022900f717210f20022800ff172116200228008318212a200241f0176a200110ed0320022d00f01722044106470d01410621040c020b0240200441ff0171450d00200241003a0090180b410621040c010b202c290300211520022903f817211120022f019218211f20022d009118211e200228008d18211d20022f008b18211c20022d008a18211720022f018818212320022802f417211b20022f01f217211920022d00f1172118202a212120162120200f2110200621092005210d2003210e200c2114200b21130b2002202136008b142002202036008714200220103700ff13200220093600fb132002200d3b00f9132002200e3a00f81320044106460d03201a290000210c20022900ff13210f02402007422088220ba722032007a7470d00200341016a22052003490d1820034101742206200520052006491b22054104200541044b1bad42c4007e220b422088a7454102742105200ba721060240024020030d00200241003602f0170c010b200241043602f817200220083602f0172002200341c4006c3602f4170b200241e8096a20062005200241f0176a107d20022802f009210520022802e8094101460d0320022802ec0921082007422088220ba72103200541c4006ead21070b2008200341c4006c6a22032011370028200320143700172003200f3700072003201f3b00422003201e3a00412003201d36003d2003201c3b003b200320173a003a200320233b00382003201b360024200320193b0022200320183a0021200320043a0020200320093600032003200d3b00012003200e3a0000200341306a20153700002003411f6a20133c00002003410f6a200c370000200b422086200742ffffffff0f83844280808080107c2107200a2022470d000b200128020421040b20012004417f6a3602042008450d03200241900d6a41086a20024198136a41086a2802003602002002418c0d6a41026a200241e80f6a41026a2d00003a0000200241c80d6a41086a200241e0076a41086a290200370300200241c80d6a41106a200241e0076a41106a290200370300200241880d6a41026a200241f80d6a41026a2d00003a000020022002290298133703900d200220022f00e80f3b018c0d200220022902e0073703c80d200220022f00f80d3b01880d200241a00d6a41106a200241d8116a41106a290200370300200241a00d6a41086a200241d8116a41086a290200370300200241840d6a41026a200241b4146a41026a2d00003a0000200241e80c6a41086a20024198106a41086a290200370300200241e80c6a41106a20024198106a41106a290200370300200241e40c6a41026a200241b0146a41026a2d00003a0000200220022902d8113703a00d200220022f00b4143b01840d20022002290298103703e80c200220022f00b0143b01e40c200241c80c6a41106a200241a80e6a41106a290200370300200241c80c6a41086a200241a80e6a41086a290200370300200241d8146a41206a200241c0156a41206a280200360200200241d8146a41186a200241c0156a41186a290200370300200241d8146a41106a200241c0156a41106a290200370300200241d8146a41086a200241c0156a41086a290200370300200220022902a80e3703c80c200220022902c0153703d8144103210a0c020b20050d190c140b02402007422088a72201450d00200141c4006c2103200841286a210103400240200141786a2d00004101470d002001280200450d002001417c6a280200102e0b200141c4006a2101200341bc7f6a22030d000b0b2007a72201450d01200141c4006c450d012008102e0c010b200241b80c6a41086a2201200241900d6a41086a280200360200200241b40c6a41026a22062002418c0d6a41026a2d00003a0000200241980c6a41086a222d200241c80d6a41086a290300370300200241980c6a41106a222e200241c80d6a41106a290300370300200241940c6a41026a222f200241880d6a41026a2d00003a0000200220022903900d3703b80c200220022f018c0d3b01b40c200220022903c80d3703980c200220022f01880d3b01940c200241f80b6a41106a2230200241a00d6a41106a290300370300200241f80b6a41086a2224200241a00d6a41086a290300370300200241f40b6a41026a2227200241840d6a41026a2d00003a0000200241d80b6a41086a2231200241e80c6a41086a290300370300200241d80b6a41106a2232200241e80c6a41106a290300370300200241d40b6a41026a2233200241e40c6a41026a2d00003a0000200220022903a00d3703f80b200220022f01840d3b01f40b200220022903e80c3703d80b200220022f01e40c3b01d40b200241b80b6a41106a2234200241c80c6a41106a290300370300200241b80b6a41086a2235200241c80c6a41086a290300370300200241d00a6a41206a2236200241d8146a41206a280200360200200241d00a6a41186a2237200241d8146a41186a290300370300200241d00a6a41106a2238200241d8146a41106a290300370300200241d00a6a41086a2239200241d8146a41086a290300370300200220022903c80c3703b80b200220022903d8143703d00a200041c8006a2010370200200041c0006a2011370200200041286a200c3c0000200041206a200b370200200041186a200f370200200041106a2007370200200041d0006a200d360200200041386a2015370200200041306a20143702002000412c6a2003360200200020043b002a200020053a00292000410c6a20083602002000202a3b000a2000202c3a0009200041086a200a3a000020004116360200200041e0006a20093a0000200041d4006a20022903b80c370200200041dc006a2001280200360200200041e4006a2022360200200041e8006a200e360200200020022f01b40c3b0061200041e3006a20062d00003a0000200041ec006a20022903980c370200200041f4006a202d290300370200200041fc006a202e29030037020020004184016a20213a000020004187016a202f2d00003a0000200020022f01940c3b0085012000418c016a202036020020004188016a201f360200200041a0016a203029030037020020004198016a202429030037020020004190016a20022903f80b370200200041a8016a201e3a0000200041ab016a20272d00003a0000200020022f01f40b3b00a901200041b0016a201d360200200041ac016a201c360200200041c4016a2032290300370200200041bc016a2031290300370200200041b4016a20022903d80b370200200041cc016a20183a0000200041cf016a20332d00003a0000200020022f01d40b3b00cd01200041d4016a201a360200200041d0016a2016360200200041e8016a2034290300370200200041e0016a2035290300370200200041d8016a20022903b80b37020020004190026a203628020036020020004188026a203729030037020020004180026a2038290300370200200041f8016a2039290300370200200041f0016a20022903d00a370200200041a4026a20123700002000419c026a201337000020004198026a20193600002000201b3b009602200020173a00950220004194026a20233a00000c1b0b2000411c3602000c1a0b200020043b0046200020053a00452000201e3600412000201f3b003f2000201d3a003e200020173b0026200020233a00252000201b360021200020203b001f200020193a001e2000200a3b0006200020093a0005200020033a000420004111360200200041346a200c3700002000412c6a200b3700002000410c6a20073700002000413c6a20213b0000200041286a201c3600002000411c6a20223b0000200041086a2008360000200041146a200dad422086200ead84370000200041c8006a200241f0176a41e80110e9081a0c190b4100210a410021094100210d0b0b200020083a000920004110360200200041286a200b370200200041146a2004360200200041106a20053602002000410c6a2003360200200041086a200e3a0000200041186a200dad220b423886200742ffffffffffffffff008384370200200041206a200aad4238862009ad42188684200b42088884370200200041306a200241f0176a41800210e9081a0c160b2000411c3602000c150b0b200020013a0029200020053b000a200020043a00092000410f360200200041286a200b3c0000200041206a200c370200200041386a2007370200200041346a2009360200200041306a200a3602002000412c6a2008360200200041146a200e360200200041106a20063602002000410c6a2003360200200041086a20213a0000200041186a2022ad422086200dad84370200200041c0006a200241f0176a41f00110e9081a0c130b2007422088a721010240200d450d002005102e0b2007a7210402402001450d002001410c6c2103200a210103400240200141046a280200450d002001280200102e0b2001410c6a2101200341746a22030d000b0b2004450d032004410c6c450d03200a102e0c030b200d102e0b02402007422088a72201450d002001410c6c2103200a210103400240200141046a280200450d002001280200102e0b2001410c6a2101200341746a22030d000b0b2007a72201450d002001410c6c450d00200a102e0b200ba7450d002005102e0b2000411c3602000c0e0b200d0d090c040b4100210e4200210f0b0c010b200241e9076a200c370000200220073700e107200220022d00df143a00e0074108210920022903e007220c422088200241e0076a41086a290300220f42208684210720022f01d81420022d00da14411074722204410876210d200f422088210f200ca7220e41807e7121162002200b3700f107200b422088a72118200b421088a72119200b420888a7211a201042ff0183a7211720022800db14210320022f01f007211b0b2000201e3a0049200020213a0042200020233b002a200020173a0029200020193b00232000201a3a00222000200d3b010a200020043a000920004107360200200041d8006a200c370200200041d0006a200b370200200041cc006a201c360200200041ca006a201d3b0100200041c5006a201f360000200041c3006a20203b0000200041c0006a20223b0100200041386a2010370200200041346a2008360200200041306a200a3602002000412c6a2005360200200041256a2018360000200041206a201b3b01002000410c6a2003360200200041086a20093a0000200041186a200f422086200742208884370200200041106a20074220862016200e41ff017172ad84370200200041e0006a200241f0176a41d00110e9081a0c090b1038000b2000411c3602000c070b410021064200210b410021010b200041003b0126200020013a00252000200a3b0023200020093b000d200020043b0006200020053a0005200020083a0004200041043602002000411b6a200b370000200041136a2007370000200041286a20063602002000410f6a200d3600002000410c6a200e3a0000200041086a20033602002000412c6a200241f0176a41840210e9081a0c050b2000411c3602000c040b1036000b02402007422088a72201450d00200141186c21032004210103400240200141046a280200450d002001280200102e0b0240200141106a280200450d002001410c6a280200102e0b200141186a2101200341686a22030d000b0b2007a72201450d01200141186c450d010b2004102e0b2000411c3602000b200241c01a6a24000baa2d01047f024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002802000e1b00010218180304051806070818090a0b0c0d0e0f10111213141516170b0240024002400240024002400240200041086a2802000e0a1e1e001e01021e030405060b200041106a280200450d1d2000410c6a280200102e0f0b200041106a280200450d1c2000410c6a280200102e0f0b200041106a280200450d1b2000410c6a280200102e0f0b0240200041146a2802002201450d002000410c6a2802002102200141186c210103400240200241046a280200450d002002280200102e0b0240200241106a280200450d002002410c6a280200102e0b200241186a2102200141686a22010d000b0b200041106a2802002202450d1a200241186c450d1a200028020c102e0f0b0240200041146a2802002201450d002000410c6a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041106a2802002202450d192002410c6c450d19200028020c102e0f0b200041106a280200450d182000410c6a280200102e0f0b200041106a280200450d172000410c6a280200102e0f0b0240024002400240024020002d00040e061b001b010203040b200041186a22022802001096012002280200102e0f0b02402000410c6a280200450d00200041086a280200102e0b200041246a22022802001096012002280200102e0f0b2000410c6a280200450d18200041086a280200102e0f0b200041186a22022802001096012002280200102e0f0b02402000410c6a280200450d00200041086a280200102e0b200041246a22022802001096012002280200102e0f0b02400240200041086a280200417f6a0e020001170b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b0240200041306a2802002202450d00200241246c450d00200028022c102e0b0240200041a4016a2802002201450d002000419c016a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b0240200041a0016a2802002202450d00200241246c450d00200028029c01102e0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d162002410c6c450d162000280210102e0f0b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b0240200041306a2802002202450d00200241246c450d00200028022c102e0b0240200041a4016a2802002201450d002000419c016a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b0240200041a0016a2802002202450d00200241246c450d00200028029c01102e0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d152002410c6c450d152000280210102e0f0b0240024002400240200041086a2802000e0418000102030b2000410c6a2d00004102470d17200041146a280200450d17200041106a280200102e0f0b2000410c6a2d00004102470d16200041146a280200450d16200041106a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004102470d15200041386a280200450d15200041346a280200102e0f0b2000410c6a2d00004102470d14200041146a280200450d14200041106a280200102e0f0b02402000410c6a2802002201450d0020002802042202200141f0006c6a21030340024020022204410c6a2802002201450d0020042802042102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b200441f0006a21020240200441086a2802002201450d00200141246c450d002004280204102e0b20022003470d000b0b200041086a2802002202450d13200241f0006c450d132000280204102e0f0b024002400240024002400240200041086a2d00000e171800181818180118180218181818180318180418181818050b2000412c6a2d00004102470d17200041346a280200450d17200041306a280200102e0f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b200041106a2802002202450d16200241246c450d16200028020c102e0f0b2000410c6a2d00004102470d15200041146a280200450d15200041106a280200102e0f0b200041106a28020041ffffff3f71450d142000410c6a280200102e0f0b200041146a28020041ffffffff0371450d13200041106a280200102e0f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b200041106a2802002202450d12200241246c450d12200028020c102e0f0b20002802042202450d11200041086a280200450d112002102e0f0b02400240200041086a280200417f6a0e020001120b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d112002410c6c450d112000280210102e0f0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d102002410c6c450d102000280210102e0f0b02402000410c6a280200450d00200041086a280200102e0b02402000411c6a2802002201450d00200041146a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041186a2802002202450d0f2002410c6c450d0f2000280214102e0f0b0240024002400240200041086a2d000041716a0e0400010203120b200041106a280200450d112000410c6a280200102e0f0b200041106a280200450d102000410c6a280200102e0f0b200041106a280200450d0f2000410c6a280200102e0f0b200041106a280200450d0e2000410c6a280200102e0f0b024002400240200041086a2d0000417f6a0e03000102100b200041306a28020041ffffff3f71450d0f2000412c6a280200102e0f0b2000410c6a22022802001096012002280200102e0f0b200041106a22022802001096012002280200102e0f0b024002400240200041086a2d0000417f6a0e030001020f0b200041306a28020041ffffff3f71450d0e2000412c6a280200102e0f0b2000410c6a22022802001096012002280200102e0f0b200041106a22022802001096012002280200102e0f0b02400240200041086a2d0000417f6a0e05000d0d0d010d0b200041106a28020041ffffff3f71450d0c2000410c6a280200102e0f0b2000410c6a2d00004102470d0b200041146a280200450d0b200041106a280200102e0f0b20002d00044104470d0a2000410c6a28020041ffffff3f71450d0a200041086a280200102e0f0b200041086a2802004101470d092000410c6a2d00004102470d09200041146a280200450d09200041106a280200102e0f0b02400240200041086a2d0000417d6a0e0200010a0b200041f0006a280200450d09200041ec006a280200102e0f0b200041106a280200450d082000410c6a280200102e0f0b024002400240200041086a2802000e040a0a0001020b2000410c6a2d00004102470d09200041146a280200450d09200041106a280200102e0f0b2000410c6a2d00004102470d08200041146a280200450d08200041106a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004102470d07200041386a280200450d07200041346a280200102e0f0b02400240024020002f01040e03090001020b0240200041106a2802002201450d00200041086a2802002102200141b0026c210103402002109601200241b0026a2102200141d07d6a22010d000b0b2000410c6a2802002202450d08200241b0026c450d082000280208102e0f0b200041086a22022802001096012002280200102e0f0b0240200041106a2802002201450d00200041086a2802002102200141b0026c210103402002109601200241b0026a2102200141d07d6a22010d000b0b2000410c6a2802002202450d06200241b0026c450d062000280208102e0f0b0240024002400240024002400240200041086a2d0000417e6a0e0d00010c0c0c0c0c0c02030405060c0b0240200041146a2802002201450d002000410c6a2802002202200141c8006c6a21010340024020022d00004101470d00200241086a280200450d00200241046a280200102e0b0240200241246a2d00004101470d002002412c6a280200450d00200241286a280200102e0b200241c8006a22022001470d000b0b0240200041106a2802002202450d00200241c8006c450d00200028020c102e0b0240200041186a2d00004101470d00200041206a280200450d002000411c6a280200102e0b02402000413c6a2d00004101470d00200041c4006a280200450d00200041c0006a280200102e0b0240200041e0006a2d00004101470d00200041e8006a280200450d00200041e4006a280200102e0b024020004184016a2d00004101470d002000418c016a280200450d0020004188016a280200102e0b0240200041a8016a2d00004101470d00200041b0016a280200450d00200041ac016a280200102e0b0240200041cc016a2d00004101470d00200041d4016a280200450d00200041d0016a280200102e0b200041f0016a2d00004101470d0b200041f8016a280200450d0b200041f4016a280200102e0f0b0240200041146a2802002202450d00200241c4006c21012000410c6a28020041286a210203400240200241786a2d00004101470d002002280200450d002002417c6a280200102e0b200241c4006a2102200141bc7f6a22010d000b0b200041106a2802002202450d0a200241c4006c450d0a200028020c102e0f0b200041106a2d00004102470d09200041186a280200450d09200041146a280200102e0f0b2000410c6a2d00004102470d08200041146a280200450d08200041106a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004101470d07200041386a280200450d07200041346a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004101470d06200041386a280200450d06200041346a280200102e0f0b2000410c6a2d00004102470d05200041146a280200450d05200041106a280200102e0f0b20002d00042202417e6a4108490d040240024020020e020600010b200041286a22022802001096012002280200102e0f0b200041c8006a22022802001096012002280200102e0f0b0240024002400240200041086a2d00000e0407000102030b0240200041106a28020041ffffff3f71450d002000410c6a280200102e0b200041186a22022802001096012002280200102e0f0b0240200041106a28020041ffffff3f71450d002000410c6a280200102e0b200041286a280200450d05200041246a280200102e0f0b200041306a28020041ffffff3f71450d042000412c6a280200102e0f0b200041306a28020041ffffff3f71450d032000412c6a280200102e0f0b0240024002400240200041086a2802000e09060006010606020606030b200041106a280200450d052000410c6a280200102e0f0b200041106a2d00004102470d04200041186a280200450d04200041146a280200102e0f0b200041106a2d00004102470d03200041186a280200450d03200041146a280200102e0f0b200041146a280200450d02200041106a280200102e0f0b02400240200041086a2d0000417f6a0e03000301030b200041306a280200450d022000412c6a280200102e0c020b200041306a280200450d012000412c6a280200102e0f0b02402000413c6a28020041ffffffff0171450d00200041386a280200102e0b0240200041c8006a2802002202450d002002410c6c450d00200041c4006a280200102e0b0240200041d4006a28020041ffffffff0071450d00200041d0006a280200102e0b0240200041e0006a2802002202450d00200241146c450d00200041dc006a280200102e0b0240200041ec006a2802002202450d00200241186c450d00200041e8006a280200102e0b0240200041f8006a2802002202450d002002411c6c450d00200041f4006a280200102e0b024020004184016a28020041ffffff3f71450d0020004180016a280200102e0b024020004190016a2802002202450d00200241246c450d002000418c016a280200102e0b02402000419c016a2802002202450d00200241286c450d0020004198016a280200102e0b0240200041a8016a2802002202450d002002412c6c450d00200041a4016a280200102e0b0240200041b4016a2802002202450d00200241306c450d00200041b0016a280200102e0b0240200041c0016a2802002202450d00200241346c450d00200041bc016a280200102e0b0240200041cc016a2802002202450d00200241386c450d00200041c8016a280200102e0b0240200041d8016a2802002202450d002002413c6c450d00200041d4016a280200102e0b0240200041e4016a28020041ffffff1f71450d00200041e0016a280200102e0b200041f0016a2802002202450d00200241c4006c450d00200041ec016a280200102e0f0b0b900403027f017e077f230041a0076b22032400024002400240024002402002200128020441b0026e2204200420024b1bad42b0027e2205422088a70d002005a72204417f4c0d000240024020040d00410821060c010b2004102c2206450d030b200441b0026e2107024020020d00410021020c040b200341e0046a410472210841002109410021044100210a0340200341e0046a200110980120032802e004210b200341b4026a200841ac0210e9081a200b411c460d02200341086a200341b4026a41ac0210e9081a02400240200a2007470d002009200a41016a220c2009200c4b1b220c4104200c41044b1bad42b0027e2205422088a745410374210c2005a7210702400240200a0d00200341003602e0040c010b200341083602e804200320043602e404200320063602e0040b20034190076a2007200c200341e0046a107d200328029807210c2003280290074101460d012003280294072106200c41b0026e21070b200620046a220c200b360200200c41046a200341086a41ac0210e9081a200941026a2109200441b0026a21042002200a41016a220a460d050c010b0b200c0d020b1038000b200041003602000240200a450d002006210a0340200a109601200a41b0026a210a200441d07d6a22040d000b0b2007450d02200741b0026c450d022006102e0c020b1036000b2000200736020420002006360200200041086a20023602000b200341a0076a24000bfcb1030b067f017e027f027e037f017e027f067e0f7f037e117f230041c01b6b220224000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802042203450d00200141046a2104200128020022052d0000210620012003417f6a22073602042001200541016a36020020060e250102030405060708090a2b0b0c0d0e0f101112132b2b2b2b1415162b17302f2b2b2b2e2d2c2b0b2000411c3602000c630b2007450d6120052d0001210620012003417e6a22073602042001200541026a36020002400240024002400240024002400240024002400240024020060e0a000102030405060708096d0b20074104490d6c2005280002210620012003417a6a3602042001200541066a3602002006418194ebdc034f0d6c410121010c0a0b2002200110ab0120022802000d6b2004280200220320022802042205490d6b2005417f4c0d670240024020050d00410121060c010b200510322206450d6a200428020021030b20032005490d6a20062001280200200510e9082103200128020422072005490d302001200720056b3602042001200128020020056a3602002003450d6b2005ad220842208620088421084102410b20031b21010c080b20074108490d6a200529000221082001200341766a36020420012005410a6a360200410321010c080b200241086a200110ab0120022802080d6920042802002203200228020c2205490d692005417f4c0d650240024020050d00410121060c010b200510322206450d68200428020021030b20032005490d6820062001280200200510e9082103200128020422072005490d262001200720056b3602042001200128020020056a3602002003450d692005ad220842208620088421084104410b20031b21010c060b200241106a200110ab0120022802100d682004280200220320022802142205490d682005417f4c0d640240024020050d00410121060c010b200510322206450d67200428020021030b20032005490d6720062001280200200510e9082103200128020422072005490d242001200720056b3602042001200128020020056a3602002003450d682005ad220842208620088421084105410b20031b21010c050b20024180166a200110fe0520022802801622064102460d672002290284162108410621010c040b200241286a200110ab0120022802280d66200228022c2207200428020041186e2205200520074b1bad42187e2208422088a70d622008a72205417f4c0d620240024020050d00410421060c010b2005102c2206450d650b200541186ead2108024002402007450d000340200241206a200110ab010240024020022802200d002004280200220320022802242205490d002005417f4c0d670240024020050d00410121090c010b200510322209450d6a200428020021030b024020032005490d0020092001280200200510e908210a200128020422032005490d302001200320056b3602042001200128020020056a360200200a450d01200241186a200110ab012005ad220b422086200b84220ca7210d024020022802180d0020042802002203200228021c2205490d002005417f4c0d690240024020050d004101210e0c010b20051032220e450d6c200428020021030b0240024020032005490d00200e2001280200200510e908210e2001280204220320054f0d012005200341b8b2c0001056000b200e102e0c010b2001200320056b3602042001200128020020056a360200200e0d030b200d450d010b2009102e0b02402008422088a72201450d00200141186c21052006210103400240200141046a280200450d002001280200102e0b0240200141106a280200450d002001410c6a280200102e0b200141186a2101200541686a22050d000b0b2008a72201450d6a200141186c450d6a0c690b02402008422088220ba722032008a7470d00200341016a22092003490d662003410174220f20092009200f491b22094104200941044b1bad42187e220b422088a7454102742109200ba7210f0240024020030d0020024100360280160c010b200241043602881620022006360280162002200341186c360284160b20024198086a200f200920024180166a107d20022802a00821092002280298084101460d03200228029c0821062008422088220ba72103200941186ead21080b2006200341186c6a2203200d3602042003200a360200200341146a2005ad22104220862010842210422088a73602002003410c6a2010422086200ead84370200200341086a200c422088a7360200200b422086200842ffffffff0f83844280808080107c21082007417f6a22070d000b0b2006450d674107410b20061b21010c040b2009450d620c640b20024180166a200110e3012002280280162206450d652002290284162108410821010c020b200241306a200110ab0120022802300d642004280200220320022802342205490d642005417f4c0d600240024020050d00410121060c010b200510322206450d63200428020021030b20032005490d6320062001280200200510e9082103200128020422072005490d1f2001200720056b3602042001200128020020056a3602002003450d642005ad220842208620088421080240200428020022034104490d0020012802002207280000210520012003417c6a3602042001200741046a360200410921010c030b2008a70d630c640b200241386a200110ab0120022802380d6320042802002203200228023c2205490d632005417f4c0d5f0240024020050d00410121060c010b200510322206450d62200428020021030b20032005490d6220062001280200200510e9082103200128020422072005490d1d2001200720056b3602042001200128020020056a3602002003450d632005ad22084220862008842108410a410b20031b21010b0b20004100360200200041186a2005360200200041106a20083702002000410c6a2006360200200041086a2001360200200041206a200241b0186a41900210e9081a0c620b02402007450d0020052d0001210620012003417e6a22073602042001200541026a36020002400240024002400240024002400240024020060e06000102030405090b20074104490d082005280002210620012003417a6a22073602042001200541066a3602002007450d0820052d0006210a2001200341796a22043602042001200541076a220e3602004100210702400240200a0e0201000a0b20044104490d09200535000721082001200341756a220736020420012005410b6a36020020074104490d09200535000b210b2001200341716a220436020420012005410f6a220e3602002008200b422086842108410121070b41000d082004450d08200e2d0000210320012004417f6a3602042001200e41016a360200200241b0186a200110980120022802b018210120024180166a200241b0186a41047241ac0210e9081a2001411c460d08200241b0186a20024180166a41ac0210e9081a41b002102c2205450d6720052001360200200541046a200241b0186a41ac0210e9081a2008422088a721042008a7210a4101210e420021080c050b20074104490d072005280002210620012003417a6a22073602042001200541066a36020020074104490d07200528000621072001200341766a36020420012005410a6a3602004102210e41002105420021080c040b200241c0006a200110ab0120022802400d062004280200220320022802442205490d062005417f4c0d630240024020050d00410121060c010b200510322206450d66200428020021030b20032005490d0520062001280200200510e9082103200128020422072005490d2a2001200720056b3602042001200128020020056a3602002003450d062005ad2208422086200884220ba72107200428020022034104490d0420012802002205280000210420012003417c6a220e3602042001200541046a220a360200200e450d04200a2d0000210920012003417b6a220e3602042001200a41016a220d360200410021050240024020090e020100060b200e4104490d05200a35000121082001200341776a22053602042001200a41056a36020020054104490d05200a350005210c2001200341736a220e3602042001200a41096a220d3602002008200c422086842108410121050b41000d04200e450d04200d2d000021032001200e417f6a3602042001200d41016a360200200241b0186a200110980120022802b018210e20024180166a200241b0186a41047241ac0210e9081a200e411c460d04200241b0186a20024180166a41ac0210e9081a41b002102c2201450d65200b422088a7210a2001200e360200200141046a200241b0186a41ac0210e9081a4103210e0c030b200241c8006a200110ab0120022802480d0520042802002203200228024c2205490d052005417f4c0d620240024020050d00410121060c010b200510322206450d65200428020021030b20032005490d0420062001280200200510e9082103200128020422072005490d1f2001200720056b3602042001200128020020056a3602002003450d052005ad22084220862008842208422088a7210a2008a721074104210e41002105410021040c020b20074104490d042005280002210620012003417a6a22073602042001200541066a3602002007450d0420052d0006210a2001200341796a22043602042001200541076a220e3602004100210702400240200a0e020100060b20044104490d05200535000721082001200341756a220736020420012005410b6a36020020074104490d05200535000b210b2001200341716a220436020420012005410f6a220e3602002008200b422086842108410121070b41000d042004450d04200e2d0000210320012004417f6a3602042001200e41016a360200200241b0186a200110980120022802b018210120024180166a200241b0186a41047241ac0210e9081a2001411c460d04200241b0186a20024180166a41ac0210e9081a41b002102c2205450d6320052001360200200541046a200241b0186a41ac0210e9081a2008422088a721042008a7210a4105210e420021080c010b200241d0006a200110ab0120022802500d032004280200220320022802542205490d032005417f4c0d600240024020050d00410121060c010b200510322206450d63200428020021030b20032005490d0220062001280200200510e9082103200128020422072005490d1c2001200720056b3602042001200128020020056a3602002003450d032005ad2208422086200884220ba72107200428020022034104490d0120012802002205280000210420012003417c6a220e3602042001200541046a220a360200200e450d01200a2d0000210920012003417b6a220e3602042001200a41016a220d360200410021050240024020090e020100030b200e4104490d02200a35000121082001200341776a22053602042001200a41056a36020020054104490d02200a350005210c2001200341736a220e3602042001200a41096a220d3602002008200c422086842108410121050b41000d01200e450d01200d2d000021032001200e417f6a3602042001200d41016a360200200241b0186a200110980120022802b018210e20024180166a200241b0186a41047241ac0210e9081a200e411c460d01200241b0186a20024180166a41ac0210e9081a41b002102c2201450d62200b422088a7210a2001200e360200200141046a200241b0186a41ac0210e9081a4106210e0b200020033a00052000200e3a000420004101360200200041246a20013602002000411c6a2008370200200041186a2005360200200041146a2004360200200041106a200a3602002000410c6a2007360200200041086a2006360200200041286a20024198086a41880210e9081a0c640b2007450d010b2006102e0b2000411c3602000c610b2007450d5c20052d0001210620012003417e6a3602042001200541026a3602000240024002400240024020060e03000103610b200241b0186a2001109a02200241bc186a2802002203450d60200241c4186a2802002105200241c0186a280200210620022802b818210e20022903b018210820024198086a200241c8186a41e40010e9081a200241b4196a2802002104200241b0186a4180016a2802002107200241ac196a280200210a20024180166a200241b8196a41800110e9081a200241b0186a200110f701024020022802b418450d00200241bc186a290200210b20022902b418210c20022802b0182109200241980f6a20024198086a41e40010e9081a20024198126a20024180166a41800110e9081a410121010c040b02402005450d00200541246c21052003210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012005415c6a22050d000b0b02402006450d00200641246c450d002003102e0b02402004450d00200441246c2105200a210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012005415c6a22050d000b0b2007450d60200741246c0d010c600b200241b0186a2001109a02200241bc186a2802002203450d5f200241c4186a2802002105200241c0186a280200210620022802b818210e20022903b018210820024198086a200241c8186a41e40010e9081a200241b4196a2802002104200241b0186a4180016a2802002107200241ac196a280200210a20024180166a200241b8196a41800110e9081a200241b0186a200110f701024020022802b418450d00200241bc186a290200210b20022902b418210c20022802b0182109200241980f6a20024198086a41e40010e9081a20024198126a20024180166a41800110e9081a410221010c030b02402005450d00200541246c21052003210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012005415c6a22050d000b0b02402006450d00200641246c450d002003102e0b02402004450d00200441246c2105200a210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012005415c6a22050d000b0b2007450d5f200741246c450d5f0b200a102e0c5e0b200241b0186a20011095024103210120022d00c0184103460d5d200241b8186a290300210b20022903b018210c20022903c0182108200241980f6a20024198156a41e40010e9081a20024198126a20024198086a41800110e9081a0b200241880b6a200241980f6a41e40010e9081a200241d8106a20024198126a41800110e9081a200041186a200b370200200041106a200c370200200041346a2005360200200041306a20063602002000412c6a2003360200200041286a200e360200200041206a20083702002000410c6a2009360200200041086a200136020020004102360200200041386a200241880b6a41e40010e9081a200041a4016a2004360200200041a0016a20073602002000419c016a200a360200200041a8016a200241d8106a41800110e9081a0c600b02402007450d0020052d0001210620012003417e6a3602042001200541026a36020020060d00200241d8006a200110d9042002290358a70d002002290360210820004103360200200041086a2008370300200041106a200241b0186a41a00210e9081a0c600b2000411c3602000c5f0b02402007450d0020052d0001210620012003417e6a22073602042001200541026a36020002400240024002400240024020060e050001020304060b20074104490d052005280002210620012003417a6a3602042001200541066a36020042002108410121044100210a4200210b4100210e0c040b20024180166a200110930120022d0080164101460d04200428020022044104490d0420024180166a41106a290300210820024188166a290300210c2002419d166a280000210a2002419b166a2f0000210e2002419a166a2d0000210920024198166a2f0100210d200228028416210620022f018216210520022d00811621032001280200220f280000210720012004417c6a3602042001200f41046a3602002002200e3b00eb10200220093a00ea102002200d3b01e8102002200c3703d810200220083703e0102002200a3600ed1020022900df102210422888200241e7106a290000220b421886842108200a4110762109200b422888210b200c421888a72111200c420888a7210f2010420888a7210a200ca721122010a7210e410221040c030b20074104490d032005280002210620012003417a6a3602042001200541066a36020042002108410321044100210a4200210b4100210e4100210d41002107410021010c020b20024180166a200110930120022d0080164101460d02200428020022044104490d0220024190166a290300211020024188166a290300210c2002419d166a28000021092002419b166a2f0000210d2002419a166a2d0000210f20024198166a2f01002111200228028416210620022f018216210520022d00811621032001280200220a280000210720012004417c6a220e3602042001200a41046a220a360200200e450d02200a2d0000210e20012004417b6a3602042001200a41016a3602004100210102400240200e0e020100040b410121010b2002200d3b00ab0f2002200f3a00aa0f200220113b01a80f200220103703a00f200c423888201042088684a7210e200220093600ad0f20094110762109200241ac0f6a330100200241ae0f6a31000042108684210b200c421888a72111200c420888a7210f20022902a40f2108200ca721122010a7210a410421040c010b20074104490d012005280002210620012003417a6a3602042001200541066a36020020022900df10220c422888200241e7106a290000220b421886842108200b422888210b200c420888a7210a20022f00d910210f20022800db10211120022f00ef10210920022d00f110210120022f01f210210d20022802f4102107200ca7210e410521040b2000200d3b0126200020013a0025200020093b00232000200f3b000d200020053b0006200020033a0005200020043a000420004104360200200041286a20073602002000410f6a20113600002000410c6a20123a0000200041086a20063602002000411b6a200b422886200842188884370000200041136a2008422886200aad42088684200ead42ff0183843700002000412c6a200241b0186a41840210e9081a0c5f0b2000411c3602000c5e0b02402007450d0020052d0001210620012003417e6a3602042001200541026a360200024002400240024002400240024020060e0400010203070b20024180166a200110e60120022d0080164105460d0620024180166a41106a290300210b20024188166a2903002108200241a0166a280200210520024198166a290300210c20022802841621062002280280162103200241e8006a200110db0402402002290368a70d00200241e8006a41106a29030021132006ad4220862003ad84211420022903702210422088a721062010a72103410121010c040b200341ff01714102470d062008a7450d062006102e0c060b20024180166a200110e60120022d0080164105460d0520024180166a41106a290300210b200241a0166a280200210520024198166a290300210c20024188166a29030021082002280284162106200228028016210320024198016a200110db04200229039801a70d0420024198016a41106a290300211320022903a001211020024180016a200110db04200229038001a70d0420024180016a41106a290300211520022903880121162006ad4220862003ad8421142010422088a721062010a72103410221010c020b20024180166a200110e60120022d0080164105460d0420024180166a41106a290300210b200241a0166a2203280200210520024198166a290300210c20024180166a41086a220629030021082002280284162104200228028016210720024180166a200110e601024020022d0080164105460d0020024198126a41086a20024180166a41146a29020037030020024198126a41106a2002419c166a280200360200200220024180166a410c6a290200370398122006280200210a2003350200211020022802841621062002280280162103200241b0016a200110db04024020022903b001a70d00200241b0016a41106a290300211720022903b801211820024198086a41146a20024198126a41106a28020036020020024198086a410c6a200241a0126a290300370200200220022903981237029c082002200a360298082004ad4220862007ad84211420024198086a41106a2903002115200229039808211320022903a0082116410321010c030b200341ff01714102470d00200a450d002006102e0b200741ff01714102470d042008a7450d042004102e0c040b20024180166a200110e60120022d0080164105460d0320024180166a41106a290300210b20024188166a2903002108200241a0166a280200210520024198166a290300210c20022802841621062002280280162103200241c8016a200110db0420022903c801a70d01200241c8016a41106a29030021132006ad4220862003ad84211420022903d0012210422088a721062010a72103420021104104210142002116420021150b20004105360200200041e0006a2017370200200041d8006a2018370200200041c8006a2015370200200041c0006a2016370200200041386a20133702002000411c6a200b370200200041146a2008370200200041d0006a20103702002000412c6a2005360200200041246a200c3702002000410c6a2014370200200041086a2001360200200041306a2006ad4220862003ad84370200200041e8006a200241b0186a41c80110e9081a0c600b200341ff01714102470d012008a7450d012006102e0c010b200341ff01714102470d002008a7450d002006102e0b2000411c3602000c5d0b02402007450d0020052d0001210620012003417e6a3602042001200541026a36020020060d00200241e0016a200110ab0120022802e0010d0020022802e4012206200428020041f0006e2205200520064b1bad42f0007e2208422088a70d582008a72205417f4c0d580240024020050d00410421070c010b2005102c2207450d5b0b200541f0006ead21080240024002402006450d0020024180166a41086a210e034020024180166a2001109b022002280284162103200228028016210420024198086a200e41e80010e9081a2003450d0320024198126a20024198086a41e80010e9081a02402008422088220ba722052008a7470d00200541016a220a2005490d5d20054101742209200a200a2009491b220a4104200a41044b1bad42f0007e220b422088a745410274210a200ba721090240024020050d0020024100360280160c010b200241043602881620022007360280162002200541f0006c360284160b200241d8106a2009200a20024180166a107d20022802e010210a20022802d8104101460d0320022802dc1021072008422088220ba72105200a41f0006ead21080b2007200541f0006c6a2205200336020420052004360200200541086a20024198126a41e80010e9081a200b422086200842ffffffff0f83844280808080107c21082006417f6a22060d000b0b2007450d022000200736020420004106360200200041086a2008370200200041106a200241b0186a41a00210e9081a0c5f0b200a0d5b0c590b02402008422088a72201450d002007200141f0006c6a2106200721010340024020012203410c6a2802002205450d0020032802042101200541246c210503400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012005415c6a22050d000b0b200341f0006a21010240200341086a2802002205450d00200541246c450d002003280204102e0b20012006470d000b0b2008a72201450d00200141f0006c450d002007102e0b2000411c3602000c5c0b02402007450d0020052d0001210620012003417e6a22193602042001200541026a3602004100211a410021124107210d0240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020060e170001020304056d060708090a0b0c0d0e0f101112131415170b20024180166a200110e60120022d0080164105460d1620024198086a41086a20024194166a29020037030020024198086a41106a2002419c166a29020037030020022002418c166a2902003703980820024180166a41086a28020021092002280284162111200228028016210e200241e8016a200110db0420022903e801a70d1520042802002205450d15200241e8016a41106a290300210c20022903f001210b200128020022032d0000210620012005417f6a3602044101210d2001200341016a3602004100210a02400240024002400240024020060e0505000102031b0b4101210a0c030b4102210a0c020b20024180166a200110930120022d0080164101460d18200241d8106a41106a20024191166a290000370300200241f0106a20024199166a2900002210370300200241e0106a20024189166a290000370300200220022900811622143703d81020022f00eb10200241ed106a2d0000411074722103200241e6106a310000210820022801da10210720022901de10211320022800e710210520022f01ee10211b20022f00f110211c20022800f310211d20022d00f710211e2014a7210f2010a7211f4103210a0c020b4104210a0b0b20024198126a41106a20024198086a41106a29030037030020024198126a41086a20024198086a41086a29030022143703002003ad4228862005ad42088684200842ff01838422084220882110201342208820084220868421082013a7221241807e71211a200229039808211320022d00a212212020022f00a312212120022800a512212220022d00a912212320022f01aa12212420022802ac1221252014a721260c6c0b20024180026a200110db04200229038002a70d15200229038802220b42208820024190026a290300220c422086842108200c4220882110200ba7221241807e71211a4102210d0c6a0b20024198026a200110db04200229039802a70d1420022903a002220b422088200241a8026a290300220c422086842108200c4220882110200ba7221241807e71211a4103210d0c690b4104210d20194104490d132005280002210720012003417a6a3602042001200541066a360200420021080c670b200241b0026a200110ab0120022802b0020d1220022802b40221052002418094ebdc0336028416200220053602801620042802002203450d1220024180166a2005418094ebdc034b4102746a2802002107200128020022052d0000210620012003417f6a3602042001200541016a3602004105210d41002112024020060e026900130b410121120c670b20024180166a200110e5012002280280162207450d11200228028416221241807e71211a20024188166a3502002108420021104106210d0c660b2019450d1020052d0002210620012003417d6a3602042001200541036a3602004100210a02400240024002400240024020060e050500010203160b4101210a0c030b4102210a0c020b20024180166a200110930120022d0080164101460d13200241d8106a41106a20024191166a290000370300200241d8106a41086a20024189166a290000370300200241f0106a220120024199166a29000037030020024198086a41086a200241e6106a29010037030020024198086a41106a200241ee106a2f01003b0100200220022900811622083703d810200220022901de103703980820022801da1021072001290300210b2008a7210f4103210a0c020b4104210a0b0b4108210d200229039808220c42208820024198086a41086a2903002210422086842108200ca7221241807e71211a20104220882110200b423888a7211e200b421888a7211d200b420888a7211c200241a8086a2f0100211b200ba7211f0c660b20024180166a200110e60120022d0080164105460d0f200229028416220b4220882002418c166a290200220c422086842108200ba7221241807e71211a200c4220882110200241a0166a280200210e2002419e166a2f010021272002419d166a2d0000211e20024199166a280000211d20024197166a2f0000211c20024196166a2d0000211f20024194166a2f0100211b20022802801621074109210d0c640b200241b8026a200110ab0120022802b8020d0e20022802bc02210742002108410a210d0c620b200241c0026a200110ab0120022802c0020d0d20022802c402210742002108410b210d0c610b2019450d0c20052d0002210a20012003417d6a3602042001200541036a360200200a41e5004f0d0c42002108410c210d41002112420021100c620b410d210d410021120c600b410e210d410021120c5f0b200241c8026a200110ab01024020022802c802450d0020024100360280160c0a0b20024180166a200120022802cc021092012002280280162207450d09200228028416221241807e71211a20024188166a350200210842002110410f210d0c5e0b20024180166a200110930120022d0080164101460d084110210d200241d8106a41086a220520024180166a41106a290300370300200241d8106a41106a20024180166a41186a290300370300200241d8106a41186a200241a0166a2d00003a0000200220024180166a41086a2903003703d810200428020022034104490d08200228028416210720022f018216210f20022d008116210a20012802002206280000210e20012003417c6a3602042001200641046a36020020022903d810220b4220882005290300220c422086842108200ba7221241807e71211a200c422088211020022f01e810211b20022d00ea10211f20022f00eb10211c20022800ed10211d0c5e0b4111210d410021120c5c0b20194104490d062005280002210720012003417a6a3602042001200541066a36020020024180166a200110e7012002280280162212450d06201241807e71211a2002290284162108420021104112210d0c5b0b20024180166a200110930120022d0080164101460d05200428020022054104490d05200241a0166a310000211020024198166a290300210b20024190166a290300210c20024188166a2903002113200228028416210720022f018216210f20022d008116210a20012802002203280000210e20012005417c6a3602042001200341046a3602002013422088200c422086842108200b422888201042188684a7211d200c42208821102013a7221241807e71211a200b421888a7211c200b421088a7211f200ba7211b4113210d0c5b0b200241d0026a200110db0420022903d002a70d0420022903d802220b422088200241e0026a290300220c422086842108200c4220882110200ba7221241807e71211a4114210d0c590b200241f0026a200110ab0120022802f0020d0320022802f4022107200241e8026a200110ab0120022802e8020d0320022802ec02221241807e71211a4115210d0c580b20024180166a200110930120022d0080164101460d02200428020022054104490d0220024190166a290300210b20024188166a290300210c2002419d166a280000211d2002419b166a2f0000211c2002419a166a2d0000211f20024198166a2f0100211b200228028416210720022f018216210f20022d008116210a20012802002203280000210e20012005417c6a3602042001200341046a360200200c422088200b422086842108200b4220882110200ca7221241807e71211a4116210d0c580b20024180166a200110e5012002280280162207450d01200229028416220b4220882108200ba7221241807e71211a420021104117210d0c560b200e41ff01714102470d002009450d002011102e0b2000411c3602000c5b0b02402007450d0020012003417e6a3602042001200541026a3602000b2000411c3602000c5a0b02402007450d0020052d0001210620012003417e6a3602042001200541026a3602004100210502400240024020060e020001030b200241b0186a200110990320022d00b0184101460d0220024180166a200241b0186a41017241c00110e9081a200241f8026a200110ab0120022802f8020d022004280200220620022802fc022203490d022003417f4c0d570240024020030d00410121050c010b200310322205450d5a200428020021060b20062003490d0120052001280200200310e9082106200128020422072003490d1d2001200720036b3602042001200128020020036a3602002006450d022003ad2208422086200884210820024198086a20024180166a41c00110e9081a0b20024198126a20024198086a41c00110e9081a200041086a20083702002000200536020420004109360200200041106a20024198126a41c00110e9081a200041d0016a200241d8106a41e00010e9081a0c5b0b2005102e0b2000411c3602000c590b02402007450d0020052d0001210620012003417e6a22073602042001200541026a360200024002400240024020060e03000102040b200241b0186a200110c80620022903b81822084202510d0320022802bc18210520022802b418210320022802b018210620024198086a200241c0186a41e40010e9081a200241a8196a280200210720022802ac19210420022802a419210a20024180166a200241b0186a4180016a41800110e9081a200241b0186a200110f70120022802b418450d032008a72101200241bc186a290200210b20022802b018210e20022902b418210c200241880b6a20024198086a41e40010e9081a20024198126a20024180166a41800110e9081a200c422088200b422086842108200b422088210b200ca721094101210d0c020b200241b0186a200110c80620022903b81822084202510d0220022802bc18210520022802b418210320022802b0182106200241980f6a200241c0186a41e40010e9081a200241a8196a280200210720022802ac19210420022802a419210a20024180166a200241b0186a4180016a41800110e9081a200241b0186a200110f70120022802b418450d022008a72101200241bc186a290200210b20022802b018210e20022902b418210c20024198156a200241980f6a41e40010e9081a20024198086a20024180166a41800110e9081a200241880b6a20024198156a41e40010e9081a20024198126a20024198086a41800110e9081a200c422088200b422086842108200b422088210b200ca721094102210d0c010b20074104490d012005280002210e20012003417a6a22063602042001200541066a36020020064104490d01200528000621092001200341766a36020420012005410a6a360200200241880b6a20024180166a41e40010e9081a20024198126a200241b0186a41800110e9081a4103210d0b200241a00a6a200241880b6a41e40010e9081a200241d8106a20024198126a41800110e9081a2000411c6a200b3e0200200041146a20083702002000412c6a2005360200200041286a2001360200200041246a2003360200200041206a2006360200200041106a20093602002000410c6a200e360200200041086a200d3602002000410a360200200041306a200241a00a6a41e40010e9081a2000419c016a200436020020004198016a200736020020004194016a200a360200200041a0016a200241d8106a41800110e9081a200041a8026a200241e80e6a41086a290300370300200041a0026a20022903e80e3703000c590b2000411c3602000c580b2007450d4e20052d0001210620012003417e6a22073602042001200541026a36020020060d4e20074104490d4e2005280002210620012003417a6a3602042001200541066a36020020024190036a200110ab012002280290030d4e200428020022032002280294032205490d4e2005417f4c0d520240024020050d00410121070c010b200510322207450d55200428020021030b0240024020032005490d0020072001280200200510e908210e2001280204220320054f0d012005200341b8b2c0001056000b2007102e0c4f0b2001200320056b3602042001200128020020056a360200200e450d4e2005ad2208422086200884211020024188036a200110ab010240024002402002280288030d00200228028c03220a2004280200410c6e22052005200a4b1bad420c7e2208422088a70d552008a72205417f4c0d550240024020050d00410421090c010b2005102c2209450d580b2005410c6ead21080240024002400240200a450d00034020024180036a200110ab012002280280030d04200428020022032002280284032205490d042005417f4c0d5a0240024020050d00410121070c010b200510322207450d5d200428020021030b20032005490d0320072001280200200510e9082107200128020422032005490d1f2001200320056b3602042001200128020020056a3602002007450d0402402008422088220ba722032008a7470d00200341016a220d2003490d5b2003410174220f200d200d200f491b220d4104200d41044b1bad420c7e220b422088a745410274210d200ba7210f0240024020030d0020024100360298080c010b200241043602a008200220093602980820022003410c6c36029c080b20024198126a200f200d20024198086a107d20022802a012210d2002280298124101460d03200228029c1221092008422088220ba72103200d410c6ead21080b20092003410c6c6a22032005ad220c422086200c8437020420032007360200200b422086200842ffffffff0f83844280808080107c2108200a417f6a220a0d000b0b2009450d032002200936028816200428020021052002200837028c1620022010370380162010a7210320054104490d0420012802002207280000210a20012005417c6a22043602042001200741046a36020020044104490d042007280004210d2001200541786a22043602042001200741086a36020020044104490d04200728000821092001200541746a36020420012007410c6a36020020024180166a410c6a2902002108200229028416210b20024180166a200110a701200b422088a721042008422088a721012008a7210720022d0080164101470d0502402003450d00200e102e0b02402001450d002001410c6c21052004210103400240200141046a280200450d002001280200102e0b2001410c6a2101200541746a22050d000b0b2007450d542007410c6c450d542004102e0c540b200d0d590c570b2007102e0b02402008422088a72201450d002001410c6c21052009210103400240200141046a280200450d002001280200102e0b2001410c6a2101200541746a22050d000b0b2008a72201450d002001410c6c450d002009102e0b2010a7450d50200e102e0c500b2008422088a7210102402003450d00200e102e0b2008a7210302402001450d002001410c6c21052009210103400240200141046a280200450d002001280200102e0b2001410c6a2101200541746a22050d000b0b2003450d4f2003410c6c450d4f2009102e0c4f0b200e450d4e200241b9166a290000210820024180166a41316a290000210c200241ad166a2800002105200241ab166a2f0000210f200241a6166a280100211120024180166a41246a2f01002112200241a3166a2d0000211b200241a1166a2f0000211c20024199166a290000211020024195166a280000211d20024191166a280000211f2002418d166a280000211e20024180166a410b6a2f000021272002418a166a2d00002126200228018616212020022f018416212120022d008316212220022f00811621232000200241aa166a2d00003a00552000201b3a004e200020263a0035200020223a002e200020063602042000410b360200200041e4006a2008370200200041dc006a200c370200200041d8006a2005360200200041d6006a200f3b0100200041d1006a2011360000200041cf006a20123b0000200041cc006a201c3b0100200041c4006a2010370200200041c0006a201d3602002000413c6a201f360200200041386a201e360200200041366a20273b0100200041316a20203600002000412f6a20213b00002000412c6a20233b0100200041286a2009360200200041246a200d360200200041206a200a3602002000411c6a2001360200200041186a2007360200200041146a2004360200200041106a200ba73602002000410c6a2003360200200041086a200e360200200041ec006a200241b0186a41c40110e9081a0c570b02402007450d0020012003417e6a3602042001200541026a3602000b2000411c3602000c560b2007450d4a20052d0001210720012003417e6a22063602042001200541026a360200410d211b024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020070e19000102030405060708090a0b640c0d0e0f1011121314151617630b41002107200241003a00a0162003417d6a21030240034020062007460d0120024180166a20076a200520076a220441026a2d00003a0000200120033602042001200441036a3602002002200741016a22043a00a0162003417f6a21032004210720044120470d000b200441ff01714120490d63200228029c16211120022f019a16210f20022d009916211220022f009716210a200229008f162108200228008b16211c200228008716211d200228008316210e20022f008116210920022d008016210d20024198036a200110db0420022802980322010d63411a410120011b211b200241a8036a290300210c20022903a003210b0c640b200741ff0171450d62200241003a00a0160c620b200241b8036a200110ab0120022802b8030d6120022802bc03210e200241b0036a200110ab0120022802b0030d6120022802b403211d4102211b0c620b200241c0036a200110ab0120022802c0030d6020022802c403210e20024180166a200110b10420022d0080164102460d60200241a0166a290300210b2002419c166a280200211e2002419a166a2f0100212720024199166a2d0000211f20024195166a280000211120024193166a2f0000210f20024192166a2d0000211220024190166a2f0100210a20024188166a2903002108200228028416211c200228028016211d4200210c4103211b0c610b4104211b20064104490d5f2005280002210e20012003417a6a3602042001200541066a3602000c600b41002107200241003a00a0162003417d6a21030240034020062007460d0120024180166a20076a200520076a220441026a2d00003a0000200120033602042001200441036a3602002002200741016a22043a00a0162003417f6a21032004210720044120470d000b200441ff01714120490d5f200228029c16211120022f019a16210f20022d009916211220022f009716210a200229008f162108200228008b16211c200228008716211d200228008316210e20022f008116210920022d008016210d4105211b0c600b200741ff0171450d5e200241003a00a0160c5e0b41002107200241003a00a0162003417d6a21030240034020062007460d0120024180166a20076a200520076a220441026a2d00003a0000200120033602042001200441036a3602002002200741016a22043a00a0162003417f6a21032004210720044120470d000b200441ff01714120490d5e200228029c16211120022f019a16210f20022d009916211220022f009716210a200229008f162108200228008b16211c200228008716211d200228008316210e20022f008116210920022d008016210d4106211b0c5f0b200741ff0171450d5d200241003a00a0160c5d0b41002107200241003a00a0162003417d6a21030240034020062007460d0120024180166a20076a200520076a220441026a2d00003a0000200120033602042001200441036a3602002002200741016a22043a00a0162003417f6a21032004210720044120470d000b200441ff01714120490d5d200228029c16211120022f019a16210f20022d009916211220022f009716210a200229008f162108200228008b16211c200228008716211d200228008316210e20022f008116210920022d008016210d4107211b0c5e0b200741ff0171450d5c200241003a00a0160c5c0b41002107200241003a00a0162006411f2006411f491b20056a41036a211b417d210a0240034020062007460d0120024180166a20076a200520076a220441026a2d00003a000020012003200a6a3602042001200441036a3602002002200741016a22043a00a016200a417f6a210a2004210720044120470d000b200441ff01714120490d5c200320046b2203417e6a4104490d5c200228029c16211120022f019a16210f20022d009916211220022f009716210a200229008f162108200228008b16211c200228008716211d200228008316210e20022f008116210920022d008016210d201b280000211e20012003417a6a22063602042001200520046a220541066a220736020020064104490d5c2007350000210b2001200341766a36020420012005410a6a3602004200210c4108211b0c5d0b200741ff0171450d5b200241003a00a0160c5b0b41002107200241003a00a0162003417d6a21030240034020062007460d0120024180166a20076a200520076a220441026a2d00003a0000200120033602042001200441036a3602002002200741016a22043a00a0162003417f6a21032004210720044120470d000b200441ff01714120490d5b200228029c16211120022f019a16210f20022d009916211220022f009716210a200229008f162108200228008b16211c200228008716211d200228008316210e20022f008116210920022d008016210d4109211b0c5c0b200741ff0171450d5a200241003a00a0160c5a0b200241c8036a200110ab0120022802c8030d5920022802cc03210e410a211b0c5a0b20064104490d582005280002210e20012003417a6a3602042001200541066a360200410b211b0c590b20024180166a200110930120022d0080164101460d5720042802002203450d572002419d166a28000021112002419b166a2f0000210f2002419a166a2d0000211220024198166a2f0100210a20024190166a29030021082002418c166a280200211c20024188166a280200211d200228028416210e20022f018216210920022d008116210d200128020022052d0000210620012003417f6a22073602042001200541016a3602004100211f024002400240024002400240024020060e07060500010203045e0b4102211f0c050b4103211f0c040b4104211f0c030b4105211f0c020b4106211f0c010b4101211f0b20074110490d57200541096a290000210c2005290001210b20012003416f6a3602042001200541116a360200410c211b0c580b410e211b0c570b200241d0036a200110ab0120022802d0030d552004280200220320022802d4032205490d552005417f4c0d5b0240024020050d004101210e0c010b20051032220e450d5e200428020021030b20032005490d0a200e2001280200200510e9082103200128020422062005490d1f2001200620056b3602042001200128020020056a3602002003450d552005ad22084220862008842208422088a7211c2008a7211d410f211b0c560b200241d8036a200110ab0120022802d8030d542004280200220320022802dc032205490d542005417f4c0d5a0240024020050d004101210e0c010b20051032220e450d5d200428020021030b20032005490d09200e2001280200200510e9082103200128020422062005490d152001200620056b3602042001200128020020056a3602002003450d542005ad22084220862008842208422088a7211c2008a7211d4110211b0c550b200241e0036a200110ab0120022802e0030d532004280200220320022802e4032205490d532005417f4c0d590240024020050d004101210e0c010b20051032220e450d5c200428020021030b20032005490d08200e2001280200200510e9082103200128020422062005490d132001200620056b3602042001200128020020056a3602002003450d532005ad22084220862008842208422088a7211c2008a7211d4111211b0c540b200241e8036a200110ab0120022802e8030d522004280200220320022802ec032205490d522005417f4c0d580240024020050d004101210e0c010b20051032220e450d5b200428020021030b20032005490d07200e2001280200200510e9082103200128020422062005490d112001200620056b3602042001200128020020056a3602002003450d522005ad22084220862008842208422088a7211c2008a7211d4112211b0c530b41002107200241003a00a0162003417d6a21030240034020062007460d0120024180166a20076a200520076a220441026a2d00003a0000200120033602042001200441036a3602002002200741016a22043a00a0162003417f6a21032004210720044120470d000b200441ff01714120490d52200229008716210b2002418f166a2900002108200228029c16211120022f019a16210f20022d009916211220022f009716210a200228008316210e20022f008116210920022d008016210d200241f0036a200110ab0120022802f00322010d52200b422088a7211c200ba7211d411a411320011b211b20022802f403211e0c530b200741ff0171450d51200241003a00a0160c510b20024180166a200110930120022d0080164101460d5020024188166a290300220b422088a7211c20024190166a29030021082002419d166a28000021112002419b166a2f0000210f2002419a166a2d0000211220024198166a2f0100210a200228028416210e20022f018216210920022d008116210d200ba7211d4114211b0c510b20064104490d4f2005280002210e20012003417a6a3602042001200541066a3602004115211b0c500b20024180166a200110930120022d0080164101460d4e200428020022054104490d4e20024190166a290300210820024188166a290300210b2002419d166a28000021112002419b166a2f0000210f2002419a166a2d0000211220024198166a2f0100210a200228028416210e20022f018216210920022d008116210d20012802002203280000211e20012005417c6a3602042001200341046a360200200b422088a7211c200ba7211d4116211b0c4f0b41002107200241003a00a0162006411f2006411f491b20056a41036a210f417d21040240034020062007460d0120024180166a20076a200520076a220a41026a2d00003a00002001200320046a3602042001200a41036a3602002002200741016a220a3a00a0162004417f6a2104200a2107200a4120460d4e0c000b0b200741ff0171450d4d200241003a00a0160c4d0b41002107200241003a00a016417d21040240034020062007460d0120024180166a20076a200520076a220a41026a2d00003a00002001200320046a3602042001200a41036a3602002002200741016a220a3a00a0162004417f6a2104200a2107200a4120460d4c0c000b0b200741ff0171450d4c200241003a00a0160c4c0b200241f8036a200110ab0120022802f8030d4b20022802fc03210e4119211b0c4c0b200e102e0c4a0b20024198086a200110c906024020022d0098084107460d0020024198126a41306a20024198086a41306a290300220837030020024198126a41286a20024198086a41286a290300220b37030020024198126a41206a20024198086a41206a290300220c37030020024198126a41186a20024198086a41186a290300221037030020024180166a410c6a20024198086a41086a29030037020020024180166a41146a20024198086a41106a29030037020020024180166a411c6a201037020020024180166a41246a200c37020020024180166a412c6a200b37020020024180166a41346a20083702002002200229039808370284162000410e36020020002002290280163702042000410c6a20024180166a41086a290200370200200041146a20024180166a41106a2902003702002000411c6a20024180166a41186a290200370200200041246a20024180166a41206a2902003702002000412c6a20024180166a41286a290200370200200041346a20024180166a41306a2902003702002000413c6a200241b8166a280200360200200041c0006a200241b0186a41f00110e9081a0c550b2000411c3602000c540b2007450d4520052d0001210620012003417e6a22073602042001200541026a36020002400240024002400240024002400240024020060e060001020304054e0b20024180046a200110ab010240200228028004450d0020024100360280160c4e0b20024180166a20012002280284041092012002280280162206450d4d200228028416210e20042802002205450d0520024188166a2802002109200128020022072d0000210a20012005417f6a22033602042001200741016a3602000240024002400240200a0e020201000b200241023a0098120c090b20024180166a2001109301024020022d0080164101470d00200241023a0098120c090b200241d8106a41186a20024199166a290000370300200241e8106a20024191166a290000370300200241e0106a20024189166a290000370300200220022900811622083703d810200241e7106a290000210b20022900df10210c20022f00ef10210720022d00f110210520022f01f210210320022802f410210a20022f00d910210d200220022800db10220f36029c122002200d3b019a12200220083c009912200241013a0098122002200a36009d08200220033b009b08200220053a009a08200220073b019808200f411876210a200428020021030c010b200241003a00981220022d009f12210a0b20034104490d0620022d009a12210d20022f019812210f2002290099082110200228009b1221052002200c3700990f200241a10f6a200b37000020012802002204350000210820012003417c6a3602042001200441046a3602002002200a3a00980f200220073a00a90f200c423888200b42088684a72104200f200d4110747222074180feff0771410876210a2010423888a721012010421888a7210d2010420888a7210f200c421888a72111200b421888a7211c20022802980f210320022f01a80f21122010a7211b4101211d0c4c0b200110cb042205450d4c20024188046a200110ab012002280288040d06200228028c0421034102211d420021084100211c410021090c4b0b20024198046a200110ab012002280298040d4b200228029c042105200110cb042203450d4b20024190046a200110ab0102402002280290040d0020022802940421114103211d420021084100211c410021090c490b2003108b022003102e0c4b0b41002106200241003a00a0162003417d6a21030240034020072006460d0120024180166a20066a200520066a220a41026a2d00003a0000200120033602042001200a41036a3602002002200641016a220a3a00a0162003417f6a2103200a2106200a4120460d4a0c000b0b200641ff0171450d4a200241003a00a0160c4a0b41002106200241003a00a0162003417d6a21030240034020072006460d0120024180166a20066a200520066a220441026a2d00003a0000200120033602042001200441036a3602002002200641016a22043a00a0162003417f6a21032004210620044120470d000b200441ff01714120490d4a200229009716210b2002419f166a31000021132002418f166a290000210c2002290087162110200228008316210520022f008116210a20022d0080162107200241c0046a200110ab0120022802c0040d4a20022802c4042106200241b0046a200110d90420022903b004a70d4a20022903b8042108200241a8046a200110ab0120022802a8040d4a200b422888201342188684a7210d200b421888a7210f200b421088a7211b200ba7211220022802ac04210e200c422088a7211c2010422088a72111200ca721042010a721034105211d0c470b200641ff0171450d49200241003a00a0160c490b41002106200241003a00a0162003417d6a21030240034020072006460d0120024180166a20066a200520066a220441026a2d00003a0000200120033602042001200441036a3602002002200641016a22043a00a0162003417f6a21032004210620044120460d460c000b0b200641ff0171450d48200241003a00a0160c480b200241023a0098120b200e41ffffff3f71450d462006102e0c460b2005108b022005102e0c450b2007450d3f20052d0001210620012003417e6a22113602044102210d2001200541026a3602000240024002400240024020060e06004301020304440b200241e0046a200110ab01024020022802e004450d0020024100360280160c440b20024180166a200120022802e4041092012002280280162207450d43200229028416210b200241c8046a200110db04024020022903c804a70d0020022903d0042208423888200241d8046a290300220c42088684a7210f200c421888210c200b422088a7210a200ba7210e4101210d0c430b200b42ffffff3f83500d432007102e0c430b200241e8046a200110ab0120022802e8040d4220022802ec04210720023500eb10200241ef106a31000042208684210c20023502e010200241e4106a330100200241e6106a3100004210868442208684210820022903f010210b20022800e710210f20022802dc10210a4103210d0c410b2011450d4120052d0002210620012003417d6a3602042001200541036a3602004104210d4100210f4200210c410021070240024020060e03420001430b410121070c410b200241f0046a200110ab0120022802f0040d4120022802f404210e410221070c400b20024180166a200110e60120022d0080164105460d4020024198086a41086a20024194166a290200370300200241a8086a2002419c166a29020037030020022002418c166a2902003703980820024180166a41086a280200210a200228028416210e2002280280162107024020042802002205450d00200128020022032d0000210620012005417f6a3602042001200341016a360200410021090240024020060e020100020b410121090b2002290398082208423888200241a0086a290300220b42088684a7210f200b421888210c200241a8086a290300210b4105210d0c400b200741ff01714102470d40200a450d40200e102e0c400b20114104490d3f2005280002210720012003417a6a22063602044106210d2001200541066a36020020064104490d3f2005280006210e2001200341766a36020420012005410a6a3602004100210f4200210c0c3e0b2007450d3c20052d0001210620012003417e6a3602042001200541026a3602004107210502400240024002400240024020060e0700010203040541420b20024180166a20011093014101210520022d0080164101460d4120024190166a290300220b422088a7210920024188166a29030021082002419d166a28000021262002419b166a2f000021122002419a166a2d0000212020024198166a2f0100210f200228028416210320022f018216210720022d0081162104200ba7210d0c400b20024180166a200110930120022d0080164101460d40200241d8106a41186a200241a0166a2d00003a0000200241d8106a41106a20024180166a41186a290300220b37030020024180166a41106a290300220c422088a7210920024188166a2903002108200228028416210320022f018216210720022d008116210420022800ed10212620022f00eb10211220022d00ea102120200ba7210f200ca7210d410221050c3f0b20024180166a200110930120022d0080164101460d3f200241980f6a41086a220520024180166a41106a2206290300370300200241980f6a41106a20024180166a41186a220a290300370300200241980f6a41186a220e200241a0166a2d00003a0000200220024180166a41086a220d2903003703980f200228028416210320022f018216210720022d008116210420024180166a200110930120022d0080164101460d3f20022903a80f2210422888200e31000042188684a721262010421888a721122010421088a7212020052903002213422088a721092006290300210c200d290300210b2002419d166a280000211c2002419b166a2f0000211b2002419a166a2d0000211d200a2f01002111200228028416211f20022f018216211e20022d008116212720022903980f21082010a7210f2013a7210d410321050c3e0b200241f8046a200110ab01024020022802f804450d0020024100360298080c3f0b20024198086a200120022802fc041092012002280298082203450d3e200229029c0821082002418c166a290200210c200229028416210b20022d009c12212720022f009d12211e20022f019416211120022d009616211d20022f009716211b200228009916211c20022d009d16210e20022f019e16210a41042105410021094100210d0c3d0b20024180166a200110930120022d0080164101460d3d20024190166a290300220b422088a7210920024188166a29030021082002419d166a28000021262002419b166a2f000021122002419a166a2d0000212020024198166a2f0100210f200228028416210320022f018216210720022d0081162104200ba7210d410521050c3c0b20024180166a200110930120022d0080164101460d3c200241f0106a20024199166a290000370300200241e8106a20024191166a290000370300200241e0106a20024189166a2900003703002002200229008116220b3703d81020022f00d910210720022800db10210320022900df10210820022800e710210d20022800eb10210920022f00ef10210f20022d00f110212020022f01f210211220022802f4102126200ba72104410621050c3b0b02402007450d0020052d0001210620012003417e6a3602042001200541026a3602000240024002400240024020060e03000102050b20024180056a200110db04200229038005a70d0420024190056a2903002108200229038805210b20024180166a200110e60120022d0080164105460d042002290380162214422088a7210120024190166a290300210c20024188166a2903002110200241a0166a280200210520024198166a29030021132014a72103410121060c030b20024198056a200110ab0120022802980522010d034104410220011b2106200228029c0521030c010b200241a0056a200110ab0120022802a00522010d024104410320011b210620022802a40521030b0b20004112360200200041386a2008370200200041306a200b3702002000411c6a200c370200200041146a20103702002000412c6a2005360200200041246a2013370200200041106a20013602002000410c6a2003360200200041086a2006360200200041c0006a200241b0186a41f00110e9081a0c510b2000411c3602000c500b2007450d3820052d0001210620012003417e6a22073602042001200541026a360200024002400240024002400240024020060e0500010203043f0b20024180166a200110930120022d0080164101460d3e20024190166a2204290300210820024188166a2212290300210b2002419d166a220928000021072002419b166a220d2f0000210a2002419a166a220f2d0000210e20024180166a41186a22112f0100211b200228028416210520022f018216210620022d008116210320024180166a200110a80120022d0080164101460d3e2002200b3703d810200220073600ed102002200a3b00eb102002200e3a00ea102002201b3b01e810200220083703e010200241b0166a2903002113200241a8166a2903002110200241c0166a2f0100211b200241bc166a280200211c200241b8166a280200211d200241a4166a2802002107200241a2166a2f0100210a200241a1166a2d0000210e20092800002109200d2f0000210d200f2d0000210f20112f010021112004290300210c2002418c166a280200211f201228020021122002350081162002330085162002310087164210868442208684420886200241d8106a41186a3100008421142008423088a721012008422888a7210420022903e8102118410121270c3c0b200241003a0094162007450d3d20052d0002210620012003417d6a22073602042001200541036a360200200241013a009416200220063a00801620070d1a0c3c0b20024180166a200110930120022d0080164101460d3c200241980f6a41086a20024180166a41106a2212290300370300200241980f6a41106a20024180166a41186a2211290300370300200241980f6a41186a200241a0166a2d00003a0000200220024180166a41086a221e2903003703980f200228028416210520022f018216210620022d008116210320024180166a200110a80120022d0080164101460d3c200241b0166a2903002113200241a8166a2903002110200241c0166a2f0100211b200241bc166a280200211c200241b8166a280200211d200241a4166a2802002107200241a2166a2f0100210a200241a1166a2d0000210e2002419d166a28000021092002419b166a2f0000210d2002419a166a2d0000210f20112f010021112012290300210c2002418c166a280200211f201e28020021122002350081162108200233008516210b2002310087162114200241a8056a200110ab0120022802a8050d3c2004280200222620022802ac052227490d3c2027417f4c0d4e0240024020270d004101211e0c010b20271032221e450d51200428020021260b20262027490d02201e2001280200202710e9082104200128020422262027490d112001202620276b3602042001200128020020276a3602002004450d3c2008200b20144210868442208684420886200241b00f6a3100008421142027ad22084220862008842217422088a72121200241a00f6a2903002208423088a721012008422888a7210420022903a80f211820022903980f210b2017a72120410321270c3a0b200241b0056a200110ab0120022802b0050d3b2004280200220620022802b4052203490d3b2003417f4c0d4d0240024020030d00410121050c010b200310322205450d50200428020021060b20062003490d0220052001280200200310e9082106200128020422072003490d0f2001200720036b3602042001200128020020036a3602002006450d3b2003ad2208422086200884210b410421270c390b200241003a0094162007450d3a20052d0002210620012003417d6a22073602042001200541036a360200200241013a009416200220063a00801620070d160c360b201e102e0c390b2005102e0c380b02402007450d0020052d0001210620012003417e6a3602042001200541026a3602004101210e024002400240024002400240024020060e0403000102070b20024180166a200110e60120022d0080164105460d06200229038016220b422088a7210520024190166a290300211020024188166a2903002108200241a0166a280200210720024198166a290300210c200ba721034102210e0c020b20024180166a200110e60120022d00801622034105460d0520024198126a41086a20024194166a29020037030020024198126a41106a2002419c166a28020036020020022002418c166a2902003703981220024180166a41086a280200210e20022802841621050240200428020022044110490d0020022d008316210920022f008116210d200241a0166a28020021072001280200220641086a290000210b200629000021132001200641106a3602002001200441706a220a360204200a4110490d00200641186a2900002114200629001021182001200441606a220a3602042001200641206a360200200a4104490d002006280020210a20012004415c6a3602042001200641246a360200200241ac086a200241a8126a280200360200200241a4086a20024198126a41086a2903003702002002200e36029808200220022903981237029c08200d200941107472410874200372210320024198086a41086a2903002110200229039808210820022903a808210c420021154103210e420021280c020b20034102470d05200e0d040c050b20024180166a200110e60120022d0080164105460d0420024180166a41106a220a2903002110200241a0166a220e280200210720024198166a2209290300210c20024188166a220629030021082002280284162105200228028016210320024180166a200110e60120022d0080164105460d022006290300210b200228028416210f200228028016210d200428020022044110490d01200a2903002118200e280200210a200929030021142001280200220641086a2900002117200629000021132001200641106a3602002001200441706a220e360204200e4110490d01200641186a2900002116200629001021292001200441606a22093602042001200641206a3602004104210e20094104490d012006280020210920012004415c6a3602042001200641246a36020020022009360290162017422086201342208884212820134220862115200fad422086200dad8421132002202937038016200228028416210d200229039016212a2029a721090b20004114360200200041f8006a202a370200200041f0006a2016370200200041dc006a20283e0200200041d4006a2015370200200041c0006a2018370200200041386a200b3702002000411c6a2010370200200041146a2008370200200041ec006a200d360200200041e8006a2009360200200041e0006a2017370200200041d0006a200a360200200041c8006a2014370200200041306a20133702002000412c6a2007360200200041246a200c370200200041086a200e3602002000410c6a2005ad4220862003ad8437020020004180016a200241b0186a41b00110e9081a0c520b200d41ff01714102470d00200ba7450d00200f102e0b200341ff01714102470d012008a7450d010b2005102e0b2000411c3602000c4e0b20024180166a200110ca06024020022f0180164104460d0020024198086a41086a20024180166a41086a29030022083703002002200229038016220b37039808200041153602002000200b3702042000410c6a2008370200200041146a200241b0186a419c0210e9081a0c4e0b2000411c3602000c4d0b2007450d2f20052d0001210720012003417e6a222b3602042001200541026a3602004104210e0240024020070e0f000126282524232221201f1e1d1c1b310b20024180166a20011093014101210e20022d0080164101460d30200241800e6a41086a200241a00a6a41086a280000360200200241fc0d6a41026a200241e80e6a41026a2d00003a0000200220022900a00a3703800e200220022f00e80e3b01fc0d20024180166a41106a290300210b20024180166a41086a29030021082002419d166a280000210f2002419b166a2f000021122002419a166a2d0000211b20024180166a41186a2f01002111200228028416210620022f018216212c20022d008116212d200241e00d6a41106a20024198086a41106a290000370300200241e00d6a41086a20024198086a41086a29000037030020022002290098083703e00d200241dc0d6a41026a200241b80e6a41026a2d00003a0000200220022f00b80e3b01dc0d200241c00d6a41106a20024198126a41106a290000370300200241c00d6a41086a20024198126a41086a29000037030020022002290098123703c00d200241bc0d6a41026a200241900e6a41026a2d00003a0000200220022f00900e3b01bc0d200241a00d6a41106a200241d8106a41106a290000370300200241a00d6a41086a200241d8106a41086a290000370300200220022900d8103703a00d2002419c0d6a41026a200241a0146a41026a2d00003a0000200220022f00a0143b019c0d200241800d6a41106a200241980f6a41106a290000370300200241800d6a41086a200241980f6a41086a290000370300200220022900980f3703800d20024198156a41206a200241b0186a41206a28000036020020024198156a41186a200241b0186a41186a29000037030020024198156a41106a200241b0186a41106a29000037030020024198156a41086a200241b0186a41086a290000370300200220022900b018370398150c270b200241b8056a200110ab0120022802b8050d2f20022802bc052207200428020041c8006e2205200520074b1bad42c8007e2208422088a70d472008a72205417f4c0d470240024020050d00410421060c010b2005102c2206450d4a0b200541c8006ead210802400240024002402007450d0020024180166a410c6a211c20024180166a410172211e034020024180166a200110ec0302400240024020022d00801622034106460d00200241a0146a41026a220e201e41026a2d00003a0000200241a00a6a41086a2209201c41086a290200370300200241a00a6a41106a220d201c41106a2902003703002002201e2f00003b01a0142002201c2902003703a00a200228028416210a2002280288162105200241b0186a200110ec0320022d00b0184106470d0120034101470d002005450d00200a102e0b410621030c010b200241b4146a41026a200e2d00003a0000200241e80e6a41086a2009290300370300200241e80e6a41106a200d29030037030020024198086a41086a200241b0186a41086a29030037030020024198086a41106a200241b0186a41106a29030037030020024198086a41186a200241b0186a41186a29030037030020024198086a41206a200241b0186a41206a280200360200200220022f01a0143b01b414200220022903a00a3703e80e200220022903b01837039808200a211d2005211f0b200241b0146a41026a2205200241b4146a41026a2d00003a0000200241b80e6a41086a220a200241e80e6a41086a290300370300200241b80e6a41106a220e200241e80e6a41106a29030037030020024198126a41086a220920024198086a41086a29030037030020024198126a41106a220d20024198086a41106a29030037030020024198126a41186a220f20024198086a41186a29030037030020024198126a41206a221120024198086a41206a280200360200200220022f01b4143b01b014200220022903e80e3703b80e20022002290398083703981220034106460d03200241ac146a41026a221220052d00003a0000200241900e6a41086a221b200a290300370300200241900e6a41106a220a200e290300370300200241d8106a41086a220e2009290300370300200241d8106a41106a2209200d290300370300200241d8106a41186a220d200f290300370300200241d8106a41206a220f2011280200360200200220022f01b0143b01ac14200220022903b80e3703900e20022002290398123703d81002402008422088220ba722052008a7470d00200541016a22112005490d4d20054101742227201120112027491b22114104201141044b1bad42c8007e220b422088a7454102742111200ba721270240024020050d00200241003602b0180c010b200241043602b818200220063602b0182002200541c8006c3602b4180b20024180166a20272011200241b0186a107d20022802881621112002280280164101460d0320022802841621062008422088220ba72105201141c8006ead21080b2006200541c8006c6a220520033a0000200541086a201f360000200541046a201d360000200541036a20122d00003a0000200520022f01ac143b00012005410c6a20022903900e370000200541146a201b2903003700002005411c6a200a290300370000200541346a20092903003700002005412c6a200e2903003700002005413c6a200d290300370000200541246a20022903d810370000200541c4006a200f280200360000200b422086200842ffffffff0f83844280808080107c21082007417f6a22070d000b0b2006450d32200241b0186a200110ec0320022d00b0184106460d30200241ec0e6a200241bc186a22032d00003a00002002200241b0186a41086a22072802003602e80e200241bd186a280000210f200241c1186a2d0000210d200241c2186a2f01002109200241c4186a220e280200210a200241c8186a22112903002114200241d0186a2212350200210b20022802b418212c20022802b0182105200241b0186a200110ec0320022d00b0184106460d2f200241a00a6a41086a2012280200360200200220112903003703a00a200e280200211d2003290200210c2007280200210720022802b418212d20022802b0182103200241b0186a200110ec0320022d00b018221c4106460d2e200241b4146a41026a20022d00b3183a0000200241d8106a41086a200241c4186a220e290200370300200241d8106a41106a200241cc186a2211290200370300200220022f00b1183b01b4142002200241bc186a22122902003703d810200241b0186a41086a221b280200211f20022802b418211e200241b0186a200110ec0320022d00b01822274106460d2d200241a0146a41026a20022d00b3183a000020024198126a41086a200e29020037030020024198126a41106a2011290200370300200220022f00b1183b01a0142002201229020037039812201b280200212620022802b4182120200241b0186a200110ec0320022d00b01822214106460d2c200241920e6a20022d00b3183a000020024198086a41086a200241c4186a290200370300200241a8086a200241cc186a290200370300200220022f00b1183b01900e2002200241bc186a29020037039808200241b0186a41086a280200212220022802b41821232004280200220e450d2b200128020022042d000021112001200e417f6a22123602042001200441016a3602004100212b420021104100211920110e0228022b0b20110d4b0c490b02402008422088a72201450d002006200141c8006c6a2105200621010340024020012d00004101470d00200141086a280200450d00200141046a280200102e0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102e0b200141c8006a22012005470d000b0b2008a72201450d30200141c8006c450d300c2f0b200241003a00c4182012450d2820042d000121112001200e417e6a22123602042001200441026a360200200241013a00c418200220113a00b0182012450d2720042d000221112001200e417d6a22123602042001200441036a360200200241023a00c418200220113a00b1182012450d2720042d000321112001200e417c6a22123602042001200441046a360200200241033a00c418200220113a00b2182012450d2720042d000421112001200e417b6a22123602042001200441056a360200200241043a00c418200220113a00b3182012450d2720042d000521112001200e417a6a22123602042001200441066a360200200241053a00c418200220113a00b4182012450d2720042d000621112001200e41796a22123602042001200441076a360200200241063a00c418200220113a00b5182012450d2720042d000721112001200e41786a22123602042001200441086a360200200241073a00c418200220113a00b6182012450d2720042d000821112001200e41776a22123602042001200441096a360200200241083a00c418200220113a00b7182012450d2720042d000921112001200e41766a221236020420012004410a6a360200200241093a00c418200220113a00b8182012450d2720042d000a21112001200e41756a221236020420012004410b6a3602002002410a3a00c418200220113a00b9182012450d2720042d000b21112001200e41746a221236020420012004410c6a3602002002410b3a00c418200220113a00ba182012450d2720042d000c21112001200e41736a221236020420012004410d6a3602002002410c3a00c418200220113a00bb182012450d2720042d000d21112001200e41726a221236020420012004410e6a3602002002410d3a00c418200220113a00bc182012450d2720042d000e21112001200e41716a221236020420012004410f6a3602002002410e3a00c418200220113a00bd182012450d2720042d000f21112001200e41706a22123602042001200441106a3602002002410f3a00c418200220113a00be182012450d2720042d001021112001200e416f6a22123602042001200441116a360200200241103a00c418200220113a00bf182012450d2720042d001121112001200e416e6a22123602042001200441126a360200200241113a00c418200220113a00c0182012450d2720042d001221112001200e416d6a22123602042001200441136a360200200241123a00c418200220113a00c1182012450d2720042d001321112001200e416c6a22123602042001200441146a360200200241133a00c418200220113a00c2182012450d2720042d001421112001200e416b6a3602042001200441156a360200200220113a00c31820022802b418220441087420022802b018221a4118767221242004411876212e201a410876212520022903b818211020022802c018212b410121190c250b2005200641b8b2c0001056000b2005200641b8b2c0001056000b2005200641b8b2c0001056000b2005200741b8b2c0001056000b2005200741b8b2c0001056000b2005200741b8b2c0001056000b2005200741b8b2c0001056000b2005200741b8b2c0001056000b2005200741b8b2c0001056000b2003200741b8b2c0001056000b2027202641b8b2c0001056000b2005200641b8b2c0001056000b2005200341b8b2c0001056000b2003200741b8b2c0001056000b2005200741b8b2c0001056000b2005200341b8b2c0001056000b2005200741b8b2c0001056000b20052d0003210620012003417c6a22073602042001200541046a360200200241023a009416200220063a0081162007450d1f20052d0004210620012003417b6a22073602042001200541056a360200200241033a009416200220063a0082162007450d1f20052d0005210620012003417a6a22073602042001200541066a360200200241043a009416200220063a0083162007450d1f20052d000621062001200341796a22073602042001200541076a360200200241053a009416200220063a0084162007450d1f20052d000721062001200341786a22073602042001200541086a360200200241063a009416200220063a0085162007450d1f20052d000821062001200341776a22073602042001200541096a360200200241073a009416200220063a0086162007450d1f20052d000921062001200341766a220736020420012005410a6a360200200241083a009416200220063a0087162007450d1f20052d000a21062001200341756a220736020420012005410b6a360200200241093a009416200220063a0088162007450d1f20052d000b21062001200341746a220736020420012005410c6a3602002002410a3a009416200220063a0089162007450d1f20052d000c21062001200341736a220736020420012005410d6a3602002002410b3a009416200220063a008a162007450d1f20052d000d21062001200341726a220736020420012005410e6a3602002002410c3a009416200220063a008b162007450d1f20052d000e21062001200341716a220736020420012005410f6a3602002002410d3a009416200220063a008c162007450d1f20052d000f21062001200341706a22073602042001200541106a3602002002410e3a009416200220063a008d162007450d1f20052d0010210620012003416f6a22073602042001200541116a3602002002410f3a009416200220063a008e162007450d1f20052d0011210620012003416e6a22073602042001200541126a360200200241103a009416200220063a008f162007450d1f20052d0012210620012003416d6a22073602042001200541136a360200200241113a009416200220063a0090162007450d1f20052d0013210620012003416c6a22073602042001200541146a360200200241123a009416200220063a0091162007450d1f20052d0014210620012003416b6a22073602042001200541156a360200200241133a009416200220063a00921620070d1e0c1f0b20052d0003210620012003417c6a22073602042001200541046a360200200241023a009416200220063a0081162007450d2120052d0004210620012003417b6a22073602042001200541056a360200200241033a009416200220063a0082162007450d2120052d0005210620012003417a6a22073602042001200541066a360200200241043a009416200220063a0083162007450d2120052d000621062001200341796a22073602042001200541076a360200200241053a009416200220063a0084162007450d2120052d000721062001200341786a22073602042001200541086a360200200241063a009416200220063a0085162007450d2120052d000821062001200341776a22073602042001200541096a360200200241073a009416200220063a0086162007450d2120052d000921062001200341766a220736020420012005410a6a360200200241083a009416200220063a0087162007450d2120052d000a21062001200341756a220736020420012005410b6a360200200241093a009416200220063a0088162007450d2120052d000b21062001200341746a220736020420012005410c6a3602002002410a3a009416200220063a0089162007450d2120052d000c21062001200341736a220736020420012005410d6a3602002002410b3a009416200220063a008a162007450d2120052d000d21062001200341726a220736020420012005410e6a3602002002410c3a009416200220063a008b162007450d2120052d000e21062001200341716a220736020420012005410f6a3602002002410d3a009416200220063a008c162007450d2120052d000f21062001200341706a22073602042001200541106a3602002002410e3a009416200220063a008d162007450d2120052d0010210620012003416f6a22073602042001200541116a3602002002410f3a009416200220063a008e162007450d2120052d0011210620012003416e6a22073602042001200541126a360200200241103a009416200220063a008f162007450d2120052d0012210620012003416d6a22073602042001200541136a360200200241113a009416200220063a0090162007450d2120052d0013210620012003416c6a22073602042001200541146a360200200241123a009416200220063a0091162007450d2120052d0014210620012003416b6a22073602042001200541156a360200200241133a009416200220063a00921620070d1f0c210b2000411c3602000c380b024002402007450d0020052d0001210620012003417e6a3602042001200541026a36020020060d0020024198126a2001109606200228029812450d00200241d8106a20024198126a41c00110e9081a20024198126a200110a401024002402002290398124201510d00200241880b6a41286a2205200241c8126a290300370300200241880b6a41206a220320024198126a41286a290300370300200241880b6a41186a220620024198126a41206a290300370300200241880b6a41106a220720024198126a41186a290300370300200241880b6a41086a220a20024198126a41106a290300370300200220022903a0123703880b2004280200220441044f0d010b200241d8106a109b060c010b2001280200220e280000210920012004417c6a3602042001200e41046a36020020022802d8102104200241980f6a200241d8106a41047241bc0110e9081a200241a00a6a41286a2005290300370300200241a00a6a41206a2003290300370300200241a00a6a41186a2006290300370300200241a00a6a41106a2007290300370300200241a00a6a41086a200a290300370300200220022903880b3703a00a2004450d00200241b0186a41286a200241a00a6a41286a290300370300200241b0186a41206a200241a00a6a41206a290300370300200241b0186a41186a200241a00a6a41186a290300370300200241b0186a41106a200241a00a6a41106a290300370300200241b0186a41086a200241a00a6a41086a290300370300200220022903a00a3703b018200220043602e018200241e4186a200241980f6a41bc0110e9082105200220093602a01a20024190086a200110ab0102402002280290080d00200228029408210320024188086a200110ab01200228028808450d020b200241e0186a109b060b2000411c3602000c380b200228028c082101200241e80e6a41286a2206200241b0186a41286a290300370300200241e80e6a41206a2207200241b0186a41206a290300370300200241e80e6a41186a220a200241b0186a41186a290300370300200241e80e6a41106a220e200241b0186a41106a290300370300200241e80e6a41086a2209200241b0186a41086a290300370300200220022903b0183703e80e20024180166a200541c40110e9081a200241b80e6a41086a22052009290300370300200241b80e6a41106a2209200e290300370300200241b80e6a41186a220e200a290300370300200241b80e6a41206a220a2007290300370300200241b80e6a41286a22072006290300370300200220022903e80e3703b80e20024198086a20024180166a41c40110e9081a20024198156a412c6a200729030037020020024198156a41246a200a29030037020020024198156a411c6a200e29030037020020024198156a41146a200929030037020020024198156a410c6a2005290300370200200220022903b80e37029c152000411b36020020002002290298153702042000410c6a20024198156a41086a290200370200200041146a20024198156a41106a2902003702002000411c6a20024198156a41186a290200370200200041246a20024198156a41206a2902003702002000412c6a20024198156a41286a290200370200200041346a200241c8156a280200360200200041386a20043602002000413c6a20024198086a41c40110e9081a20004184026a200136020020004180026a200336020020004188026a20022903900e37030020004190026a200241900e6a41086a29030037030020004198026a200241900e6a41106a290300370300200041a0026a200241900e6a41186a290300370300200041a8026a200241900e6a41206a2903003703000c370b02402007450d0020052d0001210620012003417e6a22073602042001200541026a3602000240024002400240024002400240024002400240024002400240024020060e060001020304050e0b200241c8076a200110ab0120022802c8070d0d2004280200220620022802cc072203490d0d2003417f4c0d3f0240024020030d00410121050c010b200310322205450d42200428020021060b20062003490d0620052001280200200310e9082106200128020422072003490d072001200720036b3602042001200128020020036a3602002006450d0d20024180166a2001109301410121012003ad22084220862008842208a72103024020022d0080164101460d00200242003703a0152002200336029815200220084220883e029c1520024190166a290300220b422088a7210d20024188166a29030021082002419d166a28000021042002419b166a2f0000210a2002419a166a2d0000210e20024198166a2f01002109200228028416210320022f018216210620022d0081162107200ba7210f0c0d0b20030d060c0d0b41002106200241003a00a0162003417d6a21030240034020072006460d0120024180166a20066a200520066a220441026a2d00003a0000200120033602042001200441036a3602002002200641016a22043a00a0162003417f6a21032004210620044120470d000b200441ff01714120490d0d20022900871621082002418f166a290000210b200228029c16210420022f019a16210a20022d009916210e20022f0097162109200228008316210320022f008116210620022d008016210720024198156a41106a20024198086a41106a29000037030020024198156a41086a20024198086a41086a290000370300200220022900980837039815200842808080807083200842ffffffff0f83842108200b422088a7210d200ba7210f410221010c0b0b200641ff0171450d0c200241003a00a0160c0c0b200241e8076a200110ab0120022802e8070d0b2004280200220620022802ec072203490d0b2003417f4c0d3d0240024020030d00410121050c010b200310322205450d40200428020021060b20062003490d0420052001280200200310e9082106200128020422072003490d062001200720036b3602042001200128020020036a3602002006450d0b2003ad2208422086200884210b20024180166a200110930120022d0080164101460d0320024180166a41106a290300210c20024188166a29030021082002419d166a28000021042002419b166a2f0000210a2002419a166a2d0000210e20024198166a2f01002109200228028416210320022f018216210620022d0081162107200241d0076a200110db0420022903d007a70d0320022903d807211020024198156a41106a200241d0076a41106a2903003703002002200b37039815200220103703a015200c422088a7210d200ca7210f410321010c0a0b41002106200241003a00a0162003417d6a21030240034020072006460d0120024180166a20066a200520066a220441026a2d00003a0000200120033602042001200441036a3602002002200641016a22043a00a0162003417f6a21032004210620044120460d090c000b0b200641ff0171450d0a200241003a00a0160c0a0b41002106200241003a00a0162003417d6a21030240034020072006460d0120024180166a20066a200520066a220441026a2d00003a0000200120033602042001200441036a3602002002200641016a22043a00a0162003417f6a21032004210620044120470d000b200441ff01714120490d0a20022900871621082002418f166a290000210b200228029c16210420022f019a16210a20022d009916210e20022f0097162109200228008316210320022f008116210620022d008016210720024198156a41106a20024198086a41106a29000037030020024198156a41086a20024198086a41086a290000370300200220022900980837039815200842808080807083200842ffffffff0f83842108200b422088a7210d200ba7210f410521010c080b200641ff0171450d09200241003a00a0160c090b41002106200241003a00a0162003417d6a21030240034020072006460d0120024180166a20066a200520066a220441026a2d00003a0000200120033602042001200441036a3602002002200641016a22043a00a0162003417f6a21032004210620044120460d060c000b0b200641ff0171450d08200241003a00a0160c080b200ba7450d070b2005102e0c060b2003200741b8b2c0001056000b2003200741b8b2c0001056000b20024198086a41086a220120024180166a41086a29030037030020024198086a41106a220520024180166a41106a29030037030020024198086a41186a220320024180166a41186a290300370300200220022903801637039808200441ff0171411f4d0d0320024198126a41186a20032903002208370300200241d8106a41086a2001290300370300200241d8106a41106a2005290300370300200241d8106a41186a200837030020022002290398083703d81020022d00d810210720022f00d910210620022800db10210320022f00ef10210920022d00f110210e20022f01f210210a20022802f410210420022800eb10210d20022800e710210f20022900df10210820024198156a41106a200241980f6a41106a29000037030020024198156a41086a200241980f6a41086a290000370300200220022900980f37039815410621010c010b20024198086a41086a22052002418f166a29000037030020024198086a41106a220a20024197166a29000037030020024198086a41186a220e20024180166a411f6a2d00003a0000200220022900871637039808200441ff0171411f4d0d0220022d008016210720022f00811621062002280083162103200241980f6a41086a2005290300370300200241980f6a41106a200a290300370300200241980f6a41186a200e2d00003a000020022002290398083703980f200241f0076a200110db0420022903f007a70d02200241f0076a41106a2903002108200220022903f80737039815200220083703a01520022903a80f220b422888200241b00f6a31000042188684a72104200b421888a7210a200b421088a7210e200241a00f6a290300220c422088a7210d20022903980f2108200ba72109200ca7210f410421010b0b200241880b6a41106a221120024198156a41106a290300370300200241880b6a41086a20024198156a41086a290300220b3703002002200229039815220c3703880b200041186a200dad422086200fad84370000200041106a20083700002000412c6a2005360000200020043600252000200a3b00232000200e3a0022200041206a20093b00002000410c6a2003360000200020063b000a200020073a0009200041086a20013a00002000411a360200200041306a200c370200200041386a200b370200200041c0006a2011290300370200200041c8006a200241b0186a41e80110e9081a0c370b2000411c3602000c360b024002402007450d0020052d0001210620012003417e6a3602042001200541026a360200024002400240024002400240024002400240024002400240024020060e090001020304050608070d0b200241d0066a200110db0420022903d006a70d0c200241e0066a290300210b20022903d8062108200241c8066a200110ab0120022802c8060d0c2004280200220620022802cc062203490d0c2003417f4c0d3e0240024020030d00410121050c010b200310322205450d41200428020021060b20062003490d0b20052001280200200310e9082106200128020422072003490d0d2001200720036b3602042001200128020020036a3602002006450d0c2003ad220c422086200c84220c4220882114200ca72103410121010c090b200241e8066a200110ab0120022802e80622010d0b410a410220011b21014200211420022802ec0621050c070b20024188076a200110ab012002280288070d0a200228028c07210520024180166a200110e60120022d0080164105460d0a20024180166a41106a290300210b20024188166a2903002108200241a0166a280200210620024198166a290300210c20022802841621072002280280162103200241f0066a200110db04024020022903f006a70d00200241f0066a41106a290300211320022903f80621102007ad2114410321010c090b200341ff01714102470d0a2008a7450d0a2007102e0c0a0b20024190076a200110ab0120022802900722010d09410a410420011b21014200211420022802940721050c050b20024198076a200110ab0120022802980722010d08410a410520011b210142002114200228029c0721050c040b200241a0076a200110ab0120022802a0070d0720022802a407210520024180166a200110e60120022d0080164105460d072002290380162210422088211420024190166a290300210b20024188166a2903002108200241a0166a280200210620024198166a290300210c2010a721034200211041062101420021130c050b200241a8076a200110ab0120022802a80722010d06410a410720011b21014200211420022802ac0721050c020b200241c0076a200110ab0120022802c0070d0520022802c4072105200241b8076a200110ab0120022802b8070d052004280200220720022802bc072206490d052006417f4c0d370240024020060d00410121030c010b200610322203450d3a200428020021070b0240024020072006490d0020032001280200200610e90821072001280204220420064f0d012006200441b8b2c0001056000b2003102e0c060b2001200420066b3602042001200128020020066a3602002007450d052006ad2208422086200884221442208821084200210b410921010c020b200241b0076a200110ab0120022802b00722010d04410a410820011b21014200211420022802b40721050b0b0b20004119360200200041c0006a2013370200200041386a2010370200200041206a200b370200200041186a2008370200200041306a2006360200200041286a200c3702002000410c6a2005360200200041086a2001360200200041106a20144220862003ad84370200200041c8006a200241b0186a41e80110e9081a0c380b2005102e0b2000411c3602000c360b2003200741b8b2c0001056000b0240024002402007450d0020052d0001210620012003417e6a22073602042001200541026a3602000240024002400240024002400240024020060e0400010203080b200241a0066a200110ab01024020022802a006450d0020024100360298080c080b20024198086a200120022802a4061092012002280298082205450d07200229029c08210b0240200110cb042203450d0020022902981622104280808080708321132002290290162208428080808070832114200228028c16210f2002280288162109200228009b12210e20022f009912210a2008a7210d410121010c0a0b200b42ffffff3f8350450d060c070b20074102490d0620052f0002210620012003417c6a3602042001200541046a360200200241b0066a200110ab01024020022802b006450d0020024100360280160c070b20024180166a200120022802b4061092012002280280162205450d06200229028416210b20024180166a200110fe0520022802801622034102460d04200229028416210c200241a8066a200110ab0120022802a8060d042004280200220e20022802ac06220a490d04200a417f4c0d3802400240200a0d00410121070c010b200a10322207450d3b2004280200210e0b200e200a490d0320072001280200200a10e90821092001280204220e200a490d072001200e200a6b36020420012001280200200a6a3602002009450d04200aad220842208620088421102004280200220a450d022001280200220d2d0000210e2001200a417f6a220f3602042001200d41016a3602004100210402400240200e0e020100040b410121040b200f4108490d022010422088a7210e200d29000121082001200a41776a3602042001200d41096a360200200941107621112010421088a7210a2010420888a7211b20104220862009ad84421888a72112410221014100210d4200211042002113420021140c080b20074102490d0520052f0002210a20012003417c6a3602042001200541046a360200200241b8066a200110ab01024020022802b806450d0020024100360280160c060b20024180166a200120022802bc06109201200228028016220e450d05200229028416210820024180166a200110fe0502402002280280164102460d0020024188166a280200210d200229038016211441002105200241003a00a01620042802002107417f21030240034020072005460d0120024180166a20056a200128020022062d00003a00002001200720036a3602042001200641016a3602002002200541016a22063a00a0162003417f6a21032006210520064120470d000b200641ff01714120490d01200720066b22074108490d01200229008716210b2002418f166a2900002118200228029c16210320022f019a16210920022d009916210f20022f0097162111200228008316210520022f008116210620022d00801621042001280200221229000021102001200741786a3602042001201241086a360200200220093b00ab0f2002200f3a00aa0f200220113b01a80f2010428080808070832113200b422088a7ad422086200ba7ad84210b200220033600ad0f20034110762112200341087621112014422088a7210f200220183703a00f20022902a40f210c20022f01ac0f21072014a721092018a7210341032101420021140c090b200541ff0171450d00200241003a00a0160b200842ffffff3f83500d05200e102e0c050b20074102490d0420052f0002210a20012003417c6a3602042001200541046a360200200241c0066a200110ab01024020022802c006450d0020024100360280160c050b20024180166a200120022802c406109201200228028016220e450d0420022902841621080240200428020022034104490d0020012802002207280000210920012003417c6a22053602042001200741046a36020020054104490d002007280004210f2001200341786a22043602042001200741086a36020041002105200241003a00a016200341776a21030240034020042005460d0120024180166a20056a200720056a220641086a2d00003a0000200120033602042001200641096a3602002002200541016a22063a00a0162003417f6a21032006210520064120470d000b20024198086a41086a220120024180166a41086a29030037030020024198086a41106a220520024180166a41106a29030037030020024198086a41186a220320024180166a41186a290300370300200220022903801637039808200641ff0171411f4d0d0120024198126a41186a2003290300220b370300200241d8106a41086a2001290300370300200241d8106a41106a2005290300370300200241d8106a41186a200b37030020022002290398083703d81020022d00d810210420022f00d910210620022800db10210520022f00f310210720022d00f510211120022f01f610211220022900eb10210c20022800e710210320022900df10210b410421014100210d4200211042002113420021140c080b200541ff0171450d00200241003a00a0160b200842ffffff3f83500d04200e102e0c040b2010a7450d010b2007102e0b200b42ffffff3f83500d010b2005102e0b2000411c3602000c360b200a200e41b8b2c0001056000b2000201b3a0029200020113a0026200020043a0009200041183602002000413c6a200f360200200041386a2009360200200041306a20083702002000412c6a200e3602002000412a6a200a3b0100200041276a20123b0000200041246a20073b01002000411c6a200c370200200041186a2003360200200041106a200b3702002000410c6a20053602002000410a6a20063b0100200041086a20013a0000200041c8006a2013201042ffffffff0f8384370200200041c0006a2014200dad84370200200041d0006a200241b0186a41e00110e9081a0c340b20024180166a200110bd03024020022d008016410b460d0020024198086a20024180166a41c80010e9081a20004117360200200041046a20024198086a41c80010e9081a200041cc006a200241b0186a41e40110e9081a0c340b2000411c3602000c330b410f210e0c0c0b200241b0186a200110e60120022d00b0184105460d14200241800e6a41086a200241a00a6a41086a280200360200200241fc0d6a41026a200241e80e6a41026a2d00003a0000200220022902a00a3703800e200220022f00e80e3b01fc0d200241bc186a290200210b200241b0186a41206a280200210a200241ce186a2f01002109200241cd186a2d0000210d200241c9186a280000210f200241c7186a2f00002112200241c6186a2d0000211b200241c4186a2f0100211120022902b418210820022802b0182106200241e00d6a41106a20024198086a41106a290200370300200241e00d6a41086a20024198086a41086a29020037030020022002290298083703e00d200241dc0d6a41026a200241b80e6a41026a2d00003a0000200220022f00b80e3b01dc0d200241c00d6a41106a20024198126a41106a290200370300200241c00d6a41086a20024198126a41086a29020037030020022002290298123703c00d200241bc0d6a41026a200241900e6a41026a2d00003a0000200220022f00900e3b01bc0d200241a00d6a41106a200241d8106a41106a290200370300200241a00d6a41086a200241d8106a41086a290200370300200220022902d8103703a00d2002419c0d6a41026a200241a0146a41026a2d00003a0000200220022f00a0143b019c0d200241800d6a41106a200241980f6a41106a290200370300200241800d6a41086a200241980f6a41086a290200370300200220022902980f3703800d20024198156a41206a20024180166a41206a28020036020020024198156a41186a20024180166a41186a29020037030020024198156a41106a20024180166a41106a29020037030020024198156a41086a20024180166a41086a290200370300200220022902801637039815410e210e0c0b0b200241b0186a200110e60120022d00b0184105460d13200241b0186a41206a2207280200210a200241ce186a2f01002109200241cd186a2d0000210d200241c9186a280000210f200241c7186a2f00002112200241c6186a2d0000211b200241c4186a2f01002111200241bc186a290200210b200241b0186a41086a2204280200210520022802b418210320022802b0182106200241b0186a200110ec03024020022d00b0184106460d00200241800e6a41086a200241a00a6a41086a280200360200200241fc0d6a41026a200241e80e6a41026a2d00003a0000200241e00d6a41086a20024198086a41086a290200370300200241e00d6a41106a20024198086a41106a290200370300200220022902a00a3703800e200220022f00e80e3b01fc0d20022002290298083703e00d200241b0186a41186a290300210c200241b0186a41106a29030021102007280200211d2004290300211320022903b0182114200241dc0d6a41026a200241b80e6a41026a2d00003a0000200220022f00b80e3b01dc0d200241c00d6a41106a20024198126a41106a290200370300200241c00d6a41086a20024198126a41086a29020037030020022002290298123703c00d200241bc0d6a41026a200241900e6a41026a2d00003a0000200220022f00900e3b01bc0d200241a00d6a41106a200241d8106a41106a290200370300200241a00d6a41086a200241d8106a41086a290200370300200220022902d8103703a00d2002419c0d6a41026a200241a0146a41026a2d00003a0000200220022f00a0143b019c0d200241800d6a41106a200241980f6a41106a290200370300200241800d6a41086a200241980f6a41086a290200370300200220022902980f3703800d20024198156a41206a20024180166a41206a28020036020020024198156a41186a20024180166a41186a29020037030020024198156a41106a20024180166a41106a29020037030020024198156a41086a20024180166a41086a2902003703002002200229028016370398152005ad4220862003ad842108410d210e0c0b0b200641ff01714102470d132005450d132003102e0c130b200241b0186a200110e60120022d00b0184105460d12200241b0186a41206a2207280200210a200241ce186a2f01002109200241cd186a2d0000210d200241c9186a280000210f200241c7186a2f00002112200241c6186a2d0000211b200241c4186a2f01002111410c210e200241b0186a410c6a290200210b200241b0186a41086a2204280200210520022802b418210320022802b0182106200241b0186a200110ec03024020022d00b0184106460d00200241800e6a41086a200241a00a6a41086a280200360200200241fc0d6a41026a200241e80e6a41026a2d00003a0000200241e00d6a41086a20024198086a41086a290200370300200241e00d6a41106a20024198086a41106a290200370300200220022902a00a3703800e200220022f00e80e3b01fc0d20022002290298083703e00d200241b0186a41186a290300210c200241b0186a41106a29030021102007280200211d2004290300211320022903b0182114200241dc0d6a41026a200241b80e6a41026a2d00003a0000200220022f00b80e3b01dc0d200241c00d6a41106a20024198126a41106a290200370300200241c00d6a41086a20024198126a41086a29020037030020022002290298123703c00d200241bc0d6a41026a200241900e6a41026a2d00003a0000200220022f00900e3b01bc0d200241a00d6a41106a200241d8106a41106a290200370300200241a00d6a41086a200241d8106a41086a290200370300200220022902d8103703a00d2002419c0d6a41026a200241a0146a41026a2d00003a0000200220022f00a0143b019c0d200241800d6a41106a200241980f6a41106a290200370300200241800d6a41086a200241980f6a41086a290200370300200220022902980f3703800d20024198156a41206a20024180166a41206a28020036020020024198156a41186a20024180166a41186a29020037030020024198156a41106a20024180166a41106a29020037030020024198156a41086a20024180166a41086a2902003703002002200229028016370398152005ad4220862003ad8421080c0a0b200641ff01714102470d122005450d122003102e0c120b200241b0186a200110e60120022d00b0184105460d11200241800e6a41086a200241a00a6a41086a280200360200200241fc0d6a41026a200241e80e6a41026a2d00003a0000200220022902a00a3703800e200220022f00e80e3b01fc0d200241bc186a290200210b200241b0186a41206a280200210a200241ce186a2f01002109200241cd186a2d0000210d200241c9186a280000210f200241c7186a2f00002112200241c6186a2d0000211b200241c4186a2f0100211120022902b418210820022802b0182106200241e00d6a41106a20024198086a41106a290200370300200241e00d6a41086a20024198086a41086a29020037030020022002290298083703e00d200241dc0d6a41026a200241b80e6a41026a2d00003a0000200220022f00b80e3b01dc0d200241c00d6a41106a20024198126a41106a290200370300200241c00d6a41086a20024198126a41086a29020037030020022002290298123703c00d200241bc0d6a41026a200241900e6a41026a2d00003a0000200220022f00900e3b01bc0d200241a00d6a41106a200241d8106a41106a290200370300200241a00d6a41086a200241d8106a41086a290200370300200220022902d8103703a00d2002419c0d6a41026a200241a0146a41026a2d00003a0000200220022f00a0143b019c0d200241800d6a41106a200241980f6a41106a290200370300200241800d6a41086a200241980f6a41086a290200370300200220022902980f3703800d20024198156a41206a20024180166a41206a28020036020020024198156a41186a20024180166a41186a29020037030020024198156a41106a20024180166a41106a29020037030020024198156a41086a20024180166a41086a290200370300200220022902801637039815410b210e0c080b20024198066a200110ab012002280298060d10200228029c062106200241b0186a200110e60120022d00b0184105460d10200241b8186a280200210320022802b418210720022802b01821050240024020042802002204450d00200241d0186a3502002114200241cc186a280200210a200241ca186a2f01002109200241c9186a2d0000210d200241c5186a280000210f200241c3186a2f00002112200241c2186a2d0000211b200241c0186a2f01002111200241bc186a35020021082001280200220e2d0000211c20012004417f6a221d3602042001200e41016a36020042002113024002400240024002400240201c0e0707000102030405060b201d4110490d05200e41096a290000210c200e290001211020012004416f6a3602042001200e41116a360200420121130c060b420221130c050b420321130c040b420421130c030b420521130c020b420621130c010b200541ff01714102470d112003450d112007102e0c110b200241800e6a41086a200241a00a6a41086a280200360200200241fc0d6a41026a200241e80e6a41026a2d00003a0000200241e00d6a41086a20024198086a41086a290200370300200241e00d6a41106a20024198086a41106a290200370300200241dc0d6a41026a200241b80e6a41026a2d00003a0000200220022902a00a3703800e200220022f00e80e3b01fc0d20022002290298083703e00d200220022f00b80e3b01dc0d200241c00d6a41106a20024198126a41106a290200370300200241c00d6a41086a20024198126a41086a290200370300200241bc0d6a41026a200241900e6a41026a2d00003a0000200241a00d6a41086a200241d8106a41086a290200370300200241a00d6a41106a200241d8106a41106a2902003703002002419c0d6a41026a200241a0146a41026a2d00003a000020022002290298123703c00d200220022f00900e3b01bc0d200220022902d8103703a00d200220022f00a0143b019c0d200241800d6a41106a200241980f6a41106a290200370300200241800d6a41086a200241980f6a41086a29020037030020024198156a41206a20024180166a41206a28020036020020024198156a41186a20024180166a41186a29020037030020024198156a41106a20024180166a41106a29020037030020024198156a41086a20024180166a41086a290200370300200220022902980f3703800d20022002290280163703981520084220862003ad84210b2007ad4220862005ad842108410a210e0c070b20024190066a200110ab012002280290060d0f200428020022054108490d0f20022802940621062001280200220329000021082001200541786a3602042001200341086a360200200842ff01560d0f200241800e6a41086a200241980f6a41086a280200360200200241fc0d6a41026a200241a00a6a41026a2d00003a0000200241e00d6a41086a20024180166a41086a290200370300200241e00d6a41106a20024180166a41106a290200370300200241dc0d6a41026a200241e80e6a41026a2d00003a0000200220022902980f3703800e200220022f00a00a3b01fc0d20022002290280163703e00d200220022f00e80e3b01dc0d200241c00d6a41106a20024198086a41106a290200370300200241c00d6a41086a20024198086a41086a290200370300200241bc0d6a41026a200241b80e6a41026a2d00003a0000200241a00d6a41086a20024198126a41086a290200370300200241a00d6a41106a20024198126a41106a2902003703002002419c0d6a41026a200241900e6a41026a2d00003a000020022002290298083703c00d200220022f00b80e3b01bc0d20022002290298123703a00d200220022f00900e3b019c0d200241800d6a41106a200241d8106a41106a290200370300200241800d6a41086a200241d8106a41086a29020037030020024198156a41206a200241b0186a41206a28020036020020024198156a41186a200241b0186a41186a29020037030020024198156a41106a200241b0186a41106a29020037030020024198156a41086a200241b0186a41086a290200370300200220022902d8103703800d200220022902b01837039815200842ff018321084109210e0c060b20024188066a200110ab012002280288060d0e200228028c06210a20024180166a200110930120022d0080164101460d0e4108210e200241800e6a41086a200241a00a6a41086a280200360200200241fc0d6a41026a200241e80e6a41026a2d00003a0000200241e00d6a41086a20024198086a41086a290200370300200241e00d6a41106a20024198086a41106a290200370300200220022902a00a3703800e200220022f00e80e3b01fc0d20022002290298083703e00d20024180166a41106a290300210b20024180166a41086a290300210820024180166a41186a290300210c20024180166a41206a3100002110200228028416210620022f018216212c20022d008116212d200241dc0d6a41026a200241b80e6a41026a2d00003a0000200220022f00b80e3b01dc0d200241c00d6a41106a20024198126a41106a290200370300200241c00d6a41086a20024198126a41086a29020037030020022002290298123703c00d200241bc0d6a41026a200241900e6a41026a2d00003a0000200220022f00900e3b01bc0d200241a00d6a41106a200241d8106a41106a290200370300200241a00d6a41086a200241d8106a41086a290200370300200220022902d8103703a00d2002419c0d6a41026a200241a0146a41026a2d00003a0000200220022f00a0143b019c0d200241800d6a41106a200241980f6a41106a290200370300200241800d6a41086a200241980f6a41086a290200370300200220022902980f3703800d20024198156a41206a200241b0186a41206a28020036020020024198156a41186a200241b0186a41186a29020037030020024198156a41106a200241b0186a41106a29020037030020024198156a41086a200241b0186a41086a290200370300200220022902b01837039815200c422888201042188684a7210f200c421888a72112200c421088a7211b200ca721110c050b20024180066a200110ab012002280280060d0d2002280284062106200241e8056a200110db0420022903e805a70d0d200241e8056a41106a290300210b20022903f0052108200241800e6a41086a200241980f6a41086a280200360200200241fc0d6a41026a200241a00a6a41026a2d00003a0000200241e00d6a41086a20024180166a41086a290200370300200241e00d6a41106a20024180166a41106a290200370300200241dc0d6a41026a200241e80e6a41026a2d00003a0000200220022902980f3703800e200220022f00a00a3b01fc0d20022002290280163703e00d200220022f00e80e3b01dc0d200241c00d6a41106a20024198086a41106a290200370300200241c00d6a41086a20024198086a41086a290200370300200241bc0d6a41026a200241b80e6a41026a2d00003a0000200241a00d6a41086a20024198126a41086a290200370300200241a00d6a41106a20024198126a41106a2902003703002002419c0d6a41026a200241900e6a41026a2d00003a000020022002290298083703c00d200220022f00b80e3b01bc0d20022002290298123703a00d200220022f00900e3b019c0d200241800d6a41106a200241d8106a41106a290200370300200241800d6a41086a200241d8106a41086a29020037030020024198156a41206a200241b0186a41206a28020036020020024198156a41186a200241b0186a41186a29020037030020024198156a41106a200241b0186a41106a29020037030020024198156a41086a200241b0186a41086a290200370300200220022902d8103703800d200220022902b018370398154107210e0c040b202b4104490d0c2005280002210620012003417a6a3602044106210e2001200541066a360200200241800e6a41086a200241980f6a41086a280200360200200241fc0d6a41026a200241a00a6a41026a2d00003a0000200241e00d6a41086a20024180166a41086a290200370300200241e00d6a41106a20024180166a41106a290200370300200241dc0d6a41026a200241e80e6a41026a2d00003a0000200220022902980f3703800e200220022f00a00a3b01fc0d20022002290280163703e00d200220022f00e80e3b01dc0d200241c00d6a41106a20024198086a41106a290200370300200241c00d6a41086a20024198086a41086a290200370300200241bc0d6a41026a200241b80e6a41026a2d00003a0000200241a00d6a41086a20024198126a41086a290200370300200241a00d6a41106a20024198126a41106a2902003703002002419c0d6a41026a200241900e6a41026a2d00003a000020022002290298083703c00d200220022f00b80e3b01bc0d20022002290298123703a00d200220022f00900e3b019c0d200241800d6a41106a200241d8106a41106a290200370300200241800d6a41086a200241d8106a41086a29020037030020024198156a41206a200241b0186a41206a28020036020020024198156a41186a200241b0186a41186a29020037030020024198156a41106a200241b0186a41106a29020037030020024198156a41086a200241b0186a41086a290200370300200220022902d8103703800d200220022902b018370398154200210b0c030b200241e0056a200110ab0120022802e0050d0b20022802e4052106200241c8056a200110db0420022903c805a70d0b200241c8056a41106a290300210b20022903d0052108200241800e6a41086a200241980f6a41086a280200360200200241fc0d6a41026a200241a00a6a41026a2d00003a0000200241e00d6a41086a20024180166a41086a290200370300200241e00d6a41106a20024180166a41106a290200370300200241dc0d6a41026a200241e80e6a41026a2d00003a0000200220022902980f3703800e200220022f00a00a3b01fc0d20022002290280163703e00d200220022f00e80e3b01dc0d200241c00d6a41106a20024198086a41106a290200370300200241c00d6a41086a20024198086a41086a290200370300200241bc0d6a41026a200241b80e6a41026a2d00003a0000200241a00d6a41086a20024198126a41086a290200370300200241a00d6a41106a20024198126a41106a2902003703002002419c0d6a41026a200241900e6a41026a2d00003a000020022002290298083703c00d200220022f00b80e3b01bc0d20022002290298123703a00d200220022f00900e3b019c0d200241800d6a41106a200241d8106a41106a290200370300200241800d6a41086a200241d8106a41086a29020037030020024198156a41206a200241b0186a41206a28020036020020024198156a41186a200241b0186a41186a29020037030020024198156a41106a200241b0186a41106a29020037030020024198156a41086a200241b0186a41086a290200370300200220022902d8103703800d200220022902b018370398154105210e0c020b200241c0056a200110ab0120022802c0050d0a20022802c405220a200428020041c4006e22052005200a4b1bad42c4007e2208422088a70d222008a72205417f4c0d220240024020050d00410421060c010b2005102c2206450d250b200541c4006ead2108024002400240200a450d004100210e0340200241003a00d018200e41016a210e2004280200417f6a2105410021030240024003402005417f460d01200241b0186a20036a200128020022072d00003a0000200120053602042001200741016a3602002002200341016a22073a00d0182005417f6a21052007210320074120470d000b20024198086a41086a2205200241b0186a41086a29030037030020024198086a41106a2203200241b0186a41106a220d29030037030020024198086a41186a2209200241b0186a41186a290300370300200220022903b01837039808200741ff0171411f4b0d010c050b200341ff0171450d04200241003a00d0180c040b200241d8106a41086a2005290300370300200241d8106a41106a2003290300370300200241d8106a41186a200929030037030020022002290398083703d810200241b0186a200110ec0320022d00b01822034106460d03200d290300210c20022903b818211020022f01d218210720022d00d118210920022800cd18210d20022f00cb18210f20022d00ca18211120022f01c818211220022802b418211b20022f01b218211c20022d00b118211d20022800db10211f20022f00d910211e20022d00d810212720022f00ef10210520022d00f110212620022f01f210212020022802f410212120022900df10210b200220022900e7103703a00f2002200b3703980f200220213600ad0f200220203b00ab0f200220263a00aa0f200220053b01a80f02402008422088220ba722052008a7470d00200541016a22262005490d2720054101742220202620262020491b22264104202641044b1bad42c4007e220b422088a7454102742126200ba721200240024020050d00200241003602b0180c010b200241043602b818200220063602b0182002200541c4006c3602b4180b20024198086a20202026200241b0186a107d20022802a00821262002280298084101460d03200228029c0821062008422088220ba72105202641c4006ead21080b2006200541c4006c6a2205201f3600032005201e3b0001200520273a0000200241980f6a41186a2d0000211f200241980f6a41106a2903002113200241980f6a41086a290300211420022903980f2118200541306a200c37000020052010370028200520183700072005410f6a2014370000200541176a20133700002005411f6a201f3a0000200520073b0042200520093a00412005200d36003d2005200f3b003b200520113a003a200520123b00382005201b3600242005201c3b00222005201d3a0021200520033a0020200b422086200842ffffffff0f83844280808080107c2108200e200a470d000b0b2006450d0c200241800e6a41086a200241a0146a41086a280200360200200241fc0d6a41026a200241b4146a41026a2d00003a0000200241e00d6a41086a200241a00a6a41086a290200370300200241e00d6a41106a200241a00a6a41106a290200370300200241dc0d6a41026a200241b0146a41026a2d00003a0000200220022902a0143703800e200220022f00b4143b01fc0d200220022902a00a3703e00d200220022f00b0143b01dc0d200241c00d6a41106a200241e80e6a41106a290200370300200241c00d6a41086a200241e80e6a41086a290200370300200241bc0d6a41026a200241ac146a41026a2d00003a0000200241a00d6a41086a200241b80e6a41086a290200370300200241a00d6a41106a200241b80e6a41106a2902003703002002419c0d6a41026a2002419d146a41026a2d00003a0000200220022902e80e3703c00d200220022f00ac143b01bc0d200220022902b80e3703a00d200220022f009d143b019c0d200241800d6a41106a200241900e6a41106a290200370300200241800d6a41086a200241900e6a41086a29020037030020024198156a41206a20024180166a41206a28020036020020024198156a41186a20024180166a41186a29020037030020024198156a41106a20024180166a41106a29020037030020024198156a41086a20024180166a41086a290200370300200220022902900e3703800d2002200229028016370398154103210e0c030b20260d250c230b02402008422088a72201450d00200141c4006c2105200641286a210103400240200141786a2d00004101470d002001280200450d002001417c6a280200102e0b200141c4006a2101200541bc7f6a22050d000b0b2008a72201450d0a200141c4006c0d090c0a0b200241b0186a200110ec0320022d00b018222f4106460d024102210e200241b80e6a41026a220420022d00b3183a000020024180166a41086a2230200241c4186a29020037030020024180166a41106a2231200241cc186a290200370300200220022f00b1183b01b80e2002200241bc186a29020037038016200241b0186a41086a2211280200213220022802b4182133200241b0186a200110ec03024020022d00b0184106470d00202f4101470d032032450d032033102e0c030b200241980f6a41206a2201200241b0186a41206a280200360200200241980f6a41186a2234200241b0186a41186a290300370300200241980f6a41106a2235200241b0186a41106a290300370300200241980f6a41086a22362011290300370300200241800e6a41086a200241a00a6a41086a280200360200200220022903b0183703980f200220022903a00a3703800e20022f01e80e211120022d00ea0e211b20022f00eb0e2112200241fc0d6a41026a200241b4146a41026a2d00003a0000200220022f01b4143b01fc0d200241e00d6a41106a200241d8106a41106a290300370300200241e00d6a41086a200241d8106a41086a290300370300200220022903d8103703e00d200241dc0d6a41026a200241a0146a41026a2d00003a0000200220022f01a0143b01dc0d200241c00d6a41106a20024198126a41106a290300370300200241c00d6a41086a20024198126a41086a29030037030020022002290398123703c00d200241bc0d6a41026a200241900e6a41026a2d00003a0000200220022f01900e3b01bc0d200241a00d6a41106a20024198086a41106a290300370300200241a00d6a41086a20024198086a41086a29030037030020022002290398083703a00d2002419c0d6a41026a20042d00003a0000200220022f01b80e3b019c0d200241800d6a41106a2031290300370300200241800d6a41086a203029030037030020022002290380163703800d20024198156a41206a200128020036020020024198156a41186a203429030037030020024198156a41106a203529030037030020024198156a41086a2036290300370300200220022903980f370398152010420886202ead42ff0183842118202bad42088620104238888442ffffffffff1f8321172007ad422086202dad8421102003ad422086200b842113202cad4220862005ad84210b0b200241f00c6a41086a2201200241800e6a41086a280200360200200241ec0c6a41026a2205200241fc0d6a41026a2d00003a0000200241d00c6a41086a2203200241e00d6a41086a290300370300200241d00c6a41106a2207200241e00d6a41106a290300370300200241cc0c6a41026a2204200241dc0d6a41026a2d00003a0000200220022903800e3703f00c200220022f01fc0d3b01ec0c200220022903e00d3703d00c200220022f01dc0d3b01cc0c200241b00c6a41106a222b200241c00d6a41106a290300370300200241b00c6a41086a222e200241c00d6a41086a290300370300200241ac0c6a41026a2230200241bc0d6a41026a2d00003a0000200241900c6a41086a2231200241a00d6a41086a290300370300200241900c6a41106a2234200241a00d6a41106a2903003703002002418c0c6a41026a22352002419c0d6a41026a2d00003a0000200220022903c00d3703b00c200220022f01bc0d3b01ac0c200220022903a00d3703900c200220022f019c0d3b018c0c200241f00b6a41106a2236200241800d6a41106a290300370300200241f00b6a41086a2237200241800d6a41086a290300370300200241880b6a41206a223820024198156a41206a280200360200200241880b6a41186a223920024198156a41186a290300370300200241880b6a41106a223a20024198156a41106a290300370300200241880b6a41086a223b20024198156a41086a290300370300200220022903800d3703f00b20022002290398153703880b200041c8006a200c370200200041c0006a2010370200200041186a200b370200200041106a2008370200200041d0006a201d360200200041386a2013370200200041306a20143702002000412c6a200a360200200020093b002a2000200d3a0029200041256a200f360000200020123b00232000201b3a0022200041206a20113b01002000410c6a20063602002000202c3b000a2000202d3a0009200041086a200e3a000020004116360200200041e0006a201c3a0000200041d4006a20022903f00c370200200041dc006a2001280200360200200041e4006a201e360200200041e8006a201f360200200020022f01ec0c3b0061200041e3006a20052d00003a0000200041ec006a20022903d00c370200200041f4006a2003290300370200200041fc006a200729030037020020004184016a20273a000020004187016a20042d00003a0000200020022f01cc0c3b0085012000418c016a202636020020004188016a2020360200200041a0016a202b29030037020020004198016a202e29030037020020004190016a20022903b00c370200200041a8016a20213a0000200041ab016a20302d00003a0000200020022f01ac0c3b00a901200041b0016a2022360200200041ac016a2023360200200041c4016a2034290300370200200041bc016a2031290300370200200041b4016a20022903900c370200200041cc016a202f3a0000200041cf016a20352d00003a0000200020022f018c0c3b00cd01200041d4016a2032360200200041d0016a2033360200200041e8016a2036290300370200200041e0016a2037290300370200200041d8016a20022903f00b37020020004190026a203828020036020020004188026a203929030037020020004180026a203a290300370200200041f8016a203b290300370200200041f0016a20022903880b370200200041a4026a20173700002000419c026a201837000020004198026a2024360000200020253b0096022000201a3a00950220004194026a20193a00000c250b200241003a00c4180b20214101470d002022450d002023102e0b20274101470d002026450d002020102e0b201c4101470d00201f450d00201e102e0b200341ff01714101470d002007450d00202d102e0b200541ff01714101470d0020022802e80e450d00202c102e0b02402008422088a72201450d002006200141c8006c6a2105200621010340024020012d00004101470d00200141086a280200450d00200141046a280200102e0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102e0b200141c8006a22012005470d000b0b2008a72201450d01200141c8006c450d010b2006102e0b2000411c3602000c1c0b20052d0015210720012003416a6a22063602042001200541166a2205360200200220073a009316200229038816210b200228029016210e2002280280162103200228028416210a200241003a0094162006450d0420052d0000210720012006417f6a2204360204200241013a0094162001200541016a360200200220073a00801602402004450d0020052d0001210720012006417e6a2204360204200241023a0094162001200541026a360200200220073a0081162004450d0020052d0002210720012006417d6a2204360204200241033a0094162001200541036a360200200220073a0082162004450d0020052d0003210720012006417c6a2204360204200241043a0094162001200541046a360200200220073a0083162004450d0020052d0004210720012006417b6a2204360204200241053a0094162001200541056a360200200220073a0084162004450d0020052d0005210720012006417a6a2204360204200241063a0094162001200541066a360200200220073a0085162004450d0020052d000621072001200641796a2204360204200241073a0094162001200541076a360200200220073a0086162004450d0020052d000721072001200641786a2204360204200241083a0094162001200541086a360200200220073a0087162004450d0020052d000821072001200641776a2204360204200241093a0094162001200541096a360200200220073a0088162004450d0020052d000921072001200641766a22043602042002410a3a00941620012005410a6a360200200220073a0089162004450d0020052d000a21072001200641756a22043602042002410b3a00941620012005410b6a360200200220073a008a162004450d0020052d000b21072001200641746a22043602042002410c3a00941620012005410c6a360200200220073a008b162004450d0020052d000c21072001200641736a22043602042002410d3a00941620012005410d6a360200200220073a008c162004450d0020052d000d21072001200641726a22043602042002410e3a00941620012005410e6a360200200220073a008d162004450d0020052d000e21072001200641716a22043602042002410f3a00941620012005410f6a360200200220073a008e162004450d0020052d000f21072001200641706a2204360204200241103a0094162001200541106a360200200220073a008f162004450d0020052d0010210720012006416f6a2204360204200241113a0094162001200541116a360200200220073a0090162004450d0020052d0011210720012006416e6a2204360204200241123a0094162001200541126a360200200220073a0091162004450d0020052d0012210720012006416d6a2204360204200241133a0094162001200541136a360200200220073a0092162004450d0020052d0013210720012006416c6a22063602042001200541146a2205360200200220073a009316024020060d00200241023a00880b0c060b200228028416210720022802801621042002290388162108200228029016210920052d0000210d20012006417f6a3602042001200541016a3602000240024002400240200d0e020102000b200241023a00880b0c080b200241003a00880b0c010b20024180166a2001109301024020022d0080164101470d00200241023a00880b0c070b200241f0106a20024199166a290000370300200241e8106a20024191166a290000370300200241e0106a20024189166a290000370300200220022900811622133703d810200241e7106a290000210c20022900df10211020022f00ef10210120022d00f110210520022f01f210210620022802f410210d20022f00d910210f200220022800db1036028c0b2002200f3b018a0b200220133c00890b200241013a00880b2002200d36009d15200220063b009b15200220053a009a15200220013b019815200228029812211d0b2003410876210620044108762101200241a4086a2009410874ad2008423888843e0200200220022d008f0b3a00980f200220084208862007411876ad8437029c082002200741087420044118767236029808200941187620022f01880b20022d008a0b41107472410874722112200ead420886200b4238888442ffffffffff1f832108200220103700990f2010423888200c42088684a7211120022900991522134230882110200b420886200a411876ad84210b200a41087420034118767221052013421088a72107200c422088a72109200c421088a7210d200c420888a7210f200228008b0b211f20022d009815210e20024198086a41086a2903002114200228029c12211c20022f01a012211b20022f01a212212620022802a412211e20022802a812212020022802ac12212120022903980f210c20022903980821182013a7210a42002113410521270c030b200241003a0094160c040b200241003a0094160c030b20052d0015210720012003416a6a22063602042001200541166a2205360200200220073a00931620022002290388163702a008200220022802841636029c08200220022802801622033602980820022002280290163602a80820064110490d02200541086a2900002114200529000021182001200641706a22073602042001200541106a3602002007450d0220052d0010210420012006416f6a221b3602042001200541116a221c360200410021120240024020040e020100040b201b4110490d03200541196a29000021082005290011210c20012006415f6a22073602042001200541216a36020020074110490d03200541296a29000021102005290021210b20012006414f6a22073602042001200541316a360200200741034d0d032005280031210720012006414b6a221b3602042001200541356a221c3602002002200b370390162002200837038816200220073602a016200228029416210720022f019216210a20022d009116210e20022f008b16210d200228008d16210920022d008a16210f20022f018816211120022903a0162113410121120b41000d02201b450d02201c2d000021052001201b417f6a22063602042001201c41016a36020041022127410221040240024020050e020100040b2006450d03201c2d000121052001201b417e6a3602042001201c41026a36020041002104024020050e020100040b410121040b2003410876210620023500a708200241ab086a310000422086842108200229009f08210b200228009b0821054100211f0b2000200e3a00492000200f3a0042200020013b011e200020043a001d200020063b000a200020033a0009200041133602002000411c6a20084220883c0000200041186a20083e0000200041d8006a2013370200200041d0006a2010370200200041286a2014370200200041206a2018370200200041f4006a2021360200200041f0006a2020360200200041ec006a201e360200200041ea006a20263b0100200041e8006a201b3b0100200041e4006a201c360200200041e0006a201d360200200041cc006a2007360200200041ca006a200a3b0100200041c5006a2009360000200041c3006a200d3b0000200041c0006a20113b0100200041386a200c370200200041346a201f360200200041306a2012360200200041106a200b3700002000410c6a2005360000200041086a20273a0000200041f8006a200241b0186a41b80110e9081a0c180b200241003a0094160b2000411c3602000c160b2000200a3b00462000200e3a00452000201c3600412000201b3b003f2000201d3a003e2000201e3b0026200020273a002520002026360021200020123b001f200020203a001e200020073b0006200020043a0005200020053a000420004111360200200041346a200c3700002000412c6a200b3700002000410c6a20083700002000413c6a20113b0000200041286a201f3600002000411c6a200f3b0000200041086a2003360000200041146a2009ad422086200dad84370000200041c8006a200241b0186a41e80110e9081a0c150b2000411c3602000c140b200020093a000920004110360200200041286a200b370200200041146a200a360200200041106a200e3602002000410c6a2007360200200041086a200d3a0000200041206a200c421886200fad220b42088884370200200041186a200b423886200842ffffffffffffffff008384370200200041306a200241b0186a41800210e9081a0c130b2000411c3602000c120b20024198086a41086a22012002418f166a29000037030020024198086a41106a220320024197166a29000037030020024198086a41186a220620024180166a411f6a2d00003a0000200220022900871637039808200441ff0171411f4d0d0320022d008016210720022f008116210a200228008316210520024198126a41186a20062d000022063a0000200241980f6a41086a20012903002208370300200241980f6a41106a22012003290300370300200241980f6a41186a20063a00002002200229039808220b3703980f20012f01002112200228029c0f211120022d00aa0f211b20022f00ab0f210f20022800ad0f210d20022802a40f211c200ba721032008a721044106211d41002109420021080b0c010b20024198086a41086a22032002418f166a29000037030020024198086a41106a220620024197166a29000037030020024198086a41186a220e20024180166a411f6a2d00003a0000200220022900871637039808200a41ff0171411f4d0d0120022d008016210720022f008116210a2002280083162105200241d8106a41086a2003290300370300200241d8106a41106a2006290300370300200241d8106a41186a200e2d00003a000020022002290398083703d810200241a0046a200110ab0120022802a0040d0120042802002203450d0120022802a4042106200128020022042d0000210e20012003417f6a3602042001200441016a3602004100210102400240200e0e020100030b410121010b20022903d8102208422088a72111200241e0106a290300220b422088a7211c20022800ed10210d20022f00eb10210f20022d00ea10211b20022f01e81021122008a72103200ba721044104211d0b200020013a00292000200f3b00232000201b3a00222000200a3b000a200020073a00092000410f360200200041386a2008370200200041346a2009360200200041306a200e3602002000412c6a2006360200200041256a200d360000200041206a20123b0100200041146a2011360200200041106a20033602002000410c6a2005360200200041086a201d3a0000200041186a201cad4220862004ad84370200200041c0006a200241b0186a41f00110e9081a0c0e0b2000411c3602000c0d0b20024198086a41086a220620024180166a41086a29030037030020024198086a41106a220720024180166a41106a29030037030020024198086a41186a220e20024180166a41186a290300370300200220022903801637039808200a41ff0171411f4d0d01200241d8106a41086a2006290300370300200241d8106a41106a2007290300370300200241d8106a41186a200e29030037030020022002290398083703d8102003417e6a200a460d012005200a6a220541026a2d000021062001200320046a22043602042001200541036a3602004100211e0240024020060e020100030b20044104490d02200541036a280000210720012003200a6b41796a3602042001200541076a3602004101211e0b20022900df10220c422088a7211c200241e7106a290000210820022802f410211120022f01f210210f20022d00f110211220022f00ef10210a20022800db10210e20022f00d910210920022d00d810210d2007ad210b200ca7211d4200210c4118211b0c020b20024198086a41086a22062002418f166a29000037030020024198086a41106a220720024197166a29000037030020024198086a41186a220420024180166a411f6a2d00003a0000200220022900871637039808200a41ff0171411f4d0d0020022d008016210d20022f0081162109200228008316210e200241980f6a41086a2006290300370300200241980f6a41106a2007290300370300200241980f6a41186a20042d00003a000020022002290398083703980f2003200a6b2203417e6a4104490d00200f280000211e20012003417a6a36020420012005200a6a41066a36020020022903a80f220b422888200241b00f6a31000042188684a72111200b421888a7210f200b421088a7211220022903980f220c422088a7211c200241a00f6a2903002108200ba7210a200ca7211d4200210b4117211b4200210c0c010b2000411c3602000c0a0b200020273b012a2000201f3a00292000200f3b0023200020123a0022200020093b000a2000200d3a00092000410d360200200041386a200c370200200041306a200b3702002000412c6a201e360200200041256a2011360000200041206a200a3b0100200041186a2008370200200041146a201c360200200041106a201d3602002000410c6a200e360200200041086a201b3a0000200041c0006a200241b0186a41f00110e9081a0c090b2000411c3602000c080b41002112420021100b0b200020233a0049200020203a0042200020273b002a2000201e3a00292000201c3b00232000201f3a00222000200f3b010a2000200a3a000920004107360200200041d8006a200c370200200041d0006a200b370200200041cc006a2025360200200041ca006a20243b0100200041c5006a2022360000200041c3006a20213b0000200041c0006a20263b0100200041386a2013370200200041346a2009360200200041306a20113602002000412c6a200e360200200041256a201d360000200041206a201b3b01002000410c6a2007360200200041086a200d3a0000200041186a2010422086200842208884370200200041106a2008422086201a201241ff017172ad84370200200041e0006a200241b0186a41d00110e9081a0c050b1038000b2000411c3602000c030b1036000b2006102e0b2000411c3602000b200241c01b6a24000b940704027f017e097f037e23004190026b22032400024002400240024002402002200128020441286e2204200420024b1bad42287e2205422088a70d002005a72204417f4c0d000240024020040d00410821060c010b2004102c2206450d020b200441286e2107024020020d00410021020c040b410021080340200341003a00c8012008220941016a21082001280204210a417f210b41002104024002400340200a2004460d01200341a8016a20046a2001280200220c2d00003a00002001200a200b6a3602042001200c41016a3602002003200441016a220c3a00c801200b417f6a210b200c2104200c4120470d000b200341d0016a41086a2204200341a8016a41086a290300370300200341d0016a41106a220b200341a8016a41106a290300370300200341d0016a41186a220d200341a8016a41186a290300370300200320032903a8013703d001200c41ff0171411f4b0d010c050b200441ff0171450d04200341003a00c8010c040b200341e8006a41086a220e2004290300370300200341e8006a41106a2204200b290300370300200341e8006a41186a220b200d290300370300200320032903d001370368200a200c6b220c4108490d032001280200220a29000021052001200c41786a3602042001200a41086a360200200341286a41086a200e290300220f370300200341286a41106a20042903002210370300200341286a41186a200b2903002211370300200341086a41186a220b2011370300200341086a41106a220c2010370300200341086a41086a220a200f37030020032003290368220f3703282003200f3703080240024020092007470d0020094101742204200941016a2207200420074b1b22044104200441044b1bad42287e220f422088a7454103742104200fa721070240024020090d00200341003602a8010c010b200341083602b001200320063602a8012003200941286c3602ac010b200341d0016a20072004200341a8016a107d20032802d801210420032802d0014101460d0120032802d4012106200441286e21070b2006200941286c6a22042003290308370300200a290300210f200c2903002110200b290300211120042005370320200441186a2011370300200441106a2010370300200441086a200f37030020082002460d050c010b0b20040d010b1038000b1036000b200041003602002007450d01200741286c450d012006102e0c010b2000200736020420002006360200200041086a20023602000b20034190026a24000baf0102017f017e230041106b2203240002402001450d002001410674210103400240024020002903004201510d00200341003a000020022003410110740c010b200341013a000020022003410110742002200041206a41201074200041086a29030021042003200041106a2903003703082003200437030020022003411010742003200041186a29030037030020022003410810740b200041c0006a2100200141406a22010d000b0b200341106a24000b9e0101027f230041106b22032400024002402001450d002000200141c4006c6a210403402003200028020036020020022003410410744120102c2201450d0220034220370204200320013602002003200041046a2200412010742002200328020022012003280208107402402003280204450d002001102e0b2002200041206a41201074200041c0006a22002004470d000b0b200341106a24000f0b1036000b740002402001450d002000200141e0016c6a2101034020022000412010742002200041206a412010742002200041c0006a412010742002200041e0006a41201074200220004180016a412010742002200041a0016a412010742002200041c0016a41201074200041e0016a22002001470d000b0b0bb40203027f017e027f230041106b2203240002402001450d002000200141d8006c6a210403402002200041386a41201074200029030021052003200041086a2903003703082003200537030020022003411010742000280220210120002802282206200210760240200641306c2206450d00200120066a210603402002200141201074200141206a29030021052003200141286a290300370308200320053703002002200341101074200141306a22012006470d000b0b200041d8006a2107200028022c2101200041346a28020022062002107602402006450d002006410574210603402002200141201074200141206a2101200641606a22060d000b0b200029031021052003200041186a2903003703082003200537030020022003411010742007210020072004470d000b0b200341106a24000ba40102017f017e230041106b2203240002402001450d002001410574210103402002200041106a41081074200029030021042003200041086a29030037030820032004370300200220034110107402400240024002400240200041186a2d00000e03000102040b200341003a00000c020b200341013a00000c010b200341023a00000b20022003410110740b200041206a2100200141606a22010d000b0b200341106a24000bff0101027f230041106b2203240002400240200141c4006c2201450d0003400240024020002d00004101460d00200341003a000020022003410110742003200041046a28020036020020022003410410740c010b200341013a000020022003410110744120102c2204450d0320034220370204200320043602002003200041016a412010742002200328020022042003280208107402402003280204450d002004102e0b0240200041216a2d00004101460d00200341003a000020022003410110740c010b200341013a000020022003410110742002200041226a412010740b200041c4006a2100200141bc7f6a22010d000b0b200341106a24000f0b1036000b930201057f230041106b2203240002402001450d0020002001411c6c6a2104034020002802002105200028020822012002107602402001450d002005200141e0006c6a210603402005200210a101200528025021012005280258220720021076200541e0006a210502402007450d002007410574210703402002200141201074200141206a2101200741606a22070d000b0b20052006470d000b0b2000411c6a2105200028020c2101200028021422072002107602402007450d00200741027421070340200320012802003602082002200341086a41041074200141046a21012007417c6a22070d000b0b2003200028021836020c20022003410c6a410410742005210020052004470d000b0b200341106a24000b9c0101027f230041106b2202240020012000412010742002200041206a360204200241046a200110af012002200041306a360208200241086a200110af01200041c0006a2802002103200041c8006a28020022002001107602402000450d00200041306c210003402001200341106a412010742002200336020c2002410c6a200110af01200341306a2103200041506a22000d000b0b200241106a24000bc50101037f230041306b2203240002400240200241046a2204417f4c0d000240024020040d00410121050c010b2004102c2205450d020b200341003602102003200436020c200320053602082002200341086a1076200341086a2001200210742003200328020822022003280210220410a3013703182003412c6a200220046a360200200320023602282003200341206a3602242003200341186a3602202000200341206a107c0240200328020c450d002002102e0b200341306a24000f0b1038000b1036000b1d01017e2001ad4220862000ad841013220029000021022000102e20020bea0304037f027e017f047e230041a0016b22022400200241003a00380240024002400240200128020422034110490d002001280200220441086a2900002105200429000021062001200441106a3602002001200341706a2204360204200241013a00382002200637030820022005370310200441104f0d01200042013703000c020b200042013703000c020b2001280200220441086a2900002105200429000021062001200441106a360200200241086a41186a220720053703002001200341606a2204360204200241023a003820022006370318024020044110490d002001280200220441086a2900002105200429000021062001200441106a360200200241086a41286a20053703002001200341506a360204200241033a003820022006370328200241c0006a41086a200241086a41086a2903002208370300200241c0006a41106a200241086a41106a2903002209370300200241c0006a41186a2007290300220a370300200241c0006a41206a2006370300200241c0006a41286a200537030020022002290308220b370340200041306a2005370300200041286a2006370300200041206a200a370300200041186a2009370300200041106a20083703002000200b370308200042003703000c020b200042013703000b200241003a00380b200241a0016a24000bac0401057f230041106b220241003a000802400240024020012802042203450d00200128020022042d0000210520012003417f6a2206360204200241013a00082001200441016a360200200220053a000020060d01200041013a00000c020b200041013a00000f0b200128020022042d0000210520012003417e6a22063602042001200441016a360200200241023a0008200220053a00010240024002400240024002402006450d00200128020022042d0000210520012003417d6a22063602042001200441016a360200200241033a0008200220053a00022006450d01200128020022042d0000210520012003417c6a22063602042001200441016a360200200241043a0008200220053a00032006450d02200128020022042d0000210520012003417b6a22063602042001200441016a360200200241053a0008200220053a00042006450d03200128020022042d0000210520012003417a6a22063602042001200441016a360200200241063a0008200220053a00052006450d04200128020022042d000021052001200341796a22063602042001200441016a360200200241073a0008200220053a00062006450d05200041003a0000200128020022042d000021052001200341786a3602042001200441016a360200200220053a0007200020022903003700010f0b200041013a00000c050b200041013a00000c040b200041013a00000c030b200041013a00000c020b200041013a00000c010b200041013a00000b200241003a00080bbf0202077f047e230041f0006b22022400200241003a002841002103024002400340200241003a003020012802002204280204220520054100472206490d01200341016a2107200241306a20042802002208200610e9081a2004200520066b3602042004200820066a360200024020050d00200241003a00300b200241086a20036a20022d00303a0000200220073a00282007210320074120470d000b200241306a41086a200241086a41086a2903002209370300200241306a41106a200241086a41106a290300220a370300200241306a41186a200241086a41186a290300220b37030020022002290308220c370330200041196a200b370000200041116a200a370000200041096a20093700002000200c370001200041003a00000c010b200041013a0000200341ff0171450d00200241003a00280b200241f0006a24000bd60301087f230041d0016b2202240041002103200241003a00482001280204417f6a210402400240024003402004417f460d01200241086a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00482004417f6a210420052103200541c000470d000b200241d0006a41086a2204200241086a41086a290300370300200241d0006a41106a2201200241086a41106a290300370300200241d0006a41186a2203200241086a41186a290300370300200241d0006a41206a2206200241086a41206a290300370300200241d0006a41286a2207200241086a41286a290300370300200241d0006a41306a2208200241086a41306a290300370300200241d0006a41386a2209200241086a41386a29030037030020022002290308370350200541ff017141c000490d0120002002290350370001200041003a0000200041396a2009290300370000200041316a2008290300370000200041296a2007290300370000200041216a2006290300370000200041196a2003290300370000200041116a2001290300370000200041096a20042903003700000c020b200041013a0000200341ff0171450d01200241003a00480c010b200041013a00000b200241d0016a24000bef0101047f230041d0016b2202240041002103200241003a00492001280204417f6a210402400240024003402004417f460d01200241086a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00492004417f6a210420052103200541c100470d000b2002418f016a200241086a41c10010e9081a200241ce006a2002418f016a41c10010e9081a200541ff017141c100490d01200041016a200241ce006a41c10010e9081a200041003a00000c020b200041013a0000200341ff0171450d01200241003a00490c010b200041013a00000b200241d0016a24000be20201077f230041206b2202240002400240200041046a2802002203200041086a28020022046b2001410c6a280200200128020822056b22064103752207490d00200028020021030c010b0240200420076a22082004490d00200341017422042008200420084b1b22044104200441044b1b220441ffffffff01712004464102742108200441037421040240024020030d00200241003602100c010b200241186a410436020020022003410374360214200220002802003602100b200220042008200241106a107d200241086a2802002104024020022802004101460d00200020022802042203360200200041046a2004410376360200200041086a28020021040c020b2004450d001036000b1038000b200320044103746a2005200610e9081a20012001410c6a280200360208200041086a2200200028020020076a3602000240200141046a28020041ffffffff0171450d002001280200102e0b200241206a24000bf90302057f017e230041106b22022400200242003c000c200242003e02080240024020012802042203450d00200128020022042d0000210520012003417f6a2206360204200241013a000c2001200441016a360200200220053a000802402006450d00200128020022042d0000210520012003417e6a22063602042001200441016a360200200241023a000c200220053a00092006450d00200128020022042d0000210520012003417d6a22063602042001200441016a360200200241033a000c200220053a000a2006450d00200128020022042d0000210520012003417c6a3602042001200441016a360200200241043a000c200220053a000b200231000ca741034d0d01200228020821042002200110ab01024002400240024020022802000d002001280204220520022802042203490d002003417f4c0d020240024020030d00410121060c010b200310322206450d04200128020421050b0240024020052003490d0020062001280200200310e90821052001280204220620034f0d012003200641b8b2c0001056000b2006102e0c010b2001200620036b3602042001200128020020036a36020020050d010b200041003602040c050b20002003ad220742208620078437020820002005360204200020043602000c040b1038000b1036000b200241003a000c0b200041003602040b200241106a24000bcf0201067f0240024020012802042202450d00200128020022032d0000210420012002417f6a2205360204410121062001200341016a3602000240200441037122074103460d0002400240024020070e03000102000b20044102762107410021060c040b41012106024020050d000c040b20032d0001210520012002417e6a3602042001200341026a3602002005410874200472220141ffff0371418002490d03200141fcff03714102762107410021060c030b20054103490d01200341036a2d0000210620032f0001210720012002417c6a3602042001200341046a3602002007200641107472410874200472220141808004492106200141027621070c020b0240200441034d0d000c020b20054104490d012003280001210720012002417b6a3602042001200341056a36020020074180808080044921060c010b410121060b20002007360204200020063602000ba00402067f017e230041106b22022400200242003c000c200242003e020802400240200128020022032802042204450d00200328020022052d0000210620032004417f6a360204200241013a000c2003200541016a360200200220063a00080240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a360200200241023a000c200220063a0009200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a360200200241033a000c200220063a000a200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a360200200241043a000c200220063a000b200231000ca741034d0d01200228020821042002200110ad01024002400240024020022802000d0020012802002205280204220620022802042203490d002003417f4c0d020240024020030d00410121070c010b200310322207450d042001280200220528020421060b0240024020062003490d0020072005280200200310e90821012005280204220620034f0d012003200641b8b2c0001056000b2007102e0c010b2005200620036b3602042005200528020020036a36020020010d010b200041003602040c050b20002003ad220842208620088437020820002001360204200020043602000c040b1038000b1036000b200241003a000c0b200041003602040b200241106a24000bfb0201057f02400240200128020022022802042203450d00200228020022042d0000210520022003417f6a360204410121032002200441016a3602000240200541037122024103460d0002400240024020020e03000102000b20054102762102410021030c040b200128020022022802042203450d02200228020022012d0000210420022003417f6a360204410121032002200141016a3602002004410874200572220141ffff0371418002490d03200141fcff03714102762102410021030c030b2001280200220228020422034103490d012002280200220141026a2d0000210420012f000021062002200141036a36020020022003417d6a3602042006200441107472410874200572220241808004492103200241027621020c020b0240200541034d0d000c020b2001280200220128020422054104490d0120012802002203280000210220012005417c6a3602042001200341046a36020020024180808080044921030c010b410121030b20002002360204200020033602000bad0201047f230041106b22022400024002402001280208220341146a2204417f4c0d000240024020040d00410121050c010b2004102c2205450d020b20024100360208200220043602042002200536020020022001410c6a411010742001280200210420032002107620022004200310742002200128021c2204412010742002200441206a36020c2002410c6a200210af012002200441306a36020c2002410c6a200210af01200441c0006a2802002101200441c8006a28020022042002107602402004450d00200441306c210403402002200141106a412010742002200136020c200141306a21012002410c6a200210af01200441506a22040d000b0b200020022802002201200228020810b00102402002280204450d002001102e0b200241106a24000f0b1038000b1036000bad0303017f027e027f230041306b2202240002400240024002400240024020002802002200290300220342c000544100200041086a29030022045022051b0d0020034280800154410020051b0d01200342808080800454410020051b0d02411020047920037942c0007c20044200521ba741037622056b41044f0d0341c087c500413641c489c5001039000b20022003a74102743a00182001200241186a410110740c030b20022003a74102744101723b01182001200241186a410210740c020b20022003a74102744102723602182001200241186a410410740c010b2002413320054102746b3a00182001200241186a41011074200029030021032002200041086a290300220437031020022003370308200541706a21000340200220033c00182001200241186a410110742003420888200442388684210320044208882104200041016a22052000492106200521002006450d000b2002200337030820022004370310200320048450450d010b200241306a24000f0b2002412c6a4100360200200241286a41d4e2cc003602002002420137021c2002418888c500360218200241086a200241186a10de04000b4c0020002002ad4220862001ad8410102201290000370000200041186a200141186a290000370000200041106a200141106a290000370000200041086a200141086a2900003700002001102e0b920101047f230041106b22022400024002402000280208220341d8006c4104722204417f4c0d00200028020021002004102c2205450d01200241003602082002200436020420022005360200200320021076200020032002109d012001280200200128020420022802002201200228020810b20102402002280204450d002001102e0b200241106a24000f0b1038000b1036000b18002001ad4220862000ad842003ad4220862002ad84102a0bc00101047f230041106b2202240002400240200128020822034105744104722204417f4c0d00200128020021012004102c2205450d0120004100360208200020043602042000200536020020032000107602402003450d002003410574210303404120102c2204450d03200242203702042002200436020020022001412010742000200228020022042002280208107402402002280204450d002004102e0b200141206a2101200341606a22030d000b0b200241106a24000f0b1038000b1036000bd90102047f017e230041106b2202240002400240200128020822034106744104722204417f4c0d00200128020021012004102c2205450d0120004100360208200020043602042000200536020020032000107602402003450d002003410674210303402000200141206a41201074200129030021062002200141086a290300370308200220063703002000200241101074200141106a29030021062002200141186a290300370308200220063703002000200241101074200141c0006a2101200341406a22030d000b0b200241106a24000f0b1038000b1036000bae0101047f230041106b2202240002400240200128020822034103744104722204417f4c0d00200128020021012004102c2205450d0120004100360208200020043602042000200536020020032000107602402003450d00200120034103746a21030340200220012802003602082000200241086a410410742002200141046a28020036020c20002002410c6a41041074200141086a22012003470d000b0b200241106a24000f0b1038000b1036000ba50101047f230041106b2202240020002802002103200028020822002001107602402000450d002003200041386c6a210403402001200341086a41201074200220032903003703082001200241086a41081074200328022821002003280230220520011076200341386a210302402005450d002005410574210503402001200041201074200041206a2100200541606a22050d000b0b20032004470d000b0b200241106a24000b990101037f230041106b2202240020002802002103200028020822002001107602402000450d002003200041c8006c6a2104034020022003108a012001200228020022002002280208107402402002280204450d002000102e0b2002200341246a2203108a012001200228020022002002280208107402402002280204450d002000102e0b200341246a22032004470d000b0b200241106a24000b8d0101037f230041106b22022400200028020021032000280208220020011076024002402000450d002000410574210003404120102c2204450d02200242203702042002200436020020022003412010742001200228020022042002280208107402402002280204450d002004102e0b200341206a2103200041606a22000d000b0b200241106a24000f0b1036000bde0103037f017e017f230041106b22022400200028020021032000280208220020011076024020004106742200450d00200320006a210403402001200341201074200329032021052002200341286a290300370308200220053703002001200241101074200328023021002003280238220620011076200341c0006a21030240200641306c2206450d00200020066a210603402001200041201074200041206a29030021052002200041286a290300370308200220053703002001200241101074200041306a22002006470d000b0b20032004470d000b0b200241106a24000bdc0201047f230041206b2203240002400240200041086a28020022042001490d00024002402004200041046a280200470d00200441016a22052004490d03200441017422062005200620054b1b22054104200541044b1b220541ffffff3f712005464103742106200541057421050240024020040d00200341003602100c010b200341106a41086a410836020020032004410574360214200320002802003602100b200320052006200341106a107d200341086a280200210520032802004101460d0120002003280204360200200041046a20054105763602000b200028020020014105746a220541206a2005200420016b41057410ea081a200541186a200241186a290300370300200541106a200241106a290300370300200541086a200241086a29030037030020052002290300370300200041086a200441016a360200200341206a24000f0b2005450d011036000b200120041045000b1038000bf70301087f200041086a22032802002104410021052003410036020002402004450d004100210541002106024003400240024020050d0020012802002207210803402000280200200641306c6a210903402008450d0320082009412010ec0841004a0d0302400240200228020022082002280204470d00410021080c010b2002200841206a3602000b2001200836020020072009412010ec08210a20082107200a4100480d000b200821072004200641016a22064b0d000b410021050c040b03402000280200200641306c6a210920012802002207210803402008450d0220082009412010ec0841004a0d0202400240200228020022082002280204470d00410021080c010b2002200841206a3602000b2001200836020020072009412010ec08210a20082107200a4100480d000b2000280200200620056b41306c6a22082009290300370300200841286a200941286a290300370300200841206a200941206a290300370300200841186a200941186a290300370300200841106a200941106a290300370300200841086a200941086a2903003703002004200641016a22064d0d030c000b0b200541016a21052004200641016a22064b0d000b0b024020050d00410021050c010b20002802002208200620056b41306c6a2008200641306c6a200420066b41306c10ea081a0b2003200420056b3602000be10101047f230041206b22012400024002400240200041046a28020020002802082202470d00200241016a22032002490d02200241017422042003200420034b1b22034104200341044b1b220341ffffffff01712003464102742104200341037421030240024020020d00200141003602100c010b200141186a410436020020012002410374360214200120002802003602100b200120032004200141106a107d200141086a280200210220012802004101460d0120002001280204360200200041046a20024103763602000b200141206a24000f0b2002450d001036000b1038000baf0c01107f230041a0036b2202240002400240024020012802082203200128020c460d0020012802102104200241b4026a2105200241e0026a41206a2106200241c8016a4104722107200241d0006a4104722108200241106a41386a2109200241106a41306a210a200241106a41286a210b03402001200341206a36020820082003290000370000200841086a200341086a290000370000200841106a200341106a290000370000200841186a200341186a29000037000020022004360250024002402004200810be01450d002001200128021041016a22043602100c010b200241c8016a41206a200241d0006a41206a280200360200200241c8016a41186a200241d0006a41186a290300370300200241c8016a41106a200241d0006a41106a290300370300200241c8016a41086a200241d0006a41086a290300370300200220022903503703c801200241f0016a41186a2203200741186a220c290000370300200241f0016a41106a220d200741106a220e290000370300200241f0016a41086a220f200741086a2210290000370300200220072900003703f001200241e0026a41186a2204200c290000370300200241e0026a41106a220c200e290000370300200241e0026a41086a220e2010290000370300200220072900003703e00220024190026a200241e0026a10bf01200241c0026a41186a22102003290300370300200241c0026a41106a2211200d290300370300200241c0026a41086a220d200f290300370300200220022903f0013703c0020240024020022802b00222030d00410021030c010b2006200229039002370300200641186a20024190026a41186a290300370300200641106a20024190026a41106a290300370300200641086a20024190026a41086a29030037030020042010290300370300200c2011290300370300200e200d290300370300200241f8006a41086a200541086a280200360200200220022903c0023703e0022002200529020037037820024188016a41386a200241e0026a41386a29030037030020024188016a41306a200241e0026a41306a29030037030020024188016a41286a200241e0026a41286a29030037030020024188016a41206a200629030037030020024188016a41186a200429030037030020024188016a41106a200c29030037030020024188016a41086a200e290300370300200220022903e002370388010b0240024020030d0020094200370300200a4200370300200b4200370300200241106a41206a4200370300200241106a41186a4200370300200241106a41106a4200370300200241106a41086a4200370300200241086a410036020020024200370310200242003703000c010b200920024188016a41386a290300370300200a20024188016a41306a290300370300200b20024188016a41286a290300370300200241106a41206a20024188016a41206a290300370300200241106a41186a20024188016a41186a290300370300200241106a41106a20024188016a41106a290300370300200241106a41086a20024188016a41086a290300370300200241086a200241f8006a41086a2802003602002002200229038801370310200220022903783703000b2001200128021041016a220436021020030d030b20012802082203200128020c470d000b0b200041003602400c010b200241e0026a41386a2201200241106a41386a290300370300200241e0026a41306a2208200241106a41306a290300370300200241e0026a41286a2204200241106a41286a290300370300200241e0026a41206a2207200241106a41206a290300370300200241e0026a41186a2206200241106a41186a290300370300200241e0026a41106a220c200241106a41106a290300370300200241e0026a41086a220e200241106a41086a29030037030020024188016a41086a220d200241086a280200360200200220022903103703e0022002200229030037038801200041386a2001290300370300200041306a2008290300370300200041286a2004290300370300200041206a2007290300370300200041186a2006290300370300200041106a200c290300370300200041086a200e290300370300200020022903e002370300200020033602402000200229038801370244200041cc006a200d2802003602000b200241a0036a24000bc10501037f23004190016b22022400200241e0006a22034200370300200241d8006a22044200370300200241c8006a41086a420037030020024200370348200241c8006a41a081ca004107108102200241e8006a41e4d1c100410c1081022003200241e8006a41086a29000037030020042002290068370300200241106a200241c8006a4120108e02200241c8006a2002280214410020022802101b2204200010c206200228024822002002280250108f0221030240200228024c450d002000102e0b4101210002400240024020030d00200241186a41bed8c8004108108102200241e8006a41edd8c800410e108102200220043602382002200241386a410410a301370378200241d4006a2203200241386a41046a3602002002200241f8006a41086a36024c2002200241386a3602502002200241f8006a360248200241286a200241c8006a107c4120102c2200450d012002422037027c20022000360278200241f8006a200141201074200220022802782200200228028001220410a301370388012003200020046a36020020022000360250200220024188016a41086a36024c200220024188016a360248200241386a200241c8006a107c0240200228027c450d002000102e0b20022802302203200228024022046a41206a2200417f4c0d020240024020000d00410121010c010b2000102c2201450d020b200241003602502002200036024c20022001360248200241c8006a200241186a41101074200241c8006a200241e8006a41101074200241c8006a2002280228220020031074200241c8006a20022802382203200410740240200228023c450d002003102e0b0240200228022c450d002000102e0b200241086a200228024822042002280250108e02200228020c2100200228020821030240200228024c450d002004102e0b200341004720004100477121000b20024190016a240020000f0b1036000b1038000bbf0302077f017e230041a0016b22022400200241086a1094030240024020022903084202520d00200041003602200c010b200241f0006a200241086a41106a280200200110a103200241c0006a20022802702203200228027810a20320024180016a41186a2204200241c0006a41186a29030037030020024180016a41106a2205200241c0006a41106a2903003703004108210120024180016a41086a2206200241c0006a41086a2903003703002002200229034037038001200241ec006a280200210702400240200228026022080d0042002109200241206a41186a4200370300200241206a41106a4200370300200241206a41086a4200370300200242003703200c010b200241206a41086a2006290300370300200241206a41106a2005290300370300200241206a41186a2004290300370300200220022903800137032020022902642109200821010b02402002280274450d002003102e0b2000200229032037030020002009370224200020013602202000412c6a2007360200200041186a200241206a41186a290300370300200041106a200241206a41106a290300370300200041086a200241206a41086a2903003703000b200241a0016a24000bb60303057f017e037f230041e0006b2202240002400240200128020c2203200128020822046b2205410675220641ffffff3f712006470d0020054101752205417f4c0d00200129020021070240024020050d00410121010c010b2005102c2201450d020b20002001360200200041086a220841003602002000200541057636020420004100200610c10120082802002105024020042003460d00200028020020054105746a2100200241206a41206a21010340200241206a41386a200441386a290300370300200241206a41306a200441306a290300370300200241206a41286a200441286a2903003703002001200441206a290300370300200241086a2206200141086a290000370300200241106a2209200141106a290000370300200241186a220a200141186a29000037030020022001290000370300200041186a200a290300370000200041106a2009290300370000200041086a200629030037000020002002290300370000200541016a2105200041206a21002003200441c0006a2204470d000b0b20082005360200024020074280808080f0ffffff0383500d002007a7102e0b200241e0006a24000f0b1038000b1036000bdd0101027f230041206b22032400024002400240200041046a280200220420016b20024f0d00200120026a22022001490d02200441017422012002200120024b1b22014104200141044b1b220141ffffff3f712001462102200141057421010240024020040d00200341003602100c010b200341186a410136020020032004410574360214200320002802003602100b200320012002200341106a107d200341086a280200210120032802004101460d0120002003280204360200200041046a20014105763602000b200341206a24000f0b2001450d001036000b1038000bad0204047f017e017f037e02400240200128020c2202200128020822036b41306d220441ffffff3f712004470d0020044105742205417f4c0d00200129020021060240024020050d00410121010c010b2005102c2201450d020b20002001360200200041086a220741003602002000200541057636020420004100200410c1012006422088a7210420072802002101024020032002460d00200028020020014105746a21000340200341086a2900002108200341106a29000021092003290000210a200041186a200341186a290000370000200041106a2009370000200041086a20083700002000200a370000200141016a2101200041206a21002002200341306a2203470d000b0b2007200136020002402004450d00200441306c450d002006a7102e0b0f0b1038000b1036000b820203017f017e067f0240024020012802082202ad420c7e2203422088a70d002003a72204417f4c0d00200128020021054104210102402004450d002004102c2201450d020b2000410036020820002001360200200041046a2004410c6e220636020002402004410c490d00200241ffffffff0371210703402007450d01200541086a2802002204417f4c0d02200528020021080240024020040d00410121090c010b2004102c2209450d040b20092008200410e9082108200141086a2004360200200141046a2004360200200120083602002005410c6a21052001410c6a21012007417f6a21072006417f6a22060d000b0b200020023602080f0b1038000b1036000bd10503027f017e0a7f230041206b220224000240024020012802082203ad42247e2204422088a70d002004a72205417f4c0d00200128020021064104210702402005450d002005102c2207450d020b410021082000410036020820002007360200200041046a200541246e2209360200024020054124490d002002411e6a210a034020052008460d014101210b02400240024002400240200620086a22012d00000e050104020300010b200a200141036a2d00003a00004104210b200241086a41046a200141146a2d00003a00002002200141016a2f00003b011c2002200141106a2800003602082001410c6a280000210c200141086a280000210d200141046a280000210e0c030b200a200141036a2d00003a0000200241086a41086a200141186a290000370300200241086a41106a200141206a2d00003a00002002200141016a2f00003b011c2002200141106a2900003703082001410c6a280000210c200141086a280000210d200141046a280000210e4100210b0c020b2001410c6a280200220d417f4c0d04200141046a280200210102400240200d0d004101210e0c010b200d102c220e450d060b200e2001200d10e9081a4102210b200d210c0c010b4103210b200a200141036a2d00003a0000200241086a41086a200141186a290000370300200241086a41106a200141206a2d00003a00002002200141016a2f00003b011c2002200141106a2900003703082001410c6a280000210c200141086a280000210d200141046a280000210e0b200720086a2201200b3a0000200141016a20022f011c3b0000200141036a200a2d00003a00002001410c6a200c360200200141086a200d360200200141046a200e360200200141106a2002290308370200200141186a200241086a41086a290300370200200141206a200241086a41106a280200360200200841246a21082009417f6a22090d000b0b20002003360208200241206a24000f0b1038000b1036000bdb0205027f017e037f017e037f230041206b220224000240024020012802082203ad42307e2204422088a70d002004a72205417f4c0d00200128020021060240024020050d00410821010c010b2005102c2201450d020b2000410036020820002001360200200041046a200541306e2207360200024020054130490d00200341ffffffff0071210503402005450d01200641086a290300210420062903002108200241186a2209200641286a290300370300200241106a220a200641206a290300370300200241086a220b200641186a2903003703002002200641106a2903003703002001200437030820012008370300200141106a2002290300370300200141186a200b290300370300200141206a200a290300370300200141286a2009290300370300200641306a2106200141306a21012005417f6a21052007417f6a22070d000b0b20002003360208200241206a24000f0b1038000b1036000bbf0304027f017e067f077e230041306b220224000240024020012802082203ad42d0007e2204422088a70d002004a72205417f4c0d00200128020021060240024020050d00410821010c010b2005102c2201450d020b2000410036020820002001360200200041046a200541d0006e22073602000240200541d000490d0003402005450d01200241106a41086a2208200641086a290300370300200241106a41106a2209200641106a290300370300200241106a41186a220a200641186a29030037030020022006290300370310200641286a2903002104200641306a290300210b200641386a290300210c2006290320210d2002200641c0006a10c501200a290300210e2009290300210f2008290300211020022903102111200141386a200c370300200141306a200b370300200141286a2004370300200141206a200d370300200141086a201037030020012011370300200141106a200f370300200141186a200e370300200141c0006a2002290300370300200141c8006a200241086a280200360200200141d0006a2101200541b07f6a2105200641d0006a21062007417f6a22070d000b0b20002003360208200241306a24000f0b1038000b1036000bdd0603027f017e0d7f230041106b220224000240024020012802082203ad42247e2204422088a70d002004a72205417f4c0d00200128020021064104210702402005450d002005102c2207450d020b410021082000410036020820002007360200200041046a200541246e2209360200024020054124490d00034020052008460d010240024002400240024002400240200620086a22012d00000e06010203040500010b2001410c6a280200220a417f4c0d08200141046a280200210102400240200a0d004101210b0c010b200a102c220b450d0a0b200b2001200a10e908410876210c4105210d200a210e0c050b2002200141146a2900003703002002200141196a290000370005200141016a2f0000200141036a2d000041107472210f200141046a280000220b410876210c200141106a28000021102001410c6a280000210a200141086a280000210e4100210d0c040b200141106a2802002210417f4c0d06200141036a2d0000210f200141016a2f0000210a200141086a2802002111200141046a2d0000210b4101210d4101210e02402010450d002010102c220e450d080b200a200f41107472210f200e2011201010e9081a2010210a0c030b200141106a2802002210417f4c0d05200141036a2d0000210f200141016a2f0000210a200141086a280200210d200141046a2d0000210b0240024020100d004101210e0c010b2010102c220e450d070b200a200f41107472210f200e200d201010e9081a4102210d2010210a0c020b200141106a2802002210417f4c0d04200141036a2d0000210f200141016a2f0000210a200141086a280200210d200141046a2d0000210b0240024020100d004101210e0c010b2010102c220e450d060b200a200f41107472210f200e200d201010e9081a4103210d2010210a0c010b4104210d200141046a280200210b2001410c6a280200210a200141086a280200210e4100210c0b200720086a2201200d3a0000200141036a200f4110763a0000200141016a200f3b0000200141106a20103602002001410c6a200a360200200141086a200e360200200141046a200c410874200b41ff017172360200200141146a20022903003702002001411c6a200241086a290300370200200841246a21082009417f6a22090d000b0b20002003360208200241106a24000f0b1038000b1036000be20102047f037e024002402001280208220241ffffff3f712002470d0020024105742203417f4c0d00200128020021040240024020030d00410121010c010b2003102c2201450d020b2000410036020820002001360200200041046a2003410576220536020002402003450d0003402005450d01200441086a2900002106200441106a290000210720042900002108200141186a200441186a290000370000200141106a2007370000200141086a200637000020012008370000200141206a2101200441206a21042005417f6a22050d000b0b200020023602080f0b1038000b1036000bf4380f027f017e167f017e017f027e0d7f027e047f017e057f047e0b7f027e037f230041c0056b220224000240024020012802082203ad42b0027e2204422088a70d002004a72205417f4c0d00200128020021060240024020050d00410821070c010b2005102c2207450d020b410021082000410036020820002007360200200041046a200541b0026e22093602000240200541b002490d00200241a8036a210a20024190056a210b200241d0036a210c200241a4036a210d200241f8036a210e200241d8036a210f200241b8036a211020024198036a2111200241d4036a2112200241a0036a2113034020052008460d0102400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200620086a22012802000e1c0102030405060708090a0b0c0d0e0f101112131415161718191a1b00010b20024190036a200141386a10ca0120024180036a41086a2214200141246a2d00003a000020022001411c6a29020037038003200141256a2d000021152002200141266a2f01003b01be01200141186a2802002116200141146a2802002117200141106a2802002118200141086a2903002104200141286a28020021192001412c6a280200211a200141306a290300211b200141f8016a280200211c200229039003211d200229039803211e200241d0016a201341b00110e9081a20014184026a280200211f20014180026a2802002120200241c0016a41086a20142d00003a000020022002290380033703c001200241086a200241d0016a41b00110e9081a411b21140c1b0b20024190036a200141086a10cb01200220022802a4033602c00120022802a0032116200228029c03211720022802980321182002290390032104410021140c1a0b20024190036a200141046a10cc01200241c0016a41086a200a41086a2d00003a00002002200a2902003703c001200220022f01b2033b01be0120022802a403211620022802a0032117200228029c0321182002290294032104200228029003212120022d00b1032115410121140c190b20024190036a200141086a10cd01200241c0016a41086a200d41086a2d00003a00002002200d2902003703c001200220022f01ae033b01be01200241c0036a290300211d20022903b803211b20022802a0032116200228029c0321172002280298032118200229039003210420022d00ad03211520022802b003211920022802b403211a20022903c803211e200241086a200c41b00110e9081a200241d0016a41086a200b41086a290200370300200241d0016a41106a200b41106a290200370300200241d0016a41186a200b41186a2902003703002002200b2902003703d001200228028c05211f20022802880521202002280284052122200228028005211c410221140c180b200141086a2903002104410321140c170b4104211402400240024002400240024002400240200141046a2d0000417f6a0e050102030405000b41e2a0cc00412841e89bc4001039000b200141086a2802002101410121140c040b20024190036a41086a200141246a2d00003a000020022001411c6a29000037039003200141056a2f0000200141076a2d0000411074722123200141186a2800002116200141146a2800002117200141106a2800002124200141286a2802002119200141086a2900002204a721012004422088a7212541022114202621150c040b200141086a2802002101410321140c020b20024190036a41086a200141246a2d00003a000020022001411c6a29000037039003200141056a2f0000200141076a2d0000411074722123200141256a2d00004100472115200141186a2800002116200141146a2800002117200141106a2800002124200141286a2802002119200141086a2900002204a721012004422088a721250c020b200141086a2802002101410521140b202721192026211520282117202921160b200241c0016a41086a20024190036a41086a2d00003a000020022002290390033703c001200220022f01d0013b01be01202341087420147221212025ad4220862001ad8421044104211420192127201521262017212820162129202421180c160b20024190036a200141086a10ce01200241c0016a41086a200d41086a2d00003a0000200241086a41086a200c41086a290200370300200241086a41106a200c41106a290200370300200241086a41186a200c41186a2902003703002002200d2902003703c001200220022f01ae033b01be012002200c290200370308200241c0036a290300211d20022903b803211b20022802a0032116200228029c0321172002280298032118200229039003210420022d00ad03211520022802b003211920022802b403211a20022903c803211e410521140c150b20024190036a200141046a10cf0120022902940321042002280290032121410621140c140b20024190036a200141086a10d001200241c0016a41086a200d41086a2d00003a0000200241086a41086a200c41086a290200370300200241086a41106a200c41106a2902003703002002200d2902003703c001200220022f01ae033b01be012002200c290200370308200241c0036a290300211d20022903b803211b20022802a0032116200228029c0321172002280298032118200229039003210420022d00ad03211520022802b003211920022802b403211a20022903c803211e410721140c130b10d101000b02400240200141046a22142802000d0041002121202a2117202b21160c010b200241086a41086a200141246a2d00003a0000201141186a200141e8006a290200370200201141106a200141e0006a290200370200201141086a200141d8006a2902003702002011200141d0006a29020037020020022001411c6a2900003703082002200141266a2f01003b01c0012002200141c8006a29020037039003200141386a290200212c200141306a290200212d200141186a2802002116200141146a2802002117200141106a280200212e200141256a2d0000212f200141286a28020021302001412c6a2802002131200141c0006a2902002132201041186a20014188016a290200370200201041106a20014180016a290200370200201041086a200141f8006a2902003702002010200141f0006a290200370200200f20014190016a290200370200200f41086a20014198016a290200370200200f41106a200141a0016a290200370200200f41186a200141a8016a290200370200200e200141b0016a290200370200200e41086a200141b8016a290200370200200e41106a200141c0016a290200370200200e41186a200141c8016a2902003702002001410c6a2802002233417f4c0d15201428020021010240024020330d00410121210c010b2033102c2221450d170b20212001203310e9081a20024180036a41086a200241086a41086a2d00003a00002002200229030837038003200220022f01c0013b01ce01200241d0016a20024190036a41880110e9081a2017212a2016212b0b200241c0016a41086a20024180036a41086a2d00003a000020022002290380033703c001200220022f01ce013b01be01200241086a200241d0016a41880110e9081a2033ad4220862033ad842104410921142032211e202d211b202c211d2031211a20302119202f2115202e21180c110b20024190036a200141086a10d201200241c0016a41086a200d41086a2d00003a00002002200d2902003703c001200220022f01ae033b01be01200241c0036a290300211d20022903b803211b20022802a0032116200228029c0321172002280298032118200229039003210420022d00ad03211520022802b003211920022802b403211a20022903c803211e200241086a200c41b00110e9081a200241d0016a41086a200b41086a290200370300200241d0016a41106a200b41106a2902003703002002200b2902003703d001200228028c05211f20022802880521202002280284052122200228028005211c410a21140c100b20024190036a200141046a10d301200241c0016a41086a200a41086a2d00003a0000200241086a41086a201241086a290200370300200241086a41106a201241106a290200370300200241086a41186a201241186a290200370300200241086a41206a201241206a2802003602002002200a2902003703c001200220022f01b2033b01be0120022012290200370308200241c4036a290200211d20022902bc03211b20022802a403211620022802a0032117200228029c0321182002290294032104200228029003212120022d00b103211520022802b403211920022802b803211a20022902cc03211e410b21140c0f0b10d401000b20024190036a200141086a10d501200241c0016a41086a200d41086a2d00003a00002002200d2902003703c001200220022f01ae033b01be01200241c0036a290300211d20022903b803211b20022802a0032116200228029c0321172002280298032118200229039003210420022d00ad03211520022802b003211920022802b403211a410d21140c0d0b20024190036a200141086a10d601200241c0016a41086a200d41086a2d00003a00002002200d2902003703c001200220022f01ae033b01be01200241c0036a290300211d20022903b803211b20022802a0032116200228029c0321172002280298032118200229039003210420022d00ad03211520022802b003211920022802b403211a410e21140c0c0b20024190036a200141086a10d601200241c0016a41086a200d41086a2d00003a00002002200d2902003703c001200220022f01ae033b01be01200241c0036a290300211d20022903b803211b20022802a0032116200228029c0321172002280298032118200229039003210420022d00ad03211520022802b003211920022802b403211a410f21140c0b0b20024190036a200141086a10d701200241c0016a41086a200d41086a2d00003a00002002200d2902003703c001200220022f01ae033b01be0120022802a0032116200228029c0321172002280298032118200229039003210420022d00ad03211520022802b003211920022802b403211a411021140c0a0b4107211702400240024002400240024002400240200141046a2d0000417f6a0e0701020304050607000b41e2a0cc00412841a4c3cb001039000b20024190036a41086a200141246a2d00003a000020022001411c6a29000037039003200141056a2f0000200141076a2d0000411074722134200141186a2800002135200141146a2800002136200141106a2800002137200141086a2900002138410121170c050b20024190036a41086a200141246a2d00003a000020022001411c6a29000037039003200141056a2f0000200141076a2d0000411074722134200141186a2800002135200141146a2800002136200141106a2800002137200141086a2900002138410221170c040b20024190036a41086a200141246a2d00003a000020022001411c6a290000370390032002200141266a2f00003b01d001200141056a2f0000200141076a2d000041107472213420394280808080806083200141c0006a350000200141c4006a31000042208684842139200141386a290000213a200141306a290000213b2001412c6a280000213c200141286a280000213d200141256a2d0000213e200141186a2800002135200141146a2800002136200141106a2800002137200141086a2900002138410321170c030b20024190036a200141086a10c80120022802980321372002290390032138410421170c020b20024190036a41086a200141246a2d00003a000020022001411c6a2900003703900341052117200141056a2f0000200141076a2d0000411074722134200141186a2800002135200141146a2800002136200141106a2800002137200141086a29000021380c010b20024190036a41086a200141246a2d00003a000020022001411c6a29000037039003200141056a2f0000200141076a2d0000411074722134200141186a2800002135200141146a2800002136200141106a2800002137200141086a2900002138410621170b200241c0016a41086a20024190036a41086a2d00003a000020022002290390033703c001200220022f01d0013b01be0120344108742017722121411121142039211e203b211b203a211d203c211a203d2119203e2115203621172035211620372118203821040c090b024002400240024002400240200141086a280200417f6a0e03010203000b41e2a0cc0041284184ccc2001039000b200141386a290300211d200141306a290300211b41012117024002400240024002402001410c6a2d00000e050104020300010b4104211720024190036a41046a200141206a2d00003a000020022001411c6a280000360290032001410d6a2f00002001410f6a2d000041107472213f200141186a2800002140200141146a2800002141200141106a28000021420c030b20024198036a200141246a2d00003a000020022001411c6a290000370390032002200141266a2f00003b01082001410d6a2f00002001410f6a2d000041107472213f2001412c6a2d00002143200141286a2800002144200141256a2d00002145200141186a2800002140200141146a2800002141200141106a2800002142410021170c020b200141186a2802002241417f4c0d11200141106a28020021010240024020410d00410121420c010b2041102c2242450d130b20422001204110e9081a41022117204121400c010b20024198036a200141246a2d00003a000020022001411c6a290000370390032002200141266a2f00003b01082001410d6a2f00002001410f6a2d000041107472213f2001412c6a2d00002143200141286a2800002144200141256a2d00002145200141186a2800002140200141146a2800002141200141106a2800002142410321170b200241d0016a41086a20024190036a41086a2d00003a000020022002290390033703d001200220022f01083b018003204341ff0171211a42012104203f21010c030b2001410c6a28020022174108762101420221040c010b2001410c6a28020022174108762101420321040b2046211a2047211b2048211d0b200241c0016a41086a200241d0016a41086a2d00003a0000200220022903d0013703c001200220022f0180033b01be012001410874201741ff017172ad422086200484210441122114201a2146201b2147201d214820442119204521152041211720402116204221180c080b20024190036a200141086a10d801200241c0016a41086a200d41086a2d00003a0000200241086a41086a200c41086a290200370300200241086a41106a200c41106a290200370300200241086a41186a200c41186a290200370300200241086a41206a200c41206a290200370300200241086a41286a200c41286a2902003703002002200d2902003703c001200220022f01ae033b01be012002200c290200370308200241c0036a290300211d20022903b803211b20022802a0032116200228029c0321172002280298032118200229039003210420022d00ad03211520022802b003211920022802b403211a20022903c803211e411321140c070b20024190036a200141086a10d901200241c0016a41086a200d41086a2d00003a0000200241086a41086a200c41086a290200370300200241086a41106a200c41106a290200370300200241086a41186a200c41186a290200370300200241086a41206a200c41206a290200370300200241086a41286a200c41286a290200370300200241086a41306a200c41306a2902003703002002200d2902003703c001200220022f01ae033b01be012002200c29020037030820024190036a41306a290300211d20022903b803211b20022802a0032116200228029c0321172002280298032118200229039003210420022d00ad03211520022802b003211920022802b403211a20022903c803211e411421140c060b0240024002400240200141046a2f0100417f6a0e03010200010b20024190036a200141086a10c9012002280298032149200228029403214a2002280290032114410321010c020b20024190036a200141086a10c9012002280298032149200228029403214a2002280290032114410121010c010b200141066a2f0100214b41b002102c2214450d0a20024190036a200141086a28020010da01201420024190036a41b00210e9081a410221010b204b4110742001722121204aad4220862014ad84210441152114204921180c050b20024190036a200141086a10db01200241c0016a41086a200d41086a2d00003a00002002200d2902003703c001200220022f01ae033b01be01200241c0036a290300211d20022903b803211b20022802a0032116200228029c0321172002280298032118200229039003210420022d00ad03211520022802b003211920022802b403211a20022903c803211e200241086a200c41b00110e9081a200241d0016a41086a200b41086a290200370300200241d0016a41106a200b41106a290200370300200241d0016a41186a200b41186a290200370300200241d0016a41206a200b41206a2902003703002002200b2902003703d001200228028c05211f20022802880521202002280284052122200228028005211c411621140c040b20024190036a200141046a10dc01200241c0016a41086a200a41086a2d00003a00002002200a2902003703c001200220022f01b2033b01be01200220022802d403360208200241c4036a290200211d20022902bc03211b20022802a403211620022802a0032117200228029c0321182002290294032104200228029003212120022d00b103211520022802b403211920022802b803211a20022902cc03211e411721140c030b20024190036a200141086a10dd01200241c0016a41086a200d41086a2d00003a00002002200d2902003703c001200220022f01ae033b01be01200220022903d003370308200241c0036a290300211d20022903b803211b20022802a0032116200228029c0321172002280298032118200229039003210420022d00ad03211520022802b003211920022802b403211a20022903c803211e411821140c020b20024190036a200141086a10de01200241c0016a41086a200d41086a2d00003a00002002200d2902003703c001200220022f01ae033b01be01200241c0036a290300211d20022903b803211b20022802a0032116200228029c0321172002280298032118200229039003210420022d00ad03211520022802b003211920022802b403211a20022903c803211e411921140c010b20024190036a200141086a10df01200241c0016a41086a200d41086a2d00003a00002002200d2902003703c001200220022f01ae033b01be01200241c0036a290300211d20022903b803211b20022802a0032116200228029c0321172002280298032118200229039003210420022d00ad03211520022802b003211920022802b403211a20022903c803211e411a21140b200720086a22012014360200200141186a2016360200200141146a2017360200200141106a2018360200200141086a2004370300200141046a2021360200200241c0016a41086a2d0000211420022903c0012104200141256a20153a0000200141386a201d370200200141306a201b3702002001411c6a2004370200200141246a20143a0000200141c0006a201e3702002001412c6a201a360200200141286a2019360200200141266a20022f01be013b0100200141c8006a200241086a41b00110e9081a20014184026a201f36020020014180026a2020360200200141fc016a2022360200200141f8016a201c36020020014188026a20022903d00137020020014190026a200241d0016a41086a29030037020020014198026a200241d0016a41106a290300370200200141a0026a200241d0016a41186a290300370200200141a8026a200241f0016a290300370200200841b0026a21082009417f6a22090d000b0b20002003360208200241c0056a24000f0b1038000b1036000bce0d03057f017e287f024002402001280208220241ffffffff01712002470d0020024103742203417f4c0d00200128020021040240024020030d00410421050c010b2003102c2205450d020b200020053602002000200341037636020420052004200241037410e9081a20002002360208200141146a2802002206ad420c7e2207422088a70d002007a72204417f4c0d00200128020c21034104210202402004450d002004102c2202450d020b20022003200410e9082108200141206a280200220241ffffffff00712002470d0020024104742209417f4c0d00200128021821054104210302402009450d002009102c2203450d020b20032005200241047410e908210a2001412c6a280200220bad42147e2207422088a70d002007a7220c417f4c0d002001280224210302400240200c0d00410421050c010b200c102c2205450d020b20052003200c10e908210d200141386a280200220ead42187e2207422088a70d002007a7220f417f4c0d002001280230210302400240200f0d00410421050c010b200f102c2205450d020b20052003200f10e9082110200141c4006a2802002211ad421c7e2207422088a70d002007a72212417f4c0d00200128023c21030240024020120d00410421050c010b2012102c2205450d020b20052003201210e9082113200141d0006a280200220341ffffff3f712003470d0020034105742214417f4c0d00200128024821050240024020140d00410421150c010b2014102c2215450d020b20152005200341057410e9082116200141dc006a2802002217ad42247e2207422088a70d002007a72215417f4c0d00200128025421050240024020150d00410421180c010b2015102c2218450d020b20182005201510e9082119200141e8006a280200221aad42287e2207422088a70d002007a72218417f4c0d00200128026021050240024020180d004104211b0c010b2018102c221b450d020b201b2005201810e908211c200141f4006a280200221dad422c7e2207422088a70d002007a7221b417f4c0d00200128026c210502400240201b0d004104211e0c010b201b102c221e450d020b201e2005201b10e908211f20014180016a2802002220ad42307e2207422088a70d002007a7221e417f4c0d002001280278210502400240201e0d00410421210c010b201e102c2221450d020b20212005201e10e90821222001418c016a2802002223ad42347e2207422088a70d002007a72221417f4c0d0020012802840121050240024020210d00410421240c010b2021102c2224450d020b20242005202110e908212520014198016a2802002226ad42387e2207422088a70d002007a72224417f4c0d0020012802900121050240024020240d00410421270c010b2024102c2227450d020b20272005202410e9082128200141a4016a2802002229ad423c7e2207422088a70d002007a72227417f4c0d00200128029c0121050240024020270d004104212a0c010b2027102c222a450d020b202a2005202710e908212b200141b0016a280200220541ffffff1f712005470d002005410674222c417f4c0d0020012802a801212a02400240202c0d004104212d0c010b202c102c222d450d020b202d202a200541067410e908212d200141bc016a280200222ead42c4007e2207422088a70d002007a7222a417f4c0d0020012802b401212f410421010240202a450d00202a102c2201450d020b2001202f202a10e9082101200041bc016a202e360200200041b8016a202a41c4006e360200200020013602b401200041b0016a2005360200200041ac016a202c4106763602002000202d3602a801200041a4016a2029360200200041a0016a2027413c6e3602002000202b36029c0120004198016a202636020020004194016a202441386e36020020002028360290012000418c016a202336020020004188016a202141346e360200200020253602840120004180016a2020360200200041fc006a201e41306e36020020002022360278200041f4006a201d360200200041f0006a201b412c6e3602002000201f36026c200041e8006a201a360200200041e4006a201841286e3602002000201c360260200041dc006a2017360200200041d8006a201541246e36020020002019360254200041d0006a2003360200200041cc006a201441057636020020002016360248200041c4006a2011360200200041c0006a2012411c6e3602002000201336023c200041386a200e360200200041346a200f41186e360200200020103602302000412c6a200b360200200041286a200c41146e3602002000200d360224200041206a20023602002000411c6a20094104763602002000200a360218200041146a2006360200200041106a2004410c6e3602002000200836020c0f0b1038000b1036000b9d0803047f017e087f230041106b2202240002400240024002400240024002400240024002400240024002402001280200417f6a0e0a01020304050607080900010b2001410c6a2802002203417f4c0d0a200128020421010240024020030d00410121040c010b2003102c2204450d0c0b20042001200310e90821012000410c6a2003360200200041086a2003360200200020013602042000410a3602000c090b20004101360200200020012802043602040c080b2001410c6a2802002203417f4c0d08200128020421010240024020030d00410121040c010b2003102c2204450d0a0b20042001200310e90821012000410c6a2003360200200041086a200336020020002001360204200041023602000c070b20004103360200200041086a200141086a2903003703000c060b2001410c6a2802002203417f4c0d06200128020421010240024020030d00410121040c010b2003102c2204450d080b20042001200310e90821012000410c6a2003360200200041086a200336020020002001360204200041043602000c050b2001410c6a2802002203417f4c0d05200128020421010240024020030d00410121040c010b2003102c2204450d070b20042001200310e90821012000410c6a2003360200200041086a200336020020002001360204200041053602000c040b20004106360200200020012902043702042000410c6a2001410c6a2802003602000c030b2001410c6a2802002205ad42187e2206422088a70d032006a72203417f4c0d030240024020030d00200341186e2107410421080c010b200128020421092003102c2208450d05200341186e210720034118490d00200541ffffffff0171210a4100210b2007210c0340200a450d012009200b6a220141086a2802002203417f4c0d05200128020021040240024020030d004101210d0c010b2003102c220d450d070b200d2004200310e908210d200141146a2802002204417f4c0d052001410c6a28020021010240024020040d004101210e0c010b2004102c220e450d070b200e2001200410e908210e2008200b6a2201200d360200200141146a2004360200200141106a20043602002001410c6a200e360200200141086a2003360200200141046a2003360200200a417f6a210a200b41186a210b200c417f6a220c0d000b0b20002008360204200041073602002000410c6a2005360200200041086a20073602000c020b2002200141046a10c301200041083602002000410c6a200241086a280200360200200020022903003702040c010b2001410c6a2802002203417f4c0d01200128020421040240024020030d004101210b0c010b2003102c220b450d030b200b2004200310e90821042000410c6a2003360200200041086a20033602002000200436020420004109360200200041106a20012802103602000b200241106a24000f0b1038000b1036000bca0701097f230041b0026b22022400024002400240024002400240024002400240024020012d0000417f6a0e06010203040506000b41e2a0cc00412841ecb0c4001039000b200141106a28020021032001410c6a2802002104200141086a2802002105200141046a280200210620012d0001210741b002102c2208450d062002200141146a28020010a8042008200241b00210e9082101200041106a20033602002000410c6a2004360200200041086a2005360200200041046a2006360200200041146a2001360200200020073a0001200041013a00000c050b200041023a0000200041046a200141046a2902003702000c040b2001410c6a2802002203417f4c0d05200141046a28020021040240024020030d00410121050c010b2003102c2205450d050b20052004200310e90821042001411c6a2802002105200141186a280200210620012d00012107200128021421082001280210210941b002102c220a450d042002200128022010a804200a200241b00210e90821012000411c6a2005360200200041186a2006360200200041146a2008360200200041106a20093602002000410c6a2003360200200041086a2003360200200041046a2004360200200041206a2001360200200020073a0001200041033a00000c030b2001410c6a2802002203417f4c0d04200141046a28020021010240024020030d00410121040c010b2003102c2204450d040b20042001200310e90821012000410c6a2003360200200041086a2003360200200041046a2001360200200041043a00000c020b200141106a28020021032001410c6a2802002104200141086a2802002105200141046a280200210620012d0001210741b002102c2208450d022002200141146a28020010a8042008200241b00210e9082101200041106a20033602002000410c6a2004360200200041086a2005360200200041046a2006360200200041146a2001360200200020073a0001200041053a00000c010b2001410c6a2802002203417f4c0d02200141046a28020021040240024020030d00410121050c010b2003102c2205450d020b20052004200310e90821042001411c6a2802002105200141186a280200210620012d00012107200128021421082001280210210941b002102c220a450d012002200128022010a804200a200241b00210e90821012000411c6a2005360200200041186a2006360200200041146a2008360200200041106a20093602002000410c6a2003360200200041086a2003360200200041046a2004360200200041206a2001360200200020073a0001200041063a00000b200241b0026a24000f0b1036000b1038000b9b1b03047f017e167f230041e0036b2202240002400240024002402001280200417f6a0e03010200010b20004103360200200041186a200141186a2d00003a0000200041106a200141106a290300370300200041086a200141086a2903003703000c020b20024180026a41186a220320014198026a29000037030020024180026a41106a220420014190026a29000037030020024180026a41086a220520014188026a290000370300200220014180026a29000037038002200141186a2903002106200241e0026a41086a2207200141386a290200370300200241e0026a41106a2208200141c0006a290200370300200241e0026a41186a2209200141c8006a290200370300200241c0026a41086a220a200141d8006a290200370300200241c0026a41106a220b200141e0006a290200370300200241c0026a41186a220c200141e8006a290200370300200241a0026a41086a220d200141f8006a290200370300200241a0026a41106a220e20014180016a290200370300200241a0026a41186a220f20014188016a2902003703002002200141306a2902003703e0022002200141d0006a2902003703c0022002200141f0006a2902003703a002200141206a2802002110200241f0016a200141246a10c701200241c0036a41086a2211200141a8016a290200370300200241c0036a41106a2212200141b0016a290200370300200241c0036a41186a2213200141b8016a290200370300200241a0036a41086a2214200141c8016a290200370300200241a0036a41106a2215200141d0016a290200370300200241a0036a41186a2216200141d8016a29020037030020024180036a41086a2217200141e8016a29020037030020024180036a41106a2218200141f0016a29020037030020024180036a41186a2219200141f8016a2902003703002002200141a0016a2902003703c0032002200141c0016a2902003703a0032002200141e0016a2902003703800320014190016a280200211a20024180016a20014194016a10c701200241186a221b2003290300370300200241106a22032004290300370300200241086a22042005290300370300200241d0016a41086a22052007290300370300200241d0016a41106a22072008290300370300200241d0016a41186a22082009290300370300200241b0016a41086a2209200a290300370300200241b0016a41106a220a200b290300370300200241b0016a41186a220b200c2903003703002002200229038002370300200220022903e0023703d001200220022903c0023703b00120024190016a41186a220c200f29030037030020024190016a41106a220f200e29030037030020024190016a41086a220e200d290300370300200241e0006a41186a220d2013290300370300200241e0006a41106a22132012290300370300200241e0006a41086a22122011290300370300200241c0006a41186a221c2016290300370300200241c0006a41106a22162015290300370300200241c0006a41086a22152014290300370300200220022903a00237039001200220022903c003370360200220022903a003370340200241206a41186a22142019290300370300200241206a41106a22192018290300370300200241206a41086a22182017290300370300200220022903800337032020012802042117200241c0036a200141086a10c301200041206a2010360200200041186a2006370300200041246a20022903f0013702002000412c6a200241f0016a41086a280200360200200041306a20022903d001370300200041386a2005290300370300200041c0006a2007290300370300200041c8006a2008290300370300200041d0006a20022903b001370300200041d8006a2009290300370300200041e0006a200a290300370300200041e8006a200b290300370300200141146a280200210120004190016a201a36020020004188016a200c29030037030020004180016a200f290300370300200041f8006a200e290300370300200041f0006a2002290390013703002000419c016a20024180016a41086a28020036020020004194016a200229038001370200200041a0016a2002290360370300200041a8016a2012290300370300200041b0016a2013290300370300200041b8016a200d290300370300200041d8016a201c290300370300200041d0016a2016290300370300200041c8016a2015290300370300200041c0016a2002290340370300200041f8016a2014290300370300200041f0016a2019290300370300200041e8016a2018290300370300200041e0016a200229032037030020004198026a201b29030037030020004190026a200329030037030020004188026a200429030037030020004180026a200229030037030020002017360204200041106a2011280200360200200041086a20022903c003370200200041146a2001360200200041013602000c010b20024180026a41186a220320014198026a29000037030020024180026a41106a220420014190026a29000037030020024180026a41086a220520014188026a290000370300200220014180026a29000037038002200141186a2903002106200241e0026a41086a2207200141386a290200370300200241e0026a41106a2208200141c0006a290200370300200241e0026a41186a2209200141c8006a290200370300200241c0026a41086a220a200141d8006a290200370300200241c0026a41106a220b200141e0006a290200370300200241c0026a41186a220c200141e8006a290200370300200241a0026a41086a220d200141f8006a290200370300200241a0026a41106a220e20014180016a290200370300200241a0026a41186a220f20014188016a2902003703002002200141306a2902003703e0022002200141d0006a2902003703c0022002200141f0006a2902003703a002200141206a2802002110200241f0016a200141246a10c701200241c0036a41086a2211200141a8016a290200370300200241c0036a41106a2212200141b0016a290200370300200241c0036a41186a2213200141b8016a290200370300200241a0036a41086a2214200141c8016a290200370300200241a0036a41106a2215200141d0016a290200370300200241a0036a41186a2216200141d8016a29020037030020024180036a41086a2217200141e8016a29020037030020024180036a41106a2218200141f0016a29020037030020024180036a41186a2219200141f8016a2902003703002002200141a0016a2902003703c0032002200141c0016a2902003703a0032002200141e0016a2902003703800320014190016a280200211a20024180016a20014194016a10c701200241186a221b2003290300370300200241106a22032004290300370300200241086a22042005290300370300200241d0016a41086a22052007290300370300200241d0016a41106a22072008290300370300200241d0016a41186a22082009290300370300200241b0016a41086a2209200a290300370300200241b0016a41106a220a200b290300370300200241b0016a41186a220b200c2903003703002002200229038002370300200220022903e0023703d001200220022903c0023703b00120024190016a41186a220c200f29030037030020024190016a41106a220f200e29030037030020024190016a41086a220e200d290300370300200241e0006a41186a220d2013290300370300200241e0006a41106a22132012290300370300200241e0006a41086a22122011290300370300200241c0006a41186a221c2016290300370300200241c0006a41106a22162015290300370300200241c0006a41086a22152014290300370300200220022903a00237039001200220022903c003370360200220022903a003370340200241206a41186a22142019290300370300200241206a41106a22192018290300370300200241206a41086a22182017290300370300200220022903800337032020012802042117200241c0036a200141086a10c301200041206a2010360200200041186a2006370300200041246a20022903f0013702002000412c6a200241f0016a41086a280200360200200041306a20022903d001370300200041386a2005290300370300200041c0006a2007290300370300200041c8006a2008290300370300200041d0006a20022903b001370300200041d8006a2009290300370300200041e0006a200a290300370300200041e8006a200b290300370300200141146a280200210120004190016a201a36020020004188016a200c29030037030020004180016a200f290300370300200041f8006a200e290300370300200041f0006a2002290390013703002000419c016a20024180016a41086a28020036020020004194016a200229038001370200200041a0016a2002290360370300200041a8016a2012290300370300200041b0016a2013290300370300200041b8016a200d290300370300200041d8016a201c290300370300200041d0016a2016290300370300200041c8016a2015290300370300200041c0016a2002290340370300200041f8016a2014290300370300200041f0016a2019290300370300200041e8016a2018290300370300200041e0016a200229032037030020004198026a201b29030037030020004190026a200329030037030020004188026a200429030037030020004180026a200229030037030020002017360204200041106a2011280200360200200041086a20022903c003370200200041146a2001360200200041023602000b200241e0036a24000bc61803067f037e047f230041c0006b2202240002400240024002400240024002402001280200417f6a0e0401020300010b200141046a2103410121040240024002400240024020012d00040e050104020300010b2002410a6a200341036a2d00003a0000200241286a41046a200141186a2d00003a0000200220032f00013b01082002200141146a280000360228200141106a28020021052001410c6a2802002106200141086a2802002107410421040c030b2002410a6a200341036a2d00003a0000200241286a41086a2001411c6a290000370300200241286a41106a200141246a2d00003a0000200220032f00013b01082002200141146a290000370328200141106a28020021052001410c6a2802002106200141086a2802002107410021040c020b200141106a2802002205417f4c0d06200141086a28020021040240024020050d00410121070c010b2005102c2207450d080b20072004200510e9081a41022104200521060c010b410321042002410a6a200341036a2d00003a0000200241286a41086a2001411c6a290000370300200241286a41106a200141246a2d00003a0000200220032f00013b01082002200141146a290000370328200141106a28020021052001410c6a2802002106200141086a28020021070b200020043a0004200020022f01083b0005200020022f00243b0025200041106a20053600002000410c6a2006360000200041086a2007360000200041146a2002290328370000200041076a200241086a41026a2d00003a00002000411c6a200241286a41086a290300370000200041246a200241286a41106a2d00003a0000200041276a200241246a41026a2d00003a000020012903282108200041306a200141306a290300370300200041286a2008370300200041043602000c030b200141046a2103410121060240024002400240024020012d00040e050104020300010b2002410a6a200341036a2d00003a0000200241286a41046a200141186a2d00003a0000200220032f00013b01082002200141146a280000360228200141106a28020021042001410c6a2802002105200141086a2802002107410421060c030b2002410a6a200341036a2d00003a0000200241286a41086a2001411c6a290000370300200241286a41106a200141246a2d00003a0000200220032f00013b01082002200141146a290000370328200141106a28020021042001410c6a2802002105200141086a2802002107410021060c020b200141106a2802002205417f4c0d05200141086a28020021040240024020050d00410121070c010b2005102c2207450d070b20072004200510e9081a41022106200521040c010b410321062002410a6a200341036a2d00003a0000200241286a41086a2001411c6a290000370300200241286a41106a200141246a2d00003a0000200220032f00013b01082002200141146a290000370328200141106a28020021042001410c6a2802002105200141086a28020021070b200020063a0004200020022f01083b0005200020022f00243b0025200041106a20043600002000410c6a2005360000200041086a2007360000200041146a2002290328370000200041076a200241086a41026a2d00003a00002000411c6a200241286a41086a290300370000200041246a200241286a41106a2d00003a0000200041276a200241246a41026a2d00003a000020012903282108200041306a200141306a290300370300200041286a2008370300200041013602000c020b200141046a2103410121040240024002400240024020012d00040e050104020300010b2002410a6a200341036a2d00003a0000200241286a41046a200141186a2d00003a0000200220032f00013b01082002200141146a280000360228200141106a28020021062001410c6a2802002105200141086a2802002107410421040c030b2002410a6a200341036a2d00003a0000200241286a41086a2001411c6a290000370300200241286a41106a200141246a2d00003a0000200220032f00013b01082002200141146a290000370328200141106a28020021062001410c6a2802002105200141086a2802002107410021040c020b200141106a2802002205417f4c0d04200141086a28020021040240024020050d00410121070c010b2005102c2207450d060b20072004200510e9081a41022104200521060c010b410321042002410a6a200341036a2d00003a0000200241286a41086a2001411c6a290000370300200241286a41106a200141246a2d00003a0000200220032f00013b01082002200141146a290000370328200141106a28020021062001410c6a2802002105200141086a28020021070b200020043a0004200020022f01083b0005200020022f00243b0025200041106a20063600002000410c6a2005360000200041086a2007360000200041146a2002290328370000200041076a200241086a41026a2d00003a00002000411c6a200241286a41086a290300370000200041246a200241286a41106a2d00003a0000200041276a200241246a41026a2d00003a0000200141306a2903002108200129032821092001290338210a200041c0006a200141c0006a290300370300200041386a200a370300200041306a2008370300200041286a2009370300200041023602000c010b200141046a2107410121034101210b0240024002400240024020012d00040e050104020300010b200241206a200741036a2d00003a0000200241086a41046a200141186a2d00003a0000200220072f00013b011e2002200141146a280000360208200141106a280200210c2001410c6a2802002105200141086a28020021044104210b0c030b200241206a200741036a2d00003a0000200241086a41086a2001411c6a290000370300200241086a41106a200141246a2d00003a0000200220072f00013b011e2002200141146a290000370308200141106a280200210c2001410c6a2802002105200141086a28020021044100210b0c020b200141106a2802002205417f4c0d03200141086a28020021070240024020050d00410121040c010b2005102c2204450d050b20042007200510e9081a4102210b2005210c0c010b4103210b200241206a200741036a2d00003a0000200241086a41086a2001411c6a290000370300200241086a41106a200141246a2d00003a0000200220072f00013b011e2002200141146a290000370308200141106a280200210c2001410c6a2802002105200141086a28020021040b02400240024002400240200141286a220d2d00000e050104020300010b200241266a200d41036a2d00003a000041042103200241286a41046a2001413c6a2d00003a00002002200d2f00013b01242002200141386a280000360228200141346a2802002107200141306a280200210e2001412c6a28020021060c030b200241266a200d41036a2d00003a0000200241306a200141c0006a290000370300200241386a200141c8006a2d00003a00002002200d2f00013b01242002200141386a290000370328200141346a2802002107200141306a280200210e2001412c6a2802002106410021030c020b200141346a2802002207417f4c0d032001412c6a28020021030240024020070d00410121060c010b2007102c2206450d050b20062003200710e9081a410221032007210e0c010b41032103200241266a200d41036a2d00003a0000200241306a200141c0006a290000370300200241386a200141c8006a2d00003a00002002200d2f00013b01242002200141386a290000370328200141346a2802002107200141306a280200210e2001412c6a28020021060b2000200b3a0004200020022f011e3b0005200020022f00053b0025200041106a200c3600002000410c6a2005360000200041086a2004360000200041146a2002290308370000200041076a2002411e6a41026a2d00003a00002000411c6a200241086a41086a290300370000200041246a200241086a41106a2d00003a0000200041276a200241056a41026a2d00003a0000200141d8006a290300210820012903502109200041286a20033a00002000412c6a2006360000200041306a200e360000200041346a2007360000200020022f01243b00292000412b6a200241246a41026a2d00003a0000200041386a2002290328370000200041c0006a200241286a41086a290300370000200041c8006a200241286a41106a2d00003a0000200020022f00213b0049200041cb006a200241216a41026a2d00003a0000200041d8006a2008370300200041d0006a2009370300200041033602000b200241c0006a24000f0b1038000b1036000b8d0503027f017e0f7f230041f0006b220224000240024020012802082203ad42f0007e2204422088a70d002004a72205417f4c0d00200128020021064104210702402005450d002005102c2207450d020b410021012000410036020820002007360200200041046a200541f0006e22083602000240200541f000490d00200341ffffffff0071210903402009450d01200241c0006a41086a220a200620016a220541186a290000370300200241c0006a41106a220b200541206a290000370300200241c0006a41186a220c200541286a290000370300200241206a41086a220d200541386a290000370300200241206a41106a220e200541c0006a290000370300200241206a41186a220f200541c8006a290000370300200241086a2210200541d8006a290000370300200241106a2211200541e0006a290000370300200241186a2212200541e8006a2900003703002002200541106a2900003703402002200541306a2900003703202002200541d0006a29000037030020052802002113200241e0006a200541046a10c701200720016a22052013360200200541046a20022903603702002005410c6a200241e0006a41086a280200360200200541106a2002290340370200200541186a200a290300370200200541206a200b290300370200200541286a200c290300370200200541306a2002290320370200200541386a200d290300370200200541c0006a200e290300370200200541c8006a200f290300370200200541e8006a2012290300370200200541e0006a2011290300370200200541d8006a2010290300370200200541d0006a20022903003702002009417f6a2109200141f0006a21012008417f6a22080d000b0b20002003360208200241f0006a24000f0b1038000b1036000bd41403057f027e017f230041d0006b2202240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d0000417f6a0e170102030405060708090a0b0c0d0e0f1011121314151617000b41e2a0cc00412841f4ebc6001039000b4101210302400240024002400240200141246a2d00000e050104020300010b200241ce006a200141276a2d00003a000041042103200241106a41046a200141386a2d00003a00002002200141256a2f00003b014c2002200141346a280000360210200141306a28000021042001412c6a2800002105200141286a28000021060c030b200241ce006a200141276a2d00003a0000200241186a2001413c6a290000370300200241206a200141c4006a2d00003a00002002200141256a2f00003b014c2002200141346a290000370310200141306a28000021042001412c6a2800002105200141286a2800002106410021030c020b200141306a2802002205417f4c0d19200141286a28020021030240024020050d00410121060c010b2005102c2206450d1b0b20062003200510e9081a41022103200521040c010b200241ce006a200141276a2d00003a0000200241186a2001413c6a290000370300200241206a200141c4006a2d00003a00002002200141256a2f00003b014c2002200141346a290000370310200141306a28000021042001412c6a2800002105200141286a2800002106410321030b200141d0006a290300210720012903482108410421090240024002400240024020012d00010e050001020304000b410021090c030b410121090c020b410221090c010b200241c0006a2001411a6a290000370300200241386a200141126a290000370300200241306a2001410a6a2900003703002002200141026a290000370328410321090b200041246a20033a0000200041256a20022f014c3b0000200041306a20043600002000412c6a2005360000200041286a2006360000200041346a2002290310370000200041c5006a20022f000d3b0000200041276a200241cc006a41026a2d00003a00002000413c6a200241106a41086a290300370000200041c4006a200241106a41106a2d00003a0000200041c7006a2002410d6a41026a2d00003a0000200041d0006a2007370300200041c8006a2008370300200020093a0001200041013a0000200041026a20022903283700002000410a6a200241286a41086a290300370000200041126a200241286a41106a2903003700002000411a6a200241c0006a2903003700000c160b200041023a0000200041106a200141106a290300370300200041086a200141086a2903003703000c150b200041033a0000200041106a200141106a290300370300200041086a200141086a2903003703000c140b200041043a0000200041046a200141046a2802003602000c130b200041053a0000200041046a200141046a280200360200200041086a200141086a2d00004100473a00000c120b200241286a200141046a10c401200041063a00002000410c6a200241306a280200360200200041046a20022903283702000c110b200041073a00000c100b410421050240024002400240024020012d00010e050001020304000b410021050c030b410121050c020b410221050c010b200241c0006a2001411a6a290000370300200241386a200141126a290000370300200241306a2001410a6a2900003703002002200141026a290000370328410321050b200020053a0001200041083a0000200041026a20022903283700002000410a6a200241286a41086a290300370000200041126a200241386a2903003700002000411a6a200241c0006a2903003700000c0f0b4101210302400240024002400240200141046a2d00000e050104020300010b200241126a200141076a2d00003a0000200241286a41046a200141186a2d00003a00002002200141056a2f00003b01102002200141146a280000360228200141106a28000021042001410c6a2800002105200141086a2800002106410421030c030b200241126a200141076a2d00003a0000200241286a41086a2001411c6a290000370300200241286a41106a200141246a2d00003a00002002200141056a2f00003b01102002200141146a290000370328200141106a28000021042001410c6a2800002105200141086a2800002106410021030c020b200141106a2802002205417f4c0d11200141086a28020021010240024020050d00410121060c010b2005102c2206450d130b20062001200510e9081a41022103200521040c010b200241126a200141076a2d00003a0000200241286a41086a2001411c6a290000370300200241286a41106a200141246a2d00003a00002002200141056a2f00003b01102002200141146a290000370328200141106a28000021042001410c6a2800002105200141086a2800002106410321030b200041046a20033a0000200041056a20022f01103b0000200041106a20043600002000410c6a2005360000200041086a2006360000200041146a2002290328370000200041256a20022f004c3b0000200041076a200241106a41026a2d00003a00002000411c6a200241286a41086a290300370000200041246a200241286a41106a2d00003a0000200041276a200241cc006a41026a2d00003a0000200041093a00000c0e0b2000410a3a0000200041046a200141046a2802003602000c0d0b2000410b3a0000200041046a200141046a2802003602000c0c0b2000410c3a0000200020012d00013a00010c0b0b2000410d3a00000c0a0b2000410e3a00000c090b200241286a200141046a10c8012000410f3a00002000410c6a200241306a280200360200200041046a20022903283702000c080b200041103a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a2802003602000c070b200041113a00000c060b200141106a280200220541ffffffff03712005470d0620054102742206417f4c0d06200141086a2802002103200141046a28020021044104210102402006450d002006102c2201450d080b20012003200541027410e9082101200041106a20053602002000410c6a2006410276360200200041086a2001360200200041046a2004360200200041123a00000c050b200041133a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a2802003602000c040b200041143a0000200041106a200141106a290300370300200041086a200141086a2903003703000c030b200041153a0000200041046a200141046a2902003702000c020b200041163a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a2802003602000c010b200241286a200141046a10c401200041173a00002000410c6a200241306a280200360200200041046a20022903283702000b200241d0006a24000f0b1038000b1036000b110041e2a0cc00412841889cc5001039000bc91a05017f017e0a7f027e117f230041c0036b22022400024002400240024002402001280200417f6a0e03010203000b41e2a0cc00412841c499c9001039000b200141186a2903002103200241a0036a41086a22042001413c6a290200370300200241a0036a41106a2205200141c4006a290200370300200241a0036a41186a2206200141cc006a290200370300200241e0026a41086a2207200141dc006a290200370300200241e0026a41106a2208200141e4006a290200370300200241e0026a41186a2209200141ec006a290200370300200241e0026a41206a220a200141f4006a290200370300200241e0026a41286a220b200141fc006a290200370300200241e0026a41306a220c20014184016a290200370300200241e0026a41386a220d2001418c016a2902003703002002200141346a2902003703a0032002200141d4006a2902003703e002200141206a290300210e200141286a290300210f200141306a2802002110200241c0026a41186a2211200141b0016a290200370300200241c0026a41106a2212200141a8016a290200370300200241c0026a41086a2213200141a0016a29020037030020024180026a41386a2214200141f0016a29020037030020024180026a41306a2215200141e8016a29020037030020024180026a41286a2216200141e0016a29020037030020024180026a41206a2217200141d8016a29020037030020024180026a41186a2218200141d0016a29020037030020024180026a41106a2219200141c8016a29020037030020024180026a41086a221a200141c0016a290200370300200220014198016a2902003703c0022002200141b8016a2902003703800220014194016a280200211b200241e0016a41186a221c20014190026a290300370300200241e0016a41106a221d20014188026a290300370300200241e0016a41086a221e20014180026a2903003703002002200141f8016a2903003703e001200241c0016a41186a221f2006290300370300200241c0016a41106a22062005290300370300200241c0016a41086a22052004290300370300200220022903a0033703c00120024180016a41386a2204200d29030037030020024180016a41306a220d200c29030037030020024180016a41286a220c200b29030037030020024180016a41206a220b200a29030037030020024180016a41186a220a200929030037030020024180016a41106a2209200829030037030020024180016a41086a22082007290300370300200220022903e00237038001200241e0006a41186a22202011290300370300200241e0006a41106a22112012290300370300200241e0006a41086a22122013290300370300200220022903c002370360200241206a41386a22132014290300370300200241206a41306a22142015290300370300200241206a41286a22152016290300370300200241206a41206a22162017290300370300200241206a41186a22172018290300370300200241206a41106a22182019290300370300200241206a41086a2219201a2903003703002002200229038002370320200241186a221a201c290300370300200241106a221c201d290300370300200241086a221d201e290300370300200220022903e0013703002001280204211e200241e0026a200141086a10c301200041306a2010360200200041286a200f370300200041206a200e370300200041186a2003370300200041346a20022903c0013702002000413c6a2005290300370200200041c4006a2006290300370200200041cc006a201f290300370200200041d4006a200229038001370200200041dc006a2008290300370200200041e4006a2009290300370200200041ec006a200a290300370200200041f4006a200b290300370200200041fc006a200c29030037020020004184016a200d2903003702002000418c016a2004290300370200200141146a280200210120004194016a201b360200200041b0016a2020290300370200200041a8016a2011290300370200200041a0016a201229030037020020004198016a2002290360370200200041f0016a2013290300370200200041e8016a2014290300370200200041e0016a2015290300370200200041d8016a2016290300370200200041d0016a2017290300370200200041c8016a2018290300370200200041c0016a2019290300370200200041b8016a200229032037020020004190026a201a29030037030020004188026a201c29030037030020004180026a201d290300370300200041f8016a20022903003703002000201e360204200041106a2007280200360200200041086a20022903e002370200200041146a2001360200200041013602000c020b200141186a2903002103200241a0036a41086a22042001413c6a290200370300200241a0036a41106a2205200141c4006a290200370300200241a0036a41186a2206200141cc006a290200370300200241e0026a41086a2207200141dc006a290200370300200241e0026a41106a2208200141e4006a290200370300200241e0026a41186a2209200141ec006a290200370300200241e0026a41206a220a200141f4006a290200370300200241e0026a41286a220b200141fc006a290200370300200241e0026a41306a220c20014184016a290200370300200241e0026a41386a220d2001418c016a2902003703002002200141346a2902003703a0032002200141d4006a2902003703e002200141206a290300210e200141286a290300210f200141306a2802002110200241c0026a41186a2211200141b0016a290200370300200241c0026a41106a2212200141a8016a290200370300200241c0026a41086a2213200141a0016a29020037030020024180026a41386a2214200141f0016a29020037030020024180026a41306a2215200141e8016a29020037030020024180026a41286a2216200141e0016a29020037030020024180026a41206a2217200141d8016a29020037030020024180026a41186a2218200141d0016a29020037030020024180026a41106a2219200141c8016a29020037030020024180026a41086a221a200141c0016a290200370300200220014198016a2902003703c0022002200141b8016a2902003703800220014194016a280200211b200241e0016a41186a221c20014190026a290300370300200241e0016a41106a221d20014188026a290300370300200241e0016a41086a221e20014180026a2903003703002002200141f8016a2903003703e001200241c0016a41186a221f2006290300370300200241c0016a41106a22062005290300370300200241c0016a41086a22052004290300370300200220022903a0033703c00120024180016a41386a2204200d29030037030020024180016a41306a220d200c29030037030020024180016a41286a220c200b29030037030020024180016a41206a220b200a29030037030020024180016a41186a220a200929030037030020024180016a41106a2209200829030037030020024180016a41086a22082007290300370300200220022903e00237038001200241e0006a41186a22202011290300370300200241e0006a41106a22112012290300370300200241e0006a41086a22122013290300370300200220022903c002370360200241206a41386a22132014290300370300200241206a41306a22142015290300370300200241206a41286a22152016290300370300200241206a41206a22162017290300370300200241206a41186a22172018290300370300200241206a41106a22182019290300370300200241206a41086a2219201a2903003703002002200229038002370320200241186a221a201c290300370300200241106a221c201d290300370300200241086a221d201e290300370300200220022903e0013703002001280204211e200241e0026a200141086a10c301200041306a2010360200200041286a200f370300200041206a200e370300200041186a2003370300200041346a20022903c0013702002000413c6a2005290300370200200041c4006a2006290300370200200041cc006a201f290300370200200041d4006a200229038001370200200041dc006a2008290300370200200041e4006a2009290300370200200041ec006a200a290300370200200041f4006a200b290300370200200041fc006a200c29030037020020004184016a200d2903003702002000418c016a2004290300370200200141146a280200210120004194016a201b360200200041b0016a2020290300370200200041a8016a2011290300370200200041a0016a201229030037020020004198016a2002290360370200200041f0016a2013290300370200200041e8016a2014290300370200200041e0016a2015290300370200200041d8016a2016290300370200200041d0016a2017290300370200200041c8016a2018290300370200200041c0016a2019290300370200200041b8016a200229032037020020004190026a201a29030037030020004188026a201c29030037030020004180026a201d290300370300200041f8016a20022903003703002000201e360204200041106a2007280200360200200041086a20022903e002370200200041146a2001360200200041023602000c010b20004103360200200020012902043702040b200241c0036a24000b910403067f017e077f024002402001410c6a2802002202417f4c0d0020012802042103200128020021040240024020020d00410121050c010b2002102c2205450d020b20052003200210e9082106200141186a2802002207ad420c7e2208422088a70d002008a72203417f4c0d000240024020030d002003410c6e21094104210a0c010b2001280210210b2003102c220a450d022003410c6e21092003410c490d00200741ffffffff0371210c200a21052009210d0340200c450d01200b41086a2802002203417f4c0d02200b280200210e0240024020030d004101210f0c010b2003102c220f450d040b200f200e200310e908210e200541086a2003360200200541046a20033602002005200e360200200b410c6a210b2005410c6a2105200c417f6a210c200d417f6a220d0d000b0b2000200636020420002004360200200020012802243602242000200129021c37021c200041186a2007360200200041146a2009360200200041106a200a3602002000410c6a2002360200200041086a200236020020002001290228370228200041306a200141306a290200370200200041386a200141386a290200370200200041c0006a200141c0006a290200370200200041c8006a200141c8006a290200370200200041d0006a200141d0006a290200370200200041d8006a200141d8006a290200370200200041e0006a200141e0006a2902003702000f0b1038000b1036000b110041e2a0cc00412841f4afc4001039000b8a0f03037f027e027f230041106b220224000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d0000417f6a0e190102030405060708090a0b0c0d0e0f10111213141516171819000b41e2a0cc00412841c0accb001039000b200041013a000020002001290001370001200041306a200141306a290300370300200041286a200141286a290300370300200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a2900003700000c180b200041023a0000200041046a200141046a2902003702000c170b200141046a28020021034101210402400240200141086a2d00004101470d00200141286a2903002105200141206a29030021060c010b200141096a2d000041017121072001410a6a2d00002108410021040b200041033a0000200041286a2005370300200041206a2006370300200041106a20012903103703002000410a6a20083a0000200041096a20073a0000200041086a20043a0000200041046a20033602002000410b6a200228000b360000200041186a200141186a2903003703002000410f6a2002410b6a41046a2d00003a00000c160b200041043a0000200041046a200141046a2802003602000c150b200041053a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c140b200041063a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c130b200041073a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c120b200041083a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a2902003702000c110b200041093a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c100b2000410a3a0000200041046a200141046a2802003602000c0f0b2000410b3a0000200041046a200141046a2802003602000c0e0b2000410c3a000020002001290001370001200041306a200141306a290300370300200041286a200141286a290300370300200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041216a200141216a2d00003a00000c0d0b2000410d3a00000c0c0b2000410e3a00000c0b0b2001410c6a2802002204417f4c0d0b200141046a28020021010240024020040d00410121030c010b2004102c2203450d0d0b20032001200410e90821012000410c6a2004360200200041086a2004360200200041046a20013602002000410f3a00000c0a0b2001410c6a2802002204417f4c0d0a200141046a28020021010240024020040d00410121030c010b2004102c2203450d0c0b20032001200410e90821012000410c6a2004360200200041086a2004360200200041046a2001360200200041103a00000c090b2001410c6a2802002204417f4c0d09200141046a28020021010240024020040d00410121030c010b2004102c2203450d0b0b20032001200410e90821012000410c6a2004360200200041086a2004360200200041046a2001360200200041113a00000c080b2001410c6a2802002204417f4c0d08200141046a28020021010240024020040d00410121030c010b2004102c2203450d0a0b20032001200410e90821012000410c6a2004360200200041086a2004360200200041046a2001360200200041123a00000c070b200041133a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a2802003602000c060b200041143a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c050b200041153a0000200041046a200141046a2802003602000c040b200041163a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a2802003602000c030b200041173a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a2802003602000c020b200041183a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041286a200141286a280200360200200041246a200141246a2802004101463602000c010b200041193a0000200041046a200141046a2802003602000b200241106a24000f0b1038000b1036000bd90501037f230041c0026b2202240002400240024002400240024002400240024020012d0000417f6a0e06010203040506000b41e2a0cc00412841b8afc9001039000b2002200141246a10c80141002103024020012d00014101470d00200241286a2001411a6a290000370300200241206a200141126a290000370300200241186a2001410a6a2900003703002002200141026a290000370310410121030b200020033a0001200041013a0000200041246a2002290300370200200041026a2002290310370000200041306a20012802303602002000412c6a200241086a2802003602002000410a6a200241106a41086a290300370000200041126a200241206a2903003700002000411a6a200241286a2903003700000c050b41b002102c2203450d05200241106a200141046a280200108e08200041046a2003200241106a41b00210e908360200200041023a0000200041086a200141086a2802003602000c040b200141046a280200210341b002102c2204450d04200241106a200141086a280200108e08200041086a2004200241106a41b00210e908360200200041046a2003360200200041033a00002000410c6a2001410c6a2802003602000c030b200041043a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a280200360200200041216a200141216a2d00004100473a00000c020b200041053a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041306a200141306a290300370300200041246a200141246a2902003702000c010b200041063a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000b200241c0026a24000f0b1036000b960701057f230041206b22022400024002400240024002400240024002400240024020012d0000417f6a0e06010203040506000b41e2a0cc0041284188f3c0001039000b200241086a200141046a10c801200041013a0000200041186a200141186a290300370300200041106a200141106a290300370300200041046a20022903083702002000410c6a200241106a2802003602000c050b200041023a00000c040b200041033a0000200041046a200141046a2802003602000c030b200141086a280200210341002104024002400240200141046a2802000e03020100020b410221040c010b410121040b200041043a0000200041086a2003360200200041046a20043602000c020b4101210502400240024002400240200141046a2d00000e050104020300010b2002411e6a200141076a2d00003a0000200241086a41046a200141186a2d00003a00002002200141056a2f00003b011c2002200141146a280000360208200141106a28000021062001410c6a2800002104200141086a2800002103410421050c030b2002411e6a200141076a2d00003a0000200241086a41086a2001411c6a290000370300200241086a41106a200141246a2d00003a00002002200141056a2f00003b011c2002200141146a290000370308200141106a28000021062001410c6a2800002104200141086a2800002103410021050c020b200141106a2802002204417f4c0d04200141086a28020021050240024020040d00410121030c010b2004102c2203450d060b20032005200410e9081a41022105200421060c010b2002411e6a200141076a2d00003a0000200241086a41086a2001411c6a290000370300200241086a41106a200141246a2d00003a00002002200141056a2f00003b011c2002200141146a290000370308200141106a28000021062001410c6a2800002104200141086a2800002103410321050b200041046a20053a0000200041056a20022f011c3b0000200041106a20063600002000410c6a2004360000200041086a2003360000200041146a2002290308370000200041256a20022f00053b0000200041076a2002411c6a41026a2d00003a00002000411c6a200241086a41086a290300370000200041246a200241086a41106a2d00003a0000200041276a200241056a41026a2d00003a000020012d00012101200041053a0000200020014100473a00010c010b200041063a0000200041046a200141046a2902003702000b200241206a24000f0b1038000b1036000bee0903037f037e037f23004180016b2202240002400240024002400240024002400240024020012d0000417f6a0e050102030405000b41e2a0cc00412841e0f3c0001039000b20002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a290000370000200041216a200141216a41c10010e9081a200041013a00000c040b200241106a2203200141116a280000360200200241086a2204200141096a29000037030020022001290001370300200141206a2903002105200141186a2903002106420021070240200141286a2903004201520d00200241206a41206a200141d0006a290300370300200241206a41186a200141c8006a290300370300200241206a41106a200141c0006a290300370300200241206a41086a200141386a2903003703002002200141306a290300370320420121070b20002002290300370001200041206a2005370300200041186a2006370300200041286a2007370300200041306a2002290320370300200041096a2004290300370000200041116a2003280200360000200041386a200241206a41086a290300370300200041c0006a200241206a41106a290300370300200041c8006a200241206a41186a290300370300200041d0006a200241206a41206a29030037030020012d00152101200041023a0000200041156a4102200141004720014102461b3a00000c030b200241186a200141196a290000370300200241106a200141116a290000370300200241086a200141096a29000037030020022001290001370300200241206a200141216a41c10010e9081a200141ec006a2802002203417f4c0d03200141e4006a28020021010240024020030d00410121040c010b2003102c2204450d050b20042001200310e9082101200041196a200241186a290300370000200041116a200241106a290300370000200041096a200241086a29030037000020002002290300370001200041216a200241206a41c10010e9081a200041ec006a2003360200200041e8006a2003360200200041e4006a2001360200200041033a00000c020b2001410c6a2802002203417f4c0d02200141046a28020021010240024020030d00410121040c010b2003102c2204450d040b20042001200310e90821012000410c6a2003360200200041086a2003360200200041046a2001360200200041043a00000c010b200241e8006a41106a2204200141116a280000360200200241e8006a41086a2208200141096a29000037030020022001290001370368200241106a2209200141256a280000360200200241086a220a2001411d6a2900003703002002200141156a290000370300410021030240200141296a2d00004101470d00200241386a200141c2006a290000370300200241206a41106a2001413a6a290000370300200241206a41086a200141326a29000037030020022001412a6a290000370320410121030b20002002290368370001200041156a2002290300370000200041296a20033a00002000412a6a2002290320370000200041116a2004280200360000200041096a20082903003700002000411d6a200a290300370000200041256a2009280200360000200041326a200241206a41086a2903003700002000413a6a200241206a41106a290300370000200041c2006a200241386a290300370000200041053a00000b20024180016a24000f0b1038000b1036000ba014020a7f047e230041c0006b2202240002400240024002400240024002402001280200417f6a0e0401020300010b200141046a210341012104410121050240024002400240024020012d00040e050104020300010b200241246a200341036a2d00003a0000200241106a41046a200141186a2d00003a0000200220032f00013b01222002200141146a280000360210200141106a28020021062001410c6a2802002107200141086a2802002108410421050c030b200241246a200341036a2d00003a0000200241106a41086a2001411c6a290000370300200241106a41106a200141246a2d00003a0000200220032f00013b01222002200141146a290000370310200141106a28020021062001410c6a2802002107200141086a2802002108410021050c020b200141106a2802002206417f4c0d06200141086a28020021030240024020060d00410121080c010b2006102c2208450d080b20082003200610e9081a41022105200621070c010b41032105200241246a200341036a2d00003a0000200241106a41086a2001411c6a290000370300200241106a41106a200141246a2d00003a0000200220032f00013b01222002200141146a290000370310200141106a28020021062001410c6a2802002107200141086a28020021080b02400240024002400240200141286a22092d00000e050104020300010b2002413e6a200941036a2d00003a000041042104200241286a41046a2001413c6a2d00003a0000200220092f00013b013c2002200141386a280000360228200141346a2802002103200141306a280200210a2001412c6a280200210b0c030b2002413e6a200941036a2d00003a0000200241306a200141c0006a290000370300200241386a200141c8006a2d00003a0000200220092f00013b013c2002200141386a290000370328200141346a2802002103200141306a280200210a2001412c6a280200210b410021040c020b200141346a2802002203417f4c0d062001412c6a28020021040240024020030d004101210b0c010b2003102c220b450d080b200b2004200310e9081a410221042003210a0c010b410321042002413e6a200941036a2d00003a0000200241306a200141c0006a290000370300200241386a200141c8006a2d00003a0000200220092f00013b013c2002200141386a290000370328200141346a2802002103200141306a280200210a2001412c6a280200210b0b200020053a0004200020022f01223b0005200041106a20063600002000410c6a2007360000200041086a2008360000200041146a2002290310370000200041076a200241226a41026a2d00003a00002000411c6a200241106a41086a290300370000200041246a200241106a41106a2d00003a0000200141f0006a2802002106200141d8006a290300210c200141e0006a290300210d200141e8006a290300210e2001290350210f200041286a20043a00002000412c6a200b360000200041306a200a360000200041346a2003360000200041276a2002410d6a41026a2d00003a0000200020022f000d3b0025200020022f013c3b00292000412b6a2002413c6a41026a2d00003a0000200041386a2002290328370000200041c0006a200241286a41086a290300370000200041c8006a200241286a41106a2d00003a0000200041e8006a200e370300200041e0006a200d370300200041d8006a200c370300200041d0006a200f370300200041f0006a200636020020004104360200200041cb006a200241256a41026a2d00003a0000200020022f00253b00490c030b200041013602000c020b200141046a2104410121080240024002400240024020012d00040e050104020300010b200241126a200441036a2d00003a0000200241286a41046a200141186a2d00003a0000200220042f00013b01102002200141146a280000360228200141106a280200210b2001410c6a2802002106200141086a2802002103410421080c030b200241126a200441036a2d00003a0000200241286a41086a2001411c6a290000370300200241286a41106a200141246a2d00003a0000200220042f00013b01102002200141146a290000370328200141106a280200210b2001410c6a2802002106200141086a2802002103410021080c020b200141106a2802002206417f4c0d04200141086a28020021010240024020060d00410121030c010b2006102c2203450d060b20032001200610e9081a410221082006210b0c010b41032108200241126a200441036a2d00003a0000200241286a41086a2001411c6a290000370300200241286a41106a200141246a2d00003a0000200220042f00013b01102002200141146a290000370328200141106a280200210b2001410c6a2802002106200141086a28020021030b200020083a0004200020022f01103b0005200020022f003c3b0025200041106a200b3600002000410c6a2006360000200041086a2003360000200041146a2002290328370000200041076a200241106a41026a2d00003a00002000411c6a200241286a41086a290300370000200041246a200241286a41106a2d00003a0000200041276a2002413c6a41026a2d00003a0000200041023602000c010b200141046a2104410121080240024002400240024020012d00040e050104020300010b200241126a200441036a2d00003a0000200241286a41046a200141186a2d00003a0000200220042f00013b01102002200141146a280000360228200141106a280200210b2001410c6a2802002106200141086a2802002103410421080c030b200241126a200441036a2d00003a0000200241286a41086a2001411c6a290000370300200241286a41106a200141246a2d00003a0000200220042f00013b01102002200141146a290000370328200141106a280200210b2001410c6a2802002106200141086a2802002103410021080c020b200141106a2802002206417f4c0d03200141086a28020021080240024020060d00410121030c010b2006102c2203450d050b20032008200610e9081a410221082006210b0c010b41032108200241126a200441036a2d00003a0000200241286a41086a2001411c6a290000370300200241286a41106a200141246a2d00003a0000200220042f00013b01102002200141146a290000370328200141106a280200210b2001410c6a2802002106200141086a28020021030b200020083a0004200020022f01103b0005200041106a200b3600002000410c6a2006360000200041086a2003360000200041146a2002290328370000200041076a200241106a41026a2d00003a00002000411c6a200241286a41086a290300370000200041246a200241286a41106a2d00003a0000200141306a290300210c200141c0006a290300210d200141386a290300210e2001290328210f200041c8006a200141c8006a280200360200200041386a200e370300200041c0006a200d370300200041286a200f370300200041306a200c37030020004103360200200041276a2002413c6a41026a2d00003a0000200020022f003c3b00250b200241c0006a24000f0b1038000b1036000be22505027f017e027f017e037f230041b0046b22022400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e1c0102030405060708090a0b0c0d0e0f101112131415161718191a1b00010b200241086a200141386a10ca01200241f8016a41286a200141306a290300370300200241f8016a41206a200141286a290300370300200241f8016a41186a200141206a290300370300200241f8016a41106a200141186a290300370300200241f8016a41086a200141106a2903003703002002200141086a2903003703f801200141f8016a2802002103200241f8016a41306a200241086a41c00110e9081a20014180026a2903002104200241086a200241f8016a41f00110e9081a200041086a200241086a41f00110e9081a20004180026a2004370300200041f8016a20033602002000411b3602000c1b0b200241f8016a200141086a10cb0120004100360200200041186a200241f8016a41106a290300370300200041106a200241f8016a41086a290300370300200041086a20022903f8013703000c1a0b200241f8016a200141046a10cc0120004101360200200041246a20024198026a2802003602002000411c6a20024190026a290300370200200041146a20024188026a2903003702002000410c6a20024180026a290300370200200020022903f8013702040c190b200241f8016a200141086a10cd01200041086a200241f8016a41a00210e9081a200041023602000c180b20004103360200200041086a200141086a2903003703000c170b41042103200141046a210502400240024002400240024002400240024020012d0004417f6a0e050102030405000b41e2a0cc00412841e89bc4001039000b200141086a2802002105410121030c040b41022103200241086a41026a200541036a2d00003a0000200241f8016a41086a200141146a29020037030020024188026a2001411c6a29020037030020024190026a200141246a2d00003a0000200220052f00013b010820022001410c6a2902003703f801200141086a2802002105200141286a28020021010c040b200141086a2802002105410321030c020b2002410a6a200541036a2d00003a0000200241f8016a41086a200141146a29020037030020024188026a2001411c6a29020037030020024190026a200141246a2d00003a0000200220052f00013b010820022001410c6a2902003703f80120012d00254100472106200141086a2802002105200141286a28020021010c030b200141086a2802002105410521030b0b0b200020033a0004200020022f01083b0005200020063a0025200020022f01ac043b0126200041086a20053602002000410c6a20022903f801370200200041286a2001360200200041076a2002410a6a2d00003a0000200041146a200241f8016a41086a2903003702002000411c6a20024188026a290300370200200041246a20024190026a2d00003a0000200041043602000c160b200241f8016a200141086a10ce01200041086a200241f8016a41e00010e9081a200041053602000c150b200241f8016a200141046a10cf01200041063602002000410c6a20024180026a280200360200200020022903f8013702040c140b200241f8016a200141086a10d001200041086a200241f8016a41d80010e9081a200041073602000c130b10d101000b02400240200128020422050d00410021030c010b200241f8016a41186a200141286a290000370300200241f8016a41106a200141206a29000037030020024180026a200141186a290000370300200241f8016a41286a200141386a290000370300200241f8016a41306a200141c0006a290000370300200241f8016a41386a200141c8006a290000370300200241f8016a41c8006a200141d8006a290000370300200241f8016a41d0006a200141e0006a290000370300200241f8016a41d8006a200141e8006a2900003703002002200141106a2900003703f8012002200141306a290000370398022002200141d0006a2900003703b802200241f8016a41f8006a20014188016a290000370300200241f8016a41f0006a20014180016a290000370300200241f8016a41e8006a200141f8006a290000370300200241f8016a4198016a200141a8016a290000370300200241f8016a4190016a200141a0016a290000370300200241f8016a4188016a20014198016a290000370300200241f8016a41b8016a200141c8016a290000370300200241f8016a41b0016a200141c0016a290000370300200241f8016a41a8016a200141b8016a2900003703002002200141f0006a2900003703d802200220014190016a2900003703f8022002200141b0016a290000370398032001410c6a2802002201417f4c0d130240024020010d00410121030c010b2001102c2203450d150b20032005200110e9081a200241086a200241f8016a41c00110e9081a0b200020033602042000410c6a2001360200200041086a2001360200200041106a200241086a41c00110e9081a200041093602000c110b200241f8016a200141086a10d201200041086a200241f8016a41980210e9081a2000410a3602000c100b200241f8016a200141046a10d301200041046a200241f8016a41e80010e9081a2000410b3602000c0f0b10d401000b200241f8016a200141086a10d5012000410d360200200041386a200241f8016a41306a290300370300200041306a200241f8016a41286a290300370300200041286a200241f8016a41206a290300370300200041206a200241f8016a41186a290300370300200041186a200241f8016a41106a290300370300200041106a200241f8016a41086a290300370300200041086a20022903f8013703000c0d0b200241f8016a200141086a10d6012000410e360200200041386a200241f8016a41306a290300370300200041306a200241f8016a41286a290300370300200041286a200241f8016a41206a290300370300200041206a200241f8016a41186a290300370300200041186a200241f8016a41106a290300370300200041106a200241f8016a41086a290300370300200041086a20022903f8013703000c0c0b200241f8016a200141086a10d6012000410f360200200041386a200241f8016a41306a290300370300200041306a200241f8016a41286a290300370300200041286a200241f8016a41206a290300370300200041206a200241f8016a41186a290300370300200041186a200241f8016a41106a290300370300200041106a200241f8016a41086a290300370300200041086a20022903f8013703000c0b0b200241f8016a200141086a10d70120004110360200200041286a200241f8016a41206a290300370300200041206a200241f8016a41186a290300370300200041186a200241f8016a41106a290300370300200041106a200241f8016a41086a290300370300200041086a20022903f8013703000c0a0b200141046a2103410721050240024002400240024002400240024020012d0004417f6a0e0701020304050607000b41e2a0cc00412841a4c3cb001039000b20024190026a200341196a29000037030020024188026a200341116a29000037030020024180026a200341096a290000370300200220032900013703f801410121050c050b20024190026a200341196a29000037030020024188026a200341116a29000037030020024180026a200341096a290000370300200220032900013703f801410221050c040b200241f8016a41186a200341196a290000370300200241f8016a41106a200341116a290000370300200241f8016a41086a200341096a290000370300200241086a41086a200341296a290000370300200241086a41106a200341316a290000370300200241086a41186a200341396a290000370300200220032900013703f8012002200341216a290000370308410321050c030b200241086a200141086a10c80120024183026a200241086a41086a280200360000200220022903083700fb01410421050c020b20024190026a200341196a29000037030020024188026a200341116a29000037030020024180026a200341096a290000370300200220032900013703f801410521050c010b20024190026a200341196a29000037030020024188026a200341116a29000037030020024180026a200341096a290000370300200220032900013703f801410621050b200020053a0004200020022903f80137000520002002290308370025200020022f00ac043b00452000410d6a200241f8016a41086a290300370000200041156a200241f8016a41106a2903003700002000411d6a200241f8016a41186a2903003700002000412d6a200241086a41086a290300370000200041356a200241086a41106a2903003700002000413d6a200241086a41186a290300370000200041c7006a200241ae046a2d00003a0000200041113602000c090b024002400240024002400240200141086a280200417f6a0e03010203000b41e2a0cc0041284184ccc2001039000b200141386a2903002104200141306a29030021074101210841012109024002400240024002402001410c6a2d00000e050104020300010b41042109200241f8016a41046a200141206a2d00003a000020022001411c6a2800003602f80120012f000d2001410f6a2d0000411074722106200141186a280200210a200141146a2802002103200141106a28020021050c030b20024180026a200141246a290000370300200241f8016a41106a2001412c6a2d00003a000020022001411c6a2900003703f80120012f000d2001410f6a2d0000411074722106200141186a280200210a200141146a2802002103200141106a2802002105410021090c020b200141186a2802002203417f4c0d0f200141106a28020021010240024020030d00410121050c010b2003102c2205450d110b20052001200310e9081a410221092003210a0c010b20024180026a200141246a290000370300200241f8016a41106a2001412c6a2d00003a000020022001411c6a2900003703f80120012f000d2001410f6a2d0000411074722106200141186a280200210a200141146a2802002103200141106a2802002105410321090b200241086a41106a200241f8016a41106a2d00003a0000200241086a41086a200241f8016a41086a290300370300200241046a41026a200241ac046a41026a2d00003a0000200220022903f801370308200220022f00ac043b01040c030b2001410c6a28020022094108762106410221080c010b2001410c6a28020022094108762106410321080b0b200020022f01043b002d20004112360200200041386a2004370300200041306a2007370300200041186a200a360200200041146a2003360200200041106a2005360200200041086a20083602002000411c6a20022903083702002000410c6a2006410874200941ff017172360200200041246a200241086a41086a2903003702002000412c6a200241086a41106a2d00003a00002000412f6a200241066a2d00003a00000c080b200241f8016a200141086a10d801200041086a200241f8016a41f00010e9081a200041133602000c070b200241f8016a200141086a10d901200041086a200241f8016a41f80010e9081a200041143602000c060b024002400240024020012f0104417f6a0e03010200010b200241f8016a200141086a10c90120022902fc01210420022802f8012103410321010c020b200241f8016a200141086a10c90120022902fc01210420022802f8012103410121010c010b20012f0106210541b002102c2203450d08200241f8016a200141086a28020010da012003200241f8016a41b00210e9081a410221010b200020013b0104200041153602002000410c6a2004370200200041086a2003360200200041066a20053b01000c050b200241f8016a200141086a10db01200041086a200241f8016a41a80210e9081a200041163602000c040b200241f8016a200141046a10dc01200041046a200241f8016a41c80010e9081a200041173602000c030b200241f8016a200141086a10dd01200041086a200241f8016a41c80010e9081a200041183602000c020b200241f8016a200141086a10de0120004119360200200041c0006a200241f8016a41386a290300370300200041386a200241f8016a41306a290300370300200041306a200241f8016a41286a290300370300200041286a200241f8016a41206a290300370300200041206a200241f8016a41186a290300370300200041186a200241f8016a41106a290300370300200041106a200241f8016a41086a290300370300200041086a20022903f8013703000c010b200241f8016a200141086a10df012000411a360200200041c0006a200241f8016a41386a290300370300200041386a200241f8016a41306a290300370300200041306a200241f8016a41286a290300370300200041286a200241f8016a41206a290300370300200041206a200241f8016a41186a290300370300200041186a200241f8016a41106a290300370300200041106a200241f8016a41086a290300370300200041086a20022903f8013703000b200241b0046a24000f0b1038000b1036000b8b6f04027f017e3c7f027e230041c0036b22022400024002400240024002400240024002400240024002400240024002400240024002400240024020012d0000417f6a0e0f0102030405060708090a0b0c0d0e0f000b41e2a0cc00412841f89bc4001039000b200041013a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c0e0b2001410c6a2802002203ad42c8007e2204422088a70d0e2004a72205417f4c0d0e0240024020050d00200541c8006e2106410421070c010b200141046a28020021082005102c2207450d10200541c8006e2106200541c800490d00200341ffffffff017121094100210a2006210b03402009450d014100210c4100210d0240024002400240024002402008200a6a22052d00000e06050102030400050b200241f0026a41026a200541036a2d00003a000020024188036a41086a200541186a29000037030020024188036a41106a200541206a2d00003a00002002200541016a2f00003b01f0022002200541106a290000370388032005410c6a280000210e200541086a280000210f200541046a28000021104105210d0c040b2005410c6a280200220e417f4c0d14200541046a280200210f4101210d410121100240200e450d00200e102c2210450d160b2010200f200e10e9081a200e210f0c030b4102210d200241f0026a41026a200541036a2d00003a000020024188036a41086a200541186a29000037030020024188036a41106a200541206a2d00003a00002002200541016a2f00003b01f0022002200541106a290000370388032005410c6a280000210e200541086a280000210f200541046a28000021100c020b4103210d200241f0026a41026a200541036a2d00003a000020024188036a41086a200541186a29000037030020024188036a41106a200541206a2d00003a00002002200541016a2f00003b01f0022002200541106a290000370388032005410c6a280000210e200541086a280000210f200541046a28000021100c010b200241f0026a41026a200541036a2d00003a000020024188036a41086a200541186a29000037030020024188036a41106a200541206a2d00003a00002002200541016a2f00003b01f0022002200541106a290000370388032005410c6a280000210e200541086a280000210f4104210d200541046a28000021100b024002400240024002400240200541246a2d00000e06050102030400050b200241d8026a41026a200541276a2d00003a0000200241a0036a41086a2005413c6a290000370300200241a0036a41106a200541c4006a2d00003a00002002200541256a2f00003b01d8022002200541346a2900003703a003200541306a28000021112005412c6a2800002112200541286a28000021134105210c0c040b200541306a2802002212417f4c0d14200541286a28020021054101210c4101211302402012450d002012102c2213450d160b20132005201210e9081a201221110c030b4102210c200241d8026a41026a200541276a2d00003a0000200241a0036a41086a2005413c6a290000370300200241a0036a41106a200541c4006a2d00003a00002002200541256a2f00003b01d8022002200541346a2900003703a003200541306a28000021112005412c6a2800002112200541286a28000021130c020b200241d8026a41026a200541276a2d00003a0000200241a0036a41086a2005413c6a290000370300200241a0036a41106a200541c4006a2d00003a00002002200541256a2f00003b01d8022002200541346a2900003703a003200541306a28000021112005412c6a2800002112200541286a28000021134103210c0c010b200241d8026a41026a200541276a2d00003a0000200241a0036a41086a2005413c6a290000370300200241a0036a41106a200541c4006a2d00003a00002002200541256a2f00003b01d8022002200541346a2900003703a003200541306a28000021112005412c6a2800002112200541286a28000021134104210c0b2007200a6a2205200d3a0000200541016a20022f01f0023b0000200541036a200241f0026a41026a2d00003a00002005410c6a200e360200200541086a200f360200200541046a2010360200200541106a200229038803370200200541186a20024188036a41086a290300370200200541206a20024188036a41106a280200360200200541246a200c3a0000200541256a20022f01d8023b0000200541276a200241d8026a41026a2d00003a0000200541306a20113602002005412c6a2012360200200541286a2013360200200541346a20022903a0033702002005413c6a200241a0036a41086a290300370200200541c4006a200241a0036a41106a2802003602002009417f6a2109200a41c8006a210a200b417f6a220b0d000b0b4100211441002115024002400240024002400240200141106a2d00000e06050102030400050b200241f4016a200141136a2d00003a0000200241e8016a200141286a290000370300200241e0016a41106a200141306a2d00003a00002002200141116a2f00003b01f2012002200141206a2900003703e0012001411c6a2800002105200141186a2800002116200141146a2800002110410521150c040b2001411c6a2802002205417f4c0d12200141146a280200210a410121154101211002402005450d002005102c2210450d140b2010200a200510e9081a200521160c030b41022115200241f2016a41026a200141136a2d00003a0000200241e8016a200141286a290000370300200241e0016a41106a200141306a2d00003a00002002200141116a2f00003b01f2012002200141206a2900003703e0012001411c6a2800002105200141186a2800002116200141146a28000021100c020b200241f4016a200141136a2d00003a0000200241e8016a200141286a290000370300200241e0016a41106a200141306a2d00003a00002002200141116a2f00003b01f2012002200141206a2900003703e0012001411c6a2800002105200141186a2800002116200141146a2800002110410321150c010b200241f4016a200141136a2d00003a0000200241e8016a200141286a290000370300200241e0016a41106a200141306a2d00003a00002002200141116a2f00003b01f2012002200141206a2900003703e0012001411c6a2800002105200141186a2800002116200141146a2800002110410421150b024002400240024002400240200141346a2d00000e06050102030400050b2002418c026a200141376a2d00003a000020024180026a200141cc006a29000037030020024188026a200141d4006a2d00003a00002002200141356a2f00003b018a022002200141c4006a2900003703f801200141c0006a280000210a2001413c6a2800002117200141386a2800002113410521140c040b200141c0006a280200220a417f4c0d12200141386a280200210941012114410121130240200a450d00200a102c2213450d140b20132009200a10e9081a200a21170c030b410221142002418a026a41026a200141376a2d00003a000020024180026a200141cc006a29000037030020024188026a200141d4006a2d00003a00002002200141356a2f00003b018a022002200141c4006a2900003703f801200141c0006a280000210a2001413c6a2800002117200141386a28000021130c020b2002418c026a200141376a2d00003a000020024180026a200141cc006a29000037030020024188026a200141d4006a2d00003a00002002200141356a2f00003b018a022002200141c4006a2900003703f801200141c0006a280000210a2001413c6a2800002117200141386a2800002113410321140c010b2002418c026a200141376a2d00003a000020024180026a200141cc006a29000037030020024188026a200141d4006a2d00003a00002002200141356a2f00003b018a022002200141c4006a2900003703f801200141c0006a280000210a2001413c6a2800002117200141386a2800002113410421140b4100211841002119024002400240024002400240200141d8006a2d00000e06050102030400050b200241a4026a200141db006a2d00003a000020024198026a200141f0006a290000370300200241a0026a200141f8006a2d00003a00002002200141d9006a2f00003b01a2022002200141e8006a29000037039002200141e4006a2800002109200141e0006a280000211a200141dc006a280000210b410521190c040b200141e4006a2802002209417f4c0d12200141dc006a280200210c410121194101210b02402009450d002009102c220b450d140b200b200c200910e9081a2009211a0c030b41022119200241a2026a41026a200141db006a2d00003a000020024198026a200141f0006a290000370300200241a0026a200141f8006a2d00003a00002002200141d9006a2f00003b01a2022002200141e8006a29000037039002200141e4006a2800002109200141e0006a280000211a200141dc006a280000210b0c020b200241a4026a200141db006a2d00003a000020024198026a200141f0006a290000370300200241a0026a200141f8006a2d00003a00002002200141d9006a2f00003b01a2022002200141e8006a29000037039002200141e4006a2800002109200141e0006a280000211a200141dc006a280000210b410321190c010b200241a4026a200141db006a2d00003a000020024198026a200141f0006a290000370300200241a0026a200141f8006a2d00003a00002002200141d9006a2f00003b01a2022002200141e8006a29000037039002200141e4006a2800002109200141e0006a280000211a200141dc006a280000210b410421190b024002400240024002400240200141fc006a2d00000e06050102030400050b200241bc026a200141ff006a2d00003a0000200241b0026a20014194016a290000370300200241b8026a2001419c016a2d00003a00002002200141fd006a2f00003b01ba0220022001418c016a2900003703a80220014188016a280000211b20014184016a280000210c20014180016a2800002111410521180c040b20014188016a280200220c417f4c0d1220014180016a280200210d41012118410121110240200c450d00200c102c2211450d140b2011200d200c10e9081a200c211b0c030b41022118200241ba026a41026a200141ff006a2d00003a0000200241b0026a20014194016a290000370300200241b8026a2001419c016a2d00003a00002002200141fd006a2f00003b01ba0220022001418c016a2900003703a80220014188016a280000211b20014184016a280000210c20014180016a28000021110c020b200241bc026a200141ff006a2d00003a0000200241b0026a20014194016a290000370300200241b8026a2001419c016a2d00003a00002002200141fd006a2f00003b01ba0220022001418c016a2900003703a80220014188016a280000211b20014184016a280000210c20014180016a2800002111410321180c010b200241bc026a200141ff006a2d00003a0000200241b0026a20014194016a290000370300200241b8026a2001419c016a2d00003a00002002200141fd006a2f00003b01ba0220022001418c016a2900003703a80220014188016a280000211b20014184016a280000210c20014180016a2800002111410421180b4100211c4100211d024002400240024002400240200141a0016a2d00000e06050102030400050b200241d4026a200141a3016a2d00003a0000200241c8026a200141b8016a290000370300200241d0026a200141c0016a2d00003a00002002200141a1016a2f00003b01d2022002200141b0016a2900003703c002200141ac016a280000211e200141a8016a280000210d200141a4016a280000210f4105211d0c040b200141ac016a280200220d417f4c0d12200141a4016a280200210e4101211d4101210f0240200d450d00200d102c220f450d140b200f200e200d10e9081a200d211e0c030b4102211d200241d2026a41026a200141a3016a2d00003a0000200241c8026a200141b8016a290000370300200241d0026a200141c0016a2d00003a00002002200141a1016a2f00003b01d2022002200141b0016a2900003703c002200141ac016a280000211e200141a8016a280000210d200141a4016a280000210f0c020b200241d4026a200141a3016a2d00003a0000200241c8026a200141b8016a290000370300200241d0026a200141c0016a2d00003a00002002200141a1016a2f00003b01d2022002200141b0016a2900003703c002200141ac016a280000211e200141a8016a280000210d200141a4016a280000210f4103211d0c010b200241d4026a200141a3016a2d00003a0000200241c8026a200141b8016a290000370300200241d0026a200141c0016a2d00003a00002002200141a1016a2f00003b01d2022002200141b0016a2900003703c002200141ac016a280000211e200141a8016a280000210d200141a4016a280000210f4104211d0b02402001418c026a2d00004101470d00200241b0036a2001419d026a280000360200200241a8036a20014195026a29000037030020022001418d026a2900003703a0034101211c0b4100211f41002120024002400240024002400240200141c4016a2d00000e06050102030400050b200241ec026a200141c7016a2d00003a0000200241e0026a200141dc016a290000370300200241e8026a200141e4016a2d00003a00002002200141c5016a2f00003b01ea022002200141d4016a2900003703d802200141d0016a2800002121200141cc016a280000210e200141c8016a2800002108410521200c040b200141d0016a280200220e417f4c0d12200141c8016a280200211241012120410121080240200e450d00200e102c2208450d140b20082012200e10e9081a200e21210c030b41022120200241ea026a41026a200141c7016a2d00003a0000200241e0026a200141dc016a290000370300200241e8026a200141e4016a2d00003a00002002200141c5016a2f00003b01ea022002200141d4016a2900003703d802200141d0016a2800002121200141cc016a280000210e200141c8016a28000021080c020b200241ec026a200141c7016a2d00003a0000200241e0026a200141dc016a290000370300200241e8026a200141e4016a2d00003a00002002200141c5016a2f00003b01ea022002200141d4016a2900003703d802200141d0016a2800002121200141cc016a280000210e200141c8016a2800002108410321200c010b200241ec026a200141c7016a2d00003a0000200241e0026a200141dc016a290000370300200241e8026a200141e4016a2d00003a00002002200141c5016a2f00003b01ea022002200141d4016a2900003703d802200141d0016a2800002121200141cc016a280000210e200141c8016a2800002108410421200b024002400240024002400240200141e8016a2d00000e06050102030400050b20024186036a200141eb016a2d00003a0000200241f8026a20014180026a29000037030020024180036a20014188026a2d00003a00002002200141e9016a2f00003b0184032002200141f8016a2900003703f002200141f4016a2800002122200141f0016a2800002112200141ec016a28000021234105211f0c040b200141f4016a2802002212417f4c0d12200141ec016a28020021014101211f4101212302402012450d002012102c2223450d140b20232001201210e9081a201221220c030b4102211f20024184036a41026a200141eb016a2d00003a0000200241f8026a20014180026a29000037030020024180036a20014188026a2d00003a00002002200141e9016a2f00003b0184032002200141f8016a2900003703f002200141f4016a2800002122200141f0016a2800002112200141ec016a28000021230c020b20024186036a200141eb016a2d00003a0000200241f8026a20014180026a29000037030020024180036a20014188026a2d00003a00002002200141e9016a2f00003b0184032002200141f8016a2900003703f002200141f4016a2800002122200141f0016a2800002112200141ec016a28000021234103211f0c010b20024186036a200141eb016a2d00003a0000200241f8026a20014180026a29000037030020024180036a20014188026a2d00003a00002002200141e9016a2f00003b0184032002200141f8016a2900003703f002200141f4016a2800002122200141f0016a2800002112200141ec016a28000021234104211f0b200241da016a41026a2201200241f2016a41026a2d00003a0000200241c8016a41086a2224200241e0016a41086a290300370300200241c8016a41106a2225200241e0016a41106a2d00003a0000200241c4016a41026a2226200241dd016a41026a2d00003a0000200241c0016a41026a22272002418a026a41026a2d00003a0000200220022f01f2013b01da01200220022903e0013703c801200220022f00dd013b01c401200220022f018a023b01c001200241a8016a41106a2228200241f8016a41106a2d00003a0000200241a8016a41086a2229200241f8016a41086a290300370300200241a4016a41026a222a200241f5016a41026a2d00003a0000200241a0016a41026a222b200241a2026a41026a2d00003a000020024188016a41086a222c20024190026a41086a29030037030020024188016a41106a222d20024190026a41106a2d00003a0000200220022903f8013703a801200220022f00f5013b01a401200220022f01a2023b01a00120022002290390023703880120024184016a41026a222e2002418d026a41026a2d00003a000020024180016a41026a222f200241ba026a41026a2d00003a0000200241e8006a41106a2230200241a8026a41106a2d00003a0000200241e8006a41086a2231200241a8026a41086a290300370300200241e4006a41026a2232200241a5026a41026a2d00003a0000200220022f008d023b018401200220022f01ba023b018001200220022903a802370368200220022f00a5023b0164200241e0006a41026a2233200241d2026a41026a2d00003a0000200220022f01d2023b0160200241c8006a41106a2234200241c0026a41106a2d00003a0000200241c8006a41086a2235200241c0026a41086a290300370300200220022903c002370348200241c4006a41026a2236200241bd026a41026a2d00003a0000200220022f00bd023b014420024188036a41106a2237200241a0036a41106a28020036020020024188036a41086a2238200241a0036a41086a290300370300200220022903a00337038803200241c0006a41026a2239200241ea026a41026a2d00003a0000200220022f01ea023b0140200241286a41106a223a200241d8026a41106a2d00003a0000200241286a41086a223b200241d8026a41086a290300370300200220022903d802370328200241246a41026a223c200241d5026a41026a2d00003a0000200220022f00d5023b0124200241206a41026a223d20024184036a41026a2d00003a0000200220022f0184033b0120200241086a41106a223e200241f0026a41106a2d00003a0000200241086a41086a223f200241f0026a41086a290300370300200220022903f002370308200241046a41026a2240200241ed026a41026a2d00003a0000200220022f00ed023b0104200041106a20153a00002000410c6a2003360200200041086a2006360200200041046a20073602002000411c6a2005360000200041186a2016360000200041146a2010360000200041116a20022f01da013b0000200041136a20012d00003a0000200041206a20022903c801370000200041286a2024290300370000200041306a20252d00003a0000200041316a20022f01c4013b0000200041336a20262d00003a0000200041346a20143a0000200041376a20272d00003a0000200041356a20022f01c0013b0000200041c0006a200a3600002000413c6a2017360000200041386a2013360000200041d4006a20282d00003a0000200041cc006a2029290300370000200041c4006a20022903a801370000200041d7006a202a2d00003a0000200041d5006a20022f01a4013b0000200041d8006a20193a0000200041db006a202b2d00003a0000200041d9006a20022f01a0013b0000200041e4006a2009360000200041e0006a201a360000200041dc006a200b360000200041f8006a202d2d00003a0000200041f0006a202c290300370000200041e8006a200229038801370000200041fb006a202e2d00003a0000200041f9006a20022f0184013b0000200041fc006a20183a0000200041ff006a202f2d00003a0000200041fd006a20022f0180013b000020004188016a201b36000020004184016a200c36000020004180016a20113600002000419c016a20302d00003a000020004194016a20312903003700002000418c016a20022903683700002000419f016a20322d00003a00002000419d016a20022f01643b0000200041a0016a201d3a0000200041a3016a20332d00003a0000200041a1016a20022f01603b0000200041ac016a201e360000200041a8016a200d360000200041a4016a200f360000200041c0016a20342d00003a0000200041b8016a2035290300370000200041b0016a2002290348370000200041c3016a20362d00003a0000200041c1016a20022f01443b0000200041c4016a20203a0000200041c7016a20392d00003a0000200041c5016a20022f01403b0000200041d0016a2021360000200041cc016a200e360000200041c8016a2008360000200041e4016a203a2d00003a0000200041dc016a203b290300370000200041d4016a2002290328370000200041e7016a203c2d00003a0000200041e5016a20022f01243b0000200041e8016a201f3a0000200041eb016a203d2d00003a0000200041e9016a20022f01203b0000200041f4016a2022360000200041f0016a2012360000200041ec016a202336000020004188026a203e2d00003a000020004180026a203f290300370000200041f8016a20022903083700002000418b026a20402d00003a000020004189026a20022f01043b00002000418c026a201c3a00002000419d026a203728020036000020004195026a20382903003700002000418d026a200229038803370000200041a3026a200241a0036a41026a2d00003a0000200041a1026a20022f00a0033b0000200041023a00000c0d0b2001410c6a2802002214ad42c4007e2204422088a70d0d2004a72211417f4c0d0d0240024020110d00201141c4006e2123410421070c010b200141046a28020021082011102c2207450d0f201141c4006e2123201141c400490d004100210a200241f2026a210f200821052023210e03402011200a460d01200241a0036a41086a2212200541086a290200370300200241a0036a41106a2210200541106a290200370300200241a0036a41186a2213200541186a290200370300200220052902003703a0034100210902400240024002400240024020052d00200e06050102030400050b200f2008200a6a220141236a2d00003a000020024188036a41086a200141386a29000037030020024188036a41106a200141c0006a2d00003a00002002200141216a2f00003b01f0022002200141306a290000370388032001412c6a280000210b200141286a280000210c200141246a280000210d410521090c040b2008200a6a2201412c6a280200220c417f4c0d13200141246a2802002101410121094101210d0240200c450d00200c102c220d450d150b200d2001200c10e9081a200c210b0c030b41022109200241f0026a41026a2008200a6a220141236a2d00003a000020024188036a41086a200141386a29000037030020024188036a41106a200141c0006a2d00003a00002002200141216a2f00003b01f0022002200141306a290000370388032001412c6a280000210b200141286a280000210c200141246a280000210d0c020b200f2008200a6a220141236a2d00003a000020024188036a41086a200141386a29000037030020024188036a41106a200141c0006a2d00003a00002002200141216a2f00003b01f0022002200141306a290000370388032001412c6a280000210b200141286a280000210c200141246a280000210d410321090c010b200f2008200a6a220141236a2d00003a000020024188036a41086a200141386a29000037030020024188036a41106a200141c0006a2d00003a00002002200141216a2f00003b01f0022002200141306a290000370388032001412c6a280000210b200141286a280000210c200141246a280000210d410421090b200541c4006a21052007200a6a220120022903a003370200200141186a2013290300370200200141106a2010290300370200200141086a2012290300370200200141206a20093a0000200141216a20022f01f0023b0000200141236a200f2d00003a00002001412c6a200b360200200141286a200c360200200141246a200d360200200141306a200229038803370200200141386a20024188036a41086a290300370200200141c0006a20024188036a41106a280200360200200a41c4006a210a200e417f6a220e0d000b0b200041033a00002000410c6a2014360200200041086a2023360200200041046a20073602000c0c0b200041043a00000c0b0b200041053a0000200041106a200141106a290300370300200041086a200141086a290300370300200041046a200141046a2802003602000c0a0b200041063a0000200041046a200141046a2802003602000c090b200041073a0000200041106a200141106a290300370300200041086a200141086a290300370300200041046a200141046a2802003602000c080b200041083a000020002001290001370001200041246a200141246a280200360200200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a2900003700000c070b200041093a0000200041086a200141086a290300370300200041046a200141046a2802003602000c060b200141046a280200210d4101210902400240024002400240200141086a2d00000e050104020300010b2002418a036a2001410b6a2d00003a0000200241a0036a41046a2001411c6a2d00003a00002002200141096a2f00003b0188032002200141186a2800003602a003200141146a280000210c200141106a28000021052001410c6a280000210a410421090c030b2002418a036a2001410b6a2d00003a0000200241a0036a41086a200141206a290000370300200241a0036a41106a200141286a2d00003a00002002200141096a2f00003b0188032002200141186a2900003703a003200141146a280000210c200141106a28000021052001410c6a280000210a410021090c020b200141146a2802002205417f4c0d082001410c6a28020021090240024020050d004101210a0c010b2005102c220a450d0a0b200a2009200510e9081a410221092005210c0c010b2002418a036a2001410b6a2d00003a0000200241a0036a41086a200141206a290000370300200241a0036a41106a200141286a2d00003a00002002200141096a2f00003b0188032002200141186a2900003703a003200141146a280000210c200141106a28000021052001410c6a280000210a410321090b200141c0006a2903002141200141386a290300214242062104024002400240024002400240024020012802300e0700010203040506000b420021040c050b420121040c040b420221040c030b420321040c020b420421040c010b420521040b200041086a20093a0000200041046a200d360200200041096a20022f0188033b0000200041146a200c360000200041106a20053600002000410c6a200a360000200041186a20022903a003370000200041296a20022f00f0023b00002000410b6a20024188036a41026a2d00003a0000200041206a200241a0036a41086a290300370000200041286a200241a0036a41106a2d00003a00002000412b6a200241f0026a41026a2d00003a0000200041c0006a2041370300200041386a2042370300200041306a20043703002000410a3a00000c050b4101210902400240024002400240200141046a2d00000e050104020300010b2002418a036a200141076a2d00003a0000200241a0036a41046a200141186a2d00003a00002002200141056a2f00003b0188032002200141146a2800003602a003200141106a280000210c2001410c6a2800002105200141086a280000210a410421090c030b2002418a036a200141076a2d00003a0000200241a0036a41086a2001411c6a290000370300200241a0036a41106a200141246a2d00003a00002002200141056a2f00003b0188032002200141146a2900003703a003200141106a280000210c2001410c6a2800002105200141086a280000210a410021090c020b200141106a2802002205417f4c0d07200141086a28020021010240024020050d004101210a0c010b2005102c220a450d090b200a2001200510e9081a410221092005210c0c010b2002418a036a200141076a2d00003a0000200241a0036a41086a2001411c6a290000370300200241a0036a41106a200141246a2d00003a00002002200141056a2f00003b0188032002200141146a2900003703a003200141106a280000210c2001410c6a2800002105200141086a280000210a410321090b200041046a20093a0000200041056a20022f0188033b0000200041106a200c3600002000410c6a2005360000200041086a200a360000200041146a20022903a003370000200041256a20022f00f0023b0000200041076a20024188036a41026a2d00003a00002000411c6a200241a0036a41086a290300370000200041246a200241a0036a41106a2d00003a0000200041276a200241f0026a41026a2d00003a00002000410b3a00000c040b4101211202400240024002400240200141046a2d00000e050104020300010b200241c2026a200141076a2d00003a000020024188036a41046a200141186a2d00003a00002002200141056a2f00003b01c0022002200141146a28000036028803200141106a28000021102001410c6a2800002105200141086a280000210c410421120c030b200241c2026a200141076a2d00003a000020024188036a41086a2001411c6a29000037030020024188036a41106a200141246a2d00003a00002002200141056a2f00003b01c0022002200141146a29000037038803200141106a28000021102001410c6a2800002105200141086a280000210c410021120c020b200141106a2802002205417f4c0d06200141086a280200210a0240024020050d004101210c0c010b2005102c220c450d080b200c200a200510e9081a41022112200521100c010b200241c2026a200141076a2d00003a000020024188036a41086a2001411c6a29000037030020024188036a41106a200141246a2d00003a00002002200141056a2f00003b01c0022002200141146a29000037038803200141106a28000021102001410c6a2800002105200141086a280000210c410321120b4100210d02400240024002400240024020012d00280e06050102030400050b200241f2026a2001412b6a2d00003a0000200241a8036a200141c0006a290000370300200241b0036a200141c8006a2d00003a00002002200141296a2f00003b01f0022002200141386a2900003703a003200141346a280000210e200141306a280000210a2001412c6a28000021094105210d0c040b200141346a280200220a417f4c0d082001412c6a28020021014101210d410121090240200a450d00200a102c2209450d0a0b20092001200a10e9081a200a210e0c030b4102210d200241f0026a41026a2001412b6a2d00003a0000200241a8036a200141c0006a290000370300200241b0036a200141c8006a2d00003a00002002200141296a2f00003b01f0022002200141386a2900003703a003200141346a280000210e200141306a280000210a2001412c6a28000021090c020b200241f2026a2001412b6a2d00003a0000200241a8036a200141c0006a290000370300200241b0036a200141c8006a2d00003a00002002200141296a2f00003b01f0022002200141386a2900003703a003200141346a280000210e200141306a280000210a2001412c6a28000021094103210d0c010b200241f2026a2001412b6a2d00003a0000200241a8036a200141c0006a290000370300200241b0036a200141c8006a2d00003a00002002200141296a2f00003b01f0022002200141386a2900003703a003200141346a280000210e200141306a280000210a2001412c6a28000021094104210d0b200041046a20123a0000200041056a20022f01c0023b0000200041106a20103600002000410c6a2005360000200041086a200c360000200041146a200229038803370000200041256a20022f00a8023b0000200041076a200241c0026a41026a2d00003a00002000411c6a20024188036a41086a290300370000200041246a20024188036a41106a2d00003a0000200041276a200241a8026a41026a2d00003a0000200041286a200d3a00002000412c6a2009360000200041306a200a360000200041346a200e360000200041296a20022f01f0023b00002000412b6a200241f0026a41026a2d00003a0000200041386a20022903a003370000200041c0006a200241a0036a41086a290300370000200041c8006a200241a0036a41106a2d00003a0000200041c9006a20022f00d8023b0000200041cb006a200241d8026a41026a2d00003a00002000410c3a00000c030b4101211202400240024002400240200141046a2d00000e050104020300010b200241c2026a200141076a2d00003a000020024188036a41046a200141186a2d00003a00002002200141056a2f00003b01c0022002200141146a28000036028803200141106a28000021102001410c6a2800002105200141086a280000210c410421120c030b200241c2026a200141076a2d00003a000020024188036a41086a2001411c6a29000037030020024188036a41106a200141246a2d00003a00002002200141056a2f00003b01c0022002200141146a29000037038803200141106a28000021102001410c6a2800002105200141086a280000210c410021120c020b200141106a2802002205417f4c0d05200141086a280200210a0240024020050d004101210c0c010b2005102c220c450d070b200c200a200510e9081a41022112200521100c010b200241c2026a200141076a2d00003a000020024188036a41086a2001411c6a29000037030020024188036a41106a200141246a2d00003a00002002200141056a2f00003b01c0022002200141146a29000037038803200141106a28000021102001410c6a2800002105200141086a280000210c410321120b4100210d02400240024002400240024020012d00280e06050102030400050b200241f2026a2001412b6a2d00003a0000200241a8036a200141c0006a290000370300200241b0036a200141c8006a2d00003a00002002200141296a2f00003b01f0022002200141386a2900003703a003200141346a280000210e200141306a280000210a2001412c6a28000021094105210d0c040b200141346a280200220a417f4c0d072001412c6a28020021014101210d410121090240200a450d00200a102c2209450d090b20092001200a10e9081a200a210e0c030b4102210d200241f0026a41026a2001412b6a2d00003a0000200241a8036a200141c0006a290000370300200241b0036a200141c8006a2d00003a00002002200141296a2f00003b01f0022002200141386a2900003703a003200141346a280000210e200141306a280000210a2001412c6a28000021090c020b200241f2026a2001412b6a2d00003a0000200241a8036a200141c0006a290000370300200241b0036a200141c8006a2d00003a00002002200141296a2f00003b01f0022002200141386a2900003703a003200141346a280000210e200141306a280000210a2001412c6a28000021094103210d0c010b200241f2026a2001412b6a2d00003a0000200241a8036a200141c0006a290000370300200241b0036a200141c8006a2d00003a00002002200141296a2f00003b01f0022002200141386a2900003703a003200141346a280000210e200141306a280000210a2001412c6a28000021094104210d0b200041046a20123a0000200041056a20022f01c0023b0000200041106a20103600002000410c6a2005360000200041086a200c360000200041146a200229038803370000200041256a20022f00a8023b0000200041076a200241c0026a41026a2d00003a00002000411c6a20024188036a41086a290300370000200041246a20024188036a41106a2d00003a0000200041276a200241a8026a41026a2d00003a0000200041286a200d3a00002000412c6a2009360000200041306a200a360000200041346a200e360000200041296a20022f01f0023b00002000412b6a200241f0026a41026a2d00003a0000200041386a20022903a003370000200041c0006a200241a0036a41086a290300370000200041c8006a200241a0036a41106a2d00003a0000200041c9006a20022f00d8023b0000200041cb006a200241d8026a41026a2d00003a00002000410d3a00000c020b4101210902400240024002400240200141046a2d00000e050104020300010b2002418a036a200141076a2d00003a0000200241a0036a41046a200141186a2d00003a00002002200141056a2f00003b0188032002200141146a2800003602a003200141106a28000021052001410c6a280000210c200141086a280000210a410421090c030b2002418a036a200141076a2d00003a0000200241a0036a41086a2001411c6a290000370300200241a0036a41106a200141246a2d00003a00002002200141056a2f00003b0188032002200141146a2900003703a003200141106a28000021052001410c6a280000210c200141086a280000210a410021090c020b200141106a2802002205417f4c0d04200141086a28020021010240024020050d004101210a0c010b2005102c220a450d060b200a2001200510e9081a410221092005210c0c010b2002418a036a200141076a2d00003a0000200241a0036a41086a2001411c6a290000370300200241a0036a41106a200141246a2d00003a00002002200141056a2f00003b0188032002200141146a2900003703a003200141106a28000021052001410c6a280000210c200141086a280000210a410321090b200041046a20093a0000200041056a20022f0188033b0000200041106a20053600002000410c6a200c360000200041086a200a360000200041146a20022903a003370000200041256a20022f00f0023b0000200041076a20024188036a41026a2d00003a00002000411c6a200241a0036a41086a290300370000200041246a200241a0036a41106a2d00003a0000200041276a200241f0026a41026a2d00003a00002000410e3a00000c010b2000410f3a00000b200241c0036a24000f0b1038000b1036000bd90a01097f230041f0026b2202240002400240024002400240024002400240024002400240024020012d0000417f6a0e0a01020304050607080900010b200241186a2203200141196a290000370300200241106a2204200141116a290000370300200241086a2205200141096a29000037030020022001290001370300200241206a41186a2206200141396a290000370300200241206a41106a2207200141316a290000370300200241206a41086a2208200141296a2900003703002002200141216a290000370320200141c1006a2d0000210941b002102c220a450d0a200241c0006a200141c4006a28020010bb03200a200241c0006a41b00210e9082101200041196a2003290300370000200041116a2004290300370000200041096a200529030037000020002002290300370001200041216a2002290320370000200041296a2008290300370000200041316a2007290300370000200041396a2006290300370000200041c4006a2001360200200041c1006a20093a00002000410a3a00000c090b200241386a2203200141196a290000370300200241306a2204200141116a290000370300200241286a2205200141096a29000037030020022001290001370320200141216a2d0000210641b002102c2207450d09200241c0006a200141246a28020010bb032007200241c0006a41b00210e9082101200041196a2003290300370000200041116a2004290300370000200041096a200529030037000020002002290320370001200041246a2001360200200041216a20063a0000200041013a00000c080b200041023a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a280200360200200041216a200141216a2d00003a00000c070b200041033a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a280200360200200041216a200141216a2d00003a00000c060b200041043a00000c050b200041053a0000200020012d00013a0001200041046a200141046a280200360200200041026a200141026a2f01003b01000c040b200041063a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a290200370200200041226a200141226a2f01003b0100200041216a200141216a2d00003a00000c030b200041073a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a290000370000200041216a200141216a290000370000200041296a200141296a290000370000200041316a200141316a290000370000200041396a200141396a2900003700000c020b200041083a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a290000370000200041216a200141216a290000370000200041296a200141296a290000370000200041316a200141316a290000370000200041396a200141396a2900003700000c010b200041093a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a290000370000200041216a200141216a290000370000200041296a200141296a290000370000200041316a200141316a290000370000200041396a200141396a2900003700000b200241f0026a24000f0b1036000bf14107037f017e057f017e027f027e067f230041b0056b220224000240024002400240024002400240024002400240024020012d0000417f6a0e0401020304000b41e2a0cc00412841889cc4001039000b200241086a200141046a10c80141b002102c2203450d03411021040240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200141106a28020022012802000e1c0102030405060708090a0b0c0d0e0f101112131415161718191a1b00010b20024180036a200141386a10ca01200141086a2903002105200241d0016a41086a200141246a2d00003a000020022001411c6a2902003703d001200220012f01263b01ce01200141186a2802002106200141146a2802002107200141106a2802002108200141286a28020021092001412c6a280200210a200141306a290300210b200141f8016a280200210c20012d0025210d200229038003210e200229038803210f200241186a20024180036a41106a41b00110e9081a2005a721102005422088a7211120014184026a280200211220014180026a2802002101411b21040c1c0b20024180036a200141086a10cb01200220024194036a2802003602d001200229038003220f422088a7211120024190036a28020021062002418c036a280200210720024180036a41086a2802002108200fa72110410021040c1c0b20024180036a200141046a10cc01200241d8016a200241a0036a2d00003a0000200220024198036a2903003703d0012002200241a2036a2f01003b01ce0120022f00810320022d008303411074722113200229028403220f422088a7211120024194036a280200210620024180036a41106a28020021072002418c036a2802002108200241a1036a2d0000210d20022d0080032114200fa72110410121040c230b20024180036a200141086a10cd01200241d0016a41086a2002419c036a2d00003a0000200220024194036a2902003703d001200220022f019e033b01ce01200241b0036a290300210e200241a8036a290300210b20024180036a41106a28020021062002418c036a280200210720024180036a41086a2802002108200241a0036a2802002109200241a4036a280200210a200241b8036a290300210f20022d009d03210d2002290380032105200241186a200241c0036a41b00110e9081a200241e0016a41086a20024188056a290300370300200241e0016a41106a20024190056a290300370300200241f8016a20024198056a290300370300200220024180056a2903003703e0012005422088a72111200241fc046a2802002112200241f8046a2802002101200241f4046a2802002115200241f0046a280200210c2005a72110410221040c190b200141086a290300220fa72110200f422088a72111410321040c190b02400240024002400240024002400240024020012d0004417f6a0e050102030405000b41e2a0cc00412841e89bc4001039000b200141086a2802002110410121140c040b20024180036a41086a200141246a2d00003a000020022001411c6a2902003703800320012f0005200141076a2d0000411074722113200141186a2802002106200141146a2802002107200141106a28020021082001410c6a2802002111200141086a2802002110200141286a2802002109410221140c040b200141086a2802002110410321140c020b20024180036a41086a200141246a2d00003a000020022001411c6a2902003703800320012d0025410047210d20012f0005200141076a2d0000411074722113200141186a2802002106200141146a2802002107200141106a28020021082001410c6a2802002111200141086a2802002110200141286a2802002109410421140c030b200141086a2802002110410521140b0b0b200241d0016a41086a20024180036a41086a2d00003a000020022002290380033703d001410421040c200b20024180036a200141086a10ce01200241d0016a41086a2002419c036a2d00003a0000200241186a41086a200241c8036a290300370300200241186a41106a200241d0036a290300370300200241306a200241d8036a290300370300200220024194036a2902003703d001200220022f019e033b01ce012002200241c0036a2903003703182002290380032205422088a72111200241b0036a290300210e200241a8036a290300210b20024180036a41106a28020021062002418c036a280200210720024180036a41086a2802002108200241a0036a2802002109200241a4036a280200210a200241b8036a290300210f20022d009d03210d2005a72110410521040c150b20024180036a200141046a10cf0120022f00810320022d008303411074722113200229028403220f422088a7211120022d0080032114200fa72110410621040c1e0b20024180036a200141086a10d001200241d0016a41086a2002419c036a2d00003a0000200241186a41086a200241c8036a290300370300200241186a41106a200241d0036a290300370300200220024194036a2902003703d00120022002419e036a2f01003b01ce012002200241c0036a2903003703182002290380032205422088a72111200241b0036a290300210e200241a8036a290300210b20024180036a41106a28020021062002418c036a280200210720024180036a41086a28020021082002419d036a2d0000210d200241a0036a2802002109200241a4036a280200210a200241b8036a290300210f2005a72110410721040c130b10d101000b02400240200128020422130d0041002114410021110c010b200241206a200141246a2d00003a000020022001411c6a290000370318200220012f01263b01d0012002200141c8006a29020037038003200141386a290200210e200141306a290200210b200141186a2802002106200141146a2802002107200141106a2802002108200141286a28020021092001412c6a280200210a200141c0006a290200210f20012d0025210d200241a0036a200141e8006a29020037030020024180036a41186a200141e0006a29020037030020024180036a41106a200141d8006a29020037030020024180036a41306a200141f8006a29020037030020024180036a41386a20014180016a29020037030020024180036a41c0006a20014188016a29020037030020024180036a41d0006a20014198016a29020037030020024180036a41d8006a200141a0016a29020037030020024180036a41e0006a200141a8016a2902003703002002200141d0006a290200370388032002200141f0006a2902003703a803200220014190016a2902003703c80320024180036a4180016a200141c8016a29020037030020024180036a41f8006a200141c0016a29020037030020024180036a41f0006a200141b8016a2902003703002002200141b0016a2902003703e8032001410c6a2802002211417f4c0d190240024020110d00410121140c010b2011102c2214450d190b20142013201110e9081a200241f0026a41086a200241186a41086a2d00003a0000200220022903183703f002200220022f01d0013b01ee02200241e0016a20024180036a41880110e9081a0b200241d0016a41086a200241f0026a41086a2d00003a0000200220022903f0023703d001200220022f01ee023b01ce01200241186a200241e0016a41880110e9081a2014410876211341092104201121100c1b0b20024180036a200141086a10d201200241d0016a41086a2002419c036a2d00003a0000200220024194036a2902003703d001200220022f019e033b01ce01200241b0036a290300210e200241a8036a290300210b20024180036a41106a28020021062002418c036a280200210720024180036a41086a2802002108200241a0036a2802002109200241a4036a280200210a200241b8036a290300210f20022d009d03210d2002290380032105200241186a200241c0036a41b00110e9081a200241e0016a41086a20024188056a290300370300200241e0016a41106a20024190056a290300370300200220024180056a2903003703e0012005422088a72111200241fc046a2802002112200241f8046a2802002101200241f4046a2802002115200241f0046a280200210c2005a72110410a21040c110b20024180036a200141046a10d301200241d0016a41086a20024180036a41206a2d00003a0000200241186a41086a200241cc036a290200370300200241186a41106a200241d4036a290200370300200241186a41186a200241dc036a290200370300200241186a41206a200241e4036a280200360200200220024180036a41186a2903003703d001200220022f01a2033b01ce012002200241c4036a29020037031820022f00810320022d0083034110747221132002290284032205422088a72111200241b4036a290200210e200241ac036a290200210b20024194036a280200210620024180036a41106a28020021072002418c036a2802002108200241bc036a290200210f20022d008003211420022d00a103210d20022802a403210920022802a803210a2005a72110410b21040c190b10d401000b20024180036a200141086a10d501200241d0016a41086a2002419c036a2d00003a0000200220024194036a2902003703d00120022002419e036a2f01003b01ce01200229038003220f422088a72111200241b0036a290300210e200241a8036a290300210b20024190036a28020021062002418c036a280200210720024180036a41086a28020021082002419d036a2d0000210d200241a0036a2802002109200241a4036a280200210a200fa72110410d21040c0e0b20024180036a200141086a10d601200241d0016a41086a2002419c036a2d00003a0000200220024194036a2902003703d00120022002419e036a2f01003b01ce01200229038003220f422088a72111200241b0036a290300210e200241a8036a290300210b20024190036a28020021062002418c036a280200210720024180036a41086a28020021082002419d036a2d0000210d200241a0036a2802002109200241a4036a280200210a200fa72110410e21040c0d0b20024180036a200141086a10d601200241d0016a41086a2002419c036a2d00003a0000200220024194036a2902003703d00120022002419e036a2f01003b01ce01200229038003220f422088a72111200241b0036a290300210e200241a8036a290300210b20024190036a28020021062002418c036a280200210720024180036a41086a28020021082002419d036a2d0000210d200241a0036a2802002109200241a4036a280200210a200fa72110410f21040c0c0b20024180036a200141086a10d701200241d0016a41086a2002419c036a2d00003a0000200220024194036a2902003703d00120022002419e036a2f01003b01ce01200229038003220f422088a7211120024180036a41106a28020021062002418c036a280200210720024180036a41086a28020021082002419d036a2d0000210d200241a0036a2802002109200241a4036a280200210a200fa721100c0c0b4107211402400240024002400240024002400240024020012d0004417f6a0e0701020304050608000b41e2a0cc00412841a4c3cb001039000b20024180036a41086a200141246a2d00003a000020022001411c6a2900003703800320012f0005200141076a2d0000411074722113200141186a2800002106200141146a2800002107200141106a2800002108200141086a2900002105410121140c050b20024180036a41086a200141246a2d00003a000020022001411c6a2900003703800320012f0005200141076a2d0000411074722113200141186a2800002106200141146a2800002107200141106a2800002108200141086a2900002105410221140c040b20024180036a41086a200141246a2d00003a0000200220012f00263b011820022001411c6a29000037038003200141c0006a350000200141c4006a31000042208684210f20012f0005200141076a2d0000411074722113200141386a290000210e200141306a290000210b2001412c6a280000210a200141286a2800002109200141186a2800002106200141146a2800002107200141106a2800002108200141086a290000210520012d0025210d410321140c040b20024180036a200141086a10c80120022802880321082002290380032105410421140c030b20024180036a41086a200141246a2d00003a000020022001411c6a2900003703800320012f0005200141076a2d0000411074722113200141186a2800002106200141146a2800002107200141106a2800002108200141086a2900002105410521140c010b20024180036a41086a200141246a2d00003a000020022001411c6a2900003703800320012f0005200141076a2d0000411074722113200141186a2800002106200141146a2800002107200141106a2800002108200141086a2900002105410621140b0b200241d0016a41086a20024180036a41086a2d00003a000020022002290380033703d001200220022f01183b01ce012005422088a721112005a72110411121040c130b024002400240024002400240200141086a280200417f6a0e03010203000b41e2a0cc0041284184ccc2001039000b200141386a290300210e200141306a290300210b4101211041012113024002400240024002402001410c6a2d00000e050104020300010b4104211320024180036a41046a200141206a2d00003a000020022001411c6a2802003602800320012f000d2001410f6a2d0000411074722104200141186a2802002106200141146a2802002107200141106a28020021080c030b20024188036a200141246a2d00003a0000200220012f01263b01e00120022001411c6a2902003703800320012f000d2001410f6a2d00004110747221042001412c6a2d00002114200141286a2802002109200141186a2802002106200141146a2802002107200141106a280200210820012d0025210d410021130c020b200141186a2802002207417f4c0d15200141106a28020021010240024020070d00410121080c010b2007102c2208450d150b20082001200710e9081a41022113200721060c010b20024188036a200141246a2d00003a0000200220012f01263b01e00120022001411c6a2902003703800320012f000d2001410f6a2d00004110747221042001412c6a2d00002114200141286a2802002109200141186a2802002106200141146a2802002107200141106a280200210820012d0025210d410321130b200241186a41086a20024180036a41086a2d00003a00002002200229038003370318200220022f01e0013b01f002201441ff0171210a0c030b2001410c6a28020022134108762104410221100c010b2001410c6a28020022134108762104410321100b0b200241d0016a41086a200241186a41086a2d00003a0000200220022903183703d001200220022f01f0023b01ce012004410874201341ff0171722111411221040c090b20024180036a200141086a10d801200241d0016a41086a2002419c036a2d00003a0000200241186a41086a200241c8036a290300370300200241186a41106a200241d0036a290300370300200241306a200241d8036a290300370300200241186a41206a200241e0036a290300370300200241186a41286a200241e8036a290300370300200220024194036a2902003703d00120022002419e036a2f01003b01ce012002200241c0036a2903003703182002290380032205422088a72111200241b0036a290300210e20024180036a41286a290300210b20024180036a41106a28020021062002418c036a280200210720024180036a41086a28020021082002419d036a2d0000210d20024180036a41206a2802002109200241a4036a280200210a200241b8036a290300210f2005a72110411321040c070b20024180036a200141086a10d901200241d0016a41086a2002419c036a2d00003a0000200241186a41086a200241c8036a290300370300200241186a41106a200241d0036a290300370300200241306a200241d8036a290300370300200241186a41206a200241e0036a290300370300200241186a41286a200241e8036a290300370300200241186a41306a200241f0036a290300370300200220024194036a2902003703d001200220022f019e033b01ce012002200241c0036a2903003703182002290380032205422088a7211120024180036a41306a290300210e20024180036a41286a290300210b20024180036a41106a28020021062002418c036a280200210720024180036a41086a280200210820024180036a41206a2802002109200241a4036a280200210a200241b8036a290300210f20022d009d03210d2005a72110411421040c100b02400240024020012f0104417f6a0e03010200010b20024180036a200141086a10c901410321140c0f0b20024180036a200141086a10c901410121140c0e0b20012f0106211341b002102c2210450d0b20024180036a200141086a28020010da01201020024180036a41b00210e9081a200220133b011a41022114200241023b01180c0e0b20024180036a200141086a10db01200241d0016a41086a2002419c036a2d00003a0000200220024194036a2902003703d00120022002419e036a2f01003b01ce01200241b0036a290300210e200241a8036a290300210b20024180036a41106a28020021062002418c036a280200210720024180036a41086a28020021082002419d036a2d0000210d20024180036a41206a2802002109200241a4036a280200210a200241b8036a290300210f2002290380032105200241186a200241c0036a41b00110e9081a200241e0016a41086a20024188056a290300370300200241e0016a41106a20024190056a290300370300200241f8016a20024198056a290300370300200241e0016a41206a200241a0056a290300370300200220024180056a2903003703e0012005422088a72111200241fc046a2802002112200241f8046a2802002101200241f4046a2802002115200241f0046a280200210c2005a72110411621040c050b20024180036a200141046a10dc01200241d8016a200241a0036a2d00003a0000200220024198036a2903003703d0012002200241a2036a2f01003b01ce01200241b4036a290200210e200241ac036a290200210b20024194036a280200210620024180036a41106a28020021072002418c036a2802002108200241a1036a2d0000210d200241a4036a2802002109200241a8036a280200210a200241bc036a290200210f20022d0080032114200229028403210520022f008103210120022d00830321132002200241c4036a280200360218200120134110747221132005422088a721112005a72110411721040c0d0b20024180036a200141086a10dd01200241d0016a41086a2002419c036a2d00003a0000200220024194036a2902003703d00120022002419e036a2f01003b01ce012002200241c0036a2903003703182002290380032205422088a72111200241b0036a290300210e200241a8036a290300210b20024180036a41106a28020021062002418c036a280200210720024180036a41086a28020021082002419d036a2d0000210d200241a0036a2802002109200241a4036a280200210a200241b8036a290300210f2005a72110411821040c020b20024180036a200141086a10de01200241d0016a41086a2002419c036a2d00003a0000200220024194036a2902003703d001200220022f019e033b01ce012002290380032205422088a72111200241b0036a290300210e200241a8036a290300210b20024180036a41106a28020021062002418c036a280200210720024180036a41086a2802002108200241a0036a2802002109200241a4036a280200210a200241b8036a290300210f20022d009d03210d2005a72110411921040c010b20024180036a200141086a10df01200241d0016a41086a2002419c036a2d00003a0000200220024194036a2902003703d00120022002419e036a2f01003b01ce012002290380032205422088a72111200241b0036a290300210e200241a8036a290300210b20024180036a41106a28020021062002418c036a280200210720024180036a41086a28020021082002419d036a2d0000210d200241a0036a2802002109200241a4036a280200210a200241b8036a290300210f2005a72110411a21040b0b0b0c070b200141026a2f0100211320024180036a200141046a10c801200141246a2802002203417f4c0d032001411c6a2802002104200141186a2802002114200141146a2802002111200141106a28020021070240024020030d00410121080c010b2003102c2208450d030b20082004200310e9082104200041026a20133b0100200041246a2003360200200041206a20033602002000411c6a2004360200200041186a2014360200200041146a2011360200200041106a2007360200200041023a0000200041046a2002290380033702002000410c6a20024188036a280200360200200041286a2001290328370300200020012d00014100473a00010c070b200141226a2f0100210320024180036a200141246a10c801200041226a20033b0100200041246a2002290380033702002000412c6a20024188036a280200360200200041386a200141386a280200360200200041306a200141306a29020037030020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200141c0006a290300210f200041033a0000200041c0006a200f3703000c060b200141226a2f0100210320024180036a200141246a10c801200041226a20033b0100200041043a0000200041246a2002290380033702002000412c6a20024188036a280200360200200041306a200141306a29020037030020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a2900003700000c050b1036000b1038000b200220143b01182002280288032108200228028403211120022802800321100b20022f001920022d001b411074722113411521040b200320133b0005200320143a000420032004360200200341076a20134110763a000020032011ad4220862010ad843703082003200b3703302003200636021820032007360214200320083602102003200d3a00252003200f3703402003200a36022c20032009360228200320022f01ce013b0126200341386a200e370300200320022903d00137021c200341246a200241d0016a41086a2d00003a0000200341c8006a200241186a41b00110e9081a20032012360284022003200136028002200320153602fc012003200c3602f801200320022903e0013703880220034190026a200241e0016a41086a29030037030020034198026a200241e0016a41106a290300370300200341a0026a200241f8016a290300370300200341a8026a20024180026a2903003703002000410c6a200241086a41086a280200360200200041046a2002290308370200200041106a2003360200200041013a00000b200241b0056a24000b850d03027f027e057f230041206b2202240002400240024002400240024002400240024002400240024002402001280200417f6a0e09010203040506070809000b41e2a0cc00412841e0ecc0001039000b2001410c6a2802002203417f4c0d09200141186a2903002104200141106a2903002105200128020421064101210102402003450d002003102c2201450d0b0b20012006200310e9082101200041186a2004370300200041106a20053703002000410c6a2003360200200041086a200336020020002001360204200041013602000c080b20004102360200200020012802043602040c070b200128020421074101210802400240024002400240200141086a22092d00000e050104020300010b2002411e6a200941036a2d00003a000041042108200241086a41046a2001411c6a2d00003a0000200220092f00013b011c2002200141186a280000360208200141146a280200210a200141106a28020021032001410c6a28020021060c030b2002411e6a200941036a2d00003a0000200241086a41086a200141206a290000370300200241086a41106a200141286a2d00003a0000200220092f00013b011c2002200141186a290000370308200141146a280200210a200141106a28020021032001410c6a2802002106410021080c020b200141146a2802002203417f4c0d092001410c6a28020021080240024020030d00410121060c010b2003102c2206450d0b0b20062008200310e9081a410221082003210a0c010b410321082002411e6a200941036a2d00003a0000200241086a41086a200141206a290000370300200241086a41106a200141286a2d00003a0000200220092f00013b011c2002200141186a290000370308200141146a280200210a200141106a28020021032001410c6a28020021060b20002007360204200020022f011c3b0009200020022f00053b0029200041086a20083a0000200041146a200a360000200041106a20033600002000410c6a2006360000200041186a20022903083700002000410b6a2002411c6a41026a2d00003a0000200041206a200241086a41086a290300370000200041286a200241086a41106a2d00003a00002000412b6a200241056a41026a2d00003a000020012903302104200041386a200141386a290300370300200041306a2004370300200041033602000c060b20004104360200200020012802043602040c050b20004105360200200020012802043602040c040b200128020421074101210802400240024002400240200141086a22092d00000e050104020300010b2002411e6a200941036a2d00003a000041042108200241086a41046a2001411c6a2d00003a0000200220092f00013b011c2002200141186a280000360208200141146a280200210a200141106a28020021032001410c6a28020021060c030b2002411e6a200941036a2d00003a0000200241086a41086a200141206a290000370300200241086a41106a200141286a2d00003a0000200220092f00013b011c2002200141186a290000370308200141146a280200210a200141106a28020021032001410c6a2802002106410021080c020b200141146a2802002203417f4c0d062001410c6a28020021010240024020030d00410121060c010b2003102c2206450d080b20062001200310e9081a410221082003210a0c010b410321082002411e6a200941036a2d00003a0000200241086a41086a200141206a290000370300200241086a41106a200141286a2d00003a0000200220092f00013b011c2002200141186a290000370308200141146a280200210a200141106a28020021032001410c6a28020021060b20002007360204200020022f011c3b0009200020022f00053b0029200041086a20083a0000200041146a200a360000200041106a20033600002000410c6a2006360000200041186a20022903083700002000410b6a2002411c6a41026a2d00003a0000200041206a200241086a41086a290300370000200041286a200241086a41106a2d00003a00002000412b6a200241056a41026a2d00003a0000200041063602000c030b20004107360200200020012802043602040c020b20004108360200200020012802043602040c010b200141106a2802002203417f4c0d01200141086a2802002106200128020421010240024020030d00410121080c010b2003102c2208450d030b20082006200310e9082106200041106a20033602002000410c6a2003360200200041086a200636020020002001360204200041093602000b200241206a24000f0b1038000b1036000bc00501037f02400240024002400240024002400240024020012d0000417f6a0e06010203040506000b41e2a0cc00412841d4cec8001039000b2001412c6a2802002202417f4c0d05200141246a28020021034101210402402002450d002002102c2204450d070b20042003200210e90821042000412c6a2002360200200041286a2002360200200041246a2004360200200041013a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a2900003700000f0b200041023a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000f0b2001412c6a2802002202417f4c0d03200141246a28020021040240024020020d00410121030c010b2002102c2203450d050b20032004200210e90821042000412c6a2002360200200041286a2002360200200041246a2004360200200041033a0000200041386a200141386a290300370300200041306a200129033037030020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a2900003700000f0b200041043a000020002001290001370001200041306a200141306a290300370300200041286a200141286a290300370300200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a2900003700000f0b200041053a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000f0b200041063a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000f0b1038000b1036000bff0104017f017e037f037e0240024020012802082202ad42287e2203422088a70d002003a72204417f4c0d00200128020021050240024020040d00410821010c010b2004102c2201450d020b2000410036020820002001360200200041046a200441286e2206360200024020044128490d0003402004450d01200541086a2903002103200541106a29030021072005290320210820052903002109200141186a200541186a290300370300200141106a2007370300200141086a200337030020012009370300200141206a2008370300200141286a2101200441586a2104200541286a21052006417f6a22060d000b0b200020023602080f0b1038000b1036000ba80101017f024020002802082201450d0020002802002100200141246c210103400240024002400240024020002d00000e050400010204030b2000410c6a280200450d03200041086a280200102e0c030b2000410c6a280200450d02200041086a280200102e0c020b2000410c6a280200450d01200041086a280200102e0c010b200041086a280200450d00200041046a280200102e0b200041246a21002001415c6a22010d000b0b0bcd0101017f0240024002400240024020002802000e0404000102030b0240200041086a2802004125490d00200041106a280200102e0b200041386a280200450d03200041346a280200102e0f0b200041086a2802004125490d02200041106a280200102e0f0b2000280204102e200041086a2802002201450d012000410c6a280200450d012001102e0c010b0240200041086a2802004125490d00200041106a280200102e0b200041346a280200102e200041386a2802002201450d002000413c6a280200450d002001102e0f0b0bff0403037f017e077f230041306b22022400200241086a200110ab01024002402002280208450d00200041003602000c010b024002400240024002400240200228020c22032001280204410c6e2204200420034b1bad420c7e2205422088a70d002005a72204417f4c0d000240024020040d00410421060c010b2004102c2206450d040b2004410c6e2107024020030d00410021030c060b41002108410021094100210a03402002200110ab0120022802000d032001280204220b20022802042204490d032004417f4c0d010240024020040d004101210c0c010b20041032220c450d052001280204210b0b200b2004490d02200c2001280200200410e908210b2001280204220c2004490d052001200c20046b3602042001200128020020046a36020002400240200a2007470d002008200a41016a220c2008200c4b1b220c4104200c41044b1bad420c7e2205422088a745410274210c2005a7210702400240200a0d00200241003602200c010b2002410436022820022009360224200220063602200b200241106a2007200c200241206a107d2002280218210c20022802104101460d0120022802142106200c410c6e21070b200620096a220c200b360200200c41046a2004ad2205422086200584370200200841026a21082009410c6a21092003200a41016a220a460d070c010b0b200c0d030b1038000b200c102e0b200041003602000240200a450d002006210403400240200441046a280200450d002004280200102e0b2004410c6a2104200941746a22090d000b0b2007450d032007410c6c450d032006102e0c030b1036000b2004200c41b8b2c0001056000b2000200736020420002006360200200041086a20033602000b200241306a24000bd206030a7f017e017f230041f0016b220224002002200110ad01024002402002280200450d00200041003602000c010b024002400240024002402002280204220320012802002802044105762204200420034b1b22054105742204417f4c0d004101210602402005450d002004102c2206450d020b2001200128020441016a220436020402400240200420012802084b0d0020030d01410021030c060b200041003602000c030b410021070340200241003a00a8012007220841016a21074100210902400240024002400240034020012802002204280204220a450d0120024188016a20096a2004280200220b2d00003a00002004200a417f6a3602042004200b41016a3602002002200941016a22043a00a8012004210920044120470d000b200241e8006a41186a20024188016a41186a290300220c370300200241c8006a41086a220420024188016a41086a290300370300200241c8006a41106a220920024188016a41106a290300370300200241c8006a41186a220a200c3703002002200229038801370348200241286a41186a220b200a290300370300200241286a41106a220a2009290300370300200241286a41086a2209200429030037030020022002290348370328200241086a41186a220d200b290300370300200241086a41106a220b200a290300370300200241086a41086a220a20092903003703002002200229032837030820082005470d0320084101742204200841016a2209200420094b1b22044104200441044b1b220441ffffff3f7120044621092004410574210420080d0120024100360288010c020b0240200941ff0171450d00200241003a00a8010b200041003602000c070b200241013602900120022006360288012002200841057436028c010b200241e8006a2004200920024188016a107d2002280270210420022802684101460d01200228026c2106200441057621050b200620084105746a22042002290308370000200441186a200d290300370000200441106a200b290300370000200441086a200a29030037000020072003460d050c010b0b20040d010b1038000b1036000b200541ffffff3f71450d022006102e0c020b200128020421040b2000200536020420002006360200200041086a200336020020012004417f6a3602040b200241f0016a24000bfc0503037f017e0b7f23004190016b220224002002200110ab01024002402002280200450d00200041003602000c010b024002400240024020022802042203200128020441246e2204200420034b1bad42247e2205422088a70d002005a72204417f4c0d000240024020040d00410421060c010b2004102c2206450d030b200441246e2107024020030d00410021030c040b200241d8006a4101722108410021094100210a4100210b0340200241d8006a200110e601200241306a41086a2204200841086a290000370300200241306a41106a220c200841106a290000370300200241306a41186a220d200841186a290000370300200241306a411f6a220e2008411f6a2800003600002002200829000037033020022d0058220f4105460d02200241086a411f6a2210200e280000360000200241086a41186a220e200d290300370300200241086a41106a220d200c290300370300200241086a41086a220c20042903003703002002200229033037030802400240200b2007470d002009200b41016a2204200920044b1b22044104200441044b1bad42247e2205422088a74541027421042005a7210702400240200b0d00200241003602580c010b200241043602602002200a36025c200220063602580b20024180016a20072004200241d8006a107d20022802880121042002280280014101460d012002280284012106200441246e21070b2006200a6a2204200f3a0000200441016a2002290308370000200441096a200c290300370000200441116a200d290300370000200441196a200e290300370000200441206a2010280000360000200941026a2109200a41246a210a2003200b41016a220b460d050c010b0b20040d020b1038000b200041003602000240200b450d00200621040340024020042d00004102470d00200441086a280200450d00200441046a280200102e0b200441246a2104200a415c6a220a0d000b0b2007450d02200741246c450d022006102e0c020b1036000b2000200736020420002006360200200041086a20033602000b20024190016a24000b801103057f047e017f230041f0016b22022400024002400240024002400240024002400240024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a36020020050e050102030405060b200041053a00000c0e0b200241d8006a2001109301024020022d00584101460d0020024198016a200241d8006a41196a290000220737030020024190016a200241d8006a41116a290000220837030020024188016a200241d8006a41096a290000220937030020022002290059220a37038001200041003a00002000200a370001200041096a2009370000200041116a2008370000200041196a2007370000200041216a20022f00383b0000200041236a2002413a6a2d00003a00000c0e0b200041053a00000c0d0b200041013a00000c0c0b200241086a200110ab01024020022802080d0020012802042203200228020c2205490d002005417f4c0d050240024020050d004101210b0c010b20051032220b450d07200128020421030b024020032005490d00200b2001280200200510e90821032001280204220b2005490d082001200b20056b3602042001200128020020056a3602002003450d01200041023a0000200020022f0080013b0001200041086a2005ad2207422086200784370000200041046a2003360000200041106a2002290258370200200041036a20024180016a41026a2d00003a0000200041186a200241d8006a41086a290200370200200041206a200241d8006a41106a2802003602000c0d0b200b102e0b200041053a00000c0b0b41002105200241003a00782003417e6a21030240034020062005460d01200241d8006a20056a200420056a220b41016a2d00003a0000200120033602042001200b41026a3602002002200541016a220b3a00782003417f6a2103200b2105200b4120460d0a0c000b0b200541ff0171450d09200241003a00780c090b200241003a006c2006450d0620042d0001210520012003417e6a220b3602042001200441026a360200200241013a006c200220053a0058200b0d010c050b200041053a00000c080b20042d0002210520012003417d6a220b3602042001200441036a360200200241023a006c200220053a0059200b450d0320042d0003210520012003417c6a220b3602042001200441046a360200200241033a006c200220053a005a200b450d0320042d0004210520012003417b6a220b3602042001200441056a360200200241043a006c200220053a005b200b450d0320042d0005210520012003417a6a220b3602042001200441066a360200200241053a006c200220053a005c200b450d0320042d000621052001200341796a220b3602042001200441076a360200200241063a006c200220053a005d200b450d0320042d000721052001200341786a220b3602042001200441086a360200200241073a006c200220053a005e200b450d0320042d000821052001200341776a220b3602042001200441096a360200200241083a006c200220053a005f200b450d0320042d000921052001200341766a220b36020420012004410a6a360200200241093a006c200220053a0060200b450d0320042d000a21052001200341756a220b36020420012004410b6a3602002002410a3a006c200220053a0061200b450d0320042d000b21052001200341746a220b36020420012004410c6a3602002002410b3a006c200220053a0062200b450d0320042d000c21052001200341736a220b36020420012004410d6a3602002002410c3a006c200220053a0063200b450d0320042d000d21052001200341726a220b36020420012004410e6a3602002002410d3a006c200220053a0064200b450d0320042d000e21052001200341716a220b36020420012004410f6a3602002002410e3a006c200220053a0065200b450d0320042d000f21052001200341706a220b3602042001200441106a3602002002410f3a006c200220053a0066200b450d0320042d0010210520012003416f6a220b3602042001200441116a360200200241103a006c200220053a0067200b450d0320042d0011210520012003416e6a220b3602042001200441126a360200200241113a006c200220053a0068200b450d0320042d0012210520012003416d6a220b3602042001200441136a360200200241123a006c200220053a0069200b450d0320042d0013210520012003416c6a220b3602042001200441146a360200200241133a006c200220053a006a200b450d0320042d0014210520012003416b6a3602042001200441156a36020020024180016a41086a2201200241d8006a41086a290300370300200220053a006b20024180016a41106a2205200241d8006a41106a280200360200200241143a006c2002200229035837038001200241386a41106a22032005280200360200200241386a41086a220520012903003703002002200229038001370338200041043a000020002002290338370001200041096a2005290300370000200041116a2003280200360000200041156a20022900183700002000411c6a2002411f6a2900003700000c070b1038000b1036000b2005200b41b8b2c0001056000b200241003a006c0b200041053a00000c020b20024180016a41086a2205200241d8006a41086a29030037030020024180016a41106a2201200241d8006a41106a29030037030020024180016a41186a2203200241d8006a41186a2903003703002002200229035837038001200b41ff0171411f4d0d00200241186a41086a20052903002207370300200241186a41106a20012903002208370300200241186a41186a200329030022093703002002200229038001220a370318200041033a00002000200a370001200041096a2007370000200041116a2008370000200041196a2009370000200041216a20022f00153b0000200041236a200241176a2d00003a00000c010b200041053a00000b200241f0016a24000b8a0201067f230041106b22022400200241086a200110ab01024002400240024002402002280208450d00200041003602000c010b0240200228020c220341ffffffff03712003470d0020034102742204200128020422054b0d002004417f4c0d020240024020040d00410421060c010b200410322206450d04200128020421050b0240200520034102742207490d0020062001280200200710e9082105200128020422062007490d0520002003ad4220862004410276ad84370204200020053602002001200620076b3602042001200128020020076a3602000c020b2004450d002006102e0b200041003602000b200241106a24000f0b1038000b1036000b2007200641b8b2c0001056000bc50503037f017e087f230041306b22022400200241086a200110ad01024002402002280208450d00200041003602000c010b02400240024002400240024002400240200228020c22032001280200280204410c6e2204200420034b1bad420c7e2205422088a70d002005a72204417f4c0d000240024020040d00410421060c010b2004102c2206450d050b2001200128020441016a22073602042004410c6e210802400240200720012802084b0d0020030d01410021030c090b200041003602000c040b41002109410021074100210a03402002200110ad0120022802000d032001280200220b280204220c20022802042204490d032004417f4c0d010240024020040d004101210d0c010b20041032220d450d062001280200220b280204210c0b200c2004490d02200d200b280200200410e908210c200b280204220d2004490d06200b200d20046b360204200b200b28020020046a36020002400240200a2008470d002009200a41016a220b2009200b4b1b220b4104200b41044b1bad420c7e2205422088a745410274210b2005a7210802400240200a0d00200241003602200c010b2002410436022820022007360224200220063602200b200241106a2008200b200241206a107d2002280218210b20022802104101460d0120022802142106200b410c6e21080b200620076a220b200c360200200b41046a2004ad2205422086200584370200200941026a21092007410c6a21072003200a41016a220a460d080c010b0b200b0d040b1038000b200d102e0b20004100360200200a450d002006210403400240200441046a280200450d002004280200102e0b2004410c6a2104200741746a22070d000b0b2008450d042008410c6c450d042006102e0c040b1036000b2004200d41b8b2c0001056000b200128020421070b2000200836020420002006360200200041086a200336020020012007417f6a3602040b200241306a24000bd60704037f017e0a7f057e23004190026b220224002002200110ab01024002402002280200450d00200041003602000c010b024002400240024020022802042203200128020441306e2204200420034b1bad42307e2205422088a70d002005a72204417f4c0d000240024020040d00410821060c010b2004102c2206450d020b200441306e2107024020030d00410021030c040b410021080340200241003a00c8012008220941016a21082001280204210a417f210b41002104024002400340200a2004460d01200241a8016a20046a2001280200220c2d00003a00002001200a200b6a3602042001200c41016a3602002002200441016a220c3a00c801200b417f6a210b200c2104200c4120470d000b200241d0016a41086a2204200241a8016a41086a290300370300200241d0016a41106a220b200241a8016a41106a290300370300200241d0016a41186a220d200241a8016a41186a290300370300200220022903a8013703d001200c41ff0171411f4b0d010c050b200441ff0171450d04200241003a00c8010c040b200241e8006a41086a220e2004290300370300200241e8006a41106a220f200b290300370300200241e8006a41186a220b200d290300370300200220022903d001370368200a200c6b220c4110490d032001280200220441086a2900002105200429000021102001200441106a3602002001200c41706a360204200241286a41086a2204200e290300370300200241286a41106a220c200f290300370300200241286a41186a220a200b29030037030020022002290368370328200241086a41186a220b200a290300370300200241086a41106a220a200c290300370300200241086a41086a220c2004290300370300200220022903283703080240024020092007470d0020094101742204200941016a2207200420074b1b22044104200441044b1bad42307e2211422088a74541037421042011a721070240024020090d00200241003602a8010c010b200241083602b001200220063602a8012002200941306c3602ac010b200241d0016a20072004200241a8016a107d20022802d801210420022802d0014101460d0120022802d4012106200441306e21070b200c2903002111200a2903002112200b2903002113200229030821142006200941306c6a2204201037032020042014370300200441286a2005370300200441186a2013370300200441106a2012370300200441086a201137030020082003460d050c010b0b20040d010b1038000b1036000b200041003602002007450d01200741306c450d012006102e0c010b2000200736020420002006360200200041086a20033602000b20024190026a24000bb80603037f017e0b7f23004190016b220224002002200110ad01024002402002280200450d00200041003602000c010b02400240024002400240024020022802042203200128020028020441246e2204200420034b1bad42247e2205422088a70d002005a72204417f4c0d000240024020040d00410421060c010b2004102c2206450d040b2001200128020441016a2207360204200441246e210802400240200720012802084b0d0020030d01410021030c070b200041003602000c030b200241d8006a4101722107410021094100210a4100210b0340200241d8006a200110eb01200241306a41086a2204200741086a290000370300200241306a41106a220c200741106a290000370300200241306a41186a220d200741186a290000370300200241306a411f6a220e2007411f6a2800003600002002200729000037033020022d0058220f4105460d02200241086a411f6a2210200e280000360000200241086a41186a220e200d290300370300200241086a41106a220d200c290300370300200241086a41086a220c20042903003703002002200229033037030802400240200b2008470d002009200b41016a2204200920044b1b22044104200441044b1bad42247e2205422088a74541027421042005a7210802400240200b0d00200241003602580c010b200241043602602002200a36025c200220063602580b20024180016a20082004200241d8006a107d20022802880121042002280280014101460d012002280284012106200441246e21080b2006200a6a2204200f3a0000200441016a2002290308370000200441096a200c290300370000200441116a200d290300370000200441196a200e290300370000200441206a2010280000360000200941026a2109200a41246a210a2003200b41016a220b460d060c010b0b20040d030b1038000b20004100360200200b450d00200621040340024020042d00004102470d00200441086a280200450d00200441046a280200102e0b200441246a2104200a415c6a220a0d000b0b2008450d03200841246c450d032006102e0c030b1036000b200128020421070b2000200836020420002006360200200041086a200336020020012007417f6a3602040b20024190016a24000baf0a02057f027e230041b0026b2202240002400240024002400240024002400240024002400240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020020060e050102030405060b200041053a00000c060b41002104200241003a00b80102400340200128020022032802042205450d0120024198016a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00b8012003210420034120470d000b200241386a41186a20024198016a41186a2903002207370300200241086a41086a220120024198016a41086a290300370300200241086a41106a220320024198016a41106a290300370300200241086a41186a220420073703002002200229039801370308200041003a000020002002290308370001200041096a2001290300370000200041116a2003290300370000200041196a2004290300370000200041216a20022f00293b0000200041236a2002412b6a2d00003a00000c060b0240200441ff0171450d00200241003a00b8010b200041053a00000c050b200041013a00000c040b2002200110ad01024020022802000d0020012802002204280204220520022802042203490d002003417f4c0d050240024020030d00410121060c010b200310322206450d072001280200220428020421050b024020052003490d0020062004280200200310e9082101200428020422052003490d082004200520036b3602042004200428020020036a3602002001450d01200041023a0000200020022f00383b0001200041086a2003ad2207422086200784370000200041046a2001360000200041106a200229029801370200200041036a200241386a41026a2d00003a0000200041186a20024198016a41086a290200370200200041206a20024198016a41106a2802003602000c050b2006102e0b200041053a00000c030b41002104200241003a00b80102400340200128020022032802042205450d0120024198016a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00b8012003210420034120470d000b200241386a41186a20024198016a41186a2903002207370300200241086a41086a220120024198016a41086a290300370300200241086a41106a220320024198016a41106a290300370300200241086a41186a220420073703002002200229039801370308200041033a000020002002290308370001200041096a2001290300370000200041116a2003290300370000200041196a2004290300370000200041216a20022f00293b0000200041236a2002412b6a2d00003a00000c030b0240200441ff0171450d00200241003a00b8010b200041053a00000c020b41002104200241003a00ac0102400340200128020022032802042205450d0120024198016a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00ac012003210420034114470d000b200241086a41086a20024198016a41086a2903002207370300200241086a41106a20024198016a41106a280200220136020020022002290398012208370308200041043a000020002008370001200041096a2007370000200041116a2001360000200041156a20022900293700002000411c6a200241306a2900003700000c020b0240200441ff0171450d00200241003a00ac010b200041053a00000c010b200041053a00000b200241b0026a24000f0b1038000b1036000b2003200541b8b2c0001056000bde0505037f017e057f017e017f230041e00a6b220224002002200110ad01024002402002280200450d00200041003602000c010b02400240024002400240024020022802042203200128020028020441c8036e2204200420034b1bad42c8037e2205422088a70d002005a72204417f4c0d000240024020040d00410821060c010b2004102c2206450d040b2001200128020441016a2207360204200441c8036e210802400240200720012802084b0d0020030d01410021030c070b200041003602000c030b20024188076a41f0006a21094100210a4100210441002107034020024188076a200110ed01200241a0066a20024188076a41e80010e9081a20022903f0072105200241c8036a200941d80210e9081a20054203510d02200241e0026a200241a0066a41e80010e9081a200241086a200241c8036a41d80210e9081a0240024020072008470d00200a200741016a2208200a20084b1b22084104200841044b1bad42c8037e220b422088a7454103742108200ba7210c0240024020070d0020024100360288070c010b20024108360290072002200436028c0720022006360288070b200241d00a6a200c200820024188076a107d20022802d80a210820022802d00a4101460d0120022802d40a2106200841c8036e21080b200620046a200241e0026a41e80010e908220c41e8006a2005370300200c41f0006a200241086a41d80210e9081a200a41026a210a200441c8036a21042003200741016a2207460d060c010b0b20080d030b1038000b200041003602002007450d002006210a03400240200a220741e8006a2903004202510d0020072d00004102470d00200741086a280200450d00200741046a280200102e0b200741c8036a210a20074198016a109601200441b87c6a22040d000b0b2008450d03200841c8036c450d032006102e0c030b1036000b200128020421070b2000200836020420002006360200200041086a200336020020012007417f6a3602040b200241e00a6a24000bdf1504057f017e077f067e230041c00a6b22022400200241286a200110ad0102400240024002400240024002400240024020022802280d00200228022c210320012001280204220441016a2205360204200520012802084b0d0002402003450d0041002105410020036b2103034020054101460d0520032005417f6a2205470d000b0b20012004360204200128020022052802042203450d01200528020022062d0000210420052003417f6a3602042005200641016a360200200441ff00714104460d02200042033703680c080b200042033703680c070b200042033703680c060b02402004411874411875417f4c0d00420221070c040b20024180076a200110eb01024020022d00800722044105460d00200241fc066a41026a20022d0083073a0000200241e0066a41086a20024194076a290200370300200241f0066a2002419c076a290200370300200220022f0081073b01fc0620022002418c076a2902003703e00620024180076a41086a2802002105200228028407210602400240024002400240200128020022032802042208450d00200328020022092d0000210a20032008417f6a3602042003200941016a36020002400240024002400240200a0e03000102050b41002108200241003a00e80402400340200128020022032802042209450d01200241a8046a20086a2003280200220a2d00003a000020032009417f6a3602042003200a41016a3602002002200841016a22033a00e80420032108200341c000470d000b200241f8016a41086a2203200241a8046a41086a290300370300200241f8016a41106a2208200241a8046a41106a290300370300200241f8016a41186a2209200241a8046a41186a290300370300200241f8016a41206a220a200241a8046a41206a290300370300200241f8016a41286a220b200241a8046a41286a290300370300200241f8016a41306a220c200241a8046a41306a290300370300200241f8016a41386a220d200241a8046a41386a290300370300200220022903a8043703f801200241f8096a41386a220e200d290300370300200241f8096a41306a200c2903002207370300200241f8096a41286a200b290300220f370300200241f8096a41206a200a2903002210370300200241f8096a41186a20092903002211370300200241f8096a41106a20082903002212370300200241f8096a41086a20032903002213370300200220022903f80122143703f809200241e8076a41306a2007370300200241e8076a41286a200f370300200241e8076a41206a2010370300200241e8076a41186a2011370300200241e8076a41106a2012370300200241e8076a41086a2013370300200241e8076a41386a200e290300370300200220143703e807410021080c030b200841ff0171450d04200241003a00e8040c040b41002108200241003a00e80402400340200128020022032802042209450d01200241a8046a20086a2003280200220a2d00003a000020032009417f6a3602042003200a41016a3602002002200841016a22033a00e80420032108200341c000470d000b200241f8016a41086a2203200241a8046a41086a290300370300200241f8016a41106a2208200241a8046a41106a290300370300200241f8016a41186a2209200241a8046a41186a290300370300200241f8016a41206a220a200241a8046a41206a290300370300200241f8016a41286a220b200241a8046a41286a290300370300200241f8016a41306a220c200241a8046a41306a290300370300200241f8016a41386a220d200241a8046a41386a290300370300200220022903a8043703f801200241f8096a41386a220e200d290300370300200241f8096a41306a200c2903002207370300200241f8096a41286a200b290300220f370300200241f8096a41206a200a2903002210370300200241f8096a41186a20092903002211370300200241f8096a41106a20082903002212370300200241f8096a41086a20032903002213370300200220022903f80122143703f809200241e8076a41306a2007370300200241e8076a41286a200f370300200241e8076a41206a2010370300200241e8076a41186a2011370300200241e8076a41106a2012370300200241e8076a41086a2013370300200241e8076a41386a200e290300370300200220143703e807410121080c020b200841ff0171450d03200241003a00e8040c030b41002108200241003a00e9040340200128020022032802042209450d02200241a8046a20086a2003280200220a2d00003a000020032009417f6a3602042003200a41016a3602002002200841016a22033a00e90420032108200341c100470d000b200241f8016a200241a8046a41c10010e9081a200241f8096a200241f8016a41c10010e9081a200241b6096a200241f8096a41c10010e9081a200241e8076a200241b6096a41c10010e9081a410221080b200241a7076a200241e8076a41c10010e9081a200128020022032802042209450d042003280200220a310000211020032009417f6a3602042003200a41016a360200201050450d02420021070c030b200841ff0171450d00200241003a00e9040b20044102470d0420050d030c040b200128020022032802042209450d012003280200220a310000211120032009417f6a3602042003200a41016a36020042022010420f8386220f4204540d01420121072011420886201084420488200f420c882210420120104201561b7e2210200f5a0d010b200241206a200110ad0120022802200d0020022802242109200241086a20011082022002290308a7450d040b20044102470d012005450d010b2006102e0b420221070c020b1038000b200241086a41106a290300211220022903102111200241f8096a41026a200241fc066a41026a2d00003a0000200241f8016a41086a200241e0066a41086a290300370300200241f8016a41106a200241e0066a41106a290300370300200220022f01fc063b01f809200220022903e0063703f801200241a8046a200241a7076a41c10010e9081a200220022f01de063b01b6090b200241f4016a41026a2203200241f8096a41026a2d00003a0000200241d8016a41086a220a200241f8016a41086a290300370300200241d8016a41106a220b200241f8016a41106a290300370300200220022f01f8093b01f401200220022903f8013703d80120024197016a200241a8046a41c10010e9081a200220022f01b6093b01940120074202510d0120024190016a41026a20032d00003a0000200241f8006a41086a200a290300370300200241f8006a41106a200b290300370300200220022f01f4013b019001200220022903d801370378200241376a20024197016a41c10010e9081a200220022f0194013b01340b200241a8046a200110950120022802a8042103200241f8016a200241a8046a41047241ac0210e9081a02402003411c460d00200020043a0000200020022f0190013b000120002005360208200020063602042000200229037837020c200020083a0024200041036a20024192016a2d00003a0000200041146a20024180016a2903003702002000411c6a20024188016a290300370200200041256a200241376a41c10010e9081a20004188016a201237030020004180016a201137030020004190016a2009360200200041f8006a20103703002000200f37037020002007370368200020022f01343b016620004198016a20033602002000419c016a200241f8016a41ac0210e9081a0c020b2000420337036820074202510d01200441ff01714102470d012005450d012006102e0c010b200042033703680b200241c00a6a24000beb0201067f230041206b2202240002400240200041046a2802002203200041086a28020022046b20012802042205200128020022066b2207490d00200028020021030c010b0240200420076a22062004490d00200341017422042006200420064b1b22044108200441084b1b21040240024020030d00200241003602100c010b200241106a41086a410136020020022003360214200220002802003602100b200220044101200241106a107d200241086a2802002104024020022802004101460d00200020022802042203360200200041046a2004360200200041086a280200210420012802002106200128020421050c020b2004450d001036000b1038000b024020062005460d002001200641016a36020020062d0000210602400340200320046a20063a0000200128020022062001280204460d01200441016a21042001200641016a36020020062d000021060c000b0b200441016a21040b200041086a2004360200200241206a24000bde0a04077f017e037f017e230041d0006b22022400200241086a200110ad01024002402002280208450d00200041013602000c010b200228020c21032001200128020441016a2204360204024002400240024002400240200420012802084b0d00200241003a00172002420037021c024020030d00200241286a41086a200241186a41086a28020036020020022002290318370328200241286a21040c050b4100210502400240024002400340200241003a0030200128020022042802042206450d07200428020022072d0000210820042006417f6a3602042004200741016a360200200241013a0030200220083a0028200128020022042802042206450d06200428020022072d0000210820042006417f6a3602042004200741016a360200200241023a0030200220083a0029200128020022042802042206450d06200428020022072d0000210820042006417f6a3602042004200741016a360200200241033a0030200220083a002a200128020022042802042206450d06200428020022072d0000210820042006417f6a3602042004200741016a360200200241043a0030200220083a002b200128020022042802042206450d06200428020022072d0000210820042006417f6a3602042004200741016a360200200241053a0030200220083a002c200128020022042802042206450d06200428020022072d0000210820042006417f6a3602042004200741016a360200200241063a0030200220083a002d200128020022042802042206450d06200428020022072d0000210820042006417f6a3602042004200741016a360200200241073a0030200220083a002e200128020022042802042206450d06200428020022072d0000210820042006417f6a3602042004200741016a360200200220083a002f200229032821092002200110ad0120022802000d0720012802002206280204220720022802042204490d072004417f4c0d020240024020040d00410121080c010b200410322208450d042001280200220628020421070b20072004490d0120082006280200200410e908210a200628020422072004490d042006200720046b3602042006200628020020046a360200200a450d072002200937032802400240200228021c220b450d002002280218210c0c010b41e401102c220b450d044100210c200b4100360200200b41003b018a012002200b36021c200241003602180b200541016a21052004ad220d422086200d84210d024002400340200b418c016a2106200b2f018a012108410021040240034020082004460d01200241286a2006410810ec082207450d03200441016a2104200641086a21062007417f4a0d000b2004417f6a21080b0240200c450d00200c417f6a210c200b20084102746a41e4016a280200210b0c010b0b20022009370338200220083602302002200b36022c200241003602282002200241186a3602342002200d3702442002200a360240200241286a200241c0006a10f0010c010b200b2004410c6c6a220441086a220628020021072006200d370200200441046a220628020021042006200a3602002004450d002007450d002004102e0b20052003470d000b20022d00172104200241286a41086a200241186a41086a2802003602002002200229031837032820040d07200241286a21040c080b2008102e0c050b1038000b1036000b2004200741b8b2c0001056000b200041013602000c050b200241003a00300b200241013a0017200241286a41086a200241186a41086a280200360200200220022903183703280b200241286a10f101410121040c010b200020042902003702042000410c6a200441086a280200360200410021040b2000200436020020012001280204417f6a3602040b200241d0006a24000b931505017f017e097f017e067f230041e0006b2202240020002902102103200028020821042000280200210520002802042106200241206a41086a2207200141086a2802003602002002200129020037032002400240024020062f018a012201410a4b0d00200241c0006a41086a2007280200360200200220022903203703402006418c016a2107200141016a21080240200441016a220920014b220a0d00200720094103746a200720044103746a20082004417f736a41037410ea081a0b200720044103746a2003370000200241d0006a41086a2205200241c0006a41086a28020036020020022002290340370350200641046a21070240200a0d0020072009410c6c6a20072004410c6c6a200120046b410c6c10ea081a0b20072004410c6c6a22042002290350370200200441086a2005280200360200200620083b018a010c010b410521014100210a02400240200441054f0d0041042101200421070c010b41052107024002402004417b6a0e020201000b200441796a21074101210a410621010c010b410021074101210a0b0240024002400240024002400240024002400240024041e401102c2204450d00200441003b018a0120044100360200200420062f018a01220b2001417f736a22083b018a012006418c016a220c20014103746a290000210d200241d0006a41086a200641046a220e2001410c6c6a220941086a280200360200200220092902003703502008410c4f0d01200b200141016a22096b2008470d022004418c016a200c20094103746a200841037410e9081a200441046a200e2009410c6c6a2008410c6c10e9081a200620013b018a01200241306a41086a200241d0006a41086a220b28020036020020022002290350370330200241c0006a41086a220c200241206a41086a2802003602002002200229032037034020042006200a1b2201418c016a210820012f018a01220941016a210a0240200741016a220e20094b220f0d002008200e4103746a200820074103746a200a2007417f736a41037410ea081a0b200820074103746a2003370000200b200c28020036020020022002290340370350200141046a21080240200f0d002008200e410c6c6a20082007410c6c6a200920076b410c6c10ea081a0b20082007410c6c6a22072002290350370200200741086a200241d0006a41086a220b2802003602002001200a3b018a01200241106a41086a200241306a41086a220f2802002201360200200220022903302203370310200241086a22102001360200200220033703000240024002402006280200220a0d00410021050c010b200d21032004211141002101034020062f0188012108200f20102802003602002002200229030037033020052001470d06200a2f018a01220e410b490d024100210941042106024020084105490d0020082106024002402008417b6a0e020201000b200841796a210841012109410621060c010b4100210841012109410521060b419402102c2204450d03200441003b018a01200441003602002004200a2f018a01220c2006417f736a22013b018a01200a418c016a221220064103746a290000210d200b200a41046a22132006410c6c6a220741086a280200360200200220072902003703502001410c4f0d07200c200641016a22076b2001470d082004418c016a201220074103746a200141037410e9081a200441046a20132007410c6c6a2001410c6c10e9081a200a20063b018a01200241c0006a41086a220c200b2802003602002002200229035037034020042f018a01220141016a21122001410c4f0d09200e20066b22062012470d0a200541016a2105200441e4016a200a20074102746a41e4016a200641027410e9081a4100210602400340200420064102746a41e4016a280200220720063b018801200720043602002006200620014922076a220620014b0d0120070d000b0b200241206a41086a2212200c28020036020020022002290340370320200c200f280200360200200220022903303703402004200a20091b2207418c016a210e20072f018a01220141016a21090240200841016a220620014b22130d00200e20064103746a200e20084103746a2008417f7320096a41037410ea081a0b200e20084103746a2003370000200b200c28020036020020022002290340370350200741046a210c024020130d00200c2006410c6c6a200c2008410c6c6a200120086b410c6c10ea081a0b200c2008410c6c6a220c2002290350370200200c41086a200b280200360200200741e4016a210c0240200841026a220e200141026a22014f0d00200c200e4102746a200c20064102746a2006417f7320016a41027410ea081a0b200c20064102746a2011360200200720093b018a010240200620014f0d00200720084102746a41e8016a2106034020062802002201200841016a22083b01880120012007360200200641046a210620092008470d000b0b2010201228020036020020022002290320370300200a2106200a2802002207210a200d2103200421112005210120070d000b0b200f20102802002206360200200220022903002203370330200241c0006a41086a200636020020022003370340200028020c22012802042207450d0920012802002108419402102c2206450d01200620073602e401200641003b018a0120064100360200200741003b01880120072006360200200120063602042001200841016a360200200241d0006a41086a200241c0006a41086a2802003602002002200229034037035020082005470d0a20062f018a012207410b4f0d0b2006200741016a22083b018a01200620074103746a418c016a200d37000020062007410c6c6a2207410c6a200241d8006a280200360200200741046a2002290350370200200620084102746a41e4016a2004360200200420083b018801200420063602002001200128020841016a3602080c0d0b200241c0006a41086a2205200241306a41086a28020036020020022002290330370340200841016a2106200a418c016a2107200a2f018a01220441016a21090240200420084d22010d00200720064103746a200720084103746a2008417f7320096a41037410ea081a0b200720084103746a2003370000200241d0006a41086a200528020036020020022002290340370350200a41046a2107024020010d0020072006410c6c6a20072008410c6c6a200420086b410c6c10ea081a0b20072008410c6c6a22072002290350370200200741086a200241d0006a41086a280200360200200a41e4016a2107200441026a2105024020010d00200841027420076a41086a200720064102746a2006417f7320056a41027410ea081a0b200720064102746a2011360200200a20093b018a01200620054f0d0b200441016a2107200a2006417f6a22064102746a41e8016a2104034020042802002201200641016a22063b0188012001200a360200200441046a210420072006470d000c0c0b0b1036000b2008410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b41ac9cc700413541e49cc7001039000b2001410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b2012410c41f49cc700104d000b41f49bc7004128419c9cc7001039000b41e8aac700412b4194abc7001039000b41e899c700413041989ac7001039000b41a89ac700412041c89ac7001039000b200028020c2206200628020841016a3602080b200241e0006a24000bc80203047f017e017f200028020421012000410036020402402001450d00024020002802002202450d002002417f6a2102034020012802e40121012002450d012002417f6a21020c000b0b024020002802082203450d004100210003402003417f6a210341012102024002400340200020012f018a01490d010240200128020022040d002001102e410021010c030b20012f01880121002001102e2002417f6a2102200421010c000b0b200041016a210420012000410c6c6a220041086a2902002105200041046a2802002106024020024101470d00200421000c010b200120044102746a41e4016a280200210102402002450d000340200241016a220020024f210420012802e40121012000210220040d000b0b410021000b2006450d0202402005a7450d002006102e0b20030d000b0b0340200128020021022001102e2002210120020d000b0b0bc30301067f230041206b22022400200041086a28020022032001107602400240200028020422040d004100210441002100410021030c010b2000280200210520042100034020042f013221062005450d012005417f6a2105200420064102746a4194036a280200210420002802940321000c000b0b200241146a2006360200200241106a20043602002002200336021820024200370308200220003602042002200536020002402003450d00034020022003417f6a3602182002410020001b220628020021050240024020062802082203200628020422042f01324f0d00200421000c010b03400240200428020022000d00410021000c020b200541016a210520042f0130210320002104200320002f01324f0d000b0b200341016a21070240024020050d00200021040c010b200020074102746a4194036a280200210402402005417f6a2205450d00034020042802940321042005417f6a22050d000b0b410021070b2006200436020420064100360200200620073602082001200020034105746a41346a412010742002200020034102746a41046a28020036021c20012002411c6a4104107420022802182203450d01200228020421000c000b0b200241206a24000ba3990204067f1a7e157f407e230041d0ce006b22042400200441d0c6006a200341d00110e9081a200441d0c6006a41abd8c8004109200241a0016a412010840120044180c5006a200441d0c6006a41d00110e9081a200441a0c8006a41386a22024200370300200441a0c8006a41306a22034200370300200441a0c8006a41286a22054200370300200441a0c8006a41206a22064200370300200441a0c8006a41186a22074200370300200441a0c8006a41106a22084200370300200441a0c8006a41086a22094200370300200442003703a04820044180c5006a41b0b7c0004107200441a0c8006a41c0001086012008310000210a2009310000210b2007310000210c20043100b248210d20043100b148210e20043100af48210f20043100ad48211020043100ae48211120043100bf48211220043100be48211320043100bd48211420043100bc48211520043100bb48211620043100ba48211720043100ac48211820043100ab48211920043100aa48211a20043100a948211b20043100a748211c20043100b948211d20043100b748211e20043100b648211f20043100b348212020043100b448212120043100b5482122200420043502a04820043100a4484220868420043100a5484228868420043100a64822234230868442ffffffffffffff03833703e04820042020202142088684202242108684201f42188684201e42208684200c42288684201d4230868442018842ffffffffffffff03833703f84820042023201c42088684200b42108684201b42188684201a4220868420194228868420184230868442038842ffffffffffffff03833703e8482004200c201d42088684201742108684201642188684201542208684201442288684201342308684201242388684420c8842ffffffffffffff03833703804920042018201042088684201142108684200f42188684200a42208684200e42288684200d4230868420204238868442068842ffffffffffffff03833703f04820044188c9006a200441e0c8006a1071200441a8ca006a41186a20022903002220370300200441a8ca006a41106a2003290300220a370300200441a8ca006a41086a2005290300220b37030020042006290300220d3703a84a20043100ba4a210e20043100b94a210f20043100b74a211020043100b54a211120043100b64a211220043100c74a211320043100c64a211420043100c54a211520043100c44a211620043100c34a211720043100c24a211920043100b44a210c20043100b34a211a20043100b24a211b20043100b14a211c20043100af4a211e20043100c14a211820043100bf4a211f20043100be4a212120043100bb4a211d20043100bc4a212220043100bd4a21232004200d42ffffffff0f8320043100ac4a4220868420043100ad4a4228868420043100ae4a220d4230868442ffffffffffffff03833703c84a2004201d202242088684202342108684202142188684201f42208684202042ff018322204228868420184230868442018842ffffffffffffff03833703e04a2004200d201e42088684200b42ff018342108684201c42188684201b42208684201a42288684200c4230868442038842ffffffffffffff03833703d04a20042018420886202084201942108684201742188684201642208684201542288684201442308684201342388684420c8842ffffffffffffff03833703e84a2004200c201142088684201242108684201042188684200a42ff018342208684200f42288684200e42308684201d4238868442068842ffffffffffffff03833703d84a200441f0ca006a200441c8ca006a1071200441d0c6006a41106a2203200441f0ca006a41386a290300220b370300200441d0c6006a41086a2224200441f0ca006a41306a290300220d20042903f84a220e7c3703002003200b20042903804b220f7c370300200441d0c6006a41186a2208200441f0ca006a41c0006a290300221020042903884b22117c370300200441d0c6006a41206a2209200441f0ca006a41c8006a290300221220042903904b22137c370300200420042903984b221420042903f04a22157c3703d046200441a8ce006a41206a2202200441f0ca006a41f0006a290300370300200441a8ce006a41186a2205200441f0ca006a41e8006a290300370300200441a8ce006a41106a2206200441f0ca006a41e0006a290300370300200441a8ce006a41086a2207200441f0ca006a41d8006a290300370300200420042903c04b3703a84e200441d0c1006a20042903e84b220c420042d9e2cbb5c2f2a603420010e808200441a0c2006a200441f0ca006a4198016a29030022184200428ee0b9a98cbfbd1f420010e808200441f0c2006a200441f0ca006a4190016a290300221d420042968c8a82a4c39824420010e808200441c0c3006a200441f0ca006a4188016a2903002220420042d587a4ceaceea43d420010e80820044190c4006a200441f0ca006a4180016a290300220a420042edd39cadab84b215420010e808200441a0c4006a200a420042d9e2cbb5c2f2a603420010e808200441e0c1006a200c420042fabaabb1878ad401420010e808200441b0c2006a2018420042968c8a82a4c39824420010e80820044180c3006a201d420042d587a4ceaceea43d420010e808200441d0c3006a2020420042edd39cadab84b215420010e808200441e0c3006a2020420042d9e2cbb5c2f2a603420010e808200441b0c4006a200a420042fabaabb1878ad401420010e808200441f0c1006a200c420042d2808e80cce8f301420010e808200441c0c2006a2018420042d587a4ceaceea43d420010e80820044190c3006a201d420042edd39cadab84b215420010e808200441a0c3006a201d420042d9e2cbb5c2f2a603420010e808200441f0c3006a2020420042fabaabb1878ad401420010e808200441c0c4006a200a420042d2808e80cce8f301420010e80820044180c2006a200c420042f7f281baccf19c03420010e808200441d0c2006a2018420042edd39cadab84b215420010e808200441e0c2006a2018420042d9e2cbb5c2f2a603420010e808200441b0c3006a201d420042fabaabb1878ad401420010e80820044180c4006a2020420042d2808e80cce8f301420010e808200441d0c4006a200a420042f7f281baccf19c03420010e80820044190c2006a200c420042ffdb95eed98d9001420010e808200441d0c6006a41c8006a2225201220137d42f0ffffffffffff3f7c220c42ffffffffffffff0383201020117d42f0ffffffffffff3f7c22184233887c370300200441d0c6006a41c0006a2226201842ffffffffffffff0383200b200f7d42f0ffffffffffff3f7c22184233887c370300200441d0c6006a41386a2227201842ffffffffffffff0383200d200e7d42f0ffffffffffff3f7c22184233887c370300200441d0c6006a41306a2228201842ffffffffffffff0383201420157d42d0fdffffffffff3f7c22184233887c3703002004200c42338842137e201842ffffffffffffff03837c3703f846200441d0c6006a41f0006a22292002290300370300200441d0c6006a41e8006a222a2005290300370300200441d0c6006a41e0006a222b2006290300370300200441d0c6006a41d8006a222c2007290300370300200420042903a84e3703a047200441d0c6006a4188016a222d20042903c042221320042903f0417c220c2004290390437c221820042903e0437c221d20042903b0447c222020042903b042221420042903e0417c220a2004290380437c220b20042903d0437c220d20042903a0447c220e20042903a042221520042903d0417c220f20042903f0427c221020042903c0437c22112004290390447c2212423388200441a0c2006a41086a290300200441d0c1006a41086a2903007c200f201554ad7c200441f0c2006a41086a2903007c2010200f54ad7c200441c0c3006a41086a2903007c2011201054ad7c20044190c4006a41086a2903007c2012201154ad7c420d86847c220f423388200441b0c2006a41086a290300200441e0c1006a41086a2903007c200a201454ad7c20044180c3006a41086a2903007c200b200a54ad7c200441d0c3006a41086a2903007c200d200b54ad7c200441a0c4006a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a42ffffffffffffff0383370300200441d0c6006a4190016a222e20042903d04222112004290380427c220b20042903a0437c220d20042903f0437c220e20042903c0447c2210200a423388200441c0c2006a41086a290300200441f0c1006a41086a2903007c200c201354ad7c20044190c3006a41086a2903007c2018200c54ad7c200441e0c3006a41086a2903007c201d201854ad7c200441b0c4006a41086a2903007c2020201d54ad7c200a202054ad7c420d86847c220c42ffffffffffffff0383370300200441d0c6006a4198016a222f20042903e04222132004290390427c221820042903b0437c221d2004290380447c222020042903d0447c220a200c423388200441d0c2006a41086a29030020044180c2006a41086a2903007c200b201154ad7c200441a0c3006a41086a2903007c200d200b54ad7c200441f0c3006a41086a2903007c200e200d54ad7c200441c0c4006a41086a2903007c2010200e54ad7c200c201054ad7c420d86847c220c42ffffffffffffff0383370300200441d0c6006a4180016a2230200c423388200441e0c2006a41086a29030020044190c2006a41086a2903007c2018201354ad7c200441b0c3006a41086a2903007c201d201854ad7c20044180c4006a41086a2903007c2020201d54ad7c200441d0c4006a41086a2903007c200a202054ad7c200c200a54ad7c420d868442137e201242ffffffffffffff03837c220c423388200f42ffffffffffffff03837c3703002004200c42ffffffffffffff03833703c84720044190cc006a41206a223120044188c9006a41c8006a223229030037030020044190cc006a41186a223320044188c9006a41c0006a2234290300222037030020044190cc006a41106a223520044188c9006a41386a2236290300221d37030020044190cc006a41086a223720044188c9006a41306a22382903002218370300200420042903b049220c3703904c2004200c2004290388497c220c3703904c203720182004290390497c22183703002035201d2004290398497c221d3703002033202020042903a0497c22203703002031203129030020042903a8497c220a370300200441c03e6a20042903d046220b4200200c420010e808200441c0c1006a200a42002024290300220d42137e420010e808200441f0c0006a202042002003290300220e42137e2212420010e808200441a0c0006a201d42002008290300221042137e2211420010e808200441d03f6a201842002009290300221342137e220f420010e808200441d03e6a20184200200b420010e808200441b0c1006a200c4200200d420010e808200441e0c0006a200a42002012420010e80820044190c0006a202042002011420010e808200441c03f6a201d4200200f420010e808200441e03e6a201d4200200b420010e808200441a0c1006a20184200200d420010e808200441d0c0006a200c4200200e420010e80820044180c0006a200a42002011420010e808200441b03f6a20204200200f420010e808200441f03e6a20204200200b420010e80820044190c1006a201d4200200d420010e808200441c0c0006a20184200200e420010e808200441f03f6a200c42002010420010e808200441a03f6a200a4200200f420010e808200441803f6a200a4200200b420010e80820044180c1006a20204200200d420010e808200441b0c0006a201d4200200e420010e808200441e03f6a201842002010420010e808200441903f6a200c42002013420010e8082038290300210b2036290300210a2034290300211d200429039049210d200429039849210e20042903a0492120200441f03b6a20042903f846220c4200203229030020042903a8497d42f0ffffffffffff3f7c220f42338842137e20042903b0492004290388497d42d0fdffffffffff3f7c221242ffffffffffffff03837c2218420010e808200441f03d6a200f42ffffffffffffff0383201d20207d42f0ffffffffffff3f7c220f4233887c221d42002028290300222042137e420010e808200441b03d6a200f42ffffffffffffff0383200a200e7d42f0ffffffffffff3f7c220f4233887c220a42002027290300220e42137e2213420010e808200441f03c6a200f42ffffffffffffff0383200b200d7d42f0ffffffffffff3f7c220d4233887c220b42002026290300221042137e2211420010e808200441b03c6a200d42ffffffffffffff038320124233887c220d42002025290300221242137e220f420010e808200441e03b6a200d4200200c420010e808200441b03e6a201842002020420010e808200441a03d6a201d42002013420010e808200441e03c6a200a42002011420010e808200441a03c6a200b4200200f420010e808200441d03b6a200b4200200c420010e808200441a03e6a200d42002020420010e808200441e03d6a20184200200e420010e808200441d03c6a201d42002011420010e808200441903c6a200a4200200f420010e808200441c03b6a200a4200200c420010e808200441903e6a200b42002020420010e808200441d03d6a200d4200200e420010e808200441903d6a201842002010420010e808200441803c6a201d4200200f420010e808200441b03b6a201d4200200c420010e808200441803e6a200a42002020420010e808200441c03d6a200b4200200e420010e808200441803d6a200d42002010420010e808200441c03c6a201842002012420010e808200420042903d03c221320042903e03d7c220c20042903903c7c221820042903d03b7c221d20042903a03e7c222020042903a03d221420042903b03e7c220a20042903e03c7c220b20042903a03c7c220d20042903e03b7c220e20042903f03d221520042903f03b7c220f20042903b03d7c221020042903f03c7c221120042903b03c7c2212423388200441f03d6a41086a290300200441f03b6a41086a2903007c200f201554ad7c200441b03d6a41086a2903007c2010200f54ad7c200441f03c6a41086a2903007c2011201054ad7c200441b03c6a41086a2903007c2012201154ad7c420d86847c220f423388200441a03d6a41086a290300200441b03e6a41086a2903007c200a201454ad7c200441e03c6a41086a2903007c200b200a54ad7c200441a03c6a41086a2903007c200d200b54ad7c200441e03b6a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a42ffffffffffffff03833703c84c200420042903803c221120042903903d7c220b20042903c03b7c220d20042903903e7c220e20042903d03d7c2210200a423388200441d03c6a41086a290300200441e03d6a41086a2903007c200c201354ad7c200441903c6a41086a2903007c2018200c54ad7c200441d03b6a41086a2903007c201d201854ad7c200441a03e6a41086a2903007c2020201d54ad7c200a202054ad7c420d86847c220c42ffffffffffffff03833703d04c200420042903b03b221320042903c03c7c221820042903803e7c221d20042903c03d7c222020042903803d7c220a200c423388200441803c6a41086a290300200441903d6a41086a2903007c200b201154ad7c200441c03b6a41086a2903007c200d200b54ad7c200441903e6a41086a2903007c200e200d54ad7c200441d03d6a41086a2903007c2010200e54ad7c200c201054ad7c420d86847c220c42ffffffffffffff03833703d84c2004200c423388200441b03b6a41086a290300200441c03c6a41086a2903007c2018201354ad7c200441803e6a41086a2903007c201d201854ad7c200441c03d6a41086a2903007c2020201d54ad7c200441803d6a41086a2903007c200a202054ad7c200c200a54ad7c420d868442137e201242ffffffffffffff03837c220c42ffffffffffffff03833703b84c2004200c423388200f42ffffffffffffff03837c3703c04c200441e03a6a20042903c847220c420020042903804a2218420010e808200441d03a6a20044188c9006a4198016a290300221d42002030290300222042137e420010e808200441803a6a20044188c9006a4190016a290300220a4200202d290300220e42137e2212420010e808200441b0396a20044188c9006a4188016a290300220b4200202e290300221042137e2211420010e808200441e0386a20044188c9006a4180016a290300220d4200202f290300221342137e220f420010e808200441d0386a200d4200200c420010e808200441a03b6a201842002020420010e808200441c03a6a201d42002012420010e808200441f0396a200a42002011420010e808200441a0396a200b4200200f420010e80820044190396a200b4200200c420010e808200441c0386a200d42002020420010e808200441903b6a20184200200e420010e808200441b03a6a201d42002011420010e808200441e0396a200a4200200f420010e808200441d0396a200a4200200c420010e80820044180396a200b42002020420010e808200441b0386a200d4200200e420010e808200441803b6a201842002010420010e808200441a03a6a201d4200200f420010e808200441903a6a201d4200200c420010e808200441c0396a200a42002020420010e808200441f0386a200b4200200e420010e808200441a0386a200d42002010420010e808200441f03a6a201842002013420010e808200420042903903a221c20042903f03a7c220c20042903c0397c221820042903f0387c221d20042903a0387c222020042903a03a221e20042903803b7c220a20042903d0397c220b2004290380397c220d20042903b0387c220e20042903b03a221f20042903903b7c220f20042903e0397c22102004290390397c221120042903c0387c221220042903c03a222120042903a03b7c221320042903f0397c221420042903a0397c221520042903d0387c221620042903d03a222220042903e03a7c221720042903803a7c221920042903b0397c221a20042903e0387c221b423388200441d03a6a41086a290300200441e03a6a41086a2903007c2017202254ad7c200441803a6a41086a2903007c2019201754ad7c200441b0396a41086a2903007c201a201954ad7c200441e0386a41086a2903007c201b201a54ad7c420d86847c2217423388200441c03a6a41086a290300200441a03b6a41086a2903007c2013202154ad7c200441f0396a41086a2903007c2014201354ad7c200441a0396a41086a2903007c2015201454ad7c200441d0386a41086a2903007c2016201554ad7c2017201654ad7c420d86847c2213423388200441b03a6a41086a290300200441903b6a41086a2903007c200f201f54ad7c200441e0396a41086a2903007c2010200f54ad7c20044190396a41086a2903007c2011201054ad7c200441c0386a41086a2903007c2012201154ad7c2013201254ad7c420d86847c220f423388200441a03a6a41086a290300200441803b6a41086a2903007c200a201e54ad7c200441d0396a41086a2903007c200b200a54ad7c20044180396a41086a2903007c200d200b54ad7c200441b0386a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a42ffffffffffffff03833703804d2004200f42ffffffffffffff03833703f84c2004201342ffffffffffffff03833703f04c2004200a423388200441903a6a41086a290300200441f03a6a41086a2903007c200c201c54ad7c200441c0396a41086a2903007c2018200c54ad7c200441f0386a41086a2903007c201d201854ad7c200441a0386a41086a2903007c2020201d54ad7c200a202054ad7c420d868442137e201b42ffffffffffffff03837c220c423388201742ffffffffffffff03837c3703e84c2004200c42ffffffffffffff03833703e04c20044190356a20042903a047220c420020042903d8492218420010e808200441a0366a20044188c9006a41f0006a290300221d4200202c290300222042137e420010e808200441e0366a20044188c9006a41e8006a290300220a4200202b290300220e42137e2212420010e808200441a0376a20044188c9006a41e0006a290300220b4200202a290300221042137e2211420010e808200441e0376a20044188c9006a41d8006a290300220d42002029290300221342137e220f420010e808200441e0356a200d4200200c420010e808200441a0356a201842002020420010e808200441b0366a201d42002012420010e808200441f0366a200a42002011420010e808200441b0376a200b4200200f420010e808200441f0356a200b4200200c420010e808200441f0376a200d42002020420010e808200441b0356a20184200200e420010e808200441c0366a201d42002011420010e80820044180376a200a4200200f420010e80820044180366a200a4200200c420010e808200441c0376a200b42002020420010e80820044180386a200d4200200e420010e808200441c0356a201842002010420010e808200441d0366a201d4200200f420010e80820044190366a201d4200200c420010e80820044190376a200a42002020420010e808200441d0376a200b4200200e420010e80820044190386a200d42002010420010e808200441d0356a201842002013420010e8082004200429039036221c20042903d0357c220c2004290390377c221820042903d0377c221d2004290390387c222020042903d036221e20042903c0357c220a2004290380367c220b20042903c0377c220d2004290380387c220e20042903c036221f20042903b0357c220f2004290380377c221020042903f0357c221120042903f0377c221220042903b036222120042903a0357c221320042903f0367c221420042903b0377c221520042903e0357c221620042903a03622222004290390357c221720042903e0367c221920042903a0377c221a20042903e0377c221b423388200441a0366a41086a29030020044190356a41086a2903007c2017202254ad7c200441e0366a41086a2903007c2019201754ad7c200441a0376a41086a2903007c201a201954ad7c200441e0376a41086a2903007c201b201a54ad7c420d86847c2217423388200441b0366a41086a290300200441a0356a41086a2903007c2013202154ad7c200441f0366a41086a2903007c2014201354ad7c200441b0376a41086a2903007c2015201454ad7c200441e0356a41086a2903007c2016201554ad7c2017201654ad7c420d86847c2213423388200441c0366a41086a290300200441b0356a41086a2903007c200f201f54ad7c20044180376a41086a2903007c2010200f54ad7c200441f0356a41086a2903007c2011201054ad7c200441f0376a41086a2903007c2012201154ad7c2013201254ad7c420d86847c220f423388200441d0366a41086a290300200441c0356a41086a2903007c200a201e54ad7c20044180366a41086a2903007c200b200a54ad7c200441c0376a41086a2903007c200d200b54ad7c20044180386a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a42338820044190366a41086a290300200441d0356a41086a2903007c200c201c54ad7c20044190376a41086a2903007c2018200c54ad7c200441d0376a41086a2903007c201d201854ad7c20044190386a41086a2903007c2020201d54ad7c200a202054ad7c420d868442137e201b42ffffffffffffff03837c221842ffffffffffffff0383220c3703884d20042018423388201742ffffffffffffff03837c22183703904d2004200a42ffffffffffffff0383221d3703a84d2004200f42ffffffffffffff038322203703a04d2004201342ffffffffffffff0383220a3703984d200441b0cd006a41086a2231201820187c370300200441b0cd006a41106a2224200a200a7c370300200441b0cd006a41186a2225202020207c370300200441b0cd006a41206a2226201d201d7c3703002004200c200c7c3703b04d20042903c04c211c20042903c84c211e20042903d04c211f20042903d84c212120042903b84c2122200420042903803f222320042903903f7c220c2004290380417c221820042903b0407c221d20042903e03f7c222020042903a03f223920042903f03f7c220a20042903f03e7c220b2004290390417c220d20042903c0407c220e200429038040223a20042903d0407c220f20042903b03f7c221020042903e03e7c221120042903a0417c221220042903e040223b20042903b0417c22132004290390407c221420042903c03f7c221520042903d03e7c221620042903c041223c20042903c03e7c221720042903f0407c221920042903a0407c221a20042903d03f7c221b423388200441c0c1006a41086a290300200441c03e6a41086a2903007c2017203c54ad7c200441f0c0006a41086a2903007c2019201754ad7c200441a0c0006a41086a2903007c201a201954ad7c200441d03f6a41086a2903007c201b201a54ad7c420d86847c2217423388200441e0c0006a41086a290300200441b0c1006a41086a2903007c2013203b54ad7c20044190c0006a41086a2903007c2014201354ad7c200441c03f6a41086a2903007c2015201454ad7c200441d03e6a41086a2903007c2016201554ad7c2017201654ad7c420d86847c221342338820044180c0006a41086a290300200441d0c0006a41086a2903007c200f203a54ad7c200441b03f6a41086a2903007c2010200f54ad7c200441e03e6a41086a2903007c2011201054ad7c200441a0c1006a41086a2903007c2012201154ad7c2013201254ad7c420d86847c220f423388200441a03f6a41086a290300200441f03f6a41086a2903007c200a203954ad7c200441f03e6a41086a2903007c200b200a54ad7c20044190c1006a41086a2903007c200d200b54ad7c200441c0c0006a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a423388200441803f6a41086a290300200441903f6a41086a2903007c200c202354ad7c20044180c1006a41086a2903007c2018200c54ad7c200441b0c0006a41086a2903007c201d201854ad7c200441e03f6a41086a2903007c2020201d54ad7c200a202054ad7c420d868442137e201b42ffffffffffffff03837c220c423388201742ffffffffffffff03837c220e3703884e2004200c42ffffffffffffff0383220b3703804e2004200a42ffffffffffffff0383220a3703a04e2004200f42ffffffffffffff0383220d3703984e2004201342ffffffffffffff0383220f3703904e2004200b20042903b84c7c3703804e2004200e20042903c04c7c3703884e2004200f20042903c84c7c3703904e2004200d20042903d04c7c3703984e2004200a20042903d84c7c3703a04e2002202629030037030020052025290300222037030020062024290300221d370300200720312903002218370300200420042903b04d220c3703a84e2004200c20042903e04c7c220c3703a84e2007201820042903e84c7c22183703002006201d20042903f04c7c221d3703002005202020042903f84c7c22123703002002200229030020042903804d7c2215370300200441f0276a202629030020042903804d7d42f0ffffffffffff3f7c221042338842137e20042903b04d20042903e04c7d42d0fdffffffffff3f7c221142ffffffffffffff03837c22204200200a20217d42f0ffffffffffff3f7c221342338842137e200b20227d42d0fdffffffffff3f7c221442ffffffffffffff03837c220a420010e80820044180356a201342ffffffffffffff0383200d201f7d42f0ffffffffffff3f7c220d4233887c220b4200203129030020042903e84c7d42f0ffffffffffff3f7c221642ffffffffffffff038320114233887c221342137e2223420010e80820044180346a200d42ffffffffffffff0383200f201e7d42f0ffffffffffff3f7c220f4233887c220d4200202429030020042903f04c7d42f0ffffffffffff3f7c221142ffffffffffffff038320164233887c221942137e221e420010e80820044180336a200f42ffffffffffffff0383200e201c7d42f0ffffffffffff3f7c220f4233887c220e4200202529030020042903f84c7d42f0ffffffffffff3f7c221642ffffffffffffff038320114233887c221c42137e221b420010e808200441d0266a200f42ffffffffffffff038320144233887c220f4200201042ffffffffffffff038320164233887c222142137e2216420010e808200441c0266a200f42002020420010e808200441e0276a200a42002013420010e808200441f0336a200b4200201e420010e808200441f0326a200d4200201b420010e80820044180326a200e42002016420010e80820044180316a200e42002020420010e808200441b0266a200f42002013420010e808200441d0276a200a42002019420010e808200441e0326a200b4200201b420010e808200441f0316a200d42002016420010e808200441f0306a200d42002020420010e808200441e0346a200e42002013420010e80820044180256a200f42002019420010e808200441c0276a200a4200201c420010e808200441e0316a200b42002016420010e808200441e0306a200b42002020420010e808200441d0346a200d42002013420010e808200441c0336a200e42002019420010e808200441d0236a200f4200201c420010e808200441b0276a200a42002021420010e808200441902b6a200c420020042903804e2210420010e808200441802d6a20042903a04e221a4200201842137e420010e808200441802e6a20042903984e22174200201d42137e2239420010e808200441802f6a20042903904e22144200201242137e2222420010e80820044180306a20042903884e22114200201542137e221f420010e808200441f02f6a20114200200c420010e808200441a02b6a201042002018420010e808200441f02c6a201a42002039420010e808200441f02d6a201742002022420010e808200441f02e6a20144200201f420010e808200441e02e6a20144200200c420010e808200441e02f6a201142002018420010e808200441b02b6a20104200201d420010e808200441e02c6a201a42002022420010e808200441e02d6a20174200201f420010e808200441d02d6a20174200200c420010e808200441d02e6a201442002018420010e808200441d02f6a20114200201d420010e808200441c02b6a201042002012420010e808200441d02c6a201a4200201f420010e808200441c02c6a201a4200200c420010e808200441c02d6a201742002018420010e808200441c02e6a20144200201d420010e808200441c02f6a201142002012420010e808200441d02b6a201042002015420010e808200441d0306a20204200200c420010e808200441f0346a201542002023420010e808200441e0336a20124200201e420010e808200441d0326a201d4200201b420010e808200441d0316a201842002016420010e808200441c0306a201842002020420010e808200441c0346a200c42002013420010e808200441d0336a20154200201e420010e808200441c0326a20124200201b420010e808200441c0316a201d42002016420010e808200441b0306a201d42002020420010e808200441b0346a201842002013420010e808200441b0336a200c42002019420010e808200441b0326a20154200201b420010e808200441b0316a201242002016420010e808200441a0306a201242002020420010e808200441a0346a201d42002013420010e808200441a0336a201842002019420010e808200441a0326a200c4200201c420010e808200441a0316a201542002016420010e80820044190306a201542002020420010e80820044190346a201242002013420010e80820044190336a201d42002019420010e80820044190326a20184200201c420010e80820044190316a200c42002021420010e808200441a0276a20104200200a420010e808200441902f6a200b4200201142137e420010e808200441a02e6a200d4200201442137e221d420010e808200441b02d6a200e4200201742137e2218420010e80820044190106a200f4200201a42137e220c420010e80820044180106a200f42002010420010e80820044190276a200a42002011420010e808200441902e6a200b4200201d420010e808200441a02d6a200d42002018420010e808200441b02c6a200e4200200c420010e808200441e02b6a200e42002010420010e808200441f00f6a200f42002011420010e80820044180276a200a42002014420010e808200441902d6a200b42002018420010e808200441a02c6a200d4200200c420010e808200441f02b6a200d42002010420010e808200441b02f6a200e42002011420010e808200441900f6a200f42002014420010e808200441f0266a200a42002017420010e808200441902c6a200b4200200c420010e808200441802c6a200b42002010420010e808200441a02f6a200d42002011420010e808200441b02e6a200e42002014420010e808200441b00e6a200f42002017420010e808200441e0266a200a4200201a420010e808200420042903e02c221320042903b02b7c220c20042903e02d7c221820042903e02e7c221d20042903e02f7c222020042903f02c221420042903a02b7c220a20042903f02d7c220b20042903f02e7c220d20042903f02f7c220e20042903802d221520042903902b7c220f20042903802e7c221020042903802f7c22112004290380307c2212423388200441802d6a41086a290300200441902b6a41086a2903007c200f201554ad7c200441802e6a41086a2903007c2010200f54ad7c200441802f6a41086a2903007c2011201054ad7c20044180306a41086a2903007c2012201154ad7c420d86847c220f423388200441f02c6a41086a290300200441a02b6a41086a2903007c200a201454ad7c200441f02d6a41086a2903007c200b200a54ad7c200441f02e6a41086a2903007c200d200b54ad7c200441f02f6a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a42ffffffffffffff038322173703c04d200420042903d02c221120042903c02b7c220b20042903d02d7c220d20042903d02e7c220e20042903d02f7c2210200a423388200441e02c6a41086a290300200441b02b6a41086a2903007c200c201354ad7c200441e02d6a41086a2903007c2018200c54ad7c200441e02e6a41086a2903007c201d201854ad7c200441e02f6a41086a2903007c2020201d54ad7c200a202054ad7c420d86847c220c42ffffffffffffff038322213703c84d200420042903c02c221320042903d02b7c221820042903c02d7c221d20042903c02e7c222020042903c02f7c220a200c423388200441d02c6a41086a290300200441c02b6a41086a2903007c200b201154ad7c200441d02d6a41086a2903007c200d200b54ad7c200441d02e6a41086a2903007c200e200d54ad7c200441d02f6a41086a2903007c2010200e54ad7c200c201054ad7c420d86847c220c42ffffffffffffff038322233703d04d2004200c423388200441c02c6a41086a290300200441d02b6a41086a2903007c2018201354ad7c200441c02d6a41086a2903007c201d201854ad7c200441c02e6a41086a2903007c2020201d54ad7c200441c02f6a41086a2903007c200a202054ad7c200c200a54ad7c420d868442137e201242ffffffffffffff03837c220c42ffffffffffffff038322143703b04d2004200c423388200f42ffffffffffffff03837c22153703b84d20044180286a20042903903022222004290390317c220c2004290390347c22182004290390337c221d2004290390327c222020042903a031223920042903a0327c220a20042903a0307c220b20042903a0347c220d20042903a0337c220e20042903b032223a20042903b0337c220f20042903b0317c221020042903b0307c221120042903b0347c221220042903d033223b20042903c0347c221320042903c0327c221620042903c0317c221920042903c0307c221a20042903f034223c20042903d0307c221b20042903e0337c221c20042903d0327c221e20042903d0317c221f423388200441f0346a41086a290300200441d0306a41086a2903007c201b203c54ad7c200441e0336a41086a2903007c201c201b54ad7c200441d0326a41086a2903007c201e201c54ad7c200441d0316a41086a2903007c201f201e54ad7c420d86847c221b423388200441d0336a41086a290300200441c0346a41086a2903007c2013203b54ad7c200441c0326a41086a2903007c2016201354ad7c200441c0316a41086a2903007c2019201654ad7c200441c0306a41086a2903007c201a201954ad7c201b201a54ad7c420d86847c2213423388200441b0326a41086a290300200441b0336a41086a2903007c200f203a54ad7c200441b0316a41086a2903007c2010200f54ad7c200441b0306a41086a2903007c2011201054ad7c200441b0346a41086a2903007c2012201154ad7c2013201254ad7c420d86847c220f423388200441a0316a41086a290300200441a0326a41086a2903007c200a203954ad7c200441a0306a41086a2903007c200b200a54ad7c200441a0346a41086a2903007c200d200b54ad7c200441a0336a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a42ffffffffffffff0383223d42f0ffffffffffff3f7c223e20237d221242338842137e200a42338820044190306a41086a29030020044190316a41086a2903007c200c202254ad7c20044190346a41086a2903007c2018200c54ad7c20044190336a41086a2903007c201d201854ad7c20044190326a41086a2903007c2020201d54ad7c200a202054ad7c420d868442137e201f42ffffffffffffff03837c222042ffffffffffffff0383223f42d0fdffffffffff3f7c224020147d220a42ffffffffffffff03837c220c4200203f20147c2218420010e808200441c0296a203d20237c221d42002020423388201b42ffffffffffffff03837c224142f0ffffffffffff3f7c224220157d220b42ffffffffffffff0383200a4233887c222042137e420010e808200441a02a6a200f42ffffffffffffff0383224320217c220a4200201342ffffffffffffff0383224442f0ffffffffffff3f7c224520177d220d42ffffffffffffff0383200b4233887c220e42137e2213420010e808200441b02a6a204420177c220b4200204342f0ffffffffffff3f7c224620217d220f42ffffffffffffff0383200d4233887c221042137e2211420010e808200441d0296a204120157c220d4200201242ffffffffffffff0383200f4233887c221242137e220f420010e80820044180296a200d4200200c420010e80820044190286a201842002020420010e808200441902a6a201d42002013420010e808200441e02a6a200a42002011420010e808200441c02a6a200b4200200f420010e808200441f0286a200b4200200c420010e808200441b0296a200d42002020420010e808200441a0286a20184200200e420010e808200441d02a6a201d42002011420010e808200441f02a6a200a4200200f420010e808200441e0286a200a4200200c420010e808200441a0296a200b42002020420010e808200441e0296a200d4200200e420010e808200441b0286a201842002010420010e808200441802b6a201d4200200f420010e808200441d0286a201d4200200c420010e80820044190296a200a42002020420010e808200441802a6a200b4200200e420010e808200441f0296a200d42002010420010e808200441c0286a201842002012420010e80820044180216a2014420020042903e030222220042903b0277c220c20042903d0347c221820042903c0337c221d20042903d0237c222020042903e031223920042903c0277c220a20042903f0307c220b20042903e0347c220d2004290380257c220e20042903e032223a20042903d0277c220f20042903f0317c22102004290380317c221120042903b0267c221220042903f033223b20042903e0277c221320042903f0327c22162004290380327c221920042903c0267c221a200429038035223c20042903f0277c221b2004290380347c221c2004290380337c221e20042903d0267c221f42338820044180356a41086a290300200441f0276a41086a2903007c201b203c54ad7c20044180346a41086a2903007c201c201b54ad7c20044180336a41086a2903007c201e201c54ad7c200441d0266a41086a2903007c201f201e54ad7c420d86847c221b423388200441f0336a41086a290300200441e0276a41086a2903007c2013203b54ad7c200441f0326a41086a2903007c2016201354ad7c20044180326a41086a2903007c2019201654ad7c200441c0266a41086a2903007c201a201954ad7c201b201a54ad7c420d86847c2213423388200441e0326a41086a290300200441d0276a41086a2903007c200f203a54ad7c200441f0316a41086a2903007c2010200f54ad7c20044180316a41086a2903007c2011201054ad7c200441b0266a41086a2903007c2012201154ad7c2013201254ad7c420d86847c220f423388200441e0316a41086a290300200441c0276a41086a2903007c200a203954ad7c200441f0306a41086a2903007c200b200a54ad7c200441e0346a41086a2903007c200d200b54ad7c20044180256a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a423388200441e0306a41086a290300200441b0276a41086a2903007c200c202254ad7c200441d0346a41086a2903007c2018200c54ad7c200441c0336a41086a2903007c201d201854ad7c200441d0236a41086a2903007c2020201d54ad7c200a202054ad7c420d868442137e201f42ffffffffffffff03837c220c42ffffffffffffff03832218420010e808200441b0226a200a42ffffffffffffff0383221d4200201542137e420010e808200441e0236a200f42ffffffffffffff038322204200201742137e220e420010e80820044190256a201342ffffffffffffff0383220a4200202142137e220d420010e808200441a0226a200c423388201b42ffffffffffffff03837c220b4200202342137e220c420010e80820044190226a200b42002014420010e808200441f0206a201842002015420010e808200441c0226a201d4200200e420010e808200441f0236a20204200200d420010e808200441a0256a200a4200200c420010e808200441b0256a200a42002014420010e80820044180226a200b42002015420010e808200441e0206a201842002017420010e808200441d0226a201d4200200d420010e80820044180246a20204200200c420010e80820044190246a202042002014420010e808200441c0256a200a42002015420010e808200441f0216a200b42002017420010e808200441d0206a201842002021420010e808200441e0226a201d4200200c420010e808200441f0226a201d42002014420010e808200441a0246a202042002015420010e808200441d0256a200a42002017420010e808200441e0216a200b42002021420010e808200441c0206a201842002023420010e808200420042903d022221c20042903e0207c220c2004290380247c220d20042903b0257c220e2004290380227c220f20042903c022221e20042903f0207c221020042903f0237c221120042903a0257c22122004290390227c221320042903b022221f2004290380217c221620042903e0237c22192004290390257c221a20042903a0227c221b423388200441b0226a41086a29030020044180216a41086a2903007c2016201f54ad7c200441e0236a41086a2903007c2019201654ad7c20044190256a41086a2903007c201a201954ad7c200441a0226a41086a2903007c201b201a54ad7c420d86847c2216423388200441c0226a41086a290300200441f0206a41086a2903007c2010201e54ad7c200441f0236a41086a2903007c2011201054ad7c200441a0256a41086a2903007c2012201154ad7c20044190226a41086a2903007c2013201254ad7c2016201354ad7c420d86847c221042ffffffffffffff03833703904e200420042903e022221a20042903d0207c22112004290390247c221220042903c0257c221320042903f0217c22192010423388200441d0226a41086a290300200441e0206a41086a2903007c200c201c54ad7c20044180246a41086a2903007c200d200c54ad7c200441b0256a41086a2903007c200e200d54ad7c20044180226a41086a2903007c200f200e54ad7c2010200f54ad7c420d86847c220c42ffffffffffffff03833703984e200420042903f022221c20042903c0207c220d20042903a0247c220e20042903d0257c220f20042903e0217c2210200c423388200441e0226a41086a290300200441d0206a41086a2903007c2011201a54ad7c20044190246a41086a2903007c2012201154ad7c200441c0256a41086a2903007c2013201254ad7c200441f0216a41086a2903007c2019201354ad7c200c201954ad7c420d86847c220c42ffffffffffffff03833703a04e2004200c423388200441f0226a41086a290300200441c0206a41086a2903007c200d201c54ad7c200441a0246a41086a2903007c200e200d54ad7c200441d0256a41086a2903007c200f200e54ad7c200441e0216a41086a2903007c2010200f54ad7c200c201054ad7c420d868442137e201b42ffffffffffffff03837c220c42ffffffffffffff03833703804e2004200c423388201642ffffffffffffff03837c3703884e20044190286a41086a2903002147200441902a6a41086a2903002148200429039028213b20042903902a210c200441e02a6a41086a290300214920042903e02a213c200441c02a6a41086a290300214a20042903c02a214b20044180296a41086a290300214c200429038029214d20044180286a41086a290300214e200441c0296a41086a290300214f200429038028215020042903c029210d200441a02a6a41086a290300215120042903a02a2152200441b02a6a41086a290300215320042903b02a2154200441d0296a41086a290300215520042903d029215620042903d02a210f20042903a028211f20042903f02a212220042903f028213920042903b029213a200441d02a6a41086a2903002157200441a0286a41086a2903002158200441f02a6a41086a2903002159200441f0286a41086a290300215a200441b0296a41086a290300215b20042903802b211020042903b028211a20042903e028211b20042903a029211c20042903e029211e200441802b6a41086a290300215c200441b0286a41086a290300215d200441e0286a41086a290300215e200441a0296a41086a290300215f200441e0296a41086a290300216020042903c028211220042903d0282111200429039029211320042903802a211620042903f0292119200441c0286a41086a2903002161200441d0286a41086a290300216220044190296a41086a2903002163200441802a6a41086a2903002164200441f0296a41086a290300216520044188c9006a20044180ce006a4101106e200441e01c6a200429038849220e4200201920162013201120127c22127c22137c22167c2219201e201c201b2010201a7c221a7c221b7c221c7c221e203a20392022200f201f7c221f7c22227c22397c223a204d204b203c200c203b7c223b7c223c7c224b7c224d205620542052200d20507c22507c22527c22547c2256423388205520532051204f204e7c2050200d54ad7c7c2052205054ad7c7c2054205254ad7c7c2056205454ad7c420d86847c220d423388204c204a2049204820477c203b200c54ad7c7c203c203b54ad7c7c204b203c54ad7c7c204d204b54ad7c200d204d54ad7c420d86847c223b423388205b205a2059205720587c201f200f54ad7c7c2022201f54ad7c7c2039202254ad7c7c203a203954ad7c203b203a54ad7c420d86847c221f4233882060205f205e205c205d7c201a201054ad7c7c201b201a54ad7c7c201c201b54ad7c7c201e201c54ad7c201f201e54ad7c420d86847c220f423388206520642063206220617c2012201154ad7c7c2013201254ad7c7c2016201354ad7c7c2019201654ad7c200f201954ad7c420d868442137e205642ffffffffffffff03837c221142ffffffffffffff0383220c420010e808200441e01f6a200f42ffffffffffffff038322194200200429039049220f42137e420010e808200441901f6a201f42ffffffffffffff038322164200200429039849221042137e221b420010e808200441c01e6a203b42ffffffffffffff03832213420020042903a049221242137e221a420010e808200441f01d6a2011423388200d42ffffffffffffff03837c220d420020042903a849221c42137e2211420010e808200441f01c6a200d4200200e420010e808200441d01f6a200c4200200f420010e808200441801f6a20194200201b420010e808200441b01e6a20164200201a420010e808200441e01d6a201342002011420010e808200441801d6a20134200200e420010e808200441c01f6a200d4200200f420010e808200441f01e6a200c42002010420010e808200441a01e6a20194200201a420010e808200441d01d6a201642002011420010e808200441901d6a20164200200e420010e808200441b01f6a20134200200f420010e808200441e01e6a200d42002010420010e808200441901e6a200c42002012420010e808200441c01d6a201942002011420010e808200441a01d6a20194200200e420010e808200441a01f6a20164200200f420010e808200441d01e6a201342002010420010e808200441801e6a200d42002012420010e808200441b01d6a200c4200201c420010e808200420042903a01e223a20042903f01e7c220e20042903d01d7c220f20042903801d7c221020042903c01f7c221120042903801f223b20042903d01f7c221220042903b01e7c221a20042903e01d7c221b20042903f01c7c221c20042903e01f223c20042903e01c7c221e20042903901f7c221f20042903c01e7c222220042903f01d7c2239423388200441e01f6a41086a290300200441e01c6a41086a2903007c201e203c54ad7c200441901f6a41086a2903007c201f201e54ad7c200441c01e6a41086a2903007c2022201f54ad7c200441f01d6a41086a2903007c2039202254ad7c420d86847c221e423388200441801f6a41086a290300200441d01f6a41086a2903007c2012203b54ad7c200441b01e6a41086a2903007c201a201254ad7c200441e01d6a41086a2903007c201b201a54ad7c200441f01c6a41086a2903007c201c201b54ad7c201e201c54ad7c420d86847c221242ffffffffffffff03833703b84e200420042903c01d222220042903901e7c221a20042903901d7c221b20042903b01f7c221c20042903e01e7c221f2012423388200441a01e6a41086a290300200441f01e6a41086a2903007c200e203a54ad7c200441d01d6a41086a2903007c200f200e54ad7c200441801d6a41086a2903007c2010200f54ad7c200441c01f6a41086a2903007c2011201054ad7c2012201154ad7c420d86847c220e42ffffffffffffff03833703c04e200420042903a01d223a20042903b01d7c220f20042903a01f7c221020042903d01e7c221120042903801e7c2212200e423388200441c01d6a41086a290300200441901e6a41086a2903007c201a202254ad7c200441901d6a41086a2903007c201b201a54ad7c200441b01f6a41086a2903007c201c201b54ad7c200441e01e6a41086a2903007c201f201c54ad7c200e201f54ad7c420d86847c220e42ffffffffffffff03833703c84e2004200e423388200441a01d6a41086a290300200441b01d6a41086a2903007c200f203a54ad7c200441a01f6a41086a2903007c2010200f54ad7c200441d01e6a41086a2903007c2011201054ad7c200441801e6a41086a2903007c2012201154ad7c200e201254ad7c420d868442137e203942ffffffffffffff03837c220e42ffffffffffffff03833703a84e2004200e423388201e42ffffffffffffff03837c3703b04e200441f0ca006a41106a4200370300200441f0ca006a41186a4200370300200441f0ca006a41206a4200370300200442003703f84a200442013703f04a200441d0c6006a200441f0ca006a200441a8ce006a106f200441c0146a200c420020042903d846220e420010e808200441e0156a200441d0c6006a41286a290300220f4200200d42137e420010e80820044180176a200929030022104200201342137e221c420010e808200441a0186a200829030022114200201642137e221b420010e808200441c0196a200329030022124200201942137e221a420010e808200441b0196a20124200200c420010e808200441b0146a200e4200200d420010e808200441d0156a200f4200201c420010e808200441f0166a20104200201b420010e80820044190186a20114200201a420010e80820044180186a20114200200c420010e808200441a0196a20124200200d420010e808200441a0146a200e42002013420010e808200441c0156a200f4200201b420010e808200441e0166a20104200201a420010e808200441d0166a20104200200c420010e808200441f0176a20114200200d420010e80820044190196a201242002013420010e808200441c0136a200e42002016420010e808200441b0156a200f4200201a420010e808200441a0156a200f4200200c420010e808200441c0166a20104200200d420010e808200441e0176a201142002013420010e80820044180196a201242002016420010e808200441e0126a200e42002019420010e80820044180126a20042903804e220c4200200e420010e80820044190156a200f420020042903884e220d42137e420010e808200441b0166a2010420020042903904e221342137e221b420010e808200441d0176a2011420020042903984e221942137e221a420010e808200441f0186a2012420020042903a04e221c42137e2216420010e808200441e0186a20124200200c420010e808200441f0116a200e4200200d420010e80820044180156a200f4200201b420010e808200441a0166a20104200201a420010e808200441c0176a201142002016420010e808200441b0176a20114200200c420010e808200441d0186a20124200200d420010e808200441e0116a200e42002013420010e808200441f0146a200f4200201a420010e80820044190166a201042002016420010e80820044180166a20104200200c420010e808200441a0176a20114200200d420010e808200441c0186a201242002013420010e808200441d0116a200e42002019420010e808200441e0146a200f42002016420010e808200441d0146a200f4200200c420010e808200441f0156a20104200200d420010e80820044190176a201142002013420010e808200441b0186a201242002019420010e808200441c0116a200e4200201c420010e808200441c00d6a20042903802c224b20042903e0267c220c20042903a02f7c220d20042903b02e7c220e20042903b00e7c220f20042903902c224d20042903f0267c221020042903f02b7c221120042903b02f7c221220042903900f7c221320042903902d22502004290380277c221620042903a02c7c221920042903e02b7c221a20042903f00f7c221b20042903902e22522004290390277c221c20042903a02d7c221e20042903b02c7c221f2004290380107c222220042903902f225420042903a0277c223920042903a02e7c223a20042903b02d7c223b2004290390107c223c423388200441902f6a41086a290300200441a0276a41086a2903007c2039205454ad7c200441a02e6a41086a2903007c203a203954ad7c200441b02d6a41086a2903007c203b203a54ad7c20044190106a41086a2903007c203c203b54ad7c420d86847c2239423388200441902e6a41086a29030020044190276a41086a2903007c201c205254ad7c200441a02d6a41086a2903007c201e201c54ad7c200441b02c6a41086a2903007c201f201e54ad7c20044180106a41086a2903007c2022201f54ad7c2039202254ad7c420d86847c221e423388200441902d6a41086a29030020044180276a41086a2903007c2016205054ad7c200441a02c6a41086a2903007c2019201654ad7c200441e02b6a41086a2903007c201a201954ad7c200441f00f6a41086a2903007c201b201a54ad7c201e201b54ad7c420d86847c2216423388200441902c6a41086a290300200441f0266a41086a2903007c2010204d54ad7c200441f02b6a41086a2903007c2011201054ad7c200441b02f6a41086a2903007c2012201154ad7c200441900f6a41086a2903007c2013201254ad7c2016201354ad7c420d86847c2210423388200441802c6a41086a290300200441e0266a41086a2903007c200c204b54ad7c200441a02f6a41086a2903007c200d200c54ad7c200441b02e6a41086a2903007c200e200d54ad7c200441b00e6a41086a2903007c200f200e54ad7c2010200f54ad7c420d868442137e203c42ffffffffffffff03837c225642ffffffffffffff0383220d420020042903d014224720042903c0117c220c20042903f0157c220e2004290390177c220f20042903b0187c221120042903e014224820042903d0117c22122004290380167c221320042903a0177c221920042903c0187c221a20042903f014224920042903e0117c221b2004290390167c221c20042903b0177c221f20042903d0187c2222200429038015224a20042903f0117c223a20042903a0167c223b20042903c0177c223c20042903e0187c224b200429039015224c2004290380127c224d20042903b0167c225020042903d0177c225220042903f0187c225442338820044190156a41086a29030020044180126a41086a2903007c204d204c54ad7c200441b0166a41086a2903007c2050204d54ad7c200441d0176a41086a2903007c2052205054ad7c200441f0186a41086a2903007c2054205254ad7c420d86847c224d42338820044180156a41086a290300200441f0116a41086a2903007c203a204a54ad7c200441a0166a41086a2903007c203b203a54ad7c200441c0176a41086a2903007c203c203b54ad7c200441e0186a41086a2903007c204b203c54ad7c204d204b54ad7c420d86847c223a423388200441f0146a41086a290300200441e0116a41086a2903007c201b204954ad7c20044190166a41086a2903007c201c201b54ad7c200441b0176a41086a2903007c201f201c54ad7c200441d0186a41086a2903007c2022201f54ad7c203a202254ad7c420d86847c221c423388200441e0146a41086a290300200441d0116a41086a2903007c2012204854ad7c20044180166a41086a2903007c2013201254ad7c200441a0176a41086a2903007c2019201354ad7c200441c0186a41086a2903007c201a201954ad7c201c201a54ad7c420d86847c2212423388200441d0146a41086a290300200441c0116a41086a2903007c200c204754ad7c200441f0156a41086a2903007c200e200c54ad7c20044190176a41086a2903007c200f200e54ad7c200441b0186a41086a2903007c2011200f54ad7c2012201154ad7c420d868442137e205442ffffffffffffff03837c220c42ffffffffffffff0383221a420010e808200441900e6a201242ffffffffffffff0383221b42002056423388203942ffffffffffffff03837c220e42137e420010e808200441b00f6a201c42ffffffffffffff0383221c4200201e42ffffffffffffff0383221342137e2211420010e808200441e00e6a203a42ffffffffffffff0383221e4200201642ffffffffffffff0383221642137e220f420010e808200441f00c6a200c423388204d42ffffffffffffff03837c221f4200201042ffffffffffffff0383221942137e220c420010e808200441b00d6a201f4200200d420010e808200441800e6a201a4200200e420010e808200441a00f6a201b42002011420010e808200441d00e6a201c4200200f420010e808200441e00c6a201e4200200c420010e808200441a00d6a201e4200200d420010e808200441f00d6a201f4200200e420010e808200441c00f6a201a42002013420010e808200441c00e6a201b4200200f420010e808200441d00c6a201c4200200c420010e808200441900d6a201c4200200d420010e808200441e00d6a201e4200200e420010e808200441d00f6a201f42002013420010e808200441f00e6a201a42002016420010e808200441f00b6a201b4200200c420010e808200441800d6a201b4200200d420010e808200441d00d6a201c4200200e420010e808200441e00f6a201e42002013420010e808200441800f6a201f42002016420010e808200441a00e6a201a42002019420010e808200441b00a6a20042903800d224c20042903a00e7c220c20042903d00d7c220f20042903e00f7c221020042903800f7c221120042903f00b224e20042903f00e7c221220042903900d7c222220042903e00d7c223920042903d00f7c223a20042903c00e224f20042903c00f7c223b20042903d00c7c223c20042903a00d7c224b20042903f00d7c224d20042903a00f225120042903800e7c225020042903d00e7c225220042903e00c7c225420042903b00d7c225620042903900e225320042903c00d7c224720042903b00f7c224820042903e00e7c224920042903f00c7c224a423388200441900e6a41086a290300200441c00d6a41086a2903007c2047205354ad7c200441b00f6a41086a2903007c2048204754ad7c200441e00e6a41086a2903007c2049204854ad7c200441f00c6a41086a2903007c204a204954ad7c420d86847c2247423388200441a00f6a41086a290300200441800e6a41086a2903007c2050205154ad7c200441d00e6a41086a2903007c2052205054ad7c200441e00c6a41086a2903007c2054205254ad7c200441b00d6a41086a2903007c2056205454ad7c2047205654ad7c420d86847c2250423388200441c00e6a41086a290300200441c00f6a41086a2903007c203b204f54ad7c200441d00c6a41086a2903007c203c203b54ad7c200441a00d6a41086a2903007c204b203c54ad7c200441f00d6a41086a2903007c204d204b54ad7c2050204d54ad7c420d86847c223b423388200441f00b6a41086a290300200441f00e6a41086a2903007c2012204e54ad7c200441900d6a41086a2903007c2022201254ad7c200441e00d6a41086a2903007c2039202254ad7c200441d00f6a41086a2903007c203a203954ad7c203b203a54ad7c420d86847c223c423388200441800d6a41086a290300200441a00e6a41086a2903007c200c204c54ad7c200441d00d6a41086a2903007c200f200c54ad7c200441e00f6a41086a2903007c2010200f54ad7c200441800f6a41086a2903007c2011201054ad7c203c201154ad7c420d868442137e204a42ffffffffffffff03837c225542ffffffffffffff03832222420020042903a015225720042903e0127c220c20042903c0167c220f20042903e0177c22102004290380197c221120042903b015225820042903c0137c221220042903d0167c223920042903f0177c223a2004290390197c224b20042903c015225920042903a0147c224d20042903e0167c22522004290380187c225420042903a0197c225620042903d015225a20042903b0147c224820042903f0167c22492004290390187c224a20042903b0197c224c20042903e015225b20042903c0147c224e2004290380177c224f20042903a0187c225120042903c0197c2253423388200441e0156a41086a290300200441c0146a41086a2903007c204e205b54ad7c20044180176a41086a2903007c204f204e54ad7c200441a0186a41086a2903007c2051204f54ad7c200441c0196a41086a2903007c2053205154ad7c420d86847c224e423388200441d0156a41086a290300200441b0146a41086a2903007c2048205a54ad7c200441f0166a41086a2903007c2049204854ad7c20044190186a41086a2903007c204a204954ad7c200441b0196a41086a2903007c204c204a54ad7c204e204c54ad7c420d86847c2248423388200441c0156a41086a290300200441a0146a41086a2903007c204d205954ad7c200441e0166a41086a2903007c2052204d54ad7c20044180186a41086a2903007c2054205254ad7c200441a0196a41086a2903007c2056205454ad7c2048205654ad7c420d86847c224d423388200441b0156a41086a290300200441c0136a41086a2903007c2012205854ad7c200441d0166a41086a2903007c2039201254ad7c200441f0176a41086a2903007c203a203954ad7c20044190196a41086a2903007c204b203a54ad7c204d204b54ad7c420d86847c2212423388200441a0156a41086a290300200441e0126a41086a2903007c200c205754ad7c200441c0166a41086a2903007c200f200c54ad7c200441e0176a41086a2903007c2010200f54ad7c20044180196a41086a2903007c2011201054ad7c2012201154ad7c420d868442137e205342ffffffffffffff03837c225242ffffffffffffff0383220c420010e808200441800b6a201242ffffffffffffff0383220f42002055423388204742ffffffffffffff03837c223942137e420010e808200441900c6a204d42ffffffffffffff038322104200205042ffffffffffffff0383223a42137e2250420010e808200441b00b6a204842ffffffffffffff038322114200203b42ffffffffffffff0383224b42137e224d420010e808200441e0096a2052423388204e42ffffffffffffff03837c22124200203c42ffffffffffffff0383223c42137e223b420010e808200441a00a6a201242002022420010e808200441f00a6a200c42002039420010e808200441800c6a200f42002050420010e808200441a00b6a20104200204d420010e808200441d0096a20114200203b420010e808200441900a6a201142002022420010e808200441e00a6a201242002039420010e808200441a00c6a200c4200203a420010e808200441900b6a200f4200204d420010e808200441c0096a20104200203b420010e808200441800a6a201042002022420010e808200441d00a6a201142002039420010e808200441b00c6a20124200203a420010e808200441c00b6a200c4200204b420010e808200441e0086a200f4200203b420010e808200441f0096a200f42002022420010e808200441c00a6a201042002039420010e808200441c00c6a20114200203a420010e808200441d00b6a20124200204b420010e808200441e00b6a200c4200203c420010e808200441b0206a2018420042b0c1bad0f4e48603420010e80820044180236a201d420042a7a7fbf49beaf607420010e808200441b0246a2020420042a0d69f90da80b1cb00420010e808200441e0256a200a420042badf96dcb5c3bac700420010e808200441d0216a200b420042a7ecfac2b5f7ea19420010e808200441c0216a200b420042b0c1bad0f4e48603420010e808200441a0206a20184200429db1bce4dfb435420010e80820044190236a201d420042a0d69f90da80b1cb00420010e808200441c0246a2020420042badf96dcb5c3bac700420010e808200441f0256a200a420042a7ecfac2b5f7ea19420010e80820044180266a200a420042b0c1bad0f4e48603420010e808200441b0216a200b4200429db1bce4dfb435420010e80820044190206a2018420042e098f4e5e9ebfb03420010e808200441a0236a201d420042badf96dcb5c3bac700420010e808200441d0246a2020420042a7ecfac2b5f7ea19420010e808200441e0246a2020420042b0c1bad0f4e48603420010e80820044190266a200a4200429db1bce4dfb435420010e808200441a0216a200b420042e098f4e5e9ebfb03420010e80820044180206a20184200429e9981b4dab2e103420010e808200441b0236a201d420042a7ecfac2b5f7ea19420010e808200441c0236a201d420042b0c1bad0f4e48603420010e808200441f0246a20204200429db1bce4dfb435420010e808200441a0266a200a420042e098f4e5e9ebfb03420010e80820044190216a200b4200429e9981b4dab2e103420010e808200441f01f6a20184200429df893c0a486ae01420010e808200441901a6a20042903b04d2222420042b0c1bad0f4e48603420010e808200441e01a6a20042903d04d2239420042a7a7fbf49beaf607420010e808200441b01b6a20042903c84d223a420042a0d69f90da80b1cb00420010e808200441801c6a20042903c04d223b420042badf96dcb5c3bac700420010e808200441d01c6a20042903b84d223c420042a7ecfac2b5f7ea19420010e808200441c01c6a203c420042b0c1bad0f4e48603420010e808200441801a6a20224200429db1bce4dfb435420010e808200441d01a6a2039420042a0d69f90da80b1cb00420010e808200441a01b6a203a420042badf96dcb5c3bac700420010e808200441f01b6a203b420042a7ecfac2b5f7ea19420010e808200441e01b6a203b420042b0c1bad0f4e48603420010e808200441b01c6a203c4200429db1bce4dfb435420010e808200441f0196a2022420042e098f4e5e9ebfb03420010e808200441c01a6a2039420042badf96dcb5c3bac700420010e808200441901b6a203a420042a7ecfac2b5f7ea19420010e808200441801b6a203a420042b0c1bad0f4e48603420010e808200441d01b6a203b4200429db1bce4dfb435420010e808200441a01c6a203c420042e098f4e5e9ebfb03420010e808200441e0196a20224200429e9981b4dab2e103420010e808200441b01a6a2039420042a7ecfac2b5f7ea19420010e808200441a01a6a2039420042b0c1bad0f4e48603420010e808200441f01a6a203a4200429db1bce4dfb435420010e808200441c01b6a203b420042e098f4e5e9ebfb03420010e808200441901c6a203c4200429e9981b4dab2e103420010e808200441d0196a20224200429df893c0a486ae01420010e808200441e0106a200c420042ea81f582a8b53f420010e808200441d0126a200f420042bbda9284b7cbdd1b420010e808200441b0136a201042004288f5a7f5b28623420010e80820044190146a2011420042edd5d7bc83fb803c420010e808200441b0116a2012420042edc19ab7ab9cc0c700420010e808200441a0116a2012420042ea81f582a8b53f420010e808200441d0106a200c420042b9a6dff282e9ba01420010e808200441c0126a200f42004288f5a7f5b28623420010e808200441a0136a2010420042edd5d7bc83fb803c420010e80820044180146a2011420042edc19ab7ab9cc0c700420010e808200441f0136a2011420042ea81f582a8b53f420010e80820044190116a2012420042b9a6dff282e9ba01420010e808200441c0106a200c420042d8f8d29390ec01420010e808200441b0126a200f420042edd5d7bc83fb803c420010e80820044190136a2010420042edc19ab7ab9cc0c700420010e80820044180136a2010420042ea81f582a8b53f420010e808200441e0136a2011420042b9a6dff282e9ba01420010e80820044180116a2012420042d8f8d29390ec01420010e808200441b0106a200c420042ff91f789b6a19403420010e808200441a0126a200f420042edc19ab7ab9cc0c700420010e80820044190126a200f420042ea81f582a8b53f420010e808200441f0126a2010420042b9a6dff282e9ba01420010e808200441d0136a2011420042d8f8d29390ec01420010e808200441f0106a2012420042ff91f789b6a19403420010e808200441a0106a200c420042fff5f38289d9e103420010e808200441a0076a20042903f009224c20042903e00b7c220c20042903c00a7c220f20042903c00c7c221020042903d00b7c221120042903e008224e20042903c00b7c221220042903800a7c222220042903d00a7c223920042903b00c7c223a20042903900b224f20042903a00c7c223b20042903c0097c223c20042903900a7c224b20042903e00a7c224d20042903800c225120042903f00a7c225020042903a00b7c225220042903d0097c225420042903a00a7c225620042903800b225320042903b00a7c224720042903900c7c224820042903b00b7c224920042903e0097c224a423388200441800b6a41086a290300200441b00a6a41086a2903007c2047205354ad7c200441900c6a41086a2903007c2048204754ad7c200441b00b6a41086a2903007c2049204854ad7c200441e0096a41086a2903007c204a204954ad7c420d86847c2247423388200441800c6a41086a290300200441f00a6a41086a2903007c2050205154ad7c200441a00b6a41086a2903007c2052205054ad7c200441d0096a41086a2903007c2054205254ad7c200441a00a6a41086a2903007c2056205454ad7c2047205654ad7c420d86847c2250423388200441900b6a41086a290300200441a00c6a41086a2903007c203b204f54ad7c200441c0096a41086a2903007c203c203b54ad7c200441900a6a41086a2903007c204b203c54ad7c200441e00a6a41086a2903007c204d204b54ad7c2050204d54ad7c420d86847c223b423388200441e0086a41086a290300200441c00b6a41086a2903007c2012204e54ad7c200441800a6a41086a2903007c2022201254ad7c200441d00a6a41086a2903007c2039202254ad7c200441b00c6a41086a2903007c203a203954ad7c203b203a54ad7c420d86847c223a423388200441f0096a41086a290300200441e00b6a41086a2903007c200c204c54ad7c200441c00a6a41086a2903007c200f200c54ad7c200441c00c6a41086a2903007c2010200f54ad7c200441d00b6a41086a2903007c2011201054ad7c203a201154ad7c420d868442137e204a42ffffffffffffff03837c220c42ffffffffffffff0383220f4200200d420010e808200441f0076a20194200200c423388204742ffffffffffffff03837c221042137e225e420010e80820044180096a20164200205042ffffffffffffff0383221242137e2250420010e808200441a0086a20134200203b42ffffffffffffff0383223942137e2222420010e808200441d0066a200e4200203a42ffffffffffffff0383225242137e2211420010e80820044190076a200e4200200f420010e808200441e0076a200d42002010420010e808200441f0086a201942002050420010e80820044190086a201642002022420010e808200441c0066a201342002011420010e80820044180076a20134200200f420010e808200441d0076a200e42002010420010e80820044190096a200d42002012420010e80820044180086a201942002022420010e808200441b0066a201642002011420010e808200441f0066a20164200200f420010e808200441c0076a201342002010420010e808200441a0096a200e42002012420010e808200441b0086a200d42002039420010e808200441a0066a201942002011420010e808200441e0066a20194200200f420010e808200441b0076a201642002010420010e808200441b0096a201342002012420010e808200441c0086a200e42002039420010e808200441d0086a200d42002052420010e8082004200429038008224c2004290390097c220c20042903b0067c223a2004290380077c223b20042903d0077c223c20042903f008224e20042903e0077c224b2004290390087c224d20042903c0067c22542004290390077c225620042903f007224f20042903a0077c22472004290380097c224820042903a0087c224920042903d0067c224a423388200441f0076a41086a290300200441a0076a41086a2903007c2047204f54ad7c20044180096a41086a2903007c2048204754ad7c200441a0086a41086a2903007c2049204854ad7c200441d0066a41086a2903007c204a204954ad7c420d86847c2247423388200441f0086a41086a290300200441e0076a41086a2903007c204b204e54ad7c20044190086a41086a2903007c204d204b54ad7c200441c0066a41086a2903007c2054204d54ad7c20044190076a41086a2903007c2056205454ad7c2047205654ad7c420d86847c224b42ffffffffffffff03833703e046200420042903a006224920042903b0087c224d20042903f0067c225420042903c0077c225620042903a0097c2248204b42338820044180086a41086a29030020044190096a41086a2903007c200c204c54ad7c200441b0066a41086a2903007c203a200c54ad7c20044180076a41086a2903007c203b203a54ad7c200441d0076a41086a2903007c203c203b54ad7c204b203c54ad7c420d86847c220c42ffffffffffffff03833703e846200420042903e006224c20042903d0087c223a20042903b0077c223b20042903b0097c223c20042903c0087c224b200c423388200441a0066a41086a290300200441b0086a41086a2903007c204d204954ad7c200441f0066a41086a2903007c2054204d54ad7c200441c0076a41086a2903007c2056205454ad7c200441a0096a41086a2903007c2048205654ad7c200c204854ad7c420d86847c220c42ffffffffffffff03833703f0462004200c423388200441e0066a41086a290300200441d0086a41086a2903007c203a204c54ad7c200441b0076a41086a2903007c203b203a54ad7c200441b0096a41086a2903007c203c203b54ad7c200441c0086a41086a2903007c204b203c54ad7c200c204b54ad7c420d868442137e204a42ffffffffffffff03837c220c42ffffffffffffff03833703d0462004200c423388204742ffffffffffffff03837c3703d84620044190236a41086a290300215f200441a0206a41086a2903002160200429039023210c20042903a0202155200441c0246a41086a290300216120042903c0242157200441f0256a41086a290300216220042903f0252158200441c0216a41086a290300216320042903c021215920044180236a41086a2903002164200441b0206a41086a2903002165200429038023213a20042903b020215a200441b0246a41086a290300216620042903b024215b200441e0256a41086a290300216720042903e025215c200441d0216a41086a290300216820042903d021215d20042903a023213b200429039020214e20042903d024214f200429038026215120042903b0212153200441a0236a41086a290300216920044190206a41086a290300216a200441d0246a41086a290300216b20044180266a41086a290300216c200441b0216a41086a290300216d20042903b023213c200429038020214820042903e0242149200429039026214a20042903a021214c200441b0236a41086a290300216e20044180206a41086a290300216f200441e0246a41086a290300217020044190266a41086a2903002171200441a0216a41086a290300217220042903c023214b20042903f01f214d20042903f024215420042903a02621562004290390212147200441c0236a41086a2903002173200441f01f6a41086a2903002174200441f0246a41086a2903002175200441a0266a41086a290300217620044190216a41086a2903002177200441a8ca006a200441d0c6006a106b20042d00a84a410171106d2102200420042903b04d2278204720562054204b204d7c224d7c22547c22567c2247204c204a2049203c20487c22487c22497c224a7c224c20532051204f203b204e7c224e7c224f7c22517c2253205920582057200c20557c22557c22577c22587c2259205d205c205b203a205a7c225a7c225b7c225c7c225d423388206820672066206420657c205a203a54ad7c7c205b205a54ad7c7c205c205b54ad7c7c205d205c54ad7c420d86847c223a423388206320622061205f20607c2055200c54ad7c7c2057205554ad7c7c2058205754ad7c7c2059205854ad7c203a205954ad7c420d86847c2255423388206d206c206b2069206a7c204e203b54ad7c7c204f204e54ad7c7c2051204f54ad7c7c2053205154ad7c2055205354ad7c420d86847c223b423388207220712070206e206f7c2048203c54ad7c7c2049204854ad7c7c204a204954ad7c7c204c204a54ad7c203b204c54ad7c420d86847c223c423388207720762075207320747c204d204b54ad7c7c2054204d54ad7c7c2056205454ad7c7c2047205654ad7c203c204754ad7c420d868442137e205d42ffffffffffffff03837c224b42ffffffffffffff03838542002002ad42ff01837d220c832078853703b04d200420042903b84d224d204b423388203a42ffffffffffffff03837c85200c83204d853703b84d200420042903c04d223a205542ffffffffffffff038385200c83203a853703c04d200420042903c84d223a203b42ffffffffffffff038385200c83203a853703c84d200420042903d04d223a203c42ffffffffffffff038385200c83203a853703d04d20044190066a200f4200201820042903a01a225a20042903d0197c223a20042903f01a7c223b20042903c01b7c223c20042903901c7c224b20042903b01a225b20042903e0197c224d20042903801b7c225420042903d01b7c225620042903a01c7c224720042903c01a225c20042903f0197c224820042903901b7c224920042903e01b7c224a20042903b01c7c224c20042903d01a225d20042903801a7c224e20042903a01b7c224f20042903f01b7c225120042903c01c7c225320042903e01a225f20042903901a7c225520042903b01b7c225720042903801c7c225820042903d01c7c2259423388200441e01a6a41086a290300200441901a6a41086a2903007c2055205f54ad7c200441b01b6a41086a2903007c2057205554ad7c200441801c6a41086a2903007c2058205754ad7c200441d01c6a41086a2903007c2059205854ad7c420d86847c2255423388200441d01a6a41086a290300200441801a6a41086a2903007c204e205d54ad7c200441a01b6a41086a2903007c204f204e54ad7c200441f01b6a41086a2903007c2051204f54ad7c200441c01c6a41086a2903007c2053205154ad7c2055205354ad7c420d86847c224e423388200441c01a6a41086a290300200441f0196a41086a2903007c2048205c54ad7c200441901b6a41086a2903007c2049204854ad7c200441e01b6a41086a2903007c204a204954ad7c200441b01c6a41086a2903007c204c204a54ad7c204e204c54ad7c420d86847c2248423388200441b01a6a41086a290300200441e0196a41086a2903007c204d205b54ad7c200441801b6a41086a2903007c2054204d54ad7c200441d01b6a41086a2903007c2056205454ad7c200441a01c6a41086a2903007c2047205654ad7c2048204754ad7c420d86847c224d423388200441a01a6a41086a290300200441d0196a41086a2903007c203a205a54ad7c200441f01a6a41086a2903007c203b203a54ad7c200441c01b6a41086a2903007c203c203b54ad7c200441901c6a41086a2903007c204b203c54ad7c204d204b54ad7c420d868442137e205942ffffffffffffff03837c225442ffffffffffffff038385200c83201885223a420010e808200441d0036a201d204d42ffffffffffffff038385200c83201d85223b4200205e420010e808200441a0046a2020204842ffffffffffffff038385200c83202085223c42002050420010e808200441f0046a200a204e42ffffffffffffff038385200c83200a85224b42002022420010e808200441c0056a200b2054423388205542ffffffffffffff03837c85200c83200b85224d42002011420010e808200441b0056a204d4200200f420010e80820044180066a203a42002010420010e808200441c0036a203b42002050420010e80820044190046a203c42002022420010e808200441e0046a204b42002011420010e808200441d0046a204b4200200f420010e808200441a0056a204d42002010420010e808200441f0056a203a42002012420010e808200441b0036a203b42002022420010e80820044180046a203c42002011420010e808200441f0036a203c4200200f420010e808200441c0046a204b42002010420010e80820044190056a204d42002012420010e808200441e0056a203a42002039420010e808200441a0036a203b42002011420010e80820044190036a203b4200200f420010e808200441e0036a203c42002010420010e808200441b0046a204b42002012420010e80820044180056a204d42002039420010e808200441d0056a203a42002052420010e808200420042903b003225220042903f0057c220f2004290380047c221020042903d0047c221120042903a0057c221220042903c00322542004290380067c22222004290390047c223920042903e0047c223a20042903b0057c223b20042903d00322562004290390067c223c20042903a0047c224b20042903f0047c224d20042903c0057c2250423388200441d0036a41086a29030020044190066a41086a2903007c203c205654ad7c200441a0046a41086a2903007c204b203c54ad7c200441f0046a41086a2903007c204d204b54ad7c200441c0056a41086a2903007c2050204d54ad7c420d86847c223c423388200441c0036a41086a29030020044180066a41086a2903007c2022205454ad7c20044190046a41086a2903007c2039202254ad7c200441e0046a41086a2903007c203a203954ad7c200441b0056a41086a2903007c203b203a54ad7c203c203b54ad7c420d86847c222242ffffffffffffff03833703e046200420042903a003224d20042903e0057c223920042903f0037c223a20042903c0047c223b2004290390057c224b2022423388200441b0036a41086a290300200441f0056a41086a2903007c200f205254ad7c20044180046a41086a2903007c2010200f54ad7c200441d0046a41086a2903007c2011201054ad7c200441a0056a41086a2903007c2012201154ad7c2022201254ad7c420d86847c220f42ffffffffffffff03833703e8462004200429039003225220042903d0057c221020042903e0037c221120042903b0047c22122004290380057c2222200f423388200441a0036a41086a290300200441e0056a41086a2903007c2039204d54ad7c200441f0036a41086a2903007c203a203954ad7c200441c0046a41086a2903007c203b203a54ad7c20044190056a41086a2903007c204b203b54ad7c200f204b54ad7c420d86847c220f42ffffffffffffff03833703f0462004200f42338820044190036a41086a290300200441d0056a41086a2903007c2010205254ad7c200441e0036a41086a2903007c2011201054ad7c200441b0046a41086a2903007c2012201154ad7c20044180056a41086a2903007c2022201254ad7c200f202254ad7c420d868442137e205042ffffffffffffff03837c220f42ffffffffffffff03833703d0462004200f423388203c42ffffffffffffff03837c3703d846200441c0126a41086a290300215a200441d0106a41086a290300215b20042903c012211120042903d010214e200441a0136a41086a290300215c20042903a013214f20044180146a41086a290300215d2004290380142151200441a0116a41086a290300215e20042903a0112153200441d0126a41086a290300215f200441e0106a41086a290300216020042903d012211220042903e0102155200441b0136a41086a290300216120042903b013215720044190146a41086a29030021622004290390142158200441b0116a41086a290300216320042903b011215920042903b012212220042903c0102148200429039013214920042903f013214a200429039011214c200441b0126a41086a2903002164200441c0106a41086a290300216520044190136a41086a2903002166200441f0136a41086a290300216720044190116a41086a290300216820042903a012213920042903b0102152200429038013215420042903e01321562004290380112147200441a0126a41086a2903002169200441b0106a41086a290300216a20044180136a41086a290300216b200441e0136a41086a290300216c20044180116a41086a290300216d200429039012213a20042903a010214b20042903f012214d20042903d013215020042903f010216e20044190126a41086a290300216f200441a0106a41086a2903002170200441f0126a41086a2903002171200441d0136a41086a2903002172200441f0106a41086a2903002173200441a8ca006a200441d0c6006a106b20042d00a84a410171106d2102200420042903b04d221042f0ffffffffffff3f20042903d04d223b7d223c42338842137e42d0fdffffffffff3f20107d227442ffffffffffffff03837c8542002002ad42ff01837d220f8320108522103703b04d2004203b203b203c42ffffffffffffff038342f0ffffffffffff3f20042903c84d223c7d22754233887c85200f8385223b3703d04d20044180036a203e203b7d223e42338842137e204020107d224042ffffffffffffff03837c22104200201a206e2050204d203a204b7c223b7c224b7c224d7c2250204720562054203920527c22527c22547c22567c2247204c204a2049202220487c22487c22497c224a7c224c20532051204f2011204e7c224e7c224f7c22517c2253205920582057201220557c22557c22577c22587c2259423388206320622061205f20607c2055201254ad7c7c2057205554ad7c7c2058205754ad7c7c2059205854ad7c420d86847c2255423388205e205d205c205a205b7c204e201154ad7c7c204f204e54ad7c7c2051204f54ad7c7c2053205154ad7c2055205354ad7c420d86847c224e423388206820672066206420657c2048202254ad7c7c2049204854ad7c7c204a204954ad7c7c204c204a54ad7c204e204c54ad7c420d86847c2222423388206d206c206b2069206a7c2052203954ad7c7c2054205254ad7c7c2056205454ad7c7c2047205654ad7c2022204754ad7c420d86847c2212423388207320722071206f20707c203b203a54ad7c7c204b203b54ad7c7c204d204b54ad7c7c2050204d54ad7c2012205054ad7c420d868442137e205942ffffffffffffff03837c223a42ffffffffffffff038385200c83201a852211420010e808200420042903b84d221a42f0ffffffffffff3f201a7d223942ffffffffffffff038320744233887c85200f83201a85221a3703b84d200441c0006a201b201242ffffffffffffff038385200c83201b85221242002042201a7d223b42ffffffffffffff038320404233887c221a42137e420010e808200420042903c04d221b42f0ffffffffffff3f201b7d224b42ffffffffffffff038320394233887c85200f83201b8522393703c04d20044190016a201c202242ffffffffffffff038385200c83201c85221b4200204520397d222242ffffffffffffff0383203b4233887c221c42137e223b420010e8082004203c203c207542ffffffffffffff0383204b4233887c85200f838522393703c84d200441e0016a201e204e42ffffffffffffff038385200c83201e85220f4200204620397d221e42ffffffffffffff038320224233887c222242137e2239420010e808200441b0026a201f203a423388205542ffffffffffffff03837c85200c83201f85220c4200203e42ffffffffffffff0383201e4233887c221f42137e221e420010e808200441a0026a200c42002010420010e808200441f0026a20114200201a420010e808200441306a20124200203b420010e80820044180016a201b42002039420010e808200441d0016a200f4200201e420010e808200441c0016a200f42002010420010e80820044190026a200c4200201a420010e808200441e0026a20114200201c420010e808200441206a201242002039420010e808200441f0006a201b4200201e420010e808200441e0006a201b42002010420010e808200441b0016a200f4200201a420010e80820044180026a200c4200201c420010e808200441d0026a201142002022420010e808200441106a20124200201e420010e8082004201242002010420010e808200441d0006a201b4200201a420010e808200441a0016a200f4200201c420010e808200441f0016a200c42002022420010e808200441c0026a20114200201f420010e80820042004290300225620042903c0027c220c20042903507c220f20042903a0017c221020042903f0017c22112004290310224720042903d0027c221220042903607c221a20042903b0017c221b2004290380027c221c2004290320224820042903e0027c221e20042903707c221f20042903c0017c22222004290390027c22392004290330224920042903f0027c223a2004290380017c223b20042903d0017c223c20042903a0027c224b2004290340224a2004290380037c224d2004290390017c225020042903e0017c225220042903b0027c2254423388200441c0006a41086a29030020044180036a41086a2903007c204d204a54ad7c20044190016a41086a2903007c2050204d54ad7c200441e0016a41086a2903007c2052205054ad7c200441b0026a41086a2903007c2054205254ad7c420d86847c224d423388200441306a41086a290300200441f0026a41086a2903007c203a204954ad7c20044180016a41086a2903007c203b203a54ad7c200441d0016a41086a2903007c203c203b54ad7c200441a0026a41086a2903007c204b203c54ad7c204d204b54ad7c420d86847c223a423388200441206a41086a290300200441e0026a41086a2903007c201e204854ad7c200441f0006a41086a2903007c201f201e54ad7c200441c0016a41086a2903007c2022201f54ad7c20044190026a41086a2903007c2039202254ad7c203a203954ad7c420d86847c221e423388200441106a41086a290300200441d0026a41086a2903007c2012204754ad7c200441e0006a41086a2903007c201a201254ad7c200441b0016a41086a2903007c201b201a54ad7c20044180026a41086a2903007c201c201b54ad7c201e201c54ad7c420d86847c2212423388200441086a290300200441c0026a41086a2903007c200c205654ad7c200441d0006a41086a2903007c200f200c54ad7c200441a0016a41086a2903007c2010200f54ad7c200441f0016a41086a2903007c2011201054ad7c2012201154ad7c420d868442137e205442ffffffffffffff03837c220c42ffffffffffffff0383220f3703d0462004200c423388204d42ffffffffffffff03837c22103703d8462004201242ffffffffffffff038322113703f0462004201e42ffffffffffffff038322123703e8462004203a42ffffffffffffff0383221a3703e046200441a8ca006a200441d0c6006a106b2004201142f0ffffffffffff3f20117d221b42ffffffffffffff038342f0ffffffffffff3f20127d221c4233887c85420020042d00a84a410171106dad42ff01837d220c832011853703f04620042012201c42ffffffffffffff038342f0ffffffffffff3f201a7d22114233887c85200c832012853703e8462004201a201142ffffffffffffff038342f0ffffffffffff3f20107d22114233887c85200c83201a853703e04620042010201142ffffffffffffff038342d0fdffffffffff3f200f7d22114233887c85200c832010853703d8462004200f201b42338842137e201142ffffffffffffff03837c85200c83200f853703d046200441e0c4006a200441d0c6006a106b41002102034020044180c5006a20026a41003a0000200241016a220241c801470d000b20044188c9006a41186a2203200141186a29000037030020044188c9006a41106a2205200141106a29000037030020044188c9006a41086a2206200141086a2900003703002004200129000037038849200441d0c6006a20044188c9006a10f401200441d0c6006a41086a290300210c200441d0c6006a41106a290300210f200441d0c6006a41186a2903002110200441d0c6006a41206a290300211a200441f8c6006a290300211b20044180c7006a290300211120044188c7006a290300211220044190c7006a290300211c20044198c7006a290300211e200441a0c7006a290300211f20042802d446210120042802d046210220044180c5006a200441a8c7006a41f00010e9081a0240024020024101460d00200441f0ca006a20044180c5006a41f00010e9081a2004200f200c4233887c22224233882022200f54ad420d8684223a20107c223942ffffffffffffff03833703b048200420394233882039203a54ad420d8684223a201a7c223942ffffffffffffff03833703b848200420394233882039203a54ad420d8684223a201b7c223942ffffffffffffff03833703c048200420394233882039203a54ad420d868442137e200c42ffffffffffffff03837c223942ffffffffffffff03833703a04820042039423388202242ffffffffffffff03837c3703a84820044188c9006a41206a4200370300200342003703002005420037030020064200370300200442003703884920044180c5006a41206a420037030020044180c5006a41186a420037030020044180c5006a41106a420037030020044180c5006a41086a420037030020044200370380452004201220114233887c22224233882022201254ad420d8684223a201c7c22394233882039203a54ad420d8684223b201e7c223a423388203a203b54ad420d8684223c201f7c223b42ffffffffffffff03833703f0462004203a42ffffffffffffff03833703e8462004203942ffffffffffffff03833703e0462004203b423388203b203c54ad420d868442137e201142ffffffffffffff03837c2239423388202242ffffffffffffff03837c3703d8462004203942ffffffffffffff03833703d0460240200441a0c8006a20044188c9006a106c20044180c5006a200441d0c6006a106c72106d41ff01714101470d0020004101360200200041013a00040c020b200041a0016a201937030020004198016a201637030020004190016a201337030020004188016a200e37030020004180016a200d370300200041f8006a203d370300200041f0006a2043370300200041e8006a2044370300200041e0006a2041370300200041d8006a203f370300200041d0006a2023370300200041c8006a2021370300200041c0006a2017370300200041386a2015370300200041306a2014370300200041286a201d370300200041206a2020370300200041186a200a370300200041106a200b370300200041086a201837030020004190026a201f37030020004188026a201e37030020004180026a201c370300200041f8016a2012370300200041f0016a2011370300200041e8016a201b370300200041e0016a201a370300200041d8016a2010370300200041d0016a200f370300200041c8016a200c370300200041c0016a200441e0c4006a41186a290300370300200041b8016a200441e0c4006a41106a290300370300200041b0016a200441e0c4006a41086a290300370300200041a8016a20042903e04437030020004198026a200441f0ca006a41f00010e9081a200041003602000c010b2000200136020420004101360200200041186a20103e0200200041106a200f370200200041086a200c3702000b200441d0ce006a24000bbd6603047f237e067f230041d01f6b22022400200241801c6a20011070200241a81c6a200241801c6a106b41002103410121040340200120036a2d0000200241a81c6a20036a2d0000732205410020056b72417f7341800171410776106d2004712104200341016a22034120470d000b2004106d2103200241881f6a200241801c6a106b20022d00881f410171106d210402400240024002400240200341ff0171450d00200441ff01714101470d010b200241b81e6a21030c010b200241c81c6a200241801c6a4101106e200242f0ffffffffffff3f20022903e81c7d220642ffffffffffffff038342f0ffffffffffff3f20022903e01c7d22074233887c3703901d2002200742ffffffffffffff038342f0ffffffffffff3f20022903d81c22077d22084233887c3703881d2002200842ffffffffffffff038342f0ffffffffffff3f20022903d01c22087d22094233887c3703801d2002200942ffffffffffffff038342d1fdffffffffff3f20022903c81c22097d220a4233887c3703f81c2002200642338842137e200a42ffffffffffffff03837c3703f01c200242003703b01d200242003703b81d2002200942017c3703981d200220083703a01d200220073703a81d200220022903e01c3703b01d200220022903b81d20022903e81c7c3703b81d200241c01d6a200241981d6a4101106e200241b81e6a200241f01c6a4101106e200241f8156a20022903b81e2206420042ca8e9ae5dec6ac02420010e808200241f8186a20022903c01e220742137e4200428092f58893f9b701420010e808200241a8186a20022903c81e220842137e220b420042c486ffe299c731420010e808200241d8176a20022903d01e220a42137e220c420042d6fff8ffd98b8601420010e80820024188176a20022903d81e220d42137e2209420042c2a2aaa7fcfa9503420010e80820024188166a2006420042c2a2aaa7fcfa9503420010e808200241e8186a2007420042ca8e9ae5dec6ac02420010e80820024198186a200b4200428092f58893f9b701420010e808200241c8176a200c420042c486ffe299c731420010e808200241f8166a2009420042d6fff8ffd98b8601420010e80820024198166a2006420042d6fff8ffd98b8601420010e808200241d8186a2007420042c2a2aaa7fcfa9503420010e80820024188186a2008420042ca8e9ae5dec6ac02420010e808200241b8176a200c4200428092f58893f9b701420010e808200241e8166a2009420042c486ffe299c731420010e808200241a8166a2006420042c486ffe299c731420010e808200241c8186a2007420042d6fff8ffd98b8601420010e808200241f8176a2008420042c2a2aaa7fcfa9503420010e808200241a8176a200a420042ca8e9ae5dec6ac02420010e808200241d8166a20094200428092f58893f9b701420010e808200241b8166a20064200428092f58893f9b701420010e808200241b8186a2007420042c486ffe299c731420010e808200241e8176a2008420042d6fff8ffd98b8601420010e80820024198176a200a420042c2a2aaa7fcfa9503420010e808200241c8166a200d420042ca8e9ae5dec6ac02420010e808200241f8136a20022903c01d2208420020022903b816220e20022903c8167c220620022903b8187c220720022903e8177c22092002290398177c220a20022903d816220f20022903a8177c220c20022903a8167c220b20022903c8187c220d20022903f8177c221020022903b81722112002290388187c221220022903e8167c22132002290398167c221420022903d8187c2215200229039818221620022903e8187c221720022903c8177c221820022903f8167c22192002290388167c221a20022903f818221b20022903f8157c221c20022903a8187c221d20022903d8177c221e2002290388177c221f423388200241f8186a41086a290300200241f8156a41086a2903007c201c201b54ad7c200241a8186a41086a2903007c201d201c54ad7c200241d8176a41086a2903007c201e201d54ad7c20024188176a41086a2903007c201f201e54ad7c420d86847c221c42338820024198186a41086a290300200241e8186a41086a2903007c2017201654ad7c200241c8176a41086a2903007c2018201754ad7c200241f8166a41086a2903007c2019201854ad7c20024188166a41086a2903007c201a201954ad7c201c201a54ad7c420d86847c2218423388200241b8176a41086a29030020024188186a41086a2903007c2012201154ad7c200241e8166a41086a2903007c2013201254ad7c20024198166a41086a2903007c2014201354ad7c200241d8186a41086a2903007c2015201454ad7c2018201554ad7c420d86847c2212423388200241d8166a41086a290300200241a8176a41086a2903007c200c200f54ad7c200241a8166a41086a2903007c200b200c54ad7c200241c8186a41086a2903007c200d200b54ad7c200241f8176a41086a2903007c2010200d54ad7c2012201054ad7c420d86847c220c42ffffffffffffff038320022903e01d220d7d42f0ffffffffffff3f7c220b42338842137e200c423388200241b8166a41086a290300200241c8166a41086a2903007c2006200e54ad7c200241b8186a41086a2903007c2007200654ad7c200241e8176a41086a2903007c2009200754ad7c20024198176a41086a2903007c200a200954ad7c200c200a54ad7c420d868442137e201f42feffffffffffff03837c220742ffffffffffffff038320087d42d0fdffffffffff3f7c221342ffffffffffffff03837c2206420010e808200241e8156a200b42ffffffffffffff0383201242ffffffffffffff038320022903d81d220c7d42f0ffffffffffff3f7c220a4233887c2217420020022903c81d220942137e420010e80820024198156a200a42ffffffffffffff0383201842ffffffffffffff038320022903d01d220a7d42f0ffffffffffff3f7c220b4233887c22144200200a42137e2215420010e808200241c8146a200b42ffffffffffffff03832007423388201c42ffffffffffffff03837c20097d42f0ffffffffffff3f7c22074233887c22124200200c42137e2210420010e808200241a8136a200742ffffffffffffff038320134233887c22074200200d42137e220b420010e80820024198136a200742002008420010e808200241e8136a200642002009420010e808200241d8156a201742002015420010e80820024188156a201442002010420010e808200241b8146a20124200200b420010e808200241a8146a201242002008420010e80820024188136a200742002009420010e808200241d8136a20064200200a420010e808200241c8156a201742002010420010e808200241f8146a20144200200b420010e808200241e8146a201442002008420010e80820024198146a201242002009420010e808200241f8126a20074200200a420010e808200241c8136a20064200200c420010e808200241b8156a20174200200b420010e808200241a8156a201742002008420010e808200241d8146a201442002009420010e80820024188146a20124200200a420010e808200241e8126a20074200200c420010e808200241b8136a20064200200d420010e808200220022903c815221c20022903d8137c220820022903f8147c220920022903a8147c220a2002290388137c220c20022903d815221d20022903e8137c220b2002290388157c220d20022903b8147c22102002290398137c221320022903e815221e20022903f8137c22152002290398157c221820022903c8147c221920022903a8137c221a423388200241e8156a41086a290300200241f8136a41086a2903007c2015201e54ad7c20024198156a41086a2903007c2018201554ad7c200241c8146a41086a2903007c2019201854ad7c200241a8136a41086a2903007c201a201954ad7c420d86847c2215423388200241d8156a41086a290300200241e8136a41086a2903007c200b201d54ad7c20024188156a41086a2903007c200d200b54ad7c200241b8146a41086a2903007c2010200d54ad7c20024198136a41086a2903007c2013201054ad7c2015201354ad7c420d86847c220b42ffffffffffffff03833703a01e200220022903b815221920022903c8137c220d20022903e8147c22102002290398147c221320022903f8127c2218200b423388200241c8156a41086a290300200241d8136a41086a2903007c2008201c54ad7c200241f8146a41086a2903007c2009200854ad7c200241a8146a41086a2903007c200a200954ad7c20024188136a41086a2903007c200c200a54ad7c200b200c54ad7c420d86847c220842ffffffffffffff03833703a81e200220022903a815221c20022903b8137c220920022903d8147c220a2002290388147c220c20022903e8127c220b2008423388200241b8156a41086a290300200241c8136a41086a2903007c200d201954ad7c200241e8146a41086a2903007c2010200d54ad7c20024198146a41086a2903007c2013201054ad7c200241f8126a41086a2903007c2018201354ad7c2008201854ad7c420d86847c220842ffffffffffffff03833703b01e20022008423388200241a8156a41086a290300200241b8136a41086a2903007c2009201c54ad7c200241d8146a41086a2903007c200a200954ad7c20024188146a41086a2903007c200c200a54ad7c200241e8126a41086a2903007c200b200c54ad7c2008200b54ad7c420d868442137e201a42ffffffffffffff03837c220842ffffffffffffff03833703901e20022008423388201542ffffffffffffff03837c3703981e200241a81f6a41106a4200370300200241a81f6a41186a4200370300200241a81f6a41206a4200370300200242003703b01f200242013703a81f200241b81e6a200241a81f6a200241901e6a106f20024198126a20022903981d220d420020022903c01e2208420010e808200241d80f6a200241e01e6a2903002209420020022903a01d221042137e420010e808200241b8106a200241b81e6a41206a2203290300220a420020022903a81d221342137e221a420010e80820024198116a200241b81e6a41186a2204290300220c420020022903b01d221842137e2219420010e808200241f8116a200241b81e6a41106a2205290300220b420020022903b81d221c42137e2215420010e808200241d8126a200b4200200d420010e80820024198106a200842002010420010e808200241a8106a20094200201a420010e80820024188116a200a42002019420010e808200241e8116a200c42002015420010e808200241c8126a200c4200200d420010e80820024188106a200b42002010420010e808200241e8106a200842002013420010e808200241f8106a200942002019420010e808200241d8116a200a42002015420010e808200241b8126a200a4200200d420010e808200241f80f6a200c42002010420010e808200241d8106a200b42002013420010e808200241b8116a200842002018420010e808200241c8116a200942002015420010e808200241a8126a20094200200d420010e808200241e80f6a200a42002010420010e808200241c8106a200c42002013420010e808200241a8116a200b42002018420010e80820024188126a20084200201c420010e808200241980d6a2006420020022903a81222202002290388127c220d20022903e80f7c221020022903c8107c221320022903a8117c221520022903c811222120022903b8117c221820022903b8127c221920022903f80f7c221a20022903d8107c221c20022903f810222220022903e8107c221d20022903d8117c221e20022903c8127c221f2002290388107c220e20022903a81022232002290398107c220f2002290388117c221120022903e8117c221620022903d8127c221b20022903d80f22242002290398127c222520022903b8107c22262002290398117c222720022903f8117c2228423388200241d80f6a41086a29030020024198126a41086a2903007c2025202454ad7c200241b8106a41086a2903007c2026202554ad7c20024198116a41086a2903007c2027202654ad7c200241f8116a41086a2903007c2028202754ad7c420d86847c2225423388200241a8106a41086a29030020024198106a41086a2903007c200f202354ad7c20024188116a41086a2903007c2011200f54ad7c200241e8116a41086a2903007c2016201154ad7c200241d8126a41086a2903007c201b201654ad7c2025201b54ad7c420d86847c220f423388200241f8106a41086a290300200241e8106a41086a2903007c201d202254ad7c200241d8116a41086a2903007c201e201d54ad7c200241c8126a41086a2903007c201f201e54ad7c20024188106a41086a2903007c200e201f54ad7c200f200e54ad7c420d86847c221d423388200241c8116a41086a290300200241b8116a41086a2903007c2018202154ad7c200241b8126a41086a2903007c2019201854ad7c200241f80f6a41086a2903007c201a201954ad7c200241d8106a41086a2903007c201c201a54ad7c201d201c54ad7c420d86847c2218423388200241a8126a41086a29030020024188126a41086a2903007c200d202054ad7c200241e80f6a41086a2903007c2010200d54ad7c200241c8106a41086a2903007c2013201054ad7c200241a8116a41086a2903007c2015201354ad7c2018201554ad7c420d868442137e202842ffffffffffffff03837c221042ffffffffffffff0383220d420010e808200241b8096a201842ffffffffffffff038322184200200742137e420010e808200241c80e6a201d42ffffffffffffff038322154200201242137e221c420010e808200241f80d6a200f42ffffffffffffff038322134200201442137e221a420010e808200241e80d6a2010423388202542ffffffffffffff03837c22104200201742137e2219420010e808200241d80d6a201042002006420010e808200241880d6a200d42002007420010e808200241980f6a20184200201c420010e808200241d80e6a20154200201a420010e808200241880e6a201342002019420010e808200241980e6a201342002006420010e808200241c80d6a201042002007420010e808200241f80c6a200d42002012420010e808200241a80f6a20184200201a420010e808200241e80e6a201542002019420010e808200241f80e6a201542002006420010e808200241a80e6a201342002007420010e808200241b80d6a201042002012420010e808200241e80c6a200d42002014420010e808200241b80f6a201842002019420010e808200241c80f6a201842002006420010e808200241880f6a201542002007420010e808200241b80e6a201342002012420010e808200241a80d6a201042002014420010e808200241d80c6a200d42002017420010e808200241e8066a20022903c80f222020022903d80c7c220620022903880f7c220720022903b80e7c221220022903a80d7c221420022903b80f222120022903e80c7c221720022903f80e7c221920022903a80e7c221a20022903b80d7c221c20022903a80f222220022903f80c7c221d20022903e80e7c221e20022903980e7c221f20022903c80d7c220e20022903980f222320022903880d7c220f20022903d80e7c221120022903880e7c221620022903d80d7c221b20022903b809222420022903980d7c222520022903c80e7c222620022903f80d7c222720022903e80d7c2228423388200241b8096a41086a290300200241980d6a41086a2903007c2025202454ad7c200241c80e6a41086a2903007c2026202554ad7c200241f80d6a41086a2903007c2027202654ad7c200241e80d6a41086a2903007c2028202754ad7c420d86847c2225423388200241980f6a41086a290300200241880d6a41086a2903007c200f202354ad7c200241d80e6a41086a2903007c2011200f54ad7c200241880e6a41086a2903007c2016201154ad7c200241d80d6a41086a2903007c201b201654ad7c2025201b54ad7c420d86847c220f423388200241a80f6a41086a290300200241f80c6a41086a2903007c201d202254ad7c200241e80e6a41086a2903007c201e201d54ad7c200241980e6a41086a2903007c201f201e54ad7c200241c80d6a41086a2903007c200e201f54ad7c200f200e54ad7c420d86847c221d423388200241b80f6a41086a290300200241e80c6a41086a2903007c2017202154ad7c200241f80e6a41086a2903007c2019201754ad7c200241a80e6a41086a2903007c201a201954ad7c200241b80d6a41086a2903007c201c201a54ad7c201d201c54ad7c420d86847c2217423388200241c80f6a41086a290300200241d80c6a41086a2903007c2006202054ad7c200241880f6a41086a2903007c2007200654ad7c200241b80e6a41086a2903007c2012200754ad7c200241a80d6a41086a2903007c2014201254ad7c2017201454ad7c420d868442137e202842ffffffffffffff03837c220742ffffffffffffff0383220642002008420010e808200241b8076a200942002007423388202542ffffffffffffff03837c220742137e420010e808200241d8076a200a4200200f42ffffffffffffff0383221242137e221c420010e80820024188086a200c4200201d42ffffffffffffff0383221942137e221a420010e808200241c8086a200b4200201742ffffffffffffff0383221742137e2214420010e808200241d8066a200b42002006420010e808200241a8076a200842002007420010e808200241c8076a20094200201c420010e808200241f8076a200a4200201a420010e808200241b8086a200c42002014420010e808200241c8066a200c42002006420010e80820024198076a200b42002007420010e808200241d8086a200842002012420010e808200241e8076a20094200201a420010e808200241a8086a200a42002014420010e808200241e8056a200a42002006420010e80820024188076a200c42002007420010e808200241e8086a200b42002012420010e80820024188096a200842002019420010e80820024198086a200942002014420010e80820024188056a200942002006420010e808200241f8066a200a42002007420010e808200241f8086a200c42002012420010e80820024198096a200b42002019420010e808200241a8096a200842002017420010e80820022d00b81e21292003200241801c6a41206a222a2903003703002004200241801c6a41186a222b2903003703002005200241801c6a41106a222c2903002208370300200241b81e6a41086a222d200241801c6a41086a222e2903002207370300200220022903801c22063703b81e2002200620022903801c7c22063703b81e202d2007202e2903007c220737030020052008202c2903007c220837030020042004290300202b2903007c220937030020032003290300202a2903007c220a370300200241880c6a200d42002006420010e808200241880a6a200a4200201042137e420010e808200241980a6a20094200201342137e2212420010e808200241e80a6a20084200201542137e220b420010e808200241b80b6a20074200201842137e220c420010e808200241c80b6a20074200200d420010e808200241980c6a200642002010420010e808200241f8096a200a42002012420010e808200241a80a6a20094200200b420010e808200241f80a6a20084200200c420010e808200241880b6a20084200200d420010e808200241d80b6a200742002010420010e808200241a80c6a200642002013420010e808200241e8096a200a4200200b420010e808200241b80a6a20094200200c420010e808200241c80a6a20094200200d420010e808200241980b6a200842002010420010e808200241e80b6a200742002013420010e808200241b80c6a200642002015420010e808200241d8096a200a4200200c420010e808200241c8096a200a4200200d420010e808200241d80a6a200942002010420010e808200241a80b6a200842002013420010e808200241f80b6a200742002015420010e808200241c80c6a200642002018420010e808200220022903c809221f20022903c80c7c220620022903d80a7c220720022903a80b7c220820022903f80b7c220920022903d809220e20022903b80c7c220a20022903c80a7c220c20022903980b7c220b20022903e80b7c220d20022903e809220f20022903a80c7c221020022903b80a7c221220022903880b7c221320022903d80b7c221420022903f809221120022903980c7c221520022903a80a7c221720022903f80a7c221820022903c80b7c221920022903880a221620022903880c7c221a20022903980a7c221c20022903e80a7c221d20022903b80b7c221e423388200241880a6a41086a290300200241880c6a41086a2903007c201a201654ad7c200241980a6a41086a2903007c201c201a54ad7c200241e80a6a41086a2903007c201d201c54ad7c200241b80b6a41086a2903007c201e201d54ad7c420d86847c221a423388200241f8096a41086a290300200241980c6a41086a2903007c2015201154ad7c200241a80a6a41086a2903007c2017201554ad7c200241f80a6a41086a2903007c2018201754ad7c200241c80b6a41086a2903007c2019201854ad7c201a201954ad7c420d86847c2215423388200241e8096a41086a290300200241a80c6a41086a2903007c2010200f54ad7c200241b80a6a41086a2903007c2012201054ad7c200241880b6a41086a2903007c2013201254ad7c200241d80b6a41086a2903007c2014201354ad7c2015201454ad7c420d86847c2210423388200241d8096a41086a290300200241b80c6a41086a2903007c200a200e54ad7c200241c80a6a41086a2903007c200c200a54ad7c200241980b6a41086a2903007c200b200c54ad7c200241e80b6a41086a2903007c200d200b54ad7c2010200d54ad7c420d86847c220a423388200241c8096a41086a290300200241c80c6a41086a2903007c2006201f54ad7c200241d80a6a41086a2903007c2007200654ad7c200241a80b6a41086a2903007c2008200754ad7c200241f80b6a41086a2903007c2009200854ad7c200a200954ad7c420d868442137e201e42ffffffffffffff03837c220642ffffffffffffff03833703e81d20022006423388201a42ffffffffffffff03837c3703f01d2002200a42ffffffffffffff038322063703881e2002201042ffffffffffffff038322073703801e2002201542ffffffffffffff0383220c3703f81d200241881f6a200241e81d6a106b2002200642f0ffffffffffff3f20067d220942ffffffffffffff038342f0ffffffffffff3f20077d22084233887c85420020022d00881f410171106dad42ff01837d220a8320068522063703881e20022007200842ffffffffffffff038342f0ffffffffffff3f200c7d220b4233887c85200a8320078522073703801e200220022903e81d2208200942338842137e42d0fdffffffffff3f20087d220d42ffffffffffffff03837c85200a8320088522083703e81d200220022903f01d220942f0ffffffffffff3f20097d221042ffffffffffffff0383200d4233887c85200a8320098522093703f01d2002200c200b42ffffffffffffff038320104233887c85200a83200c85220a3703f81d20024198046a200229038805221b20022903a8097c220c20022903f8067c220b20022903f8087c220d2002290398097c221020022903980822252002290388097c221220022903e8057c22132002290388077c221420022903e8087c221520022903e807222620022903d8087c221720022903a8087c221820022903c8067c22192002290398077c221a20022903c807222720022903a8077c221c20022903f8077c221d20022903b8087c221e20022903d8067c221f20022903b807222820022903e8067c220e20022903d8077c220f2002290388087c221120022903c8087c2216423388200241b8076a41086a290300200241e8066a41086a2903007c200e202854ad7c200241d8076a41086a2903007c200f200e54ad7c20024188086a41086a2903007c2011200f54ad7c200241c8086a41086a2903007c2016201154ad7c420d86847c220e423388200241c8076a41086a290300200241a8076a41086a2903007c201c202754ad7c200241f8076a41086a2903007c201d201c54ad7c200241b8086a41086a2903007c201e201d54ad7c200241d8066a41086a2903007c201f201e54ad7c200e201f54ad7c420d86847c221c423388200241e8076a41086a290300200241d8086a41086a2903007c2017202654ad7c200241a8086a41086a2903007c2018201754ad7c200241c8066a41086a2903007c2019201854ad7c20024198076a41086a2903007c201a201954ad7c201c201a54ad7c420d86847c221742338820024198086a41086a29030020024188096a41086a2903007c2012202554ad7c200241e8056a41086a2903007c2013201254ad7c20024188076a41086a2903007c2014201354ad7c200241e8086a41086a2903007c2015201454ad7c2017201554ad7c420d86847c221842338820024188056a41086a290300200241a8096a41086a2903007c200c201b54ad7c200241f8066a41086a2903007c200b200c54ad7c200241f8086a41086a2903007c200d200b54ad7c20024198096a41086a2903007c2010200d54ad7c2018201054ad7c420d868442137e201642ffffffffffffff03837c221042ffffffffffffff0383220c420020022903f01c220b420010e808200241e8046a20022903901d220d42002010423388200e42ffffffffffffff03837c221042137e420010e80820024188066a20022903881d22124200201c42ffffffffffffff0383221542137e221c420010e808200241b8056a20022903801d22134200201742ffffffffffffff0383221942137e221a420010e808200241c8036a20022903f81c22144200201842ffffffffffffff0383221842137e2217420010e80820024188046a20144200200c420010e808200241d8046a200b42002010420010e808200241f8056a200d4200201c420010e808200241a8056a20124200201a420010e808200241b8036a201342002017420010e808200241f8036a20134200200c420010e808200241c8046a201442002010420010e80820024198066a200b42002015420010e80820024198056a200d4200201a420010e808200241a8036a201242002017420010e808200241e8036a20124200200c420010e808200241b8046a201342002010420010e808200241a8066a201442002015420010e808200241c8056a200b42002019420010e808200241c8026a200d42002017420010e808200241d8036a200d4200200c420010e808200241a8046a201242002010420010e808200241b8066a201342002015420010e808200241d8056a201442002019420010e808200241f8046a200b42002018420010e8082002200229039805221c2002290398067c220c20022903a8037c220b20022903f8037c221020022903c8047c221220022903f805221d20022903d8047c220d20022903a8057c221320022903b8037c22142002290388047c221520022903e804221e2002290398047c22172002290388067c221820022903b8057c221920022903c8037c221a423388200241e8046a41086a29030020024198046a41086a2903007c2017201e54ad7c20024188066a41086a2903007c2018201754ad7c200241b8056a41086a2903007c2019201854ad7c200241c8036a41086a2903007c201a201954ad7c420d86847c2217423388200241f8056a41086a290300200241d8046a41086a2903007c200d201d54ad7c200241a8056a41086a2903007c2013200d54ad7c200241b8036a41086a2903007c2014201354ad7c20024188046a41086a2903007c2015201454ad7c2017201554ad7c420d86847c221342ffffffffffffff0383220d3703a01e200220022903c802221d20022903c8057c221420022903e8037c221520022903b8047c221820022903a8067c2219201342338820024198056a41086a29030020024198066a41086a2903007c200c201c54ad7c200241a8036a41086a2903007c200b200c54ad7c200241f8036a41086a2903007c2010200b54ad7c200241c8046a41086a2903007c2012201054ad7c2013201254ad7c420d86847c220c42ffffffffffffff038322103703a81e200220022903d803221e20022903f8047c220b20022903a8047c221220022903b8067c221320022903d8057c221c200c423388200241c8026a41086a290300200241c8056a41086a2903007c2014201d54ad7c200241e8036a41086a2903007c2015201454ad7c200241b8046a41086a2903007c2018201554ad7c200241a8066a41086a2903007c2019201854ad7c200c201954ad7c420d86847c220c42ffffffffffffff038322143703b01e2002200c423388200241d8036a41086a290300200241f8046a41086a2903007c200b201e54ad7c200241a8046a41086a2903007c2012200b54ad7c200241b8066a41086a2903007c2013201254ad7c200241d8056a41086a2903007c201c201354ad7c200c201c54ad7c420d868442137e201a42ffffffffffffff03837c220b42ffffffffffffff0383220c3703901e2002200b423388201742ffffffffffffff03837c220b3703981e20024188016a200c42002008420010e808200241d8016a20064200200b42137e420010e808200241e8026a20074200200d42137e2215420010e80820024188026a200a4200201042137e2213420010e808200241386a20094200201442137e2212420010e808200241f8006a20094200200c420010e808200241c8016a20084200200b420010e808200241d8026a200642002015420010e808200241f8016a200742002013420010e808200241286a200a42002012420010e808200241e8006a200a4200200c420010e808200241b8016a20094200200b420010e808200241f8026a20084200200d420010e808200241e8016a200642002013420010e808200241186a200742002012420010e808200241d8006a20074200200c420010e808200241a8016a200a4200200b420010e80820024188036a20094200200d420010e80820024198026a200842002010420010e808200241086a200642002012420010e808200241c8006a20064200200c420010e80820024198016a20074200200b420010e80820024198036a200a4200200d420010e808200241a8026a200942002010420010e808200241b8026a200842002014420010e808200220022903e801221520022903f8027c220620022903187c220720022903687c220820022903b8017c220920022903d802221720022903c8017c220a20022903f8017c220c20022903287c220b20022903787c220d20022903d80122182002290388017c221020022903e8027c22122002290388027c221320022903387c2214423388200241d8016a41086a29030020024188016a41086a2903007c2010201854ad7c200241e8026a41086a2903007c2012201054ad7c20024188026a41086a2903007c2013201254ad7c200241386a41086a2903007c2014201354ad7c420d86847c2210423388200241d8026a41086a290300200241c8016a41086a2903007c200a201754ad7c200241f8016a41086a2903007c200c200a54ad7c200241286a41086a2903007c200b200c54ad7c200241f8006a41086a2903007c200d200b54ad7c2010200d54ad7c420d86847c220a42ffffffffffffff03833703b81f2002200229030822132002290398027c220c20022903587c220b20022903a8017c220d2002290388037c2212200a423388200241e8016a41086a290300200241f8026a41086a2903007c2006201554ad7c200241186a41086a2903007c2007200654ad7c200241e8006a41086a2903007c2008200754ad7c200241b8016a41086a2903007c2009200854ad7c200a200954ad7c420d86847c220642ffffffffffffff03833703c01f20022002290348221520022903b8027c22072002290398017c22082002290398037c220920022903a8027c220a2006423388200241086a41086a29030020024198026a41086a2903007c200c201354ad7c200241d8006a41086a2903007c200b200c54ad7c200241a8016a41086a2903007c200d200b54ad7c20024188036a41086a2903007c2012200d54ad7c2006201254ad7c420d86847c220642ffffffffffffff03833703c81f20022006423388200241c8006a41086a290300200241b8026a41086a2903007c2007201554ad7c20024198016a41086a2903007c2008200754ad7c20024198036a41086a2903007c2009200854ad7c200241a8026a41086a2903007c200a200954ad7c2006200a54ad7c420d868442137e201442ffffffffffffff03837c220642ffffffffffffff03833703a81f20022006423388201042ffffffffffffff03837c3703b01f4200210602402029450d00200241881f6a200241a81f6a106b4200210620022d00881f410171106d41ff01714101460d00200241d01e6a4200370300200241c81e6a4200370300200241c01e6a4200370300200242003703b81e200241881f6a200241901e6a106b200241b81e6a4101722129410021054100210341012104024003402005200241881f6a20036a2d0000732205410020056b72417f7341800171410776106d20047121042003411f460d01202920036a2d00002105200341016a21030c000b0b420021062004106d41ff01714101460d00200241b81e6a41206a200241e81d6a41206a290300370300200241b81e6a41186a200241e81d6a41186a290300370300200241b81e6a41106a200241e81d6a41106a290300370300200241b81e6a41086a200241e81d6a41086a290300370300200241e81e6a200241901e6a41086a290300370300200241f01e6a200241901e6a41106a290300370300200241f81e6a200241901e6a41186a290300370300200241801f6a200241901e6a41206a290300370300200220022903e81d3703b81e200220022903901e3703e01e200241881b6a41206a200241a81f6a41206a290300370300200241881b6a41186a200241a81f6a41186a290300370300200241881b6a41106a200241a81f6a41106a290300370300200241881b6a41086a200241a81f6a41086a290300370300200220022903a81f3703881b200241b01b6a200241b81e6a41d00010e9081a420121060b200241b81e6a210320064200520d010b200241b01a6a410f6a2003410f6a290000370000200241b01a6a41086a200341086a290000370300200220032900003703b01a200241b5196a200241b01a6a41d30010e9081a41012103200041013a0004200020022900b5193700052000410d6a200241b5196a41086a290000370000200041146a200241b5196a410f6a2900003700000c010b200241b01a6a41036a200241b01b6a41d00010e9081a200241881a6a41206a2203200241881b6a41206a290300370300200241881a6a41186a2204200241881b6a41186a290300370300200241881a6a41106a2205200241881b6a41106a290300370300200241881a6a41086a2229200241881b6a41086a290300370300200220022903881b3703881a200241b5196a200241b01a6a41d30010e9081a20024188196a41206a222a200329030037030020024188196a41186a2203200429030037030020024188196a41106a2204200529030037030020024188196a41086a22052029290300370300200220022903881a37038819200041086a200241b5196a41036a41d00010e9081a200041e0006a4200370300200041d8006a4201370300200041e8006a4200370300200041f0006a4200370300200041f8006a420037030020004180016a20022903881937000020004188016a200529030037000020004190016a200429030037000020004198016a2003290300370000200041a0016a202a290300370000200041a8016a2001290000370000200041b0016a200141086a290000370000200041b8016a200141106a290000370000200041c0016a200141186a290000370000410021030b20002003360200200241d01f6a24000bd60101027f230041106b2202240002400240024002400240024020002d00000e050001020304050b200241003a000f20012002410f6a410110742001200041016a412010740c040b200241013a000f20012002410f6a410110740c030b200241023a000f20012002410f6a41011074200041046a28020021032000410c6a28020022002001107620012003200010740c020b200241033a000f20012002410f6a410110742001200041016a412010740c010b200241043a000f20012002410f6a410110742001200041016a411410740b200241106a24000bb40201067f230041106b22022400024002402001280200220328020422044104490d0020032802002205280000210620032004417c6a3602042003200541046a3602002002200110e8010240024020022802002203450d00200241086a2802002105200228020421042001280200220128020422074104490d012000200436020820002003360204200020063602002000410c6a200536020020012802002203280000210420012007417c6a3602042001200341046a360200200041106a20043602000c030b200041003602040c020b2000410036020402402005450d002005410c6c21002003210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b2004450d012004410c6c450d012003102e0c010b200041003602040b200241106a24000baa0201067f230041106b2202240002400240200128020422034104490d0020012802002204280000210520012003417c6a3602042001200441046a3602002002200110e3010240024020022802002203450d00200241086a280200210620022802042104200128020422074104490d012000200436020820002003360204200020053602002000410c6a200636020020012802002203280000210420012007417c6a3602042001200341046a360200200041106a20043602000c030b200041003602040c020b2000410036020402402006450d002006410c6c21002003210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b2004450d012004410c6c450d012003102e0c010b200041003602040b200241106a24000bd007020e7f047e230041b0046b22022400200128020c2103200128020821042001280204210520012802002106200241286a200010f901200241e0016a200228022822002002280230220710fa01200241f0036a41086a2208200241e0016a41086a290300370300200241f0036a41106a2209200241e0016a41106a290300370300200241f0036a41186a220a200241e0016a41186a290300370300200241f0036a41206a220b200241e0016a41206a290300370300200241f0036a41286a220c200241e0016a41286a290300370300200241f0036a41306a220d200241e0016a41306a290300370300200241f0036a41386a220e200241e0016a41386a290300370300200220022903e0013703f00320022d00a002210120024188036a200241e0016a41c1006a41e70010e9081a02402001410646220f0d00200241386a41386a200e290300370300200241386a41306a200d290300370300200241386a41286a200c290300370300200241386a41206a200b290300370300200241386a41186a200a290300370300200241386a41106a2009290300370300200241386a41086a2008290300370300200220022903f003370338200241386a41c1006a20024188036a41e70010e9081a0b200220013a0078410021010240200f0d0002402006280200220f290300221020022903382211542206200f41086a2903002212200241386a41086a220829030022135420122013511b0d00200f201020117d370300200f201220137d2006ad7d370308200241023a0078200241186a200241c0016a2002290368200241f0006a29030010fb012005280200210f20042802002106200242f0f2bda1a7ee9cb9f9003703f00320022006360290032002410236028c03200241e2b8c00036028803200241e0016a200241f0036a20024188036a10fc01200241086a200241e0016a2002290338200829030010fd01200f427f200f290300221220022903087c221320132012542206200f41086a22082903002212200241086a41086a2903007c2006ad7c221320125420132012511b22061b3703002008427f201320061b370300200241ec016a2004280200360200200241e0016a41086a41023a0000200241153a00e001200241e0016a10fe010c010b41012101200328020041013a00000b200241e0016a200241386a41a80110e9081a0240024020022d00a0024106470d002000200710ff010c010b20024100360290032002420137038803200241e0016a20024188036a10800220002007200228028803220f20022802900310b201200228028c03450d00200f102e0b0240200228022c450d002000102e0b200241b0046a240020010b870201037f230041d0006b22022400200241086a41bad7c7004108108102200241186a419dfec6004108108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241386a41086a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000bd41205047f067e017f027e0a7f230041a0026b220324002003200236020420032001360200200341086a2001200210ed0202400240200328020822010d00200041063a00400c010b200328020c21042003200341086a41086a28020036026c20032001360268200341186a200341e8006a109301024002400240024020032d00184101460d0020034190016a200341316a290000370300200341f8006a41106a200341296a290000370300200341f8006a41086a200341216a29000037030020032003290019370378200328026c22024110490d0020032003280268220541106a3602682003200241706a220636026c20064110490d00200541086a2900002107200529000021082003200541206a3602682003200241606a220636026c20064110490d00200541186a29000021092005290010210a2003200541306a3602682003200241506a220636026c20064110490d00200541286a290000210b2005290020210c2003200241406a220d36026c2003200541c0006a2206360268200d450d00200541386a290000210e2005290030210f2003200241bf7f6a36026c2003200641016a36026841002102024002400240024020062d00000e06060500010203040b410221020c050b200341186a200341e8006a10930120032d00184101460d02200341b8016a41186a200341316a290000370300200341b8016a41106a200341296a290000370300200341b8016a41086a200341216a290000370300200341b4016a41026a200341d8016a41026a2d00003a000020034198016a41086a200341f8016a41086a29000037030020034198016a41106a200341f8016a41106a29000037030020034198016a41186a200341f8016a41186a280000360200200320032900193703b801200320032f00d8013b01b401200320032900f80137039801410321020c040b200341186a200341e8006a10930120032d00184101460d01200341f8016a41186a2205200341316a290000370300200341f8016a41106a2206200341296a290000370300200341f8016a41086a220d200341216a290000370300200320032900193703f80141042102200328026c22104104490d01200341b8016a41086a200d290300370300200341b8016a41106a2006290300370300200341b8016a41186a2005290300370300200341b4016a41026a2003419c026a41026a2d00003a0000200320032903f8013703b80120032802682205280000210d20032010417c6a36026c2003200541046a360268200320032f009c023b01b40120034198016a41186a200341d8016a41186a28020036020020034198016a41106a200341d8016a41106a29020037030020034198016a41086a200341d8016a41086a290200370300200320032902d801370398010c030b200341186a200341e8006a10930120032d00184101460d00200341f8016a41186a200341316a290000370300200341f8016a41106a200341296a290000370300200341f8016a41086a200341216a290000370300200320032900193703f801200341186a200341e8006a10930120032d00184101460d002003419c026a41026a220220032d001b3a0000200341d8016a41086a200341186a41106a290300370300200341d8016a41106a200341186a41186a290300370300200341d8016a41186a200341386a2d00003a0000200320032f00193b019c022003200341186a41086a2903003703d801200328026c22064104490d00200328021c210d200341b8016a41086a200341f8016a41086a290300370300200341b8016a41106a200341f8016a41106a290300370300200341b8016a41186a200341f8016a41186a290300370300200341b4016a41026a20022d00003a000020034198016a41186a200341d8016a41186a2d00003a000020034198016a41106a200341d8016a41106a29030037030020034198016a41086a200341d8016a41086a290300370300200320032903f8013703b801200320032f019c023b01b401200320032903d8013703980120032802682202280000210520032006417c6a36026c2003200241046a360268200341b3016a200341f5016a41026a2d00003a0000200320032f00f5013b00b101410521020c020b20034100360220200342013703182003410a3602fc01200320033602f8012003200341186a3602b801200341d4006a410136020020034201370244200341909dc5003602402003200341f8016a360250200341b8016a419cebc000200341c0006a103d1a2003280218200328022010ef020240200328021c450d002003280218102e0b410621020c020b410121020b200341c0006a41186a2206200341b8016a41186a290300370300200341c0006a41106a2210200341b8016a41106a290300370300200341c0006a41086a2211200341b8016a41086a290300370300200341f4006a41026a2212200341b4016a41026a2d00003a0000200341d8016a41086a221320034198016a41086a290300370300200341d8016a41106a221420034198016a41106a290300370300200341d8016a41186a221520034198016a41186a280200360200200320032903b801370340200320032f01b4013b017420032003290398013703d801200341f8016a41086a2216200341f8006a41086a290300370300200341f8016a41106a2217200341f8006a41106a290300370300200341f8016a41186a2218200341f8006a41186a290300370300200341e2006a20122d00003a0000200320032903783703f801200320032f01743b0160200041386a200e3703002000200f370330200041286a200b3703002000200c370320200041186a20093703002000200a3703102000200737030820002008370300200341186a411f6a2212200341c0006a411f6a280000360000200341186a41186a22192006290300370300200341186a41106a22062010290300370300200341186a41086a2210201129030037030020032003290340370318200041e4006a200d360000200041e0006a2012280000360000200041d9006a2019290300370000200041d1006a2006290300370000200041c9006a201029030037000020002003290318370041200041e8006a20032903d801370000200041f0006a2013290300370000200041f8006a201429030037000020004180016a201528020036000020004184016a2005360000200041a0016a201829030037000020004198016a201729030037000020004190016a201629030037000020004188016a20032903f8013700000b200020023a00402004450d002001102e0b200341a0026a24000bf21104027f097e047f087e230041d0026b2204240002400240200220038450450d0042002102420021030c010b200441f0006a200110c802200441d0016a20042802702205200428027810c902200441f0016a2903002106200441e8016a2903002107200441e0016a290300210820042903d801210920042903d001210a02402004280274450d002005102e0b200a4201520d002009200784200820068484500d00200441f0006a200110c802200441d0016a20042802702205200428027810c902200441d0016a41386a290300210b200441d0016a41306a2903002107200441d0016a41286a2903002108200441d0016a41206a290300210c200441d0016a41186a290300210d200441d0016a41106a290300210a20044190026a290300210e20042903d801210620042903d0012109200441206a41086a200441a0026a290300370300200420044198026a2903003703200240024020094201510d004200210e200441306a41386a4200370300200441306a41306a4200370300200441306a41286a4200370300200441306a41206a4200370300200441306a41186a4200370300200441306a41106a4200370300200441306a41086a4200370300200442003703304200210842002107420021064200210a0c010b200441306a41286a2007370300200441306a41306a200b37030020042008370350200420063703302004200e3703682004200d3703402004200a3703382004200c3703480b02402004280274450d002005102e0b024002402006200a844200520d0020082004290340842007200441c8006a29030084844200520d002004290360200441e8006a2903008450450d004200210d410021050c010b200441c0006a2903002106200441e0006a290300210c200441d8006a2903002108200441d0006a290300210b20042903382107200429033021094201210d2004290348210a410121050b0240200d420152220f450d004200210b420021084200210c4200210e420021064200210a42002109420021070b200441f8016a2210200837030020044180026a2211200c370300200441e8016a200a2003200a2006200256200a200356200a2003511b22121b22087d20062002200620121b220a54ad7d220d3703002004200b3703f00120042006200a7d22133703e0012004427f200720087c2009200a7c220b2009542212ad7c22062012200620075420062007511b22121b22063703d8012004427f200b20121b22073703d001200fad210b02400240427f200720137c22092009200754220f2006200d7c200fad7c220920065420092006511b220f1b220c42ffc7afa02556427f2009200f1b22094200522009501b0d0020072013842006200d8484220d50210f42002113200d420052ad210d0c010b2011290300211420102903002115200441f0016a2903002116200441e0016a290300211720042903e801211820042903d801211920042903d001211a420121134200210d4101210f0b200441a8016a200837030020044198016a200937030020044190016a2212200c37030020044180016a20063703002004200a3703a001200420073703782004200d370388012004200b37037002400240024020052013420152720d00200420013602d0012001200441d0016a10bd060c010b0240200541017322052013420151720d00200420013602d0012001200441d0016a10be0641ff017122054103460d01024020050e03030200030b200f0d03200420123602d001200441d0016a10cc020c030b20134201522005710d010b200441b0016a200110c802200441d0016a20042802b001220520042802b801220f10c90220042903d001210a200441206a41086a2212200441a0026a290300370300200420044198026a29030037032002400240200a4201510d00200441c0016a41086a4200370300200442003703c0010c010b200441c0016a41086a2012290300370300200420042903203703c0010b024020134201510d004200211a420021194200211642002115420021144200210e42002117420021180b20044180026a2015370300200441d0016a41286a2016370300200441f0016a2018370300200441e8016a2017370300200441d0016a41106a201937030020044190026a200e37030020044198026a20042903c001370300200441d0016a41386a2014370300200441a0026a200441c0016a41086a2903003703002004201a3703d801200442013703d0012005200f200441d0016a41086a10c805024020042802b401450d002005102e0b200441f0006a41106a2903002106200441f0006a41286a2903002109200441f0006a41386a290300210820042903782107200429039001210c20042903a001210a2004290370210b200429038801210d0b0240200b4201520d0020044188026a200637030020044180026a2007370300200441d0016a41086a41003a0000200441d9016a2001290000370000200441e1016a200141086a290000370000200441e9016a200141106a290000370000200441f1016a200141186a290000370000200441033a00d001200441d0016a10fe010b02400240200d50450d00420021060c010b200441d0016a41186a200141186a290000370300200441d0016a41106a200141106a290000370300200441d0016a41086a200141086a290000370300200420012900003703d001420121060b200441186a200441d0016a41186a22052903002207370300200441106a200441d0016a41106a220f290300220b370300200441086a200441d0016a41086a2212290300220d370300200420042903d001220e37030020044180026a22102009370300200441f8016a2211200c370300200f200d3703002005200b370300200441f0016a2007370300200420063703d0012004200e3703d801200441d0016a10d204024020042903d001500d0020042011360270200441f0006a10cc020b20044188026a20083703002010200a370300201241063a0000200441d9016a2001290000370000200441e1016a200141086a290000370000200441e9016a200141106a290000370000200441f1016a200141186a290000370000200441033a00d001200320087d2002200a54ad7d21032002200a7d2102200441d0016a10fe010b2000200237030020002003370308200441d0026a24000b930301037f230041e0006b22032400200341c0006a200241086a2802003602002003200229020037033820032001360230200341edde91e30636023402400240200341306a410c6a2802002204410c6a2202417f4c0d000240024020020d00410121050c010b2002102c2205450d020b200341003602502003200236024c20032005360248200341c8006a200341306a41047241041074200341c8006a200141081074200328023821022004200341c8006a1076200341c8006a2002200410742003200341c0006a280200360208200341c8006a200341086a41041074200328024821022003200328025036025c20032002360258200341086a200341d8006a10d0040240200328024c450d002002102e0b0240024020032d00084101470d0020004200370000200041186a4200370000200041106a4200370000200041086a42003700000c010b20002003290009370000200041186a200341216a290000370000200041106a200341196a290000370000200041086a200341116a2900003700000b200341e0006a24000f0b1038000b1036000b9c1005027f0c7e017f047e017f230041d0026b22042400024002402002200384500d00200441e0006a200110c802200441d0016a20042802602205200428026810c902200441d0016a41386a2903002106200441d0016a41306a2903002107200441d0016a41286a2903002108200441d0016a41206a2903002109200441d0016a41186a290300210a200441d0016a41106a290300210b20044190026a290300210c20042903d801210d20042903d001210e200441a0016a41086a200441a0026a290300370300200420044198026a2903003703a00102400240200e4201510d004200210c200441206a41386a4200370300200441206a41306a4200370300200441206a41286a4200370300200441206a41206a4200370300200441206a41186a4200370300200441206a41106a4200370300200441206a41086a420037030020044200370320420021094200210842002107420021064200210d4200210b4200210a4200210f420021104200210e420021110c010b200441206a41206a2008370300200441206a41286a2007370300200441206a41106a200a370300200441206a41306a2006370300200420093703382004200d3703202004200c3703582004200b3703282008210f20072110200d210e200b21110b02402004280264450d002005102e0b02400240200e2011844200520d00200f2004290330842010200441386a29030084844200520d002004290350200441d8006a2903008450450d004200210e410021120c010b4201210e410121120b0240200e4201510d004200210a4200210c420021094200210842002107420021064200210d4200210b0b0240200e4201510d0020024280c8afa0255441002003501b0d010b200441f0016a2008370300200441f8016a200737030020044180026a2006370300200420093703e8012004200a3703e0012004200b200b20037c200d20027c220f200d542205ad7c221120052011200b542011200b511b22051b22113703d8012004200d200f20051b220d3703d0014200210f4200200320051b21034200200220051b210b42012110200e420152ad211302400240427f200d200a7c22022002200d542205201120097c2005ad7c220220115420022011511b22051b221442ffc7afa02556427f200220051b22024200522002501b0d00200d200a84201120098484220a50210542002110200a420052ad210f0c010b200441e0016a290300211520042903d801211620042903d001210a410121050b20044198016a200337030020044188016a200237030020044180016a22172014370300200441f0006a20113703002004200b370390012004200d3703682004200f3703782004201337036002400240024002400240024020122010420152720d00200420013602d0012001200441d0016a10bd060c010b0240201241017322122010420151720d00200420013602d0012001200441d0016a10be0641ff017122124103460d01024020120e03030200030b20044190016a2101024020050d00200420173602d001200441d0016a10cc020b200420013602d001200441d0016a10ce020c060b20104201522012710d020b200441b0016a200110c802200441d0016a20042802b001221220042802b801221710c90220042903d001210b200441a0016a41086a2205200441a0026a290300370300200420044198026a2903003703a00102400240200b4201510d00200441c0016a41086a4200370300200442003703c0010c010b200441c0016a41086a2005290300370300200420042903a0013703c0010b20044198026a20042903c001370300200441a0026a200441c0016a41086a290300370300200442013703d001200441d0016a41386a20064200201042015122051b37030020044180026a2007420020051b370300200441d0016a41286a2008420020051b370300200441f0016a2009420020051b370300200441e8016a2015420020051b370300200441d0016a41106a2016420020051b37030020044190026a200c420020051b3703002004200a420020051b3703d80120122017200441d0016a41086a10c805024020042802b401450d002012102e0b20042903602209428080808070832107200441e0006a41106a2903002111200441e0006a41286a2903002102200441e0006a41386a29030021032004290368210d2004290380012114200429039001210b2004290378210f0c030b200e420152ad21090c010b200e420152ad21090b420021070b02402007200942ffffffff0f83844201520d0020044188026a201137030020044180026a200d370300200441d0016a41086a41003a0000200441d9016a2001290000370000200441e1016a200141086a290000370000200441e9016a200141106a290000370000200441f1016a200141186a290000370000200441033a00d001200441d0016a10fe010b02400240200f50450d004200210d0c010b200441d0016a41186a200141186a290000370300200441d0016a41106a200141106a290000370300200441d0016a41086a200141086a290000370300200420012900003703d0014201210d0b200441186a200441d0016a41186a22012903002209370300200441106a200441d0016a41106a22052903002207370300200441086a200441d0016a41086a2903002208370300200420042903d001220a37030020044180026a2002370300200441f8016a221220143703002005200837030020012007370300200441f0016a20093703002004200d3703d0012004200a3703d801200441d0016a10d20420042903d001500d0120042012360260200441e0006a10cc020c010b4200210b420021030b2000200b37030020002003370308200441d0026a24000bfe0a010c7f23004180026b22012400200141c0016a22024200370300200141b8016a22034200370300200141a8016a41086a22044200370300200142003703a801200141c8016a41d9fcc60041061081022004200141c8016a41086a2205290000370300200120012900c8013703a801200141c8016a4180f4cb00410610810220022005290000370300200320012900c801370300200141086a200141a8016a4120108e02024002402001280208450d00200128020c450d00200141c0016a22064200370300200141b8016a22074200370300200141a8016a41086a22024200370300200142003703a801200141c8016a41d9fcc60041061081022002200141c8016a41086a2204290000370300200120012900c8013703a801200141c8016a41e8f7cb00410e108102200341086a22082004290000370000200320012900c801370000200141203602dc012001200141a8016a3602d801200141f0016a200141a8016a412010ed020240024020012802f00122090d00410321050c010b200141f0016a41086a280200210a20012802f401210b200141003a00c801024002400240200a450d00410121050240024020092d00000e03000401020b200a417f6a4104490d012009280001210c410021050c030b410221050c010b200141003602d001200142013703c8012001410a3602e4012001200141d8016a3602e0012001200141c8016a3602ec01200141246a410136020020014201370214200141909dc5003602102001200141e0016a360220200141ec016a419cebc000200141106a103d1a20012802c80120012802d00110ef02024020012802cc01450d0020012802c801102e0b410321050b0b200b450d002009102e0b200141106a200041800110e9081a200141a0016a410036020020014194016a200c360200200142013703980120014102200520054103461b220536029001200642003703002007420037030020024200370300200142003703a801200141c8016a41d9fcc600410610810220022004290000370300200120012900c8013703a801200141c8016a41a4f5cb00410a10810220082004290000370000200320012900c8013700002001200141a8016a4120108e020240024002402001280204410020012802001b220241016a22002002490d0020014198016a210c200141c0016a22064200370300200141b8016a22074200370300200141a8016a41086a22044200370300200142003703a801200141c8016a41d9fcc60041061081022004200141c8016a41086a2202290000370300200120012900c8013703a801200141c8016a41a4f5cb00410a108102200341086a22082002290000370000200320012900c801370000200120003602c801200141a8016a4120200141c8016a410410b201200642003703002007420037030020044200370300200142003703a801200141c8016a41d9fcc600410610810220042002290000370300200120012900c8013703a801200141c8016a41e0f4cb00410610810220082002290000370000200320012900c801370000200141003602f801200142013703f0010240024020050e03030001040b200141013a00c801200141f0016a200141c8016a410110740c030b200141023a00c801200141f0016a200141c8016a410110740c020b200141106a10c008200128029c0141ffffff3f71450d03200128029801102e0c030b200141003a00c801200141f0016a200141c8016a4101107420012001280294013602c801200141f0016a200141c8016a410410740b200141106a200141f0016a109c06200c200141f0016a10b8012002200141f0016a41086a280200360200200120012903f0013703c801200141a8016a4120200141c8016a10c702200141106a10c008200128029c0141ffffff3f71450d01200128029801102e0c010b200010c0080b20014180026a24000b0e002001ad4220862000ad8410210b910302017f017e230041106b22022400200120004188016a41201074200029030021032002200041086a290300370308200220033703002001200241101074200029031021032002200041186a290300370308200220033703002001200241101074200029032021032002200041286a290300370308200220033703002001200241101074200029033021032002200041386a290300370308200220033703002001200241101074024002400240024002400240024020002d00400e06000102030405060b200241003a000020012002410110740c050b200241013a000020012002410110740c040b200241023a000020012002410110740c030b200241033a000020012002410110742001200041c1006a412010740c020b200241043a000020012002410110742001200041c1006a412010742002200041e4006a28020036020020012002410410740c010b200241053a000020012002410110742001200041c1006a412010742001200041e1006a41201074200220004184016a28020036020020012002410410740b200241106a24000b2c0020002002ad4220862001ad8410122201290000370000200041086a200141086a2900003700002001102e0ba10606057f017e027f017e027f017e230041206b2202240002400240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020002400240200641037122034103460d00024002400240024020030e03000102000b2006410276ad21070c020b200128020022012802042203450d04200128020022042d0000210520012003417f6a360204410121032001200441016a3602002005410874200672220141ffff0371418002490d03200141fcff0371410276ad21070c010b410121032001280200220128020422044103490d022001280200220541026a2d0000210820052f000021092001200541036a36020020012004417d6a3602042009200841107472410874200672220141808004490d022001410276ad21070b4200210a410021030c030b02400240024002402006410276220b0e0d00030303010303030303030302030b2001280200220328020422014104490d0420032802002206350000210720032001417c6a3602042003200641046a36020020074280808080045421034200210a0c050b2001280200220328020422014108490d032003280200220629000021072003200141786a3602042003200641086a3602002007428080808080808080015421034200210a0c040b2001280200220328020422014110490d022003280200220641086a290000210a200629000021072003200641106a3602002003200141706a360204200a428080808080808080015421030c030b200641334b0d01200b41046a21094100210441012103200241186a210c420021074200210a0340200128020022062802042205450d0120062802002208310000210d20062005417f6a3602042006200841016a360200200241106a200d4200200441037441f8007110ed08200c290300200a84210a20022903102007842107200441016a22062104200641ff01712009490d000b2002427f427f41e800200b4103746b41f8007110e4082007200229030058200a200241086a290300220d58200a200d511b21030c020b0c010b410121030b20002007370308200041106a200a37030020002003ad370300200241206a24000b130020004109360204200041a8b9c0003602000b3400200041bad7c70036020420004100360200200041146a4104360200200041106a41b8d6c000360200200041086a42083702000b4201027f230041106b2202240002404104102c22030d001036000b20004204370204200020033602002002410036020c20002002410c6a41041074200241106a24000b130020004107360204200041a4dcc0003602000b4401027f230041106b2202240002404104102c22030d001036000b2000420437020420002003360200200241a0c21e36020c20002002410c6a41041074200241106a24000b4501027f230041106b2202240002404104102c22030d001036000b2000420437020420002003360200200241808dcf0036020c20002002410c6a41041074200241106a24000b4401027f230041106b2202240002404104102c22030d001036000b200042043702042000200336020020024180840736020c20002002410c6a41041074200241106a24000be92007017f027e027f017e067f027e027f230041f0126b2202240042022103024002400240024002400240200129036822044202520d00200241106a20014198016a41b00210e9081a0c010b2002418e036a200141246a41c20010e9081a200241d0036a41086a220520014188016a290300370300200241d0036a41106a220620014190016a290300370300200220014180016a2903003703d003200141f8006a290300210320012903702107200128020821082001280204210920012d0000210a200241d00d6a41026a220b200141036a2d00003a000020024188046a41086a220c200141146a29020037030020024188046a41106a2001411c6a290200370300200220012f00013b01d00d2002200129020c37038804024002400240200a0e03020100010b2008450d002009102e0b200241f8116a41026a200241c8126a41026a2d00003a000020024188086a41086a200241980b6a41086a29030037030020024188086a410d6a200241980b6a410d6a290000370000200220022f01c8123b01f811200220022903980b37038808200041036a41003a0000200041013b0001200041013a000020014198016a108b020c030b200241980b6a410d6a220a20024188046a410d6a290000370000200241980b6a41086a220d200c290300370300200241f8116a41026a220c200b2d00003a000020024188086a41086a220b200d29030037030020024188086a410d6a220d200a290000370000200220022f01d00d3b01f8112002200229038804370388082002200c2d00003a00ea03200220022f01f8113b01e803200220083600ef03200220093600eb03200241e8036a41186a200d290000370000200241e8036a41136a200b29030037000020022002290388083700f303200241d00d6a20014198016a41b00210e9081a20024180106a41106a200629030037030020024180106a41086a2005290300370300200220022903d003370380104100210a200241d8116a4100108c02200241c8126a20022802d811220820022802e011108d0220022d00c8122101200241f8116a41186a2209200241e1126a290000370300200241f8116a41106a200241d9126a290000370300200241f8116a41086a200241d1126a290000370300200220022900c9123703f8110240024020014101460d00200241bd126a4200370000200241b8126a4200370300200241b0126a4200370300200242003703a8120c010b200241b0126a20024183126a290000370300200241a8126a41106a200241f8116a41136a290000370300200241bd126a2009290000370000200220022900fb113703a81220022f01f81120022d00fa1141107472210a0b024020022802dc11450d002008102e0b20024198116a41086a200241a8126a41086a29030037030020024198116a41106a200241a8126a41106a29030037030020024198116a41156a200241a8126a41156a290000370000200220022903a8123703981120024190126a22014200370300200241f8116a41106a22084200370300200241f8116a41086a22094200370300200242003703f811200241c8126a41d9fcc60041061081022009200241c8126a41086a2205290000370300200220022900c8123703f811200241c8126a4180f4cb00410610810220012005290000370300200820022900c812370300200241086a200241f8116a4120108e0241002101024020044201520d0020074200510d04200228020c410020022802081b2108417f210142002008ad220e20037d220f200f200e561b220e20037c200e2007827d220e42ffffffff0f560d00200ea721010b200241c8126a2001108c0220022802c812220920022802d012108f022108024020022802cc12450d002009102e0b2008450d0120024198126a2001108c02200241c8126a200228029812220820022802a012108d0220022d00c812210120024190126a2209200241e1126a290000370300200241f8116a41106a200241d9126a290000370300200241f8116a41086a200241d1126a290000370300200220022900c9123703f8110240024020014101460d00200241bd126a4200370000200241a8126a41106a4200370300200241a8126a41086a4200370300200242003703a812410021010c010b200241a8126a41086a20024183126a290000370300200241a8126a41106a2002418b126a290000370300200241bd126a2009290000370000200220022900fb113703a81220022f01f81120022d00fa114110747221010b0240200228029c12450d002008102e0b200241d8116a41156a2208200241a8126a41156a290000370000200241d8116a41106a2209200241a8126a41106a290300370300200241b8116a41106a22052009290300370300200241b8116a41156a22092008290000370000200241b8116a41086a200241a8126a41086a290300220e370300200241d8106a41086a2208200e370300200241d8106a41106a22062005290300370300200241d8106a41156a22052009290000370000200220022903a812220e3703b8112002200e3703d810200241f8106a41156a220920024198116a41156a290000370000200241f8106a41106a220b20024198116a41106a290300370300200241f8106a41086a220c20024198116a41086a29030037030020022002290398113703f810200241b8106a41156a220d2009290000370000200241b8106a41106a2209200b290300370300200241b8106a41086a220b200c290300370300200220022903f8103703b81020024198106a41156a220c200529000037000020024198106a41106a2205200629030037030020024198106a41086a22062008290300370300200220022903d81037039810200241e00a6a41156a2208200d290000370000200241e00a6a41106a220d2009290300370300200241e00a6a41086a2209200b290300370300200220022903b8103703e00a200241c00a6a41156a220b200c290000370000200241c00a6a41106a220c2005290300370300200241c00a6a41086a2205200629030037030020022002290398103703c00a200241800b6a41106a220620024180106a41106a290300370300200241800b6a41086a221020024180106a41086a29030037030020022002290380103703800b200241980b6a41046a200241d00d6a41b00210e9081a20024188086a200241980b6a41b40210e9081a200241f0076a41106a22112006290300370300200241f0076a41086a22062010290300370300200241d0076a41086a22102009290300370300200241d0076a41106a2209200d290300370300200241d0076a41156a220d2008290000370000200241b0076a41086a22082005290300370300200241b0076a41106a2205200c290300370300200241b0076a41156a220c200b290000370000200220022903800b3703f007200220022903e00a3703d007200220022903c00a3703b00720024188046a20024188086a41046a41b00210e9081a200241f2066a200a4110763a0000200241f0066a200a3b0100200241c8066a2003370300200241c0066a2007370300200241d0066a220a20022903f007370300200241d8066a2006290300370300200241e0066a22062011290300370300200241f3066a20022903d007370000200241fb066a201029030037000020024183076a200929030037000020024188076a200d290000370000200220043703b8062002429e808080f0003703e80620024192076a20014110763a000020024190076a20013b010020024193076a20022903b0073700002002419b076a2008290300370000200241a3076a2005290300370000200241a8076a200c2900003700004108102c2201450d042002420837028c08200220013602880820024188046a20024188086a1090020240024020022903b8064201520d00200220022903c80620022903c0062203420c882204420120044201561b80a741047420037aa7417f6a22014101200141014b1b2201410f2001410f491b723b01980b20024188086a200241980b6a410210740c010b200241003a00980b20024188086a200241980b6a410110740b200620024188086a1091022002200a3602980b200241980b6a20024188086a10af01200220022802e8063602980b20024188086a200241980b6a41041074200220022802ec063602980b20024188086a200241980b6a410410744120102c2201450d042002422037029c0b200220013602980b200241980b6a200241f0066a4120107420024188086a20022802980b220120022802a00b10740240200228029c0b450d002001102e0b4120102c2201450d042002422037029c0b200220013602980b200241980b6a20024190076a4120107420024188086a20022802980b220120022802a00b10740240200228029c0b450d002001102e0b200228028808210102400240200228029008220a418102490d00200241f8116a2001200a10b0012002418e036a200241f8116a4120200241e8036a10920221010c010b2002418e036a2001200a200241e8036a10920221010b0240200228028c08450d00200228028808102e0b024020010d0020004180083b0001200041013a0000200041036a41003a000020024188046a108b020c030b200241e8026a41086a200241e8036a41086a290300370300200241e8026a41106a200241e8036a41106a290300370300200241e8026a41186a200241e8036a41186a290300370300200241c0026a41086a200241c8066a290300370300200241c0026a41106a200241d0066a290300370300200241c0026a41186a200241d8066a290300370300200241e0026a200241e0066a290300370300200220022903e8033703e8022002200241c0066a2903003703c00220022903b8062103200241106a20024188046a41b00210e9081a0b200041086a20022903e802370300200041286a2003370300200041306a20022903c002370300200041206a200241e8026a41186a290300370300200041186a200241e8026a41106a290300370300200041106a200241e8026a41086a290300370300200041386a200241c0026a41086a290300370300200041c0006a200241c0026a41106a290300370300200041c8006a200241c0026a41186a290300370300200041d0006a200241c0026a41206a290300370300200041d8006a200241106a41b00210e9081a200041003a00000c010b200241b8116a41156a200241d8116a41156a290000370000200241b8106a41086a200241f8106a41086a290000370300200241b8106a41106a200241f8106a41106a290000370300200241b8106a41156a200241f8106a41156a29000037000020024198106a41156a200241d8106a41156a290000370000200220022900f8103703b810200241d00d6a108b0220024188086a200241980b6a41b40210e9081a200241f0076a41106a200241800b6a41106a290300370300200241f0076a41086a200241800b6a41086a290300370300200241d0076a41086a200241e00a6a41086a290000370300200241d0076a41106a200241e00a6a41106a290000370300200241d0076a41156a200241e00a6a41156a290000370000200241b0076a41086a200241c00a6a41086a290000370300200241b0076a41106a200241c00a6a41106a290000370300200241b0076a41156a200241c00a6a41156a290000370000200220022903800b3703f007200220022900e00a3703d007200220022900c00a3703b007200041036a41003a0000200041800a3b0001200041013a00000b200241f0126a24000f0b41d0e7cc00411941ece7cc001039000b1036000ba62801047f024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002802000e1b00010218180304051806070818090a0b0c0d0e0f10111213141516170b0240024002400240024002400240200041086a2802000e0a1e1e001e01021e030405060b200041106a280200450d1d2000410c6a280200102e0f0b200041106a280200450d1c2000410c6a280200102e0f0b200041106a280200450d1b2000410c6a280200102e0f0b0240200041146a2802002201450d002000410c6a2802002102200141186c210103400240200241046a280200450d002002280200102e0b0240200241106a280200450d002002410c6a280200102e0b200241186a2102200141686a22010d000b0b200041106a2802002202450d1a200241186c450d1a200028020c102e0f0b0240200041146a2802002201450d002000410c6a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041106a2802002202450d192002410c6c450d19200028020c102e0f0b200041106a280200450d182000410c6a280200102e0f0b200041106a280200450d172000410c6a280200102e0f0b0240024002400240024020002d00040e061b001b010203040b200041186a2202280200108b022002280200102e0f0b02402000410c6a280200450d00200041086a280200102e0b200041246a2202280200108b022002280200102e0f0b2000410c6a280200450d18200041086a280200102e0f0b200041186a2202280200108b022002280200102e0f0b02402000410c6a280200450d00200041086a280200102e0b200041246a2202280200108b022002280200102e0f0b02400240200041086a280200417f6a0e020001170b2000412c6a220110e1010240200041306a2802002202450d00200241246c450d002001280200102e0b2000419c016a220110e1010240200041a0016a2802002202450d00200241246c450d002001280200102e0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d162002410c6c450d162000280210102e0f0b2000412c6a220110e1010240200041306a2802002202450d00200241246c450d002001280200102e0b2000419c016a220110e1010240200041a0016a2802002202450d00200241246c450d002001280200102e0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d152002410c6c450d152000280210102e0f0b0240024002400240200041086a2802000e0418000102030b2000410c6a2d00004102470d17200041146a280200450d17200041106a280200102e0f0b2000410c6a2d00004102470d16200041146a280200450d16200041106a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004102470d15200041386a280200450d15200041346a280200102e0f0b2000410c6a2d00004102470d14200041146a280200450d14200041106a280200102e0f0b02402000410c6a2802002201450d0020002802042202200141f0006c6a21030340024020022204410c6a2802002201450d0020042802042102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b200441f0006a21020240200441086a2802002201450d00200141246c450d002004280204102e0b20022003470d000b0b200041086a2802002202450d13200241f0006c450d132000280204102e0f0b024002400240024002400240200041086a2d00000e171800181818180118180218181818180318180418181818050b2000412c6a2d00004102470d17200041346a280200450d17200041306a280200102e0f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b200041106a2802002202450d16200241246c450d16200028020c102e0f0b2000410c6a2d00004102470d15200041146a280200450d15200041106a280200102e0f0b200041106a28020041ffffff3f71450d142000410c6a280200102e0f0b200041146a28020041ffffffff0371450d13200041106a280200102e0f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b200041106a2802002202450d12200241246c450d12200028020c102e0f0b20002802042202450d11200041086a280200450d112002102e0f0b02400240200041086a280200417f6a0e020001120b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d112002410c6c450d112000280210102e0f0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d102002410c6c450d102000280210102e0f0b02402000410c6a280200450d00200041086a280200102e0b02402000411c6a2802002201450d00200041146a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041186a2802002202450d0f2002410c6c450d0f2000280214102e0f0b0240024002400240200041086a2d000041716a0e0400010203120b200041106a280200450d112000410c6a280200102e0f0b200041106a280200450d102000410c6a280200102e0f0b200041106a280200450d0f2000410c6a280200102e0f0b200041106a280200450d0e2000410c6a280200102e0f0b024002400240200041086a2d0000417f6a0e03000102100b200041306a28020041ffffff3f71450d0f2000412c6a280200102e0f0b2000410c6a2202280200108b022002280200102e0f0b200041106a2202280200108b022002280200102e0f0b024002400240200041086a2d0000417f6a0e030001020f0b200041306a28020041ffffff3f71450d0e2000412c6a280200102e0f0b2000410c6a2202280200108b022002280200102e0f0b200041106a2202280200108b022002280200102e0f0b02400240200041086a2d0000417f6a0e05000d0d0d010d0b200041106a28020041ffffff3f71450d0c2000410c6a280200102e0f0b2000410c6a2d00004102470d0b200041146a280200450d0b200041106a280200102e0f0b20002d00044104470d0a2000410c6a28020041ffffff3f71450d0a200041086a280200102e0f0b200041086a2802004101470d092000410c6a2d00004102470d09200041146a280200450d09200041106a280200102e0f0b02400240200041086a2d0000417d6a0e0200010a0b200041f0006a280200450d09200041ec006a280200102e0f0b200041106a280200450d082000410c6a280200102e0f0b024002400240200041086a2802000e040a0a0001020b2000410c6a2d00004102470d09200041146a280200450d09200041106a280200102e0f0b2000410c6a2d00004102470d08200041146a280200450d08200041106a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004102470d07200041386a280200450d07200041346a280200102e0f0b02400240024020002f01040e03090001020b0240200041106a2802002201450d00200041086a2802002102200141b0026c210103402002109601200241b0026a2102200141d07d6a22010d000b0b2000410c6a2802002202450d08200241b0026c450d082000280208102e0f0b200041086a2202280200108b022002280200102e0f0b0240200041106a2802002201450d00200041086a2802002102200141b0026c210103402002109601200241b0026a2102200141d07d6a22010d000b0b2000410c6a2802002202450d06200241b0026c450d062000280208102e0f0b0240024002400240024002400240200041086a2d0000417e6a0e0d00010c0c0c0c0c0c02030405060c0b0240200041146a2802002201450d002000410c6a2802002202200141c8006c6a21010340024020022d00004101470d00200241086a280200450d00200241046a280200102e0b0240200241246a2d00004101470d002002412c6a280200450d00200241286a280200102e0b200241c8006a22022001470d000b0b0240200041106a2802002202450d00200241c8006c450d00200028020c102e0b0240200041186a2d00004101470d00200041206a280200450d002000411c6a280200102e0b02402000413c6a2d00004101470d00200041c4006a280200450d00200041c0006a280200102e0b0240200041e0006a2d00004101470d00200041e8006a280200450d00200041e4006a280200102e0b024020004184016a2d00004101470d002000418c016a280200450d0020004188016a280200102e0b0240200041a8016a2d00004101470d00200041b0016a280200450d00200041ac016a280200102e0b0240200041cc016a2d00004101470d00200041d4016a280200450d00200041d0016a280200102e0b200041f0016a2d00004101470d0b200041f8016a280200450d0b200041f4016a280200102e0f0b0240200041146a2802002202450d00200241c4006c21012000410c6a28020041286a210203400240200241786a2d00004101470d002002280200450d002002417c6a280200102e0b200241c4006a2102200141bc7f6a22010d000b0b200041106a2802002202450d0a200241c4006c450d0a200028020c102e0f0b200041106a2d00004102470d09200041186a280200450d09200041146a280200102e0f0b2000410c6a2d00004102470d08200041146a280200450d08200041106a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004101470d07200041386a280200450d07200041346a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004101470d06200041386a280200450d06200041346a280200102e0f0b2000410c6a2d00004102470d05200041146a280200450d05200041106a280200102e0f0b20002d00042202417e6a4108490d040240024020020e020600010b200041286a2202280200108b022002280200102e0f0b200041c8006a2202280200108b022002280200102e0f0b0240024002400240200041086a2d00000e0407000102030b0240200041106a28020041ffffff3f71450d002000410c6a280200102e0b200041186a2202280200108b022002280200102e0f0b0240200041106a28020041ffffff3f71450d002000410c6a280200102e0b200041286a280200450d05200041246a280200102e0f0b200041306a28020041ffffff3f71450d042000412c6a280200102e0f0b200041306a28020041ffffff3f71450d032000412c6a280200102e0f0b0240024002400240200041086a2802000e09060006010606020606030b200041106a280200450d052000410c6a280200102e0f0b200041106a2d00004102470d04200041186a280200450d04200041146a280200102e0f0b200041106a2d00004102470d03200041186a280200450d03200041146a280200102e0f0b200041146a280200450d02200041106a280200102e0f0b02400240200041086a2d0000417f6a0e03000301030b200041306a280200450d022000412c6a280200102e0c020b200041306a280200450d012000412c6a280200102e0f0b02402000413c6a28020041ffffffff0171450d00200041386a280200102e0b0240200041c8006a2802002202450d002002410c6c450d00200041c4006a280200102e0b0240200041d4006a28020041ffffffff0071450d00200041d0006a280200102e0b0240200041e0006a2802002202450d00200241146c450d00200041dc006a280200102e0b0240200041ec006a2802002202450d00200241186c450d00200041e8006a280200102e0b0240200041f8006a2802002202450d002002411c6c450d00200041f4006a280200102e0b024020004184016a28020041ffffff3f71450d0020004180016a280200102e0b024020004190016a2802002202450d00200241246c450d002000418c016a280200102e0b02402000419c016a2802002202450d00200241286c450d0020004198016a280200102e0b0240200041a8016a2802002202450d002002412c6c450d00200041a4016a280200102e0b0240200041b4016a2802002202450d00200241306c450d00200041b0016a280200102e0b0240200041c0016a2802002202450d00200241346c450d00200041bc016a280200102e0b0240200041cc016a2802002202450d00200241386c450d00200041c8016a280200102e0b0240200041d8016a2802002202450d002002413c6c450d00200041d4016a280200102e0b0240200041e4016a28020041ffffff1f71450d00200041e0016a280200102e0b200041f0016a2802002202450d00200241c4006c450d00200041ec016a280200102e0f0b0b850201037f230041d0006b22022400200241086a41d9fcc6004106108102200241186a41a0f3cb004109108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000b9d0902047f017e230041b0016b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022010d00200041003a00000c010b200341186a280200210220032802142104200341003a0060024002402002450d00200320012d00003a0040200341013a0060024020024101460d00200320012d00013a0041200341023a006020024102460d00200320012d00023a0042200341033a006020024103460d00200320012d00033a0043200341043a006020024104460d00200320012d00043a0044200341053a006020024105460d00200320012d00053a0045200341063a006020024106460d00200320012d00063a0046200341073a006020024107460d00200320012d00073a0047200341083a006020024108460d00200320012d00083a0048200341093a006020024109460d00200320012d00093a00492003410a3a00602002410a460d00200320012d000a3a004a2003410b3a00602002410b460d00200320012d000b3a004b2003410c3a00602002410c460d00200320012d000c3a004c2003410d3a00602002410d460d00200320012d000d3a004d2003410e3a00602002410e460d00200320012d000e3a004e2003410f3a00602002410f460d00200320012d000f3a004f200341103a006020024110460d00200320012d00103a0050200341113a006020024111460d00200320012d00113a0051200341123a006020024112460d00200320012d00123a0052200341133a006020024113460d00200320012d00133a0053200341143a006020024114460d00200320012d00143a0054200341153a006020024115460d00200320012d00153a0055200341163a006020024116460d00200320012d00163a0056200341173a006020024117460d00200320012d00173a0057200341183a006020024118460d00200320012d00183a0058200341193a006020024119460d00200320012d00193a00592003411a3a00602002411a460d00200320012d001a3a005a2003411b3a00602002411b460d00200320012d001b3a005b2003411c3a00602002411c460d00200320012d001c3a005c2003411d3a00602002411d460d00200320012d001d3a005d2003411e3a00602002411e460d00200320012d001e3a005e2003411f3a00602002411f460d00200341206a41106a2202200341c0006a41106a290300370300200341206a41086a2205200341c0006a41086a290300370300200320012d001f3a005f200341206a41186a2206200341c0006a41186a290300370300200341203a006020032003290340220737036820032007370320200041196a2006290300370000200041116a2002290300370000200041096a200529030037000020002003290320370001410121020c020b200341003a00600b20034100360270200342013703682003410a3602242003200341086a3602202003200341e8006a3602ac01200341d4006a410136020020034201370244200341909dc5003602402003200341206a360250200341ac016a419cebc000200341c0006a103d1a2003280268200328027010ef020240200328026c450d002003280268102e0b410021020b200020023a00002004450d002001102e0b200341b0016a24000b840201037f230041d0006b220324002003200236020420032001360200200341086a2001200210ed0202400240200328020822040d00410021010c010b200328020c210502400240200341106a2802004104490d0020042800002102410121010c010b4100210120034100360220200342013703182003410a36022c200320033602282003200341186a360234200341cc006a41013602002003420137023c200341909dc5003602382003200341286a360248200341346a419cebc000200341386a103d1a2003280218200328022010ef020240200328021c450d002003280218102e0b0b2005450d002004102e0b2000200236020420002001360200200341d0006a24000b11002001ad4220862000ad8410244101460bf97002067f017e230041106b2202240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002802000e1c000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c0b200241003a000020012002410110740240024002400240024002400240024002400240200041086a280200417f6a0e0a00010203040506070809250b200241003a0000200120024101107420022000410c6a28020036020020012002410410740c240b200241013a000020012002410110742000410c6a2802002103200041146a28020022002001107620012003200010740c230b200241023a000020012002410110742002200041106a29030037030020012002410810740c220b200241033a000020012002410110742000410c6a2802002103200041146a28020022002001107620012003200010740c210b200241043a000020012002410110742000410c6a2802002103200041146a28020022002001107620012003200010740c200b200241053a0000200120024101107402402000410c6a2802004101460d00200241003a000020012002410110740c200b200241013a000020012002410110742002200041106a28020036020020012002410410742002200041146a28020036020020012002410410740c1f0b200241063a000020012002410110742000410c6a2802002103200041146a2802002200200110762000450d1e2003200041186c6a2104034020032802002100200341086a28020022052001107620012000200510742003410c6a2802002100200341146a2802002205200110762001200020051074200341186a22032004470d000c1f0b0b200241073a000020012002410110742000410c6a2802002103200041146a2802002200200110762000450d1d20032000410c6c6a2104034020032802002100200341086a28020022052001107620012000200510742003410c6a22032004470d000c1e0b0b200241083a000020012002410110742000410c6a2802002103200041146a28020022052001107620012003200510742002200041186a28020036020020012002410410740c1c0b200241093a000020012002410110742000410c6a2802002103200041146a28020022002001107620012003200010740c1b0b200241013a0000200120024101107402400240024002400240024020002d0004417f6a0e06000102030405200b200241003a000020012002410110742002200041086a2802003602002001200241041074024002402000410c6a2802004101460d00200241003a000020012002410110740c010b200241013a000020012002410110742002200041106a28020036020020012002410410742002200041146a28020036020020012002410410740b200220002d00053a00002001200241011074200028021820011090020c1f0b200241013a000020012002410110742002200041086a280200360200200120024104107420022000410c6a28020036020020012002410410740c1e0b200241023a00002001200241011074200041086a2802002103200041106a28020022052001107620012003200510742002200041146a280200360200200120024104107402400240200041186a2802004101460d00200241003a000020012002410110740c010b200241013a0000200120024101107420022000411c6a28020036020020012002410410742002200041206a28020036020020012002410410740b200220002d00053a00002001200241011074200028022420011090020c1d0b200241033a00002001200241011074200041086a2802002103200041106a28020022002001107620012003200010740c1c0b200241043a000020012002410110742002200041086a2802003602002001200241041074024002402000410c6a2802004101460d00200241003a000020012002410110740c010b200241013a000020012002410110742002200041106a28020036020020012002410410742002200041146a28020036020020012002410410740b200220002d00053a00002001200241011074200028021820011090020c1b0b200241053a00002001200241011074200041086a2802002103200041106a28020022052001107620012003200510742002200041146a280200360200200120024104107402400240200041186a2802004101460d00200241003a000020012002410110740c010b200241013a0000200120024101107420022000411c6a28020036020020012002410410742002200041206a28020036020020012002410410740b200220002d00053a00002001200241011074200028022420011090020c1a0b200241023a00002001200241011074024002400240200041086a280200417f6a0e030001021c0b200241003a00002001200241011074200120004188026a412010742002200041206a2903003703002001200241081074200041286a2001108f0620004198016a2001108f0620022000410c6a2802003602002001200241041074200041106a2802002103200041186a28020022052001107602402005450d0020032005410c6c6a2106034020032802002105200341086a28020022042001107620012005200410742003410c6a22032006470d000b0b20022000411c6a28020036020020012002410410740c1b0b200241013a00002001200241011074200120004188026a412010742002200041206a2903003703002001200241081074200041286a2001108f0620004198016a2001108f0620022000410c6a2802003602002001200241041074200041106a2802002103200041186a28020022052001107602402005450d0020032005410c6c6a2106034020032802002105200341086a28020022042001107620012005200410742003410c6a22032006470d000b0b20022000411c6a28020036020020012002410410740c1a0b200241023a00002001200241011074200041106a20011096020c190b200241033a00002001200241011074200241003a00002001200241011074200041086a200110dc040c180b200241043a00002001200241011074200041046a21030240024002400240024020002d0004417f6a0e0500010203041c0b200241003a000020012002410110742002200041086a28020036020020012002410410740c1b0b200241013a000020012002410110742001200341016a412010742002200041286a28020036020020012002410410740c1a0b200241023a000020012002410110742002200041086a28020036020020012002410410740c190b200241033a000020012002410110742001200341016a412010742002200041286a2802003602002001200241041074200220002d00253a000020012002410110740c180b200241043a000020012002410110742002200041086a28020036020020012002410410740c170b200241053a000020012002410110740240024002400240200041086a280200417f6a0e04000102031a0b200241003a000020012002410110742000410c6a200110f5012002200041306a3602002002200110af010c190b200241013a000020012002410110742000410c6a200110f5012002200041306a3602002002200110af012002200041c0006a3602002002200110af010c180b200241023a000020012002410110742000410c6a200110f501200041306a200110f5012002200041d8006a3602002002200110af010c170b200241033a000020012002410110742000410c6a200110f5012002200041306a3602002002200110af010c160b200241063a00002001200241011074200241003a00002001200241011074200028020421032000410c6a2802002200200110762000450d15200041f0006c2100034020032001108f06200341f0006a2103200041907f6a22000d000c160b0b200241073a0000200120024101107402400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200041086a22032d0000417f6a0e17000102030405060708090a0b0c0d0e0f101112131415162b0b200241003a000020012002410110742000412c6a200110f5012002200041d0006a3602002002200110af010240024002400240024020002d00090e0500010203042f0b200241003a000020012002410110740c2e0b200241013a000020012002410110740c2d0b200241023a000020012002410110740c2c0b200241033a000020012002410110742001200341026a412010740c2b0b200241043a000020012002410110740c2a0b200241013a000020012002410110742002200041106a3602002002200110af010c290b200241023a000020012002410110742002200041106a3602002002200110af010c280b200241033a0000200120024101107420022000410c6a28020036020020012002410410740c270b200241043a000020012002410110742000410c6a20011091022002200041106a2d00003a000020012002410110740c260b200241053a000020012002410110742000410c6a2802002103200041146a280200220020011076200041246c2200450d2503402003200110f501200341246a21032000415c6a22000d000c260b0b200241063a000020012002410110740c240b200241073a000020012002410110740240024002400240024020032d00010e050001020304280b200241003a000020012002410110740c270b200241013a000020012002410110740c260b200241023a000020012002410110740c250b200241033a000020012002410110742001200341026a412010740c240b200241043a000020012002410110740c230b200241083a000020012002410110742000410c6a200110f5010c220b200241093a000020012002410110742000410c6a20011091020c210b2002410a3a000020012002410110742000410c6a20011091020c200b2002410b3a00002001200241011074200220032d00013a000020012002410110740c1f0b2002410c3a000020012002410110740c1e0b2002410d3a000020012002410110740c1d0b2002410e3a000020012002410110742000410c6a2802002103200041146a2802002200200110762000450d1c2000410574210003402001200341201074200341206a2103200041606a22000d000c1d0b0b2002410f3a000020012002410110742001200341016a4120107420022000412c6a28020036020020012002410410740c1b0b200241103a000020012002410110740c1a0b200241113a0000200120024101107420022000410c6a2802003602002001200241041074200041106a2802002103200041186a28020022002001107620012003200041027410740c190b200241123a000020012002410110742001200341016a4120107420022000412c6a28020036020020012002410410740c180b200241133a000020012002410110742002200041106a3602002002200110af010c170b200241143a000020012002410110742000410c6a2001109102200041106a20011091020c160b200241153a000020012002410110742001200341016a4120107420022000412c6a28020036020020012002410410740c150b200241163a000020012002410110742000410c6a2802002103200041146a280200220020011076200041246c2200450d1403402003200110f501200341246a21032000415c6a22000d000c150b0b200241083a00002001200241011074200110b6040c130b200241093a0000200120024101107402402000280204450d00200241003a000020012002410110742001200041106a412010742001200041306a412010742001200041d0006a412010742001200041f0006a41201074200120004190016a412010742001200041b0016a41201074200028020421032000410c6a28020022002001107620012003200010740c130b200241013a000020012002410110740c120b2002410b3a00002001200241011074024002400240200041086a280200417f6a0e03000102140b200241003a00002001200241011074200041206a200110900620022000410c6a2802003602002001200241041074200041106a2802002103200041186a28020022052001107602402005450d0020032005410c6c6a2106034020032802002105200341086a28020022042001107620012005200410742003410c6a22032006470d000b0b20022000411c6a28020036020020012002410410740c130b200241013a00002001200241011074200041206a200110900620022000410c6a2802003602002001200241041074200041106a2802002103200041186a28020022052001107602402005450d0020032005410c6c6a2106034020032802002105200341086a28020022042001107620012005200410742003410c6a22032006470d000b0b20022000411c6a28020036020020012002410410740c120b200241023a0000200120024101107420022000410c6a28020036020020012002410410742002200041106a28020036020020012002410410740c110b2002410c3a00002001200241011074200241003a00002001200241011074200220002802043602002001200241041074200041086a2802002103200041106a2802002205200110762001200320051074200041146a28020021032000411c6a2802002205200110762000412c6a210702402005450d0020032005410c6c6a2106034020032802002105200341086a28020022042001107620012005200410742003410c6a22032006470d000b0b2002200041206a28020036020020012002410410742002200041246a28020036020020012002410410742002200041286a28020036020020012002410410742001200741c00010740c100b2002410d3a00002001200241011074200110b6040c0f0b2002410e3a000020012002410110740240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200041086a22032d0000417f6a0e19000102030405060708090a0b0c0d0e0f101112131415161718270b200241003a000020012002410110744120102c2205450d27200041306a210020024220370204200220053602002002200341016a412010742001200228020022032002280208107402402002280204450d002003102e0b200220003602002002200110af010c260b200241013a000020012002410110742000410c6a2001109102200041106a20011091020c250b200241023a000020012002410110742000410c6a2001109102200041106a200110b2040c240b200241033a0000200120024101107420022000410c6a28020036020020012002410410740c230b200241043a000020012002410110744120102c2200450d2320024220370204200220003602002002200341016a41201074200120022802002200200228020810742002280204450d222000102e0c220b200241053a000020012002410110744120102c2200450d2220024220370204200220003602002002200341016a41201074200120022802002200200228020810742002280204450d212000102e0c210b200241063a000020012002410110744120102c2200450d2120024220370204200220003602002002200341016a41201074200120022802002200200228020810742002280204450d202000102e0c200b200241073a000020012002410110744120102c2205450d2020024220370204200220053602002002200341016a412010742001200228020022032002280208107402402002280204450d002003102e0b2002200028022c36020020012002410410742002200028023036020020012002410410740c1f0b200241083a000020012002410110744120102c2200450d1f20024220370204200220003602002002200341016a41201074200120022802002200200228020810742002280204450d1e2000102e0c1e0b200241093a000020012002410110742000410c6a20011091020c1d0b2002410a3a0000200120024101107420022000410c6a28020036020020012002410410740c1c0b2002410b3a000020012002410110742001200341016a4120107420002d002920011073200041306a29030021082002200041386a2903003703082002200837030020012002411010740c1b0b2002410c3a000020012002410110740c1a0b2002410d3a000020012002410110740c190b2002410e3a000020012002410110742000410c6a2802002103200041146a28020022002001107620012003200010740c180b2002410f3a000020012002410110742000410c6a2802002103200041146a28020022002001107620012003200010740c170b200241103a000020012002410110742000410c6a2802002103200041146a28020022002001107620012003200010740c160b200241113a000020012002410110742000410c6a2802002103200041146a28020022002001107620012003200010740c150b200241123a000020012002410110744120102c2205450d152000412c6a210020024220370204200220053602002002200341016a412010742001200228020022032002280208107402402002280204450d002003102e0b200020011091020c140b200241133a000020012002410110742001200341016a412010740c130b200241143a0000200120024101107420022000410c6a28020036020020012002410410740c120b200241153a000020012002410110742001200341016a4120107420022000412c6a28020036020020012002410410740c110b200241163a000020012002410110744120102c2205450d1120024220370204200220053602002002200341016a412010742001200228020022032002280208107402402002280204450d002003102e0b2002200028022c36020020012002410410740c100b200241173a000020012002410110744120102c2205450d1020024220370204200220053602002002200341016a412010742001200228020022032002280208107402402002280204450d002003102e0b0240200028022c4101460d00200241003a000020012002410110740c100b200241013a000020012002410110742002200041306a28020036020020012002410410740c0f0b200241183a000020012002410110742000410c6a20011091020c0e0b2002410f3a00002001200241011074024002400240024002400240200041086a22042d0000417f6a0e06000102030405130b200241003a000020012002410110742000412c6a2802002103200041346a28020022052001107602402005450d002005410574210503402001200341201074200341206a2103200541606a22050d000b0b0240024020042d00014101460d00200241003a000020012002410110740c010b200241013a000020012002410110742001200441026a412010740b2002200028023836020020012002410410740c120b200241013a000020012002410110742000410c6a2802002001109002200041106a20011091020c110b200241023a000020012002410110742000410c6a2001109102200041106a2802002001109002200041146a20011091020c100b200241033a000020012002410110744120102c2203450d102000412c6a210020024220370204200220033602002002200441016a412010742001200228020022032002280208107402402002280204450d002003102e0b20002001109102200220042d00213a000020012002410110740c0f0b200241043a000020012002410110744120102c2203450d0f200041306a2105200041386a21062000412c6a210020024220370204200220033602002002200441016a412010742001200228020022032002280208107402402002280204450d002003102e0b200020011091022006200110dc04200520011091020c0e0b200241053a000020012002410110744120102c2200450d0e20024220370204200220003602002002200441016a41201074200120022802002200200228020810742002280204450d0d2000102e0c0d0b200241103a00002001200241011074024002400240024002400240200041086a22042d0000417f6a0e06000102030405120b200241003a000020012002410110742000412c6a2802002103200041346a28020022052001107602402005450d002005410574210503402001200341201074200341206a2103200541606a22050d000b0b0240024020042d00014101460d00200241003a000020012002410110740c010b200241013a000020012002410110742001200441026a412010740b2002200028023836020020012002410410740c110b200241013a000020012002410110742000410c6a2802002001109002200041106a20011091020c100b200241023a000020012002410110742000410c6a2001109102200041106a2802002001109002200041146a20011091020c0f0b200241033a000020012002410110744120102c2203450d0f2000412c6a210020024220370204200220033602002002200441016a412010742001200228020022032002280208107402402002280204450d002003102e0b20002001109102200220042d00213a000020012002410110740c0e0b200241043a000020012002410110744120102c2203450d0e200041306a2105200041386a21062000412c6a210020024220370204200220033602002002200441016a412010742001200228020022032002280208107402402002280204450d002003102e0b200020011091022006200110dc04200520011091020c0d0b200241053a000020012002410110744120102c2200450d0d20024220370204200220003602002002200441016a41201074200120022802002200200228020810742002280204450d0c2000102e0c0c0b200241113a00002001200241011074024002400240024002400240200041086a2d0000417f6a0e06000102030405110b200241003a000020012002410110742000410c6a2802002103200041146a280200220520011076200041186a210402402005450d002005410574210003402001200341201074200341206a2103200041606a22000d000b0b200220043602002002200110af010c100b200241013a000020012002410110740c0f0b200241023a000020012002410110742000410c6a20011091020c0e0b200241033a000020012002410110740240024002402000410c6a2802000e03000102100b200241003a000020012002410110740c0f0b200241013a000020012002410110740c0e0b200241023a00002001200241011074200041106a20011091020c0d0b200241043a000020012002410110742000410c6a200110f501200220002d00093a000020012002410110740c0c0b200241053a0000200120024101107420022000410c6a28020036020020012002410410742002200041106a28020036020020012002410410740c0b0b200241123a00002001200241011074200041046a2103024002400240024002400240024020002d0004417f6a0e0700010203040506110b200241003a000020012002410110742001200341016a412010740c100b200241013a000020012002410110742001200341016a412010740c0f0b200241023a000020012002410110742001200341016a412010742001200341216a412010740c0e0b200241033a00002001200241011074200041086a2802002103200041106a2802002200200110762000450d0d2000410574210003402001200341201074200341206a2103200041606a22000d000c0e0b0b200241043a000020012002410110742001200341016a412010740c0c0b200241053a000020012002410110742001200341016a412010740c0b0b200241063a000020012002410110740c0a0b200241133a00002001200241011074024002400240200041086a280200417f6a0e030001020c0b200241003a000020012002410110742002200041306a3602002002200110af012000410c6a200110f5010c0b0b200241013a000020012002410110742000410c6a20011091020c0a0b200241023a000020012002410110742000410c6a20011091020c090b200241183a0000200120024101107402400240024002400240200041086a22032d0000417f6a0e0500010203040d0b200241003a000020012002410110742001200341016a412010742001200341216a41c10010740c0c0b200241013a000020012002410110742001200341016a41141074200041206a29030021082002200041286a29030037030820022008370300200120024110107402400240200041306a2903004201510d00200241003a000020012002410110740c010b200241013a00002001200241011074200041386a29030021082002200041c0006a290300370308200220083703002001200241101074200041c8006a29030021082002200041d0006a2903003703082002200837030020012002411010742002200041d8006a28020036020020012002410410740b024020032d001522004102470d00200241003a000020012002410110740c0c0b200241013a00002001200241011074024020004101460d00200241003a000020012002410110740c0c0b200241013a000020012002410110740c0b0b200241023a000020012002410110742001200341016a412010742001200341216a41c1001074200041ec006a2802002103200041f4006a28020022002001107620012003200010740c0a0b200241033a000020012002410110742000410c6a2802002103200041146a28020022002001107620012003200010740c090b200241043a000020012002410110742001200341016a411410742001200341156a411410740240200341296a2d00004101460d00200241003a000020012002410110740c090b200241013a0000200120024101107420012003412a6a412010740c080b200241193a000020012002410110740240024002400240200041086a280200417f6a0e04000102030b0b200241003a000020012002410110740c0a0b200241013a000020012002410110742000410c6a200110f5010c090b200241023a000020012002410110742000410c6a200110f501200041306a29030021082002200041386a290300370308200220083703002001200241101074200041c0006a29030021082002200041c8006a2903003703082002200837030020012002411010742002200041d0006a28020036020020012002410410740c080b200241033a000020012002410110742000410c6a200110f501200041306a200110f501200041d8006a29030021082002200041e0006a290300370308200220083703002001200241101074200041e8006a29030021082002200041f0006a2903003703082002200837030020012002411010742002200041f8006a28020036020020012002410410740c070b2002411a3a0000200120024101107402400240024020002f0104417f6a0e03000102090b200241003a00002001200241011074200041086a2802002103200041106a280200220020011076200041b0026c2200450d08034020032001109002200341b0026a2103200041d07d6a22000d000c090b0b200241013a00002001200241011074200220002f01063b01002001200241021074200041086a28020020011090020c070b200241023a00002001200241011074200041086a2802002103200041106a280200220020011076200041b0026c2200450d06034020032001109002200341b0026a2103200041d07d6a22000d000c070b0b2002411c3a00002001200241011074024002400240024002400240024002400240024002400240024002400240200041086a22032d0000417f6a0e0f000102030405060708090a0b0c0d0e140b200241003a000020012002410110742001200341016a412010740c130b200241013a000020012002410110742000410c6a200110b7012002200041186a108a012001200228020022032002280208107402402002280204450d002003102e0b20022000413c6a108a012001200228020022032002280208107402402002280204450d002003102e0b2002200041e0006a108a012001200228020022032002280208107402402002280204450d002003102e0b200220004184016a108a012001200228020022032002280208107402402002280204450d002003102e0b2002200041a8016a108a012001200228020022032002280208107402402002280204450d002003102e0b0240024020004194026a22032d00004101460d00200241003a000020012002410110740c010b200241013a000020012002410110742001200341016a411410740b2002200041cc016a108a012001200228020022032002280208107402402002280204450d002003102e0b2002200041f0016a108a01200120022802002200200228020810742002280204450d122000102e0c120b200241023a000020012002410110742000410c6a2802002103200041146a280200220020011076200041c4006c2200450d11200320006a2105034020012003412010742002200341206a2200108a012001200228020022032002280208107402402002280204450d002003102e0b200041246a22032005470d000c120b0b200241033a000020012002410110740c100b200241043a000020012002410110742000410c6a20011091022002200041106a3602002002200110af010c0f0b200241053a0000200120024101107420022000410c6a28020036020020012002410410740c0e0b200241063a000020012002410110742000410c6a20011091022002200041106a3602002002200110af010c0d0b200241073a000020012002410110742000412c6a20011091022001200341016a412010740c0c0b200241083a000020012002410110742000410c6a20011091022002200041106a29030037030020012002410810740c0b0b200241093a000020012002410110742000410c6a2001109102200041106a200110f501200041386a200110ea030c0a0b2002410a3a000020012002410110742000410c6a200110f5010c090b2002410b3a000020012002410110742000410c6a200110f5012002200041306a108a01200120022802002200200228020810742002280204450d082000102e0c080b2002410c3a000020012002410110742000410c6a200110f5012002200041306a108a01200120022802002200200228020810742002280204450d072000102e0c070b2002410d3a000020012002410110742000410c6a200110f5010c060b2002410e3a000020012002410110740c050b2002411d3a00002001200241011074200041046a2103024002400240024002400240024002400240024020002d0004417f6a0e0a000102030405060708090e0b200241003a000020012002410110742001200341016a412010740240024020002d00254107470d00200241003a000020012002410110740c010b200241013a00002001200241011074024002400240024002400240024020032d00210e0700010203070405070b200241003a00000c050b200241013a00000c040b200241023a00000c030b200241033a00000c020b200241053a00000c010b200241063a00000b20012002410110740b200028022820011090020c0d0b200241013a000020012002410110742001200341016a41201074024002400240024002400240024020002d00250e0700010203060405060b200241003a000020012002410110740c050b200241013a000020012002410110740c040b200241023a000020012002410110740c030b200241033a000020012002410110740c020b200241053a000020012002410110740c010b200241063a000020012002410110740b2002200028022836020020012002410410740c0c0b200241023a000020012002410110742001200341016a41201074024002400240024002400240024020002d00250e0700010203060405060b200241003a000020012002410110740c050b200241013a000020012002410110740c040b200241023a000020012002410110740c030b200241033a000020012002410110740c020b200241053a000020012002410110740c010b200241063a000020012002410110740b2002200028022836020020012002410410740c0b0b200241033a000020012002410110740c0a0b200241043a00002001200241011074024002400240024002400240024020002d00050e0700010203060405060b200241003a000020012002410110740c050b200241013a000020012002410110740c040b200241023a000020012002410110740c030b200241033a000020012002410110740c020b200241053a000020012002410110740c010b200241063a000020012002410110740b200220002802083602002001200241041074200220002f01063b010020012002410210740c090b200241053a000020012002410110742001200341016a412010742000412c6a2105200041286a2104024002400240024002400240024020002d00250e0700010203060405060b200241003a000020012002410110740c050b200241013a000020012002410110740c040b200241023a000020012002410110740c030b200241033a000020012002410110740c020b200241053a000020012002410110740c010b200241063a000020012002410110740b200220032f01223b0100200120024102107420042001109102200520011091020c080b200241063a000020012002410110742001200341016a412010744120102c2200450d0820024220370204200220003602002002200341216a41201074200120022802002200200228020810742002280204450d072000102e0c070b200241073a000020012002410110742001200341016a412010744120102c2200450d0720024220370204200220003602002002200341216a41201074200120022802002200200228020810742002280204450d062000102e0c060b200241083a000020012002410110742001200341016a412010744120102c2200450d0620024220370204200220003602002002200341216a41201074200120022802002200200228020810742002280204450d052000102e0c050b200241093a000020012002410110742001200341016a412010742001200341216a412010740240024020002d00454107470d00200241003a000020012002410110740c010b200241013a00002001200241011074024002400240024002400240024020032d00410e0700010203070405070b200241003a00000c050b200241013a00000c040b200241023a00000c030b200241033a00000c020b200241053a00000c010b200241063a00000b20012002410110740b200028024820011090020c040b2002411e3a000020012002410110740240024002400240200041086a22042d0000417f6a0e0400010203070b200241003a000020012002410110742000410c6a2802002103200041146a28020022052001107602402005450d002005410574210503402001200341201074200341206a2103200541606a22050d000b0b200028021820011090020c060b200241013a00002001200241011074200220002f010a3b010020012002410210742000410c6a2802002103200041146a28020022052001107602402005450d002005410574210503402001200341201074200341206a2103200541606a22050d000b0b0240024020002802184101460d00200241003a000020012002410110740c010b200241013a0000200120024101107420022000411c6a28020036020020012002410410742002200041206a28020036020020012002410410740b200028022421032000412c6a2802002205200110762001200320051074200220002d00093a000020012002410110742002200029033037030020012002410810740c050b200241023a00002001200241011074200220002f012a3b010020012002410210742000412c6a2802002103200041346a28020022052001107602402005450d002005410574210503402001200341201074200341206a2103200541606a22050d000b0b200441016a21030240024020002802384101460d00200241003a000020012002410110740c010b200241013a0000200120024101107420022000413c6a28020036020020012002410410742002200041c0006a28020036020020012002410410740b20012003412010742002200029034837030020012002410810740c040b200241033a00002001200241011074200220002f012a3b010020012002410210742000412c6a2802002103200041346a280200220520011076200441016a210402402005450d002005410574210503402001200341201074200341206a2103200541606a22050d000b0b20022000280238360200200120024104107420022000413c6a280200360200200120024104107420012004412010740c030b200241223a00002001200241011074024002400240024002400240024002400240200041086a280200417f6a0e090001020304050607080b0b200241003a000020012002410110742002200041186a3602002002200110af012000410c6a2802002103200041146a28020022002001107620012003200010740c0a0b200241013a000020012002410110742000410c6a20011091020c090b200241023a000020012002410110742000410c6a2001109102200041106a200110f5012002200041386a3602002002200110af010c080b200241033a000020012002410110742000410c6a20011091020c070b200241043a000020012002410110742000410c6a20011091020c060b200241053a000020012002410110742000410c6a2001109102200041106a200110f5010c050b200241063a000020012002410110742000410c6a20011091020c040b200241073a000020012002410110742000410c6a20011091020c030b200241083a000020012002410110742000410c6a2001109102200041106a2802002103200041186a28020022002001107620012003200010740c020b200241233a00002001200241011074024002400240024002400240200041086a22032d0000417f6a0e06000102030405070b200241003a000020012002410110742000412c6a2802002105200041346a28020022002001107620012005200010742001200341016a412010740c060b200241013a000020012002410110744120102c2200450d0620024220370204200220003602002002200341016a41201074200120022802002200200228020810742002280204450d052000102e0c050b200241023a000020012002410110742000412c6a2802002105200041346a28020022042001107620012005200410742001200341016a412010742002200041386a3602002002200110af010c040b200241033a000020012002410110744120102c2205450d04200041306a210020024220370204200220053602002002200341016a412010742001200228020022032002280208107402402002280204450d002003102e0b200220003602002002200110af010c030b200241043a000020012002410110744120102c2200450d0320024220370204200220003602002002200341016a41201074200120022802002200200228020810742002280204450d022000102e0c020b200241053a000020012002410110744120102c2200450d0220024220370204200220003602002002200341016a41201074200120022802002200200228020810742002280204450d012000102e0c010b200241243a00002001200241011074200241003a000020012002410110742002200041386a1091062001200228020022042002280208107420004180026a2103200041086a210502402002280204450d002004102e0b20012005413010742002200041f8016a28020036020020012002410410742003200110910220004184026a20011091020b200241106a24000f0b1036000bb30101027f230041106b2202240002400240024002402000280200220341c000490d00200341808001490d012003418080808004490d02200241033a00032001200241036a41011074200220002802003602042001200241046a410410740c030b200220034102743a00032001200241036a410110740c020b200220034102744101723b010a20012002410a6a410210740c010b2002200341027441027236020c20012002410c6a410410740b200241106a24000bf70201017f23004190016b22042400024002400240024020002d00000e03000102000b200441206a41186a200341186a290000370300200441206a41106a200341106a290000370300200441206a41086a200341086a29000037030020042003290000370320200041016a20012002200441206a10890721000c020b200441206a41186a200341186a290000370300200441206a41106a200341106a290000370300200441206a41086a200341086a29000037030020042003290000370320200041016a20012002200441206a10fa0421000c010b20042001200210b001200441206a200041016a200410d3084100210020042d00200d00200441c8006a41206a200441206a41216a2d00003a0000200441e0006a200441396a290000370300200441d8006a200441316a290000370300200441d0006a200441296a29000037030020042004290021370348200441f0006a200441c8006a412110b001200441f0006a2003412010ec084521000b20044190016a240020000bc81303067f017e067f230041d0036b2202240002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a3602002005417f6a0e03010203040b200042033703000c040b024020064104490d002004280001210720012003417b6a22053602042001200441056a36020020054108490d00200429000521082001200341736a220936020420012004410d6a36020041002105200241003a0028200341726a21030240034020092005460d01200241086a20056a200420056a2206410d6a2d00003a00002001200336020420012006410e6a3602002002200541016a22063a00282003417f6a21032006210520064120470d000b20024190036a41086a2204200241086a41086a29030037030020024190036a41106a2203200241086a41106a29030037030020024190036a41186a2209200241086a41186a2903003703002002200229030837039003410121050240200641ff01714120490d00200241f0026a41186a2009290300370300200241f0026a41106a2003290300370300200241f0026a41086a200429030037030020022002290390033703f002410021050b200241b0026a41086a200241f0026a41086a290300370300200241b0026a41106a200241f0026a41106a290300370300200241b0026a41186a200241f0026a41186a290300370300200220022903f0023703b00220050d01200241f0016a41086a2205200241b0026a41086a290300370300200241f0016a41106a2204200241b0026a41106a290300370300200241f0016a41186a2203200241b0026a41186a290300370300200220022903b0023703f001200241086a200110940220022d00084101460d01200241a8016a2201200241c1006a290000370300200241a0016a2206200241396a29000037030020024198016a2209200241316a29000037030020024190016a220a200241296a290000370300200241f0006a41186a220b200241216a290000370300200241f0006a41106a220c200241196a290000370300200241f0006a41086a220d200241116a290000370300200241d0016a41086a220e2005290300370300200241d0016a41106a22052004290300370300200241d0016a41186a2204200329030037030020022002290009370370200220022903f0013703d001200241b0016a41186a22032004290300370300200241b0016a41106a22042005290300370300200241b0016a41086a2205200e290300370300200220022903d0013703b001200041106a20073602002000200837030820004200370300200020022903b0013702142000411c6a2005290300370200200041246a20042903003702002000412c6a2003290300370200200020022903703702342000413c6a200d290300370200200041c4006a200c290300370200200041cc006a200b290300370200200041d4006a200a290300370200200041dc006a2009290300370200200041e4006a2006290300370200200041ec006a20012903003702000c050b0240200541ff0171450d00200241003a00280b200241b0026a41086a200241f0026a41086a290300370300200241b0026a41106a200241f0026a41106a290300370300200241b0026a41186a200241f0026a41186a290300370300200220022903f0023703b0020b200042033703000c030b024020064104490d002004280001210620012003417b6a22053602042001200441056a36020020054108490d0020004201370300200429000521082001200341736a36020420012004410d6a360200200041106a200636020020002008370308200041146a200241086a41e40010e9081a0c030b200042033703000c020b024020064104490d002004280001210720012003417b6a22053602042001200441056a36020020054108490d00200429000521082001200341736a220936020420012004410d6a36020041002105200241003a0028200341726a21030240034020092005460d01200241086a20056a200420056a2206410d6a2d00003a00002001200336020420012006410e6a3602002002200541016a22063a00282003417f6a21032006210520064120470d000b20024190036a41086a2204200241086a41086a29030037030020024190036a41106a2203200241086a41106a29030037030020024190036a41186a2209200241086a41186a2903003703002002200229030837039003410121050240200641ff01714120490d00200241f0026a41186a2009290300370300200241f0026a41106a2003290300370300200241f0026a41086a200429030037030020022002290390033703f002410021050b200241b0026a41086a200241f0026a41086a290300370300200241b0026a41106a200241f0026a41106a290300370300200241b0026a41186a200241f0026a41186a290300370300200220022903f0023703b00220050d01200241f0016a41086a2205200241b0026a41086a290300370300200241f0016a41106a2204200241b0026a41106a290300370300200241f0016a41186a2203200241b0026a41186a290300370300200220022903b0023703f001200241086a200110940220022d00084101460d01200241a8016a2201200241c1006a290000370300200241a0016a2206200241396a29000037030020024198016a2209200241316a29000037030020024190016a220a200241296a290000370300200241f0006a41186a220b200241216a290000370300200241f0006a41106a220c200241196a290000370300200241f0006a41086a220d200241116a290000370300200241d0016a41086a220e2005290300370300200241d0016a41106a22052004290300370300200241d0016a41186a2204200329030037030020022002290009370370200220022903f0013703d001200241b0016a41186a22032004290300370300200241b0016a41106a22042005290300370300200241b0016a41086a2205200e290300370300200220022903d0013703b001200041106a20073602002000200837030820004202370300200020022903b0013702142000411c6a2005290300370200200041246a20042903003702002000412c6a2003290300370200200020022903703702342000413c6a200d290300370200200041c4006a200c290300370200200041cc006a200b290300370200200041d4006a200a290300370200200041dc006a2009290300370200200041e4006a2006290300370200200041ec006a20012903003702000c030b0240200541ff0171450d00200241003a00280b200241b0026a41086a200241f0026a41086a290300370300200241b0026a41106a200241f0026a41106a290300370300200241b0026a41186a200241f0026a41186a290300370300200220022903f0023703b0020b200042033703000c010b200042033703000b200241d0036a24000bd411010b7f230041b0036b2202240020024180016a200110a701200241c0006a41086a220120024189016a290000370300200241c0006a41106a220320024191016a290000370300200241c0006a41186a220420024199016a290000370300200241c0006a41206a2205200241a1016a290000370300200241c0006a41286a2206200241a9016a290000370300200241c0006a41306a2207200241b1016a290000370300200241c0006a41386a2208200241b9016a290000370300200220022900810137034002400240024020022d0080014101460d00200241386a22092008290300370300200241306a22082007290300370300200241286a22072006290300370300200241206a22062005290300370300200241186a22052004290300370300200241106a220a2003290300370300200241086a220b20012903003703002002200229034037030020024198026a41186a200929030037030020024198026a41106a200829030037030020024198026a41086a20072903003703002002200629030037039802200420052903003703002003200a2903003703002001200b2903003703002002200229030037034020024180016a200241c0006a10720240024020022d0080014101460d0020024190036a410f6a200241c0006a410f6a29000037000020024190036a41086a200241c0006a41086a290000370300200220022900403703900341012101410221050c010b200241ae036a20022d0083013a000020024198036a2002418d016a2900003703002002419f036a20024194016a2900003700002002418c036a200241a0016a2d00003a0000200220022f0081013b01ac0320022002290085013703900320022002419c016a280200360288034100210120022d00840121050b20024184036a41026a2206200241ac036a41026a2d00003a0000200241e8026a41086a220320024190036a41086a290300370300200241e8026a410f6a220420024190036a410f6a290000370000200241e0026a41046a220720024188036a41046a2d00003a0000200220022f01ac033b01840320022002290390033703e80220022002280288033602e002024020010d00200241dc026a41026a20062d00003a0000200241c0026a41086a2003290300370300200241c0026a410f6a2004290000370000200241b8026a41046a20072d00003a0000200220022f0184033b01dc02200220022903e8023703c002200220022802e0023602b802200241c0006a41186a20024198026a41186a290300370300200241c0006a41106a20024198026a41106a290300370300200241c0006a41086a20024198026a41086a290300370300200220022903980237034020024180016a200241c0006a1072410121010240024020022d0080014101460d0020024190036a410f6a200241c0006a410f6a29000037000020024190036a41086a200241c0006a41086a2900003703002002200229004037039003410221030c010b200241ae036a20022d0083013a000020024198036a2002418d016a2900003703002002419f036a20024194016a2900003700002002418c036a200241a0016a2d00003a0000200220022f0081013b01ac0320022002290085013703900320022002419c016a280200360288034100210120022d00840121030b20024184036a41026a2207200241ac036a41026a22082d00003a0000200241e8026a41086a220420024190036a41086a2209290300370300200241e8026a410f6a220620024190036a410f6a220a290000370000200241e0026a41046a220b20024188036a41046a220c2d00003a0000200220022f01ac033b01840320022002290390033703e80220022002280288033602e00202402001450d0020024180016a410f6a200629000037000020024180016a41086a2004290300370300200220022903e8023703800141012101200321050c030b20024194026a41026a20072d00003a000020092004290300370300200a2006290000370000200c200b2d00003a00002008200241dc026a41026a2d00003a0000200220022f0184033b019402200220022903e80237039003200220022802e00236028803200220022f01dc023b01ac0320024180016a410f6a2201200241c0026a410f6a29000037000020024180016a41086a2204200241c0026a41086a290300370300200220022903c00237038001200241e8026a41046a200241b8026a41046a2d00003a0000200220022802b8023602e802200241c0006a410f6a2001290000370000200241c0006a41086a20042903003703002002200229038001370340410021010c020b20024180016a410f6a200429000037000020024180016a41086a2003290300370300200220022903e80237038001410121010c010b200041013a00000c010b20024190026a41026a2204200241ac036a41026a2d00003a0000200241f8016a41086a2206200241c0006a41086a290300370300200241f8016a410f6a2207200241c0006a410f6a290000370000200241f0016a41046a2208200241e8026a41046a2d00003a0000200241ec016a41026a220920024194026a41026a2d00003a0000200220022f01ac033b019002200220022903403703f801200220022802e8023602f001200220022f0194023b01ec01200241d0016a410f6a220a20024190036a410f6a290000370000200241d0016a41086a220b20024190036a41086a290300370300200241c8016a41046a220c20024188036a41046a2d00003a000020022002290390033703d00120022002280288033602c801024020010d00200020022f0190023b0001200041046a20053a0000200041056a20022903f8013700002000411c6a20022802f001360000200041216a20022f01ec013b0000200041036a20042d00003a00002000410d6a2006290300370000200041146a2007290000370000200041206a20082d00003a0000200041236a20092d00003a0000200041246a20033a0000200041003a0000200041256a20022903d0013700002000412d6a200b290300370000200041346a200a2900003700002000413c6a20022802c801360000200041c0006a200c2d00003a00000c010b200041013a00000b200241b0036a24000ba40202057f027e230041106b21020240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a36020020054101470d01024002400240024020064108490d00200429000121072001200341776a22053602042001200441096a36020020054108490d002004290009210820012003416f6a22033602042001200441116a22043602002003450d0320042d0000210520012003417f6a3602042001200441016a36020041002101024020050e03030200040b410221010c020b200041033a00100f0b410121010b200020013a0010200020083703082000200737030020002002280009360011200041146a2002410c6a2800003600000f0b200041033a00100f0b200041033a00100f0b200041033a00100ba10101017f230041106b22022400200241013a00082001200241086a41011074200220002903003703082001200241086a41081074200220002903083703082001200241086a41081074024002400240024020002d00100e03000102030b200241003a00082001200241086a410110740c020b200241013a00082001200241086a410110740c010b200241023a00082001200241086a410110740b200241106a24000b9f0101057f230041106b2202240020004100360208200042013702002002200128020036020c20002002410c6a41041074200128020421032001410c6a28020022042000107602402004450d0020032004410c6c6a2105034020032802002104200341086a28020022062000107620002004200610742003410c6a22032005470d000b0b200220012802103602082000200241086a41041074200241106a24000bd20603057f017e027f230041a0046b2202240041002103200241003a009003024002400240024002400340200128020022042802042205450d01200241f0026a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22043a0090032004210320044120470d000b20024190026a41186a200241f0026a41186a2903002207370300200241f0016a41086a200241f0026a41086a290300370300200241f0016a41106a200241f0026a41106a290300370300200241f0016a41186a2007370300200220022903f0023703f0012001280200220428020422034108490d012004280200220529000021072004200341786a3602042004200541086a360200200241f0026a200110990220022802f4022205450d02200241fc026a280200210420022802f802210620022802f002210320024190026a200241f0026a41106a41e00010e9081a200241f0026a200110990220022802f402450d03200241206a200241f0026a41f00010e9081a200241086a2201200241f0016a41086a290300370300200241106a2208200241f0016a41106a290300370300200241186a2209200241f0016a41186a290300370300200220022903f00137030020024190016a20024190026a41e00010e9081a200041146a2004360200200020063602102000200536020c2000200336020820002007370300200041186a20024190016a41e00010e9081a200041f8006a200241206a41f00010e9081a20004180026a2009290300370300200041f8016a2008290300370300200041f0016a2001290300370300200041e8016a20022903003703000c040b0240200341ff0171450d00200241003a0090030b2000410036020c0c030b2000410036020c0c020b2000410036020c0c010b2000410036020c02402004450d00200441246c21032005210403400240024002400240024020042d00000e050400010204030b2004410c6a280200450d03200441086a280200102e0c030b2004410c6a280200450d02200441086a280200102e0c020b2004410c6a280200450d01200441086a280200102e0c010b200441086a280200450d00200441046a280200102e0b200441246a21042003415c6a22030d000b0b2006450d00200641246c450d002005102e0b200241a0046a24000b881d05057f017e087f027e057f230041d0056b2202240041002103200241003a00a805024002400240024002400240024002400340200128020022042802042205450d0120024188056a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22043a00a8052004210320044120470d000b200241e0036a41186a20024188056a41186a2903002207370300200241c0026a41086a220420024188056a41086a290300370300200241c0026a41106a220320024188056a41106a290300370300200241c0026a41186a2205200737030020022002290388053703c002200241a0016a41186a22062005290300370300200241a0016a41106a22052003290300370300200241a0016a41086a22032004290300370300200220022903c0023703a00120024180016a41186a200629030037030020024180016a41106a200529030037030020024180016a41086a2003290300370300200220022903a00137038001200241186a200110ad0120022802180d02200228021c210841002103200241003a00a8050340200128020022042802042205450d0220024188056a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22043a00a8052004210320044120470d000b200241e0036a41186a20024188056a41186a2903002207370300200241c0026a41086a220420024188056a41086a290300370300200241c0026a41106a220320024188056a41106a290300370300200241c0026a41186a2205200737030020022002290388053703c002200241e0016a41186a22062005290300370300200241e0016a41106a22052003290300370300200241e0016a41086a22032004290300370300200220022903c0023703e001200241c0016a41186a2006290300370300200241c0016a41106a2005290300370300200241c0016a41086a2003290300370300200220022903e0013703c00141002103200241003a00a8050340200128020022042802042205450d0420024188056a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22043a00a8052004210320044120470d000b200241e0036a41186a20024188056a41186a2903002207370300200241c0026a41086a220420024188056a41086a290300370300200241c0026a41106a220320024188056a41106a290300370300200241c0026a41186a2205200737030020022002290388053703c002200241a0026a41186a22062005290300370300200241a0026a41106a22052003290300370300200241a0026a41086a22032004290300370300200220022903c0023703a00220024180026a41186a200629030037030020024180026a41106a200529030037030020024180026a41086a2003290300370300200220022903a00237038002200241106a200110ad0120022802100d0520022802142209200128020028020441246e2204200420094b1bad42247e2207422088a7450d040c070b0240200341ff0171450d00200241003a00a8050b200241a0016a41086a200241c0026a41086a290300370300200241a0016a41106a200241c0026a41106a290300370300200241a0016a41186a200241c0026a41186a290300370300200220022903c0023703a001200041003602040c050b0240200341ff0171450d00200241003a00a8050b200241e0016a41086a200241c0026a41086a290300370300200241e0016a41106a200241c0026a41106a290300370300200241e0016a41186a200241c0026a41186a290300370300200220022903c0023703e001200041003602040c040b200041003602040c030b0240200341ff0171450d00200241003a00a8050b200241a0026a41086a200241c0026a41086a290300370300200241a0026a41106a200241c0026a41106a290300370300200241a0026a41186a200241c0026a41186a290300370300200220022903c0023703a002200041003602040c020b2007a72204417f4c0d02024002400240024020040d004104210a0c010b2004102c220a450d010b2001200128020441016a2203360204200441246ead2107200320012802084b0d01024002402009450d00200241ed036a210b2002419b056a220c41056a210d4100210e0340200128020022042802042203450d04200428020022052d0000210620042003417f6a3602042004200541016a360200024002400240024002400240024002400240024020060e08000e010e030402050e0b200241086a200110ad0120022802080d0d200128020022032802042206200228020c2204490d0d2004417f4c0d100240024020040d00410121050c010b200410322205450d0d2001280200220328020421060b20062004490d0620052003280200200410e90821062003280204220f20044f0d052004200f41b8b2c0001056000b41002103200241003a00a80502400340200128020022042802042205450d0120024188056a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22043a00a8052004210320044120470d000b2002200d2900003700c5052002200c2900003703c005200220022900c5053700b505200220022903c0053703b005200220022903b0053703f804200220022900b5053700fd04200228008f05210620022f018805210420022d008a052103200228008b0521052002290093052110200220022900fd043700ed04200220022903f8043703e804200220022900ed043700dd04200220022903e8043703d804200220022900dd043700e503200220022903d8043703e003200b20022f00d5043b0000200b41026a200241d5046a41026a2d00003a0000201042808080807083211120054108762112200420034110747221032010a7210f410021130c080b200341ff0171450d0c200241003a00a8050c0c0b20024188056a200110ac01200228028c052206450d0b20022f01880520022d008a0541107472210320022d008b05210520022903900522104280808080708321112010a7210f410121130c060b20024188056a200110ac01200228028c052206450d0a20022f01880520022d008a0541107472210320022d008b05210520022903900522104280808080708321112010a7210f410221130c050b20024188056a200110ac01200228028c052206450d0920022f01880520022d008a0541107472210320022d008b05210520022903900522104280808080708321112010a7210f410321130c040b200128020022042802042203450d08200428020022052d0000210620042003417f6a3602042004200541016a36020020060d08200241c0056a200110fd0520022802c00522054102460d08200241e0036a41086a20024188056a41086a29020037030020022002290288053703e00320022802c805210f20022802c40521064104211342002111410021120c020b2003200f20046b3602042003200328020020046a3602002006450d07200241e0036a41086a20024188056a41086a29020037030020022002290288053703e003200641087621122004ad22104220862010842210422088a7210f2010a7210641052113420021110c010b2005102e0c060b0b200241c0026a41086a200241e0036a41086a2903002210370300200241c0046a41086a22142010370300200220022903e00322103703c002200220103703c004024020074220882210a722042007a7470d00200441016a22152004490d0820044101742216201520152016491b22154104201541044b1bad42247e2210422088a74541027421152010a721160240024020040d0020024100360288050c010b20024104360290052002200a360288052002200441246c36028c050b200241e0036a2016201520024188056a107d20022802e803211520022802e0034101460d0320022802e403210a20074220882210a72104201541246ead21070b200a200441246c6a22042011200fad8437000c2004200636000820042012410874200541ff017172360004200420033b0001200420133a0000200441036a20034110763a0000200420022903c0043700142004411c6a20142903003700002010422086200742ffffffff0f83844280808080107c2107200e41016a220e2009470d000b200128020421030b20012003417f6a360204200a450d03200241e0006a41186a220420024180016a41186a290300370300200241e0006a41106a220320024180016a41106a290300370300200241e0006a41086a220520024180016a41086a290300370300200241c0006a41086a2206200241c0016a41086a290300370300200241c0006a41106a2201200241c0016a41106a290300370300200241c0006a41186a2209200241c0016a41186a290300370300200241206a41086a220e20024180026a41086a290300370300200241206a41106a220f20024180026a41106a290300370300200241206a41186a221320024180026a41186a2903003703002002200229038001370360200220022903c0013703402002200229038002370320200020073702082000200a36020420002008360200200041106a2002290360370200200041186a2005290300370200200041206a2003290300370200200041286a2004290300370200200041306a2002290340370200200041386a2006290300370200200041c0006a2001290300370200200041c8006a2009290300370200200041e8006a2013290300370200200041e0006a200f290300370200200041d8006a200e290300370200200041d0006a20022903203702000c040b2015450d040b1036000b02402007422088a72204450d00200441246c2103200a210403400240024002400240024020042d00000e050400010204030b2004410c6a280200450d03200441086a280200102e0c030b2004410c6a280200450d02200441086a280200102e0c020b2004410c6a280200450d01200441086a280200102e0c010b200441086a280200450d00200441046a280200102e0b200441246a21042003415c6a22030d000b0b2007a72204450d00200441246c450d00200a102e0b200041003602040b200241d0056a24000f0b1038000b9e0703067f017e017f230041a0046b2202240041002103200241003a00900320012802042104417f21050240024002400240034020042003460d01200241f0026a20036a200128020022062d00003a00002001200420056a3602042001200641016a3602002002200341016a22063a0090032005417f6a21052006210320064120470d000b20024190026a41086a2203200241f0026a41086a29030037030020024190026a41106a2205200241f0026a41106a29030037030020024190026a41186a2207200241f0026a41186a290300370300200220022903f00237039002200641ff0171411f4b0d010c020b200341ff0171450d01200241003a0090030c010b200241f0016a41086a2003290300370300200241f0016a41106a2005290300370300200241f0016a41186a200729030037030020022002290390023703f001024002400240200420066b22034108490d002001280200220529000021082001200341786a3602042001200541086a360200200241f0026a2001109b0220022802f4022205450d01200241fc026a280200210320022802f802210620022802f002210420024190026a200241f0026a41106a41e00010e9081a200241f0026a2001109b0220022802f402450d02200241206a200241f0026a41f00010e9081a200241086a2201200241f0016a41086a290300370300200241106a2207200241f0016a41106a290300370300200241186a2209200241f0016a41186a290300370300200220022903f00137030020024190016a20024190026a41e00010e9081a200041146a2003360200200020063602102000200536020c2000200436020820002008370300200041186a20024190016a41e00010e9081a200041f8006a200241206a41f00010e9081a20004180026a2009290300370300200041f8016a2007290300370300200041f0016a2001290300370300200041e8016a20022903003703000c040b2000410036020c0c030b2000410036020c0c020b2000410036020c02402003450d00200341246c21012005210303400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a280200102e0c030b2003410c6a280200450d02200341086a280200102e0c020b2003410c6a280200450d01200341086a280200102e0c010b200341086a280200450d00200341046a280200102e0b200341246a21032001415c6a22010d000b0b2006450d01200641246c450d012005102e0c010b2000410036020c0b200241a0046a24000bd80e03057f037e067f23004190046b2202240041002103200241003a00c8032001280204417f6a210402400240024002400240024002400240024003402004417f460d01200241a8036a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00c8032004417f6a21042005210320054120470d000b200241d0036a41086a2204200241a8036a41086a290300370300200241d0036a41106a2203200241a8036a41106a290300370300200241d0036a41186a2206200241a8036a41186a290300370300200220022903a8033703d003200541ff0171411f4d0d0120024188016a41086a2004290300220737030020024188016a41106a2003290300220837030020024188016a41186a20062903002209370300200241e8006a41186a2009370300200241e8006a41106a2008370300200241e8006a41086a2007370300200220022903d00322073703a8022002200737038801200220073703682002200110ab0120022802000d042002280204210641002103200241003a00c8032001280204417f6a210403402004417f460d03200241a8036a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00c8032004417f6a21042005210320054120470d000b200241d0036a41086a2203200241a8036a41086a290300370300200241d0036a41106a220a200241a8036a41106a290300370300200241d0036a41186a220b200241a8036a41186a290300370300200220022903a8033703d003200541ff0171411f4d0d03200241c8016a41086a20032903002207370300200241c8016a41106a200a2903002208370300200241c8016a41186a200b2903002209370300200241a8016a41186a2009370300200241a8016a41106a2008370300200241a8016a41086a2007370300200220022903d00322073703a802200220073703c801200220073703a80141002103200241003a00c80303402004417f460d06200241a8036a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00c8032004417f6a21042005210320054120470d000b200241d0036a41086a2204200241a8036a41086a290300370300200241d0036a41106a2203200241a8036a41106a290300370300200241d0036a41186a220a200241a8036a41186a290300370300200220022903a8033703d003200541ff0171411f4d0d0620024188026a41086a2004290300220737030020024188026a41106a2003290300220837030020024188026a41186a200a2903002209370300200241e8016a41186a2009370300200241e8016a41106a2008370300200241e8016a41086a2007370300200220022903d00322073703a8022002200737038802200220073703e801200241a8036a200110b50520022802a8032204450d0720022902ac032107200241c8006a41186a2201200241e8006a41186a290300370300200241c8006a41106a2203200241e8006a41106a290300370300200241c8006a41086a2205200241e8006a41086a290300370300200241286a41086a220a200241a8016a41086a290300370300200241286a41106a220b200241a8016a41106a290300370300200241286a41186a220c200241a8016a41186a290300370300200241086a41086a220d200241e8016a41086a290300370300200241086a41106a220e200241e8016a41106a290300370300200241086a41186a220f200241e8016a41186a29030037030020022002290368370348200220022903a801370328200220022903e801370308200020073702082000200436020420002006360200200041106a2002290348370200200041186a2005290300370200200041206a2003290300370200200041286a2001290300370200200041306a2002290328370200200041386a200a290300370200200041c0006a200b290300370200200041c8006a200c290300370200200041e8006a200f290300370200200041e0006a200e290300370200200041d8006a200d290300370200200041d0006a20022903083702000c080b200341ff0171450d00200241003a00c8030b20024188016a41086a200241a8026a41086a29030037030020024188016a41106a200241a8026a41106a29030037030020024188016a41186a200241a8026a41186a290300370300200220022903a80237038801200041003602040c060b200341ff0171450d00200241003a00c8030b200241c8016a41086a200241a8026a41086a290300370300200241c8016a41106a200241a8026a41106a290300370300200241c8016a41186a200241a8026a41186a290300370300200220022903a8023703c801200041003602040c040b200041003602040c030b200341ff0171450d00200241003a00c8030b20024188026a41086a200241a8026a41086a29030037030020024188026a41106a200241a8026a41106a29030037030020024188026a41186a200241a8026a41186a290300370300200220022903a80237038802200041003602040c010b200041003602040b20024190046a24000b0f00200028020020012002107441000b8a0201027f230041106b22022400200028020021002002410036020c02400240024002402001418001490d002001418010490d012002410c6a21032001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d410321010c030b200220013a000c2002410c6a2103410121010c020b20022001413f71418001723a000d2002200141067641c001723a000c2002410c6a2103410221010c010b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d410421010b2000200320011074200241106a240041000b6301017f230041206b2202240020022000280200360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a419cebc000200241086a103d2101200241206a240020010bdf0101087f0240200028020422020d0041000f0b2000280200210320012d002041ff01712104037f200241346a210020022f01322105410021060240024003400240200520062207470d00200521070c030b02400240024020012000412010ec082206450d00410121082006417f4c0d050c010b2004200041206a2d00002206460d01417f200420064720042006491b21080b200741016a2106200041216a210041012109200841016a0e03030201030b0b410121090b20090f0b024020030d0041000f0b2003417f6a2103200220074102746a41a0036a28020021020c000b0b980101057f0240200028020422020d0041000f0b200028020021030340200241346a210420022f013221054100210002400240034020052000460d0120012004412010ec082206450d02200041016a2100200441206a21042006417f4a0d000b2000417f6a21050b024020030d0041000f0b2003417f6a2103200220054102746a4194036a28020021020c010b0b200220004102746a41046a0b9a0101057f0240200028020422020d0041000f0b20002802002103034020024190026a210420022f018e0221054100210002400240034020052000460d0120012004412010ec082206450d02200041016a2100200441206a21042006417f4a0d000b2000417f6a21050b024020030d0041000f0b2003417f6a2103200220054102746a41f0046a28020021020c010b0b2002200041186c6a41046a0b960101057f0240200028020422020d0041000f0b200028020021030340200241e0006a210420022f015e21054100210002400240034020052000460d0120012004412010ec082206450d02200041016a2100200441206a21042006417f4a0d000b2000417f6a21050b024020030d0041000f0b2003417f6a2103200220054102746a41c0036a28020021020c010b0b200220004103746a0ba90301087f02400240024020012802042203450d00200128020021040c010b41a003102c2203450d0141002104200341003b01322003410036020020012003360204200141003602000b20022d002041ff017121050340200341346a210620032f0132210741002108024003400240200720082209470d00200721090c020b02400240024020022006412010ec082208450d004101210a2008417f4c0d040c010b2005200641206a2d00002208460d01417f200520084720052008491b210a0b200941016a2108200641216a2106200a41016a0e03020001020b0b20002004360204200041106a20013602002000410c6a2009360200200041086a2003360200200041013602000f0b02402004450d002004417f6a2104200320094102746a41a0036a28020021030c010b0b20004100360204200041106a20013602002000410c6a2009360200200041086a2003360200200041146a20022900003700002000411c6a200241086a290000370000200041246a200241106a2900003700002000412c6a200241186a290000370000200041346a200241206a2d00003a0000200041003602000f0b1036000bc01c03067f037e187f230041e0016b22032400200341206a41186a200141186a290000370300200341206a41106a200141106a290000370300200341206a41086a200141086a2900003703002003200129000037032002400240024002400240024002400240024002400240024002400240024020002802042204450d00200028020021050c010b419403102c2204450d0141002105200441003b01322004410036020020002004360204200041003602000b02400340200441346a210620042f01322107410021010240034020072001460d01200341206a2006412010ec082208450d03200141016a2101200641206a21062008417f4a0d000b2001417f6a21070b02402005450d002005417f6a2105200420074102746a4194036a28020021040c010b0b200341086a2003412c6a2902002209370300200341106a200341346a290200220a370300200341186a2003413c6a280200220136020020032003290224220b3703002003280220210c200341a0016a41186a22062001360200200341a0016a41106a2208200a370300200341a0016a41086a220520093703002003200b3703a001024020042f01322201410a4b0d00200341206a41186a2006280200360200200341206a41106a2008290300370300200341206a41086a2005290300370300200320032903a001370320200441346a2106200141016a21080240200741016a220520014b220d0d00200620054105746a200620074105746a20082007417f736a41057410ea081a0b200620074105746a2201200c360000200120032903203700042001410c6a200341286a290300370000200141146a200341306a2903003700002001411c6a200341386a280200360000200441046a21010240200d0d00200120054102746a200120074102746a20082007417f736a41027410ea081a0b200120074102746a2002360200200420083b01320c0d0b410521014100210e02400240200741054f0d0041042101200721080c010b41052108024002402007417b6a0e020201000b200741796a21084101210e410621010c010b410021084101210e0b419403102c2206450d01200641003b013220064100360200200620042f0132220d2001417f736a22073b0132200441346a220f20014105746a22052800002110200341386a2005411c6a280000360200200341306a200541146a290000370300200341286a2005410c6a290000370300200320052900043703202007410c4f0d02200d200141016a22056b2007470d03200441046a220d20014102746a2802002111200641346a200f20054105746a200741057410e9081a200641046a200d20054102746a200741027410e9081a200420013b0132200341c0016a41086a200341206a41086a2205290300370300200341c0016a41106a200341206a41106a220d290300370300200341c0016a41186a200341206a41186a220f280200360200200320032903203703c00120062004200e1b22072f01322101200f200341a0016a41186a280200360200200d200341a0016a41106a2903003703002005200341a0016a41086a290300370300200320032903a001370320200741346a210e200141016a21120240200841016a221320014b22140d00200e20134105746a200e20084105746a20122008417f736a41057410ea081a0b200e20084105746a2201200c360000200120032903203700042001410c6a2005290300370000200141146a200d2903003700002001411c6a200f280200360000200741046a2101024020140d00200120134102746a200120084102746a20122008417f736a41027410ea081a0b200120084102746a2002360200200720123b013220034180016a41086a2215200341c0016a41086a2216290300220937030020034180016a41106a2217200341c0016a41106a2218290300220a37030020034180016a41186a2219200341c0016a41186a221a2802002201360200200320032903c001220b37038001200341e0006a41186a22122001360200200341e0006a41106a2213200a370300200341e0006a41086a221420093703002003200b370360024002400240200428020022020d004100211b0c010b4100211b2011211c2006211d2010211e034020042f01302104200341a0016a41186a221f2012280200360200200341a0016a41106a22202013290300370300200341a0016a41086a22212014290300370300200320032903603703a0014101450d0720022f0132220e410b490d024100210541042101024020044105490d0020042101024002402004417b6a0e020201000b200441796a210441012105410621010c010b4100210441012105410521010b41c403102c2206450d04200641003b013220064100360200200620022f013222112001417f736a22083b0132200241346a222220014105746a22072800002110200341206a41186a220c2007411c6a280000360200200341206a41106a220d200741146a290000370300200341206a41086a220f2007410c6a290000370300200320072900043703202008410c4f0d082011200141016a22076b2008470d09200241046a222320014102746a2802002111200641346a202220074105746a200841057410e9081a200641046a2023200741027422076a200841027410e9081a200220013b01322016200f2903003703002018200d290300370300201a200c280200360200200320032903203703c00120062f0132220841016a21222008410c4f0d0a200e20016b22012022470d0b201b41016a211b20064194036a200220076a4194036a200141027410e9081a4100210102400340200620014102746a4194036a280200220720013b0130200720063602002001200120084922076a220120084b0d0120070d000b0b2019201a2802003602002017201829030037030020152016290300370300200320032903c001370380012006200220051b22072f0132210e200c201f280200360200200d2020290300370300200f2021290300370300200320032903a001370320200741346a2108200e41016a21050240200441016a2201200e4b221f0d00200820014105746a200820044105746a2004417f7320056a41057410ea081a0b200820044105746a2208201e360000200820032903203700042008410c6a200f290300370000200841146a200d2903003700002008411c6a200c280200360000200741046a21080240201f0d00200820014102746a200820044102746a2004417f7320056a41027410ea081a0b20082004410274220d6a201c36020020074194036a21080240200441026a220f200e41026a220c4f0d002008200f4102746a200820014102746a2001417f73200c6a41027410ea081a0b200820014102746a201d360200200720053b013202402001200c4f0d002007200d6a4198036a2101034020012802002208200441016a22043b013020082007360200200141046a210120052004470d000b0b2014201529030037030020132017290300370300201220192802003602002003200329038001370360200221042002280200220121022011211c2006211d2010211e20010d000b0b200341c0006a41186a20122802002201360200200341c0006a41106a20132903002209370300200341c0006a41086a2014290300220a37030020032003290360220b370340201a2001360200201820093703002016200a3703002003200b3703c00120002802042208450d0a2000280200210741c403102c2201450d022001200836029403200141003b013220014100360200200841003b013020082001360200200020013602042000200741016a360200200341206a41186a200341c0016a41186a280200360200200341206a41106a200341c0016a41106a290300370300200341206a41086a200341c0016a41086a290300370300200320032903c0013703202007201b470d0b20012f01322207410b4f0d0c200120074105746a220841346a2010360000200841386a2003290320370000200841c0006a200341286a290300370000200841c8006a200341306a290300370000200841d0006a200341386a2802003600002001200741016a22083b0132200120084102746a4194036a2006360200200120074102746a41046a2011360200200620083b0130200620013602002000200028020841016a3602080c0e0b20022f01322108200341206a41186a220c200341a0016a41186a280200360200200341206a41106a220d200341a0016a41106a290300370300200341206a41086a220f200341a0016a41086a290300370300200320032903a001370320200441016a2101200241346a2106200841016a21070240200420084f22050d00200620014105746a200620044105746a2004417f7320076a41057410ea081a0b200620044105746a2206201e360000200620032903203700042006410c6a200f290300370000200641146a200d2903003700002006411c6a200c280200360000200241046a2106024020050d00200620014102746a200620044102746a2004417f7320076a41027410ea081a0b20062004410274220c6a201c36020020024194036a2106200841026a2104024020050d00200c20066a41086a200620014102746a2001417f7320046a41027410ea081a0b200620014102746a201d360200200220073b0132200120044f0d0c200841016a210720022001417f6a22014102746a4198036a2106034020062802002208200141016a22013b013020082002360200200641046a210620072001470d000c0d0b0b200420014102746a41046a20023602000c0c0b1036000b2007410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b41ac9cc700413541e49cc7001039000b2008410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b2022410c41f49cc700104d000b41f49bc7004128419c9cc7001039000b41e8aac700412b4194abc7001039000b41e899c700413041989ac7001039000b41a89ac700412041c89ac7001039000b2000200028020841016a3602080b200341e0016a24000beb0201067f230041206b220124000240024002402000410c6a28020022022002417f6a200041046a28020020002802006b716b4101470d00200221030240024002402002450d00200220026a22032002490d04200141106a41086a4104360200200120024102743602142001200028020836021020012003410274200341ffffffff0371200346410274200141106a107d200141086a280200210320012802004101460d01200020012802043602082000410c6a200341027622033602000b20032002410174470d0420002802002204200041046a28020022054d0d022005200220046b22064f0d01200041086a280200220320024102746a2003200541027410e9081a200041046a2200200028020020026a3602000c020b2003450d021036000b200041086a2802002202200320066b22034102746a200220044102746a200641027410e9081a200020033602000b200141206a24000f0b1038000b41c4ebc000412b41f0ebc0001039000bd20302037f017e23004180126b2203240020034280808080802037020c2003200236021c200320013602182003200341186a360208200341b80e6a200341086a10ed010240024020032903a00f4203510d00200341f00a6a200341b80e6a41c80310e9081a02402003280208220228020422044104490d0020022802002205280000210120022004417c6a3602042002200541046a360200200341880a6a200341f00a6a41e80010e9081a20032903d80b2106200341b0076a200341e00b6a41d80210e9081a0c020b024020032903d80b4202510d0020032d00f00a41ff01714102470d0020032802f80a450d0020032802f40a102e0b200341880c6a108b020b420321060b200341c8066a200341880a6a41e80010e9081a200341f0036a200341b0076a41d80210e9081a0240024020064203510d00200341206a200341c8066a41e80010e9081a200320063703880120034190016a200341f0036a41d80210e9081a200320013602e803024020032802082802040d002000200341206a41d00310e9081a0c020b20004203370368024020064202510d0020032d002041ff01714102470d002003280228450d002003280224102e0b200341b8016a108b020c010b200042033703680b20034180126a24000bef1a03037f037e197f230041f0036b2205240020012802042106200128020021072001280208220141086a2900002108200141106a29000021092001290000210a200541186a220b200141186a290000370300200541106a220c2009370300200541086a220d20083703002005200a3703002003410174210e2005410772210f200541c8016a41186a2110200541c8016a410c6a2111200541c8016a41206a211241002113410021144100211502400240024002400240024002400240024002400240024002400240024002400340201541017621010240024020154101710d00200120034b0d03200541003a00d001200520013602cc01200520023602c8010c010b200120034b0d03200120034f0d04200541013a00d001200520023602c801200520013602cc012005200220016a2d000041f001713a00d1010b200541d0036a20072005200541c8016a200628020c110400024020052802d00322160d00200541c8016a41086a2213200541086a290300370300200541c8016a41106a2203200541106a290300370300200541c8016a41186a2217200541186a290300370300200520052903003703c8014130102c2201450d10200120052903c80137000120012005290020370021200120144100473a0000200141096a2013290300370000200141116a2003290300370000200141196a2017290300370000200141286a200541276a29000037000020004101360200200020013602040c0f0b20052802d803210120052802d4032118024002400240200428020c20144b0d002001417f4c0d130240024020010d00410121170c010b2001102c2217450d130b20172016200110e90821192010200b290300370300200541c8016a41106a221a200c290300370300200541c8016a41086a221b200d290300370300200520052903003703c801024020042802082217200441046a221c280200470d00201741016a221d2017490d142017410174221e201d201e201d4b1b221d4104201d41044b1bad42307e2208422088a745410274211d2008a7211e0240024020170d00200541003602200c010b200541043602282005201741306c360224200520042802003602200b200541d0036a201e201d200541206a107d20052802d803211720052802d0034101460d02200420052802d403360200201c201741306e360200200428020821170b2004280200201741306c6a2217201936020420172014360200201720052903c8013702102017410c6a2001360200201741086a2001360200201741186a201b290300370200201741206a201a290300370200201741286a20102903003702002004200428020841016a3602080b200541c8016a2016200110a80220052d00c8014101460d0e201441016a21140c010b20170d100c110b034020052802e401211f20052802e001212020052802dc01212120052802d801211920052802d401211720052802d001211a20052802cc012101200541206a201241a80110e9081a200528029403211b200528029003211c024002400240024020010e05100f000102100b410021010240201741017420196b2222200e20136b221b201b20224b1b2223450d000340201320016a221b410176221c20034f0d0a201920016a221d410176221e20174f0d0b2002201c6a2d0000221c410f71201c41f00171410476201b4101711b201a201e6a2d0000221b410f71201b410476201d4101711b470d012023200141016a2201470d000b202321010b024020012022470d00202221010c030b200042003702000c110b2005201f3602dc01200520203602d801200520213602d401200520193602d001200520173602cc012005201a3602c8012010200541206a41a80110e9081a02400240200e2013460d002013410176220120034f0d0b200541c8016a200220016a2d00002201410f71200141047620134101711b410c6c6a220128020022214102470d01200042003702000c120b410021010240201c450d00201b417f4c0d1502400240201b0d00410121010c010b201b102c2201450d150b2001201c201b10e9081a0b20002001360204200041003602002000410c6a201b360200200041086a201b3602000c110b20012802042120200141086a280200211f41012122410121010c010b20052802a0032123200528029c03212220052802980321012005201f3602d001200520203602cc01200520213602c8012011200541206a41a80110e9081a20052001360284032005201b360280032005201c3602fc02410021010240201741017420196b221f200e20136b22212021201f4b1b2220450d000340201320016a221b410176221c20034f0d0b201920016a221d410176221e20174f0d0c2002201c6a2d0000221c410f71201c41f00171410476201b4101711b201a201e6a2d0000221b410f71201b410476201d4101711b470d012020200141016a2201470d000b202021010b02402001201f460d00200042003702000c100b024002402021201f460d002013201f6a2201410176221720034f0d0d200541c8016a200220176a2d00002217410f71201741047620014101711b410c6c6a221728020022214102470d01200042003702000c110b4100210102402022450d002023417f4c0d140240024020230d00410121010c010b2023102c2201450d140b20012022202310e9081a0b20002001360204200041003602002000410c6a2023360200200041086a20233602000c100b201f41016a2122201f41016a210120172802042120201741086a280200211f0b200120156a2115201320226a211302402021450d00200541c8016a2020201f10a80220052d00c8014101460d0e0c010b0b02400240201f4120460d002010200b290300370300200541c8016a41106a2201200c290300370300200541c8016a41086a2217200d290300370300200520052903003703c801201f417f4c0d1202400240201f0d00410121190c010b201f102c2219450d120b20192020201f10e9082119200541d0036a41186a221a2010290300370300200541d0036a41106a221b2001290300370300200541d0036a41086a221c2017290300370300200520052903c8013703d0034130102c2201450d11200141043a0000200120052903d003370001200120052f00c8013b00212001201f36002c2001201f36002820012019360024200141096a201c290300370000200141116a201b290300370000200141196a201a290300370000200141236a200541c8016a41026a2d00003a0000410121170c010b41002117200541c8016a41026a41003a0000200541003b01c80120202f00002119200541cc036a41026a202041026a2d00003a00002020411f6a2d0000211a202041176a29000021082020280003210120202900072109200541d0036a41086a221b2020410f6a290000370300200541d0036a41106a221c2008370300200541d0036a41186a221d201a3a0000200520193b01cc03200520093703d0032010201d2d00003a0000200541c8016a41106a201c290300370300200541c8016a41086a201b290300370300200520052903d0033703c8010b200541c8036a41026a2219200541cc036a41026a2d00003a0000200541a8036a41086a221a200541c8016a41086a290300370300200541a8036a41106a221b200541c8016a41106a290300370300200541a8036a41186a221c2010280200360200200520052f01cc033b01c803200520052903c8013703a803024020170d00200f20052903a803370000200f41086a201a290300370000200f41106a201b290300370000200f41186a201c2d00003a0000200520052f01c8033b010020052001360003200520192d00003a00022018450d012016102e0c010b0b20004101360200200020013602040c0c0b2001200341a0f0cc00104d000b2001200341b0f0cc00104d000b2001200341c0f0cc00103c000b201c200341e0efcc00103c000b201e201741e0efcc00103c000b2001200341e0efcc00103c000b201c200341e0efcc00103c000b201e201741e0efcc00103c000b2017200341e0efcc00103c000b41002104024002400240201741017420196b200e20136b2215470d004100210441002101024002402015450d00410021010340201920016a221b410176221c20174f0d04201320016a221d410176221e20034f0d05201a201c6a2d0000221c410f71201c41f00171410476201b4101711b2002201e6a2d0000221b410f71201b410476201d4101711b470d012015200141016a2201470d000c020b0b20012015470d010b2020417f4c0d080240024020200d00410121040c010b2020102c2204450d080b20042021202010e9081a2020ad220842208620088421080b2000200436020420004100360200200041086a20083702000c040b201c201741e0efcc00103c000b201e200341e0efcc00103c000b200042003702000c010b20052d00c9012113200541d0036a41086a2203200541086a290300370300200541d0036a41106a2217200541106a290300370300200541d0036a41186a2219200541186a290300370300200520052903003703d0034130102c2201450d02200141033a0000200120052903d003370001200120133a0021200120052901a803370122200141096a2003290300370000200141116a2017290300370000200141196a2019290300370000200141286a200541ae036a29010037010020004101360200200020013602040b2018450d002016102e0b200541f0036a24000f0b1036000b1038000b9e1203027f027e127f230041b0096b2203240041002104200341003602a806200320023602a406200320013602a006420321050240024020020d0042002106410021070c010b41012107200341013602a80642002106024020012d000022080d00420021050c010b0240024002400240024002400240024002400240200841c00171220941c001460d0002402009418001460d00200941c000470d0b2008413f712208413f470d05410221074141210803402007417f6a20024f0d03200320073602a8060240200120076a417f6a2d0000220941ff01460d00200920086b21080c0c0b200841817e6a2108200741016a2207418302470d000b41ffff03210841820221070c0a0b2008413f712208413f470d05410221074141210803402007417f6a20024f0d03200320073602a8060240200120076a417f6a2d0000220941ff01460d00200920086b21080c0a0b200841817e6a2108200741016a2207418302470d000b41ffff03210841820221070c080b2008413f712208413f470d05410221074141210803402007417f6a20024f0d03200320073602a8060240200120076a417f6a2d0000220941ff01460d00200920086b21080c080b200841817e6a2108200741016a2207418302470d000b41ffff03210841820221070c060b2007417f6a21070c080b2007417f6a21070c070b2007417f6a21070c060b410121070c040b410121070c020b410121070b2008ad422086428002842106420121050c020b2008ad4220862106420121050c010b2008ad4220862106420221050b2006422088a721094101210a41012108024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002402005200684a741ff01710e040500010a050b2009410171220b450d03200720024f0d0141002108200120076a2d00004110490d030c090b2009410171220b450d010240200720024f0d0041002108200120076a2d00004110490d020c090b2007200241f4cec800103c000b200720024184cfc800103c0c030b2007200941016a4101766a220c20024b0d052003200c3602a806200341106a200341a0066a10d70420032802100d0520032802a806220d20032802146a220e20032802a4064b0d052003200e3602a806200341e0046a200341f0076a41c00110e9081a410121040c010b2007200941016a4101766a220c20024b0d042003200c3602a806200c41026a220820024b0d04200320083602a806200c417e4f0d062001200c6a2f00002104410021094100210d0240200642800283500d00200341086a200341a0066a10d70420032802080d054101210820032802a806220e200328020c6a220f20032802a4064b0d062003200f3602a8064101210d0b200341023602a40920034102360298092003410236028c092003410236028009200341023602f408200341023602e808200341023602dc08200341023602d008200341023602c408200341023602b808200341023602ac08200341023602a00820034102360294082003410236028808200341023602fc07200341023602f007200341f0076a2108200441ffff037121100340024020102009410f7176410171450d002003200341a0066a10d70420032802000d0620032802a8062211200328020422126a220420032802a4064b0d06200320043602a806200841086a2004360200200841046a2011360200200820124120473602000b2008410c6a2108200941016a22094110470d000b200341e0046a200341f0076a41c00110e9081a410421040b200341a0036a200341e0046a41c00110e9081a200341c0016a41186a200f360200200341c0016a41146a200e360200200341c0016a41106a200d360200200341c0016a410c6a200b360200200341c0016a41086a200c360200200320073602c401200320043602c001200341c0016a411c6a200341a0036a41c00110e9081a4100210a4100211320040e050e010000020e0b000b200c2007490d04200c20024b0d05200e200d490d06200e20024b0d07200c20076b2109200120076a21082001200d6a2114200e200d6b2115410121130c0c0b200341023602a40920034102360298092003410236028c092003410236028009200341023602f408200341023602e808200341023602dc08200341023602d008200341023602c408200341023602b808200341023602ac08200341023602a00820034102360294082003410236028808200341023602fc07200341023602f007410021080340410221040240200341c0016a20086a2209411c6a22102802004102460d00200941246a2802002111200941206a28020021090240024020102802004101470d0020112009490d0b41012104201120024d0d012011200241d4f2cc00104d000b20112009490d0b41002104201120024b0d0c0b201120096b2111200120096a21120b200341f0076a20086a22092004360200200941086a2011360200200941046a20123602002008410c6a220841c001460d0b0c000b0b410121080b200341a0036a200341e0046a41c00110e9081a200020083a00010c0a0b200c200841e4cec8001057000b2007200c41c4f3cc001057000b200c200241c4f3cc00104d000b200d200e41d4f3cc001057000b200e200241d4f3cc00104d000b2009201141d4f2cc001057000b2009201141e4f2cc001057000b2011200241e4f2cc00104d000b02400240200d4101460d00410021120c010b200f200e490d03200f20024b0d04200f200e6b21112001200e6a21120b200c2007490d04200c20024b0d05200341f8076a280200211620032802f407211520032802f0072114200341186a200341fc076a41a80110e9081a200c20076b2109200120076a2108200341ac096a2802002110200341a8096a280200211720032802a4092118410421130b2000411c6a2016360200200041186a2015360200200041146a2014360200200041106a200b3602002000410c6a2009360200200041086a2008360200200041046a2013360200200041206a200341186a41a80110e9081a200041d8016a2011360200200041d4016a2012360200200041d0016a2010360200200041cc016a2017360200200041c8016a20183602000b2000200a3a0000200341b0096a24000f0b200e200f41e4f3cc001057000b200f200241e4f3cc00104d000b2007200c41c4f3cc001057000b200c200241c4f3cc00104d000b7e01027f230041306b22022400200241146a410436020020024188e2cc003602102002410436020c20024180e2cc003602082001411c6a2802002103200128021821012002412c6a41023602002002420237021c20024190e2cc003602182002200241086a36022820012003200241186a103d2101200241306a240020010bc81703037f037e197f230041f0036b2204240020012802042105200128020021062001280208220141086a2900002107200141106a290000210820012900002109200441186a220a200141186a290000370300200441106a220b2008370300200441086a220c2007370300200420093703002003410174210d2004410772210e200441c8016a41186a210f200441c8016a410c6a2110200441c8016a41206a211141002112410021134100211402400240024002400240024002400240024002400240024002400240024002400340201441017621010240024020144101710d00200120034b0d03200441003a00d001200420013602cc01200420023602c8010c010b200120034b0d03200120034f0d04200441013a00d001200420023602c801200420013602cc012004200220016a2d000041f001713a00d1010b200441d0036a20062004200441c8016a200528020c11040002400240024020042802d00322150d00200441c8016a41086a2212200441086a290300370300200441c8016a41106a2203200441106a290300370300200441c8016a41186a2216200441186a290300370300200420042903003703c8014130102c22010d010c130b20042802d4032117200441c8016a201520042802d80310a80220042d00c8014101460d0f201341016a21130c010b200120042903c80137000120012004290020370021200120134100473a0000200141096a2012290300370000200141116a2003290300370000200141196a2016290300370000200141286a200441276a29000037000020004101360200200020013602040c100b034020042802e401211820042802e001211920042802dc01211a20042802d801211b20042802d401211620042802d001211c20042802cc012101200441206a201141a80110e9081a200428029403211d200428029003211e024002400240024020010e05110f000102110b4100210102402016410174201b6b221f200d20126b221d201d201f4b1b2220450d000340201220016a221d410176221e20034f0d0a201b20016a2221410176222220164f0d0b2002201e6a2d0000221e410f71201e41f00171410476201d4101711b201c20226a2d0000221d410f71201d41047620214101711b470d012020200141016a2201470d000b202021010b02402001201f470d00201f21010c030b200042003702000c120b200420183602dc01200420193602d8012004201a3602d4012004201b3602d001200420163602cc012004201c3602c801200f200441206a41a80110e9081a02400240200d2012460d002012410176220120034f0d0b200441c8016a200220016a2d00002201410f71200141047620124101711b410c6c6a2201280200221a4102470d01200042003702000c130b410021010240201e450d00201d417f4c0d1002400240201d0d00410121010c010b201d102c2201450d160b2001201e201d10e9081a0b20002001360204200041003602002000410c6a201d360200200041086a201d3602000c120b20012802042119200141086a28020021184101211f410121010c010b20042802a0032120200428029c03211f2004280298032101200420183602d001200420193602cc012004201a3602c8012010200441206a41a80110e9081a20042001360284032004201d360280032004201e3602fc024100210102402016410174201b6b2218200d20126b221a201a20184b1b2219450d000340201220016a221d410176221e20034f0d0b201b20016a2221410176222220164f0d0c2002201e6a2d0000221e410f71201e41f00171410476201d4101711b201c20226a2d0000221d410f71201d41047620214101711b470d012019200141016a2201470d000b201921010b024020012018460d00200042003702000c110b02400240201a2018460d00201220186a2201410176221620034f0d0d200441c8016a200220166a2d00002216410f71201641047620014101711b410c6c6a2216280200221a4102470d01200042003702000c120b410021010240201f450d002020417f4c0d0f0240024020200d00410121010c010b2020102c2201450d150b2001201f202010e9081a0b20002001360204200041003602002000410c6a2020360200200041086a20203602000c110b201841016a211f201841016a210120162802042119201641086a28020021180b200120146a21142012201f6a21120240201a450d00200441c8016a2019201810a80220042d00c8014101460d0f0c010b0b0240024020184120460d00200f200a290300370300200441c8016a41106a2201200b290300370300200441c8016a41086a2216200c290300370300200420042903003703c8012018417f4c0d0d0240024020180d004101211b0c010b2018102c221b450d130b201b2019201810e908211b200441d0036a41186a221c200f290300370300200441d0036a41106a221d2001290300370300200441d0036a41086a221e2016290300370300200420042903c8013703d0034130102c2201450d12200141043a0000200120042903d003370001200120042f00c8013b00212001201836002c200120183600282001201b360024200141096a201e290300370000200141116a201d290300370000200141196a201c290300370000200141236a200441c8016a41026a2d00003a0000410121160c010b41002116200441c8016a41026a41003a0000200441003b01c80120192f0000211b200441cc036a41026a201941026a2d00003a00002019411f6a2d0000211c201941176a29000021072019280003210120192900072108200441d0036a41086a221d2019410f6a290000370300200441d0036a41106a221e2007370300200441d0036a41186a2221201c3a00002004201b3b01cc03200420083703d003200f20212d00003a0000200441c8016a41106a201e290300370300200441c8016a41086a201d290300370300200420042903d0033703c8010b200441c8036a41026a221b200441cc036a41026a2d00003a0000200441a8036a41086a221c200441c8016a41086a290300370300200441a8036a41106a221d200441c8016a41106a290300370300200441a8036a41186a221e200f280200360200200420042f01cc033b01c803200420042903c8013703a803024020160d00200e20042903a803370000200e41086a201c290300370000200e41106a201d290300370000200e41186a201e2d00003a0000200420042f01c8033b0100200420013600032004201b2d00003a00022017450d012015102e0c010b0b20004101360200200020013602040c0d0b2001200341a0f0cc00104d000b2001200341b0f0cc00104d000b2001200341c0f0cc00103c000b201e200341e0efcc00103c000b2022201641e0efcc00103c000b2001200341e0efcc00103c000b201e200341e0efcc00103c000b2022201641e0efcc00103c000b2016200341e0efcc00103c000b410021180240024002402016410174201b6b200d20126b2214470d004100211841002101024002402014450d00410021010340201b20016a221d410176221e20164f0d04201220016a2221410176222220034f0d05201c201e6a2d0000221e410f71201e41f00171410476201d4101711b200220226a2d0000221d410f71201d41047620214101711b470d012014200141016a2201470d000c020b0b20012014470d010b2019417f4c0d030240024020190d00410121180c010b2019102c2218450d090b2018201a201910e9081a2019ad220742208620078421070b2000201836020420004100360200200041086a20073702000c050b201e201641e0efcc00103c000b2022200341e0efcc00103c000b1038000b200042003702000c010b20042d00c9012112200441d0036a41086a2203200441086a290300370300200441d0036a41106a2216200441106a290300370300200441d0036a41186a221b200441186a290300370300200420042903003703d0034130102c2201450d02200141033a0000200120042903d003370001200120123a0021200120042901a803370122200141096a2003290300370000200141116a2016290300370000200141196a201b290300370000200141286a200441ae036a29010037010020004101360200200020013602040b2017450d002015102e0b200441f0036a24000f0b1036000b9f0402027f037e230041f0006b2201240002404101102c22020d001036000b200241003a0000410041003502e8f54c200141d0006aad7c42adfed5e4d485fda8d8007e42218922033e02e8f54c200141c0006a41e8f5cc00ad220442a4bb99fed1a0bbb02385420042adfed5e4d485fda8d800420010e808200141206a200342a4bb99fed1a0bbb02385420042adfed5e4d485fda8d800420010e808200141306a200442c5ecb3fec9ecf7c2c30085420042adfed5e4d485fda8d800420010e808200141106a200342c5ecb3fec9ecf7c2c30085420042adfed5e4d485fda8d800420010e80820012003200485420042adfed5e4d485fda8d800420010e808200141d0006a41aad3c800410110b001200041286a4200370300200041246a41d0a1c00036020020004100360220200041346a428180808010370200200020023602302000200129005037003c200041c4006a200141d0006a41086a290000370000200041cc006a200141e0006a290000370000200041d4006a200141e8006a29000037000020002003200141c0006a41086a2903002001290340857c200141086a29030020012903008542cf829ebbefefde82147c2205893703002000200141106a41086a29030020012903108520047c20054230888937031820002003200141306a41086a2903002001290330857c2005422088893703102000200141206a41086a29030020012903208520047c200542108889370308200141f0006a24000bfd0101057f2000410c6a280200200028020822016b220241e0006d210302402002450d002001200341e0006c6a2104034002402001220541386a2802002201450d00200141d8006c2102200528023041306a21010340200128020022032003280200417f6a3602000240200128020022032802000d00200341046a22032003280200417f6a3602002001280200220341046a2802000d002003102e0b200141d8006a2101200241a87f6a22020d000b0b200541e0006a21010240200541346a2802002202450d00200241d8006c450d002005280230102e0b20012004470d000b0b024020002802042201450d00200141e0006c450d002000280200102e0b0b130020004109360204200041f0ecc0003602000bb10201027f230041206b220424000240024002400240024020022001413c6a412010ec080d00200141386a2802002202417f4c0d01200128023021050240024020020d00410121010c010b2002102c2201450d030b200020023602042000200136020020012005200210e9081a200041086a20023602000c040b200441186a200241186a290000370300200441106a200241106a290000370300200441086a200241086a290000370300200420022900003703002001200410af022202450d02200228020c4101480d0220022802082201417f4c0d00200228020021050240024020010d00410121020c010b2001102c2202450d020b200020013602042000200236020020022005200110e9081a200041086a20013602000c030b1038000b1036000b200041003602000b200441206a24000be10303017f047e087f230041306b22022400200241206a20002903182000290308852203200141186a2900008542002000290310220420002903002205852206200129001085420010e808200241106a2003200141086a2900008542002006200129000085420010e8082002200442002004200241106a41086a2903002002290310857c2004200241206a41086a2903002002290320857c200542adfed5e4d485fda8d8007e42a0cbbf9599b5a19f0a7c85421789854217892203420010e808200041246a280200220720002802202208200241086a290300200229030085200389a722097122006a280000220a200941197641818284086c220b732209417f73200941fffdfb776a71418081828478712109200041046a200871210c4104210d024003400240024020090d00200d21090340200c21000240200a200a4101747141808182847871450d004100210e0c050b2008200020096a41046a71210c200941046a220d2109200b200720006a280000220a73220e417f73200e41fffdfb776a7141808182847871220e450d000c020b0b2009210e20070d004100210e0c020b200e417f6a200e71210920012007410020082000200e684103766a716b41306c6a41506a220e412010ec080d000b0b200241306a2400200e41206a4100200e1b0bb60301057f230041e0006b22052400024002402004417f4c0d000240024020040d00410121060c010b2004102c2206450d020b20062003200410e9082107410021060240200141386a2802002004470d0020072001280230200410ec084521060b02402004450d002007102e0b024002402006450d002000200129003c370000200041186a200141d4006a290000370000200041106a200141cc006a290000370000200041086a200141c4006a2900003700000c010b20052003200410b001200541206a41186a200541186a2207290000370300200541206a41106a200541106a2208290000370300200541206a41086a200541086a220929000037030020052005290000370320200541c0006a41086a200241086a280200360200200520022902003703400240024020040d00410121060c010b2004102c2206450d030b200520043602542005200636025020062003200410e9081a200520043602582001200541206a200541c0006a200541d0006a10b102200041186a2007290000370000200041106a2008290000370000200041086a2009290000370000200020052900003700000b200541e0006a24000f0b1038000b1036000be50301047f23004180016b220424000240024020032802082205200041386a280200470d00200328020022062000280230200510ec080d00200341046a280200450d012006102e0c010b200441c0006a41186a2205200141186a290000370300200441c0006a41106a2206200141106a290000370300200441c0006a41086a2207200141086a2900003703002004200129000037034020042000200441c0006a10b202024020042903004201520d00200441c0006a41286a200441306a290300370300200441c0006a41206a200441286a2903003703002005200441206a2903003703002006200441186a2903003703002007200441106a29030037030020042004290308370340200441f0006a41086a200341086a2802003602002004410136027c20042003290200370370200441c0006a200441f0006a10b3020c010b0240200441106a2802002205417c6a2201280200220041004a0d00200541706a2106200441c0006a41086a2207200341086a280200360200200420032902003703400240200541746a280200450d002006280200102e200128020021000b20062004290340370200200641086a20072802003602002001200041016a3602000c010b2001200041016a360200200341046a280200450d002003280200102e0b20044180016a24000b880503017f047e097f230041306b22032400200341206a20012903182001290308852204200241186a2900008542002001290310220520012903002206852207200229001085420010e808200341106a2004200241086a2900008542002007200229000085420010e8082003200542002005200341106a41086a2903002003290310857c2005200341206a41086a2903002003290320857c200642adfed5e4d485fda8d8007e42a0cbbf9599b5a19f0a7c85421789854217892204420010e808200141246a280200220820012802202209200341086a2903002003290300852004892205a7220a71220b6a280000220c200a41197641818284086c220d73220a417f73200a41fffdfb776a7141808182847871210e200b41046a200971210f410421100240024003400240200e0d002010210a0340200f210b200c200c41017471418081828478710d032009200b200a6a41046a71210f200a41046a2210210a200d2008200b6a280000220c73220e417f73200e41fffdfb776a7141808182847871220e450d000b0b2008450d01200e68210a200e417f6a200e71210e200841002009200b200a4103766a716b41306c6a220a41506a2002412010ec080d000b2000200537030820004200370300200041186a41013a0000200041146a2001360200200041106a200a360200200041196a2002290000370000200041216a200241086a290000370000200041296a200241106a290000370000200041316a200241186a2900003700000c010b2000200537030820004201370300200041106a2001360200200041146a20022900003700002000411c6a200241086a290000370000200041246a200241106a2900003700002000412c6a200241186a2900003700000b200341306a24000bca0503027f077e067f23004180016b2202240020022000280208220336020c20002903002104200241106a41186a200041246a2902002205370300200241106a41106a2000411c6a2902002206370300200241106a41086a200041146a2902002207370300200241106a41286a200141086a29020022083703002002200029020c220937031020022001290200220a370330200241c0006a41286a2008370300200241c0006a41206a200a370300200241c0006a41186a2005370300200241c0006a41106a2006370300200241c0006a41086a200737030020022009370340200341206a210b2003280220220c2004a7220d712101200341246a280200210e4104210003402001220f20006a200c712101200041046a2100200e200f6a280000418081828478712210450d000b0240200e201068410376200f6a200c7122006a2c000022014100480d00200e200e280200418081828478716841037622006a2d000021010b200341286a280200210f024020014101712210450d00200f0d00200241f0006a200b2002410c6a10b4022003280220220c200d712101200341246a280200210e4104210003402001220f20006a200c712101200041046a2100200e200f6a28000041808182847871220b450d000b0240200e200b68410376200f6a200c7122006a2c00004100480d00200e280200418081828478716841037621000b2003280228210f0b2003200f20106b360228200e20006a200d41197622013a0000200c2000417c6a71200e6a41046a20013a0000200e410020006b41306c6a41506a220041286a200241c0006a41286a290300370200200041206a200241c0006a41206a290300370200200041186a200241c0006a41186a290300370200200041106a200241c0006a41106a290300370200200041086a200241c0006a41086a290300370200200020022903403702002003412c6a2200200028020041016a36020020024180016a24000be91007077f017e077f017e027f027e017f23004180016b220324000240024002400240200128020c220441016a22052004490d000240200520012802002206200641016a220741037641076c20064108491b22064101764b0d004100210641002105024003400240024020064101710d00200520074f0d0320052106200541016a21050c010b200541036a220620054922080d0220062007492209450d022007200541046a20081b200720091b21050b200141046a28020020066a220620062802002206410776417f73418182840871200641fffefdfb07726a360200410121060c000b0b200141046a2802002105200128020041016a22064104490d02200520066a20052800003600000c030b024002400240024002402005200641016a2206200520064b1b22050d0041d0a1c000210841002109410021050c010b02400240200541074b0d004104410820054104491b21050c010b200541ffffffff01712005470d04417f2005410374220541076e417f6a677641016a41012005410d4b1b21050b2005ad42307e220a422088a70d02200aa72206200541046a22096a22082006490d022008102c2208450d01200820066a220841ff01200910eb081a2005417f6a2209200541037641076c20094108491b21050b200841506a210b200520046b210c200141046a280200220d41046a210e200d20076a210f200d280200417f7341808182847871211020022802002111034002400240024020100d000340200e200f4f0d02200d41c07e6a210d200e2802002105200e41046a2206210e2005418081828478712205418081828478460d000b2005418081828478732207417f6a20077121102006210e0c020b200d450d00201021072010417f6a20107121100c010b2001200436020c2001200c360208200041003602002001280200210520012009360200200141046a22062802002107200620083602002005450d082007200541016aad42307ea76b102e0c080b41002105200341106a20112903182011290308852212200d41002007684103766b41306c6a41506a221341186a22142900008542002011290310220a20112903002215852216201329001085420010e808200341206a2012201341086a22172900008542002016201329000085420010e8082003200a4200200a200341206a41086a2903002003290320857c200a200341106a41086a2903002003290310857c201542adfed5e4d485fda8d8007e42a0cbbf9599b5a19f0a7c85421789854217892212420010e808200341086a290300200329030085201289220aa721060340200541046a2205200620097122076a2106200820076a280000418081828478712202450d000b0240200820026841037620076a20097122056a2c00004100480d002008280200418081828478716841037621050b200820056a200aa741197622063a00002005417c6a20097120086a41046a20063a0000200b410020056b41306c6a220541286a201341286a290200370200200541206a201341206a290200370200200541186a2014290200370200200541106a201341106a290200370200200541086a2017290200370200200520132902003702000c000b0b1036000b41accdcc00411c41c8cdcc001039000b41accdcc00411c41c8cdcc001039000b41accdcc00411c41c8cdcc001039000b200541046a2005200610ea081a0b41002105024020012802002204417f460d002002280200210d200141046a2110410021050340024020102802002208200522146a2d0000418001470d00410020146b21170340200341c0006a200d290318200d2903088522122008201741306c6a41506a220e41186a2213290000854200200d290310220a200d2903002215852216200e29001085420010e808200341d0006a2012200e41086a220f2900008542002016200e29000085420010e808200341306a200a4200200a200341d0006a41086a2903002003290350857c200a200341c0006a41086a2903002003290340857c201542adfed5e4d485fda8d8007e42a0cbbf9599b5a19f0a7c85421789854217892212420010e8082001280200210941002105200341306a41086a290300200329033085201289220aa7221121060340200541046a2205200620097122076a2106200820076a280000418081828478712202450d000b0240200820026841037620076a20097122056a2c00004100480d002008280200418081828478716841037621050b02402005200920117122066b201420066b7320097141034b0d00200820146a200aa741197622053a000020092014417c6a7120086a41046a20053a00000c020b200820056a22062d000021072006200aa741197622023a00002005417c6a20097120086a41046a20023a00000240200741ff01470d002010280200220620146a41ff013a0000200620012802002014417c6a716a41046a41ff013a00002010280200410020056b41306c6a41506a2205200e290200370200200541086a200f290200370200200541106a200e41106a290200370200200541186a2013290200370200200541206a200e41206a290200370200200541286a200e41286a2902003702000c020b2010280200410020056b41306c6a41506a2205290200210a2005200e290200370200200541186a2206290200211220062013290200370200200541106a220629020021152006200e41106a2207290200370200200541086a220629020021162006200f290200370200200f20163702002007201537020020132012370200200e200a370200200541286a2206290200210a2006200e41286a2207290200370200200529022021122005200e290220370220200e20123702202007200a370200201028020021080c000b0b201441016a210520142004470d000b20012802002205200541016a41037641076c20054108491b21050b2000410036020020012005200128020c6b3602080b20034180016a24000ba20201047f23004180016b22032400024020012000413c6a412010ec08450d00200341c0006a41186a2204200141186a290000370300200341c0006a41106a2205200141106a290000370300200341c0006a41086a2206200141086a2900003703002003200129000037034020032000200341c0006a10b202024020032903004201520d00200341c0006a41286a200341306a290300370300200341c0006a41206a200341286a2903003703002004200341206a2903003703002005200341186a2903003703002006200341106a29030037030020032003290308370340200342808080807037037820034201370370200341c0006a200341f0006a10b3020c010b200341106a280200417c6a22012001280200417f6a3602000b20034180016a24000b880101017f230041206b220324000240024020012000413c6a412010ec080d00410121010c010b200341186a200141186a290000370300200341106a200141106a290000370300200341086a200141086a2900003703002003200129000037030002402000200310af0222010d00410021010c010b200128020c41004a21010b200341206a240020010b1300200041e0f2c000360204200020013602000b9a0201067f024020002802202201450d0002402000412c6a280200450d00200041246a280200220241046a2103200120026a41016a21042002280200417f73418081828478712101024003400240024020010d000340200320044f0d04200241c07e6a210220032802002101200341046a220521032001418081828478712201418081828478460d000b2001418081828478732201417f6a2001712106200521030c010b2002450d022001417f6a20017121060b2001682105200621012002410020054103766b41306c6a220541746a280200450d00200541706a280200102e200621010c000b0b200028022021010b200041246a280200200141016aad42307ea76b102e0b0240200041346a280200450d002000280230102e0b0b1300200041e0f2c000360204200020013602000bb10201027f230041206b220424000240024002400240024020022001413c6a412010ec080d00200141386a2802002202417f4c0d01200128023021050240024020020d00410121010c010b2002102c2201450d030b200020023602042000200136020020012005200210e9081a200041086a20023602000c040b200441186a200241186a290000370300200441106a200241106a290000370300200441086a200241086a290000370300200420022900003703002001200410af022202450d02200228020c4101480d0220022802082201417f4c0d00200228020021050240024020010d00410121020c010b2001102c2202450d020b200020013602042000200236020020022005200110e9081a200041086a20013602000c030b1038000b1036000b200041003602000b200441206a24000b880101017f230041206b220324000240024020012000413c6a412010ec080d00410121010c010b200341186a200141186a290000370300200341106a200141106a290000370300200341086a200141086a2900003703002003200129000037030002402000200310af0222010d00410021010c010b200128020c41004a21010b200341206a240020010b8b0201047f200028020421012000410036020402402001450d00024020002802002202450d002002417f6a2102034020012802940321012002450d012002417f6a21020c000b0b024020002802082203450d004100210003402003417f6a210341012102024002400340200020012f0132490d010240200128020022040d002001102e410021010c030b20012f013021002001102e2002417f6a2102200421010c000b0b200041016a210020024101460d00200120004102746a4194036a280200210102402002450d000340200241016a220020024f210420012802940321012000210220040d000b0b410021000b20030d000b0b0340200128020021022001102e2002210120020d000b0b0b8a0201047f200028020421012000410036020402402001450d00024020002802002202450d002002417f6a21020340200128026021012002450d012002417f6a21020c000b0b024020002802082203450d004100210003402003417f6a210341012102024002400340200020012f015e490d01024020012802002204450d0020012f015c21002001102e2002417f6a2102200421010c010b0b2001102e410021010c010b200041016a210020024101460d00200120004102746a41e0006a280200210102402002450d000340200241016a220020024f2104200128026021012000210220040d000b0b410021000b20030d000b0b0340200128020021022001102e2002210120020d000b0b0b8b0201047f200028020421012000410036020402402001450d00024020002802002202450d002002417f6a2102034020012802c00321012002450d012002417f6a21020c000b0b024020002802082203450d004100210003402003417f6a210341012102024002400340200020012f015e490d010240200128025822040d002001102e410021010c030b20012f015c21002001102e2002417f6a2102200421010c000b0b200041016a210020024101460d00200120004102746a41c0036a280200210102402002450d000340200241016a220020024f210420012802c00321012000210220040d000b0b410021000b20030d000b0b0340200128025821022001102e2002210120020d000b0b0be90101047f200028020421012000410036020402402001450d00024020002802182202450d0020002802082103200028020021000340410120006b21002002417f6a2102024002400340200320012f0106490d010240200128020022040d002001102e410021010c030b20012f010421032001102e2000417f6a2100200421010c000b0b200341016a210320004101460d00200120034102746a41206a280200210102402000450d004100210303402001280220210120002003417f6a2203470d000b0b410021030b4100210020020d000b0b0340200128020021002001102e2000210120000d000b0b0bc78c0106027f027e077f027e197f037e230022032104200341e0076b41607122032400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e0a00010203040506070809000b2003418c056a4101360200200342013702fc042003419cc3cb003602f804200341043602e40620034194c3cb003602e0062003200341e0066a36028805200341f8046a41e0ecc0001044000b200141186a2903002105200141106a29030021062001410c6a2802002107200141086a280200210820012802042101200341f8046a41286a200241286a280200360200200341f8046a41206a200241206a290200370300200341f8046a41186a200241186a290200370300200341f8046a41106a200241106a290200370300200341f8046a41086a200241086a290200370300200320022902003703f804200341e0066a200341f8046a10c10241022102200341d0066a41026a220920032d00e3063a0000200341a0036a41086a220a200341f4066a290200370300200341a0036a410d6a220b200341f9066a290000370000200320032f00e1063b01d0062003200341e0066a410c6a2902003703a00302400240024020032d00e0064101460d00200341e0066a41086a280200210220032802e406210c200341f4026a41026a20092d000022093a0000200341c0046a41086a220d200a290300370300200341c0046a410d6a220a200b290000370000200320032f01d006220b3b01f402200320032903a0033703c004200320093a00a2062003200b3b01a006200320023600a7062003200c3600a306200341b3066a200d290300370000200341a0066a41186a200a290000370000200320032903c0043700ab06024002400240200741818001490d00200341a0046a410310c2020c010b0240200642ffcfdbc3f4025620054200522005501b0d00200341a0046a410610c2020c010b200341a0046a41186a220b4200370300200341b0046a22024200370300200341a0046a41086a22094200370300200342003703a004200341e0066a41bad7c70041081081022009200341e0066a41086a220a290000370300200320032900e0063703a004200341e0066a4198d9c000410b108102200b200a290000370300200220032900e006370300200341106a200341a0046a4120108e0220032007ad42004280c2d72f420010e8082003280214210c2003280210210d200341f8046a200341a0066a2003290300220e4280c8afa0257c220f200341086a290300200f200e54ad7c220e10c302024020032d00f8044106470d00200b42003703002002420037030020094200370300200342003703a004200341e0066a41bad7c70041081081022009200a290000370300200320032900e0063703a004200341e0066a4198d9c000410b108102200241086a200a290000370000200220032900e0063700002003200c4100200d1b220241016a3602f804200341a0046a4120200341f8046a410410b20120034182066a20032d00a2063a000020034183066a20032900a306370000200341f8046a41186a4200370300200341f8046a41206a4200370300200341a0056a42003703002003418b066a200341ab066a220929000037000020034193066a200941086a29000037000020034198066a2009410d6a2900003700002003200537038005200320063703f804200320032f01a0063b0180062003420037038805200341b0056a200e3703002003200f3703a805200341003a00b805200341a0046a200210f90120032802a804210a20032802a0042109200341003602e806200342013703e006200341f8046a200341e0066a1080022009200a20032802e006220b20032802e80610b201024020032802e406450d00200b102e0b024020032802a404450d002009102e0b200320073602a804200320083602a404200320013602a004200341e0066a200210c40220032802e006220720032802e806200341a0046a10c502024020032802e406450d002007102e0b02402008450d002001102e0b200341ec066a2002360200200341e8066a41003a0000200341153a00e006200341e0066a10fe0141062102200341063a00a0040c020b200341a0046a410110c2020b02402008450d002001102e0b20032902a404210520032d00a00421020b200341f8026a41026a220120032d00a3043a0000200320032f00a1043b01f802200241ff01714106460d02200341e0036a41026a20012d00003a0000200320032f01f8023b01e0030c010b02402008450d002001102e0b0b20034190036a41026a200341e0036a41026a2d000022013a0000200320032f01e00322083b019003200041206a20023a0000200041186a41003a000020004200370308200020083b0021200041236a20013a00002000200537002420004201370300200424000f0b200041186a41003a00002000420037030820002003280080043600192000411c6a20034183046a28000036000020004200370300200424000f0b20012802042101200341f8046a41286a200241286a280200360200200341f8046a41206a200241206a290200370300200341f8046a41186a200241186a290200370300200341f8046a41106a200241106a290200370300200341f8046a41086a200241086a290200370300200320022902003703f8044102210202400240200341f8046a10c60241ff01714102460d00200341c0046a200110f901200341f8046a20032802c004220820032802c804220710fa01024002400240024020032d00b80541064622020d0002404100200341f8046a20021b22022d0040450d0020034180046a410410c2020c020b200241013a0040200241c1006a200341e0066a41c70010e9081a200341b8046a22094200370300200341b0046a220a4200370300200341a0046a41086a220b4200370300200342003703a004200341e0066a41bad7c7004108108102200b200341e0066a41086a2202290000370300200320032900e0063703a004200341e0066a41c0dac000410f10810220092002290000370300200a20032900e0063703004104102c2209450d0d200342043702a406200320093602a006200320013602e006200341a0066a200341e0066a41041074200220032802a806360200200320032903a0063703e006200341a0046a4120200341e0066a10c702200341063a0080040c020b20034180046a410210c2020b4100210120032d00800422024106470d010b410621020240024020032d00b8054106470d002008200710ff010c010b200341003602e806200342013703e006200341f8046a200341e0066a1080022008200720032802e006220220032802e80610b201024020032802e406450d002002102e0b410621020b410121010b024020032802c404450d002008102e0b200341f8026a41026a220820032d0083043a0000200320032f0081043b01f80220010d012003290284042105200341c0036a41026a20082d00003a0000200320032f01f8023b01c00320024106460d010b200341a0036a41026a200341c0036a41026a2d000022013a0000200320032f01c00322083b01a003200041206a20023a0000200041186a41003a000020004200370308200020083b0021200041236a20013a00002000200537002420004201370300200424000f0b20004200370308200020032800e003360019200041186a41003a00002000411c6a200341e3036a28000036000020004200370300200424000f0b200141386a2903002105200141306a29030021062001280204211020034190036a41026a22072001410b6a2d00003a0000200341e0066a41086a22092001411c6a290200370300200341e0066a41106a220a200141246a290200370300200320012f00093b0190032003200141146a2902003703e006200141086a2d000021082001410c6a280200210d200141106a2802002101200341f8046a41286a200241286a280200360200200341f8046a41206a200241206a290200370300200341f8046a41186a200241186a290200370300200341f8046a41106a220b200241106a290200370300200341f8046a41086a220c200241086a290200370300200320022902003703f8040240024002400240200341f8046a10c60241ff01714102460d00200341c0046a41026a20072d00003a0000200c2009290300370300200b200a290300370300200320032f0190033b01c004200320032903e0063703f8040240024020080e03030100010b2001450d00200d102e0b200341c0036a41086a200341a0066a41086a290300370300200320032f01a0043b01fc02410121020c020b20084102470d1f2001450d1f200d102e410221020c200b200341a0066a410d6a2202200341f8046a410d6a290000370000200341a0066a41086a2208200341f8046a41086a290300370300200341fc026a41026a2207200341c0046a41026a2d00003a0000200341c0036a41086a22092008290300370300200341c0036a410d6a22082002290000370000200320032f01c0043b01fc02200320032903f8043703c003200341d0066a41026a220220072d00003a0000200320032f01fc023b01d006200341a0036a410d6a22072008290000370000200341a0036a41086a220a2009290300370300200320032903c0033703a003200341c0046a201010f901200341f8046a20032802c004220820032802c804220910fa01200341b3046a200a290300370000200341b8046a2007290000370000200320022d00003a00a204200320032f01d0063b01a004200320013600a7042003200d3600a304200320032903a0033700ab04024002400240024020032d00b80541064622020d0002404100200341f8046a20021b22022d00404103490d0020034180046a410410c2020c020b02402002290300200656200241086a290300220f200556200f2005511b0d0020034180046a410710c2020c020b200241033a0040200241c1006a20032903a004370000200341a0046a41186a290300210f200241186a2005370300200341b0046a290300210520022006370310200241c9006a200341a0046a41086a290300370000200241d1006a2005370000200241d9006a200f370000200341063a0080040c020b20034180046a410210c2020b4100210120032d00800422024106470d010b410621020240024020032d00b8054106470d002008200910ff010c010b200341003602a806200342013703a006200341f8046a200341a0066a1080022008200920032802a006220220032802a80610b201024020032802a406450d002002102e0b410621020b410121010b024020032802c404450d002008102e0b200341f8026a41026a220820032d0083043a0000200320032f0081043b01f80220010d01200329028404210520034180036a41026a20082d00003a0000200320032f01f8023b0180030b20024106470d1e0b20004200370308200020032800e003360019200041186a41003a00002000411c6a200341e3036a28000036000020004200370300200424000f0b20012802042111200241276a2d00002112200241256a2f00002113200241246a2d00002114200241226a2f01002115200241206a2f0100210b2002411c6a280200210c200241186a280200210d200241146a2802002110200241106a28020021162002410c6a2802002109200241086a280200210a200241066a2f00002117200241056a2d00002118200241046a2d0000210841022107200241026a2f010021192002280228210120022d0001211a0240024002400240024020022d0000221b0e03000102000b4100211c4102211d2008210702400240201a0e03000105000b4100211d200821074100211c0c040b4101211d200821070c030b4102210702400240024020080e03000102000b410021070c010b410121070b200341a0066a41026a200341f8046a41026a2d00003a0000200320032f00f8043b01a0064101211c0c010b02400240024020080e03000102000b410021070c010b410121070b4102211c200341a0066a41026a200341f8046a41026a2d00003a0000200320032f00f8043b01a0060b0b200128020041016a221e41014d0d06201320124110747221022003419c056a221220143a00002003419a056a221320153b010020034198056a221f200b3b010020034194056a2220200c36020020034190056a2221200d360200200341f8046a41146a22222010360200200341f8046a41106a22232016360200200341f8046a410c6a22242009360200200341f8046a41086a2225200a3602002001201e3602002003419d056a221e20032f01a0063b00002003419f056a2226200341a0066a41026a2d00003a0000200320173b01fe04200320183a00fd04200320073a00fc04200320193b01fa042003201d3a00f9042003201c3a00f804200320013602a005200341e0066a200341f8046a10c102024020032d00e0064101470d00202620024110763a0000201e20023b0000201220143a0000201320153b0100201f200b3b01002020200c3602002021200d3602002022201036020020232016360200202420093602002025200a360200200320013602a005200320173b01fe04200320183a00fd04200320083a00fc04200320193b01fa042003201a3a00f9042003201b3a00f804024002400240201b0e020001020b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b2003200b3b01be062003200c3601ba062003200d3601b606200320103601b206200320163601ae06200320093601aa062003200a3601a606200320173b01a406200320183a00a306200320083a00a206200320193b01a0060240201a450d004110102c2202450d09200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d0920014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220836020020080d022002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22082008280200417f6a220836020020080d022002102e0c020b4101210b410021084100210a0c1d0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b024020080d004101210b200a41017420094d0d00410021084100210a0c1d0b4110102c2202450d07200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d0720014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220836020020080d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22082008280200417f6a220836020020080d002002102e0b20012001280200417f6a22023602004100210b4101210820020d1a2001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d1a2001102e4100210a0c1b0b200341d0066a41026a220720032d00e3063a0000200341a0036a41086a2227200341e0066a41146a290200370300200341a0036a410d6a2228200341f9066a290000370000200320032f00e1063b01d0062003200341e0066a410c6a2902003703a003200341e0066a41086a280200211d20032802e406211c202620024110763a0000201e20023b0000201220143a0000201320153b0100201f200b3b01002020200c3602002021200d3602002022201036020020232016360200202420093602002025200a360200200320013602a005200320173b01fe04200320183a00fd04200320083a00fc04200320193b01fa042003201a3a00f9042003201b3a00f804200341f4026a41026a20072d00003a0000200341c0046a41086a2027290300370300200341c0046a410d6a202829000037000020012001280200417f6a2202360200200320032f01d0063b01f402200320032903a0033703c0044101210a41002108024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b20032802a005220141046a22022002280200417f6a220236020020020d002001102e0b4100210b0c1a0b20012802042101200341f8046a41286a200241286a280200360200200341f8046a41206a200241206a290200370300200341f8046a41186a200241186a290200370300200341f8046a41106a200241106a290200370300200341f8046a41086a200241086a290200370300200320022902003703f804200341e0066a200341f8046a10c102200341a0046a41086a2202200341e9066a290000370300200341a0046a41106a2208200341f1066a290000370300200341a0046a41186a2207200341f9066a290000370300200320032900e1063703a00420032d00e0064101460d07200341c0046a41186a2007290300370300200341c0046a41106a2008290300370300200341c0046a41086a2002290300370300200320032903a0043703c004200341a0046a200110f901200341f8046a20032802a004220820032802a804220710fa0120032d00b80541064622020d0602404100200341f8046a20021b22022d00404103460d00200341a0066a410410c2020c140b0240200341c0046a200241c1006a2201412010ec08450d00200341a0066a410510c2020c140b200341e8016a20022903102205200241186a290300220642c0843d420010e608200341d8016a2005200642c0843d420010e708200341c8016a20032903d801200341d8016a41086a29030042a0c21e420010e808200341e0066a200120032903c801220620032903e8012205420188a7200542a0c21e7e42c0843d8242a0c21e566aad7c2205200341c8016a41086a2903002005200654ad7c220610c302200341fa026a220920032d00e3063a0000200320032f00e1063b01f802024020032d00e006220a4106470d0020022005370320200241286a2006370300200341a0066a41186a22094200370300200341a0066a41106a220a4200370300200341a0066a41086a220b4200370300200342003703a006200341d0066a41d9fcc6004106108102200b200341d0066a41086a220c290000370300200320032900d0063703a006200341d0066a4180f4cb0041061081022009200c290000370300200a20032900d006370300200341c0016a200341a0066a4120108e0220032802c001210920032802c401210a200241043a0040200141086a2900002105200141106a29000021062001290000210f200241d9006a200141186a290000370000200241d1006a2006370000200241c9006a2005370000200241c1006a200f370000200241e4006a200a41808dcf006a41808dcf0020091b360200200341063a00a0060c150b20032902e40621052003200a3a00a006200320032f01f8023b00a106200320053702a406200320092d00003a00a3060c130b20012802042117200341ec026a41026a22072001410b6a2d00003a000020034180046a41086a22092001411c6a29020037030020034180046a41106a220a200141246a290200370300200320012f00093b01ec022003200141146a29020037038004200141086a2d000021082001410c6a280200210b200141106a2802002101200341f8046a41286a200241286a280200360200200341f8046a41206a200241206a290200370300200341f8046a41186a200241186a290200370300200341f8046a41106a220c200241106a290200370300200341f8046a41086a220d200241086a290200370300200320022902003703f804200341e0066a200341f8046a10c102200341f4026a41026a220220032d00e3063a0000200341c0046a41086a2210200341e0066a41146a290200370300200341c0046a410d6a2216200341f9066a290000370000200320032f00e1063b01f4022003200341e0066a410c6a2902003703c00402400240024020032d00e0064101460d00200341e0066a41086a280200211820032802e406211920034180036a41026a20022d00003a0000200341e0036a41086a2010290300370300200341e0036a410d6a2016290000370000200320032f01f4023b018003200320032903c0043703e003200341a0066a41026a20072d00003a0000200320032f01ec023b01a006200d2009290300370300200c200a29030037030020032003290380043703f8040240024020080e03030100010b2001450d00200b102e0b200341a0036a41086a200341e0066a41086a290300370300200320032f01a0043b01d006410121020c020b20084102470d122001450d12200b102e410221020c130b200341e0066a410d6a2202200341f8046a410d6a290000370000200341e0066a41086a2208200341f8046a41086a290300370300200341d0066a41026a2207200341a0066a41026a2d00003a0000200341a0036a41086a22092008290300370300200341a0036a410d6a22082002290000370000200320032f01a0063b01d006200320032903f8043703a003200320072d00003a00c204200320032f01d0063b01c004200320013600c7042003200b3600c304200341d8046a2008290000370000200341d3046a2009290300370000200320032903a0033700cb04200341a0036a201710f901200341f8046a20032802a003220820032802a803220710fa01200341e0066a410b6a2018360000200341ef066a20032903e003370000200341f7066a200341e0036a41086a290300370000200341fc066a200341e0036a410d6a290000370000200320032f0180033b01e406200320034180036a41026a2d00003a00e606200320193600e70620032d00b80521022003200341c0046a3602e0060240024002400240200241064622020d0002404100200341f8046a20021b22022d00404104460d00200341a0066a410410c2020c020b0240200341e0066a4104722209200241c1006a220a412010ec08450d00200341a0066a410510c2020c020b200341fe026a220d20032d00c2043a0000200341a0046a41086a2210200941086a290200370300200341a0046a41106a2216200941106a290200370300200341a0046a41186a2218200941186a290200370300200341c0036a41086a2219200341c0046a410b6a220c41086a290000370300200341c0036a410d6a2214200c410d6a290000370000200320032f01c0043b01fc02200320092902003703a0042003200c2900003703c003200341a0066a41186a22094200370300200341a0066a41106a220c4200370300200341a0066a41086a22154200370300200342003703a006200341d0066a41d9fcc60041061081022015200341d0066a41086a221a290000370300200320032900d0063703a006200341d0066a4180f4cb0041061081022009201a290000370300200c20032900d006370300200341f8016a200341a0066a4120108e0220032802f801210920032802fc01210c200241053a0040200a41186a2018290300370000200a41106a2016290300370000200a41086a2010290300370000200a20032903a004370000200241e1006a20032f01fc023b0000200241e3006a200d2d00003a0000200241e8006a2001360000200241e4006a200b36000020024184016a200c418084076a4180840720091b360200200241ec006a20032903c003370000200241f4006a2019290300370000200241f9006a2014290000370000200341063a00a0060c020b200341a0066a410210c2020b4100210120032d00a00622024106470d010b410621020240024020032d00b8054106470d002008200710ff010c010b200341003602e806200342013703e006200341f8046a200341e0066a1080022008200720032802e006220220032802e80610b201024020032802e406450d002002102e0b410621020b410121010b024020032802a403450d002008102e0b200341f8026a41026a220820032d00a3063a0000200320032f00a1063b01f80202402001450d00200341f8046a41086a41033a000020034181056a20032903c004370000200341a4056a201736020020034189056a200341c0046a41086a29030037000020034191056a200341d0046a29030037000020034199056a200341d8046a290300370000200341153a00f804200341f8046a10fe010c110b20032902a4062105200341e8026a41026a20082d00003a0000200320032f01f8023b01e8020b20024106460d0f0c110b20012802042108200341f8046a41286a2207200241286a280200360200200341f8046a41206a200241206a290200370300200341f8046a41186a2209200241186a290200370300200341f8046a41106a200241106a290200370300200341f8046a41086a200241086a290200370300200320022902003703f804200341e0066a200341f8046a10c102410121014102210220032d00e0064101460d0d20034190036a200810f901200341f8046a200328029003220a200328029803220b10fa01200341d0056a22022903002105200220032903f806370300200341c8056a22022903002106200220032903f006370300200341c0056a2202290300210f200220032903e806370300200320053703b806200320063703b0062003200f3703a806200320032903b80522053703a0062003200341f0056a2903003703d8042003200341e8056a2903003703d0042003200341e0056a2903003703c8042003200341d8056a290300220e3703c004200341063a00e006200320032903e00622063703b805200341f8056a290300210f024002402005a7220241ff01714106470d000c010b2009290300210520072903002129200329038805212a200329039805212b200341e0066a41176a20032900b806370000200341e0066a41106a20032900b106370300200341e0066a41086a20032900a906370300200341a0046a41086a20032900c904370300200341a0046a41106a20032900d104370300200341a0046a41176a20032900d804370000200320032900a1063703e006200320032900c1043703a004200ea72118200fa72119410021010b2006a7210720034180046a41086a2209200341e0066a41086a29030037030020034180046a41106a220c200341e0066a41106a29030037030020034180046a41176a220d200341e0066a41176a290000370000200341e0036a41086a2210200341a0046a41086a290300370300200341e0036a41106a2216200341a0046a41106a290300370300200341e0036a41176a2217200341a0046a41176a290000370000200320032903e00637038004200320032903a0043703e00320010d06200341c0036a41176a200d290000370000200341c0036a41106a200c290300370300200341c0036a41086a2009290300370300200341a0036a41086a2010290300370300200341a0036a41106a2016290300370300200341a0036a41176a201729000037000020032003290380043703c003200320032903e0033703a0030240200241ff01714105460d0020034180036a410410c2020c0d0b200341a0046a41176a200341c0036a41176a290000370000200341a0046a41106a200341c0036a41106a290300370300200341a0046a41086a200341c0036a41086a290300370300200320032903c0033703a004200320183a00bf04200341c0046a41176a200341a0036a41176a290000370000200341c0046a41106a200341a0036a41106a290300370300200341c0046a41086a200341a0036a41086a290300370300200320032903a0033703c004200320193a00df04200341b8066a22024200370300200341a0066a41106a22014200370300200341a0066a41086a22094200370300200342003703a006200341d0066a41d9fcc60041061081022009200341d0066a41086a220c290000370300200320032900d0063703a006200341d0066a4180f4cb0041061081022002200c290000370300200120032900d00637030020034190026a200341a0066a4120108e02024020032802940241002003280290021b200f422088a74f0d0020034180036a410910c2020c0d0b200342f0f2bda1a7ee9cb9f90037038004200320083602e806200341023602e406200341e2b8c0003602e006200341a0066a20034180046a200341e0066a10fc0120034180046a200341a0066a10c802200341e0066a200328028004220120032802880410c902200341e0066a41106a290300420020032903e00642015122021b210620032903e806420020021b210f0240200328028404450d002001102e0b20034180026a200341a0046a202b202910fb01200341e0036a200341a0066a200341a0046a200f202a202a200f56200520065620052006511b22021b220e2006200520021b2205410110ca0220034180046a200341a0066a200341c0046a4200200f200e7d222a202a200f56200620057d200f200e54ad7d220520065620052006511b22021b22064200200520021b2205410110ca0241062107200341063a00b805200341e0066a200810c40220032802e006220220032802e80610ff01024020032802e406450d002002102e0b20034198076a200537030020034190076a2006370300200341e0066a41086a41043a0000200341e9066a20032903c0043700002003418c076a2008360200200341f1066a200341c0046a41086a290300370000200341f9066a200341d0046a29030037000020034181076a200341d8046a290300370000200341153a00e006200341e0066a10fe01200341063a0080030c0c0b200128020421072002410e6a2f0100210a2002410d6a2d0000210b2002410c6a2d0000210c2002410a6a2f0100210d200241096a2d00002110200241086a2d00002116200241046a2d0000210920022802282101024020022d000022080d002002411a6a2901002105200241196a2d00002108200241186a2d00002117200241166a2f01002118200241156a2d00002119200241146a2d00002114200241126a2f01002115200241116a2d0000211a200241106a2d0000211b200241066a2f0100211d200241056a2d0000211c200241026a2f0100211220022d0001210220012001280200417f6a2213360200024020130d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22132013280200417f6a221336020020130d002001102e0b200320053703b806200320083a00b706200320173a00b606200320183b01b406200320193a00b306200320143a00b206200320153b01b0062003201a3a00af062003201b3a00ae062003200a3b01ac062003200b3a00ab062003200c3a00aa062003200d3b01a806200320103a00a706200320163a00a6062003201d3b01a4062003201c3a00a306200320093a00a206200320123b01a0060240200241ff01710d00410321080c010b4110102c2202450d02200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d0220014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a22173602004100210820170d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22172017280200417f6a221736020020170d002002102e0b0240024002402008417f6a0e03000102010b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0240200941ff01710d00200d411074201041087472201672410174200a411074200b41087472200c724b0d020b4110102c2202450d03200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d0320014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220836020020080d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22082008280200417f6a220836020020080d002002102e0b20012001280200417f6a22083602004102210220080d0b2001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22082008280200417f6a220836020020080d0b2001102e0c0b0b200341a0046a200710f901200341f8046a20032802a004220120032802a804220810fa01024002400240024002400240024020032d00b80541064622020d004100200341f8046a20021b22022d00400e06020305050401020b200341e0066a410210c202200320032900e106370380042003200341e8066a2800003600870420032d00e006210220032802a404450d102001102e0c100b200341e0066a410810c202200320032900e106370380042003200341e0066a41086a2800003600870420032d00e006210220032802a404450d0f2001102e0c0f0b200341e0066a200710c40220032802e006220920032802e80610ff01024020032802e406450d002009102e0b200341a8026a20024188016a2002290330222a200241386a290300222b10cb0220032903a80221052003200341a8026a41086a29030022063703e806200320053703e0060240024020052006844200520d002003200341e0066a3602a006200341a0066a10cc020c010b200342f0f2bda1a7ee9cb9f9003703a006200341e0066a200341a0066a10cd0220034198026a200341e0066a2005200610fd01200341b0066a20034198026a41086a290300220e20067d200329039802220f200554ad7d2006200e7d2005200f54ad7d200f200556200e200656200e2006511b22021b3703002003200f20057d2005200f7d20021b3703a80620032002ad3703a006200341a0066a41086a21090240024020020d00200320093602c004200341c0046a10cc020c010b200320093602c004200341c0046a10ce020b200341f8066a2006370300200341f0066a2005370300200341e8066a41063a00002003410e3a00e006200341e0066a10fe010b200341063a00b805200341f8066a202b370300200341f0066a202a370300200341ec066a2007360200200341e8066a41013a0000200341153a00e006200341e0066a10fe0142f0f98fc30121050c030b200341e0066a410410c202200320032900e106370380042003200341e8066a2800003600870420032d00e006210220032802a404450d0d2001102e0c0d0b200341c8026a200241c1006a2002290320200241286a29030010fb010b200342f0f2bda1a7ee9cb9f9003703c004200320073602e806200341023602e406200341e2b8c0003602e006200341a0066a200341c0046a200341e0066a10fc01200341e0066a200710c40220032802e006220220032802e80610ff01024020032802e406450d002002102e0b200341c0046a200341a0066a10c802200341e0066a20032802c004220920032802c80410c902200341f0066a290300420020032903e00642015122021b210520032903e806420020021b2106024020032802c404450d002009102e0b200342f0f2bda1a7ee9cb9f9003703c004200341e0066a200341c0046a10cd02200341c0046a200341a0066a200341e0066a20062005410110ca02200341063a00b805200341ec066a2007360200200341e8066a41053a0000200341153a00e006200341e0066a10fe01428887a88c0221050b0240024020032d00b8054106470d002001200810ff010c010b200341003602e806200342013703e006200341f8046a200341e0066a1080022001200820032802e006220220032802e80610b20120032802e406450d002002102e0b024020032802a404450d002001102e0b200320032800c0033602a0032003200341c3036a2800003600a303200041186a41003a0000200041106a200537030020004201370308200020032802a0033600192000411c6a20032800a30336000020004200370300200424000f0b200128020421072001410c6a2802002108200141086a2802002101200341f8046a41286a200241286a280200360200200341f8046a41206a200241206a290200370300200341f8046a41186a200241186a290200370300200341f8046a41106a200241106a290200370300200341f8046a41086a200241086a290200370300200320022902003703f804200341e0066a200341f8046a10c102200341a0046a41086a2202200341e9066a290000370300200341a0046a41106a2209200341f1066a290000370300200341a0046a41186a220a200341f9066a290000370300200320032900e1063703a00420032d00e0064101460d05200341c0046a41186a200a290300370300200341c0046a41106a2009290300370300200341c0046a41086a2002290300370300200320032903a0043703c004200341a0046a200710f901200341f8046a20032802a004220a20032802a804220b10fa01024002400240024020032d00b80541064622020d0002404100200341f8046a20021b22022d00404104460d00200341a0066a410410c2020c020b0240200241c1006a200341c0046a412010ec08450d00200341a0066a410510c2020c020b200341b8066a22094200370300200341b0066a220c4200370300200341a0066a41086a220d4200370300200342003703a006200341d0066a41d9fcc6004106108102200d200341d0066a41086a2210290000370300200320032900d0063703a006200341d0066a4180f4cb00410610810220092010290000370300200c20032900d006370300200341d8026a200341a0066a4120108e02200220032802dc0241808dcf006a41808dcf0020032802d8021b22092002280264220c2009200c4b1b360264200341063a00a0060c020b200341a0066a410210c2020b4100210920032d00a00622024106470d010b410621020240024020032d00b8054106470d00200a200b10ff010c010b200341003602e806200342013703e006200341f8046a200341e0066a108002200a200b20032802e006220220032802e80610b201024020032802e406450d002002102e0b410621020b410121090b024020032802a404450d00200a102e0b200341f8026a41026a220a20032d00a3063a0000200320032f00a1063b01f80202402009450d0020034184056a200736020020034180056a41063a0000200341153a00f804200341f8046a10fe012008450d082001102e0c080b20032902a406210520034180046a41026a200a2d00003a0000200320032f01f8023b0180040c060b1036000b00000b200341a0066a410210c2020c0c0b410221020c0e0b20034180036a410210c2020c050b410221020b02402008450d002001102e0b20024106460d00200341f8046a41026a20034180046a41026a2d000022013a0000200320032f01800422083b01f804200041206a20023a0000200041186a41003a000020004200370308200020083b0021200041236a20013a000020002005370024420121050c010b4200210520004200370308200020032800f804360019200041186a41003a00002000411c6a200341fb046a2800003600000b20002005370300200424000f0b200320032800c0033602a00320032003290380043703e00320032003280087043600e7032003200341c3036a2800003600a303200041186a41003a000020004200370308200020032802a0033600192000411c6a20032800a303360000200041206a20023a0000200020032903e003370021200041286a20032800e70336000020004201370300200424000f0b024020032d00800322024106470d0002400240200741ff01714106470d00200a200b10ff010c010b200341003602e806200342013703e006200341f8046a200341e0066a108002200a200b20032802e006220220032802e80610b20120032802e406450d002002102e0b0240200328029403450d00200a102e0b200041186a41003a000020004200370308200020032800ec023600192000411c6a200341ef026a28000036000020004200370300200424000f0b0240200328029403450d00200a102e0b200341fe026a20032d0083033a0000200320032f00810322013b01f802200320013b01fc0220032902840321050b200341f4026a41026a200341fc026a41026a2d000022013a0000200320032f01fc0222083b01f402200041206a20023a0000200041186a41003a000020004200370308200020083b0021200041236a20013a00002000200537002420004201370300200424000f0b200042003703082000200328009003360019200041186a41003a00002000411c6a20034193036a28000036000020004200370300200424000f0b410221020b200341e4026a41026a200341e8026a41026a2d000022013a0000200320032f01e80222083b01e402200041206a20023a0000200041186a41003a000020004200370308200020083b0021200041236a20013a00002000200537002420004201370300200424000f0b4100210120032d00a00622024106470d010b410621020240024020032d00b8054106470d002008200710ff010c010b200341003602e806200342013703e006200341f8046a200341e0066a1080022008200720032802e006220220032802e80610b201024020032802e406450d002002102e0b410621020b410121010b024020032802a404450d002008102e0b200341e0036a41026a220820032d00a3063a0000200320032f00a1063b01e00320010d0120032902a4062105200341c0036a41026a20082d00003a0000200320032f01e0033b01c00320024106460d010b200341a0036a41026a200341c0036a41026a2d000022013a0000200320032f01c00322083b01a003200041206a20023a0000200041186a41003a000020004200370308200020083b0021200041236a20013a00002000200537002420004201370300200424000f0b200042003703082000200328008004360019200041186a41003a00002000411c6a20034183046a28000036000020004200370300200424000f0b4100210a0b4102210220034180036a41026a2201200341f4026a41026a2d00003a0000200341e0036a41086a2207200341c0046a41086a290300370300200341e0036a410d6a2209200341c0046a410d6a290000370000200320032f01f4023b018003200320032903c0043703e003024002400240024002400240024020080d00200341ec026a41026a220220012d00003a000020034180046a41086a2201200729030037030020034180046a410d6a22072009290000370000200320032f0180033b01ec02200320032903e00337038004200341e0036a201110f901200341f8046a20032802e003220820032802e803220910fa01200341fc026a41026a20022d00003a0000200341c0036a41086a2001290300370300200341c0036a410d6a2007290000370000200320032f01ec023b01fc0220032003290380043703c0030240024020032d00b80541064622020d00024002400240024002404100200341f8046a20021b22022d00400e06000000010203000b200341a0066a410410c2020c050b200341b3046a200341c0036a41086a290300370000200341a0046a41186a2201200341cd036a290000370000200320032f01fc023b01a0042003201d3600a7042003201c3600a304200320032903c0033700ab042003200341fe026a2d00003a00a204200a450d07200341e0066a41186a2001290300370300200341e0066a41106a200341a0046a41106a290300370300200341e0066a41086a200341a0046a41086a290300370300200320032903a0043703e006200341e0066a200241c1006a412010ec08450d070c020b200241c1006a2101024002400240200a450d00200341d3046a200341c0036a41086a290300370000200341c0046a41186a200341cd036a290000370000200320032f01fc023b01c0042003201d3600c7042003201c3600c304200320032903c0033700cb042003200341fe026a2d00003a00c204200341c0046a2001412010ec08450d01200341a0066a41186a22074200370300200341b0066a220a4200370300200341a0066a41086a220b4200370300200342003703a006200341d0066a41d9fcc6004106108102200b200341d0066a41086a220c290000370300200320032900d0063703a006200341d0066a4180f4cb0041061081022007200c290000370300200a20032900d006370300200341d8006a200341a0066a4120108e0202402003280258450d002002280264200328025c490d030b200341a0066a410910c2020c060b200341f0006a20012002290320200241286a29030010cb02200329037021052003200341f0006a41086a29030022063703e806200320053703e0060240024020052006844200520d002003200341e0066a3602a006200341a0066a10cc020c010b200342f0f2bda1a7ee9cb9f9003703a006200341e0066a200341a0066a10cd02200341e0006a200341e0066a2005200610fd01200341b0066a200341e0006a41086a290300220e20067d2003290360220f200554ad7d2006200e7d2005200f54ad7d200f200556200e200656200e2006511b22011b3703002003200f20057d2005200f7d20011b3703a80620032001ad3703a006200341a0066a41086a21070240024020010d00200320073602c004200341c0046a10cc020c010b200320073602c004200341c0046a10ce020b200341f8066a2006370300200341f0066a2005370300200341e8066a41063a00002003410e3a00e006200341e0066a10fe010b20024200370320200241286a42003703000c080b200341186a20012002290320200241286a29030010fb010c070b200341386a20012002290320200241286a29030010cb02200329033821052003200341386a41086a29030022063703e806200320053703e0060240024020052006844200520d002003200341e0066a3602a006200341a0066a10cc020c010b200342f0f2bda1a7ee9cb9f9003703a006200341e0066a200341a0066a10cd02200341286a200341e0066a2005200610fd01200341b0066a200341286a41086a290300220e20067d2003290328220f200554ad7d2006200e7d2005200f54ad7d200f200556200e200656200e2006511b22011b3703002003200f20057d2005200f7d20011b3703a80620032001ad3703a006200341a0066a41086a21070240024020010d00200320073602a004200341a0046a10cc020c010b200320073602a004200341a0046a10ce020b200341f8066a2006370300200341f0066a2005370300200341e8066a41063a00002003410e3a00e006200341e0066a10fe010b20024200370320200241286a42003703000c060b200b0d040b41022102200341023a00a006410021010c060b200341a0066a410210c2020b4100210120032d00a00622024106470d040c030b0c040b200341a0016a200241c1006a2002290320200241286a29030010cb0220032903a00121052003200341a0016a41086a29030022063703e806200320053703e0060240024020052006844200520d002003200341e0066a3602a006200341a0066a10cc020c010b200342f0f2bda1a7ee9cb9f9003703a006200341e0066a200341a0066a10cd0220034190016a200341e0066a2005200610fd01200341b0066a20034190016a41086a290300220e20067d200329039001220f200554ad7d2006200e7d2005200f54ad7d200f200556200e200656200e2006511b22011b3703002003200f20057d2005200f7d20011b3703a80620032001ad3703a006200341a0066a41086a21070240024020010d00200320073602c004200341c0046a10cc020c010b200320073602c004200341c0046a10ce020b200341f8066a2006370300200341f0066a2005370300200341e8066a41063a00002003410e3a00e006200341e0066a10fe010b20024200370320200241286a42003703000b200241023a0040200241c1006a200341e0066a41c70010e9081a200341063a00a0060b410621020240024020032d00b8054106470d002008200910ff010c010b200341003602e806200342013703e006200341f8046a200341e0066a1080022008200920032802e006220220032802e80610b201024020032802e406450d002002102e0b410621020b410121010b024020032802e403450d002008102e0b200341f8026a41026a220820032d00a3063a0000200320032f00a1063b01f80220010d0120032902a4062105200341e8026a41026a20082d00003a0000200320032f01f8023b01e80220024106460d010b200341e4026a41026a200341e8026a41026a2d000022013a0000200320032f01e80222083b01e402200041206a20023a0000200041186a41003a000020004200370308200020083b0021200041236a20013a00002000200537002420004201370300200424000f0b200042003703082000200328009003360019200041186a41003a00002000411c6a20034193036a28000036000020004200370300200424000f0b410221020b200341ec026a41026a20034180036a41026a2d000022013a0000200320032f01800322083b01ec02200041206a20023a0000200041186a41003a000020004200370308200020083b0021200041236a20013a00002000200537002420004201370300200424000bbe06030d7f017e037f230041306b220224002002200141026a2f01003b012e2002200141066a2f01003b012c20022001410a6a2f01003b012a200141046a2d00002103200141056a2d00002104200141086a2d00002105200141096a2d000021062001410c6a2d000021072001410d6a2d0000210820012d0001210920012d0000210a20022001410e6a2f01003b0128200141116a2d0000210b200141106a2d0000210c2002200141126a2f01003b0126200141156a2d0000210d200141146a2d0000210e2002200141166a2f01003b01242001411a6a290100210f200141196a2d00002110200141186a2d000021112001280228210120022f012e211202400240200a0d0020012001280200417f6a220a360200200220123b0122200220022f012c3b0120200220022f012a3b011e200220022f01283b011c200220022f01263b011a200220022f01243b01182002200f3703080240200a0d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a220a200a280200417f6a220a360200200a0d002001102e0b0240200941ff01714101460d00200041013a00000c020b200020022f01223b0001200041046a20043a0000200041036a20033a0000200041086a20063a0000200041076a20053a0000200041056a20022f01203b00002000410c6a20083a00002000410b6a20073a0000200041096a20022f011e3b0000200041106a200b3a00002000410f6a200c3a00002000410d6a20022f011c3b0000200041146a200d3a0000200041136a200e3a0000200041116a20022f011a3b0000200041186a20103a0000200041176a20113a0000200041003a0000200041156a20022f01183b0000200041196a20022903083700000c010b200220123b0120200220022f012c3b011e200220022f012a3b011c200220022f01283b011a200220022f01263b01182002200f37020c200220103a000b200220113a000a200220022f01243b0108200041013a000020012001280200417f6a220036020020000d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22002000280200417f6a220036020020000d002001102e0b200241306a24000bc60201047f230041c0006b2202240041aab4c700210341092104410821050240024002400240024002400240024002400240200141ff01710e0a00010203040506070809000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a41b0a5cc001044000b41d0ffc3002103411c2104410021050c070b41caeac2002103410c2104410121050c060b419eb4c7002103410c2104410221050c050b4195b9c000210341102104410321050c040b4187b9c0002103410e2104410421050c030b41fbb8c0002103410c2104410521050c020b41f1b8c0002103410a2104410621050c010b41e4b8c0002103410d2104410721050b20004183c4003b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000bce1204027f0c7e037f037e230041e0026b220424002004200337031020042002370308200420013602040240024020022003844200520d00200041063a00000c010b2004200136023c20044180016a200110c802200441e0016a200428028001220520042802880110c902200441e0016a41386a2903002106200441e0016a41306a2903002107200441e0016a41286a2903002108200441e0016a41206a2903002109200441e0016a41186a290300210a200441e0016a41106a290300210b200441a0026a290300210c20042903e801210d20042903e001210e200441b0016a41086a200441b0026a2903003703002004200441a8026a2903003703b00102400240200e4201510d004200210c200441c0006a41386a4200370300200441c0006a41306a4200370300200441c0006a41286a4200370300200441c0006a41206a4200370300200441c0006a41186a4200370300200441c0006a41106a4200370300200441c0006a41086a420037030020044200370340420021094200210842002107420021064200210d4200210b4200210a4200210f420021104200210e420021110c010b200441c0006a41206a2008370300200441c0006a41286a2007370300200441c0006a41106a200a370300200441c0006a41306a2006370300200420093703582004200d3703402004200c3703782004200b3703482008210f20072110200d210e200b21110b0240200428028401450d002005102e0b02400240200e2011844200520d00200f2004290350842010200441d8006a29030084844200520d002004290370200441f8006a2903008450450d004200210e410021050c010b4201210e410121050b0240200e4201510d004200210842002107420021064200210c4200210a420021094200210d4200210b0b0240024002400240024002400240200d20027d2211200d56200b20037d200d200254ad7d220d200b56200d200b511b0d000240200a20027c220f200a542212200920037c2012ad7c220b200954200b2009511b450d00200441d0016a41086a4108360200200441a984ca003602d401200441023a00d201200441830a3b01d0010c020b200441d0016a20012002200341042011200d10d70620042d00d0014106470d0120044188026a22132007370300200441f8016a200b37030020044190026a2214200637030020042008370380022004200f3703f001200420113703e0012004200d3703e8014200210a42012107200e420152ad210802400240427f2011200f7c220920092011542212200d200b7c2012ad7c2209200d542009200d511b22121b220642ffc7afa02556427f200920121b22094200522009501b0d002011200f84200d200b8484220b50211242002107200b420052ad210a0c010b201429030021152013290300211620044180026a2903002117200441f0016a290300210f20042903f801211020042903e801210e20042903e001210b410121120b200441a8016a2009370300200441a0016a2213200637030020044190016a200d37030020042011370388012004200a37039801200420083703800120052007420152720d02200420013602e0012001200441e0016a10bd060c040b200441d8016a4113360200200441c8a3c7003602d401200441033a00d201200441830a3b01d0010b20042902d401210b20042802d00121050c010b0240200541017322052007420151720d00200420013602e0012001200441e0016a10be0641ff017122054103460d02024020050e03040300040b41042105024020120d00200420133602e001200441e0016a10cc020b0c010b2007420152200571450d010c020b200541ff01714106460d02200020053a0000200041036a20054118763a0000200020054108763b0001200041046a200b3702000c030b200441c0016a200110c802200441e0016a20042802c001221220042802c801221310c90220042903e0012102200441b0016a41086a2205200441b0026a2903003703002004200441a8026a2903003703b0010240024020024201510d00200441d0016a41086a4200370300200442003703d0010c010b200441d0016a41086a2005290300370300200420042903b0013703d0010b200441a8026a20042903d001370300200441b0026a200441d0016a41086a290300370300200442013703e00120044198026a20154200200742015122051b37030020044190026a2016420020051b370300200441e0016a41286a2017420020051b37030020044180026a2010420020051b370300200441f8016a200f420020051b370300200441e0016a41106a200e420020051b370300200441a0026a200c420020051b3703002004200b420020051b3703e80120122013200441e0016a41086a10c805024020042802c401450d002012102e0b20044180016a41106a290300210d20044180016a41286a2903002109200429038801211120042903a00121062004290380012108200429039801210a0b024020084201520d0020044198026a200d37030020044190026a2011370300200441e0016a41086a41003a0000200441e9016a2001290000370000200441f1016a200141086a290000370000200441f9016a200141106a29000037000020044181026a200141186a290000370000200441033a00e001200441e0016a10fe010b02400240200a50450d00420021020c010b200441e0016a41086a200428023c220141086a290000370300200441e0016a41106a200141106a290000370300200441e0016a41186a200141186a290000370300200420012900003703e001420121020b200441186a41186a200441e0016a41186a22012903002203370300200441186a41106a200441e0016a41106a2205290300220b370300200441186a41086a200441e0016a41086a290300220d370300200420042903e001220a37031820044190026a200937030020044188026a221220063703002005200d3703002001200b37030020044180026a2003370300200420023703e0012004200a3703e801200441e0016a10d204024020042903e001500d0020042012360240200441c0006a10cc020b200441086a41086a290300210320042903082102200428020421010b20044198026a200337030020044190026a2002370300200441e0016a41086a41053a0000200441e9016a2001290000370000200441f1016a200141086a290000370000200441f9016a200141106a29000037000020044181026a200141186a290000370000200441033a00e001200441e0016a10fe01200041063a00000b200441e0026a24000b870201037f230041d0006b22022400200241086a41bad7c7004108108102200241186a4194dac0004112108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241386a41086a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000b970101047f230041106b22032400024002402002280208220441046a2205417f4c0d00200228020021020240024020050d00410121060c010b2005102c2206450d020b20034100360208200320053602042003200636020020042003107620032002200410742000200120032802002205200328020810b20102402003280204450d002005102e0b200341106a24000f0b1038000b1036000b9d0601087f20002802282101024002400240024020002d000022020d0020002d0001210020012001280200417f6a2203360200024020030d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22032003280200417f6a220336020020030d002001102e0b0240200041ff01710d0041000f0b4110102c2200450d03200041f8f7c60036020c2000410136020820004281808080103702004110102c2201450d0320014190f8c60036020c20014101360208200142818080801037020020002000280200417f6a220336020020030d012000280208200028020c2802001103000240200028020c280204450d002000280208102e0b200041046a22032003280200417f6a220336020020030d012000102e0c010b410021030240024002402002417f6a0e03000104010b2000410e6a2f010021022000410d6a2d000021042000410c6a2d000021052000410a6a2f01002106200041096a2d00002107200041086a2d00002108200041046a2d0000210020012001280200417f6a2203360200024020030d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22032003280200417f6a220336020020030d002001102e0b200041ff01710d0141012103200641107420074108747220087241056c200241107420044108747220057241036c490d010c030b4101210320024103460d020c010b4110102c2200450d02200041f8f7c60036020c2000410136020820004281808080103702004110102c2201450d0220014190f8c60036020c20014101360208200142818080801037020020002000280200417f6a220336020020030d002000280208200028020c2802001103000240200028020c280204450d002000280208102e0b200041046a22032003280200417f6a220336020020030d002000102e0b20012001280200417f6a22003602004102210320000d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22002000280200417f6a220036020020000d002001102e0b20030f0b1036000b31002001ad4220862000ad84200235020842208620022802002200ad84101f0240200241046a280200450d002000102e0b0bac0201037f230041e0006b22022400200241d9fcc6004106108102200241106a41dcf1cb004107108102024002404120102c2203450d002002422037023420022003360230200241306a200141201074200241c0006a200228023022012002280238220310d803200241dc006a200120036a360200200220013602582002200241d0006a3602542002200241c0006a360250200241206a200241d0006a107c02402002280234450d002001102e0b2002280228220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b20004100360208200020013602042000200436020020002002411010742000200241106a411010742000200228022022012003107402402002280224450d002001102e0b200241e0006a24000f0b1036000b1038000b8c0402067f027e230041d0006b220324002003200236020420032001360200200341086a2001200210ed0202400240200328020822010d00200042003703000c010b200328020c2102024002400240200341106a28020022044104490d002004417c7122054104460d0020054108460d002005410c460d00200441707122044110460d00200128000021052001280004210620012800082107200128000c2108200141186a29000021092001290010210a0240200441506a0e110102020202020202020202020202020201000b20044120470d010b20034100360220200342013703182003410a36022c200320033602282003200341186a360234200341cc006a41013602002003420137023c200341909dc5003602382003200341286a360248200341346a419cebc000200341386a103d1a2003280218200328022010ef020240200328021c450d002003280218102e0b420021090c010b2000200a370308200041386a2001290040370300200041286a2001290030370300200041186a2001290020370300200041106a2009370300200041d4006a2008360200200041d0006a2007360200200041cc006a2006360200200041c8006a2005360200200041c0006a200141c8006a290000370300200041306a200141386a290000370300200041206a200141286a290000370300420121090b200020093703002002450d002001102e0b200341d0006a24000bb63507017f0a7e017f067e047f047e037f230041d0066b2206240020062001360204200620053a001f20062003370308200620043703100240024002402003200484500d0020012002412010ec080d010b200041063a00000c010b200620023602e401200641a8026a200210c802200641d0056a20062802a802220120062802b00210c9020240024020062903d0054201510d0042002107200641e8016a41386a4200370300200641e8016a41306a4200370300200641e8016a41286a420037030020064188026a4200370300200641e8016a41186a4200370300200641e8016a41106a4200370300200641f0016a4200370300200642003703e80142002108420021094200210a4200210b42002104420021034200210c4200210d4200210e4200210f420021100c010b200641d0056a41386a290300210b200641d0056a41306a290300210a200641d0056a41206a2903002108200641d0056a41186a290300210c200641d0056a41106a290300210320064190066a290300210720062903d805210420064188026a200641d0056a41286a2903002209370300200641e8016a41286a200a370300200641e8016a41106a200c370300200641e8016a41306a200b3703002006200837038002200620043703e801200620073703a002200620033703f0012009210d200a210e2004210f200321100b024020062802ac02450d002001102e0b02400240200f2010844200520d00200d20062903f80184200e20064180026a29030084844200520d00200629039802200641a0026a2903008450450d0042002110410021110c010b42012110410121110b0240024020104201510d00200641e8036a4200370300200641e0036a4200370300200641d8036a4200370300200641d0036a4200370300200641c8036a4200370300200641c0036a4200370300200641b8036a4200370300200642003703b0030c010b200641d0036a2009370300200641d8036a200a370300200641e0036a200b370300200641c0036a200c370300200620083703c803200620073703e803200620043703b003200620033703b8030b2006200628020422013602f403200641e8046a200110c802200641d0056a20062802e804220520062802f00410c9020240024020062903d0054201510d004200210d200641f8036a41386a4200370300200641f8036a41306a4200370300200641f8036a41286a4200370300200641f8036a41206a4200370300200641f8036a41186a4200370300200641f8036a41106a420037030020064180046a4200370300200642003703f80342002112420021134200210c4200211442002104420021034200210f42002115420021164200210e420021170c010b200641d0056a41386a2903002114200641d0056a41306a290300210c200641d0056a41206a2903002112200641d0056a41186a290300210f200641d0056a41106a290300210320064190066a290300210d20062903d8052104200641f8036a41206a200641d0056a41286a2903002213370300200641f8036a41286a200c370300200641f8036a41106a200f370300200641f8036a41306a20143703002006201237039004200620043703f8032006200d3703b004200620033703800420132115200c21162004210e200321170b024020062802ec04450d002005102e0b02400240200e2017844200520d00201520062903880484201620064190046a29030084844200520d0020062903a804200641b0046a2903008450450d004200210e410021050c010b4201210e410121050b02400240200e4201510d004200210d20064198056a420037030020064190056a420037030020064188056a420037030020064180056a4200370300200641f8046a4200370300200641f0046a4200370300200642003703e80442002104420021030c010b20064188056a201337030020064190056a200c37030020064198056a2014370300200641f8046a200f3703002006201237038005200620043703e804200620033703f0040b024002400240024020042006290308220f7d220c2004562003200641086a41086a29030022177d2004200f54ad7d220420035620042003511b450d0041838a0c21054280808080b002210341c8a3c7002118410121190c010b2006200c3703e804200620043703f004024020062903b0032203200f7c22132003542218200641b0036a41086a290300221220177c2018ad7c220320125420032012511b450d0041838a08210542808080808001210341a984ca002118410121190c010b200620133703b003200641c8036a2903002112200620033703b8030240427f201320062903c0037c221420142013542218200320127c2018ad7c221220035420122003511b22181b4280c8afa025544100427f201220181b501b450d0041838a1021054280808080a002210341e4a3c7002118410121190c010b200641d0056a2006280204200f20174102200c200410d706024020062d00d0054106460d0041838a0421054280808080d002210341a0a3c7002118410121190c010b0240024020062d001f4101470d00200641a0056a200628020410c802200641d0056a20062802a005221920062802a80510c902200628029c06211820062903d0052103024020062802a405450d002019102e0b20034201520d012018450d010b427f200c20062903f8047c22032003200c542218200420064180056a2903007c2018ad7c220320045420032004511b22181b4280c8afa025544100427f200320181b501b450d0041838a1421054280808080900121034180a4c7002118410121190c010b200641a0056a41206a200641e8046a41306a2903002203370300200641a0056a41186a200641e8046a41286a2903002212370300200641a0056a41106a200641e8046a41206a2903002213370300200641a8056a200641e8046a41186a290300220f370300200620062903f80422173703a0052006200d3703c805200641d0056a41186a200f370300200641d0056a41206a22192013370300200641d0056a41286a221a2012370300200641d0056a41306a221b2003370300200620173703e0052006200c3703d005200620043703d80542012103200e420152ad211402400240427f200c20177c22122012200c5422182004200f7c2018ad7c221320045420132004511b22181b22124280c8afa025544100427f201320181b2213501b450d00200c2017842004200f8484220f50211842002103200f420052ad21170c010b201b290300211c201a290300211d2019290300211e200641d0056a41106a290300211620062903e805211f20062903d805211520062903d005210f42002117410121180b200641e0046a2013370300200641d8046a221a2012370300200641c8046a20043703002006200c3703c004200620173703d004200620143703b8040240024002400240024020052003420152720d00200620013602d0052001200641d0056a10bd060c010b0240200541017322052003420151720d00200620013602d0052001200641d0056a10be0641ff017122054103460d01024020050e03030200030b42002103410121194104210502402018450d000c060b2006201a3602d005200641d0056a10cc020c050b20034201522005710d020b200641e8046a200110c802200641d0056a20062802e804221920062802f004221a10c90220064198066a221b2802002120200641a0066a22212903002104200628029c06212220062903d005210c200642013703d00520064188066a201c4200200342015122051b37030020064180066a201d420020051b370300200641d0056a41286a201e420020051b370300200641f0056a201f420020051b370300200641e8056a2016420020051b370300200641d0056a41106a2015420020051b370300202120044200200c42015122181b3703002006419c066a2022410020181b360200201b2020410020181b36020020064190066a200d420020051b3703002006200f420020051b3703d8052019201a200641d8056a10c805024020062802ec04450d002019102e0b200641b8046a41106a2903002104200641b8046a41286a290300211320062903c004210c20062903d804211220062903b804210f20062903d00421170c040b20062903b80422044280808080708321032004a72118200641e0046a2903002113200641c8046a290300210420062903d804211220062903c004210c4100211920062903d00421170c010b200e420152211842002103410021190b0b20032018ad84210f2019450d00410121010c010b0240200f4201520d0020064188066a200437030020064180066a200c370300200641d0056a41086a41003a0000200641d9056a2001290000370000200641e1056a200141086a290000370000200641e9056a200141106a290000370000200641f1056a200141186a290000370000200641033a00d005200641d0056a10fe010b02400240201750450d004200210f0c010b200641d0056a41086a20062802f403220141086a290000370300200641d0056a41106a200141106a290000370300200641d0056a41186a200141186a290000370300200620012900003703d0054201210f0b200641f8036a41186a200641d0056a41186a2903002204370300200641f8036a41106a200641d0056a41106a2903002203370300200641f8036a41086a200641d0056a41086a290300220c370300200641e8046a41086a200c370300200641e8046a41106a2003370300200641e8046a41186a2004370300200620062903d00522043703f803200620043703e804410021010b200641f8036a41086a2218200641b0036a41186a290300370300200641f8036a41106a2219200641b0036a41206a290300370300200641f8036a41186a221a200641b0036a41286a290300370300200641f8036a41206a221b200641b0036a41306a290300370300200620062903c0033703f803200641b0036a41086a290300210420062903b0032103024002402001450d004200210e41012101200f210c0c010b200641e8036a2903002107200641d0056a41186a2018290300220a370300200641d0056a41206a2019290300370300200641d0056a41286a201a290300370300200641d0056a41306a201b290300370300200620062903f80322083703e005200620033703d005200620043703d8054200210d4201210e2010420152210102400240427f200320087c220c200c20035422182004200a7c2018ad7c220c200454200c2004511b22181b221742ffc7afa02556427f200c20181b22104200522010501b0d004200210e20032008842004200a8484420052ad210d0c010b20064180066a290300210b200641f8056a290300210a200641f0056a2903002109200641e0056a290300211620062903e805210820062903d805211520062903d00521140b2001ad210c200641a0056a41086a200641e8046a41086a290300370300200641a0056a41106a200641e8046a41106a290300370300200641a0056a41186a200641e8046a41186a290300370300200620062903e8043703a005410021010b20064190036a41086a200641a0056a41086a29030037030020064190036a41106a200641a0056a41106a29030037030020064190036a41186a200641a0056a41186a290300370300200620062903a0053703900302400240024002400240024020010d00200641d0026a2010370300200641c8026a22052017370300200641a8026a41106a200437030020064188036a201337030020064180036a22192012370300200641e0026a2201200629039003370300200641e8026a20064198036a290300370300200641f0026a20064190036a41106a290300370300200641f8026a200641a8036a290300370300200620033703b0022006200f3703d8022006200d3703c0022006200c3703a802024002402011200e420152720d00200620023602d0052002200641d0056a10bd060c010b024020114101732218200e420151720d00200620023602d0052002200641d0056a10be0641ff017122184103460d010240024020180e03010300010b0240200d500d00200620053602d005200641d0056a10cc020b200641d8026a10d204410121184104210520062903d802500d05200620193602d005200641d0056a10cc020c050b200641b0036a41286a200141286a290300370300200641b0036a41206a200141206a290300370300200641b0036a41186a200141186a290300370300200641b0036a41106a200141106a290300370300200641b0036a41086a200141086a290300370300200620012903003703b003410021180c040b200e4201522018710d020b200641f8036a200210c802200641d0056a20062802f8032219200628028004221110c90220064198066a221a280200211b200641a0066a22202903002104200628029c06212120062903d0052103200642013703d00520064188066a200b4200200e42015122051b37030020064180066a200a420020051b370300200641d0056a41286a2009420020051b370300200641d0056a41206a2008420020051b370300200641d0056a41186a2016420020051b370300200641d0056a41106a2015420020051b370300202020044200200342015122181b3703002006419c066a2021410020181b360200201a201b410020181b36020020064190066a2007420020051b37030020062014420020051b3703d80520192011200641d0056a41086a10c805024020062802fc03450d002019102e0b200641b0036a41086a2205200141086a290300370300200641b0036a41106a2218200141106a290300370300200641b0036a41186a2219200141186a290300370300200641b0036a41206a2211200141206a290300370300200641b0036a41286a221a200141286a290300370300200620012903003703b003200641a8026a41106a2903002104200641a8026a41286a290300211020062903b002210320062903c802211720062903a802210a20062903c002210d20062903d802210c200641f8036a41286a201a290300370300200641f8036a41206a2011290300370300200641f8036a41186a2019290300370300200641f8036a41106a2018290300370300200641f8036a41086a2005290300370300200620062903b0033703f803200641f8036a21010c030b410121180c010b200641b0036a41286a200141286a290300370300200641b0036a41206a200141206a290300370300200641b0036a41186a200141186a290300370300200641b0036a41106a200141106a290300370300200641b0036a41086a200141086a290300370300200620012903003703b003410021180b200641f8036a41286a200641b0036a41286a290300370300200641f8036a41206a200641b0036a41206a290300370300200641f8036a41186a200641b0036a41186a290300370300200641f8036a41106a200641b0036a41106a290300370300200641f8036a41086a200641b0036a41086a290300370300200620062903b0033703f803200641f8036a210120180d01200c210a200f210c0b200641a8026a41286a200141286a290300370300200641a8026a41206a200141206a290300370300200641a8026a41186a200141186a290300370300200641a8026a41106a200141106a290300370300200641a8026a41086a200141086a290300370300200620012903003703a8020240200a4201520d0020062802e401210120064188066a200437030020064180066a2003370300200641d0056a41086a41003a0000200641d9056a2001290000370000200641e1056a200141086a290000370000200641e9056a200141106a290000370000200641f1056a200141186a290000370000200641033a00d005200641d0056a10fe010b02400240200d50450d00420021040c010b200641e8016a41086a20062802e401220141086a290000370300200641e8016a41106a200141106a290000370300200641e8016a41186a200141186a290000370300200620012900003703e801420121040b200641e8046a41186a200641e8016a41186a290300370300200641e8046a41106a200641e8016a41106a290300370300200641e8046a41086a200641e8016a41086a290300370300200641d0056a41086a200641a8026a41086a290300370300200641d0056a41106a200641a8026a41106a290300370300200641d0056a41186a200641a8026a41186a290300370300200641d0056a41206a200641a8026a41206a290300370300200641d0056a41286a200641a8026a41286a290300370300200620062903e8013703e804200620062903a8023703d005410021010c010b410121010b200641b0016a41086a2218200641d0056a41086a290300370300200641b0016a41106a2219200641d0056a41106a290300370300200641b0016a41186a2211200641d0056a41186a290300370300200641b0016a41206a221a200641d0056a41206a290300370300200641b0016a41286a221b200641d0056a41286a29030037030020064190016a41086a2220200641e8046a41086a29030037030020064190016a41106a2221200641e8046a41106a29030037030020064190016a41186a2222200641e8046a41186a290300370300200620062903d0053703b001200620062903e80437039001024020010d00200641e0006a200629039001370300200641206a41106a2018290300370300200641206a41186a2019290300370300200641206a41206a2011290300370300200641206a41286a201a290300370300200641d0006a201b290300370300200641e8006a2020290300370300200641f0006a2021290300370300200641f8006a20222903003703002006200c370320200620062903b0013703282006200437035820064188016a201037030020064180016a22012017370300200641206a10d20402402006290320500d002006200641c8006a3602d005200641d0056a10cc020b200641d8006a10d20402402006290358500d00200620013602d005200641d0056a10cc020b200641086a41086a290300210420062903082103200641206a41186a2006280204220141186a290000220c370300200641206a41106a200141106a290000220a370300200641206a41086a200141086a290000220f370300200620012900002207370320200641a8066a2004370300200641a0066a2003370300200641d0056a41086a41023a0000200641d9056a2007370000200641e1056a200f370000200641e9056a200a370000200641f1056a200c370000200641f9056a200229000037000020064181066a200241086a29000037000020064189066a200241106a29000037000020064191066a200241186a290000370000200641033a00d005200641d0056a10fe01200041063a00000c010b20002005360200200041046a200c3702000b200641d0066a24000beb130a017f047e017f047e0b7f017e027f017e017f0c7e230041f0026b2204240002400240200220038450450d00420021054200210642002107420021080c010b20044180016a200110c802200441f0016a200428028001220920042802880110c90220044190026a290300210a20044188026a290300210b20044180026a290300210620042903f801210c20042903f001210d0240200428028401450d002009102e0b420021050240200d4201520d00200c200b842006200a8484500d00200441f0016a41c8006a210e200441f0016a41086a210f20044180016a41306a211020044180016a41206a211141002109200441f0016a41386a2112200441f0016a41106a2113200441c0006a41286a2114200441c0006a41186a211502400240024003402004200136022c20044180016a200110c802200441f0016a200428028001221620042802880110c90220122903002107200441f0016a41306a2217290300210b200441f0016a41206a221829030021082013290300210d2004290398022105200429038802211920042903f801210a20042903b002210c20042903f0012106200441306a41086a200e41086a2903003703002004200e2903003703300240024020064201510d004200210c200441c0006a41386a4200370300200441c0006a41306a420037030020144200370300200441c0006a41206a420037030020154200370300200441c0006a41106a4200370300200441c0006a41086a420037030020044200370340420021054200210b4200210a4200210d0c010b2014200b370300200441c0006a41306a2007370300200420053703602004200a3703402004200c370378200420193703502004200d370348200420083703580b0240200428028401450d002016102e0b02400240200a200d844200520d002005200429035084200429037084200b201529030084200441c0006a41386a290300848450450d0042002119410021160c010b200441c0006a41106a290300210a200441c0006a41306a290300210820142903002106200441c0006a41206a29030021072004290348210d2004290340210b4201211920042903582105410121160b02402019420152221a450d004200210742002106420021084200210c4200210a420021054200210b4200210d0b200441f0016a41286a221b2006370300201720083703002004200b3703f0012004200d3703f801200441f0016a41186a200542002005200d7c200a200b7c2206200a54ad7c220820064280c8afa02554ad7d221920064280b8d0df5a7c221c2006562019200856200642ffc7afa025561b221d1b220620034200201c201d1b2208200254200620035420062003511b221d1b200320091b22062005200a20082002201d1b200220091b220856200520065620052006511b221d1b22067d200a2008200a201d1b220554ad7d221937030020042007370390022004200a20057d221c37038002200320067d2002200554ad7d2108200220057d2107201aad211e02400240427f200b201c7c220a200a200b54221a200d20197c201aad7c220a200d54200a200d511b221a1b221f42ffc7afa02556427f200a201a1b220a420052200a501b0d002020200a200b201c84200d20198484220c5022171b21202021201f20171b21214200210a200c420052ad21190c010b20172903002122201b29030021232018290300212420132903002125200429038802212620042903f801212720042903f00121284201210a4200211941012117200c21290b20044180016a41c8006a200837030020044180016a41386a200637030020044180016a41286a202037030020044180016a41106a200d370300200420073703c001200420053703b001200420213703a0012004200b3703880120042019370398012004201e3703800102402016200a420152720d00200420013602f0012001200441f0016a10bd060c030b20164101732216200a420151720d01200420013602f00102402001200441f0016a10be0641ff017122164102460d0020160d03200441c8016a2903002108200441b8016a2903002106200441a8016a290300212020044190016a290300210d20042903c001210720042903b001210520042903a0012121200429038801210b2004290398012119200429038001211e0c040b024020170d00200420113602f001200441f0016a10cc020b200420103602f001200441f0016a10cc02200941016a22094102470d000b420021050c030b200a4201522016710d010b200441d0016a200110c802200441f0016a20042802d001220920042802d801221610c90220042903f001210d200441306a41086a2217200e41086a2903003703002004200e29030037033002400240200d4201510d00200441e0016a41086a4200370300200442003703e0010c010b200441e0016a41086a2017290300370300200420042903303703e0010b0240200a4201510d0042002128420021274200212442002123420021224200212942002125420021260b200e20042903e001370300200441a0026a202337030020044190026a2026370300200441f0016a41106a2027370300200441f0016a41386a2022370300200e41086a200441e0016a41086a29030037030020042024370398022004202537038802200420283703f801200420293703b002200442013703f00120092016200f10c805024020042802d401450d002009102e0b20044180016a41106a290300210d200441a8016a290300212020044180016a41386a2903002106200441c8016a2903002108200429038801210b20042903a001212120042903b001210520042903c0012107200429038001211e20042903980121190b0240201e4201520d00200441a8026a200d370300200441a0026a200b370300200441f0016a41086a41003a0000200441f9016a200129000037000020044181026a200141086a29000037000020044189026a200141106a29000037000020044191026a200141186a290000370000200441033a00f001200441f0016a10fe010b02400240201950450d00420021030c010b200441f0016a41086a200428022c220141086a290000370300200441f0016a41106a200141106a290000370300200441f0016a41186a200141186a290000370300200420012900003703f001420121030b200441086a41186a200441f0016a41186a2201290300220d370300200441086a41106a200441f0016a41106a2209290300220a370300200441086a41086a200441f0016a41086a290300220b370300200420042903f0012202370308200441a0026a202037030020044198026a221620213703002009200b3703002001200a37030020044190026a200d370300200420033703f001200420023703f801200441f0016a10d20420042903f001500d01200420163602800120044180016a10cc020c010b4200210620022107200321080b2000200737031020002005370300200041186a200837030020002006370308200441f0026a24000b9b0304057f027e017f027e230041d0006b22012400200141386a22024200370300200141206a41106a22034200370300200141206a41086a2204420037030020014200370320200141c0006a41f8fcc60041081081022004200141c0006a41086a220529000037030020012001290040370320200141c0006a41a8aac800410d1081022002200529000037030020032001290040370300200141086a200141206a412010f802200141086a41106a290300210620012903102107200128020821082000280200220041086a29030021092000290300210a20024200370300200342003703002004420037030020014200370320200141c0006a41f8fcc60041081081022004200529000037030020012001290040370320200141c0006a41a8aac800410d1081022002200529000037030020032001290040370300200142002006420020081b220620097d2007420020081b2207200a54ad7d22092007200a7d220a200756200920065620092006511b22021b37034820014200200a20021b370340200141206a4120200141c0006a411010b201200141d0006a24000b8f0201027f230041d0006b22022400200241d4e2cc0036023020022001360228200241edde91e30636022c02404104102c2203450d002002420437023c20022003360238200241386a200241286a41047241041074200241386a200141081074200228023821012002200228024036024c200220013602482002200241c8006a10d0040240200228023c450d002001102e0b0240024020022d00004101470d0020004200370000200041186a4200370000200041106a4200370000200041086a42003700000c010b20002002290001370000200041186a200241196a290000370000200041106a200241116a290000370000200041086a200241096a2900003700000b200241d0006a24000f0b1036000b9a0304057f027e017f027e230041d0006b22012400200141386a22024200370300200141206a41106a22034200370300200141206a41086a2204420037030020014200370320200141c0006a41f8fcc60041081081022004200141c0006a41086a220529000037030020012001290040370320200141c0006a41a8aac800410d1081022002200529000037030020032001290040370300200141086a200141206a412010f802200141086a41106a290300210620012903102107200128020821082000280200220041086a29030021092000290300210a20024200370300200342003703002004420037030020014200370320200141c0006a41f8fcc60041081081022004200529000037030020012001290040370320200141c0006a41a8aac800410d10810220022005290000370300200320012900403703002001427f20092006420020081b22067c200a2007420020081b22077c22092007542202ad7c22072002200720065420072006511b22021b3703482001427f200920021b370340200141206a4120200141c0006a411010b201200141d0006a24000bd88f01040a7f047e047f037e230022032104200341c0086b416071220324000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e0b00010203040506070d1817000b20034194056a410136020020034201370284052003419cc3cb0036028005200341043602e403200341a4a7c7003602e0032003200341e0036a3602900520034180056a4198f3c0001044000b200141246a2802002105200141216a2d00002106200341b8076a41186a200141196a290000370300200341b8076a41106a200141116a290000370300200341b8076a41086a200141096a290000370300200320012900013703b80720034180056a41286a2201200241286a28020036020020034180056a41206a2207200241206a29020037030020034180056a41186a2208200241186a29020037030020034180056a41106a2209200241106a29020037030020034180056a41086a220a200241086a2902003703002003200229020037038005200341e0036a20034180056a10c102200341c0036a41086a2202200341e0036a41096a290000370300200341c0036a41106a220b200341e0036a41116a290000370300200341c0036a41186a220c200341e0036a41196a290000370300200320032900e1033703c00320032d00e0034101460d14200341a0026a41186a200c290300370300200341a0026a41106a200b290300370300200341a0026a41086a2002290300370300200320032903c0033703a00220034180056a200341b8076a200341a0026a200610d002200341e0036a41086a2008290300370300200341e0036a41106a2007290300370300200341e0036a41186a2001280200360200200320092903003703e003200a290300210d20032802840521012003280280054101460d2f200341e0046a41186a2202200341e0036a41186a280200360200200341e0046a41106a2206200341e0036a41106a290300370300200341e0046a41086a2207200341e0036a41086a290300370300200320032903e0033703e00402402001450d0020034180056a410710d102200329028405210d20032802800521010c300b200341ec036a20032903e004370200200341f4036a2007290300370200200341e0036a411c6a200629030037020020034184046a20022802003602002003200d3702e403200341003602e003200341d8076a41186a200341b8076a41186a290300370300200341d8076a41106a200341b8076a41106a290300370300200341d8076a41086a200341b8076a41086a290300370300200320032903b8073703d80720034180056a200541b00210e9081a200341e0036a200341d8076a20034180056a10d2022005102e200320032800c0043602a0042003200341c3046a2800003600a304200041186a41003a000020004200370308200020032802a0043600192000411c6a20032800a30436000020004200370300200424000f0b200141246a2802002109200141216a2d0000210a200341a0036a41186a2205200141196a290000370300200341a0036a41106a2206200141116a290000370300200341a0036a41086a2207200141096a290000370300200320012900013703a003200341e0036a41286a200241286a280200360200200341e0036a41206a200241206a290200370300200341e0036a41186a200241186a290200370300200341e0036a41106a200241106a290200370300200341e0036a41086a200241086a290200370300200320022902003703e003200341d8076a200341e0036a10c102200341c0036a41086a2201200341d8076a41096a290000370300200341c0036a41106a2202200341d8076a41116a290000370300200341c0036a41186a2208200341d8076a41196a290000370300200320032900d9073703c00320032d00d8074101460d11200341a0046a41186a2008290300370300200341a0046a41106a2002290300370300200341a0046a41086a2001290300370300200320032903c0033703a004200341c0046a41186a2005290300370300200341c0046a41106a2006290300370300200341c0046a41086a2007290300370300200320032903a0033703c0040240200341a0046a200341c0046a412010ec080d00200341d8076a410810d102200341ef036a200341d8076a41086a280200220136000020034198056a41003a0000200341a8056a2001360000200320032903d8073700e703200341a1056a200341e0036a41086a29000037000020034200370388052003420137038005200320032900e00337009905410121020c2c0b200341e0046a41186a2206200341c0046a41186a290300370300200341e0046a41106a2207200341c0046a41106a290300370300200341e0046a41086a2208200341c0046a41086a290300370300200320032903c0043703e004200341b0086a200341a0046a10d302200341e0036a20032802b00820032802b80810d402200341ec036a280200210b0240024020032802e00322050d004200210e4100210141042105410021024200210d0c010b200341e0036a41186a290300210d200341e0036a41106a290300210e200341e0036a41086a280200210220032802e40321010b200341b8076a41186a2006290300370300200341b8076a41106a2007290300370300200341b8076a41086a2008290300370300200320032903e0043703b807024020024120490d00200341e0036a410110d10220032f00e10320032d00e3034110747221020c290b200341f4076a200341b8076a41186a290300370200200341ec076a200341b8076a41106a290300370200200341e4076a200341b8076a41086a290300370200200320032903b8073702dc072003200a3a00fc07200320093602d807200341306a20052002200341d8076a10d5022003280230450d0b20032802342107200341e0036a41206a200341d8076a41206a290300370300200341e0036a41186a200341d8076a41186a290300370300200341e0036a41106a200341d8076a41106a290300370300200341e0036a41086a200341d8076a41086a290300370300200320032903d8073703e00320022007490d12024002400240024020022001470d00200141016a22062001490d09200141017422082006200820064b1b22064104200641044b1bad42287e220f422088a7454102742106200fa721080240024020010d00200341003602c0030c010b200341c8036a4104360200200320053602c0032003200141286c3602c4030b20034180036a20082006200341c0036a107d20034188036a28020021012003280280034101460d012003280284032105200141286e21010b2005200741286c6a220641286a2006200220076b41286c10ea081a200641206a200341e0036a41206a290300370200200641186a200341e0036a41186a290300370200200641106a200341e0036a41106a290300370200200641086a200341e0036a41086a290300370200200620032903e003370200200341206a200241016a2202ad42004280cdad9d01420010e80820032903202210428088caade9057c220f200e56200341206a41086a290300200f201054ad7c2210200d562010200d5122061b450d01200341e0036a200341a0046a200f200e7d2010200d7d200f200e54ad7d10c30220032d00e00322064106460d0220032f00e10320032d00e30341107472210220032902e403210d0c2c0b2001450d070c290b200e200f58200d20105820061b0d00200341106a200341a0046a200e200f7d200d20107d200e200f54ad7d10fb010b200341f8036a20103703002003200f3703f0032003200b3602ec03200320023602e803200320013602e403200320053602e00320032802b808210220032802b00821060240024020050d002006200210ff010c010b20062002200341e0036a10d6022005450d002001450d00200141286c450d002005102e0b20034198056a41003a00002003419c056a200341a3086a28000036000020034200370380052003420037038805200320032800a008360099050c2a0b200141246a2802002109200141216a2d0000210a200341c0046a41186a2205200141196a290000370300200341c0046a41106a2206200141116a290000370300200341c0046a41086a2207200141096a290000370300200320012900013703c004200341e0036a41286a200241286a280200360200200341e0036a41206a200241206a290200370300200341e0036a41186a200241186a290200370300200341e0036a41106a200241106a290200370300200341e0036a41086a200241086a290200370300200320022902003703e003200341a0026a200341e0036a10c102200341c0036a41086a2201200341a0026a41096a290000370300200341c0036a41106a2202200341a0026a41116a290000370300200341c0036a41186a2208200341a0026a41196a290000370300200320032900a1023703c003024020032d00a0024101470d0020034180056a41206a41023a000020034180056a41186a41003a00002003420037038805200342013703800520034180056a41086a21010c250b200341e0046a41186a2008290300370300200341e0046a41106a2002290300370300200341e0046a41086a2001290300370300200320032903c0033703e004200341a0036a200341e0046a10d302200341a0026a20032802a00320032802a80310d402200341b8076a41186a2005290300370300200341b8076a41106a2006290300370300200341b8076a41086a2007290300370300200320032903c0043703b807200341a0026a41186a2201290300210e200120032903f803370300200341003602e00320032903b0022110200320032903f0033703b00220032903a802210f200320032903e8033703a80220032903a002210d200320032903e0033703a002200da72201450d0f200341fc036a200341b8076a41186a290300370200200341f4036a200341c8076a290300370200200341ec036a200341b8076a41086a290300370200200320032903b8073702e4032003200a3a008404200320093602e003200341d8006a2001200fa72205200341e0036a10d502200d422088a721020240024020032802580d00200328025c220620054f0d102001200641286c6a2207200741286a20052006417f736a41286c10ea081a02402005417f6a22050d004200210f4200210d0c220b200341c8006a2005ad42004280cdad9d01420010e8082003290348220d428088caade9057c220f201056200341d0006a290300200f200d54ad7c220d200e56200d200e511b450d21200341a0046a200341e0046a200f20107d200d200e7d200f201054ad7d10c30220032d00a00422064106460d2220032d00a304210520032f00a104210720032902a404210d200341a0056a20063a000020034198056a41003a00002003200720054110747222053b00a105200341a3056a20054110763a00002003200d3702a405200342003703880520034201370380050c010b200341c0036a410210d102200341af046a200341c0036a41086a280200220536000020034180056a41186a41003a0000200341a8056a2005360000200320032903c0033700a704200341a1056a200341a0046a41086a29000037000020034200370388052003420137038005200320032900a004370099050b2002450d23200241286c450d232001102e0c230b20034180056a41286a200241286a28020036020020034180056a41206a200241206a29020037030020034180056a41186a200241186a29020037030020034180056a41106a200241106a29020037030020034180056a41086a200241086a2902003703002003200229020037038005200341e0036a20034180056a10c102200341c0036a41086a2201200341e9036a290000370300200341c0036a41106a2202200341f1036a290000370300200341c0036a41186a2205200341f9036a290000370300200320032900e1033703c003024020032d00e0034101470d00200320032800e0043602c004200320032900a0023703b8072003200341e3046a2800003600c3042003200341a7026a2800003600bf07200041186a41003a000020004200370308200020032802c0043600192000411c6a20032800c304360000200041206a41023a0000200020032903b807370021200041286a20032800bf0736000020004201370300200424000f0b200341d8076a41186a2005290300370300200341d8076a41106a2002290300370300200341d8076a41086a2001290300370300200320032903c0033703d807200341e0036a200341d8076a10d30220034180056a20032802e003220220032802e803220110d4020240024020032802800522050d004200210d41042105410021014200210e0c010b2002200110ff0120034198056a290300210e20034190056a290300210d20032802840521010b024020032802e403450d002002102e0b02402001450d00200141286c450d002005102e0b200341e0006a200341d8076a200d200e10fb01200320032800e0043602c0042003200341e3046a2800003600c304200041186a41003a000020004200370308200020032802c0043600192000411c6a20032800c30436000020004200370300200424000f0b41022105200141026a2f01002106200141046a2802002109200320012d00013a00b00820034180056a41286a200241286a28020036020020034180056a41206a200241206a29020037030020034180056a41186a200241186a29020037030020034180056a41106a200241106a29020037030020034180056a41086a2201200241086a2902003703002003200229020037038005200341e0036a20034180056a10c102200341d8076a41086a2202200341e9036a290000370300200341d8076a41106a2207200341f1036a290000370300200341d8076a41186a2208200341f9036a290000370300200320032900e1033703d807024020032d00e0034101460d00200341a0026a41186a2008290300370300200341a0026a41106a2007290300370300200341a0026a41086a2002290300370300200320032903d8073703a002200341b8076a41186a22024200370300200341b8076a41106a22054200370300200341b8076a41086a22074200370300200342003703b80720034180056a41d9fcc60041061081022007200129000037030020032003290080053703b80720034180056a4180f4cb004106108102200220012900003703002005200329008005370300200341f8006a200341b8076a4120108e02200328027c210120032802782102200341f0006a41fcc6cb004110108e022003280274210520032802702107200320063b01940520032005410020071b36028c0520032001410020021b36028805200341a8f3c000360280052003200341b0086a360290052003200341a0026a36028405200341c0036a20034180056a10d702200341203602dc072003200341c0036a3602d80720034180056a200341d8076a1093010240024020032d0080054101470d00200341f8036a4200370300200341f0036a4200370300200341e8036a4200370300200342003703e0030c010b200341f8036a20034199056a290000370300200341f0036a20034191056a290000370300200341e8036a20034189056a29000037030020032003290081053703e0030b20034180056a200341e0036a10d3022003280280052202200328028805108f0221010240200328028405450d002002102e0b02402001450d0020034180056a410510d10220032003290081053703e004200320034188056a2800003600e70420032d00800521050c010b20034180056a200341a0026a4280d5f7caea05420010c302200320032900810537039004200320034180056a41086a28000036009704024020032d00800522054106470d00200341a0046a41086a200341a0026a41086a290300370300200341a0046a41106a2202200341a0026a41106a290300370300200341a0046a41186a2205200341a0026a41186a290300370300200320032903a0023703a00420032d00b00821074128102c2201450d2620012009360200200120032903a004370204200120073a0024200120032f01c0033b00252001410c6a200341a8046a290300370200200141146a20022903003702002001411c6a2005290300370200200141276a200341c2036a2d00003a0000200341b8076a200341e0036a10d30220032802c007210520032802b8072102413c102c2207450d262003423c3702dc07200320073602d80720014101200341d8076a10d802200342003703880520034280d5f7caea0537038005200341d8076a20034180056a411010742002200520032802d807220720032802e00710b201024020032802dc07450d002007102e0b024020032802bc07450d002002102e0b2001102e20032d00b00821012003418d056a200341e0036a41086a29030037000020034195056a200341e0036a41106a2903003700002003419d056a200341e0036a41186a290300370000200341a5056a20032903a002370000200341ad056a200341a0026a41086a290300370000200341b5056a200341a0026a41106a290300370000200341bd056a200341a0026a41186a290300370000200341c6056a20063b0100200341c5056a20013a0000200341013a008405200341133a008005200320032903e0033700850520034180056a10fe01200320032800a003360280032003200341a3036a28000036008303200041186a41003a00002000420037030820002003280280033600192000411c6a20032800830336000020004200370300200424000f0b20032003280097043600e70420032003290390043703e0040b200320032800a00336028003200320032903e0043703c004200320032800e7043600c7042003200341a3036a28000036008303200041186a41003a00002000420037030820002003280280033600192000411c6a200328008303360000200041206a20053a0000200020032903c004370021200041286a20032800c70436000020004201370300200424000f0b200141286a2802002106200141246a2802002107200141226a2f01002108200141216a2d00002105200341a0026a41186a200141196a290000370300200341a0026a41106a200141116a290000370300200341a0026a41086a200141096a290000370300200320012900013703a002200320053a00b00820034180056a41286a200241286a28020036020020034180056a41206a200241206a29020037030020034180056a41186a200241186a29020037030020034180056a41106a200241106a29020037030020034180056a41086a200241086a2902003703002003200229020037038005200341e0036a20034180056a10c102200341a0046a41086a2201200341e0036a41096a290000370300200341a0046a41106a2202200341e0036a41116a290000370300200341a0046a41186a2205200341e0036a41196a290000370300200320032900e1033703a0040240024020032d00e0034101460d00200341d8076a41186a2005290300370300200341d8076a41106a2002290300370300200341d8076a41086a2001290300370300200320032903a0043703d807200320083b0194052003200636028c052003200736028805200341a8f3c000360280052003200341b0086a360290052003200341a0026a36028405200341c0036a20034180056a10d702200341203602bc072003200341c0036a3602b80720034180056a200341b8076a1093010240024020032d0080054101470d00200341f8036a4200370300200341f0036a4200370300200341e8036a4200370300200342003703e0030c010b200341f8036a20034199056a290000370300200341f0036a20034191056a290000370300200341e8036a20034189056a29000037030020032003290081053703e0030b0240200341e0036a200341d8076a412010ec08450d0020034180056a410610d10220032003290081053703e004200320034188056a2800003600e70420032d00800521010c020b200341b8076a200341d8076a10d30220034180056a20032802b807220220032802c007220110d4020240024020032802800522050d004200210d41002101410421054200210e0c010b2002200110ff0120034198056a290300210e20034190056a290300210d20032802840521010b024020032802bc07450d002002102e0b02402001450d00200141286c450d002005102e0b20034180016a200341a0026a200d200e10fb01200320032800a003360280032003200341a3036a28000036008303200041186a41003a00002000420037030820002003280280033600192000411c6a20032800830336000020004200370300200424000f0b410221010b200320032800a00336028003200320032903e0043703c004200320032800e7043600c7042003200341a3036a28000036008303200041186a41003a00002000420037030820002003280280033600192000411c6a200328008303360000200041206a20013a0000200020032903c004370021200041286a20032800c70436000020004201370300200424000f0b20034180036a41186a200141196a29000037030020034180036a41106a200141116a29000037030020034180036a41086a200141096a2900003703002003200129000137038003200341a0036a41186a200141396a290000370300200341a0036a41106a200141316a290000370300200341a0036a41086a200141296a2900003703002003200141216a2900003703a00320034180056a41286a200241286a28020036020020034180056a41206a200241206a29020037030020034180056a41186a200241186a29020037030020034180056a41106a200241106a29020037030020034180056a41086a2201200241086a2902003703002003200229020037038005200341e0036a20034180056a10c102200341d8076a41086a2202200341e0036a41096a290000370300200341d8076a41106a2205200341e0036a41116a290000370300200341d8076a41186a2206200341e0036a41196a290000370300200320032900e1033703d80720032d00e0034101460d09200341c0046a41186a2006290300370300200341c0046a41106a2005290300370300200341c0046a41086a2002290300370300200320032903d8073703c004200341e0036a20034180036a10d30220034180056a20032802e003220620032802e80310d4022001280200410020032802800522011b21022003280284052105024020032802e403450d002006102e0b2001410420011b21112005410020011b2112024002402002450d002011200241286c6a210c20034180056a410472210b20034180056a41256a2106200341d8076a41026a2105201121010340200341e0036a41206a2207200141206a280200360200200341e0036a41186a2208200141186a290200370300200341e0036a41106a2209200141106a290200370300200341e0036a41086a220a200141086a290200370300200320012902003703e003200141246a2d000021022005200141276a2d00003a00002003200141256a2f00003b01d80720024107460d01200620032f01d8073b000020034180056a41206a200728020036020020034180056a41186a200829030037030020034180056a41106a200929030037030020034180056a41086a200a290300370300200641026a20052d00003a0000200320032903e00337038005200320023a00a405200b200341c0046a412010ec08450d02200141286a2201200c470d000b0b20034180056a410310d10220032003290081053703e802200320034188056a2800003600ef0220032d00800521012012450d1b201241286c450d1b2011102e0c1b0b02402012450d00201241286c450d002011102e0b200341c0036a41086a220520034180036a41086a290300370300200341c0036a41106a220620034180036a41106a290300370300200341c0036a41186a220920034180036a41186a290300370300200341a0046a41086a220a200341a0036a41086a290300370300200341a0046a41106a220b200341a0036a41106a290300370300200341a0046a41186a220c200341a0036a41186a29030037030020032003290380033703c003200320032903a0033703a0044200210d200341b8076a41186a22014200370300200341b8076a41106a22074200370300200341b8076a41086a22084200370300200342003703b80720034180056a41d9fcc6004106108102200820034180056a41086a220229000037030020032003290080053703b80720034180056a4180f4cb004106108102200120022900003703002007200329008005370300200341b0016a200341b8076a4120108e0220032802b401211220032802b0012111200820052903003703002007200629030037030020012009290300370300200341e0046a41086a2209200a290300370300200341e0046a41106a220a200b290300370300200341e0046a41186a220b200c290300370300200320032903c0033703b807200320032903a0043703e00420034180086a200341c0046a10d90220034180056a20032802800820032802880810da022003418c056a280200210c0240024020032802800522060d004104210641002102410021054200210e0c010b20034180056a41186a290300210e20034180056a41106a290300210d2002280200210520032802840521020b200341d8076a41086a2008290300370300200341d8076a41106a2007290300370300200341d8076a41186a2001290300370300200341a0026a41086a2009290300370300200341a0026a41106a200a290300370300200341a0026a41186a200b290300370300200320032903b8073703d807200320032903e0043703a0022005411f4b0d0320034180056a41086a2207200341d8076a41086a29030037030020034180056a41106a2208200341d8076a41106a29030037030020034180056a41186a2209200341d8076a41186a290300370300200341e0036a41086a220a200341a0026a41086a290300370300200341e0036a41106a220b200341a0026a41106a290300370300200341e0036a41186a2213200341a0026a41186a290300370300200320032903d80737038005200320032903a0023703e00320052002470d02200241016a22012002490d00200241017422142001201420014b1b22014104200141044b1bad42c4007e220f422088a7454102742101200fa721140240024020020d00200341003602b0080c010b200341b8086a4104360200200320063602b0082003200241c4006c3602b4080b200341a0086a20142001200341b0086a107d200341a8086a280200210120032802a0084101470d0120010d220b1038000b20032802a4082106200141c4006e21020b2006200541c4006c6a22012012410020111b36020020012003290380053702042001410c6a2007290300370200200141146a20082903003702002001411c6a2009290300370200200120032903e0033702242001412c6a200a290300370200200141346a200b2903003702002001413c6a2013290300370200200341a0016a200541016a2205ad420042809adbba02420010e8080240024020032903a0012210428088caade9057c220f200d58200341a0016a41086a290300200f201054ad7c2210200e582010200e5122011b0d0020034180056a200341c0046a200f200d7d2010200e7d200f200d54ad7d10c30220032d00800522014106460d0120032d008305210520032f008105210720032003290284053702940820032007200541107472410874200172360290080c170b200d200f58200e20105820011b0d0020034190016a200341c0046a200d200f7d200e20107d200d200f54ad7d10fb010b41062101200341063a0090080c010b20034190086a410110d102200d210f200e211020032d00900822014106470d140b20034198056a20103703002003200f370390052003200c36028c05200320053602880520032002360284052003200636028005200328028808210520032802800821070240024020060d002007200510ff010c010b2007200520034180056a10db022006450d002002450d00200241c4006c450d002006102e0b20032003290091083703e003200320034198086a2800003600e7030c140b200341b8076a41186a200141196a290000370300200341b8076a41106a200141116a290000370300200341b8076a41086a200141096a290000370300200320012900013703b807200341a0026a41186a200141396a290000370300200341a0026a41106a200141316a290000370300200341a0026a41086a200141296a2900003703002003200141216a2900003703a00220034180056a41286a200241286a28020036020020034180056a41206a200241206a29020037030020034180056a41186a200241186a29020037030020034180056a41106a200241106a29020037030020034180056a41086a200241086a2902003703002003200229020037038005200341e0036a20034180056a10c102200341c0036a41086a2201200341e0036a41096a290000370300200341c0036a41106a2202200341e0036a41116a290000370300200341c0036a41186a2205200341e0036a41196a290000370300200320032900e1033703c00320032d00e0034101460d01200341d8076a41186a2005290300370300200341d8076a41106a2002290300370300200341d8076a41086a2001290300370300200320032903c0033703d807200341e0046a200341d8076a10d902200341e0036a20032802e00420032802e80410da02200341e0036a41186a2201290300210e200120032903980537030041002108200341003602800520032903f003211020032003290390053703f00320032903e803210f20032003290388053703e80320032903e003210d20032003290380053703e003200da72207450d02200d422088210d0240200fa72206450d00200741246a210a41002109410021084100210202400340024002402008450d002007200241c4006c6a21012007200220096a41c4006c6a210503400240200141046a200341b8076a412010ec080d00200141246a200341a0026a412010ec08450d030b2005200141c40010e90841c4006a2105200141c4006a2101200241016a22022006490d000c040b0b200a200241c4006c6a210103400240200141606a200341b8076a412010ec080d002001200341a0026a412010ec08450d020b200141c4006a2101200241016a22022006490d000b410021080c030b2009417f6a2109200841016a2108200241016a22022006490d000b0b024020080d00410021080c010b2007200220086b41c4006c6a2007200241c4006c6a200620026b41c4006c10ea081a0b200da7210202400240200620086b22012006490d0020034180056a410210d1020c010b200d200f422086842115024020010d004200210f4200210d0c0e0b200341c8016a2001ad2216420042809adbba02420010e80820032903c801220d428088caade9057c220f201058200341d0016a290300200f200d54ad7c220d200e58200d200e511b0d0d20034180056a200341d8076a200f20107d200d200e7d200f201054ad7d10c302024020032d00800522014106470d002016422086201542ffffffff0f8384210e0c0f0b20032d008305210520032f008105210620032003290284053702840520032006200541107472410874200172360280050b2002450d0b200241c4006c450d0b2007102e0c0b0b200341e0036a410510d10220032f00e10320032d00e3034110747221020c1c0b410221010c0f0b20034180056a410210d1020c080b410221010c100b200620051046000b200341a0046a410210d102200341ef036a200341a0046a41086a280200220136000020034198056a41003a0000200341a8056a2001360000200320032903a0043700e703200341a1056a200341e0036a41086a29000037000020034200370388052003420137038005200320032900e003370099050c130b20034180056a41206a41023a000020034180056a41186a41003a00002003420037038805200342013703800520034180056a41086a21010c1a0b200720021045000b410221010c1a0b200141c4006a2802002107200141c1006a2d00002105200341c0046a41186a200141196a290000370300200341c0046a41106a200141116a290000370300200341c0046a41086a200141096a290000370300200320012900013703c004200341e0046a41186a200141396a290000370300200341e0046a41106a200141316a290000370300200341e0046a41086a200141296a2900003703002003200141216a2900003703e00420034180056a41286a2201200241286a28020036020020034180056a41206a2206200241206a29020037030020034180056a41186a2208200241186a29020037030020034180056a41106a2209200241106a29020037030020034180056a41086a220a200241086a2902003703002003200229020037038005200341e0036a20034180056a10c10202400240024020032d00e0034101470d00410221090c010b20034180056a200341e0046a200341c0046a200510d002200341e0036a41086a2008290300370300200341e0036a41106a2006290300370300200341e0036a41186a2001280200360200200320092903003703e00320032f00850520032d008705411074722108200a290300210d20032d00840521092003280280054101460d00200341a0046a41186a200341e0036a41186a2201280200360200200341a0046a41106a200341e0036a41106a290300370300200341a0046a41086a200341e0036a41086a290300370300200320032903e0033703a00420034100360288052003420137038005200720034180056a109002200341b8076a20032802800520032802880510b001200341a0026a41186a200341b8076a41186a2202290200370300200341a0026a41106a200341b8076a41106a2205290200370300200341a0026a41086a200341b8076a41086a2206290200370300200320032902b8073703a0020240200328028405450d00200328028005102e0b200242003703002005420037030020064200370300200342003703b80720034180056a41d9fcc6004106108102200620034180056a41086a220a29000037030020032003290080053703b80720034180056a4180f4cb0041061081022002200a290000370300200520032900800537030020034198026a200341b8076a4120108e02200328029c0221022003280298022105200341d8076a200341c0046a10d902200341e0036a20032802d80720032802e00710da022001290300210f200120032903980537030020032903f003211520032003290390053703f00320032903e803211020032003290388053703e803200341003602800520032903e003210e20032003290380053703e0030240024002400240024002400240200ea7220a450d00200e422088210e024002402010a722060d004100210c0c010b2002410020051b210b20084108742009722111410021134100210c410021020240034002400240200c450d00200a200241c4006c6a2101200a200220136a41c4006c6a210503400240200141046a200341e0046a412010ec080d00200141246a200341a0026a412010ec080d004100200b20012802006b22122012200b4b1b20114f0d030b2005200141c40010e90841c4006a2105200141c4006a2101200241016a22022006490d000c040b0b200a200241c4006c6a210103400240200141046a200341e0046a412010ec080d00200141246a200341a0026a412010ec080d004100200b20012802006b22052005200b4b1b20114f0d020b200141c4006a2101200241016a22022006490d000b4100210c0c030b2013417f6a2113200c41016a210c200241016a22022006490d000b0b0240200c0d004100210c0c010b200a2002200c6b41c4006c6a200a200241c4006c6a200620026b41c4006c10ea081a0b200ea72102024002402006200c6b22012006490d0020034180056a410210d1020c010b200e2010422086842116024020010d00420021104200210e0c040b20034188026a2001ad2217420042809adbba02420010e808200329038802220e428088caade9057c221020155820034190026a2903002010200e54ad7c220e200f58200e200f511b0d0320034180056a200341c0046a201020157d200e200f7d2010201554ad7d10c302024020032d00800522014106470d002017422086201642ffffffff0f8384210f0c050b20032d008305210520032f008105210620032003290284053702840520032006200541107472410874200172360280050b2002450d01200241c4006c450d01200a102e0c010b20034180056a410210d1020b20032d0080052202410646210120032802e003210a20024106460d02200a450d040c030b02402015201058200f200e58200f200e511b0d00200341f8016a200341c0046a201520107d200f200e7d2015201054ad7d10fb010b2001ad422086201642ffffffff0f8384210f20010d0002402002450d00200241c4006c450d00200a102e0b4100210a0b024020032802e0032201450d0020032802e4032202450d00200241c4006c450d002001102e0b200341f8036a200e370300200341f0036a20103703002003200f3702e4032003200a3602e003200341063a008005410121010b20032802e007210220032802d80721050240200a0d002005200210ff010c020b20052002200341e0036a10db020b20032802e4032202450d00200241c4006c450d00200a102e0b024020032802dc07450d0020032802d807102e0b02402001450d00200341ec036a20032903a004370200200341f4036a200341a0046a41086a290300370200200341e0036a411c6a200341a0046a41106a29030037020020034184046a200341a0046a41186a2802003602002003200d3702e403200320084108742009723602e003200341d8076a41186a200341e0046a41186a290300370300200341d8076a41106a200341e0046a41106a290300370300200341d8076a41086a200341e0046a41086a290300370300200320032903e0043703d80720034180056a200741b00210e9081a200341e0036a200341d8076a20034180056a10d2022007102e200320032800c003360280052003200341c3036a28000036008305200041186a41003a00004200210d2000420037030820002003280280053600192000411c6a2003280083053600000c020b20034180056a410710d10220032f00810520032d008305411074722108200329028405210d20032d00800521090b2007108b022007102e200320032800c003360280052003200341c3036a28000036008305200041236a20084110763a0000200020083b0021200041186a41003a00002000420037030820002003280280053600192000411c6a2003280083053600002000200d370024200041206a20093a00004201210d0b2000200d370300200424000f0b200341b8076a41186a200141196a290000370300200341b8076a41106a200141116a290000370300200341b8076a41086a200141096a290000370300200320012900013703b807200341a0026a41186a200141396a290000370300200341a0026a41106a200141316a290000370300200341a0026a41086a200141296a2900003703002003200141216a2900003703a00220034180056a41286a200241286a28020036020020034180056a41206a200241206a29020037030020034180056a41186a200241186a29020037030020034180056a41106a200241106a29020037030020034180056a41086a200241086a2902003703002003200229020037038005200341e0036a20034180056a10c102200341c0036a41086a2201200341e0036a41096a290000370300200341c0036a41106a2202200341e0036a41116a290000370300200341c0036a41186a2205200341e0036a41196a290000370300200320032900e1033703c00302400240024002400240024002400240024020032d00e0034101460d00200341d8076a41186a2005290300370300200341d8076a41106a2002290300370300200341d8076a41086a2001290300370300200320032903c0033703d807200341e0046a200341b8076a10d902200341e0036a20032802e00420032802e80410da02200341e0036a41186a2201290300210e200120032903980537030041002108200341003602800520032903f003211020032003290390053703f00320032903e803210f20032003290388053703e80320032903e003210d20032003290380053703e003200da72207450d01200d422088210d0240200fa72206450d00200741246a210a41002109410021084100210202400340024002402008450d002007200241c4006c6a21012007200220096a41c4006c6a210503400240200141046a200341d8076a412010ec080d00200141246a200341a0026a412010ec08450d030b2005200141c40010e90841c4006a2105200141c4006a2101200241016a22022006490d000c040b0b200a200241c4006c6a210103400240200141606a200341d8076a412010ec080d002001200341a0026a412010ec08450d020b200141c4006a2101200241016a22022006490d000b410021080c030b2009417f6a2109200841016a2108200241016a22022006490d000b0b024020080d00410021080c010b2007200220086b41c4006c6a2007200241c4006c6a200620026b41c4006c10ea081a0b200da7210202400240200620086b22012006490d0020034180056a410210d1020c010b200d200f422086842115024020010d004200210f4200210d0c050b200341e8016a2001ad2216420042809adbba02420010e80820032903e801220d428088caade9057c220f201058200341f0016a290300200f200d54ad7c220d200e58200d200e511b0d0420034180056a200341b8076a200f20107d200d200e7d200f201054ad7d10c302024020032d00800522014106470d002016422086201542ffffffff0f8384210e0c060b20032d008305210520032f008105210620032003290284053702840520032006200541107472410874200172360280050b2002450d02200241c4006c450d022007102e0c020b410221010c070b20034180056a410210d1020b20032d0080052201410646210220032802e003210720014106460d022007450d040c030b02402010200f58200e200d58200e200d511b0d00200341d8016a200341b8076a2010200f7d200e200d7d2010200f54ad7d10fb010b2001ad422086201542ffffffff0f8384210e20010d0002402002450d00200241c4006c450d002007102e0b410021070b024020032802e0032201450d0020032802e4032202450d00200241c4006c450d002001102e0b200341f8036a200d370300200341f0036a200f3703002003200e3702e403200320073602e00341062101200341063a008005410121020b20032802e804210520032802e0042106024020070d002006200510ff010c020b20062005200341e0036a10db020b20032802e4032205450d00200541c4006c450d002007102e0b024020032802e404450d0020032802e004102e0b200320032900810537039004200320034188056a2800003600970402402002450d00200320032800a003360280032003200341a3036a28000036008303200041186a41003a00002000420037030820002003280280033600192000411c6a20032800830336000020004200370300200424000f0b20032003280097043600c70420032003290390043703c0040b200320032800a00336028003200320032903c0043703a004200320032800c7043600a7042003200341a3036a28000036008303200041186a41003a00002000420037030820002003280280033600192000411c6a200328008303360000200041206a20013a0000200020032903a004370021200041286a20032800a70436000020004201370300200424000f0b20032d0080052201410646210220032802e003210720014106460d022007450d040c030b02402010200f58200e200d58200e200d511b0d00200341b8016a200341d8076a2010200f7d200e200d7d2010200f54ad7d10fb010b2001ad422086201542ffffffff0f8384210e20010d0002402002450d00200241c4006c450d002007102e0b410021070b024020032802e0032201450d0020032802e4032202450d00200241c4006c450d002001102e0b200341f8036a200d370300200341f0036a200f3703002003200e3702e403200320073602e00341062101200341063a008005410121020b20032802e804210520032802e0042106024020070d002006200510ff010c020b20062005200341e0036a10db020b20032802e4032205450d00200541c4006c450d002007102e0b024020032802e404450d0020032802e004102e0b200320032900810537039004200320034188056a2800003600970402402002450d00200320032800a003360280032003200341a3036a28000036008303200041186a41003a00002000420037030820002003280280033600192000411c6a20032800830336000020004200370300200424000f0b20032003280097043600c70420032003290390043703c0040b200320032800a00336028003200320032903c0043703a004200320032800c7043600a7042003200341a3036a28000036008303200041186a41003a00002000420037030820002003280280033600192000411c6a200328008303360000200041206a20013a0000200020032903a004370021200041286a20032800a70436000020004201370300200424000f0b20032003290091083703e003200320034198086a2800003600e7032002450d00200241c4006c450d002006102e0b0240200328028408450d00200328028008102e0b200320032903e00337039004200320032800e70336009704024020014106470d00200341a5056a20032903c0043700002003418d056a20034180036a41086a29030037000020034195056a20034180036a41106a2903003700002003419d056a20034180036a41186a290300370000200341ad056a200341c0046a41086a290300370000200341b5056a200341c0046a41106a290300370000200341bd056a200341c0046a41186a290300370000200341023a008405200341133a008005200320032903800337008505200341dd056a200341a0036a41186a290300370000200341d5056a200341a0036a41106a290300370000200341cd056a200341a0036a41086a290300370000200341c5056a20032903a00337000020034180056a10fe01200320032800f9023602e0022003200341fc026a2800003600e302200041186a41003a000020004200370308200020032802e0023600192000411c6a20032800e30236000020004200370300200424000f0b20032003280097043600ef0220032003290390043703e8020b200320032800f9023602e002200320032903e8023703d002200320032800ef023600d7022003200341fc026a2800003600e302200041186a41003a000020004200370308200020032802e0023600192000411c6a20032800e302360000200041206a20013a0000200020032903d002370021200041286a20032800d70236000020004201370300200424000f0b02402010200f56200e200d56200e200d511b450d00200341386a200341e0046a2010200f7d200e200d7d2010200f54ad7d10fb010b2005450d010b024020032802a0022206450d0020032802a4022207450d00200741286c450d002006102e0b200341a0026a41186a200d370300200341b0026a200f37030020034180056a41186a41003a0000200320053602a802200320023602a402200320013602a002200342003703800520034200370388050c010b20034198056a41003a00002003420037038005200342003703880502402002450d00200241286c450d002001102e0b20032802a00221010b20032802a803210220032802a0032105024020010d002005200210ff010c010b20052002200341a0026a10d6020b024020032802a002450d0020032802a4022201450d00200141286c450d0020032802a002102e0b024020032802a403450d0020032802a003102e0b20034180056a41086a21012003290380054201520d010b200341d8076a41206a200141206a290300220d370300200341d8076a41186a200141186a290300220e370300200341d8076a41106a200141106a290300220f370300200341d8076a41086a200141086a29030022103703002003200129030022153703d807200041286a200d370300200041206a200e370300200041186a200f370300200041106a20103703002000201537030820004201370300200424000f0b200341d8076a41106a200141106a290300220d370300200341d8076a41086a200141086a290300220e37030020032001290300220f3703d807200041186a200d370300200041106a200e3703002000200f37030820004200370300200424000f0b1036000b20032902e403210d20032d00e00321060b20034198056a41003a0000200341a0056a20063a0000200320023b00a105200341a3056a20024110763a00002003419c056a200341a3086a28000036000020034200370388052003420137038005200320032800a008360099052003200d3702a4052001450d00200141286c450d002005102e0b024020032802b408450d0020032802b008102e0b20032903800542015121020b20034180056a41086a21012002450d010b200341a0026a41206a200141206a290300220d370300200341a0026a41186a200141186a290300220e370300200341a0026a41106a200141106a290300220f370300200341a0026a41086a200141086a29030022103703002003200129030022153703a002200041286a200d370300200041206a200e370300200041186a200f370300200041106a20103703002000201537030820004201370300200424000f0b200341a0026a41106a200141106a290300220d370300200341a0026a41086a200141086a290300220e37030020032001290300220f3703a002200041186a200d370300200041106a200e3703002000200f37030820004200370300200424000f0b2005108b022005102e200320032800c0043602a0042003200341c3046a2800003600a304200041186a41003a000020004200370308200020032802a0043600192000411c6a20032800a304360000200041246a200d370200200041206a200136020020004201370300200424000b8a0e020e7f037e230041e0016b2204240020044190016a200110d302200441b8016a200428029001220520042802980110d402200441c0016a280200410020042802b80122061b210120042802bc0121070240200428029401450d002005102e0b2006410420061b21080240024002402001450d002008200141286c6a2109200441b8016a410472210a200441b8016a41256a2105024002400240200341ff0171220b4107460d00200441e4006a41026a210c200821010340200441e8006a41206a220d200141206a280200360200200441e8006a41186a220e200141186a290200370300200441e8006a41106a220f200141106a290200370300200441e8006a41086a2210200141086a29020037030020042001290200370368200141246a2d00002111200c200141276a2d00003a00002004200141256a2f00003b016420114107460d04200441b8016a41206a200d280200360200200441b8016a41186a200e290300370300200441b8016a41106a200f290300370300200441b8016a41086a2010290300370300200520042f01643b0000200541026a200c2d00003a0000200420042903683703b801200420113a00dc010240200a2002412010ec080d002011200b460d030b200141286a22012009470d000c040b0b200441e4006a41026a2111200821010340200441e8006a41206a220c200141206a280200360200200441e8006a41186a220d200141186a290200370300200441e8006a41106a220e200141106a290200370300200441e8006a41086a220f200141086a29020037030020042001290200370368200141246a2d000021032011200141276a2d00003a00002004200141256a2f00003b016420034107460d03200441b8016a41206a200c280200360200200441b8016a41186a200d290300370300200441b8016a41106a200e290300370300200441b8016a41086a200f290300370300200520042f01643b0000200541026a20112d00003a0000200420042903683703b801200420033a00dc010240200a2002412010ec08450d0020044190016a41206a41002802d8f34036020020044190016a41186a41002902d0f34037030020044190016a41106a41002902c8f340370300200141286a22012009470d010c040b0b20044190016a41206a200441b8016a41206a28020036020020044190016a41186a200441b8016a41186a29030037030020044190016a41106a200441b8016a41106a29030037030020044190016a41086a200441b8016a41086a2903003703002004418c016a41026a200541026a2d00003a0000200420042903b80137039001200420052f00003b018c010c010b20044190016a41206a200441b8016a41206a28020036020020044190016a41186a200441b8016a41186a29030037030020044190016a41106a200441b8016a41106a29030037030020044190016a41086a200441b8016a41086a2903003703002004418c016a41026a200541026a2d00003a0000200420042903b80137039001200420052f00003b018c010b200441c0006a41206a220120044190016a41206a2205280200360200200441c0006a41186a221120044190016a41186a2202290300370300200441c0006a41106a220a20044190016a41106a220c290300370300200441c0006a41086a220920044190016a41086a220d2903003703002004413c6a41026a220e2004418c016a41026a2d00003a00002004200429039001370340200420042f018c013b013c200341ff01714107470d010b41012105410721030c010b200520012802002201360200200220112903002212370300200c200a2903002213370300200d20092903002214370300200441e8006a41026a200e2d00003a0000200441c2016a2014370100200441ca016a2013370100200441d2016a2012370100200441da016a200136010020042004290340221237039001200420042f013c3b0168200420123701ba01410021050b2007410020061b2101200441106a41086a200441b8016a41086a2211290100370300200441106a41106a200441b8016a41106a290100370300200441106a41186a200441b8016a41186a290100370300200441106a411e6a200441b8016a411e6a2901003701002004410c6a41026a2202200441e8006a41026a2d00003a0000200420042901b801370310200420042f01683b010c0240024020050d0020002004290112370104200020042f010c3b0029200041286a20033a0000200041246a200441326a2801003601002000411c6a2004412a6a290100370100200041146a200441226a2901003701002000410c6a2004411a6a2901003701002000412b6a20022d00003a000002402001450d00200141286c450d002008102e0b410021010c010b200441b8016a410310d1022000410c6a2011280200360200200020042903b80137020402402001450d00200141286c450d002008102e0b410121010b20002001360200200441e0016a24000ba80201047f230041c0006b22022400410b210341f6fac000210441072105024002400240024002400240024002400240200141ff01710e09000102030405060708000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a41bc8ccc001044000b4107210341effac0002104410021050c060b41082103418be7c4002104410121050c050b4108210341e7fac0002104410221050c040b41dcfac0002104410321050c030b4109210341d3fac0002104410421050c020b410c210341c284ca002104410521050c010b41c8fac0002104410621050b200041833a3b0100200041086a2003360200200041046a2004360200200041026a20053a0000200241c0006a24000bd20a02057f017e23004190066b22032400200341186a200141186a290000370300200341106a200141106a290000370300200341086a200141086a29000037030020032001290000370300024002404110102c2204450d00200441f8f7c60036020c2004410136020820044281808080103702004110102c2201450d0020014190f8c60036020c20014101360208200142818080801037020020042004280200417f6a2205360200024020050d002004280208200428020c2802001103000240200428020c280204450d002004280208102e0b200441046a22052005280200417f6a220536020020050d002004102e0b200341d8006a41206a2204200041206a290200370300200341d8006a41186a2205200041186a290200370300200341d8006a41106a2206200041106a290200370300200341d8006a41086a2207200041086a29020037030020032000290200370358200128020041016a220041014d0d0120012000360200200341b0036a41206a2004290300370300200341b0036a41186a2005290300370300200341b0036a41106a2006290300370300200341b0036a41086a2007290300370300200320032903583703b003412c102c2200450d0020002001360200200020032903b0033702042000410c6a200341b8036a290300370200200041146a200341b0036a41106a2903003702002000411c6a200341c8036a290300370200200041246a200341d0036a2903003702004110102c2204450d00200441c0fec60036020c20042000360208200442818080801037020020012001280200417f6a2200360200024020000d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22002000280200417f6a220036020020000d002001102e0b200341d8006a200241b00210e9081a20034188036a411e6a22012003411e6a29010037010020034188036a41186a2200200341186a29030037030020034188036a41106a2202200341106a29030037030020034188036a41086a2205200341086a2903003703002003200329030037038803024002402004280208200341d8006a200428020c28020c1101000d0041022100200341c8006a41023a0000200341286a41186a41003a000020042004280200417f6a2201360200420021082003420037033020034201370328024020010d002004280208200428020c2802001103000240200428020c280204450d002004280208102e0b200441046a22012001280200417f6a220136020020010d002004102e0b200341d8006a10dc02410121010c010b200341b0036a200341d8006a41b00210e9081a200341ea056a2005290300370100200341f2056a2002290300370100200341fa056a2000290300370100200341e0056a41206a200129010037010020034180023b01e00520032003290388033701e2052003200436028806200341286a200341b0036a200341e0056a10dd0220032903284201512101200341286a41206a2d00002100200329033021080b2003200341d0006a2800003600b703200320032900493703b0030240024020010d00410621010c010b200320032800b70336005f200320032903b0033703584106210120084202510d002003200328005f3600b703200320032903583703b003200021010b200320032903b0033703e005200320032800b7033600e705200341b8036a20013a0000200341b9036a20032903e005370000200341c0036a20032800e705360000200341003a00b403200341133a00b003200320032f0088033b00b50320032003418a036a2d00003a00b703200341c4036a200341d8006a41d40010e9081a200341b0036a10fe0120034190066a24000f0b1036000b00000bb10201037f230041e0006b22022400200241086a4190fec6004105108102200241186a41a8dbc8004107108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241d0006a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000ba30b04047f017e0c7f037e230041d0016b220324002003200236021420032001360210200341186a2001200210ed0202400240200328021822040d00200041003602000c010b200328021c21052003200341206a28020036022c20032004360228200341086a200341286a10ab0102400240024020032802080d00024002400240200328020c2206200328022c41286e2201200120064b1bad42287e2207422088a70d002007a72201417f4c0d0002400240024020010d00410421080c010b2001102c2208450d010b200141286e2102024020060d00410021060c030b200341a8016a41017221094100210a4100210b0340200341a8016a200341286a1093010240024020032d00a8014101460d0020034188016a41186a220c200941186a29000037030020034188016a41106a220d200941106a29000037030020034188016a41086a220e200941086a2900003703002003200929000037038801200328022c2201450d002003280228220f2d0000211020032001417f6a221136022c2003200f41016a3602284100211202400240024002400240024020100e0705040001060203060b410221120c040b410321120c030b410521120c020b410621120c010b410121120b20114104490d00200341a8016a41086a200e290300370300200341a8016a41106a200d290300370300200341a8016a41186a200c29030037030020034182016a41026a20034185016a41026a2d00003a000020032003290388013703a801200f280001211320032001417b6a36022c2003200f41056a360228200320032f0085013b0182010c010b410721120b200341e0006a41186a2201200341a8016a41186a290300370300200341e0006a41106a220f200341a8016a41106a290300370300200341e0006a41086a220c200341a8016a41086a290300370300200341dc006a41026a220d20034182016a41026a2d00003a0000200320032903a801370360200320032f0182013b015c024020124107460d00200341386a41186a220e2001290300370300200341386a41106a2210200f290300370300200341386a41086a220f200c290300370300200341346a41026a220c200d2d00003a000020032003290360370338200320032f015c3b01340240200b2002470d00200241016a22012002490d042002410174220d2001200d20014b1b22014104200141044b1bad42287e2207422088a74541027421012007a7210d0240024020020d00200341003602a8010c010b200341043602b001200320083602a8012003200241286c3602ac010b20034188016a200d2001200341a8016a107d200328029001210102402003280288014101470d0020010d040c050b200328028c012108200141286e21020b2008200a6a22012013360200200e290300210720102903002114200f290300211520032903382116200141246a20123a0000200141046a20163702002001410c6a2015370200200141146a20143702002001411c6a2007370200200141256a20032f01343b0000200141276a200c2d00003a0000200a41286a210a2006200b41016a220b460d040c010b0b2002450d04200241286c450d040c030b1036000b1038000b2008450d01200328022c2201410f4b0d022002450d01200241286c450d010b2008102e0b200341003602900120034201370388012003410a3602642003200341106a360260200320034188016a360238200341bc016a4101360200200342013702ac01200341909dc5003602a8012003200341e0006a3602b801200341386a419cebc000200341a8016a103d1a20032802880120032802900110ef020240200328028c01450d00200328028801102e0b200041003602000c010b2000200236020420002008360200200041106a20032802282202290000370300200041086a2006360200200041186a200241086a2900003703002003200141706a36022c2003200241106a3602280b2005450d002004102e0b200341d0016a24000bd70201097f410121044100210502400240024020020e020201000b200341046a21062003280200210720032d002441ff017121084100210503400240024020012002410176220920056a220a41286c6a220b41046a2006412010ec08220c450d00417f4101200c4100481b210c0c010b4100417f200b2d0024220c200847200c2008491b200c2008461b220c0d00417f200b280200220c200747200c2007491b210c0b2005200a200c4101461b2105200220096b220241014b0d000b0b024002402001200541286c6a220c41046a200341046a412010ec082202450d00417f410120024100481b21020c010b02404100417f200c2d0024220220032d002422094720022009491b20022009461b22020d0041ff012102200c280200220c20032802002209490d01200c20094721020b20020d00410021040c010b2005200241ff017141ff01466a21050b20002005360204200020043602000baa0102037f017e230041206b2203240002400240200228020841286c41146a2204417f4c0d002004102c2205450d0120034100360208200320043602042003200536020020022802002002280208200310d802200229031021062003200241186a290300370318200320063703102003200341106a411010742000200120032802002202200328020810b20102402003280204450d002002102e0b200341206a24000f0b1038000b1036000bc40201027f230041106b220224000240411a102c2203450d002002421a37020420022003360200200220012802004110107420022001280204412010742002200128020836020c20022002410c6a410410742002200128020c36020c20022002410c6a41041074024002400240024002400240024020012802102d00000e0700010203060405060b200241003a000c20022002410c6a410110740c050b200241013a000c20022002410c6a410110740c040b200241023a000c20022002410c6a410110740c030b200241033a000c20022002410c6a410110740c020b200241053a000c20022002410c6a410110740c010b200241063a000c20022002410c6a410110740b200220012f01143b010c20022002410c6a41021074200020022802002201200228020810b00102402002280204450d002001102e0b200241106a24000f0b1036000bf90101017f230041106b2203240020012002107602402001450d00200141286c210103402002200041046a412010740240024002400240024002400240200041246a2d00000e0700010203060405060b200341003a000b20022003410b6a410110740c050b200341013a000c20022003410c6a410110740c040b200341023a000d20022003410d6a410110740c030b200341033a000e20022003410e6a410110740c020b200341053a000f20022003410f6a410110740c010b200341063a00032002200341036a410110740b200320002802003602042002200341046a41041074200041286a2100200141586a22010d000b0b200341106a24000bb10201037f230041e0006b22022400200241086a4190fec6004105108102200241186a41afdbc800410d108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241d0006a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000bb10d03047f017e0d7f23004190036b220324002003200236020c20032001360208200341106a2001200210ed020240024002400240200328021022040d00200041003602000c010b200328021421052003200341186a280200360224200320043602202003200341206a10ab0102400240024020032802000d0020032802042206200328022441c4006e2201200120064b1bad42c4007e2207422088a70d052007a72201417f4c0d050240024020010d00410421080c010b2001102c2208450d050b200141c4006e210902400240024020060d00410021060c010b200341a8026a410172210a4100210b0340200341a8026a200341206a10930102400240024020032d00a8024101460d00200b41016a210c200341e8016a41186a220d200a41186a290000370300200341e8016a41106a220e200a41106a290000370300200341e8016a41086a220f200a41086a2900003703002003200a2900003703e80141002101200341003a00c802417f2102200328022421100240034020102001460d01200341a8026a20016a200328022022112d00003a00002003201020026a3602242003201141016a3602202003200141016a22123a00c8022002417f6a21022012210120124120470d000b200341f0026a41186a2201200341a8026a41186a290300370300200341f0026a41106a2202200341a8026a41106a290300370300200341f0026a41086a2213200341a8026a41086a290300370300200320032903a8023703f002201241ff01714120490d0120034188026a41086a2214201329030037030020034188026a41106a2213200229030037030020034188026a41186a22022001290300370300200320032903f00237038802201020126b22014104490d01200341c8016a41086a2212200f290300370300200341c8016a41106a2210200e290300370300200341c8016a41186a220e200d290300370300200341a8016a41086a220d2014290300370300200341a8016a41106a220f2013290300370300200341a8016a41186a22132002290300370300200320032903e8013703c80120032003290388023703a801201128000121022003201141056a36022020032001417c6a36022420034188016a41086a2201201229030037030020034188016a41106a2212201029030037030020034188016a41186a2210200e290300370300200341e8006a41086a2211200d290300370300200341e8006a41106a220d200f290300370300200341e8006a41186a220e2013290300370300200320032903c80137038801200320032903a801370368200341c8006a41186a220f2010290300370300200341c8006a41106a22102012290300370300200341c8006a41086a22122001290300370300200341286a41186a2213200e290300370300200341286a41106a220e200d290300370300200341286a41086a220d2011290300370300200320032903880137034820032003290368370328200b2009470d03200941016a220120094f0d020c0c0b200141ff0171450d00200341003a00c8020b2009450d05200941c4006c0d040c050b200941017422112001201120014b1b22014104200141044b1bad42c4007e2207422088a74541027421012007a721110240024020090d00200341003602a8020c010b200341043602b002200320083602a8022003200941c4006c3602ac020b200341f0026a20112001200341a8026a107d20032802f8022101024020032802f0024101470d002001450d0a0c090b20032802f4022108200141c4006e21090b2008200b41c4006c6a22012002360200200120032903483702042001410c6a2012290300370200200141146a20102903003702002001411c6a200f290300370200200120032903283702242001412c6a200d290300370200200141346a200e2903003702002001413c6a2013290300370200200c210b200c2006470d000b0b2008450d0120032802242201410f4b0d022009450d01200941c4006c450d010b2008102e0b200341003602f802200342013703f0022003410a3602d4022003200341086a3602d0022003200341f0026a36028802200341bc026a4101360200200342013702ac02200341909dc5003602a8022003200341d0026a3602b80220034188026a419cebc000200341a8026a103d1a20032802f00220032802f80210ef02024020032802f402450d0020032802f002102e0b200041003602000c010b2000200936020420002008360200200041106a20032802202202290000370300200041086a2006360200200041186a200241086a2900003703002003200141706a3602242003200241106a3602200b2005450d002004102e0b20034190036a24000f0b1036000b1038000bc10102047f017e230041206b22032400024002402002280208220441c4006c41146a2205417f4c0d000240024020050d00410121060c010b2005102c2206450d02200228020821040b200341003602082003200536020420032006360200200228020020042003109505200229031021072003200241186a290300370318200320073703102003200341106a411010742000200120032802002202200328020810b20102402003280204450d002002102e0b200341206a24000f0b1038000b1036000b802401047f024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002802000e1b00010218180304051806070818090a0b0c0d0e0f10111213141516170b0240024002400240024002400240200041086a2802000e0a1e1e001e01021e030405060b200041106a280200450d1d2000410c6a280200102e0f0b200041106a280200450d1c2000410c6a280200102e0f0b200041106a280200450d1b2000410c6a280200102e0f0b0240200041146a2802002201450d002000410c6a2802002102200141186c210103400240200241046a280200450d002002280200102e0b0240200241106a280200450d002002410c6a280200102e0b200241186a2102200141686a22010d000b0b200041106a2802002202450d1a200241186c450d1a200028020c102e0f0b0240200041146a2802002201450d002000410c6a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041106a2802002202450d192002410c6c450d19200028020c102e0f0b200041106a280200450d182000410c6a280200102e0f0b200041106a280200450d172000410c6a280200102e0f0b0240024002400240024020002d00040e061b001b010203040b200041186a220228020010dc022002280200102e0f0b02402000410c6a280200450d00200041086a280200102e0b200041246a220228020010dc022002280200102e0f0b2000410c6a280200450d18200041086a280200102e0f0b200041186a220228020010dc022002280200102e0f0b02402000410c6a280200450d00200041086a280200102e0b200041246a220228020010dc022002280200102e0f0b02400240200041086a280200417f6a0e020001170b2000412c6a220110e1010240200041306a2802002202450d00200241246c450d002001280200102e0b2000419c016a220110e1010240200041a0016a2802002202450d00200241246c450d002001280200102e0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d162002410c6c450d162000280210102e0f0b2000412c6a220110e1010240200041306a2802002202450d00200241246c450d002001280200102e0b2000419c016a220110e1010240200041a0016a2802002202450d00200241246c450d002001280200102e0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d152002410c6c450d152000280210102e0f0b0240024002400240200041086a2802000e0418000102030b2000410c6a2d00004102470d17200041146a280200450d17200041106a280200102e0f0b2000410c6a2d00004102470d16200041146a280200450d16200041106a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004102470d15200041386a280200450d15200041346a280200102e0f0b2000410c6a2d00004102470d14200041146a280200450d14200041106a280200102e0f0b02402000410c6a2802002201450d0020002802042202200141f0006c6a21030340024020022204410c6a2802002201450d0020042802042102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b200441f0006a21020240200441086a2802002201450d00200141246c450d002004280204102e0b20022003470d000b0b200041086a2802002202450d13200241f0006c450d132000280204102e0f0b024002400240024002400240200041086a2d00000e171800181818180118180218181818180318180418181818050b2000412c6a2d00004102470d17200041346a280200450d17200041306a280200102e0f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b200041106a2802002202450d16200241246c450d16200028020c102e0f0b2000410c6a2d00004102470d15200041146a280200450d15200041106a280200102e0f0b200041106a28020041ffffff3f71450d142000410c6a280200102e0f0b200041146a28020041ffffffff0371450d13200041106a280200102e0f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b200041106a2802002202450d12200241246c450d12200028020c102e0f0b20002802042202450d11200041086a280200450d112002102e0f0b02400240200041086a280200417f6a0e020001120b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d112002410c6c450d112000280210102e0f0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d102002410c6c450d102000280210102e0f0b02402000410c6a280200450d00200041086a280200102e0b02402000411c6a2802002201450d00200041146a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041186a2802002202450d0f2002410c6c450d0f2000280214102e0f0b0240024002400240200041086a2d000041716a0e0400010203120b200041106a280200450d112000410c6a280200102e0f0b200041106a280200450d102000410c6a280200102e0f0b200041106a280200450d0f2000410c6a280200102e0f0b200041106a280200450d0e2000410c6a280200102e0f0b024002400240200041086a2d0000417f6a0e03000102100b200041306a28020041ffffff3f71450d0f2000412c6a280200102e0f0b2000410c6a220228020010dc022002280200102e0f0b200041106a220228020010dc022002280200102e0f0b024002400240200041086a2d0000417f6a0e030001020f0b200041306a28020041ffffff3f71450d0e2000412c6a280200102e0f0b2000410c6a220228020010dc022002280200102e0f0b200041106a220228020010dc022002280200102e0f0b02400240200041086a2d0000417f6a0e05000d0d0d010d0b200041106a28020041ffffff3f71450d0c2000410c6a280200102e0f0b2000410c6a2d00004102470d0b200041146a280200450d0b200041106a280200102e0f0b20002d00044104470d0a2000410c6a28020041ffffff3f71450d0a200041086a280200102e0f0b200041086a2802004101470d092000410c6a2d00004102470d09200041146a280200450d09200041106a280200102e0f0b02400240200041086a2d0000417d6a0e0200010a0b200041f0006a280200450d09200041ec006a280200102e0f0b200041106a280200450d082000410c6a280200102e0f0b024002400240200041086a2802000e040a0a0001020b2000410c6a2d00004102470d09200041146a280200450d09200041106a280200102e0f0b2000410c6a2d00004102470d08200041146a280200450d08200041106a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004102470d07200041386a280200450d07200041346a280200102e0f0b02400240024020002f01040e03090001020b0240200041106a2802002201450d00200041086a2802002102200141b0026c210103402002109601200241b0026a2102200141d07d6a22010d000b0b2000410c6a2802002202450d08200241b0026c450d082000280208102e0f0b200041086a220228020010dc022002280200102e0f0b0240200041106a2802002201450d00200041086a2802002102200141b0026c210103402002109601200241b0026a2102200141d07d6a22010d000b0b2000410c6a2802002202450d06200241b0026c450d062000280208102e0f0b0240024002400240024002400240200041086a2d0000417e6a0e0d00010c0c0c0c0c0c02030405060c0b0240200041146a2802002201450d002000410c6a2802002202200141c8006c6a21010340024020022d00004101470d00200241086a280200450d00200241046a280200102e0b0240200241246a2d00004101470d002002412c6a280200450d00200241286a280200102e0b200241c8006a22022001470d000b0b0240200041106a2802002202450d00200241c8006c450d00200028020c102e0b0240200041186a2d00004101470d00200041206a280200450d002000411c6a280200102e0b02402000413c6a2d00004101470d00200041c4006a280200450d00200041c0006a280200102e0b0240200041e0006a2d00004101470d00200041e8006a280200450d00200041e4006a280200102e0b024020004184016a2d00004101470d002000418c016a280200450d0020004188016a280200102e0b0240200041a8016a2d00004101470d00200041b0016a280200450d00200041ac016a280200102e0b0240200041cc016a2d00004101470d00200041d4016a280200450d00200041d0016a280200102e0b200041f0016a2d00004101470d0b200041f8016a280200450d0b200041f4016a280200102e0f0b0240200041146a2802002202450d00200241c4006c21012000410c6a28020041286a210203400240200241786a2d00004101470d002002280200450d002002417c6a280200102e0b200241c4006a2102200141bc7f6a22010d000b0b200041106a2802002202450d0a200241c4006c450d0a200028020c102e0f0b200041106a2d00004102470d09200041186a280200450d09200041146a280200102e0f0b2000410c6a2d00004102470d08200041146a280200450d08200041106a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004101470d07200041386a280200450d07200041346a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004101470d06200041386a280200450d06200041346a280200102e0f0b2000410c6a2d00004102470d05200041146a280200450d05200041106a280200102e0f0b20002d00042202417e6a4108490d040240024020020e020600010b200041286a220228020010dc022002280200102e0f0b200041c8006a220228020010dc022002280200102e0f0b0240024002400240200041086a2d00000e0407000102030b0240200041106a28020041ffffff3f71450d002000410c6a280200102e0b200041186a220228020010dc022002280200102e0f0b0240200041106a28020041ffffff3f71450d002000410c6a280200102e0b200041286a280200450d05200041246a280200102e0f0b200041306a28020041ffffff3f71450d042000412c6a280200102e0f0b200041306a28020041ffffff3f71450d032000412c6a280200102e0f0b0240024002400240200041086a2802000e09060006010606020606030b200041106a280200450d052000410c6a280200102e0f0b200041106a2d00004102470d04200041186a280200450d04200041146a280200102e0f0b200041106a2d00004102470d03200041186a280200450d03200041146a280200102e0f0b200041146a280200450d02200041106a280200102e0f0b02400240200041086a2d0000417f6a0e03000301030b200041306a280200450d022000412c6a280200102e0c020b200041306a280200450d012000412c6a280200102e0f0b200041386a109b060f0b0be5890505077f077e147f0b7e037f230041f0176b22032400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e1c0203040506070809010a0b0c010d0e0f10363534333231302f2e2d00020b20014184026a280200210420014180026a280200210520022d0001210620022d000021072002280228210220034190136a200141086a41f80110e9081a20022002280200417f6a2201360200024002400240024020070d00024020010d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b200641ff01714102470d01200341e9003602d408200341fee7c7003602d008200341e0106a20034190136a10b80620032d00e0104106470d2f200341c0066a22014200370300200341a8066a41106a22024200370300200341a8066a41086a22074200370300200342003703a806200341e8056a41a5fec600411a1081022007200341e8056a41086a290300370300200320032903e8053703a806200341a8046a41ccc5c80041101081022001200341a8046a41086a290300370300200220032903a804370300200341203602b40a2003200341a8066a3602b00a200341b00e6a200341a8066a412010ed0220032802b00e22070d02410021060c030b20010d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b200341c0136a109b06200320032800f0063602e8062003200341f3066a2800003600eb06200041186a41003a000020004200370308200020032802e8063600192000411c6a20032800eb06360000200041206a41023a0000200042013703000c640b20032802b40e21082003200341b00e6a41086a2802003602840c200320073602800c200341a0046a200341800c6a10ab0102400240024020032802a0040d0020032802a404210120034198046a200341800c6a10ab01200328029804450d010b41002106200341003602e810200342013703e0102003410a3602ac042003200341b00a6a3602a8042003200341e0106a3602e805200341d4156a4101360200200342013702c415200341909dc5003602c0152003200341a8046a3602d015200341e8056a419cebc000200341c0156a103d1a20032802e01020032802e81010ef02024020032802e410450d0020032802e010102e0b0c010b200328029c042109410121060b2008450d002007102e0b2006450d2a20012005470d2920092004470d28200341c0156a20034190136a41f80110e9081a200341e0106a200341c0156a10b90620032802e0104101460d12200341b00e6a41386a2201200341a0116a290300370300200341b00e6a41306a200341e0106a41386a290300220a370300200341b00e6a41286a200341e0106a41306a290300220b370300200341b00e6a41206a200341e0106a41286a290300220c370300200341b00e6a41186a200341e0106a41206a290300220d370300200341b00e6a41106a200341e0106a41186a290300220e370300200341b00e6a41086a200341e0106a41106a290300220f3703002003200341e0106a41086a29030022103703b00e200341c0156a41306a2207200a370300200341c0156a41286a200b370300200341c0156a41206a200c370300200341c0156a41186a200d370300200341c0156a41106a200e370300200341c0156a41086a200f370300200341c0156a41386a2001290300370300200320103703c015200341a8066a41186a4200370300200341a8066a41106a4200370300200341a8066a41086a22014200370300200342003703a806200341e8056a41a5fec600411a1081022001200341e8056a41086a290300370300200320032903e8053703a806200341a8046a4184c4c800410e108102200241086a200341a8046a41086a290300370300200220032903a804370300200341003602e810200342013703e0102007200341e0106a10b901200341e0106a200341c0156a41301074024002400240024020032d00fc150e03000102030b200341003a00a804200341e0106a200341a8046a410110740c020b200341013a00a804200341e0106a200341a8046a410110740c010b200341023a00a804200341e0106a200341a8046a410110740b200341a8066a412020032802e010220220032802e81010b201024020032802e410450d002002102e0b20032802f01521060240200341f8156a2802002202450d0020024106742101200641346a21020340024020022802002207450d00200741306c450d002002417c6a280200102e0b200241c0006a2102200141406a22010d000b0b0240200341f4156a28020041ffffff1f71450d002006102e0b20034180043b01c415200341173a00c015200341c0156a10fe01200320032800f0063602e8062003200341f3066a2800003600eb06200041186a41003a000020004200370308200020032802e8063600192000411c6a20032800eb06360000200042003703000c620b000b2001410c6a2802002108200141106a290300210a200141086a280200210120034190136a41286a2207200241286a28020036020020034190136a41206a2206200241206a29020037030020034190136a41186a2204200241186a29020037030020034190136a41106a2205200241106a29020037030020034190136a41086a2209200241086a2902003703002003200229020037039013200aa72111200a422088a7211202400240024002400240024002400240024002402001417f6a0e0a00010203040506070809000b200341c0156a41286a2007280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c0150240200341c0156a10a705450d00200320032800e0103602b00e2003200341e3106a2800003600b30e200041186a41003a000020004200370308200020032802b00e3600192000411c6a20032800b30e360000200041206a41023a0000200042013703000c6a0b200320032800e0103602b00e2003200341e3106a2800003600b30e200041186a41003a000020004200370308200020032802b00e3600192000411c6a20032800b30e360000200042003703000c690b200341c0156a41286a2007280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c015200341e0106a200341c0156a10c102024020032d00e0104101470d0002402011450d002008102e0b200320032800b00e3602800c2003200341b30e6a2800003600830c200041186a41003a000020004200370308200020032802800c3600192000411c6a20032800830c360000200041206a41023a0000200042013703000c690b02402011450d002008102e0b200320032800b00e3602800c2003200341b30e6a2800003600830c200041186a41003a000020004200370308200020032802800c3600192000411c6a20032800830c360000200042003703000c680b200341c0156a41286a2007280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c0150240200341c0156a10a705450d00200320032800b00e3602800c2003200341b30e6a2800003600830c200041186a41003a000020004200370308200020032802800c3600192000411c6a20032800830c360000200041206a41023a0000200042013703000c680b4108102c2202450d64200342083702c415200320023602c0152003200a3703e010200341c0156a200341e0106a4108107441dcc1cb00410a20032802c015220220032802c81510b201024020032802c415450d002002102e0b200320032800b00e3602800c2003200341b30e6a2800003600830c200041186a41003a000020004200370308200020032802800c3600192000411c6a20032800830c360000200042003703000c670b200341c0156a41286a2007280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c0150240200341c0156a10a705450d00410221060c660b200341b00e6a2008201210ba0620032802b00e2202450d6420032802b40e21012003200341b80e6a2802003602840c200320023602800c200341106a200341800c6a10ab010240024020032802100d0020032802840c220720032802142206490d002006417f4c0d510240024020060d00410121040c010b200610322204450d6620032802840c21070b024020072006490d00200420032802800c200610e908210920032802840c22072006490d182003200720066b3602840c200320032802800c20066a3602800c200341086a200341800c6a10ab01024020032802080d0020032802840c2207200328020c2205490d002005417f4c0d530240024020050d00410121130c010b200510322213450d6820032802840c21070b024020072005490d00201320032802800c200510e908211420032802840c22072005490d192003200720056b22073602840c200320032802800c20056a22153602800c024020074104490d002003201541046a3602800c20032007417c6a22163602840c20164104490d00201528000421172003201541086a3602800c2003200741786a22163602840c20164104490d002003200741746a3602840c20032015410c6a3602800c2003200341800c6a10ab0120032802000d002003280204221520032802840c410c6e2207200720154b1bad420c7e220a422088a70d55200aa72207417f4c0d550240024020070d00410421160c010b2007102c2216450d6a0b2007410c6ead210a02400240024002402015450d000340200341c0156a200341800c6a10a50120032d00c0154101460d0320032802840c22074104490d0320032900c115210b20032802800c2218280000211920032007417c6a3602840c2003201841046a3602800c0240200a422088a72207200aa7470d00200741016a22182007490d5b2007410174221a20182018201a491b22184104201841044b1bad420c7e220c422088a7454102742118200ca7211a0240024020070d00200341003602c0150c010b200341043602c815200320163602c01520032007410c6c3602c4150b200341e0106a201a2018200341c0156a107d20032802e810211820032802e0104101460d0320032802e4102116200a428080808070832018410c6ead84210a0b20162007410c6c6a220720193602082007200b370200200a4280808080107c210a2015417f6a22150d000b0b2016450d03200aa7211520032802840c41034b0d082015450d032015410c6c0d020c030b2018450d570c6b0b200aa72207450d012007410c6c450d010b2016102e0b2005450d010b2013102e0b2006450d010b2004102e0b2001450d652002102e0c650b02402001450d002002102e0b02400240024020064108470d000240200929000042f0deb1db968cd9b7f400510d00410021074180c2cb002101410f21020c020b02402017411f4f0d004101210741e6c1cb002101411a21020c020b2009102e02402005450d002014102e0b02402015450d002015410c6c450d002016102e0b41acc2cb0041052008201210b201200341c8156a41023a0000200341003a00c015200341c0156a10fe0102402011450d002008102e0b200320032800b00a3602d0082003200341b30a6a2800003600d308200041186a41003a000020004200370308200020032802d0083600192000411c6a20032800d308360000200042003703000c690b410021074180c2cb002101410f21022006450d010b2009102e0b02402005450d002014102e0b410321062015450d652015410c6c450d652016102e0c650b200341c0156a41286a2007280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c0150240200341c0156a10a705450d0002402011450d002008102e0b200320032800e0103602b00e2003200341e3106a2800003600b30e200041186a41003a000020004200370308200020032802b00e3600192000411c6a20032800b30e360000200041206a41023a0000200042013703000c660b41acc2cb0041052008201210b201200341c8156a41023a0000200341003a00c015200341c0156a10fe0102402011450d002008102e0b200320032800e0103602b00e2003200341e3106a2800003600b30e200041186a41003a000020004200370308200020032802b00e3600192000411c6a20032800b30e360000200042003703000c650b200341c0156a41286a2007280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c015200341c0156a10a7050d290240024020084101460d0041b1c2cb00410d10ff010c010b200341003602c815200342013703c015200320113602800c200341c0156a200341800c6a41041074200320123602800c200341c0156a200341800c6a4104107441b1c2cb00410d20032802c015220220032802c81510b20120032802c415450d002002102e0b200341cc156a2012360200200341c8156a2011360200200320083602c415200341043a00c015200341c0156a10a504200320032800e0103602b00e2003200341e3106a2800003600b30e200041186a41003a000020004200370308200020032802b00e3600192000411c6a20032800b30e360000200042003703000c640b200341c0156a41286a2007280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c0150240200341c0156a10a7050d0002402012450d002008201241186c6a21012008210203402002280200200241086a2802002002410c6a280200200241146a28020010b201200241186a22022001470d000b2012450d00201241186c21012008210203400240200241046a280200450d002002280200102e0b0240200241106a280200450d002002410c6a280200102e0b200241186a2102200141686a22010d000b0b02402011450d00201141186c450d002008102e0b200320032800e0103602b00e2003200341e3106a2800003600b30e200041186a41003a000020004200370308200020032802b00e3600192000411c6a20032800b30e360000200042003703000c640b02402012450d00201241186c21012008210203400240200241046a280200450d002002280200102e0b0240200241106a280200450d002002410c6a280200102e0b200241186a2102200141686a22010d000b0b02402011450d00201141186c450d002008102e0b200320032800e0103602b00e2003200341e3106a2800003600b30e200041186a41003a000020004200370308200020032802b00e3600192000411c6a20032800b30e360000200041206a41023a0000200042013703000c630b200341c0156a41286a2007280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c0150240200341c0156a10a7050d0002402012450d0020082012410c6c6a21012008210203402002280200200241086a28020010ff012002410c6a22022001470d000b2012450d002012410c6c21012008210203400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b02402011450d002011410c6c450d002008102e0b200320032800e0103602b00e2003200341e3106a2800003600b30e200041186a41003a000020004200370308200020032802b00e3600192000411c6a20032800b30e360000200042003703000c630b02402012450d002012410c6c21012008210203400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b02402011450d002011410c6c450d002008102e0b200320032800e0103602b00e2003200341e3106a2800003600b30e200041186a41003a000020004200370308200020032802b00e3600192000411c6a20032800b30e360000200041206a41023a0000200042013703000c620b200341c0156a41286a2007280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c0150240200341c0156a10a705450d0002402011450d002008102e0b200320032800e0103602b00e2003200341e3106a2800003600b30e200041186a41003a000020004200370308200020032802b00e3600192000411c6a20032800b30e360000200041206a41023a0000200042013703000c620b2008201210890302402011450d002008102e0b200320032800e0103602b00e2003200341e3106a2800003600b30e200041186a41003a000020004200370308200020032802b00e3600192000411c6a20032800b30e360000200042003703000c610b200341c0156a41286a2007280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c015200341e0106a200341c0156a10c102200341c8066a41086a200341e0106a41096a290000370300200341c8066a41106a200341e0106a41116a290000370300200341c8066a41186a200341e0106a41196a290000370300200320032900e1103703c806024020032d00e0104101470d0002402011450d002008102e0b200320032800ab043600f30b200320032802a8043602f00b200041186a41003a000020004200370308200020032802f00b3600192000411c6a20032800f30b360000200041206a41023a0000200042013703000c610b200341900a6a41186a2202200341c8066a41186a290300370300200341900a6a41106a2201200341c8066a41106a290300370300200341900a6a41086a2207200341c8066a41086a290300370300200320032903c8063703900a200341a8066a2008201210b001200341e0106a41186a2206200341a8066a41186a290300370300200341e0106a41106a2204200341a8066a41106a290300370300200341e0106a41086a2205200341a8066a41086a290300370300200320032903a8063703e010200341c0156a41086a41053a0000200341c0156a41096a20032903900a370000200341c0156a41116a2007290300370000200341c0156a41196a2001290300370000200341e1156a2002290300370000200341e9156a20032903e010370000200341f1156a2005290300370000200341f9156a200429030037000020034181166a2006290300370000200341003a00c015200341c0156a10fe0102402011450d002008102e0b200320032800ab043600f30b200320032802a8043602f00b200041186a41003a000020004200370308200020032802f00b3600192000411c6a20032800f30b360000200042003703000c600b20034190136a41206a200141246a28020036020020034190136a41186a2001411c6a29020037030020034190136a41106a200141146a29020037030020034190136a41086a2001410c6a2902003703002003200129020437039013200341c0156a41286a200241286a280200360200200341c0156a41206a200241206a290200370300200341c0156a41186a200241186a290200370300200341c0156a41106a200241106a290200370300200341c0156a41086a200241086a290200370300200320022902003703c015200020034190136a200341c0156a10d5040c5f0b200141346a2802002115200141306a28020021122001412c6a2802002118200141286a2802002117200141206a290200210a2001411c6a280200211a200141186a2802002106200141146a2802002107200141106a28020021162001410c6a280200211b200141086a2802002104200341800c6a200141386a41e40010e9081a200141a4016a2802002114200141a0016a28020021132001419c016a2802002119200341e0106a200141a8016a41800110e9081a200341d0086a41286a2201200241286a280200360200200341d0086a41206a2205200241206a290200370300200341d0086a41186a2209200241186a290200370300200341d0086a41106a2208200241106a290200370300200341d0086a41086a2211200241086a290200370300200320022902003703d008024002400240024020040e0400010203000b200341c0156a41146a4101360200200342013702c4152003419cc3cb003602c015200341043602ac04200341a4a7c7003602a8042003200341a8046a3602d015200341c0156a4190afc4001044000b200341b00e6a200341800c6a41e40010e9081a20034190136a200341e0106a41800110e9081a200341c0156a41286a2001280200360200200341c0156a41206a2005290300370300200341c0156a41186a2009290300370300200341c0156a41106a2008290300370300200341c0156a41086a2011290300370300200320032903d0083703c015200341f0066a200341c0156a10c102200341a8066a41086a200341f9066a2202290000370300200341a8066a41106a20034181076a2201290000370300200341a8066a41186a20034189076a2204290000370300200320032900f1063703a80602400240024020032d00f0064101470d00200341d00a6a41023a0000200341c80a6a41003a0000200342003703b80a200342013703b00a02402006450d002006410c6c21012016210203400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b02402007450d002007410c6c450d002016102e0b02402015450d00201541246c21012018210203400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b02402012450d00201241246c450d002018102e0b02402014450d00201441246c21012019210203400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b02402013450d00201341246c450d002019102e0b200341b80a6a210241002106410221040c010b200341c8066a41186a200341a8066a41186a290300220b370300200341c8066a41106a200341a8066a41106a290300220c370300200341c8066a41086a200341a8066a41086a290300220d370300200320032903a806220e3703c8062004200b3700002001200c3700002002200d3700002003200e3700f106200341013a00f006200341d4156a2015360200200341c0156a41106a2012360200200341c0156a410c6a2018360200200320173602c8152003200a3703c015200341c0156a41186a200341b00e6a41e40010e9081a200341c4166a2014360200200341c0156a4180016a2013360200200341bc166a2019360200200341c8166a20034190136a41800110e9081a200341a8046a410c6a2006360200200341a8046a41086a20073602002003201a3602b804200320163602ac042003201b3602a804200341b00a6a200341f0066a200341c0156a200341a8046a10990420032903b00a4201520d01200341b00a6a41086a2102200341d00a6a2d0000210420032d00c80a21060b200320022800113602b0082003200241146a2800003600b30820022f0019210120022d001b2107200229001c210a2002280224210220032903b80a210b20032903c00a210c200041186a20063a0000200041106a200c3703002000200b370308200020032802b0083600192000411c6a20032800b3083600002000412c6a20023602002000200a370024200020073a0023200020013b0021200041206a20043a0000200042013703000c610b200320032800c90a3602b0082003200341b00a6a411c6a2800003600b30820032903b80a210a20032903c00a210b200041186a20032d00c80a3a0000200041106a200b3703002000200a370308200020032802b0083600192000411c6a20032800b308360000200042003703000c600b200341b00e6a200341800c6a41e40010e9081a20034190136a200341e0106a41800110e9081a200341c0156a41286a2001280200360200200341c0156a41206a2005290300370300200341c0156a41186a2009290300370300200341c0156a41106a2008290300370300200341c0156a41086a2011290300370300200320032903d0083703c015024002400240200341c0156a10bb06450d00200341d00a6a41023a0000200341c80a6a41003a0000200342003703b80a200342013703b00a02402006450d002006410c6c21012016210203400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b02402007450d002007410c6c450d002016102e0b02402015450d00201541246c21012018210203400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b02402012450d00201241246c450d002018102e0b02402014450d00201441246c21012019210203400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b02402013450d00201341246c450d002019102e0b200341b80a6a210241002106410221040c010b200341c0156a10e20420034189076a200341c0156a41186a220229030037000020034181076a200341c0156a41106a2201290300370000200341f9066a200341c0156a41086a290300370000200341013a00f006200320032903c0153700f106200341d4156a201536020020012012360200200341c0156a410c6a2018360200200320173602c8152003200a3703c0152002200341b00e6a41e40010e9081a200341c4166a2014360200200341c0156a4180016a2013360200200341bc166a2019360200200341c8166a20034190136a41800110e9081a200341a8046a410c6a2006360200200341a8046a41086a20073602002003201a3602b804200320163602ac042003201b3602a804200341b00a6a200341f0066a200341c0156a200341a8046a10990420032903b00a4201520d01200341b00a6a41086a2102200341d00a6a2d0000210420032d00c80a21060b200320022800113602e8052003200241146a2800003600eb0520022f0019210120022d001b2107200229001c210a2002280224210220032903b80a210b20032903c00a210c200041186a20063a0000200041106a200c3703002000200b370308200020032802e8053600192000411c6a20032800eb053600002000412c6a20023602002000200a370024200020073a0023200020013b0021200041206a20043a0000200042013703000c600b200320032800c90a3602e8052003200341b00a6a411c6a2800003600eb0520032903b80a210a20032903c00a210b200041186a20032d00c80a3a0000200041106a200b3703002000200a370308200020032802e8053600192000411c6a20032800eb05360000200042003703000c5f0b200341c0156a41286a2001280200360200200341c0156a41206a2005290300370300200341c0156a41186a2009290300370300200341c0156a41106a2008290300370300200341c0156a41086a2011290300370300200320032903d0083703c0150240200341c0156a10a705450d00200320032800f3063600eb06200320032802f0063602e806200041186a41003a000020004200370308200020032802e8063600192000411c6a20032800eb06360000200041206a41023a0000200042013703000c5f0b2003200a3703d0152003201a3602cc15200320063602c815200320073602c415200320163602c015200341c0156a10ed04200320032802f0063602e806200320032800f3063600eb06200041186a41003a000020004200370308200020032802e8063600192000411c6a20032800eb06360000200042003703000c5e0b200141086a290300210a200341c0156a41286a200241286a280200360200200341c0156a41206a200241206a290200370300200341c0156a41186a200241186a290200370300200341c0156a41106a200241106a290200370300200341c0156a41086a200241086a290200370300200320022902003703c01502400240200341c0156a10bb060d00200341a8066a41186a22024200370300200341a8066a41106a22014200370300200341a8066a41086a22074200370300200342003703a806200341e8056a41e8fcc60041091081022007200341e8056a41086a290300370300200320032903e8053703a806200341a8046a41d48ec90041091081022002200341a8046a41086a290300370300200120032903a804370300200341a8066a4120108f020d23200341c0066a22074200370300200341b8066a22064200370300200341a8066a41086a22024200370300200342003703a806200341e8056a41e8fcc60041091081022002200341e8056a41086a2204290300370300200320032903e8053703a806200341a8046a41b08ec9004103108102200141086a2205200341a8046a41086a2209290300370300200120032903a804370300200341286a200341a8066a1085032003280228450d012003290330220b500d01200b42b8177c200a580d0141f4d6c80041ce0041c4d7c8001039000b200320032800f3063600eb06200320032802f0063602e806200041186a41003a000020004200370308200020032802e8063600192000411c6a20032800eb06360000200041206a41023a0000200042013703000c5e0b200742003703002006420037030020024200370300200342003703a806200341e8056a41e8fcc600410910810220022004290300370300200320032903e8053703a806200341a8046a41b08ec900410310810220052009290300370300200120032903a8043703002003200a3703c015200341a8066a4120200341c0156a410810b201200742003703002006420037030020024200370300200342003703a806200341e8056a41e8fcc600410910810220022004290300370300200320032903e8053703a806200341a8046a41d48ec900410910810220052009290300370300200120032903a804370300200341013a00a804200341a8066a4120200341a8046a410110b201200742003703002006420037030020024200370300200342003703a806200341e8056a41a8f8c600410410810220022004290300370300200320032903e8053703a806200341a8046a41c98bc500410b10810220052009290300370300200120032903a804370300200341186a200341a8066a1085032003290320420020032802181b200a42f02e80520d20200320032800f3063600eb06200320032802f0063602e806200041186a41003a000020004200370308200020032802e8063600192000411c6a20032800eb06360000200042003703000c5d0b200341f0066a41086a22082001411d6a290000370300200320012900153703f0062001410d6a290000210b200141286a2802002111200141056a290000210a20012d0004210720012d0025211220034190136a41286a2201200241286a28020036020020034190136a41206a2206200241206a29020037030020034190136a41186a2204200241186a29020037030020034190136a41106a2205200241106a29020037030020034190136a41086a2209200241086a2902003703002003200229020037039013200a421888a7210202400240024002400240024020070e06000102030405000b200341d4156a4101360200200342013702c4152003419cc3cb003602c015200341043602ac0420034194c3cb003602a8042003200341a8046a3602d015200341c0156a41e89bc4001044000b200341c0156a41286a2001280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c015200341e0106a200341c0156a10c102200341900a6a41086a200341e9106a290000370300200341900a6a41106a200341f1106a290000370300200341900a6a41186a200341f9106a290000370300200320032900e1103703900a02400240024020032d00e0104101460d00200341b00e6a41186a200341900a6a41186a290300370300200341b00e6a41106a200341900a6a41106a290300370300200341b00e6a41086a200341900a6a41086a290300370300200320032903900a3703b00e200341800c6a200210ff03200341c0156a20032802800c220420032802880c220610b205200341a8066a41086a2205200341c0156a41186a290300370300200341a8066a41106a2209200341e0156a290300370300200341a8066a41186a2208200341e8156a290300370300200320032903d0153703a806200320032800f1153602a8042003200341f4156a2800003600ab04200341c0156a41086a290300210a20032903c015210b024020032d00f015220741024622010d00200341c8066a41186a2008290300370300200341c8066a41106a2009290300370300200341c8066a41086a2005290300370300200320032903a8063703c806200320032802a8043602f00b200320032800ab043600f30b0b0240024020010d00200341e0106a410310bc060c010b200341c8066a41186a200341b00e6a41186a290300370300200341c8066a41106a200341b00e6a41106a290300370300200341c8066a41086a200341b00e6a41086a290300370300200320032903b00e3703c8064200210a4280d0dbc3f402210b200341e0106a200341b00e6a4280d0dbc3f402420010c302410021070b20032d00e01022014106470d01200341f4156a20032800f30b360000200341c0156a41186a200341c8066a41086a290300370300200341e0156a200341c8066a41106a290300370300200341e8156a2201200341c8066a41186a2903003703002003200b3703c015200320032903c8063703d015200320073a00f015200320032802f00b3600f1152003200a3703c81520042006200341c0156a10c605024020032802840c450d002004102e0b20012002360200200341cd156a200341b00e6a41086a290300370000200341d5156a200341b00e6a41106a290300370000200341dd156a200341b00e6a41186a290300370000200341003a00c415200341023a00c015200320032903b00e3700c515200341c0156a10fe01200041186a41003a000020004200370308200020032800e8053600192000411c6a200341eb056a280000360000200042003703000c630b410221010c010b20032902e410210a20032d00e310210620032d00e210210720032d00e110210220032802840c450d002004102e0b2000200a370024200020063a0023200020073a0022200020023a002120004200370308200041206a20013a0000200041186a41003a0000200042013703000c600b200341800c6a41186a20082903003703002003200b3703880c2003200a3703800c200320032903f0063703900c200341c0156a41286a2001280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c015200341e0106a200341c0156a10c102200341a8066a41086a200341e9106a290000370300200341a8066a41106a200341f1106a290000370300200341a8066a41186a200341f9106a290000370300200320032900e1103703a80620032d00e0104101460d21200341b00e6a41186a200341a8066a41186a290300370300200341b00e6a41106a200341a8066a41106a290300370300200341b00e6a41086a200341a8066a41086a290300370300200320032903a8063703b00e0240200341b00e6a200341800c6a412010ec08450d00200341900a6a201110ff03200341c0156a20032802900a220120032802980a220710b205200341b00a6a41086a200341e8156a290300370300200320032903e0153703b00a200320032800f1153602a8042003200341f4156a2800003600ab04200341c0156a41186a290300210a20032903d015210b20032903c815210c20032903c015210d024020032d00f015220641024622020d00200341d0086a41086a200341b00a6a41086a290300370300200320032903b00a3703d008200320032802a8043602f00b200320032800ab043600f30b0b200341a8046a41086a2204200341d0086a41086a290300370300200320032903d0083703a80420020d21200341e8056a41086a2004290300220e370300200320032903a804220f3703e805200341d8156a200e3703002003200a3703c8152003200b3703c0152003200f3703d01502402006410171450d00200341e0106a410510bc060c580b0240200341c0156a200341b00e6a412010ec08450d00200341e0106a410210bc060c580b200341e0106a200341b00e6a200341800c6a200d200c4101108904200341e0106a41086a290300210e024020032802e0104101460d00200341f0106a290300210a200341d0086a41086a200341980c6a290300370300200320032903900c3703d008200341063a00e0104200200c200a7d200d200e54ad7d220a200d200e7d220b200d56200a200c56200a200c511b22021b210c4200200b20021b210d20032903880c210a20032903800c210b41002102410021060c590b20032802e41021022003200e3702e410200320023602e0100c570b200341b0086a410410bc0620032d00b0084106460d590c5b0b200341c0156a41286a2001280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c015200341e0106a200341c0156a10c102200341a8066a41086a200341e9106a290000370300200341a8066a41106a200341f1106a290000370300200341a8066a41186a200341f9106a290000370300200320032900e1103703a80620032d00e0104101460d1c200341b00e6a41186a200341a8066a41186a290300370300200341b00e6a41106a200341a8066a41106a290300370300200341b00e6a41086a200341a8066a41086a290300370300200320032903a8063703b00e200341800c6a200210ff03200341c0156a20032802800c220520032802880c220710b205200341b00a6a41086a2206200341e8156a290300370300200320032903e0153703b00a200341c0156a41186a290300210a20032903d015210b20032903c815210c20032903c015210d024020032d00f015220441024622010d00200341d0086a41086a2006290300370300200320032903b00a3703d0080b200341a8046a41086a200341d0086a41086a290300370300200320032903d0083703a80420010d1e200341e8056a41086a200341a8046a41086a290300220e370300200320032903a804220f3703e805200341d8156a200e3703002003200a3703c8152003200b3703c0152003200f3703d01502402004410171450d00200341e0106a410510bc060c510b200341c0156a200341b00e6a412010ec08450d1d200341e0106a410210bc060c500b200341d0086a41086a2008290300370300200320032903f0063703d008200341c0156a41286a2001280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c015200341c0156a10a7050d1a200341e0106a201110ff03200341c0156a20032802e010220220032802e810220110b205200341e8056a41086a2206200341e8156a290300370300200320032903e0153703e805200320032800f1153602a8042003200341f4156a2800003600ab04200341d8156a290300210c20032903d015210d20032903c815210e20032903c015210f024020032d00f01541024622070d00200341b00a6a41086a2006290300370300200320032903e8053703b00a200320032802a8043602f00b200320032800ab043600f30b0b200341a8046a41086a200341b00a6a41086a290300370300200320032903b00a3703a804024020070d00200341d8156a200341b0046a290300370300200320032903a8043703d0152003200d3703c0152003200c3703c815200341c8006a200341c0156a200f200e10fb010b200341c0156a41186a200b370300200341e0156a20032903d008370300200341f4156a20032800f30b360000200341e8156a2207200341d8086a22062903003703002003200a3703d015200342003703c815200342003703c015200320123a00f015200320032802f00b3600f11520022001200341c0156a10c605024020032802e410450d002002102e0b200341cd156a200b370000200341d5156a20032903d00837000020072011360200200341dd156a20062903003700002003200a3700c515200341003a00c415200341023a00c015200341c0156a10fe01200041186a41003a000020004200370308200020032800e8063600192000411c6a200341eb066a280000360000200042003703000c5d0b200341c0156a41286a2001280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c015200341e0106a200341c0156a10c102200341a8066a41086a200341e9106a290000370300200341a8066a41106a200341f1106a290000370300200341a8066a41186a200341f9106a290000370300200320032900e1103703a80620032d00e0104101460d16200341b00e6a41186a200341a8066a41186a290300370300200341b00e6a41106a200341a8066a41106a290300370300200341b00e6a41086a200341a8066a41086a290300370300200320032903a8063703b00e200341900a6a200210ff03200341c0156a20032802900a220520032802980a220710b205200341b00a6a41086a2206200341e8156a290300370300200320032903e0153703b00a200320032800f1153602a8042003200341f4156a2800003600ab04200341c0156a41186a290300210a20032903d015210b20032903c815210c20032903c015210d024020032d00f015220441024622010d00200341d0086a41086a2006290300370300200320032903b00a3703d008200320032802a8043602f00b200320032800ab043600f30b0b200341a8046a41086a200341d0086a41086a290300370300200320032903d0083703a80420010d18200341e8056a41086a200341a8046a41086a290300220e370300200320032903a804220f3703e805200341f8106a200e3703002003200a3703e8102003200b3703e0102003200f3703f01002402004410171450d00200341800c6a410510bc060c4a0b200341e0106a200341b00e6a412010ec08450d17200341800c6a410210bc060c490b20034194066a41026a22062001410f6a2d00003a0000200341d0086a41086a2204200141206a290200370300200341d0086a41106a2205200141286a290200370300200320012f000d3b0194062003200141186a2902003703d008200141c8006a290300210e200141c0006a290300210d2002411a6a290100210c200241196a2d00002113200241186a2d00002115200241166a2f01002114200241156a2d00002116200241146a2d00002118200241126a2f01002119200241116a2d0000211a200241106a2d000021172002410e6a2f0100211b2002410d6a2d0000211c2002410c6a2d0000211d2002410a6a2f0100211e200241096a2d0000211f200241086a2d00002120200241066a2f01002121200241056a2d00002122200241046a2d00002123200241026a2f01002124200141146a2802002108200141106a28020021112001410c6a2d00002109200141386a290300210b200141306a290300210a2002280228210720022d0001211220022d0000210202400240024002400240200141086a2802000e050001020304000b200341c0156a41146a4101360200200342013702c4152003419cc3cb003602c015200341043602ac04200341a4a7c7003602a8042003200341a8046a3602d015200341c0156a4194a7c7001044000b200341b0086a41026a20062d00003a0000200341b00e6a41086a2004290300370300200341b00e6a41106a2005290300370300200320032f0194063b01b008200320032903d0083703b00e20072007280200417f6a22013602000240024002400240024002400240200241ff01710d00024020010d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b41012102201241ff01714101470d012003201f3a00cf06200320203a00ce06200320213b01cc06200320223a00cb06200320233a00ca06200320243b01c8062003201a3a00d706200320173a00d6062003201b3b01d4062003201c3a00d3062003201d3a00d2062003201e3b01d006200320133a00df06200320153a00de06200320143b01dc06200320163a00db06200320183a00da06200320193b01d8062003200c3703e006200341900a6a41186a2201200c370300200341900a6a41106a220720032903d806370300200341900a6a41086a220620032903d006370300200320032903c8063703900a20034190136a41186a200129030037030020034190136a41106a200729030037030020034190136a41086a2006290300370300200320032903900a37039013200341a8046a41026a2201200341b0086a41026a2d00003a0000200320032f01b0083b01a804200341e0106a41086a2207200341b00e6a41086a290300370300200341e0106a41106a200341b00e6a41106a290300370300200320032903b00e3703e01002400240024020090e03000201020b200341e8056a41026a20012d00003a0000200341800c6a41086a2007290300370300200341800c6a410d6a200341e0106a410d6a290000370000200320032f01a8043b01e805200320032903e0103703800c410021020c010b2008450d002011102e0b200341bb066a200341800c6a41086a290300370000200341a8066a41186a2003418d0c6a290000370000200320032f01e8053b01a806200320083600af06200320113600ab06200320032903800c3700b3062003200341e8056a41026a2d00003a00aa0620020d03200341c0156a41186a200341a8066a41186a290300370300200341c0156a41106a200341a8066a41106a290300370300200341c0156a41086a200341a8066a41086a290300370300200320032903a8063703c015200341e0106a20034190136a200341c0156a200a200b410110ca0220032d00e01022024106460d0620032902e410210a20032d00e310210120032d00e210210720032d00e11021060c050b024020010d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b200341900a6a41186a200341c8066a41186a290300370300200341900a6a41106a200341c8066a41106a290300370300200341900a6a41086a200341c8066a41086a290300370300200320032903c8063703900a0c010b200341900a6a41186a200341c8066a41186a290300370300200341900a6a41106a200341c8066a41106a290300370300200341900a6a41086a200341c8066a41086a290300370300200320032903c8063703900a0b4102210220094102470d012008450d012011102e0c010b410121020b0b200320032800b00a3602f0062003200341b30a6a2800003600f306200041186a41003a000020004200370308200020032802f0063600192000411c6a20032800f306360000200041246a200a370200200020013a0023200020073a0022200020063a0021200041206a20023a0000200042013703000c5f0b200320032800b00a3602f0062003200341b30a6a2800003600f306200041186a41003a000020004200370308200020032802f0063600192000411c6a20032800f306360000200042003703000c5e0b200341e8066a41026a20062d00003a0000200341b00a6a41086a2004290300370300200341b00a6a41106a200529030037030020072007280200417f6a2201360200200320032f0194063b01e806200320032903d0083703b00a02400240024002400240200241ff01710d00024020010d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b201241ff01710d01200341e0106a41026a2201200341e8066a41026a2d00003a0000200341c0156a41086a2207200341b00a6a41086a290300370300200341c0156a41106a200341b00a6a41106a290300370300200320032f01e8063b01e010200320032903b00a3703c0154101210220090e03020403040b20010d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b4102210220094102470d4c2008450d4c2011102e0c4c0b200341b00e6a41026a20012d00003a000020034190136a41086a200729030037030020034190136a410d6a200341c0156a410d6a290000370000200320032f01e0103b01b00e200320032903c01537039013410021020c010b2008450d002011102e0b200341bb066a20034190136a41086a290300370000200341a8066a41186a22012003419d136a290000370000200320032f01b00e3b01a806200320083600af06200320113600ab0620032003290390133700b3062003200341b00e6a41026a2d00003a00aa0620020d16200341800c6a41186a2001290300370300200341800c6a41106a200341a8066a41106a290300370300200341800c6a41086a200341a8066a41086a290300370300200320032903a8063703800c20034190136a200341800c6a10c802200341c0156a200328029013220720032802981310c902200341c0156a41386a2903002125200341c0156a41306a2903002126200341c0156a41286a2903002127200341c0156a41206a2903002128200341c0156a41186a2903002129200341c0156a41106a290300210f20034180166a290300212a20032903c815211020032903c015210c200341a8046a41086a20034190166a290300370300200320034188166a2903003703a804200e200b7c200d200a7c222b200d54ad7c212c02400240200c4201510d00200341e0106a41386a4200370300200341e0106a41306a4200370300200341e0106a41286a4200370300200341e0106a41206a4200370300200341f8106a4200370300200341e0106a41106a4200370300200341e0106a41086a4200370300200342003703e0104200212a42002128420021274200212642002125420021104200210f420021294200212d4200212e4200210c4200212f0c010b200341e0106a41206a2027370300200341e0106a41286a2026370300200341e0106a41106a2029370300200341e0106a41306a2025370300200320283703f810200320103703e0102003202a370398112003200f3703e8102027212d2026212e2010210c200f212f0b202c502102202b4280c8afa0255421010240200328029413450d002007102e0b2001410020021b210202400240200c202f844200520d00202d20032903f01084202e200341f8106a29030084844200520d0020032903901120034198116a2903008450450d004200212b410021010c010b4201212b410121010b4200200b20021b210b4200200a20021b210a0240202b4201510d004200212742002126420021254200212a4200212942002128420021104200210f0b4200200e20021b210c4200200d20021b210d02400240200a201058200b200f58200b200f5122021b0d002003200a20107d3703c0152003200b200f7d200a201054ad7d3703c8152003200341c0156a3602f006200341f0066a10ce020c010b200a20105a200b200f5a20021b0d0020032010200a7d3703c0152003200f200b7d2010200a54ad7d3703c8152003200341c0156a3602f006200341f0066a10cc020b02400240200d202958200c202858200c20285122021b0d002003200d20297d3703c0152003200c20287d200d202954ad7d3703c8152003200341c0156a3602f006200341f0066a10ce020c010b200d20295a200c20285a20021b0d0020032029200d7d3703c01520032028200c7d2029200d54ad7d3703c8152003200341c0156a3602f006200341f0066a10cc020b200341e8156a22072026370300200341f0156a22062025370300200320273703e0152003200c3703d8152003200d3703d0152003200a3703c0152003200b3703c8154200210f42012110202b420152ad212802400240427f200a200d7c220e200e200a542202200b200c7c2002ad7c220e200b54200e200b511b22021b222942ffc7afa02556427f200e20021b220e420052200e501b0d00200a200d84200b200c8484220f50210242002110200f420052ad210f0c010b2006290300212d2007290300212f200341e0156a290300212c200341d0156a290300212520032903d815212b20032903c815212720032903c0152126410121020b200341d8136a200c370300200341d0136a200d370300200341c8136a200b370300200341b8136a200e370300200341b0136a22072029370300200341a0136a200b3703002003200a3703c0132003200a370398132003200f3703a8132003202837039013024020012010420152720d002003200341800c6a3602c015200341800c6a200341c0156a10bd060c480b02400240200141017322012010420151720d002003200341800c6a3602c015200341800c6a200341c0156a10be0641ff017122014103460d49024020010e03024a00020b024020020d00200320073602c015200341c0156a10cc020b410421020c4b0b2010420152200171450d480b200a2126200b21100c480b200141e0006a290300210c200141d8006a290300210f200141d0006a2903002110200ba72113200aa72101200a422088a72115200341f0066a41026a20062d00003a0000200341e0106a41086a2004290300370300200341e0106a41106a200529030037030020072007280200417f6a2206360200200320032f0194063b01f006200320032903d0083703e0100240024002400240024002400240200241ff01710d00024020060d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b201241ff01710d01200341800c6a41026a2207200341f0066a41026a2d00003a0000200341c0156a41086a2206200341e0106a41086a290300370300200341c0156a41106a200341e0106a41106a290300370300200320032f01f0063b01800c200320032903e0103703c0154101210220090e03020403040b20060d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b410221020240200141ff01714102470d002013450d002015102e0b20094102470d032008450d032011102e0c030b200341b00a6a41026a20072d00003a0000200341b00e6a41086a2006290300370300200341b00e6a410d6a200341c0156a410d6a290000370000200320032f01800c3b01b00a200320032903c0153703b00e410021020c010b2008450d002011102e0b200341db066a200341b00e6a41086a290300370000200341c8066a41186a2207200341bd0e6a290000370000200320032f01b00a3b01c806200320083600cf06200320113600cb06200320032903b00e3700d3062003200341b00a6a41026a2d00003a00ca060240024020020d00200b422088a7210420034190136a41186a200729030037030020034190136a41106a200341c8066a41106a29030037030020034190136a41086a200341c8066a41086a290300370300200320032903c806370390132001410876210241012106024002400240200141ff01710e03000201020b2010a72107410021060c010b02402013450d002015102e0b0b200341bf066a200e3700002003200d3700b706200320073a00c706200320043600b306200320133600af06200320153600ab06200320023b01a806200320024110763a00aa0620060d01200341c0156a41186a200341a8066a41186a290300370300200341c0156a41106a200341a8066a41106a290300370300200341c0156a41086a200341a8066a41086a290300370300200320032903a8063703c015200341b00e6a20034190136a200341c0156a200f200c410110ca02024020032d00b00e22024106460d0020032902b40e210a20032d00b30e210120032d00b20e210720032d00b10e21060c040b200320032802e8053602b008200320032800eb053600b308200041186a41003a000020004200370308200020032802b0083600192000411c6a20032800b308360000200042003703000c600b41012102200141ff01714102470d012013450d012015102e0c010b410121020b0b200320032802e8053602b008200320032800eb053600b308200041186a41003a000020004200370308200020032802b0083600192000411c6a20032800b308360000200041246a200a370200200020013a0023200020073a0022200020063a0021200041206a20023a0000200042013703000c5c0b200341e8056a41026a20062d00003a0000200341b00e6a41086a2004290300370300200341b00e6a41106a2005290300370300200320032f0194063b01e805200320032903d0083703b00e20072007280200417f6a22013602000240024002400240024002400240200241ff01710d00024020010d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b41012102201241ff01714101470d012003201f3a00cf06200320203a00ce06200320213b01cc06200320223a00cb06200320233a00ca06200320243b01c8062003201a3a00d706200320173a00d6062003201b3b01d4062003201c3a00d3062003201d3a00d2062003201e3b01d006200320133a00df06200320153a00de06200320143b01dc06200320163a00db06200320183a00da06200320193b01d8062003200c3703e006200341900a6a41186a2201200c370300200341900a6a41106a220720032903d806370300200341900a6a41086a220620032903d006370300200320032903c8063703900a20034190136a41186a200129030037030020034190136a41106a200729030037030020034190136a41086a2006290300370300200320032903900a37039013200341b00a6a41026a2201200341e8056a41026a2d00003a0000200320032f01e8053b01b00a200341e0106a41086a2207200341b00e6a41086a290300370300200341e0106a41106a200341b00e6a41106a290300370300200320032903b00e3703e01002400240024020090e03000201020b200341a8046a41026a20012d00003a0000200341800c6a41086a2007290300370300200341800c6a410d6a200341e0106a410d6a290000370000200320032f01b00a3b01a804200320032903e0103703800c410021020c010b2008450d002011102e0b200341bb066a200341800c6a41086a290300370000200341a8066a41186a2003418d0c6a290000370000200320032f01a8043b01a806200320083600af06200320113600ab06200320032903800c3700b3062003200341a8046a41026a2d00003a00aa0620020d03200341c0156a41186a200341a8066a41186a290300370300200341c0156a41106a200341a8066a41106a290300370300200341c0156a41086a200341a8066a41086a290300370300200320032903a8063703c015200341e0106a20034190136a200341c0156a200a200b410010ca0220032d00e01022024106460d0620032902e410210a20032d00e310210120032d00e210210720032d00e11021060c050b024020010d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b200341900a6a41186a200341c8066a41186a290300370300200341900a6a41106a200341c8066a41106a290300370300200341900a6a41086a200341c8066a41086a290300370300200320032903c8063703900a0c010b200341900a6a41186a200341c8066a41186a290300370300200341900a6a41106a200341c8066a41106a290300370300200341900a6a41086a200341c8066a41086a290300370300200320032903c8063703900a0b4102210220094102470d012008450d012011102e0c010b410121020b0b200320032802f0063602e806200320032800f3063600eb06200041186a41003a000020004200370308200020032802e8063600192000411c6a20032800eb063600002000200a370024200020013a0023200020073a0022200020063a0021200041206a20023a0000200042013703000c5c0b200320032802f0063602e806200320032800f3063600eb06200041186a41003a000020004200370308200020032802e8063600192000411c6a20032800eb06360000200042003703000c5b0b2001410c6a2802002105200141086a280200211120012802042104200341c0156a41286a200241286a280200360200200341c0156a41206a200241206a290200370300200341c0156a41186a200241186a290200370300200341c0156a41106a200241106a290200370300200341c0156a41086a200241086a290200370300200320022902003703c0150240024002400240200341c0156a10bb060d0002402005410a4d0d00200341f00b6a410310bf060c030b200341900a6a41186a22014200370300200341900a6a41106a22174200370300200341900a6a41086a22024200370300200342003703900a200341d0086a4190dac800410a1081022002200341d0086a41086a2206290300370300200320032903d0083703900a200341b00a6a41d097c900410c1081022001200341b00a6a41086a2209290300370300201720032903b00a3703000240200341900a6a108603220741ff01714102460d002007410171450d00200341f00b6a410210bf060c020b200142003703002017420037030020024200370300200342003703900a200341d0086a4190dac800410a10810220022006290300370300200320032903d0083703900a200341b00a6a41d097c900410c108102201741086a2009290300370200201720032903b00a370200200341013a00a804200341900a6a4120200341a8046a410110b201200341c8066a41186a22024200370300200341c8066a41106a221b4200370300200341c8066a41086a22014200370300200342003703c806200341e8056a41d9fcc60041061081022001200341e8056a41086a290300370300200320032903e8053703c806200341a8046a4180f4cb0041061081022002200341a8046a41086a290300370300201b20032903a80437030020034180016a200341c8066a4120108e0220032802800121012003280284012107200341b0086a10e10402400240024020032802b808220220032802b4082219470d00200241016a22062002490d4a200241017422092006200920064b1b22064104200641044b1bad42c4007e220a422088a7454102742106200aa721090240024020020d00200341003602c0150c010b200341c8156a4104360200200320032802b0083602c0152003200241c4006c3602c4150b20034190136a20092006200341c0156a107d20034198136a28020021062003280290134101460d0120032003280294133602b0082003200641c4006e22193602b4080b20032802b008221c200241c4006c6a22062007410020011b360204200641003a00002003200241016a22153602b8082004200541f0006c22026a212420050d01200421070c460b20060d5c0c480b200441f4006a2106200241907f6a2109200341e0106a4101722114200341c0156a41106a2130200341c0156a41086a2131200341c8066a41186a21162003419f0c6a21322004210703402007280204211a20072802002112200341c0156a200741086a41e80010e9081a200741f0006a2107201a450d4520034190136a200341c0156a41e80010e9081a2003201a3602c415200320123602c015203120034190136a41e80010e9081a20164200370300200341c8066a41106a22184200370300200341c8066a41086a22134200370300200342003703c806200341e8056a41d9fcc60041061081022013200341e8056a41086a290300370300200320032903e8053703c806200341a8046a4180f4cb004106108102201b41086a200341a8046a41086a290300370300201b20032903a804370300200341f8006a200341c8066a4120108e0220032802782102200328027c2101200341800c6a200341c0156a109a04024020120d00200341e0106a410410bf0620033500e11020033300e51020033100e7104210868442208684210a200341e8106a28020021020c450b024020122001410020021b22024d0d00200341e0106a410510bf0620033500e11020033300e51020033100e7104210868442208684210a200341e8106a28020021020c450b200341b00a6a2012417f6a108c02200341e0106a20032802b00a220820032802b80a108d0220032d00e01021012016201441186a221d2900003703002018201441106a221e2900003703002013201441086a221f290000370300200320142900003703c8060240024020014101460d00200341b00e6a41186a4200370300200341b00e6a41106a4200370300200341b00e6a41086a4200370300200342003703b00e0c010b200341b00e6a41186a2016290300370300200341b00e6a41106a2018290300370300200341b00e6a41086a2013290300370300200320032903c8063703b00e0b024020032802b40a450d002008102e0b0240200341b00e6a2030412010ec08450d00200341e0106a410110bf0620033500e11020033300e51020033100e7104210868442208684210a200341e8106a28020021020c450b0240201220024f0d00200341e0106a410710bf0620033500e11020033300e51020033100e7104210868442208684210a200341e8106a28020021020c450b024002402015450d00201541c4006c2101201c21020340024020022d00004101470d0041012108200241016a200341800c6a412010ec08450d030b200241c4006a2102200141bc7f6a22010d000b0b410021080b200341b00a6a2012108c02200341e0106a20032802b00a220120032802b80a108d0220032d00e01021022016201d2900003703002018201e2900003703002013201f290000370300200320142900003703c8060240024020024101460d00200341b00e6a41186a4200370300200341b00e6a41106a4200370300200341b00e6a41086a4200370300200342003703b00e0c010b200341b00e6a41186a2016290300370300200341b00e6a41106a2018290300370300200341b00e6a41086a2013290300370300200320032903c8063703b00e0b024020032802b40a450d002001102e0b02402008417f73200341b00e6a200341800c6a412010ec08410047710d00200341e0106a410610bf0620033500e11020033300e51020033100e7104210868442208684210a200341e8106a28020021020c450b2032310000210a20032900930c210b200328008f0c2101200328008b0c210820032800870c211220032800830c211a20032f00810c211d200335009b0c210c200341800c6a200341c0156a109a04200341b00e6a41186a221e4200370300200341b00e6a41106a221f4200370300200341b00e6a41086a22204200370300200342003703b00e200341a8066a41186a22214200370300200341a8066a41106a22224200370300200341a8066a41086a22234200370300200342003703a80641c800102c2202450d5c200341c8066a10e2042002410236022020024101360244200241186a2016290300370200200241106a2018290300370200200241086a2013290300370200200220032903c806370200200220032903a8063702242002412c6a2023290300370200200241346a20222903003702002002413c6a2021290300370200200320023602e01020034282808080203702e410200341e0106a10e304200341e0106a41186a201e290300370300200341e0106a41106a201f290300370300200341e0106a41086a2020290300370300200320032903b00e3703e010200341e0106a10e404200341f0066a41186a2213200341800c6a41186a290300370300200341f0066a41106a2218200341800c6a41106a290300370300200341f0066a41086a221e200341800c6a41086a290300370300200320032903800c3703f006024020152019470d0020192019470d00201941016a22022019490d492019410174221f2002201f20024b1b22024104200241044b1bad42c4007e220d422088a7454102742102200da7211f0240024020190d00200341003602e0100c010b200341043602e8102003201c3602e0102003201941c4006c3602e4100b200341b00e6a201f2002200341e0106a107d20032802b80e210220032802b00e4101460d44200320032802b40e221c3602b0082003200241c4006e22193602b4080b201c201541c4006c6a220241013a0000201e290300210d2018290300210e2013290300210f20032903f0062110200241c1006a200c200a42208684220a4220883c00002002200a3e003d2002200b370035200220013600312002200836002d200220123600292002201a3600252002201d3b0023200241003a002120022010370001200241196a200f370000200241116a200e370000200241096a200d370000200320032802b80841016a22153602b80820032802c4152108024020032802cc152202450d00200241246c21012008210203400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b024020032802c8152202450d00200241246c450d002008102e0b200941907f6a2109200641f0006a210620072024470d000c460b0b200341023a00f00b0b2005450d010b2004200541f0006c6a2106200421020340024020022207410c6a2802002201450d0020072802042102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b200741f0006a21020240200741086a2802002201450d00200141246c450d002007280204102e0b20022006470d000b0b2011450d42201141f0006c450d422004102e0c420b200341c0156a200141086a41d80010e9081a20034190136a41286a200241286a28020036020020034190136a41206a200241206a29020037030020034190136a41186a200241186a29020037030020034190136a41106a200241106a29020037030020034190136a41086a200241086a29020037030020032002290200370390132000200341c0156a20034190136a1081060c590b200141086a280200211520012802042112200341a8046a200141106a41c00110e9081a200341e8056a41286a2201200241286a280200360200200341e8056a41206a2207200241206a290200370300200341e8056a41186a2206200241186a290200370300200341e8056a41106a2204200241106a290200370300200341e8056a41086a2205200241086a290200370300200320022902003703e80502402012450d00200341f0066a200341a8046a41c00110e9081a200341c0156a41286a2001280200360200200341c0156a41206a2007290300370300200341c0156a41186a2006290300370300200341c0156a41106a2004290300370300200341c0156a41086a2005290300370300200320032903e8053703c01520034190136a200341c0156a10c102200341900a6a41086a20034199136a290000370300200341900a6a41106a200341a1136a290000370300200341900a6a41186a200341a9136a29000037030020032003290091133703900a024020032d0090134101460d00200341b0086a41186a2202200341900a6a41186a2206290300370300200341b0086a41106a2201200341900a6a41106a290300370300200341b0086a41086a2207200341900a6a41086a290300370300200320032903900a3703b008200341d0086a200341f0066a41c00110e9081a20034190136a41186a200229030037030020034190136a41106a200129030037030020034190136a41086a2007290300370300200320032903b00837039013200341c0156a20034190136a10f005024020032d00c0154101470d00200341f7106a2202200341d9156a290000370000200341e0106a41106a2201200341d2156a290100370300200341990a6a200341ca156a290100370000200341a10a6a200129030037000020062002290000370000200320032d00c1153a00900a200320032901c2153700910a200341b0086a1083060d13200341b00e6a200341d0086a41c00110e9081a200341c8066a200341900a6a10a603200341c0156a20032802c806220120032802d00610a70320032d00c0152102200341e0106a200341c0156a41017241c00110e9081a0240024020024101460d00200341003a0090130c010b200341013a00901320034190136a410172200341e0106a41c00110e9081a0b024020032802cc06450d002001102e0b20034190136a4101722114200341c0156a4101722102416821060340200341c0016a200341b00e6a200641b0fac6006a280000220110d10320032802c0012107200320032802c40122043602e810200320073602e410200320013602e010200341f00b6a200341e0106a10c203200341c0156a20032802f00b220520032802f80b10f402200341a8066a41086a2209200241086a290000370300200341a8066a41106a2208200241106a290000370300200341a8066a41186a2211200241186a290000370300200320022900003703a8060240024020032d00c0154101470d00200341c8066a41186a22132011290300370300200341c8066a41106a22112008290300370300200341c8066a41086a22082009290300370300200320032903a8063703c806024020032802f40b450d002005102e0b200341c0156a41186a2013290300370300200341c0156a41106a2011290300370300200341c0156a41086a2008290300370300200320032903c8063703c015200341c0156a200341900a6a412010ec08450d01200341c0156a410310c006200341800c6a410a6a200341c8156a2202280200360000200320032903c0153700820c200341b00a6a200341800c6a41c00110e9081a2002200341b00a6a410a6a280000360200200320032900b20a3703c0150c3f0b20032802f40b450d002005102e0b0240024020032d0090134101470d00200341b8016a2014200110d10320032802b8012205450d000240200420032802bc012209470d0020072005200410ec08450d020b200320093602c815200320053602c415200320013602c015200341e0106a200341c0156a10c20320032802e010220520032802e81010ff0120032802e410450d002005102e0b200320043602c815200320073602c415200320013602c015200341e0106a200341c0156a10c20320032802e010210120032802e81021074120102c2204450d5a200342203702c415200320043602c015200341c0156a200341900a6a412010742001200720032802c015220420032802c81510b201024020032802c415450d002004102e0b20032802e410450d002001102e0b200641046a22060d000b200341e0106a200341900a6a10a60320032802e810210120032802e0102102200341003602c815200342013703c015200341c0156a200341b00e6a41201074200341c0156a200341b00e6a41206a41201074200341c0156a200341f00e6a41201074200341c0156a200341900f6a41201074200341c0156a200341b00f6a41201074200341c0156a200341d00f6a412010742002200120032802c015220720032802c81510b201024020032802c415450d002007102e0b024020032802e410450d002002102e0b024020032d009013450d00200341b0086a108a060b41062102200341063a00c0150c3d0b200341c0156a410210c0060c3b0b410221020c3c0b200341c0156a41286a2001280200360200200341c0156a41206a2007290300370300200341c0156a41186a2006290300370300200341c0156a41106a2004290300370300200341c0156a41086a2005290300370300200320032903e8053703c01520034190136a200341c0156a10c102200341a8066a41086a20034199136a290000370300200341a8066a41106a200341a1136a290000370300200341a8066a41186a200341a9136a29000037030020032003290091133703a80620032d0090134101460d0f200341b00a6a41186a200341a8066a41186a290300220a370300200341b00a6a41106a200341a8066a41106a290300220b370300200341b00a6a41086a200341a8066a41086a290300220c370300200320032903a806220d3703b00a20034190136a41186a200a37030020034190136a41106a200b37030020034190136a41086a200c3703002003200d37039013200341c0156a20034190136a10f0050240024020032d00c0154101470d00200341f7106a2202200341d9156a290000370000200341e0106a41106a2201200341d2156a290100370300200341890c6a200341ca156a290100370000200341910c6a2001290300370000200341800c6a41186a2002290000370000200320032d00c1153a00800c200320032901c2153700810c200341d0086a200341800c6a10a603200341c0156a20032802d008220220032802d808220710a703024020032d00c0152201450d002002200710ff010b20032d00c1152107200341e0106a200341c0156a41027241bf0110e9081a024020014101470d00200341b00e6a200341e0106a41bf0110e9081a024020032802d408450d002002102e0b200320073a00901320034190136a410172200341b00e6a41bf0110e9081a200341b0016a20034190136a41e7e485f30610d103200320032903b0013702c415200341e7e485f3063602c015200341e0106a200341c0156a10c20320032802e010220220032802e81010ff01024020032802e410450d002002102e0b200341a8016a20034190136a41e2c289ab0610d103200320032903a8013702c415200341e2c289ab063602c015200341e0106a200341c0156a10c20320032802e010220220032802e81010ff01024020032802e410450d002002102e0b200341a0016a20034190136a41e9dabdf30610d103200320032903a0013702c415200341e9dabdf3063602c015200341e0106a200341c0156a10c20320032802e010220220032802e81010ff01024020032802e410450d002002102e0b20034198016a20034190136a41f0c2c98b0610d10320032003290398013702c415200341f0c2c98b063602c015200341e0106a200341c0156a10c20320032802e010220220032802e81010ff01024020032802e410450d002002102e0b20034190016a20034190136a41e1e69df30610d10320032003290390013702c415200341e1e69df3063602c015200341e0106a200341c0156a10c20320032802e010220220032802e81010ff01024020032802e410450d002002102e0b20034188016a20034190136a41e1ea91cb0610d10320032003290388013702c415200341e1ea91cb063602c015200341e0106a200341c0156a10c20320032802e010220220032802e81010ff01024020032802e410450d002002102e0b200341b00a6a108a060c3b0b024020032802d408450d002002102e0b200341f0066a410410c0060c010b200341f0066a410210c0060b20032d00f00622024106460d3820032d00f106210120032d00f206210720032d00f306210620032902f406210a0c370b2001411c6a2802002115200141186a2802002111200141146a2802002108200141106a28020021122001410c6a2802002113200141086a2802002107200341e0106a200141206a41800210e9081a200341800c6a41286a2201200241286a280200360200200341800c6a41206a2206200241206a290200370300200341800c6a41186a2204200241186a290200370300200341800c6a41106a2205200241106a290200370300200341800c6a41086a2209200241086a290200370300200320022902003703800c024002400240024020070e0400010203000b200341c0156a41146a4101360200200342013702c4152003419cc3cb003602c015200341043602ac0420034194c3cb003602a8042003200341a8046a3602d015200341c0156a41c499c9001044000b20034190136a200341e0106a41800210e9081a200341c0156a41286a2001280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a2009290300370300200320032903800c3703c015200341b00a6a200341c0156a10c102200341a8066a41086a200341b90a6a2202290000370300200341a8066a41106a200341c10a6a2201290000370300200341a8066a41186a200341c90a6a2207290000370300200320032900b10a3703a80602400240024020032d00b00a4101470d00200341d00e6a41023a0000200341c80e6a41003a0000200342003703b80e200342013703b00e02402011450d002011410c6c21012012210203400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b02402008450d002008410c6c450d002012102e0b200341b80e6a210241002106410221040c010b200341c8066a41186a200341a8066a41186a290300220a370300200341c8066a41106a200341a8066a41106a290300220b370300200341c8066a41086a200341a8066a41086a290300220c370300200320032903a806220d3703c8062007200a3700002001200b3700002002200c3700002003200d3700b10a200341013a00b00a200341c0156a20034190136a41800210e9081a200341dc086a2011360200200341d0086a41086a2008360200200320153602e008200320123602d408200320133602d008200341b00e6a200341b00a6a200341c0156a200341d0086a10c10620032903b00e4201520d01200341b00e6a41086a2102200341d00e6a2d0000210420032d00c80e21060b200320022800113602e8062003200241146a2800003600eb0620022f0019210120022d001b2107200229001c210a2002280024210220032903b80e210b20032903c00e210c200041186a20063a0000200041106a200c3703002000200b370308200020032802e8063600192000411c6a20032800eb063600002000412c6a2002360200200041246a200a370200200020073a0023200020013b0021200041206a20043a0000200042013703000c5a0b200320032800c90e3602e8062003200341b00e6a411c6a2800003600eb0620032903b80e210a20032903c00e210b200041186a20032d00c80e3a0000200041106a200b3703002000200a370308200020032802e8063600192000411c6a20032800eb06360000200042003703000c590b20034190136a200341e0106a41800210e9081a200341c0156a41286a2001280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a2009290300370300200320032903800c3703c015024002400240200341c0156a10bb06450d00200341d00e6a41023a0000200341c80e6a41003a0000200342003703b80e200342013703b00e02402011450d002011410c6c21012012210203400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b02402008450d002008410c6c450d002012102e0b200341b80e6a210241002106410221040c010b200341c0156a10e204200341c90a6a200341c0156a41186a290300370000200341c10a6a200341c0156a41106a290300370000200341b90a6a200341c0156a41086a290300370000200341013a00b00a200320032903c0153700b10a200341c0156a20034190136a41800210e9081a200341dc086a2011360200200341d0086a41086a2008360200200320153602e008200320123602d408200320133602d008200341b00e6a200341b00a6a200341c0156a200341d0086a10c10620032903b00e4201520d01200341b00e6a41086a2102200341d00e6a2d0000210420032d00c80e21060b200320022800113602f0062003200241146a2800003600f30620022f0019210120022d001b2107200229001c210a2002280024210220032903b80e210b20032903c00e210c200041186a20063a0000200041106a200c3703002000200b370308200020032802f0063600192000411c6a20032800f3063600002000412c6a2002360200200041246a200a370200200020073a0023200020013b0021200041206a20043a0000200042013703000c590b200320032800c90e3602f0062003200341b00e6a411c6a2800003600f30620032903b80e210a20032903c00e210b200041186a20032d00c80e3a0000200041106a200b3703002000200a370308200020032802f0063600192000411c6a20032800f306360000200042003703000c580b200341c0156a41286a2001280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a2009290300370300200320032903800c3703c0150240200341c0156a10a705450d002000420037002420004200370308200041206a41023a0000200041186a41003a0000200042013703000c580b200341a8066a41186a22024200370300200341b8066a22014200370300200341a8066a41086a22074200370300200342003703a806200341e8056a41a0dac800410f1081022007200341e8056a41086a290300370300200320032903e8053703a806200341a8046a41a0eec80041071081022002200341a8046a41086a290300370300200120032903a804370300200341a8066a41202013201210e504200041186a41003a000020004200370308200020032800e8063600192000411c6a200341eb066a280000360000200042003703000c570b200141246a28020021052001411c6a2802002104200141186a2802002109200141146a2802002108200141106a28020021062001410c6a2802002111200141086a2802002112200341c0156a41286a200241286a280200360200200341c0156a41206a200241206a290200370300200341c0156a41186a200241186a290200370300200341c0156a41106a200241106a290200370300200341c0156a41086a200241086a290200370300200320022902003703c015024002400240200341c0156a10bb06450d004200210a410221064200210b0c010b200341a8066a41186a22024200370300200341a8066a41106a22014200370300200341a8066a41086a22074200370300200342003703a806200341e8056a41a081ca0041071081022007200341e8056a41086a290300370300200320032903e8053703a806200341a8046a41e4d1c100410c1081022002200341a8046a41086a290300370300200120032903a804370300200341c8016a200341a8066a4120108e02200341c0156a20032802cc01410020032802c8011b2215200510c20620032802c015220220032802c815108f022107024020032802c415450d002002102e0b200341b00e6a1087032007417f7320032802b00e221320054105746a410020032802b80e20054b1b2202410047710d01024020032802b40e41ffffff3f71450d002013102e0b4280808080b0024280808080a00120071b210b41b4f3c800ad41aaf3c800ad20071b210a410321060b02402011450d002012102e0b02402004450d002004410c6c21012008210203400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b02402009450d002009410c6c450d002008102e0b200020073a00222000410c3a0021200042003703082000200b200a84370024200041206a20063a0000200041186a41003a0000200042013703000c570b200241086a290000210a200241106a290000210b2002290000210c200341c8066a41186a200241186a290000220d370300200341c8066a41106a200b370300200341c8066a41086a200a3703002003200c3703c806200341cd156a200a370000200341d5156a200b370000200341dd156a200d370000200341003a00c415200341083a00c0152003200c3700c515200341c0156a10fe01200341003602e810200342013703e0102006200341e0106a1076200341e0106a2012200610742004200341e0106a107602402004450d0020082004410c6c6a210620082102034020022802002101200241086a2802002207200341e0106a1076200341e0106a2001200710742002410c6a22022006470d000b0b20034190136a2015200510c20620032802e810220141046a2202417f4c0d3f20032802e0102107200328029813210520032802901321060240024020020d00410121150c010b2002102c2215450d540b200341003602c815200320023602c415200320153602c0152001200341c0156a1076200341c0156a2007200110742006200520032802c015220220032802c81510b201024020032802c415450d002002102e0b0240200328029413450d002006102e0b024020032802e410450d002007102e0b024020032802b40e41ffffff3f71450d002013102e0b02402011450d002012102e0b02402004450d002004410c6c21012008210203400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b02402009450d002009410c6c450d002008102e0b20004200370308200020032800e806360019200041186a41003a00002000411c6a200341eb066a280000360000200042003703000c560b200341c0156a41306a200141386a290300370300200341c0156a41286a200141306a290300370300200341c0156a41206a200141286a290300370300200341c0156a41186a200141206a290300370300200341c0156a41106a200141186a290300370300200341c0156a41086a200141106a2903003703002003200141086a2903003703c01520034190136a41286a200241286a28020036020020034190136a41206a200241206a29020037030020034190136a41186a200241186a29020037030020034190136a41106a200241106a29020037030020034190136a41086a200241086a29020037030020032002290200370390132000200341c0156a20034190136a10c3060c550b200341c0156a41306a200141386a290300370300200341c0156a41286a200141306a290300370300200341c0156a41206a200141286a290300370300200341c0156a41186a200141206a290300370300200341c0156a41106a200141186a290300370300200341c0156a41086a200141106a2903003703002003200141086a2903003703c01520034190136a41286a200241286a28020036020020034190136a41206a200241206a29020037030020034190136a41186a200241186a29020037030020034190136a41106a200241106a29020037030020034190136a41086a200241086a29020037030020032002290200370390132000200341c0156a20034190136a10c4060c540b200341c0156a41306a200141386a290300370300200341c0156a41286a200141306a290300370300200341c0156a41206a200141286a290300370300200341c0156a41186a200141206a290300370300200341c0156a41106a200141186a290300370300200341c0156a41086a200141106a2903003703002003200141086a2903003703c01520034190136a41286a200241286a28020036020020034190136a41206a200241206a29020037030020034190136a41186a200241186a29020037030020034190136a41106a200241106a29020037030020034190136a41086a200241086a29020037030020032002290200370390132000200341c0156a20034190136a10c5060c530b200141206a290300210c200141186a290300210a200141286a290300210b200141146a2802002112200141106a28020021112001410c6a2802002108200141086a2d0000210720012d00092113200341e0106a41286a2201200241286a280200360200200341e0106a41206a2206200241206a290200370300200341e0106a41186a2204200241186a290200370300200341e0106a41106a2205200241106a290200370300200341e0106a41086a2209200241086a290200370300200320022902003703e0100240024002400240024002400240024020070e0700010203040506000b200341c0156a41146a4101360200200342013702c4152003419cc3cb003602c015200341043602ac0420034194c3cb003602a8042003200341a8046a3602d015200341c0156a4188f3c0001044000b200341c0156a41286a2001280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a2009290300370300200320032903e0103703c01520034190136a200341c0156a10c1020240024020032d0090134101460d0020034190136a41086a280200210220034190136a410c6a280200210120034190136a41106a280200210720034190136a41146a290200210b20032d009113210620032f019213210420032802941321052003200341ac136a35020020034190136a41206a31000042208684220d3e00cb0e200341cf0e6a200d4220883c00002003200b3700c30e200320073600bf0e200320013600bb0e200320023600b70e200320053600b30e200320043b00b10e200320063a00b00e0240201241104d0d00200341d0086a410410f3020c020b024020120d00200341d0086a410210f3020c020b200341980c6a22014200370300200341800c6a41106a22024200370300200341800c6a41086a22074200370300200342003703800c200341b00a6a418ef9c00041101081022007200341b00a6a41086a290000370300200320032900b00a3703800c200341c0156a419ef9c000410a1081022001200341c0156a41086a290000370300200220032900c01537030041002101200341b40a6a41003a0000200341003602b00a20034198026a200341800c6a4120200341b00a6a4105410010ca040240200328029802450d002003200328029c022201410520014105491b3602c4152003200341b00a6a3602c01520034190026a200341c0156a10ab010240200328029002450d00410021010c010b20032802940221010b200341980c6a4200370300200341800c6a41106a4200370300200341800c6a41086a22074200370300200342003703800c200341b00a6a418ef9c00041101081022007200341b00a6a41086a290000370300200320032900b00a3703800c200341c0156a41c7c3cb004107108102200241086a200341c0156a41086a290000370000200220032900c01537000041002107200341b40a6a41003a0000200341003602b00a20034188026a200341800c6a4120200341b00a6a4105410010ca040240200328028802450d002003200328028c022207410520074105491b3602c4152003200341b00a6a3602c01520034180026a200341c0156a10ab010240200328028002450d00410021070c010b20032802840221070b200341980c6a4200370300200341800c6a41106a4200370300200341800c6a41086a22064200370300200342003703800c200341b00a6a418ef9c00041101081022006200341b00a6a41086a290000370300200320032900b00a3703800c200341c0156a41a8f9c0004109108102200241086a200341c0156a41086a290000370000200220032900c01537000041002102200341b40a6a41003a0000200341003602b00a200341f8016a200341800c6a4120200341b00a6a4105410010ca04024020032802f801450d00200320032802fc012202410520024105491b3602c4152003200341b00a6a3602c015200341f0016a200341c0156a10ab01024020032802f001450d00410021020c010b20032802f40121020b02402002417f200120076a220720072001491b2201720d00200341d0086a410110f3020c020b02402012417f200120026a220220022001491b4d0d00200341d0086a410310f3020c020b0240200a4280c8afa02556200c420052200c501b0d00200341d0086a410510f3020c020b200341e0016a2012ad42004280a0cb9801420010e80820034190136a200341b00e6a10e702200341c0156a200328029013220120032802981310e902200341d8156a290300210b20032802e015210220032903d015210f20032903e001220e4280e0cdb8eb057c220d200e54ad2110200341e8016a290300212820032902e41521290240200328029413450d002001102e0b200b420020021b210e200f420020021b210f202820107c210b02402002450d00202942ffffff3f83500d002002410120021b102e0b024002400240417f200d200f85200b200e8584420052200d200f542202200b200e54200b200e511b1b41016a0e03010200010b200341c0156a200341b00e6a200d200f7d200b200e7d2002ad7d10c30220032d00c0154106460d01200341d0086a410610f3020c030b200341d0016a200341b00e6a200f200d7d200e200b7d200f200d54ad7d10fb010b20034190136a200341b00e6a10c802200341c0156a200328029013220720032802981310c902200341e0156a290300420020032903c01542015122021b2110200341d8156a2201290300420020021b2128200341d0156a290300420020021b210e20032903c815420020021b210f0240200328029413450d002007102e0b42f0d0c9abc6add9b1f400200341b00e6a427f200f20287c22282028200f542202200e20107c2002ad7c220f200e54200f200e511b22021b220e200a200e200a54427f200f20021b220e200c54200e200c511b22021b220a200e200c20021b220c411f1085062001200b370300200341e8156a2012360200200341e4156a20113602002003200d3703d0152003200c3703c8152003200a3703c015200320083602e01520034190136a200341b00e6a10e7022003280290132202200328029813200341c0156a10b9050240200328029413450d002002102e0b0240201141ffffff3f71450d002008102e0b200341063a00d0080c380b200341023a00d0080b0240201141ffffff3f71450d002008102e0b20032d00d00822024106460d3620032f00d108210120032d00d3082107200020032902d408370024200020073a0023200020013b0021200041206a20023a0000200041186a41003a000020004200370308200042013703000c580b200341c0156a41286a2001280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a2009290300370300200320032903e0103703c01520034190136a200341c0156a10c102200341800c6a41086a20034199136a290000370300200341800c6a41106a200341a1136a290000370300200341800c6a41186a200341a9136a29000037030020032003290091133703800c20032d0090134101460d0d200341b00e6a41186a200341800c6a41186a290300370300200341b00e6a41106a200341800c6a41106a290300370300200341b00e6a41086a200341800c6a41086a290300370300200320032903800c3703b00e200341c0156a200341b00e6a10e70220032802c015220120032802c815108f022102024020032802c415450d002001102e0b02402002450d00200341b00e6a10e802200341063a00b00a0c350b200341b00a6a410710f30220032d00b00a4106460d340c330b200341c0156a41286a2001280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a2009290300370300200320032903e0103703c01520034190136a200341c0156a10c10220032d0090134101460d0b20034190136a41086a280200210220034190136a410c6a280200210120034190136a41106a280200210720034190136a41146a290200210a20032d009113210620032f019213210420032802941321052003200341ac136a35020020034190136a41206a31000042208684220b3e00cb0e200341cf0e6a200b4220883c00002003200a3700c30e200320073600bf0e200320013600bb0e200320023600b70e200320053600b30e200320043b00b10e200320063a00b00e200341980c6a22024200370300200341800c6a41106a22054200370300200341800c6a41086a22014200370300200342003703800c200341b00a6a418ef9c00041101081022001200341b00a6a41086a290000370300200320032900b00a3703800c200341c0156a419ef9c000410a1081022002200341c0156a41086a290000370300200520032900c015370300200341b40a6a41003a0000200341003602b00a200341b0026a200341800c6a4120200341b00a6a4105410010ca04024020032802b002450d00200320032802b4022202410520024105491b3602c4152003200341b00a6a3602c015200341a8026a200341c0156a10ab0120032802a8020d0020032802ac0220084d0d00200341f0066a410e10f3020c300b200341a0026a200341b00e6a10eb0220032802a002450d0a20032802a4022109200341c0066a22024200370300200341a8066a41106a22014200370300200341a8066a41086a22074200370300200342003703a806200341e8056a418ef9c00041101081022007200341e8056a41086a290300370300200320032903e8053703a806200341a8046a41c7c3cb0041071081022002200341a8046a41086a290300370300200120032903a804370300200341c0156a200341a8066a10f10220032802c0152201410820011b21044100210202400240024020032902c415420020011b220a422088a722010e020201000b4100210203402001410176220620026a210720072002200420074106746a41206a200341b00e6a412010ec084101481b2102200120066b220141014b0d000b0b200420024106746a41206a200341b00e6a412010ec084521020b0240200a42ffffff1f83500d002004102e0b02402002450d00200341f0066a410a10f3020c300b200341a80a6a22024200370300200341900a6a41106a22014200370300200341900a6a41086a22074200370300200342003703900a200341b00a6a418ef9c00041101081022007200341b00a6a41086a290000370300200320032900b00a3703900a200341d0086a41a8f9c00041091081022002200341d0086a41086a290000370300200120032900d008370300200341c0156a200341900a6a10f10220032802c0152202410820021b210602400240024020032902c415420020021b220a422088a72201450d00200641206a2102200141067441406a41067641016a210741002101034002402002200341b00e6a412010ec080d000240200a42ffffff1f83500d002006102e0b200341f0066a410b10f3020c340b200241c0006a21022007200141016a2201470d000b200a42ffffff1f8350450d010c020b200a42ffffff1f83500d010b2006102e0b200341c0156a200341b00e6a4280a094a58d1d420010c302024020032d00c0154106470d00200341cf0e6a310000210a20033500cb0e210b20032900c30e210c20032800bf0e210720032800bb0e210620032800b70e210420032800b30e210820032f00b10e211120032d00b00e2112200341d0086a10ec0220032802d80822012009490d0a0240200120032802d408470d00200141016a22022001490d41200141017422132002201320024b1b22024104200241044b1bad42307e220d422088a7454103742102200da721130240024020010d00200341003602c0150c010b200341c0156a41086a4108360200200320032802d0083602c0152003200141306c3602c4150b20034190136a20132002200341c0156a107d20034198136a28020021022003280290134101460d0520032003280294133602d0082003200241306e3602d4080b20032802d008200941306c6a220241306a2002200120096b41306c10ea081a2002411f6a200b200a42208684220a4220883c00002002200a3e001b200241286a420037030020024280a094a58d1d3703202002200c3700132002200736000f2002200636000b2002200436000720022008360003200220113b0001200220123a00002003200141016a22023602d80820034190136a41086a2002360200200320032903d008220a3703901302400240200aa722020d00200341980c6a4200370300200341800c6a41106a4200370300200341800c6a41086a22024200370300200342003703800c200341b00a6a418ef9c00041101081022002200341b00a6a41086a290000370300200320032900b00a3703800c200341c0156a419ef9c000410a108102200541086a200341c0156a41086a290000370000200520032900c015370000200341800c6a412010ff010c010b200341980c6a4200370300200341800c6a41106a4200370300200341800c6a41086a22014200370300200342003703800c200341b00a6a418ef9c00041101081022001200341b00a6a41086a290000370300200320032900b00a3703800c200341c0156a419ef9c000410a108102200541086a200341c0156a41086a290000370000200520032900c015370000200341800c6a20034190136a10bd052003280294132201450d00200141306c450d002002102e0b200341063a00f0060c320b200341f0066a410c10f3020c2f0b200341c0156a41286a2001280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a2009290300370300200320032903e0103703c01520034190136a200341c0156a10c102200341f0066a41086a20034199136a290000370300200341f0066a41106a200341a1136a290000370300200341f0066a41186a200341a9136a29000037030020032003290091133703f0060240024002400240024002400240024020032d0090134101460d00200341b00e6a41186a200341f0066a41186a290300370300200341b00e6a41106a200341f0066a41106a290300370300200341b00e6a41086a200341f0066a41086a290300370300200320032903f0063703b00e20080e03020301020b41022102200341023a00a8040c060b200320113602f006200341b00e6a411f6a310000210a20032d00b00e210220032f00b10e210120032900b30e210b20032900bb0e210c20032900c30e210d20033500cb0e210e200341d0086a10ec02200341b3136a200a3c000020034190136a411f6a200e3e0000200341a7136a200d3700002003419f136a200c3700002003200b37009713200320013b009513200320023a00941320032802d80821092003200341f0066a36029013410e2108200920114b0d0220034190136a4104722104410021024110210820032802d00821050240024020090e020401000b410021022009210103402001410176220620026a2107200720022005200741306c6a2004412010ec084101481b2102200120066b220141014b0d000b0b2005200241306c6a2004412010ec080d02200920024d0d0d2005200241306c6a2201290320210a200141286a290300210b2001200141306a20092002417f736a41306c10ea081a20032009417f6a3602d808200341c8026a2004200a200b10fb01200341c0156a41086a220241043a0000200341c9156a2004290000370000200341d1156a200441086a290000370000200341d9156a200441106a290000370000200341e1156a200441186a2900003700002003410c3a00c015200341c0156a10fe0120034190136a41086a20032802d808360200200320032903d008220a370390130240200aa722010d00200341800c6a41186a22014200370300200341800c6a41106a22074200370300200341800c6a41086a22064200370300200342003703800c200341b00a6a418ef9c00041101081022006200341b00a6a41086a290000370300200320032900b00a3703800c200341c0156a419ef9c000410a10810220012002290000370300200720032900c015370300200341800c6a412010ff010c330b200341800c6a41186a22074200370300200341800c6a41106a22064200370300200341800c6a41086a22044200370300200342003703800c200341b00a6a418ef9c00041101081022004200341b00a6a41086a290000370300200320032900b00a3703800c200341c0156a419ef9c000410a10810220072002290000370300200620032900c015370300200341800c6a20034190136a10bd052003280294132202450d32200241306c450d322001102e0c320b200341c0156a200341b00e6a410010f00220032d00c0154101460d02200341c0156a41086a41043a0000200341c9156a20032903b00e370000200341d1156a200341b00e6a41086a290300370000200341d9156a200341c00e6a290300370000200341e1156a200341c80e6a2903003700002003410c3a00c015200341c0156a10fe010c310b200341b00e6a411f6a310000210a20032d00b00e210120032f00b10e210720032900b30e210b20032900bb0e210c20032900c30e210d20033500cb0e210e200341900a6a41186a22024200370300200341900a6a41106a22064200370300200341900a6a41086a22044200370300200342003703900a200341b00a6a418ef9c00041101081022004200341b00a6a41086a290000370300200320032900b00a3703900a200341d0086a41a8f9c00041091081022002200341d0086a41086a290000370300200620032900d008370300200341c0156a200341900a6a10f10220032802c015210220032902c415210f20034190136a411f6a200a3c00002003200e3e00ab132003200d3700a3132003200c37009b132003200b37009313200320073b009113200320013a0090132002410820021b210402400240200f420020021b220a422088a72205450d00200441206a2107200541067441406a41067641016a210641002102410021010340200720026a20034190136a412010ec08450d02200241c0006a21022006200141016a2201470d000b0b0240200a42ffffff1f83500d002004102e0b200341a8046a411010f3020c030b200420026a220241186a290300210b200241106a290300210c2002200241c0006a2001417f7320056a41067410ea081a200341b8026a20034190136a200c200b10fb01200341c0156a41086a220241043a0000200341c0156a41096a200329039013370000200341d1156a20034190136a41086a290300370000200341d9156a20034190136a41106a290300370000200341e1156a20034190136a41186a2903003700002003410c3a00c015200341c0156a10fe0120032004360290132003200a4280808080707c220a37029413200341800c6a41186a22014200370300200341800c6a41106a22074200370300200341800c6a41086a22064200370300200342003703800c200341b00a6a418ef9c00041101081022006200341b00a6a41086a290000370300200320032900b00a3703800c200341c0156a41a8f9c000410910810220012002290000370300200720032900c015370300200341800c6a20034190136a10f202200a42ffffff1f83500d302004102e0c300b024020032802d4082202450d00200241306c450d0020032802d008102e0b200341a8046a200810f3020c010b200341a8046a411010f3020b20032d00a80422024106460d2e0b20032f00a904210120032d00ab042107200020032902ac04370024200020073a0023200020013b0021200041206a20023a0000200041186a41003a000020004200370308200042013703000c550b200341c0156a41286a2001280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a2009290300370300200320032903e0103703c01502400240200341c0156a10a7050d004200210e410121010240200841ff01710e03022d002d0b2012450d2b2011102e0c2b0b410221014200210e200841ff01714102470d2a2012450d2a2011102e0c2a0b2003200b3e00ab13200341af136a200b4220883c000020032012360097132003201136009313200320084110763b009113200320084108763a0090132003200a3e009b132003200c3700a3132003200a4220883e009f13200341980c6a22024200370300200341800c6a41106a22014200370300200341800c6a41086a22074200370300200342003703800c200341b00a6a418ef9c00041101081022007200341b00a6a41086a290000370300200320032900b00a3703800c200341c0156a41a8f9c00041091081022002200341c0156a41086a290000370300200120032900c015370300200341b40a6a41003a0000200341003602b00a200341e0026a200341800c6a4120200341b00a6a4105410010ca040240024020032802e002450d00200320032802e4022202410520024105491b3602c4152003200341b00a6a3602c015200341d8026a200341c0156a10ab01201341ff017141004720032802d8024520032802dc0241004771730d010c2a0b201341ff0171450d290b200341c0156a411110f30220033500c11520033300c51520033100c7154210868442208684210d200341c8156a280200210220032d00c01521014201210e0c2a0b200341c0156a41286a2001280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a2009290300370300200320032903e0103703c015200341c0156a10a7050d04200341b00a6a418ef9c0004110108102200341c0156a41fbafc90041061081024120102c2202450d502003422037029413200320023602901320034190136a200341b00a6a4110107420034190136a200341c0156a411010742003280298132202417f4c0d3c20032802901321010240024020020d00410121070c010b2002102c2207450d510b20072001200210e9082101200341f0066a41086a20034190136a41086a22162802002207360200200341a8046a41026a2206200341c0156a41026a2d00003a00002003200329039013220a3703f006200320032f00c0153b01a804200341940c6a2007360200200320023602880c200320023602840c200320013602800c2003200a37028c0c200341003a009c0c2003410b3602980c2003419f0c6a20062d00003a0000200320032f01a8043b009d0c200341c0156a200341800c6a10fa020240200341c0156a41c0006a2802002213450d00200341900a6a41106a2108200341c8066a41106a2109034020034190136a41386a200341c0156a41386a29030037030020034190136a41306a200341c0156a41306a29030037030020034190136a41286a200341c0156a41286a29030037030020034190136a41206a200341c0156a41206a29030037030020034190136a41186a2218200341c0156a41186a29030037030020034190136a41106a2219200341c0156a41106a2903003703002016200341c0156a41086a290300370300200320032903c0153703901320132003280288164105746a211520032802841621142013210202400240024003400240024002400240200222062015460d00200341c8066a41186a420037030020094200370300200341c8066a41086a22024200370300200342003703c806200341d0086a418ef9c00041101081022002200341d0086a41086a2211290300370300200320032903d0083703c806200341b00a6a41c7c3cb004107108102200941086a200341b00a6a41086a2212290300370300200920032903b00a370300200341b00e6a200341c8066a10f10220032802b00e2201410820011b21054100210202400240024020032902b40e420020011b220a422088a722010e020201000b4100210203402001410176220420026a210720072002200520074106746a41206a2006412010ec084101481b2102200120046b220141014b0d000b0b200520024106746a41206a2006412010ec084521020b0240200a42ffffff1f83500d002005102e0b20020d05200341900a6a41186a420037030020084200370300200341900a6a41086a22024200370300200342003703900a200341b00a6a418ef9c000411010810220022012290000370300200320032900b00a3703900a200341d0086a41a8f9c0004109108102200841086a2011290000370000200820032900d008370000200341b00e6a200341900a6a10f10220032802b00e2202410820021b210420032902b40e420020021b220a422088a72201450d01200441206a2102200141067441406a41067641016a2107410021010340024020022006412010ec080d00200a42ffffff1f83500d072004102e0c070b200241c0006a21022007200141016a2201470d000b200a42ffffff1f8350450d020c030b200341b00e6a41186a2018290300370300200341b00e6a41106a2019290300370300200341b00e6a41086a201629030037030020032003290390133703b00e200341b00e6a10e802201441ffffff3f71450d060c050b200a42ffffff1f83500d010b2004102e0b200641206a2102200341e8026a200610eb0220032802e8020d000b0b201441ffffff3f71450d010b2013102e0b200341c0156a200341800c6a10fa0220032802801622130d000b0b024020032802840c450d0020032802800c102e0b0240200341900c6a280200450d00200328028c0c102e0b200041186a41003a000020004200370308200020032800e8063600192000411c6a200341eb066a280000360000200042003703000c530b20020d4f0c3b0b2005200741b8b2c0001056000b2006200741b8b2c0001056000b20032802d008210220032802d4082101200341c8156a200341ec106a280200360200200320032902e4103703c01520022001200341c0156a41a8e9c70041b8e9c700103e000b2000420037002420004200370308200041206a41023a0000200041186a41003a0000200042013703000c4e0b200220091046000b200920011045000b200341f0066a410910f3020c240b41022102200341023a00f0060c240b200341023a00b00a0c250b410221020c270b200341c0156a410510c0060c280b410121020c320b410221010c350b200341d8006a200341b00e6a200d200c10cb02200341c0156a41186a200341d8006a41186a290300370300200320032903683703d0152003200341d8006a41086a2903003703c815200320032903583703c0152003200341c0156a3602800c200341800c6a10cc02200341d0086a41086a200341f0106a220141086a290300370300200341063a00800c200320012903003703d0084200210d41002101410121064200210c0c320b200341800c6a410110bc060c300b2000420037002420004200370308200041206a41023a0000200041186a41003a0000200042013703000c420b410221010c360b200341386a200341b00e6a200d200c10fb01200341063a00e0100c330b200341e0106a410110bc060c310b200341e0106a410110bc060c350b200341023a00b0080c390b4184b4c400412741acb4c4001039000b41b3d6c800413041e4d6c8001039000b200320032800e0103602b00e2003200341e3106a2800003600b30e200041186a41003a000020004200370308200020032802b00e3600192000411c6a20032800b30e360000200041206a41023a0000200042013703000c3a0b200341d4156a4101360200200342013702c415200341c4e2cc003602c015200341043602e4102003200341e0106a3602d0152003200341d0086a3602e010200341c0156a4198e9c7001044000b200341d4156a4101360200200342013702c415200341c4e2cc003602c015200341043602e4102003200341e0106a3602d0152003200341d0086a3602e010200341c0156a4188e9c7001044000b41fee7c70041e90041f8e8c700105d000b200341c0156a41086a200341e0106a41086a280200360200200320032903e0103703c01541fee7c70041e900200341c0156a41f4a7c70041e8e8c700103e000b200341c0156a41386a200141c0006a290300370300200341c0156a41306a200141386a290300370300200341c0156a41286a200141306a290300370300200341c0156a41206a200141286a290300370300200341c0156a41186a200141206a290300370300200341c0156a41106a200141186a290300370300200341c0156a41086a200141106a2903003703002003200141086a2903003703c01520034190136a41286a200241286a28020036020020034190136a41206a200241206a29020037030020034190136a41186a200241186a29020037030020034190136a41106a200241106a29020037030020034190136a41086a200241086a29020037030020032002290200370390132000200341c0156a20034190136a10c6060c350b200341c0156a41386a200141c0006a290300370300200341c0156a41306a200141386a290300370300200341c0156a41286a200141306a290300370300200341c0156a41206a200141286a290300370300200341c0156a41186a200141206a290300370300200341c0156a41106a200141186a290300370300200341c0156a41086a200141106a2903003703002003200141086a2903003703c01520034190136a41286a200241286a28020036020020034190136a41206a200241206a29020037030020034190136a41186a200241186a29020037030020034190136a41106a200241106a29020037030020034190136a41086a200241086a29020037030020032002290200370390132000200341c0156a20034190136a10c0020c340b200141c8006a290300210f200141c0006a29030021102001413c6a2802002117200141386a280200211a200141306a290300210d2001412c6a28020021182001412a6a2f010021152001411c6a290200210e200141186a2802002107200141146a2802002113200141106a28020021112001410c6a28020021122001410a6a2f01002114200141086a2d00002106200141246a350200210a200141286a310000210b20012d0029211920012d00092116200341800c6a41286a2201200241286a280200360200200341800c6a41206a2204200241206a290200370300200341800c6a41186a2205200241186a290200370300200341800c6a41106a2209200241106a290200370300200341800c6a41086a2208200241086a290200370300200320022902003703800c200a200b42208684210c0240024002400240024020060e050001020304000b200341c0156a41146a4101360200200342013702c4152003419cc3cb003602c015200341043602ac0420034194c3cb003602a8042003200341a8046a3602d015200341c0156a41889cc4001044000b200341c0156a41286a2001280200360200200341c0156a41206a2004290300370300200341c0156a41186a2005290300370300200341c0156a41106a2009290300370300200341c0156a41086a2008290300370300200320032903800c3703c01520034190136a200341c0156a10c102200341c8066a41086a20034199136a290000370300200341c8066a41106a200341a1136a290000370300200341c8066a41186a200341a9136a29000037030020032003290091133703c806024002400240024002400240024020032d0090134101460d00200341900a6a41186a200341c8066a41186a290300370300200341900a6a41106a200341c8066a41106a290300370300200341900a6a41086a200341c8066a41086a290300370300200320032903c8063703900a02400240024020130d00200341c0156a4104108e04200341c0156a41086a28020021020c010b201341e400490d01200341c0156a4105108e04200341c8156a28020021020b20032903c015210a2007108c042007102e0c020b200320133602e810200320113602e410200320123602e010200341c0156a41186a200341900a6a41186a290300370300200341c0156a41106a200341900a6a41106a290300370300200341c0156a41086a2201200341900a6a41086a290300370300200320032903900a3703c01520034190136a200341e0106a200341c0156a108d042003419c136a2802002102200329029413210a02402003280290134101460d00200120023602002003200aa722043602c415200341b1c5cb003602c015200341013b01cc15200341a8066a200341c0156a10900420034120360294132003200341a8066a36029013200341c0156a20034190136a1093010240024020032d00c0154101470d00200341e8086a4200370300200341e0086a4200370300200341d8086a4200370300200342003703d0080c010b200341e8086a200341d9156a290000370300200341e0086a200341d1156a290000370300200341d8086a200341c9156a290000370300200320032900c1153703d0080b200341003602c815200342013703c0152007200341c0156a10900220032802c8152105024020032802c415450d0020032802c015102e0b20034190136a200741b00210e9081a200341b00a6a41186a200341d0086a41186a290300370300200341b00a6a41106a200341d0086a41106a290300370300200341b00a6a41086a200341d0086a41086a290300370300200320032903d0083703b00a4110102c2201450d3b200141f8f7c60036020c2001410136020820014281808080103702004110102c2202450d3b20024190f8c60036020c20024101360208200242818080801037020020012001280200417f6a2206360200024020060d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22062006280200417f6a220636020020060d002001102e0b02400240200228020820034190136a200228020c28020c1101000d0020034180116a41023a0000200341f8106a41003a000020022002280200417f6a22013602004200210b200342003703e810200342013703e010024020010d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b20034190136a10dc02410121060c010b200341c0156a20034190136a41b00210e9081a200341ba0e6a200341b80a6a290300370100200341c20e6a200341c00a6a290300370100200341ca0e6a200341c80a6a290300370100200341d00e6a200341ce0a6a29010037010020034180023b01b00e200320032903b00a3701b20e200320023602d80e200341e0106a200341c0156a200341b00e6a10dd0220032903e010420151210620032903e810210b0b20034188116a280200210220034180116a290300210e200341f0106a290300210c200328028c112101024020060d00410021064200210d200ba70d044200210b0c060b410121060240200b4201510d00200341f8106a290300210d0c060b427f2005ad42e8077e42b0b182067c220b200c7c220c200c200b541b210c4200210d0c040b2007108c042007102e4200210b4200210d0c050b2007108c042007102e4202210a0b4200210b0240201141ffffff3f710d004200210d0c040b2012102e4200210d0c030b427f2005ad42e8077e42b0b182067c220b200c7c220c200c200b541b210c0b4201210b0b0240200a4280808080f0ffffff0783500d002004102e0b2007102e2006450d01200e210a0b2000200b3703082000412c6a2001360200200041286a2002360200200041206a200a370300200041186a200d370300200041106a200c370300200042013703000c370b2000200b370308200041186a200d370300200041106a200c370300200042003703000c360b200ba72102200aa7210620034190136a41286a200128020036020020034190136a41206a200429030037030020034190136a41186a200529030037030020034190136a41106a200929030037030020034190136a41086a2008290300370300200320032903800c37039013200341e0106a20034190136a10c102200341a8066a41086a200341e9106a290000370300200341a8066a41106a200341f1106a290000370300200341a8066a41186a200341f9106a290000370300200320032900e1103703a80602400240024020032d00e0104101470d0041022101200341e0156a41023a000041002107200341d8156a41003a00004200210a200342003703c815200342013703c01502402015411074201941087472200272450d002006102e0b201141ffffff3f71450d012012102e0c010b200341c8066a41186a200341a8066a41186a290300220a370300200341c8066a41106a200341a8066a41106a290300220b370300200341c8066a41086a200341a8066a41086a290300220c370300200320032903a806220f3703c806200341e0106a41186a200a370300200341e0106a41106a200b370300200341e0106a41086a200c3703002003200f3703e010200320133602b80e200320113602b40e200320123602b00e2003419c136a201836020020034190136a41086a20154110742019410874722002723602002003200636029413200320163a009113200341003a009013200341c0156a200341e0106a2014200341b00e6a2007200ea7200e422088a720034190136a200d108f0420032903c815210a20032903c0154201520d01200341e0156a2d00002101200341c0156a41186a2d000021070b200320032800d9153602e8062003200341c0156a411c6a2800003600eb06200341c0156a41106a290300210b20032f00e115210220032d00e315210620032902e415210c20032802ec152104200041186a20073a0000200041106a200b3703002000200a370308200020032802e8063600192000411c6a20032800eb063600002000412c6a2004360200200041246a200c370200200020063a0023200020023b0021200041206a20013a0000200042013703000c360b200320032800d9153602e8062003200341c0156a411c6a2800003600eb06200341c0156a41106a290300210b200041186a200341c0156a41186a2d00003a0000200041106a200b3703002000200a370308200020032802e8063600192000411c6a20032800eb06360000200042003703000c350b20034190136a41286a200128020036020020034190136a41206a200429030037030020034190136a41186a200529030037030020034190136a41106a200929030037030020034190136a41086a2008290300370300200320032903800c37039013200341e0106a20034190136a10c102200341a8066a41086a200341e9106a290000370300200341a8066a41106a200341f1106a290000370300200341a8066a41186a200341f9106a290000370300200320032900e1103703a80602400240024020032d00e0104101470d0041022102200341e0156a41023a000041002101200341d8156a41003a00004200210a200342003703c815200342013703c015200d42ffffff3f83500d012018102e0c010b200341c8066a41186a200341a8066a41186a290300220a370300200341c8066a41106a200341a8066a41106a290300220b370300200341c8066a41086a200341a8066a41086a2903002228370300200320032903a80622293703c806200341e0106a41186a200a370300200341e0106a41106a200b370300200341e0106a41086a2028370300200320293703e0102003200d3702b40e200320183602b00e20034190136a41206a200c4220883c000020034190136a411c6a200c3e0200200341a4136a200e37020020034190136a41106a20073602002003419c136a201336020020034190136a41086a20113602002003201236029413200320143b019213200320163a009113200341013a009013200341c0156a200341e0106a2015200341b00e6a201a20172010a720034190136a200f108f0420032903c815210a20032903c0154201520d01200341c0156a41206a2d00002102200341c0156a41186a2d000021010b200320032800d9153602f0062003200341c0156a411c6a2800003600f306200341c0156a41106a290300210b20032f00e115210720032d00e315210620032902e415210c20032802ec152104200041186a20013a0000200041106a200b3703002000200a370308200020032802f0063600192000411c6a20032800f3063600002000412c6a2004360200200041246a200c370200200020063a0023200020073b0021200041206a20023a0000200042013703000c350b200320032800d9153602f0062003200341c0156a411c6a2800003600f306200341c0156a41106a290300210b200041186a200341c0156a41186a2d00003a0000200041106a200b3703002000200a370308200020032802f0063600192000411c6a20032800f306360000200042003703000c340b2003200c3e008b072003418f076a200c4220883c00002003200e37008307200320073600ff06200320133600fb06200320113600f706200320123600f306200320143b00f106200320163a00f006200341c0156a41286a2001280200360200200341c0156a41206a2004290300370300200341c0156a41186a2005290300370300200341c0156a41106a2009290300370300200341c0156a41086a2008290300370300200320032903800c3703c01520034190136a200341c0156a10c102200341c8066a41086a20034199136a290000370300200341c8066a41106a200341a1136a290000370300200341c8066a41186a200341a9136a29000037030020032003290091133703c8060240024002400240024020032d0090134101460d00200341d0086a41186a200341c8066a41186a290300370300200341d0086a41106a200341c8066a41106a290300370300200341d0086a41086a200341c8066a41086a290300370300200320032903c8063703d0080240201541024f0d00200341f00b6a4101108e040c020b0240200d42ffffffff0f560d00200341f00b6a4104108e040c020b0240200d422088a741e400490d00200341f00b6a4105108e040c020b2003200d3702e410200320183602e010200341c0156a41186a200341d0086a41186a290300370300200341c0156a41106a200341d0086a41106a290300370300200341c0156a41086a2201200341d0086a41086a290300370300200320032903d0083703c01520034190136a200341e0106a200341c0156a108d042003419c136a2802002102200329029413210a024002402003280290134101460d0020012002360200200320153b01cc152003200aa722013602c415200341b1c5cb003602c015200341a8066a200341c0156a10900420034120360294132003200341a8066a36029013200341c0156a20034190136a109301200a422088210a0240024020032d00c0154101470d00200341c80a6a4200370300200341c00a6a4200370300200341b80a6a4200370300200342003703b00a0c010b200341c80a6a200341d9156a290000370300200341c00a6a200341d1156a290000370300200341b80a6a200341c9156a290000370300200320032900c1153703b00a0b200aa72102200341a8066a41186a200341f0066a41186a290000370300200341a8066a41106a200341f0066a41106a290000370300200341a8066a41086a200341f0066a41086a290000370300200320032900f0063703a806200341c8066a200341b00a6a200341a8066a109104200341c0156a20032802c806220720032802d006109204200341900a6a41086a2206200341c0156a41086a290300370300200341900a6a41106a2204200341c0156a41106a290300370300200341e0106a41086a2205200341e4156a290200370300200341e0106a41106a2209200341ec156a290200370300200341e0106a41186a2208200341f4156a290200370300200341e0106a41206a2211200341fc156a290200370300200341e0106a41286a221220034184166a280200360200200320032903c0153703900a200320032902dc153703e010024020032802d8152213450d00200341b0086a41106a2004290300370300200341b0086a41086a2006290300370300200341b00e6a41086a2005290300370300200341b00e6a41106a2009290300370300200341b00e6a41186a2008290300370300200341b00e6a41206a2011290300370300200341b00e6a41286a2012280200360200200320032903900a3703b008200320032903e0103703b00e024020032802cc06450d002007102e0b200341a8046a41166a200341b0086a41106a290300220a370100200341a8046a410e6a200341b0086a41086a290300370100200341e8056a41166a2207200a370100200341e8056a41106a200341a8046a41106a290100370300200320032903b0083701ae04200341e8056a41086a200341a8046a41086a290100370300200320032901a8043703e80520034190136a41106a2206200729010037030020034190136a41086a200341e8056a410e6a290100370300200320032901ee0537039013200320133602a813200341d4136a200341d80e6a280200360200200341cc136a200341d00e6a290300370200200341c4136a200341c80e6a290300370200200341bc136a200341b00e6a41106a290300370200200341b4136a200341b00e6a41086a290300370200200341ac136a20032903b00e37020002402006280200201a470d00200341a4136a2802002017460d030b200341f00b6a410b108e040c050b024020032802cc06450d002007102e0b200341f00b6a4108108e040c050b200341f00b6a41086a20023602002003200a3703f00b0c050b0240200341b4136a2207200341d0086a412010ec08450d00200341f00b6a4109108e040c030b20034188046a200720032903901320034190136a41086a29030010fb01200341e8056a4195fec6004108108102200341a8046a41f4f3c30041091081024120102c2207450d35200342203702e410200320073602e010200341e0106a200341b00a6a41201074200320032802e010220720032802e810220610a3013703b00e200341cc156a200720066a360200200320073602c8152003200341b00e6a41086a3602c4152003200341b00e6a3602c015200341b0086a200341c0156a107c024020032802e410450d002007102e0b4120102c2207450d35200342203702b40e200320073602b00e200341b00e6a200341f0066a41201074200341e0106a20032802b00e220720032802b80e220610d803200341cc156a200720066a360200200320073602c8152003200341f0106a3602c4152003200341e0106a3602c015200341900a6a200341c0156a107c024020032802b40e450d002007102e0b20032802b808220620032802980a22046a41206a2207417f4c0d210240024020070d00410121050c010b2007102c2205450d360b200341003602c815200320073602c415200320053602c015200341c0156a200341e8056a41101074200341c0156a200341a8046a41101074200341c0156a20032802b008220720061074200341c0156a20032802900a220620041074024020032802940a450d002006102e0b024020032802b408450d002007102e0b20032802c015220720032802c81510ff01024020032802c415450d002007102e0b200341f0066a109804200341cd156a200341d0086a41086a290300370000200341d5156a200341d0086a41106a290300370000200341dd156a200341d0086a41186a290300370000200341e5156a20032903b00a370000200341ed156a200341b00a6a41086a290300370000200341f5156a200341b00a6a41106a290300370000200341fd156a200341b00a6a41186a290300370000200341033a00c415200341143a00c015200320032903d0083700c515200341a8166a201a360200200341ac166a20173602002003419d166a200341f0066a41186a29000037000020034195166a200341f0066a41106a2900003700002003418d166a200341f0066a41086a29000037000020034185166a20032900f006370000200341c0156a10fe01200341063a00f00b024020032802ac1341ffffff3f71450d0020032802a813102e0b200241ffffff3f71450d042001102e0c040b200341023a00f00b0b200d42ffffff3f83500d022018102e0c020b20032802ac1341ffffff3f71450d0020032802a813102e0b200241ffffff3f71450d002001102e0b024020032d00f00b22024106460d0020032f00f10b210120032d00f30b2107200020032902f40b370024200020073a0023200020013b0021200041206a20023a0000200041186a41003a000020004200370308200042013703000c340b20004200370308200020032800e806360019200041186a41003a00002000411c6a200341eb066a280000360000200042003703000c330b200341c0156a200141046a41c80010e9081a20034190136a41286a200241286a28020036020020034190136a41206a200241206a29020037030020034190136a41186a200241186a29020037030020034190136a41106a200241106a29020037030020034190136a41086a200241086a29020037030020032002290200370390132000200341c0156a20034190136a10cf020c320b200341c0156a200141086a41a80210e9081a20034190136a41286a200241286a28020036020020034190136a41206a200241206a29020037030020034190136a41186a200241186a29020037030020034190136a41106a200241106a29020037030020034190136a41086a200241086a29020037030020032002290200370390132000200341c0156a20034190136a1080040c310b200141106a28020021232001410c6a2802002131200141086a280200211d200141066a2f0100210420012f01042107200241246a2d0000211c200241226a2f010021092002411a6a290100210b200241196a2d00002108200241186a2d00002111200241166a2f01002112200241156a2d00002113200241146a2d00002115200241106a28020021142002410c6a2802002116200241086a2802002118200241066a2f01002119200241056a2d0000211a200241046a2d00002101200241026a2f0100211720022d0001212220022d00002105200341f00b6a41026a2206200241276a2d00003a00002003200241256a2f00003b01f00b2002280228210202400240024002400240024002400240024002400240024002402007417f6a0e03000102000b024002400240024002400240024020050e03000102000b4100210441022107200121060240024020220e03000107000b4100210720012106410021040c060b41012107200121060c050b4101210441022106024020010e03020005020b41012106410121040c040b410221044102210620010e03000103000b410021060c010b410121060b0b200228020041016a221b41014d0d0b200341e4156a201c360200200341e2156a20093b0100200341da156a200b370100200341d9156a20083a0000200341d8156a20113a0000200341d6156a20123b0100200341d5156a20133a0000200341d4156a20153a0000200341d0156a2014360200200341cc156a2016360200200341c8156a20183602002002201b360200200320023602e815200320193b01c6152003201a3a00c515200320063a00c415200320173b01c215200320073a00c115200320043a00c015201d202341b0026c6a2107200341c0156a10a7052106024020230d004200210a201d21010c050b200341e0106a410472212120060d024200210a41002106201c2130201c2120201c2132201d210403402004280200211b20034190136a200441046a221e41ac0210e9081a200341c0156a201e41ac0210e9081a0240201b411c470d00200441b0026a21010c080b200341e0106a200341c0156a41ac0210e9081a200341b00e6a200341e0106a41ac0210e9081a200341800c6a200341b00e6a41ac0210e9081a2003201b3602e0102021200341800c6a41ac0210e9081a200341d0086a200341e0106a109704200341c0156a200341e0106a41b00210e9081a0240024002400240024020050e03000102000b4100211f4102211b2001211e0240024020220e03000105000b4100211b2001211e4100211f0c040b4101211b2001211e0c030b4101211f4102211e203221200240024020010e03000104000b4100211e203221200c020b4101211e203241807e71201c72222021324101211f0c020b4102211f203021204102211e02400240024020010e03000104000b4100211e0c010b203041807e71201c7221304101211e0b203021200b0b200228020041016a222441014d0d0c20022024360200200320023602b813200320203602b413200320093b01b2132003200b3701aa13200320083a00a913200320113a00a813200320123b01a613200320133a00a513200320153a00a413200320143602a0132003201636029c132003201836029813200320193b0196132003201a3a0095132003201e3a009413200320173b0192132003201b3a0091132003201f3a009013200341b00e6a200341c0156a20034190136a10dd020240024020032903b80e4201510d0020032903d008210c0c010b20032903d008220c20032903c00e220d200d200c561b210c0b427f200a200c7c220c200c200a541b210a024020032903b00e4201510d00200641016a2106200441b0026a22042007470d010c050b0b200441b0026a21010c080b200341f0066a41026a20062d00003a0000200320032f01f00b3b01f006024002400240024002400240024020050e03000102000b41002106410221070240024020220e03000107000b41002107410021060c060b410121070c050b410121062001210541022101024020050e03020005020b41012101410121060c040b41022106200121054102210120050e03000103000b410021010c010b410121010b0b200228020041016a220541014d0d0a200341e4156a201c360200200341e2156a20093b0100200341da156a200b370100200341c0156a41196a20083a0000200341c0156a41186a20113a0000200341d6156a20123b0100200341d5156a20133a0000200341d4156a220920153a0000200341c0156a41106a2014360200200341cc156a22082016360200200341c0156a41086a201836020020022005360200200320023602e815200320193b01c6152003201a3a00c515200320013a00c415200320173b01c215200320073a00c115200320063a00c01520034190136a200341c0156a10c102200341c8066a41086a220120034199136a290000370300200341c8066a41106a2207200341a1136a290000370300200341c8066a41186a220620034190136a41196a29000037030020032003290091133703c8060240024002400240024020032d0090134101460d00200341900a6a41186a2006290300220a370300200341900a6a41106a2007290300220b370300200341900a6a41086a2001290300220c370300200320032903c806220d3703900a2008200c3702002009200b370200200341dc156a200a370200200341b1c5cb003602c0152003200d3702c415200320043b01e4154112102c2201450d3d2003421237029413200320013602901320034190136a41b1c5cb004110107420034190136a200341c0156a41047241201074200320043b01e01020034190136a200341e0106a41021074200341a8066a200328029013220120032802981310b0010240200328029413450d002001102e0b20034120360294132003200341a8066a36029013200341c0156a20034190136a1093010240024020032d00c0154101470d00410021044200210a41002105410021094100210841002111410021124100211341002115410021144100211641002118410021190c010b200341d9156a290000210a200341d8156a2d00002104200341d7156a2d00002105200341d5156a2f00002109200341d4156a2d00002108200341d3156a2d00002111200341cf156a2800002112200341cb156a280000211320032800c715211520032f00c515211420032d00c415211620032d00c315211820032f00c11521190b4110102c2201450d3d200141f8f7c60036020c2001410136020820014281808080103702004110102c2207450d3d20074190f8c60036020c20074101360208200742818080801037020020012001280200417f6a2206360200024020060d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22062006280200417f6a220636020020060d002001102e0b200341f0066a41026a2201200341c0156a41026a2d00003a000020072007280200417f6a2206360200200320032f00c0153b01f006024020060d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22062006280200417f6a220636020020060d002007102e0b200341800c6a201d10970420034190136a201d41b00210e9081a200341b00a6a41026a20012d00003a0000200320032f01f0063b01b00a02400240200228020820034190136a200228020c28020c1101000d0020034180116a41023a0000200341f8106a41003a000020022002280200417f6a2201360200200342003703e810200342013703e010024020010d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b20034190136a10dc0220032903800c210a0c010b200341c0156a20034190136a41b00210e9081a200341ca0e6a200a370100200341c90e6a20043a0000200341c80e6a20053a0000200341c60e6a20093b0100200341c50e6a20083a0000200341c40e6a20113a0000200341b00e6a41106a2012360200200341bc0e6a2013360200200341b80e6a2015360200200341d50e6a20032f01b00a3b0000200341d70e6a200341b20a6a2d00003a0000200320143b01b60e200320163a00b50e200320183a00b40e200320193b01b20e20034180023b01b00e200320023602d80e200341e0106a200341c0156a200341b00e6a10dd02024020032903e8104201510d0020032903800c210a0c010b20032903800c220a200341e0106a41106a290300220b200b200a561b210a0b200320032800f9103602a8042003200341fc106a2800003600ab04200a42d0ceae3d7c220b200a54210620034188116a280200210220032903e0104201520d0120034180116a290300210c200320032800ab043600d308200320032802a8043602d008200320032802d0083602b008200320032800d3083600b308200c420888210a200328028c112101200ca72107410121040c020b20022002280200417f6a2201360200024020010d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b201d108b02201d102e4200210c410221070c020b200320032800ab043600d308200320032802a8043602d008410021040b427f200b20061b210b201d102e4201210c2004450d010b200320032800b3083600eb05200320032802b0083602e805200041276a200a4230883c0000200041256a200a4220883d00002000200a3e0021200041186a41003a0000200041106a200b3703002000200c370308200020032802e8053600192000411c6a20032800eb053600002000412c6a2001360200200041286a2002360000200041206a20073a0000200042013703000c3c0b200320032800b3083600eb05200320032802b0083602e805200041186a41003a0000200041106a200b37030020004201370308200020032802e8053600192000411c6a20032800eb05360000200042003703000c3b0b20034190136a41246a201c3a000020034190136a41226a20093b010020034190136a411a6a200b37010020034190136a41196a20083a000020034190136a41186a20113a000020034190136a41166a20123b010020034190136a41156a20133a000020034190136a41146a20153a000020034190136a41106a201436020020034190136a410c6a201636020020034190136a41086a2018360200200320193b0196132003201a3a009513200320013a009413200320173b019213200320223a009113200320053a00901320034190136a41256a20032f01f00b3b000020034190136a41276a20062d00003a0000200320023602b813200341e0106a410c6a2023360200200341e0106a41086a20313602002003201d3602e410200320034190136a3602e010200341c0156a200341e0106a10a40520032802b81322022002280200417f6a360200024020032802b81322022802000d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b20032802b81341046a22022002280200417f6a36020020032802b813220241046a2802000d002002102e0b200341d9156a2102200341c0156a41186a2d00002101200341c0156a41106a290300210a20032903c815210b024020032903c0154201520d00200320022800003602f0062003200241036a2800003600f306200341c0156a41206a280200210220032902e415210c20032802ec152107200041186a20013a0000200041106a200a3703002000200b370308200020032802f0063600192000411c6a20032800f3063600002000200736002c2000200c370024200041206a2002360000200042013703000c3b0b200320022800003602f0062003200241036a2800003600f306200041186a20013a0000200041106a200a3703002000200b370308200020032802f0063600192000411c6a20032800f306360000200042003703000c3a0b201c213041002106201c2124201c2132201d21044200210a03402004280200211b20034190136a200441046a221e41ac0210e9081a200341c0156a201e41ac0210e9081a201b411c460d03200341e0106a200341c0156a41ac0210e9081a200341b00e6a200341e0106a41ac0210e9081a200341800c6a200341b00e6a41ac0210e9081a2003201b3602e0102021200341800c6a41ac0210e9081a200341d0086a200341e0106a10970420034190136a200341e0106a41b00210e9081a0240024002400240024020050e03000102000b410021204102211b2001211e0240024020220e03000105000b4100211b2001211e410021200c040b4101211b2001211e0c030b410121204102211e203221240240024020010e03000104000b4100211e203221240c020b4101211e203241807e71201c7222242132410121200c020b41022120203021244102211e02400240024020010e03000104000b4100211e0c010b203041807e71201c7221304101211e0b203021240b0b200228020041016a221f41014d0d092002201f36020002400240200228020820034190136a200228020c28020c1101000d0020022002280200417f6a221b360200200341023a00d00e200341003a00c80e200342003703b80e200342013703b00e0240201b0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a221b201b280200417f6a221b360200201b0d002002102e0b20034190136a10dc0220032903d008210c0c010b200341c0156a20034190136a41b00210e9081a200320023602d80a200320243602d40a200320093b01d20a2003200b3701ca0a200320083a00c90a200320113a00c80a200320123b01c60a200320133a00c50a200320153a00c40a200320143602c00a200320163602bc0a200320183602b80a200320193b01b60a2003201a3a00b50a2003201e3a00b40a200320173b01b20a2003201b3a00b10a200320203a00b00a200341b00e6a200341c0156a200341b00a6a10dd02024020032903b80e4201510d0020032903d008210c0c010b20032903d008220c20032903c00e220d200d200c561b210c0b427f200a200c7c220c200c200a541b210a20032903b00e4201510d05200641016a2106200441b0026a22042007470d000b0b200721010b200341c0156a20034190136a41ac0210e9081a0c010b200441b0026a21010b024020072001460d0003402001108b022007200141b0026a2201470d000b0b02402031450d00203141b0026c450d00201d102e0b200341c8156a41063a0000200341113a00c015200341c0156a10fe0120022002280200417f6a22013602002023ad4288b0fa007e200a7c42c8b8fa067c210a20010d032002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a22013602002001450d020c030b200441b0026a21010b20034190136a41206a200341d80e6a290300220b37030020034190136a41186a200341b00e6a41206a290300220c37030020034190136a41106a200341b00e6a41186a29030037030020034190136a41086a200341b00e6a41106a290300370300200320032903b80e37039013200341c0156a41086a200c370300200341c0156a41106a200b3e0200200341113a00c015200320063602c415200641016aad4288b0fa007e210b200341c0156a10fe01024020072001460d0003402001108b022007200141b0026a2201470d000b0b200b200a7c210a02402031450d00203141b0026c450d00201d102e0b200a42c8b8fa067c210a20022002280200417f6a220136020020010d012002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d010b2002102e0b200320032800eb063600eb05200320032802e8063602e805200041186a41003a0000200041106a200a37030020004201370308200020032802e8053600192000411c6a20032800eb05360000200042003703000c310b00000b200341e8056a41026a22062001410f6a2d00003a0000200341800c6a41086a2204200141206a290200370300200341800c6a41106a2205200141286a290200370300200320012f000d3b01e8052003200141186a2902003703800c200141c8006a290300210d200141c0006a290300210e2002411a6a290100210c200241196a2d00002113200241186a2d00002115200241166a2f01002114200241156a2d00002116200241146a2d00002118200241126a2f01002119200241116a2d0000211a200241106a2d000021172002410e6a2f0100211b2002410d6a2d0000211c2002410c6a2d0000211d2002410a6a2f0100211e200241096a2d0000211f200241086a2d00002120200241066a2f01002121200241056a2d00002122200241046a2d00002123200241026a2f01002124200141d0006a2802002131200141146a2802002108200141106a28020021112001410c6a2d00002109200141386a290300210b200141306a290300210a2002280228210720022d0001211220022d0000210202400240024002400240200141086a2802000e050001020304000b200341c0156a41146a4101360200200342013702c4152003419cc3cb003602c015200341043602e410200341a4a7c7003602e0102003200341e0106a3602d015200341c0156a41aca7c7001044000b20072007280200417f6a220136020002400240024002400240200241ff01710d00024020010d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b201241ff01714101460d02200341c8066a41186a200341a8066a41186a290300370300200341c8066a41106a200341a8066a41106a290300370300200341c8066a41086a200341a8066a41086a290300370300200320032903a8063703c8060c010b024020010d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b200341c8066a41186a200341a8066a41186a290300370300200341c8066a41106a200341a8066a41106a290300370300200341c8066a41086a200341a8066a41086a290300370300200320032903a8063703c8060b200341023a0090130c010b2003201f3a00af06200320203a00ae06200320213b01ac06200320223a00ab06200320233a00aa06200320243b01a8062003201a3a00b706200320173a00b6062003201b3b01b4062003201c3a00b3062003201d3a00b2062003201e3b01b006200320133a00bf06200320153a00be06200320143b01bc06200320163a00bb06200320183a00ba06200320193b01b8062003200c3703c006200341c8066a41186a2202200c370300200341c8066a41106a220120032903b806370300200341c8066a41086a220720032903b006370300200320032903a8063703c806200341900a6a41186a22062002290300370300200341900a6a41106a22022001290300370300200341900a6a41086a22012007290300370300200320032903c8063703900a200341c0156a41186a2006290300370300200341c0156a41106a2002290300370300200341c0156a41086a2001290300370300200320032903900a3703c01520034190136a200341c0156a10b30320032d0090134106460d010b20032802901321022000200329029413370024200041206a2002360000200041186a41003a000020004200370308200042013703000c330b20004200370308200020032800e806360019200041186a41003a00002000411c6a200341eb066a280000360000200042003703000c320b200341a8046a41026a20062d00003a0000200341e0106a41086a2004290300370300200341e0106a41106a200529030037030020072007280200417f6a2201360200200320032f01e8053b01a804200320032903800c3703e0100240024002400240024002400240200241ff01710d00024020010d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b41012102201241ff01714101470d01200341d0086a41026a2201200341a8046a41026a2d00003a000020034190136a41086a2207200341e0106a41086a29030037030020034190136a41106a200341e0106a41106a290300370300200320032f01a8043b01d008200320032903e0103703901320090e03020403040b20010d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b41022102200341023a00b00a20094102470d0302402008450d002011102e0b410221020c030b200341f0066a41026a20012d00003a0000200341b00e6a41086a2007290300370300200341b00e6a410d6a20034190136a410d6a290000370000200320032f01d0083b01f00620032003290390133703b00e410021020c010b2008450d002011102e0b200341bb066a200341b00e6a41086a290300370000200341a8066a41186a2201200341bd0e6a290000370000200320032f01f0063b01a806200320083600af06200320113600ab06200320032903b00e3700b3062003200341f0066a41026a2d00003a00aa0602402002450d0041012102200341013a00b00a0c010b200341c0156a41186a2001290300370300200341c0156a41106a200341a8066a41106a290300370300200341c0156a41086a200341a8066a41086a290300370300200320032903a8063703c015200341b00a6a200341c0156a10b30320032d00b00a22024106460d010b20032f00b10a210120032d00b30a2107200020032902b40a370024200020073a0023200020013b0021200041206a20023a0000200041186a41003a000020004200370308200042013703000c320b20004200370308200020032800e806360019200041186a41003a00002000411c6a200341eb066a280000360000200042003703000c310b200341a8046a41026a20062d00003a0000200341b00e6a41086a2004290300370300200341b00e6a41106a2005290300370300200320032f01e8053b01a804200320032903800c3703b00e20072007280200417f6a220136020002400240024002400240024002400240200241ff01710d00024020010d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b201241ff01714101470d022003201f3a00cf06200320203a00ce06200320213b01cc06200320223a00cb06200320233a00ca06200320243b01c8062003201a3a00d706200320173a00d6062003201b3b01d4062003201c3a00d3062003201d3a00d2062003201e3b01d006200320133a00df06200320153a00de06200320143b01dc06200320163a00db06200320183a00da06200320193b01d8062003200c3703e006200341900a6a41186a2202200c370300200341900a6a41106a220120032903d806370300200341900a6a41086a220720032903d006370300200320032903c8063703900a200341e0106a41186a2002290300370300200341e0106a41106a2001290300370300200341e0106a41086a2007290300370300200320032903900a3703e010200a4280a094a58d1d544100200b501b450d01410321020c040b024020010d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b200341900a6a41186a200341c8066a41186a290300370300200341900a6a41106a200341c8066a41106a290300370300200341900a6a41086a200341c8066a41086a290300370300200320032903c8063703900a0c020b200341d0086a41026a2201200341a8046a41026a2d00003a0000200341c0156a41086a200341b00e6a41086a290300370300200341c0156a41106a200341b00e6a41106a290300370300200320032f01a8043b01d008200320032903b00e3703c0154101210202400240024020090e03000201020b200341f0066a41026a20012d00003a0000200341b00a6a41086a200341c0156a41086a290300370300200341b00a6a410d6a200341c0156a410d6a290000370000200320032f01d0083b01f006200320032903c0153703b00a410021020c010b2008450d002011102e0b200341bb066a200341b00a6a41086a290300370000200341a8066a41186a2201200341bd0a6a290000370000200320032f01f0063b01a806200320083600af06200320113600ab06200320032903b00a3700b3062003200341f0066a41026a2d00003a00aa060240024020020d0020034190136a41186a200129030037030020034190136a41106a200341a8066a41106a29030037030020034190136a41086a200341a8066a41086a290300370300200320032903a80637039013200341c0156a20034190136a10b10320032802c015220120032802c815108f022102024020032802c415450d002001102e0b2002450d014194a4c700ad210a4280808080f002210b4101210741192106410321020c050b4200210a410121024200210b0c050b200341c0156a200341e0106a20034190136a200a200b410110ca02024020032d00c01522024106470d00200341c0156a20034190136a10b10320032802c015220120032802c815108f022102024020032802c415450d002001102e0b2002450d06200341c8156a411736020020034194a4c7003602c415200341013a00c21520034183323b01c01541bca7c7004137200341c0156a41f4a7c7004184a8c700103e000b20032d00c315210120032d00c215210720032d00c115210620032902c415220a42808080807083210b0c040b200341900a6a41186a200341c8066a41186a290300370300200341900a6a41106a200341c8066a41106a290300370300200341900a6a41086a200341c8066a41086a290300370300200320032903c8063703900a0b410221020b4102210741ceeac700ad210a42808080809001210b4119210620094102470d002008450d002011102e41ceeac700ad210a0b0b200020013a0023200020073a0022200020063a0021200041206a20023a0000200041186a41003a0000200042003703082000200b42808080807083200a42ffffffff0f8384370024200042013703000c310b200341c0156a41186a2202200d3703002003200e3703d0152003200a3703c015200320313602e0152003200b3703c81520034190136a200341c0156a10b203200220034190136a41186a290300370300200341c0156a41106a20034190136a41106a290300370300200341c0156a41086a20034190136a41086a29030037030020032003290390133703c015200341b00a6a200341c0156a10b303200041186a41003a000020004200370308200020032800e8063600192000411c6a200341eb066a280000360000200042003703000c300b200141f0006a2903002110200141e8006a2903002128200141e0006a290300210c200141d8006a290300210f200141f8006a2802002114200ba72113200aa72101200a422088a72115200341a8046a41026a20062d00003a0000200341b00e6a41086a2004290300370300200341b00e6a41106a200529030037030020072007280200417f6a2206360200200320032f01e8053b01a804200320032903800c3703b00e0240024002400240024002400240200241ff01710d00024020060d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b41022102201241ff01710d0141032102200f4280a094a58d1d544100200c501b0d01200b422088a721062001410876210241012107200141ff01710e03020403040b4102210220060d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22062006280200417f6a220636020020060d002007102e0b200141ff01714102470d032013450d032015102e0c030b410021070c010b02402013450d002015102e0b0b200341df066a200d3700002003200e3700d706200320313a00e706200320063600d306200320133600cf06200320153600cb06200320023b01c806200320024110763a00ca06024020070d00200341e0106a41186a200341c8066a41186a290300370300200341e0106a41106a200341c8066a41106a290300370300200341e0106a41086a200341c8066a41086a290300370300200320032903c8063703e010200341d0086a41026a2201200341a8046a41026a2d00003a0000200320032f01a8043b01d008200341c0156a41086a2207200341b00e6a41086a290300370300200341c0156a41106a200341b00e6a41106a290300370300200320032903b00e3703c0154101210202400240024020090e03000201020b200341f0066a41026a20012d00003a0000200341b00a6a41086a2007290300370300200341b00a6a410d6a200341c0156a410d6a290000370000200320032f01d0083b01f006200320032903c0153703b00a410021020c010b2008450d002011102e0b200341bb066a200341b00a6a41086a290300370000200341a8066a41186a200341bd0a6a290000370000200320032f01f0063b01a806200320083600af06200320113600ab06200320032903b00a3700b3062003200341f0066a41026a2d00003a00aa060240024020020d0020034190136a41186a200341a8066a41186a29030037030020034190136a41106a200341a8066a41106a29030037030020034190136a41086a200341a8066a41086a290300370300200320032903a80637039013200341c0156a200341e0106a10b10320032802c015220120032802c815108f022102024020032802c415450d002001102e0b2002450d014194a4c700ad210a4280808080f002210b4101210141192107410321020c040b4200210a410121024200210b0c030b200341c0156a20034190136a200341e0106a200f200c410110ca020240024020032d00c01522024106470d00200341c0156a200341e0106a10b10320032802c015220120032802c815108f022102024020032802c415450d002001102e0b2002450d01200341c8156a411736020020034194a4c7003602c415200341013a00c21520034183323b01c01541bca7c7004137200341c0156a41f4a7c7004194a8c700103e000b20032d00c315210620032d00c215210120032d00c115210720032902c415220a42808080807083210b0c030b200341c0156a41186a22022010370300200320283703d0152003200f3703c015200320143602e0152003200c3703c815200341e0106a200341c0156a10b2032002200341e0106a41186a290300370300200341c0156a41106a200341e0106a41106a290300370300200341c0156a41086a200341e0106a41086a290300370300200320032903e0103703c015200341b00a6a200341c0156a10b303200041186a41003a000020004200370308200020032800e8063600192000411c6a200341eb066a280000360000200042003703000c320b410121020b4102210141ceeac700ad210a42808080809001210b41192107024020094102470d002008450d002011102e41ceeac700ad210a0b0b200020063a0023200020013a0022200020073a0021200041206a20023a0000200041186a41003a0000200042003703082000200b42808080807083200a42ffffffff0f8384370024200042013703000c2f0b200341a4066a41026a22192001410b6a2d00003a00002003419c066a41046a221a2001411c6a2d00003a0000200320012f00093b01a4062003200141186a28000036029c06200141286a290300210a200141206a290300210c200141086a2d000021042001410c6a2800002111200141106a2800002105200141146a2800002118200141306a290300210b200141386a290300210d200141c0006a290300210e200141c8006a2d0000211b20012d001d211720012f011e211e200341f00b6a41086a221f200141da006a2f00003b0100200341900a6a41086a2221200141e8006a2802003602002003200141cc006a280000360097062003200128004936029406200320012900523703f00b2003200141e0006a2903003703900a200141d0006a2d0000211c200141dc006a2802002120200141ec006a2802002122200141f0006a2802002123200141f4006a280200212420012d0051211d2003200241166a2901003703b00a20032002411c6a2901003701b60a200241246a2802002112200241156a2d00002113200241146a2d00002115200241106a28020021072002410c6a2802002108200241086a2802002109200241046a2802002106200241026a2f010021142002280228210120022d0001211620022d0000210202400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020040e06000102030405000b200341c0156a41146a4101360200200342013702c4152003419cc3cb003602c015200341043602ac0420034194c3cb003602a8042003200341a8046a3602d015200341c0156a41e0f3c0001044000b200341ff106a200a3c0000200341f3106a201a2d00003a00002003200c3700f710200320192d00003a00e210200320032f01a4063b01e010200320183600eb10200320053600e710200320113600e3102003200328029c063600ef102003201e3b00f510200320173a00f4102003200a4238883c00c6152003200a4228883d01c4152003200a4208883e02c0152003201b3a00df152003200e3700d7152003200d3700cf152003200b3700c715200341e3156a2003280097063600002003201d3a00e8152003201c3a00e71520032003280294063602e015200341f1156a201f2f01003b0000200320203600f315200320032903f00b3700e915200341ff156a20212f01003b0000200320032903900a3700f71520034190136a41156a20133a000020034190136a41146a20153a000020034190136a41106a200736020020034190136a410c6a200836020020034190136a41086a200936020020034190136a41246a20123602002003200636029413200320143b019213200320163a009113200320023a00901320034190136a41166a20032903b00a37010020034190136a411c6a20032901b60a370100200320013602b81320034190136a10bb060d04200341f0066a200341e0106a10e00220034190136a200341c0156a20032802f006220220032802f80641d4e2cc00410010e10220032d0090134101470d0520032003280095133600b30820032003280192133602b008200320032800b3083600eb05200320032802b0083602e805200320032d0091133a00800c200320032802e8053600810c200320032800eb053600840c20034199136a2d00002101200341a1136a28000021072003419a136a350100210a2003419e136a330100210b2003418f0c6a200341a0136a3100003c00002003418d0c6a200b3d00002003200a3e00890c200320073602900c200320013a00880c20034190136a200341800c6a10ab03200328029013220720032802981310e40241ff017121010240200328029413450d002007102e0b024020014102460d00200341a8046a410510b0030c140b200341b00e6a41106a200341800c6a41106a280200360200200341b00e6a41086a200341800c6a41086a290300370300200320032903800c3703b00e20034190136a41186a200341e0106a41186a29030037030020034190136a41106a200341e0106a41106a29030037030020034190136a41086a200341e0106a41086a290300370300200320032903e01037039013200341d0086a200341b00e6a20034190136a10ac03024020032d00d00822014106470d00024020032802f406450d002002102e0b200341063a00a8040c160b20032d00d108210720032d00d208210620032d00d3082104200320032902d4083702ac04200320043a00ab04200320063a00aa04200320073a00a904200320013a00a8040c130b200341800c6a41026a20192d00003a0000200341b00e6a41046a201a2d00003a0000200320032f01a4063b01800c2003200328029c063602b00e20032003280294063602c80620032003280097063600cb06200341b0086a41086a201f2f01003b0100200320032903f00b3703b008200341c0156a41156a20133a0000200341c0156a41146a20153a0000200341c0156a41106a2007360200200341c0156a410c6a2008360200200341c0156a41086a2009360200200341c0156a41246a2012360200200320063602c415200320143b01c215200320163a00c115200320023a00c015200341c0156a41166a20032903b00a370100200341c0156a411c6a20032901b60a370100200320013602e815200341c0156a10a7050d05200341c0066a22024200370300200341a8066a41106a22014200370300200341a8066a41086a22074200370300200342003703a806200341e8056a41b6d1cc0041061081022007200341e8056a41086a2204290300370300200320032903e8053703a806200341a8046a41e9f9c00041051081022002200341a8046a41086a2209290300370300200120032903a804370300200341d8036a200341a8066a412010f802200341d8036a41106a290300210f20032903e003211020032802d8032106200242003703002001420037030020074200370300200342003703a806200341e8056a41b6d1cc00410610810220072004290300370300200320032903e8053703a806200341a8046a41e9f9c000410510810220022009290300370300200120032903a80437030020032010420020061b2210200c7c22283703c0152003200f420020061b200a7c2028201054ad7c3703c815200341a8066a4120200341c0156a411010b201200341d3156a200341b40e6a2d00003a00002003200341820c6a2d00003a00c215200320032f01800c3b01c015200320183600cb15200320053600c715200320113600c315200320032802b00e3600cf15200341e8056a41b6d1cc004106108102200341a8046a41b6d1cc0041061081024114102c2202450d402003421437029413200320023602901320034190136a200341c0156a411410742003280298132202417f4c0d2c20032802901321010240024020020d00410121070c010b2002102c2207450d410b20072001200210e90821070240200328029413450d002001102e0b200241206a2201417f4c0d2c2001102c2206450d4020034100360298132003200136029413200320063602901320034190136a200341e8056a4110107420034190136a200341a8046a4110107420034190136a20072002107402402002450d002007102e0b200328029013210220032802981321012003200a3703c8152003200c3703c01520022001200341c0156a411010b2010240200328029413450d002002102e0b0240200b4201520d00200341c0156a41146a20032800cb06360000200341e2156a200341b8086a2f01003b01002003201b3a00d0152003200e3703c8152003200d3703c015200320032802c8063600d1152003201d3a00d9152003201c3a00d815200320032903b0083701da15200320203602e4152003200341820c6a2d00003a009213200320032f01800c3b0190132003201836009b1320032005360097132003201136009313200341a3136a200341b40e6a2d00003a0000200320032802b00e36009f13200341e8056a41b6d1cc004106108102200341a8046a41bcdbc80041071081024114102c2202450d41200342143702e410200320023602e010200341e0106a20034190136a4114107420032802e8102202417f4c0d2d20032802e01021010240024020020d00410121070c010b2002102c2207450d420b20072001200210e9082107024020032802e410450d002001102e0b200241206a2201417f4c0d2d2001102c2206450d41200341003602e810200320013602e410200320063602e010200341e0106a200341e8056a41101074200341e0106a200341a8046a41101074200341e0106a20072002107402402002450d002007102e0b20032802e010220220032802e810200341c0156a10ba0520032802e410450d002002102e0b0240201741ff017122024102460d00200341d3156a200341b40e6a2d00003a0000200320032f01800c3b01c015200320183600cb15200320053600c715200320113600c315200320032802b00e3600cf152003200341800c6a41026a2d00003a00c21520034190136a200341c0156a10e30220032802901321012003280298132107200341003602c815200342013703c0150240024020024101460d00200341003a00a804200341c0156a200341a8046a410110740c010b200341013a00a804200341c0156a200341a8046a410110740b2001200720032802c015220220032802c81510b201024020032802c415450d002002102e0b200328029413450d002001102e0b200041186a41003a000020004200370308200020032800e8063600192000411c6a200341eb066a280000360000200042003703000c430b200341ff106a200a3c0000200341f3106a201a2d00003a00002003200c3700f710200320192d00003a00e210200320032f01a4063b01e010200320183600eb10200320053600e710200320113600e3102003200328029c063600ef102003201e3b00f510200320173a00f4102003200a4238883c00c6152003200a4228883d01c4152003200a4208883e02c0152003201b3a00df152003200e3700d7152003200d3700cf152003200b3700c715200341e3156a2003280097063600002003201d3a00e8152003201c3a00e71520032003280294063602e015200341f1156a201f2f01003b0000200320203600f315200320032903f00b3700e915200341ff156a20212f01003b0000200320032903900a3700f71520034190136a41156a20133a000020034190136a41146a20153a000020034190136a41106a200736020020034190136a410c6a200836020020034190136a41086a200936020020034190136a41246a20123602002003200636029413200320143b019213200320163a009113200320023a00901320034190136a41166a20032903b00a37010020034190136a411c6a20032901b60a370100200320013602b81320034190136a10bb060d05200341d0086a200341e0106a10e00220034190136a200341c0156a20032802d008220220032802d8082022202410e10220032d0090134101470d0620032003280095133600b30820032003280192133602b008200320032800b3083600eb05200320032802b0083602e805200320032802e8053602a804200320032800eb053600ab0420034199136a2d00002107200341a1136a28000021062003419a136a350100210a2003419e136a330100210b20032d00911321042003419f136a200341a0136a310000220c3c00002003419d136a200b3d0000200320043a0090132003200a3e009913200320063602a013200320073a009813200320032802a80436009113200320032800ab0436009413200341b00e6a20034190136a10e30220032802b00e220520032802b80e10e40241ff01712101024020032802b40e450d002005102e0b024020014102460d00024041c40141c70120011b2024470d0041abcecc0041efcfcc0020011b2022202410ec08450d010b200341f0066a410510b0030c0f0b2003200a200b200c4210868442208684220a3e00b90e200341bf0e6a200a4230883c0000200341bd0e6a200a4220883d0000200320043a00b00e200320032802a8043600b10e200320032800ab043600b40e200320063602c00e200320073a00b80e20034190136a41186a200341e0106a41186a29030037030020034190136a41106a200341e0106a41106a29030037030020034190136a41086a200341e0106a41086a290300370300200320032903e01037039013200341800c6a200341b00e6a20034190136a10ac03024020032d00800c22014106470d00024020032802d408450d002002102e0b200341063a00f0062023450d112022102e0c110b20032d00810c210720032d00820c210620032d00830c2104200320032902840c3702f406200320043a00f306200320063a00f206200320073a00f106200320013a00f0060c0e0b200341c0156a41156a20133a0000200341c0156a41146a20153a0000200341c0156a41106a2007360200200341c0156a410c6a2008360200200341c0156a41086a2009360200200341c0156a41166a20032903b00a370100200341c0156a411c6a20032901b60a370100200341c0156a41246a2012360200200320063602c415200320143b01c215200320163a00c115200320023a00c015200320013602e81520034190136a200341c0156a10c102200341a8066a41086a20034190136a41096a290000370300200341a8066a41106a20034190136a41116a290000370300200341a8066a41186a200341a9136a29000037030020032003290091133703a80620032d0090134101460d06200341e0106a41186a200341a8066a41186a290300370300200341e0106a41106a200341a8066a41106a290300370300200341e0106a41086a200341a8066a41086a290300370300200320032903a8063703e01020034190136a200341e0106a108103200341c0156a2003280290132202200328029813108203200320032801c2153602b008200320032800c5153600b3080240024020032d00c0154101470d00200341ca156a350100200341ce156a330100200341c0156a41106a3100004210868442208684210a200341c0156a41116a2800002101200341c0156a41096a2d0000210720032d00c1152106200320032800b3083600eb05200320032802b0083602e8050240200328029413450d002002102e0b200320032800eb053600ab04200320032802e8053602a804200320032802a8043602d008200320032800ab043600d3082003200a3e00c915200341cf156a200a4230883c0000200341cd156a200a4220883d0000200320063a00c015200320032802d0083600c115200320032800d3083600c415200320013602d015200320073a00c81520034190136a200341c0156a10e302200328029013220420032802981310e40241ff017121020240200328029413450d002004102e0b20024102460d01024041c40141c70120021b2018470d0041abcecc0041efcfcc0020021b2011201810ec08450d020b200341800c6a410510b0030c0d0b0240200328029413450d002002102e0b200341800c6a410310b0030c0c0b2003200a3e0099132003419f136a200a4230883c00002003419d136a200a4220883d0000200320063a009013200320032802d00836009113200320032800d30836009413200320013602a013200320073a009813200341c0156a41186a200341e0106a41186a290300370300200341c0156a41106a200341e0106a41106a290300370300200341c0156a41086a200341e0106a41086a290300370300200320032903e0103703c015200341b00e6a20034190136a200341c0156a10ac03024020032d00b00e22024106470d00200341c0156a200341e0106a10810320032802c015220220032802c81510ff01024020032802c415450d002002102e0b200341063a00800c2005450d0d2011102e0c0d0b20032d00b10e210120032d00b20e210720032d00b30e2106200320032902b40e3702840c200320063a00830c200320073a00820c200320013a00810c200320023a00800c0c0b0b200341930c6a201a2d00003a0000200320192d00003a00820c200320032f01a4063b01800c2003201836008b0c200320053600870c200320113600830c2003200328029c0636008f0c200341b00e6a410b6a200a3700002003200c3700b30e2003201e3b00b10e200320173a00b00e2003200b3c00c30e2003200b4230883d01cc062003200b4210883e02c8062003201b3a00de062003200e3701d6062003200d3701ce06200341e2066a2003280097063600002003201d3a00e7062003201c3a00e60620032003280294063600df06200320032901b60a3701c615200320032903b00a3703c0150240200241ff017122044101470d0020012001280200417f6a220236020020032f01cc15210420032902c415210a20032d00c315210520032d00c215211120032f01c0152118024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b200641ff01710d072009410274200841036c490d070c090b20044103460d0820032801ca15210520032f01c815211120032903c015210c0c070b200341023a00a8040c0f0b200341a8046a410110b0030c0d0b20004200370024200041206a41023a0000200041186a41003a000020004200370308200042013703000c3d0b200341023a00f0060c090b200341f0066a410110b0030c070b200341023a00800c0c040b200320043b01cc15200320053a00c315200320113a00c215200320183b01c0152003200a3702c41520032801ca15210520032903c015210c4110102c2204450d36200441f8f7c60036020c410121022004410136020820044281808080103702004110102c2201450d36200a422088a7211120014190f8c60036020c20014101360208200142818080801037020020042004280200417f6a221836020020180d002004280208200428020c2802001103000240200428020c280204450d002004280208102e0b200441046a22182018280200417f6a221836020020180d002004102e0b200341e4156a2012360200200341c0156a41206a2005360200200341de156a20113b0100200341d6156a200c370100200341d5156a20133a0000200341d4156a20153a0000200341d2156a20074110763b0100200341d1156a20074108763a0000200341c0156a41106a20073a0000200341cc156a2008360200200341c0156a41086a2009360200200320013602e815200320063602c415200320143b01c215200320163a00c115200320023a00c015200341c0156a10a7050d010b200341c0156a200341800c6a10e202200341f0036a20032802c015220220032802c815220110f80220034180046a290300210c20032903f803210d024020032903f003220a4201520d002002200110ff010b200aa72101024020032802c415450d002002102e0b02402001450d0020034190136a200341b00e6a10e202200328029813210120032802901321022003200c3703c8152003200d3703c01520022001200341c0156a411010b201200328029413450d002002102e0b20034190136a200341800c6a10ad03200341c0156a2003280290132202200328029813220710ae03024020032903c01542015222010d002002200710ff010b200320032800d9153602f0062003200341dc156a2800003600f3060240024020010d00200341e0156a2d00002101200341d8156a2d00002107200341d0156a290300210a20032802ec15210620032902e415210c20032d00e315210420032d00e215210520032d00e115210920032903c815210d200320032800f3063600eb06200320032802f0063602e8060240200328029413450d002002102e0b200341d4156a20032800eb06360000200320073a00d0152003200a3703c8152003200d3703c015200320032802e8063600d115200320063602e4152003200c3702dc15200320043a00db15200320053a00da15200320093a00d915200320013a00d81520034190136a200341b00e6a10ad032003280290132202200328029813200341c0156a10ba05200328029413450d012002102e0c010b200328029413450d002002102e0b200341c0156a200341800c6a10ab03024020032802c015220120032802c815220710e40241ff017122024102460d002001200710ff010b024020032802c415450d002001102e0b024020024102460d0020034190136a200341b00e6a10ab0320032802981321072003280290132101200341003602c815200342013703c0150240024020024101460d00200341003a00a804200341c0156a200341a8046a410110740c010b200341013a00a804200341c0156a200341a8046a410110740b2001200720032802c015220220032802c81510b201024020032802c415450d002002102e0b200328029413450d002001102e0b200341a8066a41186a2202200341c8066a41186a290300370300200341a8066a41106a2201200341c8066a41106a290300370300200341a8066a41086a2207200341c8066a41086a290300370300200320032903c8063703a8060240200b4280fe0383428002520d00200341c0156a41186a2002290300370300200341c0156a41106a2001290300370300200341c0156a41086a2007290300370300200320032903a8063703c015200341f0066a200341c0156a10810320034190136a20032802f006220220032802f80622011082030240024020032d0090134101460d00200341003a00e0100c010b200341e0106a41136a20034190136a41136a2f00003b0000200341e0106a410b6a20034190136a410b6a290000370000200341e0106a41096a20034190136a41096a2f00003b000020032003290091133700e110200341013a00e010200341e0106a4101722207200341800c6a411410ec080d00200720032903b00e370000200741086a200341b00e6a41086a290300370000200741106a200341b00e6a41106a280200360000200341013a00e0100b20034190136a410d6a200341e0106a410d6a29000037000020034190136a41086a200341e0106a41086a290300370300200320032903e010220a3703901302400240200aa741ff01714101460d002002200110ff010c010b4114102c2207450d36200342143702d408200320073602d008200341d0086a20034190136a410172411410742002200120032802d008220720032802d80810b20120032802d408450d002007102e0b20032802f406450d002002102e0b200320032802e8053602b008200320032800eb053600b308200041186a41013a000020004200370308200020032802b0083600192000411c6a20032800b308360000200042003703000c370b200320032802e8053602b008200320032800eb053600b308200041186a41003a000020004200370308200020032802b0083600192000411c6a20032800b308360000200041206a41023a0000200042013703000c360b02402005450d002011102e0b20032d00800c22024106460d0020032f00810c210120032d00830c2107200020032902840c370024200020073a0023200020013b0021200041206a20023a0000200041186a41003a000020004200370308200042013703000c350b20004200370308200020032800e806360019200041186a41003a00002000411c6a200341eb066a280000360000200042003703000c340b20032802d408450d002002102e0b02402023450d002022102e0b20032d00f00622024106460d0020032f00f106210120032d00f3062107200020032902f406370024200020073a0023200020013b0021200041206a20023a0000200041186a41003a000020004200370308200042013703000c320b20004200370308200020032800e806360019200041186a41003a00002000411c6a200341eb066a280000360000200042003703000c310b024020032802f406450d002002102e0b20032d00a8044106460d010b20032802a8042102200020032902ac04370024200041206a2002360000200041186a41003a000020004200370308200042013703000c2f0b20004200370308200020032800e806360019200041186a41003a00002000411c6a200341eb066a280000360000200042003703000c2e0b200341d0086a41086a2222200141206a290300370300200341d0086a41106a2223200141286a2903003703002003200141186a2903003703d008200241246a2801002120200241226a2f010021212002411a6a290100210a200241196a2d00002115200241186a2d00002114200241166a2f01002116200241156a2d00002118200241146a2d00002119200241126a2f0100211a200241116a2d00002117200241106a2d0000211b2002410e6a2f010021052002410d6a2d000021092002410c6a2d000021082002410a6a2f01002111200241096a2d00002112200241086a2d00002113200241066a2f0100211c200241056a2d0000211d200241046a2d0000210441022124200241026a2f0100211e2001410c6a28020021062002280228210720022d0001211f20022d000021020240024002400240200141086a2802000e0400010203000b200341c0156a41146a4101360200200342013702c4152003419cc3cb003602c015200341043602e41020034194c3cb003602e0102003200341e0106a3602d015200341c0156a4184ccc2001044000b200141386a290300210b200141306a290300210c200141146a2802002124200141106a2802002101200341b00e6a41106a2023290300370300200341b00e6a41086a2022290300370300200320032903d0083703b00e200341c0156a41246a2020360200200341c0156a41226a20213b0100200341c0156a411a6a200a370100200341c0156a41196a20153a0000200341c0156a41186a20143a0000200341c0156a41166a20163b0100200341c0156a41156a20183a0000200341c0156a41146a20193a0000200341c0156a41126a201a3b0100200341c0156a41116a20173a0000200341c0156a41106a201b3a0000200341c0156a410e6a20053b0100200341c0156a410d6a20093a0000200341c0156a410c6a20083a0000200341c0156a410a6a20113b0100200341c0156a41096a20123a0000200341c0156a41086a20133a0000200320073602e8152003201c3b01c6152003201d3a00c515200320043a00c4152003201e3b01c2152003201f3a00c115200320023a00c01520034190136a200341c0156a10c10241012102024002400240024020032d0090134101460d0020034190136a41086a280200210720034190136a410c6a280200210420034190136a41106a280200210520034190136a41146a290200210a20032d009113210920032f019213210820032802941321112003200341ac136a35020020034190136a41206a31000042208684220d3e00fb10200341ff106a200d4220883c00002003200a3700f310200320053600ef10200320043600eb10200320073600e710200320113600e310200320083b00e110200320093a00e010200341c0156a41106a200341b00e6a41106a290300370300200341c0156a41086a2204200341b00e6a41086a290300370300200320032903b00e3703c01520064108762107024002400240200641ff01710e03000201020b20034190136a410d6a200341c0156a410d6a29000037000020034190136a41086a2004290300370300200320032903c01537039013410021020c010b2024450d002001102e0b200341a30a6a20034190136a41086a290300370000200341900a6a41186a22062003419d136a290000370000200320243600970a200320013600930a200320032903901337009b0a200320073b01900a200320074110763a00920a20020d02200341f0066a41186a2006290300370300200341f0066a41106a2206200341900a6a41106a290300370300200341f0066a41086a2204200341900a6a41086a290300370300200320032903900a3703f00620034198036a200c200b42c0843d420010e60820034188036a200c200b42c0843d420010e708200341f8026a20032903880320034188036a41086a29030042d08603420010e808200341c0156a200341e0106a20032903f802220d200329039803220a421480a7200a42d086037e42c0843d8242a0c21e566aad7c220a4280a094a58d1d200a4280a094a58d1d56200341f8026a41086a290300200a200d54ad7c220a420052200a501b22021b220d200a420020021b220a10c30220032d00c0154106460d014280808080c003210a410321020c030b410221020240200641ff01714102460d004200210a0c030b4200210a410221022024450d022001102e0c020b200341c8066a41186a22024200370300200341c8066a41106a22014200370300200341c8066a41086a22074200370300200342003703c806200341e8056a41bad7c70041081081022007200341e8056a41086a2205290300370300200320032903e8053703c806200341a8046a41e4afc900410d1081022002200341a8046a41086a2209290300370300200120032903a804370300200341f0026a200341c8066a4120108e0220032802f402210820032802f0022111200242003703002001420037030020074200370300200342003703c806200341e8056a41bad7c700410810810220072005290300370300200320032903e8053703c806200341a8046a41e4afc900410d10810220022009290300370300200120032903a80437030020032008410020111b220241016a3602c015200341c8066a4120200341c0156a410410b201200341c0156a41186a200a370300200341f8156a200341e0106a41186a290300370300200341f0156a200341e0106a41106a290300370300200341e8156a200341e0106a41086a29030037030020034188166a200429030037030020034190166a200629030037030020034198166a200341f0066a41186a2903003703002003200b3703c8152003200c3703c0152003200d3703d015200320032903e0103703e015200320032903f00637038016200341b00a6a200210d60320032802b80a210720032802b00a2101200341003602880c200342013703800c200341800c6a200341c0156a41206a412010742003200b370398132003200c37039013200341800c6a20034190136a41101074200341800c6a20034180166a412010742003200a370398132003200d37039013200341800c6a20034190136a411010742001200720032802800c220620032802880c10b201024020032802840c450d002006102e0b024020032802b40a450d002001102e0b200341cc156a2002360200200341c8156a41003a00002003410e3a00c015200341c0156a10fe01200041186a41003a000020004200370308200020032800e8063600192000411c6a200341eb066a280000360000200042003703000c310b4200210a410121020b200041133b002120004200370308200041206a20023a0000200041186a41003a00002000200a4280808080f0038341d0ffc300ad84370024200042013703000c2f0b0240200241ff01710d0020072007280200417f6a2202360200024020020d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b2003200a3703c006200320153a00bf06200320143a00be06200320163b01bc06200320183a00bb06200320193a00ba062003201a3b01b806200320173a00b7062003201b3a00b606200320053b01b406200320093a00b306200320083a00b206200320113b01b006200320123a00af06200320133a00ae062003201c3b01ac062003201d3a00ab06200320043a00aa062003201e3b01a8060240201f41ff01710d00410321020c010b4110102c2201450d2c200141f8f7c60036020c2001410136020820014281808080103702004110102c2207450d2c20074190f8c60036020c20074101360208200742818080801037020020012001280200417f6a22153602004100210220150d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22152015280200417f6a221536020020150d002001102e0b0240024002400240200241ff0171417f6a0e03000102010b20072007280200417f6a2202360200024020020d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b0240200441ff01710d00201141107420124108747220137241017420054110742009410874722008724b0d020b4110102c2202450d2e200241f8f7c60036020c2002410136020820024281808080103702004110102c2207450d2e20074190f8c60036020c20074101360208200742818080801037020020022002280200417f6a220136020020010d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b20072007280200417f6a22013602004200210a4102210202402001450d004200210b0c020b2007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22012001280200417f6a220136020002402001450d004200210b0c020b2007102e4200210b0c010b200341e8056a41bad7c7004108108102200341a8046a41dbafc9004109108102200320063602b0082003200341b0086a410410a3013703900a200341cc156a200341b0086a41046a3602002003200341900a6a41086a3602c4152003200341b0086a3602c8152003200341900a6a3602c015200341b00e6a200341c0156a107c20032802b80e220741206a2202417f4c0d180240024020020d00410121010c010b2002102c2201450d2d0b200341003602f806200320023602f406200320013602f006200341f0066a200341e8056a41101074200341f0066a200341a8046a41101074200341f0066a20032802b00e220220071074024020032802b40e450d002002102e0b200341c0156a20032802f006220220032802f806220110b805024020032903c0154201520d002002200110ff01200341b00e6a200341c0156a41086a41e00010e9081a200341800c6a200341b00e6a41e00010e9081a024020032802f406450d002002102e0b20034190136a41066a200341800c6a41e00010e9081a200341e0106a20034190136a41e60010e9081a200341b00a6a200341e0106a41066a41e00010e9081a200341b8036a200341d00a6a20032903c00a220e200341c80a6a290300220f10cb0220032903b803210a2003200341b8036a41086a290300220b3703c8152003200a3703c01502400240200a200b844200520d002003200341c0156a3602901320034190136a10cc020c010b200342f0f2bda1a7ee9cb9f90037039013200341c0156a20034190136a10cd02200341a8036a200341c0156a200a200b10fd01200341a0136a200341a8036a41086a290300220d200b7d20032903a803220c200a54ad7d200b200d7d200a200c54ad7d200c200a56200d200b56200d200b511b22021b3703002003200c200a7d200a200c7d20021b3703981320032002ad3703901320034190136a41086a21010240024020020d00200320013602e010200341e0106a10cc020c010b200320013602e010200341e0106a10ce020b200341d8156a200b370300200341d0156a200a370300200341c8156a41063a00002003410e3a00c015200341c0156a10fe010b200341c0156a41186a200f370300200341d0156a200e370300200341cc156a2006360200200341c8156a41033a00002003410e3a00c015200341c0156a10fe01200041186a41003a000020004200370308200020032800e8063600192000411c6a200341e8066a41036a280000360000200042003703000c300b200341b00e6a200341c8156a41e00010e9081a024020032802f406450d002002102e0b41caeac200ad210a4280808080c001210b410321020b20004193023b0021200042003703082000200b200a84370024200041206a20023a0000200041186a41003a0000200042013703000c2e0b200341c0156a41246a2020360200200341c0156a41226a20213b0100200341c0156a411a6a200a370100200341c0156a41196a20153a0000200341c0156a41186a20143a0000200341c0156a41166a20163b0100200341c0156a41156a20183a0000200341c0156a41146a20193a0000200341c0156a41126a201a3b0100200341c0156a41116a20173a0000200341c0156a41106a201b3a0000200341c0156a410e6a20053b0100200341c0156a410d6a20093a0000200341c0156a410c6a20083a0000200341c0156a410a6a20113b0100200341c0156a41096a20123a0000200341c0156a41086a20133a0000200320073602e8152003201c3b01c6152003201d3a00c515200320043a00c4152003201e3b01c2152003201f3a00c115200320023a00c0154200210a4200210b02400240200341c0156a10c60241ff01714102460d00200341c0156a200610d60320032802c015220120032802c815108f022102024020032802c415450d002001102e0b20020d0141caeac200ad210a4280808080c001210b410321240b20004193023b0021200042003703082000200b200a84370024200041206a20243a0000200041186a41003a0000200042013703000c2e0b200341c8066a41186a22024200370300200341d8066a22014200370300200341c8066a41086a22074200370300200342003703c806200341e8056a41bad7c70041081081022007200341e8056a41086a290300370300200320032903e8053703c806200341a8046a4194ccc20041091081022002200341a8046a41086a290300370300200120032903a8043703004104102c2202450d2a20034204370294132003200236029013200320063602c01520034190136a200341c0156a41041074200341c0156a41086a20032802981336020020032003290390133703c015200341c8066a4120200341c0156a10c702200041186a41003a000020004200370308200020032800e8063600192000411c6a200341eb066a280000360000200042003703000c2d0b200341c0156a200141046a41c40010e9081a20034190136a41286a200241286a28020036020020034190136a41206a200241206a29020037030020034190136a41186a200241186a29020037030020034190136a41106a200241106a29020037030020034190136a41086a200241086a29020037030020032002290200370390132000200341c0156a20034190136a10c7060c2c0b200341c0156a20034190136a410110f002200341c9156a2102024020032d00c0154101470d0020033500c5152002330000200341cb156a3100004210868442208684210d200341c0156a410c6a280200210220032d00c41521014200210e0c020b20032d00c1152101200341c0156a41086a41033a00002002200329039013370000200341d1156a20034190136a41086a290300370000200341d9156a200341a0136a290300370000200341e1156a20034190136a41186a2903003700002003410c3a00c015200341c0156a10fe010240200141ff01710d0010f7021a0b200320032802a8043602b008200320032800ab043600b308200041186a41003a000020004200370308200020032802b0083600192000411c6a20032800b308360000200042003703000c2b0b0b200320032800ab043600b308200320032802a8043602b008200041276a200d4230883c0000200041256a200d4220883d00002000200d3e0021200041186a41003a0000200041106a42d8e4970f3703002000200e370308200020032802b0083600192000411c6a20032800b308360000200041286a2002360000200041206a20013a0000200042013703000c290b200341063a00a8040b20004200370308200020032800e806360019200041186a41003a00002000411c6a200341eb066a280000360000200042003703000c270b20032d00f00622024106460d010b20032f00f106210120032d00f3062107200020032902f406370024200020073a0023200020013b0021200041206a20023a0000200041186a41003a000020004200370308200042013703000c250b20004200370308200020032800e806360019200041186a41003a00002000411c6a200341eb066a280000360000200042003703000c240b20032802b00a2102200020032902b40a370024200041206a2002360000200041186a41003a000020004200370308200042013703000c230b20004200370308200020032800e806360019200041186a41003a00002000411c6a200341eb066a280000360000200042003703000c220b20004200370308200020032800e805360019200041186a41003a00002000411c6a200341eb056a280000360000200042003703000c210b2000200a370024200020063a0023200020073a0022200020013a002120004200370308200041206a20023a0000200041186a41003a0000200042013703000c200b20004200370308200020032800e806360019200041186a41003a00002000411c6a200341eb066a280000360000200042003703000c1f0b20032d00c01521020b0240200241ff01714106460d0020032d00c115210120032d00c215210720032d00c315210620032902c415210a0c010b02402015450d002012102e0b20004200370308200020032800e806360019200041186a41003a00002000411c6a200341eb066a280000360000200042003703000c1d0b02402015450d002012102e0b2000200a370024200020063a0023200020073a0022200020013a002120004200370308200041206a20023a0000200041186a41003a0000200042013703000c1c0b20020d180c040b20032d00e0102101200341f00b6a41086a2002360200200320013a00f00b2003200a3e00f10b2003200a4230883c00f70b2003200a4220883d00f50b024020032802cc152202450d00200241246c2101201a210203400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b024020032802c8152202450d00200241246c450d00201a102e0b024020242007460d000340200610e1010240200641046a2802002202450d00200241246c450d002006280200102e0b200641f0006a2106200941907f6a22090d000b0b02402011450d00201141f0006c450d002004102e0b20032802b4082202450d02200241c4006c450d0220032802b008102e0c020b20242007460d002004200541f0006c6a210603402007220241046a220110e101200241f0006a21070240200241086a2802002202450d00200241246c450d002001280200102e0b20062007470d000b0b02402011450d00201141f0006c450d002004102e0b200341a80a6a4200370300200341a00a6a4200370300200341900a6a41086a22024200370300200342003703900a200341d0086a4190dac800410a1081022002200341d0086a41086a290300370300200320032903d0083703900a200341b00a6a41d5dac8004106108102201741086a200341b00a6a41086a290300370200201720032903b00a370200201541c4006c41046a2202417f4c0d0120032802b00821010240024020020d00410121070c010b2002102c2207450d160b200341003602c815200320023602c415200320073602c0152015200341c0156a107620012015200341c0156a109f01200341900a6a412020032802c015220220032802c81510b201024020032802c415450d002002102e0b200341063a00f00b20032802b4082202450d00200241c4006c450d002001102e0b024020032d00f00b22024106460d0020032f00f10b210120032d00f30b2107200020032902f40b370024200020073a0023200020013b0021200041206a20023a0000200041186a41003a000020004200370308200042013703000c180b20004200370308200020032800e806360019200041186a41003a00002000411c6a200341eb066a280000360000200042003703000c170b1038000b200341e8056a200341800c6a10c802200341c0156a20032802e805220120032802f005220710c90220032903c015210a200341a8046a41086a220220034190166a290300370300200320034188166a2903003703a80402400240200a4201510d00200341f0066a41086a4200370300200342003703f0060c010b200341f0066a41086a2002290300370300200320032903a8043703f0060b200341c0156a41c8006a20032903f00637030020034190166a200341f0066a41086a290300370300200342013703c015200341c0156a41386a202d4200201042015122021b370300200341f0156a202f420020021b370300200341c0156a41286a202c420020021b370300200341e0156a202b420020021b370300200341d8156a2025420020021b370300200341c0156a41106a2027420020021b37030020034180166a202a420020021b37030020032026420020021b3703c81520012007200341c0156a41086a10c805024020032802ec05450d002001102e0b20034190136a41106a290300211020034190136a41286a290300210e20034190136a41386a290300210b20034190136a41c8006a290300210c200329039813212620032903b013212920032903c013210a20032903d013210d200329039013212820032903a813210f0b024020284201520d00200341f8156a2010370300200341f0156a2026370300200341c0156a41086a41003a0000200341c9156a20032903800c370000200341d1156a200341800c6a41086a290300370000200341d9156a200341900c6a290300370000200341e1156a200341980c6a290300370000200341033a00c015200341c0156a10fe010b02400240200f50450d004200210f0c010b200341c0156a41186a200341800c6a41186a290300370300200341c0156a41106a200341800c6a41106a290300370300200341c0156a41086a200341800c6a41086a290300370300200320032903800c3703c0154201210f0b200341b00e6a41186a200341c0156a41186a22022903002210370300200341b00e6a41106a200341c0156a41106a22012903002228370300200341b00e6a41086a200341c0156a41086a22072903002226370300200320032903c01522273703b00e200341f0156a2206200e370300200341e8156a220420293703002001202637030020022028370300200341e0156a20103703002003200f3703c015200320273703c815200341c0156a10d204024020032903c015500d00200320043602901320034190136a10cc020b20034188166a200c37030020034180166a200d370300200341f8156a200b3703002006200a370300200741033a0000200341c9156a20032903800c370000200341d1156a200341800c6a41086a290300370000200341d9156a200341800c6a41106a290300370000200341e1156a200341800c6a41186a290300370000200341033a00c015200341c0156a10fe01200320032802c8063602f00b200320032800cb063600f30b200041186a41003a000020004200370308200020032802f00b3600192000411c6a20032800f30b360000200042003703000c140b200341900a6a41086a2201200341b0086a41086a2f01003b0100200320032802c8063602f00b200320032800cb063600f30b200320032903b0083703900a200041186a41003a000020004200370308200020032802f00b3600192000411c6a20032800f30b360000200041206a20023a0000200020032903900a3700222000412a6a20012f01003b0000200042013703000c130b20032d00800c22014106470d0141012101410221060b200341e0156a20032903d008370300200341f4156a20032800f30b360000200341e8156a200341d8086a290300370300200341d8156a200a3703002003200d3703c015200320063a00f015200320032802f00b3600f1152003200c3703c8152003200b3703d015024002402001450d002005200710ff010c010b20052007200341c0156a10c6050b410621010b20032902840c210a20032d00830c210720032d00820c210620032d00810c2104024020032802940a450d002005102e0b20014106460d010b2000200a370024200020073a0023200020063a0022200020043a002120004200370308200041206a20013a0000200041186a41003a0000200042013703000c0f0b200341e8156a2002360200200341cd156a200341b80e6a290300370000200341d5156a200341c00e6a290300370000200341dd156a200341b00e6a41186a290300370000200341023a00c415200341023a00c015200320032903b00e3700c515200341c0156a10fe01200041186a41003a000020004200370308200020032800e8063600192000411c6a200341eb066a280000360000200042003703000c0e0b20032d00e01022014106470d010b2005200710ff01410621010b20032902e410210a20032d00e310210720032d00e210210620032d00e1102104024020032802840c450d002005102e0b20014106460d010b2000200a370024200020073a0023200020063a0022200020043a002120004200370308200041206a20013a0000200041186a41003a0000200042013703000c0a0b200341c8156a2002360200200341013a00c415200341023a00c015200341c0156a10fe01200041186a41003a000020004200370308200020032800e8063600192000411c6a200341eb066a280000360000200042003703000c090b20032d00e01022024106470d0141012106410221020b200341e0156a20032903d008370300200341f4156a20032800f30b360000200341e8156a200341d8086a290300370300200341d8156a200a3703002003200d3703c015200320023a00f015200320032802f00b3600f1152003200c3703c8152003200b3703d015024002402006450d002001200710ff010c010b20012007200341c0156a10c6050b410621020b20032902e410210a20032d00e310210720032d00e210210620032d00e1102104024020032802940a450d002001102e0b20024106470d01200341cd156a20032903880c370000200341e8156a2011360200200341d5156a200341900c6a290300370000200341dd156a200341980c6a290300370000200341003a00c415200341023a00c015200320032903800c3700c515200341c0156a10fe01200341063a00b0080b20004200370308200020032800e806360019200041186a41003a00002000411c6a200341eb066a280000360000200042003703000c050b2003200a3702b408200320073a00b308200320063a00b208200320043a00b108200320023a00b0080b20032802b0082102200020032902b408370024200041206a2002360000200041186a41003a000020004200370308200042013703000c030b1036000b4103210641022107418fc2cb002101411d21020b02402011450d002008102e0b200320032800b00a3602d0082003200341b30a6a2800003600d308200041186a41003a000020004200370308200020032802d0083600192000411c6a20032800d308360000200041286a2002360200200041246a2001360200200020073a0022200041003a0021200041206a20063a0000200042013703000b200341f0176a24000b13002000410636020420004198f4c0003602000bf70802077f027e230041f0006b2202240002400240024002400240024020012d0000417f6a0e03010002000b200041003b0001200041013a0000200041036a41003a00000c030b200241386a200141016a10e00241002103200241d0006a200141216a20022802382204200228024041d4e2cc00410010e102200241286a200241db006a290000370300200241306a200241e3006a2f00003b01002002200229005337032020022d0052210520022d0051210620022d005021010240200228023c450d002004102e0b0c010b200241386a200141016a10e002200241d0006a200141216a200228023822072002280240200141e4006a2204280200200141ec006a220128020010e102200241286a200241db006a290000370300200241306a200241e3006a2f00003b010020022002290053370320200128020021082004280200210320022d0052210520022d0051210620022d00502101200228023c450d002007102e0b200241086a41106a200241206a41106a2f010022043b0100200241086a41086a200241206a41086a290300220937030020022002290320220a370308200241d0006a41106a220720043b0100200241d0006a41086a220420093703002002200a3703500240200141ff01714101470d002002412a6a2004290300370100200241326a20072f01003b0100200220053a0021200220063a002020022002290350370122200241d0006a200241206a10e202200228025022042002280258108f02210102402002280254450d002004102e0b024020010d00200041800e3b0001200041013a0000200041036a41013a00000c020b200241d0006a41106a200241206a41106a280200360200200241d0006a41086a200241206a41086a29030037030020022002290320370350200241386a200241d0006a10e30220022802382204200228024010e40241ff017121010240200228023c450d002004102e0b0240024020014102460d0002402003450d0041c40141c70120011b2008470d0041abcecc0041efcfcc0020011b2003200810ec08450d020b200041800e3b0001200041013a0000200041036a41033a00000c030b2003450d00200041800e3b0001200041013a0000200041036a41033a00000c020b410c102c2201450d02200241d0006a41106a200241206a41086a290300370300200241d0006a41186a200241206a41106a28020036020020024106360254200241eef8c00036025020022002290320370358410a102c2204450d022002420a37023c200220043602384106200241386a1076200241386a41eef8c00041061074200241386a200241d0006a41086a41141074200141086a200228024036020020012002290338370200200041306a41013a0000200041286a428180808010370200200041246a2001360200200041206a4100360200200041186a4204370300200041106a427f370300200041086a42e400370300200041316a2002280038360000200041346a2002413b6a280000360000200041003a00000c010b200041800e3b0001200041013a0000200041036a41003a00000b200241f0006a24000f0b1036000be80401097f230041306b22022400024002404120102c2203450d002002422037020420022003360200200220014120107441012104200228020822034101742201417f4c0d012002280200210502402001450d002001102c2204450d010b2000410036020820002004360200200041046a2206200136020002402003450d002003417f6a2107410021030240034020052d00002108024002400240024020032001470d00200141016a22092001490d082001410174220a2009200a20094b1b22094108200941084b1b21090240024020010d00200241003602200c010b2002410136022820022001360224200220043602200b200241106a20094101200241206a10d1042002280218210120022802104101460d01200020022802142204360200200620013602000b2000200341016a2209360208200420036a413041d700200841a001491b20084104766a3a000020092001470d0220062802002001470d02200141016a220420014f0d010c070b2001450d060c050b2001410174220a2004200a20044b1b22044108200441084b1b21040240024020010d00200241003602200c010b2002410136022820022001360224200220002802003602200b200241106a20044101200241206a10d1042002280218210120022802104101460d02200020022802142204360200200620013602000b2000200941016a2209360208200420036a41016a413041d7002008410f712201410a491b20016a3a00002007450d02200541016a21052007417f6a210720062802002101200921030c000b0b2001450d020c010b02402002280204450d002002280200102e0b200241306a24000f0b1036000b1038000bb40a02077f027e230041a0026b22062400024002400240024002400240200520036a41216a22070d0041012108410021094100210a0c010b4100210b4100210c4100210a410121080240024003402007410a7021090240200c200a470d00200c41016a220a200c490d05200b200a200b200a4b1b220a4108200a41084b1b210a02400240200c0d00200641003602d8010c010b200641013602e0012006200c3602dc01200620083602d8010b20064198016a200a4101200641d8016a107d20062802a001210a2006280298014101460d02200628029c0121080b2008200c6a20094130723a00002007410a490d02200c41016a210c200b41026a210b2007410a6e21070c000b0b200a450d020c050b200c41016a21090b411a102c220c450d032006411a36025c2006200c360258200c41002900f4f840370000200c41086a41002900fcf840370000200c41106a4100290084f940370000200c41186a41002f008cf9403b00002006411a360260024002402009450d002009411a6a22072009490d022006429a808080103702dc012006200c3602d80120064198016a20074134200741344b1b4101200641d8016a107d200641a0016a28020021072006280298014101460d01200628029c01210c2006200736025c2006200c3602580b20090d02411a210c0c030b20070d030b1038000b2008417f6a210b200c411a6a210c200921070340200c200b20076a2d00003a0000200c41016a210c2007417f6a22070d000b2009411a6a210c0b2006200c3602600240200a450d002008102e0b200641d8006a41b8fcc60041211074200641d8006a200220031074200641d8006a20042005107420062006280258220c200628026010e5020240200628025c450d00200c102e0b4100210c200641206a41106a4100360200200641206a41086a420037030020064200370320200641d8016a2001200610e602024020062d00d8014101460d00200641d0016a20064191026a290000370300200641c8016a20064189026a290000370300200641c0016a20064181026a290000370300200641b8016a200641f9016a290000370300200641b0016a200641f1016a29000037030020064198016a41106a200641e9016a29000037030020064198016a41086a200641e1016a290000370300200620062900d901370398014101210c0b200641d8016a41386a220720064198016a41386a290300370300200641d8016a41306a220b20064198016a41306a290300370300200641d8016a41286a220920064198016a41286a290300370300200641d8016a41206a220820064198016a41206a290300370300200641d8016a41186a220a20064198016a41186a290300370300200641d8016a41106a20064198016a41106a290300370300200641d8016a41086a20064198016a41086a29030037030020062006290398013703d80102400240200c450d00200641d8006a41386a2007290300370300200641d8006a41306a200b290300370300200641d8006a41286a2009290300370300200641d8006a41206a2008290300370300200641d8006a41186a200a290300370300200641d8006a41106a200641d8016a41106a290300370300200641d8006a41086a200641d8016a41086a290300370300200620062903d801370358200641386a200641d8006a41c00010e502200641206a41106a200641d4006a280000220c360200200641206a41086a200641cc006a290000220d37030020062006290044220e370320200041116a200c360000200041096a200d3700002000200e3700014101210c0c010b4100210c0b2000200c3a0000200641a0026a24000f0b1036000bf50101047f230041306b22022400200241b6d1cc004106108102200241106a41b6d1cc004106108102024002404114102c2203450d002002421437022420022003360220200241206a20014114107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000bf50101047f230041306b22022400200241b6d1cc004106108102200241106a41bcd1cc004107108102024002404114102c2203450d002002421437022420022003360220200241206a20014114107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000b800201027f230041d0006b220224002002200136020420022000360200200241086a2000200110ed0202400240200228020822010d00410221000c010b200228020c210302400240200241106a280200450d0041002100024020012d00000e020200010b410121000c010b20024100360220200242013703182002410a36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241909dc5003602382002200241286a360248200241346a419cebc000200241386a103d1a2002280218200228022010ef020240200228021c450d002002280218102e0b410221000b2003450d002001102e0b200241d0006a240020000b4c0020002002ad4220862001ad8410112201290000370000200041186a200141186a290000370000200041106a200141106a290000370000200041086a200141086a2900003700002001102e0ba80503017f017e027f23004190016b22032400024002402001200210052204422088a722020d00410121010c010b2004a721010b200320023602442003200136024002402002450d0020012d0000210520032002417f6a22063602442003200141016a36024002400240024020050e020001030b200341c8006a200341c0006a10a70120032d00484101460d02200341086a200341d2006a290100370300200341106a200341da006a290100370300200341186a200341e2006a290100370300200341206a200341ea006a290100370300200341286a200341f2006a290100370300200341306a200341fa006a290100370300200341376a20034181016a2900003700002003200329014a37030020032d00492102410021050c010b2006450d0120012d0001210520032002417e6a3602442003200141026a3602404100210202400240024020050e03020100040b410221020c010b410121020b200341376a200341c8006a41376a290000370000200341306a200341c8006a41306a290000370300200341286a200341c8006a41286a290000370300200341206a200341c8006a41206a290000370300200341186a200341c8006a41186a290000370300200341106a200341c8006a41106a290000370300200341086a200341c8006a41086a29000037030020032003290048370300410121050b200020023a0001200020053a0000200041026a20032903003700002000410a6a200341086a290300370000200041126a200341106a2903003700002000411a6a200341186a290300370000200041226a200341206a2903003700002000412a6a200341286a290300370000200041326a200341306a290300370000200041396a200341376a2900003700002001102e20034190016a24000f0b41cae0cc00412e200341c8006a41f8e0cc004188e1cc00103e000bb10201037f230041e0006b22022400200241086a418ef9c0004110108102200241186a41fbafc9004106108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241d0006a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000bb40102047f027e230041d0006b22012400200141106a200010e702200141206a200128021022022001280218220310e90202400240200128024022040d00420021054101210441002103420021060c010b2002200310ff01200128024441ffffff3f712103200141386a2903002106200129033021050b02402001280214450d002002102e0b02402003450d002004102e0b42f0d0c9abc6add9b1f400200010ea02200120002005200610fb01200141d0006a24000bf00304027f017e037f037e230041e0006b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022010d00200041003602200c010b200328021421022003200341186a280200360224200320013602202003200341206a10ab0102400240024002402003280200450d00200341003602480c010b200341c8006a200341206a200328020410920120032802482204450d00200329024c210502400240200328022422064110490d0020032003280220220741106a3602202003200641706a2208360224200841104f0d010b200542ffffff3f83500d012004102e0c010b200741086a29000021092007290000210a2003200641606a3602242003200741206a36022020040d010b20034100360230200342013703282003410a36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341909dc5003602482003200341386a360258200341c4006a419cebc000200341c8006a103d1a2003280228200328023010ef020240200328022c450d002003280228102e0b200041003602200c010b200741186a290000210b200020072900103703102000200a3703002000200537022420002004360220200041186a200b370300200020093703080b2002450d002001102e0b200341e0006a24000b9503010a7f230041206b2202240020022000370308200241106a200110d4062002280218210341002104200241003602180240024020030d0041002105200228021021060c010b2002280210220641106a2107410021054100210802400340024002402005450d00200620084105746a21092006200820046a4105746a210a0340200941106a220b2900002002290308510d02200a2009290300370300200a41186a200941186a290300370300200a41106a200b290300370300200a41086a200941086a290300370300200a41206a210a200941206a21092003200841016a22084b0d000c040b0b200720084105746a2109034020092900002002290308510d01200941206a21092003200841016a22084b0d000b410021050c030b2004417f6a2104200541016a21052003200841016a22084b0d000b0b024020050d00410021050c010b2006200820056b4105746a200620084105746a200320086b41057410ea081a0b2002200320056b220936021820012006200910d5060240200228021441ffffff3f71450d002006102e0b200241206a24000bca0101077f230041106b22022400200210ec0241012103200228020021044100210541002106024002400240200228020822070e020201000b4100210503402007410176220820056a2106200620052004200641306c6a2001412010ec084101481b2105200720086b220741014b0d000b0b02402004200541306c6a2001412010ec0822070d0020052106410021030c010b20052007411f766a21060b024020022802042205450d00200541306c450d002004102e0b2000200636020420002003360200200241106a24000bb40302047f017e23004180016b22012400200141206a22024200370300200141086a41106a22034200370300200141086a41086a420037030020014200370308200141086a418ef9c0004110108102200141e8006a419ef9c000410a1081022002200141e8006a41086a290000370300200320012900683703002001412036022c2001200141086a360228200141306a200141086a412010ed0202400240200128023022030d00410021020c010b200128023421042001200141306a41086a28020036024420012003360240200141e8006a200141c0006a10e90102400240200128026822020d004100210220014100360250200142013703482001410a36025c2001200141286a3602582001200141c8006a360264200141fc006a41013602002001420137026c200141909dc5003602682001200141d8006a360278200141e4006a419cebc000200141e8006a103d1a2001280248200128025010ef020240200128024c450d002001280248102e0b0c010b200129026c21050b2004450d002003102e0b0240024020020d0020004100360208200042083702000c010b20002005370204200020023602000b20014180016a24000b130020002002ad4220862001ad84102510da080bde0401047f230041c0006b220224002000280204210320002802002104200128021841a89fc00041012001411c6a28020028020c11000021000240024020030d00200021050c010b2002200436020441012105024020000d00024020012d0000410471450d0041012105200128021841f99ec0004101200128021c28020c1100000d012001280200210041012105200241013a001720022000360218200241c09ec00036023420022001290218370308200220012d00203a00382002200128020436021c20022001290210370328200220012902083703202002200241176a3602102002200241086a360230200241046a200241186a1087010d01200228023041d89ec0004102200228023428020c11000021050c010b200241046a200110870121050b20034101460d00200441016a21002003417f6a2103034020022000360204200541ff0171210441012105024020040d00024020012802002205410471450d00200241013a001720022005360218200241c09ec00036023420022001290218370308200220012d00203a00382002200128020436021c20022001290210370328200220012902083703202002200241176a3602102002200241086a3602300240200241046a200241186a1087010d00200228023041d89ec0004102200228023428020c11000021050c020b410121050c010b41012105200128021841bc9ec0004102200128021c28020c1100000d00200241046a200110870121050b200041016a21002003417f6a22030d000b0b41012100024020050d00200128021841fa9ec0004101200128021c28020c11000021000b200241c0006a240020000b0e002001ad4220862000ad8410160be52005067f017e027f067e057f230041f0026b22032400200341b8016a22044200370300200341a0016a41106a22054200370300200341a0016a41086a22064200370300200342003703a001200341e0006a418ef9c00041101081022006200341e0006a41086a2207290000370300200320032900603703a001200341e0006a41c7c3cb0041071081022004200729000037030020052003290060370300200341e0016a200341a0016a10f10220032802e0012206410820061b2108410021040240024002400240024002400240024002400240024002400240024002400240024020032902e401420020061b2209422088a7220a0e020201000b41002104200a210603402006410176220b20046a210720072004200820074106746a41206a2001412010ec084101481b21042006200b6b220641014b0d000b0b200820044106746a41206a2001412010ec080d002004200a4f0d01200820044106746a2206290310210c200641186a290300210d2006200641c0006a2004417f73200a6a41067410ea081a024002402002450d00200341106a2001200c200d10cb022003290310210e2003200341106a41086a290300220f3703e8012003200e3703e00102400240200e200f844200520d002003200341e0016a3602a001200341a0016a10cc020c010b200342f0f2bda1a7ee9cb9f9003703a001200341e0016a200341a0016a10cd022003200341e0016a200e200f10fd01200341b0016a200341086a2903002210200f7d20032903002211200e54ad7d200f20107d200e201154ad7d2011200e562010200f562010200f511b22041b37030020032011200e7d200e20117d20041b3703a80120032004ad3703a001200341a0016a41086a21060240024020040d0020032006360260200341e0006a10cc020c010b20032006360260200341e0006a10ce020b200341f8016a200f370300200341f0016a200e370300200341e8016a41063a00002003410e3a00e001200341e0016a10fe010b20034198026a200d37030020034190026a200c370300200341e0016a41086a41063a0000200341e9016a2001290000370000200341f1016a200141086a290000370000200341f9016a200141106a29000037000020034181026a200141186a2900003700002003410c3a00e001200341e0016a10fe010c010b200341306a2001200c200d10fb010b200341a0016a41186a220a4200370300200341a0016a41106a22024200370300200341a0016a41086a220b4200370300200342003703a001200341e0006a418ef9c0004110108102200b200341e0006a41086a2206290000370300200320032900603703a001200341e0006a41a8f9c0004109108102200541086a200629000037000020052003290060370000200341e0016a200341a0016a10f10220032802e0012204410820041b21070240024020032902e401420020041b220e422088a722040d00410021120c010b200341e0016a41386a20072004417f6a22134106746a220441386a290300370300200341e0016a41306a200441306a290300370300200341e0016a41286a200441286a290300370300200341e0016a41206a200441206a290300370300200341e0016a41186a200441186a290300370300200341e0016a41106a200441106a290300370300200341e0016a41086a200441086a290300370300200320042903003703e001200e42ffffffff0f832013ad42208684210e410121120b200341a0016a41386a2213200341e0016a41386a290300370300200341a0016a41306a2214200341e0016a41306a290300370300200341a0016a41286a2215200341e0016a41286a290300370300200341a0016a41206a2216200341e0016a41206a290300370300200a200341e0016a41186a22042903003703002002200341e0016a41106a220a290300370300200b200341e0016a41086a2202290300370300200320032903e0013703a001200320073602402003200e37024420044200370300200a420037030020024200370300200342003703e001200341e0006a418ef9c000411010810220022006290000370300200320032900603703e001200341e0006a41a8f9c000410910810220042006290000370300200a2003290060370300200341e0016a200341c0006a10f2020240200e42ffffff1f83500d002007102e0b20094280808080707c210e200341e0006a41086a2204200341a0016a41086a290300370300200341e0006a41106a2206200341a0016a41106a290300370300200341e0006a41186a2207200341a0016a41186a290300370300200341e0006a41206a2016290300370300200341e0006a41286a2015290300370300200341e0006a41306a2014290300370300200341e0006a41386a2013290300370300200320032903a001370360410021132012450d05200341e0016a41386a2212200341e0006a41386a290300370300200341e0016a41306a2214200341e0006a41306a290300370300200341e0016a41286a2215200341e0006a41286a290300370300200341e0016a41206a2202200341e0006a41206a290300370300200341e0016a41186a2007290300370300200341e0016a41106a2006290300370300200341e0016a41086a2004290300370300200320032903603703e001410021040240200e4220882210a722130e020403000b410021042013210603402006410176220b20046a210720072004200820074106746a41206a2002412010ec084101481b21042006200b6b220641014b0d000c030b0b0240200942ffffff1f83500d002008102e0b200341e0016a410d10f302200041013a00002000410c6a200341e8016a280200360200200041046a20032903e0013702000c0b0b2004200a1046000b200820044106746a41206a2002412010ec082206450d0120042006411f766a21040b200341a0016a41086a2015290300370300200341b0016a2014290300370300200341a0016a41186a201229030037030020032003290380023703a001200420134b0d09200341e0016a41186a290300210f200341e0016a41086a290300210c20032903f001210d20032903e001211102402013200ea7470d00201341016a22062013490d0620134101742207200620062007491b22064104200641044b1b220641ffffff1f712006464103742107200641067421060240024020130d00200341003602400c010b200341c0006a41086a410836020020032008360240200320104206863e02440b200341e0026a20062007200341c0006a107d200341e8026a280200210620032802e0024101460d0320032802e40221082006410676ad210e0b200820044106746a220641c0006a2006201320046b41067410ea081a200641186a200f3703002006200d3703102006200c37030820062011370300200620032903a001370320200641286a200341a8016a290300370300200641306a200341b0016a290300370300200641386a200341a0016a41186a290300370300200e42ffffffff0f8320094280808080708384210e0b410121130b2003200e3702a401200320083602a00120080d01200341f8016a4200370300200341e0016a41106a4200370300200341e0016a41086a22044200370300200342003703e001200341e0006a418ef9c00041101081022004200341e0006a41086a2206290000370300200320032900603703e001200341e0006a41c7c3cb004107108102200a41086a2006290000370000200a2003290060370000200341e0016a412010ff010c020b2006450d020c070b200341f8016a4200370300200341e0016a41106a4200370300200341e0016a41086a22044200370300200342003703e001200341e0006a418ef9c00041101081022004200341e0006a41086a2206290000370300200320032900603703e001200341e0006a41c7c3cb004107108102200a41086a2006290000370000200a2003290060370000200341e0016a200341a0016a10f2022008450d00200e42ffffff1f83500d002008102e0b200341b8016a4200370300200341a0016a41106a4200370300200341a0016a41086a22044200370300200342003703a001200341e0006a418ef9c00041101081022004200341e0006a41086a2206290000370300200320032900603703a001200341e0006a41c7c3cb004107108102200541086a200629000037000020052003290060370000200341e0016a200341a0016a10f10220032902e401420020032802e001220b1b2209422088a72207410674410675220441ffffff3f712004470d0020044105742206417f4c0d000240024020060d00410121020c010b2006102c2202450d060b024002402006410576221220044f0d00200641047622082004200820044b1b22044104200441044b1b220441ffffff3f712004462108200441057421040240024020060d00200341003602e0010c010b200341e8016a4101360200200320063602e401200320023602e0010b200341a0016a20042008200341e0016a107d200341a8016a280200210420032802a0014101460d0120032802a4012102200441057621120b200b4108200b1b211420070d02410021080c030b20040d050b1038000b2007410674210b200741067441406a4106762115200341e0016a41206a210720022104201421060340200341e0016a41386a200641386a290300370300200341e0016a41306a200641306a290300370300200341e0016a41286a200641286a2903003703002007200641206a290300370300200341a0016a41086a2208200741086a290000370300200341a0016a41106a2205200741106a290000370300200341a0016a41186a220a200741186a290000370300200320072900003703a001200441186a200a290300370000200441106a2005290300370000200441086a2008290300370000200420032903a001370000200441206a2104200641c0006a2106200b41406a220b0d000b201541016a21080b0240200942ffffff1f83500d002014102e0b200341c0006a41186a200141186a290000370300200341c0006a41106a200141106a290000370300200341c0006a41086a200141086a29000037030020032001290000370340200341a0016a41186a22044200370300200341a0016a41106a22064200370300200341a0016a41086a22074200370300200342003703a001200341e0006a41c8afc90041131081022007200341e0006a41086a220b290000370300200320032900603703a001200341e0006a41dbc3cb0041051081022004200b29000037030020062003290060370300200341e0016a200341a0016a412010f40220032d00e00121052004200341f9016a2900003703002006200341f1016a2900003703002007200341e9016a290000370300200320032900e1013703a0010240024020054101470d00200341e0006a41186a22052004290300370300200341e0006a41106a220a2006290300370300200b2007290300370300200320032903a001370360200341c0006a41012002200810f502200420052903003703002006200a2903003703002007200b290300370300200320032903603703a001200341a0016a2001412010ec08450d01200341f9016a200341b8016a290300370000200341f1016a200341b0016a290300370000200341e9016a200341a8016a290300370000200320032903a0013700e101200341013a00e001200341e0016a10f6020c010b200341c0006a41012002200810f5020b200041003a0000200020133a00012012450d002002102e0b200341f0026a24000f0b200420131045000b1036000b9c0804067f017e057f057e230041d0016b220224002002412036020c20022001360208200241106a2001412010ed02024002400240200228021022030d00200041003602000c010b200228021421042002200241186a280200360224200220033602202002200241206a10ab010240024020022802000d00024002402002280204220520022802244106762201200120054b1b22014106742206417f4c0d000240024020010d00410821070c010b2006102c2207450d060b2001ad2108024002402005450d00200241a8016a41017221090340200241a8016a200241206a10930120022d00a8014101460d0420024188016a41186a220a200941186a29000037030020024188016a41106a220b200941106a29000037030020024188016a41086a220c200941086a2900003703002002200929000037038801200228022422064110490d0420022002280220220141106a3602202002200641706a220d360224200d4110490d04200141086a290000210e2001290000210f200241c8006a41086a200c2903002210370300200241c8006a41106a200b2903002211370300200241c8006a41186a200a2903002212370300200241286a41086a220a2010370300200241286a41106a220b2011370300200241286a41186a220c20123703002002200641606a3602242002200141206a3602202002200229038801221037034820022010370328200141186a290000211020012900102111024020084220882212a722062008a7470d00200641016a22012006490d042006410174220d20012001200d491b22014104200141044b1b220141ffffff1f71200146410374210d200141067421010240024020060d00200241003602a8010c010b200241083602b001200220073602a801200220124206863e02ac010b20024188016a2001200d200241a8016a107d20022802900121012002280288014101460d03200228028c0121072001410676ad21080b200720064106746a220120113703102001200e3703082001200f370300200141186a201037030020012002290328370320200141286a200a290300370300200141306a200b290300370300200141386a200c290300370300200842ffffffff0f83200641016aad4220868421082005417f6a22050d000b0b2007450d0320002008370204200020073602000c040b20010d050b1038000b200842ffffff1f83500d002007102e0b200241003602900120024201370388012002410a36026c2002200241086a360268200220024188016a360248200241bc016a4101360200200242013702ac01200241909dc5003602a8012002200241e8006a3602b801200241c8006a419cebc000200241a8016a103d1a20022802880120022802900110ef020240200228028c01450d00200228028801102e0b200041003602000b2004450d002003102e0b200241d0016a24000f0b1036000b810202047f017e230041206b2202240002400240200128020822034106744104722204417f4c0d00200128020021012004102c2205450d0120024100360208200220043602042002200536020020032002107602402003450d002003410674210303402002200141206a41201074200129030021062002200141086a290300370318200220063703102002200241106a41101074200141106a29030021062002200141186a290300370318200220063703102002200241106a41101074200141c0006a2101200341406a22030d000b0b2000412020022802002201200228020810b20102402002280204450d002001102e0b200241206a24000f0b1038000b1036000be90301047f230041c0006b220224004182fcc10021034112210441102105024002400240024002400240024002400240024002400240024002400240024002400240200141ff01710e12000102030405060708090a0b0c0d0e0f1011000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a4184c2cc001044000b41f6fbc1002103410c2104410021050c0f0b41effbc100210341072104410121050c0e0b41e3fbc1002103410c2104410221050c0d0b41cffbc100210341142104410321050c0c0b41c5fbc1002103410a2104410421050c0b0b41b6fbc1002103410f2104410521050c0a0b41abfbc1002103410b2104410621050c090b41a1fbc1002103410a2104410721050c080b418efbc100210341132104410821050c070b4182fbc1002103410c2104410921050c060b41f4fac1002103410e2104410a21050c050b41dafac1002103411a2104410b21050c040b41e0c3cb00210341092104410c21050c030b41c8fac1002103410d21050c020b41b8fac100210341102104410e21050c010b41a7fac100210341112104410f21050b20004183223b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000b970302027f047e23004180016b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022010d00200041003a00000c010b200328021421042003200341106a41086a28020036026c20032001360268200341c0006a200341e8006a109301410121020240024020032d00404101470d004100210220034100360228200342013703202003410a3602742003200341086a3602702003200341206a36027c200341d4006a410136020020034201370244200341909dc5003602402003200341f0006a360250200341fc006a419cebc000200341c0006a103d1a2003280220200328022810ef022003280224450d012003280220102e0c010b200341386a200341c0006a41196a2900002205370300200341306a200341c0006a41116a2900002206370300200341206a41086a200341c0006a41096a2900002207370300200320032900412208370320200041196a2005370000200041116a2006370000200041096a2007370000200020083700010b200020023a00002004450d002001102e0b20034180016a24000bc210050b7f017e087f087e0b7f230022042105200441c0016b4160712206240002400240200141ffffff3f712001470d0020014105742207417f4c0d0041012108024002402007450d002007102c2208450d0120074105762109200821042007210a0340200a450d0120042000290000370000200441086a200041086a290000370000200441106a200041106a290000370000200441186a200041186a290000370000200441206a2104200a41606a210a200041206a21002009417f6a22090d000b0b2008200110fc02200641e0006a41186a220b4200370300200641e0006a41106a220c4200370300200641e0006a41086a220d42003703002006420037036020064180016a41c8afc9004113108102200d20064180016a41086a2200290000370300200620062900800137036020064180016a41dbafc9004109108102200b2000290000370300200c20062900800137030020064180016a200641e0006a4120108d032006280280012204410120041b210e200629028401420020041b220f422088a72204450d02200e20044105746a2110200641206a410c72211120064180016a410c6a2112200e2113034020064180016a41186a2214201341186a29000037030020064180016a41106a201341106a2900003703002000201341086a2900003703002006201329000037038001200641106a20064180016a10f50720064180016a200628021022152006280218221610b305200d201241086a290200370300200c201241106a2802003602002006201229020037036020062802a00121170240200628028801220a450d00200629038001211820112006290360370200201141086a200d290300370200201141106a200c28020036020020062018370320201721040b2006200a360228200641003602880120062903382119200620062903980122183703382006290330211a2006200629039001221b3703302006290320211c2006200629038001221d3703202006290328211e2006200629038801221f37032802400240201ea722200d00200421170c010b2006201c3703402006201e3703482006201a370350201e422088a721212006201937035802400240201aa722040d00201a422088a721222019422088a721042019a72123202021240c010b202020044105746a212220202125202021240340200b202541186a2900002218370300200c202541106a290000221b370300200d202541086a290000221d37030020002025290000221e370000200041086a2226201d370000200041106a2227201b370000200041186a222820183700002006201e37036020062024360284012006202036028001202541206a212541002104024002400240024020010e020201000b410021042001210a0340200a410176222920046a210920092004200820094105746a2000412010ec084101481b2104200a20296b220a41014b0d000b0b200820044105746a2000412010ec08450d010b20242000290000370000202441186a2028290000370000202441106a2027290000370000202441086a2026290000370000202441206a21240b20252022470d000b200628025c210420062802582123200628025421220b201fa7212a2006202136024c200620203602482006202420206b4105753602500240024020040d00202221240c010b202220044105746a212020222125202221240340200b202541186a2900002218370300200c202541106a290000221b370300200d202541086a290000221d37030020002025290000221e370000200041086a2226201d370000200041106a2227201b370000200041186a222820183700002006201e37036020062024360284012006202236028001202541206a212541002104024002400240024020010e020201000b410021042001210a0340200a410176222920046a210920092004200820094105746a2000412010ec084101481b2104200a20296b220a41014b0d000b0b200820044105746a2000412010ec08450d010b20242000290000370000202441186a2028290000370000202441106a2027290000370000202441086a2026290000370000202441206a21240b20252020470d000b0b20062023360258200620223602542006202420226b41057536025c2006290348211f2006290340211d2006290350211b200629035821180240202a450d000240200628022c41ffffff3f71450d002006280228102e0b200628023841ffffff3f71450d002006280234102e0b2006201d3703202006201f3703282006201b370330200620183703380b2006201f370388012006201b37039001201420183703002006201d37038001200620173602a00102400240201fa722040d002015201610ff010c010b2018a7210a2015201620064180016a10c0050240201f422088a741ffffff3f71450d002004102e0b200a41ffffff3f71450d00201b422088a7102e0b201341206a211302402006280214450d002015102e0b2017210420132010470d000c030b0b1036000b1038000b0240200f42ffffff3f83500d00200e102e0b20064198016a2200420037030020064190016a2204420037030020064180016a41086a220a42003703002006420037038001200641e0006a41c8afc9004113108102200a200641e0006a41086a22092900003703002006200629006037038001200641e0006a41c7c3cb004107108102200020092900003703002004200629006037030020064180016a2002200310c5052000420037030020044200370300200a42003703002006420037038001200641e0006a41c8afc9004113108102200a20092900003703002006200629006037038001200641e0006a41dbc3cb004105108102200020092900003703002004200629006037030020064180016a412010ff0102402007450d002008102e0b200524000bdc0301057f230041f0006b2201240020002d00002102200141186a2203200041196a290000370300200141106a2204200041116a290000370300200141086a2205200041096a2900003703002001200029000137030002400240024020020d00200141c0006a41186a22004200370300200141c0006a41106a22024200370300200141c0006a41086a420037030020014200370340200141c0006a41c8afc9004113108102200141206a41dbc3cb0041051081022000200141206a41086a29000037030020022001290020370300200141c0006a412010ff010c010b200141206a41186a2003290300370300200141206a41106a2004290300370300200141206a41086a200529030037030020012001290300370320200141c0006a41186a22004200370300200141c0006a41106a22024200370300200141c0006a41086a420037030020014200370340200141c0006a41c8afc9004113108102200141e0006a41dbc3cb0041051081022000200141e0006a41086a290000370300200220012900603703004120102c2200450d012001422037026420012000360260200141e0006a200141206a41201074200141c0006a412020012802602200200128026810b2012001280264450d002000102e0b200141f0006a24000f0b1036000be4750d067f017e047f017e0b7f057e027f027e027f027e027f017e177f230041f0036b22002400200041d0016a10ec02200041c0026a41186a22014200370300200041c0026a41106a22024200370300200041c0026a41086a22034200370300200042003703c002200041f0026a418ef9c00041101081022003200041f0026a41086a2204290000370300200020002900f0023703c002200041f0026a41c7c3cb00410710810220012004290000370300200220002900f002370300200041f0026a200041c0026a10f10220002802f002210520002902f4022106200142003703002002420037030020034200370300200042003703c002200041f0026a418ef9c000411010810220032004290000370300200020002900f0023703c002200041f0026a41a8f9c000410910810220012004290000370300200220002900f002370300200041f0026a200041c0026a10f1022005410820051b210720002802f0022208410820081b21092006420020051b2206a7210a20002902f402420020081b220ba7210c0240024002400240024002402006422088a7220d410674220e4106752208200b422088a7220f41067422104106756a22052008490d002005ad42307e2206422088a70d042006a72208417f4c0d04024020080d00410821110c020b2008102c22110d010c050b2007200e6a2112200920106a2113200a41ffffff1f7121144100210a4100210f4100210d41002115410821112007210e200921080340024002400240024020070d00200721050c010b2012200e470d01410021052014450d002007102e0b024020132008460d00200829031021062002200841306a2903003703002003200841286a290300370300200841186a290300210b2001200841386a290300370300200020082903203703c002200841c0006a2108200521070c020b200c41ffffff1f710d040c050b200e29031021062002200e41306a2903003703002003200e41286a290300370300200e41186a290300210b2001200e41386a2903003703002000200e2903203703c002200e41c0006a210e0b200041f0026a41186a22102001290300370300200041f0026a41106a2216200229030037030020042003290300370300200020002903c0023703f00202400240200d2015470d00024002402007450d00417f2012200e6b4106752205201320086b4106756a221520152005491b21050c010b201320086b41067521050b200d417f200541016a221520152005491b6a2205200d490d06200f2005200f20054b1b22054104200541044b1bad42307e2217422088a74541037421052017a7211502400240200d0d00200041003602a0020c010b200041083602a8022000200a3602a402200020113602a0020b20004180026a20152005200041a0026a107d20002802880221052000280280024101460d012000280284022111200541306e21150b2011200a6a220520002903f002370300200429030021172016290300211820102903002119200541286a200b370300200541206a2006370300200541186a2019370300200541106a2018370300200541086a2017370300200a41306a210a200f41026a210f200d41016a210d0c010b0b20050d040c030b0240024002400240200841306e221520054f0d00201541017422082005200820054b1b22054104200541044b1bad42307e2206422088a74541037421052006a721080240024020150d00200041003602f0020c010b200041f0026a41086a4108360200200020113602f0022000201541306c3602f4020b200041c0026a20082005200041f0026a107d200041c8026a280200210520002802c0024101460d0120002802c4022111200541306e21150b200d0d014100210d201121050c020b20050d050c040b200741206a2108200d410674220d41406a4106762101201121050340200841086a2903002106200841106a290300210b200841186a2903002117200841706a220e41086a290300211820082903002119200541206a200e290300370300200541286a2018370300200541186a2017370300200541106a200b370300200541086a200637030020052019370300200541306a2105200841c0006a2108200d41406a220d0d000b200141016a210d0b0240200a41ffffff1f71450d002007102e0b0240200f450d00200f410674210e200941206a21080340200841086a2903002106200841106a290300210b200841186a2903002117200841706a220a41086a290300211820082903002119200541206a200a290300370300200541286a2018370300200541186a2017370300200541106a200b370300200541086a200637030020052019370300200541306a2105200841c0006a2108200d41016a210d200e41406a220e0d000b0b200c41ffffff1f71450d010b2009102e0b0240024020002802d401220820002802d80122056b200d490d0020002802d00121080c010b2005200d6a220e2005490d0120084101742205200e2005200e4b1b22054104200541044b1bad42307e2206422088a74541037421052006a7210e0240024020080d00200041003602f0020c010b200041f0026a41086a4108360200200020002802d0013602f0022000200841306c3602f4020b200041c0026a200e2005200041f0026a107d200041c8026a2802002105024020002802c0024101460d00200020002802c40222083602d0012000200541306e3602d40120002802d80121050c010b20050d020c010b2008200541306c6a2011200d41306c10e9081a200020002802d801200d6a22083602d80102402015450d00201541306c450d002011102e20002802d80121080b02400240024020080d00200041f8026a41013a00002000410c3a00f002200041f0026a10fe01024020002802d4012205450d00200541306c450d0020002802d001102e0b42c0b2cd3b21060c010b200841ffffff3f712008470d022008410574220d417f4c0d0220002802d0012105200d102c2204450d030240024002400240200d410576221020084f0d00200041f0026a41086a4101360200200020043602f0022000200d3602f402200041c0026a200d410476220d2008200d20084b1b220d4104200d41044b1b220d410574200d41ffffff3f71200d46200041f0026a107d200041c0026a41086a280200210d20002802c0024101460d0120002802c4022104200d41057621100b20052005200841306c6a470d01410021160c020b200d0d050c040b200841306c220d41506a41306e210e20042108034020082005290000370000200841186a200541186a290000370000200841106a200541106a290000370000200841086a200541086a290000370000200841206a2108200541306a2105200d41506a220d0d000b200e41016a21160b200041d8026a4200370300200041c0026a41106a4200370300200041c0026a41086a22054200370300200042003703c002200041f0026a41f8fcc60041081081022005200041f0026a41086a2208290000370300200020002900f0023703c002200041f0026a41a8aac800410d108102200241086a2008290000370000200220002900f002370000200041b8016a200041c0026a412010f802200041b8016a41106a290300211a20002903c001211b20002802b8012103200041f0016a418ef9c0004110108102200041c0026a41fbafc90041061081024120102c2205450d03200042203702f402200020053602f002200041f0026a200041f0016a41101074200041f0026a200041c0026a4110107420002802f8022205417f4c0d0220002802f002210d0240024020050d00410121080c010b2005102c2208450d040b2008200d200510e9082108200041e0016a41086a200041f0026a41086a220a280200220d360200200041dc016a41026a220e200041c0026a41026a2d00003a0000200020002903f00222063703e001200020002f00c0023b01dc0120004194026a200d3602002000200536028802200020053602840220002008360280022000200637028c02200041003a009c022000410b360298022000419f026a200e2d00003a0000200020002f01dc013b009d02200041f0026a20004180026a10fa02024002400240024002400240024002400240024020002802b00322050d000240200028028402450d00200028028002102e0b4108211c4100211d024020004190026a280200450d00200028028c02102e0b4100210c0c010b200041c0026a41186a2208200041f0026a41186a290300370300200041c0026a41106a220d200041f0026a41106a290300370300200041c0026a41086a200a290300370300200020002903f0023703c002200041f0026a41286a2903002106200029039003210b20002902b403211741c000102c221c450d0c201c200b370300201c20002903c002370310201c2017370234201c2005360230201c2006370308201c41186a200041c0026a41086a2202290300370300201c41206a200d290300370300201c41286a2008290300370300200041a0026a41186a20004180026a41186a290300370300200041a0026a41106a20004180026a41106a290300370300200041a0026a41086a20004180026a41086a29030037030020002000290380023703a002200041f0026a200041a0026a10fa020240024020002802b00322070d004101210c4101211d0c010b41f400210d20004198036a21014101210c4101211d0340200041c0026a41186a200041f0026a41186a220e2903002206370300200041c0026a41106a200041f0026a41106a220a290300220b3703002002200041f0026a41086a220f2903002217370300200020002903f00222183703c00220012903002119200029039003211e20002902b403211f200e2006370300200a200b370300200f2017370300200020183703f0020240201d200c470d00200c41016a2205200c490d0e200c41017422082005200820054b1b22054104200541044b1b220541ffffff1f7120054641037421082005410674210502400240200c0d00200041003602f0010c010b200041083602f8012000201c3602f0012000200c4106743602f4010b200041e0026a20052008200041f0016a107d20002802e802210520002802e0024101460d0420002802e402211c2005410676210c0b201c200d6a2205414c6a220820193703082008201e3703002005415c6a220820002903f002370300200841086a200f290300370300200841106a200a290300370300200841186a200e2903003703002005201f3702002005417c6a2007360200200d41c0006a210d201d41016a211d200041f0026a200041a0026a10fa0220002802b00322070d000b0b024020002802a402450d0020002802a002102e0b200041b0026a280200450d0020002802ac02102e0b201d41ffffff1f7141386c2220417f4c0d0a0240024020200d00410821210c010b2020102c2221450d0c0b201a420020031b2122201b420020031b212302400240201c201d41067422246a201c470d0041002125420021260c010b200041a8016a20232022427f420010e708200041a8016a41086a2903002206420020002903a801220b42015620064200522006501b22051b211e200b420120051b211f201c201d4106746a2101200041f0026a41306a2103200041f0026a41106a210d4100210e4100212520212105201c21080340200d41186a220f200841286a290300370300200d41106a2207200841206a290300370300200d41086a2202200841186a290300370300200d200841106a2903003703002000200841086a2903003703f802200020082903003703f0022003200841306a10c80120004198016a20002903f00220002903f802201f201e10e70820002903a003210620002802a803210a2005200029039801427f20004198016a41086a290300501b3703002002290300210b20072903002117200f2903002118200d2903002119200541306a200a360200200541206a2018370300200541186a2017370300200541106a200b370300200541086a2019370300200541286a2006370300417f200e200a6a220a200a200e491b210e200541386a2105202541016a21252001200841c0006a2208470d000b200ead42a895b1037e21260b20003502d801211a200020163602a802200020103602a402200020043602a0022025ad221b42387e2206422088a70d0a2006a7220e417f4c0d0a02400240200e0d00410821050c010b200e102c2205450d0c0b200041003602c802200020053602c0022000200e41386e22073602c4020240200e4138490d00200041f0026a41286a210f200041f0026a41086a210d202121082007210a0340200e450d01200a450d04200d2008290308370300200d41186a200841206a290300370300200d41106a200841186a290300370300200d41086a200841106a290300370300200020082903003703f002200f200841286a10c801200541306a200041f0026a41306a290300370300200541286a200f290300370300200541206a200041f0026a41206a290300370300200541186a200041f0026a41186a290300370300200541106a200041f0026a41106a290300370300200541086a200d290300370300200520002903f002370300200541386a2105200e41486a210e200841386a2108200a417f6a220a0d000b0b200020253602c80242002106200042003703f00220004180026a4121200041a0026a200041c0026a200041f0026a10fb022000280280024101460d032000418c026a28020021014108210220004180026a41086a280200212720004180026a41186a280200212820004194026a280200212920004180026a41106a280200212a200028028402212b200041f0026a41186a22054200370300200041f0026a41106a222c4200370300200041f0026a41086a22084200370300200042003703f002200041f0016a418ef9c00041101081022008200041f0016a41086a290000370300200020002900f0013703f002200041c0026a41c7c3cb0041071081022005200041c0026a41086a290000370300202c20002900c002370300200041c0026a200041f0026a10f102024020002802c0022205450d00200041f0026a412010ff0120002902c4022106200521020b2006422088a7220d410674410675220541ffffff3f712005470d0a20054105742208417f4c0d0a0240024020080d004101212d0c010b2008102c222d450d0c0b02400240024002402008410576222e20054f0d002008410476220e2005200e20054b1b22054104200541044b1b220541ffffff3f71200546210e200541057421050240024020080d00200041003602f0020c010b200041f8026a4101360200200020083602f4022000202d3602f0020b200041c0026a2005200e200041f0026a107d200041c8026a280200210520002802c0024101460d0120002802c402212d2005410576212e0b200d0d014100212f0c020b20050d0d0c0c0b200d410674210e200d41067441406a4106762103200041f0026a41206a210d202d2105200221080340200041f0026a41386a200841386a290300370300200041f0026a41306a200841306a290300370300200041f0026a41286a200841286a290300370300200d200841206a290300370300200041c0026a41086a220a200d41086a290300370300200041c0026a41106a220f200d41106a290300370300200041c0026a41186a2207200d41186a2903003703002000200d2903003703c002200541186a2007290300370000200541106a200f290300370000200541086a200a290300370000200520002903c002370000200541206a2105200841c0006a2108200e41406a220e0d000b200341016a212f0b0240200642ffffff1f83500d002002102e0b4200210620004188036a4200370300200041f0026a41106a420037030041082102200041f0026a41086a22054200370300200042003703f002200041f0016a418ef9c00041101081022005200041f0016a41086a290000370300200020002900f0013703f002200041c0026a41a8f9c0004109108102202c41086a200041c0026a41086a290000370000202c20002900c002370000200041c0026a200041f0026a10f102024020002802c0022205450d00200041f0026a412010ff0120002902c4022106200521020b2006422088a7220d410674410675220541ffffff3f712005470d0a20054105742208417f4c0d0a0240024020080d00410121300c010b2008102c2230450d0c0b02400240024002402008410576223120054f0d002008410476220e2005200e20054b1b22054104200541044b1b220541ffffff3f71200546210e200541057421050240024020080d00200041003602f0020c010b200041f8026a4101360200200020083602f402200020303602f0020b200041c0026a2005200e200041f0026a107d200041c8026a280200210520002802c0024101460d0120002802c4022130200541057621310b200d0d01410021050c020b20050d0d0c0c0b200d410674210e200d41067441406a4106762103200041f0026a41206a210d20302105200221080340200041f0026a41386a200841386a290300370300200041f0026a41306a200841306a290300370300200041f0026a41286a200841286a290300370300200d200841206a290300370300200041c0026a41086a220a200d41086a290300370300200041c0026a41106a220f200d41106a290300370300200041c0026a41186a2207200d41186a2903003703002000200d2903003703c002200541186a2007290300370000200541106a200f290300370000200541086a200a290300370000200520002903c002370000200541206a2105200841c0006a2108200e41406a220e0d000b200341016a21050b0240200642ffffff1f83500d002002102e0b2030200510fc020240024020010d00202b21080c010b20004188016a20232022427f420010e70820004188016a41086a29030022064200200029038801220b42015620064200522006501b22051b2117200b420120051b2118200141306c210d202b2105202b21080340200541286a2903002106200541206a290300210b200041c0026a41186a220e200541186a290300370300200041c0026a41106a220a200541106a290300370300200041c0026a41086a220f200541086a290300370300200020052903003703c0020240200b2006844200510d00200041d8006a200642002018420010e808200041e8006a20174200200b420010e808200041f8006a200b42002018420010e808200041f0026a41186a200e290300220b370300200041f0026a41106a200a2903002219370300200041f0026a41086a200f290300221e370300200020002903c002221f3703f002200841186a200b370300200841106a2019370300200841086a201e3703002008201f370300200841286a427f200041f8006a41086a290300220b200029035820002903687c7c221920064200522017420052712000290360420052722000290370420052722019200b5472220e1b3703002008427f2000290378200e1b370320200841306a21080b200541306a2105200d41506a220d0d000b0b024002402008202b6b41306d2232410d2032410d491b223341306c22050d00410821340c010b2005102c2234450d0c0b203220336b2135024020330d00410021360c070b203341306c220d41506a41306e210e20342105202b21080340200841086a2903002106200841106a290300210b200841186a2903002117200841206a290300211820082903002119200541286a200841286a290300370300200541206a2018370300200541186a2017370300200541106a200b370300200541086a200637030020052019370300200541306a2105200841306a2108200d41506a220d0d000b200e41016a213602402035450d002033450d00202b202b203341306c6a203541306c10ea081a0b0240203641144b0d00203641014d0d07200e417f6a2105200e41306c20346a41506a21084102210d034020362005490d032008200d10fd02200841506a2108200d41016a210d2005417f6a2205417f470d000c080b0b2036410176ad42307e2206422088a70d0a2006a72237417f4c0d0a2037102c2238450d0b203441506a2139203441f07e6a213a410421104100213b410021032036213c0340203c213d4100213c4101210d0240203d417f6a220e450d000240024002400240024002402034200e41306c6a203d41306c220f20346a41a07f6a412010ec084100480d00203d417e6a210e203a200f6a21054100213c4100210803400240200e2008470d00203d210d0c080b200841016a2108200541306a2005412010ec08210d200541506a2105200d417f4a0d000b200841016a210d2008417f73203d6a210e0c010b203a200f6a2105024003400240200e4101470d004100210e0c020b200e417f6a210e200541306a2005412010ec082108200541506a210520084100480d000b0b203d200e490d01203d20364b0d02203d200e6b220d410176220a450d002039200f6a21052034200e41306c6a21080340200041c0026a41186a220f200841186a2207290300370300200041c0026a41106a2202200841106a2201290300370300200041c0026a41086a2204200841086a2216290300370300200020082903003703c002200841206a22112903002106200541286a2215290300210b200541086a22132903002117200541106a22122903002118200541186a221429030021192005290300211e2011200541206a22092903003703002007201937030020012018370300201620173703002008201e370300200841286a220729030021172007200b370300201220022903003703002014200f29030037030020132004290300370300200520002903c0023703002015201737030020092006370300200541506a2105200841306a2108200a417f6a220a0d000b0b0240200e0d00200e213c0c050b0240200d41094d0d00200e213c0c050b203d20364b0d02203d200e6b210d200e417f6a21052039200e41306c6a21080340203d2005490d0b2008200d41016a220d10fd022005417f6a220e20054f0d04200841506a2108200e2105200d410a490d000c040b0b200e203d41e4d1cc001057000b203d203641e4d1cc00104d000b203d200e417f6a2205490d07203d203641f4d1cc00104d000b200e41016a213c0b02402003203b470d00203b41016a2205203b490d0c203b41017422082005200820054b1b22054104200541044b1b220541ffffffff017120054641027421082005410374210502400240203b0d00200041003602f0020c010b200041043602f802200020103602f0022000203b4103743602f4020b200041c0026a20052008200041f0026a107d20002802c8022105024020002802c0024101470d0020050d0e0c0d0b20002802c40221102005410376213b0b201020034103746a2205200d3602042005203c360200200341016a22132103024020134102490d0002400240024003400240024002400240201020132203417f6a22134103746a2205280200450d00200341037420106a220a41746a280200220e200528020422084d0d00200341024d0d0820102003417d6a22054103746a280204220d2008200e6a4d0d01200341034d0d08200a41646a280200200d200e6a4b0d080c010b20034103490d012005280204210820102003417d6a22054103746a280204210d0b200d2008490d010b2003417e6a21050b02402003200541016a22124d0d00200320054d0d02201020054103746a2216280204221420162802006a2205201020124103746a22112802002215490d03200520364b0d04201641046a21092034201541306c6a22012011280204220441306c22086a210e200541306c210d02400240200520156b220f20046b22052004490d0020382001200810e908220220086a210a0240024020044101480d00200f20044a0d010b200121052002210d0c020b2034200d6a21072002210d2001210503402005200e200d200e200d412010ec08410048220f1b2208290300370300200541286a200841286a290300370300200541206a200841206a290300370300200541186a200841186a290300370300200541106a200841106a290300370300200541086a200841086a290300370300200d200d41306a200f1b210d200541306a2105200e41306a200e200f1b220e20074f0d02200a200d4b0d000c020b0b2038200e200541306c220810e908220220086a210a0240024020044101480d00200541014e0d010b200e21052002210d0c010b2039200d6a2108200e21050340200541506a210e200a41506a210f2008200e200f200f200e412010ec0841004822071b220d290300370300200841286a200d41286a290300370300200841206a200d41206a290300370300200841186a200d41186a290300370300200841106a200d41106a290300370300200841086a200d41086a290300370300200a200f20071b210a02402001200e200520071b2205490d002002210d0c020b200841506a21082002210d2002200a490d000b0b2005200d200a200d6b220820084130706b10e9081a2009201420046a360200201620153602002011201141086a20032012417f736a41037410ea081a41012103201341014d0d050c010b0b201220034184d2cc00103c000b200520034194d2cc00103c000b2015200541a4d2cc001057000b2005203641a4d2cc00104d000b203c450d060c000b0b20050d0a0c090b2005203641c4d1cc001056000b200720074188decc00103c000b200028028402210d0240201d450d00201d4106742108201c41346a210503400240200528020041ffffff3f71450d002005417c6a280200102e0b200541c0006a2105200841406a22080d000b0b0240200c41ffffff1f71450d00201c102e0b200d4105460d03200041f8026a41023a00002000410c3a00f002200041f0026a10fe010c030b2005203d41f4d1cc001057000b0240203b41ffffffff0171450d002010102e0b2037413070210520374130490d0020372005460d002038102e0b02402035410176220d450d00203541306c202b6a41506a2105202b21080340200041f0026a41286a220e200841286a220a290300370300200041f0026a41206a220f200841206a2207290300370300200041f0026a41186a2202200841186a2201290300370300200041f0026a41106a2203200841106a2204290300370300200041f0026a41086a2210200841086a2216290300370300200020082903003703f002200541086a22112903002106200541106a2215290300210b200541186a22132903002117200541206a22122903002118200541286a2214290300211920082005290300370300200a201937030020072018370300200120173703002004200b370300201620063703002014200e2903003703002012200f290300370300201320022903003703002015200329030037030020112010290300370300200520002903f002370300200541506a2105200841306a2108200d417f6a220d0d000b0b203541ffffff3f712035470d0320354105742205417f4c0d030240024020050d00410121030c010b2005102c2203450d050b0240024002402005410576221420354f0d00200541047622082035200820354b1b22084104200841044b1b220841ffffff3f71200846210d200841057421080240024020050d00200041003602f0020c010b200041f8026a4101360200200020053602f402200020033602f0020b200041c0026a2008200d200041f0026a107d200041c8026a2802002105024020002802c0024101460d0020002802c40221032005410576211420354521380c020b20050d070c060b203545213820350d00410021150c010b203241306c203341306c6b210d203541306c41506a41306e210e20032105202b2108034020052008290000370000200541186a200841186a290000370000200541106a200841106a290000370000200541086a200841086a290000370000200541206a2105200841306a2108200d41506a220d0d000b200e41016a21150b2003201510fc022036ad42187e2206422088a70d032006a72205417f4c0d030240024020050d004108210f0c010b2005102c220f450d050b0240024002400240200541186e221320364f0d00201341017422082036200820364b1b22084104200841044b1bad42187e2206422088a74541037421082006a7210d02400240200541174b0d00200041003602f0020c010b200041f0026a41086a41083602002000200f3602f0022000201341186c3602f4020b200041c0026a200d2008200041f0026a107d200041c8026a280200210520002802c0024101460d0120002802c402210f200541186e21130b20342034203641306c6a2211462212450d01410021020c020b20050d060c050b2034203641306c22056a210d200541506a41306e210e200f210520342108034020052008360200200541106a4200370300200541086a4200370300200541186a2105200d200841306a2208470d000b200e41016a21020b201c201d4106746a2116024002400240201d0d00201c21040c010b201c21050340200541c0006a210420052802302210450d010240200541346a290200221e422088a74105742208450d00200541086a290300211820052903002119201020086a2101410021072010210a024003404100210502400240024020020e020201000b410021052002210803402008410176220e20056a210d200d2005200f200d41186c6a280200200a412010ec084101481b21052008200e6b220841014b0d000b0b200f200541186c6a2208280200200a412010ec080d00200220054d0d02200041386a20184200411020076bad2206420010e808200041c8006a201942002006420010e8082008427f20082903082206427f20002903482000290340420052200041c8006a41086a290300220b20002903387c2217200b547222051b7c220b200b200654220d200841106a220e2903002206427f201720051b7c200dad7c220b200654200b2006511b22051b370308200e427f200b20051b3703000b200741016a21072001200a41206a220a470d000c020b0b2005200241b4f9c000103c000b0240201e42ffffff3f83500d002010102e0b2004210520042016470d000c020b0b20162004460d000340200441c0006a21050240200441346a28020041ffffff3f71450d00200441306a280200102e0b2005210420162005470d000b0b0240200c41ffffff1f71450d00201c102e0b0240024002402002450d00200f280200220d450d00024020024101460d00200f200241186c6a210a200f41186a2105200f41106a2903002106200f290308210b03402005280200220e450d012006200541106a2903002217200b200541086a290300221856200620175620062017511b22081b2106200b201820081b210b200d200e20081b210d200541186a2205200a470d000b0b02402013450d00201341186c450d00200f102e0b200d0d014100210e0c020b4100210e2013450d01201341186c450d01200f102e0c010b200041a0026a41186a200d41186a290000370300200041a0026a41106a200d41106a290000370300200041a0026a41086a200d41086a2900003703002000200d2900003703a0024101210e0b203641ffffff3f712036470d0320364105742205417f4c0d030240024020050d00410121070c010b2005102c2207450d050b02400240024002402005410576220920364f0d00200541047622082036200820364b1b22084104200841044b1b220841ffffff3f71200846210d200841057421080240024020050d00200041003602f0020c010b200041f8026a4101360200200020053602f402200020073602f0020b200041c0026a2008200d200041f0026a107d200041c8026a280200210520002802c0024101460d0120002802c4022107200541057621090b2012450d01410021010c020b20050d060c050b2034203641306c22056a210d200541506a41306e210a2007210520342108034020052008290000370000200541186a200841186a290000370000200541106a200841106a290000370000200541086a200841086a290000370000200541206a2105200d200841306a2208470d000b200a41016a21010b200041f0026a20072001202d202f10fe02200041f0026a41106a280200210c20002802f402211d20002802f002211c20002802fc02223d20004184036a2802002007200110f502200041f9026a2202200041a0026a41086a29030037000020004181036a200041a0026a41106a29030037000020004189036a200041a0026a41186a2903003700002000200e3a00f002200020002903a0023700f102200041f0026a10f602024020002802d80141306c2205450d0020002802d001220e20056a2104200041c0026a41086a2116200041a8036a21100340200e41306a210f0240024002400240024020010e020300010b410021050c010b410021052001210803402008410176220a20056a210d200d20052007200d4105746a200e412010ec084101481b21052008200a6b220841014b0d000b0b200720054105746a200e412010ec08450d010b024002400240024020150e020300010b410021050c010b410021052015210803402008410176220a20056a210d200d20052003200d4105746a200e412010ec084101481b21052008200a6b220841014b0d000b0b200320054105746a200e412010ec08450d010b200041186a200e200e290320200e41286a220829030010cb02200029031821062000200041186a41086a290300220b3703f802200020063703f002024002402006200b844200520d002000200041f0026a3602c002200041c0026a10cc020c010b200042f0f2bda1a7ee9cb9f9003703c002200041f0026a200041c0026a10cd02200041086a200041f0026a2006200b10fd01200041c0026a41106a200041086a41086a2903002218200b7d20002903082217200654ad7d200b20187d2006201754ad7d20172006562018200b562018200b511b22051b3703002000201720067d200620177d20051b3703c80220002005ad3703c0020240024020050d00200020163602f001200041f0016a10cc020c010b200020163602f001200041f0016a10ce020b200041f0026a41186a200b3703002000200637038003200041063a00f8022000410e3a00f002200041f0026a10fe010b200e2903202106200e41186a290000210b200e41106a2900002117200e29000021182010200829030037030020022018370000200241086a200e41086a290000370000200241106a2017370000200241186a200b370000200041053a00f8022000410c3a00f002200020063703a003200041f0026a10fe010b200f210e200f2004470d000b0b201120346b41306e220541ffffff1f712005470d0320054106742208417f4c0d030240024020080d00410821100c010b2008102c2210450d050b4100210d200041003602e802200020103602e0022000200841067622163602e4020240201620054f0d002008410576220e2005200e20054b1b22054104200541044b1b220541ffffff1f71200546410374210e200541067421050240024020080d00200041003602f0020c010b200041f0026a41086a4108360200200020083602f402200020103602f0020b200041c0026a2005200e200041f0026a107d200041c8026a280200210520002802c0024101460d03200020002802c40222103602e0022000200541067622163602e4020b024020120d0020002802d80141306c2101203641306c41506a41306e211520002802d00121042010210f2034210203402002220e41306a2102200121052004210802400340024020050d00420021064200210b0c020b200541506a21052008200e412010ec08210d200841306a220a2108200d0d000b200a41706a22052903002106200541086a290300210b0b200041c0026a41186a2205200e41186a290300370300200041c0026a41106a2208200e41106a290300370300200041c0026a41086a220d200e41086a290300370300200e41286a2903002117200e2903202118200e2903002119200f2006370310200f41186a200b370300200020193703c002200f2018370300200f2017370308200f41386a2005290300370300200f41306a2008290300370300200f20002903c002370320200f41286a200d290300370300200f41c0006a210f20022011470d000b201541016a210d0b2000200d3602e80220004188036a4200370300200041f0026a41106a4200370300200041f0026a41086a22054200370300200042003703f002200041f0016a418ef9c00041101081022005200041f0016a41086a290000370300200020002900f0013703f002200041c0026a41c7c3cb004107108102202c41086a200041c0026a41086a290000370000202c20002900c002370000200041f0026a200041e0026a10ff0202402016450d002010102e0b203541ffffff1f712035470d0320354106742205417f4c0d030240024020050d00410821150c010b2005102c2215450d050b41002108200041003602e802200020153602e0022000200541067622133602e402024002400240201320354f0d00200541057622082035200820354b1b22084104200841044b1b220841ffffff1f71200846410374210d200841067421080240024020050d00200041003602f0020c010b200041f0026a41086a4108360200200020053602f402200020153602f0020b200041c0026a2008200d200041f0026a107d200041c8026a2802002105024020002802c0024101460d00200020002802c40222153602e0022000200541067622133602e4020c020b20050d070c060b20380d010b202b203541306c6a211020002802d80141306c2116203541306c41506a41306e211220002802d00121112015210a202b210f0340200f41286a2903002106200f290320210b200041f0026a41186a2202200f41186a290000370300200041f0026a41106a2201200f41106a290000370300200041f0026a41086a2204200f41086a2900003703002000200f2900003703f002200f41306a210f201621052011210802400340024020050d0042002117420021180c020b200541506a21052008200041f0026a412010ec08210d200841306a220e2108200d0d000b200e41706a22052903002117200541086a29030021180b200041c0026a41186a22052002290300370300200041c0026a41106a22082001290300370300200041c0026a41086a220d2004290300370300200020002903f0023703c002200a2006370308200a200b370300200a2017370310200a41186a2018370300200a20002903c002370320200a41286a200d290300370300200a41306a2008290300370300200a41386a2005290300370300200a41c0006a210a200f2010470d000b201241016a21080b200020083602e80202402027450d00202741306c450d00202b102e0b20004188036a220d4200370300200041f0026a41106a22084200370300200041f0026a41086a22054200370300200042003703f002200041f0016a418ef9c00041101081022005200041f0016a41086a220e290000370300200020002900f0013703f002200041c0026a41a8f9c0004109108102202c41086a220a200041c0026a41086a220f290000370000202c20002900c002370000200041f0026a200041e0026a10ff0202402013450d002015102e0b200d42003703002008420037030020054200370300200042003703f002200041f0016a418ef9c00041101081022005200e290000370300200020002900f0013703f002200041c0026a419ef9c000410a108102200a200f290000370000202c20002900c002370000200041f0026a412010ff0120004184036a203636020020082033360200200541003a00002000410c3a00f002200041f0026a410c6a2034360200200041f0026a10fe01200d42003703002008420037030020054200370300200042003703f002200041f0016a418ef9c00041101081022005200e290000370300200020002900f0013703f002200041c0026a41e0a3c200410e108102200a200f290000370000202c20002900c0023700002000200041f0026a4120108e022000280200210220002802042101200d42003703002008420037030020054200370300200042003703f002200041f0016a418ef9c00041101081022005200e290000370300200020002900f0013703f002200041c0026a41e0a3c200410e108102200a200f290000370000202c20002900c0023700002000200141016a410120021b3602c002200041f0026a4120200041c0026a410410b2010240200c41ffffff3f71450d00203d102e0b0240201d41ffffff3f71450d00201c102e0b02402009450d002007102e0b02402014450d002003102e0b02402031450d002030102e0b0240202e450d00202d102e0b02402028450d002028412c6c2108202a210503400240200541046a280200220d450d00200d41246c450d002005280200102e0b2005412c6a2105200841546a22080d000b0b2029450d002029412c6c450d00202a102e0b201b42f094c0337e201a42c0a8ee3f7e7c20267c2106201a4280e1eb177e210b02402025450d00202541386c21082021412c6a210503400240200528020041ffffff3f71450d002005417c6a280200102e0b200541386a2105200841486a22080d000b0b2006200b7c2106201b42c0f0f50b7e210b02402024450d002020450d002021102e0b2006200b7c2106201a4280c2d72f7e210b024020002802d4012205450d00200541306c450d0020002802d001102e0b2006200b7c21060b200041f0036a240020060f0b20050d010b1038000b1036000b9d0202017f037e230041d0006b220324002003200236020420032001360200200341086a2001200210ed0202400240200328020822010d00420021040c010b200328020c210202400240200341086a41086a2802004110490d00200141086a290000210520012900002106420121040c010b20034100360220200342013703182003410a36022c200320033602282003200341186a360234200341cc006a41013602002003420137023c200341909dc5003602382003200341286a360248200341346a419cebc000200341386a103d1a2003280218200328022010ef020240200328021c450d002003280218102e0b420021040b2002450d002001102e0b2000200637030820002004370300200041106a2005370300200341d0006a24000bbf0402017f057e23004180016b220524002005200436020c20052003360208200541d4e2cc00200141086a20024108491b36021020054100200241786a2201200120024b1b360214200541d8006a200541106a109301200541386a41086a2202200541e1006a290000370300200541386a41106a2201200541e9006a290000370300200541386a41186a2203200541f1006a290000370300200520052900593703380240024002400240024020052d00584101460d00200541186a41186a2003290300370300200541186a41106a2001290300370300200541186a41086a2002290300370300200520052903383703182005200541086a10ab0102402005280200450d00200541003602580c030b200541d8006a200541086a200528020410920120052802582202450d02200529025c21060240200528020c22014110490d0020052005280208220341106a3602082005200141706a220436020c200441104f0d020b200642ffffff3f83500d022002102e0c020b200041003602400c030b200341086a2900002107200329000021082005200141606a36020c2005200341206a36020820020d010b200041003602400c010b200341186a29000021092003290010210a20002005290318370000200041186a200541186a41186a290300370000200041106a200541186a41106a290300370000200041086a200541186a41086a290300370000200041386a20093703002000200a370330200041286a20073703002000200837032020002006370244200020023602400b20054180016a24000be60203057f017e037f230041d0006b220224002002200128020c200141146a280200108b050240024020022802002203450d00200141086a2104200141106a210502400340024002402004280200220620022902042207422088a722084b0d0020012802002003200610ec08450d010b2007a7450d032003102e0c030b02402005280200450d00200128020c102e0b2001200336020c2005200737020020022003200810ed020240024020022802002203450d002002280208210920022802042108024020012d001c450d00200128020c200128021410ff010b2001280214220a20042802002206490d032002200128020c20066a200a20066b20032009200128021811050020022802400d012008450d002003102e0b2002200128020c2001280214108b05200228020022030d010c030b0b2000200241d00010e9081a2008450d022003102e0c020b2006200a41e89ec5001056000b200041003602400b200241d0006a24000bea6609037f017e017f017e187f037e097f027e067f230041c0036b22052400200541b0026a41086a2206200241086a280200360200200520022902003703b00220054180026a41086a2202200341086a2802003602002005200329020037038002200541e0026a200541b0026a20054180026a10b904200541086a41086a200541e0026a41086a22032802002207360200200520052903e0022208370308200541186a41086a200541f4026a2802002209360200200520052902ec02220a37031820062007360200200520083703b002200220093602002005200a37038002200541e0026a2001200541b0026a20054180026a10e206200541c8006a41086a2206200541f8026a2802003602002005200541f0026a2903003703482003280200210b200541e0026a410c6a280200210220052802e402210c024002400240024002400240024002400240024020052802e0024101460d00200541286a41086a200628020036020020052005290348370328024020042903004201520d00200541286a2004280208200441106a290300200441186a29030010c0040b200c20024102746a210702400240024020010d00200c2103200c210d0c010b200c2103200c210d2002450d0020024102742104200c2103200c210d03402003220241046a210320022802002202450d012002280208220641016a41004c0d022002200636020802400240200241f4006a2d00000d0020022002280200417f6a220636020020060d01200241046a22062006280200417f6a220636020020060d012002102e0c010b200d2002360200200d41046a210d2001417f6a2201450d020b2004417c6a22040d000b200721030b0240200720036b2202450d00200241027541027421020340200328020022012001280200417f6a3602000240200328020022012802000d00200141046a22012001280200417f6a3602002003280200220141046a2802000d002001102e0b200341046a21032002417c6a22020d000b0b02400240200d200c6b220e410275220f41144b0d00200f41014d0d0641022103200c200f417e6a22024102746a21010340200f2002490d022001200310e306200341016a21032001417c6a21012002417f6a2202417f470d000c070b0b200f410176220341ffffffff03712003470d0b20034102742210417f4c0d0b2010102c2211450d0a200c417c6a2112200c41746a2113410421144100211541002116200f2117034020172109410021174101210202402009417f6a2204450d00024002400240024002400240024002400240024002400240200c20044102746a2802002203280208220241016a41004c0d0020032002360208200c2009417e6a22074102746a2802002202280208220141016a41004c0d01200328025021032002200136020820032002280250490d04201320094102746a210341002117410021010340024020072001470d00200921020c0e0b200341046a2802002202280208220441016a41004c0d032002200436020820032802002204280208220641016a41004c0d0420022802502102200420063602082003417c6a2103200141016a2101200220042802504f0d000b200141016a21022001417f7320096a21040c050b41bcd9cc00411820054180026a41c4f8c90041d4f8c900103e000b41bcd9cc00411820054180026a41c4f8c90041d4f8c900103e000b41bcd9cc00411820054180026a41c4f8c90041d4f8c900103e000b41bcd9cc00411820054180026a41c4f8c90041d4f8c900103e000b2013200941027422076a210302400340024020044101470d00410021040c020b200341046a2802002202280208220141016a41004c0d032002200136020820032802002201280208220641016a41004c0d0420022802502102200120063602082004417f6a21042003417c6a210320022001280250490d000b0b20092004490d032009200f4b0d04200920046b22024101762206450d00200c20044102746a2103201220076a21010340200328020021072003200128020036020020012007360200200341046a21032001417c6a21012006417f6a22060d000b0b024020040d00200421170c070b0240200241094d0d00200421170c070b2009200f4b0d04200920046b21022004417f6a2103201220044102746a2101034020092003490d0c2001200241016a220210e3062003417f6a220420034f0d062001417c6a2101200421032002410a490d000c060b0b41bcd9cc00411820054180026a41c4f8c90041d4f8c900103e000b41bcd9cc00411820054180026a41c4f8c90041d4f8c900103e000b2004200941e4d1cc001057000b2009200f41e4d1cc00104d000b20092004417f6a2203490d062009200f41f4d1cc00104d000b200441016a21170b0240024002400240024020162015460d00201621030c010b201541016a22032015490d10201541017422012003200120034b1b22034104200341044b1b220341ffffffff01712003464102742101200341037421030240024020150d00200541003602e0020c010b200541043602e802200520143602e002200520154103743602e4020b20054180026a20032001200541e0026a107d20052802880221012005280280024101460d01200528028402211420152103200141037621150b201420034103746a2203200236020420032017360200201641016a22182116201841024f0d010c020b20010d0d0c0e0b024002400240024002400240024003400240024002400240201420182216417f6a22184103746a2203280200450d00201641037420146a220641746a2802002204200328020422024d0d00201641024d0d0c20142016417d6a22034103746a2802042201200220046a4d0d01201641034d0d0c200641646a280200200120046a4b0d0c0c010b20164103490d012003280204210220142016417d6a22034103746a28020421010b20012002490d010b2016417e6a21030b02402016200341016a22194d0d00201620034d0d02201420034103746a221a280204221b201a2802006a2203201420194103746a221c280200221d490d032003200f4b0d04200c201d4102746a221e201c280204221f41027422026a210120034102742106024002402003201d6b2207201f6b2203201f490d002011201e200210e908220320026a210402400240201f4101480d002007201f4a0d010b201e2102200321030c020b200c20066a212020032103201e2102034020012802002206280208220741016a41004c0d082006200736020820032802002207280208220941016a41004c0d092006280250210620072009360208200220012003200620072802504922061b2802003602002003200341046a20061b2103200241046a2102200141046a200120061b220120204f0d02200420034b0d000c020b0b201120012003410274220210e908222020026a210402400240201f4101480d00200341014e0d010b20012102202021030c010b201220066a21092001210203402004417c6a22032802002201280208220641016a41004c0d09200120063602082002417c6a22062802002207280208222141016a41004c0d0a2001280250210120072021360208200920062003200120072802504922011b2802003602002004200320011b21040240201e2006200220011b2202490d00202021030c020b2009417c6a21092020210320202004490d000b0b20022003200420036b417c7110e9081a201a41046a201b201f6a360200201a201d360200201c201c41086a20162019417f736a41037410ea081a41012116201841014d0d090c010b0b201920164184d2cc00103c000b200320164194d2cc00103c000b201d200341a4d2cc001057000b2003200f41a4d2cc00104d000b41bcd9cc00411820054180026a41c4f8c90041d4f8c900103e000b41bcd9cc00411820054180026a41c4f8c90041d4f8c900103e000b41bcd9cc00411820054180026a41c4f8c90041d4f8c900103e000b41bcd9cc00411820054180026a41c4f8c90041d4f8c900103e000b2017450d050c000b0b2002200f41c4d1cc001056000b41bcd9cc00411820054180026a4190b7c00041a0b7c000103e000b2000200c360204200041013602002000410c6a2002360200200041086a200b3602000c030b2003200941f4d1cc001057000b0240201541ffffffff0171450d002014102e0b2010450d002011102e0b20052802302102200528022c21012005200528022822033602402005200136023c2005200336023820052003200241e0006c6a221a36024441042122024002402002450d00200541b0026a410472211c200541e0026a41346a21020240034020054180026a41286a2204200341286a29030037030020054180026a41206a2206200341206a29030037030020054180026a41186a2207200341186a29030037030020054180026a41106a2209200341106a29030037030020054180026a41086a2220200341086a2903003703002005200329030037038002200341306a2802002101200541c8006a41086a22212003413c6a290200370300200541c8006a41106a221e200341c4006a290200370300200541c8006a41186a2216200341cc006a290200370300200541c8006a41206a221f200341d4006a290200370300200541c8006a41286a2214200341dc006a2802003602002005200341346a290200370348024020010d00200341e0006a211a0c020b200541e0026a41286a2004290300370300200541e0026a41206a2006290300370300200541e0026a41186a2007290300370300200541e0026a41106a2009290300370300200541e0026a41086a202029030037030020022005290348370200200241086a2021290300370200200241106a201e290300370200200241186a2016290300370200200241206a201f290300370200200241286a201428020036020020052005290380023703e0022005200136029003200541b0026a200541e0026a10bd07024020052802b00222010d00200341e0006a2203201a470d010c020b0b200541f8006a41106a201c41106a2902002208370300200541d8016a41086a201c41086a290200220a370300200541d8016a41106a2008370300200541d8016a41186a201c41186a2902002223370300200541d8016a41206a201c41206a29020022243703002005200341e0006a3602402005201c29020022253703d801200541b0016a41206a22032024370300200541b0016a41186a22022023370300200541b0016a41106a22042008370300200541b0016a41086a2206200a370300200520253703b001412c102c2222450d0720222001360200202220052903b0013702042022410c6a2006290300370200202241146a20042903003702002022411c6a2002290300370200202241246a2003290300370200200541a0016a41086a200541386a41086a2903002208370300200520052903383703a001024002402008a7220120052802ac01221a470d0041012126410121270c010b200541e0026a41346a2102200541b0026a410472211c41012126410121270240034020054180026a41286a22042001220341286a29030037030020054180026a41206a2206200341206a29030037030020054180026a41186a2207200341186a29030037030020054180026a41106a2209200341106a29030037030020054180026a41086a2220200341086a2903003703002005200329030037038002200341306a2802002101200541c8006a41086a22212003413c6a290200370300200541c8006a41106a221e200341c4006a290200370300200541c8006a41186a2216200341cc006a290200370300200541c8006a41206a221f200341d4006a290200370300200541c8006a41286a2214200341dc006a2802003602002005200341346a2902003703482001450d01200541e0026a41286a2004290300370300200541e0026a41206a22042006290300370300200541e0026a41186a22062007290300370300200541e0026a41106a22072009290300370300200541e0026a41086a2209202029030037030020022005290348370200200241086a2021290300370200200241106a201e290300370200200241186a2016290300370200200241206a201f290300370200200241286a201428020036020020052005290380023703e0022005200136029003200541b0026a200541e0026a10bd07024020052802b00222010d00200341e0006a2201201a470d010c020b200541f8006a41106a201c41106a2902002208370300200541d8016a41086a201c41086a290200220a370300200541d8016a41106a2008370300200541d8016a41186a201c41186a2902002223370300200541d8016a41206a201c41206a29020022243703002005200341e0006a3602a8012005201c29020022253703d801200541b0016a41206a22032024370300200541b0016a41186a22202023370300200541b0016a41106a22212008370300200541b0016a41086a221e200a370300200520253703b0012004200329030037030020062020290300370300200720212903003703002009201e290300370300200520052903b0013703e0020240024020272026470d00202641016a22032026490d0d202641017422202003202020034b1b22034104200341044b1bad422c7e2208422088a74541027421032008a721200240024020260d0020054100360280020c010b2005410436028802200520223602800220052026412c6c360284020b200541b0026a2020200320054180026a107d20052802b802210320052802b0024101460d0120052802b40221222003412c6e21260b20222027412c6c6a220320013602002003410c6a2009290300370200200320052903e002370204200341146a20072903003702002003411c6a2006290300370200200341246a2004290300370200202741016a212720052802a801220120052802ac01221a470d010c030b0b2003450d0a0c090b2005200341e0006a3602a8010b200541a0016a10ac020c020b2005201a3602400b200541386a10ac0241002127410021260b200541053602b00220222027412c6c6a2128202221290240034020292028460d012029280208220341ffffffff03712003470d072029280200210402400240200341027422020d004104212a0c010b2002102c222a450d070b02400240024002402002410276222b20034f0d00200241017622012003200120034b1b22014104200141044b1b220141ffffffff03712001464102742106200141027421010240024020020d00200541003602e0020c010b200541043602e802200520023602e4022005202a3602e0020b20054180026a20012006200541e0026a107d20052802880221022005280280024101460d01200528028402212a2002410276212b0b20042004200341246c22016a470d01410021030c020b2002450d090c080b200441206a21032001415c6a41246e2104202a2102034020022003280200360200200341246a2103200241046a21022001415c6a22010d000b200441016a21030b4101450d0720034103742202417f4c0d070240024020020d004108212c0c010b2002102c222c450d070b0240024002402002410376222d20034f0d00200241027622012003200120034b1b22014104200141044b1b41037421010240024020020d00200541003602e0020c010b200541083602e802200520023602e4022005202c3602e0020b20054180026a20014108200541e0026a107d200528028802210202402005280280024101460d00200528028402212c2002410376212d0c020b2002450d0a0c090b20030d00410021130c010b20034102742201417c6a4102762104202c2103202a2102034020032002350200370300200341086a2103200241046a21022001417c6a22010d000b200441016a21130b2029412c6a212e202c201341037422046a21064200210820042103202c210202400240024002400340024020030d00024020130d004100212041082107410021130c050b0240428094ebdc0320082008428094ebdc035422031b2008428094ebdc0320031b7d222f4200520d00201341ffffffff01712013470d0e20134103742203417f4c0d0e2003102c2207450d0d2007202c200310e9081a200341037621200c050b202f2013ad2230822124202f20308021252006202c6b2203410376220241ffffffff00712002470d0d20034101742203417f4c0d0d0240024020030d004108211f0c010b2003102c221f450d0d0b02400240024002402003410476223120024f0d00200341037622012002200120024b1b22024104200241044b1b220241ffffffff00712002464103742101200241047421020240024020030d00200541003602e0020c010b200541083602e802200520033602e4022005201f3602e0020b20054180026a20022001200541e0026a107d20052802880221032005280280024101460d01200528028402211f200341047621310b201341037441786a2232410376211541002102201f2103202c21010340200341086a200129030037030020032002360200200341106a2103200241016a2102200141086a2101200441786a22040d000b201541016a210f02402032419f014b22330d002032450d07200f410474201f6a41706a210741002104201521010340200f20012203417f6a2201490d040240200f20016b22204102490d00201f20034104746a220341086a2206290300201f20014104746a220241086a2209290300220a5a0d00200228020021212002200329030037030020092006290300370300024020204103490d002004417f6a210941002102200721030340200341186a2206290300200a5a0d0120092002460d06200341086a20062903003703002003200341106a22062903003703002006210320042002417f6a2202470d000b200621030b2003200a370308200320213602000b200741706a21072004417f6a210420010d000c080b0b200f410176220341ffffffff00712003470d1020034104742234417f4c0d102034102c2212450d0f201f41706a2135201f41586a213641002110410421144100211e200f211803400240024020182207417f6a22030d0041012106410021180c010b0240024002400240024002400240201f20034104746a41086a29030020074104742209201f6a41686a290300220a540d002007417e6a2104203620096a210241002118410021030340024020042003470d00200721060c090b200341016a2103200a200229030022235a2101200241706a21022023210a20010d000b200341016a21062003417f7320076a21030c010b203620096a210202400340024020034101470d00410021030c020b2003417f6a2103200a20022903002223542101200241706a21022023210a20010d000b0b20072003490d012007200f4b0d02200720036b22064101762204450d00201f20034104746a2102203520096a21010340200541e0026a41086a2209200241086a2220290300370300200520022903003703e002200141086a2221290300210a200220012903003703002020200a37030020212009290300370300200120052903e002370300200241106a2102200141706a21012004417f6a22040d000b0b024020030d00200321180c060b0240200641094d0d00200321180c060b2007200f4b0d03200320076b2101201f20034104746a2109034020072003417f6a2218490d050240200720186b22064102490d00201f20034104746a220341086a2204290300201f20184104746a220241086a2220290300220a5a0d00200228020021212002200329030037030020202004290300370300024020064103490d0041012102200921030340200341186a2204290300200a5a0d01200120026a4101460d06200341086a20042903003703002003200341106a2204290300370300200421032001200241016a22026a0d000b200421030b2003200a370308200320213602000b2018450d06200941706a21092001417f6a2101201821032006410a4f0d060c000b0b2003200741e4d1cc001057000b2007200f41e4d1cc00104d000b2002200641d4d1cc00103c000b20072003417f6a2218490d002007200f41f4d1cc00104d000b2018200741f4d1cc001057000b02400240024002400240201e2010460d00201e21030c010b201041016a22032010490d15201041017422022003200220034b1b22034104200341044b1b220341ffffffff01712003464102742102200341037421030240024020100d00200541003602e0020c010b200541043602e802200520143602e002200520104103743602e4020b20054180026a20032002200541e0026a107d20052802880221022005280280024101460d01200528028402211420102103200241037621100b201420034103746a2203200636020420032018360200201e41016a2219211e201941024f0d010c020b2002450d130c120b0240024002400340024002400240024020142019221e417f6a22194103746a2203280200450d00201e41037420146a220641746a2802002204200328020422024d0d00201e41024d0d082014201e417d6a22034103746a2802042201200220046a4d0d01201e41034d0d08200641646a280200200120046a4b0d080c010b201e4103490d01200328020421022014201e417d6a22034103746a28020421010b20012002490d010b201e417e6a21030b0240201e200341016a221b4d0d00201e20034d0d02201420034103746a221a2802042211201a2802006a22032014201b4103746a221c280200221d490d032003200f4b0d04201a41046a2117201f201d4104746a2221201c280204221641047422026a210420034104742106024002402003201d6b220720166b22032016490d0020122021200210e908222020026a21010240024020164101480d00200720164a0d010b20212103202021020c020b201f20066a210920202102202121030340200320042002200441086a290300200241086a2903005422061b2207290300370300200341086a200741086a2903003703002002200241106a20061b2102200341106a2103200441106a200420061b220420094f0d02200120024b0d000c020b0b201220042003410474220210e908220720026a21010240024020164101480d00200341014e0d010b20042103200721020c010b203520066a21062004210303402006200341706a2204200141706a2209200141786a290300200341786a2903005422021b2220290300370300200641086a202041086a2903003703002001200920021b2101024020212004200320021b2203490d00200721020c020b200641706a21062007210220072001490d000b0b20032002200120026b41707110e9081a2017201120166a360200201a201d360200201c201c41086a201e201b417f736a41037410ea081a4101211e201941014d0d050c010b0b201b201e4184d2cc00103c000b2003201e4194d2cc00103c000b201d200341a4d2cc001057000b2003200f41a4d2cc00104d000b2018450d060c000b0b2003450d0f0c0e0b410120026b202041d4d1cc00103c000b2001200f41c4d1cc001056000b200341786a2103200820022903007c220a2008542101200241086a2102200a21082001450d000b0240202d450d00202c102e0b411e212041b4d2cc0021030c030b0240201041ffffffff0171450d002014102e0b2034450d002012102e0b0240024002400240024002400240024002400240200842ff93ebdc03560d00428094ebdc032030802123410021030240202f2030540d004100210320132102034020152003490d09201f20034104746a2201290308220a20257c2208200a540d08200141086a2008370300024020082023540d00200341016a20137021030b2002417f6a22020d000b0b2024500d01034020152003490d06201f20034104746a2202290308220a42017c2208200a540d05200241086a2008370300024020082023540d00200341016a20137021030b2024427f7c222450450d000c020b0b201f29030821232013417f6a220121030240202f2030540d00034020152003490d04201f20034104746a220242002002290308220820257d220a200a20085622021b200a20021b220a370308200320012003417f6a2204200420034b1b200a2023561b21032024202520087d420020021b7c21242013417f6a22130d000b0b2024500d00034020152003490d0202400240201f20034104746a22022903082208427f7c220a2008580d0020012003417f6a2202200220034b1b21030c010b200241086a200a370300200320012003417f6a2202200220034b1b200a2023561b21032024427f7c21240b20244200520d000b0b02400240024020330d002032450d0a200f410474201f6a41706a2107410021040340200f20152203417f6a2215490d030240200f20156b22204102490d00201f20034104746a2203280200201f20154104746a220228020022064f0d0020022903082108200241086a200341086a29030037030020022003290300370300024020204103490d002004417f6a210941002101200721030340200341106a220228020020064f0d0120092001460d05200341086a200341186a290300370300200320022903003703002002210320042001417f6a2201470d000b200221030b20032008370308200320063602000b200741706a21072004417f6a210420150d000c0b0b0b200f410176220341ffffffff00712003470d1320034104742235417f4c0d132035102c2215450d12201f41706a2113201f41506a211041002112410421144100211e200f211803400240024020182209417f6a22030d0041012107410021180c010b0240024002400240024002400240201f20034104746a28020020094104742220201f6a41606a2802002202490d002009417e6a2107201020206a210141002118410021030340024020072003470d00200921070c090b200341016a21032002200128020022044f2106200141706a21012004210220060d000b200341016a21072003417f7320096a21030c010b201020206a210102400340024020034101470d00410021030c020b2003417f6a2103200220012802002204492106200141706a21012004210220060d000b0b20092003490d012009200f4b0d02200920036b22074101762204450d00201f20034104746a2102201320206a21010340200541e0026a41086a2206200241086a2220290300370300200520022903003703e002200141086a22212903002108200220012903003703002020200837030020212006290300370300200120052903e002370300200241106a2102200141706a21012004417f6a22040d000b0b024020030d00200321180c060b0240200741094d0d00200321180c060b2009200f4b0d03200320096b2104201f20034104746a2120034020092003417f6a2218490d050240200920186b22074102490d00201f20034104746a2203280200201f20184104746a220228020022064f0d0020022903082108200241086a200341086a29030037030020022003290300370300024020074103490d0041012102202021030340200341106a220128020020064f0d01200420026a4101460d06200341086a200341186a29030037030020032001290300370300200121032004200241016a22026a0d000b200121030b20032008370308200320063602000b2018450d06202041706a21202004417f6a2104201821032007410a4f0d060c000b0b2003200941e4d1cc001057000b2009200f41e4d1cc00104d000b2002200741d4d1cc00103c000b20092003417f6a2218490d002009200f41f4d1cc00104d000b2018200941f4d1cc001057000b02400240024002400240201e2012460d00201e21030c010b201241016a22032012490d18201241017422022003200220034b1b22034104200341044b1b220341ffffffff01712003464102742102200341037421030240024020120d00200541003602e0020c010b200541043602e802200520143602e002200520124103743602e4020b20054180026a20032002200541e0026a107d20052802880221022005280280024101460d01200528028402211420122103200241037621120b201420034103746a2203200736020420032018360200201e41016a2219211e201941024f0d010c020b2002450d160c150b0240024002400340024002400240024020142019221e417f6a22194103746a2203280200450d00201e41037420146a220641746a2802002204200328020422024d0d00201e41024d0d082014201e417d6a22034103746a2802042201200220046a4d0d01201e41034d0d08200641646a280200200120046a4b0d080c010b201e4103490d01200328020421022014201e417d6a22034103746a28020421010b20012002490d010b201e417e6a21030b0240201e200341016a221b4d0d00201e20034d0d02201420034103746a221a2802042211201a2802006a22032014201b4103746a221c280200221d490d032003200f4b0d04201a41046a2117201f201d4104746a2221201c280204221641047422026a210120034104742106024002402003201d6b220720166b22032016490d0020152021200210e908220320026a21040240024020164101480d00200720164a0d010b20212102200321030c020b201f20066a210920032103202121020340200220012003200128020020032802004922061b2207290300370300200241086a200741086a2903003703002003200341106a20061b2103200241106a2102200141106a200120061b220120094f0d02200420034b0d000c020b0b201520012003410474220210e908220920026a21040240024020164101480d00200341014e0d010b20012102200921030c010b201320066a21062001210203402006200241706a2203200441706a2201200128020020032802004922071b2220290300370300200641086a202041086a2903003703002004200120071b2104024020212003200220071b2202490d00200921030c020b200641706a21062009210320092004490d000b0b20022003200420036b41707110e9081a2017201120166a360200201a201d360200201c201c41086a201e201b417f736a41037410ea081a4101211e201941014d0d050c010b0b201b201e4184d2cc00103c000b2003201e4194d2cc00103c000b201d200341a4d2cc001057000b2003200f41a4d2cc00104d000b2018450d090c000b0b410120016b202041d4d1cc00103c000b2015200f41c4d1cc001056000b2003200f419cd4cc00103c000b2003200f418cd4cc00103c000b41b4d3cc00412641fcd3cc00105d000b2003200f41ecd3cc00103c000b41b4d3cc00412641dcd3cc00105d000b2003200f41a4d3cc00103c000b0240201241ffffffff0171450d002014102e0b2035450d002015102e0b200f4104742201410475220341ffffffff01712003470d0920034103742202417f4c0d090240024020020d00410821070c010b2002102c2207450d090b02402002410376222020034f0d00200241027622042003200420034b1b22034104200341044b1b220341ffffffff01712003464103742104200341037421030240024020020d00200541003602e0020c010b200541083602e802200520023602e402200520073602e0020b20054180026a20032004200541e0026a107d20052802880221032005280280024101460d082005280284022107200341037621200b201f41086a2103200141706a410476210420072102034020022003290300370300200341106a2103200241086a2102200141706a22010d000b200441016a21132031450d00201f102e0b20134103742201410375220341ffffffff03712003470d0820034102742202417f4c0d080240024020020d00410421090c010b2002102c2209450d080b02400240024002402002410276222120034f0d00200241017622042003200420034b1b22034104200341044b1b220341ffffffff03712003464102742104200341027421030240024020020d00200541003602e0020c010b200541043602e802200520023602e402200520093602e0020b20054180026a20032004200541e0026a107d20052802880221032005280280024101460d012005280284022109200341027621210b200720016a22062007470d01410021010c020b2003450d0a0c090b4100210120092103200721020340200320022903002208a7417f2008428080808010541b2204418094ebdc032004418094ebdc03491b360200200141016a2101200341046a21032006200241086a2202470d000b0b02402020450d002007102e0b0240202d450d00202c102e0b02402001410274410275220320292802082202200220034b1b2201450d00202928020041206a210320092102034020032002280200360200200241046a2102200341246a21032001417f6a22010d000b0b410021032021450d002009102e0b0240202b450d00202a102e0b202e21292003450d000b200541033602b00220052020ad4220862003ad843702b4020b024020052802b00222034105470d00200e4102752203ad42307e2208422088a70d062008a72202417f4c0d060240024020020d004108211f0c010b2002102c221f450d060b0240024002400240200241306e221420034f0d00201441017422012003200120034b1b22014104200141044b1bad42307e2208422088a74541037421012008a72104024002402002412f4b0d00200541003602e0020c010b200541e0026a41086a41083602002005201f3602e0022005201441306c3602e4020b20054180026a20042001200541e0026a107d20054188026a28020021022005280280024101460d01200528028402211f200241306e21140b200c200d470d014100211a200c21020c020b2002450d080c070b200e417c6a41027641016a211a200541e0026a41086a2107200541e0026a41106a2109200541e0026a41186a212041002106201f2101200c2102024003402002220341046a21020240200328020022030d002006211a0c020b2003280208220441016a222141004c0d05200320213602082007200341dc006a2900003703002009200341e4006a2900003703002020200341ec006a2900003703002005200341d4006a2900003703e002200441026a41004c0d062003200436020820054180026a41086a2204200729030037030020054180026a41106a2221200929030037030020054180026a41186a221e2020290300370300200520052903e00237038002200341c8006a29030021082003290340210a20032003280200417f6a2216360200024020160d00200341046a22162016280200417f6a221636020020160d002003102e0b20012005290380023703002004290300212320212903002124201e2903002125200141286a2008370300200141206a200a370300200141186a2025370300200141106a2024370300200141086a2023370300200141306a2101200641016a2106200d2002470d000b200d21020b200d20026b220e41027521030b0240200e450d00200341027421030340200228020022012001280200417f6a3602000240200228020022012802000d00200141046a22012001280200417f6a3602002002280200220141046a2802000d002001102e0b200241046a21022003417c6a22030d000b0b0240200b41ffffffff0371450d00200c102e0b2000201f36020420004100360200200041186a2027360200200041146a2026360200200041106a20223602002000410c6a201a360200200041086a20143602000c010b200041086a20052902b402370200200020033602042000410136020002402027450d002027412c6c21022022210303400240200341046a2802002201450d00200141246c450d002003280200102e0b2003412c6a2103200241546a22020d000b0b02402026450d002026412c6c450d002022102e0b0240200e450d00200c210203402002220328020022022002280200417f6a360200200341046a21020240200328020022012802000d00200141046a22012001280200417f6a3602002003280200220341046a2802000d002003102e0b200d2002470d000b0b200b41ffffffff0371450d00200c102e0b200541c0036a24000f0b41bcd9cc00411820054180026a41f09cc50041c09dc500103e000b41bcd9cc00411820054180026a41f09cc50041d09dc500103e000b2003450d010b1036000b1038000bad0f07167f017e017f017e017f017e027f230041306b220224000240024002400240024002400240200141144b0d00200141014d0d0620002001417e6a22034105746a2104410221050340200320014b0d022004200510fa07200541016a2105200441606a21042003417f6a2203417f470d000c070b0b2001410176220341ffffff3f712003470d0220034105742206417f4c0d022006102c2207450d01200041606a2108200041a07f6a21094104210a4100210b4100210c2001210d0340200d210e4100210d410121050240200e417f6a220f450d000240024002400240024002402000200f4105746a200e410574221020006a41406a412010ec084100480d00200e417e6a210f200920106a21034100210d4100210403400240200f2004470d00200e21050c080b200441016a2104200341206a2003412010ec082105200341606a21032005417f4a0d000b200441016a21052004417f73200e6a210f0c010b200920106a2103024003400240200f4101470d004100210f0c020b200f417f6a210f200341206a2003412010ec082104200341606a210320044100480d000b0b200e200f490d01200e20014b0d02200e200f6b22054101762211450d00200820106a21032000200f4105746a21040340200241186a2210200441186a2212290000370300200241106a2213200441106a2214290000370300200241086a2215200441086a221629000037030020022004290000370300200341086a22172900002118200341106a2219290000211a200341186a221b290000211c200420032900003700002012201c3700002014201a37000020162018370000201b2010290300370000201920132903003700002017201529030037000020032002290300370000200341606a2103200441206a21042011417f6a22110d000b0b0240200f0d00200f210d0c050b0240200541094d0d00200f210d0c050b200e20014b0d02200e200f6b2105200f417f6a21032008200f4105746a21040340200e2003490d0a2004200541016a220510fa072003417f6a220f20034f0d04200441606a2104200f21032005410a490d000c040b0b200f200e41e4d1cc001057000b200e200141e4d1cc00104d000b200e200f417f6a2203490d06200e200141f4d1cc00104d000b200f41016a210d0b02400240024002400240200c200b460d00200c21030c010b200b41016a2203200b490d07200b41017422042003200420034b1b22034104200341044b1b220341ffffffff017120034641027421042003410374210302400240200b0d00200241003602000c010b200241043602082002200a3602002002200b4103743602040b200241206a200320042002107d2002280228210420022802204101460d012002280224210a200b21032004410376210b0b200a20034103746a220320053602042003200d360200200c41016a221b210c201b41024f0d010c020b20040d040c050b02400240024003400240024002400240200a201b220c417f6a221b4103746a2203280200450d00200c410374200a6a221141746a280200220f200328020422044d0d00200c41024d0d08200a200c417d6a22034103746a28020422052004200f6a4d0d01200c41034d0d08201141646a2802002005200f6a4b0d080c010b200c4103490d0120032802042104200a200c417d6a22034103746a28020421050b20052004490d010b200c417e6a21030b0240200c200341016a220e4d0d00200c20034d0d02200a20034103746a2216280204221d20162802006a2203200a200e4103746a22172802002219490d03200320014b0d04201641046a211e200020194105746a22142017280204221541057422046a210f2003410574210502400240200320196b221020156b22032015490d0020072014200410e908221320046a21110240024020154101480d00201020154a0d010b20142103201321040c020b200020056a2112201321042014210303402003200f2004200f2004412010ec0841004822101b2205290000370000200341186a200541186a290000370000200341106a200541106a290000370000200341086a200541086a2900003700002004200441206a20101b2104200341206a2103200f41206a200f20101b220f20124f0d02201120044b0d000c020b0b2007200f2003410574220410e908221320046a21110240024020154101480d00200341014e0d010b200f2103201321040c010b200820056a2105200f21030340200341606a2104201141606a210f20052004200f200f2004412010ec0841004822121b2210290000370000200541186a201041186a290000370000200541106a201041106a290000370000200541086a201041086a2900003700002011200f20121b2111024020142004200320121b2203490d00201321040c020b200541606a21052013210420132011490d000b0b20032004201120046b41607110e9081a201e201d20156a360200201620193602002017201741086a200c200e417f736a41037410ea081a4101210c201b41014d0d050c010b0b200e200c4184d2cc00103c000b2003200c4194d2cc00103c000b2019200341a4d2cc001057000b2003200141a4d2cc00104d000b200d450d050c000b0b2003200141c4d1cc001056000b1036000b1038000b2003200e41f4d1cc001057000b0240200b41ffffffff0171450d00200a102e0b2006450d002007102e0b200241306a24000b840403027f017e097f230041306b220224000240024020014102490d00200041306a22032000412010ec08417f4a0d002000290300210420002003290300370300200241286a2205200041286a2206290300370300200241206a200041206a2207290300370300200241186a2208200041186a2209290300370300200241106a220a200041106a220b290300370300200241086a220c200041086a220d290300370300200d200341086a290300370300200b200341106a2903003703002009200341186a2903003703002007200341206a2903003703002006200341286a2903003703002002200437030041012107024020014103490d00410020016b2109200041e0006a210341012107034020032002412010ec08417f4a0d0120012007460d03200341506a22062003290300370300200641286a200341286a290300370300200641206a200341206a290300370300200641186a200341186a290300370300200641106a200341106a290300370300200641086a200341086a290300370300200341306a21032009200741016a22076a417f470d000b0b2000200741306c6a22032002290300370300200341286a2005290300370300200341206a200241206a290300370300200341186a2008290300370300200341106a200a290300370300200341086a200c2903003703000b200241306a24000f0b2001200141d4d1cc00103c000bd809010c7f230041c0006b220524002003410020041b21062001410020021b2107200341206a200320041b2108200141206a200120021b2109200120024105746a210a200320044105746a210b410021034100210c4101210d410021014100210e4101210f0240024003400240024020060d0020070d012000200d36020c200020013602082000200e3602042000200f360200200041146a2003360200200041106a200c360200200541c0006a24000f0b02402007450d00024020062007412010ec0822020d00410020092009200a4622021b2107410020082008200b4622041b21062009200941206a20021b21092008200841206a20041b21080c030b2002417f4a0d01200541186a2202200641186a290000370300200541106a2204200641106a290000370300200541086a2210200641086a29000037030020052006290000370300024002402003200c470d00200341016a22062003490d062003410174220c2006200c20064b1b22064104200641044b1b220641ffffff3f71200646210c200641057421060240024020030d00200541003602300c010b200541013602382005200d360230200520034105743602340b200541206a2006200c200541306a107d2005280228210620052802204101460d012005280224210d2006410576210c0b200d20034105746a22062005290300370000200641186a2002290300370000200641106a2004290300370000200641086a2010290300370000410020082008200b4622021b2106200341016a21032008200841206a20021b21080c030b20060d030c040b200541186a2202200641186a290000370300200541106a2204200641106a290000370300200541086a2210200641086a29000037030020052006290000370300024002402003200c470d00200341016a22072003490d05200341017422062007200620074b1b22074104200741044b1b220741ffffff3f712007462106200741057421070240024020030d00200541003602300c010b200541013602382005200d360230200520034105743602340b200541206a20072006200541306a107d2005280228210720052802204101460d012005280224210d2007410576210c0b200d20034105746a22072005290300370000200741186a2002290300370000200741106a2004290300370000200741086a201029030037000041002107410020082008200b4622021b2106200341016a21032008200841206a20021b21080c020b20070d020c030b200541186a2202200741186a290000370300200541106a2204200741106a290000370300200541086a2210200741086a29000037030020052007290000370300024002402001200e470d00200141016a22072001490d042001410174220e2007200e20074b1b22074104200741044b1b220741ffffff3f71200746210e200741057421070240024020010d00200541003602300c010b200541013602382005200f360230200520014105743602340b200541206a2007200e200541306a107d2005280228210720052802204101460d012005280224210f2007410576210e0b200f20014105746a22072005290300370000200741186a2002290300370000200741106a2004290300370000200741086a2010290300370000410020092009200a4622021b2107200141016a21012009200941206a20021b21090c010b0b2007450d010b1036000b1038000b810202047f017e230041206b2202240002400240200128020822034106744104722204417f4c0d00200128020021012004102c2205450d0120024100360208200220043602042002200536020020032002107602402003450d002003410674210303402002200141206a41201074200129030021062002200141086a290300370318200220063703102002200241106a41101074200141106a29030021062002200141186a290300370318200220063703102002200241106a41101074200141c0006a2101200341406a22030d000b0b2000412020022802002201200228020810b20102402002280204450d002001102e0b200241206a24000f0b1038000b1036000bc30402057f027e230041f0006b2203240002400240024020022802004113470d00200241086a2d00004104470d00200341c8006a2001108103200341306a200328024822042003280250108203200341d8006a41086a2003413b6a290000370300200341d8006a41106a2205200341c3006a2f00003b0100200320032900333703584101210120032d0032210620032d003121070240024020032d00304101460d00410021010c010b200341186a41106a20052f01003b0100200341186a41086a200341d8006a41086a290300370300200320032903583703180b0240200328024c450d002004102e0b2001450d01200341106a200341186a41106a2f010022013b0100200341086a200341186a41086a29030022083703002003200329031822093703002003413a6a2008370100200341c2006a20013b0100200320063a0031200320073a003020032009370132200341d8006a200341306a10e30220032802582204200328026010e40241ff017121010240200328025c450d002004102e0b20014102460d000240200241146a280200220441c40141c70120011b470d00200228020c41abcecc0041efcfcc0020011b200410ec08450d010b200041800e3b0001200041013a0000200041036a41033a00000c020b200041003a0000200041306a41013a0000200041286a4200370300200041206a4280808080c000370300200041186a4204370300200041106a427f370300200041086a42003703000c010b200041800e3b0001200041013a0000200041036a41013a00000b200341f0006a24000bf50101047f230041306b22022400200241b6d1cc004106108102200241106a41d6f9c0004109108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000bc20602027f027e23004180016b220324002003200236020420032001360200200341086a2001200210ed0202400240200328020822010d00200041003a00000c010b200341106a2802002102200328020c2104200341003a007c024002402002450d00200320012d00003a0068200341013a007c024020024101460d00200320012d00013a0069200341023a007c20024102460d00200320012d00023a006a200341033a007c20024103460d00200320012d00033a006b200341043a007c20024104460d00200320012d00043a006c200341053a007c20024105460d00200320012d00053a006d200341063a007c20024106460d00200320012d00063a006e200341073a007c20024107460d00200320012d00073a006f200341083a007c20024108460d00200320012d00083a0070200341093a007c20024109460d00200320012d00093a00712003410a3a007c2002410a460d00200320012d000a3a00722003410b3a007c2002410b460d00200320012d000b3a00732003410c3a007c2002410c460d00200320012d000c3a00742003410d3a007c2002410d460d00200320012d000d3a00752003410e3a007c2002410e460d00200320012d000e3a00762003410f3a007c2002410f460d00200320012d000f3a0077200341103a007c20024110460d00200320012d00103a0078200341113a007c20024111460d00200320012d00113a0079200341123a007c20024112460d00200320012d00123a007a200341133a007c20024113460d00200341186a41086a200341e8006a41086a2903002205370300200320012d00133a007b200341186a41106a200341e8006a41106a2802002202360200200341143a007c200320032903682206370318200041116a2002360000200041096a200537000020002006370001410121020c020b200341003a007c0b20034100360220200342013703182003410a360234200320033602302003200341186a360264200341fc006a41013602002003420137026c200341909dc5003602682003200341306a360278200341e4006a419cebc000200341e8006a103d1a2003280218200328022010ef020240200328021c450d002003280218102e0b410021020b200020023a00002004450d002001102e0b20034180016a24000bd7c40108017f017e057f017e057f017e217f077e230041e00e6b2201240010840342002102024002400240024020004101460d00200141b0046a41186a22034200370300200141b0046a41106a22044200370300200141b0046a41086a22054200370300200142003703b004200141b8076a41a8f8c60041041081022005200141b8076a41086a2206290000370300200120012900b8073703b00420014198096a41c98bc500410b108102200320014198096a41086a22072900003703002004200129009809370300200141a0046a200141b0046a10850320012903a804210820012802a0042109200141d0046a41186a220a4200370300200141d0046a41106a220b4200370300200141d0046a41086a220c4200370300200142003703d004200141800d6a41a8f8c6004104108102200c200141800d6a41086a220d290000370300200120012900800d3703d004200141800d6a41fa8bc500410a108102200a200d290000370300200b20012900800d37030020014190046a200141d0046a10850320014180046a20012903980442002001280290041b420042e012420010e8080240024002400240024020012903880450450d002001290380042102200342003703002004420037030020054200370300200142003703b004200141b8076a41a8f8c600410410810220052006290000370300200120012900b8073703b00420014198096a41e38bc500410b108102200441086a20072900003700002004200129009809370000200141f0036a200141b0046a108503200220012903f803420020012802f0031b7c220e2002540d014200210242002008420020091b2208200e7d220e200e2008561b42e012540d05200141b0046a41186a22034200370300200141b0046a41106a220f420037030041082107200141b0046a41086a22064200370300200142003703b004200141800d6a41a081ca0041071081022006200141800d6a41086a2205290000370300200120012900800d3703b004200141800d6a41e4d1c100410c10810220032005290000370300200f20012900800d370300200141e8036a200141b0046a4120108e0220012802ec03211020012802e803211120034200370300200f420037030020064200370300200142003703b004200141800d6a41a081ca00410710810220062005290000370300200120012900800d3703b004200141800d6a4188d2c100410d10810220032005290000370300200f20012900800d370300200141b0046a1086032112200141c00c6a41186a22034200370300200141c00c6a41106a220c4200370300200141c00c6a41086a22064200370300200142003703c00c200141800d6a41a081ca00410710810220062005290000370300200120012900800d3703c00c200141800d6a41e4d1c100410c10810220032005290000370300200c20012900800d370300200141e0036a200141c00c6a4120108e0220012802e403210d20012802e0032113200141f0046a10870320034200370300200c420037030020064200370300200142003703c00c200141800d6a41a081ca00410710810220062005290000370300200120012900800d3703c00c200141800d6a41f09dc500410a10810220032005290000370300200c20012900800d370300200141800d6a200141c00c6a10880320012902840d2102200120012802800d2205410120051b22033602e005200120033602d80520012002420020051b22023e02dc05200120032002422088a74105746a3602e405200141003602e805200141800d6a200141d8056a10bd0102400240200141c00d6a280200450d0041d000102c2207450d0a2007200141800d6a41d00010e9081a200141b8076a41106a200141d8056a41106a280200360200200141b8076a41086a200141d8056a41086a290300370300200120012903d8053703b80720014198096a200141b8076a10bd01024002400240200141d8096a2802000d0041012105410121030c010b41d000210641012105410121030340200141800d6a20014198096a41d00010e9081a024020032005470d00200541016a22092005490d0d2005410174220a2009200a20094b1b22094104200941044b1bad42d0007e2202422088a74541037421092002a7210a0240024020050d00200141003602f80a0c010b200141083602800b200120073602f80a2001200541d0006c3602fc0a0b200141e00c6a200a2009200141f80a6a107d20012802e80c210520012802e00c4101460d0320012802e40c2107200541d0006e21050b200720066a200141800d6a41d00010e9081a200641d0006a2106200341016a210320014198096a200141b8076a10bd0120012802d8090d000b0b024020012802bc0741ffffff3f71450d0020012802b807102e0b2001200336028805200120053602840520012007360280050c020b2005450d090c0a0b20014100360288052001420837038005024020012802dc0541ffffff3f71450d0020012802d805102e0b41002105410021030b200141d80c6a4200370300200141d00c6a4200370300200141c00c6a41086a22064200370300200142003703c00c200141800d6a41a081ca0041071081022006200141800d6a41086a2209290000370300200120012900800d3703c00c200141800d6a41e4d1c100410c108102200c41086a2009290000370000200c20012900800d370000200141d8036a200141c00c6a4120108e0220012802dc03210620012802d8032109200141b8076a41bed8c800410810810220014198096a41a4fcc800411210810220012006410020091b3602e00c2001200141e00c6a410410a3013703f80a200141800d6a410c6a200141e00c6a41046a3602002001200141f80a6a41086a3602840d2001200141e00c6a3602880d2001200141f80a6a3602800d200141d8056a200141800d6a107c20012802e005220941206a2206417f4c0d070240024020060d004101210a0c010b2006102c220a450d090b200141003602880d200120063602840d2001200a3602800d200141800d6a200141b8076a41101074200141800d6a20014198096a41101074200141800d6a20012802d805220620091074024020012802dc05450d002006102e0b20012802800d220620012802880d108903024020012802840d450d002006102e0b200141d80c6a4200370300200141d00c6a4200370300200141c00c6a41086a22064200370300200142003703c00c200141800d6a41a081ca0041071081022006200141800d6a41086a2209290000370300200120012900800d3703c00c200141800d6a41e4d1c100410c108102200c41086a2009290000370000200c20012900800d370000200141d0036a200141c00c6a4120108e0220012802d403210620012802d0032109200141b8076a41bed8c800410810810220014198096a41edd8c800410e10810220012006410020091b3602e00c2001200141e00c6a410410a3013703f80a200141800d6a410c6a200141e00c6a41046a3602002001200141f80a6a41086a3602840d2001200141e00c6a3602880d2001200141f80a6a3602800d200141d8056a200141800d6a107c20012802e005220941206a2206417f4c0d070240024020060d004101210a0c010b2006102c220a450d090b200141003602880d200120063602840d2001200a3602800d200141800d6a200141b8076a41101074200141800d6a20014198096a41101074200141800d6a20012802d805220620091074024020012802dc05450d002006102e0b20012802800d220620012802880d108903024020012802840d450d002006102e0b024020030d00200141013a00840d200141083a00800d200141800d6a10fe012005450d05200541d0006c450d052007102e0c050b200141800d6a20014180056a10c601200141a3096a200141800d6a41086a280200360000200120012903800d37009b092001418c0d6a2001419f096a290000370000200141023a00840d200141083a00800d20012001290098093700850d200141800d6a10fe0120012802f8042114200141a0056a20014180056a41086a28020036020020012014360294052001200d410020131b220a36029005200120012903800537039805200141b8056a20014190056a41086a10c601200141003602d005200142013703c80520012802b805211520012802bc05211620012802c00521134104102c2205450d08200142043702d404200120053602d0042001200a3602800d200141d0046a200141800d6a41041074200141800d6a41f996c500108a0320014198096a20012802800d220320012802880d108b03200129029c09420020012802980922051b21022005410120051b2117024020012802840d450d002003102e0b200120024220883e02b404200120173602b004200141c8036a200141b0046a10ab01024020012802c803450d00410021184104210c4100210d0c040b20012802cc03220c20012802b40441246e22052005200c4b1bad42247e2208422088a70d072008a72205417f4c0d070240024020050d00410421190c010b2005102c2219450d090b200541246e211a0240200c0d004100210c0c030b4100210d034002400240024020012802b40422034104490d00200d41016a211820012802b0042207280000211b20012003417c6a22093602b4042001200741046a3602b00441002105200141003a00a00d2003417b6a210302400340200141003a00a80520092005460d01200141800d6a20056a200720056a220641046a2d00003a00002001200641056a3602b0042001200541016a22063a00a00d200120033602b4042003417f6a21032006210520064120470d000b20014198096a41186a2205200141800d6a41186a29030037030020014198096a41106a2203200141800d6a41106a29030037030020014198096a41086a2207200141800d6a41086a290300370300200120012903800d37039809200641ff01714120490d01200141d8056a41086a20072903002208370300200141f80a6a41186a22062005290300370300200141f80a6a41106a22052003290300370300200141f80a6a41086a22032008370300200120012903980922083703d805200120083703f80a200141e00c6a41186a22072006290300370300200141e00c6a41106a22062005290300370300200141e00c6a41086a22092003290300370300200120012903f80a3703e00c200d201a470d03201a41016a2205201a4f0d020c0c0b200541ff0171450d00200141003a00a00d0b410021184104210c0240201a450d00201a41246c450d002019102e0b4100210d0c060b201a41017422032005200320054b1b22054104200541044b1bad42247e2208422088a74541027421052008a7210302400240201a0d00200141003602800d0c010b200141043602880d200120193602800d2001201a41246c3602840d0b20014198096a20032005200141800d6a107d20012802a009210502402001280298094101470d0020050d0b0c0a0b200128029c092119200541246e211a0b2019200d41246c6a2205201b360200200520012903e00c3702042005410c6a2009290300370200200541146a20062903003702002005411c6a20072903003702002018210d2018200c460d030c000b0b41e8b2c40041fa0041e4b3c400105d000b41e8b2c40041fa0041f4b3c400105d000b200c410020191b210d201a410020191b21182019410420191b210c0b200141800d6a41f996c500200141d0046a108c0320014198096a20012802800d220320012802880d108d032001280298092105200129029c092108024020012802840d450d002003102e0b2008420020051b210820012802d804211c20012802d404211d20012802d004211e02402002a7450d002017102e0b2005410120051b211f2008a72119024002400240024002402013450d002008422088a7211a2015201341d0006c6a2117200141800d6a41d0006a2120200141800d6a410c6a211b200141b8076a41c4006a21212015210941002122024002400340200141d8056a41386a22232009220541386a290300370300200141d8056a41306a2224200541306a290300370300200141d8056a41286a2225200541286a290300370300200141d8056a41206a2226200541206a290300370300200141d8056a41186a2206200541186a290300370300200141d8056a41106a2207200541106a290300370300200141d8056a41086a2213200541086a290300370300200141b8076a41086a2203200541cc006a280200360200200120052903003703d8052001200541c4006a2902003703b807200541d0006a2109200541c0006a2802002205450d04200141f80a6a41386a22272023290300370300200141f80a6a41306a22232024290300370300200141f80a6a41286a22242025290300370300200141f80a6a41206a22252026290300370300200141f80a6a41186a22262006290300370300200141f80a6a41106a22282007290300370300200141f80a6a41086a22292013290300370300200141a8056a41086a222a2003280200360200200120012903d8053703f80a200120012903b8073703a805200141b8076a41386a2027290300370300200141b8076a41306a2023290300370300200141b8076a41286a2024290300370300200141b8076a41206a2025290300370300200141b8076a41186a2026290300370300200141b8076a41106a202829030037030020032029290300370300200120012903f80a3703b807200120053602f807202120012903a805370200202141086a202a2802003602004104102c2205450d0c200142043702840d200120053602800d2001200a36029809200141800d6a20014198096a41041074201b41086a41002900819745370000201b41002900f996453700002001200141b8076a36029c0d200141d8056a200141800d6a10ae01024020012802840d450d0020012802800d102e0b200141800d6a200141d8056a108e0320012802800d220320012802880d108f022105024020012802840d450d002003102e0b024002400240024020050d0020014198096a200141b8076a41d00010e9081a200141e00c6a200141c8056a10c801200141800d6a20014198096a41d00010e9081a202041086a200141e00c6a41086a280200360200202020012903e00c37020020014198096a200141d8056a108e03200128029809220520012802a009200141800d6a108f030240200128029c09450d002005102e0b024020012802c40d2205450d00200541306c450d0020012802c00d102e0b024020012802d40d41ffffff3f71450d0020012802d00d102e0b200141b0046a41186a22232006290300370300200141b0046a41106a22242007290300370300200141b0046a41086a22252013290300370300200120012903d8053703b004410021050240200d0e020302000b41002105200d2103034020052003410176220620056a2207200c200741246c6a280200200a4b1b2105200320066b220341014b0d000c020b0b20012802fc072205450d02200541306c450d0220012802f807102e0c020b200c200541246c6a2802002203200a460d0020052003200a496a21050b200141800d6a41186a22062023290300370300200141800d6a41106a22072024290300370300200141800d6a41086a22132025290300370300200120012903b0043703800d200d2005490d020240200d2018470d00201841016a22032018490d0d201841017422262003202620034b1b22034104200341044b1bad42247e2202422088a74541027421032002a721260240024020180d0020014100360298090c010b200141043602a0092001200c360298092001201841246c36029c090b200141e00c6a2026200320014198096a107d20012802e80c210320012802e00c4101460d0420012802e40c210c200341246e21180b200c200541246c6a220341246a2003200d20056b41246c10ea081a2003200a3602002003411c6a2006290300370200200341146a20072903003702002003410c6a2013290300370200200320012903800d370204200141d0046a41186a22032023290300370300200141d0046a41106a22062024290300370300200141d0046a41086a22072025290300370300200120012903b0043703d0040240201a2019470d00201941016a22052019490d0d201941017422132005201320054b1b22054104200541044b1b220541ffffff3f712005462113200541057421050240024020190d00200141003602800d0c010b200141013602880d2001201f3602800d200120194105743602840d0b20014198096a20052013200141800d6a107d20012802a009210502402001280298094101470d0020050d0f0c0e0b200128029c09211f200541057621190b200d41016a210d201f201a4105746a220520012903d004370000200541186a2003290300370000200541106a2006290300370000200541086a200729030037000041012122201a41016a211a0b20092017470d000b201721090c030b2005200d1045000b20030d090c080b2016450d01201641d0006c450d012015102e0c010b024020172009460d0003402009220541d0006a21090240200541c4006a2802002203450d00200341306c450d00200541c0006a280200102e0b20172009470d000b0b02402016450d00201641d0006c450d002015102e0b2022410171450d00024002400240201a450d00201a4105742107200141c40d6a2105201f21030340200141d0046a2003108e03200141800d6a20012802d004220920012802d80410900320014198096a41086a2213200141800d6a41086a29030037030020014198096a41106a2217200141800d6a41106a29030037030020014198096a41186a221b200141800d6a41186a29030037030020014198096a41206a2221200141800d6a41206a29030037030020014198096a41286a2223200141800d6a41286a29030037030020014198096a41306a2224200141800d6a41306a29030037030020014198096a41386a2225200141800d6a41386a290300370300200141e00c6a41086a2226200541086a290200370300200141e00c6a41106a2227200541106a290200370300200141e00c6a41186a2228200541186a280200360200200120012903800d37039809200120052902003703e00c024020012802c00d2206450d00200141b8076a41386a2025290300370300200141b8076a41306a2024290300370300200141b8076a41286a2023290300370300200141b8076a41206a2021290300370300200141b8076a41186a201b290300370300200141b8076a41106a2017290300370300200141b8076a41086a2013290300370300200141d8056a41086a2026290300370300200141d8056a41106a2027290300370300200141d8056a41186a202828020036020020012001290398093703b807200120012903e00c3703d8050b024020012802d404450d002009102e0b20060d02200341206a2103200741606a22070d000b0b42002102410821090c010b200141f80a6a41386a2205200141b8076a41386a290300370300200141f80a6a41306a2213200141b8076a41306a290300370300200141f80a6a41286a2217200141b8076a41286a290300370300200141f80a6a41206a221b200141b8076a41206a290300370300200141f80a6a41186a2221200141b8076a41186a290300370300200141f80a6a41106a2223200141b8076a41106a290300370300200141f80a6a41086a2224200141b8076a41086a290300370300200141c00c6a41086a2225200141d8056a41086a290300370300200141c00c6a41106a2226200141d8056a41106a290300370300200141c00c6a41186a2227200141d8056a41186a280200360200200120012903b8073703f80a200120012903d8053703c00c41e000102c2209450d08200920012903f80a37030020092006360240200920012903c00c370244200941386a2005290300370300200941306a2013290300370300200941286a2017290300370300200941206a201b290300370300200941186a2021290300370300200941106a2023290300370300200941086a2024290300370300200941cc006a2025290300370200200941d4006a2026290300370200200941dc006a2027280200360200024020074120470d0042818080801021020c010b200341206a2113201f201a4105746a222241606a2115200141800d6a41c4006a210542818080801021020340201321030340200141d0046a2003108e03200141800d6a20012802d004220720012802d80410900320014198096a41086a2213200141800d6a41086a222929030037030020014198096a41106a2217200141800d6a41106a222a29030037030020014198096a41186a221b200141800d6a41186a222029030037030020014198096a41206a2221200141800d6a41206a29030037030020014198096a41286a2223200141800d6a41286a29030037030020014198096a41306a2224200141800d6a41306a29030037030020014198096a41386a2225200141800d6a41386a290300370300200141e00c6a41086a2226200541086a290200370300200141e00c6a41106a2227200541106a290200370300200141e00c6a41186a2228200541186a280200360200200120012903800d37039809200120052902003703e00c024020012802c00d2206450d00200141b8076a41386a2025290300370300200141b8076a41306a2024290300370300200141b8076a41286a2023290300370300200141b8076a41206a2021290300370300200141b8076a41186a201b290300370300200141b8076a41106a2017290300370300200141b8076a41086a2013290300370300200141f80a6a41086a2026290300370300200141f80a6a41106a2027290300370300200141f80a6a41186a202828020036020020012001290398093703b807200120012903e00c3703f80a0b024020012802d404450d002007102e0b024020060d002022200341206a2203470d010c030b0b200141d8056a41386a2207200141b8076a41386a2217290300370300200141d8056a41306a2213200141b8076a41306a221b290300370300200141d8056a41286a2227200141b8076a41286a2221290300370300200141d8056a41206a2228200141b8076a41206a2223290300370300200141d8056a41186a2216200141b8076a41186a2224290300370300200141d8056a41106a222b200141b8076a41106a2225290300370300200141d8056a41086a222c200141b8076a41086a2226290300370300200141c00c6a41086a222d200141f80a6a41086a290300370300200141c00c6a41106a222e200141f80a6a41106a290300370300200141c00c6a41186a222f200141f80a6a41186a280200360200200120012903b8073703d805200120012903f80a3703c00c2026202c2903003703002025202b290300370300202420162903003703002023202829030037030020212027290300370300201b201329030037030020172007290300370300200120012903d8053703b8072029202d290300370300202a202e2903003703002020202f280200360200200120012903c00c3703800d024002402002422088a722072002a7460d00200221080c010b200741016a22132007490d0920074101742227201320132027491b22134104201341044b1bad42e0007e2208422088a74541037421132008a721270240024020070d0020014100360298090c010b200141083602a00920012009360298092001200741e0006c36029c090b200141f80a6a2027201320014198096a107d20012802800b211320012802f80a4101460d0420012802fc0a2109201341e0006ead21080b200341206a21132009200741e0006c6a220720012903b807370300200741106a2025290300370300200741086a2026290300370300201b290300210e20172903002130202129030021312023290300213220242903002133200741c0006a2006360200200741186a2033370300200741206a2032370300200741286a2031370300200741386a2030370300200741306a200e370300200741c4006a20012903800d370200200741cc006a2029290300370200200741d4006a202a290300370200200741dc006a2020280200360200200842ffffffff0f8320024280808080107c4280808080708384210220152003470d000b0b200141a00d6a200d3602002001419c0d6a2018360200200141940d6a201a360200200141900d6a20193602002001200c3602980d2001201f36028c0d2001201c3602880d2001201d3602840d2001201e3602800d200d41246c41046a2205417f4c0d060240024020050d00410121030c010b2005102c2203450d080b200141003602c007200120053602bc07200120033602b807200d200141b8076a10760240200d450d00200c200d41246c6a2106200c210503402001200528020036029809200141b8076a20014198096a410410744120102c2203450d092001422037029c09200120033602980920014198096a200541046a220541201074200141b8076a200128029809220320012802a00910740240200128029c09450d002003102e0b200541206a22052006470d000b0b20014198096a41f996c500108a03200128029809220520012802a009200141b8076a10c5020240200128029c09450d002005102e0b024020012802bc07450d0020012802b807102e0b20014198096a41f996c500200141800d6a108c03200128029809220520012802a0092001418c0d6a1091030240200128029c09450d002005102e0b0240201d450d00201e102e0b0240201941ffffff3f71450d00201f102e0b2018450d02201841246c450d02200c102e0c020b0240201d450d00201e102e0b0240201941ffffff3f71450d00201f102e0b4100210902402018450d00201841246c450d00200c102e0b0c010b20130d050c040b024020012802cc0541ffffff3f71450d0020012802c805102e0b024020090d0020012802980521070240200141a0056a2802002205450d00200541d0006c2103200741c4006a21050340024020052802002206450d00200641306c450d002005417c6a280200102e0b200541d0006a2105200341b07f6a22030d000b0b024020014190056a410c6a2802002205450d00200541d0006c450d002007102e0b41bceacc00410c10ef0241adeacc00410f10ef020c010b4100210602400240024002402014410a6e417f732002422088a722076a220320074b0d0020144101201441014b1b2205418094ebdc036e2005418094ebdc03704100476a22064101200641014b1b220620054b0d012005200341036c220320052003491b20066ead428094ebdc037e200520066ead8042ffffffff0f834280bbb0217e428094ebdc0380a721060b200741ffffffff03712007470d0620074102742205417f4c0d060240024020050d004104210c0c010b2005102c220c450d080b02402005410276220d20074f0d00200541017622032007200320074b1b22034104200341044b1b220341ffffffff0371200346410274210d200341027421030240024020050d00200141003602800d0c010b200141880d6a4104360200200120053602840d2001200c3602800d0b20014198096a2003200d200141800d6a107d200141a0096a280200210502402001280298094101460d00200128029c09210c2005410276210d0c030b20050d080c070b20070d01410021050c020b41d0d8c800411941bcd7cc001039000b20072103200c2105034020052006360200200541046a21052003417f6a22030d000b200721050b200141b8036a20092007200c20052001280290051092034104102c2205450d04200142043702bc07200120053602b8072001200a3602800d200141b8076a200141800d6a41041074200141cc076a41002900819745370200200141002900f996453702c407200141b3096a200141b8076a41186a280200360000200141ab096a200141b8076a41106a290300370000200141a3096a20012903c007370000200120012903b80737009b09200141890d6a200141a0096a290000370000200141910d6a20014198096a41106a290000370000200141800d6a41186a200141af096a290000370000200141a00d6a41013a0000200141053a00800d20012001290098093700810d200141800d6a10fe010240200d450d00200c102e0b02402007450d00200741e0006c2103200941d4006a210503400240200541706a2802002206450d00200641306c450d002005416c6a280200102e0b0240200528020041ffffff3f71450d002005417c6a280200102e0b200541e0006a2105200341a07f6a22030d000b0b02402002a72205450d00200541e0006c450d002009102e0b20012802980521070240200141a0056a2802002205450d00200541d0006c2103200741c4006a21050340024020052802002206450d00200641306c450d002005417c6a280200102e0b200541d0006a2105200341b07f6a22030d000b0b2001419c056a2802002205450d00200541d0006c450d002007102e0b024020012802f40441ffffff3f71450d0020012802f004102e0b200141b0046a41186a22184200370300200141b0046a41106a221a4200370300200141b0046a41086a22174200370300200142003703b004200141800d6a41a081ca0041071081022017200141800d6a41086a2205290000370300200120012900800d3703b004200141800d6a41f09dc500410a108102200441086a2005290000370000200420012900800d370000200141800d6a200141b0046a10880320012802800d2205410120051b212920012902840d420020051b2202a7211f0240024002402002422088a72205450d002029200541057422076a2119200141b8076a41206a212a2001419c0b6a2103202921050340200141c00c6a41186a2206200541186a2209290000370300200141c00c6a41106a220a200541106a220c290000370300200141c00c6a41086a220d200541086a2213290000370300200120052900003703c00c20132900002102200c29000021082005290000210e200141d0046a41186a220c2009290000370300200141d0046a41106a22092008370300200141d0046a41086a221320023703002001200e3703d004200141b8076a41186a2006290300370300200141b8076a41106a200a290300370300200141b8076a41086a200d290300370300200120012903c00c3703b807200141f80a6a200141b8076a10bf01200141e00c6a41086a200141f80a6a41086a290300370300200141e00c6a41106a200141f80a6a41106a290300370300200141e00c6a41186a200141f80a6a41186a29030037030020014190056a41086a200341086a280200360200200120012903f80a3703e00c200120032902003703900520012802980b21062018200c290300370300201a200929030037030020172013290300370300200120012903d0043703b00402402006450d00202a20012903e00c370300202a41086a200141e00c6a41086a290300370300202a41106a200141e00c6a41106a290300370300202a41186a200141e00c6a41186a290300370300200141b8076a41186a200141b0046a41186a2903002202370300200141b8076a41106a200141b0046a41106a2903002208370300200141b8076a41086a200141b0046a41086a290300220e370300200141800d6a41086a2203200e370300200141800d6a41106a22092008370300200141800d6a41186a220a2002370300200141800d6a41206a220c200141b8076a41206a290300370300200141800d6a41286a220d200141b8076a41286a290300370300200141800d6a41306a2213200141b8076a41306a290300370300200141800d6a41386a2217200141b8076a41386a290300370300200120012903b00422023703b807200120023703800d200141c8056a41086a221820014190056a41086a28020036020020014198096a41386a221a201729030037030020014198096a41306a2217201329030037030020014198096a41286a2213200d29030037030020014198096a41206a220d200c29030037030020014198096a41186a220c200a29030037030020014198096a41106a220a200929030037030020014198096a41086a2209200329030037030020012001290390053703c805200120012903800d37039809200141b8056a41086a22032018280200360200200120012903c8053703b805200141d8056a41386a2218201a290300370300200141d8056a41306a221a2017290300370300200141d8056a41286a221b2013290300370300200141d8056a41206a2213200d290300370300200141d8056a41186a220d200c290300370300200141d8056a41106a220c200a290300370300200141d8056a41086a220a200929030037030020012001290398093703d805200141a8056a41086a22092003280200360200200120012903b8053703a80541d000102c2217450d08201720012903d80537030020172006360240201720012903a805370244201741386a2018290300370300201741306a201a290300370300201741286a201b290300370300201741206a2013290300370300201741186a200d290300370300201741106a200c290300370300201741086a200a290300370300201741cc006a2009280200360200024020074120470d0041012128410121270c040b200541206a210a201941606a2120200141fc056a210341012128410121270340200a21050340200141c00c6a41186a2206200541186a2207290000370300200141c00c6a41106a2209200541106a220a290000370300200141c00c6a41086a220c200541086a220d290000370300200120052900003703c00c200141d0046a41186a22132007290000370300200141d0046a41106a2207200a290000370300200141d0046a41086a220a200d290000370300200120052900003703d004200141b8076a41186a221a2006290300370300200141b8076a41106a221b2009290300370300200141b8076a41086a2209200c290300370300200120012903c00c3703b807200141d8056a200141b8076a10bf01200141e00c6a41086a2221200141d8056a41086a220c290300370300200141e00c6a41106a2223200141d8056a41106a220d290300370300200141e00c6a41186a2224200141d8056a41186a221829030037030020014190056a41086a2225200341086a280200360200200120012903d8053703e00c200120032902003703900520012802f8052106200141b0046a41186a22262013290300370300200141b0046a41106a22132007290300370300200141b0046a41086a2207200a290300370300200120012903d0043703b00402402006450d00202a20012903e00c370300202a41086a2021290300370300202a41106a2023290300370300202a41186a2024290300370300201a20262903002202370300201b2013290300220837030020092007290300220e370300200141800d6a41086a2207200e370300200141800d6a41106a220a2008370300200141800d6a41186a22132002370300200141800d6a41206a221a200141b8076a41206a290300370300200141800d6a41286a221b200141b8076a41286a290300370300200141800d6a41306a2221200141b8076a41306a290300370300200141800d6a41386a2223200141b8076a41386a290300370300200120012903b00422023703b807200120023703800d200141c8056a41086a2224202528020036020020014198096a41386a2225202329030037030020014198096a41306a2223202129030037030020014198096a41286a2221201b29030037030020014198096a41206a221b201a29030037030020014198096a41186a221a201329030037030020014198096a41106a2213200a29030037030020014198096a41086a220a200729030037030020012001290390053703c805200120012903800d37039809200141b8056a41086a22072024280200360200200120012903c8053703b805200141f80a6a41386a22242025290300370300200141f80a6a41306a22252023290300370300200141f80a6a41286a22232021290300370300200141f80a6a41206a2221201b290300370300200141f80a6a41186a221b201a290300370300200141f80a6a41106a221a2013290300370300200141f80a6a41086a2213200a29030037030020012001290398093703f80a200141a8056a41086a220a2007280200360200200120012903b8053703a805200c2013290300370300200d201a2903003703002018201b290300370300200141d8056a41206a22132021290300370300200141d8056a41286a221a2023290300370300200141d8056a41306a221b2025290300370300200141d8056a41386a22212024290300370300200120012903f80a3703d8052009200a280200360200200120012903a8053703b8070240024020272028470d00202841016a22072028490d0c2028410174220a2007200a20074b1b22074104200741044b1bad42d0007e2202422088a74541037421072002a7210a0240024020280d00200141003602800d0c010b200141083602880d200120173602800d2001202841d0006c3602840d0b20014198096a200a2007200141800d6a107d20012802a00921072001280298094101460d01200128029c092117200741d0006e21280b200541206a210a2017202741d0006c6a220720012903d805370300200d2903002102201829030021082013290300210e201a2903002130201b290300213120212903002132200c290300213320072006360240200741086a2033370300200741386a2032370300200741306a2031370300200741286a2030370300200741206a200e370300200741186a2008370300200741106a2002370300200720012903b807370244200741cc006a2009280200360200202741016a212720202005470d030c070b20070d0b0c0a0b2019200541206a2205470d000c050b0b0b200541206a2105200741606a22070d000b0b0240201f41ffffff3f71450d002029102e0b410821174100212741042105410021280c010b0240201f41ffffff3f71450d002029102e0b202741d0006c4104722205417f4c0d030b2005102c2203450d032010410020111b2107200141003602880d200120053602840d200120033602800d2027200141800d6a10760240202741d0006c2205450d00201720056a21032017210503402005200141800d6a10a1012003200541d0006a2205470d000b0b20012802880d210320012802800d210620012007360298094117102c2205450d032005412f3a0012200541e1d8013b0010200542e8d2cda3f7cddcb4e300370008200542f3cacd9b97ed9bb7df00370000200520012802980936001320054117200620031093032005102e024020012802840d450d0020012802800d102e0b02402027450d00202741d0006c2103201741c4006a21050340024020052802002206450d00200641306c450d002005417c6a280200102e0b200541d0006a2105200341b07f6a22030d000b0b02402028450d00202841d0006c450d002017102e0b200141b8076a109403024020012903b80722024202510d0020012903c0072108200141800d6a200141c8076a280200220641016a109503200141b0036a20012802800d220320012802880d108e0220012802b403210920012802b0032105024020012802840d450d002003102e0b20054101470d002009200741016a470d0020024201520d00200141e8046a22094200370300200141d0046a41106a220a4200370300200141d0046a41086a22054200370300200142003703d004200141800d6a41e8fcc60041091081022005200141800d6a41086a2203290000370300200120012900800d3703d004200141800d6a41b08ec9004103108102200b41086a220c2003290000370000200b20012900800d370000200141a0036a200141d0046a108503200141f8026a20012903a803420020012802a0031b220242e80780420042e807420010e808200141800d6a200610960320014188036a20012802800d221320012802880d10f80220012903f802220e200242e807827c2202427f200141f8026a41086a2903002002200e54ad7c501b20087d213020014188036a41106a2903004200200128028803220d1b21082001290390034200200d1b2131024020012802840d450d002013102e0b20094200370300200a420037030020054200370300200142003703d004200141800d6a41f8fcc600410810810220052003290000370300200120012900800d3703d004200141800d6a41a8aac800410d108102200c2003290000370000200b20012900800d370000200141e0026a200141d0046a412010f802200141d0026a20012903e802420020012802e00222051b220e200141e0026a41106a290300420020051b2202428094ebdc03420010e608200141c0026a200e2002428094ebdc03420010e708200220082031200e56200820025620082002511b22051b2108200e203120051b21332030428086ebc7f5002030428086ebc7f500541b420588428094ebdc037e4298ac9fd603802134200141c0026a41086a29030021314100210341b0fac600210520012903c002213220012903d0022130024002400340200141b0026a2032203120053502002202420010e808203320012903b002220e203020027e2202428094ebdc0380a7417f2002428080808080c0b2cd3b541b2002428094ebdc03824280cab5ee01566aad7c2202542008200141b0026a41086a2903002002200e54ad7c22025420082002511b0d01200541086a2105200341016a22034121470d000b200141a0026a203220314298f1840d420010e808200141a8026a29030020012903a002220820304298f1840d7e2202428094ebdc0380a72002428094ebdc03824280cab5ee01566aad7c2202200854ad7c21080c010b02402003417f6a220920034d0d00200141b0016a2032203142c0f0f50b420010e808200141b8016a29030020012903b00122082030422880a7203042c0f0f50b7e428094ebdc03824280cab5ee01566aad7c2202200854ad7c21080c010b02400240200941204b0d0020014190026a203220312009410374220a41b0fac6006a2802002209ad2202420010e808200141f0016a2033200129039002220e203020027e2202428094ebdc0380a7417f2002428080808080c0b2cd3b541b220341016a20032002428094ebdc03824280cab5ee01561bad7c22022033200256200820014190026a41086a2903002002200e54ad7c220e562008200e511b22031b22352002203320031b22027d22332008200e20031b200e200820031b7d2035200254ad7d220e41002005280200220c20096b22092009200c4b1b22094101200941014b1bad2202420010e708200141c0016a200141f0016a41086a2903004200200541046a2802002209200a41b4fac6006a2802002205200920054b220a1b20052009200a1b6bad2208420010e808200141d0016a20012903f00142002008420010e808200141e0016a2033200e2002420010e60820014180026a203220312005ad2233420010e808427f427f200141d0016a41086a290300220e20012903c0017c223520012903c8014200522035200e5472220a1b2235427f20012903d001200a1b220e20012903e00120087e2002807c2202200e54220aad7c2208200a20082035542002200e5a1b220a1b2135427f2002200a1b210e20014180026a41086a2903002001290380022236203020337e2202428094ebdc0380a7417f2002428080808080c0b2cd3b541b2002428094ebdc03824280cab5ee01566aad7c2208203654ad7c21022003200920054d460d01427f200220357c2008200e7c220e2008542205ad7c22082005200820025420082002511b22051b2108427f200e20051b21020c020b2009412141f889c500103c000b4200200220357d2008200e54ad7d22332008200e7d220e200856203320025620332002511b22051b21084200200e20051b21020b200141a0016a20022008428094ebdc03420010e60820014190016a20022008428094ebdc03420010e70820014180016a20012903900120014190016a41086a2903002034420010e808200141f0006a203220314280c2d72f420010e808200141e0006a200129037022082030420a80a720304280c2d72f7e428094ebdc03824280cab5ee01566aad7c2202200141f0006a41086a2903002002200854ad7c2208428094ebdc03420010e608200141d0006a20022008428094ebdc03420010e708200141c0006a2001290350200141d0006a41086a2903002034420010e8082001418c0d6a2006360200200141800d6a41086a41003a0000200141800d6a41106a2001290380012208203420012903a0017e2202428094ebdc0380a72002428094ebdc03824280cab5ee01566aad7c2202370300200141980d6a20014180016a41086a2903002002200854ad7c2208370300200141a80d6a4200200141c0006a41086a29030020012903402230203420012903607e220e428094ebdc0380a7200e428094ebdc03824280cab5ee01566aad7c220e203054ad7c223020087d200e200254ad7d2231200e20027d2232200e56203120305620312030511b22051b2231370300200141a00d6a4200203220051b2232370300200141043a00800d200141800d6a10fe0120014198096a200610970320012802a00921032001280298092105200120083703880d200120023703800d20052003200141800d6a411010b2010240200128029c09450d002005102e0b200120313703880d200120323703800d024002400240200e200256203020085620302008511b0d00200142003703880d200142003703800d0c010b200141800d6a10980320012903800d21022001200141800d6a41086a29030022083703880d200120023703800d20022008844200520d010b2001200141800d6a3602980920014198096a10cc020c010b200142f0f2bda1a7ee9cb9f90037039809200141800d6a20014198096a10cd02200141306a200141800d6a2002200810fd01200141a8096a200141306a41086a290300223020087d2001290330220e200254ad7d200820307d2002200e54ad7d200e200256203020085620302008511b22051b3703002001200e20027d2002200e7d20051b3703a00920012005ad3703980920014198096a41086a21030240024020050d00200120033602d805200141d8056a10cc020c010b200120033602d805200141d8056a10ce020b200141980d6a2008370300200141900d6a2002370300200141880d6a41063a00002001410e3a00800d200141800d6a10fe010b200141c8046a4200370300200141c0046a4200370300200141b0046a41086a22054200370300200142003703b004200141800d6a41a081ca0041071081022005200141800d6a41086a2203290000370300200120012900800d3703b004200141800d6a41dff9c000410a108102200f41086a2003290000370000200f20012900800d370000200141203602bc052001200141b0046a3602b80520014190056a200141b0046a412010ed0202400240200128029005220a0d00410021090c010b200128029405210c200120014190056a41086a2802003602cc052001200a3602c805200141286a200141c8056a10ab010240024020012802280d00200128022c220d20012802cc0541e0016e22052005200d4b1bad42e0017e2202422088a70d052002a72205417f4c0d050240024020050d00410121090c010b2005102c2209450d070b200541e0016ead210202400240200d450d00200141800d6a41206a2117200141f80a6a4101722118410021130340200141003a00980b20012802cc05417f6a2105201341016a211341002103024002400240024002400340200141003a00a8052005417f460d01200141f80a6a20036a20012802c80522062d00003a00002001200641016a3602c8052001200341016a22063a00980b200120053602cc052005417f6a21052006210320064120470d000b200141e00c6a41186a2205200141f80a6a41186a290300370300200141e00c6a41106a2203200141f80a6a41106a290300370300200141e00c6a41086a221a200141f80a6a41086a290300370300200120012903f80a3703e00c200641ff01714120490d01200141d0046a41086a2206201a290300370300200141d0046a41106a221a2003290300370300200141d0046a41186a22032005290300370300200120012903e00c3703d004200141f80a6a200141c8056a10990320012d00f80a4101460d01200141800d6a41186a2003290300370300200141800d6a41106a201a290300370300200141800d6a41086a2006290300370300200120012903d0043703800d2017201841c00110e9081a20014198096a200141800d6a41e00110e9081a200141b8076a20014198096a41e00110e9081a200141d8056a200141b8076a41e00110e9081a2002422088a722052002a7470d04200541016a22032005490d0d20054101742206200320032006491b22034104200341044b1bad42e0017e2202a721032002422088a745210620050d02200141003602800d0c030b200341ff0171450d00200141003a00980b0b2002a721052005450d06200541e0016c450d062009102e0c060b200141013602880d200120093602800d2001200541e0016c3602840d0b20014198096a20032006200141800d6a107d20012802a00921032001280298094101460d03200128029c092109200341e0016ead21020b2009200541e0016c6a200141d8056a41e00110e9081a200242ffffffff0f83200541016aad4220868421022013200d470d000b0b2009450d010c020b20030d060c050b41002109200141003602a00920014201370398092001410a3602bc072001200141b8056a3602b807200120014198096a3602d805200141940d6a4101360200200142013702840d200141909dc5003602800d2001200141b8076a3602900d200141d8056a419cebc000200141800d6a103d1a20012802980920012802a00910ef02200128029c09450d00200128029809102e0b200c450d00200a102e0b2002420020091b2208422088a7222141ffffff3f712021470d0241012123024020214105742205450d002005102c2223450d040b2009410120091b2124410021032001410036029805200120233602900520012005410576222736029405024002400240202720214f0d00200541047622032021200320214b1b22034104200341044b1b220341ffffff3f712003462106200341057421030240024020050d00200141003602800d0c010b200141880d6a4101360200200120053602840d200120233602800d0b20014198096a20032006200141800d6a107d200141a0096a280200210502402001280298094101460d002001200128029c09222336029005200120054105762227360294050c020b20050d060c050b2021450d010b202141e0016c220641a07e6a41e0016e21092023210520242103034020052003290000370000200541186a200341186a290000370000200541106a200341106a290000370000200541086a200341086a290000370000200541206a2105200341e0016a2103200641a07e6a22060d000b200941016a21030b2001200336029805200141c8046a22064200370300200141c0046a22094200370300200141b0046a41086a22054200370300200142003703b004200141800d6a41a081ca0041071081022005200141800d6a41086a2203290000370300200120012900800d3703b004200141800d6a41f09dc500410a108102200f41086a220a2003290000370000200f20012900800d370000200141b0046a20014190056a109a0302402012201241ff0171410247712220450d00200642003703002009420037030020054200370300200142003703b004200141800d6a41a081ca00410710810220052003290000370300200120012900800d3703b004200141800d6a41f8d2c1004112108102200a2003290000370000200f20012900800d370000200141800d6a200141b0046a109b0320012802800d220c450d00200141b0046a412010ff0120012902840d42ffffffff0383500d00200c102e0b200642003703002009420037030020054200370300200142003703b004200141800d6a41a081ca00410710810220052003290000370300200120012900800d3703b004200141800d6a41e4d1c100410c108102200a2003290000370000200f20012900800d3700002001200741016a22283602800d200141b0046a4120200141800d6a410410b201200141800d6a1094030240024020012903800d4202510d00200141900d6a28020041016a21050c010b410021050b200141800d6a2005109503200141206a20012802800d220620012802880d108e022001280224210320012802202105024020012802840d450d002006102e0b024020054101470d00024020032028460d00200320284f0d0141c3ebc600413010ef020b2028109c030b200141c8046a4200370300200141c0046a4200370300200141b0046a41086a22054200370300200142003703b004200141b8076a41a081ca0041071081022005200141b8076a41086a290000370300200120012900b8073703b00420014198096a41bfadc000410b108102200441086a20014198096a41086a2900003700002004200129009809370000200141800d6a200141b0046a4120109d03200741026a211b0240024020012802800d4101470d0020013502840d21020c010b201bad220242208620028421020b2001200242ffffffff0f83200741036aad422086843702840d200141013602800d200141b0046a41186a4200370300200141b0046a41106a4200370300200141b0046a41086a22054200370300200142003703b004200141b8076a41a081ca0041071081022005200141b8076a41086a290000370300200120012900b8073703b00420014198096a41bfadc000410b108102200441086a20014198096a41086a2900003700002004200129009809370000200141b0046a4120200141800d6a410472109e03200141d0046a41186a22064200370300200141d0046a41106a22074200370300200141d0046a41086a22054200370300200142003703d004200141800d6a4192fdc60041071081022005200141800d6a41086a2203290000370300200120012900800d3703d004200141800d6a4198b7c6004115108102200b41086a22092003290000370000200b20012900800d3700002001201b3602800d200141d0046a4120200141800d6a410410b201200642003703002007420037030020054200370300200142003703d004200141800d6a4192fdc600410710810220052003290000370300200120012900800d3703d004200141800d6a4194adc600410a10810220092003290000370000200b20012900800d370000200141186a200141d0046a4120108e020240024020012802184101460d00200141c00c6a201b109f030c010b200141800d6a200128021c109503200141106a20012802800d220620012802880d108e022001280214210320012802102105024020012802840d450d002006102e0b024020050d00418debc600413610ef02410021030b024002400240024010a00341ff01710e0401000302030b200141e8046a4200370300200141e0046a4200370300200141d0046a41086a22054200370300200142003703d004200141800d6a4192fdc60041071081022005200141800d6a41086a2203290000370300200120012900800d3703d004200141800d6a41b8b2c6004108108102200b41086a2003290000370000200b20012900800d370000200141d0046a412010ff010c010b4100201b20036b22052005201b4b1b4106490d010b200141c00c6a201b109f030c010b200141003602c00c0b024002400240024002400240024020012802c00c2226450d00200141e8046a4200370300200141e0046a4200370300200141d0046a41086a22054200370300200142003703d004200141800d6a4192fdc60041071081022005200141800d6a41086a2203290000370300200120012900800d3703d004200141800d6a4194adc600410a108102200b41086a2003290000370000200b20012900800d370000200141086a200141d0046a4120108e02200141c00c6a41086a2802002205ad42d0007e2202422088a70d092002a72203417f4c0d0920012802082106200128020c210720012802c40c21290240024020030d00410821250c010b2003102c2225450d0b0b024002400240200341d0006e222a20054f0d00202a41017422092005200920054b1b22094104200941044b1bad42d0007e2202422088a74541037421092002a7210a02400240200341cf004b0d00200141003602800d0c010b200141800d6a41086a4108360200200120253602800d2001202a41d0006c3602840d0b20014198096a200a2009200141800d6a107d200141a0096a280200210302402001280298094101460d00200128029c092125200341d0006e212a0c020b20030d0d0c0c0b20050d00410021090c010b2007410020061b21192005410574220941606a410576211f200141b8076a41206a210620252105202621030340200141d8056a41186a220a200341186a290000370300200141d8056a41106a220c200341106a290000370300200141d8056a41086a220d200341086a290000370300200120032900003703d805200141f80a6a2019200141d8056a10a103200141800d6a20012802f80a220420012802800b10a203200141e00c6a41186a2217200141800d6a41186a290300370300200141e00c6a41106a2218200141800d6a41106a290300370300200141e00c6a41086a221a200141800d6a41086a290300370300200120012903800d3703e00c20012802ac0d21130240024020012802a00d22070d004200210220014198096a41186a420037030020014198096a41106a42003703004108210720014198096a41086a420037030020014200370398090c010b20014198096a41086a201a29030037030020014198096a41106a201829030037030020014198096a41186a2017290300370300200120012903e00c3703980920012902a40d21020b024020012802fc0a450d002004102e0b200341206a21032006200129039809370300200141b8076a41086a2204200d290300370300200141b8076a41106a220d200c290300370300200141b8076a41186a220c200a290300370300200641186a20014198096a41186a290300370300200641106a20014198096a41106a290300370300200641086a20014198096a41086a290300370300200120012903d8053703b807200541386a200141b8076a41386a290300370300200541306a200141b8076a41306a290300370300200541286a200141b8076a41286a290300370300200541206a2006290300370300200541186a200c290300370300200541106a200d290300370300200541086a2004290300370300200520012903b807370300200541cc006a2013360200200541c4006a2002370200200541c0006a2007360200200541d0006a2105200941606a22090d000b201f41016a21090b0240202941ffffff3f71450d002026102e0b2025450d00200941ffffff3f712009470d0920094105742205417f4c0d090240024020050d00410121290c010b2005102c2229450d0b0b02400240024002402005410576221f20094f0d00200541047622032009200320094b1b22034104200341044b1b220341ffffff3f712003462106200341057421030240024020050d00200141003602800d0c010b200141880d6a4101360200200120053602840d200120293602800d0b20014198096a20032006200141800d6a107d200141a0096a28020021052001280298094101460d01200128029c0921292005410576211f0b20252025200941d0006c6a470d01410021060c020b20050d0c0c0b0b2025200941d0006c6a2107410021062029210520252103034020052003290000370000200541186a200341186a290000370000200541106a200341106a290000370000200541086a200341086a290000370000200641016a2106200541206a21052007200341d0006a2203470d000b0b200120093602a0092001202a36029c092001202536029809200141800d6a20014198096a10a30320012802800d4101470d0120012802880d210520012802840d21034188accb00413710ef022003200510ef020c020b200141b8076a4100201b417f6a22052005201b4b1b10a403200141800d6a20012802b807220520012802c00710a503200141f80a6a41086a2203200141800d6a41106a290300370300200141f80a6a41106a2206200141800d6a41186a290300370300200141f80a6a41186a2207200141a00d6a2903003703002001200141800d6a41086a2903003703f80a20012802800d4101470d0220012802840d210920014198096a41186a200729030037030020014198096a41106a200629030037030020014198096a41086a2003290300370300200120012903f80a37039809024020012802bc07450d002005102e0b2001418c0d6a200141a0096a290300370200200141940d6a200141a8096a2903003702002001419c0d6a200141b0096a290300370200200120093602800d20012001290398093702840d200141f80a6a201b10a40320012802800b210320012802f80a21054104102c2206450d09200142043702dc05200120063602d8054120102c2206450d09200142203702bc07200120063602b807200141b8076a200141800d6a41201074200141d8056a20012802b807220620012802c0071074024020012802bc07450d002006102e0b200120012802a00d3602b807200141d8056a200141b8076a410410742005200320012802d805220620012802e00510b201024020012802dc05450d002006102e0b20012802fc0a450d032005102e0c030b20014198096a200141800d6a41086a41800110e9081a200141d0076a200141900a6a290300370300200141c8076a200141880a6a290300370300200141b8076a41086a200141800a6a290300370300200120012903f8093703b807200120093602d807200141e00c6a201b10a40320012802e80c210320012802e00c21054104102c2207450d08200142043702fc0a200120073602f80a4120102c2207450d08200142203702dc05200120073602d805200141d8056a200141b8076a41201074200141f80a6a20012802d805220720012802e0051074024020012802dc05450d002007102e0b200120093602d805200141f80a6a200141d8056a410410742005200320012802f80a220720012802800b10b201024020012802fc0a450d002007102e0b024020012802e40c450d002005102e0b20014198096a10b8020b20294521222029450d022006ad422086201fad8421024101212a2029210b0c030b20012802bc07450d002005102e0b41002129410121220b200141e8046a4200370300200141e0046a4200370300200141d0046a41086a22054200370300200142003703d004200141800d6a41a081ca0041071081022005200141800d6a41086a2203290000370300200120012900800d3703d004200141800d6a41f09dc500410a108102200b41086a2003290000370000200b20012900800d370000200141800d6a200141d0046a10880320012902840d420020012802800d22051b21022005410120051b210b4100212a0b2002422088a722064105744105752203ad42e0017e220e422088a70d02200ea72205417f4c0d020240024020050d00410121250c010b2005102c2225450d040b0240024002400240200541e0016e222620034f0d00202641017422072003200720034b1b22034104200341044b1bad42e0017e220ea72103200e422088a745210702400240200541df014b0d00200141003602800d0c010b200141880d6a4101360200200120253602800d2001202641e0016c3602840d0b20014198096a20032007200141800d6a107d200141a0096a28020021052001280298094101460d01200128029c092125200541e0016e21260b20060d0141002118202a21040c020b20050d050c040b2024202141e0016c6a211b2006410574220741606a4105762114200141800d6a41206a2118200141f80a6a41a0016a2115200141f80a6a4180016a2111200141f80a6a41e0006a2110200141f80a6a41c0006a2112200141f80a6a41206a211920014198096a410172211a202a21042024210620252109200b2105034020062103200141e00c6a41186a220a200541186a290000370300200141e00c6a41106a220c200541106a290000370300200141e00c6a41086a220d200541086a290000370300200120052900003703e00c200141c00c6a200141e00c6a10a60320014198096a20012802c00c221720012802c80c10a70320012d0098092113200141b8076a201a41c00110e9081a41002106024020134101470d00200141d8056a200141b8076a41c00110e9081a410121060b024020012802c40c450d002017102e0b0240024020060d00200141f80a6a41186a4200370300200141f80a6a41106a4200370300200141f80a6a41086a4200370300200142003703f80a2019410041a00110eb081a0c010b200141f80a6a200141d8056a41c00110e9081a0b02400240200441ff0171450d00200321060c010b4100210402402003201b470d00200321060c010b200341e0016a21060240200341206a200141f80a6a412010ec080d00200341c0006a2019412010ec080d00200341e0006a2012412010ec080d0020034180016a2010412010ec080d00200341a0016a2011412010ec080d00200341c0016a2015412010ec08450d010b410121040b200541206a2105200141800d6a41186a200a290300370300200141800d6a41106a200c290300370300200141800d6a41086a200d290300370300200120012903e00c3703800d2018200141f80a6a41c00110e9081a2009200141800d6a41e00110e90841e0016a2109200741606a22070d000b201441016a21180b0240200242ffffff3f83500d00200b102e0b2018ad42e0017e2202422088a70d022002a72219417f4c0d020240024020190d00410121174100211b0c010b2019102c2217450d04201941e0016e211b201941e001490d002025201841e0016c6a211a200141c00e6a2103200141a00e6a2106200141800e6a2107200141e00d6a2109200141c00d6a210a200141a00d6a210c4100210d20252105201b21130340201a2005460d012013450d03200141800d6a41186a200541186a290000370300200141800d6a41106a200541106a290000370300200141800d6a41086a200541086a29000037030020052900002102200c2005290020370000200c41086a200541286a290000370000200c41106a200541306a290000370000200c41186a200541386a290000370000200a41186a200541d8006a290000370000200a41106a200541d0006a290000370000200a41086a200541c8006a290000370000200a2005290040370000200120023703800d200941186a200541f8006a290000370000200941106a200541f0006a290000370000200941086a200541e8006a29000037000020092005290060370000200741186a20054198016a290000370000200741106a20054190016a290000370000200741086a20054188016a2900003700002007200529008001370000200620052900a001370000200641086a200541a8016a290000370000200641106a200541b0016a290000370000200641186a200541b8016a290000370000200320052900c001370000200341086a200541c8016a290000370000200341186a200541d8016a290000370000200341106a200541d0016a2900003700002017200d6a200141800d6a41e00110e9081a200d41e0016a210d200541e0016a21052013417f6a22130d000b0b200141c8046a4200370300200141c0046a4200370300200141b0046a41086a22054200370300200142003703b004200141800d6a41a081ca0041071081022005200141800d6a41086a2203290000370300200120012900800d3703b004200141800d6a41dff9c000410a108102200f41086a2003290000370000200f20012900800d370000201841e0016c4104722205417f4c0d022005102c2203450d03200141003602880d200120053602840d200120033602800d2018200141800d6a107620172018200141800d6a109c01200141b0046a412020012802800d220520012802880d10b201024020012802840d450d002005102e0b0240201941e001490d00201b41e0016c450d002017102e0b200141c8046a4200370300200141c0046a4200370300200141b0046a41086a22054200370300200142003703b004200141800d6a41a081ca0041071081022005200141800d6a41086a2203290000370300200120012900800d3703b004200141800d6a4188d2c100410d108102200f41086a2003290000370000200f20012900800d370000200120043a00a805200141b0046a4120200141a8056a410110b201200120283602840d200141063a00800d200141800d6a10fe012020202420212025201810a80302402026450d00202641e0016c450d002025102e0b0240202a2022720d00201f41ffffff3f71450d002029102e0b02402027450d002023102e0b02402008a72205450d00200541e0016c450d002024102e0b200141800d6a10a90320012903880d21020b200010aa032108200141e00e6a2400427f200220087c220820082002541b0f0b201b201b4188decc00103c000b1038000b1036000bdd2107067f017e037f017e017f067e017f230041900e6b22002400200041a0036a2201420037030020004198036a2202420037030020004188036a41086a220342003703002000420037038803200041b00c6a41a8f8c60041041081022003200041b00c6a41086a2204290000370300200020002900b00c37038803200041b00c6a41978cc500410b10810220012004290000370300200220002900b00c370300200041a8096a20004188036a10a004024020002d00a8094102470d002001420037030020024200370300200342003703002000420037038803200041b00c6a41d9fcc600410610810220032004290000370300200020002900b00c37038803200041b00c6a41b4f4cb004106108102200241086a2004290000370000200220002900b00c370000200041a8096a20004188036a10a10420002802a8092203410420031b21050240024020002902ac09420020031b2206422088a7220741246c2203450d00200520036a2104200041a8096a41086a2108200521030340024020032d00004101470d00200341016a2800002101200341086a28020021092000200341106a2802003602cc07200020093602c8070240200141c28289aa04470d00200041a8096a200041c8076a10930220002903a809220a4203510d0020004188036a200841f00010e9081a200041c00c6a20004188036a41f00010e9081a200041306a200041c00c6a41f00010e9081a0c040b200041c00c6a41e8b1c40041f00010e9081a0b2004200341246a2203470d000b0b4203210a0b02402007450d00200741246c21042005210303400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a280200102e0c030b2003410c6a280200450d02200341086a280200102e0c020b2003410c6a280200450d01200341086a280200102e0c010b200341086a280200450d00200341046a280200102e0b200341246a21032004415c6a22040d000b0b02402006a72203450d00200341246c450d002005102e0b200041a0016a200041306a41f00010e9081a41002109410021010240200a4203510d002000200a3703900220004190026a41086a200041a0016a41f00010e908210b200041a0036a2201420037030020004198036a2205420037030020004188036a41086a220342003703002000420037038803200041b00c6a41a8f8c60041041081022003200041b00c6a41086a2204290000370300200020002900b00c37038803200041b00c6a41e38bc500410b108102200241086a22072004290000370000200220002900b00c370000200041206a20004188036a1085032000290398022106024002402000280220450d0020002903284200520d010b2001420037030020054200370300200342003703002000420037038803200041b00c6a41a8f8c600410410810220032004290000370300200020002900b00c37038803200041b00c6a41e38bc500410b10810220072004290000370000200220002900b00c370000200020063703a80920004188036a4120200041a8096a410810b2012001420037030020054200370300200342003703002000420037038803200041b00c6a41a8f8c600410410810220032004290000370300200020002900b00c37038803200041b00c6a41a58bc500410b10810220072004290000370000200220002900b00c370000200041a8096a20004188036a10a20420002802a809210720002902ac09210c2001420037030020054200370300200342003703002000420037038803200041b00c6a41a8f8c600410410810220032004290000370300200020002900b00c37038803200041b00c6a41c28cc500410a10810220012004290000370300200520002900b00c370300200041a8096a20004188036a10a30420002d00a80921042001200041c1096a2900003703002005200041b9096a2900003703002003200041b1096a290000370300200020002900a90937038803200c420020071b210d200c42808080807083420020071b210c2007410820071b21030240024020044101460d00200041d80c6a4200370300200041d00c6a4200370300200041c80c6a4200370300200042003703c00c0c010b200041c00c6a41186a20004188036a41186a290300370300200041c00c6a41106a20004188036a41106a290300370300200041c00c6a41086a20004188036a41086a29030037030020002000290388033703c00c0b200041c8076a41086a200041c00c6a41086a290300220e370300200041c8076a41106a200041c00c6a41106a290300220f370300200041c8076a41186a200041c00c6a41186a2903002210370300200020002903c00c22113703c807200041a8096a41086a200c200d42ffffffff0f8384370300200041a8096a41106a2011370300200041a8096a41186a200e370300200041c8096a200f370300200041a8096a41286a2010370300200020033602ac09200041003602a80920004188036a200041a8096a10a404200041cb0c6a20004188036a41086a28020036000020002000290388033700c30c20004194036a200041c70c6a290000370000200041c28289aa0436008903200041023a008803200020002900c00c37008d0320004188036a10a504200da72204450d00200441286c450d002003102e0b200041a0036a2205420037030020004188036a41106a2207420037030020004188036a41086a220342003703002000420037038803200041b00c6a41a8f8c60041041081022003200041b00c6a41086a2204290000370300200020002900b00c37038803200041b00c6a41c98bc500410b108102200241086a22082004290000370000200220002900b00c370000200041106a20004188036a108503200028021021012000290318210c2005420037030020074200370300200342003703002000420037038803200041b00c6a41a8f8c600410410810220032004290000370300200020002900b00c37038803200041b00c6a41a28cc500410810810220082004290000370000200220002900b00c370000200042002006200c42017c420120011b7d220c200c2006561b3e02a80920004188036a4120200041a8096a410410b2012005420037030020074200370300200342003703002000420037038803200041b00c6a41a8f8c600410410810220032004290000370300200020002900b00c37038803200041b00c6a41c98bc500410b10810220082004290000370000200220002900b00c370000200020063703a80920004188036a4120200041a8096a410810b20141002101200a4201510d0020004190026a41106a28020021012005420037030020074200370300200342003703002000420037038803200041b00c6a41a8f8c600410410810220032004290000370300200020002900b00c37038803200041b00c6a41a58bc500410b10810220082004290000370000200220002900b00c370000200041a8096a20004188036a10a20420002802a8092203410820031b210402400240200120002902ac09420020031b220c422088a74f0d00200041c8076a41186a2004200141286c6a220341186a290000370300200041c8076a41106a200341106a290000370300200041c8076a41086a200341086a290000370300200020032900003703c807200041a8096a200041c8076a10f40120002802a809210320004188036a200041a8096a41047241c40110e9081a20034101460d00200b410c6a210720004188066a200041c00c6a41046a20004188036a41046a41c00110e90841c00110e9081a200041c8076a20004188066a41c00110e9081a20004188036a41186a2203420037030020004188036a41106a2201420037030020004188036a41086a220542003703002000420037038803200041b00c6a41a8f8c60041041081022005200041b00c6a41086a2208290000370300200020002900b00c37038803200041b00c6a41c28cc500410a10810220032008290000370300200120002900b00c370300200041a8096a20004188036a10a30420002d00a80921082003200041c1096a2900003703002001200041b9096a2900003703002005200041b1096a290000370300200020002900a909370388030240024020084101460d00200041a0096a420037030020004198096a420037030020004190096a420037030020004200370388090c010b20004188096a41186a20004188036a41186a29030037030020004188096a41106a20004188036a41106a29030037030020004188096a41086a20004188036a41086a2903003703002000200029038803370388090b20004188036a41186a420037030020004188036a41106a420037030020004188036a41086a220342003703002000420037038803200041b00c6a41a8f8c60041041081022003200041b00c6a41086a2201290000370300200020002900b00c37038803200041b00c6a41fa8bc500410a108102200241086a2001290000370000200220002900b00c370000200020004188036a1085032000290308210d20002802002103200041c00c6a41dcddcc004104108101200041c00c6a41e0ddcc00410b2006108501200041c00c6a41ebddcc00410d200d420020031b108501200041c00c6a41f8ddcc00411020004188096a412010840120004188036a200041c00c6a41d00110e9081a200041a8096a2007200041c8076a20004188036a10f30120002802a8094101460d0020004188036a200041a8096a41086a41800310e9081a200041a8096a20004188036a41800310e9081a200041c00c6a41b7b7c0004109108101200041c00c6a41d4e2cc00410041c9ddcc004113108401200041c00c6a41c0b7c0004106200041c80a6a4120108401200041c00c6a41c6b7c0004107200041880c6a412010840120004188096a41186a420037030020004188096a41106a420037030020004188096a41086a42003703002000420037038809200041c00c6a41d4e2cc00410020004188096a4120108601410021030340200041c00c6a20036a41003a0000200341016a220341c801470d000b200041c8076a41086a20004188096a41086a290300370300200041c8076a41106a20004188096a41106a290300370300200041c8076a41186a20004188096a41186a29030037030020002000290388093703c807410121010c010b410021010b200ca72203450d00200341286c450d002004102e0b0240200a4200520d00200041c00c6a41186a200041c8076a41186a290300370300200041c00c6a41106a200041c8076a41106a290300370300200041c00c6a41086a200041c8076a41086a290300370300200020002903c8073703c00c200121090b200041b1096a2205200041c00c6a41086a290300370000200041b9096a2207200041c00c6a41106a290300370000200041c1096a2208200041c00c6a41186a290300370000200020093a00a809200020002903c00c3700a90920004188036a41186a2209420037030020004188036a41106a220b420037030020004188036a41086a220342003703002000420037038803200041b00c6a41a8f8c60041041081022003200041b00c6a41086a2204290000370300200020002900b00c37038803200041b00c6a41978cc500410b108102200241086a22122004290000370000200220002900b00c37000020004188036a200041a8096a10a6042005200041c8076a41086a2903003700002007200041c8076a41106a2903003700002008200041c8076a41186a290300370000200020013a00a809200020002903c8073700a90920094200370300200b4200370300200342003703002000420037038803200041b00c6a41a8f8c600410410810220032004290000370300200020002900b00c37038803200041b00c6a41848cc500411310810220122004290000370000200220002900b00c37000020004188036a200041a8096a10a6040b200041900e6a24000b8d0204017f017e017f017e230041d0006b220224002002412036020420022001360200200241086a2001412010ed0202400240200228020822010d00420021030c010b200228020c210402400240200241086a41086a2802004108490d0020012900002105420121030c010b20024100360220200242013703182002410a36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241909dc5003602382002200241286a360248200241346a419cebc000200241386a103d1a2002280218200228022010ef020240200228021c450d002002280218102e0b420021030b2004450d002001102e0b2000200537030820002003370300200241d0006a24000b800201037f230041d0006b220124002001412036020420012000360200200141086a2000412010ed0202400240200128020822020d00410221000c010b200128020c210302400240200141106a280200450d0041002100024020022d00000e020200010b410121000c010b20014100360220200142013703182001410a36022c200120013602282001200141186a360234200141cc006a41013602002001420137023c200141909dc5003602382001200141286a360248200141346a419cebc000200141386a103d1a2001280218200128022010ef020240200128021c450d002001280218102e0b410221000b2003450d002002102e0b200141d0006a240020000ba70905077f017e037f037e027f23004190026b22012400200141206a22024200370300200141186a22034200370300200141086a41086a420037030020014200370308200141086a41bed8c8004108108102200141a8016a41e9d8c80041041081022002200141a8016a41086a290000370300200320012900a8013703002001412036022c2001200141086a360228200141306a200141086a412010ed020240024002400240024002400240200128023022040d00410021050c010b200128023421062001200141306a41086a280200360244200120043602402001200141c0006a10ab010240024020012802000d002001280204220720012802444105762202200220074b1b22024105742203417f4c0d070240024020020d00410121050c010b2003102c2205450d050b2002ad210802402007450d00410021090340200141003a00c8012001280244417f6a2102200941016a210941002103024002400240024003402002417f460d01200141a8016a20036a2001280240220a2d00003a00002001200a41016a3602402001200341016a220a3a00c801200120023602442002417f6a2102200a2103200a4120470d000b200141f0016a41186a2202200141a8016a41186a290300370300200141f0016a41106a2203200141a8016a41106a290300370300200141f0016a41086a220b200141a8016a41086a290300370300200120012903a8013703f001200a41ff01714120490d01200141e8006a41086a200b290300220c370300200141e8006a41106a2003290300220d370300200141e8006a41186a2002290300220e370300200141c8006a41186a220a200e370300200141c8006a41106a220b200d370300200141c8006a41086a220f200c370300200120012903f001220c370388012001200c3703682001200c3703482008422088220ca722022008a7470d03200241016a220320024f0d020c0d0b200341ff0171450d00200141003a00c8010b0240200842ffffff3f83500d002005102e0b0c040b20024101742210200320032010491b22034104200341044b1b220341ffffff3f712003462110200341057421030240024020020d00200141003602a8010c010b200141013602b001200120053602a8012001200c4205863e02ac010b200141f0016a20032010200141a8016a107d20012802f801210320012802f0014101460d0620012802f40121052003410576ad21080b200520024105746a22032001290348370000200341186a200a290300370000200341106a200b290300370000200341086a200f290300370000200842ffffffff0f83200241016aad42208684210820092007470d000b0b20050d010b41002105200141003602f801200142013703f0012001410a3602d4012001200141286a3602d0012001200141f0016a36028801200141bc016a4101360200200142013702ac01200141909dc5003602a8012001200141d0016a3602b80120014188016a419cebc000200141a8016a103d1a20012802f00120012802f80110ef0220012802f401450d0020012802f001102e0b2006450d002004102e0b20050d0220004100360208200042013702000c030b2003450d030b1036000b20002008370204200020053602000b20014190026a24000f0b1038000bd60201027f230041e0006b220224002002412036020c20022001360208200241106a2001412010ed0202400240200228021022010d00200041003602000c010b200228021421032002200241186a280200360224200220013602202002200241206a10ab0102400240024002402002280200450d00200241003602480c010b200241c8006a200241206a200228020410920120022802480d010b20024100360230200242013703282002410a36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241909dc5003602482002200241386a360258200241c4006a419cebc000200241c8006a103d1a2002280228200228023010ef020240200228022c450d002002280228102e0b200041003602000c010b20002002290348370200200041086a200241c8006a41086a2802003602000b2003450d002001102e0b200241e0006a24000b0e002001ad4220862000ad8410220bb40201037f230041e0006b22022400200241086a4199fdc6004108108102200241186a418092c5004112108102024002404110102c2203450d002002421037023c20022003360238200241386a2001411010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241c8006a41086a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000bba0302047f017e230041e0006b220324002003200236020c20032001360208200341106a2001200210ed0202400240024002400240200328021022010d00200041003602000c010b200328021421022003200341186a280200360224200320013602202003200341206a10ab010240024020032802000d002003280224220420032802042205490d002005417f4c0d030240024020050d00410121060c010b200510322206450d05200328022421040b024020042005490d0020062003280220200510e9082104200328022422062005490d0620002005ad2207422086200784370204200020043602002003200620056b3602242003200328022020056a3602200c020b2006102e0b20034100360230200342013703282003410a36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341909dc5003602482003200341386a360258200341c4006a419cebc000200341c8006a103d1a2003280228200328023010ef020240200328022c450d002003280228102e0b200041003602000b2002450d002001102e0b200341e0006a24000f0b1038000b1036000b2005200641b8b2c0001056000beb0201037f230041e0006b22032400200341086a4199fdc6004108108102200341186a41ac91c5004116108102024002404110102c2204450d002003421037023c20032004360238200341386a2001411010742003200328023822012003280240220410a301370348200341dc006a200120046a360200200320013602582003200341c8006a41086a3602542003200341c8006a360250200341286a200341d0006a107c0240200328023c450d002001102e0b200341d0006a2002280200200228020810a20120032802302202200328025822046a41206a2201417f4c0d010240024020010d00410121050c010b2001102c2205450d010b2000410036020820002001360204200020053602002000200341086a411010742000200341186a41101074200020032802282201200210742000200328025022022004107402402003280254450d002002102e0b0240200328022c450d002001102e0b200341e0006a24000f0b1036000b1038000bb10805057f017e037f037e027f230041f0016b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022040d00200041003602000c010b200328021421052003200341186a280200360224200320043602202003200341206a10ab010240024020032802000d00024002402003280204220620032802244105762201200120064b1b22014105742202417f4c0d000240024020010d00410121070c010b2002102c2207450d020b2001ad2108024002402006450d00410021090340200341003a00a8012003280224417f6a2101200941016a2109410021020240024002400240024003402001417f460d0120034188016a20026a2003280220220a2d00003a00002003200a41016a3602202003200241016a220a3a00a801200320013602242001417f6a2101200a2102200a4120470d000b200341d0016a41186a220120034188016a41186a290300370300200341d0016a41106a220220034188016a41106a290300370300200341d0016a41086a220b20034188016a41086a29030037030020032003290388013703d001200a41ff01714120490d01200341c8006a41086a200b290300220c370300200341c8006a41106a2002290300220d370300200341c8006a41186a2001290300220e370300200341286a41186a220a200e370300200341286a41106a220b200d370300200341286a41086a220f200c370300200320032903d001220c3703682003200c3703482003200c3703282008422088220ca722012008a7470d04200141016a22022001490d0820014101742210200220022010491b22024104200241044b1b220241ffffff3f7120024621102002410574210220010d0220034100360288010c030b200241ff0171450d00200341003a00a8010b200341c8006a41186a200341e8006a41186a290300370300200842ffffff3f83500d082007102e0c080b200341013602900120032007360288012003200c4205863e028c010b200341d0016a2002201020034188016a107d20032802d801210220032802d0014101460d0320032802d40121072002410576ad21080b200720014105746a22022003290328370000200241186a200a290300370000200241106a200b290300370000200241086a200f290300370000200842ffffffff0f83200141016aad42208684210820092006470d000b0b2007450d0320002008370204200020073602000c040b20020d010b1038000b1036000b200341003602d801200342013703d0012003410a3602b4012003200341086a3602b0012003200341d0016a3602682003419c016a41013602002003420137028c01200341909dc500360288012003200341b0016a36029801200341e8006a419cebc00020034188016a103d1a20032802d00120032802d80110ef02024020032802d401450d0020032802d001102e0b200041003602000b2005450d002004102e0b200341f0016a24000bb40201037f230041e0006b22022400200241086a4199fdc6004108108102200241186a419090c5004107108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241c8006a41086a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000b8b0101027f230041106b2203240020034100360208200342013703002002200310a10120022802502104200241d8006a28020022022003107602402002450d002002410574210203402003200441201074200441206a2104200241606a22020d000b0b2000200120032802002204200328020810b20102402003280204450d002004102e0b200341106a24000ba60201017f230041a0016b220324002003200236020420032001360200200341086a2001200210ed0202400240200328020822010d00200041003602400c010b200328020c21022003200341106a28020036027c20032001360278200341186a200341f8006a10e0040240024020032802580d00200341003602880120034201370380012003410a360294012003200336029001200320034180016a36029c012003412c6a41013602002003420137021c200341909dc500360218200320034190016a3602282003419c016a419cebc000200341186a103d1a20032802800120032802880110ef020240200328028401450d00200328028001102e0b200041003602400c010b2000200341186a41e00010e9081a0b2002450d002001102e0b200341a0016a24000be50101047f230041206b2203240002400240200228020822044105744104722205417f4c0d00200228020021022005102c2206450d0120034100360208200320053602042003200636020020042003107602402004450d002004410574210403404120102c2205450d032003422037021420032005360210200341106a2002412010742003200328021022052003280218107402402003280214450d002005102e0b200241206a2102200441606a22040d000b0b2000200120032802002202200328020810b20102402003280204450d002002102e0b200341206a24000f0b1038000b1036000bf63608077f017e097f017e067f067e077f027e230041c0036b22062400200641d8026a22074200370300200641d0026a22084200370300200641c0026a41086a22094200370300200642003703c002200641b0026a4192fdc60041071081022009200641b0026a41086a290000370300200620062900b0023703c00220064180036a41e0b2c6004113108102200720064180036a41086a22092900003703002008200629008003370300200641203602a4022006200641c0026a3602a00220064180036a200641c0026a412010ed020240024020062802800322070d004100210a0c010b200628028403210b0240024020092802004104490d004101210a2007280000220c418194ebdc03490d010b4100210a200641003602e801200642013703e0012006410a3602b4022006200641a0026a3602b0022006200641e0016a36029002200641ac036a41013602002006420137029c03200641909dc500360298032006200641b0026a3602a80320064190026a419cebc00020064198036a103d1a20062802e00120062802e80110ef0220062802e401450d0020062802e001102e0b200b450d002007102e0b200641c0026a1094030240024020062903c0024202520d0042c0f0f50b210d0c010b200641c0026a200641d0026a280200220e109503200641d8016a20062802c002220920062802c802108e0220062802dc01210b20062802d8012107024020062802c402450d002009102e0b02400240024020070d00418debc600413610ef024100200e41646a22072007200e4b1b210f428084afdf00210d200e21100c010b4100200e41646a22072007200e4b1b210f428084afdf00210d0240200b20054b0d00200e21100c010b200641c0026a10f10520062802c002221120062802c80241037422076a210903402007450d02200741786a21072009417c6a210b200941786a2109200b28020020054b0d000b201120076a2802002110024020062802c40241ffffffff0171450d002011102e0b42c0f4a4eb00210d0b200c4100200a1b2112200641c0026a41186a22134200370300200641c0026a41106a22144200370300200641c0026a41086a220c4200370300200642003703c002200641b0026a4192fdc6004107108102200c200641b0026a41086a2215290000370300200620062900b0023703c00220064180036a41e8b6c6004116108102200841086a220720064180036a41086a22162900003700002008200629008003370000200641d0016a200641c0026a4120108e0220062802d401210920062802d001210b2013420037030020144200370300200c4200370300200642003703c002200641b0026a4192fdc6004107108102200c2015290000370300200620062900b0023703c00220064180036a41e8b6c600411610810220072016290000370000200820062900800337000020062009200e200b4101461b36029803200641c0026a412020064198036a410410b2012013420037030020144200370300200c4200370300200642003703c002200641b0026a4192fdc6004107108102200c2015290000370300200620062900b0023703c00220064180036a418cabc600410d10810220072016290000370000200820062900800337000020064198036a200641c0026a108803200629029c03420020062802980322071b2217422088a7410574211820042002200220044b1b21192007410120071b211a20064198036a41106a210220064180026a41046a211b20064190026a41086a211c4100210802400240034020082019200820194b1b21040340024020082004470d00201742ffffff3f83500d06201a102e0c060b200841016a211d2001200841e0006c6a210520182107201a2109024003402007450d01200741606a210720092005412010ec08210b200941206a2109200b0d000b201d21080c010b0b200320084102746a2802002107200642003703880220064200370380022006420037039802200642003703900220064190016a2005290330221e200541386a290300221f428094ebdc03420010e608200641a0016a201e201f428094ebdc03420010e70820064180016a20062903a001200641a0016a41086a2903002007ad221f420010e808200641b0016a2005290320221e200541286a2903002220428094ebdc03420010e608200641c0016a201e2020428094ebdc03420010e708200641f0006a20062903c001200641c0016a41086a290300201f420010e808200629039001201f7e2220428094ebdc038021212020428094ebdc038221220240024002402006290370420020062903b001201f7e221e428094ebdc0380a7417f201e428080808080c0b2cd3b541b201e428094ebdc03824280cab5ee01566a2209ad7d85200641f0006a41086a29030042002009410047ad7d85844200520d00200642003703a802200642003703a002200642003703b802200642003703b00220064198036a200510ce050240024020062802a4030d00200642003703900320064280808080c000370388032006200f360284032006410036028003200520064180036a10d0050c010b20064180036a41106a2002290300370300201620064198036a41086a2903003703002006200629039803370380030b200c200629038003370200200c41086a2016290300370200200c41106a20064180036a41106a290300370200200641003a00ec02200620053602c4022006200f3602c002200620123602e8022006200641b0026a3602e4022006200641a0026a3602e00220064198036a200641c0026a201010f205024020062802a0034102460d0020062802980320062802c802470d002006200c200e108c0120062d00ec024100477222073a00ec0220064198036a2005108605200628029803220920062802a00310ff010240200628029c03450d002009102e0b20064198036a200510d105200628029803220920062802a00310ff010240200628029c03450d002009102e0b0240200510f30541ff017122094102460d002009410171450d00024010a00341ff0171417f6a0e03010001000b20064198036a41186a42003703002002420037030020064198036a41086a22094200370300200642003703980320064180036a4192fdc60041071081022009201629000037030020062006290080033703980320064180036a41b8b2c6004108108102200241086a2016290000370000200220062900800337000020064100360288032006420137038003200641013a00f00220064180036a200641f0026a4101107420064198036a4120200628028003220920062802880310b201200628028403450d002009102e0b2007450d00200641f0026a200c20062802c002108d01024020062802f0024101470d0020062802f402220720062802f80222054f0d0020062802c4022109034020064198036a41186a200941186a2900003703002002200941106a29000037030020064198036a41086a200941086a2900003703002006200929000037039803200620073602b80320064180036a20064198036a10cd05200628028003220b20062802880310ff01200741016a21070240200628028403450d00200b102e0b20052007470d000b0b20062802c402200c10d0050b20062802d80241ffffffff0371450d0120062802d402102e0c010b200629038001211e20064180016a41086a2903002123200641b0026a2010200510cc0520062802b0022109200620062802b802220b3602f402200620093602f00220064180036a2009200b10ed0202400240200628028003220b0d0041002104200a21240c010b20062802840321080240024020062802880322114104490d00200b2800002224418094ebdc034b0d00202421042011417c6a410f4b0d010b200641003602a00320064201370398032006410a3602a4022006200641f0026a3602a002200620064198036a3602bc03200641013602d402200642013702c402200641909dc5003602c0022006200641a0026a3602d002200641bc036a419cebc000200641c0026a103d1a20062802980320062802a00310ef020240200628029c03450d00200628029803102e0b41002104200a21240b2008450d00200b102e0b024020062802b402450d002009102e0b0240200720044d0d0020064180036a2010200510cc05200628028803210b20062802800321094110102c2208450d052006421037029c032006200836029803200620073602c00220064198036a200641c0026a4104107420062023201e2021a7417f2020428080808080c0b2cd3b541b20224280cab5ee01566aad7c2220201e54ad7c221e3703c802200620203703c00220064198036a200641c0026a411010742009200b200628029803220720062802a00310b2010240200628029c03450d002007102e0b0240200628028403450d002009102e0b20064198036a200510ce050240024020062802a4030d00200642003703900320064280808080c000370388032006200f360284032006410036028003200520064180036a10d0050c010b20064180036a41106a2002290300370300201620064198036a41086a2903003703002006200629039803370380030b200c200629038003370200200c41086a22252016290300370200200c41106a222620064180036a41106a2227290300370200200641003a00ec02200620053602c4022006200f3602c002200620123602e802200620064190026a3602e402200620064180026a3602e002200641e8006a200641c0026a20102020201e10f40502400240024020062802684101470d00200628026c20062802c802460d010b20062d00ec0221070c010b2006200c200e108c0120062d00ec024100477222073a00ec0220064198036a2005108605200628029803220920062802a00310ff010240200628029c03450d002009102e0b20064198036a200510d105200628029803220920062802a00310ff010240200628029c03450d002009102e0b200510f30541ff017122094102460d002009410171450d00024010a00341ff0171417f6a0e03010001000b20064198036a41186a42003703002002420037030020064198036a41086a22094200370300200642003703980320064180036a4192fdc60041071081022009201629000037030020062006290080033703980320064180036a41b8b2c6004108108102200241086a2016290000370000200220062900800337000020064100360288032006420137038003200641013a00b00220064180036a200641b0026a4101107420064198036a4120200628028003220920062802880310b201200628028403450d002009102e0b0240200741ff0171450d00200641b0026a200c20062802c002108d01024020062802b0024101470d0020062802b402220720062802b80222084f0d0020062802c4022109034020064198036a41186a200941186a2900003703002002200941106a29000037030020064198036a41086a200941086a2900003703002006200929000037039803200620073602b80320064180036a20064198036a10cd05200628028003220b20062802880310ff01200741016a21070240200628028403450d00200b102e0b20082007470d000b0b20062802c402200c10d0050b024020062802d80241ffffffff0371450d0020062802d402102e0b42002120200642003703a802200642003703a0024100211102400240200541c8006a220928020022070d004108212841002129420021210c010b200641003602c00220064198036a20074104200741044b1bad42307e221ea7201e422088a745410374200641c0026a107d20062802a003210702402006280298034101470d002007450d060c070b200628029c032128200741306e21290240200928020022070d0042002120420021210c010b200541c0006a280200220a200741306c6a212a2004ad2123410021110340200642003703b802200642003703b002200641c0006a200a290300221e200a41086a2903002220428094ebdc03420010e608200641306a201e2020428094ebdc03420010e708200641206a2006290330221e200641306a41086a29030022202023420010e808200641106a201e2020201f420010e808200641c0026a2010200a41106a220b10cb05200641d0006a20062802c002220920062802c80210f8024200200641106a41086a2903002006290310222020062903402221201f7e221e428094ebdc0380a7417f201e428080808080c0b2cd3b541b201e428094ebdc03824280cab5ee01566aad7c221e202054ad7c2220200641206a41086a29030020062903202222202120237e2221428094ebdc0380a7417f2021428080808080c0b2cd3b541b2021428094ebdc03824280cab5ee01566aad7c2221202254ad7c7d201e202154ad7d2222201e20217d2221201e56202220205620222020511b22071b21204200202120071b211e200641d0006a41106a29030021212006290358212220062802502107024020062802c402450d002009102e0b20064198036a2010200b10cb0520062802a0032108200628029803210920062022420020071b2222201e7c221e3703c00220062021420020071b20207c201e202254ad7c22203703c80220092008200641c0026a411010b2010240200628029c03450d002009102e0b20064198036a200b10ce050240024020062802a4030d00200642003703900320064280808080c000370388032006200f360284032006410036028003200b20064180036a10d0050c010b20272002290300370300201620064198036a41086a2903003703002006200629039803370380030b200c2006290380033702002025201629030037020020262027290300370200200641003a00ec022006200b3602c4022006200f3602c002200620123602e8022006200641b0026a3602e4022006200641a0026a3602e002200641086a200641c0026a2010201e202010f4050240024020062802084101470d00200628020c20062802c802470d002006200c200e108c0120062d00ec024100477222073a00ec020c010b20062d00ec0221070b0240200741ff0171450d00200641f0026a200c20062802c002108d01024020062802f0024101470d0020062802f402220720062802f80222044f0d0020062802c4022109034020064198036a41186a200941186a2900003703002002200941106a29000037030020064198036a41086a200941086a2900003703002006200929000037039803200620073602b80320064180036a20064198036a10cd05200628028003220820062802880310ff01200741016a21070240200628028403450d002008102e0b20042007470d000b0b20062802c402200c10d0050b024020062802d80241ffffffff0371450d0020062802d402102e0b200b41086a290000211e200b29000021202013200b41186a2900003703002014200b41106a290000370300200c201e370300200620203703c0022015290300211e20062903b0022120024020112029470d00202941016a22072029490d07202941017422092007200920074b1b22074104200741044b1bad42307e2221422088a74541037421072021a721090240024020290d0020064100360298030c010b200641083602a00320062028360298032006202941306c36029c030b20064180036a2009200720064198036a107d200628028803210702402006280280034101470d0020070d090c080b2006280284032128200741306e21290b200c2903002121201429030021222013290300212b20062903c002212c2028201141306c6a220720203703202007202c370300200741286a201e370300200741186a202b370300200741106a2022370300200741086a2021370300201141016a2111200a41306a220a202a470d000b200641a0026a41086a290300212120062903a00221200b200641e0016a41086a2207200541086a290300370300200641e0016a41106a2209200541106a290300370300200641e0016a41186a220b200541186a290300370300200620052903003703e00120280d020b2024210a0b200d42808c8d9e027c210d201d21080c010b20064180026a41086a2903002122200629038002211f201c2903002123200629039002212b200641c0026a200541d0006a10c80120062802c802210820062802c402210420062802c002210a20064198036a41186a2227200b2903003703002002200929030037030020064198036a41086a220b2007290300370300200620062903e00137039803200641b0026a4192fdc600410710810220064180036a41d0b3c60041101081022006200e36028002200620064180026a410410a301370390022006201b3602cc022006201c3602c402200620064180026a3602c802200620064190026a3602c002200641a0026a200641c0026a107c20062802a802220941206a2207417f4c0d010240024020070d00410121050c010b2007102c2205450d030b20064100360298022006200736029402200620053602900220064190026a200641b0026a4110107420064190026a20064180036a4110107420064190026a20062802a002220720091074024020062802a402450d002007102e0b200641c0026a20062802900220062802980210f5050240024020062802c00222050d00410021094200211e41082105410021070c010b20062902c402221e422088a72109201ea721070b2013202729030037030020142002290300370300200c200b29030037030020062006290398033703c0020240024020092007470d00201ea7201e422088a72209470d00200941016a22072009490d032009410174220b20072007200b491b22074104200741044b1bad42d8007e221e422088a7454103742107201ea7210b0240024020090d0020064100360280030c010b200641083602880320062005360280032006200941d8006c360284030b200641b0026a200b200720064180036a107d20062802b802210720062802b0024101460d0120062802b4022105200741d8006ead211e0b2011ad42c097e8b2017e200d7c212c2005200941d8006c220b6a2207201f20207c2220370310200720233703082007202b3703002007200a36022c20072028360220200741186a202220217c2020201f54ad7c370300200741346a2008360200200741306a2004360200200741286a2011360200200741246a2029360200200720062903c002370338200741c0006a200c290300370300200741c8006a2014290300370300200741d0006a20132903003703002006201e42ffffffff0f83200941016a2209ad422086843702c402200620053602c002200628029802210720062802900221080240024020050d002008200710ff010c010b201ea7210420062007360284032006200836028003200641c0026a20064180036a10b10102402009450d00200541306a2107200b41d8006a210903400240200741746a280200220b450d00200b41306c450d00200741706a280200102e0b0240200728020041ffffff3f71450d002007417c6a280200102e0b200741d8006a2107200941a87f6a22090d000b0b2004450d00200441d8006c450d002005102e0b202c42c097e8b2017c211e0240200628029402450d002008102e0b201e42c0b2cd3b7c210d201d21082024210a0c010b0b20070d010b1038000b1036000b024020062802c40241ffffffff0171450d002011102e0b42c0d1e123210d0b2000200d37030820004200370300200641c0036a24000b18002001ad4220862000ad842003ad4220862002ad8410000bbe0304037f017e027f017e230041f0006b22012400200141186a22024200370300200141106a22034200370300200141086a42003703002001420037030020014192fdc6004107108102200141d8006a41d0adc60041091081022002200141d8006a41086a290000370300200320012900583703002001412036022420012001360220200141286a2001412010ed0202400240200128022822020d00420221040c010b200128022c210502400240200141286a41086a28020022064104490d002002280000210320064104460d0042002104024020022d00040e020200010b2006417b6a4108490d0020022900052107420121040c010b20014100360240200142013703382001410a36024c2001200141206a3602482001200141386a360254200141ec006a41013602002001420137025c200141909dc5003602582001200141c8006a360268200141d4006a419cebc000200141d8006a103d1a2001280238200128024010ef020240200128023c450d002001280238102e0b420221040b2005450d002002102e0b0240024020044202520d00200042023703000c010b2000200737030820002004370300200041106a20033602000b200141f0006a24000b850201037f230041d0006b22022400200241086a4192fdc6004107108102200241186a4198aec6004115108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000b850201037f230041d0006b22022400200241086a4192fdc6004107108102200241186a4188b2c600410e108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000b850201037f230041d0006b22022400200241086a4192fdc6004107108102200241186a418cb1c6004113108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000ba00304067f027e017f027e230041d0006b22012400200141386a22024200370300200141206a41106a22034200370300200141206a41086a2204420037030020014200370320200141c0006a41f8fcc60041081081022004200141c0006a41086a220529000037030020012001290040370320200141c0006a41a8aac800410d1081022002200529000037030020032001290040370300200141086a200141206a412010f802024020012903104200200128020822061b220720002903007c22082007542209200141086a41106a290300420020061b220a200041086a2903007c2009ad7c220b200a54200b200a511b4101470d00427f210820002007427f853703002000200a427f85370308427f210b0b20024200370300200342003703002004420037030020014200370320200141c0006a41f8fcc60041081081022004200529000037030020012001290040370320200141c0006a41a8aac800410d108102200341086a2005290000370000200320012900403700002001200b37034820012008370340200141206a4120200141c0006a411010b201200141d0006a24000bcc1202067f017e230041f0056b2202240041002103200241003a00a8052001280204417f6a2104024002400240024002400240024002400240024002400240024003402004417f460d0120024188056a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00a8052004417f6a21042005210320054120470d000b200241b0056a41086a220320024188056a41086a290300370300200241b0056a41106a220620024188056a41106a290300370300200241b0056a41186a220720024188056a41186a29030037030020022002290388053703b005200541ff0171411f4d0d0120024188036a41086a20032903002208370300200241c8016a41186a2007290300370300200241c8016a41106a2006290300370300200241c8016a41086a2008370300200220022903b005220837038803200220083703c80141002103200241003a00a80503402004417f460d0320024188056a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00a8052004417f6a21042005210320054120470d000b200241b0056a41086a220320024188056a41086a290300370300200241b0056a41106a220620024188056a41106a290300370300200241b0056a41186a220720024188056a41186a29030037030020022002290388053703b005200541ff0171411f4d0d0320024188036a41086a20032903002208370300200241e8016a41186a2007290300370300200241e8016a41106a2006290300370300200241e8016a41086a2008370300200220022903b005220837038803200220083703e80141002103200241003a00a80503402004417f460d0520024188056a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00a8052004417f6a21042005210320054120470d000b200241b0056a41086a220320024188056a41086a290300370300200241b0056a41106a220620024188056a41106a290300370300200241b0056a41186a220720024188056a41186a29030037030020022002290388053703b005200541ff0171411f4d0d0520024188036a41086a2003290300220837030020024188026a41186a200729030037030020024188026a41106a200629030037030020024188026a41086a2008370300200220022903b005220837038803200220083703880241002103200241003a00a80503402004417f460d0720024188056a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00a8052004417f6a21042005210320054120470d000b200241b0056a41086a220320024188056a41086a290300370300200241b0056a41106a220620024188056a41106a290300370300200241b0056a41186a220720024188056a41186a29030037030020022002290388053703b005200541ff0171411f4d0d0720024188036a41086a20032903002208370300200241a8026a41186a2007290300370300200241a8026a41106a2006290300370300200241a8026a41086a2008370300200220022903b005220837038803200220083703a80241002103200241003a00a80503402004417f460d0920024188056a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00a8052004417f6a21042005210320054120470d000b200241b0056a41086a220320024188056a41086a290300370300200241b0056a41106a220620024188056a41106a290300370300200241b0056a41186a220720024188056a41186a29030037030020022002290388053703b005200541ff0171411f4d0d0920024188036a41086a20032903002208370300200241c8026a41186a2007290300370300200241c8026a41106a2006290300370300200241c8026a41086a2008370300200220022903b005220837038803200220083703c80241002103200241003a00a80503402004417f460d0b20024188056a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00a8052004417f6a21042005210320054120470d000b200241b0056a41086a220420024188056a41086a290300370300200241b0056a41106a220120024188056a41106a290300370300200241b0056a41186a220320024188056a41186a29030037030020022002290388053703b005200541ff0171411f4d0d0b20024188036a41086a20042903002208370300200241e8026a41186a22042003290300370300200241e8026a41106a22032001290300370300200241e8026a41086a22012008370300200220022903b005220837038803200220083703e802200241086a41186a200241c8016a41186a290300370300200241086a41106a200241c8016a41106a290300370300200241086a41086a200241c8016a41086a290300370300200220022903c801370308200241c0006a200241e8016a41186a290300370300200241386a200241e8016a41106a290300370300200241306a200241e8016a41086a290300370300200220022903e801370328200241e0006a20024188026a41186a290300370300200241d8006a20024188026a41106a290300370300200241d0006a20024188026a41086a290300370300200220022903880237034820024180016a200241a8026a41186a290300370300200241f8006a200241a8026a41106a290300370300200241f0006a200241a8026a41086a290300370300200220022903a802370368200241a0016a200241c8026a41186a29030037030020024198016a200241c8026a41106a29030037030020024190016a200241c8026a41086a290300370300200220022903c80237038801200241c0016a2004290300370300200241b8016a2003290300370300200241b0016a2001290300370300200220022903e8023703a801200041016a200241086a41c00110e9081a200041003a00000c0c0b200341ff0171450d00200241003a00a8050b200041013a00000c0a0b200341ff0171450d00200241003a00a8050b200041013a00000c080b200341ff0171450d00200241003a00a8050b200041013a00000c060b200341ff0171450d00200241003a00a8050b200041013a00000c040b200341ff0171450d00200241003a00a8050b200041013a00000c020b200341ff0171450d00200241003a00a8050b200041013a00000b200241f0056a24000bac0101047f230041106b2202240002400240200128020822034105744104722204417f4c0d00200128020021012004102c2205450d0120024100360208200220043602042002200536020020032002107602402003450d002003410574210303402002200141201074200141206a2101200341606a22030d000b0b2000412020022802002201200228020810b20102402002280204450d002001102e0b200241106a24000f0b1038000b1036000bb30201027f230041e0006b220224002002412036020c20022001360208200241106a2001412010ed0202400240200228021022010d00200041003602000c010b200228021421032002200241106a41086a28020036022420022001360220200241c8006a200241206a10e7010240024020022802480d0020024100360230200242013703282002410a36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241909dc5003602482002200241386a360258200241c4006a419cebc000200241c8006a103d1a2002280228200228023010ef020240200228022c450d002002280228102e0b200041003602000c010b20002002290348370200200041086a200241c8006a41086a2802003602000b2003450d002001102e0b200241e0006a24000b961c03017f017e167f23004180026b22012400200141206a109403200129032021022001420037032020014100200128023041016a20024202511b2203360230200141b0016a22044200370300200141a8016a2205420037030020014198016a41086a220642003703002001420037039801200141f8006a4192fdc60041071081022006200141f8006a41086a22072900003703002001200129007837039801200141f8006a41d0adc6004109108102200420072900003703002005200129007837030020014100360280012001420137037820012003360258200141f8006a200141d8006a41041074200141003a0058200141f8006a200141d8006a4101107420014198016a41202001280278220420012802800110b2010240200128027c450d002004102e0b200141106a10f10502400240024002400240024002402001280218220420012802142208470d00200441016a22062004490d04200441017422072006200720064b1b22064104200641044b1b220641ffffffff01712006464102742107200641037421060240024020040d0020014100360298010c010b200141a0016a410436020020012001280210360298012001200441037436029c010b200141206a2006200720014198016a107d200141286a280200210620012802204101460d01200120012802243602102001200641037622083602140b2001280210220920044103746a22062000360204200620033602002001200441016a220a3602182003411d490d024100210b200a450d01200341646a2100200441ffffffff017141016a21064100210b2009210402400340200428020020004f0d01200441086a21042006200b41016a220b470d000b2006210b0b200a200b4f0d01200b200a41b4b3c000104d000b2006450d020c040b200141003602180240200b4103742207450d00200141f4016a41046a210c200141f8016a41086a210d20092100034020002802002106200141f8006a4192fdc6004107108102200141206a41fd9fc5004113108102200120063602f4012001200141f4016a410410a3013703f8012001200c3602a4012001200d36029c012001200141f4016a3602a0012001200141f8016a36029801200141d8006a20014198016a107c2001280260220e41206a2204417f4c0d030240024020040d004101210f0c010b2004102c220f450d060b200141003602a0012001200436029c012001200f3602980120014198016a200141f8006a4110107420014198016a200141206a4110107420014198016a20012802582204200e10740240200128025c450d002004102e0b200128029801220420012802a0011089030240200128029c01450d002004102e0b200141f8006a4192fdc6004107108102200141206a4190a0c5004113108102200120063602f4012001200141f4016a410410a3013703f8012001200c3602a4012001200d36029c012001200141f4016a3602a0012001200141f8016a36029801200141d8006a20014198016a107c2001280260220641206a2204417f4c0d030240024020040d004101210e0c010b2004102c220e450d060b200141003602a0012001200436029c012001200e3602980120014198016a200141f8006a4110107420014198016a200141206a4110107420014198016a20012802582204200610740240200128025c450d002004102e0b200128029801220420012802a0011089030240200128029c01450d002004102e0b200041086a2100200741786a22070d000b0b0240200a200b6b220a0d004100210a0c010b0240200b450d0020092009200b4103746a200a41037410ea081a0b2001200a3602182009280204210c200141b0016a22044200370300200141a8016a2207420037030020014198016a41086a220042003703002001420037039801200141f8006a41a081ca0041071081022000200141f8006a41086a2900003703002001200129007837039801200141206a41bfadc000410b1081022004200141206a41086a29000037030020072001290020370300200141206a20014198016a4120109d032001290224210241002104024020012802204101470d0002402002422088a7220d200c200c200d4b1b22062002a722044f0d00410121040c010b0240200620044d0d00034020014198016a200410a403200128029801220020012802a00110ff01200441016a21040240200128029c01450d002000102e0b20062004470d000b0b200c200d4921042002428080808070832006ad8421020b2001200237025c20012004360258024020040d00200141b0016a4200370300200141a8016a420037030020014198016a41086a220442003703002001420037039801200141f8006a41a081ca0041071081022004200141f8006a41086a2900003703002001200129007837039801200141206a41bfadc000410b108102200741086a200141206a41086a2900003700002007200129002037000020014198016a412010ff010c010b200141b0016a4200370300200141a8016a420037030020014198016a41086a220442003703002001420037039801200141f8006a41a081ca0041071081022004200141f8006a41086a2900003703002001200129007837039801200141206a41bfadc000410b108102200741086a200141206a41086a2900003700002007200129002037000020014198016a4120200141d8006a410472109e030b200141b0016a4200370300200141a8016a420037030020014198016a41086a220442003703002001420037039801200141f8006a4192fdc60041071081022004200141f8006a41086a22002900003703002001200129007837039801200141f8006a41a8b4c600410a108102200541086a200029000037000020052001290078370000200a4103744104722204417f4c0d002004102c2200450d02200141003602282001200436022420012000360220200a200141206a10760240200a450d002009200a4103746a210020092104034020012004280200360278200141206a200141f8006a410410742001200441046a280200360278200141206a200141f8006a41041074200441086a22042000470d000b0b20014198016a412020012802202204200128022810b20102402001280224450d002004102e0b0240200841ffffffff0171450d002009102e0b200141b0016a4200370300200141a8016a420037030020014198016a41086a220442003703002001420037039801200141f8006a4192fdc60041071081022004200141f8006a41086a22002900003703002001200129007837039801200141f8006a41e8b6c6004116108102200541086a200029000037000020052001290078370000200141086a20014198016a4120108e02200128020c2110024020012802084101460d00410021040c020b024020104100200341656a2204200420034b1b22114f0d0020014198016a41246a210020014198016a41286a210f201021120340200141206a201210f90520014198016a200128022022042001280228220610f5050240024020012802980122130d0042002102410821130c010b2004200610ff01200129029c0121020b02402001280224450d002004102e0b20132002422088a7220441d8006c6a21070240024020040d00201321040c010b201321040340200141f8006a41186a220b200441186a290300370300200141f8006a41106a220a200441106a290300370300200141f8006a41086a2203200441086a29030037030020012004290300370378200441206a280200210620014198016a41086a220c2004412c6a29020037030020014198016a41106a220d200441346a29020037030020014198016a41186a220e2004413c6a29020037030020014198016a41206a2209200441c4006a290200370300200f200441cc006a29020037030020014198016a41306a2208200441d4006a2802003602002001200441246a29020037039801024020060d00200441d8006a21040c020b200141d8006a41186a2214200b290300370300200141d8006a41106a220b200a290300370300200141d8006a41086a220a2003290300370300200141206a41086a2203200c290300370300200141206a41106a2215200d290300370300200141206a41186a2216200e290300370300200141206a41206a22172009290300370300200141206a41286a2209200f290300370300200141206a41306a22182008280200360200200120012903783703582001200129039801370320200e2014290300370300200d200b290300370300200c200a29030037030020002001290320370200200041086a2003290300370200200041106a2015290300370200200041186a2016290300370200200041206a2017290300370200200041286a2009290300370200200041306a20182802003602002001200129035837039801200120063602b80120014198016a10fa05200441d8006a22042007470d000b200721040b2002a7210c024020072004460d0003400240200441246a2802002206450d00200641306c450d00200441206a280200102e0b200441d8006a21060240200441306a28020041ffffff3f71450d002004412c6a280200102e0b2006210420072006470d000b0b201241016a21120240200c450d00200c41d8006c450d002013102e0b20122011470d000b0b20102011201020114b1b2110410121040c010b1038000b2001200436022020012010360224200141b0016a4200370300200141a8016a420037030020014198016a41086a220042003703002001420037039801200141f8006a4192fdc60041071081022000200141f8006a41086a22062900003703002001200129007837039801200141f8006a41e8b6c6004116108102200541086a2006290000370000200520012900783700000240024020040d0020014198016a412010ff010c010b2001201036027820014198016a4120200141f8006a410410b2010b20014180026a24000f0b1036000b8f0201027f230041d0006b220324002003200236020420032001360200200341086a2001200210ed0202400240200328020822010d00200041003602000c010b200328020c2102024002400240200341106a28020022044104490d002004417c714104470d010b4100210420034100360220200342013703182003410a36022c200320033602282003200341186a360234200341cc006a41013602002003420137023c200341909dc5003602382003200341286a360248200341346a419cebc000200341386a103d1a2003280218200328022010ef02200328021c450d012003280218102e0c010b20002001290000370204410121040b200020043602002002450d002001102e0b200341d0006a24000b7e01027f230041106b2203240002404108102c2204450d0020034208370204200320043602002003200228020036020c20032003410c6a410410742003200228020436020c20032003410c6a410410742000200120032802002202200328020810b20102402003280204450d002002102e0b200341106a24000f0b1036000bd67b070a7f027e127f027e0c7f097e057f230041f0056b2202240020024180046a22034200370300200241f8036a22044200370300200241e8036a41086a22054200370300200242003703e803200241d8016a4192fdc60041071081022005200241d8016a41086a2206290000370300200220022900d8013703e80320024198026a4194adc600410a108102200320024198026a41086a22072900003703002004200229009802370300200241c0016a200241e8036a4120108e0220022802c001210820022802c4012109200342003703002004420037030020054200370300200242003703e803200241d8016a4192fdc600410710810220052006290000370300200220022900d8013703e80320024198026a4194adc600410a108102200320072900003703002004200229009802370300410121052002200941016a410020081b220a36029802200241e8036a412020024198026a410410b201200241d8016a4192fdc600410710810220024198026a4198aec60041151081022002200a3602d0052002200241d0056a410410a3013703f802200241f4036a200241d0056a41046a3602002002200241f8026a41086a3602ec032002200241d0056a3602f0032002200241f8026a3602e803200241a8036a200241e8036a107c024020022802b003220641206a2203417f4c0d00024002402003450d002003102c2205450d010b200241003602f003200220033602ec03200220053602e803200241e8036a200241d8016a41101074200241e8036a20024198026a41101074200241e8036a20022802a803220320061074024020022802ac03450d002003102e0b20022802e803210320022802f003210520022001360298022003200520024198026a410410b201024020022802ec03450d002003102e0b200241e8036a41186a4200370300200241e8036a41106a4200370300200241e8036a41086a22034200370300200242003703e803200241d8016a4192fdc60041071081022003200241d8016a41086a290000370300200220022900d8013703e80320024198026a41e0a9c600410c108102200441086a20024198026a41086a2900003700002004200229009802370000200241b8016a200241e8036a4120108e020240200a20022802bc0141016a41d50020022802b8011b6b2205200a4b0d00200510f6050b200241f8026a41186a22054200370300200241f8026a41106a220b4200370300200241f8026a41086a22014200370300200242003703f802200241e8036a41a5fec600411a10810220012003290000370300200220022900e8033703f802200241e8036a4184c4c800410e10810220052003290000370300200b20022900e803370300200241e8036a200241f8026a10ab05024020022d00a40422034103460d00200241f8026a412010ff010b024002400240024002400240024020034103460d0020022802a0042105200229039804210c429896c78220210d0c010b200241e8036a4100200310e9054101210320022802e8034101460d01200241e8036a41106a2205280200210e200241f4036a2201280200210f200241e8036a41086a22032802002110200241e8036a4100200310ef0520022802e8034101460d02200528020021112001280200211220032802002113200241a0056a41186a22144200370300200241a0056a41106a22054200370300200241a0056a41086a22014200370300200242003703a005200241e8036a4192fdc600410710810220012003290000370300200220022900e8033703a005200241e8036a41b4aac600410e10810220142003290000370300200520022900e803370300200241b0016a200241a0056a4120108e0220022802b401211520022802b0012116200242003702dc030240200e450d002010200e41386c6a2117200241f8026a41086a2118200241a0056a41086a2119200241e8036a41086a211a410021072010210903402009290300210c2009290208210d201a200941106a290200370300200241e8036a41106a221b200941186a290200370300200241e8036a41186a221c200941206a2902003703002002200d3703e803024002402007450d0020022802d803211d0c010b41c003102c2207450d094100211d200741003b015e20074100360258200220073602dc03200241003602d8030b200941386a21090240024002400240024002400240024002400240024002400340200741e0006a211e20072f015e221f410574210841002101417f21054100210302400340024020082003470d00201f21050c020b200241e8036a200720036a41e0006a412010ec082206450d03200541016a2105200141086a2101200341206a21032006417f4a0d000b0b0240201d450d00201d417f6a211d200720054102746a41c0036a28020021070c010b0b200241c0056a41086a201a41086a290200220d3703002002201a29020022203703c00520022802ec03210820022802e803211d200229038004212120024198026a41086a2222200d37030020022020370398020240201f410a4b0d00200241d0056a41086a2206202229030037030020022002290398023703d005200541016a211b201f41016a210102402005201f4f221f0d00201e201b4105746a201e20054105746a20012005417f736a41057410ea081a0b201e20054105746a220320083600042003201d360000200320022903d005370008200341106a2006290300370000200320213700180240201f0d002007201b4103746a200720054103746a20012005417f736a41037410ea081a0b200720054103746a200c370300200720013b015e0c0b0b410021234104210302400240200541054f0d00200521010c010b4105210341052101024002402005417b6a0e020201000b200541796a210141012123410621030c010b41002101410121230b41c003102c221f450d14201f41003b015e201f4100360258201f20072f015e22242003417f736a22053b015e201e20034105746a2206280004212520062800002126200241d0056a41086a2227200641106a290000370300200220062900083703d0052005410c4f0d012024200341016a22286b2005470d02200720034103746a290300210d20062900182120201f41e0006a201e20284105746a200541057410e9081a201f200720284103746a200541037410e9082129200720033b015e201a2027290300370300200220022903d0053703e8032029200720231b22032f015e21052027202229030037030020022002290398023703d005200341e0006a2106200541016a211e0240200141016a222820054b22230d00200620284105746a200620014105746a201e2001417f736a41057410ea081a0b200620014105746a220520083600042005201d360000200520022903d005370008200541106a202729030037000020052021370018024020230d00200320284103746a200320014103746a201e2001417f736a41037410ea081a0b200320014103746a200c3703002003201e3b015e200241d8016a41086a2224201a290300220c370300200220022903e80322213703d801200241a8036a41086a2223200c370300200220213703a8030240024002402007280258221d0d00410021280c010b4100212820202121200d210c202921292025212a2026212b034020072f015c210720222023290300370300200220022903a80337039802201d2f015e221e410b490d024100210841042103024020074105490d0020072103024002402007417b6a0e020201000b200741796a210741012108410621030c010b4100210741012108410521030b41f003102c221f450d17201f41003b015e201f4100360258201f201d2f015e222c2003417f736a22053b015e201d41e0006a222d20034105746a22012800042125200128000021262027200141106a290000370300200220012900083703d0052005410c4f0d06202c200341016a22066b2005470d0720012900182120201d20034103746a290300210d201f41e0006a202d20064105746a200541057410e9081a201f201d20064103746a200541037410e9082105201d20033b015e201a2027290300370300200220022903d0053703e80320052f015e220141016a212c2001410c4f0d08201e20036b2203202c470d09202841016a2128200541c0036a201d20064102746a41c0036a200341027410e9081a4100210302400340200520034102746a41c0036a280200220620033b015c200620053602582003200320014922066a220320014b0d0120060d000b0b2024201a290300370300200220022903e8033703d8012005201d20081b22062f015e21012019200229039802370000201941086a20222903003700002002202a3602a4052002202b3602a005200220213703b805200641e0006a211e200141016a210802400240200741016a220320014b0d00201e20034105746a201e20074105746a221e2007417f7320086a222a41057410ea081a201e41186a2014290300370000201e41106a200241a0056a41106a290300370000201e41086a2019290300370000201e20022903a005370000200620034103746a200620074103746a202a41037410ea081a0c010b201e20074105746a221e20022903a005370000201e41186a2014290300370000201e41106a200241a0056a41106a290300370000201e41086a20192903003700000b200620074103746a200c370300200641c0036a211e0240200741026a222a200141026a22014f0d00201e202a4102746a201e20034102746a2003417f7320016a41027410ea081a0b201e20034102746a2029360200200620083b015e0240200320014f0d00200620074102746a41c4036a2103034020032802002201200741016a22073b015c20012006360258200341046a210320082007470d000b0b20232024290300370300200220022903d8013703a803201d210720202121201d2802582203211d200d210c200521292025212a2026212b20030d000b0b200241d8026a41086a2023290300220c370300200220022903a80322213703d80220182021370300201841086a200c370300200220253602fc02200220263602f802200220203703900320022802dc032205450d0820022802d803210141f003102c2203450d15200320053602c003200341003b015e20034100360258200541003b015c20052003360258200220033602dc032002200141016a3602d803201c200241f8026a41186a290300370300201b200241f8026a41106a290300370300201a2018290300370300200220022903f8023703e80320012028470d0920032f015e2205410b4f0d0a2003200541016a22063b015e200320054105746a220141e0006a20022903e803370000200141e8006a201a290300370000200141f0006a201b290300370000200141f8006a201c290300370000200320054103746a200d370300200341c0036a20064102746a201f360200201f20063b015c201f2003360258200220022802e00341016a3602e003200d1a20071a20281a201f1a20201a0c0c0b2019200229039802370000201941086a20222903003700002002202a3602a4052002202b3602a005200220213703b805201d41e0006a2103201e41016a210502402007201e4f0d00200320074105746a220141206a20012007417f7320056a41057410ea081a0b200320074105746a220320022903a005370000200341186a2014290300370000200341106a200241a0056a41106a290300370000200341086a2019290300370000200741016a2103201d20074103746a2101024002402007201e490d002001200c370300201d41c0036a2101201e41026a21060c010b201d20034103746a20012007417f7320056a41037410ea081a2001200c3703002007410274201d41c0036a22016a41086a200120034102746a2003417f73201e41026a22066a41027410ea081a0b2001200341027422076a2029360200201d20053b015e200320064f0d0a2007201d6a41c0036a210503402005280200220120033b015c2001201d360258200541046a21052006200341016a2203470d000c0b0b0b200720016a200c3703000c0a0b2005410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b2005410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b202c410c41f49cc700104d000b41f49bc7004128419c9cc7001039000b41e8aac700412b4194abc7001039000b41e899c700413041989ac7001039000b41a89ac700412041c89ac7001039000b200220022802e00341016a3602e0030b20092017460d0120022802dc0321070c000b0b200220113602b003200220123602ac03200220133602a8032002200e3602e0012002200f3602dc01200220103602d801200242003703e80320024198026a2015410020161b200241a8036a200241d8016a200241e8036a10fb020240024002402002280298024101470d00200229029c02220c422088a72101200241a4026a2802002107200ca721060c010b20024198026a41106a2222280200220f20024198026a41146a290200222e422088a72203412c6c6a212c20024198026a41086a2227290300212f200228029c0221120240024020030d00200f211d200f21090c010b200241e8036a410c6a211f200241e8036a410472211e20024198026a41186a212820024198026a41206a2125200f211d03402027201d2209410c6a2902003703002022200941146a222629020037030020282009411c6a22232902003703002025200941246a222429020037030020022009290204370398022009412c6a211d2009280200221b450d01201e200229039802370200201e41086a2027290300370200201e41106a2022290300370200201e41186a2028290300370200201e41206a20252903003702002002201b3602e80302400240200241d8036a201f10a20222030d00420021210c010b200329030021210b200241d0056a41086a2229201f41086a290200370300200241d0056a41106a222a201f41106a290200370300200241d0056a41186a222b201f41186a2902003703002002201f2902003703d00520022802ec0321190240024020022802f0032203450d00200341246c221c2101201b21030340200341206a2802002105200341086a290200210c200341106a290200210d20032902002120200241a0056a41186a2206200341186a290200370300200241a0056a41106a2207200d370300200241a0056a41086a2208200c370300200220203703a00502402005450d00200241d8016a41086a222d2008290300370300200241d8016a41106a22142007290300370300200241d8016a41186a220e2006290300370300200220022903a005220c3703f8022002200c3703d8012021428094ebdc0380210d2021428094ebdc038221204130102c221a450d0e200241a0016a200d42002005ad220c420010e808201a20022903d801370300201a41186a200e290300370300201a41106a2014290300370300201a41086a202d290300370300201a20022903a00122212020200c7e220c428094ebdc0380a7417f200c428080808080c0b2cd3b541b200c428094ebdc03824280cab5ee01566aad7c220c370320201a41286a200241a0016a41086a290300200c202154ad7c37030002400240024020014124470d00410121174101211c0c010b200341246a2110201b201c6a2201415c6a2111410121174101211c034020102103024002400340200341206a28020021052006200341186a2902003703002007200341106a2902003703002008200341086a290200370300200220032902003703a00502402005450d0020024190016a200d42002005ad220c420010e808200241f8026a41086a20082903002221370300200241f8026a41106a20072903002230370300200241f8026a41186a20062903002231370300200220022903a00522323703f802200e203137030020142030370300202d2021370300200220323703d8012020200c7e220c428094ebdc03802130200c428094ebdc03822131200229039001212120024190016a41086a2903002132201c2017470d03201741016a220520174f0d020c160b2001200341246a2203470d000c040b0b201741017422102005201020054b1b22054104200541044b1bad42307e2233422088a74541037421052033a721100240024020170d00200241003602a8030c010b200241083602b0032002201a3602a8032002201741306c3602ac030b200241a0056a20102005200241a8036a107d20022802a805210520022802a0054101460d0320022802a405211a200541306e21170b200341246a2110202d290300213320142903002134200e290300213520022903d8012136201a201c41306c6a220520212030a7417f200c428080808080c0b2cd3b541b20314280cab5ee01566aad7c220c37032020052036370300200541286a2032200c202154ad7c370300200541186a2035370300200541106a2034370300200541086a2033370300201c41016a211c20112003470d000b0b2019450d04201941246c450d04201b102e0c040b2005450d0f0c0e0b200341246a21032001415c6a22010d000b0b410021174108211a02402019450d00201941246c450d00201b102e0b4100211c0b200241d8016a41186a2203202b290300370300200241d8016a41106a2205202a290300370300200241d8016a41086a22012029290300370300200220022903d0053703d801200920173602042009201c3602082009201a360200200920022903d80137020c202620012903003702002023200529030037020020242003290300370200201d202c470d000b201d2109202c211d0b202f422088210c202c201d6b2203412c6d210502402003450d002005412c6c210303400240201d41046a2802002205450d00200541246c450d00201d280200102e0b201d412c6a211d200341546a22030d000b0b200ca72107202ea72108202fa7211d200f2009200f6b221f412c6d2209412c6c6a2106200f2103034020032006460d0202400240200241d8036a2003410c6a220310a20222050d004200210c0c010b2005290300210c0b20024188016a200341746a200c420010bf04200341206a21032002280288012201450d000b200228028c0121070240201f450d002009412c6c2105200f210303400240200341046a2802002206450d00200641306c450d002003280200102e0b2003412c6a2103200541546a22050d000b0b02402008450d002008412c6c450d00200f102e0b41032106201d450d00201d41306c450d002012102e0b200241d8036a10be022007ad2120410021030c050b200220123602f0032002201d3602ec03200220123602e80320022012200741306c6a3602f403200241d8016a200241e8036a10c201200241e8036a20022802d801220320022802e001200f200910b704410121060240024020022802e8034101470d00200241f4036a350200212020022902ec03210c0c010b20022802ec0321052002200241f0036a29030037029c022002200536029802200241e8036a10a90320022903f003210d200229039802210c20022903a0022120410021060b024020022802dc0141ffffff3f71450d002003102e0b0240201f450d002009412c6c2105200f210303400240200341046a2802002201450d00200141306c450d002003280200102e0b2003412c6a2103200541546a22050d000b0b02402008450d002008412c6c450d00200f102e0b200241d8036a10be0202402006450d00200c422088a72101200ca72106410021030c050b2020a72105410021030b200220033a00ed03200241013a00ec03200241173a00e803200241e8036a10fe0120024190036a420037030020024188036a4200370300200241f8026a41086a22034200370300200242003703f802200241e8036a41a5fec600411a1081022003200241e8036a41086a2201290000370300200220022900e8033703f802200241e8036a4180c3c8004105108102200b41086a2001290000370000200b20022900e80337000020024180016a200241f8026a4120108e0220022005ad3703d0012002200c3703c801200ca72126410021080c040b200241f0036a280200210120022802ec0321060c010b2003280200210120022802ec0321060240200e450d00200e41386c21052010412c6a210303400240200328020041ffffff3f71450d002003417c6a280200102e0b200341386a2103200541486a22050d000b0b41012103200f450d00200f41386c450d002010102e0b0b200241f4036a20203e020020022001ad4220862006ad843702ec03200220033602e803200241e8036a41086a2203290300210d20022903e803210c20024181063b01ec03200241173a00e803200241e8036a10fe0120024190036a420037030020024188036a4200370300200241f8026a41086a22054200370300200242003703f802200241e8036a41a5fec600411a10810220052003290000370300200220022900e8033703f802200241e8036a4180c3c8004105108102200b41086a2003290000370000200b20022900e803370000200241f8006a200241f8026a4120108e022002200d3703d0012002200c4220883e02cc012002200ca722263602c801410121080b20024190036a22014200370300200241f8026a41106a22064200370300200241f8026a41086a22034200370300200242003703f802200241e8036a41a5fec600411a1081022003200241e8036a41086a2205290000370300200220022900e8033703f802200241e8036a4180c3c8004105108102200b41086a22072005290000370000200b20022900e803370000200241f0006a200241f8026a4120108e02200228027021092002280274211d200142003703002006420037030020034200370300200242003703f802200241e8036a41a5fec600411a10810220032005290000370300200220022900e8033703f802200241e8036a4180c3c800410510810220072005290000370000200b20022900e8033700002002201d41016a410220091b3602e803200241f8026a4120200241e8036a410410b2014102200310ec04200142003703002006420037030020034200370300200242003703f802200241e8036a41a5fec600411a10810220032005290000370300200220022900e8033703f802200241e8036a41c8c4c800410810810220072005290000370000200b20022900e803370000200241f8026a412010ff01200142003703002006420037030020034200370300200242003703f802200241e8036a41a5fec600411a10810220032005290000370300200220022900e8033703f802200241e8036a41ccc5c800411010810220072005290000370000200b20022900e803370000200241f8026a412010ff01200142003703002006420037030020034200370300200242003703f802200241e8036a41a5fec600411a10810220032005290000370300200220022900e8033703f802200241e8036a4194c5c800410e10810220072005290000370000200b20022900e803370000200241f8026a412010ff010240024020080d002026450d0020022902cc012136200d410210f104200241b8056a22034200370300200241a0056a41106a22054200370300200241a0056a41086a22014200370300200242003703a005200241e8036a41f8fcc60041081081022001200241e8036a41086a2206290000370300200220022900e8033703a005200241e8036a41a8aac800410d10810220032006290000370300200520022900e803370300200241d8006a200241a0056a412010f8022036422088a7220641067422014106752203ad42d0007e220c422088a70d03200ca72205417f4c0d03200241d8006a41106a290300210c2002290360210d200228025821070240024020050d00410821180c010b2005102c2218450d030b0240024002400240200541d0006e223720034f0d00203741017422082003200820034b1b22084104200841044b1bad42d0007e2220422088a74541037421082020a7210902400240200541cf004b0d00200241003602e8030c010b200241e8036a41086a4108360200200220183602e8032002203741d0006c3602ec030b20024198026a20092008200241e8036a107d200241a0026a28020021052002280298024101460d01200228029c022118200541d0006e21370b20060d01410021172026211a0c020b2005450d050c040b202620016a2125200241c8006a200d200c427f420010e708200241c8006a41086a290300420020071b220c42002002290348420020071b220d420156200c420052200c501b22031b2130200d420120031b2131200641067441406a41067641016a2123200241e8036a41206a211b2018211e410021172026211a0240034020024198026a41286a2201201a220341286a29030037030020024198026a41206a2206200341206a29030037030020024198026a41186a2207200341186a29030037030020024198026a41106a2208200341106a29030037030020024198026a41086a2209200341086a2903003703002002200329030037039802200341c0006a211a200341306a2802002219450d01200341386a2802002105200341346a280200211c200241e8036a41286a2001290300370300201b2006290300370300200241e8036a41186a2007290300220c370300200241e8036a41106a2008290300220d370300200241e8036a41086a20092903002220370300200220022903980222213703e803200241a8036a41186a2222200c370300200241a8036a41106a2227200d370300200241a8036a41086a22282020370300200220213703a803200241d0056a41086a201b41086a2903003703002002201b2903003703d0052005ad42307e220c422088a70d06200ca72203417f4c0d060240024020030d004108211f0c010b2003102c221f450d060b200341306e21060240024020050d004200210d410021014200210c42002134420021330c010b200541306c21074200210d410021014200210c4200213442002133201921030340200341206a2903002120200341286a2903002121200241f8026a41186a200341186a2205290300370300200241f8026a41106a200341106a2208290300370300200241f8026a41086a200341086a2209290300370300200220032903003703f802200241186a202142002031420010e808200241286a203042002020420010e808200241386a202042002031420010e808200241d8016a41186a221d2005290000370300200241d8016a41106a220b2008290000370300200241d8016a41086a22082009290000370300200220032900003703d801427f200241386a41086a2903002220200229031820022903287c7c2232202142005220304200527120022903204200527220022903304200527220322020547222051b2120427f200229033820051b212102400240200241d8016a200241a8036a412010ec080d00427f203320207c203420217c22352034542205ad7c22322005203220335420322033511b22051b2133427f203520051b21340c010b200241a0056a41186a2209201d290300370300200241a0056a41106a221d200b290300370300200241a0056a41086a220b2008290300370300200220022903d8013703a005024020012006470d00200641016a22052006490d0a200641017422082005200820054b1b22054104200541044b1bad42307e2232422088a74541037421052032a721080240024020060d00200241003602d8020c010b200241083602e0022002201f3602d8022002200641306c3602dc020b200241c0056a20082005200241d8026a107d20022802c8052105024020022802c0054101470d002005450d0b0c0a0b20022802c405211f200541306e21060b201f200141306c6a2205202037030820052021370300200520022903a005370310200541186a200b290300370300200541206a201d290300370300200541286a2009290300370300200141016a21010b200341306a2103427f200c20207c200d20217c2220200d542205ad7c220d2005200d200c54200d200c511b22051b210c427f202020051b210d200741506a22070d000b0b0240201c450d00201c41306c450d002019102e0b200241d8016a41186a20222903002220370300200241d8016a41106a20272903002221370300200241d8016a41086a20282903002232370300200220022903a80322353703d801201e41386a2033370300201e41306a2034370300201e41286a200c370300201e200d370320201e41186a2020370300201e41106a2021370300201e41086a2032370300201e2035370300201e41c8006a2001360200201e41c4006a2006360200201e41c0006a201f360200201741016a2117201e41d0006a211e201a2025470d000b2025211a202321170b2025201a6b220141067521030b02402001450d0020034106742105201a41346a21030340024020032802002201450d00200141306c450d002003417c6a280200102e0b200341c0006a2103200541406a22050d000b0b0240203642ffffff1f83500d002026102e0b201741d0006c221d41d0006e213802400240201d0d00410121390c010b2038410574102c2239450d030b4100212b024020182018201d6a2209460d004100212b20392103201821050340200241a0056a41086a2201200541086a290300370300200241a0056a41106a2206200541106a290300370300200241a0056a41186a2207200541186a290300370300200220052903003703a005200241e8036a200541c0006a220510c501024020022802ec032208450d00200841306c450d0020022802e803102e0b200320022903a005370000200341186a2007290300370000200341106a2006290300370000200341086a2001290300370000202b41016a212b200341206a2103200541106a22052009470d000b0b4200213320024180046a4200370300200241e8036a41106a4200370300200241e8036a41086a22034200370300200242003703e803200241d8016a4192fdc60041071081022003200241d8016a41086a290000370300200220022900d8013703e80320024198026a41dcaac6004115108102200441086a20024198026a41086a2900003700002004200229009802370000200241106a200241e8036a4120108e02024002400240202b2002280214410020022802101b22034101200341014b1b490d002018201741d0006c6a210e024020170d002018212c420021320c020b200241a8036a41106a213a200241f8026a41106a213b2002419c036a210f200241e8036a41206a211442002133420021322018212c0340200241d8016a41386a2205202c220341386a290300370300200241d8016a41306a2201200341306a290300370300200241d8016a41286a2206200341286a290300370300200241d8016a41206a2207200341206a290300370300200241d8016a41186a2208200341186a290300370300200241d8016a41106a2209200341106a290300370300200241d8016a41086a221d200341086a2903003703002003290300210c200241c8016a41086a220b200341cc006a2802003602002002200c3703d8012002200341c4006a2902003703c801200341d0006a212c200341c0006a2802002203450d0220024198026a41386a200529030037030020024198026a41306a200129030037030020024198026a41286a200629030037030020024198026a41206a200729030037030020024198026a41186a221f200829030037030020024198026a41106a221e200929030037030020024198026a41086a221a201d290300370300200220022903d80137039802200241e8036a41386a2005290300370300200241e8036a41306a2001290300370300200241e8036a41286a200629030037030020142007290300370300200241e8036a41186a2008290300370300200241e8036a41106a2009290300370300200241e8036a41086a201d290300370300200220022903d8013703e803200241d8026a41186a201f290300370300200241d8026a41106a201e290300370300200241d8026a41086a201a29030037030020022002290398023703d802200241f8026a41186a2206201441186a290300370300200241f8026a41106a2207201441106a290300370300200241f8026a41086a2208201441086a290300223437030020022003360298032002201429030022353703f802200f20022903c801370200200f41086a200b280200360200200241d0056a200a200241d8026a10a10320022802d805210920022802d0052101200241003602b003200242013703a8032002200241f8026a3602a005200241a0056a200241a8036a10af012002203b3602a005200241a0056a200241a8036a10af01200228029803210320022802a0032205200241a8036a107602402005450d00200541306c21050340200241a8036a200341106a41201074200220033602a005200341306a2103200241a0056a200241a8036a10af01200541506a22050d000b0b2001200920022802a803220320022802b00310b201024020022802ac03450d002003102e0b024020022802d405450d002001102e0b200241d0056a41186a22112006290300370300200241d0056a41106a22122007290300370300200241d0056a41086a22132008290300370300200220022903f8023703d00520022802a4032115200228029c0321162002280298032127024020022802a0032226418102490d002026410176ad42307e220c422088a70d08200ca72210417f4c0d082010102c2223450d07202741506a2129202741f07e6a212d410021244104211a4100211f202621190340024002402019221d417f6a22010d0041012109410021190c010b02400240024002400240024002402027200141306c6a2203290300201d41306c222a20276a41a07f6a2205290300220d56200341086a2903002220200541086a290300220c562020200c511b0d00201d417e6a2108202d202a6a210341002119410021050340024020082005470d00201d21090c090b200d20032903002221582101200c200341086a2903002220512106200c2020582107200341506a2103200541016a21052021210d2020210c2001200720061b0d000b200541016a21092005417f73201d6a21010c010b202d202a6a210302400340024020014101470d00410021010c020b200d20032903002221562105200c200341086a2903002220512106200c2020562107200341506a21032001417f6a21012021210d2020210c2005200720061b0d000b0b201d2001490d01201d20264b0d02201d20016b22094101762206450d002029202a6a21032027200141306c6a21050340200241a8036a41186a2207200541186a2208290300370300200241a8036a41106a220b200541106a221e290300370300200241a8036a41086a221b200541086a221c290300370300200220052903003703a803200541206a2217290300210c200341286a2219290300210d200341086a22042903002120200341106a22222903002121200341186a22282903002130200329030021312017200341206a222529030037030020082030370300201e2021370300201c202037030020052031370300200541286a220829030021202008200d3703002022200b290300370300202820072903003703002004201b290300370300200320022903a803370300201920203703002025200c370300200341506a2103200541306a21052006417f6a22060d000b0b024020010d00200121190c060b0240200941094d0d00200121190c060b201d20264b0d03201d20016b21062027200141306c6a210b2029202a6a21220340201d2001417f6a2219490d050240201d20196b22094102490d002027200141306c6a22032903002027201941306c6a2208290300222058200341086a2205290300220d200841086a2201290300220c58200d200c511b0d00200241a0056a41186a221b200841286a2207290300370300200241a0056a41106a221c200841206a221e290300370300200241a0056a41086a2217200841186a2204290300370300200220082903103703a0052008200329030037030020012005290300370300200841106a200341106a2903003703002004200341186a290300370300201e200341206a2903003703002007200341286a29030037030041012105024020094103490d002006417f6a211e41002105200b210302400340200341306a2201290300202058200341386a2207290300220d200c58200d200c511b0d0120062005460d07200341286a200341d8006a290300370300200341206a200341d0006a290300370300200341186a200341c8006a290300370300200341106a200341c0006a290300370300200341086a20072903003703002003200129030037030020012103201e200541016a2205470d000b200541016a2105202221030c010b200541016a21050b200320203703002003200c3703082008200541306c6a220341286a201b290300370300200341206a201c290300370300200341186a2017290300370300200320022903a0053703100b2019450d06200641016a2106200b41506a210b201921012009410a4f0d060c000b0b2001201d41e4d1cc001057000b201d202641e4d1cc00104d000b200541016a200941d4d1cc00103c000b201d2001417f6a2219490d00201d202641f4d1cc00104d000b2019201d41f4d1cc001057000b0240201f2024470d00202441016a22032024490d0a202441017422052003200520034b1b22034104200341044b1b220341ffffffff01712003464102742105200341037421030240024020240d00200241003602a8030c010b200241043602b0032002201a3602a803200220244103743602ac030b200241a0056a20032005200241a8036a107d20022802a8052103024020022802a0054101470d002003450d0b0c0a0b20022802a405211a200341037621240b201a201f4103746a2203200936020420032019360200201f41016a2204211f024020044102490d0002400240024003400240024002400240201a2004221f417f6a22044103746a2203280200450d00201f410374201a6a220741746a2802002206200328020422054d0d00201f41024d0d08201a201f417d6a22034103746a2802042201200520066a4d0d01201f41034d0d08200741646a280200200120066a4b0d080c010b201f4103490d0120032802042105201a201f417d6a22034103746a28020421010b20012005490d010b201f417e6a21030b0240201f200341016a22224d0d00201f20034d0d02201a20034103746a221b2802042228201b2802006a2203201a20224103746a221c2802002217490d03200320264b0d04201b41046a21252027201741306c6a220b201c280204221e41306c22056a2106200341306c210102400240200320176b2208201e6b2203201e490d002023200b200510e908221d20056a210702400240201e4101480d002008201e4a0d010b200b2103201d21050c020b202720016a2109201d2105200b210303402003200620052006290300200529030056200641086a290300220c200541086a290300220d56200c200d511b22081b2201290300370300200341086a200141086a290300370300200341106a200141106a290300370300200341186a200141186a290300370300200341206a200141206a290300370300200341286a200141286a2903003703002005200541306a20081b2105200341306a2103200641306a200620081b220620094f0d02200720054b0d000c020b0b20232006200341306c220510e908221d20056a210702400240201e4101480d00200341014e0d010b20062103201d21050c010b202920016a21012006210303402001200341506a2206200741506a22082008290300200629030056200841086a290300220c200641086a290300220d56200c200d511b22091b2205290300370300200141086a200541086a290300370300200141106a200541106a290300370300200141186a200541186a290300370300200141206a200541206a290300370300200141286a200541286a2903003703002007200820091b21070240200b2006200320091b2203490d00201d21050c020b200141506a2101201d2105201d2007490d000b0b20032005200720056b220120014130706b10e9081a20252028201e6a360200201b2017360200201c201c41086a201f2022417f736a41037410ea081a4101211f200441014d0d050c010b0b2022201f4184d2cc00103c000b2003201f4194d2cc00103c000b2017200341a4d2cc001057000b2003202641a4d2cc00104d000b20190d000b0240202441ffffffff0171450d00201a102e0b20104130702103024020104130490d0020102003460d002023102e0b20264180022026418002491b21260b203220347c210c203320357c220d2033542206ad2120200241a8036a41186a2011290300370300200241a8036a41106a2012290300370300200241a8036a41086a2013290300370300200220022903d0053703a803200220153602d403200220263602d003200220163602cc03200220273602c803200241c0056a200a200241d8026a10f70520022802c805210720022802c0052101200241003602a805200242013703a0052002200241a8036a3602d803200241d8036a200241a0056a10af012002203a3602d803200241d8036a200241a0056a10af0120022802c803210320022802d0032205200241a0056a107602402005450d00200541306c21050340200241a0056a200341106a41201074200220033602d803200341306a2103200241d8036a200241a0056a10af01200541506a22050d000b0b200c20207c210c2001200720022802a005220320022802a80510b201024020022802a405450d002003102e0b200c2032512103200c2032542105024020022802c405450d002001102e0b2006200520031b2103024020022802cc032205450d00200541306c450d0020022802c803102e0b427f200c20031b2132427f200d20031b2133202c200e470d000c030b0b0240201d450d002039102e0b02402017450d00201741d0006c2105201841c4006a21030340024020032802002201450d00200141306c450d002003417c6a280200102e0b200341d0006a2103200541b07f6a22050d000b0b2037450d02203741d0006c450d022018102e0c020b200e202c460d000340202c220341d0006a212c0240200341c4006a2802002205450d00200541306c450d00200341c0006a280200102e0b200e202c470d000b0b02402037450d00203741d0006c450d002018102e0b20024198026a200a10960320022802a00221052002280298022103200220323703f003200220333703e80320032005200241e8036a411010b2010240200228029c02450d002003102e0b0240202b450d00202b4105742106203921030340200241e8036a2003108605200241086a20022802e803220720022802f0031087054100200228020820022d000c22054102461b210120054101712105024020022802ec03450d002007102e0b200220053a00dc01200220013602d80120024198026a200a200310f80520022802a00221072002280298022101200241003602f003200242013703e803200241d8016a200241e8036a109102200220053a00a803200241e8036a200241a8036a410110742001200720022802e803220520022802f00310b201024020022802ec03450d002005102e0b0240200228029c02450d002001102e0b200341206a2103200641606a22060d000b0b200241f0036a41043a0000200241043a00e803200241e8036a10fe012039450d002000202bad4220862038ad84370204200020393602000c010b200041003602000b200241f0056a24000f0b1036000b1038000b810301047f230041f0006b22002400200041186a22014200370300200041106a22024200370300200041086a42003703002000420037030020004192fdc6004107108102200041d8006a41b8b2c60041081081022001200041d8006a41086a290000370300200220002900583703002000412036022420002000360220200041286a2000412010ed0241042101024020002802282202450d00200028022c210302400240200041286a41086a280200450d004100210102400240024020022d00000e0404000102030b410121010c030b410221010c020b410321010c010b20004100360240200042013703382000410a36024c2000200041206a3602482000200041386a360254200041ec006a41013602002000420137025c200041909dc5003602582000200041c8006a360268200041d4006a419cebc000200041d8006a103d1a2000280238200028024010ef020240200028023c450d002000280238102e0b410421010b2003450d002002102e0b200041f0006a24004100200120014104461b0bae0301037f230041f0006b22032400200341086a4192fdc6004107108102200341186a41b29dc500410b108102200320013602382003200341386a410410a301370348200341ec006a2201200341386a41046a3602002003200341c8006a41086a3602642003200341386a3602682003200341c8006a360260200341286a200341e0006a107c024002404120102c2204450d002003422037024c20032004360248200341c8006a2002412010742003200328024822022003280250220410a3013703582001200220046a360200200320023602682003200341d8006a41086a3602642003200341d8006a360260200341386a200341e0006a107c0240200328024c450d002002102e0b20032802302201200328024022046a41206a2202417f4c0d010240024020020d00410121050c010b2002102c2205450d010b2000410036020820002002360204200020053602002000200341086a411010742000200341186a4110107420002003280228220220011074200020032802382201200410740240200328023c450d002001102e0b0240200328022c450d002002102e0b200341f0006a24000f0b1036000b1038000bfb0201017f230041f0006b220324002003200236020420032001360200200341086a2001200210ed0202400240200328020822010d00200041003602200c010b200328020c21022003200341086a41086a28020036024c20032001360248200341186a200341c8006a1085050240024020032802380d0020034100360258200342013703502003410a360264200320033602602003200341d0006a36026c2003412c6a41013602002003420137021c200341909dc5003602182003200341e0006a360228200341ec006a419cebc000200341186a103d1a2003280250200328025810ef0202402003280254450d002003280250102e0b200041003602200c010b20002003290318370300200041286a200341186a41286a290300370300200041206a200341186a41206a290300370300200041186a200341186a41186a290300370300200041106a200341186a41106a290300370300200041086a200341186a41086a2903003703000b2002450d002001102e0b200341f0006a24000b921c030a7f037e137f230041800a6b22022400200241d8006a10ab02200241b8016a41186a22034200370300200241b8016a41106a22044200370300200241b8016a41086a22054200370300200242003703b801200241e0066a41aad3c800410110b0012003200241e0066a41186a22062900003703002004200241e0066a41106a22072900003703002005200241e0066a41086a2208290000370300200220022900e0063703b801200241e0066a41aad3c800410110b001200241b8086a41186a22092006290000370300200241b8086a41106a220a2007290000370300200241b8086a41086a220b2008290000370300200220022900e0063703b80802400240024002404120102c2203450d002008200b2903003703002007200a29030037030020062009290300370300410041003502e8f54c200241a0056aad7c42adfed5e4d485fda8d8007e422189220c3e02e8f54c200241c8006a41e8f5cc00ad220d42a4bb99fed1a0bbb02385420042adfed5e4d485fda8d800420010e808200241286a200c42a4bb99fed1a0bbb02385420042adfed5e4d485fda8d800420010e808200241386a200d42c5ecb3fec9ecf7c2c30085420042adfed5e4d485fda8d800420010e808200241186a200c42c5ecb3fec9ecf7c2c30085420042adfed5e4d485fda8d800420010e808200241086a200c200d85420042adfed5e4d485fda8d800420010e8082002418c026a420037020020024194026a4200370200200220022903b8083703e0062002410436028802200241d8016a41d0006a41d081ca00360200200241d8016a41c8006a4108360200200241d8016a41c4006a20033602002002200241b8016a3602ac022002200241d8006a3602a402200241013a00b002200241c9026a2006290300370000200241c1026a2007290300370000200241b9026a2008290300370000200241b1026a20022903e006370000200241d3026a200241a2056a2d00003a0000200241d1026a20022f00a0053b0000200241d8016a41286a4200370300200241d8016a41246a41d0a1c000360200200241003602d402200241003602f8012002200241186a41086a290300200229031885200d7c200241086a41086a29030020022903088542cf829ebbefefde82147c220e423088893703f0012002200c200241386a41086a2903002002290338857c200e422088893703e8012002200241286a41086a290300200229032885200d7c200e421088893703e0012002200c200241c8006a41086a2903002002290348857c200e893703d8012001280200220f2001280208221041d0006c6a2111200241e0066a41306a2112200241e0066a41206a2113200241b8086a41246a2104200241f8026a41046a2105200241e0066a41046a2103200241e0066a410172211420012802042115200f2116410021170340201621012017211802400240034002400240024020112001470d00200241e0066a41386a200241a0056a41386a290300370300200241e0066a41306a200241a0056a41306a290300370300200241e0066a41286a200241a0056a41286a290300370300200241e0066a41206a200241a0056a41206a290300370300200241e0066a41186a200241a0056a41186a290300370300200241e0066a41106a200241a0056a41106a290300370300200241e0066a41086a200241a0056a41086a290300370300200220022903a0053703e006201121010c010b200241a0056a41386a200141386a2219290300370300200241a0056a41306a200141306a221a290300370300200241a0056a41286a200141286a221b290300370300200241a0056a41206a200141206a221c290300370300200241a0056a41186a200141186a2216290300370300200241a0056a41106a200141106a2217290300370300200241a0056a41086a200141086a221d290300370300200220012903003703a005200141c0006a280200211e200141c4006a280200211f200141c8006a290200210c200241e0066a41386a222020192903003703002012201a290300370300200241e0066a41286a2219201b2903003703002013201c29030037030020062016290300370300200720172903003703002008201d290300370300200220012903003703e006201e0d01200141d0006a21010b024020112001460d0003402001220341d0006a21010240200341c4006a2802002204450d00200441306c450d00200341c0006a280200102e0b20112001470d000b0b02402015450d00201541d0006c450d00200f102e0b200241d8016a109b08200241e0066a200241d8006a41e00010e9081a200241d8076a200241d0016a290300370300200241d0076a200241c8016a290300370300200241c8076a200241b8016a41086a290300370300200220022903b8013703c007200041086a200241e0066a41800110e9081a200041003602000c080b200241e0036a41386a221a2020290300370300200241e0036a41306a221b2012290300370300200241e0036a41286a221c2019290300370300200241e0036a41206a22192013290300370300200241e0036a41186a22162006290300370300200241e0036a41106a22172007290300370300200241e0036a41086a221d2008290300370300200220022903e0063703e003200341386a201a290300370200200341306a201b290300370200200341286a201c290300370200200341206a2019290300370200200341186a2016290300370200200341106a2017290300370200200341086a201d290300370200200320022903e003370200200241b8086a200241e0066a41c40010e9081a200241f8026a41086a200b290200370300200241f8026a41106a200a290200370300200241f8026a41186a2009290200370300200241f8026a41206a200241b8086a41206a280200360200200241d8026a41086a2219200441086a290200370300200241d8026a41106a221a200441106a290200370300200241d8026a41186a221b200441186a290200370300200220022902b8083703f802200220042902003703d802200241a0036a41186a221c200541186a290000370300200241a0036a41106a2216200541106a290000370300200241a0036a41086a2217200541086a290000370300200220052900003703a003200241c0036a41186a221d201b290300370300200241c0036a41106a2220201a290300370300200241c0036a41086a22212019290300370300200220022903d8023703c003200241a8086a200241a0036a10a603200241e0066a20022802a808221b20022802b00810a70320022d00e006211a200241b8086a201441c00110e9081a410021190240201a4101470d00200241a0056a200241b8086a41c00110e9081a410121190b024020022802ac08450d00201b102e0b024002402019450d00200241e0036a200241a0056a41c00110e9081a2006201c2903003703002007201629030037030020082017290300370300201320022903c003370300201341086a2021290300370300201341106a2020290300370300201341186a201d290300370300200220022903a0033703e0062002200c3703a8072002201f3602a4072002201e3602a007201841016a2117200141d0006a21164100211903402002200241e0036a20194198fac6006a221a28000010d1032002280204221e41046a221f417f4c0d022002280200211b02400240201f0d004101211c0c010b201f102c221c450d080b200241003602a8052002201f3602a4052002201c3602a005200241a0056a201a41041074201e200241a0056a1076200241a0056a201b201e107420022802a805211e20022802a005211f200220183602a808200241b8086a200241d8016a201f201e200241a8086a4104109c08024020022802a405450d00201f102e0b20022802bc08211f024020022802b8084101470d0002400240201f2d00000e0407070007010b201f41086a280200450d06201f41046a280200102e0c060b201f41286a280200450d05201f41246a280200102e0c050b0240201f450d0020022802c008450d00201f102e0b201941046a22194118460d050c000b0b0240201f450d00201f41306c450d00201e102e0b200141d0006a2101201841016a21180c010b0b1038000b201f102e200041086a411a360200200041f881ca00360204200041013602000c040b200220183602fc09200241003602a805200242013703a005200241a0056a200241e0066a41201074200220133602a808200241a8086a200241a0056a10af01200220123602a808200241a8086a200241a0056a10af0120022802a007211f20022802a8072218200241a0056a107602402018450d00201841306c21180340200241a0056a201f41106a412010742002201f3602a808201f41306a211f200241a8086a200241a0056a10af01201841506a22180d000b0b200241b8086a200241d8016a200241fc096a410420022802a005221f20022802a805109c08024020022802a405450d00201f102e0b024020022802b8084101470d000240024020022802bc0822032d00000e0405050005010b200341086a280200450d04200341046a280200102e0c040b200341286a280200450d03200341246a280200102e0c030b024020022802bc082201450d0020022802c008450d002001102e0b20022802a4072201450d00200141306c450d0020022802a007102e0c000b0b1036000b2003102e200041086a411a360200200041f881ca00360204200041013602000b201141b07f6a2103024020022802a4072204450d00200441306c450d0020022802a007102e0b024020032001460d00201041d0006c200f6a41b07f6a21040340024020014194016a2802002203450d00200341306c450d0020014190016a280200102e0b2004200141d0006a2201470d000b0b02402015450d00201541d0006c450d00200f102e0b200241d8016a109b08200241d8006a10b8020b200241800a6a24000b850201037f230041d0006b22022400200241086a41a081ca004107108102200241186a41a781ca004112108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000bdf0902087f047e230041b0016b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022010d00200041003602000c010b200341186a280200210220032802142104200341003a0060024002402002450d00200320012d00003a0040200341013a0060024020024101460d00200320012d00013a0041200341023a006020024102460d00200320012d00023a0042200341033a006020024103460d00200320012d00033a0043200341043a006020024104460d00200320012d00043a0044200341053a006020024105460d00200320012d00053a0045200341063a006020024106460d00200320012d00063a0046200341073a006020024107460d00200320012d00073a0047200341083a006020024108460d00200320012d00083a0048200341093a006020024109460d00200320012d00093a00492003410a3a00602002410a460d00200320012d000a3a004a2003410b3a00602002410b460d00200320012d000b3a004b2003410c3a00602002410c460d00200320012d000c3a004c2003410d3a00602002410d460d00200320012d000d3a004d2003410e3a00602002410e460d00200320012d000e3a004e2003410f3a00602002410f460d00200320012d000f3a004f200341103a006020024110460d00200320012d00103a0050200341113a006020024111460d00200320012d00113a0051200341123a006020024112460d00200320012d00123a0052200341133a006020024113460d00200320012d00133a0053200341143a006020024114460d00200320012d00143a0054200341153a006020024115460d00200320012d00153a0055200341163a006020024116460d00200320012d00163a0056200341173a006020024117460d00200320012d00173a0057200341183a006020024118460d00200320012d00183a0058200341193a006020024119460d00200320012d00193a00592003411a3a00602002411a460d00200320012d001a3a005a2003411b3a00602002411b460d00200320012d001b3a005b2003411c3a00602002411c460d00200320012d001c3a005c2003411d3a00602002411d460d00200320012d001d3a005d2003411e3a00602002411e460d00200320012d001e3a005e2003411f3a00602002411f460d00200341206a41106a2205200341c0006a41106a2206290300370300200341206a41086a2207200341c0006a41086a2208290300370300200320012d001f3a005f200341206a41186a2209200341c0006a41186a220a290300370300200341203a006020032003290340220b3703682003200b3703202002417c714120460d0120082007290300220b37030020062005290300220c370300200a2009290300220d37030020032003290320220e370340200128002021022000411c6a200d370200200041146a200c3702002000410c6a200b3702002000200e370204200041246a2002360200410121020c020b200341003a00600b4100210220034100360270200342013703682003410a3602242003200341086a3602202003200341e8006a3602ac01200341d4006a410136020020034201370244200341909dc5003602402003200341206a360250200341ac016a419cebc000200341c0006a103d1a2003280268200328027010ef02200328026c450d002003280268102e0b200020023602002004450d002001102e0b200341b0016a24000bb40201037f230041e0006b22022400200241086a41a081ca004107108102200241186a41b4d3c1004108108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241c8006a41086a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000bcb0201027f230041c0036b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022010d00200041003a00000c010b200328021421042003200341186a2802003602ac03200320013602a803200341e0016a200341a8036a109903410121020240024020032d00e0014101470d004100210220034100360228200342013703202003410a3602b4032003200341086a3602b0032003200341206a3602bc03200341f4016a4101360200200342013702e401200341909dc5003602e0012003200341b0036a3602f001200341bc036a419cebc000200341e0016a103d1a2003280220200328022810ef022003280224450d012003280220102e0c010b200341206a200341e0016a41017241c00110e9081a200041016a200341206a41c00110e9081a0b200020023a00002004450d002001102e0b200341c0036a24000b986905087f017e097f027e017f230041d0026b2205240002404108102c2206450d0020062001200241e0016c6a2207360204200620013602004108102c2208450d0020082003200441e0016c6a22093602042008200336020002400240024002400240024002402000450d00200541c0016a210a0c010b200541d8016a220b4200370300200541d0016a22044200370300200541c0016a41086a22024200370300200542003703c001200541a8026a41a0dac800410f1081022002200541a8026a41086a220c290000370300200520052900a8023703c001200541a8026a41a0eec8004107108102200b200c290000370300200420052900a802370300200541c0016a210a200541c0016a4120108f02450d010b200541a8026a200610a9070240024020052802a802450d00200541c0016a41106a200541a8026a41106a290300370300200541c0016a41086a200541a8026a41086a290300370300200541c0016a41186a200541a8026a41186a290300370300200541c0016a41206a200541a8026a41206a280200360200200541a0016a41086a200541cc016a290200370300200541a0016a41106a200541d4016a290200370300200541a0016a41186a200541dc016a290200370300200520052903a8023703c001200520052902c4013703a001200541c0016a200610aa07417f20052802c001220441016a220220022004491bad42287e220d422088a70d06200da72204417f4c0d062004102c220e450d07200e20052903a001370300200e4201370320200e41186a200541a0016a41186a220f290300370300200e41106a200541a0016a41106a2210290300370300200e41086a200541a0016a41086a2211290300370300200541a8026a200610a907200441286e2112024020052802a8020d00410121022006102e0c020b200541c0016a410472210b4128210c410221134101210202400340200541c0016a41206a200541a8026a41206a280200360200200541c0016a41186a2214200541a8026a41186a290300370300200541c0016a41106a2215200541a8026a41106a290300370300200541c0016a41086a2216200541a8026a41086a290300370300200520052903a8023703c0012011200b41086a2902003703002010200b41106a290200370300200f200b41186a2902003703002005200b2902003703a0012014200f2903003703002015201029030037030020162011290300370300200520052903a0013703c001024020022012470d00200541a8026a200610aa072002417f20052802a802220441016a221220122004491b6a22042002490d0920132004201320044b1b22044104200441044b1bad42287e220d422088a7454103742104200da721120240024020020d00200541003602a8020c010b200541083602b0022005200c3602ac022005200e3602a8020b20054180016a20122004200541a8026a107d20052802880121042005280280014101460d02200528028401210e200441286e21120b200e200c6a220420052903c001370300200441186a2014290300370300200441106a2015290300370300200441086a2016290300370300200441206a4201370300200541a8026a200610a907200c41286a210c201341026a2113200241016a210220052802a8020d000b2006102e0c020b2004450d060c070b2006102e4108210e41002102410021120b200541d8016a220b4200370300200541d0016a22044200370300200541c0016a41086a4200370300200542003703c001200541a8026a41a0dac800410f108102200a41086a200541a8026a41086a220c290000370000200a20052900a802370000200541a8026a41a0eec8004107108102200b200c290000370300200420052900a802370300200541a8026a200a4120109d0320052802a8024101460d01200520023602c801200520123602c4012005200e3602c001200541a0016a200541c0016a41004100200510ab070c020b200b42003703002004420037030020024200370300200542003703c001200541a8026a41a0dac800410f1081022002200c290000370300200520052900a8023703c001200541a8026a41e0eec800410c108102200441086a200c290000370000200420052900a802370000200541d0006a200541c0016a1085032005290358210d20052802502113200b42003703002004420037030020024200370300200542003703c001200541a8026a41a081ca0041071081022002200c290000370300200520052900a8023703c001200541e0006a41e4d1c100410c108102200b200541e0006a41086a29000037030020042005290060370300200541c8006a200541c0016a4120108e02200528024c21022005280248210b200541c0016a200d420020131b10ac0720052802c801210c20052802c0012104200520024100200b1b3602a8022004200c200541a8026a410410b201024020052802c401450d002004102e0b2008102e2006102e0c020b200a412010ff0120052902ac02210d200520023602c801200520123602c4012005200e3602c001200541a0016a200541c0016a200da74101200d422088a710ab070b20052d00a0012114200541d8016a220b4200370300200541d0016a220c4200370300200541c0016a41086a22134200370300200542003703c001200541a8026a41a0dac800410f108102200a41086a2215200541a8026a41086a2202290000370000200a20052900a802370000200541a8026a41e0eec800410c108102200441086a22162002290000370000200420052900a802370000200541386a200a1085032005290340420020052802381b210d024020144106470d00200b4200370300200c420037030020134200370300200542003703c001200541a8026a41a0dac800410f10810220152002290000370000200a20052900a802370000200541a8026a41e0eec800410c10810220162002290000370000200420052900a8023700002005200d42017c220d3703a802200a4120200541a8026a410810b2010b200b4200370300200c420037030020134200370300200542003703c001200541a8026a41a081ca00410710810220132002290000370300200520052900a8023703c001200541e0006a41e4d1c100410c108102200b200541e0006a41086a290000370300200c2005290060370300200541306a200541c0016a4120108e02200528023421022005280230210b200541c0016a200d10ac0720052802c801210c20052802c0012104200520024100200b1b3602a8022004200c200541a8026a410410b201024020052802c401450d002004102e0b2008102e0b4108102c2211450d0120112007360204201120013602004108102c2208450d012008200936020420082003360200200541a8026a201110ad070240024020052802a802450d00200541c0016a41106a200541a8026a41106a290300370300200541c0016a41086a200541a8026a41086a290300370300200541c0016a41186a200541a8026a41186a290300370300200541c0016a41206a200541a8026a41206a280200360200200541a0016a41086a200541cc016a290200370300200541a0016a41106a200541d4016a290200370300200541a0016a41186a200541dc016a290200370300200520052903a8023703c001200520052902c4013703a001200541c0016a201110aa07417f20052802c001220441016a220220022004491bad42287e220d422088a70d02200da72204417f4c0d022004102c2210450d03201020052903a00137030020104201370320201041186a200541a0016a41186a220e290300370300201041106a200541a0016a41106a2206290300370300201041086a200541a0016a41086a220f290300370300200541a8026a201110ad07200441286e2102024020052802a8020d004101210c2011102e0c020b200541c0016a410472210441c80021134101210c02400340200541c0016a41206a200541a8026a41206a280200360200200541c0016a41186a2214200541a8026a41186a290300370300200541c0016a41106a2215200541a8026a41106a290300370300200541c0016a41086a2216200541a8026a41086a290300370300200520052903a8023703c001200f200441086a2902003703002006200441106a290200370300200e200441186a290200370300200520042902003703a0012014200e290300370300201520062903003703002016200f290300370300200520052903a0013703c0010240200c2002470d00200541a8026a201110aa072002417f20052802a802220b41016a22122012200b491b6a220b2002490d0520024101742212200b2012200b4b1b220b4104200b41044b1bad42287e220d422088a745410374210b200da721120240024020020d00200541003602a8020c010b200541083602b002200520103602a8022005200241286c3602ac020b20054180016a2012200b200541a8026a107d20052802880121022005280280014101460d022005280284012110200241286e21020b201020136a221241606a220b20052903c0013703002016290300210d201529030021172014290300211820124201370300200b41186a2018370300200b41106a2017370300200b41086a200d370300200541a8026a201110ad07201341286a2113200c41016a210c20052802a8020d000b2011102e0c020b20020d030c020b2011102e410821104100210c410021020b200541a8026a200810ad070240024020052802a802450d00200541c0016a41106a200541a8026a41106a290300370300200541c0016a41086a200541a8026a41086a290300370300200541c0016a41186a200541a8026a41186a290300370300200541c0016a41206a200541a8026a41206a280200360200200541a0016a41086a200541cc016a290200370300200541a0016a41106a200541d4016a290200370300200541a0016a41186a200541dc016a290200370300200520052903a8023703c001200520052902c4013703a001200541c0016a200810aa07417f20052802c001220441016a220b200b2004491bad42287e220d422088a70d02200da72204417f4c0d022004102c220f450d03200f20052903a001370300200f4201370320200f41186a200541a0016a41186a2211290300370300200f41106a200541a0016a41106a2212290300370300200f41086a200541a0016a41086a220a290300370300200541a8026a200810ad07200441286e2114024020052802a8020d00410121152008102e0c020b200541c0016a410472210441c80021134101211502400340200541c0016a41206a200541a8026a41206a280200360200200541c0016a41186a2216200541a8026a41186a290300370300200541c0016a41106a220e200541a8026a41106a290300370300200541c0016a41086a2206200541a8026a41086a290300370300200520052903a8023703c001200a200441086a2902003703002012200441106a2902003703002011200441186a290200370300200520042902003703a00120162011290300370300200e20122903003703002006200a290300370300200520052903a0013703c001024020152014470d00200541a8026a200810aa072014417f20052802a802220b41016a22192019200b491b6a220b2014490d0520144101742219200b2019200b4b1b220b4104200b41044b1bad42287e220d422088a745410374210b200da721190240024020140d00200541003602a8020c010b200541083602b0022005200f3602a8022005201441286c3602ac020b20054180016a2019200b200541a8026a107d200528028801210b2005280280014101460d02200528028401210f200b41286e21140b200f20136a221941606a220b20052903c0013703002006290300210d200e29030021172016290300211820194201370300200b41186a2018370300200b41106a2017370300200b41086a200d370300200541a8026a200810ad07201341286a2113201541016a211520052802a8020d000b2008102e0c020b200b0d030c020b2008102e410021144108210f410021150b200541f8006a22134200370300200541f0006a220e4200370300200541e0006a41086a2204420037030020054200370360200541a8026a41a8f8c60041041081022004200541a8026a41086a220b290000370300200520052900a802370360200541a8026a41fa8bc500410a1081022013200b290000370300200e20052900a802370300200541206a200541e0006a10850302402005290328420020052802201b221742017c220d2017540d0020134200370300200e42003703002004420037030020054200370360200541a8026a41a8f8c60041041081022004200b290000370300200520052900a802370360200541a8026a41fa8bc500410a108102200e41086a2216200b290000370000200e20052900a8023700002005200d3703c001200541e0006a4120200541c0016a410810b20120134200370300200e42003703002004420037030020054200370360200541a8026a41a8f8c60041041081022004200b290000370300200520052900a802370360200541a8026a41a58bc500410b1081022016200b290000370000200e20052900a802370000200c41286c4104722204417f4c0d012004102c220b450d02200541003602c801200520043602c4012005200b3602c001200c200541c0016a10760240200c41286c2204450d00201020046a210b201021040340200541c0016a2004412010742005200441206a2903003703a802200541c0016a200541a8026a41081074200441286a2204200b470d000b0b200541e0006a412020052802c001220420052802c80110b201024020052802c401450d002004102e0b02402002450d00200241286c450d002010102e0b0240200d42017c2217200d540d00200541a0016a41186a22044200370300200541a0016a41106a22064200370300200541a0016a41086a22024200370300200542003703a001200541a8026a41a8f8c60041041081022002200541a8026a41086a220b290000370300200520052900a8023703a001200541a8026a41978bc500410e1081022004200b290000370300200620052900a802370300200541c0016a200541a0016a10a30420052d00c0012104200541e0006a41186a2202200541d9016a290000370300200541e0006a41106a220b200541d1016a290000370300200541e0006a41086a220c200541c9016a290000370300200520052900c1013703600240024020044101460d0020054180016a41186a420037030020054180016a41106a420037030020054180016a41086a420037030020054200370380010c010b20054180016a41186a200229030037030020054180016a41106a200b29030037030020054180016a41086a200c29030037030020052005290360370380010b200541e0006a41186a220b4200370300200541e0006a41106a220c4200370300200541e0006a41086a2202420037030020054200370360200541a8026a41a8f8c60041041081022002200541a8026a41086a2204290000370300200520052900a802370360200541a8026a41ee8bc500410c108102200e41086a22132004290000370000200e20052900a802370000200541186a200541e0006a4120108e02200528021c211620052802182110200b4200370300200c42003703002002420037030020054200370360200541a8026a41a8f8c600410410810220022004290000370300200520052900a802370360200541a8026a41ee8bc500410c10810220132004290000370000200e20052900a802370000200541003602c001200541e0006a4120200541c0016a410410b201200541a8026a41186a20054180016a41186a290300370300200541a8026a41106a20054180016a41106a290300370300200420054180016a41086a29030037030020052005290380013703a802417f2016410020101b221041016a220420042010491b410d744128722204417f4c0d022004102c220b450d0341002102200541003602f801200520043602f4012005200b3602f001200541f0016a200541a8026a41201074200520173703c001200541f0016a200541c0016a4108107441002104034020022010200220104b1b21160240034002402004450d00200b200c470d02201341ffffff3f71450d002004102e0b024020162002460d0020054188026a200210db06200541e0006a200528028802220b200528029002220c10b60502400240200528026022040d004200210d410121040c010b200b200c10ff012005290264210d0b0240200528028c02450d00200b102e0b200241016a21022004200d422088a74105746a210c200da721132004210b0c010b0b200541c0016a20052802f001220420052802f80110b001024020052802f401450d002004102e0b200541f8006a4200370300200541f0006a4200370300200541e0006a41086a2204420037030020054200370360200541a8026a41a8f8c60041041081022004200541a8026a41086a2202290000370300200520052900a802370360200541a8026a41978bc500410e108102200e41086a2002290000370000200e20052900a8023700004120102c2204450d05200542203702ac02200520043602a802200541a8026a200541c0016a41201074200541e0006a412020052802a802220420052802b00210b201024020052802ac02450d002004102e0b200541a0016a41186a20054180016a41186a290300370300200541a0016a41106a20054180016a41106a290300370300200541a0016a41086a20054180016a41086a29030037030020052005290380013703a001200541e0006a41186a4200370300200541e0006a41106a4200370300200541e0006a41086a2204420037030020054200370360200541a8026a41a8f8c60041041081022004200541a8026a41086a2202290000370300200520052900a802370360200541a8026a41c28cc500410a108102200e41086a2002290000370000200e20052900a8023700004120102c2204450d05200542203702c401200520043602c001200541c0016a200541a0016a41201074200541e0006a412020052802c001220420052802c80110b201024020052802c401450d002004102e0b200541f8006a4200370300200541f0006a4200370300200541e0006a41086a2204420037030020054200370360200541a8026a41a8f8c60041041081022004200541a8026a41086a2202290000370300200520052900a802370360200541a8026a41ba8bc500410f108102200e41086a2002290000370000200e20052900a802370000201541286c4104722204417f4c0d042004102c2202450d05200541003602c801200520043602c401200520023602c0012015200541c0016a10760240201541286c2204450d00200f20046a2102200f21040340200541c0016a2004412010742005200441206a2903003703a802200541c0016a200541a8026a41081074200441286a22042002470d000b0b200541e0006a412020052802c001220420052802c80110b201024020052802c401450d002004102e0b200541a0016a41186a220c4200370300200541a0016a41106a22134200370300200541a0016a41086a22044200370300200542003703a001200541a8026a41a8f8c60041041081022004200541a8026a41086a2202290000370300200520052900a8023703a001200541e0006a41b08bc500410a108102200641086a2216200541e0006a41086a220b29000037000020062005290060370000200541c0016a200541a0016a4120109d03200541c0016a41086a2212280200210a20052802c0012108200541e0006a41186a22104200370300200541e0006a41106a22114200370300200b420037030020054200370360200541a8026a41d9fcc6004106108102200b2002290000370300200520052900a802370360200541a8026a4180f4cb004106108102200e41086a2002290000370000200e20052900a802370000200541106a200541e0006a4120108e0220122005280214410020052802101b360200200541013602c0012005200a410020084101461b3602c401200c42003703002013420037030020044200370300200542003703a001200541a8026a41a8f8c600410410810220042002290000370300200520052900a8023703a001200541e0006a41b08bc500410a1081022016200b29000037000020062005290060370000200541a0016a4120200541c0016a410472109e03200c42003703002013420037030020044200370300200542003703a001200541a8026a41a8f8c600410410810220042002290000370300200520052900a8023703a001200541a8026a41978bc500410e10810220162002290000370000200620052900a802370000200541c0016a200541a0016a10a30420052d00c00121022010200541d9016a2900003703002011200541d1016a290000370300200b200541c9016a290000370300200520052900c1013703600240024020024101460d00200c42003703002013420037030020044200370300200542003703a0010c010b200c2010290300370300201320112903003703002004200b290300370300200520052903603703a0010b200541c0016a410c6a2015360200200541c0016a41086a2014360200200541c0016a41106a20052903a001370300200541c0016a41186a200541a0016a41086a290300370300200541e0016a200541a0016a41106a290300370300200541c0016a41286a200541a0016a41186a2903003703002005200f3602c401200541003602c001200541a8026a200541c0016a10a404200541eb006a200541a8026a41086a2204280200360000200520052903a802370063200541a8026a410c6a200541e7006a290000370000200541c28289aa043600a902200541023a00a802200520052900603700ad02200541a8026a10a50402402014450d00201441286c450d00200f102e0b200541e0006a41186a4200370300200541e0006a41106a4200370300200541e0006a41086a2202420037030020054200370360200541a8026a41a8f8c600410410810220022004290000370300200520052900a802370360200541a8026a41d48bc500410f108102200e41086a2004290000370000200e20052900a802370000200541c0016a200541e0006a10b005024020052d00d00122044103460d0020052903c001210d20052903c8012117200541f8006a4200370300200541f0006a4200370300200541e0006a41086a2202420037030020054200370360200541a8026a41a8f8c60041041081022002200541a8026a41086a220b290000370300200520052900a802370360200541a8026a418c8bc500410b108102200e41086a200b290000370000200e20052900a802370000200541e0006a200d2017200410c2050b200541e0006a41186a4200370300200541f0006a4200370300200541e0006a41086a2204420037030020054200370360200541a8026a41a8f8c60041041081022004200541a8026a41086a2202290000370300200520052900a802370360200541a8026a41aa8cc5004118108102200e41086a2002290000370000200e20052900a80237000020054120360284022005200541e0006a3602800220054188026a200541e0006a412010ed020240024020052802880222020d00410321040c010b200528028c02210b200520054188026a41086a28020036029c022005200236029802200541c0016a20054198026a1095020240024020052d00d00122044103470d00200541003602b002200542013703a8022005410a3602f401200520054180026a3602f0012005200541a8026a3602a402200541d4016a4101360200200542013702c401200541909dc5003602c0012005200541f0016a3602d001200541a4026a419cebc000200541c0016a103d1a20052802a80220052802b00210ef02024020052802ac02450d0020052802a802102e0b0c010b200520052800d1013602a8022005200541d4016a2800003600ab0220052903c801210d20052903c00121170b0240200b450d002002102e0b024020044103470d00410321040c010b200541e0006a412010ff010b200520052800ab0236008b02200520052802a80236028802024020044103460d00200541e0006a41186a4200370300200541e0006a41106a4200370300200541e0006a41086a220b420037030020054200370360200541a8026a41a8f8c6004104108102200b200541a8026a41086a2202290000370300200520052900a802370360200541a8026a41d48bc500410f108102200e41086a2002290000370000200e20052900a802370000200541e0006a2017200d200410c205200541c0016a41186a20043a0000200541c0016a41106a200d370300200541c0016a41086a2017370300200541dc016a200528008b0236000020052005280288023600d901200541023602c001200541a8026a200541c0016a10a404200541e0006a41036a220441086a2002280200360000200420052903a802370000200541b4026a200541e7006a290000370000200541c28289aa043600a902200541023a00a802200520052900603700ad02200541a8026a10a5040b4108102c2206450d0520062007360204200620013602004108102c2212450d052012200936020420122003360200200541c0016a41186a22044200370300200541c0016a41106a22114200370300200541c0016a41086a22024200370300200542003703c001200541a8026a41d9fcc60041061081022002200541a8026a41086a220b290000370300200520052900a8023703c001200541e0006a4180f4cb0041061081022004200541e0006a41086a221429000037030020112005290060370300200541086a200541c0016a4120108e022005280208210c200528020c2113200442003703002011420037030020024200370300200542003703c001200541a8026a41bed8c80041081081022002200b290000370300200520052900a8023703c001200541a8026a41dbdac800410e1081022004200b290000370300201120052900a8023703002005201341b0096a41b009200c1b3602a802200541c0016a4120200541a8026a410410b201200541a8026a200610ae070240024020052802a802450d002011200541a8026a41106a2903003703002002200b2903003703002004200541a8026a41186a290300370300200541c0016a41206a200541a8026a41206a2802003602002014200541cc016a290200370300200541e0006a41106a200541d4016a290200370300200541e0006a41186a200541dc016a290200370300200520052903a8023703c001200520052902c401370360200541c0016a200610aa07417f20052802c001220441016a220220022004491b220441ffffff3f712004470d0620044105742204417f4c0d062004102c220e450d07200541e0006a41086a290300210d200541e0006a41106a290300211720052903602118200e41186a200541e0006a41186a290300370000200e41106a2017370000200e41086a200d370000200e2018370000200541a8026a200610ae072004410576210b024020052802a8020d004101210c2006102e0c020b200541c0016a4104722104412021134101210c02400340200541c0016a41206a200541a8026a41206a280200360200200541c0016a41186a2214200541a8026a41186a290300370300200541c0016a41106a2215200541a8026a41106a290300370300200541c0016a41086a2216200541a8026a41086a290300370300200520052903a8023703c001200541a0016a41086a2202200441086a290000370300200541a0016a41106a220f200441106a290000370300200541a0016a41186a2210200441186a290000370300200520042900003703a001201420102903003703002015200f29030037030020162002290300370300200520052903a0013703c0010240200c200b470d00200541a8026a200610aa07200b417f20052802a802220241016a220f200f2002491b6a2202200b490d09200b410174220f2002200f20024b1b22024104200241044b1b220241ffffff3f71200246210f2002410574210202400240200b0d00200541003602a8020c010b200541013602b0022005200e3602a8022005200b4105743602ac020b20054180016a2002200f200541a8026a107d20052802880121022005280280014101460d02200528028401210e2002410576210b0b200e20136a220220052903c001370000200241186a2014290300370000200241106a2015290300370000200241086a2016290300370000200541a8026a200610ae07201341206a2113200c41016a210c20052802a8020d000b2006102e0c020b20020d070c060b2006102e4101210e4100210c4100210b0b200541d8016a4200370300200541d0016a4200370300200541c0016a41086a22044200370300200542003703c001200541a8026a41bed8c80041081081022004200541a8026a41086a2202290000370300200520052900a8023703c001200541a8026a41e9d8c8004104108102201141086a2002290000370000201120052900a802370000200c4105744104722204417f4c0d042004102c2202450d05200541003602b002200520043602ac02200520023602a802200c200541a8026a10760240200c450d00200c4105742102200e21040340200541a8026a200441201074200441206a2104200241606a22020d000b0b200541c0016a412020052802a802220420052802b00210b201024020052802ac02450d002004102e0b0240200b41ffffff3f71450d00200e102e0b2012102e4108102c2204450d0520042007360204200420013602004108102c2202450d0520022009360204200220033602002002102e2004102e4108102c2204450d0520042007360204200420013602004108102c2202450d0520022009360204200220033602002002102e2004102e4108102c220e450d05200e2007360204200e20013602004108102c2206450d052006200936020420062003360200024002402000450d00200541a8026a200e10af070240024020052802a802450d00200541c0016a41106a200541a8026a41106a290300370300200541c0016a41086a200541a8026a41086a290300370300200541c0016a41186a200541a8026a41186a290300370300200541c0016a41206a200541a8026a41206a280200360200200541e0006a41086a200541cc016a290200370300200541e0006a41106a200541d4016a290200370300200541e0006a41186a200541dc016a290200370300200520052903a8023703c001200520052902c401370360200541c0016a200e10aa07417f20052802c001220441016a220220022004491b220441ffffff3f712004470d0820044105742204417f4c0d082004102c220f450d09200541e0006a41086a290300210d200541e0006a41106a290300211720052903602118200f41186a200541e0006a41186a290300370000200f41106a2017370000200f41086a200d370000200f2018370000200541a8026a200e10af072004410576211202400240024020052802a8020d00410121040c010b200541c0016a41047221024120210c41022113410121040340200541c0016a41206a200541a8026a41206a280200360200200541c0016a41186a2214200541a8026a41186a290300370300200541c0016a41106a2215200541a8026a41106a290300370300200541c0016a41086a2216200541a8026a41086a290300370300200520052903a8023703c001200541a0016a41086a220b200241086a290000370300200541a0016a41106a2210200241106a290000370300200541a0016a41186a2211200241186a290000370300200520022900003703a00120142011290300370300201520102903003703002016200b290300370300200520052903a0013703c001024020042012470d00200541a8026a200e10aa072004417f20052802a802220b41016a22102010200b491b6a220b2004490d0c2013200b2013200b4b1b220b4104200b41044b1b220b41ffffff3f71200b462110200b410574210b0240024020040d00200541003602a8020c010b200541013602b0022005200c3602ac022005200f3602a8020b20054180016a200b2010200541a8026a107d200528028801210b2005280280014101460d03200528028401210f200b41057621120b200f200c6a220b20052903c001370000200b41186a2014290300370000200b41106a2015290300370000200b41086a2016290300370000200541a8026a200e10af07200c41206a210c201341026a2113200441016a210420052802a8020d000b0b200e102e200520043602c801200520123602c4012005200f3602c0010c020b200b0d090c080b41002112200541003602c801200542013703c001200e102e4101210f0b200541c0026a22044200370300200541b8026a220a4200370300200541a8026a41086a4200370300200542003703a802200541a8026a41b2fdc6004112108102200541e0006a41e9d8c80041041081022004200541e0006a41086a290000370300200a2005290060370300200541a8026a200541c0016a10c1050240201241ffffff3f71450d00200f102e0b200541a8026a200610af070240024020052802a802450d00200541c0016a41106a200541a8026a41106a290300370300200541c0016a41086a200541a8026a41086a290300370300200541c0016a41186a200541a8026a41186a290300370300200541c0016a41206a200541a8026a41206a280200360200200541e0006a41086a200541cc016a290200370300200541e0006a41106a200541d4016a290200370300200541e0006a41186a200541dc016a290200370300200520052903a8023703c001200520052902c401370360200541c0016a200610aa07417f20052802c001220441016a220220022004491b220441ffffff3f712004470d0820044105742204417f4c0d082004102c220e450d09200541e0006a41086a290300210d200541e0006a41106a290300211720052903602118200e41186a200541e0006a41186a290300370000200e41106a2017370000200e41086a200d370000200e2018370000200541a8026a200610af072004410576211102400240024020052802a8020d00410121040c010b200541c0016a41047221024120210c41022113410121040340200541c0016a41206a200541a8026a41206a280200360200200541c0016a41186a2214200541a8026a41186a290300370300200541c0016a41106a2215200541a8026a41106a290300370300200541c0016a41086a2216200541a8026a41086a290300370300200520052903a8023703c001200541a0016a41086a220b200241086a290000370300200541a0016a41106a220f200241106a290000370300200541a0016a41186a2210200241186a290000370300200520022900003703a001201420102903003703002015200f2903003703002016200b290300370300200520052903a0013703c001024020042011470d00200541a8026a200610aa072004417f20052802a802220b41016a220f200f200b491b6a220b2004490d0c2013200b2013200b4b1b220b4104200b41044b1b220b41ffffff3f71200b46210f200b410574210b0240024020040d00200541003602a8020c010b200541013602b0022005200c3602ac022005200e3602a8020b20054180016a200b200f200541a8026a107d200528028801210b2005280280014101460d03200528028401210e200b41057621110b200e200c6a220b20052903c001370000200b41186a2014290300370000200b41106a2015290300370000200b41086a2016290300370000200541a8026a200610af07200c41206a210c201341026a2113200441016a210420052802a8020d000b0b2006102e200520043602c801200520113602c4012005200e3602c0010c020b200b0d090c080b41002111200541003602c801200542013703c0012006102e4101210e0b200541c0026a4200370300200541b8026a4200370300200541a8026a41086a4200370300200542003703a802200541a8026a41b2fdc6004112108102200541e0006a41b4d3c1004108108102200a41086a200541e0006a41086a290000370000200a2005290060370000200541a8026a200541c0016a10c105201141ffffff3f71450d01200e102e0c010b2006102e200e102e0b200541d0026a24000f0b200541a0016a41186a200b41186a2216290000370300200541a0016a41106a200b41106a2211290000370300200541a0016a41086a200b41086a22122900003703002005200b2900003703a0012012290000210d20112900002117200b2900002118200541c0016a41186a22112016290000370300200541c0016a41106a22162017370300200541c0016a41086a2212200d370300200520183703c001200541e0006a41186a2011290300370300200541e0006a41106a2016290300370300200541e0006a41086a2012290300370300200520052903c001370360200541f0016a200541e0006a41201074200b41206a210b0c000b0b41bcb4c40041c9004198b5c400105d000b41bcb4c40041c9004188b5c400105d000b1038000b1036000b930501047f230041a0036b22012400200141106a4200370300200141186a4200370300200141206a4200370300200141286a4200370300200120012903c801370308200142c0b2cd3b37039803200142c0b2cd3b37039003200142c0b2cd3b370388034100210241012103034020014188036a2104024002400240200241ff01710e03010002010b20014190036a21040c010b20014198036a21040b200442c0b2cd3b370300024020034103460d00200341e99fc0006a2104200341016a210320042d000022024103470d010b0b20014188026a420037030020014180026a4201370300200141f8016a22034200370300200141f0016a22044201370300200141c8016a41186a4200370300200141c8016a41f8006a4200370300200141c8016a41f0006a4201370300200141c8016a41e8006a4200370300200141c8016a41e0006a420137030020014198026a420037030020014190026a200129039003370300200141d0026a4200370300200141c8026a200129038803370300200142003703d00120014280e497d0123703c80120012001290398033703d801200141f8026a200141286a290300370300200141f0026a200141086a41186a290300370300200141e8026a200141186a290300370300200141e0026a200141106a290300370300200141d8026a20012903083703002004420137030020034280b0def7d32b3703002001410036028003200141086a200141c8016a41c00110e9081a200141086a41f8006a428090cad2c60e370300200141086a41f0006a4201370300200141086a41e8006a4280c0a8ca9a3a370300200141086a41e0006a4201370300200141c8016a200141086a41b80110e9081a2001428180808080d0a5cc00370380032000200141c8016a107f200141a0036a24000bc88d0109017f027e047f047e057f017e117f037e287f230041d01a6b22012400200141d0176a10df0420012903d81721024200210320014190046a22044200370300200141f8036a41106a22054200370300200141f8036a41086a22064200370300200142003703f803200141d0176a4199fdc60041081081022006200141d0176a41086a2207290000370300200120012900d0173703f803200141d0176a41fc8ac500411010810220042007290000370300200520012900d017370300200141203602dc142001200141f8036a3602d814200141f0066a200141f8036a412010ed022002428094ebdc038242808c8d9e027e2208428094ebdc038021092008428094ebdc0382210a2002428094ebdc0380210b4100210c024002400240024020012802f006220d0d004100210e0c010b20012802f406210f2001200141f0066a41086a280200360294152001200d36029015200141c0006a20014190156a10ab010240024002402001280240450d000c010b20012802442210200128029415411c6e2204200420104b1bad421c7e2202422088a70d042002a72204417f4c0d040240024020040d004104210e0c010b2004102c220e450d040b2004411c6ead21110240024002400240024020100d000c010b200141d0176a41c4006a2106410021120340200141386a20014190156a10ab0120012802380d04200128023c221320012802941541e0006e2204200420134b1bad42e0007e2202422088a70d092002a72204417f4c0d090240024020040d00410821140c010b2004102c2214450d090b200441e0006e21150240024020130d00410021130c010b41002116410021054100210702400340200141d0176a20014190156a10e004200141c8006a41386a2204200141d0176a41386a290300370300200141c8006a41306a2217200141d0176a41306a290300370300200141c8006a41286a2218200141d0176a41286a290300370300200141c8006a41206a2219200141d0176a41206a290300370300200141c8006a41186a221a200141d0176a41186a290300370300200141c8006a41106a221b200141d0176a41106a290300370300200141c8006a41086a221c200141d0176a41086a290300370300200141a00f6a41086a221d200641086a290200370300200141a00f6a41106a221e200641106a290200370300200141a00f6a41186a221f200641186a280200360200200120012903d017370348200120062902003703a00f2001280290182220450d0120014198126a41386a2221200429030037030020014198126a41306a2222201729030037030020014198126a41286a2217201829030037030020014198126a41206a2218201929030037030020014198126a41186a2219201a29030037030020014198126a41106a221a201b29030037030020014198126a41086a221b201c290300370300200141e00c6a41086a221c201d290300370300200141e00c6a41106a221d201e290300370300200141e00c6a41186a221e201f2802003602002001200129034837039812200120012903a00f3703e00c024020072015470d002016200741016a2204201620044b1b22044104200441044b1bad42e0007e2202422088a74541037421042002a7211f0240024020070d00200141003602d0170c010b200141083602d817200120053602d417200120143602d0170b200141e8096a201f2004200141d0176a107d20012802f0092104024020012802e8094101470d0020040d0d0c0e0b20012802ec092114200441e0006e21150b201420056a2204200129039812370300200441106a201a290300370300200441086a201b2903003703002022290300210220212903002108201729030021232018290300212420192903002125200441c0006a2020360200200441186a2025370300200441206a2024370300200441286a2023370300200441386a2008370300200441306a2002370300200441c4006a20012903e00c370200200441cc006a201c290300370200200441d4006a201d290300370200200441dc006a201e280200360200201641026a2116200541e0006a21052013200741016a2207460d020c000b0b02402007450d00201441d4006a210403400240200441706a2802002206450d00200641306c450d002004416c6a280200102e0b0240200428020041ffffff3f71450d002004417c6a280200102e0b200441e0006a2104200541a07f6a22050d000b0b2015450d05201541e0006c450d050c040b2014450d04200141306a20014190156a10ab010240024020012802300d00200128023422262001280294154102762204200420264b1b22274102742204417f4c0d0b0240024020270d00410421280c010b2004102c2228450d0b0b0240024020260d00410021260c010b4100210541002107410021040240034020012802941522174104490d012001280290152218280000211620012017417c6a360294152001201841046a360290152016418094ebdc034b0d01024020042027470d002007200441016a2217200720174b1b22174104201741044b1b221741ffffffff03712017464102742118201741027421170240024020040d00200141003602d0170c010b200141043602d817200120053602d417200120283602d0170b200141c8006a20172018200141d0176a107d20012802502117024020012802484101470d002017450d100c0f0b200128024c2128201741027621270b202820056a2016360200200541046a2105200741026a21072026200441016a2204460d020c000b0b202741ffffffff0371450d012028102e0c010b2028450d00200128029415220441034b0d010240202741ffffffff0371450d002028102e0b02402013450d002014201341e0006c6a21062014210403400240200441c4006a2802002205450d00200541306c450d00200441c0006a280200102e0b200441e0006a21050240200441d4006a28020041ffffff3f71450d00200441d0006a280200102e0b2005210420062005470d000b0b2015450d06201541e0006c0d050c060b02402013450d002014201341e0006c6a21062014210403400240200441c4006a2802002205450d00200541306c450d00200441c0006a280200102e0b200441e0006a21050240200441d4006a28020041ffffff3f71450d00200441d0006a280200102e0b2005210420062005470d000b0b2015450d05201541e0006c0d040c050b2001280290152205280000212920012004417c6a360294152001200541046a3602901502402011422088a722042011a7470d00200441016a22052004490d0a20044101742207200520052007491b22054104200541044b1bad421c7e2202422088a74541027421052002a721070240024020040d00200141003602d0170c010b200141043602d8172001200e3602d01720012004411c6c3602d4170b200141c8006a20072005200141d0176a107d2001280250210520012802484101460d03200128024c210e2011428080808070832005411c6ead8421110b200e2004411c6c6a2204201536020420042014360200200441186a2029360200200441146a2026360200200441106a20273602002004410c6a2028360200200441086a201336020020114280808080107c21112026212a2027212b2028212c2013212d2015212e201241016a22122010470d000b0b200e0d040c030b2005450d060c050b2014102e0b02402011422088a72204450d00200e2004411c6c6a2116200e21070340024020072802082204450d00200441e0006c2105200728020041d4006a210403400240200441706a2802002206450d00200641306c450d002004416c6a280200102e0b0240200428020041ffffff3f71450d002004417c6a280200102e0b200441e0006a2104200541a07f6a22050d000b0b0240200741046a2802002204450d00200441e0006c450d002007280200102e0b2007411c6a21040240200741106a28020041ffffffff0371450d00200728020c102e0b2004210720042016470d000b0b02402011a72204450d002004411c6c450d00200e102e0b202e2115202d2113202c2128202b2127202a21260b4100210e20014100360250200142013703482001410a36029c122001200141d8146a360298122001200141c8006a3602a00f200141e4176a4101360200200142013702d417200141909dc5003602d017200120014198126a3602e017200141a00f6a419cebc000200141d0176a103d1a2001280248200128025010ef02200128024c450d002001280248102e0b200f450d00200d102e0b200e4104200e1b2114024020114200200e1b2208422088a72207450d00200b42808c8d9e027e2009200a4280cab5ee0156ad7c7c210242002103410021164100210c0240034002400240200c450d0020142104200c210603400240200320025a0d00200141206a200420166a220e2802002014200c411c6c6a2204280208200428020c200441146a2802002004280218109203200129032821230c030b2004200420166a2205290200370200200441186a200541186a280200360200200441106a200541106a290200370200200441086a200541086a2902003702002004411c6a2104200641016a22062007490d000c040b0b200c210403400240200320025a0d00200141106a2014200c411c6c6a220e280200200e280208200e28020c200e41146a280200200e280218109203200129031821230c020b200441016a22042007490d000b4100210c0c030b02402014200c411c6c6a22172802082204450d00200441e0006c2105200e28020041d4006a210403400240200441706a2802002206450d00200641306c450d002004416c6a280200102e0b0240200428020041ffffff3f71450d002004417c6a280200102e0b200441e0006a2104200541a07f6a22050d000b0b0240200e41046a2802002204450d00200441e0006c450d00200e280200102e0b200c41016a210c0240201741106a28020041ffffffff0371450d00201728020c102e0b200320237c21032016411c6a2116200c2106200c2007490d000b0b0240200c0d004100210c0c010b20142006200c6b411c6c6a20142006411c6c6a200720066b411c6c10ea081a0b200141e8176a22044200370300200141d0176a41106a22054200370300200141d0176a41086a22064200370300200142003703d017200141c8006a4199fdc60041081081022006200141c8006a41086a2216290000370300200120012900483703d017200141c8006a41fc8ac500411010810220042016290000370300200520012900483703002007200c6b2204411c6c41046a2205417f4c0d010240024020050d00410121060c010b2005102c2206450d010b200141003602502001200536024c200120063602482004200141c8006a107620142004200141c8006a10a001200141d0176a412020012802482205200128025010b2010240200128024c450d002005102e0b02402004450d0020142004411c6c6a2116201421070340024020072802082204450d00200441e0006c2105200728020041d4006a210403400240200441706a2802002206450d00200641306c450d002004416c6a280200102e0b0240200428020041ffffff3f71450d002004417c6a280200102e0b200441e0006a2104200541a07f6a22050d000b0b0240200741046a2802002204450d00200441e0006c450d002007280200102e0b2007411c6a21040240200741106a28020041ffffffff0371450d00200728020c102e0b2004210720042016470d000b0b02402008a72204450d002004411c6c450d002014102e0b20014198126a10e1044100210520012802981221164100210602400240024002400240024020012802a012220c450d00200c41c4006c2107200c410274417c6a41027641016a2114410021062016210402400340024020042d00004101460d00200441046a28020020004f0d020b200441c4006a2104200641016a2106200741bc7f6a22070d000b201421060b200c2006490d010b200141003602a012200c20066b210e2016200641c4006c220c6a210402400340200c2005460d01201620056a2107200541c4006a2214210520072d00004102470d000b201620146a21040b2016200641c4006c6a21070240034020072004460d0120042d00002105200441c4006a210420054102470d000b0b02400240200e0d004100210e0c010b02402006450d0020162016200641c4006c6a200e41c4006c10ea081a0b2001200e3602a0120b200128029c122106200141e8176a22054200370300200141e0176a22044200370300200141d0176a41086a22074200370300200142003703d017200141c8006a4190dac800410a1081022007200141c8006a41086a220c290000370300200120012900483703d017200141c8006a41d5dac80041061081022005200c29000037030020042001290048370300200e41c4006c41046a2205417f4c0d060240024020050d00410121070c010b2005102c2207450d060b200141003602502001200536024c20012007360248200e200141c8006a10762016200e200141c8006a109f01200141d0176a412020012802482205200128025010b2010240200128024c450d002005102e0b02402006450d00200641c4006c450d002016102e0b42002102200141d0176a41186a22074200370300200141d0176a41106a221642003703004108212a200141d0176a41086a22064200370300200142003703d017200141c8006a4190dac800410a1081022006200141c8006a41086a2205290000370300200120012900483703d017200141c8006a41d097c900410c108102200441086a200529000037000020042001290048370000200141003a0048200141d0176a4120200141c8006a410110b201200141c8006a10e204200141f8036a41186a220c200141c8006a41186a2214290300370300200141f8036a41106a220e200141c8006a41106a2217290300370300200141f8036a41086a22182005290300370300200120012903483703f8034124102c2204450d05200420012903f80337010020044114360220200441186a200c290300370100200441106a200e290300370100200441086a201829030037010020014281808080103702d417200120043602d017200141d0176a10e304200720142903003703002016201729030037030020062005290300370300200120012903483703d017200141d0176a10e404108403200141d0176a10df0420012903d8172108200141c8006a200010a704200141d0176a200128024822042001280250220510c5042008428094ebdc0382428090bcfd027e2223428094ebdc038021242023428094ebdc038221232008428094ebdc03802108024020012802d0172206450d002004200510ff0120012902d41721022006212a0b0240200128024c450d002004102e0b202a2002422088a7220441f8026c22056a21062002a7212b024020040d00202a21040c030b200541887d6a2119200141d0176a41046a2110200141c8006a41046a2121200141a00f6a41046a210d41002107200141c0036a41306a2116200141c0036a41286a210c200141c0036a41206a2114200141c0036a41186a210e200141c0036a41106a2117200141c0036a41086a2118202a210402400340200141f8036a200441bc0210e9081a200441bc026a28020021052016200441f0026a290300370300200c200441e8026a2903003703002014200441e0026a290300370300200e200441d8026a2903003703002017200441d0026a2903003703002018200441c8026a2903003703002001200441c0026a2903003703c00320054103460d03200d200141f8036a41bc0210e9082122200141c8006a200141a00f6a41c00210e9081a20014190156a202141bc0210e9081a200141d8146a41306a221b2016290300370300200141d8146a41286a221c200c290300370300200141d8146a41206a221d2014290300370300200141d8146a41186a221e200e290300370300200141d8146a41106a221f2017290300370300200141d8146a41086a22202018290300370300200120012903c0033703d814024002402005410247221a0d00200141e00c6a4194b4c00041c00210e9081a4100211b200141a80c6a41306a4100290388b740370300200141a80c6a41286a4100290380b740370300200141a80c6a41206a41002903f8b640370300200141a80c6a41186a41002903f0b640370300200141a80c6a41106a41002903e8b640370300200141a80c6a41086a41002903e0b640370300200141002903d8b6403703a80c0c010b201020014190156a41bc0210e9081a20014198126a200141d0176a41c00210e9081a200141e0116a41306a220f201b290300370300200141e0116a41286a221b201c290300370300200141e0116a41206a221c201d290300370300200141e0116a41186a221d201e290300370300200141e0116a41106a221e201f290300370300200141e0116a41086a221f2020290300370300200120012903d8143703e011200141e00c6a20014198126a41c00210e9081a200141a80c6a41306a200f290300370300200141a80c6a41286a201b290300370300200141a80c6a41206a201c290300370300200141a80c6a41186a201d290300370300200141a80c6a41106a201e290300370300200141a80c6a41086a201f290300370300200120012903e0113703a80c2007211b0b201a0d01200741016a2107201941887d6a2119200441f8026a22042006470d000b200621040c030b200141f0066a200141e00c6a41c00210e9081a200141b8066a41306a2216200141a80c6a41306a290300370300200141b8066a41286a220c200141a80c6a41286a290300370300200141b8066a41206a2214200141a80c6a41206a290300370300200141b8066a41186a220e200141a80c6a41186a290300370300200141b8066a41106a2217200141a80c6a41106a290300370300200141b8066a41086a2218200141a80c6a41086a290300370300200120012903a80c3703b806200141e8096a200141f0066a41c00210e9081a200141b0096a41306a221a2016290300370300200141b0096a41286a2216200c290300370300200141b0096a41206a220c2014290300370300200141b0096a41186a2214200e290300370300200141b0096a41106a220e2017290300370300200141b0096a41086a22172018290300370300200120012903b8063703b009418003102c2220450d052020201b360200202041046a200141e8096a41c00210e9081a202020053602c402202020012903b0093703c802202041d0026a2017290300370300202041d8026a200e290300370300202041e0026a2014290300370300202041e8026a200c290300370300202041f0026a2016290300370300202041f8026a201a29030037030020062105024002402019450d00200441f8026a2104200741016a2107200141a00f6a41046a210d200141a80c6a41306a2116200141a80c6a41286a210c200141a80c6a41206a2114200141a80c6a41186a210e200141a80c6a41106a2117200141a80c6a41086a211802400340200141f0066a200441bc0210e9081a200441bc026a28020021052016200441f0026a290300370300200c200441e8026a2903003703002014200441e0026a290300370300200e200441d8026a2903003703002017200441d0026a2903003703002018200441c8026a2903003703002001200441c0026a2903003703a80c20054103460d01200d200141f0066a41bc0210e9081a200141c8006a200141a00f6a41c00210e9081a20014190156a202141bc0210e9081a200141d8146a41306a221a2016290300370300200141d8146a41286a221b200c290300370300200141d8146a41206a221c2014290300370300200141d8146a41186a221d200e290300370300200141d8146a41106a221e2017290300370300200141d8146a41086a221f2018290300370300200120012903a80c3703d81402400240200541024722190d00200141e00c6a4194b4c00041c00210e9081a4100211a200141e0116a41306a4100290388b740370300200141e0116a41286a4100290380b740370300200141e0116a41206a41002903f8b640370300200141e0116a41186a41002903f0b640370300200141e0116a41106a41002903e8b640370300200141e0116a41086a41002903e0b640370300200141002903d8b6403703e0110c010b201020014190156a41bc0210e9081a20014198126a200141d0176a41c00210e9081a200141f8036a41306a220f201a290300370300200141f8036a41286a221a201b290300370300200141f8036a41206a221b201c290300370300200141f8036a41186a221c201d290300370300200141f8036a41106a221d201e290300370300200141f8036a41086a221e201f290300370300200120012903d8143703f803200141e00c6a20014198126a41c00210e9081a200141e0116a41306a200f290300370300200141e0116a41286a201a290300370300200141e0116a41206a201b290300370300200141e0116a41186a201c290300370300200141e0116a41106a201d290300370300200141e0116a41086a201e290300370300200120012903f8033703e0112007211a0b20190d03200741016a2107200441f8026a22042006470d000b200621050c010b200441f8026a21050b4101212f4101210d0c040b200141e8096a200141e00c6a41c00210e9081a200141b0096a41306a222c200141e0116a41306a221b290300370300200141b0096a41286a222d200141e0116a41286a221c290300370300200141b0096a41206a222e200141e0116a41206a221d290300370300200141b0096a41186a2212200141e0116a41186a221e290300370300200141b0096a41106a2230200141e0116a41106a221f290300370300200141b0096a41086a2231200141e0116a41086a220f290300370300200120012903e0113703b009200441f8026a2104200741016a21074101212f4101210d0340200141d0176a200141e8096a41c00210e9081a200141c8006a41306a220c202c290300370300200141c8006a41286a2214202d290300370300200141c8006a41206a220e202e290300370300200141c8006a41186a22172012290300370300200141c8006a41106a22182030290300370300200141c8006a41086a22192031290300370300200120012903b009370348024002400240200d202f470d00202f41016a2216202f490d0a202f41017422322016203220164b1b22164104201641044b1bad4280037e2202422088a74541037421162002a7213202400240202f0d0020014100360298120c010b200141083602a01220012020360298122001202f4180036c36029c120b200141a00f6a2032201620014198126a107d20012802a80f211620012802a00f4101460d0120012802a40f212020164180036e212f0b2020200d4180036c6a2216201a360200201641046a200141d0176a41c00210e9081a201641c4026a2005360200201641c8026a2001290348370300201641d0026a2019290300370300201641d8026a2018290300370300201641e0026a2017290300370300201641e8026a200e290300370300201641f0026a2014290300370300201641f8026a200c290300370300200d41016a210d20042006470d01200621050c060b2016450d080c070b024002400340200141f8036a200441bc0210e9081a200441bc026a2802002105200141c0036a41306a2216200441f0026a290300370300200141c0036a41286a220c200441e8026a290300370300200141c0036a41206a2214200441e0026a290300370300200141c0036a41186a220e200441d8026a290300370300200141c0036a41106a2217200441d0026a290300370300200141c0036a41086a2218200441c8026a2903003703002001200441c0026a2903003703c00320054103460d012022200141f8036a41bc0210e9081a200141c8006a200141a00f6a41c00210e9081a20014190156a202141bc0210e9081a200141d8146a41306a22192016290300370300200141d8146a41286a221a200c290300370300200141d8146a41206a220c2014290300370300200141d8146a41186a2214200e290300370300200141d8146a41106a220e2017290300370300200141d8146a41086a22172018290300370300200120012903c0033703d81402400240200541024722160d00200141e00c6a4194b4c00041c00210e9081a4100211a200141a80c6a41306a4100290388b740370300200141a80c6a41286a4100290380b740370300200141a80c6a41206a41002903f8b640370300200141a80c6a41186a41002903f0b640370300200141a80c6a41106a41002903e8b640370300200141a80c6a41086a41002903e0b640370300200141002903d8b6403703a80c0c010b201020014190156a41bc0210e9081a20014198126a200141d0176a41c00210e9081a201b2019290300370300201c201a290300370300201d200c290300370300201e2014290300370300201f200e290300370300200f2017290300370300200120012903d8143703e011200141e00c6a20014198126a41c00210e9081a200141a80c6a41306a201b290300370300200141a80c6a41286a201c290300370300200141a80c6a41206a201d290300370300200141a80c6a41186a201e290300370300200141a80c6a41106a201f290300370300200141a80c6a41086a200f290300370300200120012903e0113703a80c2007211a0b20160d02200741016a2107200441f8026a22042006470d000b200621050c060b200441f8026a21050c050b200141f0066a200141e00c6a41c00210e9081a200141b8066a41306a2216200141a80c6a41306a290300370300200141b8066a41286a220c200141a80c6a41286a290300370300200141b8066a41206a2214200141a80c6a41206a290300370300200141b8066a41186a220e200141a80c6a41186a290300370300200141b8066a41106a2217200141a80c6a41106a290300370300200141b8066a41086a2218200141a80c6a41086a290300370300200120012903a80c3703b806200141e8096a200141f0066a41c00210e9081a202c2016290300370300202d200c290300370300202e20142903003703002012200e2903003703002030201729030037030020312018290300370300200120012903b8063703b009200441f8026a2104200741016a21070c000b0b2006200c41b4b3c000104d000b200441f8026a21040b024020062004460d000340200441f8026a21050240200441bc026a2802004102460d000240200441b0026a2802002207450d00200441b4026a280200450d002007102e0b2004108b020b2005210420062005470d000b0b4100212f410821200240202b450d00202b41f8026c450d00202a102e0b4100210d0c010b024020062005460d000340200541f8026a21040240200541bc026a2802004102460d000240200541b0026a2802002207450d00200541b4026a280200450d002007102e0b2005108b020b2004210520062004470d000b0b0240202b450d00202b41f8026c450d00202a102e0b0240024002400240200d41144b0d00200d41014d0d042020200d417f6a22064180036c6a2114410021070340200d20062204417f6a2206490d030240200d20066b22174102490d00202020044180036c6a220441f8026a2d0000202020064180036c6a220541f8026a2d0000220c4f0d00200141d0176a200541f80210e9081a2001200541fc026a28000036004b2001200541f9026a2800003602482005200441800310e9081a024020174103490d002007417f6a210e41002105201421040340200441f8056a2d0000200c4f0d01200e2005460d05200420044180036a221641800310e9081a2016210420072005417f6a2205470d000b201621040b2004200141d0176a41f80210e908220441f8026a200c3a0000200441f9026a2001280248360000200441fc026a200128004b3600000b201441807d6a21142007417f6a210720060d000c050b0b200d410176ad4280037e2202422088a70d052002a7222c417f4c0d05202c102c220f450d04202041807d6a212a202041f8796a212b410421194100211041002117200d211d0340201d21144100211d4101210c02402014417f6a2204450d000240024002400240024002400240202020044180036c6a41f8026a2d000020144180036c220e20206a41f87c6a2d00002205490d002014417e6a2116202b200e6a21064100211d410021040340024020162004470d002014210c0c090b200441016a2104200541ff0171210720062d00002105200641807d6a2106200720054f0d000b200441016a210c2004417f7320146a21040c010b202b200e6a210602400340024020044101470d00410021040c020b2004417f6a2104200541ff0171210720062d00002105200641807d6a210620072005490d000b0b20142004490d012014200d4b0d02201420046b220c4101762207450d00202020044180036c6a2105202a200e6a21060340200141d0176a200541800310e9081a2005200641800310ea084180036a21052006200141d0176a41800310e90841807d6a21062007417f6a22070d000b0b024020040d002004211d0c060b0240200c41094d0d002004211d0c060b2014200d4b0d03200420146b2106202020044180036c6a210e034020142004417f6a221d490d0502402014201d6b220c4102490d00202020044180036c6a220441f8026a2d00002020201d4180036c6a220541f8026a2d000022164f0d00200141d0176a200541f80210e9081a2001200541fc026a28000036004b2001200541f9026a2800003602482005200441800310e9081a0240200c4103490d0041012105200e21040340200441f8056a2d000020164f0d01200620056a4101460d06200420044180036a220741800310e9081a200721042006200541016a22056a0d000b200721040b2004200141d0176a41f80210e908220441f8026a20163a0000200441f9026a2001280248360000200441fc026a200128004b3600000b201d450d06200e41807d6a210e2006417f6a2106201d2104200c410a4f0d060c000b0b2004201441e4d1cc001057000b2014200d41e4d1cc00104d000b2005200c41d4d1cc00103c000b20142004417f6a221d490d002014200d41f4d1cc00104d000b201d201441f4d1cc001057000b024020172010470d00201041016a22042010490d07201041017422052004200520044b1b22044104200441044b1b220441ffffffff01712004464102742105200441037421040240024020100d00200141003602d0170c010b200141043602d817200120193602d017200120104103743602d4170b200141c8006a20042005200141d0176a107d20012802502104024020012802484101470d002004450d080c070b200128024c2119200441037621100b201920174103746a2204200c3602042004201d360200201741016a221e21170240201e4102490d00024002400240034002400240024002402019201e2217417f6a221e4103746a2204280200450d00201741037420196a221641746a2802002207200428020422054d0d00201741024d0d0820192017417d6a22044103746a2802042206200520076a4d0d01201741034d0d08201641646a280200200620076a4b0d080c010b20174103490d012004280204210520192017417d6a22044103746a28020421060b20062005490d010b2017417e6a21040b02402017200441016a221f4d0d00201720044d0d02201920044103746a221a2802042221201a2802006a22042019201f4103746a221b280200221c490d032004200d4b0d04201a41046a21222020201c4180036c6a220e201b28020422184180036c22056a210720044180036c210c024002402004201c6b221620186b22042018490d00200f200e200510e908220420056a21060240024020184101480d00201620184a0d010b200e2105200421040c020b2020200c6a211420042104200e2105034020072004200741f8026a2d0000200441f8026a2d00004922161b210c200420044180036a20161b21042005200c41800310e9084180036a210520074180036a200720161b220720144f0d02200620044b0d000c020b0b200f200720044180036c220510e908221620056a21060240024020184101480d00200441014e0d010b20072105201621040c010b202a200c6a210c200721050340200c200541807d6a2207200641807d6a2214200641786a2d0000200541786a2d00004922041b41800310e908210c2006201420041b21060240200e2007200520041b2205490d00201621040c020b200c41807d6a210c2016210420162006490d000b0b20052004200620046b22062006418003706b10e9081a2022202120186a360200201a201c360200201b201b41086a2017201f417f736a41037410ea081a41012117201e41014d0d050c010b0b201f20174184d2cc00103c000b200420174194d2cc00103c000b201c200441a4d2cc001057000b2004200d41a4d2cc00104d000b201d450d030c000b0b410120056b201741d4d1cc00103c000b2006200d41c4d1cc001056000b0240201041ffffffff0171450d002019102e0b202c418003702104202c418003490d00202c2004460d00200f102e0b2020200d4180036c6a210c02400240200d0d0042002123202021050c010b2008428090bcfd027e202420234280cab5ee0156ad7c7c2124200141c8006a41b0026a2133200141d0176a41c0026a2105200141c8006a41c0026a2106200041016a2134200141ed176a2135200141f8036a4105722136200141c8006a41ca026a2137200141c8006a41cd026a2138200141a00f6a410572212d200141f8036a4103722139200141d0176a41ca026a213a200141d0176a41cd026a213b200141c8006a41046a213c42c0f4a4eb00210220014190156a41306a211c20014190156a41286a211d20014190156a41206a211e20014190156a41186a211f20014190156a41106a212120014190156a41086a2122200141890a6a223d41076a213e410021174200212320202104024003402004280200213f20014198126a200441046a41c00210e9081a200441c4026a2802002107201c200441f8026a290300370300201d200441f0026a290300370300201e200441e8026a290300370300201f200441e0026a2903003703002021200441d8026a2903003703002022200441d0026a2903003703002001200441c8026a29030037039015024020074102470d0020044180036a21050c030b200141c8006a20014198126a41c00210e9081a200141d0176a203c41bc0210e9081a2005200129039015370300200541086a220d2022290300370300200541106a220f2021290300370300200541186a2210201f290300370300200541206a222a201e290300370300200541286a222b201d290300370300200541306a222c201c2903003703002001200736028c1a200141a00f6a200141d0176a10970420012903a00f2108024002400240024020012d00981a0e03000102000b4102210e02400240024020012d00991a0e03000102000b4100210e0c010b200141f8036a41186a203a41186a290000370300200141f8036a41106a203a41106a290000370300200141f8036a41086a203a41086a2900003703002001203a29000022253703f8032025a721404101210e0b200141a00f6a41026a203941026a2d00003a0000200120392f00003b01a00f201b4180807c7120012f01960472211b20012d00fa03211820012801fe032119200128018204211a200128018604212e200128018a042112200128018e042130200128019204213141002132410121160c020b41022118024002400240024020012d009c1a0e03000103000b410021180c010b200141f8036a41026a203b41026a2d00003a00002001203b2f00003b01f803204141807e7120012d00bc1a7221414101211820012802b81a214220012802b41a214320012802b01a214420012802ac1a214520012802a81a21460b20012802a41a211a20012802a01a21190b200141a00f6a41026a200141f8036a41026a2d00003a0000200120012f01f8033b01a00f41012132410021162046212e204521122044213020432131204121472042211b0c010b4102213241022118024002400240024020012d009c1a0e03000103000b410021180c010b200141f8036a41026a203b41026a2d00003a00002001203b2f00003b01f803202941807e7120012d00bc1a7221294101211820012802b81a212620012802b41a212720012802b01a212820012802ac1a211320012802a81a21150b20012802a41a211a20012802a01a21190b200141a00f6a41026a200141f8036a41026a2d00003a0000200120012f01f8033b01a00f410021162015212e201321122028213020272131202921472026211b0b4110102c2207450d03200741f8f7c60036020c200741013602082007428180808010370200200141e8096a41026a2248200141a00f6a41026a2d00003a0000200120012f01a00f3b01e809024002402016200e41ff01714571450d00200721160c010b4110102c2216450d0420164190f8c60036020c20164101360208201642818080801037020020072007280200417f6a224936020020490d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22492049280200417f6a224936020020490d002007102e0b200141f8036a41026a224920482d000022073a0000200120012f01e80922483b01f803202d20483b0000202d41026a20073a0000200120183a00a40f200120403b01a20f2001200e3a00a10f200120323a00a00f200120163602c80f200120473602c40f2001201b3602c00f200120313602bc0f200120303602b80f200120123602b40f2001202e3602b00f2001201a3602ac0f200120193602a80f200141e8096a200141a00f6a10c10220012d00e8092116200128028c1a210720012802801a2118200141e00c6a200141d0176a41bc0210e9081a200141f0066a41306a2219202c290300370300200141f0066a41286a221a202b290300370300200141f0066a41206a222e202a290300370300200141f0066a41186a22122010290300370300200141f0066a41106a2230200f290300370300200141f0066a41086a2231200d290300370300200120052903003703f00620074102460d01427f427f427f200220087c220820082002541b2202427f200242c0b2cd3b7c220820082002541b20161b22024280c2d72f7c220820082002541b200220181b220242c0b2cd3b7c220820082002541b200220074101461b2102200141c8006a200141e00c6a41bc0210e9081a200641306a22162019290300370300200620012903f006370300200641086a22182031290300370300200641106a22192030290300370300200641186a22302012290300370300200641206a2212202e290300370300200641286a222e201a290300370300200120073602840302400240024020012d00b80341c000490d002017450d0020022024560d010b200141a00f6a200141c8006a10a804024002400240024020012d0090030e03000102000b4102214a02400240024020012d0091030e03000102000b4100214a0c010b200141f8036a41186a203741186a290000370300200141f8036a41106a203741106a290000370300200141f8036a41086a203741086a2900003703002001203729000022083703f8032008a7214b4101214a0b200141d0176a41026a203941026a2d00003a0000200120392f00003b01d017204c4180807c7120012f01960472214c20012d00fa03211820012801fe032119200128018204211a200128018604210f200128018a042110200128018e04212a200128019204212b4100212c410121160c020b41022118024002400240024020012d0094030e03000103000b410021180c010b2049203841026a2d00003a0000200120382f00003b01f803204141807e7120012d00b4037221414101211820012802b003214220012802ac03214320012802a803214420012802a403214520012802a00321460b200128029c03211a20012802980321190b200141d0176a41026a20492d00003a0000200120012f01f8033b01d0174101212c410021162046210f204521102044212a2043212b2041214d2042214c0c010b4102212c41022118024002400240024020012d0094030e03000103000b410021180c010b2049203841026a2d00003a0000200120382f00003b01f803202941807e7120012d00b4037221294101211820012802b003212620012802ac03212720012802a803212820012802a403211320012802a00321150b200128029c03211a20012802980321190b200141d0176a41026a200141f8036a41026a2d00003a0000200120012f01f8033b01d017410021162015210f201321102028212a2027212b2029214d2026214c0b200141d8146a41026a222e200141d0176a41026a2d00003a0000200120012f01d0173b01d8144110102c2207450d05200741f8f7c60036020c200741013602082007428180808010370200200741086a210d024002402016204a41ff01714571450d00200d2112200721160c010b4110102c2216450d0620164190f8c60036020c20164101360208201642818080801037020020072007280200417f6a2230360200201641086a211220300d002007280208200728020c2802001103000240200728020c280204450d00200d280200102e0b200741046a220d200d280200417f6a220d360200200d0d002007102e0b024002402016280208200141a00f6a201628020c28020c1101000d0020162016280200417f6a2207360200200141023a00880a200141003a00800a200142003703f009200142013703e809024020070d002012280200201628020c2802001103000240201628020c280204450d002016280208102e0b201641046a22072007280200417f6a220736020020070d002016102e0b200141a00f6a10dc020c010b200141d0176a200141a00f6a41b00210e9081a203620012f01d8143b0000203641026a202e2d00003a0000200120183a00fc032001204b3b01fa032001204a3a00f9032001202c3a00f803200120163602a0042001204d36029c042001204c360298042001202b360294042001202a360290042001201036028c042001200f360288042001201a360284042001201936028004200141e8096a200141d0176a200141f8036a10dd020b0240024020012802f80222160d00410021070c010b2001280280032214417f4c0d070240024020140d00410121070c010b2014102c2207450d070b20072016201410e9081a0b024002402001280284034101460d004101211820012802f802450d01200141d0176a203310a90420012802d017221620012802d81710ff0120012802d417450d012016102e0c010b200128028803211602400240200128028c0322184102490d00200141013602840320012018417f6a36028c030c010b20014100360284030b201620006a2116024020012802f802450d00200141d0176a201610a70420012802d817211920012802d0172118200141f8036a41046a41003a0000200141003602f803200141086a20182019200141f8036a4105410010ca04024002402001280208450d002001200128020c2219410520194105491b3602a40f2001200141f8036a3602a00f2001200141a00f6a10ab0120012802042119200128020045211a0c010b4100211a0b024020012802d417450d002018102e0b200141d0176a203310a90420012802d017221820012802d817201620194100201a1b10e50420012802d417450d002018102e0b200141d0176a200141c8006a41f80210e9081a2016200141d0176a10aa04410021180b2001203d2900003703d0172001203e2800003600d7170240024020012903e8094201510d00410621160c010b20012d00880a211920012903f0092108200120012800d7173600a70f200120012903d0173703a00f4106211620084202510d00200120012800a70f3600d717200120012903a00f3703d017201921160b200120012903d0173703f803200120012800d7173600ff03203520012903f803370000203541076a20012800ff03360000200120163a00ec17200120143602e817200120143602e417200120073602e0172001203f3602dc17200120003602d817200141023602d417200141013a00d017200141d0176a10fe0102402018450d00024020012802f8022207450d0020012802fc02450d002007102e0b200141c8006a108b020b200221230c010b200141a00f6a200141c8006a41bc0210e9081a200141e8096a41306a221a2016290300370300200141e8096a41286a2216202e290300370300200141e8096a41206a222e2012290300370300200141e8096a41186a22122030290300370300200141e8096a41106a22302019290300370300200141e8096a41086a22192018290300370300200120062903003703e80920074103460d00200141d0176a200141a00f6a41bc0210e9081a200520012903e809370300200d2019290300370300200f203029030037030020102012290300370300202a202e290300370300202b2016290300370300202c201a2903003703002001200736028c1a2034200141d0176a10aa040b2017417f6a211720044180036a2204200c470d000b200c21050c010b20044180036a21050b0240200c2005460d000340200522044180036a21050240200441b8026a2802002206450d00200441bc026a280200450d002006102e0b200441086a108b02200c2005470d000b0b0240202f450d00202f4180036c450d002020102e0b200141c8006a41186a22044200370300200141c8006a41106a22054200370300200141c8006a41086a2206420037030020014200370348200141d0176a41d9fcc60041061081022006200141d0176a41086a2207290000370300200120012900d017370348200141d0176a41a0f4cb00410a10810220042007290000370300200520012900d017370300200141d0176a200141c8006a4120108d0220012d00d0172107200141f8036a41186a2216200141e9176a290000370300200141f8036a41106a220c200141e1176a290000370300200141f8036a41086a2214200141d9176a290000370300200120012900d1173703f8030240024020074101460d00200442003703002005420037030020064200370300200142003703480c010b200420162903003703002005200c29030037030020062014290300370300200120012903f8033703480b200141d0176a41186a22054200370300200141d0176a41106a22074200370300200141d0176a41086a22064200370300200142003703d01720014198126a41f4c2cc004118108102200620014198126a41086a220429000037030020012001290098123703d01720014198126a41e4c3cc00410e108102200520042900003703002007200129009812370300200141a00f6a200141d0176a4120108d03024002400240024002400240024020012802a00f22040d002005200141c8006a41186a2903003703002007200141c8006a41106a2903003703002006200141c8006a41086a290300370300200120012903483703d0174100210641012104200141d0176a21160c010b20012802a40f2106200141a00f6a41086a280200220541d0004b0d03200141d0176a41186a200141c8006a41186a290300370300200141d0176a41106a200141c8006a41106a290300370300200141d0176a41086a200141c8006a41086a290300370300200120012903483703d017024020052006472214450d00200141d0176a21162006210c0c020b200141d0176a21162006210c20140d010b200641016a22052006490d062006410174220c2005200c20054b1b22054104200541044b1b220541ffffff3f71200546210c200541057421050240024020060d0020014100360298120c010b200141a0126a410136020020012004360298122001200641057436029c120b200141a00f6a2005200c20014198126a107d200141a80f6a280200210520012802a00f4101460d0120012802a40f21042005410576210c200621050b200420054105746a22062016290000370000200641186a201641186a290000370000200641106a201641106a290000370000200641086a201641086a290000370000200541016a21050c020b2005450d040c030b200141d0176a41186a220c200141c8006a41186a290300370300200141d0176a41106a2214200141c8006a41106a290300370300200141d0176a41086a220e200141c8006a41086a290300370300200120012903483703d01720052000417f6a41d1007022164d0d01200420164105746a221620012903d017370000201641186a200c290300370000201641106a2014290300370000201641086a200e2903003700002006210c0b200141a00f6a41086a20053602002001200c3602a40f200120043602a00f0240024020040d00200141d0176a41186a4200370300200141e0176a4200370300200141d0176a41086a22044200370300200142003703d01720014198126a41f4c2cc004118108102200420014198126a41086a220529000037030020012001290098123703d01720014198126a41e4c3cc00410e108102200741086a20052900003700002007200129009812370000200141d0176a412010ff010c010b200141d0176a41186a4200370300200141e0176a4200370300200141d0176a41086a22054200370300200142003703d01720014198126a41f4c2cc004118108102200520014198126a41086a220629000037030020012001290098123703d01720014198126a41e4c3cc00410e108102200741086a20062900003700002007200129009812370000200141d0176a200141a00f6a10e6042004450d00200c41ffffff3f71450d002004102e0b200141d01a6a2400427f2003427f20234290f796027c220220022023541b7c220220022003541b0f0b2016200541b4cccc00103c000b1036000b1038000bf50101047f230041306b22022400200241b6d1cc004106108102200241106a41bcd1cc004107108102024002404114102c2203450d002002421437022420022003360220200241206a20014114107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000bdf0b04027f027e037f077e230041a0026b22032400200341e0006a200110e202200341c8006a20032802602204200328026810f802200341d8006a2903002105200329035021062003280248210702402003280264450d002004102e0b0240024002402007450d00200341f8006a22044200370300200341e0006a41106a22074200370300200341e0006a41086a2208420037030020034200370360200341e0016a41b6d1cc0041061081022008200341e0016a41086a2209290000370300200320032900e001370360200341e0016a41e9f9c000410510810220042009290000370300200720032900e001370300200341306a200341e0006a412010f80220032903384200200328023022081b220a20067d220b200a56200341306a41106a290300420020081b220c20057d200a200654ad7d220a200c56200a200c511b0d01200341e0016a200110ad03200341e0006a20032802e001220820032802e80110ae03200341e0006a41206a290300210d2004290300210e2007290300210f20034188016a2802002104200329036821102003290360210c024020032802e401450d002008102e0b02400240200c4201520d00200341e0016a200210af03024020032903e0014201520d00200341f8006a22014200370300200341f0006a22074200370300200341e0006a41086a420037030020034200370360200341e0006a41d9fcc600410610810220034190026a4180f4cb004106108102200120034190026a41086a2900003703002007200329009002370300200341086a200341e0006a4120108e0220034190026a200210c802200341e0006a200328029002220120032802980210c9020240200328029402450d002001102e0b2000410610b0030c050b200341106a20022006200510fd012003200341186a290300370368200320032903103703602003200341e0006a3602e001200341e0016a10ce022010200f84500d01200341e0006a200210b103200328026022092003280268108f02210802402003280264450d002009102e0b024020080d00200341e0006a41186a2208200d3703002003200e3703702003201037036020032004360280012003200f3703682002200341e0006a10b2032008200241186a290000370300200341e0006a41106a200241106a290000370300200341e0006a41086a200241086a29000037030020032002290000370360200341e0016a200341e0006a10b3030c020b200341e8006a411736020020034194a4c700360264200341013a006220034183323b016041eef9c0004137200341e0006a41a8fac00041b8fac000103e000b200341206a20022006200510fd012003200341286a290300370368200320032903203703602003200341e0006a3602e001200341e0016a10ce020b200341f8006a4200370300200341e0006a41106a4200370300200341e0006a41086a2204420037030020034200370360200341e0016a41b6d1cc0041061081022004200341e0016a41086a2208290000370300200320032900e001370360200341e0016a41e9f9c0004105108102200741086a2008290000370000200720032900e0013700002003200a3703e8012003200b3703e001200341e0006a4120200341e0016a411010b201200341e0006a200110e20220032802602207200328026810ff0102402003280264450d002007102e0b200341e0006a200110ad0320032802602207200328026810ff0102402003280264450d002007102e0b200341e0006a200110ab0320032802602207200328026810ff0102402003280264450d002007102e0b200341e0006a41106a2005370300200341e0006a41086a2006370300200341e0006a41186a200229000037030020034180016a200241086a29000037030020034188016a200241106a29000037030020034190016a200241186a29000037030020034198016a2001290000370300200341a0016a200141086a290000370300200341a8016a200141106a2800003602002003410f3a0060200341e0006a10fe01200041063a00000c020b2000410210b0030c010b2000410410b0030b200341a0026a24000bf50101047f230041306b22022400200241b6d1cc004106108102200241106a41bcdbc8004107108102024002404114102c2203450d002002421437022420022003360220200241206a20014114107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000bd80202027f017e230041d0006b220324002003200236020420032001360200200341086a2001200210ed0202400240200328020822010d00200042003703000c010b200328020c2102024002400240200341106a28020022044110490d0020044170714110460d002004417c714120470d010b20034100360220200342013703182003410a36022c200320033602282003200341186a360234200341cc006a41013602002003420137023c200341909dc5003602382003200341286a360248200341346a419cebc000200341386a103d1a2003280218200328022010ef020240200328021c450d002003280218102e0b420021050c010b200041186a200129001037030020002001290000370308200041286a2001280020360200200041206a200141186a290000370300200041106a200141086a290000370300420121050b200020053703002002450d002001102e0b200341d0006a24000b940304027f017e027f047e230041e0006b220224002002200110b1032002280200210120022002280208220336021420022001360210200241186a2001200310ed0202400240200228021822030d00420021040c010b200228021c2105024002400240200241206a28020022064110490d0020064170714110460d002006417c714120470d010b20024100360230200242013703282002410a36023c2002200241106a3602382002200241286a360244200241dc006a41013602002002420137024c200241909dc5003602482002200241386a360258200241c4006a419cebc000200241c8006a103d1a2002280228200228023010ef020240200228022c450d002002280228102e0b420021040c010b200341186a2900002107200341086a2900002108200329001021092003290000210a20032800202106420121040b2005450d002003102e0b200041206a2007370300200041186a2009370300200041106a20083703002000200a370308200041286a20063602002000200437030002402002280204450d002001102e0b200241e0006a24000b860201047f230041c0006b2202240041c4f6c000210341132104410521050240024002400240024002400240200141ff01710e0700010203040506000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a41d0c1cc001044000b41c0f5c000210341182104410021050c040b41e0f5c000210341102104410121050c030b41f8f5c000210341102104410221050c020b4190f6c0002103410c2104410321050c010b41acf6c000210341102104410421050b20004183303b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000bac0201037f230041e0006b22022400200241bcdbc8004107108102200241106a41bcdbc8004107108102024002404120102c2203450d002002422037023420022003360230200241306a200141201074200241c0006a200228023022012002280238220310d803200241dc006a200120036a360200200220013602582002200241d0006a3602542002200241c0006a360250200241206a200241d0006a107c02402002280234450d002001102e0b2002280228220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b20004100360208200020013602042000200436020020002002411010742000200241106a411010742000200228022022012003107402402002280224450d002001102e0b200241e0006a24000f0b1036000b1038000be40104017f027e017f027e230041306b22022400200141186a2903002103200141086a29030021042001280220210520012903102106200129030021072002200010b103200228020821002002280200210120024100360218200242013703102002200437032820022007370320200241106a200241206a411010742002200337032820022006370320200241106a200241206a4110107420022005360220200241106a200241206a410410742001200020022802102205200228021810b20102402002280214450d002005102e0b02402002280204450d002001102e0b200241306a24000bc00807027f017e017f027e017f027e067f230041c0016b22022400200241c0006a200110af03024002400240024020022903404201520d00200241d0006a22032903002104200241d8006a22052903002106200241c0006a41206a2903002107200241e8006a2802002108200229034821092005420037030020034200370300200241c0006a41086a420037030020024200370340200241c0006a41d9fcc6004106108102200241306a4180f4cb0041061081022005200241306a41086a29000037030020032002290030370300200241286a200241c0006a4120108e02200241086a200742004100200228022c410020022802281b220320086b2205200520034b1bad220a420010e808200241186a200a42002006420010e80802402002290310420052200241186a41086a290300220720022903087c2206200754720d0020092002290318220756200420065620042006511b0d020b200242f6cacda397cddbb320370330200241c0006a200110d4062002280248210b2002410036024802400240200b0d004100210c2002280240210d0c010b2002280240220d41106a210e4100210f4100210c410021080240034002400240200c450d00200d20084105746a2103200d2008200f6a4105746a21050340200341106a22102900002002290330510d0220052003290300370300200541186a200341186a290300370300200541106a2010290300370300200541086a200341086a290300370300200541206a2105200341206a2103200b200841016a22084b0d000c040b0b200e20084105746a2103034020032900002002290330510d01200341206a2103200b200841016a22084b0d000b4100210c0c030b200f417f6a210f200c41016a210c200b200841016a22084b0d000b0b0240200c0d004100210c0c010b200d2008200c6b4105746a200d20084105746a200b20086b41057410ea081a0b2002200b200c6b22033602482001200d200310d5060240200228024441ffffff3f71450d00200d102e0b200241c0006a200110b10320022802402203200228024810ff0102402002280244450d002003102e0b200241c0006a41086a41013a0000200241c9006a2001290000370000200241d1006a200141086a290000370000200241e1006a200141186a290000370000200241103a0040200241d9006a200141106a290000370000200241c0006a10fe010c020b2000410110d6060c020b42f6cacda397cddbb32020014200200920077d220a200a200956200420067d2009200754ad7d220620045620062004511b22031b22044200200620031b22064106108506200241f8006a2006370300200241f0006a2004370300200241c0006a41086a41003a0000200241c9006a2001290000370000200241d1006a200141086a290000370000200241e1006a200141186a290000370000200241103a0040200241d9006a200141106a290000370000200241c0006a10fe010b200041063a00000b200241c0016a24000b13002000410a360204200041c4ffc0003602000b340020004190fec60036020420004100360200200041146a4102360200200041106a4188b2c100360200200041086a42053702000b130020004106360204200041d8b6c1003602000b4201027f230041106b2202240002404104102c22030d001036000b20004204370204200020033602002002412036020c20002002410c6a41041074200241106a24000b4201027f230041106b2202240002404102102c22030d001036000b2000420237020420002003360200200241203b010e20002002410e6a41021074200241106a24000b4a01027f230041106b2202240002404110102c22030d001036000b20004210370204200020033602002002420037030820024280cdad9d013703002000200241101074200241106a24000b4b01027f230041106b2202240002404110102c22030d001036000b2000421037020420002003360200200242003703082002428088caade9053703002000200241101074200241106a24000be22505027f017e027f017e037f230041b0046b22022400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e1c0102030405060708090a0b0c0d0e0f101112131415161718191a1b00010b200241086a200141386a10ca0120024180026a41286a200141306a29030037030020024180026a41206a200141286a29030037030020024180026a41186a200141206a29030037030020024180026a41106a200141186a29030037030020024180026a41086a200141106a2903003703002002200141086a29030037038002200141f8016a280200210320024180026a41306a200241086a41c00110e9081a20014180026a2903002104200241086a20024180026a41f00110e9081a200041086a200241086a41f00110e9081a20004180026a2004370300200041f8016a20033602002000411b3602000c1b0b20024180026a200141086a10cb0120004100360200200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c1a0b20024180026a200141046a10cc0120004101360200200041246a200241a0026a2802003602002000411c6a20024198026a290300370200200041146a20024190026a2903003702002000410c6a20024188026a29030037020020002002290380023702040c190b20024180026a200141086a10cd01200041086a20024180026a41a00210e9081a200041023602000c180b20004103360200200041086a200141086a2903003703000c170b41042103200141046a210502400240024002400240024002400240024020012d0004417f6a0e050102030405000b41e2a0cc00412841e89bc4001039000b200141086a2802002105410121030c040b41022103200241086a41026a200541036a2d00003a000020024180026a41086a200141146a29020037030020024190026a2001411c6a29020037030020024198026a200141246a2d00003a0000200220052f00013b010820022001410c6a29020037038002200141086a2802002105200141286a28020021010c040b200141086a2802002105410321030c020b2002410a6a200541036a2d00003a000020024180026a41086a200141146a29020037030020024190026a2001411c6a29020037030020024198026a200141246a2d00003a0000200220052f00013b010820022001410c6a2902003703800220012d00254100472106200141086a2802002105200141286a28020021010c030b200141086a2802002105410521030b0b0b200020033a0004200020022f01083b0005200020063a0025200020022f01fc013b0126200041086a20053602002000410c6a200229038002370200200041286a2001360200200041076a2002410a6a2d00003a0000200041146a20024180026a41086a2903003702002000411c6a20024190026a290300370200200041246a20024198026a2d00003a0000200041043602000c160b20024180026a200141086a10ce01200041086a20024180026a41e00010e9081a200041053602000c150b20024180026a200141046a10cf01200041063602002000410c6a20024188026a28020036020020002002290380023702040c140b20024180026a200141086a10d001200041086a20024180026a41d80010e9081a200041073602000c130b10d101000b02400240200128020422050d00410021030c010b20024180026a41186a200141286a29000037030020024180026a41106a200141206a29000037030020024188026a200141186a29000037030020024180026a41286a200141386a29000037030020024180026a41306a200141c0006a29000037030020024180026a41386a200141c8006a29000037030020024180026a41c8006a200141d8006a29000037030020024180026a41d0006a200141e0006a29000037030020024180026a41d8006a200141e8006a2900003703002002200141106a290000370380022002200141306a2900003703a0022002200141d0006a2900003703c00220024180026a41f8006a20014188016a29000037030020024180026a41f0006a20014180016a29000037030020024180026a41e8006a200141f8006a29000037030020024180026a4198016a200141a8016a29000037030020024180026a4190016a200141a0016a29000037030020024180026a4188016a20014198016a29000037030020024180026a41b8016a200141c8016a29000037030020024180026a41b0016a200141c0016a29000037030020024180026a41a8016a200141b8016a2900003703002002200141f0006a2900003703e002200220014190016a290000370380032002200141b0016a2900003703a0032001410c6a2802002201417f4c0d130240024020010d00410121030c010b2001102c2203450d150b20032005200110e9081a200241086a20024180026a41c00110e9081a0b200020033602042000410c6a2001360200200041086a2001360200200041106a200241086a41c00110e9081a200041093602000c110b20024180026a200141086a10d201200041086a20024180026a41980210e9081a2000410a3602000c100b20024180026a200141046a10d301200041046a20024180026a41e80010e9081a2000410b3602000c0f0b10d401000b20024180026a200141086a10d5012000410d360200200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c0d0b20024180026a200141086a10d6012000410e360200200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c0c0b20024180026a200141086a10d6012000410f360200200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c0b0b20024180026a200141086a10d70120004110360200200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c0a0b200141046a2103410721050240024002400240024002400240024020012d0004417f6a0e0701020304050607000b41e2a0cc00412841a4c3cb001039000b20024198026a200341196a29000037030020024190026a200341116a29000037030020024188026a200341096a2900003703002002200329000137038002410121050c050b20024198026a200341196a29000037030020024190026a200341116a29000037030020024188026a200341096a2900003703002002200329000137038002410221050c040b20024180026a41186a200341196a29000037030020024180026a41106a200341116a29000037030020024180026a41086a200341096a290000370300200241086a41086a200341296a290000370300200241086a41106a200341316a290000370300200241086a41186a200341396a29000037030020022003290001370380022002200341216a290000370308410321050c030b200241086a200141086a10c8012002418b026a200241086a41086a2802003600002002200229030837008302410421050c020b20024198026a200341196a29000037030020024190026a200341116a29000037030020024188026a200341096a2900003703002002200329000137038002410521050c010b20024198026a200341196a29000037030020024190026a200341116a29000037030020024188026a200341096a2900003703002002200329000137038002410621050b200020053a0004200020022903800237000520002002290308370025200020022f00fc013b00452000410d6a20024180026a41086a290300370000200041156a20024180026a41106a2903003700002000411d6a20024180026a41186a2903003700002000412d6a200241086a41086a290300370000200041356a200241086a41106a2903003700002000413d6a200241086a41186a290300370000200041c7006a200241fe016a2d00003a0000200041113602000c090b024002400240024002400240200141086a280200417f6a0e03010203000b41e2a0cc0041284184ccc2001039000b200141386a2903002104200141306a29030021074101210841012109024002400240024002402001410c6a2d00000e050104020300010b4104210920024180026a41046a200141206a2d00003a000020022001411c6a2800003602800220012f000d2001410f6a2d0000411074722106200141186a280200210a200141146a2802002103200141106a28020021050c030b20024188026a200141246a29000037030020024180026a41106a2001412c6a2d00003a000020022001411c6a2900003703800220012f000d2001410f6a2d0000411074722106200141186a280200210a200141146a2802002103200141106a2802002105410021090c020b200141186a2802002203417f4c0d0f200141106a28020021010240024020030d00410121050c010b2003102c2205450d110b20052001200310e9081a410221092003210a0c010b20024188026a200141246a29000037030020024180026a41106a2001412c6a2d00003a000020022001411c6a2900003703800220012f000d2001410f6a2d0000411074722106200141186a280200210a200141146a2802002103200141106a2802002105410321090b200241086a41106a20024180026a41106a2d00003a0000200241086a41086a20024180026a41086a290300370300200241046a41026a200241fc016a41026a2d00003a00002002200229038002370308200220022f00fc013b01040c030b2001410c6a28020022094108762106410221080c010b2001410c6a28020022094108762106410321080b0b200020022f01043b002d20004112360200200041386a2004370300200041306a2007370300200041186a200a360200200041146a2003360200200041106a2005360200200041086a20083602002000411c6a20022903083702002000410c6a2006410874200941ff017172360200200041246a200241086a41086a2903003702002000412c6a200241086a41106a2d00003a00002000412f6a200241066a2d00003a00000c080b20024180026a200141086a10d801200041086a20024180026a41f00010e9081a200041133602000c070b20024180026a200141086a10d901200041086a20024180026a41f80010e9081a200041143602000c060b024002400240024020012f0104417f6a0e03010200010b20024180026a200141086a10c90120022902840221042002280280022103410321010c020b20024180026a200141086a10c90120022902840221042002280280022103410121010c010b20012f0106210541b002102c2203450d0820024180026a200141086a28020010da01200320024180026a41b00210e9081a410221010b200020013b0104200041153602002000410c6a2004370200200041086a2003360200200041066a20053b01000c050b20024180026a200141086a10db01200041086a20024180026a41a80210e9081a200041163602000c040b20024180026a200141046a10dc01200041046a20024180026a41c80010e9081a200041173602000c030b20024180026a200141086a10dd01200041086a20024180026a41c80010e9081a200041183602000c020b20024180026a200141086a10de0120004119360200200041c0006a20024180026a41386a290300370300200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c010b20024180026a200141086a10df012000411a360200200041c0006a20024180026a41386a290300370300200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000b200241b0046a24000f0b1038000b1036000bec3703057f047e047f230041900c6b22022400024002400240024002400240024002400240024002400240024002400240024002400240024002400240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020020060e0a0102030405060708090a0b0b2000410b3a00000c130b41002104200241003a0080040240024002400340200128020022032802042205450d01200241e0036a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a0080042003210420034120470d000b200241b0016a41186a200241e0036a41186a290300220737030020024190016a41086a2203200241e0036a41086a29030037030020024190016a41106a2204200241e0036a41106a29030037030020024190016a41186a22052007370300200220022903e00337039001200241f0006a41186a2005290300370300200241f0006a41106a2004290300370300200241f0006a41086a20032903003703002002200229039001370370200128020022032802042204450d12200328020022052d0000210620032004417f6a3602042003200541016a3602004107210320060e020201120b0240200441ff0171450d00200241003a0080040b2000410b3a00000c140b200128020022032802042204450d10200328020022052d0000210620032004417f6a3602042003200541016a360200410021030240024002400240024020060e0705040001150203150b410221030c040b410321030c030b410521030c020b410621030c010b410121030b2001200128020441016a22043602040240200420012802084b0d00200241e0036a200110950120022802e0032104200241b0016a200241e0036a41047241ac0210e9081a2004411c460d00200241e0036a200241b0016a41ac0210e9081a41b002102c2205450d1220052004360200200541046a200241e0036a41ac0210e9081a200241d0006a41186a200241f0006a41186a2903002207370300200241d0006a41106a200241f0006a41106a2903002208370300200241d0006a41086a200241f0006a41086a290300220937030020012001280204417f6a36020420022002290370220a370350200041013a00002000200a370001200041096a2009370000200041116a2008370000200041196a2007370000200041246a2005360200200041216a20033a0000200041286a2002290230370200200041306a200241306a41086a290200370200200041386a200241306a41106a290200370200200041c0006a200241306a41186a2902003702000c130b2000410b3a00000c120b41002104200241003a0080040240024002400240024002400240024002400340200128020022032802042205450d01200241e0036a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a0080042003210420034120470d000b200241b0016a41186a200241e0036a41186a290300220737030020024190016a41086a2203200241e0036a41086a29030037030020024190016a41106a2204200241e0036a41106a29030037030020024190016a41186a22052007370300200220022903e00337039001200241f0006a41186a2005290300370300200241f0006a41106a2004290300370300200241f0006a41086a20032903003703002002200229039001370370200128020022032802042204450d07200328020022052d0000210620032004417f6a3602042003200541016a3602004100210320060e0706050102070304070b0240200441ff0171450d00200241003a0080040b2000410b3a00000c190b410221030c040b410321030c030b410521030c020b410621030c010b410121030b2001280200220128020422044104490d0120012802002205280000210620012004417c6a3602042001200541046a360200200241d0006a41086a200241f0006a41086a2903002207370300200241d0006a41106a200241f0006a41106a2903002208370300200241d0006a41186a200241f0006a41186a290300220937030020022002290370220a370350200041023a00002000200a370001200041096a2007370000200041116a2008370000200041196a2009370000200041246a2006360200200041216a20033a0000200041286a2002290230370200200041306a200241306a41086a290200370200200041386a200241306a41106a290200370200200041c0006a200241306a41186a2902003702000c130b2000410b3a00000c120b2000410b3a00000c110b41002104200241003a0080040240024002400240024002400240024002400340200128020022032802042205450d01200241e0036a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a0080042003210420034120470d000b200241b0016a41186a200241e0036a41186a290300220737030020024190016a41086a2203200241e0036a41086a29030037030020024190016a41106a2204200241e0036a41106a29030037030020024190016a41186a22052007370300200220022903e00337039001200241f0006a41186a2005290300370300200241f0006a41106a2004290300370300200241f0006a41086a20032903003703002002200229039001370370200128020022032802042204450d07200328020022052d0000210620032004417f6a3602042003200541016a3602004100210320060e0706050102070304070b0240200441ff0171450d00200241003a0080040b2000410b3a00000c180b410221030c040b410321030c030b410521030c020b410621030c010b410121030b2001280200220128020422044104490d0120012802002205280000210620012004417c6a3602042001200541046a360200200241d0006a41086a200241f0006a41086a2903002207370300200241d0006a41106a200241f0006a41106a2903002208370300200241d0006a41186a200241f0006a41186a290300220937030020022002290370220a370350200041033a00002000200a370001200041096a2007370000200041116a2008370000200041196a2009370000200041246a2006360200200041216a20033a0000200041286a2002290230370200200041306a200241306a41086a290200370200200041386a200241306a41106a290200370200200041c0006a200241306a41186a2902003702000c120b2000410b3a00000c110b2000410b3a00000c100b200041043a00000c0f0b200128020022032802042204450d0c200328020022052d0000210620032004417f6a3602042003200541016a3602004100210402400240024002400240024020060e0705000102120304120b410121040c040b410221040c030b410321040c020b410521040c010b410621040b024002402001280200220328020422054104490d0020032802002206280000210b20032005417c6a3602042003200641046a3602002001280200220128020422034102490d01200128020022052f0000210620012003417e6a3602042001200541026a360200200041046a200b360200200041026a20063b0100200020043a0001200041053a0000200041086a20022902e003370200200041106a200241e0036a41086a290200370200200041186a200241e0036a41106a290200370200200041206a200241e0036a41186a290200370200200041286a200241e0036a41206a290200370200200041306a200241e0036a41286a290200370200200041386a200241e0036a41306a290200370200200041c0006a200241e0036a41386a2902003702000c100b2000410b3a00000c0f0b2000410b3a00000c0e0b41002104200241003a008004024002400240024002400240024002400240024002400340200128020022032802042205450d01200241e0036a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a0080042003210420034120470d000b200241b0016a41186a200241e0036a41186a290300220737030020024190016a41086a2203200241e0036a41086a29030037030020024190016a41106a2204200241e0036a41106a29030037030020024190016a41186a22052007370300200220022903e00337039001200241f0006a41186a2005290300370300200241f0006a41106a2004290300370300200241f0006a41086a20032903003703002002200229039001370370200128020022032802042204450d07200328020022052d0000210620032004417f6a3602042003200541016a3602004100210420060e0706050102070304070b0240200441ff0171450d00200241003a0080040b2000410b3a00000c170b410221040c040b410321040c030b410521040c020b410621040c010b410121040b2001280200220328020422054102490d01200328020022062f0000210b20032005417e6a3602042003200641026a360200200241086a200110ad0120022802080d02200228020c21032002200110ad0120022802000d0320022802042101200241d0006a41186a200241f0006a41186a2903002207370300200241d0006a41106a200241f0006a41106a2903002208370300200241d0006a41086a200241f0006a41086a290300220937030020022002290370220a370350200041063a00002000200a370001200041096a2009370000200041116a2008370000200041196a2007370000200041286a2001360200200041246a2003360200200041226a200b3b0100200041216a20043a00002000412c6a2002290230370200200041346a200241306a41086a2902003702002000413c6a200241306a41106a290200370200200041c4006a200241306a41186a2802003602000c110b2000410b3a00000c100b2000410b3a00000c0f0b2000410b3a00000c0e0b2000410b3a00000c0d0b41002104200241003a008004024002400340200128020022032802042205450d01200241e0036a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a0080042003210420034120470d000b200241b0016a41186a200241e0036a41186a290300220737030020024190016a41086a2203200241e0036a41086a29030037030020024190016a41106a2204200241e0036a41106a29030037030020024190016a41186a22052007370300200220022903e00337039001200241f0006a41186a2005290300370300200241f0006a41106a2004290300370300200241f0006a41086a2003290300370300200220022903900137037041002104200241003a0080040340200128020022032802042205450d02200241e0036a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a0080042003210420034120470d000b200241b0016a41186a200241e0036a41186a2903002207370300200241306a41086a2201200241e0036a41086a290300370300200241306a41106a2203200241e0036a41106a290300370300200241306a41186a22042007370300200220022903e003370330200241d0006a41186a2205200241f0006a41186a290300370300200241d0006a41106a2206200241f0006a41106a290300370300200241d0006a41086a220b200241f0006a41086a29030037030020022002290370370350200041073a000020002002290350370001200041096a200b290300370000200041116a2006290300370000200041196a2005290300370000200041216a2002290330370000200041296a2001290300370000200041316a2003290300370000200041396a2004290300370000200041c1006a2002280010360000200041c4006a200241136a2800003600000c0e0b0240200441ff0171450d00200241003a0080040b2000410b3a00000c0d0b0240200441ff0171450d00200241003a0080040b2000410b3a00000c0c0b41002104200241003a008004024002400340200128020022032802042205450d01200241e0036a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a0080042003210420034120470d000b200241b0016a41186a200241e0036a41186a290300220737030020024190016a41086a2203200241e0036a41086a29030037030020024190016a41106a2204200241e0036a41106a29030037030020024190016a41186a22052007370300200220022903e00337039001200241f0006a41186a2005290300370300200241f0006a41106a2004290300370300200241f0006a41086a2003290300370300200220022903900137037041002104200241003a0080040340200128020022032802042205450d02200241e0036a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a0080042003210420034120470d000b200241b0016a41186a200241e0036a41186a2903002207370300200241306a41086a2201200241e0036a41086a290300370300200241306a41106a2203200241e0036a41106a290300370300200241306a41186a22042007370300200220022903e003370330200241d0006a41186a2205200241f0006a41186a290300370300200241d0006a41106a2206200241f0006a41106a290300370300200241d0006a41086a220b200241f0006a41086a29030037030020022002290370370350200041083a000020002002290350370001200041096a200b290300370000200041116a2006290300370000200041196a2005290300370000200041216a2002290330370000200041296a2001290300370000200041316a2003290300370000200041396a2004290300370000200041c1006a2002280010360000200041c4006a200241136a2800003600000c0d0b0240200441ff0171450d00200241003a0080040b2000410b3a00000c0c0b0240200441ff0171450d00200241003a0080040b2000410b3a00000c0b0b41002104200241003a008004024002400340200128020022032802042205450d01200241e0036a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a0080042003210420034120470d000b200241b0016a41186a200241e0036a41186a290300220737030020024190016a41086a2203200241e0036a41086a29030037030020024190016a41106a2204200241e0036a41106a29030037030020024190016a41186a22052007370300200220022903e00337039001200241f0006a41186a2005290300370300200241f0006a41106a2004290300370300200241f0006a41086a2003290300370300200220022903900137037041002104200241003a0080040340200128020022032802042205450d02200241e0036a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a0080042003210420034120470d000b200241b0016a41186a200241e0036a41186a2903002207370300200241306a41086a2201200241e0036a41086a290300370300200241306a41106a2203200241e0036a41106a290300370300200241306a41186a22042007370300200220022903e003370330200241d0006a41186a2205200241f0006a41186a290300370300200241d0006a41106a2206200241f0006a41106a290300370300200241d0006a41086a220b200241f0006a41086a29030037030020022002290370370350200041093a000020002002290350370001200041096a200b290300370000200041116a2006290300370000200041196a2005290300370000200041216a2002290330370000200041296a2001290300370000200041316a2003290300370000200041396a2004290300370000200041c1006a2002280010360000200041c4006a200241136a2800003600000c0c0b0240200441ff0171450d00200241003a0080040b2000410b3a00000c0b0b0240200441ff0171450d00200241003a0080040b2000410b3a00000c0a0b41002104200241003a00800402400340200128020022032802042205450d01200241e0036a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a0080042003210420034120470d000b200241b0016a41186a200241e0036a41186a290300220737030020024190016a41086a2203200241e0036a41086a29030037030020024190016a41106a2204200241e0036a41106a29030037030020024190016a41186a22052007370300200220022903e00337039001200241d0006a41186a2005290300370300200241d0006a41106a2004290300370300200241d0006a41086a2003290300370300200220022903900137035041002104200241003a0080040340200128020022032802042205450d03200241e0036a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a0080042003210420034120470d000b200241b0016a41186a200241e0036a41186a290300220737030020024190016a41086a2203200241e0036a41086a29030037030020024190016a41106a2204200241e0036a41106a29030037030020024190016a41186a22052007370300200220022903e00337039001200241f0006a41186a2005290300370300200241f0006a41106a2004290300370300200241f0006a41086a20032903003703002002200229039001370370200128020022032802042204450d05200328020022052d0000210620032004417f6a3602042003200541016a3602004107210320060e020403050b0240200441ff0171450d00200241003a0080040b2000410b3a00000c090b2000410b3a00000c080b0240200441ff0171450d00200241003a0080040b2000410b3a00000c070b200128020022032802042204450d01200328020022052d0000210620032004417f6a3602042003200541016a360200410021030240024002400240024020060e0705040001060203060b410221030c040b410321030c030b410521030c020b410621030c010b410121030b2001200128020441016a2204360204200420012802084b0d01200241e0036a200110950120022802e0032104200241b0016a200241e0036a41047241ac0210e9081a2004411c460d01200241e0036a200241b0016a41ac0210e9081a41b002102c2205450d0420052004360200200541046a200241e0036a41ac0210e9081a200241306a41086a2204200241d0006a41086a290300370300200241306a41106a2206200241d0006a41106a290300370300200241306a41186a220b200241d0006a41186a290300370300200241106a41086a220c200241f0006a41086a290300370300200241106a41106a220d200241f0006a41106a290300370300200241106a41186a220e200241f0006a41186a29030037030020012001280204417f6a36020420022002290350370330200220022903703703102000410a3a000020002002290330370001200041096a2004290300370000200041116a2006290300370000200041196a200b290300370000200041216a2002290310370000200041296a200c290300370000200041316a200d290300370000200041396a200e290300370000200041c4006a2005360200200041c1006a20033a00000c050b2000410b3a00000c040b2000410b3a00000c030b2000410b3a00000c020b2000410b3a00000c010b1036000b200241900c6a24000bad2a03067f047e027f230041e0066b22022400024002400240024002400240024002400240024002400240024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a36020020050e0a0102030405060708090b0a0b2000410b3a00000c100b200241d0036a200110930120022d00d0034101460d0a20024198016a200241e9036a29000037030020024190016a200241e1036a29000037030020024188016a200241d9036a290000370300200220022900d10337038001024020012802042203450d00200128020022042d0000210520012003417f6a22073602042001200441016a360200410721060240024020050e020100020b2007450d0120042d0001210520012003417e6a3602042001200441026a360200410021060240024002400240024020050e0705040001060203060b410221060c040b410321060c030b410521060c020b410621060c010b410121060b200241d0036a200110980120022802d0032101200241a0016a200241d0036a41047241ac0210e9081a024002402001411c460d00200241d0036a200241a0016a41ac0210e9081a41b002102c22030d010c130b2000410b3a00000c110b20032001360200200341046a200241d0036a41ac0210e9081a200241e0006a41186a20024180016a41186a2903002208370300200241e0006a41106a20024180016a41106a2903002209370300200241e0006a41086a20024180016a41086a290300220a3703002002200229038001220b370360200041013a00002000200b370001200041096a200a370000200041116a2009370000200041196a2008370000200041246a2003360200200041216a20063a0000200041286a2002290240370200200041306a200241c0006a41086a290200370200200041386a200241c0006a41106a290200370200200041c0006a200241c0006a41186a2902003702000c100b2000410b3a00000c0f0b200241d0036a200110930102400240024020022d00d0034101460d00200241b8016a200241e9036a290000370300200241b0016a200241e1036a290000370300200241a8016a200241d9036a290000370300200220022900d1033703a00120012802042203450d0d200128020022042d0000210620012003417f6a22073602042001200441016a36020041002105024002400240024020060e0706050001110203110b410221050c050b410321050c040b410521050c030b410621050c020b2000410b3a00000c100b410121050b024020074104490d002004280001210620012003417b6a3602042001200441056a36020020024180016a41086a200241a0016a41086a290300220837030020024180016a41106a200241a0016a41106a290300220937030020024180016a41186a200241a0016a41186a290300220a370300200220022903a001220b37038001200041023a00002000200b370001200041096a2008370000200041116a2009370000200041196a200a370000200041246a2006360200200041216a20053a0000200041286a2002290260370200200041306a200241e0006a41086a290200370200200041386a200241e0006a41106a290200370200200041c0006a200241e0006a41186a2902003702000c0f0b2000410b3a00000c0e0b200241d0036a200110930102400240024020022d00d0034101460d00200241b8016a200241e9036a290000370300200241b0016a200241e1036a290000370300200241a8016a200241d9036a290000370300200220022900d1033703a00120012802042203450d0d200128020022042d0000210620012003417f6a22073602042001200441016a36020041002105024002400240024020060e0706050001110203110b410221050c050b410321050c040b410521050c030b410621050c020b2000410b3a00000c0f0b410121050b024020074104490d002004280001210620012003417b6a3602042001200441056a36020020024180016a41086a200241a0016a41086a290300220837030020024180016a41106a200241a0016a41106a290300220937030020024180016a41186a200241a0016a41186a290300220a370300200220022903a001220b37038001200041033a00002000200b370001200041096a2008370000200041116a2009370000200041196a200a370000200041246a2006360200200041216a20053a0000200041286a2002290260370200200041306a200241e0006a41086a290200370200200041386a200241e0006a41106a290200370200200041c0006a200241e0006a41186a2902003702000c0e0b2000410b3a00000c0d0b200041043a00000c0c0b0240024002402006450d0020042d0001210620012003417e6a22073602042001200441026a3602004100210502400240024002400240024020060e0705000102060304060b410121050c040b410221050c030b410321050c020b410521050c010b410621050b20074104490d012004280002210720012003417a6a22063602042001200441066a36020020064102490d0220042f000621062001200341786a3602042001200441086a360200200041046a2007360200200041026a20063b0100200020053a0001200041053a0000200041086a20022902d003370200200041106a200241d0036a41086a290200370200200041186a200241d0036a41106a290200370200200041206a200241d0036a41186a290200370200200041286a200241d0036a41206a290200370200200041306a200241d0036a41286a290200370200200041386a200241d0036a41306a290200370200200041c0006a200241d0036a41386a2902003702000c0e0b2000410b3a00000c0d0b2000410b3a00000c0c0b2000410b3a00000c0b0b200241d0036a2001109301024002400240024002400240024020022d00d0034101460d00200241b8016a200241e9036a290000370300200241b0016a200241e1036a290000370300200241a8016a200241d9036a290000370300200220022900d1033703a00120012802042203450d03200128020022042d0000210520012003417f6a22063602042001200441016a36020041002107024002400240024020050e0706050001070203070b410221070c050b410321070c040b410521070c030b410621070c020b2000410b3a00000c100b410121070b20064102490d0120042f0001210520012003417d6a3602042001200441036a360200200241106a200110ab0120022802100d0220022802142103200241086a200110ab0120022802080d03200228020c210120024180016a41186a200241a0016a41186a290300220837030020024180016a41106a200241a0016a41106a290300220937030020024180016a41086a200241a0016a41086a290300220a370300200220022903a001220b37038001200041063a00002000200b370001200041096a200a370000200041116a2009370000200041196a2008370000200041286a2001360200200041246a2003360200200041226a20053b0100200041216a20073a00002000412c6a2002290260370200200041346a200241e0006a41086a2902003702002000413c6a200241e0006a41106a290200370200200041c4006a200241e0006a41186a2802003602000c0e0b2000410b3a00000c0d0b2000410b3a00000c0c0b2000410b3a00000c0b0b2000410b3a00000c0a0b200241d0036a2001109301024020022d00d0034101460d00200241f8006a200241e9036a290000370300200241f0006a200241e1036a290000370300200241e8006a200241d9036a290000370300200220022900d10337036041002104200241003a00f0032001280204417f6a21030240024003402003417f460d01200241d0036a20046a200128020022052d00003a0000200120033602042001200541016a3602002002200441016a22053a00f0032003417f6a21032005210420054120470d000b200241a0016a41086a2201200241d0036a41086a290300370300200241a0016a41106a2203200241d0036a41106a290300370300200241a0016a41186a2204200241d0036a41186a290300370300200220022903d0033703a001200541ff0171411f4d0d01200241206a41086a22052001290300370300200241206a41106a22012003290300370300200241206a41186a22032004290300370300200241c0006a41086a2204200241e0006a41086a290300370300200241c0006a41106a2206200241e0006a41106a290300370300200241c0006a41186a2207200241e0006a41186a290300370300200220022903a00137032020022002290360370340200041073a000020002002290340370001200041096a2004290300370000200041116a2006290300370000200041196a2007290300370000200041216a2002290320370000200041296a2005290300370000200041316a2001290300370000200041396a2003290300370000200041c1006a2002280019360000200041c4006a2002411c6a2800003600000c0c0b200441ff0171450d00200241003a00f0030b2000410b3a00000c0a0b2000410b3a00000c090b200241d0036a2001109301024020022d00d0034101460d00200241f8006a200241e9036a290000370300200241f0006a200241e1036a290000370300200241e8006a200241d9036a290000370300200220022900d10337036041002104200241003a00f0032001280204417f6a21030240024003402003417f460d01200241d0036a20046a200128020022052d00003a0000200120033602042001200541016a3602002002200441016a22053a00f0032003417f6a21032005210420054120470d000b200241a0016a41086a2201200241d0036a41086a290300370300200241a0016a41106a2203200241d0036a41106a290300370300200241a0016a41186a2204200241d0036a41186a290300370300200220022903d0033703a001200541ff0171411f4d0d01200241206a41086a22052001290300370300200241206a41106a22012003290300370300200241206a41186a22032004290300370300200241c0006a41086a2204200241e0006a41086a290300370300200241c0006a41106a2206200241e0006a41106a290300370300200241c0006a41186a2207200241e0006a41186a290300370300200220022903a00137032020022002290360370340200041083a000020002002290340370001200041096a2004290300370000200041116a2006290300370000200041196a2007290300370000200041216a2002290320370000200041296a2005290300370000200041316a2001290300370000200041396a2003290300370000200041c1006a2002280019360000200041c4006a2002411c6a2800003600000c0b0b200441ff0171450d00200241003a00f0030b2000410b3a00000c090b2000410b3a00000c080b200241d0036a2001109301024020022d00d0034101460d00200241f8006a200241e9036a290000370300200241f0006a200241e1036a290000370300200241e8006a200241d9036a290000370300200220022900d10337036041002104200241003a00f0032001280204417f6a21030240024003402003417f460d01200241d0036a20046a200128020022052d00003a0000200120033602042001200541016a3602002002200441016a22053a00f0032003417f6a21032005210420054120470d000b200241a0016a41086a2201200241d0036a41086a290300370300200241a0016a41106a2203200241d0036a41106a290300370300200241a0016a41186a2204200241d0036a41186a290300370300200220022903d0033703a001200541ff0171411f4d0d01200241206a41086a22052001290300370300200241206a41106a22012003290300370300200241206a41186a22032004290300370300200241c0006a41086a2204200241e0006a41086a290300370300200241c0006a41106a2206200241e0006a41106a290300370300200241c0006a41186a2207200241e0006a41186a290300370300200220022903a00137032020022002290360370340200041093a000020002002290340370001200041096a2004290300370000200041116a2006290300370000200041196a2007290300370000200041216a2002290320370000200041296a2005290300370000200041316a2001290300370000200041396a2003290300370000200041c1006a2002280019360000200041c4006a2002411c6a2800003600000c0a0b200441ff0171450d00200241003a00f0030b2000410b3a00000c080b2000410b3a00000c070b2000410b3a00000c060b200241d0036a200110930120022d00d0034101460d03200241e0006a41186a200241e9036a2203290000370300200241e0006a41106a200241e1036a2204290000370300200241e0006a41086a200241d9036a2205290000370300200220022900d103370360200241d0036a2001109301024002400240024020022d00d0034101460d0020024180016a41186a200329000037030020024180016a41106a200429000037030020024180016a41086a2005290000370300200220022900d1033703800120012802042203450d03200128020022042d0000210520012003417f6a22073602042001200441016a36020041072106024020050e020300040b2007450d0320042d0001210520012003417e6a3602042001200441026a36020041002106024002400240024020050e0706050001070203070b410221060c050b410321060c040b410521060c030b410621060c020b2000410b3a00000c080b410121060b200241d0036a200110980120022802d0032101200241a0016a200241d0036a41047241ac0210e9081a2001411c460d05200241d0036a200241a0016a41ac0210e9081a41b002102c2203450d0720032001360200200341046a200241d0036a41ac0210e9081a200241c0006a41086a2201200241e0006a41086a290300370300200241c0006a41106a2204200241e0006a41106a290300370300200241c0006a41186a2205200241e0006a41186a290300370300200241206a41086a220720024180016a41086a290300370300200241206a41106a220c20024180016a41106a290300370300200241206a41186a220d20024180016a41186a2903003703002002200229036037034020022002290380013703202000410a3a000020002002290340370001200041096a2001290300370000200041116a2004290300370000200041196a2005290300370000200041216a2002290320370000200041296a2007290300370000200041316a200c290300370000200041396a200d290300370000200041c4006a2003360200200041c1006a20063a00000c060b2000410b3a00000c050b2000410b3a00000c040b2000410b3a00000c030b2000410b3a00000c020b2000410b3a00000c010b2000410b3a00000b200241e0066a24000f0b1036000baf0101017f230041106b22042400200420003703082003200441086a410810740240024002400240200141ff01710e03000102030b200441003a00072003200441076a410110740c020b200441013a00072003200441076a410110740c010b200441023a00072003200441076a410110740b02400240200241ff01714101460d00200441003a00072003200441076a410110740c010b200441013a00072003200441076a410110740b200441106a24000b13002000410236020420004188c4c1003602000b3400200041a081ca0036020420004100360200200041146a4107360200200041106a41d0ccc100360200200041086a42073702000b2f01017f02404104102c22020d001036000b2000420437020420002002360200410020001076410141002000109c010bf70201047f230041e0006b22022400200241086a41a081ca004107108102200241186a41e4d3c100410810810202400240200141086a280200220341046a2204417f4c0d000240024020040d00410121050c010b2004102c2205450d020b200241003602402002200436023c20022005360238200241386a200141041074200128020421012003200241386a1076200241386a2001200310742002200228023822012002280240220410a301370348200241dc006a200120046a360200200220013602582002200241d0006a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220441206a2201417f4c0d000240024020010d00410121030c010b2001102c2203450d020b2000410036020820002001360204200020033602002000200241086a411010742000200241186a41101074200020022802282201200410740240200228022c450d002001102e0b200241e0006a24000f0b1038000b1036000b960203047f017e027f230041306b22012400200141186a22024200370300200141106a22034200370300200141086a4200370300200142003703002001418ef9c0004110108102200141206a41c7c3cb0041071081022002200141206a41086a29000037030020032001290020370300200141206a200110f10220012802202203410820031b2104410021020240024002402001290224420020031b2205422088a722030e020201000b4100210203402003410176220620026a210720072002200420074106746a41206a2000412010ec084101481b2102200320066b220341014b0d000b0b200420024106746a41206a2000412010ec084521020b0240200542ffffff1f83500d002004102e0b200141306a240020020b130020004105360204200041acd8c1003602000b3400200041b6d1cc0036020420004100360200200041146a4105360200200041106a41b8f0c100360200200041086a42063702000b130020004101360204200041f4f7c1003602000b3101017f02404125102c22020d001036000b2000422537020420002002360200412120001076200041b8fcc600412110740b13002000410636020420004194fcc1003602000b34002000418ef9c00036020420004100360200200041146a4105360200200041106a41c09ec200360200200041086a42103702000b5401017f230041106b2202240020004100360208200042013702004100200010762002420037030820024200370300200020024110107420024200370308200242003703002000200241101074200241106a24000b2901017f230041106b2202240020024100360208200242083703002000200210b401200241106a24000b130020004107360204200041a0a9c2003602000b4b01027f230041106b22022400200242f0d0c9abc6add9b1f40037030802404108102c22030d001036000b20004208370204200020033602002000200241086a41081074200241106a24000b4201027f230041106b2202240002404104102c22030d001036000b20004204370204200020033602002002410d36020c20002002410c6a41041074200241106a24000b4b01027f230041106b2202240002404110102c22030d001036000b20004210370204200020033602002002420037030820024280e0cdb8eb053703002000200241101074200241106a24000ba30302057f017e230041b0016b220224002002200141206a41e7e485f30610d103200228020421032002280200210441002105200241003a0068024002400240034020032005460d01200241c8006a20056a200420056a2d00003a00002002200541016a22063a00682006210520064120470d000b200241f0006a41086a2205200241c8006a41086a290300370300200241f0006a41106a2203200241c8006a41106a290300370300200241f0006a41186a2204200241c8006a41186a29030037030020022002290348370370200641ff0171411f4d0d01200241286a41186a20042903002207370300200241086a41086a2005290300370300200241086a41106a2003290300370300200241086a41186a2007370300200220022903703703080c020b200541ff0171450d00200241003a00680b200241106a4200370300200241186a4200370300200241206a4200370300200242003703080b20002001360200200020022903083700042000410c6a200241106a290300370000200041146a200241186a2903003700002000411c6a200241206a290300370000200241b0016a24000bc00101027f4100210341d4e2cc0021040240024002400240024002400240200241e6e485f3064a0d00200241f0c2c98b06460d03200241e2c289ab06460d01200241e1ea91cb06470d06200141a0016a21040c050b200241e9dabdf306460d01200241e1e69df306460d03200241e7e485f306470d0541202103200121040c050b41202103200141206a21040c040b200141c0006a21040c020b200141e0006a21040c010b20014180016a21040b412021030b20002003360204200020043602000ba30302057f017e230041b0016b220224002002200141206a41e9dabdf30610d103200228020421032002280200210441002105200241003a0068024002400240034020032005460d01200241c8006a20056a200420056a2d00003a00002002200541016a22063a00682006210520064120470d000b200241f0006a41086a2205200241c8006a41086a290300370300200241f0006a41106a2203200241c8006a41106a290300370300200241f0006a41186a2204200241c8006a41186a29030037030020022002290348370370200641ff0171411f4d0d01200241286a41186a20042903002207370300200241086a41086a2005290300370300200241086a41106a2003290300370300200241086a41186a2007370300200220022903703703080c020b200541ff0171450d00200241003a00680b200241106a4200370300200241186a4200370300200241206a4200370300200242003703080b20002001360200200020022903083700042000410c6a200241106a290300370000200041146a200241186a2903003700002000411c6a200241206a290300370000200241b0016a24000b130020004105360204200041c8b9c2003602000b130020004108360204200041c8bcc2003602000b13002000411136020420004180c2c2003602000b870201037f230041d0006b22022400200241086a41bad7c7004108108102200241186a41dbafc9004109108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241386a41086a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000bac0201037f230041e0006b2202240020024188fec6004108108102200241106a41e7ccc2004107108102024002404120102c2203450d002002422037023420022003360230200241306a200141201074200241c0006a200228023022012002280238220310d803200241dc006a200120036a360200200220013602582002200241d0006a3602542002200241c0006a360250200241206a200241d0006a107c02402002280234450d002001102e0b2002280228220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b20004100360208200020013602042000200436020020002002411010742000200241106a411010742000200228022022012003107402402002280224450d002001102e0b200241e0006a24000f0b1036000b1038000b2c0020002002ad4220862001ad84100f2201290000370000200041086a200141086a2900003700002001102e0b1300200041053602042000419ccdc2003602000b3400200041f1fcc60036020420004100360200200041146a4101360200200041106a41b4e4c200360200200041086a42073702000b130020004101360204200041f4e5c2003602000b4b01027f230041106b2202240002404110102c22030d001036000b20004210370204200020033602002002420037030820024280d0dbc3f4023703002000200241101074200241106a24000b13002000410f360204200041c4ebc2003602000b340020004188fec60036020420004100360200200041146a4104360200200041106a41f0aac300360200200041086a42083702000b2f01017f02404104102c22020d001036000b2000420437020420002002360200410020001076410841002000109a010b4c01027f230041106b2202240002404114102c22030d001036000b200042143702042000200336020020024200370308200242003703002000200241101074410020001076200241106a24000b7001027f230041d0006b22022400200241063a002802404101102c2203450d002000420137020420002003360200200241003a004f2000200241cf006a41011074024020022d00284101470d00200241306a280200450d002002412c6a280200102e0b200241d0006a24000f0b1036000b840101027f230041d0026b22022400200241ac026a41023a000002404101102c2203450d002000420137020420002003360200200241003a00cf022000200241cf026a41011074024020022d00ac024102460d0002402002411c6a28020041ffffff3f71450d002002280218102e0b200241246a10e3030b200241d0026a24000f0b1036000b930301027f024020002802082201450d0020002802002202200141c8006c6a21010340024020022d00004101470d00200241086a280200450d00200241046a280200102e0b0240200241246a2d00004101470d002002412c6a280200450d00200241286a280200102e0b200241c8006a22022001470d000b0b0240200041046a2802002202450d00200241c8006c450d002000280200102e0b024020002d000c4101470d00200041146a280200450d00200041106a280200102e0b024020002d00304101470d00200041386a280200450d00200041346a280200102e0b024020002d00544101470d00200041dc006a280200450d00200041d8006a280200102e0b024020002d00784101470d0020004180016a280200450d00200041fc006a280200102e0b024020002d009c014101470d00200041a4016a280200450d00200041a0016a280200102e0b024020002d00c0014101470d00200041c8016a280200450d00200041c4016a280200102e0b024020002d00e4014101470d00200041ec016a280200450d00200041e8016a280200102e0b0b130020004106360204200041d0b4c3003602000b4201027f230041106b2202240002404104102c22030d001036000b20004204370204200020033602002002411436020c20002002410c6a41041074200241106a24000b4b01027f230041106b2202240002404110102c22030d001036000b20004210370204200020033602002002420037030820024280f19384eb053703002000200241101074200241106a24000b4a01027f230041106b2202240002404110102c22030d001036000b200042103702042000200336020020024200370308200242809adbba023703002000200241101074200241106a24000b4b01027f230041106b2202240002404110102c22030d001036000b20004210370204200020033602002002420037030820024280fad5d5f2053703002000200241101074200241106a24000bfc0302037f017e230041106b2202240020002802102103200041186a280200220420011076024020044105742204450d00200320046a21040340200220032802003602002001200241041074200341086a200110ea03200341206a22032004470d000b0b200029030021052002200041086a2903003703082002200537030020012002411010742000411c6a200110b7012002200041286a108a012001200228020022032002280208107402402002280204450d002003102e0b2002200041cc006a108a012001200228020022032002280208107402402002280204450d002003102e0b2002200041f0006a108a012001200228020022032002280208107402402002280204450d002003102e0b200220004194016a108a012001200228020022032002280208107402402002280204450d002003102e0b2002200041b8016a108a012001200228020022032002280208107402402002280204450d002003102e0b02400240200041a4026a2d00004101460d00200241003a000020012002410110740c010b200241013a000020012002410110742001200041a5026a411410740b2002200041dc016a108a012001200228020022032002280208107402402002280204450d002003102e0b200220004180026a108a012001200228020022032002280208107402402002280204450d002003102e0b200241106a24000bd50102017f017e230041106b220224000240024002400240024002400240024020002802000e0700010203040506070b200241003a000020012002410110740c060b200241013a00002001200241011074200029030821032002200041106a2903003703082002200337030020012002411010740c050b200241023a000020012002410110740c040b200241033a000020012002410110740c030b200241043a000020012002410110740c020b200241053a000020012002410110740c010b200241063a000020012002410110740b200241106a24000baa0b010a7f230041e0006b22022400200241003a00380240024002400240024002400240024002400240024020012802002203280204220420044100472205490d00200241386a20032802002206200510e9081a2003200420056b3602042003200620056a360200024020040d0041002107200241056a2103200241086a21042002411c6a21050c0a0b41002107200241056a2103200241086a21042002411c6a210520022d003822080e260901010101010101010101010101010101010101010101010101010101010101010102030405010b200041063a00000c090b02402008417f6a220641ff01714121490d00200041063a00000c090b0240024020060d00410121090c010b200610322209450d060b20092001280200220128020020012802042208200620082006491b220a10e908210b20012802042207200a490d0620012007200a6b36020420012001280200200a6a360200410121070240200820064f0d00200b200a6a22014100200b20066a20016b10eb081a0b2006210a0c070b200241386a200110a60141022107200241346a41026a220120022d003b3a0000200241206a41086a2208200241d0006a290300370300200241206a41106a220b200241d8006a2d00003a0000200220022f00393b01342002200241386a41106a29030037032020022d00384101460d03200241386a41086a2802002106200241c4006a280200210a200228023c21092002411c6a41026a20012d00003a0000200241086a41086a2008290300370300200241086a41106a200b2d00003a0000200220022f01343b011c200220022903203703080c060b200241386a200110a601200241346a41026a220120022d003b3a0000200241206a41086a2207200241d0006a290300370300200241206a41106a2208200241d8006a2d00003a0000200220022f00393b01342002200241386a41106a290300370320024020022d00384101460d00200241386a41086a2802002106200241c4006a280200210a200228023c21092002411c6a41026a20012d00003a0000200241086a41086a2007290300370300200241086a41106a20082d00003a0000200220022f01343b011c20022002290320370308410321070c060b200041063a00000c060b200241386a200110a601200241346a41026a220120022d003b3a0000200241206a41086a2207200241d0006a290300370300200241206a41106a2208200241d8006a2d00003a0000200220022f00393b01342002200241386a41106a290300370320024020022d00384101460d00200241386a41086a2802002106200241c4006a280200210a200228023c21092002411c6a41026a20012d00003a0000200241086a41086a2007290300370300200241086a41106a20082d00003a0000200220022f01343b011c20022002290320370308410421070c050b200041063a00000c050b200241386a200110a601200241346a41026a220120022d003b3a0000200241206a41086a2207200241d0006a290300370300200241206a41106a2208200241d8006a2d00003a0000200220022f00393b01342002200241386a41106a290300370320024020022d00384101460d00200241386a41086a2802002106200241c4006a280200210a200228023c21092002411c6a41026a20012d00003a0000200241086a41086a2007290300370300200241086a41106a20082d00003a0000200220022f01343b011c20022002290320370308410521070c040b200041063a00000c040b200041063a00000c030b1036000b200a200741b8b2c0001056000b200020073a0000200020052f00003b00012000410c6a200a360000200041086a2006360000200041046a2009360000200041106a2004290000370000200041216a20032f00003b0000200041036a200541026a2d00003a0000200041186a200441086a290000370000200041206a200441106a2d00003a0000200041236a200341026a2d00003a00000b200241e0006a24000bbe1503097f027e027f23004190016b2202240002400240024002400240024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a3602004100210720050e260601010101010101010101010101010101010101010101010101010101010101010102030405010b200041063a00000c0a0b02402005417f6a41ff01714121490d00200041063a00000c0a0b024002402005417f6a22080d00410121090c010b200810322209450d07200128020421060b20062008490d0520092001280200200810e9081a200128020422042008490d072001200420086b3602042001200128020020086a360200410121072008210a0c040b41002108200241003a00582003417f6a21092003417e6a210302400240034020092008460d01200241386a20086a200420086a220541016a2d00003a0000200120033602042001200541026a3602002002200841016a22053a00582003417f6a21032005210820054120470d000b200241f4006a41026a220420022d003a22013a00002002418c016a41026a220320013a0000200241f8006a41086a2207200241cf006a290000220b370300200241f8006a41106a2206200241d7006a2d000022013a0000200220022f013822083b0174200220083b018c0120022002290047220c370378200228003b2109200228003f210a20022800432108200241e0006a41106a220d20013a0000200241e0006a41086a220e200b3703002002200c37036041012101200541ff01714120490d01200320042d00003a00002007200e2903003703002006200d2d00003a0000200220022f01743b018c0120022002290360370378410021010c010b0240200841ff0171450d00200241003a00580b410121010b41022107200241346a41026a22042002418c016a41026a2d00003a0000200241206a41086a2203200241f8006a41086a290300370300200241206a41106a2205200241f8006a41106a2d00003a0000200220022f018c013b013420022002290378370320024020010d002002411c6a41026a20042d00003a0000200241086a41086a2003290300370300200241086a41106a20052d00003a0000200220022f01343b011c200220022903203703080c040b200041063a00000c080b41002108200241003a00582003417f6a21092003417e6a210302400240034020092008460d01200241386a20086a200420086a220541016a2d00003a0000200120033602042001200541026a3602002002200841016a22053a00582003417f6a21032005210820054120470d000b200241f4006a41026a220420022d003a22013a00002002418c016a41026a220320013a0000200241f8006a41086a2207200241cf006a290000220b370300200241f8006a41106a2206200241d7006a2d000022013a0000200220022f013822083b0174200220083b018c0120022002290047220c370378200228003b2109200228003f210a20022800432108200241e0006a41106a220d20013a0000200241e0006a41086a220e200b3703002002200c37036041012101200541ff01714120490d01200320042d00003a00002007200e2903003703002006200d2d00003a0000200220022f01743b018c0120022002290360370378410021010c010b0240200841ff0171450d00200241003a00580b410121010b200241346a41026a22042002418c016a41026a2d00003a0000200241206a41086a2203200241f8006a41086a290300370300200241206a41106a2205200241f8006a41106a2d00003a0000200220022f018c013b013420022002290378370320024020010d002002411c6a41026a20042d00003a0000200241086a41086a2003290300370300200241086a41106a20052d00003a0000200220022f01343b011c20022002290320370308410321070c030b200041063a00000c070b41002108200241003a00582003417f6a21092003417e6a210302400240034020092008460d01200241386a20086a200420086a220541016a2d00003a0000200120033602042001200541026a3602002002200841016a22053a00582003417f6a21032005210820054120470d000b200241f4006a41026a220420022d003a22013a00002002418c016a41026a220320013a0000200241f8006a41086a2207200241cf006a290000220b370300200241f8006a41106a2206200241d7006a2d000022013a0000200220022f013822083b0174200220083b018c0120022002290047220c370378200228003b2109200228003f210a20022800432108200241e0006a41106a220d20013a0000200241e0006a41086a220e200b3703002002200c37036041012101200541ff01714120490d01200320042d00003a00002007200e2903003703002006200d2d00003a0000200220022f01743b018c0120022002290360370378410021010c010b0240200841ff0171450d00200241003a00580b410121010b200241346a41026a22042002418c016a41026a2d00003a0000200241206a41086a2203200241f8006a41086a290300370300200241206a41106a2205200241f8006a41106a2d00003a0000200220022f018c013b013420022002290378370320024020010d002002411c6a41026a20042d00003a0000200241086a41086a2003290300370300200241086a41106a20052d00003a0000200220022f01343b011c20022002290320370308410421070c020b200041063a00000c060b41002108200241003a00582003417f6a21092003417e6a210302400240034020092008460d01200241386a20086a200420086a220541016a2d00003a0000200120033602042001200541026a3602002002200841016a22053a00582003417f6a21032005210820054120470d000b200241f4006a41026a220420022d003a22013a00002002418c016a41026a220320013a0000200241f8006a41086a2207200241cf006a290000220b370300200241f8006a41106a2206200241d7006a2d000022013a0000200220022f013822083b0174200220083b018c0120022002290047220c370378200228003b2109200228003f210a20022800432108200241e0006a41106a220d20013a0000200241e0006a41086a220e200b3703002002200c37036041012101200541ff01714120490d01200320042d00003a00002007200e2903003703002006200d2d00003a0000200220022f01743b018c0120022002290360370378410021010c010b0240200841ff0171450d00200241003a00580b410121010b200241346a41026a22042002418c016a41026a2d00003a0000200241206a41086a2203200241f8006a41086a290300370300200241206a41106a2205200241f8006a41106a2d00003a0000200220022f018c013b01342002200229037837032020010d042002411c6a41026a20042d00003a0000200241086a41086a2003290300370300200241086a41106a20052d00003a0000200220022f01343b011c20022002290320370308410521070b200020073a0000200020022f011c3b00012000410c6a2008360000200041086a200a360000200041046a2009360000200041106a2002290308370000200041216a20022f00053b0000200041036a2002411c6a41026a2d00003a0000200041186a200241086a41086a290300370000200041206a200241086a41106a2d00003a0000200041236a200241056a41026a2d00003a00000c040b200041063a00002009102e0c030b1036000b2008200441b8b2c0001056000b200041063a00000b20024190016a24000bd61405067f017e027f017e017f23004190016b22022400024002400240024002400240024002400240024002400240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a3602004100210720060e260601010101010101010101010101010101010101010101010101010101010101010102030405010b200041063a00000c0a0b02402006417f6a41ff01714121490d00200041063a00000c0a0b024002402006417f6a22030d00410121040c010b200310322204450d070b200128020022012802042003490d0520042001280200200310e9081a200128020422052003490d072001200520036b3602042001200128020020036a36020041012107200321050c040b41002104200241003a0058024002400340200128020022032802042205450d01200241386a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00582003210420034120470d000b200241f4006a41026a220120022d003a22033a00002002418c016a41026a220620033a0000200241f8006a41086a2207200241cf006a2900002208370300200241f8006a41106a2209200241d7006a2d0000220a3a0000200220022f013822033b0174200220033b018c0120022002290047220b370378200228003b2104200228003f210520022800432103200241e0006a41106a220c200a3a0000200241e0006a41086a220a20083703002002200b370360200620012d00003a0000200220022f01743b018c012009200c2d00003a00002007200a29030037030020022002290360370378410021010c010b0240200441ff0171450d00200241003a00580b410121010b41022107200241346a41026a22062002418c016a41026a2d00003a0000200241206a41086a2209200241f8006a41086a290300370300200241206a41106a220a200241f8006a41106a2d00003a0000200220022f018c013b013420022002290378370320024020010d002002411c6a41026a20062d00003a0000200241086a41086a2009290300370300200241086a41106a200a2d00003a0000200220022f01343b011c200220022903203703080c040b200041063a00000c080b41002104200241003a0058024002400340200128020022032802042205450d01200241386a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00582003210420034120470d000b200241f4006a41026a220120022d003a22033a00002002418c016a41026a220620033a0000200241f8006a41086a2207200241cf006a2900002208370300200241f8006a41106a2209200241d7006a2d0000220a3a0000200220022f013822033b0174200220033b018c0120022002290047220b370378200228003b2104200228003f210520022800432103200241e0006a41106a220c200a3a0000200241e0006a41086a220a20083703002002200b370360200620012d00003a0000200220022f01743b018c012009200c2d00003a00002007200a29030037030020022002290360370378410021010c010b0240200441ff0171450d00200241003a00580b410121010b200241346a41026a22062002418c016a41026a2d00003a0000200241206a41086a2207200241f8006a41086a290300370300200241206a41106a2209200241f8006a41106a2d00003a0000200220022f018c013b013420022002290378370320024020010d002002411c6a41026a20062d00003a0000200241086a41086a2007290300370300200241086a41106a20092d00003a0000200220022f01343b011c20022002290320370308410321070c030b200041063a00000c070b41002104200241003a0058024002400340200128020022032802042205450d01200241386a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00582003210420034120470d000b200241f4006a41026a220120022d003a22033a00002002418c016a41026a220620033a0000200241f8006a41086a2207200241cf006a2900002208370300200241f8006a41106a2209200241d7006a2d0000220a3a0000200220022f013822033b0174200220033b018c0120022002290047220b370378200228003b2104200228003f210520022800432103200241e0006a41106a220c200a3a0000200241e0006a41086a220a20083703002002200b370360200620012d00003a0000200220022f01743b018c012009200c2d00003a00002007200a29030037030020022002290360370378410021010c010b0240200441ff0171450d00200241003a00580b410121010b200241346a41026a22062002418c016a41026a2d00003a0000200241206a41086a2207200241f8006a41086a290300370300200241206a41106a2209200241f8006a41106a2d00003a0000200220022f018c013b013420022002290378370320024020010d002002411c6a41026a20062d00003a0000200241086a41086a2007290300370300200241086a41106a20092d00003a0000200220022f01343b011c20022002290320370308410421070c020b200041063a00000c060b41002104200241003a0058024002400340200128020022032802042205450d01200241386a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00582003210420034120470d000b200241f4006a41026a220120022d003a22033a00002002418c016a41026a220620033a0000200241f8006a41086a2207200241cf006a2900002208370300200241f8006a41106a2209200241d7006a2d0000220a3a0000200220022f013822033b0174200220033b018c0120022002290047220b370378200228003b2104200228003f210520022800432103200241e0006a41106a220c200a3a0000200241e0006a41086a220a20083703002002200b370360200620012d00003a0000200220022f01743b018c012009200c2d00003a00002007200a29030037030020022002290360370378410021010c010b0240200441ff0171450d00200241003a00580b410121010b200241346a41026a22062002418c016a41026a2d00003a0000200241206a41086a2207200241f8006a41086a290300370300200241206a41106a2209200241f8006a41106a2d00003a0000200220022f018c013b01342002200229037837032020010d042002411c6a41026a20062d00003a0000200241086a41086a2007290300370300200241086a41106a20092d00003a0000200220022f01343b011c20022002290320370308410521070b200020073a0000200020022f011c3b00012000410c6a2003360000200041086a2005360000200041046a2004360000200041106a2002290308370000200041216a20022f00053b0000200041036a2002411c6a41026a2d00003a0000200041186a200241086a41086a290300370000200041206a200241086a41106a2d00003a0000200041236a200241056a41026a2d00003a00000c040b200041063a00002004102e0c030b1036000b2003200541b8b2c0001056000b200041063a00000b20024190016a24000b13002000410436020420004180ccc3003602000b340020004195fec60036020420004100360200200041146a4102360200200041106a41c4f2c300360200200041086a42083702000b130020004103360204200041b4f5c3003602000b4301027f230041106b2202240002404102102c22030d001036000b2000420237020420002003360200200241e4003b010e20002002410e6a41021074200241106a24000b4a01027f230041106b2202240002404110102c22030d001036000b20004210370204200020033602002002420037030820024280a0cb98013703002000200241101074200241106a24000b4b01027f230041106b2202240002404110102c22030d001036000b200042103702042000200336020020024200370308200242809886abec053703002000200241101074200241106a24000b130020004103360204200041ecffc3003602000b3400200041bad7c70036020420004100360200200041146a4103360200200041106a41c489c400360200200041086a42083702000b2e01017f02404104102c22020d001036000b200042043702042000200236020041002000107620004104410010740b130020004105360204200041d88dc4003602000b4b01027f230041106b22022400200242f0f2bda1a7ee9cb9f90037030802404108102c22030d001036000b20004208370204200020033602002000200241086a41081074200241106a24000b4401027f230041106b2202240002404104102c22030d001036000b200042043702042000200336020020024190ce0036020c20002002410c6a41041074200241106a24000b4401027f230041106b2202240002404104102c22030d001036000b2000420437020420002003360200200241808c1536020c20002002410c6a41041074200241106a24000b4401027f230041106b2202240002404104102c22030d001036000b2000420437020420002003360200200241d0860336020c20002002410c6a41041074200241106a24000b130020004110360204200041989cc4003602000b13002000410e360204200041e4a3c4003602000b130020004102360204200041e4adc4003602000bff0101037f230041d0006b22022400200241f1fcc6004107108102200241106a418ce5c20041081081022002200136022c200241306a2002412c6a410410d803200241cc006a2002412c6a41046a3602002002200241c0006a36024420022002412c6a3602482002200241306a360240200241206a200241c0006a107c024002402002280228220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b20004100360208200020013602042000200436020020002002411010742000200241106a411010742000200228022022012003107402402002280224450d002001102e0b200241d0006a24000f0b1038000b1036000be4810203097f097e187f230041e0116b220324000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e100001020f0e0d0c0b0a09080706050403000b200341940f6a4101360200200342013702840f2003419cc3cb003602800f200341043602c40c20034194c3cb003602c00c2003200341c00c6a3602900f200341800f6a41f89bc4001044000b41022104200341f0046a41026a200141036a2d00003a0000200341c00c6a41086a2205200141146a290000370300200341c00c6a410d6a2206200141196a290000370000200320012f00013b01f00420032001410c6a2900003703c00c200141086a2800002107200141046a280000210820022802282101024002400240024020022d00000e0400010203020b20022d0001210220012001280200417f6a2209360200024020090d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22092009280200417f6a220936020020090d002001102e0b200241ff0171450d024110102c2202450d1a200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1a20014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220536020020050d012002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22052005280200417f6a220536020020050d012002102e0c010b200241046a2d00002109200241086a280200210a2002410c6a280200210b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0240200941ff01710d00200a410174200b4b0d020b4110102c2202450d19200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1920014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220536020020050d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22052005280200417f6a220536020020050d002002102e0b20012001280200417f6a220236020020020d192001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d192001102e0c1a0b20034190056a108104200341e8016a41086a2005290300370300200341e8016a410d6a2006290000370000200320032f01f0043b0184022003200341f2046a2d00003a008602200320032903c00c3703e8010240200328029805220241134b0d00200341800f6a41086a2204200341e8016a41086a290300370300200341800f6a410d6a2205200341e8016a410d6a290000370000200320032f0184023b01a00c200320032d0086023a00a20c200320032903e8013703800f02400240024002402002200328029405470d00200241016a22012002490d13200241017422062001200620014b1b22014104200141044b1b220141ffffff1f712001464103742106200141067421010240024020020d00200341003602f0090c010b200341f0096a41086a410836020020032003280290053602f009200320024106743602f4090b200341c0076a20012006200341f0096a107d200341c8076a280200210120032802c0074101460d01200320032802c4073602900520032001410676360294050b20032802900520024106746a2201420037030820014201370300200141106a4200370300200141186a4200370300200141206a20032f01a00c3b0100200141226a20032d00a20c3a0000200141276a2007360000200141236a20083600002001412b6a20032903800f370000200141336a2004290300370000200141386a20052900003700002003200241016a220136029805200341f0096a41086a20013602002003200329039005220c3703f009200ca722040d0120034188026a41186a2204420037030020034188026a41106a2205420037030020034188026a41086a220642003703002003420037038802200341800f6a4188fec60041081081022006200341800f6a41086a2207290000370300200320032900800f37038802200341800f6a41b0afc300410a10810220042007290000370300200520032900800f37030020034188026a412010ff010c020b2001450d110c1a0b20034188026a41186a2205420037030020034188026a41106a2206420037030020034188026a41086a220742003703002003420037038802200341800f6a4188fec60041081081022007200341800f6a41086a2208290000370300200320032900800f37038802200341800f6a41b0afc300410a10810220052008290000370300200620032900800f37030020034188026a200341f0096a10820420032802f40941ffffff1f71450d002004102e0b2003418c0f6a2002360200200341880f6a41063a0000200341123a00800f200341800f6a10fe01200320032800c8023602c0112003200341cb026a2800003600c311200041186a41003a0000200041106a2001ad42b0ae157e42c896efc5007c37030020004201370308200020032802c0113600192000411c6a20032800c311360000200042003703000c1b0b200341800f6a410d108304200341880f6a280200210120032802840f210220032802800f210420032802940541ffffff1f71450d19200328029005102e0c190b200341f0096a200141046a41a00210e9081a200341800f6a41286a200241286a280200360200200341800f6a41206a200241206a290200370300200341800f6a41186a200241186a290200370300200341800f6a41106a200241106a290200370300200341800f6a41086a200241086a290200370300200320022902003703800f200341c00c6a200341800f6a10c10220034188026a41086a2201200341c90c6a29000037030020034188026a41106a2202200341d10c6a29000037030020034188026a41186a2204200341d90c6a290000370300200320032900c10c3703880220032d00c00c4101460d11200341c0076a41186a2004290300370300200341c0076a41106a2002290300370300200341c0076a41086a200129030037030020032003290388023703c007024020032802f809220141e4004d0d00200341800f6a410c10830420032f00810f20032d00830f41107472210120032902840f210c20032d00800f21020c130b200341106a2001ad220d420042809adbba02420010e808200341c0116a200341c0076a108404200341800f6a20032802c011220120032802c81110850420034190056a200341800f6a41a40210e9081a200341f0046a41086a2202200341ad116a290000370300200341f0046a41106a2204200341b5116a290000370300200341f0046a41176a2205200341bc116a280000360000200320032900a5113703f004200341106a41086a290300210e2003290310210f20032d00a41122064102460d13200341c8026a20034190056a41a40210e9081a200341a8026a41176a2005280000360000200341a8026a41106a2004290300370300200341a8026a41086a2002290300370300200320032903f0043703a802024020032802c411450d002001102e0b200341800f6a200341c8026a41a40210e9081a200341800f6a41a4026a20063a0000200341a5116a20032903a802370000200341ad116a200341a8026a41086a290300370000200341b5116a200341a8026a41106a290300370000200341bc116a200341bf026a280000360000200341800f6a41186a22012802002106410021072001410036020002402006450d0020032802900f220841086a210a41002109410021074100210402400340024002402007450d00200820044105746a21012008200420096a4105746a210203400240200141086a2205280200417f6a0e06000303030300030b20022001290300370300200241186a200141186a290300370300200241106a200141106a290300370300200241086a2005290300370300200241206a2102200141206a21012006200441016a22044b0d000c040b0b200a20044105746a2101034002402001280200417f6a0e06000202020200020b200141206a21012006200441016a22044b0d000b410021070c030b2009417f6a2109200741016a21072006200441016a22044b0d000b0b024020070d00410021070c010b2008200420076b4105746a200820044105746a200620046b41057410ea081a0b2003200620076b3602980f2003419c0f6a220110e3032001200341f0096a41a00210e9081a200341c00c6a200341800f6a41c00210e9081a200341c00c6a41086a290300211020032903c00c21110c140b200341800f6a41286a200241286a280200360200200341800f6a41206a200241206a290200370300200341800f6a41186a200241186a290200370300200341800f6a41106a200241106a290200370300200341800f6a41086a200241086a290200370300200320022902003703800f200341c00c6a200341800f6a10c102200341c0076a41086a2201200341c90c6a290000370300200341c0076a41106a2202200341d10c6a290000370300200341c0076a41186a2204200341d90c6a290000370300200320032900c10c3703c00702400240024002400240024020032d00c00c4101460d0020034190056a41186a200429030037030020034190056a41106a200229030037030020034190056a41086a2001290300370300200320032903c00737039005200341c0076a20034190056a10d703200341800f6a20032802c007220120032802c8072204108604024020032d00a00f220541064622020d002001200410ff010b20034188026a41086a200341800f6a41086a29030037030020034188026a41106a200341800f6a41106a29030037030020034188026a41186a2204200341800f6a41186a290300370300200341bc076a41026a2206200341a30f6a2d00003a0000200341a00c6a41086a2207200341b40f6a290200370300200341a00c6a41106a2208200341bc0f6a290200370300200320032903800f37038802200320032f00a10f3b01bc072003200341ac0f6a2902003703a00c024020020d00200341a80f6a2802002109200341a40f6a280200210a200341b8016a41086a20034188026a41136a290000370300200341b8016a410d6a22022004290000370000200341b8076a41026a20062d00003a0000200341f0046a41106a2008290300370300200341f0046a41086a2007290300370300200320032d008a023a00ea01200320032f0188023b01e80120032003290093023703b801200320032f01bc073b01b807200320032903a00c3703f004200328008b022104200328008f022106024020032802c407450d002001102e0b200341c00c6a410d6a22012002290000370000200341c00c6a41086a2202200341b8016a41086a290300370300200341b4016a220720032d00ea013a0000200341f0096a41086a22082002290300370300200341f0096a410d6a22022001290000370000200320032f01e8013b01d201200320032903b8013703f009200320032801d0013602b001200320063600c707200320043600c307200320072d00003a00c207200320032f01b2013b01c007200341c0076a41136a2008290300370000200341c0076a41186a2002290000370000200320032903f0093700cb0741012108024020054101470d002009450d00200a102e0b200341e8016a41086a200341a3056a290000370300200341f5016a220120034190056a41186a290000370000200320032f0190053b018402200320032d0092053a0086022003200329009b053703e80120032800930521022003280097052104200341c8026a200341c0076a108704200341800f6a20032802c80220032802d0021088044100210720032802900f22050d024200210e410021064200210c4200210f0c030b024020032802c407450d002001102e0b200341c0116a410f10830420032d00c0114106460d0320032902c411210c0c040b200341023a00c0110c030b20032902940f220c42ffffffff0f83210e200c422088a72106200341880f6a290300210f2003419c0f6a280200210a20032903800f210c200521080b200341cb0c6a2004360000200341cf0c6a20032903e801370000200341d70c6a200341e8016a41086a290300370000200341dc0c6a2001290000370000200320032f0184023b01c40c200320032d0086023a00c60c200320023600c70c2003200341c0076a3602c00c200341c00c6a410472210502402006450d0041002109410021074100210402400340024002402007450d00200820044105746a21012008200420096a4105746a2102034020012005412010ec08450d0220022001290000370000200241186a200141186a290000370000200241106a200141106a290000370000200241086a200141086a290000370000200241206a2102200141206a21012006200441016a22044b0d000c040b0b200820044105746a2101034020012005412010ec08450d01200141206a21012006200441016a22044b0d000b410021070c030b2009417f6a2109200741016a21072006200441016a22044b0d000b0b024020070d00410021070c010b2008200420076b4105746a200820044105746a200620046b41057410ea081a0b200341800f6a20032802c00c2005200c4280f19384eb05200c4280f19384eb05544100200f501b22011b2210200f420020011b2211410010890420032802c00c2101200341f0096a41186a200541186a290000220d370300200341f0096a41106a200541106a2900002212370300200341f0096a41086a200541086a29000022133703002003200529000022143703f009200341d80f6a2011370300200341d00f6a2010370300200341800f6a41086a41093a0000200341800f6a41096a2014370000200341910f6a2013370000200341990f6a2012370000200341a10f6a200d370000200341a90f6a2001290000370000200341b10f6a200141086a290000370000200341b90f6a200141106a290000370000200341c10f6a200141186a290000370000200341123a00800f200341800f6a10fe01200341940f6a200620076bad422086200e843702002003200f20117d200c201054ad7d3703880f2003200c20107d3703800f2003200a36029c0f200320083602900f20032802c802220120032802d002200341800f6a108a040240200e42ffffff3f83500d002008102e0b024020032802cc02450d002001102e0b200341063a00c0110b4200210c20004200370308200020032800800f360019200041186a41003a00002000411c6a200341830f6a2800003600000c010b20032802c01121012000200c370024200041206a2001360000200041186a41003a0000200042003703084201210c0b2000200c3703000c180b200341e4016a41026a200141076a2d00003a0000200341a8026a41086a200141186a290200370300200341a8026a41106a200141206a2902003703002003200141056a2f00003b01e4012003200141106a2902003703a802200141046a2d00002104200141086a28020021052001410c6a2802002101200341800f6a41286a200241286a280200360200200341800f6a41206a200241206a290200370300200341800f6a41186a200241186a290200370300200341800f6a41106a200241106a290200370300200341800f6a41086a200241086a290200370300200320022902003703800f200341c00c6a200341800f6a10c102200341c0076a41086a2202200341c90c6a290000370300200341c0076a41106a2206200341d10c6a290000370300200341c0076a41186a2207200341d90c6a290000370300200320032900c10c3703c007024002400240024020032d00c00c4101460d00200341c0116a41186a2007290300370300200341c0116a41106a2006290300370300200341c0116a41086a2002290300370300200320032903c0073703c011200341800f6a200341c0116a10840420032802800f220620032802880f108f022102024020032802840f450d002006102e0b024020020d00200341d8016a41061083040c020b200341f0096a41026a2206200341e4016a41026a2d00003a0000200341800f6a41086a2202200341a8026a41086a290300370300200341800f6a41106a2207200341a8026a41106a290300370300200320032f01e4013b01f009200320032903a8023703800f02400240024020040e03020100010b2001450d002005102e0b200320032903c00c3703b801200341013a00d8010c030b200341c00c6a410d6a2204200341800f6a410d6a290000370000200341c00c6a41086a22082002290300370300200341b8016a41086a22092008290300370300200341b8016a410d6a22082004290000370000200320032f01f0093b01e801200320032903800f3703b801200320062d00003a00ea01200320032d00ea013a00ca02200320032f01e8013b01c802200320013600cf02200320053600cb02200341c8026a41186a2008290000370000200341c8026a41136a2009290300370000200320032903b8013700d302200341c0076a200341c8026a10d703200341800f6a20032802c007220120032802c80710860420034188026a41086a200229030037030020034188026a41106a200729030037030020034188026a41186a2202200341800f6a41186a290300370300200341bc076a41026a200341a30f6a2d00003a0000200341a00c6a41086a200341b40f6a290200370300200341a00c6a41106a200341bc0f6a290200370300200320032903800f37038802200320032f00a10f3b01bc072003200341ac0f6a2902003703a00c0240024020032d00a00f22044106460d00200341a80f6a2802002109200341a40f6a280200210a200341e8016a41086a220520034188026a41136a290000370300200341e8016a410d6a2002290000370000200341b8076a41026a200341bc076a41026a2d00003a0000200341f0046a41106a200341a00c6a41106a290300370300200341f0046a41086a200341a00c6a41086a290300370300200320032d008a023a008602200320032f0188023b01840220032003290093023703e801200320032f01bc073b01b807200320032903a00c3703f004200328008b022102200328008f022106024020032802c407450d002001102e0b200341c00c6a410d6a2201200341e8016a410d6a290000370000200341c00c6a41086a22072005290300370300200341b4016a220520032d0086023a0000200341f0096a41086a22082007290300370300200341f0096a410d6a22072001290000370000200320032f0184023b01d201200320032903e8013703f009200320032801d0013602b00120032006360097052003200236009305200320052d00003a009205200320032f01b2013b019005200341a3056a2008290300370000200341a8056a2007290000370000200320032903f00937009b05024020044101470d002009450d00200a102e0b20034190056a200341c0116a412010ec08450d01200341d8016a41101083040c040b024020032802c407450d002001102e0b200341d8016a410f1083040c030b200341800f6a200341c8026a10d70320032802800f220120032802880f10ff01024020032802840f450d002001102e0b200341c0076a41186a200341c8026a41186a290300220c370300200341c0076a41106a200341c8026a41106a2903002210370300200341c0076a41086a200341c8026a41086a290300220f370300200341c0076a41286a200341c0116a41086a2903002211370300200341c0076a41306a200341c0116a41106a290300220e370300200341c0076a41386a200341c0116a41186a290300220d370300200320032903c80222123703c007200320032903c01122133703e007200341f0096a41386a2201200d370300200341f0096a41306a2202200e370300200341f0096a41286a22042011370300200341f0096a41206a22082013370300200341f0096a41186a220a200c370300200341f0096a41106a220b2010370300200341f0096a41086a2215200f370300200320123703f009200341a00c6a20034190056a108704200341800f6a20032802a00c220920032802a80c2216108804410021060240024020032802900f22070d004200211141012107410021054200210c420021100c010b20032902940f220c42ffffffff0f832111200c422088a72105200341800f6a41086a29030021102003419c0f6a280200211720032903800f210c0b200341c00c6a41386a2001290300370300200341c00c6a41306a2002290300370300200341c00c6a41286a2004290300370300200341c00c6a41206a2008290300370300200341c00c6a41186a200a290300370300200341c00c6a41106a200b290300370300200341c00c6a41086a2015290300370300200320032903f0093703c00c02402005450d0041002108410021064100210402400340024002402006450d00200720044105746a21012007200420086a4105746a210203402001200341c00c6a412010ec08450d0220022001290000370000200241186a200141186a290000370000200241106a200141106a290000370000200241086a200141086a290000370000200241206a2102200141206a21012005200441016a22044b0d000c040b0b200720044105746a210103402001200341c00c6a412010ec08450d01200141206a21012005200441016a22044b0d000b410021060c030b2008417f6a2108200641016a21062005200441016a22044b0d000b0b024020060d00410021060c010b2007200420066b4105746a200720044105746a200520046b41057410ea081a0b20034190016a200341e00c6a200c4280f19384eb05200c4280f19384eb055441002010501b22011b220f2010420020011b220e10fb01200341d80f6a200e370300200341d00f6a200f370300200341800f6a41086a41083a0000200341890f6a20032903c00c370000200341910f6a200341c00c6a41086a290300370000200341990f6a200341d00c6a290300370000200341a10f6a200341d80c6a290300370000200341a90f6a20032903e00c370000200341b10f6a200341e80c6a290300370000200341b90f6a200341f00c6a290300370000200341c10f6a200341f80c6a290300370000200341123a00800f200341800f6a10fe01200341940f6a200520066bad42208620118437020020032010200e7d200c200f54ad7d3703880f2003200c200f7d3703800f2003201736029c0f200320073602900f20092016200341800f6a108a040240201142ffffff3f83500d002007102e0b024020032802a40c450d002009102e0b200341063a00d8010c030b200341023a00d8010b20044102470d002001450d002005102e0b20032d00d8014106460d0020032802d8012101200020032902dc01370024200041206a2001360000200041186a41003a000020004200370308200042013703000c180b20004200370308200020032800a001360019200041186a41003a00002000411c6a200341a3016a280000360000200042003703000c170b200341a0016a41026a2209200141076a2d00003a0000200341c8026a41086a220a200141186a290200370300200341c8026a41106a220b200141206a2902003703002003200141056a2f00003b01a0012003200141106a2902003703c802200141046a2d00002104200141086a28020021072001410c6a2802002106200341d8016a41026a2001412b6a2d00003a000020034190056a41086a2001413c6a29020037030020034190056a41106a200141c4006a2902003703002003200141296a2f00003b01d8012003200141346a29020037039005200141286a2d000021052001412c6a2802002108200141306a2802002101200341800f6a41286a200241286a280200360200200341800f6a41206a200241206a290200370300200341800f6a41186a200241186a290200370300200341800f6a41106a2215200241106a290200370300200341800f6a41086a2216200241086a290200370300200320022902003703800f200341c00c6a200341800f6a10c102200341c0076a41086a2202200341c90c6a290000370300200341c0076a41106a2217200341d10c6a290000370300200341c0076a41186a2218200341d90c6a290000370300200320032900c10c3703c0070240024002400240024020032d00c00c4101460d00200341f0096a41186a2018290300370300200341f0096a41106a2017290300370300200341f0096a41086a2002290300370300200320032903c0073703f009200341a00c6a41026a20092d00003a0000200320032f01a0013b01a00c2016200a2903003703002015200b290300370300200320032903c8023703800f0240024020040e03030100010b2006450d002007102e0b200320032903c0073703b801200341013a00c0110c020b200341023a00c0110240200541ff01714101470d002001450d002008102e0b20044102470d022006450d022007102e0c020b200341c0076a410d6a2202200341800f6a410d6a290000370000200341c0076a41086a2204200341800f6a41086a290300370300200341b8016a41086a22092004290300370300200341b8016a410d6a22042002290000370000200320032f01a00c3b01e801200320032903800f3703b8012003200341a20c6a2d00003a00ea01200320032d00ea013a00c20c200320032f01e8013b01c00c200320063600c70c200320073600c30c200341d80c6a2004290000370000200341d30c6a2009290300370000200320032903b8013700cb0c200341800f6a200341f0096a10840420032802800f220420032802880f108f022102024020032802840f450d002004102e0b024020020d00200341c0116a41061083040c010b200341c0076a200341c00c6a10d703200341800f6a20032802c007220420032802c80710860420034188026a41086a200341800f6a41086a29030037030020034188026a41106a200341800f6a41106a29030037030020034188026a41186a2206200341800f6a41186a290300370300200341bc076a41026a2207200341a30f6a2d00003a0000200341a00c6a41086a2209200341b40f6a290200370300200341a00c6a41106a220a200341bc0f6a290200370300200320032903800f37038802200320032f00a10f3b01bc072003200341ac0f6a2902003703a00c0240024020032d00a00f22024106460d00200341a80f6a280200210b200341a40f6a2802002115200341e8016a41086a20034188026a41136a290000370300200341f5016a22162006290000370000200341b8076a41026a20072d00003a0000200341f0046a41106a200a290300370300200341f0046a41086a2009290300370300200320032d008a023a008602200320032f0188023b01840220032003290093023703e801200320032f01bc073b01b807200320032903a00c3703f004200328008b022106200328008f022107024020032802c407450d002004102e0b200341a10f6a20032f01b8073b0000200341800f6a41136a200341e8016a41086a290300370000200341980f6a2016290000370000200341a30f6a200341ba076a2d00003a0000200320032d0086023a00820f200320032f0184023b01800f200320073600870f200320063600830f200320032903e80137008b0f200320023a00a00f200341a80f6a200b360200200341a40f6a2015360200200341ac0f6a20032903f004370200200341b40f6a200341f0046a41086a290300370200200341bc0f6a20034180056a290300370200200341800f6a200341f0096a412010ec082104024020024101470d00200b450d002015102e0b20040d01200341a10f6a20032f01d8013b0000200341a80f6a2001360200200341a40f6a2008360200200341ac0f6a200329039005370200200341800f6a41186a200341f0096a41186a290300370300200341800f6a41106a200341f0096a41106a290300370300200341800f6a41086a200341f0096a41086a290300370300200341a30f6a200341da016a2d00003a0000200341b40f6a20034190056a41086a290300370200200341bc0f6a20034190056a41106a290300370200200320032903f0093703800f200320053a00a00f200341c0076a200341c00c6a10d70320032802c007220120032802c807200341800f6a108b04024020032802c407450d002001102e0b024020032d00a00f4101470d0020032802a80f450d0020032802a40f102e0b200341063a00c0110c040b20032802c407450d002004102e0b200341c0116a41101083040b200541ff01714101470d002001450d002008102e0b20032d00c0114106460d0020032802c0112101200020032902c411370024200041206a2001360000200041186a41003a000020004200370308200042013703000c170b20004200370308200020032800a802360019200041186a41003a00002000411c6a200341ab026a280000360000200042003703000c160b200341b0016a41026a2209200141076a2d00003a0000200341c0116a41086a220a200141186a290200370300200341c0116a41106a220b200141206a2902003703002003200141056a2f00003b01b0012003200141106a2902003703c011200141046a2d00002105200141086a28020021072001410c6a2802002106200341d0016a41026a2001412b6a2d00003a0000200341c8026a41086a2001413c6a290200370300200341c8026a41106a200141c4006a2902003703002003200141296a2f00003b01d0012003200141346a2902003703c802200141286a2d000021042001412c6a2802002108200141306a2802002101200341800f6a41286a200241286a280200360200200341800f6a41206a200241206a290200370300200341800f6a41186a200241186a290200370300200341800f6a41106a2215200241106a290200370300200341800f6a41086a2216200241086a290200370300200320022902003703800f200341c00c6a200341800f6a10c102200341c0076a41086a2202200341c90c6a290000370300200341c0076a41106a2217200341d10c6a290000370300200341c0076a41186a2218200341d90c6a290000370300200320032900c10c3703c007024002400240024020032d00c00c4101460d0020034190056a41186a201829030037030020034190056a41106a201729030037030020034190056a41086a2002290300370300200320032903c00737039005200341c0076a41026a20092d00003a0000200320032f01b0013b01c0072016200a2903003703002015200b290300370300200320032903c0113703800f0240024020050e03030100010b2006450d002007102e0b200320032903c00c3703b801200341013a00d8010c020b200341023a00d8010240200441ff01714101470d002001450d002008102e0b20054102470d022006450d022007102e0c020b200341c00c6a410d6a2202200341800f6a410d6a290000370000200341c00c6a41086a2205200341800f6a41086a290300370300200341b8016a41086a22092005290300370300200341b8016a410d6a22052002290000370000200320032f01c0073b01e801200320032903800f3703b8012003200341c2076a2d00003a00ea01200320032d00ea013a00f209200320032f01e8013b01f009200320063600f709200320073600f309200341880a6a2005290000370000200341830a6a2009290300370000200320032903b8013700fb09200341800f6a20034190056a10840420032802800f220520032802880f108f022102024020032802840f450d002005102e0b024020020d00200341d8016a41061083040c010b200341800f6a200341f0096a10d70320032802800f220520032802880f108f022102024020032802840f450d002005102e0b02402002450d00200341d8016a410e1083040c010b200341b8016a41026a220b200341d0016a41026a2d00003a0000200341e8016a41086a2215200341fb096a220241086a290000370300200341e8016a410d6a22162002410d6a290000370000200320032f01d0013b01b801200320032f01f0093b018402200320032d00f2093a008602200320022900003703e801200341c0076a41086a2217200341c8026a41086a290300370300200341c0076a41106a2218200341c8026a41106a290300370300200320032903c8023703c007200341a8026a20034190056a108704200341800f6a20032802a802220a20032802b00222191088040240024020032802900f22020d004200210c410021094101210241002105420021100c010b20032902940f220c422088a72105200ca72109200341800f6a41086a29030021102003419c0f6a280200211a20032903800f210c0b200341cc0c6a2001360200200341c00c6a41086a2008360200200341c00c6a41106a20032903c007370300200341d80c6a2017290300370300200341e00c6a2018290300370300200341ea0c6a20032d0086023a0000200320043a00c40c200320032f01b8013b00c50c2003200b2d00003a00c70c200320032f0184023b01e80c200320034190056a3602c00c200341ef0c6a2006360000200341eb0c6a2007360000200341f30c6a20032903e801370000200341fb0c6a2015290300370000200341800d6a201629000037000002400240024002400240200541e400490d00200341f0046a41011083040c010b200341800f6a20034190056a4280f19384eb05420010c302024020032d00800f22064106470d00200341800f6a41186a20034190056a41186a290300370300200341800f6a41106a20034190056a41106a290300370300200341800f6a41086a20034190056a41086a290300370300200341800f6a41286a200341c00c6a410472220141086a290200370300200341b00f6a200141106a290200370300200341b80f6a200141186a290200370300200341c00f6a200141206a28020036020020032003290390053703800f200320012902003703a00f200341a00c6a200341c00c6a41286a10d70320032802a00c220120032802a80c200341800f6a108b04024020032802a40c450d002001102e0b200341e80c6a2101024020032d00a00f4101470d00200341a80f6a280200450d00200341a40f6a280200102e0b20034188026a41186a2206200141186a220729020037030020034188026a41106a2208200141106a220b29020037030020034188026a41086a2215200141086a22162902003703002003200129020037038802024020052009470d00200941016a22042009490d11200941017422172004201720044b1b22044104200441044b1b220441ffffff3f712004462117200441057421040240024020090d00200341003602800f0c010b200341880f6a4101360200200320023602800f200320094105743602840f0b200341a00c6a20042017200341800f6a107d200341a80c6a2802002104024020032802a00c4101470d0020040d1b0c120b20032802a40c2102200441057621090b200220054105746a2204200329038802370000200441186a2006290300370000200441106a2008290300370000200441086a201529030037000020032802c00c2104200341d80f6a4200370300200341d00f6a4280f19384eb05370300200341800f6a41086a41073a0000200341890f6a2001290000370000200341910f6a2016290000370000200341990f6a200b290000370000200341a10f6a2007290000370000200341a90f6a2004290000370000200341b10f6a200441086a290000370000200341b90f6a200441106a290000370000200341c10f6a200441186a290000370000200341123a00800f200341800f6a10fe01200341063a00f004427f2010200c4280f19384eb057c220f200c542201ad7c221120012011201054200f200c5a1b22011b2110427f200f20011b210c200541016a21050c020b20032d00830f210720032f00810f210b200320032902840f3702f404200320063a00f0042003200b20074110747222063b00f104200320064110763a00f3040b0240200441ff01714101470d002001450d002008102e0b20032d00f0044106470d010b200341940f6a2005ad4220862009ad843702002003200c3703800f2003201a36029c0f200320023602900f200320103703880f0240024020020d00200a201910ff010c010b200a2019200341800f6a108a042002450d00200941ffffff3f71450d002002102e0b200341d8016a41086a200341f0046a41086a280200360200200320032903f0043703d8010c010b200341d8016a41086a200341f0046a41086a280200360200200320032903f0043703d801200941ffffff3f71450d002002102e0b20032802ac02450d01200a102e0c010b200441ff01714101470d002001450d002008102e0b024020032d00d8014106460d0020032802d8012101200020032902dc01370024200041206a2001360000200041186a41003a000020004200370308200042013703000c160b20004200370308200020032800a001360019200041186a41003a00002000411c6a200341a3016a280000360000200042003703000c150b200341b0016a41026a2207200141076a2d00003a0000200341a00c6a41086a2208200141186a290200370300200341a00c6a41106a2209200141206a2902003703002003200141056a2f00003b01b0012003200141106a2902003703a00c2001410c6a2802002104200141086a2802002106200141046a2d0000210520022802282101024002400240024002400240024020022d00000e0400010203020b20022d0001210220012001280200417f6a220a3602000240200a0d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a220a200a280200417f6a220a360200200a0d002001102e0b200241ff0171450d024110102c2202450d17200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1720014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220736020020070d012002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22072007280200417f6a220736020020070d012002102e0c010b200241046a2d0000210a200241086a280200210b2002410c6a280200211520012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0240200a41ff01710d00200b41017420154b0d020b4110102c2202450d16200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1620014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220736020020070d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22072007280200417f6a220736020020070d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b4102210120054102470d012004450d012006102e0c010b200341f0096a41026a20072d00003a0000200341800f6a41086a2008290300370300200341800f6a41106a2009290300370300200320032f01b0013b01f009200320032903a00c3703800f4101210102400240024020050e03000201020b200341c0076a41026a200341f0096a41026a2d00003a0000200341c00c6a41086a200341800f6a41086a290300370300200341c00c6a410d6a200341800f6a410d6a290000370000200320032f01f0093b01c007200320032903800f3703c00c410021010c010b2004450d002006102e0b2003419b026a200341c00c6a41086a29030037000020034188026a41186a2202200341cd0c6a290000370000200320032f01c0073b0188022003200436008f022003200636008b02200320032903c00c370093022003200341c2076a2d00003a008a02024020010d00200341c0116a41186a2002290300370300200341c0116a41106a20034188026a41106a290300370300200341c0116a41086a20034188026a41086a29030037030020032003290388023703c011200341c00c6a200341c0116a108704200341800f6a20032802c00c220220032802c80c22041088040240024020032802900f22010d00410121050c010b2002200410ff01200121050b20032903800f211020032902940f210c200341880f6a2903002111024020032802c40c450d002002102e0b200341b8016a200341c0116a108404200341800f6a20032802b801220220032802c0012206108504024020032d00a411220741024622040d002002200610ff010b200c420020011b210f20034190056a200341800f6a41a40210e9081a200341f0046a41176a2206200341bc116a280000360000200341f0046a41106a2208200341b5116a290000370300200341f0046a41086a2209200341ad116a290000370300200320032900a5113703f004024020040d00200341c8026a20034190056a41a40210e9081a200341a8026a41176a2006280000360000200341a8026a41106a2008290300370300200341a8026a41086a2009290300370300200320032903f0043703a802024020032802bc01450d002002102e0b2010420020011b210e2011420020011b210d200341f0096a41066a200341c8026a41a40210e9081a200341c0076a200341f0096a41aa0210e9081a20034188026a41176a2201200341a8026a41176a28000036000020034188026a41106a2202200341a8026a41106a29030037030020034188026a41086a2204200341a8026a41086a290300370300200320032903a80237038802200341c00c6a200341c0076a41066a41a40210e9081a200341c00c6a41a4026a20073a0000200341e50e6a200329038802370000200341ed0e6a2004290300370000200341f50e6a2002290300370000200341fc0e6a2001280000360000200341c00c6a41086a290300211220032903c00c211120032802d00c210602400240200341d80c6a280200220741057422020d004200210c420021100c010b200641106a21014200210c420021100340200141086a2903004200200141786a29030042015122041b20107c2001290300420020041b2210200c7c220c201054ad7c2110200141206a2101200241606a22020d000b0b2012200d7c2011200e7c220e201154ad7c20107c200e200c7c220d200e54ad7c210e0240200f4220882212a72201450d0020014105742102200521010340200341800f6a200110d70320032802800f220420032802880f10ff01024020032802840f450d002004102e0b200141206a2101200241606a22020d000b0b200341f0006a200341c0116a200d200e10cb022003290370210c2003200341f0006a41086a29030022103703880f2003200c3703800f200c2010844200520d032003200341800f6a3602f009200341f0096a10cc020c040b024020032802bc01450d002002102e0b200341800f6a4103108304200320032900810f3703e8012003200341880f6a2800003600ef0120032d00800f2101200f42ffffff3f83500d012005102e0c010b410121010b200320032800a0013602d001200320032903e8013703d801200320032800ef013600df012003200341a3016a2800003600d301200041186a41003a000020004200370308200020032802d0013600192000411c6a20032800d301360000200041206a20013a0000200020032903d801370021200041286a20032800df01360000200042013703000c160b200342f0f2bda1a7ee9cb9f9003703f009200341800f6a200341f0096a10cd02200341e0006a200341800f6a200c201010fd01200341800a6a200341e0006a41086a290300221320107d20032903602211200c54ad7d201020137d200c201154ad7d2011200c56201320105620132010511b22011b37030020032011200c7d200c20117d20011b3703f80920032001ad3703f009200341f0096a41086a21020240024020010d00200320023602c007200341c0076a10cc020c010b200320023602c007200341c0076a10ce020b200341980f6a2010370300200341900f6a200c370300200341880f6a41063a00002003410e3a00800f200341800f6a10fe010b200341b80f6a200e370300200341b00f6a200d370300200341800f6a41086a41023a0000200341890f6a20032903c011370000200341910f6a200341c0116a41086a290300370000200341990f6a200341d0116a290300370000200341a10f6a200341d8116a290300370000200341123a00800f200341800f6a10fe012007ad42e0d4037e201242f0fb8d017e7c200341e40c6a35020042e8077e7c20124280c2d72f7e7c210c200341dc0c6a21010240200341d40c6a28020041ffffff3f71450d002006102e0b200c4288babcd6017c210c200110e3030240200f42ffffff3f83500d002005102e0b200320032800a0013602d0012003200341a3016a2800003600d301200041186a41003a0000200041106a200c37030020004201370308200020032802d0013600192000411c6a20032800d301360000200042003703000c140b200141c0006a2903002110200141386a290300210f200141306a290300210c200141046a280200211741022104200341bc076a41026a22072001410b6a2d00003a0000200341b8016a41086a22082001411c6a290200370300200341b8016a41106a2209200141246a2902003703002003200141096a2f00003b01bc072003200141146a2902003703b801200141086a2d000021052001410c6a2802002106200141106a2802002101200341800f6a41286a200241286a280200360200200341800f6a41206a200241206a290200370300200341800f6a41186a200241186a290200370300200341800f6a41106a220a200241106a290200370300200341800f6a41086a220b200241086a290200370300200320022902003703800f200341c00c6a200341800f6a10c102200341e8016a41086a2215200341c00c6a41146a290200370300200341f5016a2216200341d90c6a290000370000200320032f00c10c3b018402200320032d00c30c3a0086022003200341c00c6a410c6a2902003703e80141012102024002400240024002400240024002400240024020032d00c00c4101460d00200341c00c6a41086a280200210420032802c40c2118200341a00c6a41136a2015290300370000200341a00c6a41186a2016290000370000200320032d0086023a00a20c200320032f0184023b01a00c200320043600a70c200320183600a30c200320032903e8013700ab0c200341f0096a41026a20072d00003a0000200320032f01bc073b01f009200b2008290300370300200a2009290300370300200320032903b8013703800f02400240024020050e03000201020b200341c0076a41026a200341f0096a41026a2d00003a0000200341c00c6a41086a200341800f6a41086a290300370300200341c00c6a410d6a200341800f6a410d6a290000370000200320032f01f0093b01c007200320032903800f3703c00c410021020c010b2001450d002006102e0b20034188026a41136a200341c00c6a41086a29030037000020034188026a41186a2204200341cd0c6a290000370000200320032f01c0073b0188022003200136008f022003200636008b02200320032903c00c370093022003200341c2076a2d00003a008a0220020d02200341c0116a41186a2004290300370300200341c0116a41106a20034188026a41106a290300370300200341c0116a41086a20034188026a41086a29030037030020032003290388023703c011200c4201520d01200341800f6a4109108304200320032900810f3703d8012003200341880f6a2800003600df0120032d00800f21040c030b20054102470d022001450d022006102e0c020b200341c00c6a10810420032802c00c210102400240024020032802c80c20174d0d00200120174106746a22022903004201520d00200241206a200341a00c6a412010ec080d00024020032802c40c41ffffff1f71450d002001102e0b200341e8016a200341c0116a108404200341800f6a20032802e801220120032802f00110850420034190056a200341800f6a41a40210e9081a200341f0046a41086a2202200341ad116a290000370300200341f0046a41106a2204200341b5116a290000370300200341f0046a41176a2205200341bc116a280000360000200320032900a5113703f004024020032d00a41122064102460d00200341c8026a20034190056a41a40210e9081a200341a8026a41176a2005280000360000200341a8026a41106a2004290300370300200341a8026a41086a2002290300370300200320032903f0043703a802024020032802ec01450d002001102e0b200341f0096a41066a200341c8026a41a40210e9081a200341c0076a200341f0096a41aa0210e9081a20034188026a41176a2201200341a8026a41176a28000036000020034188026a41106a2202200341a8026a41106a29030037030020034188026a41086a2204200341a8026a41086a290300370300200320032903a80237038802200341c00c6a200341c0076a41066a41a40210e9081a200341c00c6a41a4026a20063a0000200341e50e6a200329038802370000200341ed0e6a2004290300370000200341f50e6a2002290300370000200341fc0e6a20012800003600004100210120032802d00c2106200341c00c6a41186a28020022070e020803020b024020032802ec01450d002001102e0b200341800f6a410b108304200320032900810f3703d8012003200341880f6a2800003600df0120032d00800f21040c040b200341800f6a410a108304200320032900810f3703d8012003200341880f6a2800003600df0120032d00800f210420032802c40c41ffffff1f71450d032001102e0c030b4100210120072102034020012002410176220420016a2205200620054105746a28020020174b1b2101200220046b220241014b0d000c040b0b4100210120062102200628020022042017470d030c060b410121040b200320032800d0013602b001200320032903d8013703a001200320032800df013600a7012003200341d3016a2800003600b301200041186a41003a000020004200370308200020032802b0013600192000411c6a20032800b301360000200041206a20043a0000200020032903a001370021200041286a20032800a701360000200042013703000c190b200620014105746a220228020022042017460d020b200120042017496a21010b200341800f6a41186a2010370300200341800f6a41106a200f3703002003200c3703880f200320173602800f200341c00c6a41106a2001200341800f6a10ba0120032802d80c21070c020b200720014b0d00200120074180afc400103c000b200620014105746a220141086a2104024020012903084201520d00200341800f6a200341c0116a200341a00c6a200141106a290300200141186a29030041001089040b2004200c37030020022017360200200141186a2010370300200141106a200f3703000b200341e40c6a350200210c200341800f6a200341c00c6a41c00210e9081a200341c0076a200341c0116a10840420032802c807210220032802c0072101200341003602f809200342013703f009200341800f6a200341f0096a10e9032001200220032802f009220420032802f80910b201024020032802f409450d002004102e0b024020032802c407450d002001102e0b0240200341940f6a28020041ffffff3f71450d0020032802900f102e0b200341800f6a411c6a10e303200341800f6a41086a41053a0000200341890f6a20032903c011370000200341910f6a200341c0116a41086a290300370000200341990f6a200341c0116a41106a290300370000200341a10f6a200341c0116a41186a290300370000200341ac0f6a2017360200200341123a00800f200341800f6a10fe01200320032800d0013602b0012003200341d3016a2800003600b301200041186a41003a0000200041106a2007ad42c08b117e200c42e8fcd6007e7c42a8d793d9007c37030020004201370308200020032802b0013600192000411c6a20032800b301360000200042003703000c130b200141086a290300210c200141046a2802002104200341800f6a41286a200241286a280200360200200341800f6a41206a200241206a290200370300200341800f6a41186a200241186a290200370300200341800f6a41106a200241106a290200370300200341800f6a41086a200241086a290200370300200320022902003703800f200341c00c6a200341800f6a10c102200341e8016a41086a2201200341d40c6a290200370300200341f5016a2202200341d90c6a290000370000200320032f00c10c3b018402200320032d00c30c3a0086022003200341cc0c6a2902003703e8010240024020032d00c00c4101460d00200341c00c6a41086a280200210520032802c40c2106200341830a6a2001290300370000200341f0096a41186a2002290000370000200320032d0086023a00f209200320032f0184023b01f009200320053600f709200320063600f309200320032903e8013700fb09200341c0076a1081040240024020032802c807220120044d0d0020032802c007220520044106746a22022903004201520d00200241206a200341f0096a412010ec080d00200520044106746a200c370318410021020c010b200341800f6a410a108304024020032d00800f22024106470d00410021020c010b20032902840f210c20032f00810f20032d00830f411074724108742002722101410121020b200341c00c6a41086a200341c0076a41086a280200360200200320032903c00722103703c00c024002402010a722040d00200341a0026a2204420037030020034198026a2205420037030020034188026a41086a220642003703002003420037038802200341800f6a4188fec60041081081022006200341800f6a41086a2207290000370300200320032900800f37038802200341800f6a41b0afc300410a10810220042007290000370300200520032900800f37030020034188026a412010ff010c010b200341a0026a2205420037030020034198026a2206420037030020034188026a41086a220742003703002003420037038802200341800f6a4188fec60041081081022007200341800f6a41086a2208290000370300200320032900800f37038802200341800f6a41b0afc300410a10810220052008290000370300200620032900800f37030020034188026a200341c00c6a10820420032802c40c41ffffff1f71450d002004102e0b20020d0120032003280090053602c802200320034193056a2800003600cb02200041186a41003a0000200041106a2001ad42f0f5127e4290ddb83f7c37030020004201370308200020032802c8023600192000411c6a20032800cb02360000200042003703000c140b410221010b20032003280090053602c802200320034193056a2800003600cb02200041186a41003a000020004200370308200020032802c8023600192000411c6a20032800cb02360000200041246a200c370200200041206a2001360200200042013703000c120b200141246a280200210541022104200341a00c6a41026a2206200141036a2d00003a0000200341c0076a41086a2207200141146a290000370300200341c0076a410d6a2208200141196a290000370000200320012f00013b01a00c20032001410c6a2900003703c007200141046a2800002109200141086a280000210a200341800f6a41286a200241286a280200360200200341800f6a41206a200241206a290200370300200341800f6a41186a200241186a290200370300200341800f6a41106a200241106a290200370300200341800f6a41086a200241086a290200370300200320022902003703800f200341c00c6a200341800f6a10c102200341b8016a41086a2201200341c00c6a41146a290200370300200341b8016a410d6a2202200341c00c6a41196a290000370000200320032f00c10c3b01e801200320032d00c30c3a00ea012003200341c00c6a410c6a2902003703b8010240024020032d00c00c4101460d00200341c00c6a41086a280200210420032802c40c210b200341830a6a2001290300370000200341f0096a41186a2002290000370000200320032d00ea013a00f209200320032f01e8013b01f009200320043600f7092003200b3600f309200320032903b8013700fb0920034190056a108104200341e8016a41086a2007290300370300200341e8016a410d6a2008290000370000200320032f01a00c3b018402200320062d00003a008602200320032903c0073703e80102400240200328029805220420054d0d0020032802900520054106746a22012903004201520d002003419b026a200341e8016a41086a29030037000020034188026a41186a2202200341f5016a290000370000200320032d0086023a008a02200320032f0184023b0188022003200a36008f022003200936008b02200320032903e80137009302200141206a2201200341f0096a412010ec080d002001200329038802370200200141186a2002290300370200200141106a20034188026a41106a290300370200200141086a20034188026a41086a290300370200410021010c010b200341800f6a410a108304024020032d00800f22014106470d00410021010c010b20032902840f210c20032f00810f20032d00830f411074724108742001722104410121010b200341c00c6a41086a20034190056a41086a280200360200200320032903900522103703c00c024002402010a722020d00200341a0026a2202420037030020034198026a2205420037030020034188026a41086a220642003703002003420037038802200341800f6a4188fec60041081081022006200341800f6a41086a2207290000370300200320032900800f37038802200341800f6a41b0afc300410a10810220022007290000370300200520032900800f37030020034188026a412010ff010c010b200341a0026a2205420037030020034198026a2206420037030020034188026a41086a220742003703002003420037038802200341800f6a4188fec60041081081022007200341800f6a41086a2208290000370300200320032900800f37038802200341800f6a41b0afc300410a10810220052008290000370300200620032900800f37030020034188026a200341c00c6a10820420032802c40c41ffffff1f71450d002002102e0b20010d01200320032800c8023602c0112003200341cb026a2800003600c311200041186a41003a0000200041106a2004ad42f89c137e42a8adef3f7c37030020004201370308200020032802c0113600192000411c6a20032800c311360000200042003703000c130b0b200320032800c8023602c0112003200341cb026a2800003600c311200041186a41003a000020004200370308200020032802c0113600192000411c6a20032800c311360000200041246a200c370200200041206a2004360200200042013703000c110b200141106a290300210c200141086a2903002110200141046a2802002104200341800f6a41286a200241286a280200360200200341800f6a41206a200241206a290200370300200341800f6a41186a200241186a290200370300200341800f6a41106a200241106a290200370300200341800f6a41086a200241086a290200370300200320022902003703800f200341c00c6a200341800f6a10c102200341e8016a41086a2201200341d40c6a290200370300200341f5016a2202200341d90c6a290000370000200320032f00c10c3b018402200320032d00c30c3a0086022003200341cc0c6a2902003703e8010240024020032d00c00c4101460d00200341c00c6a41086a280200210520032802c40c2106200341830a6a2001290300370000200341f0096a41186a2002290000370000200320032d0086023a00f209200320032f0184023b01f009200320053600f709200320063600f309200320032903e8013700fb09200341c0076a1081040240024020032802c807220120044d0d0020032802c00720044106746a22022903004201520d00200241206a200341f0096a412010ec080d00200241086a220220103703002002200c370308410021020c010b200341800f6a410a108304024020032d00800f22024106470d00410021020c010b20032902840f210c20032f00810f20032d00830f411074724108742002722101410121020b200341c00c6a41086a200341c0076a41086a280200360200200320032903c00722103703c00c024002402010a722040d00200341a0026a2204420037030020034198026a2205420037030020034188026a41086a220642003703002003420037038802200341800f6a4188fec60041081081022006200341800f6a41086a2207290000370300200320032900800f37038802200341800f6a41b0afc300410a10810220042007290000370300200520032900800f37030020034188026a412010ff010c010b200341a0026a2205420037030020034198026a2206420037030020034188026a41086a220742003703002003420037038802200341800f6a4188fec60041081081022007200341800f6a41086a2208290000370300200320032900800f37038802200341800f6a41b0afc300410a10810220052008290000370300200620032900800f37030020034188026a200341c00c6a10820420032802c40c41ffffff1f71450d002004102e0b20020d0120032003280090053602c802200320034193056a2800003600cb02200041186a41003a0000200041106a2001ad42a0e6127e42e0efb73f7c37030020004201370308200020032802c8023600192000411c6a20032800cb02360000200042003703000c120b410221010b20032003280090053602c802200320034193056a2800003600cb02200041186a41003a000020004200370308200020032802c8023600192000411c6a20032800cb02360000200041246a200c370200200041206a2001360200200042013703000c100b200141046a2802002106200341800f6a41286a200241286a280200360200200341800f6a41206a200241206a290200370300200341800f6a41186a200241186a290200370300200341800f6a41106a200241106a290200370300200341800f6a41086a200241086a290200370300200320022902003703800f200341c00c6a200341800f6a10c10220034188026a41086a2201200341c90c6a29000037030020034188026a41106a2202200341d10c6a29000037030020034188026a41186a2204200341d90c6a290000370300200320032900c10c3703880202400240024002400240024002400240024020032d00c00c4101460d00200341c0116a41186a2004290300370300200341c0116a41106a2002290300370300200341c0116a41086a200129030037030020032003290388023703c011200341a00c6a200341c0116a108404200341800f6a20032802a00c220120032802a80c10850420034190056a200341800f6a41a40210e9081a200341f0046a41086a200341ad116a290000370300200341f0046a41106a200341b5116a290000370300200341f0046a41176a2202200341bc116a280000360000200320032900a5113703f004024020032d00a41122044102460d00200341c8026a20034190056a41a40210e9081a200341a8026a41176a2002280000360000200341a8026a41106a2202200341f0046a41106a290300370300200341a8026a41086a2205200341f0046a41086a290300370300200320032903f0043703a802024020032802a40c450d002001102e0b200341f0096a41066a200341c8026a41a40210e9081a200341c0076a200341f0096a41aa0210e9081a20034188026a41176a2201200341a8026a41176a28000036000020034188026a41106a2207200229030037030020034188026a41086a22022005290300370300200320032903a80237038802200341c00c6a200341c0076a41066a41a40210e9081a200341c00c6a41a4026a20043a0000200341e50e6a200329038802370000200341ed0e6a2002290300370000200341f50e6a2007290300370000200341fc0e6a200128000036000020032802d00c2107200341d80c6a28020022080e020403020b024020032802a40c450d002001102e0b200341800f6a4106108304200320032900810f3703b8012003200341880f6a2800003600bf0120032d00800f21010c070b410221010c060b4100210120082102034020012002410176220420016a2205200720054105746a28020020064b1b2101200220046b220241014b0d000b200720014105746a2802002006470d01200820014d0d020c030b4100210120072802002006460d020b200341800f6a4102108304200320032900810f3703b8012003200341880f6a2800003600bf010c020b200120081046000b200720014105746a220241186a2903002110200241106a290300210f2002290308210c2002200241206a20082001417f736a41057410ea081a20032008417f6a22013602d80c200c4201510d02200341800f6a4108108304200320032900810f3703b8012003200341800f6a41086a2800003600bf010b20032d00800f21010240200341d40c6a28020041ffffff3f71450d002007102e0b200341dc0c6a10e3030b200320032800d8013602a001200320032903b8013703e801200320032800bf013600ef012003200341db016a2800003600a301200041186a41003a000020004200370308200020032802a0013600192000411c6a20032800a301360000200041206a20013a0000200020032903e801370021200041286a20032800ef01360000200042013703000c100b200341d0006a200341c0116a200f201010fb01200341e40c6a350200210c200341800f6a200341c00c6a41c00210e9081a200341c0076a200341c0116a10840420032802c807210420032802c0072102200341003602f809200342013703f009200341800f6a200341f0096a10e9032002200420032802f009220520032802f80910b201024020032802f409450d002005102e0b024020032802c407450d002002102e0b0240200341940f6a28020041ffffff3f71450d0020032802900f102e0b200341800f6a411c6a10e303200341800f6a41086a41043a0000200341890f6a20032903c011370000200341910f6a200341c0116a41086a290300370000200341990f6a200341c0116a41106a290300370000200341a10f6a200341c0116a41186a290300370000200341ac0f6a2006360200200341123a00800f200341800f6a10fe01200320032800d8013602a0012003200341db016a2800003600a301200041186a41003a0000200041106a2001ad4288800d7e200c42c0b6d6007e7c42e8dfb4d4007c37030020004201370308200020032802a0013600192000411c6a20032800a301360000200042003703000c0f0b200141106a290300210c200141086a2903002110200141046a2802002101200341800f6a41286a200241286a280200360200200341800f6a41206a200241206a290200370300200341800f6a41186a200241186a290200370300200341800f6a41106a200241106a290200370300200341800f6a41086a200241086a290200370300200320022902003703800f200341c00c6a200341800f6a10c10220034188026a41086a2202200341c90c6a29000037030020034188026a41106a2204200341d10c6a29000037030020034188026a41186a2205200341d90c6a290000370300200320032900c10c37038802024002400240024002400240024002400240024002400240024020032d00c00c4101460d00200341c0116a41186a2005290300370300200341c0116a41106a2004290300370300200341c0116a41086a200229030037030020032003290388023703c011200341b8016a10810420032802b801210420032802c00120014d0d01200420014106746a22022903004201520d0102402002290308201056200241106a2903002210200c562010200c511b450d00200341800f6a410510830420032f00810f20032d00830f4110747221010c0b0b200341a00c6a200341c0116a108404200341800f6a20032802a00c220520032802a80c10850420034190056a200341800f6a41a40210e9081a200341f0046a41086a200341ad116a290000370300200341f0046a41106a200341b5116a290000370300200341f0046a41176a2206200341bc116a280000360000200320032900a5113703f00402400240024020032d00a41122074102460d00200241086a2109200341c8026a20034190056a41a40210e9081a200341a8026a41176a2006280000360000200341a8026a41106a2202200341f0046a41106a290300370300200341a8026a41086a2206200341f0046a41086a290300370300200320032903f0043703a802024020032802a40c450d002005102e0b200341f0096a41066a200341c8026a41a40210e9081a200341c0076a200341f0096a41aa0210e9081a20034188026a41176a2205200341a8026a41176a28000036000020034188026a41106a2208200229030037030020034188026a41086a22022006290300370300200320032903a80237038802200341c00c6a200341c0076a41066a41a40210e9081a200341c00c6a41a4026a20073a0000200341e50e6a200329038802370000200341ed0e6a2002290300370000200341f50e6a2008290300370000200341fc0e6a2005280000360000200941086a290300210c200929030021104100210220032802d00c2108200341c00c6a41186a280200220a0e020702010b024020032802a40c450d002005102e0b200341800f6a410610830420032f00810f20032d00830f4110747221010c0c0b41002102200a2105034020022005410176220620026a2207200820074105746a28020020014b1b2102200520066b220541014b0d000c040b0b4100210220082106200828020022052001470d030c060b410221020c0b0b200341800f6a410410830420032f00810f20032d00830f4110747221010c080b200820024105746a220628020022052001460d020b200220052001496a21020b200341800f6a41186a200c370300200341900f6a2010370300200342013703880f200320013602800f200341c00c6a41106a2002200341800f6a10ba010c020b200a20024b0d002002200a41f0aec400103c000b02400240200820024105746a2202280208417f6a0e06000101010100010b200341800f6a410710830420032f00810f20032d00830f41107472210120032902840f210c20032d00800f21020c020b200241086a420137030020062001360200200241186a200c370300200241106a20103703000b200341800f6a200341c0116a2009290300200941086a29030010c30220032d00800f22024106460d0120032f00810f20032d00830f41107472210120032902840f210c0b0240200341d40c6a28020041ffffff3f71450d0020032802d00c102e0b200341dc0c6a10e3030c020b200341e40c6a350200210c20033502d80c2110200341800f6a200341c00c6a41c00210e9081a200341c0076a200341c0116a10840420032802c807210520032802c0072102200341003602f809200342013703f009200341800f6a200341f0096a10e9032002200520032802f009220620032802f80910b201024020032802f409450d002006102e0b024020032802c407450d002002102e0b0240200341940f6a28020041ffffff3f71450d0020032802900f102e0b200341800f6a411c6a10e303200341800f6a41086a41033a0000200341890f6a20032903c011370000200341910f6a200341c0116a41086a290300370000200341990f6a200341c0116a41106a290300370000200341a10f6a200341c0116a41186a290300370000200341ac0f6a2001360200200341123a00800f201042e0a4137e200c4290c3d7007e7c42c8a3e7e2007c210c200341800f6a10fe01024020032802bc0141ffffff1f71450d002004102e0b200320032800e8013602d8012003200341e8016a41036a2800003600db01200041186a41003a0000200041106a200c37030020004201370308200020032802d8013600192000411c6a20032800db01360000200042003703000c110b20032902840f210c20032d00800f21020b20032802bc0141ffffff1f71450d002004102e0b200320032800e8013602d8012003200341eb016a2800003600db01200041236a20014110763a0000200020013b0021200041186a41003a000020004200370308200020032802d8013600192000411c6a20032800db013600002000200c370024200041206a20023a0000200042013703000c0e0b200341800f6a41286a200241286a280200360200200341800f6a41206a200241206a290200370300200341800f6a41186a200241186a290200370300200341800f6a41106a200241106a290200370300200341800f6a41086a200241086a290200370300200320022902003703800f200341c00c6a200341800f6a10c10220034188026a41086a2201200341c90c6a29000037030020034188026a41106a2202200341d10c6a29000037030020034188026a41186a2204200341d90c6a290000370300200320032900c10c37038802410121050240024020032d00c00c4101460d00200341c0116a41186a2004290300370300200341c0116a41106a2002290300370300200341c0116a41086a200129030037030020032003290388023703c011200341c00c6a200341c0116a108704200341800f6a20032802c00c220220032802c80c2204108804024020032802900f2201450d002002200410ff01200121050b20032903800f211020032902940f210c200341880f6a2903002111024020032802c40c450d002002102e0b200341a00c6a200341c0116a108404200341800f6a20032802a00c220220032802a80c2206108504024020032d00a411220741024622040d002002200610ff010b200c420020011b210f20034190056a200341800f6a41a40210e9081a200341f0046a41176a2206200341bc116a280000360000200341f0046a41106a2208200341b5116a290000370300200341f0046a41086a2209200341ad116a290000370300200320032900a5113703f004024020040d00200341c8026a20034190056a41a40210e9081a200341a8026a41176a2006280000360000200341a8026a41106a2008290300370300200341a8026a41086a2009290300370300200320032903f0043703a802024020032802a40c450d002002102e0b2010420020011b210e2011420020011b210d200341f0096a41066a200341c8026a41a40210e9081a200341c0076a200341f0096a41aa0210e9081a20034188026a41176a2201200341a8026a41176a28000036000020034188026a41106a2202200341a8026a41106a29030037030020034188026a41086a2204200341a8026a41086a290300370300200320032903a80237038802200341c00c6a200341c0076a41066a41a40210e9081a200341c00c6a41a4026a20073a0000200341e50e6a200329038802370000200341ed0e6a2004290300370000200341f50e6a2002290300370000200341fc0e6a2001280000360000200341c00c6a41086a290300211220032903c00c211120032802d00c210602400240200341d80c6a280200220741057422020d004200210c420021100c010b200641106a21014200210c420021100340200141086a2903004200200141786a29030042015122041b20107c2001290300420020041b2210200c7c220c201054ad7c2110200141206a2101200241606a22020d000b0b2012200d7c2011200e7c220e201154ad7c20107c200e200c7c220c200e54ad7c21100240200f4220882211a72201450d0020014105742102200521010340200341800f6a200110d70320032802800f220420032802880f10ff01024020032802840f450d002004102e0b200141206a2101200241606a22020d000b0b200341c0006a200341c0116a200c201010fb01200341b80f6a2010370300200341b00f6a200c370300200341800f6a41086a41013a0000200341890f6a20032903c011370000200341910f6a200341c0116a41086a290300370000200341990f6a200341d0116a290300370000200341a10f6a200341d8116a290300370000200341123a00800f200341800f6a10fe012007ad42a084097e201142b0ba8e017e7c200341e40c6a35020042d8ac2d7e7c20114280c2d72f7e7c210c200341dc0c6a21010240200341d40c6a28020041ffffff3f71450d002006102e0b200c42d0faca90017c210c200110e3030240200f42ffffff3f83500d002005102e0b200320032800d8013602a0012003200341db016a2800003600a301200041186a41003a0000200041106a200c37030020004201370308200020032802a0013600192000411c6a20032800a301360000200042003703000c100b024020032802a40c450d002002102e0b200341800f6a4103108304200320032900810f3703b8012003200341880f6a2800003600bf0120032d00800f2101200f42ffffff3f83500d012005102e0c010b410221010b200320032800d8013602a001200320032903b8013703e801200320032800bf013600ef012003200341db016a2800003600a301200041186a41003a000020004200370308200020032802a0013600192000411c6a20032800a301360000200041206a20013a0000200020032903e801370021200041286a20032800ef01360000200042013703000c0d0b2001410c6a2802002107200141086a2802002108200141046a280200211b200341800f6a41286a200241286a280200360200200341800f6a41206a200241206a290200370300200341800f6a41186a200241186a290200370300200341800f6a41106a200241106a290200370300200341800f6a41086a200241086a290200370300200320022902003703800f200341c00c6a200341800f6a10c102200341b8016a41086a2201200341d40c6a290200370300200341c5016a2202200341d90c6a290000370000200320032f00c10c3b01e801200320032d00c30c3a00ea012003200341c00c6a410c6a2902003703b801024020032d00c00c4101460d00200341c00c6a41086a280200210420032802c40c2105200341d3076a2001290300370000200341c0076a41186a2002290000370000200320032d00ea013a00c207200320032f01e8013b01c007200320043600c707200320053600c307200320032903b8013700cb07200341800f6a200341c0076a10840420032802800f220220032802880f108f022101024020032802840f450d002002102e0b024020010d00200341800f6a410210830420032f00810f20032d00830f4110747221040c040b0240200741e500490d00200341800f6a410110830420032f00810f20032d00830f4110747221040c040b200341c00c6a200341c0076a108704200341800f6a20032802c00c220120032802c80c108804200341800f6a41086a290300210f20032802900f211c20032903800f211020032902940f210c024020032802c40c450d002001102e0b200c4200201c1b210d201c4101201c1b211d200341306a2007ad42004280f19384eb05420010e808200341306a41086a29030021112003290330210e0240200741c4006c2205450d00200341ac0f6a2101200341a10f6a2104200341800f6a410b6a210a20034188026a410b6a210b201b21020340200341c00c6a200210d703200341800f6a20032802c00c220920032802c80c10860420034188026a41086a200341800f6a41086a29030037030020034188026a41106a200341800f6a41106a29030037030020034188026a41186a200341800f6a41186a290300370300200341bc076a41026a2215200441026a22162d00003a0000200341a00c6a41086a2217200141086a2218290000370300200341a00c6a41106a2219200141106a221a290000370300200320032903800f37038802200320042f00003b01bc07200320012900003703a00c0240024020032d00a00f22064106460d0020032802a80f211e20032802a40f211f200341e8016a41086a2220200b41086a290000370300200341e8016a410d6a2221200b410d6a290000370000200341b8076a41026a222220152d00003a0000200341f0046a41106a22152019290300370300200341f0046a41086a22192017290300370300200320032d008a023a008602200320032f0188023b018402200320032f01bc073b01b807200320032903a00c3703f0042003200b2900003703e801200328008b022117200328008f022123024020032802c40c450d002009102e0b200a20032903e801370000200420032f01b8073b0000200a41086a2020290300370000200a410d6a2021290000370000201620222d00003a0000200320032d0086023a00820f200320032f0184023b01800f200320233600870f200320173600830f200320063a00a00f200120032903f00437000020182019290300370000201a20152903003700002003201e3602a80f2003201f3602a40f200341800f6a200341c0076a412010ec082109024020064101470d00201e450d00201f102e0b2009450d01200341800f6a410e10830420032f00810f20032d00830f41107472210420032902840f210c20032d00800f21050c060b20032802c40c450d002009102e0b200241c4006a2102200541bc7f6a22050d000b0b0240024020104200201c1b2210200e5a200f4200201c1b220c20115a200c20115122011b0d00200341800f6a200341c0076a200e20107d2011200c7d200e201054ad7d10c30220032d00800f22054106460d0120032f00810f20032d00830f41107472210420032902840f210c0c040b2010200e58200c20115820011b0d00200341206a200341c0076a2010200e7d200c20117d2010200e54ad7d10fb010b0240200d4220882212a72201450d0020014105742102201d21010340200341800f6a200110d70320032802800f220420032802880f10ff01024020032802840f450d002004102e0b200141206a2101200241606a22020d000b0b200741c4006c220441c4006d220141ffffff3f712001470d0120014105742202417f4c0d010240024020020d00410121240c010b2002102c2224450d0b0b02400240024002402002410576222520014f0d00200241047622052001200520014b1b22054104200541044b1b220541ffffff3f712005462106200541057421050240024020020d00200341003602800f0c010b200341880f6a4101360200200320023602840f200320243602800f0b200341c00c6a20052006200341800f6a107d200341c80c6a280200210220032802c00c4101460d0120032802c40c2124200241057621250b201b20046a2226201b470d0141002106201b21050c020b20020d0c0c030b2007410274417c6a41027641016a2127200341800f6a41216a210441002106200341c00c6a411f6a2107201b21012024210202400340200141186a290200210c200141176a2d00002109200141166a2d0000210a200141146a2f0100210b200141136a2d00002115200141126a2d00002116200141106a2f010021172001410f6a2d000021182001410e6a2d000021192001410c6a2f0100211a2001410b6a2d0000211e2001410a6a2d0000211f200141086a2f01002120200141076a2d00002121200141066a2d00002122200141046a2f01002123200141036a2d0000211c200141026a2d00002128200141206a2d0000210520012f010021292007200141c0006a280000360000200341c00c6a41186a222a200141396a290000370300200341c00c6a41106a222b200141316a290000370300200341c00c6a41086a222c200141296a2900003703002003200141216a2900003703c00c024020054106470d00200141c4006a21050c020b2003200c3703880a200320093a00870a2003200a3a00860a2003200b3b01840a200320153a00830a200320163a00820a200320173b01800a200320183a00ff09200320193a00fe092003201a3b01fc092003201e3a00fb092003201f3a00fa09200320203b01f809200320213a00f709200320223a00f609200320233b01f4092003201c3a00f309200320283a00f209200320293b01f009200341800f6a41186a200341c0076a41186a290300370300200341800f6a41106a200341c0076a41106a290300370300200341800f6a41086a200341c0076a41086a290300370300200420032903c00c370000200441086a202c290300370000200441106a202b290300370000200441186a202a2903003700002004411f6a2007280000360000200320032903c0073703800f200320053a00a00f20034190056a200341f0096a10d7032003280290052205200328029805200341800f6a108b040240200328029405450d002005102e0b024020032d00a00f4101470d0020032802a80f450d0020032802a40f102e0b200341f0096a41086a290300210c200341f0096a41106a290300211020032903f009210f200241186a200341f0096a41186a290300370000200241106a2010370000200241086a200c3700002002200f370000200641016a2106200241206a2102200141c4006a22012026470d000b20262105202721060b202620056b220441c4006d21010b02402004450d00200141c4006c2102200541286a210103400240200141786a2d00004101470d002001280200450d002001417c6a280200102e0b200141c4006a2101200241bc7f6a22020d000b0b02402008450d00200841c4006c450d00201b102e0b0240024020060d00200341800f6a200341c0076a10870420032802800f220120032802880f10ff01024020032802840f450d002001102e0b201242e0aa8e017e20124280c2d72f7e7c4290cf9fb8017c210c2025450d012024102e0c010b200341f0096a200341c0076a10870420064105744114722201417f4c0d0220032802f809210520032802f00921042001102c2202450d0b200341003602c80c200320013602c40c200320023602c00c200320113703880f2003200e3703800f200341c00c6a200341800f6a411010742006200341c00c6a107620064105742102202421010340200341c00c6a200141201074200141206a2101200241606a22020d000b2004200520032802c00c220120032802c80c10b201024020032802c40c450d002001102e0b024020032802f409450d002004102e0b02402025450d002024102e0b201242e0aa8e017e20124280c2d72f7e7c2006ad220c42b8fea8037e200c42c0f0f50b7e7c200c4280c2d72f7e7c7c4290cf9fb8017c210c0b0240200d42ffffff3f83500d00201d102e0b200320032800c8023602c0112003200341cb026a2800003600c311200041186a41003a0000200041106a200c37030020004201370308200020032802c0113600192000411c6a20032800c311360000200042003703000c0d0b410221050c030b1038000b200d42ffffff3f83500d01201d102e0c010b20032902840f210c20032d00800f21050b02402007450d00200741c4006c2102201b41286a210103400240200141786a2d00004101470d002001280200450d002001417c6a280200102e0b200141c4006a2101200241bc7f6a22020d000b0b02402008450d00200841c4006c450d00201b102e0b200320032800c8023602c0112003200341cb026a2800003600c311200041236a20044110763a0000200020043b0021200041186a41003a000020004200370308200020032802c0113600192000411c6a20032800c3113600002000200c370024200041206a20053a0000200042013703000c080b410221020b200341f0096a10e3030c020b024020032802c411450d002001102e0b200341d80c6a410036020042002111200342003703c80c200342003703c00c200342083703d00c200341dc0c6a200341f0096a41a00210e9081a420021100b2003200f4280fad5d5f2057c220c3703c00c2003200e200c200f54ad7c220f3703c80c0240200c201158200f201058200f20105122011b0d00200341800f6a200341c0076a200c20117d200f20107d200c201154ad7d10c30220032d00800f22024106460d0020032d00830f411074210120032f00810f210420032902840f210c0240200341d40c6a28020041ffffff3f71450d0020032802d00c102e0b20042001722101200341dc0c6a10e3030c010b02402011200c582010200f5820011b0d002003200341c0076a2011200c7d2010200f7d2011200c54ad7d10fb010b200341d80c6a350200210c200341800f6a200341c00c6a41c00210e9081a200341c8026a200341c0076a10840420032802d002210220032802c802210120034100360298052003420137039005200341800f6a20034190056a10e90320012002200328029005220420032802980510b2010240200328029405450d002004102e0b024020032802cc02450d002001102e0b0240200341940f6a28020041ffffff3f71450d0020032802900f102e0b200341800f6a411c6a10e303200341800f6a41086a41003a0000200341890f6a20032903c007370000200341910f6a200341c0076a41086a290300370000200341990f6a200341c0076a41106a290300370000200341a10f6a200341c0076a41186a290300370000200341123a00800f200341800f6a10fe01200320032800a00c3602b8012003200341a30c6a2800003600bb01200041186a41003a0000200041106a200c4288f70f7e200d4280aec4007e7c4280e7a9d6007c37030020004201370308200020032802b8013600192000411c6a20032800bb01360000200042003703000c040b200320032800a00c3602b8012003200341a30c6a2800003600bb01200041236a20014110763a0000200020013b0021200041186a41003a000020004200370308200020032802b8013600192000411c6a20032800bb013600002000200c370024200041206a20023a0000200042013703000c030b1036000b0b200320032800c8023602c0112003200341cb026a2800003600c311200041186a41003a000020004200370308200020032802c0113600192000411c6a20032800c311360000200041286a2001360200200041246a2002360200200041206a2004360200200042013703000b200341e0116a24000bca0a06067f017e037f017e047f067e230041f0016b22012400200141206a22024200370300200141186a22034200370300200141086a41086a420037030020014200370308200141086a4188fec6004108108102200141c8016a41b0afc300410a1081022002200141c8016a41086a290000370300200320012900c8013703002001412036022c2001200141086a360228200141306a200141086a412010ed02024002400240200128023022040d00410021030c010b200128023421052001200141306a41086a280200360244200120043602402001200141c0006a10ab010240024020012802000d00024002402001280204220620012802444106762202200220064b1b22024106742203417f4c0d000240024020020d00410821030c010b2003102c2203450d060b2002ad2107024002402006450d00200141c8016a4101722108034020012802442202450d04200128024022092d0000210a20012002417f6a3602442001200941016a3602404200210b02400240200a0e020100060b200141c8016a200141c0006a10930120012d00c8014101460d05200141a8016a41186a220c200841186a290000370300200141a8016a41106a220d200841106a290000370300200141a8016a41086a220e200841086a290000370300200120082900003703a801200128024422024110490d0520012001280240220941106a220a3602402001200241706a220f360244200f4108490d05200941086a2900002110200929000021112001200241686a3602442001200a41086a360240200a290000220b4280025a0d0520014188016a41186a200c29030037030020014188016a41106a200d29030037030020014188016a41086a200e290300370300200120012903a80137038801200b42ff018321124201210b0b200141e8006a41186a20014188016a41186a2903002213370300200141e8006a41106a20014188016a41106a2903002214370300200141e8006a41086a20014188016a41086a2903002215370300200141c8006a41086a22092015370300200141c8006a41106a220a2014370300200141c8006a41186a220f20133703002001200129038801221337036820012013370348024020074220882213a722022007a7470d00200241016a220c2002490d042002410174220d200c200c200d491b220c4104200c41044b1b220c41ffffff1f71200c46410374210d200c410674210c0240024020020d00200141003602c8010c010b200141083602d001200120033602c801200120134206863e02cc010b200141a8016a200c200d200141c8016a107d20012802b001210c20012802a8014101460d0320012802ac012103200742808080807083200c410676ad8421070b200320024106746a220220113703082002200b370300200241106a2010370300200241186a2012370300200241206a2001290348370300200241286a2009290300370300200241306a200a290300370300200241386a200f29030037030020074280808080107c21072006417f6a22060d000b0b2003450d030c040b200c0d050b1038000b0240200742ffffff1f83500d002003102e0b0b41002103200141003602b001200142013703a8012001410a36028c012001200141286a360288012001200141a8016a360268200141dc016a4101360200200142013702cc01200141909dc5003602c801200120014188016a3602d801200141e8006a419cebc000200141c8016a103d1a20012802a80120012802b00110ef0220012802ac01450d0020012802a801102e0b2005450d002004102e0b0240024020030d0020004100360208200042083702000c010b20002007370204200020033602000b200141f0016a24000f0b1036000b8b0101047f230041106b2202240002400240200128020822034106744104722204417f4c0d00200128020021012004102c2205450d01200241003602082002200436020420022005360200200320021076200120032002109a012000412020022802002201200228020810b20102402002280204450d002001102e0b200241106a24000f0b1038000b1036000bd80301047f230041c0006b2202240041bbebc2002103410f21044108210502400240024002400240024002400240024002400240024002400240024002400240200141ff01710e11000102030405060708090a0b0c0d0e0f10000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a4198a6cc001044000b41a9ebc200210341122105410021040c0e0b418be7c400210341012104410821050c0d0b41a1ebc200210341022104410821050c0c0b4197ebc2002103410a2105410321040c0b0b418debc2002103410a2105410421040c0a0b4183ebc2002103410a2105410521040c090b41f4eac2002103410f2105410621040c080b41e6eac2002103410e2105410721040c070b41d6eac200210341102105410821040c060b41caeac2002103410c2105410921040c050b41bdeac2002103410d2105410a21040c040b41b0eac2002103410d2105410b21040c030b419feac200210341112105410c21040c020b41faa0c5002103410e2105410d21040c010b4199eac200210341062105410e21040b20004183383b0100200041086a2005360200200041046a2003360200200041026a20043a0000200241c0006a24000bb40201037f230041e0006b22022400200241086a4188fec6004108108102200241186a41d0adc300410a108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241c8006a41086a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000baa37050e7f027e017f027e247f230041f0086b220324002003200236021c20032001360218200341206a2001200210ed0202400240200328022022040d00200041023a00a4020c010b200328022421052003200341206a41086a2802003602bc02200320043602b8022003200341b8026a3602e805200341106a200341e8056a10d8040240024020032802100d004108210602400240200328021422074180012007418001491b2208450d002008410574102c2206450d010b024002400240024002400240024020070d00410021070c010b20034198086a41106a210920034198086a41046a210a20034198086a41086a210b4100210c4100210d4100210e0340200341003602980820034198086a20032802b802220f20032802bc022201410420014104491b220210e9081a2003200120026b22013602bc022003200f20026a220f3602b802024020034198086a20026a2210200a460d0020104100410420026b10eb081a0b2003350298082111200341003a0098070240200120014100472202490d0020034198076a200f200210e9081a2003200120026b22103602bc022003200f20026a22023602b80202400240024020010d00420021120c010b4200211202400240024002400240024020032d0098070e0707000102030405080b20034198086a2010411020104110491b22016a41004100411020016b22132001410f4b1b10eb08210f20034198086a2002200110e9081a2003201020016b3602bc022003200220016a3602b8020240200f2009460d00200f4100201310eb081a0b200b29030021142003290398082115420121120c060b420221120c040b420321120c030b420421120c020b420521120c010b420621120b0b0240200e2008470d00200d200e41016a2201200d20014b1b22014104200141044b1b220141ffffff3f7120014641037421022001410574210102400240200e0d0020034100360298080c010b200341083602a0082003200c36029c0820032006360298080b200341f0076a2001200220034198086a107d20032802f8072101024020032802f0074101470d002001450d050c0a0b20032802f4072106200141057621080b2006200c6a22012011370300200141186a2014370300200141106a2015370300200141086a2012370300200c41206a210c200d41026a210d2007200e41016a220e460d020c010b0b410221010240200841ffffff3f710d000c090b2006102e0c080b2006450d06200341a0086a220e4200370300200342003703980820034198086a20032802b802220c20032802bc022202411020024110491b220110e9081a2003200220016b3602bc022003200c20016a3602b802024020014110460d0020034198086a20016a4100411020016b10eb081a0b200e29030021152003290398082112200341086a200341e8056a10d80420032802080d0302400240200328020c220c4138200c4138491b22020d004104210e0c010b200241c8006c102c220e450d060b0240200c0d004100210c0c020b200341f0076a410c6a2116200341f0076a4101722117410021104100210d0340200341f0076a200341e8056a10eb0302400240024020032d00f007220f4106460d00200341c8056a41026a2209201741026a2d00003a0000200341d8076a41086a220b201641086a290200370300200341d8076a41106a2213201641106a290200370300200320172f00003b01c805200320162902003703d80720032802f407210a20032802f807210120034198086a200341e8056a10eb0320032d0098084106470d01200f4101470d002001450d00200a102e0b4106210f0c010b200341a8056a41026a20092d00003a0000200341c0076a41086a200b290300370300200341c0076a41106a201329030037030020034198076a41086a20034198086a41086a29030037030020034198076a41106a20034198086a41106a29030037030020034198076a41186a20034198086a41186a29030037030020034198076a41206a20034198086a41206a280200360200200320032f01c8053b01a805200320032903d8073703c007200320032903980837039807200a2118200121190b20034188056a41026a2201200341a8056a41026a2d00003a000020034180076a41086a220a200341c0076a41086a29030037030020034180076a41106a2209200341c0076a41106a290300370300200341d8066a41086a220b20034198076a41086a290300370300200341d8066a41106a221320034198076a41106a290300370300200341d8066a41186a221a20034198076a41186a290300370300200341d8066a41206a221b20034198076a41206a280200360200200320032f01a8053b018805200320032903c0073703800720032003290398073703d8060240200f4106460d00200341e8046a41026a221c20012d00003a0000200341c0066a41086a221d200a290300370300200341c0066a41106a220a200929030037030020034198066a41086a2209200b29030037030020034198066a41106a220b201329030037030020034198066a41186a2213201a29030037030020034198066a41206a221a201b280200360200200320032f0188053b01e80420032003290380073703c006200320032903d806370398060240200d2002470d00200241016a22012002490d032002410174221b2001201b20014b1b22014104200141044b1bad42c8007e2214422088a74541027421012014a7211b0240024020020d0020034100360298080c010b200341043602a0082003200e360298082003200241c8006c36029c080b200341f0076a201b200120034198086a107d20032802f8072101024020032802f0074101470d0020010d090c040b20032802f407210e200141c8006e21020b200e20106a2201200f3a0000200141086a2019360000200141046a2018360000200141036a201c2d00003a0000200141016a20032f01e8043b00002001410c6a20032903c006370000200141146a201d2903003700002001411c6a200a290300370000200141346a200b2903003700002001412c6a20092903003700002001413c6a2013290300370000200141246a200329039806370000200141c4006a201a280200360000201041c8006a2110200c200d41016a220d460d030c010b0b0240200d450d00200e20106a210c200e21010340024020012d00004101470d00200141086a280200450d00200141046a280200102e0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102e0b200c200141c8006a2201470d000b0b2002450d03200241c8006c0d020c030b1038000b200e450d0120034198086a200341e8056a10eb03024020032d00980822104106460d00200341ec056a41026a20032d009b083a000020034180076a41086a200341ac086a220129020037030020034180076a41106a200341b4086a220f290200370300200320032f0099083b01ec052003200341a4086a220d2902003703800720034198086a41086a2213280200210a200328029c08210920034198086a200341e8056a10eb03024020032d009808220b4106460d00200341f0056a41026a20032d009b083a0000200341c0076a41086a2001290200370300200341c0076a41106a200f290200370300200320032f0099083b01f0052003200d2902003703c00720132802002113200328029c08211a20034198086a200341e8056a10eb03024020032d009808221b4106460d00200341f4056a41026a20032d009b083a0000200341d8076a41086a200341ac086a2201290200370300200341d8076a41106a200341b4086a220f290200370300200320032f0099083b01f4052003200341a4086a220d2902003703d80720034198086a41086a2218280200211c200328029c08211d20034198086a200341e8056a10eb03024020032d00980822164106460d00200341f8056a41026a20032d009b083a000020034198066a41086a200129020037030020034198066a41106a200f290200370300200320032f0099083b01f8052003200d2902003703980620182802002118200328029c08211920034198086a200341e8056a10eb03024020032d00980822174106460d00200341fe056a20032d009b083a0000200341d8066a41086a200341ac086a290200370300200341e8066a200341b4086a290200370300200320032f0099083b01fc052003200341a4086a2902003703d80620034198086a41086a280200211e200328029c08211f200341003a009808024020032802e805222028020422012001410047220d490d0020034198086a20202802002221200d10e9081a20202001200d6b220f36020420202021200d6a22213602000240024020010d00410021010c010b41002101024020032d0098080e020100020b200341003a00ac084100212202400340200341003a009807200f200f4100472201490d01202241016a210d20034198076a2021200110e9081a2020200f20016b22233602042020202120016a22213602000240200f0d00200341003a0098070b20034198086a20226a20032d0098073a00002003200d3a00ac082023210f200d2122200d4114470d000b200341f0076a41086a20034198086a41086a290300370300200341f0076a41106a20034198086a41106a28020036020020032003290398083703f007410121010c010b202241ff0171450d01200341003a00ac080c010b20034180066a41106a200341f0076a41106a28020036020020034180066a41086a200341f0076a41086a290300370300200320032903f0073703800620034198086a200341e8056a10eb0320032d00980822204106460d0020034194066a41026a220f20032d009b083a000020034198076a41086a200341ac086a29020037030020034198076a41106a200341b4086a290200370300200320032f0099083b0194062003200341a4086a2902003703980720034198086a41086a2802002121200328029c08212220034198086a200341e8056a10eb0320032d0098084106470d0820204101470d002021450d002022102e0b20174101470d00201e450d00201f102e0b20164101470d002018450d002019102e0b201b4101470d00201c450d00201d102e0b200b4101470d002013450d00201a102e0b20104101470d00200a450d002009102e0b0240200c450d00200e200c41c8006c6a210c200e21010340024020012d00004101470d00200141086a280200450d00200141046a280200102e0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102e0b200141c8006a2201200c470d000b0b2002450d01200241c8006c450d010b200e102e0b200841ffffff3f71450d022006102e410221010c030b200341f0076a41206a20034198086a41206a280200360200200341f0076a41186a20034198086a41186a290300370300200341f0076a41106a20034198086a41106a220d290300370300200341f0076a41086a20034198086a41086a2223290300370300200341e4056a41026a200341ec056a41026a2d00003a0000200341c0066a41086a20034180076a41086a290300370300200341c0066a41106a20034180076a41106a29030037030020032003290398083703f007200320032f01ec053b01e40520032003290380073703c006200341e0056a41026a200341f0056a41026a2d00003a0000200320032f01f0053b01e005200341c8056a41106a200341c0076a41106a290300370300200341c8056a41086a200341c0076a41086a290300370300200320032903c0073703c805200341c4056a41026a200341f4056a41026a2d00003a0000200320032f01f4053b01c405200341a8056a41106a200341d8076a41106a290300370300200341a8056a41086a200341d8076a41086a290300370300200320032903d8073703a805200341a4056a41026a200341f8056a41026a2d00003a0000200320032f01f8053b01a40520034188056a41106a20034198066a41106a29030037030020034188056a41086a20034198066a41086a29030037030020032003290398063703880520034184056a41026a200341fc056a41026a2d00003a0000200320032f01fc053b018405200341e8046a41106a200341d8066a41106a290300370300200341e8046a41086a200341d8066a41086a290300370300200320032903d8063703e804200d20034180066a41106a280200360200202320034180066a41086a290300370300200320032903800637039808200341e4046a41026a200f2d00003a0000200320032f0194063b01e404200341c8046a41106a20034198076a41106a290300370300200341c8046a41086a20034198076a41086a29030037030020032003290398073703c8040c020b1036000b410221010b200341c4046a41026a200341e4056a41026a2d00003a0000200341a8046a41086a200341c0066a41086a290300370300200341a8046a41106a2223200341c0066a41106a290300370300200341a4046a41026a200341e0056a41026a2d00003a000020034188046a41086a200341c8056a41086a29030037030020034188046a41106a2224200341c8056a41106a290300370300200320032f01e4053b01c404200320032903c0063703a804200320032f01e0053b01a404200320032903c8053703880420034184046a41026a200341c4056a41026a2d00003a0000200341e8036a41086a200341a8056a41086a290300370300200341e8036a41106a2225200341a8056a41106a290300370300200341e4036a41026a200341a4056a41026a2d00003a0000200341c8036a41086a20034188056a41086a290300370300200341c8036a41106a222620034188056a41106a290300370300200320032f01c4053b018404200320032903a8053703e803200320032f01a4053b01e40320032003290388053703c803200341c4036a41026a20034184056a41026a2d00003a0000200341a8036a41106a2227200341e8046a41106a290300370300200341a8036a41086a200341e8046a41086a290300370300200341a4036a41026a200341e4046a41026a2d00003a000020034188036a41106a2228200341c8046a41106a29030037030020034188036a41086a200341c8046a41086a290300370300200320032f0184053b01c403200320032903e8043703a803200320032f01e4043b01a403200320032903c80437038803200341e0026a41206a2229200341f0076a41206a280200360200200341e0026a41186a222a200341f0076a41186a290300370300200341e0026a41106a222b200341f0076a41106a290300370300200341e0026a41086a200341f0076a41086a290300370300200320032903f0073703e002200341c0026a41176a20034198086a41176a220f280000360000200341c0026a41106a20034198086a41106a220d290300370300200341c0026a41086a20034198086a41086a29030037030020032003290398083703c0020240024020014102470d00200341003602f807200342013703f0072003410a36029c072003200341186a360298072003200341f0076a3602d806200341ac086a41013602002003420137029c08200341909dc50036029808200320034198076a3602a808200341d8066a419cebc00020034198086a103d1a20032802f00720032802f80710ef0220032802f407450d0120032802f007102e0c010b200341b4026a41026a222c200341c4046a41026a2d00003a000020034198026a41086a222d200341a8046a41086a29030037030020034198026a41106a222e202329030037030020034194026a41026a2223200341a4046a41026a2d00003a0000200341f8016a41086a222f20034188046a41086a290300370300200341f8016a41106a22302024290300370300200320032f01c4043b01b402200320032903a80437039802200320032f01a4043b01940220032003290388043703f801200341f4016a41026a222420034184046a41026a2d00003a0000200341d8016a41086a2231200341e8036a41086a290300370300200341d8016a41106a22322025290300370300200341d4016a41026a2225200341e4036a41026a2d00003a0000200341b8016a41086a2233200341c8036a41086a290300370300200341b8016a41106a22342026290300370300200320032f0184043b01f401200320032903e8033703d801200320032f01e4033b01d401200320032903c8033703b801200341b4016a41026a2226200341c4036a41026a2d00003a000020034198016a41106a2235202729030037030020034198016a41086a2227200341a8036a41086a29030037030020034194016a41026a2236200341a4036a41026a2d00003a0000200341f8006a41106a22372028290300370300200341f8006a41086a222820034188036a41086a290300370300200320032f01c4033b01b401200320032903a80337039801200320032f01a4033b0194012003200329038803370378200341d0006a41206a22382029280200360200200341d0006a41186a2229202a290300370300200341d0006a41106a222a202b290300370300200341d0006a41086a222b200341e0026a41086a290300370300200320032903e002370350200341306a410f6a200341c0026a410f6a290000370000200341306a41086a2239200341c0026a41086a290300370300200320032903c0023703302000201537030820002012370300200020103a00282000200c360224200020023602202000200e36021c2000200736021820002008360214200020063602102000200a3602302000200936022c200020032f01b4023b00292000412b6a202c2d00003a000020002003290398023702342000413c6a202d290300370200200041c4006a202e2903003702002000200b3a004c200041cf006a20232d00003a0000200020032f0194023b004d200020133602542000201a360250200041e8006a2030290300370200200041e0006a202f290300370200200020032903f8013702582000201b3a0070200041f3006a20242d00003a0000200020032f01f4013b00712000201c3602782000201d3602742000418c016a203229030037020020004184016a2031290300370200200020032903d80137027c200020163a00940120004197016a20252d00003a0000200020032f01d4013b0095012000201836029c012000201936029801200041b0016a2034290300370200200041a8016a2033290300370200200020032903b8013702a001200020173a00b801200041bb016a20262d00003a0000200020032f01b4013b00b9012000201e3602c0012000201f3602bc01200041d4016a2035290300370200200041cc016a202729030037020020002003290398013702c401200020203a00dc01200041df016a20362d00003a0000200020032f0194013b00dd01200020213602e401200020223602e001200041f8016a2037290300370200200041f0016a2028290300370200200020032903783702e801200041a0026a203828020036020020004198026a202929030037020020004190026a202a29030037020020004188026a202b2903003702002000200329035037028002200f200341306a41176a280000360000200d200341306a41106a29030037030020034198086a41086a220220392903003703002003200329033037039808200041bc026a200f280000360000200041b5026a200d290300370000200041ad026a200229030037000020002003290398083700a5020b200020013a00a4022005450d002004102e0b200341f0086a24000bbd07010a7f23004180026b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022040d00200041063a00200c010b200328021421052003200341186a280200220636029401200320043602900141002101200341003a00d801024002400240034020062001460d01200341b8016a20016a200420016a22022d00003a00002003200241016a360290012003200141016a22023a00d8012002210120024120470d000b2003200620026b36029401200341206a41186a2201200341b8016a41186a290300370300200341206a41106a2206200341b8016a41106a290300370300200341206a41086a2207200341b8016a41086a290300370300200320032903b801370320200241ff01714120490d0120034198016a41086a200729030037030020034198016a41106a200629030037030020034198016a41186a20012903003703002003200329032037039801200341b8016a20034190016a10ec0320032d00b80122014106460d01200341f0006a41186a220220034198016a41186a290300370300200341f0006a41106a220620034198016a41106a290300370300200341f0006a41086a220720034198016a41086a290300370300200341c8006a41086a2208200341c1016a290000370300200341c8006a41106a2209200341c9016a290000370300200341c8006a41186a220a200341d1016a290000370300200341c8006a411f6a220b200341d8016a2800003600002003200329039801370370200320032900b901370348200341206a411f6a220c200b280000360000200341206a41186a220b200a290300370300200341206a41106a220a2009290300370300200341206a41086a22092008290300370300200041186a2002290300370200200041106a2006290300370200200041086a20072903003702002000200329037037020020032003290348370320200041c0006a200c280000360000200041396a200b290300370000200041316a200a290300370000200041296a2009290300370000200020032903203700210c020b2003410036029401200141ff0171450d00200341003a00d8010b20034100360250200342013703482003410a3602242003200341086a3602202003200341c8006a3602e001200341cc016a4101360200200342013702bc01200341909dc5003602b8012003200341206a3602c801200341e0016a419cebc000200341b8016a103d1a2003280248200328025010ef020240200328024c450d002003280248102e0b410621010b200020013a00202005450d002004102e0b20034180026a24000bb40201037f230041e0006b22022400200241086a4188fec6004108108102200241186a41d0aec3004106108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241c8006a41086a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000b8e0302027f037e230041e0006b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022010d00200041003602100c010b200328021421042003200341106a41086a2802002202360224200320013602200240024020024110490d002003200241706a3602242003200141106a360220200141086a2900002105200129000021062003200341206a10ab0102402003280200450d00200341003602480c010b200341c8006a200341206a200328020410920120032802482202450d00200329024c2107200020053703082000200637030020002007370214200020023602100c010b20034100360230200342013703282003410a36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341909dc5003602482003200341386a360258200341c4006a419cebc000200341c8006a103d1a2003280228200328023010ef020240200328022c450d002003280228102e0b200041003602100b2004450d002001102e0b200341e0006a24000ba43809017f0a7e027f077e017f017e037f037e047f230041f0056b22062400200620043703202006200337031820062001360214200620053a002f0240024020032004844200520d0020004100360200200041106a4200370300200041086a42003703000c010b024002400240024002400240024002400240024020012002412010ec080d002005450d01200641d0016a200110c802200641f0046a20062802d001220220062802d80110c90220064190056a290300420020062903f00442015122011b210720064188056a290300420020011b2108024020062802d401450d002002102e0b20004100360200200041106a4200200420077d2003200854ad7d2207200320087d2208200356200720045620072004511b22011b370300200041086a4200200820011b3703000c0a0b2006200236028c01200641d0016a200210c802200641f0046a20062802d001220520062802d80110c902200641f0046a41386a2903002109200641f0046a41306a2903002107200641f0046a41286a290300210a200641f0046a41206a290300210b200641f0046a41186a290300210c200641f0046a41106a2903002103200641b0056a290300210d20062903f804210420062903f0042108200641c8036a41086a200641c0056a2903003703002006200641b8056a2903003703c8030240024020084201510d004200210d20064190016a41386a420037030020064190016a41306a420037030020064190016a41286a4200370300200641b0016a420037030020064190016a41186a420037030020064190016a41106a420037030020064190016a41086a420037030020064200370390014200210b4200210a420021074200210942002104420021034200210c4200210e4200210f42002108420021100c010b200641b0016a200a37030020064190016a41286a200737030020064190016a41106a200c37030020064190016a41306a20093703002006200b3703a80120062004370390012006200d3703c8012006200337039801200a210e2007210f20042108200321100b024020062802d401450d002005102e0b0240024020082010844200520d00200e20062903a00184200f200641a8016a29030084844200520d0020062903c001200641c8016a2903008450450d0042002108410021110c010b42012108410121110b0240024020084201510d0042002104200641c0036a4200370300200641b8036a4200370300200641b0036a4200370300200641a8036a4200370300200641a0036a420037030020064198036a420037030020064190036a42003703002006420037038803420021030c010b200641a8036a200a370300200641b0036a2007370300200641b8036a200937030020064198036a200c3703002006200b3703a0032006200d3703c003200620043703880320062003370390030b024020084201510d00200641a0046a41206a200641b8036a290300370300200641a0046a41186a200641b0036a290300370300200641b0046a20064188036a41206a290300370300200641a8046a20064188036a41186a29030037030020062006290398033703a00441838a1c211241b4a4c7002101410b21050c070b200620013602dc03200641a0046a200110c802200641f0046a20062802a004220520062802a80410c902200641f0046a41386a2903002113200641f0046a41306a290300210f200641f0046a41286a2903002114200641f0046a41206a2903002104200641f0046a41186a290300210c200641f0046a41106a2903002103200641b0056a290300211520062903f804211020062903f004210e200641c8036a41086a200641c0056a2903003703002006200641b8056a2903003703c80302400240200e4201510d0042002115200641e0036a41386a4200370300200641e0036a41306a4200370300200641e0036a41286a4200370300200641e0036a41206a4200370300200641e0036a41186a4200370300200641e0036a41106a4200370300200641e0036a41086a4200370300200642003703e00342002104420021144200210f4200211342002110420021034200210c42002116420021174200210e420021180c010b200641e0036a41206a2014370300200641e0036a41286a200f370300200641e0036a41106a200c370300200641e0036a41306a2013370300200620043703f803200620103703e0032006201537039804200620033703e80320142116200f21172010210e200321180b024020062802a404450d002005102e0b02400240200e2018844200520d00201620062903f003842017200641f8036a29030084844200520d0020062903900420064198046a2903008450450d0042002117410021120c010b42012117410121120b024020174201510d00420021044200210c42002115420021144200210f4200211342002110420021030b200641186a41086a290300220e2004200c20062903182218562004200e562004200e511b22051b21162018200c20051b210e02400240024020062d002f4101470d002006290398032218200e7c22192018542205200641a0036a221a290300221820167c2005ad7c221b201854201b2018511b450d010c060b2006290388032218200e7c2219201854220520064188036a41086a290300221820167c2005ad7c221b201854201b2018511b0d0520062019370388032006201b370390030c010b201a201b37030020062019370398030b20064198056a221c200f370300200641a0056a221d201337030020064188056a200420167d200c200e54ad7d220f37030020062014370390052006200c200e7d221437038005200620103703f004200620033703f80442002104200e422088a72105200ea7211a02400240427f201020147c220c200c201054221e2003200f7c201ead7c220c200354200c2003511b221e1b221842ffc7afa02556427f200c201e1b22134200522013501b0d0020102014842003200f8484220450211e4200210c2004420052ad21040c010b201d290300211f201c290300212020064190056a290300212120064180056a290300211b200629038805211920062903f804211420062903f004210e4201210c4101211e0b200641c8046a2013370300200641c0046a221c2018370300200641b0046a2003370300200620103703a804200620163703d804200620053602d4042006201a3602d004200620043703b80420062017420152ad220f3703a0040240024002402012200c420152720d00200620013602f0042001200641f0046a10bd060c010b024020124101732205200c420151720d00200620013602f0042001200641f0046a10be0641ff017122054103460d01024020050e03030200030b41002105410421120240201e0d002006201c3602f004200641f0046a10cc020b410021010c070b200c4201522005710d030b200641e0046a200110c802200641f0046a20062802e004221220062802e804221a10c90220062903f0042103200641c8036a41086a2205200641c0056a2903003703002006200641b8056a2903003703c8030240024020034201510d00200641e8026a41086a4200370300200642003703e8020c010b200641e8026a41086a2005290300370300200620062903c8033703e8020b200641b8056a20062903e802370300200641c0056a200641e8026a41086a290300370300200642013703f004200641f0046a41386a201f4200200c42015122051b370300200641a0056a2020420020051b370300200641f0046a41286a2021420020051b37030020064190056a2019420020051b37030020064188056a201b420020051b370300200641f0046a41106a2014420020051b370300200641b0056a2015420020051b3703002006200e420020051b3703f8042012201a200641f0046a41086a10c805024020062802e404450d002012102e0b200641a0046a41106a2903002103200641a0046a41286a2903002113200641a0046a41386a290300210c20062903a804211020062903c004211820062903d004210e20062903a004210f20062903b80421040c030b200641c8046a2903002113200641b0046a2903002103200641d8046a290300210c20062903c004211820062903a804211020062903d004210e20062903b804210420062903a004210f0c020b200620012003200410fb0120062903002103200041106a200641086a290300370300200041086a2003370300200041003602000c080b200641d8046a290300210c20062903d004210e0b0240200f4201520d00200641a8056a2003370300200641a0056a2010370300200641f0046a41086a41003a0000200641f9046a200129000037000020064181056a200141086a29000037000020064189056a200141106a29000037000020064191056a200141186a290000370000200641033a00f004200641f0046a10fe010b02400240200450450d00420021150c010b200641f0046a41086a20062802dc03220141086a290000370300200641f0046a41106a200141106a290000370300200641f0046a41186a200141186a290000370300200620012900003703f004420121150b200641e0036a41186a200641f0046a41186a290300370300200641e0036a41106a200641f0046a41106a290300370300200641e0036a41086a200641f0046a41086a290300370300200620062903f0043703e0034100211a0c020b41808008210141800a2105410321120b20014180800c71200541800e7172201272211241a984ca00ad4280808080800184210e4101211a4200210c0b20064188036a41086a2903002103200641c0036a29030021212006290388032104200641a0046a41206a221e20064188036a41306a290300370300200641a0046a41186a221c20064188036a41286a290300370300200641b0046a221d20064188036a41206a290300370300200641a0046a41086a222220064188036a41186a29030037030020062006290398033703a004200e422088a72105200ea72101201a450d010b2005ad4220862001ad8421084200210f410121010c010b200641f0046a41186a20222903002207370300200641f0046a41206a201d290300370300200641f0046a41286a201c290300370300200641f0046a41306a201e290300370300200620062903a004220a37038005200620043703f004200620033703f804420021104201210f2008420152211a02400240427f2004200a7c22082008200454221e200320077c201ead7c220820035420082003511b221e1b221442ffc7afa02556427f2008201e1b220e420052200e501b0d004200210f2004200a84200320078484420052ad21100c010b200641a0056a290300210920064198056a290300210720064190056a290300210a20064180056a2903002119200629038805210b20062903f804211b20062903f00421170b201aad2108200641e8026a41086a200641e0036a41086a290300370300200641e8026a41106a200641e0036a41106a290300370300200641e8026a41186a200641e0036a41186a290300370300200620062903e0033703e8022005ad4220862001ad842116410021012021210d0b200641c8026a41086a2205200641e8026a41086a290300370300200641c8026a41106a221a200641e8026a41106a290300370300200641c8026a41186a221e200641e8026a41186a290300370300200620062903e8023703c8020240024002400240024020010d0020064188026a200c370300200641f8016a200e370300200641f0016a22012014370300200641d0016a41106a2003370300200641c0026a2013370300200641b8026a221c201837030020064190026a201537030020064198026a20062903c802370300200641a0026a2005290300370300200641a8026a201a290300370300200641b0026a201e2903003703002006201637038002200620043703d801200620103703e801200620083703d001024002402011200f420152720d00200620023602f0042002200641f0046a10bd060c010b024020114101732205200f420151720d00200620023602f0042002200641f0046a10be0641ff017122054103460d010240024020050e03010300010b02402010500d00200620013602f004200641f0046a10cc020b20064190026a220510d20441012101410421122005290300500d052006201c3602f004200641f0046a10cc020c050b20064190046a200641c0026a29030037030020064188046a200641b8026a29030037030020064180046a200641b0026a290300370300200641f8036a200641a8026a290300370300200641f0036a200641a0026a290300370300200641e8036a20064198026a290300370300200620064190026a2903003703e003410021010c040b200f4201522005710d020b20064188036a200210c802200641f0046a2006280288032205200628029003221210c90220062903f0042103200641c8036a41086a2201200641c0056a2903003703002006200641b8056a2903003703c8030240024020034201510d00200641a0046a41086a4200370300200642003703a0040c010b200641a0046a41086a2001290300370300200620062903c8033703a0040b200641f0046a41c8006a20062903a004370300200641f0046a41d0006a200641a0046a41086a2211290300370300200642013703f004200641f0046a41386a20094200200f42015122011b370300200641f0046a41306a2007420020011b370300200641f0046a41286a200a420020011b370300200641f0046a41206a200b420020011b370300200641f0046a41186a2019420020011b370300200641f0046a41106a201b420020011b370300200641f0046a41c0006a200d420020011b37030020062017420020011b3703f80420052012200641f0046a41086a10c8050240200628028c03450d002005102e0b200641e0036a41086a2201200641d0016a41c8006a290300370300200641e0036a41106a2205200641d0016a41d0006a290300370300200641e0036a41186a2212200641a8026a290300370300200641e0036a41206a221a200641b0026a290300370300200641e0036a41286a221e200641b8026a290300370300200641e0036a41306a221c200641c0026a2903003703002006200641d0016a41c0006a2903003703e003200641d0016a41106a2903002103200641d0016a41286a290300210e200641d0016a41386a290300210c20062903d801210420062903f0012114200629038002210820062903d001210720062903e8012110200641a0046a41306a201c290300370300200641a0046a41286a201e290300370300200641a0046a41206a201a290300370300200641a0046a41186a2012290300370300200641a0046a41106a200529030037030020112001290300370300200620062903e0033703a004200641a0046a21010c030b410121010c010b20064190046a200641c0026a29030037030020064188046a200641b8026a29030037030020064180046a200641b0026a290300370300200641f8036a200641a8026a290300370300200641f0036a200641a0026a290300370300200641e8036a20064198026a290300370300200620064190026a2903003703e003410021010b200641a0046a41306a200641e0036a41306a290300370300200641a0046a41286a200641e0036a41286a290300370300200641a0046a41206a200641e0036a41206a290300370300200641a0046a41186a200641e0036a41186a290300370300200641a0046a41106a200641e0036a41106a290300370300200641a0046a41086a200641e0036a41086a290300370300200620062903e0033703a00402402001450d00410121010c020b200641a0046a210120082107201621080b200641d0016a41306a200141306a290300370300200641d0016a41286a200141286a290300370300200641d0016a41206a200141206a290300370300200641d0016a41186a200141186a290300370300200641d0016a41106a200141106a290300370300200641d0016a41086a200141086a290300370300200620012903003703d001024020074201520d00200628028c012101200641a8056a2003370300200641f0046a41306a2004370300200641f0046a41086a41003a0000200641f9046a200129000037000020064181056a200141086a29000037000020064189056a200141106a29000037000020064191056a200141186a290000370000200641033a00f004200641f0046a10fe010b02400240201050450d00420021030c010b20064188036a41086a200628028c01220141086a29000037030020064188036a41106a200141106a29000037030020064188036a41186a200141186a2900003703002006200129000037038803420121030b20064190016a41186a20064188036a41186a29030037030020064190016a41106a20064188036a41106a29030037030020064190016a41086a20064188036a41086a290300370300200641f0046a41086a200641d0016a41086a290300370300200641f0046a41106a200641d0016a41106a290300370300200641f0046a41186a200641d0016a41186a290300370300200641f0046a41206a200641d0016a41206a290300370300200641f0046a41286a200641d0016a41286a290300370300200641f0046a41306a200641d0016a41306a290300370300200620062903880337039001200620062903d0013703f004410021010b200641d0006a41086a2205200641f0046a41086a2211290300370300200641d0006a41106a221a200641f0046a41106a290300370300200641d0006a41186a221e200641f0046a41186a290300370300200641d0006a41206a221c200641f0046a41206a290300370300200641d0006a41286a221d200641f0046a41286a290300370300200641d0006a41306a2222200641f0046a41306a290300370300200641306a41086a222320064190016a41086a290300370300200641306a41106a222420064190016a41106a290300370300200641306a41186a222520064190016a41186a290300370300200620062903f0043703502006200629039001370330024020010d00200641a0046a41306a2022290300370300200641a0046a41286a201d290300370300200641a0046a41206a201c290300370300200641a0046a41186a201e290300370300200641a0046a41106a201a290300370300200641a0046a41086a2005290300370300200620062903503703a004200641d0016a41306a200e370300200641d0016a41286a22122014370300200641d0016a41106a2023290300370300200641d0016a41186a2024290300370300200641d0016a41206a2025290300370300200620033703d001200620062903303703d80120062d002f2105200641e0036a41186a2006280214220141186a2900002203370300200641e0036a41106a200141106a2900002204370300200641e0036a41086a200141086a290000220737030020062001290000220a3703e003200641c8056a200c370300200641c0056a2008370300201141073a0000200641f9046a200a37000020064181056a200737000020064189056a200437000020064191056a2003370000200641b9056a20053a000020064199056a2002290000370000200641a1056a200241086a290000370000200641a9056a200241106a290000370000200641b1056a200241186a290000370000200641033a00f004200641f0046a10fe01200041086a2006290318220320087d37030020004100360200200041106a200641186a41086a290300200c7d2003200854ad7d370300200641d0016a10d204024020062903d001500d00200620123602f004200641f0046a10cc020b200641a0046a10d20420062903a004500d012006200641c8046a3602f004200641f0046a10cc020c010b2000201236020420004101360200200041086a20083702000b200641f0056a24000bda0102037f017e230041206b2203240002400240200241186a2802004105744114722204417f4c0d002004102c2205450d01200341003602082003200436020420032005360200200229030021062003200241086a290300370318200320063703102003200341106a4110107420022802102104200228021822022003107602402002450d002002410574210203402003200441201074200441206a2104200241606a22020d000b0b2000200120032802002204200328020810b20102402003280204450d002004102e0b200341206a24000f0b1038000b1036000b7801017f230041206b2203240020034100360208200342013703002003200241201074200341106a200241206a108a012003200328021022022003280218107402402003280214450d002002102e0b2000200120032802002202200328020810b20102402003280204450d002002102e0b200341206a24000b832501047f024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002802000e1b00010218180304051806070818090a0b0c0d0e0f10111213141516170b0240024002400240024002400240200041086a2802000e0a1e1e001e01021e030405060b200041106a280200450d1d2000410c6a280200102e0f0b200041106a280200450d1c2000410c6a280200102e0f0b200041106a280200450d1b2000410c6a280200102e0f0b0240200041146a2802002201450d002000410c6a2802002102200141186c210103400240200241046a280200450d002002280200102e0b0240200241106a280200450d002002410c6a280200102e0b200241186a2102200141686a22010d000b0b200041106a2802002202450d1a200241186c450d1a200028020c102e0f0b0240200041146a2802002201450d002000410c6a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041106a2802002202450d192002410c6c450d19200028020c102e0f0b200041106a280200450d182000410c6a280200102e0f0b200041106a280200450d172000410c6a280200102e0f0b0240024002400240024020002d00040e061b001b010203040b200041186a2202280200108c042002280200102e0f0b02402000410c6a280200450d00200041086a280200102e0b200041246a2202280200108c042002280200102e0f0b2000410c6a280200450d18200041086a280200102e0f0b200041186a2202280200108c042002280200102e0f0b02402000410c6a280200450d00200041086a280200102e0b200041246a2202280200108c042002280200102e0f0b02400240200041086a280200417f6a0e020001170b2000412c6a220110e1010240200041306a2802002202450d00200241246c450d002001280200102e0b2000419c016a220110e1010240200041a0016a2802002202450d00200241246c450d002001280200102e0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d162002410c6c450d162000280210102e0f0b2000412c6a220110e1010240200041306a2802002202450d00200241246c450d002001280200102e0b2000419c016a220110e1010240200041a0016a2802002202450d00200241246c450d002001280200102e0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d152002410c6c450d152000280210102e0f0b0240024002400240200041086a2802000e0418000102030b2000410c6a2d00004102470d17200041146a280200450d17200041106a280200102e0f0b2000410c6a2d00004102470d16200041146a280200450d16200041106a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004102470d15200041386a280200450d15200041346a280200102e0f0b2000410c6a2d00004102470d14200041146a280200450d14200041106a280200102e0f0b02402000410c6a2802002201450d0020002802042202200141f0006c6a21030340024020022204410c6a2802002201450d0020042802042102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b200441f0006a21020240200441086a2802002201450d00200141246c450d002004280204102e0b20022003470d000b0b200041086a2802002202450d13200241f0006c450d132000280204102e0f0b024002400240024002400240200041086a2d00000e171800181818180118180218181818180318180418181818050b2000412c6a2d00004102470d17200041346a280200450d17200041306a280200102e0f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b200041106a2802002202450d16200241246c450d16200028020c102e0f0b2000410c6a2d00004102470d15200041146a280200450d15200041106a280200102e0f0b200041106a28020041ffffff3f71450d142000410c6a280200102e0f0b200041146a28020041ffffffff0371450d13200041106a280200102e0f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b200041106a2802002202450d12200241246c450d12200028020c102e0f0b20002802042202450d11200041086a280200450d112002102e0f0b02400240200041086a280200417f6a0e020001120b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d112002410c6c450d112000280210102e0f0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d102002410c6c450d102000280210102e0f0b02402000410c6a280200450d00200041086a280200102e0b02402000411c6a2802002201450d00200041146a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041186a2802002202450d0f2002410c6c450d0f2000280214102e0f0b0240024002400240200041086a2d000041716a0e0400010203120b200041106a280200450d112000410c6a280200102e0f0b200041106a280200450d102000410c6a280200102e0f0b200041106a280200450d0f2000410c6a280200102e0f0b200041106a280200450d0e2000410c6a280200102e0f0b024002400240200041086a2d0000417f6a0e03000102100b200041306a28020041ffffff3f71450d0f2000412c6a280200102e0f0b2000410c6a2202280200108c042002280200102e0f0b200041106a2202280200108c042002280200102e0f0b024002400240200041086a2d0000417f6a0e030001020f0b200041306a28020041ffffff3f71450d0e2000412c6a280200102e0f0b2000410c6a2202280200108c042002280200102e0f0b200041106a2202280200108c042002280200102e0f0b02400240200041086a2d0000417f6a0e05000d0d0d010d0b200041106a28020041ffffff3f71450d0c2000410c6a280200102e0f0b2000410c6a2d00004102470d0b200041146a280200450d0b200041106a280200102e0f0b20002d00044104470d0a2000410c6a28020041ffffff3f71450d0a200041086a280200102e0f0b200041086a2802004101470d092000410c6a2d00004102470d09200041146a280200450d09200041106a280200102e0f0b02400240200041086a2d0000417d6a0e0200010a0b200041f0006a280200450d09200041ec006a280200102e0f0b200041106a280200450d082000410c6a280200102e0f0b024002400240200041086a2802000e040a0a0001020b2000410c6a2d00004102470d09200041146a280200450d09200041106a280200102e0f0b2000410c6a2d00004102470d08200041146a280200450d08200041106a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004102470d07200041386a280200450d07200041346a280200102e0f0b02400240024020002f01040e03090001020b0240200041106a2802002201450d00200041086a2802002102200141b0026c210103402002109601200241b0026a2102200141d07d6a22010d000b0b2000410c6a2802002202450d08200241b0026c450d082000280208102e0f0b200041086a2202280200108c042002280200102e0f0b0240200041106a2802002201450d00200041086a2802002102200141b0026c210103402002109601200241b0026a2102200141d07d6a22010d000b0b2000410c6a2802002202450d06200241b0026c450d062000280208102e0f0b0240024002400240024002400240200041086a2d0000417e6a0e0d00010c0c0c0c0c0c02030405060c0b2000410c6a10e3030f0b0240200041146a2802002202450d00200241c4006c21012000410c6a28020041286a210203400240200241786a2d00004101470d002002280200450d002002417c6a280200102e0b200241c4006a2102200141bc7f6a22010d000b0b200041106a2802002202450d0a200241c4006c450d0a200028020c102e0f0b200041106a2d00004102470d09200041186a280200450d09200041146a280200102e0f0b2000410c6a2d00004102470d08200041146a280200450d08200041106a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004101470d07200041386a280200450d07200041346a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004101470d06200041386a280200450d06200041346a280200102e0f0b2000410c6a2d00004102470d05200041146a280200450d05200041106a280200102e0f0b20002d00042202417e6a4108490d040240024020020e020600010b200041286a2202280200108c042002280200102e0f0b200041c8006a2202280200108c042002280200102e0f0b0240024002400240200041086a2d00000e0407000102030b0240200041106a28020041ffffff3f71450d002000410c6a280200102e0b200041186a2202280200108c042002280200102e0f0b0240200041106a28020041ffffff3f71450d002000410c6a280200102e0b200041286a280200450d05200041246a280200102e0f0b200041306a28020041ffffff3f71450d042000412c6a280200102e0f0b200041306a28020041ffffff3f71450d032000412c6a280200102e0f0b0240024002400240200041086a2802000e09060006010606020606030b200041106a280200450d052000410c6a280200102e0f0b200041106a2d00004102470d04200041186a280200450d04200041146a280200102e0f0b200041106a2d00004102470d03200041186a280200450d03200041146a280200102e0f0b200041146a280200450d02200041106a280200102e0f0b02400240200041086a2d0000417f6a0e03000301030b200041306a280200450d022000412c6a280200102e0c020b200041306a280200450d012000412c6a280200102e0f0b02402000413c6a28020041ffffffff0171450d00200041386a280200102e0b0240200041c8006a2802002202450d002002410c6c450d00200041c4006a280200102e0b0240200041d4006a28020041ffffffff0071450d00200041d0006a280200102e0b0240200041e0006a2802002202450d00200241146c450d00200041dc006a280200102e0b0240200041ec006a2802002202450d00200241186c450d00200041e8006a280200102e0b0240200041f8006a2802002202450d002002411c6c450d00200041f4006a280200102e0b024020004184016a28020041ffffff3f71450d0020004180016a280200102e0b024020004190016a2802002202450d00200241246c450d002000418c016a280200102e0b02402000419c016a2802002202450d00200241286c450d0020004198016a280200102e0b0240200041a8016a2802002202450d002002412c6c450d00200041a4016a280200102e0b0240200041b4016a2802002202450d00200241306c450d00200041b0016a280200102e0b0240200041c0016a2802002202450d00200241346c450d00200041bc016a280200102e0b0240200041cc016a2802002202450d00200241386c450d00200041c8016a280200102e0b0240200041d8016a2802002202450d002002413c6c450d00200041d4016a280200102e0b0240200041e4016a28020041ffffff1f71450d00200041e0016a280200102e0b200041f0016a2802002202450d00200241c4006c450d00200041ec016a280200102e0f0b0b830501077f230041c0006b220324002001280204210420012802002105024002400240200128020822060d00410021070c010b200641057421084100210941002107200521010240034002402009450d0020092001412010ec084100480d0020034106108e04200041013602002000410c6a200341086a280200360200200020032903003702040c020b024020012002412010ec08220941004a0d00024020090d0020034107108e04200041013602002000410c6a200341086a280200360200200020032903003702040c030b200741016a21070b20012109200141206a2101200841606a2208450d020c000b0b200441ffffff3f71450d012005102e0c010b200341186a200241186a290000370300200341106a200241106a290000370300200341086a200241086a290000370300200320022900003703000240024020062007490d000240024020062004470d00200441016a22012004490d03200441017422092001200920014b1b22014104200141044b1b220141ffffff3f712001462109200141057421010240024020040d00200341003602300c010b200341386a410136020020032005360230200320044105743602340b200341206a20012009200341306a107d200341286a280200210120032802204101460d0120032802242105200141057621040b200520074105746a220141206a2001200620076b41057410ea081a200141186a200341186a290300370000200141106a200341106a290300370000200141086a200341086a290300370000200120032903003700002000410c6a200641016a360200200041086a200436020020002005360204200041003602000c030b2001450d011036000b200720061045000b1038000b200341c0006a24000bae0301047f230041c0006b2202240041f0cbc3002103410d2104410d2105024002400240024002400240024002400240024002400240024002400240200141ff01710e0f000102030405060708090a0b0c0d0e000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a4180a7cc001044000b41e0cbc300210341102105410021040c0c0b41d1cbc3002103410f2105410121040c0b0b41c0cbc300210341112105410221040c0a0b41afcbc300210341112105410321040c090b419dcbc300210341122105410421040c080b4188cbc300210341152105410521040c070b41f5cac300210341132105410621040c060b418be7c400210341082105410721040c050b41feccc200210341082104410821050c040b41eacac3002103410b2105410921040c030b41dccac3002103410e2105410a21040c020b41c9cac300210341132105410b21040c010b41bacac3002103410f2105410c21040b200041833c3b0100200041086a2005360200200041046a2003360200200041026a20043a0000200241c0006a24000b9d3e07077f017e027f037e017f027e067f230041b00d6b220924004101210a02400240200241ffff037141014b0d00200941d00a6a4101108e042009418f026a200941d00a6a41086a2802002202360000200920092903d00a37008702200041186a41003a0000200042003703082000200929008002370019200041216a20094180026a41086a290000370000200041286a200236000020004201370300410121020c010b02400240200341086a280200220b0d00200941d00a6a4104108e042009418f026a200941d00a6a41086a280200220a360000200920092903d00a37008702200041186a41003a0000200042003703082000200929008002370019200041216a20094180026a41086a290000370000200041286a200a360000200042013703000c010b0240200b41e400490d00200941d00a6a4105108e042009418f026a200941d00a6a41086a280200220a360000200920092903d00a37008702200041186a41003a0000200042003703082000200929008002370019200041216a20094180026a41086a290000370000200041286a200a360000200042013703000c010b20094198076a41086a200341086a280200360200200920032902003703980720094180026a41186a200141186a29000037030020094180026a41106a200141106a29000037030020094180026a41086a220c200141086a2900003703002009200129000037038002200941d00a6a20094198076a20094180026a108d044101210a200941d00a6a41086a280200210d200941dc0a6a280200210e20092802d40a210f024002400240024002400240024002400240024002400240024002400240024020092802d00a4101460d00200c200e360200200920023b018c022009200f36028402200941b1c5cb003602800220094198076a20094180026a109004200941203602d40a200920094198076a3602d00a20094180026a200941d00a6a1093010240024020092d0080024101470d00200941d0006a4200370300200941c8006a4200370300200941c0006a4200370300200942003703380c010b200941d0006a20094199026a290000370300200941c8006a20094191026a290000370300200941c0006a20094189026a29000037030020092009290081023703380b4101210a0240024020072d00004101470d0020094198026a200741196a29000037030020094190026a200741116a29000037030020094188026a200741096a29000037030020092007290001370380024200211041002111410021120c010b20072d0001210e20094180026a200741046a2802002211200741086a29020022134220882210a710b0014100210a200e41004721120b200941d8006a41186a20094180026a41186a2903002214370300200941d8006a41106a20094180026a41106a220e2903002215370300200941d8006a41086a20094180026a41086a221629030022173703002009200929038002221837035820094198076a41186a201437030020094198076a41106a220c201537030020094198076a41086a221920173703002009201837039807200941b8046a200941386a20094198076a10910420094180026a20092802b804221a20092802c00410920420192016290300370300200c200e290300370300200941d00a6a41086a2216200941a8026a290300370300200941d00a6a41106a221b200941b0026a290300370300200941d00a6a41186a221c200941b8026a290300370300200941d00a6a41206a221d200941c0026a290300370300200920092903800237039807200920094180026a41206a2903003703d00a200928029c02211e0240200928029802220e450d00200941a0016a41106a200c290300370300200941a0016a41086a2019290300370300200941f8006a41086a2016290300370300200941f8006a41106a201b290300370300200941f8006a41186a201c290300370300200941f8006a41206a201d29030037030020092009290398073703a001200920092903d00a3703780b024020092802bc04450d00201a102e0b02400240200e0d004101210520044101470d01200941d00a6a410c108e042009418f026a200941d00a6a41086a2802002202360000200920092903d00a37008702200041186a41003a0000200042003703082000200929008002370019200041216a20094180026a41086a290000370000200041286a2002360000200042013703000c100b200941d4016a201e360200200941b8016a41206a2009290378370300200941b8016a41106a200941a0016a41106a290300370300200941b8016a41086a200941a0016a41086a290300370300200941b8016a41286a200941f8006a41086a290300370300200941e8016a200941f8006a41106a290300370300200941f0016a200941f8006a41186a290300370300200941f8016a200941f8006a41206a290300370300200920092903a0013703b8012009200e3602d0010240024020044101470d00024020092802c8012005470d00200941cc016a2802002006460d020b200941d00a6a410b108e042009418f026a200941d00a6a41086a2802002202360000200920092903d00a3700870241002105200041186a41003a0000200042003703082000200929008002370019200041216a20094180026a41086a290000370000200041286a20023600002000420137030020092802d40141ffffff3f71450d1120092802d001102e0c110b200941d00a6a410a108e042009418f026a200941d00a6a41086a2802002202360000200920092903d00a3700870241002105200041186a41003a0000200042003703082000200929008002370019200041216a20094180026a41086a290000370000200041286a20023600002000420137030020092802d40141ffffff3f71450d1020092802d001102e0c100b4101211b410021044100210c024020092802d801221a0e020605000b41002104201a210c0340200c410176221620046a211920192004200e20194105746a2001412010ec084101481b2104200c20166b220c41014b0d000c050b0b200941186a2002ad42ffff038342004280a0cb9801420010e808200941186a41086a2903002009290318221442809886abec057c2208201454ad7c21140240024002400240024002402011450d002013a7210220120d012002450d002011102e0b20094180026a20012008201410c30220092009290081023703d00a200920094180026a41086a2800003600d70a20092d00800222024106470d044100211d0c010b20094180026a41186a200141186a29000037030020094180026a41106a200141106a29000037030020094180026a41086a200141086a2900003703002009200129000037038002200920134220883e02d80a200920023602d40a200920113602d00a20094198076a20094180026a200941d8006a200941d00a6a2008201410930420092009290099073703b804200920094198076a41086a2800003600bf0420092d00980722024106470d014101211d0b200941b8046a41186a220a200941d8006a41186a290300370300200941b8046a41106a2202200941d8006a41106a290300370300200941b8046a41086a2204200941d8006a41086a290300370300200920092903583703b80420094180026a41186a2207420037030020094180026a41106a2205420037030020094180026a41086a4200370300200942003703800220094180026a41d9fcc6004106108102200941d00a6a4180f4cb0041061081022007200941d00a6a41086a2203290000370300200520092900d00a370300200941106a20094180026a4120108e022009280214210520092802102106200941086a41fcc6cb004110108e02200928020c210c20092802082119200941d00a6a41186a2211200141186a2216290000370300200941d00a6a41106a221a200141106a221b2900003703002003200141086a221c290000370300200920012900003703d00a4120102c2207450d0820072001290000370000200741186a2016290000370000200741106a201b290000370000200741086a201c29000037000020094180026a41146a200c410020191b360200200941ac026a2003290300370200200941b4026a201a290300370200200941bc026a20112903003702002009200837038002200920092903d00a3702a402200920143703880220092005410020061b360290022009419c026a428180808010370200200920073602980220094198076a41186a200a29030037030020094198076a41106a200229030037030020094198076a41086a2004290300370300200920092903b80437039807200941d00a6a200941386a20094198076a10910420092802d00a220320092802d80a20094180026a109404024020092802d40a450d002003102e0b2007102e200941a5026a2009290338370000200941ad026a200941386a41086a290300370000200941b5026a200941386a41106a290300370000200941bd026a200941386a41186a2903003700002009418d026a200141086a29000037000020094195026a200141106a2900003700002009419d026a200141186a290000370000200941003a008402200941143a0080022009200129000037008502200941dd026a200941d8006a41186a290300370000200941d5026a200941d8006a41106a290300370000200941cd026a200941d8006a41086a290300370000200941c5026a200929035837000020094180026a10fe01200bad2108201d0d01200842a08a077e201042e8077e7c42e0ff9fe1007c21080c050b20004200370308200020092903b80437002120004201370300200041206a20023a0000200041186a41003a0000200041286a20092800bf043600000c030b200842d8a1077e201042b8177e7c428093e49f017c21080c030b20004200370308200020092903d00a37002120004201370300200041206a20023a0000200041186a41003a0000200041286a20092800d70a3600000c010b2000200d3600242000420037030820004201370300200041286a200e360000200041206a200f36000041002102200041186a41003a00000c100b410121050c0d0b200042013703082000420037030041002107200041186a41003a0000200041106a20083703000c0a0b0240200e20044105746a2001412010ec08220c0d002004210c4100211b0c010b2004200c411f766a210c0b02400240024002400240201a41ffff0371200241ffff0371220249201b712204201a6a41ffff03712002490d000240024020110d0020094198076a200941d8006a109504200941d00a6a200928029807220220092802a007109604024020092802d00a2219450d0020092902d40a21140240200928029c07450d002002102e0b20092014422088a722163602bc04200920193602b804200941d00a6a200941b8046a109801024020092802d00a2202411c460d0020094198076a200941d00a6a41047241ac0210e9081a20094180026a41047220094198076a41ac0210e9081a200920163602b0040b20092002360280022014a7450d022019102e20092802800221020c020b0240200928029c07450d002002102e0b2009411c360280020c040b20092013422088a722193602bc04200920113602b804200941d00a6a200941b8046a109801024020092802d00a2202411c460d0020094198076a200941d00a6a41047241ac0210e9081a20094180026a41047220094198076a41ac0210e9081a200920193602b0040b20092002360280020b2002411c460d01200941b8046a20094180026a41b00210e9081a20093502b0042114200941d00a6a200941b8046a109704024020092903d00a2008580d0020094198076a410d108e04200941df0a6a20094198076a41086a280200220236000020092009290398073700d70a41002105200041186a41003a000020004200370308200020092900d00a370019200041216a200941d00a6a41086a290000370000200041286a200236000020004201370300200941b8046a108c0420092802d40141ffffff3f71450d0f20092802d001102e0c0f0b20094198076a41186a200941d8006a41186a29030037030020094198076a41106a200941d8006a41106a29030037030020094198076a41086a200941d8006a41086a2903003703002009200929035837039807200941d00a6a200941386a20094198076a10910420092802d00a220720092802d80a10ff01024020092802d40a450d002007102e0b200941d8006a109804200941286a200941dc016a20092903b801200941b8016a41086a29030010fb0120094198076a200941b8046a41b00210e9081a200941c8096a41186a200941386a41186a290300370300200941c8096a41106a200941386a41106a290300370300200941c8096a41086a200941386a41086a290300370300200920092903383703c8094110102c2203450d05200341f8f7c60036020c2003410136020820034281808080103702004110102c2207450d0520074190f8c60036020c20074101360208200742818080801037020020032003280200417f6a220a3602000240200a0d002003280208200328020c2802001103000240200328020c280204450d002003280208102e0b200341046a220a200a280200417f6a220a360200200a0d002003102e0b02400240200728020820094198076a200728020c28020c1101000d004102210320094188076a41023a000020094180076a41003a000020072007280200417f6a220a36020042002108200942003703f006200942013703e8060240200a0d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a220a200a280200417f6a220a360200200a0d002007102e0b20094198076a10dc02410121070c010b200941d00a6a20094198076a41b00210e9081a2009418a0d6a200941d0096a290300370100200941920d6a200941d8096a2903003701002009419a0d6a200941e0096a290300370100200941800d6a41206a200941e6096a29010037010020094180023b01800d200920092903c8093701820d200920073602a80d200941e8066a200941d00a6a200941800d6a10dd0220092903e8064201512107200941e8066a41206a2d0000210320092903f00621080b200941800d6a41186a200141186a290000370300200941800d6a41106a200141106a290000370300200941800d6a41086a200141086a290000370300200920012900003703800d20094198076a41186a200941386a41186a29030037030020094198076a41106a200941386a41106a29030037030020094198076a41086a200941386a41086a2903003703002009200929033837039807200941d00a6a41186a200941d8006a41186a290300370300200941d00a6a41106a200941d8006a41106a290300370300200941d00a6a41086a200941d8006a41086a290300370300200920092903583703d00a200920094190076a2800003600cf0920092009290089073703c8090240024020070d00410621070c010b200920092800cf093600c70a200920092903c8093703c00a4106210720084202510d00200920092800c70a3600b70a200920092903c00a3703b00a200321070b200941c8096a41086a2203200941800d6a41086a290300370300200941c8096a41106a220a200941800d6a41106a290300370300200941c8096a41186a2202200941800d6a41186a290300370300200941900a6a41086a220120094198076a41086a290300370300200941900a6a41106a220420094198076a41106a290300370300200941900a6a41186a220c20094198076a41186a290300370300200941f0096a41186a2219200941d00a6a41186a290300370300200941f0096a41106a2216200941d00a6a41106a290300370300200941f0096a41086a221a200941d00a6a41086a290300370300200920092903800d3703c80920092009290398073703900a200920092903d00a3703f009200920092800b70a3600c70a200920092903b00a3703c00a200941dd0a6a2003290300370000200941e50a6a200a290300370000200941ed0a6a2002290300370000200941143a00d00a200920092903c8093700d50a200941023a00d40a200941f50a6a20092903900a370000200941fd0a6a2001290300370000200941850b6a20042903003700002009418d0b6a200c290300370000200941ad0b6a2019290300370000200941a50b6a20162903003700002009419d0b6a201a290300370000200941950b6a20092903f009370000200941b70b6a20094198076a41026a2d00003a0000200941b50b6a20092f0098073b0000200941c00b6a20073a0000200941bc0b6a2006360200200941b80b6a2005360200200941c80b6a20092800c70a360000200941c10b6a20092903c00a370000200941d00a6a10fe010240024020092802f0060d00420021080c010b427f200bad42d886107e20144288277e7c42c0c995d6017c2208200941e8066a41106a2903007c221420142008541b2114420121080b20002008370308200020092800d00a36001920004200370300200041186a41003a0000200041106a20143703002000411c6a200941d30a6a280000360000024020092802d40141ffffff3f71450d0020092802d001102e0b410121072011450d0d2013a7450d0d2011102e0c0d0b2009411c360280020b2011450d00024020120d002013a7450d012011102e0c010b200941d00a6a41186a200141186a290000370300200941d00a6a41106a200141106a290000370300200941d00a6a41086a200141086a290000370300200920012900003703d00a2009201337029c072009201136029807200941b8046a200941d00a6a200941d8006a20094198076a42004200109304200920092900b9043703e8062009200941b8046a41086a2800003600ef06024020092d00b80422024106460d0020004200370308200020092903e80637002120004201370300200041206a20023a0000200041186a41003a0000200041286a20092800ef063600000c020b410121024101210720040d020c040b4100210220040d0120094198076a4102108e04200941df0a6a20094198076a41086a280200220236000020092009290398073700d70a200041186a41003a000020004200370308200020092900d00a370019200041216a200941d00a6a41086a290000370000200041286a2002360000200042013703000b0240200928028002411c460d0020094180026a108c040b024020092802d40141ffffff3f71450d0020092802d001102e0b410021050c0b0b200941d00a6a41186a200141186a290000370300200941d00a6a41106a200141106a290000370300200941d00a6a41086a200141086a290000370300200920012900003703d00a20092802d8012207200c490d0302400240200720092802d401470d00200741016a22032007490d062007410174220a2003200a20034b1b22034104200341044b1b220341ffffff3f71200346210a200341057421030240024020070d0020094100360298070c010b200941a0076a4101360200200920092802d001360298072009200741057436029c070b200941b8046a2003200a20094198076a107d200941c0046a280200210320092802b8044101460d01200920092802bc043602d001200920034105763602d4010b20092802d001200c4105746a220341206a20032007200c6b41057410ea081a200341186a200941d00a6a41186a290300370000200341106a200941d00a6a41106a290300370000200341086a200941d00a6a41086a290300370000200320092903d00a3700002009200741016a3602d801200941d00a6a200941b8016a41c80010e9081a20094198076a41186a200941d8006a41186a29030037030020094198076a41106a200941d8006a41106a29030037030020094198076a41086a200941d8006a41086a2903003703002009200929035837039807200941b8046a200941386a20094198076a10910420092802b804220720092802c004200941d00a6a109404024020092802bc04450d002007102e0b0240200941ec0a6a28020041ffffff3f71450d0020092802e80a102e0b200941f50a6a2009290338370000200941dd0a6a200141086a290000370000200941e50a6a200141106a290000370000200941ed0a6a200141186a290000370000200941fd0a6a200941386a41086a290300370000200941850b6a200941386a41106a2903003700002009418d0b6a200941386a41186a290300370000200941013a00d40a200941143a00d00a200920012900003700d50a200941b80b6a2005360200200941bc0b6a2006360200200941ad0b6a200941d8006a41186a290300370000200941a50b6a200941d8006a41106a2903003700002009419d0b6a200941d8006a41086a290300370000200941950b6a2009290358370000200941d00a6a10fe014100210720020d02200bad42c0a6087e201042e8077e7c42b090bbca007c2108410021070c030b2003450d040b1036000b200bad42f093097e201042b8177e7c42d086c192017c21080b2000420137030820004200370300200041186a41003a0000200041106a2008370300200928028002411c470d0220070d030c040b200c20071045000b1038000b20094180026a108c042007450d010b20092802d40141ffffff3f71450d0020092802d001102e0b410121070b0240200d41ffffff3f71450d00200f102e0b02402007200e45720d00201e41ffffff3f71450d00200e102e0b200941b00d6a24000f0b2011450d002013a7450d002011102e0b0240200d41ffffff3f71450d00200f102e0b02400240200e450d0020054101730d00201e41ffffff3f710d010b410021020c020b200e102e410021020c010b4101210a410121020b024020072d00000d00200a450d00200741086a280200450d00200741046a280200102e0b02402002450d00200341046a28020041ffffff3f71450d002003280200102e0b200941b00d6a24000bcd0101047f230041106b2202240002400240200141086a28020022034105744116722204417f4c0d002004102c2205450d0120024100360208200220043602042002200536020020022001280200411010742001280204210420032002107602402003450d002003410574210303402002200441201074200441206a2104200341606a22030d000b0b200220012f010c3b010e20022002410e6a41021074200020022802002204200228020810b00102402002280204450d002004102e0b200241106a24000f0b1038000b1036000bd40301037f230041f0006b2203240020034195fec6004108108102200341106a41f4f3c3004109108102024002404120102c2204450d002003422037025420032004360250200341d0006a2001412010742003200328025022012003280258220410a301370340200341ec006a200120046a360200200320013602682003200341c0006a41086a3602642003200341c0006a360260200341206a200341e0006a107c02402003280254450d002001102e0b4120102c2201450d002003422037024420032001360240200341c0006a200241201074200341d0006a200328024022012003280248220210d803200341ec006a200120026a360200200320013602682003200341e0006a3602642003200341d0006a360260200341306a200341e0006a107c02402003280244450d002001102e0b20032802282202200328023822046a41206a2201417f4c0d010240024020010d00410121050c010b2001102c2205450d010b20004100360208200020013602042000200536020020002003411010742000200341106a41101074200020032802202201200210742000200328023022022004107402402003280234450d002002102e0b02402003280224450d002001102e0b200341f0006a24000f0b1036000b1038000bc00502057f077e23004190016b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022010d00200041003602180c010b200328021421042003200341186a2802002202360244200320013602400240024020024104490d00200128000021052003200141046a36024020032002417c6a220636024420064104490d002003200141086a360240200128000421072003200241786a220636024420064110490d002003200241686a3602442003200141186a360240200141106a290000210820012900082109200341e8006a200341c0006a10930120032d00684101460d00200341c8006a41186a20034181016a290000370300200341d8006a200341f9006a290000370300200341d0006a200341f1006a290000370300200320032900693703482003200341c0006a10ab0102402003280200450d00200341003602680c010b200341e8006a200341c0006a200328020410920120032802682202450d00200341206a41086a200341c8006a41086a290300220a370300200341206a41106a200341c8006a41106a290300220b370300200341206a41186a200341c8006a41186a290300220c37030020032003290348220d370320200329026c210e20002008370308200020093703002000200e37021c200020023602182000200736021420002005360210200041246a200d3702002000412c6a200a370200200041346a200b3702002000413c6a200c3702000c010b20034100360250200342013703482003410a3602242003200341086a3602202003200341c8006a36028c01200341fc006a41013602002003420137026c200341909dc5003602682003200341206a3602782003418c016a419cebc000200341e8006a103d1a2003280248200328025010ef020240200328024c450d002003280248102e0b200041003602180b2004450d002001102e0b20034190016a24000bc70603037f027e017f23004180016b22062400200641106a2002109504200628021022072006280218108f02210802402006280214450d002007102e0b024002400240024002402008450d002000410e108e040c010b2006200341086a2208280200411f6a410576ad42004280a0cb9801420010e808200641106a2001200420062903007c220942809886abec057c220a2005200641086a2903007c2009200454ad7c200a200954ad7c220410c302200620062900113703702006200641106a41086a2207280000360077024020062d0010220b4106470d00200641c8006a200437030020072008280200360200200641246a200141086a2900003702002006412c6a200141106a290000370200200641346a200141186a2900003702002006200a370340200620032902003703102006200129000037021c200641d0006a4195fec6004108108102200641f0006a41ccf4c30041051081024120102c2203450d032006422037026420062003360260200641e0006a20024120107420062802682203417f4c0d04200628026021010240024020030d00410121020c010b2003102c2202450d040b20022001200310e908210202402006280264450d002001102e0b200341206a2201417f4c0d042001102c2208450d03200641003602682006200136026420062008360260200641e0006a200641d0006a41101074200641e0006a200641f0006a41101074200641e0006a20022003107402402003450d002002102e0b2006280218220141146a2203417f4c0d0420062802602102200628026821080240024020030d00410121070c010b2003102c2207450d040b200641003602582006200336025420062007360250200628021021032001200641d0006a1076200641d0006a200320011074200641d0006a2006411c6a41201074200620043703782006200a370370200641d0006a200641f0006a411010742002200820062802502201200628025810b20102402006280254450d002001102e0b02402006280264450d002002102e0b02402006280214450d002003102e0b200041063a00000c020b2000200b3a000020002006290370370001200041086a20062800773600000b200341046a280200450d002003280200102e0b20064180016a24000f0b1036000b1038000be50103017f017e017f230041206b220324002003410036020820034201370300200320022802103602102003200341106a410410742003200241146a2802003602102003200341106a41041074200229030021042003200241086a290300370318200320043703102003200341106a411010742003200241246a4120107420022802182105200241206a28020022022003107602402002450d002002410574210203402003200541201074200541206a2105200241606a22020d000b0b2000200120032802002205200328020810b20102402003280204450d002005102e0b200341206a24000bf50101047f230041306b2202240020024195fec6004108108102200241106a41ccf4c3004105108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000bee0502087f057e23004190016b220324002003200236020c20032001360208200341106a2001200210ed0202400240024002400240200328021022010d00200041003602000c010b200328021421022003200341186a280200360244200320013602402003200341c0006a10ab0102400240024020032802000d002003280244220420032802042205490d002005417f4c0d040240024020050d00410121060c010b200510322206450d06200328024421040b024020042005490d0020062003280240200510e9082107200328024422042005490d072003200420056b3602442003200328024020056a360240200341e8006a200341c0006a109301024020032d00684101470d0020050d010c020b200341c8006a41186a220420034181016a290000370300200341c8006a41106a2208200341f9006a290000370300200341c8006a41086a2209200341f1006a290000370300200320032900693703482003280244220a410f4b0d022005450d010b2006102e0b20034100360250200342013703482003410a3602242003200341086a3602202003200341c8006a36028c01200341fc006a41013602002003420137026c200341909dc5003602682003200341206a3602782003418c016a419cebc000200341e8006a103d1a2003280248200328025010ef020240200328024c450d002003280248102e0b200041003602000c010b200341206a41086a2009290300220b370300200341206a41106a2008290300220c370300200341206a41186a2206200429030037030020032003290348220d3703202003200a41706a36024420032003280240220441106a360240200441086a290000210e2004290000210f200041086a20053602002000200536020420002007360200200041386a200e370300200041306a200f3703002000410c6a200d370200200041146a200b3702002000411c6a200c370200200041246a20062903003702000b2002450d002001102e0b20034190016a24000f0b1038000b1036000b2005200441b8b2c0001056000bd34804017f027e107f037e230041d0016b2202240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e1c0102030405060708090a0b0c0d0e0f101112131415161718191a1b00010b20014184026a350200210320014180026a3502002104200141f4016a2802002105200141e8016a2802002106200141dc016a2802002107200141d0016a2802002108200141c4016a2802002109200141b8016a280200210a200141ac016a280200210b200141a0016a280200210c20014194016a280200210d20014188016a280200210e200141fc006a280200210f200141f0006a2802002110200141e4006a2802002111200141d8006a2802002112200141cc006a2802002113200141c0006a2802002114200241086a200141386a109706200342889b047e200442f0aefa017e7c417f2005417f2006417f2007417f2008417f2009417f200a417f200b417f200c417f200d417f200e417f200f417f2010417f2011417f2012417f201420136a220120012014491b22016a221420142001491b22016a221420142001491b22016a221420142001491b22016a221420142001491b22016a221420142001491b22016a221420142001491b22016a221420142001491b22016a221420142001491b22016a221420142001491b22016a221420142001491b22016a221420142001491b22016a221420142001491b22016a221420142001491b22016a221420142001491bad42e8aede067e7c200235021042a0ede0017e7c4280e59af7007c21030240200228020c41808080807872418080808078460d002002280208102e0b200041003b0108200020033703000c1b0b02400240024002400240024002400240024002400240200141086a2802000e0b000102030405060708090a000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194cccc003602c0012002200241c0016a360218200241086a41ecc5cc001044000b2001410c6a3502002103200241086a10a90320022903102104200041003b0108200020032004428094ebdc03807e20032004428094ebdc03827e2203428094ebdc038042ffffffff0f2003428080808080c0b2cd3b541b2003428094ebdc03824280cab5ee0156ad7c42ffffffff0f837c3703000c230b200041003b0108200042b0f7d0003703000c220b200041013b0108200042a8afc8303703000c210b200241086a10a90320022903102103200041013b0108200020033703000c200b200241086a10a90320022903102103200041013b0108200020033703000c1f0b200041013b0108200042e8f084f0003703000c1e0b200041013b01082000200141146a3502004290a7fa2f7e3703000c1d0b200041013b01082000200141146a3502004280f4f02f7e3703000c1c0b200041013b01082000417f200141186a280200220141016a221420142001491bad42f8f88b307e3703000c1b0b200041003b01082000200141146a35020042e8077e3703000c1a0b024002400240024002400240024020012d00040e0700010203040506000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a41ecb0c4001044000b200041003b0108200042d8c4c7c8003703000c1e0b200041003b010820004290cf93bc013703000c1d0b200041003b0108200042f8a8ee87013703000c1c0b200041003b010820004288b68eca013703000c1b0b200041003b0108200042d8c4c7c8003703000c1a0b200041003b0108200042f8a8ee87013703000c190b0240024002400240200141086a2802000e0400010203000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194cccc003602c0012002200241c0016a360218200241086a4190afc4001044000b200041003b010820002001411c6a280200220141e400200141e4004b1bad4298d70a7e4280a9f3bbb0027c3703000c1a0b200041003b010820002001411c6a280200220141e400200141e4004b1bad4298d70a7e4280a9f3bbb0027c3703000c190b200041003b010820004280c2d72f3703000c180b200041023b0108200042a0bebbd8003703000c170b02400240024002400240024020012d00040e06000102030405000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a41e89bc4001044000b200041003b0108200042a887a2cf003703000c1a0b200041003b0108200042c8f8978f013703000c190b200041003b0108200042e8e398cf003703000c180b200041003b010820004280c6928b013703000c170b200041003b0108200042b8a8b4ce003703000c160b02400240024002400240200141086a2802000e050001020304000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194cccc003602c0012002200241c0016a360218200241086a4194a7c7001044000b200041003b0108200042e8dae8df003703000c180b200041003b0108200042f085f7cc003703000c170b200041003b0108200042988ef29a013703000c160b200041003b0108200042d0e0dad6003703000c150b200041023b0108200042003703000c140b024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200141086a2d00000e18000102030405060708090a0b0c0d0e0f1011121314151617000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a41f4ebc6001044000b200041003b0108200042f0a8939e023703000c290b200041003b0108200042c8c6ce9e013703000c280b200041003b0108200042b8f4cad7013703000c270b200041003b010820002001410c6a350200220342f8ef9e017e20034280c2d72f7e7c4290fb86ed037c3703000c260b200041003b010820004280e5a9f2003703000c250b200041003b01082000200141146a350200220342f094d6027e200342c0f0f50b7e7c4280d0d98e017c3703000c240b200041003b010820004298e7fcf1003703000c230b200041003b0108200042f0dba8c1003703000c220b200041003b010820004280f7b6bf013703000c210b200041003b0108200042c8b6d0303703000c200b200041003b0108200042c8b6d0303703000c1f0b200041003b0108200042c8b6d0303703000c1e0b200041003b0108200042808fe5303703000c1d0b200041003b0108200042d0a1e4303703000c1c0b200041003b01082000200141146a35020042b891027e428086e8307c3703000c1b0b200041003b010820002001412c6a350200220342c0db9d017e20034280c2d72f7e7c42c0abb4c9037c3703000c1a0b200041003b0108200042a0bde0303703000c190b200041003b01082000200141186a35020042a8edc0107e42d8c8e8c0167c3703000c180b200041003b0108200042c88dfff4d5033703000c170b200041003b0108200042f8b3dac4013703000c160b200041003b01082000200141106a35020022034298bfe50e7e20034280cee4cd027e7c4280e9c9d6017c3703000c150b200041003b010820002001412c6a350200220342b08a9e017e20034280c2d72f7e7c428091a2cb037c3703000c140b200041003b01082000200141146a350200220342b0b2cf087e200342c0f0f50b7e7c20034280c2d72f7e7c42b0fbf2107c3703000c130b108405000b200041003b0108200042b08ee2d00342b0a1bafa0220012802041b3703000c110b0240024002400240200141086a2802000e0400010203000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a41c499c9001044000b200041003b010820002001411c6a280200220141e400200141e4004b1bad4298d70a7e42c0c6cbccb0027c3703000c120b200041003b010820002001411c6a280200220141e400200141e4004b1bad4298d70a7e42c0c6cbccb0027c3703000c110b200041003b0108200042c0cf8e313703000c100b200041003b01082000200141286a35020042d0e50d7e2001411c6a35020042e092197e7c42c0b7828b017c3703000c0f0b109f04000b02400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200141086a2d00000e1a000102030405060708090a0b0c0d0e0f10111213141516171819000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a41c0accb001044000b200041003b0108200042a8cad6cf013703000c250b200041003b01082000200141106a35020042a0f80c7e42f89f9fcf007c3703000c240b200041003b010820004288dbaed7013703000c230b200041013b0108200042d0ed9c85013703000c220b200041003b010820004280ac9cd3003703000c210b200041003b010820004288dc82313703000c200b200041003b010820004280b582313703000c1f0b200041003b0108200042b0d0b5b4013703000c1e0b200041003b0108200042d89afd8e013703000c1d0b200041003b01082000429080ef373703000c1c0b200041013b0108200042f899c995013703000c1b0b200041003b01082000429887abd1333703000c1a0b200041003b010820004290fbc2c9323703000c190b200041003b0108200042d09be6303703000c180b200041003b01082000200141146a35020042a01f7e42f0ae87d1007c3703000c170b200041013b01082000200141146a35020042a01f7e42f0ae87d1007c3703000c160b200041003b01082000200141146a35020042b8177e4298d7a9c9007c3703000c150b200041013b01082000200141146a35020042b8177e4298d7a9c9007c3703000c140b200041003b010820002001412c6a35020042b8177e42c0cae5da007c3703000c130b200041003b0108200042b880d9d1013703000c120b200041003b01082000428881b08d013703000c110b200041003b010820004298c3b48d013703000c100b200241086a10a90320022903102103200041003b0108200020033703000c0f0b200041013b0108200042c88892a5033703000c0e0b200041003b010820004290848df0013703000c0d0b0240024002400240024002400240200141086a2d00000e0700010203040506000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a41b8afc9001044000b200041013b01082000200141346a35020042b882077e200141386a35020042c0b5e5097e7c42a0c0b291397c3703000c110b200141106a3502002103200241086a2001410c6a28020010970420022903082104200041013b01082000427f2004200342a01f7e42d8878f1c7c22037c220420042003541b3703000c100b200141146a2802002114024002402001410c6a28020041014b0d00200241086a200141106a280200109704427f2014ad42a01f7e42f8f3e32f7c220320022903087c220420042003541b21030c010b2014ad4288277e4280d997a0027c21030b200041013b0108200020033703000c0f0b200041013b0108200042a0949fe6003703000c0e0b200041013b01082000427f200141306a35020042b8177e42e090bd8a027c2203200141386a2903007c220420042003541b3703000c0d0b200041003b010820004290d591bc013703000c0c0b0240024002400240024002400240200141086a2d00000e0700010203040506000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a41b8afc9001044000b200041013b01082000200141346a35020042b882077e200141386a35020042c0b5e5097e7c42a0c0b291397c3703000c100b200141106a3502002103200241086a2001410c6a28020010970420022903082104200041013b01082000427f2004200342a01f7e42d8878f1c7c22037c220420042003541b3703000c0f0b200141146a2802002114024002402001410c6a28020041014b0d00200241086a200141106a280200109704427f2014ad42a01f7e42f8f3e32f7c220320022903087c220420042003541b21030c010b2014ad4288277e4280d997a0027c21030b200041013b0108200020033703000c0e0b200041013b0108200042a0949fe6003703000c0d0b200041013b01082000427f200141306a35020042b8177e42e090bd8a027c2203200141386a2903007c220420042003541b3703000c0c0b200041003b010820004290d591bc013703000c0b0b0240024002400240024002400240200141086a2d00000e0700010203040506000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a4188f3c0001044000b200041003b01082000200141146a35020022034288f1117e42d0ef9dbc017c2204200342c8ac137e42c0da8abc017c221520042015561b2204200342c082147e4290faffaf017c220320042003561b3703000c0f0b200041003b0108200042f8a1f095013703000c0e0b200041003b010820002001410c6a35020042e08f1a7e42f0e2efee007c3703000c0d0b4288e3e7d40021030240024002402001410c6a2802000e03010200010b200141106a35020042e0b30e7e42c089ecd1007c21030c010b42f0f7f0920221030b200041003b0108200020033703000c0c0b42e0fca3da022103024020012d00090d00200241086a10a903200229031021030b200041003b0108200020033703000c0b0b200041003b010820002001410c6a350200220342a0838b377e200342c0d1e1237e7c20034280c6868f017e7c4280c2d72f7c3703000c0a0b0240024002400240024002400240024020012d00040e080001020304050607000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a41a4c3cb001044000b200041003b010820004280e1eb173703000c0f0b200041003b010820004280e1eb173703000c0e0b200041003b010820004280e1eb173703000c0d0b200041003b010820004280e1eb173703000c0c0b200041003b010820004280e1eb173703000c0b0b200041003b010820004280e1eb173703000c0a0b200041003b010820004280e1eb173703000c090b0240024002400240200141086a2802000e0400010203000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a4184ccc2001044000b200041003b0108200042c88b98ff003703000c0a0b200041013b0108200042f8b59f92013703000c090b200041013b0108200042c0b4c6cb003703000c080b024002400240024002400240200141086a2d00000e06000102030405000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a41e0f3c0001044000b200041003b0108200042e8b0efff043703000c0b0b200041003b0108200042b8e5dbd3013703000c0a0b200041003b0108200042b895a182053703000c090b20004180023b0108200042a8a0c4a7043703000c080b200041003b0108200042e0ecad90033703000c070b02400240024002400240200141086a2802000e050001020304000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194cccc003602c0012002200241c0016a360218200241086a41aca7c7001044000b200041003b0108200042f0ee8291013703000c090b200041003b0108200042a8aac0cc013703000c080b200041003b010820004288b0b6e7013703000c070b200041003b010820004280c2eca2023703000c060b024002400240024002400240024020012f01040e0400010203000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194cccc003602c0012002200241c0016a360218200241086a41fcc5cc001044000b200141106a280200220741ffffffff00712007470d0b41082106200141086a2802002114024020074104742201450d002001102c2206450d030b02400240024002402001410476220820074f0d00200141037622052007200520074b1b22054104200541044b1b220541ffffffff00712005464103742108200541047421050240024020010d00200241003602080c010b200241086a41086a41083602002002200136020c200220063602080b200241c0016a20052008200241086a107d200241c8016a280200210120022802c0014101460d0120022802c4012106200141047621080b20142014200741b0026c6a470d0142002103200621050c020b20010d040c0d0b200741b0026c2105200741047441706a4104762109200621010340200241086a2014109704200141086a200241086a41086a29030037030020012002290308370300200141106a2101201441b0026a2114200541d07d6a22050d000b2006200941016a41047422146a2105420021034100210141000d000340427f2003200620016a2903007c220420042003541b21032014200141106a2201470d000b0b427f2007ad4288b0fa007e20037c42c8b8fa067c220420042003541b21032005200622146b210141012107024003402001450d01200141706a2101201441086a2105201441106a211420052d00004101460d000b410021070b02402008450d002006102e0b200041003a0009200020073a0008200020033703000c0a0b200241086a200141086a2802001097042002290308210320022d00102101200041003a0009200020013a00082000427f200342d0ceae3d7c220420042003541b3703000c090b200141106a280200220741ffffffff00712007470d0941082106200141086a2802002114024020074104742201450d002001102c2206450d010b024002402001410476220820074f0d00200141037622052007200520074b1b22054104200541044b1b220541ffffffff00712005464103742108200541047421050240024020010d00200241003602080c010b200241086a41086a41083602002002200136020c200220063602080b200241c0016a20052008200241086a107d200241c8016a280200210120022802c0014101460d0120022802c4012106200141047621080b20142014200741b0026c6a470d0242002103200621050c030b2001450d090b1036000b200741b0026c2105200741047441706a4104762109200621010340200241086a2014109704200141086a200241086a41086a29030037030020012002290308370300200141106a2101201441b0026a2114200541d07d6a22050d000b2006200941016a41047422146a2105420021034100210141000d000340427f2003200620016a2903007c220420042003541b21032014200141106a2201470d000b0b427f2007ad42e88dfb007e20037c42e0b8a1077c220420042003541b21032005200622146b210141012107024003402001450d01200141706a2101201441086a2105201441106a211420052d00004101460d000b410021070b02402008450d002006102e0b200041003a0009200020073a0008200020033703000c050b0240024002400240024002400240024002400240024002400240024002400240200141086a2d00000e10000102030405060708090a0b0c0d0e0f000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a41f89bc4001044000b200041003b010820004288b69ac9003703000c120b200041003b0108200042a0ac9c8e013703000c110b200041003b01082000200141146a350200220342b8fea8037e200342c0f0f50b7e7c20034280c2d72f7e7c4290cae8c7277c3703000c100b200041003b0108200042f0d98bc5273703000c0f0b200041003b010820004288bb99aa013703000c0e0b200041003b010820004288abfb99013703000c0d0b200041003b0108200042e0ecafc2003703000c0c0b200041003b010820004288f0efc2003703000c0b0b200041003b0108200042d092b3c2003703000c0a0b200041003b0108200042c8fee29f013703000c090b200041003b0108200042e891b0e6273703000c080b200041003b0108200042e099e6a8013703000c070b200041003b0108200042889e8ad1003703000c060b200041003b010820004288ee8ea8013703000c050b200041003b0108200042e8dcfb90013703000c040b0240024002400240024002400240024002400240024020012d00040e0b000102030405060708090a000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194cccc003602c0012002200241c0016a360218200241086a4198f3c0001044000b200241086a200141286a2802001097042002290308210320022d00102101200041003a0009200020013a00082000427f200342f0f6e0d5007c220420042003541b3703000c0c0b200041003b0108200042f097e5d0003703000c0b0b200041003b0108200042a0fe91d1003703000c0a0b200041003b010820004298b0a4cf003703000c090b200041003b0108200042e0cedfdf003703000c080b200041003b0108200042b0b19ed0003703000c070b200041003b0108200042c0ff90a8013703000c060b200041003b0108200042a0a68f93013703000c050b200041003b0108200042c8e69193013703000c040b200241086a200141c8006a2802001097042002290308210320022d00102101200041003a0009200020013a00082000427f200342b0c1a4e5017c220420042003541b3703000c030b02400240024002400240200141086a2d00000e050001020304000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a41889cc4001044000b200241086a200141186a2802002201109704200241003602c801200242013703c0012001200241c0016a10900220023502c8012103024020022802c401450d0020022802c001102e0b2002290308210420022d00102101200041003a0009200020013a00082000427f427f2004200342e8077e42b0b182067c22037c220420042003541b220342c0b2cd3b7c220420042003541b3703000c050b200041003b01082000427f200141146a350200220342a08a077e2001412c6a350200220442e8077e22157c42e0ff9fe1007c2216200342d8a1077e200442b8177e7c428093e49f017c221720162017561b2216200342c0a6087e20157c42b090bbca007c221520162015561b2215200342d886107e20044288277e7c42c0c995d6017c220320152003561b2203200141306a2903007c220420042003541b3703000c040b200041003b01082000427f200141346a350200220342a08a077e42f8c287e1007c2204200342f096087e42b8f9a5ca007c221520042015561b220420034298c5107e4288b6fef8017c220320042003561b2203200141c8006a2903007c220420042003541b3703000c030b200041003b01082000200141346a35020042f8c0077e42b8dfe7a6017c3703000c020b0240024002400240024002400240024002400240200141086a2802000e0a00010203040506070809000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a41e0ecc0001044000b200041003b01082000200141146a35020042e8077e42a0a080ec017c3703000c090b200041003b0108200042c0bcd7fc003703000c080b200041003b0108200042c8e4e73f3703000c070b200041003b0108200042b08ddb93013703000c060b200041003b010820004298c6bf89013703000c050b200041003b0108200042d8cac8c7003703000c040b200041003b0108200042b897cedd023703000c030b200041003b01082000428887a88c023703000c020b200041003b0108200042c89596c7003703000c010b0240024002400240024002400240200141086a2d00000e0700010203040506000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a41d4cec8001044000b200041003b01082000200141346a35020042d00f7e42a096ca8f017c3703000c050b200041003b0108200042a0cfe181013703000c040b200041003b01082000200141346a35020042d00f7e42a0899387017c3703000c030b200041003b0108200042c0c1f7d5003703000c020b200041003b010820004288fbb8de013703000c010b200041003b010820004280e4c4f7003703000b200241d0016a24000f0b1038000baa0303067f027e017f230041b0016b22012400200141386a2000109504200141c8006a2001280238220220012802402203109604024020012802482200450d002002200310ff010b20014188016a41086a2203200141c8006a41106a29030037030020014188016a41106a2204200141c8006a41186a29030037030020014188016a41186a2205200141c8006a41206a29030037030020014188016a41206a2206200141f0006a2802003602002001200141c8006a41086a290300370388010240024020000d00200128023c450d012002102e0c010b20014180016a2903002107200141f8006a2903002108200128024c2109200141106a41206a2006280200360200200141106a41186a2005290300370300200141106a41106a2004290300370300200141106a41086a200329030037030020012001290388013703100240200128023c450d002002102e0b200141e0006a2001412c6a290200370300200141d8006a200141246a290200370300200141d0006a2001411c6a290200370300200120012902143703482001200141c8006a2008200710fb012009450d002000102e0b200141b0016a24000bc64b0a017f017e047f017e017f037e087f017e147f027e230041d0076b22042400200441c0006a20024180026a290000370300200441386a200241f8016a290000370300200441286a41086a200241f0016a290000370300200420022900e80137032820022903002105200441e8016a200241880210e9081a200420044180056a3602f403200420044180056a3602f003200441d0056a200441e8016a41086a2206109a04200441f8036a200441e0026a2207109a0402400240024002400240200441d0056a200441f8036a412010ec08450d00200441fc016a2802002208450d00200441f4016a2802002102200841246c21080340024020022d00004101470d00200241016a28000041c28289aa04470d002004200241106a2802003602d4052004200241086a2802003602d005200441f8036a200441d0056a10930220042903f8034203510d00200441ec026a2802002208450d022004280288042109200429038004210a200441e4026a2802002102200841246c2108024002400240024002400340024020022d00004101470d00200241016a28000041c28289aa04470d002004200241106a2802003602d4052004200241086a2802003602d005200441f8036a200441d0056a10930220042903f8034203510d0020042903e801200a520d09200a200429038004520d092009200428028804470d09200441f8036a200641f00010e9081a2004200441d0036a22023602e804200441f8036a2002109b04450d0a200441f8036a200741f00010e9081a200420023602e804200441f8036a2002109b04450d0b2003280210210b20032802002107200441e8016a41186a22024200370300200441e8016a41106a22084200370300200441e8016a41086a22064200370300200442003703e801200441f8036a41a8f8c60041041081022006200441f8036a41086a2209290000370300200420042900f8033703e801200441f8036a41e38bc500410b10810220022009290000370300200820042900f803370300200441186a200441e8016a10850302402007420020052004290320420020042802181b7d220a200a2005561b220a42e01280a7417f200a428080808080ac02541b460d00200441e8016a4102109c0420004201370300200041286a200441e8016a41206a290300370300200041206a2002290300370300200041186a2008290300370300200041106a2006290300370300200020042903e8013703080c0d0b2004418c056a200441286a41086a29030037020020044194056a200441286a41106a2903003702002004419c056a200441286a41186a290300370200200441e2c289ab0636028005200420042903283702840520044198016a41106a200341106a28020036020020044198016a41086a200341086a2902003703002004200329020037039801200441d0056a20044180056a20044198016a109d04200428029006450d02200441e8016a41066a200441d0056a41d00010e9081a200441f8036a200441e8016a41d60010e9081a200441c8006a200441f8036a41066a41d00010e9081a20044198016a200441c8006a41d00010e9081a4101210841002103024020012d00004101470d00200441e8016a41186a2202200141196a290000370300200441e8016a41106a2203200141116a290000370300200441e8016a41086a2206200141096a290000370300200420012900013703e8014120102c2208450d06200820042903e801370000200841186a2002290300370000200841106a2003290300370000200841086a2006290300370000410121030b200420053703f803200441f8036a41086a20044198016a41d00010e90821022004200b3602d404200420073602d00441d000102c2206450d05200441e8016a41086a2207200241086a290300370300200441e8016a41106a2201200241106a290300370300200441e8016a41186a2209200241186a290300370300200420022903003703e801200441f8036a41286a290300210a200441a8046a290300210c200441f8036a41386a290300210d200441b8046a290300210e200441d0056a200441f8036a41c8006a10c501200641386a200e3703002006200d370330200641286a200c3703002006200a370320200641186a2009290300370300200641106a2001290300370300200641086a2007290300370300200620042903e801370300200620042903d005370340200641c8006a200441d0056a41086a280200360200200420033602f804200420033602f404200420083602f0044108102c2202450d05200442083702e406200420023602e006200420053703e8014108210f200441e0066a200441e8016a41081074200441e8016a419997c500108a03200441d0056a20042802e801220820042802f001108b0320042902d405420020042802d00522021b210a2002410120021b2109024020042802ec01450d002008102e0b2004200a4220883e02c407200420093602c007200441106a200441c0076a10ab01410021104100211120042802100d042004280214221220042802c40741286e2202200220124b1bad42287e220c422088a70d06200ca72202417f4c0d060240024020020d00410821130c010b2002102c2213450d060b200241286e2114024020120d00410021120c040b41002115034002400240024020042802c40722084108490d00201541016a211620042802c0072207290000210c2004200841786a22013602c4072004200741086a3602c00741002102200441003a008802200841776a21080240034020012002460d01200441e8016a20026a200720026a220341086a2d00003a00002004200341096a3602c0072004200241016a22033a008802200420083602c4072008417f6a21082003210220034120470d000b200441d0056a41186a2202200441e8016a41186a290300370300200441d0056a41106a2208200441e8016a41106a290300370300200441d0056a41086a2207200441e8016a41086a290300370300200420042903e8013703d005200341ff01714120490d01200441c0066a41086a2007290300220d370300200441c0066a41106a2008290300220e370300200441c0066a41186a20022903002217370300200441a0066a41186a22082017370300200441a0066a41106a2203200e370300200441a0066a41086a2207200d370300200420042903d005220d370380072004200d3703c0062004200d3703a00620152014470d03201441016a220220144f0d020c0b0b200241ff0171450d00200441003a0088020b410021104108210f02402014450d00201441286c450d002013102e0b410021110c070b201441017422012002200120024b1b22024104200241044b1bad42287e220d422088a7454103742102200da721010240024020140d00200441003602e8010c010b200441083602f001200420133602e8012004201441286c3602ec010b200441d0056a20012002200441e8016a107d20042802d8052102024020042802d0054101470d002002450d090c080b20042802d4052113200241286e21140b2013201541286c6a2202200c370300200220042903a006370308200241106a2007290300370300200241186a2003290300370300200241206a20082903003703002016211520162012460d040c000b0b200241246a21022008415c6a22080d000c080b0b200441e8016a4102109c0420004201370300200041286a200441e8016a41206a290300370300200041206a200441e8016a41186a290300370300200041186a200441e8016a41106a290300370300200041106a200441f0016a290300370300200020042903e8013703080c0a0b2012410020131b21112014410020131b21102013410820131b210f0b200441e8016a419997c500200441e0066a108c03200441d0056a20042802e801220820042802f001108d0320042902d405420020042802d00522021b210c024020042802ec01450d002008102e0b200c422088210d20042802e806211820042802e406211920042802e006211a0240200aa7450d002009102e0b2002410120021b211b200da7211c200ca7211d200441e8016a41086a2202200641086a290300370300200441e8016a41106a2208200641106a290300370300200441e8016a41186a2203200641186a290300370300200441e8016a41206a2207200641206a290300370300200441e8016a41286a2201200641286a290300370300200441e8016a41306a2209200641306a290300370300200441e8016a41386a2214200641386a290300370300200441d0056a41086a2212200641cc006a280200360200200420062903003703e801200420062902443703d00502400240200628024022130d00410021070c010b20044180076a41386a2215201429030037030020044180076a41306a2214200929030037030020044180076a41286a2209200129030037030020044180076a41206a2201200729030037030020044180076a41186a2207200329030037030020044180076a41106a2203200829030037030020044180076a41086a22082002290300370300200441c0076a41086a22022012280200360200200420042903e80137038007200420042903d0053703c00720044180056a41386a201529030037030020044180056a41306a201429030037030020044180056a41286a200929030037030020044180056a41206a200129030037030020044180056a41186a200729030037030020044180056a41106a200329030037030020044180056a41086a2008290300370300200420042903800737038005200420133602c005200441c4056a220820042903c007370200200841086a20022802003602004108102c2202450d01200442083702ec01200420023602e801200420053703d005200441e8016a200441d0056a41081074200441f4016a220241086a41002900a19745370000200241002900999745370000200420044180056a36028402200441c0066a200441e8016a10ae01024020042802ec01450d0020042802e801102e0b200441e8016a200441c0066a108e0320042802e801220820042802f001108f022102024020042802ec01450d002008102e0b02400240024020020d00200441d0056a20044180056a41d00010e9081a200441a0066a200441f0046a10c801200441e8016a200441d0056a41d00010e9081a200441e8016a41d0006a220241086a200441a0066a41086a280200360200200220042903a006370200200441d0056a200441c0066a108e0320042802d005220220042802d805200441e8016a108f03024020042802d405450d002002102e0b024020042802ac022202450d00200241306c450d0020042802a802102e0b024020042802bc0241ffffff3f71450d0020042802b802102e0b200441d0056a41186a2201200441c0066a41186a290300370300200441d0056a41106a2209200441c0066a41106a290300370300200441d0056a41086a2214200441c0066a41086a290300370300200420042903c0063703d00541002102024020110e020302000b4100210220112108034020022008410176220320026a2207200f200741286c6a2903002005561b2102200820036b220841014b0d000c020b0b4100210720042802c4052202450d02200241306c450d0220042802c005102e0c020b200f200241286c6a290300220a2005510d002002200a2005546a21020b200441e8016a41186a2001290300370300200441e8016a41106a2009290300370300200441e8016a41086a2014290300370300200420042903d0053703e8010240024020112002490d00024020112010470d00201041016a22082010490d05201041017422032008200320084b1b22084104200841044b1bad42287e220a422088a7454103742108200aa721030240024020100d00200441003602a0060c010b200441083602a8062004200f3602a0062004201041286c3602a4060b200441e0066a20032008200441a0066a107d20042802e806210820042802e0064101460d0220042802e406210f200841286e21100b200f200241286c6a220841286a2008201120026b41286c10ea081a20082005370300200841206a200441e8016a41186a2203290300370300200841186a200441e8016a41106a2201290300370300200841106a200441e8016a41086a2209290300370300200820042903e8013703082003200441d0056a41186a2903003703002001200441d0056a41106a2903003703002009200441d0056a41086a290300370300200420042903d0053703e8010240201c201d470d00201d41016a2202201d490d05201d41017422082002200820024b1b22024104200241044b1b220241ffffff3f7120024621082002410574210202400240201d0d00200441003602a0060c010b200441013602a8062004201b3602a0062004201d4105743602a4060b200441e0066a20022008200441a0066a107d20042802e8062102024020042802e0064101470d002002450d060c050b20042802e406211b2002410576211d0b41012107201141016a2111201b201c4105746a220220042903e801370000200241186a2003290300370000200241106a2001290300370000200241086a2009290300370000201c41016a211c0c020b200220111045000b2008450d020c010b200641d0006a220220026b220841d0006d210302402008450d00200341d0006c2108200241c4006a21020340024020022802002203450d00200341306c450d002002417c6a280200102e0b200241d0006a2102200841b07f6a22080d000b0b2006102e0240024002402007450d00024002400240201c450d00201c4105742106200441ac026a2102201b21080340200441c0076a2008108e03200441e8016a20042802c007220720042802c807109003200441d0056a41086a2201200441e8016a41086a290300370300200441d0056a41106a2209200441e8016a41106a290300370300200441d0056a41186a2214200441e8016a41186a290300370300200441d0056a41206a2212200441e8016a41206a290300370300200441d0056a41286a2213200441e8016a41286a290300370300200441d0056a41306a2215200441e8016a41306a290300370300200441d0056a41386a2216200441e8016a41386a290300370300200441c0066a41086a221e200241086a290200370300200441c0066a41106a221f200241106a290200370300200441c0066a41186a2220200241186a280200360200200420042903e8013703d005200420022902003703c006024020042802a8022203450d0020044180056a41386a201629030037030020044180056a41306a201529030037030020044180056a41286a201329030037030020044180056a41206a201229030037030020044180056a41186a201429030037030020044180056a41106a200929030037030020044180056a41086a2001290300370300200441a0066a41086a201e290300370300200441a0066a41106a201f290300370300200441a0066a41186a2020280200360200200420042903d00537038005200420042903c0063703a0060b024020042802c407450d002007102e0b20030d02200841206a2108200641606a22060d000b0b4200210a410821070c010b20044180076a41386a220220044180056a41386a29030037030020044180076a41306a220120044180056a41306a29030037030020044180076a41286a220920044180056a41286a29030037030020044180076a41206a221420044180056a41206a29030037030020044180076a41186a221220044180056a41186a29030037030020044180076a41106a221320044180056a41106a29030037030020044180076a41086a221520044180056a41086a290300370300200441e0066a41086a2216200441a0066a41086a290300370300200441e0066a41106a221e200441a0066a41106a290300370300200441e0066a41186a221f200441a0066a41186a280200360200200420042903800537038007200420042903a0063703e00641e000102c2207450d04200720042903800737030020072003360240200720042903e006370244200741386a2002290300370300200741306a2001290300370300200741286a2009290300370300200741206a2014290300370300200741186a2012290300370300200741106a2013290300370300200741086a2015290300370300200741cc006a2016290300370200200741d4006a201e290300370200200741dc006a201f280200360200024020064120470d00428180808010210a0c010b200841206a2112201b201c4105746a222141606a2122200441e8016a41c4006a2102428180808010210a0340201221080340200441c0076a2008108e03200441e8016a20042802c007221420042802c807109003200441d0056a41086a2206200441e8016a41086a2223290300370300200441d0056a41106a2201200441e8016a41106a2224290300370300200441d0056a41186a2209200441e8016a41186a2225290300370300200441d0056a41206a2212200441e8016a41206a2226290300370300200441d0056a41286a2213200441e8016a41286a2227290300370300200441d0056a41306a2215200441e8016a41306a2228290300370300200441d0056a41386a2216200441e8016a41386a2229290300370300200441c0066a41086a221e200241086a290200370300200441c0066a41106a221f200241106a290200370300200441c0066a41186a2220200241186a280200360200200420042903e8013703d005200420022902003703c006024020042802a8022203450d0020044180056a41386a201629030037030020044180056a41306a201529030037030020044180056a41286a201329030037030020044180056a41206a201229030037030020044180056a41186a200929030037030020044180056a41106a200129030037030020044180056a41086a2006290300370300200441a0066a41086a201e290300370300200441a0066a41106a201f290300370300200441a0066a41186a2020280200360200200420042903d00537038005200420042903c0063703a0060b024020042802c407450d002014102e0b024020030d002021200841206a2208470d010c030b0b20044180076a41386a221420044180056a41386a29030037030020044180076a41306a221220044180056a41306a29030037030020044180076a41286a221320044180056a41286a29030037030020044180076a41206a221520044180056a41206a29030037030020044180076a41186a221620044180056a41186a29030037030020044180076a41106a221e20044180056a41106a29030037030020044180076a41086a221f20044180056a41086a290300370300200441e0066a41086a2220200441a0066a41086a290300370300200441e0066a41106a222a200441a0066a41106a290300370300200441e0066a41186a222b200441a0066a41186a280200360200200420042903800537038007200420042903a0063703e0062023201f2903003703002024201e290300370300202520162903003703002026201529030037030020272013290300370300202820122903003703002029201429030037030020042004290380073703e801200620202903003703002001202a2903003703002009202b280200360200200420042903e0063703d00502400240200a422088a72214200aa7460d00200a210c0c010b201441016a22122014490d0720144101742213201220122013491b22124104201241044b1bad42e0007e220c422088a7454103742112200ca721130240024020140d0020044100360280050c010b200441083602880520042007360280052004201441e0006c360284050b200441c0066a2013201220044180056a107d20042802c806211220042802c0064101460d0420042802c4062107201241e0006ead210c0b200841206a21122007201441e0006c6a221420042903e801370300201441106a2024290300370300201441086a20232903003703002028290300210d2029290300210e202729030021172026290300212c2025290300212d201441c0006a2003360200201441186a202d370300201441206a202c370300201441286a2017370300201441386a200e370300201441306a200d370300201441c4006a20042903d005370200201441cc006a2006290300370200201441d4006a2001290300370200201441dc006a2009280200360200200c42ffffffff0f83200a4280808080107c4280808080708384210a20222008470d000b0b20044188026a201136020020044184026a2010360200200441fc016a201c360200200441f8016a201d3602002004200f360280022004201b3602f401200420183602f001200420193602ec012004201a3602e801201141286c4104722202417f4c0d042002102c2208450d03200441003602880520042002360284052004200836028005201120044180056a107602402011450d00200f201141286c6a2103200f21020340200420022903003703d00520044180056a200441d0056a410810744120102c2208450d05200442203702d405200420083602d005200441d0056a200241086a22024120107420044180056a20042802d005220820042802d8051074024020042802d405450d002008102e0b200241206a22022003470d000b0b200441d0056a419997c500108a0320042802d005220220042802d80520044180056a10c502024020042802d405450d002002102e0b0240200428028405450d00200428028005102e0b200441d0056a419997c500200441e8016a108c0320042802d005220220042802d805200441f4016a109103024020042802d405450d002002102e0b02402019450d00201a102e0b0240201d41ffffff3f71450d00201b102e0b2010450d02201041286c450d02200f102e0c020b02402019450d00201a102e0b0240201d41ffffff3f71450d00201b102e0b4100210702402010450d00201041286c450d00200f102e0b0c010b2012450d020c010b024020042802f40441ffffff3f71450d0020042802f004102e0b024020070d000240200441c4046a2802002202450d00200241306c450d0020042802c004102e0b200441e8016a4103109c0420004201370300200041286a200441e8016a41206a290300370300200041206a200441e8016a41186a290300370300200041186a200441e8016a41106a290300370300200041106a200441f0016a290300370300200020042903e8013703080c090b024002400240200b4101200b41014b1b2202418094ebdc036e2002418094ebdc03704100476a22084101200841014b1b220820024b0d002002200a422088a7220641036c220320022003491b20086ead428094ebdc037e200220086ead80a7109e042103200641ffffffff03712006470d0420064102742202417f4c0d040240024020020d00410421010c010b2002102c2201450d040b02402002410276220920064f0d00200241017622082006200820064b1b22084104200841044b1b220841ffffffff03712008464102742109200841027421080240024020020d00200441003602e8010c010b200441f0016a4104360200200420023602ec01200420013602e8010b200441d0056a20082009200441e8016a107d200441d8056a2802002102024020042802d0054101460d0020042802d4052101200241027621090c030b2002450d050c040b20060d01410021020c020b41d0d8c800411941bcd7cc001039000b2006210820012102034020022003360200200241046a21022008417f6a22080d000b200621020b2004200720062001200220042802d0041092034108102c2202450d0020044208370284052004200236028005200420053703e80120044180056a200441e8016a4108107420044194056a41002900a1974537020020044100290099974537028c05200441eb056a20044180056a41186a280200360000200441e3056a20044180056a41106a290300370000200441db056a20042903880537000020042004290380053700d305200441f1016a200441d0056a41086a290000370000200441f9016a200441d0056a41106a290000370000200441e8016a41186a200441e7056a29000037000020044188026a41013a0000200441053a00e801200420042900d0053700e901200441e8016a10fe0102402009450d002001102e0b02402006450d00200641e0006c2108200741d4006a210203400240200241706a2802002203450d00200341306c450d002002416c6a280200102e0b0240200228020041ffffff3f71450d002002417c6a280200102e0b200241e0006a2102200841a07f6a22080d000b0b0240200aa72202450d00200241e0006c450d002007102e0b0240200441c4046a2802002202450d00200241306c450d0020042802c004102e0b2000420037030820004200370300200041186a41013a0000200441d0076a24000f0b1036000b1038000b200241246a21022008415c6a22080d000b0b0240200441fc016a2802002208450d00200441e8016a410c6a2802002102200841246c210803400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022008415c6a22080d000b0b200441f8016a2802002202450d00200241246c450d0020042802f401102e0b0240200441ec026a2802002208450d00200441e4026a2802002102200841246c210803400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022008415c6a22080d000b0b200441e8026a2802002202450d00200241246c450d0020042802e402102e0b200441e8016a4101109c0420004201370300200041286a200441e8016a41206a290300370300200041206a200441e8016a41186a290300370300200041186a200441e8016a41106a290300370300200041106a200441f0016a290300370300200020042903e8013703080b2003280204210002402003410c6a2802002202450d002002410c6c21082000210203400240200241046a280200450d002002280200102e0b2002410c6a2102200841746a22080d000b0b200341086a2802002202450d002002410c6c450d002000102e0b200441d0076a24000bfb0201037f230041206b22022400200241003602082002420137030002404120102c2203450d002002422037021420022003360210200241106a200141106a412010742002200228021022032002280218107402402002280214450d002003102e0b200120021091024120102c2203450d002002422037021420022003360210200241106a200141306a412010742002200228021022032002280218107402402002280214450d002003102e0b4120102c2203450d002002422037021420022003360210200241106a200141d0006a412010742002200228021022032002280218107402402002280214450d002003102e0b200128020421032001410c6a2802002201200210760240200141246c2201450d000340200241106a200310ef042002200228021022042002280218107402402002280214450d002004102e0b200341246a21032001415c6a22010d000b0b200020022802002203200228020810b00102402002280204450d002003102e0b200241206a24000f0b1036000bc90a03047f037e057f230041c0026b220224000240024002402000410c6a28020022030d00200241f8016a411f6a200241d0016a411f6a280000360000200241f8016a41186a200241d0016a41186a290300370300200241f8016a41106a200241d0016a41106a290300370300200241f8016a41086a200241d0016a41086a290300370300200220022903d0013703f8010c010b20002003417f6a220336020c200241d0016a411f6a22042000280204200341246c6a220341206a280000360000200241d0016a41186a2205200341196a290000370300200241d0016a41086a200341096a2900002206370300200241d0016a41106a200341116a29000022073703002002200329000122083703d00120032d00002103200241f8016a411f6a22092004280000360000200241f8016a41186a22042005290300370300200241f8016a41106a22052007370300200241f8016a41086a220a2006370300200220083703f80120034106460d00200241a8016a411f6a220b2009280000360000200241a8016a41186a22092004290300370300200241a8016a41106a20052903002206370300200241a8016a41086a200a290300220737030020024180016a41096a200737000020024180016a41116a200637000020024180016a41196a200929030037000020024180016a41206a200b280000360000200220022903f80122063703a8012002200637008101200220033a00800102400240024020034103470d0020024180016a41017228000041c28289aa04470d01200220024180016a41106a2802003602d401200220024180016a41086a2802003602d001200241f8016a200241d0016a10a701410121030240024020022d00f8014101470d00410021030c010b200241f8006a200241b1026a290000370300200241f0006a200241a9026a290000370300200241e8006a200241a1026a290000370300200241e0006a20024199026a290000370300200241d8006a20024191026a290000370300200241c0006a41106a20024189026a290000370300200241c0006a41086a20024181026a290000370300200220022900f9013703400b200241f8016a41386a2204200241c0006a41386a290300370300200241f8016a41306a2205200241c0006a41306a290300370300200241f8016a41286a2209200241c0006a41286a290300370300200241f8016a41206a220a200241c0006a41206a290300370300200241f8016a41186a220b200241c0006a41186a290300370300200241f8016a41106a220c200241c0006a41106a290300370300200241f8016a41086a220d200241c0006a41086a290300370300200220022903403703f8012003450d01200241386a2004290300370300200241306a2005290300370300200241286a2009290300370300200241206a200a290300370300200241186a200b290300370300200241106a200c290300370300200241086a200d290300370300200220022903f80137030002402002418c016a280200450d0020024188016a280200102e0b200241f8016a2000109a042002200241f8016a4120200110fa04450d03200041046a220410e10141012103200041086a2802002200450d04200041246c450d042004280200102e0c040b0240024020030e050400010304030b2002418c016a280200450d0320024188016a280200102e0c030b2002418c016a280200450d0220024188016a280200102e0c020b2002418c016a280200450d0120024188016a280200102e0c010b20024188016a280200450d00200228028401102e0b200041046a220410e10141002103200041086a2802002200450d00200041246c450d002004280200102e0b200241c0026a240020030bd50101047f230041c0006b220224004116210341baddc8002104410221050240024002400240200141ff01710e0400010203000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602242002418883ca003602202002200241206a360218200241086a4190b7c4001044000b4118210341dfdcc8002104410021050c010b4118210341f7dcc8002104410121050b20004183043b0118200041003a001020004200370300200041206a20033602002000411c6a20043602002000411a6a20053a0000200241c0006a24000baa1404077f047e017f057e230041e0036b2203240020012800002104200341106a41186a2001411c6a290000370300200341106a41106a200141146a290000370300200341106a41086a2001410c6a2900003703002003200129000437031020022802002105200341b0036a41186a22064200370300200341b0036a41106a22014200370300200341b0036a41086a22074200370300200342003703b003200341d0006a41a081ca0041071081022007200341d0006a41086a2208290000370300200320032900503703b003200341d0006a41e4d1c100410c1081022006200829000037030020012003290050370300200341086a200341b0036a4120108e0241002109024002402005200328020c410020032802081b470d0020084120360200200320043602502003200341106a360254200341d0026a200341d0006a10c203200341d0006a20032802d002220520032802d80210f4022007200341d9006a2900003703002001200341e1006a2900003703002006200341e9006a290000370300200320032900513703b003024020032d00504101470d00200341306a41186a200341b0036a41186a290300370300200341306a41106a200341b0036a41106a290300370300200341306a41086a200341b0036a41086a290300370300200320032903b003370330410121090b024020032802d402450d002005102e0b2002410c6a2802002106200241086a280200210520022802042107024020090d002000410036024002402006450d002006410c6c21002007210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b2005450d022005410c6c450d022007102e0c020b20022802102104200341d0016a41186a2202200341306a41186a290300220a370300200341d0016a41106a2208200341306a41106a290300220b370300200341d0016a41086a2209200341306a41086a290300220c37030020032003290330220d3703d001200341d0006a41186a200a370300200341d0006a41106a200b370300200341d0006a41086a200c3703002003200d370350200341d0026a200341d0006a10bf01200341f0016a41186a220e2002290300370300200341f0016a41106a22022008290300370300200341f0016a41086a2009290300370300200320032903d0013703f001024020032802f00222080d002000410036024002402006450d002006410c6c21002007210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b2005450d022005410c6c450d022007102e0c020b20034190026a41186a200e29030037030020034190026a41106a200229030037030020034190026a41086a200341f0016a41086a290300370300200320032903f00137039002200341b0026a41186a200341d0026a41186a290300370300200341b0026a41106a200341d0026a41106a290300370300200341b0026a41086a200341d0026a41086a290300370300200320032903d0023703b002200341f8026a290300210a20032802f4022102200341b0036a41186a4200370300200341b0036a41106a4200370300200341b0036a41086a22094200370300200342003703b003200341d0006a41a081ca0041071081022009200341d0006a41086a220e290000370300200320032900503703b003200341d0006a41f09dc500410a108102200141086a200e29000037000020012003290050370000200341d0036a200341b0036a1088030240024020032802d00322090d00410021010c010b20032902d403220b422088a72101200b42ffffff3f83500d002009102e0b0240024020042001460d002000410036024002402002450d00200241306c450d002008102e0b02402006450d002006410c6c21002007210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b2005450d032005410c6c0d010c030b2000200329039002220b370300200041206a20032903b002220c370300200341d0006a41186a20034190026a41186a290300220d370300200341d0006a41106a20034190026a41106a290300220f370300200341d0006a41086a20034190026a41086a2903002210370300200341d0006a41286a200341b0026a41086a2903002211370300200341d0006a41306a200341b0026a41106a2903002212370300200341d0006a41386a200341b0026a41186a2903002213370300200041086a2010370300200041106a200f370300200041186a200d370300200041286a2011370300200041306a2012370300200041386a20133703002003200b3703502003200c370370200041c8006a200a370300200020023602442000200836024002402006450d002006410c6c21002007210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b2005450d022005410c6c450d020b2007102e0c010b200341d0006a2005109908200341d0026a41086a200341d0006a410c6a290200370300200341d0026a41106a200341d0006a41146a290200370300200341d0026a41186a200341d0006a411c6a290200370300200320032902543703d0020240024020032802504101470d00200341b0036a41086a2205200341d0026a41086a290300220a370300200341b0036a41106a2206200341d0026a41106a290300220b370300200341b0036a41186a2207200341d0026a41186a290300220c370300200320032903d002220d3703b003200341f4006a2802002101200341b0026a41186a2208200c370300200341b0026a41106a2209200b370300200341b0026a41086a220e200a3703002003200d3703b002024020012002280210460d00200041003602400c020b20072008290300370300200620092903003703002005200e290300370300200320032903b0023703b0032002410c6a280200210720022802042108200341d0026a10ab0202402007450d0020082007410c6c6a210541002802cca140210641002902c4a140210a20082101034020034190026a41086a20063602002003200a37039002200341d0006a200341d0026a20034190026a2001280200200141086a28020010b0022001410c6a22012005470d000b0b200341d0006a200341d0026a41e00010e9081a200341c8016a200341c8036a290300370300200341c0016a200341c0036a290300370300200341b8016a200341b0036a41086a290300370300200320032903b0033703b0012000200341d0006a2004200341106a109a08200341d0006a10b80202402007450d002007410c6c21002008210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b200241086a2802002201450d022001410c6c450d022008102e0c020b200041003602400b2002280204210502402002410c6a2802002201450d002001410c6c21002005210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b200241086a2802002201450d002001410c6c450d002005102e0b200341e0036a24000b2e01017e2000ad220120017e220142808090bbbad6adf00d200142808090bbbad6adf00d541b428094ebdc0380a70b4d01017f230041206b22002400200041146a4101360200200042013702042000419cc3cb003602002000410436021c20004194c3cb003602182000200041186a360210200041f4afc4001044000bfa0a02047f047e230041b0016b220224002002412036020c20022001360208200241106a2001412010ed0202400240200228021022010d00200041023a00000c010b2002280214210302400240200241186a2802002204450d004100210502400240024020012d00000e020100030b200241003a006020044101460d0220012d00012105200241013a0060200220053a004020044102460d0120012d00022105200241023a0060200220053a004120044103460d0120012d00032105200241033a0060200220053a004220044104460d0120012d00042105200241043a0060200220053a004320044105460d0120012d00052105200241053a0060200220053a004420044106460d0120012d00062105200241063a0060200220053a004520044107460d0120012d00072105200241073a0060200220053a004620044108460d0120012d00082105200241083a0060200220053a004720044109460d0120012d00092105200241093a0060200220053a00482004410a460d0120012d000a21052002410a3a0060200220053a00492004410b460d0120012d000b21052002410b3a0060200220053a004a2004410c460d0120012d000c21052002410c3a0060200220053a004b2004410d460d0120012d000d21052002410d3a0060200220053a004c2004410e460d0120012d000e21052002410e3a0060200220053a004d2004410f460d0120012d000f21052002410f3a0060200220053a004e20044110460d0120012d00102105200241103a0060200220053a004f20044111460d0120012d00112105200241113a0060200220053a005020044112460d0120012d00122105200241123a0060200220053a005120044113460d0120012d00132105200241133a0060200220053a005220044114460d0120012d00142105200241143a0060200220053a005320044115460d0120012d00152105200241153a0060200220053a005420044116460d0120012d00162105200241163a0060200220053a005520044117460d0120012d00172105200241173a0060200220053a005620044118460d0120012d00182105200241183a0060200220053a005720044119460d0120012d00192105200241193a0060200220053a00582004411a460d0120012d001a21052002411a3a0060200220053a00592004411b460d0120012d001b21052002411b3a0060200220053a005a2004411c460d0120012d001c21052002411c3a0060200220053a005b2004411d460d0120012d001d21052002411d3a0060200220053a005c2004411e460d0120012d001e21052002411e3a0060200220053a005d2004411f460d0120012d001f21052002411f3a0060200220053a005e20044120460d01200241206a41106a200241c0006a41106a290300370300200241206a41086a200241c0006a41086a290300370300200220012d00203a005f200241206a41186a200241c0006a41186a290300370300200241203a006020022002290340220637036820022006370320410121050b200241c0006a41186a200241206a41186a2903002206370300200241c0006a41106a200241206a41106a2903002207370300200241c0006a41086a200241206a41086a2903002208370300200220022903202209370340200020053a000020002009370001200041096a2008370000200041116a2007370000200041196a20063700000c020b200241003a00600b20024100360270200242013703682002410a3602242002200241086a3602202002200241e8006a3602ac01200241d4006a410136020020024201370244200241909dc5003602402002200241206a360250200241ac016a419cebc000200241c0006a103d1a2002280268200228027010ef020240200228026c450d002002280268102e0b200041023a00000b2003450d002001102e0b200241b0016a24000bb30201027f230041e0006b220224002002412036020c20022001360208200241106a2001412010ed0202400240200228021022010d00200041003602000c010b200228021421032002200241106a41086a28020036022420022001360220200241c8006a200241206a10b5050240024020022802480d0020024100360230200242013703282002410a36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241909dc5003602482002200241386a360258200241c4006a419cebc000200241c8006a103d1a2002280228200228023010ef020240200228022c450d002002280228102e0b200041003602000c010b20002002290348370200200041086a200241c8006a41086a2802003602000b2003450d002001102e0b200241e0006a24000ba50904047f017e087f047e23004190026b220224002002412036020c20022001360208200241106a2001412010ed0202400240200228021022030d00200041003602000c010b200228021421042002200241186a280200360224200220033602202002200241206a10ab010240024020022802000d000240024020022802042205200228022441286e2201200120054b1bad42287e2206422088a70d002006a72201417f4c0d000240024020010d00410821070c010b2001102c2207450d020b200141286ead2106024002402005450d00410021080340200241003a00c801200841016a210820022802242109417f210a4100210102400240024002400240034020092001460d01200241a8016a20016a2002280220220b2d00003a000020022009200a6a3602242002200b41016a3602202002200141016a220c3a00c801200a417f6a210a200c2101200c4120470d000b200241f0016a41186a2201200241a8016a41186a290300370300200241f0016a41106a220a200241a8016a41106a290300370300200241f0016a41086a220d200241a8016a41086a290300370300200220022903a8013703f001200c41ff01714120490d0120024188016a41086a220e200d29030037030020024188016a41106a220d200a29030037030020024188016a41186a220a2001290300370300200220022903f001370388012009200c6b22014108490d01200241c8006a41086a200e290300220f370300200241c8006a41106a200d2903002210370300200241c8006a41186a200a2903002211370300200241286a41086a220c200f370300200241286a41106a22092010370300200241286a41186a220d2011370300200b290001210f2002200b41096a3602202002200141786a36022420022002290388012210370348200220103703282006422088a722012006a7470d04200141016a220a2001490d082001410174220b200a200a200b491b220a4104200a41044b1bad42287e2206422088a745410374210a2006a7210b20010d02200241003602a8010c030b200141ff0171450d00200241003a00c8010b2006a72201450d08200141286c450d082007102e0c080b200241083602b001200220073602a8012002200141286c3602ac010b200241f0016a200b200a200241a8016a107d20022802f801210a20022802f0014101460d0320022802f4012107200a41286ead21060b2007200141286c6a220a2002290328370300200c290300211020092903002111200d2903002112200a200f370320200a41186a2012370300200a41106a2011370300200a41086a2010370300200642ffffffff0f83200141016aad42208684210620082005470d000b0b2007450d0320002006370204200020073602000c040b200a0d010b1038000b1036000b200241003602f801200242013703f0012002410a3602d4012002200241086a3602d0012002200241f0016a36028801200241bc016a4101360200200242013702ac01200241909dc5003602a8012002200241d0016a3602b80120024188016a419cebc000200241a8016a103d1a20022802f00120022802f80110ef02024020022802f401450d0020022802f001102e0b200041003602000b2004450d002003102e0b20024190026a24000b9d0902057f017e230041b0016b220224002002412036020c20022001360208200241106a2001412010ed0202400240200228021022010d00200041003a00000c010b200241186a280200210320022802142104200241003a0060024002402003450d00200220012d00003a0040200241013a0060024020034101460d00200220012d00013a0041200241023a006020034102460d00200220012d00023a0042200241033a006020034103460d00200220012d00033a0043200241043a006020034104460d00200220012d00043a0044200241053a006020034105460d00200220012d00053a0045200241063a006020034106460d00200220012d00063a0046200241073a006020034107460d00200220012d00073a0047200241083a006020034108460d00200220012d00083a0048200241093a006020034109460d00200220012d00093a00492002410a3a00602003410a460d00200220012d000a3a004a2002410b3a00602003410b460d00200220012d000b3a004b2002410c3a00602003410c460d00200220012d000c3a004c2002410d3a00602003410d460d00200220012d000d3a004d2002410e3a00602003410e460d00200220012d000e3a004e2002410f3a00602003410f460d00200220012d000f3a004f200241103a006020034110460d00200220012d00103a0050200241113a006020034111460d00200220012d00113a0051200241123a006020034112460d00200220012d00123a0052200241133a006020034113460d00200220012d00133a0053200241143a006020034114460d00200220012d00143a0054200241153a006020034115460d00200220012d00153a0055200241163a006020034116460d00200220012d00163a0056200241173a006020034117460d00200220012d00173a0057200241183a006020034118460d00200220012d00183a0058200241193a006020034119460d00200220012d00193a00592002411a3a00602003411a460d00200220012d001a3a005a2002411b3a00602003411b460d00200220012d001b3a005b2002411c3a00602003411c460d00200220012d001c3a005c2002411d3a00602003411d460d00200220012d001d3a005d2002411e3a00602003411e460d00200220012d001e3a005e2002411f3a00602003411f460d00200241206a41106a2203200241c0006a41106a290300370300200241206a41086a2205200241c0006a41086a290300370300200220012d001f3a005f200241206a41186a2206200241c0006a41186a290300370300200241203a006020022002290340220737036820022007370320200041196a2006290300370000200041116a2003290300370000200041096a200529030037000020002002290320370001410121030c020b200241003a00600b20024100360270200242013703682002410a3602242002200241086a3602202002200241e8006a3602ac01200241d4006a410136020020024201370244200241909dc5003602402002200241206a360250200241ac016a419cebc000200241c0006a103d1a2002280268200228027010ef020240200228026c450d002002280268102e0b410021030b200020033a00002004450d002001102e0b200241b0016a24000bf50101037f230041206b220224002000410036020820004201370200024002400240024020012802000e03000102030b200241013a000f20002002410f6a41011074200128020421032001410c6a2802002204200010760240200441286c2204450d00200320046a2104034020002003412010742002200341206a2903003703102000200241106a41081074200341286a22032004470d000b0b2000200141106a412010740c020b200241023a000f20002002410f6a410110742002200128020436021c20002002411c6a410410740c010b200241033a000f20002002410f6a41011074200141086a20001096020b200241206a24000b850301047f230041f0006b22012400200141086a41206a200041206a280200360200200141086a41186a200041186a290200370300200141086a41106a200041106a290200370300200141086a41086a2202200041086a29020037030020012000290200370308200141306a41186a22004200370300200141306a41106a22034200370300200141306a41086a420037030020014200370330200141306a41d9fcc6004106108102200141e0006a41b4f4cb0041061081022000200141e0006a41086a220429000037030020032001290060370300200141d0006a200141086a10ef042004200141d0006a41086a28020036020020012001290350370360200141306a4120200141e0006a10c7020240024002400240024020012d00080e050400010204030b200141146a280200450d03200141106a280200102e0c030b200141146a280200450d02200141106a280200102e0c020b200141146a280200450d01200141106a280200102e0c010b2002280200450d00200128020c102e0b200141f0006a24000ba50101047f230041106b2202240002404121410120012d000041014622031b2204102c2205450d002002410036020820022004360204200220053602000240024020030d00200241003a000f20022002410f6a410110740c010b200241013a000f20022002410f6a410110742002200141016a412010740b2000412020022802002201200228020810b20102402002280204450d002001102e0b200241106a24000f0b1036000b850201037f230041d0006b22022400200241086a41dffcc6004109108102200241186a41d3b1c4004106108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000be22505027f017e027f017e037f230041b0046b22022400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e1c0102030405060708090a0b0c0d0e0f101112131415161718191a1b00010b200241086a200141386a10ca0120024180026a41286a200141306a29030037030020024180026a41206a200141286a29030037030020024180026a41186a200141206a29030037030020024180026a41106a200141186a29030037030020024180026a41086a200141106a2903003703002002200141086a29030037038002200141f8016a280200210320024180026a41306a200241086a41c00110e9081a20014180026a2903002104200241086a20024180026a41f00110e9081a200041086a200241086a41f00110e9081a20004180026a2004370300200041f8016a20033602002000411b3602000c1b0b20024180026a200141086a10cb0120004100360200200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c1a0b20024180026a200141046a10cc0120004101360200200041246a200241a0026a2802003602002000411c6a20024198026a290300370200200041146a20024190026a2903003702002000410c6a20024188026a29030037020020002002290380023702040c190b20024180026a200141086a10cd01200041086a20024180026a41a00210e9081a200041023602000c180b20004103360200200041086a200141086a2903003703000c170b41042103200141046a210502400240024002400240024002400240024020012d0004417f6a0e050102030405000b41e2a0cc00412841e89bc4001039000b200141086a2802002105410121030c040b41022103200241086a41026a200541036a2d00003a000020024180026a41086a200141146a29020037030020024190026a2001411c6a29020037030020024198026a200141246a2d00003a0000200220052f00013b010820022001410c6a29020037038002200141086a2802002105200141286a28020021010c040b200141086a2802002105410321030c020b2002410a6a200541036a2d00003a000020024180026a41086a200141146a29020037030020024190026a2001411c6a29020037030020024198026a200141246a2d00003a0000200220052f00013b010820022001410c6a2902003703800220012d00254100472106200141086a2802002105200141286a28020021010c030b200141086a2802002105410521030b0b0b200020033a0004200020022f01083b0005200020063a0025200020022f01fc013b0126200041086a20053602002000410c6a200229038002370200200041286a2001360200200041076a2002410a6a2d00003a0000200041146a20024180026a41086a2903003702002000411c6a20024190026a290300370200200041246a20024198026a2d00003a0000200041043602000c160b20024180026a200141086a10ce01200041086a20024180026a41e00010e9081a200041053602000c150b20024180026a200141046a10cf01200041063602002000410c6a20024188026a28020036020020002002290380023702040c140b20024180026a200141086a10d001200041086a20024180026a41d80010e9081a200041073602000c130b10d101000b02400240200128020422050d00410021030c010b20024180026a41186a200141286a29000037030020024180026a41106a200141206a29000037030020024188026a200141186a29000037030020024180026a41286a200141386a29000037030020024180026a41306a200141c0006a29000037030020024180026a41386a200141c8006a29000037030020024180026a41c8006a200141d8006a29000037030020024180026a41d0006a200141e0006a29000037030020024180026a41d8006a200141e8006a2900003703002002200141106a290000370380022002200141306a2900003703a0022002200141d0006a2900003703c00220024180026a41f8006a20014188016a29000037030020024180026a41f0006a20014180016a29000037030020024180026a41e8006a200141f8006a29000037030020024180026a4198016a200141a8016a29000037030020024180026a4190016a200141a0016a29000037030020024180026a4188016a20014198016a29000037030020024180026a41b8016a200141c8016a29000037030020024180026a41b0016a200141c0016a29000037030020024180026a41a8016a200141b8016a2900003703002002200141f0006a2900003703e002200220014190016a290000370380032002200141b0016a2900003703a0032001410c6a2802002201417f4c0d130240024020010d00410121030c010b2001102c2203450d150b20032005200110e9081a200241086a20024180026a41c00110e9081a0b200020033602042000410c6a2001360200200041086a2001360200200041106a200241086a41c00110e9081a200041093602000c110b20024180026a200141086a10d201200041086a20024180026a41980210e9081a2000410a3602000c100b20024180026a200141046a10d301200041046a20024180026a41e80010e9081a2000410b3602000c0f0b10d401000b20024180026a200141086a10d5012000410d360200200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c0d0b20024180026a200141086a10d6012000410e360200200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c0c0b20024180026a200141086a10d6012000410f360200200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c0b0b20024180026a200141086a10d70120004110360200200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c0a0b200141046a2103410721050240024002400240024002400240024020012d0004417f6a0e0701020304050607000b41e2a0cc00412841a4c3cb001039000b20024198026a200341196a29000037030020024190026a200341116a29000037030020024188026a200341096a2900003703002002200329000137038002410121050c050b20024198026a200341196a29000037030020024190026a200341116a29000037030020024188026a200341096a2900003703002002200329000137038002410221050c040b20024180026a41186a200341196a29000037030020024180026a41106a200341116a29000037030020024180026a41086a200341096a290000370300200241086a41086a200341296a290000370300200241086a41106a200341316a290000370300200241086a41186a200341396a29000037030020022003290001370380022002200341216a290000370308410321050c030b200241086a200141086a10c8012002418b026a200241086a41086a2802003600002002200229030837008302410421050c020b20024198026a200341196a29000037030020024190026a200341116a29000037030020024188026a200341096a2900003703002002200329000137038002410521050c010b20024198026a200341196a29000037030020024190026a200341116a29000037030020024188026a200341096a2900003703002002200329000137038002410621050b200020053a0004200020022903800237000520002002290308370025200020022f00fc013b00452000410d6a20024180026a41086a290300370000200041156a20024180026a41106a2903003700002000411d6a20024180026a41186a2903003700002000412d6a200241086a41086a290300370000200041356a200241086a41106a2903003700002000413d6a200241086a41186a290300370000200041c7006a200241fe016a2d00003a0000200041113602000c090b024002400240024002400240200141086a280200417f6a0e03010203000b41e2a0cc0041284184ccc2001039000b200141386a2903002104200141306a29030021074101210841012109024002400240024002402001410c6a2d00000e050104020300010b4104210920024180026a41046a200141206a2d00003a000020022001411c6a2800003602800220012f000d2001410f6a2d0000411074722106200141186a280200210a200141146a2802002103200141106a28020021050c030b20024188026a200141246a29000037030020024180026a41106a2001412c6a2d00003a000020022001411c6a2900003703800220012f000d2001410f6a2d0000411074722106200141186a280200210a200141146a2802002103200141106a2802002105410021090c020b200141186a2802002203417f4c0d0f200141106a28020021010240024020030d00410121050c010b2003102c2205450d110b20052001200310e9081a410221092003210a0c010b20024188026a200141246a29000037030020024180026a41106a2001412c6a2d00003a000020022001411c6a2900003703800220012f000d2001410f6a2d0000411074722106200141186a280200210a200141146a2802002103200141106a2802002105410321090b200241086a41106a20024180026a41106a2d00003a0000200241086a41086a20024180026a41086a290300370300200241046a41026a200241fc016a41026a2d00003a00002002200229038002370308200220022f00fc013b01040c030b2001410c6a28020022094108762106410221080c010b2001410c6a28020022094108762106410321080b0b200020022f01043b002d20004112360200200041386a2004370300200041306a2007370300200041186a200a360200200041146a2003360200200041106a2005360200200041086a20083602002000411c6a20022903083702002000410c6a2006410874200941ff017172360200200041246a200241086a41086a2903003702002000412c6a200241086a41106a2d00003a00002000412f6a200241066a2d00003a00000c080b20024180026a200141086a10d801200041086a20024180026a41f00010e9081a200041133602000c070b20024180026a200141086a10d901200041086a20024180026a41f80010e9081a200041143602000c060b024002400240024020012f0104417f6a0e03010200010b20024180026a200141086a10c90120022902840221042002280280022103410321010c020b20024180026a200141086a10c90120022902840221042002280280022103410121010c010b20012f0106210541b002102c2203450d0820024180026a200141086a28020010da01200320024180026a41b00210e9081a410221010b200020013b0104200041153602002000410c6a2004370200200041086a2003360200200041066a20053b01000c050b20024180026a200141086a10db01200041086a20024180026a41a80210e9081a200041163602000c040b20024180026a200141046a10dc01200041046a20024180026a41c80010e9081a200041173602000c030b20024180026a200141086a10dd01200041086a20024180026a41c80010e9081a200041183602000c020b20024180026a200141086a10de0120004119360200200041c0006a20024180026a41386a290300370300200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c010b20024180026a200141086a10df012000411a360200200041c0006a20024180026a41386a290300370300200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000b200241b0046a24000f0b1038000b1036000bbc0101037f230041306b22022400200241dffcc6004109108102200241106a41e5b0c4004106108102200241206a2001280200200128020810a201024002402002280228220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b20004100360208200020013602042000200436020020002002411010742000200241106a411010742000200228022022012003107402402002280224450d002001102e0b200241306a24000f0b1038000b1036000bfa0101037f230041306b220224002002200010a704200228020821032002280200210002404101102c2204450d0020024201370214200220043602100240024020012802bc024102470d00200241003a0020200241106a200241206a410110740c010b200241013a0020200241106a200241206a410110742001200241106a10ab040b200241206a41086a200241106a41086a2802003602002002200229031037032020002003200241206a10c70202402002280204450d002000102e0b024020012802bc024102460d00024020012802b0022200450d00200141b4026a280200450d002000102e0b2001108b020b200241306a24000f0b1036000bb20501037f230041106b220224000240024020002802b00222030d00200241003a000c20012002410c6a410110742002410c6a21030c010b200241013a000c20012002410c6a41011074200041b8026a28020022042001107620012003200410742002410c6a21030b200220002d00f0023a000c2001200341011074200020011090020240024020002802bc024101460d00200241003a000c20012003410110740c010b200241013a000c20012003410110742002200041c0026a28020036020c20012002410c6a410410742002200041c4026a28020036020c20012002410c6a410410740b0240024002400240024020002d00c8020e0400010203000b200241003a000c2001200341011074024002400240200041c9026a2d00000e03000102060b200241003a000c20012003410110740c050b200241013a000c20012003410110742001200041ca026a412010740c040b200241023a000c20012003410110740c030b2002410f3a000c2001200341011074024002400240200041cc026a2d00000e03000102050b200241003a000c20012003410110742002200041d0026a28020036020c20012002410c6a410410742002200041d4026a28020036020c20012002410c6a410410740c040b200241013a000c20012003410110742001200041cd026a412010740c030b200241023a000c20012003410110740c020b200241103a000c2001200341011074024002400240200041cc026a2d00000e03000102040b200241003a000c20012003410110742002200041d0026a28020036020c20012002410c6a410410742002200041d4026a28020036020c20012002410c6a410410740c030b200241013a000c20012003410110742001200041cd026a412010740c020b200241023a000c20012003410110740c010b200241033a000c2001200341011074200110b6040b200241106a24000b130020004103360204200041a0b7c4003602000b3400200041a8f8c60036020420004100360200200041146a4110360200200041106a41a8bec400360200200041086a42043702000b130020004102360204200041f4e0c4003602000b4301027f230041106b2202240002404108102c22030d001036000b2000420837020420002003360200200242f02e3703082000200241086a41081074200241106a24000b4301027f230041106b2202240002404108102c22030d001036000b2000420837020420002003360200200242e0123703082000200241086a41081074200241106a24000ba10402067f027e230041206b2102024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a36020020050e020102030b200041023a00000f0b2006450d0420042d0001210520012003417e6a22073602042001200441026a360200410021060240024002400240024002400240200541ff00710e07060001020304050b0b410121060c050b410221060c040b410321060c030b410421060c020b410521060c010b410621060b024020074110490d00200041003a0000200041086a2004290002370300200041026a20063a0000200020054107763a0001200041036a200228001b360000200041186a2002290308370300200041106a2004410a6a29000037030020012003416e6a3602042001200441126a360200200041076a2002411f6a2d00003a0000200041206a200241086a41086a2903003703000f0b200041023a00000f0b20064110490d01200441096a29000021082004290001210920012003416f6a22053602042001200441116a36020020054110490d02200041013a000020002002280008360001200041186a2004290011370300200041106a2008370300200041086a2009370300200041206a200441196a29000037030020012003415f6a3602042001200441216a360200200041046a2002410b6a2800003600000f0b200041023a00000f0b200041023a00000f0b200041023a00000f0b200041023a00000ba20202037f017e230041106b220224000240024020002d00004101460d00200241003a0000200120024101107420002d00012103410621040240024002400240024002400240200041026a2d00000e0700010203040506000b410021040c050b410121040c040b410221040c030b410321040c020b410421040c010b410521040b20022004200341ff0171410047410774723a00002001200241011074200029030821052002200041106a2903003703082002200537030020012002411010740c010b200241013a00002001200241011074200029030821052002200041106a290300370308200220053703002001200241101074200041186a29030021052002200041206a2903003703082002200537030020012002411010740b200241106a24000b130020004106360204200041b8e7c4003602000b3400200041dffcc60036020420004100360200200041146a4103360200200041106a41f0f7c400360200200041086a42093702000b3401017f230041106b220224002000410036020820004201370200200241003a000f20002002410f6a41011074200241106a24000b4601027f230041106b220124002001410036020820014201370300200110b6042000200128020022022001280208107402402001280204450d002002102e0b200141106a24000bef43050e7f037e1c7f047e0a7f230041f0026b220524000240024002400240024002400240024002400240024002400240024002400240024020020d0041002106410021070c010b200120024105746a2108200541b0026a41186a2109200541386a41186a210a200541b0026a41086a210b410021064100210703402009200141186a290000370300200541b0026a41106a220c200141106a290000370300200b200141086a290000370300200520012900003703b002024020070d0041c805102c2207450d0e4100210d200741003b01e602200741003602e0020b200141206a21012007210e200d210f024002400340200e41e8026a2110200e2f01e6022111410021020240034020112002460d01200541b0026a2010412010ec082212450d03200241016a2102201041206a21102012417f4a0d000b2002417f6a21110b0240200f450d00200f417f6a210f200e20114102746a41c8056a280200210e0c010b0b200541206a41086a200b41086a2902002213370300200541206a41106a200b41106a29020022143703002005200b290200221537032020052802b402210f20052802b0022116200541c0016a41106a22172014370300200541c0016a41086a22182013370300200520153703c00102400240200e2f01e6022202410a4b0d0020054198026a41106a2219201729030037030020054198026a41086a221a2018290300370300200520052903c00137039802200e41e8026a2110200241016a21120240201141016a221b20024b221c0d002010201b4105746a201020114105746a20122011417f736a41057410ea081a0b20102011410574220c6a2202200f360004200220163600002002200529039802370008200241106a201a290300370000200241186a20192903003700000240201c0d00200e201b4105746a200e200c6a20122011417f736a41057410ea081a0b200e200c6a22024200370308200242003703002002410036021820024208370310200e20123b01e6020c010b4100211a4104210202400240201141054f0d00201121120c010b4105210241052112024002402011417b6a0e020201000b201141796a21124101211a410621020c010b410021124101211a0b41c805102c2219450d10201941003b01e602201941003602e0022019200e2f01e602221b2002417f736a22113b01e602200e41e8026a221c2002410574221d6a2210280004211e2010280000211f20054198026a41106a2220201041186a29000037030020054198026a41086a2221201041106a2900003703002005201029000837039802200a200e201d6a221041186a290300370300200541386a41106a2222201041106a290300370300200541386a41086a2223201041086a290300370300200520102903003703382011410c4f0d0e201b200241016a22106b2011470d0d201941e8026a201c201041057422106a2011410574221110e9081a2019200e20106a201110e908211d20092005290338370300200941086a22242023290300370300200941106a22252022290300370300200941186a2226200a290300370300200e20023b01e602200c20202903002213370300200541e0016a41086a22272021290300370300200541e0016a41106a22282013370300200541e0016a41186a22292009290300370300200541e0016a41206a222a200541b0026a41206a222b290300370300200541e0016a41286a222c200541b0026a41286a222d290300370300200541e0016a41306a222e200541b0026a41306a222f29030037030020052005290398023703e001201d200e201a1b22022f01e60221102020201729030037030020212018290300370300200520052903c00137039802200241e8026a2111201041016a211a0240201241016a221c20104b22300d002011201c4105746a201120124105746a201a2012417f736a41057410ea081a0b20112012410574221b6a2210200f360004201020163600002010200529039802370008201041106a2021290300370000201041186a2020290300370000024020300d002002201c4105746a2002201b6a201a2012417f736a41057410ea081a0b2002201b6a22104200370308201042003703004100213120104100360218201042083703102002201a3b01e602200541f0006a41086a221a20272903002213370300200541f0006a41106a221b20282903002214370300200541f0006a41186a221c20292903002215370300200541f0006a41206a202a2903002232370300200541f0006a41286a202c2903002233370300200541f0006a41306a202e2903002234370300200520052903e0012235370370200541386a41306a22362034370300200541386a41286a22372033370300200541386a41206a22382032370300200a201537030020222014370300202320133703002005203537033802400240200e2802e0022216450d0041002131201d2139201e213a201f213b0340200e2f01e402210e200541a8016a41106a22302022290300370300200541a8016a41086a223c2023290300370300200520052903383703a801200541c0016a41186a221d200a41186a2903003703002017200a41106a2903003703002018200a41086a2903003703002005200a2903003703c0014101450d0f20162f01e602223d410b490d024100210f410421020240200e4105490d00200e210202400240200e417b6a0e020201000b200e41796a210e4101210f410621020c010b4100210e4101210f410521020b41f805102c2219450d13201941003b01e602201941003602e002201920162f01e602223e2002417f736a22123b01e602201641e8026a223f200241057422116a2210280004211e2010280000211f2020201041186a2900003703002021201041106a2900003703002005201029000837039802201c201620116a221041186a290300370300201b201041106a290300370300201a201041086a290300370300200520102903003703702012410c4f0d0e203e200241016a22116b2012470d0d201941e8026a203f201141057422106a2012410574221210e9081a2019201620106a201210e9082110201620023b01e602200b2021290300370300200c2020290300370300200920052903703703002024201a2903003703002025201b2903003703002026201c29030037030020052005290398023703b00220102f01e602221241016a213e2012410c4f0d0c203d20026b2202203e470d0b203141016a2131201041c8056a201620114102746a41c8056a200241027410e9081a4100210202400340201020024102746a41c8056a280200221120023b01e402201120103602e0022002200220124922116a220220124b0d0120110d000b0b202e202f290300370300202c202d290300370300202a202b290300370300202920092903003703002028200c2903003703002027200b290300370300200520052903b0023703e001201c201d290300370300201b2017290300370300201a2018290300370300200520052903c00137037020102016200f1b22112f01e602211d200c2030290300370300200b203c290300370300200520052903a8013703b002201141e8026a2112201d41016a210f0240200e41016a2202201d4b223c0d00201220024105746a2012200e4105746a200e417f73200f6a41057410ea081a0b2012200e41057422306a2212203a3600042012203b360000201241186a200c290300370000201241106a200b290300370000201220052903b0023700082009201c290300370300200c201b290300370300200b201a290300370300200520052903703703b0020240203c0d00201120024105746a201120306a200e417f73200f6a41057410ea081a0b201120306a221220052903b002370300201241186a2009290300370300201241106a200c290300370300201241086a200b290300370300201141c8056a21120240200e41026a2230201d41026a221d4f0d00201220304102746a201220024102746a2002417f73201d6a41027410ea081a0b201220024102746a20393602002011200f3b01e60202402002201d4f0d002011200e4102746a41cc056a2102034020022802002212200e41016a220e3b01e402201220113602e002200241046a2102200f200e470d000b0b2023202729030037030020222028290300370300200a20292903003703002038202a2903003703002037202c2903003703002036202e290300370300200520052903e0013703382016210e20162802e0022202211620102139201e213a201f213b20020d000b0b202e20362903002213370300202c20372903002214370300202a203829030022153703002029200a29030022323703002028202229030022333703002027202329030022343703002005200529033822353703e001202f2013370300202d2014370300202b201537030020092032370300200c2033370300200b2034370300200520353703b0022007450d0841f805102c2202450d11200220073602c805200241003b01e602200241003602e002200741003b01e402200720023602e0022022200c2903003703002023200b290300370300200520052903b002370338201c2026290300370300201b2025290300370300201a202429030037030020052009290300370370200d2031470d0720022f01e6022210410b4f0d06200d41016a210d2002201041016a22123b01e602200220104105746a22102005290370370300201041ec026a201e360000201041e8026a201f360000201041f0026a2005290338370000201041f8026a202329030037000020104180036a2022290300370000201041086a201a290300370300201041106a201b290300370300201041186a201c290300370300200220124102746a41c8056a2019360200201920123b01e402201920023602e002200221070c010b201c201d290300370300201b2017290300370300201a2018290300370300200520052903c00137037020162f01e6022112200c2030290300370300200b203c290300370300200520052903a8013703b002200e41016a2102201641e8026a2110201241016a21110240200e20124f220f0d00201020024105746a2010200e4105746a200e417f7320116a41057410ea081a0b2010200e41057422196a2210203a3600042010203b360000201041186a200c290300370000201041106a200b290300370000201020052903b0023700082009201c290300370300200c201b290300370300200b201a290300370300200520052903703703b0020240200f0d00201620024105746a201620196a200e417f7320116a41057410ea081a0b201620196a221020052903b002370300201041186a2009290300370300201041106a200c290300370300201041086a200b290300370300201641c8056a2110201241026a21120240200f0d00200e41027420106a41086a201020024102746a2002417f7320126a41027410ea081a0b201020024102746a2039360200201620113b01e602200220124f0d0020162002417f6a22024102746a41cc056a2110034020102802002212200241016a22023b01e402201220163602e002201041046a211020112002470d000b0b2005410036028001200641016a21060c010b200541003602c802200542083703c002200542003703b802200542003703b002200e20024105746a220229031021132002420837031020022903082114200242003703082002290300211520024200370300200241186a22022903002132200220052903c802370300200541f0006a41186a2032370300200520133703800120052014370378200520153703702013a72202450d002005280284012210450d00201041306c450d002002102e0b20012008470d000b0b02402004450d0020032004412c6c6a211903400240200328020841306c2202450d002003280200220e20026a21092003410c6a2116024003402007450d01200e41306a210b20072101200d210f02400340200141e8026a211020012f01e60221114100210202400240034020112002460d01200e2010412010ec082212450d02200241016a2102201041206a21102012417f4a0d000b2002417f6a21110b200f450d02200f417f6a210f200120114102746a41c8056a28020021010c010b0b200120024105746a2202427f20022903002213200e2903207c221420142013542210200241086a22122903002213200e41286a22112903007c2010ad7c221420135420142013511b22101b3703002012427f201420101b37030020162900002113200541b0026a41086a2201201641086a290000370300200541b0026a41106a220f201641106a290000370300200541b0026a41186a220c201641186a290000370300200520133703b00220112903002113200e2903202114200241186a2110200241106a2111024020022802182212200241146a280200470d0020112012410110b804201028020021120b2011280200201241306c6a220220052903b00237030020022014370320200241186a200c290300370300200241106a200f290300370300200241086a2001290300370300200241286a20133703002010201028020041016a360200200b210e200b2009460d030c010b0b0240200d450d00034020072802c8052107200d417f6a220d0d000b0b02402006450d0041002110200541c0026a2101200541b8026a210f03402006417f6a210641012102024002400340201020072f01e602490d01024020072802e00222120d002007102e410021070c030b20072f01e40221102007102e2002417f6a2102201221070c000b0b2001200720104105746a22124180036a290000370300200f201241f8026a2900003703002005201241f0026a2900003703b002201041016a2110201228021421112012280210210e20024101460d00200720104102746a41c8056a280200210702402002450d000340200241016a221020024f211220072802c80521072010210220120d000b0b410021100b200e450d0202402011450d00201141306c450d00200e102e0b20060d000b0b034020072802e00221022007102e2002210720020d000b0b20004104360204410121020c110b2003412c6a22032019470d000b0b024020070d0041002102410021060c0b0b200721020340200d450d0b200d417f6a210d200720072f01e6024102746a41c8056a280200210720022802c80521020c000b0b41a89ac700412041c89ac7001039000b41e899c700413041989ac7001039000b41e8aac700412b4194abc7001039000b41f49bc7004128419c9cc7001039000b203e410c41f49cc700104d000b41f49bc7004128419c9cc7001039000b2012410b41e49bc700104d000b41ac9cc700413541e49cc7001039000b41f49bc7004128419c9cc7001039000b2011410b41e49bc700104d000b0240024002400240024002402006450d002002450d032006417f6a210741002110024002400340201020022f01e602490d01024020022802e00222120d002002102e410021020c030b20022f01e40221102002102e200d41016a210d201221020c000b0b200541f0006a41186a2201200220104105746a22114180036a290000370300200541f0006a41106a220f201141f8026a290000370300200541f0006a41086a2216201141f0026a2900003703002005201141e8026a2900003703702011280210210e200541c0016a41086a220b2011411c6a280200360200200520112902143703c001201041016a2112201141086a2903002114201129030021130240200d450d00200220124102746a41c8056a28020021020240200d4101460d0041012110034020022802c8052102200d201041016a2210470d000b0b410021120b200541bc026a2016290300370200200541c4026a200f290300370200200541b0026a411c6a200129030037020020054198026a41086a200b280200360200200520052903703702b402200541e0016a41086a200541b0026a41086a290200370300200541e0016a41106a200541b0026a41106a290200370300200541e0016a41186a200541b0026a41186a290200370300200541e0016a41206a200541b0026a41206a280200360200200520052903c00137039802200520052902b0023703e0010b200541b0026a41106a200541e0016a41106a290300370300200541b0026a41086a200541e0016a41086a290300370300200541b0026a41186a200541e0016a41186a290300370300200541b0026a41206a200541e0016a41206a280200360200200541a8016a41086a20054198026a41086a280200360200200541386a41086a200541bc026a290200370300200541386a41106a200541c4026a290200370300200541386a41186a200541cc026a290200370300200520052903e0013703b00220052005290398023703a801200520052902b402370338200e450d01417f200741016a221020102007491b221041ffffff1f712010470d0420104106742210417f4c0d042010102c220f450d06200f2013370320200f2005290338370300200f200e360230200f20052903a801370234200f41286a2014370300200f41186a200541386a41186a290300370300200f41106a200541386a41106a290300370300200f41086a200541386a41086a290300370300200f413c6a200541a8016a41086a2802003602002010410676210d024020070d004101210e0c080b2007417f6a210741012111024002400340201220022f01e602490d01024020022802e00222100d002002102e410021020c030b20022f01e40221122002102e2011417f6a2111201021020c000b0b200541f0006a41186a2201200220124105746a220e4180036a290000370300200541f0006a41106a2216200e41f8026a290000370300200541f0006a41086a220c200e41f0026a2900003703002005200e41e8026a290000370370200e280210210b200541386a41086a2209200e411c6a2802003602002005200e290214370338201241016a2110200e41086a2903002134200e2903002133024020114101460d00200220104102746a41c8056a280200210202402011450d000340201141016a221020114f211220022802c80521022010211120120d000b0b410021100b200541bc026a200c290300370200200541c4026a2016290300370200200541b0026a411c6a200129030037020020054198026a41086a2009280200360200200520052903703702b402200541e0016a41086a200541b0026a41086a290200370300200541e0016a41106a200541b0026a41106a290200370300200541e0016a41186a200541b0026a41186a290200370300200541e0016a41206a200541b0026a41206a2802003602002005200529033837039802200520052902b0023703e0010b200541b0026a41106a220c200541e0016a41106a2208290300370300200541b0026a41086a2209200541e0016a41086a2206290300370300200541b0026a41186a2219200541e0016a41186a2222290300370300200541b0026a41206a2220200541e0016a41206a2223280200360200200541206a41086a220a20054198026a41086a2230280200360200200541c0016a41086a221a200541bc026a290200370300200541c0016a41106a221b200541c4026a290200370300200541c0016a41186a221c200541b0026a411c6a290200370300200520052903e0013703b0022005200529039802370320200520052902b4023703c00102400240200b0d004101210e0c010b200541f0006a41046a2101200541b0026a41046a211d4101210e03402009201a290300370300200c201b2903003703002019201c290300370300200541386a41086a2216200a280200360200200520052903c0013703b00220052005290320370338024002400240200d200e470d00200d200e6b417f200741016a221220122007491b22124f0d00200e20126a2212200e490d09200d41017422112012201120124b1b22124104201241044b1b221241ffffff1f7120124641037421112012410674211202400240200d0d00200541003602e0010c010b200541083602e8012005200f3602e0012005200d4106743602e4010b200541f0006a20122011200541e0016a107d2005280278211220052802704101460d012005280274210f2012410676210d0b200c2903002113201929030021142009290300211520052903b0022132200f200e4106746a2212200b36023020122032370300201241086a201537030020122033370320201241286a2034370300201241186a2014370300201241106a2013370300201220052903383702342012413c6a2016280200360200200e41016a210e2007450d0b2007417f6a2107410121120c010b2012450d070c090b024002400340201020022f01e602490d01024020022802e0022211450d0020022f01e40221102002102e2012417f6a2112201121020c010b0b2002102e410021020c010b200541386a41186a2217200220104105746a22114180036a290000370300200541386a41106a2218201141f8026a2900003703002016201141f0026a2900003703002005201141e8026a2900003703382011280210210b20302011411c6a2802003602002005201129021437039802201041016a2110201141086a290300213420112903002133024020124101460d00200220104102746a41c8056a280200210202402012450d000340201241016a221020124f211120022802c80521022010211220110d000b0b410021100b201d2005290338370000201d41086a2016290300370000201d41106a2018290300370000201d41186a2017290300370000200541a8016a41086a2030280200360200200620092902003703002008200c290200370300202220192902003703002023202028020036020020052005290398023703a801200520052902b0023703e0010b200541f0006a41206a2023280200360200200541f0006a41186a2022290300370300200541f0006a41106a2008290300370300200541f0006a41086a2006290300370300200a200541a8016a41086a280200360200200520052903e001370370200520052903a801370320201a200141086a290200370300201b200141106a290200370300201c200141186a290200370300200520012902003703c001200b0d000b0b2007450d0703402007417f6a210741012112024002400340201020022f01e602490d01024020022802e00222110d002002102e410021020c030b20022f01e40221102002102e2012417f6a2112201121020c000b0b201041016a2111200220104105746a2210280214210120102802102116024020124101470d00201121100c010b200220114102746a41c8056a280200210202402012450d0041002110034020022802c805210220122010417f6a2210470d000b0b410021100b2016450d0902402001450d00200141306c450d002016102e0b2007450d080c000b0b20020d010c040b2007450d00200541c0026a210f200541b8026a210d03402007417f6a210741012110024002400340201220022f01e602490d01024020022802e0022211450d0020022f01e40221122002102e2010417f6a2110201121020c010b0b2002102e410021020c010b200f200220124105746a22114180036a290000370300200d201141f8026a2900003703002005201141f0026a2900003703b002201241016a21122011280214210e2011280210210120104101460d00200220124102746a41c8056a280200210202402010450d000340201041016a221220104f211120022802c80521022012211020110d000b0b410021120b2001450d040240200e450d00200e41306c450d002001102e0b20070d000b0b034020022802e00221102002102e2010210220100d000c030b0b41e8aac700412b41f8b7c0001039000b1038000b4108210f4100210e4100210d0c020b1036000b034020022802e00221102002102e2010210220100d000b0b2000200f3602042000410c6a200e360200200041086a200d360200410021020b20002002360200200541f0026a24000be30102027f017e230041206b22032400024002400240200041046a280200220420016b20024f0d00200120026a22022001490d02200441017422012002200120024b1b22014104200141044b1bad42307e2205422088a74541037421012005a721020240024020040d00200341003602100c010b200341106a41086a41083602002003200441306c360214200320002802003602100b200320022001200341106a107d200341086a280200210120032802004101460d0120002003280204360200200041046a200141306e3602000b200341206a24000f0b2001450d001036000b1038000be71e080a7f017e017f017e017f027e0e7f017e230041d0046b220324002003420037020c02400240024002400240024002402001280208220441ffffffff03712004470d0020044102742205417f4c0d0020012802042106200128020021070240024020050d00410421010c010b2005102c2201450d070b41002108200341003602202003200136021820032005410276220936021c024002400240200920044f0d00200541017622092004200920044b1b22094104200941044b1b220941ffffffff0371200946410274210a200941027421090240024020050d00200341003602e8030c010b200341f0036a4104360200200320053602ec03200320013602e8030b20034180036a2009200a200341e8036a107d20034188036a280200210502402003280280034101460d00200320032802840322013602182003200541027636021c200328022021080c020b2005450d030c090b2004450d010b2004410574210b200120084102746a210a200341e8036a41046a210c20034180036a41c4006a210141002109200721050340200341c8016a41186a200541186a2204290000220d370300200341c8016a41106a200541106a220e290000220f370300200341c8016a41086a200541086a221029000022113703002003200529000022123703c801200341a8026a41186a22132004290000370300200341a8026a41106a2204200e290000370300200341a8026a41086a220e2010290000370300200320052900003703a802200341e8036a41186a200d370300200341e8036a41106a200f370300200341e8036a41086a2011370300200320123703e803200341086a200341e8036a200910a402200141186a2013290300370200200141106a2004290300370200200141086a200e290300370200200120032903a80237020020034180036a410041c40010eb081a200c20034180036a41e40010e9081a41f800102c2204450d08200541206a21052004410036020820044281808080103703002004410c6a200341e8036a41e80010e9081a200441003a0074200420032f00f8013b0075200441f7006a200341f8016a41026a2d00003a0000200a2004360200200941016a2109200a41046a210a200b41606a220b0d000b200820096a21080b200320083602200240200641ffffff3f71450d002007102e0b2002280208210420022802042107200228020021022003413c6a200341186a360200200320023602302003200736022c2003200236022820032002200441386c220a6a22143602342003200341086a360238200221012004450d04200341e8036a41346a2106200341286a41106a210820034180036a412c6a2109200221010340200341d8026a41086a220b2001220441086a290300370300200341d8026a41106a220e200441106a290300370300200341d8026a41186a2210200441186a290300370300200341d8026a41206a2213200441206a290300370300200320042903003703d8022003200441386a2201360230200441286a2802002105200341c0006a41086a220c200441346a28020036020020032004412c6a2902003703402005450d0420034180036a41206a201329030037030020034180036a41186a201029030037030020034180036a41106a200e29030037030020034180036a41086a200b29030037030020092003290340370200200941086a200c280200360200200320032903d80237038003200320053602a803200341e8036a200820034180036a10ba04024020032802980422050d00200a41486a220a0d010c050b0b200341a8026a41286a2204200341e8036a41286a290300370300200341a8026a41206a2201200341e8036a41206a290300370300200341a8026a41186a2209200341e8036a41186a290300370300200341a8026a41106a220a200341e8036a41106a290300370300200341a8026a41086a220b200341e8036a41086a290300370300200341d0006a41086a220e200641086a290200370300200341d0006a41106a2210200641106a290200370300200341d0006a41186a2213200641186a290200370300200341d0006a41206a220c200641206a290200370300200341d0006a41286a2208200641286a280200360200200320032903e8033703a80220032006290200370350200341f8016a41086a2202200e290300370300200341f8016a41106a220e2010290300370300200341f8016a41186a22102013290300370300200341f8016a41206a2213200c290300370300200341f8016a41286a220c2008280200360200200341c8016a41086a2208200b290300370300200341c8016a41106a220b200a290300370300200341c8016a41186a220a2009290300370300200341c8016a41206a22072001290300370300200341c8016a41286a22012004290300370300200320032903503703f801200320032903a8023703c80120034198016a41286a2204200c28020036020020034198016a41206a220c201329030037030020034198016a41186a2213201029030037030020034198016a41106a2210200e29030037030020034198016a41086a220e2002290300370300200320032903f8013703980141e000102c2209450d06200920032903c801370300200920053602302009200329039801370234200941286a2001290300370300200941206a2007290300370300200941186a200a290300370300200941106a200b290300370300200941086a20082903003703002009413c6a200e290300370200200941c4006a2010290300370200200941cc006a2013290300370200200941d4006a200c290300370200200941dc006a200428020036020020034180016a41086a200341286a41086a290300220d37030020034180016a41106a2202200341286a41106a29030037030020032003290328370380010240200da72201200328028c012208470d0041012107410121060c030b20034180036a412c6a210a200341e8036a41346a211541012107410121060340200341d8026a41186a220b2001220441186a290300370300200341d8026a41206a220e200441206a2903003703002003200441386a220136028801200341d8026a41086a2210200441086a290300370300200341d8026a41106a2213200441106a290300370300200320042903003703d802200441286a2802002105200341c0006a41086a220c200441346a28020036020020032004412c6a2902003703402005450d0220034180036a41206a2214200e29030037030020034180036a41186a220e200b29030037030020034180036a41106a220b201329030037030020034180036a41086a22132010290300370300200a2003290340370200200a41086a200c280200360200200320032903d80237038003200320053602a803200341e8036a200220034180036a10ba04024020032802980422050d0020082001470d010c030b200341a8026a41286a2204200341e8036a41286a2201290300370300200341a8026a41206a2216200341e8036a41206a2210290300370300200341a8026a41186a2217200341e8036a41186a220c290300370300200341a8026a41106a2218200341e8036a41106a2208290300370300200341a8026a41086a2219200341e8036a41086a221a290300370300200341d0006a41086a221b201541086a290200370300200341d0006a41106a221c201541106a290200370300200341d0006a41186a221d201541186a290200370300200341d0006a41206a221e201541206a290200370300200341d0006a41286a221f201541286a280200360200200320032903e8033703a80220032015290200370350200341f8016a41086a2220201b290300370300200341f8016a41106a221b201c290300370300200341f8016a41186a221c201d290300370300200341f8016a41206a221d201e290300370300200341f8016a41286a221e201f280200360200200341c8016a41086a221f2019290300370300200341c8016a41106a22192018290300370300200341c8016a41186a22182017290300370300200341c8016a41206a22172016290300370300200341c8016a41286a22162004290300370300200320032903503703f801200320032903a8023703c80120034198016a41286a2204201e28020036020020034198016a41206a221e201d29030037030020034198016a41186a221d201c29030037030020034198016a41106a221c201b29030037030020034198016a41086a221b2020290300370300200320032903f80137039801201a201f29030037030020082019290300370300200c20182903003703002010201729030037030020012016290300370300200320032903c8013703e8032013201b290300370300200b201c290300370300200e201d2903003703002014201e29030037030020034180036a41286a221620042802003602002003200329039801370380030240024020062007470d00200741016a22042007490d03200741017422172004201720044b1b22044104200441044b1bad42e0007e220d422088a7454103742104200da721170240024020070d00200341003602a8020c010b200341083602b002200320093602a8022003200741e0006c3602ac020b200341f8016a20172004200341a8026a107d200328028002210420032802f8014101460d0120032802fc012109200441e0006e21070b2009200641e0006c6a220420032903e8033703002001290300210d201a290300210f20082903002111200c29030021122010290300212120042005360230200441206a2021370300200441186a2012370300200441106a2011370300200441086a200f370300200441286a200d370300200441346a2003290380033702002004413c6a2013290300370200200441c4006a200b290300370200200441cc006a200e290300370200200441d4006a2014290300370200200441dc006a2016280200360200200641016a21062003280288012201200328028c012208470d010c040b0b20040d060b1038000b200441386a21010b200820016b220441386d210502402004450d00200541386c21052001412c6a210403400240200428020041ffffff3f71450d002004417c6a280200102e0b200441386a2104200541486a22050d000b0b2003280284012204450d02200441386c450d02200328028001102e0c020b200441386a21010b201420016b220441386d210502402004450d00200541386c21052001412c6a210403400240200428020041ffffff3f71450d002004417c6a280200102e0b200441386a2104200541486a22050d000b0b410821094100210602402007450d00200741386c450d002002102e0b410021070b200020032903183702002000200936020c200041146a2006360200200041106a2007360200200041086a200341186a41086a280200360200200341086a10bc02200341d0046a24000f0b1036000ba10b05047f027e0b7f037e017f230041f0016b220324002002412c6a2802002104200241306a28020021052002280228210620022903002107200341186a200241206a290000370300200341106a200241186a290000370300200341086a200241106a2900003703002003200229000837030002400240024002400240024002402005ad42d8007e2208422088a70d002008a72202417f4c0d000240024020020d00410821090c010b2002102c2209450d020b200241d8006e210a024020050d004100210b0c070b200620054105746a210c20034188016a41046a210d4100210b2006210e0340200341206a41086a220f200e41086a290000370300200341206a41106a2210200e41106a290000370300200341206a41186a2211200e41186a2900003703002003200e290000370320200b41d8006c2102200e41206a210e2009210502400240024003402002450d01200241a87f6a2102200541346a2112200541d8006a21052012200341206a412010ec080d000c020b0b2001280200200341206a10a0022202450d00200128020422052802082213200228020022124d0d05200528020020124102746a28020022122802080d062012417f3602082012427f2012290330220820077c221420142008542205201241386a221329030022152005ad7c2216201554201420085a1b22051b3703302013427f201620051b370300200341e0006a41186a22132011290300370300200341e0006a41106a22112010290300370300200341e0006a41086a2210200f2903003703002003200329032037036020012802042205280208220f200228020022024d0d07200528020020024102746a280200220f28020041016a220241014d0d08200f2002360200200d410041e40010eb081a41f800102c2205450d042005410036020820054281808080103703002005410c6a20034188016a41e80010e9081a200541003a0074200520032f0085013b0075200541f7006a20034185016a41026a2d00003a0000200341c0006a41086a22172010290300370300200341c0006a41106a22102011290300370300200341c0006a41186a22112013290300370300200320032903603703400240200b200a470d00200b41016a2202200b490d04200b41017422132002201320024b1b22024104200241044b1bad42d8007e2208422088a74541037421022008a7211302400240200b0d0020034100360288010c010b200341083602900120032009360288012003200b41d8006c36028c010b200341e0006a2013200220034188016a107d2003280268210220032802604101460d0220032802642109200241d8006e210a0b2009200b41d8006c6a220242003703002002200f360230200241186a4200370300200241106a4200370300200241086a4200370300200241206a4200370300200241286a4200370300200220032903403702342002413c6a2017290300370200200241c4006a2010290300370200200241cc006a201129030037020020052005280200417f6a2202360200024020020d00200541046a22022002280200417f6a220236020020020d002005102e0b200b41016a210b2012201228020841016a3602080b200e200c460d080c010b0b20020d010b1038000b1036000b20122013418884c500103c000b4194dacc00411020034188016a41e4ffc400419884c500103e000b2002200f41a884c500103c000b00000b0240200441ffffff3f71450d002006102e0b02400240200b0d0020004100360230200a450d01200a41d8006c450d012009102e0c010b200042013703202000420037031020004200370308200020073703002000200a36023420002009360230200041286a4200370300200041186a4200370300200041386a200b3602002000413c6a2003290300370000200041c4006a200341086a290300370000200041cc006a200341106a290300370000200041d4006a200341186a2903003700000b200341f0016a24000bf60805077f027e047f037e027f230041306b2202240002400240024002400240024002400240200141386a2802002203450d002001280230220441d8006a21052004200341d8006c22066a21070340200541586a2802002203280208220441016a41004c0d04200541486a22082903002109200841086a290300210a20032004360208200341f4006a2d00004101460d02200541d8006a2105200641a87f6a22060d000b0b4100210620024100360220200242083703184108210b0c010b024002404110102c220b450d00200b2009370300200b200a3703084101210641012108034020052007460d02200541306a2802002203280208220441016a41004c0d05200541286a2903002109200541206a290300210a20032004360208200541d8006a22042105200341f4006a2d00004101470d000240024020082006470d00200641016a22052006490d08200641017422032005200320054b1b22054104200541044b1b220541ffffffff00712005464103742103200541047421050240024020060d00200241003602080c010b200241083602102002200b3602082002200641047436020c0b200241186a20052003200241086a107d2002280220210520022802184101460d01200228021c210b200541047621060b200b20084104746a220520093703082005200a370300200841016a2108200421050c010b0b2005450d050b1036000b200220083602202002200636021c2002200b3602180b200241086a200241186a2001290300200141086a29030010bc040240024020022802084101470d00200241086a41086a2802002105200228020c21030c010b20012802302204200128023841d8006c6a2108200228020c220c200241146a2802004104746a210d200241086a41086a280200210e200c210702400340200820042205460d01200541306a2802002203280208220441016a41004c0d0620032004360208200541d8006a2104200341f4006a2d0000450d002007200d460d01200541d8006a220441586a28020022052802080d07200741086a29030021092007290300210a2005417f360208200542002005290340220f200441486a220129030022107d22112011200f56200541c8006a22032903002211200141086a22122903007d200f201054ad7d220f201156200f2011511b22131b37034020034200200f20131b370300201220093703002001200a3703002005200528020841016a3602082005427f200a2005290340220f7c220a200a200f54220120092003290300220a7c2001ad7c2209200a542009200a511b22011b3703402003427f200920011b370300200741106a21070c000b0b410021030240200e41ffffffff0071450d00200c102e0b0b0240200641ffffffff0071450d00200b102e0b2000200536020420002003360200200241306a24000f0b41bcd9cc004118200241286a41c4ffc40041e883c500103e000b41bcd9cc004118200241286a41c4ffc40041e883c500103e000b1038000b41bcd9cc004118200241286a41c4ffc40041d4ffc400103e000b4194dacc004110200241286a41e4ffc40041f4ffc400103e000bdb3609057f027e017f027e037f067e0e7f017e077f230041e0006b22042400200128020022052001280208220641047422076a210842002109410021014200210a02400240024002400340024020072001470d0020060d02200042808080808001370200200041086a42003702000c030b200a200520016a220b41086a2903007c2009200b2903007c220c200954220bad7c220d200a51210e200d200a54210f200141106a2101200c2109200d210a200b200f200e1b4101470d000b200041b4d2cc0036020420004101360200200041086a411e3602000c010b0240200220092009200254200a200354200a200351220b1b22101b220d2009200220101b220c7d22112003200a20101b200a200320101b7d200d200c54ad7d2212844200520d00200641ffffffff00712006470d0320064104742201417f4c0d032001102c220b450d02200b2005200641047410e90821052000410c6a2006360200200041086a200141047636020020002005360204200041003602000c010b200441286a201120122006ad2213420010e708200441186a201120122013420010e608201342187e220d422088a70d02200da72201417f4c0d02200441186a41086a2903002114200441286a41086a29030021152004290318210c200429032821162001102c2217450d0102400240024002400240024002400240024002400240024002400240024002400240024002400240200141186e221820064f0d00200441386a41086a41083602002004201841186c36023c20042017360238200441d0006a201841017422012006200120064b1b22014104200141044b1bad42187e220da7200d422088a745410374200441386a107d200441d0006a41086a280200210120042802504101460d0120042802542117200141186e21180b20052008460d042006410474210b410021192017210103402005290300210a200141106a200541086a290300370300200141086a200a37030020012019360200200141186a2101201941016a2119200541106a2105200b41706a220b0d000b201941144b0d01201941014d0d0620172019417f6a220b41186c6a21084100210e03402019200b2201417f6a220b490d0402402019200b6b221a4102490d002017200141186c6a220141086a220f2903002017200b41186c6a220541086a2207290300220d5a200141106a221b2903002209200541106a221c290300220a5a2009200a511b0d002005280200211d200520012903003703002007200f290300370300201c201b2903003703000240201a4103490d00200e417f6a211b41002105200821010340200141206a220f290300200d5a200141286a22072903002209200a5a2009200a511b0d01201b2005460d06200141106a2007290300370300200141086a200f2903003703002001200141186a220f290300370300200f2101200e2005417f6a2205470d000b200f21010b2001200d3703082001201d360200200141106a200a3703000b200841686a2108200e417f6a210e200b0d000c070b0b20010d130c140b2019410176ad42187e220a422088a70d13200aa7221e417f4c0d13201e102c221f450d12201741686a2120201741406a212141042122410021234100211c20192124034020242108410021244101210702402008417f6a220e450d0002400240024002400240024002402017200e41186c6a220141086a290300200841186c221b20176a41586a2205290300220954200141106a290300220d200541086a290300220a54200d200a511b0d002008417e6a21072021201b6a210141002124410021050340024020072005470d00200821070c090b2009200129030022255a210b200a200141086a290300220d51210e200a200d5a210f200141686a2101200541016a210520252109200d210a200b200f200e1b0d000b200541016a21072005417f7320086a210e0c010b2021201b6a2101024003400240200e4101470d004100210e0c020b200920012903002225542105200a200141086a290300220d51210b200a200d54210f200141686a2101200e417f6a210e20252109200d210a2005200f200b1b0d000b0b2008200e490d01200820194b0d022008200e6b2207410176220b450d002017200e41186c6a21012020201b6a21050340200441386a41106a220f200141106a221b290300370300200441386a41086a221a200141086a221d29030037030020042001290300370338200541106a2226290300210a200541086a2227290300210920012005290300370300201d2009370300201b200a3703002026200f2903003703002027201a29030037030020052004290338370300200141186a2101200541686a2105200b417f6a220b0d000b0b0240200e0d00200e21240c060b0240200741094d0d00200e21240c060b200820194b0d03200e20086b210b2017200e41186c6a211b03402008200e417f6a2224490d050240200820246b22074102490d002017200e41186c6a220141086a220e2903002017202441186c6a220541086a220f290300220d5a200141106a221a2903002209200541106a221d290300220a5a2009200a511b0d002005280200212620052001290300370300200f200e290300370300201d201a290300370300024020074103490d0041012105201b21010340200141206a220e290300200d5a200141286a220f2903002209200a5a2009200a511b0d01200b20056a4101460d06200141106a200f290300370300200141086a200e2903003703002001200141186a220e290300370300200e2101200b200541016a22056a0d000b200e21010b2001200d37030820012026360200200141106a200a3703000b2024450d06201b41686a211b200b417f6a210b2024210e2007410a4f0d060c000b0b200e200841e4d1cc001057000b2008201941e4d1cc00104d000b2005200741d4d1cc00103c000b2008200e417f6a2224490d002008201941f4d1cc00104d000b2024200841f4d1cc001057000b02400240024002400240201c2023460d00201c21010c010b202341016a22012023490d18202341017422052001200520014b1b22014104200141044b1b220141ffffffff01712001464102742105200141037421010240024020230d00200441003602380c010b20044104360240200420223602382004202341037436023c0b200441d0006a20012005200441386a107d2004280258210520042802504101460d012004280254212220232101200541037621230b202220014103746a2201200736020420012024360200201c41016a2228211c202841024f0d010c020b2005450d160c150b0240024002400340024002400240024020222028221c417f6a22284103746a2201280200450d00201c41037420226a220f41746a280200220e200128020422054d0d00201c41024d0d082022201c417d6a22014103746a280204220b2005200e6a4d0d01201c41034d0d08200f41646a280200200b200e6a4b0d080c010b201c4103490d01200128020421052022201c417d6a22014103746a280204210b0b200b2005490d010b201c417e6a21010b0240201c200141016a22294d0d00201c20014d0d02202220014103746a2226280204222a20262802006a2201202220294103746a2227280200222b490d03200120194b0d04202641046a212c2017202b41186c6a221a2027280204221d41186c22056a210b200141186c210f024002402001202b6b2207201d6b2201201d490d00201f201a200510e908221b20056a210e02400240201d4101480d002007201d4a0d010b201a2101201b21050c020b2017200f6a2108201b2105201a210103402001200b2005200b41086a290300200541086a29030054200b41106a290300220a200541106a290300220954200a2009511b220f1b2207290300370300200141086a200741086a290300370300200141106a200741106a2903003703002005200541186a200f1b2105200141186a2101200b41186a200b200f1b220b20084f0d02200e20054b0d000c020b0b201f200b200141186c220510e908220720056a210e02400240201d4101480d00200141014e0d010b200b2101200721050c010b2020200f6a210f200b21010340200f200141686a2208200e41686a221b200e41706a2205290300200141706a220b29030054200541086a290300220a200b41086a290300220954200a2009511b22051b220b290300370300200f41086a200b41086a290300370300200f41106a200b41106a290300370300200e201b20051b210e0240201a2008200120051b2201490d00200721050c020b200f41686a210f200721052007200e490d000b0b20012005200e20056b220b200b4118706b10e9081a202c202a201d6a3602002026202b3602002027202741086a201c2029417f736a41037410ea081a4101211c202841014d0d050c010b0b2029201c4184d2cc00103c000b2001201c4194d2cc00103c000b202b200141a4d2cc001057000b2001201941a4d2cc00104d000b2024450d040c000b0b410120056b201a41d4d1cc00103c000b200b201941c4d1cc001056000b0240200920025a200a20035a200b1b0d004101210f410021190c030b41d2d2cc00413f4194d3cc00105d000b0240202341ffffffff0171450d002022102e0b201e4118702101201e4118490d00201e2001460d00201f102e0b2019411549210f20100d002006417f6a210b201741106a290300212520172903082102201120135441002012501b450d01200c2109200b21010c020b200441086a200220032013420010e70841002101200441086a41086a290300210d200429030821030240201120135441002012501b0d00410021012006210b0340201920014d0d0a2017200141186c6a2205290308220a20167c2209200a54220e200541106a290300222520157c200ead7c220a202554200a2025511b4101460d09200541086a220520093703002005200a37030802402009200354200a200d54200a200d511b0d00200141016a20067021010b200b417f6a220b0d000b0b200c201484500d020340201920014d0d072017200141186c6a2205290308222542017c220a202554220b200541106a2903002216200bad7c2209201654200a20255a1b4101460d06200541086a2205200a370300200520093703080240200a2003542009200d542009200d511b0d00200141016a20067021010b200c427f7c220a200c542105200a210c200a20142005ad7c427f7c22148450450d000c030b0b200b21010340201920014d0d042017200141186c6a220542002005290308220a20167d22032003200a56200541106a220e290300220920157d200a201654ad7d220d200956200d2009511b22051b200320051b2203370308200e4200200d20051b200d20051b220d3703002001200b2001417f6a220e200e20014b1b2003200256200d202556200d2025511b1b21012014201520097d2016200a54ad7d420020051b7c200c2016200a7d420020051b7c2209200c54ad7c21142009210c2006417f6a22060d000b0b2009201484500d002009210c0340201920014d0d02024002402017200141186c6a2205290308220a427f7c2216200a56200541106a2903002203200a50ad7d220d200356200a4200521b4101470d00200b2001417f6a2205200520014b1b21010c010b200541086a220520163703002005200d3703082001200b2001417f6a2205200520014b1b2016200256200d202556200d2025511b1b210120142009427f7c220c200954ad7c427f7c2114200c21090b200c2014844200520d000b0b024002400240200f450d00201941014d0d0a20172019417f6a220e41186c6a21084100210f03402019200e2201417f6a220e490d0302402019200e6b221a4102490d002017200141186c6a22012802002017200e41186c6a220528020022074f0d00200520012903003703002005290308210a200541086a200141086a290300370300200541106a220529030021092005200141106a2903003703000240201a4103490d00200f417f6a211b41002105200821010340200141186a220b28020020074f0d01201b2005460d05200141106a200141286a290300370300200141086a200141206a2903003703002001200b290300370300200b2101200f2005417f6a2205470d000b200b21010b2001200a37030820012007360200200141106a20093703000b200841686a2108200f417f6a210f200e0d000c0b0b0b2019410176ad42187e220a422088a70d0c200aa72210417f4c0d0c2010102c221f450d0b201741686a2123201741b87f6a212041042122410021064100211c20192124034020242108410021244101210702402008417f6a220b450d0002400240024002400240024002402017200b41186c6a280200200841186c221b20176a41506a2802002201490d002008417e6a21072020201b6a210b41002124410021050340024020072005470d00200821070c090b200541016a21052001200b280200220e4f210f200b41686a210b200e2101200f0d000b200541016a21072005417f7320086a210b0c010b2020201b6a2105024003400240200b4101470d004100210b0c020b200b417f6a210b20012005280200220e49210f200541686a2105200e2101200f0d000b0b2008200b490d01200820194b0d022008200b6b2207410176220e450d002017200b41186c6a21012023201b6a21050340200441386a41106a220f200141106a221b290300370300200441386a41086a221a200141086a221d29030037030020042001290300370338200541106a2226290300210a200541086a2227290300210920012005290300370300201d2009370300201b200a3703002026200f2903003703002027201a29030037030020052004290338370300200141186a2101200541686a2105200e417f6a220e0d000b0b0240200b0d00200b21240c060b0240200741094d0d00200b21240c060b200820194b0d03200b20086b210e2017200b41186c6a211b03402008200b417f6a2224490d050240200820246b22074102490d002017200b41186c6a22012802002017202441186c6a2205280200220f4f0d00200520012903003703002005290308210a200541086a200141086a290300370300200541106a220529030021092005200141106a290300370300024020074103490d0041012105201b21010340200141186a220b280200200f4f0d01200e20056a4101460d06200141106a200141286a290300370300200141086a200141206a2903003703002001200b290300370300200b2101200e200541016a22056a0d000b200b21010b2001200a3703082001200f360200200141106a20093703000b2024450d06201b41686a211b200e417f6a210e2024210b2007410a4f0d060c000b0b200b200841e4d1cc001057000b2008201941e4d1cc00104d000b2005200741d4d1cc00103c000b2008200b417f6a2224490d002008201941f4d1cc00104d000b2024200841f4d1cc001057000b02400240024002400240201c2006460d00201c21010c010b200641016a22012006490d11200641017422052001200520014b1b22014104200141044b1b220141ffffffff01712001464102742105200141037421010240024020060d00200441003602380c010b20044104360240200420223602382004200641037436023c0b200441d0006a20012005200441386a107d2004280258210520042802504101460d012004280254212220062101200541037621060b202220014103746a2201200736020420012024360200201c41016a2228211c202841024f0d010c020b2005450d0f0c0e0b0240024002400340024002400240024020222028221c417f6a22284103746a2201280200450d00201c41037420226a220f41746a280200220e200128020422054d0d00201c41024d0d082022201c417d6a22014103746a280204220b2005200e6a4d0d01201c41034d0d08200f41646a280200200b200e6a4b0d080c010b201c4103490d01200128020421052022201c417d6a22014103746a280204210b0b200b2005490d010b201c417e6a21010b0240201c200141016a22294d0d00201c20014d0d02202220014103746a2226280204222a20262802006a2201202220294103746a2227280200222b490d03200120194b0d04202641046a212c2017202b41186c6a221a2027280204221d41186c22056a210b200141186c210f024002402001202b6b2207201d6b2201201d490d00201f201a200510e908221b20056a210e02400240201d4101480d002007201d4a0d010b201a2101201b21050c020b2017200f6a2108201b2105201a210103402001200b2005200b280200200528020049220f1b2207290300370300200141106a200741106a290300370300200141086a200741086a2903003703002005200541186a200f1b2105200141186a2101200b41186a200b200f1b220b20084f0d02200e20054b0d000c020b0b201f200b200141186c220510e908221b20056a210e02400240201d4101480d00200141014e0d010b200b2101201b21050c010b2023200f6a210f200b21010340200f200141686a2205200e41686a220b200b28020020052802004922071b2208290300370300200f41106a200841106a290300370300200f41086a200841086a290300370300200e200b20071b210e0240201a2005200120071b2201490d00201b21050c020b200f41686a210f201b2105201b200e490d000b0b20012005200e20056b220b200b4118706b10e9081a202c202a201d6a3602002026202b3602002027202741086a201c2029417f736a41037410ea081a4101211c202841014d0d050c010b0b2029201c4184d2cc00103c000b2001201c4194d2cc00103c000b202b200141a4d2cc001057000b2001201941a4d2cc00104d000b2024450d090c000b0b410120056b201a41d4d1cc00103c000b200e201941c4d1cc001056000b20012019419cd4cc00103c000b20012019418cd4cc00103c000b41b4d3cc00412641fcd3cc00105d000b2001201941ecd3cc00103c000b41b4d3cc00412641dcd3cc00105d000b2001201941a4d3cc00103c000b0240200641ffffffff0171450d002022102e0b2010411870210120104118490d0020102001460d00201f102e0b201941186c41186d220141ffffffff00712001470d0220014104742205417f4c0d020240024020050d004108210e0c010b2005102c220e450d020b02400240024002402005410476220f20014f0d002005410376220b2001200b20014b1b22014104200141044b1b220141ffffffff0071200146410374210b200141047421010240024020050d00200441003602380c010b200441386a41086a41083602002004200536023c2004200e3602380b200441d0006a2001200b200441386a107d200441d8006a280200210120042802504101460d012004280254210e2001410476210f0b20190d01410021010c020b2001450d040c030b201741086a2101201941186c220b41686a41186e2107200e210503402001290300210a2005200141086a2903003703082005200a370300200141186a2101200541106a2105200b41686a220b0d000b200741016a21010b02402018450d00201841186c450d002017102e0b2000200e360204200041003602002000410c6a2001360200200041086a200f3602000b200441e0006a24000f0b1036000b1038000bb50b020d7f047e23004190026b220424002004200337036820042002370360200128020021052001280204210602400240024002400240024020012802082207450d002005200741226c22086a2109200441d0006a2002200342ffff03420010e608200441c0006a2002200342ffff03420010e708200441c0006a41086a2903002102200429034021032004280250210a200521070340200741206a2f0100210b200441f0016a41186a200741186a290000370300200441f0016a41106a200741106a290000370300200441f0016a41086a200741086a290000370300200420072900003703f001200b0d02200741226a21072008415e6a22080d000b0b20004100360208200042083702002006450d01200641226c450d012005102e0c010b200441306a20032002200bad420010e80820044190016a41086a200441f0016a41086a2903002202370300200441f0006a41186a220c200441f0016a41186a290300370300200441f0006a41106a220d200441f0016a41106a290300370300200441f0006a41086a220e2002370300200420042903f00122023703900120042002370370200a200b6c220b41ffff036e210a200b41ffff0370210f20042903302102200441306a41086a29030021034130102c2210450d0220102002200a417f200b4180807c491b200f41ffff014b6aad42ffff03837c221137032020102004290370370300201041286a20032011200254ad7c370300201041186a200c290300370300201041106a200d290300370300201041086a200e2903003703002004200936027c2004200741226a220736027820042006360274200420053602702004200441e0006a360280010240024020084122470d004101210d4101210c0c010b4101210d4101210c03402004200741226a220b360278200741206a2f01002108200441f0016a41186a2205200741186a290000370300200441f0016a41106a2206200741106a290000370300200441f0016a41086a220a200741086a290000370300200420072900003703f001024020080d00200b21072009200b470d010c020b200441206a20042802800122072903002202200741086a290300220342ffff03420010e608200441106a2002200342ffff03420010e70820042004290310200441106a41086a2903002008ad420010e80820044190016a41086a2207200a29030037030020044190016a41106a220b200629030037030020044190016a41186a22092005290300370300200420042903f00122023703b0012004200237039001200520092903003703002006200b290300370300200a200729030037030020042004290390013703f001200428022020086c220b41ffff036e2108200b41ffff0370210920042903002102200441086a29030021030240200c200d470d00200d41016a2207200d490d06200d410174220e2007200e20074b1b22074104200741044b1bad42307e2211422088a74541037421072011a7210e02400240200d0d00200441003602d0010c010b200441083602d801200420103602d0012004200d41306c3602d4010b200441b0016a200e2007200441d0016a107d20042802b801210720042802b0014101460d0420042802b4012110200741306e210d0b2010200c41306c6a220720042903f0013703002006290300211120052903002112200a2903002113200720022008417f200b4180807c491b200941ffff014b6aad42ffff03837c2214370320200741086a2013370300200741286a20032014200254ad7c370300200741186a2012370300200741106a2011370300200c41016a210c20042802782207200428027c2209470d000b0b024020042802742207450d00200741226c450d002004280270102e0b2000200c3602082000200d360204200020103602000b2000200129020c37020c200041246a200141246a2902003702002000411c6a2001411c6a290200370200200041146a200141146a29020037020020044190026a24000f0b2007450d010b1036000b1038000b9e3203187f017e0f7f230041206b2202240002402001280208220320036a22042003490d002001280200210502400240024020040d00410221060c010b2004102c2206450d010b02400240024002402004410176220720034f0d0020042003200420034b1b22084104200841044b1b220820086a220920084f41017421080240024020040d00200241003602100c010b200241186a410236020020022004360214200220063602100b200220092008200241106a107d200241086a280200210420022802004101460d0120022802042106200441017621070b20052005200341226c6a470d01410021040c020b20040d020c030b200541206a2104200341226c2205415e6a41226e2108200621030340200320042f01003b0100200441226a2104200341026a21032005415e6a22050d000b200841016a21040b4101450d0120044102742203417f4c0d010240024020030d004104210a0c010b2003102c220a450d010b0240024002402003410276220b20044f0d00200341017622052004200520044b1b22054104200541044b1b41027421050240024020030d00200241003602100c010b200241186a4104360200200220033602142002200a3602100b200220054104200241106a107d200241086a2802002103024020022802004101460d002002280204210a2003410276210b0c020b2003450d040c030b20040d004100210c0c010b20044101742205417e6a4101762108200a2104200621030340200420032f0100360200200441046a2104200341026a21032005417e6a22050d000b200841016a210c0b200a200c41027422046a21094100210d200a2103024002400240024002400340024020040d000240200c0d004100210e4104210f4100210c0c050b024041ffff03200d200d41ffff034922041b200d41ffff0320041b6b22100d00200c41ffffffff0371200c470d09200c4102742204417f4c0d092004102c220f450d08200f200a200c41027410e9081a2004410276210e0c050b2010200c7021112010200c6e21122009200a6b2204410276220341ffffffff01712003470d0820044101742204417f4c0d080240024020040d00410421130c010b2004102c2213450d080b02400240024002402004410376221420034f0d00200441027622052003200520034b1b22034104200341044b1b220341ffffffff01712003464102742105200341037421030240024020040d00200241003602100c010b200241186a410436020020022004360214200220133602100b200220032005200241106a107d200241086a280200210420022802004101460d0120022802042113200441037621140b200c4102742208417c6a221541027621164100210320132104200a21050340200441046a200528020036020020042003360200200441086a2104200341016a2103200541046a21052008417c6a22080d000b201641016a21170240201541cf004b0d002015450d07201320164103746a2118201741037420136a41786a210e41002108201621050340201720052204417f6a2205490d040240201720056b22194102490d00201320044103746a220441046a280200201320054103746a220341046a2802004f0d002003290200211a20032004290200370200024020194103490d00201a422088a7210f2008417f6a211b41002103200e210403402004410c6a280200200f4f0d01201b2003460d062004200441086a22092902003702002009210420082003417f6a2203470d000b201821040b2004201a3702000b2008417f6a2108200e41786a210e20050d000c080b0b2017410176220441ffffffff01712004470d0b2004410374221c417f4c0d0b201c102c221d450d0a201341786a211e2013416c6a211f4104212041002121410021192017212203402022210f41002122410121090240200f417f6a2204450d000240024002400240024002400240201320044103746a41046a280200200f410374221820136a41746a2802002203490d00200f417e6a210e201f20186a2105410021224100210403400240200e2004470d00200f21090c090b200441016a21042003200528020022084f2109200541786a21052008210320090d000b200441016a21092004417f73200f6a21040c010b201f20186a210502400340024020044101470d00410021040c020b2004417f6a2104200320052802002208492109200541786a21052008210320090d000b0b200f2004490d01200f20174b0d02200f20046b22094101762208450d00201320044103746a2103201e20186a210503402003290200211a200320052902003702002005201a370200200341086a2103200541786a21052008417f6a22080d000b0b024020040d00200421220c060b0240200941094d0d00200421220c060b200f20174b0d03200f20046b2105201320044103746a211b201e20186a21230340200f2004417f6a2222490d050240200f20226b22094102490d00201320044103746a220441046a280200201320224103746a220341046a2802004f0d002003290200211a20032004290200370200024020094103490d00201a422088a7210e2005417f6a211841002103201b210403402004410c6a280200200e4f0d0120052003460d062004200441086a2208290200370200200821042018200341016a2203470d000b202321040b2004201a3702000b2022450d06200541016a2105201b41786a211b202221042009410a4f0d060c000b0b2004200f41e4d1cc001057000b200f201741e4d1cc00104d000b200341016a200941d4d1cc00103c000b200f2004417f6a2222490d00200f201741f4d1cc00104d000b2022200f41f4d1cc001057000b0240024002400240024020192021460d00201921040c010b202141016a22042021490d10202141017422032004200320044b1b22044104200441044b1b220441ffffffff01712004464102742103200441037421040240024020210d00200241003602100c010b2002410436021820022020360210200220214103743602140b200220042003200241106a107d2002280208210320022802004101460d012002280204212020212104200341037621210b202020044103746a2204200936020420042022360200201941016a22242119202441024f0d010c020b2003450d0e0c0d0b02400240024003400240024002400240202020242219417f6a22244103746a2204280200450d00201941037420206a220941746a2802002208200428020422034d0d00201941024d0d0820202019417d6a22044103746a2802042205200320086a4d0d01201941034d0d08200941646a280200200520086a4b0d080c010b20194103490d012004280204210320202019417d6a22044103746a28020421050b20052003490d010b2019417e6a21040b02402019200441016a22254d0d00201920044d0d02202020044103746a2223280204222620232802006a2204202020254103746a22272802002228490d03200420174b0d04202341046a2129201320284103746a221b2027280204221841037422036a21082004410374210902400240200420286b220f20186b22042018490d00201d201b200310e908220420036a21050240024020184101480d00200f20184a0d010b201b2103200421040c020b201320096a210f20042104201b21030340200320082004200841046a280200200441046a2802004922091b2902003702002004200441086a20091b2104200341086a2103200841086a200820091b2208200f4f0d02200520044b0d000c020b0b201d20082004410374220310e908220f20036a21050240024020184101480d00200441014e0d010b20082103200f21040c010b201e20096a21092008210303402009200341786a2208200541786a220e2005417c6a2802002003417c6a2802004922041b2902003702002005200e20041b21050240201b2008200320041b2203490d00200f21040c020b200941786a2109200f2104200f2005490d000b0b20032004200520046b41787110e9081a2029202620186a360200202320283602002027202741086a20192025417f736a41037410ea081a41012119202441014d0d050c010b0b202520194184d2cc00103c000b200420194194d2cc00103c000b2028200441a4d2cc001057000b2004201741a4d2cc00104d000b2022450d060c000b0b2004450d0a0c090b410120036b201941d4d1cc00103c000b2005201741c4d1cc001056000b2004417c6a2104200d20032802006a2205200d492108200341046a21032005210d2008450d000b0240200b450d00200a102e0b411e210e41b4d2cc0021040c030b0240202141ffffffff0171450d002020102e0b201c450d00201d102e0b0240024002400240024002400240024002400240200d41feff034b0d0041ffff03200c6e2109410021040240200c20104b0d0041002104200c2105034020162004490d09201320044103746a2208280204220f20126a2203200f490d08200841046a2003360200024020032009490d00200441016a200c7021040b2005417f6a22050d000b0b2011450d01034020162004490d06201320044103746a2205280204220841016a22032008490d05200541046a2003360200024020032009490d00200441016a200c7021040b2011417f6a22110d000c020b0b200c417f6a21092013280204210e02400240200c20104d0d00200921040c010b20092104034020162004490d04201320044103746a220341002003280204220320126b2205200520034b22081b200520081b2205360204200420092004417f6a220f200f20044b1b2005200e4b1b21042011201220036b410020081b6a2111200c417f6a220c0d000b0b2011450d00034020162004490d0202400240201320044103746a22082802042203417f6a220520034d0d0020092004417f6a2203200320044b1b21040c010b200841046a2005360200200420092004417f6a2203200320044b1b2005200e4b1b21042011417f6a21110b20110d000b0b024002400240201541cf004b0d002015450d0a201320164103746a2119201741037420136a41786a210f410021080340201720162204417f6a2216490d030240201720166b221b4102490d00201320044103746a2204280200201320164103746a22032802004f0d002003290200211a200320042902003702000240201b4103490d00201aa721092008417f6a210e41002103200f21040340200441086a220528020020094f0d01200e2003460d05200420052902003702002005210420082003417f6a2203470d000b201921040b2004201a3702000b2008417f6a2108200f41786a210f20160d000c0b0b0b2017410176220441ffffffff01712004470d0e2004410374220c417f4c0d0e200c102c2229450d0d201341786a211d201341686a21114104212041002116410021192017212203402022210f41002122410121090240200f417f6a2204450d000240024002400240024002400240201320044103746a280200200f410374221820136a41706a2802002203490d00200f417e6a210e201120186a2105410021224100210403400240200e2004470d00200f21090c090b200441016a21042003200528020022084f2109200541786a21052008210320090d000b200441016a21092004417f73200f6a21040c010b201120186a210502400340024020044101470d00410021040c020b2004417f6a2104200320052802002208492109200541786a21052008210320090d000b0b200f2004490d01200f20174b0d02200f20046b22094101762208450d00201320044103746a2103201d20186a210503402003290200211a200320052902003702002005201a370200200341086a2103200541786a21052008417f6a22080d000b0b024020040d00200421220c060b0240200941094d0d00200421220c060b200f20174b0d03200f20046b2108201320044103746a211b201d20186a21230340200f2004417f6a2222490d050240200f20226b22094102490d00201320044103746a2204280200201320224103746a22032802004f0d002003290200211a20032004290200370200024020094103490d00201aa7210e2008417f6a211841002103201b21040340200441086a2205280200200e4f0d0120082003460d0620042005290200370200200521042018200341016a2203470d000b202321040b2004201a3702000b2022450d06200841016a2108201b41786a211b202221042009410a4f0d060c000b0b2004200f41e4d1cc001057000b200f201741e4d1cc00104d000b200341016a200941d4d1cc00103c000b200f2004417f6a2222490d00200f201741f4d1cc00104d000b2022200f41f4d1cc001057000b0240024002400240024020192016460d00201921040c010b201641016a22042016490d13201641017422032004200320044b1b22044104200441044b1b220441ffffffff01712004464102742103200441037421040240024020160d00200241003602100c010b2002410436021820022020360210200220164103743602140b200220042003200241106a107d2002280208210320022802004101460d012002280204212020162104200341037621160b202020044103746a2204200936020420042022360200201941016a22242119202441024f0d010c020b2003450d110c100b02400240024003400240024002400240202020242219417f6a22244103746a2204280200450d00201941037420206a220941746a2802002208200428020422034d0d00201941024d0d0820202019417d6a22044103746a2802042205200320086a4d0d01201941034d0d08200941646a280200200520086a4b0d080c010b20194103490d012004280204210320202019417d6a22044103746a28020421050b20052003490d010b2019417e6a21040b02402019200441016a220d4d0d00201920044d0d02202020044103746a2223280204222520232802006a22042020200d4103746a22272802002228490d03200420174b0d04202341046a2126201320284103746a221b2027280204221841037422036a21052004410374210902400240200420286b220f20186b22042018490d002029201b200310e908220420036a21080240024020184101480d00200f20184a0d010b201b2103200421040c020b201320096a210f20042104201b21030340200320052004200528020020042802004922091b2902003702002004200441086a20091b2104200341086a2103200541086a200520091b2205200f4f0d02200820044b0d000c020b0b202920052004410374220310e908220e20036a21080240024020184101480d00200441014e0d010b20052103200e21040c010b201d20096a210f200521030340200f200341786a2204200841786a2205200528020020042802004922091b2902003702002008200520091b21080240201b2004200320091b2203490d00200e21040c020b200f41786a210f200e2104200e2008490d000b0b20032004200820046b41787110e9081a2026202520186a360200202320283602002027202741086a2019200d417f736a41037410ea081a41012119202441014d0d050c010b0b200d20194184d2cc00103c000b200420194194d2cc00103c000b2028200441a4d2cc001057000b2004201741a4d2cc00104d000b2022450d090c000b0b410120036b201b41d4d1cc00103c000b2016201741c4d1cc001056000b20042017419cd4cc00103c000b20042017418cd4cc00103c000b41b4d3cc00412641fcd3cc00105d000b2004201741ecd3cc00103c000b41b4d3cc00412641dcd3cc00105d000b2004201741a4d3cc00103c000b0240201641ffffffff0171450d002020102e0b200c450d002029102e0b2017410374410375220441ffffffff03712004470d0420044102742203417f4c0d040240024020030d004104210f0c010b2003102c220f450d040b02402003410276220e20044f0d00200341017622052004200520044b1b22044104200441044b1b220441ffffffff03712004464102742105200441027421040240024020030d00200241003602100c010b200241186a4104360200200220033602142002200f3602100b200220042005200241106a107d200241086a280200210420022802004101460d032002280204210f2004410276210e0b2017410374220541786a4103762108200f2104201321030340200420033502043e0200200441046a2104200341086a2103200541786a22050d000b200841016a210c2014450d002013102e0b200c4102742205410275220320036a22042003490d032004417f4c0d030240024020040d004102211b0c010b2004102c221b450d030b02400240024002402004410176221920034f0d0020042003200420034b1b22034104200341044b1b220320036a220820034f41017421030240024020040d00200241003602100c010b200241186a4102360200200220043602142002201b3602100b200220082003200241106a107d200241086a280200210420022802004101460d012002280204211b200441017621190b200f20056a2209200f470d01410021050c020b2004450d050c040b41002105201b2104200f21030340200420032802002208417f200841808004491b3b0100200541016a2105200441026a21042009200341046a2203470d000b0b0240200e450d00200f102e0b0240200b450d00200a102e0b02402005410174410175220420012802082203200320044b1b2205450d00200128020041206a2104201b21030340200420032f01003b0100200341026a2103200441226a21042005417f6a22050d000b0b410021042019450d00201b102e0b02402007450d002006102e0b2000200e36020420002004360200200241206a24000f0b2004450d010b1036000b1038000be80402087f017e230041306b2204240002400240024002402001280208220541ffffffff00712005470d0020054104742206417f4c0d00200128020021070240024020060d00410821080c010b2006102c2208450d040b41002109200441003602182004200836021020042006410476220a36021402400240200a20054f0d002006410376220a2005200a20054b1b220a4104200a41044b1b220a41ffffffff0071200a46410374210b200a410474210a0240024020060d00200441003602000c010b200441086a410836020020042006360204200420083602000b200441206a200a200b2004107d200441286a280200210620042802204101460d0120042004280224220836021020042006410476220a3602140b024020072007200541306c6a460d00200741206a2106200541306c220741506a41306e21092008210503402006290300210c2005200641086a2903003703082005200c370300200641306a2106200541106a2105200741506a22070d000b200941016a21090b200420093602182004200441106a2002200310bc0420042802004101470d02200441086a2802002106200428020421050c030b20060d030b1038000b200441086a280200210b2004280204210902402004410c6a280200220620012802082205200520064b1b2207450d00200128020041206a21062009210503402005290300210c2006200541086a2903003703082006200c370300200541106a2105200641306a21062007417f6a22070d000b0b410021050240200b41ffffffff0071450d002009102e0b0b0240200a450d002008102e0b2000200636020420002005360200200441306a24000f0b1036000bee2e0a057f027e077f027e037f027e057f027e127f057e23004180016b2204240002402001450d0041002105034020002802082206450d0120002802002207200641e0006c6a2108420021094200210a0340024002402007280238220b450d00200b41d8006c210c2007280230220d210602400240024002400240024002400240024002400340200641306a280200220e280208220f41016a41004c0d01200641d8006a2110200e200f3602080240200e41f4006a2d00000d0020102106200c41a87f6a220c450d0c0c010b0b4104102c2211450d09201120063602000240200c41d800470d0042002112420021132011102e0c0c0b200d200b41d8006c6a220f41a87f6a210b4101211441012115024002400240024003402010210602400340200641306a280200220e280208220c41016a41004c0d08200e200c3602080240200e41f4006a2d00000d00200f200641d8006a2206470d010c020b0b024020152014470d00201441016a220e2014490d0f2014410174220c200e200c200e4b1b220e4104200e41044b1b220e41ffffffff0371200e46410274210c200e410274210e0240024020140d00200441003602680c010b20044104360270200420113602682004201441027436026c0b200441d8006a200e200c200441e8006a107d2004280260210e20042802584101460d03200428025c2111200e41027621140b200641d8006a2110201120154102746a2006360200201541016a2115200b2006470d010b0b420021124200211320154102490d0320112015410274220b6a2116200b0d0142002117420021180c020b200e450d0b0c0c0b4200211742002118201121060340427f20182006280200220e41286a2903007c2017200e41206a2903007c2213201754220ead7c2217200e201720185420172018511b220e1b2118427f2013200e1b21172016200641046a2206470d000b0b201541ffffffff00712015470d0920154104742206417f4c0d090240024020060d00410821190c010b2006102c2219450d0b0b0240024002402006410476221a20154f0d002006410376220e2015200e20154b1b220e4104200e41044b1b220e41ffffffff0071200e46410374210c200e410474210e0240024020060d00200441003602680c010b200441083602702004200636026c200420193602680b200441d8006a200e200c200441e8006a107d2004280260210620042802584101460d01200428025c21192006410476211a0b4108211b2011201646221c450d014100211d0c090b20060d0b0c0a0b41002110201921062011210c0340200c28020041306a280200220e280208220f41016a41004c0d04200e200f360208200e29034021132006200e41c8006a29030037030820062013370300201041016a2110200641106a21062016200c41046a220c470d000b4100211d201c0d07201121060240034002402006280200220e290320200e41286a29030084500d00200e280230220e280208220c41016a41004a0d0241bcd9cc004118200441f8006a41c4ffc40041f883c500103e000b200641046a2106200b417c6a220b450d090c000b0b200e200c360208200e41c8006a2903002113200e290340211e4110102c221b450d0a200641046a2106201b201e370300201b20133703084101211d4100210f4101210b0240034020162006460d012006280200210e200641046a220c2106200e290320200e41286a29030084500d00200e2802302206280208220e41016a41004c0d062006200e360208200641c8006a29030021132006290340211e02400240200b201d470d00201d41016a2206201d490d0d201d410174220e2006200e20064b1b22064104200641044b1b220641ffffffff0071200646410374210e2006410474210602400240201d0d00200441003602680c010b200441083602702004201b3602682004201d41047436026c0b200441d8006a2006200e200441e8006a107d2004280260210620042802584101460d01200428025c211b2006410476211d0b201b200b4104746a220620133703082006201e370300200f41106a210f200b41016a210b200c21060c010b0b20060d0b0c0a0b200b450d07200b410474450d0502400240200b4101470d00201b210e0c010b201b41106a2106201b210e0340200e2006200e290300200629030056200e41086a2903002213200641086a290300221e562013201e511b1b210e200641106a2106200f41706a220f0d000b0b2010410474220c450d060240024020104101470d002019210c0c010b201941106a2106200c41706a21102019210c03402006200c200c290300200629030056200c41086a2903002213200641086a290300221e562013201e511b1b210c200641106a2106201041706a22100d000b0b427f4200200e2903002213200c29030022127d221e201e201356200e41086a290300221e200c41086a2903007d2013201254ad7d2213201e562013201e511b22061b221f42002007290300221e20177d22122012201e56200741086a290300221220187d201e201754ad7d221820125620182012511b220e1b7c22172017201f54220c4200201320061b221742002018200e1b7c200cad7c221820175420182017511b22061b2212200254427f201820061b221320035420132003511b450d080240201d41ffffffff0071450d00201b102e0b201a450d002019102e0b201441ffffffff0371450d0b2011102e0c0b0b41bcd9cc004118200441f8006a41c4ffc40041d883c500103e000b41bcd9cc004118200441f8006a41c4ffc40041d883c500103e000b41bcd9cc004118200441f8006a41f09cc50041809dc500103e000b41bcd9cc004118200441f8006a41c4ffc40041f883c500103e000b41e580c5004130419881c500105d000b41a881c500413241dc81c500105d000b200741086a2903002113200729030021120b024002400240024002400240201c0d002011210e0340200e28020028023022062802080d022006417f3602082006420020062903402218200e280200220c290320221e7d22172017201856200641c8006a22102903002217200c41286a2903007d2018201e54ad7d221820175620182017511b220c1b370340201042002018200c1b370300200e280200220c4200370320200c41286a42003703002006200628020841016a3602082016200e41046a220e470d000b0b0240201541144b0d00201541014d0d052015417e6a21064102210e201120154102746a41786a210c034020152006490d03200c200e10c104200c417c6a210c200e41016a210e2006417f6a2206417f470d000c060b0b2015410176220641ffffffff03712006470d0520064102742220417f4c0d052020102c2221450d062011417c6a2122201141746a2123410021244104212541002126201521270340024002402027220b417f6a22270d004101210c410021270c010b024002400240024002400240024002400240024002400240201120274102746a28020041306a2802002206280208220e41016a41004c0d002006200e3602082011200b417e6a220d4102746a28020041306a280200220e280208220c41016a41004c0d01200641c8006a290300211820062903402117200e200c3602082017200e290340542018200e41c8006a29030022175420182017511b0d042023200b4102746a2106410021274100211003400240200d2010470d00200b210c0c0e0b200641046a28020041306a280200220e280208220c41016a41004c0d03200e200c360208200628020041306a280200220c280208220f41016a41004c0d04200e41c8006a2903002118200e2903402117200c200f3602082006417c6a2106201041016a21102017200c2903405a2018200c41c8006a29030022175a20182017511b0d000b201041016a210c2010417f73200b6a21270c050b41bcd9cc004118200441f8006a41c4f8c90041ccf9c900103e000b41bcd9cc004118200441f8006a41c4f8c90041ccf9c900103e000b41bcd9cc004118200441f8006a41c4f8c90041ccf9c900103e000b41bcd9cc004118200441f8006a41c4f8c90041ccf9c900103e000b2023200b410274220f6a210602400340024020274101470d00410021270c020b200641046a28020041306a280200220e280208220c41016a41004c0d03200e200c360208200628020041306a280200220c280208221041016a41004c0d04200e41c8006a2903002118200e2903402117200c20103602082006417c6a21062027417f6a21272017200c290340542018200c41c8006a29030022175420182017511b0d000b0b200b2027490d03200b20154b0d04200b20276b220c4101762210450d00201120274102746a21062022200f6a210e03402006280200210f2006200e280200360200200e200f360200200641046a2106200e417c6a210e2010417f6a22100d000b0b2027450d06200c41094b0d06200b20154b0d04200b20276b210c2027417f6a2106202220274102746a210e0340200b2006490d0b200e200c41016a220c10c1042006417f6a221020064f0d06200e417c6a210e20102106200c410a490d000c060b0b41bcd9cc004118200441f8006a41c4f8c90041ccf9c900103e000b41bcd9cc004118200441f8006a41c4f8c90041ccf9c900103e000b2027200b41e4d1cc001057000b200b201541e4d1cc00104d000b200b2027417f6a2206490d05200b201541f4d1cc00104d000b201041016a21270b0240024002400240024020262024460d00202621060c010b202441016a22062024490d0a2024410174220e2006200e20064b1b22064104200641044b1b220641ffffffff0171200646410274210e200641037421060240024020240d00200441003602680c010b20044104360270200420253602682004202441037436026c0b200441d8006a2006200e200441e8006a107d2004280260210e20042802584101460d01200428025c212520242106200e41037621240b202520064103746a2206200c36020420062027360200202641016a22282126202841024f0d010c020b200e0d090c080b024002400240024002400240024003400240024002400240202520282226417f6a22284103746a2206280200450d00202641037420256a220f41746a28020022102006280204220e4d0d00202641024d0d0c20252026417d6a22064103746a280204220c200e20106a4d0d01202641034d0d0c200f41646a280200200c20106a4b0d0c0c010b20264103490d012006280204210e20252026417d6a22064103746a280204210c0b200c200e490d010b2026417e6a21060b02402026200641016a22294d0d00202620064d0d02202520064103746a222a280204222b202a2802006a2206202520294103746a222c280200222d490d03200620154b0d042011202d4102746a222e202c280204222f410274220e6a210c2006410274210f024002402006202d6b220b202f6b2206202f490d002021202e200e10e9082206200e6a211002400240202f4101480d00200b202f4a0d010b202e210e200621060c020b2011200f6a213020062106202e210e0340200c28020041306a280200220f280208220b41016a41004c0d08200f200b360208200628020041306a280200220b280208220d41016a41004c0d09200f41c8006a2903002118200f2903402117200b200d360208200e200c20062017200b290340542018200b41c8006a29030022175420182017511b220f1b2802003602002006200641046a200f1b2106200e41046a210e200c41046a200c200f1b220c20304f0d02201020064b0d000c020b0b2021200c2006410274220e10e9082230200e6a211002400240202f4101480d00200641014e0d010b200c210e203021060c010b2022200f6a210f200c210e03402010417c6a220b28020041306a2802002206280208220c41016a41004c0d092006200c360208200e417c6a220d28020041306a280200220c280208223141016a41004c0d0a200641c8006a290300211820062903402117200c2031360208200f200d200b2017200c290340542018200c41c8006a29030022175420182017511b22061b2802003602002010200b20061b21100240202e200d200e20061b220e490d00203021060c020b200f417c6a210f2030210620302010490d000b0b200e2006201020066b417c7110e9081a202a41046a202b202f6a360200202a202d360200202c202c41086a20262029417f736a41037410ea081a41012126202841014d0d090c010b0b202920264184d2cc00103c000b200620264194d2cc00103c000b202d200641a4d2cc001057000b2006201541a4d2cc00104d000b41bcd9cc004118200441f8006a41c4f8c90041ccf9c900103e000b41bcd9cc004118200441f8006a41c4f8c90041ccf9c900103e000b41bcd9cc004118200441f8006a41c4f8c90041ccf9c900103e000b41bcd9cc004118200441f8006a41c4f8c90041ccf9c900103e000b2027450d040c000b0b4194dacc004110200441f8006a41e4ffc40041ec81c500103e000b2006201541c4d1cc001056000b2006200b41f4d1cc001057000b0240202441ffffffff0171450d002025102e0b2020450d002021102e0b2015417f6a210f02400240024002400240024002400240201c450d0042002118420021170c010b420021184100210e420021172011210c0340200c2802002802302206280208221041016a41004c0d0220062010360208200441386a200641c8006a29030022324200200ead2233420010e808200441c8006a2006290340223442002033420010e80802404200427f20042903482004290340420052200441c8006a41086a290300221e20042903387c221f201e547222061b221e20187d22352035201e56427f201f20061b221f20177d201e201854ad7d221e201f56201e201f511b22061b2007290300584200201e20061b221e200741086a290300221f58201e201f511b0d0042002033427f7c221e201e203356200e45200e1b1ba7210f0c020b200e41016a210e427f201720327c201820347c221e2018542206ad7c22182006201820175420182017511b22061b2117427f201e20061b21182016200c41046a220c470d000b0b2015200f4d0d012011200f4102746a2802002802302206280208220e41016a41004c0d022006200e360208200441186a200641c8006a29030022354200200f41016a220fad2233420010e808200441286a2006290340223242002033420010e8084200427f200741086a290300221e20177c2007290300221720187c221f2017542206ad7c221820062018201e542018201e511b22061b2218427f200441286a41086a290300221720042903187c221e2004290320420052201e20175472220e1b7d427f201f20061b2217427f2004290328200e1b221f54ad7d221e2017201f7d221f201756201e201856201e2018511b22061b21344200201f20061b21362015410274210c201121100340200c450d0620102802002206450d062006280230220e280208220b41016a41004c0d04200e200b360208200441086a203620342033420010e70820064200427f2004290308221820327c22172017201854220b200441086a41086a290300221820357c200bad7c221720185420172018511b220b1b2218200e290340221e7d221f201f201856427f2017200b1b2217200e41c8006a2903007d2018201e54ad7d221820175620182017511b220e1b2217370320200641286a42002018200e1b221e370300200628023022062802080d05201041046a2110200641003602082006427f2006290340221820177c22172017201854220e200641c8006a220b2903002218201e7c200ead7c221720185420172018511b220e1b370340200b427f2017200e1b370300200c417c6a210c200f417f6a220f0d000c060b0b41bcd9cc004118200441f8006a41c4ffc40041fc81c500103e000b418c82c500418a01419883c500105d000b41bcd9cc004118200441f8006a41c4ffc40041a883c500103e000b41bcd9cc004118200441f8006a41c4ffc40041b883c500103e000b4194dacc004110200441f8006a41e4ffc40041c883c500103e000b0240201441ffffffff0371450d002011102e0b2004200710bb040240201d41ffffffff0071450d00201b102e0b201a450d032019102e0c030b1038000b1036000b42002112420021130b2013200a20122009562013200a562013200a511b22061b210a2012200920061b2109200741e0006a22072008470d000b200541016a220520014f0d012009200258200a200358200a2003511b450d000b0b20044180016a24000bf00303047f027e037f230041106b2202240002400240024002400240024020014102490d00200028020441306a2802002203280208220441016a41004c0d0220032004360208200028020041306a2802002204280208220541016a41004c0d03200341c8006a29030021062003290340210720042005360208200720042903405a2006200441c8006a29030022075a20062007511b0d00200028020021082000200028020436020002400240200141034f0d00200041046a21040c010b200041046a21052001417f6a21090340200541046a220428020041306a2802002200280208220341016a41004c0d0620002003360208200841306a2802002203280208220a41016a41004c0d07200041c8006a2903002106200029034021072003200a3602080240200720032903405a2006200341c8006a29030022075a20062007511b450d00200521040c020b2009450d0320052004280200360200200421052009417f6a22094101470d000b0b200420083602000b200241106a24000f0b2001200141d4d1cc00103c000b41bcd9cc004118200241086a41c4f8c90041ccf9c900103e000b41bcd9cc004118200241086a41c4f8c90041ccf9c900103e000b41bcd9cc004118200241086a41c4f8c90041ccf9c900103e000b41bcd9cc004118200241086a41c4f8c90041ccf9c900103e000bf70302037f017e230041106b2202240020004100360208200042013702000240024020012d00004101460d00200241003a00002000200241011074200141046a28020021032001410c6a2802002204200010760240200441306c2204450d00200320046a21040340200220032802003602002000200241041074200341086a200010b204200341306a22032004470d000b0b200129031021052002200141186a290300370308200220053703002000200241101074200141206a29030021052002200141286a2903003703082002200537030020002002411010742002200141c0006a2802003602002000200241041074200129033021052002200141386a2903003703082002200537030020002002411010740c010b200241013a00002000200241011074200141286a29030021052002200141306a2903003703082002200537030020002002411010742000200141016a41201074200141216a2d000020001073200141386a29030021052002200141c0006a290300370308200220053703002000200241101074200141c8006a29030021052002200141d0006a2903003703082002200537030020002002411010742002200141e8006a2802003602002000200241041074200141d8006a29030021052002200141e0006a2903003703082002200537030020002002411010740b200241106a24000bb20b04057f017e037f017e230041c0046b2203240020034180026a41086a200241086a2802003602002003200229020037038002200341086a20034180026a10c404200341186a20032802082003280210109d03200341286a41206a2204200141206a290200370300200341286a41186a2205200141186a290200370300200341286a41106a2206200141106a290200370300200341286a41086a2207200141086a290200370300200328021821022003410036021820032001290200370328024002400240024020024101470d00200329021c2108200341e0006a41206a22022004290300370300200341e0006a41186a22092005290300370300200341e0006a41106a22052006290300370300200341e0006a41086a220a20072903003703002003200329032837036020034188016a2008a7220b10a70420034180026a2003280288012206200328029001220410c504200329028402210c2003280280022101200341a0016a41206a2002290300370300200341a0016a41186a2009290300370300200341a0016a41106a2005290300370300200341a0016a41086a200a290300370300200320032903603703a0012001410820011b2105024002400240200c420020011b220c422088a722022008422088a722074d0d0020034180026a41206a200341a0016a41206a29030037030020034180026a41186a200341a0016a41186a29030037030020034180026a41106a200341a0016a41106a29030037030020034180026a41086a200341a0016a41086a290300370300200320032903a00122083703800220032005200741f8026c6a22013602a80202402008a741ff01714103460d0020012802bc024102460d0020034180026a2005200741f8026c6a41c8026a10c6040d020b200141bc026a2104024020012802bc024102460d0002402005200741f8026c6a22062802b0022209450d00200641b4026a280200450d002009102e0b2001108b020b200120034180026a41bc0210e9081a200441023602002005200741f8026c6a220141f0026a200341f8016a290300370300200141e8026a200341f0016a290300370300200141e0026a200341e8016a290300370300200141d8026a200341e0016a290300370300200141d0026a200341d8016a290300370300200141c8026a200341d0016a290300370300200120032903c8013703c002200328028801210620032802900121040b20032005360280022003200c370284022006200420034180026a10c704200ca7210902402002450d00200241f8026c21022005210103400240200141bc026a2802004102460d000240200141b0026a2802002204450d00200141b4026a280200450d002004102e0b20011096010b200141f8026a2101200241887d6a22020d000b0b02402009450d00200941f8026c450d002005102e0b20032003290095013703c80120032003419c016a2800003600cf0141062101410121020c010b20032003290095013703c80120032003419c016a2800003600cf01200241f8026c21022005210103400240200141bc026a2802004102460d000240200141b0026a2802002204450d00200141b4026a280200450d002004102e0b20011096010b200141f8026a2101200241887d6a22020d000b4102210141002102200ca72204450d00200441f8026c450d002005102e0b0240200328028c01450d002006102e0b200320032903c801370350200320032800cf01360057024020020d00200020013a000020002003290350370001200041086a20032800573600000c020b2003418c026a200736020020034188026a200b3602002003410136028402200341013a00800220034180026a10fe01200041063a00000c020b2000410210c80420002d000021010b200141ff01714106470d010b2003280210210120032802082102024020032802184101460d002002200110ff010c010b20022001200341186a410472109e030b0240200328020c450d002003280208102e0b200341c0046a24000bd00101057f230041306b22022400200241dffcc6004109108102200241106a41e5b0c4004106108102200241206a20012802002203200128020810a201024002402002280228220441206a2205417f4c0d000240024020050d00410121060c010b2005102c2206450d020b20004100360208200020053602042000200636020020002002411010742000200241106a411010742000200228022022052004107402402002280224450d002005102e0b0240200141046a280200450d002003102e0b200241306a24000f0b1038000b1036000bb91f09047f017e0c7f027e047f037e167f017e087f230041a00e6b220324002003200236021c20032001360218200341206a2001200210ed020240024002400240200328022022040d00200041003602000c010b200328022421052003200341286a28020036023420032004360230200341106a200341306a10ab010240024020032802100d000240024020032802142206200328023441f8026e2201200120064b1bad42f8027e2207422088a70d002007a72201417f4c0d000240024020010d00410821080c010b2001102c2208450d060b200141f8026ead2107024002402006450d00200341870b6a2109200341c80d6a41126a210a200341f50d6a210b200341e00d6a410372210c200341e00d6a41126a210d200341900e6a41086a210e200341f80a6a410472220f41076a211003400240024020032802342201450d00200328023022112d0000211220032001417f6a22133602342003201141016a360230410321020240024020120e020001030b410221020c020b024002400240024002402013450d0020112d0001210220032001417e6a22013602342003201141026a22123602304100211102400240024020020e020100030b200341086a200341306a10ab0120032802080d0220032802342201200328020c2202490d022002417f4c0d0c0240024020020d00410121110c010b200210322211450d12200328023421010b20012002490d0120112003280230200210e9081a200328023422012002490d122002ad221442208620148421152003200120026b22013602342003200328023020026a22123602300b2015a7211302402001450d0020122d0000211620032001417f6a3602342003201241016a360230200341f80a6a200341306a10980120032802f80a411c460d00200341c8086a200341f80a6a41b00210e9081a024020032802342201450d00200328023022122d0000211720032001417f6a22183602342003201241016a2219360230410021020240024020170e020100020b20184104490d01201235000121142003201241056a36023020032001417b6a220236023420024104490d012012350005211a2003200141776a22183602342003201241096a2219360230201a422086201484211b410121020b2018450d0020192d0000210120032018417f6a22123602342003201941016a360230024002400240024020010e110004040304040404040404040404040102040b2012450d0320192d0001210120032018417e6a3602342003201941026a3602304100211741002118024020010e03090008040b200341f80a6a200341306a10930120032d00f80a4101460d03200341f80d6a41086a200941086a2900002214370300200341f80d6a41106a200941106a2f000022013b01002003200f290000221a3703900e20032009290000221c3703f80d200320102800003600970e20032d00fb0a211d20032f00f90a211e20032d00920e211f20032800930e212020032800970e2121200341e00d6a41106a20013b0100200341e00d6a41086a20143703002003201c3703e00d201aa72122410121180c080b2012450d0220192d0001210120032018417e6a2217360234410221122003201941026a36023002400240024020010e03000102050b20174104490d04201928000221172003201941066a36023020032018417a6a220136023420014104490d04200341e00d6a41086a200341f80a6a41086a290200370300200341e00d6a41106a200341f80a6a41106a290200370300200320032902f80a3703e00d201928000621232003201841766a36023420032019410a6a36023041002112201721240c010b200341f80a6a200341306a10930120032d00f80a4101460d03200341f80d6a41086a2201200941086a290000370300200341f80d6a41106a2212200941106a2f00003b01002003200f29000022143703900e200320092900003703f80d200320102800003600970e20032d00fb0a212520032f00f90a212620032802940e21232003200e41026a2d00003a00e20d2003200e2f01003b01e00d200c20032903f80d370000200c41086a2001290300370000200c41106a20122f01003b0000200b20032f009d0e3b0000200b41026a2003419d0e6a41026a2d00003a00002014a72124410121120b200341c80d6a41106a200341e00d6a41106a2903002214370300200341c80d6a41086a200341e00d6a41086a290300221a370300200341b00d6a41086a201a370300200341b00d6a41106a20143d0100200320032903e00d22143703c80d200341a80d6a41046a200a41046a2f01003b0100200320143703b00d2003200a2801003602a80d410121170c080b2012450d0120192d0001210120032018417e6a2227360234410221172003201941026a3602304102211202400240024020010e03000102040b20274104490d03201928000221272003201941066a36023020032018417a6a220136023420014104490d03200341e00d6a41086a200341f80a6a41086a290200370300200341e00d6a41106a200341f80a6a41106a290200370300200320032902f80a3703e00d201928000621232003201841766a36023420032019410a6a36023041002112202721240c010b200341f80a6a200341306a10930120032d00f80a4101460d02200341f80d6a41086a2201200941086a290000370300200341f80d6a41106a2212200941106a2f00003b01002003200f29000022143703900e200320092900003703f80d200320102800003600970e20032d00fb0a212520032f00f90a212620032802940e21232003200e41026a2d00003a00e20d2003200e2f01003b01e00d200c20032903f80d370000200c41086a2001290300370000200c41106a20122f01003b0000200b20032f009d0e3b0000200b41026a2003419d0e6a41026a2d00003a00002014a72124410121120b200341b00d6a41106a200341e00d6a41106a2f01003b0100200341b00d6a41086a200341e00d6a41086a290300370300200341a80d6a41046a200d41046a2f01003b0100200320032903e00d3703b00d2003200d2801003602a80d0c070b2012450d0020032018417e6a3602342003201941026a3602300b200341c8086a108b020b2011450d012013450d010b2011102e0b41022102410121010c030b410221180b200341b00d6a41106a200341e00d6a41106a2f01003b0100200341b00d6a41086a200341e00d6a41086a290300370300200341a80d6a41046a200341c80d6a41046a2f01003b0100200320032903e00d3703b00d200320032801c80d3602a80d20222126201d21122020212420212123201f21250b2015422088a72128200341e00d6a41106a200341b00d6a41106a2f01003b0100200341e00d6a41086a200341b00d6a41086a290300370300200341f80d6a41046a200341a80d6a41046a2f01003b0100200320032903b00d3703e00d200320032802a80d3602f80d200341f80a6a200341c8086a41b00210e9081a200320032800c1083602c80d2003200341c1086a41036a2800003600cb0d41002101201821292017212a201b211c2012212b2013212c2011212d2016212e0b20034190066a200341f80a6a41b00210e9081a200341f8056a41106a2211200341e00d6a41106a2f01003b0100200341f8056a41086a2212200341e00d6a41086a290300370300200341f0056a41046a2213200341f80d6a41046a2f01003b0100200320032903e00d3703f805200320032802f80d3602f005200320032802c80d3602e805200320032800cb0d3600eb0520010d00200341f80a6a20034190066a41b00210e9081a200341c8086a41106a20112f01003b0100200341c8086a41086a2012290300370300200341c80d6a41046a20132f01003b0100200320032903f8053703c808200320032802f0053602c80d200320032802e8053602e00d200320032800eb053600e30d201e212f2026213020292131202a2132201c2133202b2134202421352023213620282137202c2138202d2139202e213a2025213b0c010b410321020b200341b8036a200341f80a6a41b00210e9081a200341a0036a41106a2201200341c8086a41106a2f01003b0100200341a0036a41086a2211200341c8086a41086a29030037030020034198036a41046a2212200341c80d6a41046a2f01003b0100200320032903c8083703a003200320032802c80d36029803200320032802e00d36029003200320032800e30d3600930320024103460d04200341e0006a200341b8036a41b00210e9081a200341c8006a41106a221320012f01003b0100200341c8006a41086a22162011290300370300200341c0006a41046a221120122f01003b0100200320032903a00337034820032003280298033602402003200328029003360238200320032800930336003b02402007422088a722012007a7470d00200141016a22122001490d0420014101742218201220122018491b22124104201241044b1bad42f8027e2214422088a74541037421122014a721180240024020010d00200341003602f80a0c010b200341083602800b200320083602f80a2003200141f8026c3602fc0a0b200341c8086a20182012200341f80a6a107d20032802d008211220032802c8084101460d0320032802cc082108200742808080807083201241f8026ead8421070b2008200141f8026c6a200341e0006a41b00210e908220141d4026a2036360000200141d0026a2035360000200141cf026a203b3a0000200141cd026a20303b0000200141cc026a20343a0000200141ca026a202f3b0000200141c9026a20313a0000200141c8026a20323a0000200120333703c002200120023602bc02200120373602b802200120383602b402200120393602b00220132f010021022016290300211420112f010021112003290348211a20032802402112200141f0026a203a3a0000200141ea026a2012360000200141ee026a20113b0000200141d8026a201a370000200141e0026a2014370000200141e8026a20023b0000200141f1026a2003280238360000200141f4026a200328003b36000020074280808080107c21072006417f6a22060d000b0b2008450d0320002007370204200020083602000c040b20120d050b1038000b02402007422088a72201450d00200141f8026c21022008210103400240200141bc026a2802004102460d000240200141b0026a2802002206450d00200141b4026a280200450d002006102e0b20011096010b200141f8026a2101200241887d6a22020d000b0b2007a72201450d00200141f8026c450d002008102e0b200341003602d008200342013703c8082003410a360294062003200341186a360290062003200341c8086a3602b8032003418c0b6a4101360200200342013702fc0a200341909dc5003602f80a200320034190066a3602880b200341b8036a419cebc000200341f80a6a103d1a20032802c80820032802d00810ef02024020032802cc08450d0020032802c808102e0b200041003602000b2005450d002004102e0b200341a00e6a24000f0b1036000b2002200141b8b2c0001056000ba50201027f41012102024020002d0000220320012d0000470d0002400240024020030e03000102000b4101210220002d0001220320012d0001470d024100210220034101470d02200041026a200141026a412010ec084100470f0b200041046a2d00002203200141046a2d0000470d01410021020240024020030e03010003010b200041056a200141056a412010ec084100470f0b41012102200041086a280200200141086a280200470d012000410c6a2802002001410c6a280200470f0b200041046a2d00002203200141046a2d0000470d00410021020240024020030e03010002010b200041056a200141056a412010ec084100470f0b41012102200041086a280200200141086a280200470d002000410c6a2802002001410c6a2802004721020b20020be80101047f230041106b22032400024002402002280208220441f8026c4104722205417f4c0d00200228020021022005102c2206450d012003410036020820032005360204200320063602002004200310760240200441f8026c2204450d00034002400240200241bc026a2802004102470d00200341003a000f20032003410f6a410110740c010b200341013a000f20032003410f6a410110742002200310ab040b200241f8026a2102200441887d6a22040d000b0b200020012003280200200328020810b20102402003280204450d002003280200102e0b200341106a24000f0b1038000b1036000bdc0101047f230041c0006b2202240041a3e7c4002103411221044103210502400240024002400240200141ff01710e050001020304000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602242002418883ca003602202002200241206a360218200241086a41e4e6c4001044000b4193e7c400210341102104410021050c020b418be7c400210341082104410121050c010b41f4e6c400210341172104410221050b20004183023b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000bb80701057f230041b0036b220a2400200a41206a200110a904200a280220220b200a280228108f02210c0240200a280224450d00200b102e0b02400240024002400240200c0d00200a41386a220c4200370300200a41306a220b4200370300200a41206a41086a4200370300200a4200370320200a41206a41d9fcc6004106108102200a4198036a4180f4cb004106108102200c200a4198036a41086a290000370300200b200a29009803370300200a41186a200a41206a4120108e024100210d0240417f417f200a28021c4100200a2802181b220c20036a220b200b200c491b220b41016a220e200e200b491b200320021b2203200c4d0d00024020044101470d002005410047200641014b71210d2006417f6a21020b2001280208220c417f4c0d042001280200210b02400240200c0d00410121040c010b200c102c2204450d060b2004200b200c10e9082104200a41206a200941b00210e9081a200a41e4026a2002360200200a41e0026a2005360200200a41d8026a200c360200200a41d4026a200c360200200a41f0026a200841086a290200370300200a41f8026a200841106a290200370300200a4180036a200841186a290200370300200a4188036a200841206a290200370300200a200d3602dc02200a20043602d002200a20073a009003200a20082902003703e8022003200a41206a10aa04200a41206a200310a704200a280228210c200a280220210841002109200a41ac036a41003a0000200a41003602a803200a41106a2008200c200a41a8036a4105410010ca0402400240200a280210450d00200a200a2802142209410520094105491b36029c03200a200a41a8036a36029803200a41086a200a4198036a10ab01200a28020c417f6a210c200a2802084521090c010b0b0240200a280224450d002008102e0b200a200c410020091b220836029c03200a200336029803200a41206a200110a904200a2802202209200a280228200a4198036a109e030240200a280224450d002009102e0b200a412c6a2008360200200a41206a41086a2003360200200a4100360224200a41013a0020200a41206a10fe01200041086a20083602002000200336020420004100360200200141046a280200450d03200b102e0c030b20004281808080b0a08001370200200041086a41f4e6c400ad4280808080f002843702000c010b200041003a000620004183023b0104200041013602002000410c6a4110360200200041086a4193e7c4003602000b2009108b02200141046a280200450d002001280200102e0b200a41b0036a24000f0b1038000b1036000b940102017f017e230041106b2206240002402002ad4220862001ad842004ad4220862003ad84200510272207422088a72203450d0041002105024002402007a722022d00000e020100020b2003417f6a4104490d0120022800012101410121050b2002102e2000200136020420002005360200200641106a24000f0b41cae0cc00412e200641086a41f8e0cc004188e1cc00103e000b8f0101027f230041e0046b22012400200141b0026a200010980120012802b0022102200141046a200141b0026a41047241ac0210e9081a0240024002402002411c460d00200141b0026a200141046a41ac0210e9081a41b002102c2200450d0220002002360200200041046a200141b0026a41ac0210e9081a0c010b410021000b200141e0046a240020000f0b1036000bb00101037f230041e0046b220124002000200028020441016a22023602044100210302400240200220002802084b0d00200141b0026a200010950120012802b0022102200141046a200141b0026a41047241ac0210e9081a2002411c460d00200141b0026a200141046a41ac0210e9081a41b002102c2203450d0120032002360200200341046a200141b0026a41ac0210e9081a20002000280204417f6a3602040b200141e0046a240020030f0b1036000b5a01017f024020002802002201450d0020012001280200417f6a360200200028020022012802000d002001410c6a10cd04200028020041046a22012001280200417f6a3602002000280200220041046a2802000d002000102e0b0b950102027f027e230041106b2201240002404101102c2202450d00200142013702042001200236020002400240200028020022020d00200141003a000f20012001410f6a410110740c010b200141013a000f20012001410f6a41011074200041086a28020022002001107620012002200010740b2001350208210320013502002104200141106a240020042003422086840f0b1036000b810302037f027e230041206b22012400200141003602102001420137030820012000290300370318200141086a200141186a4108107420012000290308370318200141086a200141186a4108107420012000290310370318200141086a200141186a4108107420002802302102200041386a2802002203200141086a10760240200341286c2203450d00200220036a21030340200141086a2002412010742001200241206a290300370318200141086a200141186a41081074200241286a22022003470d000b0b200141086a2000413c6a4120107420012000290318370318200141086a200141186a410810742001200041206a290300370318200141086a200141186a410810740240024002400240200041286a2d00000e03000102030b200141003a0018200141086a200141186a410110740c020b200141013a0018200141086a200141186a410110740c010b200141023a0018200141086a200141186a410110740b2001350210210420013502082105200141206a240020052004422086840bce0202057f017e230041b0016b22022400200241003a006820012802002103200128020421044100210502400340200241003a0028200241286a20032004410047220610e9081a024020040d00200241003a00280b20042006490d01200241c8006a20056a20022d00283a00002001200420066b22043602042001200320066a22033602002002200541016a22063a00682006210520064120470d000b200241286a41186a200241c8006a41186a2903002207370300200241086a41086a2204200241c8006a41086a290300370300200241086a41106a2206200241c8006a41106a290300370300200241086a41186a2203200737030020022002290348370308200041196a2003290300370000200041116a2006290300370000200041096a200429030037000020002002290308370001200041003a0000200241b0016a24000f0b2006200441cce9cc001056000bbb010002400240024002402002450d0020014100480d01024002400240200328020022020d0020010d01410121020c020b0240200328020422030d0020010d01410121020c020b200220032001103022020d010c040b2001102c2202450d030b20002002360204410021020c030b2000200136020420004101360200200041086a41003602000f0b20004101360200200041086a41003602000f0b2000200136020441012101410121020b20002002360200200041086a20013602000b8c0202017f067e23004190016b220124002000290300210220004200370300024020024201520d00200041286a2903002102200041186a29030021032000290310210420002903082105200041206a2903002106200141c8006a200041306a2903002207370300200141106a41306a2002370300200141296a2003370000200141216a2004370000200141196a2005370000200141316a2006370000200141186a41013a0000200141033a0010200141106a10fe012001200737031820012002370310024020022007844200520d002001200141106a36020c2001410c6a10cc020c010b20012007370318200120023703102001200141106a36020c2001410c6a10cc020b20014190016a24000b130020004104360204200041b884c5003602000b130020004103360204200041ec86c5003602000ba56d031a7f2d7e037f230022032104200341a0056b41607122032400024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e0700010203040506000b200341ac016a41013602002003420137029c012003419cc3cb0036029801200341043602a40420034194c3cb003602a0042003200341a0046a3602a80120034198016a41ecb0c4001044000b200141146a2802002105200141046a280200210620012d0001210741022108200341206a41026a200241246a2d00003a00002003200241226a2f01003b0120200141106a28020021092001410c6a280200210a200141086a280200210b200241206a2f0100210c2002411c6a280200210d200241186a280200210e200241146a280200210f200241106a28020021102002410c6a2802002111200241086a2802002112200241066a2f00002113200241056a2d00002114200241046a2d00002115200241026a2f010021162002280228210120022d0001211702400240024002400240024020022d000022180e03000102000b20174521194101211a201521080c040b410221080240024020150e03000104000b410021080c030b20034180016a41026a200341206a41026a2d00003a0000200320032f01203b0180010c010b0240024020150e03000103000b410021080c020b20034180016a41026a200341206a41026a2d00003a0000200320032f01203b0180010b410121080b4100211a0b2001280200221b41016a221c41014d0d052001201c36020020012102024002400240201a450d002001201b36020020194101710d014110102c221c450d09201c41f8f7c60036020c201c4101360208201c4281808080103702004110102c2202450d0920024190f8c60036020c200241013602082002428180808010370200201c201c280200417f6a2208360200024020080d00201c280208201c28020c2802001103000240201c28020c280204450d00201c280208102e0b201c41046a22082008280200417f6a220836020020080d00201c102e0b2002280200211c0b2002201c417f6a221c3602000240201c0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a221c201c280200417f6a221c360200201c0d002002102e0b2005108b022005102e20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b410221020c010b41022102200341386a41026a200341206a41026a2d00003a0000200320032f01203b0138024002400240024020180e03000102000b4102210202400240024020170e03000102000b410021020c010b41012102201521080b200341c0046a200c3b0100200341bc046a200d360200200341b8046a200e360200200341b4046a200f360200200341b0046a2010360200200341ac046a2011360200200341a8046a2012360200200320133b01a604200320143a00a504200320083a00a404200320163b01a204200320023a00a104200341003a00a0040c020b4102210202400240024020150e03000102000b410021020c010b20034180016a41026a200341386a41026a2d00003a0000200320032f01383b018001410121020b200341c0046a200c3b0100200341bc046a200d360200200341b8046a200e360200200341b4046a200f360200200341b0046a2010360200200341ac046a2011360200200341a8046a2012360200200341c2046a200328018001360100200341c6046a20034184016a2f01003b0100200320133b01a604200320143a00a504200320023a00a404200341013a00a0040c010b02400240024020150e03000102000b410021020c010b20034180016a41026a200341386a41026a2d00003a0000200320032f01383b018001410121020b200341c0046a200c3b0100200341bc046a200d360200200341b8046a200e360200200341b4046a200f360200200341b0046a2010360200200341ac046a2011360200200341a8046a2012360200200341c2046a200328018001360100200341c6046a20034184016a2f01003b0100200320133b01a604200320143a00a504200320023a00a404200341023a00a0040b20034198016a200541b00210e9081a20034180016a41002006200b200a20092007200341a0046a20034198016a10d604200341f0006a41026a221c20032d0087013a0000200320032f0085013b017002402003280280014101460d0020012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b2005102e0c120b20034188016a290300211d20032d0084012102200341086a41026a201c2d00003a0000200320032f01703b010820012001280200417f6a221c3602000240201c0d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a221c201c280200417f6a221c360200201c0d002001102e0b2005102e200241ff01714106460d110b20034198046a41026a200341086a41026a2d000022013a0000200320032f010822053b019804200041206a20023a0000200041186a41003a000020004200370308200020053b0021200041236a20013a00002000201d37002420004201370300200424000f0b200141086a280200211b200141046a280200210c4102211c200341106a41026a200241246a2d00003a00002003200241226a2f01003b0110200241206a2f0100210e2002411c6a280200210f200241186a2802002110200241146a2802002111200241106a28020021122002410c6a2802002113200241086a2802002114200241066a2f00002106200241056a2d00002107200241046a2d00002108200241026a2f010021092002280228210520022d0001211702400240024002400240024020022d0000220d0e03000102000b201745211a410121152008211c0c040b4102211c0240024020080e03000104000b4100211c0c030b20034180016a41026a200341106a41026a2d00003a0000200320032f01103b0180010c010b0240024020080e03000103000b4100211c0c020b20034180016a41026a200341106a41026a2d00003a0000200320032f01103b0180010b4101211c0b410021150b2005280200221941016a220141014d0d042005200136020020052102024002402015450d0020052019360200201a4101710d014110102c2203450d07200341f8f7c60036020c2003410136020820034281808080103702004110102c2202450d0720024190f8c60036020c20024101360208200242818080801037020020032003280200417f6a2201360200024020010d002003280208200328020c2802001103000240200328020c280204450d002003280208102e0b200341046a22012001280200417f6a220136020020010d002003102e0b200228020021010b20022001417f6a2203360200024020030d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22032003280200417f6a220336020020030d002002102e0b20052005280200417f6a22033602004102210820030d0e2005280208200528020c2802001103000240200528020c280204450d002005280208102e0b200541046a22032003280200417f6a220336020020030d0e2005102e0c0f0b41022102200341146a41026a200341106a41026a2d00003a0000200320032f01103b011402400240024002400240200d0e03000102000b4100210a4102210d0240024020170e03000105000b4100210d4100210a0c040b4101210d2008211c0c030b4102211c02400240024020080e03000102000b4100211c0c010b20034180016a41026a200341146a41026a2d00003a0000200320032f01143b0180014101211c0b200341186a41046a20034180016a41046a2f01003b010020032003280180013602184101210a0c010b02400240024020080e03000102000b410021020c010b20034180016a41026a200341146a41026a2d00003a0000200320032f01143b018001410121020b200341186a41046a20034180016a41046a2f01003b010020032003280180013602184102210a2002211c0b0b200341e8006a41046a2201200341186a41046a2f01003b010020032003280218360268200341f0006a200c10a70420034198016a2003280270221a2003280278221910c504200329029c01211d2003280298012102200341dc036a4102360200200341003602980120034198046a41046a220820012f01003b010020032003280268360298042002410820021b21150240024002400240201b201d420020021b221d422088a72201490d0020034180016a41086a20034188046a29030037030020034180016a41106a20034190046a290300370300200320034180046a29030037038001200341f8036a290300211e200341f0036a290300211f200341e8036a2903002120200341e0036a2903002121200341d8036a2903002122200341d0036a2903002123200341c8036a2903002124200341c0036a2903002125200341b8036a2903002126200341b0036a2903002127200341a8036a2903002128200341a0036a290300212920034198036a290300212a20034190036a290300212b20034188036a290300212c20034180036a290300212d200341f8026a290300212e200341f0026a290300212f200341e8026a2903002130200341e0026a2903002131200341d8026a2903002132200341d0026a2903002133200341c8026a2903002134200341c0026a2903002135200341b8026a2903002136200341b0026a2903002137200341a8026a2903002138200341a0026a290300213920034198026a290300213a20034190026a290300213b20034188026a290300213c20034180026a290300213d200341f8016a290300213e200341f0016a290300213f200341e8016a2903002140200341e0016a2903002141200341d8016a2903002142200341d0016a2903002143200341c8016a2903002144200341c0016a2903002145200341b8016a2903002146200341b0016a290300214720034198016a41106a290300214820032903a0012149200328029c0121080c010b200341c2046a200328029804360100200341c0046a200e3b0100200341bc046a200f360200200341a0046a41186a2010360200200341b4046a2011360200200341a0046a41106a2012360200200341ac046a2013360200200341a0046a41086a2014360200200341c6046a20082f01003b0100200320063b01a604200320073a00a5042003201c3a00a404200320093b01a2042003200d3a00a1042003200a3a00a00420032015201b41f8026c6a22023602c804024020022802bc024102460d00200341a0046a200241c8026a10c6040d020b41022108200341023602bc0420022903a0022125200241186a290300214620022903102147200229030821482002290300214920032903b004211e20032903a804212320032903b804211f200220032903a0043703a002200241b8026a221c2903002122201c201f370300200241a8026a221c2903002124201c2023370300200241b0026a221c2903002123201c201e370300200229038002212920022903e001212d20022903c001213120022903a001213520022903800121392002290360213d200229034021412002290320214520022903c002212120024198026a290300212620024190026a290300212720024188026a2903002128200241f8016a290300212a200241f0016a290300212b200241e8016a290300212c200241d8016a290300212e200241d0016a290300212f200241c8016a2903002130200241b8016a2903002132200241b0016a2903002133200241a8016a290300213420024198016a290300213620024190016a290300213720024188016a2903002138200241f8006a290300213a200241f0006a290300213b200241e8006a290300213c200241d8006a290300213e200241d0006a290300213f200241c8006a2903002140200241386a2903002142200241306a2903002143200241286a2903002144200241d8026a290300211e200241d0026a290300211f200241c8026a290300212020034188016a200241e8026a29030037030020034180016a41106a200241f0026a2903003703002003200241e0026a290300370380012003280298010d0020032802dc034102460d0020034198016a41086a21020240200341d0036a280200221c450d00200341d4036a280200450d00201c102e0b2002108b020b20032015360298012003201d37029c01201a201920034198016a10c704201da7211902402001450d00200141f8026c21012015210203400240200241bc026a2802004102460d000240200241b0026a280200221c450d00200241b4026a280200450d00201c102e0b20021096010b200241f8026a2102200141887d6a22010d000b0b02402019450d00201941f8026c450d002015102e0b200341d0006a41086a20034180016a41086a290300370300200341d0006a41106a20034180016a41106a2903003703002003200329038001370350410021020c010b200341d0006a41086a20034180016a41086a290300370300200341d0006a41106a20034180016a41106a2903003703002003200329038001370350200141f8026c21012015210203400240200241bc026a2802004102460d000240200241b0026a280200221c450d00200241b4026a280200450d00201c102e0b20021096010b200241f8026a2102200141887d6a22010d000b41012102410221080240201da72201450d00200141f8026c450d002015102e0b0b02402003280274450d00201a102e0b200341386a41086a2201200341d0006a41086a290300370300200341386a41106a221c200341d0006a41106a290300370300200320032903503703380240024020020d00200341206a41106a201c290300370300200341206a41086a2001290300370300200320032903383703200240202242808080807083428080808020854200520d0041082103418be7c400210241012115410321084101211c0c020b200341e0036a2020370300200341d8036a2021370300200341c0036a2024370300200341b8036a2025370300200341a0036a202837030020034198036a202937030020034180036a202c370300200341f8026a202d370300200341e0026a2030370300200341d8026a2031370300200341c0026a2034370300200341b8026a2035370300200341a0026a203837030020034198026a203937030020034180026a203c370300200341f8016a203d370300200341e0016a2040370300200341d8016a2041370300200341c0016a2044370300200341b8016a2045370300200341f8036a2003290320370300200341e8036a201f370300200341c8036a2023370300200341a8036a202737030020034188036a202b370300200341e8026a202f370300200341c8026a2033370300200341a8026a203737030020034188026a203b370300200341e8016a203f370300200341c8016a204337030020034180046a200341206a41086a29030037030020034188046a200341306a290300370300200341f0036a201e370300200341d0036a22022022370300200341b0036a202637030020034190036a202a370300200341f0026a202e370300200341d0026a2032370300200341b0026a203637030020034190026a203a370300200341f0016a203e370300200341d0016a2042370300200341b0016a20463703002003204937039801200320483703a001200320473703a8010240202342ffffffff0f83500d00200341a0046a41086a2002280200360200200320032903c8033703a00420034180016a200341a0046a10c404200328028001220220032802880110ff01200328028401450d002002102e0b200341ac046a201b360200200341a0046a41086a200c360200200341013602a404200341013a00a004200341a0046a10fe0120034198016a108b020c0e0b200841ff01714106460d0d200841187621012008411076211c200841087621152049422088a721032049a721020b20052005280200417f6a221a360200201a0d0e2005280208200528020c2802001103000240200528020c280204450d002005280208102e0b200541046a221a201a280200417f6a221a360200201a0d0e2005102e0c0e0b200141206a2802002105200141106a280200210920012d0001210a41022108200341086a41026a200241246a2d00003a00002003200241226a2f01003b01082001411c6a280200210b200141186a2802002118200141146a28020021162001410c6a280200214a200141086a280200211a200141046a280200211b200241206a2f0100210e2002411c6a280200210f200241186a2802002110200241146a2802002111200241106a28020021122002410c6a2802002113200241086a2802002114200241066a2f00002106200241056a2d00002107200241046a2d00002115200241026a2f0100214b2002280228210120022d0001210d02400240024002400240024020022d0000224c0e03000102000b200d45211741012119201521080c040b410221080240024020150e03000104000b410021080c030b20034180016a41026a200341086a41026a2d00003a0000200320032f01083b0180010c010b0240024020150e03000103000b410021080c020b20034180016a41026a200341086a41026a2d00003a0000200320032f01083b0180010b410121080b410021190b2001280200220c41016a221c41014d0d032001201c360200200121020240024002402019450d002001200c36020020174101710d014110102c221c450d07201c41f8f7c60036020c201c4101360208201c4281808080103702004110102c2202450d0720024190f8c60036020c200241013602082002428180808010370200201c201c280200417f6a2208360200024020080d00201c280208201c28020c2802001103000240201c28020c280204450d00201c280208102e0b201c41046a22082008280200417f6a220836020020080d00201c102e0b2002280200211c0b2002201c417f6a221c3602000240201c0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a221c201c280200417f6a221c360200201c0d002002102e0b2005108b022005102e0240201a450d00201b102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b410221020c010b41022102200341206a41026a200341086a41026a2d00003a0000200320032f01083b01202003204a3602582003201a3602542003201b3602500240024002400240204c0e03000102000b41022102024002400240200d0e03000102000b410021020c010b41012102201521080b200341c0046a200e3b0100200341bc046a200f360200200341b8046a2010360200200341b4046a2011360200200341b0046a2012360200200341ac046a2013360200200341a8046a2014360200200320063b01a604200320073a00a504200320083a00a4042003204b3b01a204200320023a00a104200341003a00a0040c020b4102210202400240024020150e03000102000b410021020c010b20034180016a41026a200341206a41026a2d00003a0000200320032f01203b018001410121020b200341c0046a200e3b0100200341bc046a200f360200200341b8046a2010360200200341b4046a2011360200200341b0046a2012360200200341ac046a2013360200200341a8046a2014360200200341c2046a200328018001360100200341c6046a20034184016a2f01003b0100200320063b01a604200320073a00a504200320023a00a404200341013a00a0040c010b02400240024020150e03000102000b410021020c010b20034180016a41026a200341206a41026a2d00003a0000200320032f01203b018001410121020b200341c0046a200e3b0100200341bc046a200f360200200341b8046a2010360200200341b4046a2011360200200341b0046a2012360200200341ac046a2013360200200341a8046a2014360200200341c2046a200328018001360100200341c6046a20034184016a2f01003b0100200320063b01a604200320073a00a504200320023a00a404200341023a00a0040b20034198016a200541b00210e9081a20034180016a200341d0006a4100200920162018200b200a200341a0046a20034198016a10c904200341f0006a41026a221c20032d0087013a0000200320032f0085013b017002402003280280014101460d0020012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b2005102e0c0c0b20034188016a290300211d20032d008401210220034198046a41026a201c2d00003a0000200320032f01703b01980420012001280200417f6a221c3602000240201c0d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a221c201c280200417f6a221c360200201c0d002001102e0b2005102e200241ff01714106460d0b0b200341e8006a41026a20034198046a41026a2d000022013a0000200320032f01980422053b0168200041206a20023a0000200041186a41003a000020004200370308200020053b0021200041236a20013a00002000201d37002420004201370300200424000f0b4102211c200341206a41026a200241246a2d00003a00002003200241226a2f01003b01202001410c6a2802002107200141086a2802002115200141046a2802002119200241206a2f0100210d2002411c6a280200210e200241186a280200210f200241146a2802002110200241106a28020021112002410c6a2802002112200241086a2802002113200241066a2f00002114200241056a2d00002106200241046a2d00002108200241026a2f0100210a2002280228210120022d0001210c02400240024002400240024020022d000022090e03000102000b200c45211b4101211a2008211c0c040b4102211c0240024020080e03000104000b4100211c0c030b20034180016a41026a200341206a41026a2d00003a0000200320032f01203b0180010c010b0240024020080e03000103000b4100211c0c020b20034180016a41026a200341206a41026a2d00003a0000200320032f01203b0180010b4101211c0b4100211a0b2001280200221741016a220541014d0d02200120053602002001210202400240201a450d0020012017360200201b4101710d014110102c2203450d05200341f8f7c60036020c2003410136020820034281808080103702004110102c2202450d0520024190f8c60036020c20024101360208200242818080801037020020032003280200417f6a2205360200024020050d002003280208200328020c2802001103000240200328020c280204450d002003280208102e0b200341046a22052005280200417f6a220536020020050d002003102e0b200228020021050b20022005417f6a2203360200024020030d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22032003280200417f6a220336020020030d002002102e0b02402015450d002019102e0b20012001280200417f6a22033602004102210220030d082001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22032003280200417f6a220336020020030d082001102e0c090b41022102200341386a41026a200341206a41026a2d00003a0000200320032f01203b0138024002400240024020090e03000102000b41022102024002400240200c0e03000102000b410021020c010b410121022008211c0b200341b8016a200d3b0100200341b4016a200e360200200341b0016a200f360200200341ac016a2010360200200341a8016a2011360200200341a4016a2012360200200341a0016a2013360200200320143b019e01200320063a009d012003201c3a009c012003200a3b019a01200320023a009901200341003a0098010c020b4102210202400240024020080e03000102000b410021020c010b20034180016a41026a200341386a41026a2d00003a0000200320032f01383b018001410121020b200341b8016a200d3b0100200341b4016a200e360200200341b0016a200f360200200341ac016a2010360200200341a8016a2011360200200341a4016a2012360200200341a0016a2013360200200341ba016a200328018001360100200341be016a20034184016a2f01003b0100200320143b019e01200320063a009d01200320023a009c01200341013a0098010c010b02400240024020080e03000102000b410021020c010b20034180016a41026a200341386a41026a2d00003a0000200320032f01383b018001410121020b200341b8016a200d3b0100200341b4016a200e360200200341b0016a200f360200200341ac016a2010360200200341a8016a2011360200200341a4016a2012360200200341a0016a2013360200200341ba016a200328018001360100200341be016a20034184016a2f01003b0100200320143b019e01200320063a009d01200320023a009c01200341023a0098010b200320073602a804200320153602a404200320193602a00420034180016a20034198016a200341a0046a10c30420034188016a280200210520032d008101211a20032d008201211520032d0083012108200328028401211c20032d008001210220012001280200417f6a2219360200024020024106470d00024020190d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b200041186a41003a000020004200370308200020032800503600192000411c6a200341d3006a28000036000020004200370300200424000f0b20190d082001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22032003280200417f6a220336020020030d082001102e0c080b200141146a2802002105200141046a280200210620012d0001210741022108200341206a41026a200241246a2d00003a00002003200241226a2f01003b0120200141106a28020021092001410c6a280200210a200141086a280200210b200241206a2f0100210c2002411c6a280200210d200241186a280200210e200241146a280200210f200241106a28020021102002410c6a2802002111200241086a2802002112200241066a2f00002113200241056a2d00002114200241046a2d00002115200241026a2f010021162002280228210120022d0001211702400240024002400240024020022d000022180e03000102000b20174521194101211a201521080c040b410221080240024020150e03000104000b410021080c030b20034180016a41026a200341206a41026a2d00003a0000200320032f01203b0180010c010b0240024020150e03000103000b410021080c020b20034180016a41026a200341206a41026a2d00003a0000200320032f01203b0180010b410121080b4100211a0b2001280200221b41016a221c41014d0d012001201c36020020012102024002400240201a450d002001201b36020020194101710d014110102c221c450d05201c41f8f7c60036020c201c4101360208201c4281808080103702004110102c2202450d0520024190f8c60036020c200241013602082002428180808010370200201c201c280200417f6a2208360200024020080d00201c280208201c28020c2802001103000240201c28020c280204450d00201c280208102e0b201c41046a22082008280200417f6a220836020020080d00201c102e0b2002280200211c0b2002201c417f6a221c3602000240201c0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a221c201c280200417f6a221c360200201c0d002002102e0b2005108b022005102e20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b410221020c010b41022102200341386a41026a200341206a41026a2d00003a0000200320032f01203b0138024002400240024020180e03000102000b4102210202400240024020170e03000102000b410021020c010b41012102201521080b200341c0046a200c3b0100200341bc046a200d360200200341b8046a200e360200200341b4046a200f360200200341b0046a2010360200200341ac046a2011360200200341a8046a2012360200200320133b01a604200320143a00a504200320083a00a404200320163b01a204200320023a00a104200341003a00a0040c020b4102210202400240024020150e03000102000b410021020c010b20034180016a41026a200341386a41026a2d00003a0000200320032f01383b018001410121020b200341c0046a200c3b0100200341bc046a200d360200200341b8046a200e360200200341b4046a200f360200200341b0046a2010360200200341ac046a2011360200200341a8046a2012360200200341c2046a200328018001360100200341c6046a20034184016a2f01003b0100200320133b01a604200320143a00a504200320023a00a404200341013a00a0040c010b02400240024020150e03000102000b410021020c010b20034180016a41026a200341386a41026a2d00003a0000200320032f01383b018001410121020b200341c0046a200c3b0100200341bc046a200d360200200341b8046a200e360200200341b4046a200f360200200341b0046a2010360200200341ac046a2011360200200341a8046a2012360200200341c2046a200328018001360100200341c6046a20034184016a2f01003b0100200320133b01a604200320143a00a504200320023a00a404200341023a00a0040b20034198016a200541b00210e9081a20034180016a41012006200b200a20092007200341a0046a20034198016a10d604200341f0006a41026a221c20032d0087013a0000200320032f0085013b017002402003280280014101460d0020012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b2005102e0c070b20034188016a290300211d20032d0084012102200341086a41026a201c2d00003a0000200320032f01703b010820012001280200417f6a221c3602000240201c0d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a221c201c280200417f6a221c360200201c0d002001102e0b2005102e200241ff01714106460d060b20034198046a41026a200341086a41026a2d000022013a0000200320032f010822053b019804200041206a20023a0000200041186a41003a000020004200370308200020053b0021200041236a20013a00002000201d37002420004201370300200424000f0b200141206a2802002105200141106a280200210920012d0001210a41022108200341206a41026a200241246a2d00003a00002003200241226a2f01003b01202001411c6a280200210b200141186a2802002118200141146a28020021162001410c6a280200214a200141086a280200211a200141046a280200211b200241206a2f0100210e2002411c6a280200210f200241186a2802002110200241146a2802002111200241106a28020021122002410c6a2802002113200241086a2802002114200241066a2f00002106200241056a2d00002107200241046a2d00002115200241026a2f0100214b2002280228210120022d0001210d02400240024002400240024020022d0000224c0e03000102000b200d45211741012119201521080c040b410221080240024020150e03000104000b410021080c030b20034180016a41026a200341206a41026a2d00003a0000200320032f01203b0180010c010b0240024020150e03000103000b410021080c020b20034180016a41026a200341206a41026a2d00003a0000200320032f01203b0180010b410121080b410021190b2001280200220c41016a221c41014d0d002001201c360200200121020240024002402019450d002001200c36020020174101710d014110102c221c450d04201c41f8f7c60036020c201c4101360208201c4281808080103702004110102c2202450d0420024190f8c60036020c200241013602082002428180808010370200201c201c280200417f6a2208360200024020080d00201c280208201c28020c2802001103000240201c28020c280204450d00201c280208102e0b201c41046a22082008280200417f6a220836020020080d00201c102e0b2002280200211c0b2002201c417f6a221c3602000240201c0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a221c201c280200417f6a221c360200201c0d002002102e0b2005108b022005102e0240201a450d00201b102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b410221020c010b41022102200341386a41026a200341206a41026a2d00003a0000200320032f01203b01382003204a3602582003201a3602542003201b3602500240024002400240204c0e03000102000b41022102024002400240200d0e03000102000b410021020c010b41012102201521080b200341c0046a200e3b0100200341bc046a200f360200200341b8046a2010360200200341b4046a2011360200200341b0046a2012360200200341ac046a2013360200200341a8046a2014360200200320063b01a604200320073a00a504200320083a00a4042003204b3b01a204200320023a00a104200341003a00a0040c020b4102210202400240024020150e03000102000b410021020c010b20034180016a41026a200341386a41026a2d00003a0000200320032f01383b018001410121020b200341c0046a200e3b0100200341bc046a200f360200200341b8046a2010360200200341b4046a2011360200200341b0046a2012360200200341ac046a2013360200200341a8046a2014360200200341c2046a200328018001360100200341c6046a20034184016a2f01003b0100200320063b01a604200320073a00a504200320023a00a404200341013a00a0040c010b02400240024020150e03000102000b410021020c010b20034180016a41026a200341386a41026a2d00003a0000200320032f01383b018001410121020b200341c0046a200e3b0100200341bc046a200f360200200341b8046a2010360200200341b4046a2011360200200341b0046a2012360200200341ac046a2013360200200341a8046a2014360200200341c2046a200328018001360100200341c6046a20034184016a2f01003b0100200320063b01a604200320073a00a504200320023a00a404200341023a00a0040b20034198016a200541b00210e9081a20034180016a200341d0006a4101200920162018200b200a200341a0046a20034198016a10c904200341f0006a41026a221c20032d0087013a0000200320032f0085013b017002402003280280014101460d0020012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b2005102e0c040b20034188016a290300211d20032d0084012102200341086a41026a201c2d00003a0000200320032f01703b010820012001280200417f6a221c3602000240201c0d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a221c201c280200417f6a221c360200201c0d002001102e0b2005102e200241ff01714106460d030b20034198016a41026a200341086a41026a2d000022013a0000200320032f010822053b019801200041206a20023a0000200041186a41003a000020004200370308200020053b0021200041236a20013a00002000201d3700244201211d0c030b00000b1036000b4200211d200042003703082000200328009801360019200041186a41003a00002000411c6a2003419b016a2800003600000b2000201d370300200424000f0b2000420037030820002003280050360019200041186a41003a00002000411c6a200341d3006a28000036000020004200370300200424000f0b0b2000201c360024200020083a0023200020153a00222000201a3a002120004200370308200041286a2005360000200041206a20023a0000200041186a41003a000020004201370300200424000f0b2000420037030820002003280038360019200041186a41003a00002000411c6a2003413b6a28000036000020004200370300200424000f0b20052005280200417f6a2202360200024020020d002005280208200528020c2802001103000240200528020c280204450d002005280208102e0b200541046a22022002280200417f6a220236020020020d002005102e0b200041186a41003a000020004200370308200020032800083600192000411c6a2003410b6a28000036000020004200370300200424000f0b0b20002002360024200020013a00232000201c3a0022200020153a002120004200370308200041286a2003360000200041206a20083a0000200041186a41003a000020004201370300200424000f0b2000420037030820002003280050360019200041186a41003a00002000411c6a200341d3006a28000036000020004200370300200424000b9f0501057f230041b0036b22092400200941386a220a4200370300200941306a220b4200370300200941206a41086a420037030020094200370320200941206a41d9fcc600410610810220094198036a4180f4cb004106108102200a20094198036a41086a290000370300200b200929009803370300200941186a200941206a4120108e024100210c02400240417f417f200928021c410020092802181b220a20026a220b200b200a491b220b41016a220d200d200b491b200220011b2202200a4d0d00024020034101470d002004410047200541014b71210c2005417f6a210a0b200941206a200841b00210e9081a200941e4026a200a36020020094190036a20063a0000200941e8026a2007290200370300200941f0026a200741086a290200370300200941f8026a200741106a29020037030020094180036a200741186a29020037030020094188036a200741206a290200370300200920043602e0022009200c3602dc0241002107200941003602d0022002200941206a10aa04200941206a200210a704200928022821082009280220210a200941ac036a41003a0000200941003602a803200941106a200a2008200941a8036a4105410010ca04024002402009280210450d00200920092802142207410520074105491b36029c032009200941a8036a36029803200941086a20094198036a10ab01200928020c417f6a210820092802084521070c010b0b02402009280224450d00200a102e0b2009412c6a2008410020071b2207360200200941206a41086a200236020020094100360224200941013a0020200941206a10fe01200041086a200736020020002002360204200041003602000c010b20004281808080b0a08001370200200041086a41f4e6c400ad4280808080f002843702002008108b020b200941b0036a24000b880301077f410121020240024002400240024002402001280208220341016a2204200128020422054d0d000c010b200320054f0d012001280200220620036a2d00002107200120043602080240200741037122084103460d0002400240024020080e03000102000b20074102762108410021020c030b0240200341026a220320054d0d000c030b200120033602082004417f460d04200620046a2d0000410874200772220141ffff0371418002490d02200141fcff03714102762108410021020c020b200341046a220320054b0d01200120033602082004417d4f0d04200620046a22012f0000200141026a2d000041107472410874200772220141808004492102200141027621080c010b0240200741034d0d000c010b200341056a220320054b0d00200120033602082004417c4f0d04200620046a28000022084180808080044921020b20002008360204200020023602000f0b200320054188eccc00103c000b417f20034198ebcc001057000b200420034198ebcc001057000b200420034198ebcc001057000bdf0401057f230041106b22022400200241003a0005024002400240024002400240024020012802002203280204220420044100472205490d00200241056a20032802002206200510e9081a2003200420056b3602042003200620056a360200024020040d00410021040c060b024020022d0005220441037122034103460d000240024020030e03080001080b200241003b0106200220043a00064101210420012802002201280204220320034100472205490d04200241066a41017220012802002204200510e90821062001200320056b3602042001200420056a360200024020030d00200620056a41003a00000b20022f0106220441ff014d0d0220044102762103410021040c080b20024100360208200220043a0008200241086a4101722001280200220428020020042802042203410320034103491b220310e9082101200428020422052003490d042004200520036b3602042004200428020020036a360200024020034103732204450d00200120036a4100200410eb081a0b2002280208220341808004492104200341027621030c070b200441034d0d010b410121040c050b2002410036020c2002410c6a2001280200220328020020032802042204410420044104491b220410e9081a200328020422052004490d022003200520046b3602042003200328020020046a360200024020044104460d002002410c6a20046a4100410420046b10eb081a0b200228020c22034180808080044921040c040b0c030b2003200541b8b2c0001056000b2004200541b8b2c0001056000b20044102762103410021040b2000200336020420002004360200200241106a24000bb40404057f017e027f017e0240024020012802042202450d00200128020022032d0000210420012002417f6a22053602042001200341016a360200024002400240200441037122064103460d000240024020060e03030001030b41012106024020050d000c060b20032d0001210520012002417e6a3602042001200341026a3602002005410874200472220141ffff0371418002490d05200141fcff0371410276ad21070c030b410121060240200541034f0d000c050b200341036a2d0000210520032f0001210820012002417c6a3602042001200341046a3602002008200541107472410874200472220141808004490d042001410276ad21070c020b024002400240200441027622090e050002020201020b20054104490d042003350001210720012002417b6a3602042001200341056a36020020074280808080045421060c050b20054108490d03200329000121072001200241776a3602042001200341096a3602002007428080808080808080015421060c040b200441134b0d02200941046a21082002417e6a2102200341026a2103410021044200210741012106034002402002417f470d000c050b2003417f6a310000210a20012002360204200120033602002002417f6a2102200341016a2103200a2004410374413871ad862007842107200441016a22052104200541ff01712008490d000b2007427f412820094103746b413871ad885821060c030b2004410276ad21070b410021060c010b410121060b2000200737030820002006ad3703000be70404047f017e037f017e02400240200128020022022802042203450d00200228020022042d0000210520022003417f6a3602042002200441016a3602000240200541037122024103460d0002400240024020020e03000102000b2005410276ad2106410021020c040b200128020022012802042202450d02200128020022032d0000210420012002417f6a360204410121022001200341016a3602002004410874200572220141ffff0371418002490d03200141fcff0371410276ad2106410021020c030b41012102024020012802002201280204220341034f0d000c030b2001280200220441026a2d0000210720042f000021082001200441036a36020020012003417d6a3602042008200741107472410874200572220141808004490d022001410276ad2106410021020c020b024002400240200541027622090e050002020201020b2001280200220228020422014104490d0220022802002205350000210620022001417c6a3602042002200541046a36020020064280808080045421020c030b2001280200220228020422014108490d012002280200220529000021062002200141786a3602042002200541086a3602002006428080808080808080015421020c020b200541134b0d00200941046a2108410021034200210641012102034002402001280200220528020422040d000c030b20052802002207310000210a20052004417f6a3602042005200741016a360200200a2003410374413871ad862006842106200341016a22052103200541ff01712008490d000b2006427f412820094103746b413871ad885821020c010b410121020b2000200637030820002002ad3703000be10506067f017e027f017e017f017e230041206b220224000240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a360200024002400240200541037122074103460d0002400240024020070e03000102000b2005410276ad21080c040b410121072006450d0220042d0001210620012003417e6a3602042001200441026a3602002006410874200572220141ffff0371418002490d02200141fcff0371410276ad21080c030b4101210720064103490d01200441036a2d0000210620042f0001210920012003417c6a3602042001200441046a3602002009200641107472410874200572220141808004490d012001410276ad21080c020b02400240024002402005410276220a0e0d00030303010303030303030302030b20064104490d052004350001210820012003417b6a3602042001200441056a36020020084280808080045421074200210b0c060b20064108490d04200429000121082001200341776a3602042001200441096a3602002008428080808080808080015421074200210b0c050b20064110490d03200441096a290000210b2004290001210820012003416f6a3602042001200441116a360200200b428080808080808080015421070c040b200541334b0d02200a41046a21092003417e6a2103200441026a21044100210541012107200241186a210c420021084200210b03402003417f460d012004417f6a310000210d2001200336020420012004360200200241106a200d4200200541037441f8007110ed082003417f6a2103200441016a2104200c290300200b84210b20022903102008842108200541016a22062105200641ff01712009490d000b2002427f427f41e800200a4103746b41f8007110e4082008200229030058200b200241086a290300220d58200b200d511b21070c030b0c020b4200210b410021070c010b410121070b20002008370308200041106a200b37030020002007ad370300200241206a24000bd60203017f017e027f230041206b220224000240024002400240024002402000290300220342c000540d00200342808001540d012003428080808004540d024108200379a741037622046b41044f0d0341c087c500413641f887c5001039000b20022003a74102743a00082001200241086a410110740c030b20022003a74102744101723b01082001200241086a410210740c020b20022003a74102744102723602082001200241086a410410740c010b2002411320044102746b3a00082001200241086a41011074200220002903002203370300200441786a21000340200220033c00082001200241086a4101107420034208882103200041016a22042000492105200421002005450d000b20022003370300200350450d010b200241206a24000f0b2002411c6a4100360200200241186a41d4e2cc003602002002420137020c2002418888c5003602082002200241086a10dd04000b6c01017f230041206b220224002002419088c50036020420022000360200200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241c4cec800200241046a41c4cec800200241086a419888c5001058000b6c01017f230041206b22022400200241d889c50036020420022000360200200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241b4cec800200241046a41b4cec800200241086a41e889c5001058000b930501047f230041a0036b22012400200141106a4200370300200141186a4200370300200141206a4200370300200141286a4200370300200120012903c801370308200142c0b2cd3b37039803200142c0b2cd3b37039003200142c0b2cd3b370388034100210241012103034020014188036a2104024002400240200241ff01710e03010002010b20014190036a21040c010b20014198036a21040b200442c0b2cd3b370300024020034103460d00200341e99fc0006a2104200341016a210320042d000022024103470d010b0b20014188026a420037030020014180026a4201370300200141f8016a22034200370300200141f0016a22044201370300200141c8016a41186a4200370300200141c8016a41f8006a4200370300200141c8016a41f0006a4201370300200141c8016a41e8006a4200370300200141c8016a41e0006a420137030020014198026a420037030020014190026a200129039003370300200141d0026a4200370300200141c8026a200129038803370300200142003703d00120014280e497d0123703c80120012001290398033703d801200141f8026a200141286a290300370300200141f0026a200141086a41186a290300370300200141e8026a200141186a290300370300200141e0026a200141106a290300370300200141d8026a20012903083703002004420137030020034280b0def7d32b3703002001410036028003200141086a200141c8016a41c00110e9081a200141086a41f8006a428090cad2c60e370300200141086a41f0006a4201370300200141086a41e8006a4280c0a8ca9a3a370300200141086a41e0006a4201370300200141c8016a200141086a41b80110e9081a2001428180808080d0a5cc00370380032000200141c8016a107f200141a0036a24000b800903097f017e027f23004190036b2202240041002103200241003a00a0022001280204417f6a2104024002400240024003402004417f460d0120024180026a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00a0022004417f6a21042005210320054120470d000b200241d0026a41086a220420024180026a41086a290300370300200241d0026a41106a220320024180026a41106a290300370300200241d0026a41186a220620024180026a41186a29030037030020022002290380023703d002200541ff0171411f4b0d010c020b200341ff0171450d01200241003a00a0020c010b200241e0016a41086a2004290300370300200241e0016a41106a2003290300370300200241e0016a41186a2006290300370300200220022903d0023703e00120024180026a200110850520022802a0022204450d00200241a0016a41186a2203200241e0016a41186a290300370300200241a0016a41106a2205200241e0016a41106a290300370300200241a0016a41086a2206200241e0016a41086a290300370300200241a0016a41286a220720024180026a41086a290300370300200241a0016a41306a220820024180026a41106a290300370300200241a0016a41386a220920024180026a41186a290300370300200220022903e0013703a00120022002290380023703c001200241a4026a280200210a20024180026a41286a290300210b200241e0006a41086a220c2006290300370300200241e0006a41106a22062005290300370300200241e0006a41186a22052003290300370300200241e0006a41206a220320022903c001370300200241e0006a41286a220d2007290300370300200241e0006a41306a22072008290300370300200241e0006a41386a22082009290300370300200220022903a0013703602004450d00200241206a41386a2008290300370300200241206a41306a2007290300370300200241206a41286a200d290300370300200241206a41206a2003290300370300200241206a41186a2005290300370300200241206a41106a2006290300370300200241206a41086a200c29030037030020022002290360370320200241086a200110ab010240024002402002280208450d00200241003602a0010c010b200241a0016a2001200228020c10920120022802a0010d010b20004100360240200a450d02200a41306c450d022004102e0c020b200241106a41086a2201200241a0016a41086a280200360200200220022903a001370310200041386a200241206a41386a290300370300200041306a200241206a41306a290300370300200041286a200241206a41286a290300370300200041206a200241206a41206a290300370300200041186a200241206a41186a290300370300200041106a200241206a41106a290300370300200041086a200241206a41086a29030037030020002002290320370300200041c8006a200b3703002000200a36024420002004360240200041d0006a2002290310370300200041d8006a20012802003602000c010b200041003602400b20024190036a24000bc01509077f017e097f017e017f017e027f017e047f230041c0036b22012400200141286a22024200370300200141206a22034200370300200141106a41086a420037030020014200370310200141106a4190dac800410a10810220014198036a41d5dac8004106108102200220014198036a41086a2900003703002003200129009803370300200141203602342001200141106a360230200141386a200141106a412010ed02024002400240200128023822040d00410021050c010b200128023c21062001200141386a41086a28020036024c20012004360248200141086a200141c8006a10ab010240024020012802080d0002400240200128020c2207200128024c41c4006e2202200220074b1bad42c4007e2208422088a70d002008a72202417f4c0d000240024020020d00410421050c010b2002102c2205450d060b200241c4006ead2108024002402007450d0020014198036a410172210920014198036a410772210a4100210b03400240024002400240200128024c2203450d002001280248220c2d0000210220012003417f6a220d36024c2001200c41016a3602480240024020020e020001020b200d4104490d012001418c026a41026a200141f0026a41026a2d00003a0000200141f0016a41086a200141b0026a41086a290200370300200141f0016a41106a200141b0026a41106a290200370300200141f0016a41186a200141b0026a41186a2d00003a0000200141d0016a41086a20014198036a41086a290100370300200141d0016a41106a20014198036a41106a290100370300200141d0016a41186a20014198036a41186a290100370300200120012f00f0023b018c02200120012902b0023703f00120012001290198033703d001200c280001210e20012003417b6a36024c2001200c41056a36024841002102410021030c040b41002102200141003a00b8032003417e6a210302400340200d2002460d0120014198036a20026a200c20026a220f41016a2d00003a00002001200f41026a3602482001200241016a220f3a00b8032001200336024c2003417f6a2103200f2102200f4120460d030c000b0b200241ff0171450d02200141003a00b8030c020b200141cc016a41026a2001418c026a41026a2d00003a0000200141b0016a41086a200141f0016a41086a290300370300200141b0016a41106a200141f0016a41106a290300370300200141b0016a41186a200141f0016a41186a2d00003a000020014190016a41086a200141d0016a41086a29030037030020014190016a41106a200141d0016a41106a29030037030020014190016a41186a200141d0016a41186a290300370300200120012f018c023b01cc01200120012903f0013703b001200120012903d001370390010c070b20014190036a41026a221020012d009a0322023a000020014194036a41026a20023a0000200141b0026a41086a2211200a41086a2900002212370300200141b0026a41106a2213200a41106a2900002214370300200141b0026a41186a2215200a41186a2d000022023a0000200120012f01980322163b019003200120163b0194032001200a29000022173703b002200128009b032118200141f0026a41186a221620023a0000200141f0026a41106a22022014370300200141f0026a41086a22192012370300200120173703f002200f41ff0171411f4d0d00200141ec026a41026a20102d000022103a0000200141d0026a41086a20192903002212370300200141d0026a41106a20022903002214370300200141d0026a41186a20162d000022023a0000200141ac026a41026a221920103a0000200120012f01900322163b01ec02200120012903f00222173703d002200120163b01ac0220014190026a41186a221620023a000020014190026a41106a2210201437030020014190026a41086a221a20123703002001201737039002200d200f460d00200c200f6a220241016a2d0000210f2001200336024c2001200241026a360248410021024100210c02400240200f0e020100020b20014198036a200141c8006a10930120012d0098034101460d012015200941186a2900003703002013200941106a2900003703002011200941086a290000370300200120092900003703b0024101210c0b200141d0016a41186a2015290300370300200141d0016a41106a2013290300370300200141d0016a41086a20112903003703002001418c026a41026a20192d00003a0000200141f0016a41086a201a290300370300200141f0016a41106a2010290300370300200141f0016a41186a20162d00003a0000200120012903b0023703d001200120012f01ac023b018c0220012001290390023703f00141012103200c211b2018210e0c010b41022103410121020b200141cc016a41026a220f2001418c026a41026a2d00003a0000200141b0016a41086a220c200141f0016a41086a290300370300200141b0016a41106a220d200141f0016a41106a290300370300200141b0016a41186a2216200141f0016a41186a2d00003a000020014190016a41086a2210200141d0016a41086a29030037030020014190016a41106a2219200141d0016a41106a29030037030020014190016a41186a2211200141d0016a41186a290300370300200120012f018c023b01cc01200120012903f0013703b001200120012903d0013703900120020d042001418c016a41026a2213200f2d00003a0000200141f0006a41086a220f200c290300370300200141f0006a41106a220c200d290300370300200141f0006a41186a220d20162d00003a0000200141d0006a41086a22162010290300370300200141d0006a41106a22102019290300370300200141d0006a41186a22192011290300370300200120012f01cc013b018c01200120012903b001370370200120012903900137035002402008422088a722022008a7470d00200241016a22112002490d0420024101742215201120112015491b22114104201141044b1bad42c4007e2212422088a74541027421112012a721150240024020020d0020014100360298030c010b200141043602a00320012005360298032001200241c4006c36029c030b200141b0026a2015201120014198036a107d20012802b802211120012802b0024101460d0320012802b4022105200842808080807083201141c4006ead8421080b2005200241c4006c6a220220033a00002002200e360004200241036a20132d00003a0000200220012f018c013b0001200d2d00002103200c2903002112200f2903002114200129037021172002201b3a002120022017370008200241106a2014370000200241186a2012370000200241206a20033a00002002413a6a2019290300370000200241326a20102903003700002002412a6a20162903003700002002200129035037002220084280808080107c2108200b41016a220b2007470d000b0b2005450d030c040b20110d050b1038000b2008a721022002450d00200241c4006c450d002005102e0b41002105200141003602b802200142013703b0022001410a3602d4012001200141306a3602d0012001200141b0026a36029001200141ac036a41013602002001420137029c03200141909dc500360298032001200141d0016a3602a80320014190016a419cebc00020014198036a103d1a20012802b00220012802b80210ef0220012802b402450d0020012802b002102e0b2006450d002004102e0b0240024020050d0020004100360208200042043702000c010b20002008370204200020053602000b200141c0036a24000f0b1036000bdc0b04067f017e037f017e230041d0016b22012400200141386a41186a22024200370300200141386a41106a22034200370300200141386a41086a2204420037030020014200370338200141286a4190dac800410a1081022004200141286a41086a220529000037030020012001290028370338200141286a419adac80041061081022002200529000037030020032001290028370300200141d8006a200141386a412010f40220012d005821052002200141f1006a2900003703002003200141e9006a2900003703002004200141e1006a290000370300200120012900593703380240024020054101470d0020002001290338370000200041186a2002290300370000200041106a2003290300370000200041086a20042903003700000c010b200141d8006a41186a22024200370300200141d8006a41106a22064200370300200141d8006a41086a2203420037030020014200370358200141386a41d9fcc60041061081022003200429000037030020012001290038370358200141386a41b4f4cb0041061081022002200429000037030020062001290038370300200141386a200141d8006a10a10420012802382204410420041b210302400240200129023c420020041b2207422088a7220541246c2204450d00200320046a2202415c6a2108200321040340024020042d00004101460d002002200441246a2204470d010c020b200441016a2800002109200441086a280200210a2001200441106a28020036023c2001200a36023802400240200941c28289aa04470d00200141d8006a200141386a10930220012903584203510d03200141d8006a41106a22042802002102200141d8006a41186a420037030020044200370300200141d8006a41086a2204420037030020014200370358200141386a41a081ca0041071081022004200141386a41086a220929000037030020012001290038370358200141386a41f09dc500410a108102200641086a200929000037000020062001290038370000200141386a200141d8006a1088034101210620012802382204410120041b210902402002200129023c420020041b220b422088a74f0d00200141086a41186a200920024105746a220441186a290000370300200141086a41106a200441106a290000370300200141086a41086a200441086a29000037030020012004290000370308410021060b0240200b42ffffff3f83500d002009102e0b20060d03200141d8006a41186a200141086a41186a290300370300200141d8006a41106a200141086a41106a290300370300200141d8006a41086a200141086a41086a29030037030020012001290308370358200141386a41186a22044200370300200141386a41106a22024200370300200141386a41086a2206420037030020014200370338200141286a4190dac800410a1081022006200141286a41086a220929000037030020012001290028370338200141286a419adac800410610810220042009290000370300200220012900283703004120102c2204450d012001422037022c20012004360228200141286a200141d8006a41201074200141386a412020012802282204200128023010b2010240200128022c450d002004102e0b20002001290358370000200041186a200141d8006a41186a290300370000200041106a200141d8006a41106a290300370000200041086a200141d8006a41086a2903003700000c040b20082004462109200441246a21042009450d010c020b0b1036000b20004200370000200041186a4200370000200041106a4200370000200041086a42003700000b02402005450d00200541246c21022003210403400240024002400240024020042d00000e050400010204030b2004410c6a280200450d03200441086a280200102e0c030b2004410c6a280200450d02200441086a280200102e0c020b2004410c6a280200450d01200441086a280200102e0c010b200441086a280200450d00200441046a280200102e0b200441246a21042002415c6a22020d000b0b2007a72204450d00200441246c450d002003102e0b200141d0016a24000ba70702117f047e23004190016b22012400200110940302400240024020012903004202510d00200028020821022000280204210320002802002104200141186a200141106a28020010a105200141d8006a2001280218200128022010a205200141386a41086a2200200141e4006a2902003703002001200129025c3703380240024020012802584101460d00200141286a41086a4200370300200141003602280c010b200141286a41086a2000290300370300200120012903383703280b02402002450d002004200241246c6a2105200141d8006a41106a2106200141286a410472210720042108034020082802202109200141d8006a41186a220a200841186a2900003703002006200841106a290000370300200141d8006a41086a220b200841086a29000037030020012008290000370358024002402001280230220c450d00200128022c210d0c010b419403102c220c450d054100210d200c4100360200200c41003b01322001200c3602302001410036022c0b200841246a2108024002400340200c2f0132220e410574210f41002100417c2110417f2102024003400240200f2000470d00200e21020c020b200141d8006a200c20006a41346a412010ec082211450d03200241016a21022010417c6a2110200041206a21002011417f4a0d000b0b0240200d450d00200d417f6a210d200c20024102746a4194036a280200210c0c010b0b200141386a41186a200a2903002212370300200141386a41106a20062903002213370300200141386a41086a200b290300221437030020012001290358221537033820062015370200200641086a2014370200200641106a2013370200200641186a201237020020012007360264200120023602602001200c36025c20014100360258200141d8006a410010a30521000c010b200c20106b21000b2000200028020020096a3602002001200128022820096a36022820082005470d000b0b02402003450d00200341246c450d002004102e0b200141e4006a200141286a41086a29030037020020012001290328221237025c2001410136025820012802182100200128022021022001410036024020014201370338200120123e028c01200141386a2001418c016a41041074200141d8006a41086a2210200141386a10f2012000200220012802382211200128024010b2010240200128023c450d002011102e0b201010bc02200128021c450d012000102e0c010b200041046a2802002202450d00200241246c450d002000280200102e0b20014190016a24000f0b1036000be70501067f230041a0016b22012400200141d8006a41186a22024200370300200141d8006a41106a22034200370300200141d8006a41086a2204420037030020014200370358200141d8006a41a081ca00410710810220014190016a41e4d1c100410c108102200220014190016a41086a2900003703002003200129009001370300200141106a200141d8006a4120108e0220012802142105200128021021062002200041186a2900003703002003200041106a2900003703002004200041086a29000037030020012000290000370358200141186a41bed8c8004108108102200141286a41edd8c800410e10810220012005410020061b3602482001200141c8006a410410a30137037820014190016a410c6a2202200141c8006a41046a3602002001200141f8006a41086a360294012001200141c8006a360298012001200141f8006a36029001200141386a20014190016a107c024002404120102c2200450d002001422037027c20012000360278200141f8006a200141d8006a41201074200120012802782200200128028001220310a301370388012002200020036a3602002001200036029801200120014188016a41086a36029401200120014188016a36029001200141c8006a20014190016a107c0240200128027c450d002000102e0b20012802402202200128025022036a41206a2200417f4c0d010240024020000d00410121040c010b2000102c2204450d010b20014100360298012001200036029401200120043602900120014190016a200141186a4110107420014190016a200141286a4110107420014190016a200128023822002002107420014190016a20012802482202200310740240200128024c450d002002102e0b0240200128023c450d002000102e0b200141086a20012802900122002001280298012202108e022001200128020c41016a410120012802081b36025820002002200141d8006a410410b2010240200128029401450d002000102e0b200141a0016a24000f0b1036000b1038000b7801027f230041106b2204240002404108102c2205450d0020044208370204200420053602002004200236020c20042004410c6a410410742004200336020c20042004410c6a410410742000200120042802002202200428020810b20102402004280204450d002002102e0b200441106a24000f0b1036000be50101047f230041206b2202240002400240200128020822034105744104722204417f4c0d00200128020021012004102c2205450d0120024100360208200220043602042002200536020020032002107602402003450d002003410574210303404120102c2204450d032002422037021420022004360210200241106a2001412010742002200228021022042002280218107402402002280214450d002004102e0b200141206a2101200341606a22030d000b0b2000412020022802002201200228020810b20102402002280204450d002001102e0b200241206a24000f0b1038000b1036000bb80404017f017e017f047e230041c0036b2207240042002108024020050d00200741186a2001ad420042c0843d420010e80820074188026a10a903200741c0006a2007290390022208200220082002541b10e804200741c0006a41086a290300210820072903402102200741a0026a2201420037030020074188026a41106a2205420037030020074188026a41086a22094200370300200742003703880220074188026a4180fdc6004112108102200741d0006a41dc98c50041111081022001200741d0006a41086a29000037030020052007290050370300200741286a20074188026a10e90420074188026a200729033042808090bbbad6adf00d200728022822011b200741286a41106a290300420020011b2002200842808090bbbad6adf00d420010ea04200741186a41086a29030021022007290318210a024002402007280288024101470d00427f210b427f210c0c010b2005290300210c2009290300210b0b200741d0006a10a9030240024002400240200641ff01710e03010200010b200741d0016a21050c020b200741e0006a21050c010b20074198016a21050b2005290300210820074188026a10a903200741086a200729039002220d2008200d2008541b10e804200741106a29030021082007290308210d200041306a200c370300200041286a200b370300200041206a2002370300200041186a200a370300200041106a20083703002000200d370308420121080b2000200337033820002008370300200041c0006a2004370300200741c0036a24000bdd0706017f017e047f037e037f067e230041c0026b22022400420021034280c2d72f42004280f985d40442001082052104200241e0016a22054200370300200241d0016a41086a4200370300200241ec016a22064180023b0100200241e8016a22072004360200200242003703d00141012104200241013602b802024002404100450d0042012108420021090c010b0240024002404101450d004200210a0c010b200241c8016a210b4101210c420021080340200241b0016a200842002001420010e808200241c0016a200142002001420010e808200820022903b801220184200184420052200b290300220120022903b001220a200a7c7c220a200154720d0220022903c0012101200c410271210d200c4101762204210c200a2108200d450d000b0b0240200441024f0d0020012108200a21090c020b200241a0016a41086a210d20012108200a2109034020024190016a200a42002001420010e808200241a0016a200142002001420010e808200a200229039801220184200184420052200d2903002201200229039001220a200a7c7c220a200154720d0120022903a001210102402004410271450d00200241e0006a200942002001420010e808200241f0006a200a42002008420010e80820024180016a200842002001420010e8082009420052200a4200527120022903684200527220022903784200527220024180016a41086a2903002208200229036020022903707c7c2209200854720d0220022903800121080b200441034b210c20044101762104200a210a200c0d000c020b0b427f2108427f21090b200241d0006a20082009428094ebdc03420010e608200241306a2005290300220a42002008420010e808200241206a2009420020022903d8012201420010e808200241c0006a200142002008420010e8080240024020062d0000450d00420021010c010b2002290338210e2002290328210f2002290320211020022903302111200241c0006a41086a2903002101200728020021042002290350210320022903402112200241106a20082009428094ebdc03420010e70820022002290310200241106a41086a2903002004ad2208420010e808427f200241086a29030020022903002213200320087e2208428094ebdc0380a7417f2008428080808080c0b2cd3b541b2008428094ebdc03824280cab5ee01566aad7c2208201354ad7c2203427f2001201120107c7c2210200a420052200942005271200e42005272200f4200527220102001547222041b7c2008427f201220041b7c220a2008542204ad7c22012004200120035420012003511b22041b2101427f200a20041b21030b2000200337030020002001370308200241c0026a24000ba10204017f017e017f027e230041d0006b220224002002412036020420022001360200200241086a2001412010ed0202400240200228020822010d00420021030c010b200228020c210402400240200241086a41086a2802004110490d00200141086a290000210520012900002106420121030c010b20024100360220200242013703182002410a36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241909dc5003602382002200241286a360248200241346a419cebc000200241386a103d1a2002280218200228022010ef020240200228021c450d002002280218102e0b420021030b2004450d002001102e0b2000200637030820002003370300200041106a2005370300200241d0006a24000bcd3607017f017e017f027e017f017e1b7f230041e0026b220724000240024002402001200284500d0020032004844200520d010b20004100360200200041106a4200370300200041086a42003703000c010b42012108200741f0006a200320012003200156200420025620042002511b22091b220a2004200220091b220b20054201200542015620064200522006501b220c1b220d20064200200c1b220510e6082002200420091b21022001200320091b21040240024002402007290370200741f0006a41086a29030084500d00200741e0006a20042002200d200510e6082007290360200741e0006a41086a29030084500d01200d21080c020b200741c0006a200a200b200d200510e708200741c0006a41086a290300210b420021052007290340210a0c010b200741d0006a20042002200d200510e708200741d8006a29030021024200210542012108200729035021040b200741106a200b42002004420010e808200741206a20024200200a420010e808200741306a200a42002004420010e8080240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200b420052200242005271200729031842005272200729032842005272200741306a41086a2903002201200729031020072903207c7c2203200154724101470d004110102c2209450d192009200a3e020c2009200a4220883e02082009200b3e02042009200b4220883e020020074284808080c00037028401200720093602800120074180016a10bb074110102c2209450d19200920043e020c200920044220883e0208200920023e0204200920024220883e020020074284808080c00037029401200720093602900120074190016a10bb074110102c2209450d1920092008a7220e36020c200920084220883e0208200920053e0204200920054220883e020020074284808080c0003702a401200720093602a001200741a0016a10bb07200741f0016a41086a20074190016a41086a28020036020020072007290390013703f00120074180026a41086a20074180016a41086a280200360200200720072903800137038002200741b0016a20074180026a200741f0016a10bc07024020072802f40141ffffffff0371450d0020072802f001102e0b200741b0016a10bb0720072802b801210920072802b401210f20072802b001211020072802a80122110e020501020b2007200729033020032008200510e70820004100360200200041106a200741086a290300370300200041086a20072903003703000c1b0b20094101200941014b1b221141ffffffff03712011470d162011410274220c417f4c0d1602400240200c0d00410421120c010b200c10322212450d180b200720113602d802200720123602d0022007200c4102763602d4022009450d182012201141027420094102746b6a210c410020096b2109200e4101200e41014b1bad2102420021042010210e03402011201120096a22124d0d02200c2004422086200e3502008422042002803e02002009417f460d19200e41046a210e200c41046a210c200941016a2109200420028221040c000b0b20072802a00122132802000d010c020b2012201141ecd8cc00103c000b2009450d032010280200450d00200920114d0d00200720113602bc01200920116b221441016a22154101201541014b1b221641ffffffff03712016470d1320164102742217417f4c0d1320170d01410421180c020b410021180240200f41ffffffff03710d000c070b2010102e0c060b201710322218450d120b20114101201141014b1b221941ffffffff03712019470d102019410274221a417f4c0d10201a1032221b450d11410121124102210c024002400240201328020067221c0e020201000b4102210c201c210e410121120340200c4101200e4101711b20126c2112200e41034b211d200c200c6c210c200e410176210e201d0d000b0b200c20126c21120b200720093602f8012007200f3602f401200720103602f0014104102c2209450d11200920123602002007428180808010370284022007200936028002200741c0016a200741f0016a20074180026a10bc072009102e201141ffffffff03712011470d1020114102742209417f4c0d104104210c02402009450d002009102c220c450d120b2007200c3602f001200720094102763602f401200c2013201141027410e9081a200720113602f8014104102c2209450d11200920123602002007428180808010370284022007200936028002200741d0016a200741f0016a20074180026a10bc072009102e201520072802bc016a220920072802c801220c4d0d032009200c6b220941ffffffff03712009470d1020094102742211417f4c0d100240024020110d004104210c0c010b2011102c220c450d120b02402011410276220e20094f0d002011410176220e2009200e20094b1b220e4104200e41044b1b220e41ffffffff0371200e464102742112200e410274210e0240024020110d0020074100360280020c010b20074188026a410436020020072011360284022007200c360280020b200741f0016a200e201220074180026a107d200741f8016a280200210e024020072802f0014101460d0020072802f401210c200e410276210e0c030b200e450d110c120b20090d01410021090c020b4100410041fcd8cc00103c000b200c4100200941027410eb081a0b20072802c001211002400240200e20096b20072802c8012211490d00200920116a21120c010b200920116a22122009490d0e200e410174220f2012200f20124b1b220f4104200f41044b1b220f41ffffffff0371200f46410274211d200f410274210f02400240200e0d0020074100360280020c010b20074188026a41043602002007200c360280022007200e410274360284020b200741f0016a200f201d20074180026a107d200741f8016a280200210e024020072802f0014101460d0020072802f401210c200e410276210e0c010b200e0d0f0c0e0b200c20094102746a2010201141027410e9081a024020072802c40141ffffffff0371450d0020072802c001102e0b200720123602c8012007200e3602c4012007200c3602c0010b2017410276211e201a410276211f200741d0016a10bb0703402007201422203602dc01024020072802c801220920072802bc01220c20206a220e417f736a22112009490d002011200941ccd7cc00103c000b024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020092009200e6b220e4d0d0020072802d80122092009200c6b220c4d0d0120072802d001200c4102746a35020022024200510d02202020204100476b211420072802c001220920114102746a35020021042009200e4102746a3502002101200741003602e0012007200120044220868422042002803703e801200720042002823703f801200741003602f0012007200741dc016a360294022007200741c0016a360290022007200741bc016a36028c022007200741d0016a360288022007200741f0016a360284022007200741e0016a3602800220074180026a10d7081a034020072802f001220941016a41004c0d04200720093602f001024020072903f80142ffffffff0f560d0020074180026a10d7080d010b0b20072903e80121024100210c02400240024020072802bc01221220072802dc01220e6a22092012490d00201241016a220c20124f0d00410421102007410436029802410021130c010b200c41ffffffff0371200c470d2b200c4102742211417f4c0d2b0240024020110d00410421100c010b2011102c2210450d2d0b2007201036029802201141027621134100210c2009200e490d0b201241016a220c20124f0d010b41002111410021124100210c034020072802c801220f2009417f736a221d200f4f0d06200e20094f210f2009200e2009496b210920072802c001201d4102746a280200211d02400240200c2013470d00200c417f41004100417f2009200e6b221341016a221720172013491b200f1b2009200e491b221341016a221720172013491b6a2213200c490d2d20122013201220134b1b22134104201341044b1b221341ffffffff037120134641027421172013410274211302400240200c0d00200741003602d0020c010b200741043602d802200720113602d402200720103602d0020b200741c0026a20132017200741d0026a107d20072802c802211320072802c0024101460d01200720072802c402221036029802201341027621130b201020116a201d360200201141046a2111201241026a2112200c41016a210c2009200e49200f72450d010c0c0b0b20130d2b0c2a0b02402013200c4f0d002011410176220f200c200f200c4b1b220c4104200c41044b1b220c41ffffffff0371200c46410274210f200c410274210c0240024020110d00200741003602d0020c010b200741043602d802200720113602d402200720103602d0020b200741c0026a200c200f200741d0026a107d20072802c802210c20072802c0024101460d07200720072802c402221036029802200c41027621130b200e20094f0d072009417f73210c0340200c20072802c801220f6a2211200c4f0d06201020072802c00120114102746a280200360200200c41016a210c201041046a2110200e2009417f6a2209490d000b2012210c0c080b200e200941ccd7cc00103c000b200c200941ccd7cc00103c000b4190d9cc00411941acd9cc001039000b41bcd9cc004118200741d0026a41d4d9cc0041e4d9cc00103e000b201d200f41ccd7cc00103c000b2011200f41ccd7cc00103c000b200c0d230c220b4100210c20120d010b20072802c8012209200e417f736a220e20094f0d01201020072802c001200e4102746a280200360200200c41016a210c0b20072802d801220e41ffffffff0371200e470d1f200e4102742209417f4c0d1f20072802d00121120240024020090d00410421110c010b2009102c2211450d210b200720113602c002200720094102763602c40220112012200910e9081a2007200e3602c8024108102c2209450d2020092002a72221360204200920024220883e020020074282808080203702d402200720093602d002200741a0026a200741c0026a200741d0026a10bc072009102e200c20072802a8022222200c20224b1b220f4101200f41014b1b221041ffffffff03712010470d1f20104102742223417f4c0d1f20072802980221240240024020230d00410421250c010b202310322225450d210b02400240200f0d004100211d0c010b2010417f6a210e2022417f6a222620224b2117200c417f6a2227200c4b2115202520236a417c6a2111410021124200210420072802a0022128034041002109024020150d0041002109200c202720126b221d4d0d0041002109201d20274b0d002024201d4102746a28020021090b2009ad210241002109024020170d002022202620126b221d4d0d00201d20264b0d002028201d4102746a28020021090b0240024020022009ad22067d22032002560d00200320047d22012003560d00420021044100211d0c010b20024280808080108420047d20067d2101420121044101211d0b2010200e4d0d03201120013e02002011417c6a2111200e417f6a210e200f201241016a2212470d000b0b0240201341ffffffff0371450d002024102e0b20072802bc01220e20072802dc01220c6a2213200e490d06200c20134f0d04200c417f732109034020102010200c6a20096a22114d0d03200920072802c80122126a220c20094f0d0420072802c001200c4102746a202520114102746a2802003602002009417f6a210920072802dc01210c200e417f6a220e0d000c060b0b200e200941ccd7cc00103c000b200e201041ecd8cc00103c000b200f4101200f41014b1b200c6a20096a201041ccd7cc00103c000b200c201241ecd8cc00103c000b200e0d010b200c2013417f7322096a220c20106a220e200c4f0d0120072802c801220c20096a2209200c4f0d0220072802c00120094102746a2025200e4102746a28020036020020072802dc01210c0b2016200c417f736a220920164f0d02201820094102746a2021360200201d450d0a201620072802dc01417f736a220920164f0d03201820094102746a22092009280200417f6a3602004100210c02400240024020072802bc01221220072802dc01220e6a22092012490d00201241016a220c20124f0d0041042110200741043602bc02410021130c010b200c41ffffffff0371200c470d1a200c410274220c417f4c0d1a02400240200c0d00410421100c010b200c102c2210450d1c0b200720103602bc02200c410276211302402009200e4f0d004100210c0c0c0b201241016a221120124f0d010b41002111410021124100210c034020072802c801220f2009417f736a221d200f4f0d06200e20094f210f2009200e2009496b210920072802c001201d4102746a280200211d02400240200c2013470d00200c417f41004100417f2009200e6b221341016a221720172013491b200f1b2009200e491b221341016a221720172013491b6a2213200c490d1c20122013201220134b1b22134104201341044b1b221341ffffffff037120134641027421172013410274211302400240200c0d00200741003602d0020c010b200741043602d802200720113602d402200720103602d0020b200741c0026a20132017200741d0026a107d20072802c802211320072802c0024101460d01200720072802c40222103602bc02201341027621130b201020116a201d360200201141046a2111201241026a2112200c41016a210c2009200e49200f72450d010c0c0b0b20130d1a0c190b0240201320114f0d00200c410176220f2011200f20114b1b22114104201141044b1b221141ffffffff0371201146410274210f2011410274211102400240200c0d00200741003602d0020c010b200741043602d8022007200c3602d402200720103602d0020b200741c0026a2011200f200741d0026a107d20072802c802210c20072802c0024101460d07200720072802c40222103602bc02200c41027621130b200e20094f0d072009417f73210c0340200c20072802c801220f6a2211200c4f0d06201020072802c00120114102746a280200360200200c41016a210c201041046a2110200e2009417f6a2209490d000b2012210c0c080b200e201041ccd7cc00103c000b2009200c41ecd8cc00103c000b2009201641ecd8cc00103c000b2009201641ccd7cc00103c000b201d200f41ccd7cc00103c000b2011200f41ccd7cc00103c000b200c0d120c110b4100210c20120d010b20072802c8012209200e417f736a220e20094f0d04201020072802c001200e4102746a280200360200200c41016a210c20072802bc0221100b2007200c3602b802200720133602b402200720103602b00220072802d801220c41ffffffff0371200c470d0e200c4102742209417f4c0d0e20072802d00121110240024020090d004104210e0c010b2009102c220e450d100b2007200e3602d002200720094102763602d402200e2011200910e9081a2007200c3602d802200741c0026a200741d0026a200741b0026a10d608024020072802bc01220920072802dc01220f6a220c2009490d0002400240200f200c4f0d00200c417f73210920072802c002211d20072802c802210e200f21110340200e200e20116a20096a22114d0d08200920072802c80122176a221220094f0d0920072802c00120124102746a201d20114102746a280200360200200941016a210920072802dc012111200f200c417f6a220c490d000c020b0b20090d0120072802c802210e200f21110b200e2011200f417f7322096a6a220c200e4f0d0720072802c801220e20096a2209200e4f0d0820072802c00120094102746a20072802c002200c4102746a2802003602000b024020072802c40241ffffffff0371450d0020072802c002102e0b201341ffffffff0371450d002010102e0b02402023450d002025102e0b024020072802a40241ffffffff0371450d0020072802a002102e0b20200d000b02400240201c450d00024020072802bc0122094101460d00410020096b2110201c411f71210f4100201c6b411f71211d2019410274201b6a417c6a210c417f21090340200920072802c80122116a220e20094f0d0c2011200e417f6a22124d0d0d2019201920096a22114d0d0e200c20072802c001221120124102746a280200201d742011200e4102746a280200200f7672360200200c417c6a210c20102009417f6a2209470d000b20072802bc0121090b20072802c801220c200c20096b220e4d0d082019201920096b22094d0d09201b20094102746a20072802c001200e4102746a280200201c411f717636020041012109201b210e0c010b4100210920072802c801211920072802c401211f20072802c001210e201a450d00201b102e0b024020072802d40141ffffffff0371450d0020072802d001102e0b2009450d0020072802c40141ffffffff0371450d0020072802c001102e0b4104102c2209450d0c200941003602004104102c220c450d0c200c41003602000240024020180d00410121194101211f410121164101211e0c010b2009102e200c102e200e210c201821090b200720163602e8012007201e3602e401200720093602e001200720193602f8012007201f3602f4012007200c3602f00120074180026a200741f0016a10d5082007280280024101460d0a024020074180026a41086a29030020084201882005423f86845820074180026a41106a2903002202200542018822045820022004511b0d00200741f0016a41086a200741e0016a41086a280200360200200720072903e0013703f0014110102c2209450d0d20094280808080103702082009420037020020074284808080c00037028402200720093602800220074180026a10bb07200741e0016a200741f0016a20074180026a10d60820072802840241ffffffff0371450d00200728028002102e0b200741d0026a41086a200741e0016a41086a280200360200200720072903e0013703d0020c0e0b200e200941ccd7cc00103c000b2011200e41ccd7cc00103c000b2012201741ecd8cc00103c000b200c200e41ccd7cc00103c000b2009200e41ecd8cc00103c000b200e200c41ccd7cc00103c000b2009201941ecd8cc00103c000b200e201141ccd7cc00103c000b200e417f6a201141ccd7cc00103c000b2011201941ecd8cc00103c000b20072007290284023703f00141f8dbcc00412f200741f0016a41a8dccc0041b8dccc00103e000b1038000b1036000b200f41ffffffff0371450d002010102e0b200741d0026a10bb07200741f0016a41086a200741d0026a41086a280200360200200720072903d0023703f00120074180026a200741f0016a10d50841012109024002402007280280024101470d00200041c8dccc00360204200041086a41193602000c010b200041106a20074180026a41106a290300370300200041086a20074180026a41086a290300370300410021090b2000200936020020072802a40141ffffffff0371450d0020072802a001102e0b200741e0026a24000ba40201037f230041c0006b22022400200241206a22034200370300200241186a22044200370300200241086a41086a420037030020024200370308200241086a41d9fcc6004106108102200241286a41e8f7cb00410e1081022003200241286a41086a290000370300200420022900283703004100210320024100360230200242013703280240024002400240024020000e03000102040b200241003a003c200241286a2002413c6a410110742002200136023c200241286a2002413c6a410410740c020b200241013a003c200241286a2002413c6a410110740c010b200241023a003c200241286a2002413c6a410110740b200228022c21030b200241086a412020022802282200200228023010b20102402003450d002000102e0b200241c0006a24000bc30201037f230041c0006b22022400200241206a22034200370300200241186a22044200370300200241086a41086a420037030020024200370308200241086a41a5fec600411a108102200241286a41c8c3c800410c1081022003200241286a41086a29000037030020042002290028370300200241003602302002420137032802400240024002402000417e6a22034102200341ff01714102491b41ff01710e03000102030b200241003a003c200241286a2002413c6a410110740c020b200241013a003c200241286a2002413c6a410110740c010b200241023a003c200241286a2002413c6a41011074200220003a003c200241286a2002413c6a410110742002200136023c200241286a2002413c6a410410740b200241086a412020022802282200200228023010b2010240200228022c450d002000102e0b200241c0006a24000bdf0203027f027e017f230041c0006b2201240020002d001021022000290308210320002903002104200141086a41186a22004200370300200141186a22054200370300200141086a41086a420037030020014200370308200141086a41a8f8c6004104108102200141286a41aa8cc50041181081022000200141286a41086a290000370300200520012900283703002001410036023020014201370328200141013a0038200141286a200141386a4101107420012004370338200141286a200141386a4108107420012003370338200141286a200141386a41081074024002400240024020020e03000102030b200141003a0038200141286a200141386a410110740c020b200141013a0038200141286a200141386a410110740c010b200141023a0038200141286a200141386a410110740b200141086a412020012802282200200128023010b2010240200128022c450d002000102e0b200141c0006a24000bc10201047f230041c0006b22012400200141186a22024200370300200141106a22034200370300200141086a420037030020014200370300200141d9fcc6004106108102200141206a41b4f4cb0041061081022002200141206a41086a29000037030020032001290020370300024002402000280208220341246c41046a2202417f4c0d00200028020021000240024020020d00410121040c010b2002102c2204450d020b2001410036023820012002360234200120043602302003200141306a10760240200341246c2202450d000340200141206a200010ef04200141306a200128022022032001280228107402402001280224450d002003102e0b200041246a21002002415c6a22020d000b0b2001412020012802302200200128023810b20102402001280234450d002000102e0b200141c0006a24000f0b1038000b1036000bbe0401027f230041106b220224000240024002400240024002400240024020012d00000e06010402030500010b2000410036020820004201370200200241003a00002000200241011074200141046a28020021032001410c6a28020022012000107620002003200110740c050b2000410036020820004201370200200241023a000020002002410110744120102c2203450d0520024220370204200220033602002002200141016a41201074200020022802002201200228020810742002280204450d042001102e0c040b2000410036020820004201370200200241043a000020002002410110742000200141016a41041074200141086a2802002103200141106a28020022012000107620002003200110740c030b2000410036020820004201370200200241053a000020002002410110742000200141016a41041074200141086a2802002103200141106a28020022012000107620002003200110740c020b2000410036020820004201370200200241063a000020002002410110742000200141016a41041074200141086a2802002103200141106a28020022012000107620002003200110740c010b2000410036020820004201370200200241073a00002000200241011074200241003a000020002002410110740240200141046a2802004101460d00200241003a000020002002410110740c010b200241013a000020002002410110742002200141086a280200360200200020024104107420022001410c6a28020036020020002002410410740b200241106a24000f0b1036000bbd0101037f230041306b22012400200141186a22024200370300200141106a22034200370300200141086a420037030020014200370300200141d9fcc6004106108102200141206a41a0f4cb00410a1081022002200141206a41086a2900003703002003200129002037030002404120102c2202450d002001422037022420012002360220200141206a2000412010742001412020012802202200200128022810b20102402001280224450d002000102e0b200141306a24000f0b1036000bd50302087f017e230041f0006b22022400200241c0006a41186a22034200370300200241c0006a41106a22044200370300200241c0006a41086a2205420037030020024200370340200241e0006a41d9fcc60041061081022005200241e0006a41086a220629000037030020022002290060370340200241e0006a41d4f2cb00410b1081022003200629000037030020042002290060370300200241206a200241c0006a10f204200220022903284200200229032042015122071b3703182002200241206a41106a2208290300420020071b3703102002200241206a41186a2209290300420020071b370308200241086a2107024002400240200141ff01710e03010002010b200241106a21070c010b200241186a21070b2007427f2007290300220a20007c22002000200a541b3703002009200229030837030020082002290310370300200220022903183703282002420137032020034200370300200442003703002005420037030020024200370340200241e0006a41d9fcc60041061081022005200629000037030020022002290060370340200241e0006a41d4f2cb00410b108102200441086a200629000037000020042002290060370000200241c0006a200241206a41086a10f304200241f0006a24000bbb0202037f017e230041d0006b220224002002412036020420022001360200200241086a2001412010ed0202400240200228020822010d00200042003703000c010b200228020c2103024002400240200241086a41086a28020022044108490d00200441787141786a0e09000101010101010100010b20024100360220200242013703182002410a36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241909dc5003602382002200241286a360248200241346a419cebc000200241386a103d1a2002280218200228022010ef020240200228021c450d002002280218102e0b420021050c010b200041186a2001290010370300200041106a200129000837030020002001290000370308420121050b200020053703002003450d002001102e0b200241d0006a24000b8c0101017f230041206b22022400200241003602102002420137030820022001290300370318200241086a200241186a4108107420022001290308370318200241086a200241186a4108107420022001290310370318200241086a200241186a410810742000412020022802082201200228021010b2010240200228020c450d002001102e0b200241206a24000bb80301067f230041f0006b22012400200141186a22024200370300200141106a22034200370300200141086a420037030020014200370300200141a5fec600411a108102200141d8006a41c8c3c800410c1081022002200141d8006a41086a290000370300200320012900583703002001412036022420012001360220200141286a2001412010ed0202400240200128022822040d00410421020c010b200128022c2105024002400240200141286a41086a2802002206450d00410221020240024020042d00000e03040001020b410321020c020b20064101460d00410021020240024020042d00010e020100020b410121020b2006417e6a4104490d00200428000221030c020b20014100360240200142013703382001410a36024c2001200141206a3602482001200141386a360254200141ec006a41013602002001420137025c200141909dc5003602582001200141c8006a360268200141d4006a419cebc000200141d8006a103d1a2001280238200128024010ef020240200128023c450d002001280238102e0b410421020b0b2005450d002004102e0b2000200336020420004102200220024104461b3a0000200141f0006a24000bc50d04077f017e097f037e230041c0026b22012400200141306a22024200370300200141286a22034200370300200141186a41086a420037030020014200370318200141186a41a5fec600411a108102200141d8016a41c8c4c80041081081022002200141d8016a41086a290000370300200320012900d8013703002001412036023c2001200141186a360238200141c0006a200141186a412010ed0202400240200128024022040d00410021050c010b200128024421062001200141c0006a41086a28020036025420012004360250200141106a200141d0006a10ab010240024020012802100d000240024020012802142207200128025441386e2202200220074b1bad42387e2208422088a70d002008a72202417f4c0d0002400240024020020d00410821050c010b2002102c2205450d010b200241386e21090240024020070d00410021070c010b4100210a4100210b0340200141003a00f801200b220c41016a210b2001280254210d417f210341002102024002400340200d2002460d01200141d8016a20026a2001280250220e2d00003a00002001200d20036a3602542001200e41016a3602502001200241016a220f3a00f8012003417f6a2103200f2102200f4120470d000b200141a0026a41186a2202200141d8016a41186a290300370300200141a0026a41106a2203200141d8016a41106a290300370300200141a0026a41086a2210200141d8016a41086a290300370300200120012903d8013703a002200f41ff01714120490d06200141b8016a41086a22112010290300370300200141b8016a41106a22102003290300370300200141b8016a41186a22032002290300370300200120012903a0023703b801200d200f6b22024108490d06200e29000121122001200e41096a3602502001200241786a360254200141086a200141d0006a10ab012001280208450d01200141003602d8010c060b200241ff0171450d05200141003a00f8010c050b200141d8016a200141d0006a200128020c10920120012802d801220f450d0420014198016a41186a2003290300220837030020014198016a41106a20102903002213370300200141f8006a41086a20112903002214370300200141f8006a41106a2013370300200141f8006a41186a2008370300200141d8006a41186a22032008370300200141d8006a41106a220d2013370300200141d8006a41086a220e2014370300200120012903b80122083703782001200837035820012902dc0121080240200c2009470d00200941016a22022009490d04200941017422102002201020024b1b22024104200241044b1bad42387e2213422088a74541037421022013a721100240024020090d00200141003602d8010c010b200141083602e001200120053602d8012001200941386c3602dc010b200141a0026a20102002200141d8016a107d20012802a8022102024020012802a0024101470d0020020d040c050b20012802a4022105200241386e21090b2005200c41386c6a2202201237030020022001290358370308200241106a200e290300370300200241186a200d290300370300200241206a20032903003703002002412c6a20083702002002200f360228200a41386a210a200b2007470d000b0b2005450d032001200141d0006a10ab010240024002402001280200450d00200141003602d8010c010b200141d8016a200141d0006a200128020410920120012802d8010d010b02402007450d002005200741386c6a210f200521020340200241386a210302402002412c6a28020041ffffff3f71450d00200241286a280200102e0b20032102200f2003470d000b0b024020090d00410021090c050b200941386c450d042005102e0c040b200141a0026a41086a200141d8016a41086a280200360200200120012903d8013703a0020c040b1036000b1038000b200141f8006a41186a20014198016a41186a2903003703000240200c450d002005412c6a210203400240200228020041ffffff3f71450d002002417c6a280200102e0b200241386a2102200a41486a220a0d000b0b2009450d00200941386c21022002450d002005102e0b41002105200141003602a802200142013703a0022001410a360284022001200141386a360280022001200141a0026a3602b801200141ec016a4101360200200142013702dc01200141909dc5003602d801200120014180026a3602e801200141b8016a419cebc000200141d8016a103d1a20012802a00220012802a80210ef0220012802a402450d0020012802a002102e0b2006450d002004102e0b200041086a200736020020002009360204200020053602002000410c6a20012903a002370200200041146a200141a0026a41086a280200360200200141c0026a24000b340020004199fdc60036020420004100360200200041146a4104360200200041106a41b08dc500360200200041086a42083702000b2e01017f02404104102c22020d001036000b200042043702042000200236020041002000107620004101410010740b2f01017f02404104102c22020d001036000b200042043702042000200236020041002000107641044100200010a0010b950101027f230041f0006b22022400200241c8006a410036020002404101102c2203450d002000420137020420002003360200200241003a006f2000200241ef006a41011074024020022802482200450d000240200241cc006a2802002203450d00200341306c450d002000102e0b200241dc006a28020041ffffff3f71450d002002280258102e0b200241f0006a24000f0b1036000b150020002002ad4220862001ad842003100a4101460bb60201067f024002402001280200220228020422030d00410121030c010b200228020022042d0000210520022003417f6a360204410121032002200441016a3602000240200541037122024103470d000c010b024002400240024020020e03000102000b200541027621020c020b02402001280200220228020422010d000c030b200228020022032d0000210420022001417f6a3602042002200341016a360200200441087420057241ffff03712202418002492103200241027621020c020b024020012802002202280204220141034f0d000c020b2002280200220441026a2d0000210620042f000021072002200441036a36020020022001417d6a360204200720064110747241087420057222014180807c6a41ffff0b4b0d01200141027621020b410021030b200020023b0102200020033b01000b950201067f02400240200128020422020d00410121030c010b200128020022042d0000210520012002417f6a2206360204410121032001200441016a3602000240200541037122074103470d000c010b024002400240024020070e03000102000b200541027621010c020b024020060d000c030b20042d0001210320012002417e6a3602042001200441026a360200200341087420057241ffff03712201418002492103200141027621010c020b0240200641034f0d000c020b200441036a2d0000210720042f0001210620012002417c6a3602042001200441046a360200200620074110747241087420057222024180807c6a41ffff0b4b0d01200241027621010b410021030b200020013b0102200020033b01000be10101027f230041106b2202240002400240024020002f0100220341c000490d00200341808001490d012002200341027441027236020020012002410410740c020b200220034102743a00052001200241056a410110740c010b200220034102744101723b01062001200241066a410210740b02400240024020002f0102220041c000490d00200041808001490d01200220004102744102723602082001200241086a410410740c020b200220004102743a00052001200241056a410110740c010b200220004102744101723b010e20012002410e6a410210740b200241106a24000b340020004180fdc60036020420004100360200200041146a4102360200200041106a41ac97c500360200200041086a42123702000b4e01027f230041106b2202240002404110102c22030d001036000b200042103702042000200336020020024200370308200242808090bbbad6adf00d3703002000200241101074200241106a24000b1300200041023602042000419899c5003602000bc60202057f017e230041f0006b220224004280c2d72f42004280f985d40442001082052103200241106a22044200370300200241086a42003703002002411c6a22054180023b0100200241186a22062003360200200242003703002002410136026802404118102c2203450d0020032002290308370300200320022d001d3a00152003200429030037030820032006280200360210200320052d00004100473a00140240200228026822044105490d00200441186c450d002002280204102e0b411c102c2204450d002000421c37020420002004360200410120001076200329030021072002200341086a290300370308200220073703002000200241101074200220032802103602002000200241041074200220032d00143a00002000200241011074200220032d00153a000020002002410110742003102e200241f0006a24000f0b1036000bb10302027f037e230041d0006b22042400200441386a20024201200242015620034200522003501b22051b22022003420020051b2203428094ebdc03420010e708200441286a20022003428094ebdc03420010e608200441186a20022003200429033822062004290328200441286a41086a29030084420052ad7c220742012007420156200441386a41086a2903002007200654ad7c22074200522007501b22051b22062007420020051b220810e70802400240024020042903182207428080808010544100200441186a41086a290300501b450d00200441086a200220002002200054200320015420032001511b22051b2003200120051b2006200810e70820042903082203428080808010544100200441086a41086a290300501b450d012007a70d0241d0d8c800411941bcd7cc001039000b2004411136024c2004419cd5cc0036024841add5cc0041de00200441c8006a41bcdcc80041bcd7cc00103e000b2004411136024c2004419cd5cc0036024841add5cc0041de00200441c8006a41bcdcc80041bcd7cc00103e000b200441d0006a2400200342ffffffff0f83428094ebdc037e200742ffffffff0f8380a70b4801027f230041106b2202240002404110102c22030d001036000b200042103702042000200336020020024200370308200242c0843d3703002000200241101074200241106a24000b4d01017f230041206b22002400200041146a4101360200200042013702042000419cc3cb003602002000410436021c20004194c3cb003602182000200041186a360210200041889cc5001044000b840707017f047e027f017e047f057e037f23004180026b22022400200241c0006a200110db040240024002402002290340a70d00200241c0006a41106a290300210320022903482104200241286a200110db0402402002290328a70d00200241286a41106a290300210520022903302106200241206a200110ab01024020022802200d000240024020022802242207200128020441306e2208200820074b1bad42307e2209422088a70d002009a72208417f4c0d000240024020080d004108210a0c010b2008102c220a450d060b200841306ead2109024002402007450d00200241d8016a410172210b0340200241d8016a200110930120022d00d8014101460d04200241b8016a41186a2208200b41186a290000370300200241b8016a41106a220c200b41106a290000370300200241b8016a41086a220d200b41086a2900003703002002200b2900003703b801200241086a200110db042002290308a70d04200241086a41106a290300210e2002290310210f200241f8006a41086a200d2903002210370300200241f8006a41106a200c2903002211370300200241f8006a41186a20082903002212370300200241d8006a41086a220d2010370300200241d8006a41106a22132011370300200241d8006a41186a22142012370300200220022903b80122103703782002201037035802402009422088a7220c2009a7470d00200c41016a2208200c490d04200c4101742215200820082015491b22084104200841044b1bad42307e2209422088a74541037421082009a7211502400240200c0d00200241003602d8010c010b200241083602e0012002200a3602d8012002200c41306c3602dc010b200241b8016a20152008200241d8016a107d20022802c001210820022802b8014101460d0320022802bc01210a200841306ead21090b200a200c41306c6a2208200e3703082008200f37030020082002290358370310200841186a200d290300370300200841206a2013290300370300200841286a2014290300370300200942ffffffff0f83200c41016aad4220868421092007417f6a22070d000b0b200a450d0320002004370300200020093702242000200a3602202000200637031020002003370308200041186a20053703000c070b20080d050b1038000b2009a72201450d00200141306c450d00200a102e0b200041003602200c030b200041003602200c020b200041003602200c010b1036000b20024180026a24000bb10201037f230041e0006b22022400200241086a4192fdc6004107108102200241186a41f09dc500410a108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241d0006a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000b830301057f230041e0006b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022040d00410221010c010b200328021421052003200341186a280200360224200320043602202003200341206a10ab010240024020032802000d00200328020421012003418094ebdc0336024c2003200136024820032802242206450d00200341c8006a2001418094ebdc034b4102746a2802002102200328022022012d0000210720032006417f6a3602242003200141016a36022041002101024020070e020200010b410121010c010b20034100360230200342013703282003410a36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341909dc5003602482003200341386a360258200341c4006a419cebc000200341c8006a103d1a2003280228200328023010ef020240200328022c450d002003280228102e0b410221010b2005450d002004102e0b200020013a000420002002360200200341e0006a24000b801301267f23004190046b220424000240024002402001280200220520012802044f0d00200441f7026a2106200441a4016a2107200441ac036a2108200441f0026a4101722109200441d1036a220a41036a210b03402001200541016a360200200441e0016a2005108905200441f0026a20042802e001220c20042802e801108a05200441d8036a41086a220d200941086a290000370300200441d8036a41106a220e200941106a290000370300200441d8036a41186a220f200941186a290000370300200441d8036a41206a2210200941206a290000370300200441d8036a41286a2211200941286a290000370300200441d8036a412f6a22122009412f6a29000037000020044188026a41086a2213200841086a29000037030020044188026a41106a2214200841106a29000037030020044188026a41186a2215200841186a29000037030020044188026a41206a2216200841206a280000360200200420092900003703d803200420082900003703880220042802a803211720042d00f00221182004200a2800003602782004200b28000036007b41022119024020184102460d0020042d00d003211a200441a0016a412f6a2012290000370000200441a0016a41286a2011290300370300200441a0016a41206a2010290300370300200441a0016a41186a200f290300370300200441a0016a41106a200e290300370300200441a0016a41086a200d290300370300200441c8026a41086a2013290300370300200441c8026a41106a2014290300370300200441c8026a41186a2015290300370300200441c8026a41206a2016280200360200200420042903d8033703a00120042004290388023703c8022004200428007b3600c302200420042802783602c002201821192017211b0b024020042802e401450d00200c102e0b200d200441a0016a41086a221c290300370300200e200441a0016a41106a221d290300370300200f200441a0016a41186a221e2903003703002010200441a0016a41206a221f2903003703002011200441a0016a41286a22202903003703002012200441a0016a412f6a290000370000200441f8006a41086a2221200441c8026a41086a2218290300370300200441f8006a41106a2222200441c8026a41106a220c290300370300200441f8006a41186a2223200441c8026a41186a2217290300370300200441f8006a41206a2224200441c8026a41206a2225280200360200200420042903a0013703d803200420042903c802370378200420042800c302360073200420042802c002360270200441f0026a41086a2226200d290300370300200441f0026a41106a2227200e290300370300200441f0026a41186a220e200f290300370300200441f0026a41206a220f2010290300370300200441f0026a41286a22102011290300370300200441f0026a412f6a2012290000370000200420042903d8033703f00220182021290300370300200c20222903003703002017202329030037030020252024280200360200200420042903783703c802200420042800733600c302200420042802703602c00202400240024020194102460d002019410171450d010b4103210d0c010b20072006290000370000200741286a200641286a290000370000200741206a200641206a290000370000200741186a200641186a290000370000200741106a200641106a290000370000200741086a200641086a290000370000200441e0016a41086a22112018290300370300200441e0016a41106a2212200c290300370300200441e0016a41186a22192017290300370300200441e0016a41206a22182025280200360200200420042903c8023703e0012013201c2902003703002014201d2902003703002015201e2902003703002016201f29020037030020044188026a41286a220c202029020037030020044188026a41306a2217200441a0016a41306a280200360200200420042800c3023600db01200420042802c0023602d801200420042902a001370388024103210d201a41ff01714103460d002026201329030037030020272014290300370300200e2015290300370300200f20162903003703002010200c290300370300200441f0026a41306a220d2017280200360200201c2011290300370300201d2012290300370300201e2019290300370300201f201828020036020020042004290388023703f002200420042903e0013703a001200420042800db013600cb02200420042802d8013602c8020240201b2003280200280200470d00200441386a41306a200d280200360200200441386a41286a2010290300370300200441386a41206a200f290300370300200441386a41186a200e290300370300200441386a41106a2027290300370300200441386a41086a2026290300370300200441106a41086a201c290300370300200441106a41106a201d290300370300200441106a41186a201e290300370300200441106a41206a201f280200360200200420042903f002370338200420042903a001370310200420042800cb0236000b200420042802c80236020820052128201b2129201a210d0c010b41002128200441386a41306a41002802b49e45360200200441386a41286a41002902ac9e45370300200441386a41206a41002902a49e45370300200441386a41186a410029029c9e45370300200441386a41106a41002902949e45370300200441386a41086a410029028c9e45370300200441106a41086a41002902c49e45370300200441106a41106a41002902cc9e45370300200441106a41186a41002902d49e45370300200441106a41206a41002802dc9e45360200200441002902849e45370338200441002902bc9e45370310200441002800e49e4536000b200441002800e19e453602084103210d410021290b200d41ff01714103470d02200128020022052001280204490d000b0b200041033a00600c010b2000202836020020002004290338370204200020293602382000200429031037023c2000410c6a200441386a41086a290300370200200041146a200441386a41106a2903003702002000411c6a200441386a41186a290300370200200041246a200441386a41206a2903003702002000412c6a200441e0006a290300370200200041346a200441e8006a280200360200200041c4006a200441106a41086a290300370200200041cc006a200441106a41106a290300370200200041d4006a200441106a41186a290300370200200041dc006a200441106a41206a2802003602002004200428000b360003200420042802083602002000200d3a006020002004280200360061200041e4006a20042800033600000b20044190046a24000b850201037f230041d0006b22022400200241086a41de80ca004109108102200241186a41e780ca004110108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000bfc0f05057f017e027f057e037f230041d0016b220324002003200236020420032001360200200341086a2001200210ed0202400240200328020822010d00200041023a00000c010b200328020c210202400240200341106a2802002204450d002004417f6a21050240024002400240024020012d00000e020001050b20054104490d0420012800012106200341003a00880120044105460d0420012d00052105200341013a008801200320053a006820044106470d010c030b2005450d03410021050240024020012d00010e020100050b410121050b2004417e6a4104490d03200341206a41086a200341e8006a41086a290300370300200341206a41106a200341e8006a41106a290300370300200341206a41186a200341e8006a41186a290300370300200320032903683703202003200328009001360218200320034193016a28000036001b20012800022107410121040c010b20012d00062105200341023a008801200320053a006920044107460d0120012d00072105200341033a008801200320053a006a20044108460d0120012d00082105200341043a008801200320053a006b20044109460d0120012d00092105200341053a008801200320053a006c2004410a460d0120012d000a2105200341063a008801200320053a006d2004410b460d0120012d000b2105200341073a008801200320053a006e2004410c460d0120012d000c2105200341083a008801200320053a006f2004410d460d0120012d000d2105200341093a008801200320053a00702004410e460d0120012d000e21052003410a3a008801200320053a00712004410f460d0120012d000f21052003410b3a008801200320053a007220044110460d0120012d001021052003410c3a008801200320053a007320044111460d0120012d001121052003410d3a008801200320053a007420044112460d0120012d001221052003410e3a008801200320053a007520044113460d0120012d001321052003410f3a008801200320053a007620044114460d0120012d00142105200341103a008801200320053a007720044115460d0120012d00152105200341113a008801200320053a007820044116460d0120012d00162105200341123a008801200320053a007920044117460d0120012d00172105200341133a008801200320053a007a20044118460d0120012d00182105200341143a008801200320053a007b20044119460d0120012d00192105200341153a008801200320053a007c2004411a460d0120012d001a2105200341163a008801200320053a007d2004411b460d0120012d001b2105200341173a008801200320053a007e2004411c460d0120012d001c2105200341183a008801200320053a007f2004411d460d0120012d001d2105200341193a008801200320053a0080012004411e460d0120012d001e21052003411a3a008801200320053a0081012004411f460d0120012d001f21052003411b3a008801200320053a00820120044120460d0120012d002021052003411c3a008801200320053a00830120044121460d012003411d3a008801200320012d00213a00840120044122460d012003411e3a008801200320012d00223a00850120044123460d012003411f3a008801200320012d00233a00860120044124460d01200341c8006a41106a200341e8006a41106a290300370300200341c8006a41086a200341e8006a41086a290300370300200320012d00243a008701200341c8006a41186a200341e8006a41186a290300370300200341203a008801200320032903682208370390012003200837034820044125460d024100210902400240024020012d00250e03020100050b410221090c010b410121090b2004415a6a4104490d02200441566a4110490d02200441466a4110490d02200441b67f6a410f4d0d022001280026210a200341206a41086a200341c8006a41086a290300370300200341206a41106a200341c8006a41106a290300370300200341206a41186a200341c8006a41186a29030037030020032003290348370320200320032800413602182003200341c4006a28000036001b200141d2006a2900002108200141c2006a290000210b200141326a290000210c200129004a210d200129003a210e200129002a210f410021040b200341e8006a41186a2210200341206a41186a290300370300200341e8006a41106a2211200341206a41106a290300370300200341e8006a41086a2212200341206a41086a2903003703002003200329032037036820032003280218360290012003200328001b36009301200041306a2008370000200041286a200d370000200041206a200b370000200041186a200e370000200041106a200c370000200041086a200f3700002000413c6a200a360000200041386a2006360000200041046a2007360000200020053a0001200041e0006a20093a0000200041c0006a2003290368370000200041c8006a2012290300370000200041d0006a2011290300370000200041d8006a2010290300370000200041e1006a200328029001360000200041e4006a2003280093013600000c020b200341003a0088010b200341003602980120034201370390012003410a36024c20032003360248200320034190016a360220200341fc006a41013602002003420137026c200341909dc5003602682003200341c8006a360278200341206a419cebc000200341e8006a103d1a20032802900120032802980110ef020240200328029401450d00200328029001102e0b410221040b200020043a00002002450d002001102e0b200341d0016a24000b130020002002ad4220862001ad84102610da080bbe0303057f017e037f230041306b22022400200241086a200128020c200141146a280200108b050240024020022802082203450d00200141086a2104200141106a2105024003400240024020042802002206200229020c2207422088a722084b0d0020012802002003200610ec08450d010b2007a7450d032003102e0c030b02402005280200450d00200128020c102e0b2001200336020c20052007370200200241086a2003200810ed020240024020022802082203450d0020022802102109200228020c2108024020012d001c450d00200128020c200128021410ff010b2001280214220a20042802002206490d03200241086a200128020c20066a200a20066b20032009200128021811050020022d002c4102470d012008450d002003102e0b200241086a200128020c2001280214108b05200228020822030d010c030b0b20002002290308370200200041206a200241086a41206a290300370200200041186a200241086a41186a290300370200200041106a200241086a41106a290300370200200041086a200241086a41086a2903003702002008450d022003102e0c020b2006200a41e89ec5001056000b200041023a00240b200241306a24000be30303057f017e037f230041c0006b22022400200241086a200128020c200141146a280200108b050240024020022802082203450d00200141086a2104200141106a2105024003400240024020042802002206200229020c2207422088a722084b0d0020012802002003200610ec08450d010b2007a7450d032003102e0c030b02402005280200450d00200128020c102e0b2001200336020c20052007370200200241086a2003200810ed020240024020022802082203450d0020022802102109200228020c2108024020012d001c450d00200128020c200128021410ff010b2001280214220a20042802002206490d03200241086a200128020c20066a200a20066b20032009200128021811050020022802340d012008450d002003102e0b200241086a200128020c2001280214108b05200228020822030d010c030b0b20002002290308370200200041306a200241086a41306a290300370200200041286a200241086a41286a290300370200200041206a200241086a41206a290300370200200041186a200241086a41186a290300370200200041106a200241086a41106a290300370200200041086a200241086a41086a2903003702002008450d022003102e0c020b2006200a41e89ec5001056000b2000410036022c0b200241c0006a24000bbe0301017f230041106b220224000240024020002d00004101460d00200241003a000f20012002410f6a41011074024002400240024002400240024002400240024020002d00010e0a000102030405060708090b0b200241003a000f20012002410f6a410110740c0a0b200241013a000f20012002410f6a410110740c090b200241023a000f20012002410f6a410110740c080b200241033a000f20012002410f6a410110740c070b200241043a000f20012002410f6a410110740c060b200241053a000f20012002410f6a410110740c050b200241063a000f20012002410f6a410110740c040b200241073a000f20012002410f6a410110742002200041026a2d00003a000f20012002410f6a410110740c030b200241083a000f20012002410f6a410110740c020b200241093a000f20012002410f6a410110740c010b200241013a000f20012002410f6a4101107402400240024020002d00010e03000102030b200241003a000f20012002410f6a410110740c020b200241013a000f20012002410f6a410110740c010b200241023a000f20012002410f6a410110742002200041026a2d00003a000f20012002410f6a410110740b200241106a24000b9c0101037f230041206b2202240020024100360208200242013703002001280200210302404120102c2204450d002002422037021420022004360210200241106a2003412010742002200228021022032002280218107402402002280214450d002003102e0b2002200128020441201074200020022802002201200228020810b00102402002280204450d002001102e0b200241206a24000f0b1036000baa0a01067f230041c0006b22022400024041ca03102c2203450d0020002003360200200041046a220442ca03370200200341003b000041022105200041086a4102360200024002400240200128020022032903684202520d00410221010240024020042802004102470d00200242828080801037021420022000280200360210200241306a41084101200241106a107d200241306a41086a280200210120022802304101460d0120002002280234360200200041046a2001360200200041086a28020021010b200028020020016a41043a0000200041086a2201200128020041016a3602000c020b2001450d020c030b02400240024002400240024020042802004102470d00200242828080801037021420022000280200360210200241306a41084101200241106a107d200241306a41086a280200210120022802304101460d0120002002280234360200200041046a2001360200200041086a28020021050b200341e8006a2101200028020020056a4184013a0000200041086a2204200428020041016a3602002003200010f50120032d00240e03010203040b20010d060c050b200241003a00102000200241106a410110742000200341256a41c00010740c020b200241013a00102000200241106a410110742000200341256a41c00010740c010b200241023a00102000200241106a410110742000200341256a41c10010740b200120001091050b20034198016a2000109002200041086a220128020021034104102c2204450d01200242043702042002200436020041012003417e6a220320034101461b410020031b2002107602402001280200220141014d0d00200241286a2002280200220320022802086a220436020020022000360220200041086a4100360200200241023602102002411c6a2000280200220541026a22063602002002200336022420022001417e6a220136021420022006360218200241246a21060240024020010d002000200610ee010c010b41002101034020032004460d012002200341016a360224200520016a20032d00003a00002000200028020841016a360208024020014101460d00200141016a210120022802242103200228022821040c010b0b0240200228022820022802246b2203450d00200241106a200310920520022802202200280208220320022802102201460d00200120036b2104200028020020036a21030340200228022422012002280228460d022002200141016a360224200320012d00003a00002000200028020841016a360208200341016a21032004417f6a22040d000b0b200228022820022802246b2203417f4c0d020240024020030d00410121010c010b2003102c2201450d040b200241003602382002200336023420022001360230200241306a200610ee012002280234210620022802302107024020022802382203450d00200241106a200310920520022802202204280208220120022802102200460d00200020016b2105200428020020016a21012007210003402003450d01200120002d00003a00002004200428020841016a3602082003417f6a2103200041016a2100200141016a21012005417f6a22050d000b0b2006450d002007102e0b02402002280218200228021c2203460d00200220033602180b024020022802142203450d000240200228021022042002280220220541086a22002802002201460d002005280200220520016a200520046a200310ea081a200228021421030b2000200320016a3602000b02402002280204450d002002280200102e0b200241c0006a24000f0b4102200141b4b3c000104d000b1038000b1036000baa0103017f027e017f230041106b220224000240024020002903004201520d002002200041106a290300200041086a2903002203420c882204420120044201561b80a741047420037aa7417f6a22054101200541014b1b2205410f2005410f491b723b01082001200241086a410210740c010b200241003a000b20012002410b6a410110740b200041286a20011091022002200041186a36020c2002410c6a200110af01200241106a24000b950201067f230041206b22022400024002402000280210220341046a280200220420002802042205200028020022066a22076b2001490d00200328020021040c010b0240200720016a22062007490d00200441017422052006200520064b1b22064108200641084b1b21060240024020040d00200241003602100c010b200241106a41086a410136020020022004360214200220032802003602100b200220064101200241106a107d200241086a2802002106024020022802004101460d00200320022802042204360200200341046a200636020020002802042105200028020021060c020b2006450d001036000b1038000b2004200620016a22016a200420066a200510ea081a20002001360200200241206a24000b5401027f230041106b2202240002404108102c22030d001036000b2000420837020420002003360200200241003602082000200241086a410410742002410036020c20002002410c6a41041074200241106a24000b4f01027f230041106b2202240002404114102c22030d001036000b200042143702042000200336020041044100200010950520024200370308200242003703002000200241101074200241106a24000ba40101027f230041106b22032400200120021076024002402001450d00200141c4006c210103402002200041046a412010744120102c2204450d0220034220370204200320043602002003200041246a412010742002200328020022042003280208107402402003280204450d002004102e0b200320002802003602002002200341041074200041c4006a2100200141bc7f6a22010d000b0b200341106a24000f0b1036000b5d01027f230041206b22022400200241186a4200370300200241106a4200370300200241086a42003703002002420037030002404120102c22030d001036000b20004220370204200020033602002000200241201074200241206a24000b2f01017f02404104102c22020d001036000b2000420437020420002002360200410020001076410841002000109e010b4f01027f230041106b2202240002404114102c22030d001036000b200042143702042000200336020041044100200010d80220024200370308200242003703002000200241101074200241106a24000b5801017f230041106b220224002000410036020820004201370200200242003703082000200241086a41081074200242003703082000200241086a41081074200242003703082000200241086a41081074200241106a24000b7a01017f230041106b22022400200041003602082000420137020020024200370308200242003703002000200241101074200242003703082002420037030020002002411010742002420037030820024200370300200020024110107420024200370308200242003703002000200241101074200241106a24000b8f0101027f230041306b220224002000410036020820004201370200200241186a4200370300200241106a4200370300200241086a42003703002002420037030002404120102c2203450d002002422037022420022003360220200241206a2002412010742000200228022022032002280228107402402002280224450d002003102e0b200241306a24000f0b1036000b4201027f230041106b2202240002404104102c22030d001036000b20004204370204200020033602002002410136020c20002002410c6a41041074200241106a24000bb60101017f230041106b22022400200041003602082000420137020020024100360200200020024104107420024100360200200020024104107420024100360200200020024104107420024100360200200020024104107420024200370308200242003703002000200241101074200242003703082002420037030020002002411010742002420037030820024200370300200020024110107420024200370308200242003703002000200241101074200241106a24000b2901017f230041106b2202240020024100360208200242043703002000200210b501200241106a24000ba40b02087f067e230041b0036b2203240020034190036a41186a2204420037030020034190036a41106a2205420037030020034190036a41086a22064200370300200342003703900341062107200341d8016a41d9fcc60041061081022006200341d8016a41086a2208290000370300200320032900d80137039003200341d8016a4188f3cb00411010810220042008290000370300200520032900d801370300200341086a20034190036a4120108e02410021090240417f200328020c410020032802081b220a20026a22022002200a491b220a418080c002418080f001200141ff017122021b4b0d00200341106a10a9032004420037030020054200370300200642003703002003420037039003200341d8016a41d9fcc600410610810220062008290000370300200320032900d80137039003200341d8016a41d4f2cb00410b108102200541086a2008290000370000200520032900d801370000200341d8016a20034190036a10f204200341d8016a41186a290300210b200341d8016a41106a290300210c20032903e001210d20032903d801210e200341d8016a200341106a41b80110e9081a2003200d4200200e42015122061b370390032003200c420020061b3703d0012003200b420020061b3703c801024002400240024020020e03010200010b427f2000200341d8026a22062903007c220b200b2000541b210b0c020b427f200020032903e8017c220b200b2000541b210b200341e8016a21060c010b427f2000200341a0026a22062903007c220b200b2000541b210b0b02400240024002402006290318220c4201510d0020062903284201510d00200341c8016a2108024002400240200141ff01710e03010002010b200341d0016a21080c010b20034190036a21080b2008427f2008290300220d200b7c220b200b200d541b3703000c010b200341c8016a2108024002400240200141ff01710e03010002010b200341d0016a21080c010b20034190036a21080b2008290300220d200b7c220b200d540d012008200b3703000b200341c8016a2108024002400240200141ff01710e03000102000b20034190036a21080c010b200341d0016a21080b2008290300210e0240200c4201520d00200e200641206a290300560d010b0240427f427f200329039003220b20032903d001220c7c220d200d200b541b220f20032903c801220d7c22102010200f541b20032903e001580d0020062903284201520d00200e200641306a290300560d010b41002106410021070c010b41062107410121060b20060d00200341d8016a10a9030240024002400240200141ff01710e03010200010b200341d8026a21010c020b200341e8016a21010c010b200341a0026a21010b024020012903084201520d0041062107200141106a2903002000540d010b200341a8036a2208420037030020034190036a41106a2207420037030020034190036a41086a220142003703002003420037039003200341d8016a41d9fcc60041061081022001200341d8016a41086a2206290000370300200320032900d80137039003200341d8016a4188f3cb004110108102200541086a22042006290000370000200520032900d8013700002003200a3602d80120034190036a4120200341d8016a410410b2012008420037030020074200370300200142003703002003420037039003200341d8016a41d9fcc600410610810220012006290000370300200320032900d80137039003200341d8016a41d4f2cb00410b10810220042006290000370000200520032900d801370000200341003602e001200342013703d8012003200b370310200341d8016a200341106a410810742003200c370310200341d8016a200341106a410810742003200d370310200341d8016a200341106a4108107420034190036a412020032802d801220520032802e00110b201024020032802dc01450d002005102e0b410221090b200341b0036a240020074108742009720bee0302037f017e230041d0016b22042400200441206a22054200370300200441086a41106a22064200370300200441086a41086a420037030020044200370308200441086a41d9fcc6004106108102200441c0016a4188f3cb0041101081022005200441c0016a41086a290000370300200620042900c0013703002004200441086a4120108e0202400240417f2004280204410020042802001b220520036a220320032005491b418080c002418080f001200241ff017122031b4b0d00200441086a10a903024002400240024020030e03010200010b20044188016a21030c020b200441186a21030c010b200441d0006a21030b0240024020032903084201520d00200341106a2903002001540d010b42002107024002400240200241ff01710e03000102000b200121070c010b427f200142ffffffffffffffffbf7f7c220720072001541b21070b200041003a0000200041306a41013a0000200041286a4200370200200041206a4280808080c000370300200041186a4204370300200041106a427f370300200041086a2007370300200041316a2004280008360000200041346a2004410b6a2800003600000c020b200041800c3b0001200041013a0000200041036a41003a00000c010b200041800c3b0001200041013a0000200041036a41003a00000b200441d0016a24000b850201037f230041d0006b22022400200241086a4192fdc6004107108102200241186a41ed9fc5004110108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000b8c0a03107f047e037f23004180026b220324002003200236021420032001360210200341186a2001200210ed0202400240200328021822040d00200041003602000c010b200328021c21052003200341206a280200220136022c200320043602280240024020014104490d002004280000210620032001417c6a36022c2003200441046a360228200341086a200341286a10ab0120032802080d00200328020c210720034200370244024002402007450d00200341d0016a41106a2108410021090340200341003a00f001200941016a2109200328022c210a417f21024100210102400240024002400340200a2001460d01200341d0016a20016a2003280228220b2d00003a00002003200a20026a36022c2003200b41016a3602282003200141016a220c3a00f0012002417f6a2102200c2101200c4120470d000b200341b0016a41186a220d200341d0016a41186a220e290300370300200341b0016a41106a220f2008290300370300200341b0016a41086a2210200341d0016a41086a2211290300370300200320032903d0013703b001200c41ff01714120490d01200341f0006a41086a22012010290300370300200341f0006a41106a2202200f290300370300200341f0006a41186a2212200d290300370300200320032903b001370370200a200c6b220c4104490d01200341d0006a41086a20012903002213370300200341d0006a41106a20022903002214370300200341d0006a41186a20122903002215370300200320032903702216370350200b28000121172003200b41056a3602282003200c417c6a36022c200e20153703002008201437030020112013370300200320163703d0012003280244220b450d02200328024021180c030b200141ff0171450d00200341003a00f0010b200341d0016a41086a200341c0006a41086a280200360200200320032903403703d001200341d0016a10bc020c050b419403102c220b450d0341002118200b4100360200200b41003b01322003200b360244200341003602400b024002400340200b2f013222194105742112410021014104210c417f210202400340024020122001470d00201921020c020b200341d0016a200b20016a41346a412010ec08220a450d03200241016a2102200c41046a210c200141206a2101200a417f4a0d000b0b02402018450d002018417f6a2118200b20024102746a4194036a280200210b0c010b0b200d200e2903002213370300200f20082903002214370300201020112903002215370300200320032903d00122163703b00120082016370200200841086a2015370200200841106a2014370200200841186a2013370200200320023602d8012003200b3602d401200341003602d0012003200341c0006a3602dc01200341d0016a201710a3051a0c010b200b200c6a20173602000b20092007470d000b0b200341b0016a41086a200341c0006a41086a28020022013602002003200329034022133703b0012000200636020420004101360200200041086a2013370200200041106a20013602000c020b1036000b200341003602b801200342013703b0012003410a360294012003200341106a360290012003200341b0016a360270200341e4016a4101360200200342013702d401200341909dc5003602d001200320034190016a3602e001200341f0006a419cebc000200341d0016a103d1a20032802b00120032802b80110ef02024020032802b401450d0020032802b001102e0b200041003602000b2005450d002004102e0b20034180026a24000bc51a07147f017e027f017e027f017e087f230041a0016b2202240020002802102103200028020821042000280200210520002802042106200241c0006a41186a22072000412c6a280000360200200241c0006a41106a2208200041246a290000370300200241c0006a41086a22092000411c6a2900003703002002200041146a29000037034002400240024020062f0132220a410a4b0d0020024180016a41186a200728020036020020024180016a41106a200829030037030020024180016a41086a20092903003703002002200229034037038001200641346a2107200a41016a21080240200441016a2209200a4b22050d00200720094105746a200720044105746a20082004417f736a41057410ea081a0b200720044105746a220a2003360000200a200229038001370004200a410c6a20024188016a290300370000200a41146a20024190016a290300370000200a411c6a20024198016a280200360000200641046a210a024020050d00200a20094102746a200a20044102746a20082004417f736a41027410ea081a0b200a20044102746a220b2001360200200620083b01320c010b4105210a4100210c02400240200441054f0d004104210a200421070c010b41052107024002402004417b6a0e020201000b200441796a21074101210c4106210a0c010b410021074101210c0b02400240024002400240024002400240024002400240419403102c2204450d00200441003b013220044100360200200420062f0132220d200a417f736a22083b013220024188016a200641346a220e200a4105746a2209410c6a29000037030020024190016a200941146a29000037030020024198016a2009411c6a28000036020020022009290004370380012008410c4f0d01200d200a41016a220f6b2008470d02200641046a220d200a4102746a280200211020092800002111200441346a200e200f4105746a200841057410e9081a200441046a200d200f4102746a200841027410e9081a2006200a3b0132200241e0006a41086a20024180016a41086a2209290300370300200241e0006a41106a20024180016a41106a220f290300370300200241e0006a41186a20024180016a41186a220d280200360200200220022903800137036020042006200c1b22082f0132210a200d200241c0006a41186a280200360200200f200241c0006a41106a2903003703002009200241c0006a41086a2903003703002002200229034037038001200841346a210c200a41016a210e0240200741016a2212200a4b22130d00200c20124105746a200c20074105746a200e2007417f736a41057410ea081a0b200c20074105746a220a2003360000200a200229038001370004200a410c6a2009290300370000200a41146a200f290300370000200a411c6a200d280200360000200841046a210a024020130d00200a20124102746a200a20074102746a200e2007417f736a41027410ea081a0b200a20074102746a220b2001360200200241206a41086a2214200241e0006a41086a22152903002216370300200241206a41106a2217200241e0006a41106a22182903002219370300200241206a41186a221a200241e0006a41186a221b280200220a3602002008200e3b013220022002290360221c370320200241186a220e200a360200200241106a22122019370300200241086a221320163703002002201c370300024002400240200628020022010d00410021050c010b2010211d4100210a2004211e2011211f034020062f01302108200241c0006a41186a2220200e280200360200200241c0006a41106a22212012290300370300200241c0006a41086a22222013290300370300200220022903003703402005200a470d0620012f0132220c410b490d024100210941042106024020084105490d0020082106024002402008417b6a0e020201000b200841796a210841012109410621060c010b4100210841012109410521060b41c403102c2204450d03200441003b013220044100360200200420012f013222102006417f736a220a3b0132200141346a222320064105746a2207280000211120024180016a41186a22032007411c6a28000036020020024180016a41106a220f200741146a29000037030020024180016a41086a220d2007410c6a2900003703002002200729000437038001200a410c4f0d072010200641016a22076b200a470d08200141046a222420064102746a2802002110200441346a202320074105746a200a41057410e9081a200441046a2024200741027422076a200a41027410e9081a200120063b01322015200d2903003703002018200f290300370300201b2003280200360200200220022903800137036020042f0132220a41016a2123200a410c4f0d09200c20066b22062023470d0a200541016a210520044194036a200120076a4194036a200641027410e9081a4100210602400340200420064102746a4194036a280200220720063b01302007200436020020062006200a4922076a2206200a4b0d0120070d000b0b201a201b2802003602002017201829030037030020142015290300370300200220022903603703202004200120091b22072f0132210c20032020280200360200200f2021290300370300200d20222903003703002002200229034037038001200741346a210a200c41016a21090240200841016a2206200c4b22200d00200a20064105746a200a20084105746a2008417f7320096a41057410ea081a0b200a20084105746a220a201f360000200a200229038001370004200a410c6a200d290300370000200a41146a200f290300370000200a411c6a2003280200360000200741046a210a024020200d00200a20064102746a200a20084102746a2008417f7320096a41027410ea081a0b200a2008410274220f6a201d36020020074194036a210a0240200841026a220d200c41026a22034f0d00200a200d4102746a200a20064102746a2006417f7320036a41027410ea081a0b200a20064102746a201e360200200720093b01320240200620034f0d002007200f6a4198036a210603402006280200220a200841016a22083b0130200a2007360200200641046a210620092008470d000b0b2013201429030037030020122017290300370300200e201a28020036020020022002290320370300200121062001280200220721012010211d2005210a2004211e2011211f20070d000b0b200241c0006a41186a200e2802002206360200200241c0006a41106a20122903002216370300200241c0006a41086a2013290300221937030020022002290300221c370340201b200636020020182016370300201520193703002002201c370360200028020c220a2802042207450d09200a280200210841c403102c2206450d012006200736029403200641003b013220064100360200200741003b013020072006360200200a2006360204200a200841016a36020020024180016a41186a200241e0006a41186a28020036020020024180016a41106a200241e0006a41106a29030037030020024180016a41086a200241e0006a41086a290300370300200220022903603703800120082005470d0a20062f01322208410b4f0d0b200620084105746a220741346a2011360000200741386a200229038001370000200741c0006a20024188016a290300370000200741c8006a20024190016a290300370000200741d0006a20024198016a2802003600002006200841016a22073b0132200620074102746a4194036a2004360200200620084102746a41046a2010360200200420073b013020042006360200200a200a28020841016a3602080c0d0b20012f0132210a20024180016a41186a2205200241c0006a41186a28020036020020024180016a41106a2203200241c0006a41106a29030037030020024180016a41086a220f200241c0006a41086a2903003703002002200229034037038001200841016a2106200141346a2104200a41016a210902402008200a4f22070d00200420064105746a200420084105746a2008417f7320096a41057410ea081a0b200420084105746a2204201f36000020042002290380013700042004410c6a200f290300370000200441146a20032903003700002004411c6a2005280200360000200141046a2104024020070d00200420064102746a200420084102746a2008417f7320096a41027410ea081a0b2004200841027422056a201d36020020014194036a2104200a41026a2108024020070d00200520046a41086a200420064102746a2006417f7320086a41027410ea081a0b200420064102746a201e360200200120093b0132200620084f0d0b200a41016a210720012006417f6a22064102746a4198036a210403402004280200220a200641016a22063b0130200a2001360200200441046a210420072006470d000c0c0b0b1036000b2008410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b41ac9cc700413541e49cc7001039000b200a410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b2023410c41f49cc700104d000b41f49bc7004128419c9cc7001039000b41e8aac700412b4194abc7001039000b41e899c700413041989ac7001039000b41a89ac700412041c89ac7001039000b200028020c2206200628020841016a3602080b200241a0016a2400200b0bf60d04067f017e057f027e230041800d6b2202240010a505200141086a28020021032001410c6a280200210420012802042105200241a00a6a2001280200220610a6052005200441b0026c6a2107200241a00a6a10a7052101024002400240024002400240024020040d0042002108200521010c010b20024180056a41047221090240024020010d00200241e9026a210a420021084100210b20052101024003402001280200210c200241c0076a200141046a220d41ac0210e9081a200241a00a6a200d41ac0210e9081a200c411c460d0120024180056a200241a00a6a41ac0210e9081a200241d0026a20024180056a41ac0210e9081a200241246a200241d0026a41ac0210e9081a2002200c360280052009200241246a41ac0210e9081a200241b0076a20024180056a109704200241a00a6a20024180056a41b00210e9081a200241c0076a200610a605200241d0026a200241a00a6a200241c0076a10dd020240024020022903d8024201510d0020022903b007210e0c010b20022903b007220e20022903e002220f200f200e561b210e0b200241a00a6a41086a200a41086a290000370300200241a00a6a410f6a200a410f6a2900003700002002200a2900003703a00a427f2008200e7c220e200e2008541b2108024020022903d0024201510d00200b41016a210b200141b0026a22012007470d010c040b0b200141b0026a21010c050b200141b0026a21010c060b200241e9026a210c4100210b200521014200210803402001280200210a200241c0076a200141046a220d41ac0210e9081a200241a00a6a200d41ac0210e9081a200a411c460d0520024180056a200241a00a6a41ac0210e9081a200241d0026a20024180056a41ac0210e9081a200241246a200241d0026a41ac0210e9081a2002200a360280052009200241246a41ac0210e9081a200241b0076a20024180056a109704200241c0076a20024180056a41b00210e9081a200241f0096a200610a6050240024020022802980a220a280208200241c0076a200a28020c28020c1101000d00200a200a280200417f6a220d360200200241023a00f002200241003a00e802200242003703d802200242013703d0020240200d0d00200a280208200a28020c2802001103000240200a28020c280204450d00200a280208102e0b200a41046a220d200d280200417f6a220d360200200d0d00200a102e0b200241c0076a10dc0220022903b007210e0c010b200241a00a6a200241c0076a41b00210e9081a200241d00c6a41286a200241f0096a41286a280200360200200241d00c6a41206a200241f0096a41206a290300370300200241d00c6a41186a200241f0096a41186a290300370300200241d00c6a41106a200241f0096a41106a290300370300200241d00c6a41086a200241f0096a41086a290300370300200220022903f0093703d00c200241d0026a200241a00a6a200241d00c6a10dd02024020022903d8024201510d0020022903b007210e0c010b20022903b007220e20022903e002220f200f200e561b210e0b200241a00a6a41086a200c41086a290000370300200241a00a6a410f6a200c410f6a2900003700002002200c2900003703a00a427f2008200e7c220e200e2008541b210820022903d0024201510d03200b41016a210b200141b0026a22012007470d000b0b200721010b200241a00a6a200241c0076a41ac0210e9081a0c030b200141b0026a21010b200241086a410f6a200241a00a6a410f6a290000370000200241086a41086a200241a00a6a41086a290300370300200220022903a00a370308200b41016aad42e88dfb007e20087c2108024020072001460d0003402001108b022007200141b0026a2201470d000b0b200842e0b8a1077c210802402003450d00200341b0026c450d002005102e0b200241c0076a410f6a2201200241086a410f6a290000370000200241c0076a41086a2207200241086a41086a290300370300200220022903083703c00710a805200041186a41003a0000200041106a20083703002000420137030820004201370300200020022903c007370019200041216a2007290300370000200041286a20012900003700000c020b200141b0026a21010b024020072001460d0003402001108b022007200141b0026a2201470d000b0b02402003450d00200341b0026c450d002005102e0b200241a00a6a41086a41063a0000200241113a00a00a200241a00a6a10fe01200241c0076a41086a2201200241086a41086a290300370300200241c0076a410f6a2207200241086a410f6a290000370000200220022903083703c00710a905200041186a41003a0000200041106a2004ad42e88dfb007e20087c42e0b8a1077c3703002000420137030820004200370300200020022903c007370019200041216a2001290300370000200041286a20072900003700000b200241800d6a24000b0400102b0ba10701087f230041c0006b21020240024002400240024020012d00000e03000102000b4102210302400240024020012d00010e03000102000b410021030c010b2002413c6a41026a200141076a2d00003a0000200241206a41086a200141186a290000370300200241206a41106a200141206a2f00003b01002002200141056a2f00003b013c2002200141106a2900003703202001410c6a2800002104200141086a2800002105200141046a2d00002106200141026a2f00002107410121030b2002411c6a41026a2002413c6a41026a2d00003a0000200241086a200241206a41086a290300370300200241106a200241206a41106a2f01003b0100200220022f013c3b011c20022002290320370300410021080c030b41022106024002400240200141046a2d00000e03000102000b2001410c6a2802002104200141086a2802002105410021060c010b2002413e6a200141076a2d00003a0000200241206a41086a200141186a2900003703002002412d6a2001411d6a2900003700002002200141056a2f00003b013c2002200141106a2900003703202001410c6a2800002104200141086a2800002105410121060b2002411c6a41026a2002413c6a41026a2d00003a0000200241086a200241206a41086a290300370300200241106a200241206a41106a290300370300200220022f013c3b011c20022002290320370300410121080c010b4102210841022106024002400240200141046a2d00000e03000102000b2001410c6a2802002104200141086a2802002105410021060c010b2002413e6a200141076a2d00003a0000200241206a41086a200141186a2900003703002002412d6a2001411d6a2900003700002002200141056a2f00003b013c2002200141106a2900003703202001410c6a2800002104200141086a2800002105410121060b2002411c6a41026a2002413c6a41026a2d00003a0000200241086a200241206a41086a290300370300200241106a200241206a41106a290300370300200220022f013c3b011c200220022903203703000b0b02402001280228220128020041016a220941014b0d0000000b200020033a0001200020083a000020002001360228200041046a20063a0000200041026a20073b010020012009360200200041056a20022f011c3b00002000410c6a2004360200200041086a2005360200200041106a2002290300370200200041076a2002411c6a41026a2d00003a0000200041186a200241086a290300370200200041206a200241106a2903003702000bcc0101037f200028022822012001280200417f6a220236020020002d0001210302400240024020002d00000d004100210020020d022001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a22023602002002450d010c020b4101210020020d012001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d010b2001102e0b200341ff01714100472000720b040010280b040010230bce0902037f017e230041b0016b220224002002412036020c20022001360208200241106a2001412010ed0202400240200228021022010d00200041033a00200c010b200241186a280200210320022802142104200241003a0060024002402003450d00200220012d00003a0040200241013a0060024020034101460d00200220012d00013a0041200241023a006020034102460d00200220012d00023a0042200241033a006020034103460d00200220012d00033a0043200241043a006020034104460d00200220012d00043a0044200241053a006020034105460d00200220012d00053a0045200241063a006020034106460d00200220012d00063a0046200241073a006020034107460d00200220012d00073a0047200241083a006020034108460d00200220012d00083a0048200241093a006020034109460d00200220012d00093a00492002410a3a00602003410a460d00200220012d000a3a004a2002410b3a00602003410b460d00200220012d000b3a004b2002410c3a00602003410c460d00200220012d000c3a004c2002410d3a00602003410d460d00200220012d000d3a004d2002410e3a00602003410e460d00200220012d000e3a004e2002410f3a00602003410f460d00200220012d000f3a004f200241103a006020034110460d00200220012d00103a0050200241113a006020034111460d00200220012d00113a0051200241123a006020034112460d00200220012d00123a0052200241133a006020034113460d00200220012d00133a0053200241143a006020034114460d00200220012d00143a0054200241153a006020034115460d00200220012d00153a0055200241163a006020034116460d00200220012d00163a0056200241173a006020034117460d00200220012d00173a0057200241183a006020034118460d00200220012d00183a0058200241193a006020034119460d00200220012d00193a00592002411a3a00602003411a460d00200220012d001a3a005a2002411b3a00602003411b460d00200220012d001b3a005b2002411c3a00602003411c460d00200220012d001c3a005c2002411d3a00602003411d460d00200220012d001d3a005d2002411e3a00602003411e460d00200220012d001e3a005e2002411f3a00602003411f460d00200241206a41106a200241c0006a41106a290300370300200241206a41086a200241c0006a41086a290300370300200220012d001f3a005f200241206a41186a200241c0006a41186a290300370300200241203a00602002200229034022053703682002200537032020034120460d014100210302400240024020012d00200e03020001040b410121030c010b410221030b20002002290320370000200041186a200241206a41186a290300370000200041106a200241206a41106a290300370000200041086a200241206a41086a2903003700000c020b200241003a00600b20024100360270200242013703682002410a3602242002200241086a3602202002200241e8006a3602ac01200241d4006a410136020020024201370244200241909dc5003602402002200241206a360250200241ac016a419cebc000200241c0006a103d1a2002280268200228027010ef020240200228026c450d002002280268102e0b410321030b200020033a00202004450d002001102e0b200241b0016a24000be30d020f7f077e230041c0026b220224002002412036021420022001360210200241186a2001412010ed020240024002400240200228021822030d00200041033a003c0c010b200228021c21042002200241206a28020036022c20022003360228200241086a200241286a10ab01024002400240024020022802080d00200228020c2205200228022c4106762201200120054b1b22064106742201417f4c0d060240024020060d00410821070c010b2001102c2207450d060b02400240024020050d00410021050c010b41002108410021090340200241003a0088012009220a41016a2109200228022c210b417f210c41002101024002400240024002400340200b2001460d01200241e8006a20016a2002280228220d2d00003a00002002200b200c6a36022c2002200d41016a3602282002200141016a220e3a008801200c417f6a210c200e2101200e4120470d000b200241386a41186a2201200241e8006a41186a290300370300200241386a41106a220c200241e8006a41106a290300370300200241386a41086a220f200241e8006a41086a29030037030020022002290368370338200e41ff01714120490d0120024180026a41086a2210200f29030037030020024180026a41106a220f200c29030037030020024180026a41186a220c20012903003703002002200229033837038002200b200e6b22014110490d012002200d41116a3602282002200141706a36022c200d41096a2900002111200d2900012112200241e8006a200241286a10e9012002280268220e450d01200241c0016a41086a20102903002213370300200241c0016a41106a200f2903002214370300200241c0016a41186a200c2903002215370300200241a0016a41086a22012013370300200241a0016a41106a220c2014370300200241a0016a41186a220b2015370300200220022903800222133703c001200220133703a001200229026c2113200a2006470d04200641016a220d2006490d0e2006410174220f200d200f200d4b1b220d4104200d41044b1b220d41ffffff1f71200d46410374210f200d410674210d20060d02200241003602680c030b200141ff0171450d00200241003a0088010b0240200a450d00200741346a2101034002402001280200220c450d00200c41306c450d002001417c6a280200102e0b200141c0006a2101200841406a22080d000b0b200641ffffff1f710d050c060b20024108360270200220073602682002200641067436026c0b200241386a200d200f200241e8006a107d2002280240210d024020022802384101470d00200d0d0a0c0b0b200228023c2107200d41067621060b20012903002114200c2903002115200b290300211620022903a00121172007200a4106746a2201201237032020012017370300200120133702342001200e360230200141286a2011370300200141186a2016370300200141106a2015370300200141086a2014370300200841c0006a210820092005470d000b0b2007450d01200241e8006a200241286a10a401024020022903684201510d00200241386a41286a20024198016a290300370300200241386a41206a200241e8006a41286a290300370300200241386a41186a200241e8006a41206a290300370300200241386a41106a200241e8006a41186a290300370300200241c0006a200241e8006a41106a29030037030020022002290370370338200228022c2201450d002002280228220c2d0000210e20022001417f6a36022c2002200c41016a360228410021010240200e0e03050400010b410221010c040b02402005450d00200720054106746a210b2007210103402001220c41c0006a21010240200c41346a280200220e450d00200e41306c450d00200c41306a280200102e0b200b2001470d000b0b200641ffffff1f71450d010b2007102e0b20024100360240200242013703382002410a3602a4022002200241106a3602a0022002200241386a36028002200241fc006a41013602002002420137026c200241909dc5003602682002200241a0026a36027820024180026a419cebc000200241e8006a103d1a2002280238200228024010ef020240200228023c450d002002280238102e0b410321010c020b410121010b20002002290338370300200041286a200241386a41286a290300370300200041206a200241386a41206a290300370300200041186a200241386a41186a290300370300200041106a200241386a41106a290300370300200041086a200241386a41086a290300370300200241e8006a41026a220c200241356a41026a2d00003a0000200220022f00353b0168200020053602382000200636023420002007360230200020022f01683b003d2000413f6a200c2d00003a00000b200020013a003c2004450d002003102e0b200241c0026a24000f0b1036000b1038000b990805067f017e037f037e027f230041f0016b220224002002412036020c20022001360208200241106a2001412010ed0202400240200228021022030d00200041003602000c010b200228021421042002200241186a280200360224200220033602202002200241206a10ab010240024020022802000d00024002402002280204220520022802244105762201200120054b1b22014105742206417f4c0d000240024020010d00410121070c010b2006102c2207450d020b2001ad2108024002402005450d00410021090340200241003a00a8012002280224417f6a2101200941016a2109410021060240024002400240024003402001417f460d0120024188016a20066a2002280220220a2d00003a00002002200a41016a3602202002200641016a220a3a00a801200220013602242001417f6a2101200a2106200a4120470d000b200241d0016a41186a220120024188016a41186a290300370300200241d0016a41106a220620024188016a41106a290300370300200241d0016a41086a220b20024188016a41086a29030037030020022002290388013703d001200a41ff01714120490d01200241c8006a41086a200b290300220c370300200241c8006a41106a2006290300220d370300200241c8006a41186a2001290300220e370300200241286a41186a220a200e370300200241286a41106a220b200d370300200241286a41086a220f200c370300200220022903d001220c3703682002200c3703482002200c3703282008422088220ca722012008a7470d04200141016a22062001490d0820014101742210200620062010491b22064104200641044b1b220641ffffff3f7120064621102006410574210620010d0220024100360288010c030b200641ff0171450d00200241003a00a8010b200842ffffff3f83500d082007102e0c080b200241013602900120022007360288012002200c4205863e028c010b200241d0016a2006201020024188016a107d20022802d801210620022802d0014101460d0320022802d40121072006410576ad21080b200720014105746a22062002290328370000200641186a200a290300370000200641106a200b290300370000200641086a200f290300370000200842ffffffff0f83200141016aad42208684210820092005470d000b0b2007450d0320002008370204200020073602000c040b20060d010b1038000b1036000b200241003602d801200242013703d0012002410a3602b4012002200241086a3602b0012002200241d0016a3602682002419c016a41013602002002420137028c01200241909dc500360288012002200241b0016a36029801200241e8006a419cebc00020024188016a103d1a20022802d00120022802d80110ef02024020022802d401450d0020022802d001102e0b200041003602000b2004450d002003102e0b200241f0016a24000bf30a06087f027e027f027e017f017e230041a0016b220324002003200236021420032001360210200341186a2001200210ed0202400240024002400240200328021822010d00200041023a00000c010b200328021c21042003200341206a280200220236024c20032001360248024002402002450d0020012d0000210520032002417f6a220636024c2003200141016a3602480240024002400240024020050e020001050b20064104490d04200341c4006a41026a200341d8006a41026a2d00003a0000200341286a41086a200341f8006a41086a290300370300200341286a41106a200341f8006a41106a290300370300200341286a41186a200341f8006a41186a280200360200200320032f00583b0144200320032903783703282001280001210720032002417b6a36024c2003200141056a360248410021020c010b200341086a200341c8006a10ab0120032802080d03200328024c2202200328020c2205490d032005417f4c0d060240024020050d00410121060c010b200510322206450d08200328024c21020b20022005490d0220062003280248200510e9081a200328024c22022005490d082003200220056b36024c2003200328024820056a360248200341f8006a200341c8006a10930120032d00784101460d012003419e016a20032d007b3a0000200341d8006a41086a200341f8006a41106a290300370300200341d8006a41106a200341f8006a41186a290300370300200341d8006a41186a20034198016a2d00003a0000200320032f00793b019c012003200341f8006a41086a290300370358200328024c22024110490d01200328027c210720032003280248220841106a22093602482003200241706a220a36024c200a4104490d01200841086a290000210b2008290000210c20032002416c6a220836024c2003200941046a3602482008450d012009280000210d20032002416b6a220e36024c2003200941056a3602484100210a0240024020092d00040e020100030b200e4104490d022003200241676a36024c2003200941096a360248200928000521084101210a0b200341c4006a41026a2003419c016a41026a2d00003a0000200341286a41086a200341d8006a41086a290300370300200341286a41106a200341d8006a41106a290300370300200341286a41186a200341d8006a41186a2d00003a0000200341c3006a200341d5006a41026a2d00003a0000200320032f019c013b014420032003290358370328200320032f00553b0041410121020b200341d8006a41026a200341c4006a41026a2d000022093a0000200341f8006a41086a200341286a41086a290300220f370300200341f8006a41106a200341286a41106a2903002210370300200341f8006a41186a200341286a41186a280200220e360200200320032f014422113b0158200320032903282212370378200041036a20093a0000200020113b0001200041046a2007360000200041c8006a200b370000200041c0006a200c370000200041086a2012370000200041106a200f370000200041186a2010370000200041206a200e360000200041386a2008360000200041346a200a360000200041306a200d3600002000412c6a2005360000200041286a2005360000200041246a20063600000c030b2005450d010b2006102e0b20034100360230200342013703282003410a36025c2003200341106a3602582003200341286a36029c012003418c016a41013602002003420137027c200341909dc5003602782003200341d8006a360288012003419c016a419cebc000200341f8006a103d1a2003280228200328023010ef020240200328022c450d002003280228102e0b410221020b200020023a00002004450d002001102e0b200341a0016a24000f0b1038000b1036000b2005200241b8b2c0001056000bbf0302057f017e230041e0006b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022010d00200041003602000c010b200328021421022003200341186a280200360224200320013602202003200341206a10ab0102400240024002402003280200450d00200341003602480c010b200341c8006a200341206a200328020410920120032802482204450d00200328024c210520032802242206410f4b0d01200541ffffff3f71450d002004102e0b20034100360230200342013703282003410a36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341909dc5003602482003200341386a360258200341c4006a419cebc000200341c8006a103d1a2003280228200328023010ef020240200328022c450d002003280228102e0b200041003602000c010b2003200641706a36022420032003280220220641106a360220200341c8006a41086a280200210720062900002108200041186a200641086a290000370300200041106a2008370300200041086a200736020020002005360204200020043602000b2002450d002001102e0b200341e0006a24000bc20201027f23004190056b220324002003200236020420032001360200200341086a2001200210ed0202400240200328020822010d002000411c3602000c010b200328020c21022003200341106a2802003602fc04200320013602f804200341c8026a200341f8046a1098010240024020032802c8022204411c470d0020034100360220200342013703182003410a3602840520032003360280052003200341186a36028c05200341dc026a4101360200200342013702cc02200341909dc5003602c802200320034180056a3602d8022003418c056a419cebc000200341c8026a103d1a2003280218200328022010ef02200328021c450d012003280218102e0c010b200341186a200341c8026a41047241ac0210e9081a200041046a200341186a41ac0210e9081a0b200020043602002002450d002001102e0b20034190056a24000bf90202037f027e230041d0006b220224002002412036020420022001360200200241086a2001412010ed0202400240200228020822010d00200041033a00100c010b200228020c21030240024002400240200241086a41086a28020022044108490d0020044178714108460d0020044110460d00200129000021052001290008210641002104024020012d00100e03030200010b410221040c020b20024100360220200242013703182002410a36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241909dc5003602382002200241286a360248200241346a419cebc000200241386a103d1a2002280218200228022010ef020240200228021c450d002002280218102e0b410321040c020b410121040b2002200228003836021820022002413b6a28000036001b200020063703082000200537030020002002280218360011200041146a200228001b3600000b200020043a00102003450d002001102e0b200241d0006a24000b901308057f017e057f027e017f017e037f047e23004180026b220324002003200236020c20032001360208200341106a2001200210ed020240024002400240200328021022020d00200041023a00000c010b200328021421042003200341186a280200220536025420032002360250024002402005450d0020022d0000210120032005417f6a22063602542003200241016a3602500240024002400240024020010e020001050b2003200341d0006a10ab0120032802000d0420032802042207200328025441306e2201200120074b1bad42307e2208422088a70d082008a72201417f4c0d080240024020010d00410821090c010b2001102c2209450d080b200141306e210a0240024020070d00410021070c010b200341d8016a41017221064100210b41002105034002400240200328025422014104490d002003280250220c350000210820032001417c6a3602542003200c41046a360250200341d8016a200341d0006a10b10420032d00d801220c4102470d010b20034188016a411f6a200341b0016a411f6a29000037000020034188016a41186a200341b0016a41186a290300370300200a450d07200a41306c0d060c070b200341b0016a411f6a22012006411f6a290000370000200341b0016a41186a220d200641186a29000037030020034188016a41086a200641086a290000220e37030020034188016a41106a200641106a290000220f37030020034188016a41186a2210200d29030037030020034188016a411f6a220d200129000037000020032006290000221137038801200341e0006a411f6a2212200d290000370000200341e0006a41186a220d2010290300370300200341e0006a41106a2210200f370300200341e0006a41086a2213200e3703002003201137036002402005200a470d00200a41016a2201200a490d0b200a41017422142001201420014b1b22014104200141044b1bad42307e220e422088a7454103742101200ea7211402400240200a0d00200341003602d8010c010b200341083602e001200320093602d8012003200a41306c3602dc010b200341b0016a20142001200341d8016a107d20032802b8012101024020032802b0014101470d0020010d0b0c0c0b20032802b4012109200141306e210a0b2009200b6a22012008370300200141086a200c3a0000200141096a2003290360370000200141116a2013290300370000200141196a2010290300370000200141216a200d290300370000200141286a2012290000370000200b41306a210b2007200541016a2205470d000b0b2009450d04200328025422014110490d0220032003280250220641106a3602502003200141706a220b360254200b4110490d02200641086a290000210f200629000021112003200641206a220b3602502003200141606a220536025420054104490d02200641186a29000021082006290010210e2003200b41046a36025020032001415c6a220636025420064110490d02200b2800002106200341386a200b410c6a290000370300200341cc006a41026a200341dc006a41026a2d00003a00002003200e370320200320032f005c3b014c200320063602402003200b2900043703302003200837032820032001414c6a3602542003200b41146a360250410021010c010b20064110490d0320032005416f6a220a3602542003200241116a360250200241096a29000021082002290001210e41002101200341003a00f801416e2106024002400240024002400240024002400340200a2001460d01200341d8016a20016a200220016a220b41116a2d00003a00002003200520066a3602542003200b41126a3602502003200141016a220b3a00f8012006417f6a2106200b2101200b4120470d000b20034188016a41026a220120032d00da013a0000200320032f01d8013b018801200b41ff01714120490d0b200341ef016a290000210f20032900e701211120032d00f701210c20032800e301210720032800df01210a20032800db012109200341dc006a41026a20012d00003a0000200320032f0188013b015c2005416f6a200b460d0b2002200b6a220141116a2d0000210d2003200520066a22063602542003200141126a36025041002110200d0e07070102030405060b0b200141ff0171450d0a200341003a00f8010c0a0b410121100c050b410221100c040b410321100c030b410421100c020b410521100c010b410621100b20064110490d032003200141226a220d36025020032005200b6b220b415e6a220636025420064110490d032001411a6a2900002115200141126a29000021162003200141326a22053602502003200b414e6a220636025420064104490d032001412a6a2900002117200d2900002118200528000021062003200141366a220d3602502003200b414a6a220536025420054110490d03200341cc006a41026a200341dc006a41026a2d00003a0000200341c0006a2015370300200341206a41106a2008370300200320032f015c3b014c2003200b41ba7f6a3602542003200141c6006a360250200320163703382003200e370328200320103a00212003200c3a0020200320032801b0013601222003200341b4016a2f01003b01262001413e6a290000210e200d2900002108410121010b200341b0016a41026a200341cc006a41026a2d0000220b3a0000200341d8016a41086a2205200341206a41086a290300370300200341d8016a41106a220c200341206a41106a290300370300200341d8016a41186a220d200341206a41186a290300370300200341d8016a41206a2210200341206a41206a290300370300200320032f014c22123b01b001200320032903203703d801200041186a200f370000200041106a2011370000200041036a200b3a0000200020123b00012000410c6a2007360000200041086a200a360000200041046a2009360000200041e8006a2006360000200041e0006a200e370000200041d8006a2008370000200041d0006a2017370000200041c8006a2018370000200041206a20032903d801370000200041286a2005290300370000200041306a200c290300370000200041386a200d290300370000200041c0006a20102903003700000c030b200a450d01200a41306c450d010b2009102e0b20034100360228200342013703202003410a3602b4012003200341086a3602b0012003200341206a36028801200341ec016a4101360200200342013702dc01200341909dc5003602d8012003200341b0016a3602e80120034188016a419cebc000200341d8016a103d1a2003280220200328022810ef0202402003280224450d002003280220102e0b410221010b200020013a00002004450d002002102e0b20034180026a24000f0b1036000b1038000b8a0b02027f067e230041d0016b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022010d00200041023a00300c010b200341186a280200210220032802142104200341003a008801024002402002450d00200320012d00003a0068200341013a008801024020024101460d00200320012d00013a0069200341023a00880120024102460d00200320012d00023a006a200341033a00880120024103460d00200320012d00033a006b200341043a00880120024104460d00200320012d00043a006c200341053a00880120024105460d00200320012d00053a006d200341063a00880120024106460d00200320012d00063a006e200341073a00880120024107460d00200320012d00073a006f200341083a00880120024108460d00200320012d00083a0070200341093a00880120024109460d00200320012d00093a00712003410a3a0088012002410a460d00200320012d000a3a00722003410b3a0088012002410b460d00200320012d000b3a00732003410c3a0088012002410c460d00200320012d000c3a00742003410d3a0088012002410d460d00200320012d000d3a00752003410e3a0088012002410e460d00200320012d000e3a00762003410f3a0088012002410f460d00200320012d000f3a0077200341103a00880120024110460d00200320012d00103a0078200341113a00880120024111460d00200320012d00113a0079200341123a00880120024112460d00200320012d00123a007a200341133a00880120024113460d00200320012d00133a007b200341143a00880120024114460d00200320012d00143a007c200341153a00880120024115460d00200320012d00153a007d200341163a00880120024116460d00200320012d00163a007e200341173a00880120024117460d00200320012d00173a007f200341183a00880120024118460d00200320012d00183a008001200341193a00880120024119460d00200320012d00193a0081012003411a3a0088012002411a460d00200320012d001a3a0082012003411b3a0088012002411b460d00200320012d001b3a0083012003411c3a0088012002411c460d00200320012d001c3a0084012003411d3a0088012002411d460d00200320012d001d3a0085012003411e3a0088012002411e460d00200320012d001e3a0086012003411f3a0088012002411f460d00200341c8006a41106a200341e8006a41106a290300370300200341c8006a41086a200341e8006a41086a290300370300200320012d001f3a008701200341c8006a41186a200341e8006a41186a290300370300200341203a0088012003200329036822053703900120032005370348200241606a22024110490d0120024110460d01200141286a290000210520012900202106410021020240024020012d00300e020100030b410121020b200341206a41186a200341c8006a41186a2903002207370300200341206a41106a200341c8006a41106a2903002208370300200341206a41086a200341c8006a41086a290300220937030020032003290348220a370320200320032800413602682003200341c4006a28000036006b20002005370308200020063703002000200a370310200041186a2009370300200041206a2008370300200041286a2007370300200041346a200328006b360000200020032802683600310c020b200341003a0088010b200341003602980120034201370390012003410a36024c2003200341086a360248200320034190016a360220200341fc006a41013602002003420137026c200341909dc5003602682003200341c8006a360278200341206a419cebc000200341e8006a103d1a20032802900120032802980110ef020240200328029401450d00200328029001102e0b410221020b200020023a00302004450d002001102e0b200341d0016a24000bf80403047f017e067f230041f0006b220324002003200236021c20032001360218200341206a2001200210ed0202400240200328022022010d00200041003602080c010b200328022421042003200341286a2802002202360234200320013602300240024020024104490d00200128000021052003200141046a36023020032002417c6a220636023420064104490d00200128000421062003200241786a3602342003200141086a360230200341106a200341306a10ab0102402003280210450d00200341003602580c010b200341d8006a200341306a200328021410920120032802582202450d00200329025c2107200341086a200341306a10ab01024002402003280208450d00200341003602580c010b200341d8006a200341306a200328020c10920120032802582208450d00200328025c210902402003280234220a4104490d00200341e0006a280200210b2003280230220c280000210d2003200a417c6a3602342003200c41046a3602302002450d022000200737020c200020023602082000200636020420002005360200200041206a200d3602002000411c6a200b360200200041186a2009360200200041146a20083602000c030b200941ffffff3f71450d002008102e0b200742ffffff3f83500d002002102e0b20034100360240200342013703382003410a36024c2003200341186a3602482003200341386a360254200341ec006a41013602002003420137025c200341909dc5003602582003200341c8006a360268200341d4006a419cebc000200341d8006a103d1a2003280238200328024010ef020240200328023c450d002003280238102e0b200041003602080b2004450d002001102e0b200341f0006a24000ba40c03057f027e0c7f230041f0016b220324002003200236020420032001360200200341086a2001200210ed0202400240200328020822040d00200041023602100c010b200328020c21052003200341106a280200220636025c2003200436025841002101200341003a00a8012006417f6a21020240024002400240024002400240034020062001460d0120034188016a20016a200420016a22072d00003a00002003200741016a3602582003200141016a22073a00a8012003200236025c2002417f6a21022007210120074120470d000b200341d0016a41186a220120034188016a41186a290300370300200341d0016a41106a220220034188016a41106a290300370300200341d0016a41086a220620034188016a41086a29030037030020032003290388013703d001200741ff01714120490d03200341e8006a41086a2006290300370300200341e8006a41106a2002290300370300200341e8006a41186a2001290300370300200320032903d00137036820034188016a200341d8006a10930120032d0088014101460d03200341b0016a41186a200341a1016a2201290000370300200341b0016a41106a20034199016a2202290000370300200341b0016a41086a20034191016a220729000037030020032003290089013703b00120034188016a200341d8006a10930120032d0088014101460d03200341d0016a41186a2001290000370300200341d0016a41106a2002290000370300200341d0016a41086a200729000037030020032003290089013703d001200328025c22024110490d032003200241706a220636025c20032003280258220141106a22073602582006450d03200141086a29000021082001290000210920032002416f6a220636025c2003200741016a3602584100210120072d00000e020201030b200141ff0171450d02200341003a00a8010c020b20064104490d0120032002416b6a36025c2003200741056a3602582007280001210a410121010b20034188016a200341d8006a10e9012003280288012207450d00200328028c0121020240200328025c2206450d0020034190016a280200210b2003280258220c2d0000210d20032006417f6a36025c2003200c41016a36025841002106200d0e020302000b2002450d00200241306c450d002007102e0b200341003602d801200342013703d0012003410a3602b401200320033602b0012003200341d0016a3602682003419c016a41013602002003420137028c01200341909dc500360288012003200341b0016a36029801200341e8006a419cebc00020034188016a103d1a20032802d00120032802d80110ef02024020032802d401450d0020032802d001102e0b410221010c020b410121060b20034188016a41186a220c200341e8006a41186a29030037030020034188016a41106a220d200341e8006a41106a29030037030020034188016a41086a220e200341e8006a41086a290300370300200341386a41086a220f200341b0016a41086a290300370300200341386a41106a2210200341b0016a41106a290300370300200341386a41186a2211200341b0016a41186a290300370300200341186a41086a2212200341d0016a41086a290300370300200341186a41106a2213200341d0016a41106a290300370300200341186a41186a2214200341d0016a41186a2903003703002003200329036837038801200320032903b001370338200320032903d001370318200341146a41026a2215200341e5006a41026a2d00003a0000200320032f00653b01142000200837030820002009370300200041206a200b3602002000411c6a2002360200200041186a20073602002000200a360214200041246a2003290388013702002000412c6a200e290300370200200041346a200d2903003702002000413c6a200c290300370200200041c4006a2003290338370200200041cc006a200f290300370200200041d4006a2010290300370200200041dc006a2011290300370200200041fc006a2014290300370200200041f4006a2013290300370200200041ec006a2012290300370200200041e4006a200329031837020020004184016a20063a000020004187016a20152d00003a0000200020032f01143b0085010b200020013602102005450d002004102e0b200341f0016a24000bfc0d05037f017e097f027e057f230041c0016b22022400200241086a200110ab0102400240024020022802080d00200228020c2203200128020441246e2204200420034b1bad42247e2205422088a70d022005a72204417f4c0d0202400240024020040d00410421060c010b2004102c2206450d010b200441246ead2105024002402003450d002002413d6a21072002418b016a220841056a21094100210a03400240024002402001280204220b450d002001280200220c2d000021042001200b417f6a220d3602042001200c41016a3602000240024002400240024002400240024002400240024020040e08000b010b030402050b0b2002200110ab0120022802000d0a2001280204220b20022802042204490d0a2004417f4c0d130240024020040d004101210e0c010b20041032220e450d112001280204210b0b200b2004490d06200e2001280200200410e908210b2001280204220c20044f0d052004200c41b8b2c0001056000b41002104200241003a009801200b417e6a210b02400340200d2004460d01200241f8006a20046a200c20046a220e41016a2d00003a00002001200b3602042001200e41026a3602002002200441016a220e3a009801200b417f6a210b200e2104200e4120460d090c000b0b200441ff0171450d09200241003a0098010c090b200241f8006a200110aa01200228027c220c450d0820022f017820022d007a41107472210b20022d007b210e200229038001220f428080808070832110200fa7210d410121110c070b200241f8006a200110aa01200228027c220c450d0720022f017820022d007a41107472210b20022d007b210e200229038001220f428080808070832110200fa7210d410221110c060b200241f8006a200110aa01200228027c220c450d0620022f017820022d007a41107472210b20022d007b210e200229038001220f428080808070832110200fa7210d410321110c050b200d450d05200c2d000121042001200b417e6a3602042001200c41026a36020020040d05200241b0016a200110fe0520022802b001220e4102460d05200241306a41086a200241f8006a41086a2902003703002002200229027837033020022802b801210d20022802b401210c4104211142002110410021120c020b2001200c20046b3602042001200128020020046a360200200b450d04200241306a41086a200241f8006a41086a29020037030020022002290278370330200b41087621122004ad220f422086200f84220f422088a7210d200fa7210c41052111420021100c010b200e102e0c030b0c010b200220082900003703b001200220092900003700b501200220022903b0013703a001200220022900b5013700a501200e41ff0171411f4d0d0120022f017820022d007a41107472210b200228007b210e200228007f210c200229008301210f200220022900a50137006d200220022903a0013703682002200229006d37005d20022002290368370358200220022903583703482002200229005d37004d2002200229004d37003520022002290348370330200720022f00453b0000200741026a200241c5006a41026a2d00003a0000200f428080808070832110200e4108762112200fa7210d410021110b200241206a41086a200241306a41086a290300220f370300200241106a41086a2213200f37030020022002290330220f3703202002200f3703102005422088220fa722042005a7470d02200441016a221420044f0d010c090b02402005422088a72201450d00200141246c21042006210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012004415c6a22040d000b0b2005a72201450d06200141246c450d062006102e0c060b20044101742215201420142015491b22144104201441044b1bad42247e220f422088a7454102742114200fa721150240024020040d00200241003602780c010b2002410436028001200220063602782002200441246c36027c0b200241306a20152014200241f8006a107d2002280238211420022802304101460d03200228023421062005422088220fa72104201441246ead21050b2006200441246c6a22042010200dad8437000c2004200c36000820042012410874200e41ff0171723600042004200b3b0001200420113a0000200441036a200b4110763a0000200420022903103700142004411c6a2013290300370000200f422086200542ffffffff0f83844280808080107c2105200a41016a220a2003470d000b0b2006450d0220002005370204200020063602000c030b2014450d030b1036000b200041003602000b200241c0016a24000f0b1038000bd00905057f017e047f017e017f230041f0016b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022040d00200041003602000c010b200328021421052003200341186a280200360224200320043602202003200341206a10ab010240024020032802000d00024002402003280204220620032802244105762201200120064b1b22014105742202417f4c0d000240024020010d00410121070c010b2002102c2207450d020b2001ad2108024002402006450d00410021090340200341003a00a8012003280224417f6a2101200941016a2109410021020240024002400240024003402001417f460d0120034188016a20026a2003280220220a2d00003a00002003200a41016a3602202003200241016a220a3a00a801200320013602242001417f6a2101200a2102200a4120470d000b200341b0016a41086a220220034188016a41086a290300370300200341b0016a41106a220b20034188016a41106a290300370300200341b0016a41186a220c20034188016a41186a29030037030020032003290388013703b001410121010240200a41ff01714120490d00200341e8006a41186a200c290300370300200341e8006a41106a200b290300370300200341e8006a41086a2002290300370300200320032903b001370368410021010b200341c8006a41086a2202200341e8006a41086a290300370300200341c8006a41106a220a200341e8006a41106a290300370300200341c8006a41186a220b200341e8006a41186a2903003703002003200329036837034820010d01200341286a41186a220c200b290300370300200341286a41106a220b200a290300370300200341286a41086a220a2002290300370300200320032903483703282008422088220da722012008a7470d04200141016a22022001490d082001410174220e20022002200e491b22024104200241044b1b220241ffffff3f71200246210e2002410574210220010d0220034100360288010c030b0240200241ff0171450d00200341003a00a8010b200341c8006a41086a200341e8006a41086a290300370300200341c8006a41106a200341e8006a41106a290300370300200341c8006a41186a200341e8006a41186a290300370300200320032903683703480b200842ffffff3f83500d082007102e0c080b200341013602900120032007360288012003200d4205863e028c010b200341b0016a2002200e20034188016a107d20032802b801210220032802b0014101460d0320032802b40121072002410576ad21080b200720014105746a22022003290328370000200241186a200c290300370000200241106a200b290300370000200241086a200a290300370000200842ffffffff0f83200141016aad42208684210820092006470d000b0b2007450d0320002008370204200020073602000c040b20020d010b1038000b1036000b200341003602b801200342013703b0012003410a36026c2003200341086a3602682003200341b0016a3602482003419c016a41013602002003420137028c01200341909dc500360288012003200341e8006a36029801200341c8006a419cebc00020034188016a103d1a20032802b00120032802b80110ef02024020032802b401450d0020032802b001102e0b200041003602000b2005450d002004102e0b200341f0016a24000bf40201037f230041e0006b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022010d00200041003602040c010b200328021421042003200341186a2802002202360224200320013602200240024020024104490d002001280000210520032002417c6a3602242003200141046a3602202003200341206a10ab0102402003280200450d00200341003602480c010b200341c8006a200341206a200328020410920120032802482202450d002000200329024c37020820002002360204200020053602000c010b20034100360230200342013703282003410a36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341909dc5003602482003200341386a360258200341c4006a419cebc000200341c8006a103d1a2003280228200328023010ef020240200328022c450d002003280228102e0b200041003602040b2004450d002001102e0b200341e0006a24000bf90604027f027e077f017e230041b0016b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022010d00200042003703000c010b200328021421022003200341106a41086a2802003602442003200136024020034188016a200341c0006a10930102400240024020032d0088014101460d00200341e0006a200341a1016a290000370300200341c8006a41106a20034199016a290000370300200341c8006a41086a20034191016a2900003703002003200329008901370348200328024422044110490d002003200441706a36024420032003280240220441106a360240200441086a29000021052004290000210620034188016a200341c0006a10930120032d0088014101460d00200341e8006a41186a2204200341a1016a290000370300200341e8006a41106a220720034199016a290000370300200341e8006a41086a20034191016a29000037030020032003290089013703682003280244220841104f0d010b20034100360270200342013703682003410a36024c2003200341086a3602482003200341e8006a3602202003419c016a41013602002003420137028c01200341909dc500360288012003200341c8006a36029801200341206a419cebc00020034188016a103d1a2003280268200328027010ef020240200328026c450d002003280268102e0b420021050c010b20034188016a41086a2209200341c8006a41086a29030037030020034188016a41106a220a200341c8006a41106a29030037030020034188016a41186a220b200341c8006a41186a290300370300200341206a41086a220c200341e8006a41086a290300370300200341206a41106a220d2007290300370300200341206a41186a220720042903003703002003200329034837038801200320032903683703202003200841706a36024420032003280240220441106a3602402004290000210e200041206a200441086a290000370300200041186a200e370300200041106a200537030020002006370308200041286a200329038801370300200041306a2009290300370300200041386a200a290300370300200041c0006a200b290300370300200041c8006a2003290320370300200041d0006a200c290300370300200041d8006a200d290300370300200041e0006a2007290300370300420121050b200020053703002002450d002001102e0b200341b0016a24000bd10102037f017e230041206b22032400200341003602082003420137030020022802202104200241286a28020022052003107602402005450d002005410574210503402003200441201074200441206a2104200541606a22050d000b0b200229030021062003200241086a290300370318200320063703102003200341106a41101074200229031021062003200241186a290300370318200320063703102003200341106a411010742000200120032802002204200328020810b20102402003280204450d002004102e0b200341206a24000bb70102027f017e230041206b2203240002404124102c2204450d002003422437020420032004360200200229030021052003200241086a290300370318200320053703102003200341106a41101074200229031021052003200241186a290300370318200320053703102003200341106a41101074200320022802203602102003200341106a410410742000200120032802002202200328020810b20102402003280204450d002002102e0b200341206a24000f0b1036000b9e0303027f017e017f230041206b22032400200341003602082003420137030002404120102c2204450d002003422037021420032004360210200341106a200241246a412010742003200328021022042003280218107402402003280214450d002004102e0b2003200241c4006a412010742003200241e4006a41201074200229030021052003200241086a290300370318200320053703102003200341106a411010740240024020022802104101460d00200341003a00102003200341106a410110740c010b200341013a00102003200341106a410110742003200241146a2802003602102003200341106a410410740b20022802182104200241206a2802002206200310760240200641306c2206450d00200420066a210603402003200441201074200441206a29030021052003200441286a290300370318200320053703102003200341106a41101074200441306a22042006470d000b0b200320022d0084013a00102003200341106a410110742000200120032802002204200328020810b20102402003280204450d002004102e0b200341206a24000f0b1036000b9b0302027f017e230041106b2202240002400240024020002d00004101460d00200241003a000020012002410110742002200041386a28020036020020012002410410744120102c2203450d0220024220370204200220033602002002200041c0006a412010742001200228020022032002280208107402402002280204450d002003102e0b0240024002400240200041e0006a2d00000e03000102030b200241003a000020012002410110740c020b200241013a000020012002410110740c010b200241023a000020012002410110740b20022000413c6a2802003602002001200241041074200029030821042002200041106a290300370308200220043703002001200241101074200041186a29030021042002200041206a290300370308200220043703002001200241101074200041286a29030021042002200041306a2903003703082002200437030020012002411010740c010b200241013a00002001200241011074200220002d00013a000020012002410110742002200041046a28020036020020012002410410740b200241106a24000f0b1036000bd80102047f017e230041206b22022400024002402001280208220341306c4104722204417f4c0d00200128020021012004102c2205450d012002410036020820022004360204200220053602002003200210760240200341306c2203450d00200120036a210303402002200141201074200141206a29030021062002200141286a290300370318200220063703102002200241106a41101074200141306a22012003470d000b0b2000412020022802002201200228020810b20102402002280204450d002001102e0b200241206a24000f0b1038000b1036000b810201037f230041106b2203240020034100360208200342013703002003200228020036020c20032003410c6a410410742003200228020436020c20032003410c6a4104107420022802082104200241106a28020022052003107602402005450d002005410574210503402003200441201074200441206a2104200541606a22050d000b0b200228021421042002411c6a28020022052003107602402005450d002005410574210503402003200441201074200441206a2104200541606a22050d000b0b2003200228022036020c20032003410c6a410410742000200120032802002204200328020810b20102402003280204450d002004102e0b200341106a24000bc90101047f230041106b22032400024002402002410c6a28020022044105742205410472417b4c0d0020054108722205102c2206450d012003410036020820032005360204200320063602002003200228020036020c20032003410c6a410410742002280204210220042003107602402004450d002004410574210403402003200241201074200241206a2102200441606a22040d000b0b2000200120032802002202200328020810b20102402003280204450d002002102e0b200341106a24000f0b1038000b1036000b810201037f230041106b2203240020034100360208200342013703002003200228020036020c20032003410c6a410410742003200228020436020c20032003410c6a4104107420022802082104200241106a28020022052003107602402005450d002005410574210503402003200441201074200441206a2104200541606a22050d000b0b200228021421042002411c6a28020022052003107602402005450d002005410574210503402003200441201074200441206a2104200541606a22050d000b0b2003200228022036020c20032003410c6a410410742000200120032802002204200328020810b20102402003280204450d002004102e0b200341106a24000bac0101047f230041106b2202240002400240200128020822034105744104722204417f4c0d00200128020021012004102c2205450d0120024100360208200220043602042002200536020020032002107602402003450d002003410574210303402002200141201074200141206a2101200341606a22030d000b0b2000412020022802002201200228020810b20102402002280204450d002001102e0b200241106a24000f0b1038000b1036000bc90101017f230041206b22042400200441003602102004420137030820042001370318200441086a200441186a4108107420042002370318200441086a200441186a410810740240024002400240200341ff01710e03000102030b200441003a0018200441086a200441186a410110740c020b200441013a0018200441086a200441186a410110740c010b200441023a0018200441086a200441186a410110740b2000412020042802082203200428021010b2010240200428020c450d002003102e0b200441206a24000b970101047f230041106b22032400024002402002280208220441046a2205417f4c0d00200228020021020240024020050d00410121060c010b2005102c2206450d020b20034100360208200320053602042003200636020020042003107620032002200410742000200120032802002205200328020810b20102402003280204450d002005102e0b200341106a24000f0b1038000b1036000b9c0101047f230041106b22022400024002402001280208220341c4006c41046a2204417f4c0d00200128020021010240024020040d00410121050c010b2004102c2205450d020b200241003602082002200436020420022005360200200320021076200120032002109b012000412020022802002204200228020810b20102402002280204450d002004102e0b200241106a24000f0b1038000b1036000ba00101037f230041106b220324000240024020024105744104722204417f4c0d002004102c2205450d0120034100360208200320043602042003200536020020022003107602402002450d002002410574210203402003200141201074200141206a2101200241606a22020d000b0b2000412020032802002201200328020810b20102402003280204450d002001102e0b200341106a24000f0b1038000b1036000b9c0102027f017e230041206b2203240002404111102c2204450d0020034211370204200320043602002003200241106a41201074200229030021052003200241086a290300370318200320053703102003200341106a41101074200320022d00303a00102003200341106a410110742000200120032802002202200328020810b20102402003280204450d002002102e0b200341206a24000f0b1036000b9c0101057f230041106b220224000240024020012802082203410274220441046a2205417f4c0d00200128020021010240024020050d00410121060c010b2005102c2206450d020b20024100360208200220053602042002200636020020032002107620022001200410742000412020022802002205200228020810b20102402002280204450d002005102e0b200241106a24000f0b1038000b1036000bb20202017f017e230041206b220324002003410036020820034201370300200320022802403602102003200341106a41041074200320022802443602102003200341106a41041074200320022802483602102003200341106a410410742003200228024c3602102003200341106a41041074200229030021042003200241086a290300370318200320043703102003200341106a41101074200229031021042003200241186a290300370318200320043703102003200341106a41101074200229032021042003200241286a290300370318200320043703102003200341106a41101074200229033021042003200241386a290300370318200320043703102003200341106a411010742000200120032802002202200328020810b20102402003280204450d002002102e0b200341206a24000bb20202017f017e230041206b220324002003410036020820034201370300200320022802403602102003200341106a41041074200320022802443602102003200341106a41041074200320022802483602102003200341106a410410742003200228024c3602102003200341106a41041074200229030021042003200241086a290300370318200320043703102003200341106a41101074200229031021042003200241186a290300370318200320043703102003200341106a41101074200229032021042003200241286a290300370318200320043703102003200341106a41101074200229033021042003200241386a290300370318200320043703102003200341106a411010742000200120032802002202200328020810b20102402003280204450d002002102e0b200341206a24000bdd0101027f230041206b22022400200241003602082002420137030002404120102c2203450d002002422037021420022003360210200241106a2001412010742002200228021022032002280218107402402002280214450d002003102e0b024002400240024020012d00200e03000102030b200241003a00102002200241106a410110740c020b200241013a00102002200241106a410110740c010b200241023a00102002200241106a410110740b2000412020022802002201200228020810b20102402002280204450d002001102e0b200241206a24000f0b1036000bae0301037f230041f0006b22032400200341086a4192fdc6004107108102200341186a4190a0c5004113108102200320013602382003200341386a410410a301370348200341ec006a2201200341386a41046a3602002003200341c8006a41086a3602642003200341386a3602682003200341c8006a360260200341286a200341e0006a107c024002404120102c2204450d002003422037024c20032004360248200341c8006a2002412010742003200328024822022003280250220410a3013703582001200220046a360200200320023602682003200341d8006a41086a3602642003200341d8006a360260200341386a200341e0006a107c0240200328024c450d002002102e0b20032802302201200328024022046a41206a2202417f4c0d010240024020020d00410121050c010b2002102c2205450d010b2000410036020820002002360204200020053602002000200341086a411010742000200341186a4110107420002003280228220220011074200020032802382201200410740240200328023c450d002001102e0b0240200328022c450d002002102e0b200341f0006a24000f0b1036000b1038000bae0301037f230041f0006b22032400200341086a4192fdc6004107108102200341186a41fd9fc5004113108102200320013602382003200341386a410410a301370348200341ec006a2201200341386a41046a3602002003200341c8006a41086a3602642003200341386a3602682003200341c8006a360260200341286a200341e0006a107c024002404120102c2204450d002003422037024c20032004360248200341c8006a2002412010742003200328024822022003280250220410a3013703582001200220046a360200200320023602682003200341d8006a41086a3602642003200341d8006a360260200341386a200341e0006a107c0240200328024c450d002002102e0b20032802302201200328024022046a41206a2202417f4c0d010240024020020d00410121050c010b2002102c2205450d010b2000410036020820002002360204200020053602002000200341086a411010742000200341186a4110107420002003280228220220011074200020032802382201200410740240200328023c450d002001102e0b0240200328022c450d002002102e0b200341f0006a24000f0b1036000b1038000bca0201037f230041e0006b22022400200241086a4192fdc6004107108102200241186a41a3a0c5004109108102024002404104102c2203450d002002420437023c20022003360238200241386a20014120107420022001280220360250200241386a200241d0006a410410742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241d0006a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000bdd0302077f017e230041f0006b22022400200241086a200110cf052002280208210120022002280210220336021c20022001360218200241206a2001200310ed0202400240200228022022030d00410021040c010b200228022421052002200241286a2802002204360234200220033602300240024020044104490d00200328000021062002200341046a36023020022004417c6a220736023420074104490d002002200341086a360230200328000421072002200441786a220836023420084104490d002002200441746a36023420022003410c6a36023020032800082108200241d8006a200241306a10e70120022802582204450d00200229025c21090c010b4100210420024100360240200242013703382002410a36024c2002200241186a3602482002200241386a360254200241ec006a41013602002002420137025c200241909dc5003602582002200241c8006a360268200241d4006a419cebc000200241d8006a103d1a2002280238200228024010ef020240200228023c450d002002280238102e0b0b02402005450d002003102e0b024020040d00410021040c010b200020093702102000200836020820002007360204200020063602000b2000200436020c0240200228020c450d002001102e0b200241f0006a24000bb10201037f230041e0006b22022400200241086a4192fdc6004107108102200241186a41aca0c500410d108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241d0006a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000bd60101037f230041206b220224002002200010cf05200228020821032002280200210020024100360218200242013703102002200128020036021c200241106a2002411c6a410410742002200128020436021c200241106a2002411c6a410410742002200128020836021c200241106a2002411c6a41041074200128020c2104200141146a2802002201200241106a1076200241106a2004200141027410742000200320022802102201200228021810b20102402002280214450d002001102e0b02402002280204450d002000102e0b200241206a24000bb10201037f230041e0006b22022400200241086a4192fdc6004107108102200241186a41dfa2c500410a108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241d0006a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000ba30201047f230041206b220224002002200010d30520022802082103200228020021042002410036021820024201370310200241106a200141386a412010742002200136021c2002411c6a200241106a10af012002200141106a36021c2002411c6a200241106a10af0120012802202100200141286a2802002205200241106a10760240200541186c2205450d00200020056a210503402002200036021c2002411c6a200241106a10af01200041106a200241106a109102200041186a22002005470d000b0b200128022c2100200141346a2802002205200241106a1076200241106a2000200541027410742004200320022802102200200228021810b20102402002280214450d002000102e0b02402002280204450d002004102e0b200241206a24000bac0201037f230041e0006b2202240020024192fdc6004107108102200241106a41e9a2c5004106108102024002404120102c2203450d002002422037023420022003360230200241306a200141201074200241c0006a200228023022012002280238220310d803200241dc006a200120036a360200200220013602582002200241d0006a3602542002200241c0006a360250200241206a200241d0006a107c02402002280234450d002001102e0b2002280228220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b20004100360208200020013602042000200436020020002002411010742000200241106a411010742000200228022022012003107402402002280224450d002001102e0b200241e0006a24000f0b1036000b1038000b130020004117360204200041f0a2c5003602000b340020004192fdc60036020420004100360200200041146a411e360200200041106a419095c600360200200041086a42073702000b3401017f230041106b220224002000410036020820004201370200200241053a000f20002002410f6a41011074200241106a24000b4e01017f230041106b2202240020004100360208200042013702002002420037030820024200370300200020024110107420024200370308200242003703002000200241101074200241106a24000b2f01017f02404104102c22020d001036000b2000420437020420002002360200410020001076410841002000109d010b4601027f230041106b2202240002404110102c22030d001036000b200042103702042000200336020020024200370308200242003703002000200241101074200241106a24000b5901027f230041206b220224002000410036020820004201370200200241106a4200370300200241003602082002410036021c20002002411c6a41041074200241086a4104722203200010f201200310bc02200241206a24000b4901017f230041106b220224002000410036020820004201370200200241003a00042002410036020020022000109102200241003a000f20002002410f6a41011074200241106a24000bf20101037f230041c0006b220224002000410036020820004201370200200241206a4200370300200241086a41106a22034200370300200241106a4200370300200241306a2204410036020020024200370308200242083703282002200241086a36023c2002413c6a200010af012002200336023c2002413c6a200010af0120022802282103200428020022042000107602402004450d00200441306c210403402000200341106a412010742002200336023c2002413c6a200010af01200341306a2103200441506a22040d000b0b0240200228022c2203450d00200341306c450d002002280228102e0b200241c0006a24000b2601017f02404104102c22020d001036000b20004204370204200020023602004100200010760b4301027f230041106b2202240002404104102c22030d001036000b2000420437020420002003360200200241d40036020c20002002410c6a41041074200241106a24000b130020004105360204200041c4d5c6003602000b4201027f230041106b2202240002404104102c22030d001036000b20004204370204200020033602002002411036020c20002002410c6a41041074200241106a24000b4301027f230041106b2202240002404104102c22030d001036000b2000420437020420002003360200200241800236020c20002002410c6a41041074200241106a24000b4201027f230041106b2202240002404104102c22030d001036000b20004204370204200020033602002002411b36020c20002002410c6a41041074200241106a24000b4201027f230041106b2202240002404104102c22030d001036000b20004204370204200020033602002002411c36020c20002002410c6a41041074200241106a24000b4201027f230041106b2202240002404104102c22030d001036000b20004204370204200020033602002002410636020c20002002410c6a41041074200241106a24000bb10201037f230041e0006b22022400200241086a4192fdc6004107108102200241186a41c4abc6004106108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241d0006a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000bd30908017f047e027f017e027f027e047f017e230041e0016b220324002003200236025c20032001360258200341e0006a2001200210ed02024002400240200328026022010d00200041003602200c010b200328026421022003200341e0006a41086a280200360284012003200136028001200341a8016a20034180016a10930102400240024020032d00a8014101460d00200341a0016a200341c1016a29000037030020034188016a41106a200341b9016a29000037030020034188016a41086a200341b1016a290000370300200320032900a90137038801200341c0006a20034180016a10db042003290340a70d00200341c0006a41106a290300210420032903482105200341286a20034180016a10db042003290328a70d00200341286a41106a290300210620032903302107200341206a20034180016a10ab0120032802200d000240024002402003280224220820032802840141186e2209200920084b1bad42187e220a422088a70d00200aa72209417f4c0d000240024020090d004108210b0c010b2009102c220b450d080b200941186ead210a024002402008450d00200341186a210c0340200341086a20034180016a10db042003290308a70d04200c290300210d2003290310210e200320034180016a10ab0120032802000d042003280204210f0240200a422088a72210200aa72209470d00200941016a22112009490d04200941017422122011201220114b1b22114104201141044b1bad42187e2213422088a74541037421112013a721120240024020090d00200341003602a8010c010b200341083602b0012003200b3602a8012003200941186c3602ac010b200341d0016a20122011200341a8016a107d20032802d801210920032802d0014101460d0320032802d401210b200a42808080807083200941186ead84210a0b200b201041186c6a2209200d3703082009200e3703002009200f360210200a4280808080107c210a2008417f6a22080d000b0b200b450d04200341d0016a20034180016a10e70120032802d0010d05200aa72209450d04200941186c0d030c040b20090d070b1038000b200aa72209450d01200941186c450d010b200b102e0b200341003602900120034201370388012003410a3602d4012003200341d8006a3602d001200320034188016a360270200341bc016a4101360200200342013702ac01200341909dc5003602a8012003200341d0016a3602b801200341f0006a419cebc000200341a8016a103d1a20032802880120032802900110ef020240200328028c01450d00200328028801102e0b200041003602200c010b200341f0006a41086a2209200341d0016a41086a280200360200200341a8016a41086a220820034188016a41086a290300370300200341a8016a41106a220f20034188016a41106a290300370300200341a8016a41186a221020034188016a41186a290300370300200320032903d00137037020032003290388013703a801200041186a20063703002000200737031020002004370308200020053703002000200a3702242000200b3602202000412c6a2003290370370200200041346a2009280200360200200041386a20032903a801370300200041c0006a2008290300370300200041c8006a200f290300370300200041d0006a20102903003703000b2002450d002001102e0b200341e0016a24000f0b1036000ba20201037f230041106b220224002001280208210302404101102c2204450d0020004201370204200020043602000240024020030d00200241003a00032000200241036a410110740c010b200241013a00032000200241036a41011074200220012802003602042000200241046a41041074200220012802043602082000200241086a41041074200128021022042000107602402004450d002004410574210403402000200341201074200341206a2103200441606a22040d000b0b200141146a28020021032001411c6a28020022042000107602402004450d002004410574210403402000200341201074200341206a2103200441606a22040d000b0b2002200141206a28020036020c20002002410c6a410410740b200241106a24000f0b1036000bbd0401047f230041106b2202240020002802042103024002400240024020002802004101470d002000410c6a280200220041046a2204417f4c0d020240024002400240024020040d002002410036020820022004360204200241013602000c010b2004102c2205450d07200241003602082002200436020420022005360200200041c000490d01200041808001490d022000418080808004490d030b200241033a000c20022002410c6a410110742002200036020c20022002410c6a4104107420022003200010740c040b200220004102743a000c20022002410c6a4101107420022003200010740c030b200220004102744101723b010c20022002410c6a4102107420022003200010740c020b2002200041027441027236020c20022002410c6a4104107420022003200010740c010b200041086a280200220041046a2204417f4c0d0102400240024002400240024020040d002002410036020820022004360204200241013602000c010b2004102c2205450d07200241003602082002200436020420022005360200200041c000490d01200041808001490d022000418080808004490d030b200241031091012002200036020c20022002410c6a410410740c030b200220004102741091010c020b200220004102744101723b010c20022002410c6a410210740c010b2002200041027441027236020c20022002410c6a410410740b20022003200010740b200120022802002002280208107402402002280204450d002002280200102e0b200241106a24000f0b1038000b1036000b884c09047f017e037f027e077f017e037f017e2a7f23004190056b22032400200341d8006a4192fdc600410710810220034190016a41dfa2c500410a10810202404120102c2204450d00200342203702c404200320043602c004200341c0046a200341d8006a41101074200341c0046a20034190016a4110107402400240024020032802c8042204417f4c0d0020032802c00421050240024020040d00410121060c010b2004102c2206450d040b20062005200410e9082105200341e8036a41086a200341c0046a41086a2802002206360200200320032903c00422073703e803200341ec006a2006360200200341f7006a200341c0046a41026a2d00003a0000200320043602602003200436025c200320053602582003200737026441002108200341003a00742003410c360270200320032f00c0043b007520034190016a200341d8006a10eb050240200341c0016a2d00004102460d00410021080340024020032802b40141ffffff3f71450d0020032802b001102e0b200841016a210820034190016a200341d8006a10eb0520032d00c0014102470d000b0b0240200328025c450d002003280258102e0b0240200341e8006a280200450d002003280264102e0b200341d8006a4192fdc600410710810220034190016a41f09dc500410a1081024120102c2204450d03200342203702c404200320043602c004200341c0046a200341d8006a41101074200341c0046a20034190016a4110107420032802c8042204417f4c0d0020032802c00421050240024020040d00410121060c010b2004102c2206450d040b20062005200410e9082105200341e8036a41086a200341c0046a41086a2802002206360200200320032903c00422073703e803200341ec006a2006360200200341f7006a200341c0046a41026a2d00003a0000200320043602602003200436025c200320053602582003200737026441002109200341003a00742003410d360270200320032f00c0043b007520034190016a200341d8006a108c050240200341b4016a2d00004102460d00410021090340200941016a210920034190016a200341d8006a108c0520032d00b4014102470d000b0b0240200328025c450d002003280258102e0b0240200341e8006a280200450d002003280264102e0b02402001450d00417f200820096a220420042008491b20024d0d00200041e0eac60036020420004101360200200041086a41163602000c030b200341d8006a4192fdc600410710810220034190016a41aca0c500410d1081024120102c2204450d03200342203702c404200320043602c004200341c0046a200341d8006a41101074200341c0046a20034190016a4110107420032802c8042204417f4c0d0020032802c00421010240024020040d00410121050c010b2004102c2205450d040b20052001200410e9082101200341e8036a41086a200341c0046a41086a2802002205360200200320032903c00422073703e803200341ec006a2005360200200341f7006a200341c2046a2d00003a0000200320043602602003200436025c20032001360258200320073702644100210a200341003a00742003410e360270200320032f00c0043b007520034190016a200341d8006a108d05024020032802bc012204450d004100210a0340024020032802c00141ffffffff0371450d002004102e0b200a41016a210a20034190016a200341d8006a108d0520032802bc0122040d000b0b0240200328025c450d002003280258102e0b0240200341d8006a41106a280200450d002003280264102e0b200341d8046a22044200370300200341c0046a41106a22014200370300200341c0046a41086a22054200370300200342003703c00420034190016a41f8fcc6004108108102200520034190016a41086a220629000037030020032003290090013703c00420034190016a41a8aac800410d1081022004200629000037030020012003290090013703002003200341c0046a412010f802200341106a29030021072003290308210b2003290300210c4110102c220d450d03200d200b4200200ca722041b370300200d2007420020041b370308200341d8006a4192fdc600410710810220034190016a41f09dc500410a1081024120102c2204450d03200342203702c404200320043602c004200341c0046a200341d8006a41101074200341c0046a20034190016a4110107420032802c8042204417f4c0d0020032802c00421010240024020040d00410121050c010b2004102c2205450d040b20052001200410e90821014108210e200341c8016a41086a200341c0046a41086a2802002205360200200341386a41026a220620034190016a41026a2d00003a0000200320032903c00422073703c801200320032f0090013b0138200341ac036a2005360200200320043602a0032003200436029c032003200136029803200320073702a4034100210f200341003a00b4032003410d3602b003200341b7036a20062d00003a0000200320032f01383b00b50320034190016a20034198036a108c05410021100240200341b4016a2d00004102460d0041002111410021124100210f410021104108210e0340200341d8006a41206a20034190016a41206a290300370300200341d8006a41186a220420034190016a41186a22052903002207370300200341d8006a41106a220120034190016a41106a2206290300220b370300200341d8006a41086a221320034190016a41086a2202290300220c37030020032003290390012214370358200341e8036a41186a22152007370300200341e8036a41106a2216200b370300200341e8036a41086a2217200c370300200320143703e8032005200429030037030020062001290300370300200220132903003703002003200329035837039001200d200341e8036a10ee0521074120102c2201450d05200120032903e803370000200141186a2015290300370000200141106a2016290300370000200141086a2017290300370000200341c0046a41086a2002290300220b370300200341c0046a41106a2006290300220c370300200341c0046a41186a20052903002214370300200320032903900122183703c004200520143703002006200c3703002002200b37030020032018370390010240200f2010470d00200f41016a2204200f490d0320122004201220044b1b22044104200441044b1bad42387e220b422088a7454103742104200ba7211302400240200f0d00200341003602e0020c010b200341083602e802200320113602e4022003200e3602e0020b200341a8026a20132004200341e0026a107d20032802b0022104024020032802a8024101470d002004450d040c070b20032802ac02210e200441386e21100b200e20116a22042007370300200441086a200329039001370300200441106a2002290300370300200441186a2006290300370300200441206a20052903003703002004412c6a428180808010370200200441286a2001360200201141386a2111201241026a2112200f41016a210f20034190016a20034198036a108c0520032d00b4014102470d000b0b0240200328029c03450d00200328029803102e0b0240200341a8036a280200450d0020032802a403102e0b200341d8006a4192fdc600410710810220034190016a41aca0c500410d1081024120102c2204450d03200342203702c404200320043602c004200341c0046a200341d8006a41101074200341c0046a20034190016a4110107420032802c8042204417f4c0d0020032802c00421010240024020040d00410121050c010b2004102c2205450d040b20052001200410e9082101200341286a41086a200341c0046a41086a22172802002205360200200320032903c00422073703282003420037021c200341386a41146a2005360200200341d7006a200341256a41026a2d00003a0000200320043602402003200436023c2003200136023820032007370244200341003a00542003410e360250200320032f00253b0055200341d8006a200341386a108d0502402003280284012219450d00200341a8026a411c6a211a200341c0046a410472211b200341c0046a411c6a211c200341e0026a411c6a211d200341c8016a41206a211641002112034020034190016a41306a200341d8006a41306a220429030037030020034190016a41286a200341d8006a41286a220129030037030020034190016a41206a200341d8006a41206a290300220737030020034190016a41186a2205200341d8006a41186a290300220b37030020034190016a41106a2206200341d8006a41106a290300220c37030020034190016a41086a2202200341d8006a41086a290300221437030020032003290358221837039001200341c8016a41286a200128020036020020162007370300200341c8016a41186a200b370300200341c8016a41106a200c370300200341c8016a41086a2014370300200320183703c8012004280200211e200328028c01211f200341f8016a41086a2220201641086a280200360200200320162903003703f801200341c0046a41186a22212005290300370300200341c0046a41106a222220062903003703002017200229030037030020032003290390013703c004024002402012450d00200328021821130c010b41f004102c2212450d0641002113201241003b018e02201241003602002003201236021c200341003602180b0240024002400240024002400240024002400240024002400340201241186a210120124190026a211120122f018e022215410574210241002104417f210502400340024020022004470d00201521050c020b200341c0046a201120046a412010ec082206450d03200541016a2105200141186a2101200441206a21042006417f4a0d000b0b02402013450d002013417f6a2113201220054102746a41f0046a28020021120c010b0b20034188026a41086a201b41086a2223290200220737030020034188026a41106a201b41106a2224290200220b37030020034188026a41186a201b41186a222528020022043602002003201b290200220c3703880220032802c0042113200341e0026a41186a22262004360200200341e0026a41106a2227200b370300200341e0026a41086a222820073703002003200c3703e002200341d0036a41086a22292020280200360200200320032903f8013703d00302402015410a4b0d00200341e8036a41086a22062029280200360200200320032903d0033703e803200341a0046a41186a22022026280200360200200341a0046a41106a22222027290300370300200341a0046a41086a22202028290300370300200320032903e0023703a004200541016a2121201541016a21010240200520154f22270d00201120214105746a201120054105746a20012005417f736a41057410ea081a0b201120054105746a22042013360000200441146a20222903003700002004410c6a2020290300370000200420032903a0043700042004411c6a200228020036000020172006280200360200200320032903e8033703c004201241046a2104024020270d002004202141186c6a2004200541186c6a201520056b41186c10ea081a0b2004200541186c6a220420032903c004370200201728020021052004201f3602142004201e3602102004201936020c200441086a2005360200201220013b018e020c0b0b4100212a4104210402400240200541054f0d00200521060c010b4105210441052106024002402005417b6a0e020201000b200541796a21064101212a410621040c010b410021064101212a0b41f004102c2201450d11200141003b018e0220014100360200200120122f018e02222b2004417f736a22053b018e02201120044105746a2202280000212c200341a0046a41186a222d2002411c6a280000360200200341a0046a41106a2215200241146a290000370300200341a0046a41086a22202002410c6a290000370300200320022900043703a004200341f8046a41106a222e201241046a222f200441186c6a220241106a290200370300200341f8046a41086a2230200241086a290200370300200320022902003703f8042005410c4f0d01202b200441016a22026b2005470d0220014190026a201120024105746a200541057410e9081a200141046a202f200241186c6a200541186c10e9081a201c20032903f8043702002021202d280200360200201c41086a22312030290300370200201c41106a2232202e290300370200201220043b018e02202220152903002207370300200341e8036a41086a222b2020290300370300200341e8036a41106a222f2007370300200341e8036a41186a22332021290300370300200341e8036a41206a2234200341c0046a41206a2235290300370300200341e8036a41286a2236200341c0046a41286a2237290300370300200341e8036a41306a2238200341c0046a41306a2239280200360200200320032903a0043703e80320302029280200360200200320032903d0033703f80420012012202a1b22052f018e022102202d20262802003602002015202729030037030020202028290300370300200320032903e0023703a00420054190026a2104200241016a21110240200641016a222a20024b223a0d002004202a4105746a200420064105746a20112006417f736a41057410ea081a0b200420064105746a22042013360000200441146a20152903003700002004410c6a2020290300370000200420032903a0043700042004411c6a202d28020036000020172030280200360200200320032903f8043703c004200541046a21040240203a0d002004202a41186c6a2004200641186c6a200220066b41186c10ea081a0b2004200641186c6a220420032903c004370200201728020021062004201f3602142004201e3602102004201936020c200441086a2006360200200520113b018e0220034198036a41306a2204203828020036020020034198036a41286a2205203629030037030020034198036a41206a2206203429030037030020034198036a41186a221f203329030037030020034198036a41106a2219202f29030037030020034198036a41086a221e202b290300370300200320032903e80337039803200341e0026a41306a223b2004280200360200200341e0026a41286a223c2005290300370300200341e0026a41206a223d20062903003703002026201f290300370300202720192903003703002028201e29030037030020032003290398033703e002024002400240201228020022130d004100212a0c010b4100212a2001213a202c213e034020122f018c022102201f202628020036020020192027290300370300201e2028290300370300200320032903e00237039803200341d0036a41106a223f201d41106a2902003703002029201d41086a2902003703002003201d2902003703d00320132f018e022212410b490d024100211141042104024020024105490d0020022104024002402002417b6a0e020201000b200241796a210241012111410621040c010b4100210241012111410521040b41a005102c2201450d14200141003b018e0220014100360200200120132f018e0222402004417f736a22053b018e0220134190026a224120044105746a2206280000212c202d2006411c6a2800003602002015200641146a29000037030020202006410c6a290000370300200320062900043703a004202e201341046a2242200441186c6a220641106a2902003703002030200641086a290200370300200320062902003703f8042005410c4f0d062040200441016a22066b2005470d0720014190026a204120064105746a200541057410e9081a200141046a2042200641186c6a200541186c10e9081a201320043b018e0220172020290300370300202220152903003703002021202d280200360200201c20032903f804370200203120302903003702002032202e290300370200200320032903a0043703c00420012f018e02220541016a21402005410c4f0d08201220046b22042040470d09202a41016a212a200141f0046a201320064102746a41f0046a200441027410e9081a4100210402400340200120044102746a41f0046a280200220620043b018c02200620013602002004200420054922066a220420054b0d0120060d000b0b20382039280200360200203620372903003703002034203529030037030020332021290300370300202f2022290300370300202b2017290300370300200320032903c0043703e8032015203f29030037030020202029290300370300200320032903d0033703a0042001201320111b22062f018e0221052003203e3602c004201b2003290398033700002023201e290300370000202420192903003700002025201f28020036000020064190026a2112200541016a21110240200241016a220420054b223e0d00201220044105746a201220024105746a2002417f7320116a41057410ea081a0b201220024105746a221220032903c004370000201241186a2021290300370000201241106a2022290300370000201241086a20172903003700002022201529030037030020172020290300370300200320032903a0043703c004200641046a21120240203e0d002012200441186c6a2012200241186c6a200520026b41186c10ea081a0b2012200241186c6a221220032903c004370200201241106a2022290300370200201241086a2017290300370200200641f0046a21120240200241026a223e200541026a22054f0d002012203e4102746a201220044102746a2004417f7320056a41027410ea081a0b201220044102746a203a360200200620113b018e020240200420054f0d00200620024102746a41f4046a2104034020042802002205200241016a22023b018c0220052006360200200441046a210420112002470d000b0b2028202b2903003703002027202f29030037030020262033290300370300203d2034290300370300203c2036290300370300203b2038280200360200200320032903e8033703e002201321122013280200220421132001213a202c213e20040d000b0b200341a8026a41306a203b280200360200200341a8026a41286a203c290300370300200341a8026a41206a203d290300370300200341a8026a41186a20262903002207370300200341a8026a41106a2027290300220b370300200341a8026a41086a2028290300220c370300200320032903e00222143703a802202b200c370300202f200b370300203320073e02002028201a41086a2902003703002027201a41106a290200370300200320143703e8032003201a2902003703e002200328021c2205450d082003280218210641a005102c2204450d12200420053602f004200441003b018e0220044100360200200541003b018c02200520043602002003200436021c2003200641016a360218202120332802003602002022202f2903003703002017202b290300370300200320032903e8033703c00420192027290300370300201e2028290300370300200320032903e002370398032006202a470d0920042f018e022206410b4f0d0a2004200641016a22023b018e02200420064105746a22054190026a202c36000020054194026a20032903c0043700002005419c026a2017290300370000200541a4026a2022290300370000200541ac026a20212802003600002004200641186c6a220541046a2003290398033702002005410c6a201e290300370200200541146a2019290300370200200441f0046a20024102746a2001360200200120023b018c02200120043602002003200328022041016a360220202a1a20011a0c0c0b2015203f29030037030020202029290300370300200320032903d0033703a004201b2003290398033700002023201e290300370000202420192903003700002025201f2802003600002003203e3602c00420134190026a2104201241016a21060240201220024d22010d00200420024105746a220541206a20052002417f7320066a41057410ea081a0b200420024105746a220420032903c004370000200441186a2021290300370000200441106a2022290300370000200441086a20172903003700002022201529030037030020172020290300370300200320032903a0043703c004200241016a2104201341046a2105024020010d002005200441186c6a2005200241186c6a201220026b41186c10ea081a0b2005200241186c6a220520032903c004370200200541106a2022290300370200200541086a2017290300370200201341f0046a2105201241026a2111024020010d00200241027420056a41086a200520044102746a2004417f7320116a41027410ea081a0b200520044102746a203a360200201320063b018e02200420114f0d0a20132004417f6a22044102746a41f4046a2101034020012802002205200441016a22043b018c0220052013360200200141046a210120062004470d000c0b0b0b2001416c6a220520032903f801370200200141786a2206280200210420202802002102200620193602002001417c6a220628020021112006201e3602002001201f360200200541086a20023602002004450d0a201141ffffffff0371450d0a2004102e0c0a0b2005410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b2005410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b2040410c41f49cc700104d000b41f49bc7004128419c9cc7001039000b41e8aac700412b4194abc7001039000b41e899c700413041989ac7001039000b41a89ac700412041c89ac7001039000b2003200328022041016a3602200b200341d8006a200341386a108d052003280284012219450d01200328021c21120c000b0b0240200328023c450d002003280238102e0b0240200341c8006a280200450d002003280244102e0b200341d8006a4192fdc600410710810220034190016a41dfa2c500410a1081024120102c2204450d03200342203702c404200320043602c004200341c0046a200341d8006a41101074200341c0046a20034190016a4110107420032802c8042204417f4c0d0020032802c00421010240024020040d00410121050c010b2004102c2205450d040b20052001200410e9082101200341a8026a41086a200341c0046a41086a22212802002205360200200341c8016a41026a220620034190016a41026a2d00003a0000200320032903c00422073703a802200320032f0090013b01c801200341fc036a2005360200200320043602f003200320043602ec03200320013602e803200320073702f403200341003a0084042003410c3602800420034187046a20062d00003a0000200320032f01c8013b00850420034190016a200341e8036a10eb0520034190016a41306a2d00004102460d010340202120034190016a41086a22152903002207370300200341c0046a41106a20034190016a41106a2216290300220b370300200341c0046a41186a20034190016a41186a2217290300220c370300200320032903900122143703c00420032802bc01211120032802b001211320032802b401211920032802b8012106200341d8006a41186a221e200c370300200341d8006a41106a221f200b370300200341d8006a41086a22202007370300200320143703580240024020060d00410021120c010b41002122410021124100210502400340024002402012450d00201320054105746a21042013200520226a4105746a210103400240200341186a200410a1022202450d00200228020820114b0d030b20012004290000370000200141186a200441186a290000370000200141106a200441106a290000370000200141086a200441086a290000370000200441206a2104200141206a21012006200541016a22054b0d000c040b0b201320054105746a210403400240200341186a200410a1022201450d00200128020820114b0d020b200441206a21042006200541016a22054b0d000b410021120c030b2022417f6a2122201241016a21122006200541016a22054b0d000b0b024020120d00410021120c010b2013200520126b4105746a201320054105746a200620056b41057410ea081a0b200d200341d8006a10ee0521072017201e2903003703002016201f2903003703002015202029030037030020032003290358370390010240200f2010470d00200f41016a2204200f490d02200f41017422012004200120044b1b22044104200441044b1bad42387e220b422088a7454103742104200ba7210102400240200f0d0020034100360298030c010b200341083602a0032003200e360298032003200f41386c36029c030b200341e0026a2001200420034198036a107d20032802e8022104024020032802e0024101470d0020040d060c030b20032802e402210e200441386e21100b200e200f41386c6a220420073703002004200329039001370308200441106a2015290300370300200441186a2016290300370300200441206a2017290300370300200441306a200620126b3602002004412c6a201936020020042013360228200f41016a210f20034190016a200341e8036a10eb0520032d00c0014102470d000c020b0b1038000b2009ad220742f8cdaf0d7e2008ad220b42c8acef0b7e7c200aad220c42d8e5f90a7e7c200b42c0d1e1237e7c200742c0d1e1237e7c42c0d1e1237c220b200c42c0f0f50b7e7c2107024020032802ec03450d0020032802e803102e0b2007200b5421040240200341f8036a280200450d0020032802f403102e0b427f200720041b210b200328021c21042003410036021c02402004450d00024020032802182201450d002001417f6a2101034020042802f00421042001450d012001417f6a21010c000b0b024020032802202202450d0041002105200341c8046a211203402002417f6a210241012101024002400340200520042f018e02490d010240200428020022060d002004102e410021040c030b20042f018c0221052004102e2001417f6a2101200621040c000b0b200341c0046a41186a200420054105746a220641a8026a290000370300200341c0046a41106a200641a0026a290000370300201220064198026a290000370300200320064190026a2900003703c004200541016a21062004200541186c6a220541146a2902002107200541106a2802002111024020014101470d00200621050c010b200420064102746a41f0046a280200210402402001450d000340200141016a220520014f210620042802f00421042005210120060d000b0b410021050b2011450d020240200742ffffffff0383500d002011102e0b20020d000b0b0340200428020021012004102e2001210420010d000b0b200d102e200041186a200b370300200041106a200f3602002000410c6a2010360200200041086a200e360200200041003602000b20034190056a24000f0b1036000b980501047f23004190016b220524002005200436021420052003360210200541d4e2cc00200141086a20024108491b36021820054100200241786a2201200120024b1b36021c200541e0006a200541186a109301200541c0006a41086a2202200541e9006a290000370300200541c0006a41106a2201200541f1006a290000370300200541c0006a41186a2203200541f9006a29000037030020052005290061370340024002400240024020052d00604101460d00200541206a41186a2003290300370300200541206a41106a2001290300370300200541206a41086a200229030037030020052005290340370320200541086a200541106a10ab01024002402005280208450d00200541003602600c010b200541e0006a200541106a200528020c10920120052802602202450d00200528026421010240200528021422034104490d00200541e8006a280200210620052802102204280000210720052003417c6a22083602142005200441046a22043602102008450d0020042d0000210820052003417b6a3602142005200441016a3602104100210320080e020403000b200141ffffff3f71450d002002102e0b20054186016a41026a2005418a016a41026a2d00003a0000200520052f018a013b018601200041023a00300c030b200041023a00300c020b410121030b20054186016a41026a22042005418d016a41026a2d00003a0000200520052f008d013b018601200041186a200541206a41186a290300370000200041106a200541206a41106a290300370000200041086a200541206a41086a29030037000020002005290320370000200020033a00302000200736022c200020063602282000200136022420002002360220200020052f0186013b0031200041336a20042d00003a00000b20054190016a24000be60303057f017e037f230041c0006b22022400200241086a200128020c200141146a280200108b050240024020022802082203450d00200141086a2104200141106a2105024003400240024020042802002206200229020c2207422088a722084b0d0020012802002003200610ec08450d010b2007a7450d032003102e0c030b02402005280200450d00200128020c102e0b2001200336020c20052007370200200241086a2003200810ed020240024020022802082203450d0020022802102109200228020c2108024020012d001c450d00200128020c200128021410ff010b2001280214220a20042802002206490d03200241086a200128020c20066a200a20066b20032009200128021811050020022d00384102470d012008450d002003102e0b200241086a200128020c2001280214108b05200228020822030d010c030b0b20002002290308370200200041306a200241086a41306a280200360200200041286a200241086a41286a290300370200200041206a200241086a41206a290300370200200041186a200241086a41186a290300370200200041106a200241086a41106a290300370200200041086a200241086a41086a2903003702002008450d022003102e0c020b2006200a41e89ec5001056000b200041023a00300b200241c0006a24000bf80301017f23004190016b220524002005200436021420052003360210200541d4e2cc00200141086a20024108491b36021820054100200241786a2201200120024b1b36021c200541e8006a200541186a109301200541c8006a41086a2202200541f1006a290000370300200541c8006a41106a2201200541f9006a290000370300200541c8006a41186a220320054181016a290000370300200520052900693703480240024002400240024020052d00684101460d00200541286a41186a2003290300370300200541286a41106a2001290300370300200541286a41086a200229030037030020052005290348370328200541086a200541106a10ab0120052802080d03200528020c21022005418094ebdc0336026c2005200236026820052802142201450d03200541e8006a2002418094ebdc034b4102746a2802002104200528021022022d0000210320052001417f6a3602142005200241016a3602104100210220030e020201030b200041023a00240c030b410121020b20002005290328370000200041186a200541286a41186a290300370000200041106a200541286a41106a290300370000200041086a200541286a41086a290300370000200020023a002420002004360220200020052f00253b0025200041276a200541276a2d00003a00000c010b200041023a00240b20054190016a24000bf70302027f017e23004180016b220524002005200436020c20052003360208200541d4e2cc00200141086a20024108491b36021020054100200241786a2201200120024b1b360214200541d8006a200541106a109301200541386a41086a2202200541e1006a290000370300200541386a41106a2201200541e9006a290000370300200541386a41186a2206200541f1006a290000370300200520052900593703380240024020052d00584101460d00200541186a41186a2006290300370300200541186a41106a2001290300370300200541186a41086a200229030037030020052005290338370318024020044104490d002005200341046a36020820052004417c6a220236020c20024104490d00200328000021012005200341086a3602082005200441786a220236020c20024104490d00200328000421022005200441746a36020c20052003410c6a36020820032800082104200541d8006a200541086a10e70120052802582203450d00200529025c210720002005290318370000200041186a200541186a41186a290300370000200041106a200541186a41106a290300370000200041086a200541186a41086a290300370000200020073702302000200336022c2000200436022820002002360224200020013602200c020b2000410036022c0c010b2000410036022c0b20054180016a24000ba10706017f027e027f017e027f017e230041a0026b22022400200041086a29030021032000290300210420024190026a200110e505200241e8006a200228029002220020022802980210f402200241c8006a41086a2201200241f1006a290000370300200241c8006a41106a2205200241f9006a290000370300200241c8006a41186a220620024181016a2900003703002002200229006937034802400240024002400240024020022d00684101470d00200241286a41186a2006290300370300200241286a41106a2005290300370300200241286a41086a2001290300370300200220022903483703280240200228029402450d002000102e0b200241e8006a41186a200241286a41186a290300370300200241e8006a41106a200241286a41106a290300370300200241e8006a41086a200241286a41086a29030037030020022002290328370368200241d0016a4192fdc6004107108102200241e0016a41e9a2c50041061081024120102c2200450d042002422037028402200220003602800220024180026a200241e8006a4120107420024190026a2002280280022200200228028802220110d803200241d4006a200020016a36020020022000360250200220024190026a41106a36024c200220024190026a360248200241f0016a200241c8006a107c0240200228028402450d002000102e0b20022802f801220141206a2200417f4c0d050240024020000d00410121050c010b2000102c2205450d050b200241003602c801200220003602c401200220053602c001200241c0016a200241d0016a41101074200241c0016a200241e0016a41101074200241c0016a20022802f001220020011074024020022802f401450d002000102e0b200241e8006a20022802c001220520022802c80110e60520022802c40121002002280288012206450d0120024180016a290300210720024198016a280200210820024194016a28020021092002290378210a200228028c01210102402000450d002005102e0b02402001450d00200141186c450d002006102e0b200841ffffffff0371450d032009102e0c030b200228029402450d012000102e0c010b2000450d002005102e0b4200210a420021070b200241186a20042003427f420010e708200241086a200a20072002290318220342012003420156200241186a41086a29030022034200522003501b22001b2003420020001b10e708200241086a41086a290300210320022903082104200241a0026a24002004427f2003501b0f0b1036000b1038000bc00c07047f017e047f017e017f027e017f230041c0016b22032400200341d8006a4192fdc6004107108102200341f8006a41f09dc500410a108102024002400240024002404120102c2204450d002003422037023c20032004360238200341386a200341d8006a41101074200341386a200341f8006a4110107420032802402204417f4c0d04200328023821050240024020040d00410121060c010b2004102c2206450d010b20062005200410e9082105200341186a41086a200341386a41086a2802002206360200200320032903382207370318200341ec006a2006360200200341f7006a200341386a41026a2d00003a0000200320043602602003200436025c200320053602582003200737026441002104200341003a00742003410d360270200320032f00383b0075200341f8006a200341d8006a108c0502402003419c016a2d00004102460d00410021040340200441016a2104200341f8006a200341d8006a108c0520032d009c014102470d000b0b0240200328025c450d002003280258102e0b0240200341e8006a280200450d002003280264102e0b02402001450d00200420024d0d00200041f6eac600360204200041086a4117360200410121040c040b200341d8006a4192fdc6004107108102200341f8006a41f09dc500410a1081024120102c2201450d002003422037023c20032001360238200341386a200341d8006a41101074200341386a200341f8006a4110107420032802402201417f4c0d04200328023821050240024020010d00410121060c010b2001102c2206450d010b20062005200110e9082105200341086a41086a200341386a41086a2802002206360200200341046a41026a2202200341f8006a41026a2d00003a0000200320032903382207370308200320032f00783b01042003412c6a2006360200200320013602202003200136021c2003200536021820032007370224200341003a00342003410d360230200341376a20022d00003a0000200320032f01043b0035200341f8006a200341186a108c0520032d009c014102460d01200341d8006a41186a2201200341f8006a41186a290300370300200341d8006a41106a2205200341f8006a41106a290300370300200341d8006a41086a200341f8006a41086a290300370300200320032903783703584120102c2208450d0020082003290358370000200841186a2001290300370000200841106a2005290300370000200841086a200341d8006a41086a2209290300370000200341386a41186a200341186a41186a290300370300200341386a41106a200341186a41106a290300370300200341386a41086a200341186a41086a29030037030020032003290318370338200341f8006a200341386a108c0502400240024020032d009c014102470d0041012101410121060c010b4120210241012101410121060340200341d8006a41186a200341f8006a41186a220a2903002207370300200341d8006a41106a200341f8006a41106a220b290300220c3703002009200341f8006a41086a220d290300220e37030020032003290378220f370358200a2007370300200b200c370300200d200e3703002003200f370378024020062001470d00200141016a22052001490d08200141017422102005201020054b1b22054104200541044b1b220541ffffff3f712005462110200541057421050240024020010d00200341003602b0010c010b200341013602b801200320083602b001200320014105743602b4010b200341a0016a20052010200341b0016a107d20032802a801210120032802a0014101460d0320032802a4012108200141057621010b200820026a22052003290378370000200541186a200a290300370000200541106a200b290300370000200541086a200d290300370000200241206a2102200641016a2106200341f8006a200341386a108c0520032d009c014102470d000b0b0240200328023c450d002003280238102e0b200341c8006a280200450d032003280244102e0c030b2001450d040b1036000b0240200328021c450d002003280218102e0b41002101410121080240200341286a280200450d002003280224102e0b410021060b200041186a2004ad42c0f0f50b7e370300200041106a20063602002000410c6a2001360200200041086a2008360200410021040b20002004360200200341c0016a24000f0b1038000bdb0401097f230041c0016b2202240020024188016a200110d305200241306a200228028801220320022802900110e60520024198016a41086a2204200241ec006a29020037030020024198016a41106a2205200241f4006a29020037030020024198016a41186a2206200241fc006a29020037030020024198016a41206a220720024184016a2802003602002002200241e4006a290200370398010240024020022802502208450d00200241e0006a2802002109200241dc006a280200210a20022802542101200241086a41206a2007280200360200200241086a41186a2006290300370300200241086a41106a2005290300370300200241086a41086a200429030037030020022002290398013703080240200228028c01450d002003102e0b200241306a41106a200241086a41106a290300370300200241306a41086a200241086a41086a290300370300200241306a41186a200241086a41186a290300370300200241306a41206a200241086a41206a28020036020020024198016a41086a2002413c6a29020037030020024198016a41106a200241c4006a29020037030020024198016a41186a200241cc006a29020037030020022002290308370330200220022902343703980102402001450d00200141186c450d002008102e0b0240200941ffffffff0371450d00200a102e0b2000200229039801370001200041196a200241b0016a290300370000200041116a200241a8016a290300370000200041096a200241a0016a290300370000410121010c010b0240200228028c01450d002003102e0b410021010b200020013a0000200241c0016a24000bd60605067f017e037f017e017f23004180016b22012400200141286a22024200370300200141206a22034200370300200141106a41086a420037030020014200370310200141106a4192fdc6004107108102200141e8006a41a8b4c600410a1081022002200141e8006a41086a29000037030020032001290068370300200141203602342001200141106a360230200141386a200141106a412010ed02024002400240200128023822040d00410021030c010b200128023c21052001200141386a41086a28020036024c20012004360248200141086a200141c8006a10ab010240024020012802080d0002400240200128020c2206200128024c4103762202200220064b1b22024103742203417f4c0d000240024020020d00410421030c010b2003102c2203450d060b2002ad2107024002402006450d000340200128024c22084104490d042001280248220228000021092001200241046a36024820012008417c6a220a36024c200a4104490d042002280004210a2001200841786a36024c2001200241086a36024802402007422088220ba722022007a7470d00200241016a22082002490d042002410174220c20082008200c491b22084104200841044b1b220841ffffffff0171200846410274210c200841037421080240024020020d00200141003602680c010b20014104360270200120033602682001200b4203863e026c0b200141d8006a2008200c200141e8006a107d2001280260210820012802584101460d03200128025c21032007428080808070832008410376ad8421070b200320024103746a2202200a3602042002200936020020074280808080107c21072006417f6a22060d000b0b2003450d030c040b20080d050b1038000b0240200742ffffffff0183500d002003102e0b0b4100210320014100360260200142013703582001410a3602542001200141306a3602502001200141d8006a360264200141fc006a41013602002001420137026c200141909dc5003602682001200141d0006a360278200141e4006a419cebc000200141e8006a103d1a2001280258200128026010ef02200128025c450d002001280258102e0b2005450d002004102e0b0240024020030d0020004100360208200042043702000c010b20002007370204200020033602000b20014180016a24000f0b1036000bc40101057f2001280208210302402001410c6a280200220420024b0d002000410036020820002004ad4220862003ad843702000f0b02402001411c6a28020022050d00200041023602080f0b200141146a2802002101200541027421052003417f6a21030240034002402004200128020022066b220720024b0d00200420024b0d020b200141046a21012003417f6a2103200721042005417c6a22050d000b200041023602080f0b2000200636020c20002007ad4220862003ad84370200200041013602080bd80c08017f017e047f017e067f027e027f027e23004180016b2201240042002102200141306a22034200370300200141286a22044200370300200141186a41086a420037030020014200370318200141186a41a081ca004107108102200141d8006a41f09dc500410a1081022003200141d8006a41086a29000037030020042001290058370300200141d8006a200141186a10880320012802582203410120031b210541022106024002400240200129025c420020031b2207422088a72203450d00200341057441606a41057641016a210841002104200521030240034020032000412010ec08450d01200242017c2102200341206a21032008200441016a2204470d000c020b0b200141306a22094200370300200141286a220a4200370300200141186a41086a220b420037030020014200370318200141d8006a41a081ca004107108102200b200141d8006a41086a220c29000037030020012001290058370318200141d8006a41f8d2c10041121081022009200c290000370300200a2001290058370300200141d8006a200141186a109b0320012802582208410420081b210d4100210641002103410021000240024002400240024002400240200129025c420020081b220e422088220fa722100e020201000b4100210320102100034020032000410176220820036a22112004200d20114102746a280200491b2103200020086b220041014b0d000b0b41012100200d20034102746a28020022082004460d012003200420084b6a21000b20094200370300200a4200370300200b420037030020014200370318200141d8006a41a081ca004107108102200b200c29000037030020012001290058370318200141d8006a41f09dc500410a108102200a41086a200c290000370000200a2001290058370000200141c8006a41046a41003a000020014100360248200141106a200141186a4120200141c8006a4105410010ca040240024002402001280210450d00200120012802142203410520034105491b36025c2001200141c8006a360258200141086a200141d8006a10ab012001280208450d010b410021030c010b200128020c21030b2003418094ebdc0370ad4280fd87d1007e2212428094ebdc038221132012428094ebdc038021122003418094ebdc036e2108200020104b0d0502402010200ea7470d00201041016a22032010490d0720104101742211200320032011491b22034104200341044b1b220341ffffffff03712003464102742111200341027421030240024020100d00200141003602180c010b200141206a41043602002001200d3602182001200f4202863e021c0b200141d8006a20032011200141186a107d200141e0006a280200210320012802584101460d02200128025c210d2003410276ad210e0b200d20004102746a220341046a2003201020006b41027410ea081a20032004360200200e42ffffffff0f83201041016a2203ad42208684210e200320084180fd87d1006c2012a720134280cab5ee01566a6a4b2106410021000b2001200e37024c2001200d360248200d0d01200141306a4200370300200141286a4200370300200141186a41086a2203420037030020014200370318200141d8006a41a081ca0041071081022003200141d8006a41086a220829000037030020012001290058370318200141d8006a41f8d2c1004112108102200a41086a2008290000370000200a2001290058370000200141186a412010ff010c020b2003450d041036000b200141306a4200370300200141286a4200370300200141186a41086a2203420037030020014200370318200141d8006a41a081ca0041071081022003200141d8006a41086a220829000037030020012001290058370318200141d8006a41f8d2c1004112108102200a41086a2008290000370000200a2001290058370000200141186a200141c8006a10c705200d450d00200e42ffffffff0383500d00200d102e0b20000d00200141186a41086a200237030020014102360218200141186a108c06200141013602182001200436021c200141d8006a200141186a10a404200141d3006a200141d8006a41086a2802003600002001200129035837004b200141e4006a200141cf006a290000370000200141c28289aa04360059200141023a00582001200129004837005d200141d8006a10a5040b0240200742ffffff3f83500d002005102e0b20014180016a240020060f0b200020101045000b1038000bd90c04047f017e027f067e230041d0026b22052400200541c8016a2001200210f2050240024002400240024020052802d0014102460d0020052802c8012106200541c8016a41086a2001280204220741086a290000370300200541c8016a41106a200741106a290000370300200541c8016a41186a200741186a290000370300200520063602e801200520072900003703c801200541f0016a200541c8016a10cd0520052802f0012108200520052802f8012207360284022005200836028002200541b0026a2008200710ed020240024020052802b00222070d00420021090c010b20052802b402210a024002400240200541b0026a41086a280200220b4110490d00200b4170714110470d010b200541003602c802200542013703c0022005410a36028c02200520054180026a360288022005200541c0026a36029402200541ac026a41013602002005420137029c02200541909dc50036029802200520054188026a3602a80220054194026a419cebc00020054198026a103d1a20052802c00220052802c80210ef02024020052802c402450d0020052802c002102e0b420021090c010b200741186a290000210c200741086a290000210d2007290010210e2007290000210f420121090b200a450d002007102e0b200d4200200942005222071b210d200f420020071b210f024020052802f401450d002008102e0b200c420020071b210c200e420020071b210e0240200f200354200d200454200d2004511b0d00200f200385200d2004858450450d04200541b8016a20032004428094ebdc03420010e608200541a8016a20032004428094ebdc03420010e70820054198016a20052903a801200541a8016a41086a2903002001350228220d420010e80820054188016a4200200529039801220f200d20052903b8017e220d428094ebdc0380a7417f200d428080808080c0b2cd3b541b200d428094ebdc03824280cab5ee01566aad7c220d200e7d22092009200d5620054198016a41086a290300200d200f54ad7c220f200c7d200d200e54ad7d220d200f56200d200f511b22021b220f4200200d20021b220d428094ebdc03420010e608200541f8006a200f200d428094ebdc03420010e708200541e8006a2005290378200541f8006a41086a2903004280cab5ee01420010e8082005290368220f200529038801220d420188a7200d4280cab5ee017e428094ebdc03824280cab5ee01566aad7c220d200541e8006a41086a290300200d200f54ad7c220f84500d040c020b200541d8006a20032004428094ebdc03420010e608200541c8006a20032004428094ebdc03420010e708200541386a2005290348200541c8006a41086a29030020013502282209420010e808200541286a420020052903382210200920052903587e2209428094ebdc0380a7417f2009428080808080c0b2cd3b541b2009428094ebdc03824280cab5ee01566aad7c2209200e7d22112011200956200541386a41086a2903002009201054ad7c2210200c7d2009200e54ad7d220920105620092010511b22071b22104200200920071b2209428094ebdc03420010e608200541186a20102009428094ebdc03420010e708200541086a2005290318200541186a41086a2903004280cab5ee01420010e808200128022422072003200f7d220920072903007c2210370300200741086a22072004200d7d2003200f54ad7d20072903007c2010200954ad7c370300200141106a2207200728020022072002200720024b1b3602002005290308220f2005290328220d420188a7200d4280cab5ee017e428094ebdc03824280cab5ee01566aad7c220d200541086a41086a290300200d200f54ad7c220f8450450d01200e210d0c020b410021010c030b2001280220220220022903002209200d7c2210370300200241086a22022002290300200f7c2010200954ad7c370300200c200f7c200e200d7c220d200e54ad7c210c0b200141013a002c200541b0026a200541c8016a10cd0520052802b802210220052802b0022101200541003602c802200542013703c002200520043703a0022005200337039802200541c0026a20054198026a411010742005200c3703a0022005200d37039802200541c0026a20054198026a411010742001200220052802c002220720052802c80210b201024020052802c402450d002007102e0b20052802b402450d002001102e0b410121010b2000200636020420002001360200200541d0026a24000b9c0b09047f017e047f027e017f017e037f037e027f230041e0016b220324002003200236021c20032001360218200341206a2001200210ed0202400240200328022022040d00200041003602000c010b200328022421052003200341286a28020036023420032004360230200341106a200341306a10ab010240024020032802100d000240024002400240024020032802142206200328023441d8006e2201200120064b1bad42d8007e2207422088a70d002007a72201417f4c0d000240024020010d00410821080c010b2001102c2208450d020b200141d8006ead2107024002402006450d00200341b8016a41017221020340200341b8016a200341306a10930120032d00b8014101460d0720034198016a41186a2209200241186a29000037030020034198016a41106a220a200241106a29000037030020034198016a41086a220b200241086a2900003703002003200229000037039801200328023422014110490d072003200141706a36023420032003280230220141106a360230200141086a290000210c2001290000210d200341b8016a200341306a10e90120032802b801220e450d0720032902bc01210f200341086a200341306a10ab0102402003280208450d00200341003602b8010c070b200341b8016a200341306a200328020c10920120032802b8012210450d0620032802bc012111200328023422014110490d0520032802c0012112200341d8006a41086a200b2903002213370300200341d8006a41106a200a2903002214370300200341d8006a41186a20092903002215370300200341386a41186a22092015370300200341386a41106a220a2014370300200341386a41086a220b20133703002003200141706a36023420032003280230220141106a3602302003200329039801221337035820032013370338200141086a29000021132001290000211402402007422088a722012007a7470d00200141016a22162001490d0420014101742217201620162017491b22164104201641044b1bad42d8007e2215422088a74541037421162015a721170240024020010d00200341003602b8010c010b200341083602c001200320083602b8012003200141d8006c3602bc010b20034198016a20172016200341b8016a107d20032802a00121162003280298014101460d03200328029c012108200742808080807083201641d8006ead8421070b2008200141d8006c6a220120143703102001200c3703082001200d3703002001200e360220200141186a2013370300200141346a2012360200200141306a20113602002001412c6a2010360200200141246a200f370200200141386a2003290338370200200141c0006a200b290300370200200141c8006a200a290300370200200141d0006a200929030037020020074280808080107c21072006417f6a22060d000b0b2008450d0620002007370204200020083602000c070b20160d010b1038000b1036000b201141ffffff3f71450d002010102e0b200fa72201450d00200141306c450d00200e102e0b200341d8006a41086a200341f8006a41086a29030037030002402007422088a72201450d00200141d8006c2102200841306a210103400240200141746a2802002206450d00200641306c450d00200141706a280200102e0b0240200128020041ffffff3f71450d002001417c6a280200102e0b200141d8006a2101200241a87f6a22020d000b0b2007a72201450d00200141d8006c450d002008102e0b200341003602a00120034201370398012003410a36027c2003200341186a360278200320034198016a360258200341cc016a4101360200200342013702bc01200341909dc5003602b8012003200341f8006a3602c801200341d8006a419cebc000200341b8016a103d1a20032802980120032802a00110ef020240200328029c01450d00200328029801102e0b200041003602000b2005450d002004102e0b200341e0016a24000bb10b01047f230041d0006b22012400200141086a4192fdc6004107108102200141186a41b29dc500410b108102200120003602342001200141346a410410a301370338200141cc006a200141346a41046a3602002001200141c0006a3602442001200141346a3602482001200141386a360240200141286a200141c0006a107c024002402001280230220241206a2203417f4c0d000240024020030d00410121040c010b2003102c2204450d020b200141003602482001200336024420012004360240200141c0006a200141086a41101074200141c0006a200141186a41101074200141c0006a20012802282203200210740240200128022c450d002003102e0b20012802402203200128024810890302402001280244450d002003102e0b200141086a4192fdc6004107108102200141186a41c4afc6004112108102200120003602342001200141346a410410a301370338200141cc006a200141346a41046a3602002001200141c0006a3602442001200141346a3602482001200141386a360240200141286a200141c0006a107c2001280230220241206a2203417f4c0d000240024020030d00410121040c010b2003102c2204450d020b200141003602482001200336024420012004360240200141c0006a200141086a41101074200141c0006a200141186a41101074200141c0006a20012802282203200210740240200128022c450d002003102e0b20012802402203200128024810890302402001280244450d002003102e0b200141086a4192fdc6004107108102200141186a41c0b0c6004112108102200120003602342001200141346a410410a301370338200141cc006a200141346a41046a3602002001200141c0006a3602442001200141346a3602482001200141386a360240200141286a200141c0006a107c2001280230220241206a2203417f4c0d000240024020030d00410121040c010b2003102c2204450d020b200141003602482001200336024420012004360240200141c0006a200141086a41101074200141c0006a200141186a41101074200141c0006a20012802282203200210740240200128022c450d002003102e0b20012802402203200128024810890302402001280244450d002003102e0b200141086a4192fdc6004107108102200141186a418cb1c6004113108102200120003602342001200141346a410410a301370338200141cc006a200141346a41046a3602002001200141c0006a3602442001200141346a3602482001200141386a360240200141286a200141c0006a107c2001280230220241206a2203417f4c0d000240024020030d00410121040c010b2003102c2204450d020b200141003602482001200336024420012004360240200141c0006a200141086a41101074200141c0006a200141186a41101074200141c0006a20012802282203200210740240200128022c450d002003102e0b20012802402203200128024810ff0102402001280244450d002003102e0b200141c0006a200010a10520012802402203200128024810ff0102402001280244450d002003102e0b200141086a4192fdc6004107108102200141186a4188b2c600410e108102200120003602342001200141346a410410a301370338200141cc006a200141346a41046a3602002001200141c0006a3602442001200141346a3602482001200141386a360240200141286a200141c0006a107c2001280230220241206a2203417f4c0d000240024020030d00410121040c010b2003102c2204450d020b200141003602482001200336024420012004360240200141c0006a200141086a41101074200141c0006a200141186a41101074200141c0006a20012802282203200210740240200128022c450d002003102e0b20012802402203200128024810ff0102402001280244450d002003102e0b200141c0006a200010950320012802402200200128024810ff0102402001280244450d002000102e0b200141d0006a24000f0b1038000b1036000bae0301037f230041f0006b22032400200341086a4192fdc6004107108102200341186a41c4afc6004112108102200320013602382003200341386a410410a301370348200341ec006a2201200341386a41046a3602002003200341c8006a41086a3602642003200341386a3602682003200341c8006a360260200341286a200341e0006a107c024002404120102c2204450d002003422037024c20032004360248200341c8006a2002412010742003200328024822022003280250220410a3013703582001200220046a360200200320023602682003200341d8006a41086a3602642003200341d8006a360260200341386a200341e0006a107c0240200328024c450d002002102e0b20032802302201200328024022046a41206a2202417f4c0d010240024020020d00410121050c010b2002102c2205450d010b2000410036020820002002360204200020053602002000200341086a411010742000200341186a4110107420002003280228220220011074200020032802382201200410740240200328023c450d002001102e0b0240200328022c450d002002102e0b200341f0006a24000f0b1036000b1038000bae0301037f230041f0006b22032400200341086a4192fdc6004107108102200341186a41c0b0c6004112108102200320013602382003200341386a410410a301370348200341ec006a2201200341386a41046a3602002003200341c8006a41086a3602642003200341386a3602682003200341c8006a360260200341286a200341e0006a107c024002404120102c2204450d002003422037024c20032004360248200341c8006a2002412010742003200328024822022003280250220410a3013703582001200220046a360200200320023602682003200341d8006a41086a3602642003200341d8006a360260200341386a200341e0006a107c0240200328024c450d002002102e0b20032802302201200328024022046a41206a2202417f4c0d010240024020020d00410121050c010b2002102c2205450d010b2000410036020820002002360204200020053602002000200341086a411010742000200341186a4110107420002003280228220220011074200020032802382201200410740240200328023c450d002001102e0b0240200328022c450d002002102e0b200341f0006a24000f0b1036000b1038000b850201037f230041d0006b22022400200241086a4192fdc6004107108102200241186a41d0b3c6004110108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000ba20a08037f047e017f027e017f027e017f047e23004180026b2201240020014200370348200142003703402001200041186a29030037035820012000290310370350200041386a2000290300200041086a290300200141d0006a200141c0006a10ca080240200041286a28020041306c2202450d002000280220210303402003200341206a290300200341286a290300200141d0006a200141c0006a10ca08200341306a2103200241506a22020d000b0b200141c0006a41086a29030021042001290340210502400240024020012903502206200141d0006a41086a290300220784500d00200041346a28020022030d010b2001200537036020012004370368024020052004844200520d002001200141e0006a3602e001200141e0016a10cc020c020b200142f0f2bda1a7ee9cb9f9003703e001200141e0006a200141e0016a10cd022001200141e0006a2005200410fd01200141f0016a200141086a290300220620047d20012903002207200554ad7d200420067d2005200754ad7d2007200556200620045620062004511b22031b3703002001200720057d200520077d20031b3703e80120012003ad3703e001200141e0016a41086a21020240024020030d00200120023602fc01200141fc016a10cc020c010b200120023602fc01200141fc016a10ce020b200141f8006a2004370300200141f0006a2005370300200141e8006a41063a00002001410e3a0060200141e0006a10fe010c010b200028022c2102200141306a200520062005200654200420075420042007511b22081b22092004200720081b220a2003ad420010e70820034105742108200141e0006a41086a210b200141306a41086a290300210c2001290330210d200141f0006a210e2009210f200a21100340200141206a2002200d200f200f200d562010200c562010200c511b22031b2207200c201020031b220610fd01200e200141206a41086a290300221120067d20012903202212200754ad7d200620117d2007201254ad7d2012200756201120065620112006511b22031b3703002001201220077d200720127d20031b37036820012003ad370360201020067d2106200f200754ad21100240024020030d002001200b3602e001200141e0016a10cc020c010b2001200b3602e001200141e0016a10ce020b200620107d2110200f20077d210f200241206a2102200841606a22080d000b2001427f2004200a7d2005200954ad7d221220107c200520097d2211200f7c220c2011542203ad7c22072003200720125420072012511b22031b22063703682001427f200c20031b220737036002402011200f842012201084844200520d002001200141e0006a3602e001200141e0016a10cc020c010b200142f0f2bda1a7ee9cb9f9003703e001200141e0006a200141e0016a10cd02200141106a200141e0006a2007200610fd01200141f0016a200141106a41086a290300221020067d2001290310220f200754ad7d200620107d2007200f54ad7d200f200756201020065620102006511b22031b3703002001200f20077d2007200f7d20031b3703e80120012003ad3703e001200141e0016a41086a21020240024020030d00200120023602fc01200141fc016a10cc020c010b200120023602fc01200141fc016a10ce020b200141f8006a2006370300200141f0006a2007370300200141e8006a41063a00002001410e3a0060200141e0006a10fe010b0240200041246a2802002203450d00200341306c450d002000280220102e0b0240200041306a28020041ffffff3f71450d00200028022c102e0b20014180026a24000b8f0201027f20014180feff07714108762102024002402001410171450d00411f210341aae7cc00210102400240200241ff01710e03000103000b41c100210341e9e6cc0021010c020b41c100210341a8e6cc0021010c010b411f21034189e6cc002101024002400240024002400240024002400240200241ff01710e0a00060102030405090708000b4120210341e9e5cc0021010c080b412721034189e5cc0021010c070b4117210341f2e4cc0021010c060b41d3e4cc0021010c050b4126210341ade4cc0021010c040b412a21034183e4cc0021010c030b4139210341b0e5cc0021010c020b413b210341c8e3cc0021010c010b41d200210341f6e2cc0021010b20002003360204200020013602000b4201027f41032102024020014105490d004100210302400240024020002d00040e03020001030b410121030c010b410221030b2003410320014105461b21020b20020be30101047f0240024002400240200128020022022802042203450d00200228020022042d0000210520022003417f6a3602042002200441016a36020020050e020203010b200041023602000f0b200041023602000f0b200041003602000f0b02402001280200220228020422034104490d0020022802002204280000210520022003417c6a3602042002200441046a3602002001280200220228020422014104490d00200020053602042000410136020020022802002203280000210420022001417c6a3602042002200341046a360200200041086a20043602000f0b200041023602000bc40101047f024002400240024020012802042202450d00200128020022032d0000210420012002417f6a22053602042001200341016a36020020040e020203010b200041023602000f0b200041023602000f0b200041003602000f0b024020054104490d002003280001210520012002417b6a22043602042001200341056a36020020044104490d002000200536020420004101360200200328000521042001200241776a3602042001200341096a360200200041086a20043602000f0b200041023602000bc60401047f230041106b22022400024002400240024020002d00000e03010200010b200041046a280200220041ffff03200041ffff03491b220341c0006a41ff0020032000413e2003413e491b2204461b2100200320046b2103410121040340024002400240200441ff01714102470d00200021050c010b410021052004410171450d00410021040c010b2003450d0402400240200341ff014b0d002003417f6a2100410021030c010b200341817e6a210341ff0121000b410221040b200220003a000f20012002410f6a41011074200521000c000b0b200241003a000f20012002410f6a410110740c010b200041046a2802002203413e200341ffff03200341ffff03491b2203413e491b2104024020002d0001450d00200341406a417f20032004461b2100200320046b2103410121040340024002400240200441ff01714102470d00200021050c010b410021052004410171450d00410021040c010b2003450d0302400240200341ff014b0d002003417f6a2100410021030c010b200341817e6a210341ff0121000b410221040b200220003a000f20012002410f6a41011074200521000c000b0b200341807f7341bf7f20032004461b2100200320046b2103410121040340024002400240200441ff01714102470d00200021050c010b410021052004410171450d00410021040c010b2003450d0202400240200341ff014b0d002003417f6a2100410021030c010b200341817e6a210341ff0121000b410221040b200220003a000f20012002410f6a41011074200521000c000b0b200241106a24000b13002000411436020420004184ecc6003602000bd5b1020a017f027e057f027e027f057e107f017e047f027e230041e0066b2203240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e18000102030405060708090a0b0c0d0e0f10111213201f1e1d000b200341f4056a4101360200200342013702e4052003419cc3cb003602e005200341043602840520034194c3cb0036028005200320034180056a3602f005200341e0056a41f4ebc6001044000b200141d0006a2903002104200141c8006a2903002105200341d8026a41026a200141276a2d00003a0000200341b0036a41086a200141386a290200370300200341b0036a41106a200141c0006a2902003703002003200141256a2f00003b01d8022003200141306a2902003703b003200141246a2d00002106200141286a28020021072001412c6a2802002108200341b8046a41206a200141216a2d00003a0000200341b8046a41186a200141196a290000370300200341b8046a41106a200141116a290000370300200341b8046a41086a200141096a290000370300200320012900013703b804200341e0056a41286a200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a200241086a290200370300200320022902003703e00520034180056a200341e0056a10c10220034180046a41086a220220034180056a41096a29000037030020034180046a41106a220120034180056a41116a29000037030020034180046a41186a220920034180056a41196a29000037030020032003290081053703800402400240024020032d0080054101460d00200341d8036a41186a2009290300370300200341d8036a41106a2001290300370300200341d8036a41086a200229030037030020032003290380043703d803200341e0056a200341d8036a10e50520032802e005220120032802e805108f022102024020032802e405450d002001102e0b02402002450d00200341a8046a41031082060c020b20034180046a41026a2202200341d8026a41026a2d00003a0000200341e0056a41086a2201200341b0036a41086a290300370300200341e0056a41106a200341b0036a41106a290300370300200320032f01d8023b018004200320032903b0033703e0050240024002400240024020064107710e03000201020b200341f0026a410d6a2206200341e0056a410d6a290000370000200341f0026a41086a22092001290300370300200341d8056a41026a220120022d00003a000020034190036a41086a2202200929030037030020034190036a410d6a22092006290000370000200320032f0180043b01d805200320032903e00537039003200320012d00003a008205200320032f01d8053b0180052003200836008705200320073600830520034198056a200929000037000020034193056a2002290300370000200320032903900337008b05200341e0056a20034180056a10d30520032802e005220120032802e805108f022102024020032802e405450d002001102e0b2002450d03200341a8046a41041082060c060b02402008450d002007102e0b200341d8056a41026a2003418c036a41026a2d00003a000020034190036a41086a200341f0026a41086a29030037030020034190036a410d6a200341f0026a410d6a290000370000200320032f018c033b01d805200320032903f002370390030c010b200341d8056a41026a2003418c036a41026a2d00003a000020034190036a41086a200341f0026a41086a29030037030020034190036a410d6a200341f0026a410d6a290000370000200320032f018c033b01d805200320032903f002370390030b200341013a00a8040c030b0240200542ffc7afa0255620044200522004501b0d00200341a8046a41081082060c030b0240200341d8036a1083060d0020034180046a200341d8036a10e505200328028804210120032802800421024120102c2206450d41200342203702e405200320063602e005200341e0056a20034180056a412010742002200120032802e005220620032802e80510b201024020032802e405450d002006102e0b0240200328028404450d002002102e0b200341e0056a41206a200341b8046a41206a2d00003a0000200341e0056a41186a200341b8046a41186a290300370300200341e0056a41106a200341b8046a41106a290300370300200341e0056a41086a200341b8046a41086a290300370300200320032903b8043703e005200341e0046a200341d8036a10840620032802e804210120032802e00421022003410036028804200342013703800402400240024002400240024020032d00e0050e050001020304050b200341003a00900320034180046a20034190036a410110740c040b200341013a00900320034180046a20034190036a410110740c030b200341023a00900320034180046a20034190036a410110740c020b200341033a00900320034180046a20034190036a4101107420034180046a200341e0056a410172412010740c010b200341043a00900320034180046a20034190036a410110740b20022001200328028004220620032802880410b2010240200328028404450d002006102e0b024020032802e404450d002002102e0b20034180046a41186a2202420037030020034180046a41106a2201420037030020034180046a41086a220642003703002003420037038004200341f0026a4192fdc60041071081022006200341f0026a41086a2207290300370300200320032903f0023703800420034190036a4194adc600410a108102200220034190036a41086a22082903003703002001200329039003370300200341106a20034180046a4120108e02200328021421092003280210210a2002420037030020014200370300200642003703002003420037038004200341f0026a4192fdc600410710810220062007290300370300200320032903f0023703800420034190036a41e0a9c600410c108102200220082903003703002001200329039003370300200341086a20034180046a4120108e02200328020c21022003280208210120034180046a200341d8036a10c802200341e0056a200328028004220720032802880410c902410020094100200a1b2206200241d40020011b6b2202200220064b1b2102200341e0056a41106a290300420020032903e00542015122011b210b20032903e805420020011b210c0240200328028404450d002007102e0b200341e0056a41086a41053a0000200341e9056a20032903d803370000200341f1056a200341d8036a41086a290300370000200341f9056a200341d8036a41106a29030037000020034181066a200341d8036a41186a220129030037000020034198066a200b2004200c200554200b200454200b2004511b22071b220437030020034190066a200c200520071b2205370300200341043a00e005200341e0056a10fe012008200341eb036a2900003703002003419d036a2001290000370000200320032f01d8033b01d805200320032d00da033a00da05200320032900e303370390034100200620026b2209200920064b1b220141ffffffff03712001470d3b20014102742208417f4c0d3b20032800df03210d20032800db03210e0240024020080d00410421070c010b2008102c2207450d420b024002402008410276220a20014f0d002008410176220a2001200a20014b1b22014104200141044b1b220141ffffffff0371200146410274210a200141027421010240024020080d00200341003602e0050c010b200341e8056a4104360200200320083602e405200320073602e0050b20034180046a2001200a200341e0056a107d20034188046a28020021012003280280044101460d0120032802840421072001410276210a0b410021010240200620024d0d0020072101034020012002360200200141046a21012006200241016a2202470d000b200921010b200341e0056a41186a20043703002003419a066a20032d00da053a00002003419f066a200d3600002003419b066a200e360000200341a3066a20032903900337000020034194066a200136020020034190066a200a36020020034188066a4100360200200341ab066a20034198036a290300370000200341b0066a2003419d036a290000370000200320053703f005200320053703e005200320032f01d8053b0198062003200736028c062003420837038006200320043703e80542f3e885db96cddbb32020034198066a20052004411f10850620034180056a200341e0056a10d205024020034184066a2802002202450d00200241186c450d00200328028006102e0b024020032802900641ffffffff0371450d00200328028c06102e0b200341063a00a8040c430b2001450d3b0c410b200341a8046a41121082060c020b200341023a00a8040b200641ff01714102470d002008450d002007102e0b20032d00a8044106460d3e20032802a8042102200020032902ac04370024200041206a2002360000200041186a41003a000020004200370308200042013703000c3f0b200141106a2903002104200141086a2903002105200341e0056a41286a200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a200241086a290200370300200320022902003703e00520034180056a200341e0056a10c10220034180046a41086a220220034189056a29000037030020034180046a41106a220120034191056a29000037030020034180046a41186a220620034180056a41196a29000037030020032003290081053703800420032d0080054101460d19200341e0046a41186a2006290300370300200341e0046a41106a2001290300370300200341e0046a41086a200229030037030020032003290380043703e004200341d8036a200341e0046a10e505200341e0056a20032802d803220220032802e00310f40220034180056a41086a200341ea056a29010037030020034180056a41106a200341f2056a29010037030020034180056a41176a2201200341e0056a41196a290000370000200320032901e2053703800502400240024020032d00e0054101470d0020032d00e105210620034190036a41176a200129000037000020034190036a41106a220120034180056a41106a29030037030020034190036a41086a220820034180056a41086a290300370300200320032903800537039003024020032802dc03450d002002102e0b20034180046a41176a220720034190036a41176a29000037000020034180046a41106a22022001290300370300200341c1046a2008290300370000200341c9046a2002290300370000200341b8046a41186a2007290000370000200320063a00b80420032003290390033700b90420034190036a200341b8046a10d305200341e0056a200328029003220120032802980310e60520034180046a41086a2003419c066a2902003703002002200341a4066a29020037030020034180046a41186a2202200341ac066a29020037030020034180046a41206a2206200341b4066a280200360200200320034194066a2902003703800402402003280280062208450d00200341e0056a41186a290300210f200341e0056a41086a290300210c20034190066a28020021072003418c066a280200210920034188066a280200210a20032903f005211020032903e005210b200328028406210d200341d8036a41206a2006280200360200200341d8036a41186a2002290300370300200341d8036a41106a220220034180046a41106a290300370300200341d8036a41086a220620034180046a41086a29030037030020032003290380043703d8030240200328029403450d002001102e0b200341b0036a41086a22012006290300370300200341b0036a41106a22062002290300370300200341b0036a41186a2202200341d8036a41186a290300370300200341b0036a41206a220e200341d8036a41206a28020036020020034180056a41186a200f370300200341b0056a2007360200200341a8056a200a360200200341a4056a200d360200200320032903d8033703b00320032010370390052003200b37038005200320093602ac05200320083602a0052003200c37038805200341d4056a200e280200360200200341cc056a2002290300370200200341c4056a2006290300370200200341bc056a2001290300370200200341b4056a20032903b00337020020034180046a200341e0046a10c802200341e0056a200328028004220120032802880410c902200341e0056a41106a290300420020032903e00542015122021b210f20032903e805420020021b21100240200328028404450d002001102e20034188056a290300210c200329038005210b0b2010200b7d2211201056200f200c7d2010200b54ad7d2210200f562010200f511b0d0320034180056a41186a2202290300211220032003290390052213200520112011200556201020045620102004511b22011b22057c220f37039005200220122004201020011b22107c200f201354ad7c220437030020032005200b7c220b3703800520032010200c7c200b200554ad7c220c37038805200f42ffc7afa0255620044200522004501b0d02200341f0026a4108108206024020032802a4052202450d00200241186c450d0020032802a005102e0b20032802b00541ffffffff0371450d3e20032802ac05102e0c3e0b0240200328029403450d002001102e0b200341f0026a41011082060c3d0b024020032802dc03450d002002102e0b200341f0026a41021082060c3c0b200341e0056a41386a201037030020034190066a2005370300200341e0056a41086a41053a0000200341e9056a20032903e004370000200341f1056a200341e0046a41086a290300370000200341f9056a200341f0046a29030037000020034181066a200341e0046a41186a290300370000200341043a00e005200341e0056a10fe0142f3e885db96cddbb32020034180056a41386a200b200c411f108506200341b8046a20034180056a10d2050b024020032802a4052202450d00200241186c450d0020032802a005102e0b024020032802b00541ffffffff0371450d0020032802ac05102e0b200341063a00f0020c3b0b200141106a2903002104200141086a2903002105200341e0056a41286a2206200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a2208200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a2207200241086a290200370300200320022902003703e00520034180056a200341e0056a10c10220034190036a41086a220220034194056a2902003703002003419d036a220120034199056a290000370000200320032f0081053b01d805200320032d0083053a00da0520032003418c056a290200370390030240024020032d0080054101460d0020034180056a41086a2802002109200328028405210a200341cb046a2002290300370000200341b8046a41186a2001290000370000200320032d00da053a00ba04200320032f01d8053b01b804200320093600bf042003200a3600bb0420032003290390033700c304200341e0046a200341b8046a10d305200341e0056a20032802e004220920032802e80410e60520034180046a41086a2003419c066a29020037030020034180046a41106a200341a4066a29020037030020034180046a41186a200341ac066a29020037030020034180046a41206a200341b4066a280200360200200320034194066a2902003703800402402003280280062201450d002008290300210b2007290300210f20034190066a28020021082003418c066a28020021072006280200210620032903f005210c20032903e00521102003280284062102200341d8036a41206a220a20034180046a41206a280200360200200341d8036a41186a220d20034180046a41186a290300370300200341d8036a41106a220e20034180046a41106a290300370300200341d8036a41086a221420034180046a41086a29030037030020032003290380043703d803024020032802e404450d002009102e0b200341b0036a41086a22092014290300370300200341b0036a41106a2214200e290300370300200341b0036a41186a220e200d290300370300200341b0036a41206a220d200a28020036020020034180056a41186a200b370300200341b0056a2008360200200341a8056a2006360200200341a4056a2002360200200320032903d8033703b0032003200c370390052003201037038005200320073602ac05200320013602a0052003200f37038805200341d4056a200d280200360200200341cc056a200e290300370200200341c4056a2014290300370200200341bc056a2009290300370200200341b4056a20032903b0033702002006411f4d0d02200341a8046a4109108206024020032802a4052202450d00200241186c450d0020032802a005102e0b20032802b00541ffffffff0371450d3920032802ac05102e0c390b024020032802e404450d002009102e0b200341a8046a41011082060c380b200341023a00a8040c380b02400240200c2005200c200554200b200454200b2004511b22061b2205200b200420061b220484500d0020034180056a41186a4200200b20047d200c200554ad7d220f200c20057d22104280c8afa025544100200f501b22061b37030020034200201020061b3703900520034180046a41186a2202420037030020034190046a2208420037030020034180046a41086a220742003703002003420037038004200341f0026a4192fdc60041071081022007200341f0026a41086a290300370300200320032903f0023703800420034190036a4194adc600410a108102200220034190036a41086a2903003703002008200329039003370300200341186a20034180046a4120108e02200328021c210820032802182107024020032802a805220220032802a405470d00200241016a22092002490d382002410174220a2009200a20094b1b22094104200941044b1bad42187e220f422088a7454103742109200fa7210a0240024020020d00200341003602e0050c010b200341e0056a41086a4108360200200320013602e0052003200241186c3602e4050b20034180046a200a2009200341e0056a107d20034188046a28020021022003280280044101460d02200320032802840422013602a0052003200241186e3602a40520032802a80521020b2001200241186c6a2202200b200420061b22043703082002200c200520061b220537030020022008411c6a411c20071b360210200320032802a80541016a3602a80542f3e885db96cddbb32020034180056a41386a20032903800520034180056a41086a290300411f108506200341b8046a20034180056a10d205200341e0056a41386a200437030020034190066a2005370300200341e0056a41086a41063a0000200341e9056a20032903b805370000200341f1056a200341c0056a290300370000200341f9056a200341c8056a29030037000020034181066a200341d0056a290300370000200341043a00e005200341e0056a10fe0120032802a40521020b02402002450d00200241186c450d0020032802a005102e0b024020032802b00541ffffffff0371450d0020032802ac05102e0b200341063a00a8040c390b20020d3b0c350b200141046a280200210e200341e0056a41286a2207200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a220a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a220d200241086a290200370300200320022902003703e00520034180056a200341e0056a10c102410221022003418c036a41026a220120032d0083053a0000200341f0026a41086a220620034194056a290200370300200341fd026a220820034199056a290000370000200320032f0081053b018c0320032003418c056a2902003703f002024002400240024020032d0080054101460d0020034180056a41086a28020021022003280284052109200341f3046a2006290300370000200341e0046a41186a2008290000370000200320032f018c033b01e004200320023600e704200320093600e304200320032903f0023700eb04200320012d00003a00e204200341b8046a200341e0046a10d305200341e0056a20032802b804221420032802c00410e60520034180046a41086a2003419c066a29020037030020034180046a41106a200341a4066a29020037030020034180046a41186a200341ac066a29020037030020034180046a41206a200341b4066a280200360200200320034194066a2902003703800402402003280280062209450d00200a2903002104200d290300210f20034190066a280200210d2003418c066a28020021152007280200210220032903f005210520032903e0052110200328028406210a200341d8036a41206a220720034180046a41206a280200360200200341d8036a41186a221620034180046a41186a2201290300370300200341d8036a41106a221720034180046a41106a2206290300370300200341d8036a41086a221820034180046a41086a220829030037030020032003290380043703d803024020032802bc04450d002014102e0b200341b0036a41086a22142018290300370300200341b0036a41106a22182017290300370300200341b0036a41186a22172016290300370300200341b0036a41206a2216200728020036020020034180056a41186a2004370300200341b0056a200d360200200341a8056a2002360200200341a4056a200a360200200320032903d8033703b00320032005370390052003201037038005200320153602ac05200320093602a0052003200f37038805200341d4056a2016280200360200200341cc056a2017290300370200200341c4056a2018290300370200200341bc056a2014290300370200200341b4056a220720032903b003370200200341b8046a41186a200341d0056a220d290300370300200341b8046a41106a200341c8056a290300370300200341b8046a41086a200341c0056a290300370300200320032903b8053703b8042001420037030020064200370300200842003703002003420037038004200341f0026a4192fdc60041071081022008200341f0026a41086a290300370300200320032903f0023703800420034190036a4194adc600410a108102200120034190036a41086a2903003703002006200329039003370300200341206a20034180046a4120108e0220032802204101460d0220102105200f210b0c030b024020032802bc04450d002014102e0b200341e0056a4101108206200341da026a20032d00e3053a0000200320032f00e1053b01d80220032d00e005210220032902e40521040c030b0c020b20032802242108200341e0056a41086a2216200728020036020020034190036a41086a2217200341cb056a29000037030020034190036a410d6a2218200d290000370000200320032902ac053703e0052003200341c3056a220d290000370390032003200341b8056a22142f01003b01d8052003201441026a22192d00003a00da05200341ac056a211520034180056a41186a221a2903002111200341bf056a280000211b200341bb056a280000211c20032903900521120240024020020d0020102105200f210b200921010c010b2009200241186c6a210720102105200f210b20092102200921010340200241086a290300210c20022903002104024002402008200241106a28020022064f0d0020012004370300200120063602102001200c370308200141186a21010c010b4200200b200c7d2005200454ad7d220c200520047d2204200556200c200b56200c200b511b22061b210b4200200420061b21050b200241186a22022007470d000b0b201520032903e005370200201420032f01d8053b0100200d200329039003370000201a2011370300201920032d00da053a0000201541086a2016280200360200200d41086a2017290300370000200d410d6a2018290000370000200320123703900520032005370380052003200a3602a4052003201b3600bf052003201c3600bb052003200b37038805200320093602a0052003200120096b41186d22023602a8050b0240024020020d002003290390054280c8afa02554410020034198056a290300501b0d010b42f3e885db96cddbb320200341b8056a2005200b411f108506200ead42f8d2017e4288ca87d8017c2105200341e0046a20034180056a10d2054201210b0c350b200341e0056a200341b8046a200e108606200341b0036a41026a220120032d00e3053a0000200320032f00e1053b01b003024020032d00e00522024106470d0042f3e885db96cddbb320200341b8046a10ea024200210b0c350b20032902e4052104200341d8026a41026a20012d00003a0000200320032f01b0033b01d802024020032802a4052201450d00200141186c450d0020032802a005102e0b20032802b00541ffffffff0371450d0020032802ac05102e0b200341d4026a41026a2201200341d8026a41026a2d00003a0000200320032800a8043602e002200320032f01d8023b01d4022003200341ab046a2800003600e302200041186a41003a000020004200370308200020032802e0023600192000411c6a20032800e302360000200041206a20023a000020002004370024200020032f01d4023b0021200041236a20012d00003a0000200042013703000c3c0b200141086a2d00002108200141046a2802002107200341e0056a41286a2209200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a220a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a220d200241086a290200370300200320022902003703e00520034180056a200341e0056a10c10220034180046a41086a220220034189056a29000037030020034180046a41106a220120034191056a29000037030020034180046a41186a220620034199056a29000037030020032003290081053703800420032d0080054101460d15200341b8046a41186a2006290300370300200341b8046a41106a2001290300370300200341b8046a41086a200229030037030020032003290380043703b804200341e0046a200341b8046a10d305200341e0056a20032802e004220e20032802e80410e60520022003419c066a2902003703002001200341a4066a2902003703002006200341ac066a29020037030020034180046a41206a200341b4066a280200360200200320034194066a2902003703800402402003280280062201450d00200a2903002104200d290300210520034190066a28020021062003418c066a280200210a2009280200210920032903f005210b20032903e005210c2003280284062102200341d8036a41206a220d20034180046a41206a280200360200200341d8036a41186a221420034180046a41186a290300370300200341d8036a41106a221520034180046a41106a290300370300200341d8036a41086a221620034180046a41086a29030037030020032003290380043703d803024020032802e404450d00200e102e0b200341b0036a41086a220e2016290300370300200341b0036a41106a22162015290300370300200341b0036a41186a22152014290300370300200341b0036a41206a2214200d28020036020020034180056a41186a2004370300200341b0056a2006360200200341a8056a2009360200200341a4056a2002360200200320032903d8033703b0032003200b370390052003200c370380052003200a3602ac05200320013602a0052003200537038805200341d4056a2014280200360200200341cc056a2015290300370200200341c4056a2016290300370200200341bc056a200e290300370200200341b4056a20032903b003370200200341e0056a200341b8056a220910d10520032802e005220d20032802e80510ff01024020032802e405450d00200d102e0b200320083a00dc03200320073602d80320034180046a200910860520032802880421092003280280042107200341003602e805200342013703e005200341d8036a200341e0056a109102200320083a00b003200341e0056a200341b0036a410110742007200920032802e005220820032802e80510b201024020032802e405450d002008102e0b0240200328028404450d002007102e0b02402002450d00200241186c450d002001102e0b0240200641ffffffff0371450d00200a102e0b200341063a0090030c320b024020032802e404450d00200e102e0b20034190036a410110820620032d0090034106460d3120032902940321040c300b2001410c6a2802002106200141086a2802002108200141046a2802002107200341e0056a41286a2209200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a220a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a220d200241086a290200370300200320022902003703e00520034180056a200341e0056a10c10220034190036a41086a220220034194056a2902003703002003419d036a220120034199056a290000370000200320032f0081053b01d805200320032d0083053a00da05200320034180056a410c6a290200370390030240024002400240024020032d0080054101460d0020034180056a41086a280200210e2003280284052114200341f3046a2002290300370000200341e0046a41186a2001290000370000200320032d00da053a00e204200320032f01d8053b01e0042003200e3600e704200320143600e30420032003290390033700eb04200341b8046a200341e0046a10d305200341e0056a20032802b804220e20032802c00410e60520034180046a41086a2003419c066a29020037030020034180046a41106a200341a4066a29020037030020034180046a41186a200341ac066a29020037030020034180046a41206a200341b4066a280200360200200320034194066a29020037038004024002402003280280062201450d00200a2903002104200d290300210520034190066a280200210a2003418c066a280200210d2009280200210920032903f005210b20032903e005210c2003280284062102200341d8036a41206a221420034180046a41206a280200360200200341d8036a41186a221520034180046a41186a290300370300200341d8036a41106a221620034180046a41106a290300370300200341d8036a41086a221720034180046a41086a29030037030020032003290380043703d803024020032802bc04450d00200e102e0b200341b0036a41086a220e2017290300370300200341b0036a41106a22172016290300370300200341b0036a41186a22162015290300370300200341b0036a41206a2215201428020036020020034180056a41186a2004370300200341b0056a200a360200200341a8056a2009360200200341a4056a2002360200200320032903d8033703b0032003200b370390052003200c370380052003200d3602ac05200320013602a0052003200537038805200341d4056a2015280200360200200341cc056a2016290300370200200341c4056a2017290300370200200341bc056a200e290300370200200341b4056a20032903b00337020020060d01200341e0026a410510820602402002450d00200241186c450d002001102e0b200a41ffffffff0371450d05200d102e0c050b024020032802bc04450d00200e102e0b200341e0026a41011082060c020b024020064111490d00200341e0026a411310820602402002450d00200241186c450d002001102e0b200a41ffffffff0371450d03200d102e0c030b20034180046a200341b8056a221510d105200341e0056a2003280280042202200328028804108706200341f0026a41086a2201200341e0056a41086a290300370300200320032903e0053703f0020240024020032d00f0054102460d00200341b8046a41086a2001290300370300200320032903f0023703b8040240200328028404450d002002102e0b200341a8046a41086a200341b8046a41086a280200360200200320032903b8043703a8040c010b0240200328028404450d002002102e0b200341003602b004200342013703a8040b200341063a00f00220032007200641246c6a3602e403200320073602e003200320083602dc03200320073602d8032003200341f0026a3602ec032003200341a8046a3602e803200341e0056a200341d8036a1088060240024020032d00e0054101470d004120102c2209450d3f200920032900e105370000200941186a200341f9056a290000370000200941106a200341f1056a290000370000200941086a200341e9056a29000037000020034180046a41106a200341d8036a41106a29030037030020034180046a41086a200341d8036a41086a290300370300200320032903d80337038004200341e0056a20034180046a10880602400240024020032d00e0050d0041012101410121080c010b200341e0056a41017221024120210741012101410121080340200341b8046a41186a220a200241186a290000370300200341b8046a41106a220d200241106a290000370300200341b8046a41086a220e200241086a290000370300200320022900003703b804024020082001470d00200141016a22062001490d3d200141017422142006201420064b1b22064104200641044b1b220641ffffff3f712006462114200641057421060240024020010d00200341003602b0030c010b200341013602b803200320093602b003200320014105743602b4030b20034190036a20062014200341b0036a107d20032802980321012003280290034101460d032003280294032109200141057621010b200920076a220620032903b804370000200641186a200a290300370000200641106a200d290300370000200641086a200e290300370000200741206a2107200841016a2108200341e0056a20034180046a10880620032d00e0050d000b0b200328028c0420032802880422026b220641246d210702402006450d00200741246c21060340024020022d00004102470d00200241086a280200450d00200241046a280200102e0b200241246a21022006415c6a22060d000b0b2003280284042202450d02200241246c450d02200328028004102e0c020b20010d3f0c390b20032802e40320032802e00322026b220141246d210602402001450d00200641246c21010340024020022d00004102470d00200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b4100210141012109024020032802dc032202450d00200241246c450d0020032802d803102e0b410021080b200341f0026a41086a2102024020032d00f00222064106460d0020032f00f10220032d00f3024110747221082002280200210220032802f40221070240200141ffffff3f71450d002009102e0b200341e8026a2002360200200320073602e402200320063a00e002200320083b00e102200320084110763a00e302024020032802ac0441ffffff3f71450d0020032802a804102e0b024020032802a4052202450d00200241186c450d0020032802a005102e0b20032802b00541ffffffff0371450d0520032802ac05102e0c050b20034198046a2206420037030020034180046a41106a2207420037030020034180046a41086a220a4200370300200342003703800420034190036a4192fdc6004107108102200a20034190036a41086a290300370300200320032903900337038004200341f0026a4194adc600410a10810220062002290300370300200720032903f002370300200341286a20034180046a4120108e02200328022c210220032802282106200341e0056a201510860520032802e005220720032802e80510ff01024020032802e405450d002007102e0b2002410020061b210a200341b8046a201510d10520032802c004210d20032802b8042107200341003602e805200342013703e0052008200341e0056a107602402008450d0020084105742106200921020340200341e0056a200241201074200241206a2102200641606a22060d000b0b2003200a36028004200341e0056a20034180046a41041074200341003a00b003200341e0056a200341b0036a410110742007200d20032802e005220220032802e80510b201024020032802e405450d002002102e0b024020032802bc04450d002007102e0b0240200141ffffff3f71450d002009102e0b024020032802ac0441ffffff3f71450d0020032802a804102e0b024020032802a4052202450d00200241186c450d0020032802a005102e0b024020032802b00541ffffffff0371450d0020032802ac05102e0b200341063a00e0020c330b200341023a00e0020b2006450d010b200641246c2101200721020340024020022d00004102470d00200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b2008450d00200841246c450d002007102e0b20032d00e0024106460d2e20032802e0022102200020032902e402370024200041206a2002360000200041186a41003a000020004200370308200042013703000c3a0b200341e0056a41286a2208200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a2207200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a2209200241086a290200370300200320022902003703e00520034180056a200341e0056a10c10220034180046a41086a220220034189056a29000037030020034180046a41106a220120034191056a29000037030020034180046a41186a220620034199056a29000037030020032003290081053703800420032d0080054101460d12200341b8046a41186a2006290300370300200341b8046a41106a2001290300370300200341b8046a41086a200229030037030020032003290380043703b804200341e0046a200341b8046a10d305200341e0056a20032802e004220a20032802e80410e60520022003419c066a2902003703002001200341a4066a2902003703002006200341ac066a29020037030020034180046a41206a200341b4066a280200360200200320034194066a2902003703800402402003280280062201450d00200729030021042009290300210520034190066a28020021062003418c066a28020021072008280200210820032903f005210b20032903e005210c2003280284062102200341d8036a41206a220920034180046a41206a280200360200200341d8036a41186a220d20034180046a41186a290300370300200341d8036a41106a220e20034180046a41106a290300370300200341d8036a41086a221420034180046a41086a29030037030020032003290380043703d803024020032802e404450d00200a102e0b200341b0036a41086a220a2014290300370300200341b0036a41106a2214200e290300370300200341b0036a41186a220e200d290300370300200341b0036a41206a220d200928020036020020034180056a41186a2004370300200341b0056a2006360200200341a8056a2008360200200341a4056a2002360200200320032903d8033703b0032003200b370390052003200c37038005200320073602ac05200320013602a0052003200537038805200341d4056a200d280200360200200341cc056a200e290300370200200341c4056a2014290300370200200341bc056a200a290300370200200341b4056a20032903b003370200200341e0056a200341b8056a220810860520032802e005220920032802e80510ff01024020032802e405450d002009102e0b200341e0056a200810d10520032802e005220820032802e80510ff01024020032802e405450d002008102e0b02402002450d00200241186c450d002001102e0b0240200641ffffffff0371450d002007102e0b200341063a0090030c2d0b024020032802e404450d00200a102e0b20034190036a410110820620032d0090034106460d2c20032902940321040c2b0b200341b8046a41206a200141216a2d00003a0000200341b8046a41186a200141196a290000370300200341b8046a41106a200141116a290000370300200341b8046a41086a200141096a290000370300200320012900013703b804200341e0056a41286a2208200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a2207200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a2209200241086a290200370300200320022902003703e00520034180056a200341e0056a10c10220034180046a41086a220220034180056a41096a29000037030020034180046a41106a220120034180056a41116a29000037030020034180046a41186a220620034180056a41196a29000037030020032003290081053703800420032d0080054101460d10200341e0046a41186a2006290300370300200341e0046a41106a2001290300370300200341e0046a41086a200229030037030020032003290380043703e00420034190036a200341e0046a10d305200341e0056a200328029003220a20032802980310e60520022003419c066a2902003703002001200341a4066a2902003703002006200341ac066a29020037030020034180046a41206a200341b4066a280200360200200320034194066a2902003703800402402003280280062201450d00200729030021042009290300210520034190066a28020021062003418c066a28020021072008280200210820032903f005210b20032903e005210c2003280284062102200341d8036a41206a220920034180046a41206a280200360200200341d8036a41186a220d20034180046a41186a290300370300200341d8036a41106a220e20034180046a41106a290300370300200341d8036a41086a221420034180046a41086a29030037030020032003290380043703d8030240200328029403450d00200a102e0b200341b0036a41086a220a2014290300370300200341b0036a41106a2214200e290300370300200341b0036a41186a220e200d290300370300200341b0036a41206a220d200928020036020020034180056a41186a2004370300200341b0056a2006360200200341a8056a2008360200200341a4056a2002360200200320032903d8033703b0032003200b370390052003200c37038005200320073602ac05200320013602a0052003200537038805200341d4056a200d280200360200200341cc056a200e290300370200200341c4056a2014290300370200200341bc056a200a290300370200200341b4056a20032903b003370200200341e0056a41206a200341b8046a41206a2d00003a0000200341e0056a41186a200341b8046a41186a290300370300200341e0056a41106a200341b8046a41106a290300370300200341e0056a41086a200341b8046a41086a290300370300200320032903b8043703e005200341d8036a200341b8056a10840620032802e003210920032802d80321082003410036028804200342013703800402400240024002400240024020032d00e0050e050001020304050b200341003a00b00320034180046a200341b0036a410110740c040b200341013a00b00320034180046a200341b0036a410110740c030b200341023a00b00320034180046a200341b0036a410110740c020b200341033a00b00320034180046a200341b0036a4101107420034180046a200341e0056a410172412010740c010b200341043a00b00320034180046a200341b0036a410110740b20082009200328028004220a20032802880410b2010240200328028404450d00200a102e0b024020032802dc03450d002008102e0b02402002450d00200241186c450d002001102e0b0240200641ffffffff0371450d002007102e0b200341063a00f0020c2a0b0240200328029403450d00200a102e0b200341f0026a410110820620032d00f0024106460d2920032902f40221040c280b200341d8026a41026a200141076a2d00003a0000200341e0046a41086a200141186a290200370300200341e0046a41106a200141206a2902003703002003200141056a2f00003b01d8022003200141106a2902003703e004200141046a2d00002106200141086a28020021082001410c6a2802002101200341e0056a41286a200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a200241086a290200370300200320022902003703e00520034180056a200341e0056a10c1022003418c036a41026a220220032d0083053a0000200341f0026a41086a220720034194056a290200370300200341fd026a220920034180056a41196a290000370000200320032f0081053b018c03200320034180056a410c6a2902003703f00202400240024020032d0080054101460d0020034180056a41086a220a280200210d200328028405210e200341c3036a2007290300370000200341b0036a41186a2009290000370000200320032f018c033b01b0032003200d3600b7032003200e3600b303200320032903f0023700bb03200320022d00003a00b203200341b8046a200341b0036a10e505200341e0056a20032802b804220220032802c00410f402200a200341ea056a29010037030020034180056a41106a200341f2056a29010037030020034180056a41176a2207200341e0056a41196a290000370000200320032901e20537038005024002400240024020032d00e0054101470d0020032d00e105210920034190036a41176a200729000037000020034190036a41106a220720034180056a41106a29030037030020034190036a41086a220a20034180056a41086a290300370300200320032903800537039003024020032802bc04450d002002102e0b20034180046a41176a220220034190036a41176a29000037000020034180046a41106a220d2007290300370300200341e1036a200a290300370000200341e9036a200d290300370000200341d8036a41186a2002290000370000200320093a00d80320032003290390033700d90320034180056a41026a2202200341d8026a41026a2d00003a0000200320032f01d8023b018005200341e0056a41086a200341e0046a41086a290300370300200341e0056a41106a200341e0046a41106a290300370300200320032903e0043703e0050240024020064107710e03000301030b20034180046a41186a2206200341e0056a410d6a29000037000020034180046a41136a2207200341e0056a41086a29030037000020034190036a41086a2209200729000037030020034190036a410d6a22072006290000370000200320032f01800522063b0180042003200136008704200320022d000022023a008204200320063b01d805200320032903e00537039003200320023a00da05200320032d00da053a00ba04200320032f01d8053b01b804200320013600bf04200320083600bb04200341b8046a41186a2007290000370000200341b8046a41136a200929030037000020032003290390033700c304200341e0056a200341b8046a10d30520032802e005220120032802e805108f022102024020032802e405450d002001102e0b2002450d04200341a8046a41041082060c070b02402001450d002008102e0b20034198036a20034193046a2900003703002003419d036a20034198046a290000370000200320032f0180043b01d805200320032d0082043a00da052003200329008b04370390030c020b024020032802bc04450d002002102e0b200341a8046a41021082060c040b20034198036a20034193046a2900003703002003419d036a20034180046a41186a290000370000200320032f0180043b01d805200320032d0082043a00da052003200329008b04370390030b200341013a00a8040c030b200341b8046a200341d8036a412010ec08450d2820034180056a200341b0036a10e505200328028805210120032802800521024120102c2206450d38200342203702e405200320063602e005200341e0056a200341b8046a412010742002200120032802e005220620032802e80510b201024020032802e405450d002006102e0b0240200328028405450d002002102e0b20034190036a200341d8036a10d305200341e0056a2003280290032201200328029803220610e60502402003280280062202450d002001200610ff010b20034180046a41086a22062003419c066a29020037030020034180046a41106a2208200341a4066a29020037030020034180046a41186a2207200341ac066a29020037030020034180046a41206a2209200341b4066a280200360200200320034194066a2902003703800402402002450d00200341e0056a41186a2903002104200341e0056a41086a290300210520034190066a280200210a2003418c066a280200210d20034188066a280200210e20032903f005210b20032903e005210c200328028406211420034180056a41206a200928020036020020034180056a41186a200729030037030020034180056a41106a200829030037030020034180056a41086a20062903003703002003200329038004370380050240200328029403450d002001102e0b200341e0056a41186a200437030020034190066a200a36020020034188066a2201200e36020020034184066a201436020020034194066a2003290380053702002003419c066a20034188056a290300370200200341a4066a20034180056a41106a290300370200200341ac066a20034180056a41186a290300370200200341b4066a20034180056a41206a2802003602002003200b3703f005200320053703e8052003200c3703e0052003200d36028c06200320023602800620034190036a200341b8046a10d305200328029803210820032802900321062003410036028804200342013703800420034180046a20034198066a412010742003200341e0056a3602f002200341f0026a20034180046a10af012003200341e0056a41106a3602f002200341f0026a20034180046a10af0120032802800621022001280200220120034180046a10760240200141186c2201450d00200220016a21010340200320023602f002200341f0026a20034180046a10af01200241106a20034180046a109102200241186a22022001470d000b0b200328028c062102200328029406220120034180046a107620034180046a20022001410274107420062008200328028004220220032802880410b2010240200328028404450d002002102e0b0240200328029403450d002006102e0b02402003280284062202450d00200241186c450d00200328028006102e0b20032802900641ffffffff0371450d29200328028c06102e0c290b200328029403450d282001102e0c280b200341023a00a8040b200641ff01714102470d002001450d002008102e0b20032d00a8044106460d2620032802a8042102200020032902ac04370024200041206a2002360000200041186a41003a000020004200370308200042013703000c370b200141046a2802002101200341e0056a41286a200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a200241086a290200370300200320022902003703e0050240200341e0056a10a705450d00200341d8036a41026a200341b8046a41026a2d000022023a0000200320032f00b80422013b01d803200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c370b20034180046a41186a2202420037030020034180046a41106a2206420037030020034180046a41086a220842003703002003420037038004200341f0026a4192fdc60041071081022008200341f0026a41086a290200370300200320032902f0023703800420034190036a41b4aac600410e108102200220034190036a41086a2903003703002006200329039003370300200320013602e00520034180046a4120200341e0056a410410b201200041186a41003a00002000420037030820002003280080053600192000411c6a20034183056a280000360000200042003703000c360b200141046a2802002108200341e0056a41286a200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a200241086a290200370300200320022902003703e0050240200341e0056a10a705450d00200341d8036a41026a200341b8046a41026a2d000022023a0000200320032f00b80422013b01d803200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c360b20034180046a41186a2202420037030020034180046a41106a2201420037030020034180046a41086a220642003703002003420037038004200341f0026a4192fdc60041071081022006200341f0026a41086a2207290200370300200320032902f0023703800420034190036a41b4aac600410e108102200220034190036a41086a22092903003703002001200329039003370300200341306a20034180046a4120108e022003280234210a2003280230210d2002420037030020014200370300200642003703002003420037038004200341f0026a4192fdc600410710810220062007290200370300200320032902f0023703800420034190036a41b4aac600410e1081022002200929030037030020012003290390033703002003200a4100200d1b20086a3602e00520034180046a4120200341e0056a410410b201200041186a41003a00002000420037030820002003280080053600192000411c6a20034183056a280000360000200042003703000c350b20012d00012101200341e0056a41286a200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a200241086a290200370300200320022902003703e0050240200341e0056a10a7050d0020034180046a41186a2202420037030020034180046a41106a2206420037030020034180046a41086a220842003703002003420037038004200341f0026a4192fdc60041071081022008200341f0026a41086a2207290200370300200320032902f0023703800420034190036a41b4aac600410e108102200220034190036a41086a22092903003703002006200329039003370300200341386a20034180046a4120108e02200328023c210a2003280238210d2002420037030020064200370300200842003703002003420037038004200341f0026a4192fdc600410710810220082007290200370300200320032902f0023703800420034190036a41b4aac600410e1081022002200929030037030020062003290390033703002003200a4100200d1b220241e4006e20016c200241e4007020016c220141e4006e41ff0120014180c801491b200141e4007041324b6a41ff01716a20026a3602e00520034180046a4120200341e0056a410410b201200041186a41003a00002000420037030820002003280080053600192000411c6a20034183056a280000360000200042003703000c350b200341d8036a41026a200341b8046a41026a2d000022023a0000200320032f00b80422013b01d803200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c340b200341e0056a41286a200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a2201200241086a290200370300200320022902003703e005200341e0056a10a7050d0a200341b8046a41186a22024200370300200341b8046a41106a22064200370300200341b8046a41086a22084200370300200342003703b804200341e0056a4192fdc600410710810220082001290000370300200320032900e0053703b804200341e0056a41b8b2c600410810810220022001290000370300200620032900e005370300200341003602e805200342013703e005200341023a00b003200341e0056a200341b0036a41011074200341b8046a412020032802e005220220032802e80510b201024020032802e405450d002002102e0b200041186a41003a00002000420037030820002003280080053600192000411c6a20034183056a280000360000200042003703000c330b200341e0056a41286a200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a2201200241086a290200370300200320022902003703e005200341e0056a10a7050d08200341b8046a41186a22024200370300200341b8046a41106a22064200370300200341b8046a41086a22084200370300200342003703b804200341e0056a4192fdc600410710810220082001290000370300200320032900e0053703b804200341e0056a41b8b2c600410810810220022001290000370300200620032900e005370300200341003602e805200342013703e005200341013a00b003200341e0056a200341b0036a41011074200341b8046a412020032802e005220220032802e80510b201024020032802e405450d002002102e0b200041186a41003a00002000420037030820002003280080053600192000411c6a20034183056a280000360000200042003703000c320b2001410c6a2802002106200141086a2802002108200141046a2802002107200341e0056a41286a200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a200241086a290200370300200320022902003703e0050240200341e0056a10a7050d0020034180046a41186a2202420037030020034180046a41106a2201420037030020034180046a41086a220942003703002003420037038004200341f0026a4192fdc60041071081022009200341f0026a41086a290200370300200320032902f0023703800420034190036a418cabc600410d108102200220034190036a41086a290300370300200120032903900337030020064105744104722202417f4c0d2a2002102c2201450d30200341003602e805200320023602e405200320013602e0052006200341e0056a107602402006450d0020064105742101200721020340200341e0056a200241201074200241206a2102200141606a22010d000b0b20034180046a412020032802e005220220032802e80510b201024020032802e405450d002002102e0b0240200841ffffff3f71450d002007102e0b200042003703082000200328008005360019200041186a41003a00002000411c6a20034183056a280000360000200042003703000c320b0240200841ffffff3f71450d002007102e0b200341d8036a41026a200341b8046a41026a2d000022023a0000200320032f00b80422013b01d803200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c310b200141246a280200210620034180056a41186a200141196a29000037030020034180056a41106a200141116a29000037030020034180056a41086a200141096a2900003703002003200129000137038005200341e0056a41286a200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a200241086a290200370300200320022902003703e005200341e0056a10a7050d05200341e0056a20034180056a2006108606200341b0036a41026a220120032d00e3053a0000200320032f00e1053b01b003024020032d00e00522024106460d0020032902e405210420034180046a41026a20012d00003a0000200320032f01b0033b0180040c1e0b42f3e885db96cddbb32020034180056a10ea02200041186a41003a000020004200370308200020032800b8043600192000411c6a200341bb046a280000360000200042003703000c300b200341e0056a41286a200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a2201200241086a290200370300200320022902003703e005200341e0056a10a7050d03200341b8046a41186a22024200370300200341b8046a41106a22064200370300200341b8046a41086a22084200370300200342003703b804200341e0056a4192fdc600410710810220082001290000370300200320032900e0053703b804200341e0056a41b8b2c600410810810220022001290000370300200620032900e005370300200341003602e805200342013703e005200341033a00b003200341e0056a200341b0036a41011074200341b8046a412020032802e005220220032802e80510b201024020032802e405450d002002102e0b200041186a41003a00002000420037030820002003280080053600192000411c6a20034180056a41036a280000360000200042003703000c2f0b200141046a280200211b2002410e6a2f010021092002410d6a2d0000210a2002410c6a2d0000210d2002410a6a2f0100210e200241096a2d00002114200241086a2d00002115200241046a2d00002108200141106a28020021072001410c6a280200211a200141086a280200211920022802282101024020022d000022060d002002411a6a2901002104200241196a2d00002106200241186a2d00002116200241166a2f01002117200241156a2d00002118200241146a2d0000211c200241126a2f0100211d200241116a2d0000211e200241106a2d0000211f200241066a2f01002120200241056a2d00002121200241026a2f0100212220022d0001210220012001280200417f6a2223360200024020230d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22232023280200417f6a222336020020230d002001102e0b200320043701d004200320063a00cf04200320163a00ce04200320173b01cc04200320183a00cb042003201c3a00ca042003201d3b01c8042003201e3a00c7042003201f3a00c604200320093b01c4042003200a3a00c3042003200d3a00c2042003200e3b01c004200320143a00bf04200320153a00be04200320203b01bc04200320213a00bb04200320083a00ba04200320223b01b8040240200241ff01710d00410321060c010b4110102c2202450d2d200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d2d20014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a22163602004100210620160d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22162016280200417f6a221636020020160d002002102e0b024002402006417f6a0e03001a011a0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b200841ff01710d18200e4110742014410874722015724102742009411074200a41087472200d7241036c490d180b024020070d0020034180046a41051082060c1a0b200741016a210120192102024003402001417f6a22014102490d01200241046a210620022802002108200241046a210220082006280200490d000b20034180046a410e1082060c1a0b200341e0056a201b10f90520034180056a20032802e005220220032802e80510f5050240024020032802800522180d004100211c200341003602c004200342083703b80441082118410021170c010b200320032902840522043702bc04200320183602b8042004422088a721172004a7211c0b024020032802e405450d002002102e0b02402007410274220d20196a417c6a2802002017490d0020034180046a410710820602402017450d00201741d8006c2101201841306a210203400240200241746a2802002206450d00200641306c450d00200241706a280200102e0b0240200228020041ffffff3f71450d002002417c6a280200102e0b200241d8006a2102200141a87f6a22010d000b0b201c450d1a201c41d8006c450d1a2018102e0c1a0b201741d8006c210641002101417f2108201921070340201720016a220920012007280200220e6a22024d0d022018200241d8006c6a220228022c211520022802202116200241306a2802002114200241246a280200210a2002200241d8006a20092008200e6b6a41d8006c10ea081a20032009417f6a3602c0040240200a450d00200a41306c450d002016102e0b0240201441ffffff3f71450d002015102e0b200741046a2107200841016a21082001417f6a2101200641a87f6a2106200d417c6a220d450d170c000b0b200141246a2802002106200341e0046a41186a2208200141196a290000370300200341e0046a41106a2207200141116a290000370300200341e0046a41086a2209200141096a290000370300200320012900013703e004200341e0056a41286a200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a200241086a290200370300200320022902003703e00520034180056a200341e0056a10c10220032d0080054101460d0e200341b0036a41186a2008290300370300200341b0036a41106a2007290300370300200341b0036a41086a2009290300370300200320032903e0043703b00320034180046a41186a2201420037030020034180046a41106a2202420037030020034180046a41086a220842003703002003420037038004200341f0026a4192fdc60041071081022008200341f0026a41086a290200370300200320032902f0023703800420034190036a4194adc600410a108102200120034190036a41086a2903003703002002200329039003370300200341b8026a20034180046a4120108e0220032802b802450d0d024020032802bc02220120064f0d00200341e0026a410c1082060c130b20034198046a420037030020034180046a41106a420037030020034180046a41086a220842003703002003420037038004200341f0026a4192fdc60041071081022008200341f0026a41086a290200370300200320032902f0023703800420034190036a41e0a9c600410c108102200241086a20034190036a41086a2903003700002002200329039003370000200341b0026a20034180046a4120108e02024020064100200120032802b40241d40020032802b0021b6b2202200220014b1b22074f0d00200341e0026a410c1082060c130b200341e0056a200610970320034198026a20032802e005220120032802e80510f80220034198026a41106a290300210420032903a00221052003280298022102024020032802e405450d002001102e0b02402002450d00200341d8036a200341b0036a10e505200341e0056a20032802d803220120032802e00310f40220034180046a41086a200341e0056a41096a29000037030020034180046a41106a200341e0056a41116a29000037030020034198046a2208200341f9056a290000370300200320032900e10537038004410121020240024020032d00e0054101460d00410021020c010b20034180056a41086a20034180046a41096a29000037030020034180056a41106a20034180046a41116a29000037030020034197056a200829000037000020032003290081043703800520032d00800421080b024020032802dc03450d002001102e0b2002450d1120034190036a41176a220220034180056a41176a29000037000020034190036a41106a220120034180056a41106a290300370300200341c1046a20034180056a41086a290300370000200341c9046a2001290300370000200341b8046a41186a2002290000370000200320083a00b80420032003290380053700b90420034190036a200341b8046a10d305200341e0056a200328029003220e20032802980310e60520034180046a41086a22022003419c066a29020037030020034180046a41106a2201200341a4066a29020037030020034180046a41186a2209200341ac066a29020037030020034180046a41206a220a200341b4066a280200360200200320034194066a29020037038004200328028006220d450d12200341e0056a41186a290300210b200341e0056a41086a290300210c20034190066a28020021142003418c066a280200210820034188066a280200211520032903f005210f20032903e00521102003280284062116200341d8036a41206a200a280200360200200341d8036a41186a2009290300370300200341d8036a41106a2001290300370300200341d8036a41086a200229030037030020032003290380043703d8030240200328029403450d00200e102e0b20034180056a41186a200b370300200341b0056a2014360200200341a8056a2015360200200341a4056a2016360200200341b4056a220220032903d803370200200341bc056a200341e0036a290300370200200341c4056a200341e8036a290300370200200341cc056a200341d8036a41186a290300370200200341d4056a200341f8036a2802003602002003200f370390052003201037038005200320083602ac052003200d3602a0052003200c370388052002280200210d4100210920024100360200410021140240200d450d004100210e410021144100210102400340024002402014450d002001410274210203402007200820026a280200220a4b0d022008200e6a20026a200a3602000240200d200141016a220a4d0d00200241046a210220032802ac052108200a21010c010b0b200141016a21010c030b200820014102746a21020340200720022802004b0d01200241046a2102200d200141016a22014b0d000b410021140c030b200e417c6a210e201441016a2114200d200141016a22014b0d000b0b024020140d00410021140c010b20032802ac052202200120146b4102746a200220014102746a200d20016b41027410ea081a0b2003200d20146b220a3602b40520032802ac0521070240024002400240024002400240200a0e020201000b41002109200a2102034020092002410176220120096a22082006200720084102746a280200491b2109200220016b220241014b0d000b0b02402006200720094102746a2802002202470d00200341e0026a410f1082060c020b200a2009200620024b6a2209490d030b0240024002400240200a20032802b005470d00200a41016a2202200a490d2e200a41017422012002200120024b1b22024104200241044b1b220241ffffffff037120024641027421012002410274210202400240200a0d00200341003602e0050c010b200341e8056a4104360200200320073602e0052003200a4102743602e4050b20034180046a20022001200341e0056a107d20034188046a28020021022003280280044101460d01200320032802840422073602ac05200320024102763602b0050b200720094102746a220241046a2002200a20096b41027410ea081a200220063602002003200a41016a3602b40520034180046a2006200341b8056a220a10f705200341e0056a200328028004220220032802880410a20320032802800622150d01420021104100211a410821154100211641002117420021114200210c4200210f0c020b20020d320c2c0b20032f00850620034187066a2d0000411074724108742117200341e0056a41086a290300210f200341f8056a290300211120034188066a280200211a20032903e005210c20032903f005211020032d00840621160b0240200328028404450d002002102e0b200341b8046a20034180056a10d205200341f0026a4192fdc600410710810220034190036a41ed9fc5004110108102200320063602d8052003200341d8056a410410a3013703d803200341ec056a200341d8056a41046a3602002003200341e0036a3602e4052003200341d8056a3602e8052003200341d8036a3602e00520034180046a200341e0056a107c200328028804220141206a2202417f4c0d2a0240024020020d00410121080c010b2002102c2208450d310b200341003602e003200320023602dc03200320083602d803200341d8036a200341f0026a41101074200341d8036a20034190036a41101074200341d8036a2003280280042202200110740240200328028404450d002002102e0b200341e0056a20032802d803220220032802e00310a20520034180046a41086a2201200341ec056a290200370300200320032902e405370380040240024020032802e0054101460d00200341a8046a41086a420037030041002119200341003602a8040c010b200341a8046a41086a20012903003703002003200329038004220b3703a804200ba721190b024020032802dc03450d002002102e0b200341a8046a41047221180240200341b0046a280200220d450d0020032802ac04210e0340200d41046a2107200d41346a2101200d2f013222144105742102417f2108024002400340024020020d00201421080c020b200a2001412010ec082209450d02200841016a2108200741046a2107200241606a2102200141206a21012009417f4a0d000b0b200e450d02200e417f6a210e200d20084102746a4194036a280200210d0c010b0b200728020022010d020b200341063a00e002201810bc0220172016722202450d00200241306c450d002015102e0b024020032802a4052202450d00200241186c450d0020032802a005102e0b20032802b00541ffffffff0371450d1620032802ac05102e0c160b20194101201941014b1b2202418094ebdc036e2002418094ebdc03704100476a22084101200841014b1b220820024b0d0120034180026a20052004428094ebdc03420010e608200341f0016a20052004428094ebdc03420010e708200341e0016a20032903f001200341f0016a41086a2903002002200120022001491b20086ead428094ebdc037e200220086ead8042ffffffff0f832204420010e808200341e0056a2006200341b0036a10f80520034190026a20032802e005220120032802e805108705200341e0016a41086a29030020032903e001220520042003290380027e2204428094ebdc0380a72004428094ebdc03824280cab5ee01566aad7c2204200554ad7c2105410020032802900220032d0094024102461b2102024020032802e405450d002001102e0b200341b8016a20042005428094ebdc03420010e608200341a8016a20042005428094ebdc03420010e70820034198016a20032903a801200341a8016a41086a2903002002ad220b420010e80820034188016a2004200329039801221220032903b801200b7e220b428094ebdc0380a7417f200b428080808080c0b2cd3b541b200b428094ebdc03824280cab5ee01566aad7c220b7d2213200520034198016a41086a290300200b201254ad7c22247d2004200b54ad7d2204428094ebdc03420010e608200341f8006a20132004428094ebdc03420010e70820102011200c200f1082052102200341e8006a20032903782210200341f8006a41086a29030022112002ad2204420010e808200341c8016a200a20032903682205200329038801221220047e2204428094ebdc0380a7417f2004428080808080c0b2cd3b541b2004428094ebdc03824280cab5ee01566aad7c2204200b7c220b200341e8006a41086a2903002004200554ad7c20247c200b200454ad7c10890620034180046a41106a200341c8016a41106a2903002205370300200320032903d001220b37038804200320032903c80122043703800402402004a74101470d002003200b3703d803200320053703e003200341bb056a290000210420034198066a200537030020034190066a200b370300200341e8056a41013a0000200341e9056a20032f01b8053b0000200341eb056a200341ba056a2d00003a0000200341ec056a2004370200200341f4056a200341c3056a290000370200200341fc056a200341cb056a29000037020020034181066a200341d0056a290000370000200341043a00e005200341e0056a10fe012003200341d8036a3602e005200341e0056a10ce020c130b20044201520d12200320034180046a41086a3602e005200341e0056a10ce020c120b2009200a1045000b41d0d8c800411941bcd7cc001039000b200341e0026a410c1082060c120b200220091046000b200341d8036a41026a20034180046a41026a2d000022023a0000200320032f00800422013b01d803200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c2b0b410221020c170b200341d8036a41026a20034180046a41026a2d000022023a0000200320032f00800422013b01d803200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c290b200341d8036a41026a20034180046a41026a2d000022023a0000200320032f00800422013b01d803200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c280b200341023a00f0020c170b200341023a0090030c180b200341023a0090030c1a0b200341023a00f0020c200b2001410c6a2802002106200141086a2802002107200141046a2802002108200341e0056a41286a220a200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a220d200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a220e200241086a290200370300200320022902003703e00520034180056a200341e0056a10c10220034180046a41086a220220034189056a29000037030020034180046a41106a220120034191056a29000037030020034180046a41186a220920034199056a290000370300200320032900810537038004024002400240024002400240024020032d0080054101460d00200341e0046a41186a2009290300370300200341e0046a41106a2001290300370300200341e0046a41086a200229030037030020032003290380043703e004200341b8046a200341e0046a10d305200341e0056a20032802b804221420032802c00410e60520022003419c066a2902003703002001200341a4066a2902003703002009200341ac066a29020037030020034180046a41206a200341b4066a280200360200200320034194066a2902003703800402402003280280062202450d00200d2903002104200e290300210520034190066a28020021012003418c066a2802002109200a280200210a20032903f005210b20032903e005210c200328028406210d200341d8036a41206a220e20034180046a41206a280200360200200341d8036a41186a221520034180046a41186a290300370300200341d8036a41106a221620034180046a41106a290300370300200341d8036a41086a221720034180046a41086a29030037030020032003290380043703d803024020032802bc04450d002014102e0b200341b0036a41086a22142017290300370300200341b0036a41106a22172016290300370300200341b0036a41186a22162015290300370300200341b0036a41206a2215200e28020036020020034180056a41186a2004370300200341b0056a2001360200200341a8056a200a36020020034180056a41246a200d360200200320032903d8033703b0032003200b370390052003200c37038005200320093602ac05200320023602a0052003200537038805200341d4056a2015280200360200200341cc056a2016290300370200200341c4056a2017290300370200200341bc056a2014290300370200200341b4056a20032903b0033702002008200641246c22026a2109024020020d00200821020c050b200341e0026a41026a2201200841036a2d00003a000020034190036a41086a220a200841146a29000037030020034190036a41106a220d2008411c6a290000370300200320082f00013b01e0022003200829000c37039003200841246a210220082d0000220e4105460d042008280008211420082800042115200341a8046a41026a20012d00003a0000200341b0036a41086a200a290300370300200341b0036a41106a200d290300370300200320032f01e0023b01a80420032003290390033703b0030240024002400240200e4107710e03000201020b200341b8046a41026a200341a8046a41026a2d00003a0000200341cb046a200341b8036a290300370000200341d0046a200341bd036a290000370000200320032f01a8043b01b804200320143600bf04200320153600bb04200320032903b0033700c304410121014100210a0c020b2014450d002015102e0b410021014101210a0b20034180046a41086a220d200341b8046a41086a29010037030020034180046a41106a220e200341b8046a41106a29010037030020034180046a41186a2214200341b8046a41186a290100370300200320032901b804370380042001450d05200341d8036a41186a2014290300370300200341d8036a41106a200e290300370300200341d8036a41086a200d29030037030020032003290380043703d8034120102c221c450d29201c20032903d803370000201c41186a200341d8036a41186a290300370000201c41106a200341d8036a41106a290300370000201c41086a200341d8036a41086a290300370000200921010240024020092002460d00200341e0026a41026a2201200241036a2d00003a000020034190036a41086a200841386a29000037030020034190036a41106a200841c0006a290000370300200320022f00013b01e0022003200829003037039003200841c8006a2102024020082d0024220d4105460d00200828002c210e20082800282114200341a8046a41026a20012d00003a0000200341b0036a41086a220120034190036a41086a290300370300200341b0036a41106a20034190036a41106a290300370300200320032f01e0023b01a80420032003290390033703b0030240024002400240200d4107710e03000201020b200341b8046a41026a200341a8046a41026a2d00003a0000200341cb046a2001290300370000200341d0046a200341bd036a290000370000200320032f01a8043b01b8042003200e3600bf04200320143600bb04200320032903b0033700c304410121010c020b200e450d002014102e0b410021014101210a0b20034180046a41086a2216200341b8046a41086a222529010037030020034180046a41106a2217200341b8046a41106a222629010037030020034180046a41186a2218200341b8046a41186a2227290100370300200320032901b8043703800420010d020b200221010b4101211f4101210d0c040b200341d8036a41186a22192018290300370300200341d8036a41106a221a2017290300370300200341d8036a41086a221b201629030037030020032003290380043703d803200841ec006a2101200641246c41b87f6a2114200341c3046a2128412021154102210d4101211f0340200341e0056a41186a221d2019290300370300200341e0056a41106a221e201a290300370300200341e0056a41086a2220201b290300370300200320032903d8033703e005024002400240200d417f6a201f470d00201f41016a220e201f490d27201f4101742221200e2021200e4b1b220e4104200e41044b1b220e41ffffff3f71200e462121200e410574210e02400240201f0d00200341003602b8040c010b200341013602c0042003201c3602b8042003201f4105743602bc040b20034180046a200e2021200341b8046a107d200328028804210e2003280280044101460d01200328028404211c200e410576211f0b201c20156a220e20032903e005370000200e41186a201d290300370000200e41106a201e290300370000200e41086a202029030037000020140d01200921010c060b200e0d2b0c250b200241086a2800002122200241046a2800002123200241036a2d0000210e20022f0001211d20034190036a41086a221e200241146a29000037030020034190036a41106a22202002411c6a290000370300200341e0026a41026a2221200e3a00002003201d3b01e00220032002410c6a2900003703900320022d0000220e4105460d04200341a8046a41026a221d20212d00003a0000200341b0036a41086a2221201e290300370300200341b0036a41106a2020290300370300200320032f01e0023b01a80420032003290390033703b0030240024002400240200e4107710e03000201020b202820032903b003370000200341b8046a41026a201d2d00003a0000202841086a20212903003700002028410d6a200341b0036a410d6a290000370000200320032f01a8043b01b804200320223600bf04200320233600bb044101210e0c020b2022450d002023102e0b4100210e4101210a0b201620252901003703002017202629010037030020182027290100370300200320032901b80437038004200e450d04200241246a210220192018290300370300201a2017290300370300201b201629030037030020032003290380043703d803201541206a2115200d41016a210d2014415c6a2114200141246a21010c000b0b024020032802bc04450d002014102e0b200341f0026a41011082060c010b200341023a00f0020b02402006450d00200641246c2101200821020340024020022d00004102470d00200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b2007450d04200741246c450d042008102e0c040b024020092001460d002008200641246c6a210603402001220241246a2101024020022d00004102470d00200241086a280200450d00200241046a280200102e0b20062001470d000b0b2007450d02200741246c450d022008102e0c020b4100210a0b024020092002460d002008200641246c6a210603402002220141246a2102024020012d00004102470d00200141086a280200450d00200141046a280200102e0b20062002470d000b0b4100211f4101211c02402007450d00200741246c450d002008102e0b4100210d0b024002400240200a41ff0171450d00201f41ffffff3f71450d01201c102e0c010b201c0d010b200341013a00f002024020032802a4052202450d00200241186c450d0020032802a005102e0b20032802b00541ffffffff0371450d0120032802ac05102e0c010b0240200d450d00201c200d4105746a211920034189066a211d200341e9056a211e200341b8056a2107201c21060340200641086a2900002104200641106a29000021052006290000210b200341b8046a41186a2216200641186a290000370300200341b8046a41106a22172005370300200341b8046a41086a221820043703002003200b3703b80420034180046a200341b8046a10d105200341e0056a200328028004220e200328028804221410870620034190036a41086a200341e0056a41086a290300370300200320032903e00537039003024002400240024020032d00f00522154102460d00200328029c03211a200328029403211b20032802900321080240200328029803220d0d004100210d0c030b200d41057441606a41057641016a210a41002102410021010340200820026a22092007412010ec08450d02200241206a2102200a200141016a2201470d000c030b0b200e201410ff010c020b2008200d417f6a220d4105746a22022900002104200229000821052002290010210b200941186a200241186a2900003700002009200b3700102009200537000820092004370000201e20032903b804370000201e41106a2017290300370000201e41186a2016290300370000201d2007290000370000201d41106a200741106a290000370000201d41186a200741186a290000370000200341083a00e805201e41086a2018290300370000201d41086a200741086a290000370000200341043a00e005200341e0056a10fe010b200341003602e805200342013703e005200d200341e0056a10760240200d450d00200d4105742101200821020340200341e0056a200241201074200241206a2102200141606a22010d000b0b2003201a3602d803200341e0056a200341d8036a41041074200320153a00b003200341e0056a200341b0036a41011074200e201420032802e005220220032802e80510b201024020032802e405450d002002102e0b201b41ffffff3f71450d002008102e0b200641206a21060240200328028404450d00200e102e0b20062019470d000b0b0240201f41ffffff3f71450d00201c102e0b200341063a00f002024020032802a4052202450d00200241186c450d0020032802a005102e0b20032802b00541ffffffff0371450d0020032802ac05102e0b0240024020032d00f0024106460d0020032802f0022102200020032902f402370024200041206a2002360000200041186a41003a000020004200370308420121040c010b4200210420004200370308200020032800e005360019200041186a41003a00002000411c6a200341e3056a2800003600000b200020043703000c230b200141246a28020021082002280228210220034180056a41186a200141196a29000037030020034180056a41106a200141116a29000037030020034188056a200141096a2900003703002003200129000137038005200341b8046a20034180056a10c802200341e0056a20032802b804220620032802c00410c902200341e0056a41106a290300420020032903e00542015122011b210420032903e805420020011b210520034180066a290300420020011b210b200341e0056a41186a290300420020011b210c024020032802bc04450d002006102e0b024002400240427f2005200c7c220c200c20055422012004200b7c2001ad7c220520045420052004511b22011b4280c8afa02585427f200520011b84500d0020034180046a410b1082060c010b200341e0056a20034180056a2008108606200341b2036a220120032d00e3053a0000200320032f00e1053b01b003024020032d00e00522064106470d0042f3e885db96cddbb32020034180056a10ea0220022002280200417f6a2201360200200341063a00800420010d022002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d022002102e0c020b20032902e4052104200320063a008004200320032f01b0033b0081042003200437028404200320012d00003a0083040b20022002280200417f6a2201360200024020010d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b20032d0080044106460d0020032802800421022000200329028404370024200041206a2002360000200041186a41003a000020004200370308200042013703000c230b20004200370308200020032800d803360019200041186a41003a00002000411c6a200341db036a280000360000200042003703000c220b200141046a2802002108200341e0056a41286a200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a200241086a290200370300200320022902003703e0050240200341e0056a10a7050d0020034180046a41186a2202420037030020034180046a41106a2206420037030020034180046a41086a220142003703002003420037038004200341f0026a4192fdc60041071081022001200341f0026a41086a290200370300200320032902f0023703800420034190036a4194adc600410a108102200220034190036a41086a2903003703002006200329039003370300200341c8026a20034180046a4120108e02024020032802c8024101470d0020032802cc02210120034198046a2209420037030020034190046a220a420037030020034180046a41086a220742003703002003420037038004200341f0026a4192fdc60041071081022007200341f0026a41086a220d290200370300200320032902f0023703800420034190036a41e0a9c600410c108102200641086a220e20034190036a41086a22142903003700002006200329039003370000200341c0026a20034180046a4120108e0202404100200120032802c40241d40020032802c0021b6b2202200220014b1b22024100200120086b2215201520014b1b22014f0d000340200210f6052001200241016a2202470d000b0b20094200370300200a4200370300200742003703002003420037038004200341f0026a4192fdc60041071081022007200d290200370300200320032902f0023703800420034190036a41e0a9c600410c108102200e20142903003700002006200329039003370000200320083602e00520034180046a4120200341e0056a410410b2010b200042003703082000200328008005360019200041186a41003a00002000411c6a20034183056a280000360000200042003703000c220b200341d8036a41026a200341b8046a41026a2d000022023a0000200320032f00b80422013b01d803200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c210b200141106a290300210b200141086a2903002110200341e0056a41286a2208200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a2207200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a2209200241086a290200370300200320022902003703e00520034180056a200341e0056a10c10220034180046a41086a220220034189056a29000037030020034180046a41106a220120034191056a29000037030020034180046a41186a220620034199056a290000370300200320032900810537038004024002400240024020032d0080054101460d00200341e0046a41186a2006290300370300200341e0046a41106a2001290300370300200341e0046a41086a200229030037030020032003290380043703e00420034180056a200341e0046a10d305200341e0056a200328028005220d20032802880510e60520022003419c066a2902003703002001200341a4066a2902003703002006200341ac066a29020037030020034180046a41206a200341b4066a280200360200200320034194066a290200370380040240200328028006220a450d00200729030021112009290300212920034190066a28020021072003418c066a28020021142008280200210120032903f005210c20032903e005212a2003280284062108200341d8036a41206a220220034180046a41206a280200360200200341d8036a41186a220620034180046a41186a290300370300200341d8036a41106a220920034180046a41106a290300370300200341d8036a41086a220e20034180046a41086a29030037030020032003290380043703d8030240200328028405450d00200d102e0b200341b0036a41106a20092903002204370300200341b8046a41086a200e290300370300200341b8046a41106a2004370300200341b8046a41186a2006290300370300200341b8046a41206a2002280200360200200320032903d8033703b80420010d02200341e0056a410a108206200320032900e105370390032003200341e8056a2800003600970320032d00e005210202402008450d00200841186c450d00200a102e0b200741ffffffff0371450d032014102e0c030b0240200328028405450d00200d102e0b200341e0056a4101108206200320032900e105370390032003200341e8056a2800003600970320032d00e00521020c020b410221020c010b20034180056a41206a200341b8046a41206a28020036020020034180056a41186a200341b8046a41186a29030037030020034180056a41106a200341b8046a41106a29030037030020034180056a41086a200341b8046a41086a290300370300200320032903b80437038005200141186c200a6a41686a2102420021124200211302400340024020010d0041002101200c210f0c020b02402002290300220f20127c2204201058200241086a290300222420137c2004200f54ad7c2205200b582005200b5122061b0d002002200f201020127d22047d37030020022024200b20137d2010201254ad7d22057d200f200454ad7d370308201120057c200c20047c220f200c54ad7c21110c020b2001417f6a2101201120247c200c200f7c220f200c54ad7c2111200241686a2102200f210c200421122005211320042010542005200b5420061b0d000b0b20034190066a200736020020034188066a200136020020034184066a200836020020034194066a2003290380053702002003200f3703f005200341e0056a41186a20113703002003419c066a20034180056a41086a2202290300370200200341a4066a20034190056a290300370200200341ac066a20034180056a41186a290300370200200341b4066a200341a0056a2802003602002003202a3703e0052003201436028c062003200a36028006200320293703e805200f42ffc7afa0255620114200522011501b0d0120034180056a4108108206200320032900810537039003200320022800003600970320032d008005210202402003280284062201450d00200141186c450d00200328028006102e0b20032802900641ffffffff0371450d00200328028c06102e0b200320032800a8043602e00220032003290390033703f00220032003280097033600f7022003200341ab046a2800003600e302200041186a41003a000020004200370308200020032802e0023600192000411c6a20032800e302360000200041206a20023a0000200020032903f002370021200041286a20032800f702360000200042013703000c210b42f3e885db96cddbb32020034198066a202a2029411f108506200341e0046a200341e0056a10d20520033502880642d086037e210402402003280284062202450d00200241186c450d00200328028006102e0b20044280f3e893017c2104024020032802900641ffffffff0371450d00200328028c06102e0b200320032800a8043602e0022003200341ab046a2800003600e302200041186a41003a0000200041106a200437030020004201370308200020032802e0023600192000411c6a20032800e302360000200042003703000c200b200341e0026a410c1082060c040b200341023a00e0020c040b0240201a450d002015201a41306c6a2109200341e0056a41146a2106200341e9056a210a20034180046a41086a210e20034198066a210d201521020340200341c0006a201020112002290300200241086a290300200c200f108205ad2204420010e808200341d0006a200241106a220120032903402205201220047e2204428094ebdc0380a7417f2004428080808080c0b2cd3b541b2004428094ebdc03824280cab5ee01566aad7c2204200341c0006a41086a2903002004200554ad7c10890620034180046a41106a200341d0006a41106a290300220537030020032003290358220b3703880420032003290350220437038004024002402004a74101470d002003200b3703d803200320053703e00320012f000021082003418c036a41026a200241126a2d000022073a0000200320083b01d805200320073a00da05200320083b018c03200241136a2900002104200a20083b0000200a41026a20073a0000200341013a00e805200341043a00e005200320043702ec052002412b6a28000021082002412f6a2d00002107200241236a290000210420062002411b6a290000370000200641086a2004370000200d2005370300200641146a20073a0000200641106a20083600002003200b37039006200341e0056a10fe012003200341d8036a3602e005200341e0056a10ce020c010b20044201520d002003200e3602e005200341e0056a10ce020b200141206a22022009470d000b0b200341063a00e002201810bc02024020172016722202450d00200241306c450d002015102e0b024020032802a4052202450d00200241186c450d0020032802a005102e0b20032802b00541ffffffff0371450d0220032802ac05102e0c020b200341e0026a41021082060c010b0240200328029403450d00200e102e0b200341e0026a41011082060b20032d00e0024106460d0120032902e40221040b20032802e002210220002004370024200041206a2002360000200041186a41003a000020004200370308200042013703000c190b20004200370308200020032800d802360019200041186a41003a00002000411c6a200341db026a280000360000200042003703000c180b0240201a41ffffffff0371450d002019102e0b201720016a2101200341e0056a201b10f90520032802e0052102200320032802e805360284052003200236028005200341b8046a20034180056a10b101024020032802e405450d002002102e0b02402001450d00201841306a210203400240200241746a2802002201450d00200141306c450d00200241706a280200102e0b0240200228020041ffffff3f71450d002002417c6a280200102e0b200241d8006a2102200641a87f6a22060d000b0b0240201c450d00201c41d8006c450d002018102e0b200341063a0080040c030b4110102c2202450d14200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1420014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220636020020060d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22062006280200417f6a220636020020060d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b200341023a0080040b0240201a41ffffffff0371450d002019102e0b20032d0080044106460d0020032802800421022000200329028404370024200041206a2002360000200041186a41003a000020004200370308200042013703000c140b20004200370308200020032800d803360019200041186a41003a00002000411c6a200341db036a280000360000200042003703000c130b200341d8036a41026a20034180046a41026a2d000022013a0000200320032f01800422063b01d803200041206a20023a0000200041186a41003a000020004200370308200020063b0021200041236a20013a000020002004370024200042013703000c120b200341063a00a8040b20004200370308200020032800e002360019200041186a41003a00002000411c6a200341e3026a280000360000200042003703000c100b20032802f002210220002004370024200041206a2002360000200041186a41003a000020004200370308200042013703000c0f0b20004200370308200020032800a804360019200041186a41003a00002000411c6a200341ab046a280000360000200042003703000c0e0b200328029003210220002004370024200041206a2002360000200041186a41003a000020004200370308200042013703000c0d0b20004200370308200020032800f002360019200041186a41003a00002000411c6a200341f3026a280000360000200042003703000c0c0b20004200370308200020032800d802360019200041186a41003a00002000411c6a200341db026a280000360000200042003703000c0b0b200328029003210220002004370024200041206a2002360000200041186a41003a000020004200370308200042013703000c0a0b20004200370308200020032800f002360019200041186a41003a00002000411c6a200341f3026a280000360000200042003703000c090b02402010200329038005220c58200f20034180056a41086a290300220458200f2004511b0d0020034190066a2010200c7d370300200341e0056a41086a41073a0000200341e9056a20032903b804370000200341f1056a200341b8046a41086a290300370000200341f9056a200341c8046a29030037000020034181066a200341d0046a29030037000020034198066a200f20047d2010200c54ad7d370300200341043a00e005200341e0056a10fe010b024020032802a4052202450d00200241186c450d0020032802a005102e0b024020032802b00541ffffffff0371450d0020032802ac05102e0b200320032800a8043602e0022003200341ab046a2800003600e302200041186a41003a0000200041106a20053703002000200b370308200020032802e0023600192000411c6a20032800e302360000200042003703000c080b1038000b20032d00a8044106460d0120032902ac0421040b20032802a804210220002004370024200041206a2002360000200041186a41003a000020004200370308200042013703000c050b20004200370308200020032800e002360019200041186a41003a00002000411c6a200341e3026a280000360000200042003703000c040b20032d00f0024106460d0020032802f0022102200020032902f402370024200041206a2002360000200041186a41003a000020004200370308200042013703000c030b20004200370308200020032800a804360019200041186a41003a00002000411c6a200341ab046a280000360000200042003703000c020b1036000b20004200370308200020032800e002360019200041186a41003a00002000411c6a200341e3026a280000360000200042003703000b200341e0066a24000bac0401047f230041c0006b2202240041d6a2c50021034109210441132105024002400240024002400240024002400240024002400240024002400240024002400240024002400240200141ff01710e15000102030405060708090a0b0c0d0e0f1011121314000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a41ec8fcc001044000b41c9a2c5002103410d2104410021050c120b41c1a2c500210341082104410121050c110b41b4a2c5002103410d2104410221050c100b41a7a2c5002103410d2104410321050c0f0b419ba2c5002103410c2104410421050c0e0b418da2c5002103410e2104410521050c0d0b41fca1c500210341112104410621050c0c0b41eba1c500210341112104410721050c0b0b41dfa1c5002103410c2104410821050c0a0b41d2a1c5002103410d2104410921050c090b41c6a1c5002103410c2104410a21050c080b41b4a1c500210341122104410b21050c070b419aa1c5002103411a2104410c21050c060b4188a1c500210341122104410d21050c050b41faa0c5002103410e2105410e21040c040b41e5a0c500210341152104410f21050c030b41cfa0c500210341162104411021050c020b41c7a0c500210341082104411121050c010b41b9a0c5002103410e2104411221050b200041830e3b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000b9c0203057f017e017f23004180026b22012400200141086a200010c802200141e0006a200128020822022001280210220310c902200141b4016a2802002104200141b0016a2802002100200141ac016a280200210520012903602106200141b8016a200141e8006a41c40010e9081a0240024020064201510d00200141186a410041c40010eb081a410121000c010b200141186a200141b8016a41c40010e9081a024020000d00410121000c010b200141e8006a200141186a41c40010e9082107200141b4016a2004360200200141b0016a2000360200200141ac016a417f200541016a220020002005491b3602002001420137036020022003200710c805410021000b0240200128020c450d002002102e0b20014180026a240020000bb10201037f230041e0006b22022400200241086a4192fdc6004107108102200241186a41a8acc6004105108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241d0006a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000bee06020a7f017e230022052106200541a0016b41607122052400200520003703180240024002402002200384500d00200520023703202005200037033020052003370328200541004102410120044101711b200441ff01714101461b3a003820054180016a200110d40620052802840121072005280280012208210902402005280288012204450d00200820044105746a210a200541e0006a41196a210b20082104200821090340200541c8006a41106a220c200441106a290300370300200541c8006a41086a220d200441086a29030037030020052004290300370348200441186a2d0000210e2005200441196a28000036024020052004411c6a280000360043200e4103460d01200b2005280240360000200b41036a2005280043360000200541e0006a41106a200c2903002202370300200520052903483703602005200e3a00782005200d2903003703680240024020022005290318520d00200541033a0098012005290330210320052005290390013703302005290328210020052005290388013703282005290320210f20052005290380013703202005290338210220052005290398013703382002a7210e0c010b200541e0006a41186a2903002202a7210e20052903702103200529036821002005290360210f0b0240200e41ff01714103460d002009200f3703002009200037030820092003370310200941186a2002370300200941206a21090b200441206a2204200a470d000b0b200920086b41057521040240024020052d00384103470d00200721050c010b2005290338210220052903302103200529032821002005290320210f0240024020042007460d0020072105200421070c010b200741016a22042007490d04200741017422092004200920044b1b22044104200441044b1b220441ffffff3f712004464103742109200441057421040240024020070d0020054100360280010c010b20054180016a41086a4108360200200520083602800120052007410574360284010b200541e0006a2004200920054180016a107d200541e8006a280200210420052802604101460d0320052802642108200441057621050b200820074105746a22042003370310200420003703082004200f370300200441186a2002370300200741016a21040b20012008200410d506200541ffffff3f71450d002008102e0b200624000f0b2004450d001036000b1038000bd20801087f230041c0016b22032400200341e8006a200110e50520034198016a20032802682204200328027010f402200341f8006a41086a2205200341a2016a290100370300200341f8006a41106a2206200341aa016a290100370300200341f8006a41176a2207200341b1016a2900003700002003200329019a01370378024002400240024020032d0098014101470d0020032d0099012108200341c8006a41176a2007290000370000200341c8006a41106a2006290300370300200341c8006a41086a2005290300370300200320032903783703480240200328026c450d002004102e0b200341286a41176a2204200341c8006a41176a290000370000200341286a41106a2205200341c8006a41106a290300370300200341116a200341d0006a290300370000200341196a2005290300370000200341206a2004290000370000200320083a00082003200329034837000920034198016a200110ce050240024020032802a4012209450d0020032802a801210a024002400240200341ac016a28020022044102742205417c6a41027641026a410120041b20024d0d00200341c8006a4111108206200a41ffffffff03710d010c020b200328029801210220034198016a200110cf05200328029801220420032802a00110ff010240200328029c01450d002004102e0b200920056a2108410021042009210620022107024003402004417e712105410221040240024020054102460d00200221050c010b2006450d0220082006460d02200641046a2106410321042007417f6a220721050b20034198016a41186a200141186a29000037030020034198016a41106a200141106a29000037030020034198016a41086a200141086a290000370300200320053602b8012003200129000037039801200341f8006a20034198016a10cd052003280278220520032802800110ff01200328027c450d002005102e0c000b0b200341063a0048200a41ffffffff0371450d030b2009102e0b200320032900493703282003200341c8006a41086a28000036002f20032d004822044106470d030c040b200341063a00480b200320032900493703282003200341d0006a28000036002f0c020b0240200328026c450d002004102e0b200041021082060c020b200020043a000020002003290328370001200041086a200328002f3600000c010b20034198016a200110e505200328029801220420032802a00110ff010240200328029c01450d002004102e0b20034198016a200341086a10d305200328029801220420032802a00110ff010240200328029c01450d002004102e0b20034198016a2001108406200328029801220420032802a00110ff010240200328029c01450d002004102e0b20034198016a2001108605200328029801220420032802a00110ff010240200328029c01450d002004102e0b20034198016a200110d105200328029801220420032802a00110ff010240200328029c01450d002004102e0b2001108a06200041063a00000b200341c0016a24000b970401087f230041e0006b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022010d00200041023a00100c010b200328021421042003200341186a280200360224200320013602202003200341206a10ab01024002400240024002402003280200450d00200341003602480c010b200341c8006a200341206a200328020410920120032802482205450d00200328024c21060240200328022422024104490d00200341d0006a280200210720032802202208280000210920032002417c6a220a3602242003200841046a2208360220200a450d0020082d0000210a20032002417b6a3602242003200841016a36022041002102200a0e020302000b200641ffffff3f71450d002005102e0b20034100360230200342013703282003410a36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341909dc5003602482003200341386a360258200341c4006a419cebc000200341c8006a103d1a2003280228200328023010ef020240200328022c450d002003280228102e0b410221020c020b410121020b200341c8006a41026a200341286a41026a2d000022083a0000200320032f0028220a3b01482000200936020c2000200736020820002006360204200020053602002000200a3b0011200041136a20083a00000b200020023a00102004450d002001102e0b200341e0006a24000bbd0a020a7f017e230041c0016b2202240002400240024020012802082203200128020c460d00200128021421042001200341246a3602082002413c6a41026a2205200341036a2d00003a0000200241286a41086a2206200341186a290000370300200241286a41106a2207200341206a2d00003a0000200220032f00013b013c2002200341106a29000037032820032d000022084105470d010b410021030c010b2003410c6a2800002109200341086a280000210a200341046a280000210b20024188016a41026a20052d00003a0000200241a0016a41086a2006290300370300200241a0016a41106a20072d00003a0000200220022f013c3b018801200220022903283703a001024002400240024020084107710e03020100010b200a450d00200b102e0b4101210b410121030c010b20024184016a41026a20024188016a41026a2d000022033a0000200241f0006a41086a200241a0016a41086a290300220c370300200241f0006a41106a200241a0016a41106a2d000022053a0000200241ec006a41026a20033a0000200241d8006a41086a200c370300200241d8006a41106a20053a0000200220022f01880122033b018401200220022903a001220c370370200220033b016c2002200c370358410021030b2001280210210120024184016a41026a2205200241ec006a41026a2d00003a0000200241f0006a41086a2206200241d8006a41086a290300370300200241f0006a41106a2207200241d8006a41106a2d00003a0000200220022f016c3b0184012002200229035837037002400240024002402003450d00200b2103200a2101200921050c010b200241b7016a2006290300370000200241bf016a20072d00003a0000200220022f0184013b01a001200220093600ab012002200a3600a7012002200b3600a301200220022903703700af01200220052d00003a00a2012001280208410574210320012802002101200241af016a2106024003402003450d01200341606a21032001200241a0016a412010ec082105200141206a210120050d000c030b0b20024188016a200241a0016a108605200241086a200228028801220120022802900110870520022d000c41017121030240200228028c01450d002001102e0b2003450d0120024188016a411410820620024190016a2802002105200228028c01210120022802880121030b200420053602082004200136020420042003360200410021060c010b2002419c016a41026a20022d00a20122033a000020024188016a41086a200641086a290000220c37030020024188016a41106a200641106a2d000022013a0000200241d4006a41026a20033a0000200241c0006a41086a200c370300200241c0006a41106a20013a0000200220022f01a00122033b019c0120022006290000220c37038801200220033b01542002200c370340410121060b200241246a41026a200241d4006a41026a2d000022033a0000200241106a41086a2201200241c0006a41086a290300370300200241106a41106a2205200241c0006a41106a2d00003a0000200220022f015422043b01242002200229034037031020024188016a41026a220720033a0000200220043b018801200241a0016a41106a220420052d00003a0000200241a0016a41086a22052001290300370300200220022903103703a001410021032006450d00200020022f0188013b00012000410c6a2009360000200041086a200a360000200041046a200b360000200041106a20022903a001370000200041036a20072d00003a0000200041186a2005290300370000200041206a20042d00003a0000410121030b200020033a0000200241c0016a24000bfb1904057f037e077f057e230041d0036b22042400200441c0006a2001108406200428024021052004200428024822063602bc01200420053602b801200441f8006a2005200610ed0241052106024020042802782207450d00200428027c2108200420044180016a28020022063602fc01200420073602f80102400240024002402006450d0020042006417f6a3602fc012004200741016a3602f8014100210602400240024020072d00000e050504000102030b410221060c040b200441f8026a200441f8016a10930120042d00f8024101460d01200441b0026a20044191036a290000370300200441a8026a20044189036a290000370300200441a0026a20044181036a290000370300200420042900f90237039802410321060c030b410421060c020b200441003602a00220044201370398022004410a3602dc022004200441b8016a3602d802200420044198026a3602202004418c036a4101360200200442013702fc02200441909dc5003602f8022004200441d8026a36028803200441206a419cebc000200441f8026a103d1a20042802980220042802a00210ef020240200428029c02450d00200428029802102e0b410521060c020b410121060b200441d8016a41186a20044198026a41186a2903002209370300200441d8016a41106a20044198026a41106a290300220a370300200441d8016a41086a20044198026a41086a290300220b370300200441f8026a41086a200b370300200441f8026a41106a200a370300200441f8026a41186a2009370300200420042903980222093703d801200420093703f8020b2008450d002007102e0b200441d8016a41186a2208200441f8026a41186a290300370300200441d8016a41106a220c200441f8026a41106a290300370300200441d8016a41086a220d200441f8026a41086a290300370300200420042903f8023703d80141002107024020064105460d00200441206a41186a2008290300370300200441206a41106a200c290300370300200441206a41086a200d290300370300200420042903d801370320200621070b02402004280244450d002005102e0b4200210b024002400240024002400240024020070e050201000306020b200441f8006a200110e505200441f8026a2004280278220520042802800110f402200441d8016a41086a220620044181036a290000370300200441d8016a41106a220720044189036a290000370300200441d8016a41186a220120044191036a290000370300200420042900f9023703d801024020042d00f8024101470d0020044198026a41186a200129030037030020044198026a41106a200729030037030020044198026a41086a2006290300370300200420042903d801370398020240200428027c450d002005102e0b200441f8026a41186a20044198026a41186a290300370300200441f8026a41106a20044198026a41106a290300370300200441f8026a41086a20044198026a41086a29030037030020042004290398023703f8022004200441f8026a2002200310fd01200441086a290300210a200429030021090c040b0240200428027c450d002005102e0b0c050b200441f8026a200120022003108b0620043502f802420185210b20044188036a290300210a20044180036a29030021090c040b20044198026a200110e505200441f8026a200428029802220520042802a00210f402200441d8016a41086a220620044181036a290000370300200441d8016a41106a220720044189036a290000370300200441d8016a41186a220820044191036a290000370300200420042900f9023703d80102400240024020042d00f8024101470d00200441b8016a41186a2008290300370300200441b8016a41106a2007290300370300200441b8016a41086a2006290300370300200420042903d8013703b8010240200428029c02450d002005102e0b200441f8016a41186a200441b8016a41186a290300370300200441f8016a41106a200441b8016a41106a290300370300200441f8016a41086a200441b8016a41086a290300370300200420042903b8013703f801200441d8016a200441f8016a10d305200441f8026a20042802d801220620042802e00110e605200441f8006a41086a2207200441f8026a41086a290300370300200441f8006a41106a2208200441f8026a41106a290300370300200441f8006a41186a220c200441f8026a41186a29030037030020044198026a41086a220d200441a4036a29020037030020044198026a41106a220e200441ac036a29020037030020044198026a41186a220f200441b4036a29020037030020044198026a41206a2210200441bc036a29020037030020044198026a41286a2211200441c4036a29020037030020044198026a41306a2212200441cc036a280200360200200420042903f8023703782004200429029c03370398022004280298032205450d01200441d8026a41186a200c290300370300200441d8026a41106a2008290300370300200441d8026a41086a2007290300370300200441c0006a41086a200d290300370300200441c0006a41106a200e290300370300200441c0006a41186a200f290300370300200441c0006a41206a2010290300370300200441c0006a41286a2011290300370300200441c0006a41306a2012280200360200200420042903783703d8022004200429039802370340024020042802dc01450d002006102e0b200441d8016a41186a200441f8016a41186a2903002209370300200441d8016a41106a200441f8016a41106a290300220a370300200441d8016a41086a200441f8016a41086a290300220b370300200420042903f80122133703d801200441f8026a41186a2009370300200441f8026a41106a200a370300200441f8026a41086a200b370300200441f8026a41286a200441d8026a41086a2903002214370300200441f8026a41306a200441d8026a41106a2903002215370300200441f8026a41386a200441d8026a41186a2903002216370300200420133703f802200420042903d802221737039803200441f8006a41386a2016370300200441f8006a41306a2015370300200441f8006a41286a201437030020044198016a2017370300200441f8006a41186a2009370300200441f8006a41106a200a370300200441f8006a41086a200b370300200420133703780c020b200428029c02450d042005102e0c040b024020042802dc01450d002006102e0b200441d8016a41186a200441f8016a41186a290300370300200441d8016a41106a200441f8016a41106a290300370300200441d8016a41086a200441f8016a41086a290300370300200420042903f8013703d8010b2005450d0220044198026a41386a2207200441f8006a41386a29030037030020044198026a41306a2208200441f8006a41306a29030037030020044198026a41286a220c200441f8006a41286a29030037030020044198026a41206a220d200441f8006a41206a29030037030020044198026a41186a200441f8006a41186a220629030037030020044198026a41106a200441f8006a41106a220e29030037030020044198026a41086a200441f8006a41086a220f2903003703002004200429037837039802200441d8026a41186a2006290300370300200441d8026a41106a200e290300370300200441d8026a41086a200f290300370300200420042903783703d802200441f8026a41186a22062007290300370300200441f8026a41106a22072008290300370300200441f8026a41086a2208200c29030037030020042005360298032004200d2903003703f8022004419c036a22052004290340370200200441a4036a200441c0006a41086a290300370200200441ac036a200441c0006a41106a290300370200200441b4036a200441c0006a41186a290300370200200441bc036a200441c0006a41206a290300370200200441c4036a200441c0006a41286a290300370200200441cc036a200441c0006a41306a2802003602002006290300210920072007290300220a20027c220b3703002006200920037c200b200a54ad7c3703002008200829030020037c20042903f802220920027c220b200954ad7c22133703002004200b3703f802200441f8016a200120022003108b06200441f8016a41106a290300210a200441f8016a41086a290300210920043502f801210242f3e885db96cddbb320200441f8026a41386a200b2013411f108506200441d8026a200441f8026a10d205024020052802002205450d00200541186c450d00200428029803102e0b0240200441f8026a41306a28020041ffffffff0371450d0020042802a403102e0b2002420185210b0c030b200441f8026a41186a200441206a41186a290300370300200441f8026a41106a200441206a41106a290300370300200441f8026a41086a200441206a41086a290300370300200420042903203703f802200441106a200441f8026a2002200310fd01200441106a41086a290300210a200429031021090b4201210b0c010b4200210b0b200020093703082000200b370300200041106a200a370300200441d0036a24000bff0105027f017e017f017e017f23004180026b22012400200141086a200010c802200141e0006a200128020822002001280210220210c902200141b0016a2903002103200141ac016a280200210420012903602105200141b8016a200141e8006a41c40010e9081a02400240024020054201510d00200141186a410041c40010eb081a420021030c010b200141186a200141b8016a41c40010e9081a2004450d002004417f6a21040c010b410021040b200141e8006a200141186a41c40010e9082106200141b0016a2003370300200141ac016a20043602002001420137036020002002200610c8050240200128020c450d002000102e0b20014180026a24000bc21005027f0c7e037f017e017f230041b0026b220424000240024020022003844200520d0020004100360200200041106a4200370300200041086a42003703000c010b200441c0006a200110c802200441b0016a20042802402205200428024810c902200441b0016a41386a2903002106200441b0016a41306a2903002107200441b0016a41286a2903002108200441b0016a41206a2903002109200441b0016a41186a290300210a200441b0016a41106a290300210b200441f0016a290300210c20042903b801210d20042903b001210e20044180016a41086a20044180026a2903003703002004200441f8016a2903003703800102400240200e4201510d004200210c200441386a4200370300200441306a4200370300200441286a4200370300200441206a4200370300200441186a4200370300200441106a4200370300200441086a420037030020044200370300420021094200210842002107420021064200210d4200210b4200210a4200210f420021104200210e420021110c010b200441206a2008370300200441286a2007370300200441106a200a370300200441306a2006370300200420093703182004200d3703002004200c3703382004200b3703082008210f20072110200d210e200b21110b02402004280244450d002005102e0b02400240200e2011844200520d00200f2004290310842010200441186a29030084844200520d002004290330200441386a2903008450450d004200210e410021050c010b4201210e410121050b024002400240200e4201510d004280808080b001210241b4a4c70021054180801c21010c010b0240200d20027c220e200d542212200b20037c2012ad7c220d200b54200d200b511b450d0042808080808001210241a984ca0021054180800821010c010b200441d0016a2008370300200441d8016a2007370300200441e0016a2006370300200420093703c8012004200e3703b0012004200d3703b8012004200a3703c0014200210b2002422088a721122002a7211302400240427f200e200a7c22022002200e542214200d20097c2014ad7c2202200d542002200d511b22141b221142ffc7afa02556427f200220141b22024200522002501b0d00200e200a84200d20098484220b5021144200210a200b420052ad210b0c010b200441c0016a290300211520042903b801211020042903b001210f4201210a410121140b200441e8006a2002370300200441e0006a22162011370300200441d0006a200d3703002004200e3703482004200337037820042012360274200420133602702004200b3703582004420037034002400240024002402005200a420152720d00200420013602b0012001200441b0016a10bd060c010b024020054101732205200a420151720d00200420013602b0012001200441b0016a10be0641ff017122054103460d010240024020050e03010300010b200441f0006a2101024020140d00200420163602b001200441b0016a10cc020b200420013602b001200441b0016a10ce024104210541002101410021120c060b200441f8006a29030021092004290370210a0c030b200a4201522005710d010b20044190016a200110c802200441b0016a2004280290012212200428029801221310c90220042903b001210220044180016a41086a220520044180026a2903003703002004200441f8016a290300370380010240024020024201510d00200441a0016a41086a4200370300200442003703a0010c010b200441a0016a41086a200529030037030020042004290380013703a0010b200441f8016a20042903a00137030020044180026a200441a0016a41086a290300370300200442013703b001200441b0016a41386a20064200200a42015122051b370300200441e0016a2007420020051b370300200441b0016a41286a2008420020051b370300200441d0016a2009420020051b370300200441c8016a2015420020051b370300200441b0016a41106a2010420020051b370300200441f0016a200c420020051b3703002004200f420020051b3703b80120122013200441b0016a41086a10c8050240200428029401450d002012102e0b200441c0006a41286a2903002102200441c0006a41386a2903002109200429036021112004290370210a2004290358210b20042903404201520d0120042903482103200441e8016a200441c0006a41106a290300370300200441e0016a2003370300200441b0016a41086a41003a0000200441b9016a2001290000370000200441c1016a200141086a290000370000200441c9016a200141106a290000370000200441d1016a200141186a290000370000200441033a00b001200441b0016a10fe010c010b200441f8006a29030021092004290370210a0b02400240200b50450d004200210b0c010b200441b0016a41186a200141186a290000370300200441b0016a41106a200141106a290000370300200441b0016a41086a200141086a290000370300200420012900003703b0014201210b0b200441c0006a41186a200441b0016a41186a22012903002203370300200441c0006a41106a200441b0016a41106a2205290300220d370300200441c0006a41086a200441b0016a41086a2903002207370300200420042903b0012208370340200441e0016a2002370300200441d8016a22122011370300200520073703002001200d370300200441d0016a20033703002004200b3703b001200420083703b801200441b0016a10d204024020042903b001500d0020042012360200200410cc020b20004100360200200041106a2009370300200041086a200a3703000c020b20022005ad8421024103210541800a21120b200041086a200237020020004101360200200020014180801c71201241800e71722005723602040b200441b0026a24000bb50501047f230041c0006b220124002001410036022020014201370318024002400240024002400240200028020022020e050001020304050b200141013a0008200141186a200141086a41011074200028020421032000410c6a2802002204200141186a10760240200441286c2204450d00200320046a21040340200141186a2003412010742001200341206a290300370308200141186a200141086a41081074200341286a22032004470d000b0b2001200041106a280200360208200141186a200141086a410410740c040b200141023a0008200141186a200141086a4101107420012000280204360208200141186a200141086a41041074200041086a2802002103200041106a2802002204200141186a10760240200441286c2204450d00200320046a21040340200141186a2003412010742001200341206a290300370308200141186a200141086a41081074200341286a22032004470d000b0b2001200041146a280200360208200141186a200141086a410410740c030b200141033a0008200141186a200141086a410110742001200041086a290300370308200141186a200141086a410810740c020b200141043a0008200141186a200141086a4101107420012000280204360208200141186a200141086a410410740c010b200141053a0008200141186a200141086a4101107420012000280204360208200141186a200141086a410410740b200141136a200141186a41086a2802003600002001200129031837000b200141186a410c6a2001410f6a290000370000200141c6a4b9da04360019200141023a00182001200129000837001d200141186a10a50402400240024020020e020001020b200041086a2802002203450d01200341286c450d012000280204102e0c010b2000410c6a2802002203450d00200341286c450d00200041086a280200102e0b200141c0006a24000b9dc602140c7f017e017f017e057f017e087f017e017f017e087f017e017f027e017f017e017f017e017f017e230041c0026b220424002004200336020420012802042105200128020021060240024002400240024002400240200128020822030d004104210741002108410021090c010b2003410374210a20044198026a41026a210b200441e0006a41106a210c4100210d411b210e4100210841002109410421072006210f02400240024003404100210302402002280208200f2902002210a722114d0d00200b2002280200201141386c6a2203410a6a2d00003a0000200441e0006a41086a2003411f6a290000370300200c200341276a2d00003a0000200420032f00083b0198022004200341176a2900003703602003410f6a29000021122003410b6a2800002113410121030b41022114200441bc016a41026a20044198026a41026a2d00003a0000200441d8016a41086a2215200441e0006a41086a2216290300370300200441d8016a41106a2217200c2d00003a0000200420042f0198023b01bc01200420042903603703d8014101211102402003450d00200441206a41026a200441bc016a41026a2d00003a0000200441f0016a41086a2015290300370300200441f0016a41106a20172d00003a0000200420042f01bc013b0120200420042903d8013703f0014100211120122118201321140b200441dc006a41026a2203200441206a41026a22192d00003a0000200441c0016a41086a221a200441f0016a41086a221b290300370300200441c0016a41106a221c200441f0016a41106a221d2d00003a0000200420042f01203b015c200420042903f0013703c00120110d02200441d8006a41026a221e20032d00003a0000200441a0016a41086a221f201a290300370300200441a0016a41106a2220201c2d00003a0000200420042f015c3b0158200420042903c0013703a0014122102c2203450d094100211102402004280204221a2802082010422088a741ffff0371221c4d0d002019201a280200201c4105746a221141026a2d00003a00002016201141176a290000370300200c2011411f6a2d00003a0000200420112f00003b01202004201129000f3703602011290007212120112800032122410121110b4102211a200441bc016a41026a200441206a41026a2d00003a0000201520162903003703002017200c2d00003a0000200420042f01203b01bc01200420042903603703d8014101211602402011450d00200441086a41026a200441bc016a41026a2d00003a0000201b2015290300370300201d20172d00003a0000200420042f01bc013b0108200420042903d8013703f00141002116202121232022211a0b200441b8016a41026a2211200441086a41026a2d00003a000020044198026a41086a2215201b29030037030020044198026a41106a2217201d2d00003a0000200420042f01083b01b801200420042903f0013703980220160d01200320042f01b8013b0000200320233700072003201a360003200320042903980237000f200341ffff033b0120200341026a20112d00003a0000200341176a20152903003700002003411f6a20172d00003a0000200420042f01583b01542004201e2d00003a0056200441386a41106a221520202d00003a0000200441386a41086a2217201f290300370300200420042903a0013703380240024020082009470d00200d200841016a2211200d20114b1b22114104201141044b1bad422c7e2210422088a74541027421112010a7210902400240200e411b470d00200441003602600c010b20044104360268200420073602602004200e41656a3602640b200441f0016a20092011200441e0006a107d20042802f801211120042802f0014101460d0120042802f40121072011412c6e21090b200f41086a210f2007200e6a221141656a2003360200201141696a428180808010370200201141786a201837000020042d0056210320042f01542116201141746a2014360000201141716a221420163b0100201441026a20033a000020112004290338370000201141086a2017290300370000201141106a20152d00003a0000200d41026a210d200e412c6a210e200841016a2108200a41786a220a450d050c010b0b2011450d070c080b2000201a36020420004101360200200041086a20233702002003102e0c010b2000201436020420004101360200200041086a20183702000b4101210c0240200541ffffffff0171450d002006102e0b41012102410121164101211b4101211d4101211a4101210f410121154101211c4101210a410121174101210d410121144101210e4101211e0c010b0240200541ffffffff0171450d002006102e0b200141106a2802002124200128020c21250240200141146a2802002203450d002003410c6c21262008410174211b2008412c6c411b6a211420044198026a41026a2127200441e0006a41106a210e41002116024002400240024003400240202520166a220341066a2f0100221d41ffff03470d00200042013702000c050b200341086a2f0100210a200341046a2f0100210d4100211502402002280208200328020022034d0d0020272002280200200341386c6a2203410a6a2d00003a0000200441e0006a41086a2003411f6a290000370300200e200341276a2d00003a0000200420032f00083b0198022004200341176a2900003703602003410f6a29000021122003410b6a2800002128410121150b4102211a200441bc016a41026a20044198026a41026a2d00003a0000200441d8016a41086a2211200441e0006a41086a220f290300370300200441d8016a41106a220c200e2d00003a0000200420042f0198023b01bc01200420042903603703d8014101210302402015450d00200441c0016a41026a200441bc016a41026a2d00003a0000200441f0016a41086a2011290300370300200441f0016a41106a200c2d00003a0000200420042f01bc013b01c001200420042903d8013703f00141002103201221102028211a0b200441cc006a41026a221c200441c0016a41026a2d00003a0000200441386a41086a221e200441f0016a41086a2215290300370300200441386a41106a221f200441f0016a41106a22172d00003a0000200420042f01c0013b014c200420042903f00137033820030d02200441346a41026a2222201c2d00003a0000200441206a41086a220b201e290300370300200441206a41106a2206201f2d00003a0000200420042f014c3b01342004200429033837032041c400102c2203450d0a4100211c02402004280204221f2802082220200d4d0d002027201f280200200d4105746a220d41026a2d00003a0000200f200d41176a290000370300200e200d411f6a2d00003a00002004200d2f00003b0198022004200d29000f370360200d2900072121200d28000321294101211c0b4102211e200441bc016a41026a20044198026a41026a2d00003a00002011200f290300370300200c200e2d00003a0000200420042f0198023b01bc01200420042903603703d8014101210d0240201c450d00200441b8016a41026a200441bc016a41026a2d00003a0000201520112903003703002017200c2d00003a0000200420042f01bc013b01b801200420042903d8013703f0014100210d202121182029211e0b200441d4006a41026a221c200441b8016a41026a222a2d00003a0000200441c0016a41086a22192015290300370300200441c0016a41106a221320172d00003a0000200420042f01b8013b0154200420042903f0013703c001200d0d03200441d0006a41026a2205201c2d00003a0000200441a0016a41086a222b2019290300370300200441a0016a41106a221920132d00003a0000200420042f01543b0150200420042903c0013703a0014100210d02402020200a4d0d00202a201f280200200a4105746a220d41026a2d00003a0000200f200d41176a290000370300200e200d411f6a2d00003a00002004200d2f00003b01b8012004200d29000f370360200d290007212c200d280003212d4101210d0b4102211c200441bc016a41026a200441b8016a41026a2d00003a00002011200f290300370300200c200e2d00003a0000200420042f01b8013b01bc01200420042903603703d8014101210f0240200d450d00200441dc006a41026a200441bc016a41026a2d00003a0000201520112903003703002017200c2d00003a0000200420042f01bc013b015c200420042903d8013703f0014100210f202c2123202d211c0b200441d8006a41026a2211200441dc006a41026a2d00003a000020044198026a41086a220c201529030037030020044198026a41106a221520172d00003a0000200420042f015c3b0158200420042903f00137039802200f0d01200320042f01503b0100200320183700072003201e360003200320042903a00137000f2003201d3b0120200320042f01583b0022200341026a20052d00003a0000200341176a202b2903003700002003411f6a20192d00003a0000200341246a20112d00003a0000200320233700292003201c3600252003201d417f733b01422003200429039802370031200341396a200c290300370000200341c1006a20152d00003a0000200441086a41086a220c200b290300370300200441086a41106a220f20062d00003a0000200420042f01343b011c200420222d00003a001e200420042903203703080240024020082009470d00201b200841016a2211201b20114b1b22114104201141044b1bad422c7e222e422088a7454102742111202ea721150240024020080d00200441003602600c010b20044104360268200420073602602004201441656a3602640b200441f0016a20152011200441e0006a107d20042802f801211120042802f0014101460d0120042802f40121072011412c6e21090b200720146a221141656a2003360200201141696a428280808020370200201141786a201037000020042d001e210320042f011c2115201141746a201a360000201141716a221720153b0100201741026a20033a000020112004290308370000201141086a200c290300370000201141106a200f2d00003a0000201b41026a211b2014412c6a2114200841016a210820262016410c6a2216470d010c060b0b20110d090c080b2000201c36020420004101360200200041086a20233702002003102e0c020b2000201a36020420004101360200200041086a20103702000c010b2000201e36020420004101360200200041086a20183702002003102e0b4100211e4101210c02402024450d002024410c6c450d002025102e0b41012102410121164101211b4101211d4101211a4101210f410121154101211c4101210a410121174101210d410121144101210e0c010b02402024450d002024410c6c450d002025102e0b200128021821282001411c6a28020021270240200141206a2802002203450d00202820034104746a2125200441e0006a4102722116200441206a41086a21052028211e02400240024002400340201e2f010c211f201e28020021202004201e290204370320200441003b015c20044105360238200420053602dc012004200441386a3602e8012004200441046a3602e4012004200441dc006a3602e0012004200441206a3602d801200441e0006a200441d8016a108e060240024020042f01604101470d004122102c220f450d0c200f2016290100370100200f41206a201641206a221b2f01003b0100200f41186a201641186a221d290100370100200f41106a201641106a221a290100370100200f41086a201641086a221c29010037010020044198026a41106a200441d8016a41106a28020036020020044198026a41086a200441d8016a41086a290300370300200420042903d80137039802200441e0006a20044198026a108e06410121114101210e20042f01604101470d01410121114122210c4101210e02400340200441f0016a41206a2215201b2f01003b0100200441f0016a41186a2217201d290100370300200441f0016a41106a220d201a290100370300200441f0016a41086a2214201c290100370300200420162901003703f0010240200e2011470d00201141016a22032011490d0e2011410174220a2003200a20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7210a0240024020110d00200441003602c0010c010b200441023602c8012004200f3602c0012004201141226c3602c4010b200441a0016a200a2003200441c0016a107d20042802a801210320042802a0014101460d0220042802a401210f200341226e21110b200f200c6a220320042903f001370100200341206a20152f01003b0100200341186a2017290300370100200341106a200d290300370100200341086a2014290300370100200c41226a210c200e41016a210e200441e0006a20044198026a108e0620042f01604101460d000c030b0b20030d0c0c0b0b410021114102210f4100210e0b0240200428023822034105460d00200429023c211002402011450d00201141226c450d00200f102e0b20002003360204200041013602002000410c6a20104220883e0200200041086a20103e02000c050b20042f015c222241ffff03460d024100210302402004280204220c280208201f4d0d00200441a0016a41026a200c280200201f4105746a220341026a2d00003a0000200441e0006a41086a200341176a290000370300200441e0006a41106a2003411f6a2d00003a0000200420032f00003b01a0012004200329000f370360200329000721122003280003212b410121030b4102211a200441bc016a41026a200441a0016a41026a2d00003a0000200441d8016a41086a221b200441e0006a41086a221c290300370300200441d8016a41106a221d200441e0006a41106a220a2d00003a0000200420042f01a0013b01bc01200420042903603703d8014101210d02402003450d00200441386a41026a200441bc016a41026a2d00003a0000200441f0016a41086a201b290300370300200441f0016a41106a201d2d00003a0000200420042f01bc013b0138200420042903d8013703f0014100210d20122118202b211a0b200441086a41026a220c200441386a41026a221f2d00003a000020044198026a41086a2215200441f0016a41086a221929030037030020044198026a41106a2217200441f0016a41106a22132d00003a0000200420042f01383b0108200420042903f0013703980202400240024002400240200d0d00200441b8016a41026a220b200c2d00003a0000200441c0016a41086a220d2015290300370300200441c0016a41106a221420172d00003a0000200420042f01083b01b80120042004290398023703c001024002400240200e2011460d0020112106200e21110c010b201141016a22032011490d10201141017422062003200620034b1b22034104200341044b1bad42227e2210422088a74541017421032010a721060240024020110d00200441003602600c010b200441023602682004200f3602602004201141226c3602640b200441f0016a20062003200441e0006a107d20042802f801210320042802f0014101460d0120042802f401210f200341226e21060b200f201141226c6a22032018370007200b2d0000211120042f01b801210b2003201a3600032003200b3b0100200341026a20113a0000200320042903c00137000f200341176a200d2903003700002003411f6a20142d00003a000020032022417f733b0120410021030240200228020820204d0d00200441a0016a41026a2002280200202041386c6a2203410a6a2d00003a0000201c2003411f6a290000370300200a200341276a2d00003a0000200420032f00083b01a0012004200341176a2900003703602003410f6a29000021212003410b6a280000212a410121030b4102211a200441bc016a41026a200441a0016a41026a2d00003a0000201b201c290300370300201d200a2d00003a0000200420042f01a0013b01bc01200420042903603703d8014101211102402003450d00201f200441bc016a41026a2d00003a00002019201b2903003703002013201d2d00003a0000200420042f01bc013b0138200420042903d8013703f0014100211120212123202a211a0b200c201f2d00003a000020152019290300370300201720132d00003a0000200420042f01383b0108200420042903f0013703980220110d07200d2015290300370300201420172d00003a0000200420042f01083b01b80120042004290398023703c0012004200c2d00003a00ba0120082009470d0420084101742203200841016a2211200320114b1b22034104200341044b1bad422c7e2210422088a74541027421032010a7211120080d02200441003602600c030b20030d0f0c0e0b2000201a36020420004101360200200041086a20183702000c070b200441043602682004200736026020042008412c6c3602640b200441f0016a20112003200441e0006a107d20042802f801210320042802f0014101460d0120042802f40121072003412c6e21090b20072008412c6c6a2203200e41016a360208200320063602042003200f360200200341136a2023370000200320042f01b8013b010c2003410e6a20042d00ba013a00002003410f6a201a3600002003411b6a20042903c001370000200341236a200d2903003700002003412b6a20142d00003a0000200841016a2108201e41106a221e2025470d010c060b0b20030d090c080b2000201a36020420004101360200200041086a2023370200200621110c010b200042013702000b2011450d00201141226c450d00200f102e0b4100210e4101210c0240202741ffffffff0071450d002028102e0b41012102410121164101211b4101211d4101211a4101210f410121154101211c4101210a410121174101210d410121144100211e0c010b0240202741ffffffff0071450d002028102e0b20012802242127200141286a2802002129024002402001412c6a2802002203450d002027200341146c6a2128200441e0006a4102722116200441206a410c6a2105200441206a41086a212b2027211e02400240024002400340201e2f0110211f201e2802002120201e2901042110202b201e410c6a28010036020020042010370320200441003b015c20044105360238200420053602dc012004200441386a3602e8012004200441046a3602e4012004200441dc006a3602e0012004200441206a3602d801200441e0006a200441d8016a108e060240024020042f01604101470d004122102c220f450d0d200f2016290100370100200f41206a201641206a221b2f01003b0100200f41186a201641186a221d290100370100200f41106a201641106a221a290100370100200f41086a201641086a221c29010037010020044198026a41106a200441d8016a41106a28020036020020044198026a41086a200441d8016a41086a290300370300200420042903d80137039802200441e0006a20044198026a108e06410121114101210e20042f01604101470d01410121114122210c4101210e02400340200441f0016a41206a2215201b2f01003b0100200441f0016a41186a2217201d290100370300200441f0016a41106a220d201a290100370300200441f0016a41086a2214201c290100370300200420162901003703f0010240200e2011470d00201141016a22032011490d0f2011410174220a2003200a20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7210a0240024020110d00200441003602c0010c010b200441023602c8012004200f3602c0012004201141226c3602c4010b200441a0016a200a2003200441c0016a107d20042802a801210320042802a0014101460d0220042802a401210f200341226e21110b200f200c6a220320042903f001370100200341206a20152f01003b0100200341186a2017290300370100200341106a200d290300370100200341086a2014290300370100200c41226a210c200e41016a210e200441e0006a20044198026a108e0620042f01604101460d000c030b0b20030d0d0c0c0b410021114102210f4100210e0b0240200428023822034105460d00200429023c211002402011450d00201141226c450d00200f102e0b20002003360204200041013602002000410c6a20104220883e0200200041086a20103e02000c050b20042f015c222241ffff03460d024100210302402004280204220c280208201f4d0d00200441a0016a41026a200c280200201f4105746a220341026a2d00003a0000200441e0006a41086a200341176a290000370300200441e0006a41106a2003411f6a2d00003a0000200420032f00003b01a0012004200329000f370360200329000721122003280003212a410121030b4102211a200441bc016a41026a200441a0016a41026a2d00003a0000200441d8016a41086a221b200441e0006a41086a221c290300370300200441d8016a41106a221d200441e0006a41106a220a2d00003a0000200420042f01a0013b01bc01200420042903603703d8014101210d02402003450d00200441386a41026a200441bc016a41026a2d00003a0000200441f0016a41086a201b290300370300200441f0016a41106a201d2d00003a0000200420042f01bc013b0138200420042903d8013703f0014100210d20122118202a211a0b200441086a41026a220c200441386a41026a221f2d00003a000020044198026a41086a2215200441f0016a41086a221929030037030020044198026a41106a2217200441f0016a41106a22132d00003a0000200420042f01383b0108200420042903f0013703980202400240024002400240200d0d00200441b8016a41026a220b200c2d00003a0000200441c0016a41086a220d2015290300370300200441c0016a41106a221420172d00003a0000200420042f01083b01b80120042004290398023703c001024002400240200e2011460d0020112106200e21110c010b201141016a22032011490d11201141017422062003200620034b1b22034104200341044b1bad42227e2210422088a74541017421032010a721060240024020110d00200441003602600c010b200441023602682004200f3602602004201141226c3602640b200441f0016a20062003200441e0006a107d20042802f801210320042802f0014101460d0120042802f401210f200341226e21060b200f201141226c6a22032018370007200b2d0000211120042f01b801210b2003201a3600032003200b3b0100200341026a20113a0000200320042903c00137000f200341176a200d2903003700002003411f6a20142d00003a000020032022417f733b0120410021030240200228020820204d0d00200441a0016a41026a2002280200202041386c6a2203410a6a2d00003a0000201c2003411f6a290000370300200a200341276a2d00003a0000200420032f00083b01a0012004200341176a2900003703602003410f6a29000021212003410b6a2800002125410121030b41022111200441bc016a41026a200441a0016a41026a2d00003a0000201b201c290300370300201d200a2d00003a0000200420042f01a0013b01bc01200420042903603703d8014101211a02402003450d00201f200441bc016a41026a2d00003a00002019201b2903003703002013201d2d00003a0000200420042f01bc013b0138200420042903d8013703f0014100211a20212123202521110b200c201f2d00003a000020152019290300370300201720132d00003a0000200420042f01383b0108200420042903f00137039802201a0d07200d2015290300370300201420172d00003a0000200420042f01083b01b80120042004290398023703c0012004200c2d00003a00ba0120082009470d0420084101742203200841016a220c2003200c4b1b22034104200341044b1bad422c7e2210422088a74541027421032010a7210c20080d02200441003602600c030b20030d100c0f0b2000201a36020420004101360200200041086a20183702000c070b200441043602682004200736026020042008412c6c3602640b200441f0016a200c2003200441e0006a107d20042802f801210320042802f0014101460d0120042802f40121072003412c6e21090b20072008412c6c6a2203200e41016a360208200320063602042003200f360200200341136a2023370000200320042f01b8013b010c2003410e6a20042d00ba013a00002003410f6a20113600002003411b6a20042903c001370000200341236a200d2903003700002003412b6a20142d00003a0000200841016a2108201e41146a221e2028470d010c060b0b20030d0a0c090b2000201136020420004101360200200041086a2023370200200621110c010b200042013702000b2011450d00201141226c450d00200f102e0b410021144101210c02402029450d00202941146c450d002027102e0b41012102410121164101211b4101211d4101211a4101210f410121154101211c4101210a410121174101210d0c010b02402029450d00202941146c450d002027102e0b20012802302127200141346a280200212902400240200141386a2802002203450d002027200341186c6a2128200441e0006a4102722116200441a0016a41106a2105200441a0016a41086a212b2027211e02400240024002400340201e2f0114211f201e2802002120201e2901042110202b201e410c6a290100370300200420103703a001200441003b015c20044105360220200420053602dc012004200441206a3602e8012004200441046a3602e4012004200441dc006a3602e0012004200441a0016a3602d801200441e0006a200441d8016a108e060240024020042f01604101470d004122102c220f450d0e200f2016290100370100200f41206a201641206a221b2f01003b0100200f41186a201641186a221d290100370100200f41106a201641106a221a290100370100200f41086a201641086a221c29010037010020044198026a41106a200441d8016a41106a28020036020020044198026a41086a200441d8016a41086a290300370300200420042903d80137039802200441e0006a20044198026a108e06410121114101210e20042f01604101470d01410121114122210c4101210e02400340200441f0016a41206a2215201b2f01003b0100200441f0016a41186a2217201d290100370300200441f0016a41106a220d201a290100370300200441f0016a41086a2214201c290100370300200420162901003703f0010240200e2011470d00201141016a22032011490d102011410174220a2003200a20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7210a0240024020110d00200441003602c0010c010b200441023602c8012004200f3602c0012004201141226c3602c4010b200441386a200a2003200441c0016a107d2004280240210320042802384101460d02200428023c210f200341226e21110b200f200c6a220320042903f001370100200341206a20152f01003b0100200341186a2017290300370100200341106a200d290300370100200341086a2014290300370100200c41226a210c200e41016a210e200441e0006a20044198026a108e0620042f01604101460d000c030b0b20030d0e0c0d0b410021114102210f4100210e0b0240200428022022034105460d002004290224211002402011450d00201141226c450d00200f102e0b20002003360204200041013602002000410c6a20104220883e0200200041086a20103e02000c050b20042f015c222241ffff03460d024100210302402004280204220c280208201f4d0d00200441386a41026a200c280200201f4105746a220341026a2d00003a0000200441e0006a41086a200341176a290000370300200441e0006a41106a2003411f6a2d00003a0000200420032f00003b01382004200329000f370360200329000721122003280003212a410121030b4102211a200441bc016a41026a200441386a41026a2d00003a0000200441d8016a41086a221b200441e0006a41086a221c290300370300200441d8016a41106a221d200441e0006a41106a220a2d00003a0000200420042f01383b01bc01200420042903603703d8014101210d02402003450d00200441206a41026a200441bc016a41026a2d00003a0000200441f0016a41086a201b290300370300200441f0016a41106a201d2d00003a0000200420042f01bc013b0120200420042903d8013703f0014100210d20122118202a211a0b200441086a41026a220c200441206a41026a221f2d00003a000020044198026a41086a2215200441f0016a41086a221929030037030020044198026a41106a2217200441f0016a41106a22132d00003a0000200420042f01203b0108200420042903f0013703980202400240024002400240200d0d00200441b8016a41026a220b200c2d00003a0000200441c0016a41086a220d2015290300370300200441c0016a41106a221420172d00003a0000200420042f01083b01b80120042004290398023703c001024002400240200e2011460d0020112106200e21110c010b201141016a22032011490d12201141017422062003200620034b1b22034104200341044b1bad42227e2210422088a74541017421032010a721060240024020110d00200441003602600c010b200441023602682004200f3602602004201141226c3602640b200441f0016a20062003200441e0006a107d20042802f801210320042802f0014101460d0120042802f401210f200341226e21060b200f201141226c6a22032018370007200b2d0000211120042f01b801210b2003201a3600032003200b3b0100200341026a20113a0000200320042903c00137000f200341176a200d2903003700002003411f6a20142d00003a000020032022417f733b0120410021030240200228020820204d0d00200441386a41026a2002280200202041386c6a2203410a6a2d00003a0000201c2003411f6a290000370300200a200341276a2d00003a0000200420032f00083b01382004200341176a2900003703602003410f6a29000021212003410b6a2800002125410121030b41022111200441bc016a41026a200441386a41026a2d00003a0000201b201c290300370300201d200a2d00003a0000200420042f01383b01bc01200420042903603703d8014101211a02402003450d00201f200441bc016a41026a2d00003a00002019201b2903003703002013201d2d00003a0000200420042f01bc013b0120200420042903d8013703f0014100211a20212123202521110b200c201f2d00003a000020152019290300370300201720132d00003a0000200420042f01203b0108200420042903f00137039802201a0d07200d2015290300370300201420172d00003a0000200420042f01083b01b80120042004290398023703c0012004200c2d00003a00ba0120082009470d0420084101742203200841016a220c2003200c4b1b22034104200341044b1bad422c7e2210422088a74541027421032010a7210c20080d02200441003602600c030b20030d110c100b2000201a36020420004101360200200041086a20183702000c070b200441043602682004200736026020042008412c6c3602640b200441f0016a200c2003200441e0006a107d20042802f801210320042802f0014101460d0120042802f40121072003412c6e21090b20072008412c6c6a2203200e41016a360208200320063602042003200f360200200341136a2023370000200320042f01b8013b010c2003410e6a20042d00ba013a00002003410f6a20113600002003411b6a20042903c001370000200341236a200d2903003700002003412b6a20142d00003a0000200841016a2108201e41186a221e2028470d010c060b0b20030d0b0c0a0b2000201136020420004101360200200041086a2023370200200621110c010b200042013702000b2011450d00201141226c450d00200f102e0b4100210d4101210c02402029450d00202941186c450d002027102e0b41012102410121164101211b4101211d4101211a4101210f410121154101211c4101210a410121170c010b02402029450d00202941186c450d002027102e0b200128023c2129200141c0006a280200212d02400240200141c4006a2802002203450d0020292003411c6c6a2127200441e0006a4102722116200441c0016a41146a2105200441c0016a41106a212b200441c0016a41086a212a2029211e02400240024002400340201e2f0118211f201e2802002120201e410c6a2901002110201e2901042118202b201e41146a280100360200202a2010370300200420183703c001200441003b015c20044105360220200420053602dc012004200441206a3602e8012004200441046a3602e4012004200441dc006a3602e0012004200441c0016a3602d801200441e0006a200441d8016a108e060240024020042f01604101470d004122102c220f450d0f200f2016290100370100200f41206a201641206a221b2f01003b0100200f41186a201641186a221d290100370100200f41106a201641106a221a290100370100200f41086a201641086a221c29010037010020044198026a41106a200441d8016a41106a28020036020020044198026a41086a200441d8016a41086a290300370300200420042903d80137039802200441e0006a20044198026a108e06410121114101210e20042f01604101470d01410121114122210c4101210e02400340200441f0016a41206a2215201b2f01003b0100200441f0016a41186a2217201d290100370300200441f0016a41106a220d201a290100370300200441f0016a41086a2214201c290100370300200420162901003703f0010240200e2011470d00201141016a22032011490d112011410174220a2003200a20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7210a0240024020110d00200441003602a0010c010b200441023602a8012004200f3602a0012004201141226c3602a4010b200441386a200a2003200441a0016a107d2004280240210320042802384101460d02200428023c210f200341226e21110b200f200c6a220320042903f001370100200341206a20152f01003b0100200341186a2017290300370100200341106a200d290300370100200341086a2014290300370100200c41226a210c200e41016a210e200441e0006a20044198026a108e0620042f01604101460d000c030b0b20030d0f0c0e0b410021114102210f4100210e0b0240200428022022034105460d002004290224211002402011450d00201141226c450d00200f102e0b20002003360204200041013602002000410c6a20104220883e0200200041086a20103e02000c050b20042f015c222241ffff03460d024100210302402004280204220c280208201f4d0d00200441386a41026a200c280200201f4105746a220341026a2d00003a0000200441e0006a41086a200341176a290000370300200441e0006a41106a2003411f6a2d00003a0000200420032f00003b01382004200329000f3703602003290007212120032800032125410121030b4102211a200441bc016a41026a200441386a41026a2d00003a0000200441d8016a41086a221b200441e0006a41086a221c290300370300200441d8016a41106a221d200441e0006a41106a220a2d00003a0000200420042f01383b01bc01200420042903603703d8014101210d02402003450d00200441206a41026a200441bc016a41026a2d00003a0000200441f0016a41086a201b290300370300200441f0016a41106a201d2d00003a0000200420042f01bc013b0120200420042903d8013703f0014100210d202121232025211a0b200441086a41026a220c200441206a41026a221f2d00003a000020044198026a41086a2215200441f0016a41086a221929030037030020044198026a41106a2217200441f0016a41106a22132d00003a0000200420042f01203b0108200420042903f0013703980202400240024002400240200d0d00200441b8016a41026a220b200c2d00003a0000200441a0016a41086a220d2015290300370300200441a0016a41106a221420172d00003a0000200420042f01083b01b80120042004290398023703a001024002400240200e2011460d0020112106200e21110c010b201141016a22032011490d13201141017422062003200620034b1b22034104200341044b1bad42227e2210422088a74541017421032010a721060240024020110d00200441003602600c010b200441023602682004200f3602602004201141226c3602640b200441f0016a20062003200441e0006a107d20042802f801210320042802f0014101460d0120042802f401210f200341226e21060b200f201141226c6a22032023370007200b2d0000211120042f01b801210b2003201a3600032003200b3b0100200341026a20113a0000200320042903a00137000f200341176a200d2903003700002003411f6a20142d00003a000020032022417f733b0120410021030240200228020820204d0d00200441386a41026a2002280200202041386c6a2203410a6a2d00003a0000201c2003411f6a290000370300200a200341276a2d00003a0000200420032f00083b01382004200341176a2900003703602003410f6a290000212c2003410b6a2800002128410121030b41022111200441bc016a41026a200441386a41026a2d00003a0000201b201c290300370300201d200a2d00003a0000200420042f01383b01bc01200420042903603703d8014101211a02402003450d00201f200441bc016a41026a2d00003a00002019201b2903003703002013201d2d00003a0000200420042f01bc013b0120200420042903d8013703f0014100211a202c2112202821110b200c201f2d00003a000020152019290300370300201720132d00003a0000200420042f01203b0108200420042903f00137039802201a0d07200d2015290300370300201420172d00003a0000200420042f01083b01b80120042004290398023703a0012004200c2d00003a00ba0120082009470d04200841016a22032008490d122008410174220c2003200c20034b1b22034104200341044b1bad422c7e2210422088a74541027421032010a7210c20080d02200441003602600c030b20030d120c110b2000201a36020420004101360200200041086a20233702000c070b200441043602682004200736026020042008412c6c3602640b200441f0016a200c2003200441e0006a107d20042802f801210320042802f0014101460d0120042802f40121072003412c6e21090b20072008412c6c6a2203200e41016a360208200320063602042003200f360200200341136a2012370000200320042f01b8013b010c2003410e6a20042d00ba013a00002003410f6a20113600002003411b6a20042903a001370000200341236a200d2903003700002003412b6a20142d00003a0000200841016a2108201e411c6a221e2027470d010c060b0b20030d0c0c0b0b2000201136020420004101360200200041086a2012370200200621110c010b200042013702000b2011450d00201141226c450d00200f102e0b410021174101210c0240202d450d00202d411c6c450d002029102e0b41012102410121164101211b4101211d4101211a4101210f410121154101211c4101210a0c010b0240202d450d00202d411c6c450d002029102e0b20012802482129200141cc006a280200212d02400240200141d0006a2802002203450d00202920034105746a2127200441e0006a410272211620044198026a41186a210520044198026a41106a212b20044198026a41086a212a2029211e02400240024002400340201e2f011c211f201e2802002120201e410c6a2901002110201e2901042118202b201e41146a290100370300202a20103703002004201837039802200441003b015c20044105360220200420053602c4012004200441206a3602d0012004200441046a3602cc012004200441dc006a3602c801200420044198026a3602c001200441e0006a200441c0016a108e060240024020042f01604101470d004122102c220f450d10200f2016290100370100200f41206a201641206a221b2f01003b0100200f41186a201641186a221d290100370100200f41106a201641106a221a290100370100200f41086a201641086a221c290100370100200441d8016a41106a200441c0016a41106a280200360200200441d8016a41086a200441c0016a41086a290300370300200420042903c0013703d801200441e0006a200441d8016a108e06410121114101210e20042f01604101470d01410121114122210c4101210e02400340200441f0016a41206a2215201b2f01003b0100200441f0016a41186a2217201d290100370300200441f0016a41106a220d201a290100370300200441f0016a41086a2214201c290100370300200420162901003703f0010240200e2011470d00201141016a22032011490d122011410174220a2003200a20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7210a0240024020110d00200441003602a0010c010b200441023602a8012004200f3602a0012004201141226c3602a4010b200441386a200a2003200441a0016a107d2004280240210320042802384101460d02200428023c210f200341226e21110b200f200c6a220320042903f001370100200341206a20152f01003b0100200341186a2017290300370100200341106a200d290300370100200341086a2014290300370100200c41226a210c200e41016a210e200441e0006a200441d8016a108e0620042f01604101460d000c030b0b20030d100c0f0b410021114102210f4100210e0b0240200428022022034105460d002004290224211002402011450d00201141226c450d00200f102e0b20002003360204200041013602002000410c6a20104220883e0200200041086a20103e02000c050b20042f015c222241ffff03460d024100210302402004280204220c280208201f4d0d00200441386a41026a200c280200201f4105746a220341026a2d00003a0000200441e0006a41086a200341176a290000370300200441e0006a41106a2003411f6a2d00003a0000200420032f00003b01382004200329000f3703602003290007212120032800032125410121030b4102211a200441bc016a41026a200441386a41026a2d00003a0000200441d8016a41086a221b200441e0006a41086a221c290300370300200441d8016a41106a221d200441e0006a41106a220a2d00003a0000200420042f01383b01bc01200420042903603703d8014101210d02402003450d00200441206a41026a200441bc016a41026a2d00003a0000200441f0016a41086a201b290300370300200441f0016a41106a201d2d00003a0000200420042f01bc013b0120200420042903d8013703f0014100210d202121232025211a0b200441086a41026a220c200441206a41026a221f2d00003a0000200441c0016a41086a2215200441f0016a41086a2219290300370300200441c0016a41106a2217200441f0016a41106a22132d00003a0000200420042f01203b0108200420042903f0013703c00102400240024002400240200d0d00200441b8016a41026a220b200c2d00003a0000200441a0016a41086a220d2015290300370300200441a0016a41106a221420172d00003a0000200420042f01083b01b801200420042903c0013703a001024002400240200e2011460d0020112106200e21110c010b201141016a22032011490d14201141017422062003200620034b1b22034104200341044b1bad42227e2210422088a74541017421032010a721060240024020110d00200441003602600c010b200441023602682004200f3602602004201141226c3602640b200441f0016a20062003200441e0006a107d20042802f801210320042802f0014101460d0120042802f401210f200341226e21060b200f201141226c6a22032023370007200b2d0000211120042f01b801210b2003201a3600032003200b3b0100200341026a20113a0000200320042903a00137000f200341176a200d2903003700002003411f6a20142d00003a000020032022417f733b0120410021030240200228020820204d0d00200441386a41026a2002280200202041386c6a2203410a6a2d00003a0000201c2003411f6a290000370300200a200341276a2d00003a0000200420032f00083b01382004200341176a2900003703602003410f6a290000212c2003410b6a2800002128410121030b41022111200441bc016a41026a200441386a41026a2d00003a0000201b201c290300370300201d200a2d00003a0000200420042f01383b01bc01200420042903603703d8014101211a02402003450d00201f200441bc016a41026a2d00003a00002019201b2903003703002013201d2d00003a0000200420042f01bc013b0120200420042903d8013703f0014100211a20282111202c21120b200c201f2d00003a000020152019290300370300201720132d00003a0000200420042f01203b0108200420042903f0013703c001201a0d07200d2015290300370300201420172d00003a0000200420042f01083b01b801200420042903c0013703a0012004200c2d00003a00ba0120082009470d04200841016a22032008490d132008410174220c2003200c20034b1b22034104200341044b1bad422c7e2210422088a74541027421032010a7210c20080d02200441003602600c030b20030d130c120b2000201a36020420004101360200200041086a20233702000c070b200441043602682004200736026020042008412c6c3602640b200441f0016a200c2003200441e0006a107d20042802f801210320042802f0014101460d0120042802f40121072003412c6e21090b20072008412c6c6a2203200e41016a360208200320063602042003200f360200200341136a2012370000200320042f01b8013b010c2003410e6a20042d00ba013a00002003410f6a20113600002003411b6a20042903a001370000200341236a200d2903003700002003412b6a20142d00003a0000200841016a2108201e41206a221e2027470d010c060b0b20030d0d0c0c0b2000201136020420004101360200200041086a2012370200200621110c010b200042013702000b2011450d00201141226c450d00200f102e0b4100210a4101210c0240202d41ffffff3f71450d002029102e0b41012102410121164101211b4101211d4101211a4101210f410121154101211c0c010b0240202d41ffffff3f71450d002029102e0b2001280254212d200141d8006a280200212602400240200141dc006a2802002203450d00202d200341246c6a2129200441e0006a410272211620044198026a411c6a210520044198026a41186a212b20044198026a41106a212a20044198026a41086a2125202d211e02400240024002400340201e2f0120211f201e2802002120201e410c6a2901002110201e41146a2901002118201e2901042123202b201e411c6a280100360200202a2018370300202520103703002004202337039802200441003b015c20044105360220200420053602c4012004200441206a3602d0012004200441046a3602cc012004200441dc006a3602c801200420044198026a3602c001200441e0006a200441c0016a108e060240024020042f01604101470d004122102c220f450d11200f2016290100370100200f41206a201641206a221b2f01003b0100200f41186a201641186a221d290100370100200f41106a201641106a221a290100370100200f41086a201641086a221c290100370100200441d8016a41106a200441c0016a41106a280200360200200441d8016a41086a200441c0016a41086a290300370300200420042903c0013703d801200441e0006a200441d8016a108e06410121114101210e20042f01604101470d01410121114122210c4101210e02400340200441f0016a41206a2215201b2f01003b0100200441f0016a41186a2217201d290100370300200441f0016a41106a220d201a290100370300200441f0016a41086a2214201c290100370300200420162901003703f0010240200e2011470d00201141016a22032011490d132011410174220a2003200a20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7210a0240024020110d00200441003602a0010c010b200441023602a8012004200f3602a0012004201141226c3602a4010b200441386a200a2003200441a0016a107d2004280240210320042802384101460d02200428023c210f200341226e21110b200f200c6a220320042903f001370100200341206a20152f01003b0100200341186a2017290300370100200341106a200d290300370100200341086a2014290300370100200c41226a210c200e41016a210e200441e0006a200441d8016a108e0620042f01604101460d000c030b0b20030d110c100b410021114102210f4100210e0b0240200428022022034105460d002004290224211002402011450d00201141226c450d00200f102e0b20002003360204200041013602002000410c6a20104220883e0200200041086a20103e02000c050b20042f015c222241ffff03460d024100210302402004280204220c280208201f4d0d00200441386a41026a200c280200201f4105746a220341026a2d00003a0000200441e0006a41086a200341176a290000370300200441e0006a41106a2003411f6a2d00003a0000200420032f00003b01382004200329000f3703602003290007212c20032800032128410121030b4102211a200441bc016a41026a200441386a41026a2d00003a0000200441d8016a41086a221b200441e0006a41086a221c290300370300200441d8016a41106a221d200441e0006a41106a220a2d00003a0000200420042f01383b01bc01200420042903603703d8014101210d02402003450d00200441206a41026a200441bc016a41026a2d00003a0000200441f0016a41086a201b290300370300200441f0016a41106a201d2d00003a0000200420042f01bc013b0120200420042903d8013703f0014100210d2028211a202c21120b200441086a41026a220c200441206a41026a221f2d00003a0000200441c0016a41086a2215200441f0016a41086a2219290300370300200441c0016a41106a2217200441f0016a41106a22132d00003a0000200420042f01203b0108200420042903f0013703c00102400240024002400240200d0d00200441b8016a41026a220b200c2d00003a0000200441a0016a41086a220d2015290300370300200441a0016a41106a221420172d00003a0000200420042f01083b01b801200420042903c0013703a001024002400240200e2011460d0020112106200e21110c010b201141016a22032011490d15201141017422062003200620034b1b22034104200341044b1bad42227e2210422088a74541017421032010a721060240024020110d00200441003602600c010b200441023602682004200f3602602004201141226c3602640b200441f0016a20062003200441e0006a107d20042802f801210320042802f0014101460d0120042802f401210f200341226e21060b200f201141226c6a22032012370007200b2d0000211120042f01b801210b2003201a3600032003200b3b0100200341026a20113a0000200320042903a00137000f200341176a200d2903003700002003411f6a20142d00003a000020032022417f733b0120410021030240200228020820204d0d00200441386a41026a2002280200202041386c6a2203410a6a2d00003a0000201c2003411f6a290000370300200a200341276a2d00003a0000200420032f00083b01382004200341176a2900003703602003410f6a290000212e2003410b6a2800002127410121030b41022111200441bc016a41026a200441386a41026a2d00003a0000201b201c290300370300201d200a2d00003a0000200420042f01383b01bc01200420042903603703d8014101211a02402003450d00201f200441bc016a41026a2d00003a00002019201b2903003703002013201d2d00003a0000200420042f01bc013b0120200420042903d8013703f0014100211a20272111202e21210b200c201f2d00003a000020152019290300370300201720132d00003a0000200420042f01203b0108200420042903f0013703c001201a0d07200d2015290300370300201420172d00003a0000200420042f01083b01b801200420042903c0013703a0012004200c2d00003a00ba0120082009470d04200841016a22032008490d142008410174220c2003200c20034b1b22034104200341044b1bad422c7e2210422088a74541027421032010a7210c20080d02200441003602600c030b20030d140c130b2000201a36020420004101360200200041086a20123702000c070b200441043602682004200736026020042008412c6c3602640b200441f0016a200c2003200441e0006a107d20042802f801210320042802f0014101460d0120042802f40121072003412c6e21090b20072008412c6c6a2203200e41016a360208200320063602042003200f360200200341136a2021370000200320042f01b8013b010c2003410e6a20042d00ba013a00002003410f6a20113600002003411b6a20042903a001370000200341236a200d2903003700002003412b6a20142d00003a0000200841016a2108201e41246a221e2029470d010c060b0b20030d0e0c0d0b2000201136020420004101360200200041086a2021370200200621110c010b200042013702000b2011450d00201141226c450d00200f102e0b4100211c4101210c02402026450d00202641246c450d00202d102e0b41012102410121164101211b4101211d4101211a4101210f410121150c010b02402026450d00202641246c450d00202d102e0b2001280260212d200141e4006a280200212602400240200141e8006a2802002203450d00202d200341286c6a2129200441e0006a410272211620044198026a41206a210520044198026a41186a212b20044198026a41106a212a20044198026a41086a2125202d211e02400240024002400340201e2f0124211f201e2802002120201e410c6a2901002110201e41146a2901002118201e2901042123202b201e411c6a290100370300202a2018370300202520103703002004202337039802200441003b015c20044105360220200420053602c4012004200441206a3602d0012004200441046a3602cc012004200441dc006a3602c801200420044198026a3602c001200441e0006a200441c0016a108e060240024020042f01604101470d004122102c220f450d12200f2016290100370100200f41206a201641206a221b2f01003b0100200f41186a201641186a221d290100370100200f41106a201641106a221a290100370100200f41086a201641086a221c290100370100200441d8016a41106a200441c0016a41106a280200360200200441d8016a41086a200441c0016a41086a290300370300200420042903c0013703d801200441e0006a200441d8016a108e06410121114101210e20042f01604101470d01410121114122210c4101210e02400340200441f0016a41206a2215201b2f01003b0100200441f0016a41186a2217201d290100370300200441f0016a41106a220d201a290100370300200441f0016a41086a2214201c290100370300200420162901003703f0010240200e2011470d00201141016a22032011490d142011410174220a2003200a20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7210a0240024020110d00200441003602a0010c010b200441023602a8012004200f3602a0012004201141226c3602a4010b200441386a200a2003200441a0016a107d2004280240210320042802384101460d02200428023c210f200341226e21110b200f200c6a220320042903f001370100200341206a20152f01003b0100200341186a2017290300370100200341106a200d290300370100200341086a2014290300370100200c41226a210c200e41016a210e200441e0006a200441d8016a108e0620042f01604101460d000c030b0b20030d120c110b410021114102210f4100210e0b0240200428022022034105460d002004290224211002402011450d00201141226c450d00200f102e0b20002003360204200041013602002000410c6a20104220883e0200200041086a20103e02000c050b20042f015c222241ffff03460d024100210302402004280204220c280208201f4d0d00200441386a41026a200c280200201f4105746a220341026a2d00003a0000200441e0006a41086a200341176a290000370300200441e0006a41106a2003411f6a2d00003a0000200420032f00003b01382004200329000f3703602003290007212c20032800032128410121030b4102211a200441bc016a41026a200441386a41026a2d00003a0000200441d8016a41086a221b200441e0006a41086a221c290300370300200441d8016a41106a221d200441e0006a41106a220a2d00003a0000200420042f01383b01bc01200420042903603703d8014101210d02402003450d00200441206a41026a200441bc016a41026a2d00003a0000200441f0016a41086a201b290300370300200441f0016a41106a201d2d00003a0000200420042f01bc013b0120200420042903d8013703f0014100210d2028211a202c21120b200441086a41026a220c200441206a41026a221f2d00003a0000200441c0016a41086a2215200441f0016a41086a2219290300370300200441c0016a41106a2217200441f0016a41106a22132d00003a0000200420042f01203b0108200420042903f0013703c00102400240024002400240200d0d00200441b8016a41026a220b200c2d00003a0000200441a0016a41086a220d2015290300370300200441a0016a41106a221420172d00003a0000200420042f01083b01b801200420042903c0013703a001024002400240200e2011460d0020112106200e21110c010b201141016a22032011490d16201141017422062003200620034b1b22034104200341044b1bad42227e2210422088a74541017421032010a721060240024020110d00200441003602600c010b200441023602682004200f3602602004201141226c3602640b200441f0016a20062003200441e0006a107d20042802f801210320042802f0014101460d0120042802f401210f200341226e21060b200f201141226c6a22032012370007200b2d0000211120042f01b801210b2003201a3600032003200b3b0100200341026a20113a0000200320042903a00137000f200341176a200d2903003700002003411f6a20142d00003a000020032022417f733b0120410021030240200228020820204d0d00200441386a41026a2002280200202041386c6a2203410a6a2d00003a0000201c2003411f6a290000370300200a200341276a2d00003a0000200420032f00083b01382004200341176a2900003703602003410f6a290000212e2003410b6a2800002127410121030b41022111200441bc016a41026a200441386a41026a2d00003a0000201b201c290300370300201d200a2d00003a0000200420042f01383b01bc01200420042903603703d8014101211a02402003450d00201f200441bc016a41026a2d00003a00002019201b2903003703002013201d2d00003a0000200420042f01bc013b0120200420042903d8013703f0014100211a20272111202e21210b200c201f2d00003a000020152019290300370300201720132d00003a0000200420042f01203b0108200420042903f0013703c001201a0d07200d2015290300370300201420172d00003a0000200420042f01083b01b801200420042903c0013703a0012004200c2d00003a00ba0120082009470d04200841016a22032008490d152008410174220c2003200c20034b1b22034104200341044b1bad422c7e2210422088a74541027421032010a7210c20080d02200441003602600c030b20030d150c140b2000201a36020420004101360200200041086a20123702000c070b200441043602682004200736026020042008412c6c3602640b200441f0016a200c2003200441e0006a107d20042802f801210320042802f0014101460d0120042802f40121072003412c6e21090b20072008412c6c6a2203200e41016a360208200320063602042003200f360200200341136a2021370000200320042f01b8013b010c2003410e6a20042d00ba013a00002003410f6a20113600002003411b6a20042903a001370000200341236a200d2903003700002003412b6a20142d00003a0000200841016a2108201e41286a221e2029470d010c060b0b20030d0f0c0e0b2000201136020420004101360200200041086a2021370200200621110c010b200042013702000b2011450d00201141226c450d00200f102e0b410021154101210c02402026450d00202641286c450d00202d102e0b41012102410121164101211b4101211d4101211a4101210f0c010b02402026450d00202641286c450d00202d102e0b200128026c2126200141f0006a280200212402400240200141f4006a2802002203450d0020262003412c6c6a212d200441e0006a4102722116200441f0016a41246a2105200441f0016a41206a212b200441f0016a41186a212a200441f0016a41106a2125200441f0016a41086a21282026211b02400240024002400340201b2f0128211f201b2802002120201b410c6a2901002110201b41146a2901002118201b411c6a2901002123201b2901042112202b201b41246a280100360200202a20233703002025201837030020282010370300200420123703f001200441003b015c20044105360220200420053602c4012004200441206a3602d0012004200441046a3602cc012004200441dc006a3602c8012004200441f0016a3602c001200441e0006a200441c0016a108e060240024020042f01604101470d004122102c220f450d13200f2016290100370100200f41206a201641206a221d2f01003b0100200f41186a201641186a221a290100370100200f41106a201641106a221c290100370100200f41086a201641086a220a290100370100200441d8016a41106a200441c0016a41106a280200360200200441d8016a41086a200441c0016a41086a290300370300200420042903c0013703d801200441e0006a200441d8016a108e06410121114101210e20042f01604101470d01410121114122210c4101210e0240034020044198026a41206a2215201d2f01003b010020044198026a41186a2217201a29010037030020044198026a41106a220d201c29010037030020044198026a41086a2214200a29010037030020042016290100370398020240200e2011470d00201141016a22032011490d152011410174221e2003201e20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7211e0240024020110d00200441003602a0010c010b200441023602a8012004200f3602a0012004201141226c3602a4010b200441386a201e2003200441a0016a107d2004280240210320042802384101460d02200428023c210f200341226e21110b200f200c6a2203200429039802370100200341206a20152f01003b0100200341186a2017290300370100200341106a200d290300370100200341086a2014290300370100200c41226a210c200e41016a210e200441e0006a200441d8016a108e0620042f01604101460d000c030b0b20030d130c120b410021114102210f4100210e0b0240200428022022034105460d002004290224211002402011450d00201141226c450d00200f102e0b20002003360204200041013602002000410c6a20104220883e0200200041086a20103e02000c050b20042f015c222241ffff03460d024100210302402004280204220c280208201f4d0d00200441386a41026a200c280200201f4105746a220341026a2d00003a0000200441e0006a41086a200341176a290000370300200441e0006a41106a2003411f6a2d00003a0000200420032f00003b01382004200329000f3703602003290007212e20032800032127410121030b4102211c200441bc016a41026a200441386a41026a2d00003a0000200441d8016a41086a221d200441e0006a41086a220a290300370300200441d8016a41106a221a200441e0006a41106a221e2d00003a0000200420042f01383b01bc01200420042903603703d8014101210d02402003450d00200441206a41026a200441bc016a41026a2d00003a000020044198026a41086a201d29030037030020044198026a41106a201a2d00003a0000200420042f01bc013b0120200420042903d801370398024100210d2027211c202e21210b200441086a41026a220c200441206a41026a221f2d00003a0000200441c0016a41086a221520044198026a41086a2219290300370300200441c0016a41106a221720044198026a41106a22132d00003a0000200420042f01203b010820042004290398023703c00102400240024002400240200d0d00200441b8016a41026a2206200c2d00003a0000200441a0016a41086a220d2015290300370300200441a0016a41106a221420172d00003a0000200420042f01083b01b801200420042903c0013703a001024002400240200e2011460d002011210b200e21110c010b201141016a22032011490d172011410174220b2003200b20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7210b0240024020110d00200441003602600c010b200441023602682004200f3602602004201141226c3602640b20044198026a200b2003200441e0006a107d20042802a00221032004280298024101460d01200428029c02210f200341226e210b0b200f201141226c6a2203202137000720062d0000211120042f01b80121062003201c360003200320063b0100200341026a20113a0000200320042903a00137000f200341176a200d2903003700002003411f6a20142d00003a000020032022417f733b0120410021030240200228020820204d0d00200441386a41026a2002280200202041386c6a2203410a6a2d00003a0000200a2003411f6a290000370300201e200341276a2d00003a0000200420032f00083b01382004200341176a2900003703602003410f6a290000212f2003410b6a2800002129410121030b4102211c200441bc016a41026a200441386a41026a2d00003a0000201d200a290300370300201a201e2d00003a0000200420042f01383b01bc01200420042903603703d8014101211102402003450d00201f200441bc016a41026a2d00003a00002019201d2903003703002013201a2d00003a0000200420042f01bc013b0120200420042903d80137039802410021112029211c202f212c0b200c201f2d00003a000020152019290300370300201720132d00003a0000200420042f01203b010820042004290398023703c00120110d07200d2015290300370300201420172d00003a0000200420042f01083b01b801200420042903c0013703a0012004200c2d00003a00ba0120082009470d04200841016a22032008490d16200841017422112003201120034b1b22034104200341044b1bad422c7e2210422088a74541027421032010a7211120080d02200441003602600c030b20030d160c150b2000201c36020420004101360200200041086a20213702000c070b200441043602682004200736026020042008412c6c3602640b20044198026a20112003200441e0006a107d20042802a00221032004280298024101460d01200428029c0221072003412c6e21090b20072008412c6c6a2203200e41016a3602082003200b3602042003200f360200200341136a202c370000200320042f01b8013b010c2003410e6a20042d00ba013a00002003410f6a201c3600002003411b6a20042903a001370000200341236a200d2903003700002003412b6a20142d00003a0000200841016a2108201b412c6a221b202d470d010c060b0b20030d100c0f0b2000201c36020420004101360200200041086a202c370200200b21110c010b200042013702000b2011450d00201141226c450d00200f102e0b4100210f4101210c02402024450d002024412c6c450d002026102e0b41012102410121164101211b4101211d4101211a0c010b02402024450d002024412c6c450d002026102e0b20012802782126200141fc006a28020021240240024020014180016a2802002203450d002026200341306c6a212d200441f0016a410272211620044188016a2105200441e0006a41206a212b200441e0006a41186a212a200441e0006a41106a2125200441e0006a41086a21282026211b02400240024002400340201b2f012c211f201b2802002120201b410c6a2901002110201b41146a2901002118201b411c6a2901002123201b2901042112202b201b41246a290100370300202a2023370300202520183703002028201037030020042012370360200441003b015c20044105360220200420053602c4012004200441206a3602d0012004200441046a3602cc012004200441dc006a3602c8012004200441e0006a3602c001200441f0016a200441c0016a108e060240024020042f01f0014101470d004122102c220f450d14200f2016290100370100200f41206a201641206a221d2f01003b0100200f41186a201641186a221a290100370100200f41106a201641106a221c290100370100200f41086a201641086a220a290100370100200441d8016a41106a200441c0016a41106a280200360200200441d8016a41086a200441c0016a41086a290300370300200420042903c0013703d801200441f0016a200441d8016a108e06410121114101210e20042f01f0014101470d01410121114122210c4101210e0240034020044198026a41206a2215201d2f01003b010020044198026a41186a2217201a29010037030020044198026a41106a220d201c29010037030020044198026a41086a2214200a29010037030020042016290100370398020240200e2011470d00201141016a22032011490d162011410174221e2003201e20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7211e0240024020110d00200441003602a0010c010b200441023602a8012004200f3602a0012004201141226c3602a4010b200441386a201e2003200441a0016a107d2004280240210320042802384101460d02200428023c210f200341226e21110b200f200c6a2203200429039802370100200341206a20152f01003b0100200341186a2017290300370100200341106a200d290300370100200341086a2014290300370100200c41226a210c200e41016a210e200441f0016a200441d8016a108e0620042f01f0014101460d000c030b0b20030d140c130b410021114102210f4100210e0b0240200428022022034105460d002004290224211002402011450d00201141226c450d00200f102e0b20002003360204200041013602002000410c6a20104220883e0200200041086a20103e02000c050b20042f015c222241ffff03460d024100210302402004280204220c280208201f4d0d00200441386a41026a200c280200201f4105746a220341026a2d00003a0000200441f0016a41086a200341176a290000370300200441f0016a41106a2003411f6a2d00003a0000200420032f00003b01382004200329000f3703f0012003290007212e20032800032127410121030b4102211c200441bc016a41026a200441386a41026a2d00003a0000200441d8016a41086a221d200441f0016a41086a220a290300370300200441d8016a41106a221a200441f0016a41106a221e2d00003a0000200420042f01383b01bc01200420042903f0013703d8014101210d02402003450d00200441206a41026a200441bc016a41026a2d00003a000020044198026a41086a201d29030037030020044198026a41106a201a2d00003a0000200420042f01bc013b0120200420042903d801370398024100210d2027211c202e21210b200441086a41026a220c200441206a41026a221f2d00003a0000200441c0016a41086a221520044198026a41086a2219290300370300200441c0016a41106a221720044198026a41106a22132d00003a0000200420042f01203b010820042004290398023703c00102400240024002400240200d0d00200441b8016a41026a220b200c2d00003a0000200441a0016a41086a220d2015290300370300200441a0016a41106a221420172d00003a0000200420042f01083b01b801200420042903c0013703a001024002400240200e2011460d0020112106200e21110c010b201141016a22032011490d18201141017422062003200620034b1b22034104200341044b1bad42227e2210422088a74541017421032010a721060240024020110d00200441003602f0010c010b200441023602f8012004200f3602f0012004201141226c3602f4010b20044198026a20062003200441f0016a107d20042802a00221032004280298024101460d01200428029c02210f200341226e21060b200f201141226c6a22032021370007200b2d0000211120042f01b801210b2003201c3600032003200b3b0100200341026a20113a0000200320042903a00137000f200341176a200d2903003700002003411f6a20142d00003a000020032022417f733b0120410021030240200228020820204d0d00200441386a41026a2002280200202041386c6a2203410a6a2d00003a0000200a2003411f6a290000370300201e200341276a2d00003a0000200420032f00083b01382004200341176a2900003703f0012003410f6a290000212f2003410b6a2800002129410121030b41022111200441bc016a41026a200441386a41026a2d00003a0000201d200a290300370300201a201e2d00003a0000200420042f01383b01bc01200420042903f0013703d8014101211c02402003450d00201f200441bc016a41026a2d00003a00002019201d2903003703002013201a2d00003a0000200420042f01bc013b0120200420042903d801370398024100211c20292111202f212c0b200c201f2d00003a000020152019290300370300201720132d00003a0000200420042f01203b010820042004290398023703c001201c0d07200d2015290300370300201420172d00003a0000200420042f01083b01b801200420042903c0013703a0012004200c2d00003a00ba0120082009470d04200841016a22032008490d172008410174220c2003200c20034b1b22034104200341044b1bad422c7e2210422088a74541027421032010a7210c20080d02200441003602f0010c030b20030d170c160b2000201c36020420004101360200200041086a20213702000c070b200441043602f801200420073602f00120042008412c6c3602f4010b20044198026a200c2003200441f0016a107d20042802a00221032004280298024101460d01200428029c0221072003412c6e21090b20072008412c6c6a2203200e41016a360208200320063602042003200f360200200341136a202c370000200320042f01b8013b010c2003410e6a20042d00ba013a00002003410f6a20113600002003411b6a20042903a001370000200341236a200d2903003700002003412b6a20142d00003a0000200841016a2108201b41306a221b202d470d010c060b0b20030d110c100b2000201136020420004101360200200041086a202c370200200621110c010b200042013702000b2011450d00201141226c450d00200f102e0b4100211a4101210c02402024450d00202441306c450d002026102e0b41012102410121164101211b4101211d0c010b02402024450d00202441306c450d002026102e0b200128028401212420014188016a2802002130024002402001418c016a2802002203450d002024200341346c6a2126200441f0016a4102722116200441e0006a412c6a210520044188016a212b200441e0006a41206a212a200441e0006a41186a2125200441e0006a41106a2128200441e0006a41086a21272024211b02400240024002400340201b2f0130211f201b2802002120201b410c6a2901002110201b41146a2901002118201b411c6a2901002123201b41246a2901002112201b2901042121202b201b412c6a280100360200202a201237030020252023370300202820183703002027201037030020042021370360200441003b015c20044105360220200420053602c4012004200441206a3602d0012004200441046a3602cc012004200441dc006a3602c8012004200441e0006a3602c001200441f0016a200441c0016a108e060240024020042f01f0014101470d004122102c220f450d15200f2016290100370100200f41206a201641206a221d2f01003b0100200f41186a201641186a221a290100370100200f41106a201641106a221c290100370100200f41086a201641086a220a290100370100200441d8016a41106a200441c0016a41106a280200360200200441d8016a41086a200441c0016a41086a290300370300200420042903c0013703d801200441f0016a200441d8016a108e06410121114101210e20042f01f0014101470d01410121114122210c4101210e0240034020044198026a41206a2215201d2f01003b010020044198026a41186a2217201a29010037030020044198026a41106a220d201c29010037030020044198026a41086a2214200a29010037030020042016290100370398020240200e2011470d00201141016a22032011490d172011410174221e2003201e20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7211e0240024020110d00200441003602a0010c010b200441023602a8012004200f3602a0012004201141226c3602a4010b200441386a201e2003200441a0016a107d2004280240210320042802384101460d02200428023c210f200341226e21110b200f200c6a2203200429039802370100200341206a20152f01003b0100200341186a2017290300370100200341106a200d290300370100200341086a2014290300370100200c41226a210c200e41016a210e200441f0016a200441d8016a108e0620042f01f0014101460d000c030b0b20030d150c140b410021114102210f4100210e0b0240200428022022034105460d002004290224211002402011450d00201141226c450d00200f102e0b20002003360204200041013602002000410c6a20104220883e0200200041086a20103e02000c050b20042f015c222241ffff03460d024100210302402004280204220c280208201f4d0d00200441386a41026a200c280200201f4105746a220341026a2d00003a0000200441f0016a41086a200341176a290000370300200441f0016a41106a2003411f6a2d00003a0000200420032f00003b01382004200329000f3703f0012003290007212f20032800032129410121030b4102211c200441bc016a41026a200441386a41026a2d00003a0000200441d8016a41086a221d200441f0016a41086a220a290300370300200441d8016a41106a221a200441f0016a41106a221e2d00003a0000200420042f01383b01bc01200420042903f0013703d8014101210d02402003450d00200441206a41026a200441bc016a41026a2d00003a000020044198026a41086a201d29030037030020044198026a41106a201a2d00003a0000200420042f01bc013b0120200420042903d801370398024100210d2029211c202f212c0b200441086a41026a220c200441206a41026a221f2d00003a0000200441c0016a41086a221520044198026a41086a2219290300370300200441c0016a41106a221720044198026a41106a22132d00003a0000200420042f01203b010820042004290398023703c00102400240024002400240200d0d00200441b8016a41026a220b200c2d00003a0000200441a0016a41086a220d2015290300370300200441a0016a41106a221420172d00003a0000200420042f01083b01b801200420042903c0013703a001024002400240200e2011460d0020112106200e21110c010b201141016a22032011490d19201141017422062003200620034b1b22034104200341044b1bad42227e2210422088a74541017421032010a721060240024020110d00200441003602f0010c010b200441023602f8012004200f3602f0012004201141226c3602f4010b20044198026a20062003200441f0016a107d20042802a00221032004280298024101460d01200428029c02210f200341226e21060b200f201141226c6a2203202c370007200b2d0000211120042f01b801210b2003201c3600032003200b3b0100200341026a20113a0000200320042903a00137000f200341176a200d2903003700002003411f6a20142d00003a000020032022417f733b0120410021030240200228020820204d0d00200441386a41026a2002280200202041386c6a2203410a6a2d00003a0000200a2003411f6a290000370300201e200341276a2d00003a0000200420032f00083b01382004200341176a2900003703f0012003410f6a29000021312003410b6a280000212d410121030b4102211c200441bc016a41026a200441386a41026a2d00003a0000201d200a290300370300201a201e2d00003a0000200420042f01383b01bc01200420042903f0013703d8014101211102402003450d00201f200441bc016a41026a2d00003a00002019201d2903003703002013201a2d00003a0000200420042f01bc013b0120200420042903d8013703980241002111202d211c2031212e0b200c201f2d00003a000020152019290300370300201720132d00003a0000200420042f01203b010820042004290398023703c00120110d07200d2015290300370300201420172d00003a0000200420042f01083b01b801200420042903c0013703a0012004200c2d00003a00ba0120082009470d04200841016a22032008490d18200841017422112003201120034b1b22034104200341044b1bad422c7e2210422088a74541027421032010a7211120080d02200441003602f0010c030b20030d180c170b2000201c36020420004101360200200041086a202c3702000c070b200441043602f801200420073602f00120042008412c6c3602f4010b20044198026a20112003200441f0016a107d20042802a00221032004280298024101460d01200428029c0221072003412c6e21090b20072008412c6c6a2203200e41016a360208200320063602042003200f360200200341136a202e370000200320042f01b8013b010c2003410e6a20042d00ba013a00002003410f6a201c3600002003411b6a20042903a001370000200341236a200d2903003700002003412b6a20142d00003a0000200841016a2108201b41346a221b2026470d010c060b0b20030d120c110b2000201c36020420004101360200200041086a202e370200200621110c010b200042013702000b2011450d00201141226c450d00200f102e0b4100211d4101210c02402030450d00203041346c450d002024102e0b41012102410121164101211b0c010b02402030450d00203041346c450d002024102e0b200128029001212420014194016a28020021300240024020014198016a2802002203450d002024200341386c6a2126200441f0016a410272211620044190016a210520044188016a212b200441e0006a41206a212a200441e0006a41186a2125200441e0006a41106a2128200441e0006a41086a21272024211b02400240024002400340201b2f0134211f201b2802002120201b410c6a2901002110201b41146a2901002118201b411c6a2901002123201b41246a2901002112201b2901042121202b201b412c6a290100370300202a201237030020252023370300202820183703002027201037030020042021370360200441003b015c20044105360220200420053602c4012004200441206a3602d0012004200441046a3602cc012004200441dc006a3602c8012004200441e0006a3602c001200441f0016a200441c0016a108e060240024020042f01f0014101470d004122102c220f450d16200f2016290100370100200f41206a201641206a221d2f01003b0100200f41186a201641186a221a290100370100200f41106a201641106a221c290100370100200f41086a201641086a220a290100370100200441d8016a41106a200441c0016a41106a280200360200200441d8016a41086a200441c0016a41086a290300370300200420042903c0013703d801200441f0016a200441d8016a108e06410121114101210e20042f01f0014101470d01410121114122210c4101210e0240034020044198026a41206a2215201d2f01003b010020044198026a41186a2217201a29010037030020044198026a41106a220d201c29010037030020044198026a41086a2214200a29010037030020042016290100370398020240200e2011470d00201141016a22032011490d182011410174221e2003201e20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7211e0240024020110d00200441003602a0010c010b200441023602a8012004200f3602a0012004201141226c3602a4010b200441386a201e2003200441a0016a107d2004280240210320042802384101460d02200428023c210f200341226e21110b200f200c6a2203200429039802370100200341206a20152f01003b0100200341186a2017290300370100200341106a200d290300370100200341086a2014290300370100200c41226a210c200e41016a210e200441f0016a200441d8016a108e0620042f01f0014101460d000c030b0b20030d160c150b410021114102210f4100210e0b0240200428022022034105460d002004290224211002402011450d00201141226c450d00200f102e0b20002003360204200041013602002000410c6a20104220883e0200200041086a20103e02000c050b20042f015c222241ffff03460d024100210302402004280204220c280208201f4d0d00200441386a41026a200c280200201f4105746a220341026a2d00003a0000200441f0016a41086a200341176a290000370300200441f0016a41106a2003411f6a2d00003a0000200420032f00003b01382004200329000f3703f0012003290007212f20032800032129410121030b4102211c200441bc016a41026a200441386a41026a2d00003a0000200441d8016a41086a221d200441f0016a41086a220a290300370300200441d8016a41106a221a200441f0016a41106a221e2d00003a0000200420042f01383b01bc01200420042903f0013703d8014101210d02402003450d00200441206a41026a200441bc016a41026a2d00003a000020044198026a41086a201d29030037030020044198026a41106a201a2d00003a0000200420042f01bc013b0120200420042903d801370398024100210d2029211c202f212c0b200441086a41026a220c200441206a41026a221f2d00003a0000200441c0016a41086a221520044198026a41086a2219290300370300200441c0016a41106a221720044198026a41106a22132d00003a0000200420042f01203b010820042004290398023703c00102400240024002400240200d0d00200441b8016a41026a220b200c2d00003a0000200441a0016a41086a220d2015290300370300200441a0016a41106a221420172d00003a0000200420042f01083b01b801200420042903c0013703a001024002400240200e2011460d0020112106200e21110c010b201141016a22032011490d1a201141017422062003200620034b1b22034104200341044b1bad42227e2210422088a74541017421032010a721060240024020110d00200441003602f0010c010b200441023602f8012004200f3602f0012004201141226c3602f4010b20044198026a20062003200441f0016a107d20042802a00221032004280298024101460d01200428029c02210f200341226e21060b200f201141226c6a2203202c370007200b2d0000211120042f01b801210b2003201c3600032003200b3b0100200341026a20113a0000200320042903a00137000f200341176a200d2903003700002003411f6a20142d00003a000020032022417f733b0120410021030240200228020820204d0d00200441386a41026a2002280200202041386c6a2203410a6a2d00003a0000200a2003411f6a290000370300201e200341276a2d00003a0000200420032f00083b01382004200341176a2900003703f0012003410f6a29000021312003410b6a280000212d410121030b41022111200441bc016a41026a200441386a41026a2d00003a0000201d200a290300370300201a201e2d00003a0000200420042f01383b01bc01200420042903f0013703d8014101211c02402003450d00201f200441bc016a41026a2d00003a00002019201d2903003703002013201a2d00003a0000200420042f01bc013b0120200420042903d801370398024100211c202d21112031212e0b200c201f2d00003a000020152019290300370300201720132d00003a0000200420042f01203b010820042004290398023703c001201c0d07200d2015290300370300201420172d00003a0000200420042f01083b01b801200420042903c0013703a0012004200c2d00003a00ba0120082009470d04200841016a22032008490d192008410174220c2003200c20034b1b22034104200341044b1bad422c7e2210422088a74541027421032010a7210c20080d02200441003602f0010c030b20030d190c180b2000201c36020420004101360200200041086a202c3702000c070b200441043602f801200420073602f00120042008412c6c3602f4010b20044198026a200c2003200441f0016a107d20042802a00221032004280298024101460d01200428029c0221072003412c6e21090b20072008412c6c6a2203200e41016a360208200320063602042003200f360200200341136a202e370000200320042f01b8013b010c2003410e6a20042d00ba013a00002003410f6a20113600002003411b6a20042903a001370000200341236a200d2903003700002003412b6a20142d00003a0000200841016a2108201b41386a221b2026470d010c060b0b20030d130c120b2000201136020420004101360200200041086a202e370200200621110c010b200042013702000b2011450d00201141226c450d00200f102e0b4100211b4101210c02402030450d00203041386c450d002024102e0b41012102410121160c010b02402030450d00203041386c450d002024102e0b200128029c012130200141a0016a280200213202400240200141a4016a2802002203450d0020302003413c6c6a2124200441f0016a410272211b200441e0006a41346a210520044190016a212b20044188016a212a200441e0006a41206a2125200441e0006a41186a2128200441e0006a41106a2127200441e0006a41086a2129203021160240024002400240034020162f0138211f201628020021202016410c6a2901002110201641146a29010021182016411c6a2901002123201641246a29010021122016412c6a29010021212016290104212c202b201641346a280100360200202a2021370300202520123703002028202337030020272018370300202920103703002004202c370360200441003b015c20044105360220200420053602c4012004200441206a3602d0012004200441046a3602cc012004200441dc006a3602c8012004200441e0006a3602c001200441f0016a200441c0016a108e060240024020042f01f0014101470d004122102c220f450d17200f201b290100370100200f41206a201b41206a221d2f01003b0100200f41186a201b41186a221a290100370100200f41106a201b41106a221c290100370100200f41086a201b41086a220a290100370100200441d8016a41106a200441c0016a41106a280200360200200441d8016a41086a200441c0016a41086a290300370300200420042903c0013703d801200441f0016a200441d8016a108e06410121114101210e20042f01f0014101470d01410121114122210c4101210e0240034020044198026a41206a2215201d2f01003b010020044198026a41186a2217201a29010037030020044198026a41106a220d201c29010037030020044198026a41086a2214200a2901003703002004201b290100370398020240200e2011470d00201141016a22032011490d192011410174221e2003201e20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7211e0240024020110d00200441003602a0010c010b200441023602a8012004200f3602a0012004201141226c3602a4010b200441386a201e2003200441a0016a107d2004280240210320042802384101460d02200428023c210f200341226e21110b200f200c6a2203200429039802370100200341206a20152f01003b0100200341186a2017290300370100200341106a200d290300370100200341086a2014290300370100200c41226a210c200e41016a210e200441f0016a200441d8016a108e0620042f01f0014101460d000c030b0b20030d170c160b410021114102210f4100210e0b0240200428022022034105460d002004290224211002402011450d00201141226c450d00200f102e0b20002003360204200041013602002000410c6a20104220883e0200200041086a20103e02000c050b20042f015c222241ffff03460d024100210302402004280204220c280208201f4d0d00200441386a41026a200c280200201f4105746a220341026a2d00003a0000200441f0016a41086a200341176a290000370300200441f0016a41106a2003411f6a2d00003a0000200420032f00003b01382004200329000f3703f001200329000721312003280003212d410121030b4102211c200441bc016a41026a200441386a41026a2d00003a0000200441d8016a41086a221d200441f0016a41086a220a290300370300200441d8016a41106a221a200441f0016a41106a221e2d00003a0000200420042f01383b01bc01200420042903f0013703d8014101210d02402003450d00200441206a41026a200441bc016a41026a2d00003a000020044198026a41086a201d29030037030020044198026a41106a201a2d00003a0000200420042f01bc013b0120200420042903d801370398024100210d202d211c2031212e0b200441086a41026a220c200441206a41026a221f2d00003a0000200441c0016a41086a221520044198026a41086a2219290300370300200441c0016a41106a221720044198026a41106a22132d00003a0000200420042f01203b010820042004290398023703c00102400240024002400240200d0d00200441b8016a41026a220b200c2d00003a0000200441a0016a41086a220d2015290300370300200441a0016a41106a221420172d00003a0000200420042f01083b01b801200420042903c0013703a001024002400240200e2011460d0020112106200e21110c010b201141016a22032011490d1b201141017422062003200620034b1b22034104200341044b1bad42227e2210422088a74541017421032010a721060240024020110d00200441003602f0010c010b200441023602f8012004200f3602f0012004201141226c3602f4010b20044198026a20062003200441f0016a107d20042802a00221032004280298024101460d01200428029c02210f200341226e21060b200f201141226c6a2203202e370007200b2d0000211120042f01b801210b2003201c3600032003200b3b0100200341026a20113a0000200320042903a00137000f200341176a200d2903003700002003411f6a20142d00003a000020032022417f733b0120410021030240200228020820204d0d00200441386a41026a2002280200202041386c6a2203410a6a2d00003a0000200a2003411f6a290000370300201e200341276a2d00003a0000200420032f00083b01382004200341176a2900003703f0012003410f6a29000021332003410b6a2800002126410121030b4102211c200441bc016a41026a200441386a41026a2d00003a0000201d200a290300370300201a201e2d00003a0000200420042f01383b01bc01200420042903f0013703d8014101211102402003450d00201f200441bc016a41026a2d00003a00002019201d2903003703002013201a2d00003a0000200420042f01bc013b0120200420042903d80137039802410021112026211c2033212f0b200c201f2d00003a000020152019290300370300201720132d00003a0000200420042f01203b010820042004290398023703c00120110d07200d2015290300370300201420172d00003a0000200420042f01083b01b801200420042903c0013703a0012004200c2d00003a00ba0120082009470d04200841016a22032008490d1a200841017422112003201120034b1b22034104200341044b1bad422c7e2210422088a74541027421032010a7211120080d02200441003602f0010c030b20030d1a0c190b2000201c36020420004101360200200041086a202e3702000c070b200441043602f801200420073602f00120042008412c6c3602f4010b20044198026a20112003200441f0016a107d20042802a00221032004280298024101460d01200428029c0221072003412c6e21090b20072008412c6c6a2203200e41016a360208200320063602042003200f360200200341136a202f370000200320042f01b8013b010c2003410e6a20042d00ba013a00002003410f6a201c3600002003411b6a20042903a001370000200341236a200d2903003700002003412b6a20142d00003a0000200841016a21082016413c6a22162024470d010c060b0b20030d140c130b2000201c36020420004101360200200041086a202f370200200621110c010b200042013702000b2011450d00201141226c450d00200f102e0b410021164101210c02402032450d002032413c6c450d002030102e0b410121020c010b02402032450d002032413c6c450d002030102e0b20012802a8012130200141ac016a28020021320240200141b0016a2802002203450d00203020034106746a2124200441f0016a410272211b200441e0006a41386a210520044190016a212b20044188016a212a200441e0006a41206a2125200441e0006a41186a2128200441e0006a41106a2127200441e0006a41086a2129203021160240024002400240034020162f013c211f201628020021202016410c6a2901002110201641146a29010021182016411c6a2901002123201641246a29010021122016412c6a29010021212016290104212c202b201641346a290100370300202a2021370300202520123703002028202337030020272018370300202920103703002004202c370360200441003b015c20044105360220200420053602c4012004200441206a3602d0012004200441046a3602cc012004200441dc006a3602c8012004200441e0006a3602c001200441f0016a200441c0016a108e060240024020042f01f0014101470d004122102c220f450d17200f201b290100370100200f41206a201b41206a221d2f01003b0100200f41186a201b41186a221a290100370100200f41106a201b41106a221c290100370100200f41086a201b41086a220a290100370100200441d8016a41106a200441c0016a41106a280200360200200441d8016a41086a200441c0016a41086a290300370300200420042903c0013703d801200441f0016a200441d8016a108e06410121114101210e20042f01f0014101470d01410121114122210c4101210e0240034020044198026a41206a2215201d2f01003b010020044198026a41186a2217201a29010037030020044198026a41106a220d201c29010037030020044198026a41086a2214200a2901003703002004201b290100370398020240200e2011470d00201141016a22032011490d192011410174221e2003201e20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7211e0240024020110d00200441003602a0010c010b200441023602a8012004200f3602a0012004201141226c3602a4010b200441386a201e2003200441a0016a107d2004280240210320042802384101460d02200428023c210f200341226e21110b200f200c6a2203200429039802370100200341206a20152f01003b0100200341186a2017290300370100200341106a200d290300370100200341086a2014290300370100200c41226a210c200e41016a210e200441f0016a200441d8016a108e0620042f01f0014101460d000c030b0b20030d170c160b410021114102210f4100210e0b0240200428022022034105460d002004290224211002402011450d00201141226c450d00200f102e0b20002003360204200041013602002000410c6a20104220883e0200200041086a20103e02000c050b20042f015c222241ffff03460d024100210302402004280204220c280208201f4d0d00200441386a41026a200c280200201f4105746a220341026a2d00003a0000200441f0016a41086a200341176a290000370300200441f0016a41106a2003411f6a2d00003a0000200420032f00003b01382004200329000f3703f001200329000721312003280003212d410121030b4102211c200441bc016a41026a200441386a41026a2d00003a0000200441d8016a41086a221d200441f0016a41086a220a290300370300200441d8016a41106a221a200441f0016a41106a221e2d00003a0000200420042f01383b01bc01200420042903f0013703d8014101210d02402003450d00200441206a41026a200441bc016a41026a2d00003a000020044198026a41086a201d29030037030020044198026a41106a201a2d00003a0000200420042f01bc013b0120200420042903d801370398024100210d202d211c2031212e0b200441086a41026a220c200441206a41026a221f2d00003a0000200441c0016a41086a221520044198026a41086a2219290300370300200441c0016a41106a221720044198026a41106a22132d00003a0000200420042f01203b010820042004290398023703c00102400240024002400240200d0d00200441b8016a41026a2206200c2d00003a0000200441a0016a41086a220d2015290300370300200441a0016a41106a221420172d00003a0000200420042f01083b01b801200420042903c0013703a001024002400240200e2011460d002011210b200e21110c010b201141016a22032011490d1b2011410174220b2003200b20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7210b0240024020110d00200441003602f0010c010b200441023602f8012004200f3602f0012004201141226c3602f4010b20044198026a200b2003200441f0016a107d20042802a00221032004280298024101460d01200428029c02210f200341226e210b0b200f201141226c6a2203202e37000720062d0000211120042f01b80121062003201c360003200320063b0100200341026a20113a0000200320042903a00137000f200341176a200d2903003700002003411f6a20142d00003a000020032022417f733b0120410021030240200228020820204d0d00200441386a41026a2002280200202041386c6a2203410a6a2d00003a0000200a2003411f6a290000370300201e200341276a2d00003a0000200420032f00083b01382004200341176a2900003703f0012003410f6a29000021332003410b6a2800002126410121030b41022111200441bc016a41026a200441386a41026a2d00003a0000201d200a290300370300201a201e2d00003a0000200420042f01383b01bc01200420042903f0013703d8014101211c02402003450d00201f200441bc016a41026a2d00003a00002019201d2903003703002013201a2d00003a0000200420042f01bc013b0120200420042903d801370398024100211c202621112033212f0b200c201f2d00003a000020152019290300370300201720132d00003a0000200420042f01203b010820042004290398023703c001201c0d07200d2015290300370300201420172d00003a0000200420042f01083b01b801200420042903c0013703a0012004200c2d00003a00ba0120082009470d04200841016a22032008490d1a2008410174220c2003200c20034b1b22034104200341044b1bad422c7e2210422088a74541027421032010a7210c20080d02200441003602f0010c030b20030d1a0c190b2000201c36020420004101360200200041086a202e3702000c070b200441043602f801200420073602f00120042008412c6c3602f4010b20044198026a200c2003200441f0016a107d20042802a00221032004280298024101460d01200428029c0221072003412c6e21090b20072008412c6c6a2203200e41016a3602082003200b3602042003200f360200200341136a202f370000200320042f01b8013b010c2003410e6a20042d00ba013a00002003410f6a20113600002003411b6a20042903a001370000200341236a200d2903003700002003412b6a20142d00003a0000200841016a2108201641c0006a22162024470d010c060b0b20030d140c130b2000201136020420004101360200200041086a202f370200200b21110c010b200042013702000b2011450d00201141226c450d00200f102e0b410021024101210c0240203241ffffff1f710d00410021160c020b2030102e410021160c010b0240203241ffffff1f71450d002030102e0b20012802b4012132200141b8016a2802002134200141bc016a2802002203450d0c2032200341c4006c6a2130200441f0016a410272211b200441e0006a413c6a2105200441e0006a41386a212b20044190016a212a20044188016a2125200441e0006a41206a2128200441e0006a41186a2127200441e0006a41106a2129200441e0006a41086a212d203221160240024002400240034020162f0140211f201628020021202016410c6a2901002110201641146a29010021182016411c6a2901002123201641246a29010021122016412c6a2901002121201641346a290100212c2016290104212e202b2016413c6a280100360200202a202c37030020252021370300202820123703002027202337030020292018370300202d20103703002004202e370360200441003b015c20044105360220200420053602c4012004200441206a3602d0012004200441046a3602cc012004200441dc006a3602c8012004200441e0006a3602c001200441f0016a200441c0016a108e060240024020042f01f0014101470d004122102c220f450d16200f201b290100370100200f41206a201b41206a221d2f01003b0100200f41186a201b41186a221a290100370100200f41106a201b41106a221c290100370100200f41086a201b41086a220a290100370100200441d8016a41106a200441c0016a41106a280200360200200441d8016a41086a200441c0016a41086a290300370300200420042903c0013703d801200441f0016a200441d8016a108e06410121114101210e20042f01f0014101470d01410121114122210c4101210e0240034020044198026a41206a2215201d2f01003b010020044198026a41186a2217201a29010037030020044198026a41106a220d201c29010037030020044198026a41086a2214200a2901003703002004201b290100370398020240200e2011470d00201141016a22032011490d182011410174221e2003201e20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7211e0240024020110d00200441003602a0010c010b200441023602a8012004200f3602a0012004201141226c3602a4010b200441386a201e2003200441a0016a107d2004280240210320042802384101460d02200428023c210f200341226e21110b200f200c6a2203200429039802370100200341206a20152f01003b0100200341186a2017290300370100200341106a200d290300370100200341086a2014290300370100200c41226a210c200e41016a210e200441f0016a200441d8016a108e0620042f01f0014101460d000c030b0b20030d160c150b410021114102210f4100210e0b0240200428022022034105460d002004290224211002402011450d00201141226c450d00200f102e0b20002003360204200041013602002000410c6a20104220883e0200200041086a20103e02000c050b20042f015c222241ffff03460d024100210302402004280204220c280208201f4d0d00200441386a41026a200c280200201f4105746a220341026a2d00003a0000200441f0016a41086a200341176a290000370300200441f0016a41106a2003411f6a2d00003a0000200420032f00003b01382004200329000f3703f0012003290007213320032800032126410121030b4102211c200441bc016a41026a200441386a41026a2d00003a0000200441d8016a41086a221d200441f0016a41086a220a290300370300200441d8016a41106a221a200441f0016a41106a221e2d00003a0000200420042f01383b01bc01200420042903f0013703d8014101210d02402003450d00200441206a41026a200441bc016a41026a2d00003a000020044198026a41086a201d29030037030020044198026a41106a201a2d00003a0000200420042f01bc013b0120200420042903d801370398024100210d2026211c2033212f0b200441086a41026a220c200441206a41026a221f2d00003a0000200441c0016a41086a221520044198026a41086a2219290300370300200441c0016a41106a221720044198026a41106a22132d00003a0000200420042f01203b010820042004290398023703c00102400240024002400240200d0d00200441b8016a41026a220b200c2d00003a0000200441a0016a41086a220d2015290300370300200441a0016a41106a221420172d00003a0000200420042f01083b01b801200420042903c0013703a001024002400240200e2011460d0020112106200e21110c010b201141016a22032011490d1a201141017422062003200620034b1b22034104200341044b1bad42227e2210422088a74541017421032010a721060240024020110d00200441003602f0010c010b200441023602f8012004200f3602f0012004201141226c3602f4010b20044198026a20062003200441f0016a107d20042802a00221032004280298024101460d01200428029c02210f200341226e21060b200f201141226c6a2203202f370007200b2d0000211120042f01b801210b2003201c3600032003200b3b0100200341026a20113a0000200320042903a00137000f200341176a200d2903003700002003411f6a20142d00003a000020032022417f733b0120410021030240200228020820204d0d00200441386a41026a2002280200202041386c6a2203410a6a2d00003a0000200a2003411f6a290000370300201e200341276a2d00003a0000200420032f00083b01382004200341176a2900003703f0012003410f6a29000021352003410b6a2800002124410121030b41022111200441bc016a41026a200441386a41026a2d00003a0000201d200a290300370300201a201e2d00003a0000200420042f01383b01bc01200420042903f0013703d8014101211c02402003450d00201f200441bc016a41026a2d00003a00002019201d2903003703002013201a2d00003a0000200420042f01bc013b0120200420042903d801370398024100211c20242111203521310b200c201f2d00003a000020152019290300370300201720132d00003a0000200420042f01203b010820042004290398023703c001201c0d07200d2015290300370300201420172d00003a0000200420042f01083b01b801200420042903c0013703a0012004200c2d00003a00ba0120082009470d04200841016a22032008490d192008410174220c2003200c20034b1b22034104200341044b1bad422c7e2210422088a74541027421032010a7210c20080d02200441003602f0010c030b20030d190c180b2000201c36020420004101360200200041086a202f3702000c070b200441043602f801200420073602f00120042008412c6c3602f4010b20044198026a200c2003200441f0016a107d20042802a00221032004280298024101460d01200428029c0221072003412c6e21090b20072008412c6c6a2203200e41016a360208200320063602042003200f360200200341136a2031370000200320042f01b8013b010c2003410e6a20042d00ba013a00002003410f6a20113600002003411b6a20042903a001370000200341236a200d2903003700002003412b6a20142d00003a0000200841016a2108201641c4006a22162030470d010c120b0b20030d130c120b2000201136020420004101360200200041086a2031370200200621110c010b200042013702000b2011450d00201141226c450d00200f102e0b4100210c02402034450d00203441c4006c450d002032102e41002102410021160c010b41002102410021160b4100211b0b4100211d0b4100211a0b4100210f0b410021150b4100211c0b4100210a0b410021170b4100210d0b410021140b4100210e4100211e0b02402008450d002008412c6c21112007210303400240200341046a2802002208450d00200841226c450d002003280200102e0b2003412c6a2103201141546a22110d000b0b02402009450d002009412c6c450d002007102e0b0240201e450d00200141106a2802002203450d002003410c6c450d00200128020c102e0b0240200e450d002001411c6a28020041ffffffff0071450d002001280218102e0b02402014450d00200141286a2802002203450d00200341146c450d002001280224102e0b0240200d450d00200141346a2802002203450d00200341186c450d002001280230102e0b02402017450d00200141c0006a2802002203450d002003411c6c450d00200128023c102e0b0240200a450d00200141cc006a28020041ffffff3f71450d002001280248102e0b0240201c450d00200141d8006a2802002203450d00200341246c450d002001280254102e0b02402015450d00200141e4006a2802002203450d00200341286c450d002001280260102e0b0240200f450d00200141f0006a2802002203450d002003412c6c450d00200128026c102e0b0240201a450d00200141fc006a2802002203450d00200341306c450d002001280278102e0b0240201d450d0020014188016a2802002203450d00200341346c450d00200128028401102e0b0240201b450d0020014194016a2802002203450d00200341386c450d00200128029001102e0b02402016450d00200141a0016a2802002203450d002003413c6c450d00200128029c01102e0b02402002450d00200141ac016a28020041ffffff1f71450d0020012802a801102e0b200c450d01200141b8016a2802002203450d01200341c4006c450d0120012802b401102e0c010b02402034450d00203441c4006c450d002032102e0b20002007360204200041003602002000410c6a2008360200200041086a20093602000b200441c0026a24000f0b1038000b1036000be90504077f017e017f027e23004180016b210202400240200128020022032001280204460d00200128021021042001200341046a3602004102210520032f010021062001280208220720072f0100200341026a2f010022076a220341ffff03200341ffff03491b3b0100024002402001410c6a280200280200220128020820064b0d00200241e8006a41106a200241d0006a41106a2d00003a0000200241e8006a41086a200241d0006a41086a29000037030020022002290050370368410121010c010b200241d0006a41086a200128020020064105746a220141176a2203290000370300200241d0006a41106a2001411f6a22082d00003a00002002200129000f370350200129000721092001280003210520012d0002210620012f0000210a200241e8006a41106a20082d000022083a0000200241e8006a41086a2003290000220b3703002002200129000f220c370368200241386a41106a20083a0000200241386a41086a200b3703002002200c370338410021010b200241206a41086a2203200241386a41086a290300370300200241206a41106a2208200241386a41106a2d00003a000020022002290338370320024002402001450d00200220053602682002200937026c200228006921012004410b6a20094238883c0000200441096a20094228883d0000200420094208883e000520042001360001200420053a0000410021030c010b200241e8006a41106a20082d00003a0000200241e8006a41086a200329030037030020022002290320370368410121030b200241d0006a41086a2204200241e8006a41086a290300370300200241d0006a41106a2208200241e8006a41106a2d00003a000020022002290368370350410021012003450d012000200a3b010220002002290350370011200041096a2009370000200041056a2005360000200041046a20063a0000200041226a20073b0100200041196a2004290300370000200041216a20082d00003a0000200041013b01000f0b410021010b200020013b01000bc10201037f230041106b2202240002404120102c2203450d0020024220370204200220033602002002200041106a412010742001200228020022032002280208107402402002280204450d002003102e0b200020011091024120102c2203450d0020024220370204200220033602002002200041306a412010742001200228020022032002280208107402402002280204450d002003102e0b4120102c2203450d0020024220370204200220033602002002200041d0006a412010742001200228020022032002280208107402402002280204450d002003102e0b200028020421032000410c6a2802002200200110760240200041246c2200450d0003402002200310ef042001200228020022042002280208107402402002280204450d002004102e0b200341246a21032000415c6a22000d000b0b200241106a24000f0b1036000bae0401047f230041106b22022400200220002903003703002001200241081074200041106a210302400240024020002903084201510d00200241003a000020012002410110742002200029031037030020012002410810742001200041e0016a412010744120102c2204450d02200242203702042002200436020020022003410c6a412010742001200228020022042002280208107402402002280204450d002004102e0b2002200041186a280200360200200120024104107420012003412c6a41c00010744120102c2204450d02200041a0016a21052002422037020420022004360200200220004180016a412010742001200228020022002002280208107402402002280204450d002000102e0b2002200328026c36020020012002410410742001200541c00010740c010b200241013a000020012002410110742002200029031037030020012002410810742001200041e0016a412010744120102c2204450d01200242203702042002200436020020022003410c6a412010742001200228020022042002280208107402402002280204450d002004102e0b2002200041186a280200360200200120024104107420012003412c6a41c00010744120102c2204450d01200041a0016a21052002422037020420022004360200200220004180016a412010742001200228020022002002280208107402402002280204450d002000102e0b2002200328026c36020020012002410410742001200541c00010740b200241106a24000f0b1036000b84660b087f017e107f037e047f017e047f017e047f017e027f230041206b22022400200041003602082000420137020002402001280208220341ffffffff01712003470d0020034103742204417f4c0d002001280200210502400240024020040d00410421060c010b2004102c2206450d010b0240024002402004410376220720034f0d00200441027622082003200820034b1b22084104200841044b1b220841ffffffff01712008464102742109200841037421080240024020040d00200241003602100c010b200241186a410436020020022004360214200220063602100b200220082009200241106a107d200241086a2802002108024020022802004101460d0020022802042106200841037621070c020b20080d030c040b20030d00410021050c010b200520046a2108200341037441786a410376210920062103034020052802002104200341046a200541046a2f01003b010020032004360200200341086a2103200541086a22052008470d000b200941016a21050b20052000107602402005450d00200620054103746a210420062105034002400240024002402005280200220341c000490d00200341808001490d012003418080808004490d02200241033a00102000200241106a41011074200220033602102000200241106a410410740c030b200220034102743a00102000200241106a410110740c020b200220034102744101723b01102000200241106a410210740c010b200220034102744102723602102000200241106a410410740b024002400240200541046a2f0100220341c000490d00200341808001490d01200220034102744102723602102000200241106a410410740c020b200220034102743a00102000200241106a410110740c010b200220034102744101723b01102000200241106a410210740b200541086a22052004470d000b0b200141146a2802002203ad420c7e220a422088a70d01200aa72204417f4c0d01200128020c21050240024020040d004104210b0c010b2004102c220b450d010b0240024002402004410c6e220c20034f0d00200c41017422082003200820034b1b22084104200841044b1bad420c7e220a422088a7454102742108200aa72109024002402004410b4b0d00200241003602100c010b200241186a41043602002002200b3602102002200c410c6c3602140b200220092008200241106a107d200241086a2802002104024020022802004101460d002002280204210b2004410c6e210c0c020b2004450d040c030b20030d00410021050c010b20052003410c6c6a21042003410c6c41746a410c6e2108200b2103034020032005290200370200200341086a200541086a2f01003b01002003410c6a21032005410c6a22052004470d000b200841016a21050b20052000107602402005450d002005410c6c2104200b21050340200541046a210802400240024002402005280200220341c000490d00200341808001490d012003418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220034102743a00102000200241106a410110740c020b200220034102744101723b01102000200241106a410210740c010b200220034102744102723602102000200241106a410410740b2008200010fd04024002400240200541086a2f0100220341c000490d00200341808001490d01200220034102744102723602102000200241106a410410740c020b200220034102743a00102000200241106a410110740c010b200220034102744101723b01102000200241106a410210740b2005410c6a2105200441746a22040d000b0b200141206a280200220341ffffffff00712003470d0120034104742204417f4c0d01200128021821054104210d02402004450d002004102c220d450d010b0240024002402004410476220e20034f0d00200441037622082003200820034b1b22084104200841044b1b220841ffffffff00712008464102742109200841047421080240024020040d00200241003602100c010b200241186a4104360200200220043602142002200d3602100b200220082009200241106a107d200241086a2802002108024020022802004101460d002002280204210d2008410476210e0c020b2008450d040c030b20030d00410021050c010b200520046a2104200341047441706a4104762108200d21030340200320052802003602002003410c6a2005410c6a2f01003b0100200341046a200541046a290200370200200341106a2103200541106a22052004470d000b200841016a21050b20052000107602402005450d0020054104742104200d2105034002400240024002402005280200220341c000490d00200341808001490d012003418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220034102743a00102000200241106a410110740c020b200220034102744101723b01102000200241106a410210740c010b200220034102744102723602102000200241106a410410740b200541046a200010fd04200541086a200010fd040240024002402005410c6a2f0100220341c000490d00200341808001490d01200220034102744102723602102000200241106a410410740c020b200220034102743a00102000200241106a410110740c010b200220034102744101723b01102000200241106a410210740b200541106a2105200441706a22040d000b0b2001412c6a2802002203ad42147e220a422088a70d01200aa72204417f4c0d01200128022421050240024020040d004104210f0c010b2004102c220f450d010b024002400240200441146e221020034f0d00201041017422082003200820034b1b22084104200841044b1bad42147e220a422088a7454102742108200aa7210902400240200441134b0d00200241003602100c010b200241186a41043602002002200f3602102002201041146c3602140b200220092008200241106a107d200241086a2802002104024020022802004101460d002002280204210f200441146e21100c020b2004450d040c030b20030d00410021050c010b2005200341146c6a2104200341146c416c6a41146e2108200f2103034020032005280200360200200341106a200541106a2f01003b01002003410c6a2005410c6a280200360200200341046a200541046a290200370200200341146a2103200541146a22052004470d000b200841016a21050b20052000107602402005450d00200541146c2104200f2105034002400240024002402005280200220341c000490d00200341808001490d012003418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220034102743a00102000200241106a410110740c020b200220034102744101723b01102000200241106a410210740c010b200220034102744102723602102000200241106a410410740b200541046a200010fd04200541086a200010fd042005410c6a200010fd04024002400240200541106a2f0100220341c000490d00200341808001490d01200220034102744102723602102000200241106a410410740c020b200220034102743a00102000200241106a410110740c010b200220034102744101723b01102000200241106a410210740b200541146a21052004416c6a22040d000b0b200141386a2802002203ad42187e220a422088a70d01200aa72204417f4c0d01200128023021050240024020040d00410421110c010b2004102c2211450d010b024002400240200441186e221220034f0d00201241017422082003200820034b1b22084104200841044b1bad42187e220a422088a7454102742108200aa7210902400240200441174b0d00200241003602100c010b200241186a4104360200200220113602102002201241186c3602140b200220092008200241106a107d200241086a2802002104024020022802004101460d0020022802042111200441186e21120c020b2004450d040c030b20030d00410021050c010b2005200341186c6a2104200341186c41686a41186e210820112103034020032005280200360200200341146a200541146a2f01003b01002003410c6a2005410c6a290200370200200341046a200541046a290200370200200341186a2103200541186a22052004470d000b200841016a21050b20052000107602402005450d00200541186c21084100210303400240024002400240201120036a2205280200220441c000490d00200441808001490d012004418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220044102743a00102000200241106a410110740c020b200220044102744101723b01102000200241106a410210740c010b200220044102744102723602102000200241106a410410740b200541046a200010fd04200541086a200010fd042005410c6a200010fd04200541106a200010fd04024002400240200541146a2f0100220541c000490d00200541808001490d01200220054102744102723602102000200241106a410410740c020b200220054102743a00102000200241106a410110740c010b200220054102744101723b01102000200241106a410210740b2008200341186a2203470d000b0b200141c4006a2802002203ad421c7e220a422088a70d01200aa72204417f4c0d01200128023c21050240024020040d00410421130c010b2004102c2213450d010b0240024002402004411c6e221420034f0d00201441017422082003200820034b1b22084104200841044b1bad421c7e220a422088a7454102742108200aa72109024002402004411b4b0d00200241003602100c010b200241186a41043602002002201336021020022014411c6c3602140b200220092008200241106a107d200241086a2802002104024020022802004101460d00200228020421132004411c6e21140c020b2004450d040c030b20030d00410021050c010b20052003411c6c6a21042003411c6c41646a411c6e210820132103034020032005280200360200200341186a200541186a2f01003b0100200341146a200541146a2802003602002003410c6a2005410c6a290200370200200341046a200541046a2902003702002003411c6a21032005411c6a22052004470d000b200841016a21050b20052000107602402005450d002005411c6c21084100210303400240024002400240201320036a2205280200220441c000490d00200441808001490d012004418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220044102743a00102000200241106a410110740c020b200220044102744101723b01102000200241106a410210740c010b200220044102744102723602102000200241106a410410740b200541046a200010fd04200541086a200010fd042005410c6a200010fd04200541106a200010fd04200541146a200010fd04024002400240200541186a2f0100220541c000490d00200541808001490d01200220054102744102723602102000200241106a410410740c020b200220054102743a00102000200241106a410110740c010b200220054102744101723b01102000200241106a410210740b20082003411c6a2203470d000b0b200141d0006a280200220341ffffff3f712003470d0120034105742204417f4c0d01200128024821050240024020040d00410421150c010b2004102c2215450d010b0240024002402004410576221620034f0d00200441047622082003200820034b1b22084104200841044b1b220841ffffff3f712008464102742109200841057421080240024020040d00200241003602100c010b200241186a410436020020022004360214200220153602100b200220082009200241106a107d200241086a2802002108024020022802004101460d0020022802042115200841057621160c020b2008450d040c030b20030d00410021050c010b200520046a2104200341057441606a4105762108201521030340200320052802003602002003411c6a2005411c6a2f01003b0100200341146a200541146a2902003702002003410c6a2005410c6a290200370200200341046a200541046a290200370200200341206a2103200541206a22052004470d000b200841016a21050b20052000107602402005450d00200541057421084100210303400240024002400240201520036a2205280200220441c000490d00200441808001490d012004418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220044102743a00102000200241106a410110740c020b200220044102744101723b01102000200241106a410210740c010b200220044102744102723602102000200241106a410410740b200541046a200010fd04200541086a200010fd042005410c6a200010fd04200541106a200010fd04200541146a200010fd04200541186a200010fd040240024002402005411c6a2f0100220541c000490d00200541808001490d01200220054102744102723602102000200241106a410410740c020b200220054102743a00102000200241106a410110740c010b200220054102744101723b01102000200241106a410210740b2008200341206a2203470d000b0b200141dc006a2802002203ad42247e220a422088a70d01200aa72204417f4c0d01200128025421050240024020040d00410421170c010b2004102c2217450d010b024002400240200441246e221820034f0d00201841017422082003200820034b1b22084104200841044b1bad42247e220a422088a7454102742108200aa7210902400240200441234b0d00200241003602100c010b200241186a4104360200200220173602102002201841246c3602140b200220092008200241106a107d200241086a2802002104024020022802004101460d0020022802042117200441246e21180c020b2004450d040c030b20030d00410021050c010b2005200341246c6a2104200341246c415c6a41246e210820172103034020032005280200360200200341206a200541206a2f01003b01002003411c6a2005411c6a280200360200200341146a200541146a2902003702002003410c6a2005410c6a290200370200200341046a200541046a290200370200200341246a2103200541246a22052004470d000b200841016a21050b20052000107602402005450d00200541246c21084100210303400240024002400240201720036a2205280200220441c000490d00200441808001490d012004418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220044102743a00102000200241106a410110740c020b200220044102744101723b01102000200241106a410210740c010b200220044102744102723602102000200241106a410410740b200541046a200010fd04200541086a200010fd042005410c6a200010fd04200541106a200010fd04200541146a200010fd04200541186a200010fd042005411c6a200010fd04024002400240200541206a2f0100220541c000490d00200541808001490d01200220054102744102723602102000200241106a410410740c020b200220054102743a00102000200241106a410110740c010b200220054102744101723b01102000200241106a410210740b2008200341246a2203470d000b0b200141e8006a2802002203ad42287e220a422088a70d01200aa72204417f4c0d01200128026021050240024020040d00410421190c010b2004102c2219450d010b024002400240200441286e221a20034f0d00201a41017422082003200820034b1b22084104200841044b1bad42287e220a422088a7454102742108200aa7210902400240200441274b0d00200241003602100c010b200241186a4104360200200220193602102002201a41286c3602140b200220092008200241106a107d200241086a2802002104024020022802004101460d0020022802042119200441286e211a0c020b2004450d040c030b20030d00410021050c010b2005200341286c6a2104200341286c41586a41286e2108201921030340200541046a290200210a2005410c6a290200211b200541146a290200211c2005411c6a290200211d20032005280200360200200341246a200541246a2f01003b01002003411c6a201d370200200341146a201c3702002003410c6a201b370200200341046a200a370200200341286a2103200541286a22052004470d000b200841016a21050b20052000107602402005450d00200541286c21084100210303400240024002400240201920036a2205280200220441c000490d00200441808001490d012004418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220044102743a00102000200241106a410110740c020b200220044102744101723b01102000200241106a410210740c010b200220044102744102723602102000200241106a410410740b200541046a200010fd04200541086a200010fd042005410c6a200010fd04200541106a200010fd04200541146a200010fd04200541186a200010fd042005411c6a200010fd04200541206a200010fd04024002400240200541246a2f0100220541c000490d00200541808001490d01200220054102744102723602102000200241106a410410740c020b200220054102743a00102000200241106a410110740c010b200220054102744101723b01102000200241106a410210740b2008200341286a2203470d000b0b200141f4006a2802002203ad422c7e220a422088a70d01200aa72204417f4c0d01200128026c21050240024020040d004104211e0c010b2004102c221e450d010b0240024002402004412c6e221f20034f0d00201f41017422082003200820034b1b22084104200841044b1bad422c7e220a422088a7454102742108200aa72109024002402004412b4b0d00200241003602100c010b200241186a41043602002002201e3602102002201f412c6c3602140b200220092008200241106a107d200241086a2802002104024020022802004101460d002002280204211e2004412c6e211f0c020b2004450d040c030b20030d00410021050c010b20052003412c6c6a21082003412c6c41546a412c6e2109201e21030340200541046a290200210a2005410c6a290200211b200541146a290200211c2005411c6a290200211d200541246a280200210420032005280200360200200341286a200541286a2f01003b0100200341246a20043602002003411c6a201d370200200341146a201c3702002003410c6a201b370200200341046a200a3702002003412c6a21032005412c6a22052008470d000b200941016a21050b20052000107602402005450d002005412c6c21084100210303400240024002400240201e20036a2205280200220441c000490d00200441808001490d012004418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220044102743a00102000200241106a410110740c020b200220044102744101723b01102000200241106a410210740c010b200220044102744102723602102000200241106a410410740b200541046a200010fd04200541086a200010fd042005410c6a200010fd04200541106a200010fd04200541146a200010fd04200541186a200010fd042005411c6a200010fd04200541206a200010fd04200541246a200010fd04024002400240200541286a2f0100220541c000490d00200541808001490d01200220054102744102723602102000200241106a410410740c020b200220054102743a00102000200241106a410110740c010b200220054102744101723b01102000200241106a410210740b20082003412c6a2203470d000b0b20014180016a2802002203ad42307e220a422088a70d01200aa72204417f4c0d01200128027821050240024020040d00410421200c010b2004102c2220450d010b024002400240200441306e222120034f0d00202141017422082003200820034b1b22084104200841044b1bad42307e220a422088a7454102742108200aa72109024002402004412f4b0d00200241003602100c010b200241186a4104360200200220203602102002202141306c3602140b200220092008200241106a107d200241086a2802002104024020022802004101460d0020022802042120200441306e21210c020b2004450d040c030b20030d00410021050c010b2005200341306c6a2108200341306c41506a41306e2109202021030340200541046a290200210a2005410c6a290200211b200541146a290200211c2005411c6a290200211d200541246a2902002122200528020021042003412c6a2005412c6a2f01003b0100200341246a20223702002003411c6a201d370200200341146a201c3702002003410c6a201b370200200341046a200a37020020032004360200200341306a2103200541306a22052008470d000b200941016a21050b20052000107602402005450d00200541306c21084100210303400240024002400240202020036a2205280200220441c000490d00200441808001490d012004418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220044102743a00102000200241106a410110740c020b200220044102744101723b01102000200241106a410210740c010b200220044102744102723602102000200241106a410410740b200541046a200010fd04200541086a200010fd042005410c6a200010fd04200541106a200010fd04200541146a200010fd04200541186a200010fd042005411c6a200010fd04200541206a200010fd04200541246a200010fd04200541286a200010fd040240024002402005412c6a2f0100220541c000490d00200541808001490d01200220054102744102723602102000200241106a410410740c020b200220054102743a00102000200241106a410110740c010b200220054102744101723b01102000200241106a410210740b2008200341306a2203470d000b0b2001418c016a2802002203ad42347e220a422088a70d01200aa72204417f4c0d0120012802840121050240024020040d00410421230c010b2004102c2223450d010b024002400240200441346e222420034f0d00202441017422082003200820034b1b22084104200841044b1bad42347e220a422088a7454102742108200aa7210902400240200441334b0d00200241003602100c010b200241186a4104360200200220233602102002202441346c3602140b200220092008200241106a107d200241086a2802002104024020022802004101460d0020022802042123200441346e21240c020b2004450d040c030b20030d00410021050c010b2005200341346c6a2109200341346c414c6a41346e2125202321030340200541046a290200210a2005410c6a290200211b200541146a290200211c2005411c6a290200211d200541246a29020021222005412c6a280200210420052802002108200341306a200541306a2f01003b01002003412c6a2004360200200341246a20223702002003411c6a201d370200200341146a201c3702002003410c6a201b370200200341046a200a37020020032008360200200341346a2103200541346a22052009470d000b202541016a21050b20052000107602402005450d00200541346c21084100210303400240024002400240202320036a2205280200220441c000490d00200441808001490d012004418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220044102743a00102000200241106a410110740c020b200220044102744101723b01102000200241106a410210740c010b200220044102744102723602102000200241106a410410740b200541046a200010fd04200541086a200010fd042005410c6a200010fd04200541106a200010fd04200541146a200010fd04200541186a200010fd042005411c6a200010fd04200541206a200010fd04200541246a200010fd04200541286a200010fd042005412c6a200010fd04024002400240200541306a2f0100220541c000490d00200541808001490d01200220054102744102723602102000200241106a410410740c020b200220054102743a00102000200241106a410110740c010b200220054102744101723b01102000200241106a410210740b2008200341346a2203470d000b0b20014198016a2802002203ad42387e220a422088a70d01200aa72204417f4c0d0120012802900121050240024020040d00410421250c010b2004102c2225450d010b024002400240200441386e222620034f0d00202641017422082003200820034b1b22084104200841044b1bad42387e220a422088a7454102742108200aa7210902400240200441374b0d00200241003602100c010b200241186a4104360200200220253602102002202641386c3602140b200220092008200241106a107d200241086a2802002104024020022802004101460d0020022802042125200441386e21260c020b2004450d040c030b20030d00410021050c010b2005200341386c6a2108200341386c41486a41386e2109202521030340200541046a290200210a2005410c6a290200211b200541146a290200211c2005411c6a290200211d200541246a29020021222005412c6a290200212720052802002104200341346a200541346a2f01003b01002003412c6a2027370200200341246a20223702002003411c6a201d370200200341146a201c3702002003410c6a201b370200200341046a200a37020020032004360200200341386a2103200541386a22052008470d000b200941016a21050b20052000107602402005450d00200541386c21084100210303400240024002400240202520036a2205280200220441c000490d00200441808001490d012004418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220044102743a00102000200241106a410110740c020b200220044102744101723b01102000200241106a410210740c010b200220044102744102723602102000200241106a410410740b200541046a200010fd04200541086a200010fd042005410c6a200010fd04200541106a200010fd04200541146a200010fd04200541186a200010fd042005411c6a200010fd04200541206a200010fd04200541246a200010fd04200541286a200010fd042005412c6a200010fd04200541306a200010fd04024002400240200541346a2f0100220541c000490d00200541808001490d01200220054102744102723602102000200241106a410410740c020b200220054102743a00102000200241106a410110740c010b200220054102744101723b01102000200241106a410210740b2008200341386a2203470d000b0b200141a4016a2802002203ad423c7e220a422088a70d01200aa72204417f4c0d01200128029c0121050240024020040d00410421280c010b2004102c2228450d010b0240024002402004413c6e222920034f0d00202941017422082003200820034b1b22084104200841044b1bad423c7e220a422088a7454102742108200aa72109024002402004413b4b0d00200241003602100c010b200241186a41043602002002202836021020022029413c6c3602140b200220092008200241106a107d200241086a2802002104024020022802004101460d00200228020421282004413c6e21290c020b2004450d040c030b20030d00410021050c010b20052003413c6c6a21092003413c6c41446a413c6e212a202821030340200541046a290200210a2005410c6a290200211b200541146a290200211c2005411c6a290200211d200541246a29020021222005412c6a2902002127200541346a280200210420052802002108200341386a200541386a2f01003b0100200341346a20043602002003412c6a2027370200200341246a20223702002003411c6a201d370200200341146a201c3702002003410c6a201b370200200341046a200a370200200320083602002003413c6a21032005413c6a22052009470d000b202a41016a21050b20052000107602402005450d002005413c6c21084100210303400240024002400240202820036a2205280200220441c000490d00200441808001490d012004418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220044102743a00102000200241106a410110740c020b200220044102744101723b01102000200241106a410210740c010b200220044102744102723602102000200241106a410410740b200541046a200010fd04200541086a200010fd042005410c6a200010fd04200541106a200010fd04200541146a200010fd04200541186a200010fd042005411c6a200010fd04200541206a200010fd04200541246a200010fd04200541286a200010fd042005412c6a200010fd04200541306a200010fd04200541346a200010fd04024002400240200541386a2f0100220541c000490d00200541808001490d01200220054102744102723602102000200241106a410410740c020b200220054102743a00102000200241106a410110740c010b200220054102744101723b01102000200241106a410210740b20082003413c6a2203470d000b0b200141b0016a280200220341ffffff1f712003470d0120034106742204417f4c0d0120012802a80121050240024020040d00410421090c010b2004102c2209450d010b0240024002402004410676222b20034f0d00200441057622082003200820034b1b22084104200841044b1b220841ffffff1f71200846410274212a200841067421080240024020040d00200241003602100c010b200241186a410436020020022004360214200220093602100b20022008202a200241106a107d200241086a2802002108024020022802004101460d00200228020421092008410676212b0c020b2008450d040c030b20030d00410021050c010b200520046a2108200341067441406a410676212a200921030340200541046a290200210a2005410c6a290200211b200541146a290200211c2005411c6a290200211d200541246a29020021222005412c6a2902002127200541346a290200212c200528020021042003413c6a2005413c6a2f01003b0100200341346a202c3702002003412c6a2027370200200341246a20223702002003411c6a201d370200200341146a201c3702002003410c6a201b370200200341046a200a37020020032004360200200341c0006a2103200541c0006a22052008470d000b202a41016a21050b20052000107602402005450d00200541067421084100210303400240024002400240200920036a2205280200220441c000490d00200441808001490d012004418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220044102743a00102000200241106a410110740c020b200220044102744101723b01102000200241106a410210740c010b200220044102744102723602102000200241106a410410740b200541046a200010fd04200541086a200010fd042005410c6a200010fd04200541106a200010fd04200541146a200010fd04200541186a200010fd042005411c6a200010fd04200541206a200010fd04200541246a200010fd04200541286a200010fd042005412c6a200010fd04200541306a200010fd04200541346a200010fd04200541386a200010fd040240024002402005413c6a2f0100220541c000490d00200541808001490d01200220054102744102723602102000200241106a410410740c020b200220054102743a00102000200241106a410110740c010b200220054102744101723b01102000200241106a410210740b2008200341c0006a2203470d000b0b200141bc016a2802002203ad42c4007e220a422088a70d01200aa72204417f4c0d0120012802b40121050240024020040d004104212a0c010b2004102c222a450d010b024002400240200441c4006e222d20034f0d00202d41017422082003200820034b1b22084104200841044b1bad42c4007e220a422088a7454102742108200aa7210102400240200441c3004b0d00200241003602100c010b200241186a41043602002002202a3602102002202d41c4006c3602140b200220012008200241106a107d200241086a2802002104024020022802004101460d002002280204212a200441c4006e212d0c020b2004450d040c030b20030d00410021050c010b2005200341c4006c6a2101200341c4006c41bc7f6a41c4006e212e202a21030340200541046a290200210a2005410c6a290200211b200541146a290200211c2005411c6a290200211d200541246a29020021222005412c6a2902002127200541346a290200212c2005413c6a280200210420052802002108200341c0006a200541c0006a2f01003b01002003413c6a2004360200200341346a202c3702002003412c6a2027370200200341246a20223702002003411c6a201d370200200341146a201c3702002003410c6a201b370200200341046a200a37020020032008360200200341c4006a2103200541c4006a22052001470d000b202e41016a21050b20052000107602402005450d00200541c4006c21084100210303400240024002400240202a20036a2205280200220441c000490d00200441808001490d012004418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220044102743a00102000200241106a410110740c020b200220044102744101723b01102000200241106a410210740c010b200220044102744102723602102000200241106a410410740b200541046a200010fd04200541086a200010fd042005410c6a200010fd04200541106a200010fd04200541146a200010fd04200541186a200010fd042005411c6a200010fd04200541206a200010fd04200541246a200010fd04200541286a200010fd042005412c6a200010fd04200541306a200010fd04200541346a200010fd04200541386a200010fd042005413c6a200010fd04024002400240200541c0006a2f0100220541c000490d00200541808001490d01200220054102744102723602102000200241106a410410740c020b200220054102743a00102000200241106a410110740c010b200220054102744101723b01102000200241106a410210740b2008200341c4006a2203470d000b0b0240202d450d00202d41c4006c450d00202a102e0b0240202b450d002009102e0b02402029450d002029413c6c450d002028102e0b02402026450d00202641386c450d002025102e0b02402024450d00202441346c450d002023102e0b02402021450d00202141306c450d002020102e0b0240201f450d00201f412c6c450d00201e102e0b0240201a450d00201a41286c450d002019102e0b02402018450d00201841246c450d002017102e0b02402016450d002015102e0b02402014450d002014411c6c450d002013102e0b02402012450d00201241186c450d002011102e0b02402010450d00201041146c450d00200f102e0b0240200e450d00200d102e0b0240200c450d00200c410c6c450d00200b102e0b02402007450d002006102e0b200241206a24000f0b1036000b1038000b040041010b040041010b040041010bf5be010f057f017e017f017e077f017e147f017e027f017e047f017e077f017e0e7f230041c0196b22022400200241f8116a200110ad0102400240024002400240024020022802f8110d0020022802fc11220320012802002802044103762204200420034b1b22044103742205417f4c0d050240024020040d00410421050c010b2005102c2205450d050b2001200128020441016a22063602042004ad21070240200620012802084b0d00024002402003450d000340200241f0116a200110ad0120022802f0110d0320022802f4112106200241e8116a200110fb0420022f01e8110d0320022f01ea112108024020074220882209a722042007a7470d00200441016a220a2004490d0a2004410174220b200a200a200b491b220a4104200a41044b1b220a41ffffffff0171200a46410274210b200a410374210a0240024020040d0020024100360280180c010b20024104360288182002200536028018200220094203863e0284180b200241c0186a200a200b20024180186a107d20022802c818210a20022802c0184101460d0320022802c418210520074220882209a72104200a410376ad21070b200520044103746a220420083b0104200420063602002009422086200742ffffffff0f83844280808080107c21072003417f6a22030d000b200128020421060b20012006417f6a3602042005450d022007422088a741037422040d03200521040c040b200a0d050c060b200742ffffffff0183500d002005102e0b200041003602000c020b200520046a21032005210403402004200429020022093e0200200441046a20094220883d0100200441086a22042003470d000b0b2007a7210a200241e0116a200110ad01024002400240024020022802e0110d0020022802e41122062001280200280204410c6e2203200320064b1bad420c7e2207422088a70d062007a72203417f4c0d060240024020030d00410421080c010b2003102c2208450d060b2001200128020441016a220b3602042003410c6ead21070240200b20012802084b0d00024002402006450d000340200241d8116a200110ad0120022802d8110d0320022802dc11210b200241d0116a200110fb0420022f01d0110d0320022f01d211210c200241c8116a200110fb0420022f01c8110d0320022f01ca11210d200241c0116a200110fb0420022f01c0110d0320022f01c211210e024020074220882209a722032007a7470d00200341016a220f2003490d0b20034101742210200f200f2010491b220f4104200f41044b1bad420c7e2209422088a745410274210f2009a721100240024020030d0020024100360280180c010b2002410436028818200220083602801820022003410c6c360284180b200241c0186a2010200f20024180186a107d20022802c818210f20022802c0184101460d0320022802c418210820074220882209a72103200f410c6ead21070b20082003410c6c6a2203200e3b01082003200c3b01042003200b360200200341066a200d3b01002009422086200742ffffffff0f83844280808080107c21072006417f6a22060d000b2001280204210b0b2001200b417f6a3602042008450d022007422088a7410c6c22030d03200821030c040b200f450d070c060b2007a72204450d002004410c6c450d002008102e0b200041003602000c020b200820036a21062008210303402003410c6a22032006470d000b0b2007a72106200241b8116a200110ad01200320086b410c6d210f0240024020022802b8110d004104210c20022802bc11220b200128020028020441047622032003200b4b1b2203410474220d417f4c0d0502402003450d00200d102c220c450d050b2001200128020441016a220d3602042003ad21070240200d20012802084b0d0002400240024002400240200b450d000340200241b0116a200110ad0120022802b0110d0620022802b411210e200241003a008818200241a8116a200110fb0420022f01a8110d0620022f01aa112103200241a0116a200110fb0420022f01a0110d0620022f01a211210d200241013a0088182002200d3b018218200220033b01801820024198116a200110fb0420022f0198110d0520022f019a11210320024190116a200110fb0420022f0190110d05200220022f0192113b018618200220033b018418200229038018210920024188116a200110fb0420022f0188110d0620022f018a112110024020074220882211a722032007a7470d00200341016a220d2003490d0d20034101742212200d200d2012491b220d4104200d41044b1b220d41ffffffff0071200d464102742112200d410474210d0240024020030d0020024100360280180c010b20024104360288182002200c36028018200220114204863e0284180b200241c0186a200d201220024180186a107d20022802c818210d20022802c0184101460d0320022802c418210c200d410476ad21070b200c20034104746a220d20103b010c200d2009370204200d200e360200200742ffffffff0f83200341016aad422086842107200b417f6a220b0d000b2001280204210d0b2001200d417f6a360204200c450d052007422088a741047422030d01200c21030c020b200d450d090c080b200c20036a210b200c21030340200341106a2203200b470d000b0b2007a7210d20024180116a200110ad01024002402002280280110d00200228028411220e200128020028020441146e220b200b200e4b1bad42147e2207422088a70d092007a7220b417f4c0d0902400240200b0d00410421120c010b200b102c2212450d090b2001200128020441016a2210360204200b41146ead21070240201020012802084b0d0002400240024002400240200e450d00200241c0186a41086a21130340200241f8106a200110ad0120022802f8100d0620022802fc102114200241003a008c18200241f0106a200110fb0420022f01f0100d0620022f01f210210b200241e8106a200110fb0420022f01e8100d0620022f01ea102110200241013a008c18200220103b0182182002200b3b018018200241e0106a200110fb0420022f01e0100d0520022f01e210210b200241d8106a200110fb0420022f01d8100d0520022f01da102110200241023a008c18200220103b0186182002200b3b018418200241d0106a200110fb0420022f01d0100d0520022f01d210210b200241c8106a200110fb0420022f01c8100d05200220022f01ca103b018a182002200b3b018818201320022802881836020020022002290380183703c018200241c0106a200110fb0420022f01c0100d0620022f01c210211520024180176a41086a2013280200220b360200200241c0166a41086a2216200b360200200220022903c018220937038017200220093703c01602402007422088a7220b2007a7470d00200b41016a2210200b490d11200b4101742217201020102017491b22104104201041044b1bad42147e2207422088a74541027421102007a7211702400240200b0d0020024100360280180c010b200241043602881820022012360280182002200b41146c360284180b200241c0186a2017201020024180186a107d20022802c818211020022802c0184101460d0320022802c4182112201041146ead21070b2012200b41146c6a22102014360200201020022903c0163702042010410c6a2016280200360200201020153b0110200742ffffffff0f83200b41016aad422086842107200e417f6a220e0d000b200128020421100b20012010417f6a3602042012450d052007422088a741146c220b0d012012210b0c020b2010450d0d0c0c0b2012200b6a210e2012210b0340200b41146a220b200e470d000b0b2007a7210e200241b8106a200110ad01200b20126b41146d21150240024020022802b8100d0020022802bc102210200128020028020441186e220b200b20104b1bad42187e2207422088a70d0d2007a7220b417f4c0d0d02400240200b0d00410421130c010b200b102c2213450d0d0b2001200128020441016a2214360204200b41186ead21070240201420012802084b0d00024002400240024002402010450d000340200241b0106a200110ad0120022802b0100d0620022802b4102116200241003a009018200241a8106a200110fb0420022f01a8100d0620022f01aa10210b200241a0106a200110fb0420022f01a0100d0620022f01a2102114200241013a009018200220143b0182182002200b3b01801820024198106a200110fb0420022f0198100d0520022f019a10210b20024190106a200110fb0420022f0190100d0520022f0192102114200241023a009018200220143b0186182002200b3b01841820024188106a200110fb0420022f0188100d0520022f018a10210b20024180106a200110fb0420022f0180100d0520022f0182102114200241033a009018200220143b018a182002200b3b018818200241f80f6a200110fb0420022f01f80f0d0520022f01fa0f210b200241f00f6a200110fb0420022f01f00f0d05200220022f01f20f3b018e182002200b3b018c18200241c0186a41086a220b20024180186a41086a29030037030020022002290380183703c018200241e80f6a200110fb0420022f01e80f0d0620022f01ea0f211720024180176a41086a200b2903002209370300200241c0166a41086a22182009370300200220022903c018220937038017200220093703c01602402007422088a7220b2007a7470d00200b41016a2214200b490d15200b4101742219201420142019491b22144104201441044b1bad42187e2207422088a74541027421142007a7211902400240200b0d0020024100360280180c010b200241043602881820022013360280182002200b41186c360284180b200241c0186a2019201420024180186a107d20022802c818211420022802c0184101460d0320022802c4182113201441186ead21070b2013200b41186c6a22142016360200201420022903c0163702042014410c6a2018290300370200201420173b0114200742ffffffff0f83200b41016aad4220868421072010417f6a22100d000b200128020421140b20012014417f6a3602042013450d052007422088a741186c220b0d012013210b0c020b2014450d110c100b2013200b6a21102013210b0340200b41186a220b2010470d000b0b2007a72110200241e00f6a200110ad01200b20136b41186d21180240024020022802e00f0d0020022802e40f220b2001280200280204411c6e22142014200b4b1bad421c7e2207422088a70d112007a72214417f4c0d110240024020140d00410421170c010b2014102c2217450d110b2001200128020441016a22163602042014411c6ead21070240201620012802084b0d0002400240024002400240200b450d00200241c0186a41106a21190340200241d80f6a200110ad0120022802d80f0d0620022802dc0f211a200241003a009418200241d00f6a200110fb0420022f01d00f0d0620022f01d20f2114200241c80f6a200110fb0420022f01c80f0d0620022f01ca0f2116200241013a009418200220163b018218200220143b018018200241c00f6a200110fb0420022f01c00f0d0520022f01c20f2114200241b80f6a200110fb0420022f01b80f0d0520022f01ba0f2116200241023a009418200220163b018618200220143b018418200241b00f6a200110fb0420022f01b00f0d0520022f01b20f2114200241a80f6a200110fb0420022f01a80f0d0520022f01aa0f2116200241033a009418200220163b018a18200220143b018818200241a00f6a200110fb0420022f01a00f0d0520022f01a20f2114200241980f6a200110fb0420022f01980f0d0520022f019a0f2116200241043a009418200220163b018e18200220143b018c18200241900f6a200110fb0420022f01900f0d0520022f01920f2114200241880f6a200110fb0420022f01880f0d0520022f018a0f2116200241c0186a41086a221b20024180186a41086a290300370300200220163b019218200220143b0190182019200228029018360200200241053a00941820022002290380183703c018200241800f6a200110fb0420022f01800f0d0620022f01820f211c20024180176a41086a201b290300220937030020024180176a41106a20192802002214360200200241c0166a41086a221b2009370300200241c0166a41106a221d2014360200200220022903c018220937038017200220093703c01602402007422088a722142007a7470d00201441016a22162014490d192014410174221e20162016201e491b22164104201641044b1bad421c7e2207422088a74541027421162007a7211e0240024020140d0020024100360280180c010b2002410436028818200220173602801820022014411c6c360284180b200241c0186a201e201620024180186a107d20022802c818211620022802c0184101460d0320022802c41821172016411c6ead21070b20172014411c6c6a2216201a360200201620022903c0163702042016410c6a201b290300370200201641146a201d2802003602002016201c3b0118200742ffffffff0f83201441016aad422086842107200b417f6a220b0d000b200128020421160b20012016417f6a3602042017450d052007422088a7411c6c220b0d012017210b0c020b2016450d150c140b2017200b6a21142017210b0340200b411c6a220b2014470d000b0b2007a72114200241f80e6a200110ad01200b20176b411c6d211a0240024020022802f80e0d0020022802fc0e220b200128020028020441057622162016200b4b1b22164105742219417f4c0d150240024020160d00410421190c010b2019102c2219450d150b2001200128020441016a221b3602042016ad21070240201b20012802084b0d0002400240024002400240200b450d000340200241f00e6a200110ad0120022802f00e0d0620022802f40e211c200241003a009818200241e80e6a200110fb0420022f01e80e0d0620022f01ea0e2116200241e00e6a200110fb0420022f01e00e0d0620022f01e20e211b200241013a0098182002201b3b018218200220163b018018200241d80e6a200110fb0420022f01d80e0d0520022f01da0e2116200241d00e6a200110fb0420022f01d00e0d0520022f01d20e211b200241023a0098182002201b3b018618200220163b018418200241c80e6a200110fb0420022f01c80e0d0520022f01ca0e2116200241c00e6a200110fb0420022f01c00e0d0520022f01c20e211b200241033a0098182002201b3b018a18200220163b018818200241b80e6a200110fb0420022f01b80e0d0520022f01ba0e2116200241b00e6a200110fb0420022f01b00e0d0520022f01b20e211b200241043a0098182002201b3b018e18200220163b018c18200241a80e6a200110fb0420022f01a80e0d0520022f01aa0e2116200241a00e6a200110fb0420022f01a00e0d0520022f01a20e211b200241053a0098182002201b3b019218200220163b019018200241980e6a200110fb0420022f01980e0d0520022f019a0e2116200241900e6a200110fb0420022f01900e0d0520022f01920e211b200241c0186a41086a221d20024180186a41086a2903003703002002201b3b019618200220163b019418200241c0186a41106a221620024180186a41106a290300370300200241063a00981820022002290380183703c018200241880e6a200110fb0420022f01880e0d0620022f018a0e211e20024180176a41086a201d290300220937030020024180176a41106a20162903002211370300200241c0166a41086a221d2009370300200241c0166a41106a221f2011370300200220022903c018220937038017200220093703c016024020074220882209a7221b2007a7470d00201b41016a2216201b490d1d201b4101742220201620162020491b22164104201641044b1b221641ffffff3f7120164641027421202016410574211602400240201b0d0020024100360280180c010b20024104360288182002201936028018200220094205863e0284180b200241c0186a2016202020024180186a107d20022802c818211620022802c0184101460d0320022802c41821192016410576ad21070b2019201b4105746a2216201c360200201620022903c0163702042016410c6a201d290300370200201641146a201f2903003702002016201e3b011c200742ffffffff0f83201b41016aad422086842107200b417f6a220b0d000b2001280204211b0b2001201b417f6a3602042019450d052007422088a7410574220b0d012019210b0c020b2016450d190c180b2019200b6a21162019210b0340200b41206a220b2016470d000b0b2007a72116200241800e6a200110ad010240024020022802800e0d0020022802840e221c200128020028020441246e221b201b201c4b1bad42247e2207422088a70d192007a7221b417f4c0d1902400240201b0d004104211d0c010b201b102c221d450d190b2001200128020441016a221e360204201b41246ead21070240201e20012802084b0d0002400240024002400240201c450d00200241c0176a41186a211f0340200241f80d6a200110ad0120022802f80d0d0620022802fc0d2120200241003a009c18200241f00d6a200110fb0420022f01f00d0d0620022f01f20d211b200241e80d6a200110fb0420022f01e80d0d0620022f01ea0d211e200241013a009c182002201e3b0182182002201b3b018018200241e00d6a200110fb0420022f01e00d0d0520022f01e20d211b200241d80d6a200110fb0420022f01d80d0d0520022f01da0d211e200241023a009c182002201e3b0186182002201b3b018418200241d00d6a200110fb0420022f01d00d0d0520022f01d20d211b200241c80d6a200110fb0420022f01c80d0d0520022f01ca0d211e200241033a009c182002201e3b018a182002201b3b018818200241c00d6a200110fb0420022f01c00d0d0520022f01c20d211b200241b80d6a200110fb0420022f01b80d0d0520022f01ba0d211e200241043a009c182002201e3b018e182002201b3b018c18200241b00d6a200110fb0420022f01b00d0d0520022f01b20d211b200241a80d6a200110fb0420022f01a80d0d0520022f01aa0d211e200241053a009c182002201e3b0192182002201b3b019018200241a00d6a200110fb0420022f01a00d0d0520022f01a20d211b200241980d6a200110fb0420022f01980d0d0520022f019a0d211e200241063a009c182002201e3b0196182002201b3b019418200241900d6a200110fb0420022f01900d0d0520022f01920d211b200241880d6a200110fb0420022f01880d0d0520022f018a0d211e200241c0176a41106a222120024180186a41106a290300370300200241c0176a41086a222220024180186a41086a2903003703002002201e3b019a182002201b3b019818201f200228029818360200200241073a009c18200220022903801822093703c018200220093703c017200241800d6a200110fb0420022f01800d0d0620022f01820d2123200241c0166a41086a20222903002209370300200241c0166a41106a20212903002211370300200241c0166a41186a201f280200221b36020020024180166a41086a2221200937030020024180166a41106a2222201137030020024180166a41186a2224201b360200200220022903c01722093703c016200220093703801602402007422088a7221e2007a7470d00201e41016a221b201e490d21201e4101742225201b201b2025491b221b4104201b41044b1bad42247e2207422088a745410274211b2007a7212502400240201e0d0020024100360280180c010b20024104360288182002201d360280182002201e41246c360284180b200241c0186a2025201b20024180186a107d20022802c818211b20022802c0184101460d0320022802c418211d201b41246ead21070b201d201e41246c6a221b2020360200201b200229038016370204201b410c6a2021290300370200201b41146a2022290300370200201b411c6a2024280200360200201b20233b0120200742ffffffff0f83201e41016aad422086842107201c417f6a221c0d000b2001280204211e0b2001201e417f6a360204201d450d052007422088a741246c221b0d01201d211b0c020b201b450d1d0c1c0b201d201b6a211c201d211b0340201b41246a221b201c470d000b0b2007a7211c200241f80c6a200110ad01201b201d6b41246d21200240024020022802f80c0d0020022802fc0c221e200128020028020441286e221b201b201e4b1bad42287e2207422088a70d1d2007a7221b417f4c0d1d02400240201b0d004104211f0c010b201b102c221f450d1d0b2001200128020441016a2221360204201b41286ead21070240202120012802084b0d0002400240024002400240201e450d000340200241f00c6a200110ad0120022802f00c0d0620022802f40c2122200241003a00a018200241e80c6a200110fb0420022f01e80c0d0620022f01ea0c211b200241e00c6a200110fb0420022f01e00c0d0620022f01e20c2121200241013a00a018200220213b0182182002201b3b018018200241d80c6a200110fb0420022f01d80c0d0520022f01da0c211b200241d00c6a200110fb0420022f01d00c0d0520022f01d20c2121200241023a00a018200220213b0186182002201b3b018418200241c80c6a200110fb0420022f01c80c0d0520022f01ca0c211b200241c00c6a200110fb0420022f01c00c0d0520022f01c20c2121200241033a00a018200220213b018a182002201b3b018818200241b80c6a200110fb0420022f01b80c0d0520022f01ba0c211b200241b00c6a200110fb0420022f01b00c0d0520022f01b20c2121200241043a00a018200220213b018e182002201b3b018c18200241a80c6a200110fb0420022f01a80c0d0520022f01aa0c211b200241a00c6a200110fb0420022f01a00c0d0520022f01a20c2121200241053a00a018200220213b0192182002201b3b019018200241980c6a200110fb0420022f01980c0d0520022f019a0c211b200241900c6a200110fb0420022f01900c0d0520022f01920c2121200241063a00a018200220213b0196182002201b3b019418200241880c6a200110fb0420022f01880c0d0520022f018a0c211b200241800c6a200110fb0420022f01800c0d0520022f01820c2121200241073a00a018200220213b019a182002201b3b019818200241f80b6a200110fb0420022f01f80b0d0520022f01fa0b211b200241f00b6a200110fb0420022f01f00b0d0520022f01f20b2121200241c0176a41106a222320024180186a41106a290300370300200220213b019e182002201b3b019c18200241c0176a41186a221b20024180186a41186a290300370300200241083a00a018200241c0176a41086a222120024180186a41086a290300370300200220022903801822093703c018200220093703c017200241e80b6a200110fb0420022f01e80b0d0620022f01ea0b2124200241c0166a41086a20212903002209370300200241c0166a41106a20232903002211370300200241c0166a41186a201b290300222637030020024180166a41086a2223200937030020024180166a41106a2225201137030020024180166a41186a22272026370300200220022903c01722093703c016200220093703801602402007422088a722212007a7470d00202141016a221b2021490d2520214101742228201b201b2028491b221b4104201b41044b1bad42287e2207422088a745410274211b2007a721280240024020210d0020024100360280180c010b20024104360288182002201f360280182002202141286c360284180b200241c0186a2028201b20024180186a107d20022802c818211b20022802c0184101460d0320022802c418211f201b41286ead21070b201f202141286c6a221b2022360200201b200229038016370204201b410c6a2023290300370200201b41146a2025290300370200201b411c6a2027290300370200201b20243b0124200742ffffffff0f83202141016aad422086842107201e417f6a221e0d000b200128020421210b20012021417f6a360204201f450d052007422088a741286c221b0d01201f211b0c020b201b450d210c200b201f201b6a211e201f211b0340201b41286a221b201e470d000b0b2007a7211e200241e00b6a200110ad01201b201f6b41286d21220240024020022802e00b0d0020022802e40b22212001280200280204412c6e221b201b20214b1bad422c7e2207422088a70d212007a7221b417f4c0d2102400240201b0d00410421230c010b201b102c2223450d210b2001200128020441016a2224360204201b412c6ead21070240202420012802084b0d00024002400240024002402021450d000340200241d80b6a200110ad0120022802d80b0d0620022802dc0b2125200241003a00a418200241d00b6a200110fb0420022f01d00b0d0620022f01d20b211b200241c80b6a200110fb0420022f01c80b0d0620022f01ca0b2124200241013a00a418200220243b0182182002201b3b018018200241c00b6a200110fb0420022f01c00b0d0520022f01c20b211b200241b80b6a200110fb0420022f01b80b0d0520022f01ba0b2124200241023a00a418200220243b0186182002201b3b018418200241b00b6a200110fb0420022f01b00b0d0520022f01b20b211b200241a80b6a200110fb0420022f01a80b0d0520022f01aa0b2124200241033a00a418200220243b018a182002201b3b018818200241a00b6a200110fb0420022f01a00b0d0520022f01a20b211b200241980b6a200110fb0420022f01980b0d0520022f019a0b2124200241043a00a418200220243b018e182002201b3b018c18200241900b6a200110fb0420022f01900b0d0520022f01920b211b200241880b6a200110fb0420022f01880b0d0520022f018a0b2124200241053a00a418200220243b0192182002201b3b019018200241800b6a200110fb0420022f01800b0d0520022f01820b211b200241f80a6a200110fb0420022f01f80a0d0520022f01fa0a2124200241063a00a418200220243b0196182002201b3b019418200241f00a6a200110fb0420022f01f00a0d0520022f01f20a211b200241e80a6a200110fb0420022f01e80a0d0520022f01ea0a2124200241073a00a418200220243b019a182002201b3b019818200241e00a6a200110fb0420022f01e00a0d0520022f01e20a211b200241d80a6a200110fb0420022f01d80a0d0520022f01da0a2124200241083a00a418200220243b019e182002201b3b019c18200241d00a6a200110fb0420022f01d00a0d0520022f01d20a211b200241c80a6a200110fb0420022f01c80a0d05200220022f01ca0a3b01a2182002201b3b01a018200241093a00a418200241c0186a41086a20024180186a41086a2903002209370300200241c0186a41106a20024180186a41106a2903002211370300200241c0186a41186a20024180186a41186a2903002226370300200241c0186a41206a20022802a018221b360200200220022903801822293703c018200241c0176a41206a2224201b360200200241c0176a41186a22272026370300200241c0176a41106a22282011370300200241c0176a41086a222a2009370300200220293703c017200241c00a6a200110fb0420022f01c00a0d0620022f01c20a212b20024180176a41206a2024280200221b360200200241c0166a41086a202a2903002209370300200241c0166a41106a20282903002211370300200241c0166a41186a20272903002226370300200241c0166a41206a201b36020020024180166a41086a2227200937030020024180166a41106a2228201137030020024180166a41186a222a202637030020024180166a41206a222c201b360200200220022903c01722093703c016200220093703801602402007422088a722242007a7470d00202441016a221b2024490d292024410174222d201b201b202d491b221b4104201b41044b1bad422c7e2207422088a745410274211b2007a7212d0240024020240d0020024100360280180c010b2002410436028818200220233602801820022024412c6c360284180b200241c0186a202d201b20024180186a107d20022802c818211b20022802c0184101460d0320022802c4182123201b412c6ead21070b20232024412c6c6a221b2025360200201b200229038016370204201b410c6a2027290300370200201b41146a2028290300370200201b411c6a202a290300370200201b41246a202c280200360200201b202b3b0128200742ffffffff0f83202441016aad4220868421072021417f6a22210d000b200128020421240b20012024417f6a3602042023450d052007422088a7412c6c221b0d012023211b0c020b201b450d250c240b2023201b6a21212023211b0340201b412c6a221b2021470d000b0b2007a72121200241b80a6a200110ad01201b20236b412c6d21250240024020022802b80a0d0020022802bc0a2224200128020028020441306e221b201b20244b1bad42307e2207422088a70d252007a7221b417f4c0d2502400240201b0d00410421270c010b201b102c2227450d250b2001200128020441016a2228360204201b41306ead21070240202820012802084b0d00024002400240024002402024450d000340200241b00a6a200110ad0120022802b00a0d0620022802b40a212a200241003a00a818200241a80a6a200110fb0420022f01a80a0d0620022f01aa0a211b200241a00a6a200110fb0420022f01a00a0d0620022f01a20a2128200241013a00a818200220283b0182182002201b3b018018200241980a6a200110fb0420022f01980a0d0520022f019a0a211b200241900a6a200110fb0420022f01900a0d0520022f01920a2128200241023a00a818200220283b0186182002201b3b018418200241880a6a200110fb0420022f01880a0d0520022f018a0a211b200241800a6a200110fb0420022f01800a0d0520022f01820a2128200241033a00a818200220283b018a182002201b3b018818200241f8096a200110fb0420022f01f8090d0520022f01fa09211b200241f0096a200110fb0420022f01f0090d0520022f01f2092128200241043a00a818200220283b018e182002201b3b018c18200241e8096a200110fb0420022f01e8090d0520022f01ea09211b200241e0096a200110fb0420022f01e0090d0520022f01e2092128200241053a00a818200220283b0192182002201b3b019018200241d8096a200110fb0420022f01d8090d0520022f01da09211b200241d0096a200110fb0420022f01d0090d0520022f01d2092128200241063a00a818200220283b0196182002201b3b019418200241c8096a200110fb0420022f01c8090d0520022f01ca09211b200241c0096a200110fb0420022f01c0090d0520022f01c2092128200241073a00a818200220283b019a182002201b3b019818200241b8096a200110fb0420022f01b8090d0520022f01ba09211b200241b0096a200110fb0420022f01b0090d0520022f01b2092128200241083a00a818200220283b019e182002201b3b019c18200241a8096a200110fb0420022f01a8090d0520022f01aa09211b200241a0096a200110fb0420022f01a0090d0520022f01a2092128200241093a00a818200220283b01a2182002201b3b01a01820024198096a200110fb0420022f0198090d0520022f019a09211b20024190096a200110fb0420022f0190090d05200220022f0192093b01a6182002201b3b01a4182002410a3a00a818200241c0186a41086a20024180186a41086a2903002209370300200241c0186a41106a20024180186a41106a2903002211370300200241c0186a41186a20024180186a41186a2903002226370300200241c0186a41206a20024180186a41206a29030022293703002002200229038018222e3703c018200241c0176a41206a221b2029370300200241c0176a41186a22282026370300200241c0176a41106a222b2011370300200241c0176a41086a222c20093703002002202e3703c01720024188096a200110fb0420022f0188090d0620022f018a09212d20024180176a41206a201b2903002209370300200241c0166a41086a202c2903002211370300200241c0166a41106a202b2903002226370300200241c0166a41186a20282903002229370300200241c0166a41206a200937030020024180166a41086a222b201137030020024180166a41106a222c202637030020024180166a41186a222f202937030020024180166a41206a22302009370300200220022903c01722093703c016200220093703801602402007422088a722282007a7470d00202841016a221b2028490d2d20284101742231201b201b2031491b221b4104201b41044b1bad42307e2207422088a745410274211b2007a721310240024020280d0020024100360280180c010b200241043602881820022027360280182002202841306c360284180b200241c0186a2031201b20024180186a107d20022802c818211b20022802c0184101460d0320022802c4182127201b41306ead21070b2027202841306c6a221b202a360200201b200229038016370204201b410c6a202b290300370200201b41146a202c290300370200201b411c6a202f290300370200201b41246a2030290300370200201b202d3b012c200742ffffffff0f83202841016aad4220868421072024417f6a22240d000b200128020421280b20012028417f6a3602042027450d052007422088a741306c221b0d012027211b0c020b201b450d290c280b2027201b6a21242027211b0340201b41306a221b2024470d000b0b2007a7212420024180096a200110ad01201b20276b41306d212a024002402002280280090d002002280284092228200128020028020441346e221b201b20284b1bad42347e2207422088a70d292007a7221b417f4c0d2902400240201b0d004104212b0c010b201b102c222b450d290b2001200128020441016a222c360204201b41346ead21070240202c20012802084b0d00024002400240024002402028450d000340200241f8086a200110ad0120022802f8080d0620022802fc08212d200241003a00ac18200241f0086a200110fb0420022f01f0080d0620022f01f208211b200241e8086a200110fb0420022f01e8080d0620022f01ea08212c200241013a00ac182002202c3b0182182002201b3b018018200241e0086a200110fb0420022f01e0080d0520022f01e208211b200241d8086a200110fb0420022f01d8080d0520022f01da08212c200241023a00ac182002202c3b0186182002201b3b018418200241d0086a200110fb0420022f01d0080d0520022f01d208211b200241c8086a200110fb0420022f01c8080d0520022f01ca08212c200241033a00ac182002202c3b018a182002201b3b018818200241c0086a200110fb0420022f01c0080d0520022f01c208211b200241b8086a200110fb0420022f01b8080d0520022f01ba08212c200241043a00ac182002202c3b018e182002201b3b018c18200241b0086a200110fb0420022f01b0080d0520022f01b208211b200241a8086a200110fb0420022f01a8080d0520022f01aa08212c200241053a00ac182002202c3b0192182002201b3b019018200241a0086a200110fb0420022f01a0080d0520022f01a208211b20024198086a200110fb0420022f0198080d0520022f019a08212c200241063a00ac182002202c3b0196182002201b3b01941820024190086a200110fb0420022f0190080d0520022f019208211b20024188086a200110fb0420022f0188080d0520022f018a08212c200241073a00ac182002202c3b019a182002201b3b01981820024180086a200110fb0420022f0180080d0520022f018208211b200241f8076a200110fb0420022f01f8070d0520022f01fa07212c200241083a00ac182002202c3b019e182002201b3b019c18200241f0076a200110fb0420022f01f0070d0520022f01f207211b200241e8076a200110fb0420022f01e8070d0520022f01ea07212c200241093a00ac182002202c3b01a2182002201b3b01a018200241e0076a200110fb0420022f01e0070d0520022f01e207211b200241d8076a200110fb0420022f01d8070d0520022f01da07212c2002410a3a00ac182002202c3b01a6182002201b3b01a418200241d0076a200110fb0420022f01d0070d0520022f01d207211b200241c8076a200110fb0420022f01c8070d05200220022f01ca073b01aa182002201b3b01a8182002410b3a00ac18200241c0186a41086a20024180186a41086a2903002209370300200241c0186a41106a20024180186a41106a2903002211370300200241c0186a41186a20024180186a41186a2903002226370300200241c0186a41206a20024180186a41206a2903002229370300200241c0186a41286a20022802a818221b3602002002200229038018222e3703c018200241c0176a41286a222c201b360200200241c0176a41206a222f2029370300200241c0176a41186a22302026370300200241c0176a41106a22312011370300200241c0176a41086a223220093703002002202e3703c017200241c0076a200110fb0420022f01c0070d0620022f01c207213320024180176a41286a202c280200221b36020020024180176a41206a202f2903002209370300200241c0166a41086a20322903002211370300200241c0166a41106a20312903002226370300200241c0166a41186a20302903002229370300200241c0166a41206a2009370300200241c0166a41286a201b360200200220022903c017222e3703c01620024180166a41286a222f201b36020020024180166a41206a2230200937030020024180166a41186a2231202937030020024180166a41106a2232202637030020024180166a41086a223420113703002002202e3703801602402007422088a7222c2007a7470d00202c41016a221b202c490d31202c4101742235201b201b2035491b221b4104201b41044b1bad42347e2207422088a745410274211b2007a7213502400240202c0d0020024100360280180c010b20024104360288182002202b360280182002202c41346c360284180b200241c0186a2035201b20024180186a107d20022802c818211b20022802c0184101460d0320022802c418212b201b41346ead21070b202b202c41346c6a221b202d360200201b200229038016370204201b410c6a2034290300370200201b41146a2032290300370200201b411c6a2031290300370200201b41246a2030290300370200201b412c6a202f280200360200201b20333b0130200742ffffffff0f83202c41016aad4220868421072028417f6a22280d000b2001280204212c0b2001202c417f6a360204202b450d052007422088a741346c221b0d01202b211b0c020b201b450d2d0c2c0b202b201b6a2128202b211b0340201b41346a221b2028470d000b0b2007a72128200241b8076a200110ad01201b202b6b41346d212d0240024020022802b8070d0020022802bc07222c200128020028020441386e221b201b202c4b1bad42387e2207422088a70d2d2007a7221b417f4c0d2d02400240201b0d004104212f0c010b201b102c222f450d2d0b2001200128020441016a2230360204201b41386ead21070240203020012802084b0d0002400240024002400240202c450d000340200241b0076a200110ad0120022802b0070d0620022802b4072131200241003a00b018200241a8076a200110fb0420022f01a8070d0620022f01aa07211b200241a0076a200110fb0420022f01a0070d0620022f01a2072130200241013a00b018200220303b0182182002201b3b01801820024198076a200110fb0420022f0198070d0520022f019a07211b20024190076a200110fb0420022f0190070d0520022f0192072130200241023a00b018200220303b0186182002201b3b01841820024188076a200110fb0420022f0188070d0520022f018a07211b20024180076a200110fb0420022f0180070d0520022f0182072130200241033a00b018200220303b018a182002201b3b018818200241f8066a200110fb0420022f01f8060d0520022f01fa06211b200241f0066a200110fb0420022f01f0060d0520022f01f2062130200241043a00b018200220303b018e182002201b3b018c18200241e8066a200110fb0420022f01e8060d0520022f01ea06211b200241e0066a200110fb0420022f01e0060d0520022f01e2062130200241053a00b018200220303b0192182002201b3b019018200241d8066a200110fb0420022f01d8060d0520022f01da06211b200241d0066a200110fb0420022f01d0060d0520022f01d2062130200241063a00b018200220303b0196182002201b3b019418200241c8066a200110fb0420022f01c8060d0520022f01ca06211b200241c0066a200110fb0420022f01c0060d0520022f01c2062130200241073a00b018200220303b019a182002201b3b019818200241b8066a200110fb0420022f01b8060d0520022f01ba06211b200241b0066a200110fb0420022f01b0060d0520022f01b2062130200241083a00b018200220303b019e182002201b3b019c18200241a8066a200110fb0420022f01a8060d0520022f01aa06211b200241a0066a200110fb0420022f01a0060d0520022f01a2062130200241093a00b018200220303b01a2182002201b3b01a01820024198066a200110fb0420022f0198060d0520022f019a06211b20024190066a200110fb0420022f0190060d0520022f01920621302002410a3a00b018200220303b01a6182002201b3b01a41820024188066a200110fb0420022f0188060d0520022f018a06211b20024180066a200110fb0420022f0180060d0520022f01820621302002410b3a00b018200220303b01aa182002201b3b01a818200241f8056a200110fb0420022f01f8050d0520022f01fa05211b200241f0056a200110fb0420022f01f0050d05200220022f01f2053b01ae182002201b3b01ac182002410c3a00b018200241c0186a41086a20024180186a41086a2903002209370300200241c0186a41106a20024180186a41106a2903002211370300200241c0186a41186a20024180186a41186a2903002226370300200241c0186a41206a20024180186a41206a2903002229370300200241c0186a41286a20024180186a41286a290300222e370300200220022903801822363703c018200241c0176a41286a221b202e370300200241c0176a41206a22302029370300200241c0176a41186a22322026370300200241c0176a41106a22332011370300200241c0176a41086a22342009370300200220363703c017200241e8056a200110fb0420022f01e8050d0620022f01ea05213520024180176a41286a201b290300220937030020024180176a41206a20302903002211370300200241c0166a41086a20342903002226370300200241c0166a41106a20332903002229370300200241c0166a41186a2032290300222e370300200241c0166a41206a2011370300200241c0166a41286a2009370300200220022903c01722363703c01620024180166a41286a2232200937030020024180166a41206a2233201137030020024180166a41186a2234202e37030020024180166a41106a2237202937030020024180166a41086a22382026370300200220363703801602402007422088a722302007a7470d00203041016a221b2030490d3520304101742239201b201b2039491b221b4104201b41044b1bad42387e2207422088a745410274211b2007a721390240024020300d0020024100360280180c010b20024104360288182002202f360280182002203041386c360284180b200241c0186a2039201b20024180186a107d20022802c818211b20022802c0184101460d0320022802c418212f201b41386ead21070b202f203041386c6a221b2031360200201b200229038016370204201b410c6a2038290300370200201b41146a2037290300370200201b411c6a2034290300370200201b41246a2033290300370200201b412c6a2032290300370200201b20353b0134200742ffffffff0f83203041016aad422086842107202c417f6a222c0d000b200128020421300b20012030417f6a360204202f450d052007422088a741386c221b0d01202f211b0c020b201b450d310c300b202f201b6a212c202f211b0340201b41386a221b202c470d000b0b2007a7212c200241e0056a200110ad01201b202f6b41386d21310240024020022802e0050d0020022802e40522302001280200280204413c6e221b201b20304b1bad423c7e2207422088a70d312007a7221b417f4c0d3102400240201b0d00410421320c010b201b102c2232450d310b2001200128020441016a2233360204201b413c6ead21070240203320012802084b0d00024002400240024002402030450d000340200241d8056a200110ad0120022802d8050d0620022802dc052134200241003a00b418200241d0056a200110fb0420022f01d0050d0620022f01d205211b200241c8056a200110fb0420022f01c8050d0620022f01ca052133200241013a00b418200220333b0182182002201b3b018018200241c0056a200110fb0420022f01c0050d0520022f01c205211b200241b8056a200110fb0420022f01b8050d0520022f01ba052133200241023a00b418200220333b0186182002201b3b018418200241b0056a200110fb0420022f01b0050d0520022f01b205211b200241a8056a200110fb0420022f01a8050d0520022f01aa052133200241033a00b418200220333b018a182002201b3b018818200241a0056a200110fb0420022f01a0050d0520022f01a205211b20024198056a200110fb0420022f0198050d0520022f019a052133200241043a00b418200220333b018e182002201b3b018c1820024190056a200110fb0420022f0190050d0520022f019205211b20024188056a200110fb0420022f0188050d0520022f018a052133200241053a00b418200220333b0192182002201b3b01901820024180056a200110fb0420022f0180050d0520022f018205211b200241f8046a200110fb0420022f01f8040d0520022f01fa042133200241063a00b418200220333b0196182002201b3b019418200241f0046a200110fb0420022f01f0040d0520022f01f204211b200241e8046a200110fb0420022f01e8040d0520022f01ea042133200241073a00b418200220333b019a182002201b3b019818200241e0046a200110fb0420022f01e0040d0520022f01e204211b200241d8046a200110fb0420022f01d8040d0520022f01da042133200241083a00b418200220333b019e182002201b3b019c18200241d0046a200110fb0420022f01d0040d0520022f01d204211b200241c8046a200110fb0420022f01c8040d0520022f01ca042133200241093a00b418200220333b01a2182002201b3b01a018200241c0046a200110fb0420022f01c0040d0520022f01c204211b200241b8046a200110fb0420022f01b8040d0520022f01ba0421332002410a3a00b418200220333b01a6182002201b3b01a418200241b0046a200110fb0420022f01b0040d0520022f01b204211b200241a8046a200110fb0420022f01a8040d0520022f01aa0421332002410b3a00b418200220333b01aa182002201b3b01a818200241a0046a200110fb0420022f01a0040d0520022f01a204211b20024198046a200110fb0420022f0198040d0520022f019a0421332002410c3a00b418200220333b01ae182002201b3b01ac1820024190046a200110fb0420022f0190040d0520022f019204211b20024188046a200110fb0420022f0188040d05200220022f018a043b01b2182002201b3b01b0182002410d3a00b418200241c0186a41086a223a20024180186a41086a290300370300200241c0186a41106a223920024180186a41106a290300370300200241c0186a41186a223820024180186a41186a290300370300200241c0186a41206a223720024180186a41206a290300370300200241c0186a41286a223520024180186a41286a290300370300200241c0186a41306a223320022802b01836020020022002290380183703c018200241c0176a41306a221b2033280200360200200241c0176a41286a22332035290300370300200241c0176a41206a22352037290300370300200241c0176a41186a22372038290300370300200241c0176a41106a22382039290300370300200241c0176a41086a2239203a290300370300200220022903c0183703c01720024180046a200110fb0420022f0180040d0620022f018204213a20024180176a41306a201b280200221b36020020024180176a41286a2033290300220937030020024180176a41206a20352903002211370300200241c0166a41086a22332039290300370300200241c0166a41106a22352038290300370300200241c0166a41186a22382037290300370300200241c0166a41206a22372011370300200241c0166a41286a22392009370300200241c0166a41306a223b201b360200200220022903c0173703c01620024180166a41306a223c203b28020036020020024180166a41286a223b203929030037030020024180166a41206a2239203729030037030020024180166a41186a2237203829030037030020024180166a41106a2238203529030037030020024180166a41086a22352033290300370300200220022903c0163703801602402007422088a722332007a7470d00203341016a221b2033490d392033410174223d201b201b203d491b221b4104201b41044b1bad423c7e2207422088a745410274211b2007a7213d0240024020330d0020024100360280180c010b2002410436028818200220323602801820022033413c6c360284180b200241c0186a203d201b20024180186a107d20022802c818211b20022802c0184101460d0320022802c4182132201b413c6ead21070b20322033413c6c6a221b2034360200201b200229038016370204201b410c6a2035290300370200201b41146a2038290300370200201b411c6a2037290300370200201b41246a2039290300370200201b412c6a203b290300370200201b41346a203c280200360200201b203a3b0138200742ffffffff0f83203341016aad4220868421072030417f6a22300d000b200128020421330b20012033417f6a3602042032450d052007422088a7413c6c221b0d012032211b0c020b201b450d350c340b2032201b6a21302032211b0340201b413c6a221b2030470d000b0b2007a72133200241f8036a200110ad01201b20326b413c6d21370240024020022802f8030d0020022802fc0322302001280200280204410676221b201b20304b1b221b4106742234417f4c0d3502400240201b0d00410421340c010b2034102c2234450d350b2001200128020441016a2235360204201bad21070240203520012802084b0d00024002400240024002402030450d000340200241f0036a200110ad0120022802f0030d0620022802f4032138200241003a00b818200241e8036a200110fb0420022f01e8030d0620022f01ea03211b200241e0036a200110fb0420022f01e0030d0620022f01e2032135200241013a00b818200220353b0182182002201b3b018018200241d8036a200110fb0420022f01d8030d0520022f01da03211b200241d0036a200110fb0420022f01d0030d0520022f01d2032135200241023a00b818200220353b0186182002201b3b018418200241c8036a200110fb0420022f01c8030d0520022f01ca03211b200241c0036a200110fb0420022f01c0030d0520022f01c2032135200241033a00b818200220353b018a182002201b3b018818200241b8036a200110fb0420022f01b8030d0520022f01ba03211b200241b0036a200110fb0420022f01b0030d0520022f01b2032135200241043a00b818200220353b018e182002201b3b018c18200241a8036a200110fb0420022f01a8030d0520022f01aa03211b200241a0036a200110fb0420022f01a0030d0520022f01a2032135200241053a00b818200220353b0192182002201b3b01901820024198036a200110fb0420022f0198030d0520022f019a03211b20024190036a200110fb0420022f0190030d0520022f0192032135200241063a00b818200220353b0196182002201b3b01941820024188036a200110fb0420022f0188030d0520022f018a03211b20024180036a200110fb0420022f0180030d0520022f0182032135200241073a00b818200220353b019a182002201b3b019818200241f8026a200110fb0420022f01f8020d0520022f01fa02211b200241f0026a200110fb0420022f01f0020d0520022f01f2022135200241083a00b818200220353b019e182002201b3b019c18200241e8026a200110fb0420022f01e8020d0520022f01ea02211b200241e0026a200110fb0420022f01e0020d0520022f01e2022135200241093a00b818200220353b01a2182002201b3b01a018200241d8026a200110fb0420022f01d8020d0520022f01da02211b200241d0026a200110fb0420022f01d0020d0520022f01d20221352002410a3a00b818200220353b01a6182002201b3b01a418200241c8026a200110fb0420022f01c8020d0520022f01ca02211b200241c0026a200110fb0420022f01c0020d0520022f01c20221352002410b3a00b818200220353b01aa182002201b3b01a818200241b8026a200110fb0420022f01b8020d0520022f01ba02211b200241b0026a200110fb0420022f01b0020d0520022f01b20221352002410c3a00b818200220353b01ae182002201b3b01ac18200241a8026a200110fb0420022f01a8020d0520022f01aa02211b200241a0026a200110fb0420022f01a0020d0520022f01a20221352002410d3a00b818200220353b01b2182002201b3b01b01820024198026a200110fb0420022f0198020d0520022f019a02211b20024190026a200110fb0420022f0190020d05200220022f0192023b01b6182002201b3b01b4182002410e3a00b818200241c0186a41086a223d20024180186a41086a290300370300200241c0186a41106a223c20024180186a41106a290300370300200241c0186a41186a223b20024180186a41186a290300370300200241c0186a41206a223a20024180186a41206a290300370300200241c0186a41286a223920024180186a41286a290300370300200241c0186a41306a223520024180186a41306a29030037030020022002290380183703c018200241c0176a41306a221b2035290300370300200241c0176a41286a22352039290300370300200241c0176a41206a2239203a290300370300200241c0176a41186a223a203b290300370300200241c0176a41106a223b203c290300370300200241c0176a41086a223c203d290300370300200220022903c0183703c01720024188026a200110fb0420022f0188020d0620022f018a02213d20024180176a41306a201b290300220937030020024180176a41286a2035290300221137030020024180176a41206a20392903002226370300200241c0166a41086a221b203c290300370300200241c0166a41106a2235203b290300370300200241c0166a41186a2239203a290300370300200241c0166a41206a223a2026370300200241c0166a41286a223b2011370300200241c0166a41306a223c2009370300200220022903c0173703c01620024180166a41306a223e203c29030037030020024180166a41286a223c203b29030037030020024180166a41206a223b203a29030037030020024180166a41186a223a203929030037030020024180166a41106a2239203529030037030020024180166a41086a223f201b290300370300200220022903c01637038016024020074220882209a722352007a7470d00203541016a221b2035490d3d20354101742240201b201b2040491b221b4104201b41044b1b221b41ffffff1f71201b464102742140201b410674211b0240024020350d0020024100360280180c010b20024104360288182002203436028018200220094206863e0284180b200241c0186a201b204020024180186a107d20022802c818211b20022802c0184101460d0320022802c4182134201b410676ad21070b203420354106746a221b2038360200201b200229038016370204201b410c6a203f290300370200201b41146a2039290300370200201b411c6a203a290300370200201b41246a203b290300370200201b412c6a203c290300370200201b41346a203e290300370200201b203d3b013c200742ffffffff0f83203541016aad4220868421072030417f6a22300d000b200128020421350b20012035417f6a3602042034450d052007422088a7410674221b0d012034211b0c020b201b450d390c380b2034201b6a21302034211b0340201b41c0006a221b2030470d000b0b2007a7213a20024180026a200110ad0102402002280280020d002002280284022239200128020028020441c4006e2230203020394b1bad42c4007e2207422088a70d382007a72235417f4c0d380240024020350d00410421300c010b2035102c2230450d380b2001200128020441016a2238360204203541c4006ead21070240203820012802084b0d00024002400240024002402039450d000340200241f8016a200110ad0120022802f8010d0620022802fc01213b200241003a00bc18200241f0016a200110fb0420022f01f0010d0620022f01f2012135200241e8016a200110fb0420022f01e8010d0620022f01ea012138200241013a00bc18200220383b018218200220353b018018200241e0016a200110fb0420022f01e0010d0520022f01e2012135200241d8016a200110fb0420022f01d8010d0520022f01da012138200241023a00bc18200220383b018618200220353b018418200241d0016a200110fb0420022f01d0010d0520022f01d2012135200241c8016a200110fb0420022f01c8010d0520022f01ca012138200241033a00bc18200220383b018a18200220353b018818200241c0016a200110fb0420022f01c0010d0520022f01c2012135200241b8016a200110fb0420022f01b8010d0520022f01ba012138200241043a00bc18200220383b018e18200220353b018c18200241b0016a200110fb0420022f01b0010d0520022f01b2012135200241a8016a200110fb0420022f01a8010d0520022f01aa012138200241053a00bc18200220383b019218200220353b019018200241a0016a200110fb0420022f01a0010d0520022f01a201213520024198016a200110fb0420022f0198010d0520022f019a012138200241063a00bc18200220383b019618200220353b01941820024190016a200110fb0420022f0190010d0520022f019201213520024188016a200110fb0420022f0188010d0520022f018a012138200241073a00bc18200220383b019a18200220353b01981820024180016a200110fb0420022f0180010d0520022f0182012135200241f8006a200110fb0420022f01780d0520022f017a2138200241083a00bc18200220383b019e18200220353b019c18200241f0006a200110fb0420022f01700d0520022f01722135200241e8006a200110fb0420022f01680d0520022f016a2138200241093a00bc18200220383b01a218200220353b01a018200241e0006a200110fb0420022f01600d0520022f01622135200241d8006a200110fb0420022f01580d0520022f015a21382002410a3a00bc18200220383b01a618200220353b01a418200241d0006a200110fb0420022f01500d0520022f01522135200241c8006a200110fb0420022f01480d0520022f014a21382002410b3a00bc18200220383b01aa18200220353b01a818200241c0006a200110fb0420022f01400d0520022f01422135200241386a200110fb0420022f01380d0520022f013a21382002410c3a00bc18200220383b01ae18200220353b01ac18200241306a200110fb0420022f01300d0520022f01322135200241286a200110fb0420022f01280d0520022f012a21382002410d3a00bc18200220383b01b218200220353b01b018200241206a200110fb0420022f01200d0520022f01222135200241186a200110fb0420022f01180d0520022f011a21382002410e3a00bc18200220383b01b618200220353b01b418200241106a200110fb0420022f01100d0520022f01122135200241086a200110fb0420022f01080d05200220022f010a3b01ba18200220353b01b8182002410f3a00bc18200241c0186a41086a223820024180186a41086a290300370300200241c0186a41106a223c20024180186a41106a290300370300200241c0186a41186a223d20024180186a41186a290300370300200241c0186a41206a223e20024180186a41206a290300370300200241c0186a41286a223f20024180186a41286a290300370300200241c0186a41306a224020024180186a41306a290300370300200241c0186a41386a224120022802b81836020020022002290380183703c018200241c0176a41086a22352038290300370300200241c0176a41106a2238203c290300370300200241c0176a41186a223c203d290300370300200241c0176a41206a223d203e290300370300200241c0176a41286a223e203f290300370300200241c0176a41306a223f2040290300370300200241c0176a41386a22402041280200360200200220022903c0183703c0172002200110fb0420022f01000d0620022f0102214120024180176a41386a2040280200224036020020024180176a41306a203f290300220937030020024180176a41286a203e290300221137030020024180176a41206a203d2903002226370300200241c0166a41086a223d2035290300370300200241c0166a41106a22352038290300370300200241c0166a41186a2238203c290300370300200241c0166a41206a223c2026370300200241c0166a41286a223e2011370300200241c0166a41306a223f2009370300200241c0166a41386a22422040360200200220022903c0173703c01620024180166a41386a2240204228020036020020024180166a41306a2242203f29030037030020024180166a41286a223f203e29030037030020024180166a41206a223e203c29030037030020024180166a41186a223c203829030037030020024180166a41106a2243203529030037030020024180166a41086a2244203d290300370300200220022903c0163703801602402007422088a722382007a7470d00203841016a22352038490d402038410174223d20352035203d491b22354104203541044b1bad42c4007e2207422088a74541027421352007a7213d0240024020380d0020024100360280180c010b200241043602881820022030360280182002203841c4006c360284180b200241c0186a203d203520024180186a107d20022802c818213520022802c0184101460d0320022802c4182130203541c4006ead21070b2030203841c4006c6a2235203b36020020352002290380163702042035410c6a2044290300370200203541146a20432903003702002035411c6a203c290300370200203541246a203e2903003702002035412c6a203f290300370200203541346a20422903003702002035413c6a2040280200360200203520413b0140200742ffffffff0f83203841016aad4220868421072039417f6a22390d000b200128020421380b20012038417f6a3602042030450d05200420056b41037521352003200c6b4104752103200b20196b410575210b201b20346b410675211b2007a721382007422088a741c4006c22040d01203021040c020b2035450d3c0c3b0b203020046a2101203021040340200441c4006a22042001470d000b0b2000200a36020420002005360200200041b8016a2038360200200041b4016a2030360200200041b0016a201b360200200041ac016a203a360200200041a8016a2034360200200041a4016a2037360200200041a0016a20333602002000419c016a203236020020004198016a203136020020004194016a202c36020020004190016a202f3602002000418c016a202d36020020004188016a202836020020004184016a202b36020020004180016a202a360200200041fc006a2024360200200041f8006a2027360200200041f4006a2025360200200041f0006a2021360200200041ec006a2023360200200041e8006a2022360200200041e4006a201e360200200041e0006a201f360200200041dc006a2020360200200041d8006a201c360200200041d4006a201d360200200041d0006a200b360200200041cc006a2016360200200041c8006a2019360200200041c4006a201a360200200041c0006a20143602002000413c6a2017360200200041386a2018360200200041346a2010360200200041306a20133602002000412c6a2015360200200041286a200e360200200041246a2012360200200041206a20033602002000411c6a200d360200200041186a200c360200200041146a200f360200200041106a20063602002000410c6a2008360200200041086a2035360200200041bc016a200420306b41c4006d3602000c380b200241003a00bc180b2007a72204450d00200441c4006c450d002030102e0b20004100360200203a41ffffff1f71450d032034102e0c030b200241003a00b8180b200742ffffff1f83500d002034102e0b200041003602000b2033450d032033413c6c450d032032102e0c030b200241003a00b4180b2007a72204450d002004413c6c450d002032102e0b200041003602000b202c450d03202c41386c450d03202f102e0c030b200241003a00b0180b2007a72204450d00200441386c450d00202f102e0b200041003602000b2028450d03202841346c450d03202b102e0c030b200241003a00ac180b2007a72204450d00200441346c450d00202b102e0b200041003602000b2024450d03202441306c450d032027102e0c030b200241003a00a8180b2007a72204450d00200441306c450d002027102e0b200041003602000b2021450d032021412c6c450d032023102e0c030b200241003a00a4180b2007a72204450d002004412c6c450d002023102e0b200041003602000b201e450d03201e41286c450d03201f102e0c030b200241003a00a0180b2007a72204450d00200441286c450d00201f102e0b200041003602000b201c450d03201c41246c450d03201d102e0c030b200241003a009c180b2007a72204450d00200441246c450d00201d102e0b200041003602000b201641ffffff3f71450d032019102e0c030b200241003a0098180b200742ffffff3f83500d002019102e0b200041003602000b2014450d032014411c6c450d032017102e0c030b200241003a0094180b2007a72204450d002004411c6c450d002017102e0b200041003602000b2010450d03201041186c450d032013102e0c030b200241003a0090180b2007a72204450d00200441186c450d002013102e0b200041003602000b200e450d03200e41146c450d032012102e0c030b200241003a008c180b2007a72204450d00200441146c450d002012102e0b200041003602000b200d41ffffffff0071450d03200c102e0c030b200241003a0088180b200742ffffffff0083500d00200c102e0b200041003602000b2006450d002006410c6c450d002008102e0b200a41ffffffff0171450d002005102e0b200241c0196a24000f0b1036000b1038000ba9b9010f057f017e027f017e067f017e147f017e027f017e047f017e077f017e0e7f230041c0196b22022400200241f8116a200110ab0102400240024002400240024020022802f8110d0020022802fc11220320012802044103762204200420034b1b22044103742205417f4c0d050240024020040d00410421060c010b2005102c2206450d050b2004ad21070240024002402003450d000340200241f0116a200110ab0120022802f0110d0320022802f4112108200241e8116a200110fc0420022f01e8110d0320022f01ea11210902402007422088220aa722052007a72204470d00200441016a22052004490d0a2004410174220b2005200b20054b1b22054104200541044b1b220541ffffffff0171200546410274210b200541037421050240024020040d0020024100360280180c010b2002410436028818200220063602801820022004410374360284180b200241c0186a2005200b20024180186a107d20022802c818210420022802c0184101460d0320022802c41821062007422088220aa721052004410376ad21070b200620054103746a220420093b010420042008360200200a422086200742ffffffff0f83844280808080107c21072003417f6a22030d000b0b2006450d022007422088a741037422040d03200621040c040b20040d050c060b200742ffffffff0183500d002006102e0b200041003602000c020b200620046a210520062104034020042004290200220a3e0200200441046a200a4220883d0100200441086a22042005470d000b0b2007a7210c200241e0116a200110ab01024002400240024020022802e0110d0020022802e41122032001280204410c6e2205200520034b1bad420c7e2207422088a70d062007a72205417f4c0d060240024020050d00410421080c010b2005102c2208450d060b2005410c6ead21070240024002402003450d000340200241d8116a200110ab0120022802d8110d0320022802dc11210b200241d0116a200110fc0420022f01d0110d0320022f01d211210d200241c8116a200110fc0420022f01c8110d0320022f01ca11210e200241c0116a200110fc0420022f01c0110d0320022f01c211210f02402007422088220aa722092007a72205470d00200541016a22092005490d0b200541017422102009201020094b1b22094104200941044b1bad420c7e220a422088a7454102742109200aa721100240024020050d0020024100360280180c010b2002410436028818200220083602801820022005410c6c360284180b200241c0186a2010200920024180186a107d20022802c818210520022802c0184101460d0320022802c41821082007422088220aa721092005410c6ead21070b20082009410c6c6a2205200f3b01082005200d3b01042005200b360200200541066a200e3b0100200a422086200742ffffffff0f83844280808080107c21072003417f6a22030d000b0b2008450d022007422088a7410c6c22050d03200821050c040b2005450d070c060b2007a72204450d002004410c6c450d002008102e0b200041003602000c020b200820056a21032008210503402005410c6a22052003470d000b0b2007a7210d200241b8116a200110ab01200520086b410c6d21100240024020022802b8110d004104210b20022802bc11220320012802044104762205200520034b1b22054104742209417f4c0d0502402005450d002009102c220b450d050b2005ad21070240024002400240024002402003450d000340200241b0116a200110ab0120022802b0110d0620022802b411210e200241003a008818200241a8116a200110fc0420022f01a8110d0620022f01aa112105200241a0116a200110fc0420022f01a0110d0620022f01a2112109200241013a008818200220093b018218200220053b01801820024198116a200110fc0420022f0198110d0520022f019a11210520024190116a200110fc0420022f0190110d05200220022f0192113b018618200220053b018418200229038018210a20024188116a200110fc0420022f0188110d0620022f018a11210f024020074220882211a722052007a7470d00200541016a22092005490d0d20054101742212200920092012491b22094104200941044b1b220941ffffffff00712009464102742112200941047421090240024020050d0020024100360280180c010b20024104360288182002200b36028018200220114204863e0284180b200241c0186a2009201220024180186a107d20022802c818210920022802c0184101460d0320022802c418210b2009410476ad21070b200b20054104746a2209200f3b010c2009200a3702042009200e360200200742ffffffff0f83200541016aad4220868421072003417f6a22030d000b0b200b450d052007422088a741047422050d01200b21050c020b2009450d090c080b200b20056a2103200b21050340200541106a22052003470d000b0b2007a7211220024180116a200110ab01024002402002280280110d00200228028411220e200128020441146e22032003200e4b1bad42147e2207422088a70d092007a72203417f4c0d090240024020030d004104210f0c010b2003102c220f450d090b200341146ead2107024002400240024002400240200e450d00200241c0186a41086a21130340200241f8106a200110ab0120022802f8100d0620022802fc102114200241003a008c18200241f0106a200110fc0420022f01f0100d0620022f01f2102103200241e8106a200110fc0420022f01e8100d0620022f01ea102109200241013a008c18200220093b018218200220033b018018200241e0106a200110fc0420022f01e0100d0520022f01e2102103200241d8106a200110fc0420022f01d8100d0520022f01da102109200241023a008c18200220093b018618200220033b018418200241d0106a200110fc0420022f01d0100d0520022f01d2102103200241c8106a200110fc0420022f01c8100d05200220022f01ca103b018a18200220033b018818201320022802881836020020022002290380183703c018200241c0106a200110fc0420022f01c0100d0620022f01c210211520024180176a41086a20132802002203360200200241c0166a41086a22162003360200200220022903c018220a370380172002200a3703c01602402007422088a722032007a7470d00200341016a22092003490d1120034101742217200920092017491b22094104200941044b1bad42147e2207422088a74541027421092007a721170240024020030d0020024100360280180c010b20024104360288182002200f360280182002200341146c360284180b200241c0186a2017200920024180186a107d20022802c818210920022802c0184101460d0320022802c418210f200941146ead21070b200f200341146c6a22092014360200200920022903c0163702042009410c6a2016280200360200200920153b0110200742ffffffff0f83200341016aad422086842107200e417f6a220e0d000b0b200f450d052007422088a741146c22030d01200f21030c020b2009450d0d0c0c0b200f20036a2109200f21030340200341146a22032009470d000b0b2007a72109200241b8106a200110ab012003200f6b41146d21180240024020022802b8100d0020022802bc102213200128020441186e2203200320134b1bad42187e2207422088a70d0d2007a72203417f4c0d0d0240024020030d00410421140c010b2003102c2214450d0d0b200341186ead21070240024002400240024002402013450d000340200241b0106a200110ab0120022802b0100d0620022802b4102115200241003a009018200241a8106a200110fc0420022f01a8100d0620022f01aa102103200241a0106a200110fc0420022f01a0100d0620022f01a210210e200241013a0090182002200e3b018218200220033b01801820024198106a200110fc0420022f0198100d0520022f019a10210320024190106a200110fc0420022f0190100d0520022f019210210e200241023a0090182002200e3b018618200220033b01841820024188106a200110fc0420022f0188100d0520022f018a10210320024180106a200110fc0420022f0180100d0520022f018210210e200241033a0090182002200e3b018a18200220033b018818200241f80f6a200110fc0420022f01f80f0d0520022f01fa0f2103200241f00f6a200110fc0420022f01f00f0d05200220022f01f20f3b018e18200220033b018c18200241c0186a41086a220320024180186a41086a29030037030020022002290380183703c018200241e80f6a200110fc0420022f01e80f0d0620022f01ea0f211620024180176a41086a2003290300220a370300200241c0166a41086a2217200a370300200220022903c018220a370380172002200a3703c01602402007422088a722032007a7470d00200341016a220e2003490d1520034101742219200e200e2019491b220e4104200e41044b1bad42187e2207422088a745410274210e2007a721190240024020030d0020024100360280180c010b200241043602881820022014360280182002200341186c360284180b200241c0186a2019200e20024180186a107d20022802c818210e20022802c0184101460d0320022802c4182114200e41186ead21070b2014200341186c6a220e2015360200200e20022903c016370204200e410c6a2017290300370200200e20163b0114200742ffffffff0f83200341016aad4220868421072013417f6a22130d000b0b2014450d052007422088a741186c22030d01201421030c020b200e450d110c100b201420036a210e201421030340200341186a2203200e470d000b0b2007a7210e200241e00f6a200110ab01200320146b41186d211a0240024020022802e00f0d0020022802e40f22152001280204411c6e2203200320154b1bad421c7e2207422088a70d112007a72203417f4c0d110240024020030d00410421160c010b2003102c2216450d110b2003411c6ead21070240024002400240024002402015450d00200241c0186a41106a21170340200241d80f6a200110ab0120022802d80f0d0620022802dc0f2119200241003a009418200241d00f6a200110fc0420022f01d00f0d0620022f01d20f2103200241c80f6a200110fc0420022f01c80f0d0620022f01ca0f2113200241013a009418200220133b018218200220033b018018200241c00f6a200110fc0420022f01c00f0d0520022f01c20f2103200241b80f6a200110fc0420022f01b80f0d0520022f01ba0f2113200241023a009418200220133b018618200220033b018418200241b00f6a200110fc0420022f01b00f0d0520022f01b20f2103200241a80f6a200110fc0420022f01a80f0d0520022f01aa0f2113200241033a009418200220133b018a18200220033b018818200241a00f6a200110fc0420022f01a00f0d0520022f01a20f2103200241980f6a200110fc0420022f01980f0d0520022f019a0f2113200241043a009418200220133b018e18200220033b018c18200241900f6a200110fc0420022f01900f0d0520022f01920f2103200241880f6a200110fc0420022f01880f0d0520022f018a0f2113200241c0186a41086a221b20024180186a41086a290300370300200220133b019218200220033b0190182017200228029018360200200241053a00941820022002290380183703c018200241800f6a200110fc0420022f01800f0d0620022f01820f211c20024180176a41086a201b290300220a37030020024180176a41106a20172802002203360200200241c0166a41086a221b200a370300200241c0166a41106a221d2003360200200220022903c018220a370380172002200a3703c01602402007422088a722032007a7470d00200341016a22132003490d192003410174221e20132013201e491b22134104201341044b1bad421c7e2207422088a74541027421132007a7211e0240024020030d0020024100360280180c010b2002410436028818200220163602801820022003411c6c360284180b200241c0186a201e201320024180186a107d20022802c818211320022802c0184101460d0320022802c41821162013411c6ead21070b20162003411c6c6a22132019360200201320022903c0163702042013410c6a201b290300370200201341146a201d2802003602002013201c3b0118200742ffffffff0f83200341016aad4220868421072015417f6a22150d000b0b2016450d052007422088a7411c6c22030d01201621030c020b2013450d150c140b201620036a21132016210303402003411c6a22032013470d000b0b2007a72113200241f80e6a200110ab01200320166b411c6d211b0240024020022802f80e0d0020022802fc0e221720012802044105762203200320174b1b22034105742215417f4c0d150240024020030d00410421190c010b2015102c2219450d150b2003ad21070240024002400240024002402017450d000340200241f00e6a200110ab0120022802f00e0d0620022802f40e211c200241003a009818200241e80e6a200110fc0420022f01e80e0d0620022f01ea0e2103200241e00e6a200110fc0420022f01e00e0d0620022f01e20e2115200241013a009818200220153b018218200220033b018018200241d80e6a200110fc0420022f01d80e0d0520022f01da0e2103200241d00e6a200110fc0420022f01d00e0d0520022f01d20e2115200241023a009818200220153b018618200220033b018418200241c80e6a200110fc0420022f01c80e0d0520022f01ca0e2103200241c00e6a200110fc0420022f01c00e0d0520022f01c20e2115200241033a009818200220153b018a18200220033b018818200241b80e6a200110fc0420022f01b80e0d0520022f01ba0e2103200241b00e6a200110fc0420022f01b00e0d0520022f01b20e2115200241043a009818200220153b018e18200220033b018c18200241a80e6a200110fc0420022f01a80e0d0520022f01aa0e2103200241a00e6a200110fc0420022f01a00e0d0520022f01a20e2115200241053a009818200220153b019218200220033b019018200241980e6a200110fc0420022f01980e0d0520022f019a0e2103200241900e6a200110fc0420022f01900e0d0520022f01920e2115200241c0186a41086a221d20024180186a41086a290300370300200220153b019618200220033b019418200241c0186a41106a220320024180186a41106a290300370300200241063a00981820022002290380183703c018200241880e6a200110fc0420022f01880e0d0620022f018a0e211e20024180176a41086a201d290300220a37030020024180176a41106a20032903002211370300200241c0166a41086a221d200a370300200241c0166a41106a221f2011370300200220022903c018220a370380172002200a3703c01602402007422088220aa722152007a7470d00201541016a22032015490d1d20154101742220200320032020491b22034104200341044b1b220341ffffff3f712003464102742120200341057421030240024020150d0020024100360280180c010b200241043602881820022019360280182002200a4205863e0284180b200241c0186a2003202020024180186a107d20022802c818210320022802c0184101460d0320022802c41821192003410576ad21070b201920154105746a2203201c360200200320022903c0163702042003410c6a201d290300370200200341146a201f2903003702002003201e3b011c200742ffffffff0f83201541016aad4220868421072017417f6a22170d000b0b2019450d052007422088a741057422030d01201921030c020b2003450d190c180b201920036a2115201921030340200341206a22032015470d000b0b2007a72117200241800e6a200110ab010240024020022802800e0d0020022802840e221c200128020441246e22152015201c4b1bad42247e2207422088a70d192007a72215417f4c0d190240024020150d004104211e0c010b2015102c221e450d190b201541246ead2107024002400240024002400240201c450d00200241c0176a41186a211f0340200241f80d6a200110ab0120022802f80d0d0620022802fc0d2120200241003a009c18200241f00d6a200110fc0420022f01f00d0d0620022f01f20d2115200241e80d6a200110fc0420022f01e80d0d0620022f01ea0d211d200241013a009c182002201d3b018218200220153b018018200241e00d6a200110fc0420022f01e00d0d0520022f01e20d2115200241d80d6a200110fc0420022f01d80d0d0520022f01da0d211d200241023a009c182002201d3b018618200220153b018418200241d00d6a200110fc0420022f01d00d0d0520022f01d20d2115200241c80d6a200110fc0420022f01c80d0d0520022f01ca0d211d200241033a009c182002201d3b018a18200220153b018818200241c00d6a200110fc0420022f01c00d0d0520022f01c20d2115200241b80d6a200110fc0420022f01b80d0d0520022f01ba0d211d200241043a009c182002201d3b018e18200220153b018c18200241b00d6a200110fc0420022f01b00d0d0520022f01b20d2115200241a80d6a200110fc0420022f01a80d0d0520022f01aa0d211d200241053a009c182002201d3b019218200220153b019018200241a00d6a200110fc0420022f01a00d0d0520022f01a20d2115200241980d6a200110fc0420022f01980d0d0520022f019a0d211d200241063a009c182002201d3b019618200220153b019418200241900d6a200110fc0420022f01900d0d0520022f01920d2115200241880d6a200110fc0420022f01880d0d0520022f018a0d211d200241c0176a41106a222120024180186a41106a290300370300200241c0176a41086a222220024180186a41086a2903003703002002201d3b019a18200220153b019818201f200228029818360200200241073a009c182002200229038018220a3703c0182002200a3703c017200241800d6a200110fc0420022f01800d0d0620022f01820d2123200241c0166a41086a2022290300220a370300200241c0166a41106a20212903002211370300200241c0166a41186a201f280200221536020020024180166a41086a2221200a37030020024180166a41106a2222201137030020024180166a41186a22242015360200200220022903c017220a3703c0162002200a3703801602402007422088a7221d2007a7470d00201d41016a2215201d490d21201d4101742225201520152025491b22154104201541044b1bad42247e2207422088a74541027421152007a7212502400240201d0d0020024100360280180c010b20024104360288182002201e360280182002201d41246c360284180b200241c0186a2025201520024180186a107d20022802c818211520022802c0184101460d0320022802c418211e201541246ead21070b201e201d41246c6a2215202036020020152002290380163702042015410c6a2021290300370200201541146a20222903003702002015411c6a2024280200360200201520233b0120200742ffffffff0f83201d41016aad422086842107201c417f6a221c0d000b0b201e450d052007422088a741246c22150d01201e21150c020b2015450d1d0c1c0b201e20156a211c201e21150340201541246a2215201c470d000b0b2007a7211c200241f80c6a200110ab012015201e6b41246d21210240024020022802f80c0d0020022802fc0c221d200128020441286e22152015201d4b1bad42287e2207422088a70d1d2007a72215417f4c0d1d0240024020150d00410421200c010b2015102c2220450d1d0b201541286ead2107024002400240024002400240201d450d000340200241f00c6a200110ab0120022802f00c0d0620022802f40c2122200241003a00a018200241e80c6a200110fc0420022f01e80c0d0620022f01ea0c2115200241e00c6a200110fc0420022f01e00c0d0620022f01e20c211f200241013a00a0182002201f3b018218200220153b018018200241d80c6a200110fc0420022f01d80c0d0520022f01da0c2115200241d00c6a200110fc0420022f01d00c0d0520022f01d20c211f200241023a00a0182002201f3b018618200220153b018418200241c80c6a200110fc0420022f01c80c0d0520022f01ca0c2115200241c00c6a200110fc0420022f01c00c0d0520022f01c20c211f200241033a00a0182002201f3b018a18200220153b018818200241b80c6a200110fc0420022f01b80c0d0520022f01ba0c2115200241b00c6a200110fc0420022f01b00c0d0520022f01b20c211f200241043a00a0182002201f3b018e18200220153b018c18200241a80c6a200110fc0420022f01a80c0d0520022f01aa0c2115200241a00c6a200110fc0420022f01a00c0d0520022f01a20c211f200241053a00a0182002201f3b019218200220153b019018200241980c6a200110fc0420022f01980c0d0520022f019a0c2115200241900c6a200110fc0420022f01900c0d0520022f01920c211f200241063a00a0182002201f3b019618200220153b019418200241880c6a200110fc0420022f01880c0d0520022f018a0c2115200241800c6a200110fc0420022f01800c0d0520022f01820c211f200241073a00a0182002201f3b019a18200220153b019818200241f80b6a200110fc0420022f01f80b0d0520022f01fa0b2115200241f00b6a200110fc0420022f01f00b0d0520022f01f20b211f200241c0176a41106a222320024180186a41106a2903003703002002201f3b019e18200220153b019c18200241c0176a41186a221520024180186a41186a290300370300200241083a00a018200241c0176a41086a221f20024180186a41086a2903003703002002200229038018220a3703c0182002200a3703c017200241e80b6a200110fc0420022f01e80b0d0620022f01ea0b2124200241c0166a41086a201f290300220a370300200241c0166a41106a20232903002211370300200241c0166a41186a2015290300222637030020024180166a41086a2223200a37030020024180166a41106a2225201137030020024180166a41186a22272026370300200220022903c017220a3703c0162002200a3703801602402007422088a7221f2007a7470d00201f41016a2215201f490d25201f4101742228201520152028491b22154104201541044b1bad42287e2207422088a74541027421152007a7212802400240201f0d0020024100360280180c010b200241043602881820022020360280182002201f41286c360284180b200241c0186a2028201520024180186a107d20022802c818211520022802c0184101460d0320022802c4182120201541286ead21070b2020201f41286c6a2215202236020020152002290380163702042015410c6a2023290300370200201541146a20252903003702002015411c6a2027290300370200201520243b0124200742ffffffff0f83201f41016aad422086842107201d417f6a221d0d000b0b2020450d052007422088a741286c22150d01202021150c020b2015450d210c200b202020156a211d202021150340201541286a2215201d470d000b0b2007a7211d200241e00b6a200110ab01201520206b41286d21240240024020022802e00b0d0020022802e40b221f2001280204412c6e22152015201f4b1bad422c7e2207422088a70d212007a72215417f4c0d210240024020150d00410421220c010b2015102c2222450d210b2015412c6ead2107024002400240024002400240201f450d000340200241d80b6a200110ab0120022802d80b0d0620022802dc0b2125200241003a00a418200241d00b6a200110fc0420022f01d00b0d0620022f01d20b2115200241c80b6a200110fc0420022f01c80b0d0620022f01ca0b2123200241013a00a418200220233b018218200220153b018018200241c00b6a200110fc0420022f01c00b0d0520022f01c20b2115200241b80b6a200110fc0420022f01b80b0d0520022f01ba0b2123200241023a00a418200220233b018618200220153b018418200241b00b6a200110fc0420022f01b00b0d0520022f01b20b2115200241a80b6a200110fc0420022f01a80b0d0520022f01aa0b2123200241033a00a418200220233b018a18200220153b018818200241a00b6a200110fc0420022f01a00b0d0520022f01a20b2115200241980b6a200110fc0420022f01980b0d0520022f019a0b2123200241043a00a418200220233b018e18200220153b018c18200241900b6a200110fc0420022f01900b0d0520022f01920b2115200241880b6a200110fc0420022f01880b0d0520022f018a0b2123200241053a00a418200220233b019218200220153b019018200241800b6a200110fc0420022f01800b0d0520022f01820b2115200241f80a6a200110fc0420022f01f80a0d0520022f01fa0a2123200241063a00a418200220233b019618200220153b019418200241f00a6a200110fc0420022f01f00a0d0520022f01f20a2115200241e80a6a200110fc0420022f01e80a0d0520022f01ea0a2123200241073a00a418200220233b019a18200220153b019818200241e00a6a200110fc0420022f01e00a0d0520022f01e20a2115200241d80a6a200110fc0420022f01d80a0d0520022f01da0a2123200241083a00a418200220233b019e18200220153b019c18200241d00a6a200110fc0420022f01d00a0d0520022f01d20a2115200241c80a6a200110fc0420022f01c80a0d05200220022f01ca0a3b01a218200220153b01a018200241093a00a418200241c0186a41086a20024180186a41086a290300220a370300200241c0186a41106a20024180186a41106a2903002211370300200241c0186a41186a20024180186a41186a2903002226370300200241c0186a41206a20022802a0182215360200200220022903801822293703c018200241c0176a41206a22232015360200200241c0176a41186a22272026370300200241c0176a41106a22282011370300200241c0176a41086a222a200a370300200220293703c017200241c00a6a200110fc0420022f01c00a0d0620022f01c20a212b20024180176a41206a20232802002215360200200241c0166a41086a202a290300220a370300200241c0166a41106a20282903002211370300200241c0166a41186a20272903002226370300200241c0166a41206a201536020020024180166a41086a2227200a37030020024180166a41106a2228201137030020024180166a41186a222a202637030020024180166a41206a222c2015360200200220022903c017220a3703c0162002200a3703801602402007422088a722232007a7470d00202341016a22152023490d292023410174222d20152015202d491b22154104201541044b1bad422c7e2207422088a74541027421152007a7212d0240024020230d0020024100360280180c010b2002410436028818200220223602801820022023412c6c360284180b200241c0186a202d201520024180186a107d20022802c818211520022802c0184101460d0320022802c41821222015412c6ead21070b20222023412c6c6a2215202536020020152002290380163702042015410c6a2027290300370200201541146a20282903003702002015411c6a202a290300370200201541246a202c2802003602002015202b3b0128200742ffffffff0f83202341016aad422086842107201f417f6a221f0d000b0b2022450d052007422088a7412c6c22150d01202221150c020b2015450d250c240b202220156a211f2022211503402015412c6a2215201f470d000b0b2007a7211f200241b80a6a200110ab01201520226b412c6d21280240024020022802b80a0d0020022802bc0a2215200128020441306e2223202320154b1bad42307e2207422088a70d252007a72223417f4c0d250240024020230d00410421250c010b2023102c2225450d250b202341306ead21070240024002400240024002402015450d000340200241b00a6a200110ab0120022802b00a0d0620022802b40a212a200241003a00a818200241a80a6a200110fc0420022f01a80a0d0620022f01aa0a2123200241a00a6a200110fc0420022f01a00a0d0620022f01a20a2127200241013a00a818200220273b018218200220233b018018200241980a6a200110fc0420022f01980a0d0520022f019a0a2123200241900a6a200110fc0420022f01900a0d0520022f01920a2127200241023a00a818200220273b018618200220233b018418200241880a6a200110fc0420022f01880a0d0520022f018a0a2123200241800a6a200110fc0420022f01800a0d0520022f01820a2127200241033a00a818200220273b018a18200220233b018818200241f8096a200110fc0420022f01f8090d0520022f01fa092123200241f0096a200110fc0420022f01f0090d0520022f01f2092127200241043a00a818200220273b018e18200220233b018c18200241e8096a200110fc0420022f01e8090d0520022f01ea092123200241e0096a200110fc0420022f01e0090d0520022f01e2092127200241053a00a818200220273b019218200220233b019018200241d8096a200110fc0420022f01d8090d0520022f01da092123200241d0096a200110fc0420022f01d0090d0520022f01d2092127200241063a00a818200220273b019618200220233b019418200241c8096a200110fc0420022f01c8090d0520022f01ca092123200241c0096a200110fc0420022f01c0090d0520022f01c2092127200241073a00a818200220273b019a18200220233b019818200241b8096a200110fc0420022f01b8090d0520022f01ba092123200241b0096a200110fc0420022f01b0090d0520022f01b2092127200241083a00a818200220273b019e18200220233b019c18200241a8096a200110fc0420022f01a8090d0520022f01aa092123200241a0096a200110fc0420022f01a0090d0520022f01a2092127200241093a00a818200220273b01a218200220233b01a01820024198096a200110fc0420022f0198090d0520022f019a09212320024190096a200110fc0420022f0190090d05200220022f0192093b01a618200220233b01a4182002410a3a00a818200241c0186a41086a20024180186a41086a290300220a370300200241c0186a41106a20024180186a41106a2903002211370300200241c0186a41186a20024180186a41186a2903002226370300200241c0186a41206a20024180186a41206a29030022293703002002200229038018222e3703c018200241c0176a41206a22232029370300200241c0176a41186a22272026370300200241c0176a41106a222b2011370300200241c0176a41086a222c200a3703002002202e3703c01720024188096a200110fc0420022f0188090d0620022f018a09212d20024180176a41206a2023290300220a370300200241c0166a41086a202c2903002211370300200241c0166a41106a202b2903002226370300200241c0166a41186a20272903002229370300200241c0166a41206a200a37030020024180166a41086a222b201137030020024180166a41106a222c202637030020024180166a41186a222f202937030020024180166a41206a2230200a370300200220022903c017220a3703c0162002200a3703801602402007422088a722272007a7470d00202741016a22232027490d2d20274101742231202320232031491b22234104202341044b1bad42307e2207422088a74541027421232007a721310240024020270d0020024100360280180c010b200241043602881820022025360280182002202741306c360284180b200241c0186a2031202320024180186a107d20022802c818212320022802c0184101460d0320022802c4182125202341306ead21070b2025202741306c6a2223202a36020020232002290380163702042023410c6a202b290300370200202341146a202c2903003702002023411c6a202f290300370200202341246a20302903003702002023202d3b012c200742ffffffff0f83202741016aad4220868421072015417f6a22150d000b0b2025450d052007422088a741306c22150d01202521150c020b2023450d290c280b202520156a2123202521150340201541306a22152023470d000b0b2007a7212320024180096a200110ab01201520256b41306d212c024002402002280280090d002002280284092227200128020441346e2215201520274b1bad42347e2207422088a70d292007a72215417f4c0d290240024020150d004104212a0c010b2015102c222a450d290b201541346ead21070240024002400240024002402027450d000340200241f8086a200110ab0120022802f8080d0620022802fc08212d200241003a00ac18200241f0086a200110fc0420022f01f0080d0620022f01f2082115200241e8086a200110fc0420022f01e8080d0620022f01ea08212b200241013a00ac182002202b3b018218200220153b018018200241e0086a200110fc0420022f01e0080d0520022f01e2082115200241d8086a200110fc0420022f01d8080d0520022f01da08212b200241023a00ac182002202b3b018618200220153b018418200241d0086a200110fc0420022f01d0080d0520022f01d2082115200241c8086a200110fc0420022f01c8080d0520022f01ca08212b200241033a00ac182002202b3b018a18200220153b018818200241c0086a200110fc0420022f01c0080d0520022f01c2082115200241b8086a200110fc0420022f01b8080d0520022f01ba08212b200241043a00ac182002202b3b018e18200220153b018c18200241b0086a200110fc0420022f01b0080d0520022f01b2082115200241a8086a200110fc0420022f01a8080d0520022f01aa08212b200241053a00ac182002202b3b019218200220153b019018200241a0086a200110fc0420022f01a0080d0520022f01a208211520024198086a200110fc0420022f0198080d0520022f019a08212b200241063a00ac182002202b3b019618200220153b01941820024190086a200110fc0420022f0190080d0520022f019208211520024188086a200110fc0420022f0188080d0520022f018a08212b200241073a00ac182002202b3b019a18200220153b01981820024180086a200110fc0420022f0180080d0520022f0182082115200241f8076a200110fc0420022f01f8070d0520022f01fa07212b200241083a00ac182002202b3b019e18200220153b019c18200241f0076a200110fc0420022f01f0070d0520022f01f2072115200241e8076a200110fc0420022f01e8070d0520022f01ea07212b200241093a00ac182002202b3b01a218200220153b01a018200241e0076a200110fc0420022f01e0070d0520022f01e2072115200241d8076a200110fc0420022f01d8070d0520022f01da07212b2002410a3a00ac182002202b3b01a618200220153b01a418200241d0076a200110fc0420022f01d0070d0520022f01d2072115200241c8076a200110fc0420022f01c8070d05200220022f01ca073b01aa18200220153b01a8182002410b3a00ac18200241c0186a41086a20024180186a41086a290300220a370300200241c0186a41106a20024180186a41106a2903002211370300200241c0186a41186a20024180186a41186a2903002226370300200241c0186a41206a20024180186a41206a2903002229370300200241c0186a41286a20022802a81822153602002002200229038018222e3703c018200241c0176a41286a222b2015360200200241c0176a41206a222f2029370300200241c0176a41186a22302026370300200241c0176a41106a22312011370300200241c0176a41086a2232200a3703002002202e3703c017200241c0076a200110fc0420022f01c0070d0620022f01c207213320024180176a41286a202b280200221536020020024180176a41206a202f290300220a370300200241c0166a41086a20322903002211370300200241c0166a41106a20312903002226370300200241c0166a41186a20302903002229370300200241c0166a41206a200a370300200241c0166a41286a2015360200200220022903c017222e3703c01620024180166a41286a222f201536020020024180166a41206a2230200a37030020024180166a41186a2231202937030020024180166a41106a2232202637030020024180166a41086a223420113703002002202e3703801602402007422088a7222b2007a7470d00202b41016a2215202b490d31202b4101742235201520152035491b22154104201541044b1bad42347e2207422088a74541027421152007a7213502400240202b0d0020024100360280180c010b20024104360288182002202a360280182002202b41346c360284180b200241c0186a2035201520024180186a107d20022802c818211520022802c0184101460d0320022802c418212a201541346ead21070b202a202b41346c6a2215202d36020020152002290380163702042015410c6a2034290300370200201541146a20322903003702002015411c6a2031290300370200201541246a20302903003702002015412c6a202f280200360200201520333b0130200742ffffffff0f83202b41016aad4220868421072027417f6a22270d000b0b202a450d052007422088a741346c22150d01202a21150c020b2015450d2d0c2c0b202a20156a2127202a21150340201541346a22152027470d000b0b2007a72127200241b8076a200110ab012015202a6b41346d212f0240024020022802b8070d0020022802bc072215200128020441386e222b202b20154b1bad42387e2207422088a70d2d2007a7222b417f4c0d2d02400240202b0d004104212d0c010b202b102c222d450d2d0b202b41386ead21070240024002400240024002402015450d000340200241b0076a200110ab0120022802b0070d0620022802b4072131200241003a00b018200241a8076a200110fc0420022f01a8070d0620022f01aa07212b200241a0076a200110fc0420022f01a0070d0620022f01a2072130200241013a00b018200220303b0182182002202b3b01801820024198076a200110fc0420022f0198070d0520022f019a07212b20024190076a200110fc0420022f0190070d0520022f0192072130200241023a00b018200220303b0186182002202b3b01841820024188076a200110fc0420022f0188070d0520022f018a07212b20024180076a200110fc0420022f0180070d0520022f0182072130200241033a00b018200220303b018a182002202b3b018818200241f8066a200110fc0420022f01f8060d0520022f01fa06212b200241f0066a200110fc0420022f01f0060d0520022f01f2062130200241043a00b018200220303b018e182002202b3b018c18200241e8066a200110fc0420022f01e8060d0520022f01ea06212b200241e0066a200110fc0420022f01e0060d0520022f01e2062130200241053a00b018200220303b0192182002202b3b019018200241d8066a200110fc0420022f01d8060d0520022f01da06212b200241d0066a200110fc0420022f01d0060d0520022f01d2062130200241063a00b018200220303b0196182002202b3b019418200241c8066a200110fc0420022f01c8060d0520022f01ca06212b200241c0066a200110fc0420022f01c0060d0520022f01c2062130200241073a00b018200220303b019a182002202b3b019818200241b8066a200110fc0420022f01b8060d0520022f01ba06212b200241b0066a200110fc0420022f01b0060d0520022f01b2062130200241083a00b018200220303b019e182002202b3b019c18200241a8066a200110fc0420022f01a8060d0520022f01aa06212b200241a0066a200110fc0420022f01a0060d0520022f01a2062130200241093a00b018200220303b01a2182002202b3b01a01820024198066a200110fc0420022f0198060d0520022f019a06212b20024190066a200110fc0420022f0190060d0520022f01920621302002410a3a00b018200220303b01a6182002202b3b01a41820024188066a200110fc0420022f0188060d0520022f018a06212b20024180066a200110fc0420022f0180060d0520022f01820621302002410b3a00b018200220303b01aa182002202b3b01a818200241f8056a200110fc0420022f01f8050d0520022f01fa05212b200241f0056a200110fc0420022f01f0050d05200220022f01f2053b01ae182002202b3b01ac182002410c3a00b018200241c0186a41086a20024180186a41086a290300220a370300200241c0186a41106a20024180186a41106a2903002211370300200241c0186a41186a20024180186a41186a2903002226370300200241c0186a41206a20024180186a41206a2903002229370300200241c0186a41286a20024180186a41286a290300222e370300200220022903801822363703c018200241c0176a41286a222b202e370300200241c0176a41206a22302029370300200241c0176a41186a22322026370300200241c0176a41106a22332011370300200241c0176a41086a2234200a370300200220363703c017200241e8056a200110fc0420022f01e8050d0620022f01ea05213520024180176a41286a202b290300220a37030020024180176a41206a20302903002211370300200241c0166a41086a20342903002226370300200241c0166a41106a20332903002229370300200241c0166a41186a2032290300222e370300200241c0166a41206a2011370300200241c0166a41286a200a370300200220022903c01722363703c01620024180166a41286a2232200a37030020024180166a41206a2233201137030020024180166a41186a2234202e37030020024180166a41106a2237202937030020024180166a41086a22382026370300200220363703801602402007422088a722302007a7470d00203041016a222b2030490d3520304101742239202b202b2039491b222b4104202b41044b1bad42387e2207422088a745410274212b2007a721390240024020300d0020024100360280180c010b20024104360288182002202d360280182002203041386c360284180b200241c0186a2039202b20024180186a107d20022802c818212b20022802c0184101460d0320022802c418212d202b41386ead21070b202d203041386c6a222b2031360200202b200229038016370204202b410c6a2038290300370200202b41146a2037290300370200202b411c6a2034290300370200202b41246a2033290300370200202b412c6a2032290300370200202b20353b0134200742ffffffff0f83203041016aad4220868421072015417f6a22150d000b0b202d450d052007422088a741386c22150d01202d21150c020b202b450d310c300b202d20156a212b202d21150340201541386a2215202b470d000b0b2007a7212b200241e0056a200110ab012015202d6b41386d21320240024020022802e0050d0020022802e40522152001280204413c6e2230203020154b1bad423c7e2207422088a70d312007a72230417f4c0d310240024020300d00410421310c010b2030102c2231450d310b2030413c6ead21070240024002400240024002402015450d000340200241d8056a200110ab0120022802d8050d0620022802dc052134200241003a00b418200241d0056a200110fc0420022f01d0050d0620022f01d2052130200241c8056a200110fc0420022f01c8050d0620022f01ca052133200241013a00b418200220333b018218200220303b018018200241c0056a200110fc0420022f01c0050d0520022f01c2052130200241b8056a200110fc0420022f01b8050d0520022f01ba052133200241023a00b418200220333b018618200220303b018418200241b0056a200110fc0420022f01b0050d0520022f01b2052130200241a8056a200110fc0420022f01a8050d0520022f01aa052133200241033a00b418200220333b018a18200220303b018818200241a0056a200110fc0420022f01a0050d0520022f01a205213020024198056a200110fc0420022f0198050d0520022f019a052133200241043a00b418200220333b018e18200220303b018c1820024190056a200110fc0420022f0190050d0520022f019205213020024188056a200110fc0420022f0188050d0520022f018a052133200241053a00b418200220333b019218200220303b01901820024180056a200110fc0420022f0180050d0520022f0182052130200241f8046a200110fc0420022f01f8040d0520022f01fa042133200241063a00b418200220333b019618200220303b019418200241f0046a200110fc0420022f01f0040d0520022f01f2042130200241e8046a200110fc0420022f01e8040d0520022f01ea042133200241073a00b418200220333b019a18200220303b019818200241e0046a200110fc0420022f01e0040d0520022f01e2042130200241d8046a200110fc0420022f01d8040d0520022f01da042133200241083a00b418200220333b019e18200220303b019c18200241d0046a200110fc0420022f01d0040d0520022f01d2042130200241c8046a200110fc0420022f01c8040d0520022f01ca042133200241093a00b418200220333b01a218200220303b01a018200241c0046a200110fc0420022f01c0040d0520022f01c2042130200241b8046a200110fc0420022f01b8040d0520022f01ba0421332002410a3a00b418200220333b01a618200220303b01a418200241b0046a200110fc0420022f01b0040d0520022f01b2042130200241a8046a200110fc0420022f01a8040d0520022f01aa0421332002410b3a00b418200220333b01aa18200220303b01a818200241a0046a200110fc0420022f01a0040d0520022f01a204213020024198046a200110fc0420022f0198040d0520022f019a0421332002410c3a00b418200220333b01ae18200220303b01ac1820024190046a200110fc0420022f0190040d0520022f019204213020024188046a200110fc0420022f0188040d05200220022f018a043b01b218200220303b01b0182002410d3a00b418200241c0186a41086a223020024180186a41086a290300370300200241c0186a41106a223320024180186a41106a290300370300200241c0186a41186a223520024180186a41186a290300370300200241c0186a41206a223720024180186a41206a290300370300200241c0186a41286a223820024180186a41286a290300370300200241c0186a41306a223920022802b01836020020022002290380183703c018200241c0176a41306a223a2039280200360200200241c0176a41286a22392038290300370300200241c0176a41206a22382037290300370300200241c0176a41186a22372035290300370300200241c0176a41106a22352033290300370300200241c0176a41086a22332030290300370300200220022903c0183703c01720024180046a200110fc0420022f0180040d0620022f018204213b20024180176a41306a203a280200223036020020024180176a41286a2039290300220a37030020024180176a41206a20382903002211370300200241c0166a41086a22382033290300370300200241c0166a41106a22332035290300370300200241c0166a41186a22352037290300370300200241c0166a41206a22372011370300200241c0166a41286a2239200a370300200241c0166a41306a223a2030360200200220022903c0173703c01620024180166a41306a223c203a28020036020020024180166a41286a223a203929030037030020024180166a41206a2239203729030037030020024180166a41186a2237203529030037030020024180166a41106a2235203329030037030020024180166a41086a223d2038290300370300200220022903c0163703801602402007422088a722332007a7470d00203341016a22302033490d3920334101742238203020302038491b22304104203041044b1bad423c7e2207422088a74541027421302007a721380240024020330d0020024100360280180c010b2002410436028818200220313602801820022033413c6c360284180b200241c0186a2038203020024180186a107d20022802c818213020022802c0184101460d0320022802c41821312030413c6ead21070b20312033413c6c6a2230203436020020302002290380163702042030410c6a203d290300370200203041146a20352903003702002030411c6a2037290300370200203041246a20392903003702002030412c6a203a290300370200203041346a203c2802003602002030203b3b0138200742ffffffff0f83203341016aad4220868421072015417f6a22150d000b0b2031450d052007422088a7413c6c22150d01203121150c020b2030450d350c340b203120156a21302031211503402015413c6a22152030470d000b0b2007a72130200241f8036a200110ab01201520316b413c6d21350240024020022802f8030d0020022802fc03221520012802044106762233203320154b1b22334106742234417f4c0d350240024020330d00410421340c010b2034102c2234450d350b2033ad21070240024002400240024002402015450d000340200241f0036a200110ab0120022802f0030d0620022802f4032138200241003a00b818200241e8036a200110fc0420022f01e8030d0620022f01ea032133200241e0036a200110fc0420022f01e0030d0620022f01e2032137200241013a00b818200220373b018218200220333b018018200241d8036a200110fc0420022f01d8030d0520022f01da032133200241d0036a200110fc0420022f01d0030d0520022f01d2032137200241023a00b818200220373b018618200220333b018418200241c8036a200110fc0420022f01c8030d0520022f01ca032133200241c0036a200110fc0420022f01c0030d0520022f01c2032137200241033a00b818200220373b018a18200220333b018818200241b8036a200110fc0420022f01b8030d0520022f01ba032133200241b0036a200110fc0420022f01b0030d0520022f01b2032137200241043a00b818200220373b018e18200220333b018c18200241a8036a200110fc0420022f01a8030d0520022f01aa032133200241a0036a200110fc0420022f01a0030d0520022f01a2032137200241053a00b818200220373b019218200220333b01901820024198036a200110fc0420022f0198030d0520022f019a03213320024190036a200110fc0420022f0190030d0520022f0192032137200241063a00b818200220373b019618200220333b01941820024188036a200110fc0420022f0188030d0520022f018a03213320024180036a200110fc0420022f0180030d0520022f0182032137200241073a00b818200220373b019a18200220333b019818200241f8026a200110fc0420022f01f8020d0520022f01fa022133200241f0026a200110fc0420022f01f0020d0520022f01f2022137200241083a00b818200220373b019e18200220333b019c18200241e8026a200110fc0420022f01e8020d0520022f01ea022133200241e0026a200110fc0420022f01e0020d0520022f01e2022137200241093a00b818200220373b01a218200220333b01a018200241d8026a200110fc0420022f01d8020d0520022f01da022133200241d0026a200110fc0420022f01d0020d0520022f01d20221372002410a3a00b818200220373b01a618200220333b01a418200241c8026a200110fc0420022f01c8020d0520022f01ca022133200241c0026a200110fc0420022f01c0020d0520022f01c20221372002410b3a00b818200220373b01aa18200220333b01a818200241b8026a200110fc0420022f01b8020d0520022f01ba022133200241b0026a200110fc0420022f01b0020d0520022f01b20221372002410c3a00b818200220373b01ae18200220333b01ac18200241a8026a200110fc0420022f01a8020d0520022f01aa022133200241a0026a200110fc0420022f01a0020d0520022f01a20221372002410d3a00b818200220373b01b218200220333b01b01820024198026a200110fc0420022f0198020d0520022f019a02213320024190026a200110fc0420022f0190020d05200220022f0192023b01b618200220333b01b4182002410e3a00b818200241c0186a41086a223320024180186a41086a290300370300200241c0186a41106a223720024180186a41106a290300370300200241c0186a41186a223920024180186a41186a290300370300200241c0186a41206a223a20024180186a41206a290300370300200241c0186a41286a223b20024180186a41286a290300370300200241c0186a41306a223c20024180186a41306a29030037030020022002290380183703c018200241c0176a41306a223d203c290300370300200241c0176a41286a223c203b290300370300200241c0176a41206a223b203a290300370300200241c0176a41186a223a2039290300370300200241c0176a41106a22392037290300370300200241c0176a41086a22372033290300370300200220022903c0183703c01720024188026a200110fc0420022f0188020d0620022f018a02213e20024180176a41306a203d290300220a37030020024180176a41286a203c290300221137030020024180176a41206a203b2903002226370300200241c0166a41086a22332037290300370300200241c0166a41106a22372039290300370300200241c0166a41186a2239203a290300370300200241c0166a41206a223a2026370300200241c0166a41286a223b2011370300200241c0166a41306a223c200a370300200220022903c0173703c01620024180166a41306a223d203c29030037030020024180166a41286a223c203b29030037030020024180166a41206a223b203a29030037030020024180166a41186a223a203929030037030020024180166a41106a2239203729030037030020024180166a41086a223f2033290300370300200220022903c0163703801602402007422088220aa722372007a7470d00203741016a22332037490d3d20374101742240203320332040491b22334104203341044b1b223341ffffff1f712033464102742140203341067421330240024020370d0020024100360280180c010b200241043602881820022034360280182002200a4206863e0284180b200241c0186a2033204020024180186a107d20022802c818213320022802c0184101460d0320022802c41821342033410676ad21070b203420374106746a2233203836020020332002290380163702042033410c6a203f290300370200203341146a20392903003702002033411c6a203a290300370200203341246a203b2903003702002033412c6a203c290300370200203341346a203d2903003702002033203e3b013c200742ffffffff0f83203741016aad4220868421072015417f6a22150d000b0b2034450d052007422088a741067422150d01203421150c020b2033450d390c380b203420156a2133203421150340201541c0006a22152033470d000b0b2007a7213320024180026a200110ab0102402002280280020d002002280284022237200128020441c4006e2238203820374b1bad42c4007e2207422088a70d382007a72238417f4c0d380240024020380d00410421390c010b2038102c2239450d380b203841c4006ead21070240024002400240024002402037450d000340200241f8016a200110ab0120022802f8010d0620022802fc01213b200241003a00bc18200241f0016a200110fc0420022f01f0010d0620022f01f2012138200241e8016a200110fc0420022f01e8010d0620022f01ea01213a200241013a00bc182002203a3b018218200220383b018018200241e0016a200110fc0420022f01e0010d0520022f01e2012138200241d8016a200110fc0420022f01d8010d0520022f01da01213a200241023a00bc182002203a3b018618200220383b018418200241d0016a200110fc0420022f01d0010d0520022f01d2012138200241c8016a200110fc0420022f01c8010d0520022f01ca01213a200241033a00bc182002203a3b018a18200220383b018818200241c0016a200110fc0420022f01c0010d0520022f01c2012138200241b8016a200110fc0420022f01b8010d0520022f01ba01213a200241043a00bc182002203a3b018e18200220383b018c18200241b0016a200110fc0420022f01b0010d0520022f01b2012138200241a8016a200110fc0420022f01a8010d0520022f01aa01213a200241053a00bc182002203a3b019218200220383b019018200241a0016a200110fc0420022f01a0010d0520022f01a201213820024198016a200110fc0420022f0198010d0520022f019a01213a200241063a00bc182002203a3b019618200220383b01941820024190016a200110fc0420022f0190010d0520022f019201213820024188016a200110fc0420022f0188010d0520022f018a01213a200241073a00bc182002203a3b019a18200220383b01981820024180016a200110fc0420022f0180010d0520022f0182012138200241f8006a200110fc0420022f01780d0520022f017a213a200241083a00bc182002203a3b019e18200220383b019c18200241f0006a200110fc0420022f01700d0520022f01722138200241e8006a200110fc0420022f01680d0520022f016a213a200241093a00bc182002203a3b01a218200220383b01a018200241e0006a200110fc0420022f01600d0520022f01622138200241d8006a200110fc0420022f01580d0520022f015a213a2002410a3a00bc182002203a3b01a618200220383b01a418200241d0006a200110fc0420022f01500d0520022f01522138200241c8006a200110fc0420022f01480d0520022f014a213a2002410b3a00bc182002203a3b01aa18200220383b01a818200241c0006a200110fc0420022f01400d0520022f01422138200241386a200110fc0420022f01380d0520022f013a213a2002410c3a00bc182002203a3b01ae18200220383b01ac18200241306a200110fc0420022f01300d0520022f01322138200241286a200110fc0420022f01280d0520022f012a213a2002410d3a00bc182002203a3b01b218200220383b01b018200241206a200110fc0420022f01200d0520022f01222138200241186a200110fc0420022f01180d0520022f011a213a2002410e3a00bc182002203a3b01b618200220383b01b418200241106a200110fc0420022f01100d0520022f01122138200241086a200110fc0420022f01080d05200220022f010a3b01ba18200220383b01b8182002410f3a00bc18200241c0186a41086a223820024180186a41086a290300370300200241c0186a41106a223a20024180186a41106a290300370300200241c0186a41186a223c20024180186a41186a290300370300200241c0186a41206a223d20024180186a41206a290300370300200241c0186a41286a223e20024180186a41286a290300370300200241c0186a41306a223f20024180186a41306a290300370300200241c0186a41386a224020022802b81836020020022002290380183703c018200241c0176a41086a22412038290300370300200241c0176a41106a2238203a290300370300200241c0176a41186a223a203c290300370300200241c0176a41206a223c203d290300370300200241c0176a41286a223d203e290300370300200241c0176a41306a223e203f290300370300200241c0176a41386a223f2040280200360200200220022903c0183703c0172002200110fc0420022f01000d0620022f0102214020024180176a41386a203f280200223f36020020024180176a41306a203e290300220a37030020024180176a41286a203d290300221137030020024180176a41206a203c2903002226370300200241c0166a41086a223c2041290300370300200241c0166a41106a223d2038290300370300200241c0166a41186a2238203a290300370300200241c0166a41206a223a2026370300200241c0166a41286a223e2011370300200241c0166a41306a2241200a370300200241c0166a41386a2242203f360200200220022903c0173703c01620024180166a41386a223f204228020036020020024180166a41306a2242204129030037030020024180166a41286a2241203e29030037030020024180166a41206a223e203a29030037030020024180166a41186a2243203829030037030020024180166a41106a2244203d29030037030020024180166a41086a223d203c290300370300200220022903c0163703801602402007422088a7223a2007a7470d00203a41016a2238203a490d40203a410174223c20382038203c491b22384104203841044b1bad42c4007e2207422088a74541027421382007a7213c02400240203a0d0020024100360280180c010b200241043602881820022039360280182002203a41c4006c360284180b200241c0186a203c203820024180186a107d20022802c818213820022802c0184101460d0320022802c4182139203841c4006ead21070b2039203a41c4006c6a2238203b36020020382002290380163702042038410c6a203d290300370200203841146a20442903003702002038411c6a2043290300370200203841246a203e2903003702002038412c6a2041290300370200203841346a20422903003702002038413c6a203f280200360200203820403b0140200742ffffffff0f83203a41016aad4220868421072037417f6a22370d000b0b2039450d05200420066b41037521372005200b6b4104752105200320196b4105752103201520346b41067521152007a721382007422088a741c4006c22040d01203921040c020b2038450d3c0c3b0b203920046a2101203921040340200441c4006a22042001470d000b0b2000200c36020420002006360200200041b8016a2038360200200041b4016a2039360200200041b0016a2015360200200041ac016a2033360200200041a8016a2034360200200041a4016a2035360200200041a0016a20303602002000419c016a203136020020004198016a203236020020004194016a202b36020020004190016a202d3602002000418c016a202f36020020004188016a202736020020004184016a202a36020020004180016a202c360200200041fc006a2023360200200041f8006a2025360200200041f4006a2028360200200041f0006a201f360200200041ec006a2022360200200041e8006a2024360200200041e4006a201d360200200041e0006a2020360200200041dc006a2021360200200041d8006a201c360200200041d4006a201e360200200041d0006a2003360200200041cc006a2017360200200041c8006a2019360200200041c4006a201b360200200041c0006a20133602002000413c6a2016360200200041386a201a360200200041346a200e360200200041306a20143602002000412c6a2018360200200041286a2009360200200041246a200f360200200041206a20053602002000411c6a2012360200200041186a200b360200200041146a2010360200200041106a200d3602002000410c6a2008360200200041086a2037360200200041bc016a200420396b41c4006d3602000c380b200241003a00bc180b2007a72204450d00200441c4006c450d002039102e0b20004100360200203341ffffff1f71450d032034102e0c030b200241003a00b8180b200742ffffff1f83500d002034102e0b200041003602000b2030450d032030413c6c450d032031102e0c030b200241003a00b4180b2007a72204450d002004413c6c450d002031102e0b200041003602000b202b450d03202b41386c450d03202d102e0c030b200241003a00b0180b2007a72204450d00200441386c450d00202d102e0b200041003602000b2027450d03202741346c450d03202a102e0c030b200241003a00ac180b2007a72204450d00200441346c450d00202a102e0b200041003602000b2023450d03202341306c450d032025102e0c030b200241003a00a8180b2007a72204450d00200441306c450d002025102e0b200041003602000b201f450d03201f412c6c450d032022102e0c030b200241003a00a4180b2007a72204450d002004412c6c450d002022102e0b200041003602000b201d450d03201d41286c450d032020102e0c030b200241003a00a0180b2007a72204450d00200441286c450d002020102e0b200041003602000b201c450d03201c41246c450d03201e102e0c030b200241003a009c180b2007a72204450d00200441246c450d00201e102e0b200041003602000b201741ffffff3f71450d032019102e0c030b200241003a0098180b200742ffffff3f83500d002019102e0b200041003602000b2013450d032013411c6c450d032016102e0c030b200241003a0094180b2007a72204450d002004411c6c450d002016102e0b200041003602000b200e450d03200e41186c450d032014102e0c030b200241003a0090180b2007a72204450d00200441186c450d002014102e0b200041003602000b2009450d03200941146c450d03200f102e0c030b200241003a008c180b2007a72204450d00200441146c450d00200f102e0b200041003602000b201241ffffffff0071450d03200b102e0c030b200241003a0088180b200742ffffffff0083500d00200b102e0b200041003602000b200d450d00200d410c6c450d002008102e0b200c41ffffffff0171450d002006102e0b200241c0196a24000f0b1036000b1038000bc61e01097f230041f0006b2202240020024200370204024020012802082203450d0020034103742104200128020041046a21030340200220032f0100109806200341086a2103200441786a22040d000b0b0240200141146a2802002203450d002003410c6c2104200128020c41086a2103034020032f0100210520022003417c6a2f0100109806200220051098062003410c6a2103200441746a22040d000b0b0240200141206a2802002203450d00200341047421042001280218410c6a210303402002200341786a2f010010980620022003417c6a2f0100109806200220032f0100109806200341106a2103200441706a22040d000b0b02402001412c6a2802002203450d00200341146c2104200128022441106a210303402002200341746a2f01001098062002200341786a2f010010980620022003417c6a2f0100109806200220032f0100109806200341146a21032004416c6a22040d000b0b0240200141386a2802002203450d00200341186c2104200128023041146a210303402002200341706a2f01001098062002200341746a2f01001098062002200341786a2f010010980620022003417c6a2f0100109806200220032f0100109806200341186a2103200441686a22040d000b0b0240200141c4006a2802002203450d00200128023c21052003411c6c21064100210403402002200520046a220341046a2f01001098062002200341086a2f010010980620022003410c6a2f01001098062002200341106a2f01001098062002200341146a2f01001098062002200341186a2f010010980620062004411c6a2204470d000b0b0240200141d0006a2802002203450d0020012802482105200341057421064100210403402002200520046a220341046a2f01001098062002200341086a2f010010980620022003410c6a2f01001098062002200341106a2f01001098062002200341146a2f01001098062002200341186a2f010010980620022003411c6a2f01001098062006200441206a2204470d000b0b0240200141dc006a2802002203450d0020012802542105200341246c21064100210403402002200520046a220341046a2f01001098062002200341086a2f010010980620022003410c6a2f01001098062002200341106a2f01001098062002200341146a2f01001098062002200341186a2f010010980620022003411c6a2f01001098062002200341206a2f01001098062006200441246a2204470d000b0b0240200141e8006a2802002203450d0020012802602105200341286c21064100210403402002200520046a220341046a2f01001098062002200341086a2f010010980620022003410c6a2f01001098062002200341106a2f01001098062002200341146a2f01001098062002200341186a2f010010980620022003411c6a2f01001098062002200341206a2f01001098062002200341246a2f01001098062006200441286a2204470d000b0b0240200141f4006a2802002203450d00200128026c21052003412c6c21064100210403402002200520046a220341046a2f01001098062002200341086a2f010010980620022003410c6a2f01001098062002200341106a2f01001098062002200341146a2f01001098062002200341186a2f010010980620022003411c6a2f01001098062002200341206a2f01001098062002200341246a2f01001098062002200341286a2f010010980620062004412c6a2204470d000b0b024020014180016a2802002203450d0020012802782105200341306c21064100210403402002200520046a220341046a2f01001098062002200341086a2f010010980620022003410c6a2f01001098062002200341106a2f01001098062002200341146a2f01001098062002200341186a2f010010980620022003411c6a2f01001098062002200341206a2f01001098062002200341246a2f01001098062002200341286a2f010010980620022003412c6a2f01001098062006200441306a2204470d000b0b02402001418c016a2802002203450d002001280284012105200341346c21064100210403402002200520046a220341046a2f01001098062002200341086a2f010010980620022003410c6a2f01001098062002200341106a2f01001098062002200341146a2f01001098062002200341186a2f010010980620022003411c6a2f01001098062002200341206a2f01001098062002200341246a2f01001098062002200341286a2f010010980620022003412c6a2f01001098062002200341306a2f01001098062006200441346a2204470d000b0b024020014198016a2802002203450d002001280290012105200341386c21064100210403402002200520046a220341046a2f01001098062002200341086a2f010010980620022003410c6a2f01001098062002200341106a2f01001098062002200341146a2f01001098062002200341186a2f010010980620022003411c6a2f01001098062002200341206a2f01001098062002200341246a2f01001098062002200341286a2f010010980620022003412c6a2f01001098062002200341306a2f01001098062002200341346a2f01001098062006200441386a2204470d000b0b0240200141a4016a2802002203450d00200128029c0121052003413c6c21064100210403402002200520046a220341046a2f01001098062002200341086a2f010010980620022003410c6a2f01001098062002200341106a2f01001098062002200341146a2f01001098062002200341186a2f010010980620022003411c6a2f01001098062002200341206a2f01001098062002200341246a2f01001098062002200341286a2f010010980620022003412c6a2f01001098062002200341306a2f01001098062002200341346a2f01001098062002200341386a2f010010980620062004413c6a2204470d000b0b0240200141b0016a2802002203450d0020012802a8012105200341067421064100210403402002200520046a220341046a2f01001098062002200341086a2f010010980620022003410c6a2f01001098062002200341106a2f01001098062002200341146a2f01001098062002200341186a2f010010980620022003411c6a2f01001098062002200341206a2f01001098062002200341246a2f01001098062002200341286a2f010010980620022003412c6a2f01001098062002200341306a2f01001098062002200341346a2f01001098062002200341386a2f010010980620022003413c6a2f01001098062006200441c0006a2204470d000b0b0240200141bc016a2802002203450d0020012802b4012105200341c4006c21014100210403402002200520046a220341046a2f01001098062002200341086a2f010010980620022003410c6a2f01001098062002200341106a2f01001098062002200341146a2f01001098062002200341186a2f010010980620022003411c6a2f01001098062002200341206a2f01001098062002200341246a2f01001098062002200341286a2f010010980620022003412c6a2f01001098062002200341306a2f01001098062002200341346a2f01001098062002200341386a2f010010980620022003413c6a2f01001098062002200341c0006a2f01001098062001200441c4006a2204470d000b0b02400240200228020422050d004100210541002103410021060c010b200228020821062002280200210420052103034020052f010621012004450d012004417f6a2104200520014102746a41206a2802002105200328022021030c000b0b200241246a2001360200200241206a200536020020022006360228200242003703182002200336021420022004360210024002400240024002400240024002402006450d0020022006417f6a22063602282003450d0141002105024002400340200520032f0106490d010240200328020022010d002003102e410021030c030b20032f010421052003102e200441016a2104200121030c000b0b200541016a2101200320054101746a41086a2f010021072004450d00200320014102746a41206a2802002103024020044101460d00410121050340200328022021032004200541016a2205470d000b0b410021010b200220013602182002200336021420024100360210417f200641016a220320032006491b220420046a22032004490d052003417f4c0d052003102c2208450d02200820073b0100200241306a41186a200241106a41186a2802002204360200200241306a41106a200241106a41106a290300370300200241306a41086a200241106a41086a2903003703002002200229031037033041012106200341017621072004450d0620022004417f6a220936024820022802342203450d032002280238210520022802302104024002400340200520032f0106490d010240200328020022010d002003102e410021030c030b20032f010421052003102e200441016a2104200121030c000b0b200541016a2101200320054101746a41086a2f0100210a2004450d00200320014102746a41206a2802002103024020044101460d00410121050340200328022021032004200541016a2205470d000b0b410021010b20022001360238200220033602342002410036023041012106034002400240024020072006470d00200720066b417f200941016a220320032009491b22034f0d00200620036a22032006490d09200741017422042003200420034b1b22034104200341044b1b220320036a220520034f41017421030240024020070d00200241003602600c010b2002410236026820022004360264200220083602600b200241d0006a20052003200241e0006a107d2002280258210320022802504101460d0120022802542108200341017621070b200820064101746a200a3b0100200641016a2106200228024822030d010c090b20030d040c070b20022003417f6a220936024820022802342203450d05410120022802306b210420022802382105024002400340200520032f0106490d010240200328020022010d002003102e410021030c030b20032f010421052003102e2004417f6a2104200121030c000b0b200541016a2101200320054101746a41086a2f0100210a20044101460d00200320014102746a41206a280200210302402004450d004100210503402003280220210320042005417f6a2205470d000b0b410021010b2002200136023820022003360234200241003602300c000b0b2000410036020820004202370200200241106a10bf020c060b41e8aac700412b41f8b7c0001039000b1036000b41e8aac700412b41f8b7c0001039000b41e8aac700412b41f8b7c0001039000b1038000b200241306a10bf022000200636020820002007360204200020083602000b200241f0006a24000b870e010c7f024002400240024002400240024002400240024002400240024020002802042202450d00200028020021030c010b4120102c2202450d0141002103200241003b01062002410036020020002002360204200041003602000b200141ffff037121040240034020022f01062205410174210641002107417f210802400340024020062007470d00200521080c020b200220076a2109200841016a2108200741026a2107417f200941086a2f01002209200447200920044b1b41016a0e03010300010b0b02402003450d002003417f6a2103200220084102746a41206a28020021020c010b0b0240024020022f01062207410a4b0d00200241086a2104200741016a21090240200841016a220620074b0d00200420064101746a200420084101746a20092008417f736a41017410ea081a0b200420084101746a20013b0100200220093b01060c010b410521074100210602400240200841054f0d0041042107200821040c010b41052104024002402008417b6a0e020201000b200841796a210441012106410621070c010b41002104410121060b4120102c2208450d02200841003b010620084100360200200820022f010622032007417f736a22093b01062009410c4f0d032003200741016a22056b2009470d04200241086a220320074101746a2f0100210a200841086a200320054101746a200941017410e9081a200220073b01062008200220061b220741086a210920072f0106220341016a21060240200441016a220520034b0d00200920054101746a200920044101746a20062004417f736a41017410ea081a0b200920044101746a20013b0100200720063b0106024002400240200228020022030d00410021010c010b410021012008210b200a210c03404101450d0820022f0104210920032f01062205410b490d024100210641042107024020094105490d0020092107024002402009417b6a0e020201000b200941796a210941012106410621070c010b4100210941012106410521070b41d000102c2208450d05200841003b010620084100360200200820032f0106220a2007417f736a22023b01062002410c4f0d09200a200741016a22046b2002470d0a200341086a220d20074101746a2f0100210a200841086a200d20044101746a200241017410e9081a200320073b010620082f0106220241016a210d2002410c4f0d0b200520076b2207200d470d0c200141016a2101200841206a200320044102746a41206a200741027410e9081a4100210702400340200820074102746a41206a280200220420073b0104200420083602002007200720024922046a220720024b0d0120040d000b0b2008200320061b220441086a210220042f0106220541016a21060240200941016a220720054b0d00200220074101746a200220094101746a2009417f7320066a41017410ea081a0b200220094101746a200c3b0100200441206a21020240200941026a220c200541026a22054f0d002002200c4102746a200220074102746a2007417f7320056a41027410ea081a0b200220074102746a200b360200200420063b01060240200720054f0d00200420094102746a41246a2107034020072802002202200941016a22093b010420022004360200200741046a210720062009470d000b0b200321022003280200220721032008210b200a210c20070d000b0b20002802042202450d0b2000280200210441d000102c2207450d0320072002360220200741003b010620074100360200200241003b010420022007360200200020073602042000200441016a36020020042001470d0c20072f01062202410b4f0d0d2007200241016a22043b0106200720024101746a41086a200a3b0100200720044102746a41206a2008360200200820043b0104200820073602002000200028020841016a3602080f0b200941016a2107200341086a210220032f0106220841016a21040240200920084f22050d00200220074101746a200220094101746a2009417f7320046a41017410ea081a0b200220094101746a200c3b0100200341206a2102200841026a2106024020050d00200941027420026a41086a200220074102746a2007417f7320066a41027410ea081a0b200220074102746a200b360200200320043b0106200720064f0d00200841016a210420032007417f6a22074102746a41246a2108034020082802002202200741016a22073b010420022003360200200841046a210820042007470d000b0b2000200028020841016a3602080b0f0b1036000b2009410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b41ac9cc700413541e49cc7001039000b2002410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b200d410c41f49cc700104d000b41f49bc7004128419c9cc7001039000b41e8aac700412b4194abc7001039000b41e899c700413041989ac7001039000b41a89ac700412041c89ac7001039000bfd8c0103087f057ebb017f230041e00a6b22042400200420033602bc08200441f8096a4200370300200441f0096a4280808080c000370300200441e0096a4200370300200441d8096a4280808080c000370300200441c0086a4188016a4200370300200441c0096a4280808080c000370300200441b0096a4200370300200441a8096a4280808080c00037030020044198096a420037030020044190096a4280808080c00037030020044180096a4200370300200441c0086a41386a4280808080c000370300200441c0086a41286a4200370300200441c0086a41206a4280808080c000370300200441c0086a41106a4200370300200442043703e809200442043703d009200442043703b809200442043703a0092004420437038809200442043703f008200442043703d80820044280808080c0003703c808200442043703c0082001280200220520012802082203412c6c22066a210720012802042108200521010240024002402003450d00200641546a2103200441a00a6a41186a2109200441a00a6a41106a210a200441a00a6a41086a210b2005210602400340200641046a290200210c200628020021012009200641246a290200370300200a2006411c6a290200370300200b200641146a29020037030020042006410c6a2902003703a00a024020010d002006412c6a21010c030b200441800a6a41186a2009290300220d370300200441800a6a41106a200a290300220e370300200441800a6a41086a200b290300220f370300200420042903a00a22103703800a2009200d370300200a200e370300200b200f370300200420103703a00a02400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200c422088a70e1113000102030405060708090a0b0c0d0e0f140b2002280200200441a00a6a10a0022211450d14201128020021122004200441bc086a2001109a06024020042f01002213450d0020042f010221140240024020042802c808221120042802c408470d00201141016a22152011490da201201141017422162015201620154b1b22154104201541044b1b221541ffffffff01712015464102742116201541037421150240024020110d00200441003602d00a0c010b200441043602d80a200420042802c0083602d00a200420114103743602d40a0b200441c00a6a20152016200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a3602c008200420114103763602c40820042802c80821110b20042802c00820114103746a22112014201720131b22173b010420112012360200200420042802c80841016a3602c8080c110b2011450da0010ca2010b20004281808080203702000c9c010b2002280200200441a00a6a10a0022211450d1420112802002112200441106a200441bc086a2001109a0620042f01102213450d1520042f0112211420012f01202115200441086a200441bc086a200141226a109a06024020042f01082216450d0020042f010a21180240024020042802d408221120042802d008470d00201141016a22192011490da1012011410174221a2019201a20194b1b22194104201941044b1bad420c7e220d422088a7454102742119200da7211a0240024020110d00200441003602d00a0c010b200441043602d80a200420042802cc083602d00a20042011410c6c3602d40a0b200441c00a6a201a2019200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a3602cc0820042011410c6e3602d00820042802d40821110b20042802cc082011410c6c6a22112018201b20161b221b3b010820112014201c20131b221c3b010420112012360200201141066a20153b0100200420042802d40841016a3602d4080c100b20110da1010c9f010b20004281808080203702000c9b010b2002280200200441a00a6a10a0022211450d1520112802002112200441286a200441bc086a2001109a0620042f01282213450d1620042f012a211420012f01202115200441206a200441bc086a200141226a109a0620042f01202216450d1720042f01222118200141c2006a2f01002119200441186a200441bc086a200141c4006a109a06024020042f0118221a450d0020042f011a211d0240024020042802e008221120042802dc08470d00201141016a221e2011490da0012011410174221f201e201f201e4b1b221e4104201e41044b1b221e41ffffffff0071201e46410274211f201e410474211e0240024020110d00200441003602d00a0c010b200420042802d8083602d00a200441043602d80a200420114104743602d40a0b200441c00a6a201e201f200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a3602d808200420114104763602dc0820042802e00821110b20042802d80820114104746a2211201d2020201a1b22203b010c20112014202120131b22213b0104201120123602002011410a6a20193b0100201141086a2018202220161b22223b0100201141066a20153b0100200420042802e00841016a3602e0080c0f0b20110da0010c9e010b20004281808080203702000c9a010b2002280200200441a00a6a10a0022211450d1720112802002112200441c8006a200441bc086a2001109a0620042f01482213450d1820042f014a211420012f01202115200441c0006a200441bc086a200141226a109a0620042f01402216450d1920042f01422118200141c2006a2f01002119200441386a200441bc086a200141c4006a109a0620042f0138221a450d1a20042f013a211d200141e4006a2f0100211e200441306a200441bc086a200141e6006a109a06024020042f0130221f450d0020042f013221230240024020042802ec08221120042802e808470d00201141016a22242011490d9f01201141017422252024202520244b1b22244104202441044b1bad42147e220d422088a7454102742124200da721250240024020110d00200441003602d00a0c010b200441043602d80a200420042802e4083602d00a2004201141146c3602d40a0b200441c00a6a20252024200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a3602e4082004201141146e3602e80820042802ec0821110b20042802e408201141146c6a221120232026201f1b22263b011020112014202720131b22273b0104201120123602002011410e6a201e3b01002011410c6a201d2028201a1b22283b01002011410a6a20193b0100201141086a2018202920161b22293b0100201141066a20153b0100200420042802ec0841016a3602ec080c0e0b20110d9f010c9d010b20004281808080203702000c99010b2002280200200441a00a6a10a0022211450d1a20112802002112200441f0006a200441bc086a2001109a0620042f01702213450d1b20042f0172211420012f01202115200441e8006a200441bc086a200141226a109a0620042f01682216450d1c20042f016a2118200141c2006a2f01002119200441e0006a200441bc086a200141c4006a109a0620042f0160221a450d1d20042f0162211d200141e4006a2f0100211e200441d8006a200441bc086a200141e6006a109a0620042f0158221f450d1e20042f015a212320014186016a2f01002124200441d0006a200441bc086a20014188016a109a06024020042f01502225450d0020042f0152212a0240024020042802f808221120042802f408470d00201141016a222b2011490d9e012011410174222c202b202c202b4b1b222b4104202b41044b1bad42187e220d422088a745410274212b200da7212c0240024020110d00200441003602d00a0c010b200441043602d80a200420042802f0083602d00a2004201141186c3602d40a0b200441c00a6a202c202b200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a3602f0082004201141186e3602f40820042802f80821110b20042802f008201141186c6a2211202a202d20251b222d3b011420112014202e20131b222e3b010420112012360200201141126a20243b0100201141106a2023202f201f1b222f3b01002011410e6a201e3b01002011410c6a201d2030201a1b22303b01002011410a6a20193b0100201141086a2018203120161b22313b0100201141066a20153b0100200420042802f80841016a3602f8080c0d0b20110d9e010c9c010b20004281808080203702000c98010b2002280200200441a00a6a10a0022211450d1e20112802002112200441a0016a200441bc086a2001109a0620042f01a0012213450d1f20042f01a201211420012f0120211520044198016a200441bc086a200141226a109a0620042f0198012216450d2020042f019a012118200141c2006a2f0100211920044190016a200441bc086a200141c4006a109a0620042f019001221a450d2120042f019201211d200141e4006a2f0100211e20044188016a200441bc086a200141e6006a109a0620042f018801221f450d2220042f018a01212320014186016a2f0100212420044180016a200441bc086a20014188016a109a0620042f0180012225450d2320042f018201212a200141a8016a2f0100212b200441f8006a200441bc086a200141aa016a109a06024020042f0178222c450d0020042f017a2132024002402004280284092211200428028009470d00201141016a22332011490d9d01201141017422342033203420334b1b22334104203341044b1bad421c7e220d422088a7454102742133200da721340240024020110d00200441003602d00a0c010b200441043602d80a200420042802fc083602d00a20042011411c6c3602d40a0b200441c00a6a20342033200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a3602fc0820042011411c6e3602800920042802840921110b20042802fc082011411c6c6a221120322035202c1b22353b011820112014203620131b22363b010420112012360200201141166a202b3b0100201141146a202a203720251b22373b0100201141126a20243b0100201141106a20232038201f1b22383b01002011410e6a201e3b01002011410c6a201d2039201a1b22393b01002011410a6a20193b0100201141086a2018203a20161b223a3b0100201141066a20153b0100200420042802840941016a360284090c0c0b20110d9d010c9b010b20004281808080203702000c97010b2002280200200441a00a6a10a0022211450d2320112802002112200441d8016a200441bc086a2001109a0620042f01d8012213450d2420042f01da01211420012f01202115200441d0016a200441bc086a200141226a109a0620042f01d0012216450d2520042f01d2012118200141c2006a2f01002119200441c8016a200441bc086a200141c4006a109a0620042f01c801221a450d2620042f01ca01211d200141e4006a2f0100211e200441c0016a200441bc086a200141e6006a109a0620042f01c001221f450d2720042f01c201212320014186016a2f01002124200441b8016a200441bc086a20014188016a109a0620042f01b8012225450d2820042f01ba01212a200141a8016a2f0100212b200441b0016a200441bc086a200141aa016a109a0620042f01b001222c450d2920042f01b2012132200141ca016a2f01002133200441a8016a200441bc086a200141cc016a109a06024020042f01a8012234450d0020042f01aa01213b024002402004280290092211200428028c09470d00201141016a223c2011490d9c012011410174223d203c203d203c4b1b223c4104203c41044b1b223c41ffffff3f71203c46410274213d203c410574213c0240024020110d00200441003602d00a0c010b200441043602d80a20042004280288093602d00a200420114105743602d40a0b200441c00a6a203c203d200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a360288092004201141057636028c0920042802900921110b20042802880920114105746a2211203b203e20341b223e3b011c20112014203f20131b223f3b0104201120123602002011411a6a20333b0100201141186a20322040202c1b22403b0100201141166a202b3b0100201141146a202a204120251b22413b0100201141126a20243b0100201141106a20232042201f1b22423b01002011410e6a201e3b01002011410c6a201d2043201a1b22433b01002011410a6a20193b0100201141086a2018204420161b22443b0100201141066a20153b0100200420042802900941016a360290090c0b0b20110d9c010c9a010b20004281808080203702000c96010b2002280200200441a00a6a10a0022211450d292011280200211220044198026a200441bc086a2001109a0620042f0198022213450d2a20042f019a02211420012f0120211520044190026a200441bc086a200141226a109a0620042f0190022216450d2b20042f0192022118200141c2006a2f0100211920044188026a200441bc086a200141c4006a109a0620042f018802221a450d2c20042f018a02211d200141e4006a2f0100211e20044180026a200441bc086a200141e6006a109a0620042f018002221f450d2d20042f018202212320014186016a2f01002124200441f8016a200441bc086a20014188016a109a0620042f01f8012225450d2e20042f01fa01212a200141a8016a2f0100212b200441f0016a200441bc086a200141aa016a109a0620042f01f001222c450d2f20042f01f2012132200141ca016a2f01002133200441e8016a200441bc086a200141cc016a109a0620042f01e8012234450d3020042f01ea01213b200141ec016a2f0100213c200441e0016a200441bc086a200141ee016a109a06024020042f01e001223d450d0020042f01e201214502400240200428029c092211200428029809470d00201141016a22462011490d9b01201141017422472046204720464b1b22464104204641044b1bad42247e220d422088a7454102742146200da721470240024020110d00200441003602d00a0c010b200441043602d80a20042004280294093602d00a2004201141246c3602d40a0b200441c00a6a20472046200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a360294092004201141246e36029809200428029c0921110b200428029409201141246c6a221120452048203d1b22483b012020112014204920131b22493b0104201120123602002011411e6a203c3b01002011411c6a203b204a20341b224a3b01002011411a6a20333b0100201141186a2032204b202c1b224b3b0100201141166a202b3b0100201141146a202a204c20251b224c3b0100201141126a20243b0100201141106a2023204d201f1b224d3b01002011410e6a201e3b01002011410c6a201d204e201a1b224e3b01002011410a6a20193b0100201141086a2018204f20161b224f3b0100201141066a20153b01002004200428029c0941016a36029c090c0a0b20110d9b010c99010b20004281808080203702000c95010b2002280200200441a00a6a10a0022211450d3020112802002112200441e0026a200441bc086a2001109a0620042f01e0022213450d3120042f01e202211420012f01202115200441d8026a200441bc086a200141226a109a0620042f01d8022216450d3220042f01da022118200141c2006a2f01002119200441d0026a200441bc086a200141c4006a109a0620042f01d002221a450d3320042f01d202211d200141e4006a2f0100211e200441c8026a200441bc086a200141e6006a109a0620042f01c802221f450d3420042f01ca02212320014186016a2f01002124200441c0026a200441bc086a20014188016a109a0620042f01c0022225450d3520042f01c202212a200141a8016a2f0100212b200441b8026a200441bc086a200141aa016a109a0620042f01b802222c450d3620042f01ba022132200141ca016a2f01002133200441b0026a200441bc086a200141cc016a109a0620042f01b0022234450d3720042f01b202213b200141ec016a2f0100213c200441a8026a200441bc086a200141ee016a109a0620042f01a802223d450d3820042f01aa0221452001418e026a2f01002146200441a0026a200441bc086a20014190026a109a06024020042f01a0022247450d0020042f01a20221500240024020042802a809221120042802a409470d00201141016a22512011490d9a01201141017422522051205220514b1b22514104205141044b1bad42287e220d422088a7454102742151200da721520240024020110d00200441003602d00a0c010b200441043602d80a200420042802a0093602d00a2004201141286c3602d40a0b200441c00a6a20522051200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a3602a0092004201141286e3602a40920042802a80921110b20042802a009201141286c6a22112050205320471b22533b012420112014205420131b22543b010420112012360200201141226a20463b0100201141206a20452055203d1b22553b01002011411e6a203c3b01002011411c6a203b205620341b22563b01002011411a6a20333b0100201141186a20322057202c1b22573b0100201141166a202b3b0100201141146a202a205820251b22583b0100201141126a20243b0100201141106a20232059201f1b22593b01002011410e6a201e3b01002011410c6a201d205a201a1b225a3b01002011410a6a20193b0100201141086a2018205b20161b225b3b0100201141066a20153b0100200420042802a80941016a3602a8090c090b20110d9a010c98010b20004281808080203702000c94010b2002280200200441a00a6a10a0022211450d3820112802002112200441b0036a200441bc086a2001109a0620042f01b0032213450d3920042f01b203211420012f01202115200441a8036a200441bc086a200141226a109a0620042f01a8032216450d3a20042f01aa032118200141c2006a2f01002119200441a0036a200441bc086a200141c4006a109a0620042f01a003221a450d3b20042f01a203211d200141e4006a2f0100211e20044198036a200441bc086a200141e6006a109a0620042f019803221f450d3c20042f019a03212320014186016a2f0100212420044190036a200441bc086a20014188016a109a0620042f0190032225450d3d20042f019203212a200141a8016a2f0100212b20044188036a200441bc086a200141aa016a109a0620042f018803222c450d3e20042f018a032132200141ca016a2f0100213320044180036a200441bc086a200141cc016a109a0620042f0180032234450d3f20042f018203213b200141ec016a2f0100213c200441f8026a200441bc086a200141ee016a109a0620042f01f802223d450d4020042f01fa0221452001418e026a2f01002146200441f0026a200441bc086a20014190026a109a0620042f01f0022247450d4120042f01f2022150200141b0026a2f01002151200441e8026a200441bc086a200141b2026a109a06024020042f01e8022252450d0020042f01ea02215c0240024020042802b409221120042802b009470d00201141016a225d2011490d99012011410174225e205d205e205d4b1b225d4104205d41044b1bad422c7e220d422088a745410274215d200da7215e0240024020110d00200441003602d00a0c010b200441043602d80a200420042802ac093602d00a20042011412c6c3602d40a0b200441c00a6a205e205d200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a3602ac0920042011412c6e3602b00920042802b40921110b20042802ac092011412c6c6a2211205c205f20521b225f3b012820112014206020131b22603b010420112012360200201141266a20513b0100201141246a2050206120471b22613b0100201141226a20463b0100201141206a20452062203d1b22623b01002011411e6a203c3b01002011411c6a203b206320341b22633b01002011411a6a20333b0100201141186a20322064202c1b22643b0100201141166a202b3b0100201141146a202a206520251b22653b0100201141126a20243b0100201141106a20232066201f1b22663b01002011410e6a201e3b01002011410c6a201d2067201a1b22673b01002011410a6a20193b0100201141086a2018206820161b22683b0100201141066a20153b0100200420042802b40941016a3602b4090c080b20110d99010c97010b20004281808080203702000c93010b2002280200200441a00a6a10a0022211450d412011280200211220044188046a200441bc086a2001109a0620042f0188042213450d4220042f018a04211420012f0120211520044180046a200441bc086a200141226a109a0620042f0180042216450d4320042f0182042118200141c2006a2f01002119200441f8036a200441bc086a200141c4006a109a0620042f01f803221a450d4420042f01fa03211d200141e4006a2f0100211e200441f0036a200441bc086a200141e6006a109a0620042f01f003221f450d4520042f01f203212320014186016a2f01002124200441e8036a200441bc086a20014188016a109a0620042f01e8032225450d4620042f01ea03212a200141a8016a2f0100212b200441e0036a200441bc086a200141aa016a109a0620042f01e003222c450d4720042f01e2032132200141ca016a2f01002133200441d8036a200441bc086a200141cc016a109a0620042f01d8032234450d4820042f01da03213b200141ec016a2f0100213c200441d0036a200441bc086a200141ee016a109a0620042f01d003223d450d4920042f01d20321452001418e026a2f01002146200441c8036a200441bc086a20014190026a109a0620042f01c8032247450d4a20042f01ca032150200141b0026a2f01002151200441c0036a200441bc086a200141b2026a109a0620042f01c0032252450d4b20042f01c203215c200141d2026a2f0100215d200441b8036a200441bc086a200141d4026a109a06024020042f01b803225e450d0020042f01ba0321690240024020042802c009221120042802bc09470d00201141016a226a2011490d98012011410174226b206a206b206a4b1b226a4104206a41044b1bad42307e220d422088a745410274216a200da7216b0240024020110d00200441003602d00a0c010b200441043602d80a200420042802b8093602d00a2004201141306c3602d40a0b200441c00a6a206b206a200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a3602b8092004201141306e3602bc0920042802c00921110b20042802b809201141306c6a22112069206c205e1b226c3b012c20112014206d20131b226d3b0104201120123602002011412a6a205d3b0100201141286a205c206e20521b226e3b0100201141266a20513b0100201141246a2050206f20471b226f3b0100201141226a20463b0100201141206a20452070203d1b22703b01002011411e6a203c3b01002011411c6a203b207120341b22713b01002011411a6a20333b0100201141186a20322072202c1b22723b0100201141166a202b3b0100201141146a202a207320251b22733b0100201141126a20243b0100201141106a20232074201f1b22743b01002011410e6a201e3b01002011410c6a201d2075201a1b22753b01002011410a6a20193b0100201141086a2018207620161b22763b0100201141066a20153b0100200420042802c00941016a3602c0090c070b20110d98010c96010b20004281808080203702000c92010b2002280200200441a00a6a10a0022211450d4b20112802002112200441e8046a200441bc086a2001109a0620042f01e8042213450d4c20042f01ea04211420012f01202115200441e0046a200441bc086a200141226a109a0620042f01e0042216450d4d20042f01e2042118200141c2006a2f01002119200441d8046a200441bc086a200141c4006a109a0620042f01d804221a450d4e20042f01da04211d200141e4006a2f0100211e200441d0046a200441bc086a200141e6006a109a0620042f01d004221f450d4f20042f01d204212320014186016a2f01002124200441c8046a200441bc086a20014188016a109a0620042f01c8042225450d5020042f01ca04212a200141a8016a2f0100212b200441c0046a200441bc086a200141aa016a109a0620042f01c004222c450d5120042f01c2042132200141ca016a2f01002133200441b8046a200441bc086a200141cc016a109a0620042f01b8042234450d5220042f01ba04213b200141ec016a2f0100213c200441b0046a200441bc086a200141ee016a109a0620042f01b004223d450d5320042f01b20421452001418e026a2f01002146200441a8046a200441bc086a20014190026a109a0620042f01a8042247450d5420042f01aa042150200141b0026a2f01002151200441a0046a200441bc086a200141b2026a109a0620042f01a0042252450d5520042f01a204215c200141d2026a2f0100215d20044198046a200441bc086a200141d4026a109a0620042f019804225e450d5620042f019a042169200141f4026a2f0100216a20044190046a200441bc086a200141f6026a109a06024020042f019004226b450d0020042f01920421770240024020042802cc09221120042802c809470d00201141016a22782011490d9701201141017422792078207920784b1b22784104207841044b1bad42347e220d422088a7454102742178200da721790240024020110d00200441003602d00a0c010b200441043602d80a200420042802c4093602d00a2004201141346c3602d40a0b200441c00a6a20792078200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a3602c4092004201141346e3602c80920042802cc0921110b20042802c409201141346c6a22112077207a206b1b227a3b013020112014207b20131b227b3b0104201120123602002011412e6a206a3b01002011412c6a2069207c205e1b227c3b01002011412a6a205d3b0100201141286a205c207d20521b227d3b0100201141266a20513b0100201141246a2050207e20471b227e3b0100201141226a20463b0100201141206a2045207f203d1b227f3b01002011411e6a203c3b01002011411c6a203b20800120341b2280013b01002011411a6a20333b0100201141186a2032208101202c1b2281013b0100201141166a202b3b0100201141146a202a20820120251b2282013b0100201141126a20243b0100201141106a2023208301201f1b2283013b01002011410e6a201e3b01002011410c6a201d208401201a1b2284013b01002011410a6a20193b0100201141086a201820850120161b2285013b0100201141066a20153b0100200420042802cc0941016a3602cc090c060b20110d97010c95010b20004281808080203702000c91010b2002280200200441a00a6a10a0022211450d5620112802002112200441d0056a200441bc086a2001109a0620042f01d0052213450d5720042f01d205211420012f01202115200441c8056a200441bc086a200141226a109a0620042f01c8052216450d5820042f01ca052118200141c2006a2f01002119200441c0056a200441bc086a200141c4006a109a0620042f01c005221a450d5920042f01c205211d200141e4006a2f0100211e200441b8056a200441bc086a200141e6006a109a0620042f01b805221f450d5a20042f01ba05212320014186016a2f01002124200441b0056a200441bc086a20014188016a109a0620042f01b0052225450d5b20042f01b205212a200141a8016a2f0100212b200441a8056a200441bc086a200141aa016a109a0620042f01a805222c450d5c20042f01aa052132200141ca016a2f01002133200441a0056a200441bc086a200141cc016a109a0620042f01a0052234450d5d20042f01a205213b200141ec016a2f0100213c20044198056a200441bc086a200141ee016a109a0620042f019805223d450d5e20042f019a0521452001418e026a2f0100214620044190056a200441bc086a20014190026a109a0620042f0190052247450d5f20042f0192052150200141b0026a2f0100215120044188056a200441bc086a200141b2026a109a0620042f0188052252450d6020042f018a05215c200141d2026a2f0100215d20044180056a200441bc086a200141d4026a109a0620042f018005225e450d6120042f0182052169200141f4026a2f0100216a200441f8046a200441bc086a200141f6026a109a0620042f01f804226b450d6220042f01fa04217720014196036a2f01002178200441f0046a200441bc086a20014198036a109a06024020042f01f0042279450d0020042f01f2042186010240024020042802d809221120042802d409470d00201141016a2287012011490d960120114101742288012087012088012087014b1b228701410420870141044b1bad42387e220d422088a745410274218701200da72188010240024020110d00200441003602d00a0c010b200441043602d80a200420042802d0093602d00a2004201141386c3602d40a0b200441c00a6a208801208701200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a3602d0092004201141386e3602d40920042802d80921110b20042802d009201141386c6a221120860120890120791b2289013b013420112014208a0120131b228a013b010420112012360200201141326a20783b0100201141306a2077208b01206b1b228b013b01002011412e6a206a3b01002011412c6a2069208c01205e1b228c013b01002011412a6a205d3b0100201141286a205c208d0120521b228d013b0100201141266a20513b0100201141246a2050208e0120471b228e013b0100201141226a20463b0100201141206a2045208f01203d1b228f013b01002011411e6a203c3b01002011411c6a203b20900120341b2290013b01002011411a6a20333b0100201141186a2032209101202c1b2291013b0100201141166a202b3b0100201141146a202a20920120251b2292013b0100201141126a20243b0100201141106a2023209301201f1b2293013b01002011410e6a201e3b01002011410c6a201d209401201a1b2294013b01002011410a6a20193b0100201141086a201820950120161b2295013b0100201141066a20153b0100200420042802d80941016a3602d8090c050b20110d96010c94010b20004281808080203702000c90010b2002280200200441a00a6a10a0022211450d6220112802002112200441c0066a200441bc086a2001109a0620042f01c0062213450d6320042f01c206211420012f01202115200441b8066a200441bc086a200141226a109a0620042f01b8062216450d6420042f01ba062118200141c2006a2f01002119200441b0066a200441bc086a200141c4006a109a0620042f01b006221a450d6520042f01b206211d200141e4006a2f0100211e200441a8066a200441bc086a200141e6006a109a0620042f01a806221f450d6620042f01aa06212320014186016a2f01002124200441a0066a200441bc086a20014188016a109a0620042f01a0062225450d6720042f01a206212a200141a8016a2f0100212b20044198066a200441bc086a200141aa016a109a0620042f019806222c450d6820042f019a062132200141ca016a2f0100213320044190066a200441bc086a200141cc016a109a0620042f0190062234450d6920042f019206213b200141ec016a2f0100213c20044188066a200441bc086a200141ee016a109a0620042f018806223d450d6a20042f018a0621452001418e026a2f0100214620044180066a200441bc086a20014190026a109a0620042f0180062247450d6b20042f0182062150200141b0026a2f01002151200441f8056a200441bc086a200141b2026a109a0620042f01f8052252450d6c20042f01fa05215c200141d2026a2f0100215d200441f0056a200441bc086a200141d4026a109a0620042f01f005225e450d6d20042f01f2052169200141f4026a2f0100216a200441e8056a200441bc086a200141f6026a109a0620042f01e805226b450d6e20042f01ea05217720014196036a2f01002178200441e0056a200441bc086a20014198036a109a0620042f01e0052279450d6f20042f01e205218601200141b8036a2f0100218701200441d8056a200441bc086a200141ba036a109a06024020042f01d805228801450d0020042f01da052196010240024020042802e409221120042802e009470d00201141016a2297012011490d950120114101742298012097012098012097014b1b229701410420970141044b1bad423c7e220d422088a745410274219701200da72198010240024020110d00200441003602d00a0c010b200441043602d80a200420042802dc093602d00a20042011413c6c3602d40a0b200441c00a6a209801209701200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a3602dc0920042011413c6e3602e00920042802e40921110b20042802dc092011413c6c6a22112096012099012088011b2299013b013820112014209a0120131b229a013b010420112012360200201141366a2087013b0100201141346a208601209b0120791b229b013b0100201141326a20783b0100201141306a2077209c01206b1b229c013b01002011412e6a206a3b01002011412c6a2069209d01205e1b229d013b01002011412a6a205d3b0100201141286a205c209e0120521b229e013b0100201141266a20513b0100201141246a2050209f0120471b229f013b0100201141226a20463b0100201141206a204520a001203d1b22a0013b01002011411e6a203c3b01002011411c6a203b20a10120341b22a1013b01002011411a6a20333b0100201141186a203220a201202c1b22a2013b0100201141166a202b3b0100201141146a202a20a30120251b22a3013b0100201141126a20243b0100201141106a202320a401201f1b22a4013b01002011410e6a201e3b01002011410c6a201d20a501201a1b22a5013b01002011410a6a20193b0100201141086a201820a60120161b22a6013b0100201141066a20153b0100200420042802e40941016a3602e4090c040b20110d95010c93010b20004281808080203702000c8f010b2002280200200441a00a6a10a0022211450d6f20112802002112200441b8076a200441bc086a2001109a0620042f01b8072213450d7020042f01ba07211420012f01202115200441b0076a200441bc086a200141226a109a0620042f01b0072216450d7120042f01b2072118200141c2006a2f01002119200441a8076a200441bc086a200141c4006a109a0620042f01a807221a450d7220042f01aa07211d200141e4006a2f0100211e200441a0076a200441bc086a200141e6006a109a0620042f01a007221f450d7320042f01a207212320014186016a2f0100212420044198076a200441bc086a20014188016a109a0620042f0198072225450d7420042f019a07212a200141a8016a2f0100212b20044190076a200441bc086a200141aa016a109a0620042f019007222c450d7520042f0192072132200141ca016a2f0100213320044188076a200441bc086a200141cc016a109a0620042f0188072234450d7620042f018a07213b200141ec016a2f0100213c20044180076a200441bc086a200141ee016a109a0620042f018007223d450d7720042f01820721452001418e026a2f01002146200441f8066a200441bc086a20014190026a109a0620042f01f8062247450d7820042f01fa062150200141b0026a2f01002151200441f0066a200441bc086a200141b2026a109a0620042f01f0062252450d7920042f01f206215c200141d2026a2f0100215d200441e8066a200441bc086a200141d4026a109a0620042f01e806225e450d7a20042f01ea062169200141f4026a2f0100216a200441e0066a200441bc086a200141f6026a109a0620042f01e006226b450d7b20042f01e206217720014196036a2f01002178200441d8066a200441bc086a20014198036a109a0620042f01d8062279450d7c20042f01da06218601200141b8036a2f0100218701200441d0066a200441bc086a200141ba036a109a0620042f01d006228801450d7d20042f01d206219601200141da036a2f0100219701200441c8066a200441bc086a200141dc036a109a06024020042f01c806229801450d0020042f01ca0621a7010240024020042802f009221120042802ec09470d00201141016a22a8012011490d9401201141017422a90120a80120a90120a8014b1b22a801410420a80141044b1b22a80141ffffff1f7120a8014641027421a90120a80141067421a8010240024020110d00200441003602d00a0c010b200441043602d80a200420042802e8093602d00a200420114106743602d40a0b200441c00a6a20a80120a901200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a3602e809200420114106763602ec0920042802f00921110b20042802e80920114106746a221120a70120aa012098011b22aa013b013c2011201420ab0120131b22ab013b0104201120123602002011413a6a2097013b0100201141386a20960120ac012088011b22ac013b0100201141366a2087013b0100201141346a20860120ad0120791b22ad013b0100201141326a20783b0100201141306a207720ae01206b1b22ae013b01002011412e6a206a3b01002011412c6a206920af01205e1b22af013b01002011412a6a205d3b0100201141286a205c20b00120521b22b0013b0100201141266a20513b0100201141246a205020b10120471b22b1013b0100201141226a20463b0100201141206a204520b201203d1b22b2013b01002011411e6a203c3b01002011411c6a203b20b30120341b22b3013b01002011411a6a20333b0100201141186a203220b401202c1b22b4013b0100201141166a202b3b0100201141146a202a20b50120251b22b5013b0100201141126a20243b0100201141106a202320b601201f1b22b6013b01002011410e6a201e3b01002011410c6a201d20b701201a1b22b7013b01002011410a6a20193b0100201141086a201820b80120161b22b8013b0100201141066a20153b0100200420042802f00941016a3602f0090c030b20110d94010c92010b20004281808080203702000c8e010b2002280200200441a00a6a10a0022211450d7d20112802002112200441b8086a200441bc086a2001109a0620042f01b8082213450d7e20042f01ba08211420012f01202115200441b0086a200441bc086a200141226a109a0620042f01b0082216450d7f20042f01b2082118200141c2006a2f01002119200441a8086a200441bc086a200141c4006a109a0620042f01a808221a450d800120042f01aa08211d200141e4006a2f0100211e200441a0086a200441bc086a200141e6006a109a0620042f01a008221f450d810120042f01a208212320014186016a2f0100212420044198086a200441bc086a20014188016a109a0620042f0198082225450d820120042f019a08212a200141a8016a2f0100212b20044190086a200441bc086a200141aa016a109a0620042f019008222c450d830120042f0192082132200141ca016a2f0100213320044188086a200441bc086a200141cc016a109a0620042f0188082234450d840120042f018a08213b200141ec016a2f0100213c20044180086a200441bc086a200141ee016a109a0620042f018008223d450d850120042f01820821452001418e026a2f01002146200441f8076a200441bc086a20014190026a109a0620042f01f8072247450d860120042f01fa072150200141b0026a2f01002151200441f0076a200441bc086a200141b2026a109a0620042f01f0072252450d870120042f01f207215c200141d2026a2f0100215d200441e8076a200441bc086a200141d4026a109a0620042f01e807225e450d880120042f01ea072169200141f4026a2f0100216a200441e0076a200441bc086a200141f6026a109a0620042f01e007226b450d890120042f01e207217720014196036a2f01002178200441d8076a200441bc086a20014198036a109a0620042f01d8072279450d8a0120042f01da07218601200141b8036a2f0100218701200441d0076a200441bc086a200141ba036a109a0620042f01d007228801450d8b0120042f01d207219601200141da036a2f0100219701200441c8076a200441bc086a200141dc036a109a0620042f01c807229801450d8c0120042f01ca0721a701200141fc036a2f010021a801200441c0076a200441bc086a200141fe036a109a0620042f01c00722a901450d0220042f01c20721b901024020042802fc09221120042802f809470d00201141016a22ba012011490d9101201141017422bb0120ba0120bb0120ba014b1b22ba01410420ba0141044b1bad42c4007e220d422088a74541027421ba01200da721bb010240024020110d00200441003602d00a0c010b200441043602d80a200420042802f4093602d00a2004201141c4006c3602d40a0b200441c00a6a20bb0120ba01200441d00a6a107d20042802c80a211120042802c00a4101460d02200420042802c40a3602f4092004201141c4006e3602f80920042802fc0921110b20042802f409201141c4006c6a221120b90120bc0120a9011b22bc013b01402011201420bd0120131b22bd013b0104201120123602002011413e6a20a8013b01002011413c6a20a70120be012098011b22be013b01002011413a6a2097013b0100201141386a20960120bf012088011b22bf013b0100201141366a2087013b0100201141346a20860120c00120791b22c0013b0100201141326a20783b0100201141306a207720c101206b1b22c1013b01002011412e6a206a3b01002011412c6a206920c201205e1b22c2013b01002011412a6a205d3b0100201141286a205c20c30120521b22c3013b0100201141266a20513b0100201141246a205020c40120471b22c4013b0100201141226a20463b0100201141206a204520c501203d1b22c5013b01002011411e6a203c3b01002011411c6a203b20c60120341b22c6013b01002011411a6a20333b0100201141186a203220c701202c1b22c7013b0100201141166a202b3b0100201141146a202a20c80120251b22c8013b0100201141126a20243b0100201141106a202320c901201f1b22c9013b01002011410e6a201e3b01002011410c6a201d20ca01201a1b22ca013b01002011410a6a20193b0100201141086a201820cb0120161b22cb013b0100201141066a20153b0100200420042802fc0941016a3602fc090b200ca72211450d8e01201141226c450d8e010c8d010b20110d90010c8e010b20004281808080203702000c8a010b200ca72211450d8b01201141226c0d8a010c8b010b20004281808080103702000c88010b20004281808080203702000c87010b20004281808080203702000c86010b20004281808080203702000c85010b20004281808080203702000c84010b20004281808080203702000c83010b20004281808080203702000c82010b20004281808080203702000c81010b20004281808080203702000c80010b20004281808080203702000c7f0b20004281808080203702000c7e0b20004281808080203702000c7d0b20004281808080203702000c7c0b20004281808080203702000c7b0b20004281808080203702000c7a0b20004281808080203702000c790b20004281808080203702000c780b20004281808080203702000c770b20004281808080203702000c760b20004281808080203702000c750b20004281808080203702000c740b20004281808080203702000c730b20004281808080203702000c720b20004281808080203702000c710b20004281808080203702000c700b20004281808080203702000c6f0b20004281808080203702000c6e0b20004281808080203702000c6d0b20004281808080203702000c6c0b20004281808080203702000c6b0b20004281808080203702000c6a0b20004281808080203702000c690b20004281808080203702000c680b20004281808080203702000c670b20004281808080203702000c660b20004281808080203702000c650b20004281808080203702000c640b20004281808080203702000c630b20004281808080203702000c620b20004281808080203702000c610b20004281808080203702000c600b20004281808080203702000c5f0b20004281808080203702000c5e0b20004281808080203702000c5d0b20004281808080203702000c5c0b20004281808080203702000c5b0b20004281808080203702000c5a0b20004281808080203702000c590b20004281808080203702000c580b20004281808080203702000c570b20004281808080203702000c560b20004281808080203702000c550b20004281808080203702000c540b20004281808080203702000c530b20004281808080203702000c520b20004281808080203702000c510b20004281808080203702000c500b20004281808080203702000c4f0b20004281808080203702000c4e0b20004281808080203702000c4d0b20004281808080203702000c4c0b20004281808080203702000c4b0b20004281808080203702000c4a0b20004281808080203702000c490b20004281808080203702000c480b20004281808080203702000c470b20004281808080203702000c460b20004281808080203702000c450b20004281808080203702000c440b20004281808080203702000c430b20004281808080203702000c420b20004281808080203702000c410b20004281808080203702000c400b20004281808080203702000c3f0b20004281808080203702000c3e0b20004281808080203702000c3d0b20004281808080203702000c3c0b20004281808080203702000c3b0b20004281808080203702000c3a0b20004281808080203702000c390b20004281808080203702000c380b20004281808080203702000c370b20004281808080203702000c360b20004281808080203702000c350b20004281808080203702000c340b20004281808080203702000c330b20004281808080203702000c320b20004281808080203702000c310b20004281808080203702000c300b20004281808080203702000c2f0b20004281808080203702000c2e0b20004281808080203702000c2d0b20004281808080203702000c2c0b20004281808080203702000c2b0b20004281808080203702000c2a0b20004281808080203702000c290b20004281808080203702000c280b20004281808080203702000c270b20004281808080203702000c260b20004281808080203702000c250b20004281808080203702000c240b20004281808080203702000c230b20004281808080203702000c220b20004281808080203702000c210b20004281808080203702000c200b20004281808080203702000c1f0b20004281808080203702000c1e0b20004281808080203702000c1d0b20004281808080203702000c1c0b20004281808080203702000c1b0b20004281808080203702000c1a0b20004281808080203702000c190b20004281808080203702000c180b20004281808080203702000c170b20004281808080203702000c160b20004281808080203702000c150b20004281808080203702000c140b20004281808080203702000c130b20004281808080203702000c120b20004281808080203702000c110b20004281808080203702000c100b20004281808080203702000c0f0b20004281808080203702000c0e0b20004281808080203702000c0d0b20004281808080203702000c0c0b20004281808080203702000c0b0b20004281808080203702000c0a0b20004281808080203702000c090b20004281808080203702000c080b20004281808080203702000c070b20004281808080203702000c060b20004281808080203702000c050b20004281808080203702000c040b20004281808080203702000c030b20004281808080203702000c020b20004281808080203702000c010b20004281808080203702000b0240200ca72207450d00200741226c450d002001102e0b02402003450d002006412c6a210103400240200141046a2802002206450d00200641226c450d002001280200102e0b2001412c6a2101200341546a22030d000b0b02402008450d002008412c6c450d002005102e0b200441c0086a109b060c070b2001102e0b200341546a21032006412c6a22062007470d010c040b0b1038000b1036000b20072001460d00034020012203412c6a21010240200341046a2802002206450d00200641226c450d002003280200102e0b20072001470d000b0b02402008450d002008412c6c450d002005102e0b200041046a200441c0086a41c00110e9081a200041003602000b200441e00a6a24000bc60101067f02400240200128020022012802042203450d00200128020021040340200341046a210520032f015e22064102742101410021070240024003402001450d0120022005280200412010ec082208450d022001417c6a2101200741016a2107200541046a21052008417f4a0d000b2007417f6a21060b2004450d022004417f6a2104200320064102746a41e0006a28020021030c010b0b200320074102746a41306a2802002205418080044921010c010b410021010b200020053b0102200020013b01000bf70301017f0240200041046a28020041ffffffff0171450d002000280200102e0b0240200041106a2802002201450d002001410c6c450d00200028020c102e0b02402000411c6a28020041ffffffff0071450d002000280218102e0b0240200041286a2802002201450d00200141146c450d002000280224102e0b0240200041346a2802002201450d00200141186c450d002000280230102e0b0240200041c0006a2802002201450d002001411c6c450d00200028023c102e0b0240200041cc006a28020041ffffff3f71450d002000280248102e0b0240200041d8006a2802002201450d00200141246c450d002000280254102e0b0240200041e4006a2802002201450d00200141286c450d002000280260102e0b0240200041f0006a2802002201450d002001412c6c450d00200028026c102e0b0240200041fc006a2802002201450d00200141306c450d002000280278102e0b024020004188016a2802002201450d00200141346c450d00200028028401102e0b024020004194016a2802002201450d00200141386c450d00200028029001102e0b0240200041a0016a2802002201450d002001413c6c450d00200028029c01102e0b0240200041ac016a28020041ffffff1f71450d0020002802a801102e0b0240200041b8016a2802002201450d00200141c4006c450d0020002802b401102e0b0b8c5103037f017e017f230041106b220224000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002d00000e18000102030405060708090a0b0c0d0e0f1011121314151617180b200241003a00002001200241011074024002400240024002400240200041086a2d00000e060001020304051d0b200241003a00002001200241011074200041106a290300200041186a2d0000200041196a2d0000200110be030c1c0b200241013a000020012002410110742000410c6a2d00002000410d6a2d00002000410e6a2d00002001109d06200041186a290300200041206a2d0000200041216a2d0000200110be030c1b0b200241023a000020012002410110740c1a0b200241033a000020012002410110742001200041096a412010740c190b200241043a000020012002410110742001200041096a412010740c180b200241053a000020012002410110742001200041096a412010744120102c2203450d1820024220370204200220033602002002200041296a41201074200120022802002200200228020810742002280204450d172000102e0c170b200241013a00002001200241011074024002400240200041046a2802000e03000102190b200241003a000020012002410110742002200041086a280200360200200120024104107420022000410c6a28020036020020012002410410740c180b200241013a000020012002410110742002200041086a280200360200200120024104107420022000410c6a28020036020020012002410410740c170b200241023a000020012002410110742002200041086a280200360200200120024104107420022000410c6a280200360200200120024104107402400240200041106a28020022030d00200241003a000020012002410110740c010b200241013a00002001200241011074200041186a28020022042001107620012003200410740b024020002d001c4106460d00200241013a0000200120024101107420002d001c2000411d6a2d00002000411e6a2d00002001109d060c170b200241003a000020012002410110740c160b200241043a00002001200241011074024002400240200041046a2d00000e03000102180b200241003a000020012002410110742001200041056a412010742002200041286a28020036020020012002410410740c170b200241013a000020012002410110742002200041086a28020036020020012002410410740c160b200241023a000020012002410110742002200041286a28020036020020012002410410742001200041056a412010740c150b200241053a0000200120024101107402400240024002400240024002400240200041086a2d00000e080001020304050607000b200241003a000020012002410110742001200041096a41201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c1b0b200241013a000020012002410110742001200041096a41201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c1a0b200241023a000020012002410110742001200041096a412010742001200041296a41201074200041d0006a29030021052002200041d8006a2903003703082002200537030020012002411010740c190b200241033a000020012002410110742001200041096a41201074200041306a29030021052002200041386a290300370308200220053703002001200241101074200041c0006a29030021052002200041c8006a2903003703082002200537030020012002411010740c180b200241043a000020012002410110742001200041096a41201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c170b200241053a000020012002410110742001200041096a41201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c160b200241063a000020012002410110742001200041096a41201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c150b200241073a000020012002410110742001200041096a412010742001200041296a41201074200041d0006a29030021052002200041d8006a2903003703082002200537030020012002411010740240200041c9006a2d00004101460d00200241003a000020012002410110740c150b200241013a000020012002410110740c140b200241073a00002001200241011074024002400240024002400240024002400240200041086a2d00000e090001020304050607081c0b200241003a0000200120024101107420022000410c6a2802003602002001200241041074200041106a29030021052002200041186a290300370308200220053703002001200241101074200041206a29030021052002200041286a2903003703082002200537030020012002411010740c1b0b200241013a000020012002410110742001200041096a41201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c1a0b200241023a000020012002410110742001200041096a41201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c190b200241033a0000200120024101107420022000410c6a28020036020020012002410410740c180b200241043a000020012002410110740c170b200241053a000020012002410110742001200041096a41201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c160b200241063a000020012002410110742001200041096a41201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c150b200241073a000020012002410110742001200041096a41201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c140b200241083a000020012002410110742001200041096a412010742001200041296a412010740c130b200241083a00002001200241011074200241003a000020012002410110742001200041106a41101074200041046a28020021032000410c6a28020022042001107620012003200410742002200041206a2d00003a000020012002410110740c120b200241093a00002001200241011074200241003a000020012002410110742002200041046a28020036020020012002410410740c110b2002410b3a00002001200241011074024002400240200041046a2802000e03000102130b200241003a00002001200241011074200041086a2802002103200041106a280200220020011076200041286c2200450d12200320006a2100034020012003412010742002200341206a2903003703002001200241081074200341286a22032000470d000c130b0b200241013a000020012002410110740c110b200241023a000020012002410110740c100b2002410c3a00002001200241011074024002400240200041046a2d00000e03000102120b200241003a000020012002410110742001200041056a412010740c110b200241013a000020012002410110740c100b200241023a00002001200241011074200041086a2802002103200041106a280200220020011076200041d0006c2200450d0f03402003200110a101200341d0006a2103200041b07f6a22000d000c100b0b2002410e3a00002001200241011074024002400240024002400240024002400240024002400240024002400240024002400240200041086a2d00000e12000102030405060708090a0b0c0d0e0f1011200b200241003a0000200120024101107420022000410c6a2802003602002001200241041074200041106a29030021052002200041186a2903003703082002200537030020012002411010740c1f0b200241013a0000200120024101107420022000410c6a2802003602002001200241041074200041206a29030021052002200041286a290300370308200220053703002001200241101074200041106a2802002103200041186a2802002200200110762000450d1e2000410574210003402001200341201074200341206a2103200041606a22000d000c1f0b0b200241023a000020012002410110740c1d0b200241033a0000200120024101107420022000410c6a2802003602002001200241041074024002400240200041096a2d00000e030001021f0b200241003a000020012002410110740c1e0b200241013a000020012002410110740c1d0b200241023a000020012002410110740c1c0b200241043a0000200120024101107420022000410c6a28020036020020012002410410740c1b0b200241053a0000200120024101107420022000410c6a28020036020020012002410410740c1a0b200241063a0000200120024101107420022000410c6a28020036020020012002410410740c190b200241073a0000200120024101107420022000410c6a28020036020020012002410410742002200041096a2d00003a000020012002410110740c180b200241083a000020012002410110742001200041096a412010742001200041296a412010740c170b200241093a000020012002410110742001200041096a412010740c160b2002410a3a000020012002410110742001200041096a412010744120102c2203450d1620024220370204200220033602002002200041296a412010742001200228020022032002280208107402402002280204450d002003102e0b2002200028024c36020020012002410410740c150b2002410b3a000020012002410110744120102c2203450d15200041296a210420024220370204200220033602002002200041096a412010742001200228020022032002280208107402402002280204450d002003102e0b2001200441201074200029035021052002200041d8006a2903003703082002200537030020012002411010740c140b2002410c3a000020012002410110744120102c2203450d14200041296a210420024220370204200220033602002002200041096a412010742001200228020022032002280208107402402002280204450d002003102e0b2001200441201074200029035021052002200041d8006a2903003703082002200537030020012002411010740c130b2002410d3a000020012002410110744120102c2203450d1320024220370204200220033602002002200041096a412010742001200228020022032002280208107402402002280204450d002003102e0b2002200028022c36020020012002410410740c120b2002410e3a000020012002410110744120102c2203450d1220024220370204200220033602002002200041096a412010742001200228020022032002280208107402402002280204450d002003102e0b2002200028022c36020020012002410410740c110b2002410f3a000020012002410110744120102c2203450d11200041c9006a2104200041296a210620024220370204200220033602002002200041096a412010742001200228020022032002280208107402402002280204450d002003102e0b2001200641201074200029037021052002200041f8006a29030037030820022005370300200120024110107420012004412010740c100b200241103a000020012002410110742001200041096a412010740c0f0b200241113a000020012002410110744120102c2203450d0f20024220370204200220033602002002200041096a41201074200120022802002200200228020810742002280204450d0e2000102e0c0e0b2002410f3a000020012002410110740240024002400240024002400240200041046a2d00000e0700010203040506140b200241003a000020012002410110742001200041056a412010742002200041c8006a28020036020020012002410410744120102c2203450d1420024220370204200220033602002002200041256a412010742001200228020022032002280208107402402002280204450d002003102e0b2002200028024c36020020012002410410740c130b200241013a000020012002410110742001200041056a412010744120102c2203450d1320024220370204200220033602002002200041256a412010742001200228020022032002280208107402402002280204450d002003102e0b200220002d00453a000020012002410110742002200028024836020020012002410410742002200028024c36020020012002410410740c120b200241023a000020012002410110744120102c2203450d1220024220370204200220033602002002200041056a41201074200120022802002200200228020810742002280204450d112000102e0c110b200241033a000020012002410110744120102c2203450d1120024220370204200220033602002002200041056a41201074200120022802002200200228020810742002280204450d102000102e0c100b200241043a000020012002410110744120102c2203450d1020024220370204200220033602002002200041056a412010742001200228020022032002280208107402402002280204450d002003102e0b024020002d00284106460d00200241013a0000200120024101107420002d0028200041296a2d00002000412a6a2d00002001109d060c100b200241003a000020012002410110740c0f0b200241053a000020012002410110744120102c2203450d0f20024220370204200220033602002002200041056a412010742001200228020022032002280208107402402002280204450d002003102e0b024020002d00284106460d00200241013a0000200120024101107420002d0028200041296a2d00002000412a6a2d00002001109d060c0f0b200241003a000020012002410110740c0e0b200241063a000020012002410110744120102c2203450d0e20024220370204200220033602002002200041056a412010742001200228020022032002280208107402402002280204450d002003102e0b2002200028022836020020012002410410742002200028022c36020020012002410410740c0d0b200241103a000020012002410110740240024002400240024002400240200041046a2d00000e0700010203040506130b200241003a000020012002410110742001200041056a412010742002200041c8006a28020036020020012002410410744120102c2203450d1320024220370204200220033602002002200041256a412010742001200228020022032002280208107402402002280204450d002003102e0b2002200028024c36020020012002410410740c120b200241013a000020012002410110742001200041056a412010744120102c2203450d1220024220370204200220033602002002200041256a412010742001200228020022032002280208107402402002280204450d002003102e0b200220002d00453a000020012002410110742002200028024836020020012002410410742002200028024c36020020012002410410740c110b200241023a000020012002410110744120102c2203450d1120024220370204200220033602002002200041056a41201074200120022802002200200228020810742002280204450d102000102e0c100b200241033a000020012002410110744120102c2203450d1020024220370204200220033602002002200041056a41201074200120022802002200200228020810742002280204450d0f2000102e0c0f0b200241043a000020012002410110744120102c2203450d0f20024220370204200220033602002002200041056a412010742001200228020022032002280208107402402002280204450d002003102e0b024020002d00284106460d00200241013a0000200120024101107420002d0028200041296a2d00002000412a6a2d00002001109d060c0f0b200241003a000020012002410110740c0e0b200241053a000020012002410110744120102c2203450d0e20024220370204200220033602002002200041056a412010742001200228020022032002280208107402402002280204450d002003102e0b024020002d00284106460d00200241013a0000200120024101107420002d0028200041296a2d00002000412a6a2d00002001109d060c0e0b200241003a000020012002410110740c0d0b200241063a000020012002410110744120102c2203450d0d20024220370204200220033602002002200041056a412010742001200228020022032002280208107402402002280204450d002003102e0b2002200028022836020020012002410410742002200028022c36020020012002410410740c0c0b200241113a000020012002410110740240024002400240024002400240200041086a2d00000e0700010203040506120b200241003a000020012002410110742000410c6a2802002103200041146a280200220020011076200041306c2200450d11200320006a210003402001200341201074200341206a29030021052002200341286a290300370308200220053703002001200241101074200341306a22032000470d000c120b0b200241013a000020012002410110740c100b200241023a000020012002410110740c0f0b200241033a000020012002410110742001200041096a412010740c0e0b200241043a000020012002410110742001200041096a412010740c0d0b200241053a000020012002410110742001200041096a41201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c0c0b200241063a000020012002410110742001200041096a41201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c0b0b200241123a0000200120024101107402400240024002400240024020002d00010e06000102030405100b200241003a000020012002410110740c0f0b200241013a000020012002410110740c0e0b200241023a000020012002410110740c0d0b200241033a000020012002410110740c0c0b200241043a000020012002410110740c0b0b200241053a000020012002410110740c0a0b200241133a000020012002410110740240024002400240024002400240200041086a2d00000e0700010203040506100b200241003a0000200120024101107420022000410c6a28020036020020012002410410740c0f0b200241013a00002001200241011074200041106a29030021052002200041186a2903003703082002200537030020012002411010740c0e0b200241023a0000200120024101107420022000412c6a2802003602002001200241041074200041306a29030021052002200041386a2903003703082002200537030020012002411010742001200041096a412010740c0d0b200241033a0000200120024101107420022000410c6a2802003602002001200241041074200041106a29030021052002200041186a2903003703082002200537030020012002411010740c0c0b200241043a00002001200241011074200041106a29030021052002200041186a2903003703082002200537030020012002411010740c0b0b200241053a00002001200241011074200041106a29030021052002200041186a2903003703082002200537030020012002411010740c0a0b200241063a00002001200241011074200041106a29030021052002200041186a2903003703082002200537030020012002411010740c090b200241183a00002001200241011074200241003a000020012002410110742001200041186a412010742001200041386a41141074200041086a29030021052002200041106a2903003703082002200537030020012002411010740c080b200241193a00002001200241011074200041096a21030240200041086a2d00004101460d00200241003a000020012002410110742001200341201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c080b200241013a0000200120024101107420012003412010740c070b2002411a3a000020012002410110740240200041086a2d00004106460d00200241003a000020012002410110742002200041046a280200360200200120024104107420002d0008200041096a2d00002000410a6a2d00002001109d060c070b200241013a000020012002410110740c060b2002411c3a000020012002410110740240024002400240024002400240024002400240200041086a2d00000e0a000102030405060708090f0b200241003a000020012002410110742001200041096a412010740c0e0b200241013a000020012002410110742001200041096a41201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c0d0b200241023a000020012002410110742001200041096a41201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c0c0b200241033a000020012002410110742001200041096a4120107420022000412c6a28020036020020012002410410740c0b0b200241043a000020012002410110742001200041096a4120107420022000412c6a28020036020020012002410410740c0a0b200241053a000020012002410110742001200041096a4120107420022000412c6a28020036020020012002410410740c090b200241063a0000200120024101107420022000410c6a28020036020020012002410410740c080b200241073a000020012002410110742001200041096a412010742001200041296a41201074200041d0006a29030021052002200041d8006a2903003703082002200537030020012002411010740c070b200241083a000020012002410110742001200041096a412010742001200041296a41201074200041d0006a29030021052002200041d8006a2903003703082002200537030020012002411010740c060b200241093a000020012002410110742001200041096a412010742001200041296a41201074200041d0006a29030021052002200041d8006a2903003703082002200537030020012002411010740c050b2002411d3a00002001200241011074024002400240200041046a2d00000e03000102070b200241003a000020012002410110740240200041086a2d00004106460d00200241013a0000200120024101107420002d0008200041096a2d00002000410a6a2d00002001109d060c070b200241003a000020012002410110740c060b200241013a000020012002410110742001200041056a412010742001200041256a412010740240024002400240024002400240200041c5006a2d00000e0700010203060405060b200241003a000020012002410110740c050b200241013a000020012002410110740c040b200241023a000020012002410110740c030b200241033a000020012002410110740c020b200241053a000020012002410110740c010b200241063a000020012002410110740b200220002f01463b010020012002410210740c050b200241023a000020012002410110742001200041056a412010742001200041256a412010744120102c2203450d0520024220370204200220033602002002200041c5006a41201074200120022802002200200228020810742002280204450d042000102e0c040b2002411e3a000020012002410110740240024002400240200041046a2d00000e0400010203000b200241003a000020012002410110742001200041056a412010742001200041256a412010742001200041c5006a412010740c060b200241013a000020012002410110742001200041056a412010742002200041e8006a28020036020020012002410410742002200041ec006a28020036020020012002410410742001200041256a412010742001200041c5006a412010740c050b200241023a000020012002410110742001200041056a412010742002200041e8006a28020036020020012002410410742002200041ec006a28020036020020012002410410742001200041256a412010742001200041c5006a412010740240200041f0006a2d00004106460d00200241013a0000200120024101107420002d0070200041f1006a2d0000200041f2006a2d00002001109d060c050b200241003a000020012002410110740c040b200241033a000020012002410110742001200041056a412010742002200041e8006a28020036020020012002410410742002200041ec006a28020036020020012002410410742001200041256a412010742001200041c5006a412010740c030b200241223a000020012002410110740240024002400240024002400240200041086a2d00000e0700010203040506090b200241003a0000200120024101107420022000410c6a28020036020020012002410410740c080b200241013a0000200120024101107420022000410c6a2802003602002001200241041074200041106a29030021052002200041186a2903003703082002200537030020012002411010740c070b200241023a0000200120024101107420022000410c6a28020036020020012002410410740c060b200241033a0000200120024101107420022000412c6a28020036020020012002410410742001200041096a412010740c050b200241043a0000200120024101107420022000412c6a2802003602002001200241041074200041306a29030021052002200041386a2903003703082002200537030020012002411010742001200041096a412010740c040b200241053a0000200120024101107420022000410c6a28020036020020012002410410740c030b200241063a0000200120024101107420022000410c6a28020036020020012002410410740c020b200241233a0000200120024101107402400240024002400240200041086a2d00000e050001020304060b200241003a000020012002410110744120102c2203450d0620024220370204200220033602002002200041096a41201074200120022802002200200228020810742002280204450d052000102e0c050b200241013a000020012002410110744120102c2203450d0520024220370204200220033602002002200041096a41201074200120022802002200200228020810742002280204450d042000102e0c040b200241023a000020012002410110744120102c2203450d04200041296a210420024220370204200220033602002002200041096a412010742001200228020022032002280208107402402002280204450d002003102e0b2001200441201074200029035021052002200041d8006a2903003703082002200537030020012002411010740c030b200241033a000020012002410110744120102c2203450d0320024220370204200220033602002002200041096a41201074200120022802002200200228020810742002280204450d022000102e0c020b200241043a000020012002410110744120102c2203450d02200041296a210420024220370204200220033602002002200041096a412010742001200228020022032002280208107402402002280204450d002003102e0b2001200441201074200029035021052002200041d8006a2903003703082002200537030020012002411010740c010b200241243a000020012002410110740240024002400240024002400240200041046a2d00000e06000102030405070b200241003a00002001200241011074024002400240200041056a2d00000e03000102090b200241003a000020012002410110740c080b200241013a000020012002410110740c070b200241023a000020012002410110740c060b200241013a000020012002410110740240200041056a2d000022004103470d00200241003a000020012002410110740c060b200241013a0000200120024101107402400240024020000e03000102080b200241003a000020012002410110740c070b200241013a000020012002410110740c060b200241023a000020012002410110740c050b200241023a000020012002410110742001200041056a412010740c040b200241033a000020012002410110742001200041056a412010740c030b200241043a000020012002410110742002200041086a2802003602000c010b200241053a000020012002410110742002200041086a2802003602000b20012002410410740b200241106a24000f0b1036000bd20101017f230041106b220424000240024002400240024002400240200041ff01710e06000102030405060b200441003a000f20032004410f6a410110740c050b200441013a000f20032004410f6a410110740c040b200441023a000f20032004410f6a410110740c030b200441033a000f20032004410f6a41011074200420013a000f20032004410f6a41011074200420023a000f20032004410f6a410110740c020b200441043a000f20032004410f6a410110740c010b200441053a000f20032004410f6a410110740b200441106a24000b1300200041063602042000418cc7cb003602000b130020004103360204200041c4fcc4003602000b130020004103360204200041f0e6c2003602000b130020004108360204200041ec82c8003602000b1300200041093602042000419cdec6003602000b130020004101360204200041c8aac0003602000b130020004101360204200041ccadc0003602000b130020004103360204200041e0a7c0003602000b130020004103360204200041c883c9003602000b130020004112360204200041b897cb003602000b130020004107360204200041e4edc9003602000b13002000410736020420004184aec2003602000b130020004106360204200041b8b9cc003602000b130020004107360204200041d894c4003602000b13002000410136020420004198f9c1003602000b130020004102360204200041d8eac7003602000b130020004102360204200041e8afc0003602000b13002000410a360204200041f8bec3003602000b13002000410336020420004184fbc0003602000b130020004104360204200041e4f9c3003602000b13002000410736020420004198e4c0003602000b1300200041053602042000419ce3c7003602000b130020004106360204200041d4afc8003602000b7201017f200028020022012001280200417f6a3602000240200028020022012802000d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200028020041046a22012001280200417f6a3602002000280200220041046a2802000d002000102e0b0b980301037f0240200028020022022802082001200228020c28020c110100450d00200041286a2d0000210002400240200128020022024117470d00024002400240024020012d0004417e6a0e050001020403040b2000450d0320012d0025220341ff01712000460d034101210420004101470d05200341ff0171450d050c040b2000450d0220012d0025220341ff01712000460d024101210420004101470d04200341ff0171450d040c030b20000d0341010f0b20000d0241010f0b4101210402400240024002400240024020000e0706010203000405060b000b2002411a4b0d05410120027441cfffbf3f710d04024020024104460d0020024114470d0641012104200141086a280200417f6a41024f0d060c050b20012d0004220141054b0d05410121044101200174412a71450d050c040b2002411a4b0d0441012002744180c0973171450d040c030b200241154b0d034101200274418085800171450d030c020b02402002416b6a0e020200030b200141086a2d0000410a470d020c010b20024117470d0120012d00044109470d010b20040f0b41000b7d01017f2000200110b6062102200028020022012001280200417f6a3602000240200028020022012802000d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200028020041046a22012001280200417f6a3602002000280200220041046a2802000d002000102e0b20020bb51302117f097e230041c0026b2202240020024198016a10f4040240024020022d0098014101460d002000410110f0060c010b200241e8016a22034200370300200241e0016a22044200370300200241d0016a41086a22054200370300200242003703d00120024180026a41a5fec600411a108102200520024180026a41086a220629000037030020022002290080023703d00120024180026a4194c5c800410e10810220032006290000370300200420022900800237030020024190016a200241d0016a4120108e022002280294012103200228029001210520024180026a200141306a1097062003410020051b21032002280288022105024020022802840241808080807872418080808078460d00200228028002102e0b024020032005460d002000410210f0060c010b200241d0016a41186a22064200370300200241d0016a41106a22074200370300200241d0016a41086a22054200370300200242003703d00120024180026a41a5fec600411a108102200520024180026a41086a220329000037030020022002290080023703d00120024180026a4184c4c800410e108102200441086a2003290000370000200420022900800237000020024180026a200241d0016a10ab05200241a0016a41086a22042003290300370300200241a0016a41106a220820024180026a41106a2209290300370300200241a0016a41186a220a20024180026a41186a220b290300370300200241a0016a41206a220c20024180026a41206a220d290300370300200241a0016a41286a220e20024180026a41286a220f29030037030020022002290380023703a001024020022d00bc024103460d0020022802b002211020022802b402211120022802b8022112200241d0016a41286a200141286a290300370300200241d0016a41206a200141206a2903003703002006200141186a2903003703002007200141106a2903003703002005200141086a290300370300200220012903003703d001200f200e290300370300200d200c290300370300200b200a2903003703002009200829030037030020032004290300370300200220022903a0013703800202400240024002404106102c2201450d0020024180016a200229038002221320024180026a41086a2903002214428094ebdc03420010e608200241f0006a20132014428094ebdc03420010e708200241e0006a2002290370200241f0006a41086a29030042a0c21e420010e808200241d0016a41086a290300211520022903d00121160240024020022903602217200229038001221842d00f80a7201842a0c21e7e428094ebdc03824200526aad7c2218200241e0006a41086a2903002018201754ad7c2217844200520d00417f20162013852015201485844200522016201354201520145420152014511b1b21040c010b0240427f201320187c221920192013542204201420177c2004ad7c221920145420192014511b22041b221a4200201320187d221b201b201356201420177d2013201854ad7d221820145620182014511b22031b221b56427f201920041b22174200201820031b22185620172018511b0d00417f20162013852015201485844200522016201354201520145420152014511b1b21040c010b4100210402400240417f2016201b852015201885844200522016201b54201520185420152018511b1b41016a0e03000201020b417f41002016201a54201520175420152017511b1b21040c010b2016201a56201520175620152017511b21040b200120043a00012001201620135a201520145a20152014511b3a0000200241306a200229039002221320024180026a41186a2903002214428094ebdc03420010e608200241d0006a20132014428094ebdc03420010e708200241c0006a2002290350200241d0006a41086a29030042a0c21e420010e808200241d0016a41186a290300211520022903e001211602400240200229034022172002290330221842d00f80a7201842a0c21e7e428094ebdc03824200526aad7c2218200241c0006a41086a2903002018201754ad7c22178450450d00417f20162013852015201485844200522016201354201520145420152014511b1b21040c010b0240427f201320187c221920192013542204201420177c2004ad7c221920145420192014511b22041b221a4200201320187d221b201b201356201420177d2013201854ad7d221820145620182014511b22031b221b56427f201920041b22174200201820031b22185620172018511b0d00417f20162013852015201485844200522016201354201520145420152014511b1b21040c010b4100210402400240417f2016201b852015201885844200522016201b54201520185420152018511b1b41016a0e03010200020b2016201a56201520175620152017511b21040c010b417f41002016201a54201520175420152017511b1b21040b200120043a00032001201620135a201520145a20152014511b3a0002200220022903a002221320024180026a41286a2903002214428094ebdc03420010e608200241206a20132014428094ebdc03420010e708200241106a2002290320200241206a41086a29030042a0c21e420010e808200241d0016a41286a290300211520022903f001211602400240200229031022172002290300221842d00f80a7201842a0c21e7e428094ebdc03824200526aad7c2218200241106a41086a2903002018201754ad7c221784500d000240427f201320187c221920192013542204201420177c2004ad7c221920145420192014511b22041b221a4200201320187d221b201b201356201420177d2013201854ad7d221820145620182014511b22031b221b56427f201920041b22174200201820031b22185620172018511b0d00417f20162013852015201485844200522016201354201520145420152014511b1b21040c020b4100210402400240417f2016201b852015201885844200522016201b54201520185420152018511b1b41016a0e03010300030b2016201a56201520175620152017511b21040c020b417f41002016201a54201520175420152017511b1b21040c010b417f20162013852015201485844200522016201354201520145420152014511b1b21040b200120043a00052001201620135a201520145a20152014511b3a00044100210520012c00010e020102030b1036000b20012d0000450d01024020012c00030e020001020b20012d0002450d0120012d000541ff014621050c010b410121050b2001102e02402012450d0020124106742104201041346a21010340024020012802002203450d00200341306c450d002001417c6a280200102e0b200141c0006a2101200441406a22040d000b0b0240201141ffffff1f71450d002010102e0b20050d002000410310f0060c010b200041063a00000b200241c0026a24000bdc2204057f027e157f097e23004190056b22022400200241306a200141306a41c00110e9081a200241f0016a41286a200141286a290300370300200241f0016a41206a200141206a290300370300200241f0016a41186a200141186a290300370300200241f0016a41106a200141106a290300370300200241f0016a41086a200141086a290300370300200220012903003703f00120012802f0012103200241a0046a41186a22044200370300200241a0046a41106a22014200370300200241a0046a41086a22054200370300200242003703a004200241e0026a41a5fec600411a1081022005200241e0026a41086a2206290000370300200220022900e0023703a004200241e0026a4180c3c800410510810220042006290000370300200120022900e002370300200241286a200241a0046a4120108e020240024002402003200228022c410120022802281b460d0020004281808080c0013703000c010b200241a0026a200241306a109706200442003703002001420037030020054200370300200242003703a004200241e0026a41a5fec600411a10810220052006290000370300200220022900e0023703a004200241e0026a4194c5c800410e108102200141086a2006290000370000200120022900e002370000200241206a200241a0046a4120108e020240024002400240024002402002280220450d00024020022802a80220022802242204460d0020004281808080d0003703000c020b200241e0026a10f504024020022802e0022201450d00200241c0046a41086a200241f4026a28020022053602002002200241ec026a29020022073703c004200220022902e40222083702b402200220013602b002200241c0026a41086a2005360200200220073703c002200242003702d40202402008422088a72205450d00200541386c2106200141086a2101410021050340200241e0026a41186a200141186a290000370300200241e0026a41106a200141106a290000370300200241e0026a41086a200141086a290000370300200220012900003703e002200141386a2101200241d0026a200241e0026a200510a402200541016a2105200641486a22060d000b0b20022802a402210920022802a002210a024002402004450d000240024020022802c802200a2f010022014b0d0041002101410a210b0c010b2002418c056a41026a20022802c00220014105746a220141026a2d00003a000020024180056a200141176a29000037030020024188056a2001411f6a2d00003a0000200220012f00003b018c052002200129000f3703f804200129000721072001280003210541012101410d210b0b200241c0046a41086a2206200241f8046a41086a290300370300200241c0046a41106a2203200241f8046a41106a2d00003a0000200220022903f80422083703e004200220022f018c053b01a004200220083703c00420022002418e056a2d00003a00a204200220073700a704200220053600a304200241bf046a20032d00003a0000200241b7046a2006290300370000200220022903c0043700af042001450d01200241e0026a41186a2201200241a0046a41186a290300370300200241e0026a41106a200241a0046a41106a290300370300200241e0026a41086a200241a0046a41086a290300370300200220022903a0043703e0024120102c220c450d06200c20022903e002370000200c41186a2001290300370000200c41106a200241e0026a41106a290300370000200c41086a200241e0026a41086a2903003700000240024020044101460d00200241af046a210d0240024020022802c802200a2f010222014b0d0041002106410a210b0c010b2002418c056a41026a20022802c00220014105746a220141026a2d00003a000020024180056a200141176a29000037030020024188056a2001411f6a2d00003a0000200220012f00003b018c052002200129000f3703f8042001290007210720012800032103410121060b200241e0026a41086a2201200241f8046a41086a220e290300370300200241e0026a41106a2205200241f8046a41106a220f2d00003a0000200220022903f80422083703e004200220022f018c053b01a004200220083703e00220022002418c056a41026a22102d00003a00a204200220073700a704200220033600a304200d20022903e002370000200d41086a22112001290300370000200d41106a221220052d00003a000020060d010b41012104410121130c080b200a41046a2114200241c0046a41186a2215200241a0046a41186a2216290300370300200241c0046a41106a2217200241a0046a41106a2218290300370300200241c0046a41086a2219200241a0046a41086a221a290300370300200220022903a0043703c0042004410174417c6a21034120211b41022113410121040340200241e0026a41186a221c20152903003703002005201729030037030020012019290300370300200220022903c0043703e00202400240024002402013417f6a2004470d00200441016a22062004490d0a2004410174221d2006201d20064b1b22064104200641044b1b220641ffffff3f71200646211d200641057421060240024020040d00200241003602a0040c010b200241013602a8042002200c3602a004200220044105743602a4040b200241f8046a2006201d200241a0046a107d200228028005210620022802f8044101460d0120022802fc04210c200641057621040b200c201b6a220620022903e002370000200641186a201c290300370000200641106a2005290300370000200641086a20012903003700002003450d0b20022802c80220142f010022064b0d0141002106410a210b0c020b2006450d080c090b201020022802c00220064105746a220641026a2d00003a0000200e200641176a290000370300200f2006411f6a2d00003a0000200220062f00003b018c052002200629000f3703f804200629000721072006280003211c410121060b2001200e2903003703002005200f2d00003a0000200220022903f80422083703e004200220022f018c053b01a004200220083703e002200220102d00003a00a204200220073700a7042002201c3600a304200d20022903e00237000020112001290300370000201220052d00003a00002006450d08201441026a211420152016290300370300201720182903003703002019201a290300370300200220022903a0043703c004201b41206a211b201341016a21132003417e6a21030c000b0b410d210b0b410021044101210c0240200941808080807872418080808078460d00200a102e0b410021130c060b20004281808080e0003703000c010b20004281808080e0003703000b20022802a40241808080807872418080808078460d0420022802a002102e0c040b1038000b1036000b200941808080807872418080808078460d00200a102e0b02400240200b410d460d000240200441ffffff3f71450d00200c102e0b2000200b36020441012106200041013602002000410c6a41003602000c010b200241e0026a200241306a41c00110e9081a200241c0046a200241e0026a200241b0026a200241c0026a108d060240024020022802c0044101470d0020022902c40421072000410c6a200241c0046a410c6a28020036020020002007370204200041013602000c010b20022802c404211b200241c8046a280200211402400240200241c0046a410c6a280200220b412c6c2201450d00201b20016a210e201b2101034041092105200241d0026a2001410c6a10a0022206450d0220022802b802200628020022064d0d022001412c6a210a20022802b002200641386c6a220541306a211720012802002203200128020841226c6a2115200541286a21190240034020152003460d01200341226a211c20172802004105742101201928020021050340024020010d00410821050c060b200141606a210120052003412010ec082106200541206a210520060d000b201c21030c000b0b200a2101200a200e470d000b0b2002200b3602c804200220143602c4042002201b3602c004200241e0026a200241c0046a200241d0026a200241b0026a10e706024020022802e0024101470d0020022902e40221072000410c6a200241e0026a410c6a28020036020020002007370204200041013602000c020b200241e8026a22052802002103200241e0026a200c201320022802e4022214200241e0026a410c6a2201280200221b10b7040240024020022802e0024101460d002005280200211520022802e402210b02400240200128020022130d00427f211e4200211f420021204200212142002122427f21230c010b20134106742105200b41206a2101427f211e427f212342002121420021224200211f4200212003402002200141086a2903002207420020012903002208420010e808200241106a200842002008420010e808427f2020427f200241106a41086a29030022242002290300222520257c7c22252007200229030822268420268442005220252024547222061b7c201f427f200229031020061b7c2224201f542206ad7c221f2006201f202054201f2020511b22061b2120427f202420061b211f200720232008201e54200720235420072023511b22061b21232008201e20061b211e427f202220077c202120087c22082021542206ad7c22072006200720225420072022511b22061b2122427f200820061b2121200141c0006a2101200541406a22050d000b0b200241e0026a41286a2020370300200241e0026a41186a20223703002002201f37038003200220213703f0022002201e3703e002200220233703e8020240200241e0026a200241f0016a413010ec08450d0020004281808080b00137030002402013450d0020134106742105200b41346a21010340024020012802002206450d00200641306c450d002001417c6a280200102e0b200141c0006a2101200541406a22050d000b0b201541ffffff1f71450d02200b102e0c020b20004100360200200041086a20022903f001370300200041c4006a41023a0000200041c0006a20133602002000413c6a2015360200200041386a200b360200200041306a200241f0016a41286a290300370300200041286a200241f0016a41206a290300370300200041206a200241f0016a41186a290300370300200041186a200241f0016a41106a290300370300200041106a200241f0016a41086a2903003703000240201b450d00201b412c6c21052014210103400240200141046a2802002206450d00200641306c450d002001280200102e0b2001412c6a2101200541546a22050d000b0b02402003450d002003412c6c450d002014102e0b0240200441ffffff3f71450d00200c102e0b200241d0026a10bc02024020022802c40241ffffff3f71450d0020022802c002102e0b024020022802b8022201450d00200141386c210520022802b002412c6a210103400240200128020041ffffff3f71450d002001417c6a280200102e0b200141386a2101200541486a22050d000b0b20022802b4022201450d06200141386c450d0620022802b002102e0c060b20022902e40221072000410c6a200128020036020020002007370204200041013602000b0240201b450d00201b412c6c21052014210103400240200141046a2802002206450d00200641306c450d002001280200102e0b2001412c6a2101200541546a22050d000b0b2003450d012003412c6c450d012014102e0c010b20004101360200200020053602040240200b450d00200b412c6c2105201b210103400240200141046a2802002206450d00200641226c450d002001280200102e0b2001412c6a2101200541546a22050d000b0b2014450d002014412c6c450d00201b102e0b41002106200441ffffff3f71450d00200c102e0b200241d0026a10bc02024020022802c40241ffffff3f71450d0020022802c002102e0b024020022802b8022201450d00200141386c210520022802b002412c6a210103400240200128020041ffffff3f71450d002001417c6a280200102e0b200141386a2101200541486a22050d000b0b024020022802b4022201450d00200141386c450d0020022802b002102e0b2006450d010b200241306a109b060b20024190056a24000b130020002002ad4220862001ad84101710da080bcc0101037f200028022822012001280200417f6a220236020020002d0001210302400240024020002d00000d004100210020020d022001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a22023602002002450d010c020b4101210020020d012001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d010b2001102e0b200341ff01714102472000720bf10101047f230041c0006b220224004191cdc20021034109210441042105024002400240024002400240200141ff01710e06000102030405000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a419c8ecc001044000b4186cdc2002103410b2104410021050c030b41feccc200210341082104410121050c020b41f9ccc200210341052104410221050c010b41eeccc2002103410b2104410321050b20004183083b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000bf30202047f017e230041a0026b220224002002200010c802200241a0016a200228020022032002280208220410c902200241f4016a2802002105200241f0016a280200210020022903a0012106200241d8006a200241a8016a41c80010e9081a0240024020064201510d0041002100200241106a410041c80010eb081a410021050c010b200241106a200241d8006a41c80010e9081a0b024002402000200572450d00417f200041016a220120012000491b21000c010b20012802002100200241a0016a41086a41033a0000200241a9016a2000290000370000200241b1016a200041086a290000370000200241b9016a200041106a290000370000200241c1016a200041186a290000370000200241003a00a001200241a0016a10fe01410121000b200241a8016a200241106a41c80010e9082101200241f4016a2005360200200241f0016a2000360200200242013703a00120032004200110c80502402002280204450d002003102e0b200241a0026a24000bf20304037f017e047f027e23004190026b22022400200241086a200010c802200241186a200228020822002002280210220310c902200241f0006a41086a2204200241e0006a28020036020020022903182105200242003703182002200241d8006a22062903003703700240024020054201520d00200241306a2903002105200241ec006a2802002107200241e8006a2802002108200241e4006a28020021092002290328210a2002290320210b20024180016a41086a2004280200360200200220022903703703800141012104024002400240200841014b0d002007200972450d0220090d01410121080b2006200229038001370300200241286a200a370300200241ec006a2007360200200241e4006a2009360200200241306a2005370300200641086a20024180016a41086a2802003602002002200b3703202002420137031820022008417f6a36026820002003200241186a41086a10c8050c030b410221040c020b2001280200210420024190016a41086a41043a000020024199016a2004290000370000200241a1016a200441086a290000370000200241a9016a200441106a290000370000200241b1016a200441186a290000370000200241003a00900120024190016a10fe010b2000200310ff01410021040b0240200228020c450d002000102e0b20024190026a240020040b9b0201047f230041c0006b2202240041c893c9002103410621044108210502400240024002400240024002400240200141ff01710e080001020304050607000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a41a4a9cc001044000b41b693c900210341122105410021040c050b41a693c900210341102105410121040c040b419993c9002103410d2105410221040c030b418d93c9002103410c2105410321040c020b418193c9002103410c2105410421040c010b41ed92c900210341142105410521040b200041830c3b0100200041086a2005360200200041046a2003360200200041026a20043a0000200241c0006a24000bf10101047f230041c0006b2202240041fdc3c10021034109210441042105024002400240024002400240200141ff01710e06000102030405000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a41848fcc001044000b41f1c3c1002103410c2104410021050c030b41dac3c100210341172104410121050c020b41cdc3c1002103410d2104410221050c010b41c7c3c100210341062104410321050b20004183123b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000b935608027f017e027f017e017f027e237f057e230041c0076b22042400200241106a2205290300210620032802102107200328020021082002290300210920044184036a200241e8016a2900003702002004418c036a200241f0016a29000037020020044194036a200241f8016a290000370200200441e7e485f3063602f8022004200241e0016a2900003702fc0220044180056a41106a200328021036020020044180056a41086a200341086a2902003703002004200329020037038005200441d0056a200441f8026a20044180056a109d040240024002400240200428029006220a450d00200441f8006a413e6a200441d0056a41386a290300370100200441f8006a41366a200441d0056a41306a290300370100200441f8006a412e6a200441d0056a41286a290300370100200441f8006a41266a200441d0056a41206a290300370100200441f8006a411e6a200441d0056a41186a290300370100200441f8006a41166a200441d0056a41106a290300370100200441f8006a410e6a200441d0056a41086a290300370100200420042903d00537017e20044198066a290300210b2004280294062103200441c8036a200441f8006a41c60010e9081a200441386a41086a200441c8036a410e6a290100370300200441386a41106a200441c8036a41166a290100370300200441386a41186a200441c8036a411e6a290100370300200441386a41206a200441c8036a41266a290100370300200441386a41286a200441c8036a412e6a290100370300200441386a41306a200441c8036a41366a290100370300200441386a41386a200441c8036a413e6a290100370300200420042901ce033703382002290308210c200441f8006a200541f00110e9081a02400240200c4201520d00200441d0056a200441f8006a41f00110e9081a0240200441d0056a410c6a200441c0066a412010ec080d0020042802d80520042802bc06460d020b200441ec036a2205200441d0056a41086a220241206a280200360200200441e4036a220d200241186a290200370200200441dc036a220e200241106a290200370200200441c8036a410c6a220f200241086a290200370200200441013602c803200420022902003702cc03200441c8036a200441a0076a2210200441fc056a20042903d005200910880721112005200441bc066a220241206a280200360200200d200241186a290200370200200e200241106a290200370200200f200241086a290200370200200441013602c803200420022902003702cc03200441c8036a2010200441e0066a20042903d005200910880721022011450d012002450d010c030b200441d0056a200441f8006a41f00110e9081a0240200441d0056a410c6a200441c0066a412010ec080d0020042802d80520042802bc06460d010b200441ec036a2205200441d0056a41086a220241206a280200360200200441e4036a220d200241186a290200370200200441dc036a220e200241106a290200370200200441c8036a410c6a220f200241086a290200370200200441003602c803200420022902003702cc03200441c8036a200441a0076a2210200441fc056a20042903d005200910880721112005200441bc066a220241206a280200360200200d200241186a290200370200200e200241106a290200370200200f200241086a290200370200200441003602c803200420022902003702cc03200441c8036a2010200441e0066a20042903d005200910880721022011450d0020020d020b200441f8006a410610b007200441df056a200441f8006a41086a2802002202360000200420042903783700d705200041186a41003a000020004200370308200020042900d005370019200041216a200441d0056a41086a290000370000200041286a2002360000200042013703000c020b200441f8006a410510b007200441df056a200441f8006a41086a2802002202360000200420042903783700d705200041186a41003a000020004200370308200020042900d005370019200041216a200441d0056a41086a290000370000200041286a2002360000200042013703000c020b0240024020094200520d00200441d0056a420010ac07200441206a20042802d005220520042802d805108e022004280224210d20042802202102024020042802d405450d002005102e0b4101210e0c010b200441d0056a2009427f7c10ac07200441306a20042802d005220d20042802d805108e022004280234210520042802302102024020042802d405450d00200d102e0b024020024101460d00200441f8006a410610b007200441df056a200441f8006a41086a2802002202360000200420042903783700d705200041186a41003a000020004200370308200020042900d005370019200041216a200441d0056a41086a290000370000200041286a2002360000200042013703000c020b200441d0056a200910ac07200441286a20042802d005220e20042802d805108e02200428022c210d20042802282102024020042802d405450d00200e102e0b4100210e0b024020024101460d00200441f8006a410610b007200441df056a200441f8006a41086a2802002202360000200420042903783700d705200041186a41003a000020004200370308200020042900d005370019200041216a200441d0056a41086a290000370000200041286a2002360000200042013703000c010b024002402008200d4b0d00410121124102200820054d200e1b22024102460d012002410171450d010b200441f8006a410610b007200441df056a200441f8006a41086a2802002202360000200420042903783700d705200041186a41003a000020004200370308200020042900d005370019200041216a200441d0056a41086a290000370000200041286a2002360000200042013703000c010b20012d00002202410146221341057421142001411f6a2d000021052001411e6a2d0000210d2001411d6a2d0000210e2001411c6a2d0000210f2001411b6a2d000021102001411a6a2d00002111200141196a2d00002115200141186a2d00002116200141176a2d00002117200141166a2d00002118200141156a2d00002119200141146a2d0000211a200141136a2d0000211b200141126a2d0000211c200141116a2d0000211d2001410f6a2d0000211e2001410e6a2d0000211f2001410d6a2d000021202001410c6a2d000021212001410b6a2d000021222001410a6a2d00002123200141096a2d00002124200141076a2d00002125200141066a2d00002126200141056a2d00002127200141036a2d00002128200141206a2d0000212920012d0010212a20012d0008212b20012d0004212c20012d0002212d20012d0001212e0240024020024101470d002014102c2212450d010b024002400240024002402014410576222f20134f0d00201441047622012013200120134b1b22014104200141044b1b41057421010240024020024101460d00200441003602d0050c010b200441d8056a4101360200200420143602d405200420123602d0050b200441f8006a20014101200441d0056a107d20044180016a280200210120042802784101460d01200428027c21122001410576212f0b20020d01410021010c020b2001450d020c030b410021012012210203402002411f6a20293a00002002202e41ff0171202d4108747241ffff0371202841ff0171202c4108747241107472ad202741ff017120264108747241ffff0371202541ff0171202b4108747241107472ad422086843700002002202441ff017120234108747241ffff0371202241ff017120214108747241107472ad202041ff0171201f4108747241ffff0371201e41ff0171202a4108747241107472ad422086843700082002411e6a20053a0000200241106a201d41ff0171201c4108747241ffff0371201b41ff0171201a4108747241107472ad201941ff017120184108747241ffff0371201741ff017120164108747241107472ad422086843700002002411c6a200e41ff0171200d410874723b0000200241186a201541ff017120114108747241ffff0371201041ff0171200f4108747241107472360000200241206a2102200141016a2101410041ff01710d000b0b200441d0016a200b370300200441cc016a2003360200200441f8006a41d0006a2203200a360200200441f8006a41186a200441386a41086a290300370300200441f8006a41206a200441386a41106a290300370300200441f8006a41286a200441386a41186a290300370300200441f8006a41306a220a200441386a41206a290300370300200441f8006a41386a220d200441386a41286a290300370300200441b8016a220e200441386a41306a290300370300200441f8006a41c8006a220f200441386a41386a2903003703002004200637038001200420093703782004200429033837038801200420073602dc01200420083602d80141d000102c2205450d01200441a0046a41086a2208200441f8006a41106a220241086a290300370300200441a0046a41106a2210200241106a290300370300200441a0046a41186a2211200241186a290300370300200420022903003703a004200a290300210c200d290300210b200e2903002130200f2903002131200441d0056a200310c501200541386a203137030020052030370330200541286a200b3703002005200c370320200541186a2011290300370300200541106a2010290300370300200541086a2008290300370300200520042903a004370300200520042903d005370340200541c8006a200441d0056a41086a280200360200200420013602f0022004202f3602ec02200420123602e8024100211b200441003602c805200442013703c005200420093703d005200441c0056a200441d0056a41081074200420063703d005200441c0056a200441d0056a41081074200441d0056a418997c500108a03200441c8036a20042802d005220320042802d805108b0320042902cc03420020042802c80322021b210c2002410120021b210d024020042802d405450d002003102e0b2004200c4220883e029c042004200d36029804200441186a20044198046a10ab01410821194100211a024020042802180d00200428021c220f200428029c0441306e22022002200f4b1bad42307e220b422088a70d01200ba72202417f4c0d010240024020020d00410821100c010b2002102c2210450d030b200241306e210e02400240200f0d004100210f0c010b410021110340024002400240200428029c0422034108490d00200428029804220a290000210b2004200a41086a360298042004200341786a220236029c0420024108490d00201141016a21152004200341706a220836029c042004200a41106a36029804200a290008213041002102200441003a00f0052003416f6a21030240034020082002460d01200441d0056a20026a200a20026a220141106a2d00003a00002004200141116a360298042004200241016a22013a00f0052004200336029c042003417f6a21032001210220014120470d000b200441c8036a41186a2202200441d0056a41186a290300370300200441c8036a41106a2203200441d0056a41106a290300370300200441c8036a41086a220a200441d0056a41086a290300370300200420042903d0053703c803200141ff01714120490d0120044180056a41086a200a2903002231370300200441e0046a41186a22012002290300370300200441e0046a41106a22022003290300370300200441e0046a41086a22032031370300200420042903c803223137038005200420313703e004200441c0046a41186a220a2001290300370300200441c0046a41106a22012002290300370300200441c0046a41086a22082003290300370300200420042903e0043703c0042011200e470d03200e41016a2202200e4f0d020c070b200241ff0171450d00200441003a00f0050b4100211b410821190240200e450d00200e41306c450d002010102e0b4100211a0c040b200e41017422032002200320024b1b22024104200241044b1bad42307e2231422088a74541037421022031a7210302400240200e0d00200441003602d0050c010b200441083602d805200420103602d0052004200e41306c3602d4050b200441c8036a20032002200441d0056a107d20042802d0032102024020042802c8034101470d0020020d060c050b20042802cc032110200241306e210e0b2010201141306c6a220220303703082002200b370300200220042903c004370310200241186a2008290300370300200241206a2001290300370300200241286a200a290300370300201521112015200f470d000b0b200f410020101b211a200e410020101b211b2010410820101b21190b200441d0056a418997c500200441c0056a108c03200441c8036a20042802d005220320042802d805108d0320042902cc03420020042802c80322021b210b024020042802d405450d002003102e0b200b422088213020042802c805212a20042802c405212720042802c00521280240200ca7450d00200d102e0b2002410120021b21262030a7211d200ba7211c200441d0056a41086a2202200541086a290300370300200441d0056a41106a2203200541106a290300370300200441d0056a41186a2201200541186a290300370300200441d0056a41206a220a200541206a290300370300200441d0056a41286a2208200541286a290300370300200441d0056a41306a220d200541306a290300370300200441d0056a41386a220e200541386a290300370300200441c8036a41086a220f200541cc006a280200360200200420052903003703d005200420052902443703c80302400240200528024022100d004100210a0c010b20044180056a41386a2211200e29030037030020044180056a41306a220e200d29030037030020044180056a41286a220d200829030037030020044180056a41206a2208200a29030037030020044180056a41186a220a200129030037030020044180056a41106a2201200329030037030020044180056a41086a22032002290300370300200441c0056a41086a2202200f280200360200200420042903d00537038005200420042903c8033703c005200441f8026a41386a2011290300370300200441f8026a41306a200e290300370300200441f8026a41286a200d290300370300200441f8026a41206a2008290300370300200441f8026a41186a200a290300370300200441f8026a41106a2001290300370300200441f8026a41086a200329030037030020042004290380053703f802200420103602b803200441bc036a220320042903c005370200200341086a2002280200360200200442013703d005200441003602d805200420093703c803200441d0056a200441c8036a41081074200420063703c803200441d0056a200441c8036a41081074200441e4056a410029009197453702002004410029008997453702dc052004200441f8026a3602ec05200441e0046a200441d0056a10ae01024020042802d405450d0020042802d005102e0b200441d0056a200441e0046a108e0320042802d005220320042802d805108f022102024020042802d405450d002003102e0b02400240024020020d00200441c8036a200441f8026a41d00010e9081a200441c0046a200441e8026a10c801200441d0056a200441c8036a41d00010e9081a200441d0056a41d0006a220241086a200441c0046a41086a280200360200200220042903c004370200200441c8036a200441e0046a108e0320042802c803220220042802d003200441d0056a108f03024020042802cc03450d002002102e0b02402004280294062202450d00200241306c450d00200428029006102e0b024020042802a40641ffffff3f71450d0020042802a006102e0b200441c8036a41186a220e200441e0046a41186a290300370300200441c8036a41106a220f200441e0046a41106a290300370300200441c8036a41086a2210200441e0046a41086a290300370300200420042903e0043703c803410021020240201a0e020302000b41002102201a210303400240417f20192003410176220a20026a220841306c6a220d290300220c200952200c2009541b22010d00417f200d290308220c200652200c2006541b21010b2002200820014101461b21022003200a6b220341014d0d020c000b0b4100210a20042802bc032202450d02200241306c450d0220042802b803102e0c020b02400240417f2019200241306c6a2201290300220c200952200c2009541b22030d0041ff0121032001290308220c2006540d01200c20065221030b2003450d010b2002200341ff017141ff01466a21020b200441d0056a41186a200e290300370300200441d0056a41106a200f290300370300200441d0056a41086a2010290300370300200420042903c8033703d00502400240201a2002490d000240201a201b470d00201b41016a2203201b490d04201b41017422012003200120034b1b22034104200341044b1bad42307e220c422088a7454103742103200ca7210102400240201b0d00200441003602c0040c010b200441083602c804200420193602c0042004201b41306c3602c4040b200441a0046a20012003200441c0046a107d20042802a804210320042802a0044101460d0220042802a4042119200341306e211b0b2019200241306c6a220341306a2003201a20026b41306c10ea081a2003200637030820032009370300200341286a200441d0056a41186a2201290300370300200341206a200441d0056a41106a2208290300370300200341186a200441d0056a41086a220d290300370300200320042903d0053703102001200441c8036a41186a2903003703002008200441c8036a41106a290300370300200d200441c8036a41086a290300370300200420042903c8033703d0050240201d201c470d00201c41016a2202201c490d04201c41017422032002200320024b1b22024104200241044b1b220241ffffff3f7120024621032002410574210202400240201c0d00200441003602c0040c010b200441013602c804200420263602c0042004201c4105743602c4040b200441a0046a20022003200441c0046a107d20042802a8042102024020042802a0044101470d0020020d060c050b20042802a40421262002410576211c0b4101210a201a41016a211a2026201d4105746a220220042903d005370000200241186a2001290300370000200241106a2008290300370000200241086a200d290300370000201d41016a211d0c020b2002201a1045000b20030d020c010b200541d0006a220220026b220341d0006d210102402003450d00200141d0006c2103200241c4006a21020340024020022802002201450d00200141306c450d002002417c6a280200102e0b200241d0006a2102200341b07f6a22030d000b0b2005102e024002400240200a450d00024002400240201d450d00201d410574210520044194066a2102202621030340200441c0056a2003108e03200441d0056a20042802c005220a20042802c805109003200441c8036a41086a2208200441d0056a41086a290300370300200441c8036a41106a220d200441d0056a41106a290300370300200441c8036a41186a220e200441d0056a41186a290300370300200441c8036a41206a220f200441d0056a41206a290300370300200441c8036a41286a2210200441d0056a41286a290300370300200441c8036a41306a2211200441d0056a41306a290300370300200441c8036a41386a2215200441d0056a41386a290300370300200441e0046a41086a2216200241086a290200370300200441e0046a41106a2217200241106a290200370300200441e0046a41186a2218200241186a280200360200200420042903d0053703c803200420022902003703e00402402004280290062201450d00200441f8026a41386a2015290300370300200441f8026a41306a2011290300370300200441f8026a41286a2010290300370300200441f8026a41206a200f290300370300200441f8026a41186a200e290300370300200441f8026a41106a200d290300370300200441f8026a41086a2008290300370300200441c0046a41086a2016290300370300200441c0046a41106a2017290300370300200441c0046a41186a2018280200360200200420042903c8033703f802200420042903e0043703c0040b024020042802c405450d00200a102e0b20010d02200341206a2103200541606a22050d000b0b4200210c4108210a0c010b20044180056a41386a2202200441f8026a41386a29030037030020044180056a41306a2208200441f8026a41306a29030037030020044180056a41286a220d200441f8026a41286a29030037030020044180056a41206a220e200441f8026a41206a29030037030020044180056a41186a220f200441f8026a41186a29030037030020044180056a41106a2210200441f8026a41106a29030037030020044180056a41086a2211200441f8026a41086a290300370300200441a0046a41086a2215200441c0046a41086a290300370300200441a0046a41106a2216200441c0046a41106a290300370300200441a0046a41186a2217200441c0046a41186a280200360200200420042903f80237038005200420042903c0043703a00441e000102c220a450d05200a200429038005370300200a2001360240200a20042903a004370244200a41386a2002290300370300200a41306a2008290300370300200a41286a200d290300370300200a41206a200e290300370300200a41186a200f290300370300200a41106a2010290300370300200a41086a2011290300370300200a41cc006a2015290300370200200a41d4006a2016290300370200200a41dc006a2017280200360200024020054120470d00428180808010210c0c010b200341206a210f2026201d4105746a222541606a212b200441d0056a41c4006a2102428180808010210c0340200f21030340200441c0056a2003108e03200441d0056a20042802c005220e20042802c805109003200441c8036a41086a2205200441d0056a41086a221e290300370300200441c8036a41106a2208200441d0056a41106a221f290300370300200441c8036a41186a220d200441d0056a41186a2220290300370300200441c8036a41206a220f200441d0056a41206a2221290300370300200441c8036a41286a2210200441d0056a41286a2222290300370300200441c8036a41306a2211200441d0056a41306a2223290300370300200441c8036a41386a2215200441d0056a41386a2224290300370300200441e0046a41086a2216200241086a290200370300200441e0046a41106a2217200241106a290200370300200441e0046a41186a2218200241186a280200360200200420042903d0053703c803200420022902003703e00402402004280290062201450d00200441f8026a41386a2015290300370300200441f8026a41306a2011290300370300200441f8026a41286a2010290300370300200441f8026a41206a200f290300370300200441f8026a41186a200d290300370300200441f8026a41106a2008290300370300200441f8026a41086a2005290300370300200441c0046a41086a2016290300370300200441c0046a41106a2017290300370300200441c0046a41186a2018280200360200200420042903c8033703f802200420042903e0043703c0040b024020042802c405450d00200e102e0b024020010d002025200341206a2203470d010c030b0b20044180056a41386a220e200441f8026a41386a29030037030020044180056a41306a220f200441f8026a41306a29030037030020044180056a41286a2210200441f8026a41286a29030037030020044180056a41206a2211200441f8026a41206a29030037030020044180056a41186a2215200441f8026a41186a29030037030020044180056a41106a2216200441f8026a41106a29030037030020044180056a41086a2217200441f8026a41086a290300370300200441a0046a41086a2218200441c0046a41086a290300370300200441a0046a41106a222c200441c0046a41106a290300370300200441a0046a41186a222d200441c0046a41186a280200360200200420042903f80237038005200420042903c0043703a004201e2017290300370300201f20162903003703002020201529030037030020212011290300370300202220102903003703002023200f2903003703002024200e29030037030020042004290380053703d005200520182903003703002008202c290300370300200d202d280200360200200420042903a0043703c80302400240200c422088a7220e200ca7460d00200c210b0c010b200e41016a220f200e490d06200e4101742210200f200f2010491b220f4104200f41044b1bad42e0007e220b422088a745410374210f200ba7211002400240200e0d00200441003602f8020c010b20044108360280032004200a3602f8022004200e41e0006c3602fc020b200441e0046a2010200f200441f8026a107d20042802e804210f20042802e0044101460d0420042802e404210a200f41e0006ead210b0b200341206a210f200a200e41e0006c6a220e20042903d005370300200e41106a201f290300370300200e41086a201e2903003703002023290300213020242903002131202229030021322021290300213320202903002134200e41c0006a2001360200200e41186a2034370300200e41206a2033370300200e41286a2032370300200e41386a2031370300200e41306a2030370300200e41c4006a20042903c803370200200e41cc006a2005290300370200200e41d4006a2008290300370200200e41dc006a200d280200360200200b42ffffffff0f83200c4280808080107c4280808080708384210c202b2003470d000b0b200441f0056a201a360200200441ec056a201b360200200441e4056a201d360200200441e0056a201c360200200420193602e805200420263602dc052004202a3602d805200420273602d405200420283602d005201a41306c4104722202417f4c0d032002102c2203450d042004410036028003200420023602fc02200420033602f802201a200441f8026a10760240201a450d002019201a41306c6a2101201921020340200420022903003703c803200441f8026a200441c8036a410810742004200241086a2903003703c803200441f8026a200441c8036a410810744120102c2203450d06200442203702cc03200420033602c803200441c8036a200241106a220241201074200441f8026a20042802c803220320042802d0031074024020042802cc03450d002003102e0b200241206a22022001470d000b0b200441c8036a418997c500108a0320042802c803220220042802d003200441f8026a10c502024020042802cc03450d002002102e0b024020042802fc02450d0020042802f802102e0b200441c8036a418997c500200441d0056a108c0320042802c803220220042802d003200441dc056a109103024020042802cc03450d002002102e0b02402027450d002028102e0b0240201c41ffffff3f71450d002026102e0b201b450d02201b41306c450d022019102e0c020b02402027450d002028102e0b0240201c41ffffff3f71450d002026102e0b4100210a0240201b450d00201b41306c450d002019102e0b0c010b200f0d020c010b024020042802ec0241ffffff3f71450d0020042802e802102e0b0240200a0d00024020042802cc012202450d00200241306c450d0020042802c801102e0b200441f8006a410710b007200441df056a200441f8006a41086a2802002202360000200420042903783700d705200041186a41003a000020004200370308200020042900d005370019200041216a200441d0056a41086a290000370000200041286a2002360000200042013703000c040b02400240024020074101200741014b1b2202418094ebdc036e2002418094ebdc03704100476a22034101200341014b1b220320024b0d002002200c422088a7220541036c220120022001491b20036ead428094ebdc037e200220036ead80a7109e042101200541ffffffff03712005470d0320054102742202417f4c0d030240024020020d00410421080c010b2002102c2208450d050b02402002410276220720054f0d00200241017622032005200320054b1b22034104200341044b1b220341ffffffff03712003464102742107200341027421030240024020020d00200441003602d0050c010b200441d8056a4104360200200420023602d405200420083602d0050b200441c8036a20032007200441d0056a107d200441d0036a2802002102024020042802c8034101460d0020042802cc032108200241027621070c030b20020d050c040b20050d01410021020c020b41d0d8c800411941bcd7cc001039000b2005210320082102034020022001360200200241046a21022003417f6a22030d000b200521020b200441086a200a20052008200220042802d801109203200442013703f8022004410036028003200420093703d005200441f8026a200441d0056a41081074200420063703d005200441f8026a200441d0056a410810742004418c036a4100290091974537020020044100290089974537028403200441e3036a200441f8026a41186a280200360000200441db036a200441f8026a41106a290300370000200441d3036a200429038003370000200420042903f8023700cb03200441d9056a200441c8036a41086a290000370000200441e1056a200441c8036a41106a290000370000200441d0056a41186a200441df036a290000370000200441f0056a41013a0000200441053a00d005200420042900c8033700d105200441d0056a10fe0102402007450d002008102e0b02402005450d00200541e0006c2103200a41d4006a210203400240200241706a2802002201450d00200141306c450d002002416c6a280200102e0b0240200228020041ffffff3f71450d002002417c6a280200102e0b200241e0006a2102200341a07f6a22030d000b0b0240200ca72202450d00200241e0006c450d00200a102e0b024020042802cc012202450d00200241306c450d0020042802c801102e0b2000420037030820004200370300200041186a41013a00000c030b1038000b1036000b2003450d00200341306c450d00200a102e0b200441c0076a24000b860301037f230041e0006b22032400200341086a41bed8c8004108108102200341186a41a4fcc8004112108102200320013602482003200341c8006a410410a301370338200341dc006a2201200341c8006a41046a3602002003200341386a41086a3602542003200341c8006a3602582003200341386a360250200341286a200341d0006a107c200320023602442003200341c4006a410410a3013703482001200341c4006a41046a3602002003200341c8006a41086a3602542003200341c4006a3602582003200341c8006a360250200341386a200341d0006a107c0240024020032802302201200328024022046a41206a2202417f4c0d000240024020020d00410121050c010b2002102c2205450d020b2000410036020820002002360204200020053602002000200341086a411010742000200341186a4110107420002003280228220220011074200020032802382201200410740240200328023c450d002001102e0b0240200328022c450d002002102e0b200341e0006a24000f0b1038000b1036000baff4020b027f027e077f027e047f0e7e027f057e047f047e0e7f230022032104200341c00b6b41607122032400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e1a000102030405060708090a0b0c0d0e0f10111213141516171819000b200341d40a6a4101360200200342013702c40a2003419cc3cb003602c00a200341043602940920034194c3cb0036029009200320034190096a3602d00a200341c00a6a41c0accb001044000b200141306a2903002105200141286a2903002106200341e0066a41186a200141196a290000370300200341e0066a41106a200141116a290000370300200341e0066a41086a200141096a290000370300200320012900013703e006200341c00a6a41286a200241286a280200360200200341c00a6a41206a200241206a290200370300200341c00a6a41186a200241186a290200370300200341c00a6a41106a200241106a290200370300200341c00a6a41086a200241086a290200370300200320022902003703c00a20034190096a200341c00a6a10c102200341b8046a41086a220220034190096a41096a290000370300200341b8046a41106a220120034190096a41116a290000370300200341b8046a41186a220720034190096a41196a29000037030020032003290091093703b80420032d0090094101460d25200341d8046a41186a2007290300370300200341d8046a41106a2001290300370300200341d8046a41086a2002290300370300200320032903b8043703d8040240024020064280a094a58d1d5441002005501b450d00200341c0056a41011093080c010b20034198066a2201420037030020034190066a2202420037030020034180066a41086a220742003703002003420037038006200341c0076a41de80ca0041091081022007200341c0076a41086a2208290000370300200320032900c00737038006200341c0076a41b4f6ca00410f10810220012008290000370300200220032900c007370300200341286a20034180066a4120108e02200328022c21092003280228210a2001420037030020024200370300200742003703002003420037038006200341c0076a41de80ca00410910810220072008290000370300200320032900c00737038006200341c0076a418c81ca00410b10810220012008290000370300200220032900c00737030020034194096a41003a00002003410036029009200341206a20034180066a412020034190096a4105410010ca0402402003280220450d00200320032802242201410520014105491b3602c40a200320034190096a3602c00a200341186a200341c00a6a10ab0120032802180d00200328021c41e400490d00200341c0056a41231093080c010b200341c00a6a41186a2201200341e0066a41186a290300370300200341c00a6a41106a2207200341e0066a41106a290300370300200341c00a6a41086a2208200341e0066a41086a290300370300200320032903e0063703c00a20034190096a200341c00a6a10b7080240200328029409220b450d00200328029009210c200142003703002007420037030020084200370300200342003703c00a20034188086a41d9fcc6004106108102200820034188086a41086a220d29000037030020032003290088083703c00a20034188086a4180f4cb0041061081022001200d2900003703002007200329008808370300200341106a200341c00a6a4120108e0202402003280214410020032802101b200c4f0d00200341c0056a410610930820032802980941ffffff3f71450d02200b102e0c020b20032802980941ffffff3f71450d00200b102e0b200341c00a6a200341d8046a2006200510c302200341ca066a220120032d00c30a3a0000200320032f00c10a3b01c806024020032d00c00a22074106470d0020034180066a41186a420037030020034180066a41106a420037030020034180066a41086a220142003703002003420037038006200341c0076a41de80ca0041091081022001200341c0076a41086a2207290000370300200320032900c00737038006200341c0076a41b4f6ca00410f108102200241086a2007290000370000200220032900c007370000200320094100200a1b220141016a3602c00a20034180066a4120200341c00a6a410410b2012003200341d8046a36028006200341c0076a200110940820032802c807210820032802c00721074118102c2209450d6020034218370294092003200936029009410120034190096a107620034190096a20032802800641201074200320053703c80a200320063703c00a20034190096a200341c00a6a4110107420072008200328029009220920032802980910b2010240200328029409450d002009102e0b024020032802c407450d002007102e0b200341cc0a6a200341e0066a41086a290300370200200341d40a6a200341e0066a41106a290300370200200341dc0a6a200341e0066a41186a290300370200200341ec0a6a200341d8046a41086a290300370200200341f40a6a200341d8046a41106a290300370200200341fc0a6a200341d8046a41186a290300370200200320013602c00a200320032903e0063702c40a200320032903d8043702e40a20034180066a41186a420037030020034180066a41106a420037030020034180066a41086a220742003703002003420037038006200341c0076a41de80ca0041091081022007200341c0076a41086a2208290000370300200320032900c00737038006200341c0076a418c81ca00410b108102200241086a2008290000370000200220032900c0073700004104102c2202450d60200342043702c407200320023602c0072003200136029009200341c0076a20034190096a410410744120102c2202450d602003422037029409200320023602900920034190096a200341c00a6a41047241201074200341c0076a200328029009220220032802980910740240200328029409450d002002102e0b200341c0076a200341e40a6a4120107420034190096a41086a200341c0076a41086a280200360200200320032903c0073703900920034180066a412020034190096a10c702200341d80a6a2005370300200341d00a6a2006370300200341cc0a6a2001360200200341c00a6a41086a41003a0000200341093a00c00a200341c00a6a10fe01200341063a00c0050c630b20032902c40a2105200320073a00c005200320032f01c8063b00c105200320053702c405200320012d00003a00c3050b20032d00c0054106460d6120032902c40521050c600b200141086a2802002109200141046a2802002101200341c00a6a41286a200241286a280200360200200341c00a6a41206a200241206a290200370300200341c00a6a41186a200241186a290200370300200341c00a6a41106a200241106a290200370300200341c00a6a41086a200241086a290200370300200320022902003703c00a20034190096a200341c00a6a10c102200341b8046a41086a220220034199096a290000370300200341b8046a41106a2207200341a1096a290000370300200341b8046a41186a2208200341a9096a29000037030020032003290091093703b80420032d0090094101460d23200341d8046a41186a2008290300370300200341d8046a41106a2007290300370300200341d8046a41086a2002290300370300200320032903b8043703d804200341c00a6a200110940820032802c80a210820032802c00a21024100210720034190096a41046a41003a00002003410036029009200341306a2002200820034190096a4105410010ca04024002402003280230450d0020032802342107200341003a00f00802402007410520074105491b2207450d002007417f6a210b024020032d0090092207410371220a4103460d00024002400240200a0e03000102000b2007410276210a410121070c050b200b450d0220032d009109410874200772220741ffff0371418002490d02200741fcff0371410276210a410121070c040b200b4103490d0120032f00910920032d00930941107472410874200772220741ffff034d0d012007410276210a410121070c030b200741034b0d00200b4104490d0041012107200328009109220a41ffffffff034b0d020b41c4a6c000412010ef022002200810c907410021070b0b024020032802c40a450d002002102e0b2007450d220240200a20094d0d00200341c0076a41201093080c5b0b20034190096a2001109408200341c00a6a200328029009220a20032802980910ae052003280294092102024002400240024020032802c00a2208450d00200341d80a6a2903002105200341d00a6a2903002106200341c80a6a280200210920032802c40a210702402002450d00200a102e0b200341c00a6a200341d8046a2006200510c302200341ca066a220220032d00c30a3a0000200320032f00c10a3b01c80620032d00c00a220a4106470d0320034180066a41186a220a200341d8046a41186a29030037030020034180066a41106a220b200341d8046a41106a29030037030020034180066a41086a220c200341d8046a41086a290300370300200320032903d8043703800620092007470d02200741016a220220074f0d010c620b02402002450d00200a102e0b200341c0076a41021093080c5d0b2007410174220d2002200d20024b1b22024104200241044b1b220241ffffff3f71200246210d200241057421020240024020070d00200341003602c00a0c010b200341c80a6a4101360200200320083602c00a200320074105743602c40a0b20034190096a2002200d200341c00a6a107d20034198096a280200210202402003280290094101470d002002450d610c600b2003280294092108200241057621070b200820094105746a2202200329038006370000200241186a200a290300370000200241106a200b290300370000200241086a200c290300370000200341e0066a2001109408200941016a22024105744114722201417f4c0d5f20032802e806210b20032802e006210a2001102c220c450d5e200341003602980920032001360294092003200c36029009200220034190096a107602402002450d00200941057441206a210120082102034020034190096a200241201074200241206a2102200141606a22010d000b0b200320063703c00a200320053703c80a20034190096a200341c00a6a41101074200a200b200328029009220220032802980910b2010240200328029409450d002002102e0b024020032802e406450d00200a102e0b0240200741ffffff3f71450d002008102e0b200341063a00c0070c5d0b20032902c40a21052003200a3a00c007200320032f01c8063b00c107200320053702c407200320022d00003a00c307200741ffffff3f71450d5a2008102e0c5a0b200141046a2802002108200341d0086a41046a22092001410f6a2d00003a000020032001410b6a2800003602d008200141186a2903002105200141106a2903002106200141286a290300210e200141206a290300210f2001410a6a2d00002110200141096a2d00002111200141086a2d00002112200341c00a6a41286a220a200241286a280200360200200341c00a6a41206a220b200241206a290200370300200341c00a6a41186a220c200241186a290200370300200341c00a6a41106a220d200241106a290200370300200341c00a6a41086a2213200241086a290200370300200320022902003703c00a20034190096a200341c00a6a10c10220034180066a41086a220220034190096a41096a29000037030020034180066a41106a2201200341a1096a29000037030020034180066a41186a2207200341a9096a29000037030020032003290091093703800620032d0090094101460d1e200341c0076a41186a2007290300370300200341c0076a41106a2001290300370300200341c0076a41086a200229030037030020032003290380063703c00720034198046a41046a20092d00003a0000200320032802d00836029804200341f0086a2008108905200341c00a6a20032802f008220920032802f808108a052002200341800b6a2903003703002001200341880b6a2903003703002007200341900b6a29030037030020034180066a41206a200341980b6a29030037030020034180066a41286a200341a00b6a290300370300200320032800c10a3602c806200320032800c40a3600cb062003200341f80a6a2903003703800602400240024020032d00c00a22024102460d00200341f00a6a2903002114200a2903002115200b2903002116200c2903002117200d290300211820132903002119200341c0056a41286a220120034180066a41286a290300370300200341c0056a41206a220720034180066a41206a290300370300200341c0056a41186a220a20034180066a41186a290300370300200341c0056a41106a220b20034180066a41106a290300370300200341c0056a41086a220c20034180066a41086a29030037030020032003290380063703c005024020032802f408450d002009102e0b200341c00a6a41286a2001290300370300200341c00a6a41206a2007290300370300200341c00a6a41186a200a290300370300200341c00a6a41106a200b290300370300200341c00a6a41086a200c290300370300200320032903c0053703c00a02402002450d0020034190096a4111109308200341d8046a20034190096a41e40010e9081a0c020b20034190096a412c6a201437020020034190096a411c6a201637020020034190096a410c6a201837020020034190096a413c6a200341c00a6a41086a29030037020020034190096a41c4006a200341c00a6a41106a220229030037020020034190096a41cc006a200341c00a6a41186a29030037020020034190096a41d4006a200341c00a6a41206a29030037020020034190096a41dc006a200341c00a6a41286a290300370200200320153702b409200320173702a4092003201937029409200320032903c00a3702c409200341d8046a20034190096a41e40010e9081a200341e0066a41086a200341d8046a413c6a290200370300200341e0066a41106a200341d8046a41c4006a290200370300200341e0066a41186a200341d8046a41cc006a290200370300200341e0066a41206a200341d8046a41d4006a290200370300200341e0066a41286a200341d8046a41dc006a2902003703002003200329028c053703e006200341d8046a410c6a290200211a200341d8046a411c6a290200211b200341d8046a412c6a290200211820032902dc04211c20032902ec04211d20032902fc04211e20034190096a200341c0076a10c802200341c00a6a200328029009220720032802980910c902427f2005200e7c2006200f7c22172006542201ad7c22142001201420055420142005511b220b1b2005201241ff017141014622011b2115427f2017200b1b200620011b21192002290300420020032903c00a42015122021b211620032903c80a420020021b211f0240200328029409450d002007102e0b2019201f56201520165620152016511b450d0220034188086a411b1093080c590b024020032802f408450d002009102e0b20034190096a4111109308200341d8046a20034190096a41e40010e9081a0b20034188086a41086a200341d8046a41086a280200360200200320032902d804370388080c570b200341c0056a200341c0076a10b808200341c00a6a20032802c00520032802c80510b105200341e8086a41026a220220032d00c30a3a000041082107200341d0066a41086a200341a00b6a290300370300200320032f00c10a3b01e8082003200341980b6a2903003703d006200341900b6a2903002120200341880b6a2903002121200341ac0b6a2802002122200341a80b6a28020021230240024020032d00c00a220c4102470d00420021244100210d42002125420021264100211342002119420021274200211f420021284100210c0c010b200341d80a6a2903002127200341d00a6a2903002119200341e80a6a2903002128200341e00a6a290300211f200341800b6a2903002126200341f80a6a2903002125200341c00a6a41086a280200210d200341cc0a6a2802002113200341f00a6a290300212420032802c40a2107200341c0086a41026a20022d00003a000020034190096a41086a200341d0066a41086a290300370300200320032f01e8083b01c008200320032903d006370390090b0240200c450d0020034180066a41181093080c4f0b41002101024002400240024020130e025000010b41002102200728020022012008460d01200120084921010c4f0b4100210220132101034020022001410176220920026a220a2007200a41306c6a28020020084b1b2102200120096b220141014b0d000b02402007200241306c6a28020022012008460d00201341e4004b0d02200220012008496a21010c4f0b201320024d0d220b2007200241306c6a220141206a2109200141186a2903002116200141106a222929030021152001410a6a210a200141096a222a2d0000212b0240024002400240024020012d0008222c4101470d00200141286a290300212d2009290300212e20034198016a20152016420a420010e70820034188016a202e202d420a420010e708201e20157d222f201e56201820167d201e201554ad7d221620185620162018511b0d02202f202e7d2230202f562016202d7d202f202e54ad7d221520165620152016511b0d02201c20032903980122167d222f201c56201a20034198016a41086a2903007d201c201654ad7d2216201a562016201a511b0d01201d20032903880122187d221e201d56201b20034188016a41086a2903007d201d201854ad7d2218201b562018201b511b450d032030211e20152118202f211c2016211a0c020b02400240200a2d0000223141ff0171450d0041062132024002400240024002400240024020314107710e0700010203040506000b410021320c050b410121320c040b410221320c030b410321320c020b410421320c010b410521320b200341b8016a201642002032ad222e420010e808200341c8016a20154200202e420010e808427f200341d0016a290300222e20032903b8017c223020032903c0014200522030202e547222321b212d427f20032903c80120321b212e0c010b200341a8016a20152016420a420010e708200341b0016a290300212d20032903a801212e0b201e20157d2230201e56201820167d201e201554ad7d221520185620152018511b0d010240202b41ff01710d00201d202e7d2218201d56201b202d7d201d202e54ad7d2216201b562016201b511b0d012018211d2016211b201c212f201a21160c040b201c202e7d222f201c56201a202d7d201c202e54ad7d2216201a562016201a511b450d030b2030211e201521180b20034180066a411a1093080c510b201e211d2018211b0b201320024d0d20200141086a2101202c0d4a202b41ff0171222b4102460d4a4200201520287d2030201f54ad7d22182030201f7d221e203056201820155620182015511b222c1b21184200201e202c1b211e0240202b0d004200201b20277d201d201954ad7d2215201d20197d221a201d562015201b562015201b511b222b1b211b4200201a202b1b211d0c4c0b4200201620277d202f201954ad7d2215202f20197d221c202f56201520165620152016511b222b1b211a4200201c202b1b211c0c4c0b20034180066a41211093080c4e0b200141046a280200210b200241196a2d0000210c200241186a2d0000210d200241166a2f01002113200241156a2d00002112200241146a2d00002110200241126a2f01002111200241116a2d00002122200241106a2d000021232002410c6a2802002109200241086a280200210a200241046a2802002108200241026a2f0100212b2002280228210120022d0001212920022d00002107200341c00a6a41086a200241226a28010036020020032002411a6a2901003703c00a02400240024020074101470d0020012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b200841ff0171450d010c480b20074103460d0120070d482008410876210220084110762107200a411076212a200a410876212c200941107621322009410876213120032903c00a210520012001280200417f6a22333602002003200537039009024020330d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22332033280200417f6a223336020020330d002001102e0b2003200c3a00d70a2003200d3a00d60a200320133b01d40a200320123a00d30a200320103a00d20a200320113b01d00a200320223a00cf0a200320233a00ce0a200320323b01cc0a200320313a00cb0a200320093a00ca0a2003202a3b01c80a2003202c3a00c70a2003200a3a00c60a200320073b01c40a200320023a00c30a200320083a00c20a2003202b3b01c00a20032003290390093703d80a202941ff0171450d014110102c2202450d5d200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d5d20014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220736020020070d482002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22072007280200417f6a220736020020070d482002102e0c480b200a41036c2009410174490d460b200341f0086a200b108905200341c00a6a20032802f008220220032802f808108a0520034180066a41086a2201200341800b6a29030037030020034180066a41106a2207200341880b6a29030037030020034180066a41186a2208200341900b6a29030037030020034180066a41206a2209200341980b6a29030037030020034180066a41286a220a200341a00b6a290300370300200320032800c10a3602c806200320032800c40a3600cb062003200341f80a6a2903003703800602400240024020032d00c00a220c4102460d00200341f00a6a2903002116200341c00a6a41286a2903002117200341c00a6a41206a2903002118200341c00a6a41186a2903002119200341c00a6a41106a290300211f200341c00a6a41086a290300211e200341c0056a41286a200a290300370300200341c0056a41206a2009290300370300200341c0056a41186a2008290300370300200341c0056a41106a2007290300370300200341c0056a41086a200129030037030020032003290380063703c005024020032802f408450d002002102e0b200341c0076a41086a200341c0056a41086a2903002205370300200341c0076a41106a200341c0056a41106a2903002206370300200341c0076a41186a200341c0056a41186a290300220e370300200341c0076a41206a200341c0056a41206a290300220f370300200341c0076a41286a200341c0056a41286a2903002214370300200320032903c00522153703c007200341c00a6a41286a22082014370300200341c00a6a41206a2209200f370300200341c00a6a41186a2202200e370300200341c00a6a41106a22012006370300200341c00a6a41086a22072005370300200320153703c00a0240200c450d0020034190096a4111109308200341d8046a20034190096a41e40010e9081a0c020b200341bc096a2016370200200341ac096a20183702002003419c096a201f370200200341cc096a2007290300370200200341d4096a2001290300370200200341dc096a2002290300370200200341e4096a2009290300370200200341ec096a2008290300370200200320173702b409200320193702a4092003201e37029409200320032903c00a3702c409200341d8046a20034190096a41e40010e9081a200341e0066a200341dc046a41e00010e9081a20034180066a41186a200341b0076a290300220537030020034180066a41106a200341a8076a290300220637030020034180066a41086a200341a0076a290300220e3703002003200329039807220f3703800620022005370300200120063703002007200e3703002003200f3703c00a20034190096a200341c00a6a10b9082003280290092201200328029809108f0221020240200328029409450d002001102e0b2002450d0220034188086a41041093080c460b024020032802f408450d002002102e0b20034190096a4111109308200341d8046a20034190096a41e40010e9081a0b20034188086a41086a200341d8046a41086a280200360200200320032902d804370388080c440b200341c00a6a41186a20034180066a41186a290300370300200341c00a6a41106a20034180066a41106a290300370300200341c00a6a41086a220120034180066a41086a29030037030020032003290380063703c00a20034190096a200341c00a6a10b90820032802900921022003280298092107200341013a00f00820022007200341f0086a410110b2010240200328029409450d002002102e0b200341cc0a6a200b360200200141063a0000200341093a00c00a200341c00a6a10fe01200341c00a6a200b10890520032802c00a220220032802c80a10ff01024020032802c40a450d002002102e0b200341063a0088080c440b20034190096a41186a200141196a29000037030020034190096a41106a200141116a29000037030020034190096a41086a200141096a2900003703002003200129000137039009200241026a2f0100210b200241046a2802002108200241086a28020021092002410c6a280200210a200241106a2d0000210c200241116a2d0000210d200241126a2f01002113200241146a2d00002112200241156a2d00002110200241166a2f01002111200241186a2d00002122200241196a2d0000212320022d0001212b2002280228210120022d00002107200341c00a6a41086a200241226a28010036020020032002411a6a2901003703c00a024002400240024020074101470d0020012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0240200841ff01710d002009410174200a4f0d030b4110102c2202450d5e200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d5e20014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220736020020070d012002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22072007280200417f6a220736020020070d012002102e0c010b20074103460d0120070d002008410876210220084110762107200941107621292009410876212a200a411076212c200a410876213220032903c00a210520012001280200417f6a2231360200200320053703d804024020310d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22312031280200417f6a223136020020310d002001102e0b200320233a00d70a200320223a00d60a200320113b01d40a200320103a00d30a200320123a00d20a200320133b01d00a2003200d3a00cf0a2003200c3a00ce0a2003202c3b01cc0a200320323a00cb0a2003200a3a00ca0a200320293b01c80a2003202a3a00c70a200320093a00c60a200320073b01c40a200320023a00c30a200320083a00c20a2003200b3b01c00a200320032903d8043703d80a202b41ff0171450d014110102c2202450d5d200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d5d20014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220736020020070d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22072007280200417f6a220736020020070d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b200341023a00e0060c010b20034180066a41186a2201420037030020034180066a41106a2202420037030020034180066a41086a220742003703002003420037038006200341c0076a41de80ca0041091081022007200341c0076a41086a2208290000370300200320032900c00737038006200341c0076a418081ca00410c10810220012008290000370300200220032900c0073703000240024020034180066a4120108f020d00200341c00a6a41186a20034190096a41186a290300370300200341c00a6a41106a20034190096a41106a290300370300200341c00a6a41086a20034190096a41086a29030037030020032003290390093703c00a200341d8046a200341c00a6a10b708024020032802dc042201450d0020032802d8042107200341d80a6a22084200370300200341d00a6a22094200370300200341c00a6a41086a220a4200370300200342003703c00a20034188086a41d9fcc6004106108102200a20034188086a41086a220b29000037030020032003290088083703c00a20034188086a4180f4cb0041061081022008200b2900003703002009200329008808370300200341d8016a200341c00a6a4120108e02024020032802dc01410020032802d8011b20074f0d00200341e0066a410610930820032802e00441ffffff3f71450d032001102e0c030b20032802e00441ffffff3f71450d002001102e0b200341c00a6a41186a20034190096a41186a290300370300200341c00a6a41106a20034190096a41106a290300370300200341c00a6a41086a20034190096a41086a29030037030020032003290390093703c00a200341003a00e00a20034180066a41186a420037030020034180066a41106a420037030020034180066a41086a220142003703002003420037038006200341c0076a41de80ca0041091081022001200341c0076a41086a2207290000370300200320032900c00737038006200341c0076a418081ca00410c108102200241086a2007290000370000200220032900c00737000020034180066a200341c00a6a10ca05200341063a00e0060c440b200341e0066a41051093080b20032d00e0064106460d420b20032802e0062102200020032902e406370024200041206a2002360000200041186a41003a00002000420037030820004201370300200424000f0b20034190096a41186a200141196a29000037030020034190096a41106a200141116a29000037030020034190096a41086a200141096a2900003703002003200129000137039009200241026a2f0100210b200241046a2802002108200241086a28020021092002410c6a280200210a200241106a2d0000210c200241116a2d0000210d200241126a2f01002113200241146a2d00002112200241156a2d00002110200241166a2f01002111200241186a2d00002122200241196a2d0000212320022d0001212b2002280228210120022d00002107200341c00a6a41086a200241226a28010036020020032002411a6a2901003703c00a02400240024020074101470d0020012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b200841ff0171450d010c410b20074103460d0120070d412008410876210220084110762107200941107621292009410876212a200a411076212c200a410876213220032903c00a210520012001280200417f6a2231360200200320053703d804024020310d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22312031280200417f6a223136020020310d002001102e0b200320233a00d70a200320223a00d60a200320113b01d40a200320103a00d30a200320123a00d20a200320133b01d00a2003200d3a00cf0a2003200c3a00ce0a2003202c3b01cc0a200320323a00cb0a2003200a3a00ca0a200320293b01c80a2003202a3a00c70a200320093a00c60a200320073b01c40a200320023a00c30a200320083a00c20a2003200b3b01c00a200320032903d8043703d80a202b41ff0171450d014110102c2202450d5b200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d5b20014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220736020020070d412002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22072007280200417f6a220736020020070d412002102e0c410b200941056c200a41036c490d3f0b200341c00a6a41186a20034190096a41186a290300370300200341c00a6a41106a20034190096a41106a290300370300200341c00a6a41086a20034190096a41086a29030037030020032003290390093703c00a200341023a00e00a20034180066a41186a2202420037030020034180066a41106a2201420037030020034180066a41086a220742003703002003420037038006200341c0076a41de80ca0041091081022007200341c0076a41086a2208290000370300200320032900c00737038006200341c0076a418081ca00410c10810220022008290000370300200120032900c00737030020034180066a200341c00a6a10ca05200041186a41003a000020004200370308200020032800e0063600192000411c6a200341e3066a28000036000020004200370300200424000f0b20034190096a41186a200141196a29000037030020034190096a41106a200141116a29000037030020034190096a41086a200141096a2900003703002003200129000137039009200241026a2f0100210b200241046a2802002108200241086a28020021092002410c6a280200210a200241106a2d0000210c200241116a2d0000210d200241126a2f01002113200241146a2d00002112200241156a2d00002110200241166a2f01002111200241186a2d00002122200241196a2d0000212320022d0001212b2002280228210120022d00002107200341c00a6a41086a200241226a28010036020020032002411a6a2901003703c00a02400240024020074101470d0020012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0240200841ff01710d002009200a4f0d030b4110102c2202450d5b200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d5b20014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220736020020070d012002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22072007280200417f6a220736020020070d012002102e0c010b20074103460d0120070d002008410876210220084110762107200941107621292009410876212a200a411076212c200a410876213220032903c00a210520012001280200417f6a2231360200200320053703d804024020310d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22312031280200417f6a223136020020310d002001102e0b200320233a00d70a200320223a00d60a200320113b01d40a200320103a00d30a200320123a00d20a200320133b01d00a2003200d3a00cf0a2003200c3a00ce0a2003202c3b01cc0a200320323a00cb0a2003200a3a00ca0a200320293b01c80a2003202a3a00c70a200320093a00c60a200320073b01c40a200320023a00c30a200320083a00c20a2003200b3b01c00a200320032903d8043703d80a202b41ff0171450d014110102c2202450d5a200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d5a20014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220736020020070d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22072007280200417f6a220736020020070d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b200341f0086a41026a200341c0056a41026a2d000022023a0000200320032f00c00522013b01f008200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a000020004201370300200424000f0b200341c00a6a41186a20034190096a41186a290300370300200341c00a6a41106a20034190096a41106a290300370300200341c00a6a41086a20034190096a41086a29030037030020032003290390093703c00a200341013a00e00a20034180066a41186a2202420037030020034180066a41106a2201420037030020034180066a41086a220742003703002003420037038006200341c0076a41de80ca0041091081022007200341c0076a41086a2208290000370300200320032900c00737038006200341c0076a418081ca00410c10810220022008290000370300200120032900c00737030020034180066a200341c00a6a10ca05200041186a41003a000020004200370308200020032800e0063600192000411c6a200341e3066a28000036000020004200370300200424000f0b200141286a2802002134200141246a2802002109200241266a2f00002135200241226a28000021082002411a6a2900002105200241196a2d0000210b200241186a2d0000210c200241166a2f0000210d200241156a2d00002129200241146a2d0000212a200241126a2f0000212c200241116a2d00002132200241106a2d000021312002410e6a2f000021122002410d6a2d000021102002410c6a2d000021112002410a6a2f00002122200241096a2d00002123200241086a2d0000212b200241066a2f00002133200241056a2d00002136200241046a2d00002113200241026a2f000021372002280228210720022d0001213820022d00002102200341d8046a41186a200141196a290000370300200341d8046a41106a200141116a290000370300200341d8046a41086a200141096a290000370300200320012900013703d804200941880e490d37200320083602c80a200320053703c00a0240200241ff017122014102470d0020072007280200417f6a220236020020032902c40a2106024020020d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b201341ff01710d364101210a2022411074202341087472202b7241036c2012411074201041087472201172410174490d36410021010c350b024020014103470d00410021014101210a0c350b200241ff01710d3620072007280200417f6a22023602002003200537039009024020020d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b2003200b3a00d70a2003200c3a00d60a2003200d3b01d40a200320293a00d30a2003202a3a00d20a2003202c3b01d00a200320323a00cf0a200320313a00ce0a200320123b01cc0a200320103a00cb0a200320113a00ca0a200320223b01c80a200320233a00c70a2003202b3a00c60a200320333b01c40a200320363a00c30a200320133a00c20a200320373b01c00a200320032903900922053703d80a0240203841ff01710d00410321020c380b4110102c2201450d57200141f8f7c60036020c2001410136020820014281808080103702004110102c2207450d5720074190f8c60036020c20074101360208200742818080801037020020012001280200417f6a220a36020041002102200a0d372001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a220a200a280200417f6a220a360200200a0d372001102e0c370b200341f8066a200141196a290000370300200341e0066a41106a200141116a290000370300200341e0066a41086a200141096a290000370300200320012900013703e0062002280228210102400240024020022d00004102470d00200241246a2802002107200241226a2f01002108200241216a2d00002109200241206a2d0000210a2002411e6a2f0100210b2002411d6a2d0000210c2002411c6a2d0000212b2002411a6a2f01002129200241196a2d0000212a200241116a2900002105200241106a2d0000210d2002410e6a2f000021132002410d6a2d000021122002410c6a2d000021102002410a6a2f00002111200241096a2d00002122200241086a2d00002123200241066a2f0000212c200241056a2d00002132200241046a2d0000210220012001280200417f6a2231360200024020310d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22312031280200417f6a223136020020310d002001102e0b200320073a00df0a200320083b00dd0a200320093a00dc0a2003200a3a00db0a2003200b3b00d90a2003200c3a00d80a2003202b3a00d70a200320293b00d50a2003202a3a00d40a200320053702cc0a2003200d3a00cb0a200320133b00c90a200320123a00c80a200320103a00c70a200320113b00c50a200320223a00c40a200320233a00c30a2003202c3b00c10a200320323a00c00a200241ff01714101460d014110102c2202450d59200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d5920014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220736020020070d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22072007280200417f6a220736020020070d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b200341023a00c0050c010b200320032d00c20a3a00da04200320032f01c00a3b01d804200320073a00f704200320083b00f504200320093a00f4042003200a3a00f3042003200b3b00f1042003200c3a00f0042003200d3a00e304200320133b00e104200320123a00e004200320103a00df04200320113b00dd04200320223a00dc04200320233a00db04200320032903d00a3703e804200320053c00e404200320054218883c00e704200320054208883d00e504200341b8046a41186a22024200370300200341b8046a41106a22014200370300200341b8046a41086a22074200370300200342003703b804200341c0076a41de80ca0041091081022007200341c0076a41086a2208290000370300200320032900c0073703b804200341c0076a418081ca00410c10810220022008290000370300200120032900c007370300200341c00a6a200341b8046a10aa0520032d00e00a210220034180066a41186a2201200341c00a6a41186a220729030037030020034180066a41106a2208200341c00a6a41106a220929030037030020034180066a41086a220a200341c00a6a41086a220b290300370300200320032903c00a370380060240024020024103460d0020034190096a41186a2001290300220537030020034190096a41106a2008290300220637030020034190096a41086a200a290300220e3703002003200329038006220f370390092007200537030020092006370300200b200e3703002003200f3703c00a0240200341e0066a200341c00a6a412010ec08450d00200341c0056a41021093080c020b20034190096a200341e0066a10ba08200341c00a6a200328029009220220032802980910b70520032903c80a210520032802c40a21010240200328029409450d002002102e0b2001410120011b210941002102024002400240024002402005420020011b22054220882206a7220a0e020201000b41002102200a210103402001410176220820026a210720072002200920074105746a200341d8046a412010ec084101481b2102200120086b220141014b0d000b0b200920024105746a200341d8046a412010ec082207450d02200341c00a6a41186a200341d8046a41186a290300370300200341c00a6a41106a200341d8046a41106a290300370300200341c00a6a41086a200341d8046a41086a290300370300200320032903d8043703c00a200341c00a6a210120022007411f766a2207200a4d0d012007200a1045000b200341c00a6a41186a200341d8046a41186a290300370300200341c00a6a41106a200341d8046a41106a290300370300200341c00a6a41086a200341d8046a41086a290300370300200320032903d8043703c00a41002107200341c00a6a21010b024002400240200a2005a7460d00200521060c010b200a41016a2202200a490d5d200a4101742208200220022008491b22024104200241044b1b220241ffffff3f7120024621082002410574210202400240200a0d0020034100360290090c010b20034198096a41013602002003200936029009200320064205863e0294090b200341c0076a2002200820034190096a107d200341c8076a280200210220032802c0074101460d0120032802c40721092002410576ad21060b200920074105746a220241206a2002200a20076b41057410ea081a200241186a200141186a290000370000200241106a200141106a290000370000200241086a200141086a29000037000020022001290000370000200341c00a6a41186a22014200370300200341c00a6a41106a22074200370300200341c00a6a41086a22024200370300200342003703c00a20034188086a41d9fcc6004106108102200220034188086a41086a220829000037030020032003290088083703c00a20034188086a4180f4cb004106108102200120082900003703002007200329008808370300200341e8016a200341c00a6a4120108e0220032802e801210120032802ec0121072002200642ffffffff0f8320054280808080107c4280808080708384370300200320093602c40a2003200741c093066a41c0930620011b22023602c00a20034190096a200341e0066a10ba082003280290092201200328029809200341c00a6a10bf050240200328029409450d002001102e0b0240200642ffffff3f83500d002009102e0b200341c00a6a41086a410a3a0000200341c00a6a41096a20032903d804370000200341e90a6a20032903e006370000200341d10a6a200341d8046a41086a290300370000200341d90a6a200341d8046a41106a290300370000200341e10a6a200341d8046a41186a290300370000200341f10a6a200341e0066a41086a290300370000200341f90a6a200341e0066a41106a290300370000200341810b6a200341e0066a41186a290300370000200341093a00c00a2003418c0b6a2002360200200341c00a6a10fe0120034180066a41186a2202420037030020034180066a41106a2201420037030020034180066a41086a220742003703002003420037038006200341c0076a41de80ca0041091081022007200341c0076a41086a2208290000370300200320032900c00737038006200341c0076a418081ca00410c10810220022008290000370300200120032900c00737030020034180066a412010ff01200341063a00c0050c370b2002450d5b0c5a0b200341c0056a410a109308200542ffffff3f83500d012009102e0c010b200341c0056a41091093080b20032d00c0054106460d330b20032802c0052102200020032902c405370024200041206a2002360000200041186a41003a00002000420037030820004201370300200424000f0b200141046a2802002101200341c00a6a41286a200241286a280200360200200341c00a6a41206a200241206a290200370300200341c00a6a41186a200241186a290200370300200341c00a6a41106a200241106a290200370300200341c00a6a41086a2207200241086a290200370300200320022902003703c00a200341c00a6a10a7050d16200341cc0a6a2001360200200741063a0000200341093a00c00a200341c00a6a10fe01200341c00a6a200110890520032802c00a220220032802c80a10ff01024020032802c40a450d002002102e0b200041186a41003a00002000420037030820002003280090093600192000411c6a20034193096a28000036000020004200370300200424000f0b200141046a2802002101200341c00a6a41286a200241286a280200360200200341c00a6a41206a200241206a290200370300200341c00a6a41186a200241186a290200370300200341c00a6a41106a200241106a290200370300200341c00a6a41086a200241086a290200370300200320022902003703c00a200341c00a6a10a7050d14200320013602e806200342e4cab5fbb6ccdcb0e3003703e006410c102c2202450d542003420c3702c407200320023602c007200341c0076a200341e0066a41081074200320013602c00a200341c0076a200341c00a6a41041074200341033a00c00a20034190096a41086a20032802c807360200200320032903c00737039009200341d8046a200341c00a6a20034190096a10c304024020032d00d8044106470d00200341063a0080060c300b20034180066a410210930820032d0080064106460d2f20032902840621050c2e0b200141306a2903002105200141286a2903002106200141216a2d0000210b20034198046a41186a2207200141196a29000037030020034198046a41106a2208200141116a29000037030020034198046a41086a2209200141096a2900003703002003200129000137039804200341c00a6a41286a200241286a280200360200200341c00a6a41206a200241206a290200370300200341c00a6a41186a200241186a290200370300200341c00a6a41106a200241106a290200370300200341c00a6a41086a200241086a290200370300200320022902003703c00a20034190096a200341c00a6a10c10220034180066a41086a220220034190096a41096a29000037030020034180066a41106a220120034190096a41116a29000037030020034180066a41186a220a20034190096a41196a29000037030020032003290091093703800620032d0090094101460d11200341b8046a41186a200a290300220e370300200341b8046a41106a2001290300220f370300200341b8046a41086a20022903002214370300200320032903800622153703b80420034188086a41186a200e37030020034188086a41106a200f37030020034188086a41086a20143703002003201537038808200341f0086a41186a2007290300370300200341f0086a41106a2008290300370300200341f0086a41086a200929030037030020032003290398043703f008024020034188086a200341f0086a412010ec080d00200341c00a6a411f1093080c2c0b20034190096a20034188086a10c802200341c00a6a200328029009220120032802980910c902200341d00a6a290300420020032903c00a42015122021b210e20032903c80a420020021b210f0240200328029409450d002001102e0b0240200f20065a200e20055a200e2005511b0d00200341c00a6a411b1093080c2c0b200341a8086a20034188086a10b808200341c00a6a20032802a808223720032802b008223910b105200341e8086a41026a220220032d00c30a3a0000200341d0066a41086a2201200341a00b6a290300370300200320032f00c10a3b01e8082003200341980b6a2903003703d006200341ac0b6a280200213a0240024020032d00c00a22074102470d0020034190096a41206a220241003602004200211420034190096a41106a420037030020034190096a41186a4200370300200341083602c40520034190096a41086a4200370300200342003703c805200341003a00c005200342003703d005200342003703d805200342003703900920034190096a41306a29030021192002290300211b20032903b809211f4200210e4200210f420021150c010b200341c00a6a41186a2903002116200341c00a6a41106a2903002117200341e80a6a290300210e200341c00a6a41206a2903002114200341f80a6a2903002115200341900b6a2903002119200341880b6a290300211f200341c00a6a41086a2802002108200341cc0a6a2802002109200341c00a6a41306a290300210f20032802c40a210a20034190096a41206a200341c00a6a41c0006a290300221b37030020034190096a41306a201937030020034190096a41c0006a2001290300370300200320173703d005200320153703a80920032014370390092003201f3703b809200320073a00c005200320032f01e8083b00c105200320093602cc05200320083602c8052003200a3602c4052003200f3703a009200320032903d0063703c809200320163703d8052003200e37039809200320022d00003a00c3052003200341a80b6a280200220a3602b8080b200342003703d807200320053703d007200320063703c807200320032903f0083700e1062003200341f0086a41086a2903003700e9062003200341f0086a41106a2903003700f1062003200341f0086a41176a2900003700f8062003200b3a00c107200320032d008f093a00c007200320153703d8072003200f3703d0072003200e3703c807200341013a00e00620032903e006211620032903e806211820032903f006211e20032903f806211a200320032903d805221d3703f806200320032903d00522273703f006200320032903c805221c3703e806200320032903c00522173703e0062003201a3703d8052003201e3703d005200320183703c805200320163703c00520032903c007211e200320143703c007200341a8096a4200370300200320053703a00920032006370398092003201e3703900920032903c809211e200341c0096a4200370300200342003703c809200342003703b809200342003703b00920032903d009211a200342003703d009200341003602b808200341c8096a2108200341b8096a2109200341b0096a21012016a721070240024002402017a741ff01714101460d002017422088a7210c201ca7210a201c422088a70d02200920034190096a200741ff017141014622021b2207200e37030820072014370300200341a8096a200341c0056a41107220021b2207201d37030820072027370300200820034190096a41106a20021b220720153703082007200f370300200341b8086a200120021b201ba7360200200a450d01200a41306c450d01200c102e0c010b200341c00a6a41176a200341e0066a410172220241176a290000370000200341c00a6a41106a200241106a290000370300200341c00a6a41086a200241086a290000370300200320022900003703c00a20032014a7220c3a00df0a4106210202400240024002400240024002400240200c41087641ff01710e0706000102030405060b410121020c040b410221020c030b410321020c020b410421020c010b410521020b200341b0026a200f42002002ad2214420010e808200341c0026a200e42002014420010e808427f200341c8026a290300221420032903b0027c221620032903b80242005220162014547222021b2114427f20032903c00220021b21160c010b200341a0026a200e200f420a420010e708200341a8026a290300211420032903a00221160b200341c00a6a20162014200e200f10bb081a200920034190096a200741ff017141014622021b220720193703082007201f370300200820034190096a41106a20021b2207201a3703082007201e3703002001200341c0056a41187220021b201b37030020034190096a41186a200341c0056a41107220021b2015370300200341b8086a200120021b200a3602000b02400240200b41ff0171450d00410621020240024002400240024002400240200b4107710e0700010203040506000b410021020c050b410121020c040b410221020c030b410321020c020b410421020c010b410521020b20034180026a200542002002ad220e420010e80820034190026a20064200200e420010e808427f20034198026a290300220e2003290380027c220f200329038802420052200f200e547222021b211a427f20032903900220021b211c0c010b200341f0016a20062005420a420010e708200341f8016a290300211a20032903f001211c0b200341c0086a200341f0086a10b808200341c00a6a20032802c008223b20032802c808223c10b105200341e8086a41026a220220032d00c30a3a000041082138200341d0066a41086a2201200341a00b6a290300370300200320032f00c10a3b01e8082003200341980b6a2903003703d006200341900b6a290300211b200341880b6a2903002128200341ac0b6a280200213d200341a80b6a280200213e0240024020032d00c00a22344102470d004200211f4100213541002136420021184200211e4200211942002121420021204200211d410021340c010b200341d80a6a2903002118200341d00a6a290300211f200341e80a6a2903002119200341e00a6a290300211e200341800b6a290300211d200341f80a6a2903002120200341c00a6a41086a2802002135200341cc0a6a2802002136200341f00a6a290300212120032802c40a2107200341e4086a41026a20022d00003a0000200341d0086a41086a2001290300370300200320032f01e8083b01e408200320032903d0063703d0084101210120344101460d14200721380b427f201920057c201e20067c220f201e542202ad7c220e2002200e201954200e2019511b22021b2119427f200f20021b211e427f2018201a7c201f201c7c220f201f542202ad7c220e2002200e201854200e2018511b22021b2118427f200f20021b211f0240203641306c2202450d00203820026a210c200341f80a6a2101200341c00a6a410172220d41036a2113203821020340200241306a21070240200241086a2d00004101710d00200241096a2d00002133200341d0066a2002280200108905200341c00a6a20032802d006220820032802d8062212108a0520034180066a41086a2229200141086a221029000037030020034180066a41106a222a200141106a221129000037030020034180066a41186a222c200141186a222229000037030020034180066a41206a2232200141206a222329000037030020034180066a41286a2231200141286a222b2900003703002003200d2800003602c806200320132800003600cb062003200129000037038006200341c00a6a41306a2109200341c00a6a41206a210a200341c00a6a41106a210b0240024020032d00c00a22024102470d00410221020c010b2009290300210e200a2903002114200b290300211520032903e80a210f20032903d80a211620032903c80a2117200341d8046a41086a2029290300370300200341d8046a41106a202a290300370300200341d8046a41186a202c290300370300200341d8046a41206a2032290300370300200341d8046a41286a2031290300370300200320032800cb063600eb08200320032802c8063602e80820032003290380063703d80420020d00427f200e20057c200f20067c2227200f542202ad7c220f2002200f200e54200f200e511b22021b210e427f202720021b210f0240024020334101710d00427f2014201a7c2016201c7c22272016542202ad7c22162002201620145420162014511b22021b2114427f202720021b21160c010b427f2015201a7c2017201c7c22272017542202ad7c22172002201720155420172015511b22021b2115427f202720021b21170b410021020b200d20032802e808360000200120032903d8043703002009200e370300200a2014370300200b2015370300201320032800eb083600002010200341d8046a41086a2903003703002011200341d8046a41106a2903003703002022200341d8046a41186a2903003703002023200341d8046a41206a290300370300202b200341d8046a41286a2903003703002003200f3703e80a200320163703d80a200320173703c80a200320023a00c00a0240024020024102470d002008201210ff010c010b20034100360288062003420137038006200341c00a6a20034180066a10bc0520082012200328028006220220032802880610b201200328028406450d002002102e0b20032802d406450d002008102e0b20072102200c2007470d000b0b2038210720342101203621020c2a0b200341c00a6a411d10930820032902c40a210520032802c00a21020240200a450d00200a41306c450d00200c102e0b41012101200741ff01710d2a2018a72207450d2a200741306c450d2a2016422088a7102e0c2a0b200341c00a6a41286a2208200241286a280200360200200341c00a6a41206a2209200241206a290200370300200341c00a6a41186a220a200241186a290200370300200341c00a6a41106a220b200241106a290200370300200341c00a6a41086a220c200241086a290200370300200320022902003703c00a20034190096a200341c00a6a10c10220034180066a41086a220220034199096a29000037030020034180066a41106a2201200341a1096a29000037030020034180066a41186a2207200341a9096a29000037030020032003290091093703800620032d0090094101460d0f200341b8046a41186a20072903002205370300200341b8046a41106a20012903002206370300200341b8046a41086a2002290300220e3703002003200329038006220f3703b804200341f0086a41186a2005370300200341f0086a41106a2006370300200341f0086a41086a200e3703002003200f3703f00820034198046a200341f0086a10b808200341c00a6a200328029804220720032802a004220d10b105200341e8086a41026a220220032d00c30a3a0000200341d0066a41086a200341a00b6a290300370300200320032f00c10a3b01e8082003200341980b6a2903003703d0060240024020032d00c00a22014102470d0042002106200342003703d805200342003703d005200342003703c805200342003703c00520034200370388064100210a200341003a00800620034108360284062003420037039006200342003703980620034100360290094100210142002105420021150c010b200341880b6a290300210f200341800b6a2903002114200341f80a6a2903002115200829030021062009290300210e200a2903002116200b2903002117200341f00a6a2903002105200341cc0a6a2802002108200c280200210920032802c40a210a200341a0096a200341900b6a290300370300200341b0096a200341d8066a29030037030020032017370390062003200f37039809200320013a008006200320032f01e8083b0081062003200836028c0620032009360288062003200a36028406200320153703d805200320053703d005200320032903d0063703a809200320163703980620032014370390092003200e3703c005200320063703c805200320022d00003a0083062003200341a80b6a28020022083602a808200e420888a72101200ea7210a0b200341083602e406200341003a00e006200341003602c007200329039806210e200342003703980620032903900621142003420037039006200329038806210f2003420037038806200342003703d805200342003703d005200342003703c805200342003703c0052003200e3703f806200320143703f0062003200f3703e80620032903d80721162003200341a8096a220229030022173703d80720032903d0072118200320032903a009221e3703d00720032903c80721192003200329039809221a3703c80720032903e006210e200320032903800622143703e0062003200e3703800620032903c007211f2003200329039009221c3703c00720022016370300200320183703a00920032019370398092003201f37039009200ea7210902400240024002402014a741ff0171220b4101470d0020032903b009210e200341ef046a20032900f806370000200341e8046a20032900f106370300200341d8046a41086a20032900e906370300200320032900e1063703d8042003200a3a00f70402400240200141ff0171450d0041062102024002400240024002400240024020014107710e0700010203040506000b410021020c050b410121020c040b410221020c030b410321020c020b410421020c010b410521020b200341e8026a200542002002ad220f420010e808200341f8026a20064200200f420010e808427f20034180036a290300220f20032903e8027c221420032903f0024200522014200f547222021b210f427f20032903f80220021b21140c010b200341d8026a20062005420a420010e708200341e0026a290300210f20032903d80221140b200341d8046a2014200f2006200510bb082102200341c00a6a41186a220a4200370300200341c00a6a41106a220b4200370300200341c00a6a41086a220c4200370300200342003703c00a20034188086a41d9fcc6004106108102200c20034188086a41086a221329000037030020032003290088083703c00a20034188086a4180f4cb004106108102200a2013290000370300200b200329008808370300200341d0026a200341c00a6a4120108e0220032802d402410020032802d0021b210c4180c09306210b0240024002400240024020014107710e0706000102030407060b4180ce18210b0c060b41809c31210b0c050b4180b8e200210b0c040b4180f0c401210b0c030b4180e08903210b0c020b200341c00a6a411c10930820032902c40a210520032802c00a21020240200b0d00200fa72201450d00200141306c450d002014422088a7102e0b41012101200941ff01710d0241010d0241010d02200e422088a7102e410121010c020b4100210b0b20034190096a41086a200341c0056a200941ff017141014622011b2209201e3703082009201a37030020034190096a20034180066a41187220011b201c370300200341c0056a41187220034180066a41107220011b2015370300200341a8086a20034190096a20011b2008200b200c6a2209200820094b1b36020020034190096a41186a200341c0056a41107220011b2201200e20052017200656200e200556200e2005511b22081b37030820012017200620081b370300200a200329039806370300200341f80a6a20032903d805370300200341f00a6a20032903d005370300200341e80a6a20032903c805370300200341c00a6a41206a20032903c005370300200341800b6a200329039009370300200341880b6a200329039809370300200341900b6a20034190096a41106a290300370300200341980b6a20032903a809370300200341a00b6a20034190096a41206a290300370300200341a80b6a20032802a80836020020032003290390063703d00a200320032903880622063703c80a200320032903800622053703c00a024002402005a7220141ff01714102470d002007200d10ff010c010b200341d8046a200341c00a6a10c2042007200d20032802d804220820032802e00410b201024020032802dc04450d002008102e0b200141ff01710d002006a72201450d00200141306c450d002005422088a7102e0b410021010b0240200328029c04450d002007102e0b20010d27200341c00a6a41086a41093a0000200341c00a6a41096a20032903f008370000200341d10a6a200341f0086a41086a290300370000200341d90a6a200341f0086a41106a290300370000200341e10a6a200341f0086a41186a290300370000200341093a00c00a200341c00a6a10fe01200320032800d0083602c0082003200341d3086a2800003600c308200041186a41003a0000200041106a2002ad220542f0cfe9037e200542c0f0f50b7e7c20054280c2d72f7e7c42d08dc582017c37030020004201370308200020032802c0083600192000411c6a20032800c30836000020004200370300200424000f0b200341c00a6a41286a200241286a280200360200200341c00a6a41206a200241206a290200370300200341c00a6a41186a200241186a290200370300200341c00a6a41106a200241106a290200370300200341c00a6a41086a200241086a290200370300200320022902003703c00a0240200341c00a6a10a705450d00200341e0066a41026a200341d8046a41026a2d000022023a0000200320032f00d80422013b01e006200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a000020004201370300200424000f0b20034180066a41186a2202420037030020034180066a41106a2201420037030020034180066a41086a220742003703002003420037038006200341c0076a41de80ca0041091081022007200341c0076a41086a2208290000370300200320032900c00737038006200341c0076a418c81ca00410b10810220022008290000370300200120032900c00737030020034180066a412010ff01200041186a41003a00002000420037030820002003280090093600192000411c6a20034193096a28000036000020004200370300200424000f0b2001410c6a2802002108200141086a2802002107200141046a2802002101200341c00a6a41286a200241286a280200360200200341c00a6a41206a200241206a290200370300200341c00a6a41186a200241186a290200370300200341c00a6a41106a200241106a290200370300200341c00a6a41086a200241086a290200370300200320022902003703c00a20034190096a200341c00a6a10c10220034180066a41086a220220034199096a29000037030020034180066a41106a2209200341a1096a29000037030020034180066a41186a220a200341a9096a29000037030020032003290091093703800602400240024020032d0090094101460d00200341d8046a41186a200a290300370300200341d8046a41106a2009290300370300200341d8046a41086a200229030037030020032003290380063703d804200320083602c80a200320073602c40a200320013602c00a200341e0066a200341d8046a200341c00a6a10bc08200341c8066a41026a220120032d00e3063a0000200320032f00e1063b01c80620032d00e00622024106460d0220032902e4062105200341c0056a41026a20012d00003a0000200320032f01c8063b01c0050c010b4102210202402007450d002001102e0b0b200341f0086a41026a200341c0056a41026a2d000022013a0000200320032f01c00522073b01f008200041206a20023a0000200041186a41003a000020004200370308200020073b0021200041236a20013a00002000200537002420004201370300200424000f0b200041186a41003a000020004200370308200020032800c0073600192000411c6a200341c3076a28000036000020004200370300200424000f0b2001410c6a2802002132200141086a2802002129200141046a280200212c4101212b200241246a2802002107200241226a2f01002108200241216a2d00002109200241206a2d0000210a2002411e6a2f0100210b2002411d6a2d0000210c200241106a2d0000210d2002410e6a2f000021132002410d6a2d000021122002410c6a2d000021102002410a6a2f01002111200241096a2d00002122200241086a2d0000212320022802282101024020022d00004101470d002002411c6a2d0000212a2002411a6a2f01002131200241196a2d00002133200241116a2900002106200241066a2f01002136200241056a2d00002137200241046a2d0000210220012001280200417f6a2238360200024020380d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22382038280200417f6a223836020020380d002001102e0b200320073a00df0a200320083b00dd0a200320093a00dc0a2003200a3a00db0a2003200b3b00d90a2003200c3a00d80a2003202a3a00d70a200320313b00d50a200320333a00d40a200320063702cc0a2003200d3a00cb0a200320133b00c90a200320123a00c80a200320103a00c70a200320113b00c50a200320223a00c40a200320233a00c30a200320363b00c10a200320373a00c00a200241ff01714101460d0c4110102c2202450d50200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d5020014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a222a360200202a0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a222a202a280200417f6a222a360200202a0d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0c230b2001410c6a2802002108200141086a2802002107200141046a2802002101200341c00a6a41286a200241286a280200360200200341c00a6a41206a200241206a290200370300200341c00a6a41186a200241186a290200370300200341c00a6a41106a200241106a290200370300200341c00a6a41086a200241086a290200370300200320022902003703c00a20034190096a200341c00a6a10c10220034180066a41086a220220034199096a29000037030020034180066a41106a2209200341a1096a29000037030020034180066a41186a220a200341a9096a29000037030020032003290091093703800602400240024020032d0090094101460d00200341d8046a41186a200a290300370300200341d8046a41106a2009290300370300200341d8046a41086a200229030037030020032003290380063703d804200320083602c80a200320073602c40a200320013602c00a200341e0066a200341d8046a200341c00a6a10bd08200341c8066a41026a220120032d00e3063a0000200320032f00e1063b01c80620032d00e00622024106460d0220032902e4062105200341f0086a41026a20012d00003a0000200320032f01c8063b01f0080c010b4102210202402007450d002001102e0b0b20034188086a41026a2201200341f0086a41026a2d00003a0000200320032800c0073602c005200320032f01f0083b0188082003200341c3076a2800003600c305200041186a41003a000020004200370308200020032802c0053600192000411c6a20032800c305360000200041206a20023a0000200041246a2005370200200020032f0188083b0021200041236a20012d00003a000020004201370300200424000f0b200320032800c0073602c0052003200341c3076a2800003600c305200041186a41013a000020004200370308200020032802c0053600192000411c6a20032800c30536000020004200370300200424000f0b2001410c6a2802002132200141086a2802002129200141046a280200212c4101212b200241246a2802002107200241226a2f01002108200241216a2d00002109200241206a2d0000210a2002411e6a2f0100210b2002411d6a2d0000210c200241106a2d0000210d2002410e6a2f000021132002410d6a2d000021122002410c6a2d000021102002410a6a2f01002111200241096a2d00002122200241086a2d0000212320022802282101024020022d00004101470d002002411c6a2d0000212a2002411a6a2f01002131200241196a2d00002133200241116a2900002106200241066a2f01002136200241056a2d00002137200241046a2d0000210220012001280200417f6a2238360200024020380d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22382038280200417f6a223836020020380d002001102e0b200320073a00df0a200320083b00dd0a200320093a00dc0a2003200a3a00db0a2003200b3b00d90a2003200c3a00d80a2003202a3a00d70a200320313b00d50a200320333a00d40a200320063702cc0a2003200d3a00cb0a200320133b00c90a200320123a00c80a200320103a00c70a200320113b00c50a200320223a00c40a200320233a00c30a200320363b00c10a200320373a00c00a200241ff01714101460d094110102c2202450d4e200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d4e20014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a222a360200202a0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a222a202a280200417f6a222a360200202a0d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0c200b200141246a2802002113200341c0056a41186a2207200141196a290000370300200341c0056a41106a2208200141116a290000370300200341c0056a41086a2209200141096a290000370300200320012900013703c005200341c00a6a41286a200241286a280200360200200341c00a6a41206a200241206a290200370300200341c00a6a41186a2201200241186a290200370300200341c00a6a41106a220a200241106a290200370300200341c00a6a41086a220b200241086a290200370300200320022902003703c00a20034190096a200341c00a6a10c102200341b8046a41086a220220034190096a41096a290000370300200341b8046a41106a220c20034190096a41116a290000370300200341b8046a41186a220d20034190096a41196a29000037030020032003290091093703b8040240024020032d0090094101460d00200341c0076a41186a200d290300370300200341c0076a41106a200c290300370300200341c0076a41086a2002290300370300200320032903b8043703c007200341e4066a41003b0100200341003602e00620012007290300370300200a2008290300370300200b2009290300370300200320032903c0053703c00a20034190096a200341c00a6a10be0820034198036a2003280290092201200328029809200341e0066a4106410010ca0402402003280298030d00200341c00a6a41101093080c1e0b2003200328029c032202410620024106491b22023602dc042003200341e0066a3602d804200341003a00f0080240024002402002450d0020032002417f6a3602dc042003200341e0066a4101723602d80420032d00e0060e020102000b4190c1cb00412910ef02200341c00a6a41101093080c1f0b200341c00a6a41101093080c1e0b20034190036a200341d8046a10ab01200328029003450d014190c1cb00412910ef02200341c00a6a41101093080c1d0b200341023a0098040c1e0b20032802940321020240200328029409450d002001102e0b0240200220134d0d0020034198046a41201093080c1d0b200341f0086a200341c0056a109808200341c00a6a20032802f008220220032802f80810ad0520034190096a41086a2201200341c90a6a29000037030020034190096a41106a2207200341d10a6a29000037030020034190096a41186a2208200341d90a6a29000037030020034190096a411f6a2209200341e00a6a280000360000200320032900c10a3703900902400240024020032d00c00a220a4102460d00200341880b6a2903002105200341800b6a2903002106200341f80a6a2802002112200341f40a6a2802002113200341f00a6a280200210b200341e80a6a280200210c200341e40a6a280200210d200341d8046a411f6a2009280000360000200341d8046a41186a2008290300370300200341d8046a41106a2007290300370300200341d8046a41086a200129030037030020032003290390093703d804024020032802f408450d002002102e0b200341c00a6a411f6a200341d8046a411f6a280000360000200341c00a6a41186a2202200341d8046a41186a290300370300200341c00a6a41106a2201200341d8046a41106a290300370300200341c00a6a41086a2207200341d8046a41086a290300370300200320032903d8043703c00a200a450d01200341e0066a41186a2002290300370300200341e0066a41106a2001290300370300200341e0066a41086a2007290300370300200320032903c00a3703e0060240200c450d00200d102e0b20034180066a41086a200341e0066a41086a290300220e37030020034180066a41106a200341e0066a41106a290300220f37030020034180066a41186a200341e0066a41186a2903002214370300200320032903e00622153703800620034190096a41186a201437030020034190096a41106a200f37030020034190096a41086a200e3703002003201537039009200341c00a6a41186a22024200370300200341c00a6a41106a22014200370300200341c00a6a41086a22074200370300200342003703c00a20034188086a41d9fcc6004106108102200720034188086a41086a220829000037030020032003290088083703c00a20034188086a4180f4cb00410610810220022008290000370300200120032900880837030020034188036a200341c00a6a4120108e02200328028c0341002003280288031b2202200b4180ce184100200341c0076a20034190096a412010ec081b6a4180ce186a4f0d0220034198046a410e1093080c1f0b20032802f408450d002002102e0b20034198046a41101093080c1d0b02402013450d00200220124b0d0020034198046a410f1093080c1d0b200341d8046a20034190096a200341c0076a200620054100108904200341c00a6a200341c0056a10980820032802c00a220220032802c80a10ff01024020032802c40a450d002002102e0b200341c00a6a41086a410f3a0000200341e90a6a200329039009370000200341d10a6a200341c0056a41086a290300370000200341d90a6a200341c0056a41106a290300370000200341e10a6a200341c0056a41186a290300370000200341f10a6a20034190096a41086a290300370000200341f90a6a20034190096a41106a290300370000200341810b6a20034190096a41186a290300370000200341093a00c00a200341c00a6a41096a20032903c005370000200341b00b6a2006370300200341b80b6a2005370300200341a10b6a200341c0076a41186a290300370000200341990b6a200341c0076a41106a290300370000200341910b6a200341c0076a41086a290300370000200341890b6a20032903c007370000200341c00a6a10fe01200341063a0098040c1e0b200341d8046a41186a200141196a290000370300200341d8046a41106a200141116a290000370300200341d8046a41086a200141096a290000370300200320012900013703d804200341c00a6a41286a2201200241286a280200360200200341c00a6a41206a2207200241206a290200370300200341c00a6a41186a2209200241186a290200370300200341c00a6a41106a220a200241106a290200370300200341c00a6a41086a220b200241086a290200370300200320022902003703c00a20034190096a200341c00a6a10c10202400240024020032d0090094101460d00200341c0076a200341d8046a10b808200341c00a6a20032802c007220820032802c807220c10b105200341e8086a41026a220220032d00c30a3a0000200341d0066a41086a200341c00a6a41e0006a290300370300200320032f00c10a3b01e8082003200341c00a6a41d8006a2903003703d0060240024020032d00c00a220d4102470d00200341a0096a4200370300200341a8096a4200370300200341b0096a4200370300200341b8096a420037030020034190096a41306a420037030020034190096a41386a420037030020034190096a41c0006a4100360200200341083602940920034190096a41086a4200370300200341003a0090090c010b200341c00a6a41c8006a2903002105200341c00a6a41c0006a2903002106200341c00a6a41386a290300210e2001290300210f2007290300211420092903002115200a2903002116200341c00a6a41306a2903002117200341c00a6a410c6a2802002101200b280200210720032802c40a210920034190096a41d0006a200341c00a6a41d0006a29030037030020034190096a41c8006a200537030020034190096a41c0006a200637030020034190096a41386a200e370300200341b8096a200f370300200341b0096a2014370300200341a8096a2015370300200341a0096a201637030020034190096a41306a201737030020034190096a410c6a200136020020034190096a41086a200736020020034190096a41d8006a20032903d00637030020034190096a41e0006a200341d0066a41086a2903003703002003200d3a009009200320032f01e8083b0091092003200936029409200320022d00003a00930920034190096a41e8006a200341c00a6a41e8006a2903003703000b200341d80a6a22024200370300200341c00a6a41106a22014200370300200341c00a6a41086a22074200370300200342003703c00a20034188086a41d9fcc6004106108102200720034188086a41086a220929000037030020032003290088083703c00a20034188086a4180f4cb004106108102200220092900003703002001200329008808370300200341a0036a200341c00a6a4120108e020240200341f8096a200341d0096a20032d009009220241014622011b28020020032802a403410020032802a0031b4b0d00200341e8096a200341c0096a20011b22014200370300200141106a4100360200200141086a42003703000b0240024020024101470d00200341c0096a290300210e200341b8096a290300210f0c010b200341c8096a290300210e20034190096a41306a290300210f2003419c096a28020041306c2201450d0020032802940941206a21020340200241706a22072903002106200741086a29030021050240200241686a2d00004101470d00427f2005200241086a2903007c200620022903007c22142006542207ad7c22062007200620055420062005511b22071b2105427f201420071b21060b200e20052006200f542005200e542005200e511b22071b210e200f200620071b210f200241306a2102200141506a22010d000b0b200341c00a6a20034190096a41f00010e9081a0240024020032d00c00a22024102470d002008200c10ff010c010b200341e0066a200341c00a6a10c2042008200c20032802e006220120032802e80610b201024020032802e406450d002001102e0b20020d00200341c80a6a2802002202450d00200241306c450d0020032802c40a102e0b024020032802c407450d002008102e0b200f200e844200520d0142e4cab5fbb6ccdcb0e300200341d8046a10ea020c020b200341f0086a41026a200341c0056a41026a2d000022023a0000200320032f00c00522013b01f008200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a000020004201370300200424000f0b42e4cab5fbb6ccdcb0e300200341d8046a200f200e41021085060b200041186a41003a00002000420037030820002003280080063600192000411c6a20034183066a28000036000020004200370300200424000f0b200141046a2802002101200341c00a6a41286a200241286a280200360200200341c00a6a41206a200241206a290200370300200341c00a6a41186a200241186a290200370300200341c00a6a41106a200241106a290200370300200341c00a6a41086a200241086a290200370300200320022902003703c00a20034190096a200341c00a6a10c10220034180066a41086a220220034199096a29000037030020034180066a41106a2207200341a1096a29000037030020034180066a41186a2208200341a9096a29000037030020032003290091093703800602400240024020032d0090094101470d00200341023a00e0060c010b200341d8046a41186a2008290300370300200341d8046a41106a2007290300370300200341d8046a41086a200229030037030020032003290380063703d804200341e0066a200341d8046a2001410010bf0820032d00e0064106460d0120032902e40621050b20032802e006210320002005370024200041206a2003360000200041186a41003a00002000420037030820004201370300200424000f0b20004200370308200020032800c007360019200041186a41003a00002000411c6a200341c3076a28000036000020004200370300200424000f0b200141246a2802002107200341e0066a41186a200141196a290000370300200341e0066a41106a200141116a290000370300200341e0066a41086a200141096a290000370300200320012900013703e006200341c00a6a41286a200241286a280200360200200341c00a6a41206a200241206a290200370300200341c00a6a41186a200241186a290200370300200341c00a6a41106a200241106a290200370300200341c00a6a41086a200241086a290200370300200320022902003703c00a20034190096a200341c00a6a10c10220034180066a41086a220220034190096a41096a29000037030020034180066a41106a220120034190096a41116a29000037030020034180066a41186a220820034190096a41196a29000037030020032003290091093703800620032d0090094101460d03200341d8046a41186a2008290300370300200341d8046a41106a2001290300370300200341d8046a41086a200229030037030020032003290380063703d804200341c00a6a200341e0066a2007200341e0066a200341d8046a412010ec0841004710bf08200341c8066a41026a220120032d00c30a3a0000200320032f00c10a3b01c806024020032d00c00a22024106460d0020032902c40a2105200341c0056a41026a20012d00003a0000200320032f01c8063b01c0050c180b200041186a41003a000020004200370308200020032800c0073600192000411c6a200341c3076a28000036000020004200370300200424000f0b200141246a280200210720034190096a41186a2208200141196a29000037030020034190096a41106a2209200141116a29000037030020034190096a41086a220a200141096a2900003703002003200129000137039009200341c00a6a41286a200241286a280200360200200341c00a6a41206a200241206a290200370300200341c00a6a41186a2201200241186a290200370300200341c00a6a41106a220b200241106a290200370300200341c00a6a41086a220c200241086a290200370300200320022902003703c00a024002400240200341c00a6a10a705450d00200341023a00d8040c010b20012008290300370300200b2009290300370300200c200a29030037030020032003290390093703c00a200341d8046a200341c00a6a200710970820032d00d8044106460d0120032902dc0421050b20032802d804210320002005370024200041206a2003360000200041186a41003a00002000420037030820004201370300200424000f0b20004200370308200020032800e006360019200041186a41003a00002000411c6a200341e3066a28000036000020004200370300200424000f0b200141286a280200210a200141246a2802002109200341e0066a41186a200141196a290000370300200341e0066a41106a200141116a290000370300200341e0066a41086a200141096a290000370300200320012900013703e00620022802282101024020022d000022070d002002411a6a2901002105200241196a2d00002107200241186a2d00002108200241166a2f0100210b200241156a2d0000210c200241146a2d0000210d200241126a2f01002113200241116a2d00002112200241106a2d000021102002410e6a2f010021112002410d6a2d000021222002410c6a2d000021232002410a6a2f0100212b200241096a2d00002129200241086a2d0000212a200241066a2f0100212c200241056a2d00002132200241046a2d00002131200241026a2f0100213320022d0001210220012001280200417f6a2236360200024020360d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22362036280200417f6a223636020020360d002001102e0b200320053701d80a200320073a00d70a200320083a00d60a2003200b3b01d40a2003200c3a00d30a2003200d3a00d20a200320133b01d00a200320123a00cf0a200320103a00ce0a200320113b01cc0a200320223a00cb0a200320233a00ca0a2003202b3b01c80a200320293a00c70a2003202a3a00c60a2003202c3b01c40a200320323a00c30a200320313a00c20a200320333b01c00a0240200241ff01710d00410321070c010b4110102c2202450d48200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d4820014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a22083602004100210720080d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22082008280200417f6a220836020020080d002002102e0b024020074103460d0020012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b20034198046a41026a20034188086a41026a2d000022023a0000200320032f00880822013b019804200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a000020004201370300200424000f0b200341c80a6a4200370300200342ffffffff1f3703c00a20034190096a200341e0066a10ba082003280290092202200328029809200341c00a6a10bf050240200328029409450d002002102e0b20034180066a109108200328028806220b450d14200b41c4006c41bc7f6a2101200b410274417c6a41027641016a210841002107200328028006210202400340200241046a200341e0066a412010ec08450d01200141bc7f6a2101200241c4006a21022008200741016a2207470d000c160b0b200228020021072002200241c4006a200110ea081a2003200b417f6a3602880620034190096a2007109408200341c00a6a2003280290092202200328029809220110ae05024020032802c00a220b450d002002200110ff010b200341d80a6a2903002114200341d00a6a290300211520032902c40a21160240200328029409450d002002102e0b200b450d142016422088a74105742207450d13200341d8046a41086a2108200b21020340200241086a2900002105200241106a29000021062002290000210e20034190096a41186a200241186a29000037030020034190096a41106a200637030020034190096a41086a20053703002003200e37039009200341b8036a20034190096a2015201410cb0220032903b80321052003200341b8036a41086a29030022063703c80a200320053703c00a0240024020052006844200520d002003200341c00a6a3602d804200341d8046a10cc020c010b200342f0f2bda1a7ee9cb9f9003703d804200341c00a6a200341d8046a10cd02200341a8036a200341c00a6a2005200610fd01200341d8046a41106a200341a8036a41086a290300220f20067d20032903a803220e200554ad7d2006200f7d2005200e54ad7d200e200556200f200656200f2006511b22011b3703002003200e20057d2005200e7d20011b3703e00420032001ad3703d8040240024020010d00200320083602c007200341c0076a10cc020c010b200320083602c007200341c0076a10ce020b200341c00a6a41186a2006370300200320053703d00a200341063a00c80a2003410e3a00c00a200341c00a6a10fe010b200241206a2102200741606a22070d000c140b0b200141046a2802002109200341c00a6a41286a200241286a280200360200200341c00a6a41206a200241206a290200370300200341c00a6a41186a200241186a290200370300200341c00a6a41106a200241106a290200370300200341c00a6a41086a200241086a290200370300200320022902003703c00a200341c00a6a10fd0641ff01714102460d0e20034190096a10910820032802980921084100210a200341003602980902402008450d004100210c200328029009210b4100210a410021010240034002400240200a450d00200b200141c4006c6a2102200b2001200c6a41c4006c6a2107034020022802002009460d022007200241c40010e9082107200241c4006a2102200741c4006a21072008200141016a22014b0d000c040b0b200b200141c4006c6a2102034020022802002009460d01200241c4006a21022008200141016a22014b0d000b4100210a0c030b200c417f6a210c200a41016a210a2008200141016a22014b0d000b0b0240200a0d004100210a0c010b200b2001200a6b41c4006c6a200b200141c4006c6a200820016b41c4006c10ea081a0b20032008200a6b220236029809200341c00a6a41086a2002360200200320032903900922053703c00a024002402005a722020d0020034198066a2202420037030020034190066a2201420037030020034180066a41086a220742003703002003420037038006200341c0076a41de80ca0041091081022007200341c0076a41086a2208290000370300200320032900c00737038006200341c0076a418c81ca00410b10810220022008290000370300200120032900c00737030020034180066a412010ff010c010b20034198066a2201420037030020034190066a2207420037030020034180066a41086a220842003703002003420037038006200341c0076a41de80ca0041091081022008200341c0076a41086a220a290000370300200320032900c00737038006200341c0076a418c81ca00410b1081022001200a290000370300200720032900c00737030020034180066a200341c00a6a10c40520032802c40a2201450d00200141c4006c450d002002102e0b20034190096a2009109408200341c00a6a2003280290092202200328029809220110ae05024020032802c00a2209450d002002200110ff010b2003280294092101024020090d002001450d112002102e0c110b200341d80a6a2903002114200341d00a6a2903002115200341c80a6a280200210720032802c40a210a02402001450d002002102e0b20074105742207450d0f200341d8046a41086a2108200921020340200241086a2900002105200241106a29000021062002290000210e20034190096a41186a200241186a29000037030020034190096a41106a200637030020034190096a41086a20053703002003200e37039009200341e8036a20034190096a2015201410cb0220032903e80321052003200341e8036a41086a29030022063703c80a200320053703c00a0240024020052006844200520d002003200341c00a6a3602d804200341d8046a10cc020c010b200342f0f2bda1a7ee9cb9f9003703d804200341c00a6a200341d8046a10cd02200341d8036a200341c00a6a2005200610fd01200341d8046a41106a200341d8036a41086a290300220f20067d20032903d803220e200554ad7d2006200f7d2005200e54ad7d200e200556200f200656200f2006511b22011b3703002003200e20057d2005200e7d20011b3703e00420032001ad3703d8040240024020010d00200320083602e006200341e0066a10cc020c010b200320083602e006200341e0066a10ce020b200341c00a6a41186a2006370300200320053703d00a200341063a00c80a2003410e3a00c00a200341c00a6a10fe010b200241206a2102200741606a22070d000c100b0b410221020c130b20034190096a41026a20032d00c20a22023a0000200341d8046a41026a20023a0000200320032f01c00a22023b019009200320023b01d8042006420888a721022006421888a7210120032903d00a21052006a7212a4100212b0c170b20034190096a41026a20032d00c20a22023a0000200341d8046a41026a20023a0000200320032f01c00a22023b019009200320023b01d8042006420888a721022006421888a7210120032903d00a21052006a7212a4100212b0c170b410221020c170b410221020c1a0b427f201b20057c202820067c220f2028542202ad7c220e2002200e201b54200e201b511b22021b211b427f200f20021b2128427f201d201a7c2020201c7c220f2020542202ad7c220e2002200e201d54200e201d511b22021b211d427f200f20021b2120410121020c160b200341023a0080060c190b200341e0066a41026a200341d8046a41026a2d000022023a0000200320032f00d80422013b01e006200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a000020004201370300200424000f0b200341023a0088080c380b200220134180c1cb00103c000b2002201341f0c0cb00103c000b200341c0076a41021093080c370b200341023a00c0070c370b200341023a00c0050c3a0b200341c00a6a41026a200341c0056a41026a2d000022023a0000200320032f00c00522013b01c00a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000420121050c020b200a41ffffff3f71450d002009102e0b4200210520004200370308200020032800c00a360019200041186a41003a00002000411c6a200341c30a6a2800003600000b20002005370300200424000f0b201642ffffff3f83500d00200b102e0b200341c00a6a41086a20034180066a41086a280200360200200320032903800622053703c00a024002402005a722020d00200341d0046a22024200370300200341c8046a22014200370300200341b8046a41086a22074200370300200342003703b804200341c0076a41de80ca0041091081022007200341c0076a41086a2208290000370300200320032900c0073703b804200341c0076a418c81ca00410b10810220022008290000370300200120032900c007370300200341b8046a412010ff010c010b200341d0046a22014200370300200341c8046a22074200370300200341b8046a41086a22084200370300200342003703b804200341c0076a41de80ca0041091081022008200341c0076a41086a220b290000370300200320032900c0073703b804200341c0076a418c81ca00410b1081022001200b290000370300200720032900c007370300200341b8046a200341c00a6a10c40520032802c40a2201450d00200141c4006c450d002002102e0b20034180066a41186a2202420037030020034180066a41106a2201420037030020034180066a41086a220742003703002003420037038006200341c0076a41de80ca0041091081022007200341c0076a41086a2208290000370300200320032900c00737038006200341c0076a418081ca00410c10810220022008290000370300200120032900c007370300200341c00a6a20034180066a10aa0520032d00e00a2102200341b8046a41186a2201200341c00a6a41186a290300370300200341b8046a41106a2207200341c00a6a41106a290300370300200341b8046a41086a2208200341c00a6a41086a290300370300200320032903c00a3703b804024020024103460d0020034190096a41186a200129030037030020034190096a41106a200729030037030020034190096a41086a2008290300370300200320032903b80437039009200320023a00b00920034190096a200341e0066a412010ec080d00200341d0046a22024200370300200341c8046a22014200370300200341b8046a41086a22074200370300200342003703b804200341c0076a41de80ca0041091081022007200341c0076a41086a2208290000370300200320032900c0073703b804200341c0076a418081ca00410c10810220022008290000370300200120032900c007370300200341b8046a412010ff010b02402009450d0020034190096a200a108905200341c00a6a2003280290092202200328029809108a0520034180066a41086a2201200341800b6a29030037030020034180066a41106a2207200341880b6a29030037030020034180066a41186a2208200341900b6a29030037030020034180066a41206a2209200341980b6a29030037030020034180066a41286a220b200341a00b6a290300370300200320032800c10a3602c806200320032800c40a3600cb062003200341f80a6a290300370380060240024020032d00c00a220c4102460d00200341f00a6a2903002116200341c00a6a41286a2903002117200341c00a6a41206a2903002118200341c00a6a41186a2903002119200341c00a6a41106a290300211f200341c00a6a41086a290300211e200341c0056a41286a200b290300370300200341c0056a41206a2009290300370300200341c0056a41186a2008290300370300200341c0056a41106a2007290300370300200341c0056a41086a200129030037030020032003290380063703c0050240200328029409450d002002102e0b200341c0076a41086a200341c0056a41086a2903002205370300200341c0076a41106a200341c0056a41106a2903002206370300200341c0076a41186a200341c0056a41186a290300220e370300200341c0076a41206a200341c0056a41206a290300220f370300200341c0076a41286a200341c0056a41286a2903002214370300200320032903c00522153703c007200341c00a6a41286a22022014370300200341c00a6a41206a2201200f370300200341c00a6a41186a2207200e370300200341c00a6a41106a22082006370300200341c00a6a41086a22092005370300200320153703c00a200c450d01200341d8046a41111093080c020b0240200328029409450d002002102e0b200341d8046a41111093080c010b20034184056a2016370200200341f4046a2018370200200341d8046a410c6a201f37020020034194056a20092903003702002003419c056a2008290300370200200341a4056a2007290300370200200341ac056a2001290300370200200341b4056a2002290300370200200320173702fc04200320193702ec042003201e3702dc04200320032903c00a37028c0520034190096a200341dc046a41e00010e9081a200341c8096a200341e0066a412010ec080d00200341c00a6a410c6a200a360200200341c80a6a41063a0000200341093a00c00a200341c00a6a10fe01200341c00a6a200a10890520032802c00a220220032802c80a10ff0120032802c40a450d002002102e0b200341c00a6a41086a41113a0000200341093a00c00a200341c00a6a41096a20032903e006370000200341c00a6a41116a200341e0066a41086a290300370000200341d90a6a200341f0066a290300370000200341e10a6a200341e0066a41186a290300370000200341c00a6a10fe01200041186a41003a000020004200370308200020032800f0083600192000411c6a200341f3086a28000036000020004200370300200424000f0b200341f0086a41026a200341c0056a41026a2d000022013a0000200320032f01c00522073b01f008200041206a20023a0000200041186a41003a000020004200370308200020073b0021200041236a20013a00002000200537002420004201370300200424000f0b20032902c40a210520032802c00a21020240200328029409450d002001102e0b2003200537029c0420032002360298040b20032d0098044106460d01200329029c0421050b200328029804210320002005370024200041206a2003360000200041186a41003a00002000420037030820004201370300200424000f0b20004200370308200020032800d008360019200041186a41003a00002000411c6a200341d3086a28000036000020004200370300200424000f0b200320032f01d8043b018006200320073a009f06200320083b009d06200320093a009c062003200a3a009b062003200b3b0099062003200c3a0098062003200537039006200320013a008f06200320023b008d062003202a3a008c062003200d3a008b06200320133b008906200320123a008806200320103a008706200320113b008506200320223a008406200320233a008306410221022003200341d8046a41026a2d00003a008206024002400240202b0d00200341b8046a41186a20034180066a41186a2903002205370300200341b8046a41106a20034180066a41106a2903002206370300200341b8046a41086a20034180066a41086a290300220e3703002003200329038006220f3703b804200341c00a6a41186a2005370300200341c00a6a41106a2006370300200341c00a6a41086a200e3703002003200f3703c00a200320323602980920032029360294092003202c36029009200341d8046a200341c00a6a20034190096a10bd08200341c8066a41026a20032d00db043a0000200320032f00d9043b01c80620032d00d80422024106460d0220032902dc042105200341c0056a41026a200341c8066a41026a2d00003a0000200320032f01c8063b01c0050c010b02402029450d00202c102e0b0b200341f0086a41026a2201200341c0056a41026a2d00003a0000200320032800e0063602c007200320032f01c0053b01f0082003200341e3066a2800003600c307200041186a41003a000020004200370308200020032802c0073600192000411c6a20032800c307360000200041206a20023a0000200041246a2005370200200020032f01f0083b0021200041236a20012d00003a000020004201370300200424000f0b200320032800e0063602c0072003200341e3066a2800003600c307200041186a41013a000020004200370308200020032802c0073600192000411c6a20032800c30736000020004200370300200424000f0b200320032f01d8043b018006200320073a009f06200320083b009d06200320093a009c062003200a3a009b062003200b3b0099062003200c3a0098062003200537039006200320013a008f06200320023b008d062003202a3a008c062003200d3a008b06200320133b008906200320123a008806200320103a008706200320113b008506200320223a008406200320233a008306410221022003200341d8046a41026a2d00003a008206024002400240202b0d00200341b8046a41186a20034180066a41186a2903002205370300200341b8046a41106a20034180066a41106a2903002206370300200341b8046a41086a20034180066a41086a290300220e3703002003200329038006220f3703b804200341c00a6a41186a2005370300200341c00a6a41106a2006370300200341c00a6a41086a200e3703002003200f3703c00a200320323602980920032029360294092003202c36029009200341d8046a200341c00a6a20034190096a10bc08200341c8066a41026a20032d00db043a0000200320032f00d9043b01c80620032d00d80422024106460d0220032902dc042105200341c0076a41026a200341c8066a41026a2d00003a0000200320032f01c8063b01c0070c010b02402029450d00202c102e0b0b200341c0056a41026a200341c0076a41026a2d000022013a0000200320032f01c00722073b01c005200041206a20023a0000200041186a41003a000020004200370308200020073b0021200041236a20013a00002000200537002420004201370300200424000f0b200041186a41003a000020004200370308200020032800e0063600192000411c6a200341e3066a28000036000020004200370300200424000f0b200320032800d0083602c0082003200341d3086a2800003600c308200041186a41003a000020004200370308200020032802c0083600192000411c6a20032800c308360000200041246a2005370200200041206a200236020020004201370300200424000f0b200341900b6a201b370300200341880b6a2028370300200341800b6a201d370300200341f80a6a2020370300200341e80a6a2019370300200341e00a6a201e370300200341d80a6a2018370300200341d00a6a201f370300200341f00a6a2021370300200341cc0a6a2036360200200341c00a6a41086a2035360200200341980b6a20032903d008370300200341ac0b6a203d360200200341a80b6a203e360200200341a00b6a200341d0086a41086a290300370300200320032f01e4083b00c10a200320073602c40a2003200341e4086a41026a2d00003a00c30a200320013a00c00a0240024020014102470d00203b203c10ff010c010b200341d8046a200341c00a6a10c204203b203c20032802d804220820032802e00410b201024020032802dc04450d002008102e0b20010d002035450d00203541306c450d002007102e0b024020032802c408450d00203b102e0b20034188086a20062005108307200341d80a6a20032903d805370300200320032903d0053703d00a200320032903c80522063703c80a200320032903c00522053703c00a200341e00a6a20034190096a41c80010e9081a200341ac0b6a203a360200200341a80b6a20032802b80836020002402005a7220141ff01714102470d002037203910ff01410021010c010b200341d8046a200341c00a6a10c2042037203920032802d804220720032802e00410b201024020032802dc04450d002007102e0b0240200141ff01710d002006a72201450d00200141306c450d002005422088a7102e0b410021010b024020032802ac08450d002037102e0b20010d01200341c00a6a41086a41083a0000200341e90a6a20032903f008370000200341093a00c00a200341c00a6a41096a200329038808370000200341d10a6a20034188086a41086a290300370000200341d90a6a20034188086a41106a290300370000200341e10a6a20034188086a41186a290300370000200341f10a6a200341f0086a41086a290300370000200341f90a6a200341f0086a41106a290300370000200341810b6a200341f0086a41186a290300370000200341c00a6a10fe01200320032800910436028804200320034194046a28000036008b04200041186a41003a0000200041106a2002ad220542d8d4ea037e200542c0f0f50b7e7c20054280c2d72f7e7c42b8b8c589027c3703002000420137030820002003280288043600192000411c6a200328008b0436000020004200370300200424000f0b20032902c40a210520032802c00a21020b200320032800910436028804200320034194046a28000036008b04200041186a41003a00002000420037030820002003280288043600192000411c6a200328008b04360000200041246a2005370200200041206a200236020020004201370300200424000f0b200328028006210320002005370024200041206a2003360000200041186a41003a00002000420037030820004201370300200424000f0b20004200370308200020032800c005360019200041186a41003a00002000411c6a200341c3056a28000036000020004200370300200424000f0b20004200370308200020032800f008360019200041186a41003a00002000411c6a200341f3086a28000036000020004200370300200424000f0b0c030b20032005421888a73a00c30a20032005421088a73a00c20a20032005a73b01c00a200320063702c40a20032903c00a21054110102c2202450d21200241f8f7c60036020c2002410136020820024281808080103702004110102c2207450d212006422088210620074190f8c60036020c20074101360208200742818080801037020020022002280200417f6a2201360200024020010d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b2006a72108410221020b20032005370294092003200b3a0093092003200c3a0092092003200d3b0190090b41002101200241ff0171410346220a0d00200341e60a6a20353b0100200341e20a6a2008360100200341da0a6a2005370100200341d90a6a200b3a0000200341d80a6a200c3a0000200341d60a6a200d3b0100200341d50a6a20293a0000200341d40a6a202a3a0000200341d20a6a202c3b0100200341d10a6a20323a0000200341d00a6a20313a0000200341ce0a6a20123b0100200341cd0a6a20103a0000200341cc0a6a20113a0000200341ca0a6a20223b0100200341c90a6a20233a0000200341c80a6a202b3a0000200320073602e80a200320333b01c60a200320363a00c50a200320133a00c40a200320373b01c20a200320383a00c10a200320023a00c00a41012101200341c00a6a10fd0641ff01714102470d00200341023a00c0050c010b200341b8046a41186a22024200370300200341b8046a41106a22084200370300200341b8046a41086a220b4200370300200342003703b804200341c0076a41de80ca004109108102200b200341c0076a41086a220c290000370300200320032900c0073703b804200341c0076a418081ca00410c1081022002200c290000370300200820032900c007370300200341c00a6a200341b8046a10aa0520032d00e00a210220034180066a41186a2208200341c00a6a41186a29030037030020034180066a41106a200341c00a6a41106a29030037030020034180066a41086a200341c00a6a41086a290300370300200320032903c00a370380060240024020024103460d00200341f7066a220b2008290000370000200341e0066a41106a220820034180066a41116a290000370300200341e0066a41086a20034180066a41096a2900002205370300200320032900810622063703e00620032d008006210c20034190096a41096a200537000020034190096a41116a200829030037000020034190096a41186a200b2900003700002003200c3a0090092003200637009109024020020d00200341c0056a41071093080c020b0240200341d8046a20034190096a412010ec08450d00200341c0056a41081093080c020b20034180066a41186a2208420037030020034180066a41106a220b420037030020034180066a41086a220c42003703002003420037038006200341c0076a41de80ca004109108102200c200341c0076a41086a220d290000370300200320032900c00737038006200341c0076a418081ca00410c1081022008200d290000370300200b20032900c00737030020034180066a412010ff01200341c00a6a41186a22084200370300200341c00a6a41106a220b4200370300200341c00a6a41086a220c4200370300200342003703c00a20034188086a41d9fcc6004106108102200c20034188086a41086a220d29000037030020032003290088083703c00a20034188086a4180f4cb0041061081022008200d290000370300200b200329008808370300200341e0016a200341c00a6a4120108e0220032802e401210d20032802e00121132008200341d8046a41186a290300370300200b200341d8046a41106a290300370300200c200341d8046a41086a290300370300200320032903d8043703c00a200d410020131b20096a200341c00a6a200220341095082001200a720d0320072007280200417f6a220236020020020d032007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d032007102e0c030b200341c0056a41021093080b02402001200a724101460d0020072007280200417f6a220236020020020d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b20032d00c0054106460d020b20032802c0052102200020032902c405370024200041206a2002360000200041186a41003a00002000420037030820004201370300200424000f0b200341063a00c0050b20004200370308200020032800f008360019200041186a41003a00002000411c6a200341f3086a28000036000020004200370300200424000f0b4110102c2202450d1a200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1a20014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220736020020070d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22072007280200417f6a220736020020070d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b200341f0086a41026a200341c0056a41026a2d000022023a0000200320032f00c00522013b01f008200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a000020004201370300200424000f0b20004200370308200020032800c005360019200041186a41003a00002000411c6a200341c3056a28000036000020004200370300200424000f0b20032d0088084106470d030b20004200370308200020032800b804360019200041186a41003a00002000411c6a200341bb046a28000036000020004200370300200424000f0b4110102c2202450d15200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1520014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220736020020070d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22072007280200417f6a220736020020070d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b200341023a0088080b20032802880821022000200329028c08370024200041206a2002360000200041186a41003a00002000420037030820004201370300200424000f0b2030211e201521180b202f211c2016211a0b200341c00a6a41046a222b20034198046a41046a2d00003a000020032003280298043602c00a202a20113a0000200120123a0000200a20103a00002007200241306c6a2202410f6a202b2d00003a00002002410b6a20032802c00a36000020292005370308202920063703002009200e3703082009200f3703000c010b200341f0086a41046a20034198046a41046a2d00003a000020032003280298043602f00820132001490d0202402013200d470d00200d41016a2202200d490d11200d41017422092002200920024b1b22024104200241044b1bad42307e2215422088a74541037421022015a7210902400240200d0d00200341003602c00a0c010b200341c00a6a41086a4108360200200320073602c00a2003200d41306c3602c40a0b200341d8046a20092002200341c00a6a107d200341e0046a280200210220032802d8044101460d0520032802dc042107200241306e210d0b2007200141306c6a220241306a2002201320016b41306c10ea081a2002410a6a20103a0000200241096a20113a0000200220123a000820022008360200200241286a200e370300200241206a200f370300200241186a2005370300200241106a20063703002002410b6a20032802f0083600002002410f6a200341f4086a2d00003a0000201341016a21130b0240024002400240201241ff01714101470d00200341c8006a20062005420a420010e708200341386a200f200e420a420010e708201e20067c2216201e542202201820057c2002ad7c221520185420152018511b0d022016200f7c220f20165422022015200e7c2002ad7c220e201554200e2015511b0d02201c20032903487c2216201c542202201a200341c8006a41086a2903007c2002ad7c2215201a542015201a511b0d01201d20032903387c221e201d542202201b200341386a41086a2903007c2002ad7c2218201b542018201b511b450d09200f211e200e21182016211c2015211a0c020b02400240201041ff0171450d0041062102024002400240024002400240024020104107710e0700010203040506000b410021020c050b410121020c040b410221020c030b410321020c020b410421020c010b410521020b200341e8006a200542002002ad220e420010e808200341f8006a20064200200e420010e808427f20034180016a290300220e20032903687c220f2003290370420052200f200e547222021b2115427f200329037820021b21160c010b200341d8006a20062005420a420010e708200341e0006a2903002115200329035821160b201e20067c220f201e542202201820057c2002ad7c220e201854200e2018511b0d010240201141ff01710d00201d20167c221e201d542202201b20157c2002ad7c2218201b542018201b511b0d01201241ff0171450d060c080b201c20167c2216201c542202201a20157c2002ad7c2215201a542015201a511b450d020b200f211e200e21180b20034180066a41191093080c010b0240201241ff01710d00201141ff01714102460d00427f201520277c201620197c22182016542202ad7c22162002201620155420162015511b22021b2115427f201820021b2116427f200e20287c200f201f7c2218200f542202ad7c220f2002200f200e54200f200e511b22021b210e427f201820021b210f0b201d211e201b21180c050b024020032d00800622024106470d00201e210f2018210e201d211e201b2118201c2116201a21150c060b200341ca066a20032d0083063a0000200320032f0081063b01c80620032902840621190240200c0d00200d450d00200d41306c450d002007102e0b201e210f2018210e201d211e201b2118201c2116201a21150c060b200120131045000b427f201820277c201e20197c2216201e542202ad7c22152002201520185420152018511b22021b2118427f201620021b211e427f200e20287c200f201f7c2215200f542202ad7c220f2002200f200e54200f200e511b22021b210e427f201520021b210f0c010b2002450d0b0c0a0b201c2116201a21150b200341063a0080060b200341900b6a2020370300200341880b6a2021370300200341800b6a2026370300200341f80a6a2025370300200341e80a6a2028370300200341e00a6a201f370300200341d80a6a2027370300200341d00a6a2019370300200341f00a6a2024370300200341cc0a6a2013360200200341c00a6a41086a200d360200200341980b6a200329039009370300200341ac0b6a2022360200200341a80b6a2023360200200341a00b6a20034190096a41086a290300370300200320032f01c0083b00c10a200320073602c40a2003200341c0086a41026a2d00003a00c30a2003200c3a00c00a20032802c805210220032802c005210102400240200c4102470d002001200210ff010c010b200341d8046a200341c00a6a10c2042001200220032802d804220920032802e00410b201024020032802dc04450d002009102e0b200c0d00200d450d00200d41306c450d002007102e0b200341ca066a20032d0083063a0000200320032f0081063b01c8062003290284062119410621020b024020032802c405450d0020032802c005102e0b200341a8086a41026a2201200341c8066a41026a2d00003a0000200320032f01c8063b01a808024020024106470d00200341c0076a427f2017200b1b2006201241ff017141014622021b427f2014200b1b200520021b108307200341f00a6a200e370300200341c00a6a41286a200f370300200341c00a6a41206a2018370300200341c00a6a41186a201e370300200341c00a6a41106a2015370300200341f80a6a20032903e006370300200341800b6a200341e8066a290300370300200341880b6a200341e0066a41106a290300370300200341900b6a200341e0066a41186a290300370300200341980b6a200341e0066a41206a290300370300200341a00b6a200341e0066a41286a290300370300200320163703c80a200341003a00c00a200341d8046a200810890520032802e004210120032802d804210220034100360298092003420137039009200341c00a6a20034190096a10bc0520022001200328029009220720032802980910b2010240200328029409450d002007102e0b024020032802dc04450d002002102e0b200341063a0088080c030b200320023a008808200320032f01a8083b0089082003201937028c08200320012d00003a008b080b20032d0088084106460d01200329028c0821050b200328028808210320002005370024200041206a2003360000200041186a41003a00002000420037030820004201370300200424000f0b20004200370308200020032800b804360019200041186a41003a00002000411c6a200341bb046a28000036000020004200370300200424000f0b20032d00c0074106460d0120032902c40721050b20032802c007210320002005370024200041206a2003360000200041186a41003a00002000420037030820004201370300200424000f0b20004200370308200020032800c005360019200041186a41003a00002000411c6a200341c3056a28000036000020004200370300200424000f0b1036000b1038000b20032802c005210320002005370024200041206a2003360000200041186a41003a00002000420037030820004201370300200424000f0b20004200370308200020032800f008360019200041186a41003a00002000411c6a200341f3086a28000036000020004200370300200424000bec7a08077f027e017f017e027f017e067f037e230041a00a6b2203240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e0700010203040506000b200341c4076a4101360200200342013702b4072003419cc3cb003602b007200341043602fc0420034194c3cb003602f8042003200341f8046a3602c007200341b0076a41b8afc9001044000b20012d000121042001412c6a2802002105200141286a2802002106200141246a2802002107200341c8026a41186a2001411a6a290000370300200341c8026a41106a200141126a290000370300200341c8026a41086a2001410a6a2900003703002003200141026a2900003703c802200341b0076a41286a200241286a280200360200200341b0076a41206a200241206a290200370300200341b0076a41186a2208200241186a290200370300200341b0076a41106a2201200241106a290200370300200341b0076a41086a2209200241086a290200370300200320022902003703b007024002400240200341b0076a10a7050d00200842003703002001420037030020094200370300200342003703b007200341f8046a41c8afc90041131081022009200341f8046a41086a2202290000370300200320032900f8043703b007200341f8046a41c7c3cb00410710810220082002290000370300200120032900f804370300200341f8046a200341b0076a10880320032802f804210220032902fc04210a2007200510fc02200341b0076a200720052002410120021b2208200a420020021b220a422088220ba710fe022001280200210120032802b407210220032802b007210920032802bc07220c200341c4076a2802002007200510f5020240200141ffffff3f71450d00200c102e0b0240200241ffffff3f71450d002009102e0b200341f8006a41186a2201200341c8026a41186a290300370300200341f8006a41106a2202200341c8026a41106a290300370300200341f8006a41086a2209200341c8026a41086a290300370300200320032903c802370378200441ff01710d01200341f8046a41186a22014200370300200341f8046a41106a22024200370300200341f8046a41086a22094200370300200342003703f80420034198016a41c8afc9004113108102200920034198016a41086a220429000037030020032003290098013703f80420034198016a41dbc3cb004105108102200120042900003703002002200329009801370300200341f8046a412010ff010c020b0240200641ffffff3f71450d002007102e0b200320032800b8013602f801200320032900a802370388022003200341bb016a2800003600fb012003200341af026a28000036008f02200041186a41003a000020004200370308200020032802f8013600192000411c6a20032800fb01360000200041206a41023a00002000200329038802370021200041286a200328008f02360000200042013703000c200b200341b0076a41186a2001290300370300200341b0076a41106a2002290300370300200341b0076a41086a2009290300370300200320032903783703b007200341f0096a41186a22014200370300200341f0096a41106a22024200370300200341f0096a41086a22094200370300200342003703f009200341f8046a41c8afc90041131081022009200341f8046a41086a2204290000370300200320032900f8043703f009200341f8046a41dbc3cb00410510810220012004290000370300200220032900f8043703004120102c2201450d1a200342203702fc04200320013602f804200341f8046a200341b0076a41201074200341f0096a412020032802f804220120032802800510b20120032802fc04450d002001102e0b2005ad42b882077e200b42c0b5e5097e7c210b0240200641ffffff3f71450d002007102e0b200b42a0c0b291397c210b0240200a42ffffff3f83500d002008102e0b200320032800b8013602f8012003200341bb016a2800003600fb01200041186a41003a0000200041106a200b37030020004201370308200020032802f8013600192000411c6a20032800fb01360000200042003703000c1e0b200141086a2802002104200141046a2802002105200341b0076a41286a200241286a280200360200200341b0076a41206a200241206a290200370300200341b0076a41186a2201200241186a290200370300200341b0076a41106a2207200241106a290200370300200341b0076a41086a2206200241086a290200370300200320022902003703b007200341f8046a200341b0076a10c102200341f8006a41086a220220034181056a290000370300200341f8006a41106a220820034189056a290000370300200341f8006a41186a220920034191056a290000370300200320032900f90437037820032d00f8044101460d0820034198016a41186a200929030037030020034198016a41106a200829030037030020034198016a41086a20022903003703002003200329037837039801200142003703002007420037030020064200370300200342003703b007200341f8046a41c8afc90041131081022006200341f8046a41086a2202290000370300200320032900f8043703b007200341f8046a41c7c3cb00410710810220012002290000370300200720032900f804370300200341f8046a200341b0076a10880320032902fc04420020032802f80422021b220a422088220ba741057421012002410120021b22062102024002400240024003402001450d01200141606a2101200220034198016a412010ec082107200241206a210220070d000b200341003602b807200342013703b0072005200341b0076a10900220032802b8072107024020032802b407450d0020032802b007102e0b0240200720044d0d00200341b0076a410a10f307200320032900b1073703602003200341b8076a2800003600670c020b2003410036028005200342013703f8042005200341f8046a109002200341b0076a20032802f80420032802800510b00120034188026a41186a200341b0076a41186a29030037030020034188026a41106a200341b0076a41106a29030037030020034188026a41086a200341b0076a41086a290300370300200320032903b00737038802024020032802fc04450d0020032802f804102e0b200341f8046a200541b00210e9081a200341a8026a41086a20034198016a41086a290300370300200341a8026a41106a20034198016a41106a290300370300200341a8026a41186a20034198016a41186a29030037030020032003290398013703a8024110102c2202450d1c200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1c20014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a2208360200024020080d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22082008280200417f6a220836020020080d002002102e0b024002402001280208200341f8046a200128020c28020c1101000d0041022102200341e8026a41023a0000200341e0026a41003a000020012001280200417f6a22083602004200210d200342003703d002200342013703c802024020080d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22082008280200417f6a220836020020080d002001102e0b200341f8046a10dc02410121010c010b200341b0076a200341f8046a41b00210e9081a200341fd096a200341b0026a290300370000200341850a6a200341b8026a2903003700002003418d0a6a200341c0026a290300370000200341950a6a20032f00783b0000200341970a6a200341fa006a2d00003a0000200341013a00f409200341013a00f009200320032903a8023700f509200320013602980a200341c8026a200341b0076a200341f0096a10dd0220032903c8024201512101200341e8026a2d0000210220032903d002210d0b200341f8046a41186a20034188026a41186a290300370300200341f8046a41106a20034188026a41106a290300370300200341f8046a41086a20034188026a41086a29030037030020032003290388023703f8042003200341f0026a2800003600b707200320032900e9023703b0070240024020010d00410621010c010b200320032800b7073600ff01200320032903b0073703f80141062101200d4202510d00200320032800ff013600ef01200320032903f8013703e801200221010b200341f0096a41086a2202200341f8046a41086a290300370300200341f0096a41106a2208200341f8046a41106a290300370300200341f0096a41186a2209200341f8046a41186a290300370300200320032903f8043703f009200320032903e8013703d801200320032800ef013600df01200341053a00b4072003410a3a00b007200341bd076a2002290300370000200341c5076a2008290300370000200341cd076a2009290300370000200341d8076a20013a0000200320032903f0093700b507200341d5076a20032f00e5013b0000200341d7076a200341e7016a2d00003a0000200341d9076a20032903d801370000200341e0076a20032800df01360000200341fc076a200341b8016a41186a280200360200200341f4076a200341b8016a41106a290200370200200341ec076a200341b8016a41086a290200370200200341e4076a20032902b801370200200341b0076a10fe01200da70d024200210b0c030b200341b0076a410110f307200320032900b1073703602003200341b8076a2800003600670b20032d00b0072101200a42ffffff3f83500d1e2006102e0c1e0b427f2007ad42a01f7e200b4280eb067e7c42d8bbe3167c220b200341c8026a41106a2903007c220d200d200b541b210d4201210b0b0240200a42ffffff3f83500d002006102e0b2005102e2003200341f4006a28000036005b20032003280071360258200041186a41003a0000200041106a200d3703002000200b370308200020032802583600192000411c6a200328005b360000200042003703000c1d0b2001410c6a2802002104200141086a2802002105200141046a280200210c200341b0076a41286a200241286a280200360200200341b0076a41206a200241206a290200370300200341b0076a41186a2201200241186a290200370300200341b0076a41106a2206200241106a290200370300200341b0076a41086a2207200241086a290200370300200320022902003703b007200341f8046a200341b0076a10c102200341c8026a41086a220220034181056a290000370300200341c8026a41106a220820034189056a290000370300200341c8026a41186a220920034191056a290000370300200320032900f9043703c80202400240024020032d00f8044101460d0020034188026a41186a200929030037030020034188026a41106a200829030037030020034188026a41086a2002290300370300200320032903c80237038802200142003703002006420037030020074200370300200342003703b007200341f8046a41c8afc90041131081022007200341f8046a41086a2202290000370300200320032900f8043703b007200341f8046a41c7c3cb00410710810220012002290000370300200620032900f804370300200341f8046a200341b0076a10880320032902fc04420020032802f80422021b220b422088220aa741057421012002410120021b2208210203402001450d02200141606a2101200220034188026a412010ec082107200241206a210220070d000b200341003602b807200342013703b0072005200341b0076a10900220032802b8072101024020032802b407450d0020032802b007102e0b200120044d0d02200341b0076a410a10f3070c1b0b410221010c1c0b200341b0076a410110f3070c190b2003410036028005200342013703f8042005200341f8046a109002200341b0076a20032802f80420032802800510b001200341a8026a41186a2202200341b0076a41186a2207290300370300200341a8026a41106a2209200341b0076a41106a2204290300370300200341a8026a41086a220e200341b0076a41086a220f290300370300200320032903b0073703a802024020032802fc04450d0020032802f804102e0b2007200229030037030020042009290300370300200f200e290300370300200320032903a8023703b007200341f8046a200341b0076a10f40720032802f8042207200328028005108f022102024020032802fc04450d002007102e0b02402002450d00200341b0076a410210f3070c190b024002400240200c41014b0d00200341c8076a4200370300200341c0076a4200370300200341b0076a41086a22024200370300200342003703b007200341f8046a41c8afc90041131081022002200341f8046a41086a2207290000370300200320032900f8043703b007200341f8046a41c7c3cb004107108102200641086a2007290000370000200620032900f804370000200341c8026a200341b0076a1088030240024020032802c80222020d00410021090c010b20032902cc02220d422088a72109200d42ffffff3f83500d002002102e0b200341f8046a200541b00210e9081a4110102c2207450d1a200741f8f7c60036020c2007410136020820074281808080103702004110102c2202450d1a20024190f8c60036020c20024101360208200242818080801037020020072007280200417f6a2206360200024020060d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22062006280200417f6a220636020020060d002007102e0b024002402002280208200341f8046a200228020c28020c1101000d0041022107200341e8026a41023a0000200341e0026a41003a000020022002280200417f6a22063602004200210d200342003703d002200342013703c802024020060d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22062006280200417f6a220636020020060d002002102e0b200341f8046a10dc02410121020c010b200341b0076a200341f8046a41b00210e9081a200341fc096a2009360200200341f0096a41086a4101360200200341f0096a41106a200329019801370300200341880a6a20034198016a41086a290100370300200341f0096a41206a20034198016a41106a290100370300200341003a00f409200341013a00f009200320032f00783b00f5092003200341fa006a2d00003a00f709200320023602980a200341c8026a200341b0076a200341f0096a10dd0220032903c8024201512102200341c8026a41206a2d0000210720032903d002210d0b200341f0096a41186a200341a8026a41186a290300370300200341f0096a41106a200341a8026a41106a290300370300200341f0096a41086a200341a8026a41086a290300370300200320032903a8023703f0092003200341f0026a2800003600b707200320032900e9023703b0070240024020020d00410621020c010b200320032800b7073600ff01200320032903b0073703f80141062102200d4202510d00200320032800ff013600ef01200320032903f8013703e801200721020b200341f8006a41086a2207200341f0096a41086a290300370300200341f8006a41106a2206200341f0096a41106a290300370300200341f8006a41186a2209200341f0096a41186a290300370300200320032903f009370378200320032903e8013703d801200320032800ef013600df01200341043a00b4072003410a3a00b007200341bd076a2007290300370000200341c5076a2006290300370000200341cd076a2009290300370000200341d8076a20023a0000200320032903783700b507200341d5076a20032f00e5013b0000200341d7076a200341e7016a2d00003a0000200341d9076a20032903d801370000200341e0076a20032800df01360000200341fc076a200341b8016a41186a280200360200200341f4076a200341b8016a41106a290200370200200341ec076a200341b8016a41086a290200370200200341e4076a20032902b801370200200341b0076a10fe010240200da70d004200210d0c020b427f2001ad42a01f7e200a42e8dd0d7e7c42d8ce86257c220a200341c8026a41106a2903007c220d200d200a541b210a4201210d0c010b200341b0076a41186a4200370300200341b0076a41106a4200370300200341b0076a41086a22024200370300200342003703b007200341f8046a41c8afc90041131081022002200341f8046a41086a2209290000370300200320032900f8043703b007200341f8046a41dbafc9004109108102200641086a2009290000370000200620032900f804370000200341f8046a200341b0076a4120108d0320032802f804210220032902fc04210d200341f8046a41186a220e200341a8026a41186a290300370300200341f8046a41106a220f200341a8026a41106a2903003703002009200341a8026a41086a290300370300200320032903a8023703f8042002410120021b21070240024002400240200d420020021b220d4220882210a72202200da7470d00200241016a22042002490d1820024101742211200420042011491b22044104200441044b1b220441ffffff3f712004462111200441057421040240024020020d00200341003602b0070c010b200341b8076a4101360200200320073602b007200320104205863e02b4070b200341c8026a20042011200341b0076a107d200341d0026a280200210420032802c8024101460d0120032802cc022107200d422088a721022004410576ad210d0b200720024105746a220420032903f804370000200441186a200e290300370000200441106a200f290300370000200441086a2009290300370000200241016a220241e4004b0d04200320073602b0072003200d42ffffffff0f832002ad2210422086843702b40720070d0120034190056a2202420037030020034188056a22074200370300200341f8046a41086a22094200370300200342003703f80420034198016a41c8afc9004113108102200920034198016a41086a220429000037030020032003290098013703f80420034198016a41dbafc9004109108102200220042900003703002007200329009801370300200341f8046a412010ff010c020b2004450d160c1b0b20034190056a2202420037030020034188056a22094200370300200341f8046a41086a22044200370300200342003703f80420034198016a41c8afc9004113108102200420034198016a41086a220e29000037030020032003290098013703f80420034198016a41dbafc90041091081022002200e2900003703002009200329009801370300200341f8046a200341b0076a10e6042007450d00200d42ffffff3f83500d002007102e0b200341f8046a41186a22024200370300200341f8046a41106a22074200370300200341f8046a41086a22094200370300200342003703f80420034198016a41c8afc9004113108102200920034198016a41086a220429000037030020032003290098013703f80420034198016a41e4afc900410d108102200220042900003703002007200329009801370300200341186a200341f8046a4120108e02200328021c210e2003280218210f200242003703002007420037030020094200370300200342003703f80420034198016a41c8afc90041131081022009200429000037030020032003290098013703f80420034198016a41e4afc900410d108102200220042900003703002007200329009801370300200341106a200341f8046a4120108e022003280210211120032802142112200242003703002007420037030020094200370300200342003703f80420034198016a41c8afc90041131081022009200429000037030020032003290098013703f80420034198016a41e4afc900410d1081022002200429000037030020072003290098013703002003201241016a410120111b3602b007200341f8046a4120200341b0076a410410b201200341b0076a200541b00210e9081a2002200341a8026a41186a2903003703002007200341a8026a41106a2903003703002009200341a8026a41086a290300370300200320032903a8023703f804200341c8026a200341f8046a10f40720032802c802210220032802d0022107200342013703f8042003410036028005200341b0076a200341f8046a1090022002200720032802f80420032802800510b201024020032802fc04450d0020032802f804102e0b024020032802cc02450d002002102e0b200341b0076a108b02200341b0076a41186a4200370300200341b0076a41106a4200370300200341b0076a41086a22024200370300200342003703b007200341f8046a41d9fcc60041061081022002200341f8046a41086a2207290000370300200320032900f8043703b007200341f8046a4180f4cb004106108102200641086a2007290000370000200620032900f804370000200341086a200341b0076a4120108e02200328020c2106200328020821094120102c2202450d192002200329038802370000200241186a20034188026a41186a290300370000200241106a20034188026a41106a290300370000200241086a20034188026a41086a290300370000200341cc076a4100360200200341bc076a4281808080103702002003200641c093066a41c0930620091b3602d0074201210d200342013702c407200320023602b8072003200c3602b4072003200e4100200f1b22063602b007200341f8046a41186a200341a8026a41186a290300370300200341f8046a41106a200341a8026a41106a2903003703002007200341a8026a41086a290300370300200320032903a8023703f804200341c8026a200341f8046a10f50720032802c802220720032802d002200341b0076a10be05024020032802cc02450d002007102e0b2002102e200341bd076a20034188026a41086a290300370000200341c5076a20034188026a41106a290300370000200341cd076a20034188026a41186a290300370000200341d5076a20032903a802370000200341dd076a200341a8026a41086a290300370000200341e5076a200341a8026a41106a290300370000200341ed076a200341a8026a41186a290300370000200341fc076a200c360200200341f8076a2006360200200341003a00b4072003410a3a00b00720032003290388023700b5072001ad4288277e200a42a08a077e7c201042f8fe1c7e7c42a0c28084027c210a200341b0076a10fe010b0240200b42ffffff3f83500d002008102e0b2005102e2003200341e3006a28000036004b20032003280060360248200041186a41003a0000200041106a200a3703002000200d370308200020032802483600192000411c6a200328004b360000200042003703000c1d0b200341b0076a410810f30720032902b407210a20032802b0072101200d42ffffff3f83500d192007102e0c190b200141216a2d00002104200141246a2802002109200341a8026a41186a200141196a290000370300200341a8026a41106a200141116a290000370300200341a8026a41086a200141096a290000370300200320012900013703a802200341b0076a41286a200241286a280200360200200341b0076a41206a200241206a290200370300200341b0076a41186a2201200241186a290200370300200341b0076a41106a2207200241106a290200370300200341b0076a41086a2205200241086a290200370300200320022902003703b007200341f8046a200341b0076a10c102200341f8006a41086a2202200341f8046a41096a290000370300200341f8006a41106a2206200341f8046a41116a290000370300200341f8006a41186a2208200341f8046a41196a290000370300200320032900f904370378024002400240024020032d00f8044101460d00200341c8026a41186a2008290300370300200341c8026a41106a2006290300370300200341c8026a41086a2002290300370300200320032903783703c802200142003703002007420037030020054200370300200342003703b007200341f8046a41c8afc90041131081022005200341f8046a41086a2202290000370300200320032900f8043703b007200341f8046a41c7c3cb00410710810220012002290000370300200720032900f804370300200341f8046a200341b0076a10880320032902fc04420020032802f80422021b220a422088220ba741057421012002410120021b2208210203402001450d02200141606a21012002200341c8026a412010ec082107200241206a210220070d000b200341f8046a200341a8026a10f607200341b0076a20032802f804220220032802800510b30520032802fc04210120032802b807220c450d02200341d0076a2802002113200341cc076a280200210f200341c8076a2802002112200341c4076a2802002114200341c0076a280200210e20032802bc07211120032903b007210d02402001450d002002102e0b2009200da7460d03200341b0076a410410f307200320032900b107370388022003200341b8076a28000036008f020c110b410221010c120b200341b0076a410110f307200320032900b107370388022003200341b8076a28000036008f0220032d00b00721010c100b02402001450d002002102e0b200341b0076a410310f307200320032900b107370388022003200341b8076a28000036008f0220032d00b00721010c0f0b4100210202400240200e0d004101210641002107410021090c010b200e41057441606a41057641016a210541002107200c2101034002402001200341c8026a412010ec080d0041002106410121090c020b200141206a2101410121062005200741016a2207470d000b41002109200521070b02400240024002400240200f450d00200f41057441606a41057641016a2105410021022014210103402001200341c8026a412010ec08450d02200141206a21012005200241016a2202470d000b200521020b2009450d01200441ff01710d03410021050c020b200441ff0171450d052006450d0241002105410121060c130b4100210641012105200441ff01710d120b200341f8046a41186a2202200341c8026a41186a290300370300200341f8046a41106a2206200341c8026a41106a290300370300200341f8046a41086a2215200341c8026a41086a290300370300200320032903c8023703f8040240200f2012470d00201241016a22012012490d13201241017422162001201620014b1b22014104200141044b1b220141ffffff3f712001462116200141057421010240024020120d00200341003602b0070c010b200341b8076a4101360200200320143602b007200320124105743602b4070b200341f0096a20012016200341b0076a107d200341f8096a2802002101024020032802f0094101470d0020010d190c140b20032802f4092114200141057621120b2014200f4105746a220120032903f804370000200141186a2002290300370000200141106a2006290300370000200141086a2015290300370000200f41016a210f2009450d15200e20074d0d04200c200e417f6a220e4105746a220129000021102001290008211720012900102118200c20074105746a220241186a200141186a2900003700002002201837001020022017370008200220103700000c150b200341b0076a410510f307200320032900b107370388022003200341b8076a28000036008f020c0d0b200141286a2802002108200141306a290300210b200141246a2802002107200341a8026a41186a200141196a290000370300200341a8026a41106a200141116a290000370300200341a8026a41086a200141096a290000370300200320012900013703a802200341b0076a41286a200241286a280200360200200341b0076a41206a2201200241206a290200370300200341b0076a41186a2205200241186a290200370300200341b0076a41106a2206200241106a290200370300200341b0076a41086a200241086a290200370300200320022902003703b007200341f8046a200341b0076a10c10202400240024020032d00f8044101460d00200341f8046a200341a8026a10f607200341b0076a20032802f804220920032802800510b30520032802fc042102024020032802b8072204450d002001280200210f200341cc076a280200210c20052802002105200341c4076a280200210e2006280200210120032802bc07210620032903b007210d02402002450d002009102e0b2007200da7460d03200341b0076a410410f307200320032900b107370388022003200341b8076a28000036008f0220032d00b0072102410121070c0c0b02402002450d002009102e0b200341b0076a410310f307200320032900b107370388022003200341b8076a28000036008f0220032d00b00721020c010b410221020b4200210a410021010c0b0b200d422088a7210942002110200341c8076a22074200370300200341c0076a22024200370300200341b0076a41086a22114200370300200342003703b007200341f8046a41c8afc90041131081022011200341f8046a41086a2212290000370300200320032900f8043703b007200341f8046a41c7c3cb00410710810220072012290000370300200220032900f804370300200341c8026a200341b0076a1088030240024020032802c80222070d00410021110c010b20032902cc02220a4220882210a72111200a42ffffff3f83500d002007102e0b0240024020012009490d00200341b0076a200341a8026a2008200b10f70720032d00b407210220032802b0072108200341f8046a200341b0076a41057241b30210e9081a41012107024020084101460d00200341e8096a350200210a200341c8026a200341fb046a41b00210e9081a200341bd076a200341a8026a41086a2202290300370000200341c5076a200341a8026a41106a2207290300370000200341cd076a200341a8026a41186a2208290300370000200341dc076a200c360200200341d8076a2001360200200341063a00b4072003410a3a00b007200320032903a8023700b507200341b0076a10fe0120034194056a200c360200200341f8046a41186a2005360200200341f8046a41106a200136020020034184056a20063602002003200f360298052003200e36028c0520032004360280052003200d3703f804200341f0096a41186a2008290300370300200341f0096a41106a2007290300370300200341f0096a41086a2002290300370300200320032903a8023703f009200341b0076a200341c8026a41b00210e9081a200341386a2011200341f8046a200341f0096a200341b0076a10f807427f200a42b8177e201042b0c60d7e7c200335024042b09c1b7e7c42e0c3b9dc017c220a20032903387c220b200b200a541b210b0c020b200320032900f804370388022003200341ff046a28000036008f020c0a0b4100210741002011200c6b2212201220114b1b2009490d074200210a200341b0076a41186a4200370300200341b0076a41106a4200370300200341b0076a41086a22074200370300200342003703b007200341f8046a41d9fcc60041061081022007200341f8046a41086a2212290000370300200320032900f8043703b007200341f8046a4180f4cb004106108102200241086a2012290000370000200220032900f804370000200341306a200341b0076a4120108e0202402003280234410020032802301b200f4f0d00200341b0076a410710f307200320032900b107370388022003200728000036008f0220032d00b007210241012107410021010c0b0b200341f0096a41186a22024200370300200341f0096a41106a22074200370300200341f0096a41086a22144200370300200342003703f00920034198016a41c8afc9004113108102201420034198016a41086a221329000037030020032003290098013703f00920034198016a41dbc3cb004105108102200220132900003703002007200329009801370300200341b0076a200341f0096a412010f40220032d00b0072102200341f8046a41186a200341c9076a290000370300200341f8046a41106a200341c1076a2900003703002012200341b9076a290000370300200320032900b1073703f8040240024020024101460d00410221020c010b200341c8026a41186a200341f8046a41186a290300220a370300200341c8026a41106a200341f8046a41106a2903002217370300200341c8026a41086a200341f8046a41086a2903002218370300200320032903f80422193703c802200341b0076a41186a200a370300200341b0076a41106a2017370300200341b0076a41086a2018370300200320193703b00720014105742102200421070340024020020d00410021020c020b200241606a21022007200341b0076a412010ec082112200741206a210720120d000b410121020b41002107410020112001200c6a6b2212200220024102477122021b200c6a21142012410020021b20016a22122009490d04200341b0076a200341a8026a2008200b10f70720032d00b407210220032802b0072108200341f8046a200341b0076a41057241b30210e9081a4101210720084101460d05200341e8096a350200210a200341c8026a200341fb046a41b00210e9081a200341bd076a200341a8026a41086a2202290300370000200341c5076a200341a8026a41106a2207290300370000200341cd076a200341a8026a41186a2208290300370000200341dc076a2014360200200341d8076a2012360200200341063a00b4072003410a3a00b007200320032903a8023700b507200341b0076a10fe0120034194056a200c360200200341f8046a41186a2005360200200341f8046a41106a200136020020034184056a20063602002003200f360298052003200e36028c0520032004360280052003200d3703f804200341f0096a41186a2008290300370300200341f0096a41106a2007290300370300200341f0096a41086a2002290300370300200320032903a8023703f009200341b0076a200341c8026a41b00210e9081a200341206a2011200341f8046a200341f0096a200341b0076a10f807427f200a42b8177e201042e0b60d7e7c20033502284280ac1b7e7c42e0fdcfea017c220a20032903207c220b200b200a541b210b0b4201210a410021010c0b0b200341c8026a41186a2207200141196a290000370300200341c8026a41106a2205200141116a290000370300200341c8026a41086a2206200141096a290000370300200320012900013703c802200341b0076a41286a200241286a280200360200200341b0076a41206a200241206a290200370300200341b0076a41186a2201200241186a290200370300200341b0076a41106a2208200241106a290200370300200341b0076a41086a2209200241086a290200370300200320022902003703b00702400240200341b0076a10a705450d00200320032800a80236028802200320032900f0093703b0072003200341ab026a28000036008b022003200341f7096a2800003600b707200041186a41003a00002000420037030820002003280288023600192000411c6a200328008b02360000200041206a41023a0000200020032903b007370021200041286a20032800b7073600004201210a0c010b200341f8046a41186a22022007290300220a370300200341f8046a41106a22072005290300220b370300200341f8046a41086a22052006290300220d370300200320032903c80222103703f804200341bd076a200d370000200341c5076a200b370000200341cd076a200a3700002003410a3a00b007200320103700b507200341033a00b407200341b0076a10fe01200120022903003703002008200729030037030020092005290300370300200320032903f8043703b007200341b0076a10f9072101200320032800a802360288022003200341a8026a41036a28000036008b02200041186a41003a0000200041106a2001ad42d0be1a7e42d0deb8a7017c3703002000420137030820002003280288023600192000411c6a200328008b023600004200210a0b2000200a3703000c190b200341b0076a410510f307200320032900b107370388022003200341b8076a28000036008f020c0a0b2007200e1042000b200341dc076a2014360200200341d8076a2012360200200341bd076a2201200341a8026a41086a2202290300370000200341c5076a2208200341a8026a41106a2209290300370000200341cd076a220c200341a8026a41186a220f290300370000200341063a00b4072003410a3a00b007200320032903a8023700b507200341b0076a10fe01200341f8006a41186a2211200f290300220a370300200341f8006a41106a220f2009290300220b370300200341f8006a41086a22092002290300220d370300200320032903a80222173703782001200d3700002008200b370000200c200a370000200341033a00b4072003410a3a00b007200320173700b507200341b0076a10fe01200341b0076a41186a2011290300370300200341b0076a41106a200f290300370300200341b0076a41086a2009290300370300200320032903783703b007201042c8be0d7e200341b0076a10f907ad42a0ce1a7e7c42c8b9d4d5017c210b0c030b200320032900f804370388022003200341ff046a28000036008f020c030b410221010c130b200341dc076a200c360200200341d8076a2001360200200341bd076a2201200341a8026a41086a2202290300370000200341c5076a2208200341a8026a41106a2209290300370000200341cd076a220c200341a8026a41186a220f290300370000200341063a00b4072003410a3a00b007200320032903a8023700b507200341b0076a10fe01200341f8046a41186a2211200f290300220a370300200341f8046a41106a220f2009290300220b370300200341f8046a41086a22092002290300220d370300200320032903a80222173703f8042001200d3700002008200b370000200c200a370000200341033a00b4072003410a3a00b007200320173700b507200341b0076a10fe01200341b0076a41186a2011290300370300200341b0076a41106a200f290300370300200341b0076a41086a2009290300370300200320032903f8043703b007201042a89f0d7e200341b0076a10f907ad42e8b61a7e7c42a0adc1c7017c210b0b4201210a410121010c010b4200210a410021010b0240200641ffffff3f71450d002004102e0b0240200541ffffff3f71450d00200e102e0b2007450d010b200320032800f8013602e80120032003290388023703b8012003200328008f023600bf012003200341fb016a2800003600eb01200041186a20013a0000200041106a200b3703002000200a370308200020032802e8013600192000411c6a20032800eb01360000200041206a20023a0000200020032903b801370021200041286a20032800bf01360000200042013703000c0f0b200320032800f8013602e8012003200341fb016a2800003600eb01200041186a20013a0000200041106a200b3703002000200a370308200020032802e8013600192000411c6a20032800eb01360000200042003703000c0e0b20032d00b00721010240201141ffffff3f71450d00200c102e0b201241ffffff3f71450d002014102e0b200a42ffffff3f83500d002008102e0b200320032800b8013602f8012003200329038802370398012003200328008f0236009f012003200341bb016a2800003600fb01200041186a41003a000020004200370308200020032802f8013600192000411c6a20032800fb01360000200041206a20013a00002000200329039801370021200041286a200328009f01360000200042013703000c0b0b200341f0096a41186a2207200341c8026a41186a290300370300200341f0096a41106a2209200341c8026a41106a290300370300200341f0096a41086a2215200341c8026a41086a290300370300200320032903c8023703f009200e2011470d02201141016a22012011490d00201141017422162001201620014b1b22014104200141044b1b220141ffffff3f712001462116200141057421010240024020110d00200341003602b0070c010b200341b8076a41013602002003200c3602b007200320114105743602b4070b200341f8046a20012016200341b0076a107d20034180056a280200210120032802f8044101470d0120010d050b1038000b20032802fc04210c200141057621110b200c200e4105746a220120032903f009370000200141186a2007290300370000200141106a2009290300370000200141086a2015290300370000200e41016a210e2006450d00200f20024d0d012014200f417f6a220f4105746a220129000021102001290008211720012900102118201420024105746a220241186a200141186a2900003700002002201837001020022017370008200220103700000b200341d5076a20032903a802370000200341bd076a200341c8026a41086a290300370000200341c5076a200341c8026a41106a290300370000200341cd076a200341c8026a41186a290300370000200341dd076a200341a8026a41086a290300370000200341e5076a200341a8026a41106a290300370000200341ed076a200341a8026a41186a290300370000200341013a00b4072003410a3a00b007200320032903c8023700b507200341fc076a200f360200200341f8076a200e360200200341f5076a20043a0000200341b0076a10fe01200341cc076a200f360200200341b0076a41186a2012360200200341b0076a41106a200e360200200341bc076a2011360200200320133602d007200320143602c4072003200c3602b8072003200d3703b007200341f8046a200341a8026a10f60720032802f8042201200328028005200341b0076a10be05024020032802fc04450d002001102e0b0240201141ffffff3f71450d00200c102e0b0240201241ffffff3f71450d002014102e0b200b42e8ce127e4280cbd9d7007c210b0240200a42ffffff3f83500d002008102e0b200320032800b8013602f8012003200341bb016a2800003600fb01200041186a20053a0000200041106a200b37030020004201370308200020032802f8013600192000411c6a20032800fb01360000200042003703000c060b2002200f1042000b1036000b20032902b407210a20032802b00721010b200b42ffffff3f83500d002008102e0b2005108b022005102e2003200341e3006a28000036004b20032003280060360248200041186a41003a000020004200370308200020032802483600192000411c6a200328004b360000200041246a200a370200200041206a2001360200200042013703000c010b2005108b022005102e2003200341f4006a28000036005b20032003280071360258200320032903603703482003200328006736004f200041186a41003a000020004200370308200020032802583600192000411c6a200328005b360000200041206a20013a000020002003290348370021200041286a200328004f360000200042013703000b200341a00a6a24000b8b7a040a7f047e067f037e230041a00a6b2203240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e0700010203040506000b200341c4076a4101360200200342013702b4072003419cc3cb003602b007200341043602fc0420034194c3cb003602f8042003200341f8046a3602c007200341b0076a41b8afc9001044000b20012d000121042001412c6a2802002105200141286a2802002106200141246a2802002107200341c8026a41186a22082001411a6a290000370300200341c8026a41106a2209200141126a290000370300200341c8026a41086a220a2001410a6a2900003703002003200141026a2900003703c802200341b0076a41286a200241286a280200360200200341b0076a41206a200241206a290200370300200341b0076a41186a2201200241186a290200370300200341b0076a41106a220b200241106a290200370300200341b0076a41086a220c200241086a290200370300200320022902003703b007024002400240200341b0076a10a7050d0020014200370300200b4200370300200c4200370300200342003703b007200341f8046a4181b0c9004113108102200c200341f8046a41086a2202290000370300200320032900f8043703b007200341f8046a41c7c3cb00410710810220012002290000370300200b20032900f804370300200341f8046a200341b0076a10880320032802f804210120032902fc04210d2007200510fc02200720052001410120011b2202200d420020011b220d422088220ea710fc07200341f8006a41186a2008290300370300200341f8006a41106a2009290300370300200341f8006a41086a200a290300370300200320032903c802370378200441ff01710d0120034190056a2201420037030020034188056a220b4200370300200341f8046a41086a220c4200370300200342003703f80420034198016a4181b0c9004113108102200c20034198016a41086a220429000037030020032003290098013703f80420034198016a41dbc3cb00410510810220012004290000370300200b200329009801370300200341f8046a412010ff010c020b0240200641ffffff3f71450d002007102e0b200320032800b8013602f801200320032900a802370388022003200341bb016a2800003600fb012003200341af026a28000036008f02200041186a41003a000020004200370308200020032802f8013600192000411c6a20032800fb01360000200041206a41023a00002000200329038802370021200041286a200328008f02360000200042013703000c200b200341b0076a41186a200341f8006a41186a290300370300200341b0076a41106a200341f8006a41106a290300370300200341b0076a41086a200341f8006a41086a290300370300200320032903783703b007200341f0096a41186a22014200370300200341f0096a41106a220b4200370300200341f0096a41086a220c4200370300200342003703f009200341f8046a4181b0c9004113108102200c200341f8046a41086a2204290000370300200320032900f8043703f009200341f8046a41dbc3cb00410510810220012004290000370300200b20032900f8043703004120102c2201450d1a200342203702fc04200320013602f804200341f8046a200341b0076a41201074200341f0096a412020032802f804220120032802800510b20120032802fc04450d002001102e0b2005ad42b882077e200e42c0b5e5097e7c210e0240200641ffffff3f71450d002007102e0b200e42a0c0b291397c210e0240200d42ffffff3f83500d002002102e0b200320032800b8013602f8012003200341bb016a2800003600fb01200041186a41003a0000200041106a200e37030020004201370308200020032802f8013600192000411c6a20032800fb01360000200042003703000c1e0b200141086a2802002104200141046a2802002105200341b0076a41286a200241286a280200360200200341b0076a41206a200241206a290200370300200341b0076a41186a2201200241186a290200370300200341b0076a41106a2207200241106a290200370300200341b0076a41086a2206200241086a290200370300200320022902003703b007200341f8046a200341b0076a10c102200341f8006a41086a220220034181056a290000370300200341f8006a41106a220b20034189056a290000370300200341f8006a41186a220c20034191056a290000370300200320032900f90437037820032d00f8044101460d0820034198016a41186a200c29030037030020034198016a41106a200b29030037030020034198016a41086a20022903003703002003200329037837039801200142003703002007420037030020064200370300200342003703b007200341f8046a4181b0c90041131081022006200341f8046a41086a2202290000370300200320032900f8043703b007200341f8046a41c7c3cb00410710810220012002290000370300200720032900f804370300200341f8046a200341b0076a10880320032902fc04420020032802f80422021b220d422088220ea741057421012002410120021b22062102024002400240024003402001450d01200141606a2101200220034198016a412010ec082107200241206a210220070d000b200341003602b807200342013703b0072005200341b0076a10900220032802b8072107024020032802b407450d0020032802b007102e0b0240200720044d0d00200341b0076a410a10fd07200320032900b1073703602003200341b8076a2800003600670c020b2003410036028005200342013703f8042005200341f8046a109002200341b0076a20032802f80420032802800510b00120034188026a41186a200341b0076a41186a29030037030020034188026a41106a200341b0076a41106a29030037030020034188026a41086a200341b0076a41086a290300370300200320032903b00737038802024020032802fc04450d0020032802f804102e0b200341f8046a200541b00210e9081a200341a8026a41086a20034198016a41086a290300370300200341a8026a41106a20034198016a41106a290300370300200341a8026a41186a20034198016a41186a29030037030020032003290398013703a8024110102c2202450d1c200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1c20014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220b3602000240200b0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a220b200b280200417f6a220b360200200b0d002002102e0b024002402001280208200341f8046a200128020c28020c1101000d0041022102200341e8026a41023a0000200341e0026a41003a000020012001280200417f6a220b3602004200210f200342003703d002200342013703c8020240200b0d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a220b200b280200417f6a220b360200200b0d002001102e0b200341f8046a10dc02410121010c010b200341b0076a200341f8046a41b00210e9081a200341fd096a200341b0026a290300370000200341850a6a200341b8026a2903003700002003418d0a6a200341c0026a290300370000200341950a6a20032f00783b0000200341023a00f009200341970a6a200341f8006a41026a2d00003a0000200341013a00f409200320032903a8023700f509200320013602980a200341c8026a200341b0076a200341f0096a10dd0220032903c8024201512101200341e8026a2d0000210220032903d002210f0b200341f8046a41186a20034188026a41186a290300370300200341f8046a41106a20034188026a41106a290300370300200341f8046a41086a20034188026a41086a29030037030020032003290388023703f8042003200341f0026a2800003600b707200320032900e9023703b0070240024020010d00410621010c010b200320032800b7073600ff01200320032903b0073703f80141062101200f4202510d00200320032800ff013600ef01200320032903f8013703e801200221010b200341f0096a41086a2202200341f8046a41086a290300370300200341f0096a41106a220b200341f8046a41106a290300370300200341f0096a41186a220c200341f8046a41186a290300370300200320032903f8043703f009200320032903e8013703d801200320032800ef013600df01200341053a00b4072003410b3a00b007200341bd076a2002290300370000200341c5076a200b290300370000200341cd076a200c290300370000200341d8076a20013a0000200320032903f0093700b507200341d5076a20032f00e5013b0000200341d7076a200341e7016a2d00003a0000200341d9076a20032903d801370000200341e0076a20032800df01360000200341fc076a200341b8016a41186a280200360200200341f4076a200341b8016a41106a290200370200200341ec076a200341b8016a41086a290200370200200341e4076a20032902b801370200200341b0076a10fe01200fa70d024200210e0c030b200341b0076a410110fd07200320032900b1073703602003200341b8076a2800003600670b20032d00b0072101200d42ffffff3f83500d1e2006102e0c1e0b427f2007ad42a01f7e200e4280eb067e7c42d8bbe3167c220e200341c8026a41106a2903007c220f200f200e541b210f4201210e0b0240200d42ffffff3f83500d002006102e0b2005102e2003200341f4006a28000036005b20032003280071360258200041186a41003a0000200041106a200f3703002000200e370308200020032802583600192000411c6a200328005b360000200042003703000c1d0b2001410c6a2802002104200141086a2802002105200141046a2802002108200341b0076a41286a200241286a280200360200200341b0076a41206a200241206a290200370300200341b0076a41186a2201200241186a290200370300200341b0076a41106a2206200241106a290200370300200341b0076a41086a2207200241086a290200370300200320022902003703b007200341f8046a200341b0076a10c102200341c8026a41086a220220034181056a290000370300200341c8026a41106a220b20034189056a290000370300200341c8026a41186a220c20034191056a290000370300200320032900f9043703c80202400240024020032d00f8044101460d0020034188026a41186a200c29030037030020034188026a41106a200b29030037030020034188026a41086a2002290300370300200320032903c80237038802200142003703002006420037030020074200370300200342003703b007200341f8046a4181b0c90041131081022007200341f8046a41086a2202290000370300200320032900f8043703b007200341f8046a41c7c3cb00410710810220012002290000370300200620032900f804370300200341f8046a200341b0076a10880320032902fc04420020032802f80422021b220e422088220da741057421012002410120021b220b210203402001450d02200141606a2101200220034188026a412010ec082107200241206a210220070d000b200341003602b807200342013703b0072005200341b0076a10900220032802b8072101024020032802b407450d0020032802b007102e0b200120044d0d02200341b0076a410a10fd070c1b0b410221010c1c0b200341b0076a410110fd070c190b2003410036028005200342013703f8042005200341f8046a109002200341b0076a20032802f80420032802800510b001200341a8026a41186a2202200341b0076a41186a2207290300370300200341a8026a41106a220c200341b0076a41106a2204290300370300200341a8026a41086a2209200341b0076a41086a220a290300370300200320032903b0073703a802024020032802fc04450d0020032802f804102e0b200720022903003703002004200c290300370300200a2009290300370300200320032903a8023703b007200341f8046a200341b0076a10fe0720032802f8042207200328028005108f022102024020032802fc04450d002007102e0b02402002450d00200341b0076a410210fd070c190b024002400240200841014b0d00200341c8076a4200370300200341c0076a4200370300200341b0076a41086a22024200370300200342003703b007200341f8046a4181b0c90041131081022002200341f8046a41086a2207290000370300200320032900f8043703b007200341f8046a41c7c3cb004107108102200641086a2007290000370000200620032900f804370000200341c8026a200341b0076a1088030240024020032802c80222020d004100210c0c010b20032902cc02220f422088a7210c200f42ffffff3f83500d002002102e0b200341f8046a200541b00210e9081a4110102c2207450d1a200741f8f7c60036020c2007410136020820074281808080103702004110102c2202450d1a20024190f8c60036020c20024101360208200242818080801037020020072007280200417f6a2206360200024020060d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22062006280200417f6a220636020020060d002007102e0b024002402002280208200341f8046a200228020c28020c1101000d0041022107200341e8026a41023a0000200341e0026a41003a000020022002280200417f6a22063602004200210f200342003703d002200342013703c802024020060d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22062006280200417f6a220636020020060d002002102e0b200341f8046a10dc02410121020c010b200341b0076a200341f8046a41b00210e9081a200341fc096a200c360200200341f0096a41086a4101360200200341f0096a41106a200329019801370300200341880a6a20034198016a41086a290100370300200341f0096a41206a20034198016a41106a290100370300200341003a00f409200320032f00783b00f509200320023602980a200341023a00f0092003200341f8006a41026a2d00003a00f709200341c8026a200341b0076a200341f0096a10dd0220032903c8024201512102200341c8026a41206a2d0000210720032903d002210f0b200341f0096a41186a200341a8026a41186a290300370300200341f0096a41106a200341a8026a41106a290300370300200341f0096a41086a200341a8026a41086a290300370300200320032903a8023703f0092003200341f0026a2800003600b707200320032900e9023703b0070240024020020d00410621020c010b200320032800b7073600ff01200320032903b0073703f80141062102200f4202510d00200320032800ff013600ef01200320032903f8013703e801200721020b200341f8006a41086a2207200341f0096a41086a290300370300200341f8006a41106a2206200341f0096a41106a290300370300200341f8006a41186a220c200341f0096a41186a290300370300200320032903f009370378200320032903e8013703d801200320032800ef013600df01200341043a00b4072003410b3a00b007200341bd076a2007290300370000200341c5076a2006290300370000200341cd076a200c290300370000200341d8076a20023a0000200320032903783700b507200341d5076a20032f00e5013b0000200341d7076a200341e7016a2d00003a0000200341d9076a20032903d801370000200341e0076a20032800df01360000200341fc076a200341b8016a41186a280200360200200341f4076a200341b8016a41106a290200370200200341ec076a200341b8016a41086a290200370200200341e4076a20032902b801370200200341b0076a10fe010240200fa70d004200210f0c020b427f2001ad42a01f7e200d42e8dd0d7e7c42d8ce86257c220d200341c8026a41106a2903007c220f200f200d541b210d4201210f0c010b200341b0076a41186a4200370300200341b0076a41106a4200370300200341b0076a41086a22024200370300200342003703b007200341f8046a4181b0c90041131081022002200341f8046a41086a220c290000370300200320032900f8043703b007200341f8046a41dbafc9004109108102200641086a200c290000370000200620032900f804370000200341f8046a200341b0076a4120108d0320032802f804210220032902fc04210f200341f8046a41186a2209200341a8026a41186a290300370300200341f8046a41106a220a200341a8026a41106a290300370300200c200341a8026a41086a290300370300200320032903a8023703f8042002410120021b21070240024002400240200f420020021b220f4220882210a72202200fa7470d00200241016a22042002490d1820024101742211200420042011491b22044104200441044b1b220441ffffff3f712004462111200441057421040240024020020d00200341003602b0070c010b200341b8076a4101360200200320073602b007200320104205863e02b4070b200341c8026a20042011200341b0076a107d200341d0026a280200210420032802c8024101460d0120032802cc022107200f422088a721022004410576ad210f0b200720024105746a220420032903f804370000200441186a2009290300370000200441106a200a290300370000200441086a200c290300370000200241016a220241e4004b0d04200320073602b0072003200f42ffffffff0f832002ad2210422086843702b40720070d0120034190056a2202420037030020034188056a22074200370300200341f8046a41086a220c4200370300200342003703f80420034198016a4181b0c9004113108102200c20034198016a41086a220429000037030020032003290098013703f80420034198016a41dbafc9004109108102200220042900003703002007200329009801370300200341f8046a412010ff010c020b2004450d160c1b0b20034190056a2202420037030020034188056a220c4200370300200341f8046a41086a22044200370300200342003703f80420034198016a4181b0c9004113108102200420034198016a41086a220929000037030020032003290098013703f80420034198016a41dbafc900410910810220022009290000370300200c200329009801370300200341f8046a200341b0076a10e6042007450d00200f42ffffff3f83500d002007102e0b200341f8046a41186a22024200370300200341f8046a41106a22074200370300200341f8046a41086a220c4200370300200342003703f80420034198016a4181b0c9004113108102200c20034198016a41086a220429000037030020032003290098013703f80420034198016a41e4afc900410d108102200220042900003703002007200329009801370300200341186a200341f8046a4120108e02200328021c21092003280218210a2002420037030020074200370300200c4200370300200342003703f80420034198016a4181b0c9004113108102200c200429000037030020032003290098013703f80420034198016a41e4afc900410d108102200220042900003703002007200329009801370300200341106a200341f8046a4120108e0220032802102111200328021421122002420037030020074200370300200c4200370300200342003703f80420034198016a4181b0c9004113108102200c200429000037030020032003290098013703f80420034198016a41e4afc900410d1081022002200429000037030020072003290098013703002003201241016a410120111b3602b007200341f8046a4120200341b0076a410410b201200341b0076a200541b00210e9081a2002200341a8026a41186a2903003703002007200341a8026a41106a290300370300200c200341a8026a41086a290300370300200320032903a8023703f804200341c8026a200341f8046a10fe0720032802c802210220032802d0022107200342013703f8042003410036028005200341b0076a200341f8046a1090022002200720032802f80420032802800510b201024020032802fc04450d0020032802f804102e0b024020032802cc02450d002002102e0b200341b0076a108b02200341b0076a41186a4200370300200341b0076a41106a4200370300200341b0076a41086a22024200370300200342003703b007200341f8046a41d9fcc60041061081022002200341f8046a41086a2207290000370300200320032900f8043703b007200341f8046a4180f4cb004106108102200641086a2007290000370000200620032900f804370000200341086a200341b0076a4120108e02200328020c21062003280208210c4120102c2202450d192002200329038802370000200241186a20034188026a41186a290300370000200241106a20034188026a41106a290300370000200241086a20034188026a41086a290300370000200341cc076a4100360200200341bc076a4281808080103702002003200641c093066a41c09306200c1b3602d0074201210f200342013702c407200320023602b807200320083602b407200320094100200a1b22063602b007200341f8046a41186a200341a8026a41186a290300370300200341f8046a41106a200341a8026a41106a2903003703002007200341a8026a41086a290300370300200320032903a8023703f804200341c8026a200341f8046a10ff0720032802c802220720032802d002200341b0076a10be05024020032802cc02450d002007102e0b2002102e200341bd076a20034188026a41086a290300370000200341c5076a20034188026a41106a290300370000200341cd076a20034188026a41186a290300370000200341d5076a20032903a802370000200341dd076a200341a8026a41086a290300370000200341e5076a200341a8026a41106a290300370000200341ed076a200341a8026a41186a290300370000200341fc076a2008360200200341f8076a2006360200200341003a00b4072003410b3a00b00720032003290388023700b5072001ad4288277e200d42a08a077e7c201042f8fe1c7e7c42a0c28084027c210d200341b0076a10fe010b0240200e42ffffff3f83500d00200b102e0b2005102e2003200341e3006a28000036004b20032003280060360248200041186a41003a0000200041106a200d3703002000200f370308200020032802483600192000411c6a200328004b360000200042003703000c1d0b200341b0076a410810fd0720032902b407210d20032802b0072101200f42ffffff3f83500d192007102e0c190b200141216a2d00002104200141246a280200210c200341a8026a41186a200141196a290000370300200341a8026a41106a200141116a290000370300200341a8026a41086a200141096a290000370300200320012900013703a802200341b0076a41286a200241286a280200360200200341b0076a41206a200241206a290200370300200341b0076a41186a2201200241186a290200370300200341b0076a41106a2207200241106a290200370300200341b0076a41086a2205200241086a290200370300200320022902003703b007200341f8046a200341b0076a10c102200341f8006a41086a2202200341f8046a41096a290000370300200341f8006a41106a2206200341f8046a41116a290000370300200341f8006a41186a220b200341f8046a41196a290000370300200320032900f904370378024002400240024020032d00f8044101460d00200341c8026a41186a200b290300370300200341c8026a41106a2006290300370300200341c8026a41086a2002290300370300200320032903783703c802200142003703002007420037030020054200370300200342003703b007200341f8046a4181b0c90041131081022005200341f8046a41086a2202290000370300200320032900f8043703b007200341f8046a41c7c3cb00410710810220012002290000370300200720032900f804370300200341f8046a200341b0076a10880320032902fc04420020032802f80422021b220d422088220ea741057421012002410120021b220b210203402001450d02200141606a21012002200341c8026a412010ec082107200241206a210220070d000b200341f8046a200341a8026a108008200341b0076a20032802f804220220032802800510b30520032802fc04210120032802b8072208450d02200341d0076a2802002113200341cc076a280200210a200341c8076a2802002112200341c4076a2802002114200341c0076a280200210920032802bc07211120032903b007210f02402001450d002002102e0b200c200fa7460d03200341b0076a410410fd07200320032900b107370388022003200341b8076a28000036008f020c110b410221010c120b200341b0076a410110fd07200320032900b107370388022003200341b8076a28000036008f0220032d00b00721010c100b02402001450d002002102e0b200341b0076a410310fd07200320032900b107370388022003200341b8076a28000036008f0220032d00b00721010c0f0b410021020240024020090d0041012106410021074100210c0c010b200941057441606a41057641016a21054100210720082101034002402001200341c8026a412010ec080d00410021064101210c0c020b200141206a2101410121062005200741016a2207470d000b4100210c200521070b02400240024002400240200a450d00200a41057441606a41057641016a2105410021022014210103402001200341c8026a412010ec08450d02200141206a21012005200241016a2202470d000b200521020b200c450d01200441ff01710d03410021050c020b200441ff0171450d052006450d0241002105410121060c130b4100210641012105200441ff01710d120b200341f8046a41186a2202200341c8026a41186a290300370300200341f8046a41106a2206200341c8026a41106a290300370300200341f8046a41086a2215200341c8026a41086a290300370300200320032903c8023703f8040240200a2012470d00201241016a22012012490d13201241017422162001201620014b1b22014104200141044b1b220141ffffff3f712001462116200141057421010240024020120d00200341003602b0070c010b200341b8076a4101360200200320143602b007200320124105743602b4070b200341f0096a20012016200341b0076a107d200341f8096a2802002101024020032802f0094101470d0020010d190c140b20032802f4092114200141057621120b2014200a4105746a220120032903f804370000200141186a2002290300370000200141106a2006290300370000200141086a2015290300370000200a41016a210a200c450d15200920074d0d0420082009417f6a22094105746a220129000021102001290008211720012900102118200820074105746a220241186a200141186a2900003700002002201837001020022017370008200220103700000c150b200341b0076a410510fd07200320032900b107370388022003200341b8076a28000036008f020c0d0b200141286a280200210b200141306a290300210e200141246a2802002107200341a8026a41186a200141196a290000370300200341a8026a41106a200141116a290000370300200341a8026a41086a200141096a290000370300200320012900013703a802200341b0076a41286a200241286a280200360200200341b0076a41206a2201200241206a290200370300200341b0076a41186a2205200241186a290200370300200341b0076a41106a2206200241106a290200370300200341b0076a41086a200241086a290200370300200320022902003703b007200341f8046a200341b0076a10c10202400240024020032d00f8044101460d00200341f8046a200341a8026a108008200341b0076a20032802f804220c20032802800510b30520032802fc042102024020032802b8072204450d002001280200210a200341cc076a280200210820052802002105200341c4076a28020021092006280200210120032802bc07210620032903b007210f02402002450d00200c102e0b2007200fa7460d03200341b0076a410410fd07200320032900b107370388022003200341b8076a28000036008f0220032d00b0072102410121070c0c0b02402002450d00200c102e0b200341b0076a410310fd07200320032900b107370388022003200341b8076a28000036008f0220032d00b00721020c010b410221020b4200210d410021010c0b0b200f422088a7210c42002110200341c8076a22074200370300200341c0076a22024200370300200341b0076a41086a22114200370300200342003703b007200341f8046a4181b0c90041131081022011200341f8046a41086a2212290000370300200320032900f8043703b007200341f8046a41c7c3cb00410710810220072012290000370300200220032900f804370300200341c8026a200341b0076a1088030240024020032802c80222070d00410021110c010b20032902cc02220d4220882210a72111200d42ffffff3f83500d002007102e0b024002402001200c490d00200341b0076a200341a8026a200b200e10810820032d00b407210220032802b007210b200341f8046a200341b0076a41057241b30210e9081a410121070240200b4101460d00200341e8096a350200210d200341c8026a200341fb046a41b00210e9081a200341bd076a200341a8026a41086a2202290300370000200341c5076a200341a8026a41106a2207290300370000200341cd076a200341a8026a41186a220b290300370000200341dc076a2008360200200341d8076a2001360200200341063a00b4072003410b3a00b007200320032903a8023700b507200341b0076a10fe0120034194056a2008360200200341f8046a41186a2005360200200341f8046a41106a200136020020034184056a20063602002003200a360298052003200936028c0520032004360280052003200f3703f804200341f0096a41186a200b290300370300200341f0096a41106a2007290300370300200341f0096a41086a2002290300370300200320032903a8023703f009200341b0076a200341c8026a41b00210e9081a200341386a2011200341f8046a200341f0096a200341b0076a108208427f200d42b8177e201042b0c60d7e7c200335024042b09c1b7e7c42e0c3b9dc017c220d20032903387c220e200e200d541b210e0c020b200320032900f804370388022003200341ff046a28000036008f020c0a0b410021074100201120086b2212201220114b1b200c490d074200210d200341b0076a41186a4200370300200341b0076a41106a4200370300200341b0076a41086a22074200370300200342003703b007200341f8046a41d9fcc60041061081022007200341f8046a41086a2212290000370300200320032900f8043703b007200341f8046a4180f4cb004106108102200241086a2012290000370000200220032900f804370000200341306a200341b0076a4120108e0202402003280234410020032802301b200a4f0d00200341b0076a410710fd07200320032900b107370388022003200728000036008f0220032d00b007210241012107410021010c0b0b200341f0096a41186a22024200370300200341f0096a41106a22074200370300200341f0096a41086a22144200370300200342003703f00920034198016a4181b0c9004113108102201420034198016a41086a221329000037030020032003290098013703f00920034198016a41dbc3cb004105108102200220132900003703002007200329009801370300200341b0076a200341f0096a412010f40220032d00b0072102200341f8046a41186a200341c9076a290000370300200341f8046a41106a200341c1076a2900003703002012200341b9076a290000370300200320032900b1073703f8040240024020024101460d00410221020c010b200341c8026a41186a200341f8046a41186a290300220d370300200341c8026a41106a200341f8046a41106a2903002217370300200341c8026a41086a200341f8046a41086a2903002218370300200320032903f80422193703c802200341b0076a41186a200d370300200341b0076a41106a2017370300200341b0076a41086a2018370300200320193703b00720014105742102200421070340024020020d00410021020c020b200241606a21022007200341b0076a412010ec082112200741206a210720120d000b410121020b4100210741002011200120086a6b2212200220024102477122021b20086a21142012410020021b20016a2212200c490d04200341b0076a200341a8026a200b200e10810820032d00b407210220032802b007210b200341f8046a200341b0076a41057241b30210e9081a41012107200b4101460d05200341e8096a350200210d200341c8026a200341fb046a41b00210e9081a200341bd076a200341a8026a41086a2202290300370000200341c5076a200341a8026a41106a2207290300370000200341cd076a200341a8026a41186a220b290300370000200341dc076a2014360200200341d8076a2012360200200341063a00b4072003410b3a00b007200320032903a8023700b507200341b0076a10fe0120034194056a2008360200200341f8046a41186a2005360200200341f8046a41106a200136020020034184056a20063602002003200a360298052003200936028c0520032004360280052003200f3703f804200341f0096a41186a200b290300370300200341f0096a41106a2007290300370300200341f0096a41086a2002290300370300200320032903a8023703f009200341b0076a200341c8026a41b00210e9081a200341206a2011200341f8046a200341f0096a200341b0076a108208427f200d42b8177e201042e0b60d7e7c20033502284280ac1b7e7c42e0fdcfea017c220d20032903207c220e200e200d541b210e0b4201210d410021010c0b0b200341c8026a41186a2207200141196a290000370300200341c8026a41106a2205200141116a290000370300200341c8026a41086a2206200141096a290000370300200320012900013703c802200341b0076a41286a200241286a280200360200200341b0076a41206a200241206a290200370300200341b0076a41186a2201200241186a290200370300200341b0076a41106a220b200241106a290200370300200341b0076a41086a220c200241086a290200370300200320022902003703b00702400240200341b0076a10a705450d00200320032800a80236028802200320032900f0093703b0072003200341ab026a28000036008b022003200341f7096a2800003600b707200041186a41003a00002000420037030820002003280288023600192000411c6a200328008b02360000200041206a41023a0000200020032903b007370021200041286a20032800b7073600004201210d0c010b200341f8046a41186a22022007290300220d370300200341f8046a41106a22072005290300220e370300200341f8046a41086a22052006290300220f370300200320032903c80222103703f804200341bd076a200f370000200341c5076a200e370000200341cd076a200d3700002003410b3a00b007200320103700b507200341033a00b407200341b0076a10fe0120012002290300370300200b2007290300370300200c2005290300370300200320032903f8043703b007200341b0076a1083082101200320032800a802360288022003200341a8026a41036a28000036008b02200041186a41003a0000200041106a2001ad42d0be1a7e42d0deb8a7017c3703002000420137030820002003280288023600192000411c6a200328008b023600004200210d0b2000200d3703000c190b200341b0076a410510fd07200320032900b107370388022003200341b8076a28000036008f020c0a0b200720091042000b200341dc076a2014360200200341d8076a2012360200200341bd076a2201200341a8026a41086a2202290300370000200341c5076a220b200341a8026a41106a220c290300370000200341cd076a2208200341a8026a41186a220a290300370000200341063a00b4072003410b3a00b007200320032903a8023700b507200341b0076a10fe01200341f8006a41186a2211200a290300220d370300200341f8006a41106a220a200c290300220e370300200341f8006a41086a220c2002290300220f370300200320032903a80222173703782001200f370000200b200e3700002008200d370000200341033a00b4072003410b3a00b007200320173700b507200341b0076a10fe01200341b0076a41186a2011290300370300200341b0076a41106a200a290300370300200341b0076a41086a200c290300370300200320032903783703b007201042c8be0d7e200341b0076a108308ad42a0ce1a7e7c42c8b9d4d5017c210e0c030b200320032900f804370388022003200341ff046a28000036008f020c030b410221010c130b200341dc076a2008360200200341d8076a2001360200200341bd076a2201200341a8026a41086a2202290300370000200341c5076a220b200341a8026a41106a220c290300370000200341cd076a2208200341a8026a41186a220a290300370000200341063a00b4072003410b3a00b007200320032903a8023700b507200341b0076a10fe01200341f8046a41186a2211200a290300220d370300200341f8046a41106a220a200c290300220e370300200341f8046a41086a220c2002290300220f370300200320032903a80222173703f8042001200f370000200b200e3700002008200d370000200341033a00b4072003410b3a00b007200320173700b507200341b0076a10fe01200341b0076a41186a2011290300370300200341b0076a41106a200a290300370300200341b0076a41086a200c290300370300200320032903f8043703b007201042a89f0d7e200341b0076a108308ad42e8b61a7e7c42a0adc1c7017c210e0b4201210d410121010c010b4200210d410021010b0240200641ffffff3f71450d002004102e0b0240200541ffffff3f71450d002009102e0b2007450d010b200320032800f8013602e80120032003290388023703b8012003200328008f023600bf012003200341fb016a2800003600eb01200041186a20013a0000200041106a200e3703002000200d370308200020032802e8013600192000411c6a20032800eb01360000200041206a20023a0000200020032903b801370021200041286a20032800bf01360000200042013703000c0f0b200320032800f8013602e8012003200341fb016a2800003600eb01200041186a20013a0000200041106a200e3703002000200d370308200020032802e8013600192000411c6a20032800eb01360000200042003703000c0e0b20032d00b00721010240201141ffffff3f71450d002008102e0b201241ffffff3f71450d002014102e0b200d42ffffff3f83500d00200b102e0b200320032800b8013602f8012003200329038802370398012003200328008f0236009f012003200341bb016a2800003600fb01200041186a41003a000020004200370308200020032802f8013600192000411c6a20032800fb01360000200041206a20013a00002000200329039801370021200041286a200328009f01360000200042013703000c0b0b200341f0096a41186a2207200341c8026a41186a290300370300200341f0096a41106a220c200341c8026a41106a290300370300200341f0096a41086a2215200341c8026a41086a290300370300200320032903c8023703f00920092011470d02201141016a22012011490d00201141017422162001201620014b1b22014104200141044b1b220141ffffff3f712001462116200141057421010240024020110d00200341003602b0070c010b200341b8076a4101360200200320083602b007200320114105743602b4070b200341f8046a20012016200341b0076a107d20034180056a280200210120032802f8044101470d0120010d050b1038000b20032802fc042108200141057621110b200820094105746a220120032903f009370000200141186a2007290300370000200141106a200c290300370000200141086a2015290300370000200941016a21092006450d00200a20024d0d012014200a417f6a220a4105746a220129000021102001290008211720012900102118201420024105746a220241186a200141186a2900003700002002201837001020022017370008200220103700000b200341d5076a20032903a802370000200341bd076a200341c8026a41086a290300370000200341c5076a200341c8026a41106a290300370000200341cd076a200341c8026a41186a290300370000200341dd076a200341a8026a41086a290300370000200341e5076a200341a8026a41106a290300370000200341ed076a200341a8026a41186a290300370000200341013a00b4072003410b3a00b007200320032903c8023700b507200341fc076a200a360200200341f8076a2009360200200341f5076a20043a0000200341b0076a10fe01200341cc076a200a360200200341b0076a41186a2012360200200341b0076a41106a2009360200200341bc076a2011360200200320133602d007200320143602c407200320083602b8072003200f3703b007200341f8046a200341a8026a10800820032802f8042201200328028005200341b0076a10be05024020032802fc04450d002001102e0b0240201141ffffff3f71450d002008102e0b0240201241ffffff3f71450d002014102e0b200e42e8ce127e4280cbd9d7007c210e0240200d42ffffff3f83500d00200b102e0b200320032800b8013602f8012003200341bb016a2800003600fb01200041186a20053a0000200041106a200e37030020004201370308200020032802f8013600192000411c6a20032800fb01360000200042003703000c060b2002200a1042000b1036000b20032902b407210d20032802b00721010b200e42ffffff3f83500d00200b102e0b2005108b022005102e2003200341e3006a28000036004b20032003280060360248200041186a41003a000020004200370308200020032802483600192000411c6a200328004b360000200041246a200d370200200041206a2001360200200042013703000c010b2005108b022005102e2003200341f4006a28000036005b20032003280071360258200320032903603703482003200328006736004f200041186a41003a000020004200370308200020032802583600192000411c6a200328005b360000200041206a20013a000020002003290348370021200041286a200328004f360000200042013703000b200341a00a6a24000bec7b06017f017e147f057e1a7f017e23004190076b220324000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e0700010203040507000b2003419c056a41013602002003420137028c052003419cc3cb0036028805200341043602840420034194c3cb0036028004200320034180046a3602980520034188056a41d4cec8001044000b200341c0016a41086a2001412c6a2802003602002003200141246a2902003703c001200341d0036a41186a200141196a290000370300200341d0036a41106a200141116a290000370300200341d0036a41086a200141096a290000370300200320012900013703d0032002411a6a2901002104200241196a2d00002105200241186a2d00002106200241166a2f01002107200241156a2d00002108200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f0100211620022d0001211720022d00002101200228022822022002280200417f6a2218360200024002400240024020010d00024020180d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b201741ff01714101470d01200320043703f801200320053a00f701200320063a00f601200320073b01f401200320083a00f301200320093a00f2012003200a3b01f0012003200b3a00ef012003200c3a00ee012003200d3b01ec012003200e3a00eb012003200f3a00ea01200320103b01e801200320113a00e701200320123a00e601200320133b01e401200320143a00e301200320153a00e201200320163b01e00120032802c8012202418080014d0d02200341f0036a41011098070c030b20180d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b200341023a00f0030c010b20034190066a20032802c0012217200210b001200341d8026a41186a20034190066a41186a290300370300200341d8026a41106a20034190066a41106a290300370300200341d8026a41086a20034190066a41086a29030037030020032003290390063703d80220034188056a200341d8026a1099072003280288052218200328029005108f0221010240200328028c05450d002018102e0b02402001450d00200341f0036a41021098070c010b2003200341d0036a36028c052003200341d8026a3602880520034180046a20034188056a108f0520034188056a20034180046a109a072003280288052218200328029005108f0221010240200328028c05450d002018102e0b02402001450d00200341f0036a41021098070c010b200341086a2002ad42004280c2d72f420010e80820034188056a200341e0016a200329030822194280c8afa0257c2204200341086a41086a2903002004201954ad7c221910c302200320032900890537039006200320034188056a41086a28000036009706024020032d00880522024106470d0020034188056a200341d8026a1099072003280288052202200328029005200341c0016a10c3050240200328028c05450d002002102e0b200341a8056a4100360200200341b4056a200341d8026a41086a290300370200200341bc056a200341d8026a41106a290300370200200341c4056a200341d8026a41186a290300370200200341d4056a200341d0036a41086a290300370200200341dc056a200341d0036a41106a290300370200200341e4056a200341d0036a41186a29030037020020032019370390052003200437038805200342083703a0052003410036029805200320032903d8023702ac05200320032903d0033702cc0520034184066a200341e0016a41186a290300370200200341fc056a200341e0016a41106a290300370200200341f4056a200341e0016a41086a290300370200200341013a008c06200320032903e0013702ec0520034190066a20034180046a109a07200328029006220220032802980620034188056a10bb050240200328029406450d002002102e0b20034188056a41086a41003a000020034191056a20032903800437000020034199056a20034180046a41086a290300370000200341a1056a20034180046a41106a290300370000200341a9056a20034180046a41186a290300370000200341163a00880520034188056a10fe01200341063a00f00320032802c401450d182017102e0c180b200341f0036a41086a200328009706360000200320023a00f00320032003290390063700f1030b024020032802c401450d0020032802c001102e0b20032d00f0034106460d1620032802f0032102200020032902f403370024200041206a2002360000200041186a41003a000020004200370308200042013703000c170b200341c0016a41186a200141196a290000370300200341c0016a41106a200141116a290000370300200341c0016a41086a200141096a290000370300200320012900013703c0012002411a6a2901002104200241196a2d00002105200241186a2d00002106200241166a2f01002107200241156a2d00002108200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f0100211620022d0001211720022d00002101200228022822022002280200417f6a2218360200024002400240024020010d00024020180d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b201741ff01714101470d01200320043703e803200320053a00e703200320063a00e603200320073b01e403200320083a00e303200320093a00e2032003200a3b01e0032003200b3a00df032003200c3a00de032003200d3b01dc032003200e3a00db032003200f3a00da03200320103b01d803200320113a00d703200320123a00d603200320133b01d403200320143a00d303200320153a00d203200320163b01d003200341f0036a200341c0016a109a0720034188056a20032802f003220120032802f80310b40520034190056a29030021042003290388052119200328029805210220034190066a2003419c056a41f40010e9081a20024102460d02200341d8026a20034190066a41f40010e9081a024020032802f403450d002001102e0b200341e0016a200341d8026a41f40010e9081a20032004370388042003201937038004200320023602900420034194046a200341e0016a41f40010e9081a200341e4046a200341d0036a412010ec08450d03200341b0016a41041098072003419c046a2802002202450d16200241306c450d16200328029804102e0c160b20180d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b200341023a00b0010c150b024020032802f403450d002001102e0b200341b0016a41031098070c130b20034188056a200341a4046a109907200328028805220220032802900510ff010240200328028c05450d002002102e0b20034188056a200341c0016a109a07200328028805220220032802900510ff010240200328028c05450d002002102e0b02402019200484500d00200341186a200341d0036a2019200410fb010b20034188056a41086a41033a000020034191056a20032903c00137000020034199056a200341c0016a41086a290300370000200341a1056a200341d0016a290300370000200341a9056a200341d8016a290300370000200341163a00880520034188056a10fe0102402003419c046a2802002202450d00200241306c450d00200328029804102e0b200341063a00b0010c140b200141386a2903002119200141306a290300211a200341c0016a41086a2001412c6a2802003602002003200141246a2902003703c001200341d0036a41186a200141196a290000370300200341d0036a41106a200141116a290000370300200341d0036a41086a200141096a290000370300200320012900013703d0032002411a6a2901002104200241196a2d00002105200241186a2d00002106200241166a2f01002107200241156a2d00002108200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f0100211620022d0001211720022d00002101200228022822022002280200417f6a221836020002400240024020010d00024020180d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b201741ff01714101470d01200320043703f801200320053a00f701200320063a00f601200320073b01f401200320083a00f301200320093a00f2012003200a3b01f0012003200b3a00ef012003200c3a00ee012003200d3b01ec012003200e3a00eb012003200f3a00ea01200320103b01e801200320113a00e701200320123a00e601200320133b01e401200320143a00e301200320153a00e201200320163b01e001200341e0016a10c3030d02200341023a00f0030c120b20180d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b200341023a00f0030c100b20034190066a20032802c00120032802c80110b001200341d8026a41186a20034190066a41186a290300370300200341d8026a41106a20034190066a41106a290300370300200341d8026a41086a20034190066a41086a29030037030020032003290390063703d80220034188056a200341d8026a1099072003280288052201200328029005108f0221020240200328028c05450d002001102e0b02402002450d00200341f0036a41021098070c100b2003200341d0036a36028c052003200341d8026a3602880520034180046a20034188056a108f0520034188056a200341d8026a1099072003280288052202200328029005200341c0016a10c3050240200328028c05450d002002102e0b2003290380042104200329038804211b200329039004211c200341a9056a200329039804370000200341a1056a201c37000020034199056a201b37000020034191056a200437000020034188056a41086a220141003a0000200341163a00880520034188056a10fe014130102c2202450d0d2002201a370320200220032903e001370100200241286a2019370300200241186a200341e0016a41186a2218290300370100200241106a200341e0016a41106a2217290300370100200241086a200341e0016a41086a220529030037010020034188056a41106a410036020020014200370300200341a4056a428180808010370200200341b4056a200341d8026a41086a290300370200200341bc056a200341d8026a41106a290300370200200341c4056a200341d8026a41186a2903003702002003420037038805200320023602a005200320032903d8023702ac05200341d4056a200341d0036a41086a290300370200200341dc056a200341d0036a41106a290300370200200341e4056a200341d0036a41186a290300370200200320032903d0033702cc0520034184066a2018290300370200200341fc056a2017290300370200200341f4056a2005290300370200200320032903e0013702ec05200341003a008c0620034190066a20034180046a109a07200328029006220120032802980620034188056a10bb050240200328029406450d002001102e0b2002102e200341063a00f00320032802c401450d1020032802c001102e0c100b200141306a2903002119200141286a290300211a200341c0016a41186a200141196a290000370300200341c0016a41106a200141116a290000370300200341c0016a41086a200141096a290000370300200320012900013703c0012002411a6a2901002104200241196a2d00002105200241186a2d00002106200241166a2f01002107200241156a2d00002108200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f0100211620022d0001211720022d00002101200228022822022002280200417f6a2218360200024002400240024002400240024002400240024020010d00024020180d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b201741ff01714101470d01200320043703e803200320053a00e703200320063a00e603200320073b01e403200320083a00e303200320093a00e2032003200a3b01e0032003200b3a00df032003200c3a00de032003200d3b01dc032003200e3a00db032003200f3a00da03200320103b01d803200320113a00d703200320123a00d603200320133b01d403200320143a00d303200320153a00d203200320163b01d003200341d0036a10c303450d0120034190066a41186a200341c0016a41186a29030037030020034190066a41106a200341c0016a41106a29030037030020034190066a41086a200341c0016a41086a290300370300200320032903c00137039006200341f0036a20034190066a109b0720034188056a20032802f003220120032802f80310b40520034188056a41086a2903002104200329038805211b200328029805210220034190066a2003419c056a41f40010e9081a20024102460d02200341d8026a20034190066a41f40010e9081a024020032802f403450d002001102e0b200341e0016a200341d8026a41f40010e9081a20032004370388042003201b37038004200320023602900420034194046a200341e0016a41f40010e9081a200341d8026a41186a2201200341d0036a41186a290300370300200341d8026a41106a2218200341d0036a41106a290300370300200341d8026a41086a2217200341d0036a41086a290300370300200320032903d0033703d80241002102200328029804210520034180046a41206a28020022060e020504030b20180d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b200341023a00b0010c150b024020032802f403450d002001102e0b200341b0016a410310980720032d00b0014106460d0620032902b40121040c140b410021022006210103402001410176221720026a2118201820022005201841306c6a200341d8026a412010ec084101481b2102200120176b220141014b0d000b0b2005200241306c6a2201200341d8026a412010ec082218450d0220034188056a41186a200341d8026a41186a29030037030020034188056a41106a200341d8026a41106a29030037030020034188056a41086a200341d8026a41086a290300370300200320032903d8023703880520034188056a2101200620022018411f766a22184f0d01201820061045000b20034188056a41186a200129030037030020034188056a41106a201829030037030020034188056a41086a2017290300370300200320032903d802370388054100211820034188056a21010b0240024020062003419c046a280200470d00200641016a22022006490d10200641017422172002201720024b1b22024104200241044b1bad42307e2204422088a74541037421022004a721170240024020060d0020034100360290060c010b20034190066a41086a410836020020032005360290062003200641306c360294060b200341e0016a2017200220034190066a107d200341e8016a280200210220032802e0014101460d01200320032802e4012205360298042003200241306e36029c040b2005201841306c6a220241306a2002200620186b41306c10ea081a200141086a2903002104200141106a290300211b200141186a290300211c2001290300211d200241286a20193703002002201a370320200241186a201c370300200241106a201b370300200241086a20043703002002201d3703002003200641016a3602a0040c020b2002450d0e0c0f0b200620024d0d0320032901da02210420032901e202211b20032801ea02211820032f01ee02211720032903f002211c200120032f01d8023b01002005200241306c6a2202201a3703202002201c370318200220173b0116200220183601122002201b37010a20022004370102200241286a20193703000b20034180046a41186a2117200341a8066a2201420037030020034190066a41106a2202420037030020034190066a41086a221842003703002003420037039006200341e0016a418ef9c00041101081022018200341e0016a41086a2205290000370300200320032900e00137039006200341e0016a41c7c3cb00410710810220012005290000370300200220032900e00137030020034188056a20034190066a10f102200329028c05210420032003280288052201410820011b221836029005200320183602880520032004420020011b22043e028c05200320182004422088a74106746a3602940520034190066a20034188056a10c00120032003280290062201360288052003200120032802980622184105746a36028c050240024020180d00410021180c010b2003200141206a36028805200121180b200320183602e0012017200341e0016a20034188056a10bb01024020032802940641ffffff3f71450d002001102e0b200341a8066a420037030020034190066a41106a420037030020034190066a41086a220142003703002003420037039006200341e0016a418ef9c00041101081022001200341e0016a41086a2218290000370300200320032900e00137039006200341e0016a41c7c3cb004107108102200241086a2018290000370000200220032900e00137000020034188056a20034190066a10f102200329028c05210420032003280288052201410820011b221836029005200320183602880520032004420020011b22043e028c05200320182004422088a74106746a3602940520034190066a20034188056a10c0012003280298062101024020032802940641ffffff3f71450d00200328029006102e0b024020032802a004200141016a410176490d002003280290044101460d00200341a8066a4200370300200341a0066a420037030020034190066a41086a220142003703002003420037039006200341e0016a41d9fcc60041061081022001200341e0016a41086a2218290000370300200320032900e00137039006200341e0016a4180f4cb004106108102200241086a2018290000370000200220032900e001370000200341286a20034190066a4120108e0220034101360290042003200328022c41c0f0006a41c0f00020032802281b3602940420032903c001210420032903c801211920032903d001211a200341a9056a20032903d801370000200341a1056a201a37000020034199056a201937000020034191056a200437000020034188056a41086a41013a0000200341163a00880520034188056a10fe010b20034188056a20034180046a41880110e9081a20034190066a200341c0016a109a07200328029006220220032802980620034188056a10bb050240200328029406450d002002102e0b0240200341a4056a2802002202450d00200241306c450d0020032802a005102e0b200341063a00b0010b20004200370308200020032800a901360019200041186a41003a00002000411c6a200341ac016a280000360000200042003703000c140b200141196a290000211d200141186a2d0000211e200141176a2d0000211f200141156a2f00002120200141146a2d00002121200141136a2d00002122200141116a2f00002123200141106a2d000021242001410f6a2d000021252001410d6a2f000021262001410c6a2d000021272001410b6a2d00002128200141096a2f00002129200141086a2d0000212a200141076a2d0000212b200141056a2f0000212c200141046a2d0000212d200141036a2d0000212e20022d0001211720022d0000211820012f0001212f200228022822022002280200417f6a2201360200024002400240024020180d00024020010d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b201741ff01714101470d012003201d3703a8062003201e3a00a7062003201f3a00a606200320203b01a406200320213a00a306200320223a00a206200320233b01a006200320243a009f06200320253a009e06200320263b019c06200320273a009b06200320283a009a06200320293b0198062003202a3a0097062003202b3a0096062003202c3b0194062003202d3a0093062003202e3a0092062003202f3b019006200341d0036a20034190066a109b0720034188056a20032802d003220120032802d80310b40520034190056a29030021042003290388052119200328029805210220034190066a2003419c056a41f40010e9081a20024102460d02200341d8026a20034190066a41f40010e9081a024020032802d403450d002001102e0b200341e0016a200341d8026a41f40010e9081a20032004370388042003201937038004200320023602900420034194046a200341e0016a41f40010e9081a20024101470d06200341a8066a22014200370300200341a0066a2202420037030020034190066a41086a221842003703002003420037039006200341e0016a41d9fcc60041061081022018200341e0016a41086a2217290000370300200320032900e00137039006200341e0016a4180f4cb00410610810220012017290000370300200220032900e001370300200341f0006a20034190066a4120108e022003280274410020032802701b2003280294044f0d03200341f0036a41061098070c070b20010d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b200341023a00f0030c070b024020032802d403450d002001102e0b200341f0036a41031098070c050b20034188056a200341a4046a109907200328028805220120032802900510ff010240200328028c05450d002001102e0b2003201d3703a0052003201e3a009f052003201f3a009e05200320203b019c05200320213a009b05200320223a009a05200320233b019805200320243a009705200320253a009605200320263b019405200320273a009305200320283a009205200320293b0190052003202a3a008f052003202b3a008e052003202c3b018c052003202d3a008b052003202e3a008a052003202f3b01880520034190066a20034188056a109b07200328029006220120032802980610ff010240200328029406450d002001102e0b20034188056a20034180046a41880110e9081a200341c0016a41086a20034188056a41206a280200360200200320032903a0053703c001200341a8066a420037030020034190066a41106a420037030020034190066a41086a220142003703002003420037039006200341e0016a418ef9c00041101081022001200341e0016a41086a2218290000370300200320032900e00137039006200341e0016a41c7c3cb004107108102200241086a2018290000370000200220032900e001370000200341d8026a20034190066a10f10220032902dc022104200320032802d8022202410820021b220136029806200320013602900620032004420020021b22043e029406200320012004422088a74106746a36029c06200341d8026a20034190066a10c001200320032802d8022202360290062003200220032802e00222014105746a360294060240024020010d00410021010c010b2003200241206a36029006200221010b200320013602e001200341c0016a200341e0016a20034190066a10bb01024020032802dc0241ffffff3f71450d002002102e0b20032802c001211302400240024020032802c801221641144b0d00201641014d0d0a20132016417f6a221841306c6a2107410021170340201620182202417f6a2218490d030240201620186b22094102490d002013200241306c6a220241206a22052903002013201841306c6a220141206a2206290300221a5a200241286a22082903002219200141286a220a29030022045a20192004511b0d0020034190066a41186a220b200141186a220c29030037030020034190066a41106a220d200141106a220e29030037030020034190066a41086a220f200141086a22102903003703002003200129030037039006200120022903003703002010200241086a290300370300200e200241106a290300370300200c200241186a29030037030020062005290300370300200a2008290300370300024020094103490d002017417f6a210841002101200721020340200241d0006a2205290300201a5a200241d8006a2206290300221920045a20192004511b0d0120082001460d05200241286a2006290300370300200241206a2005290300370300200241186a200241c8006a290300370300200241106a200241c0006a290300370300200241086a200241386a2903003703002002200241306a22052903003703002005210220172001417f6a2201470d000b200521020b2002201a3703202002200329039006370300200241286a2004370300200241186a200b290300370300200241106a200d290300370300200241086a200f2903003703000b200741506a21072017417f6a211720180d000c0b0b0b2016410176ad42307e2204422088a70d0c2004a72230417f4c0d0c2030102c2231450d0d201341506a2132201341907f6a21334104210c410021344100210a20162110034020102107410021104101210602402007417f6a2217450d0002400240024002400240024002402013201741306c6a220241206a290300200741306c220820136a41406a2201290300221954200241286a290300221a200141086a290300220454201a2004511b0d002007417e6a2106203320086a210241002110410021010340024020062001470d00200721060c090b20192002290300221b5a21182004200241086a290300221a5121172004201a5a2105200241506a2102200141016a2101201b2119201a21042018200520171b0d000b200141016a21062001417f7320076a21170c010b203320086a210202400340024020174101470d00410021170c020b20192002290300221b5421012004200241086a290300221a5121182004201a542105200241506a21022017417f6a2117201b2119201a21042001200520181b0d000b0b20072017490d01200720164b0d02200720176b22064101762218450d00203220086a21022013201741306c6a2101034020034190066a41286a2205200141286a220829030037030020034190066a41206a2209200141206a220b29030037030020034190066a41186a220d200141186a220e29030037030020034190066a41106a220f200141106a221029030037030020034190066a41086a2211200141086a22122903003703002003200129030037039006200241086a22142903002104200241106a22152903002119200241186a2235290300211a200241206a2236290300211b200241286a2237290300211c200120022903003703002008201c370300200b201b370300200e201a370300201020193703002012200437030020372005290300370300203620092903003703002035200d2903003703002015200f290300370300201420112903003703002002200329039006370300200241506a2102200141306a21012018417f6a22180d000b0b024020170d00201721100c060b0240200641094d0d00201721100c060b200720164b0d03201720076b21182013201741306c6a2108034020072017417f6a2210490d050240200720106b22064102490d002013201741306c6a220241206a22172903002013201041306c6a220141206a2205290300221a5a200241286a22092903002219200141286a220b29030022045a20192004511b0d0020034190066a41186a220d200141186a220e29030037030020034190066a41106a220f200141106a221129030037030020034190066a41086a2212200141086a22142903003703002003200129030037039006200120022903003703002014200241086a2903003703002011200241106a290300370300200e200241186a29030037030020052017290300370300200b2009290300370300024020064103490d0041012101200821020340200241d0006a2217290300201a5a200241d8006a2205290300221920045a20192004511b0d01201820016a4101460d06200241286a2005290300370300200241206a2017290300370300200241186a200241c8006a290300370300200241106a200241c0006a290300370300200241086a200241386a2903003703002002200241306a2217290300370300201721022018200141016a22016a0d000b201721020b2002201a3703202002200329039006370300200241286a2004370300200241186a200d290300370300200241106a200f290300370300200241086a20122903003703000b2010450d06200841506a21082018417f6a2118201021172006410a4f0d060c000b0b2017200741e4d1cc001057000b2007201641e4d1cc00104d000b2001200641d4d1cc00103c000b20072017417f6a2210490d002007201641f4d1cc00104d000b2010200741f4d1cc001057000b0240200a2034470d00203441016a22022034490d0e203441017422012002200120024b1b22024104200241044b1b220241ffffffff01712002464102742101200241037421020240024020340d0020034100360290060c010b20034104360298062003200c3602900620032034410374360294060b200341d8026a2002200120034190066a107d20032802e0022102024020032802d8024101470d0020020d100c0f0b20032802dc02210c200241037621340b200c200a4103746a2202200636020420022010360200200a41016a2211210a024020114102490d0002400240024003400240024002400240200c2011220a417f6a22114103746a2202280200450d00200a410374200c6a220541746a2802002217200228020422014d0d00200a41024d0d08200c200a417d6a22024103746a2802042218200120176a4d0d01200a41034d0d08200541646a280200201820176a4b0d080c010b200a4103490d0120022802042101200c200a417d6a22024103746a28020421180b20182001490d010b200a417e6a21020b0240200a200241016a22124d0d00200a20024d0d02200c20024103746a220d2802042214200d2802006a2202200c20124103746a220e280200220f490d03200220164b0d04200d41046a21152013200f41306c6a2209200e280204220b41306c22016a2117200241306c2118024002402002200f6b2206200b6b2202200b490d0020312009200110e908220820016a210502400240200b4101480d002006200b4a0d010b20092102200821010c020b201320186a210720082101200921020340200220172001201741206a290300200141206a29030054201741286a2903002204200141286a29030022195420042019511b22061b2218290300370300200241086a201841086a290300370300200241106a201841106a290300370300200241186a201841186a290300370300200241206a201841206a290300370300200241286a201841286a2903003703002001200141306a20061b2101200241306a2102201741306a201720061b221720074f0d02200520014b0d000c020b0b20312017200241306c220110e908220620016a210502400240200b4101480d00200241014e0d010b20172102200621010c010b203220186a21182017210203402018200241506a2207200541506a2208200541706a2201290300200241706a221729030054200141086a2903002204201741086a29030022195420042019511b22171b2201290300370300201841086a200141086a290300370300201841106a200141106a290300370300201841186a200141186a290300370300201841206a200141206a290300370300201841286a200141286a2903003703002005200820171b2105024020092007200220171b2202490d00200621010c020b201841506a21182006210120062005490d000b0b20022001200520016b221820184130706b10e9081a20152014200b6a360200200d200f360200200e200e41086a200a2012417f736a41037410ea081a4101210a201141014d0d050c010b0b2012200a4184d2cc00103c000b2002200a4194d2cc00103c000b200f200241a4d2cc001057000b2002201641a4d2cc00104d000b2010450d090c000b0b410120016b200941d4d1cc00103c000b2018201641c4d1cc001056000b2002200641ecd3c800103c000b200341d0036a41186a2218200141196a290000370300200341d0036a41106a2217200141116a290000370300200341d0036a41086a2205200141096a290000370300200320012900013703d0032002280228210102400240024002400240024002400240024020022d00000e0400010203020b20022d0001210220012001280200417f6a2206360200024020060d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22062006280200417f6a220636020020060d002001102e0b200241ff0171450d024110102c2202450d11200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1120014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a221836020020180d012002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22182018280200417f6a221836020020180d012002102e0c010b200241046a2d00002106200241086a28020021072002410c6a280200210820012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0240200641ff01710d00200741017420084b0d020b4110102c2202450d10200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1020014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a221836020020180d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22182018280200417f6a221836020020180d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b200341023a00f0030c010b20034188056a41186a201829030037030020034188056a41106a201729030037030020034188056a41086a2005290300370300200320032903d00337038805200341c0016a20034188056a109b0720034188056a20032802c001220220032802c801220110b405024020032802980522184102460d002002200110ff0120034190056a2903002104200329038805211920034190066a20034188056a41146a41f40010e9081a200341d8026a20034190066a41f40010e9081a024020032802c401450d002002102e0b200341e0016a200341d8026a41f40010e9081a20032018360290042003201937038004200320043703880420034180046a41146a200341e0016a41f40010e9081a2019200484500d0320034188016a200341e4046a2019200410cb022003290388012104200320034188016a41086a290300221937039005200320043703880520042019844200520d02200320034188056a3602900620034190066a10cc020c030b20034190066a2003419c056a41f40010e9081a024020032802c401450d002002102e0b200341f0036a410310980720032d00f0034106460d0320032902f40321040b20032802f003210220002004370024200041206a2002360000200041186a41003a000020004200370308420121040c030b200342f0f2bda1a7ee9cb9f9003703900620034188056a20034190066a10cd02200341f8006a20034188056a2004201910fd01200341a0066a200341f8006a41086a290300221b20197d2003290378221a200454ad7d2019201b7d2004201a54ad7d201a200456201b201956201b2019511b22021b3703002003201a20047d2004201a7d20021b3703980620032002ad3703900620034190066a41086a21010240024020020d00200320013602d802200341d8026a10cc020c010b200320013602d802200341d8026a10ce020b200341a0056a201937030020034198056a200437030020034190056a41063a00002003410e3a00880520034188056a10fe010b20034188056a200341a4046a109907200328028805220220032802900510ff010240200328028c05450d002002102e0b20034180046a41086a2903002104200329038004211920034188056a41086a41043a000020034191056a20032903d00337000020034199056a200341d0036a41086a290300370000200341a1056a200341e0036a290300370000200341a9056a200341e8036a290300370000200341b1056a20032902e404370000200341b9056a200341ec046a290200370000200341c1056a200341f4046a290200370000200341c9056a200341fc046a290200370000200341163a008805200341e0056a2004370300200341d8056a201937030020034188056a10fe0102402003419c046a2802002202450d00200241306c450d00200328029804102e0b200341063a00f0030b42002104200042003703082000200328008805360019200041186a41003a00002000411c6a2003418b056a2800003600000b200020043703000c110b200341f0036a41051098070b2003419c046a2802002202450d00200241306c450d00200328029804102e0b20032d00f0034106460d0320032902f40321040b20032802f003210220002004370024200041206a2002360000200041186a41003a000020004200370308200042013703000c0d0b0240203441ffffffff0171450d00200c102e0b2030413070210220304130490d0020302002460d002031102e0b200342f0f2bda1a7ee9cb9f90037039006200341e0016a20034190066a10cd02200342f0f2bda1a7ee9cb9f90037039006200341d8026a20034190066a10cd02200341d0036a200341d8026a10c80220034190066a20032802d003220220032802d80310c9022003290390062104200341a0066a2903002119200329039806211a024020032802d403450d002002102e0b20032802c8012202200241017622014d0d0120032802c001200141306c6a2202290320221b4200201a4200200442015122011b22044280b8d0df5a7c221a201a2004562019420020011b221920044280c8afa02554ad7d221a201956200442ffc7afa025561b22011b221c56200241286a29030022044200201a20011b22195620042019511b21020240200329038805221a20034190056a290300223884500d00200341e0006a200341ec056a201a203810fb010b2019200420021b2119201c201b20021b2104024020032d008c06450d0020034188056a41e4006a2202200341cc056a412010ec08450d00200341d0006a2004201942e400420010e608200341c0006a2004201942e400420010e708200341306a2003290340200341c0006a41086a2903004214420010e80820034190066a200341e0016a20022003290330221b2003280250220141ffff037141056e200141146c41fcff037141e4007041324b6aad42ff01837c221a200341306a41086a290300201a201b54ad7c221b410010ca022019201b7d2004201a54ad7d21192004201a7d21040b200341d8026a200341e0016a200341cc056a20042019410010ca02200341b1066a201d370000200341b0066a201e3a0000200341af066a201f3a0000200341ad066a20203b0000200341ac066a20213a0000200341ab066a20223a0000200341a9066a20233b0000200341a8066a20243a0000200341a7066a20253a0000200341a5066a20263b0000200341a4066a20273a0000200341a3066a20283a0000200341a1066a20293b0000200341a0066a202a3a00002003419f066a202b3a00002003419d066a202c3b00002003419c066a202d3a00002003419b066a202e3a000020034199066a202f3b000020034198066a41023a0000200341163a009006200341e0066a2004370300200341e8066a2019370300200341d1066a200341e4056a290200370000200341c9066a200341dc056a290200370000200341c1066a200341d4056a290200370000200341b9066a20032902cc0537000020034190066a10fe01024020032802c4012202450d00200241306c450d0020032802c001102e0b200341063a00f0030b20004200370308200020032800b001360019200041186a41003a00002000411c6a200341b3016a280000360000200042003703000c0a0b2001200241fcd3c800103c000b1038000b1036000b20032802b001210220002004370024200041206a2002360000200041186a41003a000020004200370308200042013703000c060b024020032802c401450d0020032802c001102e0b20032d00f0034106460d0020032802f0032102200020032902f403370024200041206a2002360000200041186a41003a000020004200370308200042013703000c050b20004200370308200020032800b001360019200041186a41003a00002000411c6a200341b3016a280000360000200042003703000c040b20032d00b0014106460d0120032902b40121040b20032802b001210220002004370024200041206a2002360000200041186a41003a000020004200370308200042013703000c020b20004200370308200020032800a901360019200041186a41003a00002000411c6a200341ac016a280000360000200042003703000c010b20004200370308200020032800b001360019200041186a41003a00002000411c6a200341b3016a280000360000200042003703000b20034190076a24000b8e7906097f017e0b7f037e037f017e230041c0026b22032400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e080001020304050607000b200341d4016a4101360200200342013702c4012003419cc3cb003602c0012003410436029c0120034194c3cb0036029801200320034198016a3602d001200341c0016a41a4c3cb001044000b20034198016a41186a200141196a29000037030020034198016a41106a200141116a29000037030020034198016a41086a200141096a29000037030020032001290001370398012002410e6a2f010021042002410d6a2d000021052002410c6a2d000021062002410a6a2f01002107200241096a2d00002108200241086a2d00002109200241046a2d0000210a20022802282101024020022d0000220b0d002002411a6a290100210c200241196a2d0000210b200241186a2d0000210d200241166a2f0100210e200241156a2d0000210f200241146a2d00002110200241126a2f01002111200241116a2d00002112200241106a2d00002113200241066a2f01002114200241056a2d00002115200241026a2f0100211620022d0001210220012001280200417f6a2217360200024020170d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22172017280200417f6a221736020020170d002001102e0b2003200c3703d8012003200b3a00d7012003200d3a00d6012003200e3b01d4012003200f3a00d301200320103a00d201200320113b01d001200320123a00cf01200320133a00ce01200320043b01cc01200320053a00cb01200320063a00ca01200320073b01c801200320083a00c701200320093a00c601200320143b01c401200320153a00c3012003200a3a00c201200320163b01c0010240200241ff01710d004103210b0c010b4110102c2202450d18200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1820014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220d3602004100210b200d0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a220d200d280200417f6a220d360200200d0d002002102e0b0240024002400240200b417f6a0e03000102010b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0240200a41ff01710d00200741107420084108747220097241017420044110742005410874722006724b0d020b4110102c2202450d1a200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1a20014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220b360200200b0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a220b200b280200417f6a220b360200200b0d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b410221020c010b200341d8016a22024200370300200341d0016a22014200370300200341c0016a41086a220b4200370300200342003703c001200341c8006a41b4c3cb004113108102200b200341c8006a41086a220a290000370300200320032900483703c001200341c8006a41c7c3cb0041071081022002200a29000037030020012003290048370300200341f8006a200341c0016a1088030240200328027822040d0041002106200341003602302003420137032841012104410021050c170b2003200329027c220c37022c20032004360228200ca721054100210202400240200c422088a722060e021801000b410021022006210103402001410176220a20026a210b200b20022004200b4105746a20034198016a412010ec084101481b21022001200a6b220141014b0d000b0b0240200420024105746a20034198016a412010ec082201450d00200341c0016a41186a20034198016a41186a290300370300200341c0016a41106a20034198016a41106a290300370300200341c0016a41086a20034198016a41086a29030037030020032003290398013703c001200620022001411f766a220b490d08200341c0016a21010c180b0240200541ffffff3f71450d002004102e0b410321020b200041cec3cb00360024200041123b002120004200370308200041286a410d360000200041206a20023a0000200041186a41003a0000200042013703000c180b200341f8006a41186a200141196a290000370300200341f8006a41106a200141116a290000370300200341f8006a41086a200141096a290000370300200320012900013703782002410e6a2f010021042002410d6a2d000021052002410c6a2d000021062002410a6a2f01002107200241096a2d00002108200241086a2d00002109200241046a2d0000210a20022802282101024020022d0000220b0d002002411a6a290100210c200241196a2d0000210b200241186a2d0000210d200241166a2f0100210e200241156a2d0000210f200241146a2d00002110200241126a2f01002111200241116a2d00002112200241106a2d00002113200241066a2f01002114200241056a2d00002115200241026a2f0100211620022d0001210220012001280200417f6a2217360200024020170d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22172017280200417f6a221736020020170d002001102e0b2003200c3703d8012003200b3a00d7012003200d3a00d6012003200e3b01d4012003200f3a00d301200320103a00d201200320113b01d001200320123a00cf01200320133a00ce01200320043b01cc01200320053a00cb01200320063a00ca01200320073b01c801200320083a00c701200320093a00c601200320143b01c401200320153a00c3012003200a3a00c201200320163b01c0010240200241ff01710d004103210b0c010b4110102c2202450d17200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1720014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220d3602004100210b200d0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a220d200d280200417f6a220d360200200d0d002002102e0b0240024002400240200b417f6a0e03000102010b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0240200a41ff01710d00200741107420084108747220097241017420044110742005410874722006724b0d020b4110102c2202450d19200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1920014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220b360200200b0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a220b200b280200417f6a220b360200200b0d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b410221020c010b200341d8016a22024200370300200341d0016a22014200370300200341c0016a41086a220b4200370300200342003703c001200341c8006a41b4c3cb004113108102200b200341c8006a41086a220a290000370300200320032900483703c001200341c8006a41c7c3cb0041071081022002200a2900003703002001200329004837030020034198016a200341c0016a1088030240024020032802980122040d0020034100360210200342013703080c010b2003200329029c01220c37020c20032004360208200ca741ffffff3f71210641002102024002400240200c422088a722050e020201000b410021022005210103402001410176220a20026a210b200b20022004200b4105746a200341f8006a412010ec084101481b21022001200a6b220141014b0d000b0b200420024105746a200341f8006a412010ec080d00200520024d0d09200420024105746a2201200141206a20052002417f736a41057410ea081a20032005417f6a2202360210200341c0016a41186a220b4200370300200341c0016a41106a220a4200370300200341c0016a41086a22074200370300200342003703c00120034198016a41b4c3cb004113108102200720034198016a41086a220129000037030020032003290098013703c00120034198016a41c7c3cb004107108102200b2001290000370300200a200329009801370300200341c0016a200341086a109a03200b200341f8006a41186a290300370300200a200341f8006a41106a2903003703002007200341f8006a41086a290300370300200320032903783703c001200341c0016a41012004200210840820034198016a41186a220a420037030020034198016a41106a22074200370300200142003703002003420037039801200341c8006a41b4c3cb0041131081022001200341c8006a41086a220b2900003703002003200329004837039801200341c8006a41dbc3cb004105108102200a200b29000037030020072003290048370300200341c0016a20034198016a412010f40220032d00c0012108200341c8006a41186a2209200341d9016a290000370300200341c8006a41106a220d200341d1016a290000370300200b200341c9016a290000370300200320032900c101370348024020084101470d00200341286a41186a2009290300220c370300200341286a41106a200d2903002218370300200341286a41086a200b290300221937030020032003290348221a370328200a200c37030020072018370300200120193703002003201a370398014100210102400240024002402005417f6a0e020201000b4100210103402002410176220a20016a210b200b20012004200b4105746a20034198016a412010ec084101481b21012002200a6b220241014b0d000b0b200420014105746a20034198016a412010ec08450d010b200341e0006a22024200370300200341d8006a22014200370300200341c8006a41086a220b420037030020034200370348200341c0016a41b4c3cb004113108102200b200341c0016a41086a220a290000370300200320032900c001370348200341c0016a41dbc3cb0041051081022002200a290000370300200120032900c001370300200341c8006a412010ff010c010b200341d9016a200341b0016a290300370000200341d1016a200341a8016a290300370000200341c9016a200341a0016a29030037000020032003290398013700c101200341013a00c001200341c0016a1086080b2003418d023b01c001200341c0016a10fe0102402006450d002004102e0b200041186a41003a000020004200370308200020032800683600192000411c6a200341eb006a280000360000200042003703000c1a0b2006450d002004102e0b410321020b200041e0c3cb0036002420004192023b002120004200370308200041286a4109360000200041206a20023a0000200041186a41003a0000200042013703000c170b200341086a41186a200141196a290000370300200341086a41106a200141116a290000370300200341086a41086a200141096a29000037030020032001290001370308200341f8006a41186a200141396a290000370300200341f8006a41106a200141316a290000370300200341f8006a41086a200141296a2900003703002003200141216a2900003703782002410e6a2f010021042002410d6a2d000021052002410c6a2d000021062002410a6a2f01002107200241096a2d00002108200241086a2d00002109200241046a2d0000210a20022802282101024020022d0000220b0d002002411a6a290100210c200241196a2d0000210b200241186a2d0000210d200241166a2f0100210e200241156a2d0000210f200241146a2d00002110200241126a2f01002111200241116a2d00002112200241106a2d00002113200241066a2f01002114200241056a2d00002115200241026a2f0100211620022d0001210220012001280200417f6a2217360200024020170d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22172017280200417f6a221736020020170d002001102e0b2003200c3703d8012003200b3a00d7012003200d3a00d6012003200e3b01d4012003200f3a00d301200320103a00d201200320113b01d001200320123a00cf01200320133a00ce01200320043b01cc01200320053a00cb01200320063a00ca01200320073b01c801200320083a00c701200320093a00c601200320143b01c401200320153a00c3012003200a3a00c201200320163b01c0010240200241ff01710d004103210b0c010b4110102c2202450d16200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1620014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220d3602004100210b200d0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a220d200d280200417f6a220d360200200d0d002002102e0b024002400240200b417f6a0e03000102010b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0240200a41ff01710d00200741107420084108747220097241017420044110742005410874722006724b0d020b4110102c2202450d17200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1720014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220b360200200b0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a220b200b280200417f6a220b360200200b0d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b410221020c100b200341086a200341f8006a412010ec08450d11200341d8016a22024200370300200341d0016a22014200370300200341c0016a41086a220b4200370300200342003703c001200341c8006a41b4c3cb004113108102200b200341c8006a41086a220a290000370300200320032900483703c001200341c8006a41c7c3cb0041071081022002200a2900003703002001200329004837030020034198016a200341c0016a108803024020032802980122040d0020034100360270200342013703684109210641e0c3cb002107410121050c0f0b2003200329029c01220c37026c2003200436026841012105200ca741ffffff3f7121094100210241e0c3cb0021074109210602400240200c422088a722080e020f01000b410021022008210103402001410176220a20026a210b200b20022004200b4105746a200341086a412010ec084101481b21022001200a6b220141014b0d000b0b200420024105746a200341086a412010ec080d0d4100210541002101024020080e02110d000b410021012008210b0340200b410176220620016a210a200a20012004200a4105746a200341f8006a412010ec084101481b2101200b20066b220b41014b0d000c0d0b0b2002410e6a2f010021072002410d6a2d000021082002410c6a2d000021092002410a6a2f0100210d200241096a2d0000210e200241086a2d0000210f200241046a2d000021042001410c6a2802002105200141086a2802002106200141046a280200210a20022802282101024020022d0000220b0d002002411a6a290100210c200241196a2d0000210b200241186a2d00002110200241166a2f01002111200241156a2d00002112200241146a2d00002113200241126a2f01002114200241116a2d00002115200241106a2d00002116200241066a2f01002117200241056a2d0000211b200241026a2f0100211c20022d0001210220012001280200417f6a221d3602000240201d0d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a221d201d280200417f6a221d360200201d0d002001102e0b2003200c3703d8012003200b3a00d701200320103a00d601200320113b01d401200320123a00d301200320133a00d201200320143b01d001200320153a00cf01200320163a00ce01200320073b01cc01200320083a00cb01200320093a00ca012003200d3b01c8012003200e3a00c7012003200f3a00c601200320173b01c4012003201b3a00c301200320043a00c2012003201c3b01c0010240200241ff01710d004103210b0c010b4110102c2202450d15200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1520014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a22103602004100210b20100d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22102010280200417f6a221036020020100d002002102e0b024002400240200b417f6a0e03000102010b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0240200441ff01710d00200d411074200e41087472200f7241017420074110742008410874722009724b0d020b4110102c2202450d16200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1620014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220b360200200b0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a220b200b280200417f6a220b360200200b0d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0240200641ffffff3f71450d00200a102e0b20004200370308200041206a41023a0000200041186a41003a0000200042013703000c160b200a200510fc02200341c0016a41186a22014200370300200341c0016a41106a220b4200370300200341c0016a41086a22044200370300200342003703c001200341c8006a41b4c3cb0041131081022004200341c8006a41086a2202290000370300200320032900483703c001200341c8006a41c7c3cb00410710810220012002290000370300200b200329004837030020034198016a200341c0016a108803200a20052003280298012201410120011b2208200329029c01420020011b220c422088a710fc0720034198016a41186a2201420037030020034198016a41106a220b420037030020034198016a41086a220442003703002003420037039801200341c8006a41b4c3cb004113108102200420022900003703002003200329004837039801200341c8006a41dbc3cb00410510810220012002290000370300200b2003290048370300200341c0016a20034198016a412010f40220032d00c0012107200341c8006a41186a2209200341d9016a290000370300200341c8006a41106a220d200341d1016a2900003703002002200341c9016a290000370300200320032900c101370348024020074101470d00200341286a41186a20092903002218370300200341286a41106a200d2903002219370300200341286a41086a2002290300221a37030020032003290348221e37032820012018370300200b20193703002004201a3703002003201e3703980141002102024002400240024020050e020201000b410021022005210103402001410176220420026a210b200b2002200a200b4105746a20034198016a412010ec084101481b2102200120046b220141014b0d000b0b200a20024105746a20034198016a412010ec08450d010b200341e0006a22024200370300200341d8006a22014200370300200341c8006a41086a220b420037030020034200370348200341c0016a41b4c3cb004113108102200b200341c0016a41086a2204290000370300200320032900c001370348200341c0016a41dbc3cb00410510810220022004290000370300200120032900c001370300200341c8006a412010ff010c010b200341d9016a200341b0016a290300370000200341d1016a200341a8016a290300370000200341c9016a200341a0016a29030037000020032003290398013700c101200341013a00c001200341c0016a1086080b2005ad4220862006ad8421180240200c42ffffff3f83500d002008102e0b2003201837029c012003200a36029801200341c8006a41186a22024200370300200341d8006a22014200370300200341c8006a41086a220b420037030020034200370348200341c0016a41b4c3cb004113108102200b200341c0016a41086a2204290000370300200320032900c001370348200341c0016a41c7c3cb00410710810220022004290000370300200120032900c001370300200341c8006a20034198016a109a030240200641ffffff3f71450d00200a102e0b2003418d063b01c001200341c0016a10fe01200041186a41003a000020004200370308200020032800783600192000411c6a200341fb006a280000360000200042003703000c150b200341086a41186a200141196a290000370300200341086a41106a200141116a290000370300200341086a41086a200141096a29000037030020032001290001370308200341c0016a41286a200241286a280200360200200341c0016a41206a200241206a290200370300200341c0016a41186a200241186a290200370300200341c0016a41106a200241106a290200370300200341c0016a41086a200241086a290200370300200320022902003703c00120034198016a200341c0016a10c102200341286a41086a220220034198016a41096a290000370300200341286a41106a220120034198016a41116a290000370300200341286a41186a220b20034198016a41196a2900003703002003200329009901370328024020032d0098014101460d00200341f8006a41186a200b290300370300200341f8006a41106a2001290300370300200341f8006a41086a200229030037030020032003290328370378200341f8006a200341086a412010ec08450d08200341d8016a22024200370300200341d0016a22014200370300200341c0016a41086a220b4200370300200342003703c001200341c8006a41b4c3cb004113108102200b200341c8006a41086a220a290000370300200320032900483703c001200341c8006a41c7c3cb0041071081022002200a2900003703002001200329004837030020034198016a200341c0016a108803024020032802980122040d0020034100360230200342013703284109210641e0c3cb00210741012105410321020c0a0b2003200329029c01220c37022c2003200436022841012105200ca741ffffff3f7121094100210241e0c3cb0021074109210602400240200c422088a722080e020801000b410021022008210103402001410176220a20026a210b200b20022004200b4105746a200341f8006a412010ec084101481b21022001200a6b220141014b0d000b0b200420024105746a200341f8006a412010ec080d064100210541002101024020080e020806000b410021012008210b0340200b410176220620016a210a200a20012004200a4105746a200341086a412010ec084101481b2101200b20066b220b41014b0d000c060b0b410221020c080b20034198016a41186a200141196a29000037030020034198016a41106a200141116a29000037030020034198016a41086a200141096a29000037030020032001290001370398012002410e6a2f010021042002410d6a2d000021052002410c6a2d000021062002410a6a2f01002107200241096a2d00002108200241086a2d00002109200241046a2d0000210a20022802282101024020022d0000220b0d002002411a6a290100210c200241196a2d0000210b200241186a2d0000210d200241166a2f0100210e200241156a2d0000210f200241146a2d00002110200241126a2f01002111200241116a2d00002112200241106a2d00002113200241066a2f01002114200241056a2d00002115200241026a2f0100211620022d0001210220012001280200417f6a2217360200024020170d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22172017280200417f6a221736020020170d002001102e0b2003200c3701d8012003200b3a00d7012003200d3a00d6012003200e3b01d4012003200f3a00d301200320103a00d201200320113b01d001200320123a00cf01200320133a00ce01200320043b01cc01200320053a00cb01200320063a00ca01200320073b01c801200320083a00c701200320093a00c601200320143b01c401200320153a00c3012003200a3a00c201200320163b01c0010240200241ff01710d004103210b0c010b4110102c2202450d13200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1320014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220d3602004100210b200d0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a220d200d280200417f6a220d360200200d0d002002102e0b0240024002400240200b417f6a0e03000102010b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0240200a41ff01710d00200741107420084108747220097241017420044110742005410874722006724b0d020b4110102c2202450d15200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1520014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220b360200200b0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a220b200b280200417f6a220b360200200b0d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b410221020c010b200341d8016a22024200370300200341d0016a22014200370300200341c0016a41086a220b4200370300200342003703c001200341c8006a41b4c3cb004113108102200b200341c8006a41086a220a290000370300200320032900483703c001200341c8006a41c7c3cb0041071081022002200a29000037030020012003290048370300200341f8006a200341c0016a10880320032802782201410120011b210441002102024002400240200329027c420020011b220c422088a722010e020201000b4100210203402001410176220a20026a210b200b20022004200b4105746a20034198016a412010ec084101481b21022001200a6b220141014b0d000b0b200420024105746a20034198016a412010ec080d000240200c42ffffff3f83500d002004102e0b200341e0006a22024200370300200341d8006a22014200370300200341c8006a41086a220b420037030020034200370348200341c0016a41b4c3cb004113108102200b200341c0016a41086a220a290000370300200320032900c001370348200341c0016a41dbc3cb0041051081022002200a290000370300200120032900c0013703004120102c2202450d14200342203702c401200320023602c001200341c0016a20034198016a41201074200341c8006a412020032802c001220220032802c80110b201024020032802c401450d002002102e0b200341d9016a20034198016a41186a290300370000200341d1016a200341a8016a290300370000200341c9016a200341a0016a29030037000020032003290398013700c101200341013a00c001200341c0016a108608200041186a41003a000020004200370308200020032800283600192000411c6a2003412b6a280000360000200042003703000c150b0240200c42ffffff3f83500d002004102e0b410321020b200041e0c3cb0036002420004192023b002120004200370308200041286a4109360000200041206a20023a0000200041186a41003a0000200042013703000c130b2002410e6a2f010021042002410d6a2d000021052002410c6a2d000021062002410a6a2f01002107200241096a2d00002108200241086a2d00002109200241046a2d0000210a20022802282101024020022d0000220b0d002002411a6a290100210c200241196a2d0000210b200241186a2d0000210d200241166a2f0100210e200241156a2d0000210f200241146a2d00002110200241126a2f01002111200241116a2d00002112200241106a2d00002113200241066a2f01002114200241056a2d00002115200241026a2f0100211620022d0001210220012001280200417f6a2217360200024020170d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22172017280200417f6a221736020020170d002001102e0b2003200c3701d8012003200b3a00d7012003200d3a00d6012003200e3b01d4012003200f3a00d301200320103a00d201200320113b01d001200320123a00cf01200320133a00ce01200320043b01cc01200320053a00cb01200320063a00ca01200320073b01c801200320083a00c701200320093a00c601200320143b01c401200320153a00c3012003200a3a00c201200320163b01c0010240200241ff01710d004103210b0c010b4110102c2202450d12200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1220014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220d3602004100210b200d0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a220d200d280200417f6a220d360200200d0d002002102e0b0240024002400240200b417f6a0e03000102010b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0240200a41ff01710d00200741107420084108747220097241017420044110742005410874722006724b0d020b4110102c2202450d14200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1420014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220b360200200b0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a220b200b280200417f6a220b360200200b0d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b20004200370308200041206a41023a0000200041186a41003a00004201210c0c010b4200210c200341c8006a41186a22024200370300200341d8006a22014200370300200341c8006a41086a220b420037030020034200370348200341c0016a41b4c3cb004113108102200b200341c0016a41086a220a290000370300200320032900c001370348200341c0016a41dbc3cb0041051081022002200a290000370300200120032900c001370300200341c8006a412010ff01200341003a00c001200341c0016a108608200041186a41003a000020004200370308200020032800c0013600192000411c6a200341c3016a2800003600000b2000200c3703000c120b200b20061045000b200220051046000b200420014105746a200341086a412010ec080d0141cec3cb002107410d21060b02402009450d002004102e0b410321020c020b20034198016a41186a2201200341086a41186a29030037030020034198016a41106a220b200341086a41106a29030037030020034198016a41086a220a200341086a41086a2903003703002003200329030837039801200820024d0d02200420024105746a2202200329039801370000200241186a2001290300370000200241106a200b290300370000200241086a200a2903003700002004200810fc02200341c8006a41186a22014200370300200341c8006a41106a22024200370300200341c8006a41086a220b420037030020034200370348200341c0016a41b4c3cb004113108102200b200341c0016a41086a220a290000370300200320032900c001370348200341c0016a41c7c3cb0041071081022001200a290000370300200220032900c001370300200341c8006a200341286a109a03200341c0016a41186a200341f8006a41186a290300370300200341c0016a41106a200341f8006a41106a290300370300200a200341f8006a41086a290300370300200320032903783703c00141012105200341c0016a4101200420081084082001420037030020024200370300200b420037030020034200370348200341c0016a41b4c3cb004113108102200b200a290000370300200320032900c001370348200341c0016a41dbc3cb0041051081022001200a290000370300200220032900c001370300200341c0016a200341c8006a412010f40220032d00c001210a2001200341c0016a41196a2900003703002002200341c0016a41116a290000370300200b200341c0016a41096a290000370300200320032900c10137034802400240200a4101460d0041002105200341003a0098010c010b20034198016a41096a200341d0006a29030037000020034198016a41116a200341d8006a29030037000020034198016a41196a200341e0006a290300370000200341013a00980120032003290348370099010b200341d9016a20034190016a290300370000200341d1016a20034188016a290300370000200341c9016a20034180016a290300370000200320032903783700c101200341013a00c00102402005450d0020034198016a410172200341c0016a410172412010ec080d00200341e0006a4200370300200341d8006a4200370300200341c8006a41086a2201420037030020034200370348200341c0016a41b4c3cb0041131081022001200341c0016a41086a220b290000370300200320032900c001370348200341c0016a41dbc3cb004105108102200241086a200b290000370000200220032900c0013700004120102c2202450d0d200342203702c401200320023602c001200341c0016a200341086a41201074200341c8006a412020032802c001220220032802c80110b201024020032802c401450d002002102e0b200341d9016a200341206a290300370000200341d1016a200341186a290300370000200341c9016a200341106a290300370000200320032903083700c101200341013a00c001200341c0016a1086080b2009450d002004102e0b2003418d083b01c001200341c0016a10fe01200041186a41003a000020004200370308200020032800683600192000411c6a200341eb006a280000360000200042003703000c0c0b20002007360024200020053a0022200041123a002120004200370308200041286a2006360000200041206a20023a0000200041186a41003a0000200042013703000c0b0b2002200841fcc3cb00103c000b200420014105746a200341f8006a412010ec080d0341cec3cb002107410d21060b2009450d002004102e0b410321020b20002007360024200020053a0022200041123a002120004200370308200041286a2006360000200041206a20023a0000200041186a41003a0000200042013703000c060b200341c0016a41186a2201200341f8006a41186a290300370300200341c0016a41106a220b200341f8006a41106a290300370300200341c0016a41086a220a200341f8006a41086a290300370300200320032903783703c001200820024d0d01200420024105746a220220032903c001370000200241186a2001290300370000200241106a200b290300370000200241086a200a2903003700002004200810fc0220014200370300200b4200370300200a4200370300200342003703c00120034198016a41b4c3cb004113108102200a20034198016a41086a220229000037030020032003290098013703c00120034198016a41c7c3cb00410710810220012002290000370300200b200329009801370300200341c0016a200341e8006a109a032001200341086a41186a290300370300200b200341086a41106a290300370300200a200341086a41086a290300370300200320032903083703c001200341c0016a41012004200810840820034198016a41186a220b420037030020034198016a41106a220a4200370300200242003703002003420037039801200341c8006a41b4c3cb0041131081022002200341c8006a41086a22012900003703002003200329004837039801200341c8006a41dbc3cb004105108102200b2001290000370300200a2003290048370300200341c0016a20034198016a412010f40220032d00c0012102200341c8006a41186a200341d9016a290000370300200341c8006a41106a200341d1016a2900003703002001200341c9016a290000370300200320032900c101370348024020024101470d00200341286a41186a200341c8006a41186a220a290300220c370300200341286a41106a200341c8006a41106a22052903002218370300200341286a41086a200341c8006a41086a2206290300221937030020032003290348221a37032820034198016a41186a200c37030020034198016a41106a201837030020034198016a41086a20193703002003201a3703980141002102024002400240024020080e020201000b4100210203402008410176220b20026a210120012002200420014105746a20034198016a412010ec084101481b21022008200b6b220841014b0d000b0b200420024105746a20034198016a412010ec08450d010b200a4200370300200542003703002006420037030020034200370348200341c0016a41b4c3cb0041131081022006200341c0016a41086a2202290000370300200320032900c001370348200341c0016a41dbc3cb004105108102200a2002290000370300200520032900c001370300200341c8006a412010ff010c010b200341d9016a200341b0016a290300370000200341d1016a200341a8016a290300370000200341c9016a200341a0016a29030037000020032003290398013700c101200341013a00c001200341c0016a1086080b2003418d043b01c001200341c0016a10fe012009450d002004102e0b2000420037030820002003280001360019200041186a41003a00002000411c6a200341046a280000360000200042003703000c040b2002200841ecc3cb00103c000b200341c0016a41186a20034198016a41186a290300370300200341c0016a41106a20034198016a41106a290300370300200341c0016a41086a20034198016a41086a29030037030020032003290398013703c0014100210b200341c0016a21010b0240024020062005470d00200541016a22022005490d042005410174220a2002200a20024b1b22024104200241044b1b220241ffffff3f71200246210a200241057421020240024020050d00200341003602780c010b20034180016a4101360200200320043602782003200541057436027c0b200341c8006a2002200a200341f8006a107d200341d0006a280200210220032802484101460d012003200328024c22043602282003200241057636022c0b2004200b4105746a220241206a20022006200b6b41057410ea081a20022001290000370000200241186a200141186a290000370000200241106a200141106a290000370000200241086a200141086a2900003700002003200641016a2201360230200341c8006a41186a220b4200370300200341c8006a41106a220a4200370300200341c8006a41086a2204420037030020034200370348200341c0016a41b4c3cb0041131081022004200341c0016a41086a2202290000370300200320032900c001370348200341c0016a41c7c3cb004107108102200b2002290000370300200a20032900c001370300200341c8006a200341286a109a03200341c0016a41186a20034198016a41186a290300370300200341c0016a41106a20034198016a41106a290300370300200220034198016a41086a29030037030020032003290398013703c00141d4e2cc0041002003280228220220011084082003410d3b01c001200341c0016a10fe010240200328022c41ffffff3f71450d002002102e0b200041186a41003a000020004200370308200020032800083600192000411c6a2003410b6a280000360000200042003703000c020b2002450d020b1036000b200341c0026a24000f0b1038000be33a0b037f017e037f017e047f017e017f037e027f017e0c7f230041d0096b22022400024002400240200128020422034108490d002001280200220429000021052001200341786a22063602042001200441086a22073602002006450d0120072d000021062001200341776a22083602042001200741016a36020002400240024002400240024020060e020001070b20084108490d062007290001210920012003416f6a220a3602042001200741096a36020041002107200241003a00a80820032106200a210b0240024002400340200a2007460d0120024188086a20076a200420076a220841116a2d00003a000020012006416e6a3602042001200841126a3602002002200741016a22083a00a8082006417f6a2106200b417f6a210b2008210720084120470d000b20024188076a41086a220720024188086a41086a29030037030020024188076a41106a220a20024188086a41106a29030037030020024188076a41186a220c20024188086a41186a290300370300200220022903880837038807200841ff0171411f4d0d09200320086b416f6a210d200241e8036a41086a2007290300370300200241e8036a41106a200a290300370300200241e8036a41186a200c2903003703002002200229038807220e3703c8052002200e3703e80341002107200241003a00a808200420086a210f2006416e6a210a0340200d2007460d0220024188086a20076a200f20076a220c41116a2d00003a00002001200a3602042001200c41126a3602002002200741016a220c3a00a808200a417f6a210a2003417f6a2103200c2107200c4120470d000b20024188076a41086a220720024188086a41086a29030037030020024188076a41106a220320024188086a41106a29030037030020024188076a41186a220a20024188086a41186a290300370300200220022903880837038807200c41ff0171411f4d0d09200241c8056a41086a2007290300370300200241c8056a41106a2003290300370300200241c8056a41186a200a29030037030020022002290388073703c8052006200c6b2207416f6a4104490d092004200b411f200b411f491b6a20086a41126a280000210820012007416b6a360204200241e8066a41086a2207200241c8056a41086a290300370300200241e8066a41106a2203200241c8056a41106a290300370300200241e8066a41186a2204200241c8056a41186a2903003703002001200f200c6a41156a360200200220022903c8053703e80620024188086a200110a70120022d0088084101460d0920024188076a41386a200241c1086a290000220e37030020024188076a41306a200241b9086a290000221037030020024188076a41286a200241b1086a290000221137030020024188076a41206a200241a9086a290000221237030020024188066a41086a220620024191086a29000037030020024188066a41106a220b20024199086a29000037030020024188066a41186a220a200241a1086a29000037030020024188066a41206a220c201237030020024188066a41286a220d201137030020024188066a41306a220f201037030020024188066a41386a2213200e370300200220022900890837038806200241c8066a41186a22142004290300370300200241c8066a41106a22042003290300370300200241c8066a41086a22032007290300370300200220022903e8063703c806200241a8056a41186a22072014290300370300200241a8056a41106a22142004290300370300200241a8056a41086a22042003290300370300200220022903c8063703a805200241e8046a41386a22032013290300370300200241e8046a41306a2213200f290300370300200241e8046a41286a220f200d290300370300200241e8046a41206a220d200c290300370300200241e8046a41186a220c200a290300370300200241e8046a41106a220a200b290300370300200241e8046a41086a220b200629030037030020022002290388063703e804200241c8046a41186a2007290300370300200241c8046a41106a2014290300370300200241c8046a41086a2004290300370300200220022903a8053703c80420024188046a41386a200329030037030020024188046a41306a201329030037030020024188046a41286a200f29030037030020024188046a41206a200d29030037030020024188046a41186a200c29030037030020024188046a41106a200a29030037030020024188046a41086a200b290300370300200220022903e8043703880441002107200241003a00a80820012802042106417f2103034020062007460d0320024188086a20076a200128020022042d00003a00002001200620036a3602042001200441016a3602002002200741016a22043a00a8082003417f6a21032004210720044120470d000b20024188076a41086a220720024188086a41086a29030037030020024188076a41106a220320024188086a41106a29030037030020024188076a41186a220b20024188086a41186a290300370300200220022903880837038807200441ff0171411f4d0d09200241c8056a41086a2007290300370300200241c8056a41106a2003290300370300200241c8056a41186a200b29030037030020022002290388073703c805200620046b22074104490d0920012802002204280000210320012007417c6a3602042001200441046a360200200241e8066a41086a2207200241c8056a41086a290300370300200241e8066a41106a2204200241c8056a41106a290300370300200241e8066a41186a2206200241c8056a41186a290300370300200220022903c8053703e80620024188086a200110a70120022d0088084101460d0920024188076a41386a200241c1086a290000220e37030020024188076a41306a200241b9086a290000221037030020024188076a41286a200241b1086a290000221137030020024188076a41206a200241a9086a290000221237030020024188076a41186a200241a1086a290000221537030020024188066a41086a220120024191086a29000037030020024188066a41106a220b20024199086a29000037030020024188066a41186a220a201537030020024188066a41206a220c201237030020024188066a41286a220d201137030020024188066a41306a220f201037030020024188066a41386a2213200e370300200220022900890837038806200241c8066a41186a22142006290300370300200241c8066a41106a22062004290300370300200241c8066a41086a22042007290300370300200220022903e8063703c806200241a8056a41186a22072014290300370300200241a8056a41106a22142006290300370300200241a8056a41086a22062004290300370300200220022903c8063703a805200241e8046a41386a22042013290300370300200241e8046a41306a2213200f290300370300200241e8046a41286a220f200d290300370300200241e8046a41206a220d200c290300370300200241e8046a41186a220c200a290300370300200241e8046a41106a220a200b290300370300200241e8046a41086a220b200129030037030020022002290388063703e804200241c8026a41186a2007290300370300200241c8026a41106a2014290300370300200241c8026a41086a2006290300370300200220022903a8053703c80220024188026a41386a200429030037030020024188026a41306a201329030037030020024188026a41286a200f29030037030020024188026a41206a200d29030037030020024188026a41186a200c29030037030020024188026a41106a200a29030037030020024188026a41086a200b290300370300200220022903e80437038802200241c8036a41186a2201200241e8036a41186a290300370300200241c8036a41106a2207200241e8036a41106a290300370300200241c8036a41086a2204200241e8036a41086a290300370300200220022903e8033703c803200241a8036a41186a200241c8046a41186a290300370300200241a8036a41106a200241c8046a41106a290300370300200241a8036a41086a200241c8046a41086a290300370300200220022903c8043703a803200241e8026a41386a20024188046a41386a290300370300200241e8026a41306a20024188046a41306a290300370300200241e8026a41286a20024188046a41286a290300370300200241e8026a41206a20024188046a41206a290300370300200241e8026a41186a20024188046a41186a290300370300200241e8026a41106a20024188046a41106a290300370300200241e8026a41086a20024188046a41086a29030037030020022002290388043703e802200241e8016a41186a2001290300370300200241e8016a41106a2007290300370300200241e8016a41086a2004290300370300200220022903c8033703e8014200210e0c040b200741ff0171450d08200241003a00a8080c080b200741ff0171450d07200241003a00a8080c070b200741ff0171450d06200241003a00a8080c060b20084108490d052007290001210920012003416f6a220a3602042001200741096a36020041002107200241003a00a80820032106200a210b0340200a2007460d0220024188086a20076a200420076a220841116a2d00003a000020012006416e6a3602042001200841126a3602002002200741016a22083a00a8082006417f6a2106200b417f6a210b2008210720084120470d000b20024188076a41086a220720024188086a41086a29030037030020024188076a41106a220a20024188086a41106a29030037030020024188076a41186a220c20024188086a41186a290300370300200220022903880837038807200841ff0171411f4d0d05200320086b416f6a210d200241e8036a41086a2007290300370300200241e8036a41106a200a290300370300200241e8036a41186a200c2903003703002002200229038807220e3703c8052002200e3703e80341002107200241003a00a808200420086a210f2006416e6a210a0340200d2007460d0320024188086a20076a200f20076a220c41116a2d00003a00002001200a3602042001200c41126a3602002002200741016a220c3a00a808200a417f6a210a2003417f6a2103200c2107200c4120470d000b20024188076a41086a220720024188086a41086a29030037030020024188076a41106a220320024188086a41106a29030037030020024188076a41186a220a20024188086a41186a290300370300200220022903880837038807200c41ff0171411f4d0d05200241c8056a41086a2007290300370300200241c8056a41106a2003290300370300200241c8056a41186a200a29030037030020022002290388073703c8052006200c6b2207416f6a4104490d052004200b411f200b411f491b6a20086a41126a280000210820012007416b6a360204200241e8066a41086a2207200241c8056a41086a290300370300200241e8066a41106a2203200241c8056a41106a290300370300200241e8066a41186a2204200241c8056a41186a2903003703002001200f200c6a41156a360200200220022903c8053703e80620024188086a200110a70120022d0088084101460d0520024188076a41386a200241c1086a290000220e37030020024188076a41306a200241b9086a290000221037030020024188076a41286a200241b1086a290000221137030020024188076a41206a200241a9086a290000221237030020024188066a41086a220620024191086a29000037030020024188066a41106a220b20024199086a29000037030020024188066a41186a220a200241a1086a29000037030020024188066a41206a220c201237030020024188066a41286a220d201137030020024188066a41306a220f201037030020024188066a41386a2213200e370300200220022900890837038806200241c8066a41186a22142004290300370300200241c8066a41106a22042003290300370300200241c8066a41086a22032007290300370300200220022903e8063703c806200241a8056a41186a22072014290300370300200241a8056a41106a22142004290300370300200241a8056a41086a22042003290300370300200220022903c8063703a805200241e8046a41386a22032013290300370300200241e8046a41306a2213200f290300370300200241e8046a41286a220f200d290300370300200241e8046a41206a220d200c290300370300200241e8046a41186a220c200a290300370300200241e8046a41106a220a200b290300370300200241e8046a41086a220b200629030037030020022002290388063703e804200241c8046a41186a2007290300370300200241c8046a41106a2014290300370300200241c8046a41086a2004290300370300200220022903a8053703c80420024188046a41386a200329030037030020024188046a41306a201329030037030020024188046a41286a200f29030037030020024188046a41206a200d29030037030020024188046a41186a200c29030037030020024188046a41106a200a29030037030020024188046a41086a200b290300370300200220022903e8043703880441002107200241003a00a80820012802042106417f2103034020062007460d0420024188086a20076a200128020022042d00003a00002001200620036a3602042001200441016a3602002002200741016a22043a00a8082003417f6a21032004210720044120470d000b20024188076a41086a220720024188086a41086a29030037030020024188076a41106a220320024188086a41106a29030037030020024188076a41186a220b20024188086a41186a290300370300200220022903880837038807200441ff0171411f4d0d05200241c8056a41086a2007290300370300200241c8056a41106a2003290300370300200241c8056a41186a200b29030037030020022002290388073703c805200620046b22074104490d0520012802002204280000210320012007417c6a3602042001200441046a360200200241e8066a41086a2207200241c8056a41086a290300370300200241e8066a41106a2204200241c8056a41106a290300370300200241e8066a41186a2206200241c8056a41186a290300370300200220022903c8053703e80620024188086a200110a70120022d0088084101460d0520024188076a41386a200241c1086a290000220e37030020024188076a41306a200241b9086a290000221037030020024188076a41286a200241b1086a290000221137030020024188076a41206a200241a9086a290000221237030020024188076a41186a200241a1086a290000221537030020024188066a41086a220120024191086a29000037030020024188066a41106a220b20024199086a29000037030020024188066a41186a220a201537030020024188066a41206a220c201237030020024188066a41286a220d201137030020024188066a41306a220f201037030020024188066a41386a2213200e370300200220022900890837038806200241c8066a41186a22142006290300370300200241c8066a41106a22062004290300370300200241c8066a41086a22042007290300370300200220022903e8063703c806200241a8056a41186a22072014290300370300200241a8056a41106a22142006290300370300200241a8056a41086a22062004290300370300200220022903c8063703a805200241e8046a41386a22042013290300370300200241e8046a41306a2213200f290300370300200241e8046a41286a220f200d290300370300200241e8046a41206a220d200c290300370300200241e8046a41186a220c200a290300370300200241e8046a41106a220a200b290300370300200241e8046a41086a220b200129030037030020022002290388063703e804200241c8026a41186a2007290300370300200241c8026a41106a2014290300370300200241c8026a41086a2006290300370300200220022903a8053703c80220024188026a41386a200429030037030020024188026a41306a201329030037030020024188026a41286a200f29030037030020024188026a41206a200d29030037030020024188026a41186a200c29030037030020024188026a41106a200a29030037030020024188026a41086a200b290300370300200220022903e80437038802200241c8036a41186a2201200241e8036a41186a290300370300200241c8036a41106a2207200241e8036a41106a290300370300200241c8036a41086a2204200241e8036a41086a290300370300200220022903e8033703c803200241a8036a41186a200241c8046a41186a290300370300200241a8036a41106a200241c8046a41106a290300370300200241a8036a41086a200241c8046a41086a290300370300200220022903c8043703a803200241e8026a41386a20024188046a41386a290300370300200241e8026a41306a20024188046a41306a290300370300200241e8026a41286a20024188046a41286a290300370300200241e8026a41206a20024188046a41206a290300370300200241e8026a41186a20024188046a41186a290300370300200241e8026a41106a20024188046a41106a290300370300200241e8026a41086a20024188046a41086a29030037030020022002290388043703e802200241e8016a41186a2001290300370300200241e8016a41106a2007290300370300200241e8016a41086a2004290300370300200220022903c8033703e8014201210e0b200241c8016a41186a2201200241a8036a41186a290300370300200241c8016a41106a2207200241a8036a41106a290300370300200241c8016a41086a2204200241a8036a41086a29030037030020024188016a41086a2206200241e8026a41086a29030037030020024188016a41106a220b200241e8026a41106a29030037030020024188016a41186a220a200241e8026a41186a29030037030020024188016a41206a220c200241e8026a41206a29030037030020024188016a41286a220d200241e8026a41286a29030037030020024188016a41306a220f200241e8026a41306a29030037030020024188016a41386a2213200241e8026a41386a290300370300200220022903a8033703c801200220022903e80237038801200241e8006a41186a2214200241c8026a41186a290300370300200241e8006a41106a2216200241c8026a41106a290300370300200241e8006a41086a2217200241c8026a41086a290300370300200241286a41386a221820024188026a41386a290300370300200241286a41306a221920024188026a41306a290300370300200241286a41286a221a20024188026a41286a290300370300200241286a41206a221b20024188026a41206a290300370300200241286a41186a221c20024188026a41186a290300370300200241286a41106a221d20024188026a41106a290300370300200241286a41086a221e20024188026a41086a290300370300200220022903c8023703682002200229038802370328200241086a41186a221f200241e8016a41186a290300370300200241086a41106a2220200241e8016a41106a290300370300200241086a41086a2221200241e8016a41086a290300370300200220022903e801370308200041186a2008360200200020093703102000200e37030820002005370300200020022903c80137021c200041246a20042903003702002000412c6a2007290300370200200041346a2001290300370200200020022903880137023c200041c4006a2006290300370200200041cc006a200b290300370200200041d4006a200a290300370200200041dc006a200c290300370200200041e4006a200d290300370200200041ec006a200f290300370200200041f4006a20132903003702002000200336027c20004198016a201429030037020020004190016a201629030037020020004188016a201729030037020020004180016a2002290368370200200041d8016a2018290300370200200041d0016a2019290300370200200041c8016a201a290300370200200041c0016a201b290300370200200041b8016a201c290300370200200041b0016a201d290300370200200041a8016a201e290300370200200041a0016a2002290328370200200041f8016a201f290300370300200041f0016a2020290300370300200041e8016a2021290300370300200041e0016a20022903083703000c050b200741ff0171450d03200241003a00a8080c030b200741ff0171450d02200241003a00a8080c020b200741ff0171450d01200241003a00a8080c010b200042023703080c010b200042023703080b200241d0096a24000bde17020b7f057e23004190076b22022400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a36020020050e06010203040506070b200041073a00000c1a0b200241086a200110ab0102402002280208450d0020024100360280040c190b20024180046a2001200228020c1092012002280280042205450d18200228028404210420012802042206450d0620024188046a2802002107200128020022032d0000210820012006417f6a22063602042001200341016a360200410021030240024020080e020100080b20024180046a200110930120022d0080044101460d07200241e8016a20024199046a290000370300200241e0016a20024191046a290000370300200241d8016a20024189046a29000037030020022002290081043703d00120012802042106410121030b200241d0006a41186a2208200241d0016a41186a290300370300200241d0006a41106a2209200241d0016a41106a290300370300200241d0006a41086a220a200241d0016a41086a290300370300200220022903d001370350024020064104490d002001280200220b280000210c20012006417c6a3602042001200b41046a360200200241b0016a41086a200a290300220d370300200241b0016a41106a2009290300220e370300200241b0016a41186a2008290300220f3703002002200229035022103703b001200020033a0001200041013a0000200041026a20103700002000410a6a200d370000200041126a200e3700002000411a6a200f370000200041306a200c3602002000412c6a2007360100200041286a2004360100200041246a2005360100200041226a20022f0190013b01000c1a0b200041073a00000c070b20024180046a20011098012002280280042105200241d0016a20024180046a41047241ac0210e9081a024002402005411c460d0020024180046a200241d0016a41ac0210e9081a41b002102c22040d010c180b200041073a00000c190b20042005360200200441046a20024180046a41ac0210e9081a200241106a200110ab01024020022802100d0020022802142101200041023a0000200020022f00b0013b0001200041086a2001360200200041046a20043602002000410c6a2002290250370200200041036a200241b0016a41026a2d00003a0000200041146a200241d0006a41086a2902003702002000411c6a200241e0006a290200370200200041246a200241e8006a2902003702002000412c6a200241f0006a290200370200200041346a200241f8006a2802003602000c190b200041073a00002004108b022004102e0c180b200241206a200110ab0120022802200d072002280224210620024180046a20011098012002280280042105200241d0016a20024180046a41047241ac0210e9081a2005411c460d0620024180046a200241d0016a41ac0210e9081a41b002102c2204450d1520042005360200200441046a20024180046a41ac0210e9081a200241186a200110ab01024020022802180d00200228021c2101200041033a0000200020022f00b0013b00012000410c6a2001360200200041086a2004360200200041046a2006360200200041106a2002290350370300200041036a200241b2016a2d00003a0000200041186a200241d0006a41086a290300370300200041206a200241d0006a41106a290300370300200041286a200241d0006a41186a290300370300200041306a200241d0006a41206a2903003703000c180b200041073a00002004108b022004102e0c170b41002105200241003a00a0042003417e6a21030240034020062005460d0120024180046a20056a200420056a220841016a2d00003a0000200120033602042001200841026a3602002002200541016a22083a00a0042003417f6a21032008210520084120460d100c000b0b200541ff0171450d0f200241003a00a0040c0f0b41002105200241003a00a0042003417e6a21030240034020062005460d0120024180046a20056a200420056a220841016a2d00003a0000200120033602042001200841026a3602002002200541016a22083a00a0042003417f6a21032008210520084120460d0a0c000b0b200541ff0171450d09200241003a00a0040c090b41002105200241003a00a0042003417e6a21030240034020062005460d0120024180046a20056a200420056a220841016a2d00003a0000200120033602042001200841026a3602002002200541016a22083a00a0042003417f6a21032008210520084120460d070c000b0b200541ff0171450d06200241003a00a0040c060b200041073a00000c130b200041073a00000b200441ffffff3f71450d112005102e0c110b200041073a00000c100b200041073a00000c0f0b200241d0016a41086a220120024180046a41086a290300370300200241d0016a41106a220520024180046a41106a290300370300200241d0016a41186a220420024180046a41186a29030037030020022002290380043703d001200841ff0171411f4d0d00200241b0016a41086a2001290300220d370300200241b0016a41106a2005290300220e370300200241b0016a41186a2004290300220f370300200220022903d00122103703b001200041063a000020002010370001200041096a200d370000200041116a200e370000200041196a200f370000200041216a200229009001370000200041296a20024190016a41086a290000370000200041306a2002419f016a2900003700000c0e0b200041073a00000c0d0b200241d0016a41086a220520024180046a41086a290300370300200241d0016a41106a220420024180046a41106a290300370300200241d0016a41186a220620024180046a41186a29030037030020022002290380043703d001200841ff0171411f4d0d00200241b0016a41086a2005290300370300200241b0016a41106a2004290300370300200241b0016a41186a2006290300370300200220022903d0013703b001200241c8006a200110ab0120022802480d01200228024c2105200241386a200110d9042002290338a70d022002290340210d200241306a200110ab0120022802300d032002280234210120024190016a41186a200241b0016a41186a290300220e37030020024190016a41106a200241b0016a41106a290300220f37030020024190016a41086a200241b0016a41086a2903002210370300200220022903b001221137039001200041053a000020002011370001200041096a2010370000200041116a200f370000200041196a200e370000200041216a20022f0080013b0000200041236a20024182016a2d00003a0000200041306a200d370300200041286a2001360200200041246a20053602000c0c0b200041073a00000c0b0b200041073a00000c0a0b200041073a00000c090b200041073a00000c080b200241d0016a41086a220520024180046a41086a290300370300200241d0016a41106a220420024180046a41106a290300370300200241d0016a41186a220620024180046a41186a29030037030020022002290380043703d001200841ff0171411f4d0d00200241b0016a41086a2005290300370300200241b0016a41106a2004290300370300200241b0016a41186a2006290300370300200220022903d0013703b001200241286a200110ab0120022802280d0120012802042205450d04200228022c2103200128020022042d0000210620012005417f6a3602042001200441016a3602004100210120060e020302040b200041073a00000c060b200041073a00000c050b410121010b20024190016a41186a200241b0016a41186a290300220d37030020024190016a41106a200241b0016a41106a290300220e37030020024190016a41086a200241b0016a41086a290300220f370300200220022903b001221037039001200041043a000020002010370001200041096a200f370000200041116a200e370000200041196a200d370000200041246a2003360200200041216a20013a0000200041286a200229038001370300200041306a20024180016a41086a2903003703000c030b200041073a00000c020b1036000b200041073a00000b20024190076a24000bb20401057f23004180056b22022400024002400240024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a36020020050e03010203040b200041043b01000c080b2002200110ab0102402002280200450d00200241003602200c070b200241206a200120022802041097012002280220450d06200241da026a200241206a41086a280200360100200220022903203701d202200041013b0100200020022901d002370102200041086a200241d6026a2901003701000c070b024020064102490d0020042f0001210520012003417d6a3602042001200441036a360200200241d0026a200110980120022802d0022101200241206a200241d0026a41047241ac0210e9081a024002402001411c460d00200241d0026a200241206a41ac0210e9081a41b002102c22030d011036000b200041043b01000c080b20032001360200200341046a200241d0026a41ac0210e9081a200041046a2003360200200020053b0102200041023b01000c070b200041043b01000c060b200241086a200110ab012002280208450d01200241003602200c020b200041043b01000c040b200241206a2001200228020c10970120022802200d010b200041043b01000c020b200241da026a200241206a41086a280200360100200220022903203701d202200041033b0100200020022901d002370102200041086a200241d6026a2901003701000c010b200041043b01000b20024180056a24000bb54507047f017e017f027e047f077e107f230041d00d6b220224000240024002402001280200220328020422044108490d002003280200220529000021062003200441786a3602042003200541086a360200200128020022032802042204450d01200328020022052d0000210720032004417f6a3602042003200541016a3602000240024002400240024002400240024020070e020001090b2001280200220328020422044108490d082003280200220529000021082003200441786a3602042003200541086a36020041002104200241003a00a80a024002400240024002400340200128020022032802042205450d01200241880a6a20046a200328020022072d00003a000020032005417f6a3602042003200741016a3602002002200441016a22033a00a80a2003210420034120470d000b200241d00a6a41186a200241880a6a41186a2903002209370300200241c8096a41086a2203200241880a6a41086a290300370300200241c8096a41106a2204200241880a6a41106a290300370300200241c8096a41186a22052009370300200220022903880a3703c809200241e8036a41186a2005290300370300200241e8036a41106a2004290300370300200241e8036a41086a2003290300370300200220022903c8093703e80341002104200241003a00a80a0340200128020022032802042205450d02200241880a6a20046a200328020022072d00003a000020032005417f6a3602042003200741016a3602002002200441016a22033a00a80a2003210420034120470d000b200241d00a6a41186a200241880a6a41186a2903002209370300200241c8096a41086a2204200241880a6a41086a290300370300200241c8096a41106a2205200241880a6a41106a290300370300200241c8096a41186a22072009370300200220022903880a3703c80920012802002203280204220a4104490d0d2003280200220b280000210c2003200a417c6a3602042003200b41046a360200200241e8066a41086a2004290300370300200241e8066a41106a2005290300370300200241e8066a41186a2007290300370300200220022903c8093703e80641002104200241003a00c80a0340200128020022032802042205450d03200241880a6a20046a200328020022072d00003a000020032005417f6a3602042003200741016a3602002002200441016a22033a00c80a20032104200341c000470d000b200241d00a6a41086a2203200241880a6a41086a290300370300200241d00a6a41106a2204200241880a6a41106a290300370300200241d00a6a41186a2205200241880a6a41186a290300370300200241d00a6a41206a2207200241880a6a41206a290300370300200241d00a6a41286a220a200241880a6a41286a290300370300200241d00a6a41306a220b200241880a6a41306a290300370300200241d00a6a41386a220d200241880a6a41386a290300370300200220022903880a3703d00a200241c8096a41086a2003290300220e370300200241c8096a41106a20042903002209370300200241c8096a41186a2005290300220f370300200241c8096a41206a20072903002210370300200241c8096a41286a200a2903002211370300200241c8096a41306a200b2903002212370300200241c8096a41386a2203200d290300370300200220022903d00a22133703c80920024188076a41306a201237030020024188076a41286a201137030020024188076a41206a201037030020024188076a41186a200f37030020024188076a41106a200937030020024188076a41386a2003290300221437030020024188066a41306a2203201237030020024188066a41286a2204201137030020024188066a41206a2205201037030020024188066a41186a2207200f37030020024188066a41106a220a200937030020024188066a41086a220b200e37030020024188066a41386a220d20143703002002201337038806200241c8066a41186a2215200241e8066a41186a290300370300200241c8066a41106a2216200241e8066a41106a290300370300200241c8066a41086a2217200241e8066a41086a290300370300200220022903e8063703c806200241a8056a41186a22182015290300370300200241a8056a41106a22152016290300370300200241a8056a41086a22162017290300370300200220022903c8063703a805200241e8046a41386a2217200d290300370300200241e8046a41306a220d2003290300370300200241e8046a41286a22032004290300370300200241e8046a41206a22042005290300370300200241e8046a41186a22052007290300370300200241e8046a41106a2207200a290300370300200241e8046a41086a220a200b29030037030020022002290388063703e804200241c8046a41186a2018290300370300200241c8046a41106a2015290300370300200241c8046a41086a2016290300370300200220022903a8053703c80420024188046a41386a201729030037030020024188046a41306a200d29030037030020024188046a41286a200329030037030020024188046a41206a200429030037030020024188046a41186a200529030037030020024188046a41106a200729030037030020024188046a41086a200a290300370300200220022903e8043703880441002104200241003a00a80a0340200128020022032802042205450d04200241880a6a20046a200328020022072d00003a000020032005417f6a3602042003200741016a3602002002200441016a22033a00a80a2003210420034120470d000b200241d00a6a41186a200241880a6a41186a2903002209370300200241c8096a41086a2204200241880a6a41086a290300370300200241c8096a41106a2205200241880a6a41106a290300370300200241c8096a41186a22072009370300200220022903880a3703c80920012802002203280204220a4104490d0d2003280200220d280000210b2003200a417c6a3602042003200d41046a360200200241e8066a41086a2004290300370300200241e8066a41106a2005290300370300200241e8066a41186a2007290300370300200220022903c8093703e80641002104200241003a00c80a0340200128020022032802042205450d05200241880a6a20046a200328020022072d00003a000020032005417f6a3602042003200741016a3602002002200441016a22033a00c80a20032104200341c000470d000b200241d00a6a41086a2201200241880a6a41086a290300370300200241d00a6a41106a2203200241880a6a41106a290300370300200241d00a6a41186a2204200241880a6a41186a290300370300200241d00a6a41206a2205200241880a6a41206a290300370300200241d00a6a41286a2207200241880a6a41286a290300370300200241d00a6a41306a220a200241880a6a41306a290300370300200241d00a6a41386a220d200241880a6a41386a290300370300200220022903880a3703d00a200241c8096a41386a2215200d290300370300200241c8096a41306a200a2903002209370300200241c8096a41286a2007290300220f370300200241c8096a41206a20052903002210370300200241c8096a41186a20042903002211370300200241c8096a41106a20032903002212370300200241c8096a41086a2001290300220e370300200220022903d00a22133703c80920024188076a41306a2201200937030020024188076a41286a2203200f37030020024188076a41206a2204201037030020024188076a41186a2205201137030020024188076a41106a2207201237030020024188076a41086a220a200e37030020024188076a41386a220d2015290300370300200220133703880720024188066a41386a2215200d29030037030020024188066a41306a220d200129030037030020024188066a41286a2201200329030037030020024188066a41206a2203200429030037030020024188066a41186a2204200529030037030020024188066a41106a2205200729030037030020024188066a41086a2207200a290300370300200220022903880737038806200241c8066a41186a220a200241e8066a41186a290300370300200241c8066a41106a2216200241e8066a41106a290300370300200241c8066a41086a2217200241e8066a41086a290300370300200220022903e8063703c806200241a8056a41186a2218200a290300370300200241a8056a41106a220a2016290300370300200241a8056a41086a22162017290300370300200220022903c8063703a805200241e8046a41386a22172015290300370300200241e8046a41306a2215200d290300370300200241e8046a41286a220d2001290300370300200241e8046a41206a22012003290300370300200241e8046a41186a22032004290300370300200241e8046a41106a22042005290300370300200241e8046a41086a2205200729030037030020022002290388063703e804200241c8026a41186a2018290300370300200241c8026a41106a200a290300370300200241c8026a41086a2016290300370300200220022903a8053703c80220024188026a41386a201729030037030020024188026a41306a201529030037030020024188026a41286a200d29030037030020024188026a41206a200129030037030020024188026a41186a200329030037030020024188026a41106a200429030037030020024188026a41086a2005290300370300200220022903e80437038802200241c8036a41186a2201200241e8036a41186a290300370300200241c8036a41106a2203200241e8036a41106a290300370300200241c8036a41086a2204200241e8036a41086a290300370300200220022903e8033703c803200241a8036a41186a200241c8046a41186a290300370300200241a8036a41106a200241c8046a41106a290300370300200241a8036a41086a200241c8046a41086a290300370300200220022903c8043703a803200241e8026a41386a20024188046a41386a290300370300200241e8026a41306a20024188046a41306a290300370300200241e8026a41286a20024188046a41286a290300370300200241e8026a41206a20024188046a41206a290300370300200241e8026a41186a20024188046a41186a290300370300200241e8026a41106a20024188046a41106a290300370300200241e8026a41086a20024188046a41086a29030037030020022002290388043703e802200241e8016a41186a2001290300370300200241e8016a41106a2003290300370300200241e8016a41086a2004290300370300200220022903c8033703e801420021090c060b200441ff0171450d0c200241003a00a80a0c0c0b200441ff0171450d0b200241003a00a80a0c0b0b200441ff0171450d0a200241003a00c80a0c0a0b200441ff0171450d09200241003a00a80a0c090b200441ff0171450d08200241003a00c80a0c080b2001280200220328020422044108490d072003280200220529000021082003200441786a3602042003200541086a36020041002104200241003a00a80a0340200128020022032802042205450d02200241880a6a20046a200328020022072d00003a000020032005417f6a3602042003200741016a3602002002200441016a22033a00a80a2003210420034120470d000b200241d00a6a41186a200241880a6a41186a2903002209370300200241c8096a41086a2203200241880a6a41086a290300370300200241c8096a41106a2204200241880a6a41106a290300370300200241c8096a41186a22052009370300200220022903880a3703c809200241e8036a41186a2005290300370300200241e8036a41106a2004290300370300200241e8036a41086a2003290300370300200220022903c8093703e80341002104200241003a00a80a0340200128020022032802042205450d03200241880a6a20046a200328020022072d00003a000020032005417f6a3602042003200741016a3602002002200441016a22033a00a80a2003210420034120470d000b200241d00a6a41186a200241880a6a41186a2903002209370300200241c8096a41086a2204200241880a6a41086a290300370300200241c8096a41106a2205200241880a6a41106a290300370300200241c8096a41186a22072009370300200220022903880a3703c80920012802002203280204220a4104490d072003280200220b280000210c2003200a417c6a3602042003200b41046a360200200241e8066a41086a2004290300370300200241e8066a41106a2005290300370300200241e8066a41186a2007290300370300200220022903c8093703e80641002104200241003a00c80a0340200128020022032802042205450d04200241880a6a20046a200328020022072d00003a000020032005417f6a3602042003200741016a3602002002200441016a22033a00c80a20032104200341c000470d000b200241d00a6a41086a2203200241880a6a41086a290300370300200241d00a6a41106a2204200241880a6a41106a290300370300200241d00a6a41186a2205200241880a6a41186a290300370300200241d00a6a41206a2207200241880a6a41206a290300370300200241d00a6a41286a220a200241880a6a41286a290300370300200241d00a6a41306a220b200241880a6a41306a290300370300200241d00a6a41386a220d200241880a6a41386a290300370300200220022903880a3703d00a200241c8096a41086a2003290300220e370300200241c8096a41106a20042903002209370300200241c8096a41186a2005290300220f370300200241c8096a41206a20072903002210370300200241c8096a41286a200a2903002211370300200241c8096a41306a200b2903002212370300200241c8096a41386a2203200d290300370300200220022903d00a22133703c80920024188076a41306a201237030020024188076a41286a201137030020024188076a41206a201037030020024188076a41186a200f37030020024188076a41106a200937030020024188076a41386a2003290300221437030020024188066a41306a2203201237030020024188066a41286a2204201137030020024188066a41206a2205201037030020024188066a41186a2207200f37030020024188066a41106a220a200937030020024188066a41086a220b200e37030020024188066a41386a220d20143703002002201337038806200241c8066a41186a2215200241e8066a41186a290300370300200241c8066a41106a2216200241e8066a41106a290300370300200241c8066a41086a2217200241e8066a41086a290300370300200220022903e8063703c806200241a8056a41186a22182015290300370300200241a8056a41106a22152016290300370300200241a8056a41086a22162017290300370300200220022903c8063703a805200241e8046a41386a2217200d290300370300200241e8046a41306a220d2003290300370300200241e8046a41286a22032004290300370300200241e8046a41206a22042005290300370300200241e8046a41186a22052007290300370300200241e8046a41106a2207200a290300370300200241e8046a41086a220a200b29030037030020022002290388063703e804200241c8046a41186a2018290300370300200241c8046a41106a2015290300370300200241c8046a41086a2016290300370300200220022903a8053703c80420024188046a41386a201729030037030020024188046a41306a200d29030037030020024188046a41286a200329030037030020024188046a41206a200429030037030020024188046a41186a200529030037030020024188046a41106a200729030037030020024188046a41086a200a290300370300200220022903e8043703880441002104200241003a00a80a0340200128020022032802042205450d05200241880a6a20046a200328020022072d00003a000020032005417f6a3602042003200741016a3602002002200441016a22033a00a80a2003210420034120470d000b200241d00a6a41186a200241880a6a41186a2903002209370300200241c8096a41086a2204200241880a6a41086a290300370300200241c8096a41106a2205200241880a6a41106a290300370300200241c8096a41186a22072009370300200220022903880a3703c80920012802002203280204220a4104490d072003280200220d280000210b2003200a417c6a3602042003200d41046a360200200241e8066a41086a2004290300370300200241e8066a41106a2005290300370300200241e8066a41186a2007290300370300200220022903c8093703e80641002104200241003a00c80a0340200128020022032802042205450d06200241880a6a20046a200328020022072d00003a000020032005417f6a3602042003200741016a3602002002200441016a22033a00c80a20032104200341c000470d000b200241d00a6a41086a2201200241880a6a41086a290300370300200241d00a6a41106a2203200241880a6a41106a290300370300200241d00a6a41186a2204200241880a6a41186a290300370300200241d00a6a41206a2205200241880a6a41206a290300370300200241d00a6a41286a2207200241880a6a41286a290300370300200241d00a6a41306a220a200241880a6a41306a290300370300200241d00a6a41386a220d200241880a6a41386a290300370300200220022903880a3703d00a200241c8096a41386a2215200d290300370300200241c8096a41306a200a2903002209370300200241c8096a41286a2007290300220f370300200241c8096a41206a20052903002210370300200241c8096a41186a20042903002211370300200241c8096a41106a20032903002212370300200241c8096a41086a2001290300220e370300200220022903d00a22133703c80920024188076a41306a2201200937030020024188076a41286a2203200f37030020024188076a41206a2204201037030020024188076a41186a2205201137030020024188076a41106a2207201237030020024188076a41086a220a200e37030020024188076a41386a220d2015290300370300200220133703880720024188066a41386a2215200d29030037030020024188066a41306a220d200129030037030020024188066a41286a2201200329030037030020024188066a41206a2203200429030037030020024188066a41186a2204200529030037030020024188066a41106a2205200729030037030020024188066a41086a2207200a290300370300200220022903880737038806200241c8066a41186a220a200241e8066a41186a290300370300200241c8066a41106a2216200241e8066a41106a290300370300200241c8066a41086a2217200241e8066a41086a290300370300200220022903e8063703c806200241a8056a41186a2218200a290300370300200241a8056a41106a220a2016290300370300200241a8056a41086a22162017290300370300200220022903c8063703a805200241e8046a41386a22172015290300370300200241e8046a41306a2215200d290300370300200241e8046a41286a220d2001290300370300200241e8046a41206a22012003290300370300200241e8046a41186a22032004290300370300200241e8046a41106a22042005290300370300200241e8046a41086a2205200729030037030020022002290388063703e804200241c8026a41186a2018290300370300200241c8026a41106a200a290300370300200241c8026a41086a2016290300370300200220022903a8053703c80220024188026a41386a201729030037030020024188026a41306a201529030037030020024188026a41286a200d29030037030020024188026a41206a200129030037030020024188026a41186a200329030037030020024188026a41106a200429030037030020024188026a41086a2005290300370300200220022903e80437038802200241c8036a41186a2201200241e8036a41186a290300370300200241c8036a41106a2203200241e8036a41106a290300370300200241c8036a41086a2204200241e8036a41086a290300370300200220022903e8033703c803200241a8036a41186a200241c8046a41186a290300370300200241a8036a41106a200241c8046a41106a290300370300200241a8036a41086a200241c8046a41086a290300370300200220022903c8043703a803200241e8026a41386a20024188046a41386a290300370300200241e8026a41306a20024188046a41306a290300370300200241e8026a41286a20024188046a41286a290300370300200241e8026a41206a20024188046a41206a290300370300200241e8026a41186a20024188046a41186a290300370300200241e8026a41106a20024188046a41106a290300370300200241e8026a41086a20024188046a41086a29030037030020022002290388043703e802200241e8016a41186a2001290300370300200241e8016a41106a2003290300370300200241e8016a41086a2004290300370300200220022903c8033703e801420121090b200241c8016a41186a2201200241a8036a41186a290300370300200241c8016a41106a2203200241a8036a41106a290300370300200241c8016a41086a2204200241a8036a41086a29030037030020024188016a41086a2205200241e8026a41086a29030037030020024188016a41106a2207200241e8026a41106a29030037030020024188016a41186a220a200241e8026a41186a29030037030020024188016a41206a220d200241e8026a41206a29030037030020024188016a41286a2215200241e8026a41286a29030037030020024188016a41306a2216200241e8026a41306a29030037030020024188016a41386a2217200241e8026a41386a290300370300200220022903a8033703c801200220022903e80237038801200241e8006a41186a2218200241c8026a41186a290300370300200241e8006a41106a2219200241c8026a41106a290300370300200241e8006a41086a221a200241c8026a41086a290300370300200241286a41386a221b20024188026a41386a290300370300200241286a41306a221c20024188026a41306a290300370300200241286a41286a221d20024188026a41286a290300370300200241286a41206a221e20024188026a41206a290300370300200241286a41186a221f20024188026a41186a290300370300200241286a41106a222020024188026a41106a290300370300200241286a41086a222120024188026a41086a290300370300200220022903c8023703682002200229038802370328200241086a41186a2222200241e8016a41186a290300370300200241086a41106a2223200241e8016a41106a290300370300200241086a41086a2224200241e8016a41086a290300370300200220022903e801370308200041186a200c360200200020083703102000200937030820002006370300200020022903c80137021c200041246a20042903003702002000412c6a2003290300370200200041346a2001290300370200200020022903880137023c200041c4006a2005290300370200200041cc006a2007290300370200200041d4006a200a290300370200200041dc006a200d290300370200200041e4006a2015290300370200200041ec006a2016290300370200200041f4006a20172903003702002000200b36027c20004198016a201829030037020020004190016a201929030037020020004188016a201a29030037020020004180016a2002290368370200200041d8016a201b290300370200200041d0016a201c290300370200200041c8016a201d290300370200200041c0016a201e290300370200200041b8016a201f290300370200200041b0016a2020290300370200200041a8016a2021290300370200200041a0016a2002290328370200200041f8016a2022290300370300200041f0016a2023290300370300200041e8016a2024290300370300200041e0016a20022903083703000c070b200441ff0171450d05200241003a00a80a0c050b200441ff0171450d04200241003a00a80a0c040b200441ff0171450d03200241003a00c80a0c030b200441ff0171450d02200241003a00a80a0c020b200441ff0171450d01200241003a00c80a0c010b200042023703080c010b200042023703080b200241d00d6a24000bdc1704087f037e037f027e230041a0086b220224000240024002400240024002400240024002400240024002400240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020020060e06010203040506070b200041073a00000c0a0b20024190046a200110e40102402002280290042207450d0020022802940421080240200128020022032802042204450d0020024198046a2802002109200328020022052d0000210620032004417f6a3602042003200541016a3602004100210302400240024020060e020100030b41002104200241003a00b0040340200128020022032802042205450d0220024190046a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00b0042003210420034120470d000b200241e0016a41086a20024190046a41086a290300220a37030020024190016a41186a20024190046a41186a290300220b37030020024190016a41106a20024190046a41106a290300220c370300200241c0016a41186a200b370300200241c0016a41106a200c370300200241c0016a41086a200a37030020022002290390043703c001410121030b200241f0006a41186a2204200241c0016a41186a290300370300200241f0006a41106a2205200241c0016a41106a290300370300200241f0006a41086a2206200241c0016a41086a290300370300200220022903c00137037020012802002201280204220d4104490d092001280200220e280000210f2001200d417c6a3602042001200e41046a360200200241d0006a41086a2006290300220a370300200241d0006a41106a2005290300220b370300200241d0006a41186a2004290300220c370300200220022903702210370350200020033a0001200041013a0000200041026a20103700002000410a6a200a370000200041126a200b3700002000411a6a200c370000200041306a200f3602002000412c6a2009360100200041286a2008360100200041246a2007360100200041226a20022f014e3b01000c0c0b200441ff0171450d00200241003a00b0040b200041073a00000c080b200041073a00000c090b2001200128020441016a220336020402400240200320012802084b0d0020024190046a20011095012002280290042103200241e0016a20024190046a41047241ac0210e9081a2003411c460d0020024190046a200241e0016a41ac0210e9081a41b002102c22040d010c0b0b200041073a00000c090b20042003360200200441046a20024190046a41ac0210e9081a20012001280204417f6a360204200241086a200110ad012002280208450d07200041073a00002004108b022004102e0c080b200241186a200110ad0102400240024020022802180d00200228021c21052001200128020441016a2203360204200320012802084b0d0120024190046a20011095012002280290042103200241e0016a20024190046a41047241ac0210e9081a2003411c460d0120024190046a200241e0016a41ac0210e9081a41b002102c2204450d0b20042003360200200441046a20024190046a41ac0210e9081a20012001280204417f6a360204200241106a200110ad0120022802100d0220022802142101200041033a0000200020022f00c0013b00012000410c6a2001360200200041086a2004360200200041046a2005360200200041106a200229039001370300200041036a200241c2016a2d00003a0000200041186a20024190016a41086a290300370300200041206a20024190016a41106a290300370300200041286a20024190016a41186a290300370300200041306a20024190016a41206a2903003703000c0a0b200041073a00000c090b200041073a00000c080b200041073a00002004108b022004102e0c070b41002104200241003a00b004024002400240024002400340200128020022032802042205450d0120024190046a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00b0042003210420034120470d000b200241e0016a41186a20024190046a41186a290300220a37030020024190016a41086a20024190046a41086a29030037030020024190016a41106a20024190046a41106a29030037030020024190016a41186a200a370300200220022903900437039001200241206a200110ad0120022802200d01200128020022012802042203450d0420022802242106200128020022042d0000210520012003417f6a3602042001200441016a3602004100210120050e020302040b0240200441ff0171450d00200241003a00b0040b200041073a00000c0a0b200041073a00000c090b410121010b200241c0016a41186a20024190016a41186a290300220a370300200241c0016a41106a20024190016a41106a290300220b370300200241c0016a41086a20024190016a41086a290300220c370300200220022903900122103703c001200041043a000020002010370001200041096a200c370000200041116a200b370000200041196a200a370000200041246a2006360200200041216a20013a0000200041286a2002290370370300200041306a200241f0006a41086a2903003703000c070b200041073a00000c060b41002104200241003a00b00402400240024002400340200128020022032802042205450d0120024190046a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00b0042003210420034120470d000b200241e0016a41186a20024190046a41186a290300220a37030020024190016a41086a20024190046a41086a29030037030020024190016a41106a20024190046a41106a29030037030020024190016a41186a200a370300200220022903900437039001200241c0006a200110ad0120022802400d0120022802442103200241306a200110da042002290330a70d022002290338210a200241286a200110ad0120022802280d03200228022c2101200241c0016a41186a20024190016a41186a290300220b370300200241c0016a41106a20024190016a41106a290300220c370300200241c0016a41086a20024190016a41086a2903002210370300200220022903900122113703c001200041053a000020002011370001200041096a2010370000200041116a200c370000200041196a200b370000200041216a20022f00703b0000200041236a200241f2006a2d00003a0000200041306a200a370300200041286a2001360200200041246a20033602000c090b0240200441ff0171450d00200241003a00b0040b200041073a00000c080b200041073a00000c070b200041073a00000c060b200041073a00000c050b41002104200241003a00b00402400340200128020022032802042205450d0120024190046a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00b0042003210420034120470d000b200241e0016a41186a20024190046a41186a290300220a37030020024190016a41086a220120024190046a41086a29030037030020024190016a41106a220320024190046a41106a29030037030020024190016a41186a2204200a370300200220022903900437039001200041063a00002000200229039001370001200041096a2001290300370000200041116a2003290300370000200041196a2004290300370000200041216a20022900c001370000200041296a200241c0016a41086a290000370000200041306a200241cf016a2900003700000c050b0240200441ff0171450d00200241003a00b0040b200041073a00000c040b200041073a00000c030b200041073a00000b200841ffffff3f71450d012007102e0c010b200228020c2101200041023a0000200020022f00c0013b0001200041086a2001360200200041046a20043602002000410c6a200229029001370200200041036a200241c0016a41026a2d00003a0000200041146a20024190016a41086a2902003702002000411c6a200241a0016a290200370200200041246a200241a8016a2902003702002000412c6a200241b0016a290200370200200041346a200241b8016a2802003602000b200241a0086a24000f0b1036000beb0401057f23004180056b2202240002400240024002400240024002400240024002400240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020020060e03010203040b200041043b01000c090b2002200110ad0102402002280200450d00200241003602200c080b200241206a200120022802041094012002280220450d07200241da026a200241206a41086a280200360100200220022903203701d202200041013b0100200020022901d002370102200041086a200241d6026a2901003701000c080b024002402001280200220328020422044102490d00200328020022052f0000210620032004417e6a3602042003200541026a3602002001200128020441016a2203360204200320012802084b0d01200241d0026a200110950120022802d0022103200241206a200241d0026a41047241ac0210e9081a2003411c460d01200241d0026a200241206a41ac0210e9081a41b002102c2204450d0620042003360200200441046a200241d0026a41ac0210e9081a200041046a2004360200200020063b0102200041023b010020012001280204417f6a3602040c090b200041043b01000c080b200041043b01000c070b200241086a200110ad012002280208450d01200241003602200c020b200041043b01000c050b200241206a2001200228020c10940120022802200d020b200041043b01000c030b1036000b200241da026a200241206a41086a280200360100200220022903203701d202200041033b0100200020022901d002370102200041086a200241d6026a2901003701000c010b200041043b01000b20024180056a24000ba40e01127f230041b0026b2203240020012802002104200128020422052f01062106200341f0006a41386a2207200541086a2208200128020822094106746a220141386a290000370300200341f0006a41306a220a200141306a290000370300200341f0006a41286a220b200141286a290000370300200341f0006a41206a220c200141206a290000370300200341f0006a41186a220d200141186a290000370300200341f0006a41106a220e200141106a290000370300200341f0006a41086a220f200141086a2900003703002003200129000037037020012008200941016a22104106746a20062009417f736a220841067410ea081a200341b0016a41186a2211200541c8056a221220094105746a220141186a290000370300200341b0016a41106a2213200141106a290000370300200341b0016a41086a2214200141086a290000370300200320012900003703b0012001201220104105746a200841057410ea081a20052006417f6a22013b0106200341d0016a41386a2007290300370300200341d0016a41306a200a290300370300200341d0016a41286a200b290300370300200341d0016a41206a200c290300370300200341d0016a41186a200d290300370300200341d0016a41106a200e290300370300200341d0016a41086a200f29030037030020034198026a2014290300370300200341a0026a2013290300370300200341a8026a2011290300370300200320032903703703d001200320032903b00137039002200341106a200341d0016a41e00010e9081a200341d0016a200341106a41e00010e9081a0240200141ffff037141044b0d0002400240024020052802002206450d00200441016a21080240024020052f010422070d0020062f01060d01200341246a4101360200200342013702142003419cc3cb0036021020034104360274200341849dc7003602702003200341f0006a360220200341106a418c9dc7001044000b024020062007417f6a22074102746a41a8086a280200220a2f0106200141ffff03716a41016a410b4b0d00200341286a2005360200200341206a200a360200200320043602242003200436021c200320073602182003200636021420032008360210200341b0016a200341106a4101200910cf060c040b200341286a2005360200200341206a200a360200200320043602242003200436021c200320073602182003200636021420032008360210200341106a410110d006200320103602b8010c020b0240200141ffff0371200741027420066a41ac086a28020022012f01066a41016a410b4b0d00200341286a2001360200200341206a2005360200200320043602242003200436021c200320073602182003200636021420032008360210200341b0016a200341106a4100200910cf060c030b200341286a2001360200200341206a2005360200200320043602242003200436021c200320073602182003200636021420032008360210200341106a410110d1060b200320093602b8010b200320053602b401200320043602b0010b20032802b801210920032802b001210420032802b40122052802002201450d0020012f0106220741044b0d00200141066a2108200441016a21060240034020012802002210450d01200741ffff0371210b200641016a210a024002400240024020012f010422070d0020102f01060d01200341246a4101360200200342013702142003419cc3cb0036021020034104360274200341849dc7003602702003200341f0006a360220200341106a418c9dc7001044000b20102007417f6a220c4102746a41a8086a28020021072003200136028801200320063602840120032007360280012003200636027c2003200c360278200320103602742003200a360270024020072f010620082f01006a41016a410b4b0d00200341106a41186a200341f0006a41186a280200360200200341106a41106a200341f0006a41106a290300370300200341106a41086a200341f0006a41086a29030037030020032003290370370310200341086a200341106a10d206200328020c2101200328020821060c030b200341f0006a4105200b6b10d0060c010b2003200741027420106a41ac086a280200220c36028801200320063602840120032001360280012003200636027c20032007360278200320103602742003200a360270024020082f0100200c2f01066a41016a410b4b0d00200341106a41186a200341f0006a41186a280200360200200341106a41106a200341f0006a41106a290300370300200341106a41086a200341f0006a41086a290300370300200320032903703703102003200341106a10d20620032802042101200328020021060c020b200341f0006a4105200b6b10d1060b410021010b2001450d02200141066a210820012f0106220741044d0d000c020b0b200741ffff03710d00200241013a00000b2000200341d0016a41e00010e908220141e8006a2009360200200141e4006a200536020020012004360260200341b0026a24000bc50701167f230041e0006b22042400024002400240200141186a28020022052f01062206200141106a28020022072f0106220820021b2003490d00200841016a220920066a220a410c4f0d01200128020c210b2001280208210c2001280200210d2001280204220e2f0106210f2007200a3b0106200441386a2210200e41086a2211200c4106746a221241386a290000370300200441306a2213201241306a290000370300200441286a2214201241286a290000370300200441206a2215201241206a290000370300200441186a2216201241186a290000370300200441106a2217201241106a290000370300200441086a2218201241086a2900003703002004201229000037030020122011200c41016a22014106746a200f200c417f736a221141067410ea081a200741086a221920084106746a221241386a2010290300370000201241306a2013290300370000201241286a2014290300370000201241206a2015290300370000201241186a2016290300370000201241106a2017290300370000201241086a201829030037000020122004290300370000201920094106746a200541086a200641067410e9081a200441c0006a41186a2210200e41c8056a2213200c4105746a221241186a290000370300200441c0006a41106a2214201241106a290000370300200441c0006a41086a2215201241086a290000370300200420122900003703402012201320014105746a201141057410ea081a200741c8056a221120084105746a221241186a2010290300370000201241106a2014290300370000201241086a201529030037000020122004290340370000201120094105746a200541c8056a200641057410e9081a200e41a8086a221220014102746a200c410274220c20126a41086a200f2001417f736a41027441046a10ea081a02402001200f4f0d00200c200e6a41ac086a211203402012280200220c20013b0104200c200e360200201241046a2112200f200141016a2201470d000b0b200e200e2f0106417f6a3b01060240200d4102490d002006200a20096b470d03200720094102746a41a8086a200541a8086a200641016a41027410e9081a200a20084d0d00200641016a210c200720084102746a41ac086a21012009211203402001280200220e20123b0104200e2007360200200141046a2101201241016a2112200c417f6a220c0d000b0b2005102e200020073602042000200b36020020002009410020021b20036a360208200441e0006a24000f0b41f09fc7004191014184a1c7001039000b419c9dc700412a41c89dc7001039000b41f49bc7004128419c9cc7001039000be307040c7f017e017f0c7e0240024002400240200041186a2802002f0106220220016a2203410c4f0d00200041106a28020022042f010622052001490d012004200520016b22063b0106200041186a220428020020033b0106200428020041086a220720014106746a2007200241067410ea081a200428020041c8056a220720014105746a2007200241057410ea081a2005200641016a22076b22022001417f6a470d02200428020041086a200041106a220828020020074106746a41086a2002410674220910e9081a200428020041c8056a200828020020074105746a41c8056a2002410574220a10e9081a200041046a280200220b2000280208220c4106746a220241c0006a220d290000210e2008280200220f20064105746a220541e0056a2900002110200541c8056a2900002111200541d0056a2900002112200541d8056a2900002113200f20064106746a220641086a2900002114200641106a2900002115200641186a2900002116200641206a2900002117200641286a2900002118200641306a2900002119200641386a290000211a200d200641c0006a290000370000200241386a2206290000211b2006201a370000200241306a2206290000211a20062019370000200241286a2206290000211920062018370000200241206a2206290000211820062017370000200241186a2206290000211720062016370000200241106a2206290000211620062015370000200241086a2202290000211520022014370000200b200c4105746a220241d8056a2206290000211420062013370000200241d0056a2206290000211320062012370000200241c8056a2206290000211220062011370000200241e0056a2202290000211120022010370000200428020020096a220241c0006a200e370000200241386a201b370000200241306a201a370000200241286a2019370000200241206a2018370000200241186a2017370000200241106a2016370000200241086a20153700002004280200200a6a220241e0056a2011370000200241d8056a2014370000200241d0056a2013370000200241c8056a2012370000200028020c21020240024020002802140d002002450d010c050b2002450d04200828020021022004280200220641a8086a2200200141027422046a2000200320016b41027441046a10ea081a2000200220074102746a41a8086a200410e9081a200341016a21044100210103402000280200220220013b010420022006360200200041046a21002004200141016a2201470d000b0b0f0b41e49ec700413341989fc7001039000b41a89fc700412741d09fc7001039000b41f49bc7004128419c9cc7001039000b41e2a0cc00412841e09fc7001039000bb60806097f017e037f047e017f087e0240024002400240200041106a28020022022f0106220320016a2204410c4f0d00200041186a2802002f010622052001490d01200220043b0106200041186a2206280200200520016b22073b0106200041046a2802002208200028020822094106746a220241206a220a290000210b2006280200220c2001417f6a220d410574220e6a220541e0056a290000210f200541c8056a2900002110200541d0056a2900002111200541d8056a2900002112200c200d41067422136a220541286a2900002114200541306a2900002115200541386a2900002116200541c0006a2900002117200541086a2900002118200541106a2900002119200541186a290000211a200a200541206a290000370000200241186a2205290000211b2005201a370000200241106a2205290000211a20052019370000200241086a2205290000211920052018370000200241c0006a2205290000211820052017370000200241386a2205290000211720052016370000200241306a2205290000211620052015370000200241286a2202290000211520022014370000200820094105746a220241d8056a2205290000211420052012370000200241d0056a2205290000211220052011370000200241c8056a2205290000211120052010370000200241e0056a220229000021102002200f370000200041106a220528020020034106746a220241c0006a2018370000200241386a2017370000200241306a2016370000200241286a2015370000200241206a200b370000200241186a201b370000200241106a201a370000200241086a2019370000200528020020034105746a220241e0056a2010370000200241d8056a2014370000200241d0056a2012370000200241c8056a2011370000200d2004200341016a22026b470d02200528020020024106746a41086a200628020041086a201310e9081a200528020020024105746a41c8056a200628020041c8056a200e10e9081a200628020041086a220d200d20014106746a200741067410ea081a200628020041c8056a220d200d20014105746a200741057410ea081a200028020c210d0240024020002802140d00200d450d010c050b200d450d042005280200220d20024102746a41a8086a2006280200220641a8086a22002001410274220510e9081a2000200020056a200741027441046a10ea081a0240200420034d0d002003410274200d6a41ac086a210003402000280200220520023b01042005200d360200200041046a2100200241016a21022001417f6a22010d000b0b2007417f460d00200641a8086a2102200741016a21054100210003402002280200220120003b010420012006360200200241046a21022005200041016a2200470d000b0b0f0b41d89dc7004132418c9ec7001039000b419c9ec700412841c49ec7001039000b41f49bc7004128419c9cc7001039000b41e2a0cc00412841d49ec7001039000b8c0701157f230041e0006b2202240002400240200141106a28020022032f0106220441016a2205200141186a28020022062f010622076a2208410c4f0d00200128020821092001280200210a2001280204220b2f0106210c200320083b0106200241386a220d200b41086a220e20094106746a220f41386a290000370300200241306a2210200f41306a290000370300200241286a2211200f41286a290000370300200241206a2212200f41206a290000370300200241186a2213200f41186a290000370300200241106a2214200f41106a290000370300200241086a2215200f41086a2900003703002002200f290000370300200f200e200941016a22014106746a200c2009417f736a220e41067410ea081a200341086a221620044106746a220f41386a200d290300370000200f41306a2010290300370000200f41286a2011290300370000200f41206a2012290300370000200f41186a2013290300370000200f41106a2014290300370000200f41086a2015290300370000200f2002290300370000201620054106746a200641086a200741067410e9081a200241c0006a41186a220d200b41c8056a221020094105746a220f41186a290000370300200241c0006a41106a2211200f41106a290000370300200241c0006a41086a2212200f41086a2900003703002002200f290000370340200f201020014105746a200e41057410ea081a200341c8056a220e20044105746a220f41186a200d290300370000200f41106a2011290300370000200f41086a2012290300370000200f2002290340370000200e20054105746a200641c8056a200741057410e9081a200b41a8086a220f20014102746a20094102742209200f6a41086a200c2001417f736a41027441046a10ea081a02402001200c4f0d002009200b6a41ac086a210f0340200f280200220920013b01042009200b360200200f41046a210f200c200141016a2201470d000b0b200b200b2f0106417f6a3b01060240200a4102490d002007200820056b470d02200320054102746a41a8086a200641a8086a200741016a41027410e9081a200820044d0d00200741016a210f200441027420036a41ac086a210103402001280200220920053b010420092003360200200141046a2101200541016a2105200f417f6a220f0d000b0b2006102e2000200b3602042000200a360200200241e0006a24000f0b419c9dc700412a41c89dc7001039000b41f49bc7004128419c9cc7001039000b130020004108360204200041a8a1c7003602000bb90706057f017e017f017e037f037e23004180016b22022400200241106a200110d8062002280210210120022002280218220336022420022001360220200241286a2001200310ed02024002400240024020022802282204450d00200228022c21052002200241306a28020036023c20022004360238200241086a200241386a10ab010240024020022802080d0002400240200228020c2206200228023c4105762201200120064b1b22014105742203417f4c0d000240024020010d00410821030c010b2003102c2203450d080b2001ad2107024002402006450d00200241d8006a41036a21080340200241e8006a200241386a10a50120022d00684101460d04200228023c22014110490d04200229006921092002200141706a220a36023c20022002280238220b41106a220c360238200a450d04200b41086a290000210d200b290000210e20022001416f6a36023c2002200c41016a3602384100210b024002400240200c2d00000e03020001070b4101210b0c010b4102210b0b20022002280058360240200220082800003600432002200228004336005320022002280240360250200220022802503602482002200228005336004b02402007422088220fa722012007a7470d00200141016a220c2001490d042001410174220a200c200c200a491b220c4104200c41044b1b220c41ffffff3f71200c46410374210a200c410574210c0240024020010d00200241003602680c010b20024108360270200220033602682002200f4205863e026c0b200241d8006a200c200a200241e8006a107d2002280260210c20022802584101460d03200228025c2103200742808080807083200c410576ad8421070b200320014105746a2201200b3a00182001200d3703082001200e37030020012009370310200120022802483600192001411c6a200228004b36000020074280808080107c21072006417f6a22060d000b0b2003450d030c040b200c0d070b1038000b0240200742ffffff3f83500d002003102e0b0b4100210320024100360260200242013703582002410a3602442002200241206a3602402002200241d8006a360250200241fc006a41013602002002420137026c200241909dc5003602682002200241c0006a360278200241d0006a419cebc000200241e8006a103d1a2002280258200228026010ef02200228025c450d002002280258102e0b02402005450d002004102e0b20030d010b20004100360208200042083702000c010b20002007370204200020033602000b02402002280214450d002002280210102e0b20024180016a24000f0b1036000bf91106027f0a7e017f017e037f047e230041a0026b22032400200341c0006a200010c802200341a0016a20032802402204200328024810c902200341a0016a41386a2903002105200341a0016a41306a2903002106200341a0016a41286a2903002107200341a0016a41206a2903002108200341a0016a41186a2903002109200341a0016a41106a290300210a200341e0016a290300210b20032903a801210c20032903a001210d200341f0006a41086a200341f0016a2903003703002003200341e8016a29030037037002400240200d4201510d0042002108200341386a4200370300200341306a4200370300200341286a4200370300200341206a4200370300200341186a4200370300200341106a4200370300200341086a4200370300200342003703004200210c4200210a4200210942002107420021064200210d420021050c010b200341206a2007370300200341286a2006370300200341106a2009370300200341306a2005370300200320083703182003200c3703002003200b3703382003200a370308200c210d200a21050b02402003280244450d002004102e0b02400240200d2005844200520d0020072003290310842006200341186a29030084844200520d002003290330200341386a2903008450450d004200210e4100210f0c010b4201210e4101210f0b420021100240200e4201510d004200210c4200210a42002109420021080b0240024020020d00420021054200210b420021070c010b2002410574211142002110420021054200210b42002107200121040340024002400240200441186a2d00002212417f6a41ff017141014b0d002007200441086a2903002206200b2004290300220d56200720065620072006511b22131b2107200b200d20131b210b201241ff01714102460d010c020b201241ff01710d01200441086a29030021062004290300210d0b200520062010200d56200520065620052006511b22121b21052010200d20121b21100b200441206a2104201141606a22110d000b0b200341d8016a2005370300200341c8016a221120073703002003200c3703a001200320103703d0012003200b3703c001200320083703b8012003200a3703a801200320093703b001420021074201210d200e420152ad210b02400240427f200c20097c22062006200c542204200a20087c2004ad7c2206200a542006200a511b22041b221042ffc7afa02556427f200620041b22064200522006501b0d002009200c842008200a848422075021044200210d2007420052ad21070c010b200341d0016a290300211420112903002115200341c0016a2903002116200341b0016a290300210e20032903b801211720032903a801210820032903a0012109410121040b200341e8006a2006370300200341e0006a22112010370300200341d0006a200a3703002003200c370348200320073703582003200b3703400240024002400240200f200d420152720d00200320003602a0012000200341a0016a10bd060c010b0240200f4101732212200d420151720d00200320003602a0012000200341a0016a10be0641ff017122124103460d01024020120e03030200030b20040d03200320113602a001200341a0016a10cc020c030b200d4201522012710d010b20034180016a200010c802200341a0016a2003280280012211200328028801221210c90220032903a0012106200341f0006a41086a2204200341f0016a2903003703002003200341e8016a2903003703700240024020064201510d0020034190016a41086a420037030020034200370390010c010b20034190016a41086a200429030037030020032003290370370390010b200341e8016a200329039001370300200341f0016a20034190016a41086a290300370300200342013703a001200341d8016a20144200200d42015122041b370300200341d0016a2015420020041b370300200341a0016a41286a2016420020041b370300200341c0016a2017420020041b370300200341b8016a200e420020041b370300200341a0016a41106a2008420020041b370300200341e0016a2005420020041b37030020032009420020041b3703a80120112012200341a0016a41086a10c8050240200328028401450d002011102e0b200341c0006a41106a290300210a200341c0006a41286a29030021062003290348210c200329036021102003290340210b200329035821070b0240200b4201520d00200341d8016a200a370300200341d0016a200c370300200341a0016a41086a41003a0000200341a9016a2000290000370000200341b1016a200041086a290000370000200341b9016a200041106a290000370000200341c1016a200041186a290000370000200341033a00a001200341a0016a10fe010b02400240200750450d00420021070c010b200341a0016a41186a200041186a290000370300200341a0016a41106a200041106a290000370300200341a0016a41086a200041086a290000370300200320002900003703a001420121070b200341186a200341a0016a41186a2204290300220d370300200341106a200341a0016a41106a22112903002205370300200341086a200341a0016a41086a290300220b370300200320032903a001220a370300200341d0016a2006370300200341c8016a221220103703002011200b37030020042005370300200341c0016a200d370300200320073703a0012003200a3703a801200341a0016a10d20420032903a001500d0020032012360240200341c0006a10cc020b200341a0016a200010d80620032802a001221120032802a801108f022104024020032802a401450d002011102e0b024002400240024020020d00200341a0016a200010d80620032802a001221120032802a80110ff01024020032802a401450d002011102e0b2004450d012000108a060c010b2003200010d80620024105744104722211417f4c0d0120032802082113200328020021122011102c220f450d02200341003602a801200320113602a4012003200f3602a0012002200341a0016a107620012002200341a0016a109e012012201320032802a001221120032802a80110b201024020032802a401450d002011102e0b02402003280204450d002012102e0b20040d0020001083061a0b200341a0026a24000f0b1038000b1036000bc70101047f230041c0006b220224004109210341ceeac7002104410221050240024002400240200141ff01710e0400010203000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602242002418883ca003602202002200241206a360218200241086a41b4eac7001044000b410a210341c4eac7002104410021050c010b411721034194a4c7002104410121050b20004183323b0100200041086a2003360200200041046a2004360200200041026a20053a0000200241c0006a24000bcf0202027f047e230041f0006b220724000240024020022003844200520d00200041063a00000c010b200741e0006a200110c802200741086a20072802602208200728026810c90220072903084201512101200741386a2903002102200741306a2903002103200741c8006a2903002109200741c0006a290300210a02402007280264450d002008102e0b2002420020011b210b2003420020011b210c2009420020011b2102200a420020011b210302400240024041004102410120044101711b200441ff01714101461b0e03020100020b200b2002200c200356200b200256200b2002511b22011b2102200c200320011b21030c010b200c2103200b21020b02402003200558200220065820022006511b0d00200041830a3b0100200041086a4115360200200041046a41a0a3c700360200200041026a41013a00000c010b200041063a00000b200741f0006a24000bac0201037f230041e0006b22022400200241f8fcc6004108108102200241106a41f0faca004105108102024002404120102c2203450d002002422037023420022003360230200241306a200141201074200241c0006a200228023022012002280238220310d803200241dc006a200120036a360200200220013602582002200241d0006a3602542002200241c0006a360250200241206a200241d0006a107c02402002280234450d002001102e0b2002280228220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b20004100360208200020013602042000200436020020002002411010742000200241106a411010742000200228022022012003107402402002280224450d002001102e0b200241e0006a24000f0b1036000b1038000b8e3504087f017e047f0d7e230041a0036b2201240020014190016a2202420037030020014188016a22034200370300200141f8006a41086a2204420037030020014200370378200141b0026a41a0dac800410f1081022004200141b0026a41086a2205290000370300200120012900b002370378200141b0026a41afdac800410d10810220022005290000370300200320012900b00237030020014120360294032001200141f8006a36029003200141e8006a200141f8006a412010ed0202400240200128026822020d00410221040c010b200128026c21062001200141e8006a41086a28020022043602e402200120023602e0020240024020044104490d00200228000021052001200241046a3602e00220012004417c6a22073602e40220074104490d00200228000421072001200441786a3602e4022001200241086a3602e002200141e0006a200141e0026a10ab0102402001280260450d00200141003602f0020c010b200141f0026a200141e0026a200128026410990120012802f0022208450d0020012902f402210941002104200141003a00d0020240024020012802e402220a450d0020012802e002220b2d0000210c2001200a417f6a220d3602e4022001200b41016a3602e0020240200c4101460d000c040b200d41044f0d010b0c020b200b280001210c2001200a417b6a3602e4022001200b41056a3602e002410121040c010b200141003602b802200142013703b0022001410a3602d402200120014190036a3602d0022001200141b0026a36029c0320014184036a4101360200200142013702f402200141909dc5003602f0022001200141d0026a360280032001419c036a419cebc000200141f0026a103d1a20012802b00220012802b80210ef02024020012802b402450d0020012802b002102e0b410221040b2006450d002002102e0b0240024002400240024002400240024020044102460d0020014188036a200c360200200141fc026a20093702002001200436028403200120083602f802200120073602f402200120053602f002200141f8026a2108024020052000470d00024020044101460d00200141b0026a200810e00120014188016a200736020020014184016a200141b8026a28020036020020014100360278200120012903b00237027c200141f8006a108c060c010b200141b0026a200810e0012001418c016a2007360200200141f8006a41086a20012903b00237030020014188016a200141b0026a41086a2802003602002001200c36027c20014101360278200141f8006a108c060b024020012802f40220012802f0026a2000470d0020014180036a28020041286c4105722202417f4c0d022002102c2204450d0620014100360280012001200236027c20012004360278200141013a00d002200141f8006a200141d0026a4101107420012802f80221022001280280032204200141f8006a10760240200441286c2204450d00200220046a21040340200141f8006a2002412010742001200241206a2903003703b002200141f8006a200141b0026a41081074200241286a22022004470d000b0b41bcdac80041142001280278220220012802800110b2010240200128027c450d002002102e0b200141f8006a41086a2202200829020037030020014188016a2204200841086a2802003602002001410036027c200141073a0078200141f8006a10fe0120014190016a4200370300200442003703002002420037030020014200370378200141b0026a41a0dac800410f1081022002200141b0026a41086a2204290000370300200120012900b002370378200141b0026a41afdac800410d108102200341086a2004290000370000200320012900b002370000200141f8006a412010ff010c010b20012802fc022202450d00200241286c450d0020012802f802102e0b20014190016a420037030020014188016a4200370300200141f8006a41086a2202420037030020014200370378200141b0026a41a0dac800410f1081022002200141b0026a41086a2204290000370300200120012900b002370378200141b0026a41d0dac8004105108102200341086a2004290000370000200320012900b002370000200141203602e4022001200141f8006a3602e002200141e8006a200141f8006a412010ed02024020012802682202450d00200141e8006a41086a2802002105200128026c210741002104200141003a00d0020240024002402005450d0002400240024020022d00000e0405000102030b2005417f6a4108490d0220022900012109410121040c040b410221040c020b2005417f6a4108490d0020022900012109410321040c020b200141003602b802200142013703b0022001410a3602d4022001200141e0026a3602d0022001200141b0026a3602900320014184036a4101360200200142013702f402200141909dc5003602f0022001200141d0026a3602800320014190036a419cebc000200141f0026a103d1a20012802b00220012802b80210ef02024020012802b402450d0020012802b002102e0b410421040b0b02402007450d002002102e0b024002402004417f6a0e03010200020b2009422088a7210202402009a722042000470d00200141043602782001200236027c200141f8006a108c060b200220046a2000470d0120014190016a420037030020014188016a4200370300200141f8006a41086a2202420037030020014200370378200141b0026a41a0dac800410f1081022002200141b0026a41086a2204290000370300200120012900b002370378200141b0026a41d0dac8004105108102200341086a2004290000370000200320012900b002370000200141f0026a41002001200110da06200141f8006a412020012802f002220220012802f80210b201024020012802f402450d002002102e0b2001410236027c200141073a0078200141f8006a10fe010c010b2009422088a7210202402009a722042000470d00200141033602782001200236027c200141f8006a108c060b200220046a2000470d0020014190016a420037030020014188016a4200370300200141f8006a41086a2202420037030020014200370378200141b0026a41a0dac800410f1081022002200141b0026a41086a2204290000370300200120012900b002370378200141b0026a41d0dac8004105108102200341086a2004290000370000200320012900b002370000200141f0026a41022001200110da06200141f8006a412020012802f002220220012802f80210b201024020012802f402450d002002102e0b2001410136027c200141073a0078200141f8006a10fe010b200141f0026a109403024020012903f002427f7c4202540d00200141f0026a41106a2903002109200141b0026a41186a22044200370300200141b0026a41106a22034200370300200141b0026a41086a22024200370300200142003703b002200141e8006a41e8fcc60041091081022002200141e8006a41086a2200290000370300200120012900683703b002200141e8006a41b08ec90041031081022004200029000037030020032001290068370300200141d0006a200141b0026a108503200141c0006a2001290358420020012802501b220e42e80780420042e807420010e808200141f8006a41186a22044200370300200141f8006a41106a22034200370300200141f8006a41086a2200420037030020014200370378200141b0026a4192fdc600410710810220002002290000370300200120012900b002370378200141b0026a41d0adc600410910810220042002290000370300200320012900b002370300200141003602b802200142013703b002200120093e0268200141b0026a200141e8006a41041074200141013a00d002200141b0026a200141d0026a41011074200120012903402209200e42e807827c220e427f200141c0006a41086a290300200e200954ad7c501b370368200141b0026a200141e8006a41081074200141f8006a412020012802b002220220012802b80210b20120012802b402450d002002102e0b20014190016a22034200370300200141f8006a41106a22024200370300200141f8006a41086a2204420037030020014200370378200141f0026a4190dac800410a1081022004200141f0026a41086a2200290000370300200120012900f002370378200141f0026a419adac800410610810220032000290000370300200220012900f002370300200141f8006a412010ff0120034200370300200242003703002004420037030020014200370378200141f0026a4190dac800410a10810220042000290000370300200120012900f002370378200141f0026a41d097c900410c10810220032000290000370300200220012900f002370300200141f8006a412010ff0120034200370300200242003703002004420037030020014200370378200141f0026a4180fdc600411210810220042000290000370300200120012900f002370378200141f0026a41dc98c500411110810220032000290000370300200220012900f002370300200141286a200141f8006a10e904200141286a41106a290300210f2001290330211020012802282103200141f8006a4201420042808090bbbad6adf00d420042c0843d420010ea040240024020012802784101470d00427f2111427f21090c010b20022903002109200429030021110b200141f8006a10a903200141f8006a41086a200141a8016a200141a0016a290300501b290300210e200141c8026a22044200370300200141b0026a41106a22004200370300200141b0026a41086a22054200370300200142003703b002200141e8006a41d9fcc60041061081022005200141e8006a41086a2207290000370300200120012900683703b002200141e8006a41d4f2cb00410b1081022004200729000037030020002001290068370300200141f0026a200141b0026a10f20420012903f802211220012903f0022113200141f0026a4203420042808090bbbad6adf00d420042a08d06420010ea04200e2012420020134201511b22122012200e561b21120240024020012802f0024101470d00427f2113427f21140c010b200141f0026a41106a2903002114200141f0026a41086a29030021130b200141186a200e42808090bbbad6adf00d8222154200428080e4ceceb58bbc03420010e808200141086a2001290318200141186a41086a29030042808090bbbad6adf00d420010e608200141f0026a2012200e42808090bbbad6adf00d80428080e4ceceb58bbc037e20154202882001290308428080c89d9deb96f80656200141086a41086a29030022154200522015501bad7c7c2215201220155622041b22162015201220041b22177d42002016201754ad7d42808090bbbad6adf00d4200200e4201200e4201561b420010ea040240024020012802f0024101470d00427f210e427f21160c010b20014180036a2903002116200141f0026a41086a290300210e0b200141f0026a200e2016200e201642808090bbbad6adf00d420010ea040240024020012802f0024101470d00427f2117427f21180c010b20014180036a2903002118200141f8026a29030021170b200141f0026a201320142013201442808090bbbad6adf00d420010ea040240024020012802f0024101470d00427f2119427f211a0c010b20014180036a290300211a200141f8026a29030021190b200141f0026a2019201a42808090bbbad6adf00d4200428080a0f6f4acdbe01b420010ea0420012802f0024101460d052011201042808090bbbad6adf00d20031b22195421042009200f420020031b220f5121032009200f54210020014180036a22052903002110200141f8026a2207290300211a200141f0026a20132014200e201642808090bbbad6adf00d420010ea040240024020012802f0024101470d00427f2116427f21140c010b20052903002114200729030021160b2004200020031b2104200141f0026a201a20102017201842808090bbbad6adf00d420010ea040240024020012802f0024101470d00427f2110427f21170c010b20014180036a2903002117200141f8026a29030021100b200f200920041b210e2019201120041b21130240024020122015540d00427f2115200141f0026a427f201620107c221220122016542204201420177c2004ad7c221220145420122014511b22041b427f201220041b2013200e42808090bbbad6adf00d420010ea040240024020012802f0024101470d00427f21120c010b20014180036a2903002112200141f8026a29030021150b427f200e20127c201320157c22142013542204ad7c221220042012200e542012200e511b22041b220e2009427f201420041b2212201156200e200956200e2009511b22041b21092012201120041b210e0c010b200141f0026a4200201620107d22122012201656201420177d2016201054ad7d221220145620122014511b22041b4200201220041b2013200e42808090bbbad6adf00d420010ea040240024020012802f0024101470d00427f2112427f21140c010b20014180036a2903002114200141f8026a29030021120b4200200e20147d2013201254ad7d2214201320127d22122013562014200e562014200e511b22041b220e20094200201220041b2212201156200e200956200e2009511b22041b21092012201120041b210e0b200141f8006a41186a4200370300200141f8006a41106a4200370300200141f8006a41086a2204420037030020014200370378200141f0026a4180fdc60041121081022004200141f0026a41086a2203290000370300200120012900f002370378200141f0026a41dc98c5004111108102200241086a2003290000370000200220012900f002370000200120093703f8022001200e3703f002200141f8006a4120200141f0026a411010b201200141b0026a41186a22044200370300200141b0026a41106a22024200370300200141b0026a41086a22034200370300200142003703b002200141e8006a41e8fcc60041091081022003200141e8006a41086a2200290000370300200120012900683703b002200141e8006a41d48ec90041091081022004200029000037030020022001290068370300200141b0026a108603220441ff01714102460d06200141b0026a412010ff012004410171450d06200141b0026a41186a4200370300200141b0026a41106a4200370300200141b0026a41086a22044200370300200142003703b002200141e8006a41a8f8c60041041081022004200141e8006a41086a2203290000370300200120012900683703b002200141e8006a41978cc500410b108102200241086a200329000037000020022001290068370000200141f8006a200141b0026a10a004024020012d007822044102460d00200141b0026a412010ff010b200141f0026a41186a20014191016a290000370300200141f0026a41106a20014189016a290000370300200141f0026a41086a20014181016a290000370300200120012900793703f0020240200441037122044103460d0020040e03040004040b200141f8006a41186a200141f0026a41186a290300370300200141f8006a41106a200141f0026a41106a290300370300200141f8006a41086a200141f0026a41086a290300370300200120012903f002370378200141b0026a41186a4200370300200141b0026a41106a4200370300200141b0026a41086a22044200370300200142003703b002200141e8006a41a8f8c60041041081022004200141e8006a41086a2203290000370300200120012900683703b002200141e8006a41ee8bc500410c108102200241086a2003290000370000200220012900683700002001200141b0026a4120108e0241002104200141b0026a2001280204410020012802001b220510db06200141e8006a20012802b002220720012802b80210b60502400240200128026822030d00200141003602d802200142013703d00241012103410021000c010b2001200129026c22093702d402200120033602d0022009422088a721002009a721040b024020012802b402450d002007102e0b200041ff014b0d01200141b0026a41186a220c200141f8006a41186a290300370300200141b0026a41106a2208200141f8006a41106a290300370300200141b0026a41086a2206200141f8006a41086a290300370300200120012903783703b0020240024020002004470d00200441016a22072004490d022004410174220a2007200a20074b1b22074104200741044b1b220741ffffff3f71200746210a200741057421070240024020040d00200141003602680c010b200141f0006a4101360200200120033602682001200441057436026c0b200141e0026a2007200a200141e8006a107d200141e8026a280200210420012802e0024101460d01200120012802e40222033602d0022001200441057622043602d4020b200320004105746a220720012903b002370000200741186a200c290300370000200741106a2008290300370000200741086a20062903003700002001200041016a3602d8022005200141d0026a10dc060c030b20040d040b1038000b4120102c2200450d0220002001290378370000200041186a200141f8006a41186a290300370000200041106a200141f8006a41106a290300370000200041086a200141f8006a41086a29030037000020014281808080103702b402200120003602b002200541016a2205200141b0026a10dc062000102e200141b0026a41186a4200370300200141b0026a41106a4200370300200141b0026a41086a22004200370300200142003703b002200141e8006a41a8f8c60041041081022000200141e8006a41086a2207290000370300200120012900683703b002200141e8006a41ee8bc500410c108102200241086a20072900003700002002200129006837000020012005360268200141b0026a4120200141e8006a410410b2010b200441ffffff3f71450d002003102e0b200141c8026a22004200370300200141c0026a22054200370300200141b0026a41086a22044200370300200142003703b002200141e8006a41a8f8c60041041081022004200141e8006a41086a2203290000370300200120012900683703b002200141e8006a41848cc5004113108102200241086a2207200329000037000020022001290068370000200141b0026a412010ff01200042003703002005420037030020044200370300200142003703b002200141e8006a41a8f8c600410410810220042003290000370300200120012900683703b002200141e8006a41a28cc50041081081022007200329000037000020022001290068370000200141b0026a412010ff01200141a0036a24000f0b1036000b10dd06000b41d2d9c800412b4180dac8001039000bd00101017f230041106b2204240020004100360208200042013702000240024002400240024020010e0400010203000b200441003a000c20002004410c6a410110740c030b200441013a000c20002004410c6a410110742004200236020c20002004410c6a410410742004200336020c20002004410c6a410410740c020b200441023a000c20002004410c6a410110740c010b200441033a000c20002004410c6a410110742004200236020c20002004410c6a410410742004200336020c20002004410c6a410410740b200441106a24000b850201037f230041d0006b22022400200241086a41a8f8c6004104108102200241186a4197dbc8004111108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000bd60101057f230041206b220224002002200010db0602400240200128020822004105744104722203417f4c0d002001280200210120022802082104200228020021052003102c2206450d012002410036021820022003360214200220063602102000200241106a107602402000450d00200041057421000340200241106a200141201074200141206a2101200041606a22000d000b0b2005200420022802102201200228021810b20102402002280214450d002001102e0b02402002280204450d002005102e0b200241206a24000f0b1038000b1036000b110041c9dbcc00411f41e8dbcc001039000ba7cc010a077f017e027f017e177f037e0b7f027e067f037e230022012102200141a0136b41607122012400200141b8016a10f40402400240024020012d00b8014101470d0020012802bc012000470d00200141a0056a41014196a9c700412410df0602400240024020012802a0052203450d00200141a8056a28020041034d0d0002402003280000220420004b0d00200441056a2000490d010b20012802a405450d012003102e0c030b200120003602c001200120003602b003200141d80f6a41086a200141a0056a41086a280200360200200120012903a0053703d80f41014196a9c7004124200141d80f6a200141b0036a410410e0060d010b0c010b200141d80f6a10e10620012802d80f410b702105200141d80f6a10f5040240024002400240024020012802d80f2206450d00200141d80f6a41106a22072903002108200141e40f6a2209280200210a20012902dc0f210b200141d00e6a41186a22044200370300200141d00e6a41106a220c4200370300200141d00e6a41086a220d4200370300200142003703d00e200141d80f6a41a5fec600411a108102200d200141d80f6a41086a2203290000370300200120012900d80f3703d00e200141d80f6a4194c5c800410e10810220042003290000370300200c20012900d80f370300200141b0016a200141d00e6a4120108e02024020012802b001450d0020012802b401210e200120083702940d2001200a3602900d2001200b3702a405200120063602a005200141d80f6a200141900d6a200141a0056a10b904200141f00e6a41086a20032802002204360200200120012903d80f220b3703f00e200141800f6a41086a200141ec0f6a2802002206360200200120012902e40f22083703800f200141900d6a41086a20043602002001200b3703900d200141a0056a41086a2006360200200120083703a005200141d80f6a200e200141900d6a200141a0056a10e206200141a80a6a41086a200141d80f6a41186a280200360200200120072903003703a80a024020012802d80f4101470d000c060b2003280200210f2009280200210420012802dc0f2110200141900f6a41086a200141a80a6a41086a280200360200200120012903a80a3703900f200141900f6a20054200420010c004201020044102746a2107024002400240200e0d00201021032010210d0c010b201021032010210d2004450d0020044102742105201021032010210d024003402003220641046a210320062802002204450d022004280208220a41016a41004c0d032004200a36020802400240200441f4006a2d00000d0020042004280200417f6a220636020020060d01200441046a22062006280200417f6a220636020020060d012004102e0c010b200d2004360200200d41046a210d200e417f6a220e450d020b2005417c6a22050d000b200721030c010b200641046a21030b0240200720036b2204450d00200441027541027421040340200328020022062006280200417f6a3602000240200328020022062802000d00200641046a22062006280200417f6a3602002003280200220641046a2802000d002006102e0b200341046a21032004417c6a22040d000b0b02400240200d20106b2211410275221241144b0d00201241014d0d074102210320102012417e6a22044102746a2106034020122004490d022006200310e3062006417c6a2106200341016a21032004417f6a2204417f470d000c080b0b2012410176220341ffffffff03712003470d0a20034102742213417f4c0d0a2013102c2214450d092010417c6a2115201041746a21164104211741002118410021192012211a0340201a210a4100211a410121040240200a417f6a220d450d000240024002400240024002400240024002400240024002402010200d4102746a2802002203280208220441016a41004c0d00200320043602082010200a417e6a22054102746a2802002204280208220641016a41004c0d01200328025021032004200636020820032004280250490d042016200a4102746a21034100211a410021060340024020052006470d00200a21040c0e0b200341046a2802002204280208220d41016a41004c0d032004200d3602082003280200220d280208220e41016a41004c0d0420042802502104200d200e3602082003417c6a2103200641016a21062004200d2802504f0d000b200641016a21042006417f73200a6a210d0c050b41bcd9cc004118200141d80f6a41c4f8c90041d4f8c900103e000b41bcd9cc004118200141d80f6a41c4f8c90041d4f8c900103e000b41bcd9cc004118200141d80f6a41c4f8c90041d4f8c900103e000b41bcd9cc004118200141d80f6a41c4f8c90041d4f8c900103e000b2016200a41027422056a2103024003400240200d4101470d004100210d0c020b200341046a2802002204280208220641016a41004c0d032004200636020820032802002206280208220e41016a41004c0d04200428025021042006200e3602082003417c6a2103200d417f6a210d20042006280250490d000b0b200a200d490d03200a20124b0d04200a200d6b2204410176220e450d002010200d4102746a2103201520056a21060340200328020021052003200628020036020020062005360200200341046a21032006417c6a2106200e417f6a220e0d000b0b0240200d0d00200d211a0c070b0240200441094d0d00200d211a0c070b200a20124b0d04200a200d6b2104200d417f6a21032015200d4102746a21060340200a2003490d0d2006200441016a220410e3062003417f6a220d20034f0d062006417c6a2106200d21032004410a490d000c060b0b41bcd9cc004118200141d80f6a41c4f8c90041d4f8c900103e000b41bcd9cc004118200141d80f6a41c4f8c90041d4f8c900103e000b200d200a41e4d1cc001057000b200a201241e4d1cc00104d000b200a200d417f6a2203490d07200a201241f4d1cc00104d000b200d41016a211a0b024020192018470d00201841016a22032018490d0c201841017422062003200620034b1b22034104200341044b1b220341ffffffff01712003464102742106200341037421030240024020180d00200141003602d80f0c010b200141043602e00f200120173602d80f200120184103743602dc0f0b200141a0056a20032006200141d80f6a107d20012802a8052103024020012802a0054101470d0020030d0c0c0d0b20012802a4052117200341037621180b201720194103746a220320043602042003201a360200201941016a221b21190240201b4102490d000240024002400240024002400240034002400240024002402017201b2219417f6a221b4103746a2203280200450d00201941037420176a220e41746a280200220d200328020422044d0d00201941024d0d0c20172019417d6a22034103746a28020422062004200d6a4d0d01201941034d0d0c200e41646a2802002006200d6a4b0d0c0c010b20194103490d012003280204210420172019417d6a22034103746a28020421060b20062004490d010b2019417e6a21030b02402019200341016a221c4d0d00201920034d0d02201720034103746a221d280204221e201d2802006a22032017201c4103746a221f2802002220490d03200320124b0d04201020204102746a2221201f280204222241027422046a21062003410274210e02400240200320206b220520226b22032022490d0020142021200410e908220320046a210d0240024020224101480d00200520224a0d010b20212104200321030c020b2010200e6a2107200321032021210403402006280200220e280208220541016a41004c0d08200e200536020820032802002205280208220a41016a41004c0d09200e280250210e2005200a360208200420062003200e200528025049220e1b2802003602002003200341046a200e1b2103200441046a2104200641046a2006200e1b220620074f0d02200d20034b0d000c020b0b201420062003410274220410e908220720046a210d0240024020224101480d00200341014e0d010b20062104200721030c010b2015200e6a210a200621040340200d417c6a22032802002206280208220e41016a41004c0d092006200e3602082004417c6a220e2802002205280208220941016a41004c0d0a2006280250210620052009360208200a200e2003200620052802504922061b280200360200200d200320061b210d02402021200e200420061b2204490d00200721030c020b200a417c6a210a200721032007200d490d000b0b20042003200d20036b417c7110e9081a201d41046a201e20226a360200201d2020360200201f201f41086a2019201c417f736a41037410ea081a41012119201b41014d0d090c010b0b201c20194184d2cc00103c000b200320194194d2cc00103c000b2020200341a4d2cc001057000b2003201241a4d2cc00104d000b41bcd9cc004118200141d80f6a41c4f8c90041d4f8c900103e000b41bcd9cc004118200141d80f6a41c4f8c90041d4f8c900103e000b41bcd9cc004118200141d80f6a41c4f8c90041d4f8c900103e000b41bcd9cc004118200141d80f6a41c4f8c90041d4f8c900103e000b201a450d060c000b0b2004201241c4d1cc001056000b41bcd9cc004118200141d80f6a4190b7c00041a0b7c000103e000b0240200842ffffff3f83500d00200a102e0b0240200b422088a72203450d00200341386c21042006412c6a210303400240200328020041ffffff3f71450d002003417c6a280200102e0b200341386a2103200441486a22040d000b0b200ba72203450d00200341386c450d002006102e0b20014198076a200141d8086a41c00110e9081a0c040b2003200a41f4d1cc001057000b0240201841ffffffff0171450d002017102e0b2013450d002014102e0b20012802980f210420012802940f2106200120012802900f22033602a80f200120063602a40f200120033602a00f20012003200441e0006c6a221d3602ac0f4104211e024002402004450d00200141900d6a410472211f200141d80f6a41346a2104024002400340200141a0056a41286a220d200341286a290300370300200141a0056a41206a220e200341206a290300370300200141a0056a41186a2205200341186a290300370300200141a0056a41106a220a200341106a290300370300200141a0056a41086a2207200341086a290300370300200120032903003703a005200341306a2802002106200141a80a6a41086a22092003413c6a290200370300200141a80a6a41106a2221200341c4006a290200370300200141a80a6a41186a2219200341cc006a290200370300200141a80a6a41206a2222200341d4006a290200370300200141a80a6a41286a2217200341dc006a2802003602002001200341346a2902003703a80a2006450d01200141d80f6a41286a200d290300370300200141d80f6a41206a200e290300370300200141d80f6a41186a2005290300370300200141d80f6a41106a200a290300370300200141d80f6a41086a2007290300370300200420012903a80a370200200441086a2009290300370200200441106a2021290300370200200441186a2019290300370200200441206a2022290300370200200441286a2017280200360200200120012903a0053703d80f2001200636028810200141900d6a200141d80f6a10e406024020012802900d22060d00200341e0006a2203201d470d010c030b0b200141b00f6a41206a201f41206a290200220b370300200141b00f6a41186a201f41186a2902002208370300200141b00f6a41106a201f41106a2902002223370300200141b00f6a41086a201f41086a29020022243703002001200341e0006a3602a80f2001201f29020022253703b00f20012802b40f210720012802d40f212220012802cc0f211920012802c40f212120012802bc0f2109412c102c221e450d06201e2022360228201e200ba7221b360224201e2019360220201e2008a7222036021c201e2021360218201e2023a7221f360214201e2009360210201e2024a7221d36020c201e2007360208201e2025a72217360204201e2006360200200141d00e6a41086a200141a00f6a41086a290300220b370300200120012903a00f3703d00e024002400240200ba7220620012802dc0e2226470d0041012127410121130c010b200141d80f6a41346a2104200141900d6a410472212841012127410121130340200141a0056a41286a220d2006220341286a290300370300200141a0056a41206a220e200341206a290300370300200141a0056a41186a2205200341186a290300370300200141a0056a41106a220a200341106a290300370300200141a0056a41086a221c200341086a290300370300200120032903003703a005200341306a2802002106200141a80a6a41086a22142003413c6a290200370300200141a80a6a41106a221a200341c4006a290200370300200141a80a6a41186a2218200341cc006a290200370300200141a80a6a41206a2215200341d4006a290200370300200141a80a6a41286a2216200341dc006a2802003602002001200341346a2902003703a80a024002402006450d00200141d80f6a41286a200d290300370300200141d80f6a41206a220d200e290300370300200141d80f6a41186a220e2005290300370300200141d80f6a41106a2205200a290300370300200141d80f6a41086a220a201c290300370300200420012903a80a370200200441086a2014290300370200200441106a201a290300370200200441186a2018290300370200200441206a2015290300370200200441286a2016280200360200200120012903a0053703d80f2001200636028810200141900d6a200141d80f6a10e40620012802900d22060d01200341e0006a22062026470d020b2001200341e0006a3602d80e0c020b200141b00f6a41106a202841106a290200220b370300200141e00b6a41086a221c202841086a290200370300200141e00b6a41106a2214200b370300200141e00b6a41186a221a202841186a290200370300200141e00b6a41206a2218202841206a2902003703002001200341e0006a3602d80e200120282902003703e00b200d2018290300370300200e201a29030037030020052014290300370300200a201c290300370300200120012903e00b3703d80f024020132027470d00202741016a22032027490d0b2027410174221c2003201c20034b1b22034104200341044b1bad422c7e220b422088a7454102742103200ba7211c0240024020270d00200141003602a0050c010b200141043602a8052001201e3602a00520012027412c6c3602a4050b200141900d6a201c2003200141a0056a107d20012802980d210320012802900d4101460d0320012802940d211e2003412c6e21270b201e2013412c6c6a220320063602002003410c6a200a290300370200200320012903d80f370204200341146a20052903003702002003411c6a200e290300370200200341246a200d290300370200201341016a211320012802d80e220620012802dc0e2226470d000b0b200141d00e6a10ac020c040b2003450d070c060b200341e0006a211d0b2001201d3602a80f0b200141a00f6a10ac0241002127410021130b2013412c6c2104410021030240034020042003460d01200141a8016a201e20036a10be042003412c6a210320012802a801450d000b02402013450d002013412c6c2104201e210303400240200341046a2802002206450d00200641226c450d002003280200102e0b2003412c6a2103200441546a22040d000b0b02402027450d002027412c6c450d00201e102e0b02402011450d0020124102742104201021030340200328020022062006280200417f6a3602000240200328020022062802000d00200641046a22062006280200417f6a3602002003280200220641046a2802000d002006102e0b200341046a21032004417c6a22040d000b0b200f41ffffffff0371450d012010102e0c010b2012ad42307e220b422088a70d03200ba72203417f4c0d030240024020030d00410821290c010b2003102c2229450d030b0240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200341306e222a20124f0d00202a41017422042012200420124b1b22044104200441044b1bad42307e220b422088a7454103742104200ba72106024002402003412f4b0d00200141003602d80f0c010b200141d80f6a41086a4108360200200120293602d80f2001202a41306c3602dc0f0b200141a0056a20062004200141d80f6a107d200141a8056a280200210320012802a0054101460d0120012802a4052129200341306e212a0b2012410274210420110d0141002118201021030c020b2003450d170c160b201020046a21152012410274210d2011417c6a41027641016a2116200141d00e6a41186a210e200141d00e6a41106a2105200141d00e6a41086a210a410021182029210420102106024003400240200628020022030d00200641046a21030c020b200328020841016a221c41004c0d032003201c360208200e200341ec006a2900003703002005200341e4006a290000370300200a200341dc006a2900003703002001200341d4006a2900003703d00e2003280208221c41016a221241004c0d0420032012360208200e290300210b20052903002108200a29030021232003201c417f6a360208200141d80f6a41086a221c2023370300200141d80f6a41106a22122008370300200141d80f6a41186a2214200b370300200120012903d00e3703d80f200341c8006a290300210b2003290340210820032003280200417f6a221a3602000240201a0d00200341046a221a201a280200417f6a221a360200201a0d002003102e0b200641046a2106200420012903d80f370300201c29030021232012290300212420142903002125200441286a200b370300200441206a2008370300200441186a2025370300200441106a2024370300200441086a2023370300200441306a2104201841016a2118200d417c6a220d0d000b20152103201621180b201520036b220441027521120b02402004450d00201241027421040340200328020022062006280200417f6a3602000240200328020022062802000d00200641046a22062006280200417f6a3602002003280200220641046a2802000d002006102e0b200341046a21032004417c6a22040d000b0b0240200f41ffffffff0371450d002010102e0b200141d80f6a10f504024020012802d80f2203450d00200141e40f6a2802002104200141d80f6a41106a290300210b200120012902dc0f37029c0a200120033602980a2001200b3702f40e200120043602f00e200141e80e6a4200370300200141d00e6a41106a4200370300200141d00e6a41086a22034200370300200142003703d00e200141d80f6a41a5fec600411a1081022003200141d80f6a41086a2204290000370300200120012900d80f3703d00e200141d80f6a4194c5c800410e108102200c41086a2004290000370000200c20012900d80f370000200141a0016a200141d00e6a4120108e02024020012802a001450d0020012802a401212b200142003702840f024020012802a00a2203450d00200341386c210620012802980a41086a2103410021040340200141d80f6a41186a200341186a290000370300200141d80f6a41106a200341106a290000370300200141d80f6a41086a200341086a290000370300200120032900003703d80f200341386a2103200141800f6a200141d80f6a200410a402200441016a2104200641486a22060d000b0b2001200141800f6a3602a40a200142003702940f024020012802f80e2203450d0020012802f00e220520034105746a21154100210d41002112034002400240200d450d0020012802900f211c0c010b41e000102c220d450d194100211c200d4100360200200d41003b015e2001200d3602940f200141003602900f0b200541206a2114024002400340200d41046a211a200d2f015e2210410274210e41002103417f2104024003400240200e2003470d00201021040c020b2005200d20036a220a41046a280200412010ec082206450d03200441016a2104200341046a21032006417f4a0d000b0b0240201c450d00201c417f6a211c200d20044102746a41e0006a280200210d0c010b0b024002402010410a4b0d00201041016a21030240200420104f0d00201a200441016a41027422066a201a2004410274220e6a20032004417f736a410274220a10ea081a200d41306a221c20066a201c200e6a200a10ea081a0b201a200441027422046a2005360200200d20046a41306a2012360200200d20033b015e0c010b4100210a4104210302400240200441054f0d00200421060c010b4105210341052106024002402004417b6a0e020201000b200441796a21064101210a410621030c010b410021064101210a0b41e000102c2204450d1b200441003b015e200441003602002004200d2f015e221c2003417f736a220e3b015e200e410c4f0d09201c200341016a22106b200e470d0a200d41306a221c200341027422116a2802002116201a20116a2802002111200441046a201a201041027422106a200e410274220e10e9081a200441306a201c20106a200e10e9081a200d20033b015e2004200d200a1b220341046a210e20032f015e221c41016a210a0240200641016a2210201c4b0d00200e2010410274221c6a200e200641027422106a200a2006417f736a410274221a10ea081a200341306a2226201c6a202620106a201a10ea081a0b200e200641027422066a2005360200200320066a41306a20123602002003200a3b015e024002400240200d280200220a0d004100211a0c010b4100211a201121262016210f200421280340200d2f015c210e200a2f015e221c410b490d0241002105410421030240200e4105490d00200e210302400240200e417b6a0e020201000b200e41796a210e41012105410621030c010b4100210e41012105410521030b419001102c2204450d1e200441003b015e200441003602002004200a2f015e220d2003417f736a22063b015e2006410c4f0d0e200d200341016a22106b2006470d0f200a41306a222c2003410274220d6a2802002116200a41046a222d200d6a2802002111200441046a202d2010410274220d6a2006410274220610e9081a200441306a202c200d6a200610e9081a200a20033b015e20042f015e220641016a21102006410c4f0d10201c20036b22032010470d11201a41016a211a200441e0006a200a200d6a41e0006a200341027410e9081a4100210302400340200420034102746a41e0006a280200220d20033b015c200d200436020020032003200649220d6a220320064b0d01200d0d000b0b2004200a20051b220d41046a222c200e410274221c6a2110200d2f015e220641016a210502400240200e41016a220320064d0d0020102026360200200d41306a21100c010b202c2003410274222d6a2010200e417f7320056a410274222c10ea081a20102026360200200d41306a2210202d6a2010201c6a202c10ea081a0b2010201c6a200f360200200d41e0006a21100240200e41026a2226200641026a22064f0d00201020264102746a201020034102746a2003417f7320066a41027410ea081a0b201020034102746a2028360200200d20053b015e0240200320064f0d00200d201c6a41e4006a2103034020032802002206200e41016a220e3b015c2006200d360200200341046a21032005200e470d000b0b200a210d200a2802002203210a201121262016210f2004212820030d000b0b20012802940f2206450d1020012802900f210d419001102c2203450d1c20032006360260200341003b015e2003410036020020062003360200200641003b015c200120033602940f2001200d41016a3602900f200d201a470d1120032f015e2206410b4f0d122003200641016a220d3b015e200320064102746a220641306a2016360200200641046a2011360200200341e0006a200d4102746a2004360200200420033602002004200d3b015c200120012802980f41016a3602980f0c030b200a41046a2104201c41016a210602400240200e201c490d002004200e41027422036a2026360200200a20036a41306a200f360200200a41e0006a2104201c41026a210d200e41016a21030c010b2004200e41016a2203410274220d6a2004200e41027422056a2204200e417f7320066a410274220e10ea081a20042026360200200a41306a2204200d6a200420056a2204200e10ea081a2004200f3602002005200a41e0006a22046a41086a2004200d6a2003417f73201c41026a220d6a41027410ea081a0b20042003410274220e6a2028360200200a20063b015e2003200d4f0d00200a200e6a41e0006a210403402004280200220620033b015c2006200a360200200441046a2104200d200341016a2203470d000b0b200120012802980f41016a3602980f0c010b200a41306a20123602000b20142015460d01201241016a211220012802940f210d201421050c000b0b201e2013412c6c6a211c0240024020130d00201e2104201e21030c010b200141a0056a410c6a2110200141a0056a4104722104200141e00b6a41206a210d200141e00b6a41186a210e200141e00b6a41106a2105200141e00b6a41086a210a201e21060340200622032802002106200d200341246a290200370300200e2003411c6a2902003703002005200341146a290200370300200a2003410c6a2902003703002001200341046a2902003703e00b024020060d002003412c6a21040c020b200420012903e00b370200200441086a200a290300370200200441106a2005290300370200200441186a200e290300370200200441206a200d290300370200200120063602a0054200210b0240200141800f6a201010a0022206450d0020012802a00a200628020022064d0d0020012802980a200641386c6a290300210b0b200141d80f6a41286a200141a0056a41286a280200360200200141d80f6a41206a200141a0056a41206a290300370300200141d80f6a41186a200141a0056a41186a290300370300200141d80f6a41106a200141a0056a41106a290300370300200141d80f6a41086a200141a0056a41086a290300370300200120012903a0053703d80f200141900d6a200141d80f6a200b420010bd04200341286a200141900d6a41286a280200360200200341206a200141900d6a41206a290300370200200341186a200141900d6a41186a290300370200200341106a200141900d6a41106a290300370200200341086a200141900d6a41086a290300370200200320012903900d3702002003412c6a2206201c470d000b2003412c6a2103201c21040b2027ad210b201c20046b2206412c6d210d02402006450d00200d412c6c210603400240200441046a280200220d450d00200d41226c450d002004280200102e0b2004412c6a2104200641546a22060d000b0b2003201e6b220e412c6d220d412c6c2104200dad422086200b842108201e210602400340200621032004450d014200210b0240200141800f6a2003410c6a10a0022206450d0020012802a00a200628020022064d0d0020012802980a200641386c6a290300210b0b2003412c6a210620014198016a2003200b420010bf04200441546a2104200128029801450d000b0240200e450d00201e200d412c6c6a210d201e2103034020032204412c6a21030240200441046a2802002206450d00200641306c450d002004280200102e0b200d2003470d000b0b2027450d0f2027412c6c450d0f201e102e0c0f0b200120083702a40f2001201e3602a00f201e200d412c6c6a212d200141a00f6a10e5060240200e0d00201e211c201e21050c0e0b200141e00b6a41086a2112200141e00b6a41206a212e200141e00b6a41186a212f200141e00b6a41106a2130201e211c02400340201c22052802002114202e200541246a2213290200370300202f2005411c6a22112902003703002030200541146a222629020037030020122005410c6a290200370300200120052902043703e00b2005412c6a211c2014450d0f200141a80a6a41086a220f201241086a290200370300200141a80a6a41106a2228201241106a290200370300200141a80a6a41186a222c201241186a290200370300200120122902003703a80a20012802e00b21160240024020012802e40b220e41306c220d0d00420021084200210b0c010b201441206a210342002108200d21044200210b0340427f200b200341086a2903007c200820032903007c22232008542206ad7c220820062008200b542008200b511b22061b210b427f202320061b2108200341306a2103200441506a22040d000b0b024002400240200e41306c2204450d002014200d6a2110201421030340200341286a2903002123200341206a2903002124200341086a2903002125200341106a290300213120032903002132200141d00e6a41186a2206200341186a290300370300200141d00e6a41106a220d2031370300200141d00e6a41086a220e2025370300200120323703d00e202420232008200b10e606220a41ffff03710d02200341306a2103200441506a22040d000b0b410021154102211a02402016450d00201641306c450d002014102e0b4100210a0c010b200141900d6a41086a2215200e290300370300200141900d6a41106a2233200d290300370300200141900d6a41186a22342006290300370300200120012903d00e22233703a005200120233703900d4122102c221a450d19201a20012903900d370100201a200a3b0120201a41186a2034290300370100201a41106a2033290300370100201a41086a20152903003701000240024020044130470d00410121154101210a0c010b200341306a2134201041506a2135410121154101210a03402034210302400340200341286a2903002123200341206a29030021242006200341186a290300370300200d200341106a290300370300200e200341086a290300370300200120032903003703d00e202420232008200b10e606220441ffff03710d012010200341306a2203470d000c030b0b200141a0056a41086a200e2903002223370300200141a0056a41106a200d2903002224370300200141a0056a41186a20062903002225370300200120012903d00e22313703a005200141d80f6a41186a22362025370300200141d80f6a41106a22372024370300200141d80f6a41086a22382023370300200120313703d80f0240200a2015470d00201541016a22332015490d1d201541017422342033203420334b1b22334104203341044b1bad42227e2223422088a74541017421332023a721340240024020150d00200141003602900d0c010b200141023602980d2001201a3602900d2001201541226c3602940d0b200141b00f6a20342033200141900d6a107d20012802b80f211520012802b00f4101460d0520012802b40f211a201541226e21150b200341306a2134201a200a41226c6a223320012903d80f370100203829030021232037290300212420362903002125203320043b0120203341186a2025370100203341106a2024370100203341086a2023370100200a41016a210a20352003470d000b0b2016450d00201641306c450d002014102e0b200141d80f6a41186a2203202c290300370300200141d80f6a41106a22042028290300370300200141d80f6a41086a2206200f290300370300200120012903a80a3703d80f200520153602042005201a3602002005200a360208200520012903d80f37020c202620062903003702002011200429030037020020132003290300370200201c202d470d000b201c2105202d211c0c0e0b2015450d170c160b024020012802f40e41ffffff3f71450d0020012802f00e102e0b024020012802a00a2203450d00200341386c210420012802980a412c6a210303400240200328020041ffffff3f71450d002003417c6a280200102e0b200341386a2103200441486a22040d000b0b200128029c0a2203450d00200341386c450d0020012802980a102e0b0240202a450d00202a41306c450d002029102e0b02402013450d00201e2013412c6c6a210d201e2103034020032204412c6a21030240200441046a2802002206450d00200641226c450d002004280200102e0b200d2003470d000b0b2027450d122027412c6c450d12201e102e0c120b41bcd9cc004118200141d80f6a41f09cc50041c09dc500103e000b41bcd9cc004118200141d80f6a41f09cc50041d09dc500103e000b200e410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b2006410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b2010410c41f49cc700104d000b41f49bc7004128419c9cc7001039000b41e8aac700412b4194abc7001039000b41e899c700413041989ac7001039000b41a89ac700412041c89ac7001039000b202d201c6b2203412c6d210402402003450d002004412c6c210303400240201c41046a2802002204450d00200441306c450d00201c280200102e0b201c412c6a211c200341546a22030d000b0b201e2005201e6b220d412c6d2206412c6c6a2104201e21030240034020042003460d0120014190016a200310be042003412c6a2103200128029001450d000b0240200d450d00201e2006412c6c6a210d201e2103034020032204412c6a21030240200441046a2802002206450d00200641226c450d002004280200102e0b200d2003470d000b0b2027450d012027412c6c450d01201e102e0c010b200120063602980d200120273602940d2001201e3602900d200141d80f6a200141900d6a200141a40a6a200141900f6a109906200141e00f6a280200210e200141e40f6a280200210620012802dc0f210520012802d80f2103200141a0056a200141e80f6a41b40110e9081a20034101460d00200141a80a6a200141a0056a41b40110e9081a20012802a00a212f20012802f80e2135200141d80f6a10df040240024002400240200141f00f6a2903004200510d00200141f80f6a210a02400240202f0d00410021040c010b4200200a290300220b42809ce8af6d7c22082008200b561b210b2035ad42889b047e202fad222442f0aefa017e7c2108202bad42a0ede0017e2123202f21030240202f410176220d450d00202f21040340024002400240417f2008202442e8aede067e7c20237c4280e59af7007c2224200b522024200b541b41016a0e03000501000b02402004200d6a220320044f0d00200421030c040b2003202f490d01200421030c030b2004200d6b220320044d0d00200421030c020b20032004460d022003ad212420032104200d410176220d0d000b0b024003402003220441016a2203202f4b0d0120082003ad42e8aede067e7c20237c4280e59af7007c200b540d000b0b4100211c02402004417f6a20044b0d000340024020082004ad42e8aede067e7c20237c4280e59af7007c200b560d002004211c0c020b2004417e6a21032004417f6a220d21042003200d4d0d000b0b202f201c201c202f4b1b21040b2001200e3602dc0f200120053602d80f200120063602e00f200141e40f6a200141a80a6a41b40110e9081a02400240417f417f417f417f417f417f417f417f417f417f417f417f417f417f417f2006200141ec0f6a2802006a220320032006491b2203200a2802006a220d200d2003491b220320014184106a2802006a220d200d2003491b220320014190106a2802006a220d200d2003491b22032001419c106a2802006a220d200d2003491b2203200141a8106a2802006a220d200d2003491b2203200141b4106a2802006a220d200d2003491b2203200141c0106a2802006a220d200d2003491b2203200141cc106a2802006a220d200d2003491b2203200141d8106a2802006a220d200d2003491b2203200141e4106a2802006a220d200d2003491b2203200141f0106a2802006a220d200d2003491b2203200141fc106a2802006a220d200d2003491b2203200141d80f6a41b0016a2802006a220d200d2003491b220320014194116a2802006a220d200d2003491b220320046b223320034b0d0020330d010b20012802e40f2103200141a0056a200141e80f6a41b00110e9081a200141e00b6a200141a0056a41b00110e9081a0c070b200141b00f6a10f50420012802b00f2210450d0320012902b40f21080240200141c00f6a29030042ffffff3f83500d00200141bc0f6a280200102e0b2008422088a7220d41386c220641386d2203ad42287e220b422088a70d0d200ba72204417f4c0d0d0240024020040d00410821260c010b2004102c2226450d0d0b0240024002400240200441286e223620034f0d002036410174220e2003200e20034b1b220e4104200e41044b1bad42287e220b422088a745410374210e200ba7210502400240200441274b0d00200141003602b00f0c010b200141b00f6a41086a4108360200200120263602b00f2001203641286c3602b40f0b200141d00e6a2005200e200141b00f6a107d200141d80e6a280200210420012802d00e4101460d0120012802d40e2126200441286e21360b201020066a221e2010470d014100212c2010210e0c020b2004450d0f0c0e0b200d41037441786a41037641016a21124100212c2010210320262104024003402003290300210b200141b00f6a41186a2206200341206a290300370300200141b00f6a41106a220d200341186a290300370300200141b00f6a41086a220e200341106a2903003703002001200341086a2903003703b00f0240200341286a280200221c0d00200341386a210e0c020b2003412c6a2802002105200141d00e6a41186a220a2006290300370300200141d00e6a41106a2206200d290300370300200141d00e6a41086a220d200e290300370300200120012903b00f3703d00e0240200541ffffff3f71450d00201c102e0b200420012903d00e370300200441186a200a290300370300200441106a2006290300370300200441086a200d290300370300200441206a200b370300200441286a2104202c41016a212c200341386a2203201e470d000b201e210e2012212c0b201e200e6b220641386d21030b2008a7210d02402006450d00200341386c2104200e412c6a210303400240200328020041ffffff3f71450d002003417c6a280200102e0b200341386a2103200441486a22040d000b0b0240200d450d00200d41386c450d002010102e0b024002400240202c41144b0d00202c41014d0d052026202c417f6a220641286c6a21054100210d0340202c20062203417f6a2206490d030240202c20066b221c4102490d002026200341286c6a220341206a220e2903002026200641286c6a220441206a220a290300220b5a0d00200141d00e6a41186a221e200441186a2210290300370300200141d00e6a41106a2212200441106a2214290300370300200141d00e6a41086a221a200441086a2215290300370300200120042903003703d00e200420032903003703002015200341086a2903003703002014200341106a2903003703002010200341186a290300370300200a200e2903003703000240201c4103490d00200d417f6a210a41002104200521030340200341c8006a220e290300200b5a0d01200a2004460d05200341206a200e290300370300200341186a200341c0006a290300370300200341106a200341386a290300370300200341086a200341306a2903003703002003200341286a220e290300370300200e2103200d2004417f6a2204470d000b200e21030b200320012903d00e3703002003200b370320200341186a201e290300370300200341106a2012290300370300200341086a201a2903003703000b200541586a2105200d417f6a210d20060d000c060b0b202c410176ad42287e220b422088a70d0f200ba72237417f4c0d0f2037102c222d450d0e202641586a2130202641a87f6a2134410421144100212e41002110202c2113034020132105410021134101210e02402005417f6a220d450d0002400240024002400240024002402026200d41286c6a41206a290300200541286c220a20266a41506a290300220b540d002005417e6a210d2034200a6a2104410021134100210303400240200d2003470d002005210e0c090b200341016a2103200b200429030022085a2106200441586a21042008210b20060d000b200341016a210e2003417f7320056a210d0c010b2034200a6a2103024003400240200d4101470d004100210d0c020b200d417f6a210d200b20032903002208542104200341586a21032008210b20040d000b0b2005200d490d012005202c4b0d022005200d6b220e4101762206450d002030200a6a21032026200d41286c6a21040340200141b00f6a41206a220a200441206a221c290300370300200141b00f6a41186a221e200441186a2212290300370300200141b00f6a41106a221a200441106a2215290300370300200141b00f6a41086a2216200441086a2213290300370300200120042903003703b00f200341206a2227290300210b200341186a22112903002108200341106a220f2903002123200341086a2228290300212420042003290300370300201320243703002015202337030020122008370300201c200b3703002027200a2903003703002011201e290300370300200f201a29030037030020282016290300370300200320012903b00f370300200341586a2103200441286a21042006417f6a22060d000b0b0240200d0d00200d21130c060b0240200e41094d0d00200d21130c060b2005202c4b0d03200d20056b21062026200d41286c6a210a03402005200d417f6a2213490d050240200520136b220e4102490d002026200d41286c6a220341206a220d2903002026201341286c6a220441206a221c290300220b5a0d00200141d00e6a41186a221e200441186a2212290300370300200141d00e6a41106a221a200441106a2215290300370300200141d00e6a41086a2216200441086a2227290300370300200120042903003703d00e200420032903003703002027200341086a2903003703002015200341106a2903003703002012200341186a290300370300201c200d2903003703000240200e4103490d0041012104200a21030340200341c8006a220d290300200b5a0d01200620046a4101460d06200341206a200d290300370300200341186a200341c0006a290300370300200341106a200341386a290300370300200341086a200341306a2903003703002003200341286a220d290300370300200d21032006200441016a22046a0d000b200d21030b200320012903d00e3703002003200b370320200341186a201e290300370300200341106a201a290300370300200341086a20162903003703000b2013450d06200a41586a210a2006417f6a21062013210d200e410a4f0d060c000b0b200d200541e4d1cc001057000b2005202c41e4d1cc00104d000b2004200e41d4d1cc00103c000b2005200d417f6a2213490d002005202c41f4d1cc00104d000b2013200541f4d1cc001057000b02402010202e470d00202e41016a2203202e490d11202e41017422042003200420034b1b22034104200341044b1b220341ffffffff017120034641027421042003410374210302400240202e0d00200141003602b00f0c010b200141043602b80f200120143602b00f2001202e4103743602b40f0b200141d00e6a20032004200141b00f6a107d20012802d80e2103024020012802d00e4101470d002003450d120c110b20012802d40e21142003410376212e0b201420104103746a2203200e36020420032013360200201041016a22272110024020274102490d0002400240024003400240024002400240201420272210417f6a22274103746a2203280200450d00201041037420146a220e41746a280200220d200328020422044d0d00201041024d0d0820142010417d6a22034103746a28020422062004200d6a4d0d01201041034d0d08200e41646a2802002006200d6a4b0d080c010b20104103490d012003280204210420142010417d6a22034103746a28020421060b20062004490d010b2010417e6a21030b02402010200341016a22114d0d00201020034d0d02201420034103746a221a280204220f201a2802006a2203201420114103746a22152802002216490d032003202c4b0d04201a41046a21282026201641286c6a221e2015280204221241286c22046a210e200341286c210602400240200320166b220520126b22032012490d00202d201e200410e908221c20046a210d0240024020124101480d00200520124a0d010b201e2103201c21040c020b202620066a210a201c2104201e210303402003200e2004200e41206a290300200441206a2903005422051b2206290300370300200341206a200641206a290300370300200341186a200641186a290300370300200341106a200641106a290300370300200341086a200641086a2903003703002004200441286a20051b2104200341286a2103200e41286a200e20051b220e200a4f0d02200d20044b0d000c020b0b202d200e200341286c220410e908220520046a210d0240024020124101480d00200341014e0d010b200e2103200521040c010b203020066a2106200e210303402006200341586a220a200d41586a221c200d41786a290300200341786a29030054220e1b2204290300370300200641206a200441206a290300370300200641186a200441186a290300370300200641106a200441106a290300370300200641086a200441086a290300370300200d201c200e1b210d0240201e200a2003200e1b2203490d00200521040c020b200641586a2106200521042005200d490d000b0b20032004200d20046b220620064128706b10e9081a2028200f20126a360200201a20163602002015201541086a20102011417f736a41037410ea081a41012110202741014d0d050c010b0b201120104184d2cc00103c000b200320104194d2cc00103c000b2016200341a4d2cc001057000b2003202c41a4d2cc00104d000b2013450d040c000b0b410120046b201c41d4d1cc00103c000b2006202c41c4d1cc001056000b41baa9c700413e41f8a9c700105d000b0240202e41ffffffff0171450d002014102e0b2037412870210320374128490d0020372003460d00202d102e0b2026202c41286c6a211e4100210a20012802a40a2110202621050340201e2005460d03024002400240024002400240024002400240024002400240024002400240024002402010200510a0022203450d0020032802002103024020012802e00f220e450d00200e41037441786a41037641016a210d4100210620012802d80f2104034020042802002003460d03200441086a2104200d200641016a2206470d000b0b024020012802ec0f221c450d00201c410c6c41746a2106201c410274417c6a41027641016a210e4100210d20012802e40f2104034020042802002003460d04200641746a21062004410c6a2104200e200d41016a220d470d000b0b024020012802f80f220e450d00200e41047441706a41047641016a210d4100210620012802f00f2104034020042802002003460d05200441106a2104200d200641016a2206470d000b0b0240200128028410221c450d00201c41146c416c6a2106201c410274417c6a41027641016a210e4100210d20012802fc0f2104034020042802002003460d062006416c6a2106200441146a2104200e200d41016a220d470d000b0b0240200128029010221c450d00201c41186c41686a2106201c41037441786a41037641016a210e4100210d2001280288102104034020042802002003460d07200641686a2106200441186a2104200e200d41016a220d470d000b0b0240200128029c10221c450d00201c411c6c41646a2106201c410274417c6a41027641016a210e4100210d2001280294102104034020042802002003460d08200641646a21062004411c6a2104200e200d41016a220d470d000b0b024020012802a810220e450d00200e41057441606a41057641016a210d4100210620012802a0102104034020042802002003460d09200441206a2104200d200641016a2206470d000b0b024020012802b410221c450d00201c41246c415c6a2106201c410274417c6a41027641016a210e4100210d20012802ac102104034020042802002003460d0a2006415c6a2106200441246a2104200e200d41016a220d470d000b0b024020012802c010221c450d00201c41286c41586a2106201c41037441786a41037641016a210e4100210d20012802b8102104034020042802002003460d0b200641586a2106200441286a2104200e200d41016a220d470d000b0b024020012802cc10221c450d00201c412c6c41546a2106201c410274417c6a41027641016a210e4100210d20012802c4102104034020042802002003460d0c200641546a21062004412c6a2104200e200d41016a220d470d000b0b024020012802d810221c450d00201c41306c41506a2106201c41047441706a41047641016a210e4100210d20012802d0102104034020042802002003460d0d200641506a2106200441306a2104200e200d41016a220d470d000b0b024020012802e410221c450d00201c41346c414c6a2106201c410274417c6a41027641016a210e4100210d20012802dc102104034020042802002003460d0e2006414c6a2106200441346a2104200e200d41016a220d470d000b0b024020012802f010221c450d00201c41386c41486a2106201c41037441786a41037641016a210e4100210d20012802e8102104034020042802002003460d0f200641486a2106200441386a2104200e200d41016a220d470d000b0b024020012802fc10221c450d00201c413c6c41446a2106201c410274417c6a41027641016a210e4100210d20012802f4102104034020042802002003460d10200641446a21062004413c6a2104200e200d41016a220d470d000b0b024002400240200128028811220e450d00200e41067441406a41067641016a210d410021062001280280112104034020042802002003460d02200441c0006a2104200d200641016a2206470d000b0b024020012802941122120d00410021040c130b201241c4006c41bc7f6a210d2012410274417c6a41027641016a211c4100210e200128028c112106034020062802002003460d02200d41bc7f6a210d200641c4006a210641002104201c200e41016a220e470d000c130b0b2004200441c0006a200e2006417f736a41067410ea081a2001200e417f6a360288110c100b2006200641c4006a200d10ea081a20012012417f6a360294110c0f0b2036450d11203641286c450d112026102e0c110b2004200441086a200e2006417f736a41037410ea081a2001200e417f6a3602e00f0c0d0b20042004410c6a200610ea081a2001201c417f6a3602ec0f0c0c0b2004200441106a200e2006417f736a41047410ea081a2001200e417f6a3602f80f0c0b0b2004200441146a200610ea081a2001201c417f6a360284100c0a0b2004200441186a200610ea081a2001201c417f6a360290100c090b20042004411c6a200610ea081a2001201c417f6a36029c100c080b2004200441206a200e2006417f736a41057410ea081a2001200e417f6a3602a8100c070b2004200441246a200610ea081a2001201c417f6a3602b4100c060b2004200441286a200610ea081a2001201c417f6a3602c0100c050b20042004412c6a200610ea081a2001201c417f6a3602cc100c040b2004200441306a200610ea081a2001201c417f6a3602d8100c030b2004200441346a200610ea081a2001201c417f6a3602e4100c020b2004200441386a200610ea081a2001201c417f6a3602f0100c010b20042004413c6a200610ea081a2001201c417f6a3602fc100b410121040b200541286a2105200a20046a220a2033490d000c030b0b200141d80f6a109b060b202a450d02202a41306c450d022029102e0c020b20012802e40f210320012802e00f210620012802dc0f210e20012802d80f2105200141a0056a200141e80f6a41b00110e9081a02402036450d00203641286c450d002026102e0b200141e00b6a200141a0056a41b00110e9081a0b2001200336029c0d200120063602980d2001200e3602940d200120053602900d200141a00d6a200141e00b6a41b00110e9081a20012029201841306c6a3602e40f200120293602e00f2001202a3602dc0f200120293602d80f200141b00f6a200141d80f6a10c201200141a0056a200141900d6a10ca0120012802b80f210320012802b00f211c200141d80f6a200141a0056a41c00110e9081a200141e00b6a200141d80f6a200141980a6a200141f00e6a108d06024020012802e00b4101460d00200141e00b6a41086a280200210420012802e40b21062001200141e00b6a410c6a2802003602e80b200120043602e40b200120063602e00b200141d80f6a200141e00b6a200141800f6a200141980a6a10e70620012802d80f4101460d00200141d80f6a41086a280200211e200141d80f6a201c200320012802dc0f2212200141d80f6a410c6a280200221010b704024020012802d80f4101460d00200141e00f6a280200211820012802dc0f2114200141e40f6a2802002203410674211a024020030d0042002131417f210e20142103420021234200213242002124417f2105417f210a417f21150c040b201441206a2103201a2105427f2139427f21254200213242002124420021314200212303400240200341106a280200220a0d00200341206a21032039422088a721052025422088a721152039a7210e2025a7210a0c050b200341146a280200210e200141f0006a200341086a290300220b420020032903002208420010e80820014180016a200842002008420010e8082031427f200129038001200b2001290378223a84203a8442005220014180016a41086a290300223a2001290370223b203b7c7c223b203a547222041b7c223a20315422062023427f203b20041b7c2006ad7c223120235420312023511b21042008203954200b202554200b2025511b2106203220087c223b203254220d2024200b7c200dad7c223220245420322024511b210d0240200e450d00200e41306c450d00200a102e0b427f203120041b2123427f203a20041b2131200b202520061b21252008203920061b2139427f2032200d1b2124427f203b200d1b2132200341c0006a2103200541406a22050d000b2039422088a721052025422088a721152039a7210e2025a7210a0c040b02402010450d002010412c6c21042012210303400240200341046a2802002206450d00200641306c450d002003280200102e0b2003412c6a2103200441546a22040d000b0b201e450d00201e412c6c450d002012102e0b024020012802b40f41ffffff3f71450d00201c102e0b200141900d6a109b060b200141900f6a10bd02200141800f6a10bc02024020012802f40e41ffffff3f71450d0020012802f00e102e0b024020012802a00a2203450d00200341386c210420012802980a412c6a210303400240200328020041ffffff3f71450d002003417c6a280200102e0b200341386a2103200441486a22040d000b0b200128029c0a2203450d02200341386c450d0220012802980a102e0c020b2014201a6a220d2003460d0003402003220441c0006a21030240200441346a2802002206450d00200641306c450d00200441306a280200102e0b200d2003470d000b0b0240201841ffffff1f71450d002014102e0b02402010450d002010412c6c21042012210303400240200341046a2802002206450d00200641306c450d002003280200102e0b2003412c6a2103200441546a22040d000b0b0240201e450d00201e412c6c450d002012102e0b200141e80e6a4200370300200141e00e6a4200370300200141d00e6a41086a22034200370300200142003703d00e200141d80f6a41a5fec600411a1081022003200141d80f6a41086a2204290000370300200120012900d80f3703d00e200141d80f6a4180c3c8004105108102200c41086a2004290000370000200c20012900d80f370000200141e8006a200141d00e6a4120108e02200128026c21062001280268210d200141d8086a200141900d6a41c00110e9081a024020012802b40f41ffffff3f71450d00201c102e0b200141900f6a10bd02200141800f6a10bc02024020012802f40e41ffffff3f71450d0020012802f00e102e0b024020012802a00a2203450d00200341386c210420012802980a412c6a210303400240200328020041ffffff3f71450d002003417c6a280200102e0b200341386a2103200441486a22040d000b0b20064101200d1b21040240200128029c0a2203450d00200341386c450d0020012802980a102e0b20014198076a200141d8086a41c00110e9081a200141a0056a41286a22062023370300200141a0056a41186a220d2024370300200120313703c005200120323703b005200120153602ac052001200a3602a805200120053602a4052001200e3602a005200141a0056a41306a20014198076a41c00110e90821032001200436029007200141d80f6a200141a0056a10b8060240024020012d00d80f4106470d00200141900d6a200310ca01200141d80f6a41286a2006290300370300200141d80f6a41206a200141a0056a41206a290300370300200141d80f6a41186a200d290300370300200141d80f6a41106a200141a0056a41106a290300370300200141d80f6a41086a200141a0056a41086a290300370300200120012903a0053703d80f2001280290072104200141d80f6a41306a200141900d6a41c00110e9081a200120043602c811200141d8086a200141d80f6a10b90620012802d8084101470d010b2003109b060c020b20014194096a280200210e20014190096a280200210d0240200141d8086a41c0006a2802002203450d0020034106742104200d41346a21030340024020032802002206450d00200641306c450d002003417c6a280200102e0b200341c0006a2103200441406a22040d000b0b200141ac056a21030240200e41ffffff1f71450d00200d102e0b20012903a005210b20012802a8052104200141b0036a200341ec0110e9081a200141c0016a200141b0036a41ec0110e9081a200141a0056a200141c0016a41ec0110e9081a20014180116a2004360200200141f8106a200b3703002001411b3602f010200142023703c01020014184116a200141a0056a41ec0110e9081a200141f4126a2035360200200141f0126a202f3602002001200141d80f6a3602b003200141c0016a200141b0036a109005200141b0036a41086a200141c0016a41086a280200360200200120012903c0013703b003200141b0036a10e8061a024020012903c0104202510d0020012d00d80f41ff01714102470d0020012802e00f450d0020012802dc0f102e0b200141f0106a108b020c010b20014198076a200141d8086a41c00110e9081a0b024010e906450d00200141d80f6a41186a220e4200370300200141d80f6a41106a22044200370300200141d80f6a41086a22034200370300200142003703d80f200141a0056a41a8f8c60041041081022003200141a0056a41086a2206290000370300200120012900a0053703d80f200141a0056a41c98bc500410b108102200e2006290000370300200420012900a005370300200141d8006a200141d80f6a1085032001290360210820012802582105200141d00e6a41186a220a4200370300200141d00e6a41106a220d4200370300200141d00e6a41086a221c4200370300200142003703d00e200141d80f6a41a8f8c6004104108102201c2003290000370300200120012900d80f3703d00e200141d80f6a41fa8bc500410a108102200a2003290000370300200d20012900d80f370300200141c8006a200141d00e6a108503200141386a2001290350420020012802481b420042e012420010e80802400240024002400240200129034050450d002001290338210b200e42003703002004420037030020034200370300200142003703d80f200141a0056a41a8f8c600410410810220032006290000370300200120012900a0053703d80f200141a0056a41e38bc500410b108102200441086a2006290000370000200420012900a005370000200141286a200141d80f6a1085030240200b2001290330420020012802281b7c2223200b540d00024042002008420020051b220b20237d22082008200b561b42017c220b42e012200b42e012541b421880a741ff017141314b0d00200120223602840c2001201b3602800c200120193602fc0b200120203602f80b200120213602f40b2001201f3602f00b200120093602ec0b2001201d3602e80b200120073602e40b200120173602e00b41002103200141e00b6a211e200141b00f6a21170c060b200141d00e6a41186a4200370300200141d00e6a41106a4200370300200141d00e6a41086a22044200370300200142003703d00e200141d80f6a41a081ca0041071081022004200141d80f6a41086a2203290000370300200120012900d80f3703d00e200141d80f6a41e4d1c100410c108102200d41086a2003290000370000200d20012900d80f370000200141206a200141d00e6a4120108e022001280224212720012802202111200141d80f6a41186a22044200370300200141d80f6a41106a2206420037030020034200370300200142003703d80f200141a0056a41bed8c80041081081022003200141a0056a41086a220d290000370300200120012900a0053703d80f200141a0056a41e9d8c80041041081022004200d290000370300200620012900a005370300200141b0036a41046a41003a0000200141003602b003200141186a200141d80f6a4120200141b0036a4105410010ca040240024002402001280218450d002001200128021c2203410520034105491b3602a4052001200141b0036a3602a005200141106a200141a0056a10ab012001280210450d010b410021160c010b200128021421160b200141b0036a108703200141d80f6a41e9dabdf30610ea0620012802dc0f211320012802d80f22102103024020012802e00f2204450d0020044105742104201021030340200341206a2103200441606a22040d000b0b02400240200320106b410575221241144b0d00201241014d0d0620102012417e6a22034105746a210441022106034020122003490d022004200610eb06200441606a2104200641016a21062003417f6a2203417f470d000c070b0b2012410176220341ffffff3f712003470d0920034105742226417f4c0d092026102c2214450d08201041606a2115201041a07f6a210c4104212241002118410021212012211a0340201a211b4100211a410121060240201b417f6a220d450d000240024002400240024002402010200d4105746a201b410574220520106a41406a412010ec084100480d00201b417e6a210d200c20056a21034100211a4100210403400240200d2004470d00201b21060c080b200441016a2104200341206a2003412010ec082106200341606a21032006417f4a0d000b200441016a21062004417f73201b6a210d0c010b200c20056a2103024003400240200d4101470d004100210d0c020b200d417f6a210d200341206a2003412010ec082104200341606a210320044100480d000b0b201b200d490d01201b20124b0d02201b200d6b2206410176220e450d00201520056a21032010200d4105746a21040340200141d00e6a41186a2205200441186a220a290000370300200141d00e6a41106a2207200441106a2209290000370300200141d00e6a41086a2219200441086a2217290000370300200120042900003703d00e200341086a221d290000210b200341106a221f2900002108200341186a2220290000212320042003290000370000200a2023370000200920083700002017200b37000020202005290300370000201f2007290300370000201d2019290300370000200320012903d00e370000200341606a2103200441206a2104200e417f6a220e0d000b0b0240200d0d00200d211a0c050b0240200641094d0d00200d211a0c050b201b20124b0d02201b200d6b2106200d417f6a21032015200d4105746a21040340201b2003490d0a2004200641016a220610eb062003417f6a220d20034f0d04200441606a2104200d21032006410a490d000c040b0b200d201b41e4d1cc001057000b201b201241e4d1cc00104d000b201b200d417f6a2203490d06201b201241f4d1cc00104d000b200d41016a211a0b024020212018470d00201841016a22032018490d0b201841017422042003200420034b1b22034104200341044b1b220341ffffffff01712003464102742104200341037421030240024020180d00200141003602d80f0c010b200141043602e00f200120223602d80f200120184103743602dc0f0b200141a0056a20032004200141d80f6a107d20012802a8052103024020012802a0054101470d002003450d0c0c0b0b20012802a4052122200341037621180b202220214103746a220320063602042003201a360200202141016a22202121024020204102490d0002400240024003400240024002400240202220202221417f6a22204103746a2203280200450d00202141037420226a220e41746a280200220d200328020422044d0d00202141024d0d0820222021417d6a22034103746a28020422062004200d6a4d0d01202141034d0d08200e41646a2802002006200d6a4b0d080c010b20214103490d012003280204210420222021417d6a22034103746a28020421060b20062004490d010b2021417e6a21030b02402021200341016a221b4d0d00202120034d0d02202220034103746a2217280204221c20172802006a22032022201b4103746a221d280200221f490d03200320124b0d04201741046a211e2010201f4105746a2209201d280204221941057422046a210d20034105742106024002402003201f6b220520196b22032019490d0020142009200410e908220720046a210e0240024020194101480d00200520194a0d010b20092103200721040c020b201020066a210a200721042009210303402003200d2004200d2004412010ec0841004822051b2206290000370000200341186a200641186a290000370000200341106a200641106a290000370000200341086a200641086a2900003700002004200441206a20051b2104200341206a2103200d41206a200d20051b220d200a4f0d02200e20044b0d000c020b0b2014200d2003410574220410e908220720046a210e0240024020194101480d00200341014e0d010b200d2103200721040c010b201520066a2106200d21030340200341606a2104200e41606a210d20062004200d200d2004412010ec08410048220a1b2205290000370000200641186a200541186a290000370000200641106a200541106a290000370000200641086a200541086a290000370000200e200d200a1b210e0240200920042003200a1b2203490d00200721040c020b200641606a2106200721042007200e490d000b0b20032004200e20046b41607110e9081a201e201c20196a3602002017201f360200201d201d41086a2021201b417f736a41037410ea081a41012121202041014d0d050c010b0b201b20214184d2cc00103c000b200320214194d2cc00103c000b201f200341a4d2cc001057000b2003201241a4d2cc00104d000b201a450d050c000b0b2003201241c4d1cc001056000b41e8b2c40041fa0041f4b3c400105d000b41e8b2c40041fa0041e4b3c400105d000b2003201b41f4d1cc001057000b0240201841ffffffff0171450d002022102e0b2026450d002014102e0b20012802b403210420012802b003210320012802b8032106200120163602d40f200120003602d00f20012027410020111b220d3602cc0f200120123602c80f200120133602c40f200120103602c00f200141003602bc0f2001200320064105746a22063602b80f200120033602b40f200120043602b00f200120163602840c200120003602800c2001200d3602fc0b200120123602f80b200120133602f40b200120103602f00b200141003602ec0b200120063602e80b200120033602e40b200120043602e00b200141e00b6a211e200141b00f6a21170b200141d80f6a41106a2204201741106a221d290200220b370300200141d80f6a41186a2206201741186a221f2902002208370300200141b0036a41086a220d201741086a2220290200370300200141b0036a41106a220e200b370300200141b0036a41186a22052008370300200141b0036a41206a220a201741206a221b290200370300200141c0016a41206a2207200141a0056a41206a290200370300200141c0016a41186a2209200141a0056a41186a290200370300200141c0016a41106a2221200141a0056a41106a290200370300200141c0016a41086a2219200141a0056a41086a290200370300200120172902003703b003200120012902a0053703c001200141900d6a41206a2222200141d80f6a41206a221c290300370300200141900d6a41186a22102006290300370300200141900d6a41106a22122004290300370300200141900d6a41086a2214200141d80f6a41086a221a290300370300200120012903d80f3703900d200120033602dc0f200141013602d80f201a20012903b0033703002004200d2903003703002006200e290300370300201c200529030037030020014180106a200a29030037030020014100360288102001418c106a220320012903c00137020020014194106a20192903003702002001419c106a2021290300370200200141a4106a2009290300370200200141ac106a2007290300370200200141003602b410200141d8106a2022290300370300200141d0106a2010290300370300200141c8106a2012290300370300200141c0106a2014290300370300200141b8106a221020012903900d370300200141b4106a211c20014188106a2122200141f40f6a2106200141ec0f6a210d200141e40f6a210e20014190106a210920014198106a2121200141a0106a2119410021040340024002402004450d00202210ec064108470d0102402001280288102204450d000240200128028c1041ffffff3f71450d002004102e0b20012802a01041ffffff3f71450d00200128029c10102e0b20032017290200370200200341086a2020290200370200200341106a201d290200370200200341186a201f290200370200200341206a201b29020037020020014100360288100b20062902002108200620012903b805370200200d2902002123200d20012903b005370200200e2902002124200e20012903a805370200200141003602a00520012902dc0f210b200120012903a0053702dc0f0240200ba72204450d0020012802fc0f2105200128028010210a20012802841021072001200b37038810200920243703002021202337030020192008370300200120073602b0102001200a3602ac10200120053602a8100c020b024020012802b410450d00201c10ec064108470d01024020012802b4102203450d000240200141b8106a28020041ffffff3f71450d002003102e0b200141cc106a28020041ffffff3f71450d0020012802c810102e0b2010201e290200370200201041086a201e41086a290200370200201041106a201e41106a290200370200201041186a201e41186a290200370200201041206a201e41206a290200370200200141003602b4100b024020012802d80f450d0020012802dc0f2203450d00024020012802e00f41ffffff3f71450d002003102e0b200141f40f6a28020041ffffff3f71450d00200141f00f6a280200102e0b02402001280288102203450d000240200128028c1041ffffff3f71450d002003102e0b20012802a01041ffffff3f71450d00200128029c10102e0b20012802b4102203450d020240200141b8106a28020041ffffff3f71450d002003102e0b200141cc106a28020041ffffff3f71450d0220012802c810102e0c020b20012802881021040c000b0b200224000f0b1036000b1038000b1800200020014101472003ad4220862002ad84101a10da080b8d0101017f230041206b22062400200641086a200310dc0820004101472002ad4220862001ad84200641186a200641106a2200200628020822014101461b2903002005ad4220862004ad841019210202402001450d002000280200450d00200628020c102e0b024020032802002201450d00200341046a280200450d002001102e0b200641206a240020024101460b4401017f2000101d2201290000370000200041186a200141186a290000370000200041106a200141106a290000370000200041086a200141086a2900003700002001102e0bc11d09097f027e057f017e027f017e017f047e037f230041f0006b220424000240200241086a22052802002206200120062001491b2207450d00410021080240024002400240024003402002280200210902402006410274220a450d00200a210b2009210c02400340200c28020022012802080d012001417f3602080240200141f4006a2d00000d0002402001290330220d200141386a290300220e844200520d00200142013703202001427f370310200141286a4200370300200141186a427f3703000c010b200441086a427f427f200d200e10e7082001427f370320200141286a427f370300200141186a200441086a41086a290300370300200120042903083703100b200c41046a210c20014100360208200b417c6a220b0d000c020b0b4194dacc004110200441186a41c498c90041d498c900103e000b2003280200220f2003280208221041e0006c6a211102402010450d00200f21120340024020122802382201450d00200141d8006c2113201228023041306a210c02400340200c28020022012802080d01417f210b2001417f3602080240200141f4006a2d00000d002001290330220d200141386a290300220e84500d00200441186a2012290310201241186a2903002012290300201241086a290300200d200e10ea0420012001290310220d427f200d427f20042903202004280218410146220b1b22147c220e200e200d542215200141186a2216290300220d427f200441186a41106a290300200b1b22177c2015ad7c220e200d54200e200d511b220b1b20142017845022151b3703102016200d427f200e200b1b20151b3703002001280208210b0b2001200b41016a360208200c41d8006a210c201341a87f6a2213450d020c000b0b4194dacc004110200441186a41c498c900418499c900103e000b201241e0006a22122011470d000b0b200841016a21182009200a6a2116200641027421012009417c6a210b03402001450d07200b41046a220b280200220c280208221341016a41004c0d06200c20133602082001417c6a2101200c41f4006a2d00000d000b200b2802002213280208220c41016a41004c0d042013200c36020802402001450d00200b41046a210c201341286a2903002114201341186a2903002119201329032021172013290310211a0340200c2802002201280208221341016a41004c0d05200120133602080240200141f4006a2d00000d0020012013360208200141186a290300210d2001290310210e02400240024020172001290320221b852014200141286a290300221c85844200520d00201a200e542019200d542019200d511b0d03201a200e852019200d858442005221120c010b2017201484500d01201b201c84500d024110102c2201450d072001201a3e020c2001201a4220883e0208200120193e0204200120194220883e020020044284808080c00037025420042001360250200441d0006a10bb074110102c2201450d072001201b3e020c2001201b4220883e02082001201c3e02042001201c4220883e020020044284808080c00037026420042001360260200441e0006a10bb07200441186a41086a2213200441d0006a41086a221228020036020020042004290350370318200441306a200441186a200441e0006a10bc070240200428026441ffffffff0371450d002004280260102e0b4110102c2201450d072001200e3e020c2001200e4220883e02082001200d3e02042001200d4220883e020020044284808080c00037025420042001360250200441d0006a10bb074110102c2201450d07200120173e020c200120174220883e0208200120143e0204200120144220883e020020044284808080c00037026420042001360260200441e0006a10bb072013201228020036020020042004290350370318200441c0006a200441186a200441e0006a10bc070240200428026441ffffffff0371450d002004280260102e0b2004280230211d024002402004280238221e0d0041012106410021130c010b201e4102742212417c6a41027641016a211541002113201d2101034002402001280200450d00410021060c020b200141046a210141012106201341016a21132012417c6a22120d000b201521130b2004280240210a024002400240024002402004280248221f450d00200a201f4102746a210941002112201f2115200a2101034020012802000d022015417f6a2115201241016a2112200141046a22012009470d000b0b410121124100210920060d010c030b410121092006450d010b410020096b21120c010b201e2013490d07417f201f20126b2212201e20136b22064720062012491b22120d00201d20134102746a21092015200620152006491b41016a211541002113034002402015417f6a22150d00410021120c020b200120136a2112200920136a2106201341046a2113417f20062802002206201228020022124720062012491b2212450d000b0b0240200428024441ffffffff0371450d00200a102e0b200428023441ffffffff0371450d00201d102e0b20124101470d010b200e211a200d2119201b2117201c2114200c210b0b200c41046a220c2016470d000b0b200b450d060240200b280200220c2802080d00417f2101200c417f360208200c2008360250200c41f4006a41013a000002402010450d00200c41106a41c4006a21120340200f221341e0006a210f02402013280238220b450d0020132802302101200b41d8006c210b03400240200141346a2012412010ec080d00201341186a22152903002117200c41186a2216290300210d20132903102114200c290310210e200c2903202119200141186a200c41286a2206290300370300200141106a20193703002001200d4200200d20177d200e201454ad7d2219200e20147d221b200e562019200d562019200d511b22091b201420178450220a1b3703082001200e4200201b20091b200a1b3703002016290300210d2006290300210e200c29031021142013200c290320370320201341286a200e370300201320143703102015200d3703000b200141d8006a2101200b41a87f6a220b0d000b0b200f2011470d000b200c28020821010b200c200141016a36020820182007460d0720052802002106201821080c010b0b4194dacc004110200441186a41c498c900419499c900103e000b2013201e41d4dacc001056000b1036000b41bcd9cc004118200441186a41f09cc50041f498c900103e000b41bcd9cc004118200441186a41b4ebc00041e09dc500103e000b41bcd9cc004118200441186a41e498c90041f498c900103e000b20032802002201200328020841e0006c6a2111200441286a2116024003400240024002402001220b2011460d00200b41386a220a280200220c0d0141002115200a4100360200410021090c020b200441186a41086a2201200241086a280200360200200441186a41146a200341086a2802003602002000410036020020002002290200370204200420032902003702242000410c6a2001290300370200200041146a200441286a2903003702000c030b200b2802302101200c41d8006c2113024003400240200141306a2212280200220c280208221541016a41004a0d0041bcd9cc004118200441186a41e498c90041a499c900103e000b200c201536020802400240200c41f4006a2d0000450d00200441186a200b290300200b41086a2903002001290300200141086a290300200b290310200b41186a29030010ea042004290320210d200141286a427f20162903002004280218410146220c1b370300200141206a427f200d200c1b3703000c010b200141286a4200370300200141206a42003703000b02402012280200220c2802080d00200c417f360208200141206a290300210d200141286a290300210e200c4100360208200c427f200d200c29034022147c220d200d2014542212200e200c41c8006a2215290300220d7c2012ad7c220e200d54200e200d511b22121b3703402015427f200e20121b370300200141d8006a2101201341a87f6a2213450d020c010b0b4194dacc004110200441186a41c498c90041b499c900103e000b200a280200211541002109200a41003602002015450d0041002106410021094100210c02400340024002402009450d00200c41d8006c21010340200b280230221220016a221341206a290300201341286a290300844200510d02201220066a20016a201341d80010e9081a200141d8006a21012015200c41016a220c4b0d000c040b0b200b2802302212200c41d8006c6a41206a210103402001290300200141086a29030084500d01200141d8006a21012015200c41016a220c4b0d000b410021090c030b2012200c41d8006c6a220128023022132013280200417f6a360200200c41016a210c0240200128023022132802000d00201341046a22132013280200417f6a360200200141306a280200220141046a2802000d002001102e0b200941016a2109200641a87f6a21062015200c4b0d000b0b024020090d00410021090c010b200b2802302201200c20096b41d8006c6a2001200c41d8006c6a2015200c6b41d8006c10ea081a0b200b41e0006a2101200a201520096b3602002004200b10bb042004280200220c450d000b200428020421012000428180808030370200200041086a2001ad422086200cad8437020020032802002115024020032802082201450d002015200141e0006c6a211220152101034002402001221341386a2802002201450d00200141d8006c210c201328023041306a210103402001280200220b200b280200417f6a36020002402001280200220b2802000d00200b41046a220b200b280200417f6a3602002001280200220b41046a2802000d00200b102e0b200141d8006a2101200c41a87f6a220c0d000b0b201341e0006a21010240201341346a280200220c450d00200c41d8006c450d002013280230102e0b20012012470d000b0b0240200341046a2802002201450d00200141e0006c450d002015102e0b200228020021130240200241086a2802002201450d002001410274210c2013210103402001280200220b200b280200417f6a36020002402001280200220b2802000d00200b41046a220b200b280200417f6a3602002001280200220b41046a2802000d00200b102e0b200141046a2101200c417c6a220c0d000b0b200241046a28020041ffffffff0371450d002013102e0b200441f0006a24000b930301067f230041106b2202240002400240024002400240024020014102490d0020002802042203280208220441016a41004c0d022003200436020820002802002204280208220541016a41004c0d032003280250210320042005360208200320042802504f0d00200028020021032000200028020436020002400240200141034f0d00200041046a21000c010b200041046a21042001417f6a21060340200441046a22002802002205280208220741016a41004c0d06200520073602082003280208220741016a41004c0d072005280250210520032007360208024020052003280250490d00200421000c020b2006450d0320042000280200360200200021042006417f6a22064101470d000b0b200020033602000b200241106a24000f0b2001200141d4d1cc00103c000b41bcd9cc004118200241086a41c4f8c90041d4f8c900103e000b41bcd9cc004118200241086a41c4f8c90041d4f8c900103e000b41bcd9cc004118200241086a41c4f8c90041d4f8c900103e000b41bcd9cc004118200241086a41c4f8c90041d4f8c900103e000bb51006037f017e017f017e0c7f027e23004180026b22022400200141346a2802002103200141386a2802002104200141086a29030021052001280230210620012903002107200241086a41186a200141d4006a290000370300200241086a41106a200141cc006a290000370300200241086a41086a200141c4006a2900003703002002200129003c37030820022005370330200220073703282006200441d8006c22086a21092006210102400240024002402004450d004100210a20024198016a41086a210b20024198016a41106a210c20024198016a41186a210d024002400340200b2006200a6a2201413c6a290200370300200c200141c4006a290200370300200d200141cc006a29020037030020024198016a41206a200141d4006a2802003602002002200141346a29020037039801200141306a280200220e450d02200141286a2903002105200141206a2903002107200241e0016a41186a220f200d290300370300200241e0016a41106a2210200c290300370300200241e0016a41086a2211200b29030037030020022002290398013703e00102400240200720052002290328200241286a41086a29030010e606221241ffff03710d004100210f0c010b200241c0016a41186a200f290300370300200241c0016a41106a2010290300370300200241c0016a41086a2011290300370300200220022903e0013703c0014101210f201221130b200e200e280200417f6a2210360200024020100d00200e41046a22102010280200417f6a221036020020100d00200e102e0b200f0d012008200a41d8006a220a470d000b200921010c020b200241386a41086a220e200241c0016a41086a290300370300200241386a41106a220b200241c0016a41106a290300370300200241386a41186a220c200241c0016a41186a290300370300200220022903c00122053703582002200537033802404122102c2208450d0020082002290338370100200820133b0120200841186a200c290300370100200841106a200b290300370100200841086a200e290300370100200220093602442002200141d8006a220b3602402002200336023c200220063602382002200241286a360248024002400240200441d8006c41a87f6a200a470d0041012103410121040c010b20024198016a41086a210a20024198016a41106a210c20024198016a41186a210d410121034101210403402002200b220141d8006a220b360240200141306a280200210e200141286a2903002105200141206a2903002107200a2001413c6a290200370300200c200141c4006a290200370300200d200141cc006a29020037030020024198016a41206a200141d4006a2802003602002002200141346a2902003703980102400240200e450d00200241e0016a41186a2210200d290300370300200241e0016a41106a2211200c290300370300200241e0016a41086a2212200a29030037030020022002290398013703e00102400240200720052002280248220f290300200f41086a29030010e606220641ffff03710d004100210f0c010b200241c0016a41186a2010290300370300200241c0016a41106a2011290300370300200241c0016a41086a2012290300370300200220022903e0013703c0014101210f200621130b200e200e280200417f6a2210360200024020100d00200e41046a22102010280200417f6a221036020020100d00200e102e0b200f0d012009200b470d020b200141d8006a210b0c020b200241d8006a41086a200241c0016a41086a2903002205370300200241d8006a41106a200241c0016a41106a2903002207370300200241d8006a41186a200241c0016a41186a2903002214370300200220022903c0012215370358200d2014370300200c2007370300200a20053703002002201537039801024020042003470d00200341016a22012003490d092003410174220e2001200e20014b1b22014104200141044b1bad42227e2205422088a74541017421012005a7210e0240024020030d00200241003602e0010c010b200241023602e801200220083602e0012002200341226c3602e4010b200241c0016a200e2001200241e0016a107d20022802c801210120022802c0014101460d0320022802c4012108200141226e21030b2008200441226c6a2201200229039801370100200c2903002105200d2903002107200a2903002114200120133b0120200141086a2014370100200141186a2007370100200141106a2005370100200441016a21042002280240220b20022802442209470d000b0b2009200b6b220141d8006d210e02402001450d00200e41d8006c210e200b41306a210103402001280200220a200a280200417f6a36020002402001280200220a2802000d00200a41046a220a200a280200417f6a3602002001280200220a41046a2802000d00200a102e0b200141d8006a2101200e41a87f6a220e0d000b0b0240200228023c2201450d00200141d8006c450d002002280238102e0b2004450d042000200336020420002008360200200041086a20043602002000410c6a2002290308370000200041146a200241086a41086a2903003700002000411c6a200241186a290300370000200041246a200241206a2903003700000c050b2001450d050b1036000b200141d8006a21010b024020092001460d000340200141306a220e280200220a200a280200417f6a360200200141d8006a21010240200e280200220a2802000d00200a41046a220a200a280200417f6a360200200e280200220e41046a2802000d00200e102e0b20092001470d000b0b02402003450d00200341d8006c450d002006102e0b200041003602000c010b200041003602002003450d00200341226c450d002008102e0b20024180026a24000f0b1038000bd6d20102517f0d7e230041c0076b22012400200141003602e4022001420037020c0240024002400240200041086a220228020022030d002001410036020c0c010b200141f8016a41c0006a2104200141c8066a41c0006a2105200141a8036a41c0006a2106200141c8066a41206a2107200141386a41206a2108200141186a41106a2109200141186a41186a210a200141c8066a41d8006a210b200141c8066a41d0006a210c200141c8066a41c8006a210d4100210e03400240024002402002280200220f200e4d0d00200141186a41086a22102000280200200e412c6c22116a220f41146a2900003703002009200f411c6a290000370300200a200f41246a2900003703002001200f29000c370318200f280208221241ffffff3f712012470d0620124105742213417f4c0d06200f280200210f0240024020130d00410121140c010b2013102c2214450d060b0240024002402013410576221520124f0d00201341047622162012201620124b1b22164104201641044b1b221641ffffff3f712016462117201641057421160240024020130d00200141003602c8060c010b200141013602d006200120133602cc06200120143602c8060b200141c8056a20162017200141c8066a107d20012802d005211320012802c8054101460d0120012802cc052114201341057621150b200f200f201241306c22136a460d03201341506a41306e21182014211203402012200f290000370000201241186a200f41186a290000370000201241106a200f41106a290000370000201241086a200f41086a290000370000201241206a2112200f41306a210f201341506a22130d000b201841016a22194102490d032019417f6a20196c410176220f41ffffff1f71200f470d08200f410674220f417f4c0d084101211a4101211b0240200f450d00200f102c221b450d080b201441206a211c200f410676211d410021134100211e0c010b20130d060c070b03400240201e220f41016a221e20194f0d0002400240200f20194f0d00201a201a2019201a20194b1b6b211f2014200f4105746a2116201e2019201e20194b1b2120201341017421212013410674211720182122201c21120340200141a8066a41186a220f201641186a290000370300200141a8066a41106a2223201641106a290000370300200141a8066a41086a2224201641086a290000370300200120162900003703a806201f450d02200141c8066a41186a2225200f290300370300200141c8066a41106a22262023290300370300200141c8066a41086a22232024290300370300200120012903a8063703c80620072012290000370000200741086a201241086a290000370000200741106a201241106a290000370000200741186a201241186a290000370000024002402013201d470d00201341016a220f2013490d0d2021200f2021200f4b1b220f4104200f41044b1b220f41ffffff1f71200f462124200f410674210f0240024020130d00200141003602c8050c010b200141013602d005200120173602cc052001201b3602c8050b20014188046a200f2024200141c8056a107d200128029004210f2001280288044101460d01200128028c04211b200f410676211d0b201b20176a220f20012903c806370000200f41386a200141c8066a41386a290300370000200f41306a200141c8066a41306a290300370000200f41286a200141c8066a41286a290300370000200f41206a2007290300370000200f41186a2025290300370000200f41106a2026290300370000200f41086a2023290300370000201f41016a211f201241206a2112202141026a2121201741c0006a2117201341016a21132022417f6a2222450d040c010b0b200f450d0a0c090b200f201941b8aac700103c000b2020201941c8aac700103c000b2018417f6a2118201a41016a211a201c41206a211c201e2019470d000b2013450d02201b20134106746a2127201b21230340200141386a41386a202341386a290000370300200141386a41306a202341306a290000370300200141386a41286a202341286a2900003703002008202341206a290000370300200141386a41186a202341186a220f290000370300200141386a41106a202341106a2212290000370300200141386a41086a202341086a221329000037030020012023290000370338200141f8006a41186a2216200f290000370300200141f8006a41106a220f2012290000370300200141f8006a41086a221220132900003703002001202329000037037820014198016a41186a200841186a221329000037030020014198016a41106a200841106a221729000037030020014198016a41086a200841086a221f2900003703002001200829000037039801200141c8066a41186a22252016290300370300200141c8066a41106a2226200f290300370300200141c8066a41086a2219201229030037030020072008290000370000200741086a201f290000370000200741106a2017290000370000200741186a2013290000370000200120012903783703c80602400240200128020c221f450d00200128020821210c010b41a808102c221f450d0741002121201f41003b0106201f41003602002001201f36020c200141003602080b202341c0006a21230340201f41286a210f201f2f010621164100211203400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020162012460d0002400240200141c8066a200f41606a412010ec082213450d002013417f4c0d010c270b2007200f412010ec082213450d02201341004e0d260b201221160b2021450d012021417f6a2121201f20164102746a41a8086a280200211f0c260b2002280200221e200e4d0d022000280200222220116a220f28020841306c2216450d22201f20124105746a41c8056a2124200f280200210f41002113034002400240200f200141f8006a412010ec080d00410121170c010b200f20014198016a412010ec084521170b200f41306a210f201720136a2113201641506a22160d000b20134102470d22201e412c6c210f202241546a21130340200f450d23200f41546a210f2013412c6a21132022410c6a21162022412c6a212220162024412010ec080d000b0240201341086a280200220f450d0020132802002217200f41306c22226a2116410021130340201720136a220f200141f8006a412010ec08450d03200f20014198016a412010ec08450d032022201341306a2213470d000b0b4108211e4100211a0c0f0b200141b8016a41386a220f200141c8066a41386a2228290300370300200141b8016a41306a2212200141c8066a41306a2229290300370300200141b8016a41286a2213200141c8066a41286a222a290300370300200141b8016a41206a22172007290300370300200141b8016a41186a22212025290300370300200141b8016a41106a22222026290300370300200141b8016a41086a22242019290300370300200120012903c8063703b801200141a8036a41386a222b200f290300370300200141a8036a41306a222c2012290300370300200141a8036a41286a222d2013290300370300200141a8036a41206a222e2017290300370300200141a8036a41186a222f2021290300370300200141a8036a41106a22302022290300370300200141a8036a41086a22312024290300370300200120012903b8013703a803200141a8066a41186a2232200a290300370300200141a8066a41106a22332009290300370300200141a8066a41086a22342010290300370300200120012903183703a8060240201f2f0106220f410a4b0d00200141c8056a41186a22172032290300370300200141c8056a41106a22212033290300370300200141c8056a41086a22222034290300370300200120012903a8063703c8052028202b2903003703002029202c290300370300202a202d2903003703002007202e2903003703002025202f2903003703002026203029030037030020192031290300370300200120012903a8033703c806201f41086a2113200f41016a21120240201641016a2224200f4b221e0d00201320244106746a201320164106746a20122016417f736a41067410ea081a0b201320164106746a220f20012903c806370000200f41386a2028290300370000200f41306a2029290300370000200f41286a202a290300370000200f41206a2007290300370000200f41186a2025290300370000200f41106a2026290300370000200f41086a2019290300370000200141e8026a41186a22132017290300370300200141e8026a41106a22172021290300370300200141e8026a41086a22212022290300370300200120012903c8053703e802201f41c8056a210f0240201e0d00200f20244105746a200f20164105746a20122016417f736a41057410ea081a0b200f20164105746a220f20012903e802370000200f41186a2013290300370000200f41106a2017290300370000200f41086a2021290300370000201f20123b01060c210b410021214104211302400240201641054f0d00201621170c010b4105211341052117024002402016417b6a0e020201000b201641796a211741012121410621130c010b41002117410121210b41a808102c2212450d2b201241003b0106201241003602002012201f2f010622222013417f736a22163b0106200141c8056a41386a2235201f41086a222420134106746a220f41386a290000370300200141c8056a41306a2236200f41306a290000370300200141c8056a41286a2237200f41286a290000370300200141c8056a41206a2238200f41206a290000370300200141c8056a41186a2239200f41186a290000370300200141c8056a41106a223a200f41106a290000370300200141c8056a41086a223b200f41086a2900003703002001200f2900003703c805200141e8026a41186a223c201f41c8056a221e20134105746a220f41186a290000370300200141e8026a41106a223d200f41106a290000370300200141e8026a41086a223e200f41086a2900003703002001200f2900003703e8022016410c4f0d022022201341016a220f6b2016470d03201241086a2024200f4106746a201641067410e9081a201241c8056a201e200f4105746a201641057410e9081a201f20133b01062028203529030037030020292036290300370300202a203729030037030020072038290300370300202520392903003703002026203a2903003703002019203b290300370300200520012903e802370000200541086a223f203e290300370000200541106a2240203d290300370000200541186a2241203c290300370000200120012903c8053703c806200141c8056a200141c8066a41e00010e9081a200141e8046a41186a22422032290300370300200141e8046a41106a22432033290300370300200141e8046a41086a22442034290300370300200120012903a8063703e8042012201f20211b22132f0106210f2028202b2903003703002029202c290300370300202a202d2903003703002007202e2903003703002025202f2903003703002026203029030037030020192031290300370300200120012903a8033703c806201341086a2121200f41016a21160240201741016a2222200f4b22240d00202120224106746a202120174106746a20162017417f736a41067410ea081a0b202120174106746a220f20012903c806370000200f41386a2028290300370000200f41306a2029290300370000200f41286a202a290300370000200f41206a2007290300370000200f41186a2025290300370000200f41106a2026290300370000200f41086a2019290300370000203c2042290300370300203d2043290300370300203e2044290300370300200120012903e8043703e802201341c8056a210f024020240d00200f20224105746a200f20174105746a20162017417f736a41057410ea081a0b200f20174105746a220f20012903e802370000200f41186a203c290300370000200f41106a203d290300370000200f41086a203e290300370000201320163b010620014188046a200141c8056a41e00010e9081a200141a8036a20014188046a41e00010e9081a024002400240201f28020022210d00410021450c010b41002145201221460340201f2f01042117200141e8046a41386a2247202b290300370300200141e8046a41306a2248202c290300370300200141e8046a41286a2249202d290300370300200141e8046a41206a224a202e2903003703002042202f2903003703002043203029030037030020442031290300370300200120012903a8033703e804200141a8056a41186a224b200641186a290000370300200141a8056a41106a224c200641106a290000370300200141a8056a41086a224d200641086a290000370300200120062900003703a8054101450d0720212f0106224e410b490d024100212041042116024020174105490d0020172116024002402017417b6a0e020201000b201741796a211741012120410621160c010b4100211741012120410521160b41d808102c2212450d2e201241003b010620124100360200201220212f0106224f2016417f736a22133b010620014188046a41386a221f202141086a225020164106746a220f41386a29000037030020014188046a41306a2222200f41306a29000037030020014188046a41286a2224200f41286a29000037030020014188046a41206a221e200f41206a29000037030020014188046a41186a221a200f41186a29000037030020014188046a41106a2218200f41106a29000037030020014188046a41086a221c200f41086a2900003703002001200f29000037038804203c202141c8056a225120164105746a220f41186a290000370300203d200f41106a290000370300203e200f41086a2900003703002001200f2900003703e8022013410c4f0d08204f201641016a220f6b2013470d09201241086a2050200f4106746a201341067410e9081a201241c8056a2051200f4105746a201341057410e9081a202120163b01062028201f29030037030020292022290300370300202a20242903003703002007201e2903003703002025201a290300370300202620182903003703002019201c290300370300200520012903e802370000203f203e2903003700002040203d2903003700002041203c29030037000020012001290388043703c80620122f0106221341016a214f2013410c4f0d0a204e20166b2216204f470d0b204541016a2145201241a8086a2021200f4102746a41a8086a201641027410e9081a4100210f024003402012200f4102746a41a8086a2802002216200f3b010420162012360200200f200f20134922166a220f20134b0d0120160d000b0b200141c8056a200141c8066a41e00010e9081a201f20472903003703002022204829030037030020242049290300370300201e204a290300370300201a204229030037030020182043290300370300201c2044290300370300200120012903e804370388042032204b2903003703002033204c2903003703002034204d290300370300200120012903a8053703a8062012202120201b22162f010621202028201f29030037030020292022290300370300202a20242903003703002007201e2903003703002025201a290300370300202620182903003703002019201c29030037030020012001290388043703c806201641086a210f202041016a211f0240201741016a221320204b22220d00200f20134106746a200f20174106746a2017417f73201f6a41067410ea081a0b200f20174106746a220f20012903c806370000200f41386a2028290300370000200f41306a2029290300370000200f41286a202a290300370000200f41206a2007290300370000200f41186a2025290300370000200f41106a2026290300370000200f41086a201929030037000020014188036a41186a2224203229030037030020014188036a41106a221e203329030037030020014188036a41086a221a2034290300370300200120012903a80637038803201641c8056a210f024020220d00200f20134105746a200f20174105746a2017417f73201f6a41057410ea081a0b200f20174105746a220f200129038803370000200f41186a2024290300370000200f41106a201e290300370000200f41086a201a290300370000201641a8086a210f0240201741026a2224202041026a22224f0d00200f20244102746a200f20134102746a2013417f7320226a41027410ea081a0b200f20134102746a20463602002016201f3b01060240201320224f0d00201620174102746a41ac086a210f0340200f2802002213201741016a22173b010420132016360200200f41046a210f201f2017470d000b0b200141a8036a200141c8056a41e00010e9081a2021211f2021280200220f212120122146200f0d000b0b200141f8016a200141a8036a41e00010e9081a203b200141f8016a41086a290200370300203a200141f8016a41106a2902003703002039200141f8016a41186a2902003703002038200141f8016a41206a2902003703002037200141f8016a41286a2902003703002036200141f8016a41306a2902003703002035200141f8016a41386a2902003703002034200441086a2902003703002033200441106a2902003703002032200441186a290200370300200120012902f8013703c805200120042902003703a806200128020c2213450d0a2001280208211641d808102c220f450d2c200f20133602a808200f41003b0106200f4100360200201341003b01042013200f3602002001200f36020c2001201641016a3602082028203529030037030020292036290300370300202a203729030037030020072038290300370300202520392903003703002026203a2903003703002019203b290300370300200120012903c8053703c80620014188046a41186a2217203229030037030020014188046a41106a221f203329030037030020014188046a41086a22212034290300370300200120012903a8063703880420162045470d0b200f2f01062216410b4f0d0c200f20164106746a221341086a20012903c806370000201341106a2019290300370000201341186a2026290300370000201341206a2025290300370000201341286a2007290300370000201341306a202a290300370000201341386a2029290300370000201341c0006a2028290300370000200f20164105746a221341c8056a200129038804370000201341d0056a2021290300370000201341d8056a201f290300370000201341e0056a2017290300370000200f201641016a22133b0106200f20134102746a41a8086a2012360200201220133b01042012200f3602002001200128021041016a36021020121a0c220b20014188046a41386a220f204729030037030020014188046a41306a2212204829030037030020014188046a41286a2216204929030037030020014188046a41206a221f204a29030037030020014188046a41186a2222204229030037030020014188046a41106a2224204329030037030020014188046a41086a221e2044290300370300200120012903e804370388042032204b2903003703002033204c2903003703002034204d290300370300200120012903a8053703a80620212f010621132028200f29030037030020292012290300370300202a20162903003703002007201f29030037030020252022290300370300202620242903003703002019201e29030037030020012001290388043703c806201741016a2112202141086a210f201341016a21160240201720134f221f0d00200f20124106746a200f20174106746a2017417f7320166a41067410ea081a0b200f20174106746a220f20012903c806370000200f41386a2028290300370000200f41306a2029290300370000200f41286a202a290300370000200f41206a2007290300370000200f41186a2025290300370000200f41106a2026290300370000200f41086a201929030037000020014188036a41186a2222203229030037030020014188036a41106a2224203329030037030020014188036a41086a22252034290300370300200120012903a80637038803202141c8056a210f0240201f0d00200f20124105746a200f20174105746a2017417f7320166a41057410ea081a0b200f20174105746a220f200129038803370000200f41186a2022290300370000200f41106a2024290300370000200f41086a2025290300370000202141a8086a210f201341026a21130240201f0d002017410274200f6a41086a200f20124102746a2012417f7320136a41027410ea081a0b200f20124102746a2046360200202120163b0106201220134f0d2020212012417f6a220f4102746a41ac086a2112034020122802002213200f41016a220f3b010420132021360200201241046a21122016200f470d000c210b0b2019200f41086a2903003703002026200f41106a2903003703002025200f41186a2903003703002001200f2903003703c806200f41286a2903002152200f41206a29030021534130102c221e450d2a201e2053370320201e20012903c806370300201e41286a2052370300201e41186a2025290300370300201e41106a2026290300370300201e41086a2019290300370300200120163602cc052001200f41306a220f3602c805200120014198016a3602d4052001200141f8006a3602d005202241506a2013460d0b4101211a200141f8006a211720014198016a21224101211803402001200f41306a22133602c8050240200f2017412010ec08450d00200f2022412010ec08450d002013210f20162013470d010c0e0b200f41286a2903002152200f41206a29030021532025200f41186a2903003703002026200f41106a2903003703002019200f41086a2903003703002001200f2903003703c806024002402018201a470d00201a41016a220f201a490d2e201a4101742213200f2013200f4b1b220f4104200f41044b1bad42307e2254422088a745410374210f2054a7211302400240201a0d0020014100360288040c010b20014108360290042001201e360288042001201a41306c36028c040b200141a8036a2013200f20014188046a107d20012802b003210f20012802a8034101460d0120012802ac03211e200f41306e211a0b201e201841306c6a220f20012903c806370300202629030021542025290300215520192903002156200f2053370320200f41086a2056370300200f41286a2052370300200f41186a2055370300200f41106a2054370300201841016a211820012802c805220f20012802cc052216460d0e20012802d405212220012802d00521170c010b0b200f450d2b0c2a0b200e201e41d8aac700103c000b2016410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b41ac9cc700413541e49cc7001039000b2013410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b204f410c41f49cc700104d000b41f49bc7004128419c9cc7001039000b41e8aac700412b4194abc7001039000b41e899c700413041989ac7001039000b41a89ac700412041c89ac7001039000b4101211a0c010b201841014d0d0020184102470d0b41e000102c2218450d1d2002280200220f200e4d0d010240200028020020116a220f28020841306c22170d00410221200c100b200f280200210f4102212041002113024002400240034002400240200f200141f8006a412010ec08450d00200f20014198016a412010ec080d010b200141a8066a41186a2216200f41186a290300370300200141a8066a41106a2222200f41106a290300370300200141a8066a41086a221c200f41086a2903003703002001200f2903003703a806200f41286a2903002152200f41206a2903002153024020132020470d00201341016a22202013490d24201341017422282020202820204b1b22204104202041044b1bad42307e2254422088a74541037421202054a721280240024020130d00200141003602c8060c010b200141083602d006200120183602c8062001201341306c3602cc060b200141c8056a20282020200141c8066a107d20012802d005212020012802c8054101460d0320012802cc052118202041306e21200b201c2903002154202229030021552016290300215620012903a80621572018201341306c6a2216205337032020162057370300201641286a2052370300201641186a2056370300201641106a2055370300201641086a2054370300201341016a21130b200f41306a210f201741506a22170d000b20134102470d120240201e2018412010ec08450d00200141c8066a41286a220f201e41286a22132903003703002007201e41206a22162903003703002025201e41186a22172903003703002026201e41106a22222903003703002019201e41086a221c2903003703002001201e2903003703c8062013201e41d8006a22282903003703002016201e41d0006a22132903003703002017201e41c8006a22162903003703002022201e41c0006a2217290300370300201c201e41386a2222290300370300201e201e2903303703002028200f29030037030020132007290300370300201620252903003703002017202629030037030020222019290300370300201e20012903c8063703300b2001427f3703d0052001427f3703c805200141003602a80641c00141e000201e1b41e0004100201e1b20181b21132018201e72221c0d014108210f0c020b2020450d200c1f0b2013102c220f450d1e0b200141003602f0042001200f3602e8042001201341306e22173602ec0402400240024020180d0041022113201e0d01410021220c020b41044102201e1b21130b41002116410021220240201720134f0d00201741017422222013202220134b1b22134104201341044b1b41306c211302400240201c0d00200141003602c8060c010b200141083602d0062001200f3602c8062001201741306c3602cc060b20014188046a20134108200141c8066a107d20012802900421132001280288044101460d052001200128028c04220f3602e8042001201341306e3602ec0420012802f00421220b200f202241306c6a210f02402018450d00201841e0006a221c2018460d00200141c8056a41086a290300215420012903c805215841002116201821130340201341306a21170240201341206a2903002253205856201341286a290300225220545620522054511b0d00200120533703c805200120163602a806200120523703d00520532158205221540b200f2013290300370300201341086a2903002155201341106a2903002156201341186a2903002157200f41286a2052370300200f41206a2053370300200f41186a2057370300200f41106a2056370300200f41086a2055370300200f41306a210f201641016a211620172113201c2017470d000b202220166a21220b201e450d00201e41e0006a221c201e460d00200141c8056a41086a290300215420012903c8052158201e21130340201341306a21170240201341206a2903002253205856201341286a290300225220545620522054511b0d00200120533703c805200120163602a806200120523703d00520532158205221540b200f2013290300370300201341086a2903002155201341106a2903002156201341186a2903002157200f41286a2052370300200f41206a2053370300200f41186a2057370300200f41106a2056370300200f41086a2055370300200f41306a210f201641016a2116202241016a212220172113201c2017470d000b0b200120223602f00420012802a806210f200141003602c80620014188046a41104104200141c8066a107d200128029004211302402001280288044101470d002013450d1f0c1e0b200128028c042232200f360200201341027621330240024020012802a806220f41014b0d00200141003602c80620014188046a41104104200141c8066a107d20012802900421132001280288044101460d06200128028c0422294101200f6b360200024020334101470d0020014284808080c0003702cc06200120323602c80620014188046a41104104200141c8066a107d20012802900421162001280288044101460d08200128028c042132201641027621330b20324103200f6b36020420012802a806210f024002402013410276222a4101470d0020014284808080c0003702cc06200120293602c80620014188046a41104104200141c8066a107d20012802900421132001280288044101460d01200128028c0421292013410276212a0b2029200f41026a3602040c020b2013450d200c1f0b200141003602c80620014188046a41104104200141c8066a107d20012802900421132001280288044101460d07200128028c042229200f410171410373220f360200024020334101470d0020014284808080c0003702cc06200120323602c80620014188046a41104104200141c8066a107d20012802900421162001280288044101460d09200128028c042132201641027621330b2032200f417e6a36020420012802a806210f02402013410276222a4101470d0020014284808080c0003702cc06200120293602c80620014188046a41104104200141c8066a107d20012802900421132001280288044101460d0a200128028c0421292013410276212a0b2029200f417e6a3602040b4104102c220f450d1d200142013702fc012001200f3602f801024002402029280200220f41014b0d002025200a2903003703002026200929030037030020192010290300370300200120012903183703c8060c010b2025202441186a2900003703002026202441106a2900003703002019202441086a290000370300200120242900003703c8060b024020022802002213450d002000280200221c2013412c6c6a212803400240201c410c6a200141c8066a412010ec080d00201c2802082216450d00201c2802002113201641306c21174100212220012802f004211603402016200f4d0d060240201320012802e804200f41306c6a412010ec08450d00201341306a2113202241016a2122201741506a22170d010c020b0b201341206a2216427f2016290300225220012903c8057c225320532052542216201341286a22132903002252200141c8056a41086a2903007c2016ad7c225320525420532052511b22161b3703002013427f205320161b3703000b201c412c6a221c2028470d000b0b024002402029280204220f4102490d002025202441186a2900003703002026202441106a2900003703002019202441086a290000370300200120242900003703c8060c010b2025200a2903003703002026200929030037030020192010290300370300200120012903183703c8060b024020022802002213450d002000280200221c2013412c6c6a212803400240201c410c6a200141c8066a412010ec080d00201c2802082216450d00201c2802002113201641306c21174100212220012802f004211603402016200f4d0d060240201320012802e804200f41306c6a412010ec08450d00201341306a2113202241016a2122201741506a22170d010c020b0b201341206a2216427f2016290300225220012903c8057c225320532052542216201341286a22132903002252200141c8056a41086a2903007c2016ad7c225320525420532052511b22161b3703002013427f205320161b3703000b201c412c6a221c2028470d000b0b202a0d090c0a0b20242001290318370000202441186a200a290300370000202441106a2009290300370000202441086a20102903003700000c0f0b200e200f41a4abc700103c000b200f201641b4abc700103c000b2013450d1a0c190b2013450d190c180b2016450d180c170b2013450d170c160b2016450d160c150b2013450d150c140b2029102e0b024002402032280200220f41014b0d002025200a2903003703002026200929030037030020192010290300370300200120012903183703c8060c010b2025202441186a2900003703002026202441106a2900003703002019202441086a290000370300200120242900003703c8060b024002400240024020022802002213450d002000280200221c2013412c6c6a212803400240201c410c6a200141c8066a412010ec080d00201c41086a222a2802002229450d00201c2802002113202941306c41506a21174100212220012802f004211603402016200f4d0d040240201320012802e804200f41306c6a412010ec08450d00201341306a2113202241016a2122201741506a22174150470d010c020b0b0240201341206a2216290300225320012903c805225556201341286a22222903002252200141c8056a41086a29030022545620522054511b0d002013201341306a201710ea081a202a2029417f6a3602000240200128028002221320012802fc01470d00201341016a22162013490d1b201341017422172016201720164b1b22164104201641044b1b221641ffffffff03712016464102742117201641027421160240024020130d0020014100360288040c010b2001410436029004200120012802f801360288042001201341027436028c040b200141a8036a2016201720014188046a107d20012802b003211320012802a8034101460d0b200120012802ac033602f801200120134102763602fc0120012802800221130b20012802f80120134102746a200f360200200120012802e40241016a3602e402200120012802800241016a360280020c010b20224200205220547d2053205554ad7d2254205320557d2255205356205420525620542052511b22131b37030020164200205520131b3703000b201c412c6a221c2028470d000b0b024002402032280204220f4102490d002025202441186a2900003703002026202441106a2900003703002019202441086a290000370300200120242900003703c8060c010b2025200a2903003703002026200929030037030020192010290300370300200120012903183703c8060b024020022802002213450d00200028020022262013412c6c6a2119034002402026410c6a200141c8066a412010ec080d00202641086a2228280200221c450d0020262802002113201c41306c41506a21174100212220012802f004211603402016200f4d0d040240201320012802e804200f41306c6a412010ec08450d00201341306a2113202241016a2122201741506a22174150470d010c020b0b0240201341206a2216290300225320012903c805225556201341286a22222903002252200141c8056a41086a29030022545620522054511b0d002013201341306a201710ea081a2028201c417f6a3602000240200128028002221320012802fc01470d00201341016a22162013490d1b201341017422172016201720164b1b22164104201641044b1b221641ffffffff0371201646410274211720164102742116024002402013450d002001410436029004200120012802f801360288042001201341027436028c040c010b20014100360288040b200141a8036a2016201720014188046a107d20012802b003211320012802a8034101460d0b200120012802ac033602f801200120134102763602fc0120012802800221130b20012802f80120134102746a200f360200200120012802e40241016a3602e402200120012802800241016a360280020c010b20224200205220547d2053205554ad7d2254205320557d2255205356205420525620542052511b22131b37030020164200205520131b3703000b2026412c6a22262019470d000b0b20330d010c020b200f201641c4abc700103c000b2032102e0b20012802f8012222417c6a2116200128028002410274220f211302400340024020130d00410021160c020b2013417c6a2113201641046a221628020041014b0d000b0b20012802fc012126202221130240024002400340200f450d01200f417c6a210f20132802002117201341046a211320174102490d000b0240202641ffffffff0371450d002022102e0b20160d0120242001290318370000202441186a200a290300370000202441106a2009290300370000202441086a20102903003700000c020b0240202641ffffffff0371450d002022102e0b20160d0141d4abc70041294180acc7001039000b200141003a00a803024002402021450d002021417f6a2113201f20124102746a41a8086a280200210f02400340200f2f010621122013450d012013417f6a2113200f20124102746a41a8086a280200210f0c000b0b200141003602880420012012417f6a410020121b360290042001200f410020121b36028c04200141c8066a20014188046a200141a8036a10ce0620252903002152200141c8066a41386a22172903002153200141c8066a41306a221f2903002154200141c8066a41286a22212903002155200b2903002156200c2903002157200d290300215820012903d806215920012903d006215a20012903c806215b20012903e806215c200129038807215d20012802a80721160240024020012802b007221320012802ac0722122f01064f0d002012210f0c010b034002402012280200220f0d004100210f0c020b201641016a211620122f01042113200f21122013200f2f01064f0d000b0b200f20134106746a221241206a2222290000215e20222052370000201241186a2222290000215220222059370000201241106a222229000021592022205a370000201241086a2222290000215a2022205b370000201241c0006a2222290000215b20222053370000201241386a2222290000215320222054370000201241306a2222290000215420222055370000201241286a221229000021552012205c370000200f20134105746a221241d8056a2222290000215c20222057370000201241d0056a2222290000215720222058370000201241c8056a222229000021582022205d370000201241e0056a2212290000215d20122056370000201341016a211202402016450d00200f20124102746a41a8086a280200210f02402016417f6a2212450d000340200f2802a808210f2012417f6a22120d000b0b410021120b200d205737030020212054370300200c205c370300201f2053370300200b205d3703002017205b3703002025205e3703002001205837038807200120553703e8062001205a3703c806200120123602b0072001200f3602ac07200141003602a807200120593703d006200120523703d8060c010b20012012360290042001201f36028c042001410036028804200141c8066a20014188046a200141a8036a10ce060b20012001280210417f6a36021020012d00a803450d00200128020c220f450d0220012802082212450d032001200f2802a808221336020c20012012417f6a36020820134100360200200f102e0b024020012802ec04220f450d00200f41306c450d0020012802e804102e0b2020450d00202041306c450d002018102e0b201a450d07201a41306c0d050c070b41e8aac700412b4190acc7001039000b41b39bc700412141d49bc7001039000b2013450d0f0c0e0b2020450d00202041306c450d002018102e0b201a450d02201a41306c450d020b201e102e0c010b2001200128021041016a3602100b20232027470d030c060b201241016a2112200f41c0006a210f0c000b0b0b0b200e200f41a8aac700103c000b4100211d4101211b0b0240201d41ffffff1f71450d00201b102e0b200e41016a210e02402015450d002014102e0b200e2003470d000b200128020c210f2001410036020c200f450d00024020012802082212450d002012417f6a21120340200f2802a808210f2012450d012012417f6a21120c000b0b024020012802102216450d00200141c8066a41c0006a21174100210703402016417f6a2116410121120240024003402007200f2f0106490d010240200f28020022130d00200f102e4100210f0c030b200f2f01042107200f102e2012417f6a21122013210f0c000b0b20014188046a41386a221f200f20074106746a221341c0006a29000037030020014188046a41306a2221201341386a29000037030020014188046a41286a2222201341306a29000037030020014188046a41206a2223201341286a29000037030020014188046a41186a2224201341206a29000037030020014188046a41106a2225201341186a29000037030020014188046a41086a2226201341106a2900003703002001201341086a2900003703880420014188036a41186a221b200f20074105746a221341e0056a29000037030020014188036a41106a221d201341d8056a29000037030020014188036a41086a2219201341d0056a2900003703002001201341c8056a29000037038803200741016a2107024020124101460d00200f20074102746a41a8086a280200210f02402012450d000340201241016a220720124f2113200f2802a808210f2007211220130d000b0b410021070b2017200129038803370000200141c8066a41386a201f290300370300200141c8066a41306a2021290300370300200141c8066a41286a2022290300370300200141c8066a41206a2023290300370300200141c8066a41186a2024290300370300200141c8066a41106a2025290300370300200141c8066a41086a2026290300370300201741086a2019290300370000201741106a201d290300370000201741186a201b29030037000020012001290388043703c806200141c8056a200141c8066a41e00010e9081a0b20160d000b0b0340200f2802002112200f102e2012210f20120d000b0b200141003602d8022001420037029c0102400240200041086a222828020022020d002001410036029c010c010b20282802002112200141c8066a410472211d200141386a41106a2142200141386a41186a2143200141a8036a41206a213d4100211602400340200120163602dc02201220164d0d01201641016a2114200141386a41086a22442000280200220f2016412c6c6a220741146a29000037030020422007411c6a2900003703002043200741246a2900003703002001200729000c3703384100212003400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200f2016412c6c6a220f28020820204b0d002014211620142002470d2c200128029c01210f2001410036029c01200f450d2e2001280298012212450d012012417f6a21120340200f2802a003210f2012450d022012417f6a21120c000b0b200141a8066a41186a200f280200202041306c6a220f41186a2207290300370300200141a8066a41106a200f41106a2213290300370300200141a8066a41086a200f41086a22172903003703002001200f2903003703a806200141e8046a41186a221f2043290300370300200141e8046a41106a22212042290300370300200141e8046a41086a22222044290300370300200120012903383703e804200141003a008805200141f8016a41186a22122007290000370300200141f8016a41106a22072013290000370300200141f8016a41086a221320172900003703002001200f2900003703f801200141013a00980220014198016a200141e8046a109f02211720014198016a200141f8016a109f022125200141c8056a41186a221a2043290300370300200141c8056a41106a22182042290300370300200141c8056a41086a221c2044290300370300200120012903383703c805200141003a00e805200141c8066a20014198016a200141c8056a10a302203d20012d0088053a0000200141a8036a41186a222a201f290300370300200141a8036a41106a22322021290300370300200141a8036a41086a22332022290300370300200120012903e8043703a8030240024020012802c8064101460d00200141c8056a41306a201d41306a280200360200200141c8056a41286a201d41286a290200370300200141c8056a41206a201d41206a290200370300201a201d41186a2902003703002018201d41106a290200370300201c201d41086a2902003703002001201d2902003703c80520014188046a41086a221f203329030037030020014188046a41106a2221203229030037030020014188046a41186a2222202a29030037030020014188046a41206a2223203d2d00003a0000200120012903a803370388044134102c220f450d30200f4200370208200f428180808010370200200f200129038804370210200f20012f00b8013b0031200f41186a201f290300370200200f41206a2021290300370200200f41286a2022290300370200200f41306a20232d00003a0000200f41336a200141b8016a41026a2d00003a0000200141c8056a200f10ed06210f0c010b20012802d00620012802d4064102746a41046a210f0b200f280200222428020041016a220f41014d0d1e2024200f360200201a201229030037030020182007290300370300201c2013290300370300200120012903f8013703c805200141013a00e805200141c8066a20014198016a200141c8056a10a302203d200141f8016a41206a2d00003a0000202a20122903003703002032200729030037030020332013290300370300200120012903f8013703a8030240024020012802c8064101460d00200141c8056a41306a201d41306a280200360200200141c8056a41286a201d41286a290200370300200141c8056a41206a201d41206a290200370300201a201d41186a2902003703002018201d41106a290200370300201c201d41086a2902003703002001201d2902003703c80520014188046a41086a2212203329030037030020014188046a41106a2207203229030037030020014188046a41186a2213202a29030037030020014188046a41206a221f203d2d00003a0000200120012903a803370388044134102c220f450d30200f4200370208200f428180808010370200200f200129038804370210200f20012f00b8013b0031200f41186a2012290300370200200f41206a2007290300370200200f41286a2013290300370200200f41306a201f2d00003a0000200f41336a200141b8016a41026a2d00003a0000200141c8056a200f10ed06210f0c010b20012802d00620012802d4064102746a41046a210f0b200f2802002223280200221241016a220f41014d0d1e2023200f360200024002400240024002400240024020170d0020250d01202428020041016a220f41014d0d252024200f36020020232802080d0a2023417f3602080240202328020c220f450d00200f200f280200417f6a360200202328020c220f2802000d00200f410c6a10cd04202328020c41046a220f200f280200417f6a360200202328020c220f41046a2802000d00200f102e0b2023202436020c2023202328020841016a3602080c2f0b2025450d01200141c8066a202410ee0620012802d406214720012802d006214c20012802cc06213c20012802c806210e200141c8066a202310ee0620012802d406214620012802d006214d20012802cc06213e0240200e20012802c8062245460d00200e28020841016a220f41004c0d08200e200f3602082045280208220f41016a221241004c0d0920452012360208200e41106a204541106a412010ec080d03200e2d003020452d0030470d032045200f360208200e200e280208417f6a3602080b203e2046410274221e6a2122203c204741027422196a211220190d03410021170c040b2012417e4f0d232023201241026a36020020242802080d092024417f3602080240202428020c220f450d00200f200f280200417f6a360200202428020c220f2802000d00200f410c6a10cd04202428020c41046a220f200f280200417f6a360200202428020c220f41046a2802000d00200f102e0b2024202336020c2024202428020841016a3602080c2d0b202428020041016a220f41014d0d222024200f36020020232802080d092023417f3602080240202328020c220f450d00200f200f280200417f6a360200202328020c220f2802000d00200f410c6a10cd04202328020c41046a220f200f280200417f6a360200202328020c220f41046a2802000d00200f102e0b2023202436020c2023202328020841016a3602080c2c0b2045200f360208200e200e280208417f6a360208204dad422086203ead842252204cad422086203cad842253204720464b220f1b2254a72116024020462047200f1b22074102742212450d00201620126a21254101211341002121201621172016211f0340024020214101710d00202520176b4102762013417f6a4d0d02201720134102746a21170b20172025460d012017450d01201f280200222128020041016a221341014d0d2320212013360200201728020022132802080d0b201f41046a211f2013417f3602080240201328020c2222450d0020222022280200417f6a360200201328020c22222802000d002022410c6a10cd04201328020c41046a22222022280200417f6a360200201328020c222241046a2802000d002022102e0b201741046a21172013202136020c410121212013201328020841016a360208410021132025201f470d000b0b2007450d0a20472046200f1b221f0d024100410041e0acc700103c000b204641ffffffff0371212541002117202221132012211603400240203e2013470d00202521170c020b024002402016417c6a2216280200220f2013417c6a22132802002207460d00200f28020841016a221f41004c0d0d200f201f3602082007280208221f41016a222141004c0d0e20072021360208200f41106a200741106a412010ec080d01200f2d003020072d0030470d012007201f360208200f200f280208417f6a3602080b201741016a2117203c2016470d010c020b0b2007201f360208200f200f280208417f6a3602080b204720176b211f204620176b225141016a210702400240203e450d0020072022203e6b410276220f200f20074b1b410020071b201f2012203c6b410276220f200f201f4b1b4100201f1b6a210f0c010b201f2012203c6b410276220f200f201f4b1b4100201f1b210f0b200f41ffffffff0371200f470d30200f4102742213417f4c0d300240024020130d004104210f0c010b2013102c220f450d300b20014100360290032001200f3602880320012013410276221336028c0302400240203e450d0020072022203e6b4102762216201620074b1b410020071b201f2012203c6b41027622162016201f4b1b4100201f1b6a21160c010b201f2012203c6b41027622162016201f4b1b4100201f1b21160b0240024020132016490d00410021260c010b201341017422212016202120164b1b22164104201641044b1b221641ffffffff03712016464102742121201641027421160240024020130d00200141003602c8060c010b200141043602d0062001200f3602c806200120134102743602cc060b200141c8056a20162021200141c8066a107d20012802d005211320012802c8054101460d1d200120012802cc05220f360288032001201341027636028c0320012802900321260b200f20264102746a210f0240203e450d002007450d00203e201e6a21212046417f7320176a2113202620466a20176b41016a2122203e2107034020212007460d012007280200221628020041016a221741014d0d2120162017360200200f2016360200202641016a2126200f41046a210f200741046a2107201341016a221620134f21172016211320170d000b202221260b0240201f450d0002402012203c6b4102762207201f4d0d002007201f417f736a221320074f0d01201220134102746b417c6a203c20132007491b21120b2012203c460d0003402012417c6a2212280200220728020041016a221341014d0d2120072013360200200f2007360200202641016a2126200f41046a210f203c2012470d000b0b20012026360290032001427f3703b0052001427f3703a805200141b8016a41186a224e4200370300200141b8016a41106a224f4200370300200141b8016a41086a22504200370300200142003703b801202a42003703002032420037030020334200370300200142003703a80341002106200141003602e002200141003602e402200120014188036a360208200120014188036a360218410021254100214b4100213402402026450d00427f21534100214b200128028803211b41002134427f215220262125410021210340202520214d0d0d201b20214102746a280200220f280208221241016a41004c0d0e202141016a21220240200f2d00300d00200f201236020820014188046a41186a2225200f41286a29000037030020014188046a41106a2208200f41206a29000037030020014188046a41086a2229200f41186a2900003703002001200f29001037038804200128029003220f20224100200f417f6a20214b1b22124d0d10201b20124102746a280200220f280208221241016a41004c0d11200f2012360208201a200f41286a2900003703002018200f41206a290000370300201c200f41186a2900003703002001200f2900103703c805200128029003220f2021200f20211b417f6a22124d0d12201b20124102746a280200220f280208221241016a41004c0d13200f2012360208200141c8066a41186a2248200f41286a290000370300200141c8066a41106a2249200f41206a290000370300200141c8066a41086a224a200f41186a2900003703002001200f2900103703c8062028280200412c6c221221072000280200220f41546a22162117200f2113024003402007450d01200741546a21072017412c6a21172013410c6a211f2013412c6a2113201f20014188046a412010ec080d000b201741086a28020041306c21072017280200211303402007450d01200741506a21072013200141c8056a412010ec082117201341306a221f211320170d000b2053201f41706a22072903002255582052200741086a29030022545820522054511b0d002050201c290300370300204f2018290300370300204e201a2903003703002033202929030037030020322008290300370300202a2025290300370300200120553703a805200120012903c8053703b80120012001290388043703a803200120213602e002200120543703b0054101214b200141013602e4022021213420552153205421520b03402012450d01201241546a21122016412c6a2116200f410c6a2107200f412c6a210f200720014188046a412010ec080d000b201641086a28020041306c210f201628020021120340200f450d01200f41506a210f2012200141c8066a412010ec082107201241306a2213211220070d000b2053201341706a220f2903002255582052200f41086a29030022545820522054511b0d002050204a290300370300204f2049290300370300204e20482903003703002033202929030037030020322008290300370300202a2025290300370300200120553703a805200120012903c8063703b80120012001290388043703a803200120213602e002200120543703b0054100214b200141003602e4022021213420552153205421520b20012802900321252022212120222026470d000b0b20014100360290042001420437038804204b20346a214941012129024020250d004100210f0c1f0b20494101712108410021062025210f4100211f03402001201f360278200f201f4d0d122001280288032213201f4102746a280200220f28020841016a221241004c0d13201f41016a211b200f20123602082001200f41086a22073602ec022001200f410c6a3602e8020240200f2d00300d00201f210f0240201f0d00200128021841086a280200210f0b2001280290032212200f417f6a220f4d0d152013200f4102746a280200220f28020841016a221241004c0d16200f20123602082001200f41086a3602cc052001200f410c6a3602c805024002402028280200220f0d00201b210f0c010b20002802002216200f412c6c6a212141002117034002402016410c6a20012802e80241046a412010ec080d00201641086a22262802002222450d002016280200210f20012802c80541046a2113202241306c41506a21124100210702400340200f2013412010ec08450d01200f41306a210f200741016a2107201241506a22124150470d000c020b0b200f41286a22072903002152200f41206a22132903002153200141a8056a41086a290300215520012903a805215402400240201f4101710d0002402008450d00427f205220557c205320547c22542053542248ad7c22532048205320525420532052511b22481b2152427f205420481b21530c020b4200205220557d2053205454ad7d2255205320547d2254205356205520525620552052511b22481b21524200205420481b21530c010b02402008450d004200205220557d2053205454ad7d2255205320547d2254205356205520525620552052511b22481b21524200205420481b21530c010b427f205220557c205320547c22542053542248ad7c22532048205320525420532052511b22481b2152427f205420481b21530b0240024020532052844200520d0020012802dc022107200f200f41306a201210ea081a20262022417f6a360200200120012802d80241016a3602d8024100202920072017461b21292001280278221f20012802e0022234470d0120012802e4020d01201f21340c020b20072052370300201320533703000c010b200128029003220f201f4d0d1a200128028803201f4102746a280200220f28020041016a221241014d0d24200f2012360200201f21120240201f0d00200128021841086a28020021120b20012802900322072012417f6a22124d0d1b20012802880320124102746a280200221228020041016a220741014d0d242012200736020002402006200128028c04470d0020014188046a10bc0120012802900421060b20012802880420064103746a220720123602042007200f3602002001200641016a2206360290040b201741016a21172016412c6a22162021470d000b201f41016a210f0b2001280290032212200f4100200128020841086a280200417f6a201f4b1b220f4d0d19200128028803200f4102746a280200220f28020841016a221241004c0d1a200f20123602082001200f41086a22073602cc062001200f410c6a3602c80602402028280200220f450d0020002802002216200f412c6c6a212141002117034002402016410c6a20012802e80241046a412010ec080d00201641086a22262802002222450d002016280200210f20012802c80641046a2113202241306c41506a21124100210702400340200f2013412010ec08450d01200f41306a210f200741016a2107201241506a22124150470d000c020b0b200f41286a22072903002152200f41206a22132903002153200141a8056a41086a290300215520012903a805215402400240201f4101710d0002402008450d004200205220557d2053205454ad7d2255205320547d2254205356205520525620552052511b22481b21524200205420481b21530c020b427f205220557c205320547c22542053542248ad7c22532048205320525420532052511b22481b2152427f205420481b21530c010b02402008450d00427f205220557c205320547c22542053542248ad7c22532048205320525420532052511b22481b2152427f205420481b21530c010b4200205220557d2053205454ad7d2255205320547d2254205356205520525620552052511b22481b21524200205420481b21530b0240024020532052844200520d0020012802dc022107200f200f41306a201210ea081a20262022417f6a360200200120012802d80241016a3602d8024100202920072017461b21292001280278221f20012802e0022234470d0120012802e4024101470d01201f21340c020b20072052370300201320533703000c010b200128029003220f201f4d0d1e200128028803201f4102746a280200220f28020041016a221241014d0d24200f20123602002001280290032207201f41016a4100200128020841086a280200417f6a201f4b1b22124d0d1f20012802880320124102746a280200221228020041016a220741014d0d242012200736020002402006200128028c04470d0020014188046a10bc0120012802900421060b20012802880420064103746a220720123602042007200f3602002001200641016a2206360290040b201741016a21172016412c6a22162021470d000b20012802cc06220728020021120b20072012417f6a36020020012802cc05220f200f280200417f6a36020020012802ec02220728020021120b20072012417f6a360200200128029003210f201b211f201b2025460d1e0c000b0b20532052200f1b2252a72217280200220728020041016a220f41014d0d1e2007200f3602002016280200220f2802080d1a200f417f3602080240200f28020c2213450d0020132013280200417f6a360200200f28020c22132802000d002013410c6a10cd04200f28020c41046a22132013280200417f6a360200200f28020c221341046a2802000d002013102e0b200f200736020c200f200f28020841016a360208201f41027421072017210f0340200f28020022132013280200417f6a3602000240200f28020022132802000d002013410c6a10cd04200f28020041046a22132013280200417f6a360200200f280200221341046a2802000d002013102e0b200f41046a210f2007417c6a22070d000b024020524280808080f0ffffff3f83500d002017102e0b2016210f0340200f28020022072007280200417f6a3602000240200f28020022072802000d002007410c6a10cd04200f28020041046a22072007280200417f6a360200200f280200220741046a2802000d002007102e0b200f41046a210f2012417c6a22120d000b024020544280808080f0ffffff3f83500d002016102e0b20452045280200417f6a220f360200202041016a2120200f0d272045410c6a10cd04204541046a220f200f280200417f6a220f360200200f0d272045102e0c270b024020012802a0012217450d004100210720014188036a41186a211f20014188036a41106a212120014188036a41086a212203402017417f6a2117410121120240024003402007200f2f0132490d010240200f28020022130d00200f102e0c030b200f2f01302107200f102e2012417f6a21122013210f0c000b0b201f200f200741216c6a221341cc006a2900003703002021201341c4006a29000037030020222013413c6a2900003703002001201341346a29000037038803200741016a2113200f20074102746a41046a28020021160240024020124101470d00201321070c010b200f20134102746a41a0036a280200210f02402012450d000340201241016a220720124f2113200f2802a003210f2007211220130d000b0b410021070b200141e8026a41186a201f290300370300200141e8026a41106a2021290300370300200141e8026a41086a202229030037030020012001290388033703e8020b20162016280200417f6a2212360200024020120d002016410c6a10cd04201641046a22122012280200417f6a221236020020120d002016102e0b20170d000b0b0340200f2802002112200f102e2012210f20120d000c2d0b0b41bcd9cc004118200141b8076a41c0acc70041c4bfcc00103e000b41bcd9cc004118200141b8076a41c0acc70041d4bfcc00103e000b4194dacc004110200141b8076a4190c1cc0041b0c1cc00103e000b4194dacc004110200141b8076a4190c1cc0041b0c1cc00103e000b4194dacc004110200141b8076a4190c1cc0041b0c1cc00103e000b4194dacc004110200141b8076a4190c1cc0041b0c1cc00103e000b4100410041d0acc700103c000b41bcd9cc004118200141b8076a41c0acc70041c4bfcc00103e000b41bcd9cc004118200141b8076a41c0acc70041d4bfcc00103e000b2021202541f0acc700103c000b41bcd9cc004118200141b8076a41c0acc7004180adc700103e000b2012200f4190adc700103c000b41bcd9cc004118200141b8076a41c0acc70041a0adc700103e000b2012200f41b0adc700103c000b41bcd9cc004118200141b8076a41c0acc70041c0adc700103e000b201f200f41d0adc700103c000b41bcd9cc004118200141b8076a41c0acc70041e0adc700103e000b200f201241f0adc700103c000b41bcd9cc004118200141b8076a41c0acc7004180aec700103e000b201f200f4190aec700103c000b2012200741a0aec700103c000b200f201241b0aec700103c000b41bcd9cc004118200141b8076a41c0acc70041c0aec700103e000b201f200f41d0aec700103c000b2012200741e0aec700103c000b4194dacc004110200141b8076a4190c1cc0041b0c1cc00103e000b2013450d130c120b20012802e402214b0b024002402034200f417f6a470d00204b4101460d010b41c000102c2212450d11201220012903a803370000201220012903b801370020201241186a202a290300370000201241106a2032290300370000201241086a2033290300370000201241286a2050290300370000201241306a204f290300370000201241386a204e29030037000002400240204920514d0d0002400240024002400240024002402047417f6a2222450d0020474101204741014b1b417f6a2121410021130340201322072047460d02203c20074102746a221f280200220f280200221641016a221341014d0d0b200f2013360200200f280208221741016a41004c0d03200741016a2113200f2017360208200f2016360200201a200f41286a2900003703002018200f41206a290000370300201c200f41186a2900003703002001200f2900103703c80520072021460d04203c20134102746a2217280200220f280200220741016a221641014d0d0b200f2016360200200f280208221641016a41004c0d05200f2016360208200f2007360200200141c8066a41186a200f41286a290000370300200141c8066a41106a200f41206a290000370300200141c8066a41086a200f41186a2900003703002001200f2900103703c8064100210f02400340200f41c000460d012012200f6a2107200f41206a210f2007200141c8056a412010ec080d000b4100210f0340200f41c000460d012012200f6a2107200f41206a210f2007200141c8066a412010ec080d000c030b0b201f280200220728020041016a220f41014d0d0b2007200f3602002017280200220f2802080d06200f417f3602080240200f28020c2216450d0020162016280200417f6a360200200f28020c22162802000d002016410c6a10cd04200f28020c41046a22162016280200417f6a360200200f28020c221641046a2802000d002016102e0b200f200736020c200f200f28020841016a36020820132022470d000b0b202328020041016a220f41014d0d092023200f36020020242802080d052024417f3602080240202428020c220f450d00200f200f280200417f6a360200202428020c220f2802000d00200f410c6a10cd04202428020c41046a220f200f280200417f6a360200202428020c220f41046a2802000d00200f102e0b2024202336020c2024202428020841016a3602080c070b2047204741f0aec700103c000b41bcd9cc004118200141b8076a41c0acc7004180afc700103e000b201320474190afc700103c000b41bcd9cc004118200141b8076a41c0acc70041a0afc700103e000b4194dacc004110200141b8076a4190c1cc0041b0c1cc00103e000b4194dacc004110200141b8076a4190c1cc0041b0c1cc00103e000b02402046417f6a2222450d0020464101204641014b1b417f6a2121410021130340201322072046460d05203e20074102746a221f280200220f280200221641016a221341014d0d04200f2013360200200f280208221741016a41004c0d06200741016a2113200f2017360208200f2016360200201a200f41286a2900003703002018200f41206a290000370300201c200f41186a2900003703002001200f2900103703c80520072021460d07203e20134102746a2217280200220f280200220741016a221641014d0d04200f2016360200200f280208221641016a41004c0d08200f2016360208200f2007360200200141c8066a41186a200f41286a290000370300200141c8066a41106a200f41206a290000370300200141c8066a41086a200f41186a2900003703002001200f2900103703c8064100210f02400340200f41c000460d012012200f6a2107200f41206a210f2007200141c8056a412010ec080d000b4100210f0340200f41c000460d012012200f6a2107200f41206a210f2007200141c8066a412010ec080d000c030b0b201f280200220728020041016a220f41014d0d042007200f3602002017280200220f2802080d09200f417f3602080240200f28020c2216450d0020162016280200417f6a360200200f28020c22162802000d002016410c6a10cd04200f28020c41046a22162016280200417f6a360200200f28020c221641046a2802000d002016102e0b200f200736020c200f200f28020841016a36020820132022470d000b0b202428020041016a220f41014d0d022024200f36020020232802080d082023417f3602080240202328020c220f450d00200f200f280200417f6a360200202328020c220f2802000d00200f410c6a10cd04202328020c41046a220f200f280200417f6a360200202328020c220f41046a2802000d00200f102e0b2023202436020c2023202328020841016a3602080b2012102e0b200128028804221720064103746a2113200128028c04211f20172112024002402006450d0020172107024003402007280200220f450d0102400240200f200741046a280200221210ef06450d00200f2802080d0d200f417f3602080240200f28020c2216450d0020162016280200417f6a360200200f28020c22162802000d002016410c6a10cd04200f28020c41046a22162016280200417f6a360200200f28020c221641046a2802000d002016102e0b200f410036020c200f200f28020841016a3602080c010b2012200f10ef06450d0020122802080d0d2012417f3602080240201228020c2216450d0020162016280200417f6a360200201228020c22162802000d002016410c6a10cd04201228020c41046a22162016280200417f6a360200201228020c221641046a2802000d002016102e0b2012410036020c2012201228020841016a3602080b20122012280200417f6a2216360200024020160d002012410c6a10cd04201241046a22162016280200417f6a221636020020160d002012102e0b200f200f280200417f6a2212360200024020120d00200f410c6a10cd04200f41046a22122012280200417f6a221236020020120d00200f102e0b200741086a22072013470d000c030b0b200741086a21120b20132012460d0003402012220f28020022122012280200417f6a3602000240200f28020022122802000d002012410c6a10cd04200f28020041046a22122012280200417f6a360200200f280200221241046a2802000d002012102e0b200f41086a2112200f41046a220f28020022072007280200417f6a3602000240200f28020022072802000d002007410c6a10cd04200f28020041046a22072007280200417f6a360200200f280200220f41046a2802000d00200f102e0b20132012470d000b0b0240201f41ffffffff0171450d002017102e0b02402001280290032212450d00200128028803210f201241027421120340200f28020022072007280200417f6a3602000240200f28020022072802000d002007410c6a10cd04200f28020041046a22072007280200417f6a360200200f280200220741046a2802000d002007102e0b200f41046a210f2012417c6a22120d000b0b0240200128028c0341ffffffff0371450d00200128028803102e0b02402046450d00203e210f0340200f28020022122012280200417f6a3602000240200f28020022122802000d002012410c6a10cd04200f28020041046a22122012280200417f6a360200200f280200221241046a2802000d002012102e0b200f41046a210f201e417c6a221e0d000b0b0240204d41ffffffff0371450d00203e102e0b20452045280200417f6a220f3602000240200f0d002045410c6a10cd04204541046a220f200f280200417f6a220f360200200f0d002045102e0b202941ff0171210702402047450d00203c210f0340200f28020022122012280200417f6a3602000240200f28020022122802000d002012410c6a10cd04200f28020041046a22122012280200417f6a360200200f280200221241046a2802000d002012102e0b200f41046a210f2019417c6a22190d000b0b202020076a2120204c41ffffffff0371450d09203c102e0c090b00000b2046204641b0afc700103c000b41bcd9cc004118200141b8076a41c0acc70041c0afc700103e000b2013204641d0afc700103c000b41bcd9cc004118200141b8076a41c0acc70041e0afc700103e000b4194dacc004110200141b8076a4190c1cc0041b0c1cc00103e000b4194dacc004110200141b8076a4190c1cc0041b0c1cc00103e000b4194dacc004110200141b8076a4190c1cc0041a0c1cc00103e000b4194dacc004110200141b8076a4190c1cc0041a0c1cc00103e000b200e200e280200417f6a220f3602000240200f0d00200e410c6a10cd04200e41046a220f200f280200417f6a220f360200200f0d00200e102e0b20232023280200417f6a220f3602000240200f0d002023410c6a10cd04202341046a220f200f280200417f6a220f360200200f0d002023102e0b20242024280200417f6a220f3602000240200f0d002024410c6a10cd04202441046a220f200f280200417f6a220f360200200f0d002024102e0b20012802dc0221160c010b20232023280200417f6a220f3602000240200f0d002023410c6a10cd04202341046a220f200f280200417f6a220f360200200f0d002023102e0b20242024280200417f6a220f3602000240200f0d002024410c6a10cd04202441046a220f200f280200417f6a220f360200200f0d002024102e0b202041016a21200b2000280200210f2028280200221220164b0d000b0b2016201241b0acc700103c000b2016201241a0acc700103c000b200141c0076a24000f0b1036000b1038000ba50302027f037e230041d0006b22042400200441386a20024201200242015620034200522003501b22051b22022003420020051b220342ffff03420010e708200441286a2002200342ffff03420010e608200441186a20022003200429033822062004290328200441286a41086a29030084420052ad7c220742012007420156200441386a41086a2903002007200654ad7c22074200522007501b22051b22062007420020051b220710e7080240024002402004290318220842808004544100200441186a41086a290300501b450d00200441086a200220002002200054200320015420032001511b22051b2003200120051b2006200710e7082004290308220342808004544100200441086a41086a290300501b450d012008a741ffff037122050d0241d0d8c80041194180a1c9001039000b2004411136024c2004419cd5cc0036024841add5cc0041de00200441c8006a41bcdcc8004180a1c900103e000b2004411136024c2004419cd5cc0036024841add5cc0041de00200441c8006a41bcdcc8004180a1c900103e000b200441d0006a24002003a741ffff037141ffff036c20056e0baf08030b7f017e017f230041d0016b2204240020042003360214200420023602102001280200220520012802082202412c6c22066a2107200128020421080240024020020d0020052102200521010c010b200441f0006a410c6a2109200441f0006a4104722103200441186a41086a210a200441186a41106a210b200441186a41186a210c200441186a41206a210d200521020340200a20022201410c6a290200370300200b200141146a290200370300200c2001411c6a290200370300200d200141246a2902003703002004200141046a2902003703182001412c6a21022001280200220e450d0120032004290318370200200341086a200a290300370200200341106a200b290300370200200341186a200c290300370200200341206a200d2903003702002004200e3602704200210f02402004280210200910a002220e450d0020042802142210280208200e280200220e4d0d002010280200200e41386c6a290300210f0b200441a0016a41286a200441f0006a41286a280200360200200441a0016a41206a200441f0006a41206a290300370300200441a0016a41186a200441f0006a41186a290300370300200441a0016a41106a200441f0006a41106a290300370300200441a0016a41086a200441f0006a41086a290300370300200420042903703703a001200441c0006a200441a0016a200f420010bd04200141286a200441c0006a41286a280200360200200141206a200441c0006a41206a290300370200200141186a200441c0006a41186a290300370200200141106a200441c0006a41106a290300370200200141086a200441c0006a41086a29030037020020012004290340370200200641546a22060d000b20022101200721020b200720026b2203412c6d210602402003450d002006412c6c210303400240200241046a2802002206450d00200641226c450d002002280200102e0b2002412c6a2102200341546a22030d000b0b200441053602a001200120056b220b412c6d220a412c6c21022005210302400340200321012002450d014200210f024020042802102001410c6a10a0022203450d0020042802142206280208200328020022034d0d002006280200200341386c6a290300210f0b2001412c6a2103200441086a2001200f420010bf04200241546a210220042802082201450d000b200428020c2102200441033602a00120042002ad4220862001ad843702a4010b0240024020042802a00122014105470d00200020053602042000410c6a200a360200200041086a2008360200410021010c010b20042902a401210f20002001360204200041086a200f3702000240200b450d00200a412c6c21022005210103400240200141046a2802002203450d00200341306c450d002001280200102e0b2001412c6a2101200241546a22020d000b0b410121012008450d002008412c6c450d002005102e0b20002001360200200441d0016a24000b850103027f017e027f230041106b22012400024002400240200035020842208620002802002202ad84101e2203428080808010540d00410021042003a722052d00000e020201000b41cae0cc00412e200141086a41f8e0cc004188e1cc00103e000b410121040b2005102e0240200041046a280200450d002002102e0b200141106a240020040b070010184101460b8b0705017f017e077f037e027f23004180026b220224002002200136020c0240024002402002410c6a10082203422088a722010d0020004100360208200042013702000c010b2002200136021420022003a722043602102002200241106a10ab01024002400240024020022802000d002002280204220520022802144105762201200120054b1b22014105742206417f4c0d050240024020010d00410121070c010b2006102c2207450d030b2001ad210302402005450d00410021080340200241003a00b8012002280214417f6a2101200841016a210841002106024002400240024003402001417f460d0120024198016a20066a200228021022092d00003a00002002200941016a3602102002200641016a22093a00b801200220013602142001417f6a21012009210620094120470d000b200241c0016a41086a220120024198016a41086a290300370300200241c0016a41106a220620024198016a41106a290300370300200241c0016a41186a220a20024198016a41186a29030037030020022002290398013703c001200941ff0171411f4d0d01200241386a41086a2001290300220b370300200241386a41106a2006290300220c370300200241386a41186a200a290300220d370300200241186a41186a2209200d370300200241186a41106a220a200c370300200241186a41086a220e200b370300200220022903c001220b3703582002200b3703382002200b3703182003422088220ba722012003a7470d03200141016a220620014f0d020c0b0b200641ff0171450d00200241003a00b8010b200342ffffff3f83500d042007102e0c040b2001410174220f20062006200f491b22064104200641044b1b220641ffffff3f71200646210f200641057421060240024020010d0020024100360298010c010b200241013602a00120022007360298012002200b4205863e029c010b200241c0016a2006200f20024198016a107d20022802c801210620022802c0014101460d0420022802c40121072006410576ad21030b200720014105746a22062002290318370000200641186a2009290300370000200641106a200a290300370000200641086a200e290300370000200342ffffffff0f83200141016aad42208684210320082005470d000b0b20070d030b41cae0cc00412e20024198016a41c4dfcc0041d4dfcc00103e000b2006450d030b1036000b20002003370204200020073602002004102e0b20024180026a24000f0b1038000bfa0203027f017e067f230041206b220224000240024020014102490d00200041206a22032000412010ec08417f4a0d002000290000210420002003290000370000200241186a2205200041186a2206290000370300200241106a2207200041106a2208290000370300200241086a2209200041086a220a290000370300200a200341086a2900003700002008200341106a2900003700002006200341186a29000037000020022004370300024020014103490d00200041206a210320002001417f6a22064105746a21080340200341206a22002002412010ec08417f4a0d012006450d0320032000290000370000200341186a200041186a290000370000200341106a200041106a290000370000200341086a200041086a290000370000200021032006417f6a22064101470d000b200821030b20032002290300370000200341186a2005290300370000200341106a2007290300370000200341086a20092903003700000b200241206a24000f0b2001200141d4d1cc00103c000bb719030a7f047e0d7f230041a0076b220124000240024020002802082202200028020c2203470d00410821020c010b2000200241206a22043602082000280210210520014190026a41186a200241186a29000037030020014190026a41106a200241106a29000037030020014190026a41086a200241086a2900003703002001200229000037039002200028021421064100210202400240024002402000411c6a28020022070e020201000b410021022007210803402008410176220920026a210a200a20022006200a4105746a20014190026a412010ec084101481b2102200820096b220841014b0d000b0b200620024105746a20014190026a412010ec08450d010b03402000200541016a2205360210024020042003470d00410821020c030b2000200441206a220936020820014190026a41186a200441186a29000037030020014190026a41106a200441106a29000037030020014190026a41086a200441086a290000370300200120042900003703900241002102200921040240024020070e020201000b410021022007210403402004410176220a20026a210820082002200620084105746a20014190026a412010ec084101481b21022004200a6b220441014b0d000b0b20092104200620024105746a20014190026a412010ec080d000b0b02400240200720024d0d00200141186a200620024105746a220241186a290000220b370300200141106a200241106a290000220c370300200141086a200241086a290000220d37030020012002290000220e3703002000200541016a360210200041246a2802002109200041286a280200210320002802202107200141206a41186a200b370300200141206a41106a200c370300200141206a41086a200d3703002001200e370320410221022005109e070d0202400240411b102c220a450d00200a41176a4100280093db48360000200a41106a410029008cdb48370000200a41086a4100290084db48370000200a41002900fcda483700004104102c2202450d00200142043702c401200120023602c0012001200536029002200141c0016a20014190026a4104107420012802c401210820012802c0012104024020012802c80122020d00411b210f2002411b6a21000c040b2002411b6a22002002490d012001429b80808010370294022001200a36029002200141d8056a20004136200041364b1b410120014190026a107d200141e0056a280200210f024020012802d8054101460d0020012802dc05210a0c040b200f450d010b1036000b1038000b2002200741ecdac800103c000b200a411b6a2004200210e9081a02402008450d002004102e0b200141c0016a4101200a200010df0602400240024002400240024002400240024020012802c0012202450d00200141c8016a28020022044104490d002004417c714104460d0020022800002007470d00200228000441036a20094b0d010b200141003602e005200142013703d805200120073602900241042102200141d8056a20014190026a410410742001200936029002200141d8056a20014190026a4104107420012802d805210420012802e005210820014190026a41086a200141c0016a41086a280200360200200120012903c001370390024101200a200020014190026a2004200810e0062108024020012802dc05450d002004102e0b2008450d0120014190026a109f072001280290022210450d04200141a0026a280200211120014190026a410c6a2802002112200141a4026a280200211320014190026a41086a2802002114200128029402211520014100360288022001420137038002200120093602900220014180026a20014190026a41041074201420014180026a107620014180026a201020141074201320014180026a107602402013450d0020122013410c6c6a210620122102034020022802002104200241086a280200220820014180026a107620014180026a2004200810742002410c6a22022006470d000b0b200120073602900220014180026a20014190026a41041074200120053602900220014180026a20014190026a41041074200120033602900220014180026a20014190026a4104107420014190026a41e9dabdf306200141206a200128028002220420012802880210a0074101210220012d0090024101460d02410321080c030b024020012802c401450d002002102e0b410121020b200f0d050c060b200141fe016a20012d0093023a0000200141d8056a41086a200141a4026a290200370300200141e8056a200141ac026a290200370300200141f0056a200141b4026a290200370300200141f8056a200141bc026a29020037030020014180066a200141c4026a29020037030020014185066a200141c9026a290000370000200120012f0091023b01fc0120012001419c026a2902003703d80520014190026a41086a28020021062001280294022108410021020b200141f8016a41026a2216200141fc016a41026a2d00003a0000200141c0016a41086a2217200141d8056a41086a290300370300200141c0016a41106a2218200141d8056a41106a290300370300200141c0016a41186a2219200141d8056a41186a290300370300200141c0016a41206a221a200141d8056a41206a290300370300200141c0016a41286a221b200141d8056a41286a290300370300200141c0016a41306a200141d8056a41306a290300370300200120012f01fc013b01f801200120012903d8053703c001024020020d00200141bc016a41026a20162d00003a000020014190026a41086a201729030037030020014190026a41106a201829030037030020014190026a41186a201929030037030020014190026a41206a201a29030037030020014190026a41286a201b29030037030020014190026a412d6a200141c0016a412d6a290000370000200120012f01f8013b01bc01200120012903c001370390020240200128028402450d002004102e0b200120012f01bc013b01d8052001200141be016a2d00003a00da05410021020c030b0240200128028402450d002004102e0b02402015450d002010102e0b02402013450d002013410c6c21042012210203400240200241046a280200450d002002280200102e0b2002410c6a2102200441746a22040d000b0b4101210202402011450d002011410c6c450d002012102e0b20082109200621100c010b41012102410521090b0b20014180016a41086a220420014190026a41086a29030037030020014180016a41106a221620014190026a41106a29030037030020014180016a41186a221720014190026a41186a29030037030020014180016a41206a221820014190026a41206a29030037030020014180016a41286a221920014190026a41286a29030037030020014180016a412d6a221a20014190026a412d6a290000370000200120012d00da053a00ba01200120012f01d8053b01b80120012001290390023703800102400240024020020d00200141c0006a41086a22022004290300370300200141c0006a41106a22042016290300370300200141c0006a41186a22162017290300370300200141c0006a41206a22172018290300370300200141c0006a41286a22182019290300370300200141c0006a412d6a2219201a290000370000200120012d00ba013a007e200120012f01b8013b017c2001200129038001370340200141d0036a2003360200200141cc036a2005360200200141c8036a2007360200200141c4036a2013360200200141c0036a2011360200200141bc036a2012360200200141b8036a2014360200200141b4036a2015360200200141b0036a2010360200200141ac036a200936020020014190026a41c4016a20012f017c3b0100200141d6036a20012d007e3a0000200141db036a2006360000200141d7036a20083600002001410b3602a803200142023703f8022001418c046a201929000037000020014187046a2018290300370000200141ff036a2017290300370000200141f7036a2016290300370000200141ef036a2004290300370000200141e7036a2002290300370000200120012903403700df0320014194046a200141d8056a41c40110e9081a200120014190026a3602d805200141c0016a200141d8056a109005200141d8056a41086a200141c0016a41086a280200360200200120012903c0013703d805200141d8056a10e8062104024020012903f8024202510d0020012d00900241ff01714102470d00200128029802450d00200128029402102e0b200141a8036a108b02410721024106210920040d010c020b4107210220094107460d010b20014100360298022001420137039002200120073602d80520014190026a200141d8056a41041074200141003602d80520014190026a200141d8056a410410744101200a2000200128029002220220012802980210a1070240200128029402450d002002102e0b200921020b200f450d010b200a102e0b200141a0076a240020020bc41c07127f017e017f017e017f027e097f230041b0016b22022400200028020821032000280200210420002802042105200241206a41206a2206200041306a2d00003a0000200241206a41186a2207200041286a290000370300200241206a41106a2208200041206a290000370300200241206a41086a2209200041186a29000037030020022000290010370320024002400240024002400240024002400240024002400240024002400240024002400240024020052f0132220a410a4b0d0020024188016a41206a20062d00003a000020024188016a41186a200729030037030020024188016a41106a200829030037030020024188016a41086a20092903003703002002200229032037038801200541346a2106200a41016a2107200341016a2208200a4d0d012006200341216c6a220a200229038801370000200a41206a20024188016a41206a2d00003a0000200a41186a20024188016a41186a290300370000200a41106a20024188016a41106a290300370000200a41086a20024188016a41086a290300370000200541046a210a0c020b4105210a4100210b02400240200341054f0d004104210a200321060c010b41052106024002402003417b6a0e020201000b200341796a21064101210b4106210a0c010b410021064101210b0b41a003102c2203450d05200341003b013220034100360200200320052f0132220c200a417f736a22073b013220024190016a200541346a220d200a41216c6a2208410c6a29000037030020024198016a200841146a2900003703002002419d016a200841196a29000037000020022008290004370388012007410c4f0d06200c200a41016a22096b2007470d07200541046a220c200a4102746a280200210e2008280000210f200341346a200d200941216c6a200741216c10e9081a200341046a200c20094102746a200741027410e9081a2005200a3b0132200241e8006a41086a20024188016a41086a2208290300370300200241e8006a41106a20024188016a41106a2209290300370300200241e8006a41156a20024188016a41156a290000370000200220022903880137036820032005200b1b220a2f0132210720024188016a41206a220d200241206a41206a2d00003a000020024188016a41186a2210200241206a41186a2903003703002009200241206a41106a2903003703002008200241206a41086a2903003703002002200229032037038801200a41346a210b200741016a210c02400240200641016a221120074d0d00200b200641216c6a2207200229038801370000200741206a200d2d00003a0000200741186a2010290300370000200741106a2009290300370000200741086a2008290300370000200a41046a21070c010b200b201141216c6a200b200641216c6a220b200720066b41216c10ea081a200b41206a200d2d00003a0000200b41186a2010290300370000200b41106a2009290300370000200b41086a2008290300370000200b200229038801370000200a41046a220720114102746a200720064102746a200c2006417f736a41027410ea081a0b200720064102746a22122001360200200a200c3b0132200241086a2213200241e8006a41086a22102903002214370300200241106a2215200241e8006a41106a22112903002216370300200241186a200241e8006a41186a2217290300221837030020022002290368221937030020172018370300201120163703002010201437030020022019370368200528020022010d02410021040c030b2006200841216c6a2006200341216c6a2206200a20036b41216c10ea081a200641206a20024188016a41206a2d00003a0000200641186a20024188016a41186a290300370000200641106a20024188016a41106a290300370000200641086a20024188016a41086a2903003700002006200229038801370000200541046a220a20084102746a200a20034102746a20072003417f736a41027410ea081a0b200a20034102746a22122001360200200520073b01320c0e0b200e211a4100210a2003211b200f211c034020052f01302107200241c8006a41156a221d200241e8006a41156a290000370000200241c8006a41106a221e2011290300370300200241c8006a41086a221f2010290300370300200220022903683703482004200a470d0620012f01322209410b490d024100210841042105024020074105490d0020072105024002402007417b6a0e020201000b200741796a210741012108410621050c010b4100210741012108410521050b41d003102c2203450d03200341003b013220034100360200200320012f0132220b2005417f736a220a3b0132200141346a220c200541216c6a2206280000210f200241156a2220200641196a2900003700002015200641146a29000037030020132006410c6a29000037030020022006290004370300200a410c4f0d07200b200541016a22066b200a470d08200141046a220b20054102746a280200210e200341346a200c200641216c6a200a41216c10e9081a200341046a200b200641027422066a200a41027410e9081a200120053b013220024188016a41086a220b201329030037030020024188016a41106a220c201529030037030020024188016a41156a220d2020290000370000200220022903003703880120032f0132220a41016a2120200a410c4f0d09200920056b22052020470d0a200441016a2104200341a0036a200120066a41a0036a200541027410e9081a4100210502400340200320054102746a41a0036a280200220620053b01302006200336020020052005200a4922066a2205200a4b0d0120060d000b0b200241206a41186a222020024188016a41186a290300370300200241206a41106a2221200c290300370300200241206a41086a2222200b29030037030020022002290388013703202003200120081b22062f01322109200d201d290000370000200c201e290300370300200b201f2903003703002002200229034837038801200641346a210a0240200741016a220520094b221d0d00200a200541216c6a200a200741216c6a200920076b41216c10ea081a0b200941016a2108200a200741216c6a220a201c360000200a200229038801370004200a410c6a200b290300370000200a41146a200c290300370000200a41196a200d290000370000200641046a210a0240201d0d00200a20054102746a200a20074102746a2007417f7320086a41027410ea081a0b200a2007410274220b6a201a360200200641a0036a210a0240200741026a220c200941026a22094f0d00200a200c4102746a200a20054102746a2005417f7320096a41027410ea081a0b200a20054102746a201b360200200620083b01320240200520094f0d002006200b6a41a4036a210503402005280200220a200741016a22073b0130200a2006360200200541046a210520082007470d000b0b2010202229030037030020112021290300370300201720202903003703002002200229032037036820012105200128020022062101200e211a2004210a2003211b200f211c20060d000b0b20024188016a41186a201729030037030020024188016a41106a2011290300221437030020024188016a41086a2010290300221637030020022002290368221837038801200241e8006a41156a20024188016a41156a290000370000201120143703002010201637030020022018370368200028020c220a2802042206450d09200a280200210741d003102c2205450d01200520063602a003200541003b013220054100360200200641003b013020062005360200200a2005360204200a200741016a360200200241206a41156a200241e8006a41156a290000370000200241206a41106a200241e8006a41106a290300370300200241206a41086a200241e8006a41086a2903003703002002200229036837032020072004470d0a20052f01322207410b4f0d0b2005200741216c6a220641346a200f360000200641386a2002290320370000200641c0006a200241286a290300370000200641c8006a200241306a290300370000200641cd006a200241356a2900003700002005200741016a22063b0132200520064102746a41a0036a2003360200200520074102746a41046a200e360200200320063b013020032005360200200a200a28020841016a3602080c0d0b20012f0132210320024188016a41156a2209200241c8006a41156a29000037000020024188016a41106a2204200241c8006a41106a29030037030020024188016a41086a220b200241c8006a41086a2903003703002002200229034837038801200741016a2105200141346a210a0240200320074d22060d00200a200541216c6a200a200741216c6a200320076b41216c10ea081a0b200341016a2108200a200741216c6a220a201c360000200a200229038801370004200a410c6a200b290300370000200a41146a2004290300370000200a41196a2009290000370000200141046a210a024020060d00200a20054102746a200a20074102746a2007417f7320086a41027410ea081a0b200a200741027422096a201a360200200141a0036a210a200341026a2107024020060d002009200a6a41086a200a20054102746a2005417f7320076a41027410ea081a0b200a20054102746a201b360200200120083b0132200520074f0d0b200341016a210620012005417f6a22054102746a41a4036a210303402003280200220a200541016a22053b0130200a2001360200200341046a210320062005470d000c0c0b0b1036000b2007410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b41ac9cc700413541e49cc7001039000b200a410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b2020410c41f49cc700104d000b41f49bc7004128419c9cc7001039000b41e8aac700412b4194abc7001039000b41e899c700413041989ac7001039000b41a89ac700412041c89ac7001039000b200028020c2205200528020841016a3602080b200241b0016a240020120be80a010f7f230041206b220224000240200128020041016a220341014d0d002001200336020020024100360210200241104104200241106a107d200241086a28020021030240024002400240024020022802004101460d00200228020422042001360200200128020041016a220541024f0d010c050b2003450d010c030b2001200536020020024100360210200241104104200241106a107d200241086a28020021060240024020022802004101460d00200228020422072001360200200128020041016a22054102490d052003410276210820012005360200200641027621094104210a4101210b0240024002400340200541016a220341014d0d0920012003360200200128020841016a220341004c0d0120012003360208200128020c2205450d07200541106a210c2007200b410274220d6a210e2007210602400340200e2006460d01200628020022032005460d09200328020841016a220f41004c0d042003200f3602082005280208220f41016a221041004c0d05200520103602080240200341106a200c412010ec080d0020032d003020052d0030470d002005200f36020820032003280208417f6a3602080c0a0b200641046a21062005200f36020820032003280208417f6a3602080c000b0b200128020c220328020041016a220541014d0d09200320053602000240200b2008470d00200b41016a2205200b490d07200b41017422062005200620054b1b22054104200541044b1b220541ffffffff037120054641027421062005410274210502400240200b0d00200241003602100c010b20024104360218200220043602102002200d3602140b200220052006200241106a107d2002280208210520022802004101460d0620022802042104200541027621080b2004200d6a2003360200200128020c220328020041016a220541014d0d092003200536020020012001280200417f6a2205360200024020050d002001410c6a10cd04200141046a22052005280200417f6a220536020020050d002001102e0b200328020041016a220541014d0d092003200536020002400240200b2009470d00200b41016a2205200b490d08200b41017422062005200620054b1b22054104200541044b1b220541ffffffff037120054641027421062005410274210502400240200b0d00200241003602100c010b20024104360218200220073602102002200d3602140b200220052006200241106a107d2002280208210520022802004101460d0120022802042107200541027621090b2007200d6a200336020020012001280208417f6a36020820012001280200417f6a2205360200024020050d002001410c6a10cd04200141046a22052005280200417f6a220536020020050d002001102e0b200b41016a210b200a41046a210a20032802002105200321010c010b0b20050d070c050b41bcd9cc004118200241106a41a4bfcc0041c0c1cc00103e000b41bcd9cc004118200241106a41c4ffc40041c4bfcc00103e000b41bcd9cc004118200241106a41c4ffc40041d4bfcc00103e000b20060d030c010b20050d020b1038000b20012001280208417f6a36020820012001280200417f6a2203360200024020030d002001410c6a10cd04200141046a22032003280200417f6a220336020020030d002001102e0b20002004360204200020013602002000410c6a200b360200200041086a20083602000240200b450d00200721030340200328020022052005280200417f6a3602000240200328020022052802000d002005410c6a10cd04200328020041046a22052005280200417f6a3602002003280200220541046a2802000d002005102e0b200341046a2103200a417c6a220a0d000b0b0240200941ffffffff0371450d002007102e0b200241206a24000f0b1036000b00000bae0201047f230041106b220224004100210302400240024002400240024002402000280208220441016a220541004c0d0020002004360208200028020c2204450d0620002005360208024020042001470d00410121030c060b200428020841016a220341004c0d01200420033602082001280208220541016a220341004c0d0220012003360208200441106a200141106a412010ec080d034101210320042d003020012d0030470d030c040b41bcd9cc004118200241086a41a4bfcc0041b4bfcc00103e000b41bcd9cc004118200241086a41a4bfcc0041c4bfcc00103e000b41bcd9cc004118200241086a41a4bfcc0041d4bfcc00103e000b410021030b2001200536020820042004280208417f6a360208200028020821050b20002005417f6a3602080b200241106a240020030bc80101047f230041c0006b220224004119210341e0b2c7002104410221050240024002400240200141ff01710e0400010203000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602242002418883ca003602202002200241206a360218200241086a41c4afc8001044000b411a21034198b2c7002104410021050c010b411b210341bcb2c7002104410121050b20004183c8003b0100200041086a2003360200200041046a2004360200200041026a20053a0000200241c0006a24000b130020004103360204200041c4b1c7003602000bc40403027f017e037f230041a0036b22022400200241d0026a410c6a200041f0016a290200370200200241e4026a200041f8016a290200370200200241ec026a20004180026a290200370200200241e2c289ab063602d002200220002902e8013702d4022001280200210320024190036a200141046a10c301200241f8026a410c6a20024190036a41086a280200360200200220033602f80220022002290390033702fc02200220012802103602880320024180026a200241d0026a200241f8026a109d0402400240024020022802c002450d00200241a8016a41056a20024180026a41d00010e9081a200241d0006a200241a8016a41d50010e9081a2002200241d0006a41056a41d00010e908220141a8016a200141d00010e9081a200141d0006a410c6a210320002903002104410021054100210002400340200041d000460d014108102c2206450d0420014208370254200120063602502001200437038002200141d0006a20014180026a41081074200341086a41002900a197453700002003410029009997453700002001200141a8016a20006a36026c20014180026a200141d0006a10ae0102402001280254450d002001280250102e0b200141d0006a20014180026a108e03200128025022072001280258108f02210602402001280254450d002007102e0b200041d0006a210020060d000b410221050b0240200141ec016a2802002200450d00200041306c450d00200141e8016a280200102e0b41800621010c010b4100210541800821010b200241a0036a240020012005720f0b1036000b130020004106360204200041b4b4c7003602000b3400200041bad7c70036020420004100360200200041146a4102360200200041106a41c4d7c700360200200041086a42083702000b130020004105360204200041f8dcc7003602000b4401027f230041106b2202240002404104102c22030d001036000b200042043702042000200336020020024180800136020c20002002410c6a41041074200241106a24000b4901027f230041106b2202240002404110102c22030d001036000b20004210370204200020033602002002420037030820024280c2d72f3703002000200241101074200241106a24000b4a01027f230041106b2202240002404110102c22030d001036000b20004210370204200020033602002002420037030820024280c8afa0253703002000200241101074200241106a24000b4201027f230041106b2202240002404101102c22030d001036000b2000420137020420002003360200200241143a000f20002002410f6a41011074200241106a24000b4401027f230041106b2202240002404104102c22030d001036000b2000420437020420002003360200200241c0f00036020c20002002410c6a41041074200241106a24000bab0301087f230041106b2203240020032000200220016b10fc060240024020032802004101470d00200341086a2802000d0141d0f0cc00411141e4f0cc001039000b02400240200028020022044125490d002000410c6a22052802002106200041086a28020021070c010b200041056a21072004210620002105412421040b024002400240200620044f0d00034020022001460d02200720066a20012d00003a0000200141016a21012004200641016a2206470d000b200421060b2005200636020020012002460d01200141016a21062000410c6a2108200041056a210920012d0000210a034002400240200028020022074125490d00200028020c210120002802082105200821040c010b200721012000210420092105412421070b024020012007470d0020032000410110fc06024020032802004101470d00200341086a2802000d0541d0f0cc00411141e4f0cc001039000b200028020c210120002802082105200821040b200520016a200a3a00002004200428020041016a36020020022006460d0220062d0000210a200641016a21060c000b0b200520063602000b200341106a24000f0b1036000baa0301047f02400240200128020022034125490d002001410c6a2802002104200321050c010b41242105200321040b0240200520046b2002490d00200041003602000f0b0240024002400240200420026a22022004490d004100417f2002417f6a677620024102491b220441016a22052004490d000240024020034125490d002001410c6a2802002104200141086a2802002102200321060c010b200141056a210241242106200321040b200420054b0d010240200541244b0d000240200341244b0d00200041003602000f0b200141003a0004200141056a2002200410e9081a200120043602002002102e0c040b20062005460d030240200341244b0d0002402005102c2203450d0020032002200410e9081a0c040b2000200536020420004101360200200041086a41013602000f0b200220062005103022030d022000200536020420004101360200200041086a41013602000f0b2000200536020420004101360200200041086a41003602000f0b41c2f1cc00412041e4f1cc001039000b200141013a0004200120053602002001410c6a2004360200200141086a20033602000b200041003602000bd60501047f20002802282101024002400240024020002d000022024102470d002000410c6a2802002102200041086a2802002103200041046a280200210020012001280200417f6a2204360200024020040d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22042004280200417f6a220436020020040d002001102e0b0240200041ff01710d0041002104200320024f0d030b4110102c2200450d03200041f8f7c60036020c2000410136020820004281808080103702004110102c2201450d0320014190f8c60036020c20014101360208200142818080801037020020002000280200417f6a220436020020040d012000280208200028020c2802001103000240200028020c280204450d002000280208102e0b200041046a22042004280200417f6a220436020020040d012000102e0c010b410021040240024020020e0400010103010b20002d0001210020012001280200417f6a2204360200024020040d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22042004280200417f6a220436020020040d002001102e0b0240200041ff01710d0041010f0b4110102c2200450d03200041f8f7c60036020c2000410136020820004281808080103702004110102c2201450d0320014190f8c60036020c20014101360208200142818080801037020020002000280200417f6a220436020020040d012000280208200028020c2802001103000240200028020c280204450d002000280208102e0b200041046a22042004280200417f6a220436020020040d012000102e0c010b4101210420024103460d010b20012001280200417f6a22003602004102210420000d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22002000280200417f6a220036020020000d002001102e0b20040f0b1036000be21205027f0c7e037f027e017f230041c0026b220524000240024020022003844200520d0020004100360200200041106a4200370300200041086a42003703000c010b2005200136020c200541d0006a200110c802200541c0016a20052802502206200528025810c902200541c0016a41386a2903002107200541c0016a41306a2903002108200541c0016a41286a2903002109200541c0016a41206a290300210a200541c0016a41186a290300210b200541c0016a41106a290300210c20054180026a290300210d20052903c801210e20052903c001210f20054190016a41086a20054190026a290300370300200520054188026a2903003703900102400240200f4201510d004200210d200541106a41386a4200370300200541106a41306a4200370300200541106a41286a4200370300200541106a41206a4200370300200541106a41186a4200370300200541106a41106a4200370300200541106a41086a4200370300200542003703104200210a4200210942002108420021074200210e4200210c4200210b42002110420021114200210f420021120c010b200541106a41206a2009370300200541106a41286a2008370300200541106a41106a200b370300200541106a41306a20073703002005200a3703282005200e3703102005200d3703482005200c3703182009211020082111200e210f200c21120b02402005280254450d002006102e0b02400240200f2012844200520d0020102005290320842011200541286a29030084844200520d002005290340200541c8006a2903008450450d0042002110410021130c010b42012110410121130b024020104201510d004200210a4200210b4200210d4200210942002108420021074200210e4200210c0b41032106024002400240200e20027d2212200e56200c20037d200e200254ad7d220f200c56200f200c511b450d004113211441c8a3c700211541052101410321130c010b02402012200b7c221642ffc7afa02556200f200a7c20162012542214ad7c22114200522011501b0d00200e200b7c221742ffc7afa02556200c200a7c2017200e54ad7c220e420052200e501b450d00410921144180a4c700211541052113410521010c010b200541c0016a20012002200320042012200f10d706024020052d00c00122064106460d00200541c8016a280200211420052802c401211520052d00c301210420052d00c201211320052d00c10121010c010b200541e8016a22152008370300200541f0016a221820073703002005200b3703d001200541d8016a200a370300200520093703e001200520123703c0012005200f3703c8014200210c2002422088a721062002a7210402400240427f201620142011200f542011200f511b22141b220242ffc7afa02556427f201120141b220e420052200e501b0d002012200b84200f200a8484220c5021144200210b200c420052ad210c0c010b2018290300211720152903002116200541e0016a2903002111200541d0016a290300210920052903d801210720052903c801210820052903c001210a4201210b410121140b200541f8006a200e370300200541f0006a22152002370300200541e0006a200f370300200520123703582005200337038801200520063602840120052004360280012005200c37036820052010420152ad22033703500240024002400240024002402013200b420152720d00200520013602c0012001200541c0016a10bd060c010b024020134101732206200b420151720d00200520013602c0012001200541c0016a10be0641ff017122064103460d01024020060e03030200030b20054180016a2101024020140d00200520153602c001200541c0016a10cc020b200520013602c001200541c0016a10cc02410421064100210441002113410021010c070b200b4201522006710d020b200541a0016a200110c802200541c0016a20052802a001220420052802a801221310c90220052903c001210e20054190016a41086a220620054190026a290300370300200520054188026a2903003703900102400240200e4201510d00200541b0016a41086a4200370300200542003703b0010c010b200541b0016a41086a200629030037030020052005290390013703b0010b20054188026a20052903b00137030020054190026a200541b0016a41086a290300370300200542013703c001200541c0016a41386a20174200200b42015122061b370300200541f0016a2016420020061b370300200541c0016a41286a2011420020061b370300200541e0016a2007420020061b370300200541d8016a2009420020061b370300200541c0016a41106a2008420020061b37030020054180026a200d420020061b3703002005200a420020061b3703c80120042013200541c0016a41086a10c805024020052802a401450d002004102e0b200541d0006a41106a290300210f200541d0006a41286a290300210e200541d0006a41386a290300210920052903582112200529037021022005290380012108200529035021032005290368210c0c030b20054188016a29030021090c010b20054188016a29030021090b20052903800121080b024020034201520d00200541f8016a200f370300200541f0016a2012370300200541c0016a41086a41003a0000200541c9016a2001290000370000200541d1016a200141086a290000370000200541d9016a200141106a290000370000200541e1016a200141186a290000370000200541033a00c001200541c0016a10fe010b02400240200c50450d004200210c0c010b200541c0016a41086a200528020c220141086a290000370300200541c0016a41106a200141106a290000370300200541c0016a41186a200141186a290000370300200520012900003703c0014201210c0b200541d0006a41186a200541c0016a41186a22012903002203370300200541d0006a41106a200541c0016a41106a2206290300220b370300200541d0006a41086a200541c0016a41086a290300220a370300200520052903c001220f370350200541f0016a200e370300200541e8016a220420023703002006200a3703002001200b370300200541e0016a20033703002005200c3703c0012005200f3703c801200541c0016a10d204024020052903c001500d0020052004360210200541106a10cc020b20004100360200200041106a2009370300200041086a20083703000c020b2014ad4220862015ad84210e0b200041086a200e3702002000410136020020002004411874201341ff017141107472200141ff0171410874722006723602040b200541c0026a24000bdb0403027f027e037f230041a0036b22022400200241d0026a410c6a200041e8016a290200370200200241e4026a200041f0016a290200370200200241ec026a200041f8016a290200370200200241e7e485f3063602d0022002200041e0016a2902003702d4022001280200210320024190036a200141046a10c301200241f8026a410c6a20024190036a41086a280200360200200220033602f80220022002290390033702fc02200220012802103602880320024180026a200241d0026a200241f8026a109d040240024020022802c002450d00200241a8016a41056a20024180026a41d00010e9081a200241d0006a200241a8016a41d50010e9081a2002200241d0006a41056a41d00010e9082101200041106a290300210420002903002105200141a8016a200141d00010e9081a200141d0006a410c6a2103410021064100210002400340200041d000460d0120014201370350200141003602582001200537038002200141d0006a20014180026a410810742001200437038002200141d0006a20014180026a41081074200341086a410029009197453700002003410029008997453700002001200141a8016a20006a36026c20014180026a200141d0006a10ae0102402001280254450d002001280250102e0b200141d0006a20014180026a108e03200128025022072001280258108f02210802402001280254450d002007102e0b200041d0006a210020080d000b410221060b0240200141ec016a2802002200450d00200041306c450d00200141e8016a280200102e0b41800621010c010b4100210641800821010b200241a0036a240020012006720b130020004104360204200041fcedc7003602000b3400200041bcdbc80036020420004100360200200041146a4101360200200041106a41a480c800360200200041086a42073702000b130020004101360204200041cc81c8003602000b900706027f017e027f017e087f057e23002203210420034180016b4160712203240042e4cab5fbb6ccdcb0e3002105200342e4cab5fbb6ccdcb0e3003703180240024002402001200284500d00200341e0006a200010d40620032802602106200328026421074201210802400240200328026822090d002006210a0c010b200620094105746a210b200341c0006a41196a210c200621092006210a0340200341286a41106a220d200941106a290300370300200341286a41086a220e200941086a29030037030020032009290300370328200941186a2d0000210f2003200941196a28000036022020032009411c6a280000360023200f4103460d01200c2003280220360000200c41036a22102003280023360000200341c0006a41106a200d2903002211370300200341c0006a41086a220d200e290300370300200320032903283703402003200f3a005802400240024020112003290318520d002008a7210e200341033a0078200329037021052003290360211220032903682113200329037821080240200e41ff0171220e4103470d0020122101201321020c030b200d2903002211200220032903402214200156201120025620112002511b220d1b211120142001200d1b2114200f4102200f200e461b210f2003290350211520122101201321020c010b2003200c28000036026020032010280000360063200d290300211120032903402114200329035021150b200a2014370300200a200f3a0018200a2015370310200a2003280260360019200a2011370308200a411c6a2003280063360000200a41206a210a0b200941206a2209200b470d000b0b200a20066b410575210902400240200842ff018342038550450d00200721030c010b0240024020092007460d0020072103200921070c010b200741016a22092007490d042007410174220a2009200a20094b1b22094104200941044b1b220941ffffff3f71200946410374210a200941057421090240024020070d00200341003602600c010b200341e0006a41086a410836020020032006360260200320074105743602640b200341c0006a2009200a200341e0006a107d200341c8006a280200210920032802404101460d0320032802442106200941057621030b200620074105746a220920053703102009200237030820092001370300200941186a2008370300200741016a21090b20002006200910d506200341ffffff3f71450d002006102e0b200424000f0b2009450d001036000b1038000b130020004104360204200041888dc8003602000b3400200041f8fcc60036020420004100360200200041146a4104360200200041106a41c8a7c800360200200041086a42083702000b130020004101360204200041acaec8003602000bf00101037f230041106b2202240020004100360208200042013702002001200010e805200141106a200010e8052002200128022036020c20002002410c6a410410742002200128022436020c20002002410c6a410410742002200128022836020c20002002410c6a41041074200141306a2802002103200141386a200141346a200128022c4101461b28020022042000107602402004410c6c2204450d00200320046a2104034020002003410810742002200341086a28020036020c20002002410c6a410410742003410c6a22032004470d000b0b2002200128023c36020c20002002410c6a41041074200241106a24000bcf0301027f230041206b2205240020054100360208200542013703000240024002400240024020002802000e03000102030b200541003a00102005200541106a410110744120102c2206450d032005422037021420052006360210200541106a200041086a412010742005200528021022062005280218107402402005280214450d002006102e0b200520002802043602102005200541106a410410740c020b200541013a00102005200541106a410110744120102c2206450d022005422037021420052006360210200541106a200041086a412010742005200528021022062005280218107402402005280214450d002006102e0b200520002802043602102005200541106a410410740c010b200541023a00102005200541106a410110744120102c2206450d012005422037021420052006360210200541106a200041086a412010742005200528021022062005280218107402402005280214450d002006102e0b200520002802043602102005200541106a410410740b200520033703102005200541106a41081074200520043703102005200541106a4108107420022005280200220620052802082001108907210002402005280204450d002006102e0b200541206a240020000f0b1036000b150020002002ad4220862001ad84200310034101460b130020004101360204200041ecb7c8003602000b3400200041a5fec60036020420004100360200200041146a4106360200200041106a41f0bec800360200200041086a421a3702000b130020004103360204200041c8cac8003602000b4301027f230041106b2202240002404104102c22030d001036000b2000420437020420002003360200200241d80436020c20002002410c6a41041074200241106a24000b100020002802002000280204200110680bbc0201037f23004180016b2202240020002802002100024002400240024020012802002203411071450d0020002802002104410021000340200220006a41ff006a2004410f712203413072200341d7006a2003410a491b3a00002000417f6a2100200441047622040d000b20004180016a22044181014f0d02200141ac88c0004102200220006a4180016a410020006b104b21000c010b2000280200210402402003412071450d00410021000340200220006a41ff006a2004410f712203413072200341376a2003410a491b3a00002000417f6a2100200441047622040d000b20004180016a22044181014f0d03200141ac88c0004102200220006a4180016a410020006b104b21000c010b2004ad2001104821000b20024180016a240020000f0b2004418001419c88c0001056000b2004418001419c88c0001056000b8a0702027f047e230041f0016b2202240020002802002100024002400240024020012802002203411071450d00200041086a290300210420002903002105418001210002400340024020000d00410021000c020b200241f0006a20006a417f6a2005a7410f712203413072200341d7006a2003410a491b3a00002000417f6a210020054204882004423c8684220520044204882204844200520d000b20004181014f0d030b200141ac88c0004102200241f0006a20006a41800120006b104b21000c010b200041086a29030021042000290300210502402003412071450d00418001210002400340024020000d00410021000c020b200241f0006a20006a417f6a2005a7410f712203413072200341376a2003410a491b3a00002000417f6a210020054204882004423c8684220520044204882204844200520d000b20004181014f0d040b200141ac88c0004102200241f0006a20006a41800120006b104b21000c010b2002412736026c02400240200442ffff1f560d0020054213882004422d868442bda282a38eab04802104420021060c010b200241386a2005420042f3b2d8c19e9ebdcc957f420010e808200241286a2005420042d2e1aadaeda7c987f600420010e808200241d8006a2004420042f3b2d8c19e9ebdcc957f420010e808200241c8006a2004420042d2e1aadaeda7c987f600420010e808200241c8006a41086a290300200241286a41086a290300200241386a41086a290300220620022903287c2204200654ad7c220720022903487c2206200754ad7c2006200241d8006a41086a290300200420022903587c200454ad7c7c2204200654ad7c2207423e8821062004423e8820074202868421040b200241186a20042006428080e0b0b79fb79cf500427f10e808200229031820057c200241f0006a200241ec006a106702402004200684500d00200241f0006a41146a4130200228026c416c6a10eb081a2002411436026c200241086a20044213882006422d8684220542bda282a38eab048022062004428080e0b0b79fb79cf500427f10e808200229030820047c200241f0006a200241ec006a1067200542bda282a38eab04540d00200241f1006a4130200228026c417f6a10eb081a20022006a74130723a00702002410036026c0b200141d4e2cc004100200241f0006a200228026c22006a412720006b104b21000b200241f0016a240020000f0b2000418001419c88c0001056000b2000418001419c88c0001056000ba90705017f047e027f017e017f230041c0016b22022400200241b0016a200141186a2903002203200041186a29020085420020012903102204200029021085420010e808200241a0016a2003200041086a2902008542002004200029020085420010e8082001200141086a2903002205200241a0016a41086a29030020022903a001857c2005200241b0016a41086a29030020022903b001857c200129030042adfed5e4d485fda8d8007e42a0cbbf9599b5a19f0a7c8542178985421789220637030002400240200028022022074125490d002000412c6a2802002107200041286a28020021080c010b200041256a21080b20024190016a20062007ad220985420042adfed5e4d485fda8d800420010e808200120024198016a2903002002290390018520097c42adfed5e4d485fda8d8007e22063703000240024002400240024020074109490d00200741104d0d01200241c0006a2003200720086a41706a220a41086a2900008542002004200a29000085420010e80820012005200241c0006a41086a2903002002290340857c20068542178922063703000340200241306a2003200841086a2900008542002004200829000085420010e808200841106a21082005200241306a41086a2903002002290330857c2006854217892106200741706a220741104b0d000c040b0b0240200741014b0d002007450d0420024180016a2006200831000085420042adfed5e4d485fda8d800420010e80820024188016a2903002002290380018521060c030b200741034b0d01200241f0006a200720086a417f6a310000422086200833000084200685420042adfed5e4d485fda8d800420010e808200241f8006a29030020022903708521060c020b200241d0006a2003200720086a41786a2900008542002004200829000085420010e8082005200241d8006a2903002002290350857c20068542178921060c010b200241e0006a2003200720086a417c6a3500008542002004200835000085420010e8082005200241e8006a2903002002290360857c20068542178921060b200120063703000b02400240200041cc006a2d00000d0020022006420042adfed5e4d485fda8d800420010e808200241086a29030020022903008521060c010b200241206a2006420185420042adfed5e4d485fda8d800420010e808200241106a200241206a41086a290300200229032085200041cd006a31000085420042adfed5e4d485fda8d800420010e808200241106a41086a29030020022903108521060b20012006370300200241c0016a24000b6901017f230041206b220324002003200136020420032000360200200341086a41106a200241106a290200370300200341086a41086a200241086a29020037030020032002290200370308200341a4cec800200341046a41a4cec800200341086a4180a2cc001058000bd30202027f017e23004180016b2202240020002802002100024002400240024020012802002203411071450d0020002903002104418001210002400340024020000d00410021000c020b200220006a417f6a2004a7410f712203413072200341d7006a2003410a491b3a00002000417f6a2100200442048822044200520d000b20004181014f0d030b200141ac88c0004102200220006a41800120006b104b21000c010b2000290300210402402003412071450d00418001210002400340024020000d00410021000c020b200220006a417f6a2004a7410f712203413072200341376a2003410a491b3a00002000417f6a2100200442048822044200520d000b20004181014f0d040b200141ac88c0004102200220006a41800120006b104b21000c010b20042001104821000b20024180016a240020000f0b2000418001419c88c0001056000b2000418001419c88c0001056000b13002000410636020420004194cfc8003602000b110041e2a0cc00412841acd3c8001039000b110041e2a0cc00412841bcd3c8001039000bfb0501087f230041206b22042400024002400240200141086a280200220541036a2206417f4c0d0020012d000021072001280204210820012d000121094101210102402006450d002006102c2201450d020b20002001360200200041086a4100360200200041046a2006360200200541017420076a220141ffff03200141ffff03491b220641c0006a41ff0020062006413e2006413e491b220a461b21012006200a6b21064101210a02400340024002400240200a41ff01714102470d002001210b0c010b4100210b200a410171450d004100210a0c010b2006450d020240200641ff014b0d002006417f6a21014102210a410021060c010b200641817e6a210641ff0121014102210a0b200420013a00102000200441106a41011074200b21010c000b0b024002400240024020070d00200041046a2802002106200041086a28020021010c010b0240200041086a220b280200220a200041046a2802002206470d00200a41016a2201200a490d04200a41017422062001200620014b1b22014108200141084b1b210102400240200a0d00200441003602100c010b200441106a41086a41013602002004200a360214200420002802003602100b200420014101200441106a10d104200441086a280200210620042802004101460d0220002004280204360200200041046a20063602000b200b200a41016a22013602002000280200200a6a2009410f713a00000b200620016b2005490d01200028020021060c040b2006450d010c020b200120056a220a2001490d002006410174220b200a200b200a4b1b220a4108200a41084b1b210a0240024020060d00200441003602100c010b200441106a41086a410136020020042006360214200420002802003602100b2004200a4101200441106a10d104200441086a280200210a024020042802004101460d00200020042802042206360200200041046a200a3602000c030b200a0d010b1038000b1036000b200620016a2008200510e9081a200041086a200120056a3602002003200010762000200220031074200441206a24000bff0101047f230041c0006b2202240041aab4c700210341092104410521050240024002400240024002400240200141ff01710e0700010203040506000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a41c4c5cb001044000b419eb4c7002103410c2104410021050c040b4192b4c7002103410c2104410121050c030b4188b4c7002103410a2104410221050c020b41ffb3c7002103410321050c010b41f6b3c7002103410421050b20004183c6003b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000bf50101047f230041306b22022400200241bad7c7004108108102200241106a41dcd9c7004107108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000bb40201037f230041e0006b22022400200241086a41bad7c7004108108102200241186a41f4d8c7004104108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241c8006a41086a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000bb40201037f230041e0006b22022400200241086a41bad7c7004108108102200241186a41f4d8c7004104108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241c8006a41086a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000b1300200041033602042000418cd4c8003602000b9a0801097f230041e0006b220224000240024020012802202203109e07450d0020004180063b0001200041013a0000200041036a410a3a00000c010b200241386a22044200370300200241306a22054200370300200241206a41086a420037030020024200370320200241206a41a081ca004107108102200241c0006a41e4d1c100410c1081022004200241c0006a41086a29000037030020052002290040370300200241086a200241206a4120108e020240200128021c200228020c410020022802081b2206460d0020004180063b0001200041013a0000200041036a410a3a00000c010b200241106a10870302400240200228021822052001280224460d00200041800e3b0001200041013a0000200041036a410a3a00000c010b0240200520034b0d0020004180083b0001200041013a0000200041036a410a3a00000c010b200141286a2107200228021020034105746a2108200241003602282002420137032020022001280200360240200241206a200241c0006a41041074200128020421042001410c6a2802002209200241206a1076200241206a200420091074200141106a2802002104200141186a2802002209200241206a10762006210a02402009450d0020042009410c6c6a2109034020042802002103200441086a2802002205200241206a1076200241206a2003200510742004410c6a22042009470d000b2001280224210520012802202103200128021c210a0b2002200a360240200241206a200241c0006a4104107420022003360240200241206a200241c0006a4104107420022005360240200241206a200241c0006a410410742007200228022022012002280228200810fa04210402402002280224450d002001102e0b024020040d0020004180083b0001200041013a0000200041036a410a3a00000c010b0240024002404110102c2204450d0020024210370254200220043602504108200241d0006a1076200241d0006a41bed8c8004108107420022006360220200241d0006a200241206a41041074200241d0006a20084120107420024100360220200241c0006a41304104200241206a107d200241c0006a41086a280200210120022802404101470d012001450d020b1036000b200228024422042002290350370200200441086a200241d0006a41086a280200360200200220022800203602402002200241236a280000360043200041306a41013a00002000412c6a4101360200200041286a2001410c6e360200200041246a2004360200200041206a4100360200200041186a4204370300200041106a42b009370300200041086a427f370300200041003a0000200041316a2002280240360000200041346a2002280043360000200228021441ffffff3f71450d022002280210102e0c020b1038000b200228021441ffffff3f71450d002002280210102e0b200241e0006a24000bdc0102037f017e230041306b22012400200141186a22024200370300200141106a22034200370300200141086a420037030020014200370300200141a081ca004107108102200141206a41f09dc500410a1081022002200141206a41086a29000037030020032001290020370300200141206a200110880320012802202202410120021b21030240024002402001290224420020021b2204422088a720004b0d0041002100200442ffffff3f8350450d010c020b2000200320004105746a10be012100200442ffffff3f83500d010b2003102e0b200141306a240020000bec0505017f017e097f027e027f230041306b2201240002400240101c2202422088a722030d002001200336020c200141013602080c010b2001200336020c20012002a7220436020820042d0000210520012003417f6a36020c2001200441016a3602080240024002400240024020050e020001050b200141206a200141086a10db0820012802202206450d04200141286a2802002107200128022421082001200141086a10ab0120012802000d03024020012802042209200128020c410c6e2205200520094b1bad420c7e2202422088a70d002002a72205417f4c0d000240024020050d004104210a0c010b2005102c220a450d040b2005410c6ead2102024002402009450d000340200141206a200141086a10db0802402001280220220b0d0002402002422088a72205450d002005410c6c2109200a210503400240200541046a280200450d002005280200102e0b2005410c6a2105200941746a22090d000b0b2002a72205450d082005410c6c450d08200a102e0c080b2001290224210c02402002422088220da722052002a7470d00200541016a220e2005490d042005410174220f200e200e200f491b220e4104200e41044b1bad420c7e220d422088a745410274210e200da7210f0240024020050d00200141003602200c010b200141043602282001200a36022020012005410c6c3602240b200141106a200f200e200141206a107d2001280218210e20012802104101460d032001280214210a2002422088220da72105200e410c6ead21020b200a2005410c6c6a2205200c3702042005200b360200200d422086200242ffffffff0f83844280808080107c21022009417f6a22090d000b0b200a450d0520060d030c060b200e0d030b1038000b410021060b2000200836020420002006360200200041106a20023702002000410c6a200a360200200041086a200736020002402003450d002004102e0b200141306a24000f0b1036000b2008450d002006102e0b41cae0cc00412e200141206a41f8e0cc004188e1cc00103e000bd10302017f017e230041a0016b220524002005200136020c024002402005410c6a20022004ad4220862003ad8410092206422088a722030d00410121020c010b2006a721020b200520033602542005200236025002402003450d0020022d0000210420052003417f6a3602542005200241016a360250410021030240024020040e020100020b200541d8006a200541d0006a10a70120052d00584101460d01200541c8006a20054191016a290000370300200541c0006a20054189016a290000370300200541386a20054181016a290000370300200541306a200541f9006a290000370300200541286a200541f1006a290000370300200541206a200541e9006a290000370300200541186a200541e1006a29000037030020052005290059370310410121030b200020033a000020002005290310370001200041096a200541186a290300370000200041116a200541206a290300370000200041196a200541286a290300370000200041216a200541306a290300370000200041296a200541386a290300370000200041316a200541c0006a290300370000200041396a200541c8006a2903003700002002102e200541a0016a24000f0b41cae0cc00412e200541d8006a41f8e0cc004188e1cc00103e000b1d0020004101472002ad4220862001ad842004ad4220862003ad84101b0b930201017f230041106b22022400200220002903003703082001200241086a410810740240024020002903084201510d00200241003a00082001200241086a410110740c010b200241013a00082001200241086a410110742002200041106a2903003703082001200241086a410810740b0240024020002903184201510d00200241003a00082001200241086a410110740c010b200241013a00082001200241086a410110742002200041206a2903003703082001200241086a410810740b0240024020002903284201510d00200241003a00082001200241086a410110740c010b200241013a00082001200241086a410110742002200041306a2903003703082001200241086a410810740b200241106a24000b850201037f230041d0006b22022400200241086a41d9fcc6004106108102200241186a41d8f3cb00410d108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000b830101037f230041206b2202240020022000108c02200228020821032002280200210002404120102c2204450d002002422037021420022004360210200241106a2001412010742000200320022802102201200228021810b20102402002280214450d002001102e0b02402002280204450d002000102e0b200241206a24000f0b1036000b130020004103360204200041d0ddc8003602000b3400200041a0dac80036020420004100360200200041146a4106360200200041106a41fce8c800360200200041086a420f3702000b4201027f230041106b2202240002404108102c22030d001036000b2000420837020420002003360200200242003703082000200241086a41081074200241106a24000b0d00200041002000200010da060b3001017f0240200128020022022001280204470d00200041003602000f0b2001200241e0016a3602002000200210d0030b290020004101360204200041086a200128020420012802006b41e0016e2201360200200020013602000ba20801087f230041d0006b22052400200541306a22064200370300200541286a22074200370300200541186a41086a2208420037030020054200370318200541386a41a0dac800410f1081022008200541386a41086a220929000037030020052005290038370318200541386a41afdac800410d1081022006200929000037030020072005290038370300024002400240200541186a4120108f020d0020064200370300200742003703002008420037030020054200370318200541186a41d9fcc6004106108102200541386a4180f4cb0041061081022006200929000037030020072005290038370300200541106a200541186a4120108e022005280214410020052802101b2106024020034101470d00200541306a220a4200370300200541286a220b4200370300200541186a41086a2208420037030020054200370318200541386a41a0dac800410f1081022008200541386a41086a220929000037030020052005290038370318200541386a41fcedc800410a108102200741086a220c200929000037000020072005290038370000200541086a200541186a4120108e0202402005280208450d00200528020c20064d0d002000410410b0070c030b200a4200370300200b42003703002008420037030020054200370318200541386a41a0dac800410f1081022008200929000037030020052005290038370318200541386a41fcedc800410a108102200c2009290000370000200720052900383700002005200241017420066a360238200541186a4120200541386a410410b2010b200128020421082001280200210920012802082101200541306a4200370300200541286a4200370300200541186a41086a220a420037030020054200370318200541386a41a0dac800410f108102200a200541386a41086a220b29000037030020052005290038370318200541386a41afdac800410d108102200741086a200b29000037000020072005290038370000200541003602402005420137033820052006360248200541386a200541c8006a4104107420052002360248200541386a200541c8006a410410742001200541386a10760240200141286c2207450d00200920076a2101200921070340200541386a2007412010742005200741206a290300370348200541386a200541c8006a41081074200741286a22072001470d000b0b0240024020034101460d00200541003a0048200541386a200541c8006a410110740c010b200541013a0048200541386a200541c8006a4101107420052004360248200541386a200541c8006a410410740b200541186a412020052802382207200528024010b2010240200528023c450d002007102e0b02402008450d00200841286c450d002009102e0b200041063a00000c020b2000410310b0070b200141046a2802002207450d00200741286c450d002001280200102e0b200541d0006a24000b840201047f230041d0006b22022400200241a0dac800410f108102200241106a4194efc800410c108102200220013703302002200241306a410810a301370338200241c0006a410c6a200241306a41086a3602002002200241386a41086a3602442002200241306a3602482002200241386a360240200241206a200241c0006a107c024002402002280228220341206a2204417f4c0d000240024020040d00410121050c010b2004102c2205450d020b20004100360208200020043602042000200536020020002002411010742000200241106a411010742000200228022022042003107402402002280224450d002004102e0b200241d0006a24000f0b1038000b1036000bd30302057f017e230041b0016b2202240002400240200128020022032001280204470d00200041003602000c010b2001200341e0016a3602002002200341206a41e2c289ab0610d103200228020421042002280200210541002101200241003a00680240024002400240034020042001460d01200241c8006a20016a200520016a2d00003a00002002200141016a22063a00682006210120064120460d020c000b0b200141ff0171450d01200241003a00680c010b200241f0006a41086a2201200241c8006a41086a290300370300200241f0006a41106a2204200241c8006a41106a290300370300200241f0006a41186a2205200241c8006a41186a29030037030020022002290348370370200641ff0171411f4d0d00200241286a41186a20052903002207370300200241086a41086a2001290300370300200241086a41106a2004290300370300200241086a41186a2007370300200220022903703703080c010b200241106a4200370300200241186a4200370300200241206a4200370300200242003703080b20002003360200200020022903083700042000410c6a200241106a290300370000200041146a200241186a2903003700002000411c6a200241206a2903003700000b200241b0016a24000b3001017f0240200128020022022001280204470d00200041003602000f0b2001200241e0016a3602002000200210d2030bd30302057f017e230041b0016b2202240002400240200128020022032001280204470d00200041003602000c010b2001200341e0016a3602002002200341206a41e1ea91cb0610d103200228020421042002280200210541002101200241003a00680240024002400240034020042001460d01200241c8006a20016a200520016a2d00003a00002002200141016a22063a00682006210120064120460d020c000b0b200141ff0171450d01200241003a00680c010b200241f0006a41086a2201200241c8006a41086a290300370300200241f0006a41106a2204200241c8006a41106a290300370300200241f0006a41186a2205200241c8006a41186a29030037030020022002290348370370200641ff0171411f4d0d00200241286a41186a20052903002207370300200241086a41086a2001290300370300200241086a41106a2004290300370300200241086a41186a2007370300200220022903703703080c010b200241106a4200370300200241186a4200370300200241206a4200370300200242003703080b20002003360200200020022903083700042000410c6a200241106a290300370000200041146a200241186a2903003700002000411c6a200241206a2903003700000b200241b0016a24000b9b0201047f230041c0006b2202240041baddc8002103411621044106210502400240024002400240024002400240200141ff01710e080001020304050607000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a41b48dcc001044000b41afddc8002103410b2104410021050c050b41a3ddc8002103410c2104410121050c040b4196ddc8002103410d2104410221050c030b418fddc800210341072104410321050c020b41f7dcc800210341182104410421050c010b41dfdcc800210341182104410521050b20004183163b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000b130020004101360204200041c8f3c8003602000b3400200041bed8c80036020420004100360200200041146a4104360200200041106a41b0f8c800360200200041086a42083702000b1300200041013602042000418487c9003602000b3400200041e8fcc60036020420004100360200200041146a4102360200200041106a41808dc900360200200041086a42093702000b130020004101360204200041cc8fc9003602000b4301027f230041106b2202240002404108102c22030d001036000b2000420837020420002003360200200242b8173703082000200241086a41081074200241106a24000b130020004101360204200041d093c9003602000b340020004190dac80036020420004100360200200041146a4103360200200041106a41dc94c900360200200041086a420a3702000b02000b2f01017f02404104102c22020d001036000b2000420437020420002002360200410020001076410441002000109f010b810201057f0240024002400240200041086a2802002201450d0020014102742102410021032000280200220421050240034020052802000d01200541046a2105200341016a21032002417c6a22020d000b2001417f6a21030b2003450d0020012003490d01200120036b220541ffffffff03712005470d0220054102742202417f4c0d024104210102402002450d002002102c2201450d040b2001200420034102746a200541027410e9082103200241027621020240200041046a28020041ffffffff0371450d002000280200102e0b20002003360200200041086a2005360200200041046a20023602000b0f0b2003200141dcd8cc001056000b1038000b1036000b9c04030d7f017e017f02400240200241086a2802002203200141086a28020022046a22054101200541014b1b220641ffffffff03712006470d0020064102742205417f4c0d0002400240024020050d00410421070c010b200510322207450d010b20002007360200200041086a2006360200200020054102763602042004450d022006417f6a2108200341027420022802006a417c6a2109200641027420076a417c6a210a4100210b200141086a210c2004210d0240034002400240024002400240024002402004200d200b417f736a220e4d0d002001280200200e4102746a220f280200450d06024020030d00410021000c060b420021104100210020092102200a21050340200d200e4d0d022003200320006a2211417f6a4d0d032006200820006a22114d0d0420052002350200200f3502007e20107c20053502007c22103e02002002417c6a21022005417c6a21052010422088211020032000417f6a22006a450d050c000b0b200e200441ccd7cc00103c000b200e200d41ccd7cc00103c000b2011417f6a200341ccd7cc00103c000b2011200641ccd7cc00103c000b2010a721000b2006200b20036a417f736a220520064f0d02200720054102746a20003602000b200b41016a220b2004460d04200a417c6a210a2008417f6a2108200c280200210d0c000b0b2005200641ecd8cc00103c000b1036000b1038000b0240200141046a28020041ffffffff0371450d002001280200102e0b0bab1006037f017e017f017e0c7f027e23004180026b22022400200141346a2802002103200141386a2802002104200141086a29030021052001280230210620012903002107200241086a41186a200141d4006a290000370300200241086a41106a200141cc006a290000370300200241086a41086a200141c4006a2900003703002002200129003c37030820022005370330200220073703282006200441d8006c22086a21092006210102400240024002402004450d004100210a20024198016a41086a210b20024198016a41106a210c20024198016a41186a210d024002400340200b2006200a6a2201413c6a290200370300200c200141c4006a290200370300200d200141cc006a29020037030020024198016a41206a200141d4006a2802003602002002200141346a29020037039801200141306a280200220e450d02200141286a2903002105200141206a2903002107200241e0016a41186a220f200d290300370300200241e0016a41106a2210200c290300370300200241e0016a41086a2211200b29030037030020022002290398013703e00102400240200720052002290328200241286a41086a29030010820522120d004100210f0c010b200241c0016a41186a200f290300370300200241c0016a41106a2010290300370300200241c0016a41086a2011290300370300200220022903e0013703c0014101210f201221130b200e200e280200417f6a2210360200024020100d00200e41046a22102010280200417f6a221036020020100d00200e102e0b200f0d012008200a41d8006a220a470d000b200921010c020b200241386a41086a220e200241c0016a41086a290300370300200241386a41106a220b200241c0016a41106a290300370300200241386a41186a220c200241c0016a41186a290300370300200220022903c00122053703582002200537033802404124102c2208450d002008200229033837020020082013360220200841186a200c290300370200200841106a200b290300370200200841086a200e290300370200200220093602442002200141d8006a220b3602402002200336023c200220063602382002200241286a360248024002400240200441d8006c41a87f6a200a470d0041012103410121040c010b20024198016a41086a210a20024198016a41106a210c20024198016a41186a210d410121034101210403402002200b220141d8006a220b360240200141306a280200210e200141286a2903002105200141206a2903002107200a2001413c6a290200370300200c200141c4006a290200370300200d200141cc006a29020037030020024198016a41206a200141d4006a2802003602002002200141346a2902003703980102400240200e450d00200241e0016a41186a2210200d290300370300200241e0016a41106a2211200c290300370300200241e0016a41086a2212200a29030037030020022002290398013703e00102400240200720052002280248220f290300200f41086a29030010820522060d004100210f0c010b200241c0016a41186a2010290300370300200241c0016a41106a2011290300370300200241c0016a41086a2012290300370300200220022903e0013703c0014101210f200621130b200e200e280200417f6a2210360200024020100d00200e41046a22102010280200417f6a221036020020100d00200e102e0b200f0d012009200b470d020b200141d8006a210b0c020b200241d8006a41086a200241c0016a41086a2903002205370300200241d8006a41106a200241c0016a41106a2903002207370300200241d8006a41186a200241c0016a41186a2903002214370300200220022903c0012215370358200d2014370300200c2007370300200a20053703002002201537039801024020042003470d00200341016a22012003490d092003410174220e2001200e20014b1b22014104200141044b1bad42247e2205422088a74541027421012005a7210e0240024020030d00200241003602e0010c010b200241043602e801200220083602e0012002200341246c3602e4010b200241c0016a200e2001200241e0016a107d20022802c801210120022802c0014101460d0320022802c4012108200141246e21030b2008200441246c6a2201200229039801370200200c2903002105200d2903002107200a290300211420012013360220200141086a2014370200200141186a2007370200200141106a2005370200200441016a21042002280240220b20022802442209470d000b0b2009200b6b220141d8006d210e02402001450d00200e41d8006c210e200b41306a210103402001280200220a200a280200417f6a36020002402001280200220a2802000d00200a41046a220a200a280200417f6a3602002001280200220a41046a2802000d00200a102e0b200141d8006a2101200e41a87f6a220e0d000b0b0240200228023c2201450d00200141d8006c450d002002280238102e0b2004450d042000200336020420002008360200200041086a20043602002000410c6a2002290308370000200041146a200241086a41086a2903003700002000411c6a200241186a290300370000200041246a200241206a2903003700000c050b2001450d050b1036000b200141d8006a21010b024020092001460d000340200141306a220e280200220a200a280200417f6a360200200141d8006a21010240200e280200220a2802000d00200a41046a220a200a280200417f6a360200200e280200220e41046a2802000d00200e102e0b20092001470d000b0b02402003450d00200341d8006c450d002006102e0b200041003602000c010b200041003602002003450d00200341246c450d002008102e0b20024180026a24000f0b1038000b130020004107360204200041d499c9003602000b13002000410236020420004188a0c9003602000b13002000410736020420004190a1c9003602000b1f0002402000280200450d00200041086a280200450d002000280204102e0b0b940202017f027e230041e0006b2202240002402001450d00200241d4006a410f3602002002411c6a41023602002002420237020c200241a0a7c9003602082002410436024c20024198a7c9003602482002200241c8006a3602182002200241d8006a360250200241086a41b0a7c9001044000b200241c0006a41002903e8f846370300200241386a41002903e0f846370300200241306a41002903d8f846370300200241286a41002903d0f846370300200241206a41002903c8f846370300200241186a41002903c0f846370300200241106a41002903b8f846370300200241002903b0f846370308200241c8006a200241086a1087072002350250210320023502482104200241e0006a240020042003422086840bfd1d02087f047e230041900a6b22022400200242808080808020370214200220013602a4062002200041d4e2cc0020011b3602a0062002200241a0066a360210200241b0066a200241106a10990202400240024020022802b4062203450d00200241bc066a280200210420022802b806210520022802b0062106200241e0026a200241c0066a41e00010e9081a200241b0066a200241106a10ec0120022802b00622070d0102402004450d00200441246c21002003210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b2005450d00200541246c450d002003102e0b200241f0016a200241f0006a41e00010e9081a0c010b200241b8066a280200210820022802b4062109200241f0006a200241e0026a41e00010e9081a200241f0016a200241f0006a41e00010e9081a200241b8056a200241f0016a41e00010e9081a0240024020022802102802040d00200241b0066a200241b8056a41e00010e9081a0c010b02402004450d00200441246c21002003210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b02402005450d00200541246c450d002003102e0b02402008450d00200841c8036c210020072103034002402003220141e8006a2903004202510d0020012d00004102470d00200141086a280200450d00200141046a280200102e0b200141c8036a210320014198016a109601200041b87c6a22000d000b0b410021032009450d00200941c8036c450d002007102e0b2003450d00200241106a200241b0066a41e00010e9081a200241fc006a2004360200200241f0006a41086a20053602002002200336027420022006360270200241f0006a41106a200241106a41e00010e9082101200241e8016a2008360200200241e4016a2009360200200220073602e001200241f0006a10c4070240024002400240024002402006450d00200241b8056a2006417f6a108c02200241b0066a20022802b805220320022802c005108d0220022d00b0062100200241e0026a41186a2206200241c9066a290000370300200241e0026a41106a200241c1066a290000370300200241e0026a41086a200241b9066a290000370300200220022900b1063703e0020240024020004101460d00200241f0016a41186a420037030020024180026a4200370300200241f8016a4200370300200242003703f0010c010b200241f0016a41186a2006290300370300200241f0016a41106a200241e0026a41106a290300370300200241f0016a41086a200241e0026a41086a290300370300200220022903e0023703f0010b024020022802bc05450d002003102e0b200241f0016a2001412010ec080d0010c507200241f0016a200241f0006a41f00010e9081a2007200841c8036c6a210320022802f001210602400240024020080d00200721000c010b200241b0066a41f0006a21002007210102400340200241b8056a200141e80010e9081a200141e8006a290300210a200241e0026a200141f0006a41d80210e9081a200a4203510d01200241b0066a200241b8056a41e80010e9081a2002200a370398072000200241e0026a41d80210e9081a200241a0066a200241b0066a10c60720022d00a0060d05200141c8036a22012003470d000c030b0b200141c8036a21000b20032000460d002007200841c8036c6a210303402000220141c8036a21000240200141e8006a2903004202510d0020012d00004102470d00200141086a280200450d00200141046a280200102e0b20014198016a108b0220032000470d000b0b02402009450d00200941c8036c450d002007102e0b200241fcc6cb004110108e02200228020421080240200228020022094101470d0041fcc6cb00411010ff010b200241e0026a41186a22014200370300200241e0026a41106a22004200370300200241e0026a41086a22034200370300200242003703e002200241b0066a41d9fcc60041061081022003200241b0066a41086a2207290000370300200220022900b0063703e002200241b0066a41acf2cb00410e10810220012007290000370300200020022900b00637030020022008410020091b3602b006200241e0026a4120200241b0066a410410b2014101200210eb04200142003703002000420037030020034200370300200242003703e002200241b0066a41d9fcc600410610810220032007290000370300200220022900b0063703e002200241b0066a41d4f2cb00410b10810220012007290000370300200020022900b006370300200241b0066a200241e0026a10f20420022903b006210a200241b0066a41106a290300210b20022903b806210c200241b0066a41186a290300210d200241b0066a10a903024020022903b806427f427f200c4200200a42015122011b220a200b420020011b7c220b200b200a541b220a200d420020011b7c220b200b200a541b580d004200410210f1040b200610d90610c707450d02200241b0066a10c8072002200241f0016a410c6a28020022083602a0062002200241b0066a410c6a28020022013602b80520082001470d032008450d0520022802b406210920022802f401210641002103034002400240200620036a22012d00002207200920036a22002d0000470d0002400240024002400240024020070e06000304050102000b200141016a200041016a412010ec080d050c060b200141046a2802002205200041046a280200470d042005450d05200141086a280200200041086a280200470d042001410c6a2802002000410c6a280200470d040c050b2001410c6a28020022052000410c6a280200470d03200141046a280200200041046a280200200510ec080d030c040b200141016a280000200041016a280000470d02200141106a2802002205200041106a280200470d02200141086a280200200041086a280200200510ec080d020c030b200141016a280000200041016a280000470d01200141106a2802002205200041106a280200470d01200141086a280200200041086a280200200510ec080d010c020b200141016a280000200041016a280000470d00200141106a2802002205200041106a280200470d00200141086a280200200041086a280200200510ec08450d010b418ba4cc00411410ef02200241e0026a200110ef0420022802e002220720022802e80210c907024020022802e402450d002007102e0b200241e0026a200010ef0420022802e002220720022802e80210c907024020022802e402450d002007102e0b20012d000020002d00002207470d060b024002400240024002400240024020070e06050203040001050b200141046a2802002207200041046a280200470d0b2007450d05200141086a280200200041086a280200470d0b2001410c6a2802002000410c6a280200470d0b0c050b2001410c6a28020022072000410c6a280200470d0a200141046a280200200041046a280200200710ec080d0a0c040b200141016a280000200041016a280000470d09200141106a2802002207200041106a280200470d09200141086a280200200041086a280200200710ec080d090c030b200141016a280000200041016a280000470d08200141106a2802002207200041106a280200470d08200141086a280200200041086a280200200710ec080d080c020b200141016a280000200041016a280000470d07200141106a2802002207200041106a280200470d07200141086a280200200041086a280200200710ec08450d010c070b200141016a200041016a412010ec080d060b200341246a21032008417f6a22080d000c060b0b418aa1cc00411c41a8a1cc001039000b200241086a20022f00a10620022d00a3064110747210fb05200220022903083703f809200241c4066a4101360200200242013702b406200241c4e2cc003602b006200241043602840a2002200241800a6a3602c0062002200241f8096a3602800a200241b0066a41b8a1cc001044000b41c8a1cc00411e41e8a1cc001039000b200241f4026a4100360200200241f0026a41d4e2cc00360200200242013702e402200241f8a1cc003602e002200241a0066a200241b8056a200241e0026a109207000b4190a2cc00412741b8a2cc001039000b0240200241f0016a41306a2201200241b0066a41306a2200412010ec08450d0041dee8cc00410e10ef022001412010c9072000412010c9070b024020012000412010ec08450d0041c8a2cc00412841f0a2cc001039000b0240200241f0016a41d0006a200241b0066a41d0006a412010ec080d00024020022802bc062200450d0020022802b4062101200041246c210003400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b0240200241b8066a2802002201450d00200141246c450d0020022802b406102e0b024020022802fc012200450d0020022802f4012101200041246c210003400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b0240200241f8016a2802002201450d00200141246c450d0020022802f401102e0b200241900a6a240042010f0b4180a3cc00412441a4a3cc001039000b200241fc006a410f360200200241f4026a4102360200200242023702e402200241a0a7c9003602e00220024104360274200241e4a7c9003602702002200241f0006a3602f0022002200241880a6a360278200241e0026a41b0a7c9001044000b99cc010a0b7f027e047f017e017f097e037f027e087f047e230041f0096b2201240020014100360298042001420437039004024002400240024002400240024002400240024002402000410c6a28020041246c2202450d0020002802042103410421044104210541002106410021070340024020032d00004101470d00200341106a2802002208417f4c0d0c200341086a2802002109200341016a280000210a0240024020080d004101210b0c010b2008102c220b450d0c0b200b2009200810e90821092001200a3602a00520014190096a41086a220b200141b0086a41086a2902003703002001200a3602c004200120012800a3053600c304200120012902b00837039009024020072006470d0020062006470d00200641016a220a2006490d0d20064101742204200a2004200a4b1b220a4104200a41044b1bad42247e220c422088a745410274210a200ca721040240024020060d0020014100360280060c010b200141043602880620012005360280062001200641246c360284060b200141b8056a2004200a20014180066a107d20012802c005210620012802b8054101460d04200120012802bc052204360290042001200641246e2206360294040b2004200741246c6a220741013a000020012802c004210a20012800c3042105200720083602102007200836020c20072009360208200741046a20053600002007200a36000120072001290390093702142007411c6a200b290300370200200120012802980441016a220736029804200421050b200341246a21032002415c6a22020d000b0b200141d8046a22034200370300200141c0046a41106a22064200370300200141c0046a41086a22074200370300200142003703c004200141e0046a41d9fcc60041061081022007200141e0046a41086a290300370300200120012903e0043703c004200141f0046a41ccf6cb0041121081022003200141f0046a41086a290300370300200620012903f004370300200141203602a4052001200141c0046a3602a005200141b0086a200141c0046a412010ed0220012802b00822070d01410221080c020b20060d070c080b20012802b40821042001200141b0086a41086a2802003602bc05200120073602b80520014188046a200141b8056a10ab01200128028c04210a024002402001280288040d0020014180046a200141b8056a10ab012001280280040d0020012802bc0522082001280284042203490d002003417f4c0d090240024020030d00410121020c010b200310322202450d0920012802bc0521080b024020082003490d00200220012802b805200310e9081a20012802bc0522082003490d042001200820036b3602bc05200120012802b80520036a3602b805410121080c020b2002102e0b200141003602980920014201370390092001410a360294052001200141a0056a36029005200120014190096a3602f00420014194066a41013602002001420137028406200141909dc50036028006200120014190056a36029006200141f0046a419cebc00020014180066a103d1a20012802900920012802980910ef020240200128029409450d00200128029009102e0b410221080b2004450d002007102e0b024020084102460d00410121070240200a411e490d0041002107024020034108470d00200229000042f0deb1db968cd9b7f4005121070b200741017321070b02402003450d002002102e0b20070d004200210d20014190096a210e0c050b2001418c066a41002903b8f8463702002001411e36028006200141002903b0f84637028406200141c0046a41186a22074200370300200141d0046a22084200370300200141c0046a41086a22034200370300200142003703c004200141e0046a41d9fcc60041061081022003200141e0046a41086a2202290300370300200120012903e0043703c004200141f0046a41ccf6cb004112108102200641086a220a200141f0046a41086a2204290300370000200620012903f00437000020014100360298092001420137039009411e20014190096a107620014180066a41047220014190096a10e805200141c0046a4120200128029009220920012802980910b2010240200128029409450d002009102e0b200742003703002008420037030020034200370300200142003703c004200141e0046a41d9fcc600410610810220032002290300370300200120012903e0043703c004200141f0046a41c0f7cb004118108102200a2004290300370000200620012903f0043700000240200141c0046a108603220341ff01714102460d002003410171450d004200210c20014190056a210f0c040b200141c0046a41186a4200370300200141c0046a41106a4200370300200141c0046a41086a22034200370300200142003703c004200141e0046a41d9fcc60041061081022003200141e0046a41086a290300370300200120012903e0043703c004200141f0046a41c0f7cb004118108102200641086a200141f0046a41086a290300370000200620012903f004370000200141013a009005200141c0046a412020014190056a410110b201200141e0046a41d9fcc6004106108102200141f0046a41dcf1cb0041071081024120102c2203450d05200142203702bc05200120033602b805200141b8056a200141e0046a41101074200141b8056a200141f0046a4110107420012802c0052208417f4c0d0620012802b805210a0240024020080d00410121030c010b2008102c2203450d060b20014180066a2003200a200810e9082008108b052008ad220c422086200c84210c2001280280062207450d02200141b8066a210e200141a8066a211020014198066a2111034020032102200c211220072103024002402008200129028406220c422088a722074b0d00200a2003200810ec08450d010b200ca7450d032003102e0c030b02402012a7450d002002102e0b200120073602c404200120033602c004200141b0086a2003200710ed020240024020012802b0082202450d0020012802b408210402400240024020012802b80822094104490d002009417c71220b4104460d00200b4108460d00200941746a4110490d00200941646a4110490d00200941546a4110490d00200941446a410f4b0d010b200141003602980920014201370390092001410a360294052001200141c0046a36029005200120014190096a3602a00520014101360294062001420137028406200141909dc50036028006200120014190056a36029006200141a0056a419cebc00020014180066a103d1a20012802900920012802980910ef020240200128029409450d00200128029009102e0b410021090c010b2002280000210f2002280004211320022800082105200241146a2900002114200229000c2115200241c4006a2900002116200241346a2900002117200241246a2900002118200229003c2119200229002c211a200229001c211b410121090b02402004450d002002102e0b2009450d00200820074b0d01200141d4e2cc00200320086a41106a200720086b22024110491b3602900920014100200241706a2204200420024b1b3602940920014180066a20014190096a10930120012d0080064101460d00200e20163703002010201737030020112018370300200120193703b0062001201a3703a0062001201b370390062001201537038006200141003602cc06200120053602c806200120133602c4062001200f3602c00620012014370388062003200720014180066a10c9050b20014180066a20032007108b0520012802800622070d010c040b0b2008200741c4dbc8001056000b2003200841b8b2c0001056000b2012210c200221030b0240200ca7450d002003102e0b024020012802bc05450d00200a102e0b20014180066a10a903200129038806210c20014190056a210f0b200141b0086a41d9fcc600410610810220014190096a419f8dcc00411410810220014180066a41086a200141b0086a41086a220329020037030020014180066a41106a20012903900937030020014180066a41186a20014190096a41086a290300370300200120012902b0083703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00900520014190096a200f41011074200141003a00900520014190096a200f4101107420014180066a4120200128029009220720012802980910b2010240200128029409450d002007102e0b200141c0046a41186a4200370300200141c0046a41106a4200370300200141c0046a41086a22074200370300200142003703c004200141b8056a41a8f8c60041041081022007200141b8056a41086a290000370300200120012900b8053703c004200141b0086a41d48bc500410f108102200641086a2003290000370000200620012900b008370000200141203602a4052001200141c0046a3602a005200141b0086a200141c0046a412010ed0241042103024020012802b0082207450d0020012802b40821082001200141b8086a28020022033602bc05200120073602b805200141003a009005024002402003450d0020012003417f6a3602bc052001200741016a3602b8054103210302400240024020072d00000e020100030b20014180066a200141b8056a10950220012d00900622034103460d01200141e0046a41086a20014180066a41086a290300221237030020014190096a41086a22022012370300200120012800910636028005200120014194066a28000036008305200120012903800637039009200120012802800536029005200120012800830536009305200141f0046a41086a200229030037030020012001290390093703f00420012001280093053600b30520012001280290053602b0050b20014180066a41086a200141f0046a41086a290300370300200120012800b30536008b05200120012802b00536028805200120012903f004370380062001200128028805360290052001200128008b05360093050c020b200120012903e004370390090b200141003602980920014201370390092001410a360294052001200141a0056a36029005200120014190096a3602f00420014194066a41013602002001420137028406200141909dc50036028006200120014190056a36029006200141f0046a419cebc00020014180066a103d1a20012802900920012802980910ef020240200128029409450d00200128029009102e0b410421030b2008450d002007102e0b200141e0046a41086a220820014180066a41086a29030037030020012001290380063703e00420012001280290053602800520012001280093053600830541032107024020034104460d0020014190096a41086a2008290300370300200120012903e0043703900920012001280280053602b00820012001280083053600b308200321070b42c0b6fc9a012117024020074103460d0020014194066a20012800b30836000020014180066a41086a20014190096a41086a290300370300200120012903900937038006200120073a009006200120012802b0083600910620014180066a10ed0442c0f8d3ca0121170b200141d8046a22074200370300200141c0046a41106a22084200370300200141c0046a41086a22034200370300200142003703c004200141e0046a41a8f8c60041041081022003200141e0046a41086a2202290300370300200120012903e0043703c004200141f0046a41d48bc500410f108102200641086a220a200141f0046a41086a2204290300370000200620012903f004370000200141c0046a412010ff01200742003703002008420037030020034200370300200142003703c004200141e0046a41a8f8c600410410810220032002290300370300200120012903e0043703c004200141f0046a418c8bc500410b108102200a2004290300370000200620012903f004370000200141c0046a42014204410210c205200742003703002008420037030020034200370300200142003703c004200141e0046a41a8f8c600410410810220032002290300370300200120012903e0043703c004200141f0046a41d48bc500410f108102200a2004290300370000200620012903f004370000200141c0046a42014204410210c205200141e0046a418ef9c0004110108102200141f0046a41fbafc90041061081024120102c2203450d012001422037029409200120033602900920014190096a200141e0046a4110107420014190096a200141f0046a411010742001280298092208417f4c0d0220012802900921054101210202402008450d002008102c2202450d020b427f200c4280c2d72f7c22122012200c541b211920022005200810e9081a20014198066a21132008210a20082107034020014180066a20022007108b05024002400240024002402001280280062203450d002001280284062104024020012802880622072008490d0020052003200810ec08450d020b2004450d002003102e0b0240200a450d002002102e0b0240200128029409450d002005102e0b20014180066a10df04200129038806210c200141c0046a41a5fec600411a108102200141b8056a419f8dcc00411410810220014180066a41086a2207200141c0046a41086a220829000037030020014180066a41106a220220012900b80537030020014180066a41186a220a200141b8056a41086a2204290000370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009220920012802980910b201200141b0086a41106a21030240200128029409450d002009102e0b200141c0046a41f4d8c7004104108102200141b8056a419f8dcc004114108102200320012900b805370000200341086a20042900003700002007200829000037030020022003290300370300200a200141b0086a41186a290300370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009220720012802980910b2010240200128029409450d002007102e0b200141c0046a419dfec6004108108102200141b0086a419f8dcc00411410810220014190096a41086a2207200141c0046a41086a29000037030020014190096a41106a220820012900b008370300200141a8096a2202200141b0086a41086a220a290000370300200120012900c0043703900920014100360288062001420137038006200141033b01b00820014180066a200141b0086a41021074200141003a00b00820014180066a200141b0086a41011074200141003a00b00820014180066a200141b0086a4101107420014190096a4120200128028006220420012802880610b2010240200128028406450d002004102e0b200141b8056a4195fec6004108108102200141b0086a419f8dcc0041141081022007200141b8056a41086a290000370300200820012900b0083703002002200a290000370300200120012900b8053703900920014100360288062001420137038006200141033b01b00820014180066a200141b0086a41021074200141003a00b00820014180066a200141b0086a41011074200141003a00b00820014180066a200141b0086a4101107420014190096a4120200128028006220720012802880610b2010240200128028406450d002007102e0b200141e0046a4190fec6004105108102200141f0046a419f8dcc004114108102200141c0046a41086a2207200141e0046a41086a290300370300200141c0046a41106a20012903f004370300200141c0046a41186a200141f0046a41086a290300370300200120012903e0043703c00420014100360288062001420137038006200141033b01900920014180066a20014190096a41021074200141003a00900920014180066a20014190096a41011074200141003a00900920014180066a20014190096a41011074200141c0046a4120200128028006220820012802880610b2010240200128028406450d002008102e0b200141c0046a4188fec6004108108102200141b8056a419f8dcc004114108102200141b0086a41086a2007290000370300200141b0086a41106a20012900b805370300200141b0086a41186a200141b8056a41086a290000370300200120012900c0043703b00820014100360288062001420137038006200141033b01900920014180066a20014190096a41021074200141003a00900920014180066a20014190096a41011074200141003a00900920014180066a20014190096a41011074200141b0086a4120200128028006220720012802880610b2010240200128028406450d002007102e0b200141c0046a4181fec6004107108102200141b0086a419f8dcc00411410810220014180066a41086a2207200141c0046a41086a29000037030020014180066a41106a220820012900b00837030020014180066a41186a2202200141b0086a41086a220a290000370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00900520014190096a200f41011074200141003a00900520014190096a200f4101107420014180066a4120200128029009220420012802980910b2010240200128029409450d002004102e0b200141b8056a41bcdbc8004107108102200141b0086a419f8dcc004114108102200620012900b008370000200641086a200a2900003700002007200141b8056a41086a2900003703002008200141c0046a41106a2903003703002002200141c0046a41186a290300370300200120012900b8053703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009220720012802980910b2010240200128029409450d002007102e0b20014180066a41106a2108200141e0046a41b6d1cc004106108102200141f0046a419f8dcc004114108102200320012903f004370000200341086a200141f0046a41086a29030037000020014180066a41086a200141e0046a41086a29030037030020014180066a41106a2207200141b0086a41106a29030037030020014180066a41186a220a200141b0086a41186a290300370300200120012903e0043703800620014100360298092001420137039009200141003b01b00820014190096a200141b0086a41021074200141083a00b00820014190096a200141b0086a410110742001411e3a00b00820014190096a200141b0086a4101107420014180066a4120200128029009220220012802980910b2010240200128029409450d002002102e0b20014180066a41106a2102200141c0046a41bad7c7004108108102200141b8056a419f8dcc004114108102200820012900b805370000200841086a200141b8056a41086a29000037000020014190096a41086a200141c0046a41086a29000037030020014190096a41106a200729030037030020014190096a41186a200a290300370300200120012900c0043703900920014100360288062001420137038006200141033b01b00820014180066a200141b0086a41021074200141003a00b00820014180066a200141b0086a41011074200141003a00b00820014180066a200141b0086a4101107420014190096a4120200128028006220720012802880610b2010240200128028406450d002007102e0b20014190096a41106a2107200141b8056a41eefdc6004113108102200141b0086a419f8dcc004114108102200220012900b008370000200241086a200141b0086a41086a2202290000370000200141c0046a41086a200141b8056a41086a290000370300200141c0046a41106a20014180066a41106a290300370300200141c0046a41186a20014180066a41186a290300370300200120012900b8053703c00420014100360288062001420137038006200141033b01900920014180066a20014190096a41021074200141003a00900520014180066a200f41011074200141003a00900520014180066a200f41011074200141c0046a4120200128028006220a20012802880610b2010240200128028406450d00200a102e0b200141e0046a41ddfdc6004111108102200141f0046a419f8dcc004114108102200720012903f004370000200741086a200141f0046a41086a2903003700002002200141e0046a41086a290300370300200141b0086a41106a20014190096a41106a290300370300200141b0086a41186a20014190096a41186a290300370300200120012903e0043703b00820014100360288062001420137038006200141033b01900920014180066a20014190096a41021074200141003a00900920014180066a20014190096a41011074200141003a00900920014180066a20014190096a41011074200141b0086a4120200128028006220220012802880610b2010240200128028406450d002002102e0b200141c0046a41cbfdc6004112108102200141b8056a419f8dcc004114108102200320012900b805370000200341086a2202200141b8056a41086a220a29000037000020014180066a41086a2204200141c0046a41086a220929000037030020014180066a41106a220b200141b0086a41106a220529030037030020014180066a41186a2213200141b0086a41186a220e290300370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009221020012802980910b2010240200128029409450d002010102e0b200141c0046a41c4fdc6004107108102200141b8056a419f8dcc004114108102200320012900b8053700002002200a29000037000020042009290000370300200b20052903003703002013200e290300370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009220220012802980910b2010240200128029409450d002002102e0b200141e0046a41de80ca004109108102200141f0046a419f8dcc004114108102200820012903f004370000200841086a200141f0046a41086a29030037000020014190096a41086a200141e0046a41086a29030037030020014190096a41106a220220014180066a41106a29030037030020014190096a41186a220a20014180066a41186a290300370300200120012903e0043703900920014100360288062001420137038006200141033b01b00820014180066a200141b0086a41021074200141003a00b00820014180066a200141b0086a41011074200141003a00b00820014180066a200141b0086a4101107420014190096a4120200128028006220420012802880610b2010240200128028406450d002004102e0b200141c0046a41b2fdc6004112108102200141b8056a419f8dcc004114108102200720012900b805370000200741086a200141b8056a41086a290000370000200141b0086a41086a200141c0046a41086a290000370300200141b0086a41106a2002290300370300200141b0086a41186a200a290300370300200120012900c0043703b00820014100360288062001420137038006200141033b01900920014180066a20014190096a41021074200141003a00900920014180066a20014190096a41011074200141003a00900920014180066a20014190096a41011074200141b0086a4120200128028006220220012802880610b2010240200128028406450d002002102e0b200141e0046a41bed8c8004108108102200141f0046a419f8dcc004114108102200320012903f004370000200341086a2202200141f0046a41086a220a29030037000020014180066a41086a2204200141e0046a41086a220929030037030020014180066a41106a220b200141b0086a41106a220529030037030020014180066a41186a2213200141b0086a41186a220e290300370300200120012903e0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009221020012802980910b2010240200128029409450d002010102e0b200141e0046a41abfdc6004107108102200141f0046a419f8dcc004114108102200320012903f0043700002002200a29030037000020042009290300370300200b20052903003703002013200e290300370300200120012903e0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009220220012802980910b2010240200128029409450d002002102e0b200141c0046a41a081ca004107108102200141b8056a419f8dcc004114108102200820012900b805370000200841086a200141b8056a41086a29000037000020014190096a41086a200141c0046a41086a29000037030020014190096a41106a220820014180066a41106a29030037030020014190096a41186a220220014180066a41186a290300370300200120012900c0043703900920014100360288062001420137038006200141033b01b00820014180066a200141b0086a41021074200141003a00b00820014180066a200141b0086a41011074200141003a00b00820014180066a200141b0086a4101107420014190096a4120200128028006220a20012802880610b2010240200128028406450d00200a102e0b200141e0046a41a1fdc600410a108102200141f0046a419f8dcc004114108102200720012903f004370000200741086a200141f0046a41086a290300370000200141b0086a41086a200141e0046a41086a290300370300200141b0086a41106a2008290300370300200141b0086a41186a2002290300370300200120012903e0043703b00820014100360288062001420137038006200141033b01900920014180066a20014190096a41021074200141003a00900920014180066a20014190096a41011074200141003a00900920014180066a20014190096a41011074200141b0086a4120200128028006220820012802880610b2010240200128028406450d002008102e0b200141c0046a4199fdc6004108108102200141b8056a419f8dcc004114108102200320012900b805370000200341086a200141b8056a41086a29000037000020014180066a41086a200141c0046a41086a29000037030020014180066a41106a200141b0086a41106a29030037030020014180066a41186a200141b0086a41186a290300370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009220820012802980910b2010240200128029409450d002008102e0b20014190096a41186a420037030020014190096a41106a420037030020014190096a41086a220842003703002001420037039009200141e0046a4192fdc60041071081022008200141e0046a41086a290300370300200120012903e00437039009200141f0046a419cfdca00410e108102200741086a200141f0046a41086a290300370000200720012903f004370000200141203602c404200120014190096a3602c004200141b8056a20014190096a412010ed0220012802b80522080d01410621070c020b0240200a450d002002102e0b20014180066a2003200710e90220012802a0062209450d022013290300210c20014180066a41086a29030021152001290390062112200129038006211420012903a806211b20012802a406210b20014100200720086b220241786a220a200a20024b1b3602b408200141d4e2cc00200320086a41086a20024108491b3602b00820014180066a200141b0086a109301024020012d0080064101470d00200321022004210a200b41ffffff3f71450d042009102e0c030b420021184280e8eda1ba01211a024020124280cab5ee0185200c84500d0020124280e8eda1ba0185200c84500d002012211a200c21180b201320183703002001201a3703900620012014370380062001201b3703a806200120093602a00620012015370388062001200b3602a4062003200720014180066a10b905200b41ffffff3f71450d022009102e0c020b200141c0056a280200210220012802bc05210a41002107200141003a00a005024002402002450d000240024002400240024020082d00000e06060001020304050b410121070c050b410221070c040b410321070c030b410421070c020b410521070c010b200141003602b808200142013703b0082001410a360294052001200141c0046a360290052001200141b0086a3602a00520014194066a41013602002001420137028406200141909dc50036028006200120014190056a36029006200141a0056a419cebc00020014180066a103d1a20012802b00820012802b80810ef02024020012802b408450d0020012802b008102e0b410621070b200a450d002008102e0b42c0acb7a20b2112024020074104470d00200141c8086a22084200370300200141c0086a22024200370300200141b0086a41086a22074200370300200142003703b008200141c0046a4192fdc60041071081022007200141c0046a41086a220a290000370300200120012900c0043703b008200141b8056a41dd8cc5004112108102200341086a2204200141b8056a41086a2209290000370000200320012900b805370000200141b0086a412010ff01200842003703002002420037030020074200370300200142003703b008200141c0046a4192fdc60041071081022007200a290000370300200120012900c0043703b008200141b8056a419c8dc500411210810220042009290000370000200320012900b805370000200141b0086a412010ff01200842003703002002420037030020074200370300200142003703b008200141c0046a4192fdc60041071081022007200a290000370300200120012900c0043703b008200141b8056a41fa8cc500410d10810220042009290000370000200320012900b805370000200141b0086a412010ff01200842003703002002420037030020074200370300200142003703b008200141c0046a4192fdc60041071081022007200a290000370300200120012900c0043703b008200141b8056a41ef8cc500410b10810220042009290000370000200320012900b805370000200141b0086a412010ff01200842003703002002420037030020074200370300200142003703b008200141c0046a4192fdc60041071081022007200a290000370300200120012900c0043703b008200141b8056a41cc8cc500411110810220042009290000370000200320012900b805370000200141b0086a412010ff01200842003703002002420037030020074200370300200142003703b008200141c0046a4192fdc60041071081022007200a290000370300200120012900c0043703b008200141b8056a41878dc500411510810220042009290000370000200320012900b805370000200141b0086a412010ff01200842003703002002420037030020074200370300200142003703b008200141c0046a4192fdc60041071081022007200a290000370300200120012900c0043703b008200141b8056a419cfdca00410e10810220042009290000370000200320012900b80537000020014100360288062001420137038006200141053a00a00520014180066a200141a0056a41011074200141b0086a4120200128028006220720012802880610b2010240200128028406450d002007102e0b42808aa6e40d21120b200141c0046a4192fdc6004107108102200141b8056a419f8dcc004114108102200320012900b805370000200341086a2207200141b8056a41086a220829000037000020014180066a41086a2202200141c0046a41086a220a29000037030020014180066a41106a2204200141b0086a41106a220929030037030020014180066a41186a220b200141b0086a41186a2205290300370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00900520014190096a200f41011074200141003a00900520014190096a200f4101107420014180066a4120200128029009221320012802980910b2010240200128029409450d002013102e0b200141c0046a4190dac800410a108102200141b8056a419f8dcc004114108102200320012900b805370000200720082900003700002002200a29000037030020042009290300370300200b2005290300370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009220720012802980910b2010240200128029409450d002007102e0b200141c0046a4180fdc6004112108102200141b8056a419f8dcc004114108102200320012900b805370000200341086a2207200141b8056a41086a220829000037000020014180066a41086a2202200141c0046a41086a220a29000037030020014180066a41106a2204200141b0086a41106a220929030037030020014180066a41186a220b200141b0086a41186a2205290300370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009221320012802980910b2010240200128029409450d002013102e0b2017200c7c210c200141c0046a41f8fcc6004108108102200141b8056a419f8dcc004114108102200320012900b805370000200720082900003700002002200a29000037030020042009290300370300200b2005290300370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009220720012802980910b2010240200128029409450d002007102e0b200c2017542107200141c0046a41f1fcc6004107108102200141b8056a419f8dcc004114108102200320012900b805370000200341086a2208200141b8056a41086a220229000037000020014180066a41086a220a200141c0046a41086a220429000037030020014180066a41106a2209200141b0086a41106a220b29030037030020014180066a41186a2205200141b0086a41186a2213290300370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009220f20012802980910b2010240200128029409450d00200f102e0b427f200c20071b210c200141c0046a41e8fcc6004109108102200141b8056a419f8dcc004114108102200320012900b80537000020082002290000370000200a20042900003703002009200b29030037030020052013290300370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009220720012802980910b2010240200128029409450d002007102e0b2019200c7c210c200141c0046a41a8f8c6004104108102200141b8056a419f8dcc004114108102200320012900b805370000200341086a2207200141b8056a41086a220829000037000020014180066a41086a2202200141c0046a41086a220a29000037030020014180066a41106a2204200141b0086a41106a220929030037030020014180066a41186a220b200141b0086a41186a2205290300370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009221320012802980910b2010240200128029409450d002013102e0b200c2019542113200141c0046a41dffcc6004109108102200141b8056a419f8dcc004114108102200320012900b805370000200720082900003700002002200a29000037030020042009290300370300200b2005290300370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009220720012802980910b2010240200128029409450d002007102e0b427f200c20131b210c200141c0046a41f4c2cc004118108102200141b8056a419f8dcc004114108102200320012900b805370000200341086a200141b8056a41086a29000037000020014180066a41086a200141c0046a41086a29000037030020014180066a41106a200141b0086a41106a29030037030020014180066a41186a200141b0086a41186a290300370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00a00520014190096a200141a0056a41011074200141003a00a00520014190096a200141a0056a4101107420014180066a4120200128029009220320012802980910b2010240200128029409450d002003102e0b427f200c20127c22122012200c541b210d20014190096a210e0c020b200321022004210a0c000b0b4102200110eb04200141003602800641fcc6cb00411020014180066a410410b201200141c0046a41186a22074200370300200141c0046a41106a22084200370300200141c0046a41086a22034200370300200142003703c004200141e0046a41d9fcc60041061081022003200141e0046a41086a2202290300370300200120012903e0043703c004200141f0046a4180f4cb004106108102200641086a220a200141f0046a41086a2209290300370000200620012903f00437000020012000280200220436028006200141c0046a412020014180066a410410b20120014190046a10ee04200041106a220b10f0042004417f6a200b10a407200742003703002008420037030020034200370300200142003703c004200141e0046a41d9fcc600410610810220032002290300370300200120012903e0043703c004200141f0046a41d4f2cb00410b108102200a2009290300370000200620012903f004370000200141c0046a412010ff01200742003703002008420037030020034200370300200142003703c004200141e0046a41d9fcc600410610810220032002290300370300200120012903e0043703c004200141f0046a41e0f4cb004106108102200a2009290300370000200620012903f004370000200141c0046a412010ff01200742003703002008420037030020034200370300200142003703c004200141e0046a41d9fcc600410610810220032002290300370300200120012903e0043703c004200141f0046a41a4f5cb00410a108102200a2009290300370000200620012903f004370000200141c0046a412010ff01200742003703002008420037030020034200370300200142003703c004200141e0046a41d9fcc600410610810220032002290300370300200120012903e0043703c004200141f0046a41c0f5cb00410b108102200a2009290300370000200620012903f004370000200141c0046a412010890320014190096a41186a220b420037030020014190096a41106a2200420037030020014190096a41086a220542003703002001420037039009200141c0046a4192fdc600410710810220052003290000370300200120012900c00437039009200141b0086a4194adc600410a108102200b200141b0086a41086a2213290000370300200020012900b008370300200141f8036a200e4120108e0220012802fc03210f20012802f8032110200b420037030020004200370300200542003703002001420037039009200141c0046a4192fdc600410710810220052003290000370300200120012900c00437039009200141b0086a4198b7c6004115108102200b2013290000370300200020012900b008370300200141f0036a200e4120108e0220012802f403210b20012802f003210520014180066a200f410020101b109503200141e8036a2001280280062210200128028806108e0220012802ec03211320012802e803210f0240200128028406450d002010102e0b200742003703002008420037030020034200370300200142003703c004200141e0046a41a8f8c600410410810220032002290300370300200120012903e0043703c004200141f0046a41fa8bc500410a108102200a2009290300370000200620012903f004370000200141d8036a200141c0046a108503200141c8036a20012903e003420020012802d8031b420042e012420010e808024002400240024020012903d00350450d0020012903c803210c20014198066a2207420037030020014190066a2209420037030020014180066a41086a220342003703002001420037038006200141b8056a41a8f8c60041041081022003200141b8056a41086a2208290000370300200120012900b80537038006200141b0086a41e38bc500410b1081022007200141b0086a41086a2202290000370300200920012900b008370300200141b8036a20014180066a108503200c20012903c003420020012802b8031b7c2212200c540d012007420037030020094200370300200342003703002001420037038006200141b8056a41a8f8c600410410810220032008290000370300200120012900b80537038006200141b0086a41c98bc500410b108102200941086a2002290000370000200920012900b008370000200141a8036a20014180066a1085034100417f2004417f41004100417f2004427f201242e0127c220c200c2012541b221220012903b003420020012802a8031b7d220ca7417f200c428080808010541b6a220320032004491b200c2012561b220320046b2207200720034b1b22034100410041064100200b410020051b220720134100200f1b6b2208200820074b1b6b2207200741064b1b2207417f6a2208200820074b1b41e0126c6a220720072003491b6a220320032004491b220320046b2207200720034b1b2108200141a0036a10f40442a082c0dd00211c0240024020012d00a0032202417e6a22074102200741ff01714102491b41ff01710e020001050b200320044d0d04200841d8044b0d040c030b200320044d0d03200841d904490d020c030b41e8b2c40041fa0041e4b3c400105d000b41e8b2c40041fa0041f4b3c400105d000b4290cad9c400210c42002112024002400240200241ff01714103460d0020014180066a410141ffff0310ef052001280280064101460d0320014198066a2208290300210c20014190066a220328020021072001418c066a2213280200210a20014180066a41086a2202280200210b20014180066a4101417f10e9052001280280064101460d022008290300211220032802002105201328020021132002280200210f2008420037030020034200370300200242003703002001420037038006200141b0086a4192fdc60041071081022002200141b0086a41086a2210290000370300200120012900b00837038006200141b0086a41b4aac600410e10810220082010290000370300200320012900b00837030020014198036a20014180066a4120108e02200741ffff034b0d01200128029c0341002001280298031b211d200120073602bc05200120053602b80520014198066a2210420037030020014180066a41106a2211420037030020014180066a41086a220842003703002001420037038006200141b0086a41a5fec600411a1081022008200141b0086a41086a2202290000370300200120012900b00837038006200141b0086a41ccc5c8004110108102200341086a221e2002290000370000200320012900b00837000020014100360298092001420137039009200141b8056a20014190096a109102200141b8056a41047220014190096a10910220014180066a4120200128029009221f20012802980910b2010240200128029409450d00201f102e0b2010420037030020114200370300200842003703002001420037038006200141b0086a41a5fec600411a10810220082002290000370300200120012900b00837038006200141b0086a4194c5c800410e108102201e2002290000370000200320012900b0083700002001201d3602900920014180066a412020014190096a410410b201200141a4096a200736020020014190096a41106a200a3602002001200b36029c09200120053602980920012013360294092001200f360290092010420037030020114200370300200842003703002001420037038006200141b0086a41a5fec600411a10810220082002290000370300200120012900b00837038006200141b0086a41c8c4c8004108108102201e2002290000370000200320012900b008370000200141003602b808200142013703b00820014190096a200141b0086a10b6012007200141b0086a107602402007450d0020074105742107200b21030340200141b0086a200341201074200341206a2103200741606a22070d000b0b20014180066a412020012802b008220320012802b80810b201024020012802b408450d002003102e0b02402005450d00200541386c2107200f412c6a210303400240200328020041ffffff3f71450d002003417c6a280200102e0b200341386a2103200741486a22070d000b0b02402013450d00201341386c450d00200f102e0b0240200a41ffffff3f71450d00200b102e0b427f427f200c20127c22122012200c541b220c42c0b6fc9a017c22122012200c541b21124290bad8ce02210c0b4101200410ec04200141d8046a4200370300200141d0046a4200370300200141c0046a41086a22034200370300200142003703c004200141e0046a41a5fec600411a1081022003200141e0046a41086a290300370300200120012903e0043703c004200141f0046a4180c3c8004105108102200641086a200141f0046a41086a290300370000200620012903f00437000020014190036a200141c0046a4120108e0220014180066a41086a20012802940341012001280290031b360200200141053a008406200141173a008006427f200c427f20124280c2d72f7c221520152012541b7c22122012200c541b211c20014180066a10fe010c020b02402005450d00200541386c2107200f412c6a210303400240200328020041ffffff3f71450d002003417c6a280200102e0b200341386a2103200741486a22070d000b0b2013450d00201341386c450d00200f102e0b200a41ffffff3f71450d00200b102e0b42002120420021210240200441808c15700d00200142f0f2bda1a7ee9cb9f9003703800620014190096a20014180066a10cd02200141b0086a20014190096a10c80220014180066a20012802b008220a20012802b80810c9024100210341002107410021084100210202402001290380064201520d0020014190066a28020021072001280288062102200128028c06210820012802940621030b024020012802b408450d00200a102e0b200142002003ad4220862007ad8422122008ad4220862002ad84220c4280c8afa02554ad7d2215200c4280b8d0df5a7c2214200c562015201256200c42ffc7afa025561b22031b220c3703980520014200201420031b22123703900520014180066a41186a200c37030020014180066a41106a201237030020014180066a41086a221341013a00002001410e3a00800620014180066a10fe01200142f0f2bda1a7ee9cb9f90037038006200141b8056a20014180066a10cd0241002110200141003a008005200142003703a805200142003703a00520014190096a41186a2222420037030020014190096a41106a2223420037030020014190096a41086a220a42003703002001420037039009200141c0046a41bad7c7004108108102200a200141c0046a41086a2224290000370300200120012900c00437039009200141b0086a4194ccc2004109108102200041086a2225200141b0086a41086a2226290000370000200020012900b00837000020014180066a200e109b03200129028406220c4200200128028006221d1b221b42ffffffff0f832118200c422088211a201d4104201d1b21110240201b422088a7220b450d0020014180066a41096a2127200141d0096a211f200141b0096a21284100211e200141b8066a21294100211041002107024003400240024002402010450d00201120074102746a210320112007201e6a4102746a21080340200141c0046a2003280200220510d60320014180066a20012802c004220f20012802c80410b805200129038006210c20014190096a201341e00010e9081a410021020240200c4201520d00200141b0086a20014190096a41e00010e9081a410121020b024020012802c404450d00200f102e0b2002450d0320014190096a200141b0086a41e00010e9081a200129039005221520012903900922145420014190056a41086a290300220c200a290300221254200c2012511b450d02200141013a00800520082003280200360200200341046a2103200841046a2108200741016a2207200b490d000c050b0b201120074102746a21030340200141c0046a2003280200220510d60320014180066a20012802c004220220012802c80410b805200129038006210c20014190096a201341e00010e9081a410021080240200c4201520d00200141b0086a20014190096a41e00010e9081a410121080b024020012802c404450d002002102e0b2008450d0220014190096a200141b0086a41e00010e9081a200129039005221520012903900922145a20014190056a41086a290300220c200a29030022125a200c2012511b0d01200341046a2103200141013a008005200741016a2207200b490d000b410021100c040b2001201520147d370390052001200c20127d2015201454ad7d3703980520014180066a200510d603200128028006220320012802880610ff010240200128028406450d002003102e0b20014180036a202820012903a009202229030010fb01200141f0026a201f200129039009200a29030010fd01200141a0056a41086a2203427f2003290300220c200141f0026a41086a2903007c20012903a005221220012903f0027c22152012542203ad7c221220032012200c542012200c511b22031b3703002001427f201520031b3703a005200129039009210c2029200a2903003703002027201f290000370000202741086a201f41086a290000370000202741106a201f41106a290000370000202741186a201f41186a2900003700002001200c3703b006200141023a0088062001410e3a008006200120053602ac0620014180066a10fe010b201e417f6a211e201041016a2110200741016a2207200b490d000b0b024020100d00410021100c010b2011200720106b4102746a201120074102746a200b20076b41027410ea081a0b201a4200201d1b210c200120113602800620012018200b20106bad42208684370284062022420037030020234200370300200a42003703002001420037039009200141c0046a41bad7c7004108108102200a2024290000370300200120012900c00437039009200141b0086a4194ccc200410910810220252026290000370000200020012900b008370000200e20014180066a10c7050240201b42ffffffff0383500d002011102e0b200120014180056a3602b0082001200141a0056a3602b005200120014190056a36028805200141d8046a22004200370300200141d0046a220e4200370300200141c0046a41086a22134200370300200142003703c004200141e0046a41bad7c70041081081022013200141e0046a41086a2210290300370300200120012903e0043703c004200141f0046a41c0dac000410f108102200641086a2211200141f0046a41086a221e290300370000200620012903f004370000200c42f89fb81d7e200c42c0d1e1237e7c2115200c4280c6868f017e211420014180066a200141c0046a109b03200129028406420020012802800622031b221242ffffffff0f83211b2003410420031b2105024002402012422088220ca7220a0d004100210b0c010b4100210f4100210b410021070240034002400240200b450d00200520074102746a210320052007200f6a4102746a21080340200120032802002202360290092001200141b0086a36028c06200120014190096a360288062001200141b0056a36028406200120014188056a36028006200220014180066a10f801450d0220082003280200360200200341046a2103200841046a2108200741016a2207200a490d000c040b0b200520074102746a21030340200120032802002208360290092001200141b0086a36028c06200120014190096a360288062001200141b0056a36028406200120014188056a36028006200820014180066a10f801450d01200341046a2103200741016a2207200a490d000b4100210b0c030b200f417f6a210f200b41016a210b200741016a2207200a490d000b0b0240200b0d004100210b0c010b20052007200b6b4102746a200520074102746a200a20076b41027410ea081a0b201520147c211520012005360280062001201b200a200b6bad422086843702840620004200370300200e420037030020134200370300200142003703c004200141e0046a41bad7c700410810810220132010290300370300200120012903e0043703c004200141f0046a41c0dac000410f1081022011201e290300370000200620012903f004370000200141c0046a20014180066a10c7050240201242ffffffff0383500d002005102e0b201542f8a8df8c017c2115200c42c0b6fc1d7e200c42c0d1e1237e7c200c4280c6868f017e7c2114024020012d0080050d0042002117200141e0026a200129039005221220014190056a41086a2203290300220c42c0843d420010e608200141d0026a2012200c42c0843d420010e708200141c0026a20012903d002200141d0026a41086a2903004290ce00420010e8082003200c200c200141c0026a41086a29030020012903c002221b20012903e002221842e40080a720184290ce007e42c0843d8242a0c21e566aad7c2218201b54ad7c221b2018201256201b200c56201b200c511b22071b221b7d20122012201820071b220c54ad7d37030020012012200c7d3703900502400240200c201b844200520d00200142003703880620014200370380064200211942002112420021180c010b200141d8046a22084200370300200141c0046a41106a22024200370300200141c0046a41086a22034200370300200142003703c004200141e0046a41f8fcc60041081081022003200141e0046a41086a220a290300370300200120012903e0043703c004200141f0046a41a8aac800410d108102200641086a220b200141f0046a41086a2205290300370000200620012903f004370000200141a8026a200141c0046a412010f802200141a8026a41106a290300211220012903b002211820012802a8022107200842003703002002420037030020034200370300200142003703c004200141e0046a41f8fcc60041081081022003200a290300370300200120012903e0043703c004200141f0046a41a8aac800410d108102200b2005290300370000200620012903f004370000200142002012420020071b2212201b7d2018420020071b2218200c54ad7d221a2018200c7d2217201856201a201256201a2012511b22031b3703880620014200201720031b37038006200141c0046a412020014180066a411010b2012001201b370388062001200c370380062012201b20031b21192018200c20031b211720014180066a109803200129038806211820012903800621120b200141a8056a2203427f2003290300221a20197c20012903a005221920177c22162019542203ad7c221720032017201a542017201a511b22031b3703002001427f201620031b3703a005200120123703800620012018370388060240024020122018844200520d00200120014180066a3602900920014190096a10cc020c010b20012018370388062001201237038006200120014180066a3602900920014190096a10cc020b20014198066a201b37030020014190066a200c37030020014188066a41043a00002001410e3a00800620014180066a10fe010b201420157c211520014190096a200141b8056a20012903a005220c200141a0056a41086a2903002212410210fe060240024002402001280290090d0020014180066a41106a20014190096a41106a290300221b20127d2001290398092214200c54ad7d2012201b7d200c201454ad7d2014200c56201b201256201b2012511b22031b37030020012014200c7d200c20147d20031b3703880620012003ad3703800620014180066a41086a210720030d01200120073602b008200141b0086a10ce020c020b419dccc20041ca0010ef0220012012370388062001200c37038006200120014180066a3602900920014190096a10ce020c010b200120073602b008200141b0086a10cc020b201542c0b2cd3b7c2121200129039005210c20014198066a20014190056a41086a29030037030020014190066a200c37030020014180066a41086a41053a00002001410e3a00800620014180066a10fe010b0240200441c09306700d0010f70221200b20014180066a10a903200129038806212a42002112024020044180ce18700d0020014198066a420037030020014190066a420037030020014180066a41086a220342003703002001420037038006200141b8056a41de80ca0041091081022003200141b8056a41086a290000370300200120012900b80537038006200141b0086a41a8fbca004115108102200941086a200141b0086a41086a290000370000200920012900b0083700000240024020014180066a108603220341ff01714102460d0020014180066a412010ff012003410171450d0020014180066a2004109008024020012d0080064106460d0020014190096a20041096080c020b200141063a0090090c010b20014180066a2004109608024020012d0080064106460d0020014190096a20041090080c010b200141063a0090090b0240024020012d0090094106460d0020014180066a41131093080c010b200141063a0080060b202a21120b20014198066a2207420037030020014190066a220842003703004108210a20014180066a41086a220342003703002001420037038006200141b8056a41de80ca0041091081022003200141b8056a41086a2202290000370300200120012900b80537038006200141b0086a41f4f8ca00410d108102200941086a220b200141b0086a41086a2205290000370000200920012900b008370000200141a0026a20014180066a4120108e0220012802a402211320012802a002210f2007420037030020084200370300200342003703002001420037038006200141b8056a41de80ca00410910810220032002290000370300200120012900b80537038006200141b0086a41ccf8ca00410f108102200b2005290000370000200920012900b00837000020014198026a20014180066a4120108e02200128029c0221032001280298022107200120043602f00420012003410020071b22003602a405200120134100200f1b220e3602a0052001200141f0046a3602a80520014180066a200141a0056a200141a0056a200141a0056a41086a1088050240024020012d00e00622034103460d0020014190096a20014180066a41e00010e9081a200120014180066a41e4006a28000036008b05200120012800e1063602880541e800102c220a450d02200a20014190096a41e00010e908220720033a00602007200128028805360061200741e4006a200128008b05360000200141c0046a41086a220b200141a0056a41086a280200360200200120012903a0053703c00420014180066a200141c0046a200141c0046a200b108805024020012d00e00622094103470d0041012102410121070c020b41c9012108200141e1066a220541036a211341012102410121070240034020014190096a20014180066a41e00010e9081a200120132800003600b305200120052800003602b00520014180066a20014190096a41e00010e9081a200120012800b30536009305200120012802b00536029005024020072002470d00200241016a22032002490d062002410174220f2003200f20034b1b22034104200341044b1bad42e8007e220c422088a7454103742103200ca7210f0240024020020d00200141003602b0080c010b200141083602b8082001200a3602b0082001200241e8006c3602b4080b200141b8056a200f2003200141b0086a107d20012802c005210320012802b8054101460d0220012802bc05210a200341e8006e21020b200a20086a2203419f7f6a20014180066a41e00010e9081a2003417f6a20093a00002003200128029005360000200341036a20012800930536000020014180066a200141c0046a200141c0046a200b108805200841e8006a2108200741016a210720012d00e00622094103470d000c030b0b2003450d030c020b41002102410021070b427f41002000200e6b2203200320004b1bad220c428899d2027e200c42c0f0f50b7e7c20127c42d0f4c53f7c220c200c2012541b210c02402007450d00200a280200210920014180066a200a41046a41dc0010e9081a2001200a41e1006a280000360280052001200a41e4006a28000036008305200a41e0006a2d000022054103460d00200a200741e8006c6a210f200141c8096a211320014180066a41086a212220014180066a4101722127200141b0086a41046a210020014180066a41096a211e200141e9096a220e41036a2110200141b8096a2111200a21080340200141b0086a20014180066a41dc0010e9081a20012001280083053600b30520012001280280053602b00520014190096a200041d80010e9081a200e20012802b005360000201020012800b305360000200120053a00e809200141c0046a41186a4200370300200141c0046a41106a4200370300200141c0046a41086a22034200370300200142003703c004200141e0046a41f8fcc60041081081022003200141e0046a41086a290300370300200120012903e0043703c004200141f0046a41a8aac800410d108102200641086a200141f0046a41086a290300370000200620012903f00437000020014180026a200141c0046a412010f80220014180026a41106a29030021152001280280022107200129038802211420014190096a41186a290300211620014190096a41086a290300212b20012903a009212c200129039009212d41002103024020012903b009221a42028820112903002218423e8684220c2018420288221284500d0041002103200c201a85201220188584500d00410021030340200141f0016a201a2018200341046a41fe007110e408200341026a210320012903f001220c200141f0016a41086a290300221284500d01200c201a8520122018858450450d000b0b2015420020071b21172014420020071b2119200841e8006a210b42002114420021120340200141d0016a20124201862014423f88842212420020144201862214420184220c420010e808200141e0016a200c4200200c420010e8080240201220012903d801221584201584420052200141e0016a41086a290300221520012903d001221b201b7c7c221b201554720d0020012903e0012115200141c0016a201a2018200341ff007110e40820122012201520012903c00156201b200141c0016a41086a290300221556201b2015511b22071b21122014200c20071b21140b02402003450d0041002003417e6a2207200720034b1b21030c010b0b41002103024020194202882017423e8684220c2017420288221584500d00200c201985201520178584500d00410021030340200141b0016a20192017200341046a41fe007110e408200341026a210320012903b001220c200141b0016a41086a290300221584500d01200c20198520152017858450450d000b0b420021154200210c034020014190016a200c4201862015423f8884220c420020154201862215420184221b420010e808200141a0016a201b4200201b420010e8080240200c200129039801221884201884420052200141a0016a41086a2903002218200129039001221a201a7c7c221a201854720d0020012903a001211820014180016a20192017200341ff007110e408200c200c201820012903800156201a20014180016a41086a290300221856201a2018511b22071b210c2015201b20071b21150b02402003450d0041002003417e6a2207200720034b1b21030c010b0b02400240024002402014201284500d00024002400240024002400240200541ff01710e03000102000b0340200141306a202c20162014201210e70820152215200c221b844200510d04200141306a41086a290300210c20012903302118200141206a202d202b2015201b10e70820182001290320221754200c200141206a41086a290300221a54200c201a5122031b0d032017201854201a200c5420031b0d06200141106a202c20162014201210e6082001202d202b2015201b10e6082001290300220c200141086a290300221884500d062014212d2012212b200c2114201821122015212c201b211620012903102215200141106a41086a290300220c8450450d000c030b0b034020122112201421142015200c844200510d04200141f0006a202c20162015200c10e708200141e0006a202d202b2014201210e7082001290370221a2001290360221754200141f0006a41086a290300221b200141e0006a41086a290300221854201b20185122031b0d022017201a542018201b5420031b0d05200141d0006a202c20162015200c10e608200141c0006a202d202b2014201210e6082001290340221b200141c0006a41086a290300221884500d052015212d200c212b201b21152018210c2014212c2012211620012903502214200141d0006a41086a29030022128450450d000c020b0b202d202c58202b201658202b2016511b0d030b2001200936028c06200141043a008806200141093a00800620014180066a10fe01024020012802c40922030d0020014180066a41186a201341186a29000037030020014180066a41106a201341106a2900003703002022201341086a2900003703002001201329000037038006200141b8056a20014180066a2009109708410121030c060b200141c0046a201310980820014180066a20012802c004220520012802c804221d10ad05200320046a2107024020012d00800622034103712223410346221f0d00024020030e03000100000b02400240201f0d0020230e03010001010b20012802a806450d0020012802a406102e0b202720012f00a0053b0000202741026a200141a0056a41026a2d00003a000041002103200141003a00800620012007360284062022200141b8056a41c80010e9081a0c040b200120073602b806200141013602b40620034102470d032005201d10ff010c040b41d0d8c8004119418cd5cc001039000b41d0d8c8004119418cd5cc001039000b2001200936028c06200141053a008806200141093a00800620014180066a10fe01410021030c020b200141003602c005200142013703b80520014180066a200141b8056a10ac082005201d20012802b805221f20012802c00510b201024020012802bc05450d00201f102e0b0240200341037122034103460d0020030e03010001010b20012802a806450d0020012802a406102e0b024020012802c404450d002005102e0b2001200936029805200142e4cab5fbb6ccdcb0e30037039005410c102c2203450d032001420c3702f404200120033602f004200141f0046a20014190056a410810742001200936028006200141f0046a20014180066a41041074200141a0056a41086a20012802f804360200200120012903f0043703a005200141003b01b805201e2013290000370000201e41086a201341086a290000370000201e41106a201341106a290000370000201e41186a201341186a290000370000200141173a0088062001410d36028006200120093602ac06200141c0046a200141a0056a41002007410020014100413f200141b8056a20014180066a10c9044101210320012802c0044101470d0041ac80ca00413210ef020b2001200436028406200120033a008106200141013a008006200141b8056a200910890520012802c005210720012802b80521032001410036029809200142013703900920014180066a20014190096a10bc0520032007200128029009220920012802980910b2010240200128029409450d002009102e0b024020012802bc05450d002003102e0b0240200b200f460d002008280268210920014180066a200841ec006a41dc0010e9081a2001200841c9016a280000360280052001200841cc016a28000036008305200841c8016a2103200b210820032d000022054103470d010b0b202a210c0b02402002450d00200241e8006c450d00200a102e0b2004108303211220014180066a10a903427f427f200d427f201c427f2021427f2020427f200c20127c22122012200c541b7c220c200c2020541b7c220c200c2021541b7c220c200c201c541b7c220c200c200d541b220c2001290380067c22122012200c541b410210f1044100410010eb04200128029004210802402001280298042203450d00200341246c21072008210303400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a280200102e0c030b2003410c6a280200450d02200341086a280200102e0c020b2003410c6a280200450d01200341086a280200102e0c010b200341086a280200450d00200341046a280200102e0b200341246a21032007415c6a22070d000b0b02402001280294042203450d00200341246c450d002008102e0b200141f0096a24000f0b1036000b1038000b0400100b0ba33f04067f087e057f027e230041b0126b22022400200220013602900a200241f0006a200241900a6a109005200228027821032002280270210420022802742105200241900a6a200141c80310e9081a20024188076a200241900a6a108a0220022d008807210120022f008907210620022d008b07210720024180046a20024188076a41047241840310e9081a02400240024002400240024002400240024020014101460d0020024180016a20024180046a41046a41800310e9081a200241e8006a41fcc6cb004110108e02200228026c21012002280268210620022003360290072002200536028c072002200436028807200241900a6a2001410020061b10a30720022802900a220120022802980a20024188076a10c502024020022802940a450d002001102e0b02402005450d002004102e0b200241d80d6a20024180016a41d0006a109704200241900a6a20024180016a41800310e9081a02400240024002400240024002400240024020022903b00a22084202520d0020022903d80d20022d00e00d2003109f05220141ff01714102470d08200241a0076a4200370300200241a8076a4200370300200241b0076a4200370300200242003703800f200242003703900720024200370388072002420037039807200242003703b80720022802e00a417e6a0e1a010b0b0b0b0b0b0b02040b0b0b0b0b0b0b050b0b0b0b0b0b0b060b0b200241980e6a41186a200241900a6a41186a290300370300200241980e6a41106a200241900a6a41106a290300370300200241980e6a41086a200241900a6a41086a290300370300200220022903900a3703980e200241900a6a41c0006a2903002109200241900a6a41386a290300210a200241900a6a41c8006a280200210120022903b80a210b200241f0116a41186a22054200370300200241f0116a41106a22044200370300200241f0116a41086a22064200370300200242003703f011200241d0116a41d9fcc60041061081022006200241d0116a41086a2207290000370300200220022900d0113703f011200241d0116a4180f4cb00410610810220052007290000370300200420022900d011370300200241e0006a200241f0116a4120108e02024020084201520d00200b4200510d0a0b200241d0116a200241980e6a10c80220024188076a20022802d011220420022802d81110c90220024188076a41c8006a2802002105200229038807210820024188116a41086a20024188076a41106a29030037030020024188116a41106a20024188076a41186a29030037030020024188116a41186a20024188076a41206a29030037030020024188116a41206a20024188076a41286a29030037030020024188116a41286a220620024188076a41306a29030037030020024188116a41306a220720024188076a41386a29030037030020024188116a41386a20024188076a41c0006a290300370300200220022903900737038811200241a0106a41086a200241dc076a280200360200200220022902d4073703a0100240024020084201510d00200241a8126a4200370300200241f0116a41306a4200370300200241f0116a41286a420037030020024190126a420037030020024188126a420037030020024180126a4200370300200241f0116a41086a420037030041002105200241e0116a41086a4100360200200242003703f011200242003703e0110c010b200241f0116a41386a20024188116a41386a290300370300200241f0116a41306a2007290300370300200241f0116a41286a2006290300370300200241f0116a41206a20024188116a41206a290300370300200241f0116a41186a20024188116a41186a290300370300200241f0116a41106a20024188116a41106a290300370300200241f0116a41086a20024188116a41086a290300370300200241e0116a41086a200241a0106a41086a28020036020020022002290388113703f011200220022903a0103703e0110b024020022802d411450d002004102e0b024020052001470d0020024188076a41386a200241f0116a41386a29030037030020024188076a41306a200241f0116a41306a29030037030020024188076a41286a200241f0116a41286a29030037030020024188076a41206a200241f0116a41206a29030037030020024188076a41186a200241f0116a41186a29030037030020024188076a41106a200241f0116a41106a29030037030020024188076a41086a200241f0116a41086a290300370300200220022903f011370388072002200141016a3602c807200241d4076a200241e0116a41086a280200360200200220022903e0113702cc0720024188116a200241980e6a10c802200228028811220120022802901120024188076a10c9050240200228028c11450d002001102e0b418012210120022d00e00d22054102460d0e20022903d80d220820052003109f05220141ff01714102470d0e20024188076a20032008200a200920022d00e10d410047200510e7044200210c4200210b4200210802402002290388074201520d00427f427f20024198076a2903002208200241a8076a2903007c200229039007220b200241a0076a2903007c220d200b542201ad7c220b2001200b200854200b2008511b22011b2208200241b8076a2903007c427f200d20011b220b200241b0076a2903007c220d200b542201ad7c220b2001200b200854200b2008511b22011b2108427f200d20011b210b0b02400240024002400240200b20022903c007220d84200820024188076a41c0006a290300220e848450450d000c010b20024188076a200241980e6a427f200b200d7c220c200c200b5422012008200e7c2001ad7c220b200854200b2008511b22011b427f200b20011b41014111200a200984501b10fe062002280288074101460d0120024198076a290300210f200229039007210e4201210c0b200241a0106a41086a200241980e6a41086a2903002208370300200241a0106a41106a200241980e6a41106a290300220b370300200241a0106a41186a200241980e6a41186a290300220d37030020024188116a41c0006a200f370300200241c0116a2201200e37030020024188116a41186a200837030020024188116a41206a200b37030020024188116a41286a200d370300200220022903980e22083703a0102002200a3703881120022008370398112002200c3703b811200220093703901120024188076a200241980e6a200241900a6a41d0006a10800320022d0088074101460d01200241b4076a280200210720024188076a41286a2802002104200241ac076a2802002110200241a4076a280200210620024188076a41186a2802002111024020024188076a41206a2802002201450d002001410c6c21052011210103400240200141046a280200450d002001280200102e0b2001410c6a2101200541746a22050d000b0b02402006450d002006410c6c450d002011102e0b02402007450d002007410c6c21052010210103400240200141046a280200450d002001280200102e0b2001410c6a2101200541746a22050d000b0b2004450d022004410c6c450d022010102e0c020b200241a0106a41086a200241f0116a41086a290300370300200241a0106a41106a200241f0116a41106a290300370300200241a0106a41186a200241f0116a41186a290300370300200220022903f0113703a01041800221010c100b20022d00890722054102470d0e0b200241c0106a20024188116a41c80010e9081a200241d00f6a41046a200241c0106a41c80010e9081a200241800f6a200241d00f6a41cc0010e9081a200241b80e6a200241800f6a41046a41c80010e9081a200241f80d6a41086a200241980e6a41086a290300370300200241f80d6a41106a200241980e6a41106a290300370300200241f80d6a41186a200241980e6a41186a290300370300200220022903980e3703f80d20024187046a200241b80e6a41c80010e9081a410121010c0c0b418006418004200520014b1b21010c0d0b4100210141002105200241e80a6a2802004102470d05200241800b6a200241ec0a6a10f20622014180feff077141087621050c010b4100210141002105200241e80a6a2802004102470d04200241800b6a200241ec0a6a10ff0622014180feff077141087621050b200141ff01714102470d030c070b200241d00f6a200241e40a6a109d07024020022d00d00f4101460d00200241fc0f6a2802002107200241f80f6a2802002104200241f40f6a2802002110200241ec0f6a2802002106200241e80f6a28020021110240200241f00f6a2802002201450d002001410c6c21052011210103400240200141046a280200450d002001280200102e0b2001410c6a2101200541746a22050d000b0b02402006450d002006410c6c450d002011102e0b02402007450d002007410c6c21052010210103400240200141046a280200450d002001280200102e0b2001410c6a2101200541746a22050d000b0b2004450d072004410c6c450d072010102e0c070b20022d00d10f22014102460d0620022f01d20f21050c020b200241d00f6a200241e80a6a10df02024020022d00d00f4101460d00200241fc0f6a2802002107200241f80f6a2802002104200241f40f6a2802002110200241ec0f6a2802002106200241e80f6a28020021110240200241f00f6a2802002201450d002001410c6c21052011210103400240200141046a280200450d002001280200102e0b2001410c6a2101200541746a22050d000b0b02402006450d002006410c6c450d002011102e0b02402007450d002007410c6c21052010210103400240200141046a280200450d002001280200102e0b2001410c6a2101200541746a22050d000b0b2004450d062004410c6c450d062010102e0c060b20022d00d10f22014102460d0520022f01d20f21050c010b200241d00f6a200241e80a6a10b80641002101410021050240024020022d00d00f417d6a0e0400010106010b20022d00d20f21050b200541087441077221050b2005410874200141ff017172210120022903b807500d072002200241c0076a3602d00f200241d00f6a10cc020c070b200241800f6a41186a200241d00f6a41186a290300370300200241800f6a41106a200241d00f6a41106a2903003703000c060b2000200620074110747222013b0001200041013a0000200041036a20014110763a00002005450d072004102e0c070b41d0e7cc00411941ece7cc001039000b20024187046a20024188076a41c80010e9081a410021010b200241a0106a41186a2205200241f80d6a41186a290300370300200241a0106a41106a2204200241f80d6a41106a290300370300200241a0106a41086a2206200241f80d6a41086a290300370300200220022903f80d3703a010200241d00f6a20024187046a41c80010e9081a20024180046a200241e00a6a41b00210e9081a20024188076a41186a2207200529030037030020024188076a41106a2205200429030037030020024188076a41086a22102006290300370300200220022903a010370388074102210402402001450d00200241800f6a41186a2007290300370300200241800f6a41106a2005290300370300200241800f6a41086a201029030037030020022002290388073703800f410121040b200241c0106a41086a200241800f6a41086a290300370300200241c0106a41106a200241800f6a41106a290300370300200241c0106a41186a200241800f6a41186a290300370300200220022903800f3703c01002404110102c2205450d00200541f8f7c60036020c2005410136020820054281808080103702004110102c2201450d0020014190f8c60036020c20014101360208200142818080801037020020052005280200417f6a2206360200024020060d002005280208200528020c2802001103000240200528020c280204450d002005280208102e0b200541046a22062006280200417f6a220636020020060d002005102e0b02400240200128020820024180046a200128020c28020c1101000d00200241a8116a41023a0000200241a0116a41003a000020012001280200417f6a22053602002002420037039011420121082002420137038811024020050d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22052005280200417f6a220536020020050d002001102e0b20024180046a10dc020c010b20024188076a20024180046a41b00210e9081a2002418a0f6a200241c8106a290300370100200241920f6a200241d0106a2903003701002002419a0f6a200241d8106a290300370100200241a00f6a200241de106a290100370100200220043a00810f200241003a00800f200220022903c0103701820f200220013602a80f20024188116a20024188076a200241800f6a10dd0220022903881121080b20024198116a2903002109200241a0116a2d00002106200229039011210a20024180046a200241d00f6a41c80010e9081a200241a8116a2d0000210520022d00e00d21010240024002400240024002402008500d00200a4202510d00200141ff01714102470d004102210120054106460d00200241b0116a2802002104200241ac116a280200210120023100aa11210820023100a911210b41e09fc500410d10ef024191eacc00410d10ef020240024002400240024020050e06000102030406000b2001200410ef020c060b41f8e9cc00410d10ef020c050b41eee9cc00410a10ef020c040b200b10cc08200810cc082001450d032001200410ef020c030b41dce9cc00411210ef020c020b20022903d80d21084200210e0240200a4201520d0020082009580d004200200820097d220b200b2008561b210b200241f0116a41186a22124200370300200241f0116a41106a22044200370300200241f0116a41086a22074200370300200242003703f011200241d0116a41d9fcc60041061081022007200241d0116a41086a2210290000370300200220022900d0113703f011200241d0116a41d4f2cb00410b10810220122010290000370300200420022900d01137030020024188076a200241f0116a10f2042002200229039007420020022903880742015122111b3703800f200220024188076a41106a2213290300420020111b3703c010200220024188076a41186a2214290300420020111b3703b80e200241b80e6a211102400240024020014103710e03010002010b200241c0106a21110c010b200241800f6a21110b201142002011290300220c200b7d220b200b200c561b370300201420022903b80e370300201320022903c010370300200220022903800f370390072002420137038807201242003703002004420037030020074200370300200242003703f011200241d0116a41d9fcc600410610810220072010290000370300200220022900d0113703f011200241d0116a41d4f2cb00410b108102200441086a2010290000370000200420022900d011370000200241f0116a20024188076a41086a10f3040b20024180046a41c0006a290300210c200241b8046a290300210b20024180046a41086a290300210d20022903b0042115200229038004210f200241b80e6a41186a20024180046a41286a290300370300200241b80e6a41106a20024180046a41206a290300370300200241b80e6a41086a20024180046a41186a29030037030020022002290390043703b80e20024188076a20032008200920092008561b2008200a4201511b200f200d20022d00e10d410146200641ff017141014672200110e7044200210802402002290388074201520d00427f427f20024188076a41106a290300220820024188076a41206a2903007c200229039007220920024188076a41186a2903007c220a2009542201ad7c22092001200920085420092008511b22011b2208200241b8076a2903007c427f200a20011b220920024188076a41286a2903007c220a2009542201ad7c22092001200920085420092008511b22011b2108427f200a20011b210e0b024020154201520d0020024188076a200241b80e6a4200200b427f200e20022903c0077c22092009200e542201200820024188076a41c0006a2903007c2001ad7c220920085420092008511b22011b22087d220a200a200b56200c427f200920011b7d200b200854ad7d2208200c562008200c511b22011b4200200820011b108b06420020024188076a41086a29030020022802880741014622011b2208200b7d200b20087d2008200b56420020024188076a41106a29030020011b220a200c56200a200c511b22011b2109200a200c7d2008200b54ad7d200c200a7d200b200854ad7d20011b210820010d05200241800f6a41106a200d20082009200f562008200d562008200d511b22011b220a370300200241a00f6a22042009200f200920011b220b7d2215370300200241a80f6a2008200a7d2009200b54ad7d220e370300200242003703980f200242023703800f2002200b3703880f200241c0006a200b420042d000420010e808200241306a200a420042d000420010e808200241d0006a2002290340200241c0006a41086a290300220820022903307c220c42e400420010e708200242dc9e8aae8f85d7c702200241d0006a41086a2903002002290338420052200c2008547222011b2208200a42c2eba3e1f5d1f0fa28200229035020011b220d200b542008200a542008200a511b22011b220c370390072002200d200b20011b220837038807427f200a200c7d200b200854ad7d220a200e7c200920087d220d200b20087d2216542201ad7c220b2001200b200a54200b200a511b22011b2109427f200d20011b210b024002402008200c844200520d00200220024188076a3602c010200241c0106a10cc020c010b200242f0f2bda1a7ee9cb9f9003703c01020024188076a200241c0106a10cd02200241206a20024188076a2008200c10fd01200241d0106a200241206a41086a290300220f200c7d2002290320220d200854ad7d200c200f7d2008200d54ad7d200d200856200f200c56200f200c511b22011b3703002002200d20087d2008200d7d20011b3703c81020022001ad3703c010200241c0106a41086a21030240024020010d00200220033602f011200241f0116a10cc020c010b200220033602f011200241f0116a10ce020b200241a0076a200c37030020024198076a200837030020024190076a41063a00002002410e3a00880720024188076a10fe010b2002200b370388072002200937039007024002402016201584200a200e84844200520d00200220024188076a3602c010200241c0106a10cc020c010b200241c0106a10e20420024188076a10e204200241106a20024188076a200b200910fd0120024180126a200241106a41086a290300220a20097d20022903102208200b54ad7d2009200a7d200b200854ad7d2008200b56200a200956200a2009511b22011b37030020022008200b7d200b20087d20011b3703f81120022001ad3703f011200241f0116a41086a21030240024020010d00200220033602980e200241980e6a10cc020c010b200220033602980e200241980e6a10ce020b200241c0076a2009370300200241b8076a200b37030020024188076a41086a41043a000020024191076a20022903c01037000020024199076a200241c0106a41086a290300370000200241a1076a200241d0106a290300370000200241a9076a200241d8106a290300370000200241033a00880720024188076a10fe010b0240024020022903800f22084202560d002008a70e03010001010b2002200241800f6a41086a3602880720024188076a10cc020b024020022903980f22084202560d002008a70e03010001010b200220043602880720024188076a10cc020b200241ec0d6a41026a2201200241a9116a220441026a2d00003a0000200220042f000022043b01f00d200220043b01ec0d20022902ac11210b20022903d80d2208200229039811220920092008561b2008200229039011220d4201511b210820022903e00d2109200229038811220a4201510d022009210c410021040c030b4185eacc00410c10ef020b418010210120022903b004500d072002200241b8046a3602880720024188076a10cc020c070b200241d00f6a41026a20012d00003a0000200220022f01ec0d3b01d00f410121042008210c200b21080b200241900a6a41086a20043a0000200241990a6a20022f0080043b00002002419c0a6a20053a00002002419d0a6a20022f01d00f3b0000200241900a6a41206a2009370300200241900a6a41186a200c370300200241900a6a41106a2008370300200241b80a6a2002290388073703002002419b0a6a20024180046a41026a2d00003a00002002419f0a6a200241d00f6a41026a2d00003a0000200241c00a6a20024188076a41086a290300370300200241c80a6a20024188076a41106a290300370300200241d00a6a20024188076a41186a290300370300200241d80a6a20024188076a41206a290300370300200241003a00900a200241900a6a10fe01200241086a41fcc6cb004110108e022002200228020c41016a410120022802081b22043602900a41fcc6cb004110200241900a6a410410b2014100200410eb04200241900a6a41026a20012d00003a0000200220022f01ec0d3b01900a02400240200a4201510d00410621010c010b20024188076a41026a2204200241900a6a41026a22032d00003a0000200220022f01900a3b01880741062101200d4202510d00200320042d00003a0000200220022f0188073b01900a200521010b200041003a0000200041046a20013a0000200041056a20022f01900a3b0000200041086a200b370000200041076a200241920a6a2d00003a00000c060b20022009370388072002200837039007200220024188076a3602800f200241800f6a10ce0241800221010c040b1036000b20022f018a074108742104024020022903b811500d00200220013602880720024188076a10cc020b200420057221010b200241800f6a200241d00f6a41cc0010e9081a0b200241e00a6a108b020b200241f00d6a41026a200241f40d6a41026a2d00003a0000200220022f01f40d3b01f00d200041036a20014110763a0000200020013b0001200041013a00000b200241b0126a24000b070010044101460ba922030a7f027e027f230041c0026b22012400200141f0016a41186a22024200370300200141f0016a41106a22034200370300200141f0016a41086a22044200370300200142003703f001200141c8016a41d9fcc60041061081022004200141c8016a41086a2205290000370300200120012900c8013703f001200141c8016a41e8f7cb00410e10810220022005290000370300200320012900c801370300200141f0016a412010ff01200242003703002003420037030020044200370300200142003703f001200141c8016a41d9fcc600410610810220042005290000370300200120012900c8013703f001200141c8016a4188f3cb00411010810220022005290000370300200320012900c801370300200141f0016a412010ff01200242003703002003420037030020044200370300200142003703f001200141c8016a41d9fcc600410610810220042005290000370300200120012900c8013703f001200141c8016a4180f4cb00410610810220022005290000370300200320012900c801370300200141086a200141f0016a4120108e02200128020c210620012802082107200242003703002003420037030020044200370300200142003703f001200141c8016a41d9fcc600410610810220042005290000370300200120012900c8013703f001200141c8016a41a0f4cb00410a10810220022005290000370300200320012900c801370300200141c8016a200141f0016a4120108d0220012d00c80121052002200141e1016a2900003703002003200141d9016a2900003703002004200141d1016a290000370300200120012900c9013703f0010240024020054101460d00200141106a41186a4200370300200141106a41106a4200370300200141106a41086a4200370300200142003703100c010b200141106a41186a2002290300370300200141106a41106a2003290300370300200141106a41086a2004290300370300200120012903f0013703100b20014188026a2205420037030020014180026a22084200370300200141f0016a41086a22024200370300200142003703f001200141c8016a41d9fcc60041061081022002200141c8016a41086a2204290000370300200120012900c8013703f001200141c8016a41b4f4cb004106108102200341086a22092004290000370000200320012900c801370000200141c8016a200141f0016a10a10420012802c801210a20012902cc01210b200542003703002008420037030020024200370300200142003703f001200141c8016a41d9fcc600410610810220022004290000370300200120012900c8013703f001200141c8016a41acf2cb00410e10810220092004290000370000200320012900c8013700002001200141f0016a4120108e0241012103200128020421020240024020012802004101460d00410021030c010b200141f0016a412010ff010b02402002410020031b2209ad420c7e220c422088a70d00200ca72203417f4c0d00024002400240024002400240024020030d004104210d0c010b2003102c220d450d010b0240024002402003410c6e220e20094f0d00200e41017422022009200220094b1b22024104200241044b1bad420c7e220c422088a7454102742102200ca72104024002402003410b4b0d00200141003602c8010c010b200141d0016a41043602002001200d3602c8012001200e410c6c3602cc010b200141f0016a20042002200141c8016a107d200141f8016a2802002103024020012802f0014101460d0020012802f401210d2003410c6e210e0c020b20030d030c080b20090d00410021090c010b41002103200d21020340200141f0016a200310a307200141c8016a20012802f001220520012802f8012208108b030240024020012802c80122040d004200210c410121040c010b2005200810ff0120012902cc01210c0b200341016a2103024020012802f401450d002005102e0b20022004360200200241046a200c3702002002410c6a210220092003470d000b0b200120093602d0012001200e3602cc012001200d3602c801200141306a200141c8016a10cd0802402006410020071b220541e212490d00200141c8016a41002005419f6d6a2203200320054b1b108c0220012802c801220320012802d00110ff0120012802cc01450d002003102e0b20014180016a10ce0820012802880121022001280280012103200141003a00e8012002450d04200120032d00003a00c801200141013a00e80120024101460d03200120032d00013a00c901200141023a00e80120024102460d03200120032d00023a00ca01200141033a00e80120024103460d03200120032d00033a00cb01200141043a00e80120024104460d03200120032d00043a00cc01200141053a00e80120024105460d03200120032d00053a00cd01200141063a00e80120024106460d03200120032d00063a00ce01200141073a00e80120024107460d03200120032d00073a00cf01200141083a00e80120024108460d03200120032d00083a00d001200141093a00e80120024109460d03200120032d00093a00d1012001410a3a00e8012002410a460d03200120032d000a3a00d2012001410b3a00e8012002410b460d03200120032d000b3a00d3012001410c3a00e8012002410c460d03200120032d000c3a00d4012001410d3a00e8012002410d460d03200120032d000d3a00d5012001410e3a00e8012002410e460d03200120032d000e3a00d6012001410f3a00e8012002410f460d03200120032d000f3a00d701200141103a00e80120024110460d03200120032d00103a00d801200141113a00e80120024111460d03200120032d00113a00d901200141123a00e80120024112460d03200120032d00123a00da01200141133a00e80120024113460d03200120032d00133a00db01200141143a00e80120024114460d03200120032d00143a00dc01200141153a00e80120024115460d03200120032d00153a00dd01200141163a00e80120024116460d03200120032d00163a00de01200141173a00e80120024117460d03200120032d00173a00df01200141183a00e80120024118460d03200120032d00183a00e001200141193a00e80120024119460d03200120032d00193a00e1012001411a3a00e8012002411a460d03200120032d001a3a00e2012001411b3a00e8012002411b460d03200120032d001b3a00e3012001411c3a00e8012002411c460d03200120032d001c3a00e4012001411d3a00e8012002411d460d03200120032d001d3a00e5012001411e3a00e8012002411e460d03200120032d001e3a00e6012001411f3a00e8012002411f460d03200141d0006a41106a200141c8016a41106a290300370300200141d0006a41086a200141c8016a41086a290300370300200120032d001f3a00e701200141d0006a41186a200141c8016a41186a290300370300200141203a00e801200120012903c801220c3703f0012001200c3703500240200128028401450d002003102e0b200141003602f801200142013703f0014120102c2203450d00200142203702cc01200120033602c801200141c8016a200141106a41201074200141f0016a20012802c801220320012802d0011074024020012802cc01450d002003102e0b200141f0006a20012802f001220320012802f80110cf08024020012802f401450d002003102e0b200b4200200a1b210c200a4104200a1b21040240024020012802702203450d00200141f8006a28020021022001280274210d200141003a00e8012002450d04200120032d00003a00c801200141013a00e80120024101460d03200120032d00013a00c901200141023a00e80120024102460d03200120032d00023a00ca01200141033a00e80120024103460d03200120032d00033a00cb01200141043a00e80120024104460d03200120032d00043a00cc01200141053a00e80120024105460d03200120032d00053a00cd01200141063a00e80120024106460d03200120032d00063a00ce01200141073a00e80120024107460d03200120032d00073a00cf01200141083a00e80120024108460d03200120032d00083a00d001200141093a00e80120024109460d03200120032d00093a00d1012001410a3a00e8012002410a460d03200120032d000a3a00d2012001410b3a00e8012002410b460d03200120032d000b3a00d3012001410c3a00e8012002410c460d03200120032d000c3a00d4012001410d3a00e8012002410d460d03200120032d000d3a00d5012001410e3a00e8012002410e460d03200120032d000e3a00d6012001410f3a00e8012002410f460d03200120032d000f3a00d701200141103a00e80120024110460d03200120032d00103a00d801200141113a00e80120024111460d03200120032d00113a00d901200141123a00e80120024112460d03200120032d00123a00da01200141133a00e80120024113460d03200120032d00133a00db01200141143a00e80120024114460d03200120032d00143a00dc01200141153a00e80120024115460d03200120032d00153a00dd01200141163a00e80120024116460d03200120032d00163a00de01200141173a00e80120024117460d03200120032d00173a00df01200141183a00e80120024118460d03200120032d00183a00e001200141193a00e80120024119460d03200120032d00193a00e1012001411a3a00e8012002411a460d03200120032d001a3a00e2012001411b3a00e8012002411b460d03200120032d001b3a00e3012001411c3a00e8012002411c460d03200120032d001c3a00e4012001411d3a00e8012002411d460d03200120032d001d3a00e5012001411e3a00e8012002411e460d03200120032d001e3a00e6012001411f3a00e8012002411f460d0320014180016a41106a2202200141c8016a41106a220829030037030020014180016a41086a220e200141c8016a41086a2209290300370300200120032d001f3a00e70120014180016a41186a2206200141c8016a41186a220a290300370300200141203a00e801200120012903c801220b3703f0012001200b370380012009200e29030037030020082002290300370300200a200629030037030020012001290380013703c801200141a4016a41026a220e200141fd006a41026a2d00003a0000200120012f007d3b01a40102400240200c422088a72202200ca7460d00200c210b0c010b200241016a22062002490d0820024101742207200620062007491b22064104200641044b1bad42247e220b422088a7454102742106200ba721070240024020020d00200141003602f0010c010b200141f8016a4104360200200120043602f0012001200241246c3602f4010b200141b0026a20072006200141f0016a107d200141b8026a280200210220012802b0024101460d0220012802b4022104200c42808080807083200241246ead84210b200c422088a721020b2004200241246c6a220241003a0000200220012903c801370001200241096a2009290300370000200241116a2008290300370000200241196a200a290300370000200220012f01a4013b0021200241236a200e2d00003a0000200b4280808080107c210c200d450d002003102e0b200020012903103700102000200536020020002001290350370030200041286a200141106a41186a290300370000200041206a200141106a41106a290300370000200041186a200141106a41086a290300370000200041386a200141d0006a41086a290300370000200041c0006a200141d0006a41106a290300370000200041c8006a200141d0006a41186a290300370000200041086a200c37020020002004360204200041e8006a200141306a41186a290300370000200041e0006a200141306a41106a290300370000200041d8006a200141306a41086a29030037000020002001290330370050200141c0026a24000f0b2002450d050b1036000b200141003a00e8010b41d1a4cc00412c200141c8016a4180a5cc0041a0a5cc00103e000b200141003a00e8010b41d1a4cc00412c200141c8016a4180a5cc004190a5cc00103e000b1038000b0e002001ad4220862000ad8410140bd20501057f230041d0026b22022400200242808080808020370204200220013602142002200041d4e2cc0020011b3602102002200241106a360200200241d8016a2002109902200241e4016a280200210320022802e001210420022802dc01210520022802d8012106200241f8006a200241e8016a41e00010e9081a02402005450d00200241186a200241f8006a41e00010e9081a0240024020022802002802040d00200241f8006a200241186a41e00010e9081a0c010b02402003450d00200341246c21002005210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b02402004450d00200441246c450d002005102e0b410021050b2005450d00200241d8016a410c6a2003360200200241d8016a41086a2004360200200220053602dc01200220063602d801200241e8016a200241f8006a41e00010e9081a200241d8016a10c40702402003450d00200341246c21002005210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b02402004450d00200441246c450d002005102e0b200241d0026a240042010f0b200241246a410f360200200241ec016a4102360200200242023702dc01200241a0a7c9003602d8012002410436021c200241fca7c9003602182002200241186a3602e8012002200241c8026a360220200241d8016a41b0a7c9001044000b840c04017f017e097f017e230041306b220224000240024002400240024020010d0020024100360220200242043703184108102c2201450d0420014110360204200141b1afc8003602002002200141086a36020c200220013602082002410136020420022001360200200241186a200210a9014108102c2201450d042001410e360204200141cdb7c0003602002002200141086a36020c200220013602082002410136020420022001360200200241186a200210a9014108102c2201450d042001410c360204200141dbb7c0003602002002200141086a36020c200220013602082002410136020420022001360200200241186a200210a9014108102c2201450d042001410e360204200141e7b7c0003602002002200141086a36020c200220013602082002410136020420022001360200200241186a200210a9014108102c2201450d042001410a360204200141b4d8c8003602002002200141086a36020c200220013602082002410136020420022001360200200241186a200210a9014108102c2201450d042001410b360204200141d59fc5003602002002200141086a36020c200220013602082002410136020420022001360200200241186a200210a9014108102c2201450d0420014118360204200141e48ac5003602002002200141086a36020c200220013602082002410136020420022001360200200241186a200210a9014108102c2201450d0420014112360204200141c4f9c0003602002002200141086a36020c200220013602082002410136020420022001360200200241186a200210a90120022802202201ad420c7e2203422088a70d032003a72204417f4c0d0320022802182105200228021c21060240024020040d00410421070c010b2004102c2207450d050b02402004410c6e220820014f0d00200841017422092001200920014b1b22094104200941044b1bad420c7e2203422088a74541027421092003a7210a024002402004410b4b0d00200241003602000c010b200241086a41043602002002200736020020022008410c6c3602040b200241186a200a20092002107d200241206a2802002104024020022802184101460d00200228021c21072004410c6e21080c030b2004450d040c050b20010d01410021090c020b200241246a410f360200200241146a410236020020024202370204200241a0a7c9003602002002410436021c20024194a8c9003602182002200241186a3602102002200241286a360220200241b0a7c9001044000b200520014103746a210b200141037441786a41037641016a210c41002109200721012005210403402004280200220a450d01200141086a200441046a280200360200200141046a200a360200200141003602002001410c6a2101200941016a2109200441086a2204200b470d000b200c21090b0240200641ffffffff0171450d002005102e0b2002410036020820024201370300200241edcad18b063602182002200241186a410410742002410c3a00182002200241186a41011074411f2002107641d8fec600411f20021079200241043a00182002200241186a4101107420092002107602402009450d002009410c6c2104200741086a210103402001417c6a28020021092001280200220a2002107620022009200a10742001410c6a2101200441746a22040d000b0b200228020821012002280204210a2002280200210902402008450d002008410c6c450d002007102e0b200141046a2204417f4c0d0002400240024002400240024020040d002002410036020820022004360204200241013602000c010b2004102c220b450d0620024100360208200220043602042002200b360200200141c000490d01200141808001490d022001418080808004490d030b200241033a00182002200241186a41011074200220013602182002200241186a410410740c030b200220014102743a00182002200241186a410110740c020b200220014102744101723b01182002200241186a410210740c010b200220014102744102723602182002200241186a410410740b2002200920011074200235020821032002350200210d0240200a450d002009102e0b200241306a24002003422086200d840f0b1038000b1036000bde0504017f017e017f017e230041f00a6b22022400200242808080808020370204200220013602142002200041d4e2cc0020011b3602102002200241106a360200200241a0076a200210ed01200241b8066a200241a0076a41e80010e9081a2002290388082103200241e0036a200241a0076a41f0006a41d80210e9081a0240024020034203510d00200241186a200241b8066a41e80010e9081a2002200337038001200241186a41f0006a200241e0036a41d80210e90821010240024020022802002802040d00200241e0036a200241186a41e80010e9081a200241a0076a200141d80210e9081a0c010b024020034202510d0020022d001841ff01714102470d002002280220450d00200228021c102e0b200241b0016a108b02420321030b20034203510d00200241b8066a200241e0036a41e80010e9081a200241186a200241a0076a41d80210e9081a200241a0076a200241b8066a41e80010e9081a200220033703880820024190086a200241186a41d80210e9081a200241e0036a200241a0076a10c6074101410220022d00e00322014101461b2200102c2204450d01200241003602a807200220003602a407200220043602a0070240024020014101470d00200241013a0018200241a0076a200241186a41011074200241e0036a410172200241a0076a108e050c010b200241003a0018200241a0076a200241186a41011074024020022d00e40322014106460d00200241013a0018200241a0076a200241186a41011074200120022d00e50320022d00e603200241a0076a109d060c010b200241003a0018200241a0076a200241186a410110740b20023502a807210320023502a0072105200241f00a6a240020052003422086840f0b200241c4066a410f3602002002412c6a41023602002002420237021c200241a0a7c900360218200241043602bc06200241a4a8c9003602b8062002200241b8066a3602282002200241e80a6a3602c006200241186a41b0a7c9001044000b1036000ba30a02067f047e23004180026b220224000240024020010d00200241086a41fcc6cb004110108e02200228020c21030240200228020822044101470d0041fcc6cb00411010ff010b200241c8016a41186a22014200370300200241c8016a41106a22054200370300200241c8016a41086a22064200370300200242003703c801200241106a41d9fcc60041061081022006200241106a41086a2207290000370300200220022900103703c801200241106a41acf2cb00410e108102200120072900003703002005200229001037030020022003410020041b360210200241c8016a4120200241106a410410b2014101200210eb04200142003703002005420037030020064200370300200242003703c801200241106a41d9fcc600410610810220062007290000370300200220022900103703c801200241106a4180f4cb00410610810220012007290000370300200520022900103703002002200241c8016a4120108e022002280204210320022802002104200142003703002005420037030020064200370300200242003703c801200241106a41d9fcc600410610810220062007290000370300200220022900103703c801200241106a41d4f2cb00410b1081022001200729000037030020052002290010370300200241106a200241c8016a10f20420022903102108200241106a41106a29030021092002290318210a200241106a41186a290300210b200241106a10a9032003410020041b210502402002290318427f427f200a4200200842015122011b22082009420020011b7c220920092008541b2208200b420020011b7c220920092008541b580d004200410210f1040b200510d906200241106a10c807200241003602f001200242013703e8014120102c2201450d01200242203702cc01200220013602c801200241c8016a200241206a41201074200241e8016a20022802c801220120022802d0011074024020022802cc01450d002001102e0b200241106a200241e8016a1091024120102c2201450d01200242203702cc01200220013602c801200241c8016a200241c0006a41201074200241e8016a20022802c801220120022802d0011074024020022802cc01450d002001102e0b4120102c2201450d01200242203702cc01200220013602c801200241c8016a200241e0006a41201074200241e8016a20022802c801220120022802d0011074024020022802cc01450d002001102e0b200228021421032002411c6a2802002207200241e8016a10760240200741246c2205450d00200321010340200241c8016a200110ef04200241e8016a20022802c801220620022802d0011074024020022802cc01450d002006102e0b200141246a21012005415c6a22050d000b0b20023502f001210820023502e801210902402007450d00200741246c21052003210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012005415c6a22050d000b0b0240200241186a2802002201450d00200141246c450d002003102e0b20024180026a240020084220862009840f0b200241d4016a410f360200200241246a410236020020024202370214200241a0a7c900360210200241043602cc01200241bca8c9003602c8012002200241c8016a3602202002200241f8016a3602d001200241106a41b0a7c9001044000b1036000bd40704017f017e017f017e230041f0036b220224002002428080808080203702dc022002200136022c2002200041d4e2cc0020011b3602282002200241286a3602d802200241386a200241d8026a10ef01024002400240024020022802384101460d0020024180036a41086a2201200241c4006a2802003602002002200229023c37038003024020022802d8022802040d00200241186a41086a2001280200220136020020022002290380032203370318200241286a41086a200136020020022003370328200241386a200241286a108e0120022802384101460d02200241386a41086a22012903002103200241386a41186a22004200370300200241386a41106a220442003703002001420037030020024200370338200241386a41e8fcc600410910810220024180036a41b08ec9004103108102200020024180036a41086a22012900003703002004200229008003370300200241086a200241386a10850320022802082104200229031021052002410036023820024180036a41a00e4108200241386a107d2001280200210002402002280280034101470d002000450d040c050b20022802840320024180036a41e80010e908220142023703682001410336029801200120022903d802370370200141f8006a200241d8026a41086a29030037030020014180016a200241d8026a41106a29030037030020014188016a200241d8026a41186a29030037030020014190016a200241f8026a290300370300200141a0016a2003200542b8177c42b81720041b220520032005561b370300200141a8016a200241386a41a00210e9081a200241286a10f10141cc03102c2204450d04200242cc03370284032002200436028003410120024180036a1076200220013602d802200241386a200241d8026a10900520024180036a20022802382204200228024010740240200228023c450d002004102e0b20023502800321032002350288032105024020012903684202510d0020012d00004102470d00200141086a280200450d00200141046a280200102e0b20014198016a109601200041c8037021040240200041c803490d0020002004460d002001102e0b200241f0036a240020054220862003840f0b20024180036a10f1010b2002418c036a410f360200200241cc006a41023602002002420237023c200241a0a7c9003602382002410436028403200241d4a8c90036028003200220024180036a3602482002200241e8036a36028803200241386a41b0a7c9001044000b20024188036a200241c4006a2902003703002002200229023c3703800341e4a4c900412820024180036a418ca5c900419ca5c900103e000b1038000b1036000bfe1a070a7f017e057f027e037f027e057f230041c0056b2202240020024280808080802037021c2002200136022c2002200041d4e2cc0020011b3602282002200241286a360218200241c8046a200241186a109902024020022802cc042203450d00200241d4046a280200210420022802d004210520022802c8042101200241e8036a200241d8046a41e00010e9081a200241c8046a200241186a10ec01024020022802c80422060d0002402004450d00200441246c21002003210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b2005450d01200541246c450d012003102e0c010b200241c8046a41086a280200210720022802cc04210820024188036a200241e8036a41e00010e9081a200241a8026a20024188036a41e00010e9081a200241c8046a200241186a10ef01024020022802c8044101470d0002402004450d00200441246c21002003210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b02402005450d00200541246c450d002003102e0b02402007450d00200741c8036c210020062109034002402009220141e8006a2903004202510d0020012d00004102470d00200141086a280200450d00200141046a280200102e0b200141c8036a210920014198016a109601200041b87c6a22000d000b0b2008450d01200841c8036c450d012006102e0c010b200241b8016a41086a2200200241c8046a410c6a280200360200200220022902cc043703b801200241c8016a200241a8026a41e00010e9081a200241306a410c6a2004360200200241306a41086a20053602002002200336023420022001360230200241c0006a200241c8016a41e00010e9081a200241a8016a2007360200200241a4016a2008360200200241b4016a2000280200360200200220063602a001200220022903b8013702ac01200241ac016a210a0240024020022802182802040d00200241e8036a41086a200a41086a2802003602002002200a2902003703e8030c010b02402004450d00200441246c210103400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a280200102e0c030b2003410c6a280200450d02200341086a280200102e0c020b2003410c6a280200450d01200341086a280200102e0c010b200341086a280200450d00200341046a280200102e0b200341246a21032001415c6a22010d000b0b02402005450d00200541246c450d002002280234102e0b02402007450d00200741c8036c210020062109034002402009220141e8006a2903004202510d0020012d00004102470d00200141086a280200450d00200141046a280200102e0b200141c8036a210920014198016a109601200041b87c6a22000d000b0b02402008450d00200841c8036c450d002006102e0b200a10f101410021030b2003450d00200241c8016a41086a200241e8036a41086a220b2802002201360200200220022903e803220c3703c801200241a8026a41086a20013602002002200c3703a802200241013b01f403200242003702ec0302400240024002402007450d002006200741c8036c6a210d200241c8046a410472210e200241c0006a210f200241c8006a2110200621110340201141e8006a2903004202520d0102402011280298014103470d0020112903a0012112200241306a200241a8026a108e010240024020022802304101460d002002290338210c20104200370300200f4200370300200241306a41086a2201420037030020024200370330200241c8046a41e8fcc60041091081022001200241c8046a41086a2200290000370300200220022900c804370330200241c8046a41b08ec9004103108102200f41086a2000290000370000200f20022900c804370000200241086a200241306a10850302402012200c42b0ea017c580d00201342808080807083211341dea5c900ad210c4280808080d00421124100211441012115410021160c020b2012200229031042b8177c42b81720022802081b220c5a0d02200c42808080807083211241002115410121140c010b2002290338220c428080808070832112200228023421164101211541002114201742808080807083200235024084221721130b200220133703d804200220163602cc04200220153602c80420022012200c42ffffffff0f838422183703d004024002400240024020022d00f503450d004131210141b8a6c90021000c010b0240024002402015450d00200241e8036a10f101200242003702ec03200242f4d2b59bc7ae98b8303703300c010b20022802ec03210a200242f4d2b59bc7ae98b830370330200a450d0020022802e80321190c010b41e401102c220a450d0841002119200a4100360200200a41003b018a012002200a3602ec03200241003602e8030b2012422088a7211a200ca7211b02400340200a2f018a01221c410374211d41002101417f2100024003400240201d2001470d00201c21000c020b200241306a200a20016a418c016a410810ec082209450d03200041016a2100200141086a21012009417f4a0d000b0b02402019450d002019417f6a2119200a20004102746a41e4016a280200210a0c010b0b200242f4d2b59bc7ae98b830370340200220003602382002200a360234200241003602302002200241e8036a36023c2002410036029003200242013703880320150d02200241003a00b80120024188036a200241b8016a41011074200220183703b80120024188036a200241b8016a410810740c030b412d210141e9a6c90021000b20022001360234200220003602304183a6c9004122200241306a41a8a6c90041aca5c900103e000b200241013a00b80120024188036a200241b8016a41011074200e20024188036a10e8050b200241306a20024188036a10f001200220153a00f503200241003a00f40302402015450d0020024188036a41086a200241e8036a41086a290300370300200220022903e803370388032016450d04201a450d04201b102e0c040b2014201645720d00201a450d00201b102e0b201141c8036a2211200d470d000b0b20024188036a41086a200b290300370300200220022903e803370388030b200241a8026a10f10102402004450d00200441246c21002003210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b02402005450d00200541246c450d002003102e0b02402007450d00200741c8036c210020062109034002402009220141e8006a2903004202510d0020012d00004102470d00200141086a280200450d00200141046a280200102e0b200141c8036a210920014198016a109601200041b87c6a22000d000b0b02402008450d00200841c8036c450d002006102e0b200241003602d004200242013703c804200220022d0094033a00b801200241c8046a200241b8016a41011074200220022d0095033a00b801200241c8046a200241b8016a41011074200228029003220a200241c8046a10760240200228028c0322000d0041002101410021004100210a0c020b200228028803210920002101034020002f018a01211d2009450d022009417f6a21092000201d4102746a41e4016a280200210020012802e40121010c000b0b1036000b200241c4006a201d360200200241c0006a20003602002002200a3602482002420037033820022001360234200241003602300240200a450d0003402002200a417f6a360248200241306a410020011b221d280200210902400240201d280208220a201d28020422002f018a014f0d00200021010c010b03400240200028020022010d00410021010c020b200941016a210920002f018801210a20012100200a20012f018a014f0d000b0b200a41016a21190240024020090d00200121000c010b200120194102746a41e4016a280200210002402009417f6a2209450d00034020002802e40121002009417f6a22090d000b0b410021190b201d2000360204201d4100360200201d2019360208200241c8046a2001200a4103746a418c016a410810742001200a410c6c6a220141046a28020021002001410c6a2802002201200241c8046a1076200241c8046a2000200110742002280248220a450d01200228023421010c000b0b20023502d004210c20023502c804211220024188036a10f101200241c0056a24002012200c422086840f0b200241d4046a410f360200200241c4006a410236020020024202370234200241a0a7c900360230200241043602cc04200241f0a8c9003602c8042002200241c8046a3602402002200241b8056a3602d004200241306a41b0a7c9001044000bbd0702087f027e23004180016b2202240002400240024020010d00200241003602082002420137030020024100360230200241d8006a41204101200241306a107d200241d8006a41086a22012802002103024020022802584101470d002003450d020c030b200228025c21042002200336020420022004360200200241d8006a41186a22034200370300200241d8006a41106a220442003703002001420037030020024200370358200241106a41a8f8c60041041081022001200241106a41086a220529000037030020022002290010370358200241106a41978bc500410e1081022003200529000037030020042002290010370300200241306a200241d8006a10a30420022d003021052003200241c9006a2900003703002004200241c1006a2900003703002001200241396a290000370300200220022900313703580240024020054101460d00200241106a41186a4200370300200241106a41106a4200370300200241186a4200370300200242003703100c010b200241106a41186a2003290300370300200241106a41106a2004290300370300200241106a41086a200241d8006a41086a290300370300200220022903583703100b2002200241106a41201074200241d8006a20022802002206200228020810b001200241306a41186a2205200241d8006a41186a2201290300370300200241306a41106a2207200241d8006a41106a2203290300370300200241306a41086a2208200241d8006a41086a22042903003703002002200229035837033020014200370300200342003703002004420037030020024200370358200241106a41a8f8c60041041081022004200241106a41086a220929000037030020022002290010370358200241106a41b08bc500410a1081022001200929000037030020032002290010370300200241106a200241d8006a4120109d0302402002280204450d002006102e0b2004200829030037030020032007290300370300200120052903003703002002200229033037035820024100360218200242013703104120102c2201450d022002422037023420022001360230200241306a200241d8006a41201074200241106a200228023022012002280238107402402002280234450d002001102e0b2002350218210a2002350210210b20024180016a2400200b200a422086840f0b200241e4006a410f360200200241c4006a410236020020024202370234200241a0a7c9003602302002410436025c20024188a9c9003602582002200241d8006a3602402002200241f8006a360260200241306a41b0a7c9001044000b1038000b1036000bbf5d05027f027e0c7f077e027f230041e0176b220224002002428080808080203702ac17200220013602e4162002200041d4e2cc0020011b22033602e0162002200241e0166a3602a81741002100200241003a00901102400240024002402001450d0020022001417f6a3602e4162002200341016a3602e016024020032d00000e03030200010b410221000c020b420321040c020b410121000b200241c0076a200241a8176a10ed0142032104024020022903a80822054203520d000c010b2002418f0b6a200241c0076a41e80010e9081a20024190116a200241b0086a41d80210e9081a200241286a200241880b6a41ef0010e9081a200521040b200241d0066a200241286a41ef0010e9081a200241880e6a20024190116a41d80210e9081a02400240024002400240024002400240024020044203510d00200220003a00800320024180036a410172200241d0066a41ef0010e9082101200241f0036a2004370300200241f8036a200241880e6a41d80210e90821030240024020022802a8172802040d0020024190116a200141ef0010e9081a200241c0076a200341d80210e9081a0c010b024020044202510d0020022d0088034102470d0020024190036a280200450d00200228028c03102e0b200241a0046a108b02420321040b20044203510d0020024180036a20024190116a41ef0010e9081a200241d0066a20024187036a41e80010e9081a200241286a200241c0076a41d80210e9081a200241c0076a200241d0066a41e80010e9081a200220043703a808200241b0086a200241286a41d80210e9081a2002200241c0076a3602901120024180036a20024190116a10900520022802880321060240200228028403450d00200228028003102e0b20024180036a200241c0076a41c80310e9081a20024190116a20024180036a108a0220022d009011210120022f009111210320022d0093112107200241880e6a20024190116a41047241840310e9081a024020014101460d00200241880b6a200241880e6a41046a41800310e9081a20024198146a200241d80b6a22081097040240024020022903a80b4202520d0020024190116a41206a2201420037030020024190116a41186a22034280808080c000370300200241013a00b811200242043703a0112002427f37039811200242003703901120024180036a41206a2207420037030020024180036a41186a22094280808080c000370300200241013a00a80320024204370390032002427f370388032002420037038003200241f0146a20024190116a20024180036a10d20720024190116a41286a220a200241f0146a41286a2903003703002001200241f0146a41206a2903003703002003200241f0146a41186a29030037030020024190116a41106a220b200241f0146a41106a29030037030020024190116a41086a220c200241f0146a41086a290300370300200220022903f014370390112007420037030020094280808080c000370300200241013a00a80320024204370390032002427f370388032002420037038003200241a0156a20024190116a20024180036a10d207200a200241a0156a41286a2903003703002001200241a0156a41206a2903003703002003200241a0156a41186a290300370300200b200241a0156a41106a290300370300200c200241a0156a41086a290300370300200220022903a015370390112007420037030020094280808080c000370300200241013a00a80320024204370390032002427f370388032002420037038003200241d0156a20024190116a20024180036a10d207200a200241d0156a41286a2903003703002001200241d0156a41206a2903003703002003200241d0156a41186a290300370300200b200241d0156a41106a290300370300200c200241d0156a41086a290300370300200220022903d015370390112007420037030020094280808080c000370300200241013a00a80320024204370390032002427f37038803200242003703800320024180166a20024190116a20024180036a10d207200a20024180166a41286a290300370300200120024180166a41206a290300370300200320024180166a41186a290300370300200b20024180166a41106a290300370300200c20024180166a41086a2903003703002002200229038016370390112007420037030020094280808080c000370300200241013a00a80320024204370390032002427f370388032002420037038003200241b0166a20024190116a20024180036a10d207200241a8176a41286a220d200241b0166a41286a290300370300200241a8176a41206a220e200241b0166a41206a290300370300200241a8176a41186a220f200241b0166a41186a290300370300200241a8176a41106a2210200241b0166a41106a290300370300200241a8176a41086a2211200241b0166a41086a290300370300200220022903b0163703a81720024180036a20022903981420022d00a014200610a005200c20024180036a410c6a290200370300200b20024180036a41146a290200370300200320024180036a411c6a290200370300200120024180036a41246a290200370300200a20024180036a412c6a290200370300200241c0116a200241b4036a28020036020020022002290284033703901120022d0080034101470d0120022d008303210720022f008103210920022802b81721030240200f2802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b0240200241bc176a2802002201450d002001410c6c450d002003102e0b2007411074210720022802c41721030240200241cc176a2802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b200920077221010240200241c8176a2802002200450d002000410c6c450d002003102e0b200241013a008003200220013b008103200220014110763a0083032008108b020c0a0b20024190116a41206a2200420037030020024190116a41186a22034280808080c000370300200241013a00b811200242043703a011427f21042002427f37039811200242003703901120024180036a41206a2207420037030020024180036a41186a22014280808080c000370300200241013a00a80320024204370390032002427f370388032002420037038003200241c0146a20024190116a20024180036a10d20720024190116a41286a2209200241c0146a41286a2903003703002000200241c0146a41206a2903003703002003200241c0146a41186a29030037030020024190116a41106a220a200241c0146a41106a29030037030020024190116a41086a220b200241c0146a41086a290300370300200220022903c014370390112007420037030020014280808080c000370300200241013a00a80320024204370390032002427f370388032002420037038003200241f0146a20024190116a20024180036a10d2072009200241f0146a41286a2903003703002000200241f0146a41206a2903003703002003200241f0146a41186a290300370300200a200241f0146a41106a290300370300200b200241f0146a41086a290300370300200220022903f014370390112007420037030020014280808080c000370300200241013a00a80320024204370390032002427f370388032002420037038003200241a0156a20024190116a20024180036a10d2072009200241a0156a41286a2903003703002000200241a0156a41206a2903003703002003200241a0156a41186a290300370300200a200241a0156a41106a290300370300200b200241a0156a41086a290300370300200220022903a015370390112001420037030020024180036a41106a2203420037030020024180036a41086a220942003703002002420037038003200241880e6a41d9fcc60041061081022009200241880e6a41086a2200290000370300200220022900880e37038003200241880e6a4180f4cb00410610810220012000290000370300200320022900880e370300200241206a20024180036a4120108e022002280224410020022802201bad2105024020022903a80b4201520d0020022903b00b22044200510d04200241b80b6a290300221220047c4200200520127d221220122005561b22127c20122004827d21040b2007420037030020014280808080c000370300200220022800880e3602a81720022002418b0e6a2800003600ab17200241ac036a20022800ab17360000200241013a00a8032002420437039003200242003703800320024200200420057d220520052004561b37038803200220022802a8173600a903200241d0156a20024190116a20024180036a10d207200241880e6a41286a200241d0156a41286a290300370300200241880e6a41206a200241d0156a41206a290300370300200241880e6a41186a200241d0156a41186a290300370300200241880e6a41106a200241d0156a41106a2903003703002000200241d0156a41086a290300370300200220022903d0153703880e200241a8176a200241880b6a10c80220024180036a20022802a817220020022802b01710c902200241c8036a28020041002002290380034201511b2101024020022802ac17450d002000102e0b0240024020022802d00b22002001490d00410c102c2203450d0c410421074104102c2209450d0c2002420437028403200220093602800320024180036a200241880b6a41201074200220003602a81720024180036a200241a8176a41041074200341086a2002280288033602002003200229038003370200410021090240200120004f0d00410c102c2207450d0d4104102c2201450d0d2002420437028403200220013602800320024180036a200241880b6a4120107420022000417f6a3602a81720024180036a200241a8176a41041074200741086a2002280288033602002007200229038003370200410121090b20024190116a41206a42818080801037030020024190116a41186a2201200936020020024190116a41146a2009360200200220022800e0163602b8142002200241e3166a2800003600bb1420024190116a412c6a20022800bb14360000200241013a00b811200220033602ac11200220073602a0112002427f370398112002420037039011200220022802b8143600b91120024180166a200241880e6a20024190116a10d207200241a8176a41286a20024180166a41286a290300370300200241a8176a41206a20024180166a41206a290300370300200241a8176a41186a20024180166a41186a290300370300200241a8176a41106a20024180166a41106a290300370300200241a8176a41086a20024180166a41086a29030037030020022002290380163703a817024020022d00a01422004102470d0020024198116a2002418c036a29020037030020024190116a41106a20024180036a41146a29020037030020012002419c036a290200370300200241b0116a200241a4036a29020037030020024190116a41286a20024180036a412c6a290200370300200241c0116a200241b4036a28020036020020022002290284033703901141801221010c0a0b20024180036a2002290398142000200610a00520024190116a41086a20024180036a410c6a29020037030020024190116a41106a20024180036a41146a290200370300200120024180036a411c6a29020037030020024190116a41206a20024180036a41246a29020037030020024190116a41286a20024180036a412c6a290200370300200241c0116a200241b4036a28020036020020022002290284033703901120022d0080034101470d0120022f00810320022d0083034110747221010c090b200220022800e0163602b8142002200241e3166a2800003600bb142002410a3a00830320024180063b008103200241013a00800320022802980e21030240200241a00e6a2802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b02402002419c0e6a2802002201450d002001410c6c450d002003102e0b20022802a40e21030240200241ac0e6a2802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b200241a80e6a2802002201450d092001410c6c450d092003102e2008108b020c0a0b200241880e6a41286a2201200241bc116a290200370300200241880e6a41206a220320024190116a41246a290200370300200241880e6a41186a220720024190116a411c6a290200370300200241880e6a41106a2209200241a4116a290200370300200241880e6a41086a220a20024190116a410c6a29020037030020022002290294113703880e200241b0166a200241a8176a200241880e6a10d2072001200241b0166a41286a2903003703002003200241b0166a41206a2903003703002007200241b0166a41186a2903003703002009200241b0166a41106a290300370300200a200241b0166a41086a290300370300200220022903b0163703880e20024180036a2006200229039814221320022903c00b2214200241880b6a41c0006a290300221520022d00a114410047200010e704420021054200210402402002290380034201520d00427f427f20024180036a41106a2903002204200241a0036a2903007c200229038803220520024180036a41186a2903007c22122005542201ad7c22052001200520045420052004511b22011b2204200241b0036a2903007c427f201220011b220520024180036a41286a2903007c22122005542201ad7c22052001200520045420052004511b22011b2104427f201220011b21050b427f200420024180036a41c0006a29030022167c200520022903b80322177c22182005542201ad7c22122001201220045420122004511b22011b2112427f201820011b2118024002400240024020052017842004201684844200520d00200220183703a817200242003703b817200220123703b0170c010b20024190176a200241880b6a20182012410141112014201584501b10fe062002280290174101460d01200241c0176a2201200229039817370300200241c8176a200241a0176a290300370300200220183703a817200242013703b817200220123703b017200220013602800320024180036a10cc020b20024180036a10a9032002290388032104200241013a00b811200220124200418080f00120064101200641014b1b6ead220520042013420120134201561b80220420042005561b2204420010e808200241106a201842002004420010e80820024190116a41206a2200420037030020024190116a41186a22034280808080c0003703002002200241ab146a2800003600bb14200220022800a8143602b81420024190116a412c6a220720022800bb14360000200242043703a011200220022802b8143600b91120022903082105200241106a41086a2903002104200229030021122002427f370398112002427f20022903102005420052200420127c22052004547222011b427f427f200520011b501b37039011200241e0166a200241880e6a20024190116a10d207200241880e6a41286a200241e0166a41286a290300370300200241880e6a41206a200241e0166a41206a290300370300200241880e6a41186a2201200241e0166a41186a290300370300200241880e6a41106a200241e0166a41106a290300370300200241880e6a41086a200241e0166a41086a290300370300200220022903e0163703880e20024180036a200241880b6a20081080032002200241b1036a2800003602b8142002200241b4036a2800003600bb1420022d0080034101460d01200241b0036a22012d0000210920024180036a41286a220a280200210b20024180036a41246a280200210c20024180036a41206a2206280200210f2002419c036a280200210d20024180036a41186a220e280200211020024180036a41106a2211290300210420024180036a41086a2219290300210520024190116a41246a20024180036a412c6a2802003602002000200b3602002003200f360200200241a4116a200d360200200720022800bb14360000200220093a00b8112002200c3602ac11200220103602a01120022004370398112002200537039011200220022802b8143600b911200241a8176a200241880e6a20024190116a10d207201920022903a8173703002011200241a8176a41086a290300370300200e200241a8176a41106a2903003703002006200241a8176a41186a290300370300200a200241a8176a41206a2903003703002001200241a8176a41286a290300370300200241003a0080032008108b020c0b0b200220022800a8143602b8142002200241ab146a2800003600bb14200241003a00830320024180023b008103200241013a00800320022802980e21030240200241a00e6a2802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b02402002419c0e6a2802002201450d002001410c6c450d002003102e0b20022802a40e21030240200241ac0e6a2802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b200241a80e6a2802002201450d092001410c6c450d092003102e2008108b020c0a0b20022d008303210020022f0081032103200241013a0080032002200320004110747222003b008103200220004110763a00830320022802980e2103024020012802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b02402002419c0e6a2802002201450d002001410c6c450d002003102e0b20022802a40e21030240200241ac0e6a2802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b200241a80e6a2802002201450d082001410c6c450d082003102e2008108b020c090b200241880e6a41286a20024190116a412c6a290200370300200241880e6a41206a220620024190116a41246a290200370300200241880e6a41186a221920024190116a411c6a290200370300200241880e6a41106a20024190116a41146a290200370300200241880e6a41086a221a20024190116a410c6a29020037030020022002290294113703880e200241e0166a200241a8176a200241880e6a10d207200a200241e0166a41286a2903003703002001200241e0166a41206a2903003703002003200241e0166a41186a290300370300200b200241e0166a41106a290300370300200c200241e0166a41086a290300370300200220022903e016370390112007420037030020094280808080c000370300200241013a00a80320024204370390032002427f370388032002420037038003200241a8176a20024190116a20024180036a10d207200a200d2903003703002001200e2903003703002003200f290300370300200b2010290300370300200c2011290300370300200220022903a817370390112007420037030020094280808080c000370300200241013a00a80320024204370390032002427f370388032002420037038003200241880e6a20024190116a20024180036a10d207200241c0146a410c6a201a290300370200200220022903880e3702c414200241880e6a41146a28020021032019280200210120062802002107200241880e6a41246a280200210920022802980e210a20022802a40e210b20022903b00e210420024190176a41106a200241c0146a41106a28020036020020024190176a41086a200241c0146a41086a290200370300200220022902c01437039017200241a8146a41086a20024190176a410c6a29020037030020022002290294173703a814024002400240024002400240024020022802d80b417e6a0e1a0100000000000000020500000000000000030000000000000004000b200241003a00830320024181023b0081030c0a0b0240200241e00b6a2802004102460d002002410a3a008303200241003b0081030c0a0b0240200041ff01714102490d002002410a3a008303200241003b0081030c0a0b0240200241f80b6a200241e40b6a10f206220c41ff01714102470d0020024180036a41086a427f370300200241b4036a2200411036020020024180036a41206a420037030020024180036a41186a4280808080c0003703002002427f37038003200241d8b2c4003602b003200241013a00a8032002420437039003200241a8176a41186a200241f80d6a2903002205370300200241a8176a41106a200241f00d6a2903002212370300200241a8176a41086a200241e80d6a29030022183703002002200241e00d6a29030022133703a817200220022903f80b22163703c81720024190116a41106a201837030020024190116a41186a201237030020024190116a41206a2005370300200241b8116a220c20163703002002200241b0036a360290112002201337039811411c102c2206450d0f2002421c37028416200220063602801620022802b00321062000280200220020024180166a107620024180166a20062000107420024180166a20024190116a41086a412010742002200c2903003703b01620024180166a200241b0166a410810740240024020022802a403220c20022802a0032200470d00200041016a220c2000490d0b20004101742206200c2006200c4b1b220c4104200c41044b1bad420c7e2205422088a745410274210c2005a721060240024020000d0020024100360290110c010b20024198116a41043602002002200228029c033602901120022000410c6c360294110b200241b0166a2006200c20024190116a107d200241b8166a280200210020022802b0164101460d01200220022802b41636029c0320022000410c6e3602a00320022802a403210c0b200228029c03200c410c6c6a2200200229038016370200200041086a20024180166a41086a28020036020020024190116a41086a220020024198036a220c290300370300200220022802a40341016a3602a40320024190116a41106a2206200241a0036a220f2903003703002002200229039003370390112002200241a9036a220d2900003703b0162002200d41076a2900003700b716200229038003210520024180036a41106a4280ce1837030020024180036a41086a2005370300200241a8036a2006290300370300200f2000290300370300200c20022903901137030041002100200241b0036a41003a0000200241b4036a20022800b316360000200241b1036a20022802b016360000200241003a0080030c0c0b2000450d090c0f0b41012100200241013a0080032002200c3b0081032002200c4110763a0083030c0a0b0240200241e00b6a2802004102460d002002410a3a008303200241003b0081030c090b0240200041ff01714102490d002002410a3a008303200241003b0081030c090b0240200241f80b6a200241e40b6a10ff06220c41ff01714102470d0020024190116a41086a427f370300200241c4116a2200411336020020024190116a41206a420037030020024190116a41186a4280808080c0003703002002427f37039011200241ccdcc8003602c011200241013a00b811200242043703a011200241a8176a41106a200241e00d6a2903002205370300200241a8176a41186a200241e80d6a2903002212370300200241a8176a41206a200241f00d6a29030022183703002002200241d80d6a29030022133703b0172002200241880c6a29030022163703d017200220022903f80b22173703a81720024180036a41106a220c201337030020024180036a41186a200537030020024180036a41206a2012370300200241a8036a201837030020024180036a41306a22062016370300200220024190116a41306a3602800320022017370388034127102c220f450d0e20024227370284162002200f3602801620022802c011210f2000280200220020024180166a107620024180166a200f2000107420024180166a200c4120107420022002290388033703b01620024180166a200241b0166a41081074200220062903003703b01620024180166a200241b0166a410810740240024020022802b411220c20022802b0112200470d00200041016a220c2000490d0a20004101742206200c2006200c4b1b220c4104200c41044b1bad420c7e2205422088a745410274210c2005a721060240024020000d0020024100360280030c010b20024188036a4104360200200220022802ac113602800320022000410c6c360284030b200241b0166a2006200c20024180036a107d200241b8166a280200210020022802b0164101460d01200220022802b4163602ac1120022000410c6e3602b01120022802b411210c0b20022802ac11200c410c6c6a2200200229038016370200200041086a20024180166a41086a280200360200200241b0166a41086a220020024190116a41186a290300370300200220022802b41141016a3602b411200241b0166a41106a220c20024190116a41206a290300370300200220022903a0113703b0162002200241b9116a2206290000370380162002200641076a29000037008716200229039011210520024180036a41106a4280ce1837030020024180036a41086a2005370300200241a8036a200c29030037030020024180036a41206a200029030037030020024180036a41186a20022903b01637030041002100200241b0036a41003a0000200241b4036a200228008316360000200241b1036a200228028016360000200241003a0080030c0b0b20000d0e0c080b41012100200241013a0080032002200c3b0081032002200c4110763a0083030c090b20024180036a200241e00b6a10df020c020b0240200041ff01714102490d002002410a3a008303200241003b0081030c070b20024190116a200241e00b6a10b806024020022d009011220c4106460d00200241800e3b00810341012100200241013a008003200220022d0092114100200c4103461b3a0083030c080b200241e80b6a290300210520022903e00b2112200241d00d6a28020021004118102c220c450d0b200242183702ac172002200c3602a8174110200241a8176a1076200241a8176a41e6b3c700411010742002200036028003200241a8176a20024180036a4104107441002100200241003602800320024190116a4130410420024180036a107d20024190116a41086a280200210602402002280290114101470d0020060d0c0c060b200228029411220c20022903a817370200200c41086a200241a8176a41086a28020036020020024180036a41306a41003a0000200241ac036a4101360200200241a8036a2006410c6e360200200241a4036a200c360200200241a0036a410036020020024198036a420437030020024180036a41106a42d80437030020024180036a41086a427f2012427f2005501b220542e5cc99b3e6cc99b3667c221220122005541b37030020022002280090113602b016200220024193116a2800003600b316200241b4036a20022800b316360000200241b1036a20022802b016360000200241003a0080030c070b20024180036a200241dc0b6a109d070b20022d00800321000c050b200241013a0080032002200320074110747222013b008103200220014110763a0083030c070b200241940e6a410f36020020024194036a41023602002002420237028403200241a0a7c900360280032002410436028c0e2002419ca9c9003602880e2002200241880e6a360290032002200241d8176a3602900e20024180036a41b0a7c9001044000b41d0e7cc00411941ece7cc001039000b1038000b41012100200241013a0080030b200241880e6a41086a220c20024180036a410c6a290200370300200241880e6a41106a20024180036a41146a290200370300200241880e6a41186a220620024180036a411c6a290200370300200241880e6a41206a220f20024180036a41246a290200370300200241880e6a41286a20024180036a412c6a290200370300200241880e6a41306a200241b4036a28020036020020022002290284033703880e0240200041ff01714101460d00200241e0166a41286a2200200241880e6a412c6a290200370300200241e0166a41206a220d200241880e6a41246a220e290200370300200241e0166a41186a2210200241880e6a411c6a290200370300200241e0166a41106a2211200241880e6a41146a2219290200370300200241e0166a41086a221a200241880e6a410c6a2902003703002002200229028c0e3703e016200c200241a8146a41086a290300370300200e2009360200200f20073602002006200136020020192003360200200220022903a8143703880e200220043703b00e2002200b3602a40e2002200a3602980e20024190116a41286a200029030037030020024190116a41206a200d29030037030020024190116a41186a201029030037030020024190116a41106a201129030037030020024190116a41086a201a290300370300200220022903e01637039011200241a8176a200241880e6a20024190116a10d20720024180036a41086a20022903a81737030020024180036a41106a200241a8176a41086a29030037030020024180036a41186a200241a8176a41106a29030037030020024180036a41206a200241a8176a41186a29030037030020024180036a41286a200241a8176a41206a29030037030020024180036a41306a200241a8176a41286a290300370300200241003a0080032008108b020c030b20022d008303210020022f008103210c200241013a0080032002200c20004110747222003b008103200220004110763a00830302402001450d002001410c6c2100200a210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b02402003450d002003410c6c450d00200a102e0b02402009450d002009410c6c2100200b210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b2007450d012007410c6c450d01200b102e0c010b200241013a008003200220013b008103200220014110763a00830320022802b81721030240200241c0176a2802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b0240200241bc176a2802002201450d002001410c6c450d002003102e0b20022802c41721030240200241cc176a2802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b200241c8176a2802002201450d002001410c6c450d002003102e2008108b020c010b2008108b020b4101102c2201450d00200242013702c407200220013602c0070240024020022d0080034101470d00200241013a009011200241c0076a20024190116a4101107420024180036a410172200241c0076a108e050c010b200241003a009011200241c0076a20024190116a41011074200220024180036a41086a29030037039011200241c0076a20024190116a4108107420024198036a2802002101200241a0036a2802002200200241c0076a107602402000450d0020012000410c6c6a2107034020012802002100200141086a2802002203200241c0076a1076200241c0076a2000200310742001410c6a22012007470d000b0b200241a4036a2802002101200241ac036a2802002200200241c0076a107602402000450d0020012000410c6c6a2107034020012802002100200141086a2802002203200241c0076a1076200241c0076a2000200310742001410c6a22012007470d000b0b200220024190036a29030037039011200241c0076a20024190116a410810742002200241b0036a2d00003a009011200241c0076a20024190116a410110740b20023502c807210420023502c0072105024020022d0080030d000240200241a0036a2802002200450d0020024198036a28020021012000410c6c210003400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b02402002419c036a2802002201450d002001410c6c450d00200228029803102e0b0240200241ac036a2802002200450d00200241a4036a28020021012000410c6c210003400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b200241a8036a2802002201450d002001410c6c450d0020022802a403102e0b200241e0176a240020044220862005840f0b1036000bb30304017f027e067f027e230041206b22032400200229030021042001290300210520022802102106200141106a200241186a2207280200220810e0082001280210200141186a2209280200220a410c6c6a20062008410c6c10e9081a200741003602002009200a20086a2208360200200341086a200836020020032001290210370300200228021c21072001411c6a200241246a2209280200220810e008200128021c200141246a220a280200220b410c6c6a20072008410c6c10e9081a20094100360200200a200b20086a2208360200200341106a41086a20083602002003200129021c3703102002290308210c2001290308210d0240024020012d0028450d004101210120022d00280d010b410021010b200020032903003702102000200329031037021c200020013a0028200041186a200341086a280200360200200041246a200341106a41086a2802003602002000200c200d200d200c561b3703082000427f200520047c220c200c2005541b3703000240200241146a2802002201450d002001410c6c450d002006102e0b0240200241206a2802002201450d002001410c6c450d002007102e0b200341206a24000bb30b01087f230041f0026b220224002002428080808080203702dc02200220013602cc022002200041d4e2cc0020011b3602c8022002200241c8026a3602d802200241c8016a200241d8026a109902200241d4016a280200210320022802d001210420022802cc01210520022802c8012106200241e8006a200241d8016a41e00010e9081a024002402005450d00200241086a200241e8006a41e00010e9081a0240024020022802d8022802040d00200241e8006a200241086a41e00010e9081a0c010b02402003450d00200341246c21002005210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b02402004450d00200441246c450d002005102e0b410021050b2005450d00200241d4016a2003360200200241c8016a41086a2004360200200220053602cc01200220063602c801200241c8016a41106a200241e8006a41e00010e9082107200241b8026a200241c8016a41047210c7014102200110eb042002410036026841fcc6cb004110200241e8006a410410b201200241e8006a41186a22014200370300200241e8006a41106a22004200370300200241e8006a41086a2208420037030020024200370368200241086a41d9fcc60041061081022008200241086a41086a220929000037030020022002290008370368200241086a4180f4cb004106108102200120092900003703002000200229000837030020022006360208200241e8006a4120200241086a410410b201200241b8026a10ee04200710f0042006417f6a200710a40720014200370300200042003703002008420037030020024200370368200241086a41d9fcc60041061081022008200929000037030020022002290008370368200241086a41d4f2cb00410b1081022001200929000037030020002002290008370300200241e8006a412010ff01200241086a200241c8016a109a042001200241086a41186a2903003703002000200241086a41106a2903003703002008200929030037030020022002290308370368200241c8026a2006108c0220022802d002210020022802c80221014120102c2208450d01200242203702dc02200220083602d802200241d8026a200241e8006a412010742001200020022802d802220820022802e00210b201024020022802dc02450d002008102e0b024020022802cc02450d002001102e0b200610de0620022802b8022106024020022802c0022201450d00200141246c21002006210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b024020022802bc022201450d00200141246c450d002006102e0b02402003450d00200341246c21002005210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b02402004450d00200441246c450d002005102e0b200241f0026a240042010f0b200241146a410f360200200241dc016a4102360200200242023702cc01200241a0a7c9003602c8012002410436020c200241b8a9c9003602082002200241086a3602d8012002200241e8026a360210200241c8016a41b0a7c9001044000b1036000bab0102017f027e230041306b220224000240024020010d004104102c2201450d0120024204370204200220013602004100200210762002350208210320023502002104200241306a240020042003422086840f0b200241246a410f360200200241146a410236020020024202370204200241a0a7c9003602002002410436021c200241d0a9c9003602182002200241186a3602102002200241286a360220200241b0a7c9001044000b1036000be10102017f027e230041306b220224000240024020010d004104102c2201450d012002420437020420022001360200410020021076200241003602182002200241186a41041074200241003602182002200241186a41041074200241003602182002200241186a410410742002350208210320023502002104200241306a240020042003422086840f0b200241246a410f360200200241146a410236020020024202370204200241a0a7c9003602002002410436021c200241e4a9c9003602182002200241186a3602102002200241286a360220200241b0a7c9001044000b1036000bab0102017f027e230041306b220224000240024020010d004104102c2201450d0120024204370204200220013602004100200210762002350208210320023502002104200241306a240020042003422086840f0b200241246a410f360200200241146a410236020020024202370204200241a0a7c9003602002002410436021c200241fca9c9003602182002200241186a3602102002200241286a360220200241b0a7c9001044000b1036000bcb0102017f027e230041306b2202240002400240200041d4e2cc0020011b200110fc0541ff01714103460d004101102c2201450d012002420137020420022001360200200241003a00182002200241186a410110742002350208210320023502002104200241306a240020042003422086840f0b200241246a410f360200200241146a410236020020024202370204200241a0a7c9003602002002410436021c20024198aac9003602182002200241186a3602102002200241286a360220200241b0a7c9001044000b1036000bb210040d7f017e017f017e230041f0006b22022400200242808080808020370254200220013602642002200041d4e2cc0020011b22003602602002200241e0006a3602500240024002400240024002400240024020014104490d0020022001417c6a3602642002200041046a360260200241286a200241d0006a10e80120022802282203450d00200241306a2802002104200228022c2105200241206a200241d0006a10ad010240024020022802200d004104210620022802242207200228025022012802044104762200200020074b1b22084104742200417f4c0d0902402008450d002000102c2206450d050b2002200228025441016a22003602540240024002400240200020022802584b0d00024020070d00410021070c030b2007417f6a21094100210a4100210b024002400340200128020422004104490d022001280200220c280000210d20012000417c6a3602042001200c41046a360200200241186a200241d0006a10ad0120022802180d022001280204220c200228021c2200490d022000417f4c0d100240024020000d004101210e0c010b20001032220e450d0c2001280204210c0b200c2000490d01200e2001280200200010e908210c2001280204220e2000490d0c2001200e20006b3602042001200128020020006a360200200c450d02024002400240200b2008460d002008210e200b21080c010b200841016a22012008490d122008410174220e2001200e20014b1b22014104200141044b1b220141ffffffff0071200146410274210e200141047421010240024020080d00200241003602280c010b20022006360228200241043602302002200841047436022c0b200241c0006a2001200e200241286a107d2002280248210120022802404101460d01200228024421062001410476210e0b200620084104746a2201200c3602042001200d360200200141086a2000ad220f422086200f843702002009200b460d05200b41016a210b200a41106a210a20022802502101200e21080c010b0b20010d0a0c0f0b200e102e0b200b450d00200641086a2101034002402001280200450d002001417c6a280200102e0b200141106a2101200a41706a220a0d000b0b200841ffffffff00710d020c030b20022802542100200e21080b20022000417f6a3602542006450d01200228025021014100210b200241003a0040024020012802042200450d002001280200220c2d0000210d20012000417f6a3602042001200c41016a360200024002400240200d0e020100030b200241106a200241d0006a10ad0120022802100d022001280204220c20022802142200490d022000417f4c0d0d0240024020000d004101210b0c010b20001032220b450d092001280204210c0b200c2000490d01200b2001280200200010e908210c2001280204220d2000490d0a2001200d20006b3602042001200128020020006a360200200c450d022000ad220f422086200f84210f0b200fa72110200241086a200241d0006a10ad01024020022802080d002001280204220c200228020c2200490d002000417f4c0d0d0240024020000d004101210d0c010b20001032220d450d092001280204210c0b0240200c2000490d00200d2001280200200010e908210c2001280204220e2000490d0c2001200e20006b3602042001200128020020006a360200200c450d012000ad220f422086200f84a7210e0240200128020422004104490d0020012000417c6a220a36020420012001280200220941046a360200200a41034b0d070b200e450d010b200d102e0b200b450d012010450d010b200b102e0b02402007450d00200741047421004100210103400240200620016a220b41086a280200450d00200b41046a280200102e0b2000200141106a2201470d000b0b200841ffffffff0071450d010b2006102e0b02402004450d002004410c6c21002003210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b2005450d012005410c6c450d012003102e0c010b2001200041786a3602042001200941086a3602002003450d002002280250280204450d0102402004450d002004410c6c21004100210103400240200320016a220d41046a280200450d00200d280200102e0b20002001410c6a2201470d000b0b02402005450d002005410c6c450d002003102e0b02402007450d0020074104742100200641086a2101034002402001280200450d002001417c6a280200102e0b200141106a2101200041706a22000d000b0b0240200841ffffffff0071450d002006102e0b0240200b450d002010450d00200b102e0b200e450d00200c102e0b200241cc006a410f3602002002413c6a41023602002002420237022c200241a0a7c90036022820024104360244200241bcaac9003602402002200241c0006a3602382002200241e8006a360248200241286a41b0a7c9001044000b02402004450d002004410c6c21002003210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b02402005450d002005410c6c450d002003102e0b02402007450d0020074104742100200641086a2101034002402001280200450d002001417c6a280200102e0b200141106a2101200041706a22000d000b0b0240200841ffffffff0071450d002006102e0b0240200b450d002010450d00200b102e0b0240200e450d00200c102e0b4101102c22010d040b1036000b2000200e41b8b2c0001056000b2000200d41b8b2c0001056000b2000200e41b8b2c0001056000b2002420137022c20022001360228200241003a0040200241286a200241c0006a410110742002350230210f20023502282111200241f0006a24002011200f422086840f0b1038000bb70102017f027e230041306b220224000240024020010d004104102c2201450d012002420437020420022001360200200241003602182002200241186a410410742002350208210320023502002104200241306a240020042003422086840f0b200241246a410f360200200241146a410236020020024202370204200241a0a7c9003602002002410436021c200241dcaac9003602182002200241186a3602102002200241286a360220200241b0a7c9001044000b1036000bba0102017f027e230041306b220224000240024020014104470d004101102c2201450d012002420137020420022001360200200241003a00182002200241186a410110742002350208210320023502002104200241306a240020042003422086840f0b200241246a410f360200200241146a410236020020024202370204200241a0a7c9003602002002410436021c200241fcaac9003602182002200241186a3602102002200241286a360220200241b0a7c9001044000b1036000b950102017f017e230041306b220224000240200041d4e2cc0020011b200110fc0541ff01714103470d00200241246a410f360200200241146a410236020020024202370204200241a0a7c9003602002002410436021c20024190abc9003602182002200241186a3602102002200241286a360220200241b0a7c9001044000b20024100360200200210ce042103200241306a240020030b910102017f017e230041306b220224000240024020014108470d002001417c714104470d010b200241246a410f360200200241146a410236020020024202370204200241a0a7c9003602002002410436021c200241a8abc9003602182002200241186a3602102002200241286a360220200241b0a7c9001044000b20024100360200200210ce042103200241306a240020030be30303017f027e017f230041e0026b220224000240024020014104470d0020024100360284024101102c2201450d01200242013702c402200220013602c002200241003a00d702200241c0026a200241d7026a4101107420023502c002210320023502c802210402402002280284022201450d000240200228028c022205450d002005410c6c210503400240200141046a280200450d002001280200102e0b2001410c6a2101200541746a22050d000b0b02402002280288022201450d002001410c6c450d00200228028402102e0b024020024198026a2802002201450d002001410474210520024190026a28020041086a2101034002402001280200450d002001417c6a280200102e0b200141106a2101200541706a22050d000b0b024020024194026a28020041ffffffff0071450d00200228029002102e0b02402002419c026a2802002201450d00200241a0026a280200450d002001102e0b200241ac026a280200450d00200241a8026a280200102e0b200241e0026a240020044220862003840f0b200241cc026a410f360200200241146a410236020020024202370204200241a0a7c900360200200241043602c402200241ccabc9003602c0022002200241c0026a3602102002200241d8026a3602c802200241b0a7c9001044000b1036000bab0102017f027e230041306b220224000240024020010d004104102c2201450d0120024204370204200220013602004100200210762002350208210320023502002104200241306a240020042003422086840f0b200241246a410f360200200241146a410236020020024202370204200241a0a7c9003602002002410436021c200241f4abc9003602182002200241186a3602102002200241286a360220200241b0a7c9001044000b1036000bae0102017f027e230041306b220224000240024020014104470d004104102c2201450d0120024204370204200220013602004100200210762002350208210320023502002104200241306a240020042003422086840f0b200241246a410f360200200241146a410236020020024202370204200241a0a7c9003602002002410436021c2002418cacc9003602182002200241186a3602102002200241286a360220200241b0a7c9001044000b1036000bae0102017f027e230041306b220224000240024020014104470d004104102c2201450d0120024204370204200220013602004100200210762002350208210320023502002104200241306a240020042003422086840f0b200241246a410f360200200241146a410236020020024202370204200241a0a7c9003602002002410436021c200241a0acc9003602182002200241186a3602102002200241286a360220200241b0a7c9001044000b1036000bd30704067f017e017f037e230041f0006b22022400024002400240024020010d002002411436021c200241bcdac800360218200241206a41bcdac800411410ed0202400240024020022802202201450d00200228022421032002200241286a280200220436023c200220013602380240024002402004450d0020012d0000210520022004417f6a36023c2002200141016a3602382002200241386a10ab0102402002280200450d00200241003602500c010b200241d0006a200241386a200228020410990120022802502206450d004101210720022902542108200541ff01714101460d012008a72204450d00200441286c450d002006102e0b4100210720024100360210200242013703082002410a3602442002200241186a3602402002200241086a36024c41012104200241e4006a410136020020024201370254200241909dc5003602502002200241c0006a360260200241cc006a419cebc000200241d0006a103d1a2002280208200228021010ef020240200228020c450d002002280208102e0b0c010b2002200636022c200220083702302008422088a721052008a72109410021040b02402003450d002001102e0b2004450d010b200242003702304108210641002105410021090c010b20070d0020062802082205ad42287e2208422088a70d022008a72203417f4c0d02024020030d0041082106410021090c010b200628020021012003102c2206450d03200341286e210920034128490d00200621042009210703402003450d012007450d05200141086a2903002108200141106a290300210a2001290320210b2001290300210c200441186a200141186a290300370300200441106a200a370300200441086a20083703002004200c370300200441206a200b370300200441286a2104200341586a2103200141286a21012007417f6a22070d000b0b200541286c4104722201417f4c0d012001102c2204450d022002410036025820022001360254200220043602502005200241d0006a10760240200541286c2201450d00200620016a2104200621010340200241d0006a2001412010742002200141206a290300370308200241d0006a200241086a41081074200141286a22012004470d000b0b200235025821082002350250210a02402009450d00200941286c450d002006102e0b200241f0006a24002008422086200a840f0b200241146a410f360200200241e4006a410236020020024202370254200241a0a7c9003602502002410436020c200241c8acc9003602082002200241086a3602602002200241e8006a360210200241d0006a41b0a7c9001044000b1038000b1036000b200920094188decc00103c000bb80804017f027e027f017e230041f0076b220224002002428080808080203702cc07200220013602dc072002200041d4e2cc0020011b3602d8072002200241d8076a3602c80720024180046a200241c8076a10cb06024020022903880422034202510d00200229038004210420024180026a20024190046a41f00110e9081a200241086a200241c8076a10ad0120022802080d0020022802dc072200200228020c2201490d0002400240024002402001417f4c0d000240024020010d00410121050c010b200110322205450d0420022802dc0721000b0240024020002001490d00200520022802d807200110e908210020022802dc07220520014f0d012001200541b8b2c0001056000b2005102e0c050b2002200520016b22053602dc07200220022802d80720016a3602d807200241106a20024180026a41f00110e9081a2005450d01420221032001450d022000102e0c020b1038000b20024180046a200241106a41f00110e9081a0b20034202510d01200241106a20024180046a41f00110e9081a20024180026a200241106a41f00110e9081a200220013602dc07200220003602d80720024180046a200241d8076a10f7010240024020022802840422050d00410021050c010b200241d0076a20024190046a28020036020020022002290388043703c80720022802800421060b02402001450d002000102e0b20024180046a41086a2200200241c8076a41086a2201280200360200200220022903c80737038004024002402005450d00200241f0036a41086a20002802002200360200200220022903800422073703f003200241a8056a2005360200200241a4056a2006360200200241a0056a4102360200200241ac056a2007370200200241b4056a2000360200200241c0056a2003370300200241b8056a20043703002002410a36029805200242023703e804200241c8056a20024180026a41f00110e9081a200241c0076a2001290300370300200241b8076a20022903c807370300200220024180046a3602c807200241d8076a200241c8076a1090052001200241d8076a41086a280200360200200220022903d8073703c807200241c8076a10e8061a024020022903e8044202510d0020022d00800441ff01714102470d00200228028804450d00200228028404102e0b20024198056a108b02410121010c010b410021010b4101102c2200450d00200242013702840420022000360280040240024020010d00200241003a00800220024180046a20024180026a410110740c010b200241013a00800220024180046a20024180026a410110740b20023502880421032002350280042104200241f0076a240020042003422086840f0b1036000b2002411c6a410f36020020024194026a41023602002002420237028402200241a0a7c9003602800220024104360214200241e4acc9003602102002200241106a360290022002200241e8076a36021820024180026a41b0a7c9001044000b902508047f017e037f017e027f027e0f7f037e230041d0056b22022400024020014108490d00200241003a008004200041d4e2cc0020011b41086a2103200141786a2104410021010340200241003a008801024020042001470d00200141ff0171450d02200241003a0080040c020b200241e0036a20016a200320016a2d00003a00002002200141016a22003a0080042000210120004120470d000b20024188016a41186a2201200241e0036a41186a29030037030020024188016a41106a2203200241e0036a41106a29030037030020024188016a41086a2205200241e0036a41086a290300370300200220022903e00337038801200041ff01714120490d00200241286a41086a2005290300370300200241286a41106a2003290300370300200241286a41186a2001290300370300200220022903880122063703482002200637032820042000470d00200241e0036a41186a2205200241286a41186a22072903002206370300200241e0036a41106a2208200241286a41106a2209290300220a3703004108210b200241e0036a41086a2204200241286a41086a220c290300220d37030020022002290328220e3703e003200241086a41186a2006370300200241086a41106a200a370300200241086a41086a200d3703002002200e370308200241e8006a41186a2006370300200241e8006a41106a200a370300200241e8006a41086a200d3703002002200e3703682007420037030020094200370300200c420037030020024200370328200241e0036a41a081ca004107108102200c2004290000370300200220022900e003370328200241e0036a41e4d1c100410c10810220072004290000370300200920022900e0033703002002200241286a4120108e022002280204210f200228020021102007420037030020094200370300200c420037030020024200370328200241e0036a41a081ca004107108102200c2004290000370300200220022900e003370328200241e0036a41f09dc500410a10810220072004290000370300200920022900e003370300200241e0036a200241286a10880320022802e0032201410120011b211120022902e403420020011b2206a72112024002400240024002400240024002402006422088a72201450d002011200141057422136a2114200241bc056a2115200241e0036a41206a2100201121010340200241b8036a41186a2203200141186a2216290000370300200241b8036a41106a2217200141106a2218290000370300200241b8036a41086a2219200141086a221a290000370300200220012900003703b803200241c8006a41086a221b201a290000370300200241c8006a41106a221a2018290000370300200241c8006a41186a2218201629000037030020022001290000370348200520032903003703002008201729030037030020042019290300370300200220022903b8033703e00320024198056a200241e0036a10bf01200720182903003703002009201a290300370300200c201b290300370300200220022903483703280240024020022802b80522030d00410021030c010b2000200229039805370300200041186a20024198056a41186a290300370300200041106a20024198056a41106a290300370300200041086a20024198056a41086a29030037030020052007290300370300200820092903003703002004200c29030037030020024188056a41086a201541086a280200360200200220022903283703e003200220152902003703880520024188016a41386a200241e0036a41386a29030037030020024188016a41306a200241e0036a41306a29030037030020024188016a41286a200241e0036a41286a29030037030020024188016a41206a200029030037030020024188016a41186a200529030037030020024188016a41106a200829030037030020024188016a41086a2004290300370300200220022903e003370388010b20030d02200141206a2101201341606a22130d000b0b0240201241ffffff3f71450d002011102e0b41002118410021190c010b20024188026a41386a220020024188016a41386a29030037030020024188026a41306a220420024188016a41306a29030037030020024188026a41286a220520024188016a41286a29030037030020024188026a41206a220820024188016a41206a29030037030020024188026a41186a220720024188016a41186a29030037030020024188026a41106a220920024188016a41106a29030037030020024188026a41086a220c20024188016a41086a290300370300200241e8046a41086a221620024188056a41086a28020036020020022002290388013703880220022002290388053703e804200241e0026a41086a2217200c290300370300200241e0026a41106a220c2009290300370300200241e0026a41186a22092007290300370300200241e0026a41206a22072008290300370300200241e0026a41286a22082005290300370300200241e0026a41306a22052004290300370300200241e0026a41386a22042000290300370300200241f8046a41086a2200201628020036020020022002290388023703e002200220022903e8043703f80441d000102c220b450d05200b20022903e002370300200b2003360240200b20022903f804370244200b41386a2004290300370300200b41306a2005290300370300200b41286a2008290300370300200b41206a2007290300370300200b41186a2009290300370300200b41106a200c290300370300200b41086a2017290300370300200b41cc006a20002802003602000240024020134120470d0041012119410121180c010b200141206a2109201441606a211a200241bc056a2117200241e0036a41206a210041012119410121180340200921010340200241b8036a41186a2204200141186a2203290000370300200241b8036a41106a2208200141106a2205290000370300200241b8036a41086a2207200141086a2209290000370300200220012900003703b803200241c8006a41186a220c2003290000370300200241c8006a41106a22132005290000370300200241c8006a41086a2216200929000037030020022001290000370348200241e0036a41186a22032004290300370300200241e0036a41106a22052008290300370300200241e0036a41086a22082007290300370300200220022903b8033703e00320024198056a200241e0036a10bf01200241286a41186a2207200c290300370300200241286a41106a22092013290300370300200241286a41086a220c2016290300370300200220022903483703280240024020022802b80522040d00410021040c010b2000200229039805370300200041186a20024198056a41186a290300370300200041106a20024198056a41106a290300370300200041086a20024198056a41086a29030037030020032007290300370300200520092903003703002008200c29030037030020024188056a41086a201741086a280200360200200220022903283703e003200220172902003703880520024188016a41386a200241e0036a41386a29030037030020024188016a41306a200241e0036a41306a29030037030020024188016a41286a200241e0036a41286a29030037030020024188016a41206a200029030037030020024188016a41186a200329030037030020024188016a41106a200529030037030020024188016a41086a2008290300370300200220022903e003370388010b024020040d002014200141206a2201470d010c030b0b20024188026a41386a220720024188016a41386a29030037030020024188026a41306a220920024188016a41306a29030037030020024188026a41286a220c20024188016a41286a29030037030020024188026a41206a221320024188016a41206a29030037030020024188026a41186a221620024188016a41186a29030037030020024188026a41106a221b20024188016a41106a29030037030020024188026a41086a221520024188016a41086a290300370300200241e8046a41086a221c20024188056a41086a28020036020020022002290388013703880220022002290388053703e804200241e0026a41086a221d2015290300370300200241e0026a41106a2215201b290300370300200241e0026a41186a221b2016290300370300200241e0026a41206a22162013290300370300200241e0026a41286a2213200c290300370300200241e0026a41306a220c2009290300370300200241e0026a41386a22092007290300370300200241f8046a41086a2207201c28020036020020022002290388023703e002200220022903e8043703f8042008201d290300370300200520152903003703002003201b29030037030020002016290300370300200241e0036a41286a22162013290300370300200241e0036a41306a2213200c290300370300200241e0036a41386a220c2009290300370300200220022903e0023703e00320024198056a41086a221b2007280200360200200220022903f80437039805024020182019470d00201941016a22072019490d07201941017422092007200920074b1b22074104200741044b1bad42d0007e2206422088a74541037421072006a721090240024020190d0020024100360288010c010b20024108360290012002200b360288012002201941d0006c36028c010b20024188026a2009200720024188016a107d20022802900221072002280288024101460d04200228028c02210b200741d0006e21190b200141206a2109200b201841d0006c6a220720022903e003370300200529030021062003290300210a2000290300210d2016290300210e2013290300211e200c290300211f2008290300212020072004360240200741086a2020370300200741386a201f370300200741306a201e370300200741286a200e370300200741206a200d370300200741186a200a370300200741106a20063703002007200229039805370244200741cc006a201b280200360200201841016a2118201a2001470d000b0b201241ffffff3f71450d002011102e0b200220183602a0052002201936029c052002200b36029805200241e0036a20024198056a10a30341002101024020022802e0034101460d00200241b8036a41206a20024188046a280200360200200241b8036a41186a200241e0036a41206a290300370300200241b8036a41106a200241e0036a41186a290300370300200241b8036a41086a200241e0036a41106a2903003703002002200241e0036a41086a2903003703b8032002418c046a2802002101200241e0026a20024190046a41d80010e9081a0b20024198056a41086a2200200241b8036a41086a29030037030020024198056a41106a2204200241b8036a41106a29030037030020024198056a41186a2203200241b8036a41186a29030037030020024198056a41206a2205200241b8036a41206a280200360200200220022903b80337039805200241e0036a200241e0026a41d80010e9081a02402001450d0020024188016a41206a200528020036020020024188016a41186a200329030037030020024188016a41106a200429030037030020024188016a41086a200029030037030020022002290398053703880120024188026a200241e0036a41d80010e9081a200241ac016a2001360200200241b0016a20024188026a41d80010e9081a200241e0036a41186a200241e8006a41186a290300370300200241e0036a41106a200241e8006a41106a290300370300200241e0036a41086a200241e8006a41086a290300370300200220022903683703e003200241e0026a20024188016a41e7e485f306200241e0036a10e40720022902e402210620022802e002210420024188016a10b80220040d020b4100210120024100360288010c020b2007450d020c030b200241e8036a2006370300200220183602f003200220043602e4032002200f410020101b3602e00320024188016a200241e0036a1097022006a7210302402006422088a72201450d002001410c6c21002004210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b02402003450d002003410c6c450d002004102e0b024020022802880122010d00410021010c010b20024190016a2802002100200228028c0121030b4101102c2204450d01200242013702e403200220043602e0030240024020010d00200241003a008801200241e0036a20024188016a410110740c010b200241013a008801200241e0036a20024188016a410110742000200241e0036a1076200241e0036a2001200010740b20023502e803210620023502e003210a02402001450d002003450d002001102e0b200241d0056a24002006422086200a840f0b1038000b1036000b20024194016a410f360200200241f4036a4102360200200242023702e403200241a0a7c9003602e0032002410436028c012002419cadc90036028801200220024188016a3602f0032002200241c8056a36029001200241e0036a41b0a7c9001044000b891003037f017e067f230041e0016b220424000240024002400240024002400240024002400240200141e0006a22052001413c6a412010ec08450d00200441d0006a41186a200541186a290000370300200441d0006a41106a200541106a290000370300200441d0006a41086a200541086a2900003703002004200529000037035002402001200441d0006a10af022206450d00200628020c41004a0d010b200441206a41086a2201200541086a290000370300200441206a41106a2203200541106a290000370300200441206a41186a2202200541186a290000370300200420052900003703204130102c2205450d01200541003a00002005200429032037000120052004290050370021200541096a2001290300370000200541116a2003290300370000200541196a2002290300370000200541286a2201200441d7006a2900003700000240024020052d00000e040a0a000a010b200541086a280200450d09200541046a280200102e0c090b2001280200450d08200541246a280200102e0c080b2004410036020c20042005360208200441bc81ca0036020420042001360200200442003703182004420437031020044188016a4120360200200420033602840120042002360280014124102c2205450d00200442243702a401200420053602a001200441a0016a20044180016a410410744120200441a0016a1076200441a0016a200341201074200441d0006a200420042802a001220120042802a801200441106a10a702024002400240024020042802504101470d0002400240200428025422052d00000e0403030003010b200541086a280200450d02200541046a280200102e0c020b200541286a280200450d01200541246a280200102e0c010b20042802542202450d0102400240200441d8006a2903002207422088a741044f0d00410021050c010b20022800002103410121050b2007a7450d022002102e0c020b2005102e0b410021050b024020042802a401450d002001102e0b0240024002402005450d0020042003360244200441d0006a2004200441c4006a4104200441106a10a702024020042802504101470d0002400240200428025422052d00000e040a0a000a010b200541086a280200450d09200541046a280200102e0c090b200541286a280200450d08200541246a280200102e0c080b20042802542202450d08200441d8006a29030021072004200236024820042007422088a7220636024c41002105200441003a00702006417f6a210102400240034020062005460d01200441d0006a20056a200220056a22032d00003a00002004200341016a3602482004200541016a22033a00702004200136024c2001417f6a21012003210520034120470d000b200441a0016a41086a2205200441d0006a41086a290300370300200441a0016a41106a2201200441d0006a41106a290300370300200441a0016a41186a2206200441d0006a41186a290300370300200420042903503703a001200341ff0171411f4b0d010c030b200541ff0171450d02200441003a0070410021050c030b200441206a41086a2005290300370300200441206a41106a2001290300370300200441206a41186a2006290300370300200420042903a001370320200441d0006a200441c8006a10850520042802702205450d01200441f4006a28020021010c020b200041003602000c080b410021050b02402007a7450d002002102e0b2005450d0502402001450d00200141306c450d002005102e0b2004280214210820042802102109200442043703102004280218210620044100360218200641306c220a41306d2202ad420c7e2207422088a70d032007a72201417f4c0d034104210502402001450d002001102c2205450d010b2000200536020041002103200041086a4100360200200041046a2001410c6e220b36020002400240200b20024f0d00200b410174220c2002200c20024b1b220c4104200c41044b1bad420c7e2207422088a745410274210c2007a7210d024002402001410b4b0d00200441003602500c010b200441d8006a4104360200200420053602502004200b410c6c3602540b200441a0016a200d200c200441d0006a107d200441a8016a280200210120042802a0014101460d01200020042802a4012205360200200041046a2001410c6e3602000b20060d02200921010c030b2001450d030b1036000b2009200a6a210a200641306c2102200941306a2101200641047441706a41047641016a210b4100210302400340200141546a2802002206450d01200541046a200141586a290200370200200520063602002005410c6a2105200141306a2101200341016a2103200241506a22020d000b200a2101200b21030b200a20016b220a41306d21020b200041086a20033602000240200a450d00200241306c2103200141086a2105034002402005280200450d002005417c6a280200102e0b200541306a2105200341506a22030d000b0b02402008450d00200841306c450d002009102e0b20042802102103024020042802182205450d00200541306c2101200341086a2105034002402005280200450d002005417c6a280200102e0b200541306a2105200141506a22010d000b0b20042802142205450d05200541306c450d052003102e0c050b1038000b2005102e0b200041003602000b20042802102103024020042802182205450d00200541306c2101200341086a2105034002402005280200450d002005417c6a280200102e0b200541306a2105200141506a22010d000b0b20042802142205450d01200541306c450d012003102e0c010b2005102e200041003602000b200441e0016a24000b8c0804057f017e037f017e230041c0016b22022400024020010d0020024198016a41186a2203420037030020024198016a41106a2204420037030020024198016a41086a220542003703002002420037039801200241f0006a41a8f8c60041041081022005200241f0006a41086a22012900003703002002200229007037039801200241f0006a41a58bc500410b1081022003200129000037030020042002290070370300200220024198016a10a2042002280200210620022902042107200241186a22084200370300200241106a22094200370300200241086a220a420037030020024200370300200241f0006a41a8f8c6004104108102200a200129000037030020022002290070370300200241f0006a41c28cc500410a1081022008200129000037030020092002290070370300200241f0006a200210a30420022d00702101200320024189016a290000370300200420024181016a2900003703002005200241f9006a29000037030020022002290071370398012007420020061b21072006410820061b21080240024020014101460d00200241d0006a41186a4200370300200241d0006a41106a4200370300200241d0006a41086a4200370300200242003703500c010b200241d0006a41186a2003290300370300200241d0006a41106a2004290300370300200241d0006a41086a200529030037030020022002290398013703500b200241246a2007370200200241186a4204370300200241346a200241d0006a41086a2903003702002002413c6a200241e0006a290300370200200241c4006a200241d0006a41186a29030037020020024201370310200242e012370308200242f02e3703002002200229035037022c200241023a004c200220083602202002410036027820024201370370200242f02e37039801200241f0006a20024198016a41081074200242e01237039801200241f0006a20024198016a410810742002420137039801200241f0006a20024198016a410810742002420437039801200241f0006a20024198016a410810742007422088a72201200241f0006a10762007a721030240200141286c2201450d00200820016a2106200821010340200241f0006a2001412010742002200141206a29030037039801200241f0006a20024198016a41081074200141286a22012006470d000b0b200241f0006a2002412c6a41201074200241023a009801200241f0006a20024198016a41011074200235027021072002350278210b02402003450d00200341286c450d002008102e0b200241c0016a2400200b4220862007840f0b200241fc006a410f360200200241146a410236020020024202370204200241a0a7c90036020020024104360274200241c0adc9003602702002200241f0006a3602102002200241b8016a360278200241b0a7c9001044000b820402047f027e230041f0006b22022400024002400240024020010d00200241d0006a22014200370300200241c8006a22034200370300200241386a41086a2204420037030020024200370338200241386a41a8f8c6004104108102200241d8006a41fa8bc500410a1081022001200241d8006a41086a220529000037030020032002290058370300200241286a200241386a108503200241186a2002290330420020022802281b420042e012420010e808200229032050450d012002290318210620014200370300200342003703002004420037030020024200370338200241386a41a8f8c6004104108102200241d8006a41e38bc500410b1081022001200529000037030020032002290058370300200241086a200241386a10850320062002290310420020022802081b7c22072006540d024108102c2201450d032002420837023c2002200136023820022007370358200241386a200241d8006a410810742002350240210620023502382107200241f0006a240020072006422086840f0b200241e4006a410f360200200241cc006a41023602002002420237023c200241a0a7c9003602382002410436025c200241d8adc9003602582002200241d8006a3602482002200241e8006a360260200241386a41b0a7c9001044000b41e8b2c40041fa0041e4b3c400105d000b41e8b2c40041fa0041f4b3c400105d000b1036000be10c04047f017e037f027e23004190026b22022400024002400240024020010d00200241e8016a41186a22034200370300200241e8016a41106a22014200370300200241e8016a41086a22044200370300200242003703e801200241c8006a41a8f8c60041041081022004200241c8006a41086a2205290000370300200220022900483703e801200241c8006a41fa8bc500410a1081022003200529000037030020012002290048370300200241386a200241e8016a1085032002290340210620022802382107200241c8006a41186a22084200370300200241c8006a41106a220942003703002005420037030020024200370348200241c8006a41a8f8c6004104108102200241e8016a41fa8bc500410a10810220082004290000370300200920022900e801370300200241286a200241c8006a108503200241186a2002290330420020022802281b420042e012420010e808200229032050450d012002290318210a200342003703002001420037030020044200370300200242003703e801200241c8006a41a8f8c600410410810220042005290000370300200220022900483703e801200241c8006a41e38bc500410b108102200141086a200529000037000020012002290048370000200241086a200241e8016a108503200a2002290310420020022802081b7c220b200a540d02200241e8016a41186a22054200370300200241e8016a41106a22034200370300200241e8016a41086a22044200370300200242003703e801200241c8006a41a8f8c60041041081022004200241c8006a41086a2208290000370300200220022900483703e801200241c8006a41a58bc500410b108102200141086a200829000037000020012002290048370000200241c8006a200241e8016a10a20420022802482109200229024c210a200542003703002003420037030020044200370300200242003703e801200241c8006a41a8f8c600410410810220042008290000370300200220022900483703e801200241c8006a41c28cc500410a1081022005200829000037030020032002290048370300200241c8006a200241e8016a10a30420022d004821082005200241e1006a2900003703002003200241d9006a2900003703002004200241d1006a290000370300200220022900493703e8010240024020084101460d00200241a8016a41186a4200370300200241a8016a41106a4200370300200241a8016a41086a4200370300200242003703a8010c010b200241a8016a41186a2005290300370300200241a8016a41106a2003290300370300200241a8016a41086a2004290300370300200220022903e8013703a8010b200241e8016a41186a4200370300200241e8016a41106a4200370300200241e8016a41086a22044200370300200242003703e801200241c8006a41a8f8c60041041081022004200241c8006a41086a2205290000370300200220022900483703e801200241c8006a418c8bc500410b108102200141086a200529000037000020012002290048370000200241c8006a200241e8016a10b005200241d8016a41086a22012005290300370300200220022903483703d801200220022800593602d0012002200241dc006a2800003600d30120022d005822054103460d0320042001290300370300200241fc006a200a420020091b220a3702002002418c016a200241a8016a41086a29030037020020024194016a200241a8016a41106a2903003702002002419c016a200241a8016a41186a290300370200200220022903d8013703e801200220022802d0013602c801200220022800d3013600cb0120022009410820091b2203360278200242e0123703582002200b37035020022006420020071b370348200220022903a80137028401200241e8006a2004290300370300200220022903e801370360200241c8006a41286a20053a0000200241f4006a20022800cb01360000200241f1006a20022802c801360000200241c8006a10cf0421060240200aa72201450d00200141286c450d002003102e0b20024190026a240020060f0b200241f4016a410f360200200241dc006a41023602002002420237024c200241a0a7c900360248200241043602ec01200241f4adc9003602e8012002200241e8016a360258200220024188026a3602f001200241c8006a41b0a7c9001044000b41e8b2c40041fa0041e4b3c400105d000b41e8b2c40041fa0041f4b3c400105d000b41a8b6c40041c8004180b7c400105d000bde0d05047f027e027f017e047f23004190026b220224000240024002400240024020010d0020024180026a22034200370300200241f8016a22014200370300200241e8016a41086a22044200370300200242003703e801200241306a41a8f8c60041041081022004200241306a41086a2205290000370300200220022900303703e801200241306a41fa8bc500410a1081022003200529000037030020012002290030370300200241206a200241e8016a1085032002290328420020022802201b220642017c22072006540d01200241106a2007420042e012420010e808200229031850450d022002290310210620024180026a22054200370300200241f8016a22084200370300200241e8016a41086a22034200370300200242003703e801200241306a41a8f8c60041041081022003200241306a41086a2204290000370300200220022900303703e801200241306a41e38bc500410b108102200141086a22092004290000370000200120022900303700002002200241e8016a10850320062002290308420020022802001b7c220a2006540d03200542003703002008420037030020034200370300200242003703e801200241306a41a8f8c600410410810220032004290000370300200220022900303703e801200241306a41ba8bc500410f1081022009200429000037000020012002290030370000200241306a200241e8016a10a2042002280230210920022902342106200542003703002008420037030020034200370300200242003703e801200241306a41a8f8c600410410810220032004290000370300200220022900303703e801200241306a41978bc500410e1081022005200429000037030020082002290030370300200241306a200241e8016a10a30420022d003021042005200241c9006a2900003703002008200241c1006a2900003703002003200241396a290000370300200220022900313703e8010240024020044101460d00200241a8016a4200370300200241a0016a420037030020024198016a420037030020024200370390010c010b20024190016a41186a200241e8016a41186a29030037030020024190016a41106a200241e8016a41106a29030037030020024190016a41086a200241e8016a41086a290300370300200220022903e801370390010b20024180026a22084200370300200241f8016a220b4200370300200241e8016a41086a22044200370300200242003703e801200241306a41a8f8c60041041081022004200241306a41086a2203290000370300200220022900303703e801200241306a41d48bc500410f108102200141086a220c200329000037000020012002290030370000200241306a200241e8016a10b005200241c0016a41086a220d2003290300370300200220022903303703c001200220022800413602b8012002200241c4006a220e2800003600bb010240024020022d004022054103470d0020084200370300200b420037030020044200370300200242003703e801200241306a41a8f8c600410410810220042003290000370300200220022900303703e801200241306a418c8bc500410b108102200c200329000037000020012002290030370000200241306a200241e8016a10b005200241d8016a41086a2003290300370300200220022903303703d801200220022800413602d0012002200e2800003600d30120022d004022054103460d06200241e8016a41086a200241d8016a41086a290300370300200220022903d8013703e801200220022802d0013602b001200220022800d3013600b3010c010b2004200d290300370300200220022903c0013703e801200220022802b8013602b001200220022800bb013600b3010b200241e4006a2006420020091b2206370200200241f4006a20024190016a41086a290300370200200241fc006a200241a0016a29030037020020024184016a200241a8016a290300370200200241d0006a200241e8016a41086a29030037030020022009410820091b2203360260200242e0123703402002200a37033820022007370330200220022903900137026c200220022903e801370348200241306a41286a20053a0000200241d9006a20022802b001360000200241dc006a20022800b301360000200241306a10cf04210702402006a72201450d00200141286c450d002003102e0b20024190026a240020070f0b200241f4016a410f360200200241c4006a410236020020024202370234200241a0a7c900360230200241043602ec012002418caec9003602e8012002200241e8016a360240200220024188026a3602f001200241306a41b0a7c9001044000b41a8b5c40041ef004198b6c400105d000b41e8b2c40041fa0041e4b3c400105d000b41e8b2c40041fa0041f4b3c400105d000b41a8b6c40041c80041f0b6c400105d000b902508047f017e037f017e027f027e0f7f037e230041d0056b22022400024020014108490d00200241003a008004200041d4e2cc0020011b41086a2103200141786a2104410021010340200241003a008801024020042001470d00200141ff0171450d02200241003a0080040c020b200241e0036a20016a200320016a2d00003a00002002200141016a22003a0080042000210120004120470d000b20024188016a41186a2201200241e0036a41186a29030037030020024188016a41106a2203200241e0036a41106a29030037030020024188016a41086a2205200241e0036a41086a290300370300200220022903e00337038801200041ff01714120490d00200241286a41086a2005290300370300200241286a41106a2003290300370300200241286a41186a2001290300370300200220022903880122063703482002200637032820042000470d00200241e0036a41186a2205200241286a41186a22072903002206370300200241e0036a41106a2208200241286a41106a2209290300220a3703004108210b200241e0036a41086a2204200241286a41086a220c290300220d37030020022002290328220e3703e003200241086a41186a2006370300200241086a41106a200a370300200241086a41086a200d3703002002200e370308200241e8006a41186a2006370300200241e8006a41106a200a370300200241e8006a41086a200d3703002002200e3703682007420037030020094200370300200c420037030020024200370328200241e0036a41a081ca004107108102200c2004290000370300200220022900e003370328200241e0036a41e4d1c100410c10810220072004290000370300200920022900e0033703002002200241286a4120108e022002280204210f200228020021102007420037030020094200370300200c420037030020024200370328200241e0036a41a081ca004107108102200c2004290000370300200220022900e003370328200241e0036a41f09dc500410a10810220072004290000370300200920022900e003370300200241e0036a200241286a10880320022802e0032201410120011b211120022902e403420020011b2206a72112024002400240024002400240024002402006422088a72201450d002011200141057422136a2114200241bc056a2115200241e0036a41206a2100201121010340200241b8036a41186a2203200141186a2216290000370300200241b8036a41106a2217200141106a2218290000370300200241b8036a41086a2219200141086a221a290000370300200220012900003703b803200241c8006a41086a221b201a290000370300200241c8006a41106a221a2018290000370300200241c8006a41186a2218201629000037030020022001290000370348200520032903003703002008201729030037030020042019290300370300200220022903b8033703e00320024198056a200241e0036a10bf01200720182903003703002009201a290300370300200c201b290300370300200220022903483703280240024020022802b80522030d00410021030c010b2000200229039805370300200041186a20024198056a41186a290300370300200041106a20024198056a41106a290300370300200041086a20024198056a41086a29030037030020052007290300370300200820092903003703002004200c29030037030020024188056a41086a201541086a280200360200200220022903283703e003200220152902003703880520024188016a41386a200241e0036a41386a29030037030020024188016a41306a200241e0036a41306a29030037030020024188016a41286a200241e0036a41286a29030037030020024188016a41206a200029030037030020024188016a41186a200529030037030020024188016a41106a200829030037030020024188016a41086a2004290300370300200220022903e003370388010b20030d02200141206a2101201341606a22130d000b0b0240201241ffffff3f71450d002011102e0b41002118410021190c010b20024188026a41386a220020024188016a41386a29030037030020024188026a41306a220420024188016a41306a29030037030020024188026a41286a220520024188016a41286a29030037030020024188026a41206a220820024188016a41206a29030037030020024188026a41186a220720024188016a41186a29030037030020024188026a41106a220920024188016a41106a29030037030020024188026a41086a220c20024188016a41086a290300370300200241e8046a41086a221620024188056a41086a28020036020020022002290388013703880220022002290388053703e804200241e0026a41086a2217200c290300370300200241e0026a41106a220c2009290300370300200241e0026a41186a22092007290300370300200241e0026a41206a22072008290300370300200241e0026a41286a22082005290300370300200241e0026a41306a22052004290300370300200241e0026a41386a22042000290300370300200241f8046a41086a2200201628020036020020022002290388023703e002200220022903e8043703f80441d000102c220b450d05200b20022903e002370300200b2003360240200b20022903f804370244200b41386a2004290300370300200b41306a2005290300370300200b41286a2008290300370300200b41206a2007290300370300200b41186a2009290300370300200b41106a200c290300370300200b41086a2017290300370300200b41cc006a20002802003602000240024020134120470d0041012119410121180c010b200141206a2109201441606a211a200241bc056a2117200241e0036a41206a210041012119410121180340200921010340200241b8036a41186a2204200141186a2203290000370300200241b8036a41106a2208200141106a2205290000370300200241b8036a41086a2207200141086a2209290000370300200220012900003703b803200241c8006a41186a220c2003290000370300200241c8006a41106a22132005290000370300200241c8006a41086a2216200929000037030020022001290000370348200241e0036a41186a22032004290300370300200241e0036a41106a22052008290300370300200241e0036a41086a22082007290300370300200220022903b8033703e00320024198056a200241e0036a10bf01200241286a41186a2207200c290300370300200241286a41106a22092013290300370300200241286a41086a220c2016290300370300200220022903483703280240024020022802b80522040d00410021040c010b2000200229039805370300200041186a20024198056a41186a290300370300200041106a20024198056a41106a290300370300200041086a20024198056a41086a29030037030020032007290300370300200520092903003703002008200c29030037030020024188056a41086a201741086a280200360200200220022903283703e003200220172902003703880520024188016a41386a200241e0036a41386a29030037030020024188016a41306a200241e0036a41306a29030037030020024188016a41286a200241e0036a41286a29030037030020024188016a41206a200029030037030020024188016a41186a200329030037030020024188016a41106a200529030037030020024188016a41086a2008290300370300200220022903e003370388010b024020040d002014200141206a2201470d010c030b0b20024188026a41386a220720024188016a41386a29030037030020024188026a41306a220920024188016a41306a29030037030020024188026a41286a220c20024188016a41286a29030037030020024188026a41206a221320024188016a41206a29030037030020024188026a41186a221620024188016a41186a29030037030020024188026a41106a221b20024188016a41106a29030037030020024188026a41086a221520024188016a41086a290300370300200241e8046a41086a221c20024188056a41086a28020036020020022002290388013703880220022002290388053703e804200241e0026a41086a221d2015290300370300200241e0026a41106a2215201b290300370300200241e0026a41186a221b2016290300370300200241e0026a41206a22162013290300370300200241e0026a41286a2213200c290300370300200241e0026a41306a220c2009290300370300200241e0026a41386a22092007290300370300200241f8046a41086a2207201c28020036020020022002290388023703e002200220022903e8043703f8042008201d290300370300200520152903003703002003201b29030037030020002016290300370300200241e0036a41286a22162013290300370300200241e0036a41306a2213200c290300370300200241e0036a41386a220c2009290300370300200220022903e0023703e00320024198056a41086a221b2007280200360200200220022903f80437039805024020182019470d00201941016a22072019490d07201941017422092007200920074b1b22074104200741044b1bad42d0007e2206422088a74541037421072006a721090240024020190d0020024100360288010c010b20024108360290012002200b360288012002201941d0006c36028c010b20024188026a2009200720024188016a107d20022802900221072002280288024101460d04200228028c02210b200741d0006e21190b200141206a2109200b201841d0006c6a220720022903e003370300200529030021062003290300210a2000290300210d2016290300210e2013290300211e200c290300211f2008290300212020072004360240200741086a2020370300200741386a201f370300200741306a201e370300200741286a200e370300200741206a200d370300200741186a200a370300200741106a20063703002007200229039805370244200741cc006a201b280200360200201841016a2118201a2001470d000b0b201241ffffff3f71450d002011102e0b200220183602a0052002201936029c052002200b36029805200241e0036a20024198056a10a30341002101024020022802e0034101460d00200241b8036a41206a20024188046a280200360200200241b8036a41186a200241e0036a41206a290300370300200241b8036a41106a200241e0036a41186a290300370300200241b8036a41086a200241e0036a41106a2903003703002002200241e0036a41086a2903003703b8032002418c046a2802002101200241e0026a20024190046a41d80010e9081a0b20024198056a41086a2200200241b8036a41086a29030037030020024198056a41106a2204200241b8036a41106a29030037030020024198056a41186a2203200241b8036a41186a29030037030020024198056a41206a2205200241b8036a41206a280200360200200220022903b80337039805200241e0036a200241e0026a41d80010e9081a02402001450d0020024188016a41206a200528020036020020024188016a41186a200329030037030020024188016a41106a200429030037030020024188016a41086a200029030037030020022002290398053703880120024188026a200241e0036a41d80010e9081a200241ac016a2001360200200241b0016a20024188026a41d80010e9081a200241e0036a41186a200241e8006a41186a290300370300200241e0036a41106a200241e8006a41106a290300370300200241e0036a41086a200241e8006a41086a290300370300200220022903683703e003200241e0026a20024188016a41e2c289ab06200241e0036a10e40720022902e402210620022802e002210420024188016a10b80220040d020b4100210120024100360288010c020b2007450d020c030b200241e8036a2006370300200220183602f003200220043602e4032002200f410020101b3602e00320024188016a200241e0036a1097022006a7210302402006422088a72201450d002001410c6c21002004210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b02402003450d002003410c6c450d002004102e0b024020022802880122010d00410021010c010b20024190016a2802002100200228028c0121030b4101102c2204450d01200242013702e403200220043602e0030240024020010d00200241003a008801200241e0036a20024188016a410110740c010b200241013a008801200241e0036a20024188016a410110742000200241e0036a1076200241e0036a2001200010740b20023502e803210620023502e003210a02402001450d002003450d002001102e0b200241d0056a24002006422086200a840f0b1038000b1036000b20024194016a410f360200200241f4036a4102360200200242023702e403200241a0a7c9003602e0032002410436028c012002419cadc90036028801200220024188016a3602f0032002200241c8056a36029001200241e0036a41b0a7c9001044000be115020a7f027e230041d00b6b2202240020024280808080802037020c2002200136021c2002200041d4e2cc0020011b3602182002200241186a36020820024180086a200241086a1098020240024002400240024002402002418c086a2802002203450d00200241f0076a41086a20024180086a41086a28020036020020022002290380083703f00720024190086a280200210420024194086a280200210520024188076a20024198086a41e40010e9081a20024184096a280200210620024180086a4180016a2802002107200241fc086a280200210820024188066a20024188096a41800110e9081a2002200241086a10ad01024020022802000d0020022802082201280204220020022802042209490d002009417f4c0d030240024020090d004101210a0c010b20091032220a450d06200128020421000b024020002009490d00200a2001280200200910e9081a200128020422002009490d072001200020096b3602042001200128020020096a360200200241f8056a41086a200241f0076a41086a280200360200200220022903f0073703f80520024190056a20024188076a41e40010e9081a20024190046a20024188066a41800110e9081a0c030b200a102e0b02402005450d00200541246c21002003210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b02402004450d00200441246c450d002003102e0b02402006450d00200641246c21002008210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b2007450d00200741246c450d002008102e0b410021030b20024180046a41086a2201200241f8056a41086a280200360200200220022903f8053703800420024198036a20024190056a41e40010e9081a20024198026a20024190046a41800110e9081a2003450d0120024188026a41086a2001280200360200200220022903800437038802200241a0016a20024198036a41e40010e9081a200241206a20024198026a41800110e9081a0240024020022802082802040d0020024190056a41086a20024188026a41086a28020036020020022002290388023703900520024188066a200241a0016a41e40010e9081a20024180086a200241206a41800110e9081a0c010b02402005450d00200541246c21002003210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b02402004450d00200441246c450d002003102e0b02402006450d00200641246c21002008210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b02402007450d00200741246c450d002008102e0b410021032009450d00200a102e0b2003450d01200241f0076a41086a220120024190056a41086a28020036020020022002290390053703f00720024188076a20024188066a41e40010e9081a20024190046a20024180086a41800110e9081a200241a0016a41086a2001280200360200200220022903f0073703a001200241206a20024188076a41e40010e9081a20024188066a20024190046a41800110e9081a20022009360294052002200a3602900520024180086a20024190056a10f7010240024020022802840822010d00410021010c010b20024198026a41086a20024190086a28020036020020022002290388083703980220022802800821000b02402009450d00200a102e0b200241f8056a41086a220920024198026a41086a220a28020036020020022002290398023703f805024002402001450d0020024198036a41086a220b2009280200360200200220022903f8053703980320024180086a20024198026a41e80010e9081a200241a8096a2001360200200241a4096a2000360200200241a0096a4102360200200241f8086a20024190056a41086a220129030037030020024180086a4180016a200241a0056a29030037030020024188096a200241a8056a29030037030020024190096a200241b0056a290300370300200241ac096a200229039803370200200241b4096a200b280200360200200241023602980920022002290390053703f008200242023703e808200241c4096a2003360200200241c8096a2004360200200241cc096a2005360200200241c0096a200241a0016a41086a280200360200200241b8096a20022903a001370300200241d0096a200241206a41e40010e9081a200241bc0a6a2006360200200241b80a6a2007360200200241b40a6a2008360200200241c00a6a20024188066a41800110e9081a200220024180086a3602980220024190056a20024198026a109005200a200128020036020020022002290390053703980220024198026a10e8061a024020022903e8084202510d0020022d00800841ff01714102470d00200228028808450d00200228028408102e0b20024198096a108b02410121010c010b02402005450d00200541246c21002003210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b02402004450d00200441246c450d002003102e0b02402006450d00200641246c21002008210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b410021012007450d00200741246c450d002008102e0b4101102c2200450d02200242013702840820022000360280080240024020010d00200241003a00880620024180086a20024188066a410110740c010b200241013a00880620024180086a20024188066a410110740b200235028808210c200235028008210d200241d00b6a2400200d200c422086840f0b1038000b200241a4026a410f360200200241a4046a41023602002002420237029404200241a0a7c900360290042002410436029c02200241e4acc90036029802200220024198026a3602a0042002200241c80b6a3602a00220024190046a41b0a7c9001044000b1036000b2009200041b8b2c0001056000b901706057f017e017f037e157f017e230041c0006b22022400024002400240024002400240024002400240024020010d00200241306a22014200370300200241286a22034200370300200241186a41086a2204420037030020024200370318200241186a41b2fdc6004112108102200241086a41e9d8c80041041081022001200241086a41086a220529000037030020032002290008370300200241086a200241186a10ac0520022802082106200229020c210720014200370300200342003703002004420037030020024200370318200241186a41b2fdc6004112108102200241086a41b4d3c10041081081022001200529000037030020032002290008370300200241086a200241186a10ac052006410120061b21080240024002402007420020061b2209a7220420094220882207a722016b200229020c4200200228020822031b220a422088220ba722064f0d00200120066a22052001490d0c200441017422012005200120054b1b22014104200141044b1b220141ffffff3f712001462105200141057421010240024020040d00200241003602180c010b200241206a4101360200200220083602182002200441057436021c0b200241086a20012005200241186a107d200241106a280200210420022802084101460d01200228020c210820094220882207a721012004410576ad21090b200820014105746a2003410120031b2201200641057410e9081a2007200b7c21070240200a42ffffff3f83500d002001102e0b2007a7220c41144b0d01200c41014b0d050c080b2004450d0a0c090b200c410176220141ffffff3f712001470d092001410574220d417f4c0d09200d102c220e450d08200841606a210f200841a07f6a2110410421114100211241002113200c2114034020142115410021144101210602402015417f6a2204450d00024002400240024002400240200820044105746a2015410574221620086a41406a412010ec084100480d002015417e6a2104201020166a210141002114410021030340024020042003470d00201521060c080b200341016a2103200141206a2001412010ec082106200141606a21012006417f4a0d000b200341016a21062003417f7320156a21040c010b201020166a210102400340024020044101470d00410021040c020b2004417f6a2104200141206a2001412010ec082103200141606a210120034100480d000b0b20152004490d012015200c4b0d02201520046b22064101762205450d00200f20166a2101200820044105746a21030340200241186a41186a2216200341186a2217290000370300200241186a41106a2218200341106a2219290000370300200241186a41086a221a200341086a221b29000037030020022003290000370318200141086a221c2900002107200141106a221d290000210a200141186a221e290000210b200320012900003700002017200b3700002019200a370000201b2007370000201e2016290300370000201d2018290300370000201c201a29030037000020012002290318370000200141606a2101200341206a21032005417f6a22050d000b0b024020040d00200421140c050b0240200641094d0d00200421140c050b2015200c4b0d02201520046b21062004417f6a2101200f20044105746a2103034020152001490d082003200641016a220610eb062001417f6a220420014f0d04200341606a2103200421012006410a490d000c040b0b2004201541e4d1cc001057000b2015200c41e4d1cc00104d000b20152004417f6a2201490d042015200c41f4d1cc00104d000b200441016a21140b024020132012470d00201241016a22012012490d0b201241017422032001200320014b1b22014104200141044b1b220141ffffffff01712001464102742103200141037421010240024020120d00200241003602180c010b20024104360220200220113602182002201241037436021c0b200241086a20012003200241186a107d20022802102101024020022802084101470d0020010d0b0c0c0b200228020c2111200141037621120b201120134103746a2201200636020420012014360200201341016a221e21130240201e4102490d00024002400240034002400240024002402011201e2213417f6a221e4103746a2201280200450d00201341037420116a220541746a2802002204200128020422034d0d00201341024d0d0820112013417d6a22014103746a2802042206200320046a4d0d01201341034d0d08200541646a280200200620046a4b0d080c010b20134103490d012001280204210320112013417d6a22014103746a28020421060b20062003490d010b2013417e6a21010b02402013200141016a22154d0d00201320014d0d02201120014103746a221b280204221f201b2802006a2201201120154103746a221c280200221d490d032001200c4b0d04201b41046a21202008201d4105746a2219201c280204221a41057422036a210420014105742106024002402001201d6b2216201a6b2201201a490d00200e2019200310e908221820036a210502400240201a4101480d002016201a4a0d010b20192101201821030c020b200820066a21172018210320192101034020012004200320042003412010ec0841004822161b2206290000370000200141186a200641186a290000370000200141106a200641106a290000370000200141086a200641086a2900003700002003200341206a20161b2103200141206a2101200441206a200420161b220420174f0d02200520034b0d000c020b0b200e20042001410574220310e908221820036a210502400240201a4101480d00200141014e0d010b20042101201821030c010b200f20066a2106200421010340200141606a2103200541606a210420062003200420042003412010ec0841004822171b2216290000370000200641186a201641186a290000370000200641106a201641106a290000370000200641086a201641086a2900003700002005200420171b2105024020192003200120171b2201490d00201821030c020b200641606a21062018210320182005490d000b0b20012003200520036b41607110e9081a2020201f201a6a360200201b201d360200201c201c41086a20132015417f736a41037410ea081a41012113201e41014d0d050c010b0b201520134184d2cc00103c000b200120134194d2cc00103c000b201d200141a4d2cc001057000b2001200c41a4d2cc00104d000b2014450d030c000b0b200241146a410f3602002002412c6a41023602002002420237021c200241a0a7c9003602182002410436020c200241a0aec9003602082002200241086a3602282002200241386a360210200241186a41b0a7c9001044000b2001201541f4d1cc001057000b0240201241ffffffff0171450d002011102e0b200d450d01200e102e0c010b2008200c417e6a22014105746a21034102210603402001200c4b0d022003200610eb06200341606a2103200641016a21062001417f6a2201417f470d000b0b200c4102490d01200841206a21014101210641012103034002402001200341057420086a220441606a412010ec08450d00024020062003460d002001290000210720012004290000370000200141186a2205290000210a2005200441186a2216290000370000200141106a2205290000210b2005200441106a2217290000370000200141086a220529000021212005200441086a2218290000370000201820213700002017200b3700002016200a370000200420073700000b200341016a21030b200141206a2101200c200641016a2206470d000b2003200c4d0d0241c4f1c000412341e8f1c0001039000b2001200c41c4d1cc001056000b200c21030b20034105744104722201417f4c0d012001102c2206450d00200241003602202002200136021c200220063602182003200241186a107602402003450d0020034105742103200821010340200241186a200141201074200141206a2101200341606a22030d000b0b200235022021072002350218210a0240200942ffffff3f83500d002008102e0b200241c0006a24002007422086200a840f0b1036000b1038000b890e04027f017e027f017e230041a0036b2202240020024280808080802037020c200220013602ec022002200041d4e2cc0020011b22003602e8022002200241e8026a360208024002400240024002402001450d0020022001417f6a22013602ec022002200041016a3602e802024002400240024020002d00000e020100040b2002200241086a10ad0120022802000d0320022802ec02220320022802042200490d032000417f4c0d060240024020000d00410121010c010b200010322201450d0820022802ec0221030b20032000490d02200120022802e802200010e9081a20022802ec0222032000490d042002200320006b22033602ec02200220022802e80220006a3602e80220030d012000ad220442208620048421040c050b20010d02410021010c040b2000450d010b2001102e0b200241f4026a410f3602002002411c6a41023602002002420237020c200241a0a7c900360208200241043602ec02200241b4aec9003602e8022002200241e8026a360218200220024198036a3602f002200241086a41b0a7c9001044000b2000200341b8b2c0001056000b410021030240024020010d00410021050c010b2004422088a72200417f4c0d010240024020000d00410121050c010b2000102c2205450d030b20052001200010e9081a0b200241106a220620003602002002200036020c20022005360208200241c8016a41e7e485f306200241086a10ed070240024020010d000c010b2004422088a72200417f4c0d010240024020000d00410121030c010b2000102c2203450d030b20032001200010e9081a0b200620003602002002200036020c20022003360208200241e8016a41e2c289ab06200241086a10ee07410021030240024020010d00410021050c010b2004422088a72200417f4c0d010240024020000d00410121050c010b2000102c2205450d030b20052001200010e9081a0b200241106a220620003602002002200036020c2002200536020820024188026a41e9dabdf306200241086a10ee070240024020010d000c010b2004422088a72200417f4c0d010240024020000d00410121030c010b2000102c2203450d030b20032001200010e9081a0b200620003602002002200036020c20022003360208200241a8026a41f0c2c98b06200241086a10ee07410021050240024020010d00410021030c010b2004422088a72200417f4c0d010240024020000d00410121030c010b2000102c2203450d030b20032001200010e9081a0b200241086a41086a220620003602002002200036020c20022003360208200241c8026a41e1e69df306200241086a10ee070240024020010d00410021030c010b2004422088a72200417f4c0d010240024020000d00410121030c010b2000102c2203450d030b20032001200010e9081a200121050b20024188036a41086a20003602002002200036028c032002200336028803200241e8026a41e1ea91cb0620024188036a10ee072006200241c8016a41086a290300370300200241086a41106a200241c8016a41106a290300370300200241086a41186a200241c8016a41186a290300370300200241306a200241e8016a41086a290300370300200241386a200241e8016a41106a290300370300200241c0006a200241e8016a41186a290300370300200241d0006a20024188026a41086a290300370300200241d8006a20024188026a41106a290300370300200241e0006a20024188026a41186a290300370300200220022903c801370308200220022903e801370328200220022903880237034820024180016a200241a8026a41186a290300370300200241f8006a200241a8026a41106a290300370300200241f0006a200241a8026a41086a29030037030020024190016a200241c8026a41086a29030037030020024198016a200241c8026a41106a290300370300200241a0016a200241c8026a41186a290300370300200241b0016a200241e8026a41086a290300370300200241b8016a200241e8026a41106a290300370300200241c0016a200241e8026a41186a290300370300200220022903a802370368200220022903c80237038801200220022903e8023703a8012002420137038803200241003602900320024188036a200241086a4120107420024188036a200241086a41206a4120107420024188036a200241c8006a4120107420024188036a200241e8006a4120107420024188036a20024188016a4120107420024188036a200241a8016a4120107402402001450d002004a7450d002005102e0b200228029003220041046a2201417f4c0d0020022802880321030240024020010d00410121050c010b2001102c2205450d020b200241003602102002200136020c200220053602082000200241086a1076200241086a20032000107420023502102104200235020821070240200228028c03450d002003102e0b200241a0036a240020044220862007840f0b1038000b1036000bff0101067f230041c0006b2203240020032001360204200341086a200210dc08200341206a41186a2204200341046a200341086a41106a200341086a41086a2205200328020822064101461b2903001002220141186a290000370300200341206a41106a2207200141106a290000370300200341206a41086a2208200141086a290000370300200320012900003703202001102e200041186a2004290300370000200041106a2007290300370000200041086a20082903003700002000200329032037000002402006450d002005280200450d00200328020c102e0b024020022802002200450d00200241046a280200450d002000102e0b200341c0006a24000bff0101067f230041c0006b2203240020032001360204200341086a200210dc08200341206a41186a2204200341046a200341086a41106a200341086a41086a2205200328020822064101461b2903001007220141186a290000370300200341206a41106a2207200141106a290000370300200341206a41086a2208200141086a290000370300200320012900003703202001102e200041186a2004290300370000200041106a2007290300370000200041086a20082903003700002000200329032037000002402006450d002005280200450d00200328020c102e0b024020022802002200450d00200241046a280200450d002000102e0b200341c0006a24000bef1103037f017e017f230041c0036b220224002002428080808080203702cc012002200136020c2002200041d4e2cc0020011b3602082002200241086a3602c8012002200241c8016a10ad010240024002400240024020022802000d00200228020c220020022802042201490d002001417f4c0d040240024020010d00410121030c010b200110322203450d04200228020c21000b024020002001490d0020032002280208200110e9082104200228020c22002001490d032002200020016b36020c2002200228020820016a3602082004450d012001ad22054220862005842105200228020c450d022005a7450d010b2003102e0b200241146a410f360200200241dc016a4102360200200242023702cc01200241a0a7c9003602c8012002410436020c200241d4aec9003602082002200241086a3602d8012002200241b8036a360210200241c8016a41b0a7c9001044000b200220054220883e0294032002200436029003200241c8016a20024190036a109903024002400240024002400240024002400240024020022d00c8014101470d00410021010c010b200241086a200241c8016a41017241c00110e9081a200241c8016a200241086a41c00110e9081a4120102c2200450d0a200020022903c801370000200041186a200241c8016a41186a290300370000200041106a200241c8016a41106a290300370000200041086a200241c8016a41086a290300370000200241003602a80320024198036a41c0004104200241a8036a107d20024198036a41086a28020021062002280298034101460d01200228029c03220141e7e485f30636020c200142a08080808004370204200120003602004120102c2203450d0a200320022903e801370000200341186a20024180026a290300370000200341106a200241f8016a290300370000200341086a200241f0016a2903003700000240200641047622004101470d0020024290808080c0003702ac03200220013602a80320024198036a41c0004104200241a8036a107d20024198036a41086a28020021002002280298034101460d03200228029c032101200041047621000b200120033602102001411c6a41e2c289ab06360200200141146a42a080808080043702004120102c2203450d0a2003200229038802370000200341186a200241a0026a290300370000200341106a20024198026a290300370000200341086a20024190026a290300370000024020004102470d00200242a0808080c0003702ac03200220013602a80320024198036a41c0004104200241a8036a107d20024198036a41086a28020021002002280298034101460d04200228029c032101200041047621000b200120033602202001412c6a41e9dabdf306360200200141246a42a080808080043702004120102c2203450d0a200320022903a802370000200341186a200241c0026a290300370000200341106a200241b8026a290300370000200341086a200241b0026a290300370000024020004103470d00200242b0808080c0003702ac03200220013602a80320024198036a41e0004104200241a8036a107d20024198036a41086a28020021002002280298034101460d05200228029c032101200041047621000b200120033602302001413c6a41f0c2c98b06360200200141346a42a080808080043702004120102c2203450d0a200320022903c802370000200341186a200241e0026a290300370000200341106a200241d8026a290300370000200341086a200241d0026a290300370000024020004104470d00200242c0808080c0003702ac03200220013602a80320024198036a4180014104200241a8036a107d20024198036a41086a28020021002002280298034101460d06200228029c032101200041047621000b20012003360240200141cc006a41e1e69df306360200200141c4006a42a080808080043702004120102c2203450d0a200320022903e802370000200341186a20024180036a290300370000200341106a200241f8026a290300370000200341086a200241f0026a290300370000024020004105470d00200242d0808080c0003702ac03200220013602a80320024198036a41a0014104200241a8036a107d20024198036a41086a28020021002002280298034101460d07200228029c032101200041047621000b20012003360250200141dc006a41e1ea91cb06360200200141d4006a42a080808080043702000b02402005a7450d002004102e0b41e500410120011b2204102c2203450d09200241003602d001200220043602cc01200220033602c80120010d06200241003a0008200241c8016a200241086a4101107420022802c801210420022802d00121030c070b20060d080c090b2000450d080c070b2000450d070c060b2000450d060c050b2000450d050c040b2000450d040c030b200241013a0008200241c8016a200241086a410110744106200241c8016a10762001280200210420012802082203200241c8016a1076200241c8016a200420031074200241c8016a2001410c6a410410742001280210210420012802182203200241c8016a1076200241c8016a200420031074200241c8016a2001411c6a410410742001280220210420012802282203200241c8016a1076200241c8016a200420031074200241c8016a2001412c6a410410742001280230210420012802382203200241c8016a1076200241c8016a200420031074200241c8016a2001413c6a410410742001280240210420012802482203200241c8016a1076200241c8016a200420031074200241c8016a200141cc006a410410742001280250210420012802582203200241c8016a1076200241c8016a200420031074200241c8016a200141dc006a4104107420022802d001210320022802c80121040240200141046a280200450d002001280200102e0b0240200141146a280200450d002001280210102e0b0240200141246a280200450d002001280220102e0b0240200141346a280200450d002001280230102e0b0240200141c4006a280200450d002001280240102e0b0240200141d4006a280200450d002001280250102e0b200041ffffffff0071450d002001102e0b200241c0036a24002003ad4220862004ad840f0b2001200041b8b2c0001056000b1036000b1038000b9a0c02067f047e23004190026b22022400200241003a00800102402001450d002002200041d4e2cc0020011b22002d00003a0060200241013a008001024020014101460d00200220002d00013a0061200241023a00800120014102460d00200220002d00023a0062200241033a00800120014103460d00200220002d00033a0063200241043a00800120014104460d00200220002d00043a0064200241053a00800120014105460d00200220002d00053a0065200241063a00800120014106460d00200220002d00063a0066200241073a00800120014107460d00200220002d00073a0067200241083a00800120014108460d00200220002d00083a0068200241093a00800120014109460d00200220002d00093a00692002410a3a0080012001410a460d00200220002d000a3a006a2002410b3a0080012001410b460d00200220002d000b3a006b2002410c3a0080012001410c460d00200220002d000c3a006c2002410d3a0080012001410d460d00200220002d000d3a006d2002410e3a0080012001410e460d00200220002d000e3a006e2002410f3a0080012001410f460d00200220002d000f3a006f200241103a00800120014110460d00200220002d00103a0070200241113a00800120014111460d00200220002d00113a0071200241123a00800120014112460d00200220002d00123a0072200241133a00800120014113460d00200220002d00133a0073200241143a00800120014114460d00200220002d00143a0074200241153a00800120014115460d00200220002d00153a0075200241163a00800120014116460d00200220002d00163a0076200241173a00800120014117460d00200220002d00173a0077200241183a00800120014118460d00200220002d00183a0078200241193a00800120014119460d00200220002d00193a00792002411a3a0080012001411a460d00200220002d001a3a007a2002411b3a0080012001411b460d00200220002d001b3a007b2002411c3a0080012001411c460d00200220002d001c3a007c2002411d3a0080012001411d460d00200220002d001d3a007d2002411e3a0080012001411e460d00200220002d001e3a007e2002411f3a0080012001411f460d00200241106a2203200241e0006a41106a2204290300370300200241086a2205200241e0006a41086a2206290300370300200220002d001f3a007f200241186a2200200241e0006a41186a2207290300370300200241203a0080012002200229036022083703202002200837030020014120470d01200241206a41186a20002903002208370300200241206a41106a20032903002209370300200241206a41086a2005290300220a37030020022002290300220b37032020072008370300200420093703002006200a3703002002200b370360200241b8016a41d9fcc6004106108102200241c8016a41dcf1cb004107108102024002404120102c2201450d00200242203702ec01200220013602e801200241e8016a200241e0006a41201074200241f8016a20022802e801220120022802f001220010d8032002410c6a200120006a36020020022001360208200220024188026a3602042002200241f8016a360200200241d8016a2002107c024020022802ec01450d002001102e0b20022802e001220041206a2201417f4c0d010240024020010d00410121030c010b2001102c2203450d010b2002410036020820022001360204200220033602002002200241b8016a411010742002200241c8016a41101074200220022802d801220120001074024020022802dc01450d002001102e0b200241e0006a20022802002200200228020810c902200241a8016a28020021012002290360210802402002280204450d002000102e0b4104102c2200450d00200242043702642002200036026020022001410020084201511b360220200241e0006a200241206a41041074200235026821082002350260210920024190026a240020092008422086840f0b1036000b1038000b200241003a0080010b2002412c6a410f360200200241f4006a410236020020024202370264200241a0a7c90036026020024104360224200241f0aec9003602202002200241206a360270200220024188026a360228200241e0006a41b0a7c9001044000bd10504017f027e017f037e23004180086b22022400200241d0036a200041d4e2cc0020011b200110a602024020022903b8044203510d00200241d0036a41c8036a2802002101200241086a200241d0036a41c80310e9081a200241d0036a200241086a41c80310e9081a200241a0076a200241e8046a220010970442002103200241b0076a200120022903a00722044200420020022d00a90741004720022d00a807220510e70442002106024020022903b0074201520d00427f427f200241c0076a2903002206200241d0076a2903007c20022903b8072203200241c8076a2903007c22072003542201ad7c22032001200320065420032006511b22011b2206200241e0076a2903007c427f200720011b2203200241d8076a2903007c22072003542201ad7c22032001200320065420032006511b22011b2106427f200720011b21030b200241f0076a290300210720022903e8072108024020022903b8044202510d0020022d00d00341ff01714102470d0020022802d803450d0020022802d403102e0b2000108b022002410036021020024201370308200220043703d003200241086a200241d0036a41081074024002400240024020050e03000102030b200241003a00d003200241086a200241d0036a410110740c020b200241013a00d003200241086a200241d0036a410110740c010b200241023a00d003200241086a200241d0036a410110740b2002427f200620077c200320087c22042003542201ad7c22032001200320065420032006511b22011b3703d8032002427f200420011b3703d003200241086a200241d0036a41101074200235021021062002350208210320024180086a240020032006422086840f0b200241bc076a410f3602002002411c6a41023602002002420237020c200241a0a7c900360208200241043602b40720024188afc9003602b0072002200241b0076a3602182002200241f8076a3602b807200241086a41b0a7c9001044000bd60402017f027e23004180086b2202240020024198046a200041d4e2cc0020011b200110a60202402002290380054203510d0020024198046a41c8036a2802002101200241d0006a20024198046a41c80310e9081a20024198046a200241d0006a41c80310e9081a200241e8076a200241b0056a2200109704200241086a200120022903e8074200420020022d00f10741004720022d00f00710e70402402002290380054202510d0020022d00980441ff01714102470d0020022802a004450d00200228029c04102e0b2000108b0220024100360258200242013703500240024020022903084201510d00200241003a009804200241d0006a20024198046a410110740c010b200241013a009804200241d0006a20024198046a41011074200229031021032002200241086a41106a2903003703a0042002200337039804200241d0006a20024198046a41101074200241206a29030021032002200241286a2903003703a0042002200337039804200241d0006a20024198046a41101074200241306a29030021032002200241386a2903003703a0042002200337039804200241d0006a20024198046a411010740b200229034021032002200241c8006a2903003703a0042002200337039804200241d0006a20024198046a41101074200235025821032002350250210420024180086a240020042003422086840f0b200241146a410f360200200241e4006a410236020020024202370254200241a0a7c9003602502002410436020c2002419cafc9003602082002200241086a3602602002200241f8076a360210200241d0006a41b0a7c9001044000bd60201047f230041c0006b2202240041d0b0c9002103411321044109210502400240024002400240024002400240024002400240200141ff01710e0b000102030405060708090a000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a418caacc001044000b41e0c3cb00210341092104410021050c080b41a186ca00210341112104410121050c070b41c986ca002103410f2104410221050c060b41c6b0c9002103410a2104410321050c050b41b9b0c9002103410d2104410421050c040b41a7b0c900210341122104410521050c030b41ab85ca00210341082104410621050c020b41e086ca00210341102104410721050c010b4194b0c9002103410821050b200041831e3b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000bf50101047f230041306b22022400200241c8afc9004113108102200241106a41f1afc900410a108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000bf50101047f230041306b22022400200241c8afc9004113108102200241106a41fbafc9004106108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000bf50101047f230041306b22022400200241c8afc9004113108102200241106a41fbafc9004106108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000ba70401037f230041900c6b22042400200441106a200110fb07200441086a20042802102205200428021841d4e2cc004100410010ca0402400240024002402004280208450d000240200428020c220620024d0d00200441a8076a410a10f307200041013602002000410c6a200441b0076a280200360200200020042903a8073702040c020b200441d8096a200110fb07200441a8076a20042802d809220220042802e00910af0520042802a8072101200441e4096a200441a8076a41047241ac0210e9081a024002402001411c460d00200441fc046a200441e4096a41ac0210e9081a024020042802dc09450d002002102e0b200441d0026a200441fc046a41ac0210e9081a20042001360220200441206a410472200441d0026a41ac0210e9081a200441a8076a200441206a10970420042903a8072003580d01200441a8076a410910f307200041013602002000410c6a200441b0076a280200360200200020042903a807370204200441206a108b020c030b024020042802dc09450d002002102e0b200441a8076a410310f307200041013602002000410c6a200441b0076a280200360200200020042903a8073702040c020b200041086a200441206a41b00210e9081a20004100360200200041b8026a20063602002004280214450d030c020b200441a8076a410310f307200041013602002000410c6a200441b0076a280200360200200020042903a8073702040b2004280214450d010b2005102e0b200441900c6a24000bb40b06017f017e047f017e017f017e23004190066b22052400200541bd036a200341086a290000370000200541c5036a200341106a290000370000200541cd036a200341186a290000370000200541023a00b4032005410a3a00b003200520032900003700b503200541b0036a10fe01200541b0036a200410970420052903b00321062002280204210702404110102c2208450d00200841f8f7c60036020c2008410136020820084281808080103702004110102c2209450d0020094190f8c60036020c20094101360208200942818080801037020020082008280200417f6a220a3602000240200a0d002008280208200828020c2802001103000240200828020c280204450d002008280208102e0b200841046a220a200a280200417f6a220a360200200a0d002008102e0b200541d8006a200441b00210e9081a200541a0036a41026a2208200541256a41026a2d00003a000020054188036a41086a22042005410c6a41086a29010037030020054188036a41106a220a2005410c6a41106a290100370300200520052f00253b01a0032005200529010c37038803024002402009280208200541d8006a200928020c28020c1101000d00200541c8006a41023a0000200541c0006a41003a000020092009280200417f6a22083602004200210b2005420037033020054201370328024020080d002009280208200928020c2802001103000240200928020c280204450d002009280208102e0b200941046a22082008280200417f6a220836020020080d002009102e0b200541d8006a10dc0241012109410221080c010b200541b0036a200541d8006a41b00210e9081a200541ec056a2001360200200541e0056a41086a2007360200200541e0056a41106a200529038803370300200541f8056a2004290300370300200541e0056a41206a200a290300370300200541003a00e405200541013a00e005200520052f01a0033b00e505200520082d00003a00e7052005200936028806200541286a200541b0036a200541e0056a10dd0220052903284201512109200541286a41206a2d000021082005290330210b0b200541b0036a41186a200341186a290000370300200541b0036a41106a200341106a290000370300200541b0036a41086a200341086a290000370300200520032900003703b0032005200541d0006a28000036005f200520052900493703580240024020090d00410621090c010b2005200528005f3600e705200520052903583703e00541062109200b4202510d00200520052800e70536008f03200520052903e00537038803200821090b200541d8006a41086a2208200541b0036a41086a2204290300370300200541d8006a41106a220a200541b0036a41106a2201290300370300200541d8006a41186a2207200541b0036a41186a220c290300370300200520052903b00337035820052005290388033703a0032005200528008f033600a703200541043a00b4032005410a3a00b003200541bd036a2008290300370000200541c5036a200a290300370000200541cd036a2007290300370000200541d8036a20093a0000200520052903583700b503200541d5036a20052f0088033b0000200541d7036a2005418a036a2d00003a0000200541d9036a20052903a003370000200541e0036a20052800a703360000200541fc036a200541e0056a41186a280200360200200541f4036a200541e0056a41106a290200370200200541ec036a200541e0056a41086a290200370200200541e4036a20052902e005370200200541b0036a10fe01200541286a41106a290300210d200c200341186a2900003703002001200341106a2900003703002004200341086a290000370300200520032900003703b003200541b0036a10f907210302402002410c6a28020041ffffff3f71450d002002280208102e0b0240200241186a28020041ffffff3f71450d002002280214102e0b200020033602082000200d2006200ba71b37030020054190066a24000f0b1036000bba0503067f027e067f230041c0006b22012400200141106a200010fb0720012802102202200128021810ff0102402001280214450d002002102e0b200141106a200010f60720012802102202200128021810ff0102402001280214450d002002102e0b200141106a41186a22034200370300200141106a41106a22044200370300200141106a41086a2205420037030020014200370310200141106a41c8afc9004113108102200141306a41dbafc90041091081022003200141306a41086a220629000037030020042001290030370300200141306a200141106a4120108d0320012902344200200128023022021b220742ffffffff0f8321082002410120021b2109024002402007422088a7220a0d004100210b0c010b4100210c4100210b4100210d0240034002400240200b450d002009200d4105746a21022009200d200c6a4105746a210e034020022000412010ec08450d02200e2002290000370000200e41186a200241186a290000370000200e41106a200241106a290000370000200e41086a200241086a290000370000200e41206a210e200241206a2102200d41016a220d200a490d000c040b0b2009200d4105746a2102034020022000412010ec08450d01200241206a2102200d41016a220d200a490d000b4100210b0c030b200c417f6a210c200b41016a210b200d41016a220d200a490d000b0b0240200b0d004100210b0c010b2009200d200b6b4105746a2009200d4105746a200a200d6b41057410ea081a0b2001200936020020012008200a200b6b2202ad4220868437020420034200370300200442003703002005420037030020014200370310200141106a41c8afc9004113108102200141306a41dbafc90041091081022003200629000037030020042001290030370300200141106a200110e6040240200742ffffff3f83500d002009102e0b200141c0006a2400200241016a0bfa0203027f017e067f230041206b220224000240024020014102490d00200041206a22032000412010ec08417f4a0d002000290000210420002003290000370000200241186a2205200041186a2206290000370300200241106a2207200041106a2208290000370300200241086a2209200041086a220a290000370300200a200341086a2900003700002008200341106a2900003700002006200341186a29000037000020022004370300024020014103490d00200041206a210320002001417f6a22064105746a21080340200341206a22002002412010ec08417f4a0d012006450d0320032000290000370000200341186a200041186a290000370000200341106a200041106a290000370000200341086a200041086a290000370000200021032006417f6a22064101470d000b200821030b20032002290300370000200341186a2005290300370000200341106a2007290300370000200341086a20092903003700000b200241206a24000f0b2001200141d4d1cc00103c000bf50101047f230041306b22022400200241c8afc9004113108102200241106a41f1afc900410a108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000be909010e7f230041c0006b220424002002410020031b21052000410020011b2106200241206a200220031b2107200041206a200020011b2108200020014105746a2109200220034105746a210a4101210b41002103410021024101210c4100210d4100210e02400240034002400240024020050d002006450d010c020b02402006450d00024020052006412010ec08220f0d00410020082008200946220f1b2106410020072007200a4622101b21052008200841206a200f1b21082007200741206a20101b21070c040b200f417f4a0d02200441186a220f200541186a290000370300200441106a2210200541106a290000370300200441086a2211200541086a2900003703002004200529000037030002400240200e200d470d00200d41016a2205200d490d07200d410174220e2005200e20054b1b22054104200541044b1b220541ffffff3f71200546210e2005410574210502400240200d0d00200441003602300c010b200441013602382004200c3602302004200d4105743602340b200441206a2005200e200441306a107d2004280228210520042802204101460d012004280224210c200d210e2005410576210d0b200c200e4105746a22052004290300370000200541186a200f290300370000200541106a2010290300370000200541086a2011290300370000410020072007200a46220f1b2105200e41016a210e2007200741206a200f1b21070c040b20050d040c050b200441186a220f200541186a290000370300200441106a2210200541106a290000370300200441086a2211200541086a2900003703002004200529000037030002400240200e200d470d00200d41016a2206200d490d06200d41017422052006200520064b1b22064104200641044b1b220641ffffff3f7120064621052006410574210602400240200d0d00200441003602300c010b200441013602382004200c3602302004200d4105743602340b200441206a20062005200441306a107d2004280228210620042802204101460d012004280224210c200d210e2006410576210d0b200c200e4105746a22062004290300370000200641186a200f290300370000200641106a2010290300370000200641086a201129030037000041002106410020072007200a46220f1b2105200e41016a210e2007200741206a200f1b21070c030b20060d030c040b200c200e200020011084080240200d41ffffff3f71450d00200c102e0b0240200341ffffff3f71450d00200b102e0b200441c0006a24000f0b200441186a220f200641186a290000370300200441106a2210200641106a290000370300200441086a2211200641086a290000370300200420062900003703000240024020022003470d00200341016a22062003490d04200341017422022006200220064b1b22064104200641044b1b220641ffffff3f712006462102200641057421060240024020030d00200441003602300c010b200441013602382004200b360230200420034105743602340b200441206a20062002200441306a107d2004280228210620042802204101460d012004280224210b20032102200641057621030b200b20024105746a22062004290300370000200641186a200f290300370000200641106a2010290300370000200641086a2011290300370000410020082008200946220f1b2106200241016a21022008200841206a200f1b21080c010b0b2006450d010b1036000b1038000bd60201047f230041c0006b2202240041d0b0c9002103411321044109210502400240024002400240024002400240024002400240200141ff01710e0b000102030405060708090a000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a418caacc001044000b41e0c3cb00210341092104410021050c080b41a186ca00210341112104410121050c070b41c986ca002103410f2104410221050c060b41c6b0c9002103410a2104410321050c050b41b9b0c9002103410d2104410421050c040b41a7b0c900210341122104410521050c030b41ab85ca00210341082104410621050c020b41e086ca00210341102104410721050c010b4194b0c9002103410821050b20004183203b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000bf50101047f230041306b2202240020024181b0c9004113108102200241106a41f1afc900410a108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000bf50101047f230041306b2202240020024181b0c9004113108102200241106a41fbafc9004106108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000bf50101047f230041306b2202240020024181b0c9004113108102200241106a41fbafc9004106108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000ba70401037f230041900c6b22042400200441106a2001108508200441086a20042802102205200428021841d4e2cc004100410010ca0402400240024002402004280208450d000240200428020c220620024d0d00200441a8076a410a10fd07200041013602002000410c6a200441b0076a280200360200200020042903a8073702040c020b200441d8096a2001108508200441a8076a20042802d809220220042802e00910af0520042802a8072101200441e4096a200441a8076a41047241ac0210e9081a024002402001411c460d00200441fc046a200441e4096a41ac0210e9081a024020042802dc09450d002002102e0b200441d0026a200441fc046a41ac0210e9081a20042001360220200441206a410472200441d0026a41ac0210e9081a200441a8076a200441206a10970420042903a8072003580d01200441a8076a410910fd07200041013602002000410c6a200441b0076a280200360200200020042903a807370204200441206a108b020c030b024020042802dc09450d002002102e0b200441a8076a410310fd07200041013602002000410c6a200441b0076a280200360200200020042903a8073702040c020b200041086a200441206a41b00210e9081a20004100360200200041b8026a20063602002004280214450d030c020b200441a8076a410310fd07200041013602002000410c6a200441b0076a280200360200200020042903a8073702040b2004280214450d010b2005102e0b200441900c6a24000bb40b06017f017e047f017e017f017e23004190066b22052400200541bd036a200341086a290000370000200541c5036a200341106a290000370000200541cd036a200341186a290000370000200541023a00b4032005410b3a00b003200520032900003700b503200541b0036a10fe01200541b0036a200410970420052903b00321062002280204210702404110102c2208450d00200841f8f7c60036020c2008410136020820084281808080103702004110102c2209450d0020094190f8c60036020c20094101360208200942818080801037020020082008280200417f6a220a3602000240200a0d002008280208200828020c2802001103000240200828020c280204450d002008280208102e0b200841046a220a200a280200417f6a220a360200200a0d002008102e0b200541d8006a200441b00210e9081a200541a0036a41026a2208200541256a41026a2d00003a000020054188036a41086a22042005410c6a41086a29010037030020054188036a41106a220a2005410c6a41106a290100370300200520052f00253b01a0032005200529010c37038803024002402009280208200541d8006a200928020c28020c1101000d00200541c8006a41023a0000200541c0006a41003a000020092009280200417f6a22083602004200210b2005420037033020054201370328024020080d002009280208200928020c2802001103000240200928020c280204450d002009280208102e0b200941046a22082008280200417f6a220836020020080d002009102e0b200541d8006a10dc0241012109410221080c010b200541b0036a200541d8006a41b00210e9081a200541ec056a2001360200200541e0056a41086a2007360200200541e0056a41106a200529038803370300200541f8056a2004290300370300200541e0056a41206a200a290300370300200541003a00e405200520052f01a0033b00e5052005200936028806200541023a00e005200520082d00003a00e705200541286a200541b0036a200541e0056a10dd0220052903284201512109200541286a41206a2d000021082005290330210b0b200541b0036a41186a200341186a290000370300200541b0036a41106a200341106a290000370300200541b0036a41086a200341086a290000370300200520032900003703b0032005200541d0006a28000036005f200520052900493703580240024020090d00410621090c010b2005200528005f3600e705200520052903583703e00541062109200b4202510d00200520052800e70536008f03200520052903e00537038803200821090b200541d8006a41086a2208200541b0036a41086a2204290300370300200541d8006a41106a220a200541b0036a41106a2201290300370300200541d8006a41186a2207200541b0036a41186a220c290300370300200520052903b00337035820052005290388033703a0032005200528008f033600a703200541043a00b4032005410b3a00b003200541bd036a2008290300370000200541c5036a200a290300370000200541cd036a2007290300370000200541d8036a20093a0000200520052903583700b503200541d5036a20052f0088033b0000200541d7036a2005418a036a2d00003a0000200541d9036a20052903a003370000200541e0036a20052800a703360000200541fc036a200541e0056a41186a280200360200200541f4036a200541e0056a41106a290200370200200541ec036a200541e0056a41086a290200370200200541e4036a20052902e005370200200541b0036a10fe01200541286a41106a290300210d200c200341186a2900003703002001200341106a2900003703002004200341086a290000370300200520032900003703b003200541b0036a108308210302402002410c6a28020041ffffff3f71450d002002280208102e0b0240200241186a28020041ffffff3f71450d002002280214102e0b200020033602082000200d2006200ba71b37030020054190066a24000f0b1036000bba0503067f027e067f230041c0006b22012400200141106a200010850820012802102202200128021810ff0102402001280214450d002002102e0b200141106a200010800820012802102202200128021810ff0102402001280214450d002002102e0b200141106a41186a22034200370300200141106a41106a22044200370300200141106a41086a2205420037030020014200370310200141106a4181b0c9004113108102200141306a41dbafc90041091081022003200141306a41086a220629000037030020042001290030370300200141306a200141106a4120108d0320012902344200200128023022021b220742ffffffff0f8321082002410120021b2109024002402007422088a7220a0d004100210b0c010b4100210c4100210b4100210d0240034002400240200b450d002009200d4105746a21022009200d200c6a4105746a210e034020022000412010ec08450d02200e2002290000370000200e41186a200241186a290000370000200e41106a200241106a290000370000200e41086a200241086a290000370000200e41206a210e200241206a2102200d41016a220d200a490d000c040b0b2009200d4105746a2102034020022000412010ec08450d01200241206a2102200d41016a220d200a490d000b4100210b0c030b200c417f6a210c200b41016a210b200d41016a220d200a490d000b0b0240200b0d004100210b0c010b2009200d200b6b4105746a2009200d4105746a200a200d6b41057410ea081a0b2001200936020020012008200a200b6b2202ad4220868437020420034200370300200442003703002005420037030020014200370310200141106a4181b0c9004113108102200141306a41dbafc90041091081022003200629000037030020042001290030370300200141106a200110e6040240200742ffffff3f83500d002009102e0b200141c0006a2400200241016a0bc210050b7f017e087f087e0b7f230022042105200441c0016b4160712206240002400240200141ffffff3f712001470d0020014105742207417f4c0d0041012108024002402007450d002007102c2208450d0120074105762109200821042007210a0340200a450d0120042000290000370000200441086a200041086a290000370000200441106a200041106a290000370000200441186a200041186a290000370000200441206a2104200a41606a210a200041206a21002009417f6a22090d000b0b2008200110fc02200641e0006a41186a220b4200370300200641e0006a41106a220c4200370300200641e0006a41086a220d42003703002006420037036020064180016a4181b0c9004113108102200d20064180016a41086a2200290000370300200620062900800137036020064180016a41dbafc9004109108102200b2000290000370300200c20062900800137030020064180016a200641e0006a4120108d032006280280012204410120041b210e200629028401420020041b220f422088a72204450d02200e20044105746a2110200641206a410c72211120064180016a410c6a2112200e2113034020064180016a41186a2214201341186a29000037030020064180016a41106a201341106a2900003703002000201341086a2900003703002006201329000037038001200641106a20064180016a10ff0720064180016a200628021022152006280218221610b305200d201241086a290200370300200c201241106a2802003602002006201229020037036020062802a00121170240200628028801220a450d00200629038001211820112006290360370200201141086a200d290300370200201141106a200c28020036020020062018370320201721040b2006200a360228200641003602880120062903382119200620062903980122183703382006290330211a2006200629039001221b3703302006290320211c2006200629038001221d3703202006290328211e2006200629038801221f37032802400240201ea722200d00200421170c010b2006201c3703402006201e3703482006201a370350201e422088a721212006201937035802400240201aa722040d00201a422088a721222019422088a721042019a72123202021240c010b202020044105746a212220202125202021240340200b202541186a2900002218370300200c202541106a290000221b370300200d202541086a290000221d37030020002025290000221e370000200041086a2226201d370000200041106a2227201b370000200041186a222820183700002006201e37036020062024360284012006202036028001202541206a212541002104024002400240024020010e020201000b410021042001210a0340200a410176222920046a210920092004200820094105746a2000412010ec084101481b2104200a20296b220a41014b0d000b0b200820044105746a2000412010ec08450d010b20242000290000370000202441186a2028290000370000202441106a2027290000370000202441086a2026290000370000202441206a21240b20252022470d000b200628025c210420062802582123200628025421220b201fa7212a2006202136024c200620203602482006202420206b4105753602500240024020040d00202221240c010b202220044105746a212020222125202221240340200b202541186a2900002218370300200c202541106a290000221b370300200d202541086a290000221d37030020002025290000221e370000200041086a2226201d370000200041106a2227201b370000200041186a222820183700002006201e37036020062024360284012006202236028001202541206a212541002104024002400240024020010e020201000b410021042001210a0340200a410176222920046a210920092004200820094105746a2000412010ec084101481b2104200a20296b220a41014b0d000b0b200820044105746a2000412010ec08450d010b20242000290000370000202441186a2028290000370000202441106a2027290000370000202441086a2026290000370000202441206a21240b20252020470d000b0b20062023360258200620223602542006202420226b41057536025c2006290348211f2006290340211d2006290350211b200629035821180240202a450d000240200628022c41ffffff3f71450d002006280228102e0b200628023841ffffff3f71450d002006280234102e0b2006201d3703202006201f3703282006201b370330200620183703380b2006201f370388012006201b37039001201420183703002006201d37038001200620173602a00102400240201fa722040d002015201610ff010c010b2018a7210a2015201620064180016a10c0050240201f422088a741ffffff3f71450d002004102e0b200a41ffffff3f71450d00201b422088a7102e0b201341206a211302402006280214450d002015102e0b2017210420132010470d000c030b0b1036000b1038000b0240200f42ffffff3f83500d00200e102e0b20064198016a2200420037030020064190016a2204420037030020064180016a41086a220a42003703002006420037038001200641e0006a4181b0c9004113108102200a200641e0006a41086a22092900003703002006200629006037038001200641e0006a41c7c3cb004107108102200020092900003703002004200629006037030020064180016a2002200310c5052000420037030020044200370300200a42003703002006420037038001200641e0006a4181b0c9004113108102200a20092900003703002006200629006037038001200641e0006a41dbc3cb004105108102200020092900003703002004200629006037030020064180016a412010ff0102402007450d002008102e0b200524000bf50101047f230041306b2202240020024181b0c9004113108102200241106a41f1afc900410a108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000bdc0301057f230041f0006b2201240020002d00002102200141186a2203200041196a290000370300200141106a2204200041116a290000370300200141086a2205200041096a2900003703002001200029000137030002400240024020020d00200141c0006a41186a22004200370300200141c0006a41106a22024200370300200141c0006a41086a420037030020014200370340200141c0006a4181b0c9004113108102200141206a41dbc3cb0041051081022000200141206a41086a29000037030020022001290020370300200141c0006a412010ff010c010b200141206a41186a2003290300370300200141206a41106a2004290300370300200141206a41086a200529030037030020012001290300370320200141c0006a41186a22004200370300200141c0006a41106a22024200370300200141c0006a41086a420037030020014200370340200141c0006a4181b0c9004113108102200141e0006a41dbc3cb0041051081022000200141e0006a41086a290000370300200220012900603703004120102c2200450d012001422037026420012000360260200141e0006a200141206a41201074200141c0006a412020012802602200200128026810b2012001280264450d002000102e0b200141f0006a24000f0b1036000b130020004106360204200041e4b0c9003602000b3400200041c8afc90036020420004100360200200041146a4106360200200041106a41d4e0c900360200200041086a42133702000b2501017f230041306b22022400200241003602102000200241086a10e705200241306a24000b2901017f230041106b2202240020024100360208200242013703002000200210b301200241106a24000b340020004181b0c90036020420004100360200200041146a4106360200200041106a41f4e8c900360200200041086a42133702000b4201027f230041106b2202240002404101102c22030d001036000b2000420137020420002003360200200241003a000f20002002410f6a41011074200241106a24000b6401027f230041c0026b220224002002411c36020802404101102c2203450d002000420137020420002003360200200241003a00bf022000200241bf026a4101107402402002280208411c460d00200241086a108b020b200241c0026a24000f0b1036000be22505027f017e027f017e037f230041b0046b22022400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e1c0102030405060708090a0b0c0d0e0f101112131415161718191a1b00010b200241086a200141386a10ca0120024180026a41286a200141306a29030037030020024180026a41206a200141286a29030037030020024180026a41186a200141206a29030037030020024180026a41106a200141186a29030037030020024180026a41086a200141106a2903003703002002200141086a29030037038002200141f8016a280200210320024180026a41306a200241086a41c00110e9081a20014180026a2903002104200241086a20024180026a41f00110e9081a200041086a200241086a41f00110e9081a20004180026a2004370300200041f8016a20033602002000411b3602000c1b0b20024180026a200141086a10cb0120004100360200200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c1a0b20024180026a200141046a10cc0120004101360200200041246a200241a0026a2802003602002000411c6a20024198026a290300370200200041146a20024190026a2903003702002000410c6a20024188026a29030037020020002002290380023702040c190b20024180026a200141086a10cd01200041086a20024180026a41a00210e9081a200041023602000c180b20004103360200200041086a200141086a2903003703000c170b41042103200141046a210502400240024002400240024002400240024020012d0004417f6a0e050102030405000b41e2a0cc00412841e89bc4001039000b200141086a2802002105410121030c040b41022103200241086a41026a200541036a2d00003a000020024180026a41086a200141146a29020037030020024190026a2001411c6a29020037030020024198026a200141246a2d00003a0000200220052f00013b010820022001410c6a29020037038002200141086a2802002105200141286a28020021010c040b200141086a2802002105410321030c020b2002410a6a200541036a2d00003a000020024180026a41086a200141146a29020037030020024190026a2001411c6a29020037030020024198026a200141246a2d00003a0000200220052f00013b010820022001410c6a2902003703800220012d00254100472106200141086a2802002105200141286a28020021010c030b200141086a2802002105410521030b0b0b200020033a0004200020022f01083b0005200020063a0025200020022f01fc013b0126200041086a20053602002000410c6a200229038002370200200041286a2001360200200041076a2002410a6a2d00003a0000200041146a20024180026a41086a2903003702002000411c6a20024190026a290300370200200041246a20024198026a2d00003a0000200041043602000c160b20024180026a200141086a10ce01200041086a20024180026a41e00010e9081a200041053602000c150b20024180026a200141046a10cf01200041063602002000410c6a20024188026a28020036020020002002290380023702040c140b20024180026a200141086a10d001200041086a20024180026a41d80010e9081a200041073602000c130b10d101000b02400240200128020422050d00410021030c010b20024180026a41186a200141286a29000037030020024180026a41106a200141206a29000037030020024188026a200141186a29000037030020024180026a41286a200141386a29000037030020024180026a41306a200141c0006a29000037030020024180026a41386a200141c8006a29000037030020024180026a41c8006a200141d8006a29000037030020024180026a41d0006a200141e0006a29000037030020024180026a41d8006a200141e8006a2900003703002002200141106a290000370380022002200141306a2900003703a0022002200141d0006a2900003703c00220024180026a41f8006a20014188016a29000037030020024180026a41f0006a20014180016a29000037030020024180026a41e8006a200141f8006a29000037030020024180026a4198016a200141a8016a29000037030020024180026a4190016a200141a0016a29000037030020024180026a4188016a20014198016a29000037030020024180026a41b8016a200141c8016a29000037030020024180026a41b0016a200141c0016a29000037030020024180026a41a8016a200141b8016a2900003703002002200141f0006a2900003703e002200220014190016a290000370380032002200141b0016a2900003703a0032001410c6a2802002201417f4c0d130240024020010d00410121030c010b2001102c2203450d150b20032005200110e9081a200241086a20024180026a41c00110e9081a0b200020033602042000410c6a2001360200200041086a2001360200200041106a200241086a41c00110e9081a200041093602000c110b20024180026a200141086a10d201200041086a20024180026a41980210e9081a2000410a3602000c100b20024180026a200141046a10d301200041046a20024180026a41e80010e9081a2000410b3602000c0f0b10d401000b20024180026a200141086a10d5012000410d360200200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c0d0b20024180026a200141086a10d6012000410e360200200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c0c0b20024180026a200141086a10d6012000410f360200200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c0b0b20024180026a200141086a10d70120004110360200200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c0a0b200141046a2103410721050240024002400240024002400240024020012d0004417f6a0e0701020304050607000b41e2a0cc00412841a4c3cb001039000b20024198026a200341196a29000037030020024190026a200341116a29000037030020024188026a200341096a2900003703002002200329000137038002410121050c050b20024198026a200341196a29000037030020024190026a200341116a29000037030020024188026a200341096a2900003703002002200329000137038002410221050c040b20024180026a41186a200341196a29000037030020024180026a41106a200341116a29000037030020024180026a41086a200341096a290000370300200241086a41086a200341296a290000370300200241086a41106a200341316a290000370300200241086a41186a200341396a29000037030020022003290001370380022002200341216a290000370308410321050c030b200241086a200141086a10c8012002418b026a200241086a41086a2802003600002002200229030837008302410421050c020b20024198026a200341196a29000037030020024190026a200341116a29000037030020024188026a200341096a2900003703002002200329000137038002410521050c010b20024198026a200341196a29000037030020024190026a200341116a29000037030020024188026a200341096a2900003703002002200329000137038002410621050b200020053a0004200020022903800237000520002002290308370025200020022f00fc013b00452000410d6a20024180026a41086a290300370000200041156a20024180026a41106a2903003700002000411d6a20024180026a41186a2903003700002000412d6a200241086a41086a290300370000200041356a200241086a41106a2903003700002000413d6a200241086a41186a290300370000200041c7006a200241fe016a2d00003a0000200041113602000c090b024002400240024002400240200141086a280200417f6a0e03010203000b41e2a0cc0041284184ccc2001039000b200141386a2903002104200141306a29030021074101210841012109024002400240024002402001410c6a2d00000e050104020300010b4104210920024180026a41046a200141206a2d00003a000020022001411c6a2800003602800220012f000d2001410f6a2d0000411074722106200141186a280200210a200141146a2802002103200141106a28020021050c030b20024188026a200141246a29000037030020024180026a41106a2001412c6a2d00003a000020022001411c6a2900003703800220012f000d2001410f6a2d0000411074722106200141186a280200210a200141146a2802002103200141106a2802002105410021090c020b200141186a2802002203417f4c0d0f200141106a28020021010240024020030d00410121050c010b2003102c2205450d110b20052001200310e9081a410221092003210a0c010b20024188026a200141246a29000037030020024180026a41106a2001412c6a2d00003a000020022001411c6a2900003703800220012f000d2001410f6a2d0000411074722106200141186a280200210a200141146a2802002103200141106a2802002105410321090b200241086a41106a20024180026a41106a2d00003a0000200241086a41086a20024180026a41086a290300370300200241046a41026a200241fc016a41026a2d00003a00002002200229038002370308200220022f00fc013b01040c030b2001410c6a28020022094108762106410221080c010b2001410c6a28020022094108762106410321080b0b200020022f01043b002d20004112360200200041386a2004370300200041306a2007370300200041186a200a360200200041146a2003360200200041106a2005360200200041086a20083602002000411c6a20022903083702002000410c6a2006410874200941ff017172360200200041246a200241086a41086a2903003702002000412c6a200241086a41106a2d00003a00002000412f6a200241066a2d00003a00000c080b20024180026a200141086a10d801200041086a20024180026a41f00010e9081a200041133602000c070b20024180026a200141086a10d901200041086a20024180026a41f80010e9081a200041143602000c060b024002400240024020012f0104417f6a0e03010200010b20024180026a200141086a10c90120022902840221042002280280022103410321010c020b20024180026a200141086a10c90120022902840221042002280280022103410121010c010b20012f0106210541b002102c2203450d0820024180026a200141086a28020010da01200320024180026a41b00210e9081a410221010b200020013b0104200041153602002000410c6a2004370200200041086a2003360200200041066a20053b01000c050b20024180026a200141086a10db01200041086a20024180026a41a80210e9081a200041163602000c040b20024180026a200141046a10dc01200041046a20024180026a41c80010e9081a200041173602000c030b20024180026a200141086a10dd01200041086a20024180026a41c80010e9081a200041183602000c020b20024180026a200141086a10de0120004119360200200041c0006a20024180026a41386a290300370300200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c010b20024180026a200141086a10df012000411a360200200041c0006a20024180026a41386a290300370300200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000b200241b0046a24000f0b1038000b1036000b13002000410a360204200041c4fac9003602000bf30a04077f027e047f077e23002202210320024180026b41607122022400200241c0006a10910820022802402104024002400240024002400240024020022802482205450d00200241286a2004280200109208024020054101470d004100210620024180016a21070c030b200241286a41106a2903004200200228022822081b21092002290330420020081b210a200441c4006a2108200541c4006c41bc7f6a210b41002106200241106a41106a210c2004210d410121070340200241106a20082802001092082009200c29030042002002280210220e1b220f200a20022903184200200e1b2210562009200f562009200f511b220e1b2109200a2010200e1b210a20062007200e1b2106200d2008200e1b210d200741016a2107200841c4006a2108200b41bc7f6a220b0d000b2002200a3703800120022006360290012002200937038801200d0d010b2000411310930820022802442202450d02200241c4006c450d022004102e200324000f0b20024180016a2107200520064d0d020b2004200641c4006c6a220841186a220d290200210a20042005417f6a220641c4006c220b6a220e41c0006a280200210c200e41206a290200210f200e41286a2902002110200e41306a2902002111200e41386a2902002112200e2902002113200e2902082109200e2902102114200d200e41186a290200370200200829021021152008201437021020082902082114200820093702082008290200210920082013370200200841386a2012370200200841306a2011370200200841286a2010370200200841206a220e2802002105200e200f370200200841c0006a200c360200200220063602482002201537039001200220143703880120022009370380012002200a37039801200241d0006a41186a2007411c6a280000360200200241d0006a41106a200741146a290000370300200241d0006a41086a2007410c6a290000370300200220072900043703502002280244210e20024180016a41186a2208420037030020024180016a41106a2207420037030020024180016a41086a4200370300200242003703800120024180016a41de80ca004109108102200241f0006a418c81ca00410b1081022008200241f0006a41086a29000037030020072002290070370300200b41046a2208417f4c0d020240024020080d00410121070c010b2008102c2207450d040b2002410036027820022008360274200220073602702006200241f0006a107620042006200241f0006a109b0120024180016a412020022802702208200228027810b20102402002280274450d002008102e0b2009a721060240200e450d00200e41c4006c450d002004102e0b200241f0006a200610940820024180016a200228027022082002280278220e10ae0502402002280280012207450d002008200e10ff010b2002280274210e0240024020070d00200e450d012008102e0c010b20024198016a290300210920024190016a290300210a20024188016a280200210d200228028401210b0240200e450d002008102e0b0240200d450d00200d410574210e20072108034020022008200a200910fb01200841206a2108200e41606a220e0d000b0b200241a8016a2009370300200241a0016a200a37030020024180016a41186a2208200d36020020024194016a200b36020020024180016a41106a220e20073602002002418c016a200636020020024180016a41086a220741013a0000200241093a00800120024180016a10fe012008200241d0006a41186a280200360200200e200241d0006a41106a2903003703002007200241d0006a41086a29030037030020022002290350370380012002200536029c0120014180ce186a20024180016a41004180ce181095080b200041063a00000b200324000f0b200620051042000b1038000b1036000ba60d03077f017e0a7f23004190036b22012400200141206a22024200370300200141186a22034200370300200141086a41086a420037030020014200370308200141086a41de80ca004109108102200141a8026a418c81ca00410b1081022002200141a8026a41086a290000370300200320012900a8023703002001412036022c2001200141086a360228200141306a200141086a412010ed0202400240200128023022040d00410021050c010b200128023421062001200141306a41086a280200360244200120043602402001200141c0006a10ab010240024020012802000d000240024020012802042207200128024441c4006e2202200220074b1bad42c4007e2208422088a70d002008a72202417f4c0d000240024020020d00410421050c010b2002102c2205450d020b200241c4006ead2108024002402007450d00200141a8026a41017221094100210a03400240024002400240200128024422034104490d00200a41016a210a2001280240220b280000210c20012003417c6a220d3602442001200b41046a36024041002102200141003a00c8022003417b6a210302400340200d2002460d01200141a8026a20026a200b20026a220e41046a2d00003a00002001200e41056a3602402001200241016a220e3a00c802200120033602442003417f6a2103200e2102200e4120470d000b200141f0026a41186a2202200141a8026a41186a290300370300200141f0026a41106a2203200141a8026a41106a290300370300200141f0026a41086a220b200141a8026a41086a290300370300200120012903a8023703f002200e41ff01714120490d0120014188026a41086a220e200b29030037030020014188026a41106a220b200329030037030020014188026a41186a22032002290300370300200120012903f00237038802200141a8026a200141c0006a10930120012d00a8024101460d01200141e8016a41186a22022003290300370300200141e8016a41106a2203200b290300370300200141e8016a41086a220b200e29030037030020012001290388023703e801200141c8016a41086a220e200941086a290000370300200141c8016a41106a220d200941106a290000370300200141c8016a41186a220f200941186a290000370300200120092900003703c801200141a8016a41186a22102002290300370300200141a8016a41106a22022003290300370300200141a8016a41086a2203200b290300370300200120012903e8013703a80120014188016a41186a220b200f29030037030020014188016a41106a220f200d29030037030020014188016a41086a220d200e290300370300200120012903c80137038801200141e8006a41186a220e2010290300370300200141e8006a41106a22102002290300370300200141e8006a41086a22112003290300370300200120012903a801370368200141c8006a41186a2212200b290300370300200141c8006a41106a220b200f290300370300200141c8006a41086a220f200d29030037030020012001290388013703482008422088a722032008a7470d04200341016a22022003490d082003410174220d20022002200d491b22024104200241044b1bad42c4007e2208422088a74541027421022008a7210d20030d02200141003602a8020c030b200241ff0171450d00200141003a00c8020b2008a721022002450d08200241c4006c450d082005102e0c080b200141043602b002200120053602a8022001200341c4006c3602ac020b200141f0026a200d2002200141a8026a107d20012802f802210220012802f0024101460d0320012802f4022105200241c4006ead21080b2005200341c4006c6a2202200c360200200220012903683702042002410c6a2011290300370200200241146a20102903003702002002411c6a200e290300370200200220012903483702242002412c6a200f290300370200200241346a200b2903003702002002413c6a2012290300370200200842ffffffff0f83200341016aad422086842108200a2007470d000b0b2005450d030c040b20020d010b1038000b1036000b41002105200141003602f802200142013703f0022001410a3602d4022001200141286a3602d0022001200141f0026a36028802200141bc026a4101360200200142013702ac02200141909dc5003602a8022001200141d0026a3602b80220014188026a419cebc000200141a8026a103d1a20012802f00220012802f80210ef0220012802f402450d0020012802f002102e0b2006450d002004102e0b0240024020050d0020004100360208200042043702000c010b20002008370204200020053602000b20014190036a24000bd10102027f047e230041c0006b22022400200241306a2001109408200241106a20022802302201200228023810ae050240024020022802102203450d0020022902142104200241286a2903002105200241206a290300210602402002280234450d002001102e0b2002200620052004422088420010e808200241086a29030021054201210620022903002107200442ffffff3f83500d012003102e0c010b02402002280234450d002001102e0b420021060b2000200737030820002006370300200041106a2005370300200241c0006a24000be70601047f230041c0006b2202240041e086ca0021034110210441222105024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200141ff01710e24000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a41bca8cc001044000b41d886ca00210341082104410021050c210b41c986ca002103410f2104410121050c200b41c186ca00210341082104410221050c1f0b41b286ca002103410f2104410321050c1e0b41a186ca00210341112104410421050c1d0b418e86ca00210341132104410521050c1c0b41fd85ca00210341112104410621050c1b0b41f285ca002103410b2104410721050c1a0b41e885ca002103410a2104410821050c190b41db85ca002103410d2104410921050c180b41cf85ca002103410c2104410a21050c170b41be85ca00210341112104410b21050c160b41b385ca002103410b2104410c21050c150b41ab85ca00210341082104410d21050c140b41a385ca00210341082104410e21050c130b419485ca002103410f2105410f21040c120b418385ca00210341112104411021050c110b41f484ca002103410f2104411121050c100b41e984ca002103410b2104411221050c0f0b41e084ca00210341092104411321050c0e0b41d684ca002103410a2104411421050c0d0b41ce84ca00210341082104411521050c0c0b41c284ca002103410c2104411621050c0b0b41b184ca00210341112104411721050c0a0b41a984ca00210341082104411821050c090b41a084ca00210341092104411921050c080b418f84ca00210341112104411a21050c070b418284ca002103410d2104411b21050c060b41f883ca002103410a2104411c21050c050b41e783ca00210341112104411d21050c040b41df83ca00210341082104411e21050c030b41d083ca002103410f2104411f21050c020b41c183ca002103410f2104412021050c010b41b383ca002103410e2104412121050b200041831c3b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000b850201037f230041d0006b22022400200241086a41de80ca004109108102200241186a419781ca004109108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000bf30501077f230041e0016b22042400200441d0006a41186a22054200370300200441d0006a41106a22064200370300200441d0006a41086a2207420037030020044200370350200441086a41de80ca0041091081022007200441086a41086a220829000037030020042004290008370350200441086a41ccf8ca00410f10810220052008290000370300200620042900083703002004200441d0006a4120108e02200428020421092004280200210a20054200370300200642003703002007420037030020044200370350200441086a41de80ca0041091081022007200829000037030020042004290008370350200441086a41ccf8ca00410f1081022005200829000037030020062004290008370300200420094100200a1b220541016a360208200441d0006a4120200441086a410410b201200441376a42003700002004412f6a4200370000200441276a42003700002004411f6a4200370000200441086a410f6a42003700002004420037000f200441d0006a41096a2008290000370000200441e1006a200441086a41106a290000370000200441e9006a200441086a41186a290000370000200441f1006a200441086a41206a290000370000200441f9006a200441306a29000037000020044180016a42003700002004418c016a200336020020044188016a200036020020044190016a200129000037030020044198016a200141086a290000370300200441a0016a200141106a290000370300200441a8016a200141186a290000370300200441003a005020042004290008370051200441b0016a20023a0000200441c0006a20051089052004280248210820042802402101200441003602d801200442013703d001200441d0006a200441d0016a10bc052001200820042802d001220620042802d80110b201024020042802d401450d002006102e0b02402004280244450d002001102e0b200441dc006a2005360200200441d8006a41033a0000200441093a0050200441d0006a41096a20023a0000200441d0006a10fe01200441e0016a24000b8d04010b7f230041e0016b22022400200241206a41186a22034200370300200241206a41106a22044200370300200241206a41086a2205420037030020024200370320200241e0006a41de80ca0041091081022005200241e0006a41086a220629000037030020022002290060370320200241e0006a418081ca00410c1081022003200629000037030020042002290060370300200241e0006a200241206a10aa050240024020022d00800122034103470d00200041131093080c010b200241206a412010ff01200241086a22042006290300370300200241106a2205200241e0006a41106a2207290300370300200241186a2208200241e0006a41186a220929030037030020022002290360370300200241c0006a41186a220a4200370300200241c0006a41106a220b4200370300200241c0006a41086a220c420037030020024200370340200241e0006a41de80ca004109108102200c200629000037030020022002290060370340200241e0006a41a8fbca004115108102200a2006290000370300200b2002290060370300200241013a0060200241c0006a4120200241e0006a410110b201200641023a0000200241093a0060200241e0006a10fe012009200829030037030020072005290300370300200620042903003703002002200229030037036020014180ce186a200241e0006a20034180ce18109508200041063a00000b200241e0016a24000bf60d040a7f027e027f027e230041b0096b2203240020034190016a2001109808200341d0066a2003280290012204200328029801220510ad0541022106024020032d00d006220741024622080d002004200510ff010b200341f8036a411f6a2209200341f0066a280000360000200341f8036a41186a220a200341e9066a290000370300200341f8036a41106a220b200341e1066a290000370300200341f8036a41086a220c200341d9066a290000370300200320032900d1063703f80320034198076a290300210d20034190076a290300210e200341fc066a280200210f200341f8066a2802002110200341f4066a2802002105024020080d00200341c8006a411f6a2009280000360000200341c8006a41186a200a290300370300200341c8006a41106a200b290300370300200341c8006a41086a200c290300370300200320032903f803370348200721060b0240200328029401450d002004102e0b024002400240024002400240200641037122044103460d0020040e03010001010b200341f0006a41186a2206200341c8006a41186a290300370300200341f0006a41106a2204200341c8006a41106a290300370300200341f0006a41086a2208200341c8006a41086a290300370300200320032903483703702003200f3602c403200320053602c00320034190016a200341c0036a1098010240200328029001411c460d00200341386a200341f0006a200e200d10fb01200341a8076a200d370300200341a0076a200e370300200341d0066a41086a410c3a0000200341f9066a200329037037000020034181076a200829030037000020034189076a200429030037000020034191076a2006290300370000200341e1066a200141086a290000370000200341e9066a200141106a290000370000200341f1066a200141186a2900003700002001290000210d200341093a00d006200341d0066a41096a200d370000200341d0066a10fe01200341f8036a20034190016a41b00210e9081a4110102c2201450d02200141f8f7c60036020c200141013602082001428180808010370200024002404101200341f8036a1093060d00200341e8036a41023a000041002106200341e0036a41003a000020012001280200417f6a2204360200200342003703d003200342013703c803024020040d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22042004280200417f6a220436020020040d002001102e0b200341f8036a10dc020c010b200341d0066a200341f8036a41b00210e9081a2003418a096a200341b2066a29010037010020034192096a200341ba066a2901003701002003419a096a200341c2066a290100370100200341a0096a200341c8066a290100370100200341003b018009200320032901aa0637018209200320013602a809200341c8036a200341d0066a20034180096a10dd0220032903c8035021060b200341dc066a2002360200200341d8066a41073a0000200341093a00d006200341d0066a41096a20063a0000200341d0066a10fe01200041063a000020100d040c050b200341186a200341f0006a200e200d10cb022003290318210d2003200341186a41086a290300220e3703d8062003200d3703d00602400240200d200e844200520d002003200341d0066a3602f803200341f8036a10cc020c010b200342f0f2bda1a7ee9cb9f9003703f803200341d0066a200341f8036a10cd02200341086a200341d0066a200d200e10fd0120034188046a200341086a41086a2903002211200e7d20032903082212200d54ad7d200e20117d200d201254ad7d2012200d562011200e562011200e511b22061b37030020032012200d7d200d20127d20061b3703800420032006ad3703f803200341f8036a41086a21040240024020060d00200320043602c803200341c8036a10cc020c010b200320043602c803200341c8036a10ce020b200341e8066a200e370300200341e0066a200d370300200341d8066a41063a00002003410e3a00d006200341d0066a10fe010b200341d0066a41086a410d3a0000200341fc066a20023602002001290000210d200341093a00d006200341d0066a41096a200d370000200341e1066a200141086a290000370000200341e9066a200141106a290000370000200341f1066a200141186a290000370000200341d0066a10fe012000411210930820100d030c040b200341d0066a41086a410e3a0000200341fc066a20023602002001290000210d200341093a00d006200341d0066a41096a200d370000200341e1066a200141086a290000370000200341e9066a200141106a290000370000200341f1066a200141186a290000370000200341d0066a10fe0120004110109308200641037122014103460d0120010e03030103030b1036000b2010450d010b2005102e0b200341b0096a24000bf50101047f230041306b22022400200241de80ca004109108102200241106a41f780ca004109108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000be70301047f23004180016b22022400200241386a41a081ca004107108102200241d8006a41a781ca0041121081022002200136027c2002200241fc006a410410a3013703282002410c6a200241fc006a41046a3602002002200241306a3602042002200241fc006a3602082002200241286a360200200241c8006a2002107c024002402002280250220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b200241003602302002200136022c20022004360228200241286a200241386a41101074200241286a200241d8006a41101074200241286a20022802482201200310740240200228024c450d002001102e0b200220022802282201200228023010a503200241e0006a22032002410c6a290200370300200241d8006a41106a200241146a290200370300200241f0006a22042002411c6a290200370300200241f8006a2205200241246a280200360200200220022902043703580240024020022802004101460d00200041003602000c010b20004101360200200020022903583702042000410c6a2003290300370200200041146a200241e8006a2903003702002000411c6a2004290300370200200041246a20052802003602000b0240200228022c450d002001102e0b20024180016a24000f0b1038000b1036000bcc0d04037f017e057f077e230041b0026b220424000240024002400240024002400240200141e0006a22052001413c6a412010ec08450d0020044180016a41186a200541186a29000037030020044180016a41106a200541106a29000037030020044180016a41086a200541086a29000037030020042005290000370380010240200120044180016a10af022206450d00200628020c41004a0d010b200441e0006a41086a2201200541086a290000370300200441e0006a41106a2203200541106a290000370300200441e0006a41186a2202200541186a290000370300200420052900003703604130102c2205450d01200541003a0000200520042903603700012005200429008001370021200541096a2001290300370000200541116a2003290300370000200541196a2002290300370000200541286a220120044187016a29000037000002400240024020052d00000e0402020002010b200541086a280200450d01200541046a280200102e0c010b2001280200450d00200541246a280200102e0b2005102e200041003602400c060b2004410036021420042005360210200441bc81ca0036020c20042001360208200441c8016a4120360200200420033602c401200420023602c0014124102c2205450d002004422437021c20042005360218200441186a200441c0016a410410744120200441186a1076200441186a20034120107420044180016a200441086a20042802182205200428022010aa020240200428021c450d002005102e0b02402004280280014101470d000240024020042802840122052d00000e0407070007010b200541086a280200450d06200541046a280200102e0c060b200541286a280200450d05200541246a280200102e0c050b02402004280284012205450d000240024020044188016a2903002207422088a741044f0d00410021010c010b20052800002103410121010b02402007a7450d002005102e0b2001450d002004200336021820044180016a200441086a200441186a410410aa0202402004280280014101470d000240024020042802840122052d00000e0407070007010b200541086a280200450d06200541046a280200102e0c060b200541286a280200450d05200541246a280200102e0c050b024020042802840122020d00200041003602400c070b200420044188016a2903002207422088a7220636025c2004200236025841002105200441003a00382006417f6a21010240034020062005460d01200441186a20056a200220056a22032d00003a00002004200341016a3602582004200541016a22033a00382004200136025c2001417f6a21012003210520034120460d040c000b0b0240200541ff0171450d00200441003a00380b410021050c030b200041003602400c050b1036000b200441c0016a41086a2205200441186a41086a290300370300200441c0016a41106a2201200441186a41106a290300370300200441c0016a41186a2206200441186a41186a290300370300200420042903183703c0010240200341ff0171411f4b0d00410021050c010b200441e0006a41086a2005290300370300200441e0006a41106a2001290300370300200441e0006a41186a2006290300370300200420042903c001370360200441c0016a200441d8006a108505024020042802e00122050d00410021050c010b20044180016a41186a2201200441e0006a41186a29030037030020044180016a41106a2203200441e0006a41106a29030037030020044180016a41086a2206200441e0006a41086a29030037030020044180016a41286a2208200441c0016a41086a29030037030020044180016a41306a2209200441c0016a41106a29030037030020044180016a41386a220a200441c0016a41186a290300370300200441f0016a41086a220b200441ec016a2802003602002004200429036037038001200420042903c0013703a0012004200441e4016a2902003703f001200441186a41386a220c200a290300370300200441186a41306a2009290300220d370300200441186a41286a2008290300220e370300200441186a41206a20042903a001220f370300200441186a41186a20012903002210370300200441186a41106a20032903002211370300200441186a41086a2006290300221237030020042004290380012213370318200041306a200d370300200041286a200e370300200041206a200f370300200041186a2010370300200041106a2011370300200041086a201237030020002013370300200041386a200c290300370300200020042903f001370244200041cc006a200b2802003602000b200020053602402007a7450d022002102e0c020b2005102e200041003602400c010b2005102e200041003602400b200441b0026a24000bca32021a7f0c7e23002201210220014180056b41607122012400200041246a220328020022042802002105200341d0a1c00036020020002802202106200041003602202000412c6a2203280200210720034100360200200041286a41003602002001200036021c2004200641016a22086a2109200441046a21032005417f7341808182847871210a200141a0026a410572210b200141a0026a41276a210c200141a0026a41206a210d2004210502400240034002400240200a0d000340024020032009490d004100210e0c060b200541c07d6a21052003280200210e200341046a220f2103200e41808182847871220e418081828478460d000b200e41808182847873220a417f6a200a71210e0c010b200a417f6a200a71210e2005450d022003210f0b20014180046a41186a221020054100200a684103766b41d0006c6a221141b07f6a220341186a29020037030020014180046a41106a2212200341106a29020037030020014180046a41086a2213200341086a2902003703002001200329020037038004201141506a280200210a201141546a2d00002111200c200341cc006a280000360000200d200341c5006a290000370300200141a0026a41186a22142003413d6a290000370300200141a0026a41106a2215200341356a290000370300200141a0026a41086a22162003412d6a290000370300200120032900253703a0022007417f6a2107024020114102470d00200f21030c030b200141b8036a41186a22032010290300370300200141b8036a41106a22172012290300370300200141b8036a41086a22182013290300370300200141a8016a41086a22192016290300370300200141a8016a41106a22162015290300370300200141a8016a41186a22152014290300370300200141a8016a41206a2214200d290300370300200141a8016a41276a221a200c28000036000020012001290380043703b803200120012903a0023703a801201020032903003703002012201729030037030020132018290300370300200120012903b80337038004200b20012903a801370000200b41086a2019290300370000200b41106a2016290300370000200b41186a2015290300370000200b41206a2014290300370000200b41276a201a280000360000200120113a00a4022001200a3602a002200128021c220341d0006a2802002111200328024c210302400240200a4125490d0020012802ac02210a20012802a80221100c010b200b21100b200120012f01cc023b01c8042001200a3602c404200120103602c004200320014180046a200141c0046a201128021c110600024020012802a0024125490d0020012802a802102e0b200f2103200e210a0c000b0b410021050b02402007450d00034002400240200e0d000340200320094f0d04200541c07d6a21052003280200210e200341046a220f2103200e41808182847871220e418081828478460d000b200e41808182847873220e417f6a200e71210b200f21030c010b2005450d02200e417f6a200e71210b0b200e68210f200b210e20054100200f4103766b41d0006c6a220f41506a2802004125490d00200f41586a280200102e200b210e0c000b0b024002402006450d00200441ff01200641056a10eb081a200641074d0d00200841037641076c21030c010b200621030b200020063602202000412c6a4100360200200041286a2003360200200041246a2004360200024002400240024002400240200128021c22052d00584101460d00200541dc006a28020021030240200541c8006a220b280200220e200e417f6a2209200541c0006a220f280200220e2005413c6a220a2802006b716b4101470d00200a10a502200b280200417f6a2109200f280200210e0b200f2009200e41016a71360200200541c4006a280200200e4102746a200336020002400240024002400240024002400240024002400240200541386a280200220e20034d0d00200541306a2209280200200341fc006c6a2203290210211b200320012903b0023702102003290208211c200320012903a802370208200341186a220e290200211d200e20012903b802370200200141003a00a002200141003602a4022003290200211e200320012903a002370200200141206a41086a220e200341e8006a290200370300200141206a41106a220f200341f0006a290200370300200141206a41186a220b200341f8006a2802003602002001201b370390012001201c370388012001201e37038001200120032902603703202001201d370398012003290240211f200341c8006a2902002120200341d0006a2902002121200341d8006a290200212220032902202123200341286a2902002124200341306a29020021252001200341386a29020022263703782001202537037020012024370368200120233703602001202237035820012021370350200120203703482001201f3703400240201ea741ff01714101470d00200141a8016a41176a220a200129009801221e370000200141a8016a41106a2211200129009101221c370300200141a8016a41086a2210200129008901221b37030020052802542203200129008101221d37000020032023a722053a001f200341086a201b370000200341106a201c370000200341176a201e3700002001201d3703a801200141a0026a41d8006a2022370300200141a0026a41d0006a2021370300200141a0026a41c8006a2020370300200141e0026a201f370300200141dc026a200128027c360200200141d4026a2001290274370200200141cc026a200129026c370200200120012902643702c40220014180036a2001290320370300200141a0026a41e8006a200e290300370300200141a0026a41f0006a200f290300370300200141a0026a41f8006a200b280200360200200141a9026a2010290300370000200141b1026a2011290300370000200141a0026a41186a200a290000370000200120012903a8013700a102200141c0026a20053a0000200141013a00a0022009200141a0026a109d082103200128021c220141003a0058200141dc006a20033602000c0c0b201ca72105201c422088a72103200141003602d401200141003a00ac01200141003602a801200141e8016a41106a2001280258360200200141e8016a41086a2001290350370300200120012903483703e80102400240024002400240201e422088a70e050102030400010b200141c0026a2024370300200141b8026a2023370300200141b0026a201d370300200141a8026a201b370300200141c8026a2025370300200120053602a002200120033602a4020240024020034125490d00201b422088a7210b201da721030c010b200141a9026a210b0b2005410176210f024002402005410171450d002003200f4d0d08200b200f6a2d0000410f71210e4100210a200f41016a210f0c010b2003200f490d064101210a4100210e0b200341017420056b220541ffff03200541ffff03491b220541017641036a2211102c2210450d142003200f6b2109200b200f6a210f200141003602e001200120113602dc01200120103602d80102402026422088a72218410020181b2211450d00200120053602840420014181023b01800420014180046a200141d8016a10ff0541002105200a450d0a410021030c0d0b2001200536028404200141013b01800420014180046a200141d8016a10ff0541002105200a450d0a410021030c0b0b4101102c2203450d13200141013602dc01200120033602d801200341003a0000200141013602e0010c0d0b200141c0026a2024370300200141b8026a2023370300200141b0026a201d370300200141a8026a201b370300200141c8026a2025370300200120053602a002200120033602a4020240024020034125490d00201b422088a72109201da721030c010b200141a9026a21090b2005410176210e024002402005410171450d002003200e4d0d08200141013a00800420014188046a2003200e41016a22056b3602002001200920056a3602840420012009200e6a2d0000410f713a0081040c010b2003200e490d0620014188046a2003200e6b360200200141003b01800420012009200e6a360284040b200141d8016a20014180046a2026a72203201fa710970702402026422088a7450d002003102e0b20012802a4024125490d0c200141ac026a280200102e0c0c0b200141c0026a2024370300200141b8026a2023370300200141b0026a201d370300200141a8026a201b370300200141c8026a2025370300200120053602a002200120033602a4020240024020034125490d00201b422088a7210e201da721030c010b200141a9026a210e0b200120053602e803200120033602e4032001200e3602e003200141c0046a200141e0036a109e08200141a8016a200141e0036a41002001109f082103200128021c2105200141b8036a41086a201f370300200141b8036a41106a20012903e801370300200141d0036a200141e8016a41086a290300370300200141d8036a200141e8016a41106a280200360200200120263703b80320014180046a2005200141b8036a200141a8016a10a008200141a8016a200310a108109607000b109507000b2003200e419482ca00103c000b200f200341e0eecc001056000b200f200341f0eecc00103c000b200e200341e0eecc001056000b200e200341f0eecc00103c000b410121030c020b410121030b03400240024020030e020001010b200520094f0d03200f20056a2d0000210e200541016a2105410121030c010b02400240024020012802e001220320012802dc01470d00200341016a220b2003490d0b2003410174220a200b200a200b4b1b220b4108200b41084b1b210b0240024020030d0020014100360280040c010b20014180046a41086a41013602002001200336028404200120012802d801360280040b200141b8036a200b410120014180046a107d200141c0036a280200210b20012802b8034101460d0120012802bc03210a2001200b3602dc012001200a3602d8010b20012802d80120036a200e3a00002001200341016a3602e0010c010b200b0d0a0c090b410021030c000b0b03400240024020030e020001010b200520094f0d02200f20056a2d0000210e200541016a2105410121030c010b02400240024020012802e001220320012802dc01470d00200341016a220b2003490d0a2003410174220a200b200a200b4b1b220b4108200b41084b1b210b0240024020030d0020014100360280040c010b20014180046a41086a41013602002001200336028404200120012802d801360280040b200141b8036a200b410120014180046a107d200141c0036a280200210b20012802b8034101460d0120012802bc03210a2001200b3602dc012001200a3602d8010b20012802d80120036a200e3a00002001200341016a3602e0010c010b200b450d080c090b410021030c000b0b20012802e00122162103024002400240024002400240201620012802dc01470d00201641016a22032016490d0b201641017422052003200520034b1b22034108200341084b1b21030240024020160d0020014100360280040c010b20014180046a41086a41013602002001201636028404200120012802d801360280040b200141b8036a2003410120014180046a107d200141c0036a280200210320012802b8034101460d0120012802bc032105200120033602dc01200120053602d80120012802e00121030b20012802d80120036a41003a0000200120012802e00141016a22033602e001024002400240200320012802dc01470d00200341016a22052003490d0d2003410174220e2005200e20054b1b22054108200541084b1b21050240024020030d0020014100360280040c010b20014180046a41086a41013602002001200336028404200120012802d801360280040b200141b8036a2005410120014180046a107d200141c0036a280200210320012802b8034101460d0120012802bc032105200120033602dc01200120053602d80120012802e00121030b2026a7221741c0046a211420012802d80120036a41003a0000200120012802e00141016a3602e00102402011450d00201f422088a72203200141d8016a1076200141d8016a2011200310740b20142017470d0141002111410021030c040b20030d0c0c0b0b20014180046a410172210e200141a9026a2119200141c0046a41017221054100210a20172103410021114101210b02400340200141023a0080042003290200211e200129039804211c2001290390042123200129038804211b20032001290380043702002003290208211d2003201b3702082003290210211b20032023370210200341186a220929020021232009201c370200200120233703d8042001201b3703d0042001201d3703c8042001201e3703c004200341206a280200210720014180046a41176a2210200541176a29000037000020014180046a41106a2209200541106a29000037030020014180046a41086a220f200541086a29000037030020012005290000370380040240201ea7220c41ff017122124103470d0020114180fe037141087621030c060b200141e0036a41176a22132010290000370000200141e0036a41106a22102009290300370300200141e0036a41086a200f290300221e3703002001200129038004221c3703e003200141c0046a41176a220d2013290000370000200141c0046a41106a22132010290300370300200141c0046a41086a2210201e3703002001201c3703c00402400240024020124102470d00200141023a00b8030c010b0240024020012802a40222124125490d0020012802b002211220012802ac0221150c010b201921150b200120012802a0023602f804200120123602f404200120153602f004200141a8016a200141f0046a4101200a109f082112200128021c2115200e20012903c004370000200e41086a2010290300370000200e41106a2013290300370000200e41176a200d2900003700002001200c3a008004200120073602a004200141b8036a201520014180046a200141a8016a10a008200141a8016a201210a10820012d00b8034103460d010b20014180046a41206a200141b8036a41206a29030037030020014180046a41186a200141b8036a41186a2903003703002009200141b8036a41106a290300370300200f200141b8036a41086a290300370300200120012903b803221e37038004410021090240024002400240201ea741ff0171417f6a0e020103000b4120200141d8016a1076200141d8016a200e412010740c010b200141c0046a41186a200e41186a2900003703002013200e41106a2900003703002010200e41086a2900003703002001200e2900003703c00420012802a404220941214f0d042009200141d8016a1076200141d8016a200141c0046a200910740b200b21090b200a41016a210a200b410174210b20092011722111200341246a22032014460d040c010b0b20114180fe037141087621030c050b2009412041ccd3c800104d000b20030d0a0c090b20114180fe037141087621030b200141033a00c00420014197046a20012900d80437000020014190046a20012900d10437030020014188046a20012900c904370300200120012900c104370380040b200141033a00b8030b201641026a21052016417e4f0d0220012802e001220e2005490d0320012802d80120166a2003410874201141ff0171723b000002402018450d00201fa7450d002018102e0b2017102e20012802a4024125490d00200141ac026a280200102e0b200128021c220341d0006a2802002105200328024c210320014180046a41086a41002802cca140360200200141002902c4a14037038004200141a0026a200320014180046a20012802d80120012802e0012005280214110500200128021c2203280254220520012903a002370000200541086a200141a0026a41086a290300370000200541106a200141a0026a41106a290300370000200541186a200141a0026a41186a2903003700002003200328027c41016a36027c2003280254220541186a290000211e200541106a290000211c200541086a290000211f200341d9006a2005290000370000200341013a0058200341e1006a201f370000200341e9006a201c370000200341f1006a201e370000024020012802dc01450d0020012802d801102e0b20012802a8014125490d00200141b0016a280200102e0b0240200041386a2802002203450d0020002802302101200341fc006c210303400240024020012d00000d00200141046a10e2010c010b200141246a10e2010b200141fc006a2101200341847f6a22030d000b0b0240200041346a2802002201450d00200141fc006c450d002000280230102e0b200041c8006a280200210102400240200041c0006a28020022032000413c6a2802002205490d00200120034f0d012003200141b4f1c000104d000b20012005490d030b0240200141ffffffff0371450d00200041c4006a280200102e0b024020002802202205450d0002402000412c6a280200450d00200041246a280200220341046a2101200520036a41016a210e2003280200417f73418081828478712105024003400240024020050d0003402001200e4f0d04200341c07d6a210320012802002105200141046a220921012005418081828478712205418081828478460d000b2005418081828478732205417f6a200571210f200921010c010b2003450d022005417f6a200571210f0b2005682109200f21052003410020094103766b41d0006c6a220941506a2802004125490d00200941586a280200102e200f21050c000b0b200028022021050b200041246a280200200541016aad42d0007ea76b102e0b200224000f0b2016200541dcd3c8001057000b2005200e41dcd3c800104d000b41c4f1c000412341e8f1c0001039000b1038000b1036000b960401037f23004190016b2206240041002107200641003602080240024020012d00584101460d00200141dc006a28020021080c010b200641366a200141db006a2d00003a0000200641206a200141e8006a290000370300200641286a200141f0006a290000370300200641306a200141f8006a2d00003a00002006200141d9006a2f00003b01342006200141e0006a290000370318200141dc006a2800002108410121070b200641c8006a41086a2006290318370300200641c8006a41106a200641186a41086a290300370300200641c8006a41186a200641186a41106a290300370300200641e8006a200641186a41186a280200360200200620073a0048200620062f01343b00492006200836024c2006200641366a2d00003a004b200641003602782006200336027420062002360270024002402005417f4c0d004101210702402005450d002005102c2207450d020b2006200536028401200620073602800120072004200510e9081a2006200536028801200641386a2001200641c8006a200641f0006a20064180016a200641086a10ad08200628023c21050240024020062802384101460d00200141003a00582000200629030837020420004100360200200141dc006a20053602002000410c6a200641106a2802003602000c010b200041013602002000200536020420062802082201450d00200628020c450d002001102e0b20064190016a24000f0b1038000b1036000bdd0302047f017e230041a0016b220224000240024002400240200028020c2203200041106a280200470d002002200141fc0010e90821030240024020002802082201200041046a280200470d00200141016a22042001490d04200141017422052004200520044b1b22044104200441044b1bad42fc007e2206422088a74541027421042006a721050240024020010d0020034100360290010c010b20034198016a41043602002003200141fc006c3602940120032000280200360290010b20034180016a2005200420034190016a107d20034188016a28020021012003280280014101460d012000200328028401360200200041046a200141fc006e360200200028020821010b2000280200200141fc006c6a200341fc0010e9081a20002000280208220341016a3602080c020b2001450d021036000b2000410c6a200041186a280200417f6a200341016a71360200200041146a28020020034102746a28020021032002200141fc0010e90821012000280208220420034d0d020240024020002802002200200341fc006c6a22042d00000d002000200341fc006c6a41046a10e2010c010b2000200341fc006c6a41246a10e2010b2004200141fc0010e9081a0b200241a0016a240020030f0b1038000b2003200441f882ca00103c000bb80101057f2001280208220241017621032001280204210402400240024002402002410171450d00200420034d0d034101210220012802002205200341016a22066a2101200520036a2d0000410f712105200621030c010b20042003490d01200128020020036a210141002105410021020b200020023a000c20002001360204200041003602002000410d6a20053a0000200041086a200420036b3602000f0b2003200441e0eecc001056000b2003200441f0eecc00103c000b960a01127f230041106b2204240002400240024002400240024020010d00410021010c010b200141086a28020022054101762106200141046a2802002107024002400240024002400240024002402005410171450d00200720064b0d012006200741f0eecc00103c000b20072006490d02200720066b2108200128020020066a21090c010b20002001280200220120066a2d0000410f7110e3082007200641016a22066b2108200120066a21090b0240024002400240024002400240200028020022014125490d002000412c6a210a2000410c6a2206280200410174200028022c470d02200628020021010c010b2000412c6a210a2001410174200028022c470d020b20042000200810fc06024020042802004101470d00200441086a2802000d0c41d0f0cc00411141e4f0cc001039000b02400240200028020022064125490d002000410c6a28020022062001490d08200041086a280200210b0c010b20062001490d07200041056a210b0b200b20016a220b20086a200b200620016b10ea081a200b2009200810e9081a0240024020002802004125490d002000410c6a21010c010b200021010b2001200620086a3602000c090b20080d01410021080c080b20080d01410021080c070b2000410c6a280200220b2006280200417f6a22064b0d01200b21010c0b0b20012001417f6a22064d0d0a200041056a20066a2d0000417071210b0c030b200041086a28020020066a2d0000417071210b20014125490d022000410c6a2802002101200041086a280200210c0c030b2006200741e0eecc001056000b41f4f1cc00411e4194f2cc001039000b200041056a210c0b200120064d0d03200c20066a200b3a000020092d0000210b02400240200028020022014125490d002000410c6a2802002101200041086a280200210c0c010b200041056a210c0b200120064d0d04200c20066a220120012d0000200b410476723a0000024002402008417f6a220d0d004100210d0c010b2008417f6a210e20084101200841014b1b417f6a210f410021012000410c6a2110200041086a2111200041056a21120340024002400240024020082001460d00200f2001460d01200920016a22062d00002113200641016a2d00002114024002402000280200220c4125490d0020102802002106201128020021152010210b0c010b200c21062000210b201221154124210c0b2006200c470d0320042000410110fc0620042802004101470d02200441086a2802000d0841d0f0cc00411141e4f0cc001039000b2008200841c0eecc00103c000b200141016a200841d0eecc00103c000b2000410c6a220b2802002106201128020021150b201520066a201441f001714104762013410474723a0000200b200b28020041016a360200200e200141016a2201470d000b0b2009200d6a2d00002115024002402000280200220b4125490d002000410c6a22012802002106200041086a280200210c0c010b200041056a210c200b2106200021014124210b0b02402006200b470d0020042000410110fc06024020042802004101470d00200441086a2802000d0441d0f0cc00411141e4f0cc001039000b2000410c6a22012802002106200041086a280200210c0b200c20066a20154104743a00002001200128020041016a3602000b200a200a28020020084101746a360200200741017420056b21010b02402002450d002000200310e308200141016a21010b200441106a240020010f0b1036000b2006200141a0eecc00103c000b2006200141b0eecc00103c000b200620014190eecc00103c000bec2603067f067e0d7f230022042105200441e0036b416071220424002004200336021420042001360210024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020022d00004101460d00200241046a28020021020240200141c8006a220628020022032003417f6a2207200141c0006a220828020022032001413c6a22092802006b716b4101470d00200910a5022006280200417f6a2107200828020021030b20082007200341016a71360200200141c4006a28020020034102746a2002360200200141386a280200220320024d0d022001280230200241fc006c6a2201290210210a200120042903f0013702102001290208210b200120042903e801370208200441d8006a2001290240220c370300200441386a22032001290220370300200441f8006a2001290260370300200141186a2202290200210d200220042903f801370200200441003a00e001200441003602e4012001290200210e200120042903e001370200200441186a41d8006a2207200141d8006a290200370300200441186a41d0006a2208200141d0006a290200370300200441186a41c8006a2206200141c8006a290200370300200441186a41386a200141386a290200220f370300200441186a41306a2209200141306a290200370300200441186a41286a2210200141286a290200370300200441186a41186a2211200d370300200441186a41e8006a200141e8006a290200370300200441186a41f0006a200141f0006a290200370300200441186a41f8006a200141f8006a2802003602002004200a3703282004200b3703202004200e370318200ea741ff01714101460d01200ba72102200b422088a72101200c422088a72112200fa72113200441c0016a41086a22142003290300370300200441c0016a41106a22032010290300370300200441c0016a41186a2009290300370300200441a8016a41086a2008290300370300200441a8016a41106a2007280200360200200420112903003703c001200420062903003703a801200441d4006a290200220fa7211502400240024002400240200e422088a70e050102030400010b200441e0016a41086a200a370300200441e0016a41106a20042903c001370300200441e0016a41186a201429030037030020044180026a200329030037030020044188026a200441c0016a41186a290300370300200420023602e001200420013602e4010240024020014125490d00200a422088a7210620042802f00121010c010b200441e9016a21060b20024101762108024002402002410171450d00200120084d0d0a200620086a2d0000410f71210341002109200841016a21080c010b20012008490d0841012109410021030b200141017420026b220241ffff03200241ffff03491b220241017641036a2210102c2211450d19200120086b2107200620086a2108200441003602a0012004201036029c01200420113602980102402015410020151b2210450d00200420023602e40220044181023b01e002200441e0026a20044198016a10ff05410021022009450d0c410021010c0f0b200420023602e402200441013b01e002200441e0026a20044198016a10ff05410021022009450d0c410021010c0d0b4101102c2201450d182004410136029c012004200136029801200141003a0000200441013602a0010c0f0b200441e0016a41086a200a370300200441e0016a41106a20042903c001370300200441e0016a41186a201429030037030020044180026a200329030037030020044188026a200441c0016a41186a290300370300200420023602e001200420013602e4010240024020014125490d00200a422088a7210720042802f00121010c010b200441e9016a21070b20024101762103024002402002410171450d00200120034d0d0a200441013a00e002200441e8026a2001200341016a22026b3602002004200720026a3602e4022004200720036a2d0000410f713a00e1020c010b20012003490d08200441e8026a200120036b360200200441003b01e0022004200720036a3602e4020b20044198016a200441e0026a2013200f422088a710970702402015450d002013102e0b20042802e4014125490d0e200441ec016a280200102e0c0e0b200441e0016a41086a200a370300200441e0016a41106a20042903c001370300200441e0016a41186a201429030037030020044180026a200329030037030020044188026a200441c0016a41186a290300370300200420023602e001200420013602e4010240024020014125490d00200a422088a7210020042802f00121010c010b200441e9016a21000b200420023602c802200420013602c402200420003602c002200441a0036a200441c0026a109e082004280214200441c0026a41002004109f08210120042802102102200441a4026a201236020020044198026a41106a20042903a801370300200441b0026a200441b0016a290300370300200441b8026a200441a8016a41106a2802003602002004200f37029c022004201336029802200441e0026a200220044198026a2004280214220410a0082004200110a108109607000b109507000b200041003a000020002002290001370001200041196a200241196a290000370000200041116a200241116a290000370000200041096a200241096a2900003700000c120b20002004290019370001200041003a0000200041196a200441186a41196a290000370000200041116a200441186a41116a290000370000200041096a200441186a41096a2900003700000c0b0b20022003419482ca00103c000b2008200141e0eecc001056000b2008200141f0eecc00103c000b2003200141e0eecc001056000b2003200141f0eecc00103c000b410121010c020b410121010b03400240024020010e020001010b200220074f0d03200820026a2d00002103200241016a2102410121010c010b02400240024020042802a0012201200428029c01470d00200141016a22062001490d0e200141017422092006200920064b1b22064108200641084b1b21060240024020010d00200441003602e0020c010b200441e0026a41086a4101360200200420013602e40220042004280298013602e0020b20044198026a20064101200441e0026a107d200441a0026a28020021062004280298024101460d01200428029c0221092004200636029c0120042009360298010b20042802980120016a20033a00002004200141016a3602a0010c010b20060d0d0c0c0b410021010c000b0b03400240024020010e020001010b200220074f0d02200820026a2d00002103200241016a2102410121010c010b02400240024020042802a0012201200428029c01470d00200141016a22062001490d0d200141017422092006200920064b1b22064108200641084b1b21060240024020010d00200441003602e0020c010b200441e0026a41086a4101360200200420013602e40220042004280298013602e0020b20044198026a20064101200441e0026a107d200441a0026a28020021062004280298024101460d01200428029c0221092004200636029c0120042009360298010b20042802980120016a20033a00002004200141016a3602a0010c010b2006450d0b0c0c0b410021010c000b0b20042802a001221621010240024002400240024002402016200428029c01470d00201641016a22012016490d0e201641017422022001200220014b1b22014108200141084b1b21010240024020160d00200441003602e0020c010b200441e0026a41086a4101360200200420163602e40220042004280298013602e0020b20044198026a20014101200441e0026a107d200441a0026a28020021012004280298024101460d01200428029c0221022004200136029c01200420023602980120042802a00121010b20042802980120016a41003a0000200420042802a00141016a22013602a0010240024002402001200428029c01470d00200141016a22022001490d10200141017422032002200320024b1b22024108200241084b1b21020240024020010d00200441003602e0020c010b200441e0026a41086a4101360200200420013602e40220042004280298013602e0020b20044198026a20024101200441e0026a107d200441a0026a28020021012004280298024101460d01200428029c0221022004200136029c01200420023602980120042802a00121010b201341c0046a211720042802980120016a41003a0000200420042802a00141016a3602a00102402010450d00201220044198016a107620044198016a2010201210740b20172013470d0141002110410021010c040b20010d0f0c0e0b200441e0026a4101722103200441e9016a2118200441a0036a41017221024100210920132101410021104101210602400340200441023a00e0022001290200210e20042903f802210b20042903f002210a20042903e802210d200120042903e0023702002001290208210c2001200d3702082001290210210d2001200a370210200141186a2207290200210a2007200b3702002004200a3703b8032004200d3703b0032004200c3703a8032004200e3703a003200141206a2802002119200441e0026a41176a2211200241176a290000370000200441e0026a41106a2207200241106a290000370300200441e0026a41086a2208200241086a290000370300200420022900003703e0020240200ea7221a41ff017122144103470d0020104180fe037141087621010c060b200441c0026a41176a22122011290000370000200441c0026a41106a22112007290300370300200441c0026a41086a2008290300220e370300200420042903e002220b3703c002200441a0036a41176a221b2012290000370000200441a0036a41106a22122011290300370300200441a0036a41086a2211200e3703002004200b3703a00302400240024020144102470d00200441023a0098020c010b0240024020042802e40122144125490d0020042802f001211420042802ec01211c0c010b2018211c0b200420042802e0013602d803200420143602d4032004201c3602d0032004280214200441d0036a41012009109f0821142004280210211c200320042903a003370000200341086a2011290300370000200341106a2012290300370000200341176a201b2900003700002004201a3a00e002200420193602800320044198026a201c200441e0026a2004280214221910a0082019201410a10820042d0098024103460d010b200441e0026a41206a20044198026a41206a290300370300200441e0026a41186a20044198026a41186a290300370300200720044198026a41106a290300370300200820044198026a41086a2903003703002004200429039802220e3703e002410021070240024002400240200ea741ff0171417f6a0e020103000b412020044198016a107620044198016a2003412010740c010b200441a0036a41186a200341186a2900003703002012200341106a2900003703002011200341086a290000370300200420032900003703a003200428028403220741214f0d04200720044198016a107620044198016a200441a0036a200710740b200621070b200941016a21092006410174210620072010722110200141246a22012017460d040c010b0b20104180fe037141087621010c050b2007412041ccd3c800104d000b20010d0d0c0c0b20104180fe037141087621010b200441033a00a003200441f7026a20042900b803370000200441f0026a20042900b103370300200441e8026a20042900a903370300200420042900a1033703e0020b200441033a0098020b201641026a21022016417e4f0d0220042802a00122032002490d0320042802980120166a2001410874201041ff0171723b000002402015450d00200f428080808010540d002015102e0b2013102e20042802e4014125490d00200441ec016a280200102e0b0240024020042802a00122014120490d002004280210220241d0006a2802002108200228024c21062004280214220728022c22094101762102200728020021030240024020094101710d000240024020034125490d002007410c6a2802002103200741086a28020021070c010b200741056a21070b20032002490d07200420073602e002410021030c010b0240024020034125490d002007410c6a220928020022032002490d0a200741086a2210280200210720092802002103201028020021090c010b20032002490d09200741056a220721090b200320024d0d07200441e9026a200920026a2d000041f001713a0000200420073602e002410121030b200420033a00e802200420023602e402200441e0016a2006200441e0026a20042802980120012008280214110500200020042903e001370001200041096a200441e8016a290300370000200041116a200441f0016a290300370000200041196a200441f8016a290300370000200041003a000020042802102201200128027c41016a36027c0c010b200441f8016a22024200370300200441f0016a22034200370300200441e8016a22074200370300200442003703e001200441e0016a200428029801200110e9081a200041246a2001360200200041013a0000200041196a2002290300370000200041116a2003290300370000200041096a2007290300370000200020042903e0013700010b0240200428029c01450d00200428029801102e0b20042d0018450d060b2004413c6a10e201200524000f0b2016200241dcd3c8001057000b2002200341dcd3c800104d000b2002200341e0edcc00104d000b200220034180eecc00103c000b2002200341f0edcc00104d000b200524000f0b1038000b1036000b960301057f0240024002402001450d000240200028022c220220014b0d0002400240200028020022014125490d002000410c6a220228020021010c010b200021020b02402001450d00200241003602000b2000410036022c0f0b200220016b2203410176200341017122046a210202400240200028020022014125490d002000410c6a28020021050c010b200121050b0240200220054f0d002000410c6a2106200220056b41016a210203400240024020014125490d0020062802002101200621050c010b200021050b02402001450d0020052001417f6a3602000b2002450d01200241016a2102200028020021010c000b0b2000200336022c2004450d0002400240200028020022014125490d002000410c6a220528020022012001417f6a22024d0d04200041086a220628020020026a2d0000417071210020052802002101200628020021050c010b2001417f6a220220014f0d03200041056a220520026a2d000041707121000b200120024d0d01200520026a20003a00000b0f0b2002200141d0edcc00103c000b2002200141c0edcc00103c000b130020004119360204200041f086ca003602000b3400200041de80ca0036020420004100360200200041146a410e360200200041106a41e4ecca00360200200041086a42093702000b7c01017f230041f0006b22022400200241106a4200370300200241186a4200370300200241206a4200370300200241286a4200370300200241306a4200370300200241386a4200370300200241c0006a410036020020024108360204200241086a4200370300200241003a00002000200210c204200241f0006a24000b2f01017f02404104102c22020d001036000b2000420437020420002002360200410020001076410441002000109b010b130020004108360204200041b48bcb003602000b4301027f230041106b2202240002404104102c22030d001036000b2000420437020420002003360200200241e40036020c20002002410c6a41041074200241106a24000b4401027f230041106b2202240002404104102c22030d001036000b2000420437020420002003360200200241c0930636020c20002002410c6a41041074200241106a24000b4301027f230041106b2202240002404104102c22030d001036000b2000420437020420002003360200200241880e36020c20002002410c6a41041074200241106a24000b4b01027f230041106b2202240002404110102c22030d001036000b20004210370204200020033602002002420037030820024280a094a58d1d3703002000200241101074200241106a24000b4401027f230041106b2202240002404104102c22030d001036000b200042043702042000200336020020024180ce1836020c20002002410c6a41041074200241106a24000b880202037f017e230041106b220224000240024020002d00004101460d00200241003a000020012002410110742002200041046a28020036020020012002410410740c010b200241013a00002001200241011074200041246a28020021032000412c6a28020022042001107620012003200410742001200041016a41201074200041c0006a29030021052002200041c8006a2903003703082002200537030020012002411010742002200041306a28020036020020012002410410740240200041346a2802004101460d00200241003a000020012002410110740c010b200241013a000020012002410110742002200041386a28020036020020012002410410740b200241106a24000bba3205077f017e017f0b7e0b7f230022062107200641e0086b416071220624000240024002400240024002400240024002400240024002400240024020022d00004101470d00200641b8036a200241196a290000370300200641b0036a200241116a290000370300200641a8036a200241096a290000370300200620022900013703a003200328020822084101762102200328020421092003280200210a0240024020084101710d00024020092002490d00410021090c020b2002200941a0f0cc00104d000b20092002490d03200220094f0d04200a20026a2d00004170712108410121090b200141d0006a280200210b200128024c210c200641e9046a20083a0000200620093a00e804200620023602e4042006200a3602e004200620062f01c8073b01ea0420064188086a200c200641a0036a200641e0046a200b28020c1104000240024020062802880822090d00200641f0056a2201200641ab036a290000370300200641e8056a41106a2203200641b3036a290000370300200641fd056a2209200641b8036a290000370000200620062900a3033703e80520062d00a203210520062f01a003210a4130102c22020d011036000b200629028c08210d200641c0046a41186a200641a0036a41186a2208290300370300200641c0046a41106a200641a0036a41106a220b290300370300200641c0046a41086a200641a0036a41086a220c290300370300200620062903a0033703c004200641e0046a200641c0046a2009200d422088a7200141306a220e10ae0820062802e404210220062802e004210a20064188086a200641e0046a41086a41d40010e9081a200a4101460d0c200641e0036a20064188086a41d40010e9081a200620023602840520064188056a200641e0036a41d40010e9081a200641f9046a2008290300370000200641f1046a200b290300370000200641e9046a200c290300370000200641013a00e004200620062903a0033700e104200e200641e0046a109d082102200da7450d022009102e0c020b2002200a20054110747222053b0001200241013a0000200220062903e805370004200220062900e004370021200241036a20054110763a00002002410c6a2001290300370000200241146a2003290300370000200241196a2009290000370000200241286a200641e7046a2900003700000c0c0b200241046a28020021020b0240200141c8006a220b28020022092009417f6a2208200141c0006a220a28020022092001413c6a220c2802006b716b4101470d00200c10a502200b280200417f6a2108200a28020021090b200a2008200941016a71360200200141c4006a28020020094102746a2002360200200141386a280200220920024d0d02200141306a220a280200200241fc006c6a2202290210210f200220062903f00437021020022902082110200220062903e804370208200241186a22092902002111200920062903f804370200200641003a00e004200641003602e4042002290200210d200220062903e00437020020022902402112200241c8006a2902002113200241d0006a2902002114200241d8006a290200211520022902202116200241286a2902002117200241306a2902002118200241386a290200211920064180036a41086a2209200241e8006a29020037030020064180036a41106a2208200241f0006a29020037030020064180036a41186a220b200241f8006a280200360200200620113703f8032006200f3703f003200620103703e8032006200d3703e003200620193703d804200620183703d004200620173703c804200620163703c004200620153703b803200620143703b003200620133703a803200620123703a0032006200229026037038003200641d0036a41086a2202200441086a280200360200200620042902003703d00302400240024002400240024002400240200da7220c41ff01714101470d002003280200211a2003280204211b2003280208210e20064188076a41186a20062802fc0336020020064188076a41106a20062902f40337030020064188076a41086a20062902ec03370300200620062902e40337038807200641bc086a2015370200200641b4086a201437020020064188086a41246a2013370200200641a4086a201237020020064188086a41186a20062802dc0436020020064188086a41106a20062902d40437030020064188086a41086a20062902cc04370300200620062902c4043703880820064188086a413c6a20062903800337020020064188086a41c4006a2009290300370200200641d4086a2008290300370200200641dc086a200b280200360200200641e8056a41086a2002280200360200200620062903d0033703e805200641e0046a200120064188086a2003200641e8056a200510af0820062802e404210220062802e0044101460d07200d420888a721092016a72103200641e8076a41186a220820064180056a280200360200200641e8076a41106a220b200641e0046a41186a290300370300200641e8076a41086a221c200641e0046a41106a221d290300370300200641c8076a41086a221e2006418d056a290000370300200641c8076a41106a221f20064195056a290000370300200641c8076a41176a2220200641e0046a413c6a29000037000020062006290085053703c8072006200641e0046a41086a22212903003703e807200641e0046a41246a2d00002104200641a8076a41086a2222200641ad056a290000370300200641a8076a41106a2223200641b5056a290000370300200641a8076a41176a2224200641bc056a280000360000200620062900a5053703a807200641e0046a41c4006a2d0000210520020e03020501020b200641bc086a2019370200200641b4086a201837020020064188086a41246a2017370200200641a4086a201637020020064188086a41186a20062802fc0336020020064188086a41106a20062902f40337030020064188086a41086a20062902ec0337030020064188086a413c6a20062903a00337020020064188086a41c4006a20062903a803370200200641d4086a20062903b003370200200641dc086a20062802b803360200200620062902e4033703880820064188076a41086a2002280200360200200620062903d00337038807200641e0046a200120064188086a200320064188076a200510af0820062802e404210220062802e0044101460d06200641e8056a41186a220520064180056a280200360200200641e8056a41106a2208200641e0046a41186a290300370300200641e8056a41086a220b200641e0046a41106a290300370300200641c8076a41086a220c2006418d056a290000370300200641c8076a41106a220e20064195056a290000370300200641c8076a41176a221a200641e0046a413c6a29000037000020062006290085053703c8072006200641e0046a41086a2903003703e805200641e0046a41246a2d00002103200641e8076a41086a221b200641ad056a290000370300200641e8076a41106a221c200641b5056a290000370300200641e8076a41176a221d200641bc056a280000360000200620062900a5053703e807200641e0046a41c4006a2d0000210441022101024020020e03000304000b200641e8066a41186a2005280200360200200641e8066a41106a2008290300370300200641e8066a41086a200b290300370300200641c8066a41086a200c290300370300200641c8066a41106a200e290300370300200641c8066a41176a201a290000370000200641a8066a41086a201b290300370300200641a8066a41106a201c290300370300200641a8066a41176a201d280000360000200620062903e8053703e806200620062903c8073703c806200620062903e8073703a80641002101410121090c030b200e410176210202400240200e4101710d000240201b2002490d00410021040c020b2002201b41a0f0cc00104d000b201b2002490d0a2002201b4f0d0b201a20026a2d00004170712108410121040b20064188086a201a200210b008200641b5086a20083a0000200641eb046a20064188076a41086a290300370000200641f3046a20064188076a41106a290300370000200641fb046a20064188076a41186a280200360000200641e0046a41286a20064188086a41086a29030037030020064190056a20064188086a41106a29030037030020064198056a20064188086a41186a290300370300200641a0056a200641a8086a290300370300200620043a00b408200641a8056a20064188086a41286a290300370300200620033a00ff0420062006290388073700e304200620062903880837038005200620093b01e004200620094110763a00e2042001200641e0046a10b108410221010c040b200e410176210202400240200e4101710d000240201b2002490d00410021080c020b2002201b41a0f0cc00104d000b201b2002490d0b2002201b4f0d0c201a20026a2d0000417071210b410121080b20064188086a201a200210b008200641b5086a200b3a0000200641eb046a20064188076a41086a290300370000200641f3046a20064188076a41106a290300370000200641fb046a20064188076a41186a280200360000200641e0046a41286a20064188086a41086a29030037030020064190056a20064188086a41106a29030037030020064198056a20064188086a41186a290300370300200641a0056a200641a8086a290300370300200620083a00b408200641a8056a20064188086a41286a290300370300200620033a00ff0420062006290388073700e304200620062903880837038005200620093b01e004200620094110763a00e2042001200641e0046a10b108200641e8066a41086a200641e8076a41086a290300370300200641e8066a41106a200641e8076a41106a290300370300200641e8066a41186a200641e8076a41186a280200360200200641c8066a41086a200641c8076a41086a290300370300200641c8066a41106a200641c8076a41106a290300370300200641c8066a41176a200641c8076a41176a290000370000200641a8066a41086a200641a8076a41086a290300370300200641a8066a41106a200641a8076a41106a290300370300200641a8066a41176a200641a8076a41176a280000360000200620062903e8073703e806200620062903c8073703c806200620062903a8073703a806410021014101210920042103200521040c030b200641e8066a41186a2005280200360200200641e8066a41106a2008290300370300200641e8066a41086a200b290300370300200641c8066a41086a200c290300370300200641c8066a41106a200e290300370300200641c8066a41176a201a290000370000200641a8066a41086a201b290300370300200641a8066a41106a201c290300370300200641a8066a41176a201d280000360000200620062903e8053703e806200620062903c8073703c806200620062903e8073703a80641002109410021010b410021020c0a0b200641e8066a41086a20064188076a41086a290300370300200641e8066a41106a20064188076a41106a290300370300200641e8066a41186a20064188076a41186a280200360200200641eb046a201c290300370000200641f3046a200b290300370000200641fb046a2008280200360000200641a8066a41176a2020290000370000200641a8066a41106a201f290300370300200641a8066a41086a201e29030037030020062006290388073703e806200620062903e8073700e304200620062903c8073703a80620064188066a41176a202428000036000020064188066a41106a202329030037030020064188066a41086a2022290300370300200641c8066a41176a200641e0046a41176a290000370000200641c8066a41106a201d290000370300200641c8066a41086a2021290000370300200620062903a80737038806200620062900e0043703c80641012101410021090b200c41807e7121020c080b410121010c080b2002200941b0f0cc00104d000b2002200941c0f0cc00103c000b20022009419482ca00103c000b2002201b41b0f0cc00104d000b2002201b41c0f0cc00103c000b2002201b41b0f0cc00104d000b2002201b41c0f0cc00103c000b200641c8076a41186a200641e8066a41186a280200360200200641c8076a41106a200641e8066a41106a290300370300200641c8076a41086a200641e8066a41086a290300370300200641e0046a41086a200641c8066a41086a290300370300200641e0046a41106a200641c8066a41106a290300370300200641e0046a41176a200641c8066a41176a29000037000020064188086a41086a200641a8066a41086a29030037030020064188086a41106a200641a8066a41106a29030037030020064188086a41176a200641a8066a41176a290000370000200620062903e8063703c807200620062903c8063703e004200620062903a80637038808200641e8056a41176a20064188066a41176a280000360000200641e8056a41106a20064188066a41106a290300370300200641e8056a41086a20064188066a41086a29030037030020062006290388063703e80520012002722102410021010b200641e0026a41086a2208200641c8076a41086a290300370300200641e0026a41106a220b200641c8076a41106a290300370300200641e0026a41186a220c200641c8076a41186a280200360200200641c0026a41086a220e200641e0046a41086a290300370300200641c0026a41106a221a200641e0046a41106a290300370300200641c0026a41176a221b200641e0046a41176a290000370000200620062903c8073703e002200620062903e0043703c002200641a0026a41176a221c20064188086a41176a290000370000200641a0026a41106a221d20064188086a41106a290300370300200641a0026a41086a221e20064188086a41086a29030037030020064180026a41086a221f200641e8056a41086a29030037030020064180026a41106a2220200641e8056a41106a29030037030020064180026a41176a2221200641e8056a41176a28000036000020062006290388083703a002200620062903e805370380020240024020010d00200641e0016a41186a200c280200360200200641e0016a41106a200b290300370300200641e0016a41086a2008290300370300200641c0016a41086a200e290300370300200641c0016a41106a201a290300370300200641c0016a41176a201b290000370000200641a0016a41086a201e290300370300200641a0016a41106a201d290300370300200641a0016a41176a201c290000370000200620062903e0023703e001200620062903c0023703c001200620062903a0023703a00120064180016a41176a202128000036000020064180016a41106a202029030037030020064180016a41086a201f290300370300200620062903800237038001200241ff01714102460d01200641e0006a41186a2201200641e0016a41186a280200360200200641e0006a41106a2208200641e0016a41106a290300370300200641e0006a41086a220b200641e0016a41086a290300370300200641c0006a41086a220c200641c0016a41086a290300370300200641c0006a41106a220e200641c0016a41106a290300370300200641c0006a41176a221a200641c0016a41176a290000370000200641206a41086a221b200641a0016a41086a290300370300200641206a41106a221c200641a0016a41106a290300370300200641206a41176a221d200641a0016a41176a290000370000200620062903e001370360200620062903c001370340200620062903a001370320200641176a221e20064180016a41176a280000360000200641106a221f20064180016a41106a290300370300200641086a222020064180016a41086a2903003703002006200629038001370300200641c0046a41086a2221200b290300370300200641c0046a41106a220b2008290300370300200641c0046a41186a22082001280200360200200620062903603703c00420064188086a41086a2201200c29030037030020064188086a41106a220c200e29030037030020064188086a41176a220e201a2900003700002006200629034037038808200641e0036a41086a221a201b290300370300200641e0036a41106a221b201c290300370300200641e0036a41176a221c201d290000370000200620062903203703e003200641a0036a41176a221d201e280000360000200641a0036a41106a221e201f290300370300200641a0036a41086a221f2020290300370300200620062903003703a00320064180056a20033a0000200620023a00e004200620024118763a00e304200620024108763b00e104200641ec046a2021290300370200200641f4046a200b290300370200200641fc046a2008280200360200200620062903c0043702e40420064181056a20062903880837000020064189056a200129030037000020064191056a200c29030037000020064198056a200e290000370000200641a0056a20043a0000200641b8056a201c290000370000200641b1056a201b290300370000200641a9056a201a290300370000200641a1056a20062903e003370000200641c0056a20053a0000200641d8056a201d280000360000200641d1056a201e290300370000200641c9056a201f290300370000200641c1056a20062903a003370000200a200641e0046a109d082106200041086a20093a00002000200636020420004100360200200724000f0b20004101360200200020023602040c030b41d0accb00411841e8accb00105d000b200da7450d002009102e0b2000410136020020002002360204200441046a280200450d002004280200102e200724000f0b200724000ba3a3011f047f017e017f017e017f017e017f017e017f017e017f017e017f017e017f017e017f017e017f017e017f017e017f017e017f017e027f017e087f017e087f230041b00e6b22052400200541086a2002200310a802024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020052d00084101470d0020052d00092102200541900e6a41086a2203200141086a290000370300200541900e6a41106a2204200141106a290000370300200541900e6a41186a2206200141186a290000370300200520012900003703900e4130102c22010d010c2a0b200541d4016a2802002107200541d0016a2802002108200541c8016a2903002109200541c4016a280200210a200541bc016a290200210b200541b8016a280200210c200541b0016a290300210d200541ac016a280200210e200541a4016a290200210f200541a0016a280200211020054198016a290300211120054194016a28020021122005418c016a290200211320054188016a280200211420054180016a2903002115200541fc006a2802002116200541f4006a2902002117200541f0006a2802002118200541e8006a2903002119200541e4006a280200211a200541dc006a290200211b200541086a41d0006a280200211c200541086a41c8006a290300211d200541086a41c4006a280200211e200541086a413c6a290200211f200541086a41386a2802002120200541386a2903002121200541086a412c6a2802002122200541086a41246a22232902002124200541286a22252802002126200541086a411c6a22272802002128200541086a41186a22292802002102200541086a41146a222a280200212b200541086a410c6a222c290200212d200541086a41086a222e280200212f41002130200528020c0e051502030401150b200141033a0000200120052903900e370001200120023a0021200120052901e00d370122200141096a2003290300370000200141116a2004290300370000200141196a2006290300370000200141286a200541e60d6a29010037010020004101360200200020013602040c270b200541e0016a2802002106200541dc016a2802002131200541d8016a28020021324102210302400240202b4102470d0041002102410021330c010b200541900e6a41186a2233200141186a290000370300200541900e6a41106a2234200141106a290000370300200541900e6a41086a2235200141086a290000370300200520012900003703900e200541e00d6a41086a2028360200200520023602e40d2005202b3602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012102024020052802084101460d002033200541286a2903003703002034200541086a41186a2903003703002035200541086a41106a2903003703002005200541086a41086a2903003703900e410021020b200341807e7121330b200541c0066a41186a2234200541900e6a41186a290300370300200541c0066a41106a2235200541900e6a41106a290300370300200541c0066a41086a222b200541900e6a41086a290300370300200520052903900e3703c0062033200341ff017172213320020d03200541a0066a41186a2034290300370300200541a0066a41106a2035290300370300200541a0066a41086a202b290300370300200520052903c0063703a006410221024100210341002134024020264102460d00200541900e6a41186a2234200141186a290000370300200541900e6a41106a2235200141106a290000370300200541900e6a41086a222b200141086a290000370300200520012900003703900e200520243702e40d200520263602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210241012103024020052802084101460d002034200541286a2903003703002035200541086a41186a290300370300202b200541086a41106a2903003703002005200541086a41086a2903003703900e410021030b200241807e7121340b20054180076a41186a2235200541900e6a41186a29030037030020054180076a41106a222b200541900e6a41106a29030037030020054180076a41086a2230200541900e6a41086a290300370300200520052903900e370380072034200241ff017172210220030d04200541e0066a41186a2035290300370300200541e0066a41106a202b290300370300200541e0066a41086a203029030037030020052005290380073703e006410221034100213441002135024020224102460d00200541900e6a41186a2235200141186a290000370300200541900e6a41106a222b200141106a290000370300200541900e6a41086a2230200141086a290000370300200520012900003703900e200520213702e40d200520223602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012134024020052802084101460d002035200541286a290300370300202b200541086a41186a2903003703002030200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e7121350b200541c0076a41186a222b200541900e6a41186a290300370300200541c0076a41106a2230200541900e6a41106a290300370300200541c0076a41086a222e200541900e6a41086a290300370300200520052903900e3703c0072035200341ff017172213520340d05200541a0076a41186a202b290300370300200541a0076a41106a2030290300370300200541a0076a41086a202e290300370300200520052903c0073703a00741022103410021344100212b024020204102460d00200541900e6a41186a222b200141186a290000370300200541900e6a41106a2230200141106a290000370300200541900e6a41086a222e200141086a290000370300200520012900003703900e2005201f3702e40d200520203602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012134024020052802084101460d00202b200541286a2903003703002030200541086a41186a290300370300202e200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e71212b0b20054180086a41186a2230200541900e6a41186a29030037030020054180086a41106a222e200541900e6a41106a29030037030020054180086a41086a2225200541900e6a41086a290300370300200520052903900e37038008202b200341ff017172212b20340d06200541e0076a41186a2030290300370300200541e0076a41106a202e290300370300200541e0076a41086a202529030037030020052005290380083703e0074102210341002134410021300240201e4102460d00200541900e6a41186a2230200141186a290000370300200541900e6a41106a222e200141106a290000370300200541900e6a41086a2225200141086a290000370300200520012900003703900e2005201d3702e40d2005201e3602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012134024020052802084101460d002030200541286a290300370300202e200541086a41186a2903003703002025200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e7121300b200541c0086a41186a222e200541900e6a41186a290300370300200541c0086a41106a2225200541900e6a41106a290300370300200541c0086a41086a2229200541900e6a41086a290300370300200520052903900e3703c0082030200341ff017172213020340d07200541a0086a41186a202e290300370300200541a0086a41106a2025290300370300200541a0086a41086a2029290300370300200520052903c0083703a00841022103410021344100212e0240201c4102460d00200541900e6a41186a222e200141186a290000370300200541900e6a41106a2225200141106a290000370300200541900e6a41086a2229200141086a290000370300200520012900003703900e2005201b3702e40d2005201c3602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012134024020052802084101460d00202e200541286a2903003703002025200541086a41186a2903003703002029200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e71212e0b20054180096a41186a2225200541900e6a41186a29030037030020054180096a41106a2229200541900e6a41106a29030037030020054180096a41086a222c200541900e6a41086a290300370300200520052903900e37038009202e200341ff017172212e20340d08200541e0086a41186a2025290300370300200541e0086a41106a2029290300370300200541e0086a41086a202c29030037030020052005290380093703e0084102210341002134410021250240201a4102460d00200541900e6a41186a2225200141186a290000370300200541900e6a41106a2229200141106a290000370300200541900e6a41086a222c200141086a290000370300200520012900003703900e200520193702e40d2005201a3602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012134024020052802084101460d002025200541286a2903003703002029200541086a41186a290300370300202c200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e7121250b200541c0096a41186a2229200541900e6a41186a290300370300200541c0096a41106a222c200541900e6a41106a290300370300200541c0096a41086a2228200541900e6a41086a290300370300200520052903900e3703c0092025200341ff017172212520340d09200541a0096a41186a2029290300370300200541a0096a41106a202c290300370300200541a0096a41086a2028290300370300200520052903c0093703a009410221034100213441002129024020184102460d00200541900e6a41186a2229200141186a290000370300200541900e6a41106a222c200141106a290000370300200541900e6a41086a2228200141086a290000370300200520012900003703900e200520173702e40d200520183602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012134024020052802084101460d002029200541286a290300370300202c200541086a41186a2903003703002028200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e7121290b200541800a6a41186a222c200541900e6a41186a290300370300200541800a6a41106a2228200541900e6a41106a290300370300200541800a6a41086a2226200541900e6a41086a290300370300200520052903900e3703800a2029200341ff017172212920340d0a200541e0096a41186a202c290300370300200541e0096a41106a2028290300370300200541e0096a41086a2026290300370300200520052903800a3703e00941022103410021344100212c024020164102460d00200541900e6a41186a222c200141186a290000370300200541900e6a41106a2228200141106a290000370300200541900e6a41086a2226200141086a290000370300200520012900003703900e200520153702e40d200520163602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012134024020052802084101460d00202c200541286a2903003703002028200541086a41186a2903003703002026200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e71212c0b200541c00a6a41186a2228200541900e6a41186a290300370300200541c00a6a41106a2226200541900e6a41106a290300370300200541c00a6a41086a2223200541900e6a41086a290300370300200520052903900e3703c00a202c200341ff017172212c20340d0b200541a00a6a41186a2028290300370300200541a00a6a41106a2026290300370300200541a00a6a41086a2023290300370300200520052903c00a3703a00a410221034100213441002128024020144102460d00200541900e6a41186a2228200141186a290000370300200541900e6a41106a2226200141106a290000370300200541900e6a41086a2223200141086a290000370300200520012900003703900e200520133702e40d200520143602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012134024020052802084101460d002028200541286a2903003703002026200541086a41186a2903003703002023200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e7121280b200541800b6a41186a2226200541900e6a41186a290300370300200541800b6a41106a2223200541900e6a41106a290300370300200541800b6a41086a2227200541900e6a41086a290300370300200520052903900e3703800b2028200341ff017172212820340d0c200541e00a6a41186a2026290300370300200541e00a6a41106a2023290300370300200541e00a6a41086a2027290300370300200520052903800b3703e00a410221034100213441002126024020124102460d00200541900e6a41186a2226200141186a290000370300200541900e6a41106a2223200141106a290000370300200541900e6a41086a2227200141086a290000370300200520012900003703900e200520113702e40d200520123602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012134024020052802084101460d002026200541286a2903003703002023200541086a41186a2903003703002027200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e7121260b200541c00b6a41186a2223200541900e6a41186a290300370300200541c00b6a41106a2227200541900e6a41106a290300370300200541c00b6a41086a222a200541900e6a41086a290300370300200520052903900e3703c00b2026200341ff017172212620340d0d200541a00b6a41186a2023290300370300200541a00b6a41106a2027290300370300200541a00b6a41086a202a290300370300200520052903c00b3703a00b410221034100213441002123024020104102460d00200541900e6a41186a2223200141186a290000370300200541900e6a41106a2227200141106a290000370300200541900e6a41086a222a200141086a290000370300200520012900003703900e2005200f3702e40d200520103602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012134024020052802084101460d002023200541286a2903003703002027200541086a41186a290300370300202a200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e7121230b200541800c6a41186a2227200541900e6a41186a290300370300200541800c6a41106a222a200541900e6a41106a290300370300200541800c6a41086a2222200541900e6a41086a290300370300200520052903900e3703800c2023200341ff017172212320340d0e200541e00b6a41186a2027290300370300200541e00b6a41106a202a290300370300200541e00b6a41086a2022290300370300200520052903800c3703e00b4102210341002134410021270240200e4102460d00200541900e6a41186a2227200141186a290000370300200541900e6a41106a222a200141106a290000370300200541900e6a41086a2222200141086a290000370300200520012900003703900e2005200d3702e40d2005200e3602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012134024020052802084101460d002027200541286a290300370300202a200541086a41186a2903003703002022200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e7121270b200541c00c6a41186a222a200541900e6a41186a290300370300200541c00c6a41106a2222200541900e6a41106a290300370300200541c00c6a41086a2220200541900e6a41086a290300370300200520052903900e3703c00c2027200341ff017172212720340d0f200541a00c6a41186a202a290300370300200541a00c6a41106a2022290300370300200541a00c6a41086a2020290300370300200520052903c00c3703a00c41022103410021344100212a0240200c4102460d00200541900e6a41186a222a200141186a290000370300200541900e6a41106a2222200141106a290000370300200541900e6a41086a2220200141086a290000370300200520012900003703900e2005200b3702e40d2005200c3602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012134024020052802084101460d00202a200541286a2903003703002022200541086a41186a2903003703002020200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e71212a0b200541800d6a41186a2222200541900e6a41186a290300370300200541800d6a41106a2220200541900e6a41106a290300370300200541800d6a41086a221e200541900e6a41086a290300370300200520052903900e3703800d202a200341ff017172212a20340d10200541e00c6a41186a2022290300370300200541e00c6a41106a2020290300370300200541e00c6a41086a201e290300370300200520052903800d3703e00c4102213441002103410021220240200a4102460d00200541900e6a41186a2222200141186a290000370300200541900e6a41106a2220200141106a290000370300200541900e6a41086a221e200141086a290000370300200520012900003703900e200520093702e40d2005200a3602e00d200541086a200541900e6a200541e00d6a200410b208200528020c213441012103024020052802084101460d002022200541286a2903003703002020200541086a41186a290300370300201e200541086a41106a2903003703002005200541086a41086a2903003703900e410021030b203441807e712122203441ff017121340b200541c00d6a41186a2220200541900e6a41186a290300370300200541c00d6a41106a221e200541900e6a41106a290300370300200541c00d6a41086a221c200541900e6a41086a290300370300200520052903900e3703c00d2022203472213420030d24200541a00d6a41186a2020290300370300200541a00d6a41106a201e290300370300200541a00d6a41086a201c290300370300200520052903c00d3703a00d4102210320084102470d1141002101410021040c120b200541086a202f202da710b008200541900e6a41086a2029290300370300200541900e6a41106a2025290300370300200541900e6a41186a200541306a2802003602002005200541086a41106a2903003703900e2002417f4c0d14202c2802002135202e2802002134200528020c210720052802082133410121304101210302402002450d002002102c2203450d270b202d422088a721312003202b200210e9081a20054180026a41186a200541900e6a41186a28020036020020054180026a41106a200541900e6a41106a29030037030020054180026a41086a200541900e6a41086a290300370300200520052903900e37038002200221320c120b200541086a202f202da710b008200541e00d6a41086a2029290300370300200541e00d6a41106a22312025290300370300200541e00d6a41186a200541306a2802003602002005200541086a41106a22062903003703e00d202c2802002135202e2802002134200528020c210720052802082133200541900e6a41186a200141186a290000370300200541900e6a41106a200141106a290000370300200541900e6a41086a200141086a290000370300200520012900003703900e200541a00d6a41086a2028360200200520023602a40d2005202b3602a00d200541086a200541900e6a200541a00d6a200410b208200541c00d6a41086a2027290200370300200541c00d6a41106a220120232802003602002005202a2902003703c00d200528020c2103024020052802084101460d00202e290300212420062802002106200541e8016a41106a2001280200360200200541e8016a41086a200541c00d6a41086a29030037030020054180026a41086a200541e00d6a41086a29030037030020054180026a41106a203129030037030020054180026a41186a200541e00d6a41186a280200360200200520052903c00d3703e801200520052903e00d370380022024422088a72132202d422088a721312024a72102410221300c120b200041013602002000200336020420334125490d242034102e0c240b4102210341002133410021060240202f4102460d00200541900e6a41186a2233200141186a290000370300200541900e6a41106a2234200141106a290000370300200541900e6a41086a2235200141086a290000370300200520012900003703900e2005202d3702e40d2005202f3602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012106024020052802084101460d002033200541286a2903003703002034200541086a41186a2903003703002035200541086a41106a2903003703002005200541086a41086a2903003703900e410021060b200341807e7121330b200541c0066a41186a2234200541900e6a41186a290300370300200541c0066a41106a2235200541900e6a41106a290300370300200541c0066a41086a2231200541900e6a41086a290300370300200520052903900e3703c006200341ff0171203372213320060d11200541a0066a41186a2034290300370300200541a0066a41106a2035290300370300200541a0066a41086a2031290300370300200520052903c0063703a0064102210302400240202b4102470d0041002106410021020c010b200541900e6a41186a2206200141186a290000370300200541900e6a41106a2234200141106a290000370300200541900e6a41086a2235200141086a290000370300200520012900003703900e200541e00d6a41086a2028360200200520023602e40d2005202b3602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012102024020052802084101460d002006200541286a2903003703002034200541086a41186a2903003703002035200541086a41106a2903003703002005200541086a41086a2903003703900e410021020b200341807e7121060b20054180076a41186a2234200541900e6a41186a29030037030020054180076a41106a2235200541900e6a41106a29030037030020054180076a41086a222b200541900e6a41086a290300370300200520052903900e37038007200341ff0171200672210320020d13200541e0066a41186a2034290300370300200541e0066a41106a2035290300370300200541e0066a41086a202b29030037030020052005290380073703e006410221024100213441002106024020264102460d00200541900e6a41186a2234200141186a290000370300200541900e6a41106a2235200141106a290000370300200541900e6a41086a222b200141086a290000370300200520012900003703900e200520243702e40d200520263602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210241012106024020052802084101460d002034200541286a2903003703002035200541086a41186a290300370300202b200541086a41106a2903003703002005200541086a41086a2903003703900e410021060b200241807e7121340b200541c0076a41186a2235200541900e6a41186a290300370300200541c0076a41106a222b200541900e6a41106a290300370300200541c0076a41086a2231200541900e6a41086a290300370300200520052903900e3703c007200241ff0171203472210220060d14200541a0076a41186a2035290300370300200541a0076a41106a202b290300370300200541a0076a41086a2031290300370300200520052903c0073703a007410221064100213541002134024020224102460d00200541900e6a41186a2235200141186a290000370300200541900e6a41106a222b200141106a290000370300200541900e6a41086a2231200141086a290000370300200520012900003703900e200520213702e40d200520223602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210641012134024020052802084101460d002035200541286a290300370300202b200541086a41186a2903003703002031200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200641807e7121350b20054180086a41186a222b200541900e6a41186a29030037030020054180086a41106a2231200541900e6a41106a29030037030020054180086a41086a2232200541900e6a41086a290300370300200520052903900e37038008200641ff0171203572210620340d15200541e0076a41186a202b290300370300200541e0076a41106a2031290300370300200541e0076a41086a203229030037030020052005290380083703e007410221344100212b41002135024020204102460d00200541900e6a41186a222b200141186a290000370300200541900e6a41106a2231200141106a290000370300200541900e6a41086a2232200141086a290000370300200520012900003703900e2005201f3702e40d200520203602e00d200541086a200541900e6a200541e00d6a200410b208200528020c213441012135024020052802084101460d00202b200541286a2903003703002031200541086a41186a2903003703002032200541086a41106a2903003703002005200541086a41086a2903003703900e410021350b203441807e71212b0b200541c0086a41186a2231200541900e6a41186a290300370300200541c0086a41106a2232200541900e6a41106a290300370300200541c0086a41086a2230200541900e6a41086a290300370300200520052903900e3703c008203441ff0171202b72213420350d16200541a0086a41186a2031290300370300200541a0086a41106a2032290300370300200541a0086a41086a2030290300370300200520052903c0083703a00841022135410021314100212b0240201e4102460d00200541900e6a41186a2231200141186a290000370300200541900e6a41106a2232200141106a290000370300200541900e6a41086a2230200141086a290000370300200520012900003703900e2005201d3702e40d2005201e3602e00d200541086a200541900e6a200541e00d6a200410b208200528020c21354101212b024020052802084101460d002031200541286a2903003703002032200541086a41186a2903003703002030200541086a41106a2903003703002005200541086a41086a2903003703900e4100212b0b203541807e7121310b20054180096a41186a2232200541900e6a41186a29030037030020054180096a41106a2230200541900e6a41106a29030037030020054180096a41086a222f200541900e6a41086a290300370300200520052903900e37038009203541ff01712031722135202b0d17200541e0086a41186a2032290300370300200541e0086a41106a2030290300370300200541e0086a41086a202f29030037030020052005290380093703e0084102212b41002132410021310240201c4102460d00200541900e6a41186a2232200141186a290000370300200541900e6a41106a2230200141106a290000370300200541900e6a41086a222f200141086a290000370300200520012900003703900e2005201b3702e40d2005201c3602e00d200541086a200541900e6a200541e00d6a200410b208200528020c212b41012131024020052802084101460d002032200541286a2903003703002030200541086a41186a290300370300202f200541086a41106a2903003703002005200541086a41086a2903003703900e410021310b202b41807e7121320b200541c0096a41186a2230200541900e6a41186a290300370300200541c0096a41106a222f200541900e6a41106a290300370300200541c0096a41086a222e200541900e6a41086a290300370300200520052903900e3703c009202b41ff0171203272212b20310d18200541a0096a41186a2030290300370300200541a0096a41106a202f290300370300200541a0096a41086a202e290300370300200520052903c0093703a0094102213141002130410021320240201a4102460d00200541900e6a41186a2230200141186a290000370300200541900e6a41106a222f200141106a290000370300200541900e6a41086a222e200141086a290000370300200520012900003703900e200520193702e40d2005201a3602e00d200541086a200541900e6a200541e00d6a200410b208200528020c213141012132024020052802084101460d002030200541286a290300370300202f200541086a41186a290300370300202e200541086a41106a2903003703002005200541086a41086a2903003703900e410021320b203141807e7121300b200541800a6a41186a222f200541900e6a41186a290300370300200541800a6a41106a222e200541900e6a41106a290300370300200541800a6a41086a2225200541900e6a41086a290300370300200520052903900e3703800a203141ff0171203072213020320d19200541e0096a41186a202f290300370300200541e0096a41106a202e290300370300200541e0096a41086a2025290300370300200520052903800a3703e009410221314100212f41002132024020184102460d00200541900e6a41186a222f200141186a290000370300200541900e6a41106a222e200141106a290000370300200541900e6a41086a2225200141086a290000370300200520012900003703900e200520173702e40d200520183602e00d200541086a200541900e6a200541e00d6a200410b208200528020c213141012132024020052802084101460d00202f200541286a290300370300202e200541086a41186a2903003703002025200541086a41106a2903003703002005200541086a41086a2903003703900e410021320b203141807e71212f0b200541c00a6a41186a222e200541900e6a41186a290300370300200541c00a6a41106a2225200541900e6a41106a290300370300200541c00a6a41086a2229200541900e6a41086a290300370300200520052903900e3703c00a203141ff0171202f72212f20320d1a200541a00a6a41186a202e290300370300200541a00a6a41106a2025290300370300200541a00a6a41086a2029290300370300200520052903c00a3703a00a410221314100212e41002132024020164102460d00200541900e6a41186a222e200141186a290000370300200541900e6a41106a2225200141106a290000370300200541900e6a41086a2229200141086a290000370300200520012900003703900e200520153702e40d200520163602e00d200541086a200541900e6a200541e00d6a200410b208200528020c213141012132024020052802084101460d00202e200541286a2903003703002025200541086a41186a2903003703002029200541086a41106a2903003703002005200541086a41086a2903003703900e410021320b203141807e71212e0b200541800b6a41186a2225200541900e6a41186a290300370300200541800b6a41106a2229200541900e6a41106a290300370300200541800b6a41086a222c200541900e6a41086a290300370300200520052903900e3703800b203141ff0171202e72212e20320d1b200541e00a6a41186a2025290300370300200541e00a6a41106a2029290300370300200541e00a6a41086a202c290300370300200520052903800b3703e00a410221314100212541002132024020144102460d00200541900e6a41186a2225200141186a290000370300200541900e6a41106a2229200141106a290000370300200541900e6a41086a222c200141086a290000370300200520012900003703900e200520133702e40d200520143602e00d200541086a200541900e6a200541e00d6a200410b208200528020c213141012132024020052802084101460d002025200541286a2903003703002029200541086a41186a290300370300202c200541086a41106a2903003703002005200541086a41086a2903003703900e410021320b203141807e7121250b200541c00b6a41186a2229200541900e6a41186a290300370300200541c00b6a41106a222c200541900e6a41106a290300370300200541c00b6a41086a2228200541900e6a41086a290300370300200520052903900e3703c00b203141ff0171202572212520320d1c200541a00b6a41186a2029290300370300200541a00b6a41106a202c290300370300200541a00b6a41086a2028290300370300200520052903c00b3703a00b410221314100213241002129024020124102460d00200541900e6a41186a2229200141186a290000370300200541900e6a41106a222c200141106a290000370300200541900e6a41086a2228200141086a290000370300200520012900003703900e200520113702e40d200520123602e00d200541086a200541900e6a200541e00d6a200410b208200528020c213141012132024020052802084101460d002029200541286a290300370300202c200541086a41186a2903003703002028200541086a41106a2903003703002005200541086a41086a2903003703900e410021320b203141807e7121290b200541800c6a41186a222c200541900e6a41186a290300370300200541800c6a41106a2228200541900e6a41106a290300370300200541800c6a41086a2226200541900e6a41086a290300370300200520052903900e3703800c2029203141ff017172212920320d1d200541e00b6a41186a202c290300370300200541e00b6a41106a2028290300370300200541e00b6a41086a2026290300370300200520052903800c3703e00b41022131410021324100212c024020104102460d00200541900e6a41186a222c200141186a290000370300200541900e6a41106a2228200141106a290000370300200541900e6a41086a2226200141086a290000370300200520012900003703900e2005200f3702e40d200520103602e00d200541086a200541900e6a200541e00d6a200410b208200528020c213141012132024020052802084101460d00202c200541286a2903003703002028200541086a41186a2903003703002026200541086a41106a2903003703002005200541086a41086a2903003703900e410021320b203141807e71212c0b200541c00c6a41186a2228200541900e6a41186a290300370300200541c00c6a41106a2226200541900e6a41106a290300370300200541c00c6a41086a2223200541900e6a41086a290300370300200520052903900e3703c00c202c203141ff017172212c20320d1e200541a00c6a41186a2028290300370300200541a00c6a41106a2026290300370300200541a00c6a41086a2023290300370300200520052903c00c3703a00c4102213141002132410021280240200e4102460d00200541900e6a41186a2228200141186a290000370300200541900e6a41106a2226200141106a290000370300200541900e6a41086a2223200141086a290000370300200520012900003703900e2005200d3702e40d2005200e3602e00d200541086a200541900e6a200541e00d6a200410b208200528020c213141012132024020052802084101460d002028200541286a2903003703002026200541086a41186a2903003703002023200541086a41106a2903003703002005200541086a41086a2903003703900e410021320b203141807e7121280b200541800d6a41186a2226200541900e6a41186a290300370300200541800d6a41106a2223200541900e6a41106a290300370300200541800d6a41086a2227200541900e6a41086a290300370300200520052903900e3703800d2028203141ff017172212820320d1f200541e00c6a41186a2026290300370300200541e00c6a41106a2023290300370300200541e00c6a41086a2027290300370300200520052903800d3703e00c4102213241002131410021260240200c4102460d00200541900e6a41186a2226200141186a290000370300200541900e6a41106a2223200141106a290000370300200541900e6a41086a2227200141086a290000370300200520012900003703900e2005200b3702e40d2005200c3602e00d200541086a200541900e6a200541e00d6a200410b208200528020c213241012131024020052802084101460d002026200541286a2903003703002023200541086a41186a2903003703002027200541086a41106a2903003703002005200541086a41086a2903003703900e410021310b203241807e712126203241ff017121320b200541c00d6a41186a2223200541900e6a41186a290300370300200541c00d6a41106a2227200541900e6a41106a290300370300200541c00d6a41086a222a200541900e6a41086a290300370300200520052903900e3703c00d2026203272213220310d20200541a00d6a41186a2023290300370300200541a00d6a41106a2027290300370300200541a00d6a41086a202a290300370300200520052903c00d3703a00d4102212641002131410021230240200a4102460d00200541900e6a41186a2226200141186a290000370300200541900e6a41106a2223200141106a290000370300200541900e6a41086a2227200141086a290000370300200520012900003703900e200520093702840e2005200a3602800e200541086a200541900e6a200541800e6a200410b208200528020c210141012131024020052802084101460d002026200541286a2903003703002023200541086a41186a2903003703002027200541086a41106a2903003703002005200541086a41086a2903003703900e410021310b200141807e712123200141ff017121260b200541e00d6a41186a2204200541900e6a41186a290300370300200541e00d6a41106a2227200541900e6a41106a290300370300200541e00d6a41086a222a200541900e6a41086a290300370300200520052903900e3703e00d20232026722101024020310d00200541a0026a41186a2004290300370300200541a0026a41106a2027290300370300200541a0026a41086a202a29030037030020054180066a41086a200541a0066a41086a29030037030020054180066a41106a200541a0066a41106a29030037030020054180066a41186a200541a0066a41186a290300370300200541e0056a41086a200541e0066a41086a290300370300200541e0056a41106a200541e0066a41106a290300370300200541e0056a41186a200541e0066a41186a290300370300200520052903e00d3703a002200520052903a00637038006200520052903e0063703e005200541c0056a41186a200541a0076a41186a290300370300200541c0056a41106a200541a0076a41106a290300370300200541c0056a41086a200541a0076a41086a290300370300200541a0056a41086a200541e0076a41086a290300370300200541a0056a41106a200541e0076a41106a290300370300200541a0056a41186a200541e0076a41186a29030037030020054180056a41086a200541a0086a41086a29030037030020054180056a41106a200541a0086a41106a29030037030020054180056a41186a200541a0086a41186a290300370300200520052903a0073703c005200520052903e0073703a005200520052903a00837038005200541e0046a41186a200541e0086a41186a290300370300200541e0046a41106a200541e0086a41106a290300370300200541e0046a41086a200541e0086a41086a290300370300200541c0046a41186a200541a0096a41186a290300370300200541c0046a41106a200541a0096a41106a290300370300200541c0046a41086a200541a0096a41086a290300370300200541a0046a41186a200541e0096a41186a290300370300200541a0046a41106a200541e0096a41106a290300370300200541a0046a41086a200541e0096a41086a290300370300200520052903e0083703e004200520052903a0093703c004200520052903e0093703a00420054180046a41186a200541a00a6a41186a29030037030020054180046a41106a200541a00a6a41106a29030037030020054180046a41086a200541a00a6a41086a290300370300200520052903a00a37038004200541e0036a41186a200541e00a6a41186a290300370300200541e0036a41106a200541e00a6a41106a290300370300200541e0036a41086a200541e00a6a41086a290300370300200520052903e00a3703e003200541c0036a41186a200541a00b6a41186a290300370300200541c0036a41106a200541a00b6a41106a290300370300200541c0036a41086a200541a00b6a41086a290300370300200520052903a00b3703c003200541a0036a41186a200541e00b6a41186a290300370300200541a0036a41106a200541e00b6a41106a290300370300200541a0036a41086a200541e00b6a41086a290300370300200520052903e00b3703a00320054180036a41186a200541a00c6a41186a29030037030020054180036a41106a200541a00c6a41106a29030037030020054180036a41086a200541a00c6a41086a290300370300200520052903a00c37038003200541e0026a41186a200541e00c6a41186a290300370300200541e0026a41106a200541e00c6a41106a290300370300200541e0026a41086a200541e00c6a41086a290300370300200520052903e00c3703e002200541c0026a41186a200541a00d6a41186a290300370300200541c0026a41106a200541a00d6a41106a290300370300200541c0026a41086a200541a00d6a41086a290300370300200520052903a00d3703c00241c004102c2231450d2520312033360200203120052903800637020420312003360224203120052903e0053702282031410c6a20054180066a41086a290300370200203141146a20054180066a41106a2903003702002031411c6a20054180066a41186a290300370200203141306a200541e0056a41086a290300370200203141386a200541e0056a41106a290300370200203141c0006a200541e0056a41186a290300370200203120023602482031200636026c203120052903c00537024c203141d4006a200541c0056a41086a290300370200203141dc006a200541c0056a41106a290300370200203141e4006a200541c0056a41186a290300370200203120052903a005370270203141f8006a200541a0056a41086a29030037020020314180016a200541a0056a41106a29030037020020314188016a200541a0056a41186a2903003702002031203436029001203120353602b401203141ac016a20054180056a41186a290300370200203141a4016a20054180056a41106a2903003702002031419c016a20054180056a41086a290300370200203120052903800537029401203141d0016a200541e0046a41186a290300370200203141c8016a200541e0046a41106a290300370200203141c0016a200541e0046a41086a290300370200203120052903e0043702b8012031202b3602d801203141f4016a200541c0046a41186a290300370200203141ec016a200541c0046a41106a290300370200203141e4016a200541c0046a41086a290300370200203120052903c0043702dc01203120303602fc0120314198026a200541a0046a41186a29030037020020314190026a200541a0046a41106a29030037020020314188026a200541a0046a41086a290300370200203120052903a004370280022031202f3602a002203141bc026a20054180046a41186a290300370200203141b4026a20054180046a41106a290300370200203141ac026a20054180046a41086a29030037020020312005290380043702a4022031202e3602c402203141e0026a200541e0036a41186a290300370200203141d8026a200541e0036a41106a290300370200203141d0026a200541e0036a41086a290300370200203120052903e0033702c802203120253602e80220314184036a200541c0036a41186a290300370200203141fc026a200541c0036a41106a290300370200203141f4026a200541c0036a41086a290300370200203120052903c0033702ec022031202936028c03203141a8036a200541a0036a41186a290300370200203141a0036a200541a0036a41106a29030037020020314198036a200541a0036a41086a290300370200203120052903a003370290032031202c3602b003203141cc036a20054180036a41186a290300370200203141c4036a20054180036a41106a290300370200203141bc036a20054180036a41086a29030037020020312005290380033702b403203120283602d403203141f0036a200541e0026a41186a290300370200203141e8036a200541e0026a41106a290300370200203141e0036a200541e0026a41086a290300370200203120052903e0023702d803203120323602f80320314194046a200541c0026a41186a2903003702002031418c046a200541c0026a41106a29030037020020314184046a200541c0026a41086a290300370200203120052903c0023702fc032031200136029c04203141b8046a200541a0026a41186a290300370200203141b0046a200541a0026a41106a290300370200203141a8046a200541a0026a41086a290300370200203120052903a0023702a00441032130024020080d0041002133200721340c120b2007417f4c0d130240024020070d00410121330c010b2007102c2233450d260b20332008200710e9081a200721340c110b20004101360200200020013602040c230b20004101360200200020333602040c220b20004101360200200020023602040c210b20004101360200200020353602040c200b200041013602002000202b3602040c1f0b20004101360200200020303602040c1e0b200041013602002000202e3602040c1d0b20004101360200200020253602040c1c0b20004101360200200020293602040c1b0b200041013602002000202c3602040c1a0b20004101360200200020283602040c190b20004101360200200020263602040c180b20004101360200200020233602040c170b20004101360200200020273602040c160b200041013602002000202a3602040c150b200541900e6a41186a2222200141186a290000370300200541900e6a41106a2220200141106a290000370300200541900e6a41086a221e200141086a290000370300200520012900003703900e200541800e6a41086a2032360200200520073602840e200520083602800e200541086a200541900e6a200541800e6a200410b208200528020c210341012101024020052802084101460d002022200541286a2903003703002020200541086a41186a290300370300201e200541086a41106a2903003703002005200541086a41086a2903003703900e410021010b200341807e712104200341ff017121030b200541e00d6a41186a2207200541900e6a41186a290300370300200541e00d6a41106a2232200541900e6a41106a290300370300200541e00d6a41086a2222200541900e6a41086a290300370300200520052903900e3703e00d2004200372210420010d12200541a0026a41186a2007290300370300200541a0026a41106a2032290300370300200541a0026a41086a202229030037030020054180066a41086a200541a0066a41086a29030037030020054180066a41106a200541a0066a41106a29030037030020054180066a41186a200541a0066a41186a290300370300200541e0056a41086a200541e0066a41086a290300370300200541e0056a41106a200541e0066a41106a290300370300200541e0056a41186a200541e0066a41186a290300370300200520052903e00d3703a002200520052903a00637038006200520052903e0063703e005200541c0056a41186a200541a0076a41186a290300370300200541c0056a41106a200541a0076a41106a290300370300200541c0056a41086a200541a0076a41086a290300370300200541a0056a41086a200541e0076a41086a290300370300200541a0056a41106a200541e0076a41106a290300370300200541a0056a41186a200541e0076a41186a29030037030020054180056a41086a200541a0086a41086a29030037030020054180056a41106a200541a0086a41106a29030037030020054180056a41186a200541a0086a41186a290300370300200520052903a0073703c005200520052903e0073703a005200520052903a00837038005200541e0046a41186a200541e0086a41186a290300370300200541e0046a41106a200541e0086a41106a290300370300200541e0046a41086a200541e0086a41086a290300370300200541c0046a41186a200541a0096a41186a290300370300200541c0046a41106a200541a0096a41106a290300370300200541c0046a41086a200541a0096a41086a290300370300200541a0046a41186a200541e0096a41186a290300370300200541a0046a41106a200541e0096a41106a290300370300200541a0046a41086a200541e0096a41086a290300370300200520052903e0083703e004200520052903a0093703c004200520052903e0093703a00420054180046a41186a200541a00a6a41186a29030037030020054180046a41106a200541a00a6a41106a29030037030020054180046a41086a200541a00a6a41086a290300370300200520052903a00a37038004200541e0036a41186a200541e00a6a41186a290300370300200541e0036a41106a200541e00a6a41106a290300370300200541e0036a41086a200541e00a6a41086a290300370300200520052903e00a3703e003200541c0036a41186a200541a00b6a41186a290300370300200541c0036a41106a200541a00b6a41106a290300370300200541c0036a41086a200541a00b6a41086a290300370300200520052903a00b3703c003200541a0036a41186a200541e00b6a41186a290300370300200541a0036a41106a200541e00b6a41106a290300370300200541a0036a41086a200541e00b6a41086a290300370300200520052903e00b3703a00320054180036a41186a200541a00c6a41186a29030037030020054180036a41106a200541a00c6a41106a29030037030020054180036a41086a200541a00c6a41086a290300370300200520052903a00c37038003200541e0026a41186a200541e00c6a41186a290300370300200541e0026a41106a200541e00c6a41106a290300370300200541e0026a41086a200541e00c6a41086a290300370300200520052903e00c3703e002200541c0026a41186a200541a00d6a41186a290300370300200541c0026a41106a200541a00d6a41106a290300370300200541c0026a41086a200541a00d6a41086a290300370300200520052903a00d3703c00241c004102c2203450d1420032033360200200320052903800637020420032002360224200320052903e0053702282003410c6a20054180066a41086a290300370200200341146a20054180066a41106a2903003702002003411c6a20054180066a41186a290300370200200341306a200541e0056a41086a290300370200200341386a200541e0056a41106a290300370200200341c0006a200541e0056a41186a290300370200200320353602482003202b36026c200320052903c00537024c200341d4006a200541c0056a41086a290300370200200341dc006a200541c0056a41106a290300370200200341e4006a200541c0056a41186a290300370200200320052903a005370270200341f8006a200541a0056a41086a29030037020020034180016a200541a0056a41106a29030037020020034188016a200541a0056a41186a29030037020020032030360290012003202e3602b401200341ac016a20054180056a41186a290300370200200341a4016a20054180056a41106a2903003702002003419c016a20054180056a41086a290300370200200320052903800537029401200341d0016a200541e0046a41186a290300370200200341c8016a200541e0046a41106a290300370200200341c0016a200541e0046a41086a290300370200200320052903e0043702b801200320253602d801200341f4016a200541c0046a41186a290300370200200341ec016a200541c0046a41106a290300370200200341e4016a200541c0046a41086a290300370200200320052903c0043702dc01200320293602fc0120034198026a200541a0046a41186a29030037020020034190026a200541a0046a41106a29030037020020034188026a200541a0046a41086a290300370200200320052903a004370280022003202c3602a002200341bc026a20054180046a41186a290300370200200341b4026a20054180046a41106a290300370200200341ac026a20054180046a41086a29030037020020032005290380043702a402200320283602c402200341e0026a200541e0036a41186a290300370200200341d8026a200541e0036a41106a290300370200200341d0026a200541e0036a41086a290300370200200320052903e0033702c802200320263602e80220034184036a200541c0036a41186a290300370200200341fc026a200541c0036a41106a290300370200200341f4026a200541c0036a41086a290300370200200320052903c0033702ec022003202336028c03200341a8036a200541a0036a41186a290300370200200341a0036a200541a0036a41106a29030037020020034198036a200541a0036a41086a290300370200200320052903a00337029003200320273602b003200341cc036a20054180036a41186a290300370200200341c4036a20054180036a41106a290300370200200341bc036a20054180036a41086a29030037020020032005290380033702b4032003202a3602d403200341f0036a200541e0026a41186a290300370200200341e8036a200541e0026a41106a290300370200200341e0036a200541e0026a41086a290300370200200320052903e0023702d803200320343602f80320034194046a200541c0026a41186a2903003702002003418c046a200541c0026a41106a29030037020020034184046a200541c0026a41086a290300370200200320052903c0023702fc032003200436029c04200341b8046a200541a0026a41186a290300370200200341b0046a200541a0026a41106a290300370200200341a8046a200541a0026a41086a290300370200200320052903a0023702a004200541086a202f202da710b008200541900e6a41086a2201200541086a41186a290300370300200541900e6a41106a2204200541286a290300370300200541900e6a41186a222b200541306a2802003602002005200541086a41106a2903003703900e200541086a410c6a2802002135200541086a41086a2802002134200528020c2107200528020821330240024020310d00410021020c010b2006417f4c0d030240024020060d00410121020c010b2006102c2202450d160b20022031200610e9081a0b202d422088a7213120054180026a41186a202b28020036020020054180026a41106a200429030037030020054180026a41086a2001290300370300200520052903900e3703800241042130200621320b20002030360204200041186a2035360200200041146a2034360200200041106a20073602002000410c6a2033360200200041086a20313602002000411c6a200529038002370200200041c4006a2006360200200041386a2003360200200041c8006a20052903e801370200200041246a20054180026a41086a2903003702002000412c6a20054180026a41106a290300370200200041346a20054180026a41186a280200360200200041d0006a200541e8016a41086a290300370200200041d8006a200541e8016a41106a2802003602002000413c6a2032ad4220862002ad84370200200041003602000c120b20004101360200200020333602040c110b1038000b20004101360200200020033602040c0f0b20004101360200200020023602040c0e0b20004101360200200020063602040c0d0b20004101360200200020343602040c0c0b20004101360200200020353602040c0b0b200041013602002000202b3602040c0a0b20004101360200200020303602040c090b200041013602002000202f3602040c080b200041013602002000202e3602040c070b20004101360200200020253602040c060b20004101360200200020293602040c050b200041013602002000202c3602040c040b20004101360200200020283602040c030b20004101360200200020323602040c020b20004101360200200020343602040c010b20004101360200200020043602040b200541b00e6a24000f0b1036000bae5303117f047e037f23002206210720064180056b41607122062400200641106a41086a200341086a280200360200200620032902003703100240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020022802000e050104000203010b20064180016a2002412c6a290200370300200641f8006a200241246a290200370300200641d8006a41186a2002411c6a290200370300200641d8006a41106a2208200241146a290200370300200641d8006a41086a2002410c6a29020037030020062002290204370358200641a6016a200241376a2d00003a000020064188016a41086a200241c4006a29020037030020064188016a41106a200241cc006a29020037030020064188016a41186a200241d4006a280200360200200620022f00353b01a40120062002413c6a29020037038801200241346a2d00002109200241386a280200210a02400240200628025c220b4125490d002008280200210b200641d8006a410c6a280200210c0c010b200641e1006a210c0b20062006280258220d3602b0012006200c3602a8012006280214210e2006280218210f2006200b3602ac010240200b4101742210200d6b2211200e410174200f6b2202200220114b1b2212450d00410021022006280210211302400340200f20026a22084101762214200e4f0d0c200d20026a22154101762216200b4f0d0d201320146a2d00002214410f71201441f0017141047620084101711b200c20166a2d00002208410f71200841047620154101711b470d012012200241016a2202470d000b201221020b20020d060b2010200d470d0441f8accb00412a41a4adcb001039000b4101211520062802142208200628021822144101762202490d0a20064180046a200628021020026a200820026b10b008200641386a41086a20064194046a290200370300200641c8006a2006419c046a290200370300200641d0006a200641a4046a29020037030020062006418c046a2902003703382014410171210220064180046a41086a2802002108200628028404211620062802800421032004290204211720042802002111410021140c280b200241106a280200210d2002410c6a280200210c200241086a280200210b2002280204210202402006280214221441017420062802182208470d0020042802082108410021140240200b450d00200d2008470d00200b2004280200200d10ec08452114200d21080b2004280204211620042802002103024020052802002215450d00200541046a280200450d002015102e0b2005200c3602042005200b360200200541086a200d360200200641386a41086a20064180046a41086a290200370300200641386a41106a20064180046a41106a290200370300200641386a41186a20064180046a41186a290200370300200641206a41086a20064198036a41086a290200370300200641206a41106a20064198036a41106a28020036020020062006290280043703382006200629029803370320410321150c280b2008410176221520144f0d0a200628021020156a2d000021142003200328020841016a36020820022014410f71201441047620084101711b221541246c6a22082902102118200820062903900437021020082902082119200820062903880437020820082902002117200641023a0080042008200629038004370200200841186a2214290200211a201420062903980437020002400240024002402017a741ff01714102470d0020032802042216200328020822054101762214490d0f20064198036a200328020020146a201620146b10b0082006418c046a20062902980337020020064194046a20064198036a41086a2902003702002006419c046a200641a8036a29020037020020064180046a41246a200641b0036a290200370200200641ac046a200641b8036a290200370200200641b4046a200641c0036a280200360200200641b8046a2004290200370300200641c0046a200441086a280200360200200641013602840420064180046a41086a200541017136020041002114200641003a0080042002201541246c6a41046a200141306a20064180046a109d08360200200841003a00000c010b200641a0046a200828022036020020064180046a41186a201a37030020062019370388042006201737038004200620183703900420064198036a41086a200441086a2802003602002006200429020037039803200641c0026a200120064180046a200320064198036a200510ad0820062802c402211620062802c0024101460d01200641c0026a41086a2d0000210341002114200841003a00002002201541246c6a41046a2016360200200341ff0171450d020b41032115200b2103200c2116200d21080c290b20004101360200200020163602040240200b450d00200c450d00200b102e0b2002102e200724000f0b2000428080808010370200200041186a200d360200200041146a200c360200200041106a200b3602002000410c6a2002360200200041086a4103360200200724000f0b200641c0036a2002412c6a290200370300200641b8036a200241246a290200370300200641b0036a2002411c6a290200370300200641a8036a2208200241146a29020037030020064198036a41086a2002410c6a2902003703002006200229020437039803200241346a2802002111200241386a28020021102002413c6a280200211b200241c0006a280200211c02400240200628029c03220b4125490d002008280200210b20064198036a410c6a280200210c0c010b200641a1036a210c0b2006200628029803220d360290012006200c360288012006280214210e2006280218210f2006200b36028c01410021020240200b410174200d6b2209200e410174200f6b220a200a20094b1b2212450d00200628021021130340200f20026a22084101762214200e4f0d0d200d20026a22154101762216200b4f0d0e201320146a2d00002214410f71201441f0017141047620084101711b200c20166a2d00002208410f71200841047620154101711b470d012012200241016a2202470d000b201221020b0240024002400240024020022009470d002009200a460d010b200220094f0d01200b200d200241016a22126a22144101762208490d12200641d8006a200c20086a200b20086b10b008200641e8016a41086a2216200641d8006a41086a290300370300200641e8016a41106a2203200641d8006a41106a290300370300200641e8016a41186a2205200641d8006a41186a290300370300200641e8016a41206a220e200641d8006a41206a290300370300200641e8016a41286a220f200641d8006a41286a280200360200200620062903583703e801200d20026a220d4101762208200b4f0d13200c20086a2d0000210810b308211520064180046a41086a20144101713602002006418c046a220b20062903e80137020020064194046a20162903003702002006419c046a200329030037020020064180046a41246a2005290300370200200641ac046a200e290300370200200641b4046a200f280200360200200641c4046a201c360200200641c0046a201b360200200641bc046a2010360200200641b8046a20113602002006410436028404200641c8046a20062902b801370300200641d0046a200641b8016a41086a290200370300200641d8046a200641b8016a41106a28020036020041002114200641003a00800420152008410f712008410476200d4101711b41246c6a2208200141306a220320064180046a109d08360204200841003a000020062802142208410174200628021822166b2002470d0220064180046a20064188016a200210b408200641386a41086a20064180046a41186a290300370300200641386a41106a200641a0046a290300370300200641386a41186a200641a8046a290300370300200620064180046a41106a290300370338200b280200210820064180046a41086a28020021162004280208210b2004290200211720062802840421032006280280042102201521110c280b4100211402402010450d00201c2004280208470d0020102004280200201c10ec084521140b200b200d4101762202490d1020064180046a200c20026a200b20026b10b008200641c0026a41086a221520064194046a290200370300200641c0026a41106a220c2006419c046a290200370300200641c0026a41186a220e200641a4046a29020037030020062006418c046a2902003703c002200d410171210220064180046a41086a220d2802002108200628028404211620062802800421032004280208210b20042902002117024020052802002204450d00200541046a280200450d002004102e0b2005201b36020420052010360200200541086a201c360200200641386a41086a2015290300370300200641386a41106a200c290300370300200641386a41186a200e290300370300200641206a41086a200d290200370300200641206a41106a20064180046a41106a280200360200200620062903c00237033820062006290280043703200c270b200f20026a22144101762208200e4f0d12200628021020086a2d000021082003200220032802086a41016a36020820112008410f71200841047620144101711b221441246c6a22022902102118200220062903900437021020022902082119200220062903880437020820022902002117200641023a0080042002200629038004370200200241186a2208290200211a20082006290398043702002017a741ff01714102470d0120032802042215200328020822164101762208490d15200641c0026a200328020020086a201520086b10b0082006418c046a20062902c00237020020064194046a200641c0026a41086a2902003702002006419c046a200641d0026a29020037020020064180046a41246a200641d8026a290200370200200641ac046a200641e0026a290200370200200641b4046a200641e8026a280200360200200641b8046a2004290200370300200641c0046a200441086a280200360200200641013602840420064180046a41086a2016410171360200200641003a0080042011201441246c6a41046a200141306a20064180046a109d08360200200241003a00000c250b201620026a220b410176220d20084f0d122008201620126a22054101762214490d132006280210220c200d6a2d00002116200641c0026a200c20146a200820146b10b0082006418c046a220820062902c00237020020064194046a200641c0026a41086a2902003702002006419c046a200641c0026a41106a29020037020020064180046a41246a200641c0026a41186a290200370200200641ac046a200641c0026a41206a290200370200200641b4046a200641c0026a41286a280200360200200641b8046a2004290200370300200641c0046a200441086a280200360200200641013602840420064180046a41086a2204200541017136020041002114200641003a00800420152016410f71201641f00171410476200b4101711b41246c6a2216200320064180046a109d08360204201641003a000020064180046a20064188016a200210b408200641386a41086a20064180046a41186a290300370300200641386a41106a20064180046a41206a290300370300200641386a41186a20064180046a41286a290300370300200620064180046a41106a29030037033820082802002108200428020021162006280284042103200628028004210242002117201521110c250b200641a0046a200228022036020020064180046a41186a201a370300200620193703880420062017370380042006201837039004200641c0026a41086a200441086a280200360200200620042902003703c002200641e8016a200120064180046a2003200641c0026a200510ad0820062802ec012108024020062802e8014101460d00200641e8016a41086a2d00002115200241003a00002011201441246c6a41046a2008360200201541ff01710d24200b200d4101762202490d1520064180046a200c20026a200b20026b10b0082000410c6a200d41017136020020004281808080c000370204200041c8006a201c360200200041c4006a201b360200200041c0006a20103602002000413c6a2011360200200041106a200629028004370200200041186a20064188046a290200370200200041206a20064180046a41106a290200370200200041286a20064180046a41186a290200370200200041306a20064180046a41206a290200370200200041386a20064180046a41286a280200360200200041003602000c220b200041013602002000200836020402402010450d00201b450d002010102e0b2011102e0c210b200641e8026a2002412c6a290200370300200641e0026a200241246a290200370300200641d8026a2002411c6a290200370300200641d0026a2208200241146a290200370300200641c0026a41086a2002410c6a290200370300200620022902043703c0022002413c6a2802002109200241386a280200211c200241346a28020021100240024020062802c402220b4125490d002008280200210b200641c0026a410c6a280200210d0c010b200641c9026a210d0b410021020240200b41017420062802c002220c6b22112006280214220e4101742006280218220f6b220a200a20114b1b2212450d00200628021021130340200f20026a22084101762214200e4f0d16200c20026a22154101762216200b4f0d17201320146a2d00002214410f71201441f0017141047620084101711b200d20166a2d00002208410f71200841047620154101711b470d012012200241016a2202470d000b201221020b024002400240024020022011470d002011200a460d010b200220114f0d0110b3082108200c20026a22154101762216200b4f0d19200b201541016a220c4101762214490d1a200d20166a2d0000211620064198036a200d20146a200b20146b10b0082006418c046a220b20062902980337020020064180046a41146a220d20064198036a41086a220e29020037020020064180046a411c6a220f20064198036a41106a221229020037020020064180046a41246a221320064198036a41186a29020037020020064180046a412c6a221120064198036a41206a29020037020020064180046a41346a220a20064198036a41286a280200360200200641c0046a221b2009360200200641bc046a2209201c36020020064180046a41386a2010360200200641013602840420064180046a41086a2210200c41017136020041002114200641003a00800420082016410f71201641f0017141047620154101711b41246c6a2215200141306a20064180046a109d08360204201541003a000020064180046a200641106a200210b408200641a8016a41086a2202200b280200360200200641d8006a41086a221520064180046a41186a220c290300370300200641d8006a41106a221620064180046a41206a290300370300200641d8006a41186a221c20064180046a41286a29030037030020062006290284043703a801200620064180046a41106a221d290300370358200620062802800436029c032006410436029803200e20062903a8013703002012200228020036020020064198036a41386a410036020020064198036a41346a200836020020064198036a41146a200629035837020020064198036a411c6a201529030037020020064198036a41246a201629030037020020064198036a412c6a201c290300370200200641dc036a20062902880137020020064198036a41cc006a20064188016a41086a29020037020020064198036a41d4006a20064188016a41106a280200360200200641f0036a41086a200441086a280200360200200620042902003703f00320064180046a200120064198036a2003200641f0036a200510af08200641e8016a41086a22052013290200370300200641e8016a41106a220e2011290200370300200641e8016a41186a2212200a2902003703002006200f2902003703e80120102802002115200b2802002102201d2802002103200d2802002116200c280200210820092802002111201b2903002117200641c8046a280200210b200628028404210d2006280280042104200641b8016a41106a220c200641dc046a280200360200200641b8016a41086a220f20064180046a41d4006a290200370300200620064180046a41cc006a2902003703b80120044101460d07200641386a41186a2012290300370300200641386a41106a200e290300370300200641386a41086a2005290300370300200641206a41086a200f290300370300200641206a41106a200c280200360200200620062903e801370338200620062903b8013703200c020b41002102024020092004280208470d0020102004280200200910ec084521020b024020052802002208450d00200541046a280200450d002008102e0b2005201c36020420052010360200200541086a2009360200024020020d00200620062802c0023602800420064180046a41047221150240024020062802c40222084125490d00200641d0026a2802002108200641cc026a28020021020c010b200641c9026a21020b4100211420064180046a41086a221641003a0000200641003602840420152002200220086a10fb06200641386a41086a20064180046a41186a290300370300200641386a41106a200641a0046a290300370300200641386a41186a200641a8046a290300370300200641206a41086a20064198036a41086a290200370300200641206a41106a20064198036a41106a280200360200200620064180046a41106a29030037033820062006290298033703202006418c046a280200210820162802002116200429020421172004280200211120062802840421032006280280042102410121150c020b200620062802c0023602800420064180046a41047221140240024020062802c40222084125490d00200641d0026a2802002108200641cc026a28020021020c010b200641c9026a21020b20064180046a41086a221541003a0000200641003602840420142002200220086a10fb06200641386a41086a20064180046a41186a290300370300200641386a41106a200641a0046a290300370300200641386a41186a200641a8046a290300370300200641206a41086a20064198036a41086a290200370300200641206a41106a20064198036a41106a280200360200200620064180046a41106a29030037033820062006290298033703202006418c046a28020021082015280200211620042902042117200428020021112006280284042103200628028004210241012115410121140c010b200b200c4101762202490d19200641e8016a200d20026a200b20026b10b00810b308210220064198036a41086a20062902e80137030020064198036a41106a200641e8016a41086a29020037030020064198036a41186a200641e8016a41106a29020037030020064198036a41206a200641e8016a41186a29020037030020064198036a41286a200641e8016a41206a290200370300200641c8036a200641e8016a41286a28020036020020064198036a41c0006a200936020020064198036a413c6a201c360200200641d0036a201036020020064198036a41346a20023602002006200c41017136029c03200641043602980320064188016a41086a200441086a280200360200200620042902003703880120064180046a200120064198036a200320064188016a200510af08200641d8006a41086a2204200641a4046a290200370300200641d8006a41106a220d200641ac046a290200370300200641d8006a41186a220520064180046a41346a29020037030020062006419c046a29020037035820064180046a41086a28020021152006418c046a280200210220064180046a41106a280200210320064194046a280200211620064180046a41186a280200210820064180046a413c6a280200211120064180046a41c0006a2903002117200641c8046a280200210b200628028404210c2006280280042114200641b8016a41106a220e200641dc046a280200360200200641b8016a41086a220f200641d4046a2902003703002006200641cc046a2902003703b80120144101460d1a200641386a41186a2005290300370300200641386a41106a200d290300370300200641386a41086a2004290300370300200641206a41086a200f290300370300200641206a41106a200e28020036020020062006290358370338200620062903b801370320410021140b20062802c4024125490d26200641cc026a280200102e0c260b200d4101762202200b4f0d19200c20026a2d0000210210b30821080240024020114101470d0020064198036a41026a200641a4016a41026a2d00003a000020064180046a41086a20064188016a41086a29030037030020064180046a41106a20064188016a41106a29030037030020064180046a41186a20064188016a41186a280200360200200620062f01a4013b0198032006200629038801370380040c010b200b200d41016a22154101762214490d1b20064198036a200c20146a200b20146b10b00820064180046a41086a20154101713602002006418c046a20062902980337020020064194046a20064198036a41086a2902003702002006419c046a20064198036a41106a290200370200200641a4046a20064198036a41186a290200370200200641ac046a200641b8036a290200370200200641b4046a200641c0036a280200360200200641b8046a20093a0000200641b9046a20062f01a4013b00002006410236028404200641bb046a200641a4016a41026a2d00003a0000200641bc046a200a360200200641c0046a200629038801370300200641c8046a20064188016a41086a290300370300200641d0046a20064188016a41106a290300370300200641d8046a20064188016a41186a28020036020041002109200641003a008004200141306a20064180046a109d08210a0b20082002410f712002410476200d4101711b41246c6a220220093a0000200220062f0198033b00012002200a3602042002200629038004370208200241036a2006419a036a2d00003a0000200241106a20064180046a41086a2215290300370200200241186a20064180046a41106a2216290300370200200241206a20064180046a41186a220b2802003602004100211420064198036a41086a41003602002006200836029c032006410336029803200641b8016a41086a200441086a280200360200200620042902003703b80120064180046a200120064198036a2003200641b8016a200510af08200641c0026a41086a220d20064180046a41246a290200370300200641c0026a41106a2205200641ac046a290200370300200641c0026a41186a220c200641b4046a29020037030020062006419c046a2902003703c002201528020021152006418c046a28020021022016280200210320064194046a2802002116200b2802002108200641bc046a2802002111200641c0046a2903002117200641c8046a280200210b200628028404210e2006280280042104200641e8016a41106a220f200641dc046a280200360200200641e8016a41086a2212200641d4046a2902003703002006200641cc046a2902003703e80120044101460d01200641386a41186a200c290300370300200641386a41106a2005290300370300200641386a41086a200d290300370300200641206a41086a2012290300370300200641206a41106a200f280200360200200620062903c002370338200620062903e8013703200c1e0b0240024020022011460d00200b200d20026a22144101762208490d1c200641b8016a200c20086a200b20086b10b0082003200328020820026a36020820064198036a41086a221620062902b80137030020064198036a41106a220b200641b8016a41086a29020037030020064198036a41186a220d200641b8016a41106a29020037030020064198036a41206a220c200641b8016a41186a29020037030020064198036a41286a220e200641b8016a41206a29020037030020064198036a41306a200641b8016a41286a280200360200200641cc036a20093a00002006201441017136029c03410221152006410236029803200641cf036a200641a4016a41026a2d00003a0000200620062f01a4013b00cd03200641d0036a200a360200200641ec036a20064188016a41186a280200360200200641e4036a20064188016a41106a290300370200200641dc036a20064188016a41086a290300370200200641d4036a200629038801370200200641f0036a41086a200441086a280200360200200620042902003703f00320064180046a200120064198036a2003200641f0036a200510af0820062802840421142006280280042108200641c0026a20064180046a41086a41d80010e9081a20084101460d01200641e8016a200641c0026a41d80010e9081a20064198036a200641a8016a200210b40820064180046a410472200641e8016a41d80010e9081a41002111200641003a008004200141306a20064180046a109d082102200641386a41086a200d290300370300200641386a41106a200c290300370300200641386a41186a200e2903003703002006200b2903003703382002ad211720162802002116200641a4036a28020021082006280298032102200628029c032103410021140c1f0b2003200328020820116a36020820064180046a41086a20062903880137030020064180046a41106a20064188016a41086a29030037030020064180046a41186a20064188016a41106a290300370300200641a0046a20064188016a41186a280200360200200620093a008004200620062f01a4013b0081042006200641a6016a2d00003a0083042006200a3602840420064198036a41086a200441086a2802003602002006200429020037039803200641c0026a200120064180046a200320064198036a200510ad0820062802c4022115024020062802c0024101460d00200b200d4101762202490d1d200641c0026a41086a2d0000210820064180046a200c20026a200b20026b10b008200641386a41086a20064194046a290200370300200641386a41106a2006419c046a290200370300200641d0006a200641a4046a290200370300200641206a41086a20064198036a41086a290200370300200641206a41106a20064198036a41106a28020036020020062006418c046a2902003703382006200629029803370320200d4101712102200841ff017145211420064180046a41086a2802002108200628028404211620062802800421032015ad211741022115410021110c1f0b20004101360200200020153602040c020b20004101360200200020143602040c010b200041013602002000200e3602040b200628025c4125490d1d200641e4006a280200102e200724000f0b200041013602002000200d3602040c190b2014200e41e0efcc00103c000b2016200b41e0efcc00103c000b2002200841f0efcc001056000b2015201441e0efcc00103c000b2014201641f0efcc001056000b2014200e41e0efcc00103c000b2016200b41e0efcc00103c000b2002200b41f0efcc001056000b2008200b41f0efcc001056000b2008200b41e0efcc00103c000b2008200e41e0efcc00103c000b200d200841e0efcc00103c000b2014200841f0efcc001056000b2008201541f0efcc001056000b2002200b41f0efcc001056000b2014200e41e0efcc00103c000b2016200b41e0efcc00103c000b2016200b41e0efcc00103c000b2014200b41f0efcc001056000b2002200b41f0efcc001056000b200041013602002000200c3602040c040b2002200b41e0efcc00103c000b2014200b41f0efcc001056000b2008200b41f0efcc001056000b2002200b41f0efcc001056000b20062802c4024125490d02200641cc026a280200102e0c020b200628025c4125490d06200641e4006a280200102e0c060b200628029c034125490d00200641a4036a280200102e200724000f0b200724000f0b200b200d4101762202490d0120064180046a200c20026a200b20026b10b008200641386a41086a20064194046a290200370300200641c8006a2006419c046a290200370300200641d0006a200641a4046a29020037030020062006418c046a290200370338200d4101712102201bad4220862010ad84211720064180046a41086a28020021082006280284042116200628028004210341002114201c210b0b0240200628029c034125490d00200641a4036a280200102e0b410421150c020b2002200b41f0efcc001056000b0b20002014360204200041186a2008360200200041146a2016360200200041106a20033602002000410c6a2002360200200041086a20153602002000411c6a2006290338370200200041c8006a200b360200200041c0006a20173702002000413c6a2011360200200041cc006a2006290320370200200041246a200641386a41086a2903003702002000412c6a200641386a41106a290300370200200041346a200641386a41186a290300370200200041d4006a200641206a41086a290300370200200041dc006a200641206a41106a28020036020020004100360200200724000bd50301087f230041106b22032400200041003a00042000410036020020032000200210fc060240024020032802004101470d00200341086a2802000d0141d0f0cc00411141e4f0cc001039000b02400240200028020022044125490d002000410c6a22052802002106200041086a28020021070c010b200041056a21072004210620002105412421040b02400240024020062004490d00200121080c010b2002210920012108024003402009450d01200720066a20082d00003a00002009417f6a2109200841016a21082004200641016a2206470d000b200421060c010b200520063602000c010b20052006360200200120026a22012008460d00200841016a21062000410c6a2105200041056a210a20082d00002102034002400240200028020022044125490d00200028020c210820002802082107200521090c010b2004210820002109200a2107412421040b024020082004470d0020032000410110fc06024020032802004101470d00200341086a2802000d0441d0f0cc00411141e4f0cc001039000b200028020c210820002802082107200521090b200720086a20023a00002009200928020041016a36020020012006460d0120062d00002102200641016a21060c000b0b200341106a24000f0b1036000b880903017f027e177f230041d0016b22022400200241186a200141d00010e9081a20024188016a20002903182000290308853703002002200029031022033703782002200029030022043703702002200320048537038001200241186a200241f0006a109107200241086a2002290378420020022903702203420010e8084104210520002802202206200241106a290300200229030885200389a7220771220841046a200671210902400240024002400240200041246a280200220a20086a280000220b2007411976220c41818284086c220d732201417f73200141fffdfb776a7141808182847871220e0d004104210f200b21100340200921012010201041017471418081828478710d0320062001200f6a41046a712109200f41046a2205210f200d200a20016a280000221073220e417f73200e41fffdfb776a7141808182847871220e450d000c020b0b200b211020082101200a450d010b200e417f6a200e71210f2001200e684103766a210e200241186a41256a2111200241c4006a2802002112200241c0006a280200211320022802382114200241e4006a2d000041ff01712115200241186a41cd006a2d000041ff0171211603400240200241186a200a41002006200e716b41d0006c6a220e41b07f6a2217412010ec080d00200e41506a2118201321192012211a0240201441254f0d00201121192014211a0b024002402018280200221b4125490d00200e415c6a280200211b200e41586a28020021180c010b201841056a21180b201a201b470d0020192018201a10ec080d002015200e417c6a2d0000470d002015450d032016201741cd006a2d000041ff0171460d030b02400240200f450d00200f210e0c010b2005210f0340200921012010201041017471418081828478710d0320062001200f6a41046a712109200f41046a2205210f200d200a20016a280000221073220e417f73200e41fffdfb776a7141808182847871220e450d000b0b200e417f6a200e71210f2001200e684103766a210e0c000b0b200041206a210f2002200036026c200241f0006a200241186a41d00010e9081a4104210102400340200b4180818284787122100d01200820016a2110200141046a2101200a201020067122086a280000210b0c000b0b0240200a20106841037620086a20067122016a2c000022104100480d00200a200a280200418081828478716841037622016a2d000021100b200041286a280200210802402010410171220b450d0020080d00200241c0016a200f200241ec006a10b508200028022022062007712110200041246a280200210a4104210103402010220820016a2006712110200141046a2101200a20086a28000041808182847871220f450d000b0240200a200f6841037620086a20067122016a2c00004100480d00200a280200418081828478716841037621010b200028022821080b20002008200b6b360228200a20016a200c3a000020062001417c6a71200a6a41046a200c3a0000200a410020016b41d0006c6a41b07f6a200241f0006a41d00010e9081a2000412c6a2201200128020041016a3602000c010b20144125490d002013102e0b200241d0016a24000bc40801047f230041f0026b22042400024002400240024002400240024020022802004101470d00200241086a280200210520022802042102200441d0016a41186a200141186a290000370300200441d0016a41106a200141106a290000370300200441d0016a41086a200141086a290000370300200420012900003703d001200441f0016a200441d0016a20022005200310ae0820042802f401210120042802f0012102200441f8006a200441f0016a41086a220541d40010e9081a20024101460d05200441206a200441f8006a41d40010e9081a200420013602f4012005200441206a41d40010e9081a41002102200441003a00f0012003200441f0016a109d0821010c010b2002280204210302400240200241086a28020022024120460d00200441f0016a41186a200141186a290000370300200441f0016a41106a200141106a290000370300200441f0016a41086a200141086a290000370300200420012900003703f0012002417f4c0d040240024020020d00410121010c010b2002102c2201450d060b20012003200210e9082103200441f8006a41186a2205200441f0016a41186a290300370300200441f8006a41106a2206200441f0016a41106a290300370300200441f8006a41086a2207200441f0016a41086a290300370300200420042903f0013703784130102c2201450d05200141043a000020012004290378370001200120042f00f0013b00212001200236002c2001200236002820012003360024200141096a2007290300370000200141116a2006290300370000200141196a2005290300370000200141236a200441f2016a2d00003a0000410121020c010b200441f8006a41026a200341026a2d00003a0000200441f0016a41086a2003410f6a29000037030020044180026a200341176a29000037030020044188026a2003411f6a2d00003a0000200420032f00003b0178200420032900073703f00120032800032101410021020b200441d0016a41026a2203200441f8006a41026a2d00003a0000200441206a41086a2205200441f0016a41086a290300370300200441206a41106a2206200441f0016a41106a290300370300200441206a41186a2207200441f0016a41186a2d00003a0000200420042f01783b01d001200420042903f00137032020020d012004411c6a41026a20032d00003a0000200441086a2005290300370300200441106a2006290300370300200441186a20072d00003a0000200420042f01d0013b011c20042004290320370300410121020b200020023a000420004100360200200041056a20042f011c3b0000200041086a20013602002000410c6a2004290300370200200041076a2004411e6a2d00003a0000200041146a200441086a2903003702002000411c6a200441106a290300370200200041246a200441186a2802003602000c040b20004101360200200020013602040c030b1038000b1036000b20004101360200200020013602040b200441f0026a24000b800d01027f230041b0046b22002400024041c004102c22010d001036000b200141023a00002001200029008d04370001200141023a0024200120002900ea03370025200141096a2000418d046a41086a290000370000200141116a2000418d046a41106a290000370000200141196a2000418d046a41186a290000370000200141206a2000418d046a411f6a2800003600002001412d6a200041ea036a41086a290000370000200141356a200041ea036a41106a2900003700002001413d6a200041ea036a41186a290000370000200141c4006a200041ea036a411f6a280000360000200141023a0048200141023a006c200120002900c703370049200141d1006a200041c7036a41086a290000370000200141d9006a200041c7036a41106a290000370000200141e1006a200041c7036a41186a290000370000200141e8006a200041c7036a411f6a280000360000200120002900a40337006d200141f5006a200041a4036a41086a290000370000200141fd006a200041a4036a41106a29000037000020014185016a200041a4036a41186a2900003700002001418c016a200041a4036a411f6a280000360000200141023a009001200141023a00b40120012000290081033700910120014199016a20004181036a41086a290000370000200141a1016a20004181036a41106a290000370000200141a9016a20004181036a41186a290000370000200141b0016a20004181036a411f6a280000360000200120002900de023700b501200141bd016a200041de026a41086a290000370000200141c5016a200041de026a41106a290000370000200141cd016a200041de026a41186a290000370000200141d4016a200041de026a411f6a280000360000200141023a00d801200141f8016a200041bb026a411f6a280000360000200141f1016a200041bb026a41186a290000370000200141e9016a200041bb026a41106a290000370000200141e1016a200041bb026a41086a290000370000200120002900bb023700d901200141023a00fc012001419c026a20004198026a411f6a28000036000020014195026a20004198026a41186a2900003700002001418d026a20004198026a41106a29000037000020014185026a20004198026a41086a29000037000020012000290098023700fd01200141023a00a002200141c0026a200041f5016a411f6a280000360000200141b9026a200041f5016a41186a290000370000200141b1026a200041f5016a41106a290000370000200141a9026a200041f5016a41086a290000370000200120002900f5013700a102200141023a00c402200141e4026a200041d2016a411f6a280000360000200141dd026a200041d2016a41186a290000370000200141d5026a200041d2016a41106a290000370000200141cd026a200041d2016a41086a290000370000200120002900d2013700c502200141023a00e80220014188036a200041af016a411f6a28000036000020014181036a200041af016a41186a290000370000200141f9026a200041af016a41106a290000370000200141f1026a200041af016a41086a290000370000200120002900af013700e902200141023a008c03200141ac036a2000418c016a411f6a280000360000200141a5036a2000418c016a41186a2900003700002001419d036a2000418c016a41106a29000037000020014195036a2000418c016a41086a2900003700002001200029008c0137008d03200141023a00b003200141d0036a200041e9006a411f6a280000360000200141c9036a200041e9006a41186a290000370000200141c1036a200041e9006a41106a290000370000200141b9036a200041e9006a41086a290000370000200120002900693700b103200141023a00d403200141f4036a200041c6006a411f6a280000360000200141ed036a200041c6006a41186a290000370000200141e5036a200041c6006a41106a290000370000200141dd036a200041c6006a41086a290000370000200120002900463700d503200141023a00f80320014198046a200041236a411f6a28000036000020014191046a200041236a41186a29000037000020014189046a200041236a41106a29000037000020014181046a200041236a41086a290000370000200120002900233700f903200141023a009c04200141bc046a2000411f6a280000360000200141b5046a200041186a290000370000200141ad046a200041106a290000370000200141a5046a200041086a2900003700002001200029000037009d04200041b0046a240020010bf310010a7f230041e0006b220324000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200141046a2802002204410174200141086a28020022056b20024b0d00200420054101762202490d01200341206a200128020020026a200420026b10b00820002005410171360200200020032903203702042000410c6a200341286a290300370200200041146a200341306a2903003702002000411c6a200341386a290300370200200041246a200341c0006a2903003702002000412c6a200341c8006a2802003602000c150b20054101762106200520026a22074101762108024020074101710d0020082006490d0220042008490d03200128020020066a210202400240200820066b220141244b0d00200341206a2002200110e9081a200341d0006a41026a200341206a41026a2d00003a0000200341086a200341336a290000370300200341106a2003413b6a290000370300200341186a200341c3006a2d00003a0000200320032f00203b01502003200329002b3703002003280023210420032800272102410021060c010b2001417f4c0d052001102c2204450d0620042002200110e9081a41012106200121020b2000200136020420002005410171360200200041086a20063a0000200041096a20032f01503b0000200041106a20023602002000410c6a2004360200200041146a20032903003702002000410b6a200341d2006a2d00003a00002000411c6a200341086a290300370200200041246a200341106a2903003702002000412c6a200341186a2802003602000c150b200841016a22072006490d05200820044f0d06200128020020066a210802400240200720066b220441244b0d00200341206a2008200410e9081a2003411c6a41026a200341206a41026a2d00003a0000200341086a200341336a290000370300200341106a2003413b6a290000370300200341186a200341c3006a2d00003a0000200320032f00203b011c2003200329002b3703002003280023210120032800272106410021080c010b2004417f4c0d042004102c2201450d0520012008200410e9081a41012108200421060b200341206a4104722109200341296a220720032f011c3b0000200341206a41106a220a20063602002003412c6a2001360200200341346a20032903003702002003412b6a2003411e6a2d00003a00002003413c6a200341086a290300370200200341c4006a200341106a290300370200200341cc006a200341186a280200360200200320083a00282003200436022420032002410171220236022002402005410171220520024d0d000240024020044125490d002006417f6a220b0d0120012d000021040c150b2004417f6a220b450d090b200b417f6a210c410021010340200141016a21050240024020044125490d002003280230220420014d0d102003280230220420054d0d11200328022c20016a2d00004104742102200328022c20016a41016a2d0000410476210620032802302104200328022c21080c010b200420014d0d0f200420054d0d10200720016a22062d00004104742102200641016a2d00004104762106200721080b200420014d0d0a200820016a20062002723a00000240200c2001460d0020032802242104200521010c010b0b02400240200328022422014125490d0020032802302201200b4d0d11200328022c200b6a2d0000210420032802302101200328022c21070c010b2001200b4d0d102007200b6a2d000021040b2001200b4d0d0a2007200b6a21010c130b200520024f0d130240024020044125490d00200a21050c010b200421062009210520072101412421040b024020062004470d00200341d0006a2009410110fc06024020032802504101470d00200341d8006a2802000d0641d0f0cc00411141e4f0cc001039000b20032802302106200328022c2101200a21050b200120066a41003a00002005200528020041016a36020002400240200328022422044125490d00200328023021010c010b200421010b024020014102490d002001417e6a21010340200141016a21050240024020044125490d002003280230220420014d0d132003280230220420054d0d14200328022c20016a2d00004104742102200328022c20016a41016a2d0000410476210620032802302104200328022c21080c010b200420014d0d12200420054d0d13200720016a22062d00004104742102200641016a2d00004104762106200721080b200420054d0d0c200820016a41016a20062002723a00002001417f6a210120032802242104200541014b0d000b0b0240024020044125490d002003280230450d13200328022c2d0000210120032802302104200328022c21070c010b2004450d1220032d002921010b2004450d0b2007200141f001714104763a00000c130b2002200441f0efcc001056000b200620084180f0cc001057000b200820044180f0cc00104d000b1038000b1036000b200620074190f0cc001057000b200720044190f0cc00104d000b20032d00292104200721010c0a0b2001200441ecf4cc00103c000b200b2001418cf5cc00103c000b200141016a200441c4f2cc00103c000b4100410041acf5cc00103c000b2001200441ccf4cc00103c000b200141016a200441dcf4cc00103c000b200b200141fcf4cc00103c000b2001200441a4f2cc00103c000b200141016a200441b4f2cc00103c000b41004100419cf5cc00103c000b200120044104743a00000b02400240200328022422014125490d00200328023021010c010b2009210a0b02402001450d00200a2001417f6a3602000b20002003290320370200200041286a200341206a41286a290300370200200041206a200341206a41206a290300370200200041186a200341206a41186a290300370200200041106a200341206a41106a290300370200200041086a200341206a41086a2903003702000b200341e0006a24000bcc0f06087f017e077f017e017f027e230041e0006b220324000240024002400240024002400240200128020c220441016a22052004490d000240200520012802002206200641016a220741037641076c20064108491b22064101764b0d004100210641002105024003400240024020064101710d00200520074f0d0320052106200541016a21050c010b200541036a220620054922080d0220062007492209450d022007200541046a20081b200720091b21050b200141046a28020020066a220620062802002206410776417f73418182840871200641fffefdfb07726a360200410121060c000b0b200141046a2802002105200128020041016a22064104490d05200520066a20052800003600000c060b024002402005200641016a2206200520064b1b22050d0041d0a1c0002108410021094100210a0c010b02400240200541074b0d004104410820054104491b21050c010b200541ffffffff01712005470d03417f2005410374220541076e417f6a677641016a41012005410d4b1b21050b2005ad42d0007e220b422088a70d03200ba72206200541046a22096a22082006490d032008102c2208450d04200820066a220841ff01200910eb081a2005417f6a2209200541037641076c20094108491b210a0b200141046a280200220c41046a210d200c20076a210e200c280200417f734180818284787121072002280200210f200341d8006a2110200341086a211103400240024020070d0002400340200d200e4f0d01200c41c07d6a210c200d2802002105200d41046a2206210d2005418081828478712205418081828478460d000b2005418081828478732207417f6a20077121122006210d0c020b2001200436020c200041003602002001200a20046b3602082001280200210520012009360200200141046a22062802002107200620083602002005450d092007200541016aad42d0007ea76b102e0c090b2007417f6a20077121120b2010200f290318200f290308853703002003200f290310220b3703482003200f29030022133703402003200b20138537035041002105200c41002007684103766b41d0006c6a41b07f6a2214200341c0006a1091072003200329034842002003290340220b420010e8082011290300200329030085200b89220ba721060340200541046a2205200620097122076a2106200820076a280000418081828478712202450d000b0240200820026841037620076a20097122056a2c00004100480d002008280200418081828478716841037621050b200820056a200ba741197622063a00002005417c6a20097120086a41046a20063a00002008410020056b41d0006c6a41b07f6a201441d00010e9081a201221070c000b0b41accdcc00411c41c8cdcc001039000b41accdcc00411c41c8cdcc001039000b41accdcc00411c41c8cdcc001039000b1036000b200541046a2005200610ea081a0b4100210502402001280200220a417f460d002002280200210c200141046a210e200341c0006a41186a2110200341106a41086a21114100210603400240200e2802002205200622146a2d0000418001470d00410020146b210403402010200c290318200c290308853703002003200c290310220b3703482003200c29030022133703402003200b2013853703502005200441d0006c6a220f41b07f6a220d200341c0006a109107200341106a200329034842002003290340220b420010e808200e280200210920012802002108410021052011290300200329031085200b89220ba7221221060340200541046a2205200620087122076a2106200920076a280000418081828478712202450d000b0240200920026841037620076a20087122056a2c00004100480d002009280200418081828478716841037621050b02402005200820127122066b201420066b7320087141034b0d00200920146a200ba741197622053a000020082014417c6a7120096a41046a20053a00000c020b200920056a22062d000021072006200ba741197622023a00002005417c6a20087120096a41046a20023a00000240200741ff01470d00200e280200220620146a41ff013a0000200620012802002014417c6a716a41046a41ff013a0000200e280200410020056b41d0006c6a41b07f6a200d41d00010e9081a0c020b200e280200410020056b41d0006c6a220741b07f6a2205290200210b2005200d290200370200200541186a220629020021132006200d41186a2208290200370200200541106a220629020021152006200d41106a2209290200370200200541086a220529020021162005200d41086a2206290200370200200d200b370200200620163702002009201537020020082013370200200741506a220541186a2208290200210b2008200f41506a220641186a2209290200370200200541106a220829020021132008200641106a2202290200370200200541086a220829020021152008200641086a220d2902003702002005290200211620052006290200370200200620163702002009200b37020020022013370200200d2015370200200741706a220541086a2207290000210b2007200f41706a220641086a22082900003700002005290000211320052006290000370000200620133700002008200b370000200e28020021050c000b0b201441016a21062014200a470d000b20012802002205200541016a41037641076c20054108491b21050b2000410036020020012005200128020c6b3602080b200341e0006a24000b130020004123360204200041b4adcb003602000b8c0301047f230041d0006b22022400200241186a200141186a290000370300200241106a200141106a290000370300200241086a200141086a29000037030020022001290000370300200241206a41de80ca004109108102200241306a41a8fcca004109108102024002404120102c2201450d002002422037024420022001360240200241c0006a20024120107420022802482201417f4c0d01200228024021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280244450d002003102e0b200141206a2203417f4c0d012003102c2205450d00200241003602482002200336024420022005360240200241c0006a200241206a41101074200241c0006a200241306a41101074200241c0006a20042001107402402001450d002004102e0b200220022802402203200228024810b705024020022802042201450d0020002002290308370208200020022802003602000b2000200136020402402002280244450d002003102e0b200241d0006a24000f0b1036000b1038000bb40201037f230041e0006b22022400200241086a41de80ca004109108102200241186a4184faca004108108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241c8006a41086a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000bf50101047f230041306b22022400200241de80ca004109108102200241106a41f4fcca00410d108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000bf50101047f230041306b22022400200241de80ca004109108102200241106a41a8fcca004109108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000b950f0a067f027e017f017e027f067e017f027e127f067e230041a0026b220524002005200010b808200541306a200528020022062005280208220710b105200541b0016a41026a220020052d00333a000041082108200541e8016a41086a220920054190016a290300370300200541e8016a41106a220a20054198016a290300370300200520052f00313b01b001200520054188016a2903003703e80120054180016a290300210b200541f8006a290300210c024002400240024020052d0030220d4102470d004200210e4100210f410021104200211142002112420021134200211442002115420021164100210d0c010b200541f0006a2903002116200541e8006a2903002115200541d8006a2903002113200541d0006a2903002112200541c8006a2903002111200541306a41106a290300210e200541e0006a29030021142005413c6a2802002110200541306a41086a280200210f200528023421172005412c6a41026a20002d00003a0000200541106a41086a2009290300370300200541106a41106a200a290300370300200520052f01b0013b012c200520052903e80137031041012100200d4101460d01201721080b4200201320047d2012200354ad7d2218201220037d2219201256201820135620182013511b22001b21134200201920001b21124200201120027d200e200154ad7d2218200e20017d2219200e56201820115620182011511b22001b21114200201920001b210e0240201041306c2200450d00200820006a211a200541e8006a2117200541306a410172221b41036a211c200821000340200041306a21090240200041086a2d00004101710d00200041096a2d0000211d200541a0016a2000280200108905200541306a20052802a001220a20052802a801221e108a05200541e8016a41086a221f201741086a2220290000370300200541e8016a41106a2221201741106a2222290000370300200541e8016a41186a2223201741186a2224290000370300200541e8016a41206a2225201741206a2226290000370300200541e8016a41286a2227201741286a22282900003703002005201b280000360298022005201c28000036009b02200520172900003703e801200541306a41306a2129200541306a41206a212a200541306a41106a212b0240024020052d003022004102470d00410221000c010b20292903002119202a290300212c202b290300212d200529035821182005290348212e2005290338212f200541b0016a41086a201f290300370300200541b0016a41106a2021290300370300200541b0016a41186a2023290300370300200541b0016a41206a2025290300370300200541b0016a41286a20272903003703002005200528009b023600e30120052005280298023602e001200520052903e8013703b00120000d004200201920047d2018200354ad7d2230201820037d2231201856203020195620302019511b22001b21194200203120001b211802400240201d4101710d004200202c20027d202e200154ad7d2230202e20017d2231202e562030202c562030202c511b22001b212c4200203120001b212e0c010b4200202d20027d202f200154ad7d2230202f20017d2231202f562030202d562030202d511b22001b212d4200203120001b212f0b410021000b201b20052802e001360000201720052903b00137030020292019370300202a202c370300202b202d370300201c20052800e3013600002020200541b0016a41086a2903003703002022200541b0016a41106a2903003703002024200541b0016a41186a2903003703002026200541b0016a41206a2903003703002028200541b0016a41286a290300370300200520183703582005202e3703482005202f370338200520003a00300240024020004102470d00200a201e10ff010c010b200541003602f001200542013703e801200541306a200541e8016a10bc05200a201e20052802e801220020052802f00110b20120052802ec01450d002000102e0b20052802a401450d00200a102e0b20092100201a2009470d000b0b20082117200d2100201021090c010b4200200b20047d200c200354ad7d2218200c20037d2219200c562018200b562018200b511b22091b210b4200201920091b210c4200201620027d2015200154ad7d2218201520017d2219201556201820165620182016511b22091b21164200201920091b2115410121090b20054180016a200b370300200541f8006a200c370300200541f0006a2016370300200541e8006a2015370300200541d8006a2013370300200541d0006a2012370300200541c8006a2011370300200541306a41106a200e370300200541e0006a20143703002005413c6a2010360200200541306a41086a200f36020020054188016a200529031037030020054190016a200541106a41086a29030037030020054198016a200541106a41106a290300370300200520052f012c3b00312005201736023420052005412c6a41026a2d00003a0033200520003a00300240024020004102470d002006200710ff010c010b200541e8016a200541306a10c2042006200720052802e801220a20052802f00110b201024020052802ec01450d00200a102e0b20000d00200f450d00200f41306c450d002017102e0b02402005280204450d002006102e0b200541a0026a240020090bad0802057f027e23004180026b2203240020034180016a20022802002204200241086a280200220510b001200341206a41186a20034180016a41186a290000370300200341206a41106a20034180016a41106a290000370300200341206a41086a20034180016a41086a290000370300200320032900800137032020034180016a200341206a1098082003280280012206200328028801108f0221070240200328028401450d002006102e0b0240024002402007450d002000410c1093080c010b200341106a2005ad42004280c2d72f420010e80820034180016a200120032903102208200341106a41086a290300220910c3022003200329008101370360200320034180016a41086a2207280000360067024020032d00800122064106470d0020034180016a41186a2206420037030020034180016a41106a2205420037030020074200370300200342003703800120034180016a41d9fcc6004106108102200341e0006a4180f4cb0041061081022006200341e0006a41086a220729000037030020052003290060370300200341086a20034180016a4120108e02200328020c210620032802082105200341cc006a200241086a28000036000020032002290000370044200341c8016a2009370300200341c0016a2008370300200341a1016a2003290041370000200341a8016a200341c8006a290000370000200341b4016a4100360200200341b0016a2006410020051b36020020034189016a200141086a29000037000020034191016a200141106a29000037000020034199016a200141186a290000370000200341013a0080012003200129000037008101200341e0006a41186a200341206a41186a290300370300200341e0006a41106a200341206a41106a2903003703002007200341206a41086a29030037030020032003290320370360200341d0006a200341e0006a10be082003280250210220032802582107200341003602682003420137036020034180016a200341e0006a10ac082002200720032802602206200328026810b20102402003280264450d002006102e0b02402003280254450d002002102e0b0240200341a8016a280200450d00200341a4016a280200102e0b200341d8016a2009370300200341d0016a200837030020034180016a41086a410b3a000020034191016a200341206a41086a29030037000020034199016a200341206a41106a290300370000200341a1016a200341206a41186a290300370000200341a9016a2001290000370000200341b1016a200141086a290000370000200341b9016a200141106a290000370000200341c1016a200141186a290000370000200341093a00800120034180016a41096a200329032037000020034180016a10fe01200041063a00000c020b200020063a000020002003290360370001200041086a20032800673600000b200241046a280200450d002004102e0b20034180026a24000bab0a07037f017e017f017e017f027e037f230041f0016b22032400200341f0006a20022802002204200228020810b001200341106a41186a200341f0006a41186a22052900002206370300200341106a41106a200341f0006a41106a22072900002208370300200341106a41086a200341f0006a41086a2209290000220a37030020032003290070220b370310200341003a004020052006370300200720083703002009200a3703002003200b370370200341d0006a200341f0006a10be08200341086a200328025022052003280258200341c0006a4101410010ca0402400240024020032802080d00200341f0006a410d10930820032802540d010c020b0240024002400240200328020c450d0020032d00400e020102000b4190c1cb00412910ef02200341f0006a410d1093080c020b200341063a00700c010b200341f0006a410c1093080b2003280254450d010b2005102e0b200320032900713703302003200341f0006a41086a2800003600370240024002400240024020032d007022054106470d00200341d0006a200341106a109808200341f0006a20032802502207200328025810ad052003280254210520032d007022094102460d0120034198016a280200210c20034194016a280200210d2003280274210e02402005450d002007102e0b20090d02200341f0006a41186a22054200370300200341f0006a41106a22074200370300200341f0006a41086a420037030020034200370370200341f0006a41d9fcc6004106108102200341d0006a4180f4cb0041061081022005200341d0006a41086a2209290000370300200720032900503703002003200341f0006a4120108e0220032802042105200328020021072003413b6a200241086a28000036000020032002290000370033200341b8016a4200370300200341b0016a420037030020034191016a200329003037000020034198016a200341376a290000370000200341a8016a200e360200200341a4016a4101360200200341a0016a2005410020071b360200200341f9006a200141086a29000037000020034181016a200141106a29000037000020034189016a200141186a290000370000200341013a007020032001290000370071200341d0006a41186a200341106a41186a290300370300200341d0006a41106a200341106a41106a2903003703002009200341106a41086a29030037030020032003290310370350200341c0006a200341d0006a10be0820032802402102200328024821052003410036025820034201370350200341f0006a200341d0006a10ac082002200520032802502207200328025810b20102402003280254450d002007102e0b02402003280244450d002002102e0b024020034198016a280200450d0020034194016a280200102e0b200341c8016a4200370300200341c0016a4200370300200341f0006a41086a410b3a000020034181016a200341106a41086a29030037000020034189016a200341106a41106a29030037000020034191016a200341106a41186a29030037000020034199016a2001290000370000200341a1016a200141086a290000370000200341a9016a200141106a290000370000200341b1016a200141186a290000370000200341093a0070200341f0006a41096a2003290310370000200341f0006a10fe01200041063a00000c040b200020053a000020002003290330370001200041086a20032800373600000c020b02402005450d002007102e0b2000410d1093080c010b0240200c450d00200d102e0b2000410c1093080b200241046a280200450d002004102e0b200341f0016a24000bf50101047f230041306b22022400200241de80ca004109108102200241106a41f780ca004109108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000b8e1d08077f067e0a7f017e017f057e017f067e23004190046b22042400200441a0026a2002108905200441d0026a20042802a002220520042802a802108a05200441d0036a41086a220620044190036a290300370300200441d0036a41106a220720044198036a290300370300200441d0036a41186a2208200441a0036a290300370300200441d0036a41206a2209200441a8036a290300370300200441d0036a41286a220a200441b0036a290300370300200420044188036a2903003703d00320044180036a290300210b200441d0026a41286a290300210c200441d0026a41206a290300210d200441d0026a41186a290300210e200441d0026a41106a290300210f200441d0026a41086a290300211020042802d402211120042d00d1022112024020042d00d00222134102460d00200441e0006a41286a200a290300370300200441e0006a41206a2009290300370300200441e0006a41186a2008290300370300200441e0006a41106a2007290300370300200441e0006a41086a2006290300370300200420042903d0033703600b024020042802a402450d002005102e0b200441a0016a41286a2205200441e0006a41286a290300370300200441a0016a41206a2206200441e0006a41206a290300370300200441a0016a41186a2207200441e0006a41186a290300370300200441a0016a41106a2214200441e0006a41106a290300370300200441a0016a41086a2215200441e0006a41086a290300370300200420042903603703a001200441d0016a200110b808200441d0026a20042802d001221620042802d80110b105200441a0026a41026a220120042d00d3023a0000200441d0036a41086a2004419c036a290200370300200441d0036a41106a2217200441a4036a290200370300200441d0036a41186a2218200441ac036a290200370300200441d0036a41206a2219200441b4036a290200370300200441d0036a41286a221a200441bc036a280200360200200420042f00d1023b01a002200420044194036a2902003703d0030240024020042d00d00222094102470d004200211b4100210a4100211c4200211d4200211e4200211f42002120420021214100212241082108410021090c010b20044188036a290300212120044180036a2903002120200441d0026a41286a290300211f200441d0026a41206a290300211e200441d0026a41186a290300211d200441d0026a41106a290300211b20044190036a2802002122200441dc026a280200211c200441d0026a41086a280200210a20042802d40221082004418c026a41026a20012d00003a0000200441e0016a41086a200441d0036a41086a290300370300200441e0016a41106a2017290300370300200441e0016a41186a2018290300370300200441e0016a41206a2019290300370300200441e0016a41286a201a280200360200200420042f01a0023b018c02200420042903d0033703e0010b200441a0026a41286a2005290300370300200441a0026a41206a2006290300370300200441a0026a41186a2007290300370300200441a0026a41106a2014290300370300200441a0026a41086a2015290300370300200420042903a0013703a0020240024002400240024020090d004100210102400240024002400240024002400240024002400240201c0e020201000b41002101201c2105034020012005410176220620016a22072008200741306c6a28020020024b1b2101200520066b220541014b0d000b0b2008200141306c6a2802002002470d002013410371417f6a0e020208010b20044190026a41161093080c0a0b200441d0036a41286a200441a0026a41286a290300370300200441d0036a41206a200441a0026a41206a290300370300200441d0036a41186a200441a0026a41186a290300370300200441d0036a41106a200441a0026a41106a290300370300200441d0036a41086a200441a0026a41086a290300370300200420042903a0023703d00302402003450d0020044190026a41171093080c0a0b201c20014d0d012008200141306c6a220541186a2903002123200541106a29030021240240024020052d000822064101470d00200541286a2903002125200541206a2903002126200441186a20242023420a420010e708200441086a20262025420a420010e708200c20247d2227200c56200b20237d200c202454ad7d2224200b562024200b511b0d01202720267d2228202756202420257d2027202654ad7d220c202456200c2024511b0d0120102004290318220b7d2224201056200f200441186a41086a2903007d2010200b54ad7d220b200f56200b200f511b0d01200e2004290308220f7d2223200e56200d200441086a41086a2903007d200e200f54ad7d220e200d56200e200d511b450d070c010b200541096a2d00002107024002402005410a6a2d0000221441ff0171450d0041062105024002400240024002400240024020144107710e0700010203040506000b410021050c050b410121050c040b410221050c030b410321050c020b410421050c010b410521050b200441386a202342002005ad2226420010e808200441c8006a202442002026420010e808427f200441d0006a290300222620042903387c2225200429034042005220252026547222051b2125427f200429034820051b21260c010b200441286a20242023420a420010e708200441306a2903002125200429032821260b200c20247d2228200c56200b20237d200c202454ad7d220c200b56200c200b511b0d000240200741ff01710d00200e20267d2223200e56200d20257d200e202654ad7d220e200d56200e200d511b0d0120060d06200741ff01714102460d064200200e201d7d2023201b54ad7d220b2023201b7d220d202356200b200e56200b200e511b22051b210e4200200d20051b21234200200c201f7d2028201e54ad7d220b2028201e7d220d202856200b200c56200b200c511b22051b210c4200200d20051b21280c060b201020267d2224201056200f20257d2010202654ad7d220b200f56200b200f511b450d040b20044190026a411a1093080c090b201c20014d0d012008200141306c6a22052d00080d05200541096a2d000045201241ff0171410047460d05200541186a290300210b200541106a290300210c4180c09306210602400240024002400240024002402005410a6a2d00004107710e0700010203040506000b410021060c050b4180ce1821060c040b41809c3121060c030b4180b8e20021060c020b4180f0c40121060c010b4180e0890321060b200441e8026a22054200370300200441e0026a22074200370300200441d0026a41086a4200370300200442003703d002200441d0026a41d9fcc6004106108102200441d0036a4180f4cb0041061081022005200441d0036a41086a290000370300200720042900d003370300200441d8006a200441d0026a4120108e02200428025c410020042802581b200620116a22054f0d0502402003450d0020044190026a41171093080c090b2021200b2020200c562021200b562021200b511b22061b21212020200c20061b212020222005202220054b1b21220c050b2001201c41bcc1cb00103c000b2001201c41ccc1cb00103c000b024020060d00200741ff01714102460d004200200b201d7d2024201b54ad7d220f2024201b7d2210202456200f200b56200f200b511b22051b210b4200201020051b21244200200c201f7d2028201e54ad7d220f2028201e7d2210202856200f200c56200f200c511b22051b210c4200201020051b21280b200e2123200d210e0c010b20102124200f210b0b20044180036a200c370300200441d0026a41286a2028370300200441d0026a41206a200e370300200441d0026a41186a2023370300200441d0026a41106a200b37030020044188036a20042903d00337030020044190036a200441d8036a29030037030020044198036a200441d0036a41106a290300370300200441a0036a200441d0036a41186a290300370300200441a8036a200441d0036a41206a290300370300200441b0036a200441d0036a41286a290300370300200420243703d802200441003a00d002200441c0036a200210890520042802c803210620042802c003210520044100360288042004420137038004200441d0026a20044180046a10bc0520052006200428028004220720042802880410b2010240200428028404450d002007102e0b20042802c403450d002005102e0b201c20014d0d012008200141306c6a2205200541306a201c2001417f736a41306c10ea081a201c417f6a211c0b200441063a0090020c020b2001201c1046000b20042d00900222014106460d0020042004290091023703d003200420044198026a2800003600d70320090d01200a450d01200a41306c450d012008102e0c010b20044188036a202137030020044180036a2020370300200441d0026a41286a201f370300200441d0026a41206a201e370300200441d0026a41186a201d370300200441d0026a41106a201b37030020044190036a2022360200200441dc026a201c360200200441d0026a41086a200a36020020044194036a20042903e0013702002004419c036a200441e0016a41086a290300370200200441a4036a200441e0016a41106a290300370200200441ac036a200441e0016a41186a290300370200200441b4036a200441e0016a41206a290300370200200441bc036a200441e0016a41286a280200360200200420042f018c023b00d102200420083602d40220042004418c026a41026a2d00003a00d302200420093a00d00220042802d801210120042802d00121160240024020094102470d002016200110ff010c010b200441d0036a200441d0026a10c2042016200120042802d003220520042802d80310b20120042802d403450d002005102e0b024020090d00200a450d00200a41306c450d002008102e0b20042004290091023703d003200420044198026a2800003600d703410621010b024020042802d401450d002016102e0b200420042903d00337039001200420042800d7033600970141062105024020014106460d002000200429039001370001200041086a200428009701360000200121050b200020053a000020044190046a24000bf30201037f024002400240024002400240024020002d0000417f6a0e0c000606060106020304060605060b200041046a2802004102490d05200041106a2802002201450d05200041146a280200450d052001102e0f0b200041086a280200450d04200041046a280200102e0c040b200041046a2802000d032000410c6a2802002201450d03200141286c450d03200041086a280200102e0f0b200041046a2d00004102490d020240200041106a2802002201450d00200141d0006c2102200041086a28020041c4006a21010340024020012802002203450d00200341306c450d002001417c6a280200102e0b200141d0006a2101200241b07f6a22020d000b0b2000410c6a2802002201450d02200141d0006c450d022000280208102e0f0b200041086a2d00004101470d01200041146a28020041ffffff3f71450d01200041106a280200102e0f0b200041086a2d00000d00200041106a2802002201450d00200141306c450d002000410c6a280200102e0f0b0b130020004100360204200041d4e2cc003602000b13002000410a360204200041b4cccb003602000b3400200041d9fcc60036020420004100360200200041146a4110360200200041106a41dce6cb00360200200041086a42063702000b130020004106360204200041b883cc003602000b920101017f230041c0006b22022400200241386a41002903e8f846370300200241306a41002903e0f846370300200241286a41002903d8f846370300200241206a41002903d0f846370300200241186a41002903c8f846370300200241106a41002903c0f846370300200241086a41002903b8f846370300200241002903b0f84637030020002002108707200241c0006a24000b4c01017f230041106b220224002000410036020820004201370200200242c0f0f50b3703082000200241086a4108107420024280c2d72f3703082000200241086a41081074200241106a24000b4301027f230041106b2202240002404104102c22030d001036000b2000420437020420002003360200200241e01236020c20002002410c6a41041074200241106a24000b6101017f230041106b2202240020004100360208200042013702002002418080f0013602082000200241086a410410742002418080c00236020c20002002410c6a410410742002418080c0023602042000200241046a41041074200241106a24000b7701017f230041c0016b22022400200210a9032000410036020820004201370200200220022903003703b8012000200241b8016a41081074200220022903083703b8012000200241b8016a41081074200241106a200010a207200241c8006a200010a20720024180016a200010a207200241c0016a24000b8726040c7f0a7e037f0e7e230041f0036b22052400200541d0016a200010e505200541f0026a20052802d001220620052802d80110f402200541206a41086a2207200541f9026a290000370300200541206a41106a220820054181036a290000370300200541206a41186a220920054189036a290000370300200520052900f1023703204100210a024020052d00f0024101470d0020054190026a41186a200929030037030020054190026a41106a200829030037030020054190026a41086a200729030037030020052005290320370390024101210a0b024020052802d401450d002006102e0b0240200a450d00200541186a20054190026a41186a2206290300370300200541106a20054190026a41106a2207290300370300200541086a20054190026a41086a22082903003703002005200529039002370300200541c0016a200510d305200541f0026a20052802c001220920052802c80110e60520054198016a41086a220b200541f0026a41086a29030037030020054198016a41106a220c200541f0026a41106a29030037030020054198016a41186a220d200541f0026a41186a29030037030020082005419c036a2902003703002007200541a4036a2902003703002006200541ac036a29020037030020054190026a41206a220e200541b4036a29020037030020054190026a41286a220f200541bc036a29020037030020054190026a41306a2210200541c4036a280200360200200520052903f002370398012005200529029403370390020240200528029003220a450d00200541f8006a41186a200d290300370300200541f8006a41106a200c290300370300200541f8006a41086a200b290300370300200541d0016a41086a2008290300370300200541d0016a41106a2007290300370300200541d0016a41186a2006290300370300200541d0016a41206a200e290300370300200541d0016a41286a200f290300370300200541d0016a41306a2010280200360200200520052903980137037820052005290390023703d0010b024020052802c401450d002009102e0b200a450d00200541c4006a20052903d001370200200541206a41186a2206200541f8006a41186a290300370300200541206a41106a2207200541f8006a41106a290300370300200541206a41086a2208200541f8006a41086a290300370300200541cc006a200541d0016a41086a290300370200200541d4006a200541d0016a41106a290300370200200541dc006a200541d0016a41186a290300370200200541e4006a200541f0016a290300370200200541ec006a200541d0016a41286a290300370200200541f4006a20054180026a280200360200200520052903783703202005200a360240200542003703f80220054280c8afa0253703f00220082903002111200529032021120240024020072903002213200120132001542006290300221420025420142002511b22071b22152014200220071b22168450450d0020122117201121180c010b2006201420167d2013201554ad7d22193703002005201320157d22173703300240024020174280c8afa0255620194200522019501b450d0020152113201621140c010b200541386a420037030020054200370330201920027c201720017c2201201754ad7c21020b20054200201120147d2012201354ad7d2215201220137d2219201256201520115620152011511b22061b221837032820054200201920061b2217370320200220147d2001201354ad7d2102200120137d21010b02400240024002400240024002400240200541206a41286a280200220641186c0d00410021062005280248210a0c010b200641186c2108200641037441786a41037641016a210b41002106024003400240200a2903002213200120012013562002200a41086a220929030022145620022014511b22071b22152014200220071b221684500d00200a201320157d2217370300200a201420167d2013201554ad7d221937030802400240201720052903f002562019200541f0026a41086a29030022185620192018511b450d002001211920152113201621140c010b200a4200370308200a4200370300200220197c200120177c2219200154ad7c21020b200541206a41086a220742002007290300220120147d20052903202215201354ad7d2216201520137d2217201556201620015620162001511b22071b221837030020054200201720071b2217370320200220147d2019201354ad7d2102201920137d210120092903002114200a29030021130b20132014844200520d01200a41186a210a200641016a2106200841686a22080d000b200b21060b2005280248220a2006490d010b200541003602480240200a20066b220a450d0002402006450d00200528024022072007200641186c6a200a41186c10ea081a200541286a2903002118200529032021170b2005200a3602480b2012201758201120185820112018511b0d05201220177d2214201256201120187d2012201754ad7d221320115620132011511b210a20054190026a200010c802200541f0026a200528029002220620052802980210c90220054190036a290300210120054188036a290300211520054180036a290300211620052903f802211220052903f00221020240200528029402450d002006102e0b42002013200a1b211142002014200a1b21184200211320024201520d0342002119201821172011211a2012201584201620018484500d04200541f0026a41c8006a2108200541f0026a41086a211b20054190026a41306a211020054190026a41206a211c41002106200541f0026a41386a210f200541f0026a41106a210d200541d0016a41286a210c200541d0016a41186a211d02400340200520003602bc0120054190026a200010c802200541f0026a200528029002220a20052802980210c902200f2903002119200541f0026a41306a22072903002102200541f0026a41206a220e2903002116200d29030021132005290398032101200529038803211720052903f802211420052903b003211220052903f0022115200541c0016a41086a200841086a290300370300200520082903003703c0010240024020154201510d0042002112200541d0016a41386a4200370300200541d0016a41306a4200370300200c4200370300200541d0016a41206a4200370300201d4200370300200541d0016a41106a4200370300200541d0016a41086a4200370300200542003703d001420021014200210242002114420021130c010b200c2002370300200541d0016a41306a2019370300200520013703f001200520143703d0012005201237038802200520173703e001200520133703d801200520163703e8010b0240200528029402450d00200a102e0b0240024020142013844200520d00200120052903e00184200529038002842002201d29030084200541d0016a41386a290300848450450d00420021014100210a0c010b200541d0016a41106a2903002114200541d0016a41306a290300211e200c290300211f200541d0016a41206a290300212020052903d801211320052903d00121154201210120052903e80121024101210a0b024020014201522209450d004200211442002112420021204200211f4200211e4200210242002115420021130b201821162011211702402006450d004200200220137c201420157c2201201454ad7c221920014280c8afa02554ad7d221620014280b8d0df5a7c22172001562016201956200142ffc7afa025561b220b1b22012011201842002017200b1b221956201120015620112001511b220b1b211720192018200b1b21160b2013201720132015201656201320175620132017511b220b1b22197d201520162015200b1b221354ad7d2101201520137d211502400240201620137d221a201720197d2016201354ad7d221684500d00201120197d2018201354ad7d201620022014201a56200220165620022016511b220b1b22177d201820137d2221201a2014200b1b221654ad7d211a200220177d2014201654ad7d2102201720197c201620137c2213201654ad7c2119202120167d2117201420167d21140c010b201120197d2018201354ad7d211a201820137d21170b200541f0026a41286a220b201f370300200541f0026a41186a20023703002007201e37030020052020370390032005201437038003200520153703f002200520013703f8022009ad212002400240427f201520147c221620162015542209200120027c2009ad7c221620015420162001511b22091b221f42ffc7afa02556427f201620091b22164200522016501b0d0020222016201520148420012002848422025022071b21222023201f20071b2123420021142002420052ad21020c010b20072903002124200b2903002125200e2903002126200d2903002127200529038803212820052903f802212920052903f002212a4201211442002102410121072012212b0b20054190026a41c8006a201a37030020054190026a41386a201937030020054190026a41286a202237030020054190026a41106a2001370300200520173703d002200520133703c002200520233703b0022005201537039802200520023703a80220052020370390020240200a2014420152720d00200520003602f0022000200541f0026a10bd060c040b200a410173220a2014420151720d01200520003602f00202402000200541f0026a10be0641ff0171220a4102460d00200a0d04200541d8026a290300211a200541c8026a2903002119200541b8026a2903002122200541a0026a290300210120052903d002211720052903c002211320052903b0022123200529039802211520052903a802210220052903900221200c050b024020070d002005201c3602f002200541f0026a10cc020b200520103602f002200541f0026a10cc02200641016a22064102470d000b420021130c040b2014420152200a71450d010c020b2006200a41b4b3c000104d000b200541e0026a200010c802200541f0026a20052802e002220a20052802e802220610c90220052903f0022113200541c0016a41086a2207200841086a290300370300200520082903003703c0010240024020134201510d00200541f8006a41086a4200370300200542003703780c010b200541f8006a41086a2007290300370300200520052903c0013703780b024020144201510d004200212a420021294200212642002125420021244200212b42002127420021280b20082005290378370300200541a0036a202537030020054190036a2028370300200541f0026a41106a2029370300200541f0026a41386a2024370300200841086a200541f8006a41086a290300370300200520263703980320052027370388032005202a3703f8022005202b3703b003200542013703f002200a2006201b10c805024020052802e402450d00200a102e0b20054190026a41106a2903002101200541b8026a290300212220054190026a41386a2903002119200541d8026a290300211a200529039802211520052903b002212320052903c002211320052903d0022117200529039002212020052903a80221020b024020204201520d00200541a8036a2001370300200541a0036a2015370300200541f0026a41086a41003a0000200541f9026a200029000037000020054181036a200041086a29000037000020054189036a200041106a29000037000020054191036a200041186a290000370000200541033a00f002200541f0026a10fe010b02400240200250450d00420021140c010b200541f0026a41086a20052802bc01220a41086a290000370300200541f0026a41106a200a41106a290000370300200541f0026a41186a200a41186a2900003703002005200a2900003703f002420121140b20054198016a41186a200541f0026a41186a220a290300220237030020054198016a41106a200541f0026a41106a2206290300220137030020054198016a41086a200541f0026a41086a2903002215370300200520052903f002221637039801200541a0036a202237030020054198036a2207202337030020062015370300200a200137030020054190036a2002370300200520143703f002200520163703f802200541f0026a10d20420052903f002500d01200520073602900220054190026a10cc020c010b42002119201821172011211a0b2004427f2004290300221420137c22132013201454220a200441086a2206290300221320197c200aad7c221420135420142013511b220a1b3703002006427f2014200a1b37030002402017201a84500d00200342002003290300221320177d22142014201356200341086a220a2903002214201a7d2013201754ad7d221320145620132014511b22061b370300200a4200201320061b3703000b42f3e885db96cddbb320200541206a41386a2005290320200541206a41086a290300411f1085062005200541206a10d205200541f0026a41386a2011370300200541a0036a2018370300200541f0026a41086a41023a0000200541f9026a200029000037000020054181036a200041086a29000037000020054189036a200041106a29000037000020054191036a200041186a290000370000200541043a00f002200541f0026a10fe010b02402005280244220a450d00200a41186c450d002005280240102e0b200541d0006a28020041ffffffff0371450d00200528024c102e0b200541f0036a24000b130020004103360204200041d490cc003602000b0600200010150ba40301097f230041206b220224000240024020012802082203410c6c41046a2204417f4c0d00200128020021050240024020040d00410121060c010b2004102c2206450d020b20024100360208200220043602042002200636020020032002107602402003450d0020052003410c6c6a210720052104034020042802002106200441086a28020022082002107620022006200810742004410c6a22042007470d000b0b20022802042106200241186a2208200235020842208620022802002209ad84100c220441186a290000370300200241106a2207200441106a290000370300200241086a220a200441086a290000370300200220042900003703002004102e200041186a2008290300370000200041106a2007290300370000200041086a200a2903003700002000200229030037000002402006450d002009102e0b02402003450d002003410c6c21062005210403400240200441046a280200450d002004280200102e0b2004410c6a2104200641746a22060d000b0b0240200141046a2802002204450d002004410c6c450d002005102e0b200241206a24000f0b1038000b1036000b3b02017e017f0240024010292201422088a722020d0020004101360200410021020c010b20002001a73602000b20002002360208200020023602040b130020002002ad4220862001ad84102010da080b130020004107360204200041f4aacc003602000b3400200041b4c3cb0036020420004100360200200041146a4102360200200041106a41fcb6cc00360200200041086a42133702000b3400200041f4c2cc0036020420004100360200200041146a4101360200200041106a418cc3cc00360200200041086a42183702000bcf0403017f017e037f230041b0016b22032400024002402001200210062204422088a72201450d002001417f6a21050240024002402004a722062d00000e020001030b41002101200341003a0069200641016a21070240034020052001460d01200341c8006a20016a200720016a2d00003a00002003200141016a22023a00692002210120024121460d030c000b0b200141ff0171450d02200341003a00690c020b2005450d014100210202400240024020062d00010e03020100040b410221020c010b410121020b200341086a41186a200341c8006a41186a290000370300200341086a41106a200341c8006a41106a290000370300200341086a41086a200341c8006a41086a2900003703002003200329004837030841012105200341086a21010c020b200341f0006a41086a2201200341d1006a290000370300200341f0006a41106a2205200341d9006a290000370300200341f0006a41186a2207200341e1006a29000037030020032003290049370370200241ff017141204d0d0020032d00482102200341286a41186a20072903002204370300200341086a41086a2001290300370300200341086a41106a2005290300370300200341086a41186a20043703002003200329037037030841002105200341086a21010c010b41cae0cc00412e200341c8006a41f8e0cc004188e1cc00103e000b200020023a0001200020053a0000200041026a20012900003700002000410a6a200141086a290000370000200041126a200141106a2900003700002000411a6a200141186a2900003700002006102e200341b0016a24000b130020004105360204200041e4c6cc003602000bba0203027f027e037f230041206b22022400200241106a41086a2203200141086a28020036020020022001290200370310200241106a10bb070240024020032802002201410574418101490d00200041bdd8cc0036020420004101360200200041086a411d3602000c010b0240024020010d0042002104420021050c010b2002280210220341786a21062003200141027422016a417c6a280200210741002103200241086a21084200210442002105034020022007ad4200200341e0007110ed08200829030020057c2002290300220520047c2204200554ad7c210520014104460d01200341206a2103200620016a28020021072001417c6a21010c000b0b20004100360200200041106a2005370300200041086a20043703000b0240200228021441ffffffff0371450d002002280210102e0b200241206a24000bd003030a7f017e027f02400240024002400240200141086a2802002203200241086a2802002204200320044b1b220541016a22064101200641014b1b220741ffffffff03712007470d0020074102742206417f4c0d000240024020060d00410421080c010b200610322208450d020b20002008360200200041086a200736020020002006410276360204024020050d00410021000c050b2007417f6a21062004417f6a220920044b210a200741027420086a417c6a210b2002280200210c410021024200210d03404100210002402003417f6a220e20034b0d00410021002003200e20026b220f4d0d0041002100200f200e4b0d002001280200200f4102746a28020021000b4100210e0240200a0d002004200920026b220f4d0d00200f20094b0d00200c200f4102746a280200210e0b200720064d0d03200b200d2000ad7c200ead7c220d3e0200200b417c6a210b2006417f6a2106200d422088210d2005200241016a2202460d040c000b0b1038000b1036000b2006200741ecd8cc00103c000b200da721000b024020072005417f736a220620074f0d00200820064102746a20003602000240200141046a28020041ffffffff0371450d002001280200102e0b0f0b2006200741ecd8cc00103c000be30303047f017e057f230041106b22012400024002400240024002400240024020002802002202280200220341016a41004c0d002002200336020020002802042203280200220441016a41004c0d0120022903082105200320043602002000280208220441086a2802002206200028020c220728020022086b41016a220920064f0d024101200028021428020020086a6b22062000280210220841086a28020022006a220a20064f0d0302400240200542ffffffff0f560d00410021002005200428020020094102746a3502007e20032903084220862008280200200a4102746a35020084580d010b20022802000d052002410036020020022002290308427f7c370308200441086a2802002200200020072802006b22024d0d0620032802000d07200428020020024102746a3502002105200341003602002003200520032903087c370308410121000b200141106a240020000f0b41bcd9cc004118200141086a41d4d9cc0041f4d9cc00103e000b41bcd9cc004118200141086a41d4d9cc004184dacc00103e000b2009200641ccd7cc00103c000b200a200041ccd7cc00103c000b4194dacc004110200141086a41a4dacc0041b4dacc00103e000b2002200041ccd7cc00103c000b4194dacc004110200141086a41a4dacc0041c4dacc00103e000b1c002001280218419eeacc00410f2001411c6a28020028020c1100000b5601017f4104210502400240024002400240200041ff0171417f6a0e050001020304000b410021050c030b410121050c020b410221050c010b410321050b20052002ad4220862001ad842004ad4220862003ad8410010bbb0101047f230041206b22022400024002402001422088a722030d002002200336020c200241013602080c010b2002200336020c20022001a7220436020820042d0000210520022003417f6a36020c2002200441016a360208410021030240024020050e020100020b200241106a200241086a10db0820022802102203450d01200229021421010b20002001370204200020033602002004102e200241206a24000f0b41cae0cc00412e200241106a41f8e0cc004188e1cc00103e000bed0102047f017e230041106b22022400200241086a200110ab01024002400240024002402002280208450d00200041003602000c010b024020012802042203200228020c2204490d002004417f4c0d020240024020040d00410121050c010b200410322205450d04200128020421030b024020032004490d0020052001280200200410e9082103200128020422052004490d0520002004ad2206422086200684370204200020033602002001200520046b3602042001200128020020046a3602000c020b2005102e0b200041003602000b200241106a24000f0b1038000b1036000b2004200541b8b2c0001056000bec0101047f230041106b22022400024002400240200128020022030d00410121040c010b0240200141086a28020041056a2204417f4c0d0020040d0141012105410021040c020b1038000b2004102c22050d001036000b2002410036020820022004360204200220053602000240024020030d00200241003a000f20022002410f6a410110740c010b200241013a000f20022002410f6a41011074200141086a28020022042002107620022003200410740b20002002290300370204200041013602002000410c6a20022802082204360200200041106a2004ad422086200235020084370300200241106a24000bb10301047f230041c0006b22022400200028020021034101210002402001280218418c9dc000410c2001411c6a28020028020c1100000d0002400240200328020822000d0020032802002200200328020428020c11070042f4f99ee6eea3aaf9fe00520d012002200036020c2002411036021420022002410c6a36021020012802182104200128021c2105410121002002413c6a41013602002002420237022c200241989dc0003602282002200241106a36023820042005200241286a103d0d020c010b2002200036020c2002411136021420022002410c6a36021020012802182104200128021c2105410121002002413c6a41013602002002420237022c200241989dc0003602282002200241106a36023820042005200241286a103d0d010b200328020c2100200241106a41146a4101360200200241106a410c6a410136020020022000410c6a3602202002200041086a360218200241043602142002200036021020012802182100200128021c2101200241286a41146a41033602002002420337022c200241a89dc0003602282002200241106a36023820002001200241286a103d21000b200241c0006a240020000b06002000100d0b06002000100e0be50102037f017e230041206b22022400024002400240200041046a2802002203200028020822046b20014f0d00200420016a22012004490d02200341017422042001200420014b1b22014104200141044b1bad420c7e2205422088a74541027421012005a721040240024020030d00200241003602100c010b200241186a410436020020022003410c6c360214200220002802003602100b200220042001200241106a107d200241086a280200210120022802004101460d0120002002280204360200200041046a2001410c6e3602000b200241206a24000f0b2001450d001036000b1038000b1c002001280218419eeacc00410f2001411c6a28020028020c1100000b1c002001280218419eeacc00410f2001411c6a28020028020c1100000bc00201057f230041106b22022400024002400240024020002d002c4101710d0002400240200028020022034125490d002000410c6a22042802002105200041086a28020021060c010b200041056a21062003210520002104412421030b024020052003470d0020022000410110fc06024020022802004101470d00200241086a2802000d0441d0f0cc00411141e4f0cc001039000b2000410c6a22042802002105200041086a28020021060b200620056a20014104743a00002004200428020041016a3602000c010b02400240200028020022044125490d002000410c6a2802002104200041086a28020021050c010b200041056a21050b2005450d022004450d02200420056a417f6a220420042d00002001723a00000b2000200028022c41016a36022c200241106a24000f0b1036000b4198eccc00413a41d4eccc00105d000b5801017e02400240200341c00071450d0020022003413f71ad882101420021020c010b2003450d002002410020036b413f71ad8620012003413f71ad220488842101200220048821020b20002001370300200020023703080baa0604017f017e017f057e230041206b22052400024002400240024002400240024002402004500d00420021062001200354200220045420022004511b0d052002500d05200541106a20032004200479a7200279a76b220741ff007110ed0842012007413f71ad862108200541186a29030021092005290310210a4200210603402001200a7d210b0240200220097d2001200a54ad7d220c4200530d0020062008842106200b20035a200c20045a200c2004511b450d03200b2101200c21020b200a4201882009423f8684210a20084201882108200942018821090c000b0b4200210c024020024200520d0020012001200380220620037e7d21010c060b0240200220035a0d0020052003200441c000200279a7200379a76b22076b413f20071b220741ff007110ed0842012007413f71ad86210c200541086a290300210a200529030021094200210b034002402002200a7d2001200954ad7d22084200530d00200120097d2101200c200b84210b20084200510d04200821020b2009420188200a423f86842109200c420188210c200a420188210a0c000b0b20022003510d0320022002200380220820037e7d210c0240200342ffffffff0f560d00200c422086200142208884220a200a200380220a20037e7d422086200142ffffffff0f838422092009200380220920037e7d2101200a4220862009842106200a42208820088421084200210c0c070b0240200120035a200c20045a200c2004511b0d00420021060c070b2004423f86200342018884210a2003423f862109428080808080808080807f21024200210403400240200c200a7d2001200954ad7d220b4200530d00200120097d210120022004842104200b4200510d04200b210c0b2009420188200a423f8684210920024201882102200a420188210a0c000b0b42002108200b21010c050b2001200380220a200b8421062001200a20037e7d21014200210c0c030b2001200380220a20048421062001200a20037e7d21014200210c0c030b20012001200280220620027e7d21014200210c420121080c020b2002210c0b420021080b2000200137031020002006370300200041186a200c37030020002008370308200541206a24000b3c01017f230041206b220524002005200120022003200410e508200529031021012000200541186a29030037030820002001370300200541206a24000b3c01017f230041206b220524002005200120022003200410e508200529030021012000200541086a29030037030820002001370300200541206a24000b6e01077e2000200342ffffffff0f832205200142208822067e220720034220882208200142ffffffff0f8322097e7c220a422086220b200520097e7c22053703002000200a200754ad422086200a42208884200820067e7c2005200b54ad7c200420017e200320027e7c7c3703080b3601017f02402002450d00200021030340200320012d00003a0000200141016a2101200341016a21032002417f6a22020d000b0b20000b6f01017f02400240200020016b20024f0d002001417f6a21012000417f6a21030340200320026a200120026a2d00003a00002002417f6a22020d000c020b0b2002450d00200021030340200320012d00003a0000200141016a2101200341016a21032002417f6a22020d000b0b20000b2c01017f02402002450d00200021030340200320013a0000200341016a21032002417f6a22020d000b0b20000b4a01037f4100210302402002450d000240034020002d0000220420012d00002205470d01200041016a2100200141016a21012002417f6a2202450d020c000b0b200420056b21030b20030b5801017e02400240200341c00071450d0020012003413f71ad862102420021010c010b2003450d0020022003413f71ad2204862001410020036b413f71ad88842102200120048621010b20002001370300200020023703080b0bfef50c0200418080c0000be7f50c100010001c00000018020000050000006c6962726172792f616c6c6f632f7372632f7261775f7665632e7273c00010004b0000005a010000130000001200000004000000040000001300000014000000150000006120666f726d617474696e6720747261697420696d706c656d656e746174696f6e2072657475726e656420616e206572726f720012000000000000000100000016000000a800100018000000420200001c0000006c6962726172792f616c6c6f632f7372632f666d742e72732f72757374632f653337613133636333353934303034363633373338626431386438313030653664623936363663662f6c6962726172792f636f72652f7372632f666d742f6d6f642e72730050011000160000006601100016000000780f100001000000340110001c000000ee0400000d0000006c6962726172792f616c6c6f632f7372632f7665632f6d6f642e7273737761705f72656d6f766520696e6465782028697320292073686f756c64206265203c206c656e2028697320a401100014000000b801100017000000780f100001000000340110001c000000150500000d000000696e73657274696f6e20696e6465782028697320292073686f756c64206265203c3d206c656e202869732000f8011000120000006601100016000000780f100001000000340110001c000000450500000d00000072656d6f76616c20696e646578202869732000002c021000200000004c0210001200000012000000000000000100000017000000696e646578206f7574206f6620626f756e64733a20746865206c656e20697320206275742074686520696e64657820697320303030313032303330343035303630373038303931303131313231333134313531363137313831393230323132323233323432353236323732383239333033313332333333343335333633373338333934303431343234333434343534363437343834393530353135323533353435353536353735383539363036313632363336343635363636373638363937303731373237333734373537363737373837393830383138323833383438353836383738383839393039313932393339343935393639373938393900003803100010000000480310002200000072616e676520656e6420696e64657820206f7574206f662072616e676520666f7220736c696365206f66206c656e677468205b2e2e2e5d00d00310000b000000da0d1000160000000f04100001000000b80d10000e000000c60d100004000000ca0d1000100000000f04100001000000d00310000b000000db03100026000000010410000800000009041000060000000f041000010000006279746520696e64657820206973206e6f742061206368617220626f756e646172793b20697420697320696e7369646520202862797465732029206f6620606018041000020000002e2e0000520410001b0000006500000014000000307800004004100012000000480310002200000072616e676520737461727420696e646578206c6962726172792f636f72652f7372632f666d742f6e756d2e727300010305050606030706080809110a1c0b190c140d100e0d0f0410031212130916011705180219031a071c021d011f1620032b032c022d0b2e01300331023201a702a902aa04ab08fa02fb05fd04fe03ff0900d6091000250000000a0000001c000000ad78798b8da23057588b8c901c1ddd0e0f4b4cfbfc2e2f3f5c5d5fb5e2848d8e9192a9b1babbc5c6c9cadee4e5ff00041112293134373a3b3d494a5d848e92a9b1b4babbc6cacecfe4e500040d0e11122931343a3b4546494a5e646584919b9dc9cecf0d112945495764658d91a9b4babbc5c9dfe4e5f00d11454964658084b2bcbebfd5d7f0f183858ba4a6bebfc5c7cecfdadb4898bdcdc6cecf494e4f57595e5f898e8fb1b6b7bfc1c6c7d71116175b5cf6f7feff800d6d71dedf0e0f1f6e6f1c1d5f7d7eaeafbbbcfa16171e1f46474e4f585a5c5e7e7fb5c5d4d5dcf0f1f572738f7475962f5f262e2fa7afb7bfc7cfd7df9a409798308f1fc0c1ceff4e4f5a5b07080f10272feeef6e6f373d3f42459091feff536775c8c9d0d1d8d9e7feff00205f2282df048244081b04061181ac0e80ab35280b80e003190801042f043404070301070607110a500f1207550703041c0a090308030703020303030c0405030b06010e15053a0311070605100757070207150d500443032d03010411060f0c3a041d255f206d046a2580c80582b0031a0682fd035907150b1709140c140c6a060a061a0659072b05460a2c040c040103310b2c041a060b0380ac060a06213f4c042d0374083c030f033c0738082b0582ff1118082f112d032010210f808c048297190b158894052f053b07020e180980b32d740c80d61a0c0580ff0580df0cee0d03848d033709815c1480b80880cb2a38030a06380846080c06740b1e035a0459098083181c0a16094c04808a06aba40c170431a10481da26070c050580a511816d1078282a064c04808d0480be031b030f0d00d6091000250000001a000000360000000006010103010402080809020a050b020e041001110212051311140115021702190d1c051d0824016a036b02bc02d102d40cd509d602d702da01e005e102e802ee20f004f802f902fa02fb010c273b3e4e4f8f9e9e9f060709363d3e56f3d0d1041418363756577faaaeafbd35e01287898e9e040d0e11122931343a4546494a4e4f64655cb6b71b1c07080a0b141736393aa8a9d8d909379091a8070a3b3e66698f926f5feeef5a629a9b2728559da0a1a3a4a7a8adbabcc4060b0c151d3a3f4551a6a7cccda007191a22253e3fc5c604202325262833383a484a4c50535556585a5c5e606365666b73787d7f8aa4aaafb0c0d0aeaf79cc6e6f935e227b0503042d036603012f2e80821d03310f1c0424091e052b0544040e2a80aa06240424042808340b018090813709160a088098390363080930160521031b05014038044b052f040a070907402027040c0936033a051a07040c07504937330d33072e080a8126524e28082a561c1417094e041e0f430e19070a0648082709750b3f412a063b050a0651060105100305808b621e48080a80a65e22450b0a060d1339070a362c041080c03c64530c48090a46451b4808531d398107460a1d03474937030e080a0639070a81361980b7010f320d839b66750b80c48abc842f8fd18247a1b98239072a040260260a460a28051382b05b654b0439071140050b020e97f80884d62a09a2f7811f3103110408818c89046b050d03090710936080f60a73086e1746809a140c570919808781470385420f1585502b80d52d031a040281703a0501850080d7294c040a04028311444c3d80c23c06010455051b3402810e2c04640c560a80ae381d0d2c040907020e06809a83d8080d030d03740c59070c140c0438080a062808224e81540c15030305070919070709030d072980cb250a84066c6962726172792f636f72652f7372632f756e69636f64652f7072696e7461626c652e7273000c0a100016000000220a10000d000000736c69636520696e64657820737461727473206174202062757420656e647320617420000003000083042000910560005d13a0001217a01e0c20e01eef2c202b2a30a02b6fa6602c02a8e02c1efbe02d00fea0359effe035fd016136010aa136240d6137ab0ee1382f182139301c6146f31ea14af06a614e4f6fa14e9dbc214f65d1e14f00da215000e0e15130e16153ece2a154d0e8e15420002e55f001bf55900d100028000000520000003e00000000700007002d0101010201020101480b30151001650702060202010423011e1b5b0b3a09090118040109010301052b03770f0120370101010408040103070a021d013a0101010204080109010a021a010202390104020402020303011e0203010b0239010405010204011402160601013a0101020104080107030a021e013b0101010c0109012801030139030503010407020b021d013a01020102010301050207020b021c02390201010204080109010a021d0148010401020301010801510102070c08620102090b064a021b0101010101370e01050102050b0124090166040106010202021902040310040d01020206010f01000300031d031d021e02400201070801020b09012d03770222017603040209010603db0202013a010107010101010208060a020130113f0430070101050128090c0220040202010338010102030101033a0802029803010d0107040106010302c63a01050001c32100038d016020000669020004010a200250020001030104011902050197021a120d012608190b2e0330010204020227014306020202020c0108012f01330101030202050201012a020801ee010201040100010010101000020001e201950500030102050428030401a50200040002990bb001360f3803310402024503240501083e010c0234090a0402015f03020101020601a0010308150239020101010116010e070305c308020301011701510102060101020101020102eb010204060201021b025508020101026a0101010206010165030204010500090102f5010a0201010401900402020401200a280602040801090602032e0d010200070106010152160207010201027a060301010201070101480203010101000200053b0700013f0451010002000101030405080802071e0494030037043208010e011605010f000701110207010201050007000400076d07006080f000000000900d1000280000004b00000028000000900d10002800000057000000160000006c6962726172792f636f72652f7372632f756e69636f64652f756e69636f64655f646174612e7273626567696e203c3d20656e642028203c3d2029207768656e20736c6963696e672060206973206f7574206f6620626f756e6473206f6620603d3d00003c0e100019000000550e100012000000670e10000c0000000f041000010000003c0e100019000000550e100012000000670e10000c00000020311300020000000f04100001000000617373657274696f6e206661696c65643a2060286c6566742020726967687429600a20206c6566743a2060602c0a2072696768743a2060426f72726f774572726f72426f72726f774d75744572726f7270616e69636b656420617420c10e100001000000c20e1000030000005431130000000000c00e100001000000c00e1000010000003a27272c2020202020000000ec0e1000200000003200000021000000ec0e10002000000033000000120000006c6962726172792f636f72652f7372632f666d742f6275696c646572732e72731c0f1000200000005a000000050000006c6962726172792f636f72652f7372632f736c6963652f6d656d6368722e72732c200000120000000c0000000400000018000000190000001a0000002c0a00001200000004000000040000001b0000001c0000001d00000028280a2c290a5d617373657274696f6e206661696c65643a202a63757272203e20313900520410001b000000e6010000050000005b000000cc0f10001b0000001308000016000000cc0f10001b0000000c0800001e0000006c6962726172792f636f72652f7372632f666d742f6d6f642e727330620001021200000001000000010000001e0000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f73797374656d2f7372632f6c696d6974732e72734275696c6465722066696e6973686564207769746820606275696c645f6f725f70616e6963603b205468652070616e69632069732065787065637465642069662072756e74696d65207765696768747320617265206e6f7420636f727265637400fc0f100057000000aa01000016000000543113000000000000000000ffffffff00000000010000000000000082800000000000008a8000000000008000800080000000808b800000000000000100008000000000818000800000008009800000000000808a00000000000000880000000000000009800080000000000a000080000000008b800080000000008b0000000000008089800000000000800380000000000080028000000000008080000000000000800a800000000000000a0000800000008081800080000000808080000000000080010000800000000008800080000000801200000004000000040000001f00000001a8010001605354524f424576312e302e320000cc1110004f000000680000000d0000002f636172676f2d686f6d652f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f6d65726c696e2d322e302e302f7372632f7374726f62652e727300f2121000190000000b1310001600000000000000200000000400000002000000000000000200000000000000030000000100000020000000040000000200000000000000020000000000000003000000cc1110004f000000880000000d000000b41210003e000000cc1110004f0000009100000009000000cc1110004f0000005e00000009000000cc1110004f0000005f00000009000000596f75207573656420746865205420666c61672c207768696368207468697320696d706c656d656e746174696f6e20646f65736e277420737570706f7274596f7520747269656420746f20636f6e74696e7565206f702020627574206368616e67656420666c61677320746f20000000cc1110004f0000007c00000015000000cc1110004f0000007d0000000d0000004661696c656420746f206465636f646520636f6d70616374207533322061743a496e76616c6964526f756e6457726f6e6757696e6e6572436f756e74536e617073686f74556e617661696c61626c654e706f73456c656374696f6e0012000000040000000400000020000000496e76616c6964566f7465496e76616c6964566f746572496e76616c696457696e6e6572496e76616c696453636f726500000000641410000e00000000000000741410000100000000000000000000007c141000010000000000000000000000841410000600000000000000543113000000000000000000000000008c141000010000000000000000000000941410000700000000000000543113000000000000000000000000009c14100001000000000000004e6577417574686f7269746965730000291510000d000000f3141000360000005061757365640000cc14100027000000526573756d656400a4141000280000002043757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e2043757272656e7420617574686f726974792073657420686173206265656e207061757365642e204e657720617574686f726974792073657420686173206265656e206170706c6965642e205c5b617574686f726974795f7365745c5d417574686f726974794c69737400002813130056000000bd0000002e000000000000007415100007000000000000007c1510000300000000000000000000009415100004000000000000004f6666656e636500c248110004000000c64811000e000000a1fb120004000000b41510005500000009161000530000005c16100046000000a21610001d00000020546865726520697320616e206f6666656e6365207265706f72746564206f662074686520676976656e20606b696e64602068617070656e656420617420746865206073657373696f6e5f696e6465786020616e6420286b696e642d7370656369666963292074696d6520736c6f742e2054686973206576656e74206973206e6f74206465706f736974656420666f72206475706c696361746520736c61736865732e206c61737420656c656d656e7420696e64696361746573206f6620746865206f6666656e636520776173206170706c69656420287472756529206f7220717565756564202866616c736529205c5b6b696e642c2074696d65736c6f742c206170706c6965645c5d2e53746f72656452616e6765000000000000f81610000a0000000000000028b111000100000000000000000000000417100002000000000000004e657753657373696f6e000014171000590000006d17100022000000204e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e7420697320746865205c5b73657373696f6e5f696e6465785c5d2c206e6f742074686520626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e74696d737461703054696d657374616d7020696e686572656e742064617461206973206e6f742070726f76696465642e496e76616c69642074696d657374616d7020696e686572656e74206461746120656e636f64696e672e000000004018100010000000000000005018100002000000000000000000000060181000020000000000000000000000701810000e00000000000000543113000000000000000000000000008018100001000000000000004261746368496e746572727570746564cbed120003000000113513000d000000bb1810005600000011191000240000004261746368436f6d706c6574656400008818100033000000204261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e204261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061732077656c6c20617320746865206572726f722e205c5b696e6465782c206572726f725c5d000000481910005a00000067000000120000002f636172676f2d686f6d652f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d322e302e302f7372632f636f6465632e7273436f646563206572726f724572726f720000c41910004c00000076060000240000002f72757374632f653337613133636333353934303034363633373338626431386438313030653664623936363663662f6c6962726172792f616c6c6f632f7372632f7665632f6d6f642e727300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000100000021000000647c1200660000005c0000001f00000056524648617368565246526573756c747672662d696e7672662d6f7574436865636b547856657273696f6e436865636b47656e65736973436865636b4d6f7274616c697479000000081c10005a000000af050000350000002f72757374632f653337613133636333353934303034363633373338626431386438313030653664623936363663662f6c6962726172792f616c6c6f632f7372632f636f6c6c656374696f6e732f62747265652f6d61702e7273627450656e64696e675061796f7574496e76616c6964466565496e76616c696456616c75655265717569726543757261746f72556e657870656374656453746174757300000000000000341e10000e00000000000000441e1000020000000000000000000000741e10000c0000000000000000000000d41e10000e00000000000000e41e1000010000000000000000000000fc1e10000800000000000000000000003c1f10000f000000000000004c1f1000030000000000000000000000941f1000070000000000000000000000cc1f10001000000000000000e41e1000010000000000000000000000dc1f10001200000000000000000000006c2010000e00000000000000e41e10000100000000000000000000007c201000080000000000000000000000bc2010000c00000000000000c8201000020000000000000000000000f82010000a0000000000000000000000482110000c00000000000000e41e1000010000000000000000000000542110000900000000000000000000009c2110000c00000000000000e41e1000010000000000000000000000a82110000a0000000000000000000000f821100014000000000000000c2210000200000000000000000000003c2210000a0000000000000070726f706f73655f626f756e747900000000000048b6120005000000000000004db6120015000000000000002d2b10000b0000000000000042ec120007000000d42910001600000054311300000000006c0e1300340000005431130000000000c0ea110055000000ea291000550000003f2a10001a0000005431130000000000592a10003f000000982a10001a000000b22a10004a000000fc2a100031000000617070726f76655f626f756e74790000000000004623100009000000000000004f231000140000007c291000580000001f0211002b00000054311300000000004a0211002c0000005431130000000000f2eb12000b000000638711000800000036ec12000c00000070726f706f73655f63757261746f7200000000004623100009000000000000004f231000140000000000000075291000070000000000000085fc11002300000000000000e5ca100003000000000000004db6120015000000502910002500000054311300000000004a0211002c0000005431130000000000f2eb12000b000000638711000800000036ec12000c000000756e61737369676e5f63757261746f724c2610002000000054311300000000006c261000480000005431130000000000b42610005a0000000e2710004300000054311300000000005127100059000000aa27100058000000022810004e00000054311300000000005028100058000000a828100059000000012910004f0000005431130000000000f2eb12000b000000638711000800000036ec12000c0000006163636570745f63757261746f720000b625100026000000dc2510004b000000543113000000000027261000250000005431130000000000f2eb12000b000000638711000800000036ec12000c00000061776172645f626f756e7479000000004623100009000000000000004f2310001400000000000000b80411000b0000000000000085fc110023000000e6241000660000005431130000000000b82210004600000054311300000000004c251000230000006f251000470000005431130000000000f2eb12000b000000638711000800000036ec12000c000000636c61696d5f626f756e74793d2410003c0000005431130000000000792410004a0000005431130000000000c3241000230000005431130000000000f2eb12000b000000638711000800000036ec12000c000000636c6f73655f626f756e7479632310004f000000b2231000340000005431130000000000e623100033000000543113000000000019241000240000005431130000000000f2eb12000b000000638711000800000036ec12000c000000657874656e645f626f756e74795f657870697279000000004623100009000000000000004f231000140000000000000006f31200070000000000000042ec1200070000008c2210002c0000005431130000000000b8221000460000005431130000000000fe2210002400000022231000240000005431130000000000f2eb12000b000000638711000800000036ec12000c00000020457874656e6420746865206578706972792074696d65206f6620616e2061637469766520626f756e74792e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265207468652063757261746f72206f66207468697320626f756e74792e202d2060626f756e74795f6964603a20426f756e747920494420746f20657874656e642e202d206072656d61726b603a206164646974696f6e616c20696e666f726d6174696f6e2e626f756e74795f6964436f6d706163743c426f756e7479496e6465783e2043616e63656c20612070726f706f736564206f722061637469766520626f756e74792e20416c6c207468652066756e64732077696c6c2062652073656e7420746f20747265617375727920616e64207468652063757261746f72206465706f7369742077696c6c20626520756e726573657276656420696620706f737369626c652e204f6e6c792060543a3a52656a6563744f726967696e602069732061626c6520746f2063616e63656c206120626f756e74792e202d2060626f756e74795f6964603a20426f756e747920494420746f2063616e63656c2e20436c61696d20746865207061796f75742066726f6d20616e206177617264656420626f756e7479206166746572207061796f75742064656c61792e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265207468652062656e6566696369617279206f66207468697320626f756e74792e202d2060626f756e74795f6964603a20426f756e747920494420746f20636c61696d2e20417761726420626f756e747920746f20612062656e6566696369617279206163636f756e742e205468652062656e65666963696172792077696c6c2062652061626c6520746f20636c61696d207468652066756e647320616674657220612064656c61792e202d2060626f756e74795f6964603a20426f756e747920494420746f2061776172642e202d206062656e6566696369617279603a205468652062656e6566696369617279206163636f756e742077686f6d2077696c6c207265636569766520746865207061796f75742e20416363657074207468652063757261746f7220726f6c6520666f72206120626f756e74792e2041206465706f7369742077696c6c2062652072657365727665642066726f6d2063757261746f7220616e6420726566756e642075706f6e207375636365737366756c207061796f75742e204d6179206f6e6c792062652063616c6c65642066726f6d207468652063757261746f722e20556e61737369676e2063757261746f722066726f6d206120626f756e74792e20546869732066756e6374696f6e2063616e206f6e6c792062652063616c6c656420627920746865206052656a6563744f726967696e602061207369676e6564206f726967696e2e20496620746869732066756e6374696f6e2069732063616c6c656420627920746865206052656a6563744f726967696e602c20776520617373756d652074686174207468652063757261746f72206973206d616c6963696f7573206f7220696e6163746976652e204173206120726573756c742c2077652077696c6c20736c617368207468652063757261746f72207768656e20706f737369626c652e20496620746865206f726967696e206973207468652063757261746f722c2077652074616b6520746869732061732061207369676e20746865792061726520756e61626c6520746f20646f207468656972206a6f6220616e6420746865792077696c6c696e676c7920676976652075702e20576520636f756c6420736c617368207468656d2c2062757420666f72206e6f7720776520616c6c6f77207468656d20746f207265636f766572207468656972206465706f73697420616e64206578697420776974686f75742069737375652e20285765206d61792077616e7420746f206368616e67652074686973206966206974206973206162757365642e292046696e616c6c792c20746865206f726967696e2063616e20626520616e796f6e6520696620616e64206f6e6c79206966207468652063757261746f722069732022696e616374697665222e205468697320616c6c6f777320616e796f6e6520696e2074686520636f6d6d756e69747920746f2063616c6c206f7574207468617420612063757261746f72206973206e6f7420646f696e67207468656972206475652064696c6967656e63652c20616e642077652073686f756c64207069636b2061206e65772063757261746f722e20496e20746869732063617365207468652063757261746f722073686f756c6420616c736f20626520736c61736865642e2041737369676e20612063757261746f7220746f20612066756e64656420626f756e74792e63757261746f7220417070726f7665206120626f756e74792070726f706f73616c2e2041742061206c617465722074696d652c2074686520626f756e74792077696c6c2062652066756e64656420616e64206265636f6d65206163746976652050726f706f73652061206e657720626f756e74792e2060446174614465706f736974506572427974656020666f722065616368206279746520696e2060726561736f6e602e2049742077696c6c20626520756e72657365727665642075706f6e20617070726f76616c2c206f7220736c6173686564207768656e2072656a65637465642e202d206063757261746f72603a205468652063757261746f72206163636f756e742077686f6d2077696c6c206d616e616765207468697320626f756e74792e202d2060666565603a205468652063757261746f72206665652e202d206076616c7565603a2054686520746f74616c207061796d656e7420616d6f756e74206f66207468697320626f756e74792c2063757261746f722066656520696e636c756465642e202d20606465736372697074696f6e603a20546865206465736372697074696f6e206f66207468697320626f756e74792e6465736372697074696f6e00000000982c10000b0000000000000000000000a32c10000b0000000000000000000000000000000000000000000000000000000000000054311300b02c10000000000000000000c02c1000010000000000000001000000000000001dbf1100080000000105000000000000a32c10000b00000000000000c82c1000320000000000000000000000000000000000000054311300fc2c100000000000000000000c2d100001000000000000000000000000000000142d1000120000000105000000000000a32c10000b0000000000000042ec1200070000000000000000000000000000000000000054311300282d10000000000000000000382d100001000000000000000000000000000000402d10000f00000000000000000000004f2d1000100000000000000000000000000000000000000000000000000000000000000054311300602d10000000000000000000702d1000010000000000000001000000426f756e7479436f756e74426f756e7479496e646578000012000000000000000100000022000000f12d100030000000426f756e74793c543a3a4163636f756e7449642c2042616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e000012000000000000000100000023000000d32d10001e000000426f756e74794465736372697074696f6e73000012000000000000000100000023000000b32d100020000000426f756e7479417070726f76616c735665633c426f756e7479496e6465783e0012000000000000000100000024000000782d10003b00000020426f756e747920696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f74207965742066756e6465642e20546865206465736372697074696f6e206f66206561636820626f756e74792e20426f756e7469657320746861742068617665206265656e206d6164652e204e756d626572206f6620626f756e74792070726f706f73616c7320746861742068617665206265656e206d6164652e000000000000000cf01100120000000000000057a912000c0000000000000054311300ac2f10000000000000000000bc2f1000010000000000000000000000c42f1000110000000000000057a912000c0000000000000054311300d82f10000000000000000000e82f1000010000000000000000000000f02f10001800000000000000a9f912000e000000000000005431130008301000000000000000000018301000010000000000000000000000203010001200000000000000a9f912000e0000000000000054311300343010000000000000000000443010000100000000000000000000004c3010001400000000000000fc0711000700000000000000543113006030100000000000000000007030100001000000000000000000000078301000120000000000000057a912000c00000000000000543113008c30100000000000000000009c30100001000000000000000000000038f011001300000000000000cbed1200030000000000000054311300a430100000000000000000005cf01100010000000000000012000000000000000100000025000000d63110003f000000426f756e74794465706f73697442617365000000120000000000000001000000260000009c3110003a000000426f756e74794465706f7369745061796f757444656c6179120000000000000001000000270000004631100056000000426f756e7479557064617465506572696f640000120000000000000001000000280000002b3110001b000000426f756e747943757261746f724465706f73697412000000000000000100000029000000d03010005b000000426f756e747956616c75654d696e696d756d00001200000000000000010000002a000000b43010001c0000001200000000000000010000002b000000204d696e696d756d2076616c756520666f72206120626f756e74792e2050657263656e74616765206f66207468652063757261746f722066656520746861742077696c6c20626520726573657276656420757066726f6e74206173206465706f73697420666f7220626f756e74792063757261746f722e20426f756e7479206475726174696f6e20696e20626c6f636b732e205468652064656c617920706572696f6420666f72207768696368206120626f756e74792062656e6566696369617279206e65656420746f2077616974206265666f726520636c61696d20746865207061796f75742e2054686520616d6f756e742068656c64206f6e206465706f73697420666f7220706c6163696e67206120626f756e74792070726f706f73616c2e2054686520616d6f756e742068656c64206f6e206465706f7369742070657220627974652077697468696e20626f756e7479206465736372697074696f6e2e000000000000004c3310000e000000000000005c331000010000000000000000000000643310000100000000000000000000006c3310000e000000000000007c3310000200000000000000000000008c3310000100000000000000000000009433100012000000000000005c331000010000000000000000000000a8331000010000000000000000000000b03310000d00000000000000c0331000020000000000000000000000d0331000010000000000000000000000d83310000d00000000000000e833100003000000000000000000000000341000010000000000000000000000083410000e000000000000005c33100001000000000000000000000018341000010000000000000000000000203410000e000000000000005c331000010000000000000000000000303410000100000000000000426f756e747950726f706f7365640000a32c10000b0000007d3510001f000000426f756e747952656a65637465640000a32c10000b000000d5d11200070000003935100044000000426f756e7479426563616d6541637469766500000035100039000000426f756e747941776172646564000000a32c10000b00000079e5120009000000c33410003d000000426f756e7479436c61696d6564000000a32c10000b000000d5d112000700000079e51200090000008034100043000000426f756e747943616e63656c656400005f34100021000000426f756e7479457874656e64656400003834100027000000204120626f756e74792065787069727920697320657874656e6465642e205c5b696e6465785c5d204120626f756e74792069732063616e63656c6c65642e205c5b696e6465785c5d204120626f756e747920697320636c61696d65642062792062656e65666963696172792e205c5b696e6465782c207061796f75742c2062656e65666963696172795c5d204120626f756e7479206973206177617264656420746f20612062656e65666963696172792e205c5b696e6465782c2062656e65666963696172795c5d204120626f756e74792070726f706f73616c2069732066756e64656420616e6420626563616d65206163746976652e205c5b696e6465785c5d204120626f756e74792070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e205c5b696e6465782c20626f6e645c5d204e657720626f756e74792070726f706f73616c2e205c5b696e6465785c5d1200000004000000040000002c0000002d0000002e00000012000000000000000100000021000000617373657274696f6e206661696c65643a2073656c662e6361702829203d3d206f6c645f636170202a203200003610005e0000002d0800000d0000002f72757374632f653337613133636333353934303034363633373338626431386438313030653664623936363663662f6c6962726172792f616c6c6f632f7372632f636f6c6c656374696f6e732f7665635f64657175652f6d6f642e72730000c012130056000000030100000100000000000000d0ff10001c000000000000001c1711000100000000000000000000004ab510000c00000000000000241711000100000000000000000000001eda11000c000000000000003c281200010000000000000000000000951c100010000000000000006c371000010000000000000000000000871c10000e00000000000000743710000100000000000000000000007b1c10000c000000000000007c371000010000000000000000000000711c10000a0000000000000084371000010000000000000000000000641c10000d000000000000008c3710000200000000000000000000002ada110009000000000000009c371000010000000000000093381000210000007b3810001800000065381000160000005138100014000000f63710001c000000123810003f000000a4371000520000002054686520626f756e746965732063616e6e6f7420626520636c61696d65642f636c6f73656420626563617573652069742773207374696c6c20696e2074686520636f756e74646f776e20706572696f642e204120626f756e7479207061796f75742069732070656e64696e672e20546f2063616e63656c2074686520626f756e74792c20796f75206d75737420756e61737369676e20616e6420736c617368207468652063757261746f722e20496e76616c696420626f756e7479206665652e20496e76616c696420626f756e74792076616c75652e205265717569726520626f756e74792063757261746f722e2054686520626f756e74792073746174757320697320756e65787065637465642ef838100066000000200000000e000000617373657274696f6e206661696c65643a206d6964203c3d2073656c662e6c656e282900483513004d000000ff050000090000002f72757374632f653337613133636333353934303034363633373338626431386438313030653664623936363663662f6c6962726172792f616c6c6f632f7372632f636f6c6c656374696f6e732f7665635f64657175652f72696e675f736c696365732e727300002f00000060000000080000003000000031000000320000003300000034000000350000003600000014211300600000006f010000010000004c06130053000000a00000000f0000006d6f646c70792f70726f78795f5f5f5f00000000000000000000000000000000000000000000000000000000000000000000000007000000e020130023000000d8000000010000006d6f76655f636c61696d617474657374636c61696d5f6174746573746d696e745f636c61696d000000000000c03a10001800000000000000d83a1000010000000000000000000000e03a10001000000000000000f03a1000010000000000000000000000f83a10001000000000000000083b1000010000000000000000000000103b10000c000000000000001c3b10000200000000000000000000002c3b100010000000000000003c3b1000010000000000000000000000443b10001300000000000000583b10000100000000000000496e76616c6964457468657265756d5369676e6174757265523c10001c0000005369676e65724861734e6f436c61696d333c10001f00000053656e6465724861734e6f436c61696d0f3c100024000000506f74556e646572666c6f77af3b100059000000083c100007000000496e76616c696453746174656d656e748a3b10002500000056657374656442616c616e636545786973747300603b10002a00000020546865206163636f756e7420616c7265616479206861732061207665737465642062616c616e63652e2041206e65656465642073746174656d656e7420776173206e6f7420696e636c756465642e2054686572652773206e6f7420656e6f75676820696e2074686520706f7420746f20706179206f757420736f6d6520756e76657374656420616d6f756e742e2047656e6572616c6c7920696d706c6965732061206c6f676963206572726f722e204163636f756e742049442073656e64696e6720747820686173206e6f20636c61696d2e20457468657265756d206164647265737320686173206e6f20636c61696d2e20496e76616c696420457468657265756d207369676e61747572652e636c61696d7319457468657265756d205369676e6564204d6573736167653a0a50687261676d656e456c656374696f6e43616e6469646174657352756e6e65727355700000001421130060000000990300002c00000050726576616c696461746541747465737473507265636c61696d735175657565644b657973546f74616c4e6f206f746865722076657374696e67207363686564756c65206578697374732c20617320636865636b65642061626f76653b20716564000000120000000c0000000400000037000000e020130023000000bf01000012000000556e616e6e6f756e6365644475706c6963617465556e70726f787961626c654e6f7450726f7879546f6f4d616e794e6f53656c6650726f787900000000000000083e10000d00000000000000183e1000010000000000000000000000203e1000010000000000000000000000283e10001000000000000000383e1000040000000000000000000000583e1000020000000000000000000000683e10000900000000000000743e10000300000000000000000000008c3e1000010000000000000050726f78794578656375746564000000637a12000e000000863f10003b000000416e6f6e796d6f75734372656174656479e512000900000079e51200090000007d3f100009000000a50e130003000000e83e10003b000000233f10005a000000416e6e6f756e63656400000079e512000900000079e512000900000082e5120004000000943e10005400000020416e20616e6e6f756e63656d656e742077617320706c6163656420746f206d616b6520612063616c6c20696e20746865206675747572652e205c5b7265616c2c2070726f78792c2063616c6c5f686173685c5d20416e6f6e796d6f7573206163636f756e7420686173206265656e2063726561746564206279206e65772070726f7879207769746820676976656e20646973616d626967756174696f6e20696e64657820616e642070726f787920747970652e205c5b616e6f6e796d6f75732c2077686f2c2070726f78795f747970652c20646973616d626967756174696f6e5f696e6465785c5d50726f78795479706520412070726f78792077617320657865637574656420636f72726563746c792c20776974682074686520676976656e205c5b726573756c745c5d2e000000000000007c411000050000000000000084411000030000000000000000000000cc4110000f000000000000000000000044421000090000000000000050421000030000000000000000000000984210000d0000000000000000000000004310000c00000000000000504210000300000000000000000000000c4310000b0000000000000000000000644310000e0000000000000054311300000000000000000000000000744310000a0000000000000000000000c44310000900000000000000d043100003000000000000000000000018441000170000000000000000000000d04410000e00000000000000e044100005000000000000000000000058451000140000000000000000000000f845100008000000000000000046100002000000000000000000000030461000150000000000000000000000d8461000130000000000000000461000020000000000000000000000ec4610001000000000000000000000006c471000130000000000000080471000020000000000000000000000b0471000100000000000000000000000304810000f0000000000000040481000040000000000000000000000a0481000110000000000000070726f787900000000000000ef4a10000400000000000000e3f812000c00000000000000f34a10001000000000000000034b10001400000000000000a80e13000400000000000000ac0e130018000000b3581000540000007c4910000d0000005431130000000000894910002b00000054311300000000006c0e1300340000005431130000000000355f12000c000000b449100044000000f849100059000000514a1000350000005431130000000000f2eb12000b000000535210004000000036ec12000c0000006164645f70726f787900000000000000f48c12000800000000000000e3f812000c000000000000009a5210000a00000000000000a45210000c000000000000001fae12000500000000000000a9f912000e000000dc5710005200000054311300000000006c0e1300340000005431130000000000355f12000c0000002e58100045000000735810004000000007551000540000005b551000060000005431130000000000f2eb12000b000000535210004000000036ec12000c00000072656d6f76655f70726f7879165710002b00000054311300000000006c0e1300340000005431130000000000355f12000c000000415710004a0000008b571000510000005431130000000000f2eb12000b000000535210004000000036ec12000c00000072656d6f76655f70726f7869657300003b5610002e00000054311300000000006c0e13003400000054311300000000006956100056000000bf561000570000005431130000000000f2eb12000b000000535210004000000036ec12000c000000616e6f6e796d6f7573000000000000009a5210000a00000000000000a45210000c000000000000001fae12000500000000000000a9f912000e00000000000000a00e13000500000000000000a50e130003000000d65210004f00000025531000400000005431130000000000655310001c00000054311300000000008153100055000000d6531000540000002a5410001f00000049541000550000009e54100058000000f65410001100000007551000540000005b5510000600000054311300000000006155100055000000b6551000270000005431130000000000dd5510003a0000005431130000000000f2eb12000b000000535210004000000036ec12000c00000017561000240000006b696c6c5f616e6f6e796d6f7573000000000000935210000700000000000000e3f812000c000000000000009a5210000a00000000000000a45210000c00000000000000a00e13000500000000000000a50e13000300000000000000b05210000600000000000000b65210001700000000000000cd5210000900000000000000d2a012000c000000264f10002e0000005431130000000000544f100053000000a74f10000e0000005431130000000000b54f1000570000000c5010002b000000543113000000000037501000540000008b50100054000000df50100041000000205110005000000070511000530000005431130000000000c351100053000000165210003d0000005431130000000000f2eb12000b000000535210004000000036ec12000c000000616e6e6f756e636500000000ef4a10000400000000000000e3f812000c000000000000008cf010000900000000000000554c10000d000000294d10004200000054311300000000006b4d100058000000c34d10004a00000054311300000000000d4e1000450000005431130000000000524e100043000000954e1000470000005431130000000000dc4e10004a0000005431130000000000355f12000c000000b449100044000000e34c1000460000005431130000000000f2eb12000b000000864a1000190000009f4a100027000000c64a10002900000036ec12000c00000072656d6f76655f616e6e6f756e63656d656e7400624c10001d00000054311300000000007f4c100057000000d64c10000d00000054311300000000006c0e1300340000005431130000000000355f12000c000000b449100044000000e34c1000460000005431130000000000f2eb12000b000000864a1000190000009f4a100027000000c64a10002900000036ec12000c00000072656a6563745f616e6e6f756e63656d656e740000000000f48c12000800000000000000e3f812000c000000000000008cf010000900000000000000554c10000d000000174b10002d0000005431130000000000444b1000590000009d4b10004a00000054311300000000006c0e1300340000005431130000000000355f12000c000000e74b10003e000000254c1000300000005431130000000000f2eb12000b000000864a1000190000009f4a100027000000c64a10002900000036ec12000c00000070726f78795f616e6e6f756e6365640000000000f48c12000800000000000000e3f812000c00000000000000ef4a10000400000000000000e3f812000c00000000000000f34a10001000000000000000034b10001400000000000000a80e13000400000000000000ac0e13001800000028491000540000007c4910000d0000005431130000000000894910002b00000054311300000000006c0e1300340000005431130000000000355f12000c000000b449100044000000f849100059000000514a1000350000005431130000000000f2eb12000b000000864a1000190000009f4a100027000000c64a10002900000036ec12000c0000002044697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f72697a656420666f72207468726f75676820606164645f70726f7879602e2052656d6f76657320616e7920636f72726573706f6e64696e6720616e6e6f756e63656d656e742873292e202d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e202d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2e202d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e2057656967687420697320612066756e6374696f6e206f663a202d20413a20746865206e756d626572206f6620616e6e6f756e63656d656e7473206d6164652e202d20503a20746865206e756d626572206f662070726f78696573207468652075736572206861732e7265616c666f7263655f70726f78795f747970654f7074696f6e3c543a3a50726f7879547970653e2052656d6f76652074686520676976656e20616e6e6f756e63656d656e74206f6620612064656c65676174652e204d61792062652063616c6c6564206279206120746172676574202870726f7869656429206163636f756e7420746f2072656d6f766520612063616c6c2074686174206f6e65206f662074686569722064656c65676174657320286064656c656761746560292068617320616e6e6f756e63656420746865792077616e7420746f20657865637574652e20546865206465706f7369742069732072657475726e65642e202d206064656c6567617465603a20546865206163636f756e7420746861742070726576696f75736c7920616e6e6f756e636564207468652063616c6c2e202d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652e43616c6c486173684f663c543e2052656d6f7665206120676976656e20616e6e6f756e63656d656e742e204d61792062652063616c6c656420627920612070726f7879206163636f756e7420746f2072656d6f766520612063616c6c20746865792070726576696f75736c7920616e6e6f756e63656420616e642072657475726e20746865206465706f7369742e202d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e205075626c697368207468652068617368206f6620612070726f78792d63616c6c20746861742077696c6c206265206d61646520696e20746865206675747572652e2054686973206d7573742062652063616c6c656420736f6d65206e756d626572206f6620626c6f636b73206265666f72652074686520636f72726573706f6e64696e67206070726f78796020697320617474656d70746564206966207468652064656c6179206173736f6369617465642077697468207468652070726f78792072656c6174696f6e736869702069732067726561746572207468616e207a65726f2e204e6f206d6f7265207468616e20604d617850656e64696e676020616e6e6f756e63656d656e7473206d6179206265206d61646520617420616e79206f6e652074696d652e20546869732077696c6c2074616b652061206465706f736974206f662060416e6e6f756e63656d656e744465706f736974466163746f72602061732077656c6c2061732060416e6e6f756e63656d656e744465706f736974426173656020696620746865726520617265206e6f206f746865722070656e64696e6720616e6e6f756e63656d656e74732e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420612070726f7879206f6620607265616c602e2052656d6f76657320612070726576696f75736c7920737061776e656420616e6f6e796d6f75732070726f78792e205741524e494e473a202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a20416e792066756e64732068656c6420696e2069742077696c6c20626520696e61636365737369626c652e205265717569726573206120605369676e656460206f726967696e2c20616e64207468652073656e646572206163636f756e74206d7573742068617665206265656e206372656174656420627920612063616c6c20746f2060616e6f6e796d6f757360207769746820636f72726573706f6e64696e6720706172616d65746572732e202d2060737061776e6572603a20546865206163636f756e742074686174206f726967696e616c6c792063616c6c65642060616e6f6e796d6f75736020746f206372656174652074686973206163636f756e742e202d2060696e646578603a2054686520646973616d626967756174696f6e20696e646578206f726967696e616c6c792070617373656420746f2060616e6f6e796d6f7573602e2050726f6261626c79206030602e202d206070726f78795f74797065603a205468652070726f78792074797065206f726967696e616c6c792070617373656420746f2060616e6f6e796d6f7573602e202d2060686569676874603a2054686520686569676874206f662074686520636861696e207768656e207468652063616c6c20746f2060616e6f6e796d6f757360207761732070726f6365737365642e202d20606578745f696e646578603a205468652065787472696e73696320696e64657820696e207768696368207468652063616c6c20746f2060616e6f6e796d6f757360207761732070726f6365737365642e204661696c73207769746820604e6f5065726d697373696f6e6020696e2063617365207468652063616c6c6572206973206e6f7420612070726576696f75736c79206372656174656420616e6f6e796d6f7573206163636f756e742077686f73652060616e6f6e796d6f7573602063616c6c2068617320636f72726573706f6e64696e6720706172616d65746572732e2057656967687420697320612066756e6374696f6e206f6620746865206e756d626572206f662070726f7869657320746865207573657220686173202850292e737061776e657270726f78795f74797065543a3a50726f787954797065686569676874436f6d706163743c543a3a426c6f636b4e756d6265723e6578745f696e64657820537061776e2061206672657368206e6577206163636f756e7420746861742069732067756172616e7465656420746f206265206f746865727769736520696e61636365737369626c652c20616e6420696e697469616c697a65206974207769746820612070726f7879206f66206070726f78795f747970656020666f7220606f726967696e602073656e6465722e205265717569726573206120605369676e656460206f726967696e2e202d206070726f78795f74797065603a205468652074797065206f66207468652070726f78792074686174207468652073656e6465722077696c6c2062652072656769737465726564206173206f76657220746865206e6577206163636f756e742e20546869732077696c6c20616c6d6f737420616c7761797320626520746865206d6f7374207065726d697373697665206050726f7879547970656020706f737369626c6520746f20616c6c6f7720666f72206d6178696d756d20666c65786962696c6974792e202d2060696e646578603a204120646973616d626967756174696f6e20696e6465782c20696e206361736520746869732069732063616c6c6564206d756c7469706c652074696d657320696e207468652073616d65207472616e73616374696f6e2028652e672e207769746820607574696c6974793a3a626174636860292e20556e6c65737320796f75277265207573696e67206062617463686020796f752070726f6261626c79206a7573742077616e7420746f20757365206030602e202d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265207a65726f2e204661696c73207769746820604475706c69636174656020696620746869732068617320616c7265616479206265656e2063616c6c656420696e2074686973207472616e73616374696f6e2c2066726f6d207468652073616d652073656e6465722c2077697468207468652073616d6520706172616d65746572732e204661696c732069662074686572652061726520696e73756666696369656e742066756e647320746f2070617920666f72206465706f7369742e20544f444f3a204d69676874206265206f76657220636f756e74696e672031207265616420556e726567697374657220616c6c2070726f7879206163636f756e747320666f72207468652073656e6465722e205741524e494e473a2054686973206d61792062652063616c6c6564206f6e206163636f756e747320637265617465642062792060616e6f6e796d6f7573602c20686f776576657220696620646f6e652c207468656e2074686520756e726573657276656420666565732077696c6c20626520696e61636365737369626c652e202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a20556e726567697374657220612070726f7879206163636f756e7420666f72207468652073656e6465722e202d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f2072656d6f766520617320612070726f78792e202d206070726f78795f74797065603a20546865207065726d697373696f6e732063757272656e746c7920656e61626c656420666f72207468652072656d6f7665642070726f7879206163636f756e742e20526567697374657220612070726f7879206163636f756e7420666f72207468652073656e64657220746861742069732061626c6520746f206d616b652063616c6c73206f6e2069747320626568616c662e202d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f206d616b6520612070726f78792e202d206070726f78795f74797065603a20546865207065726d697373696f6e7320616c6c6f77656420666f7220746869732070726f7879206163636f756e742e2044697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f726973656420666f72207468726f7567680000000000a82d1200070000000105000000000000e3f812000c00000000000000b85910005100000000000000000000000000000000000000543113000c5a100000000000000000001c5a100002000000000000000100000000000000af2d12000d0000000105000000000000e3f812000c000000000000002c5a10004f00000000000000000000000000000000000000543113007c5a100000000000000000008c5a1000010000000000000001000000285665633c50726f7879446566696e6974696f6e3c543a3a4163636f756e7449642c20543a3a50726f7879547970652c20543a3a426c6f636b4e756d6265723e3e2c0a2042616c616e63654f663c543e2900000012000000000000000100000038000000bf5a100051000000105b100048000000285665633c416e6e6f756e63656d656e743c543a3a4163636f756e7449642c2043616c6c486173684f663c543e2c20543a3a426c6f636b4e756d6265723e3e2c0a2042616c616e63654f663c543e290012000000000000000100000039000000945a10002b0000002054686520616e6e6f756e63656d656e7473206d616465206279207468652070726f787920286b6579292e2054686520736574206f66206163636f756e742070726f786965732e204d61707320746865206163636f756e74207768696368206861732064656c65676174656420746f20746865206163636f756e747320776869636820617265206265696e672064656c65676174656420746f2c20746f67657468657220776974682074686520616d6f756e742068656c64206f6e206465706f7369742e00000000a85c1000100000000000000057a912000c0000000000000054311300b85c10000000000000000000c85c1000040000000000000000000000e85c1000120000000000000057a912000c0000000000000054311300fc5c100000000000000000000c5d1000050000000000000000000000345d10000a00000000000000a50e1300030000000000000054311300405d10000000000000000000505d1000010000000000000000000000585d10000a00000000000000cbed1200030000000000000054311300645d10000000000000000000745d10000100000000000000000000007c5d1000170000000000000057a912000c0000000000000054311300945d10000000000000000000a45d1000030000000000000000000000bc5d1000190000000000000057a912000c0000000000000054311300d85d10000000000000000000e85d1000040000000000000050726f78794465706f736974426173651200000000000000010000003a000000fa6010004400000054311300000000003e611000400000007e6110004900000050726f78794465706f736974466163746f7200001200000000000000010000003b000000e95f10002f0000005431130000000000186010005a0000007260100058000000ca601000300000004d617850726f7869657300001200000000000000010000003c000000ad5f10003c0000004d617850656e64696e6700001200000000000000010000003d0000005c5f100051000000416e6e6f756e63656d656e744465706f73697442617365001200000000000000010000003a000000b65e10004c0000005431130000000000025f10005a000000416e6e6f756e63656d656e744465706f736974466163746f720000001200000000000000010000003e000000085e10003500000054311300000000003d5e100056000000935e1000230000002054686520616d6f756e74206f662063757272656e6379206e65656465642070657220616e6e6f756e63656d656e74206d6164652e20546869732069732068656c6420666f7220616464696e6720616e20604163636f756e744964602c2060486173686020616e642060426c6f636b4e756d6265726020287479706963616c6c792036382062797465732920696e746f2061207072652d6578697374696e672073746f726167652076616c75652e20546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720616e20616e6e6f756e63656d656e742e20546869732069732068656c64207768656e2061206e65772073746f72616765206974656d20686f6c64696e672061206042616c616e636560206973206372656174656420287479706963616c6c79203136206279746573292e20546865206d6178696d756d20616d6f756e74206f662074696d652d64656c6179656420616e6e6f756e63656d656e747320746861742061726520616c6c6f77656420746f2062652070656e64696e672e20546865206d6178696d756d20616d6f756e74206f662070726f7869657320616c6c6f77656420666f7220612073696e676c65206163636f756e742e2054686520616d6f756e74206f662063757272656e6379206e6565646564207065722070726f78792061646465642e20546869732069732068656c6420666f7220616464696e6720333220627974657320706c757320616e20696e7374616e6365206f66206050726f78795479706560206d6f726520696e746f2061207072652d6578697374696e672073746f726167652076616c75652e20546875732c207768656e20636f6e6669677572696e67206050726f78794465706f736974466163746f7260206f6e652073686f756c642074616b6520696e746f206163636f756e7420603332202b2070726f78795f747970652e656e636f646528292e6c656e282960206279746573206f6620646174612e20546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720612070726f78792e20546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a65206973206073697a656f662842616c616e6365296020627974657320616e642077686f7365206b65792073697a65206973206073697a656f66284163636f756e74496429602062797465732e4e6f4b6579734475706c6963617465644b65794e6f4173736f63696174656456616c696461746f724964496e76616c696450726f6f664e6f4163636f756e7400000000000060621000080000000000000068621000020000000000000000000000986210000e0000000000000000000000086310000a0000000000000054311300000000000000000000000000146310000c000000000000007365745f6b657973000000007aee1200040000000000000042661000070000000000000049661000050000000000000042ec120007000000186510003a0000005265100048000000a7631000310000005431130000000000d8631000350000005431130000000000f2eb12000b000000c9e91100150000003a641000560000009a6510003c000000d665100029000000ff65100021000000206610002200000036ec12000c00000070757267655f6b65797300007463100033000000a7631000310000005431130000000000d8631000350000005431130000000000f2eb12000b0000000d6410002d0000003a64100056000000906410003c000000cc64100029000000f56410002300000036ec12000c0000002052656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e205468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e20546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e202d20436f6d706c65786974793a20604f2831296020696e206e756d626572206f66206b65792074797065732e20202041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f662060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642e202d20446252656164733a2060543a3a56616c696461746f7249644f66602c20604e6578744b657973602c20606f726967696e206163636f756e7460202d2044625772697465733a20604e6578744b657973602c20606f726967696e206163636f756e7460202d20446257726974657320706572206b65792069643a20604b65794f776e646572602053657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e20416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722e202d20446252656164733a20606f726967696e206163636f756e74602c2060543a3a56616c696461746f7249644f66602c20604e6578744b65797360202d2044625772697465733a20606f726967696e206163636f756e74602c20604e6578744b65797360202d204462526561647320706572206b65792069643a20604b65794f776e657260202d20446257726974657320706572206b65792069643a20604b65794f776e657260543a3a4b65797370726f6f66000000000000f04e11000a0000000000000000000000b8681000130000000000000000000000000000000000000000000000000000000000000054311300cc6810000000000000000000dc68100001000000000000000100000000000000e46810000c0000000000000000000000a03712000c0000000000000000000000000000000000000000000000000000000000000054311300f068100000000000000000000069100001000000000000000100000000000000086910000d0000000000000000000000a1fb12000400000000000000000000000000000000000000000000000000000000000000543113001869100000000000000000002869100002000000000000000100000000000000df3c10000a0000000000000000000000386910001e0000000000000000000000000000000000000000000000000000000000000054311300586910000000000000000000686910000200000000000000010000000000000078691000120000000000000000000000e47311000800000000000000000000000000000000000000000000000000000000000000543113008c69100000000000000000009c69100003000000000000000100000000000000b4691000080000000105000000000000bc6910000e0000000000000042661000070000000000000000000000000000000000000054311300cc6910000000000000000000dc69100001000000000000000000000000000000e4691000080000000105000000000000ec6910001400000000000000bc6910000e0000000000000000000000000000000000000054311300006a10000000000000000000106a10000100000000000000000000005665633c543a3a56616c696461746f7249643e001200000000000000010000003f0000000a6c10001f00000043757272656e74496e64657812000000000000000100000022000000ec6b10001e0000005175657565644368616e67656400000012000000000000000100000023000000756b10004e000000c36b1000290000005665633c28543a3a56616c696461746f7249642c20543a3a4b657973293e000012000000000000000100000040000000ee6a10004f0000003d6b10003800000044697361626c656456616c696461746f7273000012000000000000000100000024000000816a1000200000005431130000000000a16a10004d0000004e6578744b657973543a3a56616c696461746f7249640000120000000000000001000000230000005a6a1000270000004b65794f776e6572284b65795479706549642c205665633c75383e2912000000000000000100000023000000186a10004200000020546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e20496e6469636573206f662064697361626c65642076616c696461746f72732e205468652073657420697320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e732061206e657720736574206f66206964656e7469746965732e2054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b6579732077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e20547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f727320686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e2043757272656e7420696e646578206f66207468652073657373696f6e2e205468652063757272656e7420736574206f662076616c696461746f72732e0000000000000078a710000500000000000000086d1000020000000000000000000000386d10001800000000000000000000000c3a10000a00000000000000f86d1000040000000000000000000000586e10000f0000000000000000000000003a10000c00000000000000d06e1000030000000000000000000000186f10001a0000000000000000000000fa3910000600000000000000e86f100001000000000000000000000000701000110000000000000000000000f03910000a0000000000000088701000030000000000000000000000543113000000000000000000000000005b0c12000400000000000000e3f812000c00000000000000b07510001200000000000000c27510000e000000477710002300000054311300000000006073100032000000543113000000000088711000150000006a77100042000000dd731000200000005431130000000000fd7310001b000000ac771000260000005431130000000000d27710002a0000005431130000000000355f12000c000000cd7410003700000004751000440000004875100028000000543113000000000080721000090000008972100040000000fc77100039000000543113000000000006731000170000008d8511000a00000000000000791b13000300000000000000d37010000f0000000000000048b61200050000000000000057a912000c00000000000000ee7610001000000000000000fe76100034000000000000001d73100009000000000000003277100015000000d075100022000000543113000000000075fa1100320000005431130000000000355f12000c000000f27510003d0000002f761000340000006376100043000000543113000000000080721000090000008972100040000000a676100048000000543113000000000006731000170000008d8511000a000000000000005b0c12000400000000000000e3f812000c00000000000000b07510001200000000000000c27510000e000000000000001d731000090000000000000042ec120007000000267310003a0000005431130000000000607310003200000054311300000000008871100015000000927310004b000000dd731000200000005431130000000000fd7310001b0000001874100031000000543113000000000049741000530000009c741000310000005431130000000000355f12000c000000cd7410003700000004751000440000004875100028000000267210005a0000005431130000000000807210000900000089721000400000007075100040000000543113000000000006731000170000008d8511000a000000000000001d731000090000000000000042ec120007000000f07010003e00000054311300000000002e7110005a000000543113000000000088711000150000009d7110004b000000e87110003e0000005431130000000000355f12000c000000267210005a000000543113000000000080721000090000008972100040000000c97210003d000000543113000000000006731000170000008d8511000a00000000000000d07010000300000000000000d37010000f00000000000000871913000300000000000000d37010000f00000000000000e27010000e000000000000002c701200140000006f6c64457468657265756d416464726573736d617962655f707265636c61696d2041747465737420746f20612073746174656d656e742c206e656564656420746f2066696e616c697a652074686520636c61696d732070726f636573732e205741524e494e473a20496e73656375726520756e6c65737320796f757220636861696e20696e636c75646573206050726576616c69646174654174746573747360206173206120605369676e6564457874656e73696f6e602e20556e7369676e65642056616c69646174696f6e3a20412063616c6c20746f20617474657374206973206465656d65642076616c6964206966207468652073656e6465722068617320612060507265636c61696d60207265676973746572656420616e642070726f76696465732061206073746174656d656e746020776869636820697320657870656374656420666f7220746865206163636f756e742e202d206073746174656d656e74603a20546865206964656e74697479206f66207468652073746174656d656e74207768696368206973206265696e6720617474657374656420746f20696e20746865207369676e61747572652e203c7765696768743e2054686520776569676874206f6620746869732063616c6c20697320696e76617269616e74206f7665722074686520696e70757420706172616d65746572732e2057656967687420696e636c75646573206c6f67696320746f20646f207072652d76616c69646174696f6e206f6e2060617474657374602063616c6c2e20546f74616c20436f6d706c65786974793a204f28312973746174656d656e74204d616b65206120636c61696d20746f20636f6c6c65637420796f757220444f5473206279207369676e696e6720612073746174656d656e742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f4e6f6e655f2e20412063616c6c20746f2060636c61696d5f61747465737460206973206465656d65642076616c696420696620746865207369676e61747572652070726f7669646564206d61746368657320746865206578706563746564207369676e6564206d657373616765206f663a203e20457468657265756d205369676e6564204d6573736167653a203e2028636f6e666967757265642070726566697820737472696e67292861646472657373292873746174656d656e742920616e6420606164647265737360206d6174636865732074686520606465737460206163636f756e743b20746865206073746174656d656e7460206d757374206d617463682074686174207768696368206973206578706563746564206163636f7264696e6720746f20796f757220707572636861736520617272616e67656d656e742e202d206064657374603a205468652064657374696e6174696f6e206163636f756e7420746f207061796f75742074686520636c61696d2e202d2060657468657265756d5f7369676e6174757265603a20546865207369676e6174757265206f6620616e20657468657265756d207369676e6564206d657373616765202020206d61746368696e672074686520666f726d6174206465736372696265642061626f76652e2057656967687420696e636c75646573206c6f67696320746f2076616c696461746520756e7369676e65642060636c61696d5f617474657374602063616c6c2e657468657265756d5f7369676e617475726545636473615369676e6174757265204d696e742061206e657720636c61696d20746f20636f6c6c65637420444f54732e202d206077686f603a2054686520457468657265756d206164647265737320616c6c6f77656420746f20636f6c6c656374207468697320636c61696d2e202d206076616c7565603a20546865206e756d626572206f6620444f547320746861742077696c6c20626520636c61696d65642e202d206076657374696e675f7363686564756c65603a20416e206f7074696f6e616c2076657374696e67207363686564756c6520666f7220746865736520444f54732e20576520617373756d6520776f7273742063617365207468617420626f74682076657374696e6720616e642073746174656d656e74206973206265696e6720696e7365727465642e76657374696e675f7363686564756c654f7074696f6e3c2842616c616e63654f663c543e2c2042616c616e63654f663c543e2c20543a3a426c6f636b4e756d626572293e4f7074696f6e3c53746174656d656e744b696e643e204d616b65206120636c61696d20746f20636f6c6c65637420796f757220444f54732e20412063616c6c20746f20636c61696d206973206465656d65642076616c696420696620746865207369676e61747572652070726f7669646564206d617463686573203e2028636f6e666967757265642070726566697820737472696e672928616464726573732920616e6420606164647265737360206d6174636865732074686520606465737460206163636f756e742e2057656967687420696e636c75646573206c6f67696320746f2076616c696461746520756e7369676e65642060636c61696d602063616c6c2e00000000000000b6281300060000000106000000000000d37010000f0000000000000057a912000c0000000000000000000000000000000000000054311300f079100000000000000000005431130000000000000000000000000000000000e93c100005000000000000000000000057a912000c0000000000000000000000000000000000000000000000000000000000000054311300007a100000000000000000005431130000000000000000000100000000000000bc2d1200070000000106000000000000d37010000f00000000000000107a10002c00000000000000000000000000000000000000543113003c7a100000000000000000004c7a100004000000000000000000000000000000bc281300070000000106000000000000d37010000f000000000000006c7a10000d00000000000000000000000000000000000000543113007c7a100000000000000000008c7a100001000000000000000000000000000000d63c1000090000000106000000000000e3f812000c00000000000000d37010000f0000000000000000000000000000000000000054311300947a10000000000000000000a47a100001000000000000000000000012000000000000000100000023000000120000000000000001000000410000002842616c616e63654f663c543e2c2042616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265722912000000000000000100000023000000277b10001e000000457b100043000000887b100039000000c17b10003300000053746174656d656e744b696e6400000012000000000000000100000023000000f77a10003000000012000000000000000100000023000000ac7a10004b000000205072652d636c61696d656420457468657265756d206163636f756e74732c20627920746865204163636f756e74204944207468617420746865792061726520636c61696d656420746f2e205468652073746174656d656e74206b696e642074686174206d757374206265207369676e65642c20696620616e792e2056657374696e67207363686564756c6520666f72206120636c61696d2e2046697273742062616c616e63652069732074686520746f74616c20616d6f756e7420746861742073686f756c642062652068656c6420666f722076657374696e672e205365636f6e642062616c616e636520697320686f77206d7563682073686f756c6420626520756e6c6f636b65642070657220626c6f636b2e2054686520626c6f636b206e756d626572206973207768656e207468652076657374696e672073686f756c642073746172742e000000002c7c10000600000000000000327c1000050000000000000054311300387c10000000000000000000487c10000100000000000000507265666978265b75385d0012000000000000000100000042000000507c10004500000020546865205072656669782074686174206973207573656420696e207369676e656420457468657265756d206d6573736167657320666f722074686973206e6574776f726b00000000000000c47c10000700000000000000cc7c1000030000000000000000000000e47c10000100000000000000436c61696d65640079e5120009000000d37010000f000000d5d1120007000000ec7c10003b00000020536f6d656f6e6520636c61696d656420736f6d6520444f54732e205b77686f2c20657468657265756d5f616464726573732c20616d6f756e745d496e76616c696452656e6f756e63696e67496e76616c6964566f7465436f756e74496e76616c69645769746e65737344617461496e73756666696369656e7443616e64696461746546756e647352756e6e657255705375626d69744d656d6265725375626d69744475706c69636174656443616e6469646174655265706f727453656c664d7573744265566f746572556e61626c65546f506179426f6e644c6f7742616c616e63654d6178696d756d566f7465734578636565646564546f6f4d616e79566f7465734e6f566f746573556e61626c65546f566f7465496e76616c69645265706c6163656d656e7400000000d488120004000000000000001c7f10000200000000000000000000004c7f1000170000000000000000000000048010000c00000000000000543113000000000000000000000000001080100005000000000000000000000038801000100000000000000048801000010000000000000000000000608010000f0000000000000000000000d88010001200000000000000ec80100001000000000000000000000004811000110000000000000000000000e41613000d000000000000008c811000020000000000000000000000bc8110000e00000000000000000000002c821000140000000000000040821000020000000000000000000000708210000a0000000000000000000000398f100005000000000000002c1a1300110000000000000048b6120005000000000000004db6120015000000128c100057000000698c1000390000005431130000000000a28c100058000000fa8c10005400000054311300000000004e8d100014000000628d100012000000748d100056000000ca8d10004500000054311300000000000f8e1000540000005431130000000000498a10003100000054311300000000007a8a10000c0000005431130000000000638e100056000000b98e10002b0000005431130000000000f2eb12000b000000e48e10005500000036ec12000c00000072656d6f76655f766f746572878b10001c0000005431130000000000a38b10002f0000005431130000000000d28b1000400000007375626d69745f63616e64696461637900000000788b10000f00000000000000d2a012000c00000078891000450000005431130000000000bd89100058000000158a1000340000005431130000000000498a10003100000054311300000000007a8a10000c0000005431130000000000868a100058000000de8a1000570000005431130000000000f2eb12000b000000358b10004300000036ec12000c00000072656e6f756e63655f63616e646964616379000000000000648910000a000000000000006e8910000a0000001486100054000000688610001000000054311300000000007886100053000000cb8610003d000000088710005900000061871000240000008587100056000000db87100056000000318810005b0000008c8810004d0000005431130000000000d9881000520000005431130000000000f2eb12000b0000002b8910003900000036ec12000c00000000000000791b1300030000000000000085fc11002300000000000000058610000f00000000000000a1fb1200040000001d84100057000000748410002000000054311300000000009484100056000000ea8410004000000054311300000000007f8310002f00000054311300000000002a851000510000005431130000000000f2eb12000b0000007b85100055000000d08510003500000036ec12000c000000636c65616e5f646566756e63745f766f7465727300000000068410000b00000000000000cbed12000300000000000000118410000c00000000000000cbed120003000000c082100052000000128310002c00000054311300000000003e8310004100000054311300000000007f8310002f0000005431130000000000f2eb12000b000000ae8310005800000036ec12000c00000020436c65616e20616c6c20766f746572732077686f2061726520646566756e63742028692e652e207468657920646f206e6f7420736572766520616e7920707572706f736520617420616c6c292e20546865206465706f736974206f66207468652072656d6f76656420766f74657273206172652072657475726e65642e205468697320697320616e20726f6f742066756e6374696f6e20746f2062652075736564206f6e6c7920666f7220636c65616e696e67207468652073746174652e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d75737420626520726f6f742e2054686520746f74616c206e756d626572206f6620766f7465727320616e642074686f736520746861742061726520646566756e6374206d7573742062652070726f7669646564206173207769746e65737320646174612e5f6e756d5f766f746572735f6e756d5f646566756e63742052656d6f7665206120706172746963756c6172206d656d6265722066726f6d20746865207365742e20546869732069732065666665637469766520696d6d6564696174656c7920616e642074686520626f6e64206f6620746865206f7574676f696e67206d656d62657220697320736c61736865642e20496620612072756e6e65722d757020697320617661696c61626c652c207468656e2074686520626573742072756e6e65722d75702077696c6c2062652072656d6f76656420616e64207265706c6163657320746865206f7574676f696e67206d656d6265722e204f74686572776973652c2061206e65772070687261676d656e20656c656374696f6e20697320737461727465642e204e6f74652074686174207468697320646f6573206e6f7420616666656374207468652064657369676e6174656420626c6f636b206e756d626572206f6620746865206e65787420656c656374696f6e2e20496620776520686176652061207265706c6163656d656e742c20776520757365206120736d616c6c207765696768742e20456c73652c2073696e63652074686973206973206120726f6f742063616c6c20616e642077696c6c20676f20696e746f2070687261676d656e2c20776520617373756d652066756c6c20626c6f636b20666f72206e6f772e6861735f7265706c6163656d656e742052656e6f756e6365206f6e65277320696e74656e74696f6e20746f20626520612063616e64696461746520666f7220746865206e65787420656c656374696f6e20726f756e642e203320706f74656e7469616c206f7574636f6d65732065786973743a202d20606f726967696e6020697320612063616e64696461746520616e64206e6f7420656c656374656420696e20616e79207365742e20496e207468697320636173652c20746865206465706f736974206973202020756e72657365727665642c2072657475726e656420616e64206f726967696e2069732072656d6f76656420617320612063616e6469646174652e202d20606f726967696e6020697320612063757272656e742072756e6e65722d75702e20496e207468697320636173652c20746865206465706f73697420697320756e72657365727665642c2072657475726e656420616e642020206f726967696e2069732072656d6f76656420617320612072756e6e65722d75702e202d20606f726967696e6020697320612063757272656e74206d656d6265722e20496e207468697320636173652c20746865206465706f73697420697320756e726573657276656420616e64206f726967696e20697320202072656d6f7665642061732061206d656d6265722c20636f6e73657175656e746c79206e6f74206265696e6720612063616e64696461746520666f7220746865206e65787420726f756e6420616e796d6f72652e20202053696d696c617220746f205b6072656d6f76655f6d656d62657273605d2c206966207265706c6163656d656e742072756e6e657273206578697374732c20746865792061726520696d6d6564696174656c7920757365642e202020496620746865207072696d652069732072656e6f756e63696e672c207468656e206e6f207072696d652077696c6c20657869737420756e74696c20746865206e65787420726f756e642e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642c20616e642068617665206f6e65206f66207468652061626f766520726f6c65732e205468652074797065206f662072656e6f756e63696e67206d7573742062652070726f7669646564206173207769746e65737320646174612e72656e6f756e63696e6752656e6f756e63696e67205375626d6974206f6e6573656c6620666f722063616e6469646163792e204120666978656420616d6f756e74206f66206465706f736974206973207265636f726465642e20416c6c2063616e64696461746573206172652077697065642061742074686520656e64206f6620746865207465726d2e205468657920656974686572206265636f6d652061206d656d6265722f72756e6e65722d75702c206f72206c65617665207468652073797374656d207768696c65207468656972206465706f73697420697320736c61736865642e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642e20232323205761726e696e67204576656e20696620612063616e64696461746520656e6473207570206265696e672061206d656d6265722c2074686579206d7573742063616c6c205b6043616c6c3a3a72656e6f756e63655f63616e646964616379605d20746f20676574207468656972206465706f736974206261636b2e204c6f73696e67207468652073706f7420696e20616e20656c656374696f6e2077696c6c20616c77617973206c65616420746f206120736c6173682e20546865206e756d626572206f662063757272656e742063616e64696461746573206d7573742062652070726f7669646564206173207769746e65737320646174612e63616e6469646174655f636f756e742052656d6f766520606f726967696e60206173206120766f7465722e20546869732072656d6f76657320746865206c6f636b20616e642072657475726e7320746865206465706f7369742e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e656420616e64206265206120766f7465722e20566f746520666f72206120736574206f662063616e6469646174657320666f7220746865207570636f6d696e6720726f756e64206f6620656c656374696f6e2e20546869732063616e2062652063616c6c656420746f207365742074686520696e697469616c20766f7465732c206f722075706461746520616c7265616479206578697374696e6720766f7465732e2055706f6e20696e697469616c20766f74696e672c206076616c75656020756e697473206f66206077686f6027732062616c616e6365206973206c6f636b656420616e642061206465706f73697420616d6f756e742069732072657365727665642e20546865206465706f736974206973206261736564206f6e20746865206e756d626572206f6620766f74657320616e642063616e2062652075706461746564206f7665722074696d652e205468652060766f746573602073686f756c643a2020202d206e6f7420626520656d7074792e2020202d206265206c657373207468616e20746865206e756d626572206f6620706f737369626c652063616e646964617465732e204e6f7465207468617420616c6c2063757272656e74206d656d6265727320616e64202020202072756e6e6572732d75702061726520616c736f206175746f6d61746963616c6c792063616e6469646174657320666f7220746865206e65787420726f756e642e204966206076616c756560206973206d6f7265207468616e206077686f60277320746f74616c2062616c616e63652c207468656e20746865206d6178696d756d206f66207468652074776f20697320757365642e2049742069732074686520726573706f6e736962696c697479206f66207468652063616c6c657220746f202a2a4e4f542a2a20706c61636520616c6c206f662074686569722062616c616e636520696e746f20746865206c6f636b20616e64206b65657020736f6d6520666f722066757274686572206f7065726174696f6e732e20576520617373756d6520746865206d6178696d756d2077656967687420616d6f6e6720616c6c20332063617365733a20766f74655f657175616c2c20766f74655f6d6f726520616e6420766f74655f6c6573732e766f746573000000000000c7e11200070000000000000000000000f89010002b00000000000000000000000000000000000000000000000000000000000000543113002491100000000000000000003491100003000000000000000100000000000000a83c1000090000000000000000000000f89010002b00000000000000000000000000000000000000000000000000000000000000543113004c91100000000000000000005c911000040000000000000001000000000000009e3c10000a00000000000000000000007c911000210000000000000000000000000000000000000000000000000000000000000054311300a09110000000000000000000b091100006000000000000000100000000000000e09110000e0000000000000000000000cbed1200030000000000000000000000000000000000000000000000000000000000000054311300f091100000000000000000000092100001000000000000000100000000000000fb571200060000000105000000000000e3f812000c00000000000000089210002100000000000000000000000000000000000000543113002c92100000000000000000003c9210000300000000000000010000005665633c53656174486f6c6465723c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e3e0012000000000000000100000043000000809410001d0000005431130000000000ac9310002e00000012000000000000000100000043000000da931000210000005431130000000000fb93100056000000519410002f0000005665633c28543a3a4163636f756e7449642c2042616c616e63654f663c543e293e0000001200000000000000010000003f0000000393100056000000599310003400000054311300000000008d9310001f0000005431130000000000ac9310002e000000456c656374696f6e526f756e6473000012000000000000000100000022000000b392100050000000566f7465723c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e00000012000000000000000100000044000000549210002e0000005431130000000000829210003100000020566f74657320616e64206c6f636b6564207374616b65206f66206120706172746963756c617220766f7465722e2054574f582d4e4f54453a205341464520617320604163636f756e7449646020697320612063727970746f20686173682e2054686520746f74616c206e756d626572206f6620766f746520726f756e6473207468617420686176652068617070656e65642c206578636c7564696e6720746865207570636f6d696e67206f6e652e205468652070726573656e742063616e646964617465206c6973742e20412063757272656e74206d656d626572206f722072756e6e65722d75702063616e206e6576657220656e746572207468697320766563746f7220616e6420697320616c7761797320696d706c696369746c7920617373756d656420746f20626520612063616e6469646174652e205365636f6e6420656c656d656e7420697320746865206465706f7369742e20496e76617269616e743a20416c7761797320736f72746564206261736564206f6e206163636f756e742069642e205468652063757272656e742072657365727665642072756e6e6572732d75702e20496e76617269616e743a20416c7761797320736f72746564206261736564206f6e2072616e6b2028776f72736520746f2062657374292e2055706f6e2072656d6f76616c206f662061206d656d6265722c20746865206c6173742028692e652e205f626573745f292072756e6e65722d75702077696c6c206265207265706c616365642e205468652063757272656e7420656c6563746564206d656d626572732e00000000000000289610000d0000000000000057a912000c000000000000005431130038961000000000000000000054311300000000000000000000000000489610000e0000000000000057a912000c00000000000000543113005896100000000000000000005431130000000000000000000000000068961000100000000000000057a912000c000000000000005431130078961000000000000000000054311300000000000000000000000000889610000e00000000000000cbed120003000000000000005431130098961000000000000000000054311300000000000000000000000000a89610001000000000000000cbed1200030000000000000054311300b8961000000000000000000054311300000000000000000000000000c89610000c00000000000000a9f912000e0000000000000054311300d4961000000000000000000054311300000000000000000000000000a00811000800000000000000e49610000e0000000000000054311300f4961000000000000000000054311300000000000000000043616e646964616379426f6e6400000012000000000000000100000045000000566f74696e67426f6e6442617365000012000000000000000100000046000000566f74696e67426f6e64466163746f7212000000000000000100000047000000446573697265644d656d626572730000120000000000000001000000480000004465736972656452756e6e6572735570120000000000000001000000490000005465726d4475726174696f6e1200000000000000010000004a0000004c6f636b4964656e74696669657200001200000000000000010000004b0000000000000038981000070000000000000040981000010000000000000000000000489810000400000000000000000000006898100009000000000000005431130000000000000000000000000074981000020000000000000000000000849810000d0000000000000054311300000000000000000000000000949810000100000000000000000000009c9810000c00000000000000fce41200010000000000000000000000a8981000020000000000000000000000b89810000900000000000000fce41200010000000000000000000000c4981000010000000000000000000000cc9810001000000000000000c0f51100020000000000000000000000dc981000040000000000000000000000fc9810001100000000000000c0f511000200000000000000000000001099100001000000000000004e65775465726d00ad9c1000190000004d9b10005a000000a79b100056000000fd9b10005a000000579c100056000000456d7074795465726d000000cd9a10004d0000001a9b100033000000456c656374696f6e4572726f72000000939a10003a0000004d656d6265724b69636b6564319a100055000000869a10000d00000052656e6f756e6365640000000a9a10002700000043616e646964617465536c61736865646e99100057000000c59910000b0000005431130000000000d09910003a00000053656174486f6c646572536c617368656400000018991000560000002041205c5b7365617420686f6c6465725c5d2077617320736c6173686564206279205c5b616d6f756e745c5d206279206265696e6720666f72636566756c6c792072656d6f7665642066726f6d20746865207365742e2041205c5b63616e6469646174655c5d2077617320736c6173686564206279205c5b616d6f756e745c5d2064756520746f206661696c696e6720746f206f627461696e20612073656174206173206d656d626572206f722072756e6e65722d75702e204e6f74652074686174206f6c64206d656d6265727320616e642072756e6e6572732d75702061726520616c736f2063616e646964617465732e20536f6d656f6e65206861732072656e6f756e6365642074686569722063616e6469646163792e2041205c5b6d656d6265725c5d20686173206265656e2072656d6f7665642e20546869732073686f756c6420616c7761797320626520666f6c6c6f7765642062792065697468657220604e65775465726d60206f722060456d7074795465726d602e20496e7465726e616c206572726f722068617070656e6564207768696c6520747279696e6720746f20706572666f726d20656c656374696f6e2e204e6f20286f72206e6f7420656e6f756768292063616e64696461746573206578697374656420666f72207468697320726f756e642e205468697320697320646966666572656e742066726f6d20604e65775465726d285c5b5c5d29602e2053656520746865206465736372697074696f6e206f6620604e65775465726d602e2041206e6577207465726d2077697468205c5b6e65775f6d656d626572735c5d2e205468697320696e64696361746573207468617420656e6f7567682063616e64696461746573206578697374656420746f2072756e2074686520656c656374696f6e2c206e6f74207468617420656e6f756768206861766520686173206265656e20656c65637465642e2054686520696e6e65722076616c7565206d757374206265206578616d696e656420666f72207468697320707572706f73652e204120604e65775465726d285c5b5c5d296020696e64696361746573207468617420736f6d652063616e6469646174657320676f7420746865697220626f6e6420736c617368656420616e64206e6f6e65207765726520656c65637465642c207768696c73742060456d7074795465726d60206d65616e732074686174206e6f2063616e64696461746573206578697374656420746f20626567696e20776974682e5665633c284163636f756e7449642c2042616c616e6365293e000000000000f16110000c00000000000000549d1000010000000000000000000000da61100017000000000000005c9d1000010000000000000000000000cd6110000d00000000000000649d1000010000000000000000000000c761100006000000000000006c9d1000010000000000000000000000fd6110000900000000000000749d100001000000000000002f9e100019000000079e100028000000ed9d10001a000000c39d10002a0000007c9d100047000000204b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e204e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e2052656769737465726564206475706c6963617465206b65792e204e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e20496e76616c6964206f776e6572736869702070726f6f662e000000006f3d10000700000000000000289f10000100000000000000000000008b3311000800000000000000309f1000010000000000000000000000673d10000800000000000000389f10000100000000000000000000005c3d10000b00000000000000409f1000010000000000000000000000533d10000900000000000000489f1000010000000000000000000000428212000c00000000000000509f1000010000000000000000000000483d10000b00000000000000589f1000010000000000000000000000763d10000b00000000000000609f10000100000000000000b4a010004900000096a010001e00000062a010003400000019a0100049000000fd9f10001c000000b79f100046000000829f100035000000689f10001a0000002043616e6e6f74206164642073656c662061732070726f78792e20416e6e6f756e63656d656e742c206966206d61646520617420616c6c2c20776173206d61646520746f6f20726563656e746c792e2043616c6c206d6179206e6f74206265206d6164652062792070726f78792062656361757365206974206d617920657363616c617465206974732070726976696c656765732e204163636f756e7420697320616c726561647920612070726f78792e20412063616c6c20776869636820697320696e636f6d70617469626c652077697468207468652070726f7879207479706527732066696c7465722077617320617474656d707465642e2053656e646572206973206e6f7420612070726f7879206f6620746865206163636f756e7420746f2062652070726f786965642e2050726f787920726567697374726174696f6e206e6f7420666f756e642e2054686572652061726520746f6f206d616e792070726f786965732072656769737465726564206f7220746f6f206d616e7920616e6e6f756e63656d656e74732070656e64696e672e00000000000000f67d10000c00000000000000dca21000010000000000000000000000ef7d10000700000000000000e4a21000010000000000000000000000e37d10000c00000000000000eca21000010000000000000000000000cf7d10001400000000000000f4a21000010000000000000000000000c57d10000a00000000000000fca21000010000000000000000000000b67d10000f0000000000000004a31000010000000000000000000000ab7d10000b000000000000000ca31000010000000000000000000000a17d10000a0000000000000014a310000100000000000000000000008e7d100013000000000000001ca31000010000000000000000000000827d10000c0000000000000024a31000010000000000000000000000747d10000e000000000000002ca310000100000000000000000000005a7d10001a0000000000000034a31000010000000000000000000000e0e1120009000000000000003ca31000010000000000000000000000487d1000120000000000000044a31000010000000000000000000000387d100010000000000000004ca31000010000000000000000000000277d1000110000000000000054a31000010000000000000000000000027e100012000000000000005ca310000100000000000000d1a5100031000000aba510002600000089a510002200000062a510002700000030a510003200000011a510001f00000000a5100011000000eca4100014000000cba4100021000000a8a410002300000085a41000230000005fa410002600000051a410000e00000018a4100039000000e4a3100034000000a4a310004000000064a31000400000002050726564696374696f6e20726567617264696e67207265706c6163656d656e74206166746572206d656d6265722072656d6f76616c2069732077726f6e672e205468652072656e6f756e63696e67206f726967696e2070726573656e74656420612077726f6e67206052656e6f756e63696e676020706172616d657465722e205468652070726f766964656420636f756e74206f66206e756d626572206f6620766f74657320697320696e636f72726563742e205468652070726f766964656420636f756e74206f66206e756d626572206f662063616e6469646174657320697320696e636f72726563742e204e6f742061206d656d6265722e2043616e64696461746520646f6573206e6f74206861766520656e6f7567682066756e64732e2052756e6e65722063616e6e6f742072652d7375626d69742063616e6469646163792e204d656d6265722063616e6e6f742072652d7375626d69742063616e6469646163792e204475706c6963617465642063616e646964617465207375626d697373696f6e2e2043616e6e6f74207265706f72742073656c662e204d757374206265206120766f7465722e20566f7465722063616e206e6f742070617920766f74696e6720626f6e642e2043616e6e6f7420766f74652077697468207374616b65206c657373207468616e206d696e696d756d2062616c616e63652e2043616e6e6f7420766f7465206d6f7265207468616e206d6178696d756d20616c6c6f7765642e2043616e6e6f7420766f7465206d6f7265207468616e2063616e646964617465732e204d75737420766f746520666f72206174206c65617374206f6e652063616e6469646174652e2043616e6e6f7420766f7465207768656e206e6f2063616e64696461746573206f72206d656d626572732065786973742e0000e613130056000000e900000001000000417070726f76616c73496e636f6e73697374656e74207374617465202d20636f756c646e277420736574746c6520696d62616c616e636520666f722066756e6473207370656e7420627920747265617375727953757065724f664e6f745472616e73666572496e5573654e6f744f776e65724e6f7441737369676e65645065726d616e656e7400000000000078a71000050000000000000080a7100001000000000000000000000098a7100012000000000000000000000038071200080000000000000028a8100002000000000000000000000058a81000140000000000000000000000f8a81000040000000000000080a71000010000000000000000000000fca810001200000000000000000000002c0912000e000000000000008ca91000030000000000000000000000d4a910001500000000000000000000007caa1000060000000000000080a7100001000000000000000000000084aa10001100000000000000636c61696d00000000000000a00e13000500000000000000d7ae10000f00000097b11000270000005431130000000000beb110003800000054311300000000006c0e1300340000005431130000000000f6b110003d000000543113000000000016ae1000250000005431130000000000f2eb12000b000000bcfb11000a00000028ac10002700000020b01000190000006cac10000d00000079ac1000140000008dac10002500000036ec12000c00000000000000871913000300000000000000e3f812000c00000000000000a00e13000500000000000000d7ae10000f00000039b010005800000091b010002f00000054311300000000006c0e1300340000005431130000000000c0b010004a0000006dad100058000000543113000000000016ae1000250000005431130000000000f2eb12000b000000bcfb11000a00000028ac1000270000000ab110001a0000006cac10000d00000079ac100014000000c0ef12000d00000024b11000390000005db110003a00000036ec12000c00000066726565e6ae10002600000054311300000000000caf100058000000543113000000000064af1000560000005431130000000000baaf1000440000005431130000000000feaf1000220000005431130000000000f2eb12000b000000bcfb11000a00000028ac10002700000020b01000190000006cac10000d00000079ac1000140000008dac10002500000036ec12000c00000000000000871913000300000000000000e3f812000c00000000000000a00e13000500000000000000d7ae10000f000000000000007caa10000600000000000000a1fb120004000000b2ac10005600000008ad10003b000000543113000000000075fa110032000000543113000000000043ad10002a0000006dad100058000000c5ad100051000000543113000000000016ae1000250000005431130000000000f2eb12000b000000bcfb11000a00000028ac1000270000003bae10001f0000006cac10000d00000079ac100014000000c0ef12000d0000005aae10003e00000098ae10003f00000036ec12000c000000667265657a6500000cab10005a000000543113000000000066ab100057000000bdab10001c0000005431130000000000d9ab10002c000000543113000000000005ac1000230000005431130000000000f2eb12000b000000bcfb11000a00000028ac1000270000004fac10001d0000006cac10000d00000079ac1000140000008dac10002500000036ec12000c00000020467265657a6520616e20696e64657820736f2069742077696c6c20616c7761797320706f696e7420746f207468652073656e646572206163636f756e742e205468697320636f6e73756d657320746865206465706f7369742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d75737420686176652061206e6f6e2d66726f7a656e206163636f756e742060696e646578602e202d2060696e646578603a2074686520696e64657820746f2062652066726f7a656e20696e20706c6163652e20456d6974732060496e64657846726f7a656e60206966207375636365737366756c2e202d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202d20557020746f206f6e6520736c617368206f7065726174696f6e2e202d204f6e65206576656e742e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d202d204442205765696768743a203120526561642f577269746520284163636f756e74732920466f72636520616e20696e64657820746f20616e206163636f756e742e205468697320646f65736e277420726571756972652061206465706f7369742e2049662074686520696e64657820697320616c72656164792068656c642c207468656e20616e79206465706f736974206973207265696d62757273656420746f206974732063757272656e74206f776e65722e202d2060696e646578603a2074686520696e64657820746f206265202872652d2961737369676e65642e202d20606e6577603a20746865206e6577206f776e6572206f662074686520696e6465782e20546869732066756e6374696f6e2069732061206e6f2d6f7020696620697420697320657175616c20746f2073656e6465722e202d2060667265657a65603a2069662073657420746f206074727565602c2077696c6c20667265657a652074686520696e64657820736f2069742063616e6e6f74206265207472616e736665727265642e20456d6974732060496e64657841737369676e656460206966207375636365737366756c2e202d20557020746f206f6e652072657365727665206f7065726174696f6e2e202020202d2052656164733a20496e6469636573204163636f756e74732c2053797374656d204163636f756e7420286f726967696e616c206f776e657229202020202d205772697465733a20496e6469636573204163636f756e74732c2053797374656d204163636f756e7420286f726967696e616c206f776e657229543a3a4163636f756e74496e646578204672656520757020616e20696e646578206f776e6564206279207468652073656e6465722e205061796d656e743a20416e792070726576696f7573206465706f73697420706c6163656420666f722074686520696e64657820697320756e726573657276656420696e207468652073656e646572206163636f756e742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206f776e2074686520696e6465782e202d2060696e646578603a2074686520696e64657820746f2062652066726565642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e20456d6974732060496e646578467265656460206966207375636365737366756c2e202d204f6e652072657365727665206f7065726174696f6e2e2041737369676e20616e20696e64657820616c7265616479206f776e6564206279207468652073656e64657220746f20616e6f74686572206163636f756e742e205468652062616c616e6365207265736572766174696f6e206973206566666563746976656c79207472616e7366657272656420746f20746865206e6577206163636f756e742e202d2060696e646578603a2074686520696e64657820746f2062652072652d61737369676e65642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e202d204f6e65207472616e73666572206f7065726174696f6e2e202020202d2052656164733a20496e6469636573204163636f756e74732c2053797374656d204163636f756e742028726563697069656e7429202020202d205772697465733a20496e6469636573204163636f756e74732c2053797374656d204163636f756e742028726563697069656e74292041737369676e20616e2070726576696f75736c7920756e61737369676e656420696e6465782e205061796d656e743a20604465706f736974602069732072657365727665642066726f6d207468652073656e646572206163636f756e742e202d2060696e646578603a2074686520696e64657820746f20626520636c61696d65642e2054686973206d757374206e6f7420626520696e207573652e00000000008cb21000080000000102000000000000d7ae10000f0000000000000094b21000220000000000000000000000000000000000000054311300b8b210000000000000000000c8b210000100000000000000000000004163636f756e747328543a3a4163636f756e7449642c2042616c616e63654f663c543e2c20626f6f6c29000012000000000000000100000023000000d0b210002200000020546865206c6f6f6b75702066726f6d20696e64657820746f206163636f756e742e00000000000048031200070000000000000057a912000c00000000000000543113002cb3100000000000000000003cb3100001000000000000001200000000000000010000002a00000044b310002b00000020546865206465706f736974206e656564656420666f7220726573657276696e6720616e20696e6465782e0000000000f4b310000d0000000000000004b4100002000000000000000000000014b410000100000000000000000000001cb410000a0000000000000028b4100001000000000000000000000030b4100001000000000000000000000038b410000b0000000000000044b4100002000000000000000000000054b410000100000000000000496e64657841737369676e656400000079e5120009000000a6b410000c000000ecb410002d000000496e64657846726565640000a6b410000c000000b2b410003a000000496e64657846726f7a656e00a6b410000c00000079e51200090000005cb410004a0000002041206163636f756e7420696e64657820686173206265656e2066726f7a656e20746f206974732063757272656e74206163636f756e742049442e205c5b696e6465782c2077686f5c5d4163636f756e74496e6465782041206163636f756e7420696e64657820686173206265656e2066726565642075702028756e61737369676e6564292e205c5b696e6465785c5d2041206163636f756e7420696e646578207761732061737369676e65642e205c5b696e6465782c2077686f5c5d4e6f74537562546f6f4d616e7952656769737472617273546f6f4d616e794669656c6473496e76616c6964546172676574496e76616c6964496e646578496e76616c69644a756467656d656e744a756467656d656e74476976656e537469636b794a756467656d656e744e6f4964656e746974794665654368616e676564456d707479496e6465784e6f744e616d6564546f6f4d616e795375624163636f756e74734e6f744f776e6564000000000058b810000d0000000000000068b8100001000000000000000000000080b810000d0000000000000000000000e8b810000c00000000000000f4b810000100000000000000000000000cb91000130000000000000000000000a4b910000800000000000000acb91000010000000000000000000000c4b910001500000000000000000000006cba10000e00000000000000543113000000000000000000000000007cba10001200000000000000000000000cbb1000110000000000000020bb100002000000000000000000000050bb100017000000000000000000000008bc10000e0000000000000018bc100001000000000000000000000030bc1000110000000000000000000000b8bc10000700000000000000c0bc1000020000000000000000000000f0bc10000d000000000000000000000058bd10000e0000000000000068bd100002000000000000000000000098bd10000d000000000000000000000000be10000a000000000000000cbe10000200000000000000000000003cbe10000d0000000000000000000000a4be10001100000000000000b8be100003000000000000000000000000bf100013000000000000000000000098bf10000d0000000000000024f81100010000000000000000000000a8bf100013000000000000000000000040c01000070000000000000048c0100002000000000000000000000078c01000070000000000000000000000b0c010000a0000000000000048c01000020000000000000000000000bcc01000040000000000000000000000dcc010000a00000000000000e8c0100001000000000000000000000000c1100007000000000000000000000038c1100008000000000000005431130000000000000000000000000040c110000a000000000000006164645f7265676973747261720000000000000069d510000700000000000000e3f812000c00000048d410001f000000543113000000000067d41000400000005431130000000000a7d410002b0000005431130000000000d2d41000260000005431130000000000f2eb12000b000000f8d410004a00000042d51000270000006cac10000d00000036ec12000c0000007365745f6964656e746974790000000038d4100004000000000000003cd410000c0000003ed210004b000000543113000000000089d2100056000000dfd210001500000054311300000000006c0e1300340000005431130000000000f4d2100024000000543113000000000018d31000230000005431130000000000f2eb12000b0000003bd31000120000004dd310004800000095d3100039000000ced3100021000000efd31000490000006cac10000d00000036ec12000c0000007365745f737562730000000021d21000040000000000000025d2100019000000f7cf10002400000054311300000000001bd010005600000071d010004c00000054311300000000003ac2100059000000acce10000a0000005431130000000000bdd010002d0000005431130000000000f2eb12000b000000ead010000d000000f7d010003a00000022cf10003600000031d1100022000000946412000600000053d11000380000008bd1100030000000bbd1100031000000ecd110003500000036ec12000c000000636c6561725f6964656e74697479000021ce10004f000000543113000000000070ce10003c00000054311300000000003ac2100059000000acce10000a0000005431130000000000b6ce1000270000005431130000000000f2eb12000b000000ddce100011000000eece10003400000022cf10003600000058cf100049000000a1cf100023000000c4cf1000330000006cac10000d00000036ec12000c000000726571756573745f6a756467656d656e74000000000000003bc81000090000000000000044c8100017000000000000001ace100007000000000000004db612001500000060cc100026000000543113000000000086cc100056000000dccc100007000000543113000000000042cb10004e00000090cb1000150000005431130000000000e3cc1000480000002bcd100056000000543113000000000081cd10000d0000008ecd10002f000000bdcd1000040000005431130000000000c1cd10002a0000005431130000000000f2eb12000b000000b6c710000e00000004c6100021000000ebcd10002f0000006cac10000d00000036ec12000c00000063616e63656c5f726571756573740000000000003bc81000090000000000000052cc10000e000000e8ca10001b000000543113000000000003cb10003f000000543113000000000042cb10004e00000090cb1000150000005431130000000000a5cb1000520000005431130000000000f7cb10002c0000005431130000000000f2eb12000b000000b6c710000e00000004c610002100000023cc10002300000046cc10000c00000036ec12000c0000007365745f6665650000000000a00e1300050000000000000044c810001700000000000000e5ca100003000000000000004db61200150000004eca100047000000543113000000000071c6100056000000a6c81000290000005431130000000000cfc810003e00000095ca1000160000005431130000000000f2eb12000b00000051c910000a0000005bc910001f000000abca10003a00000036ec12000c0000007365745f6163636f756e745f6964000000000000a00e1300050000000000000044c810001700000000000000871913000300000000000000e3f812000c000000c8c9100030000000543113000000000071c6100056000000a6c81000290000005431130000000000cfc810003e000000f8c910001d0000005431130000000000f2eb12000b00000051c910000a0000005bc910001f00000015ca10003900000036ec12000c0000007365745f6669656c6473000000000000a00e1300050000000000000044c810001700000000000000b4c910000600000000000000bac910000e0000007bc810002b000000543113000000000071c6100056000000a6c81000290000005431130000000000cfc810003e0000000dc91000440000005431130000000000f2eb12000b00000051c910000a0000005bc910001f0000007ac910003a00000036ec12000c00000070726f766964655f6a756467656d656e74000000000000003bc81000090000000000000044c810001700000000000000739a1200060000000000000085fc110023000000000000005bc81000090000000000000064c810001700000042c610002f000000543113000000000071c6100056000000c7c610002d0000005431130000000000f4c610004900000058c5100056000000aec510001e0000003dc7100053000000543113000000000090c71000260000005431130000000000f2eb12000b000000b6c710000e000000c4c7100022000000e6c71000260000000cc810002f0000006cac10000d00000036ec12000c0000006b696c6c5f6964656e74697479000000fcc310005100000054311300000000004dc4100059000000a6c4100052000000f8c4100021000000543113000000000019c510003f000000543113000000000058c5100056000000aec510001e0000005431130000000000ccc51000260000005431130000000000f2eb12000b000000f2c510001200000004c610002100000025c610001d0000006cac10000d00000036ec12000c0000006164645f737562000000000091c31000030000000000000085fc11002300000000000000f4c310000400000000000000f8c3100004000000c8c310002c0000005431130000000000b4c11000580000006bc310000f00000054311300000000003ac21000590000007ac310001700000072656e616d655f737562000094c310003400000054311300000000003ac21000590000007ac310001700000072656d6f76655f73756200000000000091c31000030000000000000085fc1100230000003ac31000310000005431130000000000b4c11000580000006bc310000f00000054311300000000003ac21000590000007ac3100017000000717569745f73756290c11000240000005431130000000000b4c11000580000000cc210002e00000054311300000000003ac210005900000093c21000100000005431130000000000a3c2100052000000f5c21000450000002052656d6f7665207468652073656e6465722061732061207375622d6163636f756e742e205061796d656e743a2042616c616e636520726573657276656420627920612070726576696f757320607365745f73756273602063616c6c20666f72206f6e65207375622077696c6c20626520726570617472696174656420746f207468652073656e64657220282a6e6f742a20746865206f726967696e616c206465706f7369746f72292e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d7573742068617665206120726567697374657265642073757065722d6964656e746974792e204e4f54453a20546869732073686f756c64206e6f74206e6f726d616c6c7920626520757365642c206275742069732070726f766964656420696e207468652063617365207468617420746865206e6f6e2d20636f6e74726f6c6c6572206f6620616e206163636f756e74206973206d616c6963696f75736c7920726567697374657265642061732061207375622d6163636f756e742e2052656d6f76652074686520676976656e206163636f756e742066726f6d207468652073656e646572277320737562732e20746f207468652073656e6465722e20737562206964656e74697479206f662060737562602e73756220416c74657220746865206173736f636961746564206e616d65206f662074686520676976656e207375622d6163636f756e742e204164642074686520676976656e206163636f756e7420746f207468652073656e646572277320737562732e64617461446174612052656d6f766520616e206163636f756e742773206964656e7469747920616e64207375622d6163636f756e7420696e666f726d6174696f6e20616e6420736c61736820746865206465706f736974732e205061796d656e743a2052657365727665642062616c616e6365732066726f6d20607365745f737562736020616e6420607365745f6964656e74697479602061726520736c617368656420616e642068616e646c65642062792060536c617368602e20566572696669636174696f6e2072657175657374206465706f7369747320617265206e6f742072657475726e65643b20746865792073686f756c642062652063616e63656c6c6564206d616e75616c6c79207573696e67206063616e63656c5f72657175657374602e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206d617463682060543a3a466f7263654f726967696e602e202d2060746172676574603a20746865206163636f756e742077686f7365206964656e7469747920746865206a756467656d656e742069732075706f6e2e2054686973206d75737420626520616e206163636f756e742020207769746820612072656769737465726564206964656e746974792e20456d69747320604964656e746974794b696c6c656460206966207375636365737366756c2e202d20604f2852202b2053202b205829602e202d204f6e652062616c616e63652d72657365727665206f7065726174696f6e2e202d206053202b2032602073746f72616765206d75746174696f6e732e2050726f766964652061206a756467656d656e7420666f7220616e206163636f756e742773206964656e746974792e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74206f6620746865207265676973747261722077686f736520696e64657820697320607265675f696e646578602e202d20607265675f696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973206265696e67206d6164652e202d20606a756467656d656e74603a20746865206a756467656d656e74206f662074686520726567697374726172206f6620696e64657820607265675f696e646578602061626f75742060746172676574602e20456d69747320604a756467656d656e74476976656e60206966207375636365737366756c2e202d20604f2852202b205829602e202d204f6e652062616c616e63652d7472616e73666572206f7065726174696f6e2e202d20557020746f206f6e65206163636f756e742d6c6f6f6b7570206f7065726174696f6e2e202d2053746f726167653a2031207265616420604f285229602c2031206d757461746520604f2852202b205829602e7265675f696e646578436f6d706163743c526567697374726172496e6465783e6a756467656d656e744a756467656d656e743c42616c616e63654f663c543e3e2053657420746865206669656c6420696e666f726d6174696f6e20666f722061207265676973747261722e206f6620746865207265676973747261722077686f736520696e6465782069732060696e646578602e202d2060696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f73652066656520697320746f206265207365742e202d20606669656c6473603a20746865206669656c64732074686174207468652072656769737472617220636f6e6365726e73207468656d73656c76657320776974682e202d20604f285229602e202d204f6e652073746f72616765206d75746174696f6e20604f285229602e202d2042656e63686d61726b3a20372e343634202b2052202a20302e33323520c2b57320286d696e207371756172657320616e616c79736973296669656c64734964656e746974794669656c6473204368616e676520746865206163636f756e74206173736f63696174656420776974682061207265676973747261722e202d20606e6577603a20746865206e6577206163636f756e742049442e202d2042656e63686d61726b3a20382e383233202b2052202a20302e333220c2b57320286d696e207371756172657320616e616c797369732920536574207468652066656520726571756972656420666f722061206a756467656d656e7420746f206265207265717565737465642066726f6d2061207265676973747261722e202d2060666565603a20746865206e6577206665652e202d2042656e63686d61726b3a20372e333135202b2052202a20302e33323920c2b57320286d696e207371756172657320616e616c79736973296665652043616e63656c20612070726576696f757320726571756573742e205061796d656e743a20412070726576696f75736c79207265736572766564206465706f7369742069732072657475726e6564206f6e20737563636573732e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520612072656769737465726564206964656e746974792e202d20607265675f696e646578603a2054686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973206e6f206c6f6e676572207265717565737465642e20456d69747320604a756467656d656e74556e72657175657374656460206966207375636365737366756c2e202d204f6e652073746f72616765206d75746174696f6e20604f2852202b205829602e202d204f6e65206576656e74526567697374726172496e64657820526571756573742061206a756467656d656e742066726f6d2061207265676973747261722e205061796d656e743a204174206d6f737420606d61785f666565602077696c6c20626520726573657276656420666f72207061796d656e7420746f2074686520726567697374726172206966206a756467656d656e7420676976656e2e202d20607265675f696e646578603a2054686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973207265717565737465642e202d20606d61785f666565603a20546865206d6178696d756d206665652074686174206d617920626520706169642e20546869732073686f756c64206a757374206265206175746f2d706f70756c617465642061733a206060606e6f636f6d70696c652053656c663a3a7265676973747261727328292e676574287265675f696e646578292e756e7772617028292e6665652060606020456d69747320604a756467656d656e7452657175657374656460206966207375636365737366756c2e202d2053746f726167653a2031207265616420604f285229602c2031206d757461746520604f2858202b205229602e6d61785f66656520436c65617220616e206163636f756e742773206964656e7469747920696e666f20616e6420616c6c207375622d6163636f756e747320616e642072657475726e20616c6c206465706f736974732e205061796d656e743a20416c6c2072657365727665642062616c616e636573206f6e20746865206163636f756e74206172652072657475726e65642e206964656e746974792e20456d69747320604964656e74697479436c656172656460206966207375636365737366756c2e202d20604f2852202b2053202b205829602020202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292e2020202d2077686572652060536020737562732d636f756e742028686172642d20616e64206465706f7369742d626f756e646564292e2020202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e646564292e202d204f6e652062616c616e63652d756e72657365727665206f7065726174696f6e2e202d206032602073746f7261676520726561647320616e64206053202b2032602073746f726167652064656c6574696f6e732e2053657420746865207375622d6163636f756e7473206f66207468652073656e6465722e205061796d656e743a20416e79206167677265676174652062616c616e63652072657365727665642062792070726576696f757320607365745f73756273602063616c6c732077696c6c2062652072657475726e656420616e6420616e20616d6f756e7420605375624163636f756e744465706f736974602077696c6c20626520726573657276656420666f722065616368206974656d20696e206073756273602e202d206073756273603a20546865206964656e74697479277320286e657729207375622d6163636f756e74732e202d20604f2850202b205329602020202d20776865726520605060206f6c642d737562732d636f756e742028686172642d20616e64206465706f7369742d626f756e646564292e202d204174206d6f7374206f6e652062616c616e6365206f7065726174696f6e732e2020202d206050202b2053602073746f72616765206d75746174696f6e732028636f64656320636f6d706c657869747920604f28312960292020202d204f6e652073746f7261676520726561642028636f64656320636f6d706c657869747920604f28502960292e2020202d204f6e652073746f726167652077726974652028636f64656320636f6d706c657869747920604f28532960292e2020202d204f6e652073746f726167652d6578697374732028604964656e746974794f663a3a636f6e7461696e735f6b657960292e737562735665633c28543a3a4163636f756e7449642c2044617461293e2053657420616e206163636f756e742773206964656e7469747920696e666f726d6174696f6e20616e6420726573657276652074686520617070726f707269617465206465706f7369742e20496620746865206163636f756e7420616c726561647920686173206964656e7469747920696e666f726d6174696f6e2c20746865206465706f7369742069732074616b656e2061732070617274207061796d656e7420666f7220746865206e6577206465706f7369742e202d2060696e666f603a20546865206964656e7469747920696e666f726d6174696f6e2e20456d69747320604964656e7469747953657460206966207375636365737366756c2e202d20604f2858202b205827202b205229602020202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e646564292020202d20776865726520605260206a756467656d656e74732d636f756e7420287265676973747261722d636f756e742d626f756e64656429202d204f6e652062616c616e63652072657365727665206f7065726174696f6e2e202d204f6e652073746f72616765206d75746174696f6e2028636f6465632d7265616420604f285827202b205229602c20636f6465632d777269746520604f2858202b20522960292e696e666f4964656e74697479496e666f2041646420612072656769737472617220746f207468652073797374656d2e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060543a3a5265676973747261724f726967696e602e202d20606163636f756e74603a20746865206163636f756e74206f6620746865207265676973747261722e20456d6974732060526567697374726172416464656460206966207375636365737366756c2e202d20604f2852296020776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e64656420616e6420636f64652d626f756e646564292e202d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28522960292e6163636f756e7400000000d0d610000a0000000105000000000000e3f812000c00000000000000dad610001a0000000000000000000000000000000000000054311300f4d61000000000000000000004d710000300000000000000000000000000000067a61000070000000102000000000000e3f812000c000000000000001cd7100014000000000000000000000000000000000000005431130030d71000000000000000000040d710000200000000000000000000000000000050d71000060000000105000000000000e3f812000c0000000000000056d7100021000000000000000000000000000000000000005431130078d71000000000000000000088d7100005000000000000000100000000000000b0d710000a0000000000000000000000bad71000360000000000000000000000000000000000000000000000000000000000000054311300f0d71000000000000000000000d810000400000000000000010000004964656e746974794f66526567697374726174696f6e3c42616c616e63654f663c543e3e1200000000000000010000004c00000008da1000480000005431130000000000f2c112003000000028543a3a4163636f756e7449642c2044617461291200000000000000010000004d0000005cd9100058000000b4d9100054000000537562734f662842616c616e63654f663c543e2c205665633c543a3a4163636f756e7449643e29001200000000000000010000004e000000e7d810002e000000543113000000000015d91000470000005431130000000000f2c1120030000000526567697374726172735665633c4f7074696f6e3c526567697374726172496e666f3c42616c616e63654f663c543e2c20543a3a4163636f756e7449643e3e3e1200000000000000010000004f00000020d810005300000073d810002a00000054311300000000009dd810004a0000002054686520736574206f6620726567697374726172732e204e6f7420657870656374656420746f206765742076657279206269672061732063616e206f6e6c79206265206164646564207468726f7567682061207370656369616c206f726967696e20286c696b656c79206120636f756e63696c206d6f74696f6e292e2054686520696e64657820696e746f20746869732063616e206265206361737420746f2060526567697374726172496e6465786020746f2067657420612076616c69642076616c75652e20416c7465726e6174697665202273756222206964656e746974696573206f662074686973206163636f756e742e20546865206669727374206974656d20697320746865206465706f7369742c20746865207365636f6e64206973206120766563746f72206f6620746865206163636f756e74732e205468652073757065722d6964656e74697479206f6620616e20616c7465726e6174697665202273756222206964656e7469747920746f676574686572207769746820697473206e616d652c2077697468696e207468617420636f6e746578742e20496620746865206163636f756e74206973206e6f7420736f6d65206f74686572206163636f756e742773207375622d6964656e746974792c207468656e206a75737420604e6f6e65602e20496e666f726d6174696f6e20746861742069732070657274696e656e7420746f206964656e746966792074686520656e7469747920626568696e6420616e206163636f756e742e00000000a0db10000c0000000000000057a912000c0000000000000054311300acdb10000000000000000000bcdb1000010000000000000000000000c4db10000c0000000000000057a912000c0000000000000054311300d0db10000000000000000000e0db1000010000000000000000000000e8db1000110000000000000057a912000c0000000000000054311300fcdb100000000000000000000cdc100003000000000000000000000024dc10000e00000000000000cbed120003000000000000005431130034dc1000000000000000000044dc10000100000000000000000000004cdc10001300000000000000cbed120003000000000000005431130060dc1000000000000000000070dc100002000000000000000000000080dc10000d00000000000000cbed120003000000000000005431130090dc10000000000000000000a0dc1000020000000000000042617369634465706f7369741200000000000000010000005000000041df1000360000004669656c644465706f7369741200000000000000010000003e000000f6de10004b0000005375624163636f756e744465706f73697400000012000000000000000100000051000000f7dd10005900000050de10005c000000acde10004a0000004d61785375624163636f756e7473000012000000000000000100000052000000b4dd1000430000004d61784164646974696f6e616c4669656c6473001200000000000000010000005200000023dd1000590000007cdd1000380000004d61785265676973747261727300000012000000000000000100000049000000b0dc10005400000004dd10001f000000204d61786d696d756d206e756d626572206f66207265676973747261727320616c6c6f77656420696e207468652073797374656d2e204e656564656420746f20626f756e642074686520636f6d706c6578697479206f662c20652e672e2c207570646174696e67206a756467656d656e74732e204d6178696d756d206e756d626572206f66206164646974696f6e616c206669656c64732074686174206d61792062652073746f72656420696e20616e2049442e204e656564656420746f20626f756e642074686520492f4f20726571756972656420746f2061636365737320616e206964656e746974792c206275742063616e2062652070726574747920686967682e20546865206d6178696d756d206e756d626572206f66207375622d6163636f756e747320616c6c6f77656420706572206964656e746966696564206163636f756e742e2054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564207375626163636f756e742e20546869732073686f756c64206163636f756e7420666f722074686520666163742074686174206f6e652073746f72616765206974656d27732076616c75652077696c6c20696e637265617365206279207468652073697a65206f6620616e206163636f756e742049442c20616e642074686572652077696c6c20626520616e6f746865722074726965206974656d2077686f73652076616c7565206973207468652073697a65206f6620616e206163636f756e7420494420706c75732033322062797465732e2054686520616d6f756e742068656c64206f6e206465706f73697420706572206164646974696f6e616c206669656c6420666f7220612072656769737465726564206964656e746974792e2054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564206964656e746974792e000000000030e110000b00000000000000fce412000100000000000000000000003ce1100001000000000000000000000044e110000f00000000000000c0f5110002000000000000000000000054e110000100000000000000000000005ce110000e00000000000000c0f511000200000000000000000000006ce1100001000000000000000000000074e11000120000000000000088e1100002000000000000000000000098e11000010000000000000000000000a0e11000140000000000000088e11000020000000000000000000000b4e1100001000000000000000000000066b510000e0000000000000088e11000020000000000000000000000bce11000010000000000000000000000c4e110000e00000000000000d4e11000010000000000000000000000dce11000010000000000000000000000e4e110001000000000000000fc021200030000000000000000000000f4e11000010000000000000000000000fce110001200000000000000fc02120003000000000000000000000010e2100002000000000000000000000020e210001200000000000000fc02120003000000000000000000000034e2100002000000000000004964656e7469747953657400f6e41000440000004964656e74697479436c656172656400b1e41000450000004964656e746974794b696c6c656400006ee41000430000004a756467656d656e74526571756573746564000079e512000900000052cc10000e0000002de41000410000004a756467656d656e74556e726571756573746564f1e310003c000000afe31000420000005265676973747261724164646564000052cc10000e00000084e310002b0000005375624964656e7469747941646465642fe31000550000005375624964656e7469747952656d6f7665640000d5e210004300000018e31000170000005375624964656e746974795265766f6b6564000044e21000470000008be210004a0000002041207375622d6964656e746974792077617320636c65617265642c20616e642074686520676976656e206465706f7369742072657061747269617465642066726f6d20746865206d61696e206964656e74697479206163636f756e7420746f20746865207375622d6964656e74697479206163636f756e742e205c5b7375622c206d61696e2c206465706f7369745c5d2041207375622d6964656e74697479207761732072656d6f7665642066726f6d20616e206964656e7469747920616e6420746865206465706f7369742066726565642e205c5b7375622c206d61696e2c206465706f7369745c5d2041207375622d6964656e746974792077617320616464656420746f20616e206964656e7469747920616e6420746865206465706f73697420706169642e205c5b7375622c206d61696e2c206465706f7369745c5d204120726567697374726172207761732061646465642e205c5b7265676973747261725f696e6465785c5d2041206a756467656d656e742077617320676976656e2062792061207265676973747261722e205c5b7461726765742c207265676973747261725f696e6465785c5d2041206a756467656d656e74207265717565737420776173207265747261637465642e205c5b77686f2c207265676973747261725f696e6465785c5d2041206a756467656d656e74207761732061736b65642066726f6d2061207265676973747261722e205c5b77686f2c207265676973747261725f696e6465785c5d2041206e616d65207761732072656d6f76656420616e642074686520676976656e2062616c616e636520736c61736865642e205c5b77686f2c206465706f7369745c5d2041206e616d652077617320636c65617265642c20616e642074686520676976656e2062616c616e63652072657475726e65642e205c5b77686f2c206465706f7369745c5d2041206e616d652077617320736574206f72207265736574202877686963682077696c6c2072656d6f766520616c6c206a756467656d656e7473292e205c5b77686f5c5d4d6178576569676874546f6f4c6f77556e657870656374656454696d65706f696e7457726f6e6754696d65706f696e744e6f54696d65706f696e7453656e646572496e5369676e61746f726965735369676e61746f726965734f75744f664f72646572546f6f4d616e795369676e61746f72696573546f6f4665775369676e61746f726965734e6f417070726f76616c734e6565646564416c7265616479417070726f7665644d696e696d756d5468726573686f6c64416c726561647953746f72656400000000000000b0e610001400000000000000c4e61000020000000000000000000000f4e6100010000000000000000000000074e7100008000000000000007ce710000600000000000000000000000ce810002e00000000000000000000007ce9100010000000000000008ce9100005000000000000000000000004ea100024000000000000000000000024eb10000f0000000000000034eb100004000000000000000000000094eb10001a0000000000000061735f6d756c74695f7468726573686f6c645f310000000059f0100011000000000000002c1a13001100000000000000a80e13000400000000000000ac0e130018000000d5f710005500000054311300000000006c0e13003400000054311300000000002af81000500000007af8100041000000eaf41000230000005431130000000000bbf810002f0000005431130000000000f2eb12000b000000eaf8100047000000fbf610002000000031f9100012000000aef710001300000036ec12000c00000061735f6d756c746900000000176b12000900000000000000a50e1300030000000000000059f0100011000000000000002c1a130011000000000000007df410000f000000000000008cf410002100000000000000a80e13000400000000000000c1f710000a00000000000000cbf710000a00000000000000a1fb12000400000000000000adf410000a00000000000000b7f41000060000009df0100056000000f3f010003f0000005431130000000000bdf410002d000000543113000000000032f110004c0000007ef1100050000000cef110000e00000054311300000000006c0e1300340000005431130000000000ecec10005600000042ed10005100000093ed10001c000000dcf110005700000033f210005500000088f2100036000000eaf410002300000054311300000000000df510004800000055f510004700000054311300000000009cf5100057000000f3f510005600000049f61000380000005431130000000000f2eb12000b00000081f610001500000064ee10003400000098ee100050000000e8ee10005200000096f61000490000003aef1000300000000cf310003600000042f310003f0000006cac10000d000000dff610001c00000081f310004c000000cdf3100024000000f1f310002d000000fbf6100020000000c0ef12000d0000001bf710004900000064f710004a000000aef710001300000036ec12000c000000617070726f76655f61735f6d756c746900000000176b12000900000000000000a50e1300030000000000000059f0100011000000000000002c1a130011000000000000007df410000f000000000000008cf4100021000000000000008cf01000090000000000000095f010000800000000000000adf410000a00000000000000b7f41000060000009df0100056000000f3f010003f000000543113000000000032f110004c0000007ef1100050000000cef110000e00000054311300000000006c0e1300340000005431130000000000ecec10005600000042ed10005100000093ed10001c000000dcf110005700000033f210005500000088f210003600000026ee1000340000005431130000000000bef210004e0000005431130000000000f2eb12000b0000005aee10000a00000064ee10003400000098ee100050000000e8ee1000520000003aef1000300000000cf310003600000042f310003f0000006cac10000d00000081f310004c000000cdf3100024000000f1f310002d000000a9ef100023000000c0ef12000d0000001ef410002f0000004df410003000000036ec12000c00000063616e63656c5f61735f6d756c74690000000000176b12000900000000000000a50e1300030000000000000059f0100011000000000000002c1a130011000000000000006af01000090000000000000073f0100019000000000000008cf01000090000000000000095f010000800000064ec100056000000baec10003200000054311300000000006c0e1300340000005431130000000000ecec10005600000042ed10005100000093ed10001c000000afed10005800000007ee10001f00000026ee1000340000005431130000000000f2eb12000b0000005aee10000a00000064ee10003400000098ee100050000000e8ee1000520000003aef1000300000006cac10000d0000006aef1000220000008cef10001d000000a9ef100023000000c0ef12000d000000ccef10004600000012f010004700000036ec12000c0000002043616e63656c2061207072652d6578697374696e672c206f6e2d676f696e67206d756c7469736967207472616e73616374696f6e2e20416e79206465706f7369742072657365727665642070726576696f75736c7920666f722074686973206f7065726174696f6e2077696c6c20626520756e7265736572766564206f6e20737563636573732e202d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e202d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869732064697370617463682e204d6179206e6f7420626520656d7074792e202d206074696d65706f696e74603a205468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e20666f7220746869732064697370617463682e202d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e202d20604f285329602e202d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e202d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f662020207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2e202d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602e202d20492f4f3a2031207265616420604f285329602c206f6e652072656d6f76652e202d2053746f726167653a2072656d6f766573206f6e65206974656d2e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d20202020202d20526561643a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d2c20526566756e64204163636f756e742c2043616c6c7320202020202d2057726974653a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d2c20526566756e64204163636f756e742c2043616c6c736f746865725f7369676e61746f7269657374696d65706f696e7454696d65706f696e743c543a3a426c6f636b4e756d6265723e63616c6c5f686173685b75383b2033325d20526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e7420696620617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e205061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c757320607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f722069732063616e63656c6c65642e202d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e204966206974206973206e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2e204e4f54453a2049662074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2077616e7420746f20757365206061735f6d756c74696020696e73746561642e202d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292e202d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e202d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c207769746820612020206465706f7369742074616b656e20666f7220697473206c69666574696d65206f66202020604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e20202020202d20526561643a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d20202020202d2057726974653a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d6d617962655f74696d65706f696e744f7074696f6e3c54696d65706f696e743c543a3a426c6f636b4e756d6265723e3e6d61785f7765696768745765696768742049662074686572652061726520656e6f7567682c207468656e206469737061746368207468652063616c6c2e202d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e204e4f54453a20556e6c6573732074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2067656e6572616c6c792077616e7420746f207573652060617070726f76655f61735f6d756c74696020696e73746561642c2073696e6365206974206f6e6c7920726571756972657320612068617368206f66207468652063616c6c2e20526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c7420696620607468726573686f6c64602069732065786163746c79206031602e204f7468657277697365206f6e20737563636573732c20726573756c7420697320604f6b6020616e642074686520726573756c742066726f6d2074686520696e746572696f722063616c6c2c206966206974207761732065786563757465642c206d617920626520666f756e6420696e20746865206465706f736974656420604d756c7469736967457865637574656460206576656e742e202d20604f2853202b205a202b2043616c6c29602e202d204f6e652063616c6c20656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285a296020776865726520605a602069732074782d6c656e2e202d2054686520776569676874206f6620746865206063616c6c602e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d20202020202d2052656164733a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d2c2043616c6c7320286966206073746f72655f63616c6c602920202020202d205772697465733a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d2c2043616c6c7320286966206073746f72655f63616c6c6029202d20506c75732043616c6c205765696768744f706171756543616c6c73746f72655f63616c6c20496d6d6564696174656c792064697370617463682061206d756c74692d7369676e61747572652063616c6c207573696e6720612073696e676c6520617070726f76616c2066726f6d207468652063616c6c65722e202d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f206172652070617274206f6620746865206d756c74692d7369676e61747572652c2062757420646f206e6f7420706172746963697061746520696e2074686520617070726f76616c2070726f636573732e20526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c742e204f285a202b204329207768657265205a20697320746865206c656e677468206f66207468652063616c6c20616e6420432069747320657865637574696f6e207765696768742e202d204442205765696768743a204e6f6e650000000000f4f91000090000000205020000000000e3f812000c0000000000000095f010000800000000000000fdf9100034000000000000005431130034fa1000000000000000000044fa1000010000000000000000000000000000004cfa100005000000010600000000000095f01000080000000000000051fa10002800000000000000000000000000000000000000543113007cfa10000000000000000000543113000000000000000000000000004d756c7469736967734d756c74697369673c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e2c20543a3a4163636f756e7449643e000000120000000000000001000000230000008cfa10002500000043616c6c73284f706171756543616c6c2c20543a3a4163636f756e7449642c2042616c616e63654f663c543e29000000120000000000000001000000230000002054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e000000000000005cfb10000b0000000000000057a912000c000000000000005431130068fb1000000000000000000078fb100002000000000000000000000088fb10000d0000000000000057a912000c000000000000005431130098fb10000000000000000000a8fb1000010000000000000000000000b0fb10000e00000000000000a50e1300030000000000000054311300c0fb10000000000000000000d0fb100001000000000000004465706f7369744261736500120000000000000001000000530000006dfc10005c000000c9fc10001b0000004465706f736974466163746f720000001200000000000000010000004700000018fc1000550000004d61785369676e61746f72696573000012000000000000000100000054000000d8fb10004000000020546865206d6178696d756d20616d6f756e74206f66207369676e61746f7269657320616c6c6f77656420666f72206120676976656e206d756c74697369672e2054686520616d6f756e74206f662063757272656e6379206e65656465642070657220756e6974207468726573686f6c64207768656e206372656174696e672061206d756c746973696720657865637574696f6e2e20546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e672061206d756c746973696720657865637574696f6e206f7220746f2073746f726520612064697370617463682063616c6c20666f72206c617465722e0000000094fd10000b00000000000000a0fd1000030000000000000000000000b8fd1000010000000000000000000000c0fd10001000000000000000d0fd1000040000000000000000000000f0fd100002000000000000000000000000fe1000100000000000000010fe100005000000000000000000000038fe100001000000000000000000000040fe10001100000000000000d0fd100004000000000000000000000054fe100001000000000000004e65774d756c74697369670079e512000900000079e512000900000020ff10000800000089ff1000470000004d756c7469736967417070726f76616c79e51200090000000aff10001600000079e512000900000020ff10000800000028ff1000330000005bff10002e0000004d756c7469736967457865637574656479e51200090000000aff10001600000079e512000900000020ff100008000000637a12000e000000b4fe1000560000004d756c746973696743616e63656c6c65640000005cfe1000580000002041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e205c5b63616e63656c6c696e672c2074696d65706f696e742c206d756c74697369672c2063616c6c5f686173685c5d2041206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e205c5b617070726f76696e672c2074696d65706f696e742c206d756c74697369672c2063616c6c5f686173685c5d54696d65706f696e743c426c6f636b4e756d6265723e43616c6c486173682041206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e205c5b617070726f76696e672c2074696d65706f696e742c206d756c74697369672c2063616c6c5f686173685c5d2041206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e205c5b617070726f76696e672c206d756c74697369672c2063616c6c5f686173685c5d496e73756666696369656e7450726f706f7365727342616c616e636500000000700011000d0000000000000080001100020000000000000000000000b0001100090000000000000000000000f80011000f00000000000000080111000100000000000000000000002001110009000000000000000000000068011100100000000000000008011100010000000000000000000000780111000a0000000000000070726f706f73655f7370656e640000000000000048b612000500000000000000a00411001800000000000000b80411000b0000000000000085fc1100230000008b0311004b000000d60311004d00000023041100150000005431130000000000f2eb12000b0000000403110013000000380411002d000000650411003b00000036ec12000c00000072656a6563745f70726f706f73616c0000000000800311000b000000000000008765120016000000c50211003f0000005431130000000000f2df11002b0000005431130000000000f2eb12000b000000040311001300000017031100340000004b0311003500000036ec12000c000000617070726f76655f70726f706f73616cc8011100570000001f0211002b00000054311300000000004a0211002c0000005431130000000000f2eb12000b00000076021100140000008a02110024000000ae0211001700000036ec12000c00000020417070726f766520612070726f706f73616c2e2041742061206c617465722074696d652c207468652070726f706f73616c2077696c6c20626520616c6c6f636174656420746f207468652062656e656669636961727920616e6420746865206f726967696e616c206465706f7369742077696c6c2062652072657475726e65642e204d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a417070726f76654f726967696e602e202d20436f6d706c65786974793a204f2831292e202d20446252656164733a206050726f706f73616c73602c2060417070726f76616c7360202d20446257726974653a2060417070726f76616c73602052656a65637420612070726f706f736564207370656e642e20546865206f726967696e616c206465706f7369742077696c6c20626520736c61736865642e202d20436f6d706c65786974793a204f283129202d20446252656164733a206050726f706f73616c73602c206072656a65637465642070726f706f736572206163636f756e7460202d2044625772697465733a206050726f706f73616c73602c206072656a65637465642070726f706f736572206163636f756e746070726f706f73616c5f69642050757420666f727761726420612073756767657374696f6e20666f72207370656e64696e672e2041206465706f7369742070726f706f7274696f6e616c20746f207468652076616c756520697320726573657276656420616e6420736c6173686564206966207468652070726f706f73616c2069732072656a65637465642e2049742069732072657475726e6564206f6e6365207468652070726f706f73616c20697320617761726465642e202d20446252656164733a206050726f706f73616c436f756e74602c20606f726967696e206163636f756e7460202d2044625772697465733a206050726f706f73616c436f756e74602c206050726f706f73616c73602c20606f726967696e206163636f756e7460436f6d706163743c42616c616e63654f663c542c20493e3e62656e65666963696172790000000000e45712000d0000000000000000000000357c12000d0000000000000000000000000000000000000000000000000000000000000054311300cc0511000000000000000000dc05110001000000000000000100000000000000db571200090000000105000000000000357c12000d00000000000000e40511002700000000000000000000000000000000000000543113000c06110000000000000000001c0611000100000000000000000000000000000014a61000090000000000000000000000240611001200000000000000000000000000000000000000000000000000000000000000543113003806110000000000000000004806110001000000000000000100000012000000000000000100000022000000ad0611002900000050726f706f73616c3c543a3a4163636f756e7449642c2042616c616e63654f663c542c20493e3e00120000000000000001000000230000008e0611001f0000005665633c50726f706f73616c496e6465783e000012000000000000000100000024000000500611003e0000002050726f706f73616c20696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f742079657420617761726465642e2050726f706f73616c7320746861742068617665206265656e206d6164652e204e756d626572206f662070726f706f73616c7320746861742068617665206265656e206d6164652e000000000000f00711000c00000000000000fc07110007000000000000005431130004081100000000000000000014081100020000000000000000000000240811001300000000000000370811000f000000000000005431130048081100000000000000000058081100010000000000000000000000600811000b00000000000000a9f912000e00000000000000543113006c08110000000000000000007c081100010000000000000000000000840811000400000000000000fc07110007000000000000005431130088081100000000000000000098081100010000000000000000000000a00811000800000000000000a0081100080000000000000054311300a80811000000000000000000b8081100010000000000000050726f706f73616c426f6e645065726d696c6c0012000000000000000100000055000000be09110055000000130a11004400000050726f706f73616c426f6e644d696e696d756d42616c616e63654f663c542c20493e0000120000000000000001000000450000006c091100520000005370656e64506572696f6400120000000000000001000000560000004a091100220000004275726e1200000000000000010000005700000006091100440000004d6f64756c65496412000000000000000100000058000000c008110046000000205468652074726561737572792773206d6f64756c652069642c207573656420666f72206465726976696e672069747320736f7665726569676e206163636f756e742049442e2050657263656e74616765206f662073706172652066756e64732028696620616e7929207468617420617265206275726e7420706572207370656e6420706572696f642e20506572696f64206265747765656e2073756363657373697665207370656e64732e204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e204672616374696f6e206f6620612070726f706f73616c27732076616c756520746861742073686f756c6420626520626f6e64656420696e206f7264657220746f20706c616365207468652070726f706f73616c2e20416e2061636365707465642070726f706f73616c2067657473207468657365206261636b2e20412072656a65637465642070726f706f73616c20646f6573206e6f742e0000000000d0ce120008000000000000008c0b1100010000000000000000000000940b11000100000000000000000000009c0b11000800000000000000a40b1100010000000000000000000000ac0b1100010000000000000000000000b40b11000700000000000000bc0b1100030000000000000000000000d40b1100010000000000000000000000dc0b11000800000000000000e40b1100020000000000000000000000f40b1100010000000000000000000000fc0b11000500000000000000a40b1100010000000000000000000000040c11000100000000000000000000000c0c11000800000000000000a40b1100010000000000000000000000140c1100020000000000000000000000480312000700000000000000a40b1100010000000000000000000000240c11000100000000000000357c12000d000000c40d1100210000005370656e64696e67d5d1120007000000750d11004f0000004177617264656400357c12000d000000d5d112000700000079e51200090000002e0d11004700000052656a6563746564357c12000d000000d5d1120007000000e50c1100490000004275726e74000000b90c11002c000000526f6c6c6f766572580c11004c000000a40c1100150000002c0c11002c00000020536f6d652066756e64732068617665206265656e206465706f73697465642e205c5b6465706f7369745c5d205370656e64696e67206861732066696e69736865643b20746869732069732074686520616d6f756e74207468617420726f6c6c73206f76657220756e74696c206e657874207370656e642e205c5b6275646765745f72656d61696e696e675c5d20536f6d65206f66206f75722066756e64732068617665206265656e206275726e742e205c5b6275726e5c5d20412070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e205c5b70726f706f73616c5f696e6465782c20736c61736865645c5d20536f6d652066756e64732068617665206265656e20616c6c6f63617465642e205c5b70726f706f73616c5f696e6465782c2061776172642c2062656e65666963696172795c5d205765206861766520656e6465642061207370656e6420706572696f6420616e642077696c6c206e6f7720616c6c6f636174652066756e64732e205c5b6275646765745f72656d61696e696e675c5d204e65772070726f706f73616c2e205c5b70726f706f73616c5f696e6465785c5d0000002c0713005500000069000000010000002813130056000000ef010000010000009013130056000000c10000000100000000000000a9b510001200000000000000d80f11000100000000000000000000008b3311000800000000000000e00f1100010000000000000000000000a1b510000800000000000000e80f110001000000000000000000000097b510000a00000000000000f00f11000100000000000000000000008db510000a00000000000000f80f110001000000000000000000000083b510000a000000000000000010110001000000000000000000000074b510000f000000000000000810110001000000000000000000000066b510000e000000000000001010110001000000000000000000000056b510001000000000000000181011000100000000000000000000004ab510000c00000000000000201011000100000000000000000000003db510000d000000000000002810110001000000000000000000000030b510000d00000000000000301011000100000000000000000000001fb510001100000000000000381011000100000000000000000000007a5011000e000000000000004010110001000000000000000000000019b51000060000000000000048101100010000000000000000000000bbb510000800000000000000501011000100000000000000c911110018000000b4111100150000009f11110015000000921111000d00000082111100100000006f111100130000005d111100120000004c11110011000000391111001300000023111100160000000c11110017000000f01011001c000000b51011003b000000981011001d0000007b1011001d0000005810110023000000205375622d6163636f756e742069736e2774206f776e65642062792073656e6465722e2053656e646572206973206e6f742061207375622d6163636f756e742e204163636f756e7420494420697320616c7265616479206e616d65642e204d6178696d756d20616d6f756e74206f66207265676973747261727320726561636865642e2043616e6e6f742061646420616e79206d6f72652e20546f6f206d616e79206164646974696f6e616c206669656c64732e205468652074617267657420697320696e76616c69642e2054686520696e64657820697320696e76616c69642e20496e76616c6964206a756467656d656e742e204a756467656d656e7420676976656e2e20537469636b79206a756467656d656e742e204e6f206964656e7469747920666f756e642e20466565206973206368616e6765642e20456d70747920696e6465782e204163636f756e742069736e2774206e616d65642e204163636f756e742069736e277420666f756e642e20546f6f206d616e7920737562732d6163636f756e74732e00000000000000e0e5100010000000000000006c131100010000000000000000000000d1e510000f0000000000000074131100010000000000000000000000c0e5100011000000000000007c131100010000000000000000000000afe510001100000000000000841311000100000000000000000000009de5100012000000000000008c13110001000000000000000000000088e5100015000000000000009413110001000000000000000000000075e5100013000000000000009c1311000100000000000000000000008b3311000800000000000000a41311000100000000000000000000007ea610000800000000000000ac1311000100000000000000000000006ae510000b00000000000000b41311000100000000000000000000005ce510000e00000000000000bc13110001000000000000000000000049e510001300000000000000c41311000100000000000000000000003ae510000f00000000000000cc131100010000000000000000000000f0e510000d00000000000000d41311000100000000000000c316110020000000971611002c0000006f16110028000000441611002b000000181611002c000000d415110044000000901511004400000058151100380000000c1511004c000000c414110048000000781411004c0000003a1411003e0000000514110035000000dc1311002900000020546865206461746120746f2062652073746f72656420697320616c72656164792073746f7265642e20546865206d6178696d756d2077656967687420696e666f726d6174696f6e2070726f76696465642077617320746f6f206c6f772e20412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e204120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e204e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e204f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c2069742e204d756c7469736967206f7065726174696f6e206e6f7420666f756e64207768656e20617474656d7074696e6720746f2063616e63656c2e205468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e20546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e2054686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e2054686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e2043616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e2043616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e205468726573686f6c64206d7573742062652032206f7220677265617465722e0000000000d0ff10001c000000000000001c1711000100000000000000000000004ab510000c00000000000000241711000100000000000000511711001f0000002c17110025000000204e6f2070726f706f73616c206f7220626f756e7479206174207468617420696e6465782e2050726f706f73657227732062616c616e636520697320746f6f206c6f772e2813130056000000020300001d0000002813130056000000cc03000036000000a0171100520000005c0100000f0000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f626162652f7372632f6c69622e7273000004181100610000002e000000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f617574686f726974792d646973636f766572792f7372632f6c69622e72734c6f6f6b7570007c18110057000000c0000000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f7363686564756c65722f7372632f6c69622e72734167656e6461000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004261626545717569766f636174696f6e736c6f74206e756d626572206973207536343b2069742073686f756c642072656c61746520696e20736f6d652077617920746f2077616c6c20636c6f636b2074696d653b20696620753634206973206e6f7420656e6f7567682077652073686f756c6420637261736820666f72207361666574793b207165642e0000a017110052000000640200000e000000a017110052000000660200003b00000054696d657374616d7020736c6f74206d757374206d61746368206043757272656e74536c6f746000a0171100520000003e0300000900000065706f636820696e64696365732077696c6c206e6576657220726561636820325e3634206265666f726520746865206465617468206f662074686520756e6976657273653b20716564000000a017110052000000060200000e000000a0171100520000000e0200000e00000065706f636820696e646578206973207536343b20697420697320616c77617973206f6e6c7920696e6372656d656e746564206279206f6e653b20696620753634206973206e6f7420656e6f7567682077652073686f756c6420637261736820666f72207361666574793b207165642e00a0171100520000004b0200004600000045706f6368436f6e66696720697320696e697469616c697a656420696e2067656e657369733b207765206e65766572206074616b6560206f7220606b696c6c602069743b20716564a0171100520000005702000029000000a017110052000000440200002d000000a017110052000000a70000000f00000000000000542f12001300000000000000241c1100020000000000000000000000541c1100040000000000000000000000b82f12001c00000000000000241c1100020000000000000000000000741c1100080000000000000000000000b41c11001200000000000000c81c1100010000000000000000000000e01c11000400000000000000000000002034120012000000000000000a1f11001c000000000000005c3412000f000000000000006b34120010000000341e110043000000771e110042000000b91e110044000000fd1e11000d000000341e110043000000771e110042000000b91e110044000000fd1e11000d00000046331200440000008a33120046000000d033120046000000163412000a000000706c616e5f636f6e6669675f6368616e67650000000000001a1e11000600000000000000201e110014000000001d110058000000581d110055000000ad1d110057000000041e11001600000020506c616e20616e2065706f636820636f6e666967206368616e67652e205468652065706f636820636f6e666967206368616e6765206973207265636f7264656420616e642077696c6c20626520656e6163746564206f6e20746865206e6578742063616c6c20746f2060656e6163745f65706f63685f6368616e6765602e2054686520636f6e6669672077696c6c20626520616374697661746564206f6e652065706f63682061667465722e204d756c7469706c652063616c6c7320746f2074686973206d6574686f642077696c6c207265706c61636520616e79206578697374696e6720706c616e6e656420636f6e666967206368616e6765207468617420686164206e6f74206265656e20656e6163746564207965742e636f6e6669674e657874436f6e66696744657363726970746f72205265706f727420617574686f726974792065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c20766572696679207468652065717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f6620616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63652077696c6c206265207265706f727465642e45717569766f636174696f6e50726f6f663c543a3a4865616465723e000000000000fa4511000a0000000000000000000000e8f21200030000000000000000000000000000000000000000000000000000000000000054311300a82411000000000000000000b824110001000000000000000100000000000000a54511000b0000000000000000000000c0241100270000000000000000000000000000000000000000000000000000000000000054311300e82411000000000000000000f824110001000000000000000100000000000000e34511000b0000000000000000000000002511000400000000000000000000000000000000000000000000000000000000000000543113000425110000000000000000001425110002000000000000000100000000000000c94511000b0000000000000000000000002511000400000000000000000000000000000000000000000000000000000000000000543113000425110000000000000000002425110001000000000000000100000000000000424611000a00000000000000000000002c251100160000000000000000000000000000000000000000000000000000000000000054311300442511000000000000000000542511000a0000000000000001000000000000002a461100180000000000000000000000201e1100140000000000000000000000000000000000000000000000000000000000000054311300a42511000000000000000000b425110001000000000000000000000000000000974511000e00000000000000000000002c251100160000000000000000000000000000000000000000000000000000000000000054311300442511000000000000000000bc25110001000000000000000100000000000000ba4511000f0000000000000000000000c0241100270000000000000000000000000000000000000000000000000000000000000054311300e82411000000000000000000c425110001000000000000000100000000000000ee4511000c0000000000000000000000cbed1200030000000000000000000000000000000000000000000000000000000000000054311300cc2511000000000000000000dc25110009000000000000000100000000000000972d1200110000000105000000000000cbed12000300000000000000242611001b00000000000000000000000000000000000000543113004026110000000000000000005026110001000000000000000100000000000000174611000b0000000000000000000000582611000f0000000000000000000000000000000000000000000000000000000000000054311300682611000000000000000000782611000200000000000000000000000000000004461100130000000000000000000000582611000f00000000000000000000000000000000000000000000000000000000000000543113008826110000000000000000009826110003000000000000000100000000000000b04511000a000000000000000000000027371200200000000000000000000000000000000000000000000000000000000000000054311300b02611000000000000000000c02611000500000000000000010000000000000022461100080000000000000000000000a9f912000e0000000000000000000000000000000000000000000000000000000000000054311300cc2511000000000000000000e8261100050000000000000001000000000000008c4511000b0000000000000000000000102711001600000000000000000000000000000000000000000000000000000000000000543113002827110000000000000000003827110001000000000000000000000000000000d44511000f00000000000000000000001027110016000000000000000000000000000000000000000000000000000000000000005431130028271100000000000000000040271100020000000000000000000000120000000000000001000000590000005c301100150000005665633c28417574686f7269747949642c2042616265417574686f72697479576569676874293e001200000000000000010000003f000000413011001b000000536c6f7412000000000000000100000059000000df2f11003e0000001d30110024000000ca2f1100150000007363686e6f72726b656c3a3a52616e646f6d6e65737300001200000000000000010000005a000000042e11002e0000005431130000000000322e11000b00000054311300000000003d2e1100410000007e2e11003e000000bc2e110045000000012f110045000000462f110041000000872f11004300000012000000000000000100000023000000ac2d110058000000952d1100170000007d2d11001800000012000000000000000100000022000000382c11001f0000005431130000000000572c11003d000000942c110040000000d42c1100250000005431130000000000f92c11003b000000342d110042000000762d1100070000005665633c7363686e6f72726b656c3a3a52616e646f6d6e6573733e001200000000000000010000003f000000f32b1100450000004d6179626552616e646f6d6e65737300120000000000000001000000230000006c2b110040000000ac2b110047000000120000000000000001000000230000007b2a110057000000d22a110054000000262b1100460000001200000000000000010000005b000000212911005700000078291100050000007d29110052000000cf29110056000000252a110056000000362811003600000054311300000000006c28110045000000b128110044000000f52811002c0000004261626545706f6368436f6e66696775726174696f6e000012000000000000000100000023000000d527110061000000502711004b0000009b2711003a0000002054686520636f6e66696775726174696f6e20666f7220746865206e6578742065706f63682c20604e6f6e65602069662074686520636f6e6669672077696c6c206e6f74206368616e67652028796f752063616e2066616c6c6261636b20746f206045706f6368436f6e6669676020696e737465616420696e20746861742063617365292e2054686520636f6e66696775726174696f6e20666f72207468652063757272656e742065706f63682e2053686f756c64206e6576657220626520604e6f6e656020617320697420697320696e697469616c697a656420696e2067656e657369732e20486f77206c617465207468652063757272656e7420626c6f636b20697320636f6d706172656420746f2069747320706172656e742e205468697320656e74727920697320706f70756c617465642061732070617274206f6620626c6f636b20657865637574696f6e20616e6420697320636c65616e6564207570206f6e20626c6f636b2066696e616c697a6174696f6e2e205175657279696e6720746869732073746f7261676520656e747279206f757473696465206f6620626c6f636b20657865637574696f6e20636f6e746578742073686f756c6420616c77617973207969656c64207a65726f2e2054686520626c6f636b206e756d62657273207768656e20746865206c61737420616e642063757272656e742065706f6368206861766520737461727465642c20726573706563746976656c7920604e2d316020616e6420604e602e204e4f54453a20576520747261636b207468697320697320696e206f7264657220746f20616e6e6f746174652074686520626c6f636b206e756d626572207768656e206120676976656e20706f6f6c206f6620656e74726f7079207761732066697865642028692e652e20697420776173206b6e6f776e20746f20636861696e206f6273657276657273292e2053696e63652065706f6368732061726520646566696e656420696e20736c6f74732c207768696368206d617920626520736b69707065642c2074686520626c6f636b206e756d62657273206d6179206e6f74206c696e6520757020776974682074686520736c6f74206e756d626572732e2054656d706f726172792076616c75652028636c656172656420617420626c6f636b2066696e616c697a6174696f6e29207468617420696e636c756465732074686520565246206f75747075742067656e657261746564206174207468697320626c6f636b2e2054686973206669656c642073686f756c6420616c7761797320626520706f70756c6174656420647572696e6720626c6f636b2070726f63657373696e6720756e6c657373207365636f6e6461727920706c61696e20736c6f74732061726520656e61626c65642028776869636820646f6e277420636f6e7461696e206120565246206f7574707574292e2054656d706f726172792076616c75652028636c656172656420617420626c6f636b2066696e616c697a6174696f6e292077686963682069732060536f6d6560206966207065722d626c6f636b20696e697469616c697a6174696f6e2068617320616c7265616479206265656e2063616c6c656420666f722063757272656e7420626c6f636b2e2054574f582d4e4f54453a20605365676d656e74496e6465786020697320616e20696e6372656173696e6720696e74656765722c20736f2074686973206973206f6b61792e2052616e646f6d6e65737320756e64657220636f6e737472756374696f6e2e205765206d616b6520612074726164656f6666206265747765656e2073746f7261676520616363657373657320616e64206c697374206c656e6774682e2057652073746f72652074686520756e6465722d636f6e737472756374696f6e2072616e646f6d6e65737320696e207365676d656e7473206f6620757020746f2060554e4445525f434f4e535452554354494f4e5f5345474d454e545f4c454e475448602e204f6e63652061207365676d656e7420726561636865732074686973206c656e6774682c20776520626567696e20746865206e657874206f6e652e20576520726573657420616c6c207365676d656e747320616e642072657475726e20746f206030602061742074686520626567696e6e696e67206f662065766572792065706f63682e204e6578742065706f636820617574686f7269746965732e204e6578742065706f63682072616e646f6d6e6573732e2050656e64696e672065706f636820636f6e66696775726174696f6e206368616e676520746861742077696c6c206265206170706c696564207768656e20746865206e6578742065706f636820697320656e61637465642e205468652065706f63682072616e646f6d6e65737320666f7220746865202a63757272656e742a2065706f63682e20232053656375726974792054686973204d555354204e4f54206265207573656420666f722067616d626c696e672c2061732069742063616e20626520696e666c75656e6365642062792061206d616c6963696f75732076616c696461746f7220696e207468652073686f7274207465726d2e204974204d4159206265207573656420696e206d616e792063727970746f677261706869632070726f746f636f6c732c20686f77657665722c20736f206c6f6e67206173206f6e652072656d656d626572732074686174207468697320286c696b652065766572797468696e6720656c7365206f6e2d636861696e29206974206973207075626c69632e20466f72206578616d706c652c2069742063616e20626520757365642077686572652061206e756d626572206973206e656564656420746861742063616e6e6f742068617665206265656e2063686f73656e20627920616e206164766572736172792c20666f7220707572706f7365732073756368206173207075626c69632d636f696e207a65726f2d6b6e6f776c656467652070726f6f66732e2043757272656e7420736c6f74206e756d6265722e2054686520736c6f74206174207768696368207468652066697273742065706f63682061637475616c6c7920737461727465642e2054686973206973203020756e74696c2074686520666972737420626c6f636b206f662074686520636861696e2e2043757272656e742065706f636820617574686f7269746965732e2043757272656e742065706f636820696e6465782e00000000000000e43011000d00000000000000e8f21200030000000000000054311300f43011000000000000000000043111000300000000000000000000001c31110011000000000000003347120009000000000000005431130030311100000000000000000040311100050000000000000045706f63684475726174696f6e0000001200000000000000010000005c000000983211003b000000d33211004600000019331100480000004578706563746564426c6f636b54696d650000001200000000000000010000005d0000006831110041000000a931110044000000ed311100410000002e32110042000000703211002800000020546865206578706563746564206176657261676520626c6f636b2074696d6520617420776869636820424142452073686f756c64206265206372656174696e6720626c6f636b732e2053696e636520424142452069732070726f626162696c6973746963206974206973206e6f74207472697669616c20746f20666967757265206f7574207768617420746865206578706563746564206176657261676520626c6f636b2074696d652073686f756c64206265206261736564206f6e2074686520736c6f74206475726174696f6e20616e642074686520736563757269747920706172616d657465722060636020287768657265206031202d20636020726570726573656e7473207468652070726f626162696c697479206f66206120736c6f74206265696e6720656d707479292e2054686520616d6f756e74206f662074696d652c20696e20736c6f74732c207468617420656163682065706f63682073686f756c64206c6173742e204e4f54453a2043757272656e746c79206974206973206e6f7420706f737369626c6520746f206368616e6765207468652065706f6368206475726174696f6e2061667465722074686520636861696e2068617320737461727465642e20417474656d7074696e6720746f20646f20736f2077696c6c20627269636b20626c6f636b2070726f64756374696f6e2e0000007c18110057000000b300000001000000546172676574426c6f636b4e756d626572496e506173744e6f74466f756e644661696c6564546f5363686564756c6552657363686564756c654e6f4368616e676500000000000000a8fc11000800000000000000c0341100040000000000000000000000203511000a000000000000000000000070351100060000000000000078351100020000000000000000000000a83511000a0000000000000000000000f83511000e0000000000000008361100050000000000000000000000803611000a0000000000000000000000d03611000c00000000000000dc361100010000000000000000000000f43611000a0000000000000000000000443711000e0000000000000054371100040000000000000000000000b4371100050000000000000000000000dc3711001400000000000000f037110005000000000000000000000068381100050000000000000000000000e93a11000400000000000000a9f912000e00000000000000d83811000e00000000000000e638110028000000000000000e3911000800000000000000163911001200000000000000a80e13000400000000000000ac0e1300180000004b3b11001d0000005431130000000000f2eb12000b0000008839110028000000683b110024000000c0ef12000d000000383b1100130000008c3b110014000000a03b11004f00000036ec12000c00000063616e63656c000000000000e93a11000400000000000000a9f912000e00000000000000a00e13000500000000000000cbed120003000000ed3a1100260000005431130000000000f2eb12000b0000008839110028000000133b110025000000c0ef12000d000000383b110013000000f03911001c0000000c3a11005000000036ec12000c0000007363686564756c655f6e616d6564000000000000d1381100020000000000000042ec12000700000000000000e93a11000400000000000000a9f912000e00000000000000d83811000e00000000000000e638110028000000000000000e3911000800000000000000163911001200000000000000a80e13000400000000000000ac0e1300180000005c3a1100170000005431130000000000f2eb12000b0000008839110028000000733a110023000000c0ef12000d000000d53911001b000000f03911001c000000963a11005300000036ec12000c00000063616e63656c5f6e616d656400000000d1381100020000000000000042ec120007000000693911001f0000005431130000000000f2eb12000b0000008839110028000000b039110025000000c0ef12000d000000d53911001b000000f03911001c0000000c3a11005000000036ec12000c0000007363686564756c655f6166746572000000000000d33811000500000000000000a9f912000e00000000000000d83811000e00000000000000e638110028000000000000000e3911000800000000000000163911001200000000000000a80e13000400000000000000ac0e130018000000283911002b0000005431130000000000f2eb12000b000000533911001600000036ec12000c0000007363686564756c655f6e616d65645f616674657200000000d1381100020000000000000042ec12000700000000000000d33811000500000000000000a9f912000e00000000000000d83811000e00000000000000e638110028000000000000000e3911000800000000000000163911001200000000000000a80e13000400000000000000ac0e13001800000090381100250000005431130000000000f2eb12000b000000b53811001c00000036ec12000c000000205363686564756c652061206e616d6564207461736b20616674657220612064656c61792e2053616d65206173205b607363686564756c655f6e616d6564605d2e696461667465726d617962655f706572696f6469634f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e7072696f726974797363686564756c653a3a5072696f7269747920416e6f6e796d6f75736c79207363686564756c652061207461736b20616674657220612064656c61792e2053616d65206173205b607363686564756c65605d2e2043616e63656c2061206e616d6564207363686564756c6564207461736b2e202d2053203d204e756d626572206f6620616c7265616479207363686564756c65642063616c6c73202d2042617365205765696768743a2032342e3931202b20322e393037202a205320c2b57320202020202d20526561643a204167656e64612c204c6f6f6b757020202020202d2057726974653a204167656e64612c204c6f6f6b7570202d2057696c6c20757365206261736520776569676874206f66203130302077686963682073686f756c6420626520676f6f6420666f7220757020746f203330207363686564756c65642063616c6c73205363686564756c652061206e616d6564207461736b2e202d2042617365205765696768743a2032392e36202b202e313539202a205320c2b573202d2057696c6c20757365206261736520776569676874206f662033352077686963682073686f756c6420626520676f6f6420666f72206d6f7265207468616e203330207363686564756c65642063616c6c737768656e2043616e63656c20616e20616e6f6e796d6f75736c79207363686564756c6564207461736b2e202d2042617365205765696768743a2032322e3135202b20322e383639202a205320c2b57320202020202d20526561643a204167656e646120416e6f6e796d6f75736c79207363686564756c652061207461736b2e202d2042617365205765696768743a2032322e3239202b202e313236202a205320c2b57320202020202d2057726974653a204167656e6461202d2057696c6c20757365206261736520776569676874206f662032352077686963682073686f756c6420626520676f6f6420666f7220757020746f203330207363686564756c65642063616c6c730000000000d3181100060000000105000000000000a9f912000e00000000000000f83c11005c0000000000000000000000000000000000000054311300543d11000000000000000000643d1100010000000000000001000000000000006518110006000000010500000000000042ec120007000000000000006c3d11001b0000000000000000000000000000000000000054311300883d11000000000000000000983d1100010000000000000000000000000000009cbe12000e0000000000000000000000aabe1200080000000000000000000000000000000000000000000000000000000000000054311300a03d11000000000000000000c4be12000300000000000000010000005665633c4f7074696f6e3c5363686564756c65643c3c5420617320436f6e6669673e3a3a43616c6c2c20543a3a426c6f636b4e756d6265722c20543a3a0a50616c6c6574734f726967696e2c20543a3a4163636f756e7449643e3e3e1200000000000000010000003f000000f03d1100530000005461736b416464726573733c543a3a426c6f636b4e756d6265723e0012000000000000000100000023000000b03d1100400000001200000000000000010000005e000000204c6f6f6b75702066726f6d206964656e7469747920746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e0000000000c83e11000900000000000000d43e1100020000000000000000000000e43e1100010000000000000000000000ec3e11000800000000000000d43e1100020000000000000000000000f43e1100010000000000000000000000fc3e11000a00000000000000083f1100030000000000000000000000203f110001000000000000005363686564756c656400000085d312000b000000cbed1200030000009e3f11002500000043616e63656c65647a3f110024000000446973706174636865640000533f1100180000006b3f11000f000000637a12000e000000283f11002b000000204469737061746368656420736f6d65207461736b2e205c5b7461736b2c2069642c20726573756c745c5d5461736b416464726573733c426c6f636b4e756d6265723e4f7074696f6e3c5665633c75383e3e2043616e63656c656420736f6d65207461736b2e205c5b7768656e2c20696e6465785c5d205363686564756c656420736f6d65207461736b2e205c5b7768656e2c20696e6465785c5d00120000000000000001000000210000000440110061000000ab010000290000001200000000000000010000005f0000000440110061000000ae010000340000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f6e706f732d656c656374696f6e732f7372632f6c69622e7273766563746f72207769746820706f736974697665206c656e6774682077696c6c20686176652061206d61783b20716564000000dc7c120067000000780000000e0000006974657261746f72207769746820706f736974697665206c656e6774682077696c6c20686176652061206d696e3b207165640000dc7c1200670000007c0000000e000000dc7c120067000000890000002c000000dc7c120067000000950000002b0000006c656e677468206f6620656c65637465645f65646765732069732067726561746572207468616e206f7220657175616c20323b206c6173745f696e64657820696e64657820697320617420746865206d696e696d756d20656c65637465645f65646765732e6c656e2829202d20313b20696e6465782069732077697468696e2072616e67653b207165640000dc7c1200670000009f00000034000000dc7c120067000000a200000011000000dc7c120067000000ac0000002c000000dc7c120067000000b80000002c000000dc7c12006700000055000000210000000440110061000000a30100002c000000dc7c1200670000006d0000002200000004401100610000002303000025000000044011006100000023030000360000000440110061000000290300002f00000000000000933311001000000000000000a84211000100000000000000000000008b3311000800000000000000b0421100010000000000000000000000743311001700000000000000b8421100010000000000000000000000a33311001200000000000000c042110001000000000000004f4311001a0000002f43110020000000054311002a000000c84211003d0000002052657363686564756c65206661696c6564206265636175736520697420646f6573206e6f74206368616e6765207363686564756c65642074696d652e20476976656e2074617267657420626c6f636b206e756d62657220697320696e2074686520706173742e2043616e6e6f742066696e6420746865207363686564756c65642063616c6c2e204661696c656420746f207363686564756c6520612063616c6c000000000000005f2e12001800000000000000d04d1200010000000000000000000000772e12001800000000000000c84d1200010000000000000000000000ba2e12001600000000000000d84d1200010000000000000050726576696f7573206d617463682061726d206d61746368657320616e7974696e67206c657373207468616e20325e33303b207165640000284411005c0000005701000011000000844411003d0000000000000000000000284411005c0000005e010000110000002f636172676f2d686f6d652f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d322e302e302f7372632f636f6d706163742e7273736869667465642073756666696369656e74206269747320726967687420746f206c656164206f6e6c79206c656164696e67207a65726f733b20716564000000284411005c00000083010000110000000000000000000000000000000000000000000000284411005c0000008a01000011000000084511005c00000034000000120000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f72756e74696d652f7372632f63757276652e72734368617267655472616e73616374696f6e5061796d656e7444656665727265644f6666656e63657345706f6368436f6e6669674e65787452616e646f6d6e657373417574686f72697469657345706f636853746172744e657874417574686f72697469657343757272656e74536c6f744e65787445706f6368436f6e66696747656e65736973536c6f745365676d656e74496e64657845706f6368496e646578417574686f7256726652616e646f6d6e657373496e697469616c697a65644c6174656e65737350656e64696e6745706f6368436f6e6669674368616e676552616e646f6d6e657373457261456c656374696f6e537461747573536e617073686f7456616c696461746f727351756575656453636f7265517565756564456c6563746564497343757272656e7453657373696f6e46696e616c536e617073686f744e6f6d696e61746f727300000000000010481100070000000105000000000000174811000d000000000000002448110034000000000000000000000000000000000000005431130058481100000000000000000068481100010000000000000000000000000000007c451100100000000000000000000000704811001900000000000000000000000000000000000000000000000000000000000000543113008c48110000000000000000009c48110002000000000000000100000000000000ac481100160000000205050000000000c24811000400000000000000c64811000e00000000000000d4481100120000000000000054311300e84811000000000000000000f84811000100000000000000010000000000000000491100120000000105000000000000c2481100040000000000000042ec1200070000000000000000000000000000000000000054311300144911000000000000000000244911000600000000000000010000005265706f7274735265706f727449644f663c543e4f6666656e636544657461696c733c543a3a4163636f756e7449642c20543a3a4964656e74696669636174696f6e5475706c653e12000000000000000100000060000000274b1100520000005665633c44656665727265644f6666656e63654f663c543e3e00000012000000000000000100000061000000bd4a110059000000164b110011000000436f6e63757272656e745265706f727473496e6465784b696e644f706171756554696d65536c6f745665633c5265706f727449644f663c543e3e000012000000000000000100000062000000734a11004a0000005265706f72747342794b696e64496e64657800001200000000000000010000006300000054491100440000005431130000000000984911002f0000005431130000000000c749110052000000194a11005a00000020456e756d65726174657320616c6c207265706f727473206f662061206b696e6420616c6f6e672077697468207468652074696d6520746865792068617070656e65642e20416c6c207265706f7274732061726520736f72746564206279207468652074696d65206f66206f6666656e63652e204e6f74652074686174207468652061637475616c2074797065206f662074686973206d617070696e6720697320605665633c75383e602c207468697320697320626563617573652076616c756573206f6620646966666572656e7420747970657320617265206e6f7420737570706f7274656420617420746865206d6f6d656e7420736f2077652061726520646f696e6720746865206d616e75616c2073657269616c697a6174696f6e2e204120766563746f72206f66207265706f727473206f66207468652073616d65206b696e6420746861742068617070656e6564206174207468652073616d652074696d6520736c6f742e204465666572726564207265706f72747320746861742068617665206265656e2072656a656374656420627920746865206f6666656e63652068616e646c657220616e64206e65656420746f206265207375626d69747465642061742061206c617465722074696d652e20546865207072696d61727920737472756374757265207468617420686f6c647320616c6c206f6666656e6365207265636f726473206b65796564206279207265706f7274206964656e746966696572732e696d2d6f6e6c696e653a6f66666c696e6772616e6470613a65717569766f6361626162653a65717569766f636174696f000000000000005c4c11001100000000000000000000006d4c11000a0000000000000000000000000000000000000000000000000000000000000054311300784c1100000000000000000054311300000000000000000001000000000000009cbe12000e0000000000000000000000aabe1200080000000000000000000000000000000000000000000000000000000000000054311300884c11000000000000000000543113000000000000000000010000004e6578744665654d756c7469706c6965724d756c7469706c69657200120000000000000001000000640000001200000000000000010000005e00000000000000084d1100120000000000000057a912000c00000000000000543113001c4d110000000000000000002c4d1100010000000000000000000000344d11000b000000000000003f4d1100290000000000000054311300684d11000000000000000000784d110001000000000000005472616e73616374696f6e42797465466565000012000000000000000100000065000000c34d110043000000576569676874546f4665655665633c576569676874546f466565436f656666696369656e743c42616c616e63654f663c543e3e3e12000000000000000100000066000000804d1100430000002054686520706f6c796e6f6d69616c2074686174206973206170706c69656420696e206f7264657220746f20646572697665206665652066726f6d207765696768742e205468652066656520746f206265207061696420666f72206d616b696e672061207472616e73616374696f6e3b20746865207065722d6279746520706f7274696f6e2e0000184e11005600000074000000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f6f6666656e6365732f7372632f6c69622e7273000012000000000000000100000021000000dc7c120067000000650000001e000000984e11001a0000004552524f523a20436f7272757074656420737461746520617420457261735374616b657273000000647c1200660000006c0000001d000000647c1200660000006c00000039000000647c120066000000a70000001f00000056616c696461746f72730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000784f11005d00000021020000330000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f737570706f72742f7372632f73746f726167652f6d6f642e7273436865636b576569676874426164206d616e6461746f727945726173526577617264506f696e747356616c696461746f72536c617368496e4572614e6f6d696e61746f72536c617368496e4572615370616e536c617368536c617368696e675370616e73546f6f4d616e79546172676574734261645374617465496e636f7272656374536c617368696e675370616e73496e636f7272656374486973746f72794465707468416c7265616479436c61696d65644e6f74536f72746564416e64556e69717565496e76616c69644e756d6265724f664e6f6d696e6174696f6e73496e76616c6964457261546f52657761726446756e6465645461726765744e6f556e6c6f636b4368756e6b4e6f4d6f72654368756e6b73496e73756666696369656e7456616c7565496e76616c6964536c617368496e6465784475706c6963617465496e646578456d70747954617267657473416c7265616479506169726564416c7265616479426f6e6465644e6f7453746173684e6f74436f6e74726f6c6c65724261645461726765744e6f6d696e61746f72734c6564676572000000000064551100040000000000000068551100030000000000000000000000b0551100160000000000000000000000605611000a000000000000006c561100010000000000000000000000845611001500000000000000000000002c5711000600000000000000345711000100000000000000000000004c5711002000000000000000000000004c581100110000000000000060581100010000000000000000000000785811001f00000000000000000000007059110008000000000000007859110001000000000000000000000090591100110000000000000000000000185a11000800000000000000205a1100010000000000000000000000385a1100130000000000000000000000d05a1100050000000000000054311300000000000000000000000000d85a1100110000000000000000000000605b110009000000000000006c5b1100010000000000000000000000845b1100100000000000000000000000045c11000e00000000000000145c11000100000000000000000000002c5c1100100000000000000000000000ac5c11001300000000000000c05c1100010000000000000000000000d85c1100080000000000000000000000185d11001800000000000000305d1100010000000000000000000000485d1100070000000000000000000000805d11001500000000000000985d1100010000000000000000000000b05d1100070000000000000000000000e85d11000d0000000000000054311300000000000000000000000000f85d1100090000000000000000000000405e11000d0000000000000054311300000000000000000000000000505e11000a0000000000000000000000a05e11001100000000000000b45e1100010000000000000000000000cc5e11000800000000000000000000000c5f11000d000000000000001c5f11000200000000000000000000004c5f11000a00000000000000000000009c5f1100140000000000000054311300000000000000000000000000b05f1100080000000000000000000000f05f1100150000000000000008601100020000000000000000000000386011000d0000000000000000000000a06011000e00000000000000b0601100020000000000000000000000e06011001c0000000000000000000000c0611100060000000000000034571100010000000000000000000000c86111000e00000000000000000000003862110011000000000000004c6211000200000000000000000000007c621100150000000000000000000000246311000a000000000000001c5f1100020000000000000000000000306311000f0000000000000000000000a86311000400000000000000ac631100010000000000000000000000c46311000d00000000000000626f6e6400000000407911000a0000000000000085fc1100230000000000000048b6120005000000000000004db612001500000000000000a87911000500000000000000ad7911001f000000f4871100590000004d8811002100000054311300000000006e8811004c0000005431130000000000ba88110049000000543113000000000053871100100000005431130000000000f2eb12000b00000003891100350000006387110008000000388911001a00000054311300000000005289110054000000a689110050000000f6891100130000008b7711000d000000c15f12000b000000098a11004c000000558a11003800000036ec12000c000000626f6e645f6578747261000000000000e68711000e000000000000004db61200150000009785110059000000f08511000d0000005431130000000000fd851100540000005186110059000000aa861100130000005431130000000000bd86110058000000158711003e000000543113000000000053871100100000005431130000000000f2eb12000b000000287811003a00000063871100080000000d851100100000006b8711000d000000c15f12000b0000007887110045000000bd8711002900000036ec12000c000000756e626f6e6400000000000048b6120005000000000000004db612001500000028811100550000007d81110040000000bd811100490000005431130000000000068211005200000058821100300000005431130000000000888211004f000000d78211004f000000268311003f00000054311300000000009c64110055000000fe7911004300000054311300000000006583110012000000543113000000000077831100260000005431130000000000f2eb12000b0000009d831100500000006278110026000000ed83110059000000468411005c000000a284110054000000f6841100170000000d85110010000000ba7811000b0000008b7711000d000000c15f12000b0000001d8511004700000064851100290000008d8511000a00000077697468647261775f756e626f6e646564000000000000009d7511001200000000000000cbed120003000000147d11004b00000054311300000000005f7d11004d000000ac7d11001300000054311300000000009c64110055000000fe791100430000005431130000000000bf7d1100130000005431130000000000d27d11001b0000005431130000000000f2eb12000b000000ed7d110055000000427e110051000000937e11003d000000d07e11005e0000008878110032000000756d1100100000002e7f110042000000707f110008000000787f110049000000c17f11002a000000eb7f110006000000f17f11005100000042801100230000006580110054000000b98011002c000000c56811001d000000e58011004300000036ec12000c00000076616c696461746500000000017d11000500000000000000067d11000e000000837c11003a0000005431130000000000656411003700000054311300000000009c64110055000000fe791100430000005431130000000000f2eb12000b000000287811003a00000062781100260000008878110032000000157011000c0000008b7711000d000000c15f12000b000000bd7c110024000000e17c11002000000036ec12000c0000006e6f6d696e617465000000007c7c110007000000000000006366110028000000a17a1100440000005431130000000000e57a110054000000bb6c11002300000054311300000000009c64110055000000fe791100430000005431130000000000f2eb12000b000000397b11004c000000857b110040000000c57b110036000000787911000a000000fb7b11000d000000087c110021000000c15f12000b000000297c1100320000005b7c11002100000036ec12000c0000006368696c6c000000cc791100320000005431130000000000656411003700000054311300000000009c64110055000000fe791100430000005431130000000000f2eb12000b000000287811003a000000417a1100150000008878110032000000567a1100090000008b7711000d000000c15f12000b0000005f7a110022000000817a11002000000036ec12000c0000007365745f706179656500000000000000a87911000500000000000000ad7911001f0000004a7911002e0000005431130000000000656411003700000054311300000000009c641100550000005431130000000000f2eb12000b000000287811003a00000062781100260000008878110032000000787911000a0000004f7411000f000000c0ef12000d0000008279110013000000957911001300000036ec12000c0000007365745f636f6e74726f6c6c6572000000000000407911000a0000000000000085fc110023000000af77110024000000543113000000000065641100370000005431130000000000d3771100550000005431130000000000f2eb12000b000000287811003a00000062781100260000008878110032000000ba7811000b0000008b7711000d000000c15f12000b000000c57811003d000000027911003e00000036ec12000c0000007365745f76616c696461746f725f636f756e740000000000871913000300000000000000d2a012000c000000667711002500000054311300000000002d741100220000005431130000000000f2eb12000b0000008b7711000d000000987711001700000036ec12000c000000696e6372656173655f76616c696461746f725f636f756e74000000005c7711000a00000000000000d2a012000c000000317711002b00000054311300000000002d741100220000005431130000000000f2eb12000b0000000a7711002100000036ec12000c0000007363616c655f76616c696461746f725f636f756e74000000000000002b7711000600000000000000c1ef110007000000d57611003500000054311300000000002d741100220000005431130000000000f2eb12000b0000000a7711002100000036ec12000c000000666f7263655f6e6f5f65726173000000a97611002c00000054311300000000002d741100220000005431130000000000f2eb12000b00000088761100100000004f7411000f0000005e7411001200000036ec12000c000000666f7263655f6e65775f6572610000000d76110053000000607611002800000054311300000000002d741100220000005431130000000000f2eb12000b00000088761100100000004f7411000f000000987611001100000036ec12000c0000007365745f696e76756c6e657261626c657300000000000000007611000d000000000000002c1a130011000000af7511003300000054311300000000002d741100220000005431130000000000f2eb12000b000000e275110007000000e97511001700000036ec12000c000000666f7263655f756e7374616b6500000000000000987511000500000000000000e3f812000c000000000000009d7511001200000000000000cbed120003000000707411004300000054311300000000002d741100220000005431130000000000f2eb12000b000000b37411003b000000ee7411002e0000001c751100610000007d7511001b00000036ec12000c000000666f7263655f6e65775f6572615f616c77617973ec7311004100000054311300000000002d741100220000005431130000000000f2eb12000b0000004f7411000f0000005e7411001200000036ec12000c00000063616e63656c5f64656665727265645f736c617368000000000000008b72110003000000000000008e7211000800000000000000d77311000d00000000000000e47311000800000096721100260000005431130000000000bc7211002d0000005431130000000000e9721100410000005431130000000000f2eb12000b0000002a731100150000003f7311002e0000006d73110035000000a27311001a000000bc7311001b00000036ec12000c0000007061796f75745f7374616b6572730000000000007c7211000f00000000000000e3f812000c000000000000008b72110003000000000000008e72110008000000f36d1100440000005431130000000000376e1100530000008a6e11004a000000d46e11004d0000005431130000000000216f110056000000776f11001e0000005431130000000000956f1100400000005431130000000000f2eb12000b000000d56f110040000000f40d120031000000157011000c0000002170110047000000687011000800000070701100220000009270110031000000c15f12000b000000c37011004a0000000d7111004b00000058711100440000009c711100360000005431130000000000d271110054000000267211005600000036ec12000c0000007265626f6e6400002e6c1100380000005431130000000000666c110055000000bb6c1100230000005431130000000000f2eb12000b000000de6c110035000000136d110025000000386d11003d000000756d110010000000c0ef12000d000000856d110040000000c56d11002e00000036ec12000c0000007365745f686973746f72795f646570746800000000000000fa6b110011000000000000000b6c110011000000000000001c6c11001200000000000000d2a012000c000000e26811004c0000002e691100200000005431130000000000355f12000c0000004e691100440000009269110052000000e469110051000000356a110051000000866a1100280000005431130000000000ae6a1100150000005431130000000000f2eb12000b000000c36a110038000000fb6a11000f000000c0ef12000d0000000a6b110028000000326b11001c0000004e6b11004c0000009a6b11006000000036ec12000c000000726561705f737461736800008b66110058000000e3661100580000003b6711003e0000005431130000000000796711002400000054311300000000009d671100400000005431130000000000f2eb12000b000000dd67110049000000c15f12000b00000026681100360000005c68110069000000c56811001d00000036ec12000c0000006b69636b00000000791b1300030000000000000063661100280000002c641100390000005431130000000000656411003700000054311300000000009c64110055000000f164110052000000436511002600000054311300000000006965110054000000bd651100310000005431130000000000ee65110056000000446611001f0000002052656d6f76652074686520676976656e206e6f6d696e6174696f6e732066726f6d207468652063616c6c696e672076616c696461746f722e20456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e20416e642c2069742063616e206265206f6e6c792063616c6c6564207768656e205b60457261456c656374696f6e537461747573605d2069732060436c6f736564602e2054686520636f6e74726f6c6c6572206163636f756e742073686f756c6420726570726573656e7420612076616c696461746f722e202d206077686f603a2041206c697374206f66206e6f6d696e61746f72207374617368206163636f756e74732077686f20617265206e6f6d696e6174696e6720746869732076616c696461746f7220776869636820202073686f756c64206e6f206c6f6e676572206265206e6f6d696e6174696e6720746869732076616c696461746f722e204e6f74653a204d616b696e6720746869732063616c6c206f6e6c79206d616b65732073656e736520696620796f7520666972737420736574207468652076616c696461746f7220707265666572656e63657320746f20626c6f636b20616e792066757274686572206e6f6d696e6174696f6e732e5665633c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263653e2052656d6f766520616c6c20646174612073747275637475726520636f6e6365726e696e672061207374616b65722f7374617368206f6e6365206974732062616c616e636520697320617420746865206d696e696d756d2e205468697320697320657373656e7469616c6c79206571756976616c656e7420746f206077697468647261775f756e626f6e64656460206578636570742069742063616e2062652063616c6c656420627920616e796f6e6520616e6420746865207461726765742060737461736860206d7573742068617665206e6f2066756e6473206c656674206265796f6e64207468652045442e20546869732063616e2062652063616c6c65642066726f6d20616e79206f726967696e2e202d20607374617368603a20546865207374617368206163636f756e7420746f20726561702e204974732062616c616e6365206d757374206265207a65726f2e20436f6d706c65786974793a204f285329207768657265205320697320746865206e756d626572206f6620736c617368696e67207370616e73206f6e20746865206163636f756e742e202d2052656164733a205374617368204163636f756e742c20426f6e6465642c20536c617368696e67205370616e732c204c6f636b73202d205772697465733a20426f6e6465642c20536c617368696e67205370616e73202869662053203e2030292c204c65646765722c2050617965652c2056616c696461746f72732c204e6f6d696e61746f72732c205374617368204163636f756e742c204c6f636b73202d2057726974657320456163683a205370616e536c617368202a2053205365742060486973746f72794465707468602076616c75652e20546869732066756e6374696f6e2077696c6c2064656c65746520616e7920686973746f727920696e666f726d6174696f6e207768656e2060486973746f727944657074686020697320726564756365642e202d20606e65775f686973746f72795f6465707468603a20546865206e657720686973746f727920646570746820796f7520776f756c64206c696b6520746f207365742e202d20606572615f6974656d735f64656c65746564603a20546865206e756d626572206f66206974656d7320746861742077696c6c2062652064656c6574656420627920746869732064697370617463682e20202020546869732073686f756c64207265706f727420616c6c207468652073746f72616765206974656d7320746861742077696c6c2062652064656c6574656420627920636c656172696e67206f6c642020202065726120686973746f72792e204e656564656420746f207265706f727420616e2061636375726174652077656967687420666f72207468652064697370617463682e20547275737465642062792020202060526f6f746020746f207265706f727420616e206163637572617465206e756d6265722e204f726967696e206d75737420626520726f6f742e202d20453a204e756d626572206f6620686973746f7279206465707468732072656d6f7665642c20692e652e203130202d3e2037203d2033202d205765696768743a204f28452920202020202d2052656164733a2043757272656e74204572612c20486973746f727920446570746820202020202d205772697465733a20486973746f727920446570746820202020202d20436c6561722050726566697820456163683a20457261205374616b6572732c204572615374616b657273436c69707065642c204572617356616c696461746f72507265667320202020202d2057726974657320456163683a204572617356616c696461746f725265776172642c2045726173526577617264506f696e74732c2045726173546f74616c5374616b652c2045726173537461727453657373696f6e496e6465786e65775f686973746f72795f6465707468436f6d706163743c457261496e6465783e5f6572615f6974656d735f64656c65746564205265626f6e64206120706f7274696f6e206f6620746865207374617368207363686564756c656420746f20626520756e6c6f636b65642e20546865206469737061746368206f726967696e206d757374206265207369676e65642062792074686520636f6e74726f6c6c65722c20616e642069742063616e206265206f6e6c792063616c6c6564207768656e205b60457261456c656374696f6e537461747573605d2069732060436c6f736564602e202d2054696d6520636f6d706c65786974793a204f284c292c207768657265204c20697320756e6c6f636b696e67206368756e6b73202d20426f756e64656420627920604d41585f554e4c4f434b494e475f4348554e4b53602e202d2053746f72616765206368616e6765733a2043616e277420696e6372656173652073746f726167652c206f6e6c792064656372656173652069742e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d20202020202d2052656164733a20457261456c656374696f6e5374617475732c204c65646765722c204c6f636b732c205b4f726967696e204163636f756e745d20202020202d205772697465733a205b4f726967696e204163636f756e745d2c204c6f636b732c204c656467657220506179206f757420616c6c20746865207374616b65727320626568696e6420612073696e676c652076616c696461746f7220666f7220612073696e676c65206572612e202d206076616c696461746f725f73746173686020697320746865207374617368206163636f756e74206f66207468652076616c696461746f722e205468656972206e6f6d696e61746f72732c20757020746f20202060543a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602c2077696c6c20616c736f207265636569766520746865697220726577617264732e202d206065726160206d617920626520616e7920657261206265747765656e20605b63757272656e745f657261202d20686973746f72795f64657074683b2063757272656e745f6572615d602e20546865206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e20416e79206163636f756e742063616e2063616c6c20746869732066756e6374696f6e2c206576656e206966206974206973206e6f74206f6e65206f6620746865207374616b6572732e20546869732063616e206f6e6c792062652063616c6c6564207768656e205b60457261456c656374696f6e537461747573605d2069732060436c6f736564602e202d2054696d6520636f6d706c65786974793a206174206d6f7374204f284d61784e6f6d696e61746f72526577617264656450657256616c696461746f72292e202d2d2d2d2d2d2d2d2d2d2d204e20697320746865204e756d626572206f66207061796f75747320666f72207468652076616c696461746f722028696e636c7564696e67207468652076616c696461746f7229205765696768743a202d205265776172642044657374696e6174696f6e205374616b65643a204f284e29202d205265776172642044657374696e6174696f6e20436f6e74726f6c6c657220284372656174696e67293a204f284e29202d20526561643a20457261456c656374696f6e5374617475732c2043757272656e744572612c20486973746f727944657074682c204572617356616c696461746f725265776172642c202020202020202020457261735374616b657273436c69707065642c2045726173526577617264506f696e74732c204572617356616c696461746f725072656673202838206974656d7329202d205265616420456163683a20426f6e6465642c204c65646765722c2050617965652c204c6f636b732c2053797374656d204163636f756e74202835206974656d7329202d20577269746520456163683a2053797374656d204163636f756e742c204c6f636b732c204c6564676572202833206974656d73292020204e4f54453a20776569676874732061726520617373756d696e672074686174207061796f75747320617265206d61646520746f20616c697665207374617368206163636f756e7420285374616b6564292e202020506179696e67206576656e2061206465616420636f6e74726f6c6c65722069732063686561706572207765696768742d776973652e20576520646f6e277420646f20616e7920726566756e647320686572652e76616c696461746f725f7374617368657261457261496e6465782043616e63656c20656e6163746d656e74206f66206120646566657272656420736c6173682e2043616e2062652063616c6c6564206279207468652060543a3a536c61736843616e63656c4f726967696e602e20506172616d65746572733a2065726120616e6420696e6469636573206f662074686520736c617368657320666f7220746861742065726120746f206b696c6c2e20436f6d706c65786974793a204f2855202b2053292077697468205520756e6170706c69656420736c6173686573207765696768746564207769746820553d3130303020616e64205320697320746865206e756d626572206f6620736c61736820696e646963657320746f2062652063616e63656c65642e202d20526561643a20556e6170706c69656420536c6173686573202d2057726974653a20556e6170706c69656420536c6173686573736c6173685f696e64696365735665633c7533323e20466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f662073657373696f6e7320696e646566696e6974656c792e20546865206469737061746368206f726967696e206d75737420626520526f6f742e202d205765696768743a204f283129202d2057726974653a20466f72636545726120466f72636520612063757272656e74207374616b657220746f206265636f6d6520636f6d706c6574656c7920756e7374616b65642c20696d6d6564696174656c792e204f285329207768657265205320697320746865206e756d626572206f6620736c617368696e67207370616e7320746f2062652072656d6f7665642052656164733a20426f6e6465642c20536c617368696e67205370616e732c204163636f756e742c204c6f636b73205772697465733a20426f6e6465642c20536c617368696e67205370616e73202869662053203e2030292c204c65646765722c2050617965652c2056616c696461746f72732c204e6f6d696e61746f72732c204163636f756e742c204c6f636b732057726974657320456163683a205370616e536c617368202a205373746173686e756d5f736c617368696e675f7370616e7320536574207468652076616c696461746f72732077686f2063616e6e6f7420626520736c61736865642028696620616e79292e202d204f285629202d2057726974653a20496e76756c6e657261626c6573696e76756c6e657261626c657320466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f6620746865206e6578742073657373696f6e2e20416674657220746869732c2069742077696c6c20626520726573657420746f206e6f726d616c20286e6f6e2d666f7263656429206265686176696f75722e202d204e6f20617267756d656e74732e202d20577269746520466f72636545726120466f72636520746865726520746f206265206e6f206e6577206572617320696e646566696e6974656c792e205363616c652075702074686520696465616c206e756d626572206f662076616c696461746f7273206279206120666163746f722e2053616d65206173205b607365745f76616c696461746f725f636f756e74605d2e666163746f7220496e6372656d656e74732074686520696465616c206e756d626572206f662076616c696461746f72732e6164646974696f6e616c20536574732074686520696465616c206e756d626572206f662076616c696461746f72732e205765696768743a204f2831292057726974653a2056616c696461746f7220436f756e74202852652d297365742074686520636f6e74726f6c6c6572206f6620612073746173682e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c65722e202d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e202d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732e202d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e202d2d2d2d2d2d2d2d2d2d202d20526561643a20426f6e6465642c204c6564676572204e657720436f6e74726f6c6c65722c204c6564676572204f6c6420436f6e74726f6c6c6572202d2057726974653a20426f6e6465642c204c6564676572204e657720436f6e74726f6c6c65722c204c6564676572204f6c6420436f6e74726f6c6c6572636f6e74726f6c6c6572202852652d2973657420746865207061796d656e742074617267657420666f72206120636f6e74726f6c6c65722e202d2d2d2d2d2d2d2d2d20202020202d20526561643a204c656467657220202020202d2057726974653a205061796565706179656552657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e204465636c617265206e6f2064657369726520746f206569746865722076616c6964617465206f72206e6f6d696e6174652e20416e642c2069742063616e206265206f6e6c792063616c6c6564207768656e205b60457261456c656374696f6e537461747573605d2069732060436c6f736564602e202d20436f6e7461696e73206f6e6520726561642e202d2d2d2d2d2d2d2d202d20526561643a20457261456c656374696f6e5374617475732c204c6564676572202d2057726974653a2056616c696461746f72732c204e6f6d696e61746f7273204465636c617265207468652064657369726520746f206e6f6d696e6174652060746172676574736020666f7220746865206f726967696e20636f6e74726f6c6c65722e20456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e20546869732063616e206f6e6c792062652063616c6c6564207768656e202d20546865207472616e73616374696f6e277320636f6d706c65786974792069732070726f706f7274696f6e616c20746f207468652073697a65206f662060746172676574736020284e292077686963682069732063617070656420617420436f6d7061637441737369676e6d656e74733a3a4c494d495420284d41585f4e4f4d494e4154494f4e53292e202d20426f74682074686520726561647320616e642077726974657320666f6c6c6f7720612073696d696c6172207061747465726e2e205765696768743a204f284e29207768657265204e20697320746865206e756d626572206f662074617267657473202d2052656164733a2045726120456c656374696f6e205374617475732c204c65646765722c2043757272656e7420457261202d205772697465733a2056616c696461746f72732c204e6f6d696e61746f727374617267657473204465636c617265207468652064657369726520746f2076616c696461746520666f7220746865206f726967696e20636f6e74726f6c6c65722e202d20526561643a2045726120456c656374696f6e205374617475732c204c6564676572202d2057726974653a204e6f6d696e61746f72732c2056616c696461746f7273707265667356616c696461746f7250726566732052656d6f766520616e7920756e6c6f636b6564206368756e6b732066726f6d207468652060756e6c6f636b696e67602071756575652066726f6d206f7572206d616e6167656d656e742e205468697320657373656e7469616c6c7920667265657320757020746861742062616c616e636520746f206265207573656420627920746865207374617368206163636f756e7420746f20646f2077686174657665722069742077616e74732e20456d697473206057697468647261776e602e2053656520616c736f205b6043616c6c3a3a756e626f6e64605d2e202d20436f756c6420626520646570656e64656e74206f6e2074686520606f726967696e6020617267756d656e7420616e6420686f77206d7563682060756e6c6f636b696e6760206368756e6b732065786973742e2020497420696d706c6965732060636f6e736f6c69646174655f756e6c6f636b656460207768696368206c6f6f7073206f76657220604c65646765722e756e6c6f636b696e67602c2077686963682069732020696e6469726563746c7920757365722d636f6e74726f6c6c65642e20536565205b60756e626f6e64605d20666f72206d6f72652064657461696c2e202d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732c20796574207468652073697a65206f6620776869636820636f756c64206265206c61726765206261736564206f6e20606c6564676572602e20436f6d706c6578697479204f285329207768657265205320697320746865206e756d626572206f6620736c617368696e67207370616e7320746f2072656d6f7665205570646174653a202d2052656164733a20457261456c656374696f6e5374617475732c204c65646765722c2043757272656e74204572612c204c6f636b732c205b4f726967696e204163636f756e745d202d205772697465733a205b4f726967696e204163636f756e745d2c204c6f636b732c204c6564676572204b696c6c3a202d2052656164733a20457261456c656374696f6e5374617475732c204c65646765722c2043757272656e74204572612c20426f6e6465642c20536c617368696e67205370616e732c205b4f726967696e2020204163636f756e745d2c204c6f636b732c2042616c616e63654f66207374617368202d205772697465733a20426f6e6465642c20536c617368696e67205370616e73202869662053203e2030292c204c65646765722c2050617965652c2056616c696461746f72732c204e6f6d696e61746f72732c2020205b4f726967696e204163636f756e745d2c204c6f636b732c2042616c616e63654f662073746173682e204e4f54453a2057656967687420616e6e6f746174696f6e20697320746865206b696c6c207363656e6172696f2c20776520726566756e64206f74686572776973652e205363686564756c65206120706f7274696f6e206f662074686520737461736820746f20626520756e6c6f636b656420726561647920666f72207472616e73666572206f75742061667465722074686520626f6e6420706572696f6420656e64732e2049662074686973206c656176657320616e20616d6f756e74206163746976656c7920626f6e646564206c657373207468616e20543a3a43757272656e63793a3a6d696e696d756d5f62616c616e636528292c207468656e20697420697320696e6372656173656420746f207468652066756c6c20616d6f756e742e204f6e63652074686520756e6c6f636b20706572696f6420697320646f6e652c20796f752063616e2063616c6c206077697468647261775f756e626f6e6465646020746f2061637475616c6c79206d6f7665207468652066756e6473206f7574206f66206d616e6167656d656e7420726561647920666f72207472616e736665722e204e6f206d6f7265207468616e2061206c696d69746564206e756d626572206f6620756e6c6f636b696e67206368756e6b73202873656520604d41585f554e4c4f434b494e475f4348554e4b5360292063616e20636f2d657869737473206174207468652073616d652074696d652e20496e207468617420636173652c205b6043616c6c3a3a77697468647261775f756e626f6e646564605d206e65656420746f2062652063616c6c656420666972737420746f2072656d6f766520736f6d65206f6620746865206368756e6b732028696620706f737369626c65292e20456d6974732060556e626f6e646564602e2053656520616c736f205b6043616c6c3a3a77697468647261775f756e626f6e646564605d2e202d20496e646570656e64656e74206f662074686520617267756d656e74732e204c696d697465642062757420706f74656e7469616c6c79206578706c6f697461626c6520636f6d706c65786974792e202d20456163682063616c6c20287265717569726573207468652072656d61696e646572206f662074686520626f6e6465642062616c616e636520746f2062652061626f766520606d696e696d756d5f62616c616e6365602920202077696c6c2063617573652061206e657720656e74727920746f20626520696e73657274656420696e746f206120766563746f722028604c65646765722e756e6c6f636b696e676029206b65707420696e2073746f726167652e202020546865206f6e6c792077617920746f20636c65616e207468652061666f72656d656e74696f6e65642073746f72616765206974656d20697320616c736f20757365722d636f6e74726f6c6c6564207669612020206077697468647261775f756e626f6e646564602e202d204f6e6520444220656e7472792e202d20526561643a20457261456c656374696f6e5374617475732c204c65646765722c2043757272656e744572612c204c6f636b732c2042616c616e63654f662053746173682c202d2057726974653a204c6f636b732c204c65646765722c2042616c616e63654f662053746173682c203c2f7765696768743e2041646420736f6d6520657874726120616d6f756e742074686174206861766520617070656172656420696e207468652073746173682060667265655f62616c616e63656020696e746f207468652062616c616e636520757020666f72207374616b696e672e20557365207468697320696620746865726520617265206164646974696f6e616c2066756e647320696e20796f7572207374617368206163636f756e74207468617420796f75207769736820746f20626f6e642e20556e6c696b65205b60626f6e64605d206f72205b60756e626f6e64605d20746869732066756e6374696f6e20646f6573206e6f7420696d706f736520616e79206c696d69746174696f6e206f6e2074686520616d6f756e7420746861742063616e2062652061646465642e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c657220616e642069742063616e206265206f6e6c792063616c6c6564207768656e205b60457261456c656374696f6e537461747573605d2069732060436c6f736564602e20456d6974732060426f6e646564602e202d204f2831292e202d2d2d2d2d2d2d2d2d2d2d2d202d20526561643a2045726120456c656374696f6e205374617475732c20426f6e6465642c204c65646765722c205b4f726967696e204163636f756e745d2c204c6f636b73202d2057726974653a205b4f726967696e204163636f756e745d2c204c6f636b732c204c65646765726d61785f6164646974696f6e616c2054616b6520746865206f726967696e206163636f756e74206173206120737461736820616e64206c6f636b207570206076616c756560206f66206974732062616c616e63652e2060636f6e74726f6c6c6572602077696c6c20626520746865206163636f756e74207468617420636f6e74726f6c732069742e206076616c756560206d757374206265206d6f7265207468616e2074686520606d696e696d756d5f62616c616e636560207370656369666965642062792060543a3a43757272656e6379602e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20627920746865207374617368206163636f756e742e202d20496e646570656e64656e74206f662074686520617267756d656e74732e204d6f64657261746520636f6d706c65786974792e202d20546872656520657874726120444220656e74726965732e204e4f54453a2054776f206f66207468652073746f726167652077726974657320286053656c663a3a626f6e646564602c206053656c663a3a7061796565602920617265205f6e657665725f20636c65616e656420756e6c6573732074686520606f726967696e602066616c6c732062656c6f77205f6578697374656e7469616c206465706f7369745f20616e6420676574732072656d6f76656420617320647573742e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d202d20526561643a20426f6e6465642c204c65646765722c205b4f726967696e204163636f756e745d2c2043757272656e74204572612c20486973746f72792044657074682c204c6f636b73202d2057726974653a20426f6e6465642c2050617965652c205b4f726967696e204163636f756e745d2c204c6f636b732c204c656467657200000000000000e09411000c0000000000000000000000cbed1200030000000000000000000000000000000000000000000000000000000000000054311300ec9411000000000000000000fc94110007000000000000000100000000000000349511000e0000000000000000000000cbed120003000000000000000000000000000000000000000000000000000000000000005431130044951100000000000000000054951100010000000000000001000000000000005c951100150000000000000000000000cbed120003000000000000000000000000000000000000000000000000000000000000005431130074951100000000000000000084951100010000000000000001000000000000008c9511000d00000000000000000000002c1a13001100000000000000000000000000000000000000000000000000000000000000543113009c9511000000000000000000ac95110003000000000000000100000000000000c4951100060000000105000000000000e3f812000c00000000000000e3f812000c0000000000000000000000000000000000000054311300cc9511000000000000000000dc9511000100000000000000000000000000000069511100060000000102000000000000e3f812000c00000000000000e4951100290000000000000000000000000000000000000054311300109611000000000000000000209611000100000000000000000000000000000028961100050000000105000000000000e3f812000c00000000000000ad7911001f00000000000000000000000000000000000000543113003096110000000000000000004096110001000000000000000100000000000000f04e11000a0000000105000000000000e3f812000c00000000000000067d11000e000000000000000000000000000000000000005431130048961100000000000000000058961100010000000000000001000000000000005f5111000a0000000105000000000000e3f812000c00000000000000609611001900000000000000000000000000000000000000543113007c96110000000000000000008c96110001000000000000000000000000000000949611000a00000000000000000000008e721100080000000000000000000000000000000000000000000000000000000000000054311300a09611000000000000000000b096110004000000000000000000000000000000d0961100090000000000000000000000d99611000d0000000000000000000000000000000000000000000000000000000000000054311300e89611000000000000000000f896110004000000000000000000000000000000189711001500000001050000000000008e7211000800000000000000a03712000c00000000000000000000000000000000000000543113003097110000000000000000004097110004000000000000000000000000000000b24e11000b00000002050500000000008e7211000800000000000000e3f812000c00000000000000609711002400000000000000543113008497110000000000000000009497110006000000000000000100000000000000c49711001200000002050500000000008e7211000800000000000000e3f812000c0000000000000060971100240000000000000054311300d89711000000000000000000e89711000b000000000000000100000000000000409811001200000002050500000000008e7211000800000000000000e3f812000c00000000000000067d11000e000000000000005431130054981100000000000000000064981100050000000000000001000000000000008c9811001300000001050000000000008e721100080000000000000057a912000c0000000000000000000000000000000000000054311300a09811000000000000000000b098110003000000000000000000000000000000ed4f11001000000001050000000000008e7211000800000000000000c89811001d0000000000000000000000000000000000000054311300e89811000000000000000000f898110002000000000000000100000000000000089911000e00000001050000000000008e721100080000000000000057a912000c00000000000000000000000000000000000000543113001899110000000000000000002899110002000000000000000100000000000000389911000800000000000000000000004099110007000000000000000000000000000000000000000000000000000000000000005431130048991100000000000000000058991100010000000000000001000000000000006099110013000000000000000000000055f3120007000000000000000000000000000000000000000000000000000000000000005431130074991100000000000000000084991100030000000000000001000000000000009c99110013000000000000000000000057a912000c0000000000000000000000000000000000000000000000000000000000000054311300b09911000000000000000000c099110002000000000000000100000000000000d09911001000000001050000000000008e7211000800000000000000e09911002f0000000000000000000000000000000000000054311300109a11000000000000000000209a110001000000000000000100000000000000289a11000a0000000000000000000000329a11001d0000000000000000000000000000000000000000000000000000000000000054311300509a11000000000000000000609a110004000000000000000100000000000000fd4f11001300000002050500000000008e7211000800000000000000e3f812000c00000000000000809a1100170000000000000054311300989a11000000000000000000a89a110002000000000000000000000000000000105011001300000002050500000000008e7211000800000000000000e3f812000c0000000000000057a912000c0000000000000054311300b89a11000000000000000000c89a1100010000000000000000000000000000002c5011000d0000000105000000000000e3f812000c00000000000000d09a1100170000000000000000000000000000000000000054311300e89a11000000000000000000f89a11000100000000000000000000000000000023501100090000000105000000000000009b11002300000000000000239b1100220000000000000000000000000000000000000054311300489b11000000000000000000589b110002000000000000000100000000000000689b11001600000000000000000000008e721100080000000000000000000000000000000000000000000000000000000000000054311300809b11000000000000000000909b110001000000000000000000000000000000989b1100150000000000000000000000a03712000c0000000000000000000000000000000000000000000000000000000000000054311300b09b11000000000000000000c09b1100030000000000000001000000000000009cbe12000e0000000000000000000000aabe1200080000000000000000000000000000000000000000000000000000000000000054311300d89b11000000000000000000e89b1100040000000000000001000000486973746f72794465707468120000000000000001000000670000009fa91100230000005431130000000000c2a911004e000000543113000000000010aa11005800000068aa11004e000000b6aa11000c00000056616c696461746f72436f756e7400001200000000000000010000002200000075a911002a0000004d696e696d756d56616c696461746f72436f756e740000001200000000000000010000002200000025a9110050000000496e76756c6e657261626c65730000001200000000000000010000003f00000051a8110056000000a7a8110053000000faa811002b000000426f6e64656400001200000000000000010000002300000011a81100400000005374616b696e674c65646765723c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e00000012000000000000000100000023000000c0a711005100000050617965650000001200000000000000010000005e00000087a71100390000001200000000000000010000006800000036a71100510000004e6f6d696e6174696f6e733c543a3a4163636f756e7449643e00000012000000000000000100000023000000dda611005900000043757272656e744572610000120000000000000001000000230000004da6110017000000543113000000000064a6110059000000bda6110020000000416374697665457261416374697665457261496e666f00001200000000000000010000002300000096a51100360000005431130000000000cca511005600000022a611002b00000045726173537461727453657373696f6e496e64657800000012000000000000000100000023000000b6a411004c000000543113000000000002a51100580000005aa511003c0000004578706f737572653c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e1200000000000000010000006900000098a411001e000000543113000000000038a2110058000000543113000000000090a211002a00000048a4110050000000457261735374616b657273436c6970706564000012000000000000000100000069000000baa21100260000005431130000000000e0a211005600000036a31100370000006da3110047000000b4a311003d0000005431130000000000f1a3110057000000543113000000000090a211002a00000048a41100500000004572617356616c696461746f725072656673000012000000000000000100000068000000f4a1110044000000543113000000000038a2110058000000543113000000000090a211002a0000004572617356616c696461746f7252657761726400120000000000000001000000230000006aa11100420000005431130000000000aca1110048000000457261526577617264506f696e74733c543a3a4163636f756e7449643e0000001200000000000000010000006a000000f6a011002b00000021a111004900000045726173546f74616c5374616b6500001200000000000000010000004100000074a011003b000000afa0110047000000466f726365457261466f7263696e67001200000000000000010000005e0000005fa0110015000000536c6173685265776172644672616374696f6e0012000000000000000100000022000000e89f11003e000000543113000000000026a011003900000043616e63656c6564536c6173685061796f75740012000000000000000100000041000000689f110045000000ad9f11003b000000556e6170706c696564536c61736865735665633c556e6170706c696564536c6173683c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e3e001200000000000000010000006b000000379f110031000000426f6e646564457261735665633c28457261496e6465782c2053657373696f6e496e646578293e001200000000000000010000006c0000008d9e1100490000005431130000000000d69e110032000000089f11002f0000002850657262696c6c2c2042616c616e63654f663c543e290012000000000000000100000023000000209e110051000000719e11001c00000012000000000000000100000023000000c89d110058000000736c617368696e673a3a536c617368696e675370616e730012000000000000000100000023000000a59d11002300000028543a3a4163636f756e7449642c20736c617368696e673a3a5370616e496e64657829736c617368696e673a3a5370616e5265636f72643c42616c616e63654f663c543e3e0000001200000000000000010000006d000000289d11004f000000779d11002e0000004561726c69657374556e6170706c696564536c617368000012000000000000000100000023000000e99c11003f00000043757272656e74506c616e6e656453657373696f6e00000012000000000000000100000022000000639c11003a00000054311300000000009d9c11004c0000001200000000000000010000006e000000089c110033000000dcbe12001f00000054311300000000003b9c1100280000002054727565206966206e6574776f726b20686173206265656e20757067726164656420746f20746869732076657273696f6e2e20546869732069732073657420746f2076362e302e3020666f72206e6577206e6574776f726b732e20546865206c61737420706c616e6e65642073657373696f6e207363686564756c6564206279207468652073657373696f6e2070616c6c65742e2054686973206973206261736963616c6c7920696e2073796e632077697468207468652063616c6c20746f205b6053657373696f6e4d616e616765723a3a6e65775f73657373696f6e605d2e20546865206561726c696573742065726120666f72207768696368207765206861766520612070656e64696e672c20756e6170706c69656420736c6173682e205265636f72647320696e666f726d6174696f6e2061626f757420746865206d6178696d756d20736c617368206f6620612073746173682077697468696e206120736c617368696e67207370616e2c2061732077656c6c20617320686f77206d7563682072657761726420686173206265656e2070616964206f75742e20536c617368696e67207370616e7320666f72207374617368206163636f756e74732e20416c6c20736c617368696e67206576656e7473206f6e206e6f6d696e61746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682076616c7565206f6620746865206572612e20416c6c20736c617368696e67206576656e7473206f6e2076616c696461746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682070726f706f7274696f6e20616e6420736c6173682076616c7565206f6620746865206572612e2041206d617070696e672066726f6d207374696c6c2d626f6e646564206572617320746f207468652066697273742073657373696f6e20696e646578206f662074686174206572612e204d75737420636f6e7461696e7320696e666f726d6174696f6e20666f72206572617320666f72207468652072616e67653a20605b6163746976655f657261202d20626f756e64696e675f6475726174696f6e3b206163746976655f6572615d6020416c6c20756e6170706c69656420736c61736865732074686174206172652071756575656420666f72206c617465722e2054686520616d6f756e74206f662063757272656e637920676976656e20746f207265706f7274657273206f66206120736c617368206576656e74207768696368207761732063616e63656c65642062792065787472616f7264696e6172792063697263756d7374616e6365732028652e672e20676f7665726e616e6365292e205468652070657263656e74616765206f662074686520736c617368207468617420697320646973747269627574656420746f207265706f72746572732e205468652072657374206f662074686520736c61736865642076616c75652069732068616e646c6564206279207468652060536c617368602e204d6f6465206f662065726120666f7263696e672e2054686520746f74616c20616d6f756e74207374616b656420666f7220746865206c6173742060484953544f52595f44455054486020657261732e20496620746f74616c206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207374616b652069732072657475726e65642e205265776172647320666f7220746865206c6173742060484953544f52595f44455054486020657261732e20496620726577617264206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207265776172642069732072657475726e65642e2054686520746f74616c2076616c696461746f7220657261207061796f757420666f7220746865206c6173742060484953544f52595f44455054486020657261732e2045726173207468617420686176656e27742066696e697368656420796574206f7220686173206265656e2072656d6f76656420646f65736e27742068617665207265776172642e2053696d696c617220746f2060457261735374616b657273602c207468697320686f6c64732074686520707265666572656e636573206f662076616c696461746f72732e2054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e2049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e20436c6970706564204578706f73757265206f662076616c696461746f72206174206572612e20546869732069732073696d696c617220746f205b60457261735374616b657273605d20627574206e756d626572206f66206e6f6d696e61746f7273206578706f736564206973207265647563656420746f207468652060543a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602062696767657374207374616b6572732e20284e6f74653a20746865206669656c642060746f74616c6020616e6420606f776e60206f6620746865206578706f737572652072656d61696e7320756e6368616e676564292e2054686973206973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e2054686973206973206b657965642066697374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e204578706f73757265206f662076616c696461746f72206174206572612e205468652073657373696f6e20696e646578206174207768696368207468652065726120737461727420666f7220746865206c6173742060484953544f52595f44455054486020657261732e204e6f74653a205468697320747261636b7320746865207374617274696e672073657373696f6e2028692e652e2073657373696f6e20696e646578207768656e20657261207374617274206265696e67206163746976652920666f7220746865206572617320696e20605b43757272656e74457261202d20484953544f52595f44455054482c2043757272656e744572615d602e20546865206163746976652065726120696e666f726d6174696f6e2c20697420686f6c647320696e64657820616e642073746172742e2054686520616374697665206572612069732074686520657261206265696e672063757272656e746c792072657761726465642e2056616c696461746f7220736574206f66207468697320657261206d75737420626520657175616c20746f205b6053657373696f6e496e746572666163653a3a76616c696461746f7273605d2e205468652063757272656e742065726120696e6465782e205468697320697320746865206c617465737420706c616e6e6564206572612c20646570656e64696e67206f6e20686f77207468652053657373696f6e2070616c6c657420717565756573207468652076616c696461746f72207365742c206974206d6967687420626520616374697665206f72206e6f742e20546865206d61702066726f6d206e6f6d696e61746f72207374617368206b657920746f2074686520736574206f66207374617368206b657973206f6620616c6c2076616c696461746f727320746f206e6f6d696e6174652e20546865206d61702066726f6d202877616e6e616265292076616c696461746f72207374617368206b657920746f2074686520707265666572656e636573206f6620746861742076616c696461746f722e2057686572652074686520726577617264207061796d656e742073686f756c64206265206d6164652e204b657965642062792073746173682e204d61702066726f6d20616c6c2028756e6c6f636b6564292022636f6e74726f6c6c657222206163636f756e747320746f2074686520696e666f20726567617264696e6720746865207374616b696e672e204d61702066726f6d20616c6c206c6f636b65642022737461736822206163636f756e747320746f2074686520636f6e74726f6c6c6572206163636f756e742e20416e792076616c696461746f72732074686174206d6179206e6576657220626520736c6173686564206f7220666f726369626c79206b69636b65642e20497427732061205665632073696e63652074686579277265206561737920746f20696e697469616c697a6520616e642074686520706572666f726d616e636520686974206973206d696e696d616c2028776520657870656374206e6f206d6f7265207468616e20666f757220696e76756c6e657261626c65732920616e64207265737472696374656420746f20746573746e6574732e204d696e696d756d206e756d626572206f66207374616b696e67207061727469636970616e7473206265666f726520656d657267656e637920636f6e646974696f6e732061726520696d706f7365642e2054686520696465616c206e756d626572206f66207374616b696e67207061727469636970616e74732e204e756d626572206f66206572617320746f206b65657020696e20686973746f72792e20496e666f726d6174696f6e206973206b65707420666f72206572617320696e20605b63757272656e745f657261202d20686973746f72795f64657074683b2063757272656e745f6572615d602e204d757374206265206d6f7265207468616e20746865206e756d626572206f6620657261732064656c617965642062792073657373696f6e206f74686572776973652e20492e652e2061637469766520657261206d75737420616c7761797320626520696e20686973746f72792e20492e652e20606163746976655f657261203e2063757272656e745f657261202d20686973746f72795f646570746860206d7573742062652067756172616e746565642e000000000000dcab11000e00000000000000a03712000c0000000000000054311300ecab11000000000000000000fcab110001000000000000000000000004ac11000f000000000000008e72110008000000000000005431130014ac1100000000000000000024ac11000100000000000000000000002cac110012000000000000008e72110008000000000000005431130040ac1100000000000000000050ac110005000000000000000000000078ac11002000000000000000cbed120003000000000000005431130098ac11000000000000000000a8ac1100040000000000000000000000c8ac11000e00000000000000cbed1200030000000000000054311300d8ac11000000000000000000e8ac1100010000000000000053657373696f6e7350657245726100001200000000000000010000006f000000feae11001c000000426f6e64696e674475726174696f6e0012000000000000000100000070000000c5ae110039000000536c61736844656665724475726174696f6e000012000000000000000100000071000000fdad11004000000054311300000000003dae11002f0000006cae11004b000000b7ae11000e0000004d61784e6f6d696e61746f72526577617264656450657256616c696461746f72120000000000000001000000720000001dad11003e00000054311300000000005bad11005a000000b5ad1100480000004d61784e6f6d696e6174696f6e73000012000000000000000100000073000000f0ac11002d000000204d6178696d756d206e756d626572206f66206e6f6d696e6174696f6e7320706572206e6f6d696e61746f722e20546865206d6178696d756d206e756d626572206f66206e6f6d696e61746f727320726577617264656420666f7220656163682076616c696461746f722e20466f7220656163682076616c696461746f72206f6e6c79207468652060244d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602062696767657374207374616b6572732063616e20636c61696d207468656972207265776172642e2054686973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e204e756d626572206f662065726173207468617420736c6173686573206172652064656665727265642062792c20616674657220636f6d7075746174696f6e2e20546869732073686f756c64206265206c657373207468616e2074686520626f6e64696e67206475726174696f6e2e2053657420746f203020696620736c61736865732073686f756c64206265206170706c69656420696d6d6564696174656c792c20776974686f7574206f70706f7274756e69747920666f7220696e74657276656e74696f6e2e204e756d626572206f6620657261732074686174207374616b65642066756e6473206d7573742072656d61696e20626f6e64656420666f722e204e756d626572206f662073657373696f6e7320706572206572612e000000000000a8b011000900000000000000b4b01100030000000000000000000000ccb01100030000000000000000000000e4b011000600000000000000c0f51100020000000000000000000000ecb01100010000000000000000000000f4b011000500000000000000c0f51100020000000000000000000000fcb011000200000000000000000000000cb111001a0000000000000028b1110001000000000000000000000030b1110002000000000000000000000040b111000f000000000000005431130000000000000000000000000050b11100010000000000000000000000c49511000600000000000000c0f5110002000000000000000000000058b1110004000000000000000000000078b111000800000000000000c0f5110002000000000000000000000080b1110001000000000000000000000088b111000900000000000000c0f5110002000000000000000000000094b11100020000000000000000000000a4b111000600000000000000bccf1200020000000000000000000000acb1110001000000000000004572615061796f75740000008e72110008000000d5d1120007000000d5d1120007000000aeb411005600000004b511003100000035b511002b00000052657761726400006fb411003f000000536c61736800000010b411004900000059b41100160000004f6c64536c617368696e675265706f72744469736361726465640000a03712000c000000a5b3110047000000ecb31100240000005374616b696e67456c656374696f6e0083b3110022000000b1b21100350000005431130000000000e6b21100540000003ab3110049000000556e626f6e6465647ab211003700000057697468647261776e000000f7b11100570000004eb211002c0000004b69636b65640000b4b11100430000002041206e6f6d696e61746f7220686173206265656e206b69636b65642066726f6d20612076616c696461746f722e205c5b6e6f6d696e61746f722c2073746173685c5d20416e206163636f756e74206861732063616c6c6564206077697468647261775f756e626f6e6465646020616e642072656d6f76656420756e626f6e64696e67206368756e6b7320776f727468206042616c616e6365602066726f6d2074686520756e6c6f636b696e672071756575652e205c5b73746173682c20616d6f756e745c5d20416e206163636f756e742068617320756e626f6e646564207468697320616d6f756e742e205c5b73746173682c20616d6f756e745c5d20416e206163636f756e742068617320626f6e646564207468697320616d6f756e742e205c5b73746173682c20616d6f756e745c5d204e4f54453a2054686973206576656e74206973206f6e6c7920656d6974746564207768656e2066756e64732061726520626f6e64656420766961206120646973706174636861626c652e204e6f7461626c792c2069742077696c6c206e6f7420626520656d697474656420666f72207374616b696e672072657761726473207768656e20746865792061726520616464656420746f207374616b652e2041206e657720736574206f66207374616b6572732077617320656c65637465642e20416e206f6c6420736c617368696e67207265706f72742066726f6d2061207072696f72206572612077617320646973636172646564206265636175736520697420636f756c64206e6f742062652070726f6365737365642e205c5b73657373696f6e5f696e6465785c5d204f6e652076616c696461746f722028616e6420697473206e6f6d696e61746f72732920686173206265656e20736c61736865642062792074686520676976656e20616d6f756e742e205c5b76616c696461746f722c20616d6f756e745c5d20546865207374616b657220686173206265656e207265776172646564206279207468697320616d6f756e742e205c5b73746173682c20616d6f756e745c5d2054686520657261207061796f757420686173206265656e207365743b207468652066697273742062616c616e6365206973207468652076616c696461746f722d7061796f75743b20746865207365636f6e64206973207468652072656d61696e6465722066726f6d20746865206d6178696d756d20616d6f756e74206f66207265776172642e205c5b6572615f696e6465782c2076616c696461746f725f7061796f75742c2072656d61696e6465725c5d566f74657220736e617073686f7420746f6f2062696754617267657420736e617073686f7420746f6f206269674572726f723a2073746172745f73657373696f6e5f696e646578206d7573742062652073657420666f722063757272656e745f6572615761726e696e673a20412073657373696f6e206170706561727320746f2068617665206265656e20736b69707065642e00fc07130055000000940400000100000000000000495111000d0000000000000034b811000100000000000000000000004151110008000000000000003cb81100010000000000000000000000345111000d0000000000000044b81100010000000000000000000000275111000d000000000000004cb811000100000000000000000000001b5111000c0000000000000054b811000100000000000000000000000d5111000e000000000000005cb81100010000000000000000000000fc501100110000000000000064b81100010000000000000000000000eb50110011000000000000006cb81100010000000000000000000000df5011000c0000000000000074b81100010000000000000000000000d25011000d000000000000007cb81100010000000000000000000000c65011000c0000000000000084b81100010000000000000000000000b450110012000000000000008cb811000100000000000000000000009a5011001a0000000000000094b811000100000000000000000000008850110012000000000000009cb811000100000000000000000000007a5011000e00000000000000a4b81100010000000000000000000000655011001500000000000000acb811000100000000000000000000004f5011001600000000000000b4b81100010000000000000000000000475011000800000000000000bcb81100010000000000000000000000395011000e00000000000000c4b81100010000000000000000000000565111000900000000000000ccb811000100000000000000ddbb11001a000000c8bb110015000000afbb11001900000091bb11001e00000078bb11001900000067bb11001100000045bb11002200000012bb110033000000edba110025000000c4ba11002900000091ba1100330000007aba1100170000005bba11001f0000003aba110021000000f7b9110043000000c6b911003100000099b911002d0000004ab911004f00000024b9110026000000d4b81100500000002041206e6f6d696e6174696f6e207461726765742077617320737570706c69656420746861742077617320626c6f636b6564206f72206f7468657277697365206e6f7420612076616c696461746f722e20546f6f206d616e79206e6f6d696e6174696f6e207461726765747320737570706c6965642e20496e7465726e616c20737461746520686173206265636f6d6520736f6d65686f7720636f7272757074656420616e6420746865206f7065726174696f6e2063616e6e6f7420636f6e74696e75652e20496e636f7272656374206e756d626572206f6620736c617368696e67207370616e732070726f76696465642e20496e636f72726563742070726576696f757320686973746f727920646570746820696e7075742070726f76696465642e205265776172647320666f72207468697320657261206861766520616c7265616479206265656e20636c61696d656420666f7220746869732076616c696461746f722e204974656d7320617265206e6f7420736f7274656420616e6420756e697175652e20496e76616c6964206e756d626572206f66206e6f6d696e6174696f6e732e20496e76616c69642065726120746f207265776172642e20417474656d7074696e6720746f2074617267657420612073746173682074686174207374696c6c206861732066756e64732e2043616e206e6f74207265626f6e6420776974686f757420756e6c6f636b696e67206368756e6b732e2043616e206e6f74207363686564756c65206d6f726520756e6c6f636b206368756e6b732e2043616e206e6f7420626f6e6420776974682076616c7565206c657373207468616e206d696e696d756d2062616c616e63652e20536c617368207265636f726420696e646578206f7574206f6620626f756e64732e204475706c696361746520696e6465782e20546172676574732063616e6e6f7420626520656d7074792e20436f6e74726f6c6c657220697320616c7265616479207061697265642e20537461736820697320616c726561647920626f6e6465642e204e6f742061207374617368206163636f756e742e204e6f74206120636f6e74726f6c6c6572206163636f756e742e0012000000000000000100000074000000740000007500000012000000000000000100000074000000760000007500000042616265000000000000000070bc110008000000000000000000000078bc11000f00000000000000000000001e000000000000000000000088bc11000c0000000000000007000000706f6c6b61646f747061726974792d706f6c6b61646f7400df6acb689907609b0300000037e397fc7c91f5e40100000040fe3ad401f8959a04000000d2bc9897eed08f1502000000f78b278be53f454c02000000af2c0297a23e6d3d01000000ed99c5acb25eedf502000000cbca25e39f14238702000000687ad44ad37f03c201000000ab3c0572291feb8b01000000bc9d89904f5b923f0100000037c8bb1350a9a2a8010000006772616e62616265696d6f6e706172616173676e617564690000000040787d018017b42c00e1f505483e332d280479051065b22d80cb0905d88b312e68b0a604b8aeb02ec06a4e0498d12f2ff0c5ff0360f8ae2f70b4b903401b2e30f8477b030842ad30b0a94303e8642c31181e1203c887ab3150f9e502c0a62a32e8a6be02a0c9a932289e9b0268f02833f8657c02780ba833c89860024032273408d147026849a63498c031023070253570151e02408ba43510910c0220ae2336f8f4fc0160c1a236600eef0140e4213780aae20198f3a03748a2d70138f71f38a8cecd0190069f38780cc501a8f61d396040bd01701d9d39204bb601c82c1c3a3019b00190539b3a2093aa0190471a3b50a9a501783f993b3848a10100ca9a3b9838a10150617920444f547320746f2074686520506f6c6b61646f74206163636f756e743a53797374656d5363686564756c657254696d657374616d70496e646963657342616c616e6365735472616e73616374696f6e5061796d656e745374616b696e674f6666656e636573486973746f726963616c4772616e647061417574686f72697479446973636f76657279436f756e63696c546563686e6963616c436f6d6d6974746565456c656374696f6e7350687261676d656e546563686e6963616c4d656d626572736869705574696c6974794964656e7469747950726f78794d756c7469736967426f756e74696573456c656374696f6e50726f76696465724d756c7469506861736500770000002c000000040000007800000078000000790000000000000059be110006000000000000007a000000000000000000000000000000000000000000000000000000000000007b0000000000000000000000000000007c0000000000000000000000000000007d0000000000000000000000000000007e000000000000000000000000000000000000007421130018000000000000007f000000000000000000000000000000000000000000000000000000020000000000000000000000000000000200000000000000000000000000000000000000800000000000000000000000000000008000000000000000000000001f000000000000005fbe110009000000000000008100000000000000000000000000000000000000000000000000000000000000820000000000000000000000000000008300000000000000000000000000000080000000000000000000000000000000840000000000000000000000010000000000000028bc110004000000000000008500000000000000000000000000000000000000000000000000000000000000860000000000000000000000020000000000000000000000000000000000000087000000000000000000000000000000880000000000000000000000020000000000000068be1100090000000000000089000000000000000000000000000000000000000000000000000000000000008a000000000000000000000002000000000000000000000000000000000000008b000000000000000000000000000000800000000000000000000000030000000000000071be110007000000000000008c000000000000000000000000000000000000000000000000000000000000008d0000000000000000000000000000008e0000000000000000000000000000008f000000000000000000000000000000800000000000000000000000040000000000000078be110008000000000000009000000000000000000000000000000000000000000000000000000000000000910000000000000000000000000000009200000000000000000000000000000093000000000000000000000000000000940000000000000000000000050000000000000080be1100120000000000000095000000000000000000000000000000000000000000000000000000020000000000000000000000000000000200000000000000000000000000000000000000960000000000000000000000000000008000000000000000000000002000000000000000102d12000a000000000000009700000000000000000000000000000000000000000000000000000000000000980000000000000000000000020000000000000000000000000000000000000080000000000000000000000000000000990000000000000000000000060000000000000092be110007000000000000009a000000000000000000000000000000000000000000000000000000000000009b0000000000000000000000000000009c0000000000000000000000000000009d0000000000000000000000000000009e0000000000000000000000070000000000000099be110008000000000000009f0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000a0000000000000000000000000000000800000000000000000000000000000008000000000000000000000000800000000000000a1be11000a0000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000200000000000000000000000000000000000000800000000000000000000000000000008000000000000000000000002100000000000000a08012000700000000000000a100000000000000000000000000000000000000000000000000000000000000a2000000000000000000000000000000a300000000000000000000000000000080000000000000000000000000000000a400000000000000000000000900000000000000abbe11000700000000000000a500000000000000000000000000000000000000000000000000000000000000a6000000000000000000000000000000a700000000000000000000000000000080000000000000000000000000000000a800000000000000000000000b000000000000003e2c12000800000000000000a900000000000000000000000000000000000000000000000000000000000000aa000000000000000000000000000000ab00000000000000000000000000000080000000000000000000000000000000ac00000000000000000000000c00000000000000b2be1100120000000200000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000200000000000000000000000000000000000000800000000000000000000000000000008000000000000000000000000d000000000000005e8012000900000000000000ad00000000000000000000000000000000000000000000000000000000000000ae000000000000000000000000000000af000000000000000000000000000000b0000000000000000000000000000000b100000000000000000000000e00000000000000c4be11000700000000000000b200000000000000000000000000000000000000000000000000000000000000b3000000000000000000000000000000b400000000000000000000000000000080000000000000000000000000000000b500000000000000000000000f00000000000000cbbe11001200000000000000b600000000000000000000000000000000000000000000000000000000000000b3000000000000000000000000000000b400000000000000000000000000000080000000000000000000000000000000b500000000000000000000001000000000000000ddbe11001100000000000000b700000000000000000000000000000000000000000000000000000000000000b8000000000000000000000000000000b9000000000000000000000000000000ba000000000000000000000000000000bb00000000000000000000001100000000000000eebe11001300000000000000bc00000000000000000000000000000000000000000000000000000000000000bd000000000000000000000000000000be000000000000000000000000000000800000000000000000000000000000008000000000000000000000001200000000000000baeb11000800000000000000bf00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000c1000000000000000000000000000000c2000000000000000000000000000000c300000000000000000000001300000000000000b62813000600000000000000c400000000000000000000000000000000000000000000000000000000000000c5000000000000000000000000000000c6000000000000000000000000000000c7000000000000000000000000000000c800000000000000000000001800000000000000bc2d12000700000000000000c900000000000000000000000000000000000000000000000000000000000000ca000000000000000000000000000000cb000000000000000000000000000000cc000000000000000000000000000000cd0000000000000000000000190000000000000001bf110007000000020000000000000000000000000000000000000000000000000000000000000000000000ce000000000000000000000000000000cf000000000000000000000000000000800000000000000000000000000000008000000000000000000000001a0000000000000008bf11000800000000000000d000000000000000000000000000000000000000000000000000000000000000d1000000000000000000000000000000d2000000000000000000000000000000d3000000000000000000000000000000d400000000000000000000001c0000000000000010bf11000500000000000000d500000000000000000000000000000000000000000000000000000000000000d6000000000000000000000000000000d7000000000000000000000000000000d8000000000000000000000000000000d900000000000000000000001d0000000000000015bf11000800000000000000da00000000000000000000000000000000000000000000000000000000000000db000000000000000000000000000000dc000000000000000000000000000000dd000000000000000000000000000000de00000000000000000000001e000000000000001dbf11000800000000000000df00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000e1000000000000000000000000000000e2000000000000000000000000000000e30000000000000000000000220000000000000074ec11000400000000000000e400000000000000000000000000000000000000000000000000000000000000e5000000000000000000000000000000e6000000000000000000000000000000e7000000000000000000000000000000e80000000000000000000000230000000000000025bf11001a00000000000000e900000000000000000000000000000000000000000000000000000000000000ea000000000000000000000000000000eb000000000000000000000000000000ec000000000000000000000000000000ed000000000000000000000024000000617373657274696f6e206661696c65643a20656467652e686569676874203d3d2073656c662e686569676874202d203158cd11005b0000007702000009000000617373657274696f6e206661696c65643a20696478203c20434150414349545958cd11005b0000007b020000090000002f72757374632f653337613133636333353934303034363633373338626431386438313030653664623936363663662f6c6962726172792f616c6c6f632f7372632f636f6c6c656374696f6e732f62747265652f6e6f64652e7273617373657274696f6e206661696c65643a2073656c662e686569676874203e203058cd11005b000000d40000000900000058cd11005b0000002b04000016000000617373657274696f6e206661696c65643a207372632e6c656e2829203d3d206473742e6c656e282958cd11005b000000b006000005000000617373657274696f6e206661696c65643a20656467652e686569676874203d3d2073656c662e6e6f64652e686569676874202d203100000058cd11005b000000990300000900000058cd11005b0000006a0400001600000094d011001300000058cd11005b000000a60400001f000000617373657274696f6e206661696c65643a206e65775f6c6566745f6c656e203c3d204341504143495459000058cd11005b000000da04000009000000617373657274696f6e206661696c65643a206f6c645f6c6566745f6c656e202b20636f756e74203c3d204341504143495459000058cd11005b0000008d0500000d000000617373657274696f6e206661696c65643a206f6c645f72696768745f6c656e203e3d20636f756e7458cd11005b0000008e0500000d00000058cd11005b000000be05000016000000617373657274696f6e206661696c65643a206f6c645f72696768745f6c656e202b20636f756e74203c3d2043415041434954590058cd11005b0000004e0500000d000000617373657274696f6e206661696c65643a206f6c645f6c6566745f6c656e203e3d20636f756e740058cd11005b0000004f0500000d00000058cd11005b0000007e05000016000000617373657274696f6e206661696c65643a206d6174636820747261636b5f656467655f696478207b5c6e202020204c6566744f7252696768743a3a4c6566742869647829203d3e20696478203c3d206f6c645f6c6566745f6c656e2c5c6e202020204c6566744f7252696768743a3a52696768742869647829203d3e20696478203c3d2072696768745f6c656e2c5c6e7d00000058cd11005b0000002005000009000000656d70747920696e7465726e616c206e6f6465000000000088d111000e0000000000000098d11100010000000000000000000000a0d111001500000000000000b8d11100010000000000000000000000298212000800000000000000c0d11100010000000000000000000000c8d111001300000000000000dcd11100010000000000000000000000e4d111001200000000000000f8d1110001000000000000000000000000d2110009000000000000000cd2110001000000000000000000000014d2110017000000000000002cd2110001000000000000000000000034d211000b0000000000000040d21100010000000000000056657374696e6742616c616e636500006ad31100270000004c69717569646974795265737472696374696f6e7300000038d31100320000001bd311001d000000496e73756666696369656e7442616c616e636500fdd211001e0000004578697374656e7469616c4465706f7369740000c2d211003b0000004b656570416c6976650000009ed21100240000004578697374696e6756657374696e675363686564756c65006bd2110033000000446561644163636f756e740048d21100230000002042656e6566696369617279206163636f756e74206d757374207072652d657869737420412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e74205472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742056616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742042616c616e636520746f6f206c6f7720746f2073656e642076616c756520476f7420616e206f766572666c6f7720616674657220616464696e67204163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2056657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c756500000026e3120056000000e20000000f00000079d411001d00000024d4110055000000d10000000f0000007573657220646f6573206e6f74206861766520616e206578697374696e672076657374696e67207363686564756c653b20712e652e642e00120000000c000000040000003700000024d41100550000001e0100001200000024d411005500000045010000120000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f76657374696e672f7372632f6c69622e72735f5f5068616e746f6d4974656d2063616e6e6f7420626520757365642e7061726974792f6d756c74692d70686173652d756e7369676e65642d656c656374696f6e4e6f726d616c2065787472696e73696373206861766520776569676874206c696d697420636f6e666967757265642062792064656661756c743b2071656408d5110020000000780000000a0000002f6275696c642f72756e74696d652f636f6d6d6f6e2f7372632f6c69622e7273f0d71100640000007300000013000000f0d71100640000004800000018000000f0d7110064000000480000002a000000f0d71100640000008a0000001800000063616c6c656420604f7074696f6e3a3a756e77726170282960206f6e206120604e6f6e65602076616c75650054d8110060000000220100002e000000f0d7110064000000b600000019000000f0d71100640000000101000042000000f0d711006400000015010000420000004475706c696361746520766f74657220286f72206f7468657220636f727275707420696e707574292e000000f0d7110064000000360100002100000054d8110060000000d80100002a000000f0d71100640000005901000015000000f0d71100640000005e0100001e00000012000000000000000100000021000000f0d7110064000000610000001a000000f0d7110064000000610000002c000000f0d7110064000000cb01000018000000f0d7110064000000cb01000021000000f0d7110064000000ce01000024000000f0d7110064000000ce01000039000000f0d7110064000000cf01000024000000f0d7110064000000cf01000039000000f0d7110064000000f301000023000000f0d7110064000000f30100002c000000f0d7110064000000f501000024000000f0d7110064000000f501000039000000f0d71100640000001802000035000000f0d71100640000001902000035000000f0d71100640000002202000024000000f0d71100640000002202000039000000f0d71100640000004402000035000000f0d71100640000004502000035000000f0d71100640000005a0200002b000000f0d71100640000005a02000046000000f0d71100640000005b02000028000000f0d71100640000005b02000047000000f0d7110064000000650200002b000000f0d71100640000006502000047000000f0d71100640000006602000028000000f0d711006400000066020000480000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f6e706f732d656c656374696f6e732f7372632f7265647563652e72732f72757374632f653337613133636333353934303034363633373338626431386438313030653664623936363663662f6c6962726172792f616c6c6f632f7372632f636f6c6c656374696f6e732f62747265652f6d61702f656e7472792e72737375626d69745f756e7369676e6564000000000018d911001a0000000000000034d911000100000000000000000000003cd911001b0000000000000058d9110001000000000000000000000060d9110019000000000000007cd91100010000000000000050726544697370617463684561726c795375626d697373696f6e0000ccd911001a000000507265446973706174636857726f6e6757696e6e6572436f756e7400a9d911002300000050726544697370617463685765616b5375626d697373696f6e00000084d9110025000000205375626d697373696f6e2077617320746f6f207765616b2c2073636f72652d776973652e2057726f6e67206e756d626572206f662077696e6e6572732070726573656e7465642e205375626d697373696f6e2077617320746f6f206561726c792e4f6666636861696e456c656374696f6e5374696c6c4f70656e4e6f7446696e646572556e6b6e6f776e546970416c72656164794b6e6f776e526561736f6e546f6f4269675072656d617475726500000000003cdb11000e000000000000004cdb11000200000000000000000000007cdb110013000000000000000000000014dc11000b0000000000000020dc110001000000000000000000000038dc1100130000000000000000000000d0dc11000700000000000000d8dc110003000000000000000000000020dd1100160000000000000000000000d0dd11000300000000000000d4dd110002000000000000000000000004de1100190000000000000000000000ccde1100090000000000000020dc1100010000000000000000000000d8de110011000000000000000000000060df1100090000000000000020dc11000100000000000000000000006cdf11000c000000000000007265706f72745f617765736f6d6500000000000059e81100060000000000000042ec12000700000000000000791b13000300000000000000e3f812000c00000069ea11005700000054311300000000006c0e1300340000005431130000000000c0ea11005500000015eb110030000000543113000000000010e611005800000068e61100170000007fe611003b0000005431130000000000bae611001e0000005431130000000000f2eb12000b00000045eb11003300000078eb1100250000009deb11001d0000003be811001e00000036ec12000c000000726574726163745f7469700000000000c6e511000400000000000000b7f91200070000005fe81100550000005431130000000000b4e81100380000005431130000000000ece811005400000040e911005100000091e911001400000054311300000000005ce1110059000000b5e11100580000005431130000000000a5e91100240000005431130000000000f2eb12000b000000c9e9110015000000dee911003700000015ea11002400000039ea11003000000036ec12000c0000007469705f6e6577000000000059e81100060000000000000042ec12000700000000000000791b13000300000000000000e3f812000c00000000000000cae5110009000000000000004db6120015000000d3e511003d0000005431130000000000fce211005500000051e311001d000000543113000000000010e611005800000068e61100170000007fe611003b000000d4e311005400000028e41100360000005431130000000000bae611001e0000005431130000000000f2eb12000b000000d8e61100550000002de71100300000005de71100420000009fe7110043000000e2e71100390000001be81100200000003be811001e00000036ec12000c0000007469700000000000c6e511000400000000000000b7f912000700000000000000cae5110009000000000000004db6120015000000cfe211002d0000005431130000000000fce211005500000051e311001d00000054311300000000005ce11100590000006ee3110058000000c6e311000e000000d4e311005400000028e411003600000054311300000000005ee4110059000000b7e411000d0000005431130000000000f2eb12000b0000000de2110039000000c4e41100450000007de0110040000000bde0110041000000543113000000000009e511005800000061e511003500000096e511001d000000b3e511001300000036ec12000c000000636c6f73655f746970000000fee011001800000054311300000000006c0e130034000000543113000000000016e111004600000054311300000000005ce1110059000000b5e11100580000005431130000000000f2eb12000b0000000de211003900000046e21100270000007de0110040000000bde01100410000006de211002b00000098e211003700000036ec12000c000000736c6173685f746970000000ccdf1100260000005431130000000000f2df11002b00000054311300000000001de011003e00000054311300000000005be01100220000005431130000000000f2eb12000b0000007de0110040000000bde011004100000036ec12000c0000002052656d6f766520616e6420736c61736820616e20616c72656164792d6f70656e207469702e204d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602e204173206120726573756c742c207468652066696e64657220697320736c617368656420616e6420746865206465706f7369747320617265206c6f73742e20456d6974732060546970536c617368656460206966207375636365737366756c2e202020605460206973206368617267656420617320757070657220626f756e6420676976656e2062792060436f6e7461696e734c656e677468426f756e64602e2020205468652061637475616c20636f737420646570656e6473206f6e2074686520696d706c656d656e746174696f6e206f662060543a3a54697070657273602e20436c6f736520616e64207061796f75742061207469702e2054686520746970206964656e74696669656420627920606861736860206d75737420686176652066696e69736865642069747320636f756e74646f776e20706572696f642e202d206068617368603a20546865206964656e74697479206f6620746865206f70656e2074697020666f722077686963682061207469702076616c7565206973206465636c617265642e205468697320697320666f726d65642020206173207468652068617368206f6620746865207475706c65206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e6566696369617279206163636f756e742049442e202d20436f6d706c65786974793a20604f285429602077686572652060546020697320746865206e756d626572206f6620746970706572732e2020206465636f64696e6720605469707065726020766563206f66206c656e677468206054602e202d20446252656164733a206054697073602c206054697070657273602c20607469702066696e64657260202d2044625772697465733a2060526561736f6e73602c206054697073602c206054697070657273602c20607469702066696e64657260204465636c6172652061207469702076616c756520666f7220616e20616c72656164792d6f70656e207469702e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062652061206d656d626572206f662074686520605469707065727360207365742e2020206173207468652068617368206f6620746865207475706c65206f66207468652068617368206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e65666963696172792020206163636f756e742049442e202d20607469705f76616c7565603a2054686520616d6f756e74206f66207469702074686174207468652073656e64657220776f756c64206c696b6520746f20676976652e20546865206d656469616e2074697020202076616c7565206f662061637469766520746970706572732077696c6c20626520676976656e20746f20746865206077686f602e20456d6974732060546970436c6f73696e676020696620746865207468726573686f6c64206f66207469707065727320686173206265656e207265616368656420616e642074686520636f756e74646f776e20706572696f642068617320737461727465642e2020206465636f64696e6720605469707065726020766563206f66206c656e677468206054602c20696e736572742074697020616e6420636865636b20636c6f73696e672c20202041637475616c6c792077656967687420636f756c64206265206c6f77657220617320697420646570656e6473206f6e20686f77206d616e7920746970732061726520696e20604f70656e5469706020627574206974202020697320776569676874656420617320696620616c6d6f73742066756c6c20692e65206f66206c656e6774682060542d31602e202d20446252656164733a206054697070657273602c20605469707360202d2044625772697465733a20605469707360686173687469705f76616c7565204769766520612074697020666f7220736f6d657468696e67206e65773b206e6f2066696e6465722773206665652077696c6c2062652074616b656e2e202d2060726561736f6e603a2054686520726561736f6e20666f722c206f7220746865207468696e6720746861742064657365727665732c20746865207469703b2067656e6572616c6c7920746869732077696c6c20626520202061205554462d382d656e636f6465642055524c2e202d206077686f603a20546865206163636f756e742077686963682073686f756c6420626520637265646974656420666f7220746865207469702e20456d69747320604e657754697060206966207375636365737366756c2e202d20436f6d706c65786974793a20604f2852202b2054296020776865726520605260206c656e677468206f662060726561736f6e602c2060546020697320746865206e756d626572206f6620746970706572732e2020202d20604f285429603a206465636f64696e6720605469707065726020766563206f66206c656e677468206054602020202020605460206973206368617267656420617320757070657220626f756e6420676976656e2062792060436f6e7461696e734c656e677468426f756e64602e20202020205468652061637475616c20636f737420646570656e6473206f6e2074686520696d706c656d656e746174696f6e206f662060543a3a54697070657273602e2020202d20604f285229603a2068617368696e6720616e6420656e636f64696e67206f6620726561736f6e206f66206c656e67746820605260202d20446252656164733a206054697070657273602c2060526561736f6e7360202d2044625772697465733a2060526561736f6e73602c20605469707360726561736f6e20526574726163742061207072696f72207469702d7265706f72742066726f6d20607265706f72745f617765736f6d65602c20616e642063616e63656c207468652070726f63657373206f662074697070696e672e204966207375636365737366756c2c20746865206f726967696e616c206465706f7369742077696c6c20626520756e72657365727665642e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e642074686520746970206964656e74696669656420627920606861736860206d7573742068617665206265656e207265706f7274656420627920746865207369676e696e67206163636f756e74207468726f75676820607265706f72745f617765736f6d65602028616e64206e6f74207468726f75676820607469705f6e657760292e20456d697473206054697052657472616374656460206966207375636365737366756c2e202d20436f6d706c65786974793a20604f283129602020202d20446570656e6473206f6e20746865206c656e677468206f662060543a3a48617368602077686963682069732066697865642e202d20446252656164733a206054697073602c20606f726967696e206163636f756e7460202d2044625772697465733a2060526561736f6e73602c206054697073602c20606f726967696e206163636f756e7460205265706f727420736f6d657468696e672060726561736f6e60207468617420646573657276657320612074697020616e6420636c61696d20616e79206576656e7475616c207468652066696e6465722773206665652e205061796d656e743a20605469705265706f72744465706f73697442617365602077696c6c2062652072657365727665642066726f6d20746865206f726967696e206163636f756e742c2061732077656c6c2061732060446174614465706f736974506572427974656020666f722065616368206279746520696e2060726561736f6e602e202d20436f6d706c65786974793a20604f2852296020776865726520605260206c656e677468206f662060726561736f6e602e2020202d20656e636f64696e6720616e642068617368696e67206f662027726561736f6e27202d20446252656164733a2060526561736f6e73602c20605469707360547265617375727900000000000074ec1100040000000105000000000000b7f91200070000000000000078ec11003c0000000000000000000000000000000000000054311300b4ec11000000000000000000c4ec110003000000000000000000000000000000dcec1100070000000106000000000000b7f91200070000000000000042ec1200070000000000000000000000000000000000000054311300e4ec11000000000000000000f4ec1100020000000000000000000000546970734f70656e5469703c543a3a4163636f756e7449642c2042616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265722c20543a3a486173683e12000000000000000100000023000000aeed11005900000007ee11004f00000056ee110020000000526561736f6e73001200000000000000010000002300000004ed11005200000056ed1100580000002053696d706c6520707265696d616765206c6f6f6b75702066726f6d2074686520726561736f6e2773206861736820746f20746865206f726967696e616c20646174612e20416761696e2c2068617320616e20696e73656375726520656e756d657261626c6520686173682073696e636520746865206b65792069732067756172616e7465656420746f2062652074686520726573756c74206f6620612073656375726520686173682e20546970734d6170207468617420617265206e6f742079657420636f6d706c657465642e204b65796564206279207468652068617368206f66206028726561736f6e2c2077686f29602066726f6d207468652076616c75652e2054686973206861732074686520696e73656375726520656e756d657261626c6520686173682066756e6374696f6e2073696e636520746865206b657920697473656c6620697320616c72656164792067756172616e7465656420746f20626520612073656375726520686173682e00000000000090ef11000c00000000000000a9f912000e00000000000000543113009cef11000000000000000000acef1100010000000000000000000000b4ef11000d00000000000000c1ef1100070000000000000054311300c8ef11000000000000000000d8ef1100010000000000000000000000e0ef1100140000000000000057a912000c0000000000000054311300f4ef1100000000000000000004f011000100000000000000000000000cf01100120000000000000057a912000c000000000000005431130020f01100000000000000000030f0110001000000000000000000000038f011001300000000000000cbed12000300000000000000543113004cf0110000000000000000005cf011000100000000000000546970436f756e74646f776e120000000000000001000000ee00000049f111005100000054697046696e6465727346656550657263656e74120000000000000001000000ef000000fdf011004c0000005469705265706f72744465706f7369744261736512000000000000000100000026000000c8f0110035000000446174614465706f7369745065724279746500001200000000000000010000002500000086f01100420000004d6178696d756d526561736f6e4c656e677468001200000000000000010000002b00000064f0110022000000204d6178696d756d2061636365707461626c6520726561736f6e206c656e6774682e2054686520616d6f756e742068656c64206f6e206465706f7369742070657220627974652077697468696e2074686520746970207265706f727420726561736f6e2e2054686520616d6f756e742068656c64206f6e206465706f73697420666f7220706c6163696e67206120746970207265706f72742e2054686520616d6f756e74206f66207468652066696e616c2074697020776869636820676f657320746f20746865206f726967696e616c207265706f72746572206f6620746865207469702e2054686520706572696f6420666f722077686963682061207469702072656d61696e73206f70656e20616674657220697320686173206163686965766564207468726573686f6c6420746970706572732e00000000000078f211000600000000000000e8d0120001000000000000000000000080f2110001000000000000000000000088f211000a00000000000000e8d0120001000000000000000000000094f211000100000000000000000000009cf21100090000000000000020d01200030000000000000000000000a8f21100010000000000000000000000b0f211000c00000000000000e8d01200010000000000000000000000bcf21100010000000000000000000000c4f211000a0000000000000020d01200030000000000000000000000d0f2110001000000000000004e65775469700000cbf3110033000000546970436c6f73696e67000087f3110044000000546970436c6f7365640000004bf311003c00000054697052657472616374656419f3110032000000546970536c61736865640000d8f21100410000002041207469702073756767657374696f6e20686173206265656e20736c61736865642e205c5b7469705f686173682c2066696e6465722c206465706f7369745c5d2041207469702073756767657374696f6e20686173206265656e207265747261637465642e205c5b7469705f686173685c5d2041207469702073756767657374696f6e20686173206265656e20636c6f7365642e205c5b7469705f686173682c2077686f2c207061796f75745c5d2041207469702073756767657374696f6e206861732072656163686564207468726573686f6c6420616e6420697320636c6f73696e672e205c5b7469705f686173685c5d2041206e6577207469702073756767657374696f6e20686173206265656e206f70656e65642e205c5b7469705f686173685c5d496e76616c696420756e7369676e6564207375626d697373696f6e206d7573742070726f6475636520696e76616c696420626c6f636b20616e6420646570726976652076616c696461746f722066726f6d20746865697220617574686f72696e67207265776172642e00c8f411006b000000d70200003b000000c8f411006b000000db0200002b000000c8f411006b000000de0200000d000000c8f411006b000000df0200000d000000120000000c00000004000000f0000000c8f411006b000000e20200004e0000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f656c656374696f6e2d70726f76696465722d6d756c74692d70686173652f7372632f6c69622e72730024d4110055000000c40000000f0000004e6f7456657374696e67416d6f756e744c6f770000000000b0f511000e00000000000000c0f51100020000000000000000000000d0f51100030000000000000000000000e8f511001000000000000000fce41200010000000000000000000000f8f51100010000000000000056657374696e6755706461746564000079e5120009000000d5d112000700000047f61100560000009df6110046000000e3f611001600000056657374696e67436f6d706c6574656400f611004700000020416e205c5b6163636f756e745c5d20686173206265636f6d652066756c6c79207665737465642e204e6f20667572746865722076657374696e672063616e2068617070656e2e2054686520616d6f756e742076657374656420686173206265656e20757064617465642e205468697320636f756c6420696e646963617465206d6f72652066756e64732061726520617661696c61626c652e205468652062616c616e636520676976656e2069732074686520616d6f756e74207768696368206973206c65667420756e7665737465642028616e642074687573206c6f636b6564292e205c5b6163636f756e742c20756e7665737465645c5d00000000000000acf71100040000000000000054311300000000000000000000000000b0f711000d000000000000000000000018f811000a0000000000000024f811000100000000000000000000003cf811000f0000000000000000000000b4f811000f00000000000000c4f81100020000000000000000000000f4f8110010000000000000000000000074f9110015000000000000008cf91100030000000000000000000000d4f91100110000000000000076657374fefe11002f00000054311300000000002dff11005800000034fe11001a00000054311300000000004efe1100350000005431130000000000f2eb12000b000000bcfb11000a00000085ff11001e000000a3ff11003f000000e2ff11004000000036ec12000c000000766573745f6f74686572000000000000739a1200060000000000000085fc110023000000b0fd11002f00000054311300000000006c0e1300340000005431130000000000dffd11005500000034fe11001a00000054311300000000004efe1100350000005431130000000000f2eb12000b000000bcfb11000a000000f3fc11001e00000083fe11003d000000c0fe11003e00000036ec12000c0000007665737465645f7472616e736665720000000000739a1200060000000000000085fc11002300000000000000a8fc11000800000000000000b0fc110029000000d9fc11001a00000054311300000000006c0e1300340000005431130000000000e2fa11004500000027fb11004000000067fb11003d0000005431130000000000a4fb1100180000005431130000000000f2eb12000b000000bcfb11000a000000f3fc11001e00000011fd11004f00000060fd11005000000036ec12000c000000666f7263655f7665737465645f7472616e73666572000000000000007ffc1100060000000000000085fc11002300000000000000739a1200060000000000000085fc11002300000000000000a8fc11000800000000000000b0fc1100290000005cfa110019000000543113000000000075fa1100320000005431130000000000a7fa11003b000000e2fa11004500000027fb11004000000067fb11003d0000005431130000000000a4fb1100180000005431130000000000f2eb12000b000000bcfb11000a000000c6fb11001e000000e4fb11004d00000031fc11004e00000036ec12000c00000020466f726365206120766573746564207472616e736665722e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e202d2060736f75726365603a20546865206163636f756e742077686f73652066756e64732073686f756c64206265207472616e736665727265642e202d2060746172676574603a20546865206163636f756e7420746861742073686f756c64206265207472616e7366657272656420746865207665737465642066756e64732e202d2060616d6f756e74603a2054686520616d6f756e74206f662066756e647320746f207472616e7366657220616e642077696c6c206265207665737465642e202d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e20456d697473206056657374696e6743726561746564602e202d20604f283129602e202d2044625765696768743a20342052656164732c20342057726974657320202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c20536f75726365204163636f756e7420202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c20536f75726365204163636f756e74736f757263653c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263657363686564756c6556657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e20437265617465206120766573746564207472616e736665722e202d2044625765696768743a20332052656164732c20332057726974657320202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c205b53656e646572204163636f756e745d20202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c205b53656e646572204163636f756e745d20556e6c6f636b20616e79207665737465642066756e6473206f662061206074617267657460206163636f756e742e202d2060746172676574603a20546865206163636f756e742077686f7365207665737465642066756e64732073686f756c6420626520756e6c6f636b65642e204d75737420686176652066756e6473207374696c6c206c6f636b656420756e64657220746869732070616c6c65742e20456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e20202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e7420202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e7420556e6c6f636b20616e79207665737465642066756e6473206f66207468652073656e646572206163636f756e742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652066756e6473207374696c6c202d2044625765696768743a20322052656164732c20322057726974657320202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c205b53656e646572204163636f756e745d20202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c205b53656e646572204163636f756e745d000000000000bc2d1200070000000102000000000000e3f812000c00000000000000b0fc11002900000000000000000000000000000000000000543113007c00120000000000000000008c00120001000000000000000000000012000000000000000100000023000000940012003600000020496e666f726d6174696f6e20726567617264696e67207468652076657374696e67206f66206120676976656e206163636f756e742e00000000000004011200110000000000000057a912000c00000000000000543113001801120000000000000000002801120001000000000000004d696e5665737465645472616e7366657200000012000000000000000100000045000000300112003a00000020546865206d696e696d756d20616d6f756e74207472616e7366657272656420746f2063616c6c20607665737465645f7472616e73666572602e000000000000cc0212000700000000000000c0f51100020000000000000000000000d4021200010000000000000000000000dc0212000800000000000000c0f51100020000000000000000000000e4021200020000000000000000000000f40212000800000000000000fc021200030000000000000000000000140312000100000000000000000000001c0312000a000000000000002803120003000000000000000000000040031200010000000000000000000000480312000700000000000000c0f5110002000000000000000000000050031200010000000000000000000000580312000800000000000000c0f5110002000000000000000000000060031200010000000000000000000000680312000a00000000000000c0f51100020000000000000000000000740312000100000000000000000000007c031200120000000000000090031200040000000000000000000000b00312000300000000000000456e646f776564003c06120049000000447573744c6f7374b80512005000000008061200340000005472616e7366657279e512000900000079e5120009000000d5d1120007000000900512002800000042616c616e6365536574000079e5120009000000d5d1120007000000d5d11200070000005d051200330000004465706f7369740015051200480000005265736572766564cd04120048000000556e72657365727665640000830412004a000000526573657276655265706174726961746564000079e512000900000079e5120009000000d5d11200070000007d04120006000000c8031200540000001c04120037000000530412002a00000020536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742e2046696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e205c5b66726f6d2c20746f2c2062616c616e63652c2064657374696e6174696f6e5f7374617475735c5d53746174757320536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e205c5b77686f2c2076616c75655c5d20536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e205c5b77686f2c2076616c75655c5d20536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e205c5b77686f2c206465706f7369745c5d20412062616c616e6365207761732073657420627920726f6f742e205c5b77686f2c20667265652c2072657365727665645c5d205472616e73666572207375636365656465642e205c5b66726f6d2c20746f2c2076616c75655c5d20416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c20726573756c74696e6720696e20616e206f75747269676874206c6f73732e205c5b6163636f756e742c2062616c616e63655c5d20416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e205c5b6163636f756e742c20667265655f62616c616e63655c5d0000000000000038071200080000000000000040071200020000000000000000000000700712001b0000000000000000000000480812000b00000000000000540812000300000000000000000000009c0812001200000000000000000000002c0912000e000000000000003c09120003000000000000000000000084091200060000000000000000000000b4091200130000000000000040071200020000000000000000000000c80912000b000000000000007472616e73666572000000005b0c1200040000000000000085fc1100230000000000000048b6120005000000000000005f0c120013000000b70e1200360000005431130000000000ed0e1200420000002f0f120048000000770f120045000000bc0f12002d0000005431130000000000e90f1200460000005431130000000000f2eb12000b0000002f1012004c0000007b10120033000000ae1012005a0000005431130000000000081112001300000054311300000000001b111200540000006f1112004b000000ba11120035000000ef111200580000004712120052000000991212003e000000d712120022000000f9121200510000004a13120037000000811312004500000036ec12000c0000007365745f62616c616e63650000000000791b1300030000000000000085fc11002300000000000000a30e120008000000000000005f0c12001300000000000000ab0e12000c000000000000005f0c120013000000720c1200250000005431130000000000970c120048000000df0c120042000000210d120046000000670d1200400000005431130000000000a70d12002d0000005431130000000000f2eb12000b000000d40d120020000000f40d120031000000250e1200160000003b0e12000f0000004a0e12001a000000640e1200190000007d0e12002600000036ec12000c000000666f7263655f7472616e736665720000000000007ffc1100060000000000000085fc110023000000000000005b0c1200040000000000000085fc1100230000000000000048b6120005000000000000005f0c120013000000880b120054000000dc0b12000b000000f2eb12000b000000e70b120050000000370c12002400000036ec12000c0000007472616e736665725f6b6565705f616c69766500200a120054000000740a1200100000005431130000000000840a12002f0000005431130000000000b30a120031000000f2eb12000b000000e40a12003a0000001e0b120018000000360b1200470000007d0b12000b0000002053616d6520617320746865205b607472616e73666572605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e20393925206f66207468652074696d6520796f752077616e74205b607472616e73666572605d20696e73746561642e205b607472616e73666572605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572202d2043686561706572207468616e207472616e736665722062656361757365206163636f756e742063616e6e6f74206265206b696c6c65642e202d2042617365205765696768743a2035312e3420c2b573202d204442205765696768743a2031205265616420616e64203120577269746520746f2064657374202873656e64657220697320696e206f7665726c617920616c72656164792920233c2f7765696768743e2045786163746c7920617320607472616e73666572602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74206d6179206265207370656369666965642e202d2053616d65206173207472616e736665722c20627574206164646974696f6e616c207265616420616e6420777269746520626563617573652074686520736f75726365206163636f756e742069732020206e6f7420617373756d656420746f20626520696e20746865206f7665726c61792e64657374436f6d706163743c543a3a42616c616e63653e20536574207468652062616c616e636573206f66206120676976656e206163636f756e742e20546869732077696c6c20616c74657220604672656542616c616e63656020616e642060526573657276656442616c616e63656020696e2073746f726167652e2069742077696c6c20616c736f2064656372656173652074686520746f74616c2069737375616e6365206f66207468652073797374656d202860546f74616c49737375616e636560292e20496620746865206e65772066726565206f722072657365727665642062616c616e63652069732062656c6f7720746865206578697374656e7469616c206465706f7369742c2069742077696c6c20726573657420746865206163636f756e74206e6f6e63652028606672616d655f73797374656d3a3a4163636f756e744e6f6e636560292e20546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e202d20496e646570656e64656e74206f662074686520617267756d656e74732e202d20436f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e64207772697465732e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d202d2042617365205765696768743a20202020202d204372656174696e673a2032372e353620c2b57320202020202d204b696c6c696e673a2033352e313120c2b573202d204442205765696768743a203120526561642c203120577269746520746f206077686f606e65775f667265656e65775f7265736572766564205472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e20607472616e73666572602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e2049742077696c6c2064656372656173652074686520746f74616c2069737375616e6365206f66207468652073797374656d2062792074686520605472616e73666572466565602e204966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74206f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e202d20446570656e64656e74206f6e20617267756d656e747320627574206e6f7420637269746963616c2c20676976656e2070726f70657220696d706c656d656e746174696f6e7320666f72202020696e70757420636f6e6669672074797065732e205365652072656c617465642066756e6374696f6e732062656c6f772e202d20497420636f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e642077726974657320696e7465726e616c6c7920616e64206e6f20636f6d706c657820636f6d7075746174696f6e2e2052656c617465642066756e6374696f6e733a2020202d2060656e737572655f63616e5f77697468647261776020697320616c776179732063616c6c656420696e7465726e616c6c792062757420686173206120626f756e64656420636f6d706c65786974792e2020202d205472616e7366657272696e672062616c616e63657320746f206163636f756e7473207468617420646964206e6f74206578697374206265666f72652077696c6c20636175736520202020202060543a3a4f6e4e65774163636f756e743a3a6f6e5f6e65775f6163636f756e746020746f2062652063616c6c65642e2020202d2052656d6f76696e6720656e6f7567682066756e64732066726f6d20616e206163636f756e742077696c6c20747269676765722060543a3a4475737452656d6f76616c3a3a6f6e5f756e62616c616e636564602e2020202d20607472616e736665725f6b6565705f616c6976656020776f726b73207468652073616d652077617920617320607472616e73666572602c206275742068617320616e206164646974696f6e616c2020202020636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d202d2042617365205765696768743a2037332e363420c2b5732c20776f7273742063617365207363656e6172696f20286163636f756e7420637265617465642c206163636f756e742072656d6f76656429202d204442205765696768743a2031205265616420616e64203120577269746520746f2064657374696e6174696f6e206163636f756e74202d204f726967696e206163636f756e7420697320616c726561647920696e206d656d6f72792c20736f206e6f204442206f7065726174696f6e7320666f72207468656d2e000000000000281512000d0000000000000000000000351512000a00000000000000000000000000000000000000000000000000000000000000543113004015120000000000000000005015120001000000000000000100000000000000dcf81200070000000102000000000000e3f812000c0000000000000058151200170000000000000000000000000000000000000054311300701512000000000000000000801512000300000000000000010000000000000070bd1200050000000102000000000000e3f812000c00000000000000981512001c0000000000000000000000000000000000000054311300b41512000000000000000000c4151200020000000000000001000000000000009cbe12000e0000000000000000000000aabe1200080000000000000000000000000000000000000000000000000000000000000054311300d41512000000000000000000e4151200030000000000000001000000546f74616c49737375616e6365543a3a42616c616e6365001200000000000000010000004100000006171200260000004163636f756e74446174613c543a3a42616c616e63653e00120000000000000001000000f10000009b1612001b0000005431130000000000b6161200500000005665633c42616c616e63654c6f636b3c543a3a42616c616e63653e3e120000000000000001000000f2000000241612002e00000052161200490000001200000000000000010000005e000000dcbe12001f0000005431130000000000fc1512002800000020546869732069732073657420746f2076322e302e3020666f72206e6577206e6574776f726b732e20416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e205468652062616c616e6365206f6620616e206163636f756e742e204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e2054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e00000000e4d111001200000000000000351512000a0000000000000054311300641712000000000000000000741712000100000000000000120000000000000001000000260000007c1712003500000020546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e436865636b5370656356657273696f6e000000c8f411006b000000040300000f00000000000000dc1812000e00000000000000ec181200010000000000000000000000f41812000400000000000000000000001419120011000000000000002819120001000000000000000000000030191200020000000000000000000000401912000800000000000000fce4120001000000000000000000000048191200010000000000000000000000501912000700000000000000fce4120001000000000000000000000058191200010000000000000000000000601912001200000000000000741912000100000000000000000000007c19120001000000000000000000000084191200140000000000000074191200010000000000000000000000981912000100000000000000536f6c7574696f6e53746f7265640000dd1b12000f0000001d1b12002e00000054311300000000004b1b1200500000009b1b120042000000456c656374696f6e46696e616c697a6564000000061b120017000000971a120056000000ed1a12001900000052657761726465644d1a12004a000000536c617368656400041a1200490000005369676e65645068617365537461727465640000cbed120003000000d319120031000000556e7369676e6564506861736553746172746564a0191200330000002054686520756e7369676e6564207068617365206f662074686520676976656e20726f756e642068617320737461727465642e20546865207369676e6564207068617365206f662074686520676976656e20726f756e642068617320737461727465642e20416e206163636f756e7420686173206265656e20736c617368656420666f72207375626d697474696e6720616e20696e76616c6964207369676e6564207375626d697373696f6e2e20416e206163636f756e7420686173206265656e20726577617264656420666f72207468656972207369676e6564207375626d697373696f6e206265696e672066696e616c697a65642e2054686520656c656374696f6e20686173206265656e2066696e616c697a65642c20776974682060536f6d6560206f662074686520676976656e20636f6d7075746174696f6e2c206f7220656c73652069662074686520656c656374696f6e206661696c65642c20604e6f6e65602e4f7074696f6e3c456c656374696f6e436f6d707574653e204120736f6c7574696f6e207761732073746f72656420776974682074686520676976656e20636f6d707574652e2049662074686520736f6c7574696f6e206973207369676e65642c2074686973206d65616e732074686174206974206861736e277420796574206265656e2070726f6365737365642e2049662074686520736f6c7574696f6e20697320756e7369676e65642c2074686973206d65616e7320746861742069742068617320616c736f206265656e2070726f6365737365642e456c656374696f6e436f6d7075746500000000b4d811000f00000000000000181c1200020000000000000000000000481c12000e0000000000000000000000301f12000800000000000000381f12001900000000000000511f12000700000000000000581f120016000000b81c12002a0000005431130000000000e21c1200330000005431130000000000151d120050000000651d120056000000bb1d120058000000131e1200110000005431130000000000241e1200570000007b1e120054000000cf1e1200280000005431130000000000f71e120039000000205375626d6974206120736f6c7574696f6e20666f722074686520756e7369676e65642070686173652e20546865206469737061746368206f726967696e20666f20746869732063616c6c206d757374206265205f5f6e6f6e655f5f2e2054686973207375626d697373696f6e20697320636865636b6564206f6e2074686520666c792e204d6f72656f7665722c207468697320756e7369676e656420736f6c7574696f6e206973206f6e6c792076616c696461746564207768656e207375626d697474656420746f2074686520706f6f6c2066726f6d20746865202a2a6c6f63616c2a2a206e6f64652e204566666563746976656c792c2074686973206d65616e732074686174206f6e6c79206163746976652076616c696461746f72732063616e207375626d69742074686973207472616e73616374696f6e207768656e20617574686f72696e67206120626c6f636b202873696d696c617220746f20616e20696e686572656e74292e20546f2070726576656e7420616e7920696e636f727265637420736f6c7574696f6e2028616e642074687573207761737465642074696d652f776569676874292c2074686973207472616e73616374696f6e2077696c6c2070616e69632069662074686520736f6c7574696f6e207375626d6974746564206279207468652076616c696461746f7220697320696e76616c696420696e20616e79207761792c206566666563746976656c792070757474696e6720746865697220617574686f72696e6720726577617264206174207269736b2e204e6f206465706f736974206f7220726577617264206973206173736f63696174656420776974682074686973207375626d697373696f6e2e736f6c7574696f6e526177536f6c7574696f6e3c436f6d706163744f663c543e3e7769746e657373536f6c7574696f6e4f72536e617073686f7453697a6500000000000080211200050000000000000000000000cbed12000300000000000000000000000000000000000000000000000000000000000000543113008821120000000000000000009821120006000000000000000100000000000000c82112000c0000000000000000000000d4211200150000000000000000000000000000000000000000000000000000000000000054311300ec2112000000000000000000fc21120001000000000000000100000000000000042212000e0000000000000000000000122212001b0000000000000000000000000000000000000000000000000000000000000054311300302212000000000000000000402212000100000000000000000000000000000048221200080000000000000000000000502212001b00000000000000000000000000000000000000000000000000000000000000543113006c22120000000000000000007c22120003000000000000000000000000000000942212000e0000000000000000000000cbed1200030000000000000000000000000000000000000000000000000000000000000054311300a42212000000000000000000b422120003000000000000000000000000000000cc221200100000000000000000000000581f1200160000000000000000000000000000000000000000000000000000000000000054311300dc2212000000000000000000ec221200030000000000000000000000526f756e64000000120000000000000001000000f3000000582412002b00000054311300000000008324120055000000d82412001b0000005431130000000000f32412005300000043757272656e74506861736550686173653c543a3a426c6f636b4e756d6265723e0000001200000000000000010000005e000000492412000f000000517565756564536f6c7574696f6e5265616479536f6c7574696f6e3c543a3a4163636f756e7449643e00000012000000000000000100000023000000fa2312004f000000536e617073686f74526f756e64536e617073686f743c543a3a4163636f756e7449643e0012000000000000000100000023000000872312001c0000005431130000000000a3231200570000004465736972656454617267657473000012000000000000000100000023000000542312003300000054311300000000002a2312002a000000536e617073686f744d6574616461746112000000000000000100000023000000042312002600000054311300000000002a2312002a00000020546865206d65746164617461206f6620746865205b60526f756e64536e617073686f74605d204f6e6c7920657869737473207768656e205b60536e617073686f74605d2069732070726573656e742e2044657369726564206e756d626572206f66207461726765747320746f20656c65637420666f72207468697320726f756e642e20536e617073686f742064617461206f662074686520726f756e642e205468697320697320637265617465642061742074686520626567696e6e696e67206f6620746865207369676e656420706861736520616e6420636c65617265642075706f6e2063616c6c696e672060656c656374602e2043757272656e74206265737420736f6c7574696f6e2c207369676e6564206f7220756e7369676e65642c2071756575656420746f2062652072657475726e65642075706f6e2060656c656374602e2043757272656e742070686173652e20496e7465726e616c20636f756e74657220666f7220746865206e756d626572206f6620726f756e64732e20546869732069732075736566756c20666f722064652d6475706c69636174696f6e206f66207472616e73616374696f6e73207375626d697474656420746f2074686520706f6f6c2c20616e642067656e6572616c20646961676e6f7374696373206f66207468652070616c6c65742e2054686973206973206d6572656c7920696e6372656d656e746564206f6e6365207065722065766572792074696d65207468617420616e20757073747265616d2060656c656374602069732063616c6c65642e000000000000f02512000d00000000000000a9f912000e000000000000005431130000261200000000000000000010261200010000000000000000000000182612000b00000000000000a9f912000e0000000000000054311300242612000000000000000000342612000100000000000000000000003c2612001c0000000000000055f31200070000000000000054311300582612000000000000000000682612000200000000000000556e7369676e65645068617365000000120000000000000001000000f400000002271200200000005369676e656450686173650012000000000000000100000022000000e42612001e000000536f6c7574696f6e496d70726f76656d656e745468726573686f6c64120000000000000001000000290000007826120053000000cb2612001900000020546865206d696e696d756d20616d6f756e74206f6620696d70726f76656d656e7420746f2074686520736f6c7574696f6e2073636f7265207468617420646566696e6573206120736f6c7574696f6e2061732022626574746572222028696e20616e79207068617365292e204475726174696f6e206f6620746865207369676e65642070686173652e204475726174696f6e206f662074686520756e7369676e65642070686173652e0000120000000400000004000000f5000000120000000400000004000000f6000000120000000400000004000000f7000000d4e2120052000000c100000001000000a83513005e000000710000002e000000a83513005e0000009000000034000000a83513005e0000006900000034000000000000001eda11000c000000000000003c28120001000000000000000000000012da11000c000000000000004428120001000000000000000000000008da11000a000000000000004c281200010000000000000000000000ffd91100090000000000000054281200010000000000000000000000f6d9110009000000000000005c2812000100000000000000000000002ada11000900000000000000642812000100000000000000882912002200000065291200230000004c291200190000000429120048000000b92812004b0000006c2812004d00000020546865207469702063616e6e6f7420626520636c61696d65642f636c6f73656420626563617573652069742773207374696c6c20696e2074686520636f756e74646f776e20706572696f642e20546865207469702063616e6e6f7420626520636c61696d65642f636c6f736564206265636175736520746865726520617265206e6f7420656e6f7567682074697070657273207965742e20546865206163636f756e7420617474656d7074696e6720746f20726574726163742074686520746970206973206e6f74207468652066696e646572206f6620746865207469702e2054686520746970206861736820697320756e6b6e6f776e2e20546865207469702077617320616c726561647920666f756e642f737461727465642e2054686520726561736f6e20676976656e206973206a75737420746f6f206269672e0000a83513005e000000ba00000009000000a83513005e000000b300000009000000a83513005e000000d400000011000000a83513005e000000d900000009000000d4e2120052000000cd01000018000000d4e2120052000000fb0100001a0000000000000044f511000a00000000000000602a120001000000000000000000000014d211001700000000000000682a12000100000000000000000000004ef511000900000000000000702a12000100000000000000112b120022000000ba2a120057000000782a12004200000020416d6f756e74206265696e67207472616e7366657272656420697320746f6f206c6f7720746f2063726561746520612076657374696e67207363686564756c652e20416e206578697374696e672076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e7420746861742063616e6e6f7420626520636c6f6262657265642e20546865206163636f756e7420676976656e206973206e6f742076657374696e672e54696d657374616d70206d7573742062652075706461746564206f6e6c79206f6e636520696e2074686520626c6f636b00d42b120057000000c20000000d00000054696d657374616d70206d75737420696e6372656d656e74206279206174206c65617374203c4d696e696d756d506572696f643e206265747765656e2073657175656e7469616c20626c6f636b730000d42b120057000000c40000000d0000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f74696d657374616d702f7372632f6c69622e72737672662d6e6d2d706b436865636b4e6f6e6365496d4f6e6c696e6500000000000000000000617474656d707420746f20646976696465206279207a65726f4b657973417574686f726564426c6f636b732f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f696d2d6f6e6c696e652f7372632f6c69622e727354696d657374616d70206d7573742062652075706461746564206f6e636520696e2074686520626c6f636b000000d42b120057000000a70000000d000000417574686f7273686970417574686f724772616e64706146696e616c69747950656e64696e674368616e67653a6772616e6470615f617574686f7269746965735374617465556e636c657348656172746265617441667465720000007b2c1200570000004e020000340000007061726974792f696d2d6f6e6c696e652d6865617274626561742f556e646572436f6e737472756374696f6e50726f78696573416e6e6f756e63656d656e747356657374696e6700d42d120067000000b4000000380000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f737570706f72742f7372632f73746f726167652f67656e657261746f722f6d61702e727300120000000800000004000000f80000004772616e64706145717569766f636174696f6e496e76616c696445717569766f636174696f6e50726f6f66496e76616c69644b65794f776e65727368697050726f6f66546f6f536f6f6e4368616e676550656e64696e67526573756d654661696c656450617573654661696c65644475706c69636174654f6666656e63655265706f727400000000542f12001300000000000000682f1200020000000000000000000000982f1200040000000000000000000000b82f12001c00000000000000682f1200020000000000000000000000d42f12000900000000000000000000001c3012000c00000000000000283012000200000000000000000000005830120007000000000000007265706f72745f65717569766f636174696f6e0000000000203412001200000000000000323412002a000000000000005c3412000f000000000000006b341200100000007432120043000000b73212003e000000f53212003f00000034331200120000007265706f72745f65717569766f636174696f6e5f756e7369676e65647432120043000000b73212003e000000f53212003f0000003433120012000000543113000000000046331200440000008a33120046000000d033120046000000163412000a0000006e6f74655f7374616c6c6564000000001fae12000500000000000000a9f912000e00000000000000593212001b00000000000000a9f912000e0000009030120047000000d73012004a00000021311200480000006931120045000000ae3112004a000000f83112004a0000004232120017000000204e6f74652074686174207468652063757272656e7420617574686f7269747920736574206f6620746865204752414e4450412066696e616c6974792067616467657420686173207374616c6c65642e20546869732077696c6c2074726967676572206120666f7263656420617574686f7269747920736574206368616e67652061742074686520626567696e6e696e67206f6620746865206e6578742073657373696f6e2c20746f20626520656e6163746564206064656c61796020626c6f636b7320616674657220746861742e205468652064656c61792073686f756c64206265206869676820656e6f75676820746f20736166656c7920617373756d6520746861742074686520626c6f636b207369676e616c6c696e672074686520666f72636564206368616e67652077696c6c206e6f742062652072652d6f726765642028652e672e203130303020626c6f636b73292e20546865204752414e44504120766f746572732077696c6c20737461727420746865206e657720617574686f7269747920736574207573696e672074686520676976656e2066696e616c697a656420626c6f636b20617320626173652e204f6e6c792063616c6c61626c6520627920726f6f742e626573745f66696e616c697a65645f626c6f636b5f6e756d626572205265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c20766572696679207468652065717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f6620616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63652077696c6c206265207265706f727465642e20546869732065787472696e736963206d7573742062652063616c6c656420756e7369676e656420616e642069742069732065787065637465642074686174206f6e6c7920626c6f636b20617574686f72732077696c6c2063616c6c206974202876616c69646174656420696e206056616c6964617465556e7369676e656460292c20617320737563682069662074686520626c6f636b20617574686f7220697320646566696e65642069742077696c6c20626520646566696e6564206173207468652065717569766f636174696f6e207265706f727465722e65717569766f636174696f6e5f70726f6f6645717569766f636174696f6e50726f6f663c543a3a486173682c20543a3a426c6f636b4e756d6265723e6b65795f6f776e65725f70726f6f66543a3a4b65794f776e657250726f6f660000000000502d12000500000000000000000000008c3612001b0000000000000000000000000000000000000000000000000000000000000054311300a83612000000000000000000b8361200010000000000000001000000000000002f2d12000d0000000000000000000000c0361200230000000000000000000000000000000000000000000000000000000000000054311300e43612000000000000000000f436120001000000000000000000000000000000fc3612000a0000000000000000000000a9f912000e0000000000000000000000000000000000000000000000000000000000000054311300083712000000000000000000183712000100000000000000000000000000000020371200070000000000000000000000273712002000000000000000000000000000000000000000000000000000000000000000543113004837120000000000000000005837120001000000000000000000000000000000603712000c00000000000000000000006c3712000500000000000000000000000000000000000000000000000000000000000000543113007437120000000000000000008437120002000000000000000100000000000000943712000c00000001050000000000006c3712000500000000000000a03712000c0000000000000000000000000000000000000054311300ac3712000000000000000000bc37120004000000000000000000000053746f72656453746174653c543a3a426c6f636b4e756d6265723e00120000000000000001000000f9000000863912002400000053746f72656450656e64696e674368616e67653c543a3a426c6f636b4e756d6265723e001200000000000000010000002300000055391200310000004e657874466f72636564000012000000000000000100000023000000263912002f0000005374616c6c656428543a3a426c6f636b4e756d6265722c20543a3a426c6f636b4e756d626572290012000000000000000100000023000000023912002400000043757272656e7453657449645365744964000000120000000000000001000000590000007a38120057000000d138120031000000536574496453657373696f6e53657373696f6e496e64657812000000000000000100000023000000dc37120056000000323812001a00000054311300000000004c3812002e0000002041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f7220776869636820697473206d656d62657273207765726520726573706f6e7369626c652e2054574f582d4e4f54453a2060536574496460206973206e6f7420756e646572207573657220636f6e74726f6c2e20546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c69746965732920696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e20607472756560206966207765206172652063757272656e746c79207374616c6c65642e206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e2050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e205374617465206f66207468652063757272656e7420617574686f72697479207365742e496e76616c69644b65794475706c6963617465644865617274626561740000000000f43912000900000000000000003a1200020000000000000000000000303a1200090000000000000068656172746265617400000000000000f43912000900000000000000de3b12001900000000000000f73b12000a00000000000000013c12002f000000f2eb12000b000000783a120050000000c83a120040000000083b1200230000002b3b12002c000000573b12004f000000a63b120017000000bd3b12002100000036ec12000c000000202d20436f6d706c65786974793a20604f284b202b20452960207768657265204b206973206c656e677468206f6620604b6579736020286865617274626561742e76616c696461746f72735f6c656e29202020616e642045206973206c656e677468206f6620606865617274626561742e6e6574776f726b5f73746174652e65787465726e616c5f61646472657373602020202d20604f284b29603a206465636f64696e67206f66206c656e67746820604b602020202d20604f284529603a206465636f64696e672f656e636f64696e67206f66206c656e67746820604560202d20446252656164733a2070616c6c65745f73657373696f6e206056616c696461746f7273602c2070616c6c65745f73657373696f6e206043757272656e74496e646578602c20604b657973602c2020206052656365697665644865617274626561747360202d2044625772697465733a2060526563656976656448656172746265617473604865617274626561743c543a3a426c6f636b4e756d6265723e5f7369676e61747572653c543a3a417574686f7269747949642061732052756e74696d654170705075626c69633e3a3a5369676e6174757265000000005b2d12000e0000000000000000000000a9f912000e0000000000000000000000000000000000000000000000000000000000000054311300903d12000000000000000000a03d12000b000000000000000100000000000000692c1200040000000000000000000000f83d12001300000000000000000000000000000000000000000000000000000000000000543113000c3e120000000000000000001c3e120001000000000000000100000000000000243e1200120000000205050000000000a03712000c00000000000000363e1200090000000000000042ec1200070000000000000054311300403e12000000000000000000503e1200020000000000000000000000000000006d2c12000e0000000205050000000000a03712000c00000000000000603e12000e00000000000000cbed1200030000000000000054311300703e12000000000000000000803e120002000000000000000100000012000000000000000100000022000000973f120047000000de3f1200090000005431130000000000e73f120049000000304012004d0000007d40120046000000c34012002a0000005431130000000000ed4012004e0000003b4112004b00000086411200400000005665633c543a3a417574686f7269747949643e001200000000000000010000003f000000633f12003400000052656365697665644865617274626561747341757468496e6465780012000000000000000100000023000000073f12003c000000433f12002000000056616c696461746f7249643c543e000012000000000000000100000022000000903e120045000000d53e12003200000020466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206056616c696461746f7249643c543e6020746f20746865206e756d626572206f6620626c6f636b7320617574686f7265642062792074686520676976656e20617574686f726974792e20466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206041757468496e6465786020746f20606f6666636861696e3a3a4f70617175654e6574776f726b5374617465602e205468652063757272656e7420736574206f66206b6579732074686174206d61792069737375652061206865617274626561742e2054686520626c6f636b206e756d6265722061667465722077686963682069742773206f6b20746f2073656e64206865617274626561747320696e207468652063757272656e742073657373696f6e2e2041742074686520626567696e6e696e67206f6620656163682073657373696f6e20776520736574207468697320746f20612076616c756520746861742073686f756c642066616c6c20726f7567686c7920696e20746865206d6964646c65206f66207468652073657373696f6e206475726174696f6e2e20546865206964656120697320746f206669727374207761697420666f72207468652076616c696461746f727320746f2070726f64756365206120626c6f636b20696e207468652063757272656e742073657373696f6e2c20736f20746861742074686520686561727462656174206c61746572206f6e2077696c6c206e6f74206265206e65636573736172792e20546869732076616c75652077696c6c206f6e6c79206265207573656420617320612066616c6c6261636b206966207765206661696c20746f2067657420612070726f7065722073657373696f6e2070726f677265737320657374696d6174652066726f6d20604e65787453657373696f6e526f746174696f6e602c2061732074686f736520657374696d617465732073686f756c64206265206d6f7265206163637572617465207468656e207468652076616c75652077652063616c63756c61746520666f7220604865617274626561744166746572602e0000000000004c421200110000000000000060421200010000000000000000000000684212000100000000000000000000007042120007000000000000005431130000000000000000000000000078421200010000000000000000000000804212000b000000000000008c4212000100000000000000000000009442120001000000000000004865617274626561745265636569766564000000794312000b0000003843120041000000416c6c476f6f64000343120035000000536f6d654f66666c696e6500eb421200180000009c4212004f0000002041742074686520656e64206f66207468652073657373696f6e2c206174206c65617374206f6e652076616c696461746f722077617320666f756e6420746f206265205c5b6f66666c696e655c5d2e5665633c4964656e74696669636174696f6e5475706c653e2041742074686520656e64206f66207468652073657373696f6e2c206e6f206f6666656e63652077617320636f6d6d69747465642e2041206e657720686561727462656174207761732072656365697665642066726f6d2060417574686f72697479496460205c5b617574686f726974795f69645c5d417574686f72697479496400000000b04312000300000000000000b4431200010000000000000000000000cc4312000f0000000000000073657400000000006946120003000000000000006c46120012000000444412001600000054311300000000005a44120056000000b0441200360000005431130000000000e6441200510000003745120011000000543113000000000048451200360000005431130000000000f2eb12000b0000007e4512004d000000cb45120068000000334612003600000036ec12000c00000020536574207468652063757272656e742074696d652e20546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6e2070686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e205468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e742073706563696669656420627920604d696e696d756d506572696f64602e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e202d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f2831296029202d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202862656361757365206f6620604469645570646174653a3a74616b656020696e20606f6e5f66696e616c697a656029202d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e6e6f77436f6d706163743c543a3a4d6f6d656e743e00000000000030471200030000000000000000000000334712000900000000000000000000000000000000000000000000000000000000000000543113003c47120000000000000000004c4712000100000000000000010000000000000054471200090000000000000000000000a1fb1200040000000000000000000000000000000000000000000000000000000000000054311300604712000000000000000000704712000100000000000000010000004e6f77543a3a4d6f6d656e7412000000000000000100000059000000a54712002400000044696455706461746500000012000000000000000100000023000000784712002d00000020446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f2043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e00000000000000044812000d00000000000000334712000900000000000000543113001448120000000000000000002448120004000000000000004d696e696d756d506572696f64000000120000000000000001000000fa000000444812005a0000009e4812005a000000f848120059000000514912001c00000020546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a20706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c2067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c20626520646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e556e636c65416c7265616479496e636c75646564546f6f48696768556e636c6547656e65736973556e636c65546f6f4d616e79556e636c6573556e636c6573416c7265616479536574496e76616c6964556e636c65506172656e744f6c64556e636c6500000000fc4912000a00000000000000084a1200010000000000000000000000204a120001000000000000007365745f756e636c6573000000000000414a12000a000000000000004b4a12000e000000284a1200190000002050726f76696465206120736574206f6620756e636c65732e6e65775f756e636c65735665633c543a3a4865616465723e00000000000000552d1200060000000000000000000000644b12003a0000000000000000000000000000000000000000000000000000000000000054311300a04b12000000000000000000b04b1200010000000000000001000000000000001a2d1200060000000000000000000000e3f812000c0000000000000000000000000000000000000000000000000000000000000054311300b84b12000000000000000000c84b120001000000000000000000000000000000d04b12000c0000000000000000000000a1fb1200040000000000000000000000000000000000000000000000000000000000000054311300dc4b12000000000000000000ec4b12000100000000000000010000005665633c556e636c65456e7472794974656d3c543a3a426c6f636b4e756d6265722c20543a3a486173682c20543a3a4163636f756e7449643e3e0000120000000000000001000000fb0000003c4c12000700000012000000000000000100000023000000234c120019000000446964536574556e636c657312000000000000000100000023000000f44b12002f000000205768657468657220756e636c6573207765726520616c72656164792073657420696e207468697320626c6f636b2e20417574686f72206f662063757272656e7420626c6f636b2e20556e636c6573001200000000000000010000005f000000647c120066000000860000002700000012000000000000000100000021000000647c120066000000a60000001c000000647c1200660000009500000034000000647c120066000000a900000029000000647c120066000000bd0000001f000000647c120066000000c900000030000000c406130055000000f30000000100000000000000af2e12000b00000000000000984d1200020000000000000000000000a32e12000c00000000000000a84d1200020000000000000000000000962e12000d00000000000000b84d12000100000000000000000000008f2e12000700000000000000c04d1200010000000000000000000000772e12001800000000000000c84d12000100000000000000000000005f2e12001800000000000000d04d1200010000000000000000000000ba2e12001600000000000000d84d12000100000000000000994f120042000000db4f12002a0000002b4f120045000000704f120029000000f04e12003b000000c04e120030000000734e12004d000000264e12004d000000e04d120046000000204120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e20416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e2041206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e2043616e6e6f74207369676e616c20666f72636564206368616e676520736f20736f6f6e206166746572206c6173742e20417474656d707420746f207369676e616c204752414e445041206368616e67652077697468206f6e6520616c72656164792070656e64696e672e20417474656d707420746f207369676e616c204752414e44504120726573756d65207768656e2074686520617574686f72697479207365742069736e2774207061757365642028656974686572206c697665206f7220616c72656164792070656e64696e6720726573756d65292e20417474656d707420746f207369676e616c204752414e445041207061757365207768656e2074686520617574686f72697479207365742069736e2774206c697665202865697468657220706175736564206f7220616c72656164792070656e64696e67207061757365292e00000000000000aa3912000a0000000000000040501200010000000000000000000000b4391200130000000000000048501200010000000000000066501200190000005050120016000000204475706c696361746564206865617274626561742e204e6f6e206578697374656e74207075626c6963206b65792e000b2b1300640000003d0500000100000000000000b6491200120000000000000054511200010000000000000000000000a649120010000000000000005c511200010000000000000000000000994912000d00000000000000645112000100000000000000000000008d4912000c000000000000006c511200010000000000000000000000814912000c00000000000000745112000100000000000000000000006d49120014000000000000007c511200010000000000000000000000c84912000800000000000000845112000100000000000000415212002300000020521200210000000f52120011000000f951120016000000d951120020000000ba5112001f0000008c5112002e0000002054686520756e636c652069736e277420726563656e7420656e6f75676820746f20626520696e636c756465642e2054686520756e636c6520697320616c726561647920696e636c756465642e2054686520756e636c6520697320746f6f206869676820696e20636861696e2e2054686520756e636c652069732067656e657369732e20546f6f206d616e7920756e636c65732e20556e636c657320616c72656164792073657420696e2074686520626c6f636b2e2054686520756e636c6520706172656e74206e6f7420696e2074686520636861696e2e4765747320616e64206465636f6465732074696d657374616d7020696e686572656e742064617461fc0000001000000004000000fd000000d42b120057000000d900000012000000bc52120022000000bc030000010000002f6275696c642f72756e74696d652f706f6c6b61646f742f7372632f6c69622e727354696d657374616d7020746f6f2066617220696e2066757475726520746f206163636570745468657265206973206f6e6c79206f6e6520666174616c206572726f723b20716564000000120000000800000004000000fe0000004e6f206f74686572206572726f72732061726520616363657074656420616674657220616e2068617264206572726f7221496e686572656e7420776974682073616d65206964656e74696669657220616c726561647920657869737473210000db53120007000000c05312001b0000002031130002000000bc52120022000000620400000100000042616420696e70757420646174612070726f766964656420746f2076657273696f6e0000ec5312000d000000657865637574655f626c6f636b0000000454120010000000696e697469616c697a655f626c6f636b1c541200080000006d657461646174612c5412000f0000006170706c795f65787472696e73696300445412000e00000066696e616c697a655f626c6f636b00005c54120013000000696e686572656e745f65787472696e7369637300785412000f000000636865636b5f696e686572656e747300905412000b00000072616e646f6d5f7365656400a45412001400000076616c69646174655f7472616e73616374696f6ec05412000f0000006f6666636861696e5f776f726b657200d85412000a00000076616c696461746f72730000ec5412001000000076616c696461746f725f67726f7570730455120012000000617661696c6162696c6974795f636f726573000020551200190000007065727369737465645f76616c69646174696f6e5f646174610000004455120018000000636865636b5f76616c69646174696f6e5f6f757470757473645512001700000073657373696f6e5f696e6465785f666f725f6368696c6400845512000c00000073657373696f6e5f696e666f985512000f00000076616c69646174696f6e5f636f646500b05512001a000000686973746f726963616c5f76616c69646174696f6e5f636f64650000d45512001e00000063616e6469646174655f70656e64696e675f617661696c6162696c6974790000fc5512001000000063616e6469646174655f6576656e7473145612000c000000646d715f636f6e74656e7473285612001e000000696e626f756e645f68726d705f6368616e6e656c735f636f6e74656e7473000050561200130000006772616e6470615f617574686f726974696573006c5612002d0000007375626d69745f7265706f72745f65717569766f636174696f6e5f756e7369676e65645f65787472696e736963000000a45612001c00000067656e65726174655f6b65795f6f776e6572736869705f70726f6f66c85612000d000000636f6e66696775726174696f6e000000e05612001300000063757272656e745f65706f63685f737461727400fc5612000d00000063757272656e745f65706f6368000000145712000a0000006e6578745f65706f63680000285712000b000000617574686f726974696573003c5712001500000067656e65726174655f73657373696f6e5f6b6579730000005c571200130000006465636f64655f73657373696f6e5f6b65797300785712000d0000006163636f756e745f6e6f6e6365000000905712000a00000071756572795f696e666f0000a45712001100000071756572795f6665655f64657461696c730000001c151300580000001601000001000000496e7374616e636531436f6c6c65637469766550726f706f73616c7350726f706f73616c436f756e7450726f706f73616c4f66566f74696e67496e7374616e636532436f6c6c65637469766557726f6e6750726f706f73616c576569676874416c7265616479496e697469616c697a65644475706c6963617465566f746557726f6e67496e64657857726f6e6750726f706f73616c4c656e67746800000000006c5912000b0000000000000078591200030000000000000000000000c0591200180000000000000000000000805a12000700000000000000885a1200020000000000000000000000b85a12000a0000000000000000000000bc8712000700000000000000085b1200030000000000000000000000505b12001b0000000000000000000000d48812000400000000000000285c1200030000000000000000000000705c12000e0000000000000000000000e05c12000500000000000000e85c1200040000000000000000000000485d12001e0000000000000000000000385e12001300000000000000c88912000100000000000000000000004c5e12000d000000000000007365745f6d656d6265727300000000001c7012000b000000000000002c1a130011000000000000002770120005000000000000002c7012001400000000000000407012000900000000000000497012000b000000526c1200210000005431130000000000736c120052000000c56c120039000000fe6c12004e0000004c6d12002b0000005431130000000000776d12001600000054311300000000008d6d120055000000e26d1200490000005431130000000000f2eb12000b0000009e6312000a0000002b6e120015000000406e120039000000796e120039000000b26e1200270000009464120006000000d96e12005d000000366f12003c000000726f120052000000c46f12005800000036ec12000c00000065786563757465000000000001b512000800000000000000346b12001f00000000000000c16512000c00000000000000d2a012000c000000536b12003d0000005431130000000000906b12002b0000005431130000000000f2eb12000b0000009e6312000a000000bb6b1200610000001c6c120036000000796712000a00000036ec12000c00000000000000176b12000900000000000000206b1200140000000000000001b512000800000000000000346b12001f00000000000000c16512000c00000000000000d2a012000c0000008a6712003f0000005431130000000000c9671200220000005431130000000000eb671200510000003c681200160000005431130000000000f2eb12000b0000009e6312000a000000526812002c000000c663120039000000ff631200380000007e68120032000000b06812003e000000ee6812004000000094641200060000002e6912002e0000005c6912003d000000996912002b000000c469120043000000076a12002f000000366a1200370000006d6a12003a000000a76a120034000000db6a1200300000000b6b12000c00000036ec12000c0000000000000001b512000800000000000000b7f912000700000000000000a00e13000500000000000000876512001600000000000000836712000700000000000000a1fb120004000000cd6512003d00000054311300000000000a6612002400000054311300000000002e66120053000000816612005a000000f2eb12000b0000009e6312000a000000db6612004300000094641200060000001e6712002c0000004a6712002f000000796712000a00000036ec12000c000000636c6f736500000000000000389712000d00000000000000b7f912000700000000000000a00e130005000000000000008765120016000000000000009d6512001500000000000000b26512000f00000000000000c16512000c00000000000000d2a012000c000000076012005400000054311300000000005b601200560000005431130000000000b160120053000000046112003000000054311300000000003461120053000000876112004a0000005431130000000000d1611200590000002a6212005800000054311300000000008262120063000000e5621200590000003e631200600000005431130000000000f2eb12000b0000009e6312000a000000a86312001e000000c663120039000000ff6312003800000037641200330000006a6412002a00000094641200060000009a64120044000000de641200600000003e65120038000000766512001100000036ec12000c000000646973617070726f76655f70726f706f73616c00b45e12005e0000005431130000000000125f1200230000005431130000000000355f12000c000000415f1200480000005431130000000000f2eb12000b000000895f120038000000c15f12000b000000cc5f120013000000df5f12002800000036ec12000c00000020446973617070726f766520612070726f706f73616c2c20636c6f73652c20616e642072656d6f76652069742066726f6d207468652073797374656d2c207265676172646c657373206f66206974732063757272656e742073746174652e204d7573742062652063616c6c65642062792074686520526f6f74206f726967696e2e20506172616d65746572733a202a206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20746861742073686f756c6420626520646973617070726f7665642e20436f6d706c65786974793a204f285029207768657265205020697320746865206e756d626572206f66206d61782070726f706f73616c73204442205765696768743a202a2052656164733a2050726f706f73616c73202a205772697465733a20566f74696e672c2050726f706f73616c732c2050726f706f73616c4f6620436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e204d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e2049662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f74652069662069742069732068617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e2049662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e7320756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e2049662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c206265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e202b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642070726f706f73616c2e202b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b656420766961202020202020202020202020202020202020206073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e20232320576569676874202d20604f2842202b204d202b205031202b20503229602077686572653a2020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e646564292020202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564292020202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652e2020202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429202d2044423a20202d20322073746f726167652072656164732028604d656d62657273603a20636f64656320604f284d29602c20605072696d65603a20636f64656320604f283129602920202d2033206d75746174696f6e73202860566f74696e67603a20636f64656320604f284d29602c206050726f706f73616c4f66603a20636f64656320604f284229602c206050726f706f73616c73603a20636f64656320604f28503229602920202d20616e79206d75746174696f6e7320646f6e65207768696c6520657865637574696e67206070726f706f73616c6020286050316029202d20757020746f2033206576656e7473436f6d706163743c50726f706f73616c496e6465783e70726f706f73616c5f7765696768745f626f756e64436f6d706163743c5765696768743e6c656e6774685f626f756e642041646420616e20617965206f72206e617920766f746520666f72207468652073656e64657220746f2074686520676976656e2070726f706f73616c2e205265717569726573207468652073656e64657220746f2062652061206d656d6265722e205472616e73616374696f6e20666565732077696c6c2062652077616976656420696620746865206d656d62657220697320766f74696e67206f6e20616e7920706172746963756c61722070726f706f73616c20666f72207468652066697273742074696d6520616e64207468652063616c6c206973207375636365737366756c2e2053756273657175656e7420766f7465206368616e6765732077696c6c206368617267652061206665652e202d20604f284d296020776865726520604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564292020202d20312073746f72616765207265616420604d656d62657273602028636f64656320604f284d2960292020202d20312073746f72616765206d75746174696f6e2060566f74696e67602028636f64656320604f284d296029202d2031206576656e74617070726f7665204164642061206e65772070726f706f73616c20746f2065697468657220626520766f746564206f6e206f72206578656375746564206469726563746c792e205265717569726573207468652073656e64657220746f206265206d656d6265722e20607468726573686f6c64602064657465726d696e65732077686574686572206070726f706f73616c60206973206578656375746564206469726563746c792028607468726573686f6c64203c20326029206f722070757420757020666f7220766f74696e672e202d20604f2842202b204d202b2050312960206f7220604f2842202b204d202b20503229602077686572653a2020202d206272616e6368696e6720697320696e666c75656e63656420627920607468726573686f6c64602077686572653a20202020202d20605031602069732070726f706f73616c20657865637574696f6e20636f6d706c65786974792028607468726573686f6c64203c2032602920202020202d20605032602069732070726f706f73616c732d636f756e742028636f64652d626f756e646564292028607468726573686f6c64203e3d203260292020202d20312073746f726167652072656164206069735f6d656d626572602028636f64656320604f284d2960292020202d20312073746f726167652072656164206050726f706f73616c4f663a3a636f6e7461696e735f6b6579602028636f64656320604f28312960292020202d20444220616363657373657320696e666c75656e63656420627920607468726573686f6c64603a20202020202d204549544845522073746f7261676520616363657373657320646f6e65206279206070726f706f73616c602028607468726573686f6c64203c2032602920202020202d204f522070726f706f73616c20696e73657274696f6e2028607468726573686f6c64203c3d20326029202020202020202d20312073746f72616765206d75746174696f6e206050726f706f73616c73602028636f64656320604f285032296029202020202020202d20312073746f72616765206d75746174696f6e206050726f706f73616c436f756e74602028636f64656320604f2831296029202020202020202d20312073746f72616765207772697465206050726f706f73616c4f66602028636f64656320604f2842296029202020202020202d20312073746f726167652077726974652060566f74696e67602028636f64656320604f284d2960292020202d2031206576656e747468726573686f6c64436f6d706163743c4d656d626572436f756e743e426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e20446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e204f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e202d20604f284d202b2050296020776865726520604d60206d656d626572732d636f756e742028636f64652d626f756e6465642920616e642060506020636f6d706c6578697479206f66206469737061746368696e67206070726f706f73616c60202d2044423a203120726561642028636f64656320604f284d296029202b20444220616363657373206f66206070726f706f73616c60205365742074686520636f6c6c6563746976652773206d656d626572736869702e202d20606e65775f6d656d62657273603a20546865206e6577206d656d626572206c6973742e204265206e69636520746f2074686520636861696e20616e642070726f7669646520697420736f727465642e202d20607072696d65603a20546865207072696d65206d656d6265722077686f736520766f74652073657473207468652064656661756c742e202d20606f6c645f636f756e74603a2054686520757070657220626f756e6420666f72207468652070726576696f7573206e756d626572206f66206d656d6265727320696e2073746f726167652e202020202020202020202020202020205573656420666f722077656967687420657374696d6174696f6e2e20526571756972657320726f6f74206f726967696e2e204e4f54453a20446f6573206e6f7420656e666f7263652074686520657870656374656420604d61784d656d6265727360206c696d6974206f6e2074686520616d6f756e74206f66206d656d626572732c20627574202020202020207468652077656967687420657374696d6174696f6e732072656c79206f6e20697420746f20657374696d61746520646973706174636861626c65207765696768742e202d20604f284d50202b204e29602077686572653a2020202d20604d60206f6c642d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564292020202d20604e60206e65772d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564292020202d206050602070726f706f73616c732d636f756e742028636f64652d626f756e646564292020202d20312073746f72616765206d75746174696f6e2028636f64656320604f284d296020726561642c20604f284e29602077726974652920666f722072656164696e6720616e642077726974696e6720746865206d656d626572732020202d20312073746f7261676520726561642028636f64656320604f285029602920666f722072656164696e67207468652070726f706f73616c732020202d206050602073746f72616765206d75746174696f6e732028636f64656320604f284d29602920666f72207570646174696e672074686520766f74657320666f7220656163682070726f706f73616c2020202d20312073746f726167652077726974652028636f64656320604f283129602920666f722064656c6574696e6720746865206f6c6420607072696d656020616e642073657474696e6720746865206e6577206f6e656e65775f6d656d626572737072696d654f7074696f6e3c543a3a4163636f756e7449643e6f6c645f636f756e744d656d626572436f756e7400000000db571200090000000000000000000000f22113000c00000000000000000000000000000000000000000000000000000000000000543113006472120000000000000000007472120001000000000000000100000000000000f15712000a0000000106000000000000b7f9120007000000000000007c7212001a0000000000000000000000000000000000000054311300987212000000000000000000a872120001000000000000000000000000000000fb571200060000000106000000000000b7f912000700000000000000b0721200230000000000000000000000000000000000000054311300d47212000000000000000000e472120001000000000000000000000000000000e45712000d0000000000000000000000cbed1200030000000000000000000000000000000000000000000000000000000000000054311300ec7212000000000000000000fc72120001000000000000000100000000000000c7e112000700000000000000000000002c1a13001100000000000000000000000000000000000000000000000000000000000000543113000473120000000000000000001473120001000000000000000100000000000000dbe11200050000000000000000000000e3f812000c00000000000000000000000000000000000000000000000000000000000000543113001c73120000000000000000002c731200010000000000000000000000120000000000000001000000620000004d741200240000003c5420617320436f6e6669673c493e3e3a3a50726f706f73616c0000120000000000000001000000ff0000001a74120033000000566f7465733c543a3a4163636f756e7449642c20543a3a426c6f636b4e756d6265723e0012000000000000000100000000010000ed7312002d00000012000000000000000100000022000000db731200120000001200000000000000010000003f0000008d7312004e00000012000000000000000100000023000000347312005900000020546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e2050726f706f73616c7320736f206661722e20566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e2054686520686173686573206f6620746865206163746976652070726f706f73616c732e00000000000000db571200090000000000000000000000f22113000c00000000000000000000000000000000000000000000000000000000000000543113008476120000000000000000007472120001000000000000000100000000000000f15712000a0000000106000000000000b7f9120007000000000000007c7212001a0000000000000000000000000000000000000054311300947612000000000000000000a872120001000000000000000000000000000000fb571200060000000106000000000000b7f912000700000000000000b0721200230000000000000000000000000000000000000054311300a47612000000000000000000e472120001000000000000000000000000000000e45712000d0000000000000000000000cbed1200030000000000000000000000000000000000000000000000000000000000000054311300b47612000000000000000000fc72120001000000000000000100000000000000c7e112000700000000000000000000002c1a1300110000000000000000000000000000000000000000000000000000000000000054311300c476120000000000000000001473120001000000000000000100000000000000dbe11200050000000000000000000000e3f812000c0000000000000000000000000000000000000000000000000000000000000054311300d476120000000000000000002c73120001000000000000000000000012000000000000000100000062000000120000000000000001000000ff00000012000000000000000100000000010000120000000000000001000000220000001200000000000000010000003f0000001200000000000000010000002300000000000000d0ce1200080000000000000018781200040000000000000000000000387812000300000000000000000000005078120005000000000000005878120005000000000000000000000080781200030000000000000000000000987812000800000000000000e8d01200010000000000000000000000a0781200020000000000000000000000b07812000b00000000000000e8d01200010000000000000000000000bc78120002000000000000000000000090cf12000800000000000000cc781200020000000000000000000000dc781200020000000000000000000000ec7812000e00000000000000cc781200020000000000000000000000fc7812000200000000000000000000000c7912000600000000000000147912000300000000000000000000002c791200020000000000000079e5120009000000357c12000d00000082e5120004000000497012000b0000009c7b120053000000ef7b120010000000ff7b120036000000566f74656400000079e512000900000082e5120004000000a1fb120004000000497012000b000000497012000b000000e97a1200420000002b7b120046000000717b12002b000000417070726f766564b87a120031000000a67a120012000000446973617070726f76656400717a120035000000a67a12001200000082e5120004000000637a12000e0000001a7a120049000000007a12001a0000004d656d62657245786563757465640000ad79120053000000007a12001a000000436c6f736564000082e5120004000000497012000b000000497012000b0000003c79120056000000927912001b00000020412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e205c5b70726f706f73616c5f686173682c207965732c206e6f5c5d20412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e205c5b70726f706f73616c5f686173682c20726573756c745c5d2041206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e4469737061746368526573756c742041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e205c5b70726f706f73616c5f686173685c5d2041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2041206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e6720612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e205c5b6163636f756e742c2070726f706f73616c5f686173682c20766f7465642c207965732c206e6f5c5d2041206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e20604d656d626572436f756e7460292e205c5b6163636f756e742c2070726f706f73616c5f696e6465782c2070726f706f73616c5f686173682c207468726573686f6c645c5d50726f706f73616c496e646578000012000000000000000100000021000000647c12006600000062000000270000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f6e706f732d656c656374696f6e732f7372632f70687261676d656e2e72730000dc7c1200670000008e0000002f0000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f6e706f732d656c656374696f6e732f7372632f62616c616e63696e672e72730000000000e0e1120009000000000000005c7e1200010000000000000000000000218312001100000000000000647e1200010000000000000000000000498312000f000000000000006c7e1200010000000000000000000000465812000a00000000000000747e1200010000000000000000000000395812000d000000000000007c7e1200010000000000000000000000275812001200000000000000847e1200010000000000000000000000ab82120008000000000000008c7e1200010000000000000000000000608312001000000000000000947e12000100000000000000000000001458120013000000000000009c7e1200010000000000000000000000505812001300000000000000a47e120001000000000000001480120018000000f47f120020000000e07f120014000000cf7f120011000000b87f120017000000977f120021000000567f120041000000167f120040000000e17e120035000000ac7e1200350000002054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e2054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e2054686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e2054686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e204d656d626572732061726520616c726561647920696e697469616c697a656421204475706c696361746520766f74652069676e6f726564204d69736d61746368656420696e6465782050726f706f73616c206d757374206578697374204475706c69636174652070726f706f73616c73206e6f7420616c6c6f776564204163636f756e74206973206e6f742061206d656d6265724c4f474943204552524f523a2062616b655f7265666572656e64756d2f7363686564756c655f6e616d6564206661696c656444656d6f63726163795265666572656e64756d496e666f4f66507265696d616765734e65787445787465726e616c5075626c696350726f70734465706f7369744f6653657373696f6e486973746f726963616c53657373696f6e730000002f000000600000000800000001010000020100002f0000006000000008000000300000003100000032000000330000003400000035000000360000006661696c656420746f20696e7365727420696e746f207472696500002481120054000000740100001b0000002f636172676f2d686f6d652f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f747269652d64622d302e32322e332f7372632f7472696564626d75742e72732481120054000000670100000d0000009081120023000000605f5f49676e6f7265602063616e206e6576657220626520636f6e7374727563746564496e76616c69645769746e6573734d6178566f7465735265616368656457726f6e675570706572426f756e644e6f6e73656e7365496e7374616e744e6f74416c6c6f776564566f74657345786973744e6f7444656c65676174696e67496e73756666696369656e7446756e6473556e646572666c6f774f766572666c6f77416c726561647944656c65676174696e674e6f5065726d697373696f6e4e6f74566f7465724e6f74457870697265644e6f744c6f636b65644e6f6e6557616974696e67507265696d616765496e76616c69645265666572656e64756d496e76616c6964507265696d6167654d697373696e67496d6d696e656e74546f6f4561726c794e6f74496d6d696e656e744475706c6963617465507265696d6167654e6f7444656c656761746564416c72656164795665746f65644e6f50726f706f73616c496e76616c6964486173684e6f7453696d706c654d616a6f7269747950726f706f73616c426c61636b6c69737465644475706c696361746550726f706f73616c416c726561647943616e63656c6564426164496e64657850726f706f73616c4d697373696e6756616c75654c6f77546f6f4d616e7950726f706f73616c7300000000bc8712000700000000000000c4871200020000000000000000000000f48712000b00000000000000000000004c881200060000000000000054881200020000000000000000000000848812000a0000000000000000000000d48812000400000000000000d8881200020000000000000000000000088912000900000000000000000000005089120010000000000000006089120001000000000000000000000078891200080000000000000000000000b88912001000000000000000c8891200010000000000000000000000e0891200090000000000000000000000288a12001900000000000000c8891200010000000000000000000000448a12000b00000000000000000000009c8a12001800000000000000c8891200010000000000000000000000b48a12000b00000000000000000000000c8b12000a00000000000000188b1200030000000000000000000000608b12000f0000000000000000000000d88b12000d00000000000000c8891200010000000000000000000000e88b1200090000000000000000000000308c12001100000000000000448c12000100000000000000000000005c8c1200070000000000000000000000948c12000d00000000000000a48c1200010000000000000000000000bc8c1200070000000000000000000000f48c12000800000000000000fc8c1200030000000000000000000000448d1200140000000000000000000000e48d12000a0000000000000054311300000000000000000000000000f08d12000c0000000000000000000000508e1200160000000000000054311300000000000000000000000000688e1200050000000000000000000000908e12000d00000000000000a08e1200010000000000000000000000b88e12000a0000000000000000000000088f12001900000000000000a08e1200010000000000000000000000248f12000100000000000000000000002c8f12001600000000000000a08e1200010000000000000000000000448f12000c0000000000000000000000a48f12002200000000000000a08e1200010000000000000000000000c88f1200010000000000000000000000d08f12000d00000000000000e08f1200020000000000000000000000109012000f000000000000000000000088901200060000000000000090901200010000000000000000000000a8901200070000000000000000000000e09012000b00000000000000ec901200010000000000000000000000049112001b0000000000000000000000dc9112001100000000000000f0911200020000000000000000000000209212000f0000000000000000000000989212000e00000000000000a8921200020000000000000000000000d8921200010000000000000000000000e09212000900000000000000ec9212000200000000000000000000001c9312000f0000000000000000000000949312000f00000000000000a4931200010000000000000000000000bc931200070000000000000070726f706f73650000000000389712000d00000000000000b7f91200070000000000000048b6120005000000000000004db61200150000001cb5120028000000543113000000000044b51200460000008ab51200210000005431130000000000abb5120036000000e1b5120046000000543113000000000027b6120012000000543113000000000039b612000f0000007365636f6e6400000000000001b512000800000000000000c1941200120000000000000009b512001300000000000000d2a012000c00000037b312002e000000543113000000000065b3120041000000a6b31200450000005431130000000000ebb31200330000001eb41200510000006fb412004a0000005431130000000000b9b4120048000000766f74650000000072aa120009000000000000007baa12001800000000000000d488120004000000000000001eb3120019000000fcb112004d00000049b212002f00000054311300000000000b99120033000000543113000000000078b2120038000000b0b21200220000005431130000000000d2b212004c000000656d657267656e63795f63616e63656c0000000072aa12000900000000000000bf9712000f00000034b112005400000078b012000c000000543113000000000088b112003f0000005431130000000000c7b1120035000000543113000000000008a412001000000065787465726e616c5f70726f706f736500000000389712000d00000000000000b7f91200070000002cb012004c00000078b012000c000000543113000000000084b012003b0000005431130000000000d2ae1200360000005431130000000000bfb012004600000005b112002f00000065787465726e616c5f70726f706f73655f6d616a6f7269747900000082af120056000000d8af1200180000005431130000000000f0af12003c0000005431130000000000d2ae120036000000543113000000000008af1200530000005baf120027000000543113000000000003ae12000f00000065787465726e616c5f70726f706f73655f64656661756c7424ae12005200000076ae120021000000543113000000000097ae12003b0000005431130000000000d2ae120036000000543113000000000008af1200530000005baf120027000000543113000000000003ae12000f000000666173745f747261636b000000000000389712000d00000000000000b7f91200070000000000000012ae12000d00000000000000a9f912000e000000000000001fae12000500000000000000a9f912000e00000095ab120054000000e9ab12005900000042ac12003b00000054311300000000007dac1200350000005431130000000000b2ac12003e000000f0ac12005800000048ad1200260000006ead120055000000c3ad12002f0000005431130000000000f2ad120011000000543113000000000003ae12000f0000007665746f5f65787465726e616c00000093aa12002f0000005431130000000000c2aa1200370000005431130000000000f9aa12004c000000543113000000000045ab120010000000543113000000000055ab12004000000063616e63656c5f7265666572656e64756d0000000000000072aa120009000000000000007baa12001800000015aa1200150000005431130000000000d7a312003100000054311300000000002aaa120036000000543113000000000060aa12001200000063616e63656c5f7175657565640000000000000010aa12000500000000000000bf9712000f00000063a91200280000005431130000000000d7a312003100000054311300000000008ba91200320000005431130000000000bda912005300000064656c6567617465000000003aa912000200000000000000e3f812000c000000000000003ca912000a0000000000000046a912000a0000000000000050a91200070000000000000057a912000c000000dca512004f00000054311300000000002ba612005600000081a61200330000005431130000000000b4a61200580000000ca712001e0000002aa712005700000081a71200260000005431130000000000a7a7120052000000f9a71200560000004fa8120051000000a0a8120055000000f5a8120032000000543113000000000027a9120013000000543113000000000059a5120050000000a9a5120033000000756e64656c6567617465000018a412003400000054311300000000004ca4120058000000a4a41200380000005431130000000000dca41200520000002ea5120016000000543113000000000044a5120015000000543113000000000059a5120050000000a9a5120033000000636c6561725f7075626c69635f70726f706f73616c730000baa312001d0000005431130000000000d7a3120031000000543113000000000008a41200100000006e6f74655f707265696d61676500000000000000aaa31200100000000000000042ec12000700000009a312005800000061a312004900000054311300000000000b99120033000000543113000000000029a212003200000054311300000000005ba2120017000000543113000000000072a21200540000006e6f74655f707265696d6167655f6f7065726174696f6e616c000000c6a21200430000006e6f74655f696d6d696e656e745f707265696d61676500002aa11200510000007ba1120050000000cba112004e00000019a212001000000054311300000000000b99120033000000543113000000000029a212003200000054311300000000005ba2120017000000543113000000000072a21200540000006e6f74655f696d6d696e656e745f707265696d6167655f6f7065726174696f6e616c0000dea012004c000000726561705f707265696d61676500000000000000389712000d00000000000000b7f912000700000000000000baa012001800000000000000d2a012000c000000a19e12003d00000054311300000000000b991200330000005431130000000000de9e120034000000129f12004b0000005d9f12004000000054311300000000009d9f120054000000f19f12005700000048a012002c000000543113000000000074a012001800000054311300000000008ca012002e000000756e6c6f636b000000000000739a12000600000000000000e3f812000c000000199e12002900000054311300000000000b991200330000005431130000000000429e12002f0000005431130000000000719e12003000000072656d6f76655f766f74650000000000a00e13000500000000000000bf9712000f000000ce971200200000005431130000000000799a1200040000007d9a120023000000a09a120020000000c09a120025000000e59a120040000000259b1200360000005b9b1200220000007d9b120058000000d59b1200170000005431130000000000ec9b12002b000000179c12003c000000539c1200380000008b9c120030000000bb9c120057000000129d120057000000699d12003a0000005431130000000000a39d120053000000f69d1200230000005431130000000000a89912003e0000005431130000000000e6991200560000003c9a12003700000072656d6f76655f6f746865725f766f746500000000000000739a12000600000000000000e3f812000c00000000000000a00e13000500000000000000bf9712000f000000ce971200200000005431130000000000ee97120054000000429812004c0000008e98120056000000e49812002700000054311300000000000b9912003300000054311300000000003e991200540000009299120016000000a89912003e0000005431130000000000e6991200560000003c9a120037000000656e6163745f70726f706f73616c000000000000389712000d00000000000000b7f912000700000000000000a00e13000500000000000000bf9712000f0000006b97120054000000626c61636b6c69737400000000000000389712000d00000000000000b7f912000700000000000000459712000f000000000000005497120017000000d3941200520000002595120010000000543113000000000035951200550000008a95120055000000df9512001b0000005431130000000000fa9512003c0000005431130000000000369612003f0000007596120052000000c79612000b0000005431130000000000d296120051000000239712001500000063616e63656c5f70726f706f73616c0000000000b79412000a00000000000000c194120012000000f493120013000000543113000000000007941200410000005431130000000000489412003500000054311300000000007d9412003a0000002052656d6f766520612070726f706f73616c2e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206043616e63656c50726f706f73616c4f726967696e602e202d206070726f705f696e646578603a2054686520696e646578206f66207468652070726f706f73616c20746f2063616e63656c2e205765696768743a20604f28702960207768657265206070203d205075626c696350726f70733a3a3c543e3a3a6465636f64655f6c656e28296070726f705f696e646578436f6d706163743c50726f70496e6465783e205065726d616e656e746c7920706c61636520612070726f706f73616c20696e746f2074686520626c61636b6c6973742e20546869732070726576656e74732069742066726f6d2065766572206265696e672070726f706f73656420616761696e2e2049662063616c6c6564206f6e206120717565756564207075626c6963206f722065787465726e616c2070726f706f73616c2c207468656e20746869732077696c6c20726573756c7420696e206974206265696e672072656d6f7665642e2049662074686520607265665f696e6465786020737570706c69656420697320616e20616374697665207265666572656e64756d2077697468207468652070726f706f73616c20686173682c207468656e2069742077696c6c2062652063616e63656c6c65642e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d7573742062652060426c61636b6c6973744f726967696e602e202d206070726f706f73616c5f68617368603a205468652070726f706f73616c206861736820746f20626c61636b6c697374207065726d616e656e746c792e202d20607265665f696e646578603a20416e206f6e676f696e67207265666572656e64756d2077686f73652068617368206973206070726f706f73616c5f68617368602c2077686963682077696c6c2062652063616e63656c6c65642e205765696768743a20604f28702960202874686f756768206173207468697320697320616e20686967682d70726976696c6567652064697370617463682c20776520617373756d65206974206861732061202020726561736f6e61626c652076616c7565292e70726f706f73616c5f686173686d617962655f7265665f696e6465784f7074696f6e3c5265666572656e64756d496e6465783e20456e61637420612070726f706f73616c2066726f6d2061207265666572656e64756d2e20466f72206e6f77207765206a757374206d616b65207468652077656967687420626520746865206d6178696d756d2e5265666572656e64756d496e6465782052656d6f7665206120766f746520666f722061207265666572656e64756d2e2049662074686520607461726765746020697320657175616c20746f20746865207369676e65722c207468656e20746869732066756e6374696f6e2069732065786163746c79206571756976616c656e7420746f206072656d6f76655f766f7465602e204966206e6f7420657175616c20746f20746865207369676e65722c207468656e2074686520766f7465206d757374206861766520657870697265642c20656974686572206265636175736520746865207265666572656e64756d207761732063616e63656c6c65642c20626563617573652074686520766f746572206c6f737420746865207265666572656e64756d206f7220626563617573652074686520636f6e76696374696f6e20706572696f64206973206f7665722e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e202d2060746172676574603a20546865206163636f756e74206f662074686520766f746520746f2062652072656d6f7665643b2074686973206163636f756e74206d757374206861766520766f74656420666f722020207265666572656e64756d2060696e646578602e202d2060696e646578603a2054686520696e646578206f66207265666572656e64756d206f662074686520766f746520746f2062652072656d6f7665642e205765696768743a20604f2852202b206c6f6720522960207768657265205220697320746865206e756d626572206f66207265666572656e646120746861742060746172676574602068617320766f746564206f6e2e2020205765696768742069732063616c63756c6174656420666f7220746865206d6178696d756d206e756d626572206f6620766f74652e7461726765742049663a202d20746865207265666572656e64756d207761732063616e63656c6c65642c206f72202d20746865207265666572656e64756d206973206f6e676f696e672c206f72202d20746865207265666572656e64756d2068617320656e646564207375636820746861742020202d2074686520766f7465206f6620746865206163636f756e742077617320696e206f70706f736974696f6e20746f2074686520726573756c743b206f722020202d20746865726520776173206e6f20636f6e76696374696f6e20746f20746865206163636f756e74277320766f74653b206f722020202d20746865206163636f756e74206d61646520612073706c697420766f7465202e2e2e7468656e2074686520766f74652069732072656d6f76656420636c65616e6c7920616e64206120666f6c6c6f77696e672063616c6c20746f2060756e6c6f636b60206d617920726573756c7420696e206d6f72652066756e6473206265696e6720617661696c61626c652e2049662c20686f77657665722c20746865207265666572656e64756d2068617320656e64656420616e643a202d2069742066696e697368656420636f72726573706f6e64696e6720746f2074686520766f7465206f6620746865206163636f756e742c20616e64202d20746865206163636f756e74206d6164652061207374616e6461726420766f7465207769746820636f6e76696374696f6e2c20616e64202d20746865206c6f636b20706572696f64206f662074686520636f6e76696374696f6e206973206e6f74206f766572202e2e2e7468656e20746865206c6f636b2077696c6c206265206167677265676174656420696e746f20746865206f766572616c6c206163636f756e742773206c6f636b2c207768696368206d617920696e766f6c7665202a6f7665726c6f636b696e672a20287768657265207468652074776f206c6f636b732061726520636f6d62696e656420696e746f20612073696e676c65206c6f636b207468617420697320746865206d6178696d756d206f6620626f74682074686520616d6f756e74206c6f636b656420616e64207468652074696d65206973206974206c6f636b656420666f72292e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e6572206d7573742068617665206120766f7465207265676973746572656420666f72207265666572656e64756d2060696e646578602e20556e6c6f636b20746f6b656e732074686174206861766520616e2065787069726564206c6f636b2e202d2060746172676574603a20546865206163636f756e7420746f2072656d6f766520746865206c6f636b206f6e2e205765696768743a20604f2852296020776974682052206e756d626572206f6620766f7465206f66207461726765742e2052656d6f766520616e20657870697265642070726f706f73616c20707265696d61676520616e6420636f6c6c65637420746865206465706f7369742e202d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f6620612070726f706f73616c2e202d206070726f706f73616c5f6c656e6774685f75707065725f626f756e64603a20616e20757070657220626f756e64206f6e206c656e677468206f66207468652070726f706f73616c2e20202045787472696e736963206973207765696768746564206163636f7264696e6720746f20746869732076616c75652077697468206e6f20726566756e642e20546869732077696c6c206f6e6c7920776f726b2061667465722060566f74696e67506572696f646020626c6f636b732066726f6d207468652074696d6520746861742074686520707265696d61676520776173206e6f7465642c2069662069742773207468652073616d65206163636f756e7420646f696e672069742e2049662069742773206120646966666572656e74206163636f756e742c207468656e206974276c6c206f6e6c7920776f726b20616e206164646974696f6e616c2060456e6163746d656e74506572696f6460206c617465722e20456d6974732060507265696d616765526561706564602e205765696768743a20604f284429602077686572652044206973206c656e677468206f662070726f706f73616c2e70726f706f73616c5f6c656e5f75707065725f626f756e64436f6d706163743c7533323e2053616d6520617320606e6f74655f696d6d696e656e745f707265696d6167656020627574206f726967696e20697320604f7065726174696f6e616c507265696d6167654f726967696e602e2052656769737465722074686520707265696d61676520666f7220616e207570636f6d696e672070726f706f73616c2e2054686973207265717569726573207468652070726f706f73616c20746f20626520696e207468652064697370617463682071756575652e204e6f206465706f736974206973206e65656465642e205768656e20746869732063616c6c206973207375636365737366756c2c20692e652e2074686520707265696d61676520686173206e6f74206265656e2075706c6f61646564206265666f726520616e64206d61746368657320736f6d6520696d6d696e656e742070726f706f73616c2c206e6f2066656520697320706169642e202d2060656e636f6465645f70726f706f73616c603a2054686520707265696d616765206f6620612070726f706f73616c2e20456d6974732060507265696d6167654e6f746564602e205765696768743a20604f28452960207769746820452073697a65206f662060656e636f6465645f70726f706f73616c60202870726f7465637465642062792061207265717569726564206465706f736974292e2053616d6520617320606e6f74655f707265696d6167656020627574206f726967696e20697320604f7065726174696f6e616c507265696d6167654f726967696e602e2052656769737465722074686520707265696d61676520666f7220616e207570636f6d696e672070726f706f73616c2e205468697320646f65736e27742072657175697265207468652070726f706f73616c20746f20626520696e207468652064697370617463682071756575652062757420646f657320726571756972652061206465706f7369742c2072657475726e6564206f6e636520656e61637465642e656e636f6465645f70726f706f73616c20436c6561727320616c6c207075626c69632070726f706f73616c732e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e205765696768743a20604f283129602e20556e64656c65676174652074686520766f74696e6720706f776572206f66207468652073656e64696e67206163636f756e742e20546f6b656e73206d617920626520756e6c6f636b656420666f6c6c6f77696e67206f6e636520616e20616d6f756e74206f662074696d6520636f6e73697374656e74207769746820746865206c6f636b20706572696f64206f662074686520636f6e76696374696f6e2077697468207768696368207468652064656c65676174696f6e20776173206973737565642e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062652063757272656e746c792064656c65676174696e672e20456d6974732060556e64656c656761746564602e205765696768743a20604f28522960207768657265205220697320746865206e756d626572206f66207265666572656e64756d732074686520766f7465722064656c65676174696e6720746f20686173202020766f746564206f6e2e205765696768742069732063686172676564206173206966206d6178696d756d20766f7465732e2044656c65676174652074686520766f74696e6720706f77657220287769746820736f6d6520676976656e20636f6e76696374696f6e29206f66207468652073656e64696e67206163636f756e742e205468652062616c616e63652064656c656761746564206973206c6f636b656420666f72206173206c6f6e6720617320697427732064656c6567617465642c20616e64207468657265616674657220666f72207468652074696d6520617070726f70726961746520666f722074686520636f6e76696374696f6e2773206c6f636b20706572696f642e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e696e67206163636f756e74206d757374206569746865723a2020202d2062652064656c65676174696e6720616c72656164793b206f722020202d2068617665206e6f20766f74696e67206163746976697479202869662074686572652069732c207468656e2069742077696c6c206e65656420746f2062652072656d6f7665642f636f6e736f6c69646174656420202020207468726f7567682060726561705f766f746560206f722060756e766f746560292e202d2060746f603a20546865206163636f756e742077686f736520766f74696e6720746865206074617267657460206163636f756e74277320766f74696e6720706f7765722077696c6c20666f6c6c6f772e202d2060636f6e76696374696f6e603a2054686520636f6e76696374696f6e20746861742077696c6c20626520617474616368656420746f207468652064656c65676174656420766f7465732e205768656e207468652020206163636f756e7420697320756e64656c6567617465642c207468652066756e64732077696c6c206265206c6f636b656420666f722074686520636f72726573706f6e64696e6720706572696f642e202d206062616c616e6365603a2054686520616d6f756e74206f6620746865206163636f756e7427732062616c616e636520746f206265207573656420696e2064656c65676174696e672e2054686973206d7573742020206e6f74206265206d6f7265207468616e20746865206163636f756e7427732063757272656e742062616c616e63652e20456d697473206044656c656761746564602e746f636f6e76696374696f6e436f6e76696374696f6e62616c616e636542616c616e63654f663c543e2043616e63656c20612070726f706f73616c2071756575656420666f7220656e6163746d656e742e202d20607768696368603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e205765696768743a20604f284429602077686572652060446020697320746865206974656d7320696e207468652064697370617463682071756575652e205765696768746564206173206044203d203130602e77686963682052656d6f76652061207265666572656e64756d2e202d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e2023205765696768743a20604f283129602e7265665f696e646578436f6d706163743c5265666572656e64756d496e6465783e205665746f20616e6420626c61636b6c697374207468652065787465726e616c2070726f706f73616c20686173682e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d75737420626520605665746f4f726967696e602e202d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c20746f207665746f20616e6420626c61636b6c6973742e20456d69747320605665746f6564602e205765696768743a20604f2856202b206c6f6728562929602077686572652056206973206e756d626572206f6620606578697374696e67207665746f65727360205363686564756c65207468652063757272656e746c792065787465726e616c6c792d70726f706f736564206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c656420696d6d6564696174656c792e204966207468657265206973206e6f2065787465726e616c6c792d70726f706f736564207265666572656e64756d2063757272656e746c792c206f72206966207468657265206973206f6e6520627574206974206973206e6f742061206d616a6f726974792d63617272696573207265666572656e64756d207468656e206974206661696c732e20546865206469737061746368206f6620746869732063616c6c206d757374206265206046617374547261636b4f726967696e602e202d206070726f706f73616c5f68617368603a205468652068617368206f66207468652063757272656e742065787465726e616c2070726f706f73616c2e202d2060766f74696e675f706572696f64603a2054686520706572696f64207468617420697320616c6c6f77656420666f7220766f74696e67206f6e20746869732070726f706f73616c2e20496e6372656173656420746f2020206046617374547261636b566f74696e67506572696f646020696620746f6f206c6f772e202d206064656c6179603a20546865206e756d626572206f6620626c6f636b20616674657220766f74696e672068617320656e64656420696e20617070726f76616c20616e6420746869732073686f756c64206265202020656e61637465642e205468697320646f65736e277420686176652061206d696e696d756d20616d6f756e742e20456d697473206053746172746564602e205765696768743a20604f28312960766f74696e675f706572696f6464656c6179205363686564756c652061206e656761746976652d7475726e6f75742d62696173207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f207363686564756c6520616e2065787465726e616c207265666572656e64756d2e20546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c44656661756c744f726967696e602e202d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e20556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c6163652061207072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e205363686564756c652061206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f207363686564756c6520616e2065787465726e616c207265666572656e64756d2e20546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c4d616a6f726974794f726967696e602e205363686564756c652061207265666572656e64756d20746f206265207461626c6564206f6e6365206974206973206c6567616c20746f207363686564756c6520616e2065787465726e616c207265666572656e64756d2e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206045787465726e616c4f726967696e602e205765696768743a20604f2856296020776974682056206e756d626572206f66207665746f65727320696e2074686520626c61636b6c697374206f662070726f706f73616c2e2020204465636f64696e6720766563206f66206c656e67746820562e2043686172676564206173206d6178696d756d205363686564756c6520616e20656d657267656e63792063616e63656c6c6174696f6e206f662061207265666572656e64756d2e2043616e6e6f742068617070656e20747769636520746f207468652073616d6520546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206043616e63656c6c6174696f6e4f726967696e602e202d607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e20566f746520696e2061207265666572656e64756d2e2049662060766f74652e69735f6179652829602c2074686520766f746520697320746f20656e616374207468652070726f706f73616c3b206f7468657277697365206974206973206120766f746520746f206b65657020746865207374617475732071756f2e202d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f20766f746520666f722e202d2060766f7465603a2054686520766f746520636f6e66696775726174696f6e2e205765696768743a20604f28522960207768657265205220697320746865206e756d626572206f66207265666572656e64756d732074686520766f7465722068617320766f746564206f6e2e4163636f756e74566f74653c42616c616e63654f663c543e3e205369676e616c732061677265656d656e742077697468206120706172746963756c61722070726f706f73616c2e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652066756e647320746f20636f76657220746865206465706f7369742c20657175616c20746f20746865206f726967696e616c206465706f7369742e202d206070726f706f73616c603a2054686520696e646578206f66207468652070726f706f73616c20746f207365636f6e642e202d20607365636f6e64735f75707065725f626f756e64603a20616e20757070657220626f756e64206f6e207468652063757272656e74206e756d626572206f66207365636f6e6473206f6e207468697320202070726f706f73616c2e2045787472696e736963206973207765696768746564206163636f7264696e6720746f20746869732076616c75652077697468206e6f20726566756e642e205765696768743a20604f28532960207768657265205320697320746865206e756d626572206f66207365636f6e647320612070726f706f73616c20616c7265616479206861732e70726f706f73616c7365636f6e64735f75707065725f626f756e642050726f706f736520612073656e73697469766520616374696f6e20746f2062652074616b656e2e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652066756e647320746f20636f76657220746865206465706f7369742e202d206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20707265696d6167652e202d206076616c7565603a2054686520616d6f756e74206f66206465706f73697420286d757374206265206174206c6561737420604d696e696d756d4465706f73697460292e20456d697473206050726f706f736564602e205765696768743a20604f2870296076616c7565436f6d706163743c42616c616e63654f663c543e3e00000000000034bb12000f000000000000000000000043bb12000900000000000000000000000000000000000000000000000000000000000000543113004cbb120000000000000000005cbb1200010000000000000001000000000000008c8012000b000000000000000000000064bb12002700000000000000000000000000000000000000000000000000000000000000543113008cbb120000000000000000009cbb1200010000000000000001000000000000009780120009000000010500000000000043bb12000900000000000000a4bb1200210000000000000000000000000000000000000054311300c8bb12000000000000000000d8bb12000300000000000000000000000000000077801200090000000106000000000000b7f912000700000000000000f0bb12003a00000000000000000000000000000000000000543113002cbc120000000000000000003cbc1200020000000000000000000000000000004cbc12000f0000000000000000000000bf9712000f00000000000000000000000000000000000000000000000000000000000000543113005cbc120000000000000000006cbc12000100000000000000010000000000000074bc12000d0000000000000000000000bf9712000f000000000000000000000000000000000000000000000000000000000000005431130084bc1200000000000000000094bc12000200000000000000010000000000000067801200100000000105000000000000bf9712000f00000000000000a4bc1200350000000000000000000000000000000000000054311300dcbc12000000000000000000ecbc12000300000000000000000000000000000004bd1200080000000105000000000000e3f812000c000000000000000cbd120032000000000000000000000000000000000000005431130040bd1200000000000000000050bd12000400000000000000010000000000000070bd1200050000000105000000000000e3f812000c00000000000000a9f912000e000000000000000000000000000000000000005431130078bd1200000000000000000088bd120004000000000000000000000000000000a8bd1200150000000000000000000000a1fb1200040000000000000000000000000000000000000000000000000000000000000054311300c0bd12000000000000000000d0bd120002000000000000000100000000000000808012000c0000000000000000000000e0bd1200180000000000000000000000000000000000000000000000000000000000000054311300f8bd1200000000000000000008be12000400000000000000000000000000000028be1200090000000106000000000000b7f91200070000000000000031be120023000000000000000000000000000000000000005431130054be1200000000000000000064be12000200000000000000000000000000000074be12000d0000000106000000000000b7f912000700000000000000a1fb120004000000000000000000000000000000000000005431130084be1200000000000000000094be1200010000000000000001000000000000009cbe12000e0000000000000000000000aabe1200080000000000000000000000000000000000000000000000000000000000000054311300b4be12000000000000000000c4be12000300000000000000000000005075626c696350726f70436f756e7450726f70496e6465781200000000000000010000002200000075c512003d0000005665633c2850726f70496e6465782c20543a3a486173682c20543a3a4163636f756e744964293e00120000000000000001000000030100002dc5120048000000285665633c543a3a4163636f756e7449643e2c2042616c616e63654f663c543e2900000012000000000000000100000023000000d6c41200210000005431130000000000f7c4120036000000507265696d6167655374617475733c543a3a4163636f756e7449642c2042616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e00001200000000000000010000002300000045c41200580000009dc41200390000005265666572656e64756d436f756e740012000000000000000100000022000000f9c312004c0000004c6f77657374556e62616b65640000001200000000000000010000002200000079c3120049000000c2c31200370000005265666572656e64756d496e666f3c543a3a426c6f636b4e756d6265722c20543a3a486173682c2042616c616e63654f663c543e3e000000120000000000000001000000230000000ac312002d000000543113000000000037c3120042000000566f74696e674f66566f74696e673c42616c616e63654f663c543e2c20543a3a4163636f756e7449642c20543a3a426c6f636b4e756d6265723e00001200000000000000010000000401000022c212005700000079c21200570000005431130000000000d0c212003a0000004c6f636b730000001200000000000000010000002300000047c11200570000009ec11200540000005431130000000000f2c11200300000004c6173745461626c656457617345787465726e616c00000012000000000000000100000023000000e7c01200560000003dc112000a00000028543a3a486173682c20566f74655468726573686f6c642912000000000000000100000023000000f9bf1200560000004fc0120055000000a4c0120029000000cdc012001a000000426c61636b6c69737428543a3a426c6f636b4e756d6265722c205665633c543a3a4163636f756e7449643e29120000000000000001000000230000006bbf120054000000bfbf12003a00000043616e63656c6c6174696f6e730000001200000000000000010000002300000021bf12004a00000053746f7261676556657273696f6e52656c6561736573000012000000000000000100000023000000dcbe12001f0000005431130000000000fbbe1200260000002053746f726167652076657273696f6e206f66207468652070616c6c65742e204e6577206e6574776f726b732073746172742077697468206c6173742076657273696f6e2e205265636f7264206f6620616c6c2070726f706f73616c7320746861742068617665206265656e207375626a65637420746f20656d657267656e63792063616e63656c6c6174696f6e2e2041207265636f7264206f662077686f207665746f656420776861742e204d6170732070726f706f73616c206861736820746f206120706f737369626c65206578697374656e7420626c6f636b206e756d6265722028756e74696c207768656e206974206d6179206e6f742062652072657375626d69747465642920616e642077686f207665746f65642069742e20546865207265666572656e64756d20746f206265207461626c6564207768656e6576657220697420776f756c642062652076616c696420746f207461626c6520616e2065787465726e616c2070726f706f73616c2e20546869732068617070656e73207768656e2061207265666572656e64756d206e6565647320746f206265207461626c656420616e64206f6e65206f662074776f20636f6e646974696f6e7320617265206d65743a202d20604c6173745461626c656457617345787465726e616c60206973206066616c7365603b206f72202d20605075626c696350726f70736020697320656d7074792e205472756520696620746865206c617374207265666572656e64756d207461626c656420776173207375626d69747465642065787465726e616c6c792e2046616c7365206966206974207761732061207075626c69632070726f706f73616c2e204163636f756e747320666f7220776869636820746865726520617265206c6f636b7320696e20616374696f6e207768696368206d61792062652072656d6f76656420617420736f6d6520706f696e7420696e20746865206675747572652e205468652076616c75652069732074686520626c6f636b206e756d62657220617420776869636820746865206c6f636b206578706972657320616e64206d61792062652072656d6f7665642e2054574f582d4e4f54453a204f4b20e2809520604163636f756e7449646020697320612073656375726520686173682e20416c6c20766f74657320666f72206120706172746963756c617220766f7465722e2057652073746f7265207468652062616c616e636520666f7220746865206e756d626572206f6620766f74657320746861742077652068617665207265636f726465642e20546865207365636f6e64206974656d2069732074686520746f74616c20616d6f756e74206f662064656c65676174696f6e732c20746861742077696c6c2062652061646465642e2054574f582d4e4f54453a205341464520617320604163636f756e7449646073206172652063727970746f2068617368657320616e797761792e20496e666f726d6174696f6e20636f6e6365726e696e6720616e7920676976656e207265666572656e64756d2e2054574f582d4e4f54453a205341464520617320696e646578657320617265206e6f7420756e64657220616e2061747461636b6572e280997320636f6e74726f6c2e20546865206c6f77657374207265666572656e64756d20696e64657820726570726573656e74696e6720616e20756e62616b6564207265666572656e64756d2e20457175616c20746f20605265666572656e64756d436f756e74602069662074686572652069736e2774206120756e62616b6564207265666572656e64756d2e20546865206e6578742066726565207265666572656e64756d20696e6465782c20616b6120746865206e756d626572206f66207265666572656e6461207374617274656420736f206661722e204d6170206f662068617368657320746f207468652070726f706f73616c20707265696d6167652c20616c6f6e6720776974682077686f207265676973746572656420697420616e64207468656972206465706f7369742e2054686520626c6f636b206e756d6265722069732074686520626c6f636b20617420776869636820697420776173206465706f73697465642e2054686f73652077686f2068617665206c6f636b65642061206465706f7369742e2054574f582d4e4f54453a20536166652c20617320696e6372656173696e6720696e7465676572206b6579732061726520736166652e20546865207075626c69632070726f706f73616c732e20556e736f727465642e20546865207365636f6e64206974656d206973207468652070726f706f73616c277320686173682e20546865206e756d626572206f6620287075626c6963292070726f706f73616c7320746861742068617665206265656e206d61646520736f206661722e00000000000074c712000f00000000000000a9f912000e000000000000005431130084c71200000000000000000094c71200050000000000000000000000bcc712000c00000000000000a9f912000e0000000000000054311300c8c712000000000000000000d8c71200010000000000000000000000e0c712000c00000000000000a9f912000e0000000000000054311300ecc712000000000000000000fcc7120001000000000000000000000004c812000e0000000000000057a912000c000000000000005431130014c81200000000000000000024c812000100000000000000000000002cc812001500000000000000a9f912000e000000000000005431130044c81200000000000000000054c812000100000000000000000000005cc812000d00000000000000a9f912000e00000000000000543113006cc8120000000000000000007cc8120001000000000000000000000084c81200130000000000000057a912000c000000000000005431130098c812000000000000000000a8c81200010000000000000000000000b0c812000800000000000000cbed1200030000000000000054311300b8c812000000000000000000c8c812000100000000000000456e6163746d656e74506572696f6400120000000000000001000000050100008dca12005c0000005431130000000000e9ca12004c00000035cb12005a0000008fcb1200270000004c61756e6368506572696f641200000000000000010000000501000054ca120039000000566f74696e67506572696f641200000000000000010000000501000026ca12002e0000004d696e696d756d4465706f736974000012000000000000000100000045000000d9c912004d00000046617374547261636b566f74696e67506572696f64000000120000000000000001000000060100009ec912003b000000436f6f6c6f6666506572696f640000001200000000000000010000004a00000046c9120058000000507265696d616765427974654465706f7369740012000000000000000100000025000000fcc812004a0000004d6178566f74657312000000000000000100000052000000d0c812002c00000020546865206d6178696d756d206e756d626572206f6620766f74657320666f7220616e206163636f756e742e2054686520616d6f756e74206f662062616c616e63652074686174206d757374206265206465706f7369746564207065722062797465206f6620707265696d6167652073746f7265642e20506572696f6420696e20626c6f636b7320776865726520616e2065787465726e616c2070726f706f73616c206d6179206e6f742062652072652d7375626d6974746564206166746572206265696e67207665746f65642e204d696e696d756d20766f74696e6720706572696f6420616c6c6f77656420666f7220616e20656d657267656e6379207265666572656e64756d2e20546865206d696e696d756d20616d6f756e7420746f20626520757365642061732061206465706f73697420666f722061207075626c6963207265666572656e64756d2070726f706f73616c2e20486f77206f6674656e2028696e20626c6f636b732920746f20636865636b20666f72206e657720766f7465732e20486f77206f6674656e2028696e20626c6f636b7329206e6577207075626c6963207265666572656e646120617265206c61756e636865642e20546865206d696e696d756d20706572696f64206f66206c6f636b696e6720616e642074686520706572696f64206265747765656e20612070726f706f73616c206265696e6720617070726f76656420616e6420656e61637465642e2049742073686f756c642067656e6572616c6c792062652061206c6974746c65206d6f7265207468616e2074686520756e7374616b6520706572696f6420746f20656e73757265207468617420766f74696e67207374616b657273206861766520616e206f70706f7274756e69747920746f2072656d6f7665207468656d73656c7665732066726f6d207468652073797374656d20696e207468652063617365207768657265207468657920617265206f6e20746865206c6f73696e672073696465206f66206120766f74652e000000000000d0ce12000800000000000000d8ce1200020000000000000000000000e8ce1200010000000000000000000000f0ce12000600000000000000f8ce120003000000000000000000000010cf120001000000000000000000000018cf12000e000000000000005431130000000000000000000000000028cf120001000000000000000000000030cf1200070000000000000038cf120002000000000000000000000048cf120001000000000000000000000050cf1200060000000000000058cf120001000000000000000000000060cf120001000000000000000000000068cf1200090000000000000058cf120001000000000000000000000074cf12000100000000000000000000007ccf1200090000000000000058cf120001000000000000000000000088cf120001000000000000000000000090cf1200080000000000000098cf1200020000000000000000000000a8cf1200010000000000000000000000b0cf12000900000000000000bccf1200020000000000000000000000cccf1200010000000000000000000000d4cf12000b00000000000000fce41200010000000000000000000000e0cf1200010000000000000000000000e8cf12000600000000000000f0cf120003000000000000000000000008d0120001000000000000000000000010d012000d0000000000000020d0120003000000000000000000000038d0120001000000000000000000000040d012000c0000000000000020d012000300000000000000000000004cd01200020000000000000000000000748212000f000000000000005cd012000200000000000000000000006cd01200020000000000000000000000948212000f000000000000005cd012000200000000000000000000007cd012000200000000000000000000008cd012000e000000000000009cd01200040000000000000000000000bcd01200020000000000000000000000ccd012000800000000000000fce41200010000000000000000000000d4d01200010000000000000000000000dcd012000b00000000000000e8d01200010000000000000000000000f0d01200010000000000000050726f706f73656443bb120009000000d5d1120007000000bcd512004c0000005461626c6564000043bb120009000000d5d1120007000000aed512000e0000004fd512005f00000045787465726e616c5461626c6564000029d51200260000005374617274656400bf9712000f0000001cd512000d000000ebd41200310000005061737365640000bf9712000f000000b1d412003a0000004e6f7450617373656400000077d412003a00000043616e63656c6c656400000048d412002f0000004578656375746564bf9712000f000000a1fb12000400000016d412003200000044656c65676174656400000079e512000900000079e5120009000000ced3120048000000556e64656c6567617465640090d312003e0000005665746f6564000079e512000900000082e512000400000085d312000b00000041d3120044000000507265696d6167654e6f74656400000082e512000400000079e5120009000000d5d1120007000000e9d2120058000000507265696d616765557365647fd2120045000000c4d212002500000082e5120004000000bf9712000f0000003cd21200430000001fd212001d000000dcd11200430000001fd212001d000000507265696d616765526561706564000082e512000400000079e5120009000000d5d112000700000079e51200090000005dd112004b000000a8d112002d000000556e6c6f636b65642ed112002f000000426c61636b6c69737465640082e5120004000000f8d012003600000020412070726f706f73616c205c5b686173685c5d20686173206265656e20626c61636b6c6973746564207065726d616e656e746c792e20416e205c5b6163636f756e745c5d20686173206265656e20756e6c6f636b6564207375636365737366756c6c792e2041207265676973746572656420707265696d616765207761732072656d6f76656420616e6420746865206465706f73697420636f6c6c656374656420627920746865207265617065722e205c5b70726f706f73616c5f686173682c2070726f76696465722c206465706f7369742c207265617065725c5d42616c616e636520412070726f706f73616c20636f756c64206e6f7420626520657865637574656420626563617573652069747320707265696d61676520776173206d697373696e672e205c5b70726f706f73616c5f686173682c207265665f696e6465785c5d20412070726f706f73616c20636f756c64206e6f7420626520657865637574656420626563617573652069747320707265696d6167652077617320696e76616c69642e20412070726f706f73616c20707265696d616765207761732072656d6f76656420616e6420757365642028746865206465706f736974207761732072657475726e6564292e205c5b70726f706f73616c5f686173682c2070726f76696465722c206465706f7369745c5d20412070726f706f73616c277320707265696d61676520776173206e6f7465642c20616e6420746865206465706f7369742074616b656e2e205c5b70726f706f73616c5f686173682c2077686f2c206465706f7369745c5d20416e2065787465726e616c2070726f706f73616c20686173206265656e207665746f65642e205c5b77686f2c2070726f706f73616c5f686173682c20756e74696c5c5d426c6f636b4e756d62657220416e205c5b6163636f756e745c5d206861732063616e63656c6c656420612070726576696f75732064656c65676174696f6e206f7065726174696f6e2e20416e206163636f756e74206861732064656c65676174656420746865697220766f746520746f20616e6f74686572206163636f756e742e205c5b77686f2c207461726765745c5d20412070726f706f73616c20686173206265656e20656e61637465642e205c5b7265665f696e6465782c2069735f6f6b5c5d2041207265666572656e64756d20686173206265656e2063616e63656c6c65642e205c5b7265665f696e6465785c5d20412070726f706f73616c20686173206265656e2072656a6563746564206279207265666572656e64756d2e205c5b7265665f696e6465785c5d20412070726f706f73616c20686173206265656e20617070726f766564206279207265666572656e64756d2e205c5b7265665f696e6465785c5d2041207265666572656e64756d2068617320626567756e2e205c5b7265665f696e6465782c207468726573686f6c645c5d566f74655468726573686f6c6420416e2065787465726e616c2070726f706f73616c20686173206265656e207461626c65642e2041207075626c69632070726f706f73616c20686173206265656e207461626c656420666f72207265666572656e64756d20766f74652e205c5b70726f706f73616c5f696e6465782c206465706f7369742c206465706f7369746f72735c5d5665633c4163636f756e7449643e2041206d6f74696f6e20686173206265656e2070726f706f7365642062792061207075626c6963206163636f756e742e205c5b70726f706f73616c5f696e6465782c206465706f7369745c5d4661696c656420746f2067656e657261746520686973746f726963616c20616e6365737472792d696e636c7573696f6e2070726f6f662e004c141300570000001b02000001000000496e73657274696f6e206e657665722064656c657465732e2481120054000000640200000d000000617373657274696f6e206661696c65643a20216578697374696e675f6b65792e69735f656d70747928290000248112005400000080030000150000000000000058831200080000000000000088da1200010000000000000000000000498312000f0000000000000090da120001000000000000000000000041831200080000000000000098da1200010000000000000000000000328312000f00000000000000a0da1200010000000000000000000000218312001100000000000000a8da12000100000000000000000000000e8312001300000000000000b0da1200010000000000000000000000fd8212001100000000000000b8da1200010000000000000000000000f28212000b00000000000000c0da1200010000000000000000000000e88212000a00000000000000c8da1200010000000000000000000000db8212000d00000000000000d0da1200010000000000000000000000cf8212000c00000000000000d8da1200010000000000000000000000be8212001100000000000000e0da1200010000000000000000000000b38212000b00000000000000e8da1200010000000000000000000000ab8212000800000000000000f0da1200010000000000000000000000a38212000800000000000000f8da1200010000000000000000000000948212000f0000000000000000db120001000000000000000000000083821200110000000000000008db1200010000000000000000000000748212000f0000000000000010db1200010000000000000000000000698212000b0000000000000018db120001000000000000000000000060821200090000000000000020db1200010000000000000000000000568212000a0000000000000028db12000100000000000000000000004e821200080000000000000030db1200010000000000000000000000428212000c0000000000000038db120001000000000000000000000031821200110000000000000040db120001000000000000000000000029821200080000000000000048db120001000000000000000000000020821200090000000000000050db12000100000000000000000000000f821200110000000000000058db1200010000000000000000000000028212000d0000000000000060db1200010000000000000000000000f88112000a0000000000000068db1200020000000000000000000000e7811200110000000000000078db1200010000000000000000000000df811200080000000000000080db1200010000000000000000000000d08112000f0000000000000088db1200010000000000000000000000c18112000f0000000000000090db1200010000000000000000000000b38112000e0000000000000098db1200010000000000000000000000608312001000000000000000a0db120001000000000000004fe012000e00000037e012001800000029e012000e00000003e0120026000000eddf120016000000d2df12001b000000a7df12002b0000009adf12000d00000085df1200150000005edf12002700000050df12000e00000039df1200170000002cdf12000d00000022df12000a00000019df12000900000006df120013000000e4de120022000000d3de120011000000bede12001500000095de12002900000059de12003c00000027de120032000000f4dd120033000000d1dd120023000000a8dd1200290000007edd12002a0000003edd12004000000015dd12002900000084dc120056000000dadc12003b0000004ddc12003700000027dc12002600000012dc120015000000f1db120021000000cddb120024000000a8db120025000000204d6178696d756d206e756d626572206f662070726f706f73616c7320726561636865642e205468652070726f7669646564207769746e65737320646174612069732077726f6e672e204d6178696d756d206e756d626572206f6620766f74657320726561636865642e20496e76616c696420757070657220626f756e642e2044656c65676174696f6e20746f206f6e6573656c66206d616b6573206e6f2073656e73652e2054686520696e7374616e74207265666572656e64756d206f726967696e2069732063757272656e746c7920646973616c6c6f7765642e20546865206163636f756e742063757272656e746c792068617320766f74657320617474616368656420746f20697420616e6420746865206f7065726174696f6e2063616e6e6f74207375636365656420756e74696c207468657365206172652072656d6f7665642c20656974686572207468726f7567682060756e766f746560206f722060726561705f766f7465602e20546865206163636f756e74206973206e6f742063757272656e746c792064656c65676174696e672e20546f6f206869676820612062616c616e6365207761732070726f7669646564207468617420746865206163636f756e742063616e6e6f74206166666f72642e20416e20756e657870656374656420696e746567657220756e646572666c6f77206f636375727265642e20416e20756e657870656374656420696e7465676572206f766572666c6f77206f636375727265642e20546865206163636f756e7420697320616c72656164792064656c65676174696e672e20546865206163746f7220686173206e6f207065726d697373696f6e20746f20636f6e647563742074686520616374696f6e2e2054686520676976656e206163636f756e7420646964206e6f7420766f7465206f6e20746865207265666572656e64756d2e20546865206c6f636b206f6e20746865206163636f756e7420746f20626520756e6c6f636b656420686173206e6f742079657420657870697265642e2054686520746172676574206163636f756e7420646f6573206e6f7420686176652061206c6f636b2e204e6f2070726f706f73616c732077616974696e6720496e76616c696420707265696d61676520566f746520676976656e20666f7220696e76616c6964207265666572656e64756d20507265696d616765206e6f7420666f756e6420496d6d696e656e7420546f6f206561726c79204e6f7420696d6d696e656e7420507265696d61676520616c7265616479206e6f746564204e6f742064656c656761746564204964656e74697479206d6179206e6f74207665746f20612070726f706f73616c207477696365204e6f2065787465726e616c2070726f706f73616c20496e76616c69642068617368204e6578742065787465726e616c2070726f706f73616c206e6f742073696d706c65206d616a6f726974792050726f706f73616c207374696c6c20626c61636b6c69737465642050726f706f73616c20616c7265616479206d6164652043616e6e6f742063616e63656c207468652073616d652070726f706f73616c20747769636520556e6b6e6f776e20696e6465782050726f706f73616c20646f6573206e6f742065786973742056616c756520746f6f206c6f77000000120000000100000001000000070100004c14130057000000e70400002d0000004c14130057000000e8040000300000004661696c656420746f206465636f64652060507265696d616765537461747573602076617269616e740000004c14130057000000170500002d0000004c141300570000001e050000400000003a6865617070616765735370656356657273696f6e4e65656473546f496e637265617365496e76616c6964537065634e616d654661696c6564546f4578747261637452756e74696d6556657273696f6e3a636f64653a6368616e6765735f747269652f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f73797374656d2f7372632f6c69622e727300008ee212002300000064e212002a0000000ce21200580000006f00000001000000496e7374616e6365314d656d626572736869704d656d62657273416c72656164794d656d6265725072696d654e6f744d656d6265720000000ce2120058000000a70000000d0000000ce2120058000000d6000000110000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f6d656d626572736869702f7372632f6c69622e7273696e7465726e616c206572726f723a20656e746572656420756e726561636861626c6520636f64653a205f5f5068616e746f6d4974656d2073686f756c64206e6576657220626520757365642e6d6f646c70792f7574696c6973756261000000d4e2120052000000af000000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f746970732f7372632f6c69622e72732f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f62616c616e6365732f7372632f6c69622e72733a65787472696e7369635f696e6465780000000094e412001000000000000000a4e41200010000000000000000000000ace41200010000000000000000000000b4e412000f00000000000000c4e41200020000000000000000000000d4e41200010000000000000000000000dce412000b0000000000000054311300000000000000000000000000e8e41200010000000000000000000000f0e412000a00000000000000fce4120001000000000000000000000004e512000100000000000000000000000ce512000d00000000000000fce412000100000000000000000000001ce5120001000000000000000000000024e5120008000000000000002ce512000200000000000000000000003ce51200010000000000000045787472696e73696353756363657373fae512000c00000006e612002e00000045787472696e7369634661696c656400113513000d000000fae512000c000000d5e5120025000000436f64655570646174656400c0e51200150000004e65774163636f756e74000079e5120009000000a1e512001f0000004b696c6c65644163636f756e7400000086e512001b00000052656d61726b656479e512000900000082e512000400000044e5120035000000204f6e206f6e2d636861696e2072656d61726b2068617070656e65642e205c5b6f726967696e2c2072656d61726b5f686173685c5d4163636f756e7449644861736820416e205c5b6163636f756e745c5d20776173207265617065642e2041206e6577205c5b6163636f756e745c5d2077617320637265617465642e20603a636f6465602077617320757064617465642e20416e2065787472696e736963206661696c65642e205c5b6572726f722c20696e666f5c5d4469737061746368496e666f20416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e205c5b696e666f5c5d00000000ece712000a00000000000000f8e7120001000000000000000000000010e8120001000000000000000000000018e81200060000000000000020e8120001000000000000000000000038e8120005000000000000000000000060e812000e0000000000000070e8120001000000000000000000000088e81200080000000000000000000000c8e812000800000000000000d0e81200010000000000000000000000e8e812000a000000000000000000000038e912001700000000000000d0e8120001000000000000000000000050e9120008000000000000000000000090e912001700000000000000a8e91200010000000000000000000000c0e912000a000000000000000000000010ea12000b000000000000001cea120001000000000000000000000034ea120008000000000000000000000074ea12000c0000000000000080ea120001000000000000000000000098ea1200080000000000000000000000d8ea12000b00000000000000e4ea120002000000000000000000000014eb12000b00000000000000000000006ceb1200110000000000000080eb120001000000000000000000000098eb1200060000000000000066696c6c5f626c6f636b0000000000004ff31200060000000000000055f31200070000000df312004200000072656d61726b00000000000006f31200070000000000000042ec120007000000ebf212001b0000005431130000000000f2eb12000b0000003cef12000900000036ec12000c0000007365745f686561705f7061676573000000000000e3f212000500000000000000e8f212000300000060f212003f0000005431130000000000f2eb12000b0000003cef1200090000009ff2120013000000b2f2120019000000cbf212001800000036ec12000c0000007365745f636f6465000000005cf21200040000000000000042ec12000700000014f112001a0000005431130000000000f2eb12000b0000002ef112004d00000095f01200220000007bf112005e0000002bec12000b000000d9f112005f00000038f212002400000036ec12000c0000007365745f636f64655f776974686f75745f636865636b73002af01200470000005431130000000000f2eb12000b00000071f012002400000095f01200220000002bec12000b000000b7f012005d00000036ec12000c0000007365745f6368616e6765735f747269655f636f6e6669670000000000f7ef120013000000000000000af012002000000014ef1200280000005431130000000000f2eb12000b0000003cef12000900000045ef12002c00000071ef120036000000a7ef120019000000c0ef12000d000000cdef12002a00000036ec12000c0000007365745f73746f72616765000000000002ef1200050000000000000007ef12000d00000086ee12001b0000005431130000000000f2eb12000b000000a1ee120025000000c6ee12001f000000e5ee12001d00000060ee12001a00000036ec12000c0000006b696c6c5f73746f72616765000000007aee120004000000000000007eee120008000000ceed12001e0000005431130000000000f2eb12000b000000eced12003f0000002bee12001900000044ee12001c00000060ee12001a00000036ec12000c0000006b696c6c5f7072656669780000000000baed12000600000000000000c0ed12000300000000000000c3ed12000800000000000000cbed12000300000049ec12004500000054311300000000008eec12004f000000ddec1200500000005431130000000000f2eb12000b0000002ded12003700000064ed1200190000007ded12001d0000009aed12002000000036ec12000c00000072656d61726b5f776974685f6576656e740000000000000018e81200060000000000000042ec120007000000c8eb12002a0000005431130000000000f2eb12000b000000fdeb12002e0000002bec12000b00000036ec12000c000000204d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e2023203c7765696768743e202d20604f28622960207768657265206220697320746865206c656e677468206f66207468652072656d61726b2e202d2031206576656e742e2023203c2f7765696768743e5665633c75383e204b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e202a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465722074686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e202d20604f285029602077686572652060506020616d6f756e74206f66206b657973207769746820707265666978206070726566697860202d206050602073746f726167652064656c6574696f6e732e202d2042617365205765696768743a20302e383334202a205020c2b573202d205772697465733a204e756d626572206f66207375626b657973202b20317072656669784b65795f7375626b657973753332204b696c6c20736f6d65206974656d732066726f6d2073746f726167652e202d20604f28494b296020776865726520604960206c656e677468206f6620606b6579736020616e6420604b60206c656e677468206f66206f6e65206b6579202d206049602073746f726167652064656c6574696f6e732e202d2042617365205765696768743a202e333738202a206920c2b573202d205772697465733a204e756d626572206f66206974656d736b6579735665633c4b65793e2053657420736f6d65206974656d73206f662073746f726167652e202d20604f2849296020776865726520604960206c656e677468206f6620606974656d7360202d206049602073746f72616765207772697465732028604f28312960292e202d2042617365205765696768743a20302e353638202a206920c2b5736974656d735665633c4b657956616c75653e2053657420746865206e6577206368616e676573207472696520636f6e66696775726174696f6e2e202d20604f28312960202d20312073746f72616765207772697465206f722064656c6574652028636f64656320604f28312960292e202d20312063616c6c20746f20606465706f7369745f6c6f67603a20557365732060617070656e6460204150492c20736f204f283129202d2042617365205765696768743a20372e32313820c2b573202d204442205765696768743a20202020202d205772697465733a204368616e67657320547269652c2053797374656d204469676573746368616e6765735f747269655f636f6e6669674f7074696f6e3c4368616e67657354726965436f6e66696775726174696f6e3e2053657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e202d20604f2843296020776865726520604360206c656e677468206f662060636f646560202d20312073746f726167652077726974652028636f64656320604f28432960292e2054686520776569676874206f6620746869732066756e6374696f6e20697320646570656e64656e74206f6e207468652072756e74696d652e2057652077696c6c207472656174207468697320617320612066756c6c20626c6f636b2e2053657420746865206e65772072756e74696d6520636f64652e202d20604f2843202b2053296020776865726520604360206c656e677468206f662060636f64656020616e642060536020636f6d706c6578697479206f66206063616e5f7365745f636f646560202d20312063616c6c20746f206063616e5f7365745f636f6465603a20604f28532960202863616c6c73206073705f696f3a3a6d6973633a3a72756e74696d655f76657273696f6e6020776869636820697320657870656e73697665292e2054686520776569676874206f6620746869732066756e6374696f6e20697320646570656e64656e74206f6e207468652072756e74696d652c206275742067656e6572616c6c792074686973206973207665727920657870656e736976652e2057652077696c6c207472656174207468697320617320612066756c6c20626c6f636b2e636f64652053657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e202d20312073746f726167652077726974652e202d2042617365205765696768743a20312e34303520c2b573202d203120777269746520746f20484541505f50414745537061676573753634204d616b6520736f6d65206f6e2d636861696e2072656d61726b2e5f72656d61726b204120646973706174636820746861742077696c6c2066696c6c2074686520626c6f636b2077656967687420757020746f2074686520676976656e20726174696f2e5f726174696f50657262696c6c00000000dcf81200070000000102000000000000e3f812000c00000000000000eff8120025000000000000000000000000000000000000005431130014f91200000000000000000024f91200010000000000000001000000000000002cf912000e0000000000000000000000cbed12000300000000000000000000000000000000000000000000000000000000000000543113003cf9120000000000000000004cf912000100000000000000000000000000000054f912000b00000000000000000000005ff912000e000000000000000000000000000000000000000000000000000000000000005431130070f91200000000000000000080f912000100000000000000010000000000000088f91200100000000000000000000000cbed12000300000000000000000000000000000000000000000000000000000000000000543113003cf91200000000000000000098f9120001000000000000000000000000000000a0f91200090000000105000000000000a9f912000e00000000000000b7f91200070000000000000000000000000000000000000054311300c0f912000000000000000000d0f9120001000000000000000100000000000000d8f912000d0000000105000000000000cbed1200030000000000000042ec1200070000000000000000000000000000000000000054311300e8f912000000000000000000f8f912000100000000000000010000000000000000fa1200060000000000000000000000a9f912000e000000000000000000000000000000000000000000000000000000000000005431130008fa1200000000000000000018fa12000100000000000000010000000000000020fa12000a0000000000000000000000b7f91200070000000000000000000000000000000000000000000000000000000000000054311300c0f9120000000000000000002cfa12000100000000000000010000000000000034fa12000600000000000000000000003afa12000b000000000000000000000000000000000000000000000000000000000000005431130048fa1200000000000000000058fa12000100000000000000010000000000000060fa120006000000000000000000000066fa12002300000000000000000000000000000000000000000000000000000000000000543113008cfa120000000000000000009cfa120001000000000000000100000000000000a4fa12000a0000000000000000000000aefa12000a000000000000000000000000000000000000000000000000000000000000005431130008fa12000000000000000000b8fa120001000000000000000100000000000000c0fa12000b0000000102000000000000b7f912000700000000000000cbfa1200210000000000000000000000000000000000000054311300ecfa12000000000000000000fcfa12000a0000000000000001000000000000004cfb12001200000000000000000000005efb120016000000000000000000000000000000000000000000000000000000000000005431130074fb1200000000000000000084fb1200010000000000000000000000000000008cfb1200150000000000000000000000a1fb1200040000000000000000000000000000000000000000000000000000000000000054311300a8fb12000000000000000000b8fb120001000000000000000100000000000000c0fb1200180000000000000000000000a1fb1200040000000000000000000000000000000000000000000000000000000000000054311300a8fb12000000000000000000d8fb120002000000000000000100000000000000e8fb12000e0000000000000000000000f6fb1200050000000000000000000000000000000000000000000000000000000000000054311300fcfb120000000000000000000cfc12000100000000000000000000004163636f756e74543a3a4163636f756e7449644163636f756e74496e666f3c543a3a496e6465782c20543a3a4163636f756e74446174613e120000000000000001000000080100007e0113003a00000045787472696e736963436f756e74000012000000000000000100000023000000500113002e000000426c6f636b576569676874436f6e73756d6564576569676874000000120000000000000001000000090100002e01130022000000416c6c45787472696e736963734c656ede00130050000000426c6f636b48617368543a3a426c6f636b4e756d626572543a3a4861736800001200000000000000010000000a010000b80013002600000045787472696e7369634461746100000012000000000000000100000063000000690013004f0000004e756d6265720000120000000000000001000000220000002700130042000000506172656e744861736800000b0013001c0000004469676573744469676573744f663c543e0000001200000000000000010000003f000000cfff12003c0000004576656e74735665633c4576656e745265636f72643c543a3a4576656e742c20543a3a486173683e3e0000001200000000000000010000003f000000a7ff1200280000004576656e74436f756e744576656e74496e64657879ff12002e0000004576656e74546f706963735665633c28543a3a426c6f636b4e756d6265722c204576656e74496e646578293e1200000000000000010000006c00000047fd12004900000090fd1200250000005431130000000000b5fd12005400000009fe1200510000005afe120039000000543113000000000093fe120053000000e6fe12005300000039ff1200400000004c61737452756e74696d65557067726164654c61737452756e74696d6555706772616465496e666f12000000000000000100000023000000f2fc1200550000005570677261646564546f553332526566436f756e74626f6f6c000000120000000000000001000000230000009ffc1200530000005570677261646564546f547269706c65526566436f756e7436fc1200570000008dfc120012000000457865637574696f6e50686173655068617365001200000000000000010000002300000014fc1200220000002054686520657865637574696f6e207068617365206f662074686520626c6f636b2e2054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c7365202864656661756c7429206966206e6f742e2054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e2053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e6465786573206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e20416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e205468697320616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e6420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573742074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e20546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e20446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e2048617368206f66207468652070726576696f757320626c6f636b2e205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e2045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e20546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e205468652063757272656e742077656967687420666f722074686520626c6f636b2e20546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e00000000080313000c000000000000001403130014000000000000005431130028031300000000000000000038031300010000000000000000000000400313000b000000000000004b03130013000000000000005431130060031300000000000000000070031300010000000000000000000000780313000e00000000000000a9f912000e000000000000005431130088031300000000000000000098031300010000000000000000000000a00313000800000000000000a80313000f0000000000000054311300b80313000000000000000000c8031300010000000000000000000000d00313000700000000000000d70313000e0000000000000054311300e80313000000000000000000f8031300010000000000000000000000000413000a000000000000000a0413000200000000000000543113000c04130000000000000000001c0413000500000000000000426c6f636b576569676874736c696d6974733a3a426c6f636b576569676874731200000000000000010000000b0100000606130034000000426c6f636b4c656e6774686c696d6974733a3a426c6f636b4c656e67746800001200000000000000010000000c010000dc0513002a000000426c6f636b48617368436f756e7400001200000000000000010000000d0100008705130055000000446257656967687452756e74696d654462576569676874001200000000000000010000000e010000450513004200000056657273696f6e52756e74696d6556657273696f6e0000001200000000000000010000000f010000240513002100000053533538507265666978753812000000000000000100000023000000440413002a00000054311300000000006e0413004e000000bc0413004c000000080513001c000000205468652064657369676e61746564205353383520707265666978206f66207468697320636861696e2e2054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e2069732074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f6620697420617320616e206964656e746966696572206f662074686520636861696e2e204765742074686520636861696e27732063757272656e742076657273696f6e2e2054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e20546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e20426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e00004c0613005300000015020000100000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f70726f78792f7372632f6c69622e72733a5f5f50414c4c45545f56455253494f4e5f5f3a00c406130055000000be000000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f6772616e6470612f7372632f6c69622e72730000002c071300550000005a000000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f696e64696365732f7372632f6c69622e72730000009407130055000000ec010000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f73657373696f6e2f7372632f6c69622e7273000000fc0713005500000066040000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f7374616b696e672f7372632f6c69622e727300000000000000d80813000500000000000000e0081300010000000000000000000000f8081300120000000000000000000000880913000d0000000000000098091300020000000000000000000000c80913000d0000000000000000000000300a13000900000000000000e00813000100000000000000000000003c0a13000d000000000000006261746368000000000000004510130005000000000000004a10130018000000c40e1300200000005431130000000000290b13001f0000005431130000000000480b13003c0000005431130000000000840b130058000000dc0b1300330000005431130000000000f2eb12000b0000000f0c13004100000036ec12000c0000005431130000000000e40e1300560000003a0f13004d000000870f130056000000dd0f130054000000311013001400000061735f6465726976617469766500000000000000a00e13000500000000000000a50e13000300000000000000a80e13000400000000000000ac0e130018000000500c1300380000005431130000000000880c130056000000de0c13003000000054311300000000000e0d130052000000600d130059000000b90d1300550000000e0e13002000000054311300000000002e0e13003e00000054311300000000006c0e13003400000062617463685f616c6c000000a40a13003c000000e00a1300490000005431130000000000290b13001f0000005431130000000000480b13003c0000005431130000000000840b130058000000dc0b1300330000005431130000000000f2eb12000b0000000f0c13004100000036ec12000c0000002053656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e205468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e204d61792062652063616c6c65642066726f6d20616e79206f726967696e2e202d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e204966206f726967696e20697320726f6f74207468656e2063616c6c2061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e20285468697320696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e202d20436f6d706c65786974793a204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2053656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e2046696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e20776869636820757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e204e4f54453a20496620796f75206e65656420746f20656e73757265207468617420616e79206163636f756e742d62617365642066696c746572696e67206973206e6f7420686f6e6f7265642028692e652e206265636175736520796f7520657870656374206070726f78796020746f2068617665206265656e2075736564207072696f7220696e207468652063616c6c20737461636b20616e6420796f7520646f206e6f742077616e74207468652063616c6c207265737472696374696f6e7320746f206170706c7920746f20616e79207375622d6163636f756e7473292c207468656e20757365206061735f6d756c74695f7468726573686f6c645f316020696e20746865204d756c74697369672070616c6c657420696e73746561642e204e4f54453a205072696f7220746f2076657273696f6e202a31322c2074686973207761732063616c6c6564206061735f6c696d697465645f737562602e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e696e64657875313663616c6c426f783c3c5420617320436f6e6669673e3a3a43616c6c3e2053656e642061206261746368206f662064697370617463682063616c6c732e20546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e206576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e2074686520604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d61646520616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c6574656460206576656e74206973206465706f73697465642e63616c6c735665633c3c5420617320436f6e6669673e3a3a43616c6c3e696e7465726e616c206572726f723a20656e746572656420756e726561636861626c6520636f6465506172656e7420686173682073686f756c642062652076616c69642e0000b4111300570000003501000009000000b4111300570000005d0100000d0000005369676e617475726520766572696669636174696f6e206661696c65642e0000b4111300570000004e010000110000001f12130032000000b411130057000000b901000009000000446967657374206974656d206d757374206d6174636820746861742063616c63756c617465642e00b411130057000000c10100000d00000053746f7261676520726f6f74206d757374206d6174636820746861742063616c63756c617465642eb411130057000000c7010000090000005472616e73616374696f6e207472696520726f6f74206d7573742062652076616c69642eb411130057000000c9010000090000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f6578656375746976652f7372632f6c69622e72734469676573744974656d206e6f7420657175616c4e756d626572206f6620646967657374206974656d73206d757374206d6174636820746861742063616c63756c617465642e4e6f646520697320636f6e6669677572656420746f20757365207468652073616d6520686173683b20716564000000120000000000000001000000100100003ee1120054000000430500000e0000003ee11200540000004b05000016000000c012130056000000ea000000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f626f756e746965732f7372632f6c69622e727300002813130056000000c9010000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f6964656e746974792f7372632f6c69622e72730000901313005600000088000000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f6d756c74697369672f7372632f6c69622e72732f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f74726561737572792f7372632f6c69622e72734c14130057000000cf010000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f64656d6f63726163792f7372632f6c69622e727300b414130058000000a5000000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f617574686f72736869702f7372632f6c69622e72731c15130058000000f1000000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f636f6c6c6563746976652f7372632f6c69622e727300000000a81613000a00000000000000b4161300010000000000000000000000cc161300030000000000000000000000e41613000d00000000000000b4161300010000000000000000000000f41613000300000000000000000000000c1713000b000000000000001817130002000000000000000000000048171300050000000000000000000000701713000d000000000000008017130001000000000000000000000098171300040000000000000000000000b81713000a00000000000000c4171300010000000000000000000000dc171300050000000000000000000000041813000900000000000000b416130001000000000000000000000010181300030000000000000000000000281813000b00000000000000543113000000000000000000000000003418130003000000000000006164645f6d656d626572000000000000791b13000300000000000000e3f812000c000000321b13001f0000005431130000000000511b13002800000072656d6f76655f6d656d626572000000e31a1300240000005431130000000000071b13002b000000737761705f6d656d6265720000000000da1a13000600000000000000e3f812000c00000000000000e01a13000300000000000000e3f812000c0000003d1a13003000000054311300000000006d1a1300290000005431130000000000961a13004400000072657365745f6d656d6265727300000000000000251a130007000000000000002c1a1300110000008a19130056000000e01913001b0000005431130000000000fb1913002a0000006368616e67655f6b6579000000000000871913000300000000000000e3f812000c000000cc181300360000005431130000000000021913003d00000054311300000000003f191300480000007365745f7072696d650000009c181300300000005431130000000000721813002a000000636c6561725f7072696d65004c181300260000005431130000000000721813002a0000002052656d6f766520746865207072696d65206d656d626572206966206974206578697374732e204d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e2053657420746865207072696d65206d656d6265722e204d75737420626520612063757272656e74206d656d6265722e2053776170206f7574207468652073656e64696e67206d656d62657220666f7220736f6d65206f74686572206b657920606e6577602e204d6179206f6e6c792062652063616c6c65642066726f6d20605369676e656460206f726967696e206f6620612063757272656e74206d656d6265722e205072696d65206d656d62657273686970206973207061737365642066726f6d20746865206f726967696e206163636f756e7420746f20606e6577602c20696620657874616e742e6e6577204368616e676520746865206d656d6265727368697020746f2061206e6577207365742c20646973726567617264696e6720746865206578697374696e67206d656d626572736869702e204265206e69636520616e64207061737320606d656d6265727360207072652d736f727465642e204d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52657365744f726967696e602e6d656d626572735665633c543a3a4163636f756e7449643e2053776170206f7574206f6e65206d656d626572206072656d6f76656020666f7220616e6f746865722060616464602e204d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a537761704f726967696e602e205072696d65206d656d62657273686970206973202a6e6f742a207061737365642066726f6d206072656d6f76656020746f2060616464602c20696620657874616e742e72656d6f76656164642052656d6f76652061206d656d626572206077686f602066726f6d20746865207365742e204d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656d6f76654f726967696e602e204164642061206d656d626572206077686f6020746f20746865207365742e204d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a4164644f726967696e602e77686f00000000c7e112000700000000000000000000002c1a13001100000000000000000000000000000000000000000000000000000000000000543113002c1c130000000000000000003c1c130001000000000000000100000000000000dbe11200050000000000000000000000e3f812000c0000000000000000000000000000000000000000000000000000000000000054311300441c13000000000000000000541c13000100000000000000000000001200000000000000010000003f000000851c130032000000120000000000000001000000230000005c1c130029000000205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e0000000000c01d13000b0000000000000054311300000000000000000000000000cc1d1300010000000000000000000000d41d13000d0000000000000054311300000000000000000000000000e41d1300010000000000000000000000ec1d13000e0000000000000054311300000000000000000000000000fc1d1300010000000000000000000000041e13000c0000000000000054311300000000000000000000000000101e1300010000000000000000000000181e13000a0000000000000054311300000000000000000000000000241e13000100000000000000000000002c1e13000500000000000000341e13000100000000000000000000003c1e130001000000000000004d656d626572416464656400691f1300390000004d656d62657252656d6f7665640000002e1f13003b0000004d656d62657273537761707065640000f71e1300370000004d656d626572735265736574b11e1300460000004b65794368616e67656400008f1e13002200000044756d6d79000000601e13002f000000441e13001c000000205068616e746f6d206d656d6265722c206e6576657220757365642e73705f7374643a3a6d61726b65723a3a5068616e746f6d446174613c284163636f756e7449642c204576656e74293e204f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e20546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e2054776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e2054686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e2054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e0000120000000000000001000000210000002c201300620000006800000010000000e41f1300480000003a0400000f000000e41f1300480000003a040000220000002f72757374632f653337613133636333353934303034363633373338626431386438313030653664623936363663662f6c6962726172792f636f72652f7372632f63656c6c2e72732f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f6e706f732d656c656374696f6e732f7372632f6e6f64652e727300001200000000000000010000005f0000002c20130062000000700000000d0000002c20130062000000750000000d0000002c20130062000000890000003b000000e020130023000000a0000000010000002f6275696c642f72756e74696d652f636f6d6d6f6e2f7372632f636c61696d732e72730014211300600000002d010000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f656c656374696f6e732d70687261676d656e2f7372632f6c69622e727352616e646f6d6e657373436f6c6c656374697665466c697000000000e42113000e0000000000000000000000f22113000c00000000000000000000000000000000000000000000000000000000000000543113000022130000000000000000001022130003000000000000000100000052616e646f6d4d6174657269616c5665633c543a3a486173683e00001200000000000000010000006200000028221300580000008022130058000000d82213001100000020536572696573206f6620626c6f636b20686561646572732066726f6d20746865206c61737420383120626c6f636b73207468617420616374732061732072616e646f6d2073656564206d6174657269616c2e205468697320697320617272616e67656420617320612072696e672062756666657220776974682060626c6f636b5f6e756d626572202520383160206265696e672074686520696e64657820696e746f20746865206056656360206f6620746865206f6c6465737420686173682e0000003ee1120054000000180100000f0000000c23130055000000710000000f0000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f7574696c6974792f7372632f6c69622e72730000000000000000e112000f00000000000000f0231300020000000000000000000000e6e012001a00000000000000002413000200000000000000000000000fe112001d00000000000000102413000300000000000000000000002824130013000000000000003c241300010000000000000000000000442413000f00000000000000542413000100000000000000cf25130045000000ba251300150000006925130051000000ba25130015000000ea2413003c000000543113000000000026251300430000004e6f6e44656661756c74436f6d706f7369746500aa241300400000004e6f6e5a65726f526566436f756e74005c2413004e0000002054686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e20537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e204661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e204569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e205468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6520616e6420746865206e65772072756e74696d652e20546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d651c261300170000005f5f49676e6f72652063616e6e6f74206265207573656400442613006800000055000000110000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f72616e646f6d6e6573732d636f6c6c6563746976652d666c69702f7372632f6c69622e727348617368207461626c65206361706163697479206f766572666c6f77d8261300530000004f000000280000002f636172676f2d686f6d652f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f6861736862726f776e2d302e392e312f7372632f7261772f6d6f642e7273492068657265627920616772656520746f20746865207465726d73206f66207468652073746174656d656e742077686f7365205348412d323536206d756c74696861736820697320516d58456b4d61686668484a507a5433526a6b58695a56466937375a655665757874416a686f6a47524e59636b7a2e202854686973206d617920626520666f756e64206174207468652055524c3a2068747470733a2f2f73746174656d656e742e706f6c6b61646f742e6e6574776f726b2f736166742e68746d6c29492068657265627920616772656520746f20746865207465726d73206f66207468652073746174656d656e742077686f7365205348412d323536206d756c74696861736820697320516d63315859715436533339574e70325565695255725a6963685557555070474554684445366441623366364e792e202854686973206d617920626520666f756e64206174207468652055524c3a2068747470733a2f2f73746174656d656e742e706f6c6b61646f742e6e6574776f726b2f726567756c61722e68746d6c29436c61696d735369676e696e6700182f13004a0000001a04000022000000182f13004a0000007103000036000000182f13004a0000003604000015000000182f13004a000000440400001e000000182f13004a0000004d04000018000000182f13004a0000004e04000019000000182f13004a000000510400001a00000073756d206f6620696e7075742063616e6e6f742066697420696e206054606c656e677468206f6620696e7075742069732067726561746572207468616e207a65726f3b206974206d757374206861766520612066697273743b207165640000002c2a13005d000000e60000000e0000002c2a13005d000000c90000003000000050726f6f662070726f766964656420696e20746865206d6f64756c6520646f633b207165642e00002c2a13005d000000cb000000160000002c2a13005d000000d50000002c0000002c2a13005d000000d7000000120000002c2a13005d000000eb000000300000002c2a13005d000000fa000000210000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f61726974686d657469632f7372632f6c69622e72730000006f2b13004d000000da010000010000004661696c656420746f20636f6e7665727471202f206365696c28712f246d617829203c20246d61782e204d6163726f2070726576656e747320616e792074797065206265696e672063726561746564207468617420646f6573206e6f74207361746973667920746869733b207165642f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f61726974686d657469632f7372632f7065725f7468696e67732e72732f72757374632f653337613133636333353934303034363633373338626431386438313030653664623936363663662f6c6962726172792f636f72652f7372632f6f70732f61726974682e72730b2b1300640000005105000001000000dc2b1300610000006f000000090000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f61726974686d657469632f7372632f62696775696e742e727363616e6e6f74206669742061206e756d62657220696e746f20753132380000dc2b1300610000009e0000001b000000dc2b1300610000008000000009000000dc2b130061000000920000000900000000000000617474656d707420746f20646976696465206279207a65726f000000dc2b130061000000460000000d000000616c7265616479206d757461626c7920626f72726f77656412000000000000000100000021000000dc2b1300610000007a0100001a000000dc2b1300610000006801000028000000dc2b1300610000006901000028000000616c726561647920626f72726f7765641200000000000000010000005f000000dc2b130061000000710100001b000000dc2b130061000000720100001b000000dc2b130061000000d60100001c0000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f61726974686d657469632f7372632f66697865645f706f696e742e7273617474656d707420746f206469766964652077697468206f766572666c6f77642d1300650000004b0600000100000072656d696e646572206f6620646976206279206320697320616c77617973206c657373207468616e20633b2071656400120000000800000004000000f8000000612e1300680000006a00000012000000726573756c742063616e6e6f742066697420696e20753132382f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f61726974686d657469632f7372632f68656c706572735f3132386269742e727342616265565246496e4f7574436f6e7465787442414245736c6f74206e756d62657263757272656e742065706f6368636861696e2072616e646f6d6e657373182f13004a000000c4000000110000002f72757374632f653337613133636333353934303034363633373338626431386438313030653664623936363663662f6c6962726172792f616c6c6f632f7372632f736c6963652e72730000742f13004e000000cd000000200000002f636172676f2d686f6d652f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f61727261797665632d302e352e322f7372632f6c69622e7273000012000000000000000100000010010000e42f130066000000ce0000002a0000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f72756e74696d652d696e746572666163652f7372632f696d706c732e7273486f737420746f207761736d2076616c7565732061726520656e636f64656420636f72726563746c793b2071656412000000000000000100000010010000983013006800000009010000260000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f72756e74696d652d696e746572666163652f7372632f706173735f62792e7273373113000d0000002231130015000000543113000000000020311300020000003a20696e73756666696369656e7420636170616369747943617061636974794572726f72543113000000000072756e74696d650052756e74696d65206d656d6f7279206578686175737465642e2041626f7274696e675472616e73616374696f6e206469737061746368206973206d616e6461746f72793b207472616e73616374696f6e73206d6179206e6f742068617665206d616e6461746f727920646973706174636865732e412063616c6c20776173206c6162656c6c6564206173206d616e6461746f72792c2062757420726573756c74656420696e20616e204572726f722e5472616e73616374696f6e20776f756c6420657868617573742074686520626c6f636b206c696d6974735472616e73616374696f6e2068617320616e20616e6369656e7420626972746820626c6f636b5472616e73616374696f6e20686173206120626164207369676e61747572655472616e73616374696f6e206973206f757464617465645472616e73616374696f6e2077696c6c2062652076616c696420696e2074686520667574757265496e6162696c69747920746f2070617920736f6d6520666565732028652e672e206163636f756e742062616c616e636520746f6f206c6f77295472616e73616374696f6e2063616c6c206973206e6f74206578706563746564496e76616c69645472616e73616374696f6e20637573746f6d206572726f72436f756c64206e6f742066696e6420616e20756e7369676e65642076616c696461746f7220666f722074686520756e7369676e6564207472616e73616374696f6e436f756c64206e6f74206c6f6f6b757020696e666f726d6174696f6e20726571756972656420746f2076616c696461746520746865207472616e73616374696f6e556e6b6e6f776e5472616e73616374696f6e20637573746f6d206572726f7200000000000000617474656d707420746f20646976696465206279207a65726f000000fc33130062000000600000002b0000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f72756e74696d652f7372632f67656e657269632f6572612e727348617368206e6f7420657175616c2f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f72756e74696d652f7372632f7472616974732e72730000006c3413005d0000005904000013000000436f6e73756d65722072656d61696e696e67426164206f726967696e43616e6e6f74206c6f6f6b75704e6f2070726f76696465727344697370617463684572726f723c7761736d3a73747269707065643e4475706c69636174655265706f72744f6666656e63654572726f722f72757374632f653337613133636333353934303034363633373338626431386438313030653664623936363663662f6c6962726172792f636f72652f7372632f736c6963652f6d6f642e7273000000a83513005e000000470000001f0000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f747269652f7372632f6e6f64655f636f6465632e72730000a83513005e00000050000000140000006c656e20213d20302073696e6365206c656e2025203220213d20303b20696e6e6572206861732061206c61737420656c656d656e743b207165640000643613005b0000003d000000120000002f636172676f2d686f6d652f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f747269652d64622d302e32322e332f7372632f6e6962626c652f6e6962626c657665632e727300643613005b0000006000000033000000643613005b000000600000000d000000643613005b000000690000000f000000643613005b0000006b0000000f000000643613005b0000006b0000003e000000643613005b0000009100000039000000643613005b0000009100000011000000643613005b0000009300000011000000643613005b0000009400000040000000643613005b000000940000004e000000803713005d0000009800000017000000803713005d00000096000000290000002f636172676f2d686f6d652f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f747269652d64622d302e32322e332f7372632f6e6962626c652f6e6962626c65736c6963652e7273000000f4391300550000004d0000001c000000803713005d0000004000000012000000803713005d0000004f0000002d000000803713005d0000005500000032000000803713005d000000dd0000000f000000803713005d000000df0000000f000000803713005d000000df0000003d0000006361706163697479206f766572666c6f77000000743813004e000000fb000000360000002f636172676f2d686f6d652f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f736d616c6c7665632d312e362e312f7372632f6c69622e7273617373657274696f6e206661696c65643a206e65775f636170203e3d206c656e0000743813004e000000320300000d000000617373657274696f6e206661696c65643a20696e646578203c3d206c656e0000743813004e0000005f05000009000000f4391300550000008d0000003c000000f4391300550000008d00000051000000f4391300550000008d00000031000000743913004f0000004b00000042000000743913004f0000004a0000003e0000002f636172676f2d686f6d652f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f747269652d64622d302e32322e332f7372632f6e6f64652e727300743913004f0000006b00000022000000743913004f0000009a00000032000000743913004f000000aa0000003e0000002f636172676f2d686f6d652f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f747269652d64622d302e32322e332f7372632f6e6962626c652f6d6f642e7273000000f4391300550000008600000031000000f4391300550000008600000042000000f4391300550000008600000026000000f439130055000000870000001d000000f439130055000000870000000d000000f4391300550000008e00000018000000f4391300550000008e0000000d00000063616c6c65642060526573756c743a3a756e77726170282960206f6e20616e2060457272602076616c75650041e8f5cc000b044f8167f700a98706046e616d6501a08706ee0800206578745f6f6666636861696e5f696e6465785f7365745f76657273696f6e5f3101196578745f6c6f6767696e675f6c6f675f76657273696f6e5f3102256578745f63727970746f5f656432353531395f67656e65726174655f76657273696f6e5f3103236578745f63727970746f5f656432353531395f7665726966795f76657273696f6e5f3104286578745f63727970746f5f66696e6973685f62617463685f7665726966795f76657273696f6e5f31052c6578745f63727970746f5f736563703235366b315f65636473615f7265636f7665725f76657273696f6e5f3106376578745f63727970746f5f736563703235366b315f65636473615f7265636f7665725f636f6d707265737365645f76657273696f6e5f3107256578745f63727970746f5f737232353531395f67656e65726174655f76657273696f6e5f3108286578745f63727970746f5f737232353531395f7075626c69635f6b6579735f76657273696f6e5f3109216578745f63727970746f5f737232353531395f7369676e5f76657273696f6e5f310a236578745f63727970746f5f737232353531395f7665726966795f76657273696f6e5f320b276578745f63727970746f5f73746172745f62617463685f7665726966795f76657273696f6e5f310c2a6578745f747269655f626c616b65325f3235365f6f7264657265645f726f6f745f76657273696f6e5f310d1c6578745f616c6c6f6361746f725f667265655f76657273696f6e5f310e1e6578745f616c6c6f6361746f725f6d616c6c6f635f76657273696f6e5f310f206578745f68617368696e675f626c616b65325f3132385f76657273696f6e5f3110206578745f68617368696e675f626c616b65325f3235365f76657273696f6e5f3111206578745f68617368696e675f6b656363616b5f3235365f76657273696f6e5f31121e6578745f68617368696e675f74776f785f3132385f76657273696f6e5f31131d6578745f68617368696e675f74776f785f36345f76657273696f6e5f31141c6578745f6d6973635f7072696e745f6865785f76657273696f6e5f31151c6578745f6d6973635f7072696e745f6e756d5f76657273696f6e5f31161d6578745f6d6973635f7072696e745f757466385f76657273696f6e5f3117226578745f6d6973635f72756e74696d655f76657273696f6e5f76657273696f6e5f3118236578745f6f6666636861696e5f69735f76616c696461746f725f76657273696f6e5f3119346578745f6f6666636861696e5f6c6f63616c5f73746f726167655f636f6d706172655f616e645f7365745f76657273696f6e5f311a286578745f6f6666636861696e5f6c6f63616c5f73746f726167655f6765745f76657273696f6e5f311b286578745f6f6666636861696e5f6c6f63616c5f73746f726167655f7365745f76657273696f6e5f311c246578745f6f6666636861696e5f6e6574776f726b5f73746174655f76657273696f6e5f311d226578745f6f6666636861696e5f72616e646f6d5f736565645f76657273696f6e5f311e296578745f6f6666636861696e5f7375626d69745f7472616e73616374696f6e5f76657273696f6e5f311f1c6578745f73746f726167655f617070656e645f76657273696f6e5f3120226578745f73746f726167655f6368616e6765735f726f6f745f76657273696f6e5f31211b6578745f73746f726167655f636c6561725f76657273696f6e5f3122226578745f73746f726167655f636c6561725f7072656669785f76657273696f6e5f3123286578745f73746f726167655f636f6d6d69745f7472616e73616374696f6e5f76657273696f6e5f31241c6578745f73746f726167655f6578697374735f76657273696f6e5f3125196578745f73746f726167655f6765745f76657273696f6e5f31261e6578745f73746f726167655f6e6578745f6b65795f76657273696f6e5f31271a6578745f73746f726167655f726561645f76657273696f6e5f31282a6578745f73746f726167655f726f6c6c6261636b5f7472616e73616374696f6e5f76657273696f6e5f31291a6578745f73746f726167655f726f6f745f76657273696f6e5f312a196578745f73746f726167655f7365745f76657273696f6e5f312b276578745f73746f726167655f73746172745f7472616e73616374696f6e5f76657273696f6e5f312c0c5f5f727573745f616c6c6f632d0a5f5f72675f616c6c6f632e0e5f5f727573745f6465616c6c6f632f0c5f5f72675f6465616c6c6f63300e5f5f727573745f7265616c6c6f63310c5f5f72675f7265616c6c6f6332135f5f727573745f616c6c6f635f7a65726f656433115f5f72675f616c6c6f635f7a65726f6564341a5f5f727573745f616c6c6f635f6572726f725f68616e646c657235085f5f72675f6f6f6d3633616c6c6f633a3a616c6c6f633a3a68616e646c655f616c6c6f635f6572726f723a3a68396233356666353366373862336237323708727573745f6f6f6d3834616c6c6f633a3a7261775f7665633a3a63617061636974795f6f766572666c6f773a3a68643334613339623261323062343861613929636f72653a3a70616e69636b696e673a3a70616e69633a3a68353931663938323162363132633033313a2e616c6c6f633a3a7261775f7665633a3a66696e6973685f67726f773a3a68393363643365663835616537633939663b25616c6c6f633a3a666d743a3a666f726d61743a3a68363637613739353430383938353533383c36636f72653a3a70616e69636b696e673a3a70616e69635f626f756e64735f636865636b3a3a68363764373564386363303561366261643d23636f72653a3a666d743a3a77726974653a3a68333133363666353338663366656331343e33636f72653a3a6f7074696f6e3a3a6578706563745f6e6f6e655f6661696c65643a3a68343335616366613232373730646637323f3a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a6833663662333835306339386135636265403b3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f636861723a3a6830336366666363666263313264333165413a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f666d743a3a68303036356465623766386363306231344243616c6c6f633a3a7665633a3a5665633c542c413e3a3a737761705f72656d6f76653a3a6173736572745f6661696c65643a3a6864303363393639353330646266643136434e636f72653a3a666d743a3a6e756d3a3a696d703a3a3c696d706c20636f72653a3a666d743a3a446973706c617920666f72207533323e3a3a666d743a3a6837626136613033376164623563643230442d636f72653a3a70616e69636b696e673a3a70616e69635f666d743a3a6830346365373030363561383039666238453e616c6c6f633a3a7665633a3a5665633c542c413e3a3a696e736572743a3a6173736572745f6661696c65643a3a6835623134346337343862643833363930463e616c6c6f633a3a7665633a3a5665633c542c413e3a3a72656d6f76653a3a6173736572745f6661696c65643a3a68666632366462653536343266386664624739636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6830393437373039326132383231633461482f636f72653a3a666d743a3a6e756d3a3a696d703a3a666d745f7536343a3a68353833323565656365316333313739374911727573745f626567696e5f756e77696e644a313c5420617320636f72653a3a616e793a3a416e793e3a3a747970655f69643a3a68353933346235316230646562653930614b35636f72653a3a666d743a3a466f726d61747465723a3a7061645f696e74656772616c3a3a68343636326361636365353764666465384c43636f72653a3a666d743a3a466f726d61747465723a3a7061645f696e74656772616c3a3a77726974655f7072656669783a3a68356536643061626130396633326235324d3f636f72653a3a736c6963653a3a696e6465783a3a736c6963655f656e645f696e6465785f6c656e5f6661696c3a3a68366334396438333039613035633366324e2c636f72653a3a666d743a3a466f726d61747465723a3a7061643a3a68336264306663356131363761396636344f2e636f72653a3a7374723a3a736c6963655f6572726f725f6661696c3a3a683036366638383363343461393435306350323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a6834616263393066366631306163663061514a3c636f72653a3a6f70733a3a72616e67653a3a52616e67653c4964783e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a686338363461636433656463666534326652323c6368617220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68626661316230393363356565656336385347636f72653a3a756e69636f64653a3a756e69636f64655f646174613a3a6772617068656d655f657874656e643a3a6c6f6f6b75703a3a68663135356233306366366635633062655439636f72653a3a756e69636f64653a3a7072696e7461626c653a3a69735f7072696e7461626c653a3a6839396635326564306263383232343831554c636f72653a3a666d743a3a6e756d3a3a3c696d706c20636f72653a3a666d743a3a446562756720666f72207573697a653e3a3a666d743a3a68373232653131323836353764373364302e33385641636f72653a3a736c6963653a3a696e6465783a3a736c6963655f73746172745f696e6465785f6c656e5f6661696c3a3a6838376139393138343461356136613264573d636f72653a3a736c6963653a3a696e6465783a3a736c6963655f696e6465785f6f726465725f6661696c3a3a68663065623763363063366164626633345838636f72653a3a70616e69636b696e673a3a6173736572745f6661696c65643a3a696e6e65723a3a683961613437343833393465613936323859303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68373630353135393538663833323238625a443c636f72653a3a666d743a3a417267756d656e747320617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a68616461363265643536366238623237615b453c636f72653a3a63656c6c3a3a426f72726f774572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68333961633465323730636264613361655c483c636f72653a3a63656c6c3a3a426f72726f774d75744572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68396364363938613032303366376637655d2e636f72653a3a6f7074696f6e3a3a6578706563745f6661696c65643a3a68313238646263363361373762363462335e323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a68653164623931393231326131373863655f323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a683334393932343863336163653936613960533c636f72653a3a666d743a3a6275696c646572733a3a5061644164617074657220617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a6833636330623732656235383131376131612f636f72653a3a666d743a3a57726974653a3a77726974655f636861723a3a6861663264376134626331363838373132622e636f72653a3a666d743a3a57726974653a3a77726974655f666d743a3a6832336431393265383735306239363134633a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a6863396239323564376434343463386336643b3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f636861723a3a6834336661353362343232643664383637653a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f666d743a3a68326132353136316331386631363162376639636f72653a3a666d743a3a6275696c646572733a3a44656275675475706c653a3a6669656c643a3a68663934343663353338336538346530666731636f72653a3a666d743a3a6e756d3a3a70617273655f7536345f696e746f3a3a683836356665636331363439653662386668313c73747220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68636166353765616336643835636166376947636f72653a3a666d743a3a6e756d3a3a3c696d706c20636f72653a3a666d743a3a42696e61727920666f722069383e3a3a666d743a3a68393534666231363062643530303465346a3e3c636f72653a3a666d743a3a4572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68303461626364316137336361656135626b5a637572766532353531395f64616c656b3a3a6261636b656e643a3a73657269616c3a3a7536343a3a6669656c643a3a4669656c64456c656d656e7435313a3a746f5f62797465733a3a68376437393064393161666331616134356c9201637572766532353531395f64616c656b3a3a6669656c643a3a3c696d706c20737562746c653a3a436f6e7374616e7454696d65457120666f7220637572766532353531395f64616c656b3a3a6261636b656e643a3a73657269616c3a3a7536343a3a6669656c643a3a4669656c64456c656d656e7435313e3a3a63745f65713a3a68396364656461363836373161653962666d24737562746c653a3a626c61636b5f626f783a3a68643538663262386531326262666438636e57637572766532353531395f64616c656b3a3a6261636b656e643a3a73657269616c3a3a7536343a3a6669656c643a3a4669656c64456c656d656e7435313a3a706f77326b3a3a68663236333730613433323836636163336f7e637572766532353531395f64616c656b3a3a6669656c643a3a3c696d706c20637572766532353531395f64616c656b3a3a6261636b656e643a3a73657269616c3a3a7536343a3a6669656c643a3a4669656c64456c656d656e7435313e3a3a737172745f726174696f5f693a3a6835363363396339363265323062373362705c637572766532353531395f64616c656b3a3a6261636b656e643a3a73657269616c3a3a7536343a3a6669656c643a3a4669656c64456c656d656e7435313a3a66726f6d5f62797465733a3a6832616238363561393631373334363633715a637572766532353531395f64616c656b3a3a72697374726574746f3a3a52697374726574746f506f696e743a3a656c6c696761746f725f72697374726574746f5f666c61766f723a3a68646461343666623535616233393161667249637572766532353531395f64616c656b3a3a7363616c61723a3a5363616c61723a3a66726f6d5f63616e6f6e6963616c5f62797465733a3a6839653365336238643333303431333564737b6672616d655f6d657461646174613a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f72206672616d655f6d657461646174613a3a53746f726167654861736865723e3a3a656e636f64655f746f3a3a683162656163376433656139313636306274423c73705f7374643a3a57726974657220617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a683363633661343561353130333135336375417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a6831636432373064666631313861613763766c3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a683563616634656137383534663333653777417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a683538303330336534653561396266326478417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a683637333262303539623133663935393579417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a68366466653838653631316263313030307a417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a68373364323466643532356561656535617b417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a68396561313134623133303139396634327c633c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a737065635f66726f6d5f697465723a3a5370656346726f6d497465723c542c493e3e3a3a66726f6d5f697465723a3a68373565373763666662363932356332627d2e616c6c6f633a3a7261775f7665633a3a66696e6973685f67726f773a3a68323639383637313236343665326136667e543c6672616d655f73797374656d3a3a6c696d6974733a3a56616c69646174696f6e4572726f727320617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68303564386661663138656538646536617f4c6672616d655f73797374656d3a3a6c696d6974733a3a426c6f636b576569676874734275696c6465723a3a6275696c645f6f725f70616e69633a3a68326463313939646664376530366331378001206b656363616b3a3a66313630303a3a68643136653639383530623363363336348101366d65726c696e3a3a7472616e7363726970743a3a5472616e7363726970743a3a6e65773a3a68663937363338316633643532623636308201366d65726c696e3a3a7374726f62653a3a5374726f62653132383a3a626567696e5f6f703a3a6834393265303662376564646166353330830131636f72653a3a70616e69636b696e673a3a6173736572745f6661696c65643a3a68353165396237626139333239313435378401416d65726c696e3a3a7472616e7363726970743a3a5472616e7363726970743a3a617070656e645f6d6573736167653a3a683832386436623530666233383133386185013d6d65726c696e3a3a7472616e7363726970743a3a5472616e7363726970743a3a617070656e645f7536343a3a68633365386666383661313861373738328601426d65726c696e3a3a7472616e7363726970743a3a5472616e7363726970743a3a6368616c6c656e67655f62797465733a3a68313833653739663961616235383637398701303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68316334646132633061303238396231668801643c70616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a466561736962696c6974794572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68356639353562323537383963303132628901303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68656632323534336265633130646631348a01573c70616c6c65745f6964656e746974793a3a44617461206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a68393563343662346135636139623633318b01633c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a737065635f66726f6d5f697465723a3a5370656346726f6d497465723c542c493e3e3a3a66726f6d5f697465723a3a68306264653266643331303639363735368c014470616c6c65745f7374616b696e673a3a736c617368696e673a3a536c617368696e675370616e733a3a656e645f7370616e3a3a68343665356663366630336239626165618d014170616c6c65745f7374616b696e673a3a736c617368696e673a3a536c617368696e675370616e733a3a7072756e653a3a68396461336662633239336538376636628e013a70616c6c65745f74696d657374616d703a3a657874726163745f696e686572656e745f646174613a3a68303534383936373432303432306536618f01503c7061726974795f7363616c655f636f6465633a3a6572726f723a3a4572726f7220617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a683464303838633264376634643433323490014e3c7061726974795f7363616c655f636f6465633a3a6572726f723a3a4572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a686263323663363266356563326365633891013f7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573685f627974653a3a68646535356531343739363262616232369201417061726974795f7363616c655f636f6465633a3a636f6465633a3a6465636f64655f7665635f776974685f6c656e3a3a683137326236353437366635353032356593017873705f636f72653a3a63727970746f3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f636f72653a3a63727970746f3a3a4163636f756e74496433323e3a3a6465636f64653a3a68343434323965343630393164333930619401417061726974795f7363616c655f636f6465633a3a636f6465633a3a6465636f64655f7665635f776974685f6c656e3a3a6838663036663234333538316330343764950173706f6c6b61646f745f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f7220706f6c6b61646f745f72756e74696d653a3a43616c6c3e3a3a6465636f64653a3a6866333132353766373030613764323632960143636f72653a3a7074723a3a64726f705f696e5f706c6163653c706f6c6b61646f745f72756e74696d653a3a43616c6c3e3a3a68323931336639633538376534623864329701417061726974795f7363616c655f636f6465633a3a636f6465633a3a6465636f64655f7665635f776974685f6c656e3a3a6865666161663031646263306131393837980173706f6c6b61646f745f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f7220706f6c6b61646f745f72756e74696d653a3a43616c6c3e3a3a6465636f64653a3a68623461303361656462343538393566379901417061726974795f7363616c655f636f6465633a3a636f6465633a3a6465636f64655f7665635f776974685f6c656e3a3a68666263373066313237623664313738319a01417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a68326431613761636333306632303331659b01417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a68333465323539333162346531636436639c01417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a68336561663130383731353339303430349d01417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a68346165376234343061616363373966649e01417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a68373663633033393565653930663335389f01417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a6838626231363161623938393934393263a001417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a6839343435623732353264366531656437a1017f7061726974795f7363616c655f636f6465633a3a636f6465633a3a696e6e65725f7475706c655f696d706c3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f72202851302c5230293e3a3a656e636f64655f746f3a3a6866613131656361613263343663353034a201437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6836633266613633383763613136303466a3014673705f696f3a3a68617368696e673a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a74776f785f36343a3a6862666666623834363238363136323839a401483c5b543b20335d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6838313536336661333561653762326136a501483c5b543b20385d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6831396132646534623066383332363739a601493c5b543b2033325d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6863623661636139343162313336393138a701493c5b543b2036345d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6838303933396439656231303661383563a801493c5b543b2036355d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6863383263363163623836653938303562a90183013c616c6c6f633a3a7665633a3a5665633c542c413e20617320616c6c6f633a3a7665633a3a737065635f657874656e643a3a53706563457874656e643c542c616c6c6f633a3a7665633a3a696e746f5f697465723a3a496e746f497465723c543e3e3e3a3a737065635f657874656e643a3a6834333433623739616665303932333864aa017c7061726974795f7363616c655f636f6465633a3a636f6465633a3a696e6e65725f7475706c655f696d706c3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f72202851302c5230293e3a3a6465636f64653a3a6835376539633762336138623139633366ab016b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7533323e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6830333032626636346534653237353864ac017c7061726974795f7363616c655f636f6465633a3a636f6465633a3a696e6e65725f7475706c655f696d706c3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f72202851302c5230293e3a3a6465636f64653a3a6835623230663231363165303530636137ad016b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7533323e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6866303535343637373665303230366363ae01437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6862663364636463663734333139353536af01723c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163745265663c753132383e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6833333331313533346166363863323539b0014973705f696f3a3a68617368696e673a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a626c616b65325f3235363a3a6832313066356631633064313636643162b1014a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a6839383566636366333564323132633461b2014273705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a7365743a3a6864326433663631373330386337633833b301433c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6831386466333633666639376330326663b401433c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6836623163333939616130323131633837b501433c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6862316237633535636335393331633438b601463c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6831356366376132373661656236306439b701463c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6831393433366263323536323035633439b801463c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6839386532353430376132336634383739b901463c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6864366238393961663663623862623565ba012f616c6c6f633a3a7665633a3a5665633c542c413e3a3a696e736572743a3a6862313463363838616531366339623262bb012f616c6c6f633a3a7665633a3a5665633c542c413e3a3a72657461696e3a3a6864303139346364376564376632653738bc0130616c6c6f633a3a7665633a3a5665633c542c413e3a3a726573657276653a3a6862633437373533393538393931366631bd01753c636f72653a3a697465723a3a61646170746572733a3a66696c7465725f6d61703a3a46696c7465724d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6834303462643035383132356562386236be013d70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e3a3a69735f6f6e6c696e655f6175783a3a6864343637623435636430623230393830bf01ef023c70616c6c65745f7374616b696e673a3a4578706f737572654f663c543e2061732073705f72756e74696d653a3a7472616974733a3a436f6e766572743c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449642c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c70616c6c65745f7374616b696e673a3a4578706f737572653c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449642c3c3c542061732070616c6c65745f7374616b696e673a3a436f6e6669673e3a3a43757272656e6379206173206672616d655f737570706f72743a3a7472616974733a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e3e3a3a42616c616e63653e3e3e3e3a3a636f6e766572743a3a6865303165636431646561633832386130c0018901616c6c6f633a3a7665633a3a736f757263655f697465725f6d61726b65723a3a3c696d706c20616c6c6f633a3a7665633a3a737065635f66726f6d5f697465723a3a5370656346726f6d497465723c542c493e20666f7220616c6c6f633a3a7665633a3a5665633c543e3e3a3a66726f6d5f697465723a3a6834363866663161336634646662653265c10137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6864613239663237353833366134393731c2018901616c6c6f633a3a7665633a3a736f757263655f697465725f6d61726b65723a3a3c696d706c20616c6c6f633a3a7665633a3a737065635f66726f6d5f697465723a3a5370656346726f6d497465723c542c493e20666f7220616c6c6f633a3a7665633a3a5665633c543e3e3a3a66726f6d5f697465723a3a6865613730666433376438633331646166c301463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6831346533613663623564663536666133c401463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6834613933633464303834333065643936c501463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6836303537393062333330306164356637c601463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6836356137396265346564383636373961c701463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6837313931373435626662633434323366c801463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6837643465373234323262363634313861c901463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6837643839626330393337326466386362ca01593c706f6c6b61646f745f72756e74696d653a3a4e706f73436f6d70616374536f6c7574696f6e313620617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6837333664376631306164343464663161cb016e6672616d655f73797374656d3a3a70616c6c65743a3a5f3a3a3c696d706c20636f72653a3a636c6f6e653a3a436c6f6e6520666f72206672616d655f73797374656d3a3a70616c6c65743a3a43616c6c3c543e3e3a3a636c6f6e653a3a6831323638366561316134663633343835cc014b3c70616c6c65745f7363686564756c65723a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6864623866366639643663633431383265cd016c70616c6c65745f626162653a3a70616c6c65743a3a5f3a3a3c696d706c20636f72653a3a636c6f6e653a3a436c6f6e6520666f722070616c6c65745f626162653a3a70616c6c65743a3a43616c6c3c543e3e3a3a636c6f6e653a3a6837383361613533666636313562646361ce017670616c6c65745f62616c616e6365733a3a70616c6c65743a3a5f3a3a3c696d706c20636f72653a3a636c6f6e653a3a436c6f6e6520666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a43616c6c3c542c493e3e3a3a636c6f6e653a3a6832363164653063313634666635363162cf014c3c70616c6c65745f617574686f72736869703a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6865653466643830656361663864633265d001493c70616c6c65745f7374616b696e673a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6838666433303361643661323836343566d1014a3c70616c6c65745f6f6666656e6365733a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6831663061313664386462333362636338d201493c70616c6c65745f6772616e6470613a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6833376165643665316663643739303161d3014b3c70616c6c65745f696d5f6f6e6c696e653a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6835343831313631613336386534353337d401553c70616c6c65745f617574686f726974795f646973636f766572793a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6837313034663531313462333966646661d5014b3c70616c6c65745f64656d6f63726163793a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6839666530363334663366393230333034d6014e3c70616c6c65745f636f6c6c6563746976653a3a43616c6c3c542c493e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6830653536616134646335643235646137d701543c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6838313437393230313536316437303734d8015a3c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a636c61696d733a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6830336430613931656339373162303366d9017270616c6c65745f76657374696e673a3a70616c6c65743a3a5f3a3a3c696d706c20636f72653a3a636c6f6e653a3a436c6f6e6520666f722070616c6c65745f76657374696e673a3a70616c6c65743a3a43616c6c3c543e3e3a3a636c6f6e653a3a6865633234666532306563376234343334da014d3c706f6c6b61646f745f72756e74696d653a3a43616c6c20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a68346635346532643136633036353534392e37393131db014a3c70616c6c65745f6964656e746974793a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6830643932653066343137613861643839dc016e70616c6c65745f70726f78793a3a70616c6c65743a3a5f3a3a3c696d706c20636f72653a3a636c6f6e653a3a436c6f6e6520666f722070616c6c65745f70726f78793a3a70616c6c65743a3a43616c6c3c543e3e3a3a636c6f6e653a3a6834613966316330373064656234363832dd014a3c70616c6c65745f6d756c74697369673a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6839313735663538626235363334363836de014a3c70616c6c65745f626f756e746965733a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6831656462306664313263653864316266df01463c70616c6c65745f746970733a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6862613164376164343261313264326466e001463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6865613535616363646537613037386539e101483c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6838303265616436643865666533353761e2015c636f72653a3a7074723a3a64726f705f696e5f706c6163653c747269655f64623a3a7472696564626d75743a3a4e6f64653c7072696d69746976655f74797065733a3a483235363e3e3a3a6865363831383635643166643564323865e301543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6834383261343630393333326134326266e401543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6835356239373466663865663336636665e501543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6836383964306330643238303636323565e601a30173705f72756e74696d653a3a6d756c7469616464726573733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f72756e74696d653a3a6d756c7469616464726573733a3a4d756c7469416464726573733c4163636f756e7449642c4163636f756e74496e6465783e3e3a3a6465636f64653a3a6837373966626133363039643039633130e701543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6837643539393962306662626634663963e801543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6839396138643766363633353339373038e901543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6862303830613235616131623864373537ea01543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6863316366336538323838306431313134eb01a30173705f72756e74696d653a3a6d756c7469616464726573733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f72756e74696d653a3a6d756c7469616464726573733a3a4d756c7469416464726573733c4163636f756e7449642c4163636f756e74496e6465783e3e3a3a6465636f64653a3a6862316637393732636333366234616539ec01543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6863633864643930663538363632356235ed019c013c73705f72756e74696d653a3a67656e657269633a3a756e636865636b65645f65787472696e7369633a3a556e636865636b656445787472696e7369633c416464726573732c43616c6c2c5369676e61747572652c45787472613e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6839346666333763376364373037646262ee01623c616c6c6f633a3a7665633a3a5665633c542c413e20617320616c6c6f633a3a7665633a3a737065635f657874656e643a3a53706563457874656e643c542c493e3e3a3a737065635f657874656e643a3a6833333437303064656532633961353763ef016f3c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6830623534306634353365383133623065f00152616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a656e7472793a3a566163616e74456e7472793c4b2c563e3a3a696e736572743a3a6835363337656364623930343331326231f101613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6832363133633830663161376437393065f201723c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6837646237386237343839393362373631f301407363686e6f72726b656c3a3a7672663a3a5652464f75747075743a3a6174746163685f696e7075745f686173683a3a6833623437323866663336313532616233f401457363686e6f72726b656c3a3a706f696e74733a3a52697374726574746f426f74683a3a66726f6d5f636f6d707265737365643a3a6836623232303364313364656139386139f501a60173705f72756e74696d653a3a6d756c7469616464726573733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722073705f72756e74696d653a3a6d756c7469616464726573733a3a4d756c7469416464726573733c4163636f756e7449642c4163636f756e74496e6465783e3e3a3a656e636f64655f746f3a3a6830323861626262393936346364313439f6017273705f73657373696f6e3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f73657373696f6e3a3a4d656d6265727368697050726f6f663e3a3a6465636f64653a3a6836653432643666363338623138656535f7017273705f73657373696f6e3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f73657373696f6e3a3a4d656d6265727368697050726f6f663e3a3a6465636f64653a3a6839343863376230663337363533613733f801776672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6d75746174653a3a6837323536646466373939663761393636f9015c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6862323066383061383637646331343662fa01386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6834333936376332633132393964646638fb01b80170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a52657365727661626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a756e726573657276653a3a6834316330613832386262346332313663fc01573c49642061732073705f72756e74696d653a3a7472616974733a3a4163636f756e744964436f6e76657273696f6e3c543e3e3a3a696e746f5f7375625f6163636f756e743a3a6839386431656634393434363831303630fd01b50170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a6465706f7369745f6372656174696e673a3a6835666133383763306132623164326139fe015e6672616d655f73797374656d3a3a3c696d706c206672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3e3a3a6465706f7369745f6576656e745f696e64657865643a3a6835626334326665303936353434373961ff014473705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a636c6561723a3a68346134363733353037653435373239368002950170616c6c65745f626f756e746965733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f626f756e746965733a3a426f756e74793c4163636f756e7449642c42616c616e63652c426c6f636b4e756d6265723e3e3a3a656e636f64655f746f3a3a683836323732623763633739373164653381024773705f696f3a3a68617368696e673a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a74776f785f3132383a3a686233633163373235303031363932636482026c3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c753132383e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a686332666438616232643963643236623883023d70616c6c65745f626f756e746965733a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a686137653033376266306337336539323684023f70616c6c65745f626f756e746965733a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a68373736383462363133633365306339308502703c70616c6c65745f626f756e746965733a3a5f5f47657442797465537472756374426f756e7479436f756e743c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a686161633861616139356362633466643186024870616c6c65745f626f756e746965733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a68313166383733393161316536393835328702a1013c70616c6c65745f626f756e746965733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a426f756e747943757261746f724465706f73697444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a686261323764323161396437643264353588029f013c70616c6c65745f626f756e746965733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a426f756e7479557064617465506572696f6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68646131336231653366663965626337318902a5013c70616c6c65745f626f756e746965733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a426f756e74794465706f7369745061796f757444656c617944656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68616263393661646633646638376363618a029f013c73705f72756e74696d653a3a67656e657269633a3a756e636865636b65645f65787472696e7369633a3a556e636865636b656445787472696e7369633c416464726573732c43616c6c2c5369676e61747572652c45787472613e2061732073705f72756e74696d653a3a7472616974733a3a436865636b61626c653c4c6f6f6b75703e3e3a3a636865636b3a3a68346639326161646435363062373164648b0248636f72653a3a7074723a3a64726f705f696e5f706c6163653c706f6c6b61646f745f72756e74696d653a3a43616c6c3e3a3a68323931336639633538376534623864322e313432358c025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68333939373138323566613065396463388d02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68653562653633373365646164633831398e02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68303134383831383335653235316462648f024573705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6578697374733a3a6839376131343563396531323964633665900276706f6c6b61646f745f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f7220706f6c6b61646f745f72756e74696d653a3a43616c6c3e3a3a656e636f64655f746f3a3a686361393330626465623166386435306291026f3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163745265663c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a68633461656239623633353630633063329202553c73705f72756e74696d653a3a4d756c74695369676e61747572652061732073705f72756e74696d653a3a7472616974733a3a5665726966793e3a3a7665726966793a3a686237316635333161643164613262656193028c0173705f636f6e73656e7375735f626162653a3a646967657374733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f636f6e73656e7375735f626162653a3a646967657374733a3a5072654469676573743e3a3a6465636f64653a3a68616635386165363233633966653764319402683c73705f636f6e73656e7375735f7672663a3a7363686e6f72726b656c3a3a56524650726f6f66206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68656636326139663434306438653364369502970173705f636f6e73656e7375735f626162653a3a646967657374733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f636f6e73656e7375735f626162653a3a646967657374733a3a4e657874436f6e66696744657363726970746f723e3a3a6465636f64653a3a686162663463613866346436393435616296029a0173705f636f6e73656e7375735f626162653a3a646967657374733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722073705f636f6e73656e7375735f626162653a3a646967657374733a3a4e657874436f6e66696744657363726970746f723e3a3a656e636f64655f746f3a3a683939383236366265356137643030313297023c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a683164343665666133393136303264326198028f0173705f636f6e73656e7375735f736c6f74733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f636f6e73656e7375735f736c6f74733a3a45717569766f636174696f6e50726f6f663c4865616465722c49643e3e3a3a6465636f64653a3a68333135346336303035323866333031329902723c73705f72756e74696d653a3a67656e657269633a3a6865616465723a3a4865616465723c4e756d6265722c486173683e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68623231666632396164616331653838649a028f0173705f636f6e73656e7375735f736c6f74733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f636f6e73656e7375735f736c6f74733a3a45717569766f636174696f6e50726f6f663c4865616465722c49643e3e3a3a6465636f64653a3a68623566303733383937623663383465349b02723c73705f72756e74696d653a3a67656e657269633a3a6865616465723a3a4865616465723c4e756d6265722c486173683e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68613332623433393933313031653361629c023a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a68313966616163363634303864623934669d023b3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f636861723a3a68363763306632616666393765366234629e023a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f666d743a3a68666363356433616135306235396631329f024e616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a636f6e7461696e735f6b65793a3a6838376533363161653833333837656238a00245616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a6765743a3a6833646530326462666133613238363739a10245616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a6765743a3a6861333765623834336637643765326537a20245616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a6765743a3a6864383238373766343238663833313338a30247616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a656e7472793a3a6831383231633937386265376630353764a40248616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a696e736572743a3a6863653637343566353364303332326632a50243616c6c6f633a3a636f6c6c656374696f6e733a3a7665635f64657175653a3a56656344657175653c543e3a3a67726f773a3a6834366165333765353832353364353264a602633c54206173207061726974795f7363616c655f636f6465633a3a64657074685f6c696d69743a3a4465636f64654c696d69743e3a3a6465636f64655f616c6c5f776974685f64657074685f6c696d69743a3a6831626665303966343531373238393166a7024d3c747269655f64623a3a7472696564623a3a5472696544423c4c3e20617320747269655f64623a3a547269653c4c3e3e3a3a6765745f776974683a3a6864356339653839303865303166386234a80239747269655f64623a3a6e6f64655f636f6465633a3a4e6f6465436f6465633a3a6465636f64653a3a6862383639363639626634646539366230a902503c61727261797665633a3a6572726f72733a3a43617061636974794572726f723c543e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6837393632333430663930373534656332aa0225747269655f64623a3a547269653a3a6765743a3a6866356631613264326561623833396537ab02553c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320636f72653a3a64656661756c743a3a44656661756c743e3a3a64656661756c743a3a6865366635633032326130396239613338ac02583c616c6c6f633a3a7665633a3a696e746f5f697465723a3a496e746f497465723c542c413e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6862333533653566623136316432346166ad02603c70616c6c65745f626f756e746965733a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6863643063343637366665323465363736ae024f3c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a4861736844423c482c543e3e3a3a6765743a3a6862333438336234343239643938366136af02366861736862726f776e3a3a6d61703a3a486173684d61703c4b2c562c533e3a3a6765743a3a6836383163343836306161303736623932b002523c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a4861736844423c482c543e3e3a3a696e736572743a3a6862353066336439303265626363366361b102533c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a4861736844423c482c543e3e3a3a656d706c6163653a3a6836396266313934303966653233633661b202386861736862726f776e3a3a6d61703a3a486173684d61703c4b2c562c533e3a3a656e7472793a3a6861633566643236653362313731346564b3023d6861736862726f776e3a3a6d61703a3a566163616e74456e7472793c4b2c562c533e3a3a696e736572743a3a6832663430376337386336316663386234b4023e6861736862726f776e3a3a7261773a3a5261775461626c653c543e3a3a726573657276655f7265686173683a3a6836393838383263396365666231343762b502523c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a4861736844423c482c543e3e3a3a72656d6f76653a3a6834343961373437343133653934373134b602543c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a4861736844423c482c543e3e3a3a636f6e7461696e733a3a6836613232666166626466643133653064b702583c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a41734861736844423c482c543e3e3a3a61735f686173685f64623a3a6831303435346136373839353264626566b802a901636f72653a3a7074723a3a64726f705f696e5f706c6163653c6d656d6f72795f64623a3a4d656d6f727944423c73705f72756e74696d653a3a7472616974733a3a426c616b6554776f3235362c6d656d6f72795f64623a3a486173684b65793c73705f72756e74696d653a3a7472616974733a3a426c616b6554776f3235363e2c616c6c6f633a3a7665633a3a5665633c75383e3e3e3a3a6830313666303233366232343132373036b9025c3c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a41734861736844423c482c543e3e3a3a61735f686173685f64625f6d75743a3a6862353561343564316233626532616638ba02523c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a4861736844425265663c482c543e3e3a3a6765743a3a6833666134393265626263313234643331bb02573c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a4861736844425265663c482c543e3e3a3a636f6e7461696e733a3a6832353132323963613832383432363161bc02613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6835356538336166333663326664663035bd02613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6836366136613134663532333430396563be02613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6836656237306566616438356130326136bf02613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a496e746f497465723c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6830653166636430626666306463643362c002763c70616c6c65745f626f756e746965733a3a43616c6c3c543e206173206672616d655f737570706f72743a3a7472616974733a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6837333134666566333966323865373037c1022e6672616d655f73797374656d3a3a656e737572655f7369676e65643a3a6839343964386432313865623034363961c2027d70616c6c65745f626f756e746965733a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f626f756e746965733a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6830316431626334633937303137663333c302b60170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a52657365727661626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a726573657276653a3a6864633331623132306161326533656433c4025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6865636133326566366233613338363261c502386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6866656538323763633632613763386363c602456672616d655f737570706f72743a3a7472616974733a3a456e737572654f726967696e3a3a656e737572655f6f726967696e3a3a6832613563363731373162363064633563c7024573705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a617070656e643a3a6836363166386537346163613530663636c8025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6835333133343234393238633635316166c902386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6861636633653336613230613037376439ca02ad0170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a7472616e736665723a3a6865396164326362343735366132323265cb02bd0170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a52657365727661626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a736c6173685f72657365727665643a3a6834326431633664613265613535356166cc026d6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a76616c75653a3a53746f7261676556616c75653c5072656669782c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a6d75746174653a3a6865303635646432626431333966613665cd024873705f72756e74696d653a3a7472616974733a3a4163636f756e744964436f6e76657273696f6e3a3a696e746f5f6163636f756e743a3a6864613330323036363463316562626164ce026d6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a76616c75653a3a53746f7261676556616c75653c5072656669782c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a6d75746174653a3a6866373065393061653031306163623163cf027b3c70616c6c65745f70726f78793a3a70616c6c65743a3a43616c6c3c543e206173206672616d655f737570706f72743a3a7472616974733a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6863323436633639653065323733663230d0025370616c6c65745f70726f78793a3a3c696d706c2070616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e3e3a3a66696e645f70726f78793a3a6836643264353862306537313934316562d102870170616c6c65745f70726f78793a3a70616c6c65743a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f70726f78793a3a70616c6c65743a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6833613734306530326565636236353064d2025170616c6c65745f70726f78793a3a3c696d706c2070616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e3e3a3a646f5f70726f78793a3a6861626666386330363533623131643365d3025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6864663863313664333937366561663565d402386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6830313536623363663230626436303530d50239636f72653a3a736c6963653a3a3c696d706c205b545d3e3a3a62696e6172795f7365617263683a3a6864656233663764633761666130346633d602386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6836363332326262393633366466346238d702437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6838343739323633656631306665336536d802483c5b545d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6862656566353337386265376665623366d9025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6838633632623463383365333765343632da02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6862616538653038373033623734343136db02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6862633935623837613635623363323666dc0248636f72653a3a7074723a3a64726f705f696e5f706c6163653c706f6c6b61646f745f72756e74696d653a3a43616c6c3e3a3a68323931336639633538376534623864322e33373630dd02743c706f6c6b61646f745f72756e74696d653a3a43616c6c206173206672616d655f737570706f72743a3a7472616974733a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6866376339643565333066316637366539de02703c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a636c61696d733a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6838383431316236383566343135386235df027a3c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a636c61696d733a3a4d6f64756c653c543e2061732073705f72756e74696d653a3a7472616974733a3a56616c6964617465556e7369676e65643e3a3a76616c69646174655f756e7369676e65643a3a6866313835343566303438646230356434e0027f73705f636f72653a3a63727970746f3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722073705f636f72653a3a63727970746f3a3a4163636f756e74496433323e3a3a7573696e675f656e636f6465643a3a6834646261363539653937333039303266e1024a706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a636c61696d733a3a4d6f64756c653c543e3a3a6574685f7265636f7665723a3a6837393037393133346164616130393932e2025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6864363861396235313731643365393731e3025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6834353966663333393336303734636463e402386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6866633037643535393132366639303334e5024973705f696f3a3a68617368696e673a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6b656363616b5f3235363a3a6864616135626130643861616139646232e6025573705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a736563703235366b315f65636473615f7265636f7665723a3a6864636565653466323033633166623335e7025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6861373938656635346334393466316334e8024870616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a646f5f72656d6f76655f766f7465723a3a6837613534613936326538626338313738e902386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836663265636539333735653538626434ea02b80170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a4c6f636b61626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a72656d6f76655f6c6f636b3a3a6866353463643063333039303236396433eb024570616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a69735f63616e6469646174653a3a6861376664643039656332306164643332ec02766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a6839393961666664333765366238666335ed024273705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6765743a3a6831363732623435356437613030613832ee02303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6861386633346532343837656333623162ef024673705f696f3a3a6d6973633a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a7072696e745f757466383a3a6832303234666164356461343966643938f0025270616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a72656d6f76655f616e645f7265706c6163655f6d656d6265723a3a6839336539653134363262316565623731f102386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6832626263616635393132643937623365f202386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6835346161376630656365626266353932f302910170616c6c65745f656c656374696f6e735f70687261676d656e3a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6831646263383135343261336565623361f402386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6831633739396334366139386635363639f502a2013c70616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a4368616e67654d656d626572733c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e3e3a3a6368616e67655f6d656d626572735f736f727465643a3a6863333430376532623132663963313036f60296013c70616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a4368616e67654d656d626572733c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e3e3a3a7365745f7072696d653a3a6833653861373335306333393533366464f7024470616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a646f5f70687261676d656e3a3a6839333534373134303735366363633234f802386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6839646134353138643739373663656438f90239636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6833316464633234363330386135626331fa026e3c6672616d655f737570706f72743a3a73746f726167653a3a5072656669784974657261746f723c543e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6839306636323863363234323766353731fb023c73705f6e706f735f656c656374696f6e733a3a70687261676d656e3a3a7365715f70687261676d656e3a3a6866653763663162343763383161613737fc022b616c6c6f633a3a736c6963653a3a6d657267655f736f72743a3a6832373766356437373265383862363166fd022c616c6c6f633a3a736c6963653a3a696e736572745f686561643a3a6839353035626533656131336430376139fe02546672616d655f737570706f72743a3a7472616974733a3a4368616e67654d656d626572733a3a636f6d707574655f6d656d626572735f646966665f736f727465643a3a6864373639333235343237623535383661ff02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a683931343463366132343662386133306180037c3c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a636c61696d733a3a50726576616c6964617465417474657374733c543e2061732073705f72756e74696d653a3a7472616974733a3a5369676e6564457874656e73696f6e3e3a3a76616c69646174653a3a686631623730353566656361646332643581035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68396262336162323333376464316366348203386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68653266656339393830336566663932308303753c285475706c65456c656d656e74302c5475706c65456c656d656e743129206173206672616d655f737570706f72743a3a7472616974733a3a4f6e496e697469616c697a653c426c6f636b4e756d6265723e3e3a3a6f6e5f696e697469616c697a653a3a683863366563343733643565666262323384035470616c6c65745f626162653a3a3c696d706c2070616c6c65745f626162653a3a70616c6c65743a3a50616c6c65743c543e3e3a3a646f5f696e697469616c697a653a3a68393031313835393863386331343736398503386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68346464386337303732326363373361378603386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68666665373861346335363539303865308703766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a68616333363936303163616465336262358803386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a683839343062383635373837343838396389034b73705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a636c6561725f7072656669783a3a68636634393736343337343039336533378a035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68383231643532353261656439636466398b03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68616130323337666437356664323533338c03706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a68633363396264323135316637346238378d03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68386335616564636663316638646336348e035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68646364383632626661303034663633378f03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68653165303339313735323330313334629003386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68643931303533376433363038393336379103386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6837663964633738333231383962666231920382023c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e2061732073705f7374616b696e673a3a6f6666656e63653a3a4f6e4f6666656e636548616e646c65723c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449642c283c542061732070616c6c65745f73657373696f6e3a3a436f6e6669673e3a3a56616c696461746f7249642c3c542061732070616c6c65745f73657373696f6e3a3a686973746f726963616c3a3a436f6e6669673e3a3a46756c6c4964656e74696669636174696f6e292c7536343e3e3a3a6f6e5f6f6666656e63653a3a683837653765363039393930313364383293034973705f696f3a3a6f6666636861696e5f696e6465783a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a7365743a3a68636561653863643562313830613534319403766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a686331383037313533356633646338326495035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a683933386336343338383963373230663696035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a683063626564653761313532393438336497035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a683630616630313838373337396132343198036d6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a76616c75653a3a53746f7261676556616c75653c5072656669782c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a6d75746174653a3a686633613361393035353865333365313999037a706f6c6b61646f745f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f7220706f6c6b61646f745f72756e74696d653a3a53657373696f6e4b6579733e3a3a6465636f64653a3a68656534346165336165636465343638329a03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68373333306132393265643230383130399b03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68393166363235366561623235373236659c033770616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a73746172745f6572613a3a68303064666132633662303936613639669d03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68363662663036373735633136383533379e03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68343835373832323630633236306662359f033570616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6e65775f6572613a3a6831343033303131653062646464626462a003766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a6830616364373330383063346464383766a103706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6835306437333539646535353961646534a203386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836353132613637363566313839353639a3034b70616c6c65745f73657373696f6e3a3a686973746f726963616c3a3a50726f76696e67547269653c543e3a3a67656e65726174655f666f723a3a6866613062373062353833656639636238a4035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6839373836663833313834623966356537a503386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836666563336566656234323238366436a6035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6865383832613836623933623138313534a703386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6862343966623735346136353530383765a803a1013c285475706c65456c656d656e74302c5475706c65456c656d656e74312c5475706c65456c656d656e74322c5475706c65456c656d656e74332c5475706c65456c656d656e74342c5475706c65456c656d656e7435292061732070616c6c65745f73657373696f6e3a3a53657373696f6e48616e646c65723c4149643e3e3a3a6f6e5f6e65775f73657373696f6e3a3a6864376661636132313263636566333234a903603c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a426c6f636b57656967687473206173206672616d655f737570706f72743a3a7472616974733a3a4765743c493e3e3a3a6765743a3a6835396263393435653263373465313736aa03753c285475706c65456c656d656e74302c5475706c65456c656d656e743129206173206672616d655f737570706f72743a3a7472616974733a3a4f6e496e697469616c697a653c426c6f636b4e756d6265723e3e3a3a6f6e5f696e697469616c697a653a3a6831666133666564653833383234353232ab035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6836373932393537613630613139303139ac034c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a636c61696d733a3a4d6f64756c653c543e3a3a70726f636573735f636c61696d3a3a6830643834343264333366626634343639ad035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6839303163353866646466353433383031ae03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6830373636366630623133336137666566af03746672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6765743a3a6837633366623861306633373432376130b0039d01706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a636c61696d733a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a636c61696d733a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6834613130373535623232396531663134b1035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6863383930363461363366316465363234b203746672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a6d61703a3a53746f726167654d61703c5072656669782c4861736865722c4b65792c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a696e736572743a3a6839373061383763393135386465323031b3035870616c6c65745f76657374696e673a3a3c696d706c2070616c6c65745f76657374696e673a3a70616c6c65743a3a50616c6c65743c543e3e3a3a7570646174655f6c6f636b3a3a6865356538333531313866306234633261b4034270616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a6836353133613337623862353530303463b5034470616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a6830303933313366303666306264326362b6034d70616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6834626432386134346437613463333534b7039c013c70616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d617850656e64696e6744656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6839636666316631353330663537373634b8039c013c70616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d617850726f7869657344656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6861363264626165653234336537663065b903a4013c70616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a50726f78794465706f736974466163746f7244656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835633736363432366363383639653833ba03a2013c70616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a50726f78794465706f7369744261736544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6832313336633039653537383934656233bb03483c706f6c6b61646f745f72756e74696d653a3a43616c6c20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6834663534653264313663303635353439bc037e70616c6c65745f70726f78793a3a70616c6c65743a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f70726f78793a3a70616c6c65743a3a43616c6c3c543e3e3a3a6465636f64653a3a6861323533316463633835653737373333bd037e70616c6c65745f70726f78793a3a70616c6c65743a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f70726f78793a3a70616c6c65743a3a43616c6c3c543e3e3a3a6465636f64653a3a6862346162346162366366336432316364be038a016672616d655f737570706f72743a3a776569676874733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f72206672616d655f737570706f72743a3a776569676874733a3a4469737061746368496e666f3e3a3a656e636f64655f746f3a3a6835653130633433366633656665336235bf033c70616c6c65745f73657373696f6e3a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6863616437373135646331623130633936c0033e70616c6c65745f73657373696f6e3a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6861396461363365363765616363333036c1036e3c70616c6c65745f73657373696f6e3a3a5f5f476574427974655374727563745175657565644b6579733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6831363538333962626465366135333039c2035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6834386637303037336261396437616439c30396013c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a436f6e7461696e733c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e3e3a3a636f6e7461696e733a3a6863366532336563353362646431336332c4034d706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a636c61696d733a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6839323431346233346432306361633731c5034f706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a636c61696d733a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6832636366396435396336623439366530c60358706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a636c61696d733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6865313136353432626239663234363332c703a3013c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a636c61696d733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a50726566697844656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6833633365626638613162646562656530c8034770616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6865386561343536333461363033333634c9034970616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6866346233323761663365326135363232ca03753c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a5f5f47657442797465537472756374566f74696e673c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6865366462353566333565313933326431cb03763c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a5f5f476574427974655374727563744d656d626572733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6832383763343539326366393239646566cc035270616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6836353761323739313431373934363265cd039f013c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d6f64756c65496444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863626365613235613233663838363839ce03a5013c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a446573697265644d656d6265727344656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864663737643336383337613332306562cf03a5013c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a566f74696e67426f6e644261736544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6836323262653630653339343430323731d0036a636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653c413e20666f7220266d757420463e3a3a63616c6c5f6f6e63653a3a6861636135363437333366376435383836d1035d3c706f6c6b61646f745f72756e74696d653a3a53657373696f6e4b6579732061732073705f72756e74696d653a3a7472616974733a3a4f70617175654b6579733e3a3a6765745f7261773a3a6837663863666435666561356439303937d2036a636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653c413e20666f7220266d757420463e3a3a63616c6c5f6f6e63653a3a6866363962626435656663366537383631d3035f3c70616c6c65745f73657373696f6e3a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6833626666356136303962326266313764d403653c70616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6833356639626233643038346339393834d5036a3c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6866636132313639646637383334303638d6035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6862653066643335623339626330643838d7035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6837343438343531353165646336646335d8034973705f696f3a3a68617368696e673a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a626c616b65325f3132383a3a6836373938353364663563393861396532d9033c70616c6c65745f696e64696365733a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6833306639303937393364613637366535da033e70616c6c65745f696e64696365733a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6838643939323762633730323536663137db034770616c6c65745f696e64696365733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6861323133336262373065356537353038dc0393013c70616c6c65745f696e64696365733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4465706f73697444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863353763626532623966633061363964dd033d70616c6c65745f6964656e746974793a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6831336536643533656436303837613538de033f70616c6c65745f6964656e746974793a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6833663462383563643138323533363666df036f3c70616c6c65745f6964656e746974793a3a5f5f47657442797465537472756374526567697374726172733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863393234396361643063626564613932e0036b3c70616c6c65745f6964656e746974793a3a5f5f47657442797465537472756374537562734f663c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864356538356631626131363838333132e1036c3c70616c6c65745f6964656e746974793a3a5f5f4765744279746553747275637453757065724f663c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6836633661613966626134376434626562e2036f3c70616c6c65745f6964656e746974793a3a5f5f476574427974655374727563744964656e746974794f663c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835356638333534346532663037656164e3034a636f72653a3a7074723a3a64726f705f696e5f706c6163653c70616c6c65745f6964656e746974793a3a4964656e74697479496e666f3e3a3a6835363532633932383730616537363761e4034870616c6c65745f6964656e746974793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6832306633653532663330306463343135e5039a013c70616c6c65745f6964656e746974793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d61785265676973747261727344656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6834313435633435646337336563646338e6039e013c70616c6c65745f6964656e746974793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a5375624163636f756e744465706f73697444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6861623366383532396636653366336464e70399013c70616c6c65745f6964656e746974793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4669656c644465706f73697444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864636637366133386663636364353630e80399013c70616c6c65745f6964656e746974793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a42617369634465706f73697444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6830663531393062393861653838643666e903850170616c6c65745f6964656e746974793a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f6964656e746974793a3a526567697374726174696f6e3c42616c616e63653e3e3a3a656e636f64655f746f3a3a6865333837336532643536343666613861ea03820170616c6c65745f6964656e746974793a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f6964656e746974793a3a4a756467656d656e743c42616c616e63653e3e3a3a656e636f64655f746f3a3a6836313661346630333738383731633432eb03573c70616c6c65745f6964656e746974793a3a44617461206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6839346437366261643037623237653735ec03573c70616c6c65745f6964656e746974793a3a44617461206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6862333836386437353330343962656362ed03573c70616c6c65745f6964656e746974793a3a44617461206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6832303736366165333465373666616163ee033d70616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6864306566633638646636366233643930ef033f70616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6839663835323535366665376264323335f0034870616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6835636338613863653034386235653135f1039b013c70616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d61785369676e61746f7269657344656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6832303365363332613866646430396362f2039a013c70616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4465706f736974466163746f7244656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864396231386162303333656133313730f30398013c70616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4465706f7369744261736544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6838643436663732383137323037366138f4033f70616c6c65745f74726561737572793a3a4d6f64756c653c542c493e3a3a63616c6c5f66756e6374696f6e733a3a6838326165393938666630636331353861f5034170616c6c65745f74726561737572793a3a4d6f64756c653c542c493e3a3a73746f726167655f6d657461646174613a3a6835666538313231366365396362663362f603703c70616c6c65745f74726561737572793a3a5f5f47657442797465537472756374417070726f76616c733c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862383932643864333533313934663438f7034a70616c6c65745f74726561737572793a3a4d6f64756c653c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6839643936633239303039666331396661f80399013c70616c6c65745f74726561737572793a3a4d6f64756c653c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d6f64756c65496444656661756c74427974654765747465723c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863306238616364646261363865323239f90395013c70616c6c65745f74726561737572793a3a4d6f64756c653c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4275726e44656661756c74427974654765747465723c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6865633262653666653539663761653333fa039c013c70616c6c65745f74726561737572793a3a4d6f64756c653c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a5370656e64506572696f6444656661756c74427974654765747465723c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6861646630373639353636333831653061fb039d013c70616c6c65745f74726561737572793a3a4d6f64756c653c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a50726f706f73616c426f6e6444656661756c74427974654765747465723c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6839643539366538343762393066393362fc03603c70616c6c65745f6964656e746974793a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6831643331336231336334666138643065fd03603c70616c6c65745f6d756c74697369673a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6861333432313564643131373737303232fe03623c70616c6c65745f74726561737572793a3a4d6f64756c653c542c493e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6837633863353133336365643263626230ff035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68336439633230316464653065333135318004763c70616c6c65745f6964656e746974793a3a43616c6c3c543e206173206672616d655f737570706f72743a3a7472616974733a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a68343834306132656462303138313331308104766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a68626564663437333565326366373265348204386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a683962396637383936356238653836303383047d70616c6c65745f6964656e746974793a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f6964656e746974793a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a683130643133663937396631343638623484045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68653063663231626531393462383464328504386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68646537643636636364656530373735308604386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a686463363165393636616564323834313587045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68653131643263386135343964343839348804386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68313334306262333666323966326562378904c20170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a52657365727661626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a726570617472696174655f72657365727665643a3a68616462666635313762333464663866618a04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68366364363233303036396533373834658b04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68373231663730343165363035663865618c0448636f72653a3a7074723a3a64726f705f696e5f706c6163653c706f6c6b61646f745f72756e74696d653a3a43616c6c3e3a3a68323931336639633538376534623864322e313936368d044770616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a656e737572655f736f727465645f616e645f696e736572743a3a68343335333836303531366237323937348e047d70616c6c65745f6d756c74697369673a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f6d756c74697369673a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a68323237653366396337616534383335348f043670616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a6f7065726174653a3a68616463633732353463656637653537349004437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a68376361303836333334393736623535399104706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a68343061396537663831636236326632619204386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a683633623765646561343538636333333093044570616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a73746f72655f63616c6c5f616e645f726573657276653a3a68323430386535656565666339343063669404386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a686566643932633663623038613836366595045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68323032383837323661363461666436389604386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68333131656566626538653064373865399704693c706f6c6b61646f745f72756e74696d653a3a43616c6c206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a683462393330303139653165316662623898043970616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a636c6561725f63616c6c3a3a686538346231626332646434613538343499045d70616c6c65745f626162653a3a3c696d706c2070616c6c65745f626162653a3a70616c6c65743a3a50616c6c65743c543e3e3a3a646f5f7265706f72745f65717569766f636174696f6e3a3a68613132646131633262386639373930639a043473705f72756e74696d653a3a7472616974733a3a486173683a3a686173685f6f663a3a68616230333232646265626164393335359b044b73705f636f6e73656e7375735f626162653a3a636865636b5f65717569766f636174696f6e5f70726f6f663a3a7b7b636c6f737572657d7d3a3a68616362316438626136393136623965309c045d3c73705f72756e74696d653a3a44697370617463684572726f7257697468506f7374496e666f3c543e20617320636f72653a3a636f6e766572743a3a46726f6d3c453e3e3a3a66726f6d3a3a68306431663965353836643261306238649d0495013c70616c6c65745f73657373696f6e3a3a686973746f726963616c3a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a4b65794f776e657250726f6f6653797374656d3c2873705f636f72653a3a63727970746f3a3a4b65795479706549642c44293e3e3a3a636865636b5f70726f6f663a3a68323730653566616534363162306534629e043d73705f61726974686d657469633a3a7065725f7468696e67733a3a50657262696c6c3a3a7371756172653a3a68613435383139626232663061646631369f04763c70616c6c65745f617574686f726974795f646973636f766572793a3a43616c6c3c543e206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a6865626466643235336163643433393530a004386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6861393962303137326439373231663330a104386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6864653331393230386662366432346235a204386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6865343363353732613638383430363436a304386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6832656465363336313862363431626363a4043c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6834336434353863643363326339653332a5046d6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a76616c75653a3a53746f7261676556616c75653c5072656669782c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a617070656e643a3a6830386461383561386636303133313438a604386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6864346436613861386633396238643038a7045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6839346462326262323766323730333833a8044d3c706f6c6b61646f745f72756e74696d653a3a43616c6c20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a68346635346532643136633036353534392e31393734a9045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6836636535656131383561353736636634aa04776672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a617070656e643a3a6835636131613035303530356235343434ab04a70170616c6c65745f7363686564756c65723a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f7363686564756c65723a3a5363686564756c656456323c43616c6c2c426c6f636b4e756d6265722c50616c6c6574734f726967696e2c4163636f756e7449643e3e3a3a656e636f64655f746f3a3a6832326166356638373438666136333132ac044170616c6c65745f626162653a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a6836333839303937316532626565666261ad044370616c6c65745f626162653a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a6864623934656133363064393565313530ae044c70616c6c65745f626162653a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6833323335323762663566633439643335af04a2013c70616c6c65745f626162653a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4578706563746564426c6f636b54696d6544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835376365393532636533626636323130b0049e013c70616c6c65745f626162653a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a45706f63684475726174696f6e44656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6834336337333932323031383333613036b1048f0170616c6c65745f64656d6f63726163793a3a766f74653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f64656d6f63726163793a3a766f74653a3a4163636f756e74566f74653c42616c616e63653e3e3a3a6465636f64653a3a6862323037393738343931626230316262b204920170616c6c65745f64656d6f63726163793a3a766f74653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f64656d6f63726163793a3a766f74653a3a4163636f756e74566f74653c42616c616e63653e3e3a3a656e636f64655f746f3a3a6836623835616336316263393232313361b3043e70616c6c65745f7363686564756c65723a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6834613261623933666330363330633631b4044070616c6c65745f7363686564756c65723a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6836636632666533343364346461373734b504743c70616c6c65745f7363686564756c65723a3a5f5f4765744279746553747275637453746f7261676556657273696f6e3c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864323633666330323330333033626436b6043f7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64655f746f3a3a6833616463366263363537346437313436b7043173705f6e706f735f656c656374696f6e733a3a746f5f737570706f7274733a3a6861666439373331643136633831316439b80437616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6837653863323639363931353362363861b9043273705f6e706f735f656c656374696f6e733a3a73657475705f696e707574733a3a6837656238313935316432393166323736ba0468636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4d75743c413e20666f7220266d757420463e3a3a63616c6c5f6d75743a3a6864363661356139383836363239653032bb044d73705f6e706f735f656c656374696f6e733a3a566f7465723c4163636f756e7449643e3a3a7472795f6e6f726d616c697a655f656c65637465643a3a6862653563363137363963393538356463bc045a3c616c6c6f633a3a7665633a3a5665633c753132383e2061732073705f61726974686d657469633a3a4e6f726d616c697a61626c653c753132383e3e3a3a6e6f726d616c697a653a3a6839303136313262656538323130313339bd044a73705f6e706f735f656c656374696f6e733a3a41737369676e6d656e743c4163636f756e7449642c503e3a3a696e746f5f7374616b65643a3a6833633237383735663837336439383439be044c73705f6e706f735f656c656374696f6e733a3a41737369676e6d656e743c4163636f756e7449642c503e3a3a7472795f6e6f726d616c697a653a3a6864306632373462636138386433636534bf045073705f6e706f735f656c656374696f6e733a3a5374616b656441737369676e6d656e743c4163636f756e7449643e3a3a7472795f6e6f726d616c697a653a3a6838393566656563623433653033623266c0043873705f6e706f735f656c656374696f6e733a3a62616c616e63696e673a3a62616c616e63653a3a6865653666636530363964346438663566c1042c616c6c6f633a3a736c6963653a3a696e736572745f686561643a3a6833386661393063363663633439663732c2043c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6839623564343334343237623536333236c3043f70616c6c65745f7363686564756c65723a3a4d6f64756c653c543e3a3a646f5f63616e63656c5f6e616d65643a3a6830646634316432383231353463363938c4045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6836306633616134616634663532316234c504386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6834363936613138316330633037626238c6044f3c706f6c6b61646f745f72756e74696d653a3a4f726967696e43616c6c657220617320636f72653a3a636d703a3a5061727469616c45713e3a3a6e653a3a6861353539633235333930353666633537c704386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6836646634616365623336623264343462c8047f70616c6c65745f7363686564756c65723a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f7363686564756c65723a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6832653238613266313864373332313135c9044170616c6c65745f7363686564756c65723a3a4d6f64756c653c543e3a3a646f5f7363686564756c655f6e616d65643a3a6837386236343764333735336132633966ca044373705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a726561643a3a6831613263386662613833353065656134cb04433c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6832303430316436366632336562393734cc04433c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6864323062653836376362326563383664cd04a201636f72653a3a7074723a3a64726f705f696e5f706c6163653c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c616c6c6f633a3a72633a3a52633c636f72653a3a63656c6c3a3a52656643656c6c3c73705f6e706f735f656c656374696f6e733a3a6e6f64653a3a4e6f64653c73705f636f72653a3a63727970746f3a3a4163636f756e74496433323e3e3e3e3e3a3a6837363339396666656266653065656630ce043d73705f636f72653a3a746f5f7375627374726174655f7761736d5f666e5f72657475726e5f76616c75653a3a6862323164393930633331366331653238cf043d73705f636f72653a3a746f5f7375627374726174655f7761736d5f666e5f72657475726e5f76616c75653a3a6864613162393666633238333736316235d0047873705f636f72653a3a63727970746f3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f636f72653a3a63727970746f3a3a4163636f756e74496433323e3a3a6465636f64653a3a6839653731326130306137363933643834d1042e616c6c6f633a3a7261775f7665633a3a66696e6973685f67726f773a3a6838636564306562626163616539663337d204553c70616c6c65745f62616c616e6365733a3a44757374436c65616e65723c542c493e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6831393635353932326232643331663061d304613c70616c6c65745f7363686564756c65723a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6830643665333666343930383536653763d404643c70616c6c65745f626162653a3a70616c6c65743a3a50616c6c65743c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6864323534363337313136316339346264d504773c70616c6c65745f7363686564756c65723a3a43616c6c3c543e206173206672616d655f737570706f72743a3a7472616974733a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6838333861376663303063633431663265d6043b70616c6c65745f7363686564756c65723a3a4d6f64756c653c543e3a3a646f5f7363686564756c653a3a6866323966343436646662376466373666d7046b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7533323e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6830643630363462633439636166353032d8046b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7533323e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6861356438653733353039373863343265d9046b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7536343e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6834383032623466376565646238316231da046b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7536343e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6865346463656637306165656164633965db046c3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c753132383e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6866333633353564336365303233666139dc04713c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163745265663c7536343e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6837383339636535356637343265343164dd0431636f72653a3a70616e69636b696e673a3a6173736572745f6661696c65643a3a6866323565313332343861393263626530de0431636f72653a3a70616e69636b696e673a3a6173736572745f6661696c65643a3a6834643763613939306565626363626661df043d706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a426c6f636b576569676874733a3a6765743a3a6839336264306338383566663261346531e004960173705f7374616b696e673a3a6f6666656e63653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f7374616b696e673a3a6f6666656e63653a3a4f6666656e636544657461696c733c5265706f727465722c4f6666656e6465723e3e3a3a6465636f64653a3a6835643836663139373036633835393739e104766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a6837633634353565626638336465343134e2043770616c6c65745f617574686f72736869703a3a4d6f64756c653c543e3a3a617574686f723a3a6838386434346435343262333762663130e3043b70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a7265776172645f62795f6964733a3a6833613233366363376165393766373839e4043f70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e3a3a6e6f74655f617574686f72736869703a3a6862656335633264633061643630396338e504386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6865373630323731363931666466336637e604386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6836613936376334333532623439653034e7044970616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a636f6d707574655f6665655f7261773a3a6833313031393864326262626331316266e804466672616d655f737570706f72743a3a776569676874733a3a576569676874546f466565506f6c796e6f6d69616c3a3a63616c633a3a6865373736303062323863386331366232e904386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6839336333623635346562636164666565ea044673705f61726974686d657469633a3a68656c706572735f3132386269743a3a6d756c7469706c795f62795f726174696f6e616c3a3a6836323434636635306439633764393262eb046a6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a76616c75653a3a53746f7261676556616c75653c5072656669782c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a7075743a3a6832313162326636663932336336663534ec046a6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a76616c75653a3a53746f7261676556616c75653c5072656669782c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a7075743a3a6832333463393638646133323561613739ed046a6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a76616c75653a3a53746f7261676556616c75653c5072656669782c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a7075743a3a6838303130323133373864313238393238ee046a6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a76616c75653a3a53746f7261676556616c75653c5072656669782c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a7075743a3a6862376561653564663330316439393734ef046f3c73705f72756e74696d653a3a67656e657269633a3a6469676573743a3a4469676573744974656d3c486173683e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6832626337626565653336326334336162f0046a6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a76616c75653a3a53746f7261676556616c75653c5072656669782c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a7075743a3a6863303061626262333264383135303233f1046d6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a76616c75653a3a53746f7261676556616c75653c5072656669782c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a6d75746174653a3a6863666364363534303031613462356464f204386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6830326436653762386232393466663866f304386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6865303732613930666335646532396335f404766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a6834386465396533616565656337346163f504766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a6865313039633563643564363934653166f6043f70616c6c65745f6f6666656e6365733a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6832326533616338643335626530323932f704773c70616c6c65745f6f6666656e6365733a3a5f5f476574427974655374727563745265706f72747342794b696e64496e6465783c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6866343532663030373334383733316630f804753c70616c6c65745f6f6666656e6365733a3a5f5f4765744279746553747275637444656665727265644f6666656e6365733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6861356461326230653532363737636462f9046c3c70616c6c65745f6f6666656e6365733a3a5f5f476574427974655374727563745265706f7274733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6838313236373063623331663966383931fa044c73705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a737232353531395f7665726966793a3a6830613965313635396366646564303966fb046b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7531363e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6832653266643130383536646633363061fc046b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7531363e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6839343765653431363262323061613237fd047f7061726974795f7363616c655f636f6465633a3a636f6465633a3a696e6e65725f7475706c655f696d706c3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f72202851302c5230293e3a3a656e636f64655f746f3a3a6865373061616163386239666130363838fe044a70616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6830393632663566333561323836306233ff0481013c70616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a5f5f476574427974655374727563744e6578744665654d756c7469706c6965723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683331323734323632373466396464306180055370616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a68303761656332643535353339393662658105a3013c70616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a576569676874546f46656544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a686466393631616138663536343965313782056d3c73705f61726974686d657469633a3a7065725f7468696e67733a3a50657262696c6c2061732073705f61726974686d657469633a3a7065725f7468696e67733a3a5065725468696e673e3a3a66726f6d5f726174696f6e616c3a3a68383663353535316139383136366332658305aa013c70616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a5472616e73616374696f6e4279746546656544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a686637306535626133336433333937313384056b3c70616c6c65745f6f6666656e6365733a3a43616c6c3c543e206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a68383863306366663831316637316639658505860170616c6c65745f7374616b696e673a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f7374616b696e673a3a4578706f737572653c4163636f756e7449642c42616c616e63653e3e3a3a6465636f64653a3a686331383030646435646334643637613086055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68663262386133633435316564373834348705386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a683966363261303166333530653539376688056c3c636f72653a3a697465723a3a61646170746572733a3a6d61703a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a7472795f666f6c643a3a683265393663626364336636313832623389055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68313262333364613838313462333930318a05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68643763383630303539346561306131328b054773705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6e6578745f6b65793a3a68313461663835393261663033343962308c056e3c6672616d655f737570706f72743a3a73746f726167653a3a5072656669784974657261746f723c543e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a68393763346161356563383833653037328d056e3c6672616d655f737570706f72743a3a73746f726167653a3a5072656669784974657261746f723c543e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a68643561393230653530363430303762388e05aa0173705f72756e74696d653a3a7472616e73616374696f6e5f76616c69646974793a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722073705f72756e74696d653a3a7472616e73616374696f6e5f76616c69646974793a3a5472616e73616374696f6e56616c69646974794572726f723e3a3a656e636f64655f746f3a3a68333733393737303633633263373539328f053473705f72756e74696d653a3a7472616974733a3a486173683a3a686173685f6f663a3a683562323837343836313038356464333490053e73705f72756e74696d653a3a67656e657269633a3a656e636f64655f776974685f7665635f7072656669783a3a6865313839373563656665383534623036910591017061726974795f7363616c655f636f6465633a3a636f6465633a3a696e6e65725f7475706c655f696d706c3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f7220284b302c4c302c4d302c4e302c4f302c50302c51302c5230293e3a3a656e636f64655f746f3a3a6836313165353933613362643063666566920556616c6c6f633a3a7665633a3a73706c6963653a3a3c696d706c20616c6c6f633a3a7665633a3a647261696e3a3a447261696e3c542c413e3e3a3a6d6f76655f7461696c3a3a683230316331323265376166613434316193057d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683064313361386638656634663465356194057d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68333537373339303165376334353334379505483c5b545d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a683339613336303035363632613033653796057d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683436363230653539666334613733303297057d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683861643761303761393437333532643598057d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683933373561386462396163306136636299057d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68613531623630613964323164643464669a057d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68613934383166663564333230643134669b057d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68643266346534643665346335393534629c057d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68643332623666633033313831643832349d057d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68653266306466316236316335346162389e057d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68653938356566663732356331313734399f055a6672616d655f73797374656d3a3a657874656e73696f6e733a3a636865636b5f7765696768743a3a436865636b5765696768743c543e3a3a646f5f7072655f64697370617463683a3a6862613239353437326664666130663865a005566672616d655f73797374656d3a3a657874656e73696f6e733a3a636865636b5f7765696768743a3a436865636b5765696768743c543e3a3a646f5f76616c69646174653a3a6836346530343863656535626261613033a1055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6864323337336331306362393638323834a205386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836353338613935353563323364323263a30552616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a656e7472793a3a566163616e74456e7472793c4b2c563e3a3a696e736572743a3a6837653236653931393464303138396139a4053b6672616d655f737570706f72743a3a73746f726167653a3a776974685f7472616e73616374696f6e3a3a6862333062653837363832313266366661a5055073705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a73746172745f7472616e73616374696f6e3a3a6837353866333538383836366262313833a6054a3c706f6c6b61646f745f72756e74696d653a3a4f726967696e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6830316439303835303930643336646266a7052c6672616d655f73797374656d3a3a656e737572655f726f6f743a3a6862393135316334303165306664316163a8055373705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a726f6c6c6261636b5f7472616e73616374696f6e3a3a6831613238343538616562323333623365a9055173705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a636f6d6d69745f7472616e73616374696f6e3a3a6865366663303539313834383933383230aa05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6831643937633731653330323337633762ab05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6832643961383431353139353338653735ac05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6834373637326331373635326364666137ad05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6835383234346161313063306332663761ae05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6835393565626236303631393766363431af05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6835623730313937313632333432333932b005386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6835633265386438666234383431343835b105386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836613939653831643238323934356462b205386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836623961626330303432363963353738b305386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6837356131316635626461616532333934b405386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6838346337303766323939666337666165b505910173705f72756e74696d653a3a67656e657269633a3a6469676573743a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f72756e74696d653a3a67656e657269633a3a6469676573743a3a4469676573743c486173683e3e3a3a6465636f64653a3a6866666336666134643839666262333835b605386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6864663336393061613039396331623435b705386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6866323063323866616466663064373537b805386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6866366239393637393833333632396137b905386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6830316136386237323036336239633663ba05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6830643638343464326239303732323166bb05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6830663565303730346330626235653361bc05a80170616c6c65745f64656d6f63726163793a3a74797065733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f64656d6f63726163793a3a74797065733a3a5265666572656e64756d496e666f3c426c6f636b4e756d6265722c486173682c42616c616e63653e3e3a3a656e636f64655f746f3a3a6833393132613565306130396636393732bd05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6832343739386131613963336566386332be05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6832363339643130326162623731343763bf05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6832366263653762613239363739393930c005386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6832376531366333376562353033343765c105386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6832656230313163333037663435396531c205386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6834643235363165353934383638396537c305386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6836306331653766613032373836613262c405386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6836653639353430666537393530633838c505386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6838363836393238386266666238313865c605386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6839326638653363346263393337653339c705386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6839366337303361393739623433363232c805386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6863303235313133316334333266626566c905386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6863326461626430396566656437343665ca05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6863616539373034656664623065633761cb05706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6833653836366563376335633738386664cc05706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6866376137383338643362313433613164cd055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6862386636626264613439633538303738ce05746672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6765743a3a6837333564613637336162323864636436cf055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6862623638393463303330663962663533d005776672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a696e736572743a3a6833616664303937343536316235653066d1055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6832616531656461653438336631336333d205776672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a696e736572743a3a6838376165303239623432383536346539d3055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6831336432646263346231336162303132d4053c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6863396137663838326432336334333939d5053e70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6832303863386262643862623133393935d605723c70616c6c65745f7374616b696e673a3a5f5f4765744279746553747275637453746f7261676556657273696f6e3c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835366430613662623731386566376637d7056d3c70616c6c65745f7374616b696e673a3a5f5f476574427974655374727563745370616e536c6173683c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6836623764343038353064363961333834d805743c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374556e6170706c696564536c61736865733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6830353866643664613931386235616134d905723c70616c6c65745f7374616b696e673a3a5f5f4765744279746553747275637445726173546f74616c5374616b653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6830393732306461303364366661303734da05743c70616c6c65745f7374616b696e673a3a5f5f4765744279746553747275637445726173526577617264506f696e74733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6830313730626366343634353064313732db05763c70616c6c65745f7374616b696e673a3a5f5f476574427974655374727563744572617356616c696461746f7250726566733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6866323537386534666539396561646666dc05763c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374457261735374616b657273436c69707065643c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6837396262346565386539666132613537dd05713c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374496e76756c6e657261626c65733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864373564656237393562663337356534de05703c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374486973746f727944657074683c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862393438633139346433393264303231df054770616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6864333731303266376631656233626462e0059a013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d61784e6f6d696e6174696f6e7344656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862316563666466336362353732636634e105ac013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f7244656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835366432366438313262626561373339e2059e013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a536c61736844656665724475726174696f6e44656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864366363633532663232303464303266e3059b013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a426f6e64696e674475726174696f6e44656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6866383436366565316631636661613531e4059a013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a53657373696f6e7350657245726144656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6833633864336336663064643236656437e5055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6831613962636330343532353134396239e605386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6838623130303734623563643737623936e7053c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6866346262366538363138313361393064e8053f7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64655f746f3a3a6839396539393962343666316539663831e905d0013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e206173206672616d655f656c656374696f6e5f70726f76696465725f737570706f72743a3a456c656374696f6e4461746150726f76696465723c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449642c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a426c6f636b4e756d6265723e3e3a3a766f746572733a3a6861613465663133393363346436366538ea0539636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6830616136646231633364343130616636eb056e3c6672616d655f737570706f72743a3a73746f726167653a3a5072656669784974657261746f723c543e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6861383361306561303339653736323336ec0539636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6839613363303536613561633134353838ed0539636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6835363937353737356631643834343931ee055270616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a736c61736861626c655f62616c616e63655f6f665f666e3a3a7b7b636c6f737572657d7d3a3a6832656162393334393363636135636163ef05d1013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e206173206672616d655f656c656374696f6e5f70726f76696465725f737570706f72743a3a456c656374696f6e4461746150726f76696465723c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449642c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a426c6f636b4e756d6265723e3e3a3a746172676574733a3a6833373539653864663034336232303035f005cc013c70616c6c65745f7374616b696e673a3a53746173684f663c543e2061732073705f72756e74696d653a3a7472616974733a3a436f6e766572743c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449642c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e3e3e3a3a636f6e766572743a3a6833333639353361653765356138333730f105766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a6832313230346639623837663461353834f2054970616c6c65745f7374616b696e673a3a736c617368696e673a3a496e7370656374696e675370616e733c543e3a3a6572615f7370616e3a3a6833353231613262323063323434653335f3057d3c542061732070616c6c65745f7374616b696e673a3a53657373696f6e496e746572666163653c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e3e3a3a64697361626c655f76616c696461746f723a3a6865313636356666353965663735656635f4055e70616c6c65745f7374616b696e673a3a736c617368696e673a3a496e7370656374696e675370616e733c543e3a3a636f6d706172655f616e645f7570646174655f7370616e5f736c6173683a3a6862326431313064646332393230633263f505386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6864306137353530333533356338386336f6054370616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a636c6561725f6572615f696e666f726d6174696f6e3a3a6835366537623239626234643366313734f705706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6831373762373438633364363031303364f805706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6837316635336364323239333131663934f9055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6861376666363138303133663662613333fa053870616c6c65745f7374616b696e673a3a736c617368696e673a3a6170706c795f736c6173683a3a6865396138653035383033373036363936fb05363c5420617320636f72653a3a636f6e766572743a3a496e746f3c553e3e3a3a696e746f3a3a6831376533363964343461323066633165fc05633c54206173207061726974795f7363616c655f636f6465633a3a64657074685f6c696d69743a3a4465636f64654c696d69743e3a3a6465636f64655f616c6c5f776974685f64657074685f6c696d69743a3a6866313931336463333735633731643032fd05593c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6836366231633538313031306538666335fe05593c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6861316164323531636364396565643633ff05653c73705f747269653a3a6e6f64655f6865616465723a3a4e6f6465486561646572206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a683739303464376339343638306565336180065f3c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a68383132653264383139316437363663668106753c70616c6c65745f7374616b696e673a3a43616c6c3c543e206173206672616d655f737570706f72743a3a7472616974733a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a683066363038653139616363383838396582067b70616c6c65745f7374616b696e673a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f7374616b696e673a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a68666132613161363532643639346335358306566672616d655f73797374656d3a3a3c696d706c206672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3e3a3a696e635f636f6e73756d6572733a3a683935616432666537343033363537643984065c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68336638313234363166356261656134308506b50170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a4c6f636b61626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a7365745f6c6f636b3a3a683132343765663161663238623839663686063870616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6b696c6c5f73746173683a3a68616361383233333830336231373834358706386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a683433623430353133663736656534663688066b3c636f72653a3a697465723a3a61646170746572733a3a526573756c745368756e743c492c453e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a686538663162333530633139393962663589063970616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d616b655f7061796f75743a3a68616466396639623663313633313636648a06566672616d655f73797374656d3a3a3c696d706c206672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3e3a3a6465635f636f6e73756d6572733a3a68653130613938326666366230323637398b06ba0170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a6465706f7369745f696e746f5f6578697374696e673a3a68353564396361386662633731346566668c063970616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a6465706f7369745f6c6f673a3a68653036386231613066313364316639398d06733c706f6c6b61646f745f72756e74696d653a3a4e706f73436f6d70616374536f6c7574696f6e31362061732073705f6e706f735f656c656374696f6e733a3a436f6d70616374536f6c7574696f6e3e3a3a696e746f5f61737369676e6d656e743a3a68383662656637653638616137393934358e066b3c636f72653a3a697465723a3a61646170746572733a3a526573756c745368756e743c492c453e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a68303439363935306666643166343161348f06753c73705f72756e74696d653a3a67656e657269633a3a6865616465723a3a4865616465723c4e756d6265722c486173683e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a686434613438666561653964313739346590068e0173705f66696e616c6974795f6772616e6470613a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722073705f66696e616c6974795f6772616e6470613a3a45717569766f636174696f6e50726f6f663c482c4e3e3e3a3a656e636f64655f746f3a3a68326336633638653366333463383831379106693c706f6c6b61646f745f72756e74696d653a3a4e706f73436f6d70616374536f6c7574696f6e3136206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6833376233626338346637333131316562920637636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4d75743a3a63616c6c5f6d75743a3a68306163316662333937636132363265639306773c706f6c6b61646f745f72756e74696d653a3a4f726967696e20617320636f72653a3a636f6e766572743a3a46726f6d3c706f6c6b61646f745f72756e74696d653a3a4f726967696e43616c6c65723e3e3a3a66726f6d3a3a7b7b636c6f737572657d7d3a3a6864353432643866363432373837353136940648636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63657b7b767461626c652e7368696d7d7d3a3a68373561353066643937393262346164649506693c706f6c6b61646f745f72756e74696d653a3a4e706f73436f6d70616374536f6c7574696f6e3136206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68336666643431633331376139313436339606693c706f6c6b61646f745f72756e74696d653a3a4e706f73436f6d70616374536f6c7574696f6e3136206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68356534653061306461343764373239629706723c706f6c6b61646f745f72756e74696d653a3a4e706f73436f6d70616374536f6c7574696f6e31362061732073705f6e706f735f656c656374696f6e733a3a436f6d70616374536f6c7574696f6e3e3a3a756e697175655f746172676574733a3a6865386439303736323031383930613532980646616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a7365743a3a42547265655365743c543e3a3a696e736572743a3a68373830363234353663656366626435659906733c706f6c6b61646f745f72756e74696d653a3a4e706f73436f6d70616374536f6c7574696f6e31362061732073705f6e706f735f656c656374696f6e733a3a436f6d70616374536f6c7574696f6e3e3a3a66726f6d5f61737369676e6d656e743a3a68323861626238346565343235633038619a065d636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e3c413e20666f722026463e3a3a63616c6c3a3a68316431306565363665383137303163649b0654636f72653a3a7074723a3a64726f705f696e5f706c6163653c706f6c6b61646f745f72756e74696d653a3a4e706f73436f6d70616374536f6c7574696f6e31363e3a3a68373239643065616231303334343434649c0677706f6c6b61646f745f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f7220706f6c6b61646f745f72756e74696d653a3a4576656e743e3a3a656e636f64655f746f3a3a68343037663536306235326365623031319d067373705f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a656e636f64655f746f3a3a68383332353664653833633230623434349e064a706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f6672616d655f73797374656d3a3a68633533306532643962323361356432329f064e706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f7363686564756c65723a3a6830343563623461633633616633326532a0064c706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f696e64696365733a3a6836363263636437316231393864633661a1064d706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f62616c616e6365733a3a6834643537343163373334653762353235a2064c706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f7374616b696e673a3a6863366363363534326164313330383764a3064d706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f6f6666656e6365733a3a6865653236326230333833363332313837a4064c706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f73657373696f6e3a3a6832383136353735303865316336386130a5064c706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f6772616e6470613a3a6864643434393862306234306465613630a6064e706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f696d5f6f6e6c696e653a3a6830396239663264316464666363366366a7064e706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f64656d6f63726163793a3a6863383939333330653036343133636338a80659706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f636f6c6c6563746976655f496e7374616e6365313a3a6830663736633337636262633466623766a90657706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f656c656374696f6e735f70687261676d656e3a3a6833316566313062376164653065643930aa0659706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f6d656d626572736869705f496e7374616e6365313a3a6864393739616531376563313166363633ab064d706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f74726561737572793a3a6839373430313532346666616632383537ac0644706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f636c61696d733a3a6833633236623266643062646136343637ad064c706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f76657374696e673a3a6837306133653037343936393464343732ae064c706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f7574696c6974793a3a6863613261393336373431333365393038af064d706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f6964656e746974793a3a6835343436376138376564343435336165b0064a706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f70726f78793a3a6866346565396162613464333736636138b1064d706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f6d756c74697369673a3a6835313237353862393831666339386533b2064d706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f626f756e746965733a3a6863383165663062323734326364663161b30649706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f746970733a3a6838613230663464626366393935333833b40662706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a6830333665383266366133646635623532b506eb01636f72653a3a7074723a3a64726f705f696e5f706c6163653c3c706f6c6b61646f745f72756e74696d653a3a4f726967696e206173206672616d655f737570706f72743a3a7472616974733a3a4f726967696e54726169743e3a3a6164645f66696c7465723c70616c6c65745f70726f78793a3a3c696d706c2070616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c706f6c6b61646f745f72756e74696d653a3a52756e74696d653e3e3a3a646f5f70726f78793a3a7b7b636c6f737572657d7d3e3a3a7b7b636c6f737572657d7d3e3a3a6835653732376263343238633233386536b6066c3c706f6c6b61646f745f72756e74696d653a3a4f726967696e206173206672616d655f737570706f72743a3a7472616974733a3a4f726967696e54726169743e3a3a6164645f66696c7465723a3a7b7b636c6f737572657d7d3a3a6833663166663730393666313564653234b70648636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63657b7b767461626c652e7368696d7d7d3a3a6861386533653264643231363530323735b8069f0170616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a756e7369676e65643a3a3c696d706c2070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a50616c6c65743c543e3e3a3a756e7369676e65645f7072655f64697370617463685f636865636b733a3a6838353734646366663966393261353232b9068a0170616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a3c696d706c2070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a50616c6c65743c543e3e3a3a666561736962696c6974795f636865636b3a3a6839666265626461343831626234663530ba064b73705f696f3a3a6d6973633a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a72756e74696d655f76657273696f6e3a3a6863393133363666363361356239393737bb062c6672616d655f73797374656d3a3a656e737572655f6e6f6e653a3a6838666165653839613434383838393631bc067b70616c6c65745f696e64696365733a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f696e64696365733a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6839636665643530373033653237643538bd06746672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a6d61703a3a53746f726167654d61703c5072656669782c4861736865722c4b65792c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a6d75746174653a3a6861636534633130646463376238343565be067f6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a6d61703a3a53746f726167654d61703c5072656669782c4861736865722c4b65792c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a7472795f6d75746174655f6578697374733a3a6837633334313964376563323739653062bf06810170616c6c65745f617574686f72736869703a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f617574686f72736869703a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6863636331393630363137353164623866c0067b70616c6c65745f73657373696f6e3a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f73657373696f6e3a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6831643266363066313230343139616235c1064470616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a646f5f7265706f72745f65717569766f636174696f6e3a3a6834633531326432636333643438623334c206706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6866666530636335643365353938343235c306773c70616c6c65745f64656d6f63726163793a3a43616c6c3c543e206173206672616d655f737570706f72743a3a7472616974733a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6833316537376466316466336237366465c4067a3c70616c6c65745f636f6c6c6563746976653a3a43616c6c3c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6861346366646165313636653465313362c5067a3c70616c6c65745f636f6c6c6563746976653a3a43616c6c3c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6862636137306562356438353963643832c606723c70616c6c65745f746970733a3a43616c6c3c543e206173206672616d655f737570706f72743a3a7472616974733a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6834656439643435616462366261393364c7067a3c70616c6c65745f6d656d626572736869703a3a43616c6c3c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6838383664383761393533303662363932c8068b0173705f66696e616c6974795f6772616e6470613a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f66696e616c6974795f6772616e6470613a3a45717569766f636174696f6e50726f6f663c482c4e3e3e3a3a6465636f64653a3a6834663162393161383030666132333133c9067a70616c6c65745f636f6c6c6563746976653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f636f6c6c6563746976653a3a43616c6c3c542c493e3e3a3a6465636f64653a3a6862373233643533353561376434613365ca06820170616c6c65745f7574696c6974793a3a70616c6c65743a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f7574696c6974793a3a70616c6c65743a3a43616c6c3c543e3e3a3a6465636f64653a3a6839313231626235656464613035323664cb068b0173705f66696e616c6974795f6772616e6470613a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f66696e616c6974795f6772616e6470613a3a45717569766f636174696f6e50726f6f663c482c4e3e3e3a3a6465636f64653a3a6862363265666136613065656162303061cc067a70616c6c65745f636f6c6c6563746976653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f636f6c6c6563746976653a3a43616c6c3c542c493e3e3a3a6465636f64653a3a6834313734613634613561363034333835cd06820170616c6c65745f7574696c6974793a3a70616c6c65743a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f7574696c6974793a3a70616c6c65743a3a43616c6c3c543e3e3a3a6465636f64653a3a6866393632313564363330306139316663ce06aa02616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a72656d6f76653a3a3c696d706c20616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a48616e646c653c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a4e6f64655265663c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a6d61726b65723a3a4d75742c4b2c562c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a6d61726b65723a3a4c6561663e2c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a6d61726b65723a3a4b563e3e3a3a72656d6f76655f6c6561665f6b763a3a6831326231626237366633613265643166cf0664616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a42616c616e63696e67436f6e746578743c4b2c563e3a3a6d657267655f747261636b696e675f6368696c645f656467653a3a6834613135623035366339373064663466d0065a616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a42616c616e63696e67436f6e746578743c4b2c563e3a3a62756c6b5f737465616c5f6c6566743a3a6839373631616434366137666633663038d1065b616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a42616c616e63696e67436f6e746578743c4b2c563e3a3a62756c6b5f737465616c5f72696768743a3a6833623236626563373231363965336138d20660616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a42616c616e63696e67436f6e746578743c4b2c563e3a3a6d657267655f747261636b696e675f706172656e743a3a6832396434643637313235613766616333d3066a3c70616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6838623336303130376562623263643733d406746672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6765743a3a6866636233386232326539336533383834d5065d70616c6c65745f62616c616e6365733a3a3c696d706c2070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a7570646174655f6c6f636b733a3a6834613766636634393833666561656530d6068b0170616c6c65745f76657374696e673a3a70616c6c65743a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f76657374696e673a3a70616c6c65743a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6861653739363863613338343432656438d706b80170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a656e737572655f63616e5f77697468647261773a3a6861363633313632636362303766363562d8065c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6830653531663865323337316366303162d906713c285475706c65456c656d656e74302c5475706c65456c656d656e743129206173206672616d655f737570706f72743a3a7472616974733a3a4f6e46696e616c697a653c426c6f636b4e756d6265723e3e3a3a6f6e5f66696e616c697a653a3a6839313333616264623863313661653734da063c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6866633038643266646333373838653065db065c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6836353862316235363864666330316264dc06746672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a6d61703a3a53746f726167654d61703c5072656669782c4861736865722c4b65792c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a696e736572743a3a6861306631376465613164376234356366dd06653c73705f61726974686d657469633a3a66697865645f706f696e743a3a46697865645531323820617320636f72653a3a6f70733a3a61726974683a3a4469763e3a3a6469763a3a7b7b636c6f737572657d7d3a3a6836646264376163336466616536346330de06793c285475706c65456c656d656e74302c5475706c65456c656d656e743129206173206672616d655f737570706f72743a3a7472616974733a3a4f6666636861696e576f726b65723c426c6f636b4e756d6265723e3e3a3a6f6666636861696e5f776f726b65723a3a6862356566323264353830663737626461df065173705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6c6f63616c5f73746f726167655f6765743a3a6831663133626331643463393964333062e0065d73705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6c6f63616c5f73746f726167655f636f6d706172655f616e645f7365743a3a6836343435643638623563666537326366e1064b73705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a72616e646f6d5f736565643a3a6837363461653665316561386261306666e2064173705f6e706f735f656c656374696f6e733a3a70687261676d656e3a3a7365715f70687261676d656e5f636f72653a3a6864656165626337636562623464356238e3062c616c6c6f633a3a736c6963653a3a696e736572745f686561643a3a6835363033663238376535366635643132e40668636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4d75743c413e20666f7220266d757420463e3a3a63616c6c5f6d75743a3a6838646230373634623032363235643965e5063473705f6e706f735f656c656374696f6e733a3a7265647563653a3a7265647563653a3a6863623362313762393064376632646566e6066c3c73705f61726974686d657469633a3a7065725f7468696e67733a3a5065725531362061732073705f61726974686d657469633a3a7065725f7468696e67733a3a5065725468696e673e3a3a66726f6d5f726174696f6e616c3a3a6839633136396230663230626265313230e7065473705f6e706f735f656c656374696f6e733a3a68656c706572733a3a61737369676e6d656e745f726174696f5f746f5f7374616b65645f6e6f726d616c697a65643a3a6863396330346266316531333338633530e8065273705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a7375626d69745f7472616e73616374696f6e3a3a6833393331636537313666306666626631e9064c73705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a69735f76616c696461746f723a3a6831313939326437643965646234323365ea065173705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a737232353531395f7075626c69635f6b6579733a3a6831396162613737386265343636386630eb062c616c6c6f633a3a736c6963653a3a696e736572745f686561643a3a6837646662396631373438333433643361ec06683c636f72653a3a697465723a3a61646170746572733a3a6d61703a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6837666139653366323631663166346137ed0652616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a656e7472793a3a566163616e74456e7472793c4b2c563e3a3a696e736572743a3a6834363766373065653562313664333265ee063973705f6e706f735f656c656374696f6e733a3a6e6f64653a3a4e6f64653c413e3a3a726f6f743a3a6836353762643739356162663838333132ef064173705f6e706f735f656c656374696f6e733a3a6e6f64653a3a4e6f64653c413e3a3a69735f706172656e745f6f663a3a6862373337326162336335323434353838f006b70170616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6830623133326664326435626239636231f1067d3c70616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a50616c6c65743c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6833643230393638366537613839643032f2063e70616c6c65745f626162653a3a65717569766f636174696f6e3a3a69735f6b6e6f776e5f6f6666656e63653a3a6835393139376165383938386535393633f3063970616c6c65745f746970733a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6865653939373134313561373134633238f4063b70616c6c65745f746970733a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6864373531303166393166636539626663f5064470616c6c65745f746970733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6865646336393635343532386562363733f6069c013c70616c6c65745f746970733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d6178696d756d526561736f6e4c656e67746844656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6839333432336131373765653335373836f7069b013c70616c6c65745f746970733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a446174614465706f7369745065724279746544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863313065383237386539666665366433f8069d013c70616c6c65745f746970733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a5469705265706f72744465706f7369744261736544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6833313438343239623934343731306630f90696013c70616c6c65745f746970733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a54697046696e6465727346656544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6831313866366661326264363766306638fa0695013c70616c6c65745f746970733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a546970436f756e74646f776e44656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6830623634333663333230373430353530fb06773c736d616c6c7665633a3a536d616c6c5665633c413e20617320636f72653a3a697465723a3a7472616974733a3a636f6c6c6563743a3a457874656e643c3c4120617320736d616c6c7665633a3a41727261793e3a3a4974656d3e3e3a3a657874656e643a3a6831303732383530353835363063336439fc0635736d616c6c7665633a3a536d616c6c5665633c413e3a3a7472795f726573657276653a3a6833396535633963356162343336383137fd06456672616d655f737570706f72743a3a7472616974733a3a456e737572654f726967696e3a3a656e737572655f6f726967696e3a3a6864303364343161333339636632666339fe06ad0170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a77697468647261773a3a6862396136656138366162616538653863ff064170616c6c65745f6772616e6470613a3a65717569766f636174696f6e3a3a69735f6b6e6f776e5f6f6666656e63653a3a683939393638636662383564613461646480074470616c6c65745f76657374696e673a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a683934313731376134633138386330383981074670616c6c65745f76657374696e673a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a683939633866306463323936633939356682074f70616c6c65745f76657374696e673a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a68393631633832383033393835323764328307b80170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a4c6f636b61626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a657874656e645f6c6f636b3a3a683066386430656265323534343066613384074770616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3a3a63616c6c5f66756e6374696f6e733a3a683538386261303939323333323638316685074970616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3a3a73746f726167655f6d657461646174613a3a683535646638323962393638313964393386075270616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a686234643039613832376261363833386287073c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a686337383330306365343165643839656388073f73705f66696e616c6974795f6772616e6470613a3a636865636b5f6d6573736167655f7369676e61747572653a3a683838666661633330363066353037313489074c73705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a656432353531395f7665726966793a3a68306566363730336231636563376535628a075a70616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a68653861633666363634353936306663358b075c70616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a68326438346366363330653935613831658c076570616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a68303330363838626366316161373034648d07b7013c70616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a556e7369676e6564506861736544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68653330653662313434663931333766668e07303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68303766643431353838616530343835348f07303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68363563666361303461643365383230369007303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a683834313834653361326539356262376391074d636f72653a3a686173683a3a696d706c733a3a3c696d706c20636f72653a3a686173683a3a4861736820666f722028412c42293e3a3a686173683a3a6833366162666661326664313765373432920731636f72653a3a70616e69636b696e673a3a6173736572745f6661696c65643a3a68326230343036313238656364623736629307303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a683839313332316231613035373332333494075c3c70616c6c65745f746970733a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a68623334616537623135666134616535619507653c73705f747269653a3a6e6f64655f636f6465633a3a4e6f6465436f6465633c483e20617320747269655f64623a3a6e6f64655f636f6465633a3a4e6f6465436f6465633e3a3a6272616e63685f6e6f64653a3a68316432343166346161396165353165359607683c73705f747269653a3a6e6f64655f636f6465633a3a4e6f6465436f6465633c483e20617320747269655f64623a3a6e6f64655f636f6465633a3a4e6f6465436f6465633e3a3a657874656e73696f6e5f6e6f64653a3a68666163353931376334663230626131329707633c73705f747269653a3a6e6f64655f636f6465633a3a4e6f6465436f6465633c483e20617320747269655f64623a3a6e6f64655f636f6465633a3a4e6f6465436f6465633e3a3a6c6561665f6e6f64653a3a683637396435643435653538346539633598077570616c6c65745f746970733a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f746970733a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a683062353935316364383239613864306199075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68393565653830363537366133666339649a075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68393637346265636432336263323731619b075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68376461383761633531396136366635329c07673c70616c6c65745f76657374696e673a3a70616c6c65743a3a50616c6c65743c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a68323733333634386365333064373365359d076b3c70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e2061732073705f72756e74696d653a3a7472616974733a3a56616c6964617465556e7369676e65643e3a3a76616c69646174655f756e7369676e65643a3a68633666373263666436316633346430359e073970616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e3a3a69735f6f6e6c696e653a3a68643531366230633230316536643861639f074d73705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6e6574776f726b5f73746174653a3a6837366633656261633635313664653936a0074a73705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a737232353531395f7369676e3a3a6839343039653237363331643733643462a1075173705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6c6f63616c5f73746f726167655f7365743a3a6865646535616139353838393332656239a20789016672616d655f73797374656d3a3a6c696d6974733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f72206672616d655f73797374656d3a3a6c696d6974733a3a57656967687473506572436c6173733e3a3a656e636f64655f746f3a3a6862636134306238366437396463386536a3075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6866316539636235663166363735666464a407746672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a6d61703a3a53746f726167654d61703c5072656669782c4861736865722c4b65792c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a696e736572743a3a6863333663393065356636616135386639a5073c70616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6831633739343534383165643434656439a6073e70616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6865343136643566613662363639366139a707703c70616c6c65745f6772616e6470613a3a5f5f4765744279746553747275637443757272656e7453657449643c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6837386230633231333864343164663632a807693c70616c6c65745f6772616e6470613a3a5f5f4765744279746553747275637453746174653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6831373062383564383464623064336333a907683c636f72653a3a697465723a3a61646170746572733a3a6d61703a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6833393361613437373062326535343834aa076d3c636f72653a3a697465723a3a61646170746572733a3a6d61703a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a73697a655f68696e743a3a6836663536633966373939373337376563ab073d70616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a7363686564756c655f6368616e67653a3a6866336265333233646139653737343964ac075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6863323932666135316334623838333331ad07683c636f72653a3a697465723a3a61646170746572733a3a6d61703a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6832343934393637653333383464626533ae07683c636f72653a3a697465723a3a61646170746572733a3a6d61703a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6865656333626230383165636166623433af07683c636f72653a3a697465723a3a61646170746572733a3a6d61703a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6830353361376663373932363861613436b0077b70616c6c65745f6772616e6470613a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f6772616e6470613a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6835313464323165636637376662323464b1073e70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6834666334663666303636323736616661b2074070616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6837623833616162616162323461376361b3074670616c6c65745f74696d657374616d703a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a6866303739613931373161326662363464b4074870616c6c65745f74696d657374616d703a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a6861353765316366333361366333633063b5075170616c6c65745f74696d657374616d703a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6836633066663635353532643130613463b607a3013c70616c6c65745f74696d657374616d703a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d696e696d756d506572696f6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835616262373535383462626330336162b7073f70616c6c65745f617574686f72736869703a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6836333265646131653835656164306535b8074170616c6c65745f617574686f72736869703a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6835316630616631643533306164363337b90776636f72653a3a7074723a3a64726f705f696e5f706c6163653c70616c6c65745f617574686f72736869703a3a5f5f47657442797465537472756374446964536574556e636c65733c706f6c6b61646f745f72756e74696d653a3a52756e74696d653e3e3a3a6834393363313239663536613264613531ba076d3c70616c6c65745f617574686f72736869703a3a5f5f47657442797465537472756374556e636c65733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6833396462353861613365393162646334bb073a73705f61726974686d657469633a3a62696775696e743a3a42696755696e743a3a6c73747269703a3a6837376366303362363038396365653739bc073773705f61726974686d657469633a3a62696775696e743a3a42696755696e743a3a6d756c3a3a6833646639636462376665356132393865bd0768636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4d75743c413e20666f7220266d757420463e3a3a63616c6c5f6d75743a3a6861666635343962323737363430653163be075f3c70616c6c65745f6772616e6470613a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6865656261323637653632663034333335bf07613c70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6830373261633761343532623137303830c007623c70616c6c65745f617574686f72736869703a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6839653935346131356639623933656465c10756636f72653a3a7074723a3a64726f705f696e5f706c6163653c73705f72756e74696d653a3a72756e74696d655f737472696e673a3a52756e74696d65537472696e673e3a3a6837393664306338396333386437396133c2070c436f72655f76657273696f6ec30712436f72655f657865637574655f626c6f636bc40784016672616d655f6578656375746976653a3a4578656375746976653c53797374656d2c426c6f636b2c436f6e746578742c556e7369676e656456616c696461746f722c416c6c50616c6c6574732c434f6e52756e74696d65557067726164653e3a3a696e697469616c697a655f626c6f636b3a3a6834336538626164326166376465326438c5075073705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a73746172745f62617463685f7665726966793a3a6835313338376262656362313437306265c60783016672616d655f6578656375746976653a3a4578656375746976653c53797374656d2c426c6f636b2c436f6e746578742c556e7369676e656456616c696461746f722c416c6c50616c6c6574732c434f6e52756e74696d65557067726164653e3a3a6170706c795f65787472696e7369633a3a6861653661663038313261636237646263c7075173705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a66696e6973685f62617463685f7665726966793a3a6863363232353331336166663764663032c807516672616d655f73797374656d3a3a3c696d706c206672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3e3a3a66696e616c697a653a3a6834303430326133633966333064633461c9074573705f696f3a3a6d6973633a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a7072696e745f6865783a3a6862386435623830303863633162396663ca0715436f72655f696e697469616c697a655f626c6f636bcb07114d657461646174615f6d65746164617461cc071c426c6f636b4275696c6465725f6170706c795f65787472696e736963cd071b426c6f636b4275696c6465725f66696e616c697a655f626c6f636bce0720426c6f636b4275696c6465725f696e686572656e745f65787472696e73696373cf071c426c6f636b4275696c6465725f636865636b5f696e686572656e7473d00718426c6f636b4275696c6465725f72616e646f6d5f73656564d1072b5461676765645472616e73616374696f6e51756575655f76616c69646174655f7472616e73616374696f6ed2075373705f72756e74696d653a3a7472616e73616374696f6e5f76616c69646974793a3a56616c69645472616e73616374696f6e3a3a636f6d62696e655f776974683a3a6836633731633462363732346364653561d307214f6666636861696e576f726b65724170695f6f6666636861696e5f776f726b6572d4071850617261636861696e486f73745f76616c696461746f7273d5071e50617261636861696e486f73745f76616c696461746f725f67726f757073d6072050617261636861696e486f73745f617661696c6162696c6974795f636f726573d7072750617261636861696e486f73745f7065727369737465645f76616c69646174696f6e5f64617461d8072650617261636861696e486f73745f636865636b5f76616c69646174696f6e5f6f757470757473d9072550617261636861696e486f73745f73657373696f6e5f696e6465785f666f725f6368696c64da071a50617261636861696e486f73745f73657373696f6e5f696e666fdb071d50617261636861696e486f73745f76616c69646174696f6e5f636f6465dc072850617261636861696e486f73745f686973746f726963616c5f76616c69646174696f6e5f636f6465dd072c50617261636861696e486f73745f63616e6469646174655f70656e64696e675f617661696c6162696c697479de071e50617261636861696e486f73745f63616e6469646174655f6576656e7473df071a50617261636861696e486f73745f646d715f636f6e74656e7473e0072c50617261636861696e486f73745f696e626f756e645f68726d705f6368616e6e656c735f636f6e74656e7473e1071e4772616e6470614170695f6772616e6470615f617574686f726974696573e207384772616e6470614170695f7375626d69745f7265706f72745f65717569766f636174696f6e5f756e7369676e65645f65787472696e736963e307274772616e6470614170695f67656e65726174655f6b65795f6f776e6572736869705f70726f6f66e4074470616c6c65745f73657373696f6e3a3a686973746f726963616c3a3a50726f76696e67547269653c543e3a3a70726f76653a3a6862353563613736306565303739663864e50715426162654170695f636f6e66696775726174696f6ee6071b426162654170695f63757272656e745f65706f63685f7374617274e70715426162654170695f63757272656e745f65706f6368e80712426162654170695f6e6578745f65706f6368e90724426162654170695f67656e65726174655f6b65795f6f776e6572736869705f70726f6f66ea0735426162654170695f7375626d69745f7265706f72745f65717569766f636174696f6e5f756e7369676e65645f65787472696e736963eb0721417574686f72697479446973636f766572794170695f617574686f726974696573ec072153657373696f6e4b6579735f67656e65726174655f73657373696f6e5f6b657973ed074e73705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a656432353531395f67656e65726174653a3a6863316664303463336532393065383031ee074e73705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a737232353531395f67656e65726174653a3a6830313637663336366230613437643830ef071f53657373696f6e4b6579735f6465636f64655f73657373696f6e5f6b657973f0071d4163636f756e744e6f6e63654170695f6163636f756e745f6e6f6e6365f107205472616e73616374696f6e5061796d656e744170695f71756572795f696e666ff207275472616e73616374696f6e5061796d656e744170695f71756572795f6665655f64657461696c73f307830170616c6c65745f636f6c6c6563746976653a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f636f6c6c6563746976653a3a4572726f723c542c493e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6837366366306236343239633336346133f4075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6838323564643865386538326634636137f5075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6835646635343932306635313230396635f6075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6839623866663838306462356462366633f7074c70616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a76616c69646174655f616e645f6765745f70726f706f73616c3a3a6835383738633938646139636463383363f8074670616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a646f5f617070726f76655f70726f706f73616c3a3a6838653139343831643130326339306638f9074270616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a72656d6f76655f70726f706f73616c3a3a6865303531363937393766396365393461fa072c616c6c6f633a3a736c6963653a3a696e736572745f686561643a3a6864343766383466303632386139386262fb075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6837663362303763353866343366666461fc074b6672616d655f737570706f72743a3a7472616974733a3a4368616e67654d656d626572733a3a7365745f6d656d626572735f736f727465643a3a6863383931636133346333653565313438fd07830170616c6c65745f636f6c6c6563746976653a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f636f6c6c6563746976653a3a4572726f723c542c493e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6833343662323764346164313939386465fe075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6866666531316339363163666533383837ff075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a683436303235633831373737643065306480085c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a683061653464613831333762613265323881084c70616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a76616c69646174655f616e645f6765745f70726f706f73616c3a3a683066386131616664366164376537323382084670616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a646f5f617070726f76655f70726f706f73616c3a3a683062373262663362306536303635616583084270616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a72656d6f76655f70726f706f73616c3a3a68396335383162363865316262663662348408a2013c70616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a4368616e67654d656d626572733c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e3e3a3a6368616e67655f6d656d626572735f736f727465643a3a686131333432636236633538333033626285085c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6866306131636265626437386138336561860896013c70616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a4368616e67654d656d626572733c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e3e3a3a7365745f7072696d653a3a683561303064343761363034353233336687084170616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a63616c6c5f66756e6374696f6e733a3a683139386339666561356130613965366388084370616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a73746f726167655f6d657461646174613a3a686131316338626234366439366163306589086f3c70616c6c65745f636f6c6c6563746976653a3a5f5f47657442797465537472756374566f74696e673c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68333436313139666638363463346633388a08723c70616c6c65745f636f6c6c6563746976653a3a5f5f4765744279746553747275637450726f706f73616c733c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68326163316338343739373230326563378b084370616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a73746f726167655f6d657461646174613a3a68626233626332356262373738636234308c086e3c70616c6c65745f636f6c6c6563746976653a3a5f5f476574427974655374727563745072696d653c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68333738613237356232326266373862628d08733c70616c6c65745f636f6c6c6563746976653a3a5f5f4765744279746553747275637450726f706f73616c4f663c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68383939653138373865333633323838668e084d3c706f6c6b61646f745f72756e74696d653a3a43616c6c20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a68346635346532643136633036353534392e363937328f08643c70616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a683665326539326334656339383738303690083d70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6c61756e63685f7075626c69633a3a68343565346563316566663739383464659108766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a683433396565613161396532623065363992083b70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6261636b696e675f666f723a3a683336636231396430393338623133383693087f70616c6c65745f64656d6f63726163793a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f64656d6f63726163793a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a686366613838626465313465613938636594085c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a683137653066643032383435373265656395084170616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a696e6a6563745f7265666572656e64756d3a3a683235333066646533623766313861313596083f70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6c61756e63685f65787465726e616c3a3a683831636464306133346563613035636497084170616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a646f5f656e6163745f70726f706f73616c3a3a686631343139626261653835626136663198085c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68383937653834613432613437396661339908746672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6765743a3a68323861656363306435656436313465359a084470616c6c65745f73657373696f6e3a3a686973746f726963616c3a3a50726f76696e67547269653c543e3a3a71756572793a3a68633666616435613335656264623861319b087c636f72653a3a7074723a3a64726f705f696e5f706c6163653c747269655f64623a3a7472696564626d75743a3a5472696544424d75743c73705f747269653a3a4c61796f75743c73705f72756e74696d653a3a7472616974733a3a426c616b6554776f3235363e3e3e3a3a68623036343462396563343165383362349c08543c747269655f64623a3a7472696564626d75743a3a5472696544424d75743c4c3e20617320747269655f64623a3a547269654d75743c4c3e3e3a3a696e736572743a3a68303064623137386465633734336631659d083c747269655f64623a3a7472696564626d75743a3a4e6f646553746f726167653c483e3a3a616c6c6f633a3a68393864623333663535313233366138329e0860747269655f64623a3a6e6962626c653a3a6e6962626c65736c6963653a3a3c696d706c20747269655f64623a3a6e6962626c653a3a4e6962626c65536c6963653e3a3a72696768745f697465723a3a68616238393463313266656332346637319f0872747269655f64623a3a6e6962626c653a3a6e6962626c657665633a3a3c696d706c20747269655f64623a3a6e6962626c653a3a4e6962626c655665633e3a3a617070656e645f6f7074696f6e616c5f736c6963655f616e645f6e6962626c653a3a6836653736666533383834643761313239a00841747269655f64623a3a7472696564626d75743a3a5472696544424d75743c4c3e3a3a636f6d6d69745f6368696c643a3a6839653238373934313839323633326237a1085c747269655f64623a3a6e6962626c653a3a6e6962626c657665633a3a3c696d706c20747269655f64623a3a6e6962626c653a3a4e6962626c655665633e3a3a64726f705f6c617374733a3a6833323163613533323735333564343337a2083e70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6830343832343138376665383763653430a3084070616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6831643935653165343136663162303161a4086e3c70616c6c65745f64656d6f63726163793a3a5f5f47657442797465537472756374566f74696e674f663c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6832643462356236373332373237316463a508713c70616c6c65745f64656d6f63726163793a3a5f5f476574427974655374727563745075626c696350726f70733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6861333236303938373931393338386337a6084970616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6836343035316338316565616332373862a70896013c70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d6178566f74657344656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6830313333636361373338303238323064a8089b013c70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a436f6f6c6f6666506572696f6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6836616232356135633538313336343532a908a3013c70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a46617374547261636b566f74696e67506572696f6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6834656635643263636136636536636534aa089c013c70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d696e696d756d4465706f73697444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6831323837323963353639616336303935ab089a013c70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4c61756e6368506572696f6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863616336353031653831646635323936ac089f0170616c6c65745f64656d6f63726163793a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f64656d6f63726163793a3a507265696d6167655374617475733c4163636f756e7449642c42616c616e63652c426c6f636b4e756d6265723e3e3a3a656e636f64655f746f3a3a6838333237653339333564346164663135ad083e747269655f64623a3a7472696564626d75743a3a5472696544424d75743c4c3e3a3a696e736572745f61743a3a6832643664353862306532313263386564ae083c747269655f64623a3a7472696564626d75743a3a4e6f64653c4f3e3a3a66726f6d5f656e636f6465643a3a6865343062323736383762663765313037af0845747269655f64623a3a7472696564626d75743a3a5472696544424d75743c4c3e3a3a696e736572745f696e73706563746f723a3a6837393432366333356233616362323162b008363c5420617320636f72653a3a636f6e766572743a3a496e746f3c553e3e3a3a696e746f3a3a6837646562303534633066303162313865b108376861736862726f776e3a3a7365743a3a486173685365743c542c533e3a3a696e736572743a3a6866333364323638623538366661306235b2083e747269655f64623a3a7472696564626d75743a3a4e6f64653c4f3e3a3a696e6c696e655f6f725f686173683a3a6861366133313430376230646333353037b30835747269655f64623a3a7472696564626d75743a3a656d7074795f6368696c6472656e3a3a6835626562303166386464643235656631b40865747269655f64623a3a6e6962626c653a3a6e6962626c65736c6963653a3a3c696d706c20747269655f64623a3a6e6962626c653a3a4e6962626c65536c6963653e3a3a746f5f73746f7265645f72616e67653a3a6864396463663637383466636331636465b5083e6861736862726f776e3a3a7261773a3a5261775461626c653c543e3a3a726573657276655f7265686173683a3a6832636234393366356435393163626233b608613c70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6861653239386236663234623935653462b708746672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6765743a3a6833363039663237306637383536363065b8085c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6830323631656634626633323963623736b9085c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6862323761343537616337343939323230ba085c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6830363663383638633766336134336562bb084a70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a7265647563655f757073747265616d5f64656c65676174696f6e3a3a6835336239336431666330376435633136bc084370616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6e6f74655f707265696d6167655f696e6e65723a3a6864336336646661373232343834383165bd084c70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6e6f74655f696d6d696e656e745f707265696d6167655f696e6e65723a3a6832626130643239626263616437363364be085c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6862346565313361383234636332306133bf083f70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a7472795f72656d6f76655f766f74653a3a6861346562643962366133653032613635c00844636f72653a3a7074723a3a64726f705f696e5f706c6163653c706f6c6b61646f745f72756e74696d653a3a4576656e743e3a3a6836303961353238303039633736633937c108723c70616c6c65745f72616e646f6d6e6573735f636f6c6c6563746976655f666c69703a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6861333432383834623135346138336439c208426672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a6839626431643765366561363131396464c308446672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a6865366366316461646338633236313635c4084d6672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6830393934343264396266616462353166c50899013c6672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a56657273696f6e44656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864643535663730653463633739626439c6089a013c6672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a446257656967687444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6833343233623861666163366636633539c708a0013c6672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a426c6f636b48617368436f756e7444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6861303838663336396165656430336164c8089d013c6672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a426c6f636b4c656e67746844656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6830303437613765363533353462343462c9089e013c6672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a426c6f636b5765696768747344656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6866323738396566366239353234653861ca083570616c6c65745f7374616b696e673a3a736c617368696e673a3a646f5f736c6173683a3a6861306535393762633130323039313466cb084470616c6c65745f7574696c6974793a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a6837376230396663383066666662383562cc084573705f696f3a3a6d6973633a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a7072696e745f6e756d3a3a6837663964343033643738623936343163cd085373705f696f3a3a747269653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a626c616b65325f3235365f6f7264657265645f726f6f743a3a6831383334336639663463383961363534ce084373705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a726f6f743a3a6865373734303961613634313366316635cf084b73705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6368616e6765735f726f6f743a3a6861313365373864363132663964373063d0084170616c6c65745f6d656d626572736869703a3a4d6f64756c653c542c493e3a3a63616c6c5f66756e6374696f6e733a3a6834626630666562363565346335356635d1084370616c6c65745f6d656d626572736869703a3a4d6f64756c653c542c493e3a3a73746f726167655f6d657461646174613a3a6832656262643239623937666239643561d2085170616c6c65745f72616e646f6d6e6573735f636f6c6c6563746976655f666c69703a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6833653263393930613663303034306132d3086073705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a736563703235366b315f65636473615f7265636f7665725f636f6d707265737365643a3a6862326437663338623634366537343762d408653c6672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6831316330663165316463613862623066d5083d3c5420617320636f72653a3a636f6e766572743a3a547279496e746f3c553e3e3a3a7472795f696e746f3a3a6837343439376331393031616237353061d6083773705f61726974686d657469633a3a62696775696e743a3a42696755696e743a3a6164643a3a6839313462303231323362636235353463d7084473705f61726974686d657469633a3a62696775696e743a3a42696755696e743a3a6469763a3a7b7b636c6f737572657d7d3a3a6834353636623433636231353966383365d808413c73705f696e686572656e74733a3a4572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6833386136323834363330313937393864d9084273705f696f3a3a6c6f6767696e673a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6c6f673a3a6865663666663431653361616162396435da087773705f72756e74696d655f696e746572666163653a3a706173735f62793a3a3c696d706c2073705f72756e74696d655f696e746572666163653a3a7761736d3a3a46726f6d46464956616c756520666f7220543e3a3a66726f6d5f6666695f76616c75653a3a6837666662626535633239343833356365db08543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6832363831323331623561376363343334dc087773705f72756e74696d655f696e746572666163653a3a706173735f62793a3a3c696d706c2073705f72756e74696d655f696e746572666163653a3a7761736d3a3a496e746f46464956616c756520666f7220543e3a3a696e746f5f6666695f76616c75653a3a6865336635623032656337336461316337dd08323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a6831383161396339356337373439376137de084573705f696f3a3a616c6c6f6361746f723a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a667265653a3a6834613665353738343364633938366265df084773705f696f3a3a616c6c6f6361746f723a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6d616c6c6f633a3a6839386165653164666364396236386334e00830616c6c6f633a3a7665633a3a5665633c542c413e3a3a726573657276653a3a6833666437333332326536333036393532e108473c73705f72756e74696d653a3a44697370617463684572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6832623636363136623332626131336165e208573c73705f72756e74696d653a3a72756e74696d655f737472696e673a3a52756e74696d65537472696e6720617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6833313066316330396365373161616361e30856747269655f64623a3a6e6962626c653a3a6e6962626c657665633a3a3c696d706c20747269655f64623a3a6e6962626c653a3a4e6962626c655665633e3a3a707573683a3a6833656264343631643335346637366166e408095f5f6c736872746933e5084c636f6d70696c65725f6275696c74696e733a3a696e743a3a7370656369616c697a65645f6469765f72656d3a3a753132385f6469765f72656d3a3a6866353635306232313761613464643134e608095f5f756d6f64746933e708095f5f75646976746933e808085f5f6d756c746933e908066d656d637079ea08076d656d6d6f7665eb08066d656d736574ec080462636d70ed08095f5f6173686c74693300550970726f64756365727302086c616e6775616765010452757374000c70726f6365737365642d62790105727573746325312e35322e302d6e696768746c79202865333761313363633320323032312d30322d323829" + "5203203": "0x0061736d010000000184033660037f7f7f017f60027f7f017f60027f7f0060017f0060047f7f7f7f0060057f7f7f7f7f0060037f7f7f0060017f017e60027e7e0060037f7e7e0060027f7e017f60037f7e7f017f6000017f60027f7f017e60037f7f7e017e60000060017e017f60017f017f60017e0060017e017e60047f7e7e7e017f60027f7e017e6000017e60037e7e7f017e60027e7f017f60057f7f7f7f7f017f60047f7f7f7f017f60067f7f7f7f7f7f0060037e7f7f0060047f7f7f7e0060047f7f7e7e0060067f7f7f7e7e7f0060027e7f0060047e7f7f7f0060097f7f7f7f7f7f7f7f7e0060067f7f7f7f7e7e00600a7f7f7f7f7f7f7f7f7f7f0060097f7f7f7f7f7f7f7f7f0060077f7f7e7e7e7f7f0060027f7e0060077f7e7e7e7e7e7e0060047e7e7e7e017f60037e7f7f017f60047f7e7f7f0060047f7e7e7f0060057f7f7f7e7e0060057e7f7e7e7f0060077f7f7e7e7f7e7e0060067f7f7f7f7f7f017f60057f7f7e7e7f0060057f7f7f7e7e017f60057f7e7e7e7e017f60057f7e7e7f7f0060057f7e7e7e7e0002a70e2d03656e76066d656d6f727902001403656e76206578745f6f6666636861696e5f696e6465785f7365745f76657273696f6e5f31000803656e76196578745f6c6f6767696e675f6c6f675f76657273696f6e5f31000903656e76256578745f63727970746f5f656432353531395f67656e65726174655f76657273696f6e5f31000a03656e76236578745f63727970746f5f656432353531395f7665726966795f76657273696f6e5f31000b03656e76286578745f63727970746f5f66696e6973685f62617463685f7665726966795f76657273696f6e5f31000c03656e762c6578745f63727970746f5f736563703235366b315f65636473615f7265636f7665725f76657273696f6e5f31000d03656e76376578745f63727970746f5f736563703235366b315f65636473615f7265636f7665725f636f6d707265737365645f76657273696f6e5f31000d03656e76256578745f63727970746f5f737232353531395f67656e65726174655f76657273696f6e5f31000a03656e76286578745f63727970746f5f737232353531395f7075626c69635f6b6579735f76657273696f6e5f31000703656e76216578745f63727970746f5f737232353531395f7369676e5f76657273696f6e5f31000e03656e76236578745f63727970746f5f737232353531395f7665726966795f76657273696f6e5f32000b03656e76276578745f63727970746f5f73746172745f62617463685f7665726966795f76657273696f6e5f31000f03656e762a6578745f747269655f626c616b65325f3235365f6f7264657265645f726f6f745f76657273696f6e5f31001003656e761c6578745f616c6c6f6361746f725f667265655f76657273696f6e5f31000303656e761e6578745f616c6c6f6361746f725f6d616c6c6f635f76657273696f6e5f31001103656e76206578745f68617368696e675f626c616b65325f3132385f76657273696f6e5f31001003656e76206578745f68617368696e675f626c616b65325f3235365f76657273696f6e5f31001003656e76206578745f68617368696e675f6b656363616b5f3235365f76657273696f6e5f31001003656e761e6578745f68617368696e675f74776f785f3132385f76657273696f6e5f31001003656e761d6578745f68617368696e675f74776f785f36345f76657273696f6e5f31001003656e761c6578745f6d6973635f7072696e745f6865785f76657273696f6e5f31001203656e761c6578745f6d6973635f7072696e745f6e756d5f76657273696f6e5f31001203656e761d6578745f6d6973635f7072696e745f757466385f76657273696f6e5f31001203656e76226578745f6d6973635f72756e74696d655f76657273696f6e5f76657273696f6e5f31001303656e76236578745f6f6666636861696e5f69735f76616c696461746f725f76657273696f6e5f31000c03656e76346578745f6f6666636861696e5f6c6f63616c5f73746f726167655f636f6d706172655f616e645f7365745f76657273696f6e5f31001403656e76286578745f6f6666636861696e5f6c6f63616c5f73746f726167655f6765745f76657273696f6e5f31001503656e76286578745f6f6666636861696e5f6c6f63616c5f73746f726167655f7365745f76657273696f6e5f31000903656e76246578745f6f6666636861696e5f6e6574776f726b5f73746174655f76657273696f6e5f31001603656e76226578745f6f6666636861696e5f72616e646f6d5f736565645f76657273696f6e5f31000c03656e76296578745f6f6666636861696e5f7375626d69745f7472616e73616374696f6e5f76657273696f6e5f31001303656e761c6578745f73746f726167655f617070656e645f76657273696f6e5f31000803656e76226578745f73746f726167655f6368616e6765735f726f6f745f76657273696f6e5f31001303656e761b6578745f73746f726167655f636c6561725f76657273696f6e5f31001203656e76226578745f73746f726167655f636c6561725f7072656669785f76657273696f6e5f31001203656e76286578745f73746f726167655f636f6d6d69745f7472616e73616374696f6e5f76657273696f6e5f31000f03656e761c6578745f73746f726167655f6578697374735f76657273696f6e5f31001003656e76196578745f73746f726167655f6765745f76657273696f6e5f31001303656e761e6578745f73746f726167655f6e6578745f6b65795f76657273696f6e5f31001303656e761a6578745f73746f726167655f726561645f76657273696f6e5f31001703656e762a6578745f73746f726167655f726f6c6c6261636b5f7472616e73616374696f6e5f76657273696f6e5f31000f03656e761a6578745f73746f726167655f726f6f745f76657273696f6e5f31001603656e76196578745f73746f726167655f7365745f76657273696f6e5f31000803656e76276578745f73746f726167655f73746172745f7472616e73616374696f6e5f76657273696f6e5f31000f03c408c20811110303000011110f0f0f0f0f060602060005000101020102020201180307191a06000501010111110106061b01010101060101000101000101001c00010102011106060202020206060206060606060204010203060604051d05010101020201060201010206020602030602060606060606060602060d0202020202020202020202020602040202020202020206060302010202060202020202020202020202020202020f02020f02020202020202020202020203030202020202020202020202020202030204020202020102061e061e03020206020303020302020202030206060102021a0202020202020202020001010101010106060306050601040303030401050406020606000203020400030303030602021e0206110602061f1e0302030604020602060406020602060603060302021b020201060602030620020306010206020202060403160605020502020502060206070f021103020202060606020606061b040302020203020202030606020c06060202060206050307020602060202020202030303020202020202022103030202110303030203030202030202020206020303030202060303030203030202020203030202020202020202020303030202020303020302020202030303020603020202060602061f0606030602220206062306020602030402010206110f020202020203020202020202030303020202020303020305060606021e1e021e1e0202060206010602241b11110307070204030303062502020202020202020302030303030402262702280202030302032002020303030202021a0202020302030229020f02020604020606020202020202020202060202020202020202022a2b020601020f02110f0f0202020606060206060606020606060606060202060606022c060206060206060206060202020202020203030202020202020202020302020202020206020206050205050d06020306112d060306060203020102020203060211022e0606021e031e0304020202020101010202020204060302040303030303030303030303030303030303030303030303030101020206110202010202040606060606060202020202020604020202030206022f02030402020f03043003040202032904110c020211010201020301030303020202020206061131010303030903030302321a03030302010101020601030f0f040202020203021103050502020203030202020205270202020203030303030203030302030602030303030d0d030f020c03020d0d0d0d0d0d0d0d060d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d040d0d0d0d0d0d0d0d06060d0d0d0d020202021d0511020204020202021d05110402030303020203020202030203020202040206020204031b01021a040203030202030202020202021b051b0602040c0606030202020233060602040303030303020202020234031202030603030306030206110105270202010311020101022c35353535000000002c0407017001910291020619037f01418080c0000b7f0041ecf5cc000b7f0041ecf5cc000b07980b2a195f5f696e6469726563745f66756e6374696f6e5f7461626c6501000c436f72655f76657273696f6e00c20712436f72655f657865637574655f626c6f636b00c30715436f72655f696e697469616c697a655f626c6f636b00ca07114d657461646174615f6d6574616461746100cb071c426c6f636b4275696c6465725f6170706c795f65787472696e73696300cc071b426c6f636b4275696c6465725f66696e616c697a655f626c6f636b00cd0720426c6f636b4275696c6465725f696e686572656e745f65787472696e7369637300ce071c426c6f636b4275696c6465725f636865636b5f696e686572656e747300cf0718426c6f636b4275696c6465725f72616e646f6d5f7365656400d0072b5461676765645472616e73616374696f6e51756575655f76616c69646174655f7472616e73616374696f6e00d107214f6666636861696e576f726b65724170695f6f6666636861696e5f776f726b657200d3071850617261636861696e486f73745f76616c696461746f727300d4071e50617261636861696e486f73745f76616c696461746f725f67726f75707300d5072050617261636861696e486f73745f617661696c6162696c6974795f636f72657300d6072750617261636861696e486f73745f7065727369737465645f76616c69646174696f6e5f6461746100d7072650617261636861696e486f73745f636865636b5f76616c69646174696f6e5f6f75747075747300d8072550617261636861696e486f73745f73657373696f6e5f696e6465785f666f725f6368696c6400d9071a50617261636861696e486f73745f73657373696f6e5f696e666f00da071d50617261636861696e486f73745f76616c69646174696f6e5f636f646500db072850617261636861696e486f73745f686973746f726963616c5f76616c69646174696f6e5f636f646500dc072c50617261636861696e486f73745f63616e6469646174655f70656e64696e675f617661696c6162696c69747900dd071e50617261636861696e486f73745f63616e6469646174655f6576656e747300de071a50617261636861696e486f73745f646d715f636f6e74656e747300df072c50617261636861696e486f73745f696e626f756e645f68726d705f6368616e6e656c735f636f6e74656e747300e0071e4772616e6470614170695f6772616e6470615f617574686f72697469657300e107384772616e6470614170695f7375626d69745f7265706f72745f65717569766f636174696f6e5f756e7369676e65645f65787472696e73696300e207274772616e6470614170695f67656e65726174655f6b65795f6f776e6572736869705f70726f6f6600e30715426162654170695f636f6e66696775726174696f6e00e5071b426162654170695f63757272656e745f65706f63685f737461727400e60715426162654170695f63757272656e745f65706f636800e70712426162654170695f6e6578745f65706f636800e80724426162654170695f67656e65726174655f6b65795f6f776e6572736869705f70726f6f6600e90735426162654170695f7375626d69745f7265706f72745f65717569766f636174696f6e5f756e7369676e65645f65787472696e73696300ea0721417574686f72697479446973636f766572794170695f617574686f72697469657300eb072153657373696f6e4b6579735f67656e65726174655f73657373696f6e5f6b65797300ec071f53657373696f6e4b6579735f6465636f64655f73657373696f6e5f6b65797300ef071d4163636f756e744e6f6e63654170695f6163636f756e745f6e6f6e636500f007205472616e73616374696f6e5061796d656e744170695f71756572795f696e666f00f107275472616e73616374696f6e5061796d656e744170695f71756572795f6665655f64657461696c7300f2070a5f5f646174615f656e6403010b5f5f686561705f626173650302098f04010041010b900243475950dd0851525a69ee02f902ea05ec05ed058f015f5eb9073f40416a4a6061626364657e870189015b85028c08f603f706f806890288028702dc03f6069c029d029e02b802ae02b602b002b102b502b702b902e10898059405ba03b903b803b703e703dd05c103d905c703cb03ca03aa08cf03f203ce03e503a808cd03e203e103e003df03e803e603a708f303f103fb03fa03f903f803a70796059305b004af04b5045cf904f8048a08f704ff0483058105de05db05dc05da05d8059e05d705d605e405e305e205e105e005930694069206b506b606b706c308c2089e06c408d408d208c108b404b3049f06d304ad04ac04ae04d404b407b307b507da03d903a006db0385078407a1068607d306fe048005b807b707c007d505d405a206df058006f604a306c003bf03a406d303a607a507a506be07b207b107a606bf07a308a208a706a608b60888088708a8068f088b08c903c803a906cc03d503d108d008aa06f503f403ab06f703fe03c503c403ac06c603de0281078007ad0682079c07cb08ae06de03dd03af06e403fc03b503b403b006b603d403ef03ee03b106f003fd0384028302b2068602ad02f406f306b306f50694078b078a07b4068c07f106fa06f90688019a0597059c058d078f07900793078e07a807b607ba07c107e208d8088d088908ba02bb02a508a408ab08a908a9029d0599059b05c908c808c708c608c50890010abcce68c20806002000102d0b0700200010df080b06002000102f0b0700200010de080b0a0020002001200210310b2a01017f0240200210df082203450d002003200020022001200120024b1b10e9081a200010de080b20030b0600200010330b1d01017f0240200010df082201450d0020014100200010eb081a0b20010b05001035000b05001037000b05001034000b1700410141cce2cc00410741d4e2cc00412210d90800000b110041d0f0cc004111418080c0001039000b4701017f230041206b22032400200341146a4100360200200341d4e2cc00360210200342013702042003200136021c200320003602182003200341186a360200200320021044000b950101017f02400240200141004e0d0041012102410021010c010b0240024002400240200228020022030d002001450d022001102c21020c010b0240200228020422020d002001450d022001102c21020c010b200320022001103021020b20020d012000200136020441012101410121020c020b410121020b20002002360204410021020b20002002360200200041086a20013602000bde0201067f230041206b2202240020012802002103024002402001280204220441037422050d00410021060c010b200341046a2107410021060340200728020020066a2106200741086a2107200541786a22050d000b0b024002400240200141146a2802000d00200621070c010b02402004450d00410021054101210402402006410f4b0d00200341046a280200450d030b200620066a220720064f0d010c020b4100410041ac80c000103c000b02402007417f4c0d00024020070d0041002105410121040c020b200721052007102c22040d011036000b1038000b20004100360208200020043602002000200536020420022000360204200241086a41106a200141106a290200370300200241086a41086a200141086a290200370300200220012902003703080240200241046a41bc80c000200241086a103d0d00200241206a24000f0b41d480c0004133200241086a418881c000419881c000103e000b6c01017f230041306b2203240020032001360204200320003602002003411c6a41023602002003412c6a41013602002003420237020c2003418c84c000360208200341013602242003200341206a360218200320033602282003200341046a360220200341086a20021044000bc20501097f230041306b22032400200341246a2001360200200341033a00282003428080808080043703082003200036022020034100360218200341003602100240024002400240024020022802082204450d0020022802002105200228020422062002410c6a2802002207200720064b1b2208450d01200020052802002005280204200128020c1100000d03200541086a2100200228021021092008210a034020032004411c6a2d00003a00282003200441046a290200422089370308200441186a28020021014100210741002102024002400240200441146a2802000e03010002010b2001410374210b410021022009200b6a220b2802044102470d01200b28020028020021010b410121020b2003200136021420032002360210200441106a28020021020240024002402004410c6a2802000e03010002010b20024103742101200920016a22012802044102470d01200128020028020021020b410121070b2003200236021c20032007360218200920042802004103746a2202280200200341086a20022802041101000d04200a417f6a220a450d03200441206a2104200041046a210220002802002101200041086a2100200328022020012002280200200328022428020c110000450d000c040b0b2002280200210520022802042206200241146a2802002204200420064b1b2208450d0020022802102104200020052802002005280204200128020c1100000d02200541086a21002008210203402004280200200341086a200441046a2802001101000d032002417f6a2202450d02200441086a2104200041046a210120002802002107200041086a2100200328022020072001280200200328022428020c110000450d000c030b0b410021080b0240200620084d0d002003280220200520084103746a22042802002004280204200328022428020c1100000d010b410021040c010b410121040b200341306a240020040b7e01017f230041c0006b220524002005200136020c2005200036020820052003360214200520023602102005412c6a41023602002005413c6a41033602002005420237021c20054190e2cc00360218200541043602342005200541306a3602282005200541106a3602382005200541086a360230200541186a20041044000b8d0201047f230041206b22032400024002402000280200220041046a2802002204200041086a28020022056b2002490d00200028020021040c010b0240200520026a22062005490d00200441017422052006200520064b1b22054108200541084b1b21050240024020040d00200341003602100c010b200341106a41086a410136020020032004360214200320002802003602100b20032005200341106a103a200341086a2802002105024020032802004101460d00200020032802042204360200200041046a2005360200200041086a28020021050c020b2005450d001036000b1038000b200420056a2001200210e9081a200041086a2200200028020020026a360200200341206a240041000bbf0501047f230041306b2202240020002802002100024002400240024002400240024002402001418001490d002002410036020c2001418010490d0102402001418080044f0d0020022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d410321010c040b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d410421010c030b024020002802082203200041046a280200460d00200028020021040c020b200341016a22042003490d04200341017422052004200520044b1b22044108200441084b1b21040240024020030d00200241003602200c010b200241206a41086a410136020020022003360224200220002802003602200b200241106a2004200241206a103a200241186a2802002103024020022802104101460d00200020022802142204360200200041046a2003360200200028020821030c020b20030d030c040b20022001413f71418001723a000d2002200141067641c001723a000c410221010c010b200420036a20013a00002000200028020841016a3602080c040b0240200041046a2802002204200041086a28020022036b2001490d00200028020021040c030b200320016a22052003490d01200441017422032005200320054b1b22034108200341084b1b21030240024020040d00200241003602200c010b200241206a41086a410136020020022004360224200220002802003602200b200241106a2003200241206a103a200241106a41086a2802002103024020022802104101460d00200020022802142204360200200041046a2003360200200041086a28020021030c030b2003450d010b1036000b1038000b200420036a2002410c6a200110e9081a200041086a2200200028020020016a3602000b200241306a240041000b6301017f230041206b2202240020022000280200360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41bc80c000200241086a103d2101200241206a240020010b6f01017f230041306b2202240020022001360204200220003602002002411c6a41023602002002412c6a41013602002002420337020c2002418c82c000360208200241013602242002200241206a3602182002200241046a36022820022002360220200241086a41a482c0001044000b0b002000350200200110480b3401017f230041106b220224002002200136020c200220003602082002419c84c000360204200241d4e2cc0036020020021049000b6f01017f230041306b2202240020022001360204200220003602002002411c6a41023602002002412c6a41013602002002420337020c200241fc82c000360208200241013602242002200241206a3602182002200241046a36022820022002360220200241086a419483c0001044000b6f01017f230041306b2202240020022001360204200220003602002002411c6a41023602002002412c6a41013602002002420337020c200241d083c000360208200241013602242002200241206a3602182002200241046a36022820022002360220200241086a41e883c0001044000b0d0020002802001a037f0c000b0bd20203027f017e037f230041306b22022400412721030240024020004290ce005a0d00200021040c010b412721030340200241096a20036a2205417c6a20004290ce0080220442f0b17f7e20007ca7220641ffff037141e4006e220741017441de84c0006a2f00003b00002005417e6a2007419c7f6c20066a41ffff037141017441de84c0006a2f00003b00002003417c6a2103200042ffc1d72f5621052004210020050d000b0b02402004a7220541e3004c0d00200241096a2003417e6a22036a2004a7220641ffff037141e4006e2205419c7f6c20066a41ffff037141017441de84c0006a2f00003b00000b02400240200541094a0d00200241096a2003417f6a22036a200541306a3a00000c010b200241096a2003417e6a22036a200541017441de84c0006a2f00003b00000b200141d4e2cc004100200241096a20036a412720036b104b2103200241306a240020030b6f01017f230041c0006b220124002001200036020c200141346a410136020020014201370224200141c4e2cc003602202001410536023c2001200141386a36023020012001410c6a360238200141106a200141206a103b410141cce2cc0041072001280210200128021810d90800000b0c0042f3a38eecb2fea7f4570bea0501067f20002802002205410171220620046a21070240024020054104710d00410021010c010b4100210802402002450d00200221092001210a03402008200a2d000041c00171418001476a2108200a41016a210a2009417f6a22090d000b0b200820076a21070b412b418080c40020061b21080240024020002802084101460d004101210a2000200820012002104c0d012000280218200320042000411c6a28020028020c1100000f0b02402000410c6a280200220920074b0d004101210a2000200820012002104c0d012000280218200320042000411c6a28020028020c1100000f0b024002400240024002402005410871450d00200028020421052000413036020420002d002021064101210a200041013a00202000200820012002104c0d054100210a200920076b22092101410120002d0020220820084103461b4103710e0403020102030b4100210a200920076b22092105024002400240410120002d0020220720074103461b4103710e0402010001020b2009410176210a200941016a41017621050c010b410021052009210a0b200a41016a210a0340200a417f6a220a450d0420002802182000280204200028021c280210110100450d000b41010f0b2009410176210a200941016a41017621010c010b410021012009210a0b200a41016a210a02400340200a417f6a220a450d0120002802182000280204200028021c280210110100450d000b41010f0b200028020421094101210a200028021820032004200028021c28020c1100000d01200141016a2108200028021c210120002802182102024003402008417f6a2208450d014101210a200220092001280210110100450d000c030b0b200020063a00202000200536020441000f0b200028020421094101210a2000200820012002104c0d00200028021820032004200028021c28020c1100000d00200541016a2108200028021c210120002802182100034002402008417f6a22080d0041000f0b4101210a200020092001280210110100450d000b0b200a0b5401017f024002402001418080c400460d0041012104200028021820012000411c6a2802002802101101000d010b024020020d0041000f0b2000280218200220032000411c6a28020028020c11000021040b20040b6c01017f230041306b2203240020032001360204200320003602002003411c6a41023602002003412c6a41013602002003420237020c200341a886c000360208200341013602242003200341206a3602182003200341046a36022820032003360220200341086a20021044000b8908010a7f20002802102103024002400240200028020822044101470d0020034101470d020c010b20034101460d002000280218200120022000411c6a28020028020c1100000f0b200120026a2105024002400240200041146a28020022060d0041002107200121080c010b41002107200121080340200520082203460d02200341016a2108024020032c00002209417f4a0d00200941ff017121090240024020082005470d004100210a2005210b0c010b20032d0001413f71210a200341026a2208210b0b200941e001490d0002400240200b2005470d004100210c2005210b0c010b200b2d0000413f71210c200b41016a2208210b0b200941f001490d0002400240200b2005470d004100210b0c010b200b41016a2108200b2d0000413f71210b0b200a410c742009411274418080f0007172200c41067472200b72418080c400460d030b200820036b20076a21072006417f6a22060d000b0b20052008460d00024020082c00002203417f4a0d0002400240200841016a2005470d0041002108200521060c010b200841026a210620082d0001413f7141067421080b200341ff017141e001490d000240024020062005470d0041002106200521090c010b200641016a210920062d0000413f7121060b200341ff017141f001490d00200341ff01712103200620087221080240024020092005470d00410021050c010b20092d0000413f7121050b20084106742003411274418080f0007172200572418080c400460d010b024002402007450d0020072002460d0041002103200720024f0d01200120076a2c00004140480d010b200121030b2007200220031b21022003200120031b21010b20044101460d002000280218200120022000411c6a28020028020c1100000f0b0240024002402002450d004100210820022107200121030340200820032d000041c00171418001476a2108200341016a21032007417f6a22070d000b2008200028020c22054f0d014100210820022107200121030340200820032d000041c00171418001476a2108200341016a21032007417f6a22070d000c030b0b41002108200028020c22050d010b2000280218200120022000411c6a28020028020c1100000f0b41002103200520086b22052107024002400240410020002d0020220820084103461b4103710e0402010001020b20054101762103200541016a41017621070c010b41002107200521030b200341016a210302400240024003402003417f6a2203450d0120002802182000280204200028021c280210110100450d000c020b0b2000280204210841012103200028021820012002200028021c28020c1100000d01200741016a2103200028021c210720002802182100034002402003417f6a22030d0041000f0b200020082007280210110100450d000b0b410121030b20030be00801067f230041f0006b220524002005200336020c20052002360208410121062001210702402001418102490d00410020016b2108418002210903400240200920014f0d0041002106200020096a2c000041bf7f4c0d00200921070c020b2009417f6a21074100210620094101460d01200820096a210a20072109200a4101470d000b0b200520073602142005200036021020054100410520061b36021c200541d4e2cc0041ea86c00020061b3602180240024002400240200220014b22060d00200320014b0d00200220034b0d01024002402002450d0020012002460d00200120024d0d01200020026a2c00004140480d010b200321020b20052002360220024002402002450d0020022001470d010b200221060c030b200141016a210903400240200220014f0d00200020026a2c00004140480d00200541246a2109200221060c050b2002417f6a210620024101460d03200920024621032006210220030d030c000b0b20052002200320061b360228200541306a41146a4103360200200541c8006a41146a4104360200200541d4006a410436020020054203370234200541f086c0003602302005410136024c2005200541c8006a3602402005200541186a3602582005200541106a3602502005200541286a360248200541306a20041044000b200541e4006a4104360200200541c8006a41146a4104360200200541d4006a4101360200200541306a41146a4104360200200542043702342005418887c0003602302005410136024c2005200541c8006a3602402005200541186a3602602005200541106a36025820052005410c6a3602502005200541086a360248200541306a20041044000b200541246a21090b024020062001460d00410121034100210802400240200020066a22072c000022024100480d002005200241ff0171360224200541286a21010c010b200020016a220121030240200741016a2001460d00200741026a210320072d0001413f7121080b2002411f71210702400240200241ff017141e0014f0d00200820074106747221020c010b410021002001210a024020032001460d00200341016a210a20032d0000413f7121000b200020084106747221030240200241ff017141f0014f0d0020032007410c747221020c010b410021020240200a2001460d00200a2d0000413f7121020b20034106742007411274418080f00071722002722202418080c400460d020b2005200236022441012103200541286a21012002418001490d00410221032002418010490d0041034104200241808004491b21030b200520063602282005200320066a36022c200541306a41146a4105360200200541ec006a4104360200200541e4006a4104360200200541c8006a41146a4106360200200541d4006a410736020020054205370234200541a887c00036023020052001360258200520093602502005410136024c2005200541c8006a3602402005200541186a3602682005200541106a3602602005200541206a360248200541306a20041044000b41e8aac700412b20041039000b1000200120002802002000280204104e0b7c01037f230041206b2202240002402000280200200110550d002001411c6a2802002103200128021821042002411c6a4100360200200241d4e2cc003602182002420137020c2002419088c00036020820042003200241086a103d0d002000280204200110552101200241206a240020010f0b200241206a240041010ba40403037f017e017f410121020240200128021841272001411c6a2802002802101101000d0041f4002103410221040240024002400240024002402000280200220041776a0e1f05010303000303030303030303030303030303030303030303040303030304020b41f2002103410221040c040b41ee002103410221040c030b200041dc00460d010b0240024002400240200010530d0020001054450d01410121040c030b200041017267410276410773ad4280808080d0008421050c010b200041017267410276410773ad4280808080d0008421050b410321040b200021030c010b20002103410221040b03402004210641dc002100410121024101210402400240024002400240024020060e0402010500020b02400240024002402005422088a741ff01710e06050302010006050b200542ffffffff8f608342808080803084210541f50021000c060b200542ffffffff8f608342808080802084210541fb0021000c050b413041d70020032005a72204410274411c7176410f712200410a491b20006a2100024020040d00200542ffffffff8f60834280808080108421050c050b2005427f7c42ffffffff0f832005428080808070838421050c040b200542ffffffff8f6083210541fd0021000c030b41002104200321000c030b20012802184127200128021c2802101101000f0b200542ffffffff8f60834280808080c0008421050b410321040b20012802182000200128021c280210110100450d000b0b20020ba60301047f0240024002404100410f200041a49a04491b2201200141086a2201200141027441b094c0006a280200410b742000410b7422014b1b2202200241046a2202200241027441b094c0006a280200410b7420014b1b2202200241026a2202200241027441b094c0006a280200410b7420014b1b2202200241016a2202200241027441b094c0006a280200410b7420014b1b220241027441b094c0006a280200410b74220320014620032001496a20026a2201411e4b0d0041b105210402402001411e460d00200141027441b494c0006a28020041157621040b4100210202402001417f6a220320014b0d002003411f4f0d03200341027441b094c0006a28020041ffffff007121020b02402004200141027441b094c0006a280200411576220141016a460d00200020026b2102200141b105200141b1054b1b21032004417f6a210441002100034020032001460d032000200141bc95c0006a2d00006a220020024b0d012004200141016a2201470d000b200421010b20014101710f0b2001411f41f09ac000103c000b200341b10541809bc000103c000b2003411f41ac95c000103c000be20601077f024002400240024002400240024002400240200041ffff034b0d0020004180fe0371410876210141ed88c000210241002103200041ff0171210402400340200241026a2105200320022d000122066a21070240024020022d000022022001470d0020072003490d06200741a3024f0d07200341d089c0006a210203402006450d022006417f6a210620022d00002103200241016a210220032004470d000b410021060c050b200220014b0d022007210320052102200541bf89c000470d010c020b2007210320052102200541bf89c000470d000b0b200041ffff0371210441f28bc0002102410121060340200241016a21000240024020022d000022034118744118752207417f4a0d00200041a78ec000460d07200741ff007141087420022d0001722103200241026a21020c010b200021020b200420036b22044100480d0220064101732106200241a78ec000470d000c020b0b0240200041ffff074b0d0020004180fe0371410876210141b88ec000210241002103200041ff0171210402400340200241026a2105200320022d000122066a21070240024020022d000022022001470d0020072003490d09200741b0014f0d0a200341848fc0006a210203402006450d022006417f6a210620022d00002103200241016a210220032004470d000b410021060c050b200220014b0d022007210320052102200541848fc000470d010c020b2007210320052102200541848fc000470d000b0b200041ffff0371210441b390c0002102410121060340200241016a21000240024020022d000022034118744118752207417f4a0d00200041d693c000460d0a200741ff007141087420022d0001722103200241026a21020c010b200021020b200420036b22044100480d0220064101732106200241d693c000470d000c020b0b41002106200041b5d9736a41b5db2b490d00200041e28b746a41e20b490d002000419fa8746a419f18490d00200041dee2746a410e490d00200041feffff0071419ef00a460d00200041a2b2756a4122490d00200041cb91756a410b4f0d070b20064101710f0b2003200741c089c0001057000b200741a20241c089c000104d000b41e8aac700412b41a88ec0001039000b2003200741c089c0001057000b200741af0141c089c000104d000b41e8aac700412b41a88ec0001039000b200041f08338490ba70201037f23004180016b22022400024002400240024020012802002203411071450d00410021030340200220036a41ff006a2000410f712204413072200441d7006a2004410a491b3a00002003417f6a2103200041047622000d000b20034180016a22004181014f0d02200141ac88c0004102200220036a4180016a410020036b104b21000c010b02402003412071450d00410021030340200220036a41ff006a2000410f712204413072200441376a2004410a491b3a00002003417f6a2103200041047622000d000b20034180016a22004181014f0d03200141ac88c0004102200220036a4180016a410020036b104b21000c010b2000ad2001104821000b20024180016a240020000f0b2000418001419c88c0001056000b2000418001419c88c0001056000b6c01017f230041306b2203240020032001360204200320003602002003411c6a41023602002003412c6a41013602002003420237020c200341b088c000360208200341013602242003200341206a3602182003200341046a36022820032003360220200341086a20021044000b6c01017f230041306b2203240020032001360204200320003602002003411c6a41023602002003412c6a41013602002003420237020c200341fc93c000360208200341013602242003200341206a3602182003200341046a36022820032003360220200341086a20021044000bec0201017f230041f0006b220624002006200136020c2006200036020820062003360214200620023602102006410236021c200641f09bc000360218024020042802000d00200641386a41146a4103360200200641c4006a4103360200200641d8006a41146a41033602002006420437025c200641f49bc0003602582006410436023c2006200641386a3602682006200641106a3602482006200641086a3602402006200641186a360238200641d8006a20051044000b200641206a41106a200441106a290200370300200641206a41086a200441086a29020037030020062004290200370320200641d8006a41146a4104360200200641d4006a4108360200200641386a41146a4103360200200641c4006a41033602002006420537025c200641949cc0003602582006410436023c2006200641386a3602682006200641206a3602502006200641106a3602482006200641086a3602402006200641186a360238200641d8006a20051044000b140020002802002001200028020428020c1101000b6401027f230041206b220224002001411c6a280200210320012802182101200241086a41106a200041106a290200370300200241086a41086a200041086a2902003703002002200029020037030820012003200241086a103d2100200241206a240020000b1c00200128021841f39cc000410b2001411c6a28020028020c1100000b1c00200128021841fe9cc000410e2001411c6a28020028020c1100000b5b01017f230041306b220324002003200136020c20032000360208200341246a410136020020034201370214200341c4e2cc003602102003410436022c2003200341286a3602202003200341086a360228200341106a20021044000b6901037f230041206b220224002001411c6a280200210320012802182104200241086a41106a2000280200220141106a290200370300200241086a41086a200141086a2902003703002002200129020037030820042003200241086a103d2101200241206a240020010b15002001200028020022002802002000280204104e0b8a0501077f0240024002402002450d000340024020002802082d0000450d00200028020041c59dc0004104200028020428020c110000450d0041010f0b4100210320022104024002400340200120036a210502400240200441074b0d002004450d03200220036b2106410021070340200520076a2d0000410a460d022006200741016a2207470d000c040b0b024002400240200541036a417c7120056b2207450d0020042007200720044b1b2106410021070340200520076a2d0000410a460d042006200741016a2207470d000b2006200441786a22084b0d020c010b200441786a2108410021060b02400340200520066a220741046a2802002209417f732009418a94a8d0007341fffdfb776a7120072802002207417f732007418a94a8d0007341fffdfb776a7172418081828478710d01200641086a220620084d0d000b0b200620044b0d070b20042006460d02200420066b21092001200620036a6a21054100210702400340200520076a2d0000410a460d012009200741016a2207470d000c040b0b200620076a21070b200720036a220741016a21030240200720024f0d00200120076a2d0000410a470d00410121070c030b200220036b2104200220034f0d000b0b41002107200221030b200028020820073a0000200028020421072000280200210602400240024020022003460d000240200220034d0d00200120036a22052c000041bf7f4a0d020b200120024100200341cc9dc000104f000b200620012002200728020c110000450d0141010f0b0240200620012003200728020c110000450d0041010f0b20052c000041bf7f4c0d040b200120036a2101200220036b22020d000b0b41000f0b20062004418c9ec0001056000b200120022003200241dc9dc000104f000b850201027f230041106b220224002002410036020c02400240024002402001418001490d002001418010490d012002410c6a21032001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d410321010c030b200220013a000c2002410c6a2103410121010c020b20022001413f71418001723a000d2002200141067641c001723a000c2002410c6a2103410221010c010b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d410421010b20002003200110602101200241106a240020010b6001017f230041206b2202240020022000360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41dc9ec000200241086a103d2101200241206a240020010b0d0020002802002001200210600b8c0201027f230041106b22022400200028020021002002410036020c02400240024002402001418001490d002001418010490d012002410c6a21032001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d410321010c030b200220013a000c2002410c6a2103410121010c020b20022001413f71418001723a000d2002200141067641c001723a000c2002410c6a2103410221010c010b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d410421010b20002003200110602101200241106a240020010b6301017f230041206b2202240020022000280200360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41dc9ec000200241086a103d2101200241206a240020010bd40202047f027e230041c0006b2203240041012104024020002d00080d00200028020421050240200028020022062d0000410471450d00024020050d0041012104200628021841f59ec00041022006411c6a28020028020c1100000d02200028020021060b41012104200341013a0017200341346a41c09ec000360200200320062902183703082003200341176a3602102006290208210720062902102108200320062d00203a00382003200837032820032007370320200320062902003703182003200341086a3602302001200341186a200228020c1101000d01200328023041d89ec0004102200328023428020c11000021040c010b41012104200628021841bc9ec00041f49ec00020051b4102410120051b2006411c6a28020028020c1100000d0020012000280200200228020c11010021040b200020043a00082000200028020441016a360204200341c0006a240020000b840703017f027e027f02402002280200220341134c0d00024002400240200042808084fea6dee111540d002002200341706a2203360200200120036a200042808084fea6dee111802204428080fc81d9a19e6e7e20007c2200428080e983b1de1680a741ff017141e4007041017441de84c0006a2f00003b0000200228020020016a41026a20004280a094a58d1d80a741ffff037141e4007041017441de84c0006a2f00003b0000200228020020016a41046a20004280c8afa02580a741e4007041017441de84c0006a2f00003b0000200228020020016a41066a20004280c2d72f80a741e4007041017441de84c0006a2f00003b0000200228020020016a41086a200042c0843d8042e40082a741017441de84c0006a2f00003b0000200228020020016a410a6a20004290ce008042e40082a741017441de84c0006a2f00003b0000200228020020016a410c6a200042e40080220542e40082a741017441de84c0006a2f00003b00002005429c7f7e20007ca72103410e21060c010b024020004280c2d72f5a0d00200021040c020b2002200341786a2203360200200120036a20004280c2d72f8022044280bea8507e20007ca7220341c0843d6e41ff017141e4007041017441de84c0006a2f00003b0000200228020020016a41026a20034190ce006e41ffff037141e4007041017441de84c0006a2f00003b0000200228020020016a41046a200341e4006e220641e4007041017441de84c0006a2f00003b00002006419c7f6c20036a2103410621060b2001200228020020066a6a200341017441de84c0006a2f00003b00000b024002402004a722064190ce004f0d00200621030c010b20022002280200417c6a2203360200200120036a20064190ce006e220341f0b17f6c20066a220641ffff037141e4006e220741017441de84c0006a2f00003b0000200228020020016a41026a2007419c7f6c20066a41ffff037141017441de84c0006a2f00003b00000b0240200341ffff0371220641e400490d0020022002280200417e6a2207360200200120076a200641e4006e2206419c7f6c20036a41ffff037141017441de84c0006a2f00003b0000200621030b0240200341ffff037141094b0d0020022002280200417f6a2206360200200120066a200341306a3a00000f0b20022002280200417e6a2206360200200120066a200341ffff037141017441de84c0006a2f00003b00000f0b41fb9ec000411c41989fc0001039000bd108020b7f017e4101210302400240200228021841222002411c6a2802002802101101000d000240024020010d00410021040c010b200020016a21052000210641002104200021074100210802400340200641016a210902400240024020062c0000220a4100480d00200a41ff0171210b0c010b0240024020092005470d004100210b200521060c010b20062d0001413f71210b200641026a220921060b200a411f7121030240200a41ff0171220a41e0014f0d00200b200341067472210b0c010b0240024020062005470d004100210c2005210d0c010b20062d0000413f71210c200641016a2209210d0b200c200b41067472210b0240200a41f0014f0d00200b2003410c7472210b0c010b02400240200d2005470d004100210a200921060c010b200d41016a2106200d2d0000413f71210a0b200b4106742003411274418080f0007172200a72220b418080c400470d010c030b200921060b4102210941f400210d02400240024002400240024002400240200b41776a0e1f06010303000303030303030303030303030303030303030303040303030304020b41f200210d0c050b41ee00210d0c040b200b41dc00460d010b0240200b10530d00200b10540d040b200b41017267410276410773ad4280808080d00084210e410321090c010b0b200b210d0b0240024020082004490d0002402004450d0020042001460d00200420014f0d01200020046a2c000041bf7f4c0d010b02402008450d0020082001460d00200820014f0d01200020086a2c000041bf7f4c0d010b2002280218200020046a200820046b200228021c28020c110000450d0141010f0b200020012004200841bc9fc000104f000b03402009210a4101210341dc00210441012109024002400240024002400240200a0e0402010500020b0240024002400240200e422088a741ff01710e06050302010006050b200e42ffffffff8f608342808080803084210e4103210941f50021040c070b200e42ffffffff8f608342808080802084210e4103210941fb0021040c060b413041d700200d200ea72209410274411c7176410f712204410a491b20046a2104024020090d00200e42ffffffff8f608342808080801084210e0c050b200e427f7c42ffffffff0f83200e4280808080708384210e0c040b200e42ffffffff8f6083210e4103210941fd0021040c040b41002109200d21040c030b410121090240200b418001490d0041022109200b418010490d0041034104200b41808004491b21090b200920086a21040c040b200e42ffffffff8f60834280808080c00084210e0b410321090b20022802182004200228021c2802101101000d050c000b0b200820076b20066a21082006210720052006470d000b0b2004450d0020042001460d00200420014f0d02200020046a2c000041bf7f4c0d020b410121032002280218200020046a200120046b200228021c28020c1100000d0020022802184122200228021c28021011010021030b20030f0b200020012004200141ac9fc000104f000b870101027f23004180016b2202240020002d00002103410021000340200220006a41ff006a20034101714130723a00002000417f6a2100200341017641ff007122030d000b024020004180016a2203418101490d002003418001419c88c0001056000b200141e79fc0004102200220006a4180016a410020006b104b210020024180016a240020000b1c00200128021841adb3c00041052001411c6a28020028020c1100000bcf0401067e2000420037001720002001290320220242338842137e2001290300220342ffffffffffffff03837c220442137c4233882001290308220542ffffffffffffff038320034233887c22037c4233882001290310220642ffffffffffffff038320054233887c22057c4233882001290318220742ffffffffffffff038320064233887c22067c423388200242ffffffffffffff038320074233887c22077c42338842137e20047c22023c0000200020024228883c0005200020024220883c0004200020024218883c0003200020024210883c0002200020024208883c00012000200242338820037c22044225883c000b20002004421d883c000a200020044215883c000920002004420d883c0008200020044205883c00072000200442338820057c2203422a883c0012200020034222883c001120002003421a883c0010200020034212883c000f20002003420a883c000e200020034202883c000d2000200442ffffffffffffff038322044203862002423088420783843c00062000200342338820067c2202421f883c0017200020024227883c0018200020024217883c001620002002420f883c0015200020024207883c00142000200342ffffffffffffff038322054206862004422d88843c000c2000200242338820077c22034204883c001a20002003420c883c001b200020034214883c001c20002003421c883c001d200020034224883c001e2000200242ffffffffffffff038322024201862005423288843c00132000200342ffffffffffffff03832203422c883c001f200020034204862002422f88843c00190b7101027f230041c0006b2202240020022000106b200241206a2001106b41002101410121000340200241206a20016a2d0000200220016a2d0000732203410020036b72417f7341800171410776106d2000712100200141016a22014120470d000b2000106d2101200241c0006a240020010b1501017f230041106b220120003a000f20012d000f0bd00702017f147e230041f0016b2203240020012903202104200129031821052001290310210620012903082107200129030021080340200341b0016a200842002008420010e80820034180016a20074200200442137e2209420010e808200341c0006a200542137e220a42002006420010e808200341e0016a200a42002005420010e808200341f0006a200842002007420010e808200341306a200642002009420010e808200341e0006a200742002007420010e808200341206a200842002006420010e808200341d0016a200a42002004420010e808200341c0016a200942002004420010e808200341a0016a200842002005420010e808200341106a200742002006420010e8082003200642002006420010e80820034190016a200842002004420010e808200341d0006a200742002005420010e808200329039001220b20032903507c2206420186220c20032903007c220720032903a001220d20032903107c2208420186220e20032903c0017c22042003290320220f20032903d0017c2205420186221020032903607c22092003290370221120032903307c220a420186221220032903e0017c2213200329038001221420032903407c2215420186221620032903b0017c221742338820034180016a41086a290300200341c0006a41086a2903007c2015201454ad7c4201862015423f8884200341b0016a41086a2903007c2017201654ad7c420d86847c2215423388200341f0006a41086a290300200341306a41086a2903007c200a201154ad7c420186200a423f8884200341e0016a41086a2903007c2013201254ad7c2015201354ad7c420d86847c220a423388200341206a41086a290300200341d0016a41086a2903007c2005200f54ad7c4201862005423f8884200341e0006a41086a2903007c2009201054ad7c200a200954ad7c420d86847c2205423388200341a0016a41086a290300200341106a41086a2903007c2008200d54ad7c4201862008423f8884200341c0016a41086a2903007c2004200e54ad7c2005200454ad7c420d86847c220442338820034190016a41086a290300200341d0006a41086a2903007c2006200b54ad7c4201862006423f8884200341086a2903007c2007200c54ad7c2004200754ad7c420d868442137e201742ffffffffffffff03837c220642ffffffffffffff038321082006423388201542ffffffffffffff03837c2107200442ffffffffffffff03832104200542ffffffffffffff03832105200a42ffffffffffffff038321062002417f6a22020d000b2000200437032020002005370318200020063703102000200737030820002008370300200341f0016a24000bbbd40103017f297e037f230041d0c1006b22032400200341a8c1006a20024101106e200341a0386a20022903002204420020032903a8412205420010e808200341b0396a20032903c841220642002002290308220742137e2208420010e808200341f0396a20032903c041220942002002290310220a42137e220b420010e808200341b03a6a20032903b841220c42002002290318220d42137e220e420010e808200341f03a6a20032903b041220f42002002290320221042137e2211420010e808200341f0386a200f42002004420010e808200341b0386a200542002007420010e808200341c0396a20064200200b420010e808200341803a6a20094200200e420010e808200341c03a6a200c42002011420010e80820034180396a200c42002004420010e808200341803b6a200f42002007420010e808200341c0386a20054200200a420010e808200341d0396a20064200200e420010e808200341903a6a200942002011420010e80820034190396a200942002004420010e808200341d03a6a200c42002007420010e808200341903b6a200f4200200a420010e808200341d0386a20054200200d420010e808200341e0396a200642002011420010e808200341a0396a200642002004420010e808200341a03a6a200942002007420010e808200341e03a6a200c4200200a420010e808200341a03b6a200f4200200d420010e808200341e0386a200542002010420010e808200320032903d039221220032903c0387c220520032903903a7c22062003290380397c220920032903803b7c220c20032903c039221320032903b0387c220f20032903803a7c221420032903c03a7c221520032903f0387c221620032903b039221720032903a0387c221820032903f0397c221920032903b03a7c221a20032903f03a7c221b423388200341b0396a41086a290300200341a0386a41086a2903007c2018201754ad7c200341f0396a41086a2903007c2019201854ad7c200341b03a6a41086a2903007c201a201954ad7c200341f03a6a41086a2903007c201b201a54ad7c420d86847c2219423388200341c0396a41086a290300200341b0386a41086a2903007c200f201354ad7c200341803a6a41086a2903007c2014200f54ad7c200341c03a6a41086a2903007c2015201454ad7c200341f0386a41086a2903007c2016201554ad7c2019201654ad7c420d86847c220f42ffffffffffffff038322143703c03b200320032903e039221720032903d0387c22152003290390397c221620032903d03a7c221a20032903903b7c2213200f423388200341d0396a41086a290300200341c0386a41086a2903007c2005201254ad7c200341903a6a41086a2903007c2006200554ad7c20034180396a41086a2903007c2009200654ad7c200341803b6a41086a2903007c200c200954ad7c200f200c54ad7c420d86847c220542ffffffffffffff038322183703c83b200320032903a039221220032903e0387c220620032903a03a7c220920032903e03a7c220c20032903a03b7c220f2005423388200341e0396a41086a290300200341d0386a41086a2903007c2015201754ad7c20034190396a41086a2903007c2016201554ad7c200341d03a6a41086a2903007c201a201654ad7c200341903b6a41086a2903007c2013201a54ad7c2005201354ad7c420d86847c220542ffffffffffffff0383221a3703d03b20032005423388200341a0396a41086a290300200341e0386a41086a2903007c2006201254ad7c200341a03a6a41086a2903007c2009200654ad7c200341e03a6a41086a2903007c200c200954ad7c200341a03b6a41086a2903007c200f200c54ad7c2005200f54ad7c420d868442137e201b42ffffffffffffff03837c220542ffffffffffffff0383220c3703b03b20032005423388201942ffffffffffffff03837c220f3703b83b200341a8c1006a200341b03b6a4101106e20034190356a20032903a841220542002004420010e808200341e0356a20032903c841220642002008420010e808200341b0366a20032903c04122094200200b420010e80820034180376a20032903b84122154200200e420010e808200341d0376a20032903b041221642002011420010e808200341e0376a201642002004420010e808200341a0356a200542002007420010e808200341f0356a20064200200b420010e808200341c0366a20094200200e420010e80820034190376a201542002011420010e808200341a0376a201542002004420010e808200341f0376a201642002007420010e808200341b0356a20054200200a420010e80820034180366a20064200200e420010e808200341d0366a200942002011420010e808200341e0366a200942002004420010e808200341b0376a201542002007420010e80820034180386a20164200200a420010e808200341c0356a20054200200d420010e80820034190366a200642002011420010e808200341a0366a200642002004420010e808200341f0366a200942002007420010e808200341c0376a20154200200a420010e80820034190386a20164200200d420010e808200341d0356a200542002010420010e808200341800d6a200c420020012903002211420010e80820034190346a200f42137e42002001290320220e420010e808200341d0336a200129031822054200201442137e220b420010e80820034190336a200129031022064200201842137e2216420010e808200341c0326a200129030822094200201a42137e2215420010e808200341f00c6a20094200200c420010e80820034180356a200f42002011420010e80820034180346a200e4200200b420010e808200341c0336a200542002016420010e80820034180336a200642002015420010e808200341e00c6a200c42002006420010e808200341b0326a200f42002009420010e808200341f0346a201142002014420010e808200341f0336a200e42002016420010e808200341b0336a200542002015420010e808200341800c6a200c42002005420010e808200341f0326a200f42002006420010e808200341a0326a200942002014420010e808200341e0346a201142002018420010e808200341e0336a20154200200e420010e808200341a00b6a200c4200200e420010e808200341a0336a200f42002005420010e808200341e0326a200642002014420010e80820034190326a200942002018420010e808200341d0346a201a42002011420010e80820034180306a20032903a036221c20032903d0357c220c20032903f0367c220f20032903c0377c22142003290390387c2215200329039036221d20032903c0357c221620032903e0367c220b20032903b0377c22182003290380387c2219200329038036221e20032903b0357c221a20032903d0367c221b20032903a0377c221320032903f0377c220820032903f035221f20032903a0357c221220032903c0367c22172003290390377c222020032903e0377c222120032903e03522222003290390357c222320032903b0367c22242003290380377c222520032903d0377c2226423388200341e0356a41086a29030020034190356a41086a2903007c2023202254ad7c200341b0366a41086a2903007c2024202354ad7c20034180376a41086a2903007c2025202454ad7c200341d0376a41086a2903007c2026202554ad7c420d86847c2223423388200341f0356a41086a290300200341a0356a41086a2903007c2012201f54ad7c200341c0366a41086a2903007c2017201254ad7c20034190376a41086a2903007c2020201754ad7c200341e0376a41086a2903007c2021202054ad7c2023202154ad7c420d86847c221242338820034180366a41086a290300200341b0356a41086a2903007c201a201e54ad7c200341d0366a41086a2903007c201b201a54ad7c200341a0376a41086a2903007c2013201b54ad7c200341f0376a41086a2903007c2008201354ad7c2012200854ad7c420d86847c221a42338820034190366a41086a290300200341c0356a41086a2903007c2016201d54ad7c200341e0366a41086a2903007c200b201654ad7c200341b0376a41086a2903007c2018200b54ad7c20034180386a41086a2903007c2019201854ad7c201a201954ad7c420d86847c2216423388200341a0366a41086a290300200341d0356a41086a2903007c200c201c54ad7c200341f0366a41086a2903007c200f200c54ad7c200341c0376a41086a2903007c2014200f54ad7c20034190386a41086a2903007c2015201454ad7c2016201554ad7c420d868442137e202642ffffffffffffff03837c220f42ffffffffffffff0383220c42002011420010e808200341d0306a200f423388202342ffffffffffffff03837c220f42137e4200200e420010e808200341f0306a201242ffffffffffffff0383221442137e221942002005420010e808200341a0316a201a42ffffffffffffff0383220b42137e221842002006420010e808200341e0316a201642ffffffffffffff0383221642137e221542002009420010e808200341f02f6a200c42002009420010e808200341c0306a200f42002011420010e808200341e0306a20194200200e420010e80820034190316a201842002005420010e808200341d0316a201542002006420010e808200341e02f6a200c42002006420010e808200341b0306a200f42002009420010e808200341c0346a201442002011420010e80820034180316a20184200200e420010e808200341c0316a201542002005420010e808200341d02f6a200c42002005420010e808200341a0306a200f42002006420010e80820034180326a201442002009420010e808200341b0346a200b42002011420010e808200341b0316a20154200200e420010e808200341c02f6a200c4200200e420010e80820034190306a200f42002005420010e808200341d0326a201442002006420010e808200341f0316a200b42002009420010e808200341a0346a201642002011420010e8082003200329038031221220032903c0347c220f20032903c0317c221420032903e02f7c221520032903b0307c2216200329039031221720032903e0307c220c20032903d0317c220b20032903f02f7c221820032903c0307c221920032903a031222020032903f0307c221a20032903e0317c221b2003290380307c221320032903d0307c2208423388200341a0316a41086a290300200341f0306a41086a2903007c201a202054ad7c200341e0316a41086a2903007c201b201a54ad7c20034180306a41086a2903007c2013201b54ad7c200341d0306a41086a2903007c2008201354ad7c420d86847c221a42338820034190316a41086a290300200341e0306a41086a2903007c200c201754ad7c200341d0316a41086a2903007c200b200c54ad7c200341f02f6a41086a2903007c2018200b54ad7c200341c0306a41086a2903007c2019201854ad7c201a201954ad7c420d86847c220b42ffffffffffffff0383220c3703e83b200320032903b03422172003290380327c221820032903b0317c221920032903d02f7c221b20032903a0307c2213200b42338820034180316a41086a290300200341c0346a41086a2903007c200f201254ad7c200341c0316a41086a2903007c2014200f54ad7c200341e02f6a41086a2903007c2015201454ad7c200341b0306a41086a2903007c2016201554ad7c200b201654ad7c420d86847c221442ffffffffffffff0383220f3703f03b200320032903f031222020032903d0327c221520032903a0347c221620032903c02f7c220b2003290390307c22122014423388200341b0346a41086a29030020034180326a41086a2903007c2018201754ad7c200341b0316a41086a2903007c2019201854ad7c200341d02f6a41086a2903007c201b201954ad7c200341a0306a41086a2903007c2013201b54ad7c2014201354ad7c420d86847c221842ffffffffffffff038322143703f83b20032018423388200341f0316a41086a290300200341d0326a41086a2903007c2015202054ad7c200341a0346a41086a2903007c2016201554ad7c200341c02f6a41086a2903007c200b201654ad7c20034190306a41086a2903007c2012200b54ad7c2018201254ad7c420d868442137e200842ffffffffffffff03837c221642ffffffffffffff038322153703d83b20032016423388201a42ffffffffffffff03837c22163703e03b200341803c6a200341d83b6a4101106e200341a8c1006a200341803c6a4101106e200341a83c6a200341a8c1006a4101106e200341b02f6a20032903a83c220b42002015420010e808200341b02c6a2014420020032903b03c221842137e420010e808200341902d6a200f420020032903b83c221942137e2208420010e808200341f02d6a200c420020032903c03c221b42137e2213420010e808200341d02e6a2016420020032903c83c221242137e221a420010e808200341a02f6a20164200200b420010e808200341f02c6a201542002018420010e808200341802d6a201442002008420010e808200341e02d6a200f42002013420010e808200341c02e6a200c4200201a420010e808200341902f6a200c4200200b420010e808200341e02c6a201642002018420010e808200341c02d6a201542002019420010e808200341d02d6a201442002013420010e808200341b02e6a200f4200201a420010e808200341802f6a200f4200200b420010e808200341d02c6a200c42002018420010e808200341b02d6a201642002019420010e808200341902e6a20154200201b420010e808200341a02e6a20144200201a420010e808200341f02e6a20144200200b420010e808200341c02c6a200f42002018420010e808200341a02d6a200c42002019420010e808200341802e6a20164200201b420010e808200341e02e6a201542002012420010e808200341e0296a20032903f02e222720032903e02e7c220b20032903c02c7c221820032903a02d7c221920032903802e7c221a20032903a02e222820032903902e7c221b20032903802f7c221320032903d02c7c220820032903b02d7c221220032903d02d222920032903c02d7c221720032903b02e7c222020032903902f7c222120032903e02c7c222320032903802d222a20032903f02c7c222420032903e02d7c222520032903c02e7c222620032903a02f7c221c20032903b02c222b20032903b02f7c221d20032903902d7c221e20032903f02d7c221f20032903d02e7c2222423388200341b02c6a41086a290300200341b02f6a41086a2903007c201d202b54ad7c200341902d6a41086a2903007c201e201d54ad7c200341f02d6a41086a2903007c201f201e54ad7c200341d02e6a41086a2903007c2022201f54ad7c420d86847c221d423388200341802d6a41086a290300200341f02c6a41086a2903007c2024202a54ad7c200341e02d6a41086a2903007c2025202454ad7c200341c02e6a41086a2903007c2026202554ad7c200341a02f6a41086a2903007c201c202654ad7c201d201c54ad7c420d86847c2224423388200341d02d6a41086a290300200341c02d6a41086a2903007c2017202954ad7c200341b02e6a41086a2903007c2020201754ad7c200341902f6a41086a2903007c2021202054ad7c200341e02c6a41086a2903007c2023202154ad7c2024202354ad7c420d86847c2217423388200341a02e6a41086a290300200341902e6a41086a2903007c201b202854ad7c200341802f6a41086a2903007c2013201b54ad7c200341d02c6a41086a2903007c2008201354ad7c200341b02d6a41086a2903007c2012200854ad7c2017201254ad7c420d86847c221b423388200341f02e6a41086a290300200341e02e6a41086a2903007c200b202754ad7c200341c02c6a41086a2903007c2018200b54ad7c200341a02d6a41086a2903007c2019201854ad7c200341802e6a41086a2903007c201a201954ad7c201b201a54ad7c420d868442137e202242ffffffffffffff03837c221842ffffffffffffff0383220b420020032903803c2213420010e808200341b02a6a2018423388201d42ffffffffffffff03837c221842137e420020032903a03c2208420010e808200341d02a6a202442ffffffffffffff0383221942137e2224420020032903983c2212420010e808200341802b6a201742ffffffffffffff0383221a42137e2223420020032903903c2217420010e808200341c02b6a201b42ffffffffffffff0383221b42137e2221420020032903883c2220420010e808200341d0296a200b42002020420010e808200341a02a6a201842002013420010e808200341c02a6a202442002008420010e808200341f02a6a202342002012420010e808200341b02b6a202142002017420010e808200341c0296a200b42002017420010e808200341902a6a201842002020420010e808200341d02b6a201942002013420010e808200341e02a6a202342002008420010e808200341a02b6a202142002012420010e808200341b0296a200b42002012420010e808200341802a6a201842002017420010e808200341e02b6a201942002020420010e808200341802c6a201a42002013420010e808200341902b6a202142002008420010e808200341a0296a200b42002008420010e808200341f0296a201842002012420010e808200341f02b6a201942002017420010e808200341902c6a201a42002020420010e808200341a02c6a201b42002013420010e808200320032903e02a221e20032903d02b7c221320032903a02b7c220820032903c0297c221220032903902a7c221720032903f02a221f20032903c02a7c222020032903b02b7c222120032903d0297c222320032903a02a7c222420032903802b222220032903d02a7c222520032903c02b7c222620032903e0297c221c20032903b02a7c221d423388200341802b6a41086a290300200341d02a6a41086a2903007c2025202254ad7c200341c02b6a41086a2903007c2026202554ad7c200341e0296a41086a2903007c201c202654ad7c200341b02a6a41086a2903007c201d201c54ad7c420d86847c2225423388200341f02a6a41086a290300200341c02a6a41086a2903007c2020201f54ad7c200341b02b6a41086a2903007c2021202054ad7c200341d0296a41086a2903007c2023202154ad7c200341a02a6a41086a2903007c2024202354ad7c2025202454ad7c420d86847c222042ffffffffffffff03833703e03c200320032903802c221c20032903e02b7c222120032903902b7c222320032903b0297c222420032903802a7c22262020423388200341e02a6a41086a290300200341d02b6a41086a2903007c2013201e54ad7c200341a02b6a41086a2903007c2008201354ad7c200341c0296a41086a2903007c2012200854ad7c200341902a6a41086a2903007c2017201254ad7c2020201754ad7c420d86847c221342ffffffffffffff03833703e83c200320032903902c221e20032903f02b7c220820032903a02c7c221220032903a0297c221720032903f0297c22202013423388200341802c6a41086a290300200341e02b6a41086a2903007c2021201c54ad7c200341902b6a41086a2903007c2023202154ad7c200341b0296a41086a2903007c2024202354ad7c200341802a6a41086a2903007c2026202454ad7c2013202654ad7c420d86847c221342ffffffffffffff03833703f03c20032013423388200341902c6a41086a290300200341f02b6a41086a2903007c2008201e54ad7c200341a02c6a41086a2903007c2012200854ad7c200341a0296a41086a2903007c2017201254ad7c200341f0296a41086a2903007c2020201754ad7c2013202054ad7c420d868442137e201d42ffffffffffffff03837c221342ffffffffffffff03833703d03c20032013423388202542ffffffffffffff03837c3703d83c200341f83c6a200341d03c6a4101106e20034190296a200b420020032903f83c2213420010e80820034190266a201b420020032903803d220842137e420010e808200341f0266a20032903883d221242137e22234200201a420010e808200341d0276a20032903903d222042137e222142002019420010e808200341b0286a2018420020032903983d222442137e2217420010e80820034180296a201842002013420010e808200341d0266a200b42002008420010e808200341e0266a201b42002023420010e808200341c0276a20214200201a420010e808200341a0286a201742002019420010e808200341f0286a201342002019420010e808200341c0266a201842002008420010e808200341a0276a200b42002012420010e808200341b0276a20214200201b420010e80820034190286a20174200201a420010e808200341e0286a20134200201a420010e808200341b0266a200842002019420010e80820034190276a201842002012420010e808200341f0276a200b42002020420010e80820034180286a20174200201b420010e808200341d0286a20134200201b420010e808200341a0266a20084200201a420010e80820034180276a201242002019420010e808200341e0276a201842002020420010e808200341c0286a200b42002024420010e8082003200329039028222520032903b0277c220b20032903f0287c221820032903a0277c221a20032903c0267c221b20032903c027222420032903e0267c221920032903a0287c221320032903d0267c22082003290380297c221220032903f02622262003290390267c221720032903d0277c22202003290390297c222120032903b0287c2223423388200341f0266a41086a29030020034190266a41086a2903007c2017202654ad7c200341d0276a41086a2903007c2020201754ad7c20034190296a41086a2903007c2021202054ad7c200341b0286a41086a2903007c2023202154ad7c420d86847c2220423388200341c0276a41086a290300200341e0266a41086a2903007c2019202454ad7c200341a0286a41086a2903007c2013201954ad7c200341d0266a41086a2903007c2008201354ad7c20034180296a41086a2903007c2012200854ad7c2020201254ad7c420d86847c221342ffffffffffffff038322193703b03d2003200329038028222620032903b0267c220820032903e0287c221220032903f0277c22212003290390277c2224201342338820034190286a41086a290300200341b0276a41086a2903007c200b202554ad7c200341f0286a41086a2903007c2018200b54ad7c200341a0276a41086a2903007c201a201854ad7c200341c0266a41086a2903007c201b201a54ad7c2013201b54ad7c420d86847c220b42ffffffffffffff038322173703b83d2003200329038027222520032903a0267c221820032903d0287c221a20032903c0287c221b20032903e0277c2213200b42338820034180286a41086a290300200341b0266a41086a2903007c2008202654ad7c200341e0286a41086a2903007c2012200854ad7c200341f0276a41086a2903007c2021201254ad7c20034190276a41086a2903007c2024202154ad7c200b202454ad7c420d86847c220b42ffffffffffffff038322213703c03d2003200b42338820034180276a41086a290300200341a0266a41086a2903007c2018202554ad7c200341d0286a41086a2903007c201a201854ad7c200341c0286a41086a2903007c201b201a54ad7c200341e0276a41086a2903007c2013201b54ad7c200b201354ad7c420d868442137e202342ffffffffffffff03837c221842ffffffffffffff0383220b3703a03d20032018423388202042ffffffffffffff03837c22183703a83d200341c83d6a200341a03d6a4105106e200341c0236a200b420020032903c83d221a420010e808200341c0246a201842137e420020032903e83d221b420010e80820034180256a201942137e2224420020032903e03d2213420010e808200341c0256a201742137e2223420020032903d83d2208420010e80820034180266a202142137e2220420020032903d03d2212420010e808200341b0236a200b42002012420010e80820034180246a20184200201a420010e808200341b0246a20244200201b420010e808200341f0246a202342002013420010e808200341b0256a202042002008420010e808200341a0236a200b42002008420010e808200341f0256a201842002012420010e808200341f0236a20194200201a420010e808200341a0246a20234200201b420010e808200341e0246a202042002013420010e80820034190236a200b42002013420010e808200341a0256a201842002008420010e808200341e0256a201942002012420010e808200341e0236a20174200201a420010e80820034190246a20204200201b420010e80820034180236a200b4200201b420010e808200341d0246a201842002013420010e80820034190256a201942002008420010e808200341d0256a201742002012420010e808200341d0236a20214200201a420010e808200320032903a024222420032903f0237c220b20032903e0247c221820032903a0237c221a20032903f0257c221b20032903f024222520032903b0247c221920032903b0257c221320032903b0237c22082003290380247c221220032903c02522262003290380257c22172003290380267c222020032903c0237c222120032903c0247c2223423388200341c0256a41086a29030020034180256a41086a2903007c2017202654ad7c20034180266a41086a2903007c2020201754ad7c200341c0236a41086a2903007c2021202054ad7c200341c0246a41086a2903007c2023202154ad7c420d86847c2217423388200341f0246a41086a290300200341b0246a41086a2903007c2019202554ad7c200341b0256a41086a2903007c2013201954ad7c200341b0236a41086a2903007c2008201354ad7c20034180246a41086a2903007c2012200854ad7c2017201254ad7c420d86847c221342ffffffffffffff038322193703803e200320032903e023222520032903e0257c22082003290390247c22122003290390237c222020032903a0257c22212013423388200341a0246a41086a290300200341f0236a41086a2903007c200b202454ad7c200341e0246a41086a2903007c2018200b54ad7c200341a0236a41086a2903007c201a201854ad7c200341f0256a41086a2903007c201b201a54ad7c2013201b54ad7c420d86847c220b42ffffffffffffff0383221b3703883e200320032903d025221c2003290390257c221820032903d0237c221a2003290380237c221320032903d0247c2224200b423388200341e0236a41086a290300200341e0256a41086a2903007c2008202554ad7c20034190246a41086a2903007c2012200854ad7c20034190236a41086a2903007c2020201254ad7c200341a0256a41086a2903007c2021202054ad7c200b202154ad7c420d86847c220b42ffffffffffffff038322263703903e2003200b423388200341d0256a41086a29030020034190256a41086a2903007c2018201c54ad7c200341d0236a41086a2903007c201a201854ad7c20034180236a41086a2903007c2013201a54ad7c200341d0246a41086a2903007c2024201354ad7c200b202454ad7c420d868442137e202342ffffffffffffff03837c221842ffffffffffffff0383220b3703f03d20032018423388201742ffffffffffffff03837c22183703f83d200341983e6a200341f03d6a410a106e200341b0206a200b420020032903983e2208420010e80820034180216a201842137e2228420020032903b83e2212420010e808200341d0216a201942137e221c420020032903b03e2217420010e808200341a0226a201b42137e2213420020032903a83e2220420010e808200341f0226a202642137e221a420020032903a03e2221420010e808200341e0226a200b42002021420010e808200341a0206a201842002008420010e808200341f0206a201c42002012420010e808200341c0216a201342002017420010e80820034190226a201a42002020420010e80820034180226a200b42002020420010e808200341d0226a201842002021420010e80820034190206a201942002008420010e808200341e0206a201342002012420010e808200341b0216a201a42002017420010e808200341a0216a200b42002017420010e808200341f0216a201842002020420010e808200341c0226a201942002021420010e80820034180206a201b42002008420010e808200341d0206a201a42002012420010e808200341c0206a200b42002012420010e80820034190216a201842002017420010e808200341e0216a201942002020420010e808200341b0226a201b42002021420010e808200341f01f6a202642002008420010e808200320032903e02022292003290390207c220820032903b0217c22122003290380227c222020032903d0227c222120032903c021222720032903f0207c22172003290390227c222320032903e0227c222420032903a0207c222520032903a022222a20032903d0217c221d20032903f0227c221e20032903b0207c221f2003290380217c2222423388200341a0226a41086a290300200341d0216a41086a2903007c201d202a54ad7c200341f0226a41086a2903007c201e201d54ad7c200341b0206a41086a2903007c201f201e54ad7c20034180216a41086a2903007c2022201f54ad7c420d86847c221e423388200341c0216a41086a290300200341f0206a41086a2903007c2017202754ad7c20034190226a41086a2903007c2023201754ad7c200341e0226a41086a2903007c2024202354ad7c200341a0206a41086a2903007c2025202454ad7c201e202554ad7c420d86847c222342ffffffffffffff038322173703d03e2003200329038020222a20032903c0227c222420032903d0207c222520032903a0217c221f20032903f0217c22272023423388200341e0206a41086a29030020034190206a41086a2903007c2008202954ad7c200341b0216a41086a2903007c2012200854ad7c20034180226a41086a2903007c2020201254ad7c200341d0226a41086a2903007c2021202054ad7c2023202154ad7c420d86847c220842ffffffffffffff0383221d3703d83e200320032903b022222920032903e0217c221220032903f01f7c222020032903c0207c22212003290390217c2223200842338820034180206a41086a290300200341c0226a41086a2903007c2024202a54ad7c200341d0206a41086a2903007c2025202454ad7c200341a0216a41086a2903007c201f202554ad7c200341f0216a41086a2903007c2027201f54ad7c2008202754ad7c420d86847c220842ffffffffffffff0383221f3703e03e20032008423388200341b0226a41086a290300200341e0216a41086a2903007c2012202954ad7c200341f01f6a41086a2903007c2020201254ad7c200341c0206a41086a2903007c2021202054ad7c20034190216a41086a2903007c2023202154ad7c2008202354ad7c420d868442137e202242ffffffffffffff03837c221242ffffffffffffff038322083703c03e20032012423388201e42ffffffffffffff03837c22123703c83e200341e83e6a200341c03e6a4114106e200341a01d6a2008420020032903e83e2220420010e808200341f01d6a201242137e420020032903883f2221420010e808200341c01e6a201742137e2227420020032903803f2223420010e808200341901f6a201d42137e2222420020032903f83e2224420010e808200341e01f6a201f42137e221e420020032903f03e2225420010e808200341d01f6a200842002025420010e808200341901d6a201242002020420010e808200341e01d6a202742002021420010e808200341b01e6a202242002023420010e808200341801f6a201e42002024420010e808200341f01e6a200842002024420010e808200341c01f6a201242002025420010e808200341801d6a201742002020420010e808200341d01d6a202242002021420010e808200341a01e6a201e42002023420010e808200341901e6a200842002023420010e808200341e01e6a201242002024420010e808200341b01f6a201742002025420010e808200341f01c6a201d42002020420010e808200341c01d6a201e42002021420010e808200341b01d6a200842002021420010e808200341801e6a201242002023420010e808200341d01e6a201742002024420010e808200341a01f6a201d42002025420010e808200341e01c6a201f42002020420010e808200320032903d01d222720032903801d7c220820032903a01e7c221220032903f01e7c221720032903c01f7c222020032903b01e222920032903e01d7c222120032903801f7c222320032903d01f7c222420032903901d7c222520032903901f222a20032903c01e7c221d20032903e01f7c221e20032903a01d7c221f20032903f01d7c2222423388200341901f6a41086a290300200341c01e6a41086a2903007c201d202a54ad7c200341e01f6a41086a2903007c201e201d54ad7c200341a01d6a41086a2903007c201f201e54ad7c200341f01d6a41086a2903007c2022201f54ad7c420d86847c221d423388200341b01e6a41086a290300200341e01d6a41086a2903007c2021202954ad7c200341801f6a41086a2903007c2023202154ad7c200341d01f6a41086a2903007c2024202354ad7c200341901d6a41086a2903007c2025202454ad7c201d202554ad7c420d86847c222142ffffffffffffff03833703a03f200320032903f01c221f20032903b01f7c222320032903c01d7c222420032903901e7c222520032903e01e7c221e2021423388200341d01d6a41086a290300200341801d6a41086a2903007c2008202754ad7c200341a01e6a41086a2903007c2012200854ad7c200341f01e6a41086a2903007c2017201254ad7c200341c01f6a41086a2903007c2020201754ad7c2021202054ad7c420d86847c220842ffffffffffffff03833703a83f200320032903a01f222720032903d01e7c221220032903e01c7c221720032903b01d7c222020032903801e7c22212008423388200341f01c6a41086a290300200341b01f6a41086a2903007c2023201f54ad7c200341c01d6a41086a2903007c2024202354ad7c200341901e6a41086a2903007c2025202454ad7c200341e01e6a41086a2903007c201e202554ad7c2008201e54ad7c420d86847c220842ffffffffffffff03833703b03f20032008423388200341a01f6a41086a290300200341d01e6a41086a2903007c2012202754ad7c200341e01c6a41086a2903007c2017201254ad7c200341b01d6a41086a2903007c2020201754ad7c200341801e6a41086a2903007c2021202054ad7c2008202154ad7c420d868442137e202242ffffffffffffff03837c220842ffffffffffffff03833703903f20032008423388201d42ffffffffffffff03837c3703983f200341b83f6a200341903f6a410a106e200341901a6a200b420020032903b83f2208420010e808200341e01a6a2028420020032903d83f2212420010e808200341b01b6a20032903d03f22174200201c420010e808200341801c6a20032903c83f222042002013420010e808200341d01c6a20032903c03f22214200201a420010e808200341c01c6a20214200200b420010e808200341801a6a201842002008420010e808200341d01a6a20124200201c420010e808200341a01b6a201742002013420010e808200341f01b6a20204200201a420010e808200341e01b6a20204200200b420010e808200341b01c6a202142002018420010e808200341f0196a200842002019420010e808200341c01a6a201242002013420010e808200341901b6a20174200201a420010e808200341801b6a20174200200b420010e808200341d01b6a202042002018420010e808200341a01c6a202142002019420010e808200341e0196a20084200201b420010e808200341b01a6a20124200201a420010e808200341a01a6a20124200200b420010e808200341f01a6a201742002018420010e808200341c01b6a202042002019420010e808200341901c6a20214200201b420010e808200341d0196a200842002026420010e808200320032903c01a222420032903f0197c220b20032903901b7c221820032903e01b7c221a20032903b01c7c221b20032903801a222520032903d01a7c221920032903a01b7c221320032903f01b7c220820032903c01c7c221220032903b01b222620032903901a7c221720032903e01a7c222020032903801c7c222120032903d01c7c2223423388200341b01b6a41086a290300200341901a6a41086a2903007c2017202654ad7c200341e01a6a41086a2903007c2020201754ad7c200341801c6a41086a2903007c2021202054ad7c200341d01c6a41086a2903007c2023202154ad7c420d86847c2217423388200341801a6a41086a290300200341d01a6a41086a2903007c2019202554ad7c200341a01b6a41086a2903007c2013201954ad7c200341f01b6a41086a2903007c2008201354ad7c200341c01c6a41086a2903007c2012200854ad7c2017201254ad7c420d86847c221342ffffffffffffff038322193703f03f200320032903b01a222520032903e0197c220820032903801b7c221220032903d01b7c222020032903a01c7c22212013423388200341c01a6a41086a290300200341f0196a41086a2903007c200b202454ad7c200341901b6a41086a2903007c2018200b54ad7c200341e01b6a41086a2903007c201a201854ad7c200341b01c6a41086a2903007c201b201a54ad7c2013201b54ad7c420d86847c220b42ffffffffffffff0383221b3703f83f200320032903a01a221c20032903d0197c221820032903f01a7c221a20032903c01b7c221320032903901c7c2224200b423388200341b01a6a41086a290300200341e0196a41086a2903007c2008202554ad7c200341801b6a41086a2903007c2012200854ad7c200341d01b6a41086a2903007c2020201254ad7c200341a01c6a41086a2903007c2021202054ad7c200b202154ad7c420d86847c220b42ffffffffffffff03832226370380402003200b423388200341a01a6a41086a290300200341d0196a41086a2903007c2018201c54ad7c200341f01a6a41086a2903007c201a201854ad7c200341c01b6a41086a2903007c2013201a54ad7c200341901c6a41086a2903007c2024201354ad7c200b202454ad7c420d868442137e202342ffffffffffffff03837c221842ffffffffffffff0383220b3703e03f20032018423388201742ffffffffffffff03837c22183703e83f20034188c0006a200341e03f6a4132106e20034180176a200b42002003290388402208420010e808200341d0176a201842137e2228420020032903a8402212420010e808200341a0186a201942137e221c420020032903a0402217420010e808200341f0186a201b42137e221342002003290398402220420010e808200341c0196a202642137e221a42002003290390402221420010e808200341b0196a200b42002021420010e808200341f0166a201842002008420010e808200341c0176a201c42002012420010e80820034190186a201342002017420010e808200341e0186a201a42002020420010e808200341d0186a200b42002020420010e808200341a0196a201842002021420010e808200341e0166a201942002008420010e808200341b0176a201342002012420010e80820034180186a201a42002017420010e808200341f0176a200b42002017420010e808200341c0186a201842002020420010e80820034190196a202142002019420010e808200341d0166a201b42002008420010e808200341a0176a201a42002012420010e80820034190176a200b42002012420010e808200341e0176a201842002017420010e808200341b0186a201942002020420010e80820034180196a201b42002021420010e808200341c0166a202642002008420010e808200320032903b017222920032903e0167c22082003290380187c221220032903d0187c222020032903a0197c2221200329039018222720032903c0177c221720032903e0187c222320032903b0197c222420032903f0167c222520032903f018222a20032903a0187c221d20032903c0197c221e2003290380177c221f20032903d0177c2222423388200341f0186a41086a290300200341a0186a41086a2903007c201d202a54ad7c200341c0196a41086a2903007c201e201d54ad7c20034180176a41086a2903007c201f201e54ad7c200341d0176a41086a2903007c2022201f54ad7c420d86847c221e42338820034190186a41086a290300200341c0176a41086a2903007c2017202754ad7c200341e0186a41086a2903007c2023201754ad7c200341b0196a41086a2903007c2024202354ad7c200341f0166a41086a2903007c2025202454ad7c201e202554ad7c420d86847c222342ffffffffffffff038322173703c040200320032903d016222a2003290390197c222420032903a0177c222520032903f0177c221f20032903c0187c22272023423388200341b0176a41086a290300200341e0166a41086a2903007c2008202954ad7c20034180186a41086a2903007c2012200854ad7c200341d0186a41086a2903007c2020201254ad7c200341a0196a41086a2903007c2021202054ad7c2023202154ad7c420d86847c220842ffffffffffffff0383221d3703c8402003200329038019222920032903b0187c221220032903c0167c22202003290390177c222120032903e0177c22232008423388200341d0166a41086a29030020034190196a41086a2903007c2024202a54ad7c200341a0176a41086a2903007c2025202454ad7c200341f0176a41086a2903007c201f202554ad7c200341c0186a41086a2903007c2027201f54ad7c2008202754ad7c420d86847c220842ffffffffffffff0383221f3703d0402003200842338820034180196a41086a290300200341b0186a41086a2903007c2012202954ad7c200341c0166a41086a2903007c2020201254ad7c20034190176a41086a2903007c2021202054ad7c200341e0176a41086a2903007c2023202154ad7c2008202354ad7c420d868442137e202242ffffffffffffff03837c221242ffffffffffffff038322083703b04020032012423388201e42ffffffffffffff03837c22123703b840200341d8c0006a200341b0c0006a41e400106e200341f0136a2008420020032903d8402220420010e808200341c0146a201242137e420020032903f8402221420010e80820034190156a201742137e2227420020032903f0402223420010e808200341e0156a201d42137e2222420020032903e8402224420010e808200341b0166a201f42137e221e420020032903e0402225420010e808200341a0166a200842002025420010e808200341e0136a201242002020420010e808200341b0146a202742002021420010e80820034180156a202242002023420010e808200341d0156a201e42002024420010e808200341c0156a200842002024420010e80820034190166a201242002025420010e808200341d0136a201742002020420010e808200341a0146a202242002021420010e808200341f0146a201e42002023420010e808200341e0146a200842002023420010e808200341b0156a201242002024420010e80820034180166a201742002025420010e808200341c0136a201d42002020420010e80820034190146a201e42002021420010e80820034180146a200842002021420010e808200341d0146a201242002023420010e808200341a0156a201742002024420010e808200341f0156a201d42002025420010e808200341b0136a201f42002020420010e808200320032903a014222720032903d0137c220820032903f0147c221220032903c0157c22172003290390167c2220200329038015222920032903b0147c222120032903d0157c222320032903a0167c222420032903e0137c222520032903e015222a2003290390157c221d20032903b0167c221e20032903f0137c221f20032903c0147c2222423388200341e0156a41086a29030020034190156a41086a2903007c201d202a54ad7c200341b0166a41086a2903007c201e201d54ad7c200341f0136a41086a2903007c201f201e54ad7c200341c0146a41086a2903007c2022201f54ad7c420d86847c221d42338820034180156a41086a290300200341b0146a41086a2903007c2021202954ad7c200341d0156a41086a2903007c2023202154ad7c200341a0166a41086a2903007c2024202354ad7c200341e0136a41086a2903007c2025202454ad7c201d202554ad7c420d86847c222142ffffffffffffff038337039041200320032903c013221f2003290380167c22232003290390147c222420032903e0147c222520032903b0157c221e2021423388200341a0146a41086a290300200341d0136a41086a2903007c2008202754ad7c200341f0146a41086a2903007c2012200854ad7c200341c0156a41086a2903007c2017201254ad7c20034190166a41086a2903007c2020201754ad7c2021202054ad7c420d86847c220842ffffffffffffff038337039841200320032903f015222720032903a0157c221220032903b0137c22172003290380147c222020032903d0147c22212008423388200341c0136a41086a29030020034180166a41086a2903007c2023201f54ad7c20034190146a41086a2903007c2024202354ad7c200341e0146a41086a2903007c2025202454ad7c200341b0156a41086a2903007c201e202554ad7c2008201e54ad7c420d86847c220842ffffffffffffff03833703a04120032008423388200341f0156a41086a290300200341a0156a41086a2903007c2012202754ad7c200341b0136a41086a2903007c2017201254ad7c20034180146a41086a2903007c2020201754ad7c200341d0146a41086a2903007c2021202054ad7c2008202154ad7c420d868442137e202242ffffffffffffff03837c220842ffffffffffffff03833703804120032008423388201d42ffffffffffffff03837c37038841200341a8c1006a20034180c1006a4132106e200341a0106a20032903a84122084200200b420010e808200341f0106a20032903c841221242002028420010e808200341c0116a20032903c04122174200201c420010e80820034190126a20032903b841222042002013420010e808200341e0126a20032903b04122214200201a420010e808200341f0126a20214200200b420010e808200341b0106a200842002018420010e80820034180116a20124200201c420010e808200341d0116a201742002013420010e808200341a0126a20204200201a420010e808200341b0126a20204200200b420010e80820034180136a202142002018420010e808200341c0106a200842002019420010e80820034190116a201242002013420010e808200341e0116a20174200201a420010e808200341f0116a20174200200b420010e808200341c0126a202042002018420010e80820034190136a202142002019420010e808200341d0106a20084200201b420010e808200341a0116a20124200201a420010e808200341b0116a20124200200b420010e80820034180126a201742002018420010e808200341d0126a202042002019420010e808200341a0136a20214200201b420010e808200341e0106a200842002026420010e8082003200329039011222420032903c0107c220b20032903e0117c221820032903b0127c22192003290380137c221a200329038011222520032903b0107c221b20032903d0117c221320032903a0127c220820032903f0127c221220032903f010222620032903a0107c221720032903c0117c22202003290390127c222120032903e0127c2223423388200341f0106a41086a290300200341a0106a41086a2903007c2017202654ad7c200341c0116a41086a2903007c2020201754ad7c20034190126a41086a2903007c2021202054ad7c200341e0126a41086a2903007c2023202154ad7c420d86847c221742338820034180116a41086a290300200341b0106a41086a2903007c201b202554ad7c200341d0116a41086a2903007c2013201b54ad7c200341a0126a41086a2903007c2008201354ad7c200341f0126a41086a2903007c2012200854ad7c2017201254ad7c420d86847c221b42ffffffffffffff038337039041200320032903a011222120032903d0107c221320032903f0117c220820032903c0127c22122003290390137c2220201b42338820034190116a41086a290300200341c0106a41086a2903007c200b202454ad7c200341e0116a41086a2903007c2018200b54ad7c200341b0126a41086a2903007c2019201854ad7c20034180136a41086a2903007c201a201954ad7c201b201a54ad7c420d86847c220b42ffffffffffffff038337039841200320032903b011222420032903e0107c22182003290380127c221920032903d0127c221a20032903a0137c221b200b423388200341a0116a41086a290300200341d0106a41086a2903007c2013202154ad7c200341f0116a41086a2903007c2008201354ad7c200341c0126a41086a2903007c2012200854ad7c20034190136a41086a2903007c2020201254ad7c200b202054ad7c420d86847c220b42ffffffffffffff03833703a0412003200b423388200341b0116a41086a290300200341e0106a41086a2903007c2018202454ad7c20034180126a41086a2903007c2019201854ad7c200341d0126a41086a2903007c201a201954ad7c200341a0136a41086a2903007c201b201a54ad7c200b201b54ad7c420d868442137e202342ffffffffffffff03837c220b42ffffffffffffff0383370380412003200b423388201742ffffffffffffff03837c37038841200341a8c1006a20034180c1006a4102106e200341900d6a2015420020032903a841220b420010e80820034190106a2014420020032903b041221842137e420010e808200341c00f6a200f420020032903b841221942137e2208420010e808200341f00e6a200c420020032903c041221b42137e2213420010e808200341a00e6a2016420020032903c841221242137e221a420010e808200341a00d6a20164200200b420010e80820034180106a201542002018420010e808200341b00f6a201442002008420010e808200341e00e6a200f42002013420010e808200341900e6a200c4200201a420010e808200341b00d6a200c4200200b420010e808200341f00f6a201642002018420010e808200341a00f6a201542002019420010e808200341d00e6a201442002013420010e808200341800e6a200f4200201a420010e808200341c00d6a200f4200200b420010e808200341e00f6a200c42002018420010e808200341900f6a201642002019420010e808200341c00e6a20154200201b420010e808200341f00d6a20144200201a420010e808200341d00d6a20144200200b420010e808200341d00f6a200f42002018420010e808200341800f6a200c42002019420010e808200341b00e6a20164200201b420010e808200341e00d6a201542002012420010e808200341f0096a20032903d00f221c20032903800f7c220c20032903d00d7c220f20032903e00d7c221420032903b00e7c221520032903c00d221d20032903e00f7c221620032903f00d7c220b20032903c00e7c221820032903900f7c221920032903800e221e20032903b00d7c221a20032903d00e7c221b20032903a00f7c221320032903f00f7c220820032903e00e221f20032903900e7c221220032903b00f7c22172003290380107c222020032903a00d7c222120032903c00f222220032903f00e7c22232003290390107c222420032903900d7c222520032903a00e7c2226423388200341c00f6a41086a290300200341f00e6a41086a2903007c2023202254ad7c20034190106a41086a2903007c2024202354ad7c200341900d6a41086a2903007c2025202454ad7c200341a00e6a41086a2903007c2026202554ad7c420d86847c2223423388200341e00e6a41086a290300200341900e6a41086a2903007c2012201f54ad7c200341b00f6a41086a2903007c2017201254ad7c20034180106a41086a2903007c2020201754ad7c200341a00d6a41086a2903007c2021202054ad7c2023202154ad7c420d86847c2212423388200341800e6a41086a290300200341b00d6a41086a2903007c201a201e54ad7c200341d00e6a41086a2903007c201b201a54ad7c200341a00f6a41086a2903007c2013201b54ad7c200341f00f6a41086a2903007c2008201354ad7c2012200854ad7c420d86847c221a423388200341c00d6a41086a290300200341e00f6a41086a2903007c2016201d54ad7c200341f00d6a41086a2903007c200b201654ad7c200341c00e6a41086a2903007c2018200b54ad7c200341900f6a41086a2903007c2019201854ad7c201a201954ad7c420d86847c2218423388200341d00f6a41086a290300200341800f6a41086a2903007c200c201c54ad7c200341d00d6a41086a2903007c200f200c54ad7c200341e00d6a41086a2903007c2014200f54ad7c200341b00e6a41086a2903007c2015201454ad7c2018201554ad7c420d868442137e202642ffffffffffffff03837c222742ffffffffffffff0383220c420020032903e032222820032903d0347c220f20032903a00b7c22142003290390327c221520032903a0337c221620032903e033222920032903e0347c220b20032903800c7c221920032903a0327c221b20032903f0327c221320032903f033222a20032903f0347c220820032903b0337c221720032903e00c7c222020032903b0327c222120032903c033222b2003290380347c22242003290380337c222520032903f00c7c22262003290380357c221c200329039033222c20032903d0337c221d20032903800d7c221e20032903c0327c221f2003290390347c222242338820034190336a41086a290300200341d0336a41086a2903007c201d202c54ad7c200341800d6a41086a2903007c201e201d54ad7c200341c0326a41086a2903007c201f201e54ad7c20034190346a41086a2903007c2022201f54ad7c420d86847c221d423388200341c0336a41086a29030020034180346a41086a2903007c2024202b54ad7c20034180336a41086a2903007c2025202454ad7c200341f00c6a41086a2903007c2026202554ad7c20034180356a41086a2903007c201c202654ad7c201d201c54ad7c420d86847c2224423388200341f0336a41086a290300200341f0346a41086a2903007c2008202a54ad7c200341b0336a41086a2903007c2017200854ad7c200341e00c6a41086a2903007c2020201754ad7c200341b0326a41086a2903007c2021202054ad7c2024202154ad7c420d86847c2208423388200341e0336a41086a290300200341e0346a41086a2903007c200b202954ad7c200341800c6a41086a2903007c2019200b54ad7c200341a0326a41086a2903007c201b201954ad7c200341f0326a41086a2903007c2013201b54ad7c2008201354ad7c420d86847c220b423388200341e0326a41086a290300200341d0346a41086a2903007c200f202854ad7c200341a00b6a41086a2903007c2014200f54ad7c20034190326a41086a2903007c2015201454ad7c200341a0336a41086a2903007c2016201554ad7c200b201654ad7c420d868442137e202242ffffffffffffff03837c221742ffffffffffffff0383220f420010e808200341900b6a200b42ffffffffffffff0383221442002027423388202342ffffffffffffff03837c221542137e420010e808200341f00b6a200842ffffffffffffff038322164200201242ffffffffffffff0383221942137e2208420010e808200341d00c6a202442ffffffffffffff0383220b4200201a42ffffffffffffff0383221b42137e2213420010e808200341c00a6a201842ffffffffffffff0383221242137e221a42002017423388201d42ffffffffffffff03837c2218420010e808200341b00a6a200c42002018420010e808200341e0096a20154200200f420010e808200341800b6a201442002008420010e808200341e00b6a201642002013420010e808200341c00c6a200b4200201a420010e808200341b00c6a200b4200200c420010e808200341a00a6a201542002018420010e808200341d0096a20194200200f420010e808200341f00a6a201442002013420010e808200341d00b6a20164200201a420010e808200341c00b6a20164200200c420010e808200341a00c6a200b42002015420010e808200341900a6a201942002018420010e808200341c0096a201b4200200f420010e808200341e00a6a20144200201a420010e808200341d00a6a20144200200c420010e808200341b00b6a201642002015420010e808200341900c6a200b42002019420010e808200341800a6a201b42002018420010e808200341b0096a20124200200f420010e808200320032903f00a221220032903d0097c220c20032903d00b7c220f20032903b00c7c221420032903a00a7c221520032903e00b221720032903800b7c221620032903c00c7c220b20032903b00a7c221820032903e0097c221920032903d00c222020032903f00b7c221a20032903c00a7c221b20032903f0097c221320032903900b7c2208423388200341d00c6a41086a290300200341f00b6a41086a2903007c201a202054ad7c200341c00a6a41086a2903007c201b201a54ad7c200341f0096a41086a2903007c2013201b54ad7c200341900b6a41086a2903007c2008201354ad7c221b420d86847c221a423388200341e00b6a41086a290300200341800b6a41086a2903007c2016201754ad7c200341c00c6a41086a2903007c200b201654ad7c200341b00a6a41086a2903007c2018200b54ad7c200341e0096a41086a2903007c2019201854ad7c201b4233887c201a201954ad7c2213420d86847c221642ffffffffffffff03833703e840200320032903c009221720032903900a7c220b20032903e00a7c221820032903c00b7c221920032903a00c7c221b2016423388200341f00a6a41086a290300200341d0096a41086a2903007c200c201254ad7c200341d00b6a41086a2903007c200f200c54ad7c200341b00c6a41086a2903007c2014200f54ad7c200341a00a6a41086a2903007c2015201454ad7c20134233887c2016201554ad7c2213420d86847c220c42ffffffffffffff03833703f040200320032903800a221220032903900c7c220f20032903b0097c221420032903d00a7c221520032903b00b7c2216200c423388200341c0096a41086a290300200341900a6a41086a2903007c200b201754ad7c200341e00a6a41086a2903007c2018200b54ad7c200341c00b6a41086a2903007c2019201854ad7c200341a00c6a41086a2903007c201b201954ad7c20134233887c200c201b54ad7c220b420d86847c220c42ffffffffffffff03833703f8402003200c423388200341800a6a41086a290300200341900c6a41086a2903007c200f201254ad7c200341b0096a41086a2903007c2014200f54ad7c200341d00a6a41086a2903007c2015201454ad7c200341b00b6a41086a2903007c2016201554ad7c200b4233887c200c201654ad7c420d868442137e200842ffffffffffffff03837c220c42ffffffffffffff03833703d8402003200c423388201a42ffffffffffffff03837c3703e040200341a8c1006a200341d8c0006a4101106e200341a0066a20032903a841220c42002004420010e808200341a0096a20032903b041220f42137e42002010420010e808200341d0086a20032903b841221442137e22184200200d420010e80820034180086a20032903c041221642137e220b4200200a420010e808200341b0076a20032903c841221942137e221542002007420010e808200341b0066a200c42002007420010e80820034190096a200f42002004420010e808200341c0086a201842002010420010e808200341f0076a200b4200200d420010e808200341a0076a20154200200a420010e808200341c0066a200c4200200a420010e80820034180096a200f42002007420010e808200341b0086a201442002004420010e808200341e0076a200b42002010420010e80820034190076a20154200200d420010e808200341d0066a200c4200200d420010e808200341f0086a200f4200200a420010e808200341a0086a201442002007420010e808200341d0076a201642002004420010e80820034180076a201542002010420010e808200341e0066a200c42002010420010e808200341e0086a200f4200200d420010e80820034190086a20144200200a420010e808200341c0076a201642002007420010e808200341f0066a201942002004420010e808200320032903b00822102003290380097c220420032903e0077c22072003290390077c220a20032903c0067c220c20032903c008221a2003290390097c220f20032903f0077c221420032903a0077c221520032903b0067c221620032903d008221b20032903a0097c220b2003290380087c220d20032903a0067c221820032903b0077c2219423388200341d0086a41086a290300200341a0096a41086a2903007c200b201b54ad7c20034180086a41086a2903007c200d200b54ad7c200341a0066a41086a2903007c2018200d54ad7c200341b0076a41086a2903007c2019201854ad7c420d86847c220b423388200341c0086a41086a29030020034190096a41086a2903007c200f201a54ad7c200341f0076a41086a2903007c2014200f54ad7c200341a0076a41086a2903007c2015201454ad7c200341b0066a41086a2903007c2016201554ad7c200b201654ad7c420d86847c220f42ffffffffffffff038337039041200320032903a008221820032903f0087c221420032903d0077c22152003290380077c221620032903d0067c220d200f423388200341b0086a41086a29030020034180096a41086a2903007c2004201054ad7c200341e0076a41086a2903007c2007200454ad7c20034190076a41086a2903007c200a200754ad7c200341c0066a41086a2903007c200c200a54ad7c200f200c54ad7c420d86847c220442ffffffffffffff0383370398412003200329039008221020032903e0087c220720032903c0077c220a20032903f0067c220c20032903e0067c220f2004423388200341a0086a41086a290300200341f0086a41086a2903007c2014201854ad7c200341d0076a41086a2903007c2015201454ad7c20034180076a41086a2903007c2016201554ad7c200341d0066a41086a2903007c200d201654ad7c2004200d54ad7c420d86847c220442ffffffffffffff03833703a0412003200442338820034190086a41086a290300200341e0086a41086a2903007c2007201054ad7c200341c0076a41086a2903007c200a200754ad7c200341f0066a41086a2903007c200c200a54ad7c200341e0066a41086a2903007c200f200c54ad7c2004200f54ad7c420d868442137e201942ffffffffffffff03837c220442ffffffffffffff03833703804120032004423388200b42ffffffffffffff03837c37038841200341b0c0006a20034180c1006a106b20034188c0006a2001106b410021024101212d034020034188c0006a20026a2d0000200341b0c0006a20026a2d000073222e4100202e6b72417f7341800171410776106d202d71212d200241016a22024120470d000b202d106d212f200341a8c1006a41086a42f0ffffffffffff3f200141086a2903007d220442ffffffffffffff038342d0fdffffffffff3f20012903007d22074233887c370300200341a8c1006a41106a42f0ffffffffffff3f200141106a2903007d220a42ffffffffffffff038320044233887c370300200341a8c1006a41186a42f0ffffffffffff3f200141186a2903007d220442ffffffffffffff0383200a4233887c370300200341a8c1006a41206a42f0ffffffffffff3f200141206a2903007d220a42ffffffffffffff038320044233887c3703002003200a42338842137e200742ffffffffffffff03837c3703a841200341b0c0006a20034180c1006a106b20034188c0006a200341a8c1006a106b410021024101212d034020034188c0006a20026a2d0000200341b0c0006a20026a2d000073222e4100202e6b72417f7341800171410776106d202d71212d200241016a22024120470d000b200341a0046a42f0ffffffffffff3f200e7d220742338842137e42d0fdffffffffff3f20117d220e42ffffffffffffff03837c2204420042b0c1bad0f4e48603420010e808200341d0036a42f0ffffffffffff3f20057d220a423388200742ffffffffffffff03837c2207420042a7a7fbf49beaf607420010e808200341f0046a42f0ffffffffffff3f20067d2211423388200a42ffffffffffffff03837c220a420042a0d69f90da80b1cb00420010e808200341c0056a42f0ffffffffffff3f20097d2205423388201142ffffffffffffff03837c2211420042badf96dcb5c3bac700420010e80820034190066a200542ffffffffffffff0383200e4233887c220e420042a7ecfac2b5f7ea19420010e80820034180066a200e420042b0c1bad0f4e48603420010e80820034190046a20044200429db1bce4dfb435420010e808200341c0036a2007420042a0d69f90da80b1cb00420010e808200341e0046a200a420042badf96dcb5c3bac700420010e808200341b0056a2011420042a7ecfac2b5f7ea19420010e808200341a0056a2011420042b0c1bad0f4e48603420010e808200341f0056a200e4200429db1bce4dfb435420010e80820034180046a2004420042e098f4e5e9ebfb03420010e808200341b0036a2007420042badf96dcb5c3bac700420010e808200341d0046a200a420042a7ecfac2b5f7ea19420010e808200341c0046a200a420042b0c1bad0f4e48603420010e80820034190056a20114200429db1bce4dfb435420010e808200341e0056a200e420042e098f4e5e9ebfb03420010e808200341f0036a20044200429e9981b4dab2e103420010e808200341a0036a2007420042a7ecfac2b5f7ea19420010e80820034190036a2007420042b0c1bad0f4e48603420010e808200341b0046a200a4200429db1bce4dfb435420010e80820034180056a2011420042e098f4e5e9ebfb03420010e808200341d0056a200e4200429e9981b4dab2e103420010e808200341e0036a20044200429df893c0a486ae01420010e808200341c0036a41086a290300211820034190046a41086a290300211920032903c00321042003290390042109200341e0046a41086a290300211020032903e004210c200341b0056a41086a290300211a20032903b005210f20034180066a41086a290300211b2003290380062114200341d0036a41086a2903002113200341a0046a41086a290300210820032903d003210720032903a0042115200341f0046a41086a290300211220032903f0042116200341c0056a41086a290300211720032903c005210b20034190066a41086a2903002120200329039006210d20032903b003210a200329038004211120032903d004210e20032903a005210520032903f0052106202d106d2101200320062005200e200a20117c22117c220e7c22057c22062014200f200c200420097c22097c220c7c220f7c2214200d200b2016200720157c22157c22167c220b7c220d423388202020172012201320087c2015200754ad7c7c2016201554ad7c7c200b201654ad7c7c200d200b54ad7c2215420d86847c2207423388201b201a2010201820197c2009200454ad7c7c200c200954ad7c7c200f200c54ad7c7c2014200f54ad7c20154233887c2007201454ad7c2215420d86847c220442ffffffffffffff03833703b841200320032903a003221620032903f0037c220920032903c0047c220c2003290390057c220f20032903e0057c22142004423388200341b0036a41086a29030020034180046a41086a2903007c2011200a54ad7c200341d0046a41086a2903007c200e201154ad7c200341a0056a41086a2903007c2005200e54ad7c200341f0056a41086a2903007c2006200554ad7c20154233887c2004200654ad7c2206420d86847c220442ffffffffffffff03833703c0412003200329039003221520032903e0037c220a20032903b0047c22112003290380057c220e20032903d0057c22052004423388200341a0036a41086a290300200341f0036a41086a2903007c2009201654ad7c200341c0046a41086a2903007c200c200954ad7c20034190056a41086a2903007c200f200c54ad7c200341e0056a41086a2903007c2014200f54ad7c20064233887c2004201454ad7c2206420d86847c220442ffffffffffffff03833703c8412003200442338820034190036a41086a290300200341e0036a41086a2903007c200a201554ad7c200341b0046a41086a2903007c2011200a54ad7c20034180056a41086a2903007c200e201154ad7c200341d0056a41086a2903007c2005200e54ad7c20064233887c2004200554ad7c420d868442137e200d42ffffffffffffff03837c220442ffffffffffffff03833703a84120032004423388200742ffffffffffffff03837c3703b041200341b0c0006a20034180c1006a106b20034188c0006a200341a8c1006a106b410021024101212d034020034188c0006a20026a2d0000200341b0c0006a20026a2d000073222e4100202e6b72417f7341800171410776106d202d71212d200241016a22024120470d000b202d106d210220034180036a20032903d8402204420042b0c1bad0f4e48603420010e808200320032903e040220742137e4200429df893c0a486ae01420010e808200341e0006a20032903e840220a42137e22064200429e9981b4dab2e103420010e808200341c0016a20032903f040220e42137e2205420042e098f4e5e9ebfb03420010e808200341a0026a20032903f840220942137e22114200429db1bce4dfb435420010e808200341f0026a20044200429db1bce4dfb435420010e808200341c0006a2007420042b0c1bad0f4e48603420010e808200341d0006a20064200429df893c0a486ae01420010e808200341b0016a20054200429e9981b4dab2e103420010e80820034190026a2011420042e098f4e5e9ebfb03420010e808200341e0026a2004420042e098f4e5e9ebfb03420010e808200341306a20074200429db1bce4dfb435420010e80820034190016a200a420042b0c1bad0f4e48603420010e808200341a0016a20054200429df893c0a486ae01420010e80820034180026a20114200429e9981b4dab2e103420010e808200341d0026a20044200429e9981b4dab2e103420010e808200341206a2007420042e098f4e5e9ebfb03420010e80820034180016a200a4200429db1bce4dfb435420010e808200341e0016a200e420042b0c1bad0f4e48603420010e808200341f0016a20114200429df893c0a486ae01420010e808200341c0026a20044200429df893c0a486ae01420010e808200341106a20074200429e9981b4dab2e103420010e808200341f0006a200a420042e098f4e5e9ebfb03420010e808200341d0016a200e4200429db1bce4dfb435420010e808200341b0026a2009420042b0c1bad0f4e48603420010e8082003200420042003290370220820032903107c220720032903d0017c220a20032903b0027c221120032903c0027c220e200329038001221220032903207c220520032903e0017c220620032903f0017c220920032903d0027c220c200329039001221720032903307c220f20032903a0017c22142003290380027c221520032903e0027c22162003290350222020032903407c220b20032903b0017c220d2003290390027c221820032903f0027c22192003290360222120032903007c221020032903c0017c221a2003290380037c221b20032903a0027c2213423388200341e0006a41086a290300200341086a2903007c2010202154ad7c200341c0016a41086a2903007c201a201054ad7c20034180036a41086a2903007c201b201a54ad7c200341a0026a41086a2903007c2013201b54ad7c420d86847c2210423388200341d0006a41086a290300200341c0006a41086a2903007c200b202054ad7c200341b0016a41086a2903007c200d200b54ad7c20034190026a41086a2903007c2018200d54ad7c200341f0026a41086a2903007c2019201854ad7c2010201954ad7c420d86847c220b42338820034190016a41086a290300200341306a41086a2903007c200f201754ad7c200341a0016a41086a2903007c2014200f54ad7c20034180026a41086a2903007c2015201454ad7c200341e0026a41086a2903007c2016201554ad7c200b201654ad7c420d86847c220f42338820034180016a41086a290300200341206a41086a2903007c2005201254ad7c200341e0016a41086a2903007c2006200554ad7c200341f0016a41086a2903007c2009200654ad7c200341d0026a41086a2903007c200c200954ad7c200f200c54ad7c420d86847c2205423388200341f0006a41086a290300200341106a41086a2903007c2007200854ad7c200341d0016a41086a2903007c200a200754ad7c200341b0026a41086a2903007c2011200a54ad7c200341c0026a41086a2903007c200e201154ad7c2005200e54ad7c420d868442137e201342ffffffffffffff03837c221142ffffffffffffff03838542002002200172106dad42ff01837d22078385220a3703d84020032011423388201042ffffffffffffff03837c20032903e04022048520078320048522113703e0402003200542ffffffffffffff038320032903f840220485200783200485220e3703f8402003200f42ffffffffffffff038320032903f04022048520078320048522053703f0402003200b42ffffffffffffff038320032903e84022048520078320048522073703e84020034188c0006a200341d8c0006a106b200342f0ffffffffffff3f200e7d220642ffffffffffffff038342f0ffffffffffff3f20057d22094233887c200e85420020032d008840410171106dad42ff01837d220483200e853703f8402003200942ffffffffffffff038342f0ffffffffffff3f20077d220e4233887c2005852004832005853703f0402003200e42ffffffffffffff038342f0ffffffffffff3f20117d220e4233887c2007852004832007853703e8402003200e42ffffffffffffff038342d0fdffffffffff3f200a7d22074233887c2011852004832011853703e0402003200642338842137e200742ffffffffffffff03837c200a85200483200a853703d84020002001202f72106d3a0000200020032903d840370308200041106a20032903e040370300200041186a20032903e840370300200041206a20032903f040370300200041286a20032903f840370300200341d0c1006a24000bd003011a7e200131001221022001310011210320013100102104200131000f2105200131000d2106200131000e2107200131001f2108200131001e2109200131001d210a200131001c210b200131001b210c200131001a210d200131000c210e200131000b210f200131000a21102001310009211120013100072112200131000821132001310019211420013100182115200131001721162001310016211720013100132118200131001421192001310015211a200020013500002001310004422086842001310005422886842001310006221b4230868442ffffffffffffff038337030020002018201942088684201a4210868420174218868420164220868420154228868420144230868442018842ffffffffffffff03833703182000201b201242088684201342108684201142188684201042208684200f42288684200e4230868442038842ffffffffffffff038337030820002015201442088684200d42108684200c42188684200b42208684200a42288684200942308684200842388684420c8842ffffffffffffff03833703202000200e20064208868420074210868420054218868420044220868420034228868420024230868420184238868442068842ffffffffffffff03833703100ba5990104017f237e057f0d7e230041f02b6b22022400200242003703e028200242013703d828200242003703e828200242003703f028200242003703f828200241c82a6a20014101106e200241c8256a20022903c82a2203420042b0c1bad0f4e48603420010e808200241c8286a20022903d02a220442137e4200429df893c0a486ae01420010e808200241f8276a20022903d82a220542137e22064200429e9981b4dab2e103420010e808200241a8276a20022903e02a220742137e2208420042e098f4e5e9ebfb03420010e808200241d8266a20022903e82a220942137e220a4200429db1bce4dfb435420010e808200241d8256a20034200429db1bce4dfb435420010e808200241b8286a2004420042b0c1bad0f4e48603420010e808200241e8276a20064200429df893c0a486ae01420010e80820024198276a20084200429e9981b4dab2e103420010e808200241c8266a200a420042e098f4e5e9ebfb03420010e808200241e8256a2003420042e098f4e5e9ebfb03420010e808200241a8286a20044200429db1bce4dfb435420010e808200241d8276a2005420042b0c1bad0f4e48603420010e80820024188276a20084200429df893c0a486ae01420010e808200241b8266a200a4200429e9981b4dab2e103420010e808200241f8256a20034200429e9981b4dab2e103420010e80820024198286a2004420042e098f4e5e9ebfb03420010e808200241c8276a20054200429db1bce4dfb435420010e808200241f8266a2007420042b0c1bad0f4e48603420010e808200241a8266a200a4200429df893c0a486ae01420010e80820024188266a20034200429df893c0a486ae01420010e80820024188286a20044200429e9981b4dab2e103420010e808200241b8276a2005420042e098f4e5e9ebfb03420010e808200241e8266a20074200429db1bce4dfb435420010e80820024198266a2009420042b0c1bad0f4e48603420010e808200241b81d6a200229038826220b2002290398267c22032002290388287c220420022903b8277c220520022903e8267c220a20022903a826220c20022903f8267c220720022903f8257c22082002290398287c220620022903c8277c2209200229038827220d20022903d8277c220e20022903b8267c220f20022903e8257c221020022903a8287c221120022903e827221220022903b8287c22132002290398277c221420022903c8267c221520022903d8257c221620022903c828221720022903c8257c221820022903f8277c221920022903a8277c221a20022903d8267c221b423388200241c8286a41086a290300200241c8256a41086a2903007c2018201754ad7c200241f8276a41086a2903007c2019201854ad7c200241a8276a41086a2903007c201a201954ad7c200241d8266a41086a2903007c201b201a54ad7c420d86847c2218423388200241e8276a41086a290300200241b8286a41086a2903007c2013201254ad7c20024198276a41086a2903007c2014201354ad7c200241c8266a41086a2903007c2015201454ad7c200241d8256a41086a2903007c2016201554ad7c2018201654ad7c420d86847c221342338820024188276a41086a290300200241d8276a41086a2903007c200e200d54ad7c200241b8266a41086a2903007c200f200e54ad7c200241e8256a41086a2903007c2010200f54ad7c200241a8286a41086a2903007c2011201054ad7c2013201154ad7c420d86847c220e423388200241a8266a41086a290300200241f8266a41086a2903007c2007200c54ad7c200241f8256a41086a2903007c2008200754ad7c20024198286a41086a2903007c2006200854ad7c200241c8276a41086a2903007c2009200654ad7c200e200954ad7c420d86847c220742338820024188266a41086a29030020024198266a41086a2903007c2003200b54ad7c20024188286a41086a2903007c2004200354ad7c200241b8276a41086a2903007c2005200454ad7c200241e8266a41086a2903007c200a200554ad7c2007200a54ad7c420d868442137e201b42ffffffffffffff03837c220442ffffffffffffff0383220320022903d8287c2208420042f682ffa299b88202420010e808200241d81c6a200742ffffffffffffff0383220720022903f8287c2206420042ddf396f0fbf7b9c300420010e808200241e81c6a200e42ffffffffffffff0383220a20022903f0287c2209420042ccf7d9e9fbcee010420010e80820024188236a201342ffffffffffffff0383220520022903e8287c220e4200428df582a3b0868004420010e808200241e8216a2004423388201842ffffffffffffff03837c220420022903e0287c220f4200429aebd0c282f1c201420010e808200241f8216a200f420042f682ffa299b88202420010e808200241c81d6a2008420042cff887b5bcb5c603420010e808200241c81c6a2006420042ccf7d9e9fbcee010420010e808200241f81c6a20094200428df582a3b0868004420010e80820024198236a200e4200429aebd0c282f1c201420010e808200241a8236a200e420042f682ffa299b88202420010e80820024188226a200f420042cff887b5bcb5c603420010e808200241d81d6a2008420042848dc885f9eff000420010e808200241b81c6a20064200428df582a3b0868004420010e808200241881d6a20094200429aebd0c282f1c201420010e808200241981d6a2009420042f682ffa299b88202420010e808200241b8236a200e420042cff887b5bcb5c603420010e80820024198226a200f420042848dc885f9eff000420010e808200241e81d6a2008420042dfddd7d2ccf91a420010e808200241a81c6a20064200429aebd0c282f1c201420010e808200241981c6a2006420042f682ffa299b88202420010e808200241a81d6a2009420042cff887b5bcb5c603420010e808200241c8236a200e420042848dc885f9eff000420010e808200241a8226a200f420042dfddd7d2ccf91a420010e808200241f81d6a2008420042bed6acd4f2a00a420010e808200220022903b81c221920022903d81d7c220820022903881d7c220620022903a8237c22092002290388227c220e20022903c81c221a20022903c81d7c220f20022903f81c7c22102002290398237c221120022903f8217c221320022903d81c221b20022903b81d7c221420022903e81c7c22152002290388237c221620022903e8217c2218423388200241d81c6a41086a290300200241b81d6a41086a2903007c2014201b54ad7c200241e81c6a41086a2903007c2015201454ad7c20024188236a41086a2903007c2016201554ad7c200241e8216a41086a2903007c2018201654ad7c420d86847c2214423388200241c81c6a41086a290300200241c81d6a41086a2903007c200f201a54ad7c200241f81c6a41086a2903007c2010200f54ad7c20024198236a41086a2903007c2011201054ad7c200241f8216a41086a2903007c2013201154ad7c2014201354ad7c420d86847c220f42ffffffffffffff038337039029200220022903a81c221620022903e81d7c221020022903981d7c221120022903b8237c22132002290398227c2215200f423388200241b81c6a41086a290300200241d81d6a41086a2903007c2008201954ad7c200241881d6a41086a2903007c2006200854ad7c200241a8236a41086a2903007c2009200654ad7c20024188226a41086a2903007c200e200954ad7c200f200e54ad7c420d86847c220842ffffffffffffff038337039829200220022903981c221920022903f81d7c220620022903a81d7c220920022903c8237c220e20022903a8227c220f2008423388200241a81c6a41086a290300200241e81d6a41086a2903007c2010201654ad7c200241981d6a41086a2903007c2011201054ad7c200241b8236a41086a2903007c2013201154ad7c20024198226a41086a2903007c2015201354ad7c2008201554ad7c420d86847c220842ffffffffffffff03833703a02920022008423388200241981c6a41086a290300200241f81d6a41086a2903007c2006201954ad7c200241a81d6a41086a2903007c2009200654ad7c200241c8236a41086a2903007c200e200954ad7c200241a8226a41086a2903007c200f200e54ad7c2008200f54ad7c420d868442137e201842ffffffffffffff03837c220842ffffffffffffff03833703802920022008423388201442ffffffffffffff03837c37038829200241d8216a2003420042a3f1e59aa1b9d301420010e808200241f8226a200442137e221c420042ffed8af7ec86c802420010e808200241e8236a200542137e2210420042bbf9809de6b8ce03420010e80820024198246a200a42137e2211420042a9808780a6f4f902420010e808200241d8246a200742137e2208420042bdddd5d88385ea00420010e808200241c8216a2003420042bdddd5d88385ea00420010e808200241e8226a2004420042a3f1e59aa1b9d301420010e808200241d8236a2010420042ffed8af7ec86c802420010e80820024188246a2011420042bbf9809de6b8ce03420010e808200241c8246a2008420042a9808780a6f4f902420010e808200241b8216a2003420042a9808780a6f4f902420010e808200241d8226a2004420042bdddd5d88385ea00420010e808200241e8246a2005420042a3f1e59aa1b9d301420010e808200241f8236a2011420042ffed8af7ec86c802420010e808200241b8246a2008420042bbf9809de6b8ce03420010e808200241a8216a2003420042bbf9809de6b8ce03420010e808200241c8226a2004420042a9808780a6f4f902420010e808200241f8246a2005420042bdddd5d88385ea00420010e80820024198256a200a420042a3f1e59aa1b9d301420010e808200241a8246a2008420042ffed8af7ec86c802420010e808200241d8206a2003420042ffed8af7ec86c802420010e808200241b8226a2004420042bbf9809de6b8ce03420010e80820024188256a2005420042a9808780a6f4f902420010e808200241a8256a200a420042bdddd5d88385ea00420010e808200241b8256a2007420042a3f1e59aa1b9d301420010e808200241881e6a200342a3f1e59aa1b9d3017c2206420042efffffffffffffc30020022903d820221d20022903b8257c220920022903b8227c220e2002290388257c220f20022903a8257c221320022903a824221e2002290398257c221420022903a8217c221520022903c8227c221620022903f8247c221820022903f823221f20022903e8247c221920022903b8247c221a20022903b8217c221b20022903d8227c220b20022903d823222020022903e8227c220c2002290388247c220d20022903c8247c221220022903c8217c221720022903f822222120022903d8217c222220022903e8237c22232002290398247c222420022903d8247c2225423388200241f8226a41086a290300200241d8216a41086a2903007c2022202154ad7c200241e8236a41086a2903007c2023202254ad7c20024198246a41086a2903007c2024202354ad7c200241d8246a41086a2903007c2025202454ad7c420d86847c2222423388200241d8236a41086a290300200241e8226a41086a2903007c200c202054ad7c20024188246a41086a2903007c200d200c54ad7c200241c8246a41086a2903007c2012200d54ad7c200241c8216a41086a2903007c2017201254ad7c2022201754ad7c420d86847c220c423388200241f8236a41086a290300200241e8246a41086a2903007c2019201f54ad7c200241b8246a41086a2903007c201a201954ad7c200241b8216a41086a2903007c201b201a54ad7c200241d8226a41086a2903007c200b201b54ad7c200c200b54ad7c420d86847c2219423388200241a8246a41086a29030020024198256a41086a2903007c2014201e54ad7c200241a8216a41086a2903007c2015201454ad7c200241c8226a41086a2903007c2016201554ad7c200241f8246a41086a2903007c2018201654ad7c2019201854ad7c420d86847c221442ffffffffffffff03837d221542338842137e42bcfdffffffffffc3002014423388200241d8206a41086a290300200241b8256a41086a2903007c2009201d54ad7c200241b8226a41086a2903007c200e200954ad7c20024188256a41086a2903007c200f200e54ad7c200241a8256a41086a2903007c2013200f54ad7c2014201354ad7c420d868442137e202542ffffffffffffff03837c221342ffffffffffffff03837d221642ffffffffffffff03837c2209420010e808200241881f6a201542ffffffffffffff038342efffffffffffffc300201942ffffffffffffff03837d220f4233887c220e4200201c4287f0dc94c6dfde0f7c420010e80820024198216a200f42ffffffffffffff038342efffffffffffffc300200c42ffffffffffffff03837d22144233887c220f42002010428b868581d2a18c387c2215420010e808200241c8206a201442ffffffffffffff038342efffffffffffffc3002013423388202242ffffffffffffff03837c7d22134233887c22104200201142e18392a796b7d2c4007c2214420010e80820024188206a201342ffffffffffffff038320164233887c22114200200842eda9ced69582d9307c2208420010e808200241981e6a201142002006420010e808200241c81f6a20094200200442bdddd5d88385ea007c2213420010e808200241f81e6a200e42002015420010e80820024188216a200f42002014420010e808200241b8206a201042002008420010e808200241a81e6a201042002006420010e808200241f81f6a201142002013420010e808200241b81f6a20094200200542a9808780a6f4f9027c2215420010e808200241e81e6a200e42002014420010e808200241f8206a200f42002008420010e808200241b81e6a200f42002006420010e808200241a8206a201042002013420010e808200241e81f6a201142002015420010e808200241a81f6a20094200200a42bbf9809de6b8ce037c2214420010e808200241d81e6a200e42002008420010e808200241c81e6a200e42002006420010e808200241e8206a200f42002013420010e80820024198206a201042002015420010e808200241d81f6a201142002014420010e808200241981f6a20094200200742ffed8af7ec86c8027c420010e808200220022903e81e221920022903b81f7c220820022903f8207c220620022903a81e7c220920022903f81f7c220e20022903f81e221a20022903c81f7c220f2002290388217c221020022903b8207c221120022903981e7c221320022903881f221b20022903881e7c22142002290398217c221520022903c8207c22162002290388207c2218423388200241881f6a41086a290300200241881e6a41086a2903007c2014201b54ad7c20024198216a41086a2903007c2015201454ad7c200241c8206a41086a2903007c2016201554ad7c20024188206a41086a2903007c2018201654ad7c420d86847c2214423388200241f81e6a41086a290300200241c81f6a41086a2903007c200f201a54ad7c20024188216a41086a2903007c2010200f54ad7c200241b8206a41086a2903007c2011201054ad7c200241981e6a41086a2903007c2013201154ad7c2014201354ad7c420d86847c220f42ffffffffffffff03833703e029200220022903d81e221620022903a81f7c221020022903b81e7c221120022903a8207c221320022903e81f7c2215200f423388200241e81e6a41086a290300200241b81f6a41086a2903007c2008201954ad7c200241f8206a41086a2903007c2006200854ad7c200241a81e6a41086a2903007c2009200654ad7c200241f81f6a41086a2903007c200e200954ad7c200f200e54ad7c420d86847c220842ffffffffffffff03833703e829200220022903c81e221920022903981f7c220620022903e8207c22092002290398207c220e20022903d81f7c220f2008423388200241d81e6a41086a290300200241a81f6a41086a2903007c2010201654ad7c200241b81e6a41086a2903007c2011201054ad7c200241a8206a41086a2903007c2013201154ad7c200241e81f6a41086a2903007c2015201354ad7c2008201554ad7c420d86847c220842ffffffffffffff03833703f02920022008423388200241c81e6a41086a290300200241981f6a41086a2903007c2006201954ad7c200241e8206a41086a2903007c2009200654ad7c20024198206a41086a2903007c200e200954ad7c200241d81f6a41086a2903007c200f200e54ad7c2008200f54ad7c420d868442137e201842ffffffffffffff03837c220842ffffffffffffff03833703d02920022008423388201442ffffffffffffff03837c3703d829200241c82a6a20024180296a200241d0296a106f20022d00c82a2126200241a02a6a41206a2227200241f02a6a2903002208370300200241a02a6a41186a2228200241c82a6a41206a2903002206370300200241a02a6a41106a2229200241c82a6a41186a2903002209370300200241a02a6a41086a222a200241c82a6a41106a290300220e370300200220022903d02a220f3703a02a20024188196a200129030022104200200f420010e808200241881c6a200842002001290308221142137e420010e808200241b81b6a200642002001290310221342137e2218420010e808200241e81a6a200942002001290318221542137e2216420010e808200241981a6a200e42002001290320221942137e2214420010e80820024198196a200e42002010420010e808200241f81b6a200f42002011420010e808200241a81b6a200842002018420010e808200241d81a6a200642002016420010e808200241881a6a200942002014420010e808200241a8196a200942002010420010e808200241e81b6a200e42002011420010e808200241981b6a200f42002013420010e808200241c81a6a200842002016420010e808200241f8196a200642002014420010e808200241b8196a200642002010420010e808200241d81b6a200942002011420010e808200241881b6a200e42002013420010e808200241b81a6a200f42002015420010e808200241e8196a200842002014420010e808200241c8196a200842002010420010e808200241c81b6a200642002011420010e808200241f81a6a200942002013420010e808200241a81a6a200e42002015420010e808200241d8196a200f42002019420010e808200220022903c819222220022903d8197c220820022903c81b7c220620022903f81a7c220920022903a81a7c220e20022903e819222320022903b81a7c220f20022903b8197c221020022903d81b7c221120022903881b7c221320022903c81a222420022903981b7c221420022903f8197c221520022903a8197c221620022903e81b7c221820022903a81b222520022903f81b7c221920022903d81a7c221a20022903881a7c221b2002290398197c220b20022903881c221c2002290388197c220c20022903b81b7c220d20022903e81a7c221220022903981a7c2217423388200241881c6a41086a29030020024188196a41086a2903007c200c201c54ad7c200241b81b6a41086a2903007c200d200c54ad7c200241e81a6a41086a2903007c2012200d54ad7c200241981a6a41086a2903007c2017201254ad7c420d86847c220c423388200241a81b6a41086a290300200241f81b6a41086a2903007c2019202554ad7c200241d81a6a41086a2903007c201a201954ad7c200241881a6a41086a2903007c201b201a54ad7c20024198196a41086a2903007c200b201b54ad7c200c200b54ad7c420d86847c2219423388200241c81a6a41086a290300200241981b6a41086a2903007c2014202454ad7c200241f8196a41086a2903007c2015201454ad7c200241a8196a41086a2903007c2016201554ad7c200241e81b6a41086a2903007c2018201654ad7c2019201854ad7c420d86847c2214423388200241e8196a41086a290300200241b81a6a41086a2903007c200f202354ad7c200241b8196a41086a2903007c2010200f54ad7c200241d81b6a41086a2903007c2011201054ad7c200241881b6a41086a2903007c2013201154ad7c2014201354ad7c420d86847c220f423388200241c8196a41086a290300200241d8196a41086a2903007c2008202254ad7c200241c81b6a41086a2903007c2006200854ad7c200241f81a6a41086a2903007c2009200654ad7c200241a81a6a41086a2903007c200e200954ad7c200f200e54ad7c420d868442137e201742ffffffffffffff03837c220842ffffffffffffff03833703f82a20022008423388200c42ffffffffffffff03837c22063703802b2002200f42ffffffffffffff038322093703982b2002201442ffffffffffffff0383220e3703902b2002201942ffffffffffffff0383220f3703882b200241c82a6a200241f82a6a106b20022d00c82a410171106d417f73410171106d21012002200642f0ffffffffffff3f20067d221142ffffffffffffff038342d0fdffffffffff3f20022903f82a22107d22134233887c8542002001ad42ff01837d22088320068522063703802b2002200942f0ffffffffffff3f20097d221442ffffffffffffff038342f0ffffffffffff3f200e7d22154233887c8520088320098522093703982b2002200f42f0ffffffffffff3f200f7d221642ffffffffffffff038320114233887c85200883200f85220f3703882b200220102010201442338842137e201342ffffffffffffff03837c852008838522103703f82a2002200e201542ffffffffffffff038320164233887c85200883200e85220e3703902b2026417f734101712201106d2126202a202a290300221120068542002026ad42ff01837d220883201185370300202920292903002206200f85200883200685370300202820282903002206200e85200883200685370300202720272903002206200985200883200685370300200220022903a02a22062010852008832006853703a02a2001106d2101200241c80f6a200720022903f8287d42f0ffffffffffff3f7c221142338842137e200320022903d8287d42d0fdffffffffff3f7c220942ffffffffffffff03837c22084200200342ecffffffffffff038542002001ad42ff01837d22038342ecffffffffffff03852206420010e808200241880d6a200742ffffffffffffff038520038342ffffffffffffff038522074200200420022903e0287d42f0ffffffffffff3f7c220f42ffffffffffffff038320094233887c220942137e420010e808200241d80d6a200a42ffffffffffffff038520038342ffffffffffffff0385220e4200200520022903e8287d42f0ffffffffffff3f7c221042ffffffffffffff0383200f4233887c220f42137e2213420010e808200241a80e6a200542ffffffffffffff038520038342ffffffffffffff038522054200200a20022903f0287d42f0ffffffffffff3f7c221442ffffffffffffff038320104233887c220a42137e2210420010e808200241f80e6a200442ffffffffffffff038520038342ffffffffffffff038522034200201142ffffffffffffff038320144233887c221142137e2204420010e808200241e80e6a200342002008420010e808200241b80f6a200642002009420010e808200241f80c6a200742002013420010e808200241c80d6a200e42002010420010e808200241980e6a200542002004420010e808200241880e6a200542002008420010e808200241d80e6a200342002009420010e808200241a80f6a20064200200f420010e808200241e80c6a200742002010420010e808200241b80d6a200e42002004420010e808200241a80d6a200e42002008420010e808200241f80d6a200542002009420010e808200241c80e6a20034200200f420010e808200241980f6a20064200200a420010e808200241880c6a200742002004420010e808200241a80b6a200742002008420010e808200241980d6a200e42002009420010e808200241e80d6a20054200200f420010e808200241b80e6a20034200200a420010e808200241880f6a200642002011420010e808200241f8096a20022903a80b220b20022903880f7c220320022903980d7c220420022903e80d7c220520022903b80e7c220a20022903880c220c20022903980f7c220720022903a80d7c220820022903f80d7c220620022903c80e7c220920022903e80c220d20022903a80f7c220e20022903b80d7c220f20022903880e7c221020022903d80e7c221120022903f80c221220022903b80f7c221320022903c80d7c221420022903980e7c221520022903e80e7c221620022903880d221720022903c80f7c221820022903d80d7c221920022903a80e7c221a20022903f80e7c221b423388200241880d6a41086a290300200241c80f6a41086a2903007c2018201754ad7c200241d80d6a41086a2903007c2019201854ad7c200241a80e6a41086a2903007c201a201954ad7c200241f80e6a41086a2903007c201b201a54ad7c420d86847c2218423388200241f80c6a41086a290300200241b80f6a41086a2903007c2013201254ad7c200241c80d6a41086a2903007c2014201354ad7c200241980e6a41086a2903007c2015201454ad7c200241e80e6a41086a2903007c2016201554ad7c2018201654ad7c420d86847c2213423388200241e80c6a41086a290300200241a80f6a41086a2903007c200e200d54ad7c200241b80d6a41086a2903007c200f200e54ad7c200241880e6a41086a2903007c2010200f54ad7c200241d80e6a41086a2903007c2011201054ad7c2013201154ad7c420d86847c220e423388200241880c6a41086a290300200241980f6a41086a2903007c2007200c54ad7c200241a80d6a41086a2903007c2008200754ad7c200241f80d6a41086a2903007c2006200854ad7c200241c80e6a41086a2903007c2009200654ad7c200e200954ad7c420d86847c2207423388200241a80b6a41086a290300200241880f6a41086a2903007c2003200b54ad7c200241980d6a41086a2903007c2004200354ad7c200241e80d6a41086a2903007c2005200454ad7c200241b80e6a41086a2903007c200a200554ad7c2007200a54ad7c420d868442137e201b42ffffffffffffff03837c220842ffffffffffffff03832203420042a09ab5a7a4d5d602420010e808200241980b6a200742ffffffffffffff03832204420042efabafe6f7c88835420010e808200241f80b6a200e42ffffffffffffff03832205420042f8fb9b94e0ed8617420010e808200241d80c6a201342ffffffffffffff0383220a4200428b83d98ea38bdb0a420010e808200241c80a6a2008423388201842ffffffffffffff03837c2207420042e6c09290d28a8b35420010e808200241b80a6a2007420042a09ab5a7a4d5d602420010e808200241e8096a2003420042b5cccc99bcc0e502420010e808200241880b6a2004420042f8fb9b94e0ed8617420010e808200241e80b6a20054200428b83d98ea38bdb0a420010e808200241c80c6a200a420042e6c09290d28a8b35420010e808200241b80c6a200a420042a09ab5a7a4d5d602420010e808200241a80a6a2007420042b5cccc99bcc0e502420010e808200241d8096a2003420042a8f2a9fabaa79b01420010e808200241f80a6a20044200428b83d98ea38bdb0a420010e808200241d80b6a2005420042e6c09290d28a8b35420010e808200241c80b6a2005420042a09ab5a7a4d5d602420010e808200241a80c6a200a420042b5cccc99bcc0e502420010e808200241980a6a2007420042a8f2a9fabaa79b01420010e808200241c8096a2003420042a9afa6f3e694c800420010e808200241e80a6a2004420042e6c09290d28a8b35420010e808200241d80a6a2004420042a09ab5a7a4d5d602420010e808200241b80b6a2005420042b5cccc99bcc0e502420010e808200241980c6a200a420042a8f2a9fabaa79b01420010e808200241880a6a2007420042a9afa6f3e694c800420010e808200241b8096a2003420042c2cdbdbdb3d1e502420010e80820022903f029210f20022903e829210e20022903e029210520022903d829210320022903d0292104200241a02b6a200241a02a6a4101106e200241c82b6a41106a220120292903002207370300200241c82b6a41086a202a290300220a200a7c220a3703002001200720077c2207370300200241c82b6a41186a2028290300220820087c2208370300200241c82b6a41206a2027290300220620067c2206370300200220022903a02a220920097c22093703c82b200241c8176a200442002009420010e808200241b8176a20064200200342137e420010e808200241c8166a20084200200542137e2213420010e80820024188186a20074200200e42137e2211420010e808200241b8166a200a4200200f42137e2210420010e808200241c8186a200a42002004420010e808200241d8176a200942002003420010e808200241a8176a200642002013420010e808200241d8166a200842002011420010e808200241a8166a200742002010420010e80820024198186a200742002004420010e808200241d8186a200a42002003420010e808200241e8176a200942002005420010e80820024198176a200642002011420010e80820024198166a200842002010420010e808200241e8166a200842002004420010e808200241a8186a200742002003420010e808200241e8186a200a42002005420010e808200241f8176a20094200200e420010e808200241e8146a200642002010420010e80820024188176a200642002004420010e808200241f8166a200842002003420010e808200241b8186a200742002005420010e808200241f8186a200a4200200e420010e808200241b8136a20094200200f420010e808200241e8066a20022903d80a222220022903b8097c220a20022903b80b7c220720022903980c7c220820022903880a7c220620022903e80a222320022903c8097c220920022903c80b7c221020022903a80c7c221120022903980a7c221320022903f80a222420022903d8097c221420022903d80b7c221520022903b80c7c221620022903a80a7c221820022903880b222520022903e8097c221920022903e80b7c221a20022903c80c7c221b20022903b80a7c220b20022903980b221c20022903f8097c220c20022903f80b7c220d20022903d80c7c221220022903c80a7c2217423388200241980b6a41086a290300200241f8096a41086a2903007c200c201c54ad7c200241f80b6a41086a2903007c200d200c54ad7c200241d80c6a41086a2903007c2012200d54ad7c200241c80a6a41086a2903007c2017201254ad7c420d86847c220c423388200241880b6a41086a290300200241e8096a41086a2903007c2019202554ad7c200241e80b6a41086a2903007c201a201954ad7c200241c80c6a41086a2903007c201b201a54ad7c200241b80a6a41086a2903007c200b201b54ad7c200c200b54ad7c420d86847c2219423388200241f80a6a41086a290300200241d8096a41086a2903007c2014202454ad7c200241d80b6a41086a2903007c2015201454ad7c200241b80c6a41086a2903007c2016201554ad7c200241a80a6a41086a2903007c2018201654ad7c2019201854ad7c420d86847c2214423388200241e80a6a41086a290300200241c8096a41086a2903007c2009202354ad7c200241c80b6a41086a2903007c2010200954ad7c200241a80c6a41086a2903007c2011201054ad7c200241980a6a41086a2903007c2013201154ad7c2014201354ad7c420d86847c220942ffffffffffffff0383200f7d42f0ffffffffffff3f7c220f42338842137e2009423388200241d80a6a41086a290300200241b8096a41086a2903007c200a202254ad7c200241b80b6a41086a2903007c2007200a54ad7c200241980c6a41086a2903007c2008200754ad7c200241880a6a41086a2903007c2006200854ad7c2009200654ad7c420d868442137e201742ffffffffffffff03837c220742ffffffffffffff038320047d42d0fdffffffffff3f7c220842ffffffffffffff03837c22044200429bdceccb84d4fd03420010e808200241b8076a200f42ffffffffffffff0383201442ffffffffffffff0383200e7d42f0ffffffffffff3f7c22064233887c220a420042969988cadca7b00e420010e808200241a8096a200642ffffffffffffff0383201942ffffffffffffff038320057d42f0ffffffffffff3f7c22064233887c2205420042a88c8b81f5cabeca00420010e808200241d8086a200642ffffffffffffff03832007423388200c42ffffffffffffff03837c20037d42f0ffffffffffff3f7c22074233887c2203420042c8ee859b8cd29829420010e80820024188086a200742ffffffffffffff038320084233887c2207420042dcd78e98b19df320420010e808200241f8076a20074200429bdceccb84d4fd03420010e808200241d8066a2004420042d2dfded4f0ede000420010e808200241a8076a200a420042a88c8b81f5cabeca00420010e80820024198096a2005420042c8ee859b8cd29829420010e808200241c8086a2003420042dcd78e98b19df320420010e808200241b8086a20034200429bdceccb84d4fd03420010e808200241e8076a2007420042d2dfded4f0ede000420010e808200241c8066a2004420042b8ecf9b5ffe8f503420010e80820024198076a200a420042c8ee859b8cd29829420010e80820024188096a2005420042dcd78e98b19df320420010e808200241f8086a20054200429bdceccb84d4fd03420010e808200241a8086a2003420042d2dfded4f0ede000420010e808200241d8076a2007420042b8ecf9b5ffe8f503420010e80820024198056a200442004298c9f9f3f9c09502420010e80820024188076a200a420042dcd78e98b19df320420010e808200241f8066a200a4200429bdceccb84d4fd03420010e808200241e8086a2005420042d2dfded4f0ede000420010e80820024198086a2003420042b8ecf9b5ffe8f503420010e808200241c8076a200742004298c9f9f3f9c09502420010e808200241e8036a2004420042b4f0cadfb1d2dd01420010e80820022903b82b212320022903b02b212420022903a82b212520022903c02b211c20022903a02b211d200242003703d02a200242013703c82a200242003703d82a200242003703e02a200242003703e82a200220022903a02b42017c22033703c82a200220022903a82b22043703d02a200220022903b02b22103703d82a200220022903b82b22153703e02a200241e8106a20034200200229038817221720022903b8137c220520022903f8167c220a20022903b8187c220720022903f8187c220820022903e814222220022903f8177c220620022903e8167c220920022903a8187c220e20022903e8187c220f200229039817221e20022903e8177c22112002290398167c22132002290398187c221420022903d8187c221620022903a817221f20022903d8177c221820022903d8167c221920022903a8167c221a20022903c8187c221b20022903b817222020022903c8177c220b20022903c8167c220c2002290388187c220d20022903b8167c2212423388200241b8176a41086a290300200241c8176a41086a2903007c200b202054ad7c200241c8166a41086a2903007c200c200b54ad7c20024188186a41086a2903007c200d200c54ad7c200241b8166a41086a2903007c2012200d54ad7c420d86847c220b423388200241a8176a41086a290300200241d8176a41086a2903007c2018201f54ad7c200241d8166a41086a2903007c2019201854ad7c200241a8166a41086a2903007c201a201954ad7c200241c8186a41086a2903007c201b201a54ad7c200b201b54ad7c420d86847c221942338820024198176a41086a290300200241e8176a41086a2903007c2011201e54ad7c20024198166a41086a2903007c2013201154ad7c20024198186a41086a2903007c2014201354ad7c200241d8186a41086a2903007c2016201454ad7c2019201654ad7c420d86847c2211423388200241e8146a41086a290300200241f8176a41086a2903007c2006202254ad7c200241e8166a41086a2903007c2009200654ad7c200241a8186a41086a2903007c200e200954ad7c200241e8186a41086a2903007c200f200e54ad7c2011200f54ad7c420d86847c220642338820024188176a41086a290300200241b8136a41086a2903007c2005201754ad7c200241f8166a41086a2903007c200a200554ad7c200241b8186a41086a2903007c2007200a54ad7c200241f8186a41086a2903007c2008200754ad7c2006200854ad7c420d868442137e201242ffffffffffffff03837c220942ffffffffffffff03832205420010e808200241a8136a200642ffffffffffffff0383220a4200200442137e222b420010e808200241d8146a201142ffffffffffffff038322074200201042137e2218420010e80820024188166a201942ffffffffffffff038322084200201542137e2216420010e80820024188126a2009423388200b42ffffffffffffff03837c2206420020022903c02b221a42137e2211420010e808200241f8116a200642002003420010e808200241d8106a200542002004420010e80820024198136a200a42002018420010e808200241c8146a200742002016420010e808200241f8156a200842002011420010e808200241e8156a200842002003420010e808200241e8116a200642002004420010e808200241c8106a200542002010420010e80820024188136a200a42002016420010e808200241b8146a200742002011420010e808200241a8146a200742002003420010e808200241d8156a200842002004420010e808200241d8116a200642002010420010e808200241b8106a200542002015420010e808200241f8126a200a42002011420010e808200241e8126a200a42002003420010e80820024198146a200742002004420010e808200241c8156a200842002010420010e808200241c8116a200642002015420010e808200241a8106a20054200201a420010e8082000200229038813222c20022903c8107c221b20022903b8147c220b20022903e8157c220c20022903e8117c220d200229039813222220022903d8107c220920022903c8147c220e20022903f8157c220f20022903f8117c221320022903a813221e20022903e8107c221420022903d8147c22192002290388167c22122002290388127c2217423388200241a8136a41086a290300200241e8106a41086a2903007c2014201e54ad7c200241d8146a41086a2903007c2019201454ad7c20024188166a41086a2903007c2012201954ad7c20024188126a41086a2903007c2017201254ad7c420d86847c221242338820024198136a41086a290300200241d8106a41086a2903007c2009202254ad7c200241c8146a41086a2903007c200e200954ad7c200241f8156a41086a2903007c200f200e54ad7c200241f8116a41086a2903007c2013200f54ad7c2012201354ad7c420d86847c222242ffffffffffffff038337031020024198106a42f0ffffffffffff3f201c7d221442338842137e42d1fdffffffffff3f201d7d220e42ffffffffffffff03837c220942002005420010e808200241d8126a200a420042f0ffffffffffff3f20257d220f42ffffffffffffff0383200e4233887c220e42137e420010e80820024188146a2007420042f0ffffffffffff3f20247d221342ffffffffffffff0383200f4233887c220f42137e2224420010e808200241b8156a2008420042f0ffffffffffff3f20237d221942ffffffffffffff038320134233887c221342137e2223420010e808200241b8116a20064200201442ffffffffffffff038320194233887c221442137e2219420010e808200241a8116a200642002009420010e80820024188106a20054200200e420010e808200241c8126a200a42002024420010e808200241f8136a200742002023420010e808200241a8156a200842002019420010e80820024198156a200842002009420010e80820024198116a20064200200e420010e808200241f80f6a20054200200f420010e808200241b8126a200a42002023420010e808200241e8136a200742002019420010e808200241d8136a200742002009420010e80820024188156a20084200200e420010e80820024188116a20064200200f420010e808200241e80f6a200542002013420010e808200241a8126a200a42002019420010e80820004190016a20022903a812222d20022903e80f7c221920022903d8137c22232002290388157c22242002290388117c222520022903b812222e20022903f80f7c221c20022903e8137c221d2002290398157c221e2002290398117c221f20022903c812222f2002290388107c222020022903f8137c222120022903a8157c223020022903a8117c223120022903d81222322002290398107c22332002290388147c223420022903b8157c223520022903b8117c2236423388200241d8126a41086a29030020024198106a41086a2903007c2033203254ad7c20024188146a41086a2903007c2034203354ad7c200241b8156a41086a2903007c2035203454ad7c200241b8116a41086a2903007c2036203554ad7c420d86847c2233423388200241c8126a41086a29030020024188106a41086a2903007c2020202f54ad7c200241f8136a41086a2903007c2021202054ad7c200241a8156a41086a2903007c2030202154ad7c200241a8116a41086a2903007c2031203054ad7c2033203154ad7c420d86847c2220423388200241b8126a41086a290300200241f80f6a41086a2903007c201c202e54ad7c200241e8136a41086a2903007c201d201c54ad7c20024198156a41086a2903007c201e201d54ad7c20024198116a41086a2903007c201f201e54ad7c2020201f54ad7c420d86847c221c42ffffffffffffff0383370300200020022903f812223020022903b8107c221d20022903a8147c221e20022903d8157c221f20022903d8117c2221202242338820024188136a41086a290300200241c8106a41086a2903007c201b202c54ad7c200241b8146a41086a2903007c200b201b54ad7c200241e8156a41086a2903007c200c200b54ad7c200241e8116a41086a2903007c200d200c54ad7c2022200d54ad7c420d86847c221b42ffffffffffffff038337031820024198126a200a42002009420010e808200241c8136a20074200200e420010e808200241f8146a20084200200f420010e808200241f8106a200642002013420010e808200241d80f6a200542002014420010e80820004198016a200229039812222c20022903d80f7c220b20022903c8137c220c20022903f8147c220d20022903f8107c2222201c423388200241a8126a41086a290300200241e80f6a41086a2903007c2019202d54ad7c200241d8136a41086a2903007c2023201954ad7c20024188156a41086a2903007c2024202354ad7c20024188116a41086a2903007c2025202454ad7c201c202554ad7c420d86847c222342ffffffffffffff0383370300200020022903e812221920022903a8107c22052002290398147c220a20022903c8157c220720022903c8117c2208201b423388200241f8126a41086a290300200241b8106a41086a2903007c201d203054ad7c200241a8146a41086a2903007c201e201d54ad7c200241d8156a41086a2903007c201f201e54ad7c200241d8116a41086a2903007c2021201f54ad7c201b202154ad7c420d86847c220642ffffffffffffff038337032020002006423388200241e8126a41086a290300200241a8106a41086a2903007c2005201954ad7c20024198146a41086a2903007c200a200554ad7c200241c8156a41086a2903007c2007200a54ad7c200241c8116a41086a2903007c2008200754ad7c2006200854ad7c420d868442137e201742ffffffffffffff03837c220542ffffffffffffff038337030020002005423388201242ffffffffffffff03837c370308200241d8016a20022903f806222d20022903e8037c220520022903e8087c220a2002290398087c220720022903c8077c2208200229038807222e2002290398057c220620022903f8087c221920022903a8087c221b20022903d8077c2212200229039807222f20022903c8067c22172002290388097c222420022903b8087c222520022903e8077c221c20022903a807223220022903d8067c221d2002290398097c221e20022903c8087c221f20022903f8077c222120022903b807223720022903e8067c223020022903a8097c223120022903d8087c22342002290388087c2235423388200241b8076a41086a290300200241e8066a41086a2903007c2030203754ad7c200241a8096a41086a2903007c2031203054ad7c200241d8086a41086a2903007c2034203154ad7c20024188086a41086a2903007c2035203454ad7c420d86847c2230423388200241a8076a41086a290300200241d8066a41086a2903007c201d203254ad7c20024198096a41086a2903007c201e201d54ad7c200241c8086a41086a2903007c201f201e54ad7c200241f8076a41086a2903007c2021201f54ad7c2030202154ad7c420d86847c221d42338820024198076a41086a290300200241c8066a41086a2903007c2017202f54ad7c20024188096a41086a2903007c2024201754ad7c200241b8086a41086a2903007c2025202454ad7c200241e8076a41086a2903007c201c202554ad7c201d201c54ad7c420d86847c221742338820024188076a41086a29030020024198056a41086a2903007c2006202e54ad7c200241f8086a41086a2903007c2019200654ad7c200241a8086a41086a2903007c201b201954ad7c200241d8076a41086a2903007c2012201b54ad7c2017201254ad7c420d86847c2206423388200241f8066a41086a290300200241e8036a41086a2903007c2005202d54ad7c200241e8086a41086a2903007c200a200554ad7c20024198086a41086a2903007c2007200a54ad7c200241c8076a41086a2903007c2008200754ad7c2006200854ad7c420d868442137e203542ffffffffffffff03837c220a42ffffffffffffff0383220542002009420010e808200241f8026a20144200200a423388203042ffffffffffffff03837c220a42137e420010e808200241b8056a20134200201d42ffffffffffffff0383220742137e2212420010e80820024198046a200f4200201742ffffffffffffff0383220842137e221b420010e808200241386a200e4200200642ffffffffffffff0383220642137e2219420010e808200241c8016a200e42002005420010e808200241e8026a20094200200a420010e808200241a8056a201442002012420010e80820024188046a20134200201b420010e808200241286a200f42002019420010e808200241b8016a200f42002005420010e808200241d8026a200e4200200a420010e808200241c8056a200942002007420010e808200241f8036a20144200201b420010e808200241186a201342002019420010e808200241a8016a201342002005420010e808200241c8026a200f4200200a420010e808200241d8056a200e42002007420010e808200241a8046a200942002008420010e808200241086a201442002019420010e80820024198016a201442002005420010e808200241b8026a20134200200a420010e808200241e8056a200f42002007420010e808200241b8046a200e42002008420010e80820024188036a200942002006420010e80820024188016a200342002005420010e80820024198036a20064200202b420010e808200241c8046a200842002018420010e808200241f8056a200742002016420010e808200241a8026a200a42002011420010e80820024198026a200a42002003420010e808200241f8006a200542002004420010e808200241a8036a200642002018420010e808200241d8046a200842002016420010e80820024188066a200742002011420010e80820024198066a200742002003420010e80820024188026a200a42002004420010e808200241e8006a200542002010420010e808200241b8036a200642002016420010e808200241e8046a200842002011420010e808200241f8046a200842002003420010e808200241a8066a200742002004420010e808200241f8016a200a42002010420010e808200241d8006a200542002015420010e808200241c8036a200642002011420010e808200241d8036a200642002003420010e80820024188056a200842002004420010e808200241b8066a200742002010420010e808200241e8016a200a42002015420010e808200241c8006a20054200201a420010e80820004188016a202042ffffffffffffff03833703002000202342338820024198126a41086a290300200241d80f6a41086a2903007c200b202c54ad7c200241c8136a41086a2903007c200c200b54ad7c200241f8146a41086a2903007c200d200c54ad7c200241f8106a41086a2903007c2022200d54ad7c2023202254ad7c420d868442137e203642ffffffffffffff03837c220342ffffffffffffff038337037820004180016a2003423388203342ffffffffffffff03837c370300200041e0006a20022903b803221b20022903687c220320022903e8047c22042002290398067c22052002290388027c220a20022903a803221320022903787c220720022903d8047c22082002290388067c22062002290398027c220920022903980322142002290388017c220e20022903c8047c220f20022903f8057c221020022903a8027c221142338820024198036a41086a29030020024188016a41086a2903007c200e201454ad7c200241c8046a41086a2903007c200f200e54ad7c200241f8056a41086a2903007c2010200f54ad7c200241a8026a41086a2903007c2011201054ad7c420d86847c220e423388200241a8036a41086a290300200241f8006a41086a2903007c2007201354ad7c200241d8046a41086a2903007c2008200754ad7c20024188066a41086a2903007c2006200854ad7c20024198026a41086a2903007c2009200654ad7c200e200954ad7c420d86847c220742ffffffffffffff0383370300200041386a20022903f803220b20022903c8057c220820022903187c220620022903b8017c220920022903d8027c220f20022903a805220c20022903e8027c22102002290388047c221320022903287c221420022903c8017c221520022903f802220d20022903d8017c221620022903b8057c22182002290398047c221920022903387c221a423388200241f8026a41086a290300200241d8016a41086a2903007c2016200d54ad7c200241b8056a41086a2903007c2018201654ad7c20024198046a41086a2903007c2019201854ad7c200241386a41086a2903007c201a201954ad7c420d86847c2216423388200241a8056a41086a290300200241e8026a41086a2903007c2010200c54ad7c20024188046a41086a2903007c2013201054ad7c200241286a41086a2903007c2014201354ad7c200241c8016a41086a2903007c2015201454ad7c2016201554ad7c420d86847c221042ffffffffffffff0383370300200041e8006a20022903c803221920022903587c221320022903f8047c221420022903a8067c221520022903f8017c22182007423388200241b8036a41086a290300200241e8006a41086a2903007c2003201b54ad7c200241e8046a41086a2903007c2004200354ad7c20024198066a41086a2903007c2005200454ad7c20024188026a41086a2903007c200a200554ad7c2007200a54ad7c420d86847c220342ffffffffffffff0383370300200041c0006a2002290308221b20022903a8047c220420022903a8017c220520022903c8027c220a20022903d8057c22072010423388200241f8036a41086a290300200241c8056a41086a2903007c2008200b54ad7c200241186a41086a2903007c2006200854ad7c200241b8016a41086a2903007c2009200654ad7c200241d8026a41086a2903007c200f200954ad7c2010200f54ad7c420d86847c220842ffffffffffffff0383370300200041f0006a20022903d803220b20022903487c22062002290388057c220920022903b8067c220f20022903e8017c22102003423388200241c8036a41086a290300200241d8006a41086a2903007c2013201954ad7c200241f8046a41086a2903007c2014201354ad7c200241a8066a41086a2903007c2015201454ad7c200241f8016a41086a2903007c2018201554ad7c2003201854ad7c420d86847c220342ffffffffffffff0383370300200041c8006a20022903980122192002290388037c221320022903b8027c221420022903e8057c221520022903b8047c22182008423388200241086a41086a290300200241a8046a41086a2903007c2004201b54ad7c200241a8016a41086a2903007c2005200454ad7c200241c8026a41086a2903007c200a200554ad7c200241d8056a41086a2903007c2007200a54ad7c2008200754ad7c420d86847c220442ffffffffffffff038337030020002003423388200241d8036a41086a290300200241c8006a41086a2903007c2006200b54ad7c20024188056a41086a2903007c2009200654ad7c200241b8066a41086a2903007c200f200954ad7c200241e8016a41086a2903007c2010200f54ad7c2003201054ad7c420d868442137e201142ffffffffffffff03837c220342ffffffffffffff0383370350200041d8006a2003423388200e42ffffffffffffff03837c3703002000200442338820024198016a41086a29030020024188036a41086a2903007c2013201954ad7c200241b8026a41086a2903007c2014201354ad7c200241e8056a41086a2903007c2015201454ad7c200241b8046a41086a2903007c2018201554ad7c2004201854ad7c420d868442137e201a42ffffffffffffff03837c220342ffffffffffffff0383370328200041306a2003423388201642ffffffffffffff03837c370300200241f02b6a24000bd32004047f017e027f1c7e23004190066b220224000240024020012c001f417f4a0d00200041003a00000c010b20024180056a41186a2203200141186a29000037030020024180056a41106a2204200141106a29000037030020024180056a41086a2205200141086a29000037030020022001290000220637038005200220022d009f0541ff00713a009f05200241c0056a41186a22074200370300200241c0056a41106a22084200370300200241c0056a41086a220142003703002002200231008205421086200231008105420886200642ff0183848422063703c005200220023100830542188620068422063703c005200220023100840542208620068422063703c005200220023100850542288620068422063703c005200220023100860542308620068422063703c00520022002310087054238862006843703c005200120012903002005310000842206370300200120023100890542088620068422063703002001200231008a0542108620068422063703002001200231008b0542188620068422063703002001200231008c0542208620068422063703002001200231008d0542288620068422063703002001200231008e0542308620068422063703002001200231008f0542388620068437030020082008290300200431000084220637030020082002310091054208862006842206370300200820023100920542108620068422063703002008200231009305421886200684220637030020082002310094054220862006842206370300200820023100950542288620068422063703002008200231009605423086200684220637030020082002310097054238862006842209370300200720072903002003310000842206370300200720023100990542088620068422063703002007200231009a0542108620068422063703002007200231009b0542188620068422063703002007200231009c0542208620068422063703002007200231009d0542288620068422063703002007200231009e0542308620068422063703002007200231009f05423886200684220a37030020024180036a20022903c005220b42ffffffffffffff07832206420042edcd87b9d697d207420010e808200241c0026a2006420042dac89fe3dad6ee01420010e80820024180026a2001290300220c420c864280e0ffffffffff0783200b42348884220b420042edcd87b9d697d207420010e808200241b0026a20064200429bcad7d9feffff07420010e808200241c0016a200b420042dac89fe3dad6ee01420010e808200241d0036a200942188642808080f8ffffff0783200c42288884220c420042edcd87b9d697d207420010e808200241a0026a2006420042ffffffffffffff07420010e80820024180016a200b4200429bcad7d9feffff07420010e808200241c0036a200c420042dac89fe3dad6ee01420010e808200241a0046a200a422486428080808080feff07832009421c88842209420042edcd87b9d697d207420010e80820024190026a2006420042ffffffffffff03420010e808200241c0006a200b420042ffffffffffffff07420010e808200241b0036a200c4200429bcad7d9feffff07420010e80820024190046a2009420042dac89fe3dad6ee01420010e808200241f0046a200a4210882206420042edcd87b9d697d207420010e8082002200b420042ffffffffffff03420010e808200241a0036a200c420042ffffffffffffff07420010e80820024180046a20094200429bcad7d9feffff07420010e808200241e0046a2006420042dac89fe3dad6ee01420010e80820024190036a200c420042ffffffffffff03420010e808200241f0036a2009420042ffffffffffffff07420010e808200241d0046a20064200429bcad7d9feffff07420010e808200241e0036a2009420042ffffffffffff03420010e808200241c0046a2006420042ffffffffffffff07420010e808200241b0046a2006420042ffffffffffff03420010e808200241f0026a200229038003220b429bfcd192b1b4c7027e42ffffffffffffff07832206420042eda7d7e7a5e39801420010e808200241e0026a200642004281cbb5cef7c5fa06420010e808200241f0016a200229038002220d20022903c0027c220c200b20022903f00222097c220b423488200241f0026a41086a29030020024180036a41086a2903007c200b200954ad7c220e420c86847c220920022903e0027c220a429bfcd192b1b4c7027e42ffffffffffffff0783220b420042eda7d7e7a5e39801420010e808200241d0026a2006420042f9bdd300420010e808200241e0016a200b42004281cbb5cef7c5fa06420010e808200241b0016a20022903c001220f20022903b0027c221020022903d0037c221120022903d0027c221220022903e0017c221320022903f0012214200a7c2215423488200241f0016a41086a29030020024180026a41086a290300200241c0026a41086a2903007c200c200d54ad7c200e4234887c2009200c54ad7c200241e0026a41086a2903007c200a200954ad7c7c2015201454ad7c2216420c86847c2209429bfcd192b1b4c7027e42ffffffffffffff0783220c420042eda7d7e7a5e39801420010e808200241d0016a200b420042f9bdd300420010e808200241a0016a200c42004281cbb5cef7c5fa06420010e808200241f0006a200229038001221720022903a0027c220a20022903c0037c220d20022903a0047c220e20022903d0017c221420022903a0017c221520022903b001221820097c2219423488200241b0016a41086a290300200241c0016a41086a290300200241b0026a41086a2903007c2010200f54ad7c200241d0036a41086a2903007c2011201054ad7c200241d0026a41086a2903007c2012201154ad7c200241e0016a41086a2903007c2013201254ad7c20164234887c2009201354ad7c7c2019201854ad7c221a420c86847c2210429bfcd192b1b4c7027e42ffffffffffffff07832209420042eda7d7e7a5e39801420010e80820024190016a200c420042f9bdd300420010e808200241e0006a200942004281cbb5cef7c5fa06420010e808200241306a2002290340221b2002290390027c221120022903b0037c22122002290390047c221320022903f0047c220f2006422c867c22162002290390017c221820022903607c22192002290370221c20107c221d423488200241f0006a41086a29030020024180016a41086a290300200241a0026a41086a2903007c200a201754ad7c200241c0036a41086a2903007c200d200a54ad7c200241a0046a41086a2903007c200e200d54ad7c200241d0016a41086a2903007c2014200e54ad7c200241a0016a41086a2903007c2015201454ad7c201a4234887c2010201554ad7c7c201d201c54ad7c221e420c86847c2210429bfcd192b1b4c7027e42ffffffffffffff0783220a420042eda7d7e7a5e39801420010e808200241d0006a2009420042f9bdd300420010e808200241206a200a42004281cbb5cef7c5fa06420010e808200241106a200a420042f9bdd300420010e808200120022903f003221f2002290390037c220d20022903d0047c220e200c422c867c221420022903107c221520022903a003222020022903007c22172002290380047c221a20022903e0047c221c200b422c867c221d20022903507c222120022903207c22222002290330222320107c2224423488200241306a41086a290300200241c0006a41086a29030020024190026a41086a2903007c2011201b54ad7c200241b0036a41086a2903007c2012201154ad7c20024190046a41086a2903007c2013201254ad7c200241f0046a41086a2903007c200f201354ad7c20064214887c2016200f54ad7c20024190016a41086a2903007c2018201654ad7c200241e0006a41086a2903007c2019201854ad7c201e4234887c2010201954ad7c7c2024202354ad7c2210420c86847c2206423488200241a0036a41086a290300200241086a2903007c2017202054ad7c20024180046a41086a2903007c201a201754ad7c200241e0046a41086a2903007c201c201a54ad7c200b4214887c201d201c54ad7c200241d0006a41086a2903007c2021201d54ad7c200241206a41086a2903007c2022202154ad7c20104234887c2006202254ad7c2212420c86847c220b42ffffffffffffff0783200642ffffffffffffff07834293d8a898da9ce77e7c2206423f877c42ffb4cab188ba85797c221342ffffffffffffff0783200642ffffffffffffff0783200a422c86220f20022903b0047c220620022903c004221620022903e0037c22102009422c867c2211200b423488200241f0036a41086a29030020024190036a41086a2903007c200d201f54ad7c200241d0046a41086a2903007c200e200d54ad7c200c4214887c2014200e54ad7c200241106a41086a2903007c2015201454ad7c20124234887c200b201554ad7c220c420c86847c220b423488200241c0046a41086a290300200241e0036a41086a2903007c2010201654ad7c20094214887c2011201054ad7c200c4234887c200b201154ad7c2209420c86847c220c423488200a421488200241b0046a41086a2903007c2006200f54ad7c20094234887c200c200654ad7c420c8684200c42ffffffffffffff0783200b42ffffffffffffff07832013423f877c4287c2ac7f7c220c423f877c2209423f877c428080808080807c7c2210423f87220a42eda7d7e7a5e39801837c22064234887c200a4281cbb5cef7c5fa06837c220b42ffffffffffffff078322113703002008200c42ffffffffffffff0783200b4234887c200a42f9bdd300837c220c42ffffffffffffff078322123703002007200942ffffffffffffff0783200c4234887c220942ffffffffffffff07832213370300200241e0056a201042ffffffffffffff078320094234887c200a4280808080808004837c220a42ffffffffffffff07833703002002200642ffffffffffffff078322103703c0052002200a4228883c00bf052002200a4220883c00be052002200a4218883c00bd052002200a4210883c00bc052002200a4208883c00bb052002200a3c00ba0520022009422c883c00b905200220094224883c00b80520022009421c883c00b705200220094214883c00b60520022009420c883c00b505200220094204883c00b405200220134204862012423088843c00b3052002200c4228883c00b2052002200c4220883c00b1052002200c4218883c00b0052002200c4210883c00af052002200c4208883c00ae052002200c3c00ad052002200b422c883c00ac052002200b4224883c00ab052002200b421c883c00aa052002200b4214883c00a9052002200b420c883c00a8052002200b4204883c00a705200220114204862010423088843c00a605200220064228883c00a505200220064220883c00a405200220064218883c00a305200220064210883c00a205200220064208883c00a105200220063c00a0052006a72108200241a0056a4101722103410021014101210702400340200820024180056a20016a2d0000732208410020086b72417f7341800171410776106d20077121072001411f460d01200320016a2d00002108200141016a21010c000b0b4100210102402007106d41ff01714101470d002000200229038005370001200041196a20024198056a290300370000200041116a20024190056a290300370000200041096a20024188056a290300370000410121010b200020013a00000b20024190066a24000bc60101017f230041106b2202240002400240024002400240024002400240200041ff01710e0700010203040506070b200241003a000f20012002410f6a410110740c060b200241013a000f20012002410f6a410110740c050b200241023a000f20012002410f6a410110740c040b200241033a000f20012002410f6a410110740c030b200241043a000f20012002410f6a410110740c020b200241053a000f20012002410f6a410110740c010b200241063a000f20012002410f6a410110740b200241106a24000b880201047f230041206b2203240002400240200041046a2802002204200041086a28020022056b2002490d00200028020021040c010b0240200520026a22062005490d00200441017422052006200520064b1b22054108200541084b1b21050240024020040d00200341003602100c010b200341106a41086a410136020020032004360214200320002802003602100b200320054101200341106a107d200341086a2802002105024020032802004101460d00200020032802042204360200200041046a2005360200200041086a28020021050c020b2005450d001036000b1038000b200420056a2001200210e9081a200041086a2200200028020020026a360200200341206a24000bfa0201057f230041106b2203240002402001450d002000200141386c6a210403402000220528020421012005280208220620021076200220012006107420052802102101200528021422062002107620022001200610740240024020052802184101470d00200528021c2101200528022422062002107620022001200610740c010b2003200528021c200528022028020c11020020032802002101200328020822062002107620022001200610742003280204450d002001102e0b200541386a2100200528022c21010240024020052802284101470d00200528023422052002107620054103742205450d01200120056a2107034020012802002105200141046a2802002206200210762002200520061074200141086a22012007470d000c020b0b200528023022052002107620054103742205450d00200120056a2107034020012802002105200141046a2802002206200210762002200520061074200141086a22012007470d000b0b20002004470d000b0b200341106a24000bab0101017f230041106b220224000240024002400240200041c000490d00200041808001490d012000418080808004490d02200241033a00032001200241036a41011074200220003602042001200241046a410410740c030b200220004102743a00032001200241036a410110740c020b200220004102744101723b010a20012002410a6a410210740c010b2002200041027441027236020c20012002410c6a410410740b200241106a24000bec0101047f02402001450d0020002001411c6c6a21030340200022042802042101200428020822052002107620022001200510742004411c6a21002004280210210102400240200428020c4101470d00200428021822042002107620044103742204450d01200120046a2106034020012802002104200141046a2802002205200210762002200420051074200141086a22012006470d000c020b0b200428021422042002107620044103742204450d00200120046a2106034020012802002104200141046a2802002205200210762002200420051074200141086a22012006470d000b0b20002003470d000b0b0be40301057f02402001450d0020002001412c6c6a21030340200022042802042101200428020822052002107620022001200510742004280210210102400240200428020c4101470d0020042802182205200210762005450d01200541186c2105200141146a21010340200141706a2802002106200141746a28020022072002107620022006200710742001417c6a280200210620012802002207200210762002200620071074200141186a2101200541686a22050d000c020b0b200441146a2802002205200210762005450d00200541186c2105200141146a21010340200141706a2802002106200141746a28020022072002107620022006200710742001417c6a280200210620012802002207200210762002200620071074200141186a2101200541686a22050d000b0b2004412c6a21002004280220210102400240200428021c4101470d00200428022822052002107620054103742205450d01200120056a2107034020012802002105200141046a2802002206200210762002200520061074200141086a22012007470d000c020b0b200428022422052002107620054103742205450d00200120056a2107034020012802002105200141046a2802002206200210762002200520061074200141086a22012007470d000b0b20002003470d000b0b0bb00701057f230041c0006b2203240002402001450d002000200141f0006c6a21040340200028020421012000280208220520021076200220012005107402400240200028020c22014102470d00200341003a00202002200341206a410110740c010b200341013a00202002200341206a41011074024020014101470d002000280214210120002802182205200210762002200120051074200028022021010240200028021c4101470d002000280228220520021076200120052002107a0c020b200041246a280200220520021076200120052002107a0c010b200341206a20002802101103002003280224210120032802282205200210762002200120051074200328023021060240200328022c4101460d002003280234220120021076200620012002107a0c010b2003280238220120021076200620012002107a024020032802382201450d00200141d8006c21074100210503400240200620056a220141346a280200450d002001413c6a280200450d00200141386a280200102e0b0240200141c4006a280200450d00200141cc006a28020041ffffffff0171450d00200141c8006a280200102e0b2007200541d8006a2205470d000b0b20032802342201450d00200141d8006c450d002006102e0b02400240200028022c22014102470d00200341003a00202002200341206a410110740c010b200341013a00202002200341206a41011074024020014101470d0020002802302101200028023822052002107620012005200210780c010b200341186a200028023011030020032802182101200328021c22052002107620012005200210780b02400240200028023c22014102470d00200341003a00202002200341206a410110740c010b200341013a00202002200341206a41011074024020014101470d00200028024021012000280248220520021076200120052002107b0c010b200341106a2000280240110300200328021021012003280214220520021076200120052002107b0b02400240200028024c4101470d0020002802502101200028025822052002107620012005200210750c010b200341086a200028025011030020032802082101200328020c22052002107620012005200210750b200041f0006a210102400240200028025c4101470d0020002802602105200028026822062002107620052006200210770c010b2003200028026011030020032802002105200328020422062002107620052006200210770b200320002d006c3a00202002200341206a410110742001210020012004470d000b0b200341c0006a24000bc10501057f230041106b2203240002402001450d002000200141d8006c6a21040340200022052802042101200528020822062002107620022001200610740240024020052d00544101460d00200341003a000f20022003410f6a410110740c010b200341013a000f20022003410f6a410110740b024002400240024020052d000c0e03000102030b200341003a000f20022003410f6a4101107420052802142101200528021822062002107620022001200610740c020b200341013a000f20022003410f6a410110742005410d6a2d0000200210732005280214210120052802182206200210762002200120061074200528022021012005280224220620021076200220012006107420032005410e6a2d00003a000f20022003410f6a410110740c010b200341023a000f20022003410f6a410110742005410d6a2d00002002107320052802142101200528021822062002107620022001200610742005280220210120052802242206200210762002200120061074200528022c2101200528023022062002107620022001200610742005410e6a2d0000200210730b0240024020052802344101470d0020052802382101200528024022062002107620022001200610740c010b20032005280238200528023c28020c11020020032802002101200328020822062002107620022001200610742003280204450d002001102e0b200541d8006a2100200528024821010240024020052802444101470d00200528025022052002107620054103742205450d01200120056a2107034020012802002105200141046a2802002206200210762002200520061074200141086a22012007470d000c020b0b200528024c22052002107620054103742205450d00200120056a2107034020012802002105200141046a2802002206200210762002200520061074200141086a22012007470d000b0b20002004470d000b0b200341106a24000b950301057f02402001450d0020002001412c6c6a21030340200022042802042101200428020822052002107620022001200510742004280210210102400240200428020c4101470d00200428021822052002107620054103742205450d01200120056a2106034020012802002105200141046a2802002207200210762002200520071074200141086a22012006470d000c020b0b200428021422052002107620054103742205450d00200120056a2106034020012802002105200141046a2802002207200210762002200520071074200141086a22012006470d000b0b2004412c6a21002004280220210102400240200428021c4101470d00200428022822052002107620054103742205450d01200120056a2106034020012802002105200141046a2802002207200210762002200520071074200141086a22012006470d000c020b0b200428022422052002107620054103742205450d00200120056a2106034020012802002105200141046a2802002207200210762002200520071074200141086a22012006470d000b0b20002003470d000b0b0be207010c7f230041206b220224002001410c6a2802002103200128020821042001280204210502400240024002400240024002400240024002400240200128020022060d002004450d01200320046b21070c020b200520066b2101024020040d00200121070c020b2001200320046b6a220720014f0d012000420137020041002107200041086a22084100360200200520066b2109410121010c040b2000420137020041002107200041086a22084100360200410121010c010b2007417f4c0d070240024020070d00410121010c010b2007102c2201450d050b20002001360200200041086a22084100360200200041046a200736020020060d010b200320046b410020041b21090c020b200520066b21092004450d010b02402009200320046b6a220a2009490d00200a21090c010b0240024020052006460d00200641016a210b0c010b2004450d0420032004460d044100210b20042106200441016a21040b200041046a210c4100210d034020042109200b210a20062d0000210602400240024002400240200d2007470d0002400240200a0d00200320096b410020091b21040c010b2005200a6b21042009450d00417f2004200320096b6a220b200b2004491b21040b200720076b417f200441016a220b200b2004491b22044f0d00200720046a22042007490d0a2007410174220b2004200b20044b1b22044108200441084b1b21040240024020070d00200241003602100c010b2002410136021820022007360214200220013602100b200220044101200241106a107d2002280208210720022802004101460d01200020022802042201360200200c20073602000b2001200d6a20063a00002008200d41016a220d360200200a0d01200a210b0c020b2007450d080c050b200a2005470d014100210b0b2009450d0520092003460d05200941016a2104200921060c010b200a41016a210b20092104200a21060c000b0b200720094f0d012007410174220a2009200a20094b1b22094108200941084b1b21090240024020070d00200241003602100c010b200241106a41086a410136020020022007360214200220013602100b200220094101200241106a107d200241086a2802002109024020022802004101460d00200020022802042201360200200041046a20093602000c020b2009450d030b1036000b4100210902402006450d0020052006460d00200520066b21090340200120062d00003a0000200141016a21012005200641016a2206470d000b0b02402004450d0020032004460d00200920046b21060340200120042d00003a0000200141016a21012003200441016a2204470d000b200320066a21090b200820093602000b200241206a24000f0b1038000bbd0101017f0240024002400240024002402002450d0020014100480d01024002400240200328020022040d002001450d010c050b200328020422030d0120010d040b200221030c050b20042003200110302203450d030c040b2000200136020420004101360200200041086a41003602000f0b20004101360200200041086a41003602000f0b2001102c22030d010b2000200136020441012103200221010c010b20002003360204410021030b20002003360200200041086a20013602000b1c002001280218419eeacc00410f2001411c6a28020028020c1100000b9f0904017f017e017f087e230041b0046b22022400200141bc016a350200210320012802b8012104200241c0016a200141b80110e9081a024002400240200241e8016a2903004201510d0020022903c80121050c010b200241f0016a290300220620022903c8012205560d010b200521060b200220063703c801024002400240200241a0026a2903004201510d0020022903c80121050c010b200241a8026a290300220620022903c8012205560d010b200521060b200220063703c801024002400240200241d8026a2903004201510d0020022903c80121050c010b200241e0026a290300220620022903c8012205560d010b200521060b200220063703c80102402004450d002006428094ebdc038020037e2006428094ebdc038220037e2206428094ebdc038042ffffffff0f2006428080808080c0b2cd3b541b2006428094ebdc03824280cab5ee0156ad7c42ffffffff0f837c21060240200241d8016a2903004201510d00200241e0016a42004200200241f0016a290300220320067d220520052003561b220320022903d0017d220520052003561b3703002002200241e8016a2903003703d8010b024020024190026a2903004201510d0020024198026a42004200200241a8026a290300220320067d220520052003561b220320024188026a2903007d220520052003561b3703002002200241a0026a290300370390020b200241c8026a2903004201510d00200241d0026a42004200200241e0026a290300220320067d220620062003561b2206200241c0026a2903007d220320032006561b3703002002200241d8026a2903003703c8020b200241f8026a200241c0016a41b80110e9081a02400240200229038003220620022903f8022203200241f8036a29030022077c580d002006420020024198046a290300220520024190046a2903005022011b540d00427e200241a8046a290300427f7c200241a0046a290300501b2007540d0020024188046a29030022085020024180046a2903002209420052710d00420020082009501b4200427f200520011b220520077d220820082005561b560d0020062003200241c0036a29030022097c580d0020064200200241e0036a2903002208200241f8026a41e0006a2903005022011b540d00427e200241f0036a290300427f7c200241e8036a290300501b2009540d00200241d0036a290300220a50200241c8036a290300220b420052710d004200200a200b501b4200427f200820011b220820097d220a200a2008561b560d0020062003200229038803220a7c580d0020064200200241a8036a290300220b200241a0036a2903005022011b540d00427e200241b8036a290300427f7c200241b0036a290300501b200a540d0020024198036a29030022065020024190036a290300220c420052710d0042002006200c501b4200427f200b20011b2206200a7d220b200b2006561b560d002006502006200a5620062003567172450d00200850200820095620082003567172450d002005502005200756200520035671720d010b200241013a000241d3a0c00041e000200241026a41ec9fc00041b4a1c000103e000b2000200241086a200241f8026a41b80110e90841b80110e9081a200241b0046a24000ba90803197e017f147e20002903c0012101200029039801210220002903702103200029034821042000290320210520002903b8012106200029039001210720002903682108200029034021092000290318210a20002903b001210b200029038801210c2000290360210d2000290338210e2000290310210f20002903a8012110200029038001211120002903582112200029033021132000290308211420002903a00121152000290378211620002903502117200029032821182000290300211941c07e211a0340200b200c200d200e200f85858585221b4201892015201620172018201985858585221c85221d201385211e20012006200720082009200a85858585221f201c42018985221c85212020012002200320042005858585852221420189201b85221b2009854237892222201f4201892010201120122013201485858585220985221f200f85423e892223427f8583201d201085420289222485210120222021200942018985220f20168542298922212003201c854227892225427f8583852110201b2006854238892226201f200c85420f892227427f8583201d201285420a89222885210c2028200f2018854224892229427f85832005201c85421b89222a852116200f2015854212892215201f200e85420689222b201d201485420189222c427f85838521032002201c85420889222d201b200885421989222e427f8583202b8521122004201c85421489221c201b200a85421c89220a427f8583201f200b85423d89220e852104200a200e427f8583201d201185422d89221d852109200f2017854203892214200e201d427f858385210e201d2014427f8583201c852113200a2014201c427f8583852118201b200785421589221d200f201985221c2020420e89221b427f858385210a201b201d427f8583201f200d85422b89221f85210f201d201f427f8583201e422c89221d852114201a4198a3c0006a290300201c201f201d427f85838585211920262029202a427f858385221f2102201d201c427f8583201b85221d2105202120232024427f858385221c2106202a2026427f8583202785221b2107202c2015427f8583202d852226210820242021427f85832025852224210b202e2015202d427f8583852221210d202920272028427f8583852227211120252022427f858320238522222115202e202b427f8583202c8522232117201a41086a221a0d000b200020223703a00120002016370378200020233703502000201837032820002019370300200020103703a8012000202737038001200020123703582000201337033020002014370308200020243703b0012000200c37038801200020213703602000200e3703382000200f3703102000201c3703b8012000201b3703900120002026370368200020093703402000200a370318200020013703c0012000201f3703980120002003370370200020043703482000201d3703200be61801037f230041f0016b22032400200341106a41126a410041b60110eb081a2003411e6a41002800b6a340360100200341002f00aca3403b0114200341002800a8a340360210200341002900aea340370116200341106a1080012000200341106a41c80110e908220041003a00ca01200041003b01c801200041124100108201024020002d00c801220441c7014b0d00200020046a220420042d000041cd00733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200441c8014f0d010b200020046a220420042d000041e500733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200441c7014b0d010b200020046a220420042d000041f200733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200441c7014b0d010b200020046a220420042d000041ec00733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200441c7014b0d010b200020046a220420042d000041e900733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200441c7014b0d010b200020046a220420042d000041ee00733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200441c7014b0d010b200020046a220420042d00004120733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200441c7014b0d010b200020046a220420042d000041f600733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200441c7014b0d010b200020046a220420042d00004131733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200441c7014b0d010b200020046a220420042d0000412e733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200441c7014b0d010b200020046a220420042d00004130733a0000200020002d00c80141016a22043a00c8010240200441ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a7012000108001200041003b01c8010b2003200236020c200041124100108201024020002d00c801220441c8014f0d00200020046a220420042d000041e400733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200541c8014f0d010b2000200441ff01716a220420042d000041ef00733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d000041ed00733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d0000412d733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d000041f300733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d000041e500733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200541c7014b0d010b200041ca016a21052000200441ff01716a220420042d000041f000733a0000200020002d00c80141016a22043a00c8010240200441ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010b200341123a00df01024020052d00004112460d00200341e0016a410c6a4109360200200341246a4102360200200341106a410c6a4102360200200341186a41aca4c000360200200341023602142003419ca4c000360210200341093602e401200320053602e001200341206a200341e0016a3602002003200341df016a3602e8012005200341df016a200341106a41eca4c000108301000b0240200441ff0171220541c7014b0d00200020056a220420042d000020032d000c733a0000200020002d00c80141016a22043a00c80102400240200441ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200441ff017141c8014f0d010b2000200441ff01716a220420042d000020032d000d733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d000020032d000e733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d000020032d000f733a0000200020002d00c80141016a22043a00c8010240200441ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a7012000108001200041003b01c8010b200041024100108201024002402002450d0020002d00c80121040340200441ff0171220441c7014b0d02200020046a220420042d000020012d0000733a0000200020002d00c80141016a22043a00c8010240200441ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002104200041003b01c8010b200141016a21012002417f6a22020d000b0b200341f0016a24000f0b200441c80141bca3c000103c000b200441ff017141c80141bca3c000103c000b200441ff017141c80141bca3c000103c000b200441c80141bca3c000103c000bd30501027f230041306b22032400200320013a000702400240024002402002450d0020002d00ca01200141ff0171460d01200341086a410c6a41093602002003412c6a4102360200200341186a410c6a4102360200200341206a41aca4c0003602002003410236021c2003419ca4c0003602182003410936020c2003200041ca016a2200360208200341286a200341086a3602002003200341076a3602102000200341076a200341186a41eca4c000108301000b2003200141087122023a00080240024020020d00200020013a00ca0120002d00c9012104200020002d00c801220241016a3a00c901200320013a0019200320043a00180240200241c7014b0d00200020026a220120012d000020032d0018733a0000200020002d00c80141016a22023a00c8010240200241ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002102200041003b01c8010c030b200141c801490d020b200241ff017141c80141bca3c000103c000b2003412c6a4100360200200341286a41d4e2cc003602002003420137021c200341fca4c000360218200341086a41aad3c800200341186a4184a5c000108301000b2000200241ff01716a220120012d000020032d0019733a0000200020002d00c80141016a22013a00c8010240200141ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002101200041003b01c8010b20032d0007412471450d00200141ff01712201450d00200141c7014b0d01200020016a220120012d000020002d00c901733a000020002d00c80141016a41ff0171220141c8014f0d02200020016a220120012d00004104733a0000200020002d00a701418001733a00a7012000108001200041003b01c8010b200341306a24000f0b200141c8014194a5c000103c000b200141c80141a4a5c000103c000b6601017f230041206b220424002004200136020420042000360200200441086a41106a200241106a290200370300200441086a41086a200241086a2902003703002004200229020037030820044198a3c000200441046a4198a3c000200441086a20031058000b960801027f230041306b2205240020052004360200200041124100108201024002400240024002402002450d0020002d00c80121060340200641ff0171220641c7014b0d02200020066a220620062d000020012d0000733a0000200020002d00c80141016a22063a00c8010240200641ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002106200041003b01c8010b200141016a21012002417f6a22020d000b0b200541123a000720002d00ca014112470d0120002d00c801220641c7014b0d03200020066a220620062d000020052d0000733a0000200020002d00c80141016a22063a00c8010240200641ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002106200041003b01c8010c030b200141c801490d020c030b200641c80141bca3c000103c000b200541206a410c6a41093602002005411c6a4102360200200541086a410c6a4102360200200541106a41aca4c0003602002005410236020c2005419ca4c000360208200541093602242005200041ca016a2200360220200541186a200541206a3602002005200541076a3602282000200541076a200541086a41eca4c000108301000b2000200641ff01716a220620062d000020052d0001733a0000200020002d00c80141016a22063a00c80102400240200641ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002106200041003b01c8010c010b200141c7014b0d010b2000200641ff01716a220620062d000020052d0002733a0000200020002d00c80141016a22063a00c80102400240200641ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002106200041003b01c8010c010b200141c7014b0d010b2000200641ff01716a220620062d000020052d0003733a0000200020002d00c80141016a22063a00c8010240200641ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a7012000108001200041003b01c8010b200041024100108201024002402004450d0020002d00c80121060340200641ff0171220641c7014b0d02200020066a220620062d000020032d0000733a0000200020002d00c80141016a22063a00c8010240200641ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002106200041003b01c8010b200341016a21032004417f6a22040d000b0b200541306a24000f0b200641c80141bca3c000103c000b200641ff017141c80141bca3c000103c000be00e01027f230041c0006b220424002004200337030820044108360210200041124100108201024002400240024002402002450d0020002d00c80121050340200541ff0171220541c7014b0d02200020056a220520052d000020012d0000733a0000200020002d00c80141016a22053a00c8010240200541ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002105200041003b01c8010b200141016a21012002417f6a22020d000b0b200441123a001720002d00ca014112470d0120002d00c801220541c7014b0d03200020056a220520052d000020042d0010733a0000200020002d00c80141016a22053a00c8010240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002105200041003b01c8010c030b200141c801490d020c030b200541c80141bca3c000103c000b200441306a410c6a41093602002004412c6a4102360200200441186a410c6a4102360200200441206a41aca4c0003602002004410236021c2004419ca4c000360218200441093602342004200041ca016a2200360230200441286a200441306a3602002004200441176a3602382000200441176a200441186a41eca4c000108301000b2000200541ff01716a220520052d000020042d0011733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d0012733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d0013733a0000200020002d00c80141016a22053a00c8010240200541ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a7012000108001200041003b01c8010b200041024100108201024020002d00c801220541c8014f0d00200020056a220520052d000020042d0008733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002105200041003b01c8010c010b200141c8014f0d010b2000200541ff01716a220520052d000020042d0009733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d000a733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d000b733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d000c733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d000d733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d000e733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d000f733a0000200020002d00c80141016a22053a00c8010240200541ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a7012000108001200041003b01c8010b200441c0006a24000f0b200541ff017141c80141bca3c000103c000b200541ff017141c80141bca3c000103c000bb80801027f230041306b2205240020052004360200200041124100108201024002400240024002402002450d0020002d00c80121060340200641ff0171220641c7014b0d02200020066a220620062d000020012d0000733a0000200020002d00c80141016a22063a00c8010240200641ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002106200041003b01c8010b200141016a21012002417f6a22020d000b0b200541123a000720002d00ca014112470d0120002d00c801220641c7014b0d03200020066a220620062d000020052d0000733a0000200020002d00c80141016a22063a00c8010240200641ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002106200041003b01c8010c030b200141c801490d020c030b200641c80141bca3c000103c000b200541206a410c6a41093602002005411c6a4102360200200541086a410c6a4102360200200541106a41aca4c0003602002005410236020c2005419ca4c000360208200541093602242005200041ca016a2200360220200541186a200541206a3602002005200541076a3602282000200541076a200541086a41eca4c000108301000b2000200641ff01716a220620062d000020052d0001733a0000200020002d00c80141016a22063a00c80102400240200641ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002106200041003b01c8010c010b200141c7014b0d010b2000200641ff01716a220620062d000020052d0002733a0000200020002d00c80141016a22063a00c80102400240200641ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002106200041003b01c8010c010b200141c7014b0d010b2000200641ff01716a220620062d000020052d0003733a0000200020002d00c80141016a22063a00c8010240200641ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a7012000108001200041003b01c8010b20004107410010820102402004450d0020002d00c8012106024002400340200641ff0171220641c7014b0d012003200020066a2d00003a000020002d00c801220641c7014b0d02200020066a41003a0000200020002d00c80141016a22063a00c8010240200641ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010800141002106200041003b01c8010b200341016a21032004417f6a22040d000c030b0b200641c80141a4a6c000103c000b200641c80141b4a6c000103c000b200541306a24000f0b200641ff017141c80141bca3c000103c000bc60201037f23004180016b2202240020002802002100024002400240024020012802002203411071450d0020002d00002104410021000340200220006a41ff006a2004410f712203413072200341d7006a2003410a491b3a00002000417f6a21002004410476410f7122040d000b20004180016a22044181014f0d02200141ac88c0004102200220006a4180016a410020006b104b21000c010b20002d0000210402402003412071450d00410021000340200220006a41ff006a2004410f712203413072200341376a2003410a491b3a00002000417f6a21002004410476410f7122040d000b20004180016a22044181014f0d03200141ac88c0004102200220006a4180016a410020006b104b21000c010b2004ad42ff01832001104821000b20024180016a240020000f0b2004418001419c88c0001056000b2004418001419c88c0001056000b820401027f230041106b220224000240024002400240024002400240024002402000280200417b6a2203410220034108491b0e080102030405060700010b200128021841e4a6c000410c2001411c6a28020028020c11000021010c070b200128021841f0a6c00041102001411c6a28020028020c11000021010c060b20012802184180a7c00041132001411c6a28020028020c11000021010c050b200220012802184193a7c000410c2001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200036020c20022002410c6a41a0a7c00010661a20022d0008210120022802042203450d04200141ff0171210041012101024020000d00024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841f79ec00041012000411c6a28020028020c1100000d010b2002280200220128021841f89ec00041012001411c6a28020028020c11000021010b200220013a00080c040b200128021841b0a7c000410b2001411c6a28020028020c11000021010c030b200128021841bba7c000410c2001411c6a28020028020c11000021010c020b200128021841c7a7c000410d2001411c6a28020028020c11000021010c010b200128021841d4a7c000410c2001411c6a28020028020c11000021010b200241106a2400200141ff01714100470b1c002001280218419eeacc00410f2001411c6a28020028020c1100000bd10201057f230041106b22022400024002400240024002400240024002400240024020012d00000e06010203040500010b20024181ca003b01082002200141216a3602042002200141016a3602000c050b410110322201450d062000428180808010370204200020013602000c050b2001410c6a22032802002204412020044120491b220541016a2204102c2206450d0520062004200410eb082106200328020022032005490d06200641016a200141046a280200200510e9081a2000200436020820002004360204200020063602000c040b20024181c4003b01082002200141216a3602042002200141016a3602000c020b20024181c6003b01082002200141216a3602042002200141016a3602000c010b20024181c8003b01082002200141216a3602042002200141016a3602000b20002002108b010b200241106a24000f0b1036000b2005200341b8aac000104d000bef06010c7f230041206b22022400200141096a2d0000210320012802042104200128020021050240024002400240024002400240024002400240024020012d000822064102470d0002402005450d00200420056b21070c020b2000420137020041002107200041086a22084100360200410121010c030b20064101462101024020050d00200121070c020b2001200420056b6a220720014f0d002000420137020041002107200041086a2208410036020041012101200641014621090c040b2007417f4c0d080b0240024020070d00410121010c010b2007102c2201450d050b20002001360200200041086a22084100360200200041046a200736020020064102470d010b200420056b410020051b21090c020b200641014621092005450d010b02402009200420056b6a220a2009490d00200a21090c010b200041046a210b410021090340024002400240200641ff01714102470d002003210a0c010b4100210a2006410171450d00410021060c010b2005450d0520052004460d0520052d0000210341022106200541016a21050b0240024020092007470d00200720076b417f200420056b410020051b220c41016a220d200d200c491b220c4f0d002007200c6a220c2007490d072007410174220d200c200d200c4b1b220c4108200c41084b1b210c0240024020070d00200241003602100c010b2002410136021820022007360214200220013602100b2002200c4101200241106a107d2002280208210720022802004101460d01200020022802042201360200200b20073602000b200120096a20033a00002008200941016a2209360200200a21030c010b0b2007450d040c010b200720094f0d012007410174220a2009200a20094b1b22094108200941084b1b21090240024020070d00200241003602100c010b200241106a41086a410136020020022007360214200220013602100b200220094101200241106a107d200241086a2802002107024020022802004101460d00200020022802042201360200200041046a20073602000c020b2007450d030b1036000b410021070240024020060e03010001000b200120033a000041012107200141016a21010b02402005450d0020042005460d00200720056b21070340200120052d00003a0000200141016a21012004200541016a2205470d000b200420076a21070b200820073602000b200241206a24000f0b1038000bc10201067f230041206b2202240041002103024002400240200141016a2204200028020422054d0d000240200041146a22062802002201200041106a280200470d00200141016a22032001490d03200141017422072003200720034b1b22034104200341044b1b220341ffffffff03712003464102742107200341027421030240024020010d00200241003602100c010b200241186a4104360200200220014102743602142002200028020c3602100b200220032007200241106a107d200241086a280200210320022802004101460d022000200228020436020c200041106a20034102763602000b200028020c220341046a2003200141027410ea081a2003200420056b36020020002004360204410121032006200141016a3602002000200028020041016a3602000b200241206a240020030f0b2003450d001036000b1038000bc60101097f200141146a28020022034102742104200128020c210520012802002106417f210720012802042208210902400340024020040d00410021040c020b200741016a21072004417c6a21042005280200210a200920024b210b200541046a21052009200a6b2109200b0d000b200620036b2205210402402003200b20076a2209490d00200141146a20093602002006200b6b20076b21040b20002005360204200041086a2004360200410121040b20002004360200200120082002200820024b1b3602040b810201057f0240024020012802042202450d002001280200210303402002418c016a210420022f018a012105410021010240034020052001460d01418fafc0002004410810ec082206450d04200141016a2101200441086a21042006417f4a0d000b2001417f6a21050b2003450d012003417f6a2103200220054102746a41e4016a28020021020c000b0b200041003602042000410c6a4128360200200041086a4197afc000360200200041013602000f0b024020022001410c6c6a2201410c6a2802004108490d00200041086a200141046a280200290000370300200041003602000f0b20004201370300200041086a41bfafc000ad42808080809005843702000b1c00200128021841a2b3c000410b2001411c6a28020028020c1100000b1c00200128021841adb3c00041052001411c6a28020028020c1100000b800201047f230041206b2202240002400240200041046a280200200041086a2802002203460d00200028020021040c010b0240200341016a22042003490d00200341017422052004200520044b1b22044108200441084b1b21040240024020030d00200241003602100c010b200241106a41086a410136020020022003360214200220002802003602100b200220044101200241106a107d200241086a2802002103024020022802004101460d00200020022802042204360200200041046a2003360200200041086a28020021030c020b2003450d001036000b1038000b200420036a20013a0000200041086a2200200028020041016a360200200241206a24000bc004010b7f23004180016b2203240002400240024002400240200220012802044105762204200420024b1b22054105742204417f4c0d000240024020050d00410121060c010b2004102c2206450d030b024020020d00410021020c040b200341c8006a41017221044100210741002108410021090340200341c8006a2001109301200341286a41086a220a200441086a290000370300200341286a41106a220b200441106a290000370300200341286a41186a220c200441186a2900003703002003200429000037032820032d00484101460d02200341086a41186a220d200c290300370300200341086a41106a220c200b290300370300200341086a41086a220b200a290300370300200320032903283703080240024020092005470d002007200941016a220a2007200a4b1b220a4104200a41044b1b220a41ffffff3f71200a462105200a410574210a0240024020090d00200341003602480c010b200341013602502003200836024c200320063602480b200341f0006a200a2005200341c8006a107d2003280278210a20032802704101460d0120032802742106200a41057621050b200620086a220a2003290308370000200a41186a200d290300370000200a41106a200c290300370000200a41086a200b290300370000200741026a2107200841206a21082002200941016a2209460d050c010b0b200a0d020b1038000b20004100360200200541ffffff3f71450d022006102e0c020b1036000b2000200536020420002006360200200041086a20023602000b20034180016a24000bfd0202047f047e230041b0016b2202240041002103200241003a00682001280204417f6a210402400240024003402004417f460d01200241c8006a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00682004417f6a21042005210320054120470d000b200241f0006a41086a2204200241c8006a41086a290300370300200241f0006a41106a2201200241c8006a41106a290300370300200241f0006a41186a2203200241c8006a41186a29030037030020022002290348370370200541ff0171411f4d0d01200241286a41186a20032903002206370300200241086a41086a20042903002207370300200241086a41106a20012903002208370300200241086a41186a2006370300200220022903702209370308200041196a2006370000200041116a2008370000200041096a200737000020002009370001410021040c020b200341ff0171450d00200241003a00680b410121040b200020043a0000200241b0016a24000bcc0403027f017e077f230041a0076b2203240002400240024002400240024002402002200128020028020441b0026e2204200420024b1bad42b0027e2205422088a70d002005a72204417f4c0d000240024020040d00410821060c010b2004102c2206450d040b2001200128020441016a2207360204200441b0026e210802400240200720012802084b0d0020020d01410021020c070b200041003602000c030b200341e0046a41047221094100210a41002104410021070340200341e0046a200110950120032802e004210b200341b4026a200941ac0210e9081a200b411c460d02200341086a200341b4026a41ac0210e9081a0240024020072008470d00200a200741016a2208200a20084b1b22084104200841044b1bad42b0027e2205422088a74541037421082005a7210c0240024020070d00200341003602e0040c010b200341083602e804200320043602e404200320063602e0040b20034190076a200c2008200341e0046a107d20032802980721082003280290074101460d012003280294072106200841b0026e21080b200620046a220c200b360200200c41046a200341086a41ac0210e9081a200a41026a210a200441b0026a21042002200741016a2207460d060c010b0b20080d030b1038000b200041003602002007450d002006210703402007109601200741b0026a2107200441d07d6a22040d000b0b2008450d03200841b0026c450d032006102e0c030b1036000b200128020421070b2000200836020420002006360200200041086a200236020020012007417f6a3602040b200341a0076a24000b93e9030d057f017e037f027e027f077e0f7f027e017f027e017f017e0e7f230041c01a6b220224000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020020060e250102030405060708090a290b0c0d0e0f101112132929292914151629172e2d2929292c2b2a290b2000411c3602000c560b200128020022032802042204450d54200328020022052d0000210620032004417f6a3602042003200541016a36020002400240024002400240024002400240024002400240024020060e0a00010203040506070809600b2001280200220128020422034104490d5f20012802002205280000210420012003417c6a3602042001200541046a3602002004418194ebdc034f0d5f410121010c0a0b2002200110ad0120022802000d5e20012802002205280204220620022802042203490d5e2003417f4c0d560240024020030d00410121040c010b200310322204450d5c2001280200220528020421060b20062003490d5d20042005280200200310e9082101200528020422062003490d302005200620036b3602042005200528020020036a3602002001450d5e2003ad220742208620078421074102410b20011b21010c080b2001280200220128020422034108490d5d2001280200220429000021072001200341786a3602042001200441086a360200410321010c080b200241086a200110ad0120022802080d5c200128020022052802042206200228020c2203490d5c2003417f4c0d540240024020030d00410121040c010b200310322204450d5a2001280200220528020421060b20062003490d5b20042005280200200310e9082101200528020422062003490d262005200620036b3602042005200528020020036a3602002001450d5c2003ad220742208620078421074104410b20011b21010c060b200241106a200110ad0120022802100d5b20012802002205280204220620022802142203490d5b2003417f4c0d530240024020030d00410121040c010b200310322204450d592001280200220528020421060b20062003490d5a20042005280200200310e9082101200528020422062003490d242005200620036b3602042005200528020020036a3602002001450d5b2003ad220742208620078421074105410b20011b21010c050b200241c0156a200110fd0520022802c01522044102460d5a20022902c4152107410621010c040b200241286a200110ad0120022802280d59200228022c2206200128020028020441186e2203200320064b1bad42187e2207422088a70d512007a72203417f4c0d510240024020030d00410421040c010b2003102c2204450d570b2001200128020441016a2205360204200341186ead2107200520012802084b0d57024002402006450d000340200241206a200110ad0120022802200d5a20012802002205280204220820022802242203490d5a2003417f4c0d540240024020030d00410121090c010b200310322209450d5a2001280200220528020421080b0240024020082003490d0020092005280200200310e90821082005280204220a2003490d2f2005200a20036b3602042005200528020020036a3602002008450d5c200241186a200110ad012003ad220b422086200b84220ca7210d024020022802180d0020012802002205280204220a200228021c2203490d002003417f4c0d570240024020030d004101210e0c010b20031032220e450d5d20012802002205280204210a0b02400240200a2003490d00200e2005280200200310e908210a2005280204220e20034f0d012003200e41b8b2c0001056000b200e102e0c010b2005200e20036b3602042005200528020020036a360200200a0d020b200d450d5c0b2009102e0c5b0b02402007422088220ba722052007a7470d00200541016a22092005490d552005410174220e20092009200e491b22094104200941044b1bad42187e220b422088a7454102742109200ba7210e0240024020050d00200241003602c0150c010b200241043602c815200220043602c0152002200541186c3602c4150b200241e0076a200e2009200241c0156a107d20022802e807210920022802e0074101460d0320022802e40721042007422088220ba72105200941186ead21070b2004200541186c6a2205200d36020420052008360200200541146a2003ad220f422086200f84220f422088a73602002005410c6a200f422086200aad84370200200541086a200c422088a7360200200b422086200742ffffffff0f83844280808080107c21072006417f6a22060d000b200128020421050b20012005417f6a3602042004450d5a4107410b20041b21010c040b2009450d510c560b200241c0156a200110e80120022802c0152204450d5820022902c4152107410821010c020b200241306a200110ad0120022802300d5720012802002205280204220620022802342203490d572003417f4c0d4f0240024020030d00410121040c010b200310322204450d552001280200220528020421060b20062003490d5620042005280200200310e9082106200528020422082003490d1f2005200820036b3602042005200528020020036a3602002006450d572003ad2207422086200784210702402001280200220128020422054104490d0020012802002206280000210320012005417c6a3602042001200641046a360200410921010c030b2007a70d560c570b200241386a200110ad0120022802380d56200128020022052802042206200228023c2203490d562003417f4c0d4e0240024020030d00410121040c010b200310322204450d542001280200220528020421060b20062003490d5520042005280200200310e9082101200528020422062003490d1d2005200620036b3602042005200528020020036a3602002001450d562003ad22074220862007842107410a410b20011b21010b0b20004100360200200041186a2003360200200041106a20073702002000410c6a2004360200200041086a2001360200200041206a200241f0176a41900210e9081a0c550b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020002400240024002400240024002400240024020060e06000102030405090b2001280200220428020422054104490d0820042802002206280000210320042005417c6a3602042004200641046a360200200241f0176a200110fd0520022802f01722044102460d08200128020022062802042209450d08200241f8176a280200210820022802f417210a2006280200220d2d0000210520062009417f6a3602042006200d41016a3602002001200128020441016a2206360204200620012802084b0d08200241f0176a200110950120022802f0172109200241c0156a200241f0176a41047241ac0210e9081a2009411c460d08200241f0176a200241c0156a41ac0210e9081a41b002102c2206450d5920062009360200200641046a200241f0176a41ac0210e9081a20012001280204417f6a36020441012101420021070c050b2001280200220428020422054104490d0720042802002206280000210320042005417c6a3602042004200641046a3602002001280200220128020422054104490d0720012802002206280000210420012005417c6a3602042001200641046a3602004102210141002106420021070c040b200241c0006a200110ad0120022802400d0620012802002205280204220620022802442204490d062004417f4c0d520240024020040d00410121030c010b200410322203450d582001280200220528020421060b20062004490d0520032005280200200410e9082106200528020422082004490d2a2005200820046b3602042005200528020020046a3602002006450d062004ad2207422086200784220ba721042001280200220528020422064104490d042005280200220a280000210820052006417c6a3602042005200a41046a360200200241f0176a200110fd0520022802f01722064102460d042001280200220a2802042209450d0420022902f4172107200a280200220d2d00002105200a2009417f6a360204200a200d41016a3602002001200128020441016a220a360204200a20012802084b0d04200241f0176a200110950120022802f017210d200241c0156a200241f0176a41047241ac0210e9081a200d411c460d04200241f0176a200241c0156a41ac0210e9081a41b002102c2209450d57200b422088a7210a2009200d360200200941046a200241f0176a41ac0210e9081a20012001280204417f6a360204410321010c030b200241c8006a200110ad0120022802480d05200128020022052802042206200228024c2204490d052004417f4c0d510240024020040d00410121030c010b200410322203450d572001280200220528020421060b20062004490d0420032005280200200410e9082101200528020422062004490d1f2005200620046b3602042005200528020020046a3602002001450d052004ad22074220862007842207422088a7210a2007a721044104210141002106410021080c020b2001280200220428020422054104490d0420042802002206280000210320042005417c6a3602042004200641046a360200200241f0176a200110fd0520022802f01722044102460d04200128020022062802042208450d0420022902f41721072006280200220a2d0000210520062008417f6a3602042006200a41016a3602002001200128020441016a2206360204200620012802084b0d04200241f0176a200110950120022802f0172108200241c0156a200241f0176a41047241ac0210e9081a2008411c460d04200241f0176a200241c0156a41ac0210e9081a41b002102c2206450d5520062008360200200641046a200241f0176a41ac0210e9081a20012001280204417f6a3602042007422088a721082007a7210a41052101420021070c010b200241d0006a200110ad0120022802500d0320012802002205280204220620022802542204490d032004417f4c0d4f0240024020040d00410121030c010b200410322203450d552001280200220528020421060b20062004490d0220032005280200200410e9082106200528020422082004490d1c2005200820046b3602042005200528020020046a3602002006450d032004ad2207422086200784220ba721042001280200220528020422064104490d012005280200220a280000210820052006417c6a3602042005200a41046a360200200241f0176a200110fd0520022802f01722064102460d012001280200220a2802042209450d0120022902f4172107200a280200220d2d00002105200a2009417f6a360204200a200d41016a3602002001200128020441016a220a360204200a20012802084b0d01200241f0176a200110950120022802f017210d200241c0156a200241f0176a41047241ac0210e9081a200d411c460d01200241f0176a200241c0156a41ac0210e9081a41b002102c2209450d54200b422088a7210a2009200d360200200941046a200241f0176a41ac0210e9081a20012001280204417f6a360204410621010b200020053a0005200020013a000420004101360200200041246a20093602002000411c6a2007370200200041186a2006360200200041146a2008360200200041106a200a3602002000410c6a2004360200200041086a2003360200200041286a200241e0076a41880210e9081a0c570b2004450d010b2003102e0b2000411c3602000c540b200128020022032802042204450d4e200328020022052d0000210620032004417f6a3602042003200541016a3602000240024002400240024020060e03000103530b200241f0176a2001109802200241fc176a2802002204450d5220024184186a280200210320024180186a280200210520022802f817210920022903f0172107200241e0076a20024188186a41e40010e9081a200241f4186a2802002108200241f0176a4180016a2802002106200241ec186a280200210a200241c0156a200241f8186a41800110e9081a200241f0176a200110f601024020022802f417450d00200241fc176a290200210c20022902f417210b20022802f0172101200241a80e6a200241e0076a41e40010e9081a200241d8116a200241c0156a41800110e9081a4101210d0c040b02402003450d00200341246c21032004210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012003415c6a22030d000b0b02402005450d00200541246c450d002004102e0b02402008450d00200841246c2103200a210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012003415c6a22030d000b0b2006450d52200641246c0d010c520b200241f0176a2001109802200241fc176a2802002204450d5120024184186a280200210320024180186a280200210520022802f817210920022903f0172107200241e0076a20024188186a41e40010e9081a200241f4186a2802002108200241f0176a4180016a2802002106200241ec186a280200210a200241c0156a200241f8186a41800110e9081a200241f0176a200110f601024020022802f417450d00200241fc176a290200210c20022902f417210b20022802f0172101200241a80e6a200241e0076a41e40010e9081a200241d8116a200241c0156a41800110e9081a4102210d0c030b02402003450d00200341246c21032004210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012003415c6a22030d000b0b02402005450d00200541246c450d002004102e0b02402008450d00200841246c2103200a210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012003415c6a22030d000b0b2006450d51200641246c450d510b200a102e0c500b200128020022032802042204450d4f200328020022052d0000210620032004417f6a3602042003200541016a36020020064101470d4f2001280200220328020422044108490d4f20032802002205290000210b2003200441786a3602042003200541086a3602002001280200220328020422044108490d4f20032802002205290000210c2003200441786a3602042003200541086a360200200128020022012802042203450d4f200128020022042d0000210520012003417f6a3602042001200441016a3602004200210702400240024020050e03020001520b420121070c010b420221070b200241a80e6a200241d8146a41e40010e9081a200241d8116a200241e0076a41800110e9081a4103210d0b200241d00a6a200241a80e6a41e40010e9081a20024198106a200241d8116a41800110e9081a200041186a200c370200200041106a200b370200200041346a2003360200200041306a20053602002000412c6a2004360200200041286a2009360200200041206a20073702002000410c6a2001360200200041086a200d36020020004102360200200041386a200241d00a6a41e40010e9081a200041a4016a2008360200200041a0016a20063602002000419c016a200a360200200041a8016a20024198106a41800110e9081a0c530b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020020060d00200241d8006a200110da042002290358a70d002002290360210720004103360200200041086a2007370300200041106a200241f0176a41a00210e9081a0c530b2000411c3602000c520b200128020022032802042204450d49200328020022052d0000210620032004417f6a3602042003200541016a3602000240024002400240024020060e0500010203044e0b2001280200220128020422044104490d4d20012802002205280000210320012004417c6a3602042001200541046a36020042002107410121084200210b0c4f0b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2203200241c0156a410f6a290000370000200241e0076a41086a2204200241c0156a41086a290300370300200241d8116a410f6a22052003290000370000200241d8116a41086a2203200429030037030020024198106a41086a2204200329030037030020024198106a410f6a22032005290000370000200220022903c01537039810200241df156a310000210b20022900d7152107200241f8136a410f6a22052003290000370000200241f8136a41086a200429030037030020022002290398103703f8132001280200220128020422084104490d4d2005280000210a200228008b14210920022900ff13210c20022800fb13210320022f00f913210420022d00f81321052001280200220d280000210620012008417c6a3602042001200d41046a36020020022007421888a73b00eb1420022007421088a73a00ea1420022007a73b01e81420022009ad422086200aad843703e01420022007422888200b42188684a722013600ed142001411076210a2002200c3703d814200c421888a7210d200c420888a72109200241d8146a410f6a290000210b20022900df142107200ca7210e410221080c4f0b200441ff0171450d4c200241003a00e0150c4c0b2001280200220128020422044104490d4b20012802002205280000210320012004417c6a3602042001200541046a36020042002107410321080c4c0b41002104200241003a00e0150240024002400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2203200241c0156a410f6a290000370000200241e0076a41086a2204200241c0156a41086a290300370300200241d8116a410f6a22052003290000370000200241d8116a41086a2203200429030037030020024198106a41086a2204200329030037030020024198106a410f6a22032005290000370000200220022903c01537039810200241df156a310000210b20022900d7152107200241f8136a410f6a22052003290000370000200241f8136a41086a200429030037030020022002290398103703f81320012802002208280204220a4104490d4d2005280000210d200228008b14210e20022900ff13210c20022800fb13210320022f00f913210420022d00f81321052008280200220928000021062008200a417c6a3602042008200941046a360200200128020022012802042208450d4d2001280200220a2d0000210920012008417f6a3602042001200a41016a3602004100210120090e0202014d0b200441ff0171450d4c200241003a00e0150c4c0b410121010b2002200e3602f4092002200d3602f009200220073703f8092007423888200b42ff018342088684a7210a2002200c3703e809200c421888a7210d200c420888a72109200241f7096a290000210b20022900ef092107200ca7210e410421080c4c0b2001280200220128020422044104490d4920012802002205280000210320012004417c6a3602042001200541046a36020042002107410521080c4a0b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a360200024002400240024002400240024020060e0400010203070b200241c0156a200110eb0120022d00c0154105460d06200241c0156a41106a290300210b200241c8156a2903002107200241e0156a2802002103200241d8156a290300210c20022802c415210520022802c0152104200241e8006a200110820202402002290368a70d00200241e8006a41106a29030021102005ad4220862004ad8421112002290370220f422088a72105200fa72104410121010c040b200441ff01714102470d062007a7450d062005102e0c060b200241c0156a200110eb0120022d00c0154105460d05200241c0156a41106a290300210b200241e0156a2802002103200241d8156a290300210c200241c8156a290300210720022802c415210520022802c015210420024198016a2001108202200229039801a70d0420024198016a41106a290300211020022903a001210f20024180016a2001108202200229038001a70d0420024180016a41106a290300211220022903880121132005ad4220862004ad842111200f422088a72105200fa72104410221010c020b200241c0156a200110eb0120022d00c0154105460d04200241c0156a41106a290300210b200241e0156a22042802002103200241d8156a290300210c200241c0156a41086a2205290300210720022802c415210820022802c0152106200241c0156a200110eb01024020022d00c0154105460d00200241d8116a41086a200241c0156a41146a290200370300200241d8116a41106a200241dc156a2802003602002002200241c0156a410c6a2902003703d8112005280200210a2004350200210f20022802c415210520022802c0152104200241b0016a2001108202024020022903b001a70d00200241b0016a41106a290300211420022903b8012115200241e0076a41146a200241d8116a41106a280200360200200241e0076a410c6a200241e0116a290300370200200220022903d8113702e4072002200a3602e0072008ad4220862006ad842111200241e0076a41106a290300211220022903e007211020022903e8072113410321010c030b200441ff01714102470d00200a450d002005102e0b200641ff01714102470d042007a7450d042008102e0c040b200241c0156a200110eb0120022d00c0154105460d03200241c0156a41106a290300210b200241c8156a2903002107200241e0156a2802002103200241d8156a290300210c20022802c415210520022802c0152104200241c8016a200110820220022903c801a70d01200241c8016a41106a29030021102005ad4220862004ad84211120022903d001220f422088a72105200fa721044200210f4104210142002113420021120b20004105360200200041e0006a2014370200200041d8006a2015370200200041c8006a2012370200200041c0006a2013370200200041386a20103702002000411c6a200b370200200041146a2007370200200041d0006a200f3702002000412c6a2003360200200041246a200c3702002000410c6a2011370200200041086a2001360200200041306a2005ad4220862004ad84370200200041e8006a200241f0176a41c80110e9081a0c530b200441ff01714102470d012007a7450d012005102e0c010b200441ff01714102470d002007a7450d002005102e0b2000411c3602000c500b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020020060d00200241e0016a200110ad0120022802e0010d0020022802e4012205200128020028020441f0006e2203200320054b1bad42f0007e2207422088a70d472007a72203417f4c0d470240024020030d00410421060c010b2003102c2206450d4d0b2001200128020441016a2204360204200341f0006ead21070240200420012802084b0d00024002402005450d00200241c0156a41086a21090340200241c0156a200110990220022802c415210420022802c0152108200241e0076a200941e80010e9081a2004450d03200241d8116a200241e0076a41e80010e9081a02402007422088220ba722032007a7470d00200341016a220a2003490d4c2003410174220d200a200a200d491b220a4104200a41044b1bad42f0007e220b422088a745410274210a200ba7210d0240024020030d00200241003602c0150c010b200241043602c815200220063602c0152002200341f0006c3602c4150b20024198106a200d200a200241c0156a107d20022802a010210a2002280298104101460d03200228029c1021062007422088220ba72103200a41f0006ead21070b2006200341f0006c6a2203200436020420032008360200200341086a200241d8116a41e80010e9081a200b422086200742ffffffff0f83844280808080107c21072005417f6a22050d000b200128020421040b20012004417f6a3602042006450d022000200636020420004106360200200041086a2007370200200041106a200241f0176a41a00210e9081a0c520b200a0d4d0c480b02402007422088a72201450d002006200141f0006c6a2105200621010340024020012204410c6a2802002203450d0020042802042101200341246c210303400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012003415c6a22030d000b0b200441f0006a21010240200441086a2802002203450d00200341246c450d002004280204102e0b20012005470d000b0b2007a72201450d00200141f0006c450d002006102e0b2000411c3602000c4f0b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a360200410021164100210e410721090240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020060e170001020304055c060708090a0b0c0d0e0f101112131415170b200241c0156a200110eb0120022d00c0154105460d16200241d8116a41086a200241d4156a290200370300200241d8116a41106a200241dc156a2902003703002002200241cc156a2902003703d811200241c0156a41086a280200210820022802c415210a20022802c0152105200241e8016a2001108202024002400240024020022903e801a70d00200128020022032802042204450d00200241e8016a41106a290300210c20022903f001210b200328020022062d0000210e20032004417f6a360204410121092003200641016a36020041002104024002400240200e0e050600010204030b410121040c050b410221040c030b41002104200241003a00e01502400340200128020022032802042206450d01200241c0156a20046a2003280200220d2d00003a000020032006417f6a3602042003200d41016a3602002002200441016a22033a00e0152003210420034120470d000b200241a80e6a410f6a2201200241c0156a410f6a290000370000200241a80e6a41086a2203200241c0156a41086a290300370300200241d8146a410f6a22042001290000370000200241d8146a41086a22012003290300370300200241d00a6a41086a22032001290300370300200241d00a6a410f6a22012004290000370000200220022903c0153703d00a200241c0156a411f6a310000210720022900d715210f200241f8136a410f6a22042001290000370000200241f8136a41086a2003290300370300200220022903d00a3703f8132004290000211020022800fb13210120022900ff13211120022d00f8132103200220022f00f9133b00e107200220033a00e007200241e0076a411f6a20073c0000200241e0076a410f6a20103700002002200f3700f707200220113700e707200220013600e3074103210420022f01e007210d0c040b200441ff0171450d00200241003a00e0150b200541ff01714102470d192008450d19200a102e0c190b410421040b0b20024198106a41106a200241d8116a41106a29030037030020024198106a41086a200241d8116a41086a290300221137030020022901e607220f422088200241ee076a2901002210422086842107200fa7220e41807e7121162010422088210f20022d00ff07211720022800fb07211820022f00f907211920022d00f807211a20022f01f607211b20022801e207210320022903d811211020022802ac10211c20022f01aa10211d20022d00a910211e20022800a510211f20022f00a310212020022d00a21021212011a721220c5b0b20024180026a2001108202200229038002a70d15200229038802220b42208820024190026a290300220c422086842107200c422088210f200ba7220e41807e712116410221090c580b20024198026a2001108202200229039802a70d1420022903a002220b422088200241a8026a290300220c422086842107200c422088210f200ba7220e41807e712116410321090c570b410421092001280200220128020422044104490d1320012802002205280000210320012004417c6a3602042001200541046a360200420021070c550b200241b0026a200110ad0120022802b0020d1220022802b40221032002418094ebdc033602c415200220033602c015200128020022012802042204450d12200241c0156a2003418094ebdc034b4102746a2802002103200128020022052d0000210620012004417f6a3602042001200541016a360200410521094100210e024020060e025800130b4101210e0c550b200241c0156a200110ea0120022802c0152203450d1120022802c415220e41807e712116200241c8156a35020021074200210f410621090c540b200128020022032802042204450d0f200328020022052d0000210620032004417f6a3602042003200541016a36020002400240024002400240024020060e050001020304050b200241003a00d8140c590b200241013a00d8140c580b200241023a00d8140c570b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241d8116a410f6a2201200241c0156a410f6a290000370000200241d8116a41086a2203200241c0156a41086a29030037030020024198106a410f6a2204200129000037000020024198106a41086a22012003290300370300200241a80e6a41086a22032001290300370300200241a80e6a410f6a22012004290000370000200220022903c0153703a80e200241df156a310000211020022900d715210b200241f8136a410f6a22042001290000370000200241f8136a41086a2003290300370300200220022903a80e3703f8132004290000210c20022900ff13210720022d00f813210120022f00f9132103200220022800fb133602dc14200220033b01da14200220013a00d914200241033a00d8140c570b0240200441ff0171450d00200241003a00e0150b200241053a00d8140c120b200241043a00d8140c550b200241053a00d8140c100b200241c0156a200110eb0120022d00c0154105460d0f20022902c415220c422088200241cc156a290200220f422086842107200241d4156a290200220b422888200241dc156a31000042188684a72118200ca7220e41807e712116200f422088210f200b421888a72119200b421088a7211a200241e0156a2802002105200241de156a2f01002123200241dd156a2d0000211720022802c0152103200ba7211b410921090c520b200241b8026a200110ad0120022802b8020d0e20022802bc02210342002107410a21090c500b200241c0026a200110ad0120022802c0020d0d20022802c402210342002107410b21090c4f0b200128020022012802042203450d0c200128020022052d0000210420012003417f6a3602042001200541016a360200200441e5004f0d0c42002107410c21094100210e4200210f0c510b410d21094100210e0c4e0b410e21094100210e0c4d0b200241c0156a200110e40120022802c0152203450d0920022802c415220e41807e712116200241c8156a35020021074200210f410f21090c4c0b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2203200241c0156a410f6a290000370000200241e0076a41086a2204200241c0156a41086a290300370300200241d8116a410f6a22052003290000370000200241d8116a41086a2203200429030037030020024198106a41086a2204200329030037030020024198106a410f6a22032005290000370000200220022903c01537039810200241df156a310000210720022900d715210b200241f8136a410f6a22052003290000370000200241f8136a41086a200429030037030020022002290398103703f81320022800fb13210320022f00f913210d20022d00f8132104200241d8146a41086a22062005290000370300200220022900ff133703d814200241f0146a20073c00002002200b3703e8142001280200220128020422084104490d092001280200220a280000210520012008417c6a3602042001200a41046a36020020022903d814220b4220882006290300220c422086842107200c422088210f200ba7220e41807e71211620022800ed14211820022f00eb14211920022d00ea14211a20022f01e814211b411021090c4e0b200441ff0171450d08200241003a00e0150c080b411121094100210e0c4a0b2001280200220428020422054104490d0620042802002206280000210320042005417c6a3602042004200641046a360200200241c8026a200110ad0120022802c8020d0620022802cc02220441ffffffff03712004470d06200441027422052001280200220628020422084b0d062005417f4c0d4c0240024020050d004104210e0c010b20051032220e450d522001280200220628020421080b02400240200820044102742201490d00200e2006280200200110e90821082006280204220a20014f0d012001200a41b8b2c0001056000b2005450d07200e102e0c070b2006200a20016b3602042006200628020020016a3602002008450d062004ad4220862005410276ad842107200841807e7121164200210f411221090c490b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2203200241c0156a410f6a290000370000200241e0076a41086a2204200241c0156a41086a290300370300200241d8116a410f6a22052003290000370000200241d8116a41086a2203200429030037030020024198106a41086a2204200329030037030020024198106a410f6a22032005290000370000200220022903c01537039810200241df156a310000210b20022900d7152107200241f8136a410f6a22052003290000370000200241f8136a41086a200429030037030020022002290398103703f8132001280200220128020422084104490d062007422888200b42188684a721182005350000210c200228008b14210620022900ff13210b20022800fb13210320022f00f913210d20022d00f81321042007421888a721192007421088a7211a2007a7211b2001280200220a280000210520012008417c6a3602042001200a41046a3602002006411076ad423086200641087641ff0171ad42288684200c2006ad4220864280808080f01f8384842207422088210f200b4220882007422086842107200ba7220e41807e712116411321090c4b0b200441ff0171450d05200241003a00e0150c050b200241d0026a200110820220022903d002a70d0420022903d802220b422088200241e0026a290300220c422086842107200c422088210f200ba7220e41807e712116411421090c470b200241f0026a200110ad0120022802f0020d0320022802f4022103200241e8026a200110ad0120022802e8020d0320022802ec02220e41807e712116411521090c460b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2203200241c0156a410f6a290000370000200241e0076a41086a2204200241c0156a41086a290300370300200241d8116a410f6a22052003290000370000200241d8116a41086a2203200429030037030020024198106a41086a2204200329030037030020024198106a410f6a22032005290000370000200220022903c01537039810200241df156a310000210c20022900d715210b200241f8136a410f6a22052003290000370000200241f8136a41086a200429030037030020022002290398103703f8132001280200220128020422064104490d0320052800002108200228008b14210a20022900ff13210f20022800fb13210320022f00f913210d20022d00f813210420012802002209280000210520012006417c6a3602042001200941046a3602002002200a3602f409200220083602f009200f42208820022903f0092210422086842107200b422888200c42188684a72118200fa7220e41807e7121162010422088210f200b421888a72119200b421088a7211a200ba7211b411621090c480b200441ff0171450d02200241003a00e0150c020b200241c0156a200110ea0120022802c0152203450d0120022902c415220b4220882107200ba7220e41807e7121164200210f411721090c440b200241053a00d8140b2000411c3602000c4e0b0240200128020022012802042203450d0020012003417f6a3602042001200128020041016a3602000b2000411c3602000c4d0b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a3602004100212402400240024020060e020001030b41002104200241003a00e015024002400240024002400240024002400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241d8146a410f6a2203200241c0156a410f6a290000370000200241d8146a41086a2204200241c0156a41086a290300370300200241e8096a410f6a22052003290000370000200241e8096a41086a22032004290300370300200241c80d6a41086a22042003290300370300200241c80d6a410f6a22032005290000370000200220022903c0153703c80d200241df156a310000210c20022900d715210b200241f8136a410f6a22052003290000370000200241f8136a41086a2004290300370300200220022903c80d3703f8132005290000210720022800fb13210920022f00f913210a20022d00f813210820022900ff13211241002104200241003a00e015200b422888200c42188684a721212012428080808070832125200b421888a72122200b421088a7210e200ba7210d0340200128020022032802042205450d02200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e8096a410f6a2203200241c0156a410f6a290000370000200241e8096a41086a2204200241c0156a41086a290300370300200241c80d6a410f6a22052003290000370000200241c80d6a41086a22032004290300370300200241a00d6a41086a22042003290300370300200241a00d6a410f6a22032005290000370000200220022903c0153703a00d200241df156a310000210b20022900d715210c200241f8136a410f6a22052003290000370000200241f8136a41086a2004290300370300200220022903a00d3703f8132005290000210f20022800fb13211e20022f00f913211f20022d00f813212020022900ff132110200241f0146a200b3c00002002200c3703e8142002200f3703e014200220103703d81441002104200241003a00e0150340200128020022032802042205450d03200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e8096a410f6a2203200241c0156a410f6a290000370000200241e8096a41086a2204200241c0156a41086a290300370300200241c80d6a410f6a22052003290000370000200241c80d6a41086a22032004290300370300200241a00d6a41086a22042003290300370300200241a00d6a410f6a22032005290000370000200220022903c0153703a00d200241df156a310000211020022900d715210f200241f8136a410f6a22052003290000370000200241f8136a41086a2004290300370300200220022903a00d3703f8132005290000210c20022900ff13210b20022800fb13211720022f00f913211c20022d00f813211d41002104200241003a00e015200f422888201042188684a72118200f421888a72119200f421088a7211b200fa721230340200128020022032802042205450d04200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e8096a410f6a2203200241c0156a410f6a290000370000200241e8096a41086a2204200241c0156a41086a290300370300200241c80d6a410f6a22052003290000370000200241c80d6a41086a22032004290300370300200241a00d6a41086a22042003290300370300200241a00d6a410f6a22032005290000370000200220022903c0153703a00d200241df156a310000211120022900d7152110200241f8136a410f6a22052003290000370000200241f8136a41086a2004290300370300200220022903a00d3703f8132005350000212620022900ff13210f20022800fb13210520022f00f913210420022d00f8132103200228008b1421064100211a200241003a00e015200641087621272006ad42208621282006411076ad21290340200128020022062802042216450d05200241c0156a201a6a2006280200222a2d00003a000020062016417f6a3602042006202a41016a3602002002201a41016a22063a00e0152006211a20064120470d000b200241c80d6a410f6a2206200241c0156a410f6a290000370000200241c80d6a41086a221a200241c0156a41086a290300370300200241a00d6a410f6a22162006290000370000200241a00d6a41086a2206201a290300370300200241e80c6a41086a221a2006290300370300200241e80c6a410f6a22062016290000370000200220022903c0153703e80c200241df156a310000211520022900d7152114200241f8136a410f6a22162006290000370000200241f8136a41086a201a290300370300200220022903e80c3703f8132016290000211320022800fb13212a20022f00f913211620022d00f813211a20022900ff13212b200241800a6a20153c0000200220143703f809200220133703f0092002202b3703e8094100212c200241003a00e015034020012802002206280204222d450d06200241c0156a202c6a2006280200222e2d00003a00002006202d417f6a3602042006202e41016a3602002002202c41016a22063a00e0152006212c20064120470d000b200241c80d6a410f6a2206200241c0156a410f6a290000370000200241c80d6a41086a222c200241c0156a41086a290300370300200241a00d6a410f6a222d2006290000370000200241a00d6a41086a2206202c290300370300200241e80c6a41086a222c2006290300370300200241e80c6a410f6a2206202d290000370000200220022903c0153703e80c200241df156a310000211320022900d7152114200241f8136a410f6a222d2006290000370000200241f8136a41086a202c290300370300200220022903e80c3703f813202d280000212f200228008b14213020022900ff13211520022800fb13212e20022f00f913212d20022d00f813212c200241e0076a41186a2206200241d8146a41186a2d00003a0000200241e0076a41106a2224200241d8146a41106a290300370300200241e0076a41086a2231200241d8146a41086a290300370300200220022903d8143703e007200241d8116a41186a2232200241e8096a41186a2d00003a0000200241d8116a41106a2233200241e8096a41106a290300370300200241d8116a41086a2234200241e8096a41086a290300370300200220022903e8093703d81120024198106a41186a20062d00003a000020024198106a41106a202429030037030020024198106a41086a2031290300370300200220022903e00737039810200241a80e6a41186a20322d00003a0000200241a80e6a41106a2033290300370300200241a80e6a41086a2034290300370300200220022903d8113703a80e200241f8026a200110ad0120022802f8020d0a20012802002231280204223220022802fc022206490d0a2006417f4c0d4e20060d06410121240c070b200441ff0171450d09200241003a00e0150c090b200441ff0171450d08200241003a00e0150c080b200441ff0171450d07200241003a00e0150c070b200441ff0171450d06200241003a00e0150c060b201a41ff0171450d05200241003a00e0150c050b202c41ff0171450d04200241003a00e0150c040b200610322224450d4c2001280200223128020421320b20322006490d0120242031280200200610e9082101203128020422322006490d1d2031203220066b3602042031203128020020066a3602002001450d022029423086202741ff0171ad4228868420284280808080f01f832026848421262025201242ffffffff0f838421252006ad22124220862012842112200241d00a6a41186a20024198106a41186a2d00003a0000200241d00a6a41106a20024198106a41106a290300370300200241d00a6a41086a20024198106a41086a29030037030020024198136a41086a200241a80e6a41086a29030037030020024198136a41106a200241a80e6a41106a29030037030020024198136a41186a200241a80e6a41186a2d00003a000020022002290398103703d00a200220022903a80e370398130b200241e80f6a41186a2201200241d00a6a41186a2d00003a0000200241e80f6a41106a2206200241d00a6a41106a290300370300200241e80f6a41086a2227200241d00a6a41086a290300370300200241f80d6a41086a223120024198136a41086a290300370300200241f80d6a41106a223220024198136a41106a290300370300200241f80d6a41186a223320024198136a41186a2d00003a0000200220022903d00a3703e80f20022002290398133703f80d2000411f6a2007370000200041176a2025370000200041336a201e360000200041316a201f3b0000200041306a20203a00002000412c6a20213602002000412a6a20223b01002000200e3a0029200041276a200d3b0000200041136a2009360000200041116a200a3b0000200041106a20083a0000200041086a20123702002000202436020420004109360200200020022903e80f3700372000413f6a2027290300370000200041c7006a2006290300370000200041cf006a20012d00003a00002000418f016a20113c000020004187016a2010370000200041ff006a2026370000200041f7006a200f370000200041df006a200c370000200041d7006a200b37000020004193016a202a36000020004191016a20163b000020004190016a201a3a0000200041f3006a2005360000200041f1006a20043b0000200041f0006a20033a0000200041ec006a2018360200200041ea006a20193b01002000201b3a0069200041e7006a20233b0000200041d3006a2017360000200041d1006a201c3b0000200041d0006a201d3a0000200041b3016a202e360000200041b7016a2015370000200041bf016a202f360000200041c3016a2030360000200041cf016a20133c0000200041c7016a2014370000200041b1016a202d3b0000200041b0016a202c3a0000200041af016a20332d00003a0000200041a7016a20322903003700002000419f016a2031290300370000200020022903f80d37009701200041d0016a200241f0176a41e00010e9081a0c4e0b2024102e0b2000411c3602000c4c0b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a360200024002400240024020060e03000102040b200241f0176a200110cb0620022903f81722074202510d0320022802fc17210320022802f417210420022802f0172105200241e0076a20024180186a41e40010e9081a200241e8186a280200210620022802ec18210820022802e418210a200241c0156a200241f0176a4180016a41800110e9081a200241f0176a200110f60120022802f417450d032007a72101200241fc176a290200210b20022802f017210920022902f417210c200241d00a6a200241e0076a41e40010e9081a200241d8116a200241c0156a41800110e9081a200c422088200b422086842107200b422088210b200ca7210d4101210e0c020b200241f0176a200110cb0620022903f81722074202510d0220022802fc17210320022802f417210420022802f0172105200241a80e6a20024180186a41e40010e9081a200241e8186a280200210620022802ec18210820022802e418210a200241c0156a200241f0176a4180016a41800110e9081a200241f0176a200110f60120022802f417450d022007a72101200241fc176a290200210b20022802f017210920022902f417210c200241d8146a200241a80e6a41e40010e9081a200241e0076a200241c0156a41800110e9081a200241d00a6a200241d8146a41e40010e9081a200241d8116a200241e0076a41800110e9081a200c422088200b422086842107200b422088210b200ca7210d4102210e0c010b2001280200220328020422044104490d0120032802002205280000210920032004417c6a3602042003200541046a3602002001280200220128020422034104490d0120012802002204280000210d20012003417c6a3602042001200441046a360200200241d00a6a200241c0156a41e40010e9081a200241d8116a200241f0176a41800110e9081a4103210e0b200241e8096a200241d00a6a41e40010e9081a20024198106a200241d8116a41800110e9081a2000411c6a200b3e0200200041146a20073702002000412c6a2003360200200041286a2001360200200041246a2004360200200041206a2005360200200041106a200d3602002000410c6a2009360200200041086a200e3602002000410a360200200041306a200241e8096a41e40010e9081a2000419c016a200836020020004198016a200636020020004194016a200a360200200041a0016a20024198106a41800110e9081a200041a8026a20024198136a41086a290300370300200041a0026a2002290398133703000c4c0b2000411c3602000c4b0b200128020022032802042204450d3b200328020022052d0000210620032004417f6a3602042003200541016a36020020060d3b2001280200220328020422044104490d3b20032802002205280000210620032004417c6a3602042003200541046a36020020024190036a200110ad012002280290030d3b2001280200220428020422052002280294032203490d3b2003417f4c0d410240024020030d00410121080c010b200310322208450d472001280200220428020421050b0240024020052003490d0020082004280200200310e90821052004280204220820034f0d012003200841b8b2c0001056000b2008102e0c3c0b2004200820036b3602042004200428020020036a3602002005450d3b2003ad2207422086200784210b20024188036a200110ad012002280288030d3a200228028c0322082001280200280204410c6e2203200320084b1bad420c7e2207422088a70d412007a72203417f4c0d410240024020030d004104210a0c010b2003102c220a450d470b2001200128020441016a22043602042003410c6ead2107200420012802084b0d3902402008450d00034020024180036a200110ad012002280280030d3b2001280200220428020422092002280284032203490d3b2003417f4c0d430240024020030d004101210d0c010b20031032220d450d492001280200220428020421090b20092003490d3a200d2004280200200310e90821092004280204220d2003490d192004200d20036b3602042004200428020020036a3602002009450d3b02402007422088220ca722042007a7470d00200441016a220d2004490d442004410174220e200d200d200e491b220d4104200d41044b1bad420c7e220c422088a745410274210d200ca7210e0240024020040d00200241003602e0070c010b200241043602e8072002200a3602e00720022004410c6c3602e4070b200241d8116a200e200d200241e0076a107d20022802e011210d20022802d8114101460d3f20022802dc11210a2007422088220ca72104200d410c6ead21070b200a2004410c6c6a22042003ad220f422086200f8437020420042009360200200c422086200742ffffffff0f83844280808080107c21072008417f6a22080d000b200128020421040b20012004417f6a360204200a450d3a2002200a3602c815200128020022032802042104200220073702cc152002200b3703c015200ba7210d20044104490d3720032802002208280000210e20032004417c6a3602042003200841046a3602002001280200220328020422044104490d3720032802002208280000212020032004417c6a3602042003200841046a3602002001280200220328020422044104490d3720032802002208280000211e20032004417c6a3602042003200841046a360200200241cc156a290200210720022902c415210b4100210a200241003a008016200b422088a7211f2007422088a72121200ba7211d2007a7212241c000210402400240034002400240200128020022032802042208450d002003280200220a2d0000210920032008417f6a3602042003200a41016a36020020022d008016220341c000490d01200220093a00e00741bcf5cc00412b200241e0076a41e0c0cb0041e4decc00103e000b200a41ff0171450d02200241003a0080160c020b200241c0156a20036a20093a00002002200341016a220a3a0080162004417f6a22040d000b2003413e4b0d010b0240200d450d002005102e0b02402021450d002021410c6c2103201f210103400240200141046a280200450d002001280200102e0b2001410c6a2101200341746a22030d000b0b2022450d3c2022410c6c450d3c201f102e0c3c0b2005450d3b200241f8156a290300210720022903f015210b20022802ec15210120022f01ea15210320022800e515210420022f00e315210820022d00e215210a20022f01e015210920022903d815210c20022802d415211c20022802d015211720022802cc15212320022f01ca15211b20022d00c915211920022800c515211820022f00c315211a20022d00c215211620022f01c015212a200020022d00e9153a00552000200a3a004e200020193a0035200020163a002e200020063602042000410b360200200041e4006a2007370200200041dc006a200b370200200041d8006a2001360200200041d6006a20033b0100200041d1006a2004360000200041cf006a20083b0000200041cc006a20093b0100200041c4006a200c370200200041c0006a201c3602002000413c6a2017360200200041386a2023360200200041366a201b3b0100200041316a20183600002000412f6a201a3b00002000412c6a202a3b0100200041286a201e360200200041246a2020360200200041206a200e3602002000411c6a2021360200200041186a2022360200200041146a201f360200200041106a201d3602002000410c6a200d360200200041086a2005360200200041ec006a200241f0176a41c40110e9081a0c4a0b0240200128020022012802042203450d0020012003417f6a3602042001200128020041016a3602000b2000411c3602000c490b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a3602004200210f42002107410d21080240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020060e19000102030405060708090a0b18170c0d0e0f101112131415161a0b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b20022802dc15210d20022f01da15210920022d00d915210e20022f00d715210a20022900cf15210720022800cb15212220022800c715212120022800c315210320022f00c115210420022d00c015210520024198036a2001108202200229039803a70d1a200241a8036a290300210c20022903a003210b2007422088210f410121080c180b200441ff0171450d19200241003a00e0150c190b200241b8036a200110ad0120022802b8030d1820022802bc032103200241b0036a200110ad0120022802b0030d1820022802b403212141022108420021070c160b200241c0036a200110ad0120022802c0030d17200128020022042802042205450d1720022802c4032103200428020022062d0000210820042005417f6a3602042004200641016a36020002400240024020080e0200011a0b200128020022042802042205450d19200428020022082d0000210620042005417f6a3602042004200841016a360200410021040240024002400240024002400240200641ff00710e0706000102030405200b4180800421040c050b4180800821040c040b4180800c21040c030b4180801021040c020b4180801421040c010b4180801821040b2001280200220128020422054110490d192001280200220841086a290000210b200829000021072001200841106a3602002001200541706a360204200242003703d015200220073703c0152002200b3703c8152006410174418002712101410021050c010b2001280200220428020422054110490d182004280200220641086a290000210b200629000021072004200641106a3602002004200541706a3602042001280200220128020422044110490d182001280200220541086a290000210c2005290000210f2001200541106a360200200241d8156a200c3703002001200441706a360204200220073703c0152002200b3703c8152002200f3703d0154100210141012105410021040b2007422088210f20044180801c71200172200572212120022903d815210b20022802d415211f20022f01d215211e20022d00d115212020022800cd15210d20022f00cb15210920022d00ca15210e20022f01c815210a4200210c410321080c150b410421082001280200220128020422044104490d1620012802002205280000210320012004417c6a3602042001200541046a360200420021070c140b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b20022900cf152207422088210f20022802dc15210d20022f01da15210920022d00d915210e20022f00d715210a20022800cb15212220022800c715212120022800c315210320022f00c115210420022d00c0152105410521080c140b200441ff0171450d15200241003a00e0150c150b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b20022900cf152207422088210f20022802dc15210d20022f01da15210920022d00d915210e20022f00d715210a20022800cb15212220022800c715212120022800c315210320022f00c115210420022d00c0152105410621080c130b200441ff0171450d14200241003a00e0150c140b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b20022900cf152207422088210f20022802dc15210d20022f01da15210920022d00d915210e20022f00d715210a20022800cb15212220022800c715212120022800c315210320022f00c115210420022d00c0152105410721080c120b200441ff0171450d13200241003a00e0150c130b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b2001280200220628020422084104490d1320022802dc15210d20022f01da15210920022d00d915210e20022f00d715210a20022900cf15210720022800cb15212220022800c715212120022800c315210320022f00c115210420022d00c015210520062802002220280000211f20062008417c6a3602042006202041046a3602002001280200220128020422064104490d1320012802002208350000210b20012006417c6a3602042001200841046a3602002007422088210f4200210c410821080c110b200441ff0171450d12200241003a00e0150c120b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b20022900cf152207422088210f20022802dc15210d20022f01da15210920022d00d915210e20022f00d715210a20022800cb15212220022800c715212120022800c315210320022f00c115210420022d00c0152105410921080c100b200441ff0171450d11200241003a00e0150c110b200241c8036a200110ad0120022802c8030d1020022802cc032103410a2108420021070c0e0b2001280200220128020422044104490d0f20012802002205280000210320012004417c6a3602042001200541046a360200410b2108420021070c0d0b41002104200241003a00e015024002400240024002400240024002400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2203200241c0156a410f6a290000370000200241e0076a41086a2204200241c0156a41086a290300370300200241d8116a410f6a22052003290000370000200241d8116a41086a2203200429030037030020024198106a41086a2204200329030037030020024198106a410f6a22032005290000370000200220022903c01537039810200241df156a310000210720022900d715210b200241f8136a410f6a22052003290000370000200241f8136a41086a200429030037030020022002290398103703f813200128020022062802042208450d16200235008b14210f2005350000210c200228008314212220022800ff13212120022800fb13210320022f00f913210420022d00f81321052006280200220a2d0000210920062008417f6a3602042006200a41016a3602004100212020090e0707060102030405160b200441ff0171450d15200241003a00e0150c150b410221200c050b410321200c040b410421200c030b410521200c020b410621200c010b410121200b2001280200220128020422064110490d0e200b422888200742188684a7210d200f422086200c842107200b421888a72109200b421088a7210e200ba7210a2001280200220841086a290000210c2008290000210b2001200841106a3602002001200641706a360204410c21080c0c0b200241d0036a200110ad0120022802d0030d0d20012802002205280204220620022802d4032204490d0d2004417f4c0d4d0240024020040d00410121030c010b200410322203450d532001280200220528020421060b20062004490d0c20032005280200200410e9082101200528020422062004490d222005200620046b3602042005200528020020046a3602002001450d0d2004ad22074220862007842207422088a721222007a72121410f2108420021070c0b0b200241d8036a200110ad0120022802d8030d0c20012802002205280204220620022802dc032204490d0c2004417f4c0d4c0240024020040d00410121030c010b200410322203450d522001280200220528020421060b20062004490d0b20032005280200200410e9082101200528020422062004490d182005200620046b3602042005200528020020046a3602002001450d0c2004ad22074220862007842207422088a721222007a7212141102108420021070c0a0b200241e0036a200110ad0120022802e0030d0b20012802002205280204220620022802e4032204490d0b2004417f4c0d4b0240024020040d00410121030c010b200410322203450d512001280200220528020421060b20062004490d0a20032005280200200410e9082101200528020422062004490d162005200620046b3602042005200528020020046a3602002001450d0b2004ad22074220862007842207422088a721222007a7212141112108420021070c090b200241e8036a200110ad0120022802e8030d0a20012802002205280204220620022802ec032204490d0a2004417f4c0d4a0240024020040d00410121030c010b200410322203450d502001280200220528020421060b20062004490d0920032005280200200410e9082101200528020422062004490d142005200620046b3602042005200528020020046a3602002001450d0a2004ad22074220862007842207422088a721222007a7212141122108420021070c080b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241cf156a290000210720022802dc15210d20022f01da15210920022d00d915210e20022f00d715210a20022800c315210320022f00c115210420022d00c015210520022900c715210b200241f0036a200110ad0120022802f0030d0a200b422088a72122200ba7212120022802f403211f2007422088210f411321080c080b200441ff0171450d09200241003a00e0150c090b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2201200241c0156a410f6a290000370000200241e0076a41086a2203200241c0156a41086a290300370300200241d8116a410f6a22042001290000370000200241d8116a41086a2201200329030037030020024198106a41086a2203200129030037030020024198106a410f6a22012004290000370000200220022903c01537039810200241df156a310000210720022900d715210b200241f8136a410f6a22042001290000370000200241f8136a41086a200329030037030020022002290398103703f813200b422888200742188684a7210d200235008b14220f4220862004350000842107200b421888a72109200b421088a7210e20022900ff13220c422088a7212220022800fb13210320022f00f913210420022d00f8132105200ba7210a200ca72121411421080c070b200441ff0171450d08200241003a00e0150c080b2001280200220128020422044104490d0720012802002205280000210320012004417c6a3602042001200541046a36020041152108420021070c050b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2203200241c0156a410f6a290000370000200241e0076a41086a2204200241c0156a41086a290300370300200241d8116a410f6a22052003290000370000200241d8116a41086a2203200429030037030020024198106a41086a2204200329030037030020024198106a410f6a22032005290000370000200220022903c01537039810200241df156a310000210b20022900d7152107200241f8136a410f6a22052003290000370000200241f8136a41086a200429030037030020022002290398103703f8132001280200220128020422064104490d072007422888200b42188684a7210d2005350000210c200235008b14210f20022900ff13210b20022800fb13210320022f00f913210420022d00f81321052007421888a721092007421088a7210e2007a7210a20012802002208280000211f20012006417c6a3602042001200841046a360200200c200f422086842107200b422088a72122200ba72121411621080c050b200441ff0171450d06200241003a00e0150c060b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241d8116a41086a2206200241cf156a29000037030041172108200241d8116a41106a220a200241c0156a41176a290000370300200241d8116a41186a2209200241df156a2d00003a0000200220022900c71522073703e007200220073703d81120022d00c015210520022f00c115210420022800c3152103200241e8096a41186a220d20092d00003a0000200241e8096a41106a200a290300370300200241e8096a41086a220a2006290300370300200220022903d8113703e8092001280200220128020422064104490d0620012802002209280000211f20012006417c6a3602042001200941046a36020020022903f809220b422888200d31000042188684a7210d200a2903002207422088210f200b421888a72109200b421088a7210e20022903e809220c422088a72122200ba7210a200ca721210c040b200441ff0171450d05200241003a00e0150c050b41002104200241003a00e0150240024002400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200128020022062802042208450d0720022900d715210b200241df156a310000210f200241cf156a290000210720022900c715210c20022800c315210320022f00c115210420022d00c01521052006280200220a2d0000210920062008417f6a3602042006200a41016a3602004100211f20090e020201070b200441ff0171450d06200241003a00e0150c060b2001280200220128020422084104490d052001280200220a280000210620012008417c6a3602042001200a41046a3602004101211f0b200b422888200f42188684a7210d2007422088210f200b421888a72109200b421088a7210e200ba7210a200c422088a721222006ad210b200ca721214200210c411821080c020b200241f8036a200110ad0120022802f8030d0320022802fc03210341192108420021070c010b410e2108420021070b2000201e3b012a200020203a0029200020093b00232000200e3a0022200020043b000a200020053a00092000410d360200200041386a200c370200200041306a200b3702002000412c6a201f360200200041256a200d360000200041206a200a3b0100200041146a2022360200200041106a20213602002000410c6a2003360200200041086a20083a0000200041186a200f422086200742ffffffff0f8384370200200041c0006a200241f0176a41f00110e9081a0c4a0b2003102e0b2000411c3602000c480b200241e0076a200110cc06024020022d00e0074107460d00200241d8116a41306a200241e0076a41306a2903002207370300200241d8116a41286a200241e0076a41286a290300220b370300200241d8116a41206a200241e0076a41206a290300220c370300200241d8116a41186a200241e0076a41186a290300220f370300200241c0156a410c6a200241e0076a41086a290300370200200241c0156a41146a200241e0076a41106a290300370200200241c0156a411c6a200f370200200241c0156a41246a200c370200200241c0156a412c6a200b370200200241c0156a41346a2007370200200220022903e0073702c4152000410e360200200020022902c0153702042000410c6a200241c0156a41086a290200370200200041146a200241c0156a41106a2902003702002000411c6a200241c0156a41186a290200370200200041246a200241c0156a41206a2902003702002000412c6a200241c0156a41286a290200370200200041346a200241c0156a41306a2902003702002000413c6a200241f8156a280200360200200041c0006a200241f0176a41f00110e9081a0c480b2000411c3602000c470b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020002400240024002400240024002400240024020060e06000102030405090b200241c0156a200110e40120022802c0152208450d0820022802c415210a200128020022032802042204450d05200241c8156a2802002109200328020022052d0000210620032004417f6a3602042003200541016a360200024002400240024020060e020201000b200241023a00d8140c090b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241d8116a410f6a2203200241c0156a410f6a290000370000200241d8116a41086a2204200241c0156a41086a29030037030020024198106a410f6a2205200329000037000020024198106a41086a22032004290300370300200241a80e6a41086a22042003290300370300200241a80e6a410f6a22032005290000370000200220022903c0153703a80e200241df156a310000210f20022900d7152110200241f8136a410f6a22052003290000370000200241f8136a41086a2004290300370300200220022903a80e3703f8132005290000210b20022900ff13210c20022d00f813210320022f00f9132104200220022800fb1322053602dc14200220043b01da14200220033a00d914200241013a00d814200541187621040c020b0240200441ff0171450d00200241003a00e0150b200241023a00d8140c080b200241003a00d81420022d00df1421040b2001280200220128020422054104490d0620022d00da14210620022f01d814210e20022800db1421032002200c3700e107200241e9076a200b3700002001280200220d350000210720012005417c6a3602042001200d41046a360200200220103700f107200220043a00e007200c423888200b42088684a7210d200e20064110747222044180feff07714108762105200fa741ff01712101200c421888a7210e200b421888a72122200241f8076a310000210b20022802e007210620022903f007210c410121210c3b0b200110cc042203450d0720024180046a200110ad012002280280040d0620022802840421064200210c41022121410021224200210b42002107410021090c3a0b20024190046a200110ad012002280290040d062002280294042103200110cc042206450d0620024188046a200110ad0102402002280288040d00200228028c04210e4200210c41032121410021224200210b42002107410021090c390b2006108b022006102e0c060b41002104200241003a00e0150240024002400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241cf156a290000210720022900c715210f20022802dc15210620022f01da15210a20022d00d915210920022f00d715210d20022800c315210320022f00c115210520022d00c015210420024198046a200110ad012002280298040d0820012802002201280204220e450d08200228029c042108200128020022222d000021212001200e417f6a3602042001202241016a3602004100210120210e020201080b200441ff0171450d07200241003a00e0150c070b410121010b200220063600ed142002200a3b00eb14200220093a00ea142002200d3b01e814200f422088a7210e2007422088a72122200241f0146a310000210b20022903e814210c200fa721062007a7210d410421210c380b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241d8116a41086a2206200241cf156a290000370300200241d8116a41106a2208200241d7156a290000370300200241d8116a41186a220a200241df156a2d00003a0000200220022900c71522073703e007200220073703d81120022d00c015210420022f00c115210520022800c3152103200241e8096a41186a200a2d00003a0000200241e8096a41106a2008290300370300200241e8096a41086a2006290300370300200220022903d8113703e809200241b8046a200110ad0120022802b8040d0520022802bc042108200241a8046a200110da0420022903a804a70d0520022903b0042107200241a0046a200110ad0120022802a0040d0520022802a404210a20022903e809220f422088a7210e200241f0096a2903002210422088a72122200241800a6a310000210b20022903f809210c200fa721062010a7210d410521210c370b200441ff0171450d04200241003a00e0150c040b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b20022900c7152207422088a7210e200241df156a310000210b20022900d715210c20022800d315212220022800cf15210d20022800c315210320022f00c115210520022d00c01521042007a721064106212141002109420021070c360b200441ff0171450d03200241003a00e0150c030b200241023a00d8140b200a41ffffff3f71450d012008102e0c010b2003108b022003102e0b2000411c3602000c460b200128020022032802042204450d2f200328020022052d0000210620032004417f6a3602042003200541016a3602004102210e02400240024002400240024020060e06003401020304350b200241c0156a200110e40120022802c0152203450d3420022902c415210b200241c0046a2001108202024020022903c004a70d0020022903c8042207423888200241d0046a290300220c42088684a7210d200b422088a72104200c423888a7210a200c421888a72109200ba721054101210e0c330b200b42ffffff3f83500d342003102e0c340b200241d8046a200110ad0120022802d8040d3320022802dc04210320023502801420024184146a33010020024186146a31000042108684422086842107200228008b142109200228008714210d20022802fc1321044103210e4200210b0c310b200128020022032802042204450d32200328020022052d0000210620032004417f6a3602042003200541016a3602004104210e4100210a410021094100210d41002103024020060e03320300330b200241e0046a200110ad0120022802e0040d3220022802e4042105410221030c2f0b200241c0156a200110eb0120022d00c0154105460d31200241e0076a41086a200241d4156a290200370300200241f0076a200241dc156a2902003703002002200241cc156a2902003703e007200241c0156a41086a280200210420022802c415210520022802c01521030240200128020022012802042206450d00200128020022082d0000210a20012006417f6a3602042001200841016a3602004100210802400240200a0e020100020b410121080b20022903e0072207423888200241e8076a290300220b42088684a7210d200b423888a7210a200b421888a72109200241f0076a290300210b4105210e0c310b200341ff01714102470d312004450d312005102e0c310b2001280200220428020422054104490d3020042802002206280000210320042005417c6a3602042004200641046a3602002001280200220128020422044104490d3020012802002206280000210520012004417c6a3602042001200641046a3602004106210e0c2d0b4100210a410021094100210d410121030c2d0b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a3602004107210302400240024002400240024020060e0700010203040531060b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2201200241c0156a410f6a290000370000200241e0076a41086a2203200241c0156a41086a290300370300200241d8116a410f6a22042001290000370000200241d8116a41086a2201200329030037030020024198106a41086a2203200129030037030020024198106a410f6a22012004290000370000200220022903c01537039810200241df156a310000210720022900d715210b200241f8136a410f6a22042001290000370000200241f8136a41086a200329030037030020022002290398103703f813200b422888200742188684a7211b200b421888a72120200b421088a721192004280000210e200228008b14210d20022900ff13210720022800fb13210820022f00f913210a20022d00f8132109200ba72122410121030c310b200441ff0171450d05200241003a00e0150c050b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2201200241c0156a410f6a290000370000200241e0076a41086a2203200241c0156a41086a290300370300200241d8116a410f6a22042001290000370000200241d8116a41086a2201200329030037030020024198106a41086a2203200129030037030020024198106a410f6a22012004290000370000200220022903c01537039810200241df156a310000210720022900d715210b200241f8136a410f6a22042001290000370000200241f8136a41086a200329030037030020022002290398103703f81320022800fb13210820022f00f913210a20022d00f8132109200241d8146a41086a22012004290000370300200220022900ff133703d814200241f0146a20073c00002002200b3703e814200b422888200742188684a7211b200b421888a72120200b421088a721192001290300220c422088a7210d20022903d8142107200ba72122200ca7210e410221030c300b200441ff0171450d04200241003a00e0150c040b41002104200241003a00e015024002400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2203200241c0156a410f6a290000370000200241e0076a41086a2204200241c0156a41086a290300370300200241d8116a410f6a22052003290000370000200241d8116a41086a2203200429030037030020024198106a41086a2204200329030037030020024198106a410f6a22032005290000370000200220022903c01537039810200241df156a310000210720022900d715210b200241f8136a410f6a22052003290000370000200241f8136a41086a200429030037030020022002290398103703f81320022800fb13210820022f00f913210a20022d00f8132109200241e8096a41086a2005290000370300200220022900ff133703e809200241800a6a20073c00002002200b3703f80941002104200241003a00e0150340200128020022032802042205450d02200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2201200241c0156a410f6a290000370000200241e0076a41086a2203200241c0156a41086a290300370300200241d8116a410f6a22042001290000370000200241d8116a41086a2201200329030037030020024198106a41086a2203200129030037030020024198106a410f6a22012004290000370000200220022903c01537039810200241df156a310000210720022900d715210f200241f8136a410f6a22042001290000370000200241f8136a41086a200329030037030020022002290398103703f813200f422888200742188684a7211e2004290000210c20022900ff13210b20022800fb13211c20022f00f913211720022d00f813212320022903f8092210422888200241800a6a31000042188684a7211b200f421888a7211f200f421088a7211d2010421888a721202010421088a72119200241e8096a41086a2903002211422088a7210d20022903e8092107200fa721212010a721222011a7210e410321030c300b200441ff0171450d04200241003a00e0150c040b200441ff0171450d03200241003a00e0150c030b200241d8116a200110e40120022802d8112208450d0220022902dc112107200241cc156a290200210c20022902c415210b20022f01e807212220022d00ea07211920022f00eb07212020022d009c10212320022f009d10211720022f01d415212120022d00d615211d20022f00d715211f20022800d915211e20022d00dd15210520022f01de152104410421034100210d4100210e0c2d0b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2201200241c0156a410f6a290000370000200241e0076a41086a2203200241c0156a41086a290300370300200241d8116a410f6a22042001290000370000200241d8116a41086a2201200329030037030020024198106a41086a2203200129030037030020024198106a410f6a22012004290000370000200220022903c01537039810200241df156a310000210720022900d715210b200241f8136a410f6a22042001290000370000200241f8136a41086a200329030037030020022002290398103703f813200b422888200742188684a7211b200b421888a72120200b421088a721192004280000210e200228008b14210d20022900ff13210720022800fb13210820022f00f913210a20022d00f8132109200ba72122410521030c2d0b200441ff0171450d01200241003a00e0150c010b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2201200241c0156a410f6a290000370000200241e0076a41086a2203200241c0156a41086a290300370300200241d8116a410f6a22042001290000370000200241d8116a41086a2201200329030037030020024198106a41086a2203200129030037030020024198106a410f6a22012004290000370000200220022903c01537039810200241df156a310000210720022900d715210b200241f8136a410f6a22042001290000370000200241f8136a41086a200329030037030020022002290398103703f813200b422888200742188684a7211b200b421888a72120200b421088a721192004280000210e200228008b14210d20022900ff13210720022800fb13210820022f00f913210a20022d00f8132109200ba72122410621030c2c0b200441ff0171450d00200241003a00e0150b2000411c3602000c440b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a3602000240024002400240024020060e03000102050b200241e8046a200110820220022903e804a70d04200241f8046a290300210720022903f004210b200241c0156a200110eb0120022d00c0154105460d0420022903c0152211422088a72101200241d0156a290300210c200241c8156a290300210f200241e0156a2802002103200241d8156a29030021102011a72104410121050c030b20024180056a200110ad0120022802800522010d034104410220011b210520022802840521040c010b20024188056a200110ad0120022802880522010d024104410320011b2105200228028c0521040b0b20004112360200200041386a2007370200200041306a200b3702002000411c6a200c370200200041146a200f3702002000412c6a2003360200200041246a2010370200200041106a20013602002000410c6a2004360200200041086a2005360200200041c0006a200241f0176a41f00110e9081a0c440b2000411c3602000c430b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020002400240024002400240024002400240024020060e050001020304090b41002104200241003a00e015024002400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241df156a310000210b20022900c715210c20022800c315210d20022f00c115210920022d00c015210a20023500cf15210f20022800d315210e20022900d715210741002104200241003a0081162007422888200b42188684a72122200f200ead42208684210b2007421888a721212007421088a721202007a7211f0340200128020022032802042205450d02200328020022062d0000210820032005417f6a3602042003200641016a360200200241c0156a20046a20083a00002002200441016a22033a00811620032104200341c100470d000b2002200c3703d814200220223600ed14200220213b00eb14200220203a00ea142002201f3b01e8142002200b3703e014200e4110762101200e4108762120200241ef156a290000211020022900e715210f20022f00ff15211f20022800fb15211e20022800f715211d20022800e315210320022f00e115210420022d00e015210520022802dc15210620022f01da15210820022d00d915210e20022f00d715212220022900cf15210720022800cb15211c20022800c715212120023502c01520023301c41520023100c6154210868442208684420886200241f0146a31000084211120022903e8142115410121230c060b200441ff0171450d09200241003a00e0150c090b200441ff0171450d08200241003a0081160c080b41002104200241003a00d4150240024002400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00d4152003210420034114470d000b200220022802d0153602f007200220022903c8153702e807200220022802c4153602e407200220022802c015220a3602e0072001280200220328020422044110490d0a2003280200220541086a2900002111200529000021152003200541106a3602002003200441706a360204200128020022032802042204450d0a200328020022052d0000210920032004417f6a3602042003200541016a3602004100212120090e0202010a0b200441ff0171450d09200241003a00d4150c090b2001280200220328020422044110490d082003280200220541086a290000210b200529000021072003200541106a3602002003200441706a3602042001280200220328020422044110490d082003280200220541086a290000210f2005290000210c2003200541106a3602002003200441706a36020420012802002203280204220441034d0d0820032802002205280000210620032004417c6a3602042003200541046a3602002002200c3703d0152002200b3703c815200220063602e01520022802d415210320022f01d215210420022d00d115210520022f00cb15210820022800cd15210620022d00ca15210e20022f01c815212220022903e0152110410121210b20012802002209280204220d450d07200928020022202d0000211f2009200d417f6a3602042009202041016a360200410221234102212002400240201f0e020100090b200128020022012802042209450d082001280200220d2d0000211f20012009417f6a3602042001200d41016a360200410021200240201f0e020100090b410121200b200a410876210920023500ef07200241f3076a31000042208684210b20022900e707210c20022800e307210d4100211c0c030b41002104200241003a00e01502400240024002400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241800a6a200241df156a3100003c0000200220022900d7153703f809200220022900cf153703f009200220022900c7153703e80920022800c315210d20022f00c115210920022d00c015210a41002104200241003a0081160340200128020022032802042205450d02200328020022062d0000210820032005417f6a3602042003200641016a360200200241c0156a20046a20083a00002002200441016a22033a00811620032104200341c100470d000b200241ef156a290000211020022900e715210f20022f00ff15211f20022800fb15211e20022800f715211d20022800e315210320022f00e115210420022d00e015210520022802dc15210620022f01da15210820022d00d915210e20022f00d715212220022900cf15210720022800cb15211c20022800c715212120023502c015210b20023301c415210c20023100c615211120024190056a200110ad012002280290050d0a20012802002223280204221b2002280294052220490d0a2020417f4c0d4420200d02410121170c030b200441ff0171450d09200241003a00e0150c090b200441ff0171450d08200241003a0081160c080b202010322217450d4620012802002223280204211b0b201b2020490d0420172023280200202010e90821012023280204221b2020490d142023201b20206b3602042023202328020020206a3602002001450d06200b200c20114210868442208684420886200241800a6a3100008421112020ad220b422086200b842214422088a72118200241f0096a290300220b423088a72101200b422888a7212020022903f809211520022903e809210c2014a72119410321230c020b20024198056a200110ad012002280298050d05200128020022042802042205200228029c052203490d052003417f4c0d3f0240024020030d004101210d0c010b20031032220d450d452001280200220428020421050b20052003490d04200d2004280200200310e9082101200428020422052003490d122004200520036b3602042004200428020020036a3602002001450d052003ad2207422086200784210c410421230c010b41002104200241003a00d41502400240024002400240024002400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00d4152003210420034114470d000b20022802d015210d20022903c815210720022802c015210a20022802c415210841002104200241003a00d4152008411876210e200a411876211f200a41087621090340200128020022032802042205450d02200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00d4152003210420034114470d000b200128020022032802042204450d0220022802c415212220022802c015212020022802d015212120022903c815210b200328020022052d0000210620032004417f6a3602042003200541016a36020020060e020405030b200441ff0171450d0a200241003a00d4150c0a0b200441ff0171450d09200241003a00d4150c090b200241023a00e8090c080b200241023a00e8090c070b200241003a00e8090c010b41002104200241003a00e0150340200128020022032802042205450d03200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241d8116a410f6a2201200241c0156a410f6a290000370000200241d8116a41086a2203200241c0156a41086a290300370300200241a80e6a410f6a22042001290000370000200241a80e6a41086a22012003290300370300200241d8146a41086a22032001290300370300200241d8146a410f6a22012004290000370000200220022903c0153703d814200241df156a310000210f20022900d7152114200241f8136a410f6a22042001290000370000200241f8136a41086a2003290300370300200220022903d8143703f8132004290000211020022900ff13210c20022d00f813210120022f00f9132103200220022800fb133602ec09200220033b01ea09200220013a00e909200241013a00e8090b202041087621012002200c3700e107200241e9076a2010370000200241dc0a6a2021410874ad200b423888843e0200200220022d00ef093a00e0072002200b4208862022411876ad843702d40a200220224108742020411876723602d00a2014423888200f42ff018342088684210f202141187620022f01e80920022d00ea0941107472410874722121200dad42088620074238888442ffffffffff1f83210b200c423888201042088684a721222007420886200ead84210c2008410874201f72210d2014421888a721032014420888a721042010422088a721062010421088a721082010420888a7210e20022800eb09211c200241d00a6a41086a2903002111200228029810211d200228029c10211e20022f01a010211f20022f01a210211b20022802a410211720022802a810211920022802ac10211820022903e007210720022903d00a21152014a7210542002110410521230b200020053a00492000200e3a0042200020013b011e200020203a001d200020093b000a2000200a3a0009200041133602002000411c6a200b4220883c0000200041186a200b3e0000200041d8006a2010370200200041d0006a200f370200200041286a2011370200200041206a2015370200200041f4006a2018360200200041f0006a2019360200200041ec006a2017360200200041ea006a201b3b0100200041e8006a201f3b0100200041e4006a201e360200200041e0006a201d360200200041cc006a2003360200200041ca006a20043b0100200041c5006a2006360000200041c3006a20083b0000200041c0006a20223b0100200041386a2007370200200041346a201c360200200041306a2021360200200041106a200c3700002000410c6a200d360000200041086a20233a0000200041f8006a200241f0176a41b80110e9081a0c460b0240200441ff0171450d00200241003a00e0150b200241023a00e8090c020b2017102e0c010b200d102e0b2000411c3602000c420b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602044101210a2003200541016a360200024002400240024002400240024020060e0403000102070b200241c0156a200110eb0120022d00c0154105460d0620022903c015220b422088a72103200241d0156a290300210f200241c8156a2903002107200241e0156a2802002105200241d8156a290300210c200ba721044102210a0c020b200241c0156a200110eb0120022d00c01522044105460d05200241d8116a41086a200241d4156a290200370300200241d8116a41106a200241dc156a2802003602002002200241cc156a2902003703d811200241c0156a41086a280200210a20022802c415210302402001280200220628020422084110490d0020022d00c315210d20022f00c115210e200241e0156a28020021052006280200220941086a290000210b200929000021102006200941106a3602002006200841706a3602042001280200220628020422084110490d002006280200220941086a2900002111200929000021152006200941106a3602002006200841706a3602042001280200220128020422064104490d0020012802002209280000210820012006417c6a3602042001200941046a360200200241ec076a200241d8116a41086a290300370200200241f4076a200241d8116a41106a2802003602002002200a3602e007200220022903d8113702e407200e200d411074724108742004722104200241e0076a41086a290300210f20022903e007210720022903f007210c420021124103210a420021250c020b20044102470d05200a0d040c050b200241c0156a200110eb0120022d00c0154105460d04200241c0156a41106a2208290300210f200241e0156a220a2802002105200241d8156a2209290300210c200241c8156a2206290300210720022802c415210320022802c0152104200241c0156a200110eb0120022d00c0154105460d022006290300210b20022802c415210e20022802c015210d2001280200220628020422224110490d0120082903002115200a2802002108200929030021112006280200220a41086a2900002114200a29000021102006200a41106a3602002006202241706a36020420012802002206280204220a4110490d012006280200220941086a2900002113200929000021282006200941106a3602002006200a41706a3602044104210a2001280200220128020422064104490d0120012802002209280000212220012006417c6a3602042001200941046a360200200220223602d0152014422086201042208884212520104220862112200ead422086200dad842110200220283703c01520022802c415210d20022903d01521262028a721090b20004114360200200041f8006a2026370200200041f0006a2013370200200041dc006a20253e0200200041d4006a2012370200200041c0006a2015370200200041386a200b3702002000411c6a200f370200200041146a2007370200200041ec006a200d360200200041e8006a2009360200200041e0006a2014370200200041d0006a2008360200200041c8006a2011370200200041306a20103702002000412c6a2005360200200041246a200c370200200041086a200a3602002000410c6a2003ad4220862004ad8437020020004180016a200241f0176a41b00110e9081a0c450b200d41ff01714102470d00200ba7450d00200e102e0b200441ff01714102470d012007a7450d010b2003102e0b2000411c3602000c410b200241c0156a200110cd06024020022f01c0154104460d00200241e0076a41086a200241c0156a41086a2903002207370300200220022903c015220b3703e007200041153602002000200b3702042000410c6a2007370200200041146a200241f0176a419c0210e9081a0c410b2000411c3602000c400b200128020022032802042204450d24200328020022052d0000210620032004417f6a3602042003200541016a3602004104210a0240024020060e0f00012425232221201f1e1d1c1b1a19260b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241900d6a41086a200241e8096a41086a2800003602002002418c0d6a41026a20024198136a41026a2d00003a0000200241c80d6a41106a200241e0076a41106a290000370300200241c80d6a41086a200241e0076a41086a290000370300200220022900e8093703900d200220022f0098133b018c0d200220022900e0073703c80d200241df156a310000210c20022900d715210b20022900c715210720022800c315210820022f00c115212a20022d00c015212c20023500cf15210f20023500d3152110200241880d6a41026a200241e80f6a41026a2d00003a0000200220022f00e80f3b01880d200241a00d6a41106a200241d8116a41106a290000370300200241a00d6a41086a200241d8116a41086a290000370300200220022900d8113703a00d200241840d6a41026a200241f80d6a41026a2d00003a0000200220022f00f80d3b01840d200241e80c6a41106a20024198106a41106a290000370300200241e80c6a41086a20024198106a41086a29000037030020022002290098103703e80c200241e40c6a41026a200241f8136a41026a2d00003a0000200220022f00f8133b01e40c200241c80c6a41106a200241a80e6a41106a290000370300200241c80c6a41086a200241a80e6a41086a290000370300200220022900a80e3703c80c200241d8146a41206a200241f0176a41206a280000360200200241d8146a41186a200241f0176a41186a290000370300200241d8146a41106a200241f0176a41106a290000370300200241d8146a41086a200241f0176a41086a290000370300200220022900f0173703d814201042208622104280808080806083200f20104280808080f01f838484210f4101210a0c250b200441ff0171450d25200241003a00e0150c250b200241a0056a200110ad0120022802a0050d2420022802a4052205200128020028020441c8006e2203200320054b1bad42c8007e2207422088a70d362007a72203417f4c0d360240024020030d00410421080c010b2003102c2208450d3c0b2001200128020441016a2204360204200341c8006ead210702400240024002400240024002400240024002400240200420012802084b0d00024002402005450d00200241c0156a410c6a211f200241c0156a410172211c0340200241c0156a200110ed0302400240024020022d00c01522044106460d00200241f8136a41026a220a201c41026a2d00003a0000200241e8096a41086a2209201f41086a290200370300200241e8096a41106a220d201f41106a2902003703002002201c2f00003b01f8132002201f2902003703e80920022802c415210620022802c8152103200241f0176a200110ed0320022d00f0174106470d0120044101470d002003450d002006102e0b410621040c010b200241b4146a41026a200a2d00003a000020024198136a41086a200929030037030020024198136a41106a200d290300370300200241e0076a41086a200241f0176a41086a290300370300200241e0076a41106a200241f0176a41106a290300370300200241e0076a41186a200241f0176a41186a290300370300200241e0076a41206a200241f0176a41206a280200360200200220022f01f8133b01b414200220022903e80937039813200220022903f0173703e0072003211e2006211d0b200241b0146a41026a2203200241b4146a41026a2d00003a0000200241e80f6a41086a220620024198136a41086a290300370300200241e80f6a41106a220a20024198136a41106a290300370300200241d8116a41086a2209200241e0076a41086a290300370300200241d8116a41106a220d200241e0076a41106a290300370300200241d8116a41186a220e200241e0076a41186a290300370300200241d8116a41206a2222200241e0076a41206a280200360200200220022f01b4143b01b01420022002290398133703e80f200220022903e0073703d81120044106460d03200241ac146a41026a222120032d00003a0000200241f80d6a41086a22202006290300370300200241f80d6a41106a2206200a29030037030020024198106a41086a220a200929030037030020024198106a41106a2209200d29030037030020024198106a41186a220d200e29030037030020024198106a41206a220e2022280200360200200220022f01b0143b01ac14200220022903e80f3703f80d200220022903d8113703981002402007422088220ba722032007a7470d00200341016a22222003490d4520034101742217202220222017491b22224104202241044b1bad42c8007e220b422088a7454102742122200ba721170240024020030d00200241003602f0170c010b200241043602f817200220083602f0172002200341c8006c3602f4170b200241c0156a20172022200241f0176a107d20022802c815212220022802c0154101460d0320022802c41521082007422088220ba72103202241c8006ead21070b2008200341c8006c6a220320043a0000200341086a201e360000200341046a201d360000200341036a20212d00003a0000200320022f01ac143b00012003410c6a20022903f80d370000200341146a20202903003700002003411c6a2006290300370000200341346a20092903003700002003412c6a200a2903003700002003413c6a200d290300370000200341246a200229039810370000200341c4006a200e280200360000200b422086200742ffffffff0f83844280808080107c21072005417f6a22050d000b200128020421040b20012004417f6a3602042008450d30200241f0176a200110ed0320022d00f0174106460d0a20024180186a310000210c20024190186a220a350200210f20024188186a2209290300211420024184186a220d280200210320024182186a2f0100210420024181186a2d00002105200241f0176a41086a220e290300210b20022802f417212a20022802f0172106200241f0176a200110ed0320022d00f0174106460d09200241e8096a41086a200a280200360200200220092903003703e809200d280200210d200241fc176a220a2902002110200e280200212d20022802f417212e20022802f017212c200241f0176a200110ed0320022d00f01722094106460d08200241f8136a41026a20022d00f3173a000020024198106a41086a20024184186a222029020037030020024198106a41106a2002418c186a221f290200370300200220022f00f1173b01f8132002200a29020037039810200241f0176a41086a220a280200210e20022802f4172122200241f0176a200110ed0320022d00f01722214106460d07200241f80d6a41026a20022d00f3173a0000200241d8116a41086a2020290200370300200241d8116a41106a201f290200370300200220022f00f1173b01f80d2002200241fc176a221d2902003703d811200a280200212020022802f417211f200241f0176a200110ed0320022d00f017221e4106460d06200241ea0f6a20022d00f3173a0000200241e0076a41086a20024184186a290200370300200241f0076a2002418c186a290200370300200220022f00f1173b01e80f2002201d2902003703e007200241f0176a41086a280200211d20022802f417211c2001280200220a2802042217450d05200a28020022232d00002118200a2017417f6a360204200a202341016a3602004100212f420021114100212320180e020302050b20220d460c410b02402007422088a72201450d002008200141c8006c6a2103200821010340024020012d00004101470d00200141086a280200450d00200141046a280200102e0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102e0b200141c8006a22012003470d000b0b2007a72201450d2e200141c8006c450d2e2008102e0c2e0b41002117200241003a00841803402001280200220a2802042223450d02200241f0176a20176a200a280200221b2d00003a0000200a2023417f6a360204200a201b41016a3602002002201741016a220a3a008418200a2117200a4114470d000b20022802f417220a41087420022802f0172217411876722119200a41187621302017410876211b200228028018212f20022903f8172111410121230b200241f0176a200110ed0320022d00f01722184106460d014102210a20024198136a41026a222420022d00f3173a0000200241c0156a41086a222720024184186a290200370300200241c0156a41106a22312002418c186a290200370300200220022f00f1173b0198132002200241fc176a2902003703c015200241f0176a41086a2232280200211a20022802f4172116200241f0176a200110ed0320022d00f0174106470d0720184101470d01201a450d012016102e0c010b201741ff0171450d00200241003a0084180b201e4101470d00201d450d00201c102e0b20214101470d002020450d00201f102e0b20094101470d00200e450d002022102e0b202c41ff01714101470d00202d450d00202e102e0b200641ff01714101470d00200ba7450d00202a102e0b02402007422088a72201450d002008200141c8006c6a2103200821010340024020012d00004101470d00200141086a280200450d00200141046a280200102e0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102e0b200141c8006a22012003470d000b0b2007a72201450d25200141c8006c450d252008102e0c250b200241a80e6a41206a2201200241f0176a41206a280200360200200241a80e6a41186a2233200241f0176a41186a290300370300200241a80e6a41106a2234200241f0176a41106a290300370300200241a80e6a41086a22352032290300370300200241900d6a41086a200241e8096a41086a2802003602002002418c0d6a41026a200241f8136a41026a2d00003a0000200220022903f0173703a80e200220022903e8093703900d200220022f01f8133b018c0d200241c80d6a41106a20024198106a41106a290300370300200241c80d6a41086a20024198106a41086a29030037030020022002290398103703c80d200241880d6a41026a200241f80d6a41026a2d00003a0000200220022f01f80d3b01880d200241a00d6a41106a200241d8116a41106a290300370300200241a00d6a41086a200241d8116a41086a290300370300200220022903d8113703a00d200241840d6a41026a200241e80f6a41026a2d00003a0000200220022f01e80f3b01840d200241e80c6a41106a200241e0076a41106a290300370300200241e80c6a41086a200241e0076a41086a290300370300200220022903e0073703e80c200241e40c6a41026a20242d00003a0000200220022f0198133b01e40c200241c80c6a41106a2031290300370300200241c80c6a41086a2027290300370300200220022903c0153703c80c200241d8146a41206a2001280200360200200241d8146a41186a2033290300370300200241d8146a41106a2034290300370300200241d8146a41086a2035290300370300200220022903a80e3703d81420114208862030ad42ff0183842113202fad42088620114238888442ffffffffff1f832112202dad422086202ead842111202cad422086200f842115202aad4220862006ad84210f0c230b2004200641b8b2c0001056000b2004200641b8b2c0001056000b2004200641b8b2c0001056000b2004200841b8b2c0001056000b2004200641b8b2c0001056000b2003200641b8b2c0001056000b2003200841b8b2c0001056000b2003200641b8b2c0001056000b2003200641b8b2c0001056000b2003200541b8b2c0001056000b2020201b41b8b2c0001056000b2004200641b8b2c0001056000b2003200d41b8b2c0001056000b2006203241b8b2c0001056000b2004200841b8b2c0001056000b2003200a41b8b2c0001056000b2003200641b8b2c0001056000b2000411c3602000c2d0b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020020060d00200241d8116a200110950620022802d811450d0020024198106a200241d8116a41c00110e9081a200241003a00881202402001280200220328020422044110490d002003280200220541086a29000021072005290000210b2003200541106a3602002003200441706a360204200241013a0088122002200b3703d811200220073703e0110240200128020022032802042204410f4d0d002003280200220541086a29000021072005290000210b2003200541106a3602002003200441706a360204200241d8116a41186a22042007370300200241023a0088122002200b3703e8112001280200220328020422054110490d002003280200220641086a29000021072006290000210b2003200641106a360200200241d8116a41286a20073703002003200541706a360204200241033a0088122002200b3703f811200241d00a6a41086a200241d8116a41086a290300220c370300200241d00a6a41106a200241d8116a41106a290300220f370300200241d00a6a41186a20042903002210370300200241d00a6a41206a200b370300200241d00a6a41286a2007370300200220022903d81122113703d00a200241e8096a41286a22032007370300200241e8096a41206a2204200b370300200241e8096a41186a22052010370300200241e8096a41106a2206200f370300200241e8096a41086a2208200c370300200220113703e80920024198136a41286a220a200329030037030020024198136a41206a2209200429030037030020024198136a41186a200529030037030020024198136a41106a200629030037030020024198136a41086a22042008290300370300200220022903e809370398132001280200220328020422054104490d0120032802002206280000210820032005417c6a3602042003200641046a3602002002280298102103200241a80e6a20024198106a41047241bc0110e9081a200241e80f6a41286a200a290300370300200241e80f6a41206a2009290300370300200241e80f6a41186a220520024198136a41186a290300370300200241e80f6a41106a220620024198136a41106a290300370300200241e80f6a41086a200429030037030020022002290398133703e80f2003450d02200241f0176a41286a200241e80f6a41286a290300370300200241f0176a41206a200241e80f6a41206a290300370300200241f0176a41186a2005290300370300200241f0176a41106a2006290300370300200241f0176a41086a200241e80f6a41086a290300370300200220022903e80f3703f017200220033602a018200241a4186a200241a80e6a41bc0110e9082104200220083602e019200241d8076a200110ad010240024020022802d8070d0020022802dc072105200241d0076a200110ad0120022802d007450d010b200241a0186a109b060c030b20022802d4072101200241f80d6a41286a2206200241f0176a41286a290300370300200241f80d6a41206a2208200241f0176a41206a290300370300200241f80d6a41186a220a200241f0176a41186a290300370300200241f80d6a41106a2209200241f0176a41106a290300370300200241f80d6a41086a220d200241f0176a41086a290300370300200220022903f0173703f80d200241c0156a200441c40110e9081a200241c80d6a41086a2204200d290300370300200241c80d6a41106a220d2009290300370300200241c80d6a41186a2209200a290300370300200241c80d6a41206a220a2008290300370300200241c80d6a41286a22082006290300370300200220022903f80d3703c80d200241e0076a200241c0156a41c40110e9081a200241d8146a412c6a2008290300370200200241d8146a41246a200a290300370200200241d8146a411c6a2009290300370200200241d8146a41146a200d290300370200200241d8146a410c6a2004290300370200200220022903c80d3702dc142000411b360200200020022902d8143702042000410c6a200241d8146a41086a290200370200200041146a200241d8146a41106a2902003702002000411c6a200241d8146a41186a290200370200200041246a200241d8146a41206a2902003702002000412c6a200241d8146a41286a290200370200200041346a20024188156a280200360200200041386a20033602002000413c6a200241e0076a41c40110e9081a20004184026a200136020020004180026a200536020020004188026a20022903a00d37030020004190026a200241a00d6a41086a29030037030020004198026a200241a00d6a41106a290300370300200041a0026a200241a00d6a41186a290300370300200041a8026a200241a00d6a41206a2903003703000c2f0b200241003a0088120b20024198106a109b060b2000411c3602000c2c0b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020002400240024002400240024002400240024002400240024020060e060001020304050c0b20024190076a200110ad012002280290070d0b2001280200220528020422062002280294072204490d0b2004417f4c0d2e0240024020040d00410121030c010b200410322203450d342001280200220528020421060b20062004490d0a20032005280200200410e9082106200528020422082004490d082005200820046b3602042005200528020020046a3602002006450d0b41002105200241003a00e0152004ad22074220862007842207422088a7210d2007a7210902400340200128020022042802042206450d01200241c0156a20056a200428020022082d00003a000020042006417f6a3602042004200841016a3602002002200541016a22043a00e0152004210520044120470d000b200241e0076a410f6a2201200241c0156a410f6a290000370000200241e0076a41086a2204200241c0156a41086a290300370300200241d8116a410f6a22052001290000370000200241d8116a41086a22012004290300370300200241d8146a41086a22042001290300370300200241d8146a410f6a22012005290000370000200220022903c0153703d814200241df156a310000210c20022900d715210b200241f8136a410f6a22052001290000370000200241f8136a41086a2004290300370300200220022903d8143703f81320052800002108200228008b14210a20022900ff13210720022800fb13210420022f00f913210520022d00f8132106200242003703a0102002200d36029c102002200936029810200b422888200c42188684a72109200b421888a7210d200b421088a7210e200ba72122410121210c070b0240200541ff0171450d00200241003a00e0150b2009450d0b0c0a0b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b20024198106a41086a200241e0076a41086a29000037030020024198106a41106a200241e0076a41106a290000370300200220022900e00737039810200241cf156a290000220b422088a7210a20022900c715210720022802dc15210920022f01da15210d20022d00d915210e20022f00d715212220022800c315210420022f00c115210520022d00c0152106200ba72108410221210c050b200441ff0171450d0a200241003a00e0150c0a0b200241b0076a200110ad0120022802b0070d0920012802002205280204220620022802b4072204490d092004417f4c0d2c0240024020040d00410121030c010b200410322203450d322001280200220528020421060b20062004490d0820032005280200200410e9082106200528020422082004490d072005200820046b3602042005200528020020046a3602002006450d092004ad2207422086200784210b41002105200241003a00e015024002400340200128020022042802042206450d01200241c0156a20056a200428020022082d00003a000020042006417f6a3602042004200841016a3602002002200541016a22043a00e0152004210520044120470d000b200241e0076a410f6a2204200241c0156a410f6a290000370000200241e0076a41086a2205200241c0156a41086a290300370300200241d8116a410f6a22062004290000370000200241d8116a41086a22042005290300370300200241d00a6a41086a22052004290300370300200241d00a6a410f6a22042006290000370000200220022903c0153703d00a200241df156a310000210f20022900d715210c200241f8136a410f6a22062004290000370000200241f8136a41086a2005290300370300200220022903d00a3703f81320062800002108200228008b14210a20022900ff13210720022800fb13210420022f00f913210520022d00f813210620024198076a2001108202200229039807a70d01200c422888200f42188684a72109200c421888a7210d200c421088a7210e200ca7212220022903a007210c20024198106a41106a20024198076a41106a2903003703002002200b370398102002200c3703a010410321210c060b200541ff0171450d00200241003a00e0150b200ba70d080c090b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241d8116a41086a2203200241cf156a290000370300200241d8116a41106a2208200241d7156a290000370300200241d8116a41186a220a200241df156a2d00003a0000200220022900c71522073703e007200220073703d81120022d00c015210620022f00c115210520022800c3152104200241e8096a41186a2209200a2d00003a0000200241e8096a41106a2008290300370300200241e8096a41086a22082003290300370300200220022903d8113703e809200241b8076a200110820220022903b807a70d09200241b8076a41106a2903002107200220022903c00737039810200220073703a01020022903f809220b422888200931000042188684a72109200b421888a7210d200b421088a7210e2008290300220c422088a7210a20022903e8092107200ba72122200ca72108410421210c030b200441ff0171450d08200241003a00e0150c080b41002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b20024198106a41086a200241e0076a41086a29000037030020024198106a41106a200241e0076a41106a290000370300200220022900e0073703981020022900d715220b422888200241df156a31000042188684a72109200b421888a7210d200b421088a7210e20022800d315210a20022800cf15210820022900c715210720022800c315210420022f00c115210520022d00c0152106200ba72122410521210c020b200441ff0171450d07200241003a00e0150c070b41002104200241003a00e0150340200128020022032802042205450d03200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b20024198106a41086a200241e0076a41086a29000037030020024198106a41106a200241e0076a41106a290000370300200220022900e0073703981020022900d715220b422888200241df156a31000042188684a72109200b421888a7210d200b421088a7210e200241cf156a290000220c422088a7210a20022900c715210720022800c315210420022f00c115210520022d00c0152106200ba72122200ca72108410621210b0b200241a80e6a41106a220120024198106a41106a290300370300200241a80e6a41086a20024198106a41086a290300220b3703002002200229039810220c3703a80e200041186a200aad4220862008ad84370000200041106a20073700002000412c6a2003360000200020093600252000200d3b00232000200e3a0022200041206a20223b00002000410c6a2004360000200020053b000a200020063a0009200041086a20213a00002000411a360200200041306a200c370200200041386a200b370200200041c0006a2001290300370200200041c8006a200241f0176a41e80110e9081a0c300b200441ff0171450d03200241003a00e0150c030b2004200841b8b2c0001056000b2004200841b8b2c0001056000b2003102e0b2000411c3602000c2b0b02400240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a360200024002400240024002400240024002400240024002400240024020060e090001020304050608070d0b20024198066a2001108202200229039806a70d0c200241a8066a290300210b20022903a006210720024190066a200110ad012002280290060d0c2001280200220528020422062002280294062204490d0c2004417f4c0d2f0240024020040d00410121030c010b200410322203450d352001280200220528020421060b20062004490d0b20032005280200200410e9082101200528020422062004490d0d2005200620046b3602042005200528020020046a3602002001450d0c2004ad220c422086200c84220c422088210f200ca72104410121010c090b200241b0066a200110ad0120022802b00622010d0b410a410220011b21014200210f20022802b40621030c070b200241d0066a200110ad0120022802d0060d0a20022802d4062103200241c0156a200110eb0120022d00c0154105460d0a200241c0156a41106a290300210b200241c8156a2903002107200241e0156a2802002105200241d8156a290300210c20022802c415210620022802c0152104200241b8066a2001108202024020022903b806a70d00200241b8066a41106a290300211120022903c00621102006ad210f410321010c090b200441ff01714102470d0a2007a7450d0a2006102e0c0a0b200241d8066a200110ad0120022802d80622010d09410a410420011b21014200210f20022802dc0621030c050b200241e0066a200110ad0120022802e00622010d08410a410520011b21014200210f20022802e40621030c040b200241e8066a200110ad0120022802e8060d0720022802ec062103200241c0156a200110eb0120022d00c0154105460d0720022903c0152210422088210f200241d0156a290300210b200241c8156a2903002107200241e0156a2802002105200241d8156a290300210c2010a721044200211041062101420021110c050b200241f0066a200110ad0120022802f00622010d06410a410720011b21014200210f20022802f40621030c020b20024188076a200110ad012002280288070d05200228028c07210320024180076a200110ad012002280280070d052001280200220628020422082002280284072205490d052005417f4c0d280240024020050d00410121040c010b200510322204450d2e2001280200220628020421080b0240024020082005490d0020042006280200200510e90821012006280204220820054f0d012005200841b8b2c0001056000b2004102e0c060b2006200820056b3602042006200628020020056a3602002001450d052005ad2207422086200784220f42208821074200210b410921010c020b200241f8066a200110ad0120022802f80622010d04410a410820011b21014200210f20022802fc0621030b0b0b20004119360200200041c0006a2011370200200041386a2010370200200041206a200b370200200041186a2007370200200041306a2005360200200041286a200c3702002000410c6a2003360200200041086a2001360200200041106a200f4220862004ad84370200200041c8006a200241f0176a41e80110e9081a0c2d0b2003102e0b2000411c3602000c2b0b2004200641b8b2c0001056000b024002400240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a3602000240024002400240024002400240024020060e0400010203080b200241d8116a200110e40120022802d8112203450d0720022902dc11210b0240200110cc042204450d0020022902d815220c42808080807083210f20022902d0152207428080808070832110200241ec076a310000211120022902e407211520022802cc15210e20022802c8152109200228009b10210820022f009910210a2007a7210d410121010c0a0b200b42ffffff3f8350450d060c070b2001280200220328020422044102490d06200328020022062f0000210520032004417e6a3602042003200641026a360200200241c0156a200110e40120022802c0152203450d0620022902c415210b200241c0156a200110fd0520022802c01522044102460d04200241c8156a280200210a20022802c415210620024188066a200110ad012002280288060d0420012802002209280204220d200228028c062208490d042008417f4c0d290240024020080d004101210e0c010b20081032220e450d2f20012802002209280204210d0b200d2008490d03200e2009280200200810e908210d200928020422222008490d072009202220086b3602042009200928020020086a360200200d450d042008ad2207422086200784210c200128020022082802042209450d02200828020022222d0000212120082009417f6a3602042008202241016a360200410021220240024020210e020100040b410121220b2001280200220128020422094108490d02200c422088a721082001280200220e29000021072001200941786a3602042001200e41086a360200200c422086200dad84220f4220882111200f422086200aad842115200c421088a7210a200c420888a72121410221014100210d4200210c4200210f420021100c080b2001280200220328020422044102490d05200328020022052f0000210a20032004417e6a3602042003200541026a360200200241c0156a200110e40120022802c0152208450d0520022902c4152107200241c0156a200110fd05024020022802c0154102460d00200241c8156a280200210d20022903c015211041002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b2001280200220128020422094108490d01200241df156a310000211120022900d715211520022900c715210b20022800c315210320022f00c115210520022d00c0152122200241cf156a290000220c422088a72106200ca721042001280200220e290000210c2001200941786a3602042001200e41086a360200200c42808080807083210f2010422088a7210e2010a7210941032101420021100c090b200441ff0171450d00200241003a00e0150b200742ffffff3f83500d052008102e0c050b2001280200220328020422044102490d04200328020022052f0000210a20032004417e6a3602042003200541026a360200200241c0156a200110e40120022802c0152208450d0420022902c415210702402001280200220328020422044104490d0020032802002205280000210920032004417c6a3602042003200541046a3602002001280200220328020422044104490d0020032802002205280000210e20032004417c6a3602042003200541046a36020041002104200241003a00e01502400340200128020022032802042205450d01200241c0156a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00e0152003210420034120470d000b200241e0076a410f6a2201200241c0156a410f6a290000370000200241e0076a41086a2203200241c0156a41086a290300370300200241d8116a410f6a22042001290000370000200241d8116a41086a2201200329030037030020024198106a41086a2203200129030037030020024198106a410f6a22012004290000370000200220022903c01537039810200241df156a310000211120022900d7152115200241f8136a410f6a22042001290000370000200241f8136a41086a200329030037030020022002290398103703f81320042800002104200228008b14210620022900ff13210b20022800fb13210320022f00f913210520022d00f8132122410421014100210d4200210c4200210f420021100c080b200441ff0171450d00200241003a00e0150b200742ffffff3f83500d042008102e0c040b200ca7450d010b200e102e0b200b42ffffff3f83500d010b2003102e0b2000411c3602000c2b0b2008202241b8b2c0001056000b200020213a0029200020223a000920004118360200200041286a20113c0000200041206a20153702002000413c6a200e360200200041386a2009360200200041306a20073702002000412c6a20083602002000412a6a200a3b01002000411c6a2006360200200041186a2004360200200041106a200b3702002000410c6a20033602002000410a6a20053b0100200041086a20013a0000200041c8006a200f200c42ffffffff0f8384370200200041c0006a2010200dad84370200200041d0006a200241f0176a41e00110e9081a0c290b200241c0156a200110bc03024020022d00c015410b460d00200241e0076a200241c0156a41c80010e9081a20004117360200200041046a200241e0076a41c80010e9081a200041cc006a200241f0176a41e40110e9081a0c290b2000411c3602000c280b410f210a0c0b0b200241f0176a200110eb0120022d00f0174105460d0b200241900d6a41086a200241e8096a41086a2802003602002002418c0d6a41026a20024198136a41026a2d00003a0000200241c80d6a41086a200241e0076a41086a290200370300200241c80d6a41106a200241e0076a41106a290200370300200220022902e8093703900d200220022f0098133b018c0d200220022902e0073703c80d2002418c186a310000210c20024184186a290200210b200241fc176a290200210f200241f0176a41206a28020021032002418e186a2f010021042002418d186a2d0000210520022902f417210720022802f0172108200241880d6a41026a200241e80f6a41026a2d00003a0000200220022f00e80f3b01880d200241a00d6a41106a200241d8116a41106a290200370300200241a00d6a41086a200241d8116a41086a290200370300200220022902d8113703a00d200241840d6a41026a200241f80d6a41026a2d00003a0000200220022f00f80d3b01840d200241e80c6a41106a20024198106a41106a290200370300200241e80c6a41086a20024198106a41086a29020037030020022002290298103703e80c200241e40c6a41026a200241f8136a41026a2d00003a0000200220022f00f8133b01e40c200241c80c6a41106a200241a80e6a41106a290200370300200241c80c6a41086a200241a80e6a41086a290200370300200220022902a80e3703c80c200241d8146a41206a200241c0156a41206a280200360200200241d8146a41186a200241c0156a41186a290200370300200241d8146a41106a200241c0156a41106a290200370300200241d8146a41086a200241c0156a41086a290200370300200220022902c0153703d814410e210a0c0a0b200241f0176a200110eb0120022d00f0174105460d0a2002418c186a310000210c20024184186a290200210b200241f0176a41206a220928020021032002418e186a2f010021042002418d186a2d00002105200241fc176a290200210f200241f0176a41086a220e280200210620022802f417210a20022802f0172108200241f0176a200110ed03024020022d00f0174106460d00200241900d6a41086a200241e8096a41086a2802003602002002418c0d6a41026a20024198136a41026a2d00003a0000200241c80d6a41086a200241e0076a41086a290200370300200241c80d6a41106a200241e0076a41106a290200370300200220022902e8093703900d200220022f0098133b018c0d200220022902e0073703c80d200241f0176a41186a2903002110200241f0176a41106a29030021112009280200210d200e290300211520022903f0172114200241880d6a41026a200241e80f6a41026a2d00003a0000200220022f00e80f3b01880d200241a00d6a41106a200241d8116a41106a290200370300200241a00d6a41086a200241d8116a41086a290200370300200220022902d8113703a00d200241840d6a41026a200241f80d6a41026a2d00003a0000200220022f00f80d3b01840d200241e80c6a41106a20024198106a41106a290200370300200241e80c6a41086a20024198106a41086a29020037030020022002290298103703e80c200241e40c6a41026a200241f8136a41026a2d00003a0000200220022f00f8133b01e40c200241c80c6a41106a200241a80e6a41106a290200370300200241c80c6a41086a200241a80e6a41086a290200370300200220022902a80e3703c80c200241d8146a41206a200241c0156a41206a280200360200200241d8146a41186a200241c0156a41186a290200370300200241d8146a41106a200241c0156a41106a290200370300200241d8146a41086a200241c0156a41086a290200370300200220022902c0153703d8142006ad422086200aad842107410d210a0c0a0b200841ff01714102470d0a2006450d0a200a102e0c0a0b200241f0176a200110eb0120022d00f0174105460d092002418c186a310000210c20024184186a290200210b200241f0176a41206a220d28020021032002418e186a2f010021042002418d186a2d00002105410c210a200241f0176a410c6a290200210f200241f0176a41086a220e280200210620022802f417210920022802f0172108200241f0176a200110ed03024020022d00f0174106460d00200241900d6a41086a200241e8096a41086a2802003602002002418c0d6a41026a20024198136a41026a2d00003a0000200241c80d6a41086a200241e0076a41086a290200370300200241c80d6a41106a200241e0076a41106a290200370300200220022902e8093703900d200220022f0098133b018c0d200220022902e0073703c80d200241f0176a41186a2903002110200241f0176a41106a2903002111200d280200210d200e290300211520022903f0172114200241880d6a41026a200241e80f6a41026a2d00003a0000200220022f00e80f3b01880d200241a00d6a41106a200241d8116a41106a290200370300200241a00d6a41086a200241d8116a41086a290200370300200220022902d8113703a00d200241840d6a41026a200241f80d6a41026a2d00003a0000200220022f00f80d3b01840d200241e80c6a41106a20024198106a41106a290200370300200241e80c6a41086a20024198106a41086a29020037030020022002290298103703e80c200241e40c6a41026a200241f8136a41026a2d00003a0000200220022f00f8133b01e40c200241c80c6a41106a200241a80e6a41106a290200370300200241c80c6a41086a200241a80e6a41086a290200370300200220022902a80e3703c80c200241d8146a41206a200241c0156a41206a280200360200200241d8146a41186a200241c0156a41186a290200370300200241d8146a41106a200241c0156a41106a290200370300200241d8146a41086a200241c0156a41086a290200370300200220022902c0153703d8142006ad4220862009ad8421070c090b200841ff01714102470d092006450d092009102e0c090b200241f0176a200110eb0120022d00f0174105460d08200241900d6a41086a200241e8096a41086a2802003602002002418c0d6a41026a20024198136a41026a2d00003a0000200241c80d6a41086a200241e0076a41086a290200370300200241c80d6a41106a200241e0076a41106a290200370300200220022902e8093703900d200220022f0098133b018c0d200220022902e0073703c80d2002418c186a310000210c20024184186a290200210b200241fc176a290200210f200241f0176a41206a28020021032002418e186a2f010021042002418d186a2d0000210520022902f417210720022802f0172108200241880d6a41026a200241e80f6a41026a2d00003a0000200220022f00e80f3b01880d200241a00d6a41106a200241d8116a41106a290200370300200241a00d6a41086a200241d8116a41086a290200370300200220022902d8113703a00d200241840d6a41026a200241f80d6a41026a2d00003a0000200220022f00f80d3b01840d200241e80c6a41106a20024198106a41106a290200370300200241e80c6a41086a20024198106a41086a29020037030020022002290298103703e80c200241e40c6a41026a200241f8136a41026a2d00003a0000200220022f00f8133b01e40c200241c80c6a41106a200241a80e6a41106a290200370300200241c80c6a41086a200241a80e6a41086a290200370300200220022902a80e3703c80c200241d8146a41206a200241c0156a41206a280200360200200241d8146a41186a200241c0156a41186a290200370300200241d8146a41106a200241c0156a41106a290200370300200241d8146a41086a200241c0156a41086a290200370300200220022902c0153703d814410b210a0c070b20024180066a200110ad012002280280060d072002280284062108200241f0176a200110eb0120022d00f0174105460d07200241f8176a280200210920022802f417210d20022802f017210a0240024020012802002206280204220e450d0020024188186a310000210c20024180186a290300210b20024190186a35020021142002418c186a28020021032002418a186a2f0100210420024189186a2d00002105200241fc176a3502002107200628020022222d000021212006200e417f6a3602042006202241016a3602004200211502400240024002400240024020210e0707000102030405060b2001280200220128020422064110490d052001280200220e41086a2900002110200e29000021112001200e41106a3602002001200641706a360204420121150c060b420221150c050b420321150c040b420421150c030b420521150c020b420621150c010b200a41ff01714102470d082009450d08200d102e0c080b200241900d6a41086a200241e8096a41086a2802003602002002418c0d6a41026a20024198136a41026a2d00003a0000200241c80d6a41086a200241e0076a41086a290200370300200241c80d6a41106a200241e0076a41106a290200370300200241880d6a41026a200241e80f6a41026a2d00003a0000200220022902e8093703900d200220022f0098133b018c0d200220022902e0073703c80d200220022f00e80f3b01880d200241a00d6a41106a200241d8116a41106a290200370300200241a00d6a41086a200241d8116a41086a290200370300200241840d6a41026a200241f80d6a41026a2d00003a0000200241e80c6a41086a20024198106a41086a290200370300200241e80c6a41106a20024198106a41106a290200370300200241e40c6a41026a200241f8136a41026a2d00003a0000200220022902d8113703a00d200220022f00f80d3b01840d20022002290298103703e80c200220022f00f8133b01e40c200241c80c6a41106a200241a80e6a41106a290200370300200241c80c6a41086a200241a80e6a41086a290200370300200241d8146a41206a200241c0156a41206a280200360200200241d8146a41186a200241c0156a41186a290200370300200241d8146a41106a200241c0156a41106a290200370300200241d8146a41086a200241c0156a41086a290200370300200220022902a80e3703c80c200220022902c0153703d81420074220862009ad84210f200dad422086200aad842107410a210a0c060b200241f8056a200110ad0120022802f8050d062001280200220128020422034108490d0620022802fc0521082001280200220429000021072001200341786a3602042001200441086a360200200742ff01560d06200241900d6a41086a200241a80e6a41086a2802003602002002418c0d6a41026a200241e8096a41026a2d00003a0000200241c80d6a41086a200241c0156a41086a290200370300200241c80d6a41106a200241c0156a41106a290200370300200241880d6a41026a20024198136a41026a2d00003a0000200220022902a80e3703900d200220022f00e8093b018c0d200220022902c0153703c80d200220022f0098133b01880d200241a00d6a41106a200241e0076a41106a290200370300200241a00d6a41086a200241e0076a41086a290200370300200241840d6a41026a200241e80f6a41026a2d00003a0000200241e80c6a41086a200241d8116a41086a290200370300200241e80c6a41106a200241d8116a41106a290200370300200241e40c6a41026a200241f80d6a41026a2d00003a0000200220022902e0073703a00d200220022f00e80f3b01840d200220022902d8113703e80c200220022f00f80d3b01e40c200241c80c6a41106a20024198106a41106a290200370300200241c80c6a41086a20024198106a41086a290200370300200241d8146a41206a200241f0176a41206a280200360200200241d8146a41186a200241f0176a41186a290200370300200241d8146a41106a200241f0176a41106a290200370300200241d8146a41086a200241f0176a41086a29020037030020022002290298103703c80c200220022902f0173703d814200742ff018321074109210a0c050b200241f0056a200110ad0120022802f0050d0520022802f405210341002105200241003a00e01502400340200128020022042802042206450d01200241c0156a20056a200428020022082d00003a000020042006417f6a3602042004200841016a3602002002200541016a22043a00e0152004210520044120470d000b200241e8096a41186a200241df156a310000220c3c00004108210a200241900d6a41086a20024198136a41086a2802003602002002418c0d6a41026a200241e80f6a41026a2d00003a0000200220022900cf15220f3703f009200220022900c71522073703e809200220022900d715220b3703f80920022002290298133703900d200220022f00e80f3b018c0d20022800c315210820022f00c115212a20022d00c015212c200241c80d6a41106a200241e0076a41106a290200370300200241c80d6a41086a200241e0076a41086a290200370300200220022902e0073703c80d200241880d6a41026a200241f80d6a41026a2d00003a0000200220022f00f80d3b01880d200241a00d6a41106a200241d8116a41106a290200370300200241a00d6a41086a200241d8116a41086a290200370300200220022902d8113703a00d200241840d6a41026a200241f8136a41026a2d00003a0000200220022f00f8133b01840d200241e80c6a41106a20024198106a41106a290200370300200241e80c6a41086a20024198106a41086a29020037030020022002290298103703e80c200241e40c6a41026a200241b4146a41026a2d00003a0000200220022f00b4143b01e40c200241c80c6a41106a200241a80e6a41106a290200370300200241c80c6a41086a200241a80e6a41086a290200370300200220022902a80e3703c80c200241d8146a41206a200241f0176a41206a280200360200200241d8146a41186a200241f0176a41186a290200370300200241d8146a41106a200241f0176a41106a290200370300200241d8146a41086a200241f0176a41086a290200370300200220022902f0173703d8140c050b200541ff0171450d05200241003a00e0150c050b200241e8056a200110ad0120022802e8050d0420022802ec052108200241d0056a200110820220022903d005a70d04200241d0056a41106a290300210f20022903d8052107200241900d6a41086a200241a80e6a41086a2802003602002002418c0d6a41026a200241e8096a41026a2d00003a0000200241c80d6a41086a200241c0156a41086a290200370300200241c80d6a41106a200241c0156a41106a290200370300200241880d6a41026a20024198136a41026a2d00003a0000200220022902a80e3703900d200220022f00e8093b018c0d200220022902c0153703c80d200220022f0098133b01880d200241a00d6a41106a200241e0076a41106a290200370300200241a00d6a41086a200241e0076a41086a290200370300200241840d6a41026a200241e80f6a41026a2d00003a0000200241e80c6a41086a200241d8116a41086a290200370300200241e80c6a41106a200241d8116a41106a290200370300200241e40c6a41026a200241f80d6a41026a2d00003a0000200220022902e0073703a00d200220022f00e80f3b01840d200220022902d8113703e80c200220022f00f80d3b01e40c200241c80c6a41106a20024198106a41106a290200370300200241c80c6a41086a20024198106a41086a290200370300200241d8146a41206a200241f0176a41206a280200360200200241d8146a41186a200241f0176a41186a290200370300200241d8146a41106a200241f0176a41106a290200370300200241d8146a41086a200241f0176a41086a29020037030020022002290298103703c80c200220022902f0173703d8144107210a0c030b2001280200220128020422034104490d0320012802002204280000210820012003417c6a3602042001200441046a360200200241900d6a41086a200241a80e6a41086a2802003602002002418c0d6a41026a200241e8096a41026a2d00003a0000200241c80d6a41086a200241c0156a41086a290200370300200241c80d6a41106a200241c0156a41106a290200370300200220022902a80e3703900d200220022f00e8093b018c0d200220022902c0153703c80d200241880d6a41026a20024198136a41026a2d00003a0000200220022f0098133b01880d200241a00d6a41106a200241e0076a41106a290200370300200241a00d6a41086a200241e0076a41086a290200370300200220022902e0073703a00d200241840d6a41026a200241e80f6a41026a2d00003a0000200220022f00e80f3b01840d200241e80c6a41106a200241d8116a41106a290200370300200241e80c6a41086a200241d8116a41086a290200370300200220022902d8113703e80c200241e40c6a41026a200241f80d6a41026a2d00003a0000200220022f00f80d3b01e40c200241c80c6a41106a20024198106a41106a290200370300200241c80c6a41086a20024198106a41086a29020037030020022002290298103703c80c200241d8146a41206a200241f0176a41206a280200360200200241d8146a41186a200241f0176a41186a290200370300200241d8146a41106a200241f0176a41106a290200370300200241d8146a41086a200241f0176a41086a290200370300200220022902f0173703d8144106210a4200210f0c020b200241c8056a200110ad0120022802c8050d0220022802cc052108200241b0056a200110820220022903b005a70d02200241b0056a41106a290300210f20022903b8052107200241900d6a41086a200241a80e6a41086a2802003602002002418c0d6a41026a200241e8096a41026a2d00003a0000200241c80d6a41086a200241c0156a41086a290200370300200241c80d6a41106a200241c0156a41106a290200370300200241880d6a41026a20024198136a41026a2d00003a0000200220022902a80e3703900d200220022f00e8093b018c0d200220022902c0153703c80d200220022f0098133b01880d200241a00d6a41106a200241e0076a41106a290200370300200241a00d6a41086a200241e0076a41086a290200370300200241840d6a41026a200241e80f6a41026a2d00003a0000200241e80c6a41086a200241d8116a41086a290200370300200241e80c6a41106a200241d8116a41106a290200370300200241e40c6a41026a200241f80d6a41026a2d00003a0000200220022902e0073703a00d200220022f00e80f3b01840d200220022902d8113703e80c200220022f00f80d3b01e40c200241c80c6a41106a20024198106a41106a290200370300200241c80c6a41086a20024198106a41086a290200370300200241d8146a41206a200241f0176a41206a280200360200200241d8146a41186a200241f0176a41186a290200370300200241d8146a41106a200241f0176a41106a290200370300200241d8146a41086a200241f0176a41086a29020037030020022002290298103703c80c200220022902f0173703d8144105210a0c010b200241a8056a200110ad0120022802a8050d0120022802ac052222200128020028020441c4006e2203200320224b1bad42c4007e2207422088a70d132007a72203417f4c0d130240024020030d00410421080c010b2003102c2208450d190b2001200128020441016a2204360204200341c4006ead21070240200420012802084b0d00024002402022450d00200241f8136a410f6a211a20024180186a212c4100210a0340200241003a009018200a41016a210a410021040240024002400340200128020022032802042205450d01200241f0176a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a0090182003210420034120470d000b200241f0176a411f6a310000210b200229008718210c20022d00f017210320022f00f117210520022800f317210620022900f717210f20022800ff172116200228008318212a200241f0176a200110ed0320022d00f01722044106470d01410621040c020b0240200441ff0171450d00200241003a0090180b410621040c010b202c290300211520022903f817211120022f019218211f20022d009118211e200228008d18211d20022f008b18211c20022d008a18211720022f018818212320022802f417211b20022f01f217211920022d00f1172118202a212120162120200f2110200621092005210d2003210e200c2114200b21130b2002202136008b142002202036008714200220103700ff13200220093600fb132002200d3b00f9132002200e3a00f81320044106460d03201a290000210c20022900ff13210f02402007422088220ba722032007a7470d00200341016a22052003490d1820034101742206200520052006491b22054104200541044b1bad42c4007e220b422088a7454102742105200ba721060240024020030d00200241003602f0170c010b200241043602f817200220083602f0172002200341c4006c3602f4170b200241e8096a20062005200241f0176a107d20022802f009210520022802e8094101460d0320022802ec0921082007422088220ba72103200541c4006ead21070b2008200341c4006c6a22032011370028200320143700172003200f3700072003201f3b00422003201e3a00412003201d36003d2003201c3b003b200320173a003a200320233b00382003201b360024200320193b0022200320183a0021200320043a0020200320093600032003200d3b00012003200e3a0000200341306a20153700002003411f6a20133c00002003410f6a200c370000200b422086200742ffffffff0f83844280808080107c2107200a2022470d000b200128020421040b20012004417f6a3602042008450d03200241900d6a41086a20024198136a41086a2802003602002002418c0d6a41026a200241e80f6a41026a2d00003a0000200241c80d6a41086a200241e0076a41086a290200370300200241c80d6a41106a200241e0076a41106a290200370300200241880d6a41026a200241f80d6a41026a2d00003a000020022002290298133703900d200220022f00e80f3b018c0d200220022902e0073703c80d200220022f00f80d3b01880d200241a00d6a41106a200241d8116a41106a290200370300200241a00d6a41086a200241d8116a41086a290200370300200241840d6a41026a200241b4146a41026a2d00003a0000200241e80c6a41086a20024198106a41086a290200370300200241e80c6a41106a20024198106a41106a290200370300200241e40c6a41026a200241b0146a41026a2d00003a0000200220022902d8113703a00d200220022f00b4143b01840d20022002290298103703e80c200220022f00b0143b01e40c200241c80c6a41106a200241a80e6a41106a290200370300200241c80c6a41086a200241a80e6a41086a290200370300200241d8146a41206a200241c0156a41206a280200360200200241d8146a41186a200241c0156a41186a290200370300200241d8146a41106a200241c0156a41106a290200370300200241d8146a41086a200241c0156a41086a290200370300200220022902a80e3703c80c200220022902c0153703d8144103210a0c020b20050d190c140b02402007422088a72201450d00200141c4006c2103200841286a210103400240200141786a2d00004101470d002001280200450d002001417c6a280200102e0b200141c4006a2101200341bc7f6a22030d000b0b2007a72201450d01200141c4006c450d012008102e0c010b200241b80c6a41086a2201200241900d6a41086a280200360200200241b40c6a41026a22062002418c0d6a41026a2d00003a0000200241980c6a41086a222d200241c80d6a41086a290300370300200241980c6a41106a222e200241c80d6a41106a290300370300200241940c6a41026a222f200241880d6a41026a2d00003a0000200220022903900d3703b80c200220022f018c0d3b01b40c200220022903c80d3703980c200220022f01880d3b01940c200241f80b6a41106a2230200241a00d6a41106a290300370300200241f80b6a41086a2224200241a00d6a41086a290300370300200241f40b6a41026a2227200241840d6a41026a2d00003a0000200241d80b6a41086a2231200241e80c6a41086a290300370300200241d80b6a41106a2232200241e80c6a41106a290300370300200241d40b6a41026a2233200241e40c6a41026a2d00003a0000200220022903a00d3703f80b200220022f01840d3b01f40b200220022903e80c3703d80b200220022f01e40c3b01d40b200241b80b6a41106a2234200241c80c6a41106a290300370300200241b80b6a41086a2235200241c80c6a41086a290300370300200241d00a6a41206a2236200241d8146a41206a280200360200200241d00a6a41186a2237200241d8146a41186a290300370300200241d00a6a41106a2238200241d8146a41106a290300370300200241d00a6a41086a2239200241d8146a41086a290300370300200220022903c80c3703b80b200220022903d8143703d00a200041c8006a2010370200200041c0006a2011370200200041286a200c3c0000200041206a200b370200200041186a200f370200200041106a2007370200200041d0006a200d360200200041386a2015370200200041306a20143702002000412c6a2003360200200020043b002a200020053a00292000410c6a20083602002000202a3b000a2000202c3a0009200041086a200a3a000020004116360200200041e0006a20093a0000200041d4006a20022903b80c370200200041dc006a2001280200360200200041e4006a2022360200200041e8006a200e360200200020022f01b40c3b0061200041e3006a20062d00003a0000200041ec006a20022903980c370200200041f4006a202d290300370200200041fc006a202e29030037020020004184016a20213a000020004187016a202f2d00003a0000200020022f01940c3b0085012000418c016a202036020020004188016a201f360200200041a0016a203029030037020020004198016a202429030037020020004190016a20022903f80b370200200041a8016a201e3a0000200041ab016a20272d00003a0000200020022f01f40b3b00a901200041b0016a201d360200200041ac016a201c360200200041c4016a2032290300370200200041bc016a2031290300370200200041b4016a20022903d80b370200200041cc016a20183a0000200041cf016a20332d00003a0000200020022f01d40b3b00cd01200041d4016a201a360200200041d0016a2016360200200041e8016a2034290300370200200041e0016a2035290300370200200041d8016a20022903b80b37020020004190026a203628020036020020004188026a203729030037020020004180026a2038290300370200200041f8016a2039290300370200200041f0016a20022903d00a370200200041a4026a20123700002000419c026a201337000020004198026a20193600002000201b3b009602200020173a00950220004194026a20233a00000c1b0b2000411c3602000c1a0b200020043b0046200020053a00452000201e3600412000201f3b003f2000201d3a003e200020173b0026200020233a00252000201b360021200020203b001f200020193a001e2000200a3b0006200020093a0005200020033a000420004111360200200041346a200c3700002000412c6a200b3700002000410c6a20073700002000413c6a20213b0000200041286a201c3600002000411c6a20223b0000200041086a2008360000200041146a200dad422086200ead84370000200041c8006a200241f0176a41e80110e9081a0c190b4100210a410021094100210d0b0b200020083a000920004110360200200041286a200b370200200041146a2004360200200041106a20053602002000410c6a2003360200200041086a200e3a0000200041186a200dad220b423886200742ffffffffffffffff008384370200200041206a200aad4238862009ad42188684200b42088884370200200041306a200241f0176a41800210e9081a0c160b2000411c3602000c150b0b200020013a0029200020053b000a200020043a00092000410f360200200041286a200b3c0000200041206a200c370200200041386a2007370200200041346a2009360200200041306a200a3602002000412c6a2008360200200041146a200e360200200041106a20063602002000410c6a2003360200200041086a20213a0000200041186a2022ad422086200dad84370200200041c0006a200241f0176a41f00110e9081a0c130b2007422088a721010240200d450d002005102e0b2007a7210402402001450d002001410c6c2103200a210103400240200141046a280200450d002001280200102e0b2001410c6a2101200341746a22030d000b0b2004450d032004410c6c450d03200a102e0c030b200d102e0b02402007422088a72201450d002001410c6c2103200a210103400240200141046a280200450d002001280200102e0b2001410c6a2101200341746a22030d000b0b2007a72201450d002001410c6c450d00200a102e0b200ba7450d002005102e0b2000411c3602000c0e0b200d0d090c040b4100210e4200210f0b0c010b200241e9076a200c370000200220073700e107200220022d00df143a00e0074108210920022903e007220c422088200241e0076a41086a290300220f42208684210720022f01d81420022d00da14411074722204410876210d200f422088210f200ca7220e41807e7121162002200b3700f107200b422088a72118200b421088a72119200b420888a7211a201042ff0183a7211720022800db14210320022f01f007211b0b2000201e3a0049200020213a0042200020233b002a200020173a0029200020193b00232000201a3a00222000200d3b010a200020043a000920004107360200200041d8006a200c370200200041d0006a200b370200200041cc006a201c360200200041ca006a201d3b0100200041c5006a201f360000200041c3006a20203b0000200041c0006a20223b0100200041386a2010370200200041346a2008360200200041306a200a3602002000412c6a2005360200200041256a2018360000200041206a201b3b01002000410c6a2003360200200041086a20093a0000200041186a200f422086200742208884370200200041106a20074220862016200e41ff017172ad84370200200041e0006a200241f0176a41d00110e9081a0c090b1038000b2000411c3602000c070b410021064200210b410021010b200041003b0126200020013a00252000200a3b0023200020093b000d200020043b0006200020053a0005200020083a0004200041043602002000411b6a200b370000200041136a2007370000200041286a20063602002000410f6a200d3600002000410c6a200e3a0000200041086a20033602002000412c6a200241f0176a41840210e9081a0c050b2000411c3602000c040b1036000b02402007422088a72201450d00200141186c21032004210103400240200141046a280200450d002001280200102e0b0240200141106a280200450d002001410c6a280200102e0b200141186a2101200341686a22030d000b0b2007a72201450d01200141186c450d010b2004102e0b2000411c3602000b200241c01a6a24000baa2d01047f024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002802000e1b00010218180304051806070818090a0b0c0d0e0f10111213141516170b0240024002400240024002400240200041086a2802000e0a1e1e001e01021e030405060b200041106a280200450d1d2000410c6a280200102e0f0b200041106a280200450d1c2000410c6a280200102e0f0b200041106a280200450d1b2000410c6a280200102e0f0b0240200041146a2802002201450d002000410c6a2802002102200141186c210103400240200241046a280200450d002002280200102e0b0240200241106a280200450d002002410c6a280200102e0b200241186a2102200141686a22010d000b0b200041106a2802002202450d1a200241186c450d1a200028020c102e0f0b0240200041146a2802002201450d002000410c6a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041106a2802002202450d192002410c6c450d19200028020c102e0f0b200041106a280200450d182000410c6a280200102e0f0b200041106a280200450d172000410c6a280200102e0f0b0240024002400240024020002d00040e061b001b010203040b200041186a22022802001096012002280200102e0f0b02402000410c6a280200450d00200041086a280200102e0b200041246a22022802001096012002280200102e0f0b2000410c6a280200450d18200041086a280200102e0f0b200041186a22022802001096012002280200102e0f0b02402000410c6a280200450d00200041086a280200102e0b200041246a22022802001096012002280200102e0f0b02400240200041086a280200417f6a0e020001170b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b0240200041306a2802002202450d00200241246c450d00200028022c102e0b0240200041a4016a2802002201450d002000419c016a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b0240200041a0016a2802002202450d00200241246c450d00200028029c01102e0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d162002410c6c450d162000280210102e0f0b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b0240200041306a2802002202450d00200241246c450d00200028022c102e0b0240200041a4016a2802002201450d002000419c016a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b0240200041a0016a2802002202450d00200241246c450d00200028029c01102e0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d152002410c6c450d152000280210102e0f0b0240024002400240200041086a2802000e0418000102030b2000410c6a2d00004102470d17200041146a280200450d17200041106a280200102e0f0b2000410c6a2d00004102470d16200041146a280200450d16200041106a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004102470d15200041386a280200450d15200041346a280200102e0f0b2000410c6a2d00004102470d14200041146a280200450d14200041106a280200102e0f0b02402000410c6a2802002201450d0020002802042202200141f0006c6a21030340024020022204410c6a2802002201450d0020042802042102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b200441f0006a21020240200441086a2802002201450d00200141246c450d002004280204102e0b20022003470d000b0b200041086a2802002202450d13200241f0006c450d132000280204102e0f0b024002400240024002400240200041086a2d00000e171800181818180118180218181818180318180418181818050b2000412c6a2d00004102470d17200041346a280200450d17200041306a280200102e0f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b200041106a2802002202450d16200241246c450d16200028020c102e0f0b2000410c6a2d00004102470d15200041146a280200450d15200041106a280200102e0f0b200041106a28020041ffffff3f71450d142000410c6a280200102e0f0b200041146a28020041ffffffff0371450d13200041106a280200102e0f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b200041106a2802002202450d12200241246c450d12200028020c102e0f0b20002802042202450d11200041086a280200450d112002102e0f0b02400240200041086a280200417f6a0e020001120b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d112002410c6c450d112000280210102e0f0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d102002410c6c450d102000280210102e0f0b02402000410c6a280200450d00200041086a280200102e0b02402000411c6a2802002201450d00200041146a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041186a2802002202450d0f2002410c6c450d0f2000280214102e0f0b0240024002400240200041086a2d000041716a0e0400010203120b200041106a280200450d112000410c6a280200102e0f0b200041106a280200450d102000410c6a280200102e0f0b200041106a280200450d0f2000410c6a280200102e0f0b200041106a280200450d0e2000410c6a280200102e0f0b024002400240200041086a2d0000417f6a0e03000102100b200041306a28020041ffffff3f71450d0f2000412c6a280200102e0f0b2000410c6a22022802001096012002280200102e0f0b200041106a22022802001096012002280200102e0f0b024002400240200041086a2d0000417f6a0e030001020f0b200041306a28020041ffffff3f71450d0e2000412c6a280200102e0f0b2000410c6a22022802001096012002280200102e0f0b200041106a22022802001096012002280200102e0f0b02400240200041086a2d0000417f6a0e05000d0d0d010d0b200041106a28020041ffffff3f71450d0c2000410c6a280200102e0f0b2000410c6a2d00004102470d0b200041146a280200450d0b200041106a280200102e0f0b20002d00044104470d0a2000410c6a28020041ffffff3f71450d0a200041086a280200102e0f0b200041086a2802004101470d092000410c6a2d00004102470d09200041146a280200450d09200041106a280200102e0f0b02400240200041086a2d0000417d6a0e0200010a0b200041f0006a280200450d09200041ec006a280200102e0f0b200041106a280200450d082000410c6a280200102e0f0b024002400240200041086a2802000e040a0a0001020b2000410c6a2d00004102470d09200041146a280200450d09200041106a280200102e0f0b2000410c6a2d00004102470d08200041146a280200450d08200041106a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004102470d07200041386a280200450d07200041346a280200102e0f0b02400240024020002f01040e03090001020b0240200041106a2802002201450d00200041086a2802002102200141b0026c210103402002109601200241b0026a2102200141d07d6a22010d000b0b2000410c6a2802002202450d08200241b0026c450d082000280208102e0f0b200041086a22022802001096012002280200102e0f0b0240200041106a2802002201450d00200041086a2802002102200141b0026c210103402002109601200241b0026a2102200141d07d6a22010d000b0b2000410c6a2802002202450d06200241b0026c450d062000280208102e0f0b0240024002400240024002400240200041086a2d0000417e6a0e0d00010c0c0c0c0c0c02030405060c0b0240200041146a2802002201450d002000410c6a2802002202200141c8006c6a21010340024020022d00004101470d00200241086a280200450d00200241046a280200102e0b0240200241246a2d00004101470d002002412c6a280200450d00200241286a280200102e0b200241c8006a22022001470d000b0b0240200041106a2802002202450d00200241c8006c450d00200028020c102e0b0240200041186a2d00004101470d00200041206a280200450d002000411c6a280200102e0b02402000413c6a2d00004101470d00200041c4006a280200450d00200041c0006a280200102e0b0240200041e0006a2d00004101470d00200041e8006a280200450d00200041e4006a280200102e0b024020004184016a2d00004101470d002000418c016a280200450d0020004188016a280200102e0b0240200041a8016a2d00004101470d00200041b0016a280200450d00200041ac016a280200102e0b0240200041cc016a2d00004101470d00200041d4016a280200450d00200041d0016a280200102e0b200041f0016a2d00004101470d0b200041f8016a280200450d0b200041f4016a280200102e0f0b0240200041146a2802002202450d00200241c4006c21012000410c6a28020041286a210203400240200241786a2d00004101470d002002280200450d002002417c6a280200102e0b200241c4006a2102200141bc7f6a22010d000b0b200041106a2802002202450d0a200241c4006c450d0a200028020c102e0f0b200041106a2d00004102470d09200041186a280200450d09200041146a280200102e0f0b2000410c6a2d00004102470d08200041146a280200450d08200041106a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004101470d07200041386a280200450d07200041346a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004101470d06200041386a280200450d06200041346a280200102e0f0b2000410c6a2d00004102470d05200041146a280200450d05200041106a280200102e0f0b20002d00042202417e6a4108490d040240024020020e020600010b200041286a22022802001096012002280200102e0f0b200041c8006a22022802001096012002280200102e0f0b0240024002400240200041086a2d00000e0407000102030b0240200041106a28020041ffffff3f71450d002000410c6a280200102e0b200041186a22022802001096012002280200102e0f0b0240200041106a28020041ffffff3f71450d002000410c6a280200102e0b200041286a280200450d05200041246a280200102e0f0b200041306a28020041ffffff3f71450d042000412c6a280200102e0f0b200041306a28020041ffffff3f71450d032000412c6a280200102e0f0b0240024002400240200041086a2802000e09060006010606020606030b200041106a280200450d052000410c6a280200102e0f0b200041106a2d00004102470d04200041186a280200450d04200041146a280200102e0f0b200041106a2d00004102470d03200041186a280200450d03200041146a280200102e0f0b200041146a280200450d02200041106a280200102e0f0b02400240200041086a2d0000417f6a0e03000301030b200041306a280200450d022000412c6a280200102e0c020b200041306a280200450d012000412c6a280200102e0f0b02402000413c6a28020041ffffffff0171450d00200041386a280200102e0b0240200041c8006a2802002202450d002002410c6c450d00200041c4006a280200102e0b0240200041d4006a28020041ffffffff0071450d00200041d0006a280200102e0b0240200041e0006a2802002202450d00200241146c450d00200041dc006a280200102e0b0240200041ec006a2802002202450d00200241186c450d00200041e8006a280200102e0b0240200041f8006a2802002202450d002002411c6c450d00200041f4006a280200102e0b024020004184016a28020041ffffff3f71450d0020004180016a280200102e0b024020004190016a2802002202450d00200241246c450d002000418c016a280200102e0b02402000419c016a2802002202450d00200241286c450d0020004198016a280200102e0b0240200041a8016a2802002202450d002002412c6c450d00200041a4016a280200102e0b0240200041b4016a2802002202450d00200241306c450d00200041b0016a280200102e0b0240200041c0016a2802002202450d00200241346c450d00200041bc016a280200102e0b0240200041cc016a2802002202450d00200241386c450d00200041c8016a280200102e0b0240200041d8016a2802002202450d002002413c6c450d00200041d4016a280200102e0b0240200041e4016a28020041ffffff1f71450d00200041e0016a280200102e0b200041f0016a2802002202450d00200241c4006c450d00200041ec016a280200102e0f0b0b900403027f017e077f230041a0076b22032400024002400240024002402002200128020441b0026e2204200420024b1bad42b0027e2205422088a70d002005a72204417f4c0d000240024020040d00410821060c010b2004102c2206450d030b200441b0026e2107024020020d00410021020c040b200341e0046a410472210841002109410021044100210a0340200341e0046a200110980120032802e004210b200341b4026a200841ac0210e9081a200b411c460d02200341086a200341b4026a41ac0210e9081a02400240200a2007470d002009200a41016a220c2009200c4b1b220c4104200c41044b1bad42b0027e2205422088a745410374210c2005a7210702400240200a0d00200341003602e0040c010b200341083602e804200320043602e404200320063602e0040b20034190076a2007200c200341e0046a107d200328029807210c2003280290074101460d012003280294072106200c41b0026e21070b200620046a220c200b360200200c41046a200341086a41ac0210e9081a200941026a2109200441b0026a21042002200a41016a220a460d050c010b0b200c0d020b1038000b200041003602000240200a450d002006210a0340200a109601200a41b0026a210a200441d07d6a22040d000b0b2007450d02200741b0026c450d022006102e0c020b1036000b2000200736020420002006360200200041086a20023602000b200341a0076a24000bfcb1030b067f017e027f027e037f017e027f067e0f7f037e117f230041c01b6b220224000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802042203450d00200141046a2104200128020022052d0000210620012003417f6a22073602042001200541016a36020020060e250102030405060708090a2b0b0c0d0e0f101112132b2b2b2b1415162b17302f2b2b2b2e2d2c2b0b2000411c3602000c630b2007450d6120052d0001210620012003417e6a22073602042001200541026a36020002400240024002400240024002400240024002400240024020060e0a000102030405060708096d0b20074104490d6c2005280002210620012003417a6a3602042001200541066a3602002006418194ebdc034f0d6c410121010c0a0b2002200110ab0120022802000d6b2004280200220320022802042205490d6b2005417f4c0d670240024020050d00410121060c010b200510322206450d6a200428020021030b20032005490d6a20062001280200200510e9082103200128020422072005490d302001200720056b3602042001200128020020056a3602002003450d6b2005ad220842208620088421084102410b20031b21010c080b20074108490d6a200529000221082001200341766a36020420012005410a6a360200410321010c080b200241086a200110ab0120022802080d6920042802002203200228020c2205490d692005417f4c0d650240024020050d00410121060c010b200510322206450d68200428020021030b20032005490d6820062001280200200510e9082103200128020422072005490d262001200720056b3602042001200128020020056a3602002003450d692005ad220842208620088421084104410b20031b21010c060b200241106a200110ab0120022802100d682004280200220320022802142205490d682005417f4c0d640240024020050d00410121060c010b200510322206450d67200428020021030b20032005490d6720062001280200200510e9082103200128020422072005490d242001200720056b3602042001200128020020056a3602002003450d682005ad220842208620088421084105410b20031b21010c050b20024180166a200110fe0520022802801622064102460d672002290284162108410621010c040b200241286a200110ab0120022802280d66200228022c2207200428020041186e2205200520074b1bad42187e2208422088a70d622008a72205417f4c0d620240024020050d00410421060c010b2005102c2206450d650b200541186ead2108024002402007450d000340200241206a200110ab010240024020022802200d002004280200220320022802242205490d002005417f4c0d670240024020050d00410121090c010b200510322209450d6a200428020021030b024020032005490d0020092001280200200510e908210a200128020422032005490d302001200320056b3602042001200128020020056a360200200a450d01200241186a200110ab012005ad220b422086200b84220ca7210d024020022802180d0020042802002203200228021c2205490d002005417f4c0d690240024020050d004101210e0c010b20051032220e450d6c200428020021030b0240024020032005490d00200e2001280200200510e908210e2001280204220320054f0d012005200341b8b2c0001056000b200e102e0c010b2001200320056b3602042001200128020020056a360200200e0d030b200d450d010b2009102e0b02402008422088a72201450d00200141186c21052006210103400240200141046a280200450d002001280200102e0b0240200141106a280200450d002001410c6a280200102e0b200141186a2101200541686a22050d000b0b2008a72201450d6a200141186c450d6a0c690b02402008422088220ba722032008a7470d00200341016a22092003490d662003410174220f20092009200f491b22094104200941044b1bad42187e220b422088a7454102742109200ba7210f0240024020030d0020024100360280160c010b200241043602881620022006360280162002200341186c360284160b20024198086a200f200920024180166a107d20022802a00821092002280298084101460d03200228029c0821062008422088220ba72103200941186ead21080b2006200341186c6a2203200d3602042003200a360200200341146a2005ad22104220862010842210422088a73602002003410c6a2010422086200ead84370200200341086a200c422088a7360200200b422086200842ffffffff0f83844280808080107c21082007417f6a22070d000b0b2006450d674107410b20061b21010c040b2009450d620c640b20024180166a200110e3012002280280162206450d652002290284162108410821010c020b200241306a200110ab0120022802300d642004280200220320022802342205490d642005417f4c0d600240024020050d00410121060c010b200510322206450d63200428020021030b20032005490d6320062001280200200510e9082103200128020422072005490d1f2001200720056b3602042001200128020020056a3602002003450d642005ad220842208620088421080240200428020022034104490d0020012802002207280000210520012003417c6a3602042001200741046a360200410921010c030b2008a70d630c640b200241386a200110ab0120022802380d6320042802002203200228023c2205490d632005417f4c0d5f0240024020050d00410121060c010b200510322206450d62200428020021030b20032005490d6220062001280200200510e9082103200128020422072005490d1d2001200720056b3602042001200128020020056a3602002003450d632005ad22084220862008842108410a410b20031b21010b0b20004100360200200041186a2005360200200041106a20083702002000410c6a2006360200200041086a2001360200200041206a200241b0186a41900210e9081a0c620b02402007450d0020052d0001210620012003417e6a22073602042001200541026a36020002400240024002400240024002400240024020060e06000102030405090b20074104490d082005280002210620012003417a6a22073602042001200541066a3602002007450d0820052d0006210a2001200341796a22043602042001200541076a220e3602004100210702400240200a0e0201000a0b20044104490d09200535000721082001200341756a220736020420012005410b6a36020020074104490d09200535000b210b2001200341716a220436020420012005410f6a220e3602002008200b422086842108410121070b41000d082004450d08200e2d0000210320012004417f6a3602042001200e41016a360200200241b0186a200110980120022802b018210120024180166a200241b0186a41047241ac0210e9081a2001411c460d08200241b0186a20024180166a41ac0210e9081a41b002102c2205450d6720052001360200200541046a200241b0186a41ac0210e9081a2008422088a721042008a7210a4101210e420021080c050b20074104490d072005280002210620012003417a6a22073602042001200541066a36020020074104490d07200528000621072001200341766a36020420012005410a6a3602004102210e41002105420021080c040b200241c0006a200110ab0120022802400d062004280200220320022802442205490d062005417f4c0d630240024020050d00410121060c010b200510322206450d66200428020021030b20032005490d0520062001280200200510e9082103200128020422072005490d2a2001200720056b3602042001200128020020056a3602002003450d062005ad2208422086200884220ba72107200428020022034104490d0420012802002205280000210420012003417c6a220e3602042001200541046a220a360200200e450d04200a2d0000210920012003417b6a220e3602042001200a41016a220d360200410021050240024020090e020100060b200e4104490d05200a35000121082001200341776a22053602042001200a41056a36020020054104490d05200a350005210c2001200341736a220e3602042001200a41096a220d3602002008200c422086842108410121050b41000d04200e450d04200d2d000021032001200e417f6a3602042001200d41016a360200200241b0186a200110980120022802b018210e20024180166a200241b0186a41047241ac0210e9081a200e411c460d04200241b0186a20024180166a41ac0210e9081a41b002102c2201450d65200b422088a7210a2001200e360200200141046a200241b0186a41ac0210e9081a4103210e0c030b200241c8006a200110ab0120022802480d0520042802002203200228024c2205490d052005417f4c0d620240024020050d00410121060c010b200510322206450d65200428020021030b20032005490d0420062001280200200510e9082103200128020422072005490d1f2001200720056b3602042001200128020020056a3602002003450d052005ad22084220862008842208422088a7210a2008a721074104210e41002105410021040c020b20074104490d042005280002210620012003417a6a22073602042001200541066a3602002007450d0420052d0006210a2001200341796a22043602042001200541076a220e3602004100210702400240200a0e020100060b20044104490d05200535000721082001200341756a220736020420012005410b6a36020020074104490d05200535000b210b2001200341716a220436020420012005410f6a220e3602002008200b422086842108410121070b41000d042004450d04200e2d0000210320012004417f6a3602042001200e41016a360200200241b0186a200110980120022802b018210120024180166a200241b0186a41047241ac0210e9081a2001411c460d04200241b0186a20024180166a41ac0210e9081a41b002102c2205450d6320052001360200200541046a200241b0186a41ac0210e9081a2008422088a721042008a7210a4105210e420021080c010b200241d0006a200110ab0120022802500d032004280200220320022802542205490d032005417f4c0d600240024020050d00410121060c010b200510322206450d63200428020021030b20032005490d0220062001280200200510e9082103200128020422072005490d1c2001200720056b3602042001200128020020056a3602002003450d032005ad2208422086200884220ba72107200428020022034104490d0120012802002205280000210420012003417c6a220e3602042001200541046a220a360200200e450d01200a2d0000210920012003417b6a220e3602042001200a41016a220d360200410021050240024020090e020100030b200e4104490d02200a35000121082001200341776a22053602042001200a41056a36020020054104490d02200a350005210c2001200341736a220e3602042001200a41096a220d3602002008200c422086842108410121050b41000d01200e450d01200d2d000021032001200e417f6a3602042001200d41016a360200200241b0186a200110980120022802b018210e20024180166a200241b0186a41047241ac0210e9081a200e411c460d01200241b0186a20024180166a41ac0210e9081a41b002102c2201450d62200b422088a7210a2001200e360200200141046a200241b0186a41ac0210e9081a4106210e0b200020033a00052000200e3a000420004101360200200041246a20013602002000411c6a2008370200200041186a2005360200200041146a2004360200200041106a200a3602002000410c6a2007360200200041086a2006360200200041286a20024198086a41880210e9081a0c640b2007450d010b2006102e0b2000411c3602000c610b2007450d5c20052d0001210620012003417e6a3602042001200541026a3602000240024002400240024020060e03000103610b200241b0186a2001109a02200241bc186a2802002203450d60200241c4186a2802002105200241c0186a280200210620022802b818210e20022903b018210820024198086a200241c8186a41e40010e9081a200241b4196a2802002104200241b0186a4180016a2802002107200241ac196a280200210a20024180166a200241b8196a41800110e9081a200241b0186a200110f701024020022802b418450d00200241bc186a290200210b20022902b418210c20022802b0182109200241980f6a20024198086a41e40010e9081a20024198126a20024180166a41800110e9081a410121010c040b02402005450d00200541246c21052003210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012005415c6a22050d000b0b02402006450d00200641246c450d002003102e0b02402004450d00200441246c2105200a210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012005415c6a22050d000b0b2007450d60200741246c0d010c600b200241b0186a2001109a02200241bc186a2802002203450d5f200241c4186a2802002105200241c0186a280200210620022802b818210e20022903b018210820024198086a200241c8186a41e40010e9081a200241b4196a2802002104200241b0186a4180016a2802002107200241ac196a280200210a20024180166a200241b8196a41800110e9081a200241b0186a200110f701024020022802b418450d00200241bc186a290200210b20022902b418210c20022802b0182109200241980f6a20024198086a41e40010e9081a20024198126a20024180166a41800110e9081a410221010c030b02402005450d00200541246c21052003210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012005415c6a22050d000b0b02402006450d00200641246c450d002003102e0b02402004450d00200441246c2105200a210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012005415c6a22050d000b0b2007450d5f200741246c450d5f0b200a102e0c5e0b200241b0186a20011095024103210120022d00c0184103460d5d200241b8186a290300210b20022903b018210c20022903c0182108200241980f6a20024198156a41e40010e9081a20024198126a20024198086a41800110e9081a0b200241880b6a200241980f6a41e40010e9081a200241d8106a20024198126a41800110e9081a200041186a200b370200200041106a200c370200200041346a2005360200200041306a20063602002000412c6a2003360200200041286a200e360200200041206a20083702002000410c6a2009360200200041086a200136020020004102360200200041386a200241880b6a41e40010e9081a200041a4016a2004360200200041a0016a20073602002000419c016a200a360200200041a8016a200241d8106a41800110e9081a0c600b02402007450d0020052d0001210620012003417e6a3602042001200541026a36020020060d00200241d8006a200110d9042002290358a70d002002290360210820004103360200200041086a2008370300200041106a200241b0186a41a00210e9081a0c600b2000411c3602000c5f0b02402007450d0020052d0001210620012003417e6a22073602042001200541026a36020002400240024002400240024020060e050001020304060b20074104490d052005280002210620012003417a6a3602042001200541066a36020042002108410121044100210a4200210b4100210e0c040b20024180166a200110930120022d0080164101460d04200428020022044104490d0420024180166a41106a290300210820024188166a290300210c2002419d166a280000210a2002419b166a2f0000210e2002419a166a2d0000210920024198166a2f0100210d200228028416210620022f018216210520022d00811621032001280200220f280000210720012004417c6a3602042001200f41046a3602002002200e3b00eb10200220093a00ea102002200d3b01e8102002200c3703d810200220083703e0102002200a3600ed1020022900df102210422888200241e7106a290000220b421886842108200a4110762109200b422888210b200c421888a72111200c420888a7210f2010420888a7210a200ca721122010a7210e410221040c030b20074104490d032005280002210620012003417a6a3602042001200541066a36020042002108410321044100210a4200210b4100210e4100210d41002107410021010c020b20024180166a200110930120022d0080164101460d02200428020022044104490d0220024190166a290300211020024188166a290300210c2002419d166a28000021092002419b166a2f0000210d2002419a166a2d0000210f20024198166a2f01002111200228028416210620022f018216210520022d00811621032001280200220a280000210720012004417c6a220e3602042001200a41046a220a360200200e450d02200a2d0000210e20012004417b6a3602042001200a41016a3602004100210102400240200e0e020100040b410121010b2002200d3b00ab0f2002200f3a00aa0f200220113b01a80f200220103703a00f200c423888201042088684a7210e200220093600ad0f20094110762109200241ac0f6a330100200241ae0f6a31000042108684210b200c421888a72111200c420888a7210f20022902a40f2108200ca721122010a7210a410421040c010b20074104490d012005280002210620012003417a6a3602042001200541066a36020020022900df10220c422888200241e7106a290000220b421886842108200b422888210b200c420888a7210a20022f00d910210f20022800db10211120022f00ef10210920022d00f110210120022f01f210210d20022802f4102107200ca7210e410521040b2000200d3b0126200020013a0025200020093b00232000200f3b000d200020053b0006200020033a0005200020043a000420004104360200200041286a20073602002000410f6a20113600002000410c6a20123a0000200041086a20063602002000411b6a200b422886200842188884370000200041136a2008422886200aad42088684200ead42ff0183843700002000412c6a200241b0186a41840210e9081a0c5f0b2000411c3602000c5e0b02402007450d0020052d0001210620012003417e6a3602042001200541026a360200024002400240024002400240024020060e0400010203070b20024180166a200110e60120022d0080164105460d0620024180166a41106a290300210b20024188166a2903002108200241a0166a280200210520024198166a290300210c20022802841621062002280280162103200241e8006a200110db0402402002290368a70d00200241e8006a41106a29030021132006ad4220862003ad84211420022903702210422088a721062010a72103410121010c040b200341ff01714102470d062008a7450d062006102e0c060b20024180166a200110e60120022d0080164105460d0520024180166a41106a290300210b200241a0166a280200210520024198166a290300210c20024188166a29030021082002280284162106200228028016210320024198016a200110db04200229039801a70d0420024198016a41106a290300211320022903a001211020024180016a200110db04200229038001a70d0420024180016a41106a290300211520022903880121162006ad4220862003ad8421142010422088a721062010a72103410221010c020b20024180166a200110e60120022d0080164105460d0420024180166a41106a290300210b200241a0166a2203280200210520024198166a290300210c20024180166a41086a220629030021082002280284162104200228028016210720024180166a200110e601024020022d0080164105460d0020024198126a41086a20024180166a41146a29020037030020024198126a41106a2002419c166a280200360200200220024180166a410c6a290200370398122006280200210a2003350200211020022802841621062002280280162103200241b0016a200110db04024020022903b001a70d00200241b0016a41106a290300211720022903b801211820024198086a41146a20024198126a41106a28020036020020024198086a410c6a200241a0126a290300370200200220022903981237029c082002200a360298082004ad4220862007ad84211420024198086a41106a2903002115200229039808211320022903a0082116410321010c030b200341ff01714102470d00200a450d002006102e0b200741ff01714102470d042008a7450d042004102e0c040b20024180166a200110e60120022d0080164105460d0320024180166a41106a290300210b20024188166a2903002108200241a0166a280200210520024198166a290300210c20022802841621062002280280162103200241c8016a200110db0420022903c801a70d01200241c8016a41106a29030021132006ad4220862003ad84211420022903d0012210422088a721062010a72103420021104104210142002116420021150b20004105360200200041e0006a2017370200200041d8006a2018370200200041c8006a2015370200200041c0006a2016370200200041386a20133702002000411c6a200b370200200041146a2008370200200041d0006a20103702002000412c6a2005360200200041246a200c3702002000410c6a2014370200200041086a2001360200200041306a2006ad4220862003ad84370200200041e8006a200241b0186a41c80110e9081a0c600b200341ff01714102470d012008a7450d012006102e0c010b200341ff01714102470d002008a7450d002006102e0b2000411c3602000c5d0b02402007450d0020052d0001210620012003417e6a3602042001200541026a36020020060d00200241e0016a200110ab0120022802e0010d0020022802e4012206200428020041f0006e2205200520064b1bad42f0007e2208422088a70d582008a72205417f4c0d580240024020050d00410421070c010b2005102c2207450d5b0b200541f0006ead21080240024002402006450d0020024180166a41086a210e034020024180166a2001109b022002280284162103200228028016210420024198086a200e41e80010e9081a2003450d0320024198126a20024198086a41e80010e9081a02402008422088220ba722052008a7470d00200541016a220a2005490d5d20054101742209200a200a2009491b220a4104200a41044b1bad42f0007e220b422088a745410274210a200ba721090240024020050d0020024100360280160c010b200241043602881620022007360280162002200541f0006c360284160b200241d8106a2009200a20024180166a107d20022802e010210a20022802d8104101460d0320022802dc1021072008422088220ba72105200a41f0006ead21080b2007200541f0006c6a2205200336020420052004360200200541086a20024198126a41e80010e9081a200b422086200842ffffffff0f83844280808080107c21082006417f6a22060d000b0b2007450d022000200736020420004106360200200041086a2008370200200041106a200241b0186a41a00210e9081a0c5f0b200a0d5b0c590b02402008422088a72201450d002007200141f0006c6a2106200721010340024020012203410c6a2802002205450d0020032802042101200541246c210503400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012005415c6a22050d000b0b200341f0006a21010240200341086a2802002205450d00200541246c450d002003280204102e0b20012006470d000b0b2008a72201450d00200141f0006c450d002007102e0b2000411c3602000c5c0b02402007450d0020052d0001210620012003417e6a22193602042001200541026a3602004100211a410021124107210d0240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020060e170001020304056d060708090a0b0c0d0e0f101112131415170b20024180166a200110e60120022d0080164105460d1620024198086a41086a20024194166a29020037030020024198086a41106a2002419c166a29020037030020022002418c166a2902003703980820024180166a41086a28020021092002280284162111200228028016210e200241e8016a200110db0420022903e801a70d1520042802002205450d15200241e8016a41106a290300210c20022903f001210b200128020022032d0000210620012005417f6a3602044101210d2001200341016a3602004100210a02400240024002400240024020060e0505000102031b0b4101210a0c030b4102210a0c020b20024180166a200110930120022d0080164101460d18200241d8106a41106a20024191166a290000370300200241f0106a20024199166a2900002210370300200241e0106a20024189166a290000370300200220022900811622143703d81020022f00eb10200241ed106a2d0000411074722103200241e6106a310000210820022801da10210720022901de10211320022800e710210520022f01ee10211b20022f00f110211c20022800f310211d20022d00f710211e2014a7210f2010a7211f4103210a0c020b4104210a0b0b20024198126a41106a20024198086a41106a29030037030020024198126a41086a20024198086a41086a29030022143703002003ad4228862005ad42088684200842ff01838422084220882110201342208820084220868421082013a7221241807e71211a200229039808211320022d00a212212020022f00a312212120022800a512212220022d00a912212320022f01aa12212420022802ac1221252014a721260c6c0b20024180026a200110db04200229038002a70d15200229038802220b42208820024190026a290300220c422086842108200c4220882110200ba7221241807e71211a4102210d0c6a0b20024198026a200110db04200229039802a70d1420022903a002220b422088200241a8026a290300220c422086842108200c4220882110200ba7221241807e71211a4103210d0c690b4104210d20194104490d132005280002210720012003417a6a3602042001200541066a360200420021080c670b200241b0026a200110ab0120022802b0020d1220022802b40221052002418094ebdc0336028416200220053602801620042802002203450d1220024180166a2005418094ebdc034b4102746a2802002107200128020022052d0000210620012003417f6a3602042001200541016a3602004105210d41002112024020060e026900130b410121120c670b20024180166a200110e5012002280280162207450d11200228028416221241807e71211a20024188166a3502002108420021104106210d0c660b2019450d1020052d0002210620012003417d6a3602042001200541036a3602004100210a02400240024002400240024020060e050500010203160b4101210a0c030b4102210a0c020b20024180166a200110930120022d0080164101460d13200241d8106a41106a20024191166a290000370300200241d8106a41086a20024189166a290000370300200241f0106a220120024199166a29000037030020024198086a41086a200241e6106a29010037030020024198086a41106a200241ee106a2f01003b0100200220022900811622083703d810200220022901de103703980820022801da1021072001290300210b2008a7210f4103210a0c020b4104210a0b0b4108210d200229039808220c42208820024198086a41086a2903002210422086842108200ca7221241807e71211a20104220882110200b423888a7211e200b421888a7211d200b420888a7211c200241a8086a2f0100211b200ba7211f0c660b20024180166a200110e60120022d0080164105460d0f200229028416220b4220882002418c166a290200220c422086842108200ba7221241807e71211a200c4220882110200241a0166a280200210e2002419e166a2f010021272002419d166a2d0000211e20024199166a280000211d20024197166a2f0000211c20024196166a2d0000211f20024194166a2f0100211b20022802801621074109210d0c640b200241b8026a200110ab0120022802b8020d0e20022802bc02210742002108410a210d0c620b200241c0026a200110ab0120022802c0020d0d20022802c402210742002108410b210d0c610b2019450d0c20052d0002210a20012003417d6a3602042001200541036a360200200a41e5004f0d0c42002108410c210d41002112420021100c620b410d210d410021120c600b410e210d410021120c5f0b200241c8026a200110ab01024020022802c802450d0020024100360280160c0a0b20024180166a200120022802cc021092012002280280162207450d09200228028416221241807e71211a20024188166a350200210842002110410f210d0c5e0b20024180166a200110930120022d0080164101460d084110210d200241d8106a41086a220520024180166a41106a290300370300200241d8106a41106a20024180166a41186a290300370300200241d8106a41186a200241a0166a2d00003a0000200220024180166a41086a2903003703d810200428020022034104490d08200228028416210720022f018216210f20022d008116210a20012802002206280000210e20012003417c6a3602042001200641046a36020020022903d810220b4220882005290300220c422086842108200ba7221241807e71211a200c422088211020022f01e810211b20022d00ea10211f20022f00eb10211c20022800ed10211d0c5e0b4111210d410021120c5c0b20194104490d062005280002210720012003417a6a3602042001200541066a36020020024180166a200110e7012002280280162212450d06201241807e71211a2002290284162108420021104112210d0c5b0b20024180166a200110930120022d0080164101460d05200428020022054104490d05200241a0166a310000211020024198166a290300210b20024190166a290300210c20024188166a2903002113200228028416210720022f018216210f20022d008116210a20012802002203280000210e20012005417c6a3602042001200341046a3602002013422088200c422086842108200b422888201042188684a7211d200c42208821102013a7221241807e71211a200b421888a7211c200b421088a7211f200ba7211b4113210d0c5b0b200241d0026a200110db0420022903d002a70d0420022903d802220b422088200241e0026a290300220c422086842108200c4220882110200ba7221241807e71211a4114210d0c590b200241f0026a200110ab0120022802f0020d0320022802f4022107200241e8026a200110ab0120022802e8020d0320022802ec02221241807e71211a4115210d0c580b20024180166a200110930120022d0080164101460d02200428020022054104490d0220024190166a290300210b20024188166a290300210c2002419d166a280000211d2002419b166a2f0000211c2002419a166a2d0000211f20024198166a2f0100211b200228028416210720022f018216210f20022d008116210a20012802002203280000210e20012005417c6a3602042001200341046a360200200c422088200b422086842108200b4220882110200ca7221241807e71211a4116210d0c580b20024180166a200110e5012002280280162207450d01200229028416220b4220882108200ba7221241807e71211a420021104117210d0c560b200e41ff01714102470d002009450d002011102e0b2000411c3602000c5b0b02402007450d0020012003417e6a3602042001200541026a3602000b2000411c3602000c5a0b02402007450d0020052d0001210620012003417e6a3602042001200541026a3602004100210502400240024020060e020001030b200241b0186a200110990320022d00b0184101460d0220024180166a200241b0186a41017241c00110e9081a200241f8026a200110ab0120022802f8020d022004280200220620022802fc022203490d022003417f4c0d570240024020030d00410121050c010b200310322205450d5a200428020021060b20062003490d0120052001280200200310e9082106200128020422072003490d1d2001200720036b3602042001200128020020036a3602002006450d022003ad2208422086200884210820024198086a20024180166a41c00110e9081a0b20024198126a20024198086a41c00110e9081a200041086a20083702002000200536020420004109360200200041106a20024198126a41c00110e9081a200041d0016a200241d8106a41e00010e9081a0c5b0b2005102e0b2000411c3602000c590b02402007450d0020052d0001210620012003417e6a22073602042001200541026a360200024002400240024020060e03000102040b200241b0186a200110c80620022903b81822084202510d0320022802bc18210520022802b418210320022802b018210620024198086a200241c0186a41e40010e9081a200241a8196a280200210720022802ac19210420022802a419210a20024180166a200241b0186a4180016a41800110e9081a200241b0186a200110f70120022802b418450d032008a72101200241bc186a290200210b20022802b018210e20022902b418210c200241880b6a20024198086a41e40010e9081a20024198126a20024180166a41800110e9081a200c422088200b422086842108200b422088210b200ca721094101210d0c020b200241b0186a200110c80620022903b81822084202510d0220022802bc18210520022802b418210320022802b0182106200241980f6a200241c0186a41e40010e9081a200241a8196a280200210720022802ac19210420022802a419210a20024180166a200241b0186a4180016a41800110e9081a200241b0186a200110f70120022802b418450d022008a72101200241bc186a290200210b20022802b018210e20022902b418210c20024198156a200241980f6a41e40010e9081a20024198086a20024180166a41800110e9081a200241880b6a20024198156a41e40010e9081a20024198126a20024198086a41800110e9081a200c422088200b422086842108200b422088210b200ca721094102210d0c010b20074104490d012005280002210e20012003417a6a22063602042001200541066a36020020064104490d01200528000621092001200341766a36020420012005410a6a360200200241880b6a20024180166a41e40010e9081a20024198126a200241b0186a41800110e9081a4103210d0b200241a00a6a200241880b6a41e40010e9081a200241d8106a20024198126a41800110e9081a2000411c6a200b3e0200200041146a20083702002000412c6a2005360200200041286a2001360200200041246a2003360200200041206a2006360200200041106a20093602002000410c6a200e360200200041086a200d3602002000410a360200200041306a200241a00a6a41e40010e9081a2000419c016a200436020020004198016a200736020020004194016a200a360200200041a0016a200241d8106a41800110e9081a200041a8026a200241e80e6a41086a290300370300200041a0026a20022903e80e3703000c590b2000411c3602000c580b2007450d4e20052d0001210620012003417e6a22073602042001200541026a36020020060d4e20074104490d4e2005280002210620012003417a6a3602042001200541066a36020020024190036a200110ab012002280290030d4e200428020022032002280294032205490d4e2005417f4c0d520240024020050d00410121070c010b200510322207450d55200428020021030b0240024020032005490d0020072001280200200510e908210e2001280204220320054f0d012005200341b8b2c0001056000b2007102e0c4f0b2001200320056b3602042001200128020020056a360200200e450d4e2005ad2208422086200884211020024188036a200110ab010240024002402002280288030d00200228028c03220a2004280200410c6e22052005200a4b1bad420c7e2208422088a70d552008a72205417f4c0d550240024020050d00410421090c010b2005102c2209450d580b2005410c6ead21080240024002400240200a450d00034020024180036a200110ab012002280280030d04200428020022032002280284032205490d042005417f4c0d5a0240024020050d00410121070c010b200510322207450d5d200428020021030b20032005490d0320072001280200200510e9082107200128020422032005490d1f2001200320056b3602042001200128020020056a3602002007450d0402402008422088220ba722032008a7470d00200341016a220d2003490d5b2003410174220f200d200d200f491b220d4104200d41044b1bad420c7e220b422088a745410274210d200ba7210f0240024020030d0020024100360298080c010b200241043602a008200220093602980820022003410c6c36029c080b20024198126a200f200d20024198086a107d20022802a012210d2002280298124101460d03200228029c1221092008422088220ba72103200d410c6ead21080b20092003410c6c6a22032005ad220c422086200c8437020420032007360200200b422086200842ffffffff0f83844280808080107c2108200a417f6a220a0d000b0b2009450d032002200936028816200428020021052002200837028c1620022010370380162010a7210320054104490d0420012802002207280000210a20012005417c6a22043602042001200741046a36020020044104490d042007280004210d2001200541786a22043602042001200741086a36020020044104490d04200728000821092001200541746a36020420012007410c6a36020020024180166a410c6a2902002108200229028416210b20024180166a200110a701200b422088a721042008422088a721012008a7210720022d0080164101470d0502402003450d00200e102e0b02402001450d002001410c6c21052004210103400240200141046a280200450d002001280200102e0b2001410c6a2101200541746a22050d000b0b2007450d542007410c6c450d542004102e0c540b200d0d590c570b2007102e0b02402008422088a72201450d002001410c6c21052009210103400240200141046a280200450d002001280200102e0b2001410c6a2101200541746a22050d000b0b2008a72201450d002001410c6c450d002009102e0b2010a7450d50200e102e0c500b2008422088a7210102402003450d00200e102e0b2008a7210302402001450d002001410c6c21052009210103400240200141046a280200450d002001280200102e0b2001410c6a2101200541746a22050d000b0b2003450d4f2003410c6c450d4f2009102e0c4f0b200e450d4e200241b9166a290000210820024180166a41316a290000210c200241ad166a2800002105200241ab166a2f0000210f200241a6166a280100211120024180166a41246a2f01002112200241a3166a2d0000211b200241a1166a2f0000211c20024199166a290000211020024195166a280000211d20024191166a280000211f2002418d166a280000211e20024180166a410b6a2f000021272002418a166a2d00002126200228018616212020022f018416212120022d008316212220022f00811621232000200241aa166a2d00003a00552000201b3a004e200020263a0035200020223a002e200020063602042000410b360200200041e4006a2008370200200041dc006a200c370200200041d8006a2005360200200041d6006a200f3b0100200041d1006a2011360000200041cf006a20123b0000200041cc006a201c3b0100200041c4006a2010370200200041c0006a201d3602002000413c6a201f360200200041386a201e360200200041366a20273b0100200041316a20203600002000412f6a20213b00002000412c6a20233b0100200041286a2009360200200041246a200d360200200041206a200a3602002000411c6a2001360200200041186a2007360200200041146a2004360200200041106a200ba73602002000410c6a2003360200200041086a200e360200200041ec006a200241b0186a41c40110e9081a0c570b02402007450d0020012003417e6a3602042001200541026a3602000b2000411c3602000c560b2007450d4a20052d0001210720012003417e6a22063602042001200541026a360200410d211b024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020070e19000102030405060708090a0b640c0d0e0f1011121314151617630b41002107200241003a00a0162003417d6a21030240034020062007460d0120024180166a20076a200520076a220441026a2d00003a0000200120033602042001200441036a3602002002200741016a22043a00a0162003417f6a21032004210720044120470d000b200441ff01714120490d63200228029c16211120022f019a16210f20022d009916211220022f009716210a200229008f162108200228008b16211c200228008716211d200228008316210e20022f008116210920022d008016210d20024198036a200110db0420022802980322010d63411a410120011b211b200241a8036a290300210c20022903a003210b0c640b200741ff0171450d62200241003a00a0160c620b200241b8036a200110ab0120022802b8030d6120022802bc03210e200241b0036a200110ab0120022802b0030d6120022802b403211d4102211b0c620b200241c0036a200110ab0120022802c0030d6020022802c403210e20024180166a200110b10420022d0080164102460d60200241a0166a290300210b2002419c166a280200211e2002419a166a2f0100212720024199166a2d0000211f20024195166a280000211120024193166a2f0000210f20024192166a2d0000211220024190166a2f0100210a20024188166a2903002108200228028416211c200228028016211d4200210c4103211b0c610b4104211b20064104490d5f2005280002210e20012003417a6a3602042001200541066a3602000c600b41002107200241003a00a0162003417d6a21030240034020062007460d0120024180166a20076a200520076a220441026a2d00003a0000200120033602042001200441036a3602002002200741016a22043a00a0162003417f6a21032004210720044120470d000b200441ff01714120490d5f200228029c16211120022f019a16210f20022d009916211220022f009716210a200229008f162108200228008b16211c200228008716211d200228008316210e20022f008116210920022d008016210d4105211b0c600b200741ff0171450d5e200241003a00a0160c5e0b41002107200241003a00a0162003417d6a21030240034020062007460d0120024180166a20076a200520076a220441026a2d00003a0000200120033602042001200441036a3602002002200741016a22043a00a0162003417f6a21032004210720044120470d000b200441ff01714120490d5e200228029c16211120022f019a16210f20022d009916211220022f009716210a200229008f162108200228008b16211c200228008716211d200228008316210e20022f008116210920022d008016210d4106211b0c5f0b200741ff0171450d5d200241003a00a0160c5d0b41002107200241003a00a0162003417d6a21030240034020062007460d0120024180166a20076a200520076a220441026a2d00003a0000200120033602042001200441036a3602002002200741016a22043a00a0162003417f6a21032004210720044120470d000b200441ff01714120490d5d200228029c16211120022f019a16210f20022d009916211220022f009716210a200229008f162108200228008b16211c200228008716211d200228008316210e20022f008116210920022d008016210d4107211b0c5e0b200741ff0171450d5c200241003a00a0160c5c0b41002107200241003a00a0162006411f2006411f491b20056a41036a211b417d210a0240034020062007460d0120024180166a20076a200520076a220441026a2d00003a000020012003200a6a3602042001200441036a3602002002200741016a22043a00a016200a417f6a210a2004210720044120470d000b200441ff01714120490d5c200320046b2203417e6a4104490d5c200228029c16211120022f019a16210f20022d009916211220022f009716210a200229008f162108200228008b16211c200228008716211d200228008316210e20022f008116210920022d008016210d201b280000211e20012003417a6a22063602042001200520046a220541066a220736020020064104490d5c2007350000210b2001200341766a36020420012005410a6a3602004200210c4108211b0c5d0b200741ff0171450d5b200241003a00a0160c5b0b41002107200241003a00a0162003417d6a21030240034020062007460d0120024180166a20076a200520076a220441026a2d00003a0000200120033602042001200441036a3602002002200741016a22043a00a0162003417f6a21032004210720044120470d000b200441ff01714120490d5b200228029c16211120022f019a16210f20022d009916211220022f009716210a200229008f162108200228008b16211c200228008716211d200228008316210e20022f008116210920022d008016210d4109211b0c5c0b200741ff0171450d5a200241003a00a0160c5a0b200241c8036a200110ab0120022802c8030d5920022802cc03210e410a211b0c5a0b20064104490d582005280002210e20012003417a6a3602042001200541066a360200410b211b0c590b20024180166a200110930120022d0080164101460d5720042802002203450d572002419d166a28000021112002419b166a2f0000210f2002419a166a2d0000211220024198166a2f0100210a20024190166a29030021082002418c166a280200211c20024188166a280200211d200228028416210e20022f018216210920022d008116210d200128020022052d0000210620012003417f6a22073602042001200541016a3602004100211f024002400240024002400240024020060e07060500010203045e0b4102211f0c050b4103211f0c040b4104211f0c030b4105211f0c020b4106211f0c010b4101211f0b20074110490d57200541096a290000210c2005290001210b20012003416f6a3602042001200541116a360200410c211b0c580b410e211b0c570b200241d0036a200110ab0120022802d0030d552004280200220320022802d4032205490d552005417f4c0d5b0240024020050d004101210e0c010b20051032220e450d5e200428020021030b20032005490d0a200e2001280200200510e9082103200128020422062005490d1f2001200620056b3602042001200128020020056a3602002003450d552005ad22084220862008842208422088a7211c2008a7211d410f211b0c560b200241d8036a200110ab0120022802d8030d542004280200220320022802dc032205490d542005417f4c0d5a0240024020050d004101210e0c010b20051032220e450d5d200428020021030b20032005490d09200e2001280200200510e9082103200128020422062005490d152001200620056b3602042001200128020020056a3602002003450d542005ad22084220862008842208422088a7211c2008a7211d4110211b0c550b200241e0036a200110ab0120022802e0030d532004280200220320022802e4032205490d532005417f4c0d590240024020050d004101210e0c010b20051032220e450d5c200428020021030b20032005490d08200e2001280200200510e9082103200128020422062005490d132001200620056b3602042001200128020020056a3602002003450d532005ad22084220862008842208422088a7211c2008a7211d4111211b0c540b200241e8036a200110ab0120022802e8030d522004280200220320022802ec032205490d522005417f4c0d580240024020050d004101210e0c010b20051032220e450d5b200428020021030b20032005490d07200e2001280200200510e9082103200128020422062005490d112001200620056b3602042001200128020020056a3602002003450d522005ad22084220862008842208422088a7211c2008a7211d4112211b0c530b41002107200241003a00a0162003417d6a21030240034020062007460d0120024180166a20076a200520076a220441026a2d00003a0000200120033602042001200441036a3602002002200741016a22043a00a0162003417f6a21032004210720044120470d000b200441ff01714120490d52200229008716210b2002418f166a2900002108200228029c16211120022f019a16210f20022d009916211220022f009716210a200228008316210e20022f008116210920022d008016210d200241f0036a200110ab0120022802f00322010d52200b422088a7211c200ba7211d411a411320011b211b20022802f403211e0c530b200741ff0171450d51200241003a00a0160c510b20024180166a200110930120022d0080164101460d5020024188166a290300220b422088a7211c20024190166a29030021082002419d166a28000021112002419b166a2f0000210f2002419a166a2d0000211220024198166a2f0100210a200228028416210e20022f018216210920022d008116210d200ba7211d4114211b0c510b20064104490d4f2005280002210e20012003417a6a3602042001200541066a3602004115211b0c500b20024180166a200110930120022d0080164101460d4e200428020022054104490d4e20024190166a290300210820024188166a290300210b2002419d166a28000021112002419b166a2f0000210f2002419a166a2d0000211220024198166a2f0100210a200228028416210e20022f018216210920022d008116210d20012802002203280000211e20012005417c6a3602042001200341046a360200200b422088a7211c200ba7211d4116211b0c4f0b41002107200241003a00a0162006411f2006411f491b20056a41036a210f417d21040240034020062007460d0120024180166a20076a200520076a220a41026a2d00003a00002001200320046a3602042001200a41036a3602002002200741016a220a3a00a0162004417f6a2104200a2107200a4120460d4e0c000b0b200741ff0171450d4d200241003a00a0160c4d0b41002107200241003a00a016417d21040240034020062007460d0120024180166a20076a200520076a220a41026a2d00003a00002001200320046a3602042001200a41036a3602002002200741016a220a3a00a0162004417f6a2104200a2107200a4120460d4c0c000b0b200741ff0171450d4c200241003a00a0160c4c0b200241f8036a200110ab0120022802f8030d4b20022802fc03210e4119211b0c4c0b200e102e0c4a0b20024198086a200110c906024020022d0098084107460d0020024198126a41306a20024198086a41306a290300220837030020024198126a41286a20024198086a41286a290300220b37030020024198126a41206a20024198086a41206a290300220c37030020024198126a41186a20024198086a41186a290300221037030020024180166a410c6a20024198086a41086a29030037020020024180166a41146a20024198086a41106a29030037020020024180166a411c6a201037020020024180166a41246a200c37020020024180166a412c6a200b37020020024180166a41346a20083702002002200229039808370284162000410e36020020002002290280163702042000410c6a20024180166a41086a290200370200200041146a20024180166a41106a2902003702002000411c6a20024180166a41186a290200370200200041246a20024180166a41206a2902003702002000412c6a20024180166a41286a290200370200200041346a20024180166a41306a2902003702002000413c6a200241b8166a280200360200200041c0006a200241b0186a41f00110e9081a0c550b2000411c3602000c540b2007450d4520052d0001210620012003417e6a22073602042001200541026a36020002400240024002400240024002400240024020060e060001020304054e0b20024180046a200110ab010240200228028004450d0020024100360280160c4e0b20024180166a20012002280284041092012002280280162206450d4d200228028416210e20042802002205450d0520024188166a2802002109200128020022072d0000210a20012005417f6a22033602042001200741016a3602000240024002400240200a0e020201000b200241023a0098120c090b20024180166a2001109301024020022d0080164101470d00200241023a0098120c090b200241d8106a41186a20024199166a290000370300200241e8106a20024191166a290000370300200241e0106a20024189166a290000370300200220022900811622083703d810200241e7106a290000210b20022900df10210c20022f00ef10210720022d00f110210520022f01f210210320022802f410210a20022f00d910210d200220022800db10220f36029c122002200d3b019a12200220083c009912200241013a0098122002200a36009d08200220033b009b08200220053a009a08200220073b019808200f411876210a200428020021030c010b200241003a00981220022d009f12210a0b20034104490d0620022d009a12210d20022f019812210f2002290099082110200228009b1221052002200c3700990f200241a10f6a200b37000020012802002204350000210820012003417c6a3602042001200441046a3602002002200a3a00980f200220073a00a90f200c423888200b42088684a72104200f200d4110747222074180feff0771410876210a2010423888a721012010421888a7210d2010420888a7210f200c421888a72111200b421888a7211c20022802980f210320022f01a80f21122010a7211b4101211d0c4c0b200110cb042205450d4c20024188046a200110ab012002280288040d06200228028c0421034102211d420021084100211c410021090c4b0b20024198046a200110ab012002280298040d4b200228029c042105200110cb042203450d4b20024190046a200110ab0102402002280290040d0020022802940421114103211d420021084100211c410021090c490b2003108b022003102e0c4b0b41002106200241003a00a0162003417d6a21030240034020072006460d0120024180166a20066a200520066a220a41026a2d00003a0000200120033602042001200a41036a3602002002200641016a220a3a00a0162003417f6a2103200a2106200a4120460d4a0c000b0b200641ff0171450d4a200241003a00a0160c4a0b41002106200241003a00a0162003417d6a21030240034020072006460d0120024180166a20066a200520066a220441026a2d00003a0000200120033602042001200441036a3602002002200641016a22043a00a0162003417f6a21032004210620044120470d000b200441ff01714120490d4a200229009716210b2002419f166a31000021132002418f166a290000210c2002290087162110200228008316210520022f008116210a20022d0080162107200241c0046a200110ab0120022802c0040d4a20022802c4042106200241b0046a200110d90420022903b004a70d4a20022903b8042108200241a8046a200110ab0120022802a8040d4a200b422888201342188684a7210d200b421888a7210f200b421088a7211b200ba7211220022802ac04210e200c422088a7211c2010422088a72111200ca721042010a721034105211d0c470b200641ff0171450d49200241003a00a0160c490b41002106200241003a00a0162003417d6a21030240034020072006460d0120024180166a20066a200520066a220441026a2d00003a0000200120033602042001200441036a3602002002200641016a22043a00a0162003417f6a21032004210620044120460d460c000b0b200641ff0171450d48200241003a00a0160c480b200241023a0098120b200e41ffffff3f71450d462006102e0c460b2005108b022005102e0c450b2007450d3f20052d0001210620012003417e6a22113602044102210d2001200541026a3602000240024002400240024020060e06004301020304440b200241e0046a200110ab01024020022802e004450d0020024100360280160c440b20024180166a200120022802e4041092012002280280162207450d43200229028416210b200241c8046a200110db04024020022903c804a70d0020022903d0042208423888200241d8046a290300220c42088684a7210f200c421888210c200b422088a7210a200ba7210e4101210d0c430b200b42ffffff3f83500d432007102e0c430b200241e8046a200110ab0120022802e8040d4220022802ec04210720023500eb10200241ef106a31000042208684210c20023502e010200241e4106a330100200241e6106a3100004210868442208684210820022903f010210b20022800e710210f20022802dc10210a4103210d0c410b2011450d4120052d0002210620012003417d6a3602042001200541036a3602004104210d4100210f4200210c410021070240024020060e03420001430b410121070c410b200241f0046a200110ab0120022802f0040d4120022802f404210e410221070c400b20024180166a200110e60120022d0080164105460d4020024198086a41086a20024194166a290200370300200241a8086a2002419c166a29020037030020022002418c166a2902003703980820024180166a41086a280200210a200228028416210e2002280280162107024020042802002205450d00200128020022032d0000210620012005417f6a3602042001200341016a360200410021090240024020060e020100020b410121090b2002290398082208423888200241a0086a290300220b42088684a7210f200b421888210c200241a8086a290300210b4105210d0c400b200741ff01714102470d40200a450d40200e102e0c400b20114104490d3f2005280002210720012003417a6a22063602044106210d2001200541066a36020020064104490d3f2005280006210e2001200341766a36020420012005410a6a3602004100210f4200210c0c3e0b2007450d3c20052d0001210620012003417e6a3602042001200541026a3602004107210502400240024002400240024020060e0700010203040541420b20024180166a20011093014101210520022d0080164101460d4120024190166a290300220b422088a7210920024188166a29030021082002419d166a28000021262002419b166a2f000021122002419a166a2d0000212020024198166a2f0100210f200228028416210320022f018216210720022d0081162104200ba7210d0c400b20024180166a200110930120022d0080164101460d40200241d8106a41186a200241a0166a2d00003a0000200241d8106a41106a20024180166a41186a290300220b37030020024180166a41106a290300220c422088a7210920024188166a2903002108200228028416210320022f018216210720022d008116210420022800ed10212620022f00eb10211220022d00ea102120200ba7210f200ca7210d410221050c3f0b20024180166a200110930120022d0080164101460d3f200241980f6a41086a220520024180166a41106a2206290300370300200241980f6a41106a20024180166a41186a220a290300370300200241980f6a41186a220e200241a0166a2d00003a0000200220024180166a41086a220d2903003703980f200228028416210320022f018216210720022d008116210420024180166a200110930120022d0080164101460d3f20022903a80f2210422888200e31000042188684a721262010421888a721122010421088a7212020052903002213422088a721092006290300210c200d290300210b2002419d166a280000211c2002419b166a2f0000211b2002419a166a2d0000211d200a2f01002111200228028416211f20022f018216211e20022d008116212720022903980f21082010a7210f2013a7210d410321050c3e0b200241f8046a200110ab01024020022802f804450d0020024100360298080c3f0b20024198086a200120022802fc041092012002280298082203450d3e200229029c0821082002418c166a290200210c200229028416210b20022d009c12212720022f009d12211e20022f019416211120022d009616211d20022f009716211b200228009916211c20022d009d16210e20022f019e16210a41042105410021094100210d0c3d0b20024180166a200110930120022d0080164101460d3d20024190166a290300220b422088a7210920024188166a29030021082002419d166a28000021262002419b166a2f000021122002419a166a2d0000212020024198166a2f0100210f200228028416210320022f018216210720022d0081162104200ba7210d410521050c3c0b20024180166a200110930120022d0080164101460d3c200241f0106a20024199166a290000370300200241e8106a20024191166a290000370300200241e0106a20024189166a2900003703002002200229008116220b3703d81020022f00d910210720022800db10210320022900df10210820022800e710210d20022800eb10210920022f00ef10210f20022d00f110212020022f01f210211220022802f4102126200ba72104410621050c3b0b02402007450d0020052d0001210620012003417e6a3602042001200541026a3602000240024002400240024020060e03000102050b20024180056a200110db04200229038005a70d0420024190056a2903002108200229038805210b20024180166a200110e60120022d0080164105460d042002290380162214422088a7210120024190166a290300210c20024188166a2903002110200241a0166a280200210520024198166a29030021132014a72103410121060c030b20024198056a200110ab0120022802980522010d034104410220011b2106200228029c0521030c010b200241a0056a200110ab0120022802a00522010d024104410320011b210620022802a40521030b0b20004112360200200041386a2008370200200041306a200b3702002000411c6a200c370200200041146a20103702002000412c6a2005360200200041246a2013370200200041106a20013602002000410c6a2003360200200041086a2006360200200041c0006a200241b0186a41f00110e9081a0c510b2000411c3602000c500b2007450d3820052d0001210620012003417e6a22073602042001200541026a360200024002400240024002400240024020060e0500010203043f0b20024180166a200110930120022d0080164101460d3e20024190166a2204290300210820024188166a2212290300210b2002419d166a220928000021072002419b166a220d2f0000210a2002419a166a220f2d0000210e20024180166a41186a22112f0100211b200228028416210520022f018216210620022d008116210320024180166a200110a80120022d0080164101460d3e2002200b3703d810200220073600ed102002200a3b00eb102002200e3a00ea102002201b3b01e810200220083703e010200241b0166a2903002113200241a8166a2903002110200241c0166a2f0100211b200241bc166a280200211c200241b8166a280200211d200241a4166a2802002107200241a2166a2f0100210a200241a1166a2d0000210e20092800002109200d2f0000210d200f2d0000210f20112f010021112004290300210c2002418c166a280200211f201228020021122002350081162002330085162002310087164210868442208684420886200241d8106a41186a3100008421142008423088a721012008422888a7210420022903e8102118410121270c3c0b200241003a0094162007450d3d20052d0002210620012003417d6a22073602042001200541036a360200200241013a009416200220063a00801620070d1a0c3c0b20024180166a200110930120022d0080164101460d3c200241980f6a41086a20024180166a41106a2212290300370300200241980f6a41106a20024180166a41186a2211290300370300200241980f6a41186a200241a0166a2d00003a0000200220024180166a41086a221e2903003703980f200228028416210520022f018216210620022d008116210320024180166a200110a80120022d0080164101460d3c200241b0166a2903002113200241a8166a2903002110200241c0166a2f0100211b200241bc166a280200211c200241b8166a280200211d200241a4166a2802002107200241a2166a2f0100210a200241a1166a2d0000210e2002419d166a28000021092002419b166a2f0000210d2002419a166a2d0000210f20112f010021112012290300210c2002418c166a280200211f201e28020021122002350081162108200233008516210b2002310087162114200241a8056a200110ab0120022802a8050d3c2004280200222620022802ac052227490d3c2027417f4c0d4e0240024020270d004101211e0c010b20271032221e450d51200428020021260b20262027490d02201e2001280200202710e9082104200128020422262027490d112001202620276b3602042001200128020020276a3602002004450d3c2008200b20144210868442208684420886200241b00f6a3100008421142027ad22084220862008842217422088a72121200241a00f6a2903002208423088a721012008422888a7210420022903a80f211820022903980f210b2017a72120410321270c3a0b200241b0056a200110ab0120022802b0050d3b2004280200220620022802b4052203490d3b2003417f4c0d4d0240024020030d00410121050c010b200310322205450d50200428020021060b20062003490d0220052001280200200310e9082106200128020422072003490d0f2001200720036b3602042001200128020020036a3602002006450d3b2003ad2208422086200884210b410421270c390b200241003a0094162007450d3a20052d0002210620012003417d6a22073602042001200541036a360200200241013a009416200220063a00801620070d160c360b201e102e0c390b2005102e0c380b02402007450d0020052d0001210620012003417e6a3602042001200541026a3602004101210e024002400240024002400240024020060e0403000102070b20024180166a200110e60120022d0080164105460d06200229038016220b422088a7210520024190166a290300211020024188166a2903002108200241a0166a280200210720024198166a290300210c200ba721034102210e0c020b20024180166a200110e60120022d00801622034105460d0520024198126a41086a20024194166a29020037030020024198126a41106a2002419c166a28020036020020022002418c166a2902003703981220024180166a41086a280200210e20022802841621050240200428020022044110490d0020022d008316210920022f008116210d200241a0166a28020021072001280200220641086a290000210b200629000021132001200641106a3602002001200441706a220a360204200a4110490d00200641186a2900002114200629001021182001200441606a220a3602042001200641206a360200200a4104490d002006280020210a20012004415c6a3602042001200641246a360200200241ac086a200241a8126a280200360200200241a4086a20024198126a41086a2903003702002002200e36029808200220022903981237029c08200d200941107472410874200372210320024198086a41086a2903002110200229039808210820022903a808210c420021154103210e420021280c020b20034102470d05200e0d040c050b20024180166a200110e60120022d0080164105460d0420024180166a41106a220a2903002110200241a0166a220e280200210720024198166a2209290300210c20024188166a220629030021082002280284162105200228028016210320024180166a200110e60120022d0080164105460d022006290300210b200228028416210f200228028016210d200428020022044110490d01200a2903002118200e280200210a200929030021142001280200220641086a2900002117200629000021132001200641106a3602002001200441706a220e360204200e4110490d01200641186a2900002116200629001021292001200441606a22093602042001200641206a3602004104210e20094104490d012006280020210920012004415c6a3602042001200641246a36020020022009360290162017422086201342208884212820134220862115200fad422086200dad8421132002202937038016200228028416210d200229039016212a2029a721090b20004114360200200041f8006a202a370200200041f0006a2016370200200041dc006a20283e0200200041d4006a2015370200200041c0006a2018370200200041386a200b3702002000411c6a2010370200200041146a2008370200200041ec006a200d360200200041e8006a2009360200200041e0006a2017370200200041d0006a200a360200200041c8006a2014370200200041306a20133702002000412c6a2007360200200041246a200c370200200041086a200e3602002000410c6a2005ad4220862003ad8437020020004180016a200241b0186a41b00110e9081a0c520b200d41ff01714102470d00200ba7450d00200f102e0b200341ff01714102470d012008a7450d010b2005102e0b2000411c3602000c4e0b20024180166a200110ca06024020022f0180164104460d0020024198086a41086a20024180166a41086a29030022083703002002200229038016220b37039808200041153602002000200b3702042000410c6a2008370200200041146a200241b0186a419c0210e9081a0c4e0b2000411c3602000c4d0b2007450d2f20052d0001210720012003417e6a222b3602042001200541026a3602004104210e0240024020070e0f000126282524232221201f1e1d1c1b310b20024180166a20011093014101210e20022d0080164101460d30200241800e6a41086a200241a00a6a41086a280000360200200241fc0d6a41026a200241e80e6a41026a2d00003a0000200220022900a00a3703800e200220022f00e80e3b01fc0d20024180166a41106a290300210b20024180166a41086a29030021082002419d166a280000210f2002419b166a2f000021122002419a166a2d0000211b20024180166a41186a2f01002111200228028416210620022f018216212c20022d008116212d200241e00d6a41106a20024198086a41106a290000370300200241e00d6a41086a20024198086a41086a29000037030020022002290098083703e00d200241dc0d6a41026a200241b80e6a41026a2d00003a0000200220022f00b80e3b01dc0d200241c00d6a41106a20024198126a41106a290000370300200241c00d6a41086a20024198126a41086a29000037030020022002290098123703c00d200241bc0d6a41026a200241900e6a41026a2d00003a0000200220022f00900e3b01bc0d200241a00d6a41106a200241d8106a41106a290000370300200241a00d6a41086a200241d8106a41086a290000370300200220022900d8103703a00d2002419c0d6a41026a200241a0146a41026a2d00003a0000200220022f00a0143b019c0d200241800d6a41106a200241980f6a41106a290000370300200241800d6a41086a200241980f6a41086a290000370300200220022900980f3703800d20024198156a41206a200241b0186a41206a28000036020020024198156a41186a200241b0186a41186a29000037030020024198156a41106a200241b0186a41106a29000037030020024198156a41086a200241b0186a41086a290000370300200220022900b018370398150c270b200241b8056a200110ab0120022802b8050d2f20022802bc052207200428020041c8006e2205200520074b1bad42c8007e2208422088a70d472008a72205417f4c0d470240024020050d00410421060c010b2005102c2206450d4a0b200541c8006ead210802400240024002402007450d0020024180166a410c6a211c20024180166a410172211e034020024180166a200110ec0302400240024020022d00801622034106460d00200241a0146a41026a220e201e41026a2d00003a0000200241a00a6a41086a2209201c41086a290200370300200241a00a6a41106a220d201c41106a2902003703002002201e2f00003b01a0142002201c2902003703a00a200228028416210a2002280288162105200241b0186a200110ec0320022d00b0184106470d0120034101470d002005450d00200a102e0b410621030c010b200241b4146a41026a200e2d00003a0000200241e80e6a41086a2009290300370300200241e80e6a41106a200d29030037030020024198086a41086a200241b0186a41086a29030037030020024198086a41106a200241b0186a41106a29030037030020024198086a41186a200241b0186a41186a29030037030020024198086a41206a200241b0186a41206a280200360200200220022f01a0143b01b414200220022903a00a3703e80e200220022903b01837039808200a211d2005211f0b200241b0146a41026a2205200241b4146a41026a2d00003a0000200241b80e6a41086a220a200241e80e6a41086a290300370300200241b80e6a41106a220e200241e80e6a41106a29030037030020024198126a41086a220920024198086a41086a29030037030020024198126a41106a220d20024198086a41106a29030037030020024198126a41186a220f20024198086a41186a29030037030020024198126a41206a221120024198086a41206a280200360200200220022f01b4143b01b014200220022903e80e3703b80e20022002290398083703981220034106460d03200241ac146a41026a221220052d00003a0000200241900e6a41086a221b200a290300370300200241900e6a41106a220a200e290300370300200241d8106a41086a220e2009290300370300200241d8106a41106a2209200d290300370300200241d8106a41186a220d200f290300370300200241d8106a41206a220f2011280200360200200220022f01b0143b01ac14200220022903b80e3703900e20022002290398123703d81002402008422088220ba722052008a7470d00200541016a22112005490d4d20054101742227201120112027491b22114104201141044b1bad42c8007e220b422088a7454102742111200ba721270240024020050d00200241003602b0180c010b200241043602b818200220063602b0182002200541c8006c3602b4180b20024180166a20272011200241b0186a107d20022802881621112002280280164101460d0320022802841621062008422088220ba72105201141c8006ead21080b2006200541c8006c6a220520033a0000200541086a201f360000200541046a201d360000200541036a20122d00003a0000200520022f01ac143b00012005410c6a20022903900e370000200541146a201b2903003700002005411c6a200a290300370000200541346a20092903003700002005412c6a200e2903003700002005413c6a200d290300370000200541246a20022903d810370000200541c4006a200f280200360000200b422086200842ffffffff0f83844280808080107c21082007417f6a22070d000b0b2006450d32200241b0186a200110ec0320022d00b0184106460d30200241ec0e6a200241bc186a22032d00003a00002002200241b0186a41086a22072802003602e80e200241bd186a280000210f200241c1186a2d0000210d200241c2186a2f01002109200241c4186a220e280200210a200241c8186a22112903002114200241d0186a2212350200210b20022802b418212c20022802b0182105200241b0186a200110ec0320022d00b0184106460d2f200241a00a6a41086a2012280200360200200220112903003703a00a200e280200211d2003290200210c2007280200210720022802b418212d20022802b0182103200241b0186a200110ec0320022d00b018221c4106460d2e200241b4146a41026a20022d00b3183a0000200241d8106a41086a200241c4186a220e290200370300200241d8106a41106a200241cc186a2211290200370300200220022f00b1183b01b4142002200241bc186a22122902003703d810200241b0186a41086a221b280200211f20022802b418211e200241b0186a200110ec0320022d00b01822274106460d2d200241a0146a41026a20022d00b3183a000020024198126a41086a200e29020037030020024198126a41106a2011290200370300200220022f00b1183b01a0142002201229020037039812201b280200212620022802b4182120200241b0186a200110ec0320022d00b01822214106460d2c200241920e6a20022d00b3183a000020024198086a41086a200241c4186a290200370300200241a8086a200241cc186a290200370300200220022f00b1183b01900e2002200241bc186a29020037039808200241b0186a41086a280200212220022802b41821232004280200220e450d2b200128020022042d000021112001200e417f6a22123602042001200441016a3602004100212b420021104100211920110e0228022b0b20110d4b0c490b02402008422088a72201450d002006200141c8006c6a2105200621010340024020012d00004101470d00200141086a280200450d00200141046a280200102e0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102e0b200141c8006a22012005470d000b0b2008a72201450d30200141c8006c450d300c2f0b200241003a00c4182012450d2820042d000121112001200e417e6a22123602042001200441026a360200200241013a00c418200220113a00b0182012450d2720042d000221112001200e417d6a22123602042001200441036a360200200241023a00c418200220113a00b1182012450d2720042d000321112001200e417c6a22123602042001200441046a360200200241033a00c418200220113a00b2182012450d2720042d000421112001200e417b6a22123602042001200441056a360200200241043a00c418200220113a00b3182012450d2720042d000521112001200e417a6a22123602042001200441066a360200200241053a00c418200220113a00b4182012450d2720042d000621112001200e41796a22123602042001200441076a360200200241063a00c418200220113a00b5182012450d2720042d000721112001200e41786a22123602042001200441086a360200200241073a00c418200220113a00b6182012450d2720042d000821112001200e41776a22123602042001200441096a360200200241083a00c418200220113a00b7182012450d2720042d000921112001200e41766a221236020420012004410a6a360200200241093a00c418200220113a00b8182012450d2720042d000a21112001200e41756a221236020420012004410b6a3602002002410a3a00c418200220113a00b9182012450d2720042d000b21112001200e41746a221236020420012004410c6a3602002002410b3a00c418200220113a00ba182012450d2720042d000c21112001200e41736a221236020420012004410d6a3602002002410c3a00c418200220113a00bb182012450d2720042d000d21112001200e41726a221236020420012004410e6a3602002002410d3a00c418200220113a00bc182012450d2720042d000e21112001200e41716a221236020420012004410f6a3602002002410e3a00c418200220113a00bd182012450d2720042d000f21112001200e41706a22123602042001200441106a3602002002410f3a00c418200220113a00be182012450d2720042d001021112001200e416f6a22123602042001200441116a360200200241103a00c418200220113a00bf182012450d2720042d001121112001200e416e6a22123602042001200441126a360200200241113a00c418200220113a00c0182012450d2720042d001221112001200e416d6a22123602042001200441136a360200200241123a00c418200220113a00c1182012450d2720042d001321112001200e416c6a22123602042001200441146a360200200241133a00c418200220113a00c2182012450d2720042d001421112001200e416b6a3602042001200441156a360200200220113a00c31820022802b418220441087420022802b018221a4118767221242004411876212e201a410876212520022903b818211020022802c018212b410121190c250b2005200641b8b2c0001056000b2005200641b8b2c0001056000b2005200641b8b2c0001056000b2005200741b8b2c0001056000b2005200741b8b2c0001056000b2005200741b8b2c0001056000b2005200741b8b2c0001056000b2005200741b8b2c0001056000b2005200741b8b2c0001056000b2003200741b8b2c0001056000b2027202641b8b2c0001056000b2005200641b8b2c0001056000b2005200341b8b2c0001056000b2003200741b8b2c0001056000b2005200741b8b2c0001056000b2005200341b8b2c0001056000b2005200741b8b2c0001056000b20052d0003210620012003417c6a22073602042001200541046a360200200241023a009416200220063a0081162007450d1f20052d0004210620012003417b6a22073602042001200541056a360200200241033a009416200220063a0082162007450d1f20052d0005210620012003417a6a22073602042001200541066a360200200241043a009416200220063a0083162007450d1f20052d000621062001200341796a22073602042001200541076a360200200241053a009416200220063a0084162007450d1f20052d000721062001200341786a22073602042001200541086a360200200241063a009416200220063a0085162007450d1f20052d000821062001200341776a22073602042001200541096a360200200241073a009416200220063a0086162007450d1f20052d000921062001200341766a220736020420012005410a6a360200200241083a009416200220063a0087162007450d1f20052d000a21062001200341756a220736020420012005410b6a360200200241093a009416200220063a0088162007450d1f20052d000b21062001200341746a220736020420012005410c6a3602002002410a3a009416200220063a0089162007450d1f20052d000c21062001200341736a220736020420012005410d6a3602002002410b3a009416200220063a008a162007450d1f20052d000d21062001200341726a220736020420012005410e6a3602002002410c3a009416200220063a008b162007450d1f20052d000e21062001200341716a220736020420012005410f6a3602002002410d3a009416200220063a008c162007450d1f20052d000f21062001200341706a22073602042001200541106a3602002002410e3a009416200220063a008d162007450d1f20052d0010210620012003416f6a22073602042001200541116a3602002002410f3a009416200220063a008e162007450d1f20052d0011210620012003416e6a22073602042001200541126a360200200241103a009416200220063a008f162007450d1f20052d0012210620012003416d6a22073602042001200541136a360200200241113a009416200220063a0090162007450d1f20052d0013210620012003416c6a22073602042001200541146a360200200241123a009416200220063a0091162007450d1f20052d0014210620012003416b6a22073602042001200541156a360200200241133a009416200220063a00921620070d1e0c1f0b20052d0003210620012003417c6a22073602042001200541046a360200200241023a009416200220063a0081162007450d2120052d0004210620012003417b6a22073602042001200541056a360200200241033a009416200220063a0082162007450d2120052d0005210620012003417a6a22073602042001200541066a360200200241043a009416200220063a0083162007450d2120052d000621062001200341796a22073602042001200541076a360200200241053a009416200220063a0084162007450d2120052d000721062001200341786a22073602042001200541086a360200200241063a009416200220063a0085162007450d2120052d000821062001200341776a22073602042001200541096a360200200241073a009416200220063a0086162007450d2120052d000921062001200341766a220736020420012005410a6a360200200241083a009416200220063a0087162007450d2120052d000a21062001200341756a220736020420012005410b6a360200200241093a009416200220063a0088162007450d2120052d000b21062001200341746a220736020420012005410c6a3602002002410a3a009416200220063a0089162007450d2120052d000c21062001200341736a220736020420012005410d6a3602002002410b3a009416200220063a008a162007450d2120052d000d21062001200341726a220736020420012005410e6a3602002002410c3a009416200220063a008b162007450d2120052d000e21062001200341716a220736020420012005410f6a3602002002410d3a009416200220063a008c162007450d2120052d000f21062001200341706a22073602042001200541106a3602002002410e3a009416200220063a008d162007450d2120052d0010210620012003416f6a22073602042001200541116a3602002002410f3a009416200220063a008e162007450d2120052d0011210620012003416e6a22073602042001200541126a360200200241103a009416200220063a008f162007450d2120052d0012210620012003416d6a22073602042001200541136a360200200241113a009416200220063a0090162007450d2120052d0013210620012003416c6a22073602042001200541146a360200200241123a009416200220063a0091162007450d2120052d0014210620012003416b6a22073602042001200541156a360200200241133a009416200220063a00921620070d1f0c210b2000411c3602000c380b024002402007450d0020052d0001210620012003417e6a3602042001200541026a36020020060d0020024198126a2001109606200228029812450d00200241d8106a20024198126a41c00110e9081a20024198126a200110a401024002402002290398124201510d00200241880b6a41286a2205200241c8126a290300370300200241880b6a41206a220320024198126a41286a290300370300200241880b6a41186a220620024198126a41206a290300370300200241880b6a41106a220720024198126a41186a290300370300200241880b6a41086a220a20024198126a41106a290300370300200220022903a0123703880b2004280200220441044f0d010b200241d8106a109b060c010b2001280200220e280000210920012004417c6a3602042001200e41046a36020020022802d8102104200241980f6a200241d8106a41047241bc0110e9081a200241a00a6a41286a2005290300370300200241a00a6a41206a2003290300370300200241a00a6a41186a2006290300370300200241a00a6a41106a2007290300370300200241a00a6a41086a200a290300370300200220022903880b3703a00a2004450d00200241b0186a41286a200241a00a6a41286a290300370300200241b0186a41206a200241a00a6a41206a290300370300200241b0186a41186a200241a00a6a41186a290300370300200241b0186a41106a200241a00a6a41106a290300370300200241b0186a41086a200241a00a6a41086a290300370300200220022903a00a3703b018200220043602e018200241e4186a200241980f6a41bc0110e9082105200220093602a01a20024190086a200110ab0102402002280290080d00200228029408210320024188086a200110ab01200228028808450d020b200241e0186a109b060b2000411c3602000c380b200228028c082101200241e80e6a41286a2206200241b0186a41286a290300370300200241e80e6a41206a2207200241b0186a41206a290300370300200241e80e6a41186a220a200241b0186a41186a290300370300200241e80e6a41106a220e200241b0186a41106a290300370300200241e80e6a41086a2209200241b0186a41086a290300370300200220022903b0183703e80e20024180166a200541c40110e9081a200241b80e6a41086a22052009290300370300200241b80e6a41106a2209200e290300370300200241b80e6a41186a220e200a290300370300200241b80e6a41206a220a2007290300370300200241b80e6a41286a22072006290300370300200220022903e80e3703b80e20024198086a20024180166a41c40110e9081a20024198156a412c6a200729030037020020024198156a41246a200a29030037020020024198156a411c6a200e29030037020020024198156a41146a200929030037020020024198156a410c6a2005290300370200200220022903b80e37029c152000411b36020020002002290298153702042000410c6a20024198156a41086a290200370200200041146a20024198156a41106a2902003702002000411c6a20024198156a41186a290200370200200041246a20024198156a41206a2902003702002000412c6a20024198156a41286a290200370200200041346a200241c8156a280200360200200041386a20043602002000413c6a20024198086a41c40110e9081a20004184026a200136020020004180026a200336020020004188026a20022903900e37030020004190026a200241900e6a41086a29030037030020004198026a200241900e6a41106a290300370300200041a0026a200241900e6a41186a290300370300200041a8026a200241900e6a41206a2903003703000c370b02402007450d0020052d0001210620012003417e6a22073602042001200541026a3602000240024002400240024002400240024002400240024002400240024020060e060001020304050e0b200241c8076a200110ab0120022802c8070d0d2004280200220620022802cc072203490d0d2003417f4c0d3f0240024020030d00410121050c010b200310322205450d42200428020021060b20062003490d0620052001280200200310e9082106200128020422072003490d072001200720036b3602042001200128020020036a3602002006450d0d20024180166a2001109301410121012003ad22084220862008842208a72103024020022d0080164101460d00200242003703a0152002200336029815200220084220883e029c1520024190166a290300220b422088a7210d20024188166a29030021082002419d166a28000021042002419b166a2f0000210a2002419a166a2d0000210e20024198166a2f01002109200228028416210320022f018216210620022d0081162107200ba7210f0c0d0b20030d060c0d0b41002106200241003a00a0162003417d6a21030240034020072006460d0120024180166a20066a200520066a220441026a2d00003a0000200120033602042001200441036a3602002002200641016a22043a00a0162003417f6a21032004210620044120470d000b200441ff01714120490d0d20022900871621082002418f166a290000210b200228029c16210420022f019a16210a20022d009916210e20022f0097162109200228008316210320022f008116210620022d008016210720024198156a41106a20024198086a41106a29000037030020024198156a41086a20024198086a41086a290000370300200220022900980837039815200842808080807083200842ffffffff0f83842108200b422088a7210d200ba7210f410221010c0b0b200641ff0171450d0c200241003a00a0160c0c0b200241e8076a200110ab0120022802e8070d0b2004280200220620022802ec072203490d0b2003417f4c0d3d0240024020030d00410121050c010b200310322205450d40200428020021060b20062003490d0420052001280200200310e9082106200128020422072003490d062001200720036b3602042001200128020020036a3602002006450d0b2003ad2208422086200884210b20024180166a200110930120022d0080164101460d0320024180166a41106a290300210c20024188166a29030021082002419d166a28000021042002419b166a2f0000210a2002419a166a2d0000210e20024198166a2f01002109200228028416210320022f018216210620022d0081162107200241d0076a200110db0420022903d007a70d0320022903d807211020024198156a41106a200241d0076a41106a2903003703002002200b37039815200220103703a015200c422088a7210d200ca7210f410321010c0a0b41002106200241003a00a0162003417d6a21030240034020072006460d0120024180166a20066a200520066a220441026a2d00003a0000200120033602042001200441036a3602002002200641016a22043a00a0162003417f6a21032004210620044120460d090c000b0b200641ff0171450d0a200241003a00a0160c0a0b41002106200241003a00a0162003417d6a21030240034020072006460d0120024180166a20066a200520066a220441026a2d00003a0000200120033602042001200441036a3602002002200641016a22043a00a0162003417f6a21032004210620044120470d000b200441ff01714120490d0a20022900871621082002418f166a290000210b200228029c16210420022f019a16210a20022d009916210e20022f0097162109200228008316210320022f008116210620022d008016210720024198156a41106a20024198086a41106a29000037030020024198156a41086a20024198086a41086a290000370300200220022900980837039815200842808080807083200842ffffffff0f83842108200b422088a7210d200ba7210f410521010c080b200641ff0171450d09200241003a00a0160c090b41002106200241003a00a0162003417d6a21030240034020072006460d0120024180166a20066a200520066a220441026a2d00003a0000200120033602042001200441036a3602002002200641016a22043a00a0162003417f6a21032004210620044120460d060c000b0b200641ff0171450d08200241003a00a0160c080b200ba7450d070b2005102e0c060b2003200741b8b2c0001056000b2003200741b8b2c0001056000b20024198086a41086a220120024180166a41086a29030037030020024198086a41106a220520024180166a41106a29030037030020024198086a41186a220320024180166a41186a290300370300200220022903801637039808200441ff0171411f4d0d0320024198126a41186a20032903002208370300200241d8106a41086a2001290300370300200241d8106a41106a2005290300370300200241d8106a41186a200837030020022002290398083703d81020022d00d810210720022f00d910210620022800db10210320022f00ef10210920022d00f110210e20022f01f210210a20022802f410210420022800eb10210d20022800e710210f20022900df10210820024198156a41106a200241980f6a41106a29000037030020024198156a41086a200241980f6a41086a290000370300200220022900980f37039815410621010c010b20024198086a41086a22052002418f166a29000037030020024198086a41106a220a20024197166a29000037030020024198086a41186a220e20024180166a411f6a2d00003a0000200220022900871637039808200441ff0171411f4d0d0220022d008016210720022f00811621062002280083162103200241980f6a41086a2005290300370300200241980f6a41106a200a290300370300200241980f6a41186a200e2d00003a000020022002290398083703980f200241f0076a200110db0420022903f007a70d02200241f0076a41106a2903002108200220022903f80737039815200220083703a01520022903a80f220b422888200241b00f6a31000042188684a72104200b421888a7210a200b421088a7210e200241a00f6a290300220c422088a7210d20022903980f2108200ba72109200ca7210f410421010b0b200241880b6a41106a221120024198156a41106a290300370300200241880b6a41086a20024198156a41086a290300220b3703002002200229039815220c3703880b200041186a200dad422086200fad84370000200041106a20083700002000412c6a2005360000200020043600252000200a3b00232000200e3a0022200041206a20093b00002000410c6a2003360000200020063b000a200020073a0009200041086a20013a00002000411a360200200041306a200c370200200041386a200b370200200041c0006a2011290300370200200041c8006a200241b0186a41e80110e9081a0c370b2000411c3602000c360b024002402007450d0020052d0001210620012003417e6a3602042001200541026a360200024002400240024002400240024002400240024002400240024020060e090001020304050608070d0b200241d0066a200110db0420022903d006a70d0c200241e0066a290300210b20022903d8062108200241c8066a200110ab0120022802c8060d0c2004280200220620022802cc062203490d0c2003417f4c0d3e0240024020030d00410121050c010b200310322205450d41200428020021060b20062003490d0b20052001280200200310e9082106200128020422072003490d0d2001200720036b3602042001200128020020036a3602002006450d0c2003ad220c422086200c84220c4220882114200ca72103410121010c090b200241e8066a200110ab0120022802e80622010d0b410a410220011b21014200211420022802ec0621050c070b20024188076a200110ab012002280288070d0a200228028c07210520024180166a200110e60120022d0080164105460d0a20024180166a41106a290300210b20024188166a2903002108200241a0166a280200210620024198166a290300210c20022802841621072002280280162103200241f0066a200110db04024020022903f006a70d00200241f0066a41106a290300211320022903f80621102007ad2114410321010c090b200341ff01714102470d0a2008a7450d0a2007102e0c0a0b20024190076a200110ab0120022802900722010d09410a410420011b21014200211420022802940721050c050b20024198076a200110ab0120022802980722010d08410a410520011b210142002114200228029c0721050c040b200241a0076a200110ab0120022802a0070d0720022802a407210520024180166a200110e60120022d0080164105460d072002290380162210422088211420024190166a290300210b20024188166a2903002108200241a0166a280200210620024198166a290300210c2010a721034200211041062101420021130c050b200241a8076a200110ab0120022802a80722010d06410a410720011b21014200211420022802ac0721050c020b200241c0076a200110ab0120022802c0070d0520022802c4072105200241b8076a200110ab0120022802b8070d052004280200220720022802bc072206490d052006417f4c0d370240024020060d00410121030c010b200610322203450d3a200428020021070b0240024020072006490d0020032001280200200610e90821072001280204220420064f0d012006200441b8b2c0001056000b2003102e0c060b2001200420066b3602042001200128020020066a3602002007450d052006ad2208422086200884221442208821084200210b410921010c020b200241b0076a200110ab0120022802b00722010d04410a410820011b21014200211420022802b40721050b0b0b20004119360200200041c0006a2013370200200041386a2010370200200041206a200b370200200041186a2008370200200041306a2006360200200041286a200c3702002000410c6a2005360200200041086a2001360200200041106a20144220862003ad84370200200041c8006a200241b0186a41e80110e9081a0c380b2005102e0b2000411c3602000c360b2003200741b8b2c0001056000b0240024002402007450d0020052d0001210620012003417e6a22073602042001200541026a3602000240024002400240024002400240024020060e0400010203080b200241a0066a200110ab01024020022802a006450d0020024100360298080c080b20024198086a200120022802a4061092012002280298082205450d07200229029c08210b0240200110cb042203450d0020022902981622104280808080708321132002290290162208428080808070832114200228028c16210f2002280288162109200228009b12210e20022f009912210a2008a7210d410121010c0a0b200b42ffffff3f8350450d060c070b20074102490d0620052f0002210620012003417c6a3602042001200541046a360200200241b0066a200110ab01024020022802b006450d0020024100360280160c070b20024180166a200120022802b4061092012002280280162205450d06200229028416210b20024180166a200110fe0520022802801622034102460d04200229028416210c200241a8066a200110ab0120022802a8060d042004280200220e20022802ac06220a490d04200a417f4c0d3802400240200a0d00410121070c010b200a10322207450d3b2004280200210e0b200e200a490d0320072001280200200a10e90821092001280204220e200a490d072001200e200a6b36020420012001280200200a6a3602002009450d04200aad220842208620088421102004280200220a450d022001280200220d2d0000210e2001200a417f6a220f3602042001200d41016a3602004100210402400240200e0e020100040b410121040b200f4108490d022010422088a7210e200d29000121082001200a41776a3602042001200d41096a360200200941107621112010421088a7210a2010420888a7211b20104220862009ad84421888a72112410221014100210d4200211042002113420021140c080b20074102490d0520052f0002210a20012003417c6a3602042001200541046a360200200241b8066a200110ab01024020022802b806450d0020024100360280160c060b20024180166a200120022802bc06109201200228028016220e450d05200229028416210820024180166a200110fe0502402002280280164102460d0020024188166a280200210d200229038016211441002105200241003a00a01620042802002107417f21030240034020072005460d0120024180166a20056a200128020022062d00003a00002001200720036a3602042001200641016a3602002002200541016a22063a00a0162003417f6a21032006210520064120470d000b200641ff01714120490d01200720066b22074108490d01200229008716210b2002418f166a2900002118200228029c16210320022f019a16210920022d009916210f20022f0097162111200228008316210520022f008116210620022d00801621042001280200221229000021102001200741786a3602042001201241086a360200200220093b00ab0f2002200f3a00aa0f200220113b01a80f2010428080808070832113200b422088a7ad422086200ba7ad84210b200220033600ad0f20034110762112200341087621112014422088a7210f200220183703a00f20022902a40f210c20022f01ac0f21072014a721092018a7210341032101420021140c090b200541ff0171450d00200241003a00a0160b200842ffffff3f83500d05200e102e0c050b20074102490d0420052f0002210a20012003417c6a3602042001200541046a360200200241c0066a200110ab01024020022802c006450d0020024100360280160c050b20024180166a200120022802c406109201200228028016220e450d0420022902841621080240200428020022034104490d0020012802002207280000210920012003417c6a22053602042001200741046a36020020054104490d002007280004210f2001200341786a22043602042001200741086a36020041002105200241003a00a016200341776a21030240034020042005460d0120024180166a20056a200720056a220641086a2d00003a0000200120033602042001200641096a3602002002200541016a22063a00a0162003417f6a21032006210520064120470d000b20024198086a41086a220120024180166a41086a29030037030020024198086a41106a220520024180166a41106a29030037030020024198086a41186a220320024180166a41186a290300370300200220022903801637039808200641ff0171411f4d0d0120024198126a41186a2003290300220b370300200241d8106a41086a2001290300370300200241d8106a41106a2005290300370300200241d8106a41186a200b37030020022002290398083703d81020022d00d810210420022f00d910210620022800db10210520022f00f310210720022d00f510211120022f01f610211220022900eb10210c20022800e710210320022900df10210b410421014100210d4200211042002113420021140c080b200541ff0171450d00200241003a00a0160b200842ffffff3f83500d04200e102e0c040b2010a7450d010b2007102e0b200b42ffffff3f83500d010b2005102e0b2000411c3602000c360b200a200e41b8b2c0001056000b2000201b3a0029200020113a0026200020043a0009200041183602002000413c6a200f360200200041386a2009360200200041306a20083702002000412c6a200e3602002000412a6a200a3b0100200041276a20123b0000200041246a20073b01002000411c6a200c370200200041186a2003360200200041106a200b3702002000410c6a20053602002000410a6a20063b0100200041086a20013a0000200041c8006a2013201042ffffffff0f8384370200200041c0006a2014200dad84370200200041d0006a200241b0186a41e00110e9081a0c340b20024180166a200110bd03024020022d008016410b460d0020024198086a20024180166a41c80010e9081a20004117360200200041046a20024198086a41c80010e9081a200041cc006a200241b0186a41e40110e9081a0c340b2000411c3602000c330b410f210e0c0c0b200241b0186a200110e60120022d00b0184105460d14200241800e6a41086a200241a00a6a41086a280200360200200241fc0d6a41026a200241e80e6a41026a2d00003a0000200220022902a00a3703800e200220022f00e80e3b01fc0d200241bc186a290200210b200241b0186a41206a280200210a200241ce186a2f01002109200241cd186a2d0000210d200241c9186a280000210f200241c7186a2f00002112200241c6186a2d0000211b200241c4186a2f0100211120022902b418210820022802b0182106200241e00d6a41106a20024198086a41106a290200370300200241e00d6a41086a20024198086a41086a29020037030020022002290298083703e00d200241dc0d6a41026a200241b80e6a41026a2d00003a0000200220022f00b80e3b01dc0d200241c00d6a41106a20024198126a41106a290200370300200241c00d6a41086a20024198126a41086a29020037030020022002290298123703c00d200241bc0d6a41026a200241900e6a41026a2d00003a0000200220022f00900e3b01bc0d200241a00d6a41106a200241d8106a41106a290200370300200241a00d6a41086a200241d8106a41086a290200370300200220022902d8103703a00d2002419c0d6a41026a200241a0146a41026a2d00003a0000200220022f00a0143b019c0d200241800d6a41106a200241980f6a41106a290200370300200241800d6a41086a200241980f6a41086a290200370300200220022902980f3703800d20024198156a41206a20024180166a41206a28020036020020024198156a41186a20024180166a41186a29020037030020024198156a41106a20024180166a41106a29020037030020024198156a41086a20024180166a41086a290200370300200220022902801637039815410e210e0c0b0b200241b0186a200110e60120022d00b0184105460d13200241b0186a41206a2207280200210a200241ce186a2f01002109200241cd186a2d0000210d200241c9186a280000210f200241c7186a2f00002112200241c6186a2d0000211b200241c4186a2f01002111200241bc186a290200210b200241b0186a41086a2204280200210520022802b418210320022802b0182106200241b0186a200110ec03024020022d00b0184106460d00200241800e6a41086a200241a00a6a41086a280200360200200241fc0d6a41026a200241e80e6a41026a2d00003a0000200241e00d6a41086a20024198086a41086a290200370300200241e00d6a41106a20024198086a41106a290200370300200220022902a00a3703800e200220022f00e80e3b01fc0d20022002290298083703e00d200241b0186a41186a290300210c200241b0186a41106a29030021102007280200211d2004290300211320022903b0182114200241dc0d6a41026a200241b80e6a41026a2d00003a0000200220022f00b80e3b01dc0d200241c00d6a41106a20024198126a41106a290200370300200241c00d6a41086a20024198126a41086a29020037030020022002290298123703c00d200241bc0d6a41026a200241900e6a41026a2d00003a0000200220022f00900e3b01bc0d200241a00d6a41106a200241d8106a41106a290200370300200241a00d6a41086a200241d8106a41086a290200370300200220022902d8103703a00d2002419c0d6a41026a200241a0146a41026a2d00003a0000200220022f00a0143b019c0d200241800d6a41106a200241980f6a41106a290200370300200241800d6a41086a200241980f6a41086a290200370300200220022902980f3703800d20024198156a41206a20024180166a41206a28020036020020024198156a41186a20024180166a41186a29020037030020024198156a41106a20024180166a41106a29020037030020024198156a41086a20024180166a41086a2902003703002002200229028016370398152005ad4220862003ad842108410d210e0c0b0b200641ff01714102470d132005450d132003102e0c130b200241b0186a200110e60120022d00b0184105460d12200241b0186a41206a2207280200210a200241ce186a2f01002109200241cd186a2d0000210d200241c9186a280000210f200241c7186a2f00002112200241c6186a2d0000211b200241c4186a2f01002111410c210e200241b0186a410c6a290200210b200241b0186a41086a2204280200210520022802b418210320022802b0182106200241b0186a200110ec03024020022d00b0184106460d00200241800e6a41086a200241a00a6a41086a280200360200200241fc0d6a41026a200241e80e6a41026a2d00003a0000200241e00d6a41086a20024198086a41086a290200370300200241e00d6a41106a20024198086a41106a290200370300200220022902a00a3703800e200220022f00e80e3b01fc0d20022002290298083703e00d200241b0186a41186a290300210c200241b0186a41106a29030021102007280200211d2004290300211320022903b0182114200241dc0d6a41026a200241b80e6a41026a2d00003a0000200220022f00b80e3b01dc0d200241c00d6a41106a20024198126a41106a290200370300200241c00d6a41086a20024198126a41086a29020037030020022002290298123703c00d200241bc0d6a41026a200241900e6a41026a2d00003a0000200220022f00900e3b01bc0d200241a00d6a41106a200241d8106a41106a290200370300200241a00d6a41086a200241d8106a41086a290200370300200220022902d8103703a00d2002419c0d6a41026a200241a0146a41026a2d00003a0000200220022f00a0143b019c0d200241800d6a41106a200241980f6a41106a290200370300200241800d6a41086a200241980f6a41086a290200370300200220022902980f3703800d20024198156a41206a20024180166a41206a28020036020020024198156a41186a20024180166a41186a29020037030020024198156a41106a20024180166a41106a29020037030020024198156a41086a20024180166a41086a2902003703002002200229028016370398152005ad4220862003ad8421080c0a0b200641ff01714102470d122005450d122003102e0c120b200241b0186a200110e60120022d00b0184105460d11200241800e6a41086a200241a00a6a41086a280200360200200241fc0d6a41026a200241e80e6a41026a2d00003a0000200220022902a00a3703800e200220022f00e80e3b01fc0d200241bc186a290200210b200241b0186a41206a280200210a200241ce186a2f01002109200241cd186a2d0000210d200241c9186a280000210f200241c7186a2f00002112200241c6186a2d0000211b200241c4186a2f0100211120022902b418210820022802b0182106200241e00d6a41106a20024198086a41106a290200370300200241e00d6a41086a20024198086a41086a29020037030020022002290298083703e00d200241dc0d6a41026a200241b80e6a41026a2d00003a0000200220022f00b80e3b01dc0d200241c00d6a41106a20024198126a41106a290200370300200241c00d6a41086a20024198126a41086a29020037030020022002290298123703c00d200241bc0d6a41026a200241900e6a41026a2d00003a0000200220022f00900e3b01bc0d200241a00d6a41106a200241d8106a41106a290200370300200241a00d6a41086a200241d8106a41086a290200370300200220022902d8103703a00d2002419c0d6a41026a200241a0146a41026a2d00003a0000200220022f00a0143b019c0d200241800d6a41106a200241980f6a41106a290200370300200241800d6a41086a200241980f6a41086a290200370300200220022902980f3703800d20024198156a41206a20024180166a41206a28020036020020024198156a41186a20024180166a41186a29020037030020024198156a41106a20024180166a41106a29020037030020024198156a41086a20024180166a41086a290200370300200220022902801637039815410b210e0c080b20024198066a200110ab012002280298060d10200228029c062106200241b0186a200110e60120022d00b0184105460d10200241b8186a280200210320022802b418210720022802b01821050240024020042802002204450d00200241d0186a3502002114200241cc186a280200210a200241ca186a2f01002109200241c9186a2d0000210d200241c5186a280000210f200241c3186a2f00002112200241c2186a2d0000211b200241c0186a2f01002111200241bc186a35020021082001280200220e2d0000211c20012004417f6a221d3602042001200e41016a36020042002113024002400240024002400240201c0e0707000102030405060b201d4110490d05200e41096a290000210c200e290001211020012004416f6a3602042001200e41116a360200420121130c060b420221130c050b420321130c040b420421130c030b420521130c020b420621130c010b200541ff01714102470d112003450d112007102e0c110b200241800e6a41086a200241a00a6a41086a280200360200200241fc0d6a41026a200241e80e6a41026a2d00003a0000200241e00d6a41086a20024198086a41086a290200370300200241e00d6a41106a20024198086a41106a290200370300200241dc0d6a41026a200241b80e6a41026a2d00003a0000200220022902a00a3703800e200220022f00e80e3b01fc0d20022002290298083703e00d200220022f00b80e3b01dc0d200241c00d6a41106a20024198126a41106a290200370300200241c00d6a41086a20024198126a41086a290200370300200241bc0d6a41026a200241900e6a41026a2d00003a0000200241a00d6a41086a200241d8106a41086a290200370300200241a00d6a41106a200241d8106a41106a2902003703002002419c0d6a41026a200241a0146a41026a2d00003a000020022002290298123703c00d200220022f00900e3b01bc0d200220022902d8103703a00d200220022f00a0143b019c0d200241800d6a41106a200241980f6a41106a290200370300200241800d6a41086a200241980f6a41086a29020037030020024198156a41206a20024180166a41206a28020036020020024198156a41186a20024180166a41186a29020037030020024198156a41106a20024180166a41106a29020037030020024198156a41086a20024180166a41086a290200370300200220022902980f3703800d20022002290280163703981520084220862003ad84210b2007ad4220862005ad842108410a210e0c070b20024190066a200110ab012002280290060d0f200428020022054108490d0f20022802940621062001280200220329000021082001200541786a3602042001200341086a360200200842ff01560d0f200241800e6a41086a200241980f6a41086a280200360200200241fc0d6a41026a200241a00a6a41026a2d00003a0000200241e00d6a41086a20024180166a41086a290200370300200241e00d6a41106a20024180166a41106a290200370300200241dc0d6a41026a200241e80e6a41026a2d00003a0000200220022902980f3703800e200220022f00a00a3b01fc0d20022002290280163703e00d200220022f00e80e3b01dc0d200241c00d6a41106a20024198086a41106a290200370300200241c00d6a41086a20024198086a41086a290200370300200241bc0d6a41026a200241b80e6a41026a2d00003a0000200241a00d6a41086a20024198126a41086a290200370300200241a00d6a41106a20024198126a41106a2902003703002002419c0d6a41026a200241900e6a41026a2d00003a000020022002290298083703c00d200220022f00b80e3b01bc0d20022002290298123703a00d200220022f00900e3b019c0d200241800d6a41106a200241d8106a41106a290200370300200241800d6a41086a200241d8106a41086a29020037030020024198156a41206a200241b0186a41206a28020036020020024198156a41186a200241b0186a41186a29020037030020024198156a41106a200241b0186a41106a29020037030020024198156a41086a200241b0186a41086a290200370300200220022902d8103703800d200220022902b01837039815200842ff018321084109210e0c060b20024188066a200110ab012002280288060d0e200228028c06210a20024180166a200110930120022d0080164101460d0e4108210e200241800e6a41086a200241a00a6a41086a280200360200200241fc0d6a41026a200241e80e6a41026a2d00003a0000200241e00d6a41086a20024198086a41086a290200370300200241e00d6a41106a20024198086a41106a290200370300200220022902a00a3703800e200220022f00e80e3b01fc0d20022002290298083703e00d20024180166a41106a290300210b20024180166a41086a290300210820024180166a41186a290300210c20024180166a41206a3100002110200228028416210620022f018216212c20022d008116212d200241dc0d6a41026a200241b80e6a41026a2d00003a0000200220022f00b80e3b01dc0d200241c00d6a41106a20024198126a41106a290200370300200241c00d6a41086a20024198126a41086a29020037030020022002290298123703c00d200241bc0d6a41026a200241900e6a41026a2d00003a0000200220022f00900e3b01bc0d200241a00d6a41106a200241d8106a41106a290200370300200241a00d6a41086a200241d8106a41086a290200370300200220022902d8103703a00d2002419c0d6a41026a200241a0146a41026a2d00003a0000200220022f00a0143b019c0d200241800d6a41106a200241980f6a41106a290200370300200241800d6a41086a200241980f6a41086a290200370300200220022902980f3703800d20024198156a41206a200241b0186a41206a28020036020020024198156a41186a200241b0186a41186a29020037030020024198156a41106a200241b0186a41106a29020037030020024198156a41086a200241b0186a41086a290200370300200220022902b01837039815200c422888201042188684a7210f200c421888a72112200c421088a7211b200ca721110c050b20024180066a200110ab012002280280060d0d2002280284062106200241e8056a200110db0420022903e805a70d0d200241e8056a41106a290300210b20022903f0052108200241800e6a41086a200241980f6a41086a280200360200200241fc0d6a41026a200241a00a6a41026a2d00003a0000200241e00d6a41086a20024180166a41086a290200370300200241e00d6a41106a20024180166a41106a290200370300200241dc0d6a41026a200241e80e6a41026a2d00003a0000200220022902980f3703800e200220022f00a00a3b01fc0d20022002290280163703e00d200220022f00e80e3b01dc0d200241c00d6a41106a20024198086a41106a290200370300200241c00d6a41086a20024198086a41086a290200370300200241bc0d6a41026a200241b80e6a41026a2d00003a0000200241a00d6a41086a20024198126a41086a290200370300200241a00d6a41106a20024198126a41106a2902003703002002419c0d6a41026a200241900e6a41026a2d00003a000020022002290298083703c00d200220022f00b80e3b01bc0d20022002290298123703a00d200220022f00900e3b019c0d200241800d6a41106a200241d8106a41106a290200370300200241800d6a41086a200241d8106a41086a29020037030020024198156a41206a200241b0186a41206a28020036020020024198156a41186a200241b0186a41186a29020037030020024198156a41106a200241b0186a41106a29020037030020024198156a41086a200241b0186a41086a290200370300200220022902d8103703800d200220022902b018370398154107210e0c040b202b4104490d0c2005280002210620012003417a6a3602044106210e2001200541066a360200200241800e6a41086a200241980f6a41086a280200360200200241fc0d6a41026a200241a00a6a41026a2d00003a0000200241e00d6a41086a20024180166a41086a290200370300200241e00d6a41106a20024180166a41106a290200370300200241dc0d6a41026a200241e80e6a41026a2d00003a0000200220022902980f3703800e200220022f00a00a3b01fc0d20022002290280163703e00d200220022f00e80e3b01dc0d200241c00d6a41106a20024198086a41106a290200370300200241c00d6a41086a20024198086a41086a290200370300200241bc0d6a41026a200241b80e6a41026a2d00003a0000200241a00d6a41086a20024198126a41086a290200370300200241a00d6a41106a20024198126a41106a2902003703002002419c0d6a41026a200241900e6a41026a2d00003a000020022002290298083703c00d200220022f00b80e3b01bc0d20022002290298123703a00d200220022f00900e3b019c0d200241800d6a41106a200241d8106a41106a290200370300200241800d6a41086a200241d8106a41086a29020037030020024198156a41206a200241b0186a41206a28020036020020024198156a41186a200241b0186a41186a29020037030020024198156a41106a200241b0186a41106a29020037030020024198156a41086a200241b0186a41086a290200370300200220022902d8103703800d200220022902b018370398154200210b0c030b200241e0056a200110ab0120022802e0050d0b20022802e4052106200241c8056a200110db0420022903c805a70d0b200241c8056a41106a290300210b20022903d0052108200241800e6a41086a200241980f6a41086a280200360200200241fc0d6a41026a200241a00a6a41026a2d00003a0000200241e00d6a41086a20024180166a41086a290200370300200241e00d6a41106a20024180166a41106a290200370300200241dc0d6a41026a200241e80e6a41026a2d00003a0000200220022902980f3703800e200220022f00a00a3b01fc0d20022002290280163703e00d200220022f00e80e3b01dc0d200241c00d6a41106a20024198086a41106a290200370300200241c00d6a41086a20024198086a41086a290200370300200241bc0d6a41026a200241b80e6a41026a2d00003a0000200241a00d6a41086a20024198126a41086a290200370300200241a00d6a41106a20024198126a41106a2902003703002002419c0d6a41026a200241900e6a41026a2d00003a000020022002290298083703c00d200220022f00b80e3b01bc0d20022002290298123703a00d200220022f00900e3b019c0d200241800d6a41106a200241d8106a41106a290200370300200241800d6a41086a200241d8106a41086a29020037030020024198156a41206a200241b0186a41206a28020036020020024198156a41186a200241b0186a41186a29020037030020024198156a41106a200241b0186a41106a29020037030020024198156a41086a200241b0186a41086a290200370300200220022902d8103703800d200220022902b018370398154105210e0c020b200241c0056a200110ab0120022802c0050d0a20022802c405220a200428020041c4006e22052005200a4b1bad42c4007e2208422088a70d222008a72205417f4c0d220240024020050d00410421060c010b2005102c2206450d250b200541c4006ead2108024002400240200a450d004100210e0340200241003a00d018200e41016a210e2004280200417f6a2105410021030240024003402005417f460d01200241b0186a20036a200128020022072d00003a0000200120053602042001200741016a3602002002200341016a22073a00d0182005417f6a21052007210320074120470d000b20024198086a41086a2205200241b0186a41086a29030037030020024198086a41106a2203200241b0186a41106a220d29030037030020024198086a41186a2209200241b0186a41186a290300370300200220022903b01837039808200741ff0171411f4b0d010c050b200341ff0171450d04200241003a00d0180c040b200241d8106a41086a2005290300370300200241d8106a41106a2003290300370300200241d8106a41186a200929030037030020022002290398083703d810200241b0186a200110ec0320022d00b01822034106460d03200d290300210c20022903b818211020022f01d218210720022d00d118210920022800cd18210d20022f00cb18210f20022d00ca18211120022f01c818211220022802b418211b20022f01b218211c20022d00b118211d20022800db10211f20022f00d910211e20022d00d810212720022f00ef10210520022d00f110212620022f01f210212020022802f410212120022900df10210b200220022900e7103703a00f2002200b3703980f200220213600ad0f200220203b00ab0f200220263a00aa0f200220053b01a80f02402008422088220ba722052008a7470d00200541016a22262005490d2720054101742220202620262020491b22264104202641044b1bad42c4007e220b422088a7454102742126200ba721200240024020050d00200241003602b0180c010b200241043602b818200220063602b0182002200541c4006c3602b4180b20024198086a20202026200241b0186a107d20022802a00821262002280298084101460d03200228029c0821062008422088220ba72105202641c4006ead21080b2006200541c4006c6a2205201f3600032005201e3b0001200520273a0000200241980f6a41186a2d0000211f200241980f6a41106a2903002113200241980f6a41086a290300211420022903980f2118200541306a200c37000020052010370028200520183700072005410f6a2014370000200541176a20133700002005411f6a201f3a0000200520073b0042200520093a00412005200d36003d2005200f3b003b200520113a003a200520123b00382005201b3600242005201c3b00222005201d3a0021200520033a0020200b422086200842ffffffff0f83844280808080107c2108200e200a470d000b0b2006450d0c200241800e6a41086a200241a0146a41086a280200360200200241fc0d6a41026a200241b4146a41026a2d00003a0000200241e00d6a41086a200241a00a6a41086a290200370300200241e00d6a41106a200241a00a6a41106a290200370300200241dc0d6a41026a200241b0146a41026a2d00003a0000200220022902a0143703800e200220022f00b4143b01fc0d200220022902a00a3703e00d200220022f00b0143b01dc0d200241c00d6a41106a200241e80e6a41106a290200370300200241c00d6a41086a200241e80e6a41086a290200370300200241bc0d6a41026a200241ac146a41026a2d00003a0000200241a00d6a41086a200241b80e6a41086a290200370300200241a00d6a41106a200241b80e6a41106a2902003703002002419c0d6a41026a2002419d146a41026a2d00003a0000200220022902e80e3703c00d200220022f00ac143b01bc0d200220022902b80e3703a00d200220022f009d143b019c0d200241800d6a41106a200241900e6a41106a290200370300200241800d6a41086a200241900e6a41086a29020037030020024198156a41206a20024180166a41206a28020036020020024198156a41186a20024180166a41186a29020037030020024198156a41106a20024180166a41106a29020037030020024198156a41086a20024180166a41086a290200370300200220022902900e3703800d2002200229028016370398154103210e0c030b20260d250c230b02402008422088a72201450d00200141c4006c2105200641286a210103400240200141786a2d00004101470d002001280200450d002001417c6a280200102e0b200141c4006a2101200541bc7f6a22050d000b0b2008a72201450d0a200141c4006c0d090c0a0b200241b0186a200110ec0320022d00b018222f4106460d024102210e200241b80e6a41026a220420022d00b3183a000020024180166a41086a2230200241c4186a29020037030020024180166a41106a2231200241cc186a290200370300200220022f00b1183b01b80e2002200241bc186a29020037038016200241b0186a41086a2211280200213220022802b4182133200241b0186a200110ec03024020022d00b0184106470d00202f4101470d032032450d032033102e0c030b200241980f6a41206a2201200241b0186a41206a280200360200200241980f6a41186a2234200241b0186a41186a290300370300200241980f6a41106a2235200241b0186a41106a290300370300200241980f6a41086a22362011290300370300200241800e6a41086a200241a00a6a41086a280200360200200220022903b0183703980f200220022903a00a3703800e20022f01e80e211120022d00ea0e211b20022f00eb0e2112200241fc0d6a41026a200241b4146a41026a2d00003a0000200220022f01b4143b01fc0d200241e00d6a41106a200241d8106a41106a290300370300200241e00d6a41086a200241d8106a41086a290300370300200220022903d8103703e00d200241dc0d6a41026a200241a0146a41026a2d00003a0000200220022f01a0143b01dc0d200241c00d6a41106a20024198126a41106a290300370300200241c00d6a41086a20024198126a41086a29030037030020022002290398123703c00d200241bc0d6a41026a200241900e6a41026a2d00003a0000200220022f01900e3b01bc0d200241a00d6a41106a20024198086a41106a290300370300200241a00d6a41086a20024198086a41086a29030037030020022002290398083703a00d2002419c0d6a41026a20042d00003a0000200220022f01b80e3b019c0d200241800d6a41106a2031290300370300200241800d6a41086a203029030037030020022002290380163703800d20024198156a41206a200128020036020020024198156a41186a203429030037030020024198156a41106a203529030037030020024198156a41086a2036290300370300200220022903980f370398152010420886202ead42ff0183842118202bad42088620104238888442ffffffffff1f8321172007ad422086202dad8421102003ad422086200b842113202cad4220862005ad84210b0b200241f00c6a41086a2201200241800e6a41086a280200360200200241ec0c6a41026a2205200241fc0d6a41026a2d00003a0000200241d00c6a41086a2203200241e00d6a41086a290300370300200241d00c6a41106a2207200241e00d6a41106a290300370300200241cc0c6a41026a2204200241dc0d6a41026a2d00003a0000200220022903800e3703f00c200220022f01fc0d3b01ec0c200220022903e00d3703d00c200220022f01dc0d3b01cc0c200241b00c6a41106a222b200241c00d6a41106a290300370300200241b00c6a41086a222e200241c00d6a41086a290300370300200241ac0c6a41026a2230200241bc0d6a41026a2d00003a0000200241900c6a41086a2231200241a00d6a41086a290300370300200241900c6a41106a2234200241a00d6a41106a2903003703002002418c0c6a41026a22352002419c0d6a41026a2d00003a0000200220022903c00d3703b00c200220022f01bc0d3b01ac0c200220022903a00d3703900c200220022f019c0d3b018c0c200241f00b6a41106a2236200241800d6a41106a290300370300200241f00b6a41086a2237200241800d6a41086a290300370300200241880b6a41206a223820024198156a41206a280200360200200241880b6a41186a223920024198156a41186a290300370300200241880b6a41106a223a20024198156a41106a290300370300200241880b6a41086a223b20024198156a41086a290300370300200220022903800d3703f00b20022002290398153703880b200041c8006a200c370200200041c0006a2010370200200041186a200b370200200041106a2008370200200041d0006a201d360200200041386a2013370200200041306a20143702002000412c6a200a360200200020093b002a2000200d3a0029200041256a200f360000200020123b00232000201b3a0022200041206a20113b01002000410c6a20063602002000202c3b000a2000202d3a0009200041086a200e3a000020004116360200200041e0006a201c3a0000200041d4006a20022903f00c370200200041dc006a2001280200360200200041e4006a201e360200200041e8006a201f360200200020022f01ec0c3b0061200041e3006a20052d00003a0000200041ec006a20022903d00c370200200041f4006a2003290300370200200041fc006a200729030037020020004184016a20273a000020004187016a20042d00003a0000200020022f01cc0c3b0085012000418c016a202636020020004188016a2020360200200041a0016a202b29030037020020004198016a202e29030037020020004190016a20022903b00c370200200041a8016a20213a0000200041ab016a20302d00003a0000200020022f01ac0c3b00a901200041b0016a2022360200200041ac016a2023360200200041c4016a2034290300370200200041bc016a2031290300370200200041b4016a20022903900c370200200041cc016a202f3a0000200041cf016a20352d00003a0000200020022f018c0c3b00cd01200041d4016a2032360200200041d0016a2033360200200041e8016a2036290300370200200041e0016a2037290300370200200041d8016a20022903f00b37020020004190026a203828020036020020004188026a203929030037020020004180026a203a290300370200200041f8016a203b290300370200200041f0016a20022903880b370200200041a4026a20173700002000419c026a201837000020004198026a2024360000200020253b0096022000201a3a00950220004194026a20193a00000c250b200241003a00c4180b20214101470d002022450d002023102e0b20274101470d002026450d002020102e0b201c4101470d00201f450d00201e102e0b200341ff01714101470d002007450d00202d102e0b200541ff01714101470d0020022802e80e450d00202c102e0b02402008422088a72201450d002006200141c8006c6a2105200621010340024020012d00004101470d00200141086a280200450d00200141046a280200102e0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102e0b200141c8006a22012005470d000b0b2008a72201450d01200141c8006c450d010b2006102e0b2000411c3602000c1c0b20052d0015210720012003416a6a22063602042001200541166a2205360200200220073a009316200229038816210b200228029016210e2002280280162103200228028416210a200241003a0094162006450d0420052d0000210720012006417f6a2204360204200241013a0094162001200541016a360200200220073a00801602402004450d0020052d0001210720012006417e6a2204360204200241023a0094162001200541026a360200200220073a0081162004450d0020052d0002210720012006417d6a2204360204200241033a0094162001200541036a360200200220073a0082162004450d0020052d0003210720012006417c6a2204360204200241043a0094162001200541046a360200200220073a0083162004450d0020052d0004210720012006417b6a2204360204200241053a0094162001200541056a360200200220073a0084162004450d0020052d0005210720012006417a6a2204360204200241063a0094162001200541066a360200200220073a0085162004450d0020052d000621072001200641796a2204360204200241073a0094162001200541076a360200200220073a0086162004450d0020052d000721072001200641786a2204360204200241083a0094162001200541086a360200200220073a0087162004450d0020052d000821072001200641776a2204360204200241093a0094162001200541096a360200200220073a0088162004450d0020052d000921072001200641766a22043602042002410a3a00941620012005410a6a360200200220073a0089162004450d0020052d000a21072001200641756a22043602042002410b3a00941620012005410b6a360200200220073a008a162004450d0020052d000b21072001200641746a22043602042002410c3a00941620012005410c6a360200200220073a008b162004450d0020052d000c21072001200641736a22043602042002410d3a00941620012005410d6a360200200220073a008c162004450d0020052d000d21072001200641726a22043602042002410e3a00941620012005410e6a360200200220073a008d162004450d0020052d000e21072001200641716a22043602042002410f3a00941620012005410f6a360200200220073a008e162004450d0020052d000f21072001200641706a2204360204200241103a0094162001200541106a360200200220073a008f162004450d0020052d0010210720012006416f6a2204360204200241113a0094162001200541116a360200200220073a0090162004450d0020052d0011210720012006416e6a2204360204200241123a0094162001200541126a360200200220073a0091162004450d0020052d0012210720012006416d6a2204360204200241133a0094162001200541136a360200200220073a0092162004450d0020052d0013210720012006416c6a22063602042001200541146a2205360200200220073a009316024020060d00200241023a00880b0c060b200228028416210720022802801621042002290388162108200228029016210920052d0000210d20012006417f6a3602042001200541016a3602000240024002400240200d0e020102000b200241023a00880b0c080b200241003a00880b0c010b20024180166a2001109301024020022d0080164101470d00200241023a00880b0c070b200241f0106a20024199166a290000370300200241e8106a20024191166a290000370300200241e0106a20024189166a290000370300200220022900811622133703d810200241e7106a290000210c20022900df10211020022f00ef10210120022d00f110210520022f01f210210620022802f410210d20022f00d910210f200220022800db1036028c0b2002200f3b018a0b200220133c00890b200241013a00880b2002200d36009d15200220063b009b15200220053a009a15200220013b019815200228029812211d0b2003410876210620044108762101200241a4086a2009410874ad2008423888843e0200200220022d008f0b3a00980f200220084208862007411876ad8437029c082002200741087420044118767236029808200941187620022f01880b20022d008a0b41107472410874722112200ead420886200b4238888442ffffffffff1f832108200220103700990f2010423888200c42088684a7211120022900991522134230882110200b420886200a411876ad84210b200a41087420034118767221052013421088a72107200c422088a72109200c421088a7210d200c420888a7210f200228008b0b211f20022d009815210e20024198086a41086a2903002114200228029c12211c20022f01a012211b20022f01a212212620022802a412211e20022802a812212020022802ac12212120022903980f210c20022903980821182013a7210a42002113410521270c030b200241003a0094160c040b200241003a0094160c030b20052d0015210720012003416a6a22063602042001200541166a2205360200200220073a00931620022002290388163702a008200220022802841636029c08200220022802801622033602980820022002280290163602a80820064110490d02200541086a2900002114200529000021182001200641706a22073602042001200541106a3602002007450d0220052d0010210420012006416f6a221b3602042001200541116a221c360200410021120240024020040e020100040b201b4110490d03200541196a29000021082005290011210c20012006415f6a22073602042001200541216a36020020074110490d03200541296a29000021102005290021210b20012006414f6a22073602042001200541316a360200200741034d0d032005280031210720012006414b6a221b3602042001200541356a221c3602002002200b370390162002200837038816200220073602a016200228029416210720022f019216210a20022d009116210e20022f008b16210d200228008d16210920022d008a16210f20022f018816211120022903a0162113410121120b41000d02201b450d02201c2d000021052001201b417f6a22063602042001201c41016a36020041022127410221040240024020050e020100040b2006450d03201c2d000121052001201b417e6a3602042001201c41026a36020041002104024020050e020100040b410121040b2003410876210620023500a708200241ab086a310000422086842108200229009f08210b200228009b0821054100211f0b2000200e3a00492000200f3a0042200020013b011e200020043a001d200020063b000a200020033a0009200041133602002000411c6a20084220883c0000200041186a20083e0000200041d8006a2013370200200041d0006a2010370200200041286a2014370200200041206a2018370200200041f4006a2021360200200041f0006a2020360200200041ec006a201e360200200041ea006a20263b0100200041e8006a201b3b0100200041e4006a201c360200200041e0006a201d360200200041cc006a2007360200200041ca006a200a3b0100200041c5006a2009360000200041c3006a200d3b0000200041c0006a20113b0100200041386a200c370200200041346a201f360200200041306a2012360200200041106a200b3700002000410c6a2005360000200041086a20273a0000200041f8006a200241b0186a41b80110e9081a0c180b200241003a0094160b2000411c3602000c160b2000200a3b00462000200e3a00452000201c3600412000201b3b003f2000201d3a003e2000201e3b0026200020273a002520002026360021200020123b001f200020203a001e200020073b0006200020043a0005200020053a000420004111360200200041346a200c3700002000412c6a200b3700002000410c6a20083700002000413c6a20113b0000200041286a201f3600002000411c6a200f3b0000200041086a2003360000200041146a2009ad422086200dad84370000200041c8006a200241b0186a41e80110e9081a0c150b2000411c3602000c140b200020093a000920004110360200200041286a200b370200200041146a200a360200200041106a200e3602002000410c6a2007360200200041086a200d3a0000200041206a200c421886200fad220b42088884370200200041186a200b423886200842ffffffffffffffff008384370200200041306a200241b0186a41800210e9081a0c130b2000411c3602000c120b20024198086a41086a22012002418f166a29000037030020024198086a41106a220320024197166a29000037030020024198086a41186a220620024180166a411f6a2d00003a0000200220022900871637039808200441ff0171411f4d0d0320022d008016210720022f008116210a200228008316210520024198126a41186a20062d000022063a0000200241980f6a41086a20012903002208370300200241980f6a41106a22012003290300370300200241980f6a41186a20063a00002002200229039808220b3703980f20012f01002112200228029c0f211120022d00aa0f211b20022f00ab0f210f20022800ad0f210d20022802a40f211c200ba721032008a721044106211d41002109420021080b0c010b20024198086a41086a22032002418f166a29000037030020024198086a41106a220620024197166a29000037030020024198086a41186a220e20024180166a411f6a2d00003a0000200220022900871637039808200a41ff0171411f4d0d0120022d008016210720022f008116210a2002280083162105200241d8106a41086a2003290300370300200241d8106a41106a2006290300370300200241d8106a41186a200e2d00003a000020022002290398083703d810200241a0046a200110ab0120022802a0040d0120042802002203450d0120022802a4042106200128020022042d0000210e20012003417f6a3602042001200441016a3602004100210102400240200e0e020100030b410121010b20022903d8102208422088a72111200241e0106a290300220b422088a7211c20022800ed10210d20022f00eb10210f20022d00ea10211b20022f01e81021122008a72103200ba721044104211d0b200020013a00292000200f3b00232000201b3a00222000200a3b000a200020073a00092000410f360200200041386a2008370200200041346a2009360200200041306a200e3602002000412c6a2006360200200041256a200d360000200041206a20123b0100200041146a2011360200200041106a20033602002000410c6a2005360200200041086a201d3a0000200041186a201cad4220862004ad84370200200041c0006a200241b0186a41f00110e9081a0c0e0b2000411c3602000c0d0b20024198086a41086a220620024180166a41086a29030037030020024198086a41106a220720024180166a41106a29030037030020024198086a41186a220e20024180166a41186a290300370300200220022903801637039808200a41ff0171411f4d0d01200241d8106a41086a2006290300370300200241d8106a41106a2007290300370300200241d8106a41186a200e29030037030020022002290398083703d8102003417e6a200a460d012005200a6a220541026a2d000021062001200320046a22043602042001200541036a3602004100211e0240024020060e020100030b20044104490d02200541036a280000210720012003200a6b41796a3602042001200541076a3602004101211e0b20022900df10220c422088a7211c200241e7106a290000210820022802f410211120022f01f210210f20022d00f110211220022f00ef10210a20022800db10210e20022f00d910210920022d00d810210d2007ad210b200ca7211d4200210c4118211b0c020b20024198086a41086a22062002418f166a29000037030020024198086a41106a220720024197166a29000037030020024198086a41186a220420024180166a411f6a2d00003a0000200220022900871637039808200a41ff0171411f4d0d0020022d008016210d20022f0081162109200228008316210e200241980f6a41086a2006290300370300200241980f6a41106a2007290300370300200241980f6a41186a20042d00003a000020022002290398083703980f2003200a6b2203417e6a4104490d00200f280000211e20012003417a6a36020420012005200a6a41066a36020020022903a80f220b422888200241b00f6a31000042188684a72111200b421888a7210f200b421088a7211220022903980f220c422088a7211c200241a00f6a2903002108200ba7210a200ca7211d4200210b4117211b4200210c0c010b2000411c3602000c0a0b200020273b012a2000201f3a00292000200f3b0023200020123a0022200020093b000a2000200d3a00092000410d360200200041386a200c370200200041306a200b3702002000412c6a201e360200200041256a2011360000200041206a200a3b0100200041186a2008370200200041146a201c360200200041106a201d3602002000410c6a200e360200200041086a201b3a0000200041c0006a200241b0186a41f00110e9081a0c090b2000411c3602000c080b41002112420021100b0b200020233a0049200020203a0042200020273b002a2000201e3a00292000201c3b00232000201f3a00222000200f3b010a2000200a3a000920004107360200200041d8006a200c370200200041d0006a200b370200200041cc006a2025360200200041ca006a20243b0100200041c5006a2022360000200041c3006a20213b0000200041c0006a20263b0100200041386a2013370200200041346a2009360200200041306a20113602002000412c6a200e360200200041256a201d360000200041206a201b3b01002000410c6a2007360200200041086a200d3a0000200041186a2010422086200842208884370200200041106a2008422086201a201241ff017172ad84370200200041e0006a200241b0186a41d00110e9081a0c050b1038000b2000411c3602000c030b1036000b2006102e0b2000411c3602000b200241c01b6a24000b940704027f017e097f037e23004190026b22032400024002400240024002402002200128020441286e2204200420024b1bad42287e2205422088a70d002005a72204417f4c0d000240024020040d00410821060c010b2004102c2206450d020b200441286e2107024020020d00410021020c040b410021080340200341003a00c8012008220941016a21082001280204210a417f210b41002104024002400340200a2004460d01200341a8016a20046a2001280200220c2d00003a00002001200a200b6a3602042001200c41016a3602002003200441016a220c3a00c801200b417f6a210b200c2104200c4120470d000b200341d0016a41086a2204200341a8016a41086a290300370300200341d0016a41106a220b200341a8016a41106a290300370300200341d0016a41186a220d200341a8016a41186a290300370300200320032903a8013703d001200c41ff0171411f4b0d010c050b200441ff0171450d04200341003a00c8010c040b200341e8006a41086a220e2004290300370300200341e8006a41106a2204200b290300370300200341e8006a41186a220b200d290300370300200320032903d001370368200a200c6b220c4108490d032001280200220a29000021052001200c41786a3602042001200a41086a360200200341286a41086a200e290300220f370300200341286a41106a20042903002210370300200341286a41186a200b2903002211370300200341086a41186a220b2011370300200341086a41106a220c2010370300200341086a41086a220a200f37030020032003290368220f3703282003200f3703080240024020092007470d0020094101742204200941016a2207200420074b1b22044104200441044b1bad42287e220f422088a7454103742104200fa721070240024020090d00200341003602a8010c010b200341083602b001200320063602a8012003200941286c3602ac010b200341d0016a20072004200341a8016a107d20032802d801210420032802d0014101460d0120032802d4012106200441286e21070b2006200941286c6a22042003290308370300200a290300210f200c2903002110200b290300211120042005370320200441186a2011370300200441106a2010370300200441086a200f37030020082002460d050c010b0b20040d010b1038000b1036000b200041003602002007450d01200741286c450d012006102e0c010b2000200736020420002006360200200041086a20023602000b20034190026a24000baf0102017f017e230041106b2203240002402001450d002001410674210103400240024020002903004201510d00200341003a000020022003410110740c010b200341013a000020022003410110742002200041206a41201074200041086a29030021042003200041106a2903003703082003200437030020022003411010742003200041186a29030037030020022003410810740b200041c0006a2100200141406a22010d000b0b200341106a24000b9e0101027f230041106b22032400024002402001450d002000200141c4006c6a210403402003200028020036020020022003410410744120102c2201450d0220034220370204200320013602002003200041046a2200412010742002200328020022012003280208107402402003280204450d002001102e0b2002200041206a41201074200041c0006a22002004470d000b0b200341106a24000f0b1036000b740002402001450d002000200141e0016c6a2101034020022000412010742002200041206a412010742002200041c0006a412010742002200041e0006a41201074200220004180016a412010742002200041a0016a412010742002200041c0016a41201074200041e0016a22002001470d000b0b0bb40203027f017e027f230041106b2203240002402001450d002000200141d8006c6a210403402002200041386a41201074200029030021052003200041086a2903003703082003200537030020022003411010742000280220210120002802282206200210760240200641306c2206450d00200120066a210603402002200141201074200141206a29030021052003200141286a290300370308200320053703002002200341101074200141306a22012006470d000b0b200041d8006a2107200028022c2101200041346a28020022062002107602402006450d002006410574210603402002200141201074200141206a2101200641606a22060d000b0b200029031021052003200041186a2903003703082003200537030020022003411010742007210020072004470d000b0b200341106a24000ba40102017f017e230041106b2203240002402001450d002001410574210103402002200041106a41081074200029030021042003200041086a29030037030820032004370300200220034110107402400240024002400240200041186a2d00000e03000102040b200341003a00000c020b200341013a00000c010b200341023a00000b20022003410110740b200041206a2100200141606a22010d000b0b200341106a24000bff0101027f230041106b2203240002400240200141c4006c2201450d0003400240024020002d00004101460d00200341003a000020022003410110742003200041046a28020036020020022003410410740c010b200341013a000020022003410110744120102c2204450d0320034220370204200320043602002003200041016a412010742002200328020022042003280208107402402003280204450d002004102e0b0240200041216a2d00004101460d00200341003a000020022003410110740c010b200341013a000020022003410110742002200041226a412010740b200041c4006a2100200141bc7f6a22010d000b0b200341106a24000f0b1036000b930201057f230041106b2203240002402001450d0020002001411c6c6a2104034020002802002105200028020822012002107602402001450d002005200141e0006c6a210603402005200210a101200528025021012005280258220720021076200541e0006a210502402007450d002007410574210703402002200141201074200141206a2101200741606a22070d000b0b20052006470d000b0b2000411c6a2105200028020c2101200028021422072002107602402007450d00200741027421070340200320012802003602082002200341086a41041074200141046a21012007417c6a22070d000b0b2003200028021836020c20022003410c6a410410742005210020052004470d000b0b200341106a24000b9c0101027f230041106b2202240020012000412010742002200041206a360204200241046a200110af012002200041306a360208200241086a200110af01200041c0006a2802002103200041c8006a28020022002001107602402000450d00200041306c210003402001200341106a412010742002200336020c2002410c6a200110af01200341306a2103200041506a22000d000b0b200241106a24000bc50101037f230041306b2203240002400240200241046a2204417f4c0d000240024020040d00410121050c010b2004102c2205450d020b200341003602102003200436020c200320053602082002200341086a1076200341086a2001200210742003200328020822022003280210220410a3013703182003412c6a200220046a360200200320023602282003200341206a3602242003200341186a3602202000200341206a107c0240200328020c450d002002102e0b200341306a24000f0b1038000b1036000b1d01017e2001ad4220862000ad841013220029000021022000102e20020bea0304037f027e017f047e230041a0016b22022400200241003a00380240024002400240200128020422034110490d002001280200220441086a2900002105200429000021062001200441106a3602002001200341706a2204360204200241013a00382002200637030820022005370310200441104f0d01200042013703000c020b200042013703000c020b2001280200220441086a2900002105200429000021062001200441106a360200200241086a41186a220720053703002001200341606a2204360204200241023a003820022006370318024020044110490d002001280200220441086a2900002105200429000021062001200441106a360200200241086a41286a20053703002001200341506a360204200241033a003820022006370328200241c0006a41086a200241086a41086a2903002208370300200241c0006a41106a200241086a41106a2903002209370300200241c0006a41186a2007290300220a370300200241c0006a41206a2006370300200241c0006a41286a200537030020022002290308220b370340200041306a2005370300200041286a2006370300200041206a200a370300200041186a2009370300200041106a20083703002000200b370308200042003703000c020b200042013703000b200241003a00380b200241a0016a24000bac0401057f230041106b220241003a000802400240024020012802042203450d00200128020022042d0000210520012003417f6a2206360204200241013a00082001200441016a360200200220053a000020060d01200041013a00000c020b200041013a00000f0b200128020022042d0000210520012003417e6a22063602042001200441016a360200200241023a0008200220053a00010240024002400240024002402006450d00200128020022042d0000210520012003417d6a22063602042001200441016a360200200241033a0008200220053a00022006450d01200128020022042d0000210520012003417c6a22063602042001200441016a360200200241043a0008200220053a00032006450d02200128020022042d0000210520012003417b6a22063602042001200441016a360200200241053a0008200220053a00042006450d03200128020022042d0000210520012003417a6a22063602042001200441016a360200200241063a0008200220053a00052006450d04200128020022042d000021052001200341796a22063602042001200441016a360200200241073a0008200220053a00062006450d05200041003a0000200128020022042d000021052001200341786a3602042001200441016a360200200220053a0007200020022903003700010f0b200041013a00000c050b200041013a00000c040b200041013a00000c030b200041013a00000c020b200041013a00000c010b200041013a00000b200241003a00080bbf0202077f047e230041f0006b22022400200241003a002841002103024002400340200241003a003020012802002204280204220520054100472206490d01200341016a2107200241306a20042802002208200610e9081a2004200520066b3602042004200820066a360200024020050d00200241003a00300b200241086a20036a20022d00303a0000200220073a00282007210320074120470d000b200241306a41086a200241086a41086a2903002209370300200241306a41106a200241086a41106a290300220a370300200241306a41186a200241086a41186a290300220b37030020022002290308220c370330200041196a200b370000200041116a200a370000200041096a20093700002000200c370001200041003a00000c010b200041013a0000200341ff0171450d00200241003a00280b200241f0006a24000bd60301087f230041d0016b2202240041002103200241003a00482001280204417f6a210402400240024003402004417f460d01200241086a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00482004417f6a210420052103200541c000470d000b200241d0006a41086a2204200241086a41086a290300370300200241d0006a41106a2201200241086a41106a290300370300200241d0006a41186a2203200241086a41186a290300370300200241d0006a41206a2206200241086a41206a290300370300200241d0006a41286a2207200241086a41286a290300370300200241d0006a41306a2208200241086a41306a290300370300200241d0006a41386a2209200241086a41386a29030037030020022002290308370350200541ff017141c000490d0120002002290350370001200041003a0000200041396a2009290300370000200041316a2008290300370000200041296a2007290300370000200041216a2006290300370000200041196a2003290300370000200041116a2001290300370000200041096a20042903003700000c020b200041013a0000200341ff0171450d01200241003a00480c010b200041013a00000b200241d0016a24000bef0101047f230041d0016b2202240041002103200241003a00492001280204417f6a210402400240024003402004417f460d01200241086a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00492004417f6a210420052103200541c100470d000b2002418f016a200241086a41c10010e9081a200241ce006a2002418f016a41c10010e9081a200541ff017141c100490d01200041016a200241ce006a41c10010e9081a200041003a00000c020b200041013a0000200341ff0171450d01200241003a00490c010b200041013a00000b200241d0016a24000be20201077f230041206b2202240002400240200041046a2802002203200041086a28020022046b2001410c6a280200200128020822056b22064103752207490d00200028020021030c010b0240200420076a22082004490d00200341017422042008200420084b1b22044104200441044b1b220441ffffffff01712004464102742108200441037421040240024020030d00200241003602100c010b200241186a410436020020022003410374360214200220002802003602100b200220042008200241106a107d200241086a2802002104024020022802004101460d00200020022802042203360200200041046a2004410376360200200041086a28020021040c020b2004450d001036000b1038000b200320044103746a2005200610e9081a20012001410c6a280200360208200041086a2200200028020020076a3602000240200141046a28020041ffffffff0171450d002001280200102e0b200241206a24000bf90302057f017e230041106b22022400200242003c000c200242003e02080240024020012802042203450d00200128020022042d0000210520012003417f6a2206360204200241013a000c2001200441016a360200200220053a000802402006450d00200128020022042d0000210520012003417e6a22063602042001200441016a360200200241023a000c200220053a00092006450d00200128020022042d0000210520012003417d6a22063602042001200441016a360200200241033a000c200220053a000a2006450d00200128020022042d0000210520012003417c6a3602042001200441016a360200200241043a000c200220053a000b200231000ca741034d0d01200228020821042002200110ab01024002400240024020022802000d002001280204220520022802042203490d002003417f4c0d020240024020030d00410121060c010b200310322206450d04200128020421050b0240024020052003490d0020062001280200200310e90821052001280204220620034f0d012003200641b8b2c0001056000b2006102e0c010b2001200620036b3602042001200128020020036a36020020050d010b200041003602040c050b20002003ad220742208620078437020820002005360204200020043602000c040b1038000b1036000b200241003a000c0b200041003602040b200241106a24000bcf0201067f0240024020012802042202450d00200128020022032d0000210420012002417f6a2205360204410121062001200341016a3602000240200441037122074103460d0002400240024020070e03000102000b20044102762107410021060c040b41012106024020050d000c040b20032d0001210520012002417e6a3602042001200341026a3602002005410874200472220141ffff0371418002490d03200141fcff03714102762107410021060c030b20054103490d01200341036a2d0000210620032f0001210720012002417c6a3602042001200341046a3602002007200641107472410874200472220141808004492106200141027621070c020b0240200441034d0d000c020b20054104490d012003280001210720012002417b6a3602042001200341056a36020020074180808080044921060c010b410121060b20002007360204200020063602000ba00402067f017e230041106b22022400200242003c000c200242003e020802400240200128020022032802042204450d00200328020022052d0000210620032004417f6a360204200241013a000c2003200541016a360200200220063a00080240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a360200200241023a000c200220063a0009200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a360200200241033a000c200220063a000a200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a360200200241043a000c200220063a000b200231000ca741034d0d01200228020821042002200110ad01024002400240024020022802000d0020012802002205280204220620022802042203490d002003417f4c0d020240024020030d00410121070c010b200310322207450d042001280200220528020421060b0240024020062003490d0020072005280200200310e90821012005280204220620034f0d012003200641b8b2c0001056000b2007102e0c010b2005200620036b3602042005200528020020036a36020020010d010b200041003602040c050b20002003ad220842208620088437020820002001360204200020043602000c040b1038000b1036000b200241003a000c0b200041003602040b200241106a24000bfb0201057f02400240200128020022022802042203450d00200228020022042d0000210520022003417f6a360204410121032002200441016a3602000240200541037122024103460d0002400240024020020e03000102000b20054102762102410021030c040b200128020022022802042203450d02200228020022012d0000210420022003417f6a360204410121032002200141016a3602002004410874200572220141ffff0371418002490d03200141fcff03714102762102410021030c030b2001280200220228020422034103490d012002280200220141026a2d0000210420012f000021062002200141036a36020020022003417d6a3602042006200441107472410874200572220241808004492103200241027621020c020b0240200541034d0d000c020b2001280200220128020422054104490d0120012802002203280000210220012005417c6a3602042001200341046a36020020024180808080044921030c010b410121030b20002002360204200020033602000bad0201047f230041106b22022400024002402001280208220341146a2204417f4c0d000240024020040d00410121050c010b2004102c2205450d020b20024100360208200220043602042002200536020020022001410c6a411010742001280200210420032002107620022004200310742002200128021c2204412010742002200441206a36020c2002410c6a200210af012002200441306a36020c2002410c6a200210af01200441c0006a2802002101200441c8006a28020022042002107602402004450d00200441306c210403402002200141106a412010742002200136020c200141306a21012002410c6a200210af01200441506a22040d000b0b200020022802002201200228020810b00102402002280204450d002001102e0b200241106a24000f0b1038000b1036000bad0303017f027e027f230041306b2202240002400240024002400240024020002802002200290300220342c000544100200041086a29030022045022051b0d0020034280800154410020051b0d01200342808080800454410020051b0d02411020047920037942c0007c20044200521ba741037622056b41044f0d0341c087c500413641c489c5001039000b20022003a74102743a00182001200241186a410110740c030b20022003a74102744101723b01182001200241186a410210740c020b20022003a74102744102723602182001200241186a410410740c010b2002413320054102746b3a00182001200241186a41011074200029030021032002200041086a290300220437031020022003370308200541706a21000340200220033c00182001200241186a410110742003420888200442388684210320044208882104200041016a22052000492106200521002006450d000b2002200337030820022004370310200320048450450d010b200241306a24000f0b2002412c6a4100360200200241286a41d4e2cc003602002002420137021c2002418888c500360218200241086a200241186a10de04000b4c0020002002ad4220862001ad8410102201290000370000200041186a200141186a290000370000200041106a200141106a290000370000200041086a200141086a2900003700002001102e0b920101047f230041106b22022400024002402000280208220341d8006c4104722204417f4c0d00200028020021002004102c2205450d01200241003602082002200436020420022005360200200320021076200020032002109d012001280200200128020420022802002201200228020810b20102402002280204450d002001102e0b200241106a24000f0b1038000b1036000b18002001ad4220862000ad842003ad4220862002ad84102a0bc00101047f230041106b2202240002400240200128020822034105744104722204417f4c0d00200128020021012004102c2205450d0120004100360208200020043602042000200536020020032000107602402003450d002003410574210303404120102c2204450d03200242203702042002200436020020022001412010742000200228020022042002280208107402402002280204450d002004102e0b200141206a2101200341606a22030d000b0b200241106a24000f0b1038000b1036000bd90102047f017e230041106b2202240002400240200128020822034106744104722204417f4c0d00200128020021012004102c2205450d0120004100360208200020043602042000200536020020032000107602402003450d002003410674210303402000200141206a41201074200129030021062002200141086a290300370308200220063703002000200241101074200141106a29030021062002200141186a290300370308200220063703002000200241101074200141c0006a2101200341406a22030d000b0b200241106a24000f0b1038000b1036000bae0101047f230041106b2202240002400240200128020822034103744104722204417f4c0d00200128020021012004102c2205450d0120004100360208200020043602042000200536020020032000107602402003450d00200120034103746a21030340200220012802003602082000200241086a410410742002200141046a28020036020c20002002410c6a41041074200141086a22012003470d000b0b200241106a24000f0b1038000b1036000ba50101047f230041106b2202240020002802002103200028020822002001107602402000450d002003200041386c6a210403402001200341086a41201074200220032903003703082001200241086a41081074200328022821002003280230220520011076200341386a210302402005450d002005410574210503402001200041201074200041206a2100200541606a22050d000b0b20032004470d000b0b200241106a24000b990101037f230041106b2202240020002802002103200028020822002001107602402000450d002003200041c8006c6a2104034020022003108a012001200228020022002002280208107402402002280204450d002000102e0b2002200341246a2203108a012001200228020022002002280208107402402002280204450d002000102e0b200341246a22032004470d000b0b200241106a24000b8d0101037f230041106b22022400200028020021032000280208220020011076024002402000450d002000410574210003404120102c2204450d02200242203702042002200436020020022003412010742001200228020022042002280208107402402002280204450d002004102e0b200341206a2103200041606a22000d000b0b200241106a24000f0b1036000bde0103037f017e017f230041106b22022400200028020021032000280208220020011076024020004106742200450d00200320006a210403402001200341201074200329032021052002200341286a290300370308200220053703002001200241101074200328023021002003280238220620011076200341c0006a21030240200641306c2206450d00200020066a210603402001200041201074200041206a29030021052002200041286a290300370308200220053703002001200241101074200041306a22002006470d000b0b20032004470d000b0b200241106a24000bdc0201047f230041206b2203240002400240200041086a28020022042001490d00024002402004200041046a280200470d00200441016a22052004490d03200441017422062005200620054b1b22054104200541044b1b220541ffffff3f712005464103742106200541057421050240024020040d00200341003602100c010b200341106a41086a410836020020032004410574360214200320002802003602100b200320052006200341106a107d200341086a280200210520032802004101460d0120002003280204360200200041046a20054105763602000b200028020020014105746a220541206a2005200420016b41057410ea081a200541186a200241186a290300370300200541106a200241106a290300370300200541086a200241086a29030037030020052002290300370300200041086a200441016a360200200341206a24000f0b2005450d011036000b200120041045000b1038000bf70301087f200041086a22032802002104410021052003410036020002402004450d004100210541002106024003400240024020050d0020012802002207210803402000280200200641306c6a210903402008450d0320082009412010ec0841004a0d0302400240200228020022082002280204470d00410021080c010b2002200841206a3602000b2001200836020020072009412010ec08210a20082107200a4100480d000b200821072004200641016a22064b0d000b410021050c040b03402000280200200641306c6a210920012802002207210803402008450d0220082009412010ec0841004a0d0202400240200228020022082002280204470d00410021080c010b2002200841206a3602000b2001200836020020072009412010ec08210a20082107200a4100480d000b2000280200200620056b41306c6a22082009290300370300200841286a200941286a290300370300200841206a200941206a290300370300200841186a200941186a290300370300200841106a200941106a290300370300200841086a200941086a2903003703002004200641016a22064d0d030c000b0b200541016a21052004200641016a22064b0d000b0b024020050d00410021050c010b20002802002208200620056b41306c6a2008200641306c6a200420066b41306c10ea081a0b2003200420056b3602000be10101047f230041206b22012400024002400240200041046a28020020002802082202470d00200241016a22032002490d02200241017422042003200420034b1b22034104200341044b1b220341ffffffff01712003464102742104200341037421030240024020020d00200141003602100c010b200141186a410436020020012002410374360214200120002802003602100b200120032004200141106a107d200141086a280200210220012802004101460d0120002001280204360200200041046a20024103763602000b200141206a24000f0b2002450d001036000b1038000baf0c01107f230041a0036b2202240002400240024020012802082203200128020c460d0020012802102104200241b4026a2105200241e0026a41206a2106200241c8016a4104722107200241d0006a4104722108200241106a41386a2109200241106a41306a210a200241106a41286a210b03402001200341206a36020820082003290000370000200841086a200341086a290000370000200841106a200341106a290000370000200841186a200341186a29000037000020022004360250024002402004200810be01450d002001200128021041016a22043602100c010b200241c8016a41206a200241d0006a41206a280200360200200241c8016a41186a200241d0006a41186a290300370300200241c8016a41106a200241d0006a41106a290300370300200241c8016a41086a200241d0006a41086a290300370300200220022903503703c801200241f0016a41186a2203200741186a220c290000370300200241f0016a41106a220d200741106a220e290000370300200241f0016a41086a220f200741086a2210290000370300200220072900003703f001200241e0026a41186a2204200c290000370300200241e0026a41106a220c200e290000370300200241e0026a41086a220e2010290000370300200220072900003703e00220024190026a200241e0026a10bf01200241c0026a41186a22102003290300370300200241c0026a41106a2211200d290300370300200241c0026a41086a220d200f290300370300200220022903f0013703c0020240024020022802b00222030d00410021030c010b2006200229039002370300200641186a20024190026a41186a290300370300200641106a20024190026a41106a290300370300200641086a20024190026a41086a29030037030020042010290300370300200c2011290300370300200e200d290300370300200241f8006a41086a200541086a280200360200200220022903c0023703e0022002200529020037037820024188016a41386a200241e0026a41386a29030037030020024188016a41306a200241e0026a41306a29030037030020024188016a41286a200241e0026a41286a29030037030020024188016a41206a200629030037030020024188016a41186a200429030037030020024188016a41106a200c29030037030020024188016a41086a200e290300370300200220022903e002370388010b0240024020030d0020094200370300200a4200370300200b4200370300200241106a41206a4200370300200241106a41186a4200370300200241106a41106a4200370300200241106a41086a4200370300200241086a410036020020024200370310200242003703000c010b200920024188016a41386a290300370300200a20024188016a41306a290300370300200b20024188016a41286a290300370300200241106a41206a20024188016a41206a290300370300200241106a41186a20024188016a41186a290300370300200241106a41106a20024188016a41106a290300370300200241106a41086a20024188016a41086a290300370300200241086a200241f8006a41086a2802003602002002200229038801370310200220022903783703000b2001200128021041016a220436021020030d030b20012802082203200128020c470d000b0b200041003602400c010b200241e0026a41386a2201200241106a41386a290300370300200241e0026a41306a2208200241106a41306a290300370300200241e0026a41286a2204200241106a41286a290300370300200241e0026a41206a2207200241106a41206a290300370300200241e0026a41186a2206200241106a41186a290300370300200241e0026a41106a220c200241106a41106a290300370300200241e0026a41086a220e200241106a41086a29030037030020024188016a41086a220d200241086a280200360200200220022903103703e0022002200229030037038801200041386a2001290300370300200041306a2008290300370300200041286a2004290300370300200041206a2007290300370300200041186a2006290300370300200041106a200c290300370300200041086a200e290300370300200020022903e002370300200020033602402000200229038801370244200041cc006a200d2802003602000b200241a0036a24000bc10501037f23004190016b22022400200241e0006a22034200370300200241d8006a22044200370300200241c8006a41086a420037030020024200370348200241c8006a41a081ca004107108102200241e8006a41e4d1c100410c1081022003200241e8006a41086a29000037030020042002290068370300200241106a200241c8006a4120108e02200241c8006a2002280214410020022802101b2204200010c206200228024822002002280250108f0221030240200228024c450d002000102e0b4101210002400240024020030d00200241186a41bed8c8004108108102200241e8006a41edd8c800410e108102200220043602382002200241386a410410a301370378200241d4006a2203200241386a41046a3602002002200241f8006a41086a36024c2002200241386a3602502002200241f8006a360248200241286a200241c8006a107c4120102c2200450d012002422037027c20022000360278200241f8006a200141201074200220022802782200200228028001220410a301370388012003200020046a36020020022000360250200220024188016a41086a36024c200220024188016a360248200241386a200241c8006a107c0240200228027c450d002000102e0b20022802302203200228024022046a41206a2200417f4c0d020240024020000d00410121010c010b2000102c2201450d020b200241003602502002200036024c20022001360248200241c8006a200241186a41101074200241c8006a200241e8006a41101074200241c8006a2002280228220020031074200241c8006a20022802382203200410740240200228023c450d002003102e0b0240200228022c450d002000102e0b200241086a200228024822042002280250108e02200228020c2100200228020821030240200228024c450d002004102e0b200341004720004100477121000b20024190016a240020000f0b1036000b1038000bbf0302077f017e230041a0016b22022400200241086a1094030240024020022903084202520d00200041003602200c010b200241f0006a200241086a41106a280200200110a103200241c0006a20022802702203200228027810a20320024180016a41186a2204200241c0006a41186a29030037030020024180016a41106a2205200241c0006a41106a2903003703004108210120024180016a41086a2206200241c0006a41086a2903003703002002200229034037038001200241ec006a280200210702400240200228026022080d0042002109200241206a41186a4200370300200241206a41106a4200370300200241206a41086a4200370300200242003703200c010b200241206a41086a2006290300370300200241206a41106a2005290300370300200241206a41186a2004290300370300200220022903800137032020022902642109200821010b02402002280274450d002003102e0b2000200229032037030020002009370224200020013602202000412c6a2007360200200041186a200241206a41186a290300370300200041106a200241206a41106a290300370300200041086a200241206a41086a2903003703000b200241a0016a24000bb60303057f017e037f230041e0006b2202240002400240200128020c2203200128020822046b2205410675220641ffffff3f712006470d0020054101752205417f4c0d00200129020021070240024020050d00410121010c010b2005102c2201450d020b20002001360200200041086a220841003602002000200541057636020420004100200610c10120082802002105024020042003460d00200028020020054105746a2100200241206a41206a21010340200241206a41386a200441386a290300370300200241206a41306a200441306a290300370300200241206a41286a200441286a2903003703002001200441206a290300370300200241086a2206200141086a290000370300200241106a2209200141106a290000370300200241186a220a200141186a29000037030020022001290000370300200041186a200a290300370000200041106a2009290300370000200041086a200629030037000020002002290300370000200541016a2105200041206a21002003200441c0006a2204470d000b0b20082005360200024020074280808080f0ffffff0383500d002007a7102e0b200241e0006a24000f0b1038000b1036000bdd0101027f230041206b22032400024002400240200041046a280200220420016b20024f0d00200120026a22022001490d02200441017422012002200120024b1b22014104200141044b1b220141ffffff3f712001462102200141057421010240024020040d00200341003602100c010b200341186a410136020020032004410574360214200320002802003602100b200320012002200341106a107d200341086a280200210120032802004101460d0120002003280204360200200041046a20014105763602000b200341206a24000f0b2001450d001036000b1038000bad0204047f017e017f037e02400240200128020c2202200128020822036b41306d220441ffffff3f712004470d0020044105742205417f4c0d00200129020021060240024020050d00410121010c010b2005102c2201450d020b20002001360200200041086a220741003602002000200541057636020420004100200410c1012006422088a7210420072802002101024020032002460d00200028020020014105746a21000340200341086a2900002108200341106a29000021092003290000210a200041186a200341186a290000370000200041106a2009370000200041086a20083700002000200a370000200141016a2101200041206a21002002200341306a2203470d000b0b2007200136020002402004450d00200441306c450d002006a7102e0b0f0b1038000b1036000b820203017f017e067f0240024020012802082202ad420c7e2203422088a70d002003a72204417f4c0d00200128020021054104210102402004450d002004102c2201450d020b2000410036020820002001360200200041046a2004410c6e220636020002402004410c490d00200241ffffffff0371210703402007450d01200541086a2802002204417f4c0d02200528020021080240024020040d00410121090c010b2004102c2209450d040b20092008200410e9082108200141086a2004360200200141046a2004360200200120083602002005410c6a21052001410c6a21012007417f6a21072006417f6a22060d000b0b200020023602080f0b1038000b1036000bd10503027f017e0a7f230041206b220224000240024020012802082203ad42247e2204422088a70d002004a72205417f4c0d00200128020021064104210702402005450d002005102c2207450d020b410021082000410036020820002007360200200041046a200541246e2209360200024020054124490d002002411e6a210a034020052008460d014101210b02400240024002400240200620086a22012d00000e050104020300010b200a200141036a2d00003a00004104210b200241086a41046a200141146a2d00003a00002002200141016a2f00003b011c2002200141106a2800003602082001410c6a280000210c200141086a280000210d200141046a280000210e0c030b200a200141036a2d00003a0000200241086a41086a200141186a290000370300200241086a41106a200141206a2d00003a00002002200141016a2f00003b011c2002200141106a2900003703082001410c6a280000210c200141086a280000210d200141046a280000210e4100210b0c020b2001410c6a280200220d417f4c0d04200141046a280200210102400240200d0d004101210e0c010b200d102c220e450d060b200e2001200d10e9081a4102210b200d210c0c010b4103210b200a200141036a2d00003a0000200241086a41086a200141186a290000370300200241086a41106a200141206a2d00003a00002002200141016a2f00003b011c2002200141106a2900003703082001410c6a280000210c200141086a280000210d200141046a280000210e0b200720086a2201200b3a0000200141016a20022f011c3b0000200141036a200a2d00003a00002001410c6a200c360200200141086a200d360200200141046a200e360200200141106a2002290308370200200141186a200241086a41086a290300370200200141206a200241086a41106a280200360200200841246a21082009417f6a22090d000b0b20002003360208200241206a24000f0b1038000b1036000bdb0205027f017e037f017e037f230041206b220224000240024020012802082203ad42307e2204422088a70d002004a72205417f4c0d00200128020021060240024020050d00410821010c010b2005102c2201450d020b2000410036020820002001360200200041046a200541306e2207360200024020054130490d00200341ffffffff0071210503402005450d01200641086a290300210420062903002108200241186a2209200641286a290300370300200241106a220a200641206a290300370300200241086a220b200641186a2903003703002002200641106a2903003703002001200437030820012008370300200141106a2002290300370300200141186a200b290300370300200141206a200a290300370300200141286a2009290300370300200641306a2106200141306a21012005417f6a21052007417f6a22070d000b0b20002003360208200241206a24000f0b1038000b1036000bbf0304027f017e067f077e230041306b220224000240024020012802082203ad42d0007e2204422088a70d002004a72205417f4c0d00200128020021060240024020050d00410821010c010b2005102c2201450d020b2000410036020820002001360200200041046a200541d0006e22073602000240200541d000490d0003402005450d01200241106a41086a2208200641086a290300370300200241106a41106a2209200641106a290300370300200241106a41186a220a200641186a29030037030020022006290300370310200641286a2903002104200641306a290300210b200641386a290300210c2006290320210d2002200641c0006a10c501200a290300210e2009290300210f2008290300211020022903102111200141386a200c370300200141306a200b370300200141286a2004370300200141206a200d370300200141086a201037030020012011370300200141106a200f370300200141186a200e370300200141c0006a2002290300370300200141c8006a200241086a280200360200200141d0006a2101200541b07f6a2105200641d0006a21062007417f6a22070d000b0b20002003360208200241306a24000f0b1038000b1036000bdd0603027f017e0d7f230041106b220224000240024020012802082203ad42247e2204422088a70d002004a72205417f4c0d00200128020021064104210702402005450d002005102c2207450d020b410021082000410036020820002007360200200041046a200541246e2209360200024020054124490d00034020052008460d010240024002400240024002400240200620086a22012d00000e06010203040500010b2001410c6a280200220a417f4c0d08200141046a280200210102400240200a0d004101210b0c010b200a102c220b450d0a0b200b2001200a10e908410876210c4105210d200a210e0c050b2002200141146a2900003703002002200141196a290000370005200141016a2f0000200141036a2d000041107472210f200141046a280000220b410876210c200141106a28000021102001410c6a280000210a200141086a280000210e4100210d0c040b200141106a2802002210417f4c0d06200141036a2d0000210f200141016a2f0000210a200141086a2802002111200141046a2d0000210b4101210d4101210e02402010450d002010102c220e450d080b200a200f41107472210f200e2011201010e9081a2010210a0c030b200141106a2802002210417f4c0d05200141036a2d0000210f200141016a2f0000210a200141086a280200210d200141046a2d0000210b0240024020100d004101210e0c010b2010102c220e450d070b200a200f41107472210f200e200d201010e9081a4102210d2010210a0c020b200141106a2802002210417f4c0d04200141036a2d0000210f200141016a2f0000210a200141086a280200210d200141046a2d0000210b0240024020100d004101210e0c010b2010102c220e450d060b200a200f41107472210f200e200d201010e9081a4103210d2010210a0c010b4104210d200141046a280200210b2001410c6a280200210a200141086a280200210e4100210c0b200720086a2201200d3a0000200141036a200f4110763a0000200141016a200f3b0000200141106a20103602002001410c6a200a360200200141086a200e360200200141046a200c410874200b41ff017172360200200141146a20022903003702002001411c6a200241086a290300370200200841246a21082009417f6a22090d000b0b20002003360208200241106a24000f0b1038000b1036000be20102047f037e024002402001280208220241ffffff3f712002470d0020024105742203417f4c0d00200128020021040240024020030d00410121010c010b2003102c2201450d020b2000410036020820002001360200200041046a2003410576220536020002402003450d0003402005450d01200441086a2900002106200441106a290000210720042900002108200141186a200441186a290000370000200141106a2007370000200141086a200637000020012008370000200141206a2101200441206a21042005417f6a22050d000b0b200020023602080f0b1038000b1036000bf4380f027f017e167f017e017f027e0d7f027e047f017e057f047e0b7f027e037f230041c0056b220224000240024020012802082203ad42b0027e2204422088a70d002004a72205417f4c0d00200128020021060240024020050d00410821070c010b2005102c2207450d020b410021082000410036020820002007360200200041046a200541b0026e22093602000240200541b002490d00200241a8036a210a20024190056a210b200241d0036a210c200241a4036a210d200241f8036a210e200241d8036a210f200241b8036a211020024198036a2111200241d4036a2112200241a0036a2113034020052008460d0102400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200620086a22012802000e1c0102030405060708090a0b0c0d0e0f101112131415161718191a1b00010b20024190036a200141386a10ca0120024180036a41086a2214200141246a2d00003a000020022001411c6a29020037038003200141256a2d000021152002200141266a2f01003b01be01200141186a2802002116200141146a2802002117200141106a2802002118200141086a2903002104200141286a28020021192001412c6a280200211a200141306a290300211b200141f8016a280200211c200229039003211d200229039803211e200241d0016a201341b00110e9081a20014184026a280200211f20014180026a2802002120200241c0016a41086a20142d00003a000020022002290380033703c001200241086a200241d0016a41b00110e9081a411b21140c1b0b20024190036a200141086a10cb01200220022802a4033602c00120022802a0032116200228029c03211720022802980321182002290390032104410021140c1a0b20024190036a200141046a10cc01200241c0016a41086a200a41086a2d00003a00002002200a2902003703c001200220022f01b2033b01be0120022802a403211620022802a0032117200228029c0321182002290294032104200228029003212120022d00b1032115410121140c190b20024190036a200141086a10cd01200241c0016a41086a200d41086a2d00003a00002002200d2902003703c001200220022f01ae033b01be01200241c0036a290300211d20022903b803211b20022802a0032116200228029c0321172002280298032118200229039003210420022d00ad03211520022802b003211920022802b403211a20022903c803211e200241086a200c41b00110e9081a200241d0016a41086a200b41086a290200370300200241d0016a41106a200b41106a290200370300200241d0016a41186a200b41186a2902003703002002200b2902003703d001200228028c05211f20022802880521202002280284052122200228028005211c410221140c180b200141086a2903002104410321140c170b4104211402400240024002400240024002400240200141046a2d0000417f6a0e050102030405000b41e2a0cc00412841e89bc4001039000b200141086a2802002101410121140c040b20024190036a41086a200141246a2d00003a000020022001411c6a29000037039003200141056a2f0000200141076a2d0000411074722123200141186a2800002116200141146a2800002117200141106a2800002124200141286a2802002119200141086a2900002204a721012004422088a7212541022114202621150c040b200141086a2802002101410321140c020b20024190036a41086a200141246a2d00003a000020022001411c6a29000037039003200141056a2f0000200141076a2d0000411074722123200141256a2d00004100472115200141186a2800002116200141146a2800002117200141106a2800002124200141286a2802002119200141086a2900002204a721012004422088a721250c020b200141086a2802002101410521140b202721192026211520282117202921160b200241c0016a41086a20024190036a41086a2d00003a000020022002290390033703c001200220022f01d0013b01be01202341087420147221212025ad4220862001ad8421044104211420192127201521262017212820162129202421180c160b20024190036a200141086a10ce01200241c0016a41086a200d41086a2d00003a0000200241086a41086a200c41086a290200370300200241086a41106a200c41106a290200370300200241086a41186a200c41186a2902003703002002200d2902003703c001200220022f01ae033b01be012002200c290200370308200241c0036a290300211d20022903b803211b20022802a0032116200228029c0321172002280298032118200229039003210420022d00ad03211520022802b003211920022802b403211a20022903c803211e410521140c150b20024190036a200141046a10cf0120022902940321042002280290032121410621140c140b20024190036a200141086a10d001200241c0016a41086a200d41086a2d00003a0000200241086a41086a200c41086a290200370300200241086a41106a200c41106a2902003703002002200d2902003703c001200220022f01ae033b01be012002200c290200370308200241c0036a290300211d20022903b803211b20022802a0032116200228029c0321172002280298032118200229039003210420022d00ad03211520022802b003211920022802b403211a20022903c803211e410721140c130b10d101000b02400240200141046a22142802000d0041002121202a2117202b21160c010b200241086a41086a200141246a2d00003a0000201141186a200141e8006a290200370200201141106a200141e0006a290200370200201141086a200141d8006a2902003702002011200141d0006a29020037020020022001411c6a2900003703082002200141266a2f01003b01c0012002200141c8006a29020037039003200141386a290200212c200141306a290200212d200141186a2802002116200141146a2802002117200141106a280200212e200141256a2d0000212f200141286a28020021302001412c6a2802002131200141c0006a2902002132201041186a20014188016a290200370200201041106a20014180016a290200370200201041086a200141f8006a2902003702002010200141f0006a290200370200200f20014190016a290200370200200f41086a20014198016a290200370200200f41106a200141a0016a290200370200200f41186a200141a8016a290200370200200e200141b0016a290200370200200e41086a200141b8016a290200370200200e41106a200141c0016a290200370200200e41186a200141c8016a2902003702002001410c6a2802002233417f4c0d15201428020021010240024020330d00410121210c010b2033102c2221450d170b20212001203310e9081a20024180036a41086a200241086a41086a2d00003a00002002200229030837038003200220022f01c0013b01ce01200241d0016a20024190036a41880110e9081a2017212a2016212b0b200241c0016a41086a20024180036a41086a2d00003a000020022002290380033703c001200220022f01ce013b01be01200241086a200241d0016a41880110e9081a2033ad4220862033ad842104410921142032211e202d211b202c211d2031211a20302119202f2115202e21180c110b20024190036a200141086a10d201200241c0016a41086a200d41086a2d00003a00002002200d2902003703c001200220022f01ae033b01be01200241c0036a290300211d20022903b803211b20022802a0032116200228029c0321172002280298032118200229039003210420022d00ad03211520022802b003211920022802b403211a20022903c803211e200241086a200c41b00110e9081a200241d0016a41086a200b41086a290200370300200241d0016a41106a200b41106a2902003703002002200b2902003703d001200228028c05211f20022802880521202002280284052122200228028005211c410a21140c100b20024190036a200141046a10d301200241c0016a41086a200a41086a2d00003a0000200241086a41086a201241086a290200370300200241086a41106a201241106a290200370300200241086a41186a201241186a290200370300200241086a41206a201241206a2802003602002002200a2902003703c001200220022f01b2033b01be0120022012290200370308200241c4036a290200211d20022902bc03211b20022802a403211620022802a0032117200228029c0321182002290294032104200228029003212120022d00b103211520022802b403211920022802b803211a20022902cc03211e410b21140c0f0b10d401000b20024190036a200141086a10d501200241c0016a41086a200d41086a2d00003a00002002200d2902003703c001200220022f01ae033b01be01200241c0036a290300211d20022903b803211b20022802a0032116200228029c0321172002280298032118200229039003210420022d00ad03211520022802b003211920022802b403211a410d21140c0d0b20024190036a200141086a10d601200241c0016a41086a200d41086a2d00003a00002002200d2902003703c001200220022f01ae033b01be01200241c0036a290300211d20022903b803211b20022802a0032116200228029c0321172002280298032118200229039003210420022d00ad03211520022802b003211920022802b403211a410e21140c0c0b20024190036a200141086a10d601200241c0016a41086a200d41086a2d00003a00002002200d2902003703c001200220022f01ae033b01be01200241c0036a290300211d20022903b803211b20022802a0032116200228029c0321172002280298032118200229039003210420022d00ad03211520022802b003211920022802b403211a410f21140c0b0b20024190036a200141086a10d701200241c0016a41086a200d41086a2d00003a00002002200d2902003703c001200220022f01ae033b01be0120022802a0032116200228029c0321172002280298032118200229039003210420022d00ad03211520022802b003211920022802b403211a411021140c0a0b4107211702400240024002400240024002400240200141046a2d0000417f6a0e0701020304050607000b41e2a0cc00412841a4c3cb001039000b20024190036a41086a200141246a2d00003a000020022001411c6a29000037039003200141056a2f0000200141076a2d0000411074722134200141186a2800002135200141146a2800002136200141106a2800002137200141086a2900002138410121170c050b20024190036a41086a200141246a2d00003a000020022001411c6a29000037039003200141056a2f0000200141076a2d0000411074722134200141186a2800002135200141146a2800002136200141106a2800002137200141086a2900002138410221170c040b20024190036a41086a200141246a2d00003a000020022001411c6a290000370390032002200141266a2f00003b01d001200141056a2f0000200141076a2d000041107472213420394280808080806083200141c0006a350000200141c4006a31000042208684842139200141386a290000213a200141306a290000213b2001412c6a280000213c200141286a280000213d200141256a2d0000213e200141186a2800002135200141146a2800002136200141106a2800002137200141086a2900002138410321170c030b20024190036a200141086a10c80120022802980321372002290390032138410421170c020b20024190036a41086a200141246a2d00003a000020022001411c6a2900003703900341052117200141056a2f0000200141076a2d0000411074722134200141186a2800002135200141146a2800002136200141106a2800002137200141086a29000021380c010b20024190036a41086a200141246a2d00003a000020022001411c6a29000037039003200141056a2f0000200141076a2d0000411074722134200141186a2800002135200141146a2800002136200141106a2800002137200141086a2900002138410621170b200241c0016a41086a20024190036a41086a2d00003a000020022002290390033703c001200220022f01d0013b01be0120344108742017722121411121142039211e203b211b203a211d203c211a203d2119203e2115203621172035211620372118203821040c090b024002400240024002400240200141086a280200417f6a0e03010203000b41e2a0cc0041284184ccc2001039000b200141386a290300211d200141306a290300211b41012117024002400240024002402001410c6a2d00000e050104020300010b4104211720024190036a41046a200141206a2d00003a000020022001411c6a280000360290032001410d6a2f00002001410f6a2d000041107472213f200141186a2800002140200141146a2800002141200141106a28000021420c030b20024198036a200141246a2d00003a000020022001411c6a290000370390032002200141266a2f00003b01082001410d6a2f00002001410f6a2d000041107472213f2001412c6a2d00002143200141286a2800002144200141256a2d00002145200141186a2800002140200141146a2800002141200141106a2800002142410021170c020b200141186a2802002241417f4c0d11200141106a28020021010240024020410d00410121420c010b2041102c2242450d130b20422001204110e9081a41022117204121400c010b20024198036a200141246a2d00003a000020022001411c6a290000370390032002200141266a2f00003b01082001410d6a2f00002001410f6a2d000041107472213f2001412c6a2d00002143200141286a2800002144200141256a2d00002145200141186a2800002140200141146a2800002141200141106a2800002142410321170b200241d0016a41086a20024190036a41086a2d00003a000020022002290390033703d001200220022f01083b018003204341ff0171211a42012104203f21010c030b2001410c6a28020022174108762101420221040c010b2001410c6a28020022174108762101420321040b2046211a2047211b2048211d0b200241c0016a41086a200241d0016a41086a2d00003a0000200220022903d0013703c001200220022f0180033b01be012001410874201741ff017172ad422086200484210441122114201a2146201b2147201d214820442119204521152041211720402116204221180c080b20024190036a200141086a10d801200241c0016a41086a200d41086a2d00003a0000200241086a41086a200c41086a290200370300200241086a41106a200c41106a290200370300200241086a41186a200c41186a290200370300200241086a41206a200c41206a290200370300200241086a41286a200c41286a2902003703002002200d2902003703c001200220022f01ae033b01be012002200c290200370308200241c0036a290300211d20022903b803211b20022802a0032116200228029c0321172002280298032118200229039003210420022d00ad03211520022802b003211920022802b403211a20022903c803211e411321140c070b20024190036a200141086a10d901200241c0016a41086a200d41086a2d00003a0000200241086a41086a200c41086a290200370300200241086a41106a200c41106a290200370300200241086a41186a200c41186a290200370300200241086a41206a200c41206a290200370300200241086a41286a200c41286a290200370300200241086a41306a200c41306a2902003703002002200d2902003703c001200220022f01ae033b01be012002200c29020037030820024190036a41306a290300211d20022903b803211b20022802a0032116200228029c0321172002280298032118200229039003210420022d00ad03211520022802b003211920022802b403211a20022903c803211e411421140c060b0240024002400240200141046a2f0100417f6a0e03010200010b20024190036a200141086a10c9012002280298032149200228029403214a2002280290032114410321010c020b20024190036a200141086a10c9012002280298032149200228029403214a2002280290032114410121010c010b200141066a2f0100214b41b002102c2214450d0a20024190036a200141086a28020010da01201420024190036a41b00210e9081a410221010b204b4110742001722121204aad4220862014ad84210441152114204921180c050b20024190036a200141086a10db01200241c0016a41086a200d41086a2d00003a00002002200d2902003703c001200220022f01ae033b01be01200241c0036a290300211d20022903b803211b20022802a0032116200228029c0321172002280298032118200229039003210420022d00ad03211520022802b003211920022802b403211a20022903c803211e200241086a200c41b00110e9081a200241d0016a41086a200b41086a290200370300200241d0016a41106a200b41106a290200370300200241d0016a41186a200b41186a290200370300200241d0016a41206a200b41206a2902003703002002200b2902003703d001200228028c05211f20022802880521202002280284052122200228028005211c411621140c040b20024190036a200141046a10dc01200241c0016a41086a200a41086a2d00003a00002002200a2902003703c001200220022f01b2033b01be01200220022802d403360208200241c4036a290200211d20022902bc03211b20022802a403211620022802a0032117200228029c0321182002290294032104200228029003212120022d00b103211520022802b403211920022802b803211a20022902cc03211e411721140c030b20024190036a200141086a10dd01200241c0016a41086a200d41086a2d00003a00002002200d2902003703c001200220022f01ae033b01be01200220022903d003370308200241c0036a290300211d20022903b803211b20022802a0032116200228029c0321172002280298032118200229039003210420022d00ad03211520022802b003211920022802b403211a20022903c803211e411821140c020b20024190036a200141086a10de01200241c0016a41086a200d41086a2d00003a00002002200d2902003703c001200220022f01ae033b01be01200241c0036a290300211d20022903b803211b20022802a0032116200228029c0321172002280298032118200229039003210420022d00ad03211520022802b003211920022802b403211a20022903c803211e411921140c010b20024190036a200141086a10df01200241c0016a41086a200d41086a2d00003a00002002200d2902003703c001200220022f01ae033b01be01200241c0036a290300211d20022903b803211b20022802a0032116200228029c0321172002280298032118200229039003210420022d00ad03211520022802b003211920022802b403211a20022903c803211e411a21140b200720086a22012014360200200141186a2016360200200141146a2017360200200141106a2018360200200141086a2004370300200141046a2021360200200241c0016a41086a2d0000211420022903c0012104200141256a20153a0000200141386a201d370200200141306a201b3702002001411c6a2004370200200141246a20143a0000200141c0006a201e3702002001412c6a201a360200200141286a2019360200200141266a20022f01be013b0100200141c8006a200241086a41b00110e9081a20014184026a201f36020020014180026a2020360200200141fc016a2022360200200141f8016a201c36020020014188026a20022903d00137020020014190026a200241d0016a41086a29030037020020014198026a200241d0016a41106a290300370200200141a0026a200241d0016a41186a290300370200200141a8026a200241f0016a290300370200200841b0026a21082009417f6a22090d000b0b20002003360208200241c0056a24000f0b1038000b1036000bce0d03057f017e287f024002402001280208220241ffffffff01712002470d0020024103742203417f4c0d00200128020021040240024020030d00410421050c010b2003102c2205450d020b200020053602002000200341037636020420052004200241037410e9081a20002002360208200141146a2802002206ad420c7e2207422088a70d002007a72204417f4c0d00200128020c21034104210202402004450d002004102c2202450d020b20022003200410e9082108200141206a280200220241ffffffff00712002470d0020024104742209417f4c0d00200128021821054104210302402009450d002009102c2203450d020b20032005200241047410e908210a2001412c6a280200220bad42147e2207422088a70d002007a7220c417f4c0d002001280224210302400240200c0d00410421050c010b200c102c2205450d020b20052003200c10e908210d200141386a280200220ead42187e2207422088a70d002007a7220f417f4c0d002001280230210302400240200f0d00410421050c010b200f102c2205450d020b20052003200f10e9082110200141c4006a2802002211ad421c7e2207422088a70d002007a72212417f4c0d00200128023c21030240024020120d00410421050c010b2012102c2205450d020b20052003201210e9082113200141d0006a280200220341ffffff3f712003470d0020034105742214417f4c0d00200128024821050240024020140d00410421150c010b2014102c2215450d020b20152005200341057410e9082116200141dc006a2802002217ad42247e2207422088a70d002007a72215417f4c0d00200128025421050240024020150d00410421180c010b2015102c2218450d020b20182005201510e9082119200141e8006a280200221aad42287e2207422088a70d002007a72218417f4c0d00200128026021050240024020180d004104211b0c010b2018102c221b450d020b201b2005201810e908211c200141f4006a280200221dad422c7e2207422088a70d002007a7221b417f4c0d00200128026c210502400240201b0d004104211e0c010b201b102c221e450d020b201e2005201b10e908211f20014180016a2802002220ad42307e2207422088a70d002007a7221e417f4c0d002001280278210502400240201e0d00410421210c010b201e102c2221450d020b20212005201e10e90821222001418c016a2802002223ad42347e2207422088a70d002007a72221417f4c0d0020012802840121050240024020210d00410421240c010b2021102c2224450d020b20242005202110e908212520014198016a2802002226ad42387e2207422088a70d002007a72224417f4c0d0020012802900121050240024020240d00410421270c010b2024102c2227450d020b20272005202410e9082128200141a4016a2802002229ad423c7e2207422088a70d002007a72227417f4c0d00200128029c0121050240024020270d004104212a0c010b2027102c222a450d020b202a2005202710e908212b200141b0016a280200220541ffffff1f712005470d002005410674222c417f4c0d0020012802a801212a02400240202c0d004104212d0c010b202c102c222d450d020b202d202a200541067410e908212d200141bc016a280200222ead42c4007e2207422088a70d002007a7222a417f4c0d0020012802b401212f410421010240202a450d00202a102c2201450d020b2001202f202a10e9082101200041bc016a202e360200200041b8016a202a41c4006e360200200020013602b401200041b0016a2005360200200041ac016a202c4106763602002000202d3602a801200041a4016a2029360200200041a0016a2027413c6e3602002000202b36029c0120004198016a202636020020004194016a202441386e36020020002028360290012000418c016a202336020020004188016a202141346e360200200020253602840120004180016a2020360200200041fc006a201e41306e36020020002022360278200041f4006a201d360200200041f0006a201b412c6e3602002000201f36026c200041e8006a201a360200200041e4006a201841286e3602002000201c360260200041dc006a2017360200200041d8006a201541246e36020020002019360254200041d0006a2003360200200041cc006a201441057636020020002016360248200041c4006a2011360200200041c0006a2012411c6e3602002000201336023c200041386a200e360200200041346a200f41186e360200200020103602302000412c6a200b360200200041286a200c41146e3602002000200d360224200041206a20023602002000411c6a20094104763602002000200a360218200041146a2006360200200041106a2004410c6e3602002000200836020c0f0b1038000b1036000b9d0803047f017e087f230041106b2202240002400240024002400240024002400240024002400240024002402001280200417f6a0e0a01020304050607080900010b2001410c6a2802002203417f4c0d0a200128020421010240024020030d00410121040c010b2003102c2204450d0c0b20042001200310e90821012000410c6a2003360200200041086a2003360200200020013602042000410a3602000c090b20004101360200200020012802043602040c080b2001410c6a2802002203417f4c0d08200128020421010240024020030d00410121040c010b2003102c2204450d0a0b20042001200310e90821012000410c6a2003360200200041086a200336020020002001360204200041023602000c070b20004103360200200041086a200141086a2903003703000c060b2001410c6a2802002203417f4c0d06200128020421010240024020030d00410121040c010b2003102c2204450d080b20042001200310e90821012000410c6a2003360200200041086a200336020020002001360204200041043602000c050b2001410c6a2802002203417f4c0d05200128020421010240024020030d00410121040c010b2003102c2204450d070b20042001200310e90821012000410c6a2003360200200041086a200336020020002001360204200041053602000c040b20004106360200200020012902043702042000410c6a2001410c6a2802003602000c030b2001410c6a2802002205ad42187e2206422088a70d032006a72203417f4c0d030240024020030d00200341186e2107410421080c010b200128020421092003102c2208450d05200341186e210720034118490d00200541ffffffff0171210a4100210b2007210c0340200a450d012009200b6a220141086a2802002203417f4c0d05200128020021040240024020030d004101210d0c010b2003102c220d450d070b200d2004200310e908210d200141146a2802002204417f4c0d052001410c6a28020021010240024020040d004101210e0c010b2004102c220e450d070b200e2001200410e908210e2008200b6a2201200d360200200141146a2004360200200141106a20043602002001410c6a200e360200200141086a2003360200200141046a2003360200200a417f6a210a200b41186a210b200c417f6a220c0d000b0b20002008360204200041073602002000410c6a2005360200200041086a20073602000c020b2002200141046a10c301200041083602002000410c6a200241086a280200360200200020022903003702040c010b2001410c6a2802002203417f4c0d01200128020421040240024020030d004101210b0c010b2003102c220b450d030b200b2004200310e90821042000410c6a2003360200200041086a20033602002000200436020420004109360200200041106a20012802103602000b200241106a24000f0b1038000b1036000bca0701097f230041b0026b22022400024002400240024002400240024002400240024020012d0000417f6a0e06010203040506000b41e2a0cc00412841ecb0c4001039000b200141106a28020021032001410c6a2802002104200141086a2802002105200141046a280200210620012d0001210741b002102c2208450d062002200141146a28020010a8042008200241b00210e9082101200041106a20033602002000410c6a2004360200200041086a2005360200200041046a2006360200200041146a2001360200200020073a0001200041013a00000c050b200041023a0000200041046a200141046a2902003702000c040b2001410c6a2802002203417f4c0d05200141046a28020021040240024020030d00410121050c010b2003102c2205450d050b20052004200310e90821042001411c6a2802002105200141186a280200210620012d00012107200128021421082001280210210941b002102c220a450d042002200128022010a804200a200241b00210e90821012000411c6a2005360200200041186a2006360200200041146a2008360200200041106a20093602002000410c6a2003360200200041086a2003360200200041046a2004360200200041206a2001360200200020073a0001200041033a00000c030b2001410c6a2802002203417f4c0d04200141046a28020021010240024020030d00410121040c010b2003102c2204450d040b20042001200310e90821012000410c6a2003360200200041086a2003360200200041046a2001360200200041043a00000c020b200141106a28020021032001410c6a2802002104200141086a2802002105200141046a280200210620012d0001210741b002102c2208450d022002200141146a28020010a8042008200241b00210e9082101200041106a20033602002000410c6a2004360200200041086a2005360200200041046a2006360200200041146a2001360200200020073a0001200041053a00000c010b2001410c6a2802002203417f4c0d02200141046a28020021040240024020030d00410121050c010b2003102c2205450d020b20052004200310e90821042001411c6a2802002105200141186a280200210620012d00012107200128021421082001280210210941b002102c220a450d012002200128022010a804200a200241b00210e90821012000411c6a2005360200200041186a2006360200200041146a2008360200200041106a20093602002000410c6a2003360200200041086a2003360200200041046a2004360200200041206a2001360200200020073a0001200041063a00000b200241b0026a24000f0b1036000b1038000b9b1b03047f017e167f230041e0036b2202240002400240024002402001280200417f6a0e03010200010b20004103360200200041186a200141186a2d00003a0000200041106a200141106a290300370300200041086a200141086a2903003703000c020b20024180026a41186a220320014198026a29000037030020024180026a41106a220420014190026a29000037030020024180026a41086a220520014188026a290000370300200220014180026a29000037038002200141186a2903002106200241e0026a41086a2207200141386a290200370300200241e0026a41106a2208200141c0006a290200370300200241e0026a41186a2209200141c8006a290200370300200241c0026a41086a220a200141d8006a290200370300200241c0026a41106a220b200141e0006a290200370300200241c0026a41186a220c200141e8006a290200370300200241a0026a41086a220d200141f8006a290200370300200241a0026a41106a220e20014180016a290200370300200241a0026a41186a220f20014188016a2902003703002002200141306a2902003703e0022002200141d0006a2902003703c0022002200141f0006a2902003703a002200141206a2802002110200241f0016a200141246a10c701200241c0036a41086a2211200141a8016a290200370300200241c0036a41106a2212200141b0016a290200370300200241c0036a41186a2213200141b8016a290200370300200241a0036a41086a2214200141c8016a290200370300200241a0036a41106a2215200141d0016a290200370300200241a0036a41186a2216200141d8016a29020037030020024180036a41086a2217200141e8016a29020037030020024180036a41106a2218200141f0016a29020037030020024180036a41186a2219200141f8016a2902003703002002200141a0016a2902003703c0032002200141c0016a2902003703a0032002200141e0016a2902003703800320014190016a280200211a20024180016a20014194016a10c701200241186a221b2003290300370300200241106a22032004290300370300200241086a22042005290300370300200241d0016a41086a22052007290300370300200241d0016a41106a22072008290300370300200241d0016a41186a22082009290300370300200241b0016a41086a2209200a290300370300200241b0016a41106a220a200b290300370300200241b0016a41186a220b200c2903003703002002200229038002370300200220022903e0023703d001200220022903c0023703b00120024190016a41186a220c200f29030037030020024190016a41106a220f200e29030037030020024190016a41086a220e200d290300370300200241e0006a41186a220d2013290300370300200241e0006a41106a22132012290300370300200241e0006a41086a22122011290300370300200241c0006a41186a221c2016290300370300200241c0006a41106a22162015290300370300200241c0006a41086a22152014290300370300200220022903a00237039001200220022903c003370360200220022903a003370340200241206a41186a22142019290300370300200241206a41106a22192018290300370300200241206a41086a22182017290300370300200220022903800337032020012802042117200241c0036a200141086a10c301200041206a2010360200200041186a2006370300200041246a20022903f0013702002000412c6a200241f0016a41086a280200360200200041306a20022903d001370300200041386a2005290300370300200041c0006a2007290300370300200041c8006a2008290300370300200041d0006a20022903b001370300200041d8006a2009290300370300200041e0006a200a290300370300200041e8006a200b290300370300200141146a280200210120004190016a201a36020020004188016a200c29030037030020004180016a200f290300370300200041f8006a200e290300370300200041f0006a2002290390013703002000419c016a20024180016a41086a28020036020020004194016a200229038001370200200041a0016a2002290360370300200041a8016a2012290300370300200041b0016a2013290300370300200041b8016a200d290300370300200041d8016a201c290300370300200041d0016a2016290300370300200041c8016a2015290300370300200041c0016a2002290340370300200041f8016a2014290300370300200041f0016a2019290300370300200041e8016a2018290300370300200041e0016a200229032037030020004198026a201b29030037030020004190026a200329030037030020004188026a200429030037030020004180026a200229030037030020002017360204200041106a2011280200360200200041086a20022903c003370200200041146a2001360200200041013602000c010b20024180026a41186a220320014198026a29000037030020024180026a41106a220420014190026a29000037030020024180026a41086a220520014188026a290000370300200220014180026a29000037038002200141186a2903002106200241e0026a41086a2207200141386a290200370300200241e0026a41106a2208200141c0006a290200370300200241e0026a41186a2209200141c8006a290200370300200241c0026a41086a220a200141d8006a290200370300200241c0026a41106a220b200141e0006a290200370300200241c0026a41186a220c200141e8006a290200370300200241a0026a41086a220d200141f8006a290200370300200241a0026a41106a220e20014180016a290200370300200241a0026a41186a220f20014188016a2902003703002002200141306a2902003703e0022002200141d0006a2902003703c0022002200141f0006a2902003703a002200141206a2802002110200241f0016a200141246a10c701200241c0036a41086a2211200141a8016a290200370300200241c0036a41106a2212200141b0016a290200370300200241c0036a41186a2213200141b8016a290200370300200241a0036a41086a2214200141c8016a290200370300200241a0036a41106a2215200141d0016a290200370300200241a0036a41186a2216200141d8016a29020037030020024180036a41086a2217200141e8016a29020037030020024180036a41106a2218200141f0016a29020037030020024180036a41186a2219200141f8016a2902003703002002200141a0016a2902003703c0032002200141c0016a2902003703a0032002200141e0016a2902003703800320014190016a280200211a20024180016a20014194016a10c701200241186a221b2003290300370300200241106a22032004290300370300200241086a22042005290300370300200241d0016a41086a22052007290300370300200241d0016a41106a22072008290300370300200241d0016a41186a22082009290300370300200241b0016a41086a2209200a290300370300200241b0016a41106a220a200b290300370300200241b0016a41186a220b200c2903003703002002200229038002370300200220022903e0023703d001200220022903c0023703b00120024190016a41186a220c200f29030037030020024190016a41106a220f200e29030037030020024190016a41086a220e200d290300370300200241e0006a41186a220d2013290300370300200241e0006a41106a22132012290300370300200241e0006a41086a22122011290300370300200241c0006a41186a221c2016290300370300200241c0006a41106a22162015290300370300200241c0006a41086a22152014290300370300200220022903a00237039001200220022903c003370360200220022903a003370340200241206a41186a22142019290300370300200241206a41106a22192018290300370300200241206a41086a22182017290300370300200220022903800337032020012802042117200241c0036a200141086a10c301200041206a2010360200200041186a2006370300200041246a20022903f0013702002000412c6a200241f0016a41086a280200360200200041306a20022903d001370300200041386a2005290300370300200041c0006a2007290300370300200041c8006a2008290300370300200041d0006a20022903b001370300200041d8006a2009290300370300200041e0006a200a290300370300200041e8006a200b290300370300200141146a280200210120004190016a201a36020020004188016a200c29030037030020004180016a200f290300370300200041f8006a200e290300370300200041f0006a2002290390013703002000419c016a20024180016a41086a28020036020020004194016a200229038001370200200041a0016a2002290360370300200041a8016a2012290300370300200041b0016a2013290300370300200041b8016a200d290300370300200041d8016a201c290300370300200041d0016a2016290300370300200041c8016a2015290300370300200041c0016a2002290340370300200041f8016a2014290300370300200041f0016a2019290300370300200041e8016a2018290300370300200041e0016a200229032037030020004198026a201b29030037030020004190026a200329030037030020004188026a200429030037030020004180026a200229030037030020002017360204200041106a2011280200360200200041086a20022903c003370200200041146a2001360200200041023602000b200241e0036a24000bc61803067f037e047f230041c0006b2202240002400240024002400240024002402001280200417f6a0e0401020300010b200141046a2103410121040240024002400240024020012d00040e050104020300010b2002410a6a200341036a2d00003a0000200241286a41046a200141186a2d00003a0000200220032f00013b01082002200141146a280000360228200141106a28020021052001410c6a2802002106200141086a2802002107410421040c030b2002410a6a200341036a2d00003a0000200241286a41086a2001411c6a290000370300200241286a41106a200141246a2d00003a0000200220032f00013b01082002200141146a290000370328200141106a28020021052001410c6a2802002106200141086a2802002107410021040c020b200141106a2802002205417f4c0d06200141086a28020021040240024020050d00410121070c010b2005102c2207450d080b20072004200510e9081a41022104200521060c010b410321042002410a6a200341036a2d00003a0000200241286a41086a2001411c6a290000370300200241286a41106a200141246a2d00003a0000200220032f00013b01082002200141146a290000370328200141106a28020021052001410c6a2802002106200141086a28020021070b200020043a0004200020022f01083b0005200020022f00243b0025200041106a20053600002000410c6a2006360000200041086a2007360000200041146a2002290328370000200041076a200241086a41026a2d00003a00002000411c6a200241286a41086a290300370000200041246a200241286a41106a2d00003a0000200041276a200241246a41026a2d00003a000020012903282108200041306a200141306a290300370300200041286a2008370300200041043602000c030b200141046a2103410121060240024002400240024020012d00040e050104020300010b2002410a6a200341036a2d00003a0000200241286a41046a200141186a2d00003a0000200220032f00013b01082002200141146a280000360228200141106a28020021042001410c6a2802002105200141086a2802002107410421060c030b2002410a6a200341036a2d00003a0000200241286a41086a2001411c6a290000370300200241286a41106a200141246a2d00003a0000200220032f00013b01082002200141146a290000370328200141106a28020021042001410c6a2802002105200141086a2802002107410021060c020b200141106a2802002205417f4c0d05200141086a28020021040240024020050d00410121070c010b2005102c2207450d070b20072004200510e9081a41022106200521040c010b410321062002410a6a200341036a2d00003a0000200241286a41086a2001411c6a290000370300200241286a41106a200141246a2d00003a0000200220032f00013b01082002200141146a290000370328200141106a28020021042001410c6a2802002105200141086a28020021070b200020063a0004200020022f01083b0005200020022f00243b0025200041106a20043600002000410c6a2005360000200041086a2007360000200041146a2002290328370000200041076a200241086a41026a2d00003a00002000411c6a200241286a41086a290300370000200041246a200241286a41106a2d00003a0000200041276a200241246a41026a2d00003a000020012903282108200041306a200141306a290300370300200041286a2008370300200041013602000c020b200141046a2103410121040240024002400240024020012d00040e050104020300010b2002410a6a200341036a2d00003a0000200241286a41046a200141186a2d00003a0000200220032f00013b01082002200141146a280000360228200141106a28020021062001410c6a2802002105200141086a2802002107410421040c030b2002410a6a200341036a2d00003a0000200241286a41086a2001411c6a290000370300200241286a41106a200141246a2d00003a0000200220032f00013b01082002200141146a290000370328200141106a28020021062001410c6a2802002105200141086a2802002107410021040c020b200141106a2802002205417f4c0d04200141086a28020021040240024020050d00410121070c010b2005102c2207450d060b20072004200510e9081a41022104200521060c010b410321042002410a6a200341036a2d00003a0000200241286a41086a2001411c6a290000370300200241286a41106a200141246a2d00003a0000200220032f00013b01082002200141146a290000370328200141106a28020021062001410c6a2802002105200141086a28020021070b200020043a0004200020022f01083b0005200020022f00243b0025200041106a20063600002000410c6a2005360000200041086a2007360000200041146a2002290328370000200041076a200241086a41026a2d00003a00002000411c6a200241286a41086a290300370000200041246a200241286a41106a2d00003a0000200041276a200241246a41026a2d00003a0000200141306a2903002108200129032821092001290338210a200041c0006a200141c0006a290300370300200041386a200a370300200041306a2008370300200041286a2009370300200041023602000c010b200141046a2107410121034101210b0240024002400240024020012d00040e050104020300010b200241206a200741036a2d00003a0000200241086a41046a200141186a2d00003a0000200220072f00013b011e2002200141146a280000360208200141106a280200210c2001410c6a2802002105200141086a28020021044104210b0c030b200241206a200741036a2d00003a0000200241086a41086a2001411c6a290000370300200241086a41106a200141246a2d00003a0000200220072f00013b011e2002200141146a290000370308200141106a280200210c2001410c6a2802002105200141086a28020021044100210b0c020b200141106a2802002205417f4c0d03200141086a28020021070240024020050d00410121040c010b2005102c2204450d050b20042007200510e9081a4102210b2005210c0c010b4103210b200241206a200741036a2d00003a0000200241086a41086a2001411c6a290000370300200241086a41106a200141246a2d00003a0000200220072f00013b011e2002200141146a290000370308200141106a280200210c2001410c6a2802002105200141086a28020021040b02400240024002400240200141286a220d2d00000e050104020300010b200241266a200d41036a2d00003a000041042103200241286a41046a2001413c6a2d00003a00002002200d2f00013b01242002200141386a280000360228200141346a2802002107200141306a280200210e2001412c6a28020021060c030b200241266a200d41036a2d00003a0000200241306a200141c0006a290000370300200241386a200141c8006a2d00003a00002002200d2f00013b01242002200141386a290000370328200141346a2802002107200141306a280200210e2001412c6a2802002106410021030c020b200141346a2802002207417f4c0d032001412c6a28020021030240024020070d00410121060c010b2007102c2206450d050b20062003200710e9081a410221032007210e0c010b41032103200241266a200d41036a2d00003a0000200241306a200141c0006a290000370300200241386a200141c8006a2d00003a00002002200d2f00013b01242002200141386a290000370328200141346a2802002107200141306a280200210e2001412c6a28020021060b2000200b3a0004200020022f011e3b0005200020022f00053b0025200041106a200c3600002000410c6a2005360000200041086a2004360000200041146a2002290308370000200041076a2002411e6a41026a2d00003a00002000411c6a200241086a41086a290300370000200041246a200241086a41106a2d00003a0000200041276a200241056a41026a2d00003a0000200141d8006a290300210820012903502109200041286a20033a00002000412c6a2006360000200041306a200e360000200041346a2007360000200020022f01243b00292000412b6a200241246a41026a2d00003a0000200041386a2002290328370000200041c0006a200241286a41086a290300370000200041c8006a200241286a41106a2d00003a0000200020022f00213b0049200041cb006a200241216a41026a2d00003a0000200041d8006a2008370300200041d0006a2009370300200041033602000b200241c0006a24000f0b1038000b1036000b8d0503027f017e0f7f230041f0006b220224000240024020012802082203ad42f0007e2204422088a70d002004a72205417f4c0d00200128020021064104210702402005450d002005102c2207450d020b410021012000410036020820002007360200200041046a200541f0006e22083602000240200541f000490d00200341ffffffff0071210903402009450d01200241c0006a41086a220a200620016a220541186a290000370300200241c0006a41106a220b200541206a290000370300200241c0006a41186a220c200541286a290000370300200241206a41086a220d200541386a290000370300200241206a41106a220e200541c0006a290000370300200241206a41186a220f200541c8006a290000370300200241086a2210200541d8006a290000370300200241106a2211200541e0006a290000370300200241186a2212200541e8006a2900003703002002200541106a2900003703402002200541306a2900003703202002200541d0006a29000037030020052802002113200241e0006a200541046a10c701200720016a22052013360200200541046a20022903603702002005410c6a200241e0006a41086a280200360200200541106a2002290340370200200541186a200a290300370200200541206a200b290300370200200541286a200c290300370200200541306a2002290320370200200541386a200d290300370200200541c0006a200e290300370200200541c8006a200f290300370200200541e8006a2012290300370200200541e0006a2011290300370200200541d8006a2010290300370200200541d0006a20022903003702002009417f6a2109200141f0006a21012008417f6a22080d000b0b20002003360208200241f0006a24000f0b1038000b1036000bd41403057f027e017f230041d0006b2202240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d0000417f6a0e170102030405060708090a0b0c0d0e0f1011121314151617000b41e2a0cc00412841f4ebc6001039000b4101210302400240024002400240200141246a2d00000e050104020300010b200241ce006a200141276a2d00003a000041042103200241106a41046a200141386a2d00003a00002002200141256a2f00003b014c2002200141346a280000360210200141306a28000021042001412c6a2800002105200141286a28000021060c030b200241ce006a200141276a2d00003a0000200241186a2001413c6a290000370300200241206a200141c4006a2d00003a00002002200141256a2f00003b014c2002200141346a290000370310200141306a28000021042001412c6a2800002105200141286a2800002106410021030c020b200141306a2802002205417f4c0d19200141286a28020021030240024020050d00410121060c010b2005102c2206450d1b0b20062003200510e9081a41022103200521040c010b200241ce006a200141276a2d00003a0000200241186a2001413c6a290000370300200241206a200141c4006a2d00003a00002002200141256a2f00003b014c2002200141346a290000370310200141306a28000021042001412c6a2800002105200141286a2800002106410321030b200141d0006a290300210720012903482108410421090240024002400240024020012d00010e050001020304000b410021090c030b410121090c020b410221090c010b200241c0006a2001411a6a290000370300200241386a200141126a290000370300200241306a2001410a6a2900003703002002200141026a290000370328410321090b200041246a20033a0000200041256a20022f014c3b0000200041306a20043600002000412c6a2005360000200041286a2006360000200041346a2002290310370000200041c5006a20022f000d3b0000200041276a200241cc006a41026a2d00003a00002000413c6a200241106a41086a290300370000200041c4006a200241106a41106a2d00003a0000200041c7006a2002410d6a41026a2d00003a0000200041d0006a2007370300200041c8006a2008370300200020093a0001200041013a0000200041026a20022903283700002000410a6a200241286a41086a290300370000200041126a200241286a41106a2903003700002000411a6a200241c0006a2903003700000c160b200041023a0000200041106a200141106a290300370300200041086a200141086a2903003703000c150b200041033a0000200041106a200141106a290300370300200041086a200141086a2903003703000c140b200041043a0000200041046a200141046a2802003602000c130b200041053a0000200041046a200141046a280200360200200041086a200141086a2d00004100473a00000c120b200241286a200141046a10c401200041063a00002000410c6a200241306a280200360200200041046a20022903283702000c110b200041073a00000c100b410421050240024002400240024020012d00010e050001020304000b410021050c030b410121050c020b410221050c010b200241c0006a2001411a6a290000370300200241386a200141126a290000370300200241306a2001410a6a2900003703002002200141026a290000370328410321050b200020053a0001200041083a0000200041026a20022903283700002000410a6a200241286a41086a290300370000200041126a200241386a2903003700002000411a6a200241c0006a2903003700000c0f0b4101210302400240024002400240200141046a2d00000e050104020300010b200241126a200141076a2d00003a0000200241286a41046a200141186a2d00003a00002002200141056a2f00003b01102002200141146a280000360228200141106a28000021042001410c6a2800002105200141086a2800002106410421030c030b200241126a200141076a2d00003a0000200241286a41086a2001411c6a290000370300200241286a41106a200141246a2d00003a00002002200141056a2f00003b01102002200141146a290000370328200141106a28000021042001410c6a2800002105200141086a2800002106410021030c020b200141106a2802002205417f4c0d11200141086a28020021010240024020050d00410121060c010b2005102c2206450d130b20062001200510e9081a41022103200521040c010b200241126a200141076a2d00003a0000200241286a41086a2001411c6a290000370300200241286a41106a200141246a2d00003a00002002200141056a2f00003b01102002200141146a290000370328200141106a28000021042001410c6a2800002105200141086a2800002106410321030b200041046a20033a0000200041056a20022f01103b0000200041106a20043600002000410c6a2005360000200041086a2006360000200041146a2002290328370000200041256a20022f004c3b0000200041076a200241106a41026a2d00003a00002000411c6a200241286a41086a290300370000200041246a200241286a41106a2d00003a0000200041276a200241cc006a41026a2d00003a0000200041093a00000c0e0b2000410a3a0000200041046a200141046a2802003602000c0d0b2000410b3a0000200041046a200141046a2802003602000c0c0b2000410c3a0000200020012d00013a00010c0b0b2000410d3a00000c0a0b2000410e3a00000c090b200241286a200141046a10c8012000410f3a00002000410c6a200241306a280200360200200041046a20022903283702000c080b200041103a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a2802003602000c070b200041113a00000c060b200141106a280200220541ffffffff03712005470d0620054102742206417f4c0d06200141086a2802002103200141046a28020021044104210102402006450d002006102c2201450d080b20012003200541027410e9082101200041106a20053602002000410c6a2006410276360200200041086a2001360200200041046a2004360200200041123a00000c050b200041133a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a2802003602000c040b200041143a0000200041106a200141106a290300370300200041086a200141086a2903003703000c030b200041153a0000200041046a200141046a2902003702000c020b200041163a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a2802003602000c010b200241286a200141046a10c401200041173a00002000410c6a200241306a280200360200200041046a20022903283702000b200241d0006a24000f0b1038000b1036000b110041e2a0cc00412841889cc5001039000bc91a05017f017e0a7f027e117f230041c0036b22022400024002400240024002402001280200417f6a0e03010203000b41e2a0cc00412841c499c9001039000b200141186a2903002103200241a0036a41086a22042001413c6a290200370300200241a0036a41106a2205200141c4006a290200370300200241a0036a41186a2206200141cc006a290200370300200241e0026a41086a2207200141dc006a290200370300200241e0026a41106a2208200141e4006a290200370300200241e0026a41186a2209200141ec006a290200370300200241e0026a41206a220a200141f4006a290200370300200241e0026a41286a220b200141fc006a290200370300200241e0026a41306a220c20014184016a290200370300200241e0026a41386a220d2001418c016a2902003703002002200141346a2902003703a0032002200141d4006a2902003703e002200141206a290300210e200141286a290300210f200141306a2802002110200241c0026a41186a2211200141b0016a290200370300200241c0026a41106a2212200141a8016a290200370300200241c0026a41086a2213200141a0016a29020037030020024180026a41386a2214200141f0016a29020037030020024180026a41306a2215200141e8016a29020037030020024180026a41286a2216200141e0016a29020037030020024180026a41206a2217200141d8016a29020037030020024180026a41186a2218200141d0016a29020037030020024180026a41106a2219200141c8016a29020037030020024180026a41086a221a200141c0016a290200370300200220014198016a2902003703c0022002200141b8016a2902003703800220014194016a280200211b200241e0016a41186a221c20014190026a290300370300200241e0016a41106a221d20014188026a290300370300200241e0016a41086a221e20014180026a2903003703002002200141f8016a2903003703e001200241c0016a41186a221f2006290300370300200241c0016a41106a22062005290300370300200241c0016a41086a22052004290300370300200220022903a0033703c00120024180016a41386a2204200d29030037030020024180016a41306a220d200c29030037030020024180016a41286a220c200b29030037030020024180016a41206a220b200a29030037030020024180016a41186a220a200929030037030020024180016a41106a2209200829030037030020024180016a41086a22082007290300370300200220022903e00237038001200241e0006a41186a22202011290300370300200241e0006a41106a22112012290300370300200241e0006a41086a22122013290300370300200220022903c002370360200241206a41386a22132014290300370300200241206a41306a22142015290300370300200241206a41286a22152016290300370300200241206a41206a22162017290300370300200241206a41186a22172018290300370300200241206a41106a22182019290300370300200241206a41086a2219201a2903003703002002200229038002370320200241186a221a201c290300370300200241106a221c201d290300370300200241086a221d201e290300370300200220022903e0013703002001280204211e200241e0026a200141086a10c301200041306a2010360200200041286a200f370300200041206a200e370300200041186a2003370300200041346a20022903c0013702002000413c6a2005290300370200200041c4006a2006290300370200200041cc006a201f290300370200200041d4006a200229038001370200200041dc006a2008290300370200200041e4006a2009290300370200200041ec006a200a290300370200200041f4006a200b290300370200200041fc006a200c29030037020020004184016a200d2903003702002000418c016a2004290300370200200141146a280200210120004194016a201b360200200041b0016a2020290300370200200041a8016a2011290300370200200041a0016a201229030037020020004198016a2002290360370200200041f0016a2013290300370200200041e8016a2014290300370200200041e0016a2015290300370200200041d8016a2016290300370200200041d0016a2017290300370200200041c8016a2018290300370200200041c0016a2019290300370200200041b8016a200229032037020020004190026a201a29030037030020004188026a201c29030037030020004180026a201d290300370300200041f8016a20022903003703002000201e360204200041106a2007280200360200200041086a20022903e002370200200041146a2001360200200041013602000c020b200141186a2903002103200241a0036a41086a22042001413c6a290200370300200241a0036a41106a2205200141c4006a290200370300200241a0036a41186a2206200141cc006a290200370300200241e0026a41086a2207200141dc006a290200370300200241e0026a41106a2208200141e4006a290200370300200241e0026a41186a2209200141ec006a290200370300200241e0026a41206a220a200141f4006a290200370300200241e0026a41286a220b200141fc006a290200370300200241e0026a41306a220c20014184016a290200370300200241e0026a41386a220d2001418c016a2902003703002002200141346a2902003703a0032002200141d4006a2902003703e002200141206a290300210e200141286a290300210f200141306a2802002110200241c0026a41186a2211200141b0016a290200370300200241c0026a41106a2212200141a8016a290200370300200241c0026a41086a2213200141a0016a29020037030020024180026a41386a2214200141f0016a29020037030020024180026a41306a2215200141e8016a29020037030020024180026a41286a2216200141e0016a29020037030020024180026a41206a2217200141d8016a29020037030020024180026a41186a2218200141d0016a29020037030020024180026a41106a2219200141c8016a29020037030020024180026a41086a221a200141c0016a290200370300200220014198016a2902003703c0022002200141b8016a2902003703800220014194016a280200211b200241e0016a41186a221c20014190026a290300370300200241e0016a41106a221d20014188026a290300370300200241e0016a41086a221e20014180026a2903003703002002200141f8016a2903003703e001200241c0016a41186a221f2006290300370300200241c0016a41106a22062005290300370300200241c0016a41086a22052004290300370300200220022903a0033703c00120024180016a41386a2204200d29030037030020024180016a41306a220d200c29030037030020024180016a41286a220c200b29030037030020024180016a41206a220b200a29030037030020024180016a41186a220a200929030037030020024180016a41106a2209200829030037030020024180016a41086a22082007290300370300200220022903e00237038001200241e0006a41186a22202011290300370300200241e0006a41106a22112012290300370300200241e0006a41086a22122013290300370300200220022903c002370360200241206a41386a22132014290300370300200241206a41306a22142015290300370300200241206a41286a22152016290300370300200241206a41206a22162017290300370300200241206a41186a22172018290300370300200241206a41106a22182019290300370300200241206a41086a2219201a2903003703002002200229038002370320200241186a221a201c290300370300200241106a221c201d290300370300200241086a221d201e290300370300200220022903e0013703002001280204211e200241e0026a200141086a10c301200041306a2010360200200041286a200f370300200041206a200e370300200041186a2003370300200041346a20022903c0013702002000413c6a2005290300370200200041c4006a2006290300370200200041cc006a201f290300370200200041d4006a200229038001370200200041dc006a2008290300370200200041e4006a2009290300370200200041ec006a200a290300370200200041f4006a200b290300370200200041fc006a200c29030037020020004184016a200d2903003702002000418c016a2004290300370200200141146a280200210120004194016a201b360200200041b0016a2020290300370200200041a8016a2011290300370200200041a0016a201229030037020020004198016a2002290360370200200041f0016a2013290300370200200041e8016a2014290300370200200041e0016a2015290300370200200041d8016a2016290300370200200041d0016a2017290300370200200041c8016a2018290300370200200041c0016a2019290300370200200041b8016a200229032037020020004190026a201a29030037030020004188026a201c29030037030020004180026a201d290300370300200041f8016a20022903003703002000201e360204200041106a2007280200360200200041086a20022903e002370200200041146a2001360200200041023602000c010b20004103360200200020012902043702040b200241c0036a24000b910403067f017e077f024002402001410c6a2802002202417f4c0d0020012802042103200128020021040240024020020d00410121050c010b2002102c2205450d020b20052003200210e9082106200141186a2802002207ad420c7e2208422088a70d002008a72203417f4c0d000240024020030d002003410c6e21094104210a0c010b2001280210210b2003102c220a450d022003410c6e21092003410c490d00200741ffffffff0371210c200a21052009210d0340200c450d01200b41086a2802002203417f4c0d02200b280200210e0240024020030d004101210f0c010b2003102c220f450d040b200f200e200310e908210e200541086a2003360200200541046a20033602002005200e360200200b410c6a210b2005410c6a2105200c417f6a210c200d417f6a220d0d000b0b2000200636020420002004360200200020012802243602242000200129021c37021c200041186a2007360200200041146a2009360200200041106a200a3602002000410c6a2002360200200041086a200236020020002001290228370228200041306a200141306a290200370200200041386a200141386a290200370200200041c0006a200141c0006a290200370200200041c8006a200141c8006a290200370200200041d0006a200141d0006a290200370200200041d8006a200141d8006a290200370200200041e0006a200141e0006a2902003702000f0b1038000b1036000b110041e2a0cc00412841f4afc4001039000b8a0f03037f027e027f230041106b220224000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d0000417f6a0e190102030405060708090a0b0c0d0e0f10111213141516171819000b41e2a0cc00412841c0accb001039000b200041013a000020002001290001370001200041306a200141306a290300370300200041286a200141286a290300370300200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a2900003700000c180b200041023a0000200041046a200141046a2902003702000c170b200141046a28020021034101210402400240200141086a2d00004101470d00200141286a2903002105200141206a29030021060c010b200141096a2d000041017121072001410a6a2d00002108410021040b200041033a0000200041286a2005370300200041206a2006370300200041106a20012903103703002000410a6a20083a0000200041096a20073a0000200041086a20043a0000200041046a20033602002000410b6a200228000b360000200041186a200141186a2903003703002000410f6a2002410b6a41046a2d00003a00000c160b200041043a0000200041046a200141046a2802003602000c150b200041053a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c140b200041063a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c130b200041073a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c120b200041083a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a2902003702000c110b200041093a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c100b2000410a3a0000200041046a200141046a2802003602000c0f0b2000410b3a0000200041046a200141046a2802003602000c0e0b2000410c3a000020002001290001370001200041306a200141306a290300370300200041286a200141286a290300370300200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041216a200141216a2d00003a00000c0d0b2000410d3a00000c0c0b2000410e3a00000c0b0b2001410c6a2802002204417f4c0d0b200141046a28020021010240024020040d00410121030c010b2004102c2203450d0d0b20032001200410e90821012000410c6a2004360200200041086a2004360200200041046a20013602002000410f3a00000c0a0b2001410c6a2802002204417f4c0d0a200141046a28020021010240024020040d00410121030c010b2004102c2203450d0c0b20032001200410e90821012000410c6a2004360200200041086a2004360200200041046a2001360200200041103a00000c090b2001410c6a2802002204417f4c0d09200141046a28020021010240024020040d00410121030c010b2004102c2203450d0b0b20032001200410e90821012000410c6a2004360200200041086a2004360200200041046a2001360200200041113a00000c080b2001410c6a2802002204417f4c0d08200141046a28020021010240024020040d00410121030c010b2004102c2203450d0a0b20032001200410e90821012000410c6a2004360200200041086a2004360200200041046a2001360200200041123a00000c070b200041133a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a2802003602000c060b200041143a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c050b200041153a0000200041046a200141046a2802003602000c040b200041163a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a2802003602000c030b200041173a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a2802003602000c020b200041183a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041286a200141286a280200360200200041246a200141246a2802004101463602000c010b200041193a0000200041046a200141046a2802003602000b200241106a24000f0b1038000b1036000bd90501037f230041c0026b2202240002400240024002400240024002400240024020012d0000417f6a0e06010203040506000b41e2a0cc00412841b8afc9001039000b2002200141246a10c80141002103024020012d00014101470d00200241286a2001411a6a290000370300200241206a200141126a290000370300200241186a2001410a6a2900003703002002200141026a290000370310410121030b200020033a0001200041013a0000200041246a2002290300370200200041026a2002290310370000200041306a20012802303602002000412c6a200241086a2802003602002000410a6a200241106a41086a290300370000200041126a200241206a2903003700002000411a6a200241286a2903003700000c050b41b002102c2203450d05200241106a200141046a280200108e08200041046a2003200241106a41b00210e908360200200041023a0000200041086a200141086a2802003602000c040b200141046a280200210341b002102c2204450d04200241106a200141086a280200108e08200041086a2004200241106a41b00210e908360200200041046a2003360200200041033a00002000410c6a2001410c6a2802003602000c030b200041043a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a280200360200200041216a200141216a2d00004100473a00000c020b200041053a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041306a200141306a290300370300200041246a200141246a2902003702000c010b200041063a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000b200241c0026a24000f0b1036000b960701057f230041206b22022400024002400240024002400240024002400240024020012d0000417f6a0e06010203040506000b41e2a0cc0041284188f3c0001039000b200241086a200141046a10c801200041013a0000200041186a200141186a290300370300200041106a200141106a290300370300200041046a20022903083702002000410c6a200241106a2802003602000c050b200041023a00000c040b200041033a0000200041046a200141046a2802003602000c030b200141086a280200210341002104024002400240200141046a2802000e03020100020b410221040c010b410121040b200041043a0000200041086a2003360200200041046a20043602000c020b4101210502400240024002400240200141046a2d00000e050104020300010b2002411e6a200141076a2d00003a0000200241086a41046a200141186a2d00003a00002002200141056a2f00003b011c2002200141146a280000360208200141106a28000021062001410c6a2800002104200141086a2800002103410421050c030b2002411e6a200141076a2d00003a0000200241086a41086a2001411c6a290000370300200241086a41106a200141246a2d00003a00002002200141056a2f00003b011c2002200141146a290000370308200141106a28000021062001410c6a2800002104200141086a2800002103410021050c020b200141106a2802002204417f4c0d04200141086a28020021050240024020040d00410121030c010b2004102c2203450d060b20032005200410e9081a41022105200421060c010b2002411e6a200141076a2d00003a0000200241086a41086a2001411c6a290000370300200241086a41106a200141246a2d00003a00002002200141056a2f00003b011c2002200141146a290000370308200141106a28000021062001410c6a2800002104200141086a2800002103410321050b200041046a20053a0000200041056a20022f011c3b0000200041106a20063600002000410c6a2004360000200041086a2003360000200041146a2002290308370000200041256a20022f00053b0000200041076a2002411c6a41026a2d00003a00002000411c6a200241086a41086a290300370000200041246a200241086a41106a2d00003a0000200041276a200241056a41026a2d00003a000020012d00012101200041053a0000200020014100473a00010c010b200041063a0000200041046a200141046a2902003702000b200241206a24000f0b1038000b1036000bee0903037f037e037f23004180016b2202240002400240024002400240024002400240024020012d0000417f6a0e050102030405000b41e2a0cc00412841e0f3c0001039000b20002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a290000370000200041216a200141216a41c10010e9081a200041013a00000c040b200241106a2203200141116a280000360200200241086a2204200141096a29000037030020022001290001370300200141206a2903002105200141186a2903002106420021070240200141286a2903004201520d00200241206a41206a200141d0006a290300370300200241206a41186a200141c8006a290300370300200241206a41106a200141c0006a290300370300200241206a41086a200141386a2903003703002002200141306a290300370320420121070b20002002290300370001200041206a2005370300200041186a2006370300200041286a2007370300200041306a2002290320370300200041096a2004290300370000200041116a2003280200360000200041386a200241206a41086a290300370300200041c0006a200241206a41106a290300370300200041c8006a200241206a41186a290300370300200041d0006a200241206a41206a29030037030020012d00152101200041023a0000200041156a4102200141004720014102461b3a00000c030b200241186a200141196a290000370300200241106a200141116a290000370300200241086a200141096a29000037030020022001290001370300200241206a200141216a41c10010e9081a200141ec006a2802002203417f4c0d03200141e4006a28020021010240024020030d00410121040c010b2003102c2204450d050b20042001200310e9082101200041196a200241186a290300370000200041116a200241106a290300370000200041096a200241086a29030037000020002002290300370001200041216a200241206a41c10010e9081a200041ec006a2003360200200041e8006a2003360200200041e4006a2001360200200041033a00000c020b2001410c6a2802002203417f4c0d02200141046a28020021010240024020030d00410121040c010b2003102c2204450d040b20042001200310e90821012000410c6a2003360200200041086a2003360200200041046a2001360200200041043a00000c010b200241e8006a41106a2204200141116a280000360200200241e8006a41086a2208200141096a29000037030020022001290001370368200241106a2209200141256a280000360200200241086a220a2001411d6a2900003703002002200141156a290000370300410021030240200141296a2d00004101470d00200241386a200141c2006a290000370300200241206a41106a2001413a6a290000370300200241206a41086a200141326a29000037030020022001412a6a290000370320410121030b20002002290368370001200041156a2002290300370000200041296a20033a00002000412a6a2002290320370000200041116a2004280200360000200041096a20082903003700002000411d6a200a290300370000200041256a2009280200360000200041326a200241206a41086a2903003700002000413a6a200241206a41106a290300370000200041c2006a200241386a290300370000200041053a00000b20024180016a24000f0b1038000b1036000ba014020a7f047e230041c0006b2202240002400240024002400240024002402001280200417f6a0e0401020300010b200141046a210341012104410121050240024002400240024020012d00040e050104020300010b200241246a200341036a2d00003a0000200241106a41046a200141186a2d00003a0000200220032f00013b01222002200141146a280000360210200141106a28020021062001410c6a2802002107200141086a2802002108410421050c030b200241246a200341036a2d00003a0000200241106a41086a2001411c6a290000370300200241106a41106a200141246a2d00003a0000200220032f00013b01222002200141146a290000370310200141106a28020021062001410c6a2802002107200141086a2802002108410021050c020b200141106a2802002206417f4c0d06200141086a28020021030240024020060d00410121080c010b2006102c2208450d080b20082003200610e9081a41022105200621070c010b41032105200241246a200341036a2d00003a0000200241106a41086a2001411c6a290000370300200241106a41106a200141246a2d00003a0000200220032f00013b01222002200141146a290000370310200141106a28020021062001410c6a2802002107200141086a28020021080b02400240024002400240200141286a22092d00000e050104020300010b2002413e6a200941036a2d00003a000041042104200241286a41046a2001413c6a2d00003a0000200220092f00013b013c2002200141386a280000360228200141346a2802002103200141306a280200210a2001412c6a280200210b0c030b2002413e6a200941036a2d00003a0000200241306a200141c0006a290000370300200241386a200141c8006a2d00003a0000200220092f00013b013c2002200141386a290000370328200141346a2802002103200141306a280200210a2001412c6a280200210b410021040c020b200141346a2802002203417f4c0d062001412c6a28020021040240024020030d004101210b0c010b2003102c220b450d080b200b2004200310e9081a410221042003210a0c010b410321042002413e6a200941036a2d00003a0000200241306a200141c0006a290000370300200241386a200141c8006a2d00003a0000200220092f00013b013c2002200141386a290000370328200141346a2802002103200141306a280200210a2001412c6a280200210b0b200020053a0004200020022f01223b0005200041106a20063600002000410c6a2007360000200041086a2008360000200041146a2002290310370000200041076a200241226a41026a2d00003a00002000411c6a200241106a41086a290300370000200041246a200241106a41106a2d00003a0000200141f0006a2802002106200141d8006a290300210c200141e0006a290300210d200141e8006a290300210e2001290350210f200041286a20043a00002000412c6a200b360000200041306a200a360000200041346a2003360000200041276a2002410d6a41026a2d00003a0000200020022f000d3b0025200020022f013c3b00292000412b6a2002413c6a41026a2d00003a0000200041386a2002290328370000200041c0006a200241286a41086a290300370000200041c8006a200241286a41106a2d00003a0000200041e8006a200e370300200041e0006a200d370300200041d8006a200c370300200041d0006a200f370300200041f0006a200636020020004104360200200041cb006a200241256a41026a2d00003a0000200020022f00253b00490c030b200041013602000c020b200141046a2104410121080240024002400240024020012d00040e050104020300010b200241126a200441036a2d00003a0000200241286a41046a200141186a2d00003a0000200220042f00013b01102002200141146a280000360228200141106a280200210b2001410c6a2802002106200141086a2802002103410421080c030b200241126a200441036a2d00003a0000200241286a41086a2001411c6a290000370300200241286a41106a200141246a2d00003a0000200220042f00013b01102002200141146a290000370328200141106a280200210b2001410c6a2802002106200141086a2802002103410021080c020b200141106a2802002206417f4c0d04200141086a28020021010240024020060d00410121030c010b2006102c2203450d060b20032001200610e9081a410221082006210b0c010b41032108200241126a200441036a2d00003a0000200241286a41086a2001411c6a290000370300200241286a41106a200141246a2d00003a0000200220042f00013b01102002200141146a290000370328200141106a280200210b2001410c6a2802002106200141086a28020021030b200020083a0004200020022f01103b0005200020022f003c3b0025200041106a200b3600002000410c6a2006360000200041086a2003360000200041146a2002290328370000200041076a200241106a41026a2d00003a00002000411c6a200241286a41086a290300370000200041246a200241286a41106a2d00003a0000200041276a2002413c6a41026a2d00003a0000200041023602000c010b200141046a2104410121080240024002400240024020012d00040e050104020300010b200241126a200441036a2d00003a0000200241286a41046a200141186a2d00003a0000200220042f00013b01102002200141146a280000360228200141106a280200210b2001410c6a2802002106200141086a2802002103410421080c030b200241126a200441036a2d00003a0000200241286a41086a2001411c6a290000370300200241286a41106a200141246a2d00003a0000200220042f00013b01102002200141146a290000370328200141106a280200210b2001410c6a2802002106200141086a2802002103410021080c020b200141106a2802002206417f4c0d03200141086a28020021080240024020060d00410121030c010b2006102c2203450d050b20032008200610e9081a410221082006210b0c010b41032108200241126a200441036a2d00003a0000200241286a41086a2001411c6a290000370300200241286a41106a200141246a2d00003a0000200220042f00013b01102002200141146a290000370328200141106a280200210b2001410c6a2802002106200141086a28020021030b200020083a0004200020022f01103b0005200041106a200b3600002000410c6a2006360000200041086a2003360000200041146a2002290328370000200041076a200241106a41026a2d00003a00002000411c6a200241286a41086a290300370000200041246a200241286a41106a2d00003a0000200141306a290300210c200141c0006a290300210d200141386a290300210e2001290328210f200041c8006a200141c8006a280200360200200041386a200e370300200041c0006a200d370300200041286a200f370300200041306a200c37030020004103360200200041276a2002413c6a41026a2d00003a0000200020022f003c3b00250b200241c0006a24000f0b1038000b1036000be22505027f017e027f017e037f230041b0046b22022400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e1c0102030405060708090a0b0c0d0e0f101112131415161718191a1b00010b200241086a200141386a10ca01200241f8016a41286a200141306a290300370300200241f8016a41206a200141286a290300370300200241f8016a41186a200141206a290300370300200241f8016a41106a200141186a290300370300200241f8016a41086a200141106a2903003703002002200141086a2903003703f801200141f8016a2802002103200241f8016a41306a200241086a41c00110e9081a20014180026a2903002104200241086a200241f8016a41f00110e9081a200041086a200241086a41f00110e9081a20004180026a2004370300200041f8016a20033602002000411b3602000c1b0b200241f8016a200141086a10cb0120004100360200200041186a200241f8016a41106a290300370300200041106a200241f8016a41086a290300370300200041086a20022903f8013703000c1a0b200241f8016a200141046a10cc0120004101360200200041246a20024198026a2802003602002000411c6a20024190026a290300370200200041146a20024188026a2903003702002000410c6a20024180026a290300370200200020022903f8013702040c190b200241f8016a200141086a10cd01200041086a200241f8016a41a00210e9081a200041023602000c180b20004103360200200041086a200141086a2903003703000c170b41042103200141046a210502400240024002400240024002400240024020012d0004417f6a0e050102030405000b41e2a0cc00412841e89bc4001039000b200141086a2802002105410121030c040b41022103200241086a41026a200541036a2d00003a0000200241f8016a41086a200141146a29020037030020024188026a2001411c6a29020037030020024190026a200141246a2d00003a0000200220052f00013b010820022001410c6a2902003703f801200141086a2802002105200141286a28020021010c040b200141086a2802002105410321030c020b2002410a6a200541036a2d00003a0000200241f8016a41086a200141146a29020037030020024188026a2001411c6a29020037030020024190026a200141246a2d00003a0000200220052f00013b010820022001410c6a2902003703f80120012d00254100472106200141086a2802002105200141286a28020021010c030b200141086a2802002105410521030b0b0b200020033a0004200020022f01083b0005200020063a0025200020022f01ac043b0126200041086a20053602002000410c6a20022903f801370200200041286a2001360200200041076a2002410a6a2d00003a0000200041146a200241f8016a41086a2903003702002000411c6a20024188026a290300370200200041246a20024190026a2d00003a0000200041043602000c160b200241f8016a200141086a10ce01200041086a200241f8016a41e00010e9081a200041053602000c150b200241f8016a200141046a10cf01200041063602002000410c6a20024180026a280200360200200020022903f8013702040c140b200241f8016a200141086a10d001200041086a200241f8016a41d80010e9081a200041073602000c130b10d101000b02400240200128020422050d00410021030c010b200241f8016a41186a200141286a290000370300200241f8016a41106a200141206a29000037030020024180026a200141186a290000370300200241f8016a41286a200141386a290000370300200241f8016a41306a200141c0006a290000370300200241f8016a41386a200141c8006a290000370300200241f8016a41c8006a200141d8006a290000370300200241f8016a41d0006a200141e0006a290000370300200241f8016a41d8006a200141e8006a2900003703002002200141106a2900003703f8012002200141306a290000370398022002200141d0006a2900003703b802200241f8016a41f8006a20014188016a290000370300200241f8016a41f0006a20014180016a290000370300200241f8016a41e8006a200141f8006a290000370300200241f8016a4198016a200141a8016a290000370300200241f8016a4190016a200141a0016a290000370300200241f8016a4188016a20014198016a290000370300200241f8016a41b8016a200141c8016a290000370300200241f8016a41b0016a200141c0016a290000370300200241f8016a41a8016a200141b8016a2900003703002002200141f0006a2900003703d802200220014190016a2900003703f8022002200141b0016a290000370398032001410c6a2802002201417f4c0d130240024020010d00410121030c010b2001102c2203450d150b20032005200110e9081a200241086a200241f8016a41c00110e9081a0b200020033602042000410c6a2001360200200041086a2001360200200041106a200241086a41c00110e9081a200041093602000c110b200241f8016a200141086a10d201200041086a200241f8016a41980210e9081a2000410a3602000c100b200241f8016a200141046a10d301200041046a200241f8016a41e80010e9081a2000410b3602000c0f0b10d401000b200241f8016a200141086a10d5012000410d360200200041386a200241f8016a41306a290300370300200041306a200241f8016a41286a290300370300200041286a200241f8016a41206a290300370300200041206a200241f8016a41186a290300370300200041186a200241f8016a41106a290300370300200041106a200241f8016a41086a290300370300200041086a20022903f8013703000c0d0b200241f8016a200141086a10d6012000410e360200200041386a200241f8016a41306a290300370300200041306a200241f8016a41286a290300370300200041286a200241f8016a41206a290300370300200041206a200241f8016a41186a290300370300200041186a200241f8016a41106a290300370300200041106a200241f8016a41086a290300370300200041086a20022903f8013703000c0c0b200241f8016a200141086a10d6012000410f360200200041386a200241f8016a41306a290300370300200041306a200241f8016a41286a290300370300200041286a200241f8016a41206a290300370300200041206a200241f8016a41186a290300370300200041186a200241f8016a41106a290300370300200041106a200241f8016a41086a290300370300200041086a20022903f8013703000c0b0b200241f8016a200141086a10d70120004110360200200041286a200241f8016a41206a290300370300200041206a200241f8016a41186a290300370300200041186a200241f8016a41106a290300370300200041106a200241f8016a41086a290300370300200041086a20022903f8013703000c0a0b200141046a2103410721050240024002400240024002400240024020012d0004417f6a0e0701020304050607000b41e2a0cc00412841a4c3cb001039000b20024190026a200341196a29000037030020024188026a200341116a29000037030020024180026a200341096a290000370300200220032900013703f801410121050c050b20024190026a200341196a29000037030020024188026a200341116a29000037030020024180026a200341096a290000370300200220032900013703f801410221050c040b200241f8016a41186a200341196a290000370300200241f8016a41106a200341116a290000370300200241f8016a41086a200341096a290000370300200241086a41086a200341296a290000370300200241086a41106a200341316a290000370300200241086a41186a200341396a290000370300200220032900013703f8012002200341216a290000370308410321050c030b200241086a200141086a10c80120024183026a200241086a41086a280200360000200220022903083700fb01410421050c020b20024190026a200341196a29000037030020024188026a200341116a29000037030020024180026a200341096a290000370300200220032900013703f801410521050c010b20024190026a200341196a29000037030020024188026a200341116a29000037030020024180026a200341096a290000370300200220032900013703f801410621050b200020053a0004200020022903f80137000520002002290308370025200020022f00ac043b00452000410d6a200241f8016a41086a290300370000200041156a200241f8016a41106a2903003700002000411d6a200241f8016a41186a2903003700002000412d6a200241086a41086a290300370000200041356a200241086a41106a2903003700002000413d6a200241086a41186a290300370000200041c7006a200241ae046a2d00003a0000200041113602000c090b024002400240024002400240200141086a280200417f6a0e03010203000b41e2a0cc0041284184ccc2001039000b200141386a2903002104200141306a29030021074101210841012109024002400240024002402001410c6a2d00000e050104020300010b41042109200241f8016a41046a200141206a2d00003a000020022001411c6a2800003602f80120012f000d2001410f6a2d0000411074722106200141186a280200210a200141146a2802002103200141106a28020021050c030b20024180026a200141246a290000370300200241f8016a41106a2001412c6a2d00003a000020022001411c6a2900003703f80120012f000d2001410f6a2d0000411074722106200141186a280200210a200141146a2802002103200141106a2802002105410021090c020b200141186a2802002203417f4c0d0f200141106a28020021010240024020030d00410121050c010b2003102c2205450d110b20052001200310e9081a410221092003210a0c010b20024180026a200141246a290000370300200241f8016a41106a2001412c6a2d00003a000020022001411c6a2900003703f80120012f000d2001410f6a2d0000411074722106200141186a280200210a200141146a2802002103200141106a2802002105410321090b200241086a41106a200241f8016a41106a2d00003a0000200241086a41086a200241f8016a41086a290300370300200241046a41026a200241ac046a41026a2d00003a0000200220022903f801370308200220022f00ac043b01040c030b2001410c6a28020022094108762106410221080c010b2001410c6a28020022094108762106410321080b0b200020022f01043b002d20004112360200200041386a2004370300200041306a2007370300200041186a200a360200200041146a2003360200200041106a2005360200200041086a20083602002000411c6a20022903083702002000410c6a2006410874200941ff017172360200200041246a200241086a41086a2903003702002000412c6a200241086a41106a2d00003a00002000412f6a200241066a2d00003a00000c080b200241f8016a200141086a10d801200041086a200241f8016a41f00010e9081a200041133602000c070b200241f8016a200141086a10d901200041086a200241f8016a41f80010e9081a200041143602000c060b024002400240024020012f0104417f6a0e03010200010b200241f8016a200141086a10c90120022902fc01210420022802f8012103410321010c020b200241f8016a200141086a10c90120022902fc01210420022802f8012103410121010c010b20012f0106210541b002102c2203450d08200241f8016a200141086a28020010da012003200241f8016a41b00210e9081a410221010b200020013b0104200041153602002000410c6a2004370200200041086a2003360200200041066a20053b01000c050b200241f8016a200141086a10db01200041086a200241f8016a41a80210e9081a200041163602000c040b200241f8016a200141046a10dc01200041046a200241f8016a41c80010e9081a200041173602000c030b200241f8016a200141086a10dd01200041086a200241f8016a41c80010e9081a200041183602000c020b200241f8016a200141086a10de0120004119360200200041c0006a200241f8016a41386a290300370300200041386a200241f8016a41306a290300370300200041306a200241f8016a41286a290300370300200041286a200241f8016a41206a290300370300200041206a200241f8016a41186a290300370300200041186a200241f8016a41106a290300370300200041106a200241f8016a41086a290300370300200041086a20022903f8013703000c010b200241f8016a200141086a10df012000411a360200200041c0006a200241f8016a41386a290300370300200041386a200241f8016a41306a290300370300200041306a200241f8016a41286a290300370300200041286a200241f8016a41206a290300370300200041206a200241f8016a41186a290300370300200041186a200241f8016a41106a290300370300200041106a200241f8016a41086a290300370300200041086a20022903f8013703000b200241b0046a24000f0b1038000b1036000b8b6f04027f017e3c7f027e230041c0036b22022400024002400240024002400240024002400240024002400240024002400240024002400240024020012d0000417f6a0e0f0102030405060708090a0b0c0d0e0f000b41e2a0cc00412841f89bc4001039000b200041013a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c0e0b2001410c6a2802002203ad42c8007e2204422088a70d0e2004a72205417f4c0d0e0240024020050d00200541c8006e2106410421070c010b200141046a28020021082005102c2207450d10200541c8006e2106200541c800490d00200341ffffffff017121094100210a2006210b03402009450d014100210c4100210d0240024002400240024002402008200a6a22052d00000e06050102030400050b200241f0026a41026a200541036a2d00003a000020024188036a41086a200541186a29000037030020024188036a41106a200541206a2d00003a00002002200541016a2f00003b01f0022002200541106a290000370388032005410c6a280000210e200541086a280000210f200541046a28000021104105210d0c040b2005410c6a280200220e417f4c0d14200541046a280200210f4101210d410121100240200e450d00200e102c2210450d160b2010200f200e10e9081a200e210f0c030b4102210d200241f0026a41026a200541036a2d00003a000020024188036a41086a200541186a29000037030020024188036a41106a200541206a2d00003a00002002200541016a2f00003b01f0022002200541106a290000370388032005410c6a280000210e200541086a280000210f200541046a28000021100c020b4103210d200241f0026a41026a200541036a2d00003a000020024188036a41086a200541186a29000037030020024188036a41106a200541206a2d00003a00002002200541016a2f00003b01f0022002200541106a290000370388032005410c6a280000210e200541086a280000210f200541046a28000021100c010b200241f0026a41026a200541036a2d00003a000020024188036a41086a200541186a29000037030020024188036a41106a200541206a2d00003a00002002200541016a2f00003b01f0022002200541106a290000370388032005410c6a280000210e200541086a280000210f4104210d200541046a28000021100b024002400240024002400240200541246a2d00000e06050102030400050b200241d8026a41026a200541276a2d00003a0000200241a0036a41086a2005413c6a290000370300200241a0036a41106a200541c4006a2d00003a00002002200541256a2f00003b01d8022002200541346a2900003703a003200541306a28000021112005412c6a2800002112200541286a28000021134105210c0c040b200541306a2802002212417f4c0d14200541286a28020021054101210c4101211302402012450d002012102c2213450d160b20132005201210e9081a201221110c030b4102210c200241d8026a41026a200541276a2d00003a0000200241a0036a41086a2005413c6a290000370300200241a0036a41106a200541c4006a2d00003a00002002200541256a2f00003b01d8022002200541346a2900003703a003200541306a28000021112005412c6a2800002112200541286a28000021130c020b200241d8026a41026a200541276a2d00003a0000200241a0036a41086a2005413c6a290000370300200241a0036a41106a200541c4006a2d00003a00002002200541256a2f00003b01d8022002200541346a2900003703a003200541306a28000021112005412c6a2800002112200541286a28000021134103210c0c010b200241d8026a41026a200541276a2d00003a0000200241a0036a41086a2005413c6a290000370300200241a0036a41106a200541c4006a2d00003a00002002200541256a2f00003b01d8022002200541346a2900003703a003200541306a28000021112005412c6a2800002112200541286a28000021134104210c0b2007200a6a2205200d3a0000200541016a20022f01f0023b0000200541036a200241f0026a41026a2d00003a00002005410c6a200e360200200541086a200f360200200541046a2010360200200541106a200229038803370200200541186a20024188036a41086a290300370200200541206a20024188036a41106a280200360200200541246a200c3a0000200541256a20022f01d8023b0000200541276a200241d8026a41026a2d00003a0000200541306a20113602002005412c6a2012360200200541286a2013360200200541346a20022903a0033702002005413c6a200241a0036a41086a290300370200200541c4006a200241a0036a41106a2802003602002009417f6a2109200a41c8006a210a200b417f6a220b0d000b0b4100211441002115024002400240024002400240200141106a2d00000e06050102030400050b200241f4016a200141136a2d00003a0000200241e8016a200141286a290000370300200241e0016a41106a200141306a2d00003a00002002200141116a2f00003b01f2012002200141206a2900003703e0012001411c6a2800002105200141186a2800002116200141146a2800002110410521150c040b2001411c6a2802002205417f4c0d12200141146a280200210a410121154101211002402005450d002005102c2210450d140b2010200a200510e9081a200521160c030b41022115200241f2016a41026a200141136a2d00003a0000200241e8016a200141286a290000370300200241e0016a41106a200141306a2d00003a00002002200141116a2f00003b01f2012002200141206a2900003703e0012001411c6a2800002105200141186a2800002116200141146a28000021100c020b200241f4016a200141136a2d00003a0000200241e8016a200141286a290000370300200241e0016a41106a200141306a2d00003a00002002200141116a2f00003b01f2012002200141206a2900003703e0012001411c6a2800002105200141186a2800002116200141146a2800002110410321150c010b200241f4016a200141136a2d00003a0000200241e8016a200141286a290000370300200241e0016a41106a200141306a2d00003a00002002200141116a2f00003b01f2012002200141206a2900003703e0012001411c6a2800002105200141186a2800002116200141146a2800002110410421150b024002400240024002400240200141346a2d00000e06050102030400050b2002418c026a200141376a2d00003a000020024180026a200141cc006a29000037030020024188026a200141d4006a2d00003a00002002200141356a2f00003b018a022002200141c4006a2900003703f801200141c0006a280000210a2001413c6a2800002117200141386a2800002113410521140c040b200141c0006a280200220a417f4c0d12200141386a280200210941012114410121130240200a450d00200a102c2213450d140b20132009200a10e9081a200a21170c030b410221142002418a026a41026a200141376a2d00003a000020024180026a200141cc006a29000037030020024188026a200141d4006a2d00003a00002002200141356a2f00003b018a022002200141c4006a2900003703f801200141c0006a280000210a2001413c6a2800002117200141386a28000021130c020b2002418c026a200141376a2d00003a000020024180026a200141cc006a29000037030020024188026a200141d4006a2d00003a00002002200141356a2f00003b018a022002200141c4006a2900003703f801200141c0006a280000210a2001413c6a2800002117200141386a2800002113410321140c010b2002418c026a200141376a2d00003a000020024180026a200141cc006a29000037030020024188026a200141d4006a2d00003a00002002200141356a2f00003b018a022002200141c4006a2900003703f801200141c0006a280000210a2001413c6a2800002117200141386a2800002113410421140b4100211841002119024002400240024002400240200141d8006a2d00000e06050102030400050b200241a4026a200141db006a2d00003a000020024198026a200141f0006a290000370300200241a0026a200141f8006a2d00003a00002002200141d9006a2f00003b01a2022002200141e8006a29000037039002200141e4006a2800002109200141e0006a280000211a200141dc006a280000210b410521190c040b200141e4006a2802002209417f4c0d12200141dc006a280200210c410121194101210b02402009450d002009102c220b450d140b200b200c200910e9081a2009211a0c030b41022119200241a2026a41026a200141db006a2d00003a000020024198026a200141f0006a290000370300200241a0026a200141f8006a2d00003a00002002200141d9006a2f00003b01a2022002200141e8006a29000037039002200141e4006a2800002109200141e0006a280000211a200141dc006a280000210b0c020b200241a4026a200141db006a2d00003a000020024198026a200141f0006a290000370300200241a0026a200141f8006a2d00003a00002002200141d9006a2f00003b01a2022002200141e8006a29000037039002200141e4006a2800002109200141e0006a280000211a200141dc006a280000210b410321190c010b200241a4026a200141db006a2d00003a000020024198026a200141f0006a290000370300200241a0026a200141f8006a2d00003a00002002200141d9006a2f00003b01a2022002200141e8006a29000037039002200141e4006a2800002109200141e0006a280000211a200141dc006a280000210b410421190b024002400240024002400240200141fc006a2d00000e06050102030400050b200241bc026a200141ff006a2d00003a0000200241b0026a20014194016a290000370300200241b8026a2001419c016a2d00003a00002002200141fd006a2f00003b01ba0220022001418c016a2900003703a80220014188016a280000211b20014184016a280000210c20014180016a2800002111410521180c040b20014188016a280200220c417f4c0d1220014180016a280200210d41012118410121110240200c450d00200c102c2211450d140b2011200d200c10e9081a200c211b0c030b41022118200241ba026a41026a200141ff006a2d00003a0000200241b0026a20014194016a290000370300200241b8026a2001419c016a2d00003a00002002200141fd006a2f00003b01ba0220022001418c016a2900003703a80220014188016a280000211b20014184016a280000210c20014180016a28000021110c020b200241bc026a200141ff006a2d00003a0000200241b0026a20014194016a290000370300200241b8026a2001419c016a2d00003a00002002200141fd006a2f00003b01ba0220022001418c016a2900003703a80220014188016a280000211b20014184016a280000210c20014180016a2800002111410321180c010b200241bc026a200141ff006a2d00003a0000200241b0026a20014194016a290000370300200241b8026a2001419c016a2d00003a00002002200141fd006a2f00003b01ba0220022001418c016a2900003703a80220014188016a280000211b20014184016a280000210c20014180016a2800002111410421180b4100211c4100211d024002400240024002400240200141a0016a2d00000e06050102030400050b200241d4026a200141a3016a2d00003a0000200241c8026a200141b8016a290000370300200241d0026a200141c0016a2d00003a00002002200141a1016a2f00003b01d2022002200141b0016a2900003703c002200141ac016a280000211e200141a8016a280000210d200141a4016a280000210f4105211d0c040b200141ac016a280200220d417f4c0d12200141a4016a280200210e4101211d4101210f0240200d450d00200d102c220f450d140b200f200e200d10e9081a200d211e0c030b4102211d200241d2026a41026a200141a3016a2d00003a0000200241c8026a200141b8016a290000370300200241d0026a200141c0016a2d00003a00002002200141a1016a2f00003b01d2022002200141b0016a2900003703c002200141ac016a280000211e200141a8016a280000210d200141a4016a280000210f0c020b200241d4026a200141a3016a2d00003a0000200241c8026a200141b8016a290000370300200241d0026a200141c0016a2d00003a00002002200141a1016a2f00003b01d2022002200141b0016a2900003703c002200141ac016a280000211e200141a8016a280000210d200141a4016a280000210f4103211d0c010b200241d4026a200141a3016a2d00003a0000200241c8026a200141b8016a290000370300200241d0026a200141c0016a2d00003a00002002200141a1016a2f00003b01d2022002200141b0016a2900003703c002200141ac016a280000211e200141a8016a280000210d200141a4016a280000210f4104211d0b02402001418c026a2d00004101470d00200241b0036a2001419d026a280000360200200241a8036a20014195026a29000037030020022001418d026a2900003703a0034101211c0b4100211f41002120024002400240024002400240200141c4016a2d00000e06050102030400050b200241ec026a200141c7016a2d00003a0000200241e0026a200141dc016a290000370300200241e8026a200141e4016a2d00003a00002002200141c5016a2f00003b01ea022002200141d4016a2900003703d802200141d0016a2800002121200141cc016a280000210e200141c8016a2800002108410521200c040b200141d0016a280200220e417f4c0d12200141c8016a280200211241012120410121080240200e450d00200e102c2208450d140b20082012200e10e9081a200e21210c030b41022120200241ea026a41026a200141c7016a2d00003a0000200241e0026a200141dc016a290000370300200241e8026a200141e4016a2d00003a00002002200141c5016a2f00003b01ea022002200141d4016a2900003703d802200141d0016a2800002121200141cc016a280000210e200141c8016a28000021080c020b200241ec026a200141c7016a2d00003a0000200241e0026a200141dc016a290000370300200241e8026a200141e4016a2d00003a00002002200141c5016a2f00003b01ea022002200141d4016a2900003703d802200141d0016a2800002121200141cc016a280000210e200141c8016a2800002108410321200c010b200241ec026a200141c7016a2d00003a0000200241e0026a200141dc016a290000370300200241e8026a200141e4016a2d00003a00002002200141c5016a2f00003b01ea022002200141d4016a2900003703d802200141d0016a2800002121200141cc016a280000210e200141c8016a2800002108410421200b024002400240024002400240200141e8016a2d00000e06050102030400050b20024186036a200141eb016a2d00003a0000200241f8026a20014180026a29000037030020024180036a20014188026a2d00003a00002002200141e9016a2f00003b0184032002200141f8016a2900003703f002200141f4016a2800002122200141f0016a2800002112200141ec016a28000021234105211f0c040b200141f4016a2802002212417f4c0d12200141ec016a28020021014101211f4101212302402012450d002012102c2223450d140b20232001201210e9081a201221220c030b4102211f20024184036a41026a200141eb016a2d00003a0000200241f8026a20014180026a29000037030020024180036a20014188026a2d00003a00002002200141e9016a2f00003b0184032002200141f8016a2900003703f002200141f4016a2800002122200141f0016a2800002112200141ec016a28000021230c020b20024186036a200141eb016a2d00003a0000200241f8026a20014180026a29000037030020024180036a20014188026a2d00003a00002002200141e9016a2f00003b0184032002200141f8016a2900003703f002200141f4016a2800002122200141f0016a2800002112200141ec016a28000021234103211f0c010b20024186036a200141eb016a2d00003a0000200241f8026a20014180026a29000037030020024180036a20014188026a2d00003a00002002200141e9016a2f00003b0184032002200141f8016a2900003703f002200141f4016a2800002122200141f0016a2800002112200141ec016a28000021234104211f0b200241da016a41026a2201200241f2016a41026a2d00003a0000200241c8016a41086a2224200241e0016a41086a290300370300200241c8016a41106a2225200241e0016a41106a2d00003a0000200241c4016a41026a2226200241dd016a41026a2d00003a0000200241c0016a41026a22272002418a026a41026a2d00003a0000200220022f01f2013b01da01200220022903e0013703c801200220022f00dd013b01c401200220022f018a023b01c001200241a8016a41106a2228200241f8016a41106a2d00003a0000200241a8016a41086a2229200241f8016a41086a290300370300200241a4016a41026a222a200241f5016a41026a2d00003a0000200241a0016a41026a222b200241a2026a41026a2d00003a000020024188016a41086a222c20024190026a41086a29030037030020024188016a41106a222d20024190026a41106a2d00003a0000200220022903f8013703a801200220022f00f5013b01a401200220022f01a2023b01a00120022002290390023703880120024184016a41026a222e2002418d026a41026a2d00003a000020024180016a41026a222f200241ba026a41026a2d00003a0000200241e8006a41106a2230200241a8026a41106a2d00003a0000200241e8006a41086a2231200241a8026a41086a290300370300200241e4006a41026a2232200241a5026a41026a2d00003a0000200220022f008d023b018401200220022f01ba023b018001200220022903a802370368200220022f00a5023b0164200241e0006a41026a2233200241d2026a41026a2d00003a0000200220022f01d2023b0160200241c8006a41106a2234200241c0026a41106a2d00003a0000200241c8006a41086a2235200241c0026a41086a290300370300200220022903c002370348200241c4006a41026a2236200241bd026a41026a2d00003a0000200220022f00bd023b014420024188036a41106a2237200241a0036a41106a28020036020020024188036a41086a2238200241a0036a41086a290300370300200220022903a00337038803200241c0006a41026a2239200241ea026a41026a2d00003a0000200220022f01ea023b0140200241286a41106a223a200241d8026a41106a2d00003a0000200241286a41086a223b200241d8026a41086a290300370300200220022903d802370328200241246a41026a223c200241d5026a41026a2d00003a0000200220022f00d5023b0124200241206a41026a223d20024184036a41026a2d00003a0000200220022f0184033b0120200241086a41106a223e200241f0026a41106a2d00003a0000200241086a41086a223f200241f0026a41086a290300370300200220022903f002370308200241046a41026a2240200241ed026a41026a2d00003a0000200220022f00ed023b0104200041106a20153a00002000410c6a2003360200200041086a2006360200200041046a20073602002000411c6a2005360000200041186a2016360000200041146a2010360000200041116a20022f01da013b0000200041136a20012d00003a0000200041206a20022903c801370000200041286a2024290300370000200041306a20252d00003a0000200041316a20022f01c4013b0000200041336a20262d00003a0000200041346a20143a0000200041376a20272d00003a0000200041356a20022f01c0013b0000200041c0006a200a3600002000413c6a2017360000200041386a2013360000200041d4006a20282d00003a0000200041cc006a2029290300370000200041c4006a20022903a801370000200041d7006a202a2d00003a0000200041d5006a20022f01a4013b0000200041d8006a20193a0000200041db006a202b2d00003a0000200041d9006a20022f01a0013b0000200041e4006a2009360000200041e0006a201a360000200041dc006a200b360000200041f8006a202d2d00003a0000200041f0006a202c290300370000200041e8006a200229038801370000200041fb006a202e2d00003a0000200041f9006a20022f0184013b0000200041fc006a20183a0000200041ff006a202f2d00003a0000200041fd006a20022f0180013b000020004188016a201b36000020004184016a200c36000020004180016a20113600002000419c016a20302d00003a000020004194016a20312903003700002000418c016a20022903683700002000419f016a20322d00003a00002000419d016a20022f01643b0000200041a0016a201d3a0000200041a3016a20332d00003a0000200041a1016a20022f01603b0000200041ac016a201e360000200041a8016a200d360000200041a4016a200f360000200041c0016a20342d00003a0000200041b8016a2035290300370000200041b0016a2002290348370000200041c3016a20362d00003a0000200041c1016a20022f01443b0000200041c4016a20203a0000200041c7016a20392d00003a0000200041c5016a20022f01403b0000200041d0016a2021360000200041cc016a200e360000200041c8016a2008360000200041e4016a203a2d00003a0000200041dc016a203b290300370000200041d4016a2002290328370000200041e7016a203c2d00003a0000200041e5016a20022f01243b0000200041e8016a201f3a0000200041eb016a203d2d00003a0000200041e9016a20022f01203b0000200041f4016a2022360000200041f0016a2012360000200041ec016a202336000020004188026a203e2d00003a000020004180026a203f290300370000200041f8016a20022903083700002000418b026a20402d00003a000020004189026a20022f01043b00002000418c026a201c3a00002000419d026a203728020036000020004195026a20382903003700002000418d026a200229038803370000200041a3026a200241a0036a41026a2d00003a0000200041a1026a20022f00a0033b0000200041023a00000c0d0b2001410c6a2802002214ad42c4007e2204422088a70d0d2004a72211417f4c0d0d0240024020110d00201141c4006e2123410421070c010b200141046a28020021082011102c2207450d0f201141c4006e2123201141c400490d004100210a200241f2026a210f200821052023210e03402011200a460d01200241a0036a41086a2212200541086a290200370300200241a0036a41106a2210200541106a290200370300200241a0036a41186a2213200541186a290200370300200220052902003703a0034100210902400240024002400240024020052d00200e06050102030400050b200f2008200a6a220141236a2d00003a000020024188036a41086a200141386a29000037030020024188036a41106a200141c0006a2d00003a00002002200141216a2f00003b01f0022002200141306a290000370388032001412c6a280000210b200141286a280000210c200141246a280000210d410521090c040b2008200a6a2201412c6a280200220c417f4c0d13200141246a2802002101410121094101210d0240200c450d00200c102c220d450d150b200d2001200c10e9081a200c210b0c030b41022109200241f0026a41026a2008200a6a220141236a2d00003a000020024188036a41086a200141386a29000037030020024188036a41106a200141c0006a2d00003a00002002200141216a2f00003b01f0022002200141306a290000370388032001412c6a280000210b200141286a280000210c200141246a280000210d0c020b200f2008200a6a220141236a2d00003a000020024188036a41086a200141386a29000037030020024188036a41106a200141c0006a2d00003a00002002200141216a2f00003b01f0022002200141306a290000370388032001412c6a280000210b200141286a280000210c200141246a280000210d410321090c010b200f2008200a6a220141236a2d00003a000020024188036a41086a200141386a29000037030020024188036a41106a200141c0006a2d00003a00002002200141216a2f00003b01f0022002200141306a290000370388032001412c6a280000210b200141286a280000210c200141246a280000210d410421090b200541c4006a21052007200a6a220120022903a003370200200141186a2013290300370200200141106a2010290300370200200141086a2012290300370200200141206a20093a0000200141216a20022f01f0023b0000200141236a200f2d00003a00002001412c6a200b360200200141286a200c360200200141246a200d360200200141306a200229038803370200200141386a20024188036a41086a290300370200200141c0006a20024188036a41106a280200360200200a41c4006a210a200e417f6a220e0d000b0b200041033a00002000410c6a2014360200200041086a2023360200200041046a20073602000c0c0b200041043a00000c0b0b200041053a0000200041106a200141106a290300370300200041086a200141086a290300370300200041046a200141046a2802003602000c0a0b200041063a0000200041046a200141046a2802003602000c090b200041073a0000200041106a200141106a290300370300200041086a200141086a290300370300200041046a200141046a2802003602000c080b200041083a000020002001290001370001200041246a200141246a280200360200200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a2900003700000c070b200041093a0000200041086a200141086a290300370300200041046a200141046a2802003602000c060b200141046a280200210d4101210902400240024002400240200141086a2d00000e050104020300010b2002418a036a2001410b6a2d00003a0000200241a0036a41046a2001411c6a2d00003a00002002200141096a2f00003b0188032002200141186a2800003602a003200141146a280000210c200141106a28000021052001410c6a280000210a410421090c030b2002418a036a2001410b6a2d00003a0000200241a0036a41086a200141206a290000370300200241a0036a41106a200141286a2d00003a00002002200141096a2f00003b0188032002200141186a2900003703a003200141146a280000210c200141106a28000021052001410c6a280000210a410021090c020b200141146a2802002205417f4c0d082001410c6a28020021090240024020050d004101210a0c010b2005102c220a450d0a0b200a2009200510e9081a410221092005210c0c010b2002418a036a2001410b6a2d00003a0000200241a0036a41086a200141206a290000370300200241a0036a41106a200141286a2d00003a00002002200141096a2f00003b0188032002200141186a2900003703a003200141146a280000210c200141106a28000021052001410c6a280000210a410321090b200141c0006a2903002141200141386a290300214242062104024002400240024002400240024020012802300e0700010203040506000b420021040c050b420121040c040b420221040c030b420321040c020b420421040c010b420521040b200041086a20093a0000200041046a200d360200200041096a20022f0188033b0000200041146a200c360000200041106a20053600002000410c6a200a360000200041186a20022903a003370000200041296a20022f00f0023b00002000410b6a20024188036a41026a2d00003a0000200041206a200241a0036a41086a290300370000200041286a200241a0036a41106a2d00003a00002000412b6a200241f0026a41026a2d00003a0000200041c0006a2041370300200041386a2042370300200041306a20043703002000410a3a00000c050b4101210902400240024002400240200141046a2d00000e050104020300010b2002418a036a200141076a2d00003a0000200241a0036a41046a200141186a2d00003a00002002200141056a2f00003b0188032002200141146a2800003602a003200141106a280000210c2001410c6a2800002105200141086a280000210a410421090c030b2002418a036a200141076a2d00003a0000200241a0036a41086a2001411c6a290000370300200241a0036a41106a200141246a2d00003a00002002200141056a2f00003b0188032002200141146a2900003703a003200141106a280000210c2001410c6a2800002105200141086a280000210a410021090c020b200141106a2802002205417f4c0d07200141086a28020021010240024020050d004101210a0c010b2005102c220a450d090b200a2001200510e9081a410221092005210c0c010b2002418a036a200141076a2d00003a0000200241a0036a41086a2001411c6a290000370300200241a0036a41106a200141246a2d00003a00002002200141056a2f00003b0188032002200141146a2900003703a003200141106a280000210c2001410c6a2800002105200141086a280000210a410321090b200041046a20093a0000200041056a20022f0188033b0000200041106a200c3600002000410c6a2005360000200041086a200a360000200041146a20022903a003370000200041256a20022f00f0023b0000200041076a20024188036a41026a2d00003a00002000411c6a200241a0036a41086a290300370000200041246a200241a0036a41106a2d00003a0000200041276a200241f0026a41026a2d00003a00002000410b3a00000c040b4101211202400240024002400240200141046a2d00000e050104020300010b200241c2026a200141076a2d00003a000020024188036a41046a200141186a2d00003a00002002200141056a2f00003b01c0022002200141146a28000036028803200141106a28000021102001410c6a2800002105200141086a280000210c410421120c030b200241c2026a200141076a2d00003a000020024188036a41086a2001411c6a29000037030020024188036a41106a200141246a2d00003a00002002200141056a2f00003b01c0022002200141146a29000037038803200141106a28000021102001410c6a2800002105200141086a280000210c410021120c020b200141106a2802002205417f4c0d06200141086a280200210a0240024020050d004101210c0c010b2005102c220c450d080b200c200a200510e9081a41022112200521100c010b200241c2026a200141076a2d00003a000020024188036a41086a2001411c6a29000037030020024188036a41106a200141246a2d00003a00002002200141056a2f00003b01c0022002200141146a29000037038803200141106a28000021102001410c6a2800002105200141086a280000210c410321120b4100210d02400240024002400240024020012d00280e06050102030400050b200241f2026a2001412b6a2d00003a0000200241a8036a200141c0006a290000370300200241b0036a200141c8006a2d00003a00002002200141296a2f00003b01f0022002200141386a2900003703a003200141346a280000210e200141306a280000210a2001412c6a28000021094105210d0c040b200141346a280200220a417f4c0d082001412c6a28020021014101210d410121090240200a450d00200a102c2209450d0a0b20092001200a10e9081a200a210e0c030b4102210d200241f0026a41026a2001412b6a2d00003a0000200241a8036a200141c0006a290000370300200241b0036a200141c8006a2d00003a00002002200141296a2f00003b01f0022002200141386a2900003703a003200141346a280000210e200141306a280000210a2001412c6a28000021090c020b200241f2026a2001412b6a2d00003a0000200241a8036a200141c0006a290000370300200241b0036a200141c8006a2d00003a00002002200141296a2f00003b01f0022002200141386a2900003703a003200141346a280000210e200141306a280000210a2001412c6a28000021094103210d0c010b200241f2026a2001412b6a2d00003a0000200241a8036a200141c0006a290000370300200241b0036a200141c8006a2d00003a00002002200141296a2f00003b01f0022002200141386a2900003703a003200141346a280000210e200141306a280000210a2001412c6a28000021094104210d0b200041046a20123a0000200041056a20022f01c0023b0000200041106a20103600002000410c6a2005360000200041086a200c360000200041146a200229038803370000200041256a20022f00a8023b0000200041076a200241c0026a41026a2d00003a00002000411c6a20024188036a41086a290300370000200041246a20024188036a41106a2d00003a0000200041276a200241a8026a41026a2d00003a0000200041286a200d3a00002000412c6a2009360000200041306a200a360000200041346a200e360000200041296a20022f01f0023b00002000412b6a200241f0026a41026a2d00003a0000200041386a20022903a003370000200041c0006a200241a0036a41086a290300370000200041c8006a200241a0036a41106a2d00003a0000200041c9006a20022f00d8023b0000200041cb006a200241d8026a41026a2d00003a00002000410c3a00000c030b4101211202400240024002400240200141046a2d00000e050104020300010b200241c2026a200141076a2d00003a000020024188036a41046a200141186a2d00003a00002002200141056a2f00003b01c0022002200141146a28000036028803200141106a28000021102001410c6a2800002105200141086a280000210c410421120c030b200241c2026a200141076a2d00003a000020024188036a41086a2001411c6a29000037030020024188036a41106a200141246a2d00003a00002002200141056a2f00003b01c0022002200141146a29000037038803200141106a28000021102001410c6a2800002105200141086a280000210c410021120c020b200141106a2802002205417f4c0d05200141086a280200210a0240024020050d004101210c0c010b2005102c220c450d070b200c200a200510e9081a41022112200521100c010b200241c2026a200141076a2d00003a000020024188036a41086a2001411c6a29000037030020024188036a41106a200141246a2d00003a00002002200141056a2f00003b01c0022002200141146a29000037038803200141106a28000021102001410c6a2800002105200141086a280000210c410321120b4100210d02400240024002400240024020012d00280e06050102030400050b200241f2026a2001412b6a2d00003a0000200241a8036a200141c0006a290000370300200241b0036a200141c8006a2d00003a00002002200141296a2f00003b01f0022002200141386a2900003703a003200141346a280000210e200141306a280000210a2001412c6a28000021094105210d0c040b200141346a280200220a417f4c0d072001412c6a28020021014101210d410121090240200a450d00200a102c2209450d090b20092001200a10e9081a200a210e0c030b4102210d200241f0026a41026a2001412b6a2d00003a0000200241a8036a200141c0006a290000370300200241b0036a200141c8006a2d00003a00002002200141296a2f00003b01f0022002200141386a2900003703a003200141346a280000210e200141306a280000210a2001412c6a28000021090c020b200241f2026a2001412b6a2d00003a0000200241a8036a200141c0006a290000370300200241b0036a200141c8006a2d00003a00002002200141296a2f00003b01f0022002200141386a2900003703a003200141346a280000210e200141306a280000210a2001412c6a28000021094103210d0c010b200241f2026a2001412b6a2d00003a0000200241a8036a200141c0006a290000370300200241b0036a200141c8006a2d00003a00002002200141296a2f00003b01f0022002200141386a2900003703a003200141346a280000210e200141306a280000210a2001412c6a28000021094104210d0b200041046a20123a0000200041056a20022f01c0023b0000200041106a20103600002000410c6a2005360000200041086a200c360000200041146a200229038803370000200041256a20022f00a8023b0000200041076a200241c0026a41026a2d00003a00002000411c6a20024188036a41086a290300370000200041246a20024188036a41106a2d00003a0000200041276a200241a8026a41026a2d00003a0000200041286a200d3a00002000412c6a2009360000200041306a200a360000200041346a200e360000200041296a20022f01f0023b00002000412b6a200241f0026a41026a2d00003a0000200041386a20022903a003370000200041c0006a200241a0036a41086a290300370000200041c8006a200241a0036a41106a2d00003a0000200041c9006a20022f00d8023b0000200041cb006a200241d8026a41026a2d00003a00002000410d3a00000c020b4101210902400240024002400240200141046a2d00000e050104020300010b2002418a036a200141076a2d00003a0000200241a0036a41046a200141186a2d00003a00002002200141056a2f00003b0188032002200141146a2800003602a003200141106a28000021052001410c6a280000210c200141086a280000210a410421090c030b2002418a036a200141076a2d00003a0000200241a0036a41086a2001411c6a290000370300200241a0036a41106a200141246a2d00003a00002002200141056a2f00003b0188032002200141146a2900003703a003200141106a28000021052001410c6a280000210c200141086a280000210a410021090c020b200141106a2802002205417f4c0d04200141086a28020021010240024020050d004101210a0c010b2005102c220a450d060b200a2001200510e9081a410221092005210c0c010b2002418a036a200141076a2d00003a0000200241a0036a41086a2001411c6a290000370300200241a0036a41106a200141246a2d00003a00002002200141056a2f00003b0188032002200141146a2900003703a003200141106a28000021052001410c6a280000210c200141086a280000210a410321090b200041046a20093a0000200041056a20022f0188033b0000200041106a20053600002000410c6a200c360000200041086a200a360000200041146a20022903a003370000200041256a20022f00f0023b0000200041076a20024188036a41026a2d00003a00002000411c6a200241a0036a41086a290300370000200041246a200241a0036a41106a2d00003a0000200041276a200241f0026a41026a2d00003a00002000410e3a00000c010b2000410f3a00000b200241c0036a24000f0b1038000b1036000bd90a01097f230041f0026b2202240002400240024002400240024002400240024002400240024020012d0000417f6a0e0a01020304050607080900010b200241186a2203200141196a290000370300200241106a2204200141116a290000370300200241086a2205200141096a29000037030020022001290001370300200241206a41186a2206200141396a290000370300200241206a41106a2207200141316a290000370300200241206a41086a2208200141296a2900003703002002200141216a290000370320200141c1006a2d0000210941b002102c220a450d0a200241c0006a200141c4006a28020010bb03200a200241c0006a41b00210e9082101200041196a2003290300370000200041116a2004290300370000200041096a200529030037000020002002290300370001200041216a2002290320370000200041296a2008290300370000200041316a2007290300370000200041396a2006290300370000200041c4006a2001360200200041c1006a20093a00002000410a3a00000c090b200241386a2203200141196a290000370300200241306a2204200141116a290000370300200241286a2205200141096a29000037030020022001290001370320200141216a2d0000210641b002102c2207450d09200241c0006a200141246a28020010bb032007200241c0006a41b00210e9082101200041196a2003290300370000200041116a2004290300370000200041096a200529030037000020002002290320370001200041246a2001360200200041216a20063a0000200041013a00000c080b200041023a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a280200360200200041216a200141216a2d00003a00000c070b200041033a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a280200360200200041216a200141216a2d00003a00000c060b200041043a00000c050b200041053a0000200020012d00013a0001200041046a200141046a280200360200200041026a200141026a2f01003b01000c040b200041063a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a290200370200200041226a200141226a2f01003b0100200041216a200141216a2d00003a00000c030b200041073a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a290000370000200041216a200141216a290000370000200041296a200141296a290000370000200041316a200141316a290000370000200041396a200141396a2900003700000c020b200041083a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a290000370000200041216a200141216a290000370000200041296a200141296a290000370000200041316a200141316a290000370000200041396a200141396a2900003700000c010b200041093a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a290000370000200041216a200141216a290000370000200041296a200141296a290000370000200041316a200141316a290000370000200041396a200141396a2900003700000b200241f0026a24000f0b1036000bf14107037f017e057f017e027f027e067f230041b0056b220224000240024002400240024002400240024002400240024020012d0000417f6a0e0401020304000b41e2a0cc00412841889cc4001039000b200241086a200141046a10c80141b002102c2203450d03411021040240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200141106a28020022012802000e1c0102030405060708090a0b0c0d0e0f101112131415161718191a1b00010b20024180036a200141386a10ca01200141086a2903002105200241d0016a41086a200141246a2d00003a000020022001411c6a2902003703d001200220012f01263b01ce01200141186a2802002106200141146a2802002107200141106a2802002108200141286a28020021092001412c6a280200210a200141306a290300210b200141f8016a280200210c20012d0025210d200229038003210e200229038803210f200241186a20024180036a41106a41b00110e9081a2005a721102005422088a7211120014184026a280200211220014180026a2802002101411b21040c1c0b20024180036a200141086a10cb01200220024194036a2802003602d001200229038003220f422088a7211120024190036a28020021062002418c036a280200210720024180036a41086a2802002108200fa72110410021040c1c0b20024180036a200141046a10cc01200241d8016a200241a0036a2d00003a0000200220024198036a2903003703d0012002200241a2036a2f01003b01ce0120022f00810320022d008303411074722113200229028403220f422088a7211120024194036a280200210620024180036a41106a28020021072002418c036a2802002108200241a1036a2d0000210d20022d0080032114200fa72110410121040c230b20024180036a200141086a10cd01200241d0016a41086a2002419c036a2d00003a0000200220024194036a2902003703d001200220022f019e033b01ce01200241b0036a290300210e200241a8036a290300210b20024180036a41106a28020021062002418c036a280200210720024180036a41086a2802002108200241a0036a2802002109200241a4036a280200210a200241b8036a290300210f20022d009d03210d2002290380032105200241186a200241c0036a41b00110e9081a200241e0016a41086a20024188056a290300370300200241e0016a41106a20024190056a290300370300200241f8016a20024198056a290300370300200220024180056a2903003703e0012005422088a72111200241fc046a2802002112200241f8046a2802002101200241f4046a2802002115200241f0046a280200210c2005a72110410221040c190b200141086a290300220fa72110200f422088a72111410321040c190b02400240024002400240024002400240024020012d0004417f6a0e050102030405000b41e2a0cc00412841e89bc4001039000b200141086a2802002110410121140c040b20024180036a41086a200141246a2d00003a000020022001411c6a2902003703800320012f0005200141076a2d0000411074722113200141186a2802002106200141146a2802002107200141106a28020021082001410c6a2802002111200141086a2802002110200141286a2802002109410221140c040b200141086a2802002110410321140c020b20024180036a41086a200141246a2d00003a000020022001411c6a2902003703800320012d0025410047210d20012f0005200141076a2d0000411074722113200141186a2802002106200141146a2802002107200141106a28020021082001410c6a2802002111200141086a2802002110200141286a2802002109410421140c030b200141086a2802002110410521140b0b0b200241d0016a41086a20024180036a41086a2d00003a000020022002290380033703d001410421040c200b20024180036a200141086a10ce01200241d0016a41086a2002419c036a2d00003a0000200241186a41086a200241c8036a290300370300200241186a41106a200241d0036a290300370300200241306a200241d8036a290300370300200220024194036a2902003703d001200220022f019e033b01ce012002200241c0036a2903003703182002290380032205422088a72111200241b0036a290300210e200241a8036a290300210b20024180036a41106a28020021062002418c036a280200210720024180036a41086a2802002108200241a0036a2802002109200241a4036a280200210a200241b8036a290300210f20022d009d03210d2005a72110410521040c150b20024180036a200141046a10cf0120022f00810320022d008303411074722113200229028403220f422088a7211120022d0080032114200fa72110410621040c1e0b20024180036a200141086a10d001200241d0016a41086a2002419c036a2d00003a0000200241186a41086a200241c8036a290300370300200241186a41106a200241d0036a290300370300200220024194036a2902003703d00120022002419e036a2f01003b01ce012002200241c0036a2903003703182002290380032205422088a72111200241b0036a290300210e200241a8036a290300210b20024180036a41106a28020021062002418c036a280200210720024180036a41086a28020021082002419d036a2d0000210d200241a0036a2802002109200241a4036a280200210a200241b8036a290300210f2005a72110410721040c130b10d101000b02400240200128020422130d0041002114410021110c010b200241206a200141246a2d00003a000020022001411c6a290000370318200220012f01263b01d0012002200141c8006a29020037038003200141386a290200210e200141306a290200210b200141186a2802002106200141146a2802002107200141106a2802002108200141286a28020021092001412c6a280200210a200141c0006a290200210f20012d0025210d200241a0036a200141e8006a29020037030020024180036a41186a200141e0006a29020037030020024180036a41106a200141d8006a29020037030020024180036a41306a200141f8006a29020037030020024180036a41386a20014180016a29020037030020024180036a41c0006a20014188016a29020037030020024180036a41d0006a20014198016a29020037030020024180036a41d8006a200141a0016a29020037030020024180036a41e0006a200141a8016a2902003703002002200141d0006a290200370388032002200141f0006a2902003703a803200220014190016a2902003703c80320024180036a4180016a200141c8016a29020037030020024180036a41f8006a200141c0016a29020037030020024180036a41f0006a200141b8016a2902003703002002200141b0016a2902003703e8032001410c6a2802002211417f4c0d190240024020110d00410121140c010b2011102c2214450d190b20142013201110e9081a200241f0026a41086a200241186a41086a2d00003a0000200220022903183703f002200220022f01d0013b01ee02200241e0016a20024180036a41880110e9081a0b200241d0016a41086a200241f0026a41086a2d00003a0000200220022903f0023703d001200220022f01ee023b01ce01200241186a200241e0016a41880110e9081a2014410876211341092104201121100c1b0b20024180036a200141086a10d201200241d0016a41086a2002419c036a2d00003a0000200220024194036a2902003703d001200220022f019e033b01ce01200241b0036a290300210e200241a8036a290300210b20024180036a41106a28020021062002418c036a280200210720024180036a41086a2802002108200241a0036a2802002109200241a4036a280200210a200241b8036a290300210f20022d009d03210d2002290380032105200241186a200241c0036a41b00110e9081a200241e0016a41086a20024188056a290300370300200241e0016a41106a20024190056a290300370300200220024180056a2903003703e0012005422088a72111200241fc046a2802002112200241f8046a2802002101200241f4046a2802002115200241f0046a280200210c2005a72110410a21040c110b20024180036a200141046a10d301200241d0016a41086a20024180036a41206a2d00003a0000200241186a41086a200241cc036a290200370300200241186a41106a200241d4036a290200370300200241186a41186a200241dc036a290200370300200241186a41206a200241e4036a280200360200200220024180036a41186a2903003703d001200220022f01a2033b01ce012002200241c4036a29020037031820022f00810320022d0083034110747221132002290284032205422088a72111200241b4036a290200210e200241ac036a290200210b20024194036a280200210620024180036a41106a28020021072002418c036a2802002108200241bc036a290200210f20022d008003211420022d00a103210d20022802a403210920022802a803210a2005a72110410b21040c190b10d401000b20024180036a200141086a10d501200241d0016a41086a2002419c036a2d00003a0000200220024194036a2902003703d00120022002419e036a2f01003b01ce01200229038003220f422088a72111200241b0036a290300210e200241a8036a290300210b20024190036a28020021062002418c036a280200210720024180036a41086a28020021082002419d036a2d0000210d200241a0036a2802002109200241a4036a280200210a200fa72110410d21040c0e0b20024180036a200141086a10d601200241d0016a41086a2002419c036a2d00003a0000200220024194036a2902003703d00120022002419e036a2f01003b01ce01200229038003220f422088a72111200241b0036a290300210e200241a8036a290300210b20024190036a28020021062002418c036a280200210720024180036a41086a28020021082002419d036a2d0000210d200241a0036a2802002109200241a4036a280200210a200fa72110410e21040c0d0b20024180036a200141086a10d601200241d0016a41086a2002419c036a2d00003a0000200220024194036a2902003703d00120022002419e036a2f01003b01ce01200229038003220f422088a72111200241b0036a290300210e200241a8036a290300210b20024190036a28020021062002418c036a280200210720024180036a41086a28020021082002419d036a2d0000210d200241a0036a2802002109200241a4036a280200210a200fa72110410f21040c0c0b20024180036a200141086a10d701200241d0016a41086a2002419c036a2d00003a0000200220024194036a2902003703d00120022002419e036a2f01003b01ce01200229038003220f422088a7211120024180036a41106a28020021062002418c036a280200210720024180036a41086a28020021082002419d036a2d0000210d200241a0036a2802002109200241a4036a280200210a200fa721100c0c0b4107211402400240024002400240024002400240024020012d0004417f6a0e0701020304050608000b41e2a0cc00412841a4c3cb001039000b20024180036a41086a200141246a2d00003a000020022001411c6a2900003703800320012f0005200141076a2d0000411074722113200141186a2800002106200141146a2800002107200141106a2800002108200141086a2900002105410121140c050b20024180036a41086a200141246a2d00003a000020022001411c6a2900003703800320012f0005200141076a2d0000411074722113200141186a2800002106200141146a2800002107200141106a2800002108200141086a2900002105410221140c040b20024180036a41086a200141246a2d00003a0000200220012f00263b011820022001411c6a29000037038003200141c0006a350000200141c4006a31000042208684210f20012f0005200141076a2d0000411074722113200141386a290000210e200141306a290000210b2001412c6a280000210a200141286a2800002109200141186a2800002106200141146a2800002107200141106a2800002108200141086a290000210520012d0025210d410321140c040b20024180036a200141086a10c80120022802880321082002290380032105410421140c030b20024180036a41086a200141246a2d00003a000020022001411c6a2900003703800320012f0005200141076a2d0000411074722113200141186a2800002106200141146a2800002107200141106a2800002108200141086a2900002105410521140c010b20024180036a41086a200141246a2d00003a000020022001411c6a2900003703800320012f0005200141076a2d0000411074722113200141186a2800002106200141146a2800002107200141106a2800002108200141086a2900002105410621140b0b200241d0016a41086a20024180036a41086a2d00003a000020022002290380033703d001200220022f01183b01ce012005422088a721112005a72110411121040c130b024002400240024002400240200141086a280200417f6a0e03010203000b41e2a0cc0041284184ccc2001039000b200141386a290300210e200141306a290300210b4101211041012113024002400240024002402001410c6a2d00000e050104020300010b4104211320024180036a41046a200141206a2d00003a000020022001411c6a2802003602800320012f000d2001410f6a2d0000411074722104200141186a2802002106200141146a2802002107200141106a28020021080c030b20024188036a200141246a2d00003a0000200220012f01263b01e00120022001411c6a2902003703800320012f000d2001410f6a2d00004110747221042001412c6a2d00002114200141286a2802002109200141186a2802002106200141146a2802002107200141106a280200210820012d0025210d410021130c020b200141186a2802002207417f4c0d15200141106a28020021010240024020070d00410121080c010b2007102c2208450d150b20082001200710e9081a41022113200721060c010b20024188036a200141246a2d00003a0000200220012f01263b01e00120022001411c6a2902003703800320012f000d2001410f6a2d00004110747221042001412c6a2d00002114200141286a2802002109200141186a2802002106200141146a2802002107200141106a280200210820012d0025210d410321130b200241186a41086a20024180036a41086a2d00003a00002002200229038003370318200220022f01e0013b01f002201441ff0171210a0c030b2001410c6a28020022134108762104410221100c010b2001410c6a28020022134108762104410321100b0b200241d0016a41086a200241186a41086a2d00003a0000200220022903183703d001200220022f01f0023b01ce012004410874201341ff0171722111411221040c090b20024180036a200141086a10d801200241d0016a41086a2002419c036a2d00003a0000200241186a41086a200241c8036a290300370300200241186a41106a200241d0036a290300370300200241306a200241d8036a290300370300200241186a41206a200241e0036a290300370300200241186a41286a200241e8036a290300370300200220024194036a2902003703d00120022002419e036a2f01003b01ce012002200241c0036a2903003703182002290380032205422088a72111200241b0036a290300210e20024180036a41286a290300210b20024180036a41106a28020021062002418c036a280200210720024180036a41086a28020021082002419d036a2d0000210d20024180036a41206a2802002109200241a4036a280200210a200241b8036a290300210f2005a72110411321040c070b20024180036a200141086a10d901200241d0016a41086a2002419c036a2d00003a0000200241186a41086a200241c8036a290300370300200241186a41106a200241d0036a290300370300200241306a200241d8036a290300370300200241186a41206a200241e0036a290300370300200241186a41286a200241e8036a290300370300200241186a41306a200241f0036a290300370300200220024194036a2902003703d001200220022f019e033b01ce012002200241c0036a2903003703182002290380032205422088a7211120024180036a41306a290300210e20024180036a41286a290300210b20024180036a41106a28020021062002418c036a280200210720024180036a41086a280200210820024180036a41206a2802002109200241a4036a280200210a200241b8036a290300210f20022d009d03210d2005a72110411421040c100b02400240024020012f0104417f6a0e03010200010b20024180036a200141086a10c901410321140c0f0b20024180036a200141086a10c901410121140c0e0b20012f0106211341b002102c2210450d0b20024180036a200141086a28020010da01201020024180036a41b00210e9081a200220133b011a41022114200241023b01180c0e0b20024180036a200141086a10db01200241d0016a41086a2002419c036a2d00003a0000200220024194036a2902003703d00120022002419e036a2f01003b01ce01200241b0036a290300210e200241a8036a290300210b20024180036a41106a28020021062002418c036a280200210720024180036a41086a28020021082002419d036a2d0000210d20024180036a41206a2802002109200241a4036a280200210a200241b8036a290300210f2002290380032105200241186a200241c0036a41b00110e9081a200241e0016a41086a20024188056a290300370300200241e0016a41106a20024190056a290300370300200241f8016a20024198056a290300370300200241e0016a41206a200241a0056a290300370300200220024180056a2903003703e0012005422088a72111200241fc046a2802002112200241f8046a2802002101200241f4046a2802002115200241f0046a280200210c2005a72110411621040c050b20024180036a200141046a10dc01200241d8016a200241a0036a2d00003a0000200220024198036a2903003703d0012002200241a2036a2f01003b01ce01200241b4036a290200210e200241ac036a290200210b20024194036a280200210620024180036a41106a28020021072002418c036a2802002108200241a1036a2d0000210d200241a4036a2802002109200241a8036a280200210a200241bc036a290200210f20022d0080032114200229028403210520022f008103210120022d00830321132002200241c4036a280200360218200120134110747221132005422088a721112005a72110411721040c0d0b20024180036a200141086a10dd01200241d0016a41086a2002419c036a2d00003a0000200220024194036a2902003703d00120022002419e036a2f01003b01ce012002200241c0036a2903003703182002290380032205422088a72111200241b0036a290300210e200241a8036a290300210b20024180036a41106a28020021062002418c036a280200210720024180036a41086a28020021082002419d036a2d0000210d200241a0036a2802002109200241a4036a280200210a200241b8036a290300210f2005a72110411821040c020b20024180036a200141086a10de01200241d0016a41086a2002419c036a2d00003a0000200220024194036a2902003703d001200220022f019e033b01ce012002290380032205422088a72111200241b0036a290300210e200241a8036a290300210b20024180036a41106a28020021062002418c036a280200210720024180036a41086a2802002108200241a0036a2802002109200241a4036a280200210a200241b8036a290300210f20022d009d03210d2005a72110411921040c010b20024180036a200141086a10df01200241d0016a41086a2002419c036a2d00003a0000200220024194036a2902003703d00120022002419e036a2f01003b01ce012002290380032205422088a72111200241b0036a290300210e200241a8036a290300210b20024180036a41106a28020021062002418c036a280200210720024180036a41086a28020021082002419d036a2d0000210d200241a0036a2802002109200241a4036a280200210a200241b8036a290300210f2005a72110411a21040b0b0b0c070b200141026a2f0100211320024180036a200141046a10c801200141246a2802002203417f4c0d032001411c6a2802002104200141186a2802002114200141146a2802002111200141106a28020021070240024020030d00410121080c010b2003102c2208450d030b20082004200310e9082104200041026a20133b0100200041246a2003360200200041206a20033602002000411c6a2004360200200041186a2014360200200041146a2011360200200041106a2007360200200041023a0000200041046a2002290380033702002000410c6a20024188036a280200360200200041286a2001290328370300200020012d00014100473a00010c070b200141226a2f0100210320024180036a200141246a10c801200041226a20033b0100200041246a2002290380033702002000412c6a20024188036a280200360200200041386a200141386a280200360200200041306a200141306a29020037030020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200141c0006a290300210f200041033a0000200041c0006a200f3703000c060b200141226a2f0100210320024180036a200141246a10c801200041226a20033b0100200041043a0000200041246a2002290380033702002000412c6a20024188036a280200360200200041306a200141306a29020037030020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a2900003700000c050b1036000b1038000b200220143b01182002280288032108200228028403211120022802800321100b20022f001920022d001b411074722113411521040b200320133b0005200320143a000420032004360200200341076a20134110763a000020032011ad4220862010ad843703082003200b3703302003200636021820032007360214200320083602102003200d3a00252003200f3703402003200a36022c20032009360228200320022f01ce013b0126200341386a200e370300200320022903d00137021c200341246a200241d0016a41086a2d00003a0000200341c8006a200241186a41b00110e9081a20032012360284022003200136028002200320153602fc012003200c3602f801200320022903e0013703880220034190026a200241e0016a41086a29030037030020034198026a200241e0016a41106a290300370300200341a0026a200241f8016a290300370300200341a8026a20024180026a2903003703002000410c6a200241086a41086a280200360200200041046a2002290308370200200041106a2003360200200041013a00000b200241b0056a24000b850d03027f027e057f230041206b2202240002400240024002400240024002400240024002400240024002402001280200417f6a0e09010203040506070809000b41e2a0cc00412841e0ecc0001039000b2001410c6a2802002203417f4c0d09200141186a2903002104200141106a2903002105200128020421064101210102402003450d002003102c2201450d0b0b20012006200310e9082101200041186a2004370300200041106a20053703002000410c6a2003360200200041086a200336020020002001360204200041013602000c080b20004102360200200020012802043602040c070b200128020421074101210802400240024002400240200141086a22092d00000e050104020300010b2002411e6a200941036a2d00003a000041042108200241086a41046a2001411c6a2d00003a0000200220092f00013b011c2002200141186a280000360208200141146a280200210a200141106a28020021032001410c6a28020021060c030b2002411e6a200941036a2d00003a0000200241086a41086a200141206a290000370300200241086a41106a200141286a2d00003a0000200220092f00013b011c2002200141186a290000370308200141146a280200210a200141106a28020021032001410c6a2802002106410021080c020b200141146a2802002203417f4c0d092001410c6a28020021080240024020030d00410121060c010b2003102c2206450d0b0b20062008200310e9081a410221082003210a0c010b410321082002411e6a200941036a2d00003a0000200241086a41086a200141206a290000370300200241086a41106a200141286a2d00003a0000200220092f00013b011c2002200141186a290000370308200141146a280200210a200141106a28020021032001410c6a28020021060b20002007360204200020022f011c3b0009200020022f00053b0029200041086a20083a0000200041146a200a360000200041106a20033600002000410c6a2006360000200041186a20022903083700002000410b6a2002411c6a41026a2d00003a0000200041206a200241086a41086a290300370000200041286a200241086a41106a2d00003a00002000412b6a200241056a41026a2d00003a000020012903302104200041386a200141386a290300370300200041306a2004370300200041033602000c060b20004104360200200020012802043602040c050b20004105360200200020012802043602040c040b200128020421074101210802400240024002400240200141086a22092d00000e050104020300010b2002411e6a200941036a2d00003a000041042108200241086a41046a2001411c6a2d00003a0000200220092f00013b011c2002200141186a280000360208200141146a280200210a200141106a28020021032001410c6a28020021060c030b2002411e6a200941036a2d00003a0000200241086a41086a200141206a290000370300200241086a41106a200141286a2d00003a0000200220092f00013b011c2002200141186a290000370308200141146a280200210a200141106a28020021032001410c6a2802002106410021080c020b200141146a2802002203417f4c0d062001410c6a28020021010240024020030d00410121060c010b2003102c2206450d080b20062001200310e9081a410221082003210a0c010b410321082002411e6a200941036a2d00003a0000200241086a41086a200141206a290000370300200241086a41106a200141286a2d00003a0000200220092f00013b011c2002200141186a290000370308200141146a280200210a200141106a28020021032001410c6a28020021060b20002007360204200020022f011c3b0009200020022f00053b0029200041086a20083a0000200041146a200a360000200041106a20033600002000410c6a2006360000200041186a20022903083700002000410b6a2002411c6a41026a2d00003a0000200041206a200241086a41086a290300370000200041286a200241086a41106a2d00003a00002000412b6a200241056a41026a2d00003a0000200041063602000c030b20004107360200200020012802043602040c020b20004108360200200020012802043602040c010b200141106a2802002203417f4c0d01200141086a2802002106200128020421010240024020030d00410121080c010b2003102c2208450d030b20082006200310e9082106200041106a20033602002000410c6a2003360200200041086a200636020020002001360204200041093602000b200241206a24000f0b1038000b1036000bc00501037f02400240024002400240024002400240024020012d0000417f6a0e06010203040506000b41e2a0cc00412841d4cec8001039000b2001412c6a2802002202417f4c0d05200141246a28020021034101210402402002450d002002102c2204450d070b20042003200210e90821042000412c6a2002360200200041286a2002360200200041246a2004360200200041013a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a2900003700000f0b200041023a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000f0b2001412c6a2802002202417f4c0d03200141246a28020021040240024020020d00410121030c010b2002102c2203450d050b20032004200210e90821042000412c6a2002360200200041286a2002360200200041246a2004360200200041033a0000200041386a200141386a290300370300200041306a200129033037030020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a2900003700000f0b200041043a000020002001290001370001200041306a200141306a290300370300200041286a200141286a290300370300200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a2900003700000f0b200041053a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000f0b200041063a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000f0b1038000b1036000bff0104017f017e037f037e0240024020012802082202ad42287e2203422088a70d002003a72204417f4c0d00200128020021050240024020040d00410821010c010b2004102c2201450d020b2000410036020820002001360200200041046a200441286e2206360200024020044128490d0003402004450d01200541086a2903002103200541106a29030021072005290320210820052903002109200141186a200541186a290300370300200141106a2007370300200141086a200337030020012009370300200141206a2008370300200141286a2101200441586a2104200541286a21052006417f6a22060d000b0b200020023602080f0b1038000b1036000ba80101017f024020002802082201450d0020002802002100200141246c210103400240024002400240024020002d00000e050400010204030b2000410c6a280200450d03200041086a280200102e0c030b2000410c6a280200450d02200041086a280200102e0c020b2000410c6a280200450d01200041086a280200102e0c010b200041086a280200450d00200041046a280200102e0b200041246a21002001415c6a22010d000b0b0bcd0101017f0240024002400240024020002802000e0404000102030b0240200041086a2802004125490d00200041106a280200102e0b200041386a280200450d03200041346a280200102e0f0b200041086a2802004125490d02200041106a280200102e0f0b2000280204102e200041086a2802002201450d012000410c6a280200450d012001102e0c010b0240200041086a2802004125490d00200041106a280200102e0b200041346a280200102e200041386a2802002201450d002000413c6a280200450d002001102e0f0b0bff0403037f017e077f230041306b22022400200241086a200110ab01024002402002280208450d00200041003602000c010b024002400240024002400240200228020c22032001280204410c6e2204200420034b1bad420c7e2205422088a70d002005a72204417f4c0d000240024020040d00410421060c010b2004102c2206450d040b2004410c6e2107024020030d00410021030c060b41002108410021094100210a03402002200110ab0120022802000d032001280204220b20022802042204490d032004417f4c0d010240024020040d004101210c0c010b20041032220c450d052001280204210b0b200b2004490d02200c2001280200200410e908210b2001280204220c2004490d052001200c20046b3602042001200128020020046a36020002400240200a2007470d002008200a41016a220c2008200c4b1b220c4104200c41044b1bad420c7e2205422088a745410274210c2005a7210702400240200a0d00200241003602200c010b2002410436022820022009360224200220063602200b200241106a2007200c200241206a107d2002280218210c20022802104101460d0120022802142106200c410c6e21070b200620096a220c200b360200200c41046a2004ad2205422086200584370200200841026a21082009410c6a21092003200a41016a220a460d070c010b0b200c0d030b1038000b200c102e0b200041003602000240200a450d002006210403400240200441046a280200450d002004280200102e0b2004410c6a2104200941746a22090d000b0b2007450d032007410c6c450d032006102e0c030b1036000b2004200c41b8b2c0001056000b2000200736020420002006360200200041086a20033602000b200241306a24000bd206030a7f017e017f230041f0016b220224002002200110ad01024002402002280200450d00200041003602000c010b024002400240024002402002280204220320012802002802044105762204200420034b1b22054105742204417f4c0d004101210602402005450d002004102c2206450d020b2001200128020441016a220436020402400240200420012802084b0d0020030d01410021030c060b200041003602000c030b410021070340200241003a00a8012007220841016a21074100210902400240024002400240034020012802002204280204220a450d0120024188016a20096a2004280200220b2d00003a00002004200a417f6a3602042004200b41016a3602002002200941016a22043a00a8012004210920044120470d000b200241e8006a41186a20024188016a41186a290300220c370300200241c8006a41086a220420024188016a41086a290300370300200241c8006a41106a220920024188016a41106a290300370300200241c8006a41186a220a200c3703002002200229038801370348200241286a41186a220b200a290300370300200241286a41106a220a2009290300370300200241286a41086a2209200429030037030020022002290348370328200241086a41186a220d200b290300370300200241086a41106a220b200a290300370300200241086a41086a220a20092903003703002002200229032837030820082005470d0320084101742204200841016a2209200420094b1b22044104200441044b1b220441ffffff3f7120044621092004410574210420080d0120024100360288010c020b0240200941ff0171450d00200241003a00a8010b200041003602000c070b200241013602900120022006360288012002200841057436028c010b200241e8006a2004200920024188016a107d2002280270210420022802684101460d01200228026c2106200441057621050b200620084105746a22042002290308370000200441186a200d290300370000200441106a200b290300370000200441086a200a29030037000020072003460d050c010b0b20040d010b1038000b1036000b200541ffffff3f71450d022006102e0c020b200128020421040b2000200536020420002006360200200041086a200336020020012004417f6a3602040b200241f0016a24000bfc0503037f017e0b7f23004190016b220224002002200110ab01024002402002280200450d00200041003602000c010b024002400240024020022802042203200128020441246e2204200420034b1bad42247e2205422088a70d002005a72204417f4c0d000240024020040d00410421060c010b2004102c2206450d030b200441246e2107024020030d00410021030c040b200241d8006a4101722108410021094100210a4100210b0340200241d8006a200110e601200241306a41086a2204200841086a290000370300200241306a41106a220c200841106a290000370300200241306a41186a220d200841186a290000370300200241306a411f6a220e2008411f6a2800003600002002200829000037033020022d0058220f4105460d02200241086a411f6a2210200e280000360000200241086a41186a220e200d290300370300200241086a41106a220d200c290300370300200241086a41086a220c20042903003703002002200229033037030802400240200b2007470d002009200b41016a2204200920044b1b22044104200441044b1bad42247e2205422088a74541027421042005a7210702400240200b0d00200241003602580c010b200241043602602002200a36025c200220063602580b20024180016a20072004200241d8006a107d20022802880121042002280280014101460d012002280284012106200441246e21070b2006200a6a2204200f3a0000200441016a2002290308370000200441096a200c290300370000200441116a200d290300370000200441196a200e290300370000200441206a2010280000360000200941026a2109200a41246a210a2003200b41016a220b460d050c010b0b20040d020b1038000b200041003602000240200b450d00200621040340024020042d00004102470d00200441086a280200450d00200441046a280200102e0b200441246a2104200a415c6a220a0d000b0b2007450d02200741246c450d022006102e0c020b1036000b2000200736020420002006360200200041086a20033602000b20024190016a24000b801103057f047e017f230041f0016b22022400024002400240024002400240024002400240024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a36020020050e050102030405060b200041053a00000c0e0b200241d8006a2001109301024020022d00584101460d0020024198016a200241d8006a41196a290000220737030020024190016a200241d8006a41116a290000220837030020024188016a200241d8006a41096a290000220937030020022002290059220a37038001200041003a00002000200a370001200041096a2009370000200041116a2008370000200041196a2007370000200041216a20022f00383b0000200041236a2002413a6a2d00003a00000c0e0b200041053a00000c0d0b200041013a00000c0c0b200241086a200110ab01024020022802080d0020012802042203200228020c2205490d002005417f4c0d050240024020050d004101210b0c010b20051032220b450d07200128020421030b024020032005490d00200b2001280200200510e90821032001280204220b2005490d082001200b20056b3602042001200128020020056a3602002003450d01200041023a0000200020022f0080013b0001200041086a2005ad2207422086200784370000200041046a2003360000200041106a2002290258370200200041036a20024180016a41026a2d00003a0000200041186a200241d8006a41086a290200370200200041206a200241d8006a41106a2802003602000c0d0b200b102e0b200041053a00000c0b0b41002105200241003a00782003417e6a21030240034020062005460d01200241d8006a20056a200420056a220b41016a2d00003a0000200120033602042001200b41026a3602002002200541016a220b3a00782003417f6a2103200b2105200b4120460d0a0c000b0b200541ff0171450d09200241003a00780c090b200241003a006c2006450d0620042d0001210520012003417e6a220b3602042001200441026a360200200241013a006c200220053a0058200b0d010c050b200041053a00000c080b20042d0002210520012003417d6a220b3602042001200441036a360200200241023a006c200220053a0059200b450d0320042d0003210520012003417c6a220b3602042001200441046a360200200241033a006c200220053a005a200b450d0320042d0004210520012003417b6a220b3602042001200441056a360200200241043a006c200220053a005b200b450d0320042d0005210520012003417a6a220b3602042001200441066a360200200241053a006c200220053a005c200b450d0320042d000621052001200341796a220b3602042001200441076a360200200241063a006c200220053a005d200b450d0320042d000721052001200341786a220b3602042001200441086a360200200241073a006c200220053a005e200b450d0320042d000821052001200341776a220b3602042001200441096a360200200241083a006c200220053a005f200b450d0320042d000921052001200341766a220b36020420012004410a6a360200200241093a006c200220053a0060200b450d0320042d000a21052001200341756a220b36020420012004410b6a3602002002410a3a006c200220053a0061200b450d0320042d000b21052001200341746a220b36020420012004410c6a3602002002410b3a006c200220053a0062200b450d0320042d000c21052001200341736a220b36020420012004410d6a3602002002410c3a006c200220053a0063200b450d0320042d000d21052001200341726a220b36020420012004410e6a3602002002410d3a006c200220053a0064200b450d0320042d000e21052001200341716a220b36020420012004410f6a3602002002410e3a006c200220053a0065200b450d0320042d000f21052001200341706a220b3602042001200441106a3602002002410f3a006c200220053a0066200b450d0320042d0010210520012003416f6a220b3602042001200441116a360200200241103a006c200220053a0067200b450d0320042d0011210520012003416e6a220b3602042001200441126a360200200241113a006c200220053a0068200b450d0320042d0012210520012003416d6a220b3602042001200441136a360200200241123a006c200220053a0069200b450d0320042d0013210520012003416c6a220b3602042001200441146a360200200241133a006c200220053a006a200b450d0320042d0014210520012003416b6a3602042001200441156a36020020024180016a41086a2201200241d8006a41086a290300370300200220053a006b20024180016a41106a2205200241d8006a41106a280200360200200241143a006c2002200229035837038001200241386a41106a22032005280200360200200241386a41086a220520012903003703002002200229038001370338200041043a000020002002290338370001200041096a2005290300370000200041116a2003280200360000200041156a20022900183700002000411c6a2002411f6a2900003700000c070b1038000b1036000b2005200b41b8b2c0001056000b200241003a006c0b200041053a00000c020b20024180016a41086a2205200241d8006a41086a29030037030020024180016a41106a2201200241d8006a41106a29030037030020024180016a41186a2203200241d8006a41186a2903003703002002200229035837038001200b41ff0171411f4d0d00200241186a41086a20052903002207370300200241186a41106a20012903002208370300200241186a41186a200329030022093703002002200229038001220a370318200041033a00002000200a370001200041096a2007370000200041116a2008370000200041196a2009370000200041216a20022f00153b0000200041236a200241176a2d00003a00000c010b200041053a00000b200241f0016a24000b8a0201067f230041106b22022400200241086a200110ab01024002400240024002402002280208450d00200041003602000c010b0240200228020c220341ffffffff03712003470d0020034102742204200128020422054b0d002004417f4c0d020240024020040d00410421060c010b200410322206450d04200128020421050b0240200520034102742207490d0020062001280200200710e9082105200128020422062007490d0520002003ad4220862004410276ad84370204200020053602002001200620076b3602042001200128020020076a3602000c020b2004450d002006102e0b200041003602000b200241106a24000f0b1038000b1036000b2007200641b8b2c0001056000bc50503037f017e087f230041306b22022400200241086a200110ad01024002402002280208450d00200041003602000c010b02400240024002400240024002400240200228020c22032001280200280204410c6e2204200420034b1bad420c7e2205422088a70d002005a72204417f4c0d000240024020040d00410421060c010b2004102c2206450d050b2001200128020441016a22073602042004410c6e210802400240200720012802084b0d0020030d01410021030c090b200041003602000c040b41002109410021074100210a03402002200110ad0120022802000d032001280200220b280204220c20022802042204490d032004417f4c0d010240024020040d004101210d0c010b20041032220d450d062001280200220b280204210c0b200c2004490d02200d200b280200200410e908210c200b280204220d2004490d06200b200d20046b360204200b200b28020020046a36020002400240200a2008470d002009200a41016a220b2009200b4b1b220b4104200b41044b1bad420c7e2205422088a745410274210b2005a7210802400240200a0d00200241003602200c010b2002410436022820022007360224200220063602200b200241106a2008200b200241206a107d2002280218210b20022802104101460d0120022802142106200b410c6e21080b200620076a220b200c360200200b41046a2004ad2205422086200584370200200941026a21092007410c6a21072003200a41016a220a460d080c010b0b200b0d040b1038000b200d102e0b20004100360200200a450d002006210403400240200441046a280200450d002004280200102e0b2004410c6a2104200741746a22070d000b0b2008450d042008410c6c450d042006102e0c040b1036000b2004200d41b8b2c0001056000b200128020421070b2000200836020420002006360200200041086a200336020020012007417f6a3602040b200241306a24000bd60704037f017e0a7f057e23004190026b220224002002200110ab01024002402002280200450d00200041003602000c010b024002400240024020022802042203200128020441306e2204200420034b1bad42307e2205422088a70d002005a72204417f4c0d000240024020040d00410821060c010b2004102c2206450d020b200441306e2107024020030d00410021030c040b410021080340200241003a00c8012008220941016a21082001280204210a417f210b41002104024002400340200a2004460d01200241a8016a20046a2001280200220c2d00003a00002001200a200b6a3602042001200c41016a3602002002200441016a220c3a00c801200b417f6a210b200c2104200c4120470d000b200241d0016a41086a2204200241a8016a41086a290300370300200241d0016a41106a220b200241a8016a41106a290300370300200241d0016a41186a220d200241a8016a41186a290300370300200220022903a8013703d001200c41ff0171411f4b0d010c050b200441ff0171450d04200241003a00c8010c040b200241e8006a41086a220e2004290300370300200241e8006a41106a220f200b290300370300200241e8006a41186a220b200d290300370300200220022903d001370368200a200c6b220c4110490d032001280200220441086a2900002105200429000021102001200441106a3602002001200c41706a360204200241286a41086a2204200e290300370300200241286a41106a220c200f290300370300200241286a41186a220a200b29030037030020022002290368370328200241086a41186a220b200a290300370300200241086a41106a220a200c290300370300200241086a41086a220c2004290300370300200220022903283703080240024020092007470d0020094101742204200941016a2207200420074b1b22044104200441044b1bad42307e2211422088a74541037421042011a721070240024020090d00200241003602a8010c010b200241083602b001200220063602a8012002200941306c3602ac010b200241d0016a20072004200241a8016a107d20022802d801210420022802d0014101460d0120022802d4012106200441306e21070b200c2903002111200a2903002112200b2903002113200229030821142006200941306c6a2204201037032020042014370300200441286a2005370300200441186a2013370300200441106a2012370300200441086a201137030020082003460d050c010b0b20040d010b1038000b1036000b200041003602002007450d01200741306c450d012006102e0c010b2000200736020420002006360200200041086a20033602000b20024190026a24000bb80603037f017e0b7f23004190016b220224002002200110ad01024002402002280200450d00200041003602000c010b02400240024002400240024020022802042203200128020028020441246e2204200420034b1bad42247e2205422088a70d002005a72204417f4c0d000240024020040d00410421060c010b2004102c2206450d040b2001200128020441016a2207360204200441246e210802400240200720012802084b0d0020030d01410021030c070b200041003602000c030b200241d8006a4101722107410021094100210a4100210b0340200241d8006a200110eb01200241306a41086a2204200741086a290000370300200241306a41106a220c200741106a290000370300200241306a41186a220d200741186a290000370300200241306a411f6a220e2007411f6a2800003600002002200729000037033020022d0058220f4105460d02200241086a411f6a2210200e280000360000200241086a41186a220e200d290300370300200241086a41106a220d200c290300370300200241086a41086a220c20042903003703002002200229033037030802400240200b2008470d002009200b41016a2204200920044b1b22044104200441044b1bad42247e2205422088a74541027421042005a7210802400240200b0d00200241003602580c010b200241043602602002200a36025c200220063602580b20024180016a20082004200241d8006a107d20022802880121042002280280014101460d012002280284012106200441246e21080b2006200a6a2204200f3a0000200441016a2002290308370000200441096a200c290300370000200441116a200d290300370000200441196a200e290300370000200441206a2010280000360000200941026a2109200a41246a210a2003200b41016a220b460d060c010b0b20040d030b1038000b20004100360200200b450d00200621040340024020042d00004102470d00200441086a280200450d00200441046a280200102e0b200441246a2104200a415c6a220a0d000b0b2008450d03200841246c450d032006102e0c030b1036000b200128020421070b2000200836020420002006360200200041086a200336020020012007417f6a3602040b20024190016a24000baf0a02057f027e230041b0026b2202240002400240024002400240024002400240024002400240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020020060e050102030405060b200041053a00000c060b41002104200241003a00b80102400340200128020022032802042205450d0120024198016a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00b8012003210420034120470d000b200241386a41186a20024198016a41186a2903002207370300200241086a41086a220120024198016a41086a290300370300200241086a41106a220320024198016a41106a290300370300200241086a41186a220420073703002002200229039801370308200041003a000020002002290308370001200041096a2001290300370000200041116a2003290300370000200041196a2004290300370000200041216a20022f00293b0000200041236a2002412b6a2d00003a00000c060b0240200441ff0171450d00200241003a00b8010b200041053a00000c050b200041013a00000c040b2002200110ad01024020022802000d0020012802002204280204220520022802042203490d002003417f4c0d050240024020030d00410121060c010b200310322206450d072001280200220428020421050b024020052003490d0020062004280200200310e9082101200428020422052003490d082004200520036b3602042004200428020020036a3602002001450d01200041023a0000200020022f00383b0001200041086a2003ad2207422086200784370000200041046a2001360000200041106a200229029801370200200041036a200241386a41026a2d00003a0000200041186a20024198016a41086a290200370200200041206a20024198016a41106a2802003602000c050b2006102e0b200041053a00000c030b41002104200241003a00b80102400340200128020022032802042205450d0120024198016a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00b8012003210420034120470d000b200241386a41186a20024198016a41186a2903002207370300200241086a41086a220120024198016a41086a290300370300200241086a41106a220320024198016a41106a290300370300200241086a41186a220420073703002002200229039801370308200041033a000020002002290308370001200041096a2001290300370000200041116a2003290300370000200041196a2004290300370000200041216a20022f00293b0000200041236a2002412b6a2d00003a00000c030b0240200441ff0171450d00200241003a00b8010b200041053a00000c020b41002104200241003a00ac0102400340200128020022032802042205450d0120024198016a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00ac012003210420034114470d000b200241086a41086a20024198016a41086a2903002207370300200241086a41106a20024198016a41106a280200220136020020022002290398012208370308200041043a000020002008370001200041096a2007370000200041116a2001360000200041156a20022900293700002000411c6a200241306a2900003700000c020b0240200441ff0171450d00200241003a00ac010b200041053a00000c010b200041053a00000b200241b0026a24000f0b1038000b1036000b2003200541b8b2c0001056000bde0505037f017e057f017e017f230041e00a6b220224002002200110ad01024002402002280200450d00200041003602000c010b02400240024002400240024020022802042203200128020028020441c8036e2204200420034b1bad42c8037e2205422088a70d002005a72204417f4c0d000240024020040d00410821060c010b2004102c2206450d040b2001200128020441016a2207360204200441c8036e210802400240200720012802084b0d0020030d01410021030c070b200041003602000c030b20024188076a41f0006a21094100210a4100210441002107034020024188076a200110ed01200241a0066a20024188076a41e80010e9081a20022903f0072105200241c8036a200941d80210e9081a20054203510d02200241e0026a200241a0066a41e80010e9081a200241086a200241c8036a41d80210e9081a0240024020072008470d00200a200741016a2208200a20084b1b22084104200841044b1bad42c8037e220b422088a7454103742108200ba7210c0240024020070d0020024100360288070c010b20024108360290072002200436028c0720022006360288070b200241d00a6a200c200820024188076a107d20022802d80a210820022802d00a4101460d0120022802d40a2106200841c8036e21080b200620046a200241e0026a41e80010e908220c41e8006a2005370300200c41f0006a200241086a41d80210e9081a200a41026a210a200441c8036a21042003200741016a2207460d060c010b0b20080d030b1038000b200041003602002007450d002006210a03400240200a220741e8006a2903004202510d0020072d00004102470d00200741086a280200450d00200741046a280200102e0b200741c8036a210a20074198016a109601200441b87c6a22040d000b0b2008450d03200841c8036c450d032006102e0c030b1036000b200128020421070b2000200836020420002006360200200041086a200336020020012007417f6a3602040b200241e00a6a24000bdf1504057f017e077f067e230041c00a6b22022400200241286a200110ad0102400240024002400240024002400240024020022802280d00200228022c210320012001280204220441016a2205360204200520012802084b0d0002402003450d0041002105410020036b2103034020054101460d0520032005417f6a2205470d000b0b20012004360204200128020022052802042203450d01200528020022062d0000210420052003417f6a3602042005200641016a360200200441ff00714104460d02200042033703680c080b200042033703680c070b200042033703680c060b02402004411874411875417f4c0d00420221070c040b20024180076a200110eb01024020022d00800722044105460d00200241fc066a41026a20022d0083073a0000200241e0066a41086a20024194076a290200370300200241f0066a2002419c076a290200370300200220022f0081073b01fc0620022002418c076a2902003703e00620024180076a41086a2802002105200228028407210602400240024002400240200128020022032802042208450d00200328020022092d0000210a20032008417f6a3602042003200941016a36020002400240024002400240200a0e03000102050b41002108200241003a00e80402400340200128020022032802042209450d01200241a8046a20086a2003280200220a2d00003a000020032009417f6a3602042003200a41016a3602002002200841016a22033a00e80420032108200341c000470d000b200241f8016a41086a2203200241a8046a41086a290300370300200241f8016a41106a2208200241a8046a41106a290300370300200241f8016a41186a2209200241a8046a41186a290300370300200241f8016a41206a220a200241a8046a41206a290300370300200241f8016a41286a220b200241a8046a41286a290300370300200241f8016a41306a220c200241a8046a41306a290300370300200241f8016a41386a220d200241a8046a41386a290300370300200220022903a8043703f801200241f8096a41386a220e200d290300370300200241f8096a41306a200c2903002207370300200241f8096a41286a200b290300220f370300200241f8096a41206a200a2903002210370300200241f8096a41186a20092903002211370300200241f8096a41106a20082903002212370300200241f8096a41086a20032903002213370300200220022903f80122143703f809200241e8076a41306a2007370300200241e8076a41286a200f370300200241e8076a41206a2010370300200241e8076a41186a2011370300200241e8076a41106a2012370300200241e8076a41086a2013370300200241e8076a41386a200e290300370300200220143703e807410021080c030b200841ff0171450d04200241003a00e8040c040b41002108200241003a00e80402400340200128020022032802042209450d01200241a8046a20086a2003280200220a2d00003a000020032009417f6a3602042003200a41016a3602002002200841016a22033a00e80420032108200341c000470d000b200241f8016a41086a2203200241a8046a41086a290300370300200241f8016a41106a2208200241a8046a41106a290300370300200241f8016a41186a2209200241a8046a41186a290300370300200241f8016a41206a220a200241a8046a41206a290300370300200241f8016a41286a220b200241a8046a41286a290300370300200241f8016a41306a220c200241a8046a41306a290300370300200241f8016a41386a220d200241a8046a41386a290300370300200220022903a8043703f801200241f8096a41386a220e200d290300370300200241f8096a41306a200c2903002207370300200241f8096a41286a200b290300220f370300200241f8096a41206a200a2903002210370300200241f8096a41186a20092903002211370300200241f8096a41106a20082903002212370300200241f8096a41086a20032903002213370300200220022903f80122143703f809200241e8076a41306a2007370300200241e8076a41286a200f370300200241e8076a41206a2010370300200241e8076a41186a2011370300200241e8076a41106a2012370300200241e8076a41086a2013370300200241e8076a41386a200e290300370300200220143703e807410121080c020b200841ff0171450d03200241003a00e8040c030b41002108200241003a00e9040340200128020022032802042209450d02200241a8046a20086a2003280200220a2d00003a000020032009417f6a3602042003200a41016a3602002002200841016a22033a00e90420032108200341c100470d000b200241f8016a200241a8046a41c10010e9081a200241f8096a200241f8016a41c10010e9081a200241b6096a200241f8096a41c10010e9081a200241e8076a200241b6096a41c10010e9081a410221080b200241a7076a200241e8076a41c10010e9081a200128020022032802042209450d042003280200220a310000211020032009417f6a3602042003200a41016a360200201050450d02420021070c030b200841ff0171450d00200241003a00e9040b20044102470d0420050d030c040b200128020022032802042209450d012003280200220a310000211120032009417f6a3602042003200a41016a36020042022010420f8386220f4204540d01420121072011420886201084420488200f420c882210420120104201561b7e2210200f5a0d010b200241206a200110ad0120022802200d0020022802242109200241086a20011082022002290308a7450d040b20044102470d012005450d010b2006102e0b420221070c020b1038000b200241086a41106a290300211220022903102111200241f8096a41026a200241fc066a41026a2d00003a0000200241f8016a41086a200241e0066a41086a290300370300200241f8016a41106a200241e0066a41106a290300370300200220022f01fc063b01f809200220022903e0063703f801200241a8046a200241a7076a41c10010e9081a200220022f01de063b01b6090b200241f4016a41026a2203200241f8096a41026a2d00003a0000200241d8016a41086a220a200241f8016a41086a290300370300200241d8016a41106a220b200241f8016a41106a290300370300200220022f01f8093b01f401200220022903f8013703d80120024197016a200241a8046a41c10010e9081a200220022f01b6093b01940120074202510d0120024190016a41026a20032d00003a0000200241f8006a41086a200a290300370300200241f8006a41106a200b290300370300200220022f01f4013b019001200220022903d801370378200241376a20024197016a41c10010e9081a200220022f0194013b01340b200241a8046a200110950120022802a8042103200241f8016a200241a8046a41047241ac0210e9081a02402003411c460d00200020043a0000200020022f0190013b000120002005360208200020063602042000200229037837020c200020083a0024200041036a20024192016a2d00003a0000200041146a20024180016a2903003702002000411c6a20024188016a290300370200200041256a200241376a41c10010e9081a20004188016a201237030020004180016a201137030020004190016a2009360200200041f8006a20103703002000200f37037020002007370368200020022f01343b016620004198016a20033602002000419c016a200241f8016a41ac0210e9081a0c020b2000420337036820074202510d01200441ff01714102470d012005450d012006102e0c010b200042033703680b200241c00a6a24000beb0201067f230041206b2202240002400240200041046a2802002203200041086a28020022046b20012802042205200128020022066b2207490d00200028020021030c010b0240200420076a22062004490d00200341017422042006200420064b1b22044108200441084b1b21040240024020030d00200241003602100c010b200241106a41086a410136020020022003360214200220002802003602100b200220044101200241106a107d200241086a2802002104024020022802004101460d00200020022802042203360200200041046a2004360200200041086a280200210420012802002106200128020421050c020b2004450d001036000b1038000b024020062005460d002001200641016a36020020062d0000210602400340200320046a20063a0000200128020022062001280204460d01200441016a21042001200641016a36020020062d000021060c000b0b200441016a21040b200041086a2004360200200241206a24000bde0a04077f017e037f017e230041d0006b22022400200241086a200110ad01024002402002280208450d00200041013602000c010b200228020c21032001200128020441016a2204360204024002400240024002400240200420012802084b0d00200241003a00172002420037021c024020030d00200241286a41086a200241186a41086a28020036020020022002290318370328200241286a21040c050b4100210502400240024002400340200241003a0030200128020022042802042206450d07200428020022072d0000210820042006417f6a3602042004200741016a360200200241013a0030200220083a0028200128020022042802042206450d06200428020022072d0000210820042006417f6a3602042004200741016a360200200241023a0030200220083a0029200128020022042802042206450d06200428020022072d0000210820042006417f6a3602042004200741016a360200200241033a0030200220083a002a200128020022042802042206450d06200428020022072d0000210820042006417f6a3602042004200741016a360200200241043a0030200220083a002b200128020022042802042206450d06200428020022072d0000210820042006417f6a3602042004200741016a360200200241053a0030200220083a002c200128020022042802042206450d06200428020022072d0000210820042006417f6a3602042004200741016a360200200241063a0030200220083a002d200128020022042802042206450d06200428020022072d0000210820042006417f6a3602042004200741016a360200200241073a0030200220083a002e200128020022042802042206450d06200428020022072d0000210820042006417f6a3602042004200741016a360200200220083a002f200229032821092002200110ad0120022802000d0720012802002206280204220720022802042204490d072004417f4c0d020240024020040d00410121080c010b200410322208450d042001280200220628020421070b20072004490d0120082006280200200410e908210a200628020422072004490d042006200720046b3602042006200628020020046a360200200a450d072002200937032802400240200228021c220b450d002002280218210c0c010b41e401102c220b450d044100210c200b4100360200200b41003b018a012002200b36021c200241003602180b200541016a21052004ad220d422086200d84210d024002400340200b418c016a2106200b2f018a012108410021040240034020082004460d01200241286a2006410810ec082207450d03200441016a2104200641086a21062007417f4a0d000b2004417f6a21080b0240200c450d00200c417f6a210c200b20084102746a41e4016a280200210b0c010b0b20022009370338200220083602302002200b36022c200241003602282002200241186a3602342002200d3702442002200a360240200241286a200241c0006a10f0010c010b200b2004410c6c6a220441086a220628020021072006200d370200200441046a220628020021042006200a3602002004450d002007450d002004102e0b20052003470d000b20022d00172104200241286a41086a200241186a41086a2802003602002002200229031837032820040d07200241286a21040c080b2008102e0c050b1038000b1036000b2004200741b8b2c0001056000b200041013602000c050b200241003a00300b200241013a0017200241286a41086a200241186a41086a280200360200200220022903183703280b200241286a10f101410121040c010b200020042902003702042000410c6a200441086a280200360200410021040b2000200436020020012001280204417f6a3602040b200241d0006a24000b931505017f017e097f017e067f230041e0006b2202240020002902102103200028020821042000280200210520002802042106200241206a41086a2207200141086a2802003602002002200129020037032002400240024020062f018a012201410a4b0d00200241c0006a41086a2007280200360200200220022903203703402006418c016a2107200141016a21080240200441016a220920014b220a0d00200720094103746a200720044103746a20082004417f736a41037410ea081a0b200720044103746a2003370000200241d0006a41086a2205200241c0006a41086a28020036020020022002290340370350200641046a21070240200a0d0020072009410c6c6a20072004410c6c6a200120046b410c6c10ea081a0b20072004410c6c6a22042002290350370200200441086a2005280200360200200620083b018a010c010b410521014100210a02400240200441054f0d0041042101200421070c010b41052107024002402004417b6a0e020201000b200441796a21074101210a410621010c010b410021074101210a0b0240024002400240024002400240024002400240024041e401102c2204450d00200441003b018a0120044100360200200420062f018a01220b2001417f736a22083b018a012006418c016a220c20014103746a290000210d200241d0006a41086a200641046a220e2001410c6c6a220941086a280200360200200220092902003703502008410c4f0d01200b200141016a22096b2008470d022004418c016a200c20094103746a200841037410e9081a200441046a200e2009410c6c6a2008410c6c10e9081a200620013b018a01200241306a41086a200241d0006a41086a220b28020036020020022002290350370330200241c0006a41086a220c200241206a41086a2802003602002002200229032037034020042006200a1b2201418c016a210820012f018a01220941016a210a0240200741016a220e20094b220f0d002008200e4103746a200820074103746a200a2007417f736a41037410ea081a0b200820074103746a2003370000200b200c28020036020020022002290340370350200141046a21080240200f0d002008200e410c6c6a20082007410c6c6a200920076b410c6c10ea081a0b20082007410c6c6a22072002290350370200200741086a200241d0006a41086a220b2802003602002001200a3b018a01200241106a41086a200241306a41086a220f2802002201360200200220022903302203370310200241086a22102001360200200220033703000240024002402006280200220a0d00410021050c010b200d21032004211141002101034020062f0188012108200f20102802003602002002200229030037033020052001470d06200a2f018a01220e410b490d024100210941042106024020084105490d0020082106024002402008417b6a0e020201000b200841796a210841012109410621060c010b4100210841012109410521060b419402102c2204450d03200441003b018a01200441003602002004200a2f018a01220c2006417f736a22013b018a01200a418c016a221220064103746a290000210d200b200a41046a22132006410c6c6a220741086a280200360200200220072902003703502001410c4f0d07200c200641016a22076b2001470d082004418c016a201220074103746a200141037410e9081a200441046a20132007410c6c6a2001410c6c10e9081a200a20063b018a01200241c0006a41086a220c200b2802003602002002200229035037034020042f018a01220141016a21122001410c4f0d09200e20066b22062012470d0a200541016a2105200441e4016a200a20074102746a41e4016a200641027410e9081a4100210602400340200420064102746a41e4016a280200220720063b018801200720043602002006200620014922076a220620014b0d0120070d000b0b200241206a41086a2212200c28020036020020022002290340370320200c200f280200360200200220022903303703402004200a20091b2207418c016a210e20072f018a01220141016a21090240200841016a220620014b22130d00200e20064103746a200e20084103746a2008417f7320096a41037410ea081a0b200e20084103746a2003370000200b200c28020036020020022002290340370350200741046a210c024020130d00200c2006410c6c6a200c2008410c6c6a200120086b410c6c10ea081a0b200c2008410c6c6a220c2002290350370200200c41086a200b280200360200200741e4016a210c0240200841026a220e200141026a22014f0d00200c200e4102746a200c20064102746a2006417f7320016a41027410ea081a0b200c20064102746a2011360200200720093b018a010240200620014f0d00200720084102746a41e8016a2106034020062802002201200841016a22083b01880120012007360200200641046a210620092008470d000b0b2010201228020036020020022002290320370300200a2106200a2802002207210a200d2103200421112005210120070d000b0b200f20102802002206360200200220022903002203370330200241c0006a41086a200636020020022003370340200028020c22012802042207450d0920012802002108419402102c2206450d01200620073602e401200641003b018a0120064100360200200741003b01880120072006360200200120063602042001200841016a360200200241d0006a41086a200241c0006a41086a2802003602002002200229034037035020082005470d0a20062f018a012207410b4f0d0b2006200741016a22083b018a01200620074103746a418c016a200d37000020062007410c6c6a2207410c6a200241d8006a280200360200200741046a2002290350370200200620084102746a41e4016a2004360200200420083b018801200420063602002001200128020841016a3602080c0d0b200241c0006a41086a2205200241306a41086a28020036020020022002290330370340200841016a2106200a418c016a2107200a2f018a01220441016a21090240200420084d22010d00200720064103746a200720084103746a2008417f7320096a41037410ea081a0b200720084103746a2003370000200241d0006a41086a200528020036020020022002290340370350200a41046a2107024020010d0020072006410c6c6a20072008410c6c6a200420086b410c6c10ea081a0b20072008410c6c6a22072002290350370200200741086a200241d0006a41086a280200360200200a41e4016a2107200441026a2105024020010d00200841027420076a41086a200720064102746a2006417f7320056a41027410ea081a0b200720064102746a2011360200200a20093b018a01200620054f0d0b200441016a2107200a2006417f6a22064102746a41e8016a2104034020042802002201200641016a22063b0188012001200a360200200441046a210420072006470d000c0c0b0b1036000b2008410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b41ac9cc700413541e49cc7001039000b2001410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b2012410c41f49cc700104d000b41f49bc7004128419c9cc7001039000b41e8aac700412b4194abc7001039000b41e899c700413041989ac7001039000b41a89ac700412041c89ac7001039000b200028020c2206200628020841016a3602080b200241e0006a24000bc80203047f017e017f200028020421012000410036020402402001450d00024020002802002202450d002002417f6a2102034020012802e40121012002450d012002417f6a21020c000b0b024020002802082203450d004100210003402003417f6a210341012102024002400340200020012f018a01490d010240200128020022040d002001102e410021010c030b20012f01880121002001102e2002417f6a2102200421010c000b0b200041016a210420012000410c6c6a220041086a2902002105200041046a2802002106024020024101470d00200421000c010b200120044102746a41e4016a280200210102402002450d000340200241016a220020024f210420012802e40121012000210220040d000b0b410021000b2006450d0202402005a7450d002006102e0b20030d000b0b0340200128020021022001102e2002210120020d000b0b0bc30301067f230041206b22022400200041086a28020022032001107602400240200028020422040d004100210441002100410021030c010b2000280200210520042100034020042f013221062005450d012005417f6a2105200420064102746a4194036a280200210420002802940321000c000b0b200241146a2006360200200241106a20043602002002200336021820024200370308200220003602042002200536020002402003450d00034020022003417f6a3602182002410020001b220628020021050240024020062802082203200628020422042f01324f0d00200421000c010b03400240200428020022000d00410021000c020b200541016a210520042f0130210320002104200320002f01324f0d000b0b200341016a21070240024020050d00200021040c010b200020074102746a4194036a280200210402402005417f6a2205450d00034020042802940321042005417f6a22050d000b0b410021070b2006200436020420064100360200200620073602082001200020034105746a41346a412010742002200020034102746a41046a28020036021c20012002411c6a4104107420022802182203450d01200228020421000c000b0b200241206a24000ba3990204067f1a7e157f407e230041d0ce006b22042400200441d0c6006a200341d00110e9081a200441d0c6006a41abd8c8004109200241a0016a412010840120044180c5006a200441d0c6006a41d00110e9081a200441a0c8006a41386a22024200370300200441a0c8006a41306a22034200370300200441a0c8006a41286a22054200370300200441a0c8006a41206a22064200370300200441a0c8006a41186a22074200370300200441a0c8006a41106a22084200370300200441a0c8006a41086a22094200370300200442003703a04820044180c5006a41b0b7c0004107200441a0c8006a41c0001086012008310000210a2009310000210b2007310000210c20043100b248210d20043100b148210e20043100af48210f20043100ad48211020043100ae48211120043100bf48211220043100be48211320043100bd48211420043100bc48211520043100bb48211620043100ba48211720043100ac48211820043100ab48211920043100aa48211a20043100a948211b20043100a748211c20043100b948211d20043100b748211e20043100b648211f20043100b348212020043100b448212120043100b5482122200420043502a04820043100a4484220868420043100a5484228868420043100a64822234230868442ffffffffffffff03833703e04820042020202142088684202242108684201f42188684201e42208684200c42288684201d4230868442018842ffffffffffffff03833703f84820042023201c42088684200b42108684201b42188684201a4220868420194228868420184230868442038842ffffffffffffff03833703e8482004200c201d42088684201742108684201642188684201542208684201442288684201342308684201242388684420c8842ffffffffffffff03833703804920042018201042088684201142108684200f42188684200a42208684200e42288684200d4230868420204238868442068842ffffffffffffff03833703f04820044188c9006a200441e0c8006a1071200441a8ca006a41186a20022903002220370300200441a8ca006a41106a2003290300220a370300200441a8ca006a41086a2005290300220b37030020042006290300220d3703a84a20043100ba4a210e20043100b94a210f20043100b74a211020043100b54a211120043100b64a211220043100c74a211320043100c64a211420043100c54a211520043100c44a211620043100c34a211720043100c24a211920043100b44a210c20043100b34a211a20043100b24a211b20043100b14a211c20043100af4a211e20043100c14a211820043100bf4a211f20043100be4a212120043100bb4a211d20043100bc4a212220043100bd4a21232004200d42ffffffff0f8320043100ac4a4220868420043100ad4a4228868420043100ae4a220d4230868442ffffffffffffff03833703c84a2004201d202242088684202342108684202142188684201f42208684202042ff018322204228868420184230868442018842ffffffffffffff03833703e04a2004200d201e42088684200b42ff018342108684201c42188684201b42208684201a42288684200c4230868442038842ffffffffffffff03833703d04a20042018420886202084201942108684201742188684201642208684201542288684201442308684201342388684420c8842ffffffffffffff03833703e84a2004200c201142088684201242108684201042188684200a42ff018342208684200f42288684200e42308684201d4238868442068842ffffffffffffff03833703d84a200441f0ca006a200441c8ca006a1071200441d0c6006a41106a2203200441f0ca006a41386a290300220b370300200441d0c6006a41086a2224200441f0ca006a41306a290300220d20042903f84a220e7c3703002003200b20042903804b220f7c370300200441d0c6006a41186a2208200441f0ca006a41c0006a290300221020042903884b22117c370300200441d0c6006a41206a2209200441f0ca006a41c8006a290300221220042903904b22137c370300200420042903984b221420042903f04a22157c3703d046200441a8ce006a41206a2202200441f0ca006a41f0006a290300370300200441a8ce006a41186a2205200441f0ca006a41e8006a290300370300200441a8ce006a41106a2206200441f0ca006a41e0006a290300370300200441a8ce006a41086a2207200441f0ca006a41d8006a290300370300200420042903c04b3703a84e200441d0c1006a20042903e84b220c420042d9e2cbb5c2f2a603420010e808200441a0c2006a200441f0ca006a4198016a29030022184200428ee0b9a98cbfbd1f420010e808200441f0c2006a200441f0ca006a4190016a290300221d420042968c8a82a4c39824420010e808200441c0c3006a200441f0ca006a4188016a2903002220420042d587a4ceaceea43d420010e80820044190c4006a200441f0ca006a4180016a290300220a420042edd39cadab84b215420010e808200441a0c4006a200a420042d9e2cbb5c2f2a603420010e808200441e0c1006a200c420042fabaabb1878ad401420010e808200441b0c2006a2018420042968c8a82a4c39824420010e80820044180c3006a201d420042d587a4ceaceea43d420010e808200441d0c3006a2020420042edd39cadab84b215420010e808200441e0c3006a2020420042d9e2cbb5c2f2a603420010e808200441b0c4006a200a420042fabaabb1878ad401420010e808200441f0c1006a200c420042d2808e80cce8f301420010e808200441c0c2006a2018420042d587a4ceaceea43d420010e80820044190c3006a201d420042edd39cadab84b215420010e808200441a0c3006a201d420042d9e2cbb5c2f2a603420010e808200441f0c3006a2020420042fabaabb1878ad401420010e808200441c0c4006a200a420042d2808e80cce8f301420010e80820044180c2006a200c420042f7f281baccf19c03420010e808200441d0c2006a2018420042edd39cadab84b215420010e808200441e0c2006a2018420042d9e2cbb5c2f2a603420010e808200441b0c3006a201d420042fabaabb1878ad401420010e80820044180c4006a2020420042d2808e80cce8f301420010e808200441d0c4006a200a420042f7f281baccf19c03420010e80820044190c2006a200c420042ffdb95eed98d9001420010e808200441d0c6006a41c8006a2225201220137d42f0ffffffffffff3f7c220c42ffffffffffffff0383201020117d42f0ffffffffffff3f7c22184233887c370300200441d0c6006a41c0006a2226201842ffffffffffffff0383200b200f7d42f0ffffffffffff3f7c22184233887c370300200441d0c6006a41386a2227201842ffffffffffffff0383200d200e7d42f0ffffffffffff3f7c22184233887c370300200441d0c6006a41306a2228201842ffffffffffffff0383201420157d42d0fdffffffffff3f7c22184233887c3703002004200c42338842137e201842ffffffffffffff03837c3703f846200441d0c6006a41f0006a22292002290300370300200441d0c6006a41e8006a222a2005290300370300200441d0c6006a41e0006a222b2006290300370300200441d0c6006a41d8006a222c2007290300370300200420042903a84e3703a047200441d0c6006a4188016a222d20042903c042221320042903f0417c220c2004290390437c221820042903e0437c221d20042903b0447c222020042903b042221420042903e0417c220a2004290380437c220b20042903d0437c220d20042903a0447c220e20042903a042221520042903d0417c220f20042903f0427c221020042903c0437c22112004290390447c2212423388200441a0c2006a41086a290300200441d0c1006a41086a2903007c200f201554ad7c200441f0c2006a41086a2903007c2010200f54ad7c200441c0c3006a41086a2903007c2011201054ad7c20044190c4006a41086a2903007c2012201154ad7c420d86847c220f423388200441b0c2006a41086a290300200441e0c1006a41086a2903007c200a201454ad7c20044180c3006a41086a2903007c200b200a54ad7c200441d0c3006a41086a2903007c200d200b54ad7c200441a0c4006a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a42ffffffffffffff0383370300200441d0c6006a4190016a222e20042903d04222112004290380427c220b20042903a0437c220d20042903f0437c220e20042903c0447c2210200a423388200441c0c2006a41086a290300200441f0c1006a41086a2903007c200c201354ad7c20044190c3006a41086a2903007c2018200c54ad7c200441e0c3006a41086a2903007c201d201854ad7c200441b0c4006a41086a2903007c2020201d54ad7c200a202054ad7c420d86847c220c42ffffffffffffff0383370300200441d0c6006a4198016a222f20042903e04222132004290390427c221820042903b0437c221d2004290380447c222020042903d0447c220a200c423388200441d0c2006a41086a29030020044180c2006a41086a2903007c200b201154ad7c200441a0c3006a41086a2903007c200d200b54ad7c200441f0c3006a41086a2903007c200e200d54ad7c200441c0c4006a41086a2903007c2010200e54ad7c200c201054ad7c420d86847c220c42ffffffffffffff0383370300200441d0c6006a4180016a2230200c423388200441e0c2006a41086a29030020044190c2006a41086a2903007c2018201354ad7c200441b0c3006a41086a2903007c201d201854ad7c20044180c4006a41086a2903007c2020201d54ad7c200441d0c4006a41086a2903007c200a202054ad7c200c200a54ad7c420d868442137e201242ffffffffffffff03837c220c423388200f42ffffffffffffff03837c3703002004200c42ffffffffffffff03833703c84720044190cc006a41206a223120044188c9006a41c8006a223229030037030020044190cc006a41186a223320044188c9006a41c0006a2234290300222037030020044190cc006a41106a223520044188c9006a41386a2236290300221d37030020044190cc006a41086a223720044188c9006a41306a22382903002218370300200420042903b049220c3703904c2004200c2004290388497c220c3703904c203720182004290390497c22183703002035201d2004290398497c221d3703002033202020042903a0497c22203703002031203129030020042903a8497c220a370300200441c03e6a20042903d046220b4200200c420010e808200441c0c1006a200a42002024290300220d42137e420010e808200441f0c0006a202042002003290300220e42137e2212420010e808200441a0c0006a201d42002008290300221042137e2211420010e808200441d03f6a201842002009290300221342137e220f420010e808200441d03e6a20184200200b420010e808200441b0c1006a200c4200200d420010e808200441e0c0006a200a42002012420010e80820044190c0006a202042002011420010e808200441c03f6a201d4200200f420010e808200441e03e6a201d4200200b420010e808200441a0c1006a20184200200d420010e808200441d0c0006a200c4200200e420010e80820044180c0006a200a42002011420010e808200441b03f6a20204200200f420010e808200441f03e6a20204200200b420010e80820044190c1006a201d4200200d420010e808200441c0c0006a20184200200e420010e808200441f03f6a200c42002010420010e808200441a03f6a200a4200200f420010e808200441803f6a200a4200200b420010e80820044180c1006a20204200200d420010e808200441b0c0006a201d4200200e420010e808200441e03f6a201842002010420010e808200441903f6a200c42002013420010e8082038290300210b2036290300210a2034290300211d200429039049210d200429039849210e20042903a0492120200441f03b6a20042903f846220c4200203229030020042903a8497d42f0ffffffffffff3f7c220f42338842137e20042903b0492004290388497d42d0fdffffffffff3f7c221242ffffffffffffff03837c2218420010e808200441f03d6a200f42ffffffffffffff0383201d20207d42f0ffffffffffff3f7c220f4233887c221d42002028290300222042137e420010e808200441b03d6a200f42ffffffffffffff0383200a200e7d42f0ffffffffffff3f7c220f4233887c220a42002027290300220e42137e2213420010e808200441f03c6a200f42ffffffffffffff0383200b200d7d42f0ffffffffffff3f7c220d4233887c220b42002026290300221042137e2211420010e808200441b03c6a200d42ffffffffffffff038320124233887c220d42002025290300221242137e220f420010e808200441e03b6a200d4200200c420010e808200441b03e6a201842002020420010e808200441a03d6a201d42002013420010e808200441e03c6a200a42002011420010e808200441a03c6a200b4200200f420010e808200441d03b6a200b4200200c420010e808200441a03e6a200d42002020420010e808200441e03d6a20184200200e420010e808200441d03c6a201d42002011420010e808200441903c6a200a4200200f420010e808200441c03b6a200a4200200c420010e808200441903e6a200b42002020420010e808200441d03d6a200d4200200e420010e808200441903d6a201842002010420010e808200441803c6a201d4200200f420010e808200441b03b6a201d4200200c420010e808200441803e6a200a42002020420010e808200441c03d6a200b4200200e420010e808200441803d6a200d42002010420010e808200441c03c6a201842002012420010e808200420042903d03c221320042903e03d7c220c20042903903c7c221820042903d03b7c221d20042903a03e7c222020042903a03d221420042903b03e7c220a20042903e03c7c220b20042903a03c7c220d20042903e03b7c220e20042903f03d221520042903f03b7c220f20042903b03d7c221020042903f03c7c221120042903b03c7c2212423388200441f03d6a41086a290300200441f03b6a41086a2903007c200f201554ad7c200441b03d6a41086a2903007c2010200f54ad7c200441f03c6a41086a2903007c2011201054ad7c200441b03c6a41086a2903007c2012201154ad7c420d86847c220f423388200441a03d6a41086a290300200441b03e6a41086a2903007c200a201454ad7c200441e03c6a41086a2903007c200b200a54ad7c200441a03c6a41086a2903007c200d200b54ad7c200441e03b6a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a42ffffffffffffff03833703c84c200420042903803c221120042903903d7c220b20042903c03b7c220d20042903903e7c220e20042903d03d7c2210200a423388200441d03c6a41086a290300200441e03d6a41086a2903007c200c201354ad7c200441903c6a41086a2903007c2018200c54ad7c200441d03b6a41086a2903007c201d201854ad7c200441a03e6a41086a2903007c2020201d54ad7c200a202054ad7c420d86847c220c42ffffffffffffff03833703d04c200420042903b03b221320042903c03c7c221820042903803e7c221d20042903c03d7c222020042903803d7c220a200c423388200441803c6a41086a290300200441903d6a41086a2903007c200b201154ad7c200441c03b6a41086a2903007c200d200b54ad7c200441903e6a41086a2903007c200e200d54ad7c200441d03d6a41086a2903007c2010200e54ad7c200c201054ad7c420d86847c220c42ffffffffffffff03833703d84c2004200c423388200441b03b6a41086a290300200441c03c6a41086a2903007c2018201354ad7c200441803e6a41086a2903007c201d201854ad7c200441c03d6a41086a2903007c2020201d54ad7c200441803d6a41086a2903007c200a202054ad7c200c200a54ad7c420d868442137e201242ffffffffffffff03837c220c42ffffffffffffff03833703b84c2004200c423388200f42ffffffffffffff03837c3703c04c200441e03a6a20042903c847220c420020042903804a2218420010e808200441d03a6a20044188c9006a4198016a290300221d42002030290300222042137e420010e808200441803a6a20044188c9006a4190016a290300220a4200202d290300220e42137e2212420010e808200441b0396a20044188c9006a4188016a290300220b4200202e290300221042137e2211420010e808200441e0386a20044188c9006a4180016a290300220d4200202f290300221342137e220f420010e808200441d0386a200d4200200c420010e808200441a03b6a201842002020420010e808200441c03a6a201d42002012420010e808200441f0396a200a42002011420010e808200441a0396a200b4200200f420010e80820044190396a200b4200200c420010e808200441c0386a200d42002020420010e808200441903b6a20184200200e420010e808200441b03a6a201d42002011420010e808200441e0396a200a4200200f420010e808200441d0396a200a4200200c420010e80820044180396a200b42002020420010e808200441b0386a200d4200200e420010e808200441803b6a201842002010420010e808200441a03a6a201d4200200f420010e808200441903a6a201d4200200c420010e808200441c0396a200a42002020420010e808200441f0386a200b4200200e420010e808200441a0386a200d42002010420010e808200441f03a6a201842002013420010e808200420042903903a221c20042903f03a7c220c20042903c0397c221820042903f0387c221d20042903a0387c222020042903a03a221e20042903803b7c220a20042903d0397c220b2004290380397c220d20042903b0387c220e20042903b03a221f20042903903b7c220f20042903e0397c22102004290390397c221120042903c0387c221220042903c03a222120042903a03b7c221320042903f0397c221420042903a0397c221520042903d0387c221620042903d03a222220042903e03a7c221720042903803a7c221920042903b0397c221a20042903e0387c221b423388200441d03a6a41086a290300200441e03a6a41086a2903007c2017202254ad7c200441803a6a41086a2903007c2019201754ad7c200441b0396a41086a2903007c201a201954ad7c200441e0386a41086a2903007c201b201a54ad7c420d86847c2217423388200441c03a6a41086a290300200441a03b6a41086a2903007c2013202154ad7c200441f0396a41086a2903007c2014201354ad7c200441a0396a41086a2903007c2015201454ad7c200441d0386a41086a2903007c2016201554ad7c2017201654ad7c420d86847c2213423388200441b03a6a41086a290300200441903b6a41086a2903007c200f201f54ad7c200441e0396a41086a2903007c2010200f54ad7c20044190396a41086a2903007c2011201054ad7c200441c0386a41086a2903007c2012201154ad7c2013201254ad7c420d86847c220f423388200441a03a6a41086a290300200441803b6a41086a2903007c200a201e54ad7c200441d0396a41086a2903007c200b200a54ad7c20044180396a41086a2903007c200d200b54ad7c200441b0386a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a42ffffffffffffff03833703804d2004200f42ffffffffffffff03833703f84c2004201342ffffffffffffff03833703f04c2004200a423388200441903a6a41086a290300200441f03a6a41086a2903007c200c201c54ad7c200441c0396a41086a2903007c2018200c54ad7c200441f0386a41086a2903007c201d201854ad7c200441a0386a41086a2903007c2020201d54ad7c200a202054ad7c420d868442137e201b42ffffffffffffff03837c220c423388201742ffffffffffffff03837c3703e84c2004200c42ffffffffffffff03833703e04c20044190356a20042903a047220c420020042903d8492218420010e808200441a0366a20044188c9006a41f0006a290300221d4200202c290300222042137e420010e808200441e0366a20044188c9006a41e8006a290300220a4200202b290300220e42137e2212420010e808200441a0376a20044188c9006a41e0006a290300220b4200202a290300221042137e2211420010e808200441e0376a20044188c9006a41d8006a290300220d42002029290300221342137e220f420010e808200441e0356a200d4200200c420010e808200441a0356a201842002020420010e808200441b0366a201d42002012420010e808200441f0366a200a42002011420010e808200441b0376a200b4200200f420010e808200441f0356a200b4200200c420010e808200441f0376a200d42002020420010e808200441b0356a20184200200e420010e808200441c0366a201d42002011420010e80820044180376a200a4200200f420010e80820044180366a200a4200200c420010e808200441c0376a200b42002020420010e80820044180386a200d4200200e420010e808200441c0356a201842002010420010e808200441d0366a201d4200200f420010e80820044190366a201d4200200c420010e80820044190376a200a42002020420010e808200441d0376a200b4200200e420010e80820044190386a200d42002010420010e808200441d0356a201842002013420010e8082004200429039036221c20042903d0357c220c2004290390377c221820042903d0377c221d2004290390387c222020042903d036221e20042903c0357c220a2004290380367c220b20042903c0377c220d2004290380387c220e20042903c036221f20042903b0357c220f2004290380377c221020042903f0357c221120042903f0377c221220042903b036222120042903a0357c221320042903f0367c221420042903b0377c221520042903e0357c221620042903a03622222004290390357c221720042903e0367c221920042903a0377c221a20042903e0377c221b423388200441a0366a41086a29030020044190356a41086a2903007c2017202254ad7c200441e0366a41086a2903007c2019201754ad7c200441a0376a41086a2903007c201a201954ad7c200441e0376a41086a2903007c201b201a54ad7c420d86847c2217423388200441b0366a41086a290300200441a0356a41086a2903007c2013202154ad7c200441f0366a41086a2903007c2014201354ad7c200441b0376a41086a2903007c2015201454ad7c200441e0356a41086a2903007c2016201554ad7c2017201654ad7c420d86847c2213423388200441c0366a41086a290300200441b0356a41086a2903007c200f201f54ad7c20044180376a41086a2903007c2010200f54ad7c200441f0356a41086a2903007c2011201054ad7c200441f0376a41086a2903007c2012201154ad7c2013201254ad7c420d86847c220f423388200441d0366a41086a290300200441c0356a41086a2903007c200a201e54ad7c20044180366a41086a2903007c200b200a54ad7c200441c0376a41086a2903007c200d200b54ad7c20044180386a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a42338820044190366a41086a290300200441d0356a41086a2903007c200c201c54ad7c20044190376a41086a2903007c2018200c54ad7c200441d0376a41086a2903007c201d201854ad7c20044190386a41086a2903007c2020201d54ad7c200a202054ad7c420d868442137e201b42ffffffffffffff03837c221842ffffffffffffff0383220c3703884d20042018423388201742ffffffffffffff03837c22183703904d2004200a42ffffffffffffff0383221d3703a84d2004200f42ffffffffffffff038322203703a04d2004201342ffffffffffffff0383220a3703984d200441b0cd006a41086a2231201820187c370300200441b0cd006a41106a2224200a200a7c370300200441b0cd006a41186a2225202020207c370300200441b0cd006a41206a2226201d201d7c3703002004200c200c7c3703b04d20042903c04c211c20042903c84c211e20042903d04c211f20042903d84c212120042903b84c2122200420042903803f222320042903903f7c220c2004290380417c221820042903b0407c221d20042903e03f7c222020042903a03f223920042903f03f7c220a20042903f03e7c220b2004290390417c220d20042903c0407c220e200429038040223a20042903d0407c220f20042903b03f7c221020042903e03e7c221120042903a0417c221220042903e040223b20042903b0417c22132004290390407c221420042903c03f7c221520042903d03e7c221620042903c041223c20042903c03e7c221720042903f0407c221920042903a0407c221a20042903d03f7c221b423388200441c0c1006a41086a290300200441c03e6a41086a2903007c2017203c54ad7c200441f0c0006a41086a2903007c2019201754ad7c200441a0c0006a41086a2903007c201a201954ad7c200441d03f6a41086a2903007c201b201a54ad7c420d86847c2217423388200441e0c0006a41086a290300200441b0c1006a41086a2903007c2013203b54ad7c20044190c0006a41086a2903007c2014201354ad7c200441c03f6a41086a2903007c2015201454ad7c200441d03e6a41086a2903007c2016201554ad7c2017201654ad7c420d86847c221342338820044180c0006a41086a290300200441d0c0006a41086a2903007c200f203a54ad7c200441b03f6a41086a2903007c2010200f54ad7c200441e03e6a41086a2903007c2011201054ad7c200441a0c1006a41086a2903007c2012201154ad7c2013201254ad7c420d86847c220f423388200441a03f6a41086a290300200441f03f6a41086a2903007c200a203954ad7c200441f03e6a41086a2903007c200b200a54ad7c20044190c1006a41086a2903007c200d200b54ad7c200441c0c0006a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a423388200441803f6a41086a290300200441903f6a41086a2903007c200c202354ad7c20044180c1006a41086a2903007c2018200c54ad7c200441b0c0006a41086a2903007c201d201854ad7c200441e03f6a41086a2903007c2020201d54ad7c200a202054ad7c420d868442137e201b42ffffffffffffff03837c220c423388201742ffffffffffffff03837c220e3703884e2004200c42ffffffffffffff0383220b3703804e2004200a42ffffffffffffff0383220a3703a04e2004200f42ffffffffffffff0383220d3703984e2004201342ffffffffffffff0383220f3703904e2004200b20042903b84c7c3703804e2004200e20042903c04c7c3703884e2004200f20042903c84c7c3703904e2004200d20042903d04c7c3703984e2004200a20042903d84c7c3703a04e2002202629030037030020052025290300222037030020062024290300221d370300200720312903002218370300200420042903b04d220c3703a84e2004200c20042903e04c7c220c3703a84e2007201820042903e84c7c22183703002006201d20042903f04c7c221d3703002005202020042903f84c7c22123703002002200229030020042903804d7c2215370300200441f0276a202629030020042903804d7d42f0ffffffffffff3f7c221042338842137e20042903b04d20042903e04c7d42d0fdffffffffff3f7c221142ffffffffffffff03837c22204200200a20217d42f0ffffffffffff3f7c221342338842137e200b20227d42d0fdffffffffff3f7c221442ffffffffffffff03837c220a420010e80820044180356a201342ffffffffffffff0383200d201f7d42f0ffffffffffff3f7c220d4233887c220b4200203129030020042903e84c7d42f0ffffffffffff3f7c221642ffffffffffffff038320114233887c221342137e2223420010e80820044180346a200d42ffffffffffffff0383200f201e7d42f0ffffffffffff3f7c220f4233887c220d4200202429030020042903f04c7d42f0ffffffffffff3f7c221142ffffffffffffff038320164233887c221942137e221e420010e80820044180336a200f42ffffffffffffff0383200e201c7d42f0ffffffffffff3f7c220f4233887c220e4200202529030020042903f84c7d42f0ffffffffffff3f7c221642ffffffffffffff038320114233887c221c42137e221b420010e808200441d0266a200f42ffffffffffffff038320144233887c220f4200201042ffffffffffffff038320164233887c222142137e2216420010e808200441c0266a200f42002020420010e808200441e0276a200a42002013420010e808200441f0336a200b4200201e420010e808200441f0326a200d4200201b420010e80820044180326a200e42002016420010e80820044180316a200e42002020420010e808200441b0266a200f42002013420010e808200441d0276a200a42002019420010e808200441e0326a200b4200201b420010e808200441f0316a200d42002016420010e808200441f0306a200d42002020420010e808200441e0346a200e42002013420010e80820044180256a200f42002019420010e808200441c0276a200a4200201c420010e808200441e0316a200b42002016420010e808200441e0306a200b42002020420010e808200441d0346a200d42002013420010e808200441c0336a200e42002019420010e808200441d0236a200f4200201c420010e808200441b0276a200a42002021420010e808200441902b6a200c420020042903804e2210420010e808200441802d6a20042903a04e221a4200201842137e420010e808200441802e6a20042903984e22174200201d42137e2239420010e808200441802f6a20042903904e22144200201242137e2222420010e80820044180306a20042903884e22114200201542137e221f420010e808200441f02f6a20114200200c420010e808200441a02b6a201042002018420010e808200441f02c6a201a42002039420010e808200441f02d6a201742002022420010e808200441f02e6a20144200201f420010e808200441e02e6a20144200200c420010e808200441e02f6a201142002018420010e808200441b02b6a20104200201d420010e808200441e02c6a201a42002022420010e808200441e02d6a20174200201f420010e808200441d02d6a20174200200c420010e808200441d02e6a201442002018420010e808200441d02f6a20114200201d420010e808200441c02b6a201042002012420010e808200441d02c6a201a4200201f420010e808200441c02c6a201a4200200c420010e808200441c02d6a201742002018420010e808200441c02e6a20144200201d420010e808200441c02f6a201142002012420010e808200441d02b6a201042002015420010e808200441d0306a20204200200c420010e808200441f0346a201542002023420010e808200441e0336a20124200201e420010e808200441d0326a201d4200201b420010e808200441d0316a201842002016420010e808200441c0306a201842002020420010e808200441c0346a200c42002013420010e808200441d0336a20154200201e420010e808200441c0326a20124200201b420010e808200441c0316a201d42002016420010e808200441b0306a201d42002020420010e808200441b0346a201842002013420010e808200441b0336a200c42002019420010e808200441b0326a20154200201b420010e808200441b0316a201242002016420010e808200441a0306a201242002020420010e808200441a0346a201d42002013420010e808200441a0336a201842002019420010e808200441a0326a200c4200201c420010e808200441a0316a201542002016420010e80820044190306a201542002020420010e80820044190346a201242002013420010e80820044190336a201d42002019420010e80820044190326a20184200201c420010e80820044190316a200c42002021420010e808200441a0276a20104200200a420010e808200441902f6a200b4200201142137e420010e808200441a02e6a200d4200201442137e221d420010e808200441b02d6a200e4200201742137e2218420010e80820044190106a200f4200201a42137e220c420010e80820044180106a200f42002010420010e80820044190276a200a42002011420010e808200441902e6a200b4200201d420010e808200441a02d6a200d42002018420010e808200441b02c6a200e4200200c420010e808200441e02b6a200e42002010420010e808200441f00f6a200f42002011420010e80820044180276a200a42002014420010e808200441902d6a200b42002018420010e808200441a02c6a200d4200200c420010e808200441f02b6a200d42002010420010e808200441b02f6a200e42002011420010e808200441900f6a200f42002014420010e808200441f0266a200a42002017420010e808200441902c6a200b4200200c420010e808200441802c6a200b42002010420010e808200441a02f6a200d42002011420010e808200441b02e6a200e42002014420010e808200441b00e6a200f42002017420010e808200441e0266a200a4200201a420010e808200420042903e02c221320042903b02b7c220c20042903e02d7c221820042903e02e7c221d20042903e02f7c222020042903f02c221420042903a02b7c220a20042903f02d7c220b20042903f02e7c220d20042903f02f7c220e20042903802d221520042903902b7c220f20042903802e7c221020042903802f7c22112004290380307c2212423388200441802d6a41086a290300200441902b6a41086a2903007c200f201554ad7c200441802e6a41086a2903007c2010200f54ad7c200441802f6a41086a2903007c2011201054ad7c20044180306a41086a2903007c2012201154ad7c420d86847c220f423388200441f02c6a41086a290300200441a02b6a41086a2903007c200a201454ad7c200441f02d6a41086a2903007c200b200a54ad7c200441f02e6a41086a2903007c200d200b54ad7c200441f02f6a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a42ffffffffffffff038322173703c04d200420042903d02c221120042903c02b7c220b20042903d02d7c220d20042903d02e7c220e20042903d02f7c2210200a423388200441e02c6a41086a290300200441b02b6a41086a2903007c200c201354ad7c200441e02d6a41086a2903007c2018200c54ad7c200441e02e6a41086a2903007c201d201854ad7c200441e02f6a41086a2903007c2020201d54ad7c200a202054ad7c420d86847c220c42ffffffffffffff038322213703c84d200420042903c02c221320042903d02b7c221820042903c02d7c221d20042903c02e7c222020042903c02f7c220a200c423388200441d02c6a41086a290300200441c02b6a41086a2903007c200b201154ad7c200441d02d6a41086a2903007c200d200b54ad7c200441d02e6a41086a2903007c200e200d54ad7c200441d02f6a41086a2903007c2010200e54ad7c200c201054ad7c420d86847c220c42ffffffffffffff038322233703d04d2004200c423388200441c02c6a41086a290300200441d02b6a41086a2903007c2018201354ad7c200441c02d6a41086a2903007c201d201854ad7c200441c02e6a41086a2903007c2020201d54ad7c200441c02f6a41086a2903007c200a202054ad7c200c200a54ad7c420d868442137e201242ffffffffffffff03837c220c42ffffffffffffff038322143703b04d2004200c423388200f42ffffffffffffff03837c22153703b84d20044180286a20042903903022222004290390317c220c2004290390347c22182004290390337c221d2004290390327c222020042903a031223920042903a0327c220a20042903a0307c220b20042903a0347c220d20042903a0337c220e20042903b032223a20042903b0337c220f20042903b0317c221020042903b0307c221120042903b0347c221220042903d033223b20042903c0347c221320042903c0327c221620042903c0317c221920042903c0307c221a20042903f034223c20042903d0307c221b20042903e0337c221c20042903d0327c221e20042903d0317c221f423388200441f0346a41086a290300200441d0306a41086a2903007c201b203c54ad7c200441e0336a41086a2903007c201c201b54ad7c200441d0326a41086a2903007c201e201c54ad7c200441d0316a41086a2903007c201f201e54ad7c420d86847c221b423388200441d0336a41086a290300200441c0346a41086a2903007c2013203b54ad7c200441c0326a41086a2903007c2016201354ad7c200441c0316a41086a2903007c2019201654ad7c200441c0306a41086a2903007c201a201954ad7c201b201a54ad7c420d86847c2213423388200441b0326a41086a290300200441b0336a41086a2903007c200f203a54ad7c200441b0316a41086a2903007c2010200f54ad7c200441b0306a41086a2903007c2011201054ad7c200441b0346a41086a2903007c2012201154ad7c2013201254ad7c420d86847c220f423388200441a0316a41086a290300200441a0326a41086a2903007c200a203954ad7c200441a0306a41086a2903007c200b200a54ad7c200441a0346a41086a2903007c200d200b54ad7c200441a0336a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a42ffffffffffffff0383223d42f0ffffffffffff3f7c223e20237d221242338842137e200a42338820044190306a41086a29030020044190316a41086a2903007c200c202254ad7c20044190346a41086a2903007c2018200c54ad7c20044190336a41086a2903007c201d201854ad7c20044190326a41086a2903007c2020201d54ad7c200a202054ad7c420d868442137e201f42ffffffffffffff03837c222042ffffffffffffff0383223f42d0fdffffffffff3f7c224020147d220a42ffffffffffffff03837c220c4200203f20147c2218420010e808200441c0296a203d20237c221d42002020423388201b42ffffffffffffff03837c224142f0ffffffffffff3f7c224220157d220b42ffffffffffffff0383200a4233887c222042137e420010e808200441a02a6a200f42ffffffffffffff0383224320217c220a4200201342ffffffffffffff0383224442f0ffffffffffff3f7c224520177d220d42ffffffffffffff0383200b4233887c220e42137e2213420010e808200441b02a6a204420177c220b4200204342f0ffffffffffff3f7c224620217d220f42ffffffffffffff0383200d4233887c221042137e2211420010e808200441d0296a204120157c220d4200201242ffffffffffffff0383200f4233887c221242137e220f420010e80820044180296a200d4200200c420010e80820044190286a201842002020420010e808200441902a6a201d42002013420010e808200441e02a6a200a42002011420010e808200441c02a6a200b4200200f420010e808200441f0286a200b4200200c420010e808200441b0296a200d42002020420010e808200441a0286a20184200200e420010e808200441d02a6a201d42002011420010e808200441f02a6a200a4200200f420010e808200441e0286a200a4200200c420010e808200441a0296a200b42002020420010e808200441e0296a200d4200200e420010e808200441b0286a201842002010420010e808200441802b6a201d4200200f420010e808200441d0286a201d4200200c420010e80820044190296a200a42002020420010e808200441802a6a200b4200200e420010e808200441f0296a200d42002010420010e808200441c0286a201842002012420010e80820044180216a2014420020042903e030222220042903b0277c220c20042903d0347c221820042903c0337c221d20042903d0237c222020042903e031223920042903c0277c220a20042903f0307c220b20042903e0347c220d2004290380257c220e20042903e032223a20042903d0277c220f20042903f0317c22102004290380317c221120042903b0267c221220042903f033223b20042903e0277c221320042903f0327c22162004290380327c221920042903c0267c221a200429038035223c20042903f0277c221b2004290380347c221c2004290380337c221e20042903d0267c221f42338820044180356a41086a290300200441f0276a41086a2903007c201b203c54ad7c20044180346a41086a2903007c201c201b54ad7c20044180336a41086a2903007c201e201c54ad7c200441d0266a41086a2903007c201f201e54ad7c420d86847c221b423388200441f0336a41086a290300200441e0276a41086a2903007c2013203b54ad7c200441f0326a41086a2903007c2016201354ad7c20044180326a41086a2903007c2019201654ad7c200441c0266a41086a2903007c201a201954ad7c201b201a54ad7c420d86847c2213423388200441e0326a41086a290300200441d0276a41086a2903007c200f203a54ad7c200441f0316a41086a2903007c2010200f54ad7c20044180316a41086a2903007c2011201054ad7c200441b0266a41086a2903007c2012201154ad7c2013201254ad7c420d86847c220f423388200441e0316a41086a290300200441c0276a41086a2903007c200a203954ad7c200441f0306a41086a2903007c200b200a54ad7c200441e0346a41086a2903007c200d200b54ad7c20044180256a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a423388200441e0306a41086a290300200441b0276a41086a2903007c200c202254ad7c200441d0346a41086a2903007c2018200c54ad7c200441c0336a41086a2903007c201d201854ad7c200441d0236a41086a2903007c2020201d54ad7c200a202054ad7c420d868442137e201f42ffffffffffffff03837c220c42ffffffffffffff03832218420010e808200441b0226a200a42ffffffffffffff0383221d4200201542137e420010e808200441e0236a200f42ffffffffffffff038322204200201742137e220e420010e80820044190256a201342ffffffffffffff0383220a4200202142137e220d420010e808200441a0226a200c423388201b42ffffffffffffff03837c220b4200202342137e220c420010e80820044190226a200b42002014420010e808200441f0206a201842002015420010e808200441c0226a201d4200200e420010e808200441f0236a20204200200d420010e808200441a0256a200a4200200c420010e808200441b0256a200a42002014420010e80820044180226a200b42002015420010e808200441e0206a201842002017420010e808200441d0226a201d4200200d420010e80820044180246a20204200200c420010e80820044190246a202042002014420010e808200441c0256a200a42002015420010e808200441f0216a200b42002017420010e808200441d0206a201842002021420010e808200441e0226a201d4200200c420010e808200441f0226a201d42002014420010e808200441a0246a202042002015420010e808200441d0256a200a42002017420010e808200441e0216a200b42002021420010e808200441c0206a201842002023420010e808200420042903d022221c20042903e0207c220c2004290380247c220d20042903b0257c220e2004290380227c220f20042903c022221e20042903f0207c221020042903f0237c221120042903a0257c22122004290390227c221320042903b022221f2004290380217c221620042903e0237c22192004290390257c221a20042903a0227c221b423388200441b0226a41086a29030020044180216a41086a2903007c2016201f54ad7c200441e0236a41086a2903007c2019201654ad7c20044190256a41086a2903007c201a201954ad7c200441a0226a41086a2903007c201b201a54ad7c420d86847c2216423388200441c0226a41086a290300200441f0206a41086a2903007c2010201e54ad7c200441f0236a41086a2903007c2011201054ad7c200441a0256a41086a2903007c2012201154ad7c20044190226a41086a2903007c2013201254ad7c2016201354ad7c420d86847c221042ffffffffffffff03833703904e200420042903e022221a20042903d0207c22112004290390247c221220042903c0257c221320042903f0217c22192010423388200441d0226a41086a290300200441e0206a41086a2903007c200c201c54ad7c20044180246a41086a2903007c200d200c54ad7c200441b0256a41086a2903007c200e200d54ad7c20044180226a41086a2903007c200f200e54ad7c2010200f54ad7c420d86847c220c42ffffffffffffff03833703984e200420042903f022221c20042903c0207c220d20042903a0247c220e20042903d0257c220f20042903e0217c2210200c423388200441e0226a41086a290300200441d0206a41086a2903007c2011201a54ad7c20044190246a41086a2903007c2012201154ad7c200441c0256a41086a2903007c2013201254ad7c200441f0216a41086a2903007c2019201354ad7c200c201954ad7c420d86847c220c42ffffffffffffff03833703a04e2004200c423388200441f0226a41086a290300200441c0206a41086a2903007c200d201c54ad7c200441a0246a41086a2903007c200e200d54ad7c200441d0256a41086a2903007c200f200e54ad7c200441e0216a41086a2903007c2010200f54ad7c200c201054ad7c420d868442137e201b42ffffffffffffff03837c220c42ffffffffffffff03833703804e2004200c423388201642ffffffffffffff03837c3703884e20044190286a41086a2903002147200441902a6a41086a2903002148200429039028213b20042903902a210c200441e02a6a41086a290300214920042903e02a213c200441c02a6a41086a290300214a20042903c02a214b20044180296a41086a290300214c200429038029214d20044180286a41086a290300214e200441c0296a41086a290300214f200429038028215020042903c029210d200441a02a6a41086a290300215120042903a02a2152200441b02a6a41086a290300215320042903b02a2154200441d0296a41086a290300215520042903d029215620042903d02a210f20042903a028211f20042903f02a212220042903f028213920042903b029213a200441d02a6a41086a2903002157200441a0286a41086a2903002158200441f02a6a41086a2903002159200441f0286a41086a290300215a200441b0296a41086a290300215b20042903802b211020042903b028211a20042903e028211b20042903a029211c20042903e029211e200441802b6a41086a290300215c200441b0286a41086a290300215d200441e0286a41086a290300215e200441a0296a41086a290300215f200441e0296a41086a290300216020042903c028211220042903d0282111200429039029211320042903802a211620042903f0292119200441c0286a41086a2903002161200441d0286a41086a290300216220044190296a41086a2903002163200441802a6a41086a2903002164200441f0296a41086a290300216520044188c9006a20044180ce006a4101106e200441e01c6a200429038849220e4200201920162013201120127c22127c22137c22167c2219201e201c201b2010201a7c221a7c221b7c221c7c221e203a20392022200f201f7c221f7c22227c22397c223a204d204b203c200c203b7c223b7c223c7c224b7c224d205620542052200d20507c22507c22527c22547c2256423388205520532051204f204e7c2050200d54ad7c7c2052205054ad7c7c2054205254ad7c7c2056205454ad7c420d86847c220d423388204c204a2049204820477c203b200c54ad7c7c203c203b54ad7c7c204b203c54ad7c7c204d204b54ad7c200d204d54ad7c420d86847c223b423388205b205a2059205720587c201f200f54ad7c7c2022201f54ad7c7c2039202254ad7c7c203a203954ad7c203b203a54ad7c420d86847c221f4233882060205f205e205c205d7c201a201054ad7c7c201b201a54ad7c7c201c201b54ad7c7c201e201c54ad7c201f201e54ad7c420d86847c220f423388206520642063206220617c2012201154ad7c7c2013201254ad7c7c2016201354ad7c7c2019201654ad7c200f201954ad7c420d868442137e205642ffffffffffffff03837c221142ffffffffffffff0383220c420010e808200441e01f6a200f42ffffffffffffff038322194200200429039049220f42137e420010e808200441901f6a201f42ffffffffffffff038322164200200429039849221042137e221b420010e808200441c01e6a203b42ffffffffffffff03832213420020042903a049221242137e221a420010e808200441f01d6a2011423388200d42ffffffffffffff03837c220d420020042903a849221c42137e2211420010e808200441f01c6a200d4200200e420010e808200441d01f6a200c4200200f420010e808200441801f6a20194200201b420010e808200441b01e6a20164200201a420010e808200441e01d6a201342002011420010e808200441801d6a20134200200e420010e808200441c01f6a200d4200200f420010e808200441f01e6a200c42002010420010e808200441a01e6a20194200201a420010e808200441d01d6a201642002011420010e808200441901d6a20164200200e420010e808200441b01f6a20134200200f420010e808200441e01e6a200d42002010420010e808200441901e6a200c42002012420010e808200441c01d6a201942002011420010e808200441a01d6a20194200200e420010e808200441a01f6a20164200200f420010e808200441d01e6a201342002010420010e808200441801e6a200d42002012420010e808200441b01d6a200c4200201c420010e808200420042903a01e223a20042903f01e7c220e20042903d01d7c220f20042903801d7c221020042903c01f7c221120042903801f223b20042903d01f7c221220042903b01e7c221a20042903e01d7c221b20042903f01c7c221c20042903e01f223c20042903e01c7c221e20042903901f7c221f20042903c01e7c222220042903f01d7c2239423388200441e01f6a41086a290300200441e01c6a41086a2903007c201e203c54ad7c200441901f6a41086a2903007c201f201e54ad7c200441c01e6a41086a2903007c2022201f54ad7c200441f01d6a41086a2903007c2039202254ad7c420d86847c221e423388200441801f6a41086a290300200441d01f6a41086a2903007c2012203b54ad7c200441b01e6a41086a2903007c201a201254ad7c200441e01d6a41086a2903007c201b201a54ad7c200441f01c6a41086a2903007c201c201b54ad7c201e201c54ad7c420d86847c221242ffffffffffffff03833703b84e200420042903c01d222220042903901e7c221a20042903901d7c221b20042903b01f7c221c20042903e01e7c221f2012423388200441a01e6a41086a290300200441f01e6a41086a2903007c200e203a54ad7c200441d01d6a41086a2903007c200f200e54ad7c200441801d6a41086a2903007c2010200f54ad7c200441c01f6a41086a2903007c2011201054ad7c2012201154ad7c420d86847c220e42ffffffffffffff03833703c04e200420042903a01d223a20042903b01d7c220f20042903a01f7c221020042903d01e7c221120042903801e7c2212200e423388200441c01d6a41086a290300200441901e6a41086a2903007c201a202254ad7c200441901d6a41086a2903007c201b201a54ad7c200441b01f6a41086a2903007c201c201b54ad7c200441e01e6a41086a2903007c201f201c54ad7c200e201f54ad7c420d86847c220e42ffffffffffffff03833703c84e2004200e423388200441a01d6a41086a290300200441b01d6a41086a2903007c200f203a54ad7c200441a01f6a41086a2903007c2010200f54ad7c200441d01e6a41086a2903007c2011201054ad7c200441801e6a41086a2903007c2012201154ad7c200e201254ad7c420d868442137e203942ffffffffffffff03837c220e42ffffffffffffff03833703a84e2004200e423388201e42ffffffffffffff03837c3703b04e200441f0ca006a41106a4200370300200441f0ca006a41186a4200370300200441f0ca006a41206a4200370300200442003703f84a200442013703f04a200441d0c6006a200441f0ca006a200441a8ce006a106f200441c0146a200c420020042903d846220e420010e808200441e0156a200441d0c6006a41286a290300220f4200200d42137e420010e80820044180176a200929030022104200201342137e221c420010e808200441a0186a200829030022114200201642137e221b420010e808200441c0196a200329030022124200201942137e221a420010e808200441b0196a20124200200c420010e808200441b0146a200e4200200d420010e808200441d0156a200f4200201c420010e808200441f0166a20104200201b420010e80820044190186a20114200201a420010e80820044180186a20114200200c420010e808200441a0196a20124200200d420010e808200441a0146a200e42002013420010e808200441c0156a200f4200201b420010e808200441e0166a20104200201a420010e808200441d0166a20104200200c420010e808200441f0176a20114200200d420010e80820044190196a201242002013420010e808200441c0136a200e42002016420010e808200441b0156a200f4200201a420010e808200441a0156a200f4200200c420010e808200441c0166a20104200200d420010e808200441e0176a201142002013420010e80820044180196a201242002016420010e808200441e0126a200e42002019420010e80820044180126a20042903804e220c4200200e420010e80820044190156a200f420020042903884e220d42137e420010e808200441b0166a2010420020042903904e221342137e221b420010e808200441d0176a2011420020042903984e221942137e221a420010e808200441f0186a2012420020042903a04e221c42137e2216420010e808200441e0186a20124200200c420010e808200441f0116a200e4200200d420010e80820044180156a200f4200201b420010e808200441a0166a20104200201a420010e808200441c0176a201142002016420010e808200441b0176a20114200200c420010e808200441d0186a20124200200d420010e808200441e0116a200e42002013420010e808200441f0146a200f4200201a420010e80820044190166a201042002016420010e80820044180166a20104200200c420010e808200441a0176a20114200200d420010e808200441c0186a201242002013420010e808200441d0116a200e42002019420010e808200441e0146a200f42002016420010e808200441d0146a200f4200200c420010e808200441f0156a20104200200d420010e80820044190176a201142002013420010e808200441b0186a201242002019420010e808200441c0116a200e4200201c420010e808200441c00d6a20042903802c224b20042903e0267c220c20042903a02f7c220d20042903b02e7c220e20042903b00e7c220f20042903902c224d20042903f0267c221020042903f02b7c221120042903b02f7c221220042903900f7c221320042903902d22502004290380277c221620042903a02c7c221920042903e02b7c221a20042903f00f7c221b20042903902e22522004290390277c221c20042903a02d7c221e20042903b02c7c221f2004290380107c222220042903902f225420042903a0277c223920042903a02e7c223a20042903b02d7c223b2004290390107c223c423388200441902f6a41086a290300200441a0276a41086a2903007c2039205454ad7c200441a02e6a41086a2903007c203a203954ad7c200441b02d6a41086a2903007c203b203a54ad7c20044190106a41086a2903007c203c203b54ad7c420d86847c2239423388200441902e6a41086a29030020044190276a41086a2903007c201c205254ad7c200441a02d6a41086a2903007c201e201c54ad7c200441b02c6a41086a2903007c201f201e54ad7c20044180106a41086a2903007c2022201f54ad7c2039202254ad7c420d86847c221e423388200441902d6a41086a29030020044180276a41086a2903007c2016205054ad7c200441a02c6a41086a2903007c2019201654ad7c200441e02b6a41086a2903007c201a201954ad7c200441f00f6a41086a2903007c201b201a54ad7c201e201b54ad7c420d86847c2216423388200441902c6a41086a290300200441f0266a41086a2903007c2010204d54ad7c200441f02b6a41086a2903007c2011201054ad7c200441b02f6a41086a2903007c2012201154ad7c200441900f6a41086a2903007c2013201254ad7c2016201354ad7c420d86847c2210423388200441802c6a41086a290300200441e0266a41086a2903007c200c204b54ad7c200441a02f6a41086a2903007c200d200c54ad7c200441b02e6a41086a2903007c200e200d54ad7c200441b00e6a41086a2903007c200f200e54ad7c2010200f54ad7c420d868442137e203c42ffffffffffffff03837c225642ffffffffffffff0383220d420020042903d014224720042903c0117c220c20042903f0157c220e2004290390177c220f20042903b0187c221120042903e014224820042903d0117c22122004290380167c221320042903a0177c221920042903c0187c221a20042903f014224920042903e0117c221b2004290390167c221c20042903b0177c221f20042903d0187c2222200429038015224a20042903f0117c223a20042903a0167c223b20042903c0177c223c20042903e0187c224b200429039015224c2004290380127c224d20042903b0167c225020042903d0177c225220042903f0187c225442338820044190156a41086a29030020044180126a41086a2903007c204d204c54ad7c200441b0166a41086a2903007c2050204d54ad7c200441d0176a41086a2903007c2052205054ad7c200441f0186a41086a2903007c2054205254ad7c420d86847c224d42338820044180156a41086a290300200441f0116a41086a2903007c203a204a54ad7c200441a0166a41086a2903007c203b203a54ad7c200441c0176a41086a2903007c203c203b54ad7c200441e0186a41086a2903007c204b203c54ad7c204d204b54ad7c420d86847c223a423388200441f0146a41086a290300200441e0116a41086a2903007c201b204954ad7c20044190166a41086a2903007c201c201b54ad7c200441b0176a41086a2903007c201f201c54ad7c200441d0186a41086a2903007c2022201f54ad7c203a202254ad7c420d86847c221c423388200441e0146a41086a290300200441d0116a41086a2903007c2012204854ad7c20044180166a41086a2903007c2013201254ad7c200441a0176a41086a2903007c2019201354ad7c200441c0186a41086a2903007c201a201954ad7c201c201a54ad7c420d86847c2212423388200441d0146a41086a290300200441c0116a41086a2903007c200c204754ad7c200441f0156a41086a2903007c200e200c54ad7c20044190176a41086a2903007c200f200e54ad7c200441b0186a41086a2903007c2011200f54ad7c2012201154ad7c420d868442137e205442ffffffffffffff03837c220c42ffffffffffffff0383221a420010e808200441900e6a201242ffffffffffffff0383221b42002056423388203942ffffffffffffff03837c220e42137e420010e808200441b00f6a201c42ffffffffffffff0383221c4200201e42ffffffffffffff0383221342137e2211420010e808200441e00e6a203a42ffffffffffffff0383221e4200201642ffffffffffffff0383221642137e220f420010e808200441f00c6a200c423388204d42ffffffffffffff03837c221f4200201042ffffffffffffff0383221942137e220c420010e808200441b00d6a201f4200200d420010e808200441800e6a201a4200200e420010e808200441a00f6a201b42002011420010e808200441d00e6a201c4200200f420010e808200441e00c6a201e4200200c420010e808200441a00d6a201e4200200d420010e808200441f00d6a201f4200200e420010e808200441c00f6a201a42002013420010e808200441c00e6a201b4200200f420010e808200441d00c6a201c4200200c420010e808200441900d6a201c4200200d420010e808200441e00d6a201e4200200e420010e808200441d00f6a201f42002013420010e808200441f00e6a201a42002016420010e808200441f00b6a201b4200200c420010e808200441800d6a201b4200200d420010e808200441d00d6a201c4200200e420010e808200441e00f6a201e42002013420010e808200441800f6a201f42002016420010e808200441a00e6a201a42002019420010e808200441b00a6a20042903800d224c20042903a00e7c220c20042903d00d7c220f20042903e00f7c221020042903800f7c221120042903f00b224e20042903f00e7c221220042903900d7c222220042903e00d7c223920042903d00f7c223a20042903c00e224f20042903c00f7c223b20042903d00c7c223c20042903a00d7c224b20042903f00d7c224d20042903a00f225120042903800e7c225020042903d00e7c225220042903e00c7c225420042903b00d7c225620042903900e225320042903c00d7c224720042903b00f7c224820042903e00e7c224920042903f00c7c224a423388200441900e6a41086a290300200441c00d6a41086a2903007c2047205354ad7c200441b00f6a41086a2903007c2048204754ad7c200441e00e6a41086a2903007c2049204854ad7c200441f00c6a41086a2903007c204a204954ad7c420d86847c2247423388200441a00f6a41086a290300200441800e6a41086a2903007c2050205154ad7c200441d00e6a41086a2903007c2052205054ad7c200441e00c6a41086a2903007c2054205254ad7c200441b00d6a41086a2903007c2056205454ad7c2047205654ad7c420d86847c2250423388200441c00e6a41086a290300200441c00f6a41086a2903007c203b204f54ad7c200441d00c6a41086a2903007c203c203b54ad7c200441a00d6a41086a2903007c204b203c54ad7c200441f00d6a41086a2903007c204d204b54ad7c2050204d54ad7c420d86847c223b423388200441f00b6a41086a290300200441f00e6a41086a2903007c2012204e54ad7c200441900d6a41086a2903007c2022201254ad7c200441e00d6a41086a2903007c2039202254ad7c200441d00f6a41086a2903007c203a203954ad7c203b203a54ad7c420d86847c223c423388200441800d6a41086a290300200441a00e6a41086a2903007c200c204c54ad7c200441d00d6a41086a2903007c200f200c54ad7c200441e00f6a41086a2903007c2010200f54ad7c200441800f6a41086a2903007c2011201054ad7c203c201154ad7c420d868442137e204a42ffffffffffffff03837c225542ffffffffffffff03832222420020042903a015225720042903e0127c220c20042903c0167c220f20042903e0177c22102004290380197c221120042903b015225820042903c0137c221220042903d0167c223920042903f0177c223a2004290390197c224b20042903c015225920042903a0147c224d20042903e0167c22522004290380187c225420042903a0197c225620042903d015225a20042903b0147c224820042903f0167c22492004290390187c224a20042903b0197c224c20042903e015225b20042903c0147c224e2004290380177c224f20042903a0187c225120042903c0197c2253423388200441e0156a41086a290300200441c0146a41086a2903007c204e205b54ad7c20044180176a41086a2903007c204f204e54ad7c200441a0186a41086a2903007c2051204f54ad7c200441c0196a41086a2903007c2053205154ad7c420d86847c224e423388200441d0156a41086a290300200441b0146a41086a2903007c2048205a54ad7c200441f0166a41086a2903007c2049204854ad7c20044190186a41086a2903007c204a204954ad7c200441b0196a41086a2903007c204c204a54ad7c204e204c54ad7c420d86847c2248423388200441c0156a41086a290300200441a0146a41086a2903007c204d205954ad7c200441e0166a41086a2903007c2052204d54ad7c20044180186a41086a2903007c2054205254ad7c200441a0196a41086a2903007c2056205454ad7c2048205654ad7c420d86847c224d423388200441b0156a41086a290300200441c0136a41086a2903007c2012205854ad7c200441d0166a41086a2903007c2039201254ad7c200441f0176a41086a2903007c203a203954ad7c20044190196a41086a2903007c204b203a54ad7c204d204b54ad7c420d86847c2212423388200441a0156a41086a290300200441e0126a41086a2903007c200c205754ad7c200441c0166a41086a2903007c200f200c54ad7c200441e0176a41086a2903007c2010200f54ad7c20044180196a41086a2903007c2011201054ad7c2012201154ad7c420d868442137e205342ffffffffffffff03837c225242ffffffffffffff0383220c420010e808200441800b6a201242ffffffffffffff0383220f42002055423388204742ffffffffffffff03837c223942137e420010e808200441900c6a204d42ffffffffffffff038322104200205042ffffffffffffff0383223a42137e2250420010e808200441b00b6a204842ffffffffffffff038322114200203b42ffffffffffffff0383224b42137e224d420010e808200441e0096a2052423388204e42ffffffffffffff03837c22124200203c42ffffffffffffff0383223c42137e223b420010e808200441a00a6a201242002022420010e808200441f00a6a200c42002039420010e808200441800c6a200f42002050420010e808200441a00b6a20104200204d420010e808200441d0096a20114200203b420010e808200441900a6a201142002022420010e808200441e00a6a201242002039420010e808200441a00c6a200c4200203a420010e808200441900b6a200f4200204d420010e808200441c0096a20104200203b420010e808200441800a6a201042002022420010e808200441d00a6a201142002039420010e808200441b00c6a20124200203a420010e808200441c00b6a200c4200204b420010e808200441e0086a200f4200203b420010e808200441f0096a200f42002022420010e808200441c00a6a201042002039420010e808200441c00c6a20114200203a420010e808200441d00b6a20124200204b420010e808200441e00b6a200c4200203c420010e808200441b0206a2018420042b0c1bad0f4e48603420010e80820044180236a201d420042a7a7fbf49beaf607420010e808200441b0246a2020420042a0d69f90da80b1cb00420010e808200441e0256a200a420042badf96dcb5c3bac700420010e808200441d0216a200b420042a7ecfac2b5f7ea19420010e808200441c0216a200b420042b0c1bad0f4e48603420010e808200441a0206a20184200429db1bce4dfb435420010e80820044190236a201d420042a0d69f90da80b1cb00420010e808200441c0246a2020420042badf96dcb5c3bac700420010e808200441f0256a200a420042a7ecfac2b5f7ea19420010e80820044180266a200a420042b0c1bad0f4e48603420010e808200441b0216a200b4200429db1bce4dfb435420010e80820044190206a2018420042e098f4e5e9ebfb03420010e808200441a0236a201d420042badf96dcb5c3bac700420010e808200441d0246a2020420042a7ecfac2b5f7ea19420010e808200441e0246a2020420042b0c1bad0f4e48603420010e80820044190266a200a4200429db1bce4dfb435420010e808200441a0216a200b420042e098f4e5e9ebfb03420010e80820044180206a20184200429e9981b4dab2e103420010e808200441b0236a201d420042a7ecfac2b5f7ea19420010e808200441c0236a201d420042b0c1bad0f4e48603420010e808200441f0246a20204200429db1bce4dfb435420010e808200441a0266a200a420042e098f4e5e9ebfb03420010e80820044190216a200b4200429e9981b4dab2e103420010e808200441f01f6a20184200429df893c0a486ae01420010e808200441901a6a20042903b04d2222420042b0c1bad0f4e48603420010e808200441e01a6a20042903d04d2239420042a7a7fbf49beaf607420010e808200441b01b6a20042903c84d223a420042a0d69f90da80b1cb00420010e808200441801c6a20042903c04d223b420042badf96dcb5c3bac700420010e808200441d01c6a20042903b84d223c420042a7ecfac2b5f7ea19420010e808200441c01c6a203c420042b0c1bad0f4e48603420010e808200441801a6a20224200429db1bce4dfb435420010e808200441d01a6a2039420042a0d69f90da80b1cb00420010e808200441a01b6a203a420042badf96dcb5c3bac700420010e808200441f01b6a203b420042a7ecfac2b5f7ea19420010e808200441e01b6a203b420042b0c1bad0f4e48603420010e808200441b01c6a203c4200429db1bce4dfb435420010e808200441f0196a2022420042e098f4e5e9ebfb03420010e808200441c01a6a2039420042badf96dcb5c3bac700420010e808200441901b6a203a420042a7ecfac2b5f7ea19420010e808200441801b6a203a420042b0c1bad0f4e48603420010e808200441d01b6a203b4200429db1bce4dfb435420010e808200441a01c6a203c420042e098f4e5e9ebfb03420010e808200441e0196a20224200429e9981b4dab2e103420010e808200441b01a6a2039420042a7ecfac2b5f7ea19420010e808200441a01a6a2039420042b0c1bad0f4e48603420010e808200441f01a6a203a4200429db1bce4dfb435420010e808200441c01b6a203b420042e098f4e5e9ebfb03420010e808200441901c6a203c4200429e9981b4dab2e103420010e808200441d0196a20224200429df893c0a486ae01420010e808200441e0106a200c420042ea81f582a8b53f420010e808200441d0126a200f420042bbda9284b7cbdd1b420010e808200441b0136a201042004288f5a7f5b28623420010e80820044190146a2011420042edd5d7bc83fb803c420010e808200441b0116a2012420042edc19ab7ab9cc0c700420010e808200441a0116a2012420042ea81f582a8b53f420010e808200441d0106a200c420042b9a6dff282e9ba01420010e808200441c0126a200f42004288f5a7f5b28623420010e808200441a0136a2010420042edd5d7bc83fb803c420010e80820044180146a2011420042edc19ab7ab9cc0c700420010e808200441f0136a2011420042ea81f582a8b53f420010e80820044190116a2012420042b9a6dff282e9ba01420010e808200441c0106a200c420042d8f8d29390ec01420010e808200441b0126a200f420042edd5d7bc83fb803c420010e80820044190136a2010420042edc19ab7ab9cc0c700420010e80820044180136a2010420042ea81f582a8b53f420010e808200441e0136a2011420042b9a6dff282e9ba01420010e80820044180116a2012420042d8f8d29390ec01420010e808200441b0106a200c420042ff91f789b6a19403420010e808200441a0126a200f420042edc19ab7ab9cc0c700420010e80820044190126a200f420042ea81f582a8b53f420010e808200441f0126a2010420042b9a6dff282e9ba01420010e808200441d0136a2011420042d8f8d29390ec01420010e808200441f0106a2012420042ff91f789b6a19403420010e808200441a0106a200c420042fff5f38289d9e103420010e808200441a0076a20042903f009224c20042903e00b7c220c20042903c00a7c220f20042903c00c7c221020042903d00b7c221120042903e008224e20042903c00b7c221220042903800a7c222220042903d00a7c223920042903b00c7c223a20042903900b224f20042903a00c7c223b20042903c0097c223c20042903900a7c224b20042903e00a7c224d20042903800c225120042903f00a7c225020042903a00b7c225220042903d0097c225420042903a00a7c225620042903800b225320042903b00a7c224720042903900c7c224820042903b00b7c224920042903e0097c224a423388200441800b6a41086a290300200441b00a6a41086a2903007c2047205354ad7c200441900c6a41086a2903007c2048204754ad7c200441b00b6a41086a2903007c2049204854ad7c200441e0096a41086a2903007c204a204954ad7c420d86847c2247423388200441800c6a41086a290300200441f00a6a41086a2903007c2050205154ad7c200441a00b6a41086a2903007c2052205054ad7c200441d0096a41086a2903007c2054205254ad7c200441a00a6a41086a2903007c2056205454ad7c2047205654ad7c420d86847c2250423388200441900b6a41086a290300200441a00c6a41086a2903007c203b204f54ad7c200441c0096a41086a2903007c203c203b54ad7c200441900a6a41086a2903007c204b203c54ad7c200441e00a6a41086a2903007c204d204b54ad7c2050204d54ad7c420d86847c223b423388200441e0086a41086a290300200441c00b6a41086a2903007c2012204e54ad7c200441800a6a41086a2903007c2022201254ad7c200441d00a6a41086a2903007c2039202254ad7c200441b00c6a41086a2903007c203a203954ad7c203b203a54ad7c420d86847c223a423388200441f0096a41086a290300200441e00b6a41086a2903007c200c204c54ad7c200441c00a6a41086a2903007c200f200c54ad7c200441c00c6a41086a2903007c2010200f54ad7c200441d00b6a41086a2903007c2011201054ad7c203a201154ad7c420d868442137e204a42ffffffffffffff03837c220c42ffffffffffffff0383220f4200200d420010e808200441f0076a20194200200c423388204742ffffffffffffff03837c221042137e225e420010e80820044180096a20164200205042ffffffffffffff0383221242137e2250420010e808200441a0086a20134200203b42ffffffffffffff0383223942137e2222420010e808200441d0066a200e4200203a42ffffffffffffff0383225242137e2211420010e80820044190076a200e4200200f420010e808200441e0076a200d42002010420010e808200441f0086a201942002050420010e80820044190086a201642002022420010e808200441c0066a201342002011420010e80820044180076a20134200200f420010e808200441d0076a200e42002010420010e80820044190096a200d42002012420010e80820044180086a201942002022420010e808200441b0066a201642002011420010e808200441f0066a20164200200f420010e808200441c0076a201342002010420010e808200441a0096a200e42002012420010e808200441b0086a200d42002039420010e808200441a0066a201942002011420010e808200441e0066a20194200200f420010e808200441b0076a201642002010420010e808200441b0096a201342002012420010e808200441c0086a200e42002039420010e808200441d0086a200d42002052420010e8082004200429038008224c2004290390097c220c20042903b0067c223a2004290380077c223b20042903d0077c223c20042903f008224e20042903e0077c224b2004290390087c224d20042903c0067c22542004290390077c225620042903f007224f20042903a0077c22472004290380097c224820042903a0087c224920042903d0067c224a423388200441f0076a41086a290300200441a0076a41086a2903007c2047204f54ad7c20044180096a41086a2903007c2048204754ad7c200441a0086a41086a2903007c2049204854ad7c200441d0066a41086a2903007c204a204954ad7c420d86847c2247423388200441f0086a41086a290300200441e0076a41086a2903007c204b204e54ad7c20044190086a41086a2903007c204d204b54ad7c200441c0066a41086a2903007c2054204d54ad7c20044190076a41086a2903007c2056205454ad7c2047205654ad7c420d86847c224b42ffffffffffffff03833703e046200420042903a006224920042903b0087c224d20042903f0067c225420042903c0077c225620042903a0097c2248204b42338820044180086a41086a29030020044190096a41086a2903007c200c204c54ad7c200441b0066a41086a2903007c203a200c54ad7c20044180076a41086a2903007c203b203a54ad7c200441d0076a41086a2903007c203c203b54ad7c204b203c54ad7c420d86847c220c42ffffffffffffff03833703e846200420042903e006224c20042903d0087c223a20042903b0077c223b20042903b0097c223c20042903c0087c224b200c423388200441a0066a41086a290300200441b0086a41086a2903007c204d204954ad7c200441f0066a41086a2903007c2054204d54ad7c200441c0076a41086a2903007c2056205454ad7c200441a0096a41086a2903007c2048205654ad7c200c204854ad7c420d86847c220c42ffffffffffffff03833703f0462004200c423388200441e0066a41086a290300200441d0086a41086a2903007c203a204c54ad7c200441b0076a41086a2903007c203b203a54ad7c200441b0096a41086a2903007c203c203b54ad7c200441c0086a41086a2903007c204b203c54ad7c200c204b54ad7c420d868442137e204a42ffffffffffffff03837c220c42ffffffffffffff03833703d0462004200c423388204742ffffffffffffff03837c3703d84620044190236a41086a290300215f200441a0206a41086a2903002160200429039023210c20042903a0202155200441c0246a41086a290300216120042903c0242157200441f0256a41086a290300216220042903f0252158200441c0216a41086a290300216320042903c021215920044180236a41086a2903002164200441b0206a41086a2903002165200429038023213a20042903b020215a200441b0246a41086a290300216620042903b024215b200441e0256a41086a290300216720042903e025215c200441d0216a41086a290300216820042903d021215d20042903a023213b200429039020214e20042903d024214f200429038026215120042903b0212153200441a0236a41086a290300216920044190206a41086a290300216a200441d0246a41086a290300216b20044180266a41086a290300216c200441b0216a41086a290300216d20042903b023213c200429038020214820042903e0242149200429039026214a20042903a021214c200441b0236a41086a290300216e20044180206a41086a290300216f200441e0246a41086a290300217020044190266a41086a2903002171200441a0216a41086a290300217220042903c023214b20042903f01f214d20042903f024215420042903a02621562004290390212147200441c0236a41086a2903002173200441f01f6a41086a2903002174200441f0246a41086a2903002175200441a0266a41086a290300217620044190216a41086a2903002177200441a8ca006a200441d0c6006a106b20042d00a84a410171106d2102200420042903b04d2278204720562054204b204d7c224d7c22547c22567c2247204c204a2049203c20487c22487c22497c224a7c224c20532051204f203b204e7c224e7c224f7c22517c2253205920582057200c20557c22557c22577c22587c2259205d205c205b203a205a7c225a7c225b7c225c7c225d423388206820672066206420657c205a203a54ad7c7c205b205a54ad7c7c205c205b54ad7c7c205d205c54ad7c420d86847c223a423388206320622061205f20607c2055200c54ad7c7c2057205554ad7c7c2058205754ad7c7c2059205854ad7c203a205954ad7c420d86847c2255423388206d206c206b2069206a7c204e203b54ad7c7c204f204e54ad7c7c2051204f54ad7c7c2053205154ad7c2055205354ad7c420d86847c223b423388207220712070206e206f7c2048203c54ad7c7c2049204854ad7c7c204a204954ad7c7c204c204a54ad7c203b204c54ad7c420d86847c223c423388207720762075207320747c204d204b54ad7c7c2054204d54ad7c7c2056205454ad7c7c2047205654ad7c203c204754ad7c420d868442137e205d42ffffffffffffff03837c224b42ffffffffffffff03838542002002ad42ff01837d220c832078853703b04d200420042903b84d224d204b423388203a42ffffffffffffff03837c85200c83204d853703b84d200420042903c04d223a205542ffffffffffffff038385200c83203a853703c04d200420042903c84d223a203b42ffffffffffffff038385200c83203a853703c84d200420042903d04d223a203c42ffffffffffffff038385200c83203a853703d04d20044190066a200f4200201820042903a01a225a20042903d0197c223a20042903f01a7c223b20042903c01b7c223c20042903901c7c224b20042903b01a225b20042903e0197c224d20042903801b7c225420042903d01b7c225620042903a01c7c224720042903c01a225c20042903f0197c224820042903901b7c224920042903e01b7c224a20042903b01c7c224c20042903d01a225d20042903801a7c224e20042903a01b7c224f20042903f01b7c225120042903c01c7c225320042903e01a225f20042903901a7c225520042903b01b7c225720042903801c7c225820042903d01c7c2259423388200441e01a6a41086a290300200441901a6a41086a2903007c2055205f54ad7c200441b01b6a41086a2903007c2057205554ad7c200441801c6a41086a2903007c2058205754ad7c200441d01c6a41086a2903007c2059205854ad7c420d86847c2255423388200441d01a6a41086a290300200441801a6a41086a2903007c204e205d54ad7c200441a01b6a41086a2903007c204f204e54ad7c200441f01b6a41086a2903007c2051204f54ad7c200441c01c6a41086a2903007c2053205154ad7c2055205354ad7c420d86847c224e423388200441c01a6a41086a290300200441f0196a41086a2903007c2048205c54ad7c200441901b6a41086a2903007c2049204854ad7c200441e01b6a41086a2903007c204a204954ad7c200441b01c6a41086a2903007c204c204a54ad7c204e204c54ad7c420d86847c2248423388200441b01a6a41086a290300200441e0196a41086a2903007c204d205b54ad7c200441801b6a41086a2903007c2054204d54ad7c200441d01b6a41086a2903007c2056205454ad7c200441a01c6a41086a2903007c2047205654ad7c2048204754ad7c420d86847c224d423388200441a01a6a41086a290300200441d0196a41086a2903007c203a205a54ad7c200441f01a6a41086a2903007c203b203a54ad7c200441c01b6a41086a2903007c203c203b54ad7c200441901c6a41086a2903007c204b203c54ad7c204d204b54ad7c420d868442137e205942ffffffffffffff03837c225442ffffffffffffff038385200c83201885223a420010e808200441d0036a201d204d42ffffffffffffff038385200c83201d85223b4200205e420010e808200441a0046a2020204842ffffffffffffff038385200c83202085223c42002050420010e808200441f0046a200a204e42ffffffffffffff038385200c83200a85224b42002022420010e808200441c0056a200b2054423388205542ffffffffffffff03837c85200c83200b85224d42002011420010e808200441b0056a204d4200200f420010e80820044180066a203a42002010420010e808200441c0036a203b42002050420010e80820044190046a203c42002022420010e808200441e0046a204b42002011420010e808200441d0046a204b4200200f420010e808200441a0056a204d42002010420010e808200441f0056a203a42002012420010e808200441b0036a203b42002022420010e80820044180046a203c42002011420010e808200441f0036a203c4200200f420010e808200441c0046a204b42002010420010e80820044190056a204d42002012420010e808200441e0056a203a42002039420010e808200441a0036a203b42002011420010e80820044190036a203b4200200f420010e808200441e0036a203c42002010420010e808200441b0046a204b42002012420010e80820044180056a204d42002039420010e808200441d0056a203a42002052420010e808200420042903b003225220042903f0057c220f2004290380047c221020042903d0047c221120042903a0057c221220042903c00322542004290380067c22222004290390047c223920042903e0047c223a20042903b0057c223b20042903d00322562004290390067c223c20042903a0047c224b20042903f0047c224d20042903c0057c2250423388200441d0036a41086a29030020044190066a41086a2903007c203c205654ad7c200441a0046a41086a2903007c204b203c54ad7c200441f0046a41086a2903007c204d204b54ad7c200441c0056a41086a2903007c2050204d54ad7c420d86847c223c423388200441c0036a41086a29030020044180066a41086a2903007c2022205454ad7c20044190046a41086a2903007c2039202254ad7c200441e0046a41086a2903007c203a203954ad7c200441b0056a41086a2903007c203b203a54ad7c203c203b54ad7c420d86847c222242ffffffffffffff03833703e046200420042903a003224d20042903e0057c223920042903f0037c223a20042903c0047c223b2004290390057c224b2022423388200441b0036a41086a290300200441f0056a41086a2903007c200f205254ad7c20044180046a41086a2903007c2010200f54ad7c200441d0046a41086a2903007c2011201054ad7c200441a0056a41086a2903007c2012201154ad7c2022201254ad7c420d86847c220f42ffffffffffffff03833703e8462004200429039003225220042903d0057c221020042903e0037c221120042903b0047c22122004290380057c2222200f423388200441a0036a41086a290300200441e0056a41086a2903007c2039204d54ad7c200441f0036a41086a2903007c203a203954ad7c200441c0046a41086a2903007c203b203a54ad7c20044190056a41086a2903007c204b203b54ad7c200f204b54ad7c420d86847c220f42ffffffffffffff03833703f0462004200f42338820044190036a41086a290300200441d0056a41086a2903007c2010205254ad7c200441e0036a41086a2903007c2011201054ad7c200441b0046a41086a2903007c2012201154ad7c20044180056a41086a2903007c2022201254ad7c200f202254ad7c420d868442137e205042ffffffffffffff03837c220f42ffffffffffffff03833703d0462004200f423388203c42ffffffffffffff03837c3703d846200441c0126a41086a290300215a200441d0106a41086a290300215b20042903c012211120042903d010214e200441a0136a41086a290300215c20042903a013214f20044180146a41086a290300215d2004290380142151200441a0116a41086a290300215e20042903a0112153200441d0126a41086a290300215f200441e0106a41086a290300216020042903d012211220042903e0102155200441b0136a41086a290300216120042903b013215720044190146a41086a29030021622004290390142158200441b0116a41086a290300216320042903b011215920042903b012212220042903c0102148200429039013214920042903f013214a200429039011214c200441b0126a41086a2903002164200441c0106a41086a290300216520044190136a41086a2903002166200441f0136a41086a290300216720044190116a41086a290300216820042903a012213920042903b0102152200429038013215420042903e01321562004290380112147200441a0126a41086a2903002169200441b0106a41086a290300216a20044180136a41086a290300216b200441e0136a41086a290300216c20044180116a41086a290300216d200429039012213a20042903a010214b20042903f012214d20042903d013215020042903f010216e20044190126a41086a290300216f200441a0106a41086a2903002170200441f0126a41086a2903002171200441d0136a41086a2903002172200441f0106a41086a2903002173200441a8ca006a200441d0c6006a106b20042d00a84a410171106d2102200420042903b04d221042f0ffffffffffff3f20042903d04d223b7d223c42338842137e42d0fdffffffffff3f20107d227442ffffffffffffff03837c8542002002ad42ff01837d220f8320108522103703b04d2004203b203b203c42ffffffffffffff038342f0ffffffffffff3f20042903c84d223c7d22754233887c85200f8385223b3703d04d20044180036a203e203b7d223e42338842137e204020107d224042ffffffffffffff03837c22104200201a206e2050204d203a204b7c223b7c224b7c224d7c2250204720562054203920527c22527c22547c22567c2247204c204a2049202220487c22487c22497c224a7c224c20532051204f2011204e7c224e7c224f7c22517c2253205920582057201220557c22557c22577c22587c2259423388206320622061205f20607c2055201254ad7c7c2057205554ad7c7c2058205754ad7c7c2059205854ad7c420d86847c2255423388205e205d205c205a205b7c204e201154ad7c7c204f204e54ad7c7c2051204f54ad7c7c2053205154ad7c2055205354ad7c420d86847c224e423388206820672066206420657c2048202254ad7c7c2049204854ad7c7c204a204954ad7c7c204c204a54ad7c204e204c54ad7c420d86847c2222423388206d206c206b2069206a7c2052203954ad7c7c2054205254ad7c7c2056205454ad7c7c2047205654ad7c2022204754ad7c420d86847c2212423388207320722071206f20707c203b203a54ad7c7c204b203b54ad7c7c204d204b54ad7c7c2050204d54ad7c2012205054ad7c420d868442137e205942ffffffffffffff03837c223a42ffffffffffffff038385200c83201a852211420010e808200420042903b84d221a42f0ffffffffffff3f201a7d223942ffffffffffffff038320744233887c85200f83201a85221a3703b84d200441c0006a201b201242ffffffffffffff038385200c83201b85221242002042201a7d223b42ffffffffffffff038320404233887c221a42137e420010e808200420042903c04d221b42f0ffffffffffff3f201b7d224b42ffffffffffffff038320394233887c85200f83201b8522393703c04d20044190016a201c202242ffffffffffffff038385200c83201c85221b4200204520397d222242ffffffffffffff0383203b4233887c221c42137e223b420010e8082004203c203c207542ffffffffffffff0383204b4233887c85200f838522393703c84d200441e0016a201e204e42ffffffffffffff038385200c83201e85220f4200204620397d221e42ffffffffffffff038320224233887c222242137e2239420010e808200441b0026a201f203a423388205542ffffffffffffff03837c85200c83201f85220c4200203e42ffffffffffffff0383201e4233887c221f42137e221e420010e808200441a0026a200c42002010420010e808200441f0026a20114200201a420010e808200441306a20124200203b420010e80820044180016a201b42002039420010e808200441d0016a200f4200201e420010e808200441c0016a200f42002010420010e80820044190026a200c4200201a420010e808200441e0026a20114200201c420010e808200441206a201242002039420010e808200441f0006a201b4200201e420010e808200441e0006a201b42002010420010e808200441b0016a200f4200201a420010e80820044180026a200c4200201c420010e808200441d0026a201142002022420010e808200441106a20124200201e420010e8082004201242002010420010e808200441d0006a201b4200201a420010e808200441a0016a200f4200201c420010e808200441f0016a200c42002022420010e808200441c0026a20114200201f420010e80820042004290300225620042903c0027c220c20042903507c220f20042903a0017c221020042903f0017c22112004290310224720042903d0027c221220042903607c221a20042903b0017c221b2004290380027c221c2004290320224820042903e0027c221e20042903707c221f20042903c0017c22222004290390027c22392004290330224920042903f0027c223a2004290380017c223b20042903d0017c223c20042903a0027c224b2004290340224a2004290380037c224d2004290390017c225020042903e0017c225220042903b0027c2254423388200441c0006a41086a29030020044180036a41086a2903007c204d204a54ad7c20044190016a41086a2903007c2050204d54ad7c200441e0016a41086a2903007c2052205054ad7c200441b0026a41086a2903007c2054205254ad7c420d86847c224d423388200441306a41086a290300200441f0026a41086a2903007c203a204954ad7c20044180016a41086a2903007c203b203a54ad7c200441d0016a41086a2903007c203c203b54ad7c200441a0026a41086a2903007c204b203c54ad7c204d204b54ad7c420d86847c223a423388200441206a41086a290300200441e0026a41086a2903007c201e204854ad7c200441f0006a41086a2903007c201f201e54ad7c200441c0016a41086a2903007c2022201f54ad7c20044190026a41086a2903007c2039202254ad7c203a203954ad7c420d86847c221e423388200441106a41086a290300200441d0026a41086a2903007c2012204754ad7c200441e0006a41086a2903007c201a201254ad7c200441b0016a41086a2903007c201b201a54ad7c20044180026a41086a2903007c201c201b54ad7c201e201c54ad7c420d86847c2212423388200441086a290300200441c0026a41086a2903007c200c205654ad7c200441d0006a41086a2903007c200f200c54ad7c200441a0016a41086a2903007c2010200f54ad7c200441f0016a41086a2903007c2011201054ad7c2012201154ad7c420d868442137e205442ffffffffffffff03837c220c42ffffffffffffff0383220f3703d0462004200c423388204d42ffffffffffffff03837c22103703d8462004201242ffffffffffffff038322113703f0462004201e42ffffffffffffff038322123703e8462004203a42ffffffffffffff0383221a3703e046200441a8ca006a200441d0c6006a106b2004201142f0ffffffffffff3f20117d221b42ffffffffffffff038342f0ffffffffffff3f20127d221c4233887c85420020042d00a84a410171106dad42ff01837d220c832011853703f04620042012201c42ffffffffffffff038342f0ffffffffffff3f201a7d22114233887c85200c832012853703e8462004201a201142ffffffffffffff038342f0ffffffffffff3f20107d22114233887c85200c83201a853703e04620042010201142ffffffffffffff038342d0fdffffffffff3f200f7d22114233887c85200c832010853703d8462004200f201b42338842137e201142ffffffffffffff03837c85200c83200f853703d046200441e0c4006a200441d0c6006a106b41002102034020044180c5006a20026a41003a0000200241016a220241c801470d000b20044188c9006a41186a2203200141186a29000037030020044188c9006a41106a2205200141106a29000037030020044188c9006a41086a2206200141086a2900003703002004200129000037038849200441d0c6006a20044188c9006a10f401200441d0c6006a41086a290300210c200441d0c6006a41106a290300210f200441d0c6006a41186a2903002110200441d0c6006a41206a290300211a200441f8c6006a290300211b20044180c7006a290300211120044188c7006a290300211220044190c7006a290300211c20044198c7006a290300211e200441a0c7006a290300211f20042802d446210120042802d046210220044180c5006a200441a8c7006a41f00010e9081a0240024020024101460d00200441f0ca006a20044180c5006a41f00010e9081a2004200f200c4233887c22224233882022200f54ad420d8684223a20107c223942ffffffffffffff03833703b048200420394233882039203a54ad420d8684223a201a7c223942ffffffffffffff03833703b848200420394233882039203a54ad420d8684223a201b7c223942ffffffffffffff03833703c048200420394233882039203a54ad420d868442137e200c42ffffffffffffff03837c223942ffffffffffffff03833703a04820042039423388202242ffffffffffffff03837c3703a84820044188c9006a41206a4200370300200342003703002005420037030020064200370300200442003703884920044180c5006a41206a420037030020044180c5006a41186a420037030020044180c5006a41106a420037030020044180c5006a41086a420037030020044200370380452004201220114233887c22224233882022201254ad420d8684223a201c7c22394233882039203a54ad420d8684223b201e7c223a423388203a203b54ad420d8684223c201f7c223b42ffffffffffffff03833703f0462004203a42ffffffffffffff03833703e8462004203942ffffffffffffff03833703e0462004203b423388203b203c54ad420d868442137e201142ffffffffffffff03837c2239423388202242ffffffffffffff03837c3703d8462004203942ffffffffffffff03833703d0460240200441a0c8006a20044188c9006a106c20044180c5006a200441d0c6006a106c72106d41ff01714101470d0020004101360200200041013a00040c020b200041a0016a201937030020004198016a201637030020004190016a201337030020004188016a200e37030020004180016a200d370300200041f8006a203d370300200041f0006a2043370300200041e8006a2044370300200041e0006a2041370300200041d8006a203f370300200041d0006a2023370300200041c8006a2021370300200041c0006a2017370300200041386a2015370300200041306a2014370300200041286a201d370300200041206a2020370300200041186a200a370300200041106a200b370300200041086a201837030020004190026a201f37030020004188026a201e37030020004180026a201c370300200041f8016a2012370300200041f0016a2011370300200041e8016a201b370300200041e0016a201a370300200041d8016a2010370300200041d0016a200f370300200041c8016a200c370300200041c0016a200441e0c4006a41186a290300370300200041b8016a200441e0c4006a41106a290300370300200041b0016a200441e0c4006a41086a290300370300200041a8016a20042903e04437030020004198026a200441f0ca006a41f00010e9081a200041003602000c010b2000200136020420004101360200200041186a20103e0200200041106a200f370200200041086a200c3702000b200441d0ce006a24000bbd6603047f237e067f230041d01f6b22022400200241801c6a20011070200241a81c6a200241801c6a106b41002103410121040340200120036a2d0000200241a81c6a20036a2d0000732205410020056b72417f7341800171410776106d2004712104200341016a22034120470d000b2004106d2103200241881f6a200241801c6a106b20022d00881f410171106d210402400240024002400240200341ff0171450d00200441ff01714101470d010b200241b81e6a21030c010b200241c81c6a200241801c6a4101106e200242f0ffffffffffff3f20022903e81c7d220642ffffffffffffff038342f0ffffffffffff3f20022903e01c7d22074233887c3703901d2002200742ffffffffffffff038342f0ffffffffffff3f20022903d81c22077d22084233887c3703881d2002200842ffffffffffffff038342f0ffffffffffff3f20022903d01c22087d22094233887c3703801d2002200942ffffffffffffff038342d1fdffffffffff3f20022903c81c22097d220a4233887c3703f81c2002200642338842137e200a42ffffffffffffff03837c3703f01c200242003703b01d200242003703b81d2002200942017c3703981d200220083703a01d200220073703a81d200220022903e01c3703b01d200220022903b81d20022903e81c7c3703b81d200241c01d6a200241981d6a4101106e200241b81e6a200241f01c6a4101106e200241f8156a20022903b81e2206420042ca8e9ae5dec6ac02420010e808200241f8186a20022903c01e220742137e4200428092f58893f9b701420010e808200241a8186a20022903c81e220842137e220b420042c486ffe299c731420010e808200241d8176a20022903d01e220a42137e220c420042d6fff8ffd98b8601420010e80820024188176a20022903d81e220d42137e2209420042c2a2aaa7fcfa9503420010e80820024188166a2006420042c2a2aaa7fcfa9503420010e808200241e8186a2007420042ca8e9ae5dec6ac02420010e80820024198186a200b4200428092f58893f9b701420010e808200241c8176a200c420042c486ffe299c731420010e808200241f8166a2009420042d6fff8ffd98b8601420010e80820024198166a2006420042d6fff8ffd98b8601420010e808200241d8186a2007420042c2a2aaa7fcfa9503420010e80820024188186a2008420042ca8e9ae5dec6ac02420010e808200241b8176a200c4200428092f58893f9b701420010e808200241e8166a2009420042c486ffe299c731420010e808200241a8166a2006420042c486ffe299c731420010e808200241c8186a2007420042d6fff8ffd98b8601420010e808200241f8176a2008420042c2a2aaa7fcfa9503420010e808200241a8176a200a420042ca8e9ae5dec6ac02420010e808200241d8166a20094200428092f58893f9b701420010e808200241b8166a20064200428092f58893f9b701420010e808200241b8186a2007420042c486ffe299c731420010e808200241e8176a2008420042d6fff8ffd98b8601420010e80820024198176a200a420042c2a2aaa7fcfa9503420010e808200241c8166a200d420042ca8e9ae5dec6ac02420010e808200241f8136a20022903c01d2208420020022903b816220e20022903c8167c220620022903b8187c220720022903e8177c22092002290398177c220a20022903d816220f20022903a8177c220c20022903a8167c220b20022903c8187c220d20022903f8177c221020022903b81722112002290388187c221220022903e8167c22132002290398167c221420022903d8187c2215200229039818221620022903e8187c221720022903c8177c221820022903f8167c22192002290388167c221a20022903f818221b20022903f8157c221c20022903a8187c221d20022903d8177c221e2002290388177c221f423388200241f8186a41086a290300200241f8156a41086a2903007c201c201b54ad7c200241a8186a41086a2903007c201d201c54ad7c200241d8176a41086a2903007c201e201d54ad7c20024188176a41086a2903007c201f201e54ad7c420d86847c221c42338820024198186a41086a290300200241e8186a41086a2903007c2017201654ad7c200241c8176a41086a2903007c2018201754ad7c200241f8166a41086a2903007c2019201854ad7c20024188166a41086a2903007c201a201954ad7c201c201a54ad7c420d86847c2218423388200241b8176a41086a29030020024188186a41086a2903007c2012201154ad7c200241e8166a41086a2903007c2013201254ad7c20024198166a41086a2903007c2014201354ad7c200241d8186a41086a2903007c2015201454ad7c2018201554ad7c420d86847c2212423388200241d8166a41086a290300200241a8176a41086a2903007c200c200f54ad7c200241a8166a41086a2903007c200b200c54ad7c200241c8186a41086a2903007c200d200b54ad7c200241f8176a41086a2903007c2010200d54ad7c2012201054ad7c420d86847c220c42ffffffffffffff038320022903e01d220d7d42f0ffffffffffff3f7c220b42338842137e200c423388200241b8166a41086a290300200241c8166a41086a2903007c2006200e54ad7c200241b8186a41086a2903007c2007200654ad7c200241e8176a41086a2903007c2009200754ad7c20024198176a41086a2903007c200a200954ad7c200c200a54ad7c420d868442137e201f42feffffffffffff03837c220742ffffffffffffff038320087d42d0fdffffffffff3f7c221342ffffffffffffff03837c2206420010e808200241e8156a200b42ffffffffffffff0383201242ffffffffffffff038320022903d81d220c7d42f0ffffffffffff3f7c220a4233887c2217420020022903c81d220942137e420010e80820024198156a200a42ffffffffffffff0383201842ffffffffffffff038320022903d01d220a7d42f0ffffffffffff3f7c220b4233887c22144200200a42137e2215420010e808200241c8146a200b42ffffffffffffff03832007423388201c42ffffffffffffff03837c20097d42f0ffffffffffff3f7c22074233887c22124200200c42137e2210420010e808200241a8136a200742ffffffffffffff038320134233887c22074200200d42137e220b420010e80820024198136a200742002008420010e808200241e8136a200642002009420010e808200241d8156a201742002015420010e80820024188156a201442002010420010e808200241b8146a20124200200b420010e808200241a8146a201242002008420010e80820024188136a200742002009420010e808200241d8136a20064200200a420010e808200241c8156a201742002010420010e808200241f8146a20144200200b420010e808200241e8146a201442002008420010e80820024198146a201242002009420010e808200241f8126a20074200200a420010e808200241c8136a20064200200c420010e808200241b8156a20174200200b420010e808200241a8156a201742002008420010e808200241d8146a201442002009420010e80820024188146a20124200200a420010e808200241e8126a20074200200c420010e808200241b8136a20064200200d420010e808200220022903c815221c20022903d8137c220820022903f8147c220920022903a8147c220a2002290388137c220c20022903d815221d20022903e8137c220b2002290388157c220d20022903b8147c22102002290398137c221320022903e815221e20022903f8137c22152002290398157c221820022903c8147c221920022903a8137c221a423388200241e8156a41086a290300200241f8136a41086a2903007c2015201e54ad7c20024198156a41086a2903007c2018201554ad7c200241c8146a41086a2903007c2019201854ad7c200241a8136a41086a2903007c201a201954ad7c420d86847c2215423388200241d8156a41086a290300200241e8136a41086a2903007c200b201d54ad7c20024188156a41086a2903007c200d200b54ad7c200241b8146a41086a2903007c2010200d54ad7c20024198136a41086a2903007c2013201054ad7c2015201354ad7c420d86847c220b42ffffffffffffff03833703a01e200220022903b815221920022903c8137c220d20022903e8147c22102002290398147c221320022903f8127c2218200b423388200241c8156a41086a290300200241d8136a41086a2903007c2008201c54ad7c200241f8146a41086a2903007c2009200854ad7c200241a8146a41086a2903007c200a200954ad7c20024188136a41086a2903007c200c200a54ad7c200b200c54ad7c420d86847c220842ffffffffffffff03833703a81e200220022903a815221c20022903b8137c220920022903d8147c220a2002290388147c220c20022903e8127c220b2008423388200241b8156a41086a290300200241c8136a41086a2903007c200d201954ad7c200241e8146a41086a2903007c2010200d54ad7c20024198146a41086a2903007c2013201054ad7c200241f8126a41086a2903007c2018201354ad7c2008201854ad7c420d86847c220842ffffffffffffff03833703b01e20022008423388200241a8156a41086a290300200241b8136a41086a2903007c2009201c54ad7c200241d8146a41086a2903007c200a200954ad7c20024188146a41086a2903007c200c200a54ad7c200241e8126a41086a2903007c200b200c54ad7c2008200b54ad7c420d868442137e201a42ffffffffffffff03837c220842ffffffffffffff03833703901e20022008423388201542ffffffffffffff03837c3703981e200241a81f6a41106a4200370300200241a81f6a41186a4200370300200241a81f6a41206a4200370300200242003703b01f200242013703a81f200241b81e6a200241a81f6a200241901e6a106f20024198126a20022903981d220d420020022903c01e2208420010e808200241d80f6a200241e01e6a2903002209420020022903a01d221042137e420010e808200241b8106a200241b81e6a41206a2203290300220a420020022903a81d221342137e221a420010e80820024198116a200241b81e6a41186a2204290300220c420020022903b01d221842137e2219420010e808200241f8116a200241b81e6a41106a2205290300220b420020022903b81d221c42137e2215420010e808200241d8126a200b4200200d420010e80820024198106a200842002010420010e808200241a8106a20094200201a420010e80820024188116a200a42002019420010e808200241e8116a200c42002015420010e808200241c8126a200c4200200d420010e80820024188106a200b42002010420010e808200241e8106a200842002013420010e808200241f8106a200942002019420010e808200241d8116a200a42002015420010e808200241b8126a200a4200200d420010e808200241f80f6a200c42002010420010e808200241d8106a200b42002013420010e808200241b8116a200842002018420010e808200241c8116a200942002015420010e808200241a8126a20094200200d420010e808200241e80f6a200a42002010420010e808200241c8106a200c42002013420010e808200241a8116a200b42002018420010e80820024188126a20084200201c420010e808200241980d6a2006420020022903a81222202002290388127c220d20022903e80f7c221020022903c8107c221320022903a8117c221520022903c811222120022903b8117c221820022903b8127c221920022903f80f7c221a20022903d8107c221c20022903f810222220022903e8107c221d20022903d8117c221e20022903c8127c221f2002290388107c220e20022903a81022232002290398107c220f2002290388117c221120022903e8117c221620022903d8127c221b20022903d80f22242002290398127c222520022903b8107c22262002290398117c222720022903f8117c2228423388200241d80f6a41086a29030020024198126a41086a2903007c2025202454ad7c200241b8106a41086a2903007c2026202554ad7c20024198116a41086a2903007c2027202654ad7c200241f8116a41086a2903007c2028202754ad7c420d86847c2225423388200241a8106a41086a29030020024198106a41086a2903007c200f202354ad7c20024188116a41086a2903007c2011200f54ad7c200241e8116a41086a2903007c2016201154ad7c200241d8126a41086a2903007c201b201654ad7c2025201b54ad7c420d86847c220f423388200241f8106a41086a290300200241e8106a41086a2903007c201d202254ad7c200241d8116a41086a2903007c201e201d54ad7c200241c8126a41086a2903007c201f201e54ad7c20024188106a41086a2903007c200e201f54ad7c200f200e54ad7c420d86847c221d423388200241c8116a41086a290300200241b8116a41086a2903007c2018202154ad7c200241b8126a41086a2903007c2019201854ad7c200241f80f6a41086a2903007c201a201954ad7c200241d8106a41086a2903007c201c201a54ad7c201d201c54ad7c420d86847c2218423388200241a8126a41086a29030020024188126a41086a2903007c200d202054ad7c200241e80f6a41086a2903007c2010200d54ad7c200241c8106a41086a2903007c2013201054ad7c200241a8116a41086a2903007c2015201354ad7c2018201554ad7c420d868442137e202842ffffffffffffff03837c221042ffffffffffffff0383220d420010e808200241b8096a201842ffffffffffffff038322184200200742137e420010e808200241c80e6a201d42ffffffffffffff038322154200201242137e221c420010e808200241f80d6a200f42ffffffffffffff038322134200201442137e221a420010e808200241e80d6a2010423388202542ffffffffffffff03837c22104200201742137e2219420010e808200241d80d6a201042002006420010e808200241880d6a200d42002007420010e808200241980f6a20184200201c420010e808200241d80e6a20154200201a420010e808200241880e6a201342002019420010e808200241980e6a201342002006420010e808200241c80d6a201042002007420010e808200241f80c6a200d42002012420010e808200241a80f6a20184200201a420010e808200241e80e6a201542002019420010e808200241f80e6a201542002006420010e808200241a80e6a201342002007420010e808200241b80d6a201042002012420010e808200241e80c6a200d42002014420010e808200241b80f6a201842002019420010e808200241c80f6a201842002006420010e808200241880f6a201542002007420010e808200241b80e6a201342002012420010e808200241a80d6a201042002014420010e808200241d80c6a200d42002017420010e808200241e8066a20022903c80f222020022903d80c7c220620022903880f7c220720022903b80e7c221220022903a80d7c221420022903b80f222120022903e80c7c221720022903f80e7c221920022903a80e7c221a20022903b80d7c221c20022903a80f222220022903f80c7c221d20022903e80e7c221e20022903980e7c221f20022903c80d7c220e20022903980f222320022903880d7c220f20022903d80e7c221120022903880e7c221620022903d80d7c221b20022903b809222420022903980d7c222520022903c80e7c222620022903f80d7c222720022903e80d7c2228423388200241b8096a41086a290300200241980d6a41086a2903007c2025202454ad7c200241c80e6a41086a2903007c2026202554ad7c200241f80d6a41086a2903007c2027202654ad7c200241e80d6a41086a2903007c2028202754ad7c420d86847c2225423388200241980f6a41086a290300200241880d6a41086a2903007c200f202354ad7c200241d80e6a41086a2903007c2011200f54ad7c200241880e6a41086a2903007c2016201154ad7c200241d80d6a41086a2903007c201b201654ad7c2025201b54ad7c420d86847c220f423388200241a80f6a41086a290300200241f80c6a41086a2903007c201d202254ad7c200241e80e6a41086a2903007c201e201d54ad7c200241980e6a41086a2903007c201f201e54ad7c200241c80d6a41086a2903007c200e201f54ad7c200f200e54ad7c420d86847c221d423388200241b80f6a41086a290300200241e80c6a41086a2903007c2017202154ad7c200241f80e6a41086a2903007c2019201754ad7c200241a80e6a41086a2903007c201a201954ad7c200241b80d6a41086a2903007c201c201a54ad7c201d201c54ad7c420d86847c2217423388200241c80f6a41086a290300200241d80c6a41086a2903007c2006202054ad7c200241880f6a41086a2903007c2007200654ad7c200241b80e6a41086a2903007c2012200754ad7c200241a80d6a41086a2903007c2014201254ad7c2017201454ad7c420d868442137e202842ffffffffffffff03837c220742ffffffffffffff0383220642002008420010e808200241b8076a200942002007423388202542ffffffffffffff03837c220742137e420010e808200241d8076a200a4200200f42ffffffffffffff0383221242137e221c420010e80820024188086a200c4200201d42ffffffffffffff0383221942137e221a420010e808200241c8086a200b4200201742ffffffffffffff0383221742137e2214420010e808200241d8066a200b42002006420010e808200241a8076a200842002007420010e808200241c8076a20094200201c420010e808200241f8076a200a4200201a420010e808200241b8086a200c42002014420010e808200241c8066a200c42002006420010e80820024198076a200b42002007420010e808200241d8086a200842002012420010e808200241e8076a20094200201a420010e808200241a8086a200a42002014420010e808200241e8056a200a42002006420010e80820024188076a200c42002007420010e808200241e8086a200b42002012420010e80820024188096a200842002019420010e80820024198086a200942002014420010e80820024188056a200942002006420010e808200241f8066a200a42002007420010e808200241f8086a200c42002012420010e80820024198096a200b42002019420010e808200241a8096a200842002017420010e80820022d00b81e21292003200241801c6a41206a222a2903003703002004200241801c6a41186a222b2903003703002005200241801c6a41106a222c2903002208370300200241b81e6a41086a222d200241801c6a41086a222e2903002207370300200220022903801c22063703b81e2002200620022903801c7c22063703b81e202d2007202e2903007c220737030020052008202c2903007c220837030020042004290300202b2903007c220937030020032003290300202a2903007c220a370300200241880c6a200d42002006420010e808200241880a6a200a4200201042137e420010e808200241980a6a20094200201342137e2212420010e808200241e80a6a20084200201542137e220b420010e808200241b80b6a20074200201842137e220c420010e808200241c80b6a20074200200d420010e808200241980c6a200642002010420010e808200241f8096a200a42002012420010e808200241a80a6a20094200200b420010e808200241f80a6a20084200200c420010e808200241880b6a20084200200d420010e808200241d80b6a200742002010420010e808200241a80c6a200642002013420010e808200241e8096a200a4200200b420010e808200241b80a6a20094200200c420010e808200241c80a6a20094200200d420010e808200241980b6a200842002010420010e808200241e80b6a200742002013420010e808200241b80c6a200642002015420010e808200241d8096a200a4200200c420010e808200241c8096a200a4200200d420010e808200241d80a6a200942002010420010e808200241a80b6a200842002013420010e808200241f80b6a200742002015420010e808200241c80c6a200642002018420010e808200220022903c809221f20022903c80c7c220620022903d80a7c220720022903a80b7c220820022903f80b7c220920022903d809220e20022903b80c7c220a20022903c80a7c220c20022903980b7c220b20022903e80b7c220d20022903e809220f20022903a80c7c221020022903b80a7c221220022903880b7c221320022903d80b7c221420022903f809221120022903980c7c221520022903a80a7c221720022903f80a7c221820022903c80b7c221920022903880a221620022903880c7c221a20022903980a7c221c20022903e80a7c221d20022903b80b7c221e423388200241880a6a41086a290300200241880c6a41086a2903007c201a201654ad7c200241980a6a41086a2903007c201c201a54ad7c200241e80a6a41086a2903007c201d201c54ad7c200241b80b6a41086a2903007c201e201d54ad7c420d86847c221a423388200241f8096a41086a290300200241980c6a41086a2903007c2015201154ad7c200241a80a6a41086a2903007c2017201554ad7c200241f80a6a41086a2903007c2018201754ad7c200241c80b6a41086a2903007c2019201854ad7c201a201954ad7c420d86847c2215423388200241e8096a41086a290300200241a80c6a41086a2903007c2010200f54ad7c200241b80a6a41086a2903007c2012201054ad7c200241880b6a41086a2903007c2013201254ad7c200241d80b6a41086a2903007c2014201354ad7c2015201454ad7c420d86847c2210423388200241d8096a41086a290300200241b80c6a41086a2903007c200a200e54ad7c200241c80a6a41086a2903007c200c200a54ad7c200241980b6a41086a2903007c200b200c54ad7c200241e80b6a41086a2903007c200d200b54ad7c2010200d54ad7c420d86847c220a423388200241c8096a41086a290300200241c80c6a41086a2903007c2006201f54ad7c200241d80a6a41086a2903007c2007200654ad7c200241a80b6a41086a2903007c2008200754ad7c200241f80b6a41086a2903007c2009200854ad7c200a200954ad7c420d868442137e201e42ffffffffffffff03837c220642ffffffffffffff03833703e81d20022006423388201a42ffffffffffffff03837c3703f01d2002200a42ffffffffffffff038322063703881e2002201042ffffffffffffff038322073703801e2002201542ffffffffffffff0383220c3703f81d200241881f6a200241e81d6a106b2002200642f0ffffffffffff3f20067d220942ffffffffffffff038342f0ffffffffffff3f20077d22084233887c85420020022d00881f410171106dad42ff01837d220a8320068522063703881e20022007200842ffffffffffffff038342f0ffffffffffff3f200c7d220b4233887c85200a8320078522073703801e200220022903e81d2208200942338842137e42d0fdffffffffff3f20087d220d42ffffffffffffff03837c85200a8320088522083703e81d200220022903f01d220942f0ffffffffffff3f20097d221042ffffffffffffff0383200d4233887c85200a8320098522093703f01d2002200c200b42ffffffffffffff038320104233887c85200a83200c85220a3703f81d20024198046a200229038805221b20022903a8097c220c20022903f8067c220b20022903f8087c220d2002290398097c221020022903980822252002290388097c221220022903e8057c22132002290388077c221420022903e8087c221520022903e807222620022903d8087c221720022903a8087c221820022903c8067c22192002290398077c221a20022903c807222720022903a8077c221c20022903f8077c221d20022903b8087c221e20022903d8067c221f20022903b807222820022903e8067c220e20022903d8077c220f2002290388087c221120022903c8087c2216423388200241b8076a41086a290300200241e8066a41086a2903007c200e202854ad7c200241d8076a41086a2903007c200f200e54ad7c20024188086a41086a2903007c2011200f54ad7c200241c8086a41086a2903007c2016201154ad7c420d86847c220e423388200241c8076a41086a290300200241a8076a41086a2903007c201c202754ad7c200241f8076a41086a2903007c201d201c54ad7c200241b8086a41086a2903007c201e201d54ad7c200241d8066a41086a2903007c201f201e54ad7c200e201f54ad7c420d86847c221c423388200241e8076a41086a290300200241d8086a41086a2903007c2017202654ad7c200241a8086a41086a2903007c2018201754ad7c200241c8066a41086a2903007c2019201854ad7c20024198076a41086a2903007c201a201954ad7c201c201a54ad7c420d86847c221742338820024198086a41086a29030020024188096a41086a2903007c2012202554ad7c200241e8056a41086a2903007c2013201254ad7c20024188076a41086a2903007c2014201354ad7c200241e8086a41086a2903007c2015201454ad7c2017201554ad7c420d86847c221842338820024188056a41086a290300200241a8096a41086a2903007c200c201b54ad7c200241f8066a41086a2903007c200b200c54ad7c200241f8086a41086a2903007c200d200b54ad7c20024198096a41086a2903007c2010200d54ad7c2018201054ad7c420d868442137e201642ffffffffffffff03837c221042ffffffffffffff0383220c420020022903f01c220b420010e808200241e8046a20022903901d220d42002010423388200e42ffffffffffffff03837c221042137e420010e80820024188066a20022903881d22124200201c42ffffffffffffff0383221542137e221c420010e808200241b8056a20022903801d22134200201742ffffffffffffff0383221942137e221a420010e808200241c8036a20022903f81c22144200201842ffffffffffffff0383221842137e2217420010e80820024188046a20144200200c420010e808200241d8046a200b42002010420010e808200241f8056a200d4200201c420010e808200241a8056a20124200201a420010e808200241b8036a201342002017420010e808200241f8036a20134200200c420010e808200241c8046a201442002010420010e80820024198066a200b42002015420010e80820024198056a200d4200201a420010e808200241a8036a201242002017420010e808200241e8036a20124200200c420010e808200241b8046a201342002010420010e808200241a8066a201442002015420010e808200241c8056a200b42002019420010e808200241c8026a200d42002017420010e808200241d8036a200d4200200c420010e808200241a8046a201242002010420010e808200241b8066a201342002015420010e808200241d8056a201442002019420010e808200241f8046a200b42002018420010e8082002200229039805221c2002290398067c220c20022903a8037c220b20022903f8037c221020022903c8047c221220022903f805221d20022903d8047c220d20022903a8057c221320022903b8037c22142002290388047c221520022903e804221e2002290398047c22172002290388067c221820022903b8057c221920022903c8037c221a423388200241e8046a41086a29030020024198046a41086a2903007c2017201e54ad7c20024188066a41086a2903007c2018201754ad7c200241b8056a41086a2903007c2019201854ad7c200241c8036a41086a2903007c201a201954ad7c420d86847c2217423388200241f8056a41086a290300200241d8046a41086a2903007c200d201d54ad7c200241a8056a41086a2903007c2013200d54ad7c200241b8036a41086a2903007c2014201354ad7c20024188046a41086a2903007c2015201454ad7c2017201554ad7c420d86847c221342ffffffffffffff0383220d3703a01e200220022903c802221d20022903c8057c221420022903e8037c221520022903b8047c221820022903a8067c2219201342338820024198056a41086a29030020024198066a41086a2903007c200c201c54ad7c200241a8036a41086a2903007c200b200c54ad7c200241f8036a41086a2903007c2010200b54ad7c200241c8046a41086a2903007c2012201054ad7c2013201254ad7c420d86847c220c42ffffffffffffff038322103703a81e200220022903d803221e20022903f8047c220b20022903a8047c221220022903b8067c221320022903d8057c221c200c423388200241c8026a41086a290300200241c8056a41086a2903007c2014201d54ad7c200241e8036a41086a2903007c2015201454ad7c200241b8046a41086a2903007c2018201554ad7c200241a8066a41086a2903007c2019201854ad7c200c201954ad7c420d86847c220c42ffffffffffffff038322143703b01e2002200c423388200241d8036a41086a290300200241f8046a41086a2903007c200b201e54ad7c200241a8046a41086a2903007c2012200b54ad7c200241b8066a41086a2903007c2013201254ad7c200241d8056a41086a2903007c201c201354ad7c200c201c54ad7c420d868442137e201a42ffffffffffffff03837c220b42ffffffffffffff0383220c3703901e2002200b423388201742ffffffffffffff03837c220b3703981e20024188016a200c42002008420010e808200241d8016a20064200200b42137e420010e808200241e8026a20074200200d42137e2215420010e80820024188026a200a4200201042137e2213420010e808200241386a20094200201442137e2212420010e808200241f8006a20094200200c420010e808200241c8016a20084200200b420010e808200241d8026a200642002015420010e808200241f8016a200742002013420010e808200241286a200a42002012420010e808200241e8006a200a4200200c420010e808200241b8016a20094200200b420010e808200241f8026a20084200200d420010e808200241e8016a200642002013420010e808200241186a200742002012420010e808200241d8006a20074200200c420010e808200241a8016a200a4200200b420010e80820024188036a20094200200d420010e80820024198026a200842002010420010e808200241086a200642002012420010e808200241c8006a20064200200c420010e80820024198016a20074200200b420010e80820024198036a200a4200200d420010e808200241a8026a200942002010420010e808200241b8026a200842002014420010e808200220022903e801221520022903f8027c220620022903187c220720022903687c220820022903b8017c220920022903d802221720022903c8017c220a20022903f8017c220c20022903287c220b20022903787c220d20022903d80122182002290388017c221020022903e8027c22122002290388027c221320022903387c2214423388200241d8016a41086a29030020024188016a41086a2903007c2010201854ad7c200241e8026a41086a2903007c2012201054ad7c20024188026a41086a2903007c2013201254ad7c200241386a41086a2903007c2014201354ad7c420d86847c2210423388200241d8026a41086a290300200241c8016a41086a2903007c200a201754ad7c200241f8016a41086a2903007c200c200a54ad7c200241286a41086a2903007c200b200c54ad7c200241f8006a41086a2903007c200d200b54ad7c2010200d54ad7c420d86847c220a42ffffffffffffff03833703b81f2002200229030822132002290398027c220c20022903587c220b20022903a8017c220d2002290388037c2212200a423388200241e8016a41086a290300200241f8026a41086a2903007c2006201554ad7c200241186a41086a2903007c2007200654ad7c200241e8006a41086a2903007c2008200754ad7c200241b8016a41086a2903007c2009200854ad7c200a200954ad7c420d86847c220642ffffffffffffff03833703c01f20022002290348221520022903b8027c22072002290398017c22082002290398037c220920022903a8027c220a2006423388200241086a41086a29030020024198026a41086a2903007c200c201354ad7c200241d8006a41086a2903007c200b200c54ad7c200241a8016a41086a2903007c200d200b54ad7c20024188036a41086a2903007c2012200d54ad7c2006201254ad7c420d86847c220642ffffffffffffff03833703c81f20022006423388200241c8006a41086a290300200241b8026a41086a2903007c2007201554ad7c20024198016a41086a2903007c2008200754ad7c20024198036a41086a2903007c2009200854ad7c200241a8026a41086a2903007c200a200954ad7c2006200a54ad7c420d868442137e201442ffffffffffffff03837c220642ffffffffffffff03833703a81f20022006423388201042ffffffffffffff03837c3703b01f4200210602402029450d00200241881f6a200241a81f6a106b4200210620022d00881f410171106d41ff01714101460d00200241d01e6a4200370300200241c81e6a4200370300200241c01e6a4200370300200242003703b81e200241881f6a200241901e6a106b200241b81e6a4101722129410021054100210341012104024003402005200241881f6a20036a2d0000732205410020056b72417f7341800171410776106d20047121042003411f460d01202920036a2d00002105200341016a21030c000b0b420021062004106d41ff01714101460d00200241b81e6a41206a200241e81d6a41206a290300370300200241b81e6a41186a200241e81d6a41186a290300370300200241b81e6a41106a200241e81d6a41106a290300370300200241b81e6a41086a200241e81d6a41086a290300370300200241e81e6a200241901e6a41086a290300370300200241f01e6a200241901e6a41106a290300370300200241f81e6a200241901e6a41186a290300370300200241801f6a200241901e6a41206a290300370300200220022903e81d3703b81e200220022903901e3703e01e200241881b6a41206a200241a81f6a41206a290300370300200241881b6a41186a200241a81f6a41186a290300370300200241881b6a41106a200241a81f6a41106a290300370300200241881b6a41086a200241a81f6a41086a290300370300200220022903a81f3703881b200241b01b6a200241b81e6a41d00010e9081a420121060b200241b81e6a210320064200520d010b200241b01a6a410f6a2003410f6a290000370000200241b01a6a41086a200341086a290000370300200220032900003703b01a200241b5196a200241b01a6a41d30010e9081a41012103200041013a0004200020022900b5193700052000410d6a200241b5196a41086a290000370000200041146a200241b5196a410f6a2900003700000c010b200241b01a6a41036a200241b01b6a41d00010e9081a200241881a6a41206a2203200241881b6a41206a290300370300200241881a6a41186a2204200241881b6a41186a290300370300200241881a6a41106a2205200241881b6a41106a290300370300200241881a6a41086a2229200241881b6a41086a290300370300200220022903881b3703881a200241b5196a200241b01a6a41d30010e9081a20024188196a41206a222a200329030037030020024188196a41186a2203200429030037030020024188196a41106a2204200529030037030020024188196a41086a22052029290300370300200220022903881a37038819200041086a200241b5196a41036a41d00010e9081a200041e0006a4200370300200041d8006a4201370300200041e8006a4200370300200041f0006a4200370300200041f8006a420037030020004180016a20022903881937000020004188016a200529030037000020004190016a200429030037000020004198016a2003290300370000200041a0016a202a290300370000200041a8016a2001290000370000200041b0016a200141086a290000370000200041b8016a200141106a290000370000200041c0016a200141186a290000370000410021030b20002003360200200241d01f6a24000bd60101027f230041106b2202240002400240024002400240024020002d00000e050001020304050b200241003a000f20012002410f6a410110742001200041016a412010740c040b200241013a000f20012002410f6a410110740c030b200241023a000f20012002410f6a41011074200041046a28020021032000410c6a28020022002001107620012003200010740c020b200241033a000f20012002410f6a410110742001200041016a412010740c010b200241043a000f20012002410f6a410110742001200041016a411410740b200241106a24000bb40201067f230041106b22022400024002402001280200220328020422044104490d0020032802002205280000210620032004417c6a3602042003200541046a3602002002200110e8010240024020022802002203450d00200241086a2802002105200228020421042001280200220128020422074104490d012000200436020820002003360204200020063602002000410c6a200536020020012802002203280000210420012007417c6a3602042001200341046a360200200041106a20043602000c030b200041003602040c020b2000410036020402402005450d002005410c6c21002003210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b2004450d012004410c6c450d012003102e0c010b200041003602040b200241106a24000baa0201067f230041106b2202240002400240200128020422034104490d0020012802002204280000210520012003417c6a3602042001200441046a3602002002200110e3010240024020022802002203450d00200241086a280200210620022802042104200128020422074104490d012000200436020820002003360204200020053602002000410c6a200636020020012802002203280000210420012007417c6a3602042001200341046a360200200041106a20043602000c030b200041003602040c020b2000410036020402402006450d002006410c6c21002003210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b2004450d012004410c6c450d012003102e0c010b200041003602040b200241106a24000bd007020e7f047e230041b0046b22022400200128020c2103200128020821042001280204210520012802002106200241286a200010f901200241e0016a200228022822002002280230220710fa01200241f0036a41086a2208200241e0016a41086a290300370300200241f0036a41106a2209200241e0016a41106a290300370300200241f0036a41186a220a200241e0016a41186a290300370300200241f0036a41206a220b200241e0016a41206a290300370300200241f0036a41286a220c200241e0016a41286a290300370300200241f0036a41306a220d200241e0016a41306a290300370300200241f0036a41386a220e200241e0016a41386a290300370300200220022903e0013703f00320022d00a002210120024188036a200241e0016a41c1006a41e70010e9081a02402001410646220f0d00200241386a41386a200e290300370300200241386a41306a200d290300370300200241386a41286a200c290300370300200241386a41206a200b290300370300200241386a41186a200a290300370300200241386a41106a2009290300370300200241386a41086a2008290300370300200220022903f003370338200241386a41c1006a20024188036a41e70010e9081a0b200220013a0078410021010240200f0d0002402006280200220f290300221020022903382211542206200f41086a2903002212200241386a41086a220829030022135420122013511b0d00200f201020117d370300200f201220137d2006ad7d370308200241023a0078200241186a200241c0016a2002290368200241f0006a29030010fb012005280200210f20042802002106200242f0f2bda1a7ee9cb9f9003703f00320022006360290032002410236028c03200241e2b8c00036028803200241e0016a200241f0036a20024188036a10fc01200241086a200241e0016a2002290338200829030010fd01200f427f200f290300221220022903087c221320132012542206200f41086a22082903002212200241086a41086a2903007c2006ad7c221320125420132012511b22061b3703002008427f201320061b370300200241ec016a2004280200360200200241e0016a41086a41023a0000200241153a00e001200241e0016a10fe010c010b41012101200328020041013a00000b200241e0016a200241386a41a80110e9081a0240024020022d00a0024106470d002000200710ff010c010b20024100360290032002420137038803200241e0016a20024188036a10800220002007200228028803220f20022802900310b201200228028c03450d00200f102e0b0240200228022c450d002000102e0b200241b0046a240020010b870201037f230041d0006b22022400200241086a41bad7c7004108108102200241186a419dfec6004108108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241386a41086a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000bd41205047f067e017f027e0a7f230041a0026b220324002003200236020420032001360200200341086a2001200210ed0202400240200328020822010d00200041063a00400c010b200328020c21042003200341086a41086a28020036026c20032001360268200341186a200341e8006a109301024002400240024020032d00184101460d0020034190016a200341316a290000370300200341f8006a41106a200341296a290000370300200341f8006a41086a200341216a29000037030020032003290019370378200328026c22024110490d0020032003280268220541106a3602682003200241706a220636026c20064110490d00200541086a2900002107200529000021082003200541206a3602682003200241606a220636026c20064110490d00200541186a29000021092005290010210a2003200541306a3602682003200241506a220636026c20064110490d00200541286a290000210b2005290020210c2003200241406a220d36026c2003200541c0006a2206360268200d450d00200541386a290000210e2005290030210f2003200241bf7f6a36026c2003200641016a36026841002102024002400240024020062d00000e06060500010203040b410221020c050b200341186a200341e8006a10930120032d00184101460d02200341b8016a41186a200341316a290000370300200341b8016a41106a200341296a290000370300200341b8016a41086a200341216a290000370300200341b4016a41026a200341d8016a41026a2d00003a000020034198016a41086a200341f8016a41086a29000037030020034198016a41106a200341f8016a41106a29000037030020034198016a41186a200341f8016a41186a280000360200200320032900193703b801200320032f00d8013b01b401200320032900f80137039801410321020c040b200341186a200341e8006a10930120032d00184101460d01200341f8016a41186a2205200341316a290000370300200341f8016a41106a2206200341296a290000370300200341f8016a41086a220d200341216a290000370300200320032900193703f80141042102200328026c22104104490d01200341b8016a41086a200d290300370300200341b8016a41106a2006290300370300200341b8016a41186a2005290300370300200341b4016a41026a2003419c026a41026a2d00003a0000200320032903f8013703b80120032802682205280000210d20032010417c6a36026c2003200541046a360268200320032f009c023b01b40120034198016a41186a200341d8016a41186a28020036020020034198016a41106a200341d8016a41106a29020037030020034198016a41086a200341d8016a41086a290200370300200320032902d801370398010c030b200341186a200341e8006a10930120032d00184101460d00200341f8016a41186a200341316a290000370300200341f8016a41106a200341296a290000370300200341f8016a41086a200341216a290000370300200320032900193703f801200341186a200341e8006a10930120032d00184101460d002003419c026a41026a220220032d001b3a0000200341d8016a41086a200341186a41106a290300370300200341d8016a41106a200341186a41186a290300370300200341d8016a41186a200341386a2d00003a0000200320032f00193b019c022003200341186a41086a2903003703d801200328026c22064104490d00200328021c210d200341b8016a41086a200341f8016a41086a290300370300200341b8016a41106a200341f8016a41106a290300370300200341b8016a41186a200341f8016a41186a290300370300200341b4016a41026a20022d00003a000020034198016a41186a200341d8016a41186a2d00003a000020034198016a41106a200341d8016a41106a29030037030020034198016a41086a200341d8016a41086a290300370300200320032903f8013703b801200320032f019c023b01b401200320032903d8013703980120032802682202280000210520032006417c6a36026c2003200241046a360268200341b3016a200341f5016a41026a2d00003a0000200320032f00f5013b00b101410521020c020b20034100360220200342013703182003410a3602fc01200320033602f8012003200341186a3602b801200341d4006a410136020020034201370244200341909dc5003602402003200341f8016a360250200341b8016a419cebc000200341c0006a103d1a2003280218200328022010ef020240200328021c450d002003280218102e0b410621020c020b410121020b200341c0006a41186a2206200341b8016a41186a290300370300200341c0006a41106a2210200341b8016a41106a290300370300200341c0006a41086a2211200341b8016a41086a290300370300200341f4006a41026a2212200341b4016a41026a2d00003a0000200341d8016a41086a221320034198016a41086a290300370300200341d8016a41106a221420034198016a41106a290300370300200341d8016a41186a221520034198016a41186a280200360200200320032903b801370340200320032f01b4013b017420032003290398013703d801200341f8016a41086a2216200341f8006a41086a290300370300200341f8016a41106a2217200341f8006a41106a290300370300200341f8016a41186a2218200341f8006a41186a290300370300200341e2006a20122d00003a0000200320032903783703f801200320032f01743b0160200041386a200e3703002000200f370330200041286a200b3703002000200c370320200041186a20093703002000200a3703102000200737030820002008370300200341186a411f6a2212200341c0006a411f6a280000360000200341186a41186a22192006290300370300200341186a41106a22062010290300370300200341186a41086a2210201129030037030020032003290340370318200041e4006a200d360000200041e0006a2012280000360000200041d9006a2019290300370000200041d1006a2006290300370000200041c9006a201029030037000020002003290318370041200041e8006a20032903d801370000200041f0006a2013290300370000200041f8006a201429030037000020004180016a201528020036000020004184016a2005360000200041a0016a201829030037000020004198016a201729030037000020004190016a201629030037000020004188016a20032903f8013700000b200020023a00402004450d002001102e0b200341a0026a24000bf21104027f097e047f087e230041d0026b2204240002400240200220038450450d0042002102420021030c010b200441f0006a200110c802200441d0016a20042802702205200428027810c902200441f0016a2903002106200441e8016a2903002107200441e0016a290300210820042903d801210920042903d001210a02402004280274450d002005102e0b200a4201520d002009200784200820068484500d00200441f0006a200110c802200441d0016a20042802702205200428027810c902200441d0016a41386a290300210b200441d0016a41306a2903002107200441d0016a41286a2903002108200441d0016a41206a290300210c200441d0016a41186a290300210d200441d0016a41106a290300210a20044190026a290300210e20042903d801210620042903d0012109200441206a41086a200441a0026a290300370300200420044198026a2903003703200240024020094201510d004200210e200441306a41386a4200370300200441306a41306a4200370300200441306a41286a4200370300200441306a41206a4200370300200441306a41186a4200370300200441306a41106a4200370300200441306a41086a4200370300200442003703304200210842002107420021064200210a0c010b200441306a41286a2007370300200441306a41306a200b37030020042008370350200420063703302004200e3703682004200d3703402004200a3703382004200c3703480b02402004280274450d002005102e0b024002402006200a844200520d0020082004290340842007200441c8006a29030084844200520d002004290360200441e8006a2903008450450d004200210d410021050c010b200441c0006a2903002106200441e0006a290300210c200441d8006a2903002108200441d0006a290300210b20042903382107200429033021094201210d2004290348210a410121050b0240200d420152220f450d004200210b420021084200210c4200210e420021064200210a42002109420021070b200441f8016a2210200837030020044180026a2211200c370300200441e8016a200a2003200a2006200256200a200356200a2003511b22121b22087d20062002200620121b220a54ad7d220d3703002004200b3703f00120042006200a7d22133703e0012004427f200720087c2009200a7c220b2009542212ad7c22062012200620075420062007511b22121b22063703d8012004427f200b20121b22073703d001200fad210b02400240427f200720137c22092009200754220f2006200d7c200fad7c220920065420092006511b220f1b220c42ffc7afa02556427f2009200f1b22094200522009501b0d0020072013842006200d8484220d50210f42002113200d420052ad210d0c010b2011290300211420102903002115200441f0016a2903002116200441e0016a290300211720042903e801211820042903d801211920042903d001211a420121134200210d4101210f0b200441a8016a200837030020044198016a200937030020044190016a2212200c37030020044180016a20063703002004200a3703a001200420073703782004200d370388012004200b37037002400240024020052013420152720d00200420013602d0012001200441d0016a10bd060c010b0240200541017322052013420151720d00200420013602d0012001200441d0016a10be0641ff017122054103460d01024020050e03030200030b200f0d03200420123602d001200441d0016a10cc020c030b20134201522005710d010b200441b0016a200110c802200441d0016a20042802b001220520042802b801220f10c90220042903d001210a200441206a41086a2212200441a0026a290300370300200420044198026a29030037032002400240200a4201510d00200441c0016a41086a4200370300200442003703c0010c010b200441c0016a41086a2012290300370300200420042903203703c0010b024020134201510d004200211a420021194200211642002115420021144200210e42002117420021180b20044180026a2015370300200441d0016a41286a2016370300200441f0016a2018370300200441e8016a2017370300200441d0016a41106a201937030020044190026a200e37030020044198026a20042903c001370300200441d0016a41386a2014370300200441a0026a200441c0016a41086a2903003703002004201a3703d801200442013703d0012005200f200441d0016a41086a10c805024020042802b401450d002005102e0b200441f0006a41106a2903002106200441f0006a41286a2903002109200441f0006a41386a290300210820042903782107200429039001210c20042903a001210a2004290370210b200429038801210d0b0240200b4201520d0020044188026a200637030020044180026a2007370300200441d0016a41086a41003a0000200441d9016a2001290000370000200441e1016a200141086a290000370000200441e9016a200141106a290000370000200441f1016a200141186a290000370000200441033a00d001200441d0016a10fe010b02400240200d50450d00420021060c010b200441d0016a41186a200141186a290000370300200441d0016a41106a200141106a290000370300200441d0016a41086a200141086a290000370300200420012900003703d001420121060b200441186a200441d0016a41186a22052903002207370300200441106a200441d0016a41106a220f290300220b370300200441086a200441d0016a41086a2212290300220d370300200420042903d001220e37030020044180026a22102009370300200441f8016a2211200c370300200f200d3703002005200b370300200441f0016a2007370300200420063703d0012004200e3703d801200441d0016a10d204024020042903d001500d0020042011360270200441f0006a10cc020b20044188026a20083703002010200a370300201241063a0000200441d9016a2001290000370000200441e1016a200141086a290000370000200441e9016a200141106a290000370000200441f1016a200141186a290000370000200441033a00d001200320087d2002200a54ad7d21032002200a7d2102200441d0016a10fe010b2000200237030020002003370308200441d0026a24000b930301037f230041e0006b22032400200341c0006a200241086a2802003602002003200229020037033820032001360230200341edde91e30636023402400240200341306a410c6a2802002204410c6a2202417f4c0d000240024020020d00410121050c010b2002102c2205450d020b200341003602502003200236024c20032005360248200341c8006a200341306a41047241041074200341c8006a200141081074200328023821022004200341c8006a1076200341c8006a2002200410742003200341c0006a280200360208200341c8006a200341086a41041074200328024821022003200328025036025c20032002360258200341086a200341d8006a10d0040240200328024c450d002002102e0b0240024020032d00084101470d0020004200370000200041186a4200370000200041106a4200370000200041086a42003700000c010b20002003290009370000200041186a200341216a290000370000200041106a200341196a290000370000200041086a200341116a2900003700000b200341e0006a24000f0b1038000b1036000b9c1005027f0c7e017f047e017f230041d0026b22042400024002402002200384500d00200441e0006a200110c802200441d0016a20042802602205200428026810c902200441d0016a41386a2903002106200441d0016a41306a2903002107200441d0016a41286a2903002108200441d0016a41206a2903002109200441d0016a41186a290300210a200441d0016a41106a290300210b20044190026a290300210c20042903d801210d20042903d001210e200441a0016a41086a200441a0026a290300370300200420044198026a2903003703a00102400240200e4201510d004200210c200441206a41386a4200370300200441206a41306a4200370300200441206a41286a4200370300200441206a41206a4200370300200441206a41186a4200370300200441206a41106a4200370300200441206a41086a420037030020044200370320420021094200210842002107420021064200210d4200210b4200210a4200210f420021104200210e420021110c010b200441206a41206a2008370300200441206a41286a2007370300200441206a41106a200a370300200441206a41306a2006370300200420093703382004200d3703202004200c3703582004200b3703282008210f20072110200d210e200b21110b02402004280264450d002005102e0b02400240200e2011844200520d00200f2004290330842010200441386a29030084844200520d002004290350200441d8006a2903008450450d004200210e410021120c010b4201210e410121120b0240200e4201510d004200210a4200210c420021094200210842002107420021064200210d4200210b0b0240200e4201510d0020024280c8afa0255441002003501b0d010b200441f0016a2008370300200441f8016a200737030020044180026a2006370300200420093703e8012004200a3703e0012004200b200b20037c200d20027c220f200d542205ad7c221120052011200b542011200b511b22051b22113703d8012004200d200f20051b220d3703d0014200210f4200200320051b21034200200220051b210b42012110200e420152ad211302400240427f200d200a7c22022002200d542205201120097c2005ad7c220220115420022011511b22051b221442ffc7afa02556427f200220051b22024200522002501b0d00200d200a84201120098484220a50210542002110200a420052ad210f0c010b200441e0016a290300211520042903d801211620042903d001210a410121050b20044198016a200337030020044188016a200237030020044180016a22172014370300200441f0006a20113703002004200b370390012004200d3703682004200f3703782004201337036002400240024002400240024020122010420152720d00200420013602d0012001200441d0016a10bd060c010b0240201241017322122010420151720d00200420013602d0012001200441d0016a10be0641ff017122124103460d01024020120e03030200030b20044190016a2101024020050d00200420173602d001200441d0016a10cc020b200420013602d001200441d0016a10ce020c060b20104201522012710d020b200441b0016a200110c802200441d0016a20042802b001221220042802b801221710c90220042903d001210b200441a0016a41086a2205200441a0026a290300370300200420044198026a2903003703a00102400240200b4201510d00200441c0016a41086a4200370300200442003703c0010c010b200441c0016a41086a2005290300370300200420042903a0013703c0010b20044198026a20042903c001370300200441a0026a200441c0016a41086a290300370300200442013703d001200441d0016a41386a20064200201042015122051b37030020044180026a2007420020051b370300200441d0016a41286a2008420020051b370300200441f0016a2009420020051b370300200441e8016a2015420020051b370300200441d0016a41106a2016420020051b37030020044190026a200c420020051b3703002004200a420020051b3703d80120122017200441d0016a41086a10c805024020042802b401450d002012102e0b20042903602209428080808070832107200441e0006a41106a2903002111200441e0006a41286a2903002102200441e0006a41386a29030021032004290368210d2004290380012114200429039001210b2004290378210f0c030b200e420152ad21090c010b200e420152ad21090b420021070b02402007200942ffffffff0f83844201520d0020044188026a201137030020044180026a200d370300200441d0016a41086a41003a0000200441d9016a2001290000370000200441e1016a200141086a290000370000200441e9016a200141106a290000370000200441f1016a200141186a290000370000200441033a00d001200441d0016a10fe010b02400240200f50450d004200210d0c010b200441d0016a41186a200141186a290000370300200441d0016a41106a200141106a290000370300200441d0016a41086a200141086a290000370300200420012900003703d0014201210d0b200441186a200441d0016a41186a22012903002209370300200441106a200441d0016a41106a22052903002207370300200441086a200441d0016a41086a2903002208370300200420042903d001220a37030020044180026a2002370300200441f8016a221220143703002005200837030020012007370300200441f0016a20093703002004200d3703d0012004200a3703d801200441d0016a10d20420042903d001500d0120042012360260200441e0006a10cc020c010b4200210b420021030b2000200b37030020002003370308200441d0026a24000bfe0a010c7f23004180026b22012400200141c0016a22024200370300200141b8016a22034200370300200141a8016a41086a22044200370300200142003703a801200141c8016a41d9fcc60041061081022004200141c8016a41086a2205290000370300200120012900c8013703a801200141c8016a4180f4cb00410610810220022005290000370300200320012900c801370300200141086a200141a8016a4120108e02024002402001280208450d00200128020c450d00200141c0016a22064200370300200141b8016a22074200370300200141a8016a41086a22024200370300200142003703a801200141c8016a41d9fcc60041061081022002200141c8016a41086a2204290000370300200120012900c8013703a801200141c8016a41e8f7cb00410e108102200341086a22082004290000370000200320012900c801370000200141203602dc012001200141a8016a3602d801200141f0016a200141a8016a412010ed020240024020012802f00122090d00410321050c010b200141f0016a41086a280200210a20012802f401210b200141003a00c801024002400240200a450d00410121050240024020092d00000e03000401020b200a417f6a4104490d012009280001210c410021050c030b410221050c010b200141003602d001200142013703c8012001410a3602e4012001200141d8016a3602e0012001200141c8016a3602ec01200141246a410136020020014201370214200141909dc5003602102001200141e0016a360220200141ec016a419cebc000200141106a103d1a20012802c80120012802d00110ef02024020012802cc01450d0020012802c801102e0b410321050b0b200b450d002009102e0b200141106a200041800110e9081a200141a0016a410036020020014194016a200c360200200142013703980120014102200520054103461b220536029001200642003703002007420037030020024200370300200142003703a801200141c8016a41d9fcc600410610810220022004290000370300200120012900c8013703a801200141c8016a41a4f5cb00410a10810220082004290000370000200320012900c8013700002001200141a8016a4120108e020240024002402001280204410020012802001b220241016a22002002490d0020014198016a210c200141c0016a22064200370300200141b8016a22074200370300200141a8016a41086a22044200370300200142003703a801200141c8016a41d9fcc60041061081022004200141c8016a41086a2202290000370300200120012900c8013703a801200141c8016a41a4f5cb00410a108102200341086a22082002290000370000200320012900c801370000200120003602c801200141a8016a4120200141c8016a410410b201200642003703002007420037030020044200370300200142003703a801200141c8016a41d9fcc600410610810220042002290000370300200120012900c8013703a801200141c8016a41e0f4cb00410610810220082002290000370000200320012900c801370000200141003602f801200142013703f0010240024020050e03030001040b200141013a00c801200141f0016a200141c8016a410110740c030b200141023a00c801200141f0016a200141c8016a410110740c020b200141106a10c008200128029c0141ffffff3f71450d03200128029801102e0c030b200141003a00c801200141f0016a200141c8016a4101107420012001280294013602c801200141f0016a200141c8016a410410740b200141106a200141f0016a109c06200c200141f0016a10b8012002200141f0016a41086a280200360200200120012903f0013703c801200141a8016a4120200141c8016a10c702200141106a10c008200128029c0141ffffff3f71450d01200128029801102e0c010b200010c0080b20014180026a24000b0e002001ad4220862000ad8410210b910302017f017e230041106b22022400200120004188016a41201074200029030021032002200041086a290300370308200220033703002001200241101074200029031021032002200041186a290300370308200220033703002001200241101074200029032021032002200041286a290300370308200220033703002001200241101074200029033021032002200041386a290300370308200220033703002001200241101074024002400240024002400240024020002d00400e06000102030405060b200241003a000020012002410110740c050b200241013a000020012002410110740c040b200241023a000020012002410110740c030b200241033a000020012002410110742001200041c1006a412010740c020b200241043a000020012002410110742001200041c1006a412010742002200041e4006a28020036020020012002410410740c010b200241053a000020012002410110742001200041c1006a412010742001200041e1006a41201074200220004184016a28020036020020012002410410740b200241106a24000b2c0020002002ad4220862001ad8410122201290000370000200041086a200141086a2900003700002001102e0ba10606057f017e027f017e027f017e230041206b2202240002400240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020002400240200641037122034103460d00024002400240024020030e03000102000b2006410276ad21070c020b200128020022012802042203450d04200128020022042d0000210520012003417f6a360204410121032001200441016a3602002005410874200672220141ffff0371418002490d03200141fcff0371410276ad21070c010b410121032001280200220128020422044103490d022001280200220541026a2d0000210820052f000021092001200541036a36020020012004417d6a3602042009200841107472410874200672220141808004490d022001410276ad21070b4200210a410021030c030b02400240024002402006410276220b0e0d00030303010303030303030302030b2001280200220328020422014104490d0420032802002206350000210720032001417c6a3602042003200641046a36020020074280808080045421034200210a0c050b2001280200220328020422014108490d032003280200220629000021072003200141786a3602042003200641086a3602002007428080808080808080015421034200210a0c040b2001280200220328020422014110490d022003280200220641086a290000210a200629000021072003200641106a3602002003200141706a360204200a428080808080808080015421030c030b200641334b0d01200b41046a21094100210441012103200241186a210c420021074200210a0340200128020022062802042205450d0120062802002208310000210d20062005417f6a3602042006200841016a360200200241106a200d4200200441037441f8007110ed08200c290300200a84210a20022903102007842107200441016a22062104200641ff01712009490d000b2002427f427f41e800200b4103746b41f8007110e4082007200229030058200a200241086a290300220d58200a200d511b21030c020b0c010b410121030b20002007370308200041106a200a37030020002003ad370300200241206a24000b130020004109360204200041a8b9c0003602000b3400200041bad7c70036020420004100360200200041146a4104360200200041106a41b8d6c000360200200041086a42083702000b4201027f230041106b2202240002404104102c22030d001036000b20004204370204200020033602002002410036020c20002002410c6a41041074200241106a24000b130020004107360204200041a4dcc0003602000b4401027f230041106b2202240002404104102c22030d001036000b2000420437020420002003360200200241a0c21e36020c20002002410c6a41041074200241106a24000b4501027f230041106b2202240002404104102c22030d001036000b2000420437020420002003360200200241808dcf0036020c20002002410c6a41041074200241106a24000b4401027f230041106b2202240002404104102c22030d001036000b200042043702042000200336020020024180840736020c20002002410c6a41041074200241106a24000be92007017f027e027f017e067f027e027f230041f0126b2202240042022103024002400240024002400240200129036822044202520d00200241106a20014198016a41b00210e9081a0c010b2002418e036a200141246a41c20010e9081a200241d0036a41086a220520014188016a290300370300200241d0036a41106a220620014190016a290300370300200220014180016a2903003703d003200141f8006a290300210320012903702107200128020821082001280204210920012d0000210a200241d00d6a41026a220b200141036a2d00003a000020024188046a41086a220c200141146a29020037030020024188046a41106a2001411c6a290200370300200220012f00013b01d00d2002200129020c37038804024002400240200a0e03020100010b2008450d002009102e0b200241f8116a41026a200241c8126a41026a2d00003a000020024188086a41086a200241980b6a41086a29030037030020024188086a410d6a200241980b6a410d6a290000370000200220022f01c8123b01f811200220022903980b37038808200041036a41003a0000200041013b0001200041013a000020014198016a108b020c030b200241980b6a410d6a220a20024188046a410d6a290000370000200241980b6a41086a220d200c290300370300200241f8116a41026a220c200b2d00003a000020024188086a41086a220b200d29030037030020024188086a410d6a220d200a290000370000200220022f01d00d3b01f8112002200229038804370388082002200c2d00003a00ea03200220022f01f8113b01e803200220083600ef03200220093600eb03200241e8036a41186a200d290000370000200241e8036a41136a200b29030037000020022002290388083700f303200241d00d6a20014198016a41b00210e9081a20024180106a41106a200629030037030020024180106a41086a2005290300370300200220022903d003370380104100210a200241d8116a4100108c02200241c8126a20022802d811220820022802e011108d0220022d00c8122101200241f8116a41186a2209200241e1126a290000370300200241f8116a41106a200241d9126a290000370300200241f8116a41086a200241d1126a290000370300200220022900c9123703f8110240024020014101460d00200241bd126a4200370000200241b8126a4200370300200241b0126a4200370300200242003703a8120c010b200241b0126a20024183126a290000370300200241a8126a41106a200241f8116a41136a290000370300200241bd126a2009290000370000200220022900fb113703a81220022f01f81120022d00fa1141107472210a0b024020022802dc11450d002008102e0b20024198116a41086a200241a8126a41086a29030037030020024198116a41106a200241a8126a41106a29030037030020024198116a41156a200241a8126a41156a290000370000200220022903a8123703981120024190126a22014200370300200241f8116a41106a22084200370300200241f8116a41086a22094200370300200242003703f811200241c8126a41d9fcc60041061081022009200241c8126a41086a2205290000370300200220022900c8123703f811200241c8126a4180f4cb00410610810220012005290000370300200820022900c812370300200241086a200241f8116a4120108e0241002101024020044201520d0020074200510d04200228020c410020022802081b2108417f210142002008ad220e20037d220f200f200e561b220e20037c200e2007827d220e42ffffffff0f560d00200ea721010b200241c8126a2001108c0220022802c812220920022802d012108f022108024020022802cc12450d002009102e0b2008450d0120024198126a2001108c02200241c8126a200228029812220820022802a012108d0220022d00c812210120024190126a2209200241e1126a290000370300200241f8116a41106a200241d9126a290000370300200241f8116a41086a200241d1126a290000370300200220022900c9123703f8110240024020014101460d00200241bd126a4200370000200241a8126a41106a4200370300200241a8126a41086a4200370300200242003703a812410021010c010b200241a8126a41086a20024183126a290000370300200241a8126a41106a2002418b126a290000370300200241bd126a2009290000370000200220022900fb113703a81220022f01f81120022d00fa114110747221010b0240200228029c12450d002008102e0b200241d8116a41156a2208200241a8126a41156a290000370000200241d8116a41106a2209200241a8126a41106a290300370300200241b8116a41106a22052009290300370300200241b8116a41156a22092008290000370000200241b8116a41086a200241a8126a41086a290300220e370300200241d8106a41086a2208200e370300200241d8106a41106a22062005290300370300200241d8106a41156a22052009290000370000200220022903a812220e3703b8112002200e3703d810200241f8106a41156a220920024198116a41156a290000370000200241f8106a41106a220b20024198116a41106a290300370300200241f8106a41086a220c20024198116a41086a29030037030020022002290398113703f810200241b8106a41156a220d2009290000370000200241b8106a41106a2209200b290300370300200241b8106a41086a220b200c290300370300200220022903f8103703b81020024198106a41156a220c200529000037000020024198106a41106a2205200629030037030020024198106a41086a22062008290300370300200220022903d81037039810200241e00a6a41156a2208200d290000370000200241e00a6a41106a220d2009290300370300200241e00a6a41086a2209200b290300370300200220022903b8103703e00a200241c00a6a41156a220b200c290000370000200241c00a6a41106a220c2005290300370300200241c00a6a41086a2205200629030037030020022002290398103703c00a200241800b6a41106a220620024180106a41106a290300370300200241800b6a41086a221020024180106a41086a29030037030020022002290380103703800b200241980b6a41046a200241d00d6a41b00210e9081a20024188086a200241980b6a41b40210e9081a200241f0076a41106a22112006290300370300200241f0076a41086a22062010290300370300200241d0076a41086a22102009290300370300200241d0076a41106a2209200d290300370300200241d0076a41156a220d2008290000370000200241b0076a41086a22082005290300370300200241b0076a41106a2205200c290300370300200241b0076a41156a220c200b290000370000200220022903800b3703f007200220022903e00a3703d007200220022903c00a3703b00720024188046a20024188086a41046a41b00210e9081a200241f2066a200a4110763a0000200241f0066a200a3b0100200241c8066a2003370300200241c0066a2007370300200241d0066a220a20022903f007370300200241d8066a2006290300370300200241e0066a22062011290300370300200241f3066a20022903d007370000200241fb066a201029030037000020024183076a200929030037000020024188076a200d290000370000200220043703b8062002429e808080f0003703e80620024192076a20014110763a000020024190076a20013b010020024193076a20022903b0073700002002419b076a2008290300370000200241a3076a2005290300370000200241a8076a200c2900003700004108102c2201450d042002420837028c08200220013602880820024188046a20024188086a1090020240024020022903b8064201520d00200220022903c80620022903c0062203420c882204420120044201561b80a741047420037aa7417f6a22014101200141014b1b2201410f2001410f491b723b01980b20024188086a200241980b6a410210740c010b200241003a00980b20024188086a200241980b6a410110740b200620024188086a1091022002200a3602980b200241980b6a20024188086a10af01200220022802e8063602980b20024188086a200241980b6a41041074200220022802ec063602980b20024188086a200241980b6a410410744120102c2201450d042002422037029c0b200220013602980b200241980b6a200241f0066a4120107420024188086a20022802980b220120022802a00b10740240200228029c0b450d002001102e0b4120102c2201450d042002422037029c0b200220013602980b200241980b6a20024190076a4120107420024188086a20022802980b220120022802a00b10740240200228029c0b450d002001102e0b200228028808210102400240200228029008220a418102490d00200241f8116a2001200a10b0012002418e036a200241f8116a4120200241e8036a10920221010c010b2002418e036a2001200a200241e8036a10920221010b0240200228028c08450d00200228028808102e0b024020010d0020004180083b0001200041013a0000200041036a41003a000020024188046a108b020c030b200241e8026a41086a200241e8036a41086a290300370300200241e8026a41106a200241e8036a41106a290300370300200241e8026a41186a200241e8036a41186a290300370300200241c0026a41086a200241c8066a290300370300200241c0026a41106a200241d0066a290300370300200241c0026a41186a200241d8066a290300370300200241e0026a200241e0066a290300370300200220022903e8033703e8022002200241c0066a2903003703c00220022903b8062103200241106a20024188046a41b00210e9081a0b200041086a20022903e802370300200041286a2003370300200041306a20022903c002370300200041206a200241e8026a41186a290300370300200041186a200241e8026a41106a290300370300200041106a200241e8026a41086a290300370300200041386a200241c0026a41086a290300370300200041c0006a200241c0026a41106a290300370300200041c8006a200241c0026a41186a290300370300200041d0006a200241c0026a41206a290300370300200041d8006a200241106a41b00210e9081a200041003a00000c010b200241b8116a41156a200241d8116a41156a290000370000200241b8106a41086a200241f8106a41086a290000370300200241b8106a41106a200241f8106a41106a290000370300200241b8106a41156a200241f8106a41156a29000037000020024198106a41156a200241d8106a41156a290000370000200220022900f8103703b810200241d00d6a108b0220024188086a200241980b6a41b40210e9081a200241f0076a41106a200241800b6a41106a290300370300200241f0076a41086a200241800b6a41086a290300370300200241d0076a41086a200241e00a6a41086a290000370300200241d0076a41106a200241e00a6a41106a290000370300200241d0076a41156a200241e00a6a41156a290000370000200241b0076a41086a200241c00a6a41086a290000370300200241b0076a41106a200241c00a6a41106a290000370300200241b0076a41156a200241c00a6a41156a290000370000200220022903800b3703f007200220022900e00a3703d007200220022900c00a3703b007200041036a41003a0000200041800a3b0001200041013a00000b200241f0126a24000f0b41d0e7cc00411941ece7cc001039000b1036000ba62801047f024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002802000e1b00010218180304051806070818090a0b0c0d0e0f10111213141516170b0240024002400240024002400240200041086a2802000e0a1e1e001e01021e030405060b200041106a280200450d1d2000410c6a280200102e0f0b200041106a280200450d1c2000410c6a280200102e0f0b200041106a280200450d1b2000410c6a280200102e0f0b0240200041146a2802002201450d002000410c6a2802002102200141186c210103400240200241046a280200450d002002280200102e0b0240200241106a280200450d002002410c6a280200102e0b200241186a2102200141686a22010d000b0b200041106a2802002202450d1a200241186c450d1a200028020c102e0f0b0240200041146a2802002201450d002000410c6a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041106a2802002202450d192002410c6c450d19200028020c102e0f0b200041106a280200450d182000410c6a280200102e0f0b200041106a280200450d172000410c6a280200102e0f0b0240024002400240024020002d00040e061b001b010203040b200041186a2202280200108b022002280200102e0f0b02402000410c6a280200450d00200041086a280200102e0b200041246a2202280200108b022002280200102e0f0b2000410c6a280200450d18200041086a280200102e0f0b200041186a2202280200108b022002280200102e0f0b02402000410c6a280200450d00200041086a280200102e0b200041246a2202280200108b022002280200102e0f0b02400240200041086a280200417f6a0e020001170b2000412c6a220110e1010240200041306a2802002202450d00200241246c450d002001280200102e0b2000419c016a220110e1010240200041a0016a2802002202450d00200241246c450d002001280200102e0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d162002410c6c450d162000280210102e0f0b2000412c6a220110e1010240200041306a2802002202450d00200241246c450d002001280200102e0b2000419c016a220110e1010240200041a0016a2802002202450d00200241246c450d002001280200102e0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d152002410c6c450d152000280210102e0f0b0240024002400240200041086a2802000e0418000102030b2000410c6a2d00004102470d17200041146a280200450d17200041106a280200102e0f0b2000410c6a2d00004102470d16200041146a280200450d16200041106a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004102470d15200041386a280200450d15200041346a280200102e0f0b2000410c6a2d00004102470d14200041146a280200450d14200041106a280200102e0f0b02402000410c6a2802002201450d0020002802042202200141f0006c6a21030340024020022204410c6a2802002201450d0020042802042102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b200441f0006a21020240200441086a2802002201450d00200141246c450d002004280204102e0b20022003470d000b0b200041086a2802002202450d13200241f0006c450d132000280204102e0f0b024002400240024002400240200041086a2d00000e171800181818180118180218181818180318180418181818050b2000412c6a2d00004102470d17200041346a280200450d17200041306a280200102e0f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b200041106a2802002202450d16200241246c450d16200028020c102e0f0b2000410c6a2d00004102470d15200041146a280200450d15200041106a280200102e0f0b200041106a28020041ffffff3f71450d142000410c6a280200102e0f0b200041146a28020041ffffffff0371450d13200041106a280200102e0f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b200041106a2802002202450d12200241246c450d12200028020c102e0f0b20002802042202450d11200041086a280200450d112002102e0f0b02400240200041086a280200417f6a0e020001120b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d112002410c6c450d112000280210102e0f0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d102002410c6c450d102000280210102e0f0b02402000410c6a280200450d00200041086a280200102e0b02402000411c6a2802002201450d00200041146a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041186a2802002202450d0f2002410c6c450d0f2000280214102e0f0b0240024002400240200041086a2d000041716a0e0400010203120b200041106a280200450d112000410c6a280200102e0f0b200041106a280200450d102000410c6a280200102e0f0b200041106a280200450d0f2000410c6a280200102e0f0b200041106a280200450d0e2000410c6a280200102e0f0b024002400240200041086a2d0000417f6a0e03000102100b200041306a28020041ffffff3f71450d0f2000412c6a280200102e0f0b2000410c6a2202280200108b022002280200102e0f0b200041106a2202280200108b022002280200102e0f0b024002400240200041086a2d0000417f6a0e030001020f0b200041306a28020041ffffff3f71450d0e2000412c6a280200102e0f0b2000410c6a2202280200108b022002280200102e0f0b200041106a2202280200108b022002280200102e0f0b02400240200041086a2d0000417f6a0e05000d0d0d010d0b200041106a28020041ffffff3f71450d0c2000410c6a280200102e0f0b2000410c6a2d00004102470d0b200041146a280200450d0b200041106a280200102e0f0b20002d00044104470d0a2000410c6a28020041ffffff3f71450d0a200041086a280200102e0f0b200041086a2802004101470d092000410c6a2d00004102470d09200041146a280200450d09200041106a280200102e0f0b02400240200041086a2d0000417d6a0e0200010a0b200041f0006a280200450d09200041ec006a280200102e0f0b200041106a280200450d082000410c6a280200102e0f0b024002400240200041086a2802000e040a0a0001020b2000410c6a2d00004102470d09200041146a280200450d09200041106a280200102e0f0b2000410c6a2d00004102470d08200041146a280200450d08200041106a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004102470d07200041386a280200450d07200041346a280200102e0f0b02400240024020002f01040e03090001020b0240200041106a2802002201450d00200041086a2802002102200141b0026c210103402002109601200241b0026a2102200141d07d6a22010d000b0b2000410c6a2802002202450d08200241b0026c450d082000280208102e0f0b200041086a2202280200108b022002280200102e0f0b0240200041106a2802002201450d00200041086a2802002102200141b0026c210103402002109601200241b0026a2102200141d07d6a22010d000b0b2000410c6a2802002202450d06200241b0026c450d062000280208102e0f0b0240024002400240024002400240200041086a2d0000417e6a0e0d00010c0c0c0c0c0c02030405060c0b0240200041146a2802002201450d002000410c6a2802002202200141c8006c6a21010340024020022d00004101470d00200241086a280200450d00200241046a280200102e0b0240200241246a2d00004101470d002002412c6a280200450d00200241286a280200102e0b200241c8006a22022001470d000b0b0240200041106a2802002202450d00200241c8006c450d00200028020c102e0b0240200041186a2d00004101470d00200041206a280200450d002000411c6a280200102e0b02402000413c6a2d00004101470d00200041c4006a280200450d00200041c0006a280200102e0b0240200041e0006a2d00004101470d00200041e8006a280200450d00200041e4006a280200102e0b024020004184016a2d00004101470d002000418c016a280200450d0020004188016a280200102e0b0240200041a8016a2d00004101470d00200041b0016a280200450d00200041ac016a280200102e0b0240200041cc016a2d00004101470d00200041d4016a280200450d00200041d0016a280200102e0b200041f0016a2d00004101470d0b200041f8016a280200450d0b200041f4016a280200102e0f0b0240200041146a2802002202450d00200241c4006c21012000410c6a28020041286a210203400240200241786a2d00004101470d002002280200450d002002417c6a280200102e0b200241c4006a2102200141bc7f6a22010d000b0b200041106a2802002202450d0a200241c4006c450d0a200028020c102e0f0b200041106a2d00004102470d09200041186a280200450d09200041146a280200102e0f0b2000410c6a2d00004102470d08200041146a280200450d08200041106a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004101470d07200041386a280200450d07200041346a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004101470d06200041386a280200450d06200041346a280200102e0f0b2000410c6a2d00004102470d05200041146a280200450d05200041106a280200102e0f0b20002d00042202417e6a4108490d040240024020020e020600010b200041286a2202280200108b022002280200102e0f0b200041c8006a2202280200108b022002280200102e0f0b0240024002400240200041086a2d00000e0407000102030b0240200041106a28020041ffffff3f71450d002000410c6a280200102e0b200041186a2202280200108b022002280200102e0f0b0240200041106a28020041ffffff3f71450d002000410c6a280200102e0b200041286a280200450d05200041246a280200102e0f0b200041306a28020041ffffff3f71450d042000412c6a280200102e0f0b200041306a28020041ffffff3f71450d032000412c6a280200102e0f0b0240024002400240200041086a2802000e09060006010606020606030b200041106a280200450d052000410c6a280200102e0f0b200041106a2d00004102470d04200041186a280200450d04200041146a280200102e0f0b200041106a2d00004102470d03200041186a280200450d03200041146a280200102e0f0b200041146a280200450d02200041106a280200102e0f0b02400240200041086a2d0000417f6a0e03000301030b200041306a280200450d022000412c6a280200102e0c020b200041306a280200450d012000412c6a280200102e0f0b02402000413c6a28020041ffffffff0171450d00200041386a280200102e0b0240200041c8006a2802002202450d002002410c6c450d00200041c4006a280200102e0b0240200041d4006a28020041ffffffff0071450d00200041d0006a280200102e0b0240200041e0006a2802002202450d00200241146c450d00200041dc006a280200102e0b0240200041ec006a2802002202450d00200241186c450d00200041e8006a280200102e0b0240200041f8006a2802002202450d002002411c6c450d00200041f4006a280200102e0b024020004184016a28020041ffffff3f71450d0020004180016a280200102e0b024020004190016a2802002202450d00200241246c450d002000418c016a280200102e0b02402000419c016a2802002202450d00200241286c450d0020004198016a280200102e0b0240200041a8016a2802002202450d002002412c6c450d00200041a4016a280200102e0b0240200041b4016a2802002202450d00200241306c450d00200041b0016a280200102e0b0240200041c0016a2802002202450d00200241346c450d00200041bc016a280200102e0b0240200041cc016a2802002202450d00200241386c450d00200041c8016a280200102e0b0240200041d8016a2802002202450d002002413c6c450d00200041d4016a280200102e0b0240200041e4016a28020041ffffff1f71450d00200041e0016a280200102e0b200041f0016a2802002202450d00200241c4006c450d00200041ec016a280200102e0f0b0b850201037f230041d0006b22022400200241086a41d9fcc6004106108102200241186a41a0f3cb004109108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000b9d0902047f017e230041b0016b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022010d00200041003a00000c010b200341186a280200210220032802142104200341003a0060024002402002450d00200320012d00003a0040200341013a0060024020024101460d00200320012d00013a0041200341023a006020024102460d00200320012d00023a0042200341033a006020024103460d00200320012d00033a0043200341043a006020024104460d00200320012d00043a0044200341053a006020024105460d00200320012d00053a0045200341063a006020024106460d00200320012d00063a0046200341073a006020024107460d00200320012d00073a0047200341083a006020024108460d00200320012d00083a0048200341093a006020024109460d00200320012d00093a00492003410a3a00602002410a460d00200320012d000a3a004a2003410b3a00602002410b460d00200320012d000b3a004b2003410c3a00602002410c460d00200320012d000c3a004c2003410d3a00602002410d460d00200320012d000d3a004d2003410e3a00602002410e460d00200320012d000e3a004e2003410f3a00602002410f460d00200320012d000f3a004f200341103a006020024110460d00200320012d00103a0050200341113a006020024111460d00200320012d00113a0051200341123a006020024112460d00200320012d00123a0052200341133a006020024113460d00200320012d00133a0053200341143a006020024114460d00200320012d00143a0054200341153a006020024115460d00200320012d00153a0055200341163a006020024116460d00200320012d00163a0056200341173a006020024117460d00200320012d00173a0057200341183a006020024118460d00200320012d00183a0058200341193a006020024119460d00200320012d00193a00592003411a3a00602002411a460d00200320012d001a3a005a2003411b3a00602002411b460d00200320012d001b3a005b2003411c3a00602002411c460d00200320012d001c3a005c2003411d3a00602002411d460d00200320012d001d3a005d2003411e3a00602002411e460d00200320012d001e3a005e2003411f3a00602002411f460d00200341206a41106a2202200341c0006a41106a290300370300200341206a41086a2205200341c0006a41086a290300370300200320012d001f3a005f200341206a41186a2206200341c0006a41186a290300370300200341203a006020032003290340220737036820032007370320200041196a2006290300370000200041116a2002290300370000200041096a200529030037000020002003290320370001410121020c020b200341003a00600b20034100360270200342013703682003410a3602242003200341086a3602202003200341e8006a3602ac01200341d4006a410136020020034201370244200341909dc5003602402003200341206a360250200341ac016a419cebc000200341c0006a103d1a2003280268200328027010ef020240200328026c450d002003280268102e0b410021020b200020023a00002004450d002001102e0b200341b0016a24000b840201037f230041d0006b220324002003200236020420032001360200200341086a2001200210ed0202400240200328020822040d00410021010c010b200328020c210502400240200341106a2802004104490d0020042800002102410121010c010b4100210120034100360220200342013703182003410a36022c200320033602282003200341186a360234200341cc006a41013602002003420137023c200341909dc5003602382003200341286a360248200341346a419cebc000200341386a103d1a2003280218200328022010ef020240200328021c450d002003280218102e0b0b2005450d002004102e0b2000200236020420002001360200200341d0006a24000b11002001ad4220862000ad8410244101460bf97002067f017e230041106b2202240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002802000e1c000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c0b200241003a000020012002410110740240024002400240024002400240024002400240200041086a280200417f6a0e0a00010203040506070809250b200241003a0000200120024101107420022000410c6a28020036020020012002410410740c240b200241013a000020012002410110742000410c6a2802002103200041146a28020022002001107620012003200010740c230b200241023a000020012002410110742002200041106a29030037030020012002410810740c220b200241033a000020012002410110742000410c6a2802002103200041146a28020022002001107620012003200010740c210b200241043a000020012002410110742000410c6a2802002103200041146a28020022002001107620012003200010740c200b200241053a0000200120024101107402402000410c6a2802004101460d00200241003a000020012002410110740c200b200241013a000020012002410110742002200041106a28020036020020012002410410742002200041146a28020036020020012002410410740c1f0b200241063a000020012002410110742000410c6a2802002103200041146a2802002200200110762000450d1e2003200041186c6a2104034020032802002100200341086a28020022052001107620012000200510742003410c6a2802002100200341146a2802002205200110762001200020051074200341186a22032004470d000c1f0b0b200241073a000020012002410110742000410c6a2802002103200041146a2802002200200110762000450d1d20032000410c6c6a2104034020032802002100200341086a28020022052001107620012000200510742003410c6a22032004470d000c1e0b0b200241083a000020012002410110742000410c6a2802002103200041146a28020022052001107620012003200510742002200041186a28020036020020012002410410740c1c0b200241093a000020012002410110742000410c6a2802002103200041146a28020022002001107620012003200010740c1b0b200241013a0000200120024101107402400240024002400240024020002d0004417f6a0e06000102030405200b200241003a000020012002410110742002200041086a2802003602002001200241041074024002402000410c6a2802004101460d00200241003a000020012002410110740c010b200241013a000020012002410110742002200041106a28020036020020012002410410742002200041146a28020036020020012002410410740b200220002d00053a00002001200241011074200028021820011090020c1f0b200241013a000020012002410110742002200041086a280200360200200120024104107420022000410c6a28020036020020012002410410740c1e0b200241023a00002001200241011074200041086a2802002103200041106a28020022052001107620012003200510742002200041146a280200360200200120024104107402400240200041186a2802004101460d00200241003a000020012002410110740c010b200241013a0000200120024101107420022000411c6a28020036020020012002410410742002200041206a28020036020020012002410410740b200220002d00053a00002001200241011074200028022420011090020c1d0b200241033a00002001200241011074200041086a2802002103200041106a28020022002001107620012003200010740c1c0b200241043a000020012002410110742002200041086a2802003602002001200241041074024002402000410c6a2802004101460d00200241003a000020012002410110740c010b200241013a000020012002410110742002200041106a28020036020020012002410410742002200041146a28020036020020012002410410740b200220002d00053a00002001200241011074200028021820011090020c1b0b200241053a00002001200241011074200041086a2802002103200041106a28020022052001107620012003200510742002200041146a280200360200200120024104107402400240200041186a2802004101460d00200241003a000020012002410110740c010b200241013a0000200120024101107420022000411c6a28020036020020012002410410742002200041206a28020036020020012002410410740b200220002d00053a00002001200241011074200028022420011090020c1a0b200241023a00002001200241011074024002400240200041086a280200417f6a0e030001021c0b200241003a00002001200241011074200120004188026a412010742002200041206a2903003703002001200241081074200041286a2001108f0620004198016a2001108f0620022000410c6a2802003602002001200241041074200041106a2802002103200041186a28020022052001107602402005450d0020032005410c6c6a2106034020032802002105200341086a28020022042001107620012005200410742003410c6a22032006470d000b0b20022000411c6a28020036020020012002410410740c1b0b200241013a00002001200241011074200120004188026a412010742002200041206a2903003703002001200241081074200041286a2001108f0620004198016a2001108f0620022000410c6a2802003602002001200241041074200041106a2802002103200041186a28020022052001107602402005450d0020032005410c6c6a2106034020032802002105200341086a28020022042001107620012005200410742003410c6a22032006470d000b0b20022000411c6a28020036020020012002410410740c1a0b200241023a00002001200241011074200041106a20011096020c190b200241033a00002001200241011074200241003a00002001200241011074200041086a200110dc040c180b200241043a00002001200241011074200041046a21030240024002400240024020002d0004417f6a0e0500010203041c0b200241003a000020012002410110742002200041086a28020036020020012002410410740c1b0b200241013a000020012002410110742001200341016a412010742002200041286a28020036020020012002410410740c1a0b200241023a000020012002410110742002200041086a28020036020020012002410410740c190b200241033a000020012002410110742001200341016a412010742002200041286a2802003602002001200241041074200220002d00253a000020012002410110740c180b200241043a000020012002410110742002200041086a28020036020020012002410410740c170b200241053a000020012002410110740240024002400240200041086a280200417f6a0e04000102031a0b200241003a000020012002410110742000410c6a200110f5012002200041306a3602002002200110af010c190b200241013a000020012002410110742000410c6a200110f5012002200041306a3602002002200110af012002200041c0006a3602002002200110af010c180b200241023a000020012002410110742000410c6a200110f501200041306a200110f5012002200041d8006a3602002002200110af010c170b200241033a000020012002410110742000410c6a200110f5012002200041306a3602002002200110af010c160b200241063a00002001200241011074200241003a00002001200241011074200028020421032000410c6a2802002200200110762000450d15200041f0006c2100034020032001108f06200341f0006a2103200041907f6a22000d000c160b0b200241073a0000200120024101107402400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200041086a22032d0000417f6a0e17000102030405060708090a0b0c0d0e0f101112131415162b0b200241003a000020012002410110742000412c6a200110f5012002200041d0006a3602002002200110af010240024002400240024020002d00090e0500010203042f0b200241003a000020012002410110740c2e0b200241013a000020012002410110740c2d0b200241023a000020012002410110740c2c0b200241033a000020012002410110742001200341026a412010740c2b0b200241043a000020012002410110740c2a0b200241013a000020012002410110742002200041106a3602002002200110af010c290b200241023a000020012002410110742002200041106a3602002002200110af010c280b200241033a0000200120024101107420022000410c6a28020036020020012002410410740c270b200241043a000020012002410110742000410c6a20011091022002200041106a2d00003a000020012002410110740c260b200241053a000020012002410110742000410c6a2802002103200041146a280200220020011076200041246c2200450d2503402003200110f501200341246a21032000415c6a22000d000c260b0b200241063a000020012002410110740c240b200241073a000020012002410110740240024002400240024020032d00010e050001020304280b200241003a000020012002410110740c270b200241013a000020012002410110740c260b200241023a000020012002410110740c250b200241033a000020012002410110742001200341026a412010740c240b200241043a000020012002410110740c230b200241083a000020012002410110742000410c6a200110f5010c220b200241093a000020012002410110742000410c6a20011091020c210b2002410a3a000020012002410110742000410c6a20011091020c200b2002410b3a00002001200241011074200220032d00013a000020012002410110740c1f0b2002410c3a000020012002410110740c1e0b2002410d3a000020012002410110740c1d0b2002410e3a000020012002410110742000410c6a2802002103200041146a2802002200200110762000450d1c2000410574210003402001200341201074200341206a2103200041606a22000d000c1d0b0b2002410f3a000020012002410110742001200341016a4120107420022000412c6a28020036020020012002410410740c1b0b200241103a000020012002410110740c1a0b200241113a0000200120024101107420022000410c6a2802003602002001200241041074200041106a2802002103200041186a28020022002001107620012003200041027410740c190b200241123a000020012002410110742001200341016a4120107420022000412c6a28020036020020012002410410740c180b200241133a000020012002410110742002200041106a3602002002200110af010c170b200241143a000020012002410110742000410c6a2001109102200041106a20011091020c160b200241153a000020012002410110742001200341016a4120107420022000412c6a28020036020020012002410410740c150b200241163a000020012002410110742000410c6a2802002103200041146a280200220020011076200041246c2200450d1403402003200110f501200341246a21032000415c6a22000d000c150b0b200241083a00002001200241011074200110b6040c130b200241093a0000200120024101107402402000280204450d00200241003a000020012002410110742001200041106a412010742001200041306a412010742001200041d0006a412010742001200041f0006a41201074200120004190016a412010742001200041b0016a41201074200028020421032000410c6a28020022002001107620012003200010740c130b200241013a000020012002410110740c120b2002410b3a00002001200241011074024002400240200041086a280200417f6a0e03000102140b200241003a00002001200241011074200041206a200110900620022000410c6a2802003602002001200241041074200041106a2802002103200041186a28020022052001107602402005450d0020032005410c6c6a2106034020032802002105200341086a28020022042001107620012005200410742003410c6a22032006470d000b0b20022000411c6a28020036020020012002410410740c130b200241013a00002001200241011074200041206a200110900620022000410c6a2802003602002001200241041074200041106a2802002103200041186a28020022052001107602402005450d0020032005410c6c6a2106034020032802002105200341086a28020022042001107620012005200410742003410c6a22032006470d000b0b20022000411c6a28020036020020012002410410740c120b200241023a0000200120024101107420022000410c6a28020036020020012002410410742002200041106a28020036020020012002410410740c110b2002410c3a00002001200241011074200241003a00002001200241011074200220002802043602002001200241041074200041086a2802002103200041106a2802002205200110762001200320051074200041146a28020021032000411c6a2802002205200110762000412c6a210702402005450d0020032005410c6c6a2106034020032802002105200341086a28020022042001107620012005200410742003410c6a22032006470d000b0b2002200041206a28020036020020012002410410742002200041246a28020036020020012002410410742002200041286a28020036020020012002410410742001200741c00010740c100b2002410d3a00002001200241011074200110b6040c0f0b2002410e3a000020012002410110740240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200041086a22032d0000417f6a0e19000102030405060708090a0b0c0d0e0f101112131415161718270b200241003a000020012002410110744120102c2205450d27200041306a210020024220370204200220053602002002200341016a412010742001200228020022032002280208107402402002280204450d002003102e0b200220003602002002200110af010c260b200241013a000020012002410110742000410c6a2001109102200041106a20011091020c250b200241023a000020012002410110742000410c6a2001109102200041106a200110b2040c240b200241033a0000200120024101107420022000410c6a28020036020020012002410410740c230b200241043a000020012002410110744120102c2200450d2320024220370204200220003602002002200341016a41201074200120022802002200200228020810742002280204450d222000102e0c220b200241053a000020012002410110744120102c2200450d2220024220370204200220003602002002200341016a41201074200120022802002200200228020810742002280204450d212000102e0c210b200241063a000020012002410110744120102c2200450d2120024220370204200220003602002002200341016a41201074200120022802002200200228020810742002280204450d202000102e0c200b200241073a000020012002410110744120102c2205450d2020024220370204200220053602002002200341016a412010742001200228020022032002280208107402402002280204450d002003102e0b2002200028022c36020020012002410410742002200028023036020020012002410410740c1f0b200241083a000020012002410110744120102c2200450d1f20024220370204200220003602002002200341016a41201074200120022802002200200228020810742002280204450d1e2000102e0c1e0b200241093a000020012002410110742000410c6a20011091020c1d0b2002410a3a0000200120024101107420022000410c6a28020036020020012002410410740c1c0b2002410b3a000020012002410110742001200341016a4120107420002d002920011073200041306a29030021082002200041386a2903003703082002200837030020012002411010740c1b0b2002410c3a000020012002410110740c1a0b2002410d3a000020012002410110740c190b2002410e3a000020012002410110742000410c6a2802002103200041146a28020022002001107620012003200010740c180b2002410f3a000020012002410110742000410c6a2802002103200041146a28020022002001107620012003200010740c170b200241103a000020012002410110742000410c6a2802002103200041146a28020022002001107620012003200010740c160b200241113a000020012002410110742000410c6a2802002103200041146a28020022002001107620012003200010740c150b200241123a000020012002410110744120102c2205450d152000412c6a210020024220370204200220053602002002200341016a412010742001200228020022032002280208107402402002280204450d002003102e0b200020011091020c140b200241133a000020012002410110742001200341016a412010740c130b200241143a0000200120024101107420022000410c6a28020036020020012002410410740c120b200241153a000020012002410110742001200341016a4120107420022000412c6a28020036020020012002410410740c110b200241163a000020012002410110744120102c2205450d1120024220370204200220053602002002200341016a412010742001200228020022032002280208107402402002280204450d002003102e0b2002200028022c36020020012002410410740c100b200241173a000020012002410110744120102c2205450d1020024220370204200220053602002002200341016a412010742001200228020022032002280208107402402002280204450d002003102e0b0240200028022c4101460d00200241003a000020012002410110740c100b200241013a000020012002410110742002200041306a28020036020020012002410410740c0f0b200241183a000020012002410110742000410c6a20011091020c0e0b2002410f3a00002001200241011074024002400240024002400240200041086a22042d0000417f6a0e06000102030405130b200241003a000020012002410110742000412c6a2802002103200041346a28020022052001107602402005450d002005410574210503402001200341201074200341206a2103200541606a22050d000b0b0240024020042d00014101460d00200241003a000020012002410110740c010b200241013a000020012002410110742001200441026a412010740b2002200028023836020020012002410410740c120b200241013a000020012002410110742000410c6a2802002001109002200041106a20011091020c110b200241023a000020012002410110742000410c6a2001109102200041106a2802002001109002200041146a20011091020c100b200241033a000020012002410110744120102c2203450d102000412c6a210020024220370204200220033602002002200441016a412010742001200228020022032002280208107402402002280204450d002003102e0b20002001109102200220042d00213a000020012002410110740c0f0b200241043a000020012002410110744120102c2203450d0f200041306a2105200041386a21062000412c6a210020024220370204200220033602002002200441016a412010742001200228020022032002280208107402402002280204450d002003102e0b200020011091022006200110dc04200520011091020c0e0b200241053a000020012002410110744120102c2200450d0e20024220370204200220003602002002200441016a41201074200120022802002200200228020810742002280204450d0d2000102e0c0d0b200241103a00002001200241011074024002400240024002400240200041086a22042d0000417f6a0e06000102030405120b200241003a000020012002410110742000412c6a2802002103200041346a28020022052001107602402005450d002005410574210503402001200341201074200341206a2103200541606a22050d000b0b0240024020042d00014101460d00200241003a000020012002410110740c010b200241013a000020012002410110742001200441026a412010740b2002200028023836020020012002410410740c110b200241013a000020012002410110742000410c6a2802002001109002200041106a20011091020c100b200241023a000020012002410110742000410c6a2001109102200041106a2802002001109002200041146a20011091020c0f0b200241033a000020012002410110744120102c2203450d0f2000412c6a210020024220370204200220033602002002200441016a412010742001200228020022032002280208107402402002280204450d002003102e0b20002001109102200220042d00213a000020012002410110740c0e0b200241043a000020012002410110744120102c2203450d0e200041306a2105200041386a21062000412c6a210020024220370204200220033602002002200441016a412010742001200228020022032002280208107402402002280204450d002003102e0b200020011091022006200110dc04200520011091020c0d0b200241053a000020012002410110744120102c2200450d0d20024220370204200220003602002002200441016a41201074200120022802002200200228020810742002280204450d0c2000102e0c0c0b200241113a00002001200241011074024002400240024002400240200041086a2d0000417f6a0e06000102030405110b200241003a000020012002410110742000410c6a2802002103200041146a280200220520011076200041186a210402402005450d002005410574210003402001200341201074200341206a2103200041606a22000d000b0b200220043602002002200110af010c100b200241013a000020012002410110740c0f0b200241023a000020012002410110742000410c6a20011091020c0e0b200241033a000020012002410110740240024002402000410c6a2802000e03000102100b200241003a000020012002410110740c0f0b200241013a000020012002410110740c0e0b200241023a00002001200241011074200041106a20011091020c0d0b200241043a000020012002410110742000410c6a200110f501200220002d00093a000020012002410110740c0c0b200241053a0000200120024101107420022000410c6a28020036020020012002410410742002200041106a28020036020020012002410410740c0b0b200241123a00002001200241011074200041046a2103024002400240024002400240024020002d0004417f6a0e0700010203040506110b200241003a000020012002410110742001200341016a412010740c100b200241013a000020012002410110742001200341016a412010740c0f0b200241023a000020012002410110742001200341016a412010742001200341216a412010740c0e0b200241033a00002001200241011074200041086a2802002103200041106a2802002200200110762000450d0d2000410574210003402001200341201074200341206a2103200041606a22000d000c0e0b0b200241043a000020012002410110742001200341016a412010740c0c0b200241053a000020012002410110742001200341016a412010740c0b0b200241063a000020012002410110740c0a0b200241133a00002001200241011074024002400240200041086a280200417f6a0e030001020c0b200241003a000020012002410110742002200041306a3602002002200110af012000410c6a200110f5010c0b0b200241013a000020012002410110742000410c6a20011091020c0a0b200241023a000020012002410110742000410c6a20011091020c090b200241183a0000200120024101107402400240024002400240200041086a22032d0000417f6a0e0500010203040d0b200241003a000020012002410110742001200341016a412010742001200341216a41c10010740c0c0b200241013a000020012002410110742001200341016a41141074200041206a29030021082002200041286a29030037030820022008370300200120024110107402400240200041306a2903004201510d00200241003a000020012002410110740c010b200241013a00002001200241011074200041386a29030021082002200041c0006a290300370308200220083703002001200241101074200041c8006a29030021082002200041d0006a2903003703082002200837030020012002411010742002200041d8006a28020036020020012002410410740b024020032d001522004102470d00200241003a000020012002410110740c0c0b200241013a00002001200241011074024020004101460d00200241003a000020012002410110740c0c0b200241013a000020012002410110740c0b0b200241023a000020012002410110742001200341016a412010742001200341216a41c1001074200041ec006a2802002103200041f4006a28020022002001107620012003200010740c0a0b200241033a000020012002410110742000410c6a2802002103200041146a28020022002001107620012003200010740c090b200241043a000020012002410110742001200341016a411410742001200341156a411410740240200341296a2d00004101460d00200241003a000020012002410110740c090b200241013a0000200120024101107420012003412a6a412010740c080b200241193a000020012002410110740240024002400240200041086a280200417f6a0e04000102030b0b200241003a000020012002410110740c0a0b200241013a000020012002410110742000410c6a200110f5010c090b200241023a000020012002410110742000410c6a200110f501200041306a29030021082002200041386a290300370308200220083703002001200241101074200041c0006a29030021082002200041c8006a2903003703082002200837030020012002411010742002200041d0006a28020036020020012002410410740c080b200241033a000020012002410110742000410c6a200110f501200041306a200110f501200041d8006a29030021082002200041e0006a290300370308200220083703002001200241101074200041e8006a29030021082002200041f0006a2903003703082002200837030020012002411010742002200041f8006a28020036020020012002410410740c070b2002411a3a0000200120024101107402400240024020002f0104417f6a0e03000102090b200241003a00002001200241011074200041086a2802002103200041106a280200220020011076200041b0026c2200450d08034020032001109002200341b0026a2103200041d07d6a22000d000c090b0b200241013a00002001200241011074200220002f01063b01002001200241021074200041086a28020020011090020c070b200241023a00002001200241011074200041086a2802002103200041106a280200220020011076200041b0026c2200450d06034020032001109002200341b0026a2103200041d07d6a22000d000c070b0b2002411c3a00002001200241011074024002400240024002400240024002400240024002400240024002400240200041086a22032d0000417f6a0e0f000102030405060708090a0b0c0d0e140b200241003a000020012002410110742001200341016a412010740c130b200241013a000020012002410110742000410c6a200110b7012002200041186a108a012001200228020022032002280208107402402002280204450d002003102e0b20022000413c6a108a012001200228020022032002280208107402402002280204450d002003102e0b2002200041e0006a108a012001200228020022032002280208107402402002280204450d002003102e0b200220004184016a108a012001200228020022032002280208107402402002280204450d002003102e0b2002200041a8016a108a012001200228020022032002280208107402402002280204450d002003102e0b0240024020004194026a22032d00004101460d00200241003a000020012002410110740c010b200241013a000020012002410110742001200341016a411410740b2002200041cc016a108a012001200228020022032002280208107402402002280204450d002003102e0b2002200041f0016a108a01200120022802002200200228020810742002280204450d122000102e0c120b200241023a000020012002410110742000410c6a2802002103200041146a280200220020011076200041c4006c2200450d11200320006a2105034020012003412010742002200341206a2200108a012001200228020022032002280208107402402002280204450d002003102e0b200041246a22032005470d000c120b0b200241033a000020012002410110740c100b200241043a000020012002410110742000410c6a20011091022002200041106a3602002002200110af010c0f0b200241053a0000200120024101107420022000410c6a28020036020020012002410410740c0e0b200241063a000020012002410110742000410c6a20011091022002200041106a3602002002200110af010c0d0b200241073a000020012002410110742000412c6a20011091022001200341016a412010740c0c0b200241083a000020012002410110742000410c6a20011091022002200041106a29030037030020012002410810740c0b0b200241093a000020012002410110742000410c6a2001109102200041106a200110f501200041386a200110ea030c0a0b2002410a3a000020012002410110742000410c6a200110f5010c090b2002410b3a000020012002410110742000410c6a200110f5012002200041306a108a01200120022802002200200228020810742002280204450d082000102e0c080b2002410c3a000020012002410110742000410c6a200110f5012002200041306a108a01200120022802002200200228020810742002280204450d072000102e0c070b2002410d3a000020012002410110742000410c6a200110f5010c060b2002410e3a000020012002410110740c050b2002411d3a00002001200241011074200041046a2103024002400240024002400240024002400240024020002d0004417f6a0e0a000102030405060708090e0b200241003a000020012002410110742001200341016a412010740240024020002d00254107470d00200241003a000020012002410110740c010b200241013a00002001200241011074024002400240024002400240024020032d00210e0700010203070405070b200241003a00000c050b200241013a00000c040b200241023a00000c030b200241033a00000c020b200241053a00000c010b200241063a00000b20012002410110740b200028022820011090020c0d0b200241013a000020012002410110742001200341016a41201074024002400240024002400240024020002d00250e0700010203060405060b200241003a000020012002410110740c050b200241013a000020012002410110740c040b200241023a000020012002410110740c030b200241033a000020012002410110740c020b200241053a000020012002410110740c010b200241063a000020012002410110740b2002200028022836020020012002410410740c0c0b200241023a000020012002410110742001200341016a41201074024002400240024002400240024020002d00250e0700010203060405060b200241003a000020012002410110740c050b200241013a000020012002410110740c040b200241023a000020012002410110740c030b200241033a000020012002410110740c020b200241053a000020012002410110740c010b200241063a000020012002410110740b2002200028022836020020012002410410740c0b0b200241033a000020012002410110740c0a0b200241043a00002001200241011074024002400240024002400240024020002d00050e0700010203060405060b200241003a000020012002410110740c050b200241013a000020012002410110740c040b200241023a000020012002410110740c030b200241033a000020012002410110740c020b200241053a000020012002410110740c010b200241063a000020012002410110740b200220002802083602002001200241041074200220002f01063b010020012002410210740c090b200241053a000020012002410110742001200341016a412010742000412c6a2105200041286a2104024002400240024002400240024020002d00250e0700010203060405060b200241003a000020012002410110740c050b200241013a000020012002410110740c040b200241023a000020012002410110740c030b200241033a000020012002410110740c020b200241053a000020012002410110740c010b200241063a000020012002410110740b200220032f01223b0100200120024102107420042001109102200520011091020c080b200241063a000020012002410110742001200341016a412010744120102c2200450d0820024220370204200220003602002002200341216a41201074200120022802002200200228020810742002280204450d072000102e0c070b200241073a000020012002410110742001200341016a412010744120102c2200450d0720024220370204200220003602002002200341216a41201074200120022802002200200228020810742002280204450d062000102e0c060b200241083a000020012002410110742001200341016a412010744120102c2200450d0620024220370204200220003602002002200341216a41201074200120022802002200200228020810742002280204450d052000102e0c050b200241093a000020012002410110742001200341016a412010742001200341216a412010740240024020002d00454107470d00200241003a000020012002410110740c010b200241013a00002001200241011074024002400240024002400240024020032d00410e0700010203070405070b200241003a00000c050b200241013a00000c040b200241023a00000c030b200241033a00000c020b200241053a00000c010b200241063a00000b20012002410110740b200028024820011090020c040b2002411e3a000020012002410110740240024002400240200041086a22042d0000417f6a0e0400010203070b200241003a000020012002410110742000410c6a2802002103200041146a28020022052001107602402005450d002005410574210503402001200341201074200341206a2103200541606a22050d000b0b200028021820011090020c060b200241013a00002001200241011074200220002f010a3b010020012002410210742000410c6a2802002103200041146a28020022052001107602402005450d002005410574210503402001200341201074200341206a2103200541606a22050d000b0b0240024020002802184101460d00200241003a000020012002410110740c010b200241013a0000200120024101107420022000411c6a28020036020020012002410410742002200041206a28020036020020012002410410740b200028022421032000412c6a2802002205200110762001200320051074200220002d00093a000020012002410110742002200029033037030020012002410810740c050b200241023a00002001200241011074200220002f012a3b010020012002410210742000412c6a2802002103200041346a28020022052001107602402005450d002005410574210503402001200341201074200341206a2103200541606a22050d000b0b200441016a21030240024020002802384101460d00200241003a000020012002410110740c010b200241013a0000200120024101107420022000413c6a28020036020020012002410410742002200041c0006a28020036020020012002410410740b20012003412010742002200029034837030020012002410810740c040b200241033a00002001200241011074200220002f012a3b010020012002410210742000412c6a2802002103200041346a280200220520011076200441016a210402402005450d002005410574210503402001200341201074200341206a2103200541606a22050d000b0b20022000280238360200200120024104107420022000413c6a280200360200200120024104107420012004412010740c030b200241223a00002001200241011074024002400240024002400240024002400240200041086a280200417f6a0e090001020304050607080b0b200241003a000020012002410110742002200041186a3602002002200110af012000410c6a2802002103200041146a28020022002001107620012003200010740c0a0b200241013a000020012002410110742000410c6a20011091020c090b200241023a000020012002410110742000410c6a2001109102200041106a200110f5012002200041386a3602002002200110af010c080b200241033a000020012002410110742000410c6a20011091020c070b200241043a000020012002410110742000410c6a20011091020c060b200241053a000020012002410110742000410c6a2001109102200041106a200110f5010c050b200241063a000020012002410110742000410c6a20011091020c040b200241073a000020012002410110742000410c6a20011091020c030b200241083a000020012002410110742000410c6a2001109102200041106a2802002103200041186a28020022002001107620012003200010740c020b200241233a00002001200241011074024002400240024002400240200041086a22032d0000417f6a0e06000102030405070b200241003a000020012002410110742000412c6a2802002105200041346a28020022002001107620012005200010742001200341016a412010740c060b200241013a000020012002410110744120102c2200450d0620024220370204200220003602002002200341016a41201074200120022802002200200228020810742002280204450d052000102e0c050b200241023a000020012002410110742000412c6a2802002105200041346a28020022042001107620012005200410742001200341016a412010742002200041386a3602002002200110af010c040b200241033a000020012002410110744120102c2205450d04200041306a210020024220370204200220053602002002200341016a412010742001200228020022032002280208107402402002280204450d002003102e0b200220003602002002200110af010c030b200241043a000020012002410110744120102c2200450d0320024220370204200220003602002002200341016a41201074200120022802002200200228020810742002280204450d022000102e0c020b200241053a000020012002410110744120102c2200450d0220024220370204200220003602002002200341016a41201074200120022802002200200228020810742002280204450d012000102e0c010b200241243a00002001200241011074200241003a000020012002410110742002200041386a1091062001200228020022042002280208107420004180026a2103200041086a210502402002280204450d002004102e0b20012005413010742002200041f8016a28020036020020012002410410742003200110910220004184026a20011091020b200241106a24000f0b1036000bb30101027f230041106b2202240002400240024002402000280200220341c000490d00200341808001490d012003418080808004490d02200241033a00032001200241036a41011074200220002802003602042001200241046a410410740c030b200220034102743a00032001200241036a410110740c020b200220034102744101723b010a20012002410a6a410210740c010b2002200341027441027236020c20012002410c6a410410740b200241106a24000bf70201017f23004190016b22042400024002400240024020002d00000e03000102000b200441206a41186a200341186a290000370300200441206a41106a200341106a290000370300200441206a41086a200341086a29000037030020042003290000370320200041016a20012002200441206a10890721000c020b200441206a41186a200341186a290000370300200441206a41106a200341106a290000370300200441206a41086a200341086a29000037030020042003290000370320200041016a20012002200441206a10fa0421000c010b20042001200210b001200441206a200041016a200410d3084100210020042d00200d00200441c8006a41206a200441206a41216a2d00003a0000200441e0006a200441396a290000370300200441d8006a200441316a290000370300200441d0006a200441296a29000037030020042004290021370348200441f0006a200441c8006a412110b001200441f0006a2003412010ec084521000b20044190016a240020000bc81303067f017e067f230041d0036b2202240002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a3602002005417f6a0e03010203040b200042033703000c040b024020064104490d002004280001210720012003417b6a22053602042001200441056a36020020054108490d00200429000521082001200341736a220936020420012004410d6a36020041002105200241003a0028200341726a21030240034020092005460d01200241086a20056a200420056a2206410d6a2d00003a00002001200336020420012006410e6a3602002002200541016a22063a00282003417f6a21032006210520064120470d000b20024190036a41086a2204200241086a41086a29030037030020024190036a41106a2203200241086a41106a29030037030020024190036a41186a2209200241086a41186a2903003703002002200229030837039003410121050240200641ff01714120490d00200241f0026a41186a2009290300370300200241f0026a41106a2003290300370300200241f0026a41086a200429030037030020022002290390033703f002410021050b200241b0026a41086a200241f0026a41086a290300370300200241b0026a41106a200241f0026a41106a290300370300200241b0026a41186a200241f0026a41186a290300370300200220022903f0023703b00220050d01200241f0016a41086a2205200241b0026a41086a290300370300200241f0016a41106a2204200241b0026a41106a290300370300200241f0016a41186a2203200241b0026a41186a290300370300200220022903b0023703f001200241086a200110940220022d00084101460d01200241a8016a2201200241c1006a290000370300200241a0016a2206200241396a29000037030020024198016a2209200241316a29000037030020024190016a220a200241296a290000370300200241f0006a41186a220b200241216a290000370300200241f0006a41106a220c200241196a290000370300200241f0006a41086a220d200241116a290000370300200241d0016a41086a220e2005290300370300200241d0016a41106a22052004290300370300200241d0016a41186a2204200329030037030020022002290009370370200220022903f0013703d001200241b0016a41186a22032004290300370300200241b0016a41106a22042005290300370300200241b0016a41086a2205200e290300370300200220022903d0013703b001200041106a20073602002000200837030820004200370300200020022903b0013702142000411c6a2005290300370200200041246a20042903003702002000412c6a2003290300370200200020022903703702342000413c6a200d290300370200200041c4006a200c290300370200200041cc006a200b290300370200200041d4006a200a290300370200200041dc006a2009290300370200200041e4006a2006290300370200200041ec006a20012903003702000c050b0240200541ff0171450d00200241003a00280b200241b0026a41086a200241f0026a41086a290300370300200241b0026a41106a200241f0026a41106a290300370300200241b0026a41186a200241f0026a41186a290300370300200220022903f0023703b0020b200042033703000c030b024020064104490d002004280001210620012003417b6a22053602042001200441056a36020020054108490d0020004201370300200429000521082001200341736a36020420012004410d6a360200200041106a200636020020002008370308200041146a200241086a41e40010e9081a0c030b200042033703000c020b024020064104490d002004280001210720012003417b6a22053602042001200441056a36020020054108490d00200429000521082001200341736a220936020420012004410d6a36020041002105200241003a0028200341726a21030240034020092005460d01200241086a20056a200420056a2206410d6a2d00003a00002001200336020420012006410e6a3602002002200541016a22063a00282003417f6a21032006210520064120470d000b20024190036a41086a2204200241086a41086a29030037030020024190036a41106a2203200241086a41106a29030037030020024190036a41186a2209200241086a41186a2903003703002002200229030837039003410121050240200641ff01714120490d00200241f0026a41186a2009290300370300200241f0026a41106a2003290300370300200241f0026a41086a200429030037030020022002290390033703f002410021050b200241b0026a41086a200241f0026a41086a290300370300200241b0026a41106a200241f0026a41106a290300370300200241b0026a41186a200241f0026a41186a290300370300200220022903f0023703b00220050d01200241f0016a41086a2205200241b0026a41086a290300370300200241f0016a41106a2204200241b0026a41106a290300370300200241f0016a41186a2203200241b0026a41186a290300370300200220022903b0023703f001200241086a200110940220022d00084101460d01200241a8016a2201200241c1006a290000370300200241a0016a2206200241396a29000037030020024198016a2209200241316a29000037030020024190016a220a200241296a290000370300200241f0006a41186a220b200241216a290000370300200241f0006a41106a220c200241196a290000370300200241f0006a41086a220d200241116a290000370300200241d0016a41086a220e2005290300370300200241d0016a41106a22052004290300370300200241d0016a41186a2204200329030037030020022002290009370370200220022903f0013703d001200241b0016a41186a22032004290300370300200241b0016a41106a22042005290300370300200241b0016a41086a2205200e290300370300200220022903d0013703b001200041106a20073602002000200837030820004202370300200020022903b0013702142000411c6a2005290300370200200041246a20042903003702002000412c6a2003290300370200200020022903703702342000413c6a200d290300370200200041c4006a200c290300370200200041cc006a200b290300370200200041d4006a200a290300370200200041dc006a2009290300370200200041e4006a2006290300370200200041ec006a20012903003702000c030b0240200541ff0171450d00200241003a00280b200241b0026a41086a200241f0026a41086a290300370300200241b0026a41106a200241f0026a41106a290300370300200241b0026a41186a200241f0026a41186a290300370300200220022903f0023703b0020b200042033703000c010b200042033703000b200241d0036a24000bd411010b7f230041b0036b2202240020024180016a200110a701200241c0006a41086a220120024189016a290000370300200241c0006a41106a220320024191016a290000370300200241c0006a41186a220420024199016a290000370300200241c0006a41206a2205200241a1016a290000370300200241c0006a41286a2206200241a9016a290000370300200241c0006a41306a2207200241b1016a290000370300200241c0006a41386a2208200241b9016a290000370300200220022900810137034002400240024020022d0080014101460d00200241386a22092008290300370300200241306a22082007290300370300200241286a22072006290300370300200241206a22062005290300370300200241186a22052004290300370300200241106a220a2003290300370300200241086a220b20012903003703002002200229034037030020024198026a41186a200929030037030020024198026a41106a200829030037030020024198026a41086a20072903003703002002200629030037039802200420052903003703002003200a2903003703002001200b2903003703002002200229030037034020024180016a200241c0006a10720240024020022d0080014101460d0020024190036a410f6a200241c0006a410f6a29000037000020024190036a41086a200241c0006a41086a290000370300200220022900403703900341012101410221050c010b200241ae036a20022d0083013a000020024198036a2002418d016a2900003703002002419f036a20024194016a2900003700002002418c036a200241a0016a2d00003a0000200220022f0081013b01ac0320022002290085013703900320022002419c016a280200360288034100210120022d00840121050b20024184036a41026a2206200241ac036a41026a2d00003a0000200241e8026a41086a220320024190036a41086a290300370300200241e8026a410f6a220420024190036a410f6a290000370000200241e0026a41046a220720024188036a41046a2d00003a0000200220022f01ac033b01840320022002290390033703e80220022002280288033602e002024020010d00200241dc026a41026a20062d00003a0000200241c0026a41086a2003290300370300200241c0026a410f6a2004290000370000200241b8026a41046a20072d00003a0000200220022f0184033b01dc02200220022903e8023703c002200220022802e0023602b802200241c0006a41186a20024198026a41186a290300370300200241c0006a41106a20024198026a41106a290300370300200241c0006a41086a20024198026a41086a290300370300200220022903980237034020024180016a200241c0006a1072410121010240024020022d0080014101460d0020024190036a410f6a200241c0006a410f6a29000037000020024190036a41086a200241c0006a41086a2900003703002002200229004037039003410221030c010b200241ae036a20022d0083013a000020024198036a2002418d016a2900003703002002419f036a20024194016a2900003700002002418c036a200241a0016a2d00003a0000200220022f0081013b01ac0320022002290085013703900320022002419c016a280200360288034100210120022d00840121030b20024184036a41026a2207200241ac036a41026a22082d00003a0000200241e8026a41086a220420024190036a41086a2209290300370300200241e8026a410f6a220620024190036a410f6a220a290000370000200241e0026a41046a220b20024188036a41046a220c2d00003a0000200220022f01ac033b01840320022002290390033703e80220022002280288033602e00202402001450d0020024180016a410f6a200629000037000020024180016a41086a2004290300370300200220022903e8023703800141012101200321050c030b20024194026a41026a20072d00003a000020092004290300370300200a2006290000370000200c200b2d00003a00002008200241dc026a41026a2d00003a0000200220022f0184033b019402200220022903e80237039003200220022802e00236028803200220022f01dc023b01ac0320024180016a410f6a2201200241c0026a410f6a29000037000020024180016a41086a2204200241c0026a41086a290300370300200220022903c00237038001200241e8026a41046a200241b8026a41046a2d00003a0000200220022802b8023602e802200241c0006a410f6a2001290000370000200241c0006a41086a20042903003703002002200229038001370340410021010c020b20024180016a410f6a200429000037000020024180016a41086a2003290300370300200220022903e80237038001410121010c010b200041013a00000c010b20024190026a41026a2204200241ac036a41026a2d00003a0000200241f8016a41086a2206200241c0006a41086a290300370300200241f8016a410f6a2207200241c0006a410f6a290000370000200241f0016a41046a2208200241e8026a41046a2d00003a0000200241ec016a41026a220920024194026a41026a2d00003a0000200220022f01ac033b019002200220022903403703f801200220022802e8023602f001200220022f0194023b01ec01200241d0016a410f6a220a20024190036a410f6a290000370000200241d0016a41086a220b20024190036a41086a290300370300200241c8016a41046a220c20024188036a41046a2d00003a000020022002290390033703d00120022002280288033602c801024020010d00200020022f0190023b0001200041046a20053a0000200041056a20022903f8013700002000411c6a20022802f001360000200041216a20022f01ec013b0000200041036a20042d00003a00002000410d6a2006290300370000200041146a2007290000370000200041206a20082d00003a0000200041236a20092d00003a0000200041246a20033a0000200041003a0000200041256a20022903d0013700002000412d6a200b290300370000200041346a200a2900003700002000413c6a20022802c801360000200041c0006a200c2d00003a00000c010b200041013a00000b200241b0036a24000ba40202057f027e230041106b21020240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a36020020054101470d01024002400240024020064108490d00200429000121072001200341776a22053602042001200441096a36020020054108490d002004290009210820012003416f6a22033602042001200441116a22043602002003450d0320042d0000210520012003417f6a3602042001200441016a36020041002101024020050e03030200040b410221010c020b200041033a00100f0b410121010b200020013a0010200020083703082000200737030020002002280009360011200041146a2002410c6a2800003600000f0b200041033a00100f0b200041033a00100f0b200041033a00100ba10101017f230041106b22022400200241013a00082001200241086a41011074200220002903003703082001200241086a41081074200220002903083703082001200241086a41081074024002400240024020002d00100e03000102030b200241003a00082001200241086a410110740c020b200241013a00082001200241086a410110740c010b200241023a00082001200241086a410110740b200241106a24000b9f0101057f230041106b2202240020004100360208200042013702002002200128020036020c20002002410c6a41041074200128020421032001410c6a28020022042000107602402004450d0020032004410c6c6a2105034020032802002104200341086a28020022062000107620002004200610742003410c6a22032005470d000b0b200220012802103602082000200241086a41041074200241106a24000bd20603057f017e027f230041a0046b2202240041002103200241003a009003024002400240024002400340200128020022042802042205450d01200241f0026a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22043a0090032004210320044120470d000b20024190026a41186a200241f0026a41186a2903002207370300200241f0016a41086a200241f0026a41086a290300370300200241f0016a41106a200241f0026a41106a290300370300200241f0016a41186a2007370300200220022903f0023703f0012001280200220428020422034108490d012004280200220529000021072004200341786a3602042004200541086a360200200241f0026a200110990220022802f4022205450d02200241fc026a280200210420022802f802210620022802f002210320024190026a200241f0026a41106a41e00010e9081a200241f0026a200110990220022802f402450d03200241206a200241f0026a41f00010e9081a200241086a2201200241f0016a41086a290300370300200241106a2208200241f0016a41106a290300370300200241186a2209200241f0016a41186a290300370300200220022903f00137030020024190016a20024190026a41e00010e9081a200041146a2004360200200020063602102000200536020c2000200336020820002007370300200041186a20024190016a41e00010e9081a200041f8006a200241206a41f00010e9081a20004180026a2009290300370300200041f8016a2008290300370300200041f0016a2001290300370300200041e8016a20022903003703000c040b0240200341ff0171450d00200241003a0090030b2000410036020c0c030b2000410036020c0c020b2000410036020c0c010b2000410036020c02402004450d00200441246c21032005210403400240024002400240024020042d00000e050400010204030b2004410c6a280200450d03200441086a280200102e0c030b2004410c6a280200450d02200441086a280200102e0c020b2004410c6a280200450d01200441086a280200102e0c010b200441086a280200450d00200441046a280200102e0b200441246a21042003415c6a22030d000b0b2006450d00200641246c450d002005102e0b200241a0046a24000b881d05057f017e087f027e057f230041d0056b2202240041002103200241003a00a805024002400240024002400240024002400340200128020022042802042205450d0120024188056a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22043a00a8052004210320044120470d000b200241e0036a41186a20024188056a41186a2903002207370300200241c0026a41086a220420024188056a41086a290300370300200241c0026a41106a220320024188056a41106a290300370300200241c0026a41186a2205200737030020022002290388053703c002200241a0016a41186a22062005290300370300200241a0016a41106a22052003290300370300200241a0016a41086a22032004290300370300200220022903c0023703a00120024180016a41186a200629030037030020024180016a41106a200529030037030020024180016a41086a2003290300370300200220022903a00137038001200241186a200110ad0120022802180d02200228021c210841002103200241003a00a8050340200128020022042802042205450d0220024188056a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22043a00a8052004210320044120470d000b200241e0036a41186a20024188056a41186a2903002207370300200241c0026a41086a220420024188056a41086a290300370300200241c0026a41106a220320024188056a41106a290300370300200241c0026a41186a2205200737030020022002290388053703c002200241e0016a41186a22062005290300370300200241e0016a41106a22052003290300370300200241e0016a41086a22032004290300370300200220022903c0023703e001200241c0016a41186a2006290300370300200241c0016a41106a2005290300370300200241c0016a41086a2003290300370300200220022903e0013703c00141002103200241003a00a8050340200128020022042802042205450d0420024188056a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22043a00a8052004210320044120470d000b200241e0036a41186a20024188056a41186a2903002207370300200241c0026a41086a220420024188056a41086a290300370300200241c0026a41106a220320024188056a41106a290300370300200241c0026a41186a2205200737030020022002290388053703c002200241a0026a41186a22062005290300370300200241a0026a41106a22052003290300370300200241a0026a41086a22032004290300370300200220022903c0023703a00220024180026a41186a200629030037030020024180026a41106a200529030037030020024180026a41086a2003290300370300200220022903a00237038002200241106a200110ad0120022802100d0520022802142209200128020028020441246e2204200420094b1bad42247e2207422088a7450d040c070b0240200341ff0171450d00200241003a00a8050b200241a0016a41086a200241c0026a41086a290300370300200241a0016a41106a200241c0026a41106a290300370300200241a0016a41186a200241c0026a41186a290300370300200220022903c0023703a001200041003602040c050b0240200341ff0171450d00200241003a00a8050b200241e0016a41086a200241c0026a41086a290300370300200241e0016a41106a200241c0026a41106a290300370300200241e0016a41186a200241c0026a41186a290300370300200220022903c0023703e001200041003602040c040b200041003602040c030b0240200341ff0171450d00200241003a00a8050b200241a0026a41086a200241c0026a41086a290300370300200241a0026a41106a200241c0026a41106a290300370300200241a0026a41186a200241c0026a41186a290300370300200220022903c0023703a002200041003602040c020b2007a72204417f4c0d02024002400240024020040d004104210a0c010b2004102c220a450d010b2001200128020441016a2203360204200441246ead2107200320012802084b0d01024002402009450d00200241ed036a210b2002419b056a220c41056a210d4100210e0340200128020022042802042203450d04200428020022052d0000210620042003417f6a3602042004200541016a360200024002400240024002400240024002400240024020060e08000e010e030402050e0b200241086a200110ad0120022802080d0d200128020022032802042206200228020c2204490d0d2004417f4c0d100240024020040d00410121050c010b200410322205450d0d2001280200220328020421060b20062004490d0620052003280200200410e90821062003280204220f20044f0d052004200f41b8b2c0001056000b41002103200241003a00a80502400340200128020022042802042205450d0120024188056a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22043a00a8052004210320044120470d000b2002200d2900003700c5052002200c2900003703c005200220022900c5053700b505200220022903c0053703b005200220022903b0053703f804200220022900b5053700fd04200228008f05210620022f018805210420022d008a052103200228008b0521052002290093052110200220022900fd043700ed04200220022903f8043703e804200220022900ed043700dd04200220022903e8043703d804200220022900dd043700e503200220022903d8043703e003200b20022f00d5043b0000200b41026a200241d5046a41026a2d00003a0000201042808080807083211120054108762112200420034110747221032010a7210f410021130c080b200341ff0171450d0c200241003a00a8050c0c0b20024188056a200110ac01200228028c052206450d0b20022f01880520022d008a0541107472210320022d008b05210520022903900522104280808080708321112010a7210f410121130c060b20024188056a200110ac01200228028c052206450d0a20022f01880520022d008a0541107472210320022d008b05210520022903900522104280808080708321112010a7210f410221130c050b20024188056a200110ac01200228028c052206450d0920022f01880520022d008a0541107472210320022d008b05210520022903900522104280808080708321112010a7210f410321130c040b200128020022042802042203450d08200428020022052d0000210620042003417f6a3602042004200541016a36020020060d08200241c0056a200110fd0520022802c00522054102460d08200241e0036a41086a20024188056a41086a29020037030020022002290288053703e00320022802c805210f20022802c40521064104211342002111410021120c020b2003200f20046b3602042003200328020020046a3602002006450d07200241e0036a41086a20024188056a41086a29020037030020022002290288053703e003200641087621122004ad22104220862010842210422088a7210f2010a7210641052113420021110c010b2005102e0c060b0b200241c0026a41086a200241e0036a41086a2903002210370300200241c0046a41086a22142010370300200220022903e00322103703c002200220103703c004024020074220882210a722042007a7470d00200441016a22152004490d0820044101742216201520152016491b22154104201541044b1bad42247e2210422088a74541027421152010a721160240024020040d0020024100360288050c010b20024104360290052002200a360288052002200441246c36028c050b200241e0036a2016201520024188056a107d20022802e803211520022802e0034101460d0320022802e403210a20074220882210a72104201541246ead21070b200a200441246c6a22042011200fad8437000c2004200636000820042012410874200541ff017172360004200420033b0001200420133a0000200441036a20034110763a0000200420022903c0043700142004411c6a20142903003700002010422086200742ffffffff0f83844280808080107c2107200e41016a220e2009470d000b200128020421030b20012003417f6a360204200a450d03200241e0006a41186a220420024180016a41186a290300370300200241e0006a41106a220320024180016a41106a290300370300200241e0006a41086a220520024180016a41086a290300370300200241c0006a41086a2206200241c0016a41086a290300370300200241c0006a41106a2201200241c0016a41106a290300370300200241c0006a41186a2209200241c0016a41186a290300370300200241206a41086a220e20024180026a41086a290300370300200241206a41106a220f20024180026a41106a290300370300200241206a41186a221320024180026a41186a2903003703002002200229038001370360200220022903c0013703402002200229038002370320200020073702082000200a36020420002008360200200041106a2002290360370200200041186a2005290300370200200041206a2003290300370200200041286a2004290300370200200041306a2002290340370200200041386a2006290300370200200041c0006a2001290300370200200041c8006a2009290300370200200041e8006a2013290300370200200041e0006a200f290300370200200041d8006a200e290300370200200041d0006a20022903203702000c040b2015450d040b1036000b02402007422088a72204450d00200441246c2103200a210403400240024002400240024020042d00000e050400010204030b2004410c6a280200450d03200441086a280200102e0c030b2004410c6a280200450d02200441086a280200102e0c020b2004410c6a280200450d01200441086a280200102e0c010b200441086a280200450d00200441046a280200102e0b200441246a21042003415c6a22030d000b0b2007a72204450d00200441246c450d00200a102e0b200041003602040b200241d0056a24000f0b1038000b9e0703067f017e017f230041a0046b2202240041002103200241003a00900320012802042104417f21050240024002400240034020042003460d01200241f0026a20036a200128020022062d00003a00002001200420056a3602042001200641016a3602002002200341016a22063a0090032005417f6a21052006210320064120470d000b20024190026a41086a2203200241f0026a41086a29030037030020024190026a41106a2205200241f0026a41106a29030037030020024190026a41186a2207200241f0026a41186a290300370300200220022903f00237039002200641ff0171411f4b0d010c020b200341ff0171450d01200241003a0090030c010b200241f0016a41086a2003290300370300200241f0016a41106a2005290300370300200241f0016a41186a200729030037030020022002290390023703f001024002400240200420066b22034108490d002001280200220529000021082001200341786a3602042001200541086a360200200241f0026a2001109b0220022802f4022205450d01200241fc026a280200210320022802f802210620022802f002210420024190026a200241f0026a41106a41e00010e9081a200241f0026a2001109b0220022802f402450d02200241206a200241f0026a41f00010e9081a200241086a2201200241f0016a41086a290300370300200241106a2207200241f0016a41106a290300370300200241186a2209200241f0016a41186a290300370300200220022903f00137030020024190016a20024190026a41e00010e9081a200041146a2003360200200020063602102000200536020c2000200436020820002008370300200041186a20024190016a41e00010e9081a200041f8006a200241206a41f00010e9081a20004180026a2009290300370300200041f8016a2007290300370300200041f0016a2001290300370300200041e8016a20022903003703000c040b2000410036020c0c030b2000410036020c0c020b2000410036020c02402003450d00200341246c21012005210303400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a280200102e0c030b2003410c6a280200450d02200341086a280200102e0c020b2003410c6a280200450d01200341086a280200102e0c010b200341086a280200450d00200341046a280200102e0b200341246a21032001415c6a22010d000b0b2006450d01200641246c450d012005102e0c010b2000410036020c0b200241a0046a24000bd80e03057f037e067f23004190046b2202240041002103200241003a00c8032001280204417f6a210402400240024002400240024002400240024003402004417f460d01200241a8036a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00c8032004417f6a21042005210320054120470d000b200241d0036a41086a2204200241a8036a41086a290300370300200241d0036a41106a2203200241a8036a41106a290300370300200241d0036a41186a2206200241a8036a41186a290300370300200220022903a8033703d003200541ff0171411f4d0d0120024188016a41086a2004290300220737030020024188016a41106a2003290300220837030020024188016a41186a20062903002209370300200241e8006a41186a2009370300200241e8006a41106a2008370300200241e8006a41086a2007370300200220022903d00322073703a8022002200737038801200220073703682002200110ab0120022802000d042002280204210641002103200241003a00c8032001280204417f6a210403402004417f460d03200241a8036a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00c8032004417f6a21042005210320054120470d000b200241d0036a41086a2203200241a8036a41086a290300370300200241d0036a41106a220a200241a8036a41106a290300370300200241d0036a41186a220b200241a8036a41186a290300370300200220022903a8033703d003200541ff0171411f4d0d03200241c8016a41086a20032903002207370300200241c8016a41106a200a2903002208370300200241c8016a41186a200b2903002209370300200241a8016a41186a2009370300200241a8016a41106a2008370300200241a8016a41086a2007370300200220022903d00322073703a802200220073703c801200220073703a80141002103200241003a00c80303402004417f460d06200241a8036a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00c8032004417f6a21042005210320054120470d000b200241d0036a41086a2204200241a8036a41086a290300370300200241d0036a41106a2203200241a8036a41106a290300370300200241d0036a41186a220a200241a8036a41186a290300370300200220022903a8033703d003200541ff0171411f4d0d0620024188026a41086a2004290300220737030020024188026a41106a2003290300220837030020024188026a41186a200a2903002209370300200241e8016a41186a2009370300200241e8016a41106a2008370300200241e8016a41086a2007370300200220022903d00322073703a8022002200737038802200220073703e801200241a8036a200110b50520022802a8032204450d0720022902ac032107200241c8006a41186a2201200241e8006a41186a290300370300200241c8006a41106a2203200241e8006a41106a290300370300200241c8006a41086a2205200241e8006a41086a290300370300200241286a41086a220a200241a8016a41086a290300370300200241286a41106a220b200241a8016a41106a290300370300200241286a41186a220c200241a8016a41186a290300370300200241086a41086a220d200241e8016a41086a290300370300200241086a41106a220e200241e8016a41106a290300370300200241086a41186a220f200241e8016a41186a29030037030020022002290368370348200220022903a801370328200220022903e801370308200020073702082000200436020420002006360200200041106a2002290348370200200041186a2005290300370200200041206a2003290300370200200041286a2001290300370200200041306a2002290328370200200041386a200a290300370200200041c0006a200b290300370200200041c8006a200c290300370200200041e8006a200f290300370200200041e0006a200e290300370200200041d8006a200d290300370200200041d0006a20022903083702000c080b200341ff0171450d00200241003a00c8030b20024188016a41086a200241a8026a41086a29030037030020024188016a41106a200241a8026a41106a29030037030020024188016a41186a200241a8026a41186a290300370300200220022903a80237038801200041003602040c060b200341ff0171450d00200241003a00c8030b200241c8016a41086a200241a8026a41086a290300370300200241c8016a41106a200241a8026a41106a290300370300200241c8016a41186a200241a8026a41186a290300370300200220022903a8023703c801200041003602040c040b200041003602040c030b200341ff0171450d00200241003a00c8030b20024188026a41086a200241a8026a41086a29030037030020024188026a41106a200241a8026a41106a29030037030020024188026a41186a200241a8026a41186a290300370300200220022903a80237038802200041003602040c010b200041003602040b20024190046a24000b0f00200028020020012002107441000b8a0201027f230041106b22022400200028020021002002410036020c02400240024002402001418001490d002001418010490d012002410c6a21032001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d410321010c030b200220013a000c2002410c6a2103410121010c020b20022001413f71418001723a000d2002200141067641c001723a000c2002410c6a2103410221010c010b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d410421010b2000200320011074200241106a240041000b6301017f230041206b2202240020022000280200360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a419cebc000200241086a103d2101200241206a240020010bdf0101087f0240200028020422020d0041000f0b2000280200210320012d002041ff01712104037f200241346a210020022f01322105410021060240024003400240200520062207470d00200521070c030b02400240024020012000412010ec082206450d00410121082006417f4c0d050c010b2004200041206a2d00002206460d01417f200420064720042006491b21080b200741016a2106200041216a210041012109200841016a0e03030201030b0b410121090b20090f0b024020030d0041000f0b2003417f6a2103200220074102746a41a0036a28020021020c000b0b980101057f0240200028020422020d0041000f0b200028020021030340200241346a210420022f013221054100210002400240034020052000460d0120012004412010ec082206450d02200041016a2100200441206a21042006417f4a0d000b2000417f6a21050b024020030d0041000f0b2003417f6a2103200220054102746a4194036a28020021020c010b0b200220004102746a41046a0b9a0101057f0240200028020422020d0041000f0b20002802002103034020024190026a210420022f018e0221054100210002400240034020052000460d0120012004412010ec082206450d02200041016a2100200441206a21042006417f4a0d000b2000417f6a21050b024020030d0041000f0b2003417f6a2103200220054102746a41f0046a28020021020c010b0b2002200041186c6a41046a0b960101057f0240200028020422020d0041000f0b200028020021030340200241e0006a210420022f015e21054100210002400240034020052000460d0120012004412010ec082206450d02200041016a2100200441206a21042006417f4a0d000b2000417f6a21050b024020030d0041000f0b2003417f6a2103200220054102746a41c0036a28020021020c010b0b200220004103746a0ba90301087f02400240024020012802042203450d00200128020021040c010b41a003102c2203450d0141002104200341003b01322003410036020020012003360204200141003602000b20022d002041ff017121050340200341346a210620032f0132210741002108024003400240200720082209470d00200721090c020b02400240024020022006412010ec082208450d004101210a2008417f4c0d040c010b2005200641206a2d00002208460d01417f200520084720052008491b210a0b200941016a2108200641216a2106200a41016a0e03020001020b0b20002004360204200041106a20013602002000410c6a2009360200200041086a2003360200200041013602000f0b02402004450d002004417f6a2104200320094102746a41a0036a28020021030c010b0b20004100360204200041106a20013602002000410c6a2009360200200041086a2003360200200041146a20022900003700002000411c6a200241086a290000370000200041246a200241106a2900003700002000412c6a200241186a290000370000200041346a200241206a2d00003a0000200041003602000f0b1036000bc01c03067f037e187f230041e0016b22032400200341206a41186a200141186a290000370300200341206a41106a200141106a290000370300200341206a41086a200141086a2900003703002003200129000037032002400240024002400240024002400240024002400240024002400240024020002802042204450d00200028020021050c010b419403102c2204450d0141002105200441003b01322004410036020020002004360204200041003602000b02400340200441346a210620042f01322107410021010240034020072001460d01200341206a2006412010ec082208450d03200141016a2101200641206a21062008417f4a0d000b2001417f6a21070b02402005450d002005417f6a2105200420074102746a4194036a28020021040c010b0b200341086a2003412c6a2902002209370300200341106a200341346a290200220a370300200341186a2003413c6a280200220136020020032003290224220b3703002003280220210c200341a0016a41186a22062001360200200341a0016a41106a2208200a370300200341a0016a41086a220520093703002003200b3703a001024020042f01322201410a4b0d00200341206a41186a2006280200360200200341206a41106a2008290300370300200341206a41086a2005290300370300200320032903a001370320200441346a2106200141016a21080240200741016a220520014b220d0d00200620054105746a200620074105746a20082007417f736a41057410ea081a0b200620074105746a2201200c360000200120032903203700042001410c6a200341286a290300370000200141146a200341306a2903003700002001411c6a200341386a280200360000200441046a21010240200d0d00200120054102746a200120074102746a20082007417f736a41027410ea081a0b200120074102746a2002360200200420083b01320c0d0b410521014100210e02400240200741054f0d0041042101200721080c010b41052108024002402007417b6a0e020201000b200741796a21084101210e410621010c010b410021084101210e0b419403102c2206450d01200641003b013220064100360200200620042f0132220d2001417f736a22073b0132200441346a220f20014105746a22052800002110200341386a2005411c6a280000360200200341306a200541146a290000370300200341286a2005410c6a290000370300200320052900043703202007410c4f0d02200d200141016a22056b2007470d03200441046a220d20014102746a2802002111200641346a200f20054105746a200741057410e9081a200641046a200d20054102746a200741027410e9081a200420013b0132200341c0016a41086a200341206a41086a2205290300370300200341c0016a41106a200341206a41106a220d290300370300200341c0016a41186a200341206a41186a220f280200360200200320032903203703c00120062004200e1b22072f01322101200f200341a0016a41186a280200360200200d200341a0016a41106a2903003703002005200341a0016a41086a290300370300200320032903a001370320200741346a210e200141016a21120240200841016a221320014b22140d00200e20134105746a200e20084105746a20122008417f736a41057410ea081a0b200e20084105746a2201200c360000200120032903203700042001410c6a2005290300370000200141146a200d2903003700002001411c6a200f280200360000200741046a2101024020140d00200120134102746a200120084102746a20122008417f736a41027410ea081a0b200120084102746a2002360200200720123b013220034180016a41086a2215200341c0016a41086a2216290300220937030020034180016a41106a2217200341c0016a41106a2218290300220a37030020034180016a41186a2219200341c0016a41186a221a2802002201360200200320032903c001220b37038001200341e0006a41186a22122001360200200341e0006a41106a2213200a370300200341e0006a41086a221420093703002003200b370360024002400240200428020022020d004100211b0c010b4100211b2011211c2006211d2010211e034020042f01302104200341a0016a41186a221f2012280200360200200341a0016a41106a22202013290300370300200341a0016a41086a22212014290300370300200320032903603703a0014101450d0720022f0132220e410b490d024100210541042101024020044105490d0020042101024002402004417b6a0e020201000b200441796a210441012105410621010c010b4100210441012105410521010b41c403102c2206450d04200641003b013220064100360200200620022f013222112001417f736a22083b0132200241346a222220014105746a22072800002110200341206a41186a220c2007411c6a280000360200200341206a41106a220d200741146a290000370300200341206a41086a220f2007410c6a290000370300200320072900043703202008410c4f0d082011200141016a22076b2008470d09200241046a222320014102746a2802002111200641346a202220074105746a200841057410e9081a200641046a2023200741027422076a200841027410e9081a200220013b01322016200f2903003703002018200d290300370300201a200c280200360200200320032903203703c00120062f0132220841016a21222008410c4f0d0a200e20016b22012022470d0b201b41016a211b20064194036a200220076a4194036a200141027410e9081a4100210102400340200620014102746a4194036a280200220720013b0130200720063602002001200120084922076a220120084b0d0120070d000b0b2019201a2802003602002017201829030037030020152016290300370300200320032903c001370380012006200220051b22072f0132210e200c201f280200360200200d2020290300370300200f2021290300370300200320032903a001370320200741346a2108200e41016a21050240200441016a2201200e4b221f0d00200820014105746a200820044105746a2004417f7320056a41057410ea081a0b200820044105746a2208201e360000200820032903203700042008410c6a200f290300370000200841146a200d2903003700002008411c6a200c280200360000200741046a21080240201f0d00200820014102746a200820044102746a2004417f7320056a41027410ea081a0b20082004410274220d6a201c36020020074194036a21080240200441026a220f200e41026a220c4f0d002008200f4102746a200820014102746a2001417f73200c6a41027410ea081a0b200820014102746a201d360200200720053b013202402001200c4f0d002007200d6a4198036a2101034020012802002208200441016a22043b013020082007360200200141046a210120052004470d000b0b2014201529030037030020132017290300370300201220192802003602002003200329038001370360200221042002280200220121022011211c2006211d2010211e20010d000b0b200341c0006a41186a20122802002201360200200341c0006a41106a20132903002209370300200341c0006a41086a2014290300220a37030020032003290360220b370340201a2001360200201820093703002016200a3703002003200b3703c00120002802042208450d0a2000280200210741c403102c2201450d022001200836029403200141003b013220014100360200200841003b013020082001360200200020013602042000200741016a360200200341206a41186a200341c0016a41186a280200360200200341206a41106a200341c0016a41106a290300370300200341206a41086a200341c0016a41086a290300370300200320032903c0013703202007201b470d0b20012f01322207410b4f0d0c200120074105746a220841346a2010360000200841386a2003290320370000200841c0006a200341286a290300370000200841c8006a200341306a290300370000200841d0006a200341386a2802003600002001200741016a22083b0132200120084102746a4194036a2006360200200120074102746a41046a2011360200200620083b0130200620013602002000200028020841016a3602080c0e0b20022f01322108200341206a41186a220c200341a0016a41186a280200360200200341206a41106a220d200341a0016a41106a290300370300200341206a41086a220f200341a0016a41086a290300370300200320032903a001370320200441016a2101200241346a2106200841016a21070240200420084f22050d00200620014105746a200620044105746a2004417f7320076a41057410ea081a0b200620044105746a2206201e360000200620032903203700042006410c6a200f290300370000200641146a200d2903003700002006411c6a200c280200360000200241046a2106024020050d00200620014102746a200620044102746a2004417f7320076a41027410ea081a0b20062004410274220c6a201c36020020024194036a2106200841026a2104024020050d00200c20066a41086a200620014102746a2001417f7320046a41027410ea081a0b200620014102746a201d360200200220073b0132200120044f0d0c200841016a210720022001417f6a22014102746a4198036a2106034020062802002208200141016a22013b013020082002360200200641046a210620072001470d000c0d0b0b200420014102746a41046a20023602000c0c0b1036000b2007410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b41ac9cc700413541e49cc7001039000b2008410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b2022410c41f49cc700104d000b41f49bc7004128419c9cc7001039000b41e8aac700412b4194abc7001039000b41e899c700413041989ac7001039000b41a89ac700412041c89ac7001039000b2000200028020841016a3602080b200341e0016a24000beb0201067f230041206b220124000240024002402000410c6a28020022022002417f6a200041046a28020020002802006b716b4101470d00200221030240024002402002450d00200220026a22032002490d04200141106a41086a4104360200200120024102743602142001200028020836021020012003410274200341ffffffff0371200346410274200141106a107d200141086a280200210320012802004101460d01200020012802043602082000410c6a200341027622033602000b20032002410174470d0420002802002204200041046a28020022054d0d022005200220046b22064f0d01200041086a280200220320024102746a2003200541027410e9081a200041046a2200200028020020026a3602000c020b2003450d021036000b200041086a2802002202200320066b22034102746a200220044102746a200641027410e9081a200020033602000b200141206a24000f0b1038000b41c4ebc000412b41f0ebc0001039000bd20302037f017e23004180126b2203240020034280808080802037020c2003200236021c200320013602182003200341186a360208200341b80e6a200341086a10ed010240024020032903a00f4203510d00200341f00a6a200341b80e6a41c80310e9081a02402003280208220228020422044104490d0020022802002205280000210120022004417c6a3602042002200541046a360200200341880a6a200341f00a6a41e80010e9081a20032903d80b2106200341b0076a200341e00b6a41d80210e9081a0c020b024020032903d80b4202510d0020032d00f00a41ff01714102470d0020032802f80a450d0020032802f40a102e0b200341880c6a108b020b420321060b200341c8066a200341880a6a41e80010e9081a200341f0036a200341b0076a41d80210e9081a0240024020064203510d00200341206a200341c8066a41e80010e9081a200320063703880120034190016a200341f0036a41d80210e9081a200320013602e803024020032802082802040d002000200341206a41d00310e9081a0c020b20004203370368024020064202510d0020032d002041ff01714102470d002003280228450d002003280224102e0b200341b8016a108b020c010b200042033703680b20034180126a24000bef1a03037f037e197f230041f0036b2205240020012802042106200128020021072001280208220141086a2900002108200141106a29000021092001290000210a200541186a220b200141186a290000370300200541106a220c2009370300200541086a220d20083703002005200a3703002003410174210e2005410772210f200541c8016a41186a2110200541c8016a410c6a2111200541c8016a41206a211241002113410021144100211502400240024002400240024002400240024002400240024002400240024002400340201541017621010240024020154101710d00200120034b0d03200541003a00d001200520013602cc01200520023602c8010c010b200120034b0d03200120034f0d04200541013a00d001200520023602c801200520013602cc012005200220016a2d000041f001713a00d1010b200541d0036a20072005200541c8016a200628020c110400024020052802d00322160d00200541c8016a41086a2213200541086a290300370300200541c8016a41106a2203200541106a290300370300200541c8016a41186a2217200541186a290300370300200520052903003703c8014130102c2201450d10200120052903c80137000120012005290020370021200120144100473a0000200141096a2013290300370000200141116a2003290300370000200141196a2017290300370000200141286a200541276a29000037000020004101360200200020013602040c0f0b20052802d803210120052802d4032118024002400240200428020c20144b0d002001417f4c0d130240024020010d00410121170c010b2001102c2217450d130b20172016200110e90821192010200b290300370300200541c8016a41106a221a200c290300370300200541c8016a41086a221b200d290300370300200520052903003703c801024020042802082217200441046a221c280200470d00201741016a221d2017490d142017410174221e201d201e201d4b1b221d4104201d41044b1bad42307e2208422088a745410274211d2008a7211e0240024020170d00200541003602200c010b200541043602282005201741306c360224200520042802003602200b200541d0036a201e201d200541206a107d20052802d803211720052802d0034101460d02200420052802d403360200201c201741306e360200200428020821170b2004280200201741306c6a2217201936020420172014360200201720052903c8013702102017410c6a2001360200201741086a2001360200201741186a201b290300370200201741206a201a290300370200201741286a20102903003702002004200428020841016a3602080b200541c8016a2016200110a80220052d00c8014101460d0e201441016a21140c010b20170d100c110b034020052802e401211f20052802e001212020052802dc01212120052802d801211920052802d401211720052802d001211a20052802cc012101200541206a201241a80110e9081a200528029403211b200528029003211c024002400240024020010e05100f000102100b410021010240201741017420196b2222200e20136b221b201b20224b1b2223450d000340201320016a221b410176221c20034f0d0a201920016a221d410176221e20174f0d0b2002201c6a2d0000221c410f71201c41f00171410476201b4101711b201a201e6a2d0000221b410f71201b410476201d4101711b470d012023200141016a2201470d000b202321010b024020012022470d00202221010c030b200042003702000c110b2005201f3602dc01200520203602d801200520213602d401200520193602d001200520173602cc012005201a3602c8012010200541206a41a80110e9081a02400240200e2013460d002013410176220120034f0d0b200541c8016a200220016a2d00002201410f71200141047620134101711b410c6c6a220128020022214102470d01200042003702000c120b410021010240201c450d00201b417f4c0d1502400240201b0d00410121010c010b201b102c2201450d150b2001201c201b10e9081a0b20002001360204200041003602002000410c6a201b360200200041086a201b3602000c110b20012802042120200141086a280200211f41012122410121010c010b20052802a0032123200528029c03212220052802980321012005201f3602d001200520203602cc01200520213602c8012011200541206a41a80110e9081a20052001360284032005201b360280032005201c3602fc02410021010240201741017420196b221f200e20136b22212021201f4b1b2220450d000340201320016a221b410176221c20034f0d0b201920016a221d410176221e20174f0d0c2002201c6a2d0000221c410f71201c41f00171410476201b4101711b201a201e6a2d0000221b410f71201b410476201d4101711b470d012020200141016a2201470d000b202021010b02402001201f460d00200042003702000c100b024002402021201f460d002013201f6a2201410176221720034f0d0d200541c8016a200220176a2d00002217410f71201741047620014101711b410c6c6a221728020022214102470d01200042003702000c110b4100210102402022450d002023417f4c0d140240024020230d00410121010c010b2023102c2201450d140b20012022202310e9081a0b20002001360204200041003602002000410c6a2023360200200041086a20233602000c100b201f41016a2122201f41016a210120172802042120201741086a280200211f0b200120156a2115201320226a211302402021450d00200541c8016a2020201f10a80220052d00c8014101460d0e0c010b0b02400240201f4120460d002010200b290300370300200541c8016a41106a2201200c290300370300200541c8016a41086a2217200d290300370300200520052903003703c801201f417f4c0d1202400240201f0d00410121190c010b201f102c2219450d120b20192020201f10e9082119200541d0036a41186a221a2010290300370300200541d0036a41106a221b2001290300370300200541d0036a41086a221c2017290300370300200520052903c8013703d0034130102c2201450d11200141043a0000200120052903d003370001200120052f00c8013b00212001201f36002c2001201f36002820012019360024200141096a201c290300370000200141116a201b290300370000200141196a201a290300370000200141236a200541c8016a41026a2d00003a0000410121170c010b41002117200541c8016a41026a41003a0000200541003b01c80120202f00002119200541cc036a41026a202041026a2d00003a00002020411f6a2d0000211a202041176a29000021082020280003210120202900072109200541d0036a41086a221b2020410f6a290000370300200541d0036a41106a221c2008370300200541d0036a41186a221d201a3a0000200520193b01cc03200520093703d0032010201d2d00003a0000200541c8016a41106a201c290300370300200541c8016a41086a201b290300370300200520052903d0033703c8010b200541c8036a41026a2219200541cc036a41026a2d00003a0000200541a8036a41086a221a200541c8016a41086a290300370300200541a8036a41106a221b200541c8016a41106a290300370300200541a8036a41186a221c2010280200360200200520052f01cc033b01c803200520052903c8013703a803024020170d00200f20052903a803370000200f41086a201a290300370000200f41106a201b290300370000200f41186a201c2d00003a0000200520052f01c8033b010020052001360003200520192d00003a00022018450d012016102e0c010b0b20004101360200200020013602040c0c0b2001200341a0f0cc00104d000b2001200341b0f0cc00104d000b2001200341c0f0cc00103c000b201c200341e0efcc00103c000b201e201741e0efcc00103c000b2001200341e0efcc00103c000b201c200341e0efcc00103c000b201e201741e0efcc00103c000b2017200341e0efcc00103c000b41002104024002400240201741017420196b200e20136b2215470d004100210441002101024002402015450d00410021010340201920016a221b410176221c20174f0d04201320016a221d410176221e20034f0d05201a201c6a2d0000221c410f71201c41f00171410476201b4101711b2002201e6a2d0000221b410f71201b410476201d4101711b470d012015200141016a2201470d000c020b0b20012015470d010b2020417f4c0d080240024020200d00410121040c010b2020102c2204450d080b20042021202010e9081a2020ad220842208620088421080b2000200436020420004100360200200041086a20083702000c040b201c201741e0efcc00103c000b201e200341e0efcc00103c000b200042003702000c010b20052d00c9012113200541d0036a41086a2203200541086a290300370300200541d0036a41106a2217200541106a290300370300200541d0036a41186a2219200541186a290300370300200520052903003703d0034130102c2201450d02200141033a0000200120052903d003370001200120133a0021200120052901a803370122200141096a2003290300370000200141116a2017290300370000200141196a2019290300370000200141286a200541ae036a29010037010020004101360200200020013602040b2018450d002016102e0b200541f0036a24000f0b1036000b1038000b9e1203027f027e127f230041b0096b2203240041002104200341003602a806200320023602a406200320013602a006420321050240024020020d0042002106410021070c010b41012107200341013602a80642002106024020012d000022080d00420021050c010b0240024002400240024002400240024002400240200841c00171220941c001460d0002402009418001460d00200941c000470d0b2008413f712208413f470d05410221074141210803402007417f6a20024f0d03200320073602a8060240200120076a417f6a2d0000220941ff01460d00200920086b21080c0c0b200841817e6a2108200741016a2207418302470d000b41ffff03210841820221070c0a0b2008413f712208413f470d05410221074141210803402007417f6a20024f0d03200320073602a8060240200120076a417f6a2d0000220941ff01460d00200920086b21080c0a0b200841817e6a2108200741016a2207418302470d000b41ffff03210841820221070c080b2008413f712208413f470d05410221074141210803402007417f6a20024f0d03200320073602a8060240200120076a417f6a2d0000220941ff01460d00200920086b21080c080b200841817e6a2108200741016a2207418302470d000b41ffff03210841820221070c060b2007417f6a21070c080b2007417f6a21070c070b2007417f6a21070c060b410121070c040b410121070c020b410121070b2008ad422086428002842106420121050c020b2008ad4220862106420121050c010b2008ad4220862106420221050b2006422088a721094101210a41012108024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002402005200684a741ff01710e040500010a050b2009410171220b450d03200720024f0d0141002108200120076a2d00004110490d030c090b2009410171220b450d010240200720024f0d0041002108200120076a2d00004110490d020c090b2007200241f4cec800103c000b200720024184cfc800103c0c030b2007200941016a4101766a220c20024b0d052003200c3602a806200341106a200341a0066a10d70420032802100d0520032802a806220d20032802146a220e20032802a4064b0d052003200e3602a806200341e0046a200341f0076a41c00110e9081a410121040c010b2007200941016a4101766a220c20024b0d042003200c3602a806200c41026a220820024b0d04200320083602a806200c417e4f0d062001200c6a2f00002104410021094100210d0240200642800283500d00200341086a200341a0066a10d70420032802080d054101210820032802a806220e200328020c6a220f20032802a4064b0d062003200f3602a8064101210d0b200341023602a40920034102360298092003410236028c092003410236028009200341023602f408200341023602e808200341023602dc08200341023602d008200341023602c408200341023602b808200341023602ac08200341023602a00820034102360294082003410236028808200341023602fc07200341023602f007200341f0076a2108200441ffff037121100340024020102009410f7176410171450d002003200341a0066a10d70420032802000d0620032802a8062211200328020422126a220420032802a4064b0d06200320043602a806200841086a2004360200200841046a2011360200200820124120473602000b2008410c6a2108200941016a22094110470d000b200341e0046a200341f0076a41c00110e9081a410421040b200341a0036a200341e0046a41c00110e9081a200341c0016a41186a200f360200200341c0016a41146a200e360200200341c0016a41106a200d360200200341c0016a410c6a200b360200200341c0016a41086a200c360200200320073602c401200320043602c001200341c0016a411c6a200341a0036a41c00110e9081a4100210a4100211320040e050e010000020e0b000b200c2007490d04200c20024b0d05200e200d490d06200e20024b0d07200c20076b2109200120076a21082001200d6a2114200e200d6b2115410121130c0c0b200341023602a40920034102360298092003410236028c092003410236028009200341023602f408200341023602e808200341023602dc08200341023602d008200341023602c408200341023602b808200341023602ac08200341023602a00820034102360294082003410236028808200341023602fc07200341023602f007410021080340410221040240200341c0016a20086a2209411c6a22102802004102460d00200941246a2802002111200941206a28020021090240024020102802004101470d0020112009490d0b41012104201120024d0d012011200241d4f2cc00104d000b20112009490d0b41002104201120024b0d0c0b201120096b2111200120096a21120b200341f0076a20086a22092004360200200941086a2011360200200941046a20123602002008410c6a220841c001460d0b0c000b0b410121080b200341a0036a200341e0046a41c00110e9081a200020083a00010c0a0b200c200841e4cec8001057000b2007200c41c4f3cc001057000b200c200241c4f3cc00104d000b200d200e41d4f3cc001057000b200e200241d4f3cc00104d000b2009201141d4f2cc001057000b2009201141e4f2cc001057000b2011200241e4f2cc00104d000b02400240200d4101460d00410021120c010b200f200e490d03200f20024b0d04200f200e6b21112001200e6a21120b200c2007490d04200c20024b0d05200341f8076a280200211620032802f407211520032802f0072114200341186a200341fc076a41a80110e9081a200c20076b2109200120076a2108200341ac096a2802002110200341a8096a280200211720032802a4092118410421130b2000411c6a2016360200200041186a2015360200200041146a2014360200200041106a200b3602002000410c6a2009360200200041086a2008360200200041046a2013360200200041206a200341186a41a80110e9081a200041d8016a2011360200200041d4016a2012360200200041d0016a2010360200200041cc016a2017360200200041c8016a20183602000b2000200a3a0000200341b0096a24000f0b200e200f41e4f3cc001057000b200f200241e4f3cc00104d000b2007200c41c4f3cc001057000b200c200241c4f3cc00104d000b7e01027f230041306b22022400200241146a410436020020024188e2cc003602102002410436020c20024180e2cc003602082001411c6a2802002103200128021821012002412c6a41023602002002420237021c20024190e2cc003602182002200241086a36022820012003200241186a103d2101200241306a240020010bc81703037f037e197f230041f0036b2204240020012802042105200128020021062001280208220141086a2900002107200141106a290000210820012900002109200441186a220a200141186a290000370300200441106a220b2008370300200441086a220c2007370300200420093703002003410174210d2004410772210e200441c8016a41186a210f200441c8016a410c6a2110200441c8016a41206a211141002112410021134100211402400240024002400240024002400240024002400240024002400240024002400340201441017621010240024020144101710d00200120034b0d03200441003a00d001200420013602cc01200420023602c8010c010b200120034b0d03200120034f0d04200441013a00d001200420023602c801200420013602cc012004200220016a2d000041f001713a00d1010b200441d0036a20062004200441c8016a200528020c11040002400240024020042802d00322150d00200441c8016a41086a2212200441086a290300370300200441c8016a41106a2203200441106a290300370300200441c8016a41186a2216200441186a290300370300200420042903003703c8014130102c22010d010c130b20042802d4032117200441c8016a201520042802d80310a80220042d00c8014101460d0f201341016a21130c010b200120042903c80137000120012004290020370021200120134100473a0000200141096a2012290300370000200141116a2003290300370000200141196a2016290300370000200141286a200441276a29000037000020004101360200200020013602040c100b034020042802e401211820042802e001211920042802dc01211a20042802d801211b20042802d401211620042802d001211c20042802cc012101200441206a201141a80110e9081a200428029403211d200428029003211e024002400240024020010e05110f000102110b4100210102402016410174201b6b221f200d20126b221d201d201f4b1b2220450d000340201220016a221d410176221e20034f0d0a201b20016a2221410176222220164f0d0b2002201e6a2d0000221e410f71201e41f00171410476201d4101711b201c20226a2d0000221d410f71201d41047620214101711b470d012020200141016a2201470d000b202021010b02402001201f470d00201f21010c030b200042003702000c120b200420183602dc01200420193602d8012004201a3602d4012004201b3602d001200420163602cc012004201c3602c801200f200441206a41a80110e9081a02400240200d2012460d002012410176220120034f0d0b200441c8016a200220016a2d00002201410f71200141047620124101711b410c6c6a2201280200221a4102470d01200042003702000c130b410021010240201e450d00201d417f4c0d1002400240201d0d00410121010c010b201d102c2201450d160b2001201e201d10e9081a0b20002001360204200041003602002000410c6a201d360200200041086a201d3602000c120b20012802042119200141086a28020021184101211f410121010c010b20042802a0032120200428029c03211f2004280298032101200420183602d001200420193602cc012004201a3602c8012010200441206a41a80110e9081a20042001360284032004201d360280032004201e3602fc024100210102402016410174201b6b2218200d20126b221a201a20184b1b2219450d000340201220016a221d410176221e20034f0d0b201b20016a2221410176222220164f0d0c2002201e6a2d0000221e410f71201e41f00171410476201d4101711b201c20226a2d0000221d410f71201d41047620214101711b470d012019200141016a2201470d000b201921010b024020012018460d00200042003702000c110b02400240201a2018460d00201220186a2201410176221620034f0d0d200441c8016a200220166a2d00002216410f71201641047620014101711b410c6c6a2216280200221a4102470d01200042003702000c120b410021010240201f450d002020417f4c0d0f0240024020200d00410121010c010b2020102c2201450d150b2001201f202010e9081a0b20002001360204200041003602002000410c6a2020360200200041086a20203602000c110b201841016a211f201841016a210120162802042119201641086a28020021180b200120146a21142012201f6a21120240201a450d00200441c8016a2019201810a80220042d00c8014101460d0f0c010b0b0240024020184120460d00200f200a290300370300200441c8016a41106a2201200b290300370300200441c8016a41086a2216200c290300370300200420042903003703c8012018417f4c0d0d0240024020180d004101211b0c010b2018102c221b450d130b201b2019201810e908211b200441d0036a41186a221c200f290300370300200441d0036a41106a221d2001290300370300200441d0036a41086a221e2016290300370300200420042903c8013703d0034130102c2201450d12200141043a0000200120042903d003370001200120042f00c8013b00212001201836002c200120183600282001201b360024200141096a201e290300370000200141116a201d290300370000200141196a201c290300370000200141236a200441c8016a41026a2d00003a0000410121160c010b41002116200441c8016a41026a41003a0000200441003b01c80120192f0000211b200441cc036a41026a201941026a2d00003a00002019411f6a2d0000211c201941176a29000021072019280003210120192900072108200441d0036a41086a221d2019410f6a290000370300200441d0036a41106a221e2007370300200441d0036a41186a2221201c3a00002004201b3b01cc03200420083703d003200f20212d00003a0000200441c8016a41106a201e290300370300200441c8016a41086a201d290300370300200420042903d0033703c8010b200441c8036a41026a221b200441cc036a41026a2d00003a0000200441a8036a41086a221c200441c8016a41086a290300370300200441a8036a41106a221d200441c8016a41106a290300370300200441a8036a41186a221e200f280200360200200420042f01cc033b01c803200420042903c8013703a803024020160d00200e20042903a803370000200e41086a201c290300370000200e41106a201d290300370000200e41186a201e2d00003a0000200420042f01c8033b0100200420013600032004201b2d00003a00022017450d012015102e0c010b0b20004101360200200020013602040c0d0b2001200341a0f0cc00104d000b2001200341b0f0cc00104d000b2001200341c0f0cc00103c000b201e200341e0efcc00103c000b2022201641e0efcc00103c000b2001200341e0efcc00103c000b201e200341e0efcc00103c000b2022201641e0efcc00103c000b2016200341e0efcc00103c000b410021180240024002402016410174201b6b200d20126b2214470d004100211841002101024002402014450d00410021010340201b20016a221d410176221e20164f0d04201220016a2221410176222220034f0d05201c201e6a2d0000221e410f71201e41f00171410476201d4101711b200220226a2d0000221d410f71201d41047620214101711b470d012014200141016a2201470d000c020b0b20012014470d010b2019417f4c0d030240024020190d00410121180c010b2019102c2218450d090b2018201a201910e9081a2019ad220742208620078421070b2000201836020420004100360200200041086a20073702000c050b201e201641e0efcc00103c000b2022200341e0efcc00103c000b1038000b200042003702000c010b20042d00c9012112200441d0036a41086a2203200441086a290300370300200441d0036a41106a2216200441106a290300370300200441d0036a41186a221b200441186a290300370300200420042903003703d0034130102c2201450d02200141033a0000200120042903d003370001200120123a0021200120042901a803370122200141096a2003290300370000200141116a2016290300370000200141196a201b290300370000200141286a200441ae036a29010037010020004101360200200020013602040b2017450d002015102e0b200441f0036a24000f0b1036000b9f0402027f037e230041f0006b2201240002404101102c22020d001036000b200241003a0000410041003502e8f54c200141d0006aad7c42adfed5e4d485fda8d8007e42218922033e02e8f54c200141c0006a41e8f5cc00ad220442a4bb99fed1a0bbb02385420042adfed5e4d485fda8d800420010e808200141206a200342a4bb99fed1a0bbb02385420042adfed5e4d485fda8d800420010e808200141306a200442c5ecb3fec9ecf7c2c30085420042adfed5e4d485fda8d800420010e808200141106a200342c5ecb3fec9ecf7c2c30085420042adfed5e4d485fda8d800420010e80820012003200485420042adfed5e4d485fda8d800420010e808200141d0006a41aad3c800410110b001200041286a4200370300200041246a41d0a1c00036020020004100360220200041346a428180808010370200200020023602302000200129005037003c200041c4006a200141d0006a41086a290000370000200041cc006a200141e0006a290000370000200041d4006a200141e8006a29000037000020002003200141c0006a41086a2903002001290340857c200141086a29030020012903008542cf829ebbefefde82147c2205893703002000200141106a41086a29030020012903108520047c20054230888937031820002003200141306a41086a2903002001290330857c2005422088893703102000200141206a41086a29030020012903208520047c200542108889370308200141f0006a24000bfd0101057f2000410c6a280200200028020822016b220241e0006d210302402002450d002001200341e0006c6a2104034002402001220541386a2802002201450d00200141d8006c2102200528023041306a21010340200128020022032003280200417f6a3602000240200128020022032802000d00200341046a22032003280200417f6a3602002001280200220341046a2802000d002003102e0b200141d8006a2101200241a87f6a22020d000b0b200541e0006a21010240200541346a2802002202450d00200241d8006c450d002005280230102e0b20012004470d000b0b024020002802042201450d00200141e0006c450d002000280200102e0b0b130020004109360204200041f0ecc0003602000bb10201027f230041206b220424000240024002400240024020022001413c6a412010ec080d00200141386a2802002202417f4c0d01200128023021050240024020020d00410121010c010b2002102c2201450d030b200020023602042000200136020020012005200210e9081a200041086a20023602000c040b200441186a200241186a290000370300200441106a200241106a290000370300200441086a200241086a290000370300200420022900003703002001200410af022202450d02200228020c4101480d0220022802082201417f4c0d00200228020021050240024020010d00410121020c010b2001102c2202450d020b200020013602042000200236020020022005200110e9081a200041086a20013602000c030b1038000b1036000b200041003602000b200441206a24000be10303017f047e087f230041306b22022400200241206a20002903182000290308852203200141186a2900008542002000290310220420002903002205852206200129001085420010e808200241106a2003200141086a2900008542002006200129000085420010e8082002200442002004200241106a41086a2903002002290310857c2004200241206a41086a2903002002290320857c200542adfed5e4d485fda8d8007e42a0cbbf9599b5a19f0a7c85421789854217892203420010e808200041246a280200220720002802202208200241086a290300200229030085200389a722097122006a280000220a200941197641818284086c220b732209417f73200941fffdfb776a71418081828478712109200041046a200871210c4104210d024003400240024020090d00200d21090340200c21000240200a200a4101747141808182847871450d004100210e0c050b2008200020096a41046a71210c200941046a220d2109200b200720006a280000220a73220e417f73200e41fffdfb776a7141808182847871220e450d000c020b0b2009210e20070d004100210e0c020b200e417f6a200e71210920012007410020082000200e684103766a716b41306c6a41506a220e412010ec080d000b0b200241306a2400200e41206a4100200e1b0bb60301057f230041e0006b22052400024002402004417f4c0d000240024020040d00410121060c010b2004102c2206450d020b20062003200410e9082107410021060240200141386a2802002004470d0020072001280230200410ec084521060b02402004450d002007102e0b024002402006450d002000200129003c370000200041186a200141d4006a290000370000200041106a200141cc006a290000370000200041086a200141c4006a2900003700000c010b20052003200410b001200541206a41186a200541186a2207290000370300200541206a41106a200541106a2208290000370300200541206a41086a200541086a220929000037030020052005290000370320200541c0006a41086a200241086a280200360200200520022902003703400240024020040d00410121060c010b2004102c2206450d030b200520043602542005200636025020062003200410e9081a200520043602582001200541206a200541c0006a200541d0006a10b102200041186a2007290000370000200041106a2008290000370000200041086a2009290000370000200020052900003700000b200541e0006a24000f0b1038000b1036000be50301047f23004180016b220424000240024020032802082205200041386a280200470d00200328020022062000280230200510ec080d00200341046a280200450d012006102e0c010b200441c0006a41186a2205200141186a290000370300200441c0006a41106a2206200141106a290000370300200441c0006a41086a2207200141086a2900003703002004200129000037034020042000200441c0006a10b202024020042903004201520d00200441c0006a41286a200441306a290300370300200441c0006a41206a200441286a2903003703002005200441206a2903003703002006200441186a2903003703002007200441106a29030037030020042004290308370340200441f0006a41086a200341086a2802003602002004410136027c20042003290200370370200441c0006a200441f0006a10b3020c010b0240200441106a2802002205417c6a2201280200220041004a0d00200541706a2106200441c0006a41086a2207200341086a280200360200200420032902003703400240200541746a280200450d002006280200102e200128020021000b20062004290340370200200641086a20072802003602002001200041016a3602000c010b2001200041016a360200200341046a280200450d002003280200102e0b20044180016a24000b880503017f047e097f230041306b22032400200341206a20012903182001290308852204200241186a2900008542002001290310220520012903002206852207200229001085420010e808200341106a2004200241086a2900008542002007200229000085420010e8082003200542002005200341106a41086a2903002003290310857c2005200341206a41086a2903002003290320857c200642adfed5e4d485fda8d8007e42a0cbbf9599b5a19f0a7c85421789854217892204420010e808200141246a280200220820012802202209200341086a2903002003290300852004892205a7220a71220b6a280000220c200a41197641818284086c220d73220a417f73200a41fffdfb776a7141808182847871210e200b41046a200971210f410421100240024003400240200e0d002010210a0340200f210b200c200c41017471418081828478710d032009200b200a6a41046a71210f200a41046a2210210a200d2008200b6a280000220c73220e417f73200e41fffdfb776a7141808182847871220e450d000b0b2008450d01200e68210a200e417f6a200e71210e200841002009200b200a4103766a716b41306c6a220a41506a2002412010ec080d000b2000200537030820004200370300200041186a41013a0000200041146a2001360200200041106a200a360200200041196a2002290000370000200041216a200241086a290000370000200041296a200241106a290000370000200041316a200241186a2900003700000c010b2000200537030820004201370300200041106a2001360200200041146a20022900003700002000411c6a200241086a290000370000200041246a200241106a2900003700002000412c6a200241186a2900003700000b200341306a24000bca0503027f077e067f23004180016b2202240020022000280208220336020c20002903002104200241106a41186a200041246a2902002205370300200241106a41106a2000411c6a2902002206370300200241106a41086a200041146a2902002207370300200241106a41286a200141086a29020022083703002002200029020c220937031020022001290200220a370330200241c0006a41286a2008370300200241c0006a41206a200a370300200241c0006a41186a2005370300200241c0006a41106a2006370300200241c0006a41086a200737030020022009370340200341206a210b2003280220220c2004a7220d712101200341246a280200210e4104210003402001220f20006a200c712101200041046a2100200e200f6a280000418081828478712210450d000b0240200e201068410376200f6a200c7122006a2c000022014100480d00200e200e280200418081828478716841037622006a2d000021010b200341286a280200210f024020014101712210450d00200f0d00200241f0006a200b2002410c6a10b4022003280220220c200d712101200341246a280200210e4104210003402001220f20006a200c712101200041046a2100200e200f6a28000041808182847871220b450d000b0240200e200b68410376200f6a200c7122006a2c00004100480d00200e280200418081828478716841037621000b2003280228210f0b2003200f20106b360228200e20006a200d41197622013a0000200c2000417c6a71200e6a41046a20013a0000200e410020006b41306c6a41506a220041286a200241c0006a41286a290300370200200041206a200241c0006a41206a290300370200200041186a200241c0006a41186a290300370200200041106a200241c0006a41106a290300370200200041086a200241c0006a41086a290300370200200020022903403702002003412c6a2200200028020041016a36020020024180016a24000be91007077f017e077f017e027f027e017f23004180016b220324000240024002400240200128020c220441016a22052004490d000240200520012802002206200641016a220741037641076c20064108491b22064101764b0d004100210641002105024003400240024020064101710d00200520074f0d0320052106200541016a21050c010b200541036a220620054922080d0220062007492209450d022007200541046a20081b200720091b21050b200141046a28020020066a220620062802002206410776417f73418182840871200641fffefdfb07726a360200410121060c000b0b200141046a2802002105200128020041016a22064104490d02200520066a20052800003600000c030b024002400240024002402005200641016a2206200520064b1b22050d0041d0a1c000210841002109410021050c010b02400240200541074b0d004104410820054104491b21050c010b200541ffffffff01712005470d04417f2005410374220541076e417f6a677641016a41012005410d4b1b21050b2005ad42307e220a422088a70d02200aa72206200541046a22096a22082006490d022008102c2208450d01200820066a220841ff01200910eb081a2005417f6a2209200541037641076c20094108491b21050b200841506a210b200520046b210c200141046a280200220d41046a210e200d20076a210f200d280200417f7341808182847871211020022802002111034002400240024020100d000340200e200f4f0d02200d41c07e6a210d200e2802002105200e41046a2206210e2005418081828478712205418081828478460d000b2005418081828478732207417f6a20077121102006210e0c020b200d450d00201021072010417f6a20107121100c010b2001200436020c2001200c360208200041003602002001280200210520012009360200200141046a22062802002107200620083602002005450d082007200541016aad42307ea76b102e0c080b41002105200341106a20112903182011290308852212200d41002007684103766b41306c6a41506a221341186a22142900008542002011290310220a20112903002215852216201329001085420010e808200341206a2012201341086a22172900008542002016201329000085420010e8082003200a4200200a200341206a41086a2903002003290320857c200a200341106a41086a2903002003290310857c201542adfed5e4d485fda8d8007e42a0cbbf9599b5a19f0a7c85421789854217892212420010e808200341086a290300200329030085201289220aa721060340200541046a2205200620097122076a2106200820076a280000418081828478712202450d000b0240200820026841037620076a20097122056a2c00004100480d002008280200418081828478716841037621050b200820056a200aa741197622063a00002005417c6a20097120086a41046a20063a0000200b410020056b41306c6a220541286a201341286a290200370200200541206a201341206a290200370200200541186a2014290200370200200541106a201341106a290200370200200541086a2017290200370200200520132902003702000c000b0b1036000b41accdcc00411c41c8cdcc001039000b41accdcc00411c41c8cdcc001039000b41accdcc00411c41c8cdcc001039000b200541046a2005200610ea081a0b41002105024020012802002204417f460d002002280200210d200141046a2110410021050340024020102802002208200522146a2d0000418001470d00410020146b21170340200341c0006a200d290318200d2903088522122008201741306c6a41506a220e41186a2213290000854200200d290310220a200d2903002215852216200e29001085420010e808200341d0006a2012200e41086a220f2900008542002016200e29000085420010e808200341306a200a4200200a200341d0006a41086a2903002003290350857c200a200341c0006a41086a2903002003290340857c201542adfed5e4d485fda8d8007e42a0cbbf9599b5a19f0a7c85421789854217892212420010e8082001280200210941002105200341306a41086a290300200329033085201289220aa7221121060340200541046a2205200620097122076a2106200820076a280000418081828478712202450d000b0240200820026841037620076a20097122056a2c00004100480d002008280200418081828478716841037621050b02402005200920117122066b201420066b7320097141034b0d00200820146a200aa741197622053a000020092014417c6a7120086a41046a20053a00000c020b200820056a22062d000021072006200aa741197622023a00002005417c6a20097120086a41046a20023a00000240200741ff01470d002010280200220620146a41ff013a0000200620012802002014417c6a716a41046a41ff013a00002010280200410020056b41306c6a41506a2205200e290200370200200541086a200f290200370200200541106a200e41106a290200370200200541186a2013290200370200200541206a200e41206a290200370200200541286a200e41286a2902003702000c020b2010280200410020056b41306c6a41506a2205290200210a2005200e290200370200200541186a2206290200211220062013290200370200200541106a220629020021152006200e41106a2207290200370200200541086a220629020021162006200f290200370200200f20163702002007201537020020132012370200200e200a370200200541286a2206290200210a2006200e41286a2207290200370200200529022021122005200e290220370220200e20123702202007200a370200201028020021080c000b0b201441016a210520142004470d000b20012802002205200541016a41037641076c20054108491b21050b2000410036020020012005200128020c6b3602080b20034180016a24000ba20201047f23004180016b22032400024020012000413c6a412010ec08450d00200341c0006a41186a2204200141186a290000370300200341c0006a41106a2205200141106a290000370300200341c0006a41086a2206200141086a2900003703002003200129000037034020032000200341c0006a10b202024020032903004201520d00200341c0006a41286a200341306a290300370300200341c0006a41206a200341286a2903003703002004200341206a2903003703002005200341186a2903003703002006200341106a29030037030020032003290308370340200342808080807037037820034201370370200341c0006a200341f0006a10b3020c010b200341106a280200417c6a22012001280200417f6a3602000b20034180016a24000b880101017f230041206b220324000240024020012000413c6a412010ec080d00410121010c010b200341186a200141186a290000370300200341106a200141106a290000370300200341086a200141086a2900003703002003200129000037030002402000200310af0222010d00410021010c010b200128020c41004a21010b200341206a240020010b1300200041e0f2c000360204200020013602000b9a0201067f024020002802202201450d0002402000412c6a280200450d00200041246a280200220241046a2103200120026a41016a21042002280200417f73418081828478712101024003400240024020010d000340200320044f0d04200241c07e6a210220032802002101200341046a220521032001418081828478712201418081828478460d000b2001418081828478732201417f6a2001712106200521030c010b2002450d022001417f6a20017121060b2001682105200621012002410020054103766b41306c6a220541746a280200450d00200541706a280200102e200621010c000b0b200028022021010b200041246a280200200141016aad42307ea76b102e0b0240200041346a280200450d002000280230102e0b0b1300200041e0f2c000360204200020013602000bb10201027f230041206b220424000240024002400240024020022001413c6a412010ec080d00200141386a2802002202417f4c0d01200128023021050240024020020d00410121010c010b2002102c2201450d030b200020023602042000200136020020012005200210e9081a200041086a20023602000c040b200441186a200241186a290000370300200441106a200241106a290000370300200441086a200241086a290000370300200420022900003703002001200410af022202450d02200228020c4101480d0220022802082201417f4c0d00200228020021050240024020010d00410121020c010b2001102c2202450d020b200020013602042000200236020020022005200110e9081a200041086a20013602000c030b1038000b1036000b200041003602000b200441206a24000b880101017f230041206b220324000240024020012000413c6a412010ec080d00410121010c010b200341186a200141186a290000370300200341106a200141106a290000370300200341086a200141086a2900003703002003200129000037030002402000200310af0222010d00410021010c010b200128020c41004a21010b200341206a240020010b8b0201047f200028020421012000410036020402402001450d00024020002802002202450d002002417f6a2102034020012802940321012002450d012002417f6a21020c000b0b024020002802082203450d004100210003402003417f6a210341012102024002400340200020012f0132490d010240200128020022040d002001102e410021010c030b20012f013021002001102e2002417f6a2102200421010c000b0b200041016a210020024101460d00200120004102746a4194036a280200210102402002450d000340200241016a220020024f210420012802940321012000210220040d000b0b410021000b20030d000b0b0340200128020021022001102e2002210120020d000b0b0b8a0201047f200028020421012000410036020402402001450d00024020002802002202450d002002417f6a21020340200128026021012002450d012002417f6a21020c000b0b024020002802082203450d004100210003402003417f6a210341012102024002400340200020012f015e490d01024020012802002204450d0020012f015c21002001102e2002417f6a2102200421010c010b0b2001102e410021010c010b200041016a210020024101460d00200120004102746a41e0006a280200210102402002450d000340200241016a220020024f2104200128026021012000210220040d000b0b410021000b20030d000b0b0340200128020021022001102e2002210120020d000b0b0b8b0201047f200028020421012000410036020402402001450d00024020002802002202450d002002417f6a2102034020012802c00321012002450d012002417f6a21020c000b0b024020002802082203450d004100210003402003417f6a210341012102024002400340200020012f015e490d010240200128025822040d002001102e410021010c030b20012f015c21002001102e2002417f6a2102200421010c000b0b200041016a210020024101460d00200120004102746a41c0036a280200210102402002450d000340200241016a220020024f210420012802c00321012000210220040d000b0b410021000b20030d000b0b0340200128025821022001102e2002210120020d000b0b0be90101047f200028020421012000410036020402402001450d00024020002802182202450d0020002802082103200028020021000340410120006b21002002417f6a2102024002400340200320012f0106490d010240200128020022040d002001102e410021010c030b20012f010421032001102e2000417f6a2100200421010c000b0b200341016a210320004101460d00200120034102746a41206a280200210102402000450d004100210303402001280220210120002003417f6a2203470d000b0b410021030b4100210020020d000b0b0340200128020021002001102e2000210120000d000b0b0bc78c0106027f027e077f027e197f037e230022032104200341e0076b41607122032400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e0a00010203040506070809000b2003418c056a4101360200200342013702fc042003419cc3cb003602f804200341043602e40620034194c3cb003602e0062003200341e0066a36028805200341f8046a41e0ecc0001044000b200141186a2903002105200141106a29030021062001410c6a2802002107200141086a280200210820012802042101200341f8046a41286a200241286a280200360200200341f8046a41206a200241206a290200370300200341f8046a41186a200241186a290200370300200341f8046a41106a200241106a290200370300200341f8046a41086a200241086a290200370300200320022902003703f804200341e0066a200341f8046a10c10241022102200341d0066a41026a220920032d00e3063a0000200341a0036a41086a220a200341f4066a290200370300200341a0036a410d6a220b200341f9066a290000370000200320032f00e1063b01d0062003200341e0066a410c6a2902003703a00302400240024020032d00e0064101460d00200341e0066a41086a280200210220032802e406210c200341f4026a41026a20092d000022093a0000200341c0046a41086a220d200a290300370300200341c0046a410d6a220a200b290000370000200320032f01d006220b3b01f402200320032903a0033703c004200320093a00a2062003200b3b01a006200320023600a7062003200c3600a306200341b3066a200d290300370000200341a0066a41186a200a290000370000200320032903c0043700ab06024002400240200741818001490d00200341a0046a410310c2020c010b0240200642ffcfdbc3f4025620054200522005501b0d00200341a0046a410610c2020c010b200341a0046a41186a220b4200370300200341b0046a22024200370300200341a0046a41086a22094200370300200342003703a004200341e0066a41bad7c70041081081022009200341e0066a41086a220a290000370300200320032900e0063703a004200341e0066a4198d9c000410b108102200b200a290000370300200220032900e006370300200341106a200341a0046a4120108e0220032007ad42004280c2d72f420010e8082003280214210c2003280210210d200341f8046a200341a0066a2003290300220e4280c8afa0257c220f200341086a290300200f200e54ad7c220e10c302024020032d00f8044106470d00200b42003703002002420037030020094200370300200342003703a004200341e0066a41bad7c70041081081022009200a290000370300200320032900e0063703a004200341e0066a4198d9c000410b108102200241086a200a290000370000200220032900e0063700002003200c4100200d1b220241016a3602f804200341a0046a4120200341f8046a410410b20120034182066a20032d00a2063a000020034183066a20032900a306370000200341f8046a41186a4200370300200341f8046a41206a4200370300200341a0056a42003703002003418b066a200341ab066a220929000037000020034193066a200941086a29000037000020034198066a2009410d6a2900003700002003200537038005200320063703f804200320032f01a0063b0180062003420037038805200341b0056a200e3703002003200f3703a805200341003a00b805200341a0046a200210f90120032802a804210a20032802a0042109200341003602e806200342013703e006200341f8046a200341e0066a1080022009200a20032802e006220b20032802e80610b201024020032802e406450d00200b102e0b024020032802a404450d002009102e0b200320073602a804200320083602a404200320013602a004200341e0066a200210c40220032802e006220720032802e806200341a0046a10c502024020032802e406450d002007102e0b02402008450d002001102e0b200341ec066a2002360200200341e8066a41003a0000200341153a00e006200341e0066a10fe0141062102200341063a00a0040c020b200341a0046a410110c2020b02402008450d002001102e0b20032902a404210520032d00a00421020b200341f8026a41026a220120032d00a3043a0000200320032f00a1043b01f802200241ff01714106460d02200341e0036a41026a20012d00003a0000200320032f01f8023b01e0030c010b02402008450d002001102e0b0b20034190036a41026a200341e0036a41026a2d000022013a0000200320032f01e00322083b019003200041206a20023a0000200041186a41003a000020004200370308200020083b0021200041236a20013a00002000200537002420004201370300200424000f0b200041186a41003a00002000420037030820002003280080043600192000411c6a20034183046a28000036000020004200370300200424000f0b20012802042101200341f8046a41286a200241286a280200360200200341f8046a41206a200241206a290200370300200341f8046a41186a200241186a290200370300200341f8046a41106a200241106a290200370300200341f8046a41086a200241086a290200370300200320022902003703f8044102210202400240200341f8046a10c60241ff01714102460d00200341c0046a200110f901200341f8046a20032802c004220820032802c804220710fa01024002400240024020032d00b80541064622020d0002404100200341f8046a20021b22022d0040450d0020034180046a410410c2020c020b200241013a0040200241c1006a200341e0066a41c70010e9081a200341b8046a22094200370300200341b0046a220a4200370300200341a0046a41086a220b4200370300200342003703a004200341e0066a41bad7c7004108108102200b200341e0066a41086a2202290000370300200320032900e0063703a004200341e0066a41c0dac000410f10810220092002290000370300200a20032900e0063703004104102c2209450d0d200342043702a406200320093602a006200320013602e006200341a0066a200341e0066a41041074200220032802a806360200200320032903a0063703e006200341a0046a4120200341e0066a10c702200341063a0080040c020b20034180046a410210c2020b4100210120032d00800422024106470d010b410621020240024020032d00b8054106470d002008200710ff010c010b200341003602e806200342013703e006200341f8046a200341e0066a1080022008200720032802e006220220032802e80610b201024020032802e406450d002002102e0b410621020b410121010b024020032802c404450d002008102e0b200341f8026a41026a220820032d0083043a0000200320032f0081043b01f80220010d012003290284042105200341c0036a41026a20082d00003a0000200320032f01f8023b01c00320024106460d010b200341a0036a41026a200341c0036a41026a2d000022013a0000200320032f01c00322083b01a003200041206a20023a0000200041186a41003a000020004200370308200020083b0021200041236a20013a00002000200537002420004201370300200424000f0b20004200370308200020032800e003360019200041186a41003a00002000411c6a200341e3036a28000036000020004200370300200424000f0b200141386a2903002105200141306a29030021062001280204211020034190036a41026a22072001410b6a2d00003a0000200341e0066a41086a22092001411c6a290200370300200341e0066a41106a220a200141246a290200370300200320012f00093b0190032003200141146a2902003703e006200141086a2d000021082001410c6a280200210d200141106a2802002101200341f8046a41286a200241286a280200360200200341f8046a41206a200241206a290200370300200341f8046a41186a200241186a290200370300200341f8046a41106a220b200241106a290200370300200341f8046a41086a220c200241086a290200370300200320022902003703f8040240024002400240200341f8046a10c60241ff01714102460d00200341c0046a41026a20072d00003a0000200c2009290300370300200b200a290300370300200320032f0190033b01c004200320032903e0063703f8040240024020080e03030100010b2001450d00200d102e0b200341c0036a41086a200341a0066a41086a290300370300200320032f01a0043b01fc02410121020c020b20084102470d1f2001450d1f200d102e410221020c200b200341a0066a410d6a2202200341f8046a410d6a290000370000200341a0066a41086a2208200341f8046a41086a290300370300200341fc026a41026a2207200341c0046a41026a2d00003a0000200341c0036a41086a22092008290300370300200341c0036a410d6a22082002290000370000200320032f01c0043b01fc02200320032903f8043703c003200341d0066a41026a220220072d00003a0000200320032f01fc023b01d006200341a0036a410d6a22072008290000370000200341a0036a41086a220a2009290300370300200320032903c0033703a003200341c0046a201010f901200341f8046a20032802c004220820032802c804220910fa01200341b3046a200a290300370000200341b8046a2007290000370000200320022d00003a00a204200320032f01d0063b01a004200320013600a7042003200d3600a304200320032903a0033700ab04024002400240024020032d00b80541064622020d0002404100200341f8046a20021b22022d00404103490d0020034180046a410410c2020c020b02402002290300200656200241086a290300220f200556200f2005511b0d0020034180046a410710c2020c020b200241033a0040200241c1006a20032903a004370000200341a0046a41186a290300210f200241186a2005370300200341b0046a290300210520022006370310200241c9006a200341a0046a41086a290300370000200241d1006a2005370000200241d9006a200f370000200341063a0080040c020b20034180046a410210c2020b4100210120032d00800422024106470d010b410621020240024020032d00b8054106470d002008200910ff010c010b200341003602a806200342013703a006200341f8046a200341a0066a1080022008200920032802a006220220032802a80610b201024020032802a406450d002002102e0b410621020b410121010b024020032802c404450d002008102e0b200341f8026a41026a220820032d0083043a0000200320032f0081043b01f80220010d01200329028404210520034180036a41026a20082d00003a0000200320032f01f8023b0180030b20024106470d1e0b20004200370308200020032800e003360019200041186a41003a00002000411c6a200341e3036a28000036000020004200370300200424000f0b20012802042111200241276a2d00002112200241256a2f00002113200241246a2d00002114200241226a2f01002115200241206a2f0100210b2002411c6a280200210c200241186a280200210d200241146a2802002110200241106a28020021162002410c6a2802002109200241086a280200210a200241066a2f00002117200241056a2d00002118200241046a2d0000210841022107200241026a2f010021192002280228210120022d0001211a0240024002400240024020022d0000221b0e03000102000b4100211c4102211d2008210702400240201a0e03000105000b4100211d200821074100211c0c040b4101211d200821070c030b4102210702400240024020080e03000102000b410021070c010b410121070b200341a0066a41026a200341f8046a41026a2d00003a0000200320032f00f8043b01a0064101211c0c010b02400240024020080e03000102000b410021070c010b410121070b4102211c200341a0066a41026a200341f8046a41026a2d00003a0000200320032f00f8043b01a0060b0b200128020041016a221e41014d0d06201320124110747221022003419c056a221220143a00002003419a056a221320153b010020034198056a221f200b3b010020034194056a2220200c36020020034190056a2221200d360200200341f8046a41146a22222010360200200341f8046a41106a22232016360200200341f8046a410c6a22242009360200200341f8046a41086a2225200a3602002001201e3602002003419d056a221e20032f01a0063b00002003419f056a2226200341a0066a41026a2d00003a0000200320173b01fe04200320183a00fd04200320073a00fc04200320193b01fa042003201d3a00f9042003201c3a00f804200320013602a005200341e0066a200341f8046a10c102024020032d00e0064101470d00202620024110763a0000201e20023b0000201220143a0000201320153b0100201f200b3b01002020200c3602002021200d3602002022201036020020232016360200202420093602002025200a360200200320013602a005200320173b01fe04200320183a00fd04200320083a00fc04200320193b01fa042003201a3a00f9042003201b3a00f804024002400240201b0e020001020b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b2003200b3b01be062003200c3601ba062003200d3601b606200320103601b206200320163601ae06200320093601aa062003200a3601a606200320173b01a406200320183a00a306200320083a00a206200320193b01a0060240201a450d004110102c2202450d09200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d0920014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220836020020080d022002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22082008280200417f6a220836020020080d022002102e0c020b4101210b410021084100210a0c1d0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b024020080d004101210b200a41017420094d0d00410021084100210a0c1d0b4110102c2202450d07200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d0720014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220836020020080d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22082008280200417f6a220836020020080d002002102e0b20012001280200417f6a22023602004100210b4101210820020d1a2001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d1a2001102e4100210a0c1b0b200341d0066a41026a220720032d00e3063a0000200341a0036a41086a2227200341e0066a41146a290200370300200341a0036a410d6a2228200341f9066a290000370000200320032f00e1063b01d0062003200341e0066a410c6a2902003703a003200341e0066a41086a280200211d20032802e406211c202620024110763a0000201e20023b0000201220143a0000201320153b0100201f200b3b01002020200c3602002021200d3602002022201036020020232016360200202420093602002025200a360200200320013602a005200320173b01fe04200320183a00fd04200320083a00fc04200320193b01fa042003201a3a00f9042003201b3a00f804200341f4026a41026a20072d00003a0000200341c0046a41086a2027290300370300200341c0046a410d6a202829000037000020012001280200417f6a2202360200200320032f01d0063b01f402200320032903a0033703c0044101210a41002108024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b20032802a005220141046a22022002280200417f6a220236020020020d002001102e0b4100210b0c1a0b20012802042101200341f8046a41286a200241286a280200360200200341f8046a41206a200241206a290200370300200341f8046a41186a200241186a290200370300200341f8046a41106a200241106a290200370300200341f8046a41086a200241086a290200370300200320022902003703f804200341e0066a200341f8046a10c102200341a0046a41086a2202200341e9066a290000370300200341a0046a41106a2208200341f1066a290000370300200341a0046a41186a2207200341f9066a290000370300200320032900e1063703a00420032d00e0064101460d07200341c0046a41186a2007290300370300200341c0046a41106a2008290300370300200341c0046a41086a2002290300370300200320032903a0043703c004200341a0046a200110f901200341f8046a20032802a004220820032802a804220710fa0120032d00b80541064622020d0602404100200341f8046a20021b22022d00404103460d00200341a0066a410410c2020c140b0240200341c0046a200241c1006a2201412010ec08450d00200341a0066a410510c2020c140b200341e8016a20022903102205200241186a290300220642c0843d420010e608200341d8016a2005200642c0843d420010e708200341c8016a20032903d801200341d8016a41086a29030042a0c21e420010e808200341e0066a200120032903c801220620032903e8012205420188a7200542a0c21e7e42c0843d8242a0c21e566aad7c2205200341c8016a41086a2903002005200654ad7c220610c302200341fa026a220920032d00e3063a0000200320032f00e1063b01f802024020032d00e006220a4106470d0020022005370320200241286a2006370300200341a0066a41186a22094200370300200341a0066a41106a220a4200370300200341a0066a41086a220b4200370300200342003703a006200341d0066a41d9fcc6004106108102200b200341d0066a41086a220c290000370300200320032900d0063703a006200341d0066a4180f4cb0041061081022009200c290000370300200a20032900d006370300200341c0016a200341a0066a4120108e0220032802c001210920032802c401210a200241043a0040200141086a2900002105200141106a29000021062001290000210f200241d9006a200141186a290000370000200241d1006a2006370000200241c9006a2005370000200241c1006a200f370000200241e4006a200a41808dcf006a41808dcf0020091b360200200341063a00a0060c150b20032902e40621052003200a3a00a006200320032f01f8023b00a106200320053702a406200320092d00003a00a3060c130b20012802042117200341ec026a41026a22072001410b6a2d00003a000020034180046a41086a22092001411c6a29020037030020034180046a41106a220a200141246a290200370300200320012f00093b01ec022003200141146a29020037038004200141086a2d000021082001410c6a280200210b200141106a2802002101200341f8046a41286a200241286a280200360200200341f8046a41206a200241206a290200370300200341f8046a41186a200241186a290200370300200341f8046a41106a220c200241106a290200370300200341f8046a41086a220d200241086a290200370300200320022902003703f804200341e0066a200341f8046a10c102200341f4026a41026a220220032d00e3063a0000200341c0046a41086a2210200341e0066a41146a290200370300200341c0046a410d6a2216200341f9066a290000370000200320032f00e1063b01f4022003200341e0066a410c6a2902003703c00402400240024020032d00e0064101460d00200341e0066a41086a280200211820032802e406211920034180036a41026a20022d00003a0000200341e0036a41086a2010290300370300200341e0036a410d6a2016290000370000200320032f01f4023b018003200320032903c0043703e003200341a0066a41026a20072d00003a0000200320032f01ec023b01a006200d2009290300370300200c200a29030037030020032003290380043703f8040240024020080e03030100010b2001450d00200b102e0b200341a0036a41086a200341e0066a41086a290300370300200320032f01a0043b01d006410121020c020b20084102470d122001450d12200b102e410221020c130b200341e0066a410d6a2202200341f8046a410d6a290000370000200341e0066a41086a2208200341f8046a41086a290300370300200341d0066a41026a2207200341a0066a41026a2d00003a0000200341a0036a41086a22092008290300370300200341a0036a410d6a22082002290000370000200320032f01a0063b01d006200320032903f8043703a003200320072d00003a00c204200320032f01d0063b01c004200320013600c7042003200b3600c304200341d8046a2008290000370000200341d3046a2009290300370000200320032903a0033700cb04200341a0036a201710f901200341f8046a20032802a003220820032802a803220710fa01200341e0066a410b6a2018360000200341ef066a20032903e003370000200341f7066a200341e0036a41086a290300370000200341fc066a200341e0036a410d6a290000370000200320032f0180033b01e406200320034180036a41026a2d00003a00e606200320193600e70620032d00b80521022003200341c0046a3602e0060240024002400240200241064622020d0002404100200341f8046a20021b22022d00404104460d00200341a0066a410410c2020c020b0240200341e0066a4104722209200241c1006a220a412010ec08450d00200341a0066a410510c2020c020b200341fe026a220d20032d00c2043a0000200341a0046a41086a2210200941086a290200370300200341a0046a41106a2216200941106a290200370300200341a0046a41186a2218200941186a290200370300200341c0036a41086a2219200341c0046a410b6a220c41086a290000370300200341c0036a410d6a2214200c410d6a290000370000200320032f01c0043b01fc02200320092902003703a0042003200c2900003703c003200341a0066a41186a22094200370300200341a0066a41106a220c4200370300200341a0066a41086a22154200370300200342003703a006200341d0066a41d9fcc60041061081022015200341d0066a41086a221a290000370300200320032900d0063703a006200341d0066a4180f4cb0041061081022009201a290000370300200c20032900d006370300200341f8016a200341a0066a4120108e0220032802f801210920032802fc01210c200241053a0040200a41186a2018290300370000200a41106a2016290300370000200a41086a2010290300370000200a20032903a004370000200241e1006a20032f01fc023b0000200241e3006a200d2d00003a0000200241e8006a2001360000200241e4006a200b36000020024184016a200c418084076a4180840720091b360200200241ec006a20032903c003370000200241f4006a2019290300370000200241f9006a2014290000370000200341063a00a0060c020b200341a0066a410210c2020b4100210120032d00a00622024106470d010b410621020240024020032d00b8054106470d002008200710ff010c010b200341003602e806200342013703e006200341f8046a200341e0066a1080022008200720032802e006220220032802e80610b201024020032802e406450d002002102e0b410621020b410121010b024020032802a403450d002008102e0b200341f8026a41026a220820032d00a3063a0000200320032f00a1063b01f80202402001450d00200341f8046a41086a41033a000020034181056a20032903c004370000200341a4056a201736020020034189056a200341c0046a41086a29030037000020034191056a200341d0046a29030037000020034199056a200341d8046a290300370000200341153a00f804200341f8046a10fe010c110b20032902a4062105200341e8026a41026a20082d00003a0000200320032f01f8023b01e8020b20024106460d0f0c110b20012802042108200341f8046a41286a2207200241286a280200360200200341f8046a41206a200241206a290200370300200341f8046a41186a2209200241186a290200370300200341f8046a41106a200241106a290200370300200341f8046a41086a200241086a290200370300200320022902003703f804200341e0066a200341f8046a10c102410121014102210220032d00e0064101460d0d20034190036a200810f901200341f8046a200328029003220a200328029803220b10fa01200341d0056a22022903002105200220032903f806370300200341c8056a22022903002106200220032903f006370300200341c0056a2202290300210f200220032903e806370300200320053703b806200320063703b0062003200f3703a806200320032903b80522053703a0062003200341f0056a2903003703d8042003200341e8056a2903003703d0042003200341e0056a2903003703c8042003200341d8056a290300220e3703c004200341063a00e006200320032903e00622063703b805200341f8056a290300210f024002402005a7220241ff01714106470d000c010b2009290300210520072903002129200329038805212a200329039805212b200341e0066a41176a20032900b806370000200341e0066a41106a20032900b106370300200341e0066a41086a20032900a906370300200341a0046a41086a20032900c904370300200341a0046a41106a20032900d104370300200341a0046a41176a20032900d804370000200320032900a1063703e006200320032900c1043703a004200ea72118200fa72119410021010b2006a7210720034180046a41086a2209200341e0066a41086a29030037030020034180046a41106a220c200341e0066a41106a29030037030020034180046a41176a220d200341e0066a41176a290000370000200341e0036a41086a2210200341a0046a41086a290300370300200341e0036a41106a2216200341a0046a41106a290300370300200341e0036a41176a2217200341a0046a41176a290000370000200320032903e00637038004200320032903a0043703e00320010d06200341c0036a41176a200d290000370000200341c0036a41106a200c290300370300200341c0036a41086a2009290300370300200341a0036a41086a2010290300370300200341a0036a41106a2016290300370300200341a0036a41176a201729000037000020032003290380043703c003200320032903e0033703a0030240200241ff01714105460d0020034180036a410410c2020c0d0b200341a0046a41176a200341c0036a41176a290000370000200341a0046a41106a200341c0036a41106a290300370300200341a0046a41086a200341c0036a41086a290300370300200320032903c0033703a004200320183a00bf04200341c0046a41176a200341a0036a41176a290000370000200341c0046a41106a200341a0036a41106a290300370300200341c0046a41086a200341a0036a41086a290300370300200320032903a0033703c004200320193a00df04200341b8066a22024200370300200341a0066a41106a22014200370300200341a0066a41086a22094200370300200342003703a006200341d0066a41d9fcc60041061081022009200341d0066a41086a220c290000370300200320032900d0063703a006200341d0066a4180f4cb0041061081022002200c290000370300200120032900d00637030020034190026a200341a0066a4120108e02024020032802940241002003280290021b200f422088a74f0d0020034180036a410910c2020c0d0b200342f0f2bda1a7ee9cb9f90037038004200320083602e806200341023602e406200341e2b8c0003602e006200341a0066a20034180046a200341e0066a10fc0120034180046a200341a0066a10c802200341e0066a200328028004220120032802880410c902200341e0066a41106a290300420020032903e00642015122021b210620032903e806420020021b210f0240200328028404450d002001102e0b20034180026a200341a0046a202b202910fb01200341e0036a200341a0066a200341a0046a200f202a202a200f56200520065620052006511b22021b220e2006200520021b2205410110ca0220034180046a200341a0066a200341c0046a4200200f200e7d222a202a200f56200620057d200f200e54ad7d220520065620052006511b22021b22064200200520021b2205410110ca0241062107200341063a00b805200341e0066a200810c40220032802e006220220032802e80610ff01024020032802e406450d002002102e0b20034198076a200537030020034190076a2006370300200341e0066a41086a41043a0000200341e9066a20032903c0043700002003418c076a2008360200200341f1066a200341c0046a41086a290300370000200341f9066a200341d0046a29030037000020034181076a200341d8046a290300370000200341153a00e006200341e0066a10fe01200341063a0080030c0c0b200128020421072002410e6a2f0100210a2002410d6a2d0000210b2002410c6a2d0000210c2002410a6a2f0100210d200241096a2d00002110200241086a2d00002116200241046a2d0000210920022802282101024020022d000022080d002002411a6a2901002105200241196a2d00002108200241186a2d00002117200241166a2f01002118200241156a2d00002119200241146a2d00002114200241126a2f01002115200241116a2d0000211a200241106a2d0000211b200241066a2f0100211d200241056a2d0000211c200241026a2f0100211220022d0001210220012001280200417f6a2213360200024020130d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22132013280200417f6a221336020020130d002001102e0b200320053703b806200320083a00b706200320173a00b606200320183b01b406200320193a00b306200320143a00b206200320153b01b0062003201a3a00af062003201b3a00ae062003200a3b01ac062003200b3a00ab062003200c3a00aa062003200d3b01a806200320103a00a706200320163a00a6062003201d3b01a4062003201c3a00a306200320093a00a206200320123b01a0060240200241ff01710d00410321080c010b4110102c2202450d02200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d0220014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a22173602004100210820170d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22172017280200417f6a221736020020170d002002102e0b0240024002402008417f6a0e03000102010b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0240200941ff01710d00200d411074201041087472201672410174200a411074200b41087472200c724b0d020b4110102c2202450d03200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d0320014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220836020020080d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22082008280200417f6a220836020020080d002002102e0b20012001280200417f6a22083602004102210220080d0b2001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22082008280200417f6a220836020020080d0b2001102e0c0b0b200341a0046a200710f901200341f8046a20032802a004220120032802a804220810fa01024002400240024002400240024020032d00b80541064622020d004100200341f8046a20021b22022d00400e06020305050401020b200341e0066a410210c202200320032900e106370380042003200341e8066a2800003600870420032d00e006210220032802a404450d102001102e0c100b200341e0066a410810c202200320032900e106370380042003200341e0066a41086a2800003600870420032d00e006210220032802a404450d0f2001102e0c0f0b200341e0066a200710c40220032802e006220920032802e80610ff01024020032802e406450d002009102e0b200341a8026a20024188016a2002290330222a200241386a290300222b10cb0220032903a80221052003200341a8026a41086a29030022063703e806200320053703e0060240024020052006844200520d002003200341e0066a3602a006200341a0066a10cc020c010b200342f0f2bda1a7ee9cb9f9003703a006200341e0066a200341a0066a10cd0220034198026a200341e0066a2005200610fd01200341b0066a20034198026a41086a290300220e20067d200329039802220f200554ad7d2006200e7d2005200f54ad7d200f200556200e200656200e2006511b22021b3703002003200f20057d2005200f7d20021b3703a80620032002ad3703a006200341a0066a41086a21090240024020020d00200320093602c004200341c0046a10cc020c010b200320093602c004200341c0046a10ce020b200341f8066a2006370300200341f0066a2005370300200341e8066a41063a00002003410e3a00e006200341e0066a10fe010b200341063a00b805200341f8066a202b370300200341f0066a202a370300200341ec066a2007360200200341e8066a41013a0000200341153a00e006200341e0066a10fe0142f0f98fc30121050c030b200341e0066a410410c202200320032900e106370380042003200341e8066a2800003600870420032d00e006210220032802a404450d0d2001102e0c0d0b200341c8026a200241c1006a2002290320200241286a29030010fb010b200342f0f2bda1a7ee9cb9f9003703c004200320073602e806200341023602e406200341e2b8c0003602e006200341a0066a200341c0046a200341e0066a10fc01200341e0066a200710c40220032802e006220220032802e80610ff01024020032802e406450d002002102e0b200341c0046a200341a0066a10c802200341e0066a20032802c004220920032802c80410c902200341f0066a290300420020032903e00642015122021b210520032903e806420020021b2106024020032802c404450d002009102e0b200342f0f2bda1a7ee9cb9f9003703c004200341e0066a200341c0046a10cd02200341c0046a200341a0066a200341e0066a20062005410110ca02200341063a00b805200341ec066a2007360200200341e8066a41053a0000200341153a00e006200341e0066a10fe01428887a88c0221050b0240024020032d00b8054106470d002001200810ff010c010b200341003602e806200342013703e006200341f8046a200341e0066a1080022001200820032802e006220220032802e80610b20120032802e406450d002002102e0b024020032802a404450d002001102e0b200320032800c0033602a0032003200341c3036a2800003600a303200041186a41003a0000200041106a200537030020004201370308200020032802a0033600192000411c6a20032800a30336000020004200370300200424000f0b200128020421072001410c6a2802002108200141086a2802002101200341f8046a41286a200241286a280200360200200341f8046a41206a200241206a290200370300200341f8046a41186a200241186a290200370300200341f8046a41106a200241106a290200370300200341f8046a41086a200241086a290200370300200320022902003703f804200341e0066a200341f8046a10c102200341a0046a41086a2202200341e9066a290000370300200341a0046a41106a2209200341f1066a290000370300200341a0046a41186a220a200341f9066a290000370300200320032900e1063703a00420032d00e0064101460d05200341c0046a41186a200a290300370300200341c0046a41106a2009290300370300200341c0046a41086a2002290300370300200320032903a0043703c004200341a0046a200710f901200341f8046a20032802a004220a20032802a804220b10fa01024002400240024020032d00b80541064622020d0002404100200341f8046a20021b22022d00404104460d00200341a0066a410410c2020c020b0240200241c1006a200341c0046a412010ec08450d00200341a0066a410510c2020c020b200341b8066a22094200370300200341b0066a220c4200370300200341a0066a41086a220d4200370300200342003703a006200341d0066a41d9fcc6004106108102200d200341d0066a41086a2210290000370300200320032900d0063703a006200341d0066a4180f4cb00410610810220092010290000370300200c20032900d006370300200341d8026a200341a0066a4120108e02200220032802dc0241808dcf006a41808dcf0020032802d8021b22092002280264220c2009200c4b1b360264200341063a00a0060c020b200341a0066a410210c2020b4100210920032d00a00622024106470d010b410621020240024020032d00b8054106470d00200a200b10ff010c010b200341003602e806200342013703e006200341f8046a200341e0066a108002200a200b20032802e006220220032802e80610b201024020032802e406450d002002102e0b410621020b410121090b024020032802a404450d00200a102e0b200341f8026a41026a220a20032d00a3063a0000200320032f00a1063b01f80202402009450d0020034184056a200736020020034180056a41063a0000200341153a00f804200341f8046a10fe012008450d082001102e0c080b20032902a406210520034180046a41026a200a2d00003a0000200320032f01f8023b0180040c060b1036000b00000b200341a0066a410210c2020c0c0b410221020c0e0b20034180036a410210c2020c050b410221020b02402008450d002001102e0b20024106460d00200341f8046a41026a20034180046a41026a2d000022013a0000200320032f01800422083b01f804200041206a20023a0000200041186a41003a000020004200370308200020083b0021200041236a20013a000020002005370024420121050c010b4200210520004200370308200020032800f804360019200041186a41003a00002000411c6a200341fb046a2800003600000b20002005370300200424000f0b200320032800c0033602a00320032003290380043703e00320032003280087043600e7032003200341c3036a2800003600a303200041186a41003a000020004200370308200020032802a0033600192000411c6a20032800a303360000200041206a20023a0000200020032903e003370021200041286a20032800e70336000020004201370300200424000f0b024020032d00800322024106470d0002400240200741ff01714106470d00200a200b10ff010c010b200341003602e806200342013703e006200341f8046a200341e0066a108002200a200b20032802e006220220032802e80610b20120032802e406450d002002102e0b0240200328029403450d00200a102e0b200041186a41003a000020004200370308200020032800ec023600192000411c6a200341ef026a28000036000020004200370300200424000f0b0240200328029403450d00200a102e0b200341fe026a20032d0083033a0000200320032f00810322013b01f802200320013b01fc0220032902840321050b200341f4026a41026a200341fc026a41026a2d000022013a0000200320032f01fc0222083b01f402200041206a20023a0000200041186a41003a000020004200370308200020083b0021200041236a20013a00002000200537002420004201370300200424000f0b200042003703082000200328009003360019200041186a41003a00002000411c6a20034193036a28000036000020004200370300200424000f0b410221020b200341e4026a41026a200341e8026a41026a2d000022013a0000200320032f01e80222083b01e402200041206a20023a0000200041186a41003a000020004200370308200020083b0021200041236a20013a00002000200537002420004201370300200424000f0b4100210120032d00a00622024106470d010b410621020240024020032d00b8054106470d002008200710ff010c010b200341003602e806200342013703e006200341f8046a200341e0066a1080022008200720032802e006220220032802e80610b201024020032802e406450d002002102e0b410621020b410121010b024020032802a404450d002008102e0b200341e0036a41026a220820032d00a3063a0000200320032f00a1063b01e00320010d0120032902a4062105200341c0036a41026a20082d00003a0000200320032f01e0033b01c00320024106460d010b200341a0036a41026a200341c0036a41026a2d000022013a0000200320032f01c00322083b01a003200041206a20023a0000200041186a41003a000020004200370308200020083b0021200041236a20013a00002000200537002420004201370300200424000f0b200042003703082000200328008004360019200041186a41003a00002000411c6a20034183046a28000036000020004200370300200424000f0b4100210a0b4102210220034180036a41026a2201200341f4026a41026a2d00003a0000200341e0036a41086a2207200341c0046a41086a290300370300200341e0036a410d6a2209200341c0046a410d6a290000370000200320032f01f4023b018003200320032903c0043703e003024002400240024002400240024020080d00200341ec026a41026a220220012d00003a000020034180046a41086a2201200729030037030020034180046a410d6a22072009290000370000200320032f0180033b01ec02200320032903e00337038004200341e0036a201110f901200341f8046a20032802e003220820032802e803220910fa01200341fc026a41026a20022d00003a0000200341c0036a41086a2001290300370300200341c0036a410d6a2007290000370000200320032f01ec023b01fc0220032003290380043703c0030240024020032d00b80541064622020d00024002400240024002404100200341f8046a20021b22022d00400e06000000010203000b200341a0066a410410c2020c050b200341b3046a200341c0036a41086a290300370000200341a0046a41186a2201200341cd036a290000370000200320032f01fc023b01a0042003201d3600a7042003201c3600a304200320032903c0033700ab042003200341fe026a2d00003a00a204200a450d07200341e0066a41186a2001290300370300200341e0066a41106a200341a0046a41106a290300370300200341e0066a41086a200341a0046a41086a290300370300200320032903a0043703e006200341e0066a200241c1006a412010ec08450d070c020b200241c1006a2101024002400240200a450d00200341d3046a200341c0036a41086a290300370000200341c0046a41186a200341cd036a290000370000200320032f01fc023b01c0042003201d3600c7042003201c3600c304200320032903c0033700cb042003200341fe026a2d00003a00c204200341c0046a2001412010ec08450d01200341a0066a41186a22074200370300200341b0066a220a4200370300200341a0066a41086a220b4200370300200342003703a006200341d0066a41d9fcc6004106108102200b200341d0066a41086a220c290000370300200320032900d0063703a006200341d0066a4180f4cb0041061081022007200c290000370300200a20032900d006370300200341d8006a200341a0066a4120108e0202402003280258450d002002280264200328025c490d030b200341a0066a410910c2020c060b200341f0006a20012002290320200241286a29030010cb02200329037021052003200341f0006a41086a29030022063703e806200320053703e0060240024020052006844200520d002003200341e0066a3602a006200341a0066a10cc020c010b200342f0f2bda1a7ee9cb9f9003703a006200341e0066a200341a0066a10cd02200341e0006a200341e0066a2005200610fd01200341b0066a200341e0006a41086a290300220e20067d2003290360220f200554ad7d2006200e7d2005200f54ad7d200f200556200e200656200e2006511b22011b3703002003200f20057d2005200f7d20011b3703a80620032001ad3703a006200341a0066a41086a21070240024020010d00200320073602c004200341c0046a10cc020c010b200320073602c004200341c0046a10ce020b200341f8066a2006370300200341f0066a2005370300200341e8066a41063a00002003410e3a00e006200341e0066a10fe010b20024200370320200241286a42003703000c080b200341186a20012002290320200241286a29030010fb010c070b200341386a20012002290320200241286a29030010cb02200329033821052003200341386a41086a29030022063703e806200320053703e0060240024020052006844200520d002003200341e0066a3602a006200341a0066a10cc020c010b200342f0f2bda1a7ee9cb9f9003703a006200341e0066a200341a0066a10cd02200341286a200341e0066a2005200610fd01200341b0066a200341286a41086a290300220e20067d2003290328220f200554ad7d2006200e7d2005200f54ad7d200f200556200e200656200e2006511b22011b3703002003200f20057d2005200f7d20011b3703a80620032001ad3703a006200341a0066a41086a21070240024020010d00200320073602a004200341a0046a10cc020c010b200320073602a004200341a0046a10ce020b200341f8066a2006370300200341f0066a2005370300200341e8066a41063a00002003410e3a00e006200341e0066a10fe010b20024200370320200241286a42003703000c060b200b0d040b41022102200341023a00a006410021010c060b200341a0066a410210c2020b4100210120032d00a00622024106470d040c030b0c040b200341a0016a200241c1006a2002290320200241286a29030010cb0220032903a00121052003200341a0016a41086a29030022063703e806200320053703e0060240024020052006844200520d002003200341e0066a3602a006200341a0066a10cc020c010b200342f0f2bda1a7ee9cb9f9003703a006200341e0066a200341a0066a10cd0220034190016a200341e0066a2005200610fd01200341b0066a20034190016a41086a290300220e20067d200329039001220f200554ad7d2006200e7d2005200f54ad7d200f200556200e200656200e2006511b22011b3703002003200f20057d2005200f7d20011b3703a80620032001ad3703a006200341a0066a41086a21070240024020010d00200320073602c004200341c0046a10cc020c010b200320073602c004200341c0046a10ce020b200341f8066a2006370300200341f0066a2005370300200341e8066a41063a00002003410e3a00e006200341e0066a10fe010b20024200370320200241286a42003703000b200241023a0040200241c1006a200341e0066a41c70010e9081a200341063a00a0060b410621020240024020032d00b8054106470d002008200910ff010c010b200341003602e806200342013703e006200341f8046a200341e0066a1080022008200920032802e006220220032802e80610b201024020032802e406450d002002102e0b410621020b410121010b024020032802e403450d002008102e0b200341f8026a41026a220820032d00a3063a0000200320032f00a1063b01f80220010d0120032902a4062105200341e8026a41026a20082d00003a0000200320032f01f8023b01e80220024106460d010b200341e4026a41026a200341e8026a41026a2d000022013a0000200320032f01e80222083b01e402200041206a20023a0000200041186a41003a000020004200370308200020083b0021200041236a20013a00002000200537002420004201370300200424000f0b200042003703082000200328009003360019200041186a41003a00002000411c6a20034193036a28000036000020004200370300200424000f0b410221020b200341ec026a41026a20034180036a41026a2d000022013a0000200320032f01800322083b01ec02200041206a20023a0000200041186a41003a000020004200370308200020083b0021200041236a20013a00002000200537002420004201370300200424000bbe06030d7f017e037f230041306b220224002002200141026a2f01003b012e2002200141066a2f01003b012c20022001410a6a2f01003b012a200141046a2d00002103200141056a2d00002104200141086a2d00002105200141096a2d000021062001410c6a2d000021072001410d6a2d0000210820012d0001210920012d0000210a20022001410e6a2f01003b0128200141116a2d0000210b200141106a2d0000210c2002200141126a2f01003b0126200141156a2d0000210d200141146a2d0000210e2002200141166a2f01003b01242001411a6a290100210f200141196a2d00002110200141186a2d000021112001280228210120022f012e211202400240200a0d0020012001280200417f6a220a360200200220123b0122200220022f012c3b0120200220022f012a3b011e200220022f01283b011c200220022f01263b011a200220022f01243b01182002200f3703080240200a0d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a220a200a280200417f6a220a360200200a0d002001102e0b0240200941ff01714101460d00200041013a00000c020b200020022f01223b0001200041046a20043a0000200041036a20033a0000200041086a20063a0000200041076a20053a0000200041056a20022f01203b00002000410c6a20083a00002000410b6a20073a0000200041096a20022f011e3b0000200041106a200b3a00002000410f6a200c3a00002000410d6a20022f011c3b0000200041146a200d3a0000200041136a200e3a0000200041116a20022f011a3b0000200041186a20103a0000200041176a20113a0000200041003a0000200041156a20022f01183b0000200041196a20022903083700000c010b200220123b0120200220022f012c3b011e200220022f012a3b011c200220022f01283b011a200220022f01263b01182002200f37020c200220103a000b200220113a000a200220022f01243b0108200041013a000020012001280200417f6a220036020020000d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22002000280200417f6a220036020020000d002001102e0b200241306a24000bc60201047f230041c0006b2202240041aab4c700210341092104410821050240024002400240024002400240024002400240200141ff01710e0a00010203040506070809000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a41b0a5cc001044000b41d0ffc3002103411c2104410021050c070b41caeac2002103410c2104410121050c060b419eb4c7002103410c2104410221050c050b4195b9c000210341102104410321050c040b4187b9c0002103410e2104410421050c030b41fbb8c0002103410c2104410521050c020b41f1b8c0002103410a2104410621050c010b41e4b8c0002103410d2104410721050b20004183c4003b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000bce1204027f0c7e037f037e230041e0026b220424002004200337031020042002370308200420013602040240024020022003844200520d00200041063a00000c010b2004200136023c20044180016a200110c802200441e0016a200428028001220520042802880110c902200441e0016a41386a2903002106200441e0016a41306a2903002107200441e0016a41286a2903002108200441e0016a41206a2903002109200441e0016a41186a290300210a200441e0016a41106a290300210b200441a0026a290300210c20042903e801210d20042903e001210e200441b0016a41086a200441b0026a2903003703002004200441a8026a2903003703b00102400240200e4201510d004200210c200441c0006a41386a4200370300200441c0006a41306a4200370300200441c0006a41286a4200370300200441c0006a41206a4200370300200441c0006a41186a4200370300200441c0006a41106a4200370300200441c0006a41086a420037030020044200370340420021094200210842002107420021064200210d4200210b4200210a4200210f420021104200210e420021110c010b200441c0006a41206a2008370300200441c0006a41286a2007370300200441c0006a41106a200a370300200441c0006a41306a2006370300200420093703582004200d3703402004200c3703782004200b3703482008210f20072110200d210e200b21110b0240200428028401450d002005102e0b02400240200e2011844200520d00200f2004290350842010200441d8006a29030084844200520d002004290370200441f8006a2903008450450d004200210e410021050c010b4201210e410121050b0240200e4201510d004200210842002107420021064200210c4200210a420021094200210d4200210b0b0240024002400240024002400240200d20027d2211200d56200b20037d200d200254ad7d220d200b56200d200b511b0d000240200a20027c220f200a542212200920037c2012ad7c220b200954200b2009511b450d00200441d0016a41086a4108360200200441a984ca003602d401200441023a00d201200441830a3b01d0010c020b200441d0016a20012002200341042011200d10d70620042d00d0014106470d0120044188026a22132007370300200441f8016a200b37030020044190026a2214200637030020042008370380022004200f3703f001200420113703e0012004200d3703e8014200210a42012107200e420152ad210802400240427f2011200f7c220920092011542212200d200b7c2012ad7c2209200d542009200d511b22121b220642ffc7afa02556427f200920121b22094200522009501b0d002011200f84200d200b8484220b50211242002107200b420052ad210a0c010b201429030021152013290300211620044180026a2903002117200441f0016a290300210f20042903f801211020042903e801210e20042903e001210b410121120b200441a8016a2009370300200441a0016a2213200637030020044190016a200d37030020042011370388012004200a37039801200420083703800120052007420152720d02200420013602e0012001200441e0016a10bd060c040b200441d8016a4113360200200441c8a3c7003602d401200441033a00d201200441830a3b01d0010b20042902d401210b20042802d00121050c010b0240200541017322052007420151720d00200420013602e0012001200441e0016a10be0641ff017122054103460d02024020050e03040300040b41042105024020120d00200420133602e001200441e0016a10cc020b0c010b2007420152200571450d010c020b200541ff01714106460d02200020053a0000200041036a20054118763a0000200020054108763b0001200041046a200b3702000c030b200441c0016a200110c802200441e0016a20042802c001221220042802c801221310c90220042903e0012102200441b0016a41086a2205200441b0026a2903003703002004200441a8026a2903003703b0010240024020024201510d00200441d0016a41086a4200370300200442003703d0010c010b200441d0016a41086a2005290300370300200420042903b0013703d0010b200441a8026a20042903d001370300200441b0026a200441d0016a41086a290300370300200442013703e00120044198026a20154200200742015122051b37030020044190026a2016420020051b370300200441e0016a41286a2017420020051b37030020044180026a2010420020051b370300200441f8016a200f420020051b370300200441e0016a41106a200e420020051b370300200441a0026a200c420020051b3703002004200b420020051b3703e80120122013200441e0016a41086a10c805024020042802c401450d002012102e0b20044180016a41106a290300210d20044180016a41286a2903002109200429038801211120042903a00121062004290380012108200429039801210a0b024020084201520d0020044198026a200d37030020044190026a2011370300200441e0016a41086a41003a0000200441e9016a2001290000370000200441f1016a200141086a290000370000200441f9016a200141106a29000037000020044181026a200141186a290000370000200441033a00e001200441e0016a10fe010b02400240200a50450d00420021020c010b200441e0016a41086a200428023c220141086a290000370300200441e0016a41106a200141106a290000370300200441e0016a41186a200141186a290000370300200420012900003703e001420121020b200441186a41186a200441e0016a41186a22012903002203370300200441186a41106a200441e0016a41106a2205290300220b370300200441186a41086a200441e0016a41086a290300220d370300200420042903e001220a37031820044190026a200937030020044188026a221220063703002005200d3703002001200b37030020044180026a2003370300200420023703e0012004200a3703e801200441e0016a10d204024020042903e001500d0020042012360240200441c0006a10cc020b200441086a41086a290300210320042903082102200428020421010b20044198026a200337030020044190026a2002370300200441e0016a41086a41053a0000200441e9016a2001290000370000200441f1016a200141086a290000370000200441f9016a200141106a29000037000020044181026a200141186a290000370000200441033a00e001200441e0016a10fe01200041063a00000b200441e0026a24000b870201037f230041d0006b22022400200241086a41bad7c7004108108102200241186a4194dac0004112108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241386a41086a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000b970101047f230041106b22032400024002402002280208220441046a2205417f4c0d00200228020021020240024020050d00410121060c010b2005102c2206450d020b20034100360208200320053602042003200636020020042003107620032002200410742000200120032802002205200328020810b20102402003280204450d002005102e0b200341106a24000f0b1038000b1036000b9d0601087f20002802282101024002400240024020002d000022020d0020002d0001210020012001280200417f6a2203360200024020030d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22032003280200417f6a220336020020030d002001102e0b0240200041ff01710d0041000f0b4110102c2200450d03200041f8f7c60036020c2000410136020820004281808080103702004110102c2201450d0320014190f8c60036020c20014101360208200142818080801037020020002000280200417f6a220336020020030d012000280208200028020c2802001103000240200028020c280204450d002000280208102e0b200041046a22032003280200417f6a220336020020030d012000102e0c010b410021030240024002402002417f6a0e03000104010b2000410e6a2f010021022000410d6a2d000021042000410c6a2d000021052000410a6a2f01002106200041096a2d00002107200041086a2d00002108200041046a2d0000210020012001280200417f6a2203360200024020030d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22032003280200417f6a220336020020030d002001102e0b200041ff01710d0141012103200641107420074108747220087241056c200241107420044108747220057241036c490d010c030b4101210320024103460d020c010b4110102c2200450d02200041f8f7c60036020c2000410136020820004281808080103702004110102c2201450d0220014190f8c60036020c20014101360208200142818080801037020020002000280200417f6a220336020020030d002000280208200028020c2802001103000240200028020c280204450d002000280208102e0b200041046a22032003280200417f6a220336020020030d002000102e0b20012001280200417f6a22003602004102210320000d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22002000280200417f6a220036020020000d002001102e0b20030f0b1036000b31002001ad4220862000ad84200235020842208620022802002200ad84101f0240200241046a280200450d002000102e0b0bac0201037f230041e0006b22022400200241d9fcc6004106108102200241106a41dcf1cb004107108102024002404120102c2203450d002002422037023420022003360230200241306a200141201074200241c0006a200228023022012002280238220310d803200241dc006a200120036a360200200220013602582002200241d0006a3602542002200241c0006a360250200241206a200241d0006a107c02402002280234450d002001102e0b2002280228220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b20004100360208200020013602042000200436020020002002411010742000200241106a411010742000200228022022012003107402402002280224450d002001102e0b200241e0006a24000f0b1036000b1038000b8c0402067f027e230041d0006b220324002003200236020420032001360200200341086a2001200210ed0202400240200328020822010d00200042003703000c010b200328020c2102024002400240200341106a28020022044104490d002004417c7122054104460d0020054108460d002005410c460d00200441707122044110460d00200128000021052001280004210620012800082107200128000c2108200141186a29000021092001290010210a0240200441506a0e110102020202020202020202020202020201000b20044120470d010b20034100360220200342013703182003410a36022c200320033602282003200341186a360234200341cc006a41013602002003420137023c200341909dc5003602382003200341286a360248200341346a419cebc000200341386a103d1a2003280218200328022010ef020240200328021c450d002003280218102e0b420021090c010b2000200a370308200041386a2001290040370300200041286a2001290030370300200041186a2001290020370300200041106a2009370300200041d4006a2008360200200041d0006a2007360200200041cc006a2006360200200041c8006a2005360200200041c0006a200141c8006a290000370300200041306a200141386a290000370300200041206a200141286a290000370300420121090b200020093703002002450d002001102e0b200341d0006a24000bb63507017f0a7e017f067e047f047e037f230041d0066b2206240020062001360204200620053a001f20062003370308200620043703100240024002402003200484500d0020012002412010ec080d010b200041063a00000c010b200620023602e401200641a8026a200210c802200641d0056a20062802a802220120062802b00210c9020240024020062903d0054201510d0042002107200641e8016a41386a4200370300200641e8016a41306a4200370300200641e8016a41286a420037030020064188026a4200370300200641e8016a41186a4200370300200641e8016a41106a4200370300200641f0016a4200370300200642003703e80142002108420021094200210a4200210b42002104420021034200210c4200210d4200210e4200210f420021100c010b200641d0056a41386a290300210b200641d0056a41306a290300210a200641d0056a41206a2903002108200641d0056a41186a290300210c200641d0056a41106a290300210320064190066a290300210720062903d805210420064188026a200641d0056a41286a2903002209370300200641e8016a41286a200a370300200641e8016a41106a200c370300200641e8016a41306a200b3703002006200837038002200620043703e801200620073703a002200620033703f0012009210d200a210e2004210f200321100b024020062802ac02450d002001102e0b02400240200f2010844200520d00200d20062903f80184200e20064180026a29030084844200520d00200629039802200641a0026a2903008450450d0042002110410021110c010b42012110410121110b0240024020104201510d00200641e8036a4200370300200641e0036a4200370300200641d8036a4200370300200641d0036a4200370300200641c8036a4200370300200641c0036a4200370300200641b8036a4200370300200642003703b0030c010b200641d0036a2009370300200641d8036a200a370300200641e0036a200b370300200641c0036a200c370300200620083703c803200620073703e803200620043703b003200620033703b8030b2006200628020422013602f403200641e8046a200110c802200641d0056a20062802e804220520062802f00410c9020240024020062903d0054201510d004200210d200641f8036a41386a4200370300200641f8036a41306a4200370300200641f8036a41286a4200370300200641f8036a41206a4200370300200641f8036a41186a4200370300200641f8036a41106a420037030020064180046a4200370300200642003703f80342002112420021134200210c4200211442002104420021034200210f42002115420021164200210e420021170c010b200641d0056a41386a2903002114200641d0056a41306a290300210c200641d0056a41206a2903002112200641d0056a41186a290300210f200641d0056a41106a290300210320064190066a290300210d20062903d8052104200641f8036a41206a200641d0056a41286a2903002213370300200641f8036a41286a200c370300200641f8036a41106a200f370300200641f8036a41306a20143703002006201237039004200620043703f8032006200d3703b004200620033703800420132115200c21162004210e200321170b024020062802ec04450d002005102e0b02400240200e2017844200520d00201520062903880484201620064190046a29030084844200520d0020062903a804200641b0046a2903008450450d004200210e410021050c010b4201210e410121050b02400240200e4201510d004200210d20064198056a420037030020064190056a420037030020064188056a420037030020064180056a4200370300200641f8046a4200370300200641f0046a4200370300200642003703e80442002104420021030c010b20064188056a201337030020064190056a200c37030020064198056a2014370300200641f8046a200f3703002006201237038005200620043703e804200620033703f0040b024002400240024020042006290308220f7d220c2004562003200641086a41086a29030022177d2004200f54ad7d220420035620042003511b450d0041838a0c21054280808080b002210341c8a3c7002118410121190c010b2006200c3703e804200620043703f004024020062903b0032203200f7c22132003542218200641b0036a41086a290300221220177c2018ad7c220320125420032012511b450d0041838a08210542808080808001210341a984ca002118410121190c010b200620133703b003200641c8036a2903002112200620033703b8030240427f201320062903c0037c221420142013542218200320127c2018ad7c221220035420122003511b22181b4280c8afa025544100427f201220181b501b450d0041838a1021054280808080a002210341e4a3c7002118410121190c010b200641d0056a2006280204200f20174102200c200410d706024020062d00d0054106460d0041838a0421054280808080d002210341a0a3c7002118410121190c010b0240024020062d001f4101470d00200641a0056a200628020410c802200641d0056a20062802a005221920062802a80510c902200628029c06211820062903d0052103024020062802a405450d002019102e0b20034201520d012018450d010b427f200c20062903f8047c22032003200c542218200420064180056a2903007c2018ad7c220320045420032004511b22181b4280c8afa025544100427f200320181b501b450d0041838a1421054280808080900121034180a4c7002118410121190c010b200641a0056a41206a200641e8046a41306a2903002203370300200641a0056a41186a200641e8046a41286a2903002212370300200641a0056a41106a200641e8046a41206a2903002213370300200641a8056a200641e8046a41186a290300220f370300200620062903f80422173703a0052006200d3703c805200641d0056a41186a200f370300200641d0056a41206a22192013370300200641d0056a41286a221a2012370300200641d0056a41306a221b2003370300200620173703e0052006200c3703d005200620043703d80542012103200e420152ad211402400240427f200c20177c22122012200c5422182004200f7c2018ad7c221320045420132004511b22181b22124280c8afa025544100427f201320181b2213501b450d00200c2017842004200f8484220f50211842002103200f420052ad21170c010b201b290300211c201a290300211d2019290300211e200641d0056a41106a290300211620062903e805211f20062903d805211520062903d005210f42002117410121180b200641e0046a2013370300200641d8046a221a2012370300200641c8046a20043703002006200c3703c004200620173703d004200620143703b8040240024002400240024020052003420152720d00200620013602d0052001200641d0056a10bd060c010b0240200541017322052003420151720d00200620013602d0052001200641d0056a10be0641ff017122054103460d01024020050e03030200030b42002103410121194104210502402018450d000c060b2006201a3602d005200641d0056a10cc020c050b20034201522005710d020b200641e8046a200110c802200641d0056a20062802e804221920062802f004221a10c90220064198066a221b2802002120200641a0066a22212903002104200628029c06212220062903d005210c200642013703d00520064188066a201c4200200342015122051b37030020064180066a201d420020051b370300200641d0056a41286a201e420020051b370300200641f0056a201f420020051b370300200641e8056a2016420020051b370300200641d0056a41106a2015420020051b370300202120044200200c42015122181b3703002006419c066a2022410020181b360200201b2020410020181b36020020064190066a200d420020051b3703002006200f420020051b3703d8052019201a200641d8056a10c805024020062802ec04450d002019102e0b200641b8046a41106a2903002104200641b8046a41286a290300211320062903c004210c20062903d804211220062903b804210f20062903d00421170c040b20062903b80422044280808080708321032004a72118200641e0046a2903002113200641c8046a290300210420062903d804211220062903c004210c4100211920062903d00421170c010b200e420152211842002103410021190b0b20032018ad84210f2019450d00410121010c010b0240200f4201520d0020064188066a200437030020064180066a200c370300200641d0056a41086a41003a0000200641d9056a2001290000370000200641e1056a200141086a290000370000200641e9056a200141106a290000370000200641f1056a200141186a290000370000200641033a00d005200641d0056a10fe010b02400240201750450d004200210f0c010b200641d0056a41086a20062802f403220141086a290000370300200641d0056a41106a200141106a290000370300200641d0056a41186a200141186a290000370300200620012900003703d0054201210f0b200641f8036a41186a200641d0056a41186a2903002204370300200641f8036a41106a200641d0056a41106a2903002203370300200641f8036a41086a200641d0056a41086a290300220c370300200641e8046a41086a200c370300200641e8046a41106a2003370300200641e8046a41186a2004370300200620062903d00522043703f803200620043703e804410021010b200641f8036a41086a2218200641b0036a41186a290300370300200641f8036a41106a2219200641b0036a41206a290300370300200641f8036a41186a221a200641b0036a41286a290300370300200641f8036a41206a221b200641b0036a41306a290300370300200620062903c0033703f803200641b0036a41086a290300210420062903b0032103024002402001450d004200210e41012101200f210c0c010b200641e8036a2903002107200641d0056a41186a2018290300220a370300200641d0056a41206a2019290300370300200641d0056a41286a201a290300370300200641d0056a41306a201b290300370300200620062903f80322083703e005200620033703d005200620043703d8054200210d4201210e2010420152210102400240427f200320087c220c200c20035422182004200a7c2018ad7c220c200454200c2004511b22181b221742ffc7afa02556427f200c20181b22104200522010501b0d004200210e20032008842004200a8484420052ad210d0c010b20064180066a290300210b200641f8056a290300210a200641f0056a2903002109200641e0056a290300211620062903e805210820062903d805211520062903d00521140b2001ad210c200641a0056a41086a200641e8046a41086a290300370300200641a0056a41106a200641e8046a41106a290300370300200641a0056a41186a200641e8046a41186a290300370300200620062903e8043703a005410021010b20064190036a41086a200641a0056a41086a29030037030020064190036a41106a200641a0056a41106a29030037030020064190036a41186a200641a0056a41186a290300370300200620062903a0053703900302400240024002400240024020010d00200641d0026a2010370300200641c8026a22052017370300200641a8026a41106a200437030020064188036a201337030020064180036a22192012370300200641e0026a2201200629039003370300200641e8026a20064198036a290300370300200641f0026a20064190036a41106a290300370300200641f8026a200641a8036a290300370300200620033703b0022006200f3703d8022006200d3703c0022006200c3703a802024002402011200e420152720d00200620023602d0052002200641d0056a10bd060c010b024020114101732218200e420151720d00200620023602d0052002200641d0056a10be0641ff017122184103460d010240024020180e03010300010b0240200d500d00200620053602d005200641d0056a10cc020b200641d8026a10d204410121184104210520062903d802500d05200620193602d005200641d0056a10cc020c050b200641b0036a41286a200141286a290300370300200641b0036a41206a200141206a290300370300200641b0036a41186a200141186a290300370300200641b0036a41106a200141106a290300370300200641b0036a41086a200141086a290300370300200620012903003703b003410021180c040b200e4201522018710d020b200641f8036a200210c802200641d0056a20062802f8032219200628028004221110c90220064198066a221a280200211b200641a0066a22202903002104200628029c06212120062903d0052103200642013703d00520064188066a200b4200200e42015122051b37030020064180066a200a420020051b370300200641d0056a41286a2009420020051b370300200641d0056a41206a2008420020051b370300200641d0056a41186a2016420020051b370300200641d0056a41106a2015420020051b370300202020044200200342015122181b3703002006419c066a2021410020181b360200201a201b410020181b36020020064190066a2007420020051b37030020062014420020051b3703d80520192011200641d0056a41086a10c805024020062802fc03450d002019102e0b200641b0036a41086a2205200141086a290300370300200641b0036a41106a2218200141106a290300370300200641b0036a41186a2219200141186a290300370300200641b0036a41206a2211200141206a290300370300200641b0036a41286a221a200141286a290300370300200620012903003703b003200641a8026a41106a2903002104200641a8026a41286a290300211020062903b002210320062903c802211720062903a802210a20062903c002210d20062903d802210c200641f8036a41286a201a290300370300200641f8036a41206a2011290300370300200641f8036a41186a2019290300370300200641f8036a41106a2018290300370300200641f8036a41086a2005290300370300200620062903b0033703f803200641f8036a21010c030b410121180c010b200641b0036a41286a200141286a290300370300200641b0036a41206a200141206a290300370300200641b0036a41186a200141186a290300370300200641b0036a41106a200141106a290300370300200641b0036a41086a200141086a290300370300200620012903003703b003410021180b200641f8036a41286a200641b0036a41286a290300370300200641f8036a41206a200641b0036a41206a290300370300200641f8036a41186a200641b0036a41186a290300370300200641f8036a41106a200641b0036a41106a290300370300200641f8036a41086a200641b0036a41086a290300370300200620062903b0033703f803200641f8036a210120180d01200c210a200f210c0b200641a8026a41286a200141286a290300370300200641a8026a41206a200141206a290300370300200641a8026a41186a200141186a290300370300200641a8026a41106a200141106a290300370300200641a8026a41086a200141086a290300370300200620012903003703a8020240200a4201520d0020062802e401210120064188066a200437030020064180066a2003370300200641d0056a41086a41003a0000200641d9056a2001290000370000200641e1056a200141086a290000370000200641e9056a200141106a290000370000200641f1056a200141186a290000370000200641033a00d005200641d0056a10fe010b02400240200d50450d00420021040c010b200641e8016a41086a20062802e401220141086a290000370300200641e8016a41106a200141106a290000370300200641e8016a41186a200141186a290000370300200620012900003703e801420121040b200641e8046a41186a200641e8016a41186a290300370300200641e8046a41106a200641e8016a41106a290300370300200641e8046a41086a200641e8016a41086a290300370300200641d0056a41086a200641a8026a41086a290300370300200641d0056a41106a200641a8026a41106a290300370300200641d0056a41186a200641a8026a41186a290300370300200641d0056a41206a200641a8026a41206a290300370300200641d0056a41286a200641a8026a41286a290300370300200620062903e8013703e804200620062903a8023703d005410021010c010b410121010b200641b0016a41086a2218200641d0056a41086a290300370300200641b0016a41106a2219200641d0056a41106a290300370300200641b0016a41186a2211200641d0056a41186a290300370300200641b0016a41206a221a200641d0056a41206a290300370300200641b0016a41286a221b200641d0056a41286a29030037030020064190016a41086a2220200641e8046a41086a29030037030020064190016a41106a2221200641e8046a41106a29030037030020064190016a41186a2222200641e8046a41186a290300370300200620062903d0053703b001200620062903e80437039001024020010d00200641e0006a200629039001370300200641206a41106a2018290300370300200641206a41186a2019290300370300200641206a41206a2011290300370300200641206a41286a201a290300370300200641d0006a201b290300370300200641e8006a2020290300370300200641f0006a2021290300370300200641f8006a20222903003703002006200c370320200620062903b0013703282006200437035820064188016a201037030020064180016a22012017370300200641206a10d20402402006290320500d002006200641c8006a3602d005200641d0056a10cc020b200641d8006a10d20402402006290358500d00200620013602d005200641d0056a10cc020b200641086a41086a290300210420062903082103200641206a41186a2006280204220141186a290000220c370300200641206a41106a200141106a290000220a370300200641206a41086a200141086a290000220f370300200620012900002207370320200641a8066a2004370300200641a0066a2003370300200641d0056a41086a41023a0000200641d9056a2007370000200641e1056a200f370000200641e9056a200a370000200641f1056a200c370000200641f9056a200229000037000020064181066a200241086a29000037000020064189066a200241106a29000037000020064191066a200241186a290000370000200641033a00d005200641d0056a10fe01200041063a00000c010b20002005360200200041046a200c3702000b200641d0066a24000beb130a017f047e017f047e0b7f017e027f017e017f0c7e230041f0026b2204240002400240200220038450450d00420021054200210642002107420021080c010b20044180016a200110c802200441f0016a200428028001220920042802880110c90220044190026a290300210a20044188026a290300210b20044180026a290300210620042903f801210c20042903f001210d0240200428028401450d002009102e0b420021050240200d4201520d00200c200b842006200a8484500d00200441f0016a41c8006a210e200441f0016a41086a210f20044180016a41306a211020044180016a41206a211141002109200441f0016a41386a2112200441f0016a41106a2113200441c0006a41286a2114200441c0006a41186a211502400240024003402004200136022c20044180016a200110c802200441f0016a200428028001221620042802880110c90220122903002107200441f0016a41306a2217290300210b200441f0016a41206a221829030021082013290300210d2004290398022105200429038802211920042903f801210a20042903b002210c20042903f0012106200441306a41086a200e41086a2903003703002004200e2903003703300240024020064201510d004200210c200441c0006a41386a4200370300200441c0006a41306a420037030020144200370300200441c0006a41206a420037030020154200370300200441c0006a41106a4200370300200441c0006a41086a420037030020044200370340420021054200210b4200210a4200210d0c010b2014200b370300200441c0006a41306a2007370300200420053703602004200a3703402004200c370378200420193703502004200d370348200420083703580b0240200428028401450d002016102e0b02400240200a200d844200520d002005200429035084200429037084200b201529030084200441c0006a41386a290300848450450d0042002119410021160c010b200441c0006a41106a290300210a200441c0006a41306a290300210820142903002106200441c0006a41206a29030021072004290348210d2004290340210b4201211920042903582105410121160b02402019420152221a450d004200210742002106420021084200210c4200210a420021054200210b4200210d0b200441f0016a41286a221b2006370300201720083703002004200b3703f0012004200d3703f801200441f0016a41186a200542002005200d7c200a200b7c2206200a54ad7c220820064280c8afa02554ad7d221920064280b8d0df5a7c221c2006562019200856200642ffc7afa025561b221d1b220620034200201c201d1b2208200254200620035420062003511b221d1b200320091b22062005200a20082002201d1b200220091b220856200520065620052006511b221d1b22067d200a2008200a201d1b220554ad7d221937030020042007370390022004200a20057d221c37038002200320067d2002200554ad7d2108200220057d2107201aad211e02400240427f200b201c7c220a200a200b54221a200d20197c201aad7c220a200d54200a200d511b221a1b221f42ffc7afa02556427f200a201a1b220a420052200a501b0d002020200a200b201c84200d20198484220c5022171b21202021201f20171b21214200210a200c420052ad21190c010b20172903002122201b29030021232018290300212420132903002125200429038802212620042903f801212720042903f00121284201210a4200211941012117200c21290b20044180016a41c8006a200837030020044180016a41386a200637030020044180016a41286a202037030020044180016a41106a200d370300200420073703c001200420053703b001200420213703a0012004200b3703880120042019370398012004201e3703800102402016200a420152720d00200420013602f0012001200441f0016a10bd060c030b20164101732216200a420151720d01200420013602f00102402001200441f0016a10be0641ff017122164102460d0020160d03200441c8016a2903002108200441b8016a2903002106200441a8016a290300212020044190016a290300210d20042903c001210720042903b001210520042903a0012121200429038801210b2004290398012119200429038001211e0c040b024020170d00200420113602f001200441f0016a10cc020b200420103602f001200441f0016a10cc02200941016a22094102470d000b420021050c030b200a4201522016710d010b200441d0016a200110c802200441f0016a20042802d001220920042802d801221610c90220042903f001210d200441306a41086a2217200e41086a2903003703002004200e29030037033002400240200d4201510d00200441e0016a41086a4200370300200442003703e0010c010b200441e0016a41086a2017290300370300200420042903303703e0010b0240200a4201510d0042002128420021274200212442002123420021224200212942002125420021260b200e20042903e001370300200441a0026a202337030020044190026a2026370300200441f0016a41106a2027370300200441f0016a41386a2022370300200e41086a200441e0016a41086a29030037030020042024370398022004202537038802200420283703f801200420293703b002200442013703f00120092016200f10c805024020042802d401450d002009102e0b20044180016a41106a290300210d200441a8016a290300212020044180016a41386a2903002106200441c8016a2903002108200429038801210b20042903a001212120042903b001210520042903c0012107200429038001211e20042903980121190b0240201e4201520d00200441a8026a200d370300200441a0026a200b370300200441f0016a41086a41003a0000200441f9016a200129000037000020044181026a200141086a29000037000020044189026a200141106a29000037000020044191026a200141186a290000370000200441033a00f001200441f0016a10fe010b02400240201950450d00420021030c010b200441f0016a41086a200428022c220141086a290000370300200441f0016a41106a200141106a290000370300200441f0016a41186a200141186a290000370300200420012900003703f001420121030b200441086a41186a200441f0016a41186a2201290300220d370300200441086a41106a200441f0016a41106a2209290300220a370300200441086a41086a200441f0016a41086a290300220b370300200420042903f0012202370308200441a0026a202037030020044198026a221620213703002009200b3703002001200a37030020044190026a200d370300200420033703f001200420023703f801200441f0016a10d20420042903f001500d01200420163602800120044180016a10cc020c010b4200210620022107200321080b2000200737031020002005370300200041186a200837030020002006370308200441f0026a24000b9b0304057f027e017f027e230041d0006b22012400200141386a22024200370300200141206a41106a22034200370300200141206a41086a2204420037030020014200370320200141c0006a41f8fcc60041081081022004200141c0006a41086a220529000037030020012001290040370320200141c0006a41a8aac800410d1081022002200529000037030020032001290040370300200141086a200141206a412010f802200141086a41106a290300210620012903102107200128020821082000280200220041086a29030021092000290300210a20024200370300200342003703002004420037030020014200370320200141c0006a41f8fcc60041081081022004200529000037030020012001290040370320200141c0006a41a8aac800410d1081022002200529000037030020032001290040370300200142002006420020081b220620097d2007420020081b2207200a54ad7d22092007200a7d220a200756200920065620092006511b22021b37034820014200200a20021b370340200141206a4120200141c0006a411010b201200141d0006a24000b8f0201027f230041d0006b22022400200241d4e2cc0036023020022001360228200241edde91e30636022c02404104102c2203450d002002420437023c20022003360238200241386a200241286a41047241041074200241386a200141081074200228023821012002200228024036024c200220013602482002200241c8006a10d0040240200228023c450d002001102e0b0240024020022d00004101470d0020004200370000200041186a4200370000200041106a4200370000200041086a42003700000c010b20002002290001370000200041186a200241196a290000370000200041106a200241116a290000370000200041086a200241096a2900003700000b200241d0006a24000f0b1036000b9a0304057f027e017f027e230041d0006b22012400200141386a22024200370300200141206a41106a22034200370300200141206a41086a2204420037030020014200370320200141c0006a41f8fcc60041081081022004200141c0006a41086a220529000037030020012001290040370320200141c0006a41a8aac800410d1081022002200529000037030020032001290040370300200141086a200141206a412010f802200141086a41106a290300210620012903102107200128020821082000280200220041086a29030021092000290300210a20024200370300200342003703002004420037030020014200370320200141c0006a41f8fcc60041081081022004200529000037030020012001290040370320200141c0006a41a8aac800410d10810220022005290000370300200320012900403703002001427f20092006420020081b22067c200a2007420020081b22077c22092007542202ad7c22072002200720065420072006511b22021b3703482001427f200920021b370340200141206a4120200141c0006a411010b201200141d0006a24000bd88f01040a7f047e047f037e230022032104200341c0086b416071220324000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e0b00010203040506070d1817000b20034194056a410136020020034201370284052003419cc3cb0036028005200341043602e403200341a4a7c7003602e0032003200341e0036a3602900520034180056a4198f3c0001044000b200141246a2802002105200141216a2d00002106200341b8076a41186a200141196a290000370300200341b8076a41106a200141116a290000370300200341b8076a41086a200141096a290000370300200320012900013703b80720034180056a41286a2201200241286a28020036020020034180056a41206a2207200241206a29020037030020034180056a41186a2208200241186a29020037030020034180056a41106a2209200241106a29020037030020034180056a41086a220a200241086a2902003703002003200229020037038005200341e0036a20034180056a10c102200341c0036a41086a2202200341e0036a41096a290000370300200341c0036a41106a220b200341e0036a41116a290000370300200341c0036a41186a220c200341e0036a41196a290000370300200320032900e1033703c00320032d00e0034101460d14200341a0026a41186a200c290300370300200341a0026a41106a200b290300370300200341a0026a41086a2002290300370300200320032903c0033703a00220034180056a200341b8076a200341a0026a200610d002200341e0036a41086a2008290300370300200341e0036a41106a2007290300370300200341e0036a41186a2001280200360200200320092903003703e003200a290300210d20032802840521012003280280054101460d2f200341e0046a41186a2202200341e0036a41186a280200360200200341e0046a41106a2206200341e0036a41106a290300370300200341e0046a41086a2207200341e0036a41086a290300370300200320032903e0033703e00402402001450d0020034180056a410710d102200329028405210d20032802800521010c300b200341ec036a20032903e004370200200341f4036a2007290300370200200341e0036a411c6a200629030037020020034184046a20022802003602002003200d3702e403200341003602e003200341d8076a41186a200341b8076a41186a290300370300200341d8076a41106a200341b8076a41106a290300370300200341d8076a41086a200341b8076a41086a290300370300200320032903b8073703d80720034180056a200541b00210e9081a200341e0036a200341d8076a20034180056a10d2022005102e200320032800c0043602a0042003200341c3046a2800003600a304200041186a41003a000020004200370308200020032802a0043600192000411c6a20032800a30436000020004200370300200424000f0b200141246a2802002109200141216a2d0000210a200341a0036a41186a2205200141196a290000370300200341a0036a41106a2206200141116a290000370300200341a0036a41086a2207200141096a290000370300200320012900013703a003200341e0036a41286a200241286a280200360200200341e0036a41206a200241206a290200370300200341e0036a41186a200241186a290200370300200341e0036a41106a200241106a290200370300200341e0036a41086a200241086a290200370300200320022902003703e003200341d8076a200341e0036a10c102200341c0036a41086a2201200341d8076a41096a290000370300200341c0036a41106a2202200341d8076a41116a290000370300200341c0036a41186a2208200341d8076a41196a290000370300200320032900d9073703c00320032d00d8074101460d11200341a0046a41186a2008290300370300200341a0046a41106a2002290300370300200341a0046a41086a2001290300370300200320032903c0033703a004200341c0046a41186a2005290300370300200341c0046a41106a2006290300370300200341c0046a41086a2007290300370300200320032903a0033703c0040240200341a0046a200341c0046a412010ec080d00200341d8076a410810d102200341ef036a200341d8076a41086a280200220136000020034198056a41003a0000200341a8056a2001360000200320032903d8073700e703200341a1056a200341e0036a41086a29000037000020034200370388052003420137038005200320032900e00337009905410121020c2c0b200341e0046a41186a2206200341c0046a41186a290300370300200341e0046a41106a2207200341c0046a41106a290300370300200341e0046a41086a2208200341c0046a41086a290300370300200320032903c0043703e004200341b0086a200341a0046a10d302200341e0036a20032802b00820032802b80810d402200341ec036a280200210b0240024020032802e00322050d004200210e4100210141042105410021024200210d0c010b200341e0036a41186a290300210d200341e0036a41106a290300210e200341e0036a41086a280200210220032802e40321010b200341b8076a41186a2006290300370300200341b8076a41106a2007290300370300200341b8076a41086a2008290300370300200320032903e0043703b807024020024120490d00200341e0036a410110d10220032f00e10320032d00e3034110747221020c290b200341f4076a200341b8076a41186a290300370200200341ec076a200341b8076a41106a290300370200200341e4076a200341b8076a41086a290300370200200320032903b8073702dc072003200a3a00fc07200320093602d807200341306a20052002200341d8076a10d5022003280230450d0b20032802342107200341e0036a41206a200341d8076a41206a290300370300200341e0036a41186a200341d8076a41186a290300370300200341e0036a41106a200341d8076a41106a290300370300200341e0036a41086a200341d8076a41086a290300370300200320032903d8073703e00320022007490d12024002400240024020022001470d00200141016a22062001490d09200141017422082006200820064b1b22064104200641044b1bad42287e220f422088a7454102742106200fa721080240024020010d00200341003602c0030c010b200341c8036a4104360200200320053602c0032003200141286c3602c4030b20034180036a20082006200341c0036a107d20034188036a28020021012003280280034101460d012003280284032105200141286e21010b2005200741286c6a220641286a2006200220076b41286c10ea081a200641206a200341e0036a41206a290300370200200641186a200341e0036a41186a290300370200200641106a200341e0036a41106a290300370200200641086a200341e0036a41086a290300370200200620032903e003370200200341206a200241016a2202ad42004280cdad9d01420010e80820032903202210428088caade9057c220f200e56200341206a41086a290300200f201054ad7c2210200d562010200d5122061b450d01200341e0036a200341a0046a200f200e7d2010200d7d200f200e54ad7d10c30220032d00e00322064106460d0220032f00e10320032d00e30341107472210220032902e403210d0c2c0b2001450d070c290b200e200f58200d20105820061b0d00200341106a200341a0046a200e200f7d200d20107d200e200f54ad7d10fb010b200341f8036a20103703002003200f3703f0032003200b3602ec03200320023602e803200320013602e403200320053602e00320032802b808210220032802b00821060240024020050d002006200210ff010c010b20062002200341e0036a10d6022005450d002001450d00200141286c450d002005102e0b20034198056a41003a00002003419c056a200341a3086a28000036000020034200370380052003420037038805200320032800a008360099050c2a0b200141246a2802002109200141216a2d0000210a200341c0046a41186a2205200141196a290000370300200341c0046a41106a2206200141116a290000370300200341c0046a41086a2207200141096a290000370300200320012900013703c004200341e0036a41286a200241286a280200360200200341e0036a41206a200241206a290200370300200341e0036a41186a200241186a290200370300200341e0036a41106a200241106a290200370300200341e0036a41086a200241086a290200370300200320022902003703e003200341a0026a200341e0036a10c102200341c0036a41086a2201200341a0026a41096a290000370300200341c0036a41106a2202200341a0026a41116a290000370300200341c0036a41186a2208200341a0026a41196a290000370300200320032900a1023703c003024020032d00a0024101470d0020034180056a41206a41023a000020034180056a41186a41003a00002003420037038805200342013703800520034180056a41086a21010c250b200341e0046a41186a2008290300370300200341e0046a41106a2002290300370300200341e0046a41086a2001290300370300200320032903c0033703e004200341a0036a200341e0046a10d302200341a0026a20032802a00320032802a80310d402200341b8076a41186a2005290300370300200341b8076a41106a2006290300370300200341b8076a41086a2007290300370300200320032903c0043703b807200341a0026a41186a2201290300210e200120032903f803370300200341003602e00320032903b0022110200320032903f0033703b00220032903a802210f200320032903e8033703a80220032903a002210d200320032903e0033703a002200da72201450d0f200341fc036a200341b8076a41186a290300370200200341f4036a200341c8076a290300370200200341ec036a200341b8076a41086a290300370200200320032903b8073702e4032003200a3a008404200320093602e003200341d8006a2001200fa72205200341e0036a10d502200d422088a721020240024020032802580d00200328025c220620054f0d102001200641286c6a2207200741286a20052006417f736a41286c10ea081a02402005417f6a22050d004200210f4200210d0c220b200341c8006a2005ad42004280cdad9d01420010e8082003290348220d428088caade9057c220f201056200341d0006a290300200f200d54ad7c220d200e56200d200e511b450d21200341a0046a200341e0046a200f20107d200d200e7d200f201054ad7d10c30220032d00a00422064106460d2220032d00a304210520032f00a104210720032902a404210d200341a0056a20063a000020034198056a41003a00002003200720054110747222053b00a105200341a3056a20054110763a00002003200d3702a405200342003703880520034201370380050c010b200341c0036a410210d102200341af046a200341c0036a41086a280200220536000020034180056a41186a41003a0000200341a8056a2005360000200320032903c0033700a704200341a1056a200341a0046a41086a29000037000020034200370388052003420137038005200320032900a004370099050b2002450d23200241286c450d232001102e0c230b20034180056a41286a200241286a28020036020020034180056a41206a200241206a29020037030020034180056a41186a200241186a29020037030020034180056a41106a200241106a29020037030020034180056a41086a200241086a2902003703002003200229020037038005200341e0036a20034180056a10c102200341c0036a41086a2201200341e9036a290000370300200341c0036a41106a2202200341f1036a290000370300200341c0036a41186a2205200341f9036a290000370300200320032900e1033703c003024020032d00e0034101470d00200320032800e0043602c004200320032900a0023703b8072003200341e3046a2800003600c3042003200341a7026a2800003600bf07200041186a41003a000020004200370308200020032802c0043600192000411c6a20032800c304360000200041206a41023a0000200020032903b807370021200041286a20032800bf0736000020004201370300200424000f0b200341d8076a41186a2005290300370300200341d8076a41106a2002290300370300200341d8076a41086a2001290300370300200320032903c0033703d807200341e0036a200341d8076a10d30220034180056a20032802e003220220032802e803220110d4020240024020032802800522050d004200210d41042105410021014200210e0c010b2002200110ff0120034198056a290300210e20034190056a290300210d20032802840521010b024020032802e403450d002002102e0b02402001450d00200141286c450d002005102e0b200341e0006a200341d8076a200d200e10fb01200320032800e0043602c0042003200341e3046a2800003600c304200041186a41003a000020004200370308200020032802c0043600192000411c6a20032800c30436000020004200370300200424000f0b41022105200141026a2f01002106200141046a2802002109200320012d00013a00b00820034180056a41286a200241286a28020036020020034180056a41206a200241206a29020037030020034180056a41186a200241186a29020037030020034180056a41106a200241106a29020037030020034180056a41086a2201200241086a2902003703002003200229020037038005200341e0036a20034180056a10c102200341d8076a41086a2202200341e9036a290000370300200341d8076a41106a2207200341f1036a290000370300200341d8076a41186a2208200341f9036a290000370300200320032900e1033703d807024020032d00e0034101460d00200341a0026a41186a2008290300370300200341a0026a41106a2007290300370300200341a0026a41086a2002290300370300200320032903d8073703a002200341b8076a41186a22024200370300200341b8076a41106a22054200370300200341b8076a41086a22074200370300200342003703b80720034180056a41d9fcc60041061081022007200129000037030020032003290080053703b80720034180056a4180f4cb004106108102200220012900003703002005200329008005370300200341f8006a200341b8076a4120108e02200328027c210120032802782102200341f0006a41fcc6cb004110108e022003280274210520032802702107200320063b01940520032005410020071b36028c0520032001410020021b36028805200341a8f3c000360280052003200341b0086a360290052003200341a0026a36028405200341c0036a20034180056a10d702200341203602dc072003200341c0036a3602d80720034180056a200341d8076a1093010240024020032d0080054101470d00200341f8036a4200370300200341f0036a4200370300200341e8036a4200370300200342003703e0030c010b200341f8036a20034199056a290000370300200341f0036a20034191056a290000370300200341e8036a20034189056a29000037030020032003290081053703e0030b20034180056a200341e0036a10d3022003280280052202200328028805108f0221010240200328028405450d002002102e0b02402001450d0020034180056a410510d10220032003290081053703e004200320034188056a2800003600e70420032d00800521050c010b20034180056a200341a0026a4280d5f7caea05420010c302200320032900810537039004200320034180056a41086a28000036009704024020032d00800522054106470d00200341a0046a41086a200341a0026a41086a290300370300200341a0046a41106a2202200341a0026a41106a290300370300200341a0046a41186a2205200341a0026a41186a290300370300200320032903a0023703a00420032d00b00821074128102c2201450d2620012009360200200120032903a004370204200120073a0024200120032f01c0033b00252001410c6a200341a8046a290300370200200141146a20022903003702002001411c6a2005290300370200200141276a200341c2036a2d00003a0000200341b8076a200341e0036a10d30220032802c007210520032802b8072102413c102c2207450d262003423c3702dc07200320073602d80720014101200341d8076a10d802200342003703880520034280d5f7caea0537038005200341d8076a20034180056a411010742002200520032802d807220720032802e00710b201024020032802dc07450d002007102e0b024020032802bc07450d002002102e0b2001102e20032d00b00821012003418d056a200341e0036a41086a29030037000020034195056a200341e0036a41106a2903003700002003419d056a200341e0036a41186a290300370000200341a5056a20032903a002370000200341ad056a200341a0026a41086a290300370000200341b5056a200341a0026a41106a290300370000200341bd056a200341a0026a41186a290300370000200341c6056a20063b0100200341c5056a20013a0000200341013a008405200341133a008005200320032903e0033700850520034180056a10fe01200320032800a003360280032003200341a3036a28000036008303200041186a41003a00002000420037030820002003280280033600192000411c6a20032800830336000020004200370300200424000f0b20032003280097043600e70420032003290390043703e0040b200320032800a00336028003200320032903e0043703c004200320032800e7043600c7042003200341a3036a28000036008303200041186a41003a00002000420037030820002003280280033600192000411c6a200328008303360000200041206a20053a0000200020032903c004370021200041286a20032800c70436000020004201370300200424000f0b200141286a2802002106200141246a2802002107200141226a2f01002108200141216a2d00002105200341a0026a41186a200141196a290000370300200341a0026a41106a200141116a290000370300200341a0026a41086a200141096a290000370300200320012900013703a002200320053a00b00820034180056a41286a200241286a28020036020020034180056a41206a200241206a29020037030020034180056a41186a200241186a29020037030020034180056a41106a200241106a29020037030020034180056a41086a200241086a2902003703002003200229020037038005200341e0036a20034180056a10c102200341a0046a41086a2201200341e0036a41096a290000370300200341a0046a41106a2202200341e0036a41116a290000370300200341a0046a41186a2205200341e0036a41196a290000370300200320032900e1033703a0040240024020032d00e0034101460d00200341d8076a41186a2005290300370300200341d8076a41106a2002290300370300200341d8076a41086a2001290300370300200320032903a0043703d807200320083b0194052003200636028c052003200736028805200341a8f3c000360280052003200341b0086a360290052003200341a0026a36028405200341c0036a20034180056a10d702200341203602bc072003200341c0036a3602b80720034180056a200341b8076a1093010240024020032d0080054101470d00200341f8036a4200370300200341f0036a4200370300200341e8036a4200370300200342003703e0030c010b200341f8036a20034199056a290000370300200341f0036a20034191056a290000370300200341e8036a20034189056a29000037030020032003290081053703e0030b0240200341e0036a200341d8076a412010ec08450d0020034180056a410610d10220032003290081053703e004200320034188056a2800003600e70420032d00800521010c020b200341b8076a200341d8076a10d30220034180056a20032802b807220220032802c007220110d4020240024020032802800522050d004200210d41002101410421054200210e0c010b2002200110ff0120034198056a290300210e20034190056a290300210d20032802840521010b024020032802bc07450d002002102e0b02402001450d00200141286c450d002005102e0b20034180016a200341a0026a200d200e10fb01200320032800a003360280032003200341a3036a28000036008303200041186a41003a00002000420037030820002003280280033600192000411c6a20032800830336000020004200370300200424000f0b410221010b200320032800a00336028003200320032903e0043703c004200320032800e7043600c7042003200341a3036a28000036008303200041186a41003a00002000420037030820002003280280033600192000411c6a200328008303360000200041206a20013a0000200020032903c004370021200041286a20032800c70436000020004201370300200424000f0b20034180036a41186a200141196a29000037030020034180036a41106a200141116a29000037030020034180036a41086a200141096a2900003703002003200129000137038003200341a0036a41186a200141396a290000370300200341a0036a41106a200141316a290000370300200341a0036a41086a200141296a2900003703002003200141216a2900003703a00320034180056a41286a200241286a28020036020020034180056a41206a200241206a29020037030020034180056a41186a200241186a29020037030020034180056a41106a200241106a29020037030020034180056a41086a2201200241086a2902003703002003200229020037038005200341e0036a20034180056a10c102200341d8076a41086a2202200341e0036a41096a290000370300200341d8076a41106a2205200341e0036a41116a290000370300200341d8076a41186a2206200341e0036a41196a290000370300200320032900e1033703d80720032d00e0034101460d09200341c0046a41186a2006290300370300200341c0046a41106a2005290300370300200341c0046a41086a2002290300370300200320032903d8073703c004200341e0036a20034180036a10d30220034180056a20032802e003220620032802e80310d4022001280200410020032802800522011b21022003280284052105024020032802e403450d002006102e0b2001410420011b21112005410020011b2112024002402002450d002011200241286c6a210c20034180056a410472210b20034180056a41256a2106200341d8076a41026a2105201121010340200341e0036a41206a2207200141206a280200360200200341e0036a41186a2208200141186a290200370300200341e0036a41106a2209200141106a290200370300200341e0036a41086a220a200141086a290200370300200320012902003703e003200141246a2d000021022005200141276a2d00003a00002003200141256a2f00003b01d80720024107460d01200620032f01d8073b000020034180056a41206a200728020036020020034180056a41186a200829030037030020034180056a41106a200929030037030020034180056a41086a200a290300370300200641026a20052d00003a0000200320032903e00337038005200320023a00a405200b200341c0046a412010ec08450d02200141286a2201200c470d000b0b20034180056a410310d10220032003290081053703e802200320034188056a2800003600ef0220032d00800521012012450d1b201241286c450d1b2011102e0c1b0b02402012450d00201241286c450d002011102e0b200341c0036a41086a220520034180036a41086a290300370300200341c0036a41106a220620034180036a41106a290300370300200341c0036a41186a220920034180036a41186a290300370300200341a0046a41086a220a200341a0036a41086a290300370300200341a0046a41106a220b200341a0036a41106a290300370300200341a0046a41186a220c200341a0036a41186a29030037030020032003290380033703c003200320032903a0033703a0044200210d200341b8076a41186a22014200370300200341b8076a41106a22074200370300200341b8076a41086a22084200370300200342003703b80720034180056a41d9fcc6004106108102200820034180056a41086a220229000037030020032003290080053703b80720034180056a4180f4cb004106108102200120022900003703002007200329008005370300200341b0016a200341b8076a4120108e0220032802b401211220032802b0012111200820052903003703002007200629030037030020012009290300370300200341e0046a41086a2209200a290300370300200341e0046a41106a220a200b290300370300200341e0046a41186a220b200c290300370300200320032903c0033703b807200320032903a0043703e00420034180086a200341c0046a10d90220034180056a20032802800820032802880810da022003418c056a280200210c0240024020032802800522060d004104210641002102410021054200210e0c010b20034180056a41186a290300210e20034180056a41106a290300210d2002280200210520032802840521020b200341d8076a41086a2008290300370300200341d8076a41106a2007290300370300200341d8076a41186a2001290300370300200341a0026a41086a2009290300370300200341a0026a41106a200a290300370300200341a0026a41186a200b290300370300200320032903b8073703d807200320032903e0043703a0022005411f4b0d0320034180056a41086a2207200341d8076a41086a29030037030020034180056a41106a2208200341d8076a41106a29030037030020034180056a41186a2209200341d8076a41186a290300370300200341e0036a41086a220a200341a0026a41086a290300370300200341e0036a41106a220b200341a0026a41106a290300370300200341e0036a41186a2213200341a0026a41186a290300370300200320032903d80737038005200320032903a0023703e00320052002470d02200241016a22012002490d00200241017422142001201420014b1b22014104200141044b1bad42c4007e220f422088a7454102742101200fa721140240024020020d00200341003602b0080c010b200341b8086a4104360200200320063602b0082003200241c4006c3602b4080b200341a0086a20142001200341b0086a107d200341a8086a280200210120032802a0084101470d0120010d220b1038000b20032802a4082106200141c4006e21020b2006200541c4006c6a22012012410020111b36020020012003290380053702042001410c6a2007290300370200200141146a20082903003702002001411c6a2009290300370200200120032903e0033702242001412c6a200a290300370200200141346a200b2903003702002001413c6a2013290300370200200341a0016a200541016a2205ad420042809adbba02420010e8080240024020032903a0012210428088caade9057c220f200d58200341a0016a41086a290300200f201054ad7c2210200e582010200e5122011b0d0020034180056a200341c0046a200f200d7d2010200e7d200f200d54ad7d10c30220032d00800522014106460d0120032d008305210520032f008105210720032003290284053702940820032007200541107472410874200172360290080c170b200d200f58200e20105820011b0d0020034190016a200341c0046a200d200f7d200e20107d200d200f54ad7d10fb010b41062101200341063a0090080c010b20034190086a410110d102200d210f200e211020032d00900822014106470d140b20034198056a20103703002003200f370390052003200c36028c05200320053602880520032002360284052003200636028005200328028808210520032802800821070240024020060d002007200510ff010c010b2007200520034180056a10db022006450d002002450d00200241c4006c450d002006102e0b20032003290091083703e003200320034198086a2800003600e7030c140b200341b8076a41186a200141196a290000370300200341b8076a41106a200141116a290000370300200341b8076a41086a200141096a290000370300200320012900013703b807200341a0026a41186a200141396a290000370300200341a0026a41106a200141316a290000370300200341a0026a41086a200141296a2900003703002003200141216a2900003703a00220034180056a41286a200241286a28020036020020034180056a41206a200241206a29020037030020034180056a41186a200241186a29020037030020034180056a41106a200241106a29020037030020034180056a41086a200241086a2902003703002003200229020037038005200341e0036a20034180056a10c102200341c0036a41086a2201200341e0036a41096a290000370300200341c0036a41106a2202200341e0036a41116a290000370300200341c0036a41186a2205200341e0036a41196a290000370300200320032900e1033703c00320032d00e0034101460d01200341d8076a41186a2005290300370300200341d8076a41106a2002290300370300200341d8076a41086a2001290300370300200320032903c0033703d807200341e0046a200341d8076a10d902200341e0036a20032802e00420032802e80410da02200341e0036a41186a2201290300210e200120032903980537030041002108200341003602800520032903f003211020032003290390053703f00320032903e803210f20032003290388053703e80320032903e003210d20032003290380053703e003200da72207450d02200d422088210d0240200fa72206450d00200741246a210a41002109410021084100210202400340024002402008450d002007200241c4006c6a21012007200220096a41c4006c6a210503400240200141046a200341b8076a412010ec080d00200141246a200341a0026a412010ec08450d030b2005200141c40010e90841c4006a2105200141c4006a2101200241016a22022006490d000c040b0b200a200241c4006c6a210103400240200141606a200341b8076a412010ec080d002001200341a0026a412010ec08450d020b200141c4006a2101200241016a22022006490d000b410021080c030b2009417f6a2109200841016a2108200241016a22022006490d000b0b024020080d00410021080c010b2007200220086b41c4006c6a2007200241c4006c6a200620026b41c4006c10ea081a0b200da7210202400240200620086b22012006490d0020034180056a410210d1020c010b200d200f422086842115024020010d004200210f4200210d0c0e0b200341c8016a2001ad2216420042809adbba02420010e80820032903c801220d428088caade9057c220f201058200341d0016a290300200f200d54ad7c220d200e58200d200e511b0d0d20034180056a200341d8076a200f20107d200d200e7d200f201054ad7d10c302024020032d00800522014106470d002016422086201542ffffffff0f8384210e0c0f0b20032d008305210520032f008105210620032003290284053702840520032006200541107472410874200172360280050b2002450d0b200241c4006c450d0b2007102e0c0b0b200341e0036a410510d10220032f00e10320032d00e3034110747221020c1c0b410221010c0f0b20034180056a410210d1020c080b410221010c100b200620051046000b200341a0046a410210d102200341ef036a200341a0046a41086a280200220136000020034198056a41003a0000200341a8056a2001360000200320032903a0043700e703200341a1056a200341e0036a41086a29000037000020034200370388052003420137038005200320032900e003370099050c130b20034180056a41206a41023a000020034180056a41186a41003a00002003420037038805200342013703800520034180056a41086a21010c1a0b200720021045000b410221010c1a0b200141c4006a2802002107200141c1006a2d00002105200341c0046a41186a200141196a290000370300200341c0046a41106a200141116a290000370300200341c0046a41086a200141096a290000370300200320012900013703c004200341e0046a41186a200141396a290000370300200341e0046a41106a200141316a290000370300200341e0046a41086a200141296a2900003703002003200141216a2900003703e00420034180056a41286a2201200241286a28020036020020034180056a41206a2206200241206a29020037030020034180056a41186a2208200241186a29020037030020034180056a41106a2209200241106a29020037030020034180056a41086a220a200241086a2902003703002003200229020037038005200341e0036a20034180056a10c10202400240024020032d00e0034101470d00410221090c010b20034180056a200341e0046a200341c0046a200510d002200341e0036a41086a2008290300370300200341e0036a41106a2006290300370300200341e0036a41186a2001280200360200200320092903003703e00320032f00850520032d008705411074722108200a290300210d20032d00840521092003280280054101460d00200341a0046a41186a200341e0036a41186a2201280200360200200341a0046a41106a200341e0036a41106a290300370300200341a0046a41086a200341e0036a41086a290300370300200320032903e0033703a00420034100360288052003420137038005200720034180056a109002200341b8076a20032802800520032802880510b001200341a0026a41186a200341b8076a41186a2202290200370300200341a0026a41106a200341b8076a41106a2205290200370300200341a0026a41086a200341b8076a41086a2206290200370300200320032902b8073703a0020240200328028405450d00200328028005102e0b200242003703002005420037030020064200370300200342003703b80720034180056a41d9fcc6004106108102200620034180056a41086a220a29000037030020032003290080053703b80720034180056a4180f4cb0041061081022002200a290000370300200520032900800537030020034198026a200341b8076a4120108e02200328029c0221022003280298022105200341d8076a200341c0046a10d902200341e0036a20032802d80720032802e00710da022001290300210f200120032903980537030020032903f003211520032003290390053703f00320032903e803211020032003290388053703e803200341003602800520032903e003210e20032003290380053703e0030240024002400240024002400240200ea7220a450d00200e422088210e024002402010a722060d004100210c0c010b2002410020051b210b20084108742009722111410021134100210c410021020240034002400240200c450d00200a200241c4006c6a2101200a200220136a41c4006c6a210503400240200141046a200341e0046a412010ec080d00200141246a200341a0026a412010ec080d004100200b20012802006b22122012200b4b1b20114f0d030b2005200141c40010e90841c4006a2105200141c4006a2101200241016a22022006490d000c040b0b200a200241c4006c6a210103400240200141046a200341e0046a412010ec080d00200141246a200341a0026a412010ec080d004100200b20012802006b22052005200b4b1b20114f0d020b200141c4006a2101200241016a22022006490d000b4100210c0c030b2013417f6a2113200c41016a210c200241016a22022006490d000b0b0240200c0d004100210c0c010b200a2002200c6b41c4006c6a200a200241c4006c6a200620026b41c4006c10ea081a0b200ea72102024002402006200c6b22012006490d0020034180056a410210d1020c010b200e2010422086842116024020010d00420021104200210e0c040b20034188026a2001ad2217420042809adbba02420010e808200329038802220e428088caade9057c221020155820034190026a2903002010200e54ad7c220e200f58200e200f511b0d0320034180056a200341c0046a201020157d200e200f7d2010201554ad7d10c302024020032d00800522014106470d002017422086201642ffffffff0f8384210f0c050b20032d008305210520032f008105210620032003290284053702840520032006200541107472410874200172360280050b2002450d01200241c4006c450d01200a102e0c010b20034180056a410210d1020b20032d0080052202410646210120032802e003210a20024106460d02200a450d040c030b02402015201058200f200e58200f200e511b0d00200341f8016a200341c0046a201520107d200f200e7d2015201054ad7d10fb010b2001ad422086201642ffffffff0f8384210f20010d0002402002450d00200241c4006c450d00200a102e0b4100210a0b024020032802e0032201450d0020032802e4032202450d00200241c4006c450d002001102e0b200341f8036a200e370300200341f0036a20103703002003200f3702e4032003200a3602e003200341063a008005410121010b20032802e007210220032802d80721050240200a0d002005200210ff010c020b20052002200341e0036a10db020b20032802e4032202450d00200241c4006c450d00200a102e0b024020032802dc07450d0020032802d807102e0b02402001450d00200341ec036a20032903a004370200200341f4036a200341a0046a41086a290300370200200341e0036a411c6a200341a0046a41106a29030037020020034184046a200341a0046a41186a2802003602002003200d3702e403200320084108742009723602e003200341d8076a41186a200341e0046a41186a290300370300200341d8076a41106a200341e0046a41106a290300370300200341d8076a41086a200341e0046a41086a290300370300200320032903e0043703d80720034180056a200741b00210e9081a200341e0036a200341d8076a20034180056a10d2022007102e200320032800c003360280052003200341c3036a28000036008305200041186a41003a00004200210d2000420037030820002003280280053600192000411c6a2003280083053600000c020b20034180056a410710d10220032f00810520032d008305411074722108200329028405210d20032d00800521090b2007108b022007102e200320032800c003360280052003200341c3036a28000036008305200041236a20084110763a0000200020083b0021200041186a41003a00002000420037030820002003280280053600192000411c6a2003280083053600002000200d370024200041206a20093a00004201210d0b2000200d370300200424000f0b200341b8076a41186a200141196a290000370300200341b8076a41106a200141116a290000370300200341b8076a41086a200141096a290000370300200320012900013703b807200341a0026a41186a200141396a290000370300200341a0026a41106a200141316a290000370300200341a0026a41086a200141296a2900003703002003200141216a2900003703a00220034180056a41286a200241286a28020036020020034180056a41206a200241206a29020037030020034180056a41186a200241186a29020037030020034180056a41106a200241106a29020037030020034180056a41086a200241086a2902003703002003200229020037038005200341e0036a20034180056a10c102200341c0036a41086a2201200341e0036a41096a290000370300200341c0036a41106a2202200341e0036a41116a290000370300200341c0036a41186a2205200341e0036a41196a290000370300200320032900e1033703c00302400240024002400240024002400240024020032d00e0034101460d00200341d8076a41186a2005290300370300200341d8076a41106a2002290300370300200341d8076a41086a2001290300370300200320032903c0033703d807200341e0046a200341b8076a10d902200341e0036a20032802e00420032802e80410da02200341e0036a41186a2201290300210e200120032903980537030041002108200341003602800520032903f003211020032003290390053703f00320032903e803210f20032003290388053703e80320032903e003210d20032003290380053703e003200da72207450d01200d422088210d0240200fa72206450d00200741246a210a41002109410021084100210202400340024002402008450d002007200241c4006c6a21012007200220096a41c4006c6a210503400240200141046a200341d8076a412010ec080d00200141246a200341a0026a412010ec08450d030b2005200141c40010e90841c4006a2105200141c4006a2101200241016a22022006490d000c040b0b200a200241c4006c6a210103400240200141606a200341d8076a412010ec080d002001200341a0026a412010ec08450d020b200141c4006a2101200241016a22022006490d000b410021080c030b2009417f6a2109200841016a2108200241016a22022006490d000b0b024020080d00410021080c010b2007200220086b41c4006c6a2007200241c4006c6a200620026b41c4006c10ea081a0b200da7210202400240200620086b22012006490d0020034180056a410210d1020c010b200d200f422086842115024020010d004200210f4200210d0c050b200341e8016a2001ad2216420042809adbba02420010e80820032903e801220d428088caade9057c220f201058200341f0016a290300200f200d54ad7c220d200e58200d200e511b0d0420034180056a200341b8076a200f20107d200d200e7d200f201054ad7d10c302024020032d00800522014106470d002016422086201542ffffffff0f8384210e0c060b20032d008305210520032f008105210620032003290284053702840520032006200541107472410874200172360280050b2002450d02200241c4006c450d022007102e0c020b410221010c070b20034180056a410210d1020b20032d0080052201410646210220032802e003210720014106460d022007450d040c030b02402010200f58200e200d58200e200d511b0d00200341d8016a200341b8076a2010200f7d200e200d7d2010200f54ad7d10fb010b2001ad422086201542ffffffff0f8384210e20010d0002402002450d00200241c4006c450d002007102e0b410021070b024020032802e0032201450d0020032802e4032202450d00200241c4006c450d002001102e0b200341f8036a200d370300200341f0036a200f3703002003200e3702e403200320073602e00341062101200341063a008005410121020b20032802e804210520032802e0042106024020070d002006200510ff010c020b20062005200341e0036a10db020b20032802e4032205450d00200541c4006c450d002007102e0b024020032802e404450d0020032802e004102e0b200320032900810537039004200320034188056a2800003600970402402002450d00200320032800a003360280032003200341a3036a28000036008303200041186a41003a00002000420037030820002003280280033600192000411c6a20032800830336000020004200370300200424000f0b20032003280097043600c70420032003290390043703c0040b200320032800a00336028003200320032903c0043703a004200320032800c7043600a7042003200341a3036a28000036008303200041186a41003a00002000420037030820002003280280033600192000411c6a200328008303360000200041206a20013a0000200020032903a004370021200041286a20032800a70436000020004201370300200424000f0b20032d0080052201410646210220032802e003210720014106460d022007450d040c030b02402010200f58200e200d58200e200d511b0d00200341b8016a200341d8076a2010200f7d200e200d7d2010200f54ad7d10fb010b2001ad422086201542ffffffff0f8384210e20010d0002402002450d00200241c4006c450d002007102e0b410021070b024020032802e0032201450d0020032802e4032202450d00200241c4006c450d002001102e0b200341f8036a200d370300200341f0036a200f3703002003200e3702e403200320073602e00341062101200341063a008005410121020b20032802e804210520032802e0042106024020070d002006200510ff010c020b20062005200341e0036a10db020b20032802e4032205450d00200541c4006c450d002007102e0b024020032802e404450d0020032802e004102e0b200320032900810537039004200320034188056a2800003600970402402002450d00200320032800a003360280032003200341a3036a28000036008303200041186a41003a00002000420037030820002003280280033600192000411c6a20032800830336000020004200370300200424000f0b20032003280097043600c70420032003290390043703c0040b200320032800a00336028003200320032903c0043703a004200320032800c7043600a7042003200341a3036a28000036008303200041186a41003a00002000420037030820002003280280033600192000411c6a200328008303360000200041206a20013a0000200020032903a004370021200041286a20032800a70436000020004201370300200424000f0b20032003290091083703e003200320034198086a2800003600e7032002450d00200241c4006c450d002006102e0b0240200328028408450d00200328028008102e0b200320032903e00337039004200320032800e70336009704024020014106470d00200341a5056a20032903c0043700002003418d056a20034180036a41086a29030037000020034195056a20034180036a41106a2903003700002003419d056a20034180036a41186a290300370000200341ad056a200341c0046a41086a290300370000200341b5056a200341c0046a41106a290300370000200341bd056a200341c0046a41186a290300370000200341023a008405200341133a008005200320032903800337008505200341dd056a200341a0036a41186a290300370000200341d5056a200341a0036a41106a290300370000200341cd056a200341a0036a41086a290300370000200341c5056a20032903a00337000020034180056a10fe01200320032800f9023602e0022003200341fc026a2800003600e302200041186a41003a000020004200370308200020032802e0023600192000411c6a20032800e30236000020004200370300200424000f0b20032003280097043600ef0220032003290390043703e8020b200320032800f9023602e002200320032903e8023703d002200320032800ef023600d7022003200341fc026a2800003600e302200041186a41003a000020004200370308200020032802e0023600192000411c6a20032800e302360000200041206a20013a0000200020032903d002370021200041286a20032800d70236000020004201370300200424000f0b02402010200f56200e200d56200e200d511b450d00200341386a200341e0046a2010200f7d200e200d7d2010200f54ad7d10fb010b2005450d010b024020032802a0022206450d0020032802a4022207450d00200741286c450d002006102e0b200341a0026a41186a200d370300200341b0026a200f37030020034180056a41186a41003a0000200320053602a802200320023602a402200320013602a002200342003703800520034200370388050c010b20034198056a41003a00002003420037038005200342003703880502402002450d00200241286c450d002001102e0b20032802a00221010b20032802a803210220032802a0032105024020010d002005200210ff010c010b20052002200341a0026a10d6020b024020032802a002450d0020032802a4022201450d00200141286c450d0020032802a002102e0b024020032802a403450d0020032802a003102e0b20034180056a41086a21012003290380054201520d010b200341d8076a41206a200141206a290300220d370300200341d8076a41186a200141186a290300220e370300200341d8076a41106a200141106a290300220f370300200341d8076a41086a200141086a29030022103703002003200129030022153703d807200041286a200d370300200041206a200e370300200041186a200f370300200041106a20103703002000201537030820004201370300200424000f0b200341d8076a41106a200141106a290300220d370300200341d8076a41086a200141086a290300220e37030020032001290300220f3703d807200041186a200d370300200041106a200e3703002000200f37030820004200370300200424000f0b1036000b20032902e403210d20032d00e00321060b20034198056a41003a0000200341a0056a20063a0000200320023b00a105200341a3056a20024110763a00002003419c056a200341a3086a28000036000020034200370388052003420137038005200320032800a008360099052003200d3702a4052001450d00200141286c450d002005102e0b024020032802b408450d0020032802b008102e0b20032903800542015121020b20034180056a41086a21012002450d010b200341a0026a41206a200141206a290300220d370300200341a0026a41186a200141186a290300220e370300200341a0026a41106a200141106a290300220f370300200341a0026a41086a200141086a29030022103703002003200129030022153703a002200041286a200d370300200041206a200e370300200041186a200f370300200041106a20103703002000201537030820004201370300200424000f0b200341a0026a41106a200141106a290300220d370300200341a0026a41086a200141086a290300220e37030020032001290300220f3703a002200041186a200d370300200041106a200e3703002000200f37030820004200370300200424000f0b2005108b022005102e200320032800c0043602a0042003200341c3046a2800003600a304200041186a41003a000020004200370308200020032802a0043600192000411c6a20032800a304360000200041246a200d370200200041206a200136020020004201370300200424000b8a0e020e7f037e230041e0016b2204240020044190016a200110d302200441b8016a200428029001220520042802980110d402200441c0016a280200410020042802b80122061b210120042802bc0121070240200428029401450d002005102e0b2006410420061b21080240024002402001450d002008200141286c6a2109200441b8016a410472210a200441b8016a41256a2105024002400240200341ff0171220b4107460d00200441e4006a41026a210c200821010340200441e8006a41206a220d200141206a280200360200200441e8006a41186a220e200141186a290200370300200441e8006a41106a220f200141106a290200370300200441e8006a41086a2210200141086a29020037030020042001290200370368200141246a2d00002111200c200141276a2d00003a00002004200141256a2f00003b016420114107460d04200441b8016a41206a200d280200360200200441b8016a41186a200e290300370300200441b8016a41106a200f290300370300200441b8016a41086a2010290300370300200520042f01643b0000200541026a200c2d00003a0000200420042903683703b801200420113a00dc010240200a2002412010ec080d002011200b460d030b200141286a22012009470d000c040b0b200441e4006a41026a2111200821010340200441e8006a41206a220c200141206a280200360200200441e8006a41186a220d200141186a290200370300200441e8006a41106a220e200141106a290200370300200441e8006a41086a220f200141086a29020037030020042001290200370368200141246a2d000021032011200141276a2d00003a00002004200141256a2f00003b016420034107460d03200441b8016a41206a200c280200360200200441b8016a41186a200d290300370300200441b8016a41106a200e290300370300200441b8016a41086a200f290300370300200520042f01643b0000200541026a20112d00003a0000200420042903683703b801200420033a00dc010240200a2002412010ec08450d0020044190016a41206a41002802d8f34036020020044190016a41186a41002902d0f34037030020044190016a41106a41002902c8f340370300200141286a22012009470d010c040b0b20044190016a41206a200441b8016a41206a28020036020020044190016a41186a200441b8016a41186a29030037030020044190016a41106a200441b8016a41106a29030037030020044190016a41086a200441b8016a41086a2903003703002004418c016a41026a200541026a2d00003a0000200420042903b80137039001200420052f00003b018c010c010b20044190016a41206a200441b8016a41206a28020036020020044190016a41186a200441b8016a41186a29030037030020044190016a41106a200441b8016a41106a29030037030020044190016a41086a200441b8016a41086a2903003703002004418c016a41026a200541026a2d00003a0000200420042903b80137039001200420052f00003b018c010b200441c0006a41206a220120044190016a41206a2205280200360200200441c0006a41186a221120044190016a41186a2202290300370300200441c0006a41106a220a20044190016a41106a220c290300370300200441c0006a41086a220920044190016a41086a220d2903003703002004413c6a41026a220e2004418c016a41026a2d00003a00002004200429039001370340200420042f018c013b013c200341ff01714107470d010b41012105410721030c010b200520012802002201360200200220112903002212370300200c200a2903002213370300200d20092903002214370300200441e8006a41026a200e2d00003a0000200441c2016a2014370100200441ca016a2013370100200441d2016a2012370100200441da016a200136010020042004290340221237039001200420042f013c3b0168200420123701ba01410021050b2007410020061b2101200441106a41086a200441b8016a41086a2211290100370300200441106a41106a200441b8016a41106a290100370300200441106a41186a200441b8016a41186a290100370300200441106a411e6a200441b8016a411e6a2901003701002004410c6a41026a2202200441e8006a41026a2d00003a0000200420042901b801370310200420042f01683b010c0240024020050d0020002004290112370104200020042f010c3b0029200041286a20033a0000200041246a200441326a2801003601002000411c6a2004412a6a290100370100200041146a200441226a2901003701002000410c6a2004411a6a2901003701002000412b6a20022d00003a000002402001450d00200141286c450d002008102e0b410021010c010b200441b8016a410310d1022000410c6a2011280200360200200020042903b80137020402402001450d00200141286c450d002008102e0b410121010b20002001360200200441e0016a24000ba80201047f230041c0006b22022400410b210341f6fac000210441072105024002400240024002400240024002400240200141ff01710e09000102030405060708000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a41bc8ccc001044000b4107210341effac0002104410021050c060b41082103418be7c4002104410121050c050b4108210341e7fac0002104410221050c040b41dcfac0002104410321050c030b4109210341d3fac0002104410421050c020b410c210341c284ca002104410521050c010b41c8fac0002104410621050b200041833a3b0100200041086a2003360200200041046a2004360200200041026a20053a0000200241c0006a24000bd20a02057f017e23004190066b22032400200341186a200141186a290000370300200341106a200141106a290000370300200341086a200141086a29000037030020032001290000370300024002404110102c2204450d00200441f8f7c60036020c2004410136020820044281808080103702004110102c2201450d0020014190f8c60036020c20014101360208200142818080801037020020042004280200417f6a2205360200024020050d002004280208200428020c2802001103000240200428020c280204450d002004280208102e0b200441046a22052005280200417f6a220536020020050d002004102e0b200341d8006a41206a2204200041206a290200370300200341d8006a41186a2205200041186a290200370300200341d8006a41106a2206200041106a290200370300200341d8006a41086a2207200041086a29020037030020032000290200370358200128020041016a220041014d0d0120012000360200200341b0036a41206a2004290300370300200341b0036a41186a2005290300370300200341b0036a41106a2006290300370300200341b0036a41086a2007290300370300200320032903583703b003412c102c2200450d0020002001360200200020032903b0033702042000410c6a200341b8036a290300370200200041146a200341b0036a41106a2903003702002000411c6a200341c8036a290300370200200041246a200341d0036a2903003702004110102c2204450d00200441c0fec60036020c20042000360208200442818080801037020020012001280200417f6a2200360200024020000d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22002000280200417f6a220036020020000d002001102e0b200341d8006a200241b00210e9081a20034188036a411e6a22012003411e6a29010037010020034188036a41186a2200200341186a29030037030020034188036a41106a2202200341106a29030037030020034188036a41086a2205200341086a2903003703002003200329030037038803024002402004280208200341d8006a200428020c28020c1101000d0041022100200341c8006a41023a0000200341286a41186a41003a000020042004280200417f6a2201360200420021082003420037033020034201370328024020010d002004280208200428020c2802001103000240200428020c280204450d002004280208102e0b200441046a22012001280200417f6a220136020020010d002004102e0b200341d8006a10dc02410121010c010b200341b0036a200341d8006a41b00210e9081a200341ea056a2005290300370100200341f2056a2002290300370100200341fa056a2000290300370100200341e0056a41206a200129010037010020034180023b01e00520032003290388033701e2052003200436028806200341286a200341b0036a200341e0056a10dd0220032903284201512101200341286a41206a2d00002100200329033021080b2003200341d0006a2800003600b703200320032900493703b0030240024020010d00410621010c010b200320032800b70336005f200320032903b0033703584106210120084202510d002003200328005f3600b703200320032903583703b003200021010b200320032903b0033703e005200320032800b7033600e705200341b8036a20013a0000200341b9036a20032903e005370000200341c0036a20032800e705360000200341003a00b403200341133a00b003200320032f0088033b00b50320032003418a036a2d00003a00b703200341c4036a200341d8006a41d40010e9081a200341b0036a10fe0120034190066a24000f0b1036000b00000bb10201037f230041e0006b22022400200241086a4190fec6004105108102200241186a41a8dbc8004107108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241d0006a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000ba30b04047f017e0c7f037e230041d0016b220324002003200236021420032001360210200341186a2001200210ed0202400240200328021822040d00200041003602000c010b200328021c21052003200341206a28020036022c20032004360228200341086a200341286a10ab0102400240024020032802080d00024002400240200328020c2206200328022c41286e2201200120064b1bad42287e2207422088a70d002007a72201417f4c0d0002400240024020010d00410421080c010b2001102c2208450d010b200141286e2102024020060d00410021060c030b200341a8016a41017221094100210a4100210b0340200341a8016a200341286a1093010240024020032d00a8014101460d0020034188016a41186a220c200941186a29000037030020034188016a41106a220d200941106a29000037030020034188016a41086a220e200941086a2900003703002003200929000037038801200328022c2201450d002003280228220f2d0000211020032001417f6a221136022c2003200f41016a3602284100211202400240024002400240024020100e0705040001060203060b410221120c040b410321120c030b410521120c020b410621120c010b410121120b20114104490d00200341a8016a41086a200e290300370300200341a8016a41106a200d290300370300200341a8016a41186a200c29030037030020034182016a41026a20034185016a41026a2d00003a000020032003290388013703a801200f280001211320032001417b6a36022c2003200f41056a360228200320032f0085013b0182010c010b410721120b200341e0006a41186a2201200341a8016a41186a290300370300200341e0006a41106a220f200341a8016a41106a290300370300200341e0006a41086a220c200341a8016a41086a290300370300200341dc006a41026a220d20034182016a41026a2d00003a0000200320032903a801370360200320032f0182013b015c024020124107460d00200341386a41186a220e2001290300370300200341386a41106a2210200f290300370300200341386a41086a220f200c290300370300200341346a41026a220c200d2d00003a000020032003290360370338200320032f015c3b01340240200b2002470d00200241016a22012002490d042002410174220d2001200d20014b1b22014104200141044b1bad42287e2207422088a74541027421012007a7210d0240024020020d00200341003602a8010c010b200341043602b001200320083602a8012003200241286c3602ac010b20034188016a200d2001200341a8016a107d200328029001210102402003280288014101470d0020010d040c050b200328028c012108200141286e21020b2008200a6a22012013360200200e290300210720102903002114200f290300211520032903382116200141246a20123a0000200141046a20163702002001410c6a2015370200200141146a20143702002001411c6a2007370200200141256a20032f01343b0000200141276a200c2d00003a0000200a41286a210a2006200b41016a220b460d040c010b0b2002450d04200241286c450d040c030b1036000b1038000b2008450d01200328022c2201410f4b0d022002450d01200241286c450d010b2008102e0b200341003602900120034201370388012003410a3602642003200341106a360260200320034188016a360238200341bc016a4101360200200342013702ac01200341909dc5003602a8012003200341e0006a3602b801200341386a419cebc000200341a8016a103d1a20032802880120032802900110ef020240200328028c01450d00200328028801102e0b200041003602000c010b2000200236020420002008360200200041106a20032802282202290000370300200041086a2006360200200041186a200241086a2900003703002003200141706a36022c2003200241106a3602280b2005450d002004102e0b200341d0016a24000bd70201097f410121044100210502400240024020020e020201000b200341046a21062003280200210720032d002441ff017121084100210503400240024020012002410176220920056a220a41286c6a220b41046a2006412010ec08220c450d00417f4101200c4100481b210c0c010b4100417f200b2d0024220c200847200c2008491b200c2008461b220c0d00417f200b280200220c200747200c2007491b210c0b2005200a200c4101461b2105200220096b220241014b0d000b0b024002402001200541286c6a220c41046a200341046a412010ec082202450d00417f410120024100481b21020c010b02404100417f200c2d0024220220032d002422094720022009491b20022009461b22020d0041ff012102200c280200220c20032802002209490d01200c20094721020b20020d00410021040c010b2005200241ff017141ff01466a21050b20002005360204200020043602000baa0102037f017e230041206b2203240002400240200228020841286c41146a2204417f4c0d002004102c2205450d0120034100360208200320043602042003200536020020022802002002280208200310d802200229031021062003200241186a290300370318200320063703102003200341106a411010742000200120032802002202200328020810b20102402003280204450d002002102e0b200341206a24000f0b1038000b1036000bc40201027f230041106b220224000240411a102c2203450d002002421a37020420022003360200200220012802004110107420022001280204412010742002200128020836020c20022002410c6a410410742002200128020c36020c20022002410c6a41041074024002400240024002400240024020012802102d00000e0700010203060405060b200241003a000c20022002410c6a410110740c050b200241013a000c20022002410c6a410110740c040b200241023a000c20022002410c6a410110740c030b200241033a000c20022002410c6a410110740c020b200241053a000c20022002410c6a410110740c010b200241063a000c20022002410c6a410110740b200220012f01143b010c20022002410c6a41021074200020022802002201200228020810b00102402002280204450d002001102e0b200241106a24000f0b1036000bf90101017f230041106b2203240020012002107602402001450d00200141286c210103402002200041046a412010740240024002400240024002400240200041246a2d00000e0700010203060405060b200341003a000b20022003410b6a410110740c050b200341013a000c20022003410c6a410110740c040b200341023a000d20022003410d6a410110740c030b200341033a000e20022003410e6a410110740c020b200341053a000f20022003410f6a410110740c010b200341063a00032002200341036a410110740b200320002802003602042002200341046a41041074200041286a2100200141586a22010d000b0b200341106a24000bb10201037f230041e0006b22022400200241086a4190fec6004105108102200241186a41afdbc800410d108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241d0006a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000bb10d03047f017e0d7f23004190036b220324002003200236020c20032001360208200341106a2001200210ed020240024002400240200328021022040d00200041003602000c010b200328021421052003200341186a280200360224200320043602202003200341206a10ab0102400240024020032802000d0020032802042206200328022441c4006e2201200120064b1bad42c4007e2207422088a70d052007a72201417f4c0d050240024020010d00410421080c010b2001102c2208450d050b200141c4006e210902400240024020060d00410021060c010b200341a8026a410172210a4100210b0340200341a8026a200341206a10930102400240024020032d00a8024101460d00200b41016a210c200341e8016a41186a220d200a41186a290000370300200341e8016a41106a220e200a41106a290000370300200341e8016a41086a220f200a41086a2900003703002003200a2900003703e80141002101200341003a00c802417f2102200328022421100240034020102001460d01200341a8026a20016a200328022022112d00003a00002003201020026a3602242003201141016a3602202003200141016a22123a00c8022002417f6a21022012210120124120470d000b200341f0026a41186a2201200341a8026a41186a290300370300200341f0026a41106a2202200341a8026a41106a290300370300200341f0026a41086a2213200341a8026a41086a290300370300200320032903a8023703f002201241ff01714120490d0120034188026a41086a2214201329030037030020034188026a41106a2213200229030037030020034188026a41186a22022001290300370300200320032903f00237038802201020126b22014104490d01200341c8016a41086a2212200f290300370300200341c8016a41106a2210200e290300370300200341c8016a41186a220e200d290300370300200341a8016a41086a220d2014290300370300200341a8016a41106a220f2013290300370300200341a8016a41186a22132002290300370300200320032903e8013703c80120032003290388023703a801201128000121022003201141056a36022020032001417c6a36022420034188016a41086a2201201229030037030020034188016a41106a2212201029030037030020034188016a41186a2210200e290300370300200341e8006a41086a2211200d290300370300200341e8006a41106a220d200f290300370300200341e8006a41186a220e2013290300370300200320032903c80137038801200320032903a801370368200341c8006a41186a220f2010290300370300200341c8006a41106a22102012290300370300200341c8006a41086a22122001290300370300200341286a41186a2213200e290300370300200341286a41106a220e200d290300370300200341286a41086a220d2011290300370300200320032903880137034820032003290368370328200b2009470d03200941016a220120094f0d020c0c0b200141ff0171450d00200341003a00c8020b2009450d05200941c4006c0d040c050b200941017422112001201120014b1b22014104200141044b1bad42c4007e2207422088a74541027421012007a721110240024020090d00200341003602a8020c010b200341043602b002200320083602a8022003200941c4006c3602ac020b200341f0026a20112001200341a8026a107d20032802f8022101024020032802f0024101470d002001450d0a0c090b20032802f4022108200141c4006e21090b2008200b41c4006c6a22012002360200200120032903483702042001410c6a2012290300370200200141146a20102903003702002001411c6a200f290300370200200120032903283702242001412c6a200d290300370200200141346a200e2903003702002001413c6a2013290300370200200c210b200c2006470d000b0b2008450d0120032802242201410f4b0d022009450d01200941c4006c450d010b2008102e0b200341003602f802200342013703f0022003410a3602d4022003200341086a3602d0022003200341f0026a36028802200341bc026a4101360200200342013702ac02200341909dc5003602a8022003200341d0026a3602b80220034188026a419cebc000200341a8026a103d1a20032802f00220032802f80210ef02024020032802f402450d0020032802f002102e0b200041003602000c010b2000200936020420002008360200200041106a20032802202202290000370300200041086a2006360200200041186a200241086a2900003703002003200141706a3602242003200241106a3602200b2005450d002004102e0b20034190036a24000f0b1036000b1038000bc10102047f017e230041206b22032400024002402002280208220441c4006c41146a2205417f4c0d000240024020050d00410121060c010b2005102c2206450d02200228020821040b200341003602082003200536020420032006360200200228020020042003109505200229031021072003200241186a290300370318200320073703102003200341106a411010742000200120032802002202200328020810b20102402003280204450d002002102e0b200341206a24000f0b1038000b1036000b802401047f024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002802000e1b00010218180304051806070818090a0b0c0d0e0f10111213141516170b0240024002400240024002400240200041086a2802000e0a1e1e001e01021e030405060b200041106a280200450d1d2000410c6a280200102e0f0b200041106a280200450d1c2000410c6a280200102e0f0b200041106a280200450d1b2000410c6a280200102e0f0b0240200041146a2802002201450d002000410c6a2802002102200141186c210103400240200241046a280200450d002002280200102e0b0240200241106a280200450d002002410c6a280200102e0b200241186a2102200141686a22010d000b0b200041106a2802002202450d1a200241186c450d1a200028020c102e0f0b0240200041146a2802002201450d002000410c6a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041106a2802002202450d192002410c6c450d19200028020c102e0f0b200041106a280200450d182000410c6a280200102e0f0b200041106a280200450d172000410c6a280200102e0f0b0240024002400240024020002d00040e061b001b010203040b200041186a220228020010dc022002280200102e0f0b02402000410c6a280200450d00200041086a280200102e0b200041246a220228020010dc022002280200102e0f0b2000410c6a280200450d18200041086a280200102e0f0b200041186a220228020010dc022002280200102e0f0b02402000410c6a280200450d00200041086a280200102e0b200041246a220228020010dc022002280200102e0f0b02400240200041086a280200417f6a0e020001170b2000412c6a220110e1010240200041306a2802002202450d00200241246c450d002001280200102e0b2000419c016a220110e1010240200041a0016a2802002202450d00200241246c450d002001280200102e0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d162002410c6c450d162000280210102e0f0b2000412c6a220110e1010240200041306a2802002202450d00200241246c450d002001280200102e0b2000419c016a220110e1010240200041a0016a2802002202450d00200241246c450d002001280200102e0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d152002410c6c450d152000280210102e0f0b0240024002400240200041086a2802000e0418000102030b2000410c6a2d00004102470d17200041146a280200450d17200041106a280200102e0f0b2000410c6a2d00004102470d16200041146a280200450d16200041106a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004102470d15200041386a280200450d15200041346a280200102e0f0b2000410c6a2d00004102470d14200041146a280200450d14200041106a280200102e0f0b02402000410c6a2802002201450d0020002802042202200141f0006c6a21030340024020022204410c6a2802002201450d0020042802042102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b200441f0006a21020240200441086a2802002201450d00200141246c450d002004280204102e0b20022003470d000b0b200041086a2802002202450d13200241f0006c450d132000280204102e0f0b024002400240024002400240200041086a2d00000e171800181818180118180218181818180318180418181818050b2000412c6a2d00004102470d17200041346a280200450d17200041306a280200102e0f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b200041106a2802002202450d16200241246c450d16200028020c102e0f0b2000410c6a2d00004102470d15200041146a280200450d15200041106a280200102e0f0b200041106a28020041ffffff3f71450d142000410c6a280200102e0f0b200041146a28020041ffffffff0371450d13200041106a280200102e0f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b200041106a2802002202450d12200241246c450d12200028020c102e0f0b20002802042202450d11200041086a280200450d112002102e0f0b02400240200041086a280200417f6a0e020001120b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d112002410c6c450d112000280210102e0f0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d102002410c6c450d102000280210102e0f0b02402000410c6a280200450d00200041086a280200102e0b02402000411c6a2802002201450d00200041146a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041186a2802002202450d0f2002410c6c450d0f2000280214102e0f0b0240024002400240200041086a2d000041716a0e0400010203120b200041106a280200450d112000410c6a280200102e0f0b200041106a280200450d102000410c6a280200102e0f0b200041106a280200450d0f2000410c6a280200102e0f0b200041106a280200450d0e2000410c6a280200102e0f0b024002400240200041086a2d0000417f6a0e03000102100b200041306a28020041ffffff3f71450d0f2000412c6a280200102e0f0b2000410c6a220228020010dc022002280200102e0f0b200041106a220228020010dc022002280200102e0f0b024002400240200041086a2d0000417f6a0e030001020f0b200041306a28020041ffffff3f71450d0e2000412c6a280200102e0f0b2000410c6a220228020010dc022002280200102e0f0b200041106a220228020010dc022002280200102e0f0b02400240200041086a2d0000417f6a0e05000d0d0d010d0b200041106a28020041ffffff3f71450d0c2000410c6a280200102e0f0b2000410c6a2d00004102470d0b200041146a280200450d0b200041106a280200102e0f0b20002d00044104470d0a2000410c6a28020041ffffff3f71450d0a200041086a280200102e0f0b200041086a2802004101470d092000410c6a2d00004102470d09200041146a280200450d09200041106a280200102e0f0b02400240200041086a2d0000417d6a0e0200010a0b200041f0006a280200450d09200041ec006a280200102e0f0b200041106a280200450d082000410c6a280200102e0f0b024002400240200041086a2802000e040a0a0001020b2000410c6a2d00004102470d09200041146a280200450d09200041106a280200102e0f0b2000410c6a2d00004102470d08200041146a280200450d08200041106a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004102470d07200041386a280200450d07200041346a280200102e0f0b02400240024020002f01040e03090001020b0240200041106a2802002201450d00200041086a2802002102200141b0026c210103402002109601200241b0026a2102200141d07d6a22010d000b0b2000410c6a2802002202450d08200241b0026c450d082000280208102e0f0b200041086a220228020010dc022002280200102e0f0b0240200041106a2802002201450d00200041086a2802002102200141b0026c210103402002109601200241b0026a2102200141d07d6a22010d000b0b2000410c6a2802002202450d06200241b0026c450d062000280208102e0f0b0240024002400240024002400240200041086a2d0000417e6a0e0d00010c0c0c0c0c0c02030405060c0b0240200041146a2802002201450d002000410c6a2802002202200141c8006c6a21010340024020022d00004101470d00200241086a280200450d00200241046a280200102e0b0240200241246a2d00004101470d002002412c6a280200450d00200241286a280200102e0b200241c8006a22022001470d000b0b0240200041106a2802002202450d00200241c8006c450d00200028020c102e0b0240200041186a2d00004101470d00200041206a280200450d002000411c6a280200102e0b02402000413c6a2d00004101470d00200041c4006a280200450d00200041c0006a280200102e0b0240200041e0006a2d00004101470d00200041e8006a280200450d00200041e4006a280200102e0b024020004184016a2d00004101470d002000418c016a280200450d0020004188016a280200102e0b0240200041a8016a2d00004101470d00200041b0016a280200450d00200041ac016a280200102e0b0240200041cc016a2d00004101470d00200041d4016a280200450d00200041d0016a280200102e0b200041f0016a2d00004101470d0b200041f8016a280200450d0b200041f4016a280200102e0f0b0240200041146a2802002202450d00200241c4006c21012000410c6a28020041286a210203400240200241786a2d00004101470d002002280200450d002002417c6a280200102e0b200241c4006a2102200141bc7f6a22010d000b0b200041106a2802002202450d0a200241c4006c450d0a200028020c102e0f0b200041106a2d00004102470d09200041186a280200450d09200041146a280200102e0f0b2000410c6a2d00004102470d08200041146a280200450d08200041106a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004101470d07200041386a280200450d07200041346a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004101470d06200041386a280200450d06200041346a280200102e0f0b2000410c6a2d00004102470d05200041146a280200450d05200041106a280200102e0f0b20002d00042202417e6a4108490d040240024020020e020600010b200041286a220228020010dc022002280200102e0f0b200041c8006a220228020010dc022002280200102e0f0b0240024002400240200041086a2d00000e0407000102030b0240200041106a28020041ffffff3f71450d002000410c6a280200102e0b200041186a220228020010dc022002280200102e0f0b0240200041106a28020041ffffff3f71450d002000410c6a280200102e0b200041286a280200450d05200041246a280200102e0f0b200041306a28020041ffffff3f71450d042000412c6a280200102e0f0b200041306a28020041ffffff3f71450d032000412c6a280200102e0f0b0240024002400240200041086a2802000e09060006010606020606030b200041106a280200450d052000410c6a280200102e0f0b200041106a2d00004102470d04200041186a280200450d04200041146a280200102e0f0b200041106a2d00004102470d03200041186a280200450d03200041146a280200102e0f0b200041146a280200450d02200041106a280200102e0f0b02400240200041086a2d0000417f6a0e03000301030b200041306a280200450d022000412c6a280200102e0c020b200041306a280200450d012000412c6a280200102e0f0b200041386a109b060f0b0be5890505077f077e147f0b7e037f230041f0176b22032400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e1c0203040506070809010a0b0c010d0e0f10363534333231302f2e2d00020b20014184026a280200210420014180026a280200210520022d0001210620022d000021072002280228210220034190136a200141086a41f80110e9081a20022002280200417f6a2201360200024002400240024020070d00024020010d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b200641ff01714102470d01200341e9003602d408200341fee7c7003602d008200341e0106a20034190136a10b80620032d00e0104106470d2f200341c0066a22014200370300200341a8066a41106a22024200370300200341a8066a41086a22074200370300200342003703a806200341e8056a41a5fec600411a1081022007200341e8056a41086a290300370300200320032903e8053703a806200341a8046a41ccc5c80041101081022001200341a8046a41086a290300370300200220032903a804370300200341203602b40a2003200341a8066a3602b00a200341b00e6a200341a8066a412010ed0220032802b00e22070d02410021060c030b20010d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b200341c0136a109b06200320032800f0063602e8062003200341f3066a2800003600eb06200041186a41003a000020004200370308200020032802e8063600192000411c6a20032800eb06360000200041206a41023a0000200042013703000c640b20032802b40e21082003200341b00e6a41086a2802003602840c200320073602800c200341a0046a200341800c6a10ab0102400240024020032802a0040d0020032802a404210120034198046a200341800c6a10ab01200328029804450d010b41002106200341003602e810200342013703e0102003410a3602ac042003200341b00a6a3602a8042003200341e0106a3602e805200341d4156a4101360200200342013702c415200341909dc5003602c0152003200341a8046a3602d015200341e8056a419cebc000200341c0156a103d1a20032802e01020032802e81010ef02024020032802e410450d0020032802e010102e0b0c010b200328029c042109410121060b2008450d002007102e0b2006450d2a20012005470d2920092004470d28200341c0156a20034190136a41f80110e9081a200341e0106a200341c0156a10b90620032802e0104101460d12200341b00e6a41386a2201200341a0116a290300370300200341b00e6a41306a200341e0106a41386a290300220a370300200341b00e6a41286a200341e0106a41306a290300220b370300200341b00e6a41206a200341e0106a41286a290300220c370300200341b00e6a41186a200341e0106a41206a290300220d370300200341b00e6a41106a200341e0106a41186a290300220e370300200341b00e6a41086a200341e0106a41106a290300220f3703002003200341e0106a41086a29030022103703b00e200341c0156a41306a2207200a370300200341c0156a41286a200b370300200341c0156a41206a200c370300200341c0156a41186a200d370300200341c0156a41106a200e370300200341c0156a41086a200f370300200341c0156a41386a2001290300370300200320103703c015200341a8066a41186a4200370300200341a8066a41106a4200370300200341a8066a41086a22014200370300200342003703a806200341e8056a41a5fec600411a1081022001200341e8056a41086a290300370300200320032903e8053703a806200341a8046a4184c4c800410e108102200241086a200341a8046a41086a290300370300200220032903a804370300200341003602e810200342013703e0102007200341e0106a10b901200341e0106a200341c0156a41301074024002400240024020032d00fc150e03000102030b200341003a00a804200341e0106a200341a8046a410110740c020b200341013a00a804200341e0106a200341a8046a410110740c010b200341023a00a804200341e0106a200341a8046a410110740b200341a8066a412020032802e010220220032802e81010b201024020032802e410450d002002102e0b20032802f01521060240200341f8156a2802002202450d0020024106742101200641346a21020340024020022802002207450d00200741306c450d002002417c6a280200102e0b200241c0006a2102200141406a22010d000b0b0240200341f4156a28020041ffffff1f71450d002006102e0b20034180043b01c415200341173a00c015200341c0156a10fe01200320032800f0063602e8062003200341f3066a2800003600eb06200041186a41003a000020004200370308200020032802e8063600192000411c6a20032800eb06360000200042003703000c620b000b2001410c6a2802002108200141106a290300210a200141086a280200210120034190136a41286a2207200241286a28020036020020034190136a41206a2206200241206a29020037030020034190136a41186a2204200241186a29020037030020034190136a41106a2205200241106a29020037030020034190136a41086a2209200241086a2902003703002003200229020037039013200aa72111200a422088a7211202400240024002400240024002400240024002402001417f6a0e0a00010203040506070809000b200341c0156a41286a2007280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c0150240200341c0156a10a705450d00200320032800e0103602b00e2003200341e3106a2800003600b30e200041186a41003a000020004200370308200020032802b00e3600192000411c6a20032800b30e360000200041206a41023a0000200042013703000c6a0b200320032800e0103602b00e2003200341e3106a2800003600b30e200041186a41003a000020004200370308200020032802b00e3600192000411c6a20032800b30e360000200042003703000c690b200341c0156a41286a2007280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c015200341e0106a200341c0156a10c102024020032d00e0104101470d0002402011450d002008102e0b200320032800b00e3602800c2003200341b30e6a2800003600830c200041186a41003a000020004200370308200020032802800c3600192000411c6a20032800830c360000200041206a41023a0000200042013703000c690b02402011450d002008102e0b200320032800b00e3602800c2003200341b30e6a2800003600830c200041186a41003a000020004200370308200020032802800c3600192000411c6a20032800830c360000200042003703000c680b200341c0156a41286a2007280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c0150240200341c0156a10a705450d00200320032800b00e3602800c2003200341b30e6a2800003600830c200041186a41003a000020004200370308200020032802800c3600192000411c6a20032800830c360000200041206a41023a0000200042013703000c680b4108102c2202450d64200342083702c415200320023602c0152003200a3703e010200341c0156a200341e0106a4108107441dcc1cb00410a20032802c015220220032802c81510b201024020032802c415450d002002102e0b200320032800b00e3602800c2003200341b30e6a2800003600830c200041186a41003a000020004200370308200020032802800c3600192000411c6a20032800830c360000200042003703000c670b200341c0156a41286a2007280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c0150240200341c0156a10a705450d00410221060c660b200341b00e6a2008201210ba0620032802b00e2202450d6420032802b40e21012003200341b80e6a2802003602840c200320023602800c200341106a200341800c6a10ab010240024020032802100d0020032802840c220720032802142206490d002006417f4c0d510240024020060d00410121040c010b200610322204450d6620032802840c21070b024020072006490d00200420032802800c200610e908210920032802840c22072006490d182003200720066b3602840c200320032802800c20066a3602800c200341086a200341800c6a10ab01024020032802080d0020032802840c2207200328020c2205490d002005417f4c0d530240024020050d00410121130c010b200510322213450d6820032802840c21070b024020072005490d00201320032802800c200510e908211420032802840c22072005490d192003200720056b22073602840c200320032802800c20056a22153602800c024020074104490d002003201541046a3602800c20032007417c6a22163602840c20164104490d00201528000421172003201541086a3602800c2003200741786a22163602840c20164104490d002003200741746a3602840c20032015410c6a3602800c2003200341800c6a10ab0120032802000d002003280204221520032802840c410c6e2207200720154b1bad420c7e220a422088a70d55200aa72207417f4c0d550240024020070d00410421160c010b2007102c2216450d6a0b2007410c6ead210a02400240024002402015450d000340200341c0156a200341800c6a10a50120032d00c0154101460d0320032802840c22074104490d0320032900c115210b20032802800c2218280000211920032007417c6a3602840c2003201841046a3602800c0240200a422088a72207200aa7470d00200741016a22182007490d5b2007410174221a20182018201a491b22184104201841044b1bad420c7e220c422088a7454102742118200ca7211a0240024020070d00200341003602c0150c010b200341043602c815200320163602c01520032007410c6c3602c4150b200341e0106a201a2018200341c0156a107d20032802e810211820032802e0104101460d0320032802e4102116200a428080808070832018410c6ead84210a0b20162007410c6c6a220720193602082007200b370200200a4280808080107c210a2015417f6a22150d000b0b2016450d03200aa7211520032802840c41034b0d082015450d032015410c6c0d020c030b2018450d570c6b0b200aa72207450d012007410c6c450d010b2016102e0b2005450d010b2013102e0b2006450d010b2004102e0b2001450d652002102e0c650b02402001450d002002102e0b02400240024020064108470d000240200929000042f0deb1db968cd9b7f400510d00410021074180c2cb002101410f21020c020b02402017411f4f0d004101210741e6c1cb002101411a21020c020b2009102e02402005450d002014102e0b02402015450d002015410c6c450d002016102e0b41acc2cb0041052008201210b201200341c8156a41023a0000200341003a00c015200341c0156a10fe0102402011450d002008102e0b200320032800b00a3602d0082003200341b30a6a2800003600d308200041186a41003a000020004200370308200020032802d0083600192000411c6a20032800d308360000200042003703000c690b410021074180c2cb002101410f21022006450d010b2009102e0b02402005450d002014102e0b410321062015450d652015410c6c450d652016102e0c650b200341c0156a41286a2007280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c0150240200341c0156a10a705450d0002402011450d002008102e0b200320032800e0103602b00e2003200341e3106a2800003600b30e200041186a41003a000020004200370308200020032802b00e3600192000411c6a20032800b30e360000200041206a41023a0000200042013703000c660b41acc2cb0041052008201210b201200341c8156a41023a0000200341003a00c015200341c0156a10fe0102402011450d002008102e0b200320032800e0103602b00e2003200341e3106a2800003600b30e200041186a41003a000020004200370308200020032802b00e3600192000411c6a20032800b30e360000200042003703000c650b200341c0156a41286a2007280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c015200341c0156a10a7050d290240024020084101460d0041b1c2cb00410d10ff010c010b200341003602c815200342013703c015200320113602800c200341c0156a200341800c6a41041074200320123602800c200341c0156a200341800c6a4104107441b1c2cb00410d20032802c015220220032802c81510b20120032802c415450d002002102e0b200341cc156a2012360200200341c8156a2011360200200320083602c415200341043a00c015200341c0156a10a504200320032800e0103602b00e2003200341e3106a2800003600b30e200041186a41003a000020004200370308200020032802b00e3600192000411c6a20032800b30e360000200042003703000c640b200341c0156a41286a2007280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c0150240200341c0156a10a7050d0002402012450d002008201241186c6a21012008210203402002280200200241086a2802002002410c6a280200200241146a28020010b201200241186a22022001470d000b2012450d00201241186c21012008210203400240200241046a280200450d002002280200102e0b0240200241106a280200450d002002410c6a280200102e0b200241186a2102200141686a22010d000b0b02402011450d00201141186c450d002008102e0b200320032800e0103602b00e2003200341e3106a2800003600b30e200041186a41003a000020004200370308200020032802b00e3600192000411c6a20032800b30e360000200042003703000c640b02402012450d00201241186c21012008210203400240200241046a280200450d002002280200102e0b0240200241106a280200450d002002410c6a280200102e0b200241186a2102200141686a22010d000b0b02402011450d00201141186c450d002008102e0b200320032800e0103602b00e2003200341e3106a2800003600b30e200041186a41003a000020004200370308200020032802b00e3600192000411c6a20032800b30e360000200041206a41023a0000200042013703000c630b200341c0156a41286a2007280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c0150240200341c0156a10a7050d0002402012450d0020082012410c6c6a21012008210203402002280200200241086a28020010ff012002410c6a22022001470d000b2012450d002012410c6c21012008210203400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b02402011450d002011410c6c450d002008102e0b200320032800e0103602b00e2003200341e3106a2800003600b30e200041186a41003a000020004200370308200020032802b00e3600192000411c6a20032800b30e360000200042003703000c630b02402012450d002012410c6c21012008210203400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b02402011450d002011410c6c450d002008102e0b200320032800e0103602b00e2003200341e3106a2800003600b30e200041186a41003a000020004200370308200020032802b00e3600192000411c6a20032800b30e360000200041206a41023a0000200042013703000c620b200341c0156a41286a2007280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c0150240200341c0156a10a705450d0002402011450d002008102e0b200320032800e0103602b00e2003200341e3106a2800003600b30e200041186a41003a000020004200370308200020032802b00e3600192000411c6a20032800b30e360000200041206a41023a0000200042013703000c620b2008201210890302402011450d002008102e0b200320032800e0103602b00e2003200341e3106a2800003600b30e200041186a41003a000020004200370308200020032802b00e3600192000411c6a20032800b30e360000200042003703000c610b200341c0156a41286a2007280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c015200341e0106a200341c0156a10c102200341c8066a41086a200341e0106a41096a290000370300200341c8066a41106a200341e0106a41116a290000370300200341c8066a41186a200341e0106a41196a290000370300200320032900e1103703c806024020032d00e0104101470d0002402011450d002008102e0b200320032800ab043600f30b200320032802a8043602f00b200041186a41003a000020004200370308200020032802f00b3600192000411c6a20032800f30b360000200041206a41023a0000200042013703000c610b200341900a6a41186a2202200341c8066a41186a290300370300200341900a6a41106a2201200341c8066a41106a290300370300200341900a6a41086a2207200341c8066a41086a290300370300200320032903c8063703900a200341a8066a2008201210b001200341e0106a41186a2206200341a8066a41186a290300370300200341e0106a41106a2204200341a8066a41106a290300370300200341e0106a41086a2205200341a8066a41086a290300370300200320032903a8063703e010200341c0156a41086a41053a0000200341c0156a41096a20032903900a370000200341c0156a41116a2007290300370000200341c0156a41196a2001290300370000200341e1156a2002290300370000200341e9156a20032903e010370000200341f1156a2005290300370000200341f9156a200429030037000020034181166a2006290300370000200341003a00c015200341c0156a10fe0102402011450d002008102e0b200320032800ab043600f30b200320032802a8043602f00b200041186a41003a000020004200370308200020032802f00b3600192000411c6a20032800f30b360000200042003703000c600b20034190136a41206a200141246a28020036020020034190136a41186a2001411c6a29020037030020034190136a41106a200141146a29020037030020034190136a41086a2001410c6a2902003703002003200129020437039013200341c0156a41286a200241286a280200360200200341c0156a41206a200241206a290200370300200341c0156a41186a200241186a290200370300200341c0156a41106a200241106a290200370300200341c0156a41086a200241086a290200370300200320022902003703c015200020034190136a200341c0156a10d5040c5f0b200141346a2802002115200141306a28020021122001412c6a2802002118200141286a2802002117200141206a290200210a2001411c6a280200211a200141186a2802002106200141146a2802002107200141106a28020021162001410c6a280200211b200141086a2802002104200341800c6a200141386a41e40010e9081a200141a4016a2802002114200141a0016a28020021132001419c016a2802002119200341e0106a200141a8016a41800110e9081a200341d0086a41286a2201200241286a280200360200200341d0086a41206a2205200241206a290200370300200341d0086a41186a2209200241186a290200370300200341d0086a41106a2208200241106a290200370300200341d0086a41086a2211200241086a290200370300200320022902003703d008024002400240024020040e0400010203000b200341c0156a41146a4101360200200342013702c4152003419cc3cb003602c015200341043602ac04200341a4a7c7003602a8042003200341a8046a3602d015200341c0156a4190afc4001044000b200341b00e6a200341800c6a41e40010e9081a20034190136a200341e0106a41800110e9081a200341c0156a41286a2001280200360200200341c0156a41206a2005290300370300200341c0156a41186a2009290300370300200341c0156a41106a2008290300370300200341c0156a41086a2011290300370300200320032903d0083703c015200341f0066a200341c0156a10c102200341a8066a41086a200341f9066a2202290000370300200341a8066a41106a20034181076a2201290000370300200341a8066a41186a20034189076a2204290000370300200320032900f1063703a80602400240024020032d00f0064101470d00200341d00a6a41023a0000200341c80a6a41003a0000200342003703b80a200342013703b00a02402006450d002006410c6c21012016210203400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b02402007450d002007410c6c450d002016102e0b02402015450d00201541246c21012018210203400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b02402012450d00201241246c450d002018102e0b02402014450d00201441246c21012019210203400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b02402013450d00201341246c450d002019102e0b200341b80a6a210241002106410221040c010b200341c8066a41186a200341a8066a41186a290300220b370300200341c8066a41106a200341a8066a41106a290300220c370300200341c8066a41086a200341a8066a41086a290300220d370300200320032903a806220e3703c8062004200b3700002001200c3700002002200d3700002003200e3700f106200341013a00f006200341d4156a2015360200200341c0156a41106a2012360200200341c0156a410c6a2018360200200320173602c8152003200a3703c015200341c0156a41186a200341b00e6a41e40010e9081a200341c4166a2014360200200341c0156a4180016a2013360200200341bc166a2019360200200341c8166a20034190136a41800110e9081a200341a8046a410c6a2006360200200341a8046a41086a20073602002003201a3602b804200320163602ac042003201b3602a804200341b00a6a200341f0066a200341c0156a200341a8046a10990420032903b00a4201520d01200341b00a6a41086a2102200341d00a6a2d0000210420032d00c80a21060b200320022800113602b0082003200241146a2800003600b30820022f0019210120022d001b2107200229001c210a2002280224210220032903b80a210b20032903c00a210c200041186a20063a0000200041106a200c3703002000200b370308200020032802b0083600192000411c6a20032800b3083600002000412c6a20023602002000200a370024200020073a0023200020013b0021200041206a20043a0000200042013703000c610b200320032800c90a3602b0082003200341b00a6a411c6a2800003600b30820032903b80a210a20032903c00a210b200041186a20032d00c80a3a0000200041106a200b3703002000200a370308200020032802b0083600192000411c6a20032800b308360000200042003703000c600b200341b00e6a200341800c6a41e40010e9081a20034190136a200341e0106a41800110e9081a200341c0156a41286a2001280200360200200341c0156a41206a2005290300370300200341c0156a41186a2009290300370300200341c0156a41106a2008290300370300200341c0156a41086a2011290300370300200320032903d0083703c015024002400240200341c0156a10bb06450d00200341d00a6a41023a0000200341c80a6a41003a0000200342003703b80a200342013703b00a02402006450d002006410c6c21012016210203400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b02402007450d002007410c6c450d002016102e0b02402015450d00201541246c21012018210203400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b02402012450d00201241246c450d002018102e0b02402014450d00201441246c21012019210203400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b02402013450d00201341246c450d002019102e0b200341b80a6a210241002106410221040c010b200341c0156a10e20420034189076a200341c0156a41186a220229030037000020034181076a200341c0156a41106a2201290300370000200341f9066a200341c0156a41086a290300370000200341013a00f006200320032903c0153700f106200341d4156a201536020020012012360200200341c0156a410c6a2018360200200320173602c8152003200a3703c0152002200341b00e6a41e40010e9081a200341c4166a2014360200200341c0156a4180016a2013360200200341bc166a2019360200200341c8166a20034190136a41800110e9081a200341a8046a410c6a2006360200200341a8046a41086a20073602002003201a3602b804200320163602ac042003201b3602a804200341b00a6a200341f0066a200341c0156a200341a8046a10990420032903b00a4201520d01200341b00a6a41086a2102200341d00a6a2d0000210420032d00c80a21060b200320022800113602e8052003200241146a2800003600eb0520022f0019210120022d001b2107200229001c210a2002280224210220032903b80a210b20032903c00a210c200041186a20063a0000200041106a200c3703002000200b370308200020032802e8053600192000411c6a20032800eb053600002000412c6a20023602002000200a370024200020073a0023200020013b0021200041206a20043a0000200042013703000c600b200320032800c90a3602e8052003200341b00a6a411c6a2800003600eb0520032903b80a210a20032903c00a210b200041186a20032d00c80a3a0000200041106a200b3703002000200a370308200020032802e8053600192000411c6a20032800eb05360000200042003703000c5f0b200341c0156a41286a2001280200360200200341c0156a41206a2005290300370300200341c0156a41186a2009290300370300200341c0156a41106a2008290300370300200341c0156a41086a2011290300370300200320032903d0083703c0150240200341c0156a10a705450d00200320032800f3063600eb06200320032802f0063602e806200041186a41003a000020004200370308200020032802e8063600192000411c6a20032800eb06360000200041206a41023a0000200042013703000c5f0b2003200a3703d0152003201a3602cc15200320063602c815200320073602c415200320163602c015200341c0156a10ed04200320032802f0063602e806200320032800f3063600eb06200041186a41003a000020004200370308200020032802e8063600192000411c6a20032800eb06360000200042003703000c5e0b200141086a290300210a200341c0156a41286a200241286a280200360200200341c0156a41206a200241206a290200370300200341c0156a41186a200241186a290200370300200341c0156a41106a200241106a290200370300200341c0156a41086a200241086a290200370300200320022902003703c01502400240200341c0156a10bb060d00200341a8066a41186a22024200370300200341a8066a41106a22014200370300200341a8066a41086a22074200370300200342003703a806200341e8056a41e8fcc60041091081022007200341e8056a41086a290300370300200320032903e8053703a806200341a8046a41d48ec90041091081022002200341a8046a41086a290300370300200120032903a804370300200341a8066a4120108f020d23200341c0066a22074200370300200341b8066a22064200370300200341a8066a41086a22024200370300200342003703a806200341e8056a41e8fcc60041091081022002200341e8056a41086a2204290300370300200320032903e8053703a806200341a8046a41b08ec9004103108102200141086a2205200341a8046a41086a2209290300370300200120032903a804370300200341286a200341a8066a1085032003280228450d012003290330220b500d01200b42b8177c200a580d0141f4d6c80041ce0041c4d7c8001039000b200320032800f3063600eb06200320032802f0063602e806200041186a41003a000020004200370308200020032802e8063600192000411c6a20032800eb06360000200041206a41023a0000200042013703000c5e0b200742003703002006420037030020024200370300200342003703a806200341e8056a41e8fcc600410910810220022004290300370300200320032903e8053703a806200341a8046a41b08ec900410310810220052009290300370300200120032903a8043703002003200a3703c015200341a8066a4120200341c0156a410810b201200742003703002006420037030020024200370300200342003703a806200341e8056a41e8fcc600410910810220022004290300370300200320032903e8053703a806200341a8046a41d48ec900410910810220052009290300370300200120032903a804370300200341013a00a804200341a8066a4120200341a8046a410110b201200742003703002006420037030020024200370300200342003703a806200341e8056a41a8f8c600410410810220022004290300370300200320032903e8053703a806200341a8046a41c98bc500410b10810220052009290300370300200120032903a804370300200341186a200341a8066a1085032003290320420020032802181b200a42f02e80520d20200320032800f3063600eb06200320032802f0063602e806200041186a41003a000020004200370308200020032802e8063600192000411c6a20032800eb06360000200042003703000c5d0b200341f0066a41086a22082001411d6a290000370300200320012900153703f0062001410d6a290000210b200141286a2802002111200141056a290000210a20012d0004210720012d0025211220034190136a41286a2201200241286a28020036020020034190136a41206a2206200241206a29020037030020034190136a41186a2204200241186a29020037030020034190136a41106a2205200241106a29020037030020034190136a41086a2209200241086a2902003703002003200229020037039013200a421888a7210202400240024002400240024020070e06000102030405000b200341d4156a4101360200200342013702c4152003419cc3cb003602c015200341043602ac0420034194c3cb003602a8042003200341a8046a3602d015200341c0156a41e89bc4001044000b200341c0156a41286a2001280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c015200341e0106a200341c0156a10c102200341900a6a41086a200341e9106a290000370300200341900a6a41106a200341f1106a290000370300200341900a6a41186a200341f9106a290000370300200320032900e1103703900a02400240024020032d00e0104101460d00200341b00e6a41186a200341900a6a41186a290300370300200341b00e6a41106a200341900a6a41106a290300370300200341b00e6a41086a200341900a6a41086a290300370300200320032903900a3703b00e200341800c6a200210ff03200341c0156a20032802800c220420032802880c220610b205200341a8066a41086a2205200341c0156a41186a290300370300200341a8066a41106a2209200341e0156a290300370300200341a8066a41186a2208200341e8156a290300370300200320032903d0153703a806200320032800f1153602a8042003200341f4156a2800003600ab04200341c0156a41086a290300210a20032903c015210b024020032d00f015220741024622010d00200341c8066a41186a2008290300370300200341c8066a41106a2009290300370300200341c8066a41086a2005290300370300200320032903a8063703c806200320032802a8043602f00b200320032800ab043600f30b0b0240024020010d00200341e0106a410310bc060c010b200341c8066a41186a200341b00e6a41186a290300370300200341c8066a41106a200341b00e6a41106a290300370300200341c8066a41086a200341b00e6a41086a290300370300200320032903b00e3703c8064200210a4280d0dbc3f402210b200341e0106a200341b00e6a4280d0dbc3f402420010c302410021070b20032d00e01022014106470d01200341f4156a20032800f30b360000200341c0156a41186a200341c8066a41086a290300370300200341e0156a200341c8066a41106a290300370300200341e8156a2201200341c8066a41186a2903003703002003200b3703c015200320032903c8063703d015200320073a00f015200320032802f00b3600f1152003200a3703c81520042006200341c0156a10c605024020032802840c450d002004102e0b20012002360200200341cd156a200341b00e6a41086a290300370000200341d5156a200341b00e6a41106a290300370000200341dd156a200341b00e6a41186a290300370000200341003a00c415200341023a00c015200320032903b00e3700c515200341c0156a10fe01200041186a41003a000020004200370308200020032800e8053600192000411c6a200341eb056a280000360000200042003703000c630b410221010c010b20032902e410210a20032d00e310210620032d00e210210720032d00e110210220032802840c450d002004102e0b2000200a370024200020063a0023200020073a0022200020023a002120004200370308200041206a20013a0000200041186a41003a0000200042013703000c600b200341800c6a41186a20082903003703002003200b3703880c2003200a3703800c200320032903f0063703900c200341c0156a41286a2001280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c015200341e0106a200341c0156a10c102200341a8066a41086a200341e9106a290000370300200341a8066a41106a200341f1106a290000370300200341a8066a41186a200341f9106a290000370300200320032900e1103703a80620032d00e0104101460d21200341b00e6a41186a200341a8066a41186a290300370300200341b00e6a41106a200341a8066a41106a290300370300200341b00e6a41086a200341a8066a41086a290300370300200320032903a8063703b00e0240200341b00e6a200341800c6a412010ec08450d00200341900a6a201110ff03200341c0156a20032802900a220120032802980a220710b205200341b00a6a41086a200341e8156a290300370300200320032903e0153703b00a200320032800f1153602a8042003200341f4156a2800003600ab04200341c0156a41186a290300210a20032903d015210b20032903c815210c20032903c015210d024020032d00f015220641024622020d00200341d0086a41086a200341b00a6a41086a290300370300200320032903b00a3703d008200320032802a8043602f00b200320032800ab043600f30b0b200341a8046a41086a2204200341d0086a41086a290300370300200320032903d0083703a80420020d21200341e8056a41086a2004290300220e370300200320032903a804220f3703e805200341d8156a200e3703002003200a3703c8152003200b3703c0152003200f3703d01502402006410171450d00200341e0106a410510bc060c580b0240200341c0156a200341b00e6a412010ec08450d00200341e0106a410210bc060c580b200341e0106a200341b00e6a200341800c6a200d200c4101108904200341e0106a41086a290300210e024020032802e0104101460d00200341f0106a290300210a200341d0086a41086a200341980c6a290300370300200320032903900c3703d008200341063a00e0104200200c200a7d200d200e54ad7d220a200d200e7d220b200d56200a200c56200a200c511b22021b210c4200200b20021b210d20032903880c210a20032903800c210b41002102410021060c590b20032802e41021022003200e3702e410200320023602e0100c570b200341b0086a410410bc0620032d00b0084106460d590c5b0b200341c0156a41286a2001280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c015200341e0106a200341c0156a10c102200341a8066a41086a200341e9106a290000370300200341a8066a41106a200341f1106a290000370300200341a8066a41186a200341f9106a290000370300200320032900e1103703a80620032d00e0104101460d1c200341b00e6a41186a200341a8066a41186a290300370300200341b00e6a41106a200341a8066a41106a290300370300200341b00e6a41086a200341a8066a41086a290300370300200320032903a8063703b00e200341800c6a200210ff03200341c0156a20032802800c220520032802880c220710b205200341b00a6a41086a2206200341e8156a290300370300200320032903e0153703b00a200341c0156a41186a290300210a20032903d015210b20032903c815210c20032903c015210d024020032d00f015220441024622010d00200341d0086a41086a2006290300370300200320032903b00a3703d0080b200341a8046a41086a200341d0086a41086a290300370300200320032903d0083703a80420010d1e200341e8056a41086a200341a8046a41086a290300220e370300200320032903a804220f3703e805200341d8156a200e3703002003200a3703c8152003200b3703c0152003200f3703d01502402004410171450d00200341e0106a410510bc060c510b200341c0156a200341b00e6a412010ec08450d1d200341e0106a410210bc060c500b200341d0086a41086a2008290300370300200320032903f0063703d008200341c0156a41286a2001280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c015200341c0156a10a7050d1a200341e0106a201110ff03200341c0156a20032802e010220220032802e810220110b205200341e8056a41086a2206200341e8156a290300370300200320032903e0153703e805200320032800f1153602a8042003200341f4156a2800003600ab04200341d8156a290300210c20032903d015210d20032903c815210e20032903c015210f024020032d00f01541024622070d00200341b00a6a41086a2006290300370300200320032903e8053703b00a200320032802a8043602f00b200320032800ab043600f30b0b200341a8046a41086a200341b00a6a41086a290300370300200320032903b00a3703a804024020070d00200341d8156a200341b0046a290300370300200320032903a8043703d0152003200d3703c0152003200c3703c815200341c8006a200341c0156a200f200e10fb010b200341c0156a41186a200b370300200341e0156a20032903d008370300200341f4156a20032800f30b360000200341e8156a2207200341d8086a22062903003703002003200a3703d015200342003703c815200342003703c015200320123a00f015200320032802f00b3600f11520022001200341c0156a10c605024020032802e410450d002002102e0b200341cd156a200b370000200341d5156a20032903d00837000020072011360200200341dd156a20062903003700002003200a3700c515200341003a00c415200341023a00c015200341c0156a10fe01200041186a41003a000020004200370308200020032800e8063600192000411c6a200341eb066a280000360000200042003703000c5d0b200341c0156a41286a2001280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a200929030037030020032003290390133703c015200341e0106a200341c0156a10c102200341a8066a41086a200341e9106a290000370300200341a8066a41106a200341f1106a290000370300200341a8066a41186a200341f9106a290000370300200320032900e1103703a80620032d00e0104101460d16200341b00e6a41186a200341a8066a41186a290300370300200341b00e6a41106a200341a8066a41106a290300370300200341b00e6a41086a200341a8066a41086a290300370300200320032903a8063703b00e200341900a6a200210ff03200341c0156a20032802900a220520032802980a220710b205200341b00a6a41086a2206200341e8156a290300370300200320032903e0153703b00a200320032800f1153602a8042003200341f4156a2800003600ab04200341c0156a41186a290300210a20032903d015210b20032903c815210c20032903c015210d024020032d00f015220441024622010d00200341d0086a41086a2006290300370300200320032903b00a3703d008200320032802a8043602f00b200320032800ab043600f30b0b200341a8046a41086a200341d0086a41086a290300370300200320032903d0083703a80420010d18200341e8056a41086a200341a8046a41086a290300220e370300200320032903a804220f3703e805200341f8106a200e3703002003200a3703e8102003200b3703e0102003200f3703f01002402004410171450d00200341800c6a410510bc060c4a0b200341e0106a200341b00e6a412010ec08450d17200341800c6a410210bc060c490b20034194066a41026a22062001410f6a2d00003a0000200341d0086a41086a2204200141206a290200370300200341d0086a41106a2205200141286a290200370300200320012f000d3b0194062003200141186a2902003703d008200141c8006a290300210e200141c0006a290300210d2002411a6a290100210c200241196a2d00002113200241186a2d00002115200241166a2f01002114200241156a2d00002116200241146a2d00002118200241126a2f01002119200241116a2d0000211a200241106a2d000021172002410e6a2f0100211b2002410d6a2d0000211c2002410c6a2d0000211d2002410a6a2f0100211e200241096a2d0000211f200241086a2d00002120200241066a2f01002121200241056a2d00002122200241046a2d00002123200241026a2f01002124200141146a2802002108200141106a28020021112001410c6a2d00002109200141386a290300210b200141306a290300210a2002280228210720022d0001211220022d0000210202400240024002400240200141086a2802000e050001020304000b200341c0156a41146a4101360200200342013702c4152003419cc3cb003602c015200341043602ac04200341a4a7c7003602a8042003200341a8046a3602d015200341c0156a4194a7c7001044000b200341b0086a41026a20062d00003a0000200341b00e6a41086a2004290300370300200341b00e6a41106a2005290300370300200320032f0194063b01b008200320032903d0083703b00e20072007280200417f6a22013602000240024002400240024002400240200241ff01710d00024020010d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b41012102201241ff01714101470d012003201f3a00cf06200320203a00ce06200320213b01cc06200320223a00cb06200320233a00ca06200320243b01c8062003201a3a00d706200320173a00d6062003201b3b01d4062003201c3a00d3062003201d3a00d2062003201e3b01d006200320133a00df06200320153a00de06200320143b01dc06200320163a00db06200320183a00da06200320193b01d8062003200c3703e006200341900a6a41186a2201200c370300200341900a6a41106a220720032903d806370300200341900a6a41086a220620032903d006370300200320032903c8063703900a20034190136a41186a200129030037030020034190136a41106a200729030037030020034190136a41086a2006290300370300200320032903900a37039013200341a8046a41026a2201200341b0086a41026a2d00003a0000200320032f01b0083b01a804200341e0106a41086a2207200341b00e6a41086a290300370300200341e0106a41106a200341b00e6a41106a290300370300200320032903b00e3703e01002400240024020090e03000201020b200341e8056a41026a20012d00003a0000200341800c6a41086a2007290300370300200341800c6a410d6a200341e0106a410d6a290000370000200320032f01a8043b01e805200320032903e0103703800c410021020c010b2008450d002011102e0b200341bb066a200341800c6a41086a290300370000200341a8066a41186a2003418d0c6a290000370000200320032f01e8053b01a806200320083600af06200320113600ab06200320032903800c3700b3062003200341e8056a41026a2d00003a00aa0620020d03200341c0156a41186a200341a8066a41186a290300370300200341c0156a41106a200341a8066a41106a290300370300200341c0156a41086a200341a8066a41086a290300370300200320032903a8063703c015200341e0106a20034190136a200341c0156a200a200b410110ca0220032d00e01022024106460d0620032902e410210a20032d00e310210120032d00e210210720032d00e11021060c050b024020010d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b200341900a6a41186a200341c8066a41186a290300370300200341900a6a41106a200341c8066a41106a290300370300200341900a6a41086a200341c8066a41086a290300370300200320032903c8063703900a0c010b200341900a6a41186a200341c8066a41186a290300370300200341900a6a41106a200341c8066a41106a290300370300200341900a6a41086a200341c8066a41086a290300370300200320032903c8063703900a0b4102210220094102470d012008450d012011102e0c010b410121020b0b200320032800b00a3602f0062003200341b30a6a2800003600f306200041186a41003a000020004200370308200020032802f0063600192000411c6a20032800f306360000200041246a200a370200200020013a0023200020073a0022200020063a0021200041206a20023a0000200042013703000c5f0b200320032800b00a3602f0062003200341b30a6a2800003600f306200041186a41003a000020004200370308200020032802f0063600192000411c6a20032800f306360000200042003703000c5e0b200341e8066a41026a20062d00003a0000200341b00a6a41086a2004290300370300200341b00a6a41106a200529030037030020072007280200417f6a2201360200200320032f0194063b01e806200320032903d0083703b00a02400240024002400240200241ff01710d00024020010d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b201241ff01710d01200341e0106a41026a2201200341e8066a41026a2d00003a0000200341c0156a41086a2207200341b00a6a41086a290300370300200341c0156a41106a200341b00a6a41106a290300370300200320032f01e8063b01e010200320032903b00a3703c0154101210220090e03020403040b20010d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b4102210220094102470d4c2008450d4c2011102e0c4c0b200341b00e6a41026a20012d00003a000020034190136a41086a200729030037030020034190136a410d6a200341c0156a410d6a290000370000200320032f01e0103b01b00e200320032903c01537039013410021020c010b2008450d002011102e0b200341bb066a20034190136a41086a290300370000200341a8066a41186a22012003419d136a290000370000200320032f01b00e3b01a806200320083600af06200320113600ab0620032003290390133700b3062003200341b00e6a41026a2d00003a00aa0620020d16200341800c6a41186a2001290300370300200341800c6a41106a200341a8066a41106a290300370300200341800c6a41086a200341a8066a41086a290300370300200320032903a8063703800c20034190136a200341800c6a10c802200341c0156a200328029013220720032802981310c902200341c0156a41386a2903002125200341c0156a41306a2903002126200341c0156a41286a2903002127200341c0156a41206a2903002128200341c0156a41186a2903002129200341c0156a41106a290300210f20034180166a290300212a20032903c815211020032903c015210c200341a8046a41086a20034190166a290300370300200320034188166a2903003703a804200e200b7c200d200a7c222b200d54ad7c212c02400240200c4201510d00200341e0106a41386a4200370300200341e0106a41306a4200370300200341e0106a41286a4200370300200341e0106a41206a4200370300200341f8106a4200370300200341e0106a41106a4200370300200341e0106a41086a4200370300200342003703e0104200212a42002128420021274200212642002125420021104200210f420021294200212d4200212e4200210c4200212f0c010b200341e0106a41206a2027370300200341e0106a41286a2026370300200341e0106a41106a2029370300200341e0106a41306a2025370300200320283703f810200320103703e0102003202a370398112003200f3703e8102027212d2026212e2010210c200f212f0b202c502102202b4280c8afa0255421010240200328029413450d002007102e0b2001410020021b210202400240200c202f844200520d00202d20032903f01084202e200341f8106a29030084844200520d0020032903901120034198116a2903008450450d004200212b410021010c010b4201212b410121010b4200200b20021b210b4200200a20021b210a0240202b4201510d004200212742002126420021254200212a4200212942002128420021104200210f0b4200200e20021b210c4200200d20021b210d02400240200a201058200b200f58200b200f5122021b0d002003200a20107d3703c0152003200b200f7d200a201054ad7d3703c8152003200341c0156a3602f006200341f0066a10ce020c010b200a20105a200b200f5a20021b0d0020032010200a7d3703c0152003200f200b7d2010200a54ad7d3703c8152003200341c0156a3602f006200341f0066a10cc020b02400240200d202958200c202858200c20285122021b0d002003200d20297d3703c0152003200c20287d200d202954ad7d3703c8152003200341c0156a3602f006200341f0066a10ce020c010b200d20295a200c20285a20021b0d0020032029200d7d3703c01520032028200c7d2029200d54ad7d3703c8152003200341c0156a3602f006200341f0066a10cc020b200341e8156a22072026370300200341f0156a22062025370300200320273703e0152003200c3703d8152003200d3703d0152003200a3703c0152003200b3703c8154200210f42012110202b420152ad212802400240427f200a200d7c220e200e200a542202200b200c7c2002ad7c220e200b54200e200b511b22021b222942ffc7afa02556427f200e20021b220e420052200e501b0d00200a200d84200b200c8484220f50210242002110200f420052ad210f0c010b2006290300212d2007290300212f200341e0156a290300212c200341d0156a290300212520032903d815212b20032903c815212720032903c0152126410121020b200341d8136a200c370300200341d0136a200d370300200341c8136a200b370300200341b8136a200e370300200341b0136a22072029370300200341a0136a200b3703002003200a3703c0132003200a370398132003200f3703a8132003202837039013024020012010420152720d002003200341800c6a3602c015200341800c6a200341c0156a10bd060c480b02400240200141017322012010420151720d002003200341800c6a3602c015200341800c6a200341c0156a10be0641ff017122014103460d49024020010e03024a00020b024020020d00200320073602c015200341c0156a10cc020b410421020c4b0b2010420152200171450d480b200a2126200b21100c480b200141e0006a290300210c200141d8006a290300210f200141d0006a2903002110200ba72113200aa72101200a422088a72115200341f0066a41026a20062d00003a0000200341e0106a41086a2004290300370300200341e0106a41106a200529030037030020072007280200417f6a2206360200200320032f0194063b01f006200320032903d0083703e0100240024002400240024002400240200241ff01710d00024020060d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b201241ff01710d01200341800c6a41026a2207200341f0066a41026a2d00003a0000200341c0156a41086a2206200341e0106a41086a290300370300200341c0156a41106a200341e0106a41106a290300370300200320032f01f0063b01800c200320032903e0103703c0154101210220090e03020403040b20060d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b410221020240200141ff01714102470d002013450d002015102e0b20094102470d032008450d032011102e0c030b200341b00a6a41026a20072d00003a0000200341b00e6a41086a2006290300370300200341b00e6a410d6a200341c0156a410d6a290000370000200320032f01800c3b01b00a200320032903c0153703b00e410021020c010b2008450d002011102e0b200341db066a200341b00e6a41086a290300370000200341c8066a41186a2207200341bd0e6a290000370000200320032f01b00a3b01c806200320083600cf06200320113600cb06200320032903b00e3700d3062003200341b00a6a41026a2d00003a00ca060240024020020d00200b422088a7210420034190136a41186a200729030037030020034190136a41106a200341c8066a41106a29030037030020034190136a41086a200341c8066a41086a290300370300200320032903c806370390132001410876210241012106024002400240200141ff01710e03000201020b2010a72107410021060c010b02402013450d002015102e0b0b200341bf066a200e3700002003200d3700b706200320073a00c706200320043600b306200320133600af06200320153600ab06200320023b01a806200320024110763a00aa0620060d01200341c0156a41186a200341a8066a41186a290300370300200341c0156a41106a200341a8066a41106a290300370300200341c0156a41086a200341a8066a41086a290300370300200320032903a8063703c015200341b00e6a20034190136a200341c0156a200f200c410110ca02024020032d00b00e22024106460d0020032902b40e210a20032d00b30e210120032d00b20e210720032d00b10e21060c040b200320032802e8053602b008200320032800eb053600b308200041186a41003a000020004200370308200020032802b0083600192000411c6a20032800b308360000200042003703000c600b41012102200141ff01714102470d012013450d012015102e0c010b410121020b0b200320032802e8053602b008200320032800eb053600b308200041186a41003a000020004200370308200020032802b0083600192000411c6a20032800b308360000200041246a200a370200200020013a0023200020073a0022200020063a0021200041206a20023a0000200042013703000c5c0b200341e8056a41026a20062d00003a0000200341b00e6a41086a2004290300370300200341b00e6a41106a2005290300370300200320032f0194063b01e805200320032903d0083703b00e20072007280200417f6a22013602000240024002400240024002400240200241ff01710d00024020010d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b41012102201241ff01714101470d012003201f3a00cf06200320203a00ce06200320213b01cc06200320223a00cb06200320233a00ca06200320243b01c8062003201a3a00d706200320173a00d6062003201b3b01d4062003201c3a00d3062003201d3a00d2062003201e3b01d006200320133a00df06200320153a00de06200320143b01dc06200320163a00db06200320183a00da06200320193b01d8062003200c3703e006200341900a6a41186a2201200c370300200341900a6a41106a220720032903d806370300200341900a6a41086a220620032903d006370300200320032903c8063703900a20034190136a41186a200129030037030020034190136a41106a200729030037030020034190136a41086a2006290300370300200320032903900a37039013200341b00a6a41026a2201200341e8056a41026a2d00003a0000200320032f01e8053b01b00a200341e0106a41086a2207200341b00e6a41086a290300370300200341e0106a41106a200341b00e6a41106a290300370300200320032903b00e3703e01002400240024020090e03000201020b200341a8046a41026a20012d00003a0000200341800c6a41086a2007290300370300200341800c6a410d6a200341e0106a410d6a290000370000200320032f01b00a3b01a804200320032903e0103703800c410021020c010b2008450d002011102e0b200341bb066a200341800c6a41086a290300370000200341a8066a41186a2003418d0c6a290000370000200320032f01a8043b01a806200320083600af06200320113600ab06200320032903800c3700b3062003200341a8046a41026a2d00003a00aa0620020d03200341c0156a41186a200341a8066a41186a290300370300200341c0156a41106a200341a8066a41106a290300370300200341c0156a41086a200341a8066a41086a290300370300200320032903a8063703c015200341e0106a20034190136a200341c0156a200a200b410010ca0220032d00e01022024106460d0620032902e410210a20032d00e310210120032d00e210210720032d00e11021060c050b024020010d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b200341900a6a41186a200341c8066a41186a290300370300200341900a6a41106a200341c8066a41106a290300370300200341900a6a41086a200341c8066a41086a290300370300200320032903c8063703900a0c010b200341900a6a41186a200341c8066a41186a290300370300200341900a6a41106a200341c8066a41106a290300370300200341900a6a41086a200341c8066a41086a290300370300200320032903c8063703900a0b4102210220094102470d012008450d012011102e0c010b410121020b0b200320032802f0063602e806200320032800f3063600eb06200041186a41003a000020004200370308200020032802e8063600192000411c6a20032800eb063600002000200a370024200020013a0023200020073a0022200020063a0021200041206a20023a0000200042013703000c5c0b200320032802f0063602e806200320032800f3063600eb06200041186a41003a000020004200370308200020032802e8063600192000411c6a20032800eb06360000200042003703000c5b0b2001410c6a2802002105200141086a280200211120012802042104200341c0156a41286a200241286a280200360200200341c0156a41206a200241206a290200370300200341c0156a41186a200241186a290200370300200341c0156a41106a200241106a290200370300200341c0156a41086a200241086a290200370300200320022902003703c0150240024002400240200341c0156a10bb060d0002402005410a4d0d00200341f00b6a410310bf060c030b200341900a6a41186a22014200370300200341900a6a41106a22174200370300200341900a6a41086a22024200370300200342003703900a200341d0086a4190dac800410a1081022002200341d0086a41086a2206290300370300200320032903d0083703900a200341b00a6a41d097c900410c1081022001200341b00a6a41086a2209290300370300201720032903b00a3703000240200341900a6a108603220741ff01714102460d002007410171450d00200341f00b6a410210bf060c020b200142003703002017420037030020024200370300200342003703900a200341d0086a4190dac800410a10810220022006290300370300200320032903d0083703900a200341b00a6a41d097c900410c108102201741086a2009290300370200201720032903b00a370200200341013a00a804200341900a6a4120200341a8046a410110b201200341c8066a41186a22024200370300200341c8066a41106a221b4200370300200341c8066a41086a22014200370300200342003703c806200341e8056a41d9fcc60041061081022001200341e8056a41086a290300370300200320032903e8053703c806200341a8046a4180f4cb0041061081022002200341a8046a41086a290300370300201b20032903a80437030020034180016a200341c8066a4120108e0220032802800121012003280284012107200341b0086a10e10402400240024020032802b808220220032802b4082219470d00200241016a22062002490d4a200241017422092006200920064b1b22064104200641044b1bad42c4007e220a422088a7454102742106200aa721090240024020020d00200341003602c0150c010b200341c8156a4104360200200320032802b0083602c0152003200241c4006c3602c4150b20034190136a20092006200341c0156a107d20034198136a28020021062003280290134101460d0120032003280294133602b0082003200641c4006e22193602b4080b20032802b008221c200241c4006c6a22062007410020011b360204200641003a00002003200241016a22153602b8082004200541f0006c22026a212420050d01200421070c460b20060d5c0c480b200441f4006a2106200241907f6a2109200341e0106a4101722114200341c0156a41106a2130200341c0156a41086a2131200341c8066a41186a21162003419f0c6a21322004210703402007280204211a20072802002112200341c0156a200741086a41e80010e9081a200741f0006a2107201a450d4520034190136a200341c0156a41e80010e9081a2003201a3602c415200320123602c015203120034190136a41e80010e9081a20164200370300200341c8066a41106a22184200370300200341c8066a41086a22134200370300200342003703c806200341e8056a41d9fcc60041061081022013200341e8056a41086a290300370300200320032903e8053703c806200341a8046a4180f4cb004106108102201b41086a200341a8046a41086a290300370300201b20032903a804370300200341f8006a200341c8066a4120108e0220032802782102200328027c2101200341800c6a200341c0156a109a04024020120d00200341e0106a410410bf0620033500e11020033300e51020033100e7104210868442208684210a200341e8106a28020021020c450b024020122001410020021b22024d0d00200341e0106a410510bf0620033500e11020033300e51020033100e7104210868442208684210a200341e8106a28020021020c450b200341b00a6a2012417f6a108c02200341e0106a20032802b00a220820032802b80a108d0220032d00e01021012016201441186a221d2900003703002018201441106a221e2900003703002013201441086a221f290000370300200320142900003703c8060240024020014101460d00200341b00e6a41186a4200370300200341b00e6a41106a4200370300200341b00e6a41086a4200370300200342003703b00e0c010b200341b00e6a41186a2016290300370300200341b00e6a41106a2018290300370300200341b00e6a41086a2013290300370300200320032903c8063703b00e0b024020032802b40a450d002008102e0b0240200341b00e6a2030412010ec08450d00200341e0106a410110bf0620033500e11020033300e51020033100e7104210868442208684210a200341e8106a28020021020c450b0240201220024f0d00200341e0106a410710bf0620033500e11020033300e51020033100e7104210868442208684210a200341e8106a28020021020c450b024002402015450d00201541c4006c2101201c21020340024020022d00004101470d0041012108200241016a200341800c6a412010ec08450d030b200241c4006a2102200141bc7f6a22010d000b0b410021080b200341b00a6a2012108c02200341e0106a20032802b00a220120032802b80a108d0220032d00e01021022016201d2900003703002018201e2900003703002013201f290000370300200320142900003703c8060240024020024101460d00200341b00e6a41186a4200370300200341b00e6a41106a4200370300200341b00e6a41086a4200370300200342003703b00e0c010b200341b00e6a41186a2016290300370300200341b00e6a41106a2018290300370300200341b00e6a41086a2013290300370300200320032903c8063703b00e0b024020032802b40a450d002001102e0b02402008417f73200341b00e6a200341800c6a412010ec08410047710d00200341e0106a410610bf0620033500e11020033300e51020033100e7104210868442208684210a200341e8106a28020021020c450b2032310000210a20032900930c210b200328008f0c2101200328008b0c210820032800870c211220032800830c211a20032f00810c211d200335009b0c210c200341800c6a200341c0156a109a04200341b00e6a41186a221e4200370300200341b00e6a41106a221f4200370300200341b00e6a41086a22204200370300200342003703b00e200341a8066a41186a22214200370300200341a8066a41106a22224200370300200341a8066a41086a22234200370300200342003703a80641c800102c2202450d5c200341c8066a10e2042002410236022020024101360244200241186a2016290300370200200241106a2018290300370200200241086a2013290300370200200220032903c806370200200220032903a8063702242002412c6a2023290300370200200241346a20222903003702002002413c6a2021290300370200200320023602e01020034282808080203702e410200341e0106a10e304200341e0106a41186a201e290300370300200341e0106a41106a201f290300370300200341e0106a41086a2020290300370300200320032903b00e3703e010200341e0106a10e404200341f0066a41186a2213200341800c6a41186a290300370300200341f0066a41106a2218200341800c6a41106a290300370300200341f0066a41086a221e200341800c6a41086a290300370300200320032903800c3703f006024020152019470d0020192019470d00201941016a22022019490d492019410174221f2002201f20024b1b22024104200241044b1bad42c4007e220d422088a7454102742102200da7211f0240024020190d00200341003602e0100c010b200341043602e8102003201c3602e0102003201941c4006c3602e4100b200341b00e6a201f2002200341e0106a107d20032802b80e210220032802b00e4101460d44200320032802b40e221c3602b0082003200241c4006e22193602b4080b201c201541c4006c6a220241013a0000201e290300210d2018290300210e2013290300210f20032903f0062110200241c1006a200c200a42208684220a4220883c00002002200a3e003d2002200b370035200220013600312002200836002d200220123600292002201a3600252002201d3b0023200241003a002120022010370001200241196a200f370000200241116a200e370000200241096a200d370000200320032802b80841016a22153602b80820032802c4152108024020032802cc152202450d00200241246c21012008210203400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b024020032802c8152202450d00200241246c450d002008102e0b200941907f6a2109200641f0006a210620072024470d000c460b0b200341023a00f00b0b2005450d010b2004200541f0006c6a2106200421020340024020022207410c6a2802002201450d0020072802042102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b200741f0006a21020240200741086a2802002201450d00200141246c450d002007280204102e0b20022006470d000b0b2011450d42201141f0006c450d422004102e0c420b200341c0156a200141086a41d80010e9081a20034190136a41286a200241286a28020036020020034190136a41206a200241206a29020037030020034190136a41186a200241186a29020037030020034190136a41106a200241106a29020037030020034190136a41086a200241086a29020037030020032002290200370390132000200341c0156a20034190136a1081060c590b200141086a280200211520012802042112200341a8046a200141106a41c00110e9081a200341e8056a41286a2201200241286a280200360200200341e8056a41206a2207200241206a290200370300200341e8056a41186a2206200241186a290200370300200341e8056a41106a2204200241106a290200370300200341e8056a41086a2205200241086a290200370300200320022902003703e80502402012450d00200341f0066a200341a8046a41c00110e9081a200341c0156a41286a2001280200360200200341c0156a41206a2007290300370300200341c0156a41186a2006290300370300200341c0156a41106a2004290300370300200341c0156a41086a2005290300370300200320032903e8053703c01520034190136a200341c0156a10c102200341900a6a41086a20034199136a290000370300200341900a6a41106a200341a1136a290000370300200341900a6a41186a200341a9136a29000037030020032003290091133703900a024020032d0090134101460d00200341b0086a41186a2202200341900a6a41186a2206290300370300200341b0086a41106a2201200341900a6a41106a290300370300200341b0086a41086a2207200341900a6a41086a290300370300200320032903900a3703b008200341d0086a200341f0066a41c00110e9081a20034190136a41186a200229030037030020034190136a41106a200129030037030020034190136a41086a2007290300370300200320032903b00837039013200341c0156a20034190136a10f005024020032d00c0154101470d00200341f7106a2202200341d9156a290000370000200341e0106a41106a2201200341d2156a290100370300200341990a6a200341ca156a290100370000200341a10a6a200129030037000020062002290000370000200320032d00c1153a00900a200320032901c2153700910a200341b0086a1083060d13200341b00e6a200341d0086a41c00110e9081a200341c8066a200341900a6a10a603200341c0156a20032802c806220120032802d00610a70320032d00c0152102200341e0106a200341c0156a41017241c00110e9081a0240024020024101460d00200341003a0090130c010b200341013a00901320034190136a410172200341e0106a41c00110e9081a0b024020032802cc06450d002001102e0b20034190136a4101722114200341c0156a4101722102416821060340200341c0016a200341b00e6a200641b0fac6006a280000220110d10320032802c0012107200320032802c40122043602e810200320073602e410200320013602e010200341f00b6a200341e0106a10c203200341c0156a20032802f00b220520032802f80b10f402200341a8066a41086a2209200241086a290000370300200341a8066a41106a2208200241106a290000370300200341a8066a41186a2211200241186a290000370300200320022900003703a8060240024020032d00c0154101470d00200341c8066a41186a22132011290300370300200341c8066a41106a22112008290300370300200341c8066a41086a22082009290300370300200320032903a8063703c806024020032802f40b450d002005102e0b200341c0156a41186a2013290300370300200341c0156a41106a2011290300370300200341c0156a41086a2008290300370300200320032903c8063703c015200341c0156a200341900a6a412010ec08450d01200341c0156a410310c006200341800c6a410a6a200341c8156a2202280200360000200320032903c0153700820c200341b00a6a200341800c6a41c00110e9081a2002200341b00a6a410a6a280000360200200320032900b20a3703c0150c3f0b20032802f40b450d002005102e0b0240024020032d0090134101470d00200341b8016a2014200110d10320032802b8012205450d000240200420032802bc012209470d0020072005200410ec08450d020b200320093602c815200320053602c415200320013602c015200341e0106a200341c0156a10c20320032802e010220520032802e81010ff0120032802e410450d002005102e0b200320043602c815200320073602c415200320013602c015200341e0106a200341c0156a10c20320032802e010210120032802e81021074120102c2204450d5a200342203702c415200320043602c015200341c0156a200341900a6a412010742001200720032802c015220420032802c81510b201024020032802c415450d002004102e0b20032802e410450d002001102e0b200641046a22060d000b200341e0106a200341900a6a10a60320032802e810210120032802e0102102200341003602c815200342013703c015200341c0156a200341b00e6a41201074200341c0156a200341b00e6a41206a41201074200341c0156a200341f00e6a41201074200341c0156a200341900f6a41201074200341c0156a200341b00f6a41201074200341c0156a200341d00f6a412010742002200120032802c015220720032802c81510b201024020032802c415450d002007102e0b024020032802e410450d002002102e0b024020032d009013450d00200341b0086a108a060b41062102200341063a00c0150c3d0b200341c0156a410210c0060c3b0b410221020c3c0b200341c0156a41286a2001280200360200200341c0156a41206a2007290300370300200341c0156a41186a2006290300370300200341c0156a41106a2004290300370300200341c0156a41086a2005290300370300200320032903e8053703c01520034190136a200341c0156a10c102200341a8066a41086a20034199136a290000370300200341a8066a41106a200341a1136a290000370300200341a8066a41186a200341a9136a29000037030020032003290091133703a80620032d0090134101460d0f200341b00a6a41186a200341a8066a41186a290300220a370300200341b00a6a41106a200341a8066a41106a290300220b370300200341b00a6a41086a200341a8066a41086a290300220c370300200320032903a806220d3703b00a20034190136a41186a200a37030020034190136a41106a200b37030020034190136a41086a200c3703002003200d37039013200341c0156a20034190136a10f0050240024020032d00c0154101470d00200341f7106a2202200341d9156a290000370000200341e0106a41106a2201200341d2156a290100370300200341890c6a200341ca156a290100370000200341910c6a2001290300370000200341800c6a41186a2002290000370000200320032d00c1153a00800c200320032901c2153700810c200341d0086a200341800c6a10a603200341c0156a20032802d008220220032802d808220710a703024020032d00c0152201450d002002200710ff010b20032d00c1152107200341e0106a200341c0156a41027241bf0110e9081a024020014101470d00200341b00e6a200341e0106a41bf0110e9081a024020032802d408450d002002102e0b200320073a00901320034190136a410172200341b00e6a41bf0110e9081a200341b0016a20034190136a41e7e485f30610d103200320032903b0013702c415200341e7e485f3063602c015200341e0106a200341c0156a10c20320032802e010220220032802e81010ff01024020032802e410450d002002102e0b200341a8016a20034190136a41e2c289ab0610d103200320032903a8013702c415200341e2c289ab063602c015200341e0106a200341c0156a10c20320032802e010220220032802e81010ff01024020032802e410450d002002102e0b200341a0016a20034190136a41e9dabdf30610d103200320032903a0013702c415200341e9dabdf3063602c015200341e0106a200341c0156a10c20320032802e010220220032802e81010ff01024020032802e410450d002002102e0b20034198016a20034190136a41f0c2c98b0610d10320032003290398013702c415200341f0c2c98b063602c015200341e0106a200341c0156a10c20320032802e010220220032802e81010ff01024020032802e410450d002002102e0b20034190016a20034190136a41e1e69df30610d10320032003290390013702c415200341e1e69df3063602c015200341e0106a200341c0156a10c20320032802e010220220032802e81010ff01024020032802e410450d002002102e0b20034188016a20034190136a41e1ea91cb0610d10320032003290388013702c415200341e1ea91cb063602c015200341e0106a200341c0156a10c20320032802e010220220032802e81010ff01024020032802e410450d002002102e0b200341b00a6a108a060c3b0b024020032802d408450d002002102e0b200341f0066a410410c0060c010b200341f0066a410210c0060b20032d00f00622024106460d3820032d00f106210120032d00f206210720032d00f306210620032902f406210a0c370b2001411c6a2802002115200141186a2802002111200141146a2802002108200141106a28020021122001410c6a2802002113200141086a2802002107200341e0106a200141206a41800210e9081a200341800c6a41286a2201200241286a280200360200200341800c6a41206a2206200241206a290200370300200341800c6a41186a2204200241186a290200370300200341800c6a41106a2205200241106a290200370300200341800c6a41086a2209200241086a290200370300200320022902003703800c024002400240024020070e0400010203000b200341c0156a41146a4101360200200342013702c4152003419cc3cb003602c015200341043602ac0420034194c3cb003602a8042003200341a8046a3602d015200341c0156a41c499c9001044000b20034190136a200341e0106a41800210e9081a200341c0156a41286a2001280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a2009290300370300200320032903800c3703c015200341b00a6a200341c0156a10c102200341a8066a41086a200341b90a6a2202290000370300200341a8066a41106a200341c10a6a2201290000370300200341a8066a41186a200341c90a6a2207290000370300200320032900b10a3703a80602400240024020032d00b00a4101470d00200341d00e6a41023a0000200341c80e6a41003a0000200342003703b80e200342013703b00e02402011450d002011410c6c21012012210203400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b02402008450d002008410c6c450d002012102e0b200341b80e6a210241002106410221040c010b200341c8066a41186a200341a8066a41186a290300220a370300200341c8066a41106a200341a8066a41106a290300220b370300200341c8066a41086a200341a8066a41086a290300220c370300200320032903a806220d3703c8062007200a3700002001200b3700002002200c3700002003200d3700b10a200341013a00b00a200341c0156a20034190136a41800210e9081a200341dc086a2011360200200341d0086a41086a2008360200200320153602e008200320123602d408200320133602d008200341b00e6a200341b00a6a200341c0156a200341d0086a10c10620032903b00e4201520d01200341b00e6a41086a2102200341d00e6a2d0000210420032d00c80e21060b200320022800113602e8062003200241146a2800003600eb0620022f0019210120022d001b2107200229001c210a2002280024210220032903b80e210b20032903c00e210c200041186a20063a0000200041106a200c3703002000200b370308200020032802e8063600192000411c6a20032800eb063600002000412c6a2002360200200041246a200a370200200020073a0023200020013b0021200041206a20043a0000200042013703000c5a0b200320032800c90e3602e8062003200341b00e6a411c6a2800003600eb0620032903b80e210a20032903c00e210b200041186a20032d00c80e3a0000200041106a200b3703002000200a370308200020032802e8063600192000411c6a20032800eb06360000200042003703000c590b20034190136a200341e0106a41800210e9081a200341c0156a41286a2001280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a2009290300370300200320032903800c3703c015024002400240200341c0156a10bb06450d00200341d00e6a41023a0000200341c80e6a41003a0000200342003703b80e200342013703b00e02402011450d002011410c6c21012012210203400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b02402008450d002008410c6c450d002012102e0b200341b80e6a210241002106410221040c010b200341c0156a10e204200341c90a6a200341c0156a41186a290300370000200341c10a6a200341c0156a41106a290300370000200341b90a6a200341c0156a41086a290300370000200341013a00b00a200320032903c0153700b10a200341c0156a20034190136a41800210e9081a200341dc086a2011360200200341d0086a41086a2008360200200320153602e008200320123602d408200320133602d008200341b00e6a200341b00a6a200341c0156a200341d0086a10c10620032903b00e4201520d01200341b00e6a41086a2102200341d00e6a2d0000210420032d00c80e21060b200320022800113602f0062003200241146a2800003600f30620022f0019210120022d001b2107200229001c210a2002280024210220032903b80e210b20032903c00e210c200041186a20063a0000200041106a200c3703002000200b370308200020032802f0063600192000411c6a20032800f3063600002000412c6a2002360200200041246a200a370200200020073a0023200020013b0021200041206a20043a0000200042013703000c590b200320032800c90e3602f0062003200341b00e6a411c6a2800003600f30620032903b80e210a20032903c00e210b200041186a20032d00c80e3a0000200041106a200b3703002000200a370308200020032802f0063600192000411c6a20032800f306360000200042003703000c580b200341c0156a41286a2001280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a2009290300370300200320032903800c3703c0150240200341c0156a10a705450d002000420037002420004200370308200041206a41023a0000200041186a41003a0000200042013703000c580b200341a8066a41186a22024200370300200341b8066a22014200370300200341a8066a41086a22074200370300200342003703a806200341e8056a41a0dac800410f1081022007200341e8056a41086a290300370300200320032903e8053703a806200341a8046a41a0eec80041071081022002200341a8046a41086a290300370300200120032903a804370300200341a8066a41202013201210e504200041186a41003a000020004200370308200020032800e8063600192000411c6a200341eb066a280000360000200042003703000c570b200141246a28020021052001411c6a2802002104200141186a2802002109200141146a2802002108200141106a28020021062001410c6a2802002111200141086a2802002112200341c0156a41286a200241286a280200360200200341c0156a41206a200241206a290200370300200341c0156a41186a200241186a290200370300200341c0156a41106a200241106a290200370300200341c0156a41086a200241086a290200370300200320022902003703c015024002400240200341c0156a10bb06450d004200210a410221064200210b0c010b200341a8066a41186a22024200370300200341a8066a41106a22014200370300200341a8066a41086a22074200370300200342003703a806200341e8056a41a081ca0041071081022007200341e8056a41086a290300370300200320032903e8053703a806200341a8046a41e4d1c100410c1081022002200341a8046a41086a290300370300200120032903a804370300200341c8016a200341a8066a4120108e02200341c0156a20032802cc01410020032802c8011b2215200510c20620032802c015220220032802c815108f022107024020032802c415450d002002102e0b200341b00e6a1087032007417f7320032802b00e221320054105746a410020032802b80e20054b1b2202410047710d01024020032802b40e41ffffff3f71450d002013102e0b4280808080b0024280808080a00120071b210b41b4f3c800ad41aaf3c800ad20071b210a410321060b02402011450d002012102e0b02402004450d002004410c6c21012008210203400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b02402009450d002009410c6c450d002008102e0b200020073a00222000410c3a0021200042003703082000200b200a84370024200041206a20063a0000200041186a41003a0000200042013703000c570b200241086a290000210a200241106a290000210b2002290000210c200341c8066a41186a200241186a290000220d370300200341c8066a41106a200b370300200341c8066a41086a200a3703002003200c3703c806200341cd156a200a370000200341d5156a200b370000200341dd156a200d370000200341003a00c415200341083a00c0152003200c3700c515200341c0156a10fe01200341003602e810200342013703e0102006200341e0106a1076200341e0106a2012200610742004200341e0106a107602402004450d0020082004410c6c6a210620082102034020022802002101200241086a2802002207200341e0106a1076200341e0106a2001200710742002410c6a22022006470d000b0b20034190136a2015200510c20620032802e810220141046a2202417f4c0d3f20032802e0102107200328029813210520032802901321060240024020020d00410121150c010b2002102c2215450d540b200341003602c815200320023602c415200320153602c0152001200341c0156a1076200341c0156a2007200110742006200520032802c015220220032802c81510b201024020032802c415450d002002102e0b0240200328029413450d002006102e0b024020032802e410450d002007102e0b024020032802b40e41ffffff3f71450d002013102e0b02402011450d002012102e0b02402004450d002004410c6c21012008210203400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b02402009450d002009410c6c450d002008102e0b20004200370308200020032800e806360019200041186a41003a00002000411c6a200341eb066a280000360000200042003703000c560b200341c0156a41306a200141386a290300370300200341c0156a41286a200141306a290300370300200341c0156a41206a200141286a290300370300200341c0156a41186a200141206a290300370300200341c0156a41106a200141186a290300370300200341c0156a41086a200141106a2903003703002003200141086a2903003703c01520034190136a41286a200241286a28020036020020034190136a41206a200241206a29020037030020034190136a41186a200241186a29020037030020034190136a41106a200241106a29020037030020034190136a41086a200241086a29020037030020032002290200370390132000200341c0156a20034190136a10c3060c550b200341c0156a41306a200141386a290300370300200341c0156a41286a200141306a290300370300200341c0156a41206a200141286a290300370300200341c0156a41186a200141206a290300370300200341c0156a41106a200141186a290300370300200341c0156a41086a200141106a2903003703002003200141086a2903003703c01520034190136a41286a200241286a28020036020020034190136a41206a200241206a29020037030020034190136a41186a200241186a29020037030020034190136a41106a200241106a29020037030020034190136a41086a200241086a29020037030020032002290200370390132000200341c0156a20034190136a10c4060c540b200341c0156a41306a200141386a290300370300200341c0156a41286a200141306a290300370300200341c0156a41206a200141286a290300370300200341c0156a41186a200141206a290300370300200341c0156a41106a200141186a290300370300200341c0156a41086a200141106a2903003703002003200141086a2903003703c01520034190136a41286a200241286a28020036020020034190136a41206a200241206a29020037030020034190136a41186a200241186a29020037030020034190136a41106a200241106a29020037030020034190136a41086a200241086a29020037030020032002290200370390132000200341c0156a20034190136a10c5060c530b200141206a290300210c200141186a290300210a200141286a290300210b200141146a2802002112200141106a28020021112001410c6a2802002108200141086a2d0000210720012d00092113200341e0106a41286a2201200241286a280200360200200341e0106a41206a2206200241206a290200370300200341e0106a41186a2204200241186a290200370300200341e0106a41106a2205200241106a290200370300200341e0106a41086a2209200241086a290200370300200320022902003703e0100240024002400240024002400240024020070e0700010203040506000b200341c0156a41146a4101360200200342013702c4152003419cc3cb003602c015200341043602ac0420034194c3cb003602a8042003200341a8046a3602d015200341c0156a4188f3c0001044000b200341c0156a41286a2001280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a2009290300370300200320032903e0103703c01520034190136a200341c0156a10c1020240024020032d0090134101460d0020034190136a41086a280200210220034190136a410c6a280200210120034190136a41106a280200210720034190136a41146a290200210b20032d009113210620032f019213210420032802941321052003200341ac136a35020020034190136a41206a31000042208684220d3e00cb0e200341cf0e6a200d4220883c00002003200b3700c30e200320073600bf0e200320013600bb0e200320023600b70e200320053600b30e200320043b00b10e200320063a00b00e0240201241104d0d00200341d0086a410410f3020c020b024020120d00200341d0086a410210f3020c020b200341980c6a22014200370300200341800c6a41106a22024200370300200341800c6a41086a22074200370300200342003703800c200341b00a6a418ef9c00041101081022007200341b00a6a41086a290000370300200320032900b00a3703800c200341c0156a419ef9c000410a1081022001200341c0156a41086a290000370300200220032900c01537030041002101200341b40a6a41003a0000200341003602b00a20034198026a200341800c6a4120200341b00a6a4105410010ca040240200328029802450d002003200328029c022201410520014105491b3602c4152003200341b00a6a3602c01520034190026a200341c0156a10ab010240200328029002450d00410021010c010b20032802940221010b200341980c6a4200370300200341800c6a41106a4200370300200341800c6a41086a22074200370300200342003703800c200341b00a6a418ef9c00041101081022007200341b00a6a41086a290000370300200320032900b00a3703800c200341c0156a41c7c3cb004107108102200241086a200341c0156a41086a290000370000200220032900c01537000041002107200341b40a6a41003a0000200341003602b00a20034188026a200341800c6a4120200341b00a6a4105410010ca040240200328028802450d002003200328028c022207410520074105491b3602c4152003200341b00a6a3602c01520034180026a200341c0156a10ab010240200328028002450d00410021070c010b20032802840221070b200341980c6a4200370300200341800c6a41106a4200370300200341800c6a41086a22064200370300200342003703800c200341b00a6a418ef9c00041101081022006200341b00a6a41086a290000370300200320032900b00a3703800c200341c0156a41a8f9c0004109108102200241086a200341c0156a41086a290000370000200220032900c01537000041002102200341b40a6a41003a0000200341003602b00a200341f8016a200341800c6a4120200341b00a6a4105410010ca04024020032802f801450d00200320032802fc012202410520024105491b3602c4152003200341b00a6a3602c015200341f0016a200341c0156a10ab01024020032802f001450d00410021020c010b20032802f40121020b02402002417f200120076a220720072001491b2201720d00200341d0086a410110f3020c020b02402012417f200120026a220220022001491b4d0d00200341d0086a410310f3020c020b0240200a4280c8afa02556200c420052200c501b0d00200341d0086a410510f3020c020b200341e0016a2012ad42004280a0cb9801420010e80820034190136a200341b00e6a10e702200341c0156a200328029013220120032802981310e902200341d8156a290300210b20032802e015210220032903d015210f20032903e001220e4280e0cdb8eb057c220d200e54ad2110200341e8016a290300212820032902e41521290240200328029413450d002001102e0b200b420020021b210e200f420020021b210f202820107c210b02402002450d00202942ffffff3f83500d002002410120021b102e0b024002400240417f200d200f85200b200e8584420052200d200f542202200b200e54200b200e511b1b41016a0e03010200010b200341c0156a200341b00e6a200d200f7d200b200e7d2002ad7d10c30220032d00c0154106460d01200341d0086a410610f3020c030b200341d0016a200341b00e6a200f200d7d200e200b7d200f200d54ad7d10fb010b20034190136a200341b00e6a10c802200341c0156a200328029013220720032802981310c902200341e0156a290300420020032903c01542015122021b2110200341d8156a2201290300420020021b2128200341d0156a290300420020021b210e20032903c815420020021b210f0240200328029413450d002007102e0b42f0d0c9abc6add9b1f400200341b00e6a427f200f20287c22282028200f542202200e20107c2002ad7c220f200e54200f200e511b22021b220e200a200e200a54427f200f20021b220e200c54200e200c511b22021b220a200e200c20021b220c411f1085062001200b370300200341e8156a2012360200200341e4156a20113602002003200d3703d0152003200c3703c8152003200a3703c015200320083602e01520034190136a200341b00e6a10e7022003280290132202200328029813200341c0156a10b9050240200328029413450d002002102e0b0240201141ffffff3f71450d002008102e0b200341063a00d0080c380b200341023a00d0080b0240201141ffffff3f71450d002008102e0b20032d00d00822024106460d3620032f00d108210120032d00d3082107200020032902d408370024200020073a0023200020013b0021200041206a20023a0000200041186a41003a000020004200370308200042013703000c580b200341c0156a41286a2001280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a2009290300370300200320032903e0103703c01520034190136a200341c0156a10c102200341800c6a41086a20034199136a290000370300200341800c6a41106a200341a1136a290000370300200341800c6a41186a200341a9136a29000037030020032003290091133703800c20032d0090134101460d0d200341b00e6a41186a200341800c6a41186a290300370300200341b00e6a41106a200341800c6a41106a290300370300200341b00e6a41086a200341800c6a41086a290300370300200320032903800c3703b00e200341c0156a200341b00e6a10e70220032802c015220120032802c815108f022102024020032802c415450d002001102e0b02402002450d00200341b00e6a10e802200341063a00b00a0c350b200341b00a6a410710f30220032d00b00a4106460d340c330b200341c0156a41286a2001280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a2009290300370300200320032903e0103703c01520034190136a200341c0156a10c10220032d0090134101460d0b20034190136a41086a280200210220034190136a410c6a280200210120034190136a41106a280200210720034190136a41146a290200210a20032d009113210620032f019213210420032802941321052003200341ac136a35020020034190136a41206a31000042208684220b3e00cb0e200341cf0e6a200b4220883c00002003200a3700c30e200320073600bf0e200320013600bb0e200320023600b70e200320053600b30e200320043b00b10e200320063a00b00e200341980c6a22024200370300200341800c6a41106a22054200370300200341800c6a41086a22014200370300200342003703800c200341b00a6a418ef9c00041101081022001200341b00a6a41086a290000370300200320032900b00a3703800c200341c0156a419ef9c000410a1081022002200341c0156a41086a290000370300200520032900c015370300200341b40a6a41003a0000200341003602b00a200341b0026a200341800c6a4120200341b00a6a4105410010ca04024020032802b002450d00200320032802b4022202410520024105491b3602c4152003200341b00a6a3602c015200341a8026a200341c0156a10ab0120032802a8020d0020032802ac0220084d0d00200341f0066a410e10f3020c300b200341a0026a200341b00e6a10eb0220032802a002450d0a20032802a4022109200341c0066a22024200370300200341a8066a41106a22014200370300200341a8066a41086a22074200370300200342003703a806200341e8056a418ef9c00041101081022007200341e8056a41086a290300370300200320032903e8053703a806200341a8046a41c7c3cb0041071081022002200341a8046a41086a290300370300200120032903a804370300200341c0156a200341a8066a10f10220032802c0152201410820011b21044100210202400240024020032902c415420020011b220a422088a722010e020201000b4100210203402001410176220620026a210720072002200420074106746a41206a200341b00e6a412010ec084101481b2102200120066b220141014b0d000b0b200420024106746a41206a200341b00e6a412010ec084521020b0240200a42ffffff1f83500d002004102e0b02402002450d00200341f0066a410a10f3020c300b200341a80a6a22024200370300200341900a6a41106a22014200370300200341900a6a41086a22074200370300200342003703900a200341b00a6a418ef9c00041101081022007200341b00a6a41086a290000370300200320032900b00a3703900a200341d0086a41a8f9c00041091081022002200341d0086a41086a290000370300200120032900d008370300200341c0156a200341900a6a10f10220032802c0152202410820021b210602400240024020032902c415420020021b220a422088a72201450d00200641206a2102200141067441406a41067641016a210741002101034002402002200341b00e6a412010ec080d000240200a42ffffff1f83500d002006102e0b200341f0066a410b10f3020c340b200241c0006a21022007200141016a2201470d000b200a42ffffff1f8350450d010c020b200a42ffffff1f83500d010b2006102e0b200341c0156a200341b00e6a4280a094a58d1d420010c302024020032d00c0154106470d00200341cf0e6a310000210a20033500cb0e210b20032900c30e210c20032800bf0e210720032800bb0e210620032800b70e210420032800b30e210820032f00b10e211120032d00b00e2112200341d0086a10ec0220032802d80822012009490d0a0240200120032802d408470d00200141016a22022001490d41200141017422132002201320024b1b22024104200241044b1bad42307e220d422088a7454103742102200da721130240024020010d00200341003602c0150c010b200341c0156a41086a4108360200200320032802d0083602c0152003200141306c3602c4150b20034190136a20132002200341c0156a107d20034198136a28020021022003280290134101460d0520032003280294133602d0082003200241306e3602d4080b20032802d008200941306c6a220241306a2002200120096b41306c10ea081a2002411f6a200b200a42208684220a4220883c00002002200a3e001b200241286a420037030020024280a094a58d1d3703202002200c3700132002200736000f2002200636000b2002200436000720022008360003200220113b0001200220123a00002003200141016a22023602d80820034190136a41086a2002360200200320032903d008220a3703901302400240200aa722020d00200341980c6a4200370300200341800c6a41106a4200370300200341800c6a41086a22024200370300200342003703800c200341b00a6a418ef9c00041101081022002200341b00a6a41086a290000370300200320032900b00a3703800c200341c0156a419ef9c000410a108102200541086a200341c0156a41086a290000370000200520032900c015370000200341800c6a412010ff010c010b200341980c6a4200370300200341800c6a41106a4200370300200341800c6a41086a22014200370300200342003703800c200341b00a6a418ef9c00041101081022001200341b00a6a41086a290000370300200320032900b00a3703800c200341c0156a419ef9c000410a108102200541086a200341c0156a41086a290000370000200520032900c015370000200341800c6a20034190136a10bd052003280294132201450d00200141306c450d002002102e0b200341063a00f0060c320b200341f0066a410c10f3020c2f0b200341c0156a41286a2001280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a2009290300370300200320032903e0103703c01520034190136a200341c0156a10c102200341f0066a41086a20034199136a290000370300200341f0066a41106a200341a1136a290000370300200341f0066a41186a200341a9136a29000037030020032003290091133703f0060240024002400240024002400240024020032d0090134101460d00200341b00e6a41186a200341f0066a41186a290300370300200341b00e6a41106a200341f0066a41106a290300370300200341b00e6a41086a200341f0066a41086a290300370300200320032903f0063703b00e20080e03020301020b41022102200341023a00a8040c060b200320113602f006200341b00e6a411f6a310000210a20032d00b00e210220032f00b10e210120032900b30e210b20032900bb0e210c20032900c30e210d20033500cb0e210e200341d0086a10ec02200341b3136a200a3c000020034190136a411f6a200e3e0000200341a7136a200d3700002003419f136a200c3700002003200b37009713200320013b009513200320023a00941320032802d80821092003200341f0066a36029013410e2108200920114b0d0220034190136a4104722104410021024110210820032802d00821050240024020090e020401000b410021022009210103402001410176220620026a2107200720022005200741306c6a2004412010ec084101481b2102200120066b220141014b0d000b0b2005200241306c6a2004412010ec080d02200920024d0d0d2005200241306c6a2201290320210a200141286a290300210b2001200141306a20092002417f736a41306c10ea081a20032009417f6a3602d808200341c8026a2004200a200b10fb01200341c0156a41086a220241043a0000200341c9156a2004290000370000200341d1156a200441086a290000370000200341d9156a200441106a290000370000200341e1156a200441186a2900003700002003410c3a00c015200341c0156a10fe0120034190136a41086a20032802d808360200200320032903d008220a370390130240200aa722010d00200341800c6a41186a22014200370300200341800c6a41106a22074200370300200341800c6a41086a22064200370300200342003703800c200341b00a6a418ef9c00041101081022006200341b00a6a41086a290000370300200320032900b00a3703800c200341c0156a419ef9c000410a10810220012002290000370300200720032900c015370300200341800c6a412010ff010c330b200341800c6a41186a22074200370300200341800c6a41106a22064200370300200341800c6a41086a22044200370300200342003703800c200341b00a6a418ef9c00041101081022004200341b00a6a41086a290000370300200320032900b00a3703800c200341c0156a419ef9c000410a10810220072002290000370300200620032900c015370300200341800c6a20034190136a10bd052003280294132202450d32200241306c450d322001102e0c320b200341c0156a200341b00e6a410010f00220032d00c0154101460d02200341c0156a41086a41043a0000200341c9156a20032903b00e370000200341d1156a200341b00e6a41086a290300370000200341d9156a200341c00e6a290300370000200341e1156a200341c80e6a2903003700002003410c3a00c015200341c0156a10fe010c310b200341b00e6a411f6a310000210a20032d00b00e210120032f00b10e210720032900b30e210b20032900bb0e210c20032900c30e210d20033500cb0e210e200341900a6a41186a22024200370300200341900a6a41106a22064200370300200341900a6a41086a22044200370300200342003703900a200341b00a6a418ef9c00041101081022004200341b00a6a41086a290000370300200320032900b00a3703900a200341d0086a41a8f9c00041091081022002200341d0086a41086a290000370300200620032900d008370300200341c0156a200341900a6a10f10220032802c015210220032902c415210f20034190136a411f6a200a3c00002003200e3e00ab132003200d3700a3132003200c37009b132003200b37009313200320073b009113200320013a0090132002410820021b210402400240200f420020021b220a422088a72205450d00200441206a2107200541067441406a41067641016a210641002102410021010340200720026a20034190136a412010ec08450d02200241c0006a21022006200141016a2201470d000b0b0240200a42ffffff1f83500d002004102e0b200341a8046a411010f3020c030b200420026a220241186a290300210b200241106a290300210c2002200241c0006a2001417f7320056a41067410ea081a200341b8026a20034190136a200c200b10fb01200341c0156a41086a220241043a0000200341c0156a41096a200329039013370000200341d1156a20034190136a41086a290300370000200341d9156a20034190136a41106a290300370000200341e1156a20034190136a41186a2903003700002003410c3a00c015200341c0156a10fe0120032004360290132003200a4280808080707c220a37029413200341800c6a41186a22014200370300200341800c6a41106a22074200370300200341800c6a41086a22064200370300200342003703800c200341b00a6a418ef9c00041101081022006200341b00a6a41086a290000370300200320032900b00a3703800c200341c0156a41a8f9c000410910810220012002290000370300200720032900c015370300200341800c6a20034190136a10f202200a42ffffff1f83500d302004102e0c300b024020032802d4082202450d00200241306c450d0020032802d008102e0b200341a8046a200810f3020c010b200341a8046a411010f3020b20032d00a80422024106460d2e0b20032f00a904210120032d00ab042107200020032902ac04370024200020073a0023200020013b0021200041206a20023a0000200041186a41003a000020004200370308200042013703000c550b200341c0156a41286a2001280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a2009290300370300200320032903e0103703c01502400240200341c0156a10a7050d004200210e410121010240200841ff01710e03022d002d0b2012450d2b2011102e0c2b0b410221014200210e200841ff01714102470d2a2012450d2a2011102e0c2a0b2003200b3e00ab13200341af136a200b4220883c000020032012360097132003201136009313200320084110763b009113200320084108763a0090132003200a3e009b132003200c3700a3132003200a4220883e009f13200341980c6a22024200370300200341800c6a41106a22014200370300200341800c6a41086a22074200370300200342003703800c200341b00a6a418ef9c00041101081022007200341b00a6a41086a290000370300200320032900b00a3703800c200341c0156a41a8f9c00041091081022002200341c0156a41086a290000370300200120032900c015370300200341b40a6a41003a0000200341003602b00a200341e0026a200341800c6a4120200341b00a6a4105410010ca040240024020032802e002450d00200320032802e4022202410520024105491b3602c4152003200341b00a6a3602c015200341d8026a200341c0156a10ab01201341ff017141004720032802d8024520032802dc0241004771730d010c2a0b201341ff0171450d290b200341c0156a411110f30220033500c11520033300c51520033100c7154210868442208684210d200341c8156a280200210220032d00c01521014201210e0c2a0b200341c0156a41286a2001280200360200200341c0156a41206a2006290300370300200341c0156a41186a2004290300370300200341c0156a41106a2005290300370300200341c0156a41086a2009290300370300200320032903e0103703c015200341c0156a10a7050d04200341b00a6a418ef9c0004110108102200341c0156a41fbafc90041061081024120102c2202450d502003422037029413200320023602901320034190136a200341b00a6a4110107420034190136a200341c0156a411010742003280298132202417f4c0d3c20032802901321010240024020020d00410121070c010b2002102c2207450d510b20072001200210e9082101200341f0066a41086a20034190136a41086a22162802002207360200200341a8046a41026a2206200341c0156a41026a2d00003a00002003200329039013220a3703f006200320032f00c0153b01a804200341940c6a2007360200200320023602880c200320023602840c200320013602800c2003200a37028c0c200341003a009c0c2003410b3602980c2003419f0c6a20062d00003a0000200320032f01a8043b009d0c200341c0156a200341800c6a10fa020240200341c0156a41c0006a2802002213450d00200341900a6a41106a2108200341c8066a41106a2109034020034190136a41386a200341c0156a41386a29030037030020034190136a41306a200341c0156a41306a29030037030020034190136a41286a200341c0156a41286a29030037030020034190136a41206a200341c0156a41206a29030037030020034190136a41186a2218200341c0156a41186a29030037030020034190136a41106a2219200341c0156a41106a2903003703002016200341c0156a41086a290300370300200320032903c0153703901320132003280288164105746a211520032802841621142013210202400240024003400240024002400240200222062015460d00200341c8066a41186a420037030020094200370300200341c8066a41086a22024200370300200342003703c806200341d0086a418ef9c00041101081022002200341d0086a41086a2211290300370300200320032903d0083703c806200341b00a6a41c7c3cb004107108102200941086a200341b00a6a41086a2212290300370300200920032903b00a370300200341b00e6a200341c8066a10f10220032802b00e2201410820011b21054100210202400240024020032902b40e420020011b220a422088a722010e020201000b4100210203402001410176220420026a210720072002200520074106746a41206a2006412010ec084101481b2102200120046b220141014b0d000b0b200520024106746a41206a2006412010ec084521020b0240200a42ffffff1f83500d002005102e0b20020d05200341900a6a41186a420037030020084200370300200341900a6a41086a22024200370300200342003703900a200341b00a6a418ef9c000411010810220022012290000370300200320032900b00a3703900a200341d0086a41a8f9c0004109108102200841086a2011290000370000200820032900d008370000200341b00e6a200341900a6a10f10220032802b00e2202410820021b210420032902b40e420020021b220a422088a72201450d01200441206a2102200141067441406a41067641016a2107410021010340024020022006412010ec080d00200a42ffffff1f83500d072004102e0c070b200241c0006a21022007200141016a2201470d000b200a42ffffff1f8350450d020c030b200341b00e6a41186a2018290300370300200341b00e6a41106a2019290300370300200341b00e6a41086a201629030037030020032003290390133703b00e200341b00e6a10e802201441ffffff3f71450d060c050b200a42ffffff1f83500d010b2004102e0b200641206a2102200341e8026a200610eb0220032802e8020d000b0b201441ffffff3f71450d010b2013102e0b200341c0156a200341800c6a10fa0220032802801622130d000b0b024020032802840c450d0020032802800c102e0b0240200341900c6a280200450d00200328028c0c102e0b200041186a41003a000020004200370308200020032800e8063600192000411c6a200341eb066a280000360000200042003703000c530b20020d4f0c3b0b2005200741b8b2c0001056000b2006200741b8b2c0001056000b20032802d008210220032802d4082101200341c8156a200341ec106a280200360200200320032902e4103703c01520022001200341c0156a41a8e9c70041b8e9c700103e000b2000420037002420004200370308200041206a41023a0000200041186a41003a0000200042013703000c4e0b200220091046000b200920011045000b200341f0066a410910f3020c240b41022102200341023a00f0060c240b200341023a00b00a0c250b410221020c270b200341c0156a410510c0060c280b410121020c320b410221010c350b200341d8006a200341b00e6a200d200c10cb02200341c0156a41186a200341d8006a41186a290300370300200320032903683703d0152003200341d8006a41086a2903003703c815200320032903583703c0152003200341c0156a3602800c200341800c6a10cc02200341d0086a41086a200341f0106a220141086a290300370300200341063a00800c200320012903003703d0084200210d41002101410121064200210c0c320b200341800c6a410110bc060c300b2000420037002420004200370308200041206a41023a0000200041186a41003a0000200042013703000c420b410221010c360b200341386a200341b00e6a200d200c10fb01200341063a00e0100c330b200341e0106a410110bc060c310b200341e0106a410110bc060c350b200341023a00b0080c390b4184b4c400412741acb4c4001039000b41b3d6c800413041e4d6c8001039000b200320032800e0103602b00e2003200341e3106a2800003600b30e200041186a41003a000020004200370308200020032802b00e3600192000411c6a20032800b30e360000200041206a41023a0000200042013703000c3a0b200341d4156a4101360200200342013702c415200341c4e2cc003602c015200341043602e4102003200341e0106a3602d0152003200341d0086a3602e010200341c0156a4198e9c7001044000b200341d4156a4101360200200342013702c415200341c4e2cc003602c015200341043602e4102003200341e0106a3602d0152003200341d0086a3602e010200341c0156a4188e9c7001044000b41fee7c70041e90041f8e8c700105d000b200341c0156a41086a200341e0106a41086a280200360200200320032903e0103703c01541fee7c70041e900200341c0156a41f4a7c70041e8e8c700103e000b200341c0156a41386a200141c0006a290300370300200341c0156a41306a200141386a290300370300200341c0156a41286a200141306a290300370300200341c0156a41206a200141286a290300370300200341c0156a41186a200141206a290300370300200341c0156a41106a200141186a290300370300200341c0156a41086a200141106a2903003703002003200141086a2903003703c01520034190136a41286a200241286a28020036020020034190136a41206a200241206a29020037030020034190136a41186a200241186a29020037030020034190136a41106a200241106a29020037030020034190136a41086a200241086a29020037030020032002290200370390132000200341c0156a20034190136a10c6060c350b200341c0156a41386a200141c0006a290300370300200341c0156a41306a200141386a290300370300200341c0156a41286a200141306a290300370300200341c0156a41206a200141286a290300370300200341c0156a41186a200141206a290300370300200341c0156a41106a200141186a290300370300200341c0156a41086a200141106a2903003703002003200141086a2903003703c01520034190136a41286a200241286a28020036020020034190136a41206a200241206a29020037030020034190136a41186a200241186a29020037030020034190136a41106a200241106a29020037030020034190136a41086a200241086a29020037030020032002290200370390132000200341c0156a20034190136a10c0020c340b200141c8006a290300210f200141c0006a29030021102001413c6a2802002117200141386a280200211a200141306a290300210d2001412c6a28020021182001412a6a2f010021152001411c6a290200210e200141186a2802002107200141146a2802002113200141106a28020021112001410c6a28020021122001410a6a2f01002114200141086a2d00002106200141246a350200210a200141286a310000210b20012d0029211920012d00092116200341800c6a41286a2201200241286a280200360200200341800c6a41206a2204200241206a290200370300200341800c6a41186a2205200241186a290200370300200341800c6a41106a2209200241106a290200370300200341800c6a41086a2208200241086a290200370300200320022902003703800c200a200b42208684210c0240024002400240024020060e050001020304000b200341c0156a41146a4101360200200342013702c4152003419cc3cb003602c015200341043602ac0420034194c3cb003602a8042003200341a8046a3602d015200341c0156a41889cc4001044000b200341c0156a41286a2001280200360200200341c0156a41206a2004290300370300200341c0156a41186a2005290300370300200341c0156a41106a2009290300370300200341c0156a41086a2008290300370300200320032903800c3703c01520034190136a200341c0156a10c102200341c8066a41086a20034199136a290000370300200341c8066a41106a200341a1136a290000370300200341c8066a41186a200341a9136a29000037030020032003290091133703c806024002400240024002400240024020032d0090134101460d00200341900a6a41186a200341c8066a41186a290300370300200341900a6a41106a200341c8066a41106a290300370300200341900a6a41086a200341c8066a41086a290300370300200320032903c8063703900a02400240024020130d00200341c0156a4104108e04200341c0156a41086a28020021020c010b201341e400490d01200341c0156a4105108e04200341c8156a28020021020b20032903c015210a2007108c042007102e0c020b200320133602e810200320113602e410200320123602e010200341c0156a41186a200341900a6a41186a290300370300200341c0156a41106a200341900a6a41106a290300370300200341c0156a41086a2201200341900a6a41086a290300370300200320032903900a3703c01520034190136a200341e0106a200341c0156a108d042003419c136a2802002102200329029413210a02402003280290134101460d00200120023602002003200aa722043602c415200341b1c5cb003602c015200341013b01cc15200341a8066a200341c0156a10900420034120360294132003200341a8066a36029013200341c0156a20034190136a1093010240024020032d00c0154101470d00200341e8086a4200370300200341e0086a4200370300200341d8086a4200370300200342003703d0080c010b200341e8086a200341d9156a290000370300200341e0086a200341d1156a290000370300200341d8086a200341c9156a290000370300200320032900c1153703d0080b200341003602c815200342013703c0152007200341c0156a10900220032802c8152105024020032802c415450d0020032802c015102e0b20034190136a200741b00210e9081a200341b00a6a41186a200341d0086a41186a290300370300200341b00a6a41106a200341d0086a41106a290300370300200341b00a6a41086a200341d0086a41086a290300370300200320032903d0083703b00a4110102c2201450d3b200141f8f7c60036020c2001410136020820014281808080103702004110102c2202450d3b20024190f8c60036020c20024101360208200242818080801037020020012001280200417f6a2206360200024020060d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22062006280200417f6a220636020020060d002001102e0b02400240200228020820034190136a200228020c28020c1101000d0020034180116a41023a0000200341f8106a41003a000020022002280200417f6a22013602004200210b200342003703e810200342013703e010024020010d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b20034190136a10dc02410121060c010b200341c0156a20034190136a41b00210e9081a200341ba0e6a200341b80a6a290300370100200341c20e6a200341c00a6a290300370100200341ca0e6a200341c80a6a290300370100200341d00e6a200341ce0a6a29010037010020034180023b01b00e200320032903b00a3701b20e200320023602d80e200341e0106a200341c0156a200341b00e6a10dd0220032903e010420151210620032903e810210b0b20034188116a280200210220034180116a290300210e200341f0106a290300210c200328028c112101024020060d00410021064200210d200ba70d044200210b0c060b410121060240200b4201510d00200341f8106a290300210d0c060b427f2005ad42e8077e42b0b182067c220b200c7c220c200c200b541b210c4200210d0c040b2007108c042007102e4200210b4200210d0c050b2007108c042007102e4202210a0b4200210b0240201141ffffff3f710d004200210d0c040b2012102e4200210d0c030b427f2005ad42e8077e42b0b182067c220b200c7c220c200c200b541b210c0b4201210b0b0240200a4280808080f0ffffff0783500d002004102e0b2007102e2006450d01200e210a0b2000200b3703082000412c6a2001360200200041286a2002360200200041206a200a370300200041186a200d370300200041106a200c370300200042013703000c370b2000200b370308200041186a200d370300200041106a200c370300200042003703000c360b200ba72102200aa7210620034190136a41286a200128020036020020034190136a41206a200429030037030020034190136a41186a200529030037030020034190136a41106a200929030037030020034190136a41086a2008290300370300200320032903800c37039013200341e0106a20034190136a10c102200341a8066a41086a200341e9106a290000370300200341a8066a41106a200341f1106a290000370300200341a8066a41186a200341f9106a290000370300200320032900e1103703a80602400240024020032d00e0104101470d0041022101200341e0156a41023a000041002107200341d8156a41003a00004200210a200342003703c815200342013703c01502402015411074201941087472200272450d002006102e0b201141ffffff3f71450d012012102e0c010b200341c8066a41186a200341a8066a41186a290300220a370300200341c8066a41106a200341a8066a41106a290300220b370300200341c8066a41086a200341a8066a41086a290300220c370300200320032903a806220f3703c806200341e0106a41186a200a370300200341e0106a41106a200b370300200341e0106a41086a200c3703002003200f3703e010200320133602b80e200320113602b40e200320123602b00e2003419c136a201836020020034190136a41086a20154110742019410874722002723602002003200636029413200320163a009113200341003a009013200341c0156a200341e0106a2014200341b00e6a2007200ea7200e422088a720034190136a200d108f0420032903c815210a20032903c0154201520d01200341e0156a2d00002101200341c0156a41186a2d000021070b200320032800d9153602e8062003200341c0156a411c6a2800003600eb06200341c0156a41106a290300210b20032f00e115210220032d00e315210620032902e415210c20032802ec152104200041186a20073a0000200041106a200b3703002000200a370308200020032802e8063600192000411c6a20032800eb063600002000412c6a2004360200200041246a200c370200200020063a0023200020023b0021200041206a20013a0000200042013703000c360b200320032800d9153602e8062003200341c0156a411c6a2800003600eb06200341c0156a41106a290300210b200041186a200341c0156a41186a2d00003a0000200041106a200b3703002000200a370308200020032802e8063600192000411c6a20032800eb06360000200042003703000c350b20034190136a41286a200128020036020020034190136a41206a200429030037030020034190136a41186a200529030037030020034190136a41106a200929030037030020034190136a41086a2008290300370300200320032903800c37039013200341e0106a20034190136a10c102200341a8066a41086a200341e9106a290000370300200341a8066a41106a200341f1106a290000370300200341a8066a41186a200341f9106a290000370300200320032900e1103703a80602400240024020032d00e0104101470d0041022102200341e0156a41023a000041002101200341d8156a41003a00004200210a200342003703c815200342013703c015200d42ffffff3f83500d012018102e0c010b200341c8066a41186a200341a8066a41186a290300220a370300200341c8066a41106a200341a8066a41106a290300220b370300200341c8066a41086a200341a8066a41086a2903002228370300200320032903a80622293703c806200341e0106a41186a200a370300200341e0106a41106a200b370300200341e0106a41086a2028370300200320293703e0102003200d3702b40e200320183602b00e20034190136a41206a200c4220883c000020034190136a411c6a200c3e0200200341a4136a200e37020020034190136a41106a20073602002003419c136a201336020020034190136a41086a20113602002003201236029413200320143b019213200320163a009113200341013a009013200341c0156a200341e0106a2015200341b00e6a201a20172010a720034190136a200f108f0420032903c815210a20032903c0154201520d01200341c0156a41206a2d00002102200341c0156a41186a2d000021010b200320032800d9153602f0062003200341c0156a411c6a2800003600f306200341c0156a41106a290300210b20032f00e115210720032d00e315210620032902e415210c20032802ec152104200041186a20013a0000200041106a200b3703002000200a370308200020032802f0063600192000411c6a20032800f3063600002000412c6a2004360200200041246a200c370200200020063a0023200020073b0021200041206a20023a0000200042013703000c350b200320032800d9153602f0062003200341c0156a411c6a2800003600f306200341c0156a41106a290300210b200041186a200341c0156a41186a2d00003a0000200041106a200b3703002000200a370308200020032802f0063600192000411c6a20032800f306360000200042003703000c340b2003200c3e008b072003418f076a200c4220883c00002003200e37008307200320073600ff06200320133600fb06200320113600f706200320123600f306200320143b00f106200320163a00f006200341c0156a41286a2001280200360200200341c0156a41206a2004290300370300200341c0156a41186a2005290300370300200341c0156a41106a2009290300370300200341c0156a41086a2008290300370300200320032903800c3703c01520034190136a200341c0156a10c102200341c8066a41086a20034199136a290000370300200341c8066a41106a200341a1136a290000370300200341c8066a41186a200341a9136a29000037030020032003290091133703c8060240024002400240024020032d0090134101460d00200341d0086a41186a200341c8066a41186a290300370300200341d0086a41106a200341c8066a41106a290300370300200341d0086a41086a200341c8066a41086a290300370300200320032903c8063703d0080240201541024f0d00200341f00b6a4101108e040c020b0240200d42ffffffff0f560d00200341f00b6a4104108e040c020b0240200d422088a741e400490d00200341f00b6a4105108e040c020b2003200d3702e410200320183602e010200341c0156a41186a200341d0086a41186a290300370300200341c0156a41106a200341d0086a41106a290300370300200341c0156a41086a2201200341d0086a41086a290300370300200320032903d0083703c01520034190136a200341e0106a200341c0156a108d042003419c136a2802002102200329029413210a024002402003280290134101460d0020012002360200200320153b01cc152003200aa722013602c415200341b1c5cb003602c015200341a8066a200341c0156a10900420034120360294132003200341a8066a36029013200341c0156a20034190136a109301200a422088210a0240024020032d00c0154101470d00200341c80a6a4200370300200341c00a6a4200370300200341b80a6a4200370300200342003703b00a0c010b200341c80a6a200341d9156a290000370300200341c00a6a200341d1156a290000370300200341b80a6a200341c9156a290000370300200320032900c1153703b00a0b200aa72102200341a8066a41186a200341f0066a41186a290000370300200341a8066a41106a200341f0066a41106a290000370300200341a8066a41086a200341f0066a41086a290000370300200320032900f0063703a806200341c8066a200341b00a6a200341a8066a109104200341c0156a20032802c806220720032802d006109204200341900a6a41086a2206200341c0156a41086a290300370300200341900a6a41106a2204200341c0156a41106a290300370300200341e0106a41086a2205200341e4156a290200370300200341e0106a41106a2209200341ec156a290200370300200341e0106a41186a2208200341f4156a290200370300200341e0106a41206a2211200341fc156a290200370300200341e0106a41286a221220034184166a280200360200200320032903c0153703900a200320032902dc153703e010024020032802d8152213450d00200341b0086a41106a2004290300370300200341b0086a41086a2006290300370300200341b00e6a41086a2005290300370300200341b00e6a41106a2009290300370300200341b00e6a41186a2008290300370300200341b00e6a41206a2011290300370300200341b00e6a41286a2012280200360200200320032903900a3703b008200320032903e0103703b00e024020032802cc06450d002007102e0b200341a8046a41166a200341b0086a41106a290300220a370100200341a8046a410e6a200341b0086a41086a290300370100200341e8056a41166a2207200a370100200341e8056a41106a200341a8046a41106a290100370300200320032903b0083701ae04200341e8056a41086a200341a8046a41086a290100370300200320032901a8043703e80520034190136a41106a2206200729010037030020034190136a41086a200341e8056a410e6a290100370300200320032901ee0537039013200320133602a813200341d4136a200341d80e6a280200360200200341cc136a200341d00e6a290300370200200341c4136a200341c80e6a290300370200200341bc136a200341b00e6a41106a290300370200200341b4136a200341b00e6a41086a290300370200200341ac136a20032903b00e37020002402006280200201a470d00200341a4136a2802002017460d030b200341f00b6a410b108e040c050b024020032802cc06450d002007102e0b200341f00b6a4108108e040c050b200341f00b6a41086a20023602002003200a3703f00b0c050b0240200341b4136a2207200341d0086a412010ec08450d00200341f00b6a4109108e040c030b20034188046a200720032903901320034190136a41086a29030010fb01200341e8056a4195fec6004108108102200341a8046a41f4f3c30041091081024120102c2207450d35200342203702e410200320073602e010200341e0106a200341b00a6a41201074200320032802e010220720032802e810220610a3013703b00e200341cc156a200720066a360200200320073602c8152003200341b00e6a41086a3602c4152003200341b00e6a3602c015200341b0086a200341c0156a107c024020032802e410450d002007102e0b4120102c2207450d35200342203702b40e200320073602b00e200341b00e6a200341f0066a41201074200341e0106a20032802b00e220720032802b80e220610d803200341cc156a200720066a360200200320073602c8152003200341f0106a3602c4152003200341e0106a3602c015200341900a6a200341c0156a107c024020032802b40e450d002007102e0b20032802b808220620032802980a22046a41206a2207417f4c0d210240024020070d00410121050c010b2007102c2205450d360b200341003602c815200320073602c415200320053602c015200341c0156a200341e8056a41101074200341c0156a200341a8046a41101074200341c0156a20032802b008220720061074200341c0156a20032802900a220620041074024020032802940a450d002006102e0b024020032802b408450d002007102e0b20032802c015220720032802c81510ff01024020032802c415450d002007102e0b200341f0066a109804200341cd156a200341d0086a41086a290300370000200341d5156a200341d0086a41106a290300370000200341dd156a200341d0086a41186a290300370000200341e5156a20032903b00a370000200341ed156a200341b00a6a41086a290300370000200341f5156a200341b00a6a41106a290300370000200341fd156a200341b00a6a41186a290300370000200341033a00c415200341143a00c015200320032903d0083700c515200341a8166a201a360200200341ac166a20173602002003419d166a200341f0066a41186a29000037000020034195166a200341f0066a41106a2900003700002003418d166a200341f0066a41086a29000037000020034185166a20032900f006370000200341c0156a10fe01200341063a00f00b024020032802ac1341ffffff3f71450d0020032802a813102e0b200241ffffff3f71450d042001102e0c040b200341023a00f00b0b200d42ffffff3f83500d022018102e0c020b20032802ac1341ffffff3f71450d0020032802a813102e0b200241ffffff3f71450d002001102e0b024020032d00f00b22024106460d0020032f00f10b210120032d00f30b2107200020032902f40b370024200020073a0023200020013b0021200041206a20023a0000200041186a41003a000020004200370308200042013703000c340b20004200370308200020032800e806360019200041186a41003a00002000411c6a200341eb066a280000360000200042003703000c330b200341c0156a200141046a41c80010e9081a20034190136a41286a200241286a28020036020020034190136a41206a200241206a29020037030020034190136a41186a200241186a29020037030020034190136a41106a200241106a29020037030020034190136a41086a200241086a29020037030020032002290200370390132000200341c0156a20034190136a10cf020c320b200341c0156a200141086a41a80210e9081a20034190136a41286a200241286a28020036020020034190136a41206a200241206a29020037030020034190136a41186a200241186a29020037030020034190136a41106a200241106a29020037030020034190136a41086a200241086a29020037030020032002290200370390132000200341c0156a20034190136a1080040c310b200141106a28020021232001410c6a2802002131200141086a280200211d200141066a2f0100210420012f01042107200241246a2d0000211c200241226a2f010021092002411a6a290100210b200241196a2d00002108200241186a2d00002111200241166a2f01002112200241156a2d00002113200241146a2d00002115200241106a28020021142002410c6a2802002116200241086a2802002118200241066a2f01002119200241056a2d0000211a200241046a2d00002101200241026a2f0100211720022d0001212220022d00002105200341f00b6a41026a2206200241276a2d00003a00002003200241256a2f00003b01f00b2002280228210202400240024002400240024002400240024002400240024002402007417f6a0e03000102000b024002400240024002400240024020050e03000102000b4100210441022107200121060240024020220e03000107000b4100210720012106410021040c060b41012107200121060c050b4101210441022106024020010e03020005020b41012106410121040c040b410221044102210620010e03000103000b410021060c010b410121060b0b200228020041016a221b41014d0d0b200341e4156a201c360200200341e2156a20093b0100200341da156a200b370100200341d9156a20083a0000200341d8156a20113a0000200341d6156a20123b0100200341d5156a20133a0000200341d4156a20153a0000200341d0156a2014360200200341cc156a2016360200200341c8156a20183602002002201b360200200320023602e815200320193b01c6152003201a3a00c515200320063a00c415200320173b01c215200320073a00c115200320043a00c015201d202341b0026c6a2107200341c0156a10a7052106024020230d004200210a201d21010c050b200341e0106a410472212120060d024200210a41002106201c2130201c2120201c2132201d210403402004280200211b20034190136a200441046a221e41ac0210e9081a200341c0156a201e41ac0210e9081a0240201b411c470d00200441b0026a21010c080b200341e0106a200341c0156a41ac0210e9081a200341b00e6a200341e0106a41ac0210e9081a200341800c6a200341b00e6a41ac0210e9081a2003201b3602e0102021200341800c6a41ac0210e9081a200341d0086a200341e0106a109704200341c0156a200341e0106a41b00210e9081a0240024002400240024020050e03000102000b4100211f4102211b2001211e0240024020220e03000105000b4100211b2001211e4100211f0c040b4101211b2001211e0c030b4101211f4102211e203221200240024020010e03000104000b4100211e203221200c020b4101211e203241807e71201c72222021324101211f0c020b4102211f203021204102211e02400240024020010e03000104000b4100211e0c010b203041807e71201c7221304101211e0b203021200b0b200228020041016a222441014d0d0c20022024360200200320023602b813200320203602b413200320093b01b2132003200b3701aa13200320083a00a913200320113a00a813200320123b01a613200320133a00a513200320153a00a413200320143602a0132003201636029c132003201836029813200320193b0196132003201a3a0095132003201e3a009413200320173b0192132003201b3a0091132003201f3a009013200341b00e6a200341c0156a20034190136a10dd020240024020032903b80e4201510d0020032903d008210c0c010b20032903d008220c20032903c00e220d200d200c561b210c0b427f200a200c7c220c200c200a541b210a024020032903b00e4201510d00200641016a2106200441b0026a22042007470d010c050b0b200441b0026a21010c080b200341f0066a41026a20062d00003a0000200320032f01f00b3b01f006024002400240024002400240024020050e03000102000b41002106410221070240024020220e03000107000b41002107410021060c060b410121070c050b410121062001210541022101024020050e03020005020b41012101410121060c040b41022106200121054102210120050e03000103000b410021010c010b410121010b0b200228020041016a220541014d0d0a200341e4156a201c360200200341e2156a20093b0100200341da156a200b370100200341c0156a41196a20083a0000200341c0156a41186a20113a0000200341d6156a20123b0100200341d5156a20133a0000200341d4156a220920153a0000200341c0156a41106a2014360200200341cc156a22082016360200200341c0156a41086a201836020020022005360200200320023602e815200320193b01c6152003201a3a00c515200320013a00c415200320173b01c215200320073a00c115200320063a00c01520034190136a200341c0156a10c102200341c8066a41086a220120034199136a290000370300200341c8066a41106a2207200341a1136a290000370300200341c8066a41186a220620034190136a41196a29000037030020032003290091133703c8060240024002400240024020032d0090134101460d00200341900a6a41186a2006290300220a370300200341900a6a41106a2007290300220b370300200341900a6a41086a2001290300220c370300200320032903c806220d3703900a2008200c3702002009200b370200200341dc156a200a370200200341b1c5cb003602c0152003200d3702c415200320043b01e4154112102c2201450d3d2003421237029413200320013602901320034190136a41b1c5cb004110107420034190136a200341c0156a41047241201074200320043b01e01020034190136a200341e0106a41021074200341a8066a200328029013220120032802981310b0010240200328029413450d002001102e0b20034120360294132003200341a8066a36029013200341c0156a20034190136a1093010240024020032d00c0154101470d00410021044200210a41002105410021094100210841002111410021124100211341002115410021144100211641002118410021190c010b200341d9156a290000210a200341d8156a2d00002104200341d7156a2d00002105200341d5156a2f00002109200341d4156a2d00002108200341d3156a2d00002111200341cf156a2800002112200341cb156a280000211320032800c715211520032f00c515211420032d00c415211620032d00c315211820032f00c11521190b4110102c2201450d3d200141f8f7c60036020c2001410136020820014281808080103702004110102c2207450d3d20074190f8c60036020c20074101360208200742818080801037020020012001280200417f6a2206360200024020060d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22062006280200417f6a220636020020060d002001102e0b200341f0066a41026a2201200341c0156a41026a2d00003a000020072007280200417f6a2206360200200320032f00c0153b01f006024020060d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22062006280200417f6a220636020020060d002007102e0b200341800c6a201d10970420034190136a201d41b00210e9081a200341b00a6a41026a20012d00003a0000200320032f01f0063b01b00a02400240200228020820034190136a200228020c28020c1101000d0020034180116a41023a0000200341f8106a41003a000020022002280200417f6a2201360200200342003703e810200342013703e010024020010d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b20034190136a10dc0220032903800c210a0c010b200341c0156a20034190136a41b00210e9081a200341ca0e6a200a370100200341c90e6a20043a0000200341c80e6a20053a0000200341c60e6a20093b0100200341c50e6a20083a0000200341c40e6a20113a0000200341b00e6a41106a2012360200200341bc0e6a2013360200200341b80e6a2015360200200341d50e6a20032f01b00a3b0000200341d70e6a200341b20a6a2d00003a0000200320143b01b60e200320163a00b50e200320183a00b40e200320193b01b20e20034180023b01b00e200320023602d80e200341e0106a200341c0156a200341b00e6a10dd02024020032903e8104201510d0020032903800c210a0c010b20032903800c220a200341e0106a41106a290300220b200b200a561b210a0b200320032800f9103602a8042003200341fc106a2800003600ab04200a42d0ceae3d7c220b200a54210620034188116a280200210220032903e0104201520d0120034180116a290300210c200320032800ab043600d308200320032802a8043602d008200320032802d0083602b008200320032800d3083600b308200c420888210a200328028c112101200ca72107410121040c020b20022002280200417f6a2201360200024020010d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b201d108b02201d102e4200210c410221070c020b200320032800ab043600d308200320032802a8043602d008410021040b427f200b20061b210b201d102e4201210c2004450d010b200320032800b3083600eb05200320032802b0083602e805200041276a200a4230883c0000200041256a200a4220883d00002000200a3e0021200041186a41003a0000200041106a200b3703002000200c370308200020032802e8053600192000411c6a20032800eb053600002000412c6a2001360200200041286a2002360000200041206a20073a0000200042013703000c3c0b200320032800b3083600eb05200320032802b0083602e805200041186a41003a0000200041106a200b37030020004201370308200020032802e8053600192000411c6a20032800eb05360000200042003703000c3b0b20034190136a41246a201c3a000020034190136a41226a20093b010020034190136a411a6a200b37010020034190136a41196a20083a000020034190136a41186a20113a000020034190136a41166a20123b010020034190136a41156a20133a000020034190136a41146a20153a000020034190136a41106a201436020020034190136a410c6a201636020020034190136a41086a2018360200200320193b0196132003201a3a009513200320013a009413200320173b019213200320223a009113200320053a00901320034190136a41256a20032f01f00b3b000020034190136a41276a20062d00003a0000200320023602b813200341e0106a410c6a2023360200200341e0106a41086a20313602002003201d3602e410200320034190136a3602e010200341c0156a200341e0106a10a40520032802b81322022002280200417f6a360200024020032802b81322022802000d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b20032802b81341046a22022002280200417f6a36020020032802b813220241046a2802000d002002102e0b200341d9156a2102200341c0156a41186a2d00002101200341c0156a41106a290300210a20032903c815210b024020032903c0154201520d00200320022800003602f0062003200241036a2800003600f306200341c0156a41206a280200210220032902e415210c20032802ec152107200041186a20013a0000200041106a200a3703002000200b370308200020032802f0063600192000411c6a20032800f3063600002000200736002c2000200c370024200041206a2002360000200042013703000c3b0b200320022800003602f0062003200241036a2800003600f306200041186a20013a0000200041106a200a3703002000200b370308200020032802f0063600192000411c6a20032800f306360000200042003703000c3a0b201c213041002106201c2124201c2132201d21044200210a03402004280200211b20034190136a200441046a221e41ac0210e9081a200341c0156a201e41ac0210e9081a201b411c460d03200341e0106a200341c0156a41ac0210e9081a200341b00e6a200341e0106a41ac0210e9081a200341800c6a200341b00e6a41ac0210e9081a2003201b3602e0102021200341800c6a41ac0210e9081a200341d0086a200341e0106a10970420034190136a200341e0106a41b00210e9081a0240024002400240024020050e03000102000b410021204102211b2001211e0240024020220e03000105000b4100211b2001211e410021200c040b4101211b2001211e0c030b410121204102211e203221240240024020010e03000104000b4100211e203221240c020b4101211e203241807e71201c7222242132410121200c020b41022120203021244102211e02400240024020010e03000104000b4100211e0c010b203041807e71201c7221304101211e0b203021240b0b200228020041016a221f41014d0d092002201f36020002400240200228020820034190136a200228020c28020c1101000d0020022002280200417f6a221b360200200341023a00d00e200341003a00c80e200342003703b80e200342013703b00e0240201b0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a221b201b280200417f6a221b360200201b0d002002102e0b20034190136a10dc0220032903d008210c0c010b200341c0156a20034190136a41b00210e9081a200320023602d80a200320243602d40a200320093b01d20a2003200b3701ca0a200320083a00c90a200320113a00c80a200320123b01c60a200320133a00c50a200320153a00c40a200320143602c00a200320163602bc0a200320183602b80a200320193b01b60a2003201a3a00b50a2003201e3a00b40a200320173b01b20a2003201b3a00b10a200320203a00b00a200341b00e6a200341c0156a200341b00a6a10dd02024020032903b80e4201510d0020032903d008210c0c010b20032903d008220c20032903c00e220d200d200c561b210c0b427f200a200c7c220c200c200a541b210a20032903b00e4201510d05200641016a2106200441b0026a22042007470d000b0b200721010b200341c0156a20034190136a41ac0210e9081a0c010b200441b0026a21010b024020072001460d0003402001108b022007200141b0026a2201470d000b0b02402031450d00203141b0026c450d00201d102e0b200341c8156a41063a0000200341113a00c015200341c0156a10fe0120022002280200417f6a22013602002023ad4288b0fa007e200a7c42c8b8fa067c210a20010d032002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a22013602002001450d020c030b200441b0026a21010b20034190136a41206a200341d80e6a290300220b37030020034190136a41186a200341b00e6a41206a290300220c37030020034190136a41106a200341b00e6a41186a29030037030020034190136a41086a200341b00e6a41106a290300370300200320032903b80e37039013200341c0156a41086a200c370300200341c0156a41106a200b3e0200200341113a00c015200320063602c415200641016aad4288b0fa007e210b200341c0156a10fe01024020072001460d0003402001108b022007200141b0026a2201470d000b0b200b200a7c210a02402031450d00203141b0026c450d00201d102e0b200a42c8b8fa067c210a20022002280200417f6a220136020020010d012002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d010b2002102e0b200320032800eb063600eb05200320032802e8063602e805200041186a41003a0000200041106a200a37030020004201370308200020032802e8053600192000411c6a20032800eb05360000200042003703000c310b00000b200341e8056a41026a22062001410f6a2d00003a0000200341800c6a41086a2204200141206a290200370300200341800c6a41106a2205200141286a290200370300200320012f000d3b01e8052003200141186a2902003703800c200141c8006a290300210d200141c0006a290300210e2002411a6a290100210c200241196a2d00002113200241186a2d00002115200241166a2f01002114200241156a2d00002116200241146a2d00002118200241126a2f01002119200241116a2d0000211a200241106a2d000021172002410e6a2f0100211b2002410d6a2d0000211c2002410c6a2d0000211d2002410a6a2f0100211e200241096a2d0000211f200241086a2d00002120200241066a2f01002121200241056a2d00002122200241046a2d00002123200241026a2f01002124200141d0006a2802002131200141146a2802002108200141106a28020021112001410c6a2d00002109200141386a290300210b200141306a290300210a2002280228210720022d0001211220022d0000210202400240024002400240200141086a2802000e050001020304000b200341c0156a41146a4101360200200342013702c4152003419cc3cb003602c015200341043602e410200341a4a7c7003602e0102003200341e0106a3602d015200341c0156a41aca7c7001044000b20072007280200417f6a220136020002400240024002400240200241ff01710d00024020010d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b201241ff01714101460d02200341c8066a41186a200341a8066a41186a290300370300200341c8066a41106a200341a8066a41106a290300370300200341c8066a41086a200341a8066a41086a290300370300200320032903a8063703c8060c010b024020010d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b200341c8066a41186a200341a8066a41186a290300370300200341c8066a41106a200341a8066a41106a290300370300200341c8066a41086a200341a8066a41086a290300370300200320032903a8063703c8060b200341023a0090130c010b2003201f3a00af06200320203a00ae06200320213b01ac06200320223a00ab06200320233a00aa06200320243b01a8062003201a3a00b706200320173a00b6062003201b3b01b4062003201c3a00b3062003201d3a00b2062003201e3b01b006200320133a00bf06200320153a00be06200320143b01bc06200320163a00bb06200320183a00ba06200320193b01b8062003200c3703c006200341c8066a41186a2202200c370300200341c8066a41106a220120032903b806370300200341c8066a41086a220720032903b006370300200320032903a8063703c806200341900a6a41186a22062002290300370300200341900a6a41106a22022001290300370300200341900a6a41086a22012007290300370300200320032903c8063703900a200341c0156a41186a2006290300370300200341c0156a41106a2002290300370300200341c0156a41086a2001290300370300200320032903900a3703c01520034190136a200341c0156a10b30320032d0090134106460d010b20032802901321022000200329029413370024200041206a2002360000200041186a41003a000020004200370308200042013703000c330b20004200370308200020032800e806360019200041186a41003a00002000411c6a200341eb066a280000360000200042003703000c320b200341a8046a41026a20062d00003a0000200341e0106a41086a2004290300370300200341e0106a41106a200529030037030020072007280200417f6a2201360200200320032f01e8053b01a804200320032903800c3703e0100240024002400240024002400240200241ff01710d00024020010d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b41012102201241ff01714101470d01200341d0086a41026a2201200341a8046a41026a2d00003a000020034190136a41086a2207200341e0106a41086a29030037030020034190136a41106a200341e0106a41106a290300370300200320032f01a8043b01d008200320032903e0103703901320090e03020403040b20010d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b41022102200341023a00b00a20094102470d0302402008450d002011102e0b410221020c030b200341f0066a41026a20012d00003a0000200341b00e6a41086a2007290300370300200341b00e6a410d6a20034190136a410d6a290000370000200320032f01d0083b01f00620032003290390133703b00e410021020c010b2008450d002011102e0b200341bb066a200341b00e6a41086a290300370000200341a8066a41186a2201200341bd0e6a290000370000200320032f01f0063b01a806200320083600af06200320113600ab06200320032903b00e3700b3062003200341f0066a41026a2d00003a00aa0602402002450d0041012102200341013a00b00a0c010b200341c0156a41186a2001290300370300200341c0156a41106a200341a8066a41106a290300370300200341c0156a41086a200341a8066a41086a290300370300200320032903a8063703c015200341b00a6a200341c0156a10b30320032d00b00a22024106460d010b20032f00b10a210120032d00b30a2107200020032902b40a370024200020073a0023200020013b0021200041206a20023a0000200041186a41003a000020004200370308200042013703000c320b20004200370308200020032800e806360019200041186a41003a00002000411c6a200341eb066a280000360000200042003703000c310b200341a8046a41026a20062d00003a0000200341b00e6a41086a2004290300370300200341b00e6a41106a2005290300370300200320032f01e8053b01a804200320032903800c3703b00e20072007280200417f6a220136020002400240024002400240024002400240200241ff01710d00024020010d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b201241ff01714101470d022003201f3a00cf06200320203a00ce06200320213b01cc06200320223a00cb06200320233a00ca06200320243b01c8062003201a3a00d706200320173a00d6062003201b3b01d4062003201c3a00d3062003201d3a00d2062003201e3b01d006200320133a00df06200320153a00de06200320143b01dc06200320163a00db06200320183a00da06200320193b01d8062003200c3703e006200341900a6a41186a2202200c370300200341900a6a41106a220120032903d806370300200341900a6a41086a220720032903d006370300200320032903c8063703900a200341e0106a41186a2002290300370300200341e0106a41106a2001290300370300200341e0106a41086a2007290300370300200320032903900a3703e010200a4280a094a58d1d544100200b501b450d01410321020c040b024020010d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b200341900a6a41186a200341c8066a41186a290300370300200341900a6a41106a200341c8066a41106a290300370300200341900a6a41086a200341c8066a41086a290300370300200320032903c8063703900a0c020b200341d0086a41026a2201200341a8046a41026a2d00003a0000200341c0156a41086a200341b00e6a41086a290300370300200341c0156a41106a200341b00e6a41106a290300370300200320032f01a8043b01d008200320032903b00e3703c0154101210202400240024020090e03000201020b200341f0066a41026a20012d00003a0000200341b00a6a41086a200341c0156a41086a290300370300200341b00a6a410d6a200341c0156a410d6a290000370000200320032f01d0083b01f006200320032903c0153703b00a410021020c010b2008450d002011102e0b200341bb066a200341b00a6a41086a290300370000200341a8066a41186a2201200341bd0a6a290000370000200320032f01f0063b01a806200320083600af06200320113600ab06200320032903b00a3700b3062003200341f0066a41026a2d00003a00aa060240024020020d0020034190136a41186a200129030037030020034190136a41106a200341a8066a41106a29030037030020034190136a41086a200341a8066a41086a290300370300200320032903a80637039013200341c0156a20034190136a10b10320032802c015220120032802c815108f022102024020032802c415450d002001102e0b2002450d014194a4c700ad210a4280808080f002210b4101210741192106410321020c050b4200210a410121024200210b0c050b200341c0156a200341e0106a20034190136a200a200b410110ca02024020032d00c01522024106470d00200341c0156a20034190136a10b10320032802c015220120032802c815108f022102024020032802c415450d002001102e0b2002450d06200341c8156a411736020020034194a4c7003602c415200341013a00c21520034183323b01c01541bca7c7004137200341c0156a41f4a7c7004184a8c700103e000b20032d00c315210120032d00c215210720032d00c115210620032902c415220a42808080807083210b0c040b200341900a6a41186a200341c8066a41186a290300370300200341900a6a41106a200341c8066a41106a290300370300200341900a6a41086a200341c8066a41086a290300370300200320032903c8063703900a0b410221020b4102210741ceeac700ad210a42808080809001210b4119210620094102470d002008450d002011102e41ceeac700ad210a0b0b200020013a0023200020073a0022200020063a0021200041206a20023a0000200041186a41003a0000200042003703082000200b42808080807083200a42ffffffff0f8384370024200042013703000c310b200341c0156a41186a2202200d3703002003200e3703d0152003200a3703c015200320313602e0152003200b3703c81520034190136a200341c0156a10b203200220034190136a41186a290300370300200341c0156a41106a20034190136a41106a290300370300200341c0156a41086a20034190136a41086a29030037030020032003290390133703c015200341b00a6a200341c0156a10b303200041186a41003a000020004200370308200020032800e8063600192000411c6a200341eb066a280000360000200042003703000c300b200141f0006a2903002110200141e8006a2903002128200141e0006a290300210c200141d8006a290300210f200141f8006a2802002114200ba72113200aa72101200a422088a72115200341a8046a41026a20062d00003a0000200341b00e6a41086a2004290300370300200341b00e6a41106a200529030037030020072007280200417f6a2206360200200320032f01e8053b01a804200320032903800c3703b00e0240024002400240024002400240200241ff01710d00024020060d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b41022102201241ff01710d0141032102200f4280a094a58d1d544100200c501b0d01200b422088a721062001410876210241012107200141ff01710e03020403040b4102210220060d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22062006280200417f6a220636020020060d002007102e0b200141ff01714102470d032013450d032015102e0c030b410021070c010b02402013450d002015102e0b0b200341df066a200d3700002003200e3700d706200320313a00e706200320063600d306200320133600cf06200320153600cb06200320023b01c806200320024110763a00ca06024020070d00200341e0106a41186a200341c8066a41186a290300370300200341e0106a41106a200341c8066a41106a290300370300200341e0106a41086a200341c8066a41086a290300370300200320032903c8063703e010200341d0086a41026a2201200341a8046a41026a2d00003a0000200320032f01a8043b01d008200341c0156a41086a2207200341b00e6a41086a290300370300200341c0156a41106a200341b00e6a41106a290300370300200320032903b00e3703c0154101210202400240024020090e03000201020b200341f0066a41026a20012d00003a0000200341b00a6a41086a2007290300370300200341b00a6a410d6a200341c0156a410d6a290000370000200320032f01d0083b01f006200320032903c0153703b00a410021020c010b2008450d002011102e0b200341bb066a200341b00a6a41086a290300370000200341a8066a41186a200341bd0a6a290000370000200320032f01f0063b01a806200320083600af06200320113600ab06200320032903b00a3700b3062003200341f0066a41026a2d00003a00aa060240024020020d0020034190136a41186a200341a8066a41186a29030037030020034190136a41106a200341a8066a41106a29030037030020034190136a41086a200341a8066a41086a290300370300200320032903a80637039013200341c0156a200341e0106a10b10320032802c015220120032802c815108f022102024020032802c415450d002001102e0b2002450d014194a4c700ad210a4280808080f002210b4101210141192107410321020c040b4200210a410121024200210b0c030b200341c0156a20034190136a200341e0106a200f200c410110ca020240024020032d00c01522024106470d00200341c0156a200341e0106a10b10320032802c015220120032802c815108f022102024020032802c415450d002001102e0b2002450d01200341c8156a411736020020034194a4c7003602c415200341013a00c21520034183323b01c01541bca7c7004137200341c0156a41f4a7c7004194a8c700103e000b20032d00c315210620032d00c215210120032d00c115210720032902c415220a42808080807083210b0c030b200341c0156a41186a22022010370300200320283703d0152003200f3703c015200320143602e0152003200c3703c815200341e0106a200341c0156a10b2032002200341e0106a41186a290300370300200341c0156a41106a200341e0106a41106a290300370300200341c0156a41086a200341e0106a41086a290300370300200320032903e0103703c015200341b00a6a200341c0156a10b303200041186a41003a000020004200370308200020032800e8063600192000411c6a200341eb066a280000360000200042003703000c320b410121020b4102210141ceeac700ad210a42808080809001210b41192107024020094102470d002008450d002011102e41ceeac700ad210a0b0b200020063a0023200020013a0022200020073a0021200041206a20023a0000200041186a41003a0000200042003703082000200b42808080807083200a42ffffffff0f8384370024200042013703000c2f0b200341a4066a41026a22192001410b6a2d00003a00002003419c066a41046a221a2001411c6a2d00003a0000200320012f00093b01a4062003200141186a28000036029c06200141286a290300210a200141206a290300210c200141086a2d000021042001410c6a2800002111200141106a2800002105200141146a2800002118200141306a290300210b200141386a290300210d200141c0006a290300210e200141c8006a2d0000211b20012d001d211720012f011e211e200341f00b6a41086a221f200141da006a2f00003b0100200341900a6a41086a2221200141e8006a2802003602002003200141cc006a280000360097062003200128004936029406200320012900523703f00b2003200141e0006a2903003703900a200141d0006a2d0000211c200141dc006a2802002120200141ec006a2802002122200141f0006a2802002123200141f4006a280200212420012d0051211d2003200241166a2901003703b00a20032002411c6a2901003701b60a200241246a2802002112200241156a2d00002113200241146a2d00002115200241106a28020021072002410c6a2802002108200241086a2802002109200241046a2802002106200241026a2f010021142002280228210120022d0001211620022d0000210202400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020040e06000102030405000b200341c0156a41146a4101360200200342013702c4152003419cc3cb003602c015200341043602ac0420034194c3cb003602a8042003200341a8046a3602d015200341c0156a41e0f3c0001044000b200341ff106a200a3c0000200341f3106a201a2d00003a00002003200c3700f710200320192d00003a00e210200320032f01a4063b01e010200320183600eb10200320053600e710200320113600e3102003200328029c063600ef102003201e3b00f510200320173a00f4102003200a4238883c00c6152003200a4228883d01c4152003200a4208883e02c0152003201b3a00df152003200e3700d7152003200d3700cf152003200b3700c715200341e3156a2003280097063600002003201d3a00e8152003201c3a00e71520032003280294063602e015200341f1156a201f2f01003b0000200320203600f315200320032903f00b3700e915200341ff156a20212f01003b0000200320032903900a3700f71520034190136a41156a20133a000020034190136a41146a20153a000020034190136a41106a200736020020034190136a410c6a200836020020034190136a41086a200936020020034190136a41246a20123602002003200636029413200320143b019213200320163a009113200320023a00901320034190136a41166a20032903b00a37010020034190136a411c6a20032901b60a370100200320013602b81320034190136a10bb060d04200341f0066a200341e0106a10e00220034190136a200341c0156a20032802f006220220032802f80641d4e2cc00410010e10220032d0090134101470d0520032003280095133600b30820032003280192133602b008200320032800b3083600eb05200320032802b0083602e805200320032d0091133a00800c200320032802e8053600810c200320032800eb053600840c20034199136a2d00002101200341a1136a28000021072003419a136a350100210a2003419e136a330100210b2003418f0c6a200341a0136a3100003c00002003418d0c6a200b3d00002003200a3e00890c200320073602900c200320013a00880c20034190136a200341800c6a10ab03200328029013220720032802981310e40241ff017121010240200328029413450d002007102e0b024020014102460d00200341a8046a410510b0030c140b200341b00e6a41106a200341800c6a41106a280200360200200341b00e6a41086a200341800c6a41086a290300370300200320032903800c3703b00e20034190136a41186a200341e0106a41186a29030037030020034190136a41106a200341e0106a41106a29030037030020034190136a41086a200341e0106a41086a290300370300200320032903e01037039013200341d0086a200341b00e6a20034190136a10ac03024020032d00d00822014106470d00024020032802f406450d002002102e0b200341063a00a8040c160b20032d00d108210720032d00d208210620032d00d3082104200320032902d4083702ac04200320043a00ab04200320063a00aa04200320073a00a904200320013a00a8040c130b200341800c6a41026a20192d00003a0000200341b00e6a41046a201a2d00003a0000200320032f01a4063b01800c2003200328029c063602b00e20032003280294063602c80620032003280097063600cb06200341b0086a41086a201f2f01003b0100200320032903f00b3703b008200341c0156a41156a20133a0000200341c0156a41146a20153a0000200341c0156a41106a2007360200200341c0156a410c6a2008360200200341c0156a41086a2009360200200341c0156a41246a2012360200200320063602c415200320143b01c215200320163a00c115200320023a00c015200341c0156a41166a20032903b00a370100200341c0156a411c6a20032901b60a370100200320013602e815200341c0156a10a7050d05200341c0066a22024200370300200341a8066a41106a22014200370300200341a8066a41086a22074200370300200342003703a806200341e8056a41b6d1cc0041061081022007200341e8056a41086a2204290300370300200320032903e8053703a806200341a8046a41e9f9c00041051081022002200341a8046a41086a2209290300370300200120032903a804370300200341d8036a200341a8066a412010f802200341d8036a41106a290300210f20032903e003211020032802d8032106200242003703002001420037030020074200370300200342003703a806200341e8056a41b6d1cc00410610810220072004290300370300200320032903e8053703a806200341a8046a41e9f9c000410510810220022009290300370300200120032903a80437030020032010420020061b2210200c7c22283703c0152003200f420020061b200a7c2028201054ad7c3703c815200341a8066a4120200341c0156a411010b201200341d3156a200341b40e6a2d00003a00002003200341820c6a2d00003a00c215200320032f01800c3b01c015200320183600cb15200320053600c715200320113600c315200320032802b00e3600cf15200341e8056a41b6d1cc004106108102200341a8046a41b6d1cc0041061081024114102c2202450d402003421437029413200320023602901320034190136a200341c0156a411410742003280298132202417f4c0d2c20032802901321010240024020020d00410121070c010b2002102c2207450d410b20072001200210e90821070240200328029413450d002001102e0b200241206a2201417f4c0d2c2001102c2206450d4020034100360298132003200136029413200320063602901320034190136a200341e8056a4110107420034190136a200341a8046a4110107420034190136a20072002107402402002450d002007102e0b200328029013210220032802981321012003200a3703c8152003200c3703c01520022001200341c0156a411010b2010240200328029413450d002002102e0b0240200b4201520d00200341c0156a41146a20032800cb06360000200341e2156a200341b8086a2f01003b01002003201b3a00d0152003200e3703c8152003200d3703c015200320032802c8063600d1152003201d3a00d9152003201c3a00d815200320032903b0083701da15200320203602e4152003200341820c6a2d00003a009213200320032f01800c3b0190132003201836009b1320032005360097132003201136009313200341a3136a200341b40e6a2d00003a0000200320032802b00e36009f13200341e8056a41b6d1cc004106108102200341a8046a41bcdbc80041071081024114102c2202450d41200342143702e410200320023602e010200341e0106a20034190136a4114107420032802e8102202417f4c0d2d20032802e01021010240024020020d00410121070c010b2002102c2207450d420b20072001200210e9082107024020032802e410450d002001102e0b200241206a2201417f4c0d2d2001102c2206450d41200341003602e810200320013602e410200320063602e010200341e0106a200341e8056a41101074200341e0106a200341a8046a41101074200341e0106a20072002107402402002450d002007102e0b20032802e010220220032802e810200341c0156a10ba0520032802e410450d002002102e0b0240201741ff017122024102460d00200341d3156a200341b40e6a2d00003a0000200320032f01800c3b01c015200320183600cb15200320053600c715200320113600c315200320032802b00e3600cf152003200341800c6a41026a2d00003a00c21520034190136a200341c0156a10e30220032802901321012003280298132107200341003602c815200342013703c0150240024020024101460d00200341003a00a804200341c0156a200341a8046a410110740c010b200341013a00a804200341c0156a200341a8046a410110740b2001200720032802c015220220032802c81510b201024020032802c415450d002002102e0b200328029413450d002001102e0b200041186a41003a000020004200370308200020032800e8063600192000411c6a200341eb066a280000360000200042003703000c430b200341ff106a200a3c0000200341f3106a201a2d00003a00002003200c3700f710200320192d00003a00e210200320032f01a4063b01e010200320183600eb10200320053600e710200320113600e3102003200328029c063600ef102003201e3b00f510200320173a00f4102003200a4238883c00c6152003200a4228883d01c4152003200a4208883e02c0152003201b3a00df152003200e3700d7152003200d3700cf152003200b3700c715200341e3156a2003280097063600002003201d3a00e8152003201c3a00e71520032003280294063602e015200341f1156a201f2f01003b0000200320203600f315200320032903f00b3700e915200341ff156a20212f01003b0000200320032903900a3700f71520034190136a41156a20133a000020034190136a41146a20153a000020034190136a41106a200736020020034190136a410c6a200836020020034190136a41086a200936020020034190136a41246a20123602002003200636029413200320143b019213200320163a009113200320023a00901320034190136a41166a20032903b00a37010020034190136a411c6a20032901b60a370100200320013602b81320034190136a10bb060d05200341d0086a200341e0106a10e00220034190136a200341c0156a20032802d008220220032802d8082022202410e10220032d0090134101470d0620032003280095133600b30820032003280192133602b008200320032800b3083600eb05200320032802b0083602e805200320032802e8053602a804200320032800eb053600ab0420034199136a2d00002107200341a1136a28000021062003419a136a350100210a2003419e136a330100210b20032d00911321042003419f136a200341a0136a310000220c3c00002003419d136a200b3d0000200320043a0090132003200a3e009913200320063602a013200320073a009813200320032802a80436009113200320032800ab0436009413200341b00e6a20034190136a10e30220032802b00e220520032802b80e10e40241ff01712101024020032802b40e450d002005102e0b024020014102460d00024041c40141c70120011b2024470d0041abcecc0041efcfcc0020011b2022202410ec08450d010b200341f0066a410510b0030c0f0b2003200a200b200c4210868442208684220a3e00b90e200341bf0e6a200a4230883c0000200341bd0e6a200a4220883d0000200320043a00b00e200320032802a8043600b10e200320032800ab043600b40e200320063602c00e200320073a00b80e20034190136a41186a200341e0106a41186a29030037030020034190136a41106a200341e0106a41106a29030037030020034190136a41086a200341e0106a41086a290300370300200320032903e01037039013200341800c6a200341b00e6a20034190136a10ac03024020032d00800c22014106470d00024020032802d408450d002002102e0b200341063a00f0062023450d112022102e0c110b20032d00810c210720032d00820c210620032d00830c2104200320032902840c3702f406200320043a00f306200320063a00f206200320073a00f106200320013a00f0060c0e0b200341c0156a41156a20133a0000200341c0156a41146a20153a0000200341c0156a41106a2007360200200341c0156a410c6a2008360200200341c0156a41086a2009360200200341c0156a41166a20032903b00a370100200341c0156a411c6a20032901b60a370100200341c0156a41246a2012360200200320063602c415200320143b01c215200320163a00c115200320023a00c015200320013602e81520034190136a200341c0156a10c102200341a8066a41086a20034190136a41096a290000370300200341a8066a41106a20034190136a41116a290000370300200341a8066a41186a200341a9136a29000037030020032003290091133703a80620032d0090134101460d06200341e0106a41186a200341a8066a41186a290300370300200341e0106a41106a200341a8066a41106a290300370300200341e0106a41086a200341a8066a41086a290300370300200320032903a8063703e01020034190136a200341e0106a108103200341c0156a2003280290132202200328029813108203200320032801c2153602b008200320032800c5153600b3080240024020032d00c0154101470d00200341ca156a350100200341ce156a330100200341c0156a41106a3100004210868442208684210a200341c0156a41116a2800002101200341c0156a41096a2d0000210720032d00c1152106200320032800b3083600eb05200320032802b0083602e8050240200328029413450d002002102e0b200320032800eb053600ab04200320032802e8053602a804200320032802a8043602d008200320032800ab043600d3082003200a3e00c915200341cf156a200a4230883c0000200341cd156a200a4220883d0000200320063a00c015200320032802d0083600c115200320032800d3083600c415200320013602d015200320073a00c81520034190136a200341c0156a10e302200328029013220420032802981310e40241ff017121020240200328029413450d002004102e0b20024102460d01024041c40141c70120021b2018470d0041abcecc0041efcfcc0020021b2011201810ec08450d020b200341800c6a410510b0030c0d0b0240200328029413450d002002102e0b200341800c6a410310b0030c0c0b2003200a3e0099132003419f136a200a4230883c00002003419d136a200a4220883d0000200320063a009013200320032802d00836009113200320032800d30836009413200320013602a013200320073a009813200341c0156a41186a200341e0106a41186a290300370300200341c0156a41106a200341e0106a41106a290300370300200341c0156a41086a200341e0106a41086a290300370300200320032903e0103703c015200341b00e6a20034190136a200341c0156a10ac03024020032d00b00e22024106470d00200341c0156a200341e0106a10810320032802c015220220032802c81510ff01024020032802c415450d002002102e0b200341063a00800c2005450d0d2011102e0c0d0b20032d00b10e210120032d00b20e210720032d00b30e2106200320032902b40e3702840c200320063a00830c200320073a00820c200320013a00810c200320023a00800c0c0b0b200341930c6a201a2d00003a0000200320192d00003a00820c200320032f01a4063b01800c2003201836008b0c200320053600870c200320113600830c2003200328029c0636008f0c200341b00e6a410b6a200a3700002003200c3700b30e2003201e3b00b10e200320173a00b00e2003200b3c00c30e2003200b4230883d01cc062003200b4210883e02c8062003201b3a00de062003200e3701d6062003200d3701ce06200341e2066a2003280097063600002003201d3a00e7062003201c3a00e60620032003280294063600df06200320032901b60a3701c615200320032903b00a3703c0150240200241ff017122044101470d0020012001280200417f6a220236020020032f01cc15210420032902c415210a20032d00c315210520032d00c215211120032f01c0152118024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b200641ff01710d072009410274200841036c490d070c090b20044103460d0820032801ca15210520032f01c815211120032903c015210c0c070b200341023a00a8040c0f0b200341a8046a410110b0030c0d0b20004200370024200041206a41023a0000200041186a41003a000020004200370308200042013703000c3d0b200341023a00f0060c090b200341f0066a410110b0030c070b200341023a00800c0c040b200320043b01cc15200320053a00c315200320113a00c215200320183b01c0152003200a3702c41520032801ca15210520032903c015210c4110102c2204450d36200441f8f7c60036020c410121022004410136020820044281808080103702004110102c2201450d36200a422088a7211120014190f8c60036020c20014101360208200142818080801037020020042004280200417f6a221836020020180d002004280208200428020c2802001103000240200428020c280204450d002004280208102e0b200441046a22182018280200417f6a221836020020180d002004102e0b200341e4156a2012360200200341c0156a41206a2005360200200341de156a20113b0100200341d6156a200c370100200341d5156a20133a0000200341d4156a20153a0000200341d2156a20074110763b0100200341d1156a20074108763a0000200341c0156a41106a20073a0000200341cc156a2008360200200341c0156a41086a2009360200200320013602e815200320063602c415200320143b01c215200320163a00c115200320023a00c015200341c0156a10a7050d010b200341c0156a200341800c6a10e202200341f0036a20032802c015220220032802c815220110f80220034180046a290300210c20032903f803210d024020032903f003220a4201520d002002200110ff010b200aa72101024020032802c415450d002002102e0b02402001450d0020034190136a200341b00e6a10e202200328029813210120032802901321022003200c3703c8152003200d3703c01520022001200341c0156a411010b201200328029413450d002002102e0b20034190136a200341800c6a10ad03200341c0156a2003280290132202200328029813220710ae03024020032903c01542015222010d002002200710ff010b200320032800d9153602f0062003200341dc156a2800003600f3060240024020010d00200341e0156a2d00002101200341d8156a2d00002107200341d0156a290300210a20032802ec15210620032902e415210c20032d00e315210420032d00e215210520032d00e115210920032903c815210d200320032800f3063600eb06200320032802f0063602e8060240200328029413450d002002102e0b200341d4156a20032800eb06360000200320073a00d0152003200a3703c8152003200d3703c015200320032802e8063600d115200320063602e4152003200c3702dc15200320043a00db15200320053a00da15200320093a00d915200320013a00d81520034190136a200341b00e6a10ad032003280290132202200328029813200341c0156a10ba05200328029413450d012002102e0c010b200328029413450d002002102e0b200341c0156a200341800c6a10ab03024020032802c015220120032802c815220710e40241ff017122024102460d002001200710ff010b024020032802c415450d002001102e0b024020024102460d0020034190136a200341b00e6a10ab0320032802981321072003280290132101200341003602c815200342013703c0150240024020024101460d00200341003a00a804200341c0156a200341a8046a410110740c010b200341013a00a804200341c0156a200341a8046a410110740b2001200720032802c015220220032802c81510b201024020032802c415450d002002102e0b200328029413450d002001102e0b200341a8066a41186a2202200341c8066a41186a290300370300200341a8066a41106a2201200341c8066a41106a290300370300200341a8066a41086a2207200341c8066a41086a290300370300200320032903c8063703a8060240200b4280fe0383428002520d00200341c0156a41186a2002290300370300200341c0156a41106a2001290300370300200341c0156a41086a2007290300370300200320032903a8063703c015200341f0066a200341c0156a10810320034190136a20032802f006220220032802f80622011082030240024020032d0090134101460d00200341003a00e0100c010b200341e0106a41136a20034190136a41136a2f00003b0000200341e0106a410b6a20034190136a410b6a290000370000200341e0106a41096a20034190136a41096a2f00003b000020032003290091133700e110200341013a00e010200341e0106a4101722207200341800c6a411410ec080d00200720032903b00e370000200741086a200341b00e6a41086a290300370000200741106a200341b00e6a41106a280200360000200341013a00e0100b20034190136a410d6a200341e0106a410d6a29000037000020034190136a41086a200341e0106a41086a290300370300200320032903e010220a3703901302400240200aa741ff01714101460d002002200110ff010c010b4114102c2207450d36200342143702d408200320073602d008200341d0086a20034190136a410172411410742002200120032802d008220720032802d80810b20120032802d408450d002007102e0b20032802f406450d002002102e0b200320032802e8053602b008200320032800eb053600b308200041186a41013a000020004200370308200020032802b0083600192000411c6a20032800b308360000200042003703000c370b200320032802e8053602b008200320032800eb053600b308200041186a41003a000020004200370308200020032802b0083600192000411c6a20032800b308360000200041206a41023a0000200042013703000c360b02402005450d002011102e0b20032d00800c22024106460d0020032f00810c210120032d00830c2107200020032902840c370024200020073a0023200020013b0021200041206a20023a0000200041186a41003a000020004200370308200042013703000c350b20004200370308200020032800e806360019200041186a41003a00002000411c6a200341eb066a280000360000200042003703000c340b20032802d408450d002002102e0b02402023450d002022102e0b20032d00f00622024106460d0020032f00f106210120032d00f3062107200020032902f406370024200020073a0023200020013b0021200041206a20023a0000200041186a41003a000020004200370308200042013703000c320b20004200370308200020032800e806360019200041186a41003a00002000411c6a200341eb066a280000360000200042003703000c310b024020032802f406450d002002102e0b20032d00a8044106460d010b20032802a8042102200020032902ac04370024200041206a2002360000200041186a41003a000020004200370308200042013703000c2f0b20004200370308200020032800e806360019200041186a41003a00002000411c6a200341eb066a280000360000200042003703000c2e0b200341d0086a41086a2222200141206a290300370300200341d0086a41106a2223200141286a2903003703002003200141186a2903003703d008200241246a2801002120200241226a2f010021212002411a6a290100210a200241196a2d00002115200241186a2d00002114200241166a2f01002116200241156a2d00002118200241146a2d00002119200241126a2f0100211a200241116a2d00002117200241106a2d0000211b2002410e6a2f010021052002410d6a2d000021092002410c6a2d000021082002410a6a2f01002111200241096a2d00002112200241086a2d00002113200241066a2f0100211c200241056a2d0000211d200241046a2d0000210441022124200241026a2f0100211e2001410c6a28020021062002280228210720022d0001211f20022d000021020240024002400240200141086a2802000e0400010203000b200341c0156a41146a4101360200200342013702c4152003419cc3cb003602c015200341043602e41020034194c3cb003602e0102003200341e0106a3602d015200341c0156a4184ccc2001044000b200141386a290300210b200141306a290300210c200141146a2802002124200141106a2802002101200341b00e6a41106a2023290300370300200341b00e6a41086a2022290300370300200320032903d0083703b00e200341c0156a41246a2020360200200341c0156a41226a20213b0100200341c0156a411a6a200a370100200341c0156a41196a20153a0000200341c0156a41186a20143a0000200341c0156a41166a20163b0100200341c0156a41156a20183a0000200341c0156a41146a20193a0000200341c0156a41126a201a3b0100200341c0156a41116a20173a0000200341c0156a41106a201b3a0000200341c0156a410e6a20053b0100200341c0156a410d6a20093a0000200341c0156a410c6a20083a0000200341c0156a410a6a20113b0100200341c0156a41096a20123a0000200341c0156a41086a20133a0000200320073602e8152003201c3b01c6152003201d3a00c515200320043a00c4152003201e3b01c2152003201f3a00c115200320023a00c01520034190136a200341c0156a10c10241012102024002400240024020032d0090134101460d0020034190136a41086a280200210720034190136a410c6a280200210420034190136a41106a280200210520034190136a41146a290200210a20032d009113210920032f019213210820032802941321112003200341ac136a35020020034190136a41206a31000042208684220d3e00fb10200341ff106a200d4220883c00002003200a3700f310200320053600ef10200320043600eb10200320073600e710200320113600e310200320083b00e110200320093a00e010200341c0156a41106a200341b00e6a41106a290300370300200341c0156a41086a2204200341b00e6a41086a290300370300200320032903b00e3703c01520064108762107024002400240200641ff01710e03000201020b20034190136a410d6a200341c0156a410d6a29000037000020034190136a41086a2004290300370300200320032903c01537039013410021020c010b2024450d002001102e0b200341a30a6a20034190136a41086a290300370000200341900a6a41186a22062003419d136a290000370000200320243600970a200320013600930a200320032903901337009b0a200320073b01900a200320074110763a00920a20020d02200341f0066a41186a2006290300370300200341f0066a41106a2206200341900a6a41106a290300370300200341f0066a41086a2204200341900a6a41086a290300370300200320032903900a3703f00620034198036a200c200b42c0843d420010e60820034188036a200c200b42c0843d420010e708200341f8026a20032903880320034188036a41086a29030042d08603420010e808200341c0156a200341e0106a20032903f802220d200329039803220a421480a7200a42d086037e42c0843d8242a0c21e566aad7c220a4280a094a58d1d200a4280a094a58d1d56200341f8026a41086a290300200a200d54ad7c220a420052200a501b22021b220d200a420020021b220a10c30220032d00c0154106460d014280808080c003210a410321020c030b410221020240200641ff01714102460d004200210a0c030b4200210a410221022024450d022001102e0c020b200341c8066a41186a22024200370300200341c8066a41106a22014200370300200341c8066a41086a22074200370300200342003703c806200341e8056a41bad7c70041081081022007200341e8056a41086a2205290300370300200320032903e8053703c806200341a8046a41e4afc900410d1081022002200341a8046a41086a2209290300370300200120032903a804370300200341f0026a200341c8066a4120108e0220032802f402210820032802f0022111200242003703002001420037030020074200370300200342003703c806200341e8056a41bad7c700410810810220072005290300370300200320032903e8053703c806200341a8046a41e4afc900410d10810220022009290300370300200120032903a80437030020032008410020111b220241016a3602c015200341c8066a4120200341c0156a410410b201200341c0156a41186a200a370300200341f8156a200341e0106a41186a290300370300200341f0156a200341e0106a41106a290300370300200341e8156a200341e0106a41086a29030037030020034188166a200429030037030020034190166a200629030037030020034198166a200341f0066a41186a2903003703002003200b3703c8152003200c3703c0152003200d3703d015200320032903e0103703e015200320032903f00637038016200341b00a6a200210d60320032802b80a210720032802b00a2101200341003602880c200342013703800c200341800c6a200341c0156a41206a412010742003200b370398132003200c37039013200341800c6a20034190136a41101074200341800c6a20034180166a412010742003200a370398132003200d37039013200341800c6a20034190136a411010742001200720032802800c220620032802880c10b201024020032802840c450d002006102e0b024020032802b40a450d002001102e0b200341cc156a2002360200200341c8156a41003a00002003410e3a00c015200341c0156a10fe01200041186a41003a000020004200370308200020032800e8063600192000411c6a200341eb066a280000360000200042003703000c310b4200210a410121020b200041133b002120004200370308200041206a20023a0000200041186a41003a00002000200a4280808080f0038341d0ffc300ad84370024200042013703000c2f0b0240200241ff01710d0020072007280200417f6a2202360200024020020d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b2003200a3703c006200320153a00bf06200320143a00be06200320163b01bc06200320183a00bb06200320193a00ba062003201a3b01b806200320173a00b7062003201b3a00b606200320053b01b406200320093a00b306200320083a00b206200320113b01b006200320123a00af06200320133a00ae062003201c3b01ac062003201d3a00ab06200320043a00aa062003201e3b01a8060240201f41ff01710d00410321020c010b4110102c2201450d2c200141f8f7c60036020c2001410136020820014281808080103702004110102c2207450d2c20074190f8c60036020c20074101360208200742818080801037020020012001280200417f6a22153602004100210220150d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22152015280200417f6a221536020020150d002001102e0b0240024002400240200241ff0171417f6a0e03000102010b20072007280200417f6a2202360200024020020d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b0240200441ff01710d00201141107420124108747220137241017420054110742009410874722008724b0d020b4110102c2202450d2e200241f8f7c60036020c2002410136020820024281808080103702004110102c2207450d2e20074190f8c60036020c20074101360208200742818080801037020020022002280200417f6a220136020020010d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b20072007280200417f6a22013602004200210a4102210202402001450d004200210b0c020b2007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22012001280200417f6a220136020002402001450d004200210b0c020b2007102e4200210b0c010b200341e8056a41bad7c7004108108102200341a8046a41dbafc9004109108102200320063602b0082003200341b0086a410410a3013703900a200341cc156a200341b0086a41046a3602002003200341900a6a41086a3602c4152003200341b0086a3602c8152003200341900a6a3602c015200341b00e6a200341c0156a107c20032802b80e220741206a2202417f4c0d180240024020020d00410121010c010b2002102c2201450d2d0b200341003602f806200320023602f406200320013602f006200341f0066a200341e8056a41101074200341f0066a200341a8046a41101074200341f0066a20032802b00e220220071074024020032802b40e450d002002102e0b200341c0156a20032802f006220220032802f806220110b805024020032903c0154201520d002002200110ff01200341b00e6a200341c0156a41086a41e00010e9081a200341800c6a200341b00e6a41e00010e9081a024020032802f406450d002002102e0b20034190136a41066a200341800c6a41e00010e9081a200341e0106a20034190136a41e60010e9081a200341b00a6a200341e0106a41066a41e00010e9081a200341b8036a200341d00a6a20032903c00a220e200341c80a6a290300220f10cb0220032903b803210a2003200341b8036a41086a290300220b3703c8152003200a3703c01502400240200a200b844200520d002003200341c0156a3602901320034190136a10cc020c010b200342f0f2bda1a7ee9cb9f90037039013200341c0156a20034190136a10cd02200341a8036a200341c0156a200a200b10fd01200341a0136a200341a8036a41086a290300220d200b7d20032903a803220c200a54ad7d200b200d7d200a200c54ad7d200c200a56200d200b56200d200b511b22021b3703002003200c200a7d200a200c7d20021b3703981320032002ad3703901320034190136a41086a21010240024020020d00200320013602e010200341e0106a10cc020c010b200320013602e010200341e0106a10ce020b200341d8156a200b370300200341d0156a200a370300200341c8156a41063a00002003410e3a00c015200341c0156a10fe010b200341c0156a41186a200f370300200341d0156a200e370300200341cc156a2006360200200341c8156a41033a00002003410e3a00c015200341c0156a10fe01200041186a41003a000020004200370308200020032800e8063600192000411c6a200341e8066a41036a280000360000200042003703000c300b200341b00e6a200341c8156a41e00010e9081a024020032802f406450d002002102e0b41caeac200ad210a4280808080c001210b410321020b20004193023b0021200042003703082000200b200a84370024200041206a20023a0000200041186a41003a0000200042013703000c2e0b200341c0156a41246a2020360200200341c0156a41226a20213b0100200341c0156a411a6a200a370100200341c0156a41196a20153a0000200341c0156a41186a20143a0000200341c0156a41166a20163b0100200341c0156a41156a20183a0000200341c0156a41146a20193a0000200341c0156a41126a201a3b0100200341c0156a41116a20173a0000200341c0156a41106a201b3a0000200341c0156a410e6a20053b0100200341c0156a410d6a20093a0000200341c0156a410c6a20083a0000200341c0156a410a6a20113b0100200341c0156a41096a20123a0000200341c0156a41086a20133a0000200320073602e8152003201c3b01c6152003201d3a00c515200320043a00c4152003201e3b01c2152003201f3a00c115200320023a00c0154200210a4200210b02400240200341c0156a10c60241ff01714102460d00200341c0156a200610d60320032802c015220120032802c815108f022102024020032802c415450d002001102e0b20020d0141caeac200ad210a4280808080c001210b410321240b20004193023b0021200042003703082000200b200a84370024200041206a20243a0000200041186a41003a0000200042013703000c2e0b200341c8066a41186a22024200370300200341d8066a22014200370300200341c8066a41086a22074200370300200342003703c806200341e8056a41bad7c70041081081022007200341e8056a41086a290300370300200320032903e8053703c806200341a8046a4194ccc20041091081022002200341a8046a41086a290300370300200120032903a8043703004104102c2202450d2a20034204370294132003200236029013200320063602c01520034190136a200341c0156a41041074200341c0156a41086a20032802981336020020032003290390133703c015200341c8066a4120200341c0156a10c702200041186a41003a000020004200370308200020032800e8063600192000411c6a200341eb066a280000360000200042003703000c2d0b200341c0156a200141046a41c40010e9081a20034190136a41286a200241286a28020036020020034190136a41206a200241206a29020037030020034190136a41186a200241186a29020037030020034190136a41106a200241106a29020037030020034190136a41086a200241086a29020037030020032002290200370390132000200341c0156a20034190136a10c7060c2c0b200341c0156a20034190136a410110f002200341c9156a2102024020032d00c0154101470d0020033500c5152002330000200341cb156a3100004210868442208684210d200341c0156a410c6a280200210220032d00c41521014200210e0c020b20032d00c1152101200341c0156a41086a41033a00002002200329039013370000200341d1156a20034190136a41086a290300370000200341d9156a200341a0136a290300370000200341e1156a20034190136a41186a2903003700002003410c3a00c015200341c0156a10fe010240200141ff01710d0010f7021a0b200320032802a8043602b008200320032800ab043600b308200041186a41003a000020004200370308200020032802b0083600192000411c6a20032800b308360000200042003703000c2b0b0b200320032800ab043600b308200320032802a8043602b008200041276a200d4230883c0000200041256a200d4220883d00002000200d3e0021200041186a41003a0000200041106a42d8e4970f3703002000200e370308200020032802b0083600192000411c6a20032800b308360000200041286a2002360000200041206a20013a0000200042013703000c290b200341063a00a8040b20004200370308200020032800e806360019200041186a41003a00002000411c6a200341eb066a280000360000200042003703000c270b20032d00f00622024106460d010b20032f00f106210120032d00f3062107200020032902f406370024200020073a0023200020013b0021200041206a20023a0000200041186a41003a000020004200370308200042013703000c250b20004200370308200020032800e806360019200041186a41003a00002000411c6a200341eb066a280000360000200042003703000c240b20032802b00a2102200020032902b40a370024200041206a2002360000200041186a41003a000020004200370308200042013703000c230b20004200370308200020032800e806360019200041186a41003a00002000411c6a200341eb066a280000360000200042003703000c220b20004200370308200020032800e805360019200041186a41003a00002000411c6a200341eb056a280000360000200042003703000c210b2000200a370024200020063a0023200020073a0022200020013a002120004200370308200041206a20023a0000200041186a41003a0000200042013703000c200b20004200370308200020032800e806360019200041186a41003a00002000411c6a200341eb066a280000360000200042003703000c1f0b20032d00c01521020b0240200241ff01714106460d0020032d00c115210120032d00c215210720032d00c315210620032902c415210a0c010b02402015450d002012102e0b20004200370308200020032800e806360019200041186a41003a00002000411c6a200341eb066a280000360000200042003703000c1d0b02402015450d002012102e0b2000200a370024200020063a0023200020073a0022200020013a002120004200370308200041206a20023a0000200041186a41003a0000200042013703000c1c0b20020d180c040b20032d00e0102101200341f00b6a41086a2002360200200320013a00f00b2003200a3e00f10b2003200a4230883c00f70b2003200a4220883d00f50b024020032802cc152202450d00200241246c2101201a210203400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b024020032802c8152202450d00200241246c450d00201a102e0b024020242007460d000340200610e1010240200641046a2802002202450d00200241246c450d002006280200102e0b200641f0006a2106200941907f6a22090d000b0b02402011450d00201141f0006c450d002004102e0b20032802b4082202450d02200241c4006c450d0220032802b008102e0c020b20242007460d002004200541f0006c6a210603402007220241046a220110e101200241f0006a21070240200241086a2802002202450d00200241246c450d002001280200102e0b20062007470d000b0b02402011450d00201141f0006c450d002004102e0b200341a80a6a4200370300200341a00a6a4200370300200341900a6a41086a22024200370300200342003703900a200341d0086a4190dac800410a1081022002200341d0086a41086a290300370300200320032903d0083703900a200341b00a6a41d5dac8004106108102201741086a200341b00a6a41086a290300370200201720032903b00a370200201541c4006c41046a2202417f4c0d0120032802b00821010240024020020d00410121070c010b2002102c2207450d160b200341003602c815200320023602c415200320073602c0152015200341c0156a107620012015200341c0156a109f01200341900a6a412020032802c015220220032802c81510b201024020032802c415450d002002102e0b200341063a00f00b20032802b4082202450d00200241c4006c450d002001102e0b024020032d00f00b22024106460d0020032f00f10b210120032d00f30b2107200020032902f40b370024200020073a0023200020013b0021200041206a20023a0000200041186a41003a000020004200370308200042013703000c180b20004200370308200020032800e806360019200041186a41003a00002000411c6a200341eb066a280000360000200042003703000c170b1038000b200341e8056a200341800c6a10c802200341c0156a20032802e805220120032802f005220710c90220032903c015210a200341a8046a41086a220220034190166a290300370300200320034188166a2903003703a80402400240200a4201510d00200341f0066a41086a4200370300200342003703f0060c010b200341f0066a41086a2002290300370300200320032903a8043703f0060b200341c0156a41c8006a20032903f00637030020034190166a200341f0066a41086a290300370300200342013703c015200341c0156a41386a202d4200201042015122021b370300200341f0156a202f420020021b370300200341c0156a41286a202c420020021b370300200341e0156a202b420020021b370300200341d8156a2025420020021b370300200341c0156a41106a2027420020021b37030020034180166a202a420020021b37030020032026420020021b3703c81520012007200341c0156a41086a10c805024020032802ec05450d002001102e0b20034190136a41106a290300211020034190136a41286a290300210e20034190136a41386a290300210b20034190136a41c8006a290300210c200329039813212620032903b013212920032903c013210a20032903d013210d200329039013212820032903a813210f0b024020284201520d00200341f8156a2010370300200341f0156a2026370300200341c0156a41086a41003a0000200341c9156a20032903800c370000200341d1156a200341800c6a41086a290300370000200341d9156a200341900c6a290300370000200341e1156a200341980c6a290300370000200341033a00c015200341c0156a10fe010b02400240200f50450d004200210f0c010b200341c0156a41186a200341800c6a41186a290300370300200341c0156a41106a200341800c6a41106a290300370300200341c0156a41086a200341800c6a41086a290300370300200320032903800c3703c0154201210f0b200341b00e6a41186a200341c0156a41186a22022903002210370300200341b00e6a41106a200341c0156a41106a22012903002228370300200341b00e6a41086a200341c0156a41086a22072903002226370300200320032903c01522273703b00e200341f0156a2206200e370300200341e8156a220420293703002001202637030020022028370300200341e0156a20103703002003200f3703c015200320273703c815200341c0156a10d204024020032903c015500d00200320043602901320034190136a10cc020b20034188166a200c37030020034180166a200d370300200341f8156a200b3703002006200a370300200741033a0000200341c9156a20032903800c370000200341d1156a200341800c6a41086a290300370000200341d9156a200341800c6a41106a290300370000200341e1156a200341800c6a41186a290300370000200341033a00c015200341c0156a10fe01200320032802c8063602f00b200320032800cb063600f30b200041186a41003a000020004200370308200020032802f00b3600192000411c6a20032800f30b360000200042003703000c140b200341900a6a41086a2201200341b0086a41086a2f01003b0100200320032802c8063602f00b200320032800cb063600f30b200320032903b0083703900a200041186a41003a000020004200370308200020032802f00b3600192000411c6a20032800f30b360000200041206a20023a0000200020032903900a3700222000412a6a20012f01003b0000200042013703000c130b20032d00800c22014106470d0141012101410221060b200341e0156a20032903d008370300200341f4156a20032800f30b360000200341e8156a200341d8086a290300370300200341d8156a200a3703002003200d3703c015200320063a00f015200320032802f00b3600f1152003200c3703c8152003200b3703d015024002402001450d002005200710ff010c010b20052007200341c0156a10c6050b410621010b20032902840c210a20032d00830c210720032d00820c210620032d00810c2104024020032802940a450d002005102e0b20014106460d010b2000200a370024200020073a0023200020063a0022200020043a002120004200370308200041206a20013a0000200041186a41003a0000200042013703000c0f0b200341e8156a2002360200200341cd156a200341b80e6a290300370000200341d5156a200341c00e6a290300370000200341dd156a200341b00e6a41186a290300370000200341023a00c415200341023a00c015200320032903b00e3700c515200341c0156a10fe01200041186a41003a000020004200370308200020032800e8063600192000411c6a200341eb066a280000360000200042003703000c0e0b20032d00e01022014106470d010b2005200710ff01410621010b20032902e410210a20032d00e310210720032d00e210210620032d00e1102104024020032802840c450d002005102e0b20014106460d010b2000200a370024200020073a0023200020063a0022200020043a002120004200370308200041206a20013a0000200041186a41003a0000200042013703000c0a0b200341c8156a2002360200200341013a00c415200341023a00c015200341c0156a10fe01200041186a41003a000020004200370308200020032800e8063600192000411c6a200341eb066a280000360000200042003703000c090b20032d00e01022024106470d0141012106410221020b200341e0156a20032903d008370300200341f4156a20032800f30b360000200341e8156a200341d8086a290300370300200341d8156a200a3703002003200d3703c015200320023a00f015200320032802f00b3600f1152003200c3703c8152003200b3703d015024002402006450d002001200710ff010c010b20012007200341c0156a10c6050b410621020b20032902e410210a20032d00e310210720032d00e210210620032d00e1102104024020032802940a450d002001102e0b20024106470d01200341cd156a20032903880c370000200341e8156a2011360200200341d5156a200341900c6a290300370000200341dd156a200341980c6a290300370000200341003a00c415200341023a00c015200320032903800c3700c515200341c0156a10fe01200341063a00b0080b20004200370308200020032800e806360019200041186a41003a00002000411c6a200341eb066a280000360000200042003703000c050b2003200a3702b408200320073a00b308200320063a00b208200320043a00b108200320023a00b0080b20032802b0082102200020032902b408370024200041206a2002360000200041186a41003a000020004200370308200042013703000c030b1036000b4103210641022107418fc2cb002101411d21020b02402011450d002008102e0b200320032800b00a3602d0082003200341b30a6a2800003600d308200041186a41003a000020004200370308200020032802d0083600192000411c6a20032800d308360000200041286a2002360200200041246a2001360200200020073a0022200041003a0021200041206a20063a0000200042013703000b200341f0176a24000b13002000410636020420004198f4c0003602000bf70802077f027e230041f0006b2202240002400240024002400240024020012d0000417f6a0e03010002000b200041003b0001200041013a0000200041036a41003a00000c030b200241386a200141016a10e00241002103200241d0006a200141216a20022802382204200228024041d4e2cc00410010e102200241286a200241db006a290000370300200241306a200241e3006a2f00003b01002002200229005337032020022d0052210520022d0051210620022d005021010240200228023c450d002004102e0b0c010b200241386a200141016a10e002200241d0006a200141216a200228023822072002280240200141e4006a2204280200200141ec006a220128020010e102200241286a200241db006a290000370300200241306a200241e3006a2f00003b010020022002290053370320200128020021082004280200210320022d0052210520022d0051210620022d00502101200228023c450d002007102e0b200241086a41106a200241206a41106a2f010022043b0100200241086a41086a200241206a41086a290300220937030020022002290320220a370308200241d0006a41106a220720043b0100200241d0006a41086a220420093703002002200a3703500240200141ff01714101470d002002412a6a2004290300370100200241326a20072f01003b0100200220053a0021200220063a002020022002290350370122200241d0006a200241206a10e202200228025022042002280258108f02210102402002280254450d002004102e0b024020010d00200041800e3b0001200041013a0000200041036a41013a00000c020b200241d0006a41106a200241206a41106a280200360200200241d0006a41086a200241206a41086a29030037030020022002290320370350200241386a200241d0006a10e30220022802382204200228024010e40241ff017121010240200228023c450d002004102e0b0240024020014102460d0002402003450d0041c40141c70120011b2008470d0041abcecc0041efcfcc0020011b2003200810ec08450d020b200041800e3b0001200041013a0000200041036a41033a00000c030b2003450d00200041800e3b0001200041013a0000200041036a41033a00000c020b410c102c2201450d02200241d0006a41106a200241206a41086a290300370300200241d0006a41186a200241206a41106a28020036020020024106360254200241eef8c00036025020022002290320370358410a102c2204450d022002420a37023c200220043602384106200241386a1076200241386a41eef8c00041061074200241386a200241d0006a41086a41141074200141086a200228024036020020012002290338370200200041306a41013a0000200041286a428180808010370200200041246a2001360200200041206a4100360200200041186a4204370300200041106a427f370300200041086a42e400370300200041316a2002280038360000200041346a2002413b6a280000360000200041003a00000c010b200041800e3b0001200041013a0000200041036a41003a00000b200241f0006a24000f0b1036000be80401097f230041306b22022400024002404120102c2203450d002002422037020420022003360200200220014120107441012104200228020822034101742201417f4c0d012002280200210502402001450d002001102c2204450d010b2000410036020820002004360200200041046a2206200136020002402003450d002003417f6a2107410021030240034020052d00002108024002400240024020032001470d00200141016a22092001490d082001410174220a2009200a20094b1b22094108200941084b1b21090240024020010d00200241003602200c010b2002410136022820022001360224200220043602200b200241106a20094101200241206a10d1042002280218210120022802104101460d01200020022802142204360200200620013602000b2000200341016a2209360208200420036a413041d700200841a001491b20084104766a3a000020092001470d0220062802002001470d02200141016a220420014f0d010c070b2001450d060c050b2001410174220a2004200a20044b1b22044108200441084b1b21040240024020010d00200241003602200c010b2002410136022820022001360224200220002802003602200b200241106a20044101200241206a10d1042002280218210120022802104101460d02200020022802142204360200200620013602000b2000200941016a2209360208200420036a41016a413041d7002008410f712201410a491b20016a3a00002007450d02200541016a21052007417f6a210720062802002101200921030c000b0b2001450d020c010b02402002280204450d002002280200102e0b200241306a24000f0b1036000b1038000bb40a02077f027e230041a0026b22062400024002400240024002400240200520036a41216a22070d0041012108410021094100210a0c010b4100210b4100210c4100210a410121080240024003402007410a7021090240200c200a470d00200c41016a220a200c490d05200b200a200b200a4b1b220a4108200a41084b1b210a02400240200c0d00200641003602d8010c010b200641013602e0012006200c3602dc01200620083602d8010b20064198016a200a4101200641d8016a107d20062802a001210a2006280298014101460d02200628029c0121080b2008200c6a20094130723a00002007410a490d02200c41016a210c200b41026a210b2007410a6e21070c000b0b200a450d020c050b200c41016a21090b411a102c220c450d032006411a36025c2006200c360258200c41002900f4f840370000200c41086a41002900fcf840370000200c41106a4100290084f940370000200c41186a41002f008cf9403b00002006411a360260024002402009450d002009411a6a22072009490d022006429a808080103702dc012006200c3602d80120064198016a20074134200741344b1b4101200641d8016a107d200641a0016a28020021072006280298014101460d01200628029c01210c2006200736025c2006200c3602580b20090d02411a210c0c030b20070d030b1038000b2008417f6a210b200c411a6a210c200921070340200c200b20076a2d00003a0000200c41016a210c2007417f6a22070d000b2009411a6a210c0b2006200c3602600240200a450d002008102e0b200641d8006a41b8fcc60041211074200641d8006a200220031074200641d8006a20042005107420062006280258220c200628026010e5020240200628025c450d00200c102e0b4100210c200641206a41106a4100360200200641206a41086a420037030020064200370320200641d8016a2001200610e602024020062d00d8014101460d00200641d0016a20064191026a290000370300200641c8016a20064189026a290000370300200641c0016a20064181026a290000370300200641b8016a200641f9016a290000370300200641b0016a200641f1016a29000037030020064198016a41106a200641e9016a29000037030020064198016a41086a200641e1016a290000370300200620062900d901370398014101210c0b200641d8016a41386a220720064198016a41386a290300370300200641d8016a41306a220b20064198016a41306a290300370300200641d8016a41286a220920064198016a41286a290300370300200641d8016a41206a220820064198016a41206a290300370300200641d8016a41186a220a20064198016a41186a290300370300200641d8016a41106a20064198016a41106a290300370300200641d8016a41086a20064198016a41086a29030037030020062006290398013703d80102400240200c450d00200641d8006a41386a2007290300370300200641d8006a41306a200b290300370300200641d8006a41286a2009290300370300200641d8006a41206a2008290300370300200641d8006a41186a200a290300370300200641d8006a41106a200641d8016a41106a290300370300200641d8006a41086a200641d8016a41086a290300370300200620062903d801370358200641386a200641d8006a41c00010e502200641206a41106a200641d4006a280000220c360200200641206a41086a200641cc006a290000220d37030020062006290044220e370320200041116a200c360000200041096a200d3700002000200e3700014101210c0c010b4100210c0b2000200c3a0000200641a0026a24000f0b1036000bf50101047f230041306b22022400200241b6d1cc004106108102200241106a41b6d1cc004106108102024002404114102c2203450d002002421437022420022003360220200241206a20014114107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000bf50101047f230041306b22022400200241b6d1cc004106108102200241106a41bcd1cc004107108102024002404114102c2203450d002002421437022420022003360220200241206a20014114107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000b800201027f230041d0006b220224002002200136020420022000360200200241086a2000200110ed0202400240200228020822010d00410221000c010b200228020c210302400240200241106a280200450d0041002100024020012d00000e020200010b410121000c010b20024100360220200242013703182002410a36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241909dc5003602382002200241286a360248200241346a419cebc000200241386a103d1a2002280218200228022010ef020240200228021c450d002002280218102e0b410221000b2003450d002001102e0b200241d0006a240020000b4c0020002002ad4220862001ad8410112201290000370000200041186a200141186a290000370000200041106a200141106a290000370000200041086a200141086a2900003700002001102e0ba80503017f017e027f23004190016b22032400024002402001200210052204422088a722020d00410121010c010b2004a721010b200320023602442003200136024002402002450d0020012d0000210520032002417f6a22063602442003200141016a36024002400240024020050e020001030b200341c8006a200341c0006a10a70120032d00484101460d02200341086a200341d2006a290100370300200341106a200341da006a290100370300200341186a200341e2006a290100370300200341206a200341ea006a290100370300200341286a200341f2006a290100370300200341306a200341fa006a290100370300200341376a20034181016a2900003700002003200329014a37030020032d00492102410021050c010b2006450d0120012d0001210520032002417e6a3602442003200141026a3602404100210202400240024020050e03020100040b410221020c010b410121020b200341376a200341c8006a41376a290000370000200341306a200341c8006a41306a290000370300200341286a200341c8006a41286a290000370300200341206a200341c8006a41206a290000370300200341186a200341c8006a41186a290000370300200341106a200341c8006a41106a290000370300200341086a200341c8006a41086a29000037030020032003290048370300410121050b200020023a0001200020053a0000200041026a20032903003700002000410a6a200341086a290300370000200041126a200341106a2903003700002000411a6a200341186a290300370000200041226a200341206a2903003700002000412a6a200341286a290300370000200041326a200341306a290300370000200041396a200341376a2900003700002001102e20034190016a24000f0b41cae0cc00412e200341c8006a41f8e0cc004188e1cc00103e000bb10201037f230041e0006b22022400200241086a418ef9c0004110108102200241186a41fbafc9004106108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241d0006a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000bb40102047f027e230041d0006b22012400200141106a200010e702200141206a200128021022022001280218220310e90202400240200128024022040d00420021054101210441002103420021060c010b2002200310ff01200128024441ffffff3f712103200141386a2903002106200129033021050b02402001280214450d002002102e0b02402003450d002004102e0b42f0d0c9abc6add9b1f400200010ea02200120002005200610fb01200141d0006a24000bf00304027f017e037f037e230041e0006b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022010d00200041003602200c010b200328021421022003200341186a280200360224200320013602202003200341206a10ab0102400240024002402003280200450d00200341003602480c010b200341c8006a200341206a200328020410920120032802482204450d00200329024c210502400240200328022422064110490d0020032003280220220741106a3602202003200641706a2208360224200841104f0d010b200542ffffff3f83500d012004102e0c010b200741086a29000021092007290000210a2003200641606a3602242003200741206a36022020040d010b20034100360230200342013703282003410a36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341909dc5003602482003200341386a360258200341c4006a419cebc000200341c8006a103d1a2003280228200328023010ef020240200328022c450d002003280228102e0b200041003602200c010b200741186a290000210b200020072900103703102000200a3703002000200537022420002004360220200041186a200b370300200020093703080b2002450d002001102e0b200341e0006a24000b9503010a7f230041206b2202240020022000370308200241106a200110d4062002280218210341002104200241003602180240024020030d0041002105200228021021060c010b2002280210220641106a2107410021054100210802400340024002402005450d00200620084105746a21092006200820046a4105746a210a0340200941106a220b2900002002290308510d02200a2009290300370300200a41186a200941186a290300370300200a41106a200b290300370300200a41086a200941086a290300370300200a41206a210a200941206a21092003200841016a22084b0d000c040b0b200720084105746a2109034020092900002002290308510d01200941206a21092003200841016a22084b0d000b410021050c030b2004417f6a2104200541016a21052003200841016a22084b0d000b0b024020050d00410021050c010b2006200820056b4105746a200620084105746a200320086b41057410ea081a0b2002200320056b220936021820012006200910d5060240200228021441ffffff3f71450d002006102e0b200241206a24000bca0101077f230041106b22022400200210ec0241012103200228020021044100210541002106024002400240200228020822070e020201000b4100210503402007410176220820056a2106200620052004200641306c6a2001412010ec084101481b2105200720086b220741014b0d000b0b02402004200541306c6a2001412010ec0822070d0020052106410021030c010b20052007411f766a21060b024020022802042205450d00200541306c450d002004102e0b2000200636020420002003360200200241106a24000bb40302047f017e23004180016b22012400200141206a22024200370300200141086a41106a22034200370300200141086a41086a420037030020014200370308200141086a418ef9c0004110108102200141e8006a419ef9c000410a1081022002200141e8006a41086a290000370300200320012900683703002001412036022c2001200141086a360228200141306a200141086a412010ed0202400240200128023022030d00410021020c010b200128023421042001200141306a41086a28020036024420012003360240200141e8006a200141c0006a10e90102400240200128026822020d004100210220014100360250200142013703482001410a36025c2001200141286a3602582001200141c8006a360264200141fc006a41013602002001420137026c200141909dc5003602682001200141d8006a360278200141e4006a419cebc000200141e8006a103d1a2001280248200128025010ef020240200128024c450d002001280248102e0b0c010b200129026c21050b2004450d002003102e0b0240024020020d0020004100360208200042083702000c010b20002005370204200020023602000b20014180016a24000b130020002002ad4220862001ad84102510da080bde0401047f230041c0006b220224002000280204210320002802002104200128021841a89fc00041012001411c6a28020028020c11000021000240024020030d00200021050c010b2002200436020441012105024020000d00024020012d0000410471450d0041012105200128021841f99ec0004101200128021c28020c1100000d012001280200210041012105200241013a001720022000360218200241c09ec00036023420022001290218370308200220012d00203a00382002200128020436021c20022001290210370328200220012902083703202002200241176a3602102002200241086a360230200241046a200241186a1087010d01200228023041d89ec0004102200228023428020c11000021050c010b200241046a200110870121050b20034101460d00200441016a21002003417f6a2103034020022000360204200541ff0171210441012105024020040d00024020012802002205410471450d00200241013a001720022005360218200241c09ec00036023420022001290218370308200220012d00203a00382002200128020436021c20022001290210370328200220012902083703202002200241176a3602102002200241086a3602300240200241046a200241186a1087010d00200228023041d89ec0004102200228023428020c11000021050c020b410121050c010b41012105200128021841bc9ec0004102200128021c28020c1100000d00200241046a200110870121050b200041016a21002003417f6a22030d000b0b41012100024020050d00200128021841fa9ec0004101200128021c28020c11000021000b200241c0006a240020000b0e002001ad4220862000ad8410160be52005067f017e027f067e057f230041f0026b22032400200341b8016a22044200370300200341a0016a41106a22054200370300200341a0016a41086a22064200370300200342003703a001200341e0006a418ef9c00041101081022006200341e0006a41086a2207290000370300200320032900603703a001200341e0006a41c7c3cb0041071081022004200729000037030020052003290060370300200341e0016a200341a0016a10f10220032802e0012206410820061b2108410021040240024002400240024002400240024002400240024002400240024002400240024020032902e401420020061b2209422088a7220a0e020201000b41002104200a210603402006410176220b20046a210720072004200820074106746a41206a2001412010ec084101481b21042006200b6b220641014b0d000b0b200820044106746a41206a2001412010ec080d002004200a4f0d01200820044106746a2206290310210c200641186a290300210d2006200641c0006a2004417f73200a6a41067410ea081a024002402002450d00200341106a2001200c200d10cb022003290310210e2003200341106a41086a290300220f3703e8012003200e3703e00102400240200e200f844200520d002003200341e0016a3602a001200341a0016a10cc020c010b200342f0f2bda1a7ee9cb9f9003703a001200341e0016a200341a0016a10cd022003200341e0016a200e200f10fd01200341b0016a200341086a2903002210200f7d20032903002211200e54ad7d200f20107d200e201154ad7d2011200e562010200f562010200f511b22041b37030020032011200e7d200e20117d20041b3703a80120032004ad3703a001200341a0016a41086a21060240024020040d0020032006360260200341e0006a10cc020c010b20032006360260200341e0006a10ce020b200341f8016a200f370300200341f0016a200e370300200341e8016a41063a00002003410e3a00e001200341e0016a10fe010b20034198026a200d37030020034190026a200c370300200341e0016a41086a41063a0000200341e9016a2001290000370000200341f1016a200141086a290000370000200341f9016a200141106a29000037000020034181026a200141186a2900003700002003410c3a00e001200341e0016a10fe010c010b200341306a2001200c200d10fb010b200341a0016a41186a220a4200370300200341a0016a41106a22024200370300200341a0016a41086a220b4200370300200342003703a001200341e0006a418ef9c0004110108102200b200341e0006a41086a2206290000370300200320032900603703a001200341e0006a41a8f9c0004109108102200541086a200629000037000020052003290060370000200341e0016a200341a0016a10f10220032802e0012204410820041b21070240024020032902e401420020041b220e422088a722040d00410021120c010b200341e0016a41386a20072004417f6a22134106746a220441386a290300370300200341e0016a41306a200441306a290300370300200341e0016a41286a200441286a290300370300200341e0016a41206a200441206a290300370300200341e0016a41186a200441186a290300370300200341e0016a41106a200441106a290300370300200341e0016a41086a200441086a290300370300200320042903003703e001200e42ffffffff0f832013ad42208684210e410121120b200341a0016a41386a2213200341e0016a41386a290300370300200341a0016a41306a2214200341e0016a41306a290300370300200341a0016a41286a2215200341e0016a41286a290300370300200341a0016a41206a2216200341e0016a41206a290300370300200a200341e0016a41186a22042903003703002002200341e0016a41106a220a290300370300200b200341e0016a41086a2202290300370300200320032903e0013703a001200320073602402003200e37024420044200370300200a420037030020024200370300200342003703e001200341e0006a418ef9c000411010810220022006290000370300200320032900603703e001200341e0006a41a8f9c000410910810220042006290000370300200a2003290060370300200341e0016a200341c0006a10f2020240200e42ffffff1f83500d002007102e0b20094280808080707c210e200341e0006a41086a2204200341a0016a41086a290300370300200341e0006a41106a2206200341a0016a41106a290300370300200341e0006a41186a2207200341a0016a41186a290300370300200341e0006a41206a2016290300370300200341e0006a41286a2015290300370300200341e0006a41306a2014290300370300200341e0006a41386a2013290300370300200320032903a001370360410021132012450d05200341e0016a41386a2212200341e0006a41386a290300370300200341e0016a41306a2214200341e0006a41306a290300370300200341e0016a41286a2215200341e0006a41286a290300370300200341e0016a41206a2202200341e0006a41206a290300370300200341e0016a41186a2007290300370300200341e0016a41106a2006290300370300200341e0016a41086a2004290300370300200320032903603703e001410021040240200e4220882210a722130e020403000b410021042013210603402006410176220b20046a210720072004200820074106746a41206a2002412010ec084101481b21042006200b6b220641014b0d000c030b0b0240200942ffffff1f83500d002008102e0b200341e0016a410d10f302200041013a00002000410c6a200341e8016a280200360200200041046a20032903e0013702000c0b0b2004200a1046000b200820044106746a41206a2002412010ec082206450d0120042006411f766a21040b200341a0016a41086a2015290300370300200341b0016a2014290300370300200341a0016a41186a201229030037030020032003290380023703a001200420134b0d09200341e0016a41186a290300210f200341e0016a41086a290300210c20032903f001210d20032903e001211102402013200ea7470d00201341016a22062013490d0620134101742207200620062007491b22064104200641044b1b220641ffffff1f712006464103742107200641067421060240024020130d00200341003602400c010b200341c0006a41086a410836020020032008360240200320104206863e02440b200341e0026a20062007200341c0006a107d200341e8026a280200210620032802e0024101460d0320032802e40221082006410676ad210e0b200820044106746a220641c0006a2006201320046b41067410ea081a200641186a200f3703002006200d3703102006200c37030820062011370300200620032903a001370320200641286a200341a8016a290300370300200641306a200341b0016a290300370300200641386a200341a0016a41186a290300370300200e42ffffffff0f8320094280808080708384210e0b410121130b2003200e3702a401200320083602a00120080d01200341f8016a4200370300200341e0016a41106a4200370300200341e0016a41086a22044200370300200342003703e001200341e0006a418ef9c00041101081022004200341e0006a41086a2206290000370300200320032900603703e001200341e0006a41c7c3cb004107108102200a41086a2006290000370000200a2003290060370000200341e0016a412010ff010c020b2006450d020c070b200341f8016a4200370300200341e0016a41106a4200370300200341e0016a41086a22044200370300200342003703e001200341e0006a418ef9c00041101081022004200341e0006a41086a2206290000370300200320032900603703e001200341e0006a41c7c3cb004107108102200a41086a2006290000370000200a2003290060370000200341e0016a200341a0016a10f2022008450d00200e42ffffff1f83500d002008102e0b200341b8016a4200370300200341a0016a41106a4200370300200341a0016a41086a22044200370300200342003703a001200341e0006a418ef9c00041101081022004200341e0006a41086a2206290000370300200320032900603703a001200341e0006a41c7c3cb004107108102200541086a200629000037000020052003290060370000200341e0016a200341a0016a10f10220032902e401420020032802e001220b1b2209422088a72207410674410675220441ffffff3f712004470d0020044105742206417f4c0d000240024020060d00410121020c010b2006102c2202450d060b024002402006410576221220044f0d00200641047622082004200820044b1b22044104200441044b1b220441ffffff3f712004462108200441057421040240024020060d00200341003602e0010c010b200341e8016a4101360200200320063602e401200320023602e0010b200341a0016a20042008200341e0016a107d200341a8016a280200210420032802a0014101460d0120032802a4012102200441057621120b200b4108200b1b211420070d02410021080c030b20040d050b1038000b2007410674210b200741067441406a4106762115200341e0016a41206a210720022104201421060340200341e0016a41386a200641386a290300370300200341e0016a41306a200641306a290300370300200341e0016a41286a200641286a2903003703002007200641206a290300370300200341a0016a41086a2208200741086a290000370300200341a0016a41106a2205200741106a290000370300200341a0016a41186a220a200741186a290000370300200320072900003703a001200441186a200a290300370000200441106a2005290300370000200441086a2008290300370000200420032903a001370000200441206a2104200641c0006a2106200b41406a220b0d000b201541016a21080b0240200942ffffff1f83500d002014102e0b200341c0006a41186a200141186a290000370300200341c0006a41106a200141106a290000370300200341c0006a41086a200141086a29000037030020032001290000370340200341a0016a41186a22044200370300200341a0016a41106a22064200370300200341a0016a41086a22074200370300200342003703a001200341e0006a41c8afc90041131081022007200341e0006a41086a220b290000370300200320032900603703a001200341e0006a41dbc3cb0041051081022004200b29000037030020062003290060370300200341e0016a200341a0016a412010f40220032d00e00121052004200341f9016a2900003703002006200341f1016a2900003703002007200341e9016a290000370300200320032900e1013703a0010240024020054101470d00200341e0006a41186a22052004290300370300200341e0006a41106a220a2006290300370300200b2007290300370300200320032903a001370360200341c0006a41012002200810f502200420052903003703002006200a2903003703002007200b290300370300200320032903603703a001200341a0016a2001412010ec08450d01200341f9016a200341b8016a290300370000200341f1016a200341b0016a290300370000200341e9016a200341a8016a290300370000200320032903a0013700e101200341013a00e001200341e0016a10f6020c010b200341c0006a41012002200810f5020b200041003a0000200020133a00012012450d002002102e0b200341f0026a24000f0b200420131045000b1036000b9c0804067f017e057f057e230041d0016b220224002002412036020c20022001360208200241106a2001412010ed02024002400240200228021022030d00200041003602000c010b200228021421042002200241186a280200360224200220033602202002200241206a10ab010240024020022802000d00024002402002280204220520022802244106762201200120054b1b22014106742206417f4c0d000240024020010d00410821070c010b2006102c2207450d060b2001ad2108024002402005450d00200241a8016a41017221090340200241a8016a200241206a10930120022d00a8014101460d0420024188016a41186a220a200941186a29000037030020024188016a41106a220b200941106a29000037030020024188016a41086a220c200941086a2900003703002002200929000037038801200228022422064110490d0420022002280220220141106a3602202002200641706a220d360224200d4110490d04200141086a290000210e2001290000210f200241c8006a41086a200c2903002210370300200241c8006a41106a200b2903002211370300200241c8006a41186a200a2903002212370300200241286a41086a220a2010370300200241286a41106a220b2011370300200241286a41186a220c20123703002002200641606a3602242002200141206a3602202002200229038801221037034820022010370328200141186a290000211020012900102111024020084220882212a722062008a7470d00200641016a22012006490d042006410174220d20012001200d491b22014104200141044b1b220141ffffff1f71200146410374210d200141067421010240024020060d00200241003602a8010c010b200241083602b001200220073602a801200220124206863e02ac010b20024188016a2001200d200241a8016a107d20022802900121012002280288014101460d03200228028c0121072001410676ad21080b200720064106746a220120113703102001200e3703082001200f370300200141186a201037030020012002290328370320200141286a200a290300370300200141306a200b290300370300200141386a200c290300370300200842ffffffff0f83200641016aad4220868421082005417f6a22050d000b0b2007450d0320002008370204200020073602000c040b20010d050b1038000b200842ffffff1f83500d002007102e0b200241003602900120024201370388012002410a36026c2002200241086a360268200220024188016a360248200241bc016a4101360200200242013702ac01200241909dc5003602a8012002200241e8006a3602b801200241c8006a419cebc000200241a8016a103d1a20022802880120022802900110ef020240200228028c01450d00200228028801102e0b200041003602000b2004450d002003102e0b200241d0016a24000f0b1036000b810202047f017e230041206b2202240002400240200128020822034106744104722204417f4c0d00200128020021012004102c2205450d0120024100360208200220043602042002200536020020032002107602402003450d002003410674210303402002200141206a41201074200129030021062002200141086a290300370318200220063703102002200241106a41101074200141106a29030021062002200141186a290300370318200220063703102002200241106a41101074200141c0006a2101200341406a22030d000b0b2000412020022802002201200228020810b20102402002280204450d002001102e0b200241206a24000f0b1038000b1036000be90301047f230041c0006b220224004182fcc10021034112210441102105024002400240024002400240024002400240024002400240024002400240024002400240200141ff01710e12000102030405060708090a0b0c0d0e0f1011000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a4184c2cc001044000b41f6fbc1002103410c2104410021050c0f0b41effbc100210341072104410121050c0e0b41e3fbc1002103410c2104410221050c0d0b41cffbc100210341142104410321050c0c0b41c5fbc1002103410a2104410421050c0b0b41b6fbc1002103410f2104410521050c0a0b41abfbc1002103410b2104410621050c090b41a1fbc1002103410a2104410721050c080b418efbc100210341132104410821050c070b4182fbc1002103410c2104410921050c060b41f4fac1002103410e2104410a21050c050b41dafac1002103411a2104410b21050c040b41e0c3cb00210341092104410c21050c030b41c8fac1002103410d21050c020b41b8fac100210341102104410e21050c010b41a7fac100210341112104410f21050b20004183223b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000b970302027f047e23004180016b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022010d00200041003a00000c010b200328021421042003200341106a41086a28020036026c20032001360268200341c0006a200341e8006a109301410121020240024020032d00404101470d004100210220034100360228200342013703202003410a3602742003200341086a3602702003200341206a36027c200341d4006a410136020020034201370244200341909dc5003602402003200341f0006a360250200341fc006a419cebc000200341c0006a103d1a2003280220200328022810ef022003280224450d012003280220102e0c010b200341386a200341c0006a41196a2900002205370300200341306a200341c0006a41116a2900002206370300200341206a41086a200341c0006a41096a2900002207370300200320032900412208370320200041196a2005370000200041116a2006370000200041096a2007370000200020083700010b200020023a00002004450d002001102e0b20034180016a24000bc210050b7f017e087f087e0b7f230022042105200441c0016b4160712206240002400240200141ffffff3f712001470d0020014105742207417f4c0d0041012108024002402007450d002007102c2208450d0120074105762109200821042007210a0340200a450d0120042000290000370000200441086a200041086a290000370000200441106a200041106a290000370000200441186a200041186a290000370000200441206a2104200a41606a210a200041206a21002009417f6a22090d000b0b2008200110fc02200641e0006a41186a220b4200370300200641e0006a41106a220c4200370300200641e0006a41086a220d42003703002006420037036020064180016a41c8afc9004113108102200d20064180016a41086a2200290000370300200620062900800137036020064180016a41dbafc9004109108102200b2000290000370300200c20062900800137030020064180016a200641e0006a4120108d032006280280012204410120041b210e200629028401420020041b220f422088a72204450d02200e20044105746a2110200641206a410c72211120064180016a410c6a2112200e2113034020064180016a41186a2214201341186a29000037030020064180016a41106a201341106a2900003703002000201341086a2900003703002006201329000037038001200641106a20064180016a10f50720064180016a200628021022152006280218221610b305200d201241086a290200370300200c201241106a2802003602002006201229020037036020062802a00121170240200628028801220a450d00200629038001211820112006290360370200201141086a200d290300370200201141106a200c28020036020020062018370320201721040b2006200a360228200641003602880120062903382119200620062903980122183703382006290330211a2006200629039001221b3703302006290320211c2006200629038001221d3703202006290328211e2006200629038801221f37032802400240201ea722200d00200421170c010b2006201c3703402006201e3703482006201a370350201e422088a721212006201937035802400240201aa722040d00201a422088a721222019422088a721042019a72123202021240c010b202020044105746a212220202125202021240340200b202541186a2900002218370300200c202541106a290000221b370300200d202541086a290000221d37030020002025290000221e370000200041086a2226201d370000200041106a2227201b370000200041186a222820183700002006201e37036020062024360284012006202036028001202541206a212541002104024002400240024020010e020201000b410021042001210a0340200a410176222920046a210920092004200820094105746a2000412010ec084101481b2104200a20296b220a41014b0d000b0b200820044105746a2000412010ec08450d010b20242000290000370000202441186a2028290000370000202441106a2027290000370000202441086a2026290000370000202441206a21240b20252022470d000b200628025c210420062802582123200628025421220b201fa7212a2006202136024c200620203602482006202420206b4105753602500240024020040d00202221240c010b202220044105746a212020222125202221240340200b202541186a2900002218370300200c202541106a290000221b370300200d202541086a290000221d37030020002025290000221e370000200041086a2226201d370000200041106a2227201b370000200041186a222820183700002006201e37036020062024360284012006202236028001202541206a212541002104024002400240024020010e020201000b410021042001210a0340200a410176222920046a210920092004200820094105746a2000412010ec084101481b2104200a20296b220a41014b0d000b0b200820044105746a2000412010ec08450d010b20242000290000370000202441186a2028290000370000202441106a2027290000370000202441086a2026290000370000202441206a21240b20252020470d000b0b20062023360258200620223602542006202420226b41057536025c2006290348211f2006290340211d2006290350211b200629035821180240202a450d000240200628022c41ffffff3f71450d002006280228102e0b200628023841ffffff3f71450d002006280234102e0b2006201d3703202006201f3703282006201b370330200620183703380b2006201f370388012006201b37039001201420183703002006201d37038001200620173602a00102400240201fa722040d002015201610ff010c010b2018a7210a2015201620064180016a10c0050240201f422088a741ffffff3f71450d002004102e0b200a41ffffff3f71450d00201b422088a7102e0b201341206a211302402006280214450d002015102e0b2017210420132010470d000c030b0b1036000b1038000b0240200f42ffffff3f83500d00200e102e0b20064198016a2200420037030020064190016a2204420037030020064180016a41086a220a42003703002006420037038001200641e0006a41c8afc9004113108102200a200641e0006a41086a22092900003703002006200629006037038001200641e0006a41c7c3cb004107108102200020092900003703002004200629006037030020064180016a2002200310c5052000420037030020044200370300200a42003703002006420037038001200641e0006a41c8afc9004113108102200a20092900003703002006200629006037038001200641e0006a41dbc3cb004105108102200020092900003703002004200629006037030020064180016a412010ff0102402007450d002008102e0b200524000bdc0301057f230041f0006b2201240020002d00002102200141186a2203200041196a290000370300200141106a2204200041116a290000370300200141086a2205200041096a2900003703002001200029000137030002400240024020020d00200141c0006a41186a22004200370300200141c0006a41106a22024200370300200141c0006a41086a420037030020014200370340200141c0006a41c8afc9004113108102200141206a41dbc3cb0041051081022000200141206a41086a29000037030020022001290020370300200141c0006a412010ff010c010b200141206a41186a2003290300370300200141206a41106a2004290300370300200141206a41086a200529030037030020012001290300370320200141c0006a41186a22004200370300200141c0006a41106a22024200370300200141c0006a41086a420037030020014200370340200141c0006a41c8afc9004113108102200141e0006a41dbc3cb0041051081022000200141e0006a41086a290000370300200220012900603703004120102c2200450d012001422037026420012000360260200141e0006a200141206a41201074200141c0006a412020012802602200200128026810b2012001280264450d002000102e0b200141f0006a24000f0b1036000be4750d067f017e047f017e0b7f057e027f027e027f027e027f017e177f230041f0036b22002400200041d0016a10ec02200041c0026a41186a22014200370300200041c0026a41106a22024200370300200041c0026a41086a22034200370300200042003703c002200041f0026a418ef9c00041101081022003200041f0026a41086a2204290000370300200020002900f0023703c002200041f0026a41c7c3cb00410710810220012004290000370300200220002900f002370300200041f0026a200041c0026a10f10220002802f002210520002902f4022106200142003703002002420037030020034200370300200042003703c002200041f0026a418ef9c000411010810220032004290000370300200020002900f0023703c002200041f0026a41a8f9c000410910810220012004290000370300200220002900f002370300200041f0026a200041c0026a10f1022005410820051b210720002802f0022208410820081b21092006420020051b2206a7210a20002902f402420020081b220ba7210c0240024002400240024002402006422088a7220d410674220e4106752208200b422088a7220f41067422104106756a22052008490d002005ad42307e2206422088a70d042006a72208417f4c0d04024020080d00410821110c020b2008102c22110d010c050b2007200e6a2112200920106a2113200a41ffffff1f7121144100210a4100210f4100210d41002115410821112007210e200921080340024002400240024020070d00200721050c010b2012200e470d01410021052014450d002007102e0b024020132008460d00200829031021062002200841306a2903003703002003200841286a290300370300200841186a290300210b2001200841386a290300370300200020082903203703c002200841c0006a2108200521070c020b200c41ffffff1f710d040c050b200e29031021062002200e41306a2903003703002003200e41286a290300370300200e41186a290300210b2001200e41386a2903003703002000200e2903203703c002200e41c0006a210e0b200041f0026a41186a22102001290300370300200041f0026a41106a2216200229030037030020042003290300370300200020002903c0023703f00202400240200d2015470d00024002402007450d00417f2012200e6b4106752205201320086b4106756a221520152005491b21050c010b201320086b41067521050b200d417f200541016a221520152005491b6a2205200d490d06200f2005200f20054b1b22054104200541044b1bad42307e2217422088a74541037421052017a7211502400240200d0d00200041003602a0020c010b200041083602a8022000200a3602a402200020113602a0020b20004180026a20152005200041a0026a107d20002802880221052000280280024101460d012000280284022111200541306e21150b2011200a6a220520002903f002370300200429030021172016290300211820102903002119200541286a200b370300200541206a2006370300200541186a2019370300200541106a2018370300200541086a2017370300200a41306a210a200f41026a210f200d41016a210d0c010b0b20050d040c030b0240024002400240200841306e221520054f0d00201541017422082005200820054b1b22054104200541044b1bad42307e2206422088a74541037421052006a721080240024020150d00200041003602f0020c010b200041f0026a41086a4108360200200020113602f0022000201541306c3602f4020b200041c0026a20082005200041f0026a107d200041c8026a280200210520002802c0024101460d0120002802c4022111200541306e21150b200d0d014100210d201121050c020b20050d050c040b200741206a2108200d410674220d41406a4106762101201121050340200841086a2903002106200841106a290300210b200841186a2903002117200841706a220e41086a290300211820082903002119200541206a200e290300370300200541286a2018370300200541186a2017370300200541106a200b370300200541086a200637030020052019370300200541306a2105200841c0006a2108200d41406a220d0d000b200141016a210d0b0240200a41ffffff1f71450d002007102e0b0240200f450d00200f410674210e200941206a21080340200841086a2903002106200841106a290300210b200841186a2903002117200841706a220a41086a290300211820082903002119200541206a200a290300370300200541286a2018370300200541186a2017370300200541106a200b370300200541086a200637030020052019370300200541306a2105200841c0006a2108200d41016a210d200e41406a220e0d000b0b200c41ffffff1f71450d010b2009102e0b0240024020002802d401220820002802d80122056b200d490d0020002802d00121080c010b2005200d6a220e2005490d0120084101742205200e2005200e4b1b22054104200541044b1bad42307e2206422088a74541037421052006a7210e0240024020080d00200041003602f0020c010b200041f0026a41086a4108360200200020002802d0013602f0022000200841306c3602f4020b200041c0026a200e2005200041f0026a107d200041c8026a2802002105024020002802c0024101460d00200020002802c40222083602d0012000200541306e3602d40120002802d80121050c010b20050d020c010b2008200541306c6a2011200d41306c10e9081a200020002802d801200d6a22083602d80102402015450d00201541306c450d002011102e20002802d80121080b02400240024020080d00200041f8026a41013a00002000410c3a00f002200041f0026a10fe01024020002802d4012205450d00200541306c450d0020002802d001102e0b42c0b2cd3b21060c010b200841ffffff3f712008470d022008410574220d417f4c0d0220002802d0012105200d102c2204450d030240024002400240200d410576221020084f0d00200041f0026a41086a4101360200200020043602f0022000200d3602f402200041c0026a200d410476220d2008200d20084b1b220d4104200d41044b1b220d410574200d41ffffff3f71200d46200041f0026a107d200041c0026a41086a280200210d20002802c0024101460d0120002802c4022104200d41057621100b20052005200841306c6a470d01410021160c020b200d0d050c040b200841306c220d41506a41306e210e20042108034020082005290000370000200841186a200541186a290000370000200841106a200541106a290000370000200841086a200541086a290000370000200841206a2108200541306a2105200d41506a220d0d000b200e41016a21160b200041d8026a4200370300200041c0026a41106a4200370300200041c0026a41086a22054200370300200042003703c002200041f0026a41f8fcc60041081081022005200041f0026a41086a2208290000370300200020002900f0023703c002200041f0026a41a8aac800410d108102200241086a2008290000370000200220002900f002370000200041b8016a200041c0026a412010f802200041b8016a41106a290300211a20002903c001211b20002802b8012103200041f0016a418ef9c0004110108102200041c0026a41fbafc90041061081024120102c2205450d03200042203702f402200020053602f002200041f0026a200041f0016a41101074200041f0026a200041c0026a4110107420002802f8022205417f4c0d0220002802f002210d0240024020050d00410121080c010b2005102c2208450d040b2008200d200510e9082108200041e0016a41086a200041f0026a41086a220a280200220d360200200041dc016a41026a220e200041c0026a41026a2d00003a0000200020002903f00222063703e001200020002f00c0023b01dc0120004194026a200d3602002000200536028802200020053602840220002008360280022000200637028c02200041003a009c022000410b360298022000419f026a200e2d00003a0000200020002f01dc013b009d02200041f0026a20004180026a10fa02024002400240024002400240024002400240024020002802b00322050d000240200028028402450d00200028028002102e0b4108211c4100211d024020004190026a280200450d00200028028c02102e0b4100210c0c010b200041c0026a41186a2208200041f0026a41186a290300370300200041c0026a41106a220d200041f0026a41106a290300370300200041c0026a41086a200a290300370300200020002903f0023703c002200041f0026a41286a2903002106200029039003210b20002902b403211741c000102c221c450d0c201c200b370300201c20002903c002370310201c2017370234201c2005360230201c2006370308201c41186a200041c0026a41086a2202290300370300201c41206a200d290300370300201c41286a2008290300370300200041a0026a41186a20004180026a41186a290300370300200041a0026a41106a20004180026a41106a290300370300200041a0026a41086a20004180026a41086a29030037030020002000290380023703a002200041f0026a200041a0026a10fa020240024020002802b00322070d004101210c4101211d0c010b41f400210d20004198036a21014101210c4101211d0340200041c0026a41186a200041f0026a41186a220e2903002206370300200041c0026a41106a200041f0026a41106a220a290300220b3703002002200041f0026a41086a220f2903002217370300200020002903f00222183703c00220012903002119200029039003211e20002902b403211f200e2006370300200a200b370300200f2017370300200020183703f0020240201d200c470d00200c41016a2205200c490d0e200c41017422082005200820054b1b22054104200541044b1b220541ffffff1f7120054641037421082005410674210502400240200c0d00200041003602f0010c010b200041083602f8012000201c3602f0012000200c4106743602f4010b200041e0026a20052008200041f0016a107d20002802e802210520002802e0024101460d0420002802e402211c2005410676210c0b201c200d6a2205414c6a220820193703082008201e3703002005415c6a220820002903f002370300200841086a200f290300370300200841106a200a290300370300200841186a200e2903003703002005201f3702002005417c6a2007360200200d41c0006a210d201d41016a211d200041f0026a200041a0026a10fa0220002802b00322070d000b0b024020002802a402450d0020002802a002102e0b200041b0026a280200450d0020002802ac02102e0b201d41ffffff1f7141386c2220417f4c0d0a0240024020200d00410821210c010b2020102c2221450d0c0b201a420020031b2122201b420020031b212302400240201c201d41067422246a201c470d0041002125420021260c010b200041a8016a20232022427f420010e708200041a8016a41086a2903002206420020002903a801220b42015620064200522006501b22051b211e200b420120051b211f201c201d4106746a2101200041f0026a41306a2103200041f0026a41106a210d4100210e4100212520212105201c21080340200d41186a220f200841286a290300370300200d41106a2207200841206a290300370300200d41086a2202200841186a290300370300200d200841106a2903003703002000200841086a2903003703f802200020082903003703f0022003200841306a10c80120004198016a20002903f00220002903f802201f201e10e70820002903a003210620002802a803210a2005200029039801427f20004198016a41086a290300501b3703002002290300210b20072903002117200f2903002118200d2903002119200541306a200a360200200541206a2018370300200541186a2017370300200541106a200b370300200541086a2019370300200541286a2006370300417f200e200a6a220a200a200e491b210e200541386a2105202541016a21252001200841c0006a2208470d000b200ead42a895b1037e21260b20003502d801211a200020163602a802200020103602a402200020043602a0022025ad221b42387e2206422088a70d0a2006a7220e417f4c0d0a02400240200e0d00410821050c010b200e102c2205450d0c0b200041003602c802200020053602c0022000200e41386e22073602c4020240200e4138490d00200041f0026a41286a210f200041f0026a41086a210d202121082007210a0340200e450d01200a450d04200d2008290308370300200d41186a200841206a290300370300200d41106a200841186a290300370300200d41086a200841106a290300370300200020082903003703f002200f200841286a10c801200541306a200041f0026a41306a290300370300200541286a200f290300370300200541206a200041f0026a41206a290300370300200541186a200041f0026a41186a290300370300200541106a200041f0026a41106a290300370300200541086a200d290300370300200520002903f002370300200541386a2105200e41486a210e200841386a2108200a417f6a220a0d000b0b200020253602c80242002106200042003703f00220004180026a4121200041a0026a200041c0026a200041f0026a10fb022000280280024101460d032000418c026a28020021014108210220004180026a41086a280200212720004180026a41186a280200212820004194026a280200212920004180026a41106a280200212a200028028402212b200041f0026a41186a22054200370300200041f0026a41106a222c4200370300200041f0026a41086a22084200370300200042003703f002200041f0016a418ef9c00041101081022008200041f0016a41086a290000370300200020002900f0013703f002200041c0026a41c7c3cb0041071081022005200041c0026a41086a290000370300202c20002900c002370300200041c0026a200041f0026a10f102024020002802c0022205450d00200041f0026a412010ff0120002902c4022106200521020b2006422088a7220d410674410675220541ffffff3f712005470d0a20054105742208417f4c0d0a0240024020080d004101212d0c010b2008102c222d450d0c0b02400240024002402008410576222e20054f0d002008410476220e2005200e20054b1b22054104200541044b1b220541ffffff3f71200546210e200541057421050240024020080d00200041003602f0020c010b200041f8026a4101360200200020083602f4022000202d3602f0020b200041c0026a2005200e200041f0026a107d200041c8026a280200210520002802c0024101460d0120002802c402212d2005410576212e0b200d0d014100212f0c020b20050d0d0c0c0b200d410674210e200d41067441406a4106762103200041f0026a41206a210d202d2105200221080340200041f0026a41386a200841386a290300370300200041f0026a41306a200841306a290300370300200041f0026a41286a200841286a290300370300200d200841206a290300370300200041c0026a41086a220a200d41086a290300370300200041c0026a41106a220f200d41106a290300370300200041c0026a41186a2207200d41186a2903003703002000200d2903003703c002200541186a2007290300370000200541106a200f290300370000200541086a200a290300370000200520002903c002370000200541206a2105200841c0006a2108200e41406a220e0d000b200341016a212f0b0240200642ffffff1f83500d002002102e0b4200210620004188036a4200370300200041f0026a41106a420037030041082102200041f0026a41086a22054200370300200042003703f002200041f0016a418ef9c00041101081022005200041f0016a41086a290000370300200020002900f0013703f002200041c0026a41a8f9c0004109108102202c41086a200041c0026a41086a290000370000202c20002900c002370000200041c0026a200041f0026a10f102024020002802c0022205450d00200041f0026a412010ff0120002902c4022106200521020b2006422088a7220d410674410675220541ffffff3f712005470d0a20054105742208417f4c0d0a0240024020080d00410121300c010b2008102c2230450d0c0b02400240024002402008410576223120054f0d002008410476220e2005200e20054b1b22054104200541044b1b220541ffffff3f71200546210e200541057421050240024020080d00200041003602f0020c010b200041f8026a4101360200200020083602f402200020303602f0020b200041c0026a2005200e200041f0026a107d200041c8026a280200210520002802c0024101460d0120002802c4022130200541057621310b200d0d01410021050c020b20050d0d0c0c0b200d410674210e200d41067441406a4106762103200041f0026a41206a210d20302105200221080340200041f0026a41386a200841386a290300370300200041f0026a41306a200841306a290300370300200041f0026a41286a200841286a290300370300200d200841206a290300370300200041c0026a41086a220a200d41086a290300370300200041c0026a41106a220f200d41106a290300370300200041c0026a41186a2207200d41186a2903003703002000200d2903003703c002200541186a2007290300370000200541106a200f290300370000200541086a200a290300370000200520002903c002370000200541206a2105200841c0006a2108200e41406a220e0d000b200341016a21050b0240200642ffffff1f83500d002002102e0b2030200510fc020240024020010d00202b21080c010b20004188016a20232022427f420010e70820004188016a41086a29030022064200200029038801220b42015620064200522006501b22051b2117200b420120051b2118200141306c210d202b2105202b21080340200541286a2903002106200541206a290300210b200041c0026a41186a220e200541186a290300370300200041c0026a41106a220a200541106a290300370300200041c0026a41086a220f200541086a290300370300200020052903003703c0020240200b2006844200510d00200041d8006a200642002018420010e808200041e8006a20174200200b420010e808200041f8006a200b42002018420010e808200041f0026a41186a200e290300220b370300200041f0026a41106a200a2903002219370300200041f0026a41086a200f290300221e370300200020002903c002221f3703f002200841186a200b370300200841106a2019370300200841086a201e3703002008201f370300200841286a427f200041f8006a41086a290300220b200029035820002903687c7c221920064200522017420052712000290360420052722000290370420052722019200b5472220e1b3703002008427f2000290378200e1b370320200841306a21080b200541306a2105200d41506a220d0d000b0b024002402008202b6b41306d2232410d2032410d491b223341306c22050d00410821340c010b2005102c2234450d0c0b203220336b2135024020330d00410021360c070b203341306c220d41506a41306e210e20342105202b21080340200841086a2903002106200841106a290300210b200841186a2903002117200841206a290300211820082903002119200541286a200841286a290300370300200541206a2018370300200541186a2017370300200541106a200b370300200541086a200637030020052019370300200541306a2105200841306a2108200d41506a220d0d000b200e41016a213602402035450d002033450d00202b202b203341306c6a203541306c10ea081a0b0240203641144b0d00203641014d0d07200e417f6a2105200e41306c20346a41506a21084102210d034020362005490d032008200d10fd02200841506a2108200d41016a210d2005417f6a2205417f470d000c080b0b2036410176ad42307e2206422088a70d0a2006a72237417f4c0d0a2037102c2238450d0b203441506a2139203441f07e6a213a410421104100213b410021032036213c0340203c213d4100213c4101210d0240203d417f6a220e450d000240024002400240024002402034200e41306c6a203d41306c220f20346a41a07f6a412010ec084100480d00203d417e6a210e203a200f6a21054100213c4100210803400240200e2008470d00203d210d0c080b200841016a2108200541306a2005412010ec08210d200541506a2105200d417f4a0d000b200841016a210d2008417f73203d6a210e0c010b203a200f6a2105024003400240200e4101470d004100210e0c020b200e417f6a210e200541306a2005412010ec082108200541506a210520084100480d000b0b203d200e490d01203d20364b0d02203d200e6b220d410176220a450d002039200f6a21052034200e41306c6a21080340200041c0026a41186a220f200841186a2207290300370300200041c0026a41106a2202200841106a2201290300370300200041c0026a41086a2204200841086a2216290300370300200020082903003703c002200841206a22112903002106200541286a2215290300210b200541086a22132903002117200541106a22122903002118200541186a221429030021192005290300211e2011200541206a22092903003703002007201937030020012018370300201620173703002008201e370300200841286a220729030021172007200b370300201220022903003703002014200f29030037030020132004290300370300200520002903c0023703002015201737030020092006370300200541506a2105200841306a2108200a417f6a220a0d000b0b0240200e0d00200e213c0c050b0240200d41094d0d00200e213c0c050b203d20364b0d02203d200e6b210d200e417f6a21052039200e41306c6a21080340203d2005490d0b2008200d41016a220d10fd022005417f6a220e20054f0d04200841506a2108200e2105200d410a490d000c040b0b200e203d41e4d1cc001057000b203d203641e4d1cc00104d000b203d200e417f6a2205490d07203d203641f4d1cc00104d000b200e41016a213c0b02402003203b470d00203b41016a2205203b490d0c203b41017422082005200820054b1b22054104200541044b1b220541ffffffff017120054641027421082005410374210502400240203b0d00200041003602f0020c010b200041043602f802200020103602f0022000203b4103743602f4020b200041c0026a20052008200041f0026a107d20002802c8022105024020002802c0024101470d0020050d0e0c0d0b20002802c40221102005410376213b0b201020034103746a2205200d3602042005203c360200200341016a22132103024020134102490d0002400240024003400240024002400240201020132203417f6a22134103746a2205280200450d00200341037420106a220a41746a280200220e200528020422084d0d00200341024d0d0820102003417d6a22054103746a280204220d2008200e6a4d0d01200341034d0d08200a41646a280200200d200e6a4b0d080c010b20034103490d012005280204210820102003417d6a22054103746a280204210d0b200d2008490d010b2003417e6a21050b02402003200541016a22124d0d00200320054d0d02201020054103746a2216280204221420162802006a2205201020124103746a22112802002215490d03200520364b0d04201641046a21092034201541306c6a22012011280204220441306c22086a210e200541306c210d02400240200520156b220f20046b22052004490d0020382001200810e908220220086a210a0240024020044101480d00200f20044a0d010b200121052002210d0c020b2034200d6a21072002210d2001210503402005200e200d200e200d412010ec08410048220f1b2208290300370300200541286a200841286a290300370300200541206a200841206a290300370300200541186a200841186a290300370300200541106a200841106a290300370300200541086a200841086a290300370300200d200d41306a200f1b210d200541306a2105200e41306a200e200f1b220e20074f0d02200a200d4b0d000c020b0b2038200e200541306c220810e908220220086a210a0240024020044101480d00200541014e0d010b200e21052002210d0c010b2039200d6a2108200e21050340200541506a210e200a41506a210f2008200e200f200f200e412010ec0841004822071b220d290300370300200841286a200d41286a290300370300200841206a200d41206a290300370300200841186a200d41186a290300370300200841106a200d41106a290300370300200841086a200d41086a290300370300200a200f20071b210a02402001200e200520071b2205490d002002210d0c020b200841506a21082002210d2002200a490d000b0b2005200d200a200d6b220820084130706b10e9081a2009201420046a360200201620153602002011201141086a20032012417f736a41037410ea081a41012103201341014d0d050c010b0b201220034184d2cc00103c000b200520034194d2cc00103c000b2015200541a4d2cc001057000b2005203641a4d2cc00104d000b203c450d060c000b0b20050d0a0c090b2005203641c4d1cc001056000b200720074188decc00103c000b200028028402210d0240201d450d00201d4106742108201c41346a210503400240200528020041ffffff3f71450d002005417c6a280200102e0b200541c0006a2105200841406a22080d000b0b0240200c41ffffff1f71450d00201c102e0b200d4105460d03200041f8026a41023a00002000410c3a00f002200041f0026a10fe010c030b2005203d41f4d1cc001057000b0240203b41ffffffff0171450d002010102e0b2037413070210520374130490d0020372005460d002038102e0b02402035410176220d450d00203541306c202b6a41506a2105202b21080340200041f0026a41286a220e200841286a220a290300370300200041f0026a41206a220f200841206a2207290300370300200041f0026a41186a2202200841186a2201290300370300200041f0026a41106a2203200841106a2204290300370300200041f0026a41086a2210200841086a2216290300370300200020082903003703f002200541086a22112903002106200541106a2215290300210b200541186a22132903002117200541206a22122903002118200541286a2214290300211920082005290300370300200a201937030020072018370300200120173703002004200b370300201620063703002014200e2903003703002012200f290300370300201320022903003703002015200329030037030020112010290300370300200520002903f002370300200541506a2105200841306a2108200d417f6a220d0d000b0b203541ffffff3f712035470d0320354105742205417f4c0d030240024020050d00410121030c010b2005102c2203450d050b0240024002402005410576221420354f0d00200541047622082035200820354b1b22084104200841044b1b220841ffffff3f71200846210d200841057421080240024020050d00200041003602f0020c010b200041f8026a4101360200200020053602f402200020033602f0020b200041c0026a2008200d200041f0026a107d200041c8026a2802002105024020002802c0024101460d0020002802c40221032005410576211420354521380c020b20050d070c060b203545213820350d00410021150c010b203241306c203341306c6b210d203541306c41506a41306e210e20032105202b2108034020052008290000370000200541186a200841186a290000370000200541106a200841106a290000370000200541086a200841086a290000370000200541206a2105200841306a2108200d41506a220d0d000b200e41016a21150b2003201510fc022036ad42187e2206422088a70d032006a72205417f4c0d030240024020050d004108210f0c010b2005102c220f450d050b0240024002400240200541186e221320364f0d00201341017422082036200820364b1b22084104200841044b1bad42187e2206422088a74541037421082006a7210d02400240200541174b0d00200041003602f0020c010b200041f0026a41086a41083602002000200f3602f0022000201341186c3602f4020b200041c0026a200d2008200041f0026a107d200041c8026a280200210520002802c0024101460d0120002802c402210f200541186e21130b20342034203641306c6a2211462212450d01410021020c020b20050d060c050b2034203641306c22056a210d200541506a41306e210e200f210520342108034020052008360200200541106a4200370300200541086a4200370300200541186a2105200d200841306a2208470d000b200e41016a21020b201c201d4106746a2116024002400240201d0d00201c21040c010b201c21050340200541c0006a210420052802302210450d010240200541346a290200221e422088a74105742208450d00200541086a290300211820052903002119201020086a2101410021072010210a024003404100210502400240024020020e020201000b410021052002210803402008410176220e20056a210d200d2005200f200d41186c6a280200200a412010ec084101481b21052008200e6b220841014b0d000b0b200f200541186c6a2208280200200a412010ec080d00200220054d0d02200041386a20184200411020076bad2206420010e808200041c8006a201942002006420010e8082008427f20082903082206427f20002903482000290340420052200041c8006a41086a290300220b20002903387c2217200b547222051b7c220b200b200654220d200841106a220e2903002206427f201720051b7c200dad7c220b200654200b2006511b22051b370308200e427f200b20051b3703000b200741016a21072001200a41206a220a470d000c020b0b2005200241b4f9c000103c000b0240201e42ffffff3f83500d002010102e0b2004210520042016470d000c020b0b20162004460d000340200441c0006a21050240200441346a28020041ffffff3f71450d00200441306a280200102e0b2005210420162005470d000b0b0240200c41ffffff1f71450d00201c102e0b0240024002402002450d00200f280200220d450d00024020024101460d00200f200241186c6a210a200f41186a2105200f41106a2903002106200f290308210b03402005280200220e450d012006200541106a2903002217200b200541086a290300221856200620175620062017511b22081b2106200b201820081b210b200d200e20081b210d200541186a2205200a470d000b0b02402013450d00201341186c450d00200f102e0b200d0d014100210e0c020b4100210e2013450d01201341186c450d01200f102e0c010b200041a0026a41186a200d41186a290000370300200041a0026a41106a200d41106a290000370300200041a0026a41086a200d41086a2900003703002000200d2900003703a0024101210e0b203641ffffff3f712036470d0320364105742205417f4c0d030240024020050d00410121070c010b2005102c2207450d050b02400240024002402005410576220920364f0d00200541047622082036200820364b1b22084104200841044b1b220841ffffff3f71200846210d200841057421080240024020050d00200041003602f0020c010b200041f8026a4101360200200020053602f402200020073602f0020b200041c0026a2008200d200041f0026a107d200041c8026a280200210520002802c0024101460d0120002802c4022107200541057621090b2012450d01410021010c020b20050d060c050b2034203641306c22056a210d200541506a41306e210a2007210520342108034020052008290000370000200541186a200841186a290000370000200541106a200841106a290000370000200541086a200841086a290000370000200541206a2105200d200841306a2208470d000b200a41016a21010b200041f0026a20072001202d202f10fe02200041f0026a41106a280200210c20002802f402211d20002802f002211c20002802fc02223d20004184036a2802002007200110f502200041f9026a2202200041a0026a41086a29030037000020004181036a200041a0026a41106a29030037000020004189036a200041a0026a41186a2903003700002000200e3a00f002200020002903a0023700f102200041f0026a10f602024020002802d80141306c2205450d0020002802d001220e20056a2104200041c0026a41086a2116200041a8036a21100340200e41306a210f0240024002400240024020010e020300010b410021050c010b410021052001210803402008410176220a20056a210d200d20052007200d4105746a200e412010ec084101481b21052008200a6b220841014b0d000b0b200720054105746a200e412010ec08450d010b024002400240024020150e020300010b410021050c010b410021052015210803402008410176220a20056a210d200d20052003200d4105746a200e412010ec084101481b21052008200a6b220841014b0d000b0b200320054105746a200e412010ec08450d010b200041186a200e200e290320200e41286a220829030010cb02200029031821062000200041186a41086a290300220b3703f802200020063703f002024002402006200b844200520d002000200041f0026a3602c002200041c0026a10cc020c010b200042f0f2bda1a7ee9cb9f9003703c002200041f0026a200041c0026a10cd02200041086a200041f0026a2006200b10fd01200041c0026a41106a200041086a41086a2903002218200b7d20002903082217200654ad7d200b20187d2006201754ad7d20172006562018200b562018200b511b22051b3703002000201720067d200620177d20051b3703c80220002005ad3703c0020240024020050d00200020163602f001200041f0016a10cc020c010b200020163602f001200041f0016a10ce020b200041f0026a41186a200b3703002000200637038003200041063a00f8022000410e3a00f002200041f0026a10fe010b200e2903202106200e41186a290000210b200e41106a2900002117200e29000021182010200829030037030020022018370000200241086a200e41086a290000370000200241106a2017370000200241186a200b370000200041053a00f8022000410c3a00f002200020063703a003200041f0026a10fe010b200f210e200f2004470d000b0b201120346b41306e220541ffffff1f712005470d0320054106742208417f4c0d030240024020080d00410821100c010b2008102c2210450d050b4100210d200041003602e802200020103602e0022000200841067622163602e4020240201620054f0d002008410576220e2005200e20054b1b22054104200541044b1b220541ffffff1f71200546410374210e200541067421050240024020080d00200041003602f0020c010b200041f0026a41086a4108360200200020083602f402200020103602f0020b200041c0026a2005200e200041f0026a107d200041c8026a280200210520002802c0024101460d03200020002802c40222103602e0022000200541067622163602e4020b024020120d0020002802d80141306c2101203641306c41506a41306e211520002802d00121042010210f2034210203402002220e41306a2102200121052004210802400340024020050d00420021064200210b0c020b200541506a21052008200e412010ec08210d200841306a220a2108200d0d000b200a41706a22052903002106200541086a290300210b0b200041c0026a41186a2205200e41186a290300370300200041c0026a41106a2208200e41106a290300370300200041c0026a41086a220d200e41086a290300370300200e41286a2903002117200e2903202118200e2903002119200f2006370310200f41186a200b370300200020193703c002200f2018370300200f2017370308200f41386a2005290300370300200f41306a2008290300370300200f20002903c002370320200f41286a200d290300370300200f41c0006a210f20022011470d000b201541016a210d0b2000200d3602e80220004188036a4200370300200041f0026a41106a4200370300200041f0026a41086a22054200370300200042003703f002200041f0016a418ef9c00041101081022005200041f0016a41086a290000370300200020002900f0013703f002200041c0026a41c7c3cb004107108102202c41086a200041c0026a41086a290000370000202c20002900c002370000200041f0026a200041e0026a10ff0202402016450d002010102e0b203541ffffff1f712035470d0320354106742205417f4c0d030240024020050d00410821150c010b2005102c2215450d050b41002108200041003602e802200020153602e0022000200541067622133602e402024002400240201320354f0d00200541057622082035200820354b1b22084104200841044b1b220841ffffff1f71200846410374210d200841067421080240024020050d00200041003602f0020c010b200041f0026a41086a4108360200200020053602f402200020153602f0020b200041c0026a2008200d200041f0026a107d200041c8026a2802002105024020002802c0024101460d00200020002802c40222153602e0022000200541067622133602e4020c020b20050d070c060b20380d010b202b203541306c6a211020002802d80141306c2116203541306c41506a41306e211220002802d00121112015210a202b210f0340200f41286a2903002106200f290320210b200041f0026a41186a2202200f41186a290000370300200041f0026a41106a2201200f41106a290000370300200041f0026a41086a2204200f41086a2900003703002000200f2900003703f002200f41306a210f201621052011210802400340024020050d0042002117420021180c020b200541506a21052008200041f0026a412010ec08210d200841306a220e2108200d0d000b200e41706a22052903002117200541086a29030021180b200041c0026a41186a22052002290300370300200041c0026a41106a22082001290300370300200041c0026a41086a220d2004290300370300200020002903f0023703c002200a2006370308200a200b370300200a2017370310200a41186a2018370300200a20002903c002370320200a41286a200d290300370300200a41306a2008290300370300200a41386a2005290300370300200a41c0006a210a200f2010470d000b201241016a21080b200020083602e80202402027450d00202741306c450d00202b102e0b20004188036a220d4200370300200041f0026a41106a22084200370300200041f0026a41086a22054200370300200042003703f002200041f0016a418ef9c00041101081022005200041f0016a41086a220e290000370300200020002900f0013703f002200041c0026a41a8f9c0004109108102202c41086a220a200041c0026a41086a220f290000370000202c20002900c002370000200041f0026a200041e0026a10ff0202402013450d002015102e0b200d42003703002008420037030020054200370300200042003703f002200041f0016a418ef9c00041101081022005200e290000370300200020002900f0013703f002200041c0026a419ef9c000410a108102200a200f290000370000202c20002900c002370000200041f0026a412010ff0120004184036a203636020020082033360200200541003a00002000410c3a00f002200041f0026a410c6a2034360200200041f0026a10fe01200d42003703002008420037030020054200370300200042003703f002200041f0016a418ef9c00041101081022005200e290000370300200020002900f0013703f002200041c0026a41e0a3c200410e108102200a200f290000370000202c20002900c0023700002000200041f0026a4120108e022000280200210220002802042101200d42003703002008420037030020054200370300200042003703f002200041f0016a418ef9c00041101081022005200e290000370300200020002900f0013703f002200041c0026a41e0a3c200410e108102200a200f290000370000202c20002900c0023700002000200141016a410120021b3602c002200041f0026a4120200041c0026a410410b2010240200c41ffffff3f71450d00203d102e0b0240201d41ffffff3f71450d00201c102e0b02402009450d002007102e0b02402014450d002003102e0b02402031450d002030102e0b0240202e450d00202d102e0b02402028450d002028412c6c2108202a210503400240200541046a280200220d450d00200d41246c450d002005280200102e0b2005412c6a2105200841546a22080d000b0b2029450d002029412c6c450d00202a102e0b201b42f094c0337e201a42c0a8ee3f7e7c20267c2106201a4280e1eb177e210b02402025450d00202541386c21082021412c6a210503400240200528020041ffffff3f71450d002005417c6a280200102e0b200541386a2105200841486a22080d000b0b2006200b7c2106201b42c0f0f50b7e210b02402024450d002020450d002021102e0b2006200b7c2106201a4280c2d72f7e210b024020002802d4012205450d00200541306c450d0020002802d001102e0b2006200b7c21060b200041f0036a240020060f0b20050d010b1038000b1036000b9d0202017f037e230041d0006b220324002003200236020420032001360200200341086a2001200210ed0202400240200328020822010d00420021040c010b200328020c210202400240200341086a41086a2802004110490d00200141086a290000210520012900002106420121040c010b20034100360220200342013703182003410a36022c200320033602282003200341186a360234200341cc006a41013602002003420137023c200341909dc5003602382003200341286a360248200341346a419cebc000200341386a103d1a2003280218200328022010ef020240200328021c450d002003280218102e0b420021040b2002450d002001102e0b2000200637030820002004370300200041106a2005370300200341d0006a24000bbf0402017f057e23004180016b220524002005200436020c20052003360208200541d4e2cc00200141086a20024108491b36021020054100200241786a2201200120024b1b360214200541d8006a200541106a109301200541386a41086a2202200541e1006a290000370300200541386a41106a2201200541e9006a290000370300200541386a41186a2203200541f1006a290000370300200520052900593703380240024002400240024020052d00584101460d00200541186a41186a2003290300370300200541186a41106a2001290300370300200541186a41086a2002290300370300200520052903383703182005200541086a10ab0102402005280200450d00200541003602580c030b200541d8006a200541086a200528020410920120052802582202450d02200529025c21060240200528020c22014110490d0020052005280208220341106a3602082005200141706a220436020c200441104f0d020b200642ffffff3f83500d022002102e0c020b200041003602400c030b200341086a2900002107200329000021082005200141606a36020c2005200341206a36020820020d010b200041003602400c010b200341186a29000021092003290010210a20002005290318370000200041186a200541186a41186a290300370000200041106a200541186a41106a290300370000200041086a200541186a41086a290300370000200041386a20093703002000200a370330200041286a20073703002000200837032020002006370244200020023602400b20054180016a24000be60203057f017e037f230041d0006b220224002002200128020c200141146a280200108b050240024020022802002203450d00200141086a2104200141106a210502400340024002402004280200220620022902042207422088a722084b0d0020012802002003200610ec08450d010b2007a7450d032003102e0c030b02402005280200450d00200128020c102e0b2001200336020c2005200737020020022003200810ed020240024020022802002203450d002002280208210920022802042108024020012d001c450d00200128020c200128021410ff010b2001280214220a20042802002206490d032002200128020c20066a200a20066b20032009200128021811050020022802400d012008450d002003102e0b2002200128020c2001280214108b05200228020022030d010c030b0b2000200241d00010e9081a2008450d022003102e0c020b2006200a41e89ec5001056000b200041003602400b200241d0006a24000bea6609037f017e017f017e187f037e097f027e067f230041c0036b22052400200541b0026a41086a2206200241086a280200360200200520022902003703b00220054180026a41086a2202200341086a2802003602002005200329020037038002200541e0026a200541b0026a20054180026a10b904200541086a41086a200541e0026a41086a22032802002207360200200520052903e0022208370308200541186a41086a200541f4026a2802002209360200200520052902ec02220a37031820062007360200200520083703b002200220093602002005200a37038002200541e0026a2001200541b0026a20054180026a10e206200541c8006a41086a2206200541f8026a2802003602002005200541f0026a2903003703482003280200210b200541e0026a410c6a280200210220052802e402210c024002400240024002400240024002400240024020052802e0024101460d00200541286a41086a200628020036020020052005290348370328024020042903004201520d00200541286a2004280208200441106a290300200441186a29030010c0040b200c20024102746a210702400240024020010d00200c2103200c210d0c010b200c2103200c210d2002450d0020024102742104200c2103200c210d03402003220241046a210320022802002202450d012002280208220641016a41004c0d022002200636020802400240200241f4006a2d00000d0020022002280200417f6a220636020020060d01200241046a22062006280200417f6a220636020020060d012002102e0c010b200d2002360200200d41046a210d2001417f6a2201450d020b2004417c6a22040d000b200721030b0240200720036b2202450d00200241027541027421020340200328020022012001280200417f6a3602000240200328020022012802000d00200141046a22012001280200417f6a3602002003280200220141046a2802000d002001102e0b200341046a21032002417c6a22020d000b0b02400240200d200c6b220e410275220f41144b0d00200f41014d0d0641022103200c200f417e6a22024102746a21010340200f2002490d022001200310e306200341016a21032001417c6a21012002417f6a2202417f470d000c070b0b200f410176220341ffffffff03712003470d0b20034102742210417f4c0d0b2010102c2211450d0a200c417c6a2112200c41746a2113410421144100211541002116200f2117034020172109410021174101210202402009417f6a2204450d00024002400240024002400240024002400240024002400240200c20044102746a2802002203280208220241016a41004c0d0020032002360208200c2009417e6a22074102746a2802002202280208220141016a41004c0d01200328025021032002200136020820032002280250490d04201320094102746a210341002117410021010340024020072001470d00200921020c0e0b200341046a2802002202280208220441016a41004c0d032002200436020820032802002204280208220641016a41004c0d0420022802502102200420063602082003417c6a2103200141016a2101200220042802504f0d000b200141016a21022001417f7320096a21040c050b41bcd9cc00411820054180026a41c4f8c90041d4f8c900103e000b41bcd9cc00411820054180026a41c4f8c90041d4f8c900103e000b41bcd9cc00411820054180026a41c4f8c90041d4f8c900103e000b41bcd9cc00411820054180026a41c4f8c90041d4f8c900103e000b2013200941027422076a210302400340024020044101470d00410021040c020b200341046a2802002202280208220141016a41004c0d032002200136020820032802002201280208220641016a41004c0d0420022802502102200120063602082004417f6a21042003417c6a210320022001280250490d000b0b20092004490d032009200f4b0d04200920046b22024101762206450d00200c20044102746a2103201220076a21010340200328020021072003200128020036020020012007360200200341046a21032001417c6a21012006417f6a22060d000b0b024020040d00200421170c070b0240200241094d0d00200421170c070b2009200f4b0d04200920046b21022004417f6a2103201220044102746a2101034020092003490d0c2001200241016a220210e3062003417f6a220420034f0d062001417c6a2101200421032002410a490d000c060b0b41bcd9cc00411820054180026a41c4f8c90041d4f8c900103e000b41bcd9cc00411820054180026a41c4f8c90041d4f8c900103e000b2004200941e4d1cc001057000b2009200f41e4d1cc00104d000b20092004417f6a2203490d062009200f41f4d1cc00104d000b200441016a21170b0240024002400240024020162015460d00201621030c010b201541016a22032015490d10201541017422012003200120034b1b22034104200341044b1b220341ffffffff01712003464102742101200341037421030240024020150d00200541003602e0020c010b200541043602e802200520143602e002200520154103743602e4020b20054180026a20032001200541e0026a107d20052802880221012005280280024101460d01200528028402211420152103200141037621150b201420034103746a2203200236020420032017360200201641016a22182116201841024f0d010c020b20010d0d0c0e0b024002400240024002400240024003400240024002400240201420182216417f6a22184103746a2203280200450d00201641037420146a220641746a2802002204200328020422024d0d00201641024d0d0c20142016417d6a22034103746a2802042201200220046a4d0d01201641034d0d0c200641646a280200200120046a4b0d0c0c010b20164103490d012003280204210220142016417d6a22034103746a28020421010b20012002490d010b2016417e6a21030b02402016200341016a22194d0d00201620034d0d02201420034103746a221a280204221b201a2802006a2203201420194103746a221c280200221d490d032003200f4b0d04200c201d4102746a221e201c280204221f41027422026a210120034102742106024002402003201d6b2207201f6b2203201f490d002011201e200210e908220320026a210402400240201f4101480d002007201f4a0d010b201e2102200321030c020b200c20066a212020032103201e2102034020012802002206280208220741016a41004c0d082006200736020820032802002207280208220941016a41004c0d092006280250210620072009360208200220012003200620072802504922061b2802003602002003200341046a20061b2103200241046a2102200141046a200120061b220120204f0d02200420034b0d000c020b0b201120012003410274220210e908222020026a210402400240201f4101480d00200341014e0d010b20012102202021030c010b201220066a21092001210203402004417c6a22032802002201280208220641016a41004c0d09200120063602082002417c6a22062802002207280208222141016a41004c0d0a2001280250210120072021360208200920062003200120072802504922011b2802003602002004200320011b21040240201e2006200220011b2202490d00202021030c020b2009417c6a21092020210320202004490d000b0b20022003200420036b417c7110e9081a201a41046a201b201f6a360200201a201d360200201c201c41086a20162019417f736a41037410ea081a41012116201841014d0d090c010b0b201920164184d2cc00103c000b200320164194d2cc00103c000b201d200341a4d2cc001057000b2003200f41a4d2cc00104d000b41bcd9cc00411820054180026a41c4f8c90041d4f8c900103e000b41bcd9cc00411820054180026a41c4f8c90041d4f8c900103e000b41bcd9cc00411820054180026a41c4f8c90041d4f8c900103e000b41bcd9cc00411820054180026a41c4f8c90041d4f8c900103e000b2017450d050c000b0b2002200f41c4d1cc001056000b41bcd9cc00411820054180026a4190b7c00041a0b7c000103e000b2000200c360204200041013602002000410c6a2002360200200041086a200b3602000c030b2003200941f4d1cc001057000b0240201541ffffffff0171450d002014102e0b2010450d002011102e0b20052802302102200528022c21012005200528022822033602402005200136023c2005200336023820052003200241e0006c6a221a36024441042122024002402002450d00200541b0026a410472211c200541e0026a41346a21020240034020054180026a41286a2204200341286a29030037030020054180026a41206a2206200341206a29030037030020054180026a41186a2207200341186a29030037030020054180026a41106a2209200341106a29030037030020054180026a41086a2220200341086a2903003703002005200329030037038002200341306a2802002101200541c8006a41086a22212003413c6a290200370300200541c8006a41106a221e200341c4006a290200370300200541c8006a41186a2216200341cc006a290200370300200541c8006a41206a221f200341d4006a290200370300200541c8006a41286a2214200341dc006a2802003602002005200341346a290200370348024020010d00200341e0006a211a0c020b200541e0026a41286a2004290300370300200541e0026a41206a2006290300370300200541e0026a41186a2007290300370300200541e0026a41106a2009290300370300200541e0026a41086a202029030037030020022005290348370200200241086a2021290300370200200241106a201e290300370200200241186a2016290300370200200241206a201f290300370200200241286a201428020036020020052005290380023703e0022005200136029003200541b0026a200541e0026a10bd07024020052802b00222010d00200341e0006a2203201a470d010c020b0b200541f8006a41106a201c41106a2902002208370300200541d8016a41086a201c41086a290200220a370300200541d8016a41106a2008370300200541d8016a41186a201c41186a2902002223370300200541d8016a41206a201c41206a29020022243703002005200341e0006a3602402005201c29020022253703d801200541b0016a41206a22032024370300200541b0016a41186a22022023370300200541b0016a41106a22042008370300200541b0016a41086a2206200a370300200520253703b001412c102c2222450d0720222001360200202220052903b0013702042022410c6a2006290300370200202241146a20042903003702002022411c6a2002290300370200202241246a2003290300370200200541a0016a41086a200541386a41086a2903002208370300200520052903383703a001024002402008a7220120052802ac01221a470d0041012126410121270c010b200541e0026a41346a2102200541b0026a410472211c41012126410121270240034020054180026a41286a22042001220341286a29030037030020054180026a41206a2206200341206a29030037030020054180026a41186a2207200341186a29030037030020054180026a41106a2209200341106a29030037030020054180026a41086a2220200341086a2903003703002005200329030037038002200341306a2802002101200541c8006a41086a22212003413c6a290200370300200541c8006a41106a221e200341c4006a290200370300200541c8006a41186a2216200341cc006a290200370300200541c8006a41206a221f200341d4006a290200370300200541c8006a41286a2214200341dc006a2802003602002005200341346a2902003703482001450d01200541e0026a41286a2004290300370300200541e0026a41206a22042006290300370300200541e0026a41186a22062007290300370300200541e0026a41106a22072009290300370300200541e0026a41086a2209202029030037030020022005290348370200200241086a2021290300370200200241106a201e290300370200200241186a2016290300370200200241206a201f290300370200200241286a201428020036020020052005290380023703e0022005200136029003200541b0026a200541e0026a10bd07024020052802b00222010d00200341e0006a2201201a470d010c020b200541f8006a41106a201c41106a2902002208370300200541d8016a41086a201c41086a290200220a370300200541d8016a41106a2008370300200541d8016a41186a201c41186a2902002223370300200541d8016a41206a201c41206a29020022243703002005200341e0006a3602a8012005201c29020022253703d801200541b0016a41206a22032024370300200541b0016a41186a22202023370300200541b0016a41106a22212008370300200541b0016a41086a221e200a370300200520253703b0012004200329030037030020062020290300370300200720212903003703002009201e290300370300200520052903b0013703e0020240024020272026470d00202641016a22032026490d0d202641017422202003202020034b1b22034104200341044b1bad422c7e2208422088a74541027421032008a721200240024020260d0020054100360280020c010b2005410436028802200520223602800220052026412c6c360284020b200541b0026a2020200320054180026a107d20052802b802210320052802b0024101460d0120052802b40221222003412c6e21260b20222027412c6c6a220320013602002003410c6a2009290300370200200320052903e002370204200341146a20072903003702002003411c6a2006290300370200200341246a2004290300370200202741016a212720052802a801220120052802ac01221a470d010c030b0b2003450d0a0c090b2005200341e0006a3602a8010b200541a0016a10ac020c020b2005201a3602400b200541386a10ac0241002127410021260b200541053602b00220222027412c6c6a2128202221290240034020292028460d012029280208220341ffffffff03712003470d072029280200210402400240200341027422020d004104212a0c010b2002102c222a450d070b02400240024002402002410276222b20034f0d00200241017622012003200120034b1b22014104200141044b1b220141ffffffff03712001464102742106200141027421010240024020020d00200541003602e0020c010b200541043602e802200520023602e4022005202a3602e0020b20054180026a20012006200541e0026a107d20052802880221022005280280024101460d01200528028402212a2002410276212b0b20042004200341246c22016a470d01410021030c020b2002450d090c080b200441206a21032001415c6a41246e2104202a2102034020022003280200360200200341246a2103200241046a21022001415c6a22010d000b200441016a21030b4101450d0720034103742202417f4c0d070240024020020d004108212c0c010b2002102c222c450d070b0240024002402002410376222d20034f0d00200241027622012003200120034b1b22014104200141044b1b41037421010240024020020d00200541003602e0020c010b200541083602e802200520023602e4022005202c3602e0020b20054180026a20014108200541e0026a107d200528028802210202402005280280024101460d00200528028402212c2002410376212d0c020b2002450d0a0c090b20030d00410021130c010b20034102742201417c6a4102762104202c2103202a2102034020032002350200370300200341086a2103200241046a21022001417c6a22010d000b200441016a21130b2029412c6a212e202c201341037422046a21064200210820042103202c210202400240024002400340024020030d00024020130d004100212041082107410021130c050b0240428094ebdc0320082008428094ebdc035422031b2008428094ebdc0320031b7d222f4200520d00201341ffffffff01712013470d0e20134103742203417f4c0d0e2003102c2207450d0d2007202c200310e9081a200341037621200c050b202f2013ad2230822124202f20308021252006202c6b2203410376220241ffffffff00712002470d0d20034101742203417f4c0d0d0240024020030d004108211f0c010b2003102c221f450d0d0b02400240024002402003410476223120024f0d00200341037622012002200120024b1b22024104200241044b1b220241ffffffff00712002464103742101200241047421020240024020030d00200541003602e0020c010b200541083602e802200520033602e4022005201f3602e0020b20054180026a20022001200541e0026a107d20052802880221032005280280024101460d01200528028402211f200341047621310b201341037441786a2232410376211541002102201f2103202c21010340200341086a200129030037030020032002360200200341106a2103200241016a2102200141086a2101200441786a22040d000b201541016a210f02402032419f014b22330d002032450d07200f410474201f6a41706a210741002104201521010340200f20012203417f6a2201490d040240200f20016b22204102490d00201f20034104746a220341086a2206290300201f20014104746a220241086a2209290300220a5a0d00200228020021212002200329030037030020092006290300370300024020204103490d002004417f6a210941002102200721030340200341186a2206290300200a5a0d0120092002460d06200341086a20062903003703002003200341106a22062903003703002006210320042002417f6a2202470d000b200621030b2003200a370308200320213602000b200741706a21072004417f6a210420010d000c080b0b200f410176220341ffffffff00712003470d1020034104742234417f4c0d102034102c2212450d0f201f41706a2135201f41586a213641002110410421144100211e200f211803400240024020182207417f6a22030d0041012106410021180c010b0240024002400240024002400240201f20034104746a41086a29030020074104742209201f6a41686a290300220a540d002007417e6a2104203620096a210241002118410021030340024020042003470d00200721060c090b200341016a2103200a200229030022235a2101200241706a21022023210a20010d000b200341016a21062003417f7320076a21030c010b203620096a210202400340024020034101470d00410021030c020b2003417f6a2103200a20022903002223542101200241706a21022023210a20010d000b0b20072003490d012007200f4b0d02200720036b22064101762204450d00201f20034104746a2102203520096a21010340200541e0026a41086a2209200241086a2220290300370300200520022903003703e002200141086a2221290300210a200220012903003703002020200a37030020212009290300370300200120052903e002370300200241106a2102200141706a21012004417f6a22040d000b0b024020030d00200321180c060b0240200641094d0d00200321180c060b2007200f4b0d03200320076b2101201f20034104746a2109034020072003417f6a2218490d050240200720186b22064102490d00201f20034104746a220341086a2204290300201f20184104746a220241086a2220290300220a5a0d00200228020021212002200329030037030020202004290300370300024020064103490d0041012102200921030340200341186a2204290300200a5a0d01200120026a4101460d06200341086a20042903003703002003200341106a2204290300370300200421032001200241016a22026a0d000b200421030b2003200a370308200320213602000b2018450d06200941706a21092001417f6a2101201821032006410a4f0d060c000b0b2003200741e4d1cc001057000b2007200f41e4d1cc00104d000b2002200641d4d1cc00103c000b20072003417f6a2218490d002007200f41f4d1cc00104d000b2018200741f4d1cc001057000b02400240024002400240201e2010460d00201e21030c010b201041016a22032010490d15201041017422022003200220034b1b22034104200341044b1b220341ffffffff01712003464102742102200341037421030240024020100d00200541003602e0020c010b200541043602e802200520143602e002200520104103743602e4020b20054180026a20032002200541e0026a107d20052802880221022005280280024101460d01200528028402211420102103200241037621100b201420034103746a2203200636020420032018360200201e41016a2219211e201941024f0d010c020b2002450d130c120b0240024002400340024002400240024020142019221e417f6a22194103746a2203280200450d00201e41037420146a220641746a2802002204200328020422024d0d00201e41024d0d082014201e417d6a22034103746a2802042201200220046a4d0d01201e41034d0d08200641646a280200200120046a4b0d080c010b201e4103490d01200328020421022014201e417d6a22034103746a28020421010b20012002490d010b201e417e6a21030b0240201e200341016a221b4d0d00201e20034d0d02201420034103746a221a2802042211201a2802006a22032014201b4103746a221c280200221d490d032003200f4b0d04201a41046a2117201f201d4104746a2221201c280204221641047422026a210420034104742106024002402003201d6b220720166b22032016490d0020122021200210e908222020026a21010240024020164101480d00200720164a0d010b20212103202021020c020b201f20066a210920202102202121030340200320042002200441086a290300200241086a2903005422061b2207290300370300200341086a200741086a2903003703002002200241106a20061b2102200341106a2103200441106a200420061b220420094f0d02200120024b0d000c020b0b201220042003410474220210e908220720026a21010240024020164101480d00200341014e0d010b20042103200721020c010b203520066a21062004210303402006200341706a2204200141706a2209200141786a290300200341786a2903005422021b2220290300370300200641086a202041086a2903003703002001200920021b2101024020212004200320021b2203490d00200721020c020b200641706a21062007210220072001490d000b0b20032002200120026b41707110e9081a2017201120166a360200201a201d360200201c201c41086a201e201b417f736a41037410ea081a4101211e201941014d0d050c010b0b201b201e4184d2cc00103c000b2003201e4194d2cc00103c000b201d200341a4d2cc001057000b2003200f41a4d2cc00104d000b2018450d060c000b0b2003450d0f0c0e0b410120026b202041d4d1cc00103c000b2001200f41c4d1cc001056000b200341786a2103200820022903007c220a2008542101200241086a2102200a21082001450d000b0240202d450d00202c102e0b411e212041b4d2cc0021030c030b0240201041ffffffff0171450d002014102e0b2034450d002012102e0b0240024002400240024002400240024002400240200842ff93ebdc03560d00428094ebdc032030802123410021030240202f2030540d004100210320132102034020152003490d09201f20034104746a2201290308220a20257c2208200a540d08200141086a2008370300024020082023540d00200341016a20137021030b2002417f6a22020d000b0b2024500d01034020152003490d06201f20034104746a2202290308220a42017c2208200a540d05200241086a2008370300024020082023540d00200341016a20137021030b2024427f7c222450450d000c020b0b201f29030821232013417f6a220121030240202f2030540d00034020152003490d04201f20034104746a220242002002290308220820257d220a200a20085622021b200a20021b220a370308200320012003417f6a2204200420034b1b200a2023561b21032024202520087d420020021b7c21242013417f6a22130d000b0b2024500d00034020152003490d0202400240201f20034104746a22022903082208427f7c220a2008580d0020012003417f6a2202200220034b1b21030c010b200241086a200a370300200320012003417f6a2202200220034b1b200a2023561b21032024427f7c21240b20244200520d000b0b02400240024020330d002032450d0a200f410474201f6a41706a2107410021040340200f20152203417f6a2215490d030240200f20156b22204102490d00201f20034104746a2203280200201f20154104746a220228020022064f0d0020022903082108200241086a200341086a29030037030020022003290300370300024020204103490d002004417f6a210941002101200721030340200341106a220228020020064f0d0120092001460d05200341086a200341186a290300370300200320022903003703002002210320042001417f6a2201470d000b200221030b20032008370308200320063602000b200741706a21072004417f6a210420150d000c0b0b0b200f410176220341ffffffff00712003470d1320034104742235417f4c0d132035102c2215450d12201f41706a2113201f41506a211041002112410421144100211e200f211803400240024020182209417f6a22030d0041012107410021180c010b0240024002400240024002400240201f20034104746a28020020094104742220201f6a41606a2802002202490d002009417e6a2107201020206a210141002118410021030340024020072003470d00200921070c090b200341016a21032002200128020022044f2106200141706a21012004210220060d000b200341016a21072003417f7320096a21030c010b201020206a210102400340024020034101470d00410021030c020b2003417f6a2103200220012802002204492106200141706a21012004210220060d000b0b20092003490d012009200f4b0d02200920036b22074101762204450d00201f20034104746a2102201320206a21010340200541e0026a41086a2206200241086a2220290300370300200520022903003703e002200141086a22212903002108200220012903003703002020200837030020212006290300370300200120052903e002370300200241106a2102200141706a21012004417f6a22040d000b0b024020030d00200321180c060b0240200741094d0d00200321180c060b2009200f4b0d03200320096b2104201f20034104746a2120034020092003417f6a2218490d050240200920186b22074102490d00201f20034104746a2203280200201f20184104746a220228020022064f0d0020022903082108200241086a200341086a29030037030020022003290300370300024020074103490d0041012102202021030340200341106a220128020020064f0d01200420026a4101460d06200341086a200341186a29030037030020032001290300370300200121032004200241016a22026a0d000b200121030b20032008370308200320063602000b2018450d06202041706a21202004417f6a2104201821032007410a4f0d060c000b0b2003200941e4d1cc001057000b2009200f41e4d1cc00104d000b2002200741d4d1cc00103c000b20092003417f6a2218490d002009200f41f4d1cc00104d000b2018200941f4d1cc001057000b02400240024002400240201e2012460d00201e21030c010b201241016a22032012490d18201241017422022003200220034b1b22034104200341044b1b220341ffffffff01712003464102742102200341037421030240024020120d00200541003602e0020c010b200541043602e802200520143602e002200520124103743602e4020b20054180026a20032002200541e0026a107d20052802880221022005280280024101460d01200528028402211420122103200241037621120b201420034103746a2203200736020420032018360200201e41016a2219211e201941024f0d010c020b2002450d160c150b0240024002400340024002400240024020142019221e417f6a22194103746a2203280200450d00201e41037420146a220641746a2802002204200328020422024d0d00201e41024d0d082014201e417d6a22034103746a2802042201200220046a4d0d01201e41034d0d08200641646a280200200120046a4b0d080c010b201e4103490d01200328020421022014201e417d6a22034103746a28020421010b20012002490d010b201e417e6a21030b0240201e200341016a221b4d0d00201e20034d0d02201420034103746a221a2802042211201a2802006a22032014201b4103746a221c280200221d490d032003200f4b0d04201a41046a2117201f201d4104746a2221201c280204221641047422026a210120034104742106024002402003201d6b220720166b22032016490d0020152021200210e908220320026a21040240024020164101480d00200720164a0d010b20212102200321030c020b201f20066a210920032103202121020340200220012003200128020020032802004922061b2207290300370300200241086a200741086a2903003703002003200341106a20061b2103200241106a2102200141106a200120061b220120094f0d02200420034b0d000c020b0b201520012003410474220210e908220920026a21040240024020164101480d00200341014e0d010b20012102200921030c010b201320066a21062001210203402006200241706a2203200441706a2201200128020020032802004922071b2220290300370300200641086a202041086a2903003703002004200120071b2104024020212003200220071b2202490d00200921030c020b200641706a21062009210320092004490d000b0b20022003200420036b41707110e9081a2017201120166a360200201a201d360200201c201c41086a201e201b417f736a41037410ea081a4101211e201941014d0d050c010b0b201b201e4184d2cc00103c000b2003201e4194d2cc00103c000b201d200341a4d2cc001057000b2003200f41a4d2cc00104d000b2018450d090c000b0b410120016b202041d4d1cc00103c000b2015200f41c4d1cc001056000b2003200f419cd4cc00103c000b2003200f418cd4cc00103c000b41b4d3cc00412641fcd3cc00105d000b2003200f41ecd3cc00103c000b41b4d3cc00412641dcd3cc00105d000b2003200f41a4d3cc00103c000b0240201241ffffffff0171450d002014102e0b2035450d002015102e0b200f4104742201410475220341ffffffff01712003470d0920034103742202417f4c0d090240024020020d00410821070c010b2002102c2207450d090b02402002410376222020034f0d00200241027622042003200420034b1b22034104200341044b1b220341ffffffff01712003464103742104200341037421030240024020020d00200541003602e0020c010b200541083602e802200520023602e402200520073602e0020b20054180026a20032004200541e0026a107d20052802880221032005280280024101460d082005280284022107200341037621200b201f41086a2103200141706a410476210420072102034020022003290300370300200341106a2103200241086a2102200141706a22010d000b200441016a21132031450d00201f102e0b20134103742201410375220341ffffffff03712003470d0820034102742202417f4c0d080240024020020d00410421090c010b2002102c2209450d080b02400240024002402002410276222120034f0d00200241017622042003200420034b1b22034104200341044b1b220341ffffffff03712003464102742104200341027421030240024020020d00200541003602e0020c010b200541043602e802200520023602e402200520093602e0020b20054180026a20032004200541e0026a107d20052802880221032005280280024101460d012005280284022109200341027621210b200720016a22062007470d01410021010c020b2003450d0a0c090b4100210120092103200721020340200320022903002208a7417f2008428080808010541b2204418094ebdc032004418094ebdc03491b360200200141016a2101200341046a21032006200241086a2202470d000b0b02402020450d002007102e0b0240202d450d00202c102e0b02402001410274410275220320292802082202200220034b1b2201450d00202928020041206a210320092102034020032002280200360200200241046a2102200341246a21032001417f6a22010d000b0b410021032021450d002009102e0b0240202b450d00202a102e0b202e21292003450d000b200541033602b00220052020ad4220862003ad843702b4020b024020052802b00222034105470d00200e4102752203ad42307e2208422088a70d062008a72202417f4c0d060240024020020d004108211f0c010b2002102c221f450d060b0240024002400240200241306e221420034f0d00201441017422012003200120034b1b22014104200141044b1bad42307e2208422088a74541037421012008a72104024002402002412f4b0d00200541003602e0020c010b200541e0026a41086a41083602002005201f3602e0022005201441306c3602e4020b20054180026a20042001200541e0026a107d20054188026a28020021022005280280024101460d01200528028402211f200241306e21140b200c200d470d014100211a200c21020c020b2002450d080c070b200e417c6a41027641016a211a200541e0026a41086a2107200541e0026a41106a2109200541e0026a41186a212041002106201f2101200c2102024003402002220341046a21020240200328020022030d002006211a0c020b2003280208220441016a222141004c0d05200320213602082007200341dc006a2900003703002009200341e4006a2900003703002020200341ec006a2900003703002005200341d4006a2900003703e002200441026a41004c0d062003200436020820054180026a41086a2204200729030037030020054180026a41106a2221200929030037030020054180026a41186a221e2020290300370300200520052903e00237038002200341c8006a29030021082003290340210a20032003280200417f6a2216360200024020160d00200341046a22162016280200417f6a221636020020160d002003102e0b20012005290380023703002004290300212320212903002124201e2903002125200141286a2008370300200141206a200a370300200141186a2025370300200141106a2024370300200141086a2023370300200141306a2101200641016a2106200d2002470d000b200d21020b200d20026b220e41027521030b0240200e450d00200341027421030340200228020022012001280200417f6a3602000240200228020022012802000d00200141046a22012001280200417f6a3602002002280200220141046a2802000d002001102e0b200241046a21022003417c6a22030d000b0b0240200b41ffffffff0371450d00200c102e0b2000201f36020420004100360200200041186a2027360200200041146a2026360200200041106a20223602002000410c6a201a360200200041086a20143602000c010b200041086a20052902b402370200200020033602042000410136020002402027450d002027412c6c21022022210303400240200341046a2802002201450d00200141246c450d002003280200102e0b2003412c6a2103200241546a22020d000b0b02402026450d002026412c6c450d002022102e0b0240200e450d00200c210203402002220328020022022002280200417f6a360200200341046a21020240200328020022012802000d00200141046a22012001280200417f6a3602002003280200220341046a2802000d002003102e0b200d2002470d000b0b200b41ffffffff0371450d00200c102e0b200541c0036a24000f0b41bcd9cc00411820054180026a41f09cc50041c09dc500103e000b41bcd9cc00411820054180026a41f09cc50041d09dc500103e000b2003450d010b1036000b1038000bad0f07167f017e017f017e017f017e027f230041306b220224000240024002400240024002400240200141144b0d00200141014d0d0620002001417e6a22034105746a2104410221050340200320014b0d022004200510fa07200541016a2105200441606a21042003417f6a2203417f470d000c070b0b2001410176220341ffffff3f712003470d0220034105742206417f4c0d022006102c2207450d01200041606a2108200041a07f6a21094104210a4100210b4100210c2001210d0340200d210e4100210d410121050240200e417f6a220f450d000240024002400240024002402000200f4105746a200e410574221020006a41406a412010ec084100480d00200e417e6a210f200920106a21034100210d4100210403400240200f2004470d00200e21050c080b200441016a2104200341206a2003412010ec082105200341606a21032005417f4a0d000b200441016a21052004417f73200e6a210f0c010b200920106a2103024003400240200f4101470d004100210f0c020b200f417f6a210f200341206a2003412010ec082104200341606a210320044100480d000b0b200e200f490d01200e20014b0d02200e200f6b22054101762211450d00200820106a21032000200f4105746a21040340200241186a2210200441186a2212290000370300200241106a2213200441106a2214290000370300200241086a2215200441086a221629000037030020022004290000370300200341086a22172900002118200341106a2219290000211a200341186a221b290000211c200420032900003700002012201c3700002014201a37000020162018370000201b2010290300370000201920132903003700002017201529030037000020032002290300370000200341606a2103200441206a21042011417f6a22110d000b0b0240200f0d00200f210d0c050b0240200541094d0d00200f210d0c050b200e20014b0d02200e200f6b2105200f417f6a21032008200f4105746a21040340200e2003490d0a2004200541016a220510fa072003417f6a220f20034f0d04200441606a2104200f21032005410a490d000c040b0b200f200e41e4d1cc001057000b200e200141e4d1cc00104d000b200e200f417f6a2203490d06200e200141f4d1cc00104d000b200f41016a210d0b02400240024002400240200c200b460d00200c21030c010b200b41016a2203200b490d07200b41017422042003200420034b1b22034104200341044b1b220341ffffffff017120034641027421042003410374210302400240200b0d00200241003602000c010b200241043602082002200a3602002002200b4103743602040b200241206a200320042002107d2002280228210420022802204101460d012002280224210a200b21032004410376210b0b200a20034103746a220320053602042003200d360200200c41016a221b210c201b41024f0d010c020b20040d040c050b02400240024003400240024002400240200a201b220c417f6a221b4103746a2203280200450d00200c410374200a6a221141746a280200220f200328020422044d0d00200c41024d0d08200a200c417d6a22034103746a28020422052004200f6a4d0d01200c41034d0d08201141646a2802002005200f6a4b0d080c010b200c4103490d0120032802042104200a200c417d6a22034103746a28020421050b20052004490d010b200c417e6a21030b0240200c200341016a220e4d0d00200c20034d0d02200a20034103746a2216280204221d20162802006a2203200a200e4103746a22172802002219490d03200320014b0d04201641046a211e200020194105746a22142017280204221541057422046a210f2003410574210502400240200320196b221020156b22032015490d0020072014200410e908221320046a21110240024020154101480d00201020154a0d010b20142103201321040c020b200020056a2112201321042014210303402003200f2004200f2004412010ec0841004822101b2205290000370000200341186a200541186a290000370000200341106a200541106a290000370000200341086a200541086a2900003700002004200441206a20101b2104200341206a2103200f41206a200f20101b220f20124f0d02201120044b0d000c020b0b2007200f2003410574220410e908221320046a21110240024020154101480d00200341014e0d010b200f2103201321040c010b200820056a2105200f21030340200341606a2104201141606a210f20052004200f200f2004412010ec0841004822121b2210290000370000200541186a201041186a290000370000200541106a201041106a290000370000200541086a201041086a2900003700002011200f20121b2111024020142004200320121b2203490d00201321040c020b200541606a21052013210420132011490d000b0b20032004201120046b41607110e9081a201e201d20156a360200201620193602002017201741086a200c200e417f736a41037410ea081a4101210c201b41014d0d050c010b0b200e200c4184d2cc00103c000b2003200c4194d2cc00103c000b2019200341a4d2cc001057000b2003200141a4d2cc00104d000b200d450d050c000b0b2003200141c4d1cc001056000b1036000b1038000b2003200e41f4d1cc001057000b0240200b41ffffffff0171450d00200a102e0b2006450d002007102e0b200241306a24000b840403027f017e097f230041306b220224000240024020014102490d00200041306a22032000412010ec08417f4a0d002000290300210420002003290300370300200241286a2205200041286a2206290300370300200241206a200041206a2207290300370300200241186a2208200041186a2209290300370300200241106a220a200041106a220b290300370300200241086a220c200041086a220d290300370300200d200341086a290300370300200b200341106a2903003703002009200341186a2903003703002007200341206a2903003703002006200341286a2903003703002002200437030041012107024020014103490d00410020016b2109200041e0006a210341012107034020032002412010ec08417f4a0d0120012007460d03200341506a22062003290300370300200641286a200341286a290300370300200641206a200341206a290300370300200641186a200341186a290300370300200641106a200341106a290300370300200641086a200341086a290300370300200341306a21032009200741016a22076a417f470d000b0b2000200741306c6a22032002290300370300200341286a2005290300370300200341206a200241206a290300370300200341186a2008290300370300200341106a200a290300370300200341086a200c2903003703000b200241306a24000f0b2001200141d4d1cc00103c000bd809010c7f230041c0006b220524002003410020041b21062001410020021b2107200341206a200320041b2108200141206a200120021b2109200120024105746a210a200320044105746a210b410021034100210c4101210d410021014100210e4101210f0240024003400240024020060d0020070d012000200d36020c200020013602082000200e3602042000200f360200200041146a2003360200200041106a200c360200200541c0006a24000f0b02402007450d00024020062007412010ec0822020d00410020092009200a4622021b2107410020082008200b4622041b21062009200941206a20021b21092008200841206a20041b21080c030b2002417f4a0d01200541186a2202200641186a290000370300200541106a2204200641106a290000370300200541086a2210200641086a29000037030020052006290000370300024002402003200c470d00200341016a22062003490d062003410174220c2006200c20064b1b22064104200641044b1b220641ffffff3f71200646210c200641057421060240024020030d00200541003602300c010b200541013602382005200d360230200520034105743602340b200541206a2006200c200541306a107d2005280228210620052802204101460d012005280224210d2006410576210c0b200d20034105746a22062005290300370000200641186a2002290300370000200641106a2004290300370000200641086a2010290300370000410020082008200b4622021b2106200341016a21032008200841206a20021b21080c030b20060d030c040b200541186a2202200641186a290000370300200541106a2204200641106a290000370300200541086a2210200641086a29000037030020052006290000370300024002402003200c470d00200341016a22072003490d05200341017422062007200620074b1b22074104200741044b1b220741ffffff3f712007462106200741057421070240024020030d00200541003602300c010b200541013602382005200d360230200520034105743602340b200541206a20072006200541306a107d2005280228210720052802204101460d012005280224210d2007410576210c0b200d20034105746a22072005290300370000200741186a2002290300370000200741106a2004290300370000200741086a201029030037000041002107410020082008200b4622021b2106200341016a21032008200841206a20021b21080c020b20070d020c030b200541186a2202200741186a290000370300200541106a2204200741106a290000370300200541086a2210200741086a29000037030020052007290000370300024002402001200e470d00200141016a22072001490d042001410174220e2007200e20074b1b22074104200741044b1b220741ffffff3f71200746210e200741057421070240024020010d00200541003602300c010b200541013602382005200f360230200520014105743602340b200541206a2007200e200541306a107d2005280228210720052802204101460d012005280224210f2007410576210e0b200f20014105746a22072005290300370000200741186a2002290300370000200741106a2004290300370000200741086a2010290300370000410020092009200a4622021b2107200141016a21012009200941206a20021b21090c010b0b2007450d010b1036000b1038000b810202047f017e230041206b2202240002400240200128020822034106744104722204417f4c0d00200128020021012004102c2205450d0120024100360208200220043602042002200536020020032002107602402003450d002003410674210303402002200141206a41201074200129030021062002200141086a290300370318200220063703102002200241106a41101074200141106a29030021062002200141186a290300370318200220063703102002200241106a41101074200141c0006a2101200341406a22030d000b0b2000412020022802002201200228020810b20102402002280204450d002001102e0b200241206a24000f0b1038000b1036000bc30402057f027e230041f0006b2203240002400240024020022802004113470d00200241086a2d00004104470d00200341c8006a2001108103200341306a200328024822042003280250108203200341d8006a41086a2003413b6a290000370300200341d8006a41106a2205200341c3006a2f00003b0100200320032900333703584101210120032d0032210620032d003121070240024020032d00304101460d00410021010c010b200341186a41106a20052f01003b0100200341186a41086a200341d8006a41086a290300370300200320032903583703180b0240200328024c450d002004102e0b2001450d01200341106a200341186a41106a2f010022013b0100200341086a200341186a41086a29030022083703002003200329031822093703002003413a6a2008370100200341c2006a20013b0100200320063a0031200320073a003020032009370132200341d8006a200341306a10e30220032802582204200328026010e40241ff017121010240200328025c450d002004102e0b20014102460d000240200241146a280200220441c40141c70120011b470d00200228020c41abcecc0041efcfcc0020011b200410ec08450d010b200041800e3b0001200041013a0000200041036a41033a00000c020b200041003a0000200041306a41013a0000200041286a4200370300200041206a4280808080c000370300200041186a4204370300200041106a427f370300200041086a42003703000c010b200041800e3b0001200041013a0000200041036a41013a00000b200341f0006a24000bf50101047f230041306b22022400200241b6d1cc004106108102200241106a41d6f9c0004109108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000bc20602027f027e23004180016b220324002003200236020420032001360200200341086a2001200210ed0202400240200328020822010d00200041003a00000c010b200341106a2802002102200328020c2104200341003a007c024002402002450d00200320012d00003a0068200341013a007c024020024101460d00200320012d00013a0069200341023a007c20024102460d00200320012d00023a006a200341033a007c20024103460d00200320012d00033a006b200341043a007c20024104460d00200320012d00043a006c200341053a007c20024105460d00200320012d00053a006d200341063a007c20024106460d00200320012d00063a006e200341073a007c20024107460d00200320012d00073a006f200341083a007c20024108460d00200320012d00083a0070200341093a007c20024109460d00200320012d00093a00712003410a3a007c2002410a460d00200320012d000a3a00722003410b3a007c2002410b460d00200320012d000b3a00732003410c3a007c2002410c460d00200320012d000c3a00742003410d3a007c2002410d460d00200320012d000d3a00752003410e3a007c2002410e460d00200320012d000e3a00762003410f3a007c2002410f460d00200320012d000f3a0077200341103a007c20024110460d00200320012d00103a0078200341113a007c20024111460d00200320012d00113a0079200341123a007c20024112460d00200320012d00123a007a200341133a007c20024113460d00200341186a41086a200341e8006a41086a2903002205370300200320012d00133a007b200341186a41106a200341e8006a41106a2802002202360200200341143a007c200320032903682206370318200041116a2002360000200041096a200537000020002006370001410121020c020b200341003a007c0b20034100360220200342013703182003410a360234200320033602302003200341186a360264200341fc006a41013602002003420137026c200341909dc5003602682003200341306a360278200341e4006a419cebc000200341e8006a103d1a2003280218200328022010ef020240200328021c450d002003280218102e0b410021020b200020023a00002004450d002001102e0b20034180016a24000bd7c40108017f017e057f017e057f017e217f077e230041e00e6b2201240010840342002102024002400240024020004101460d00200141b0046a41186a22034200370300200141b0046a41106a22044200370300200141b0046a41086a22054200370300200142003703b004200141b8076a41a8f8c60041041081022005200141b8076a41086a2206290000370300200120012900b8073703b00420014198096a41c98bc500410b108102200320014198096a41086a22072900003703002004200129009809370300200141a0046a200141b0046a10850320012903a804210820012802a0042109200141d0046a41186a220a4200370300200141d0046a41106a220b4200370300200141d0046a41086a220c4200370300200142003703d004200141800d6a41a8f8c6004104108102200c200141800d6a41086a220d290000370300200120012900800d3703d004200141800d6a41fa8bc500410a108102200a200d290000370300200b20012900800d37030020014190046a200141d0046a10850320014180046a20012903980442002001280290041b420042e012420010e8080240024002400240024020012903880450450d002001290380042102200342003703002004420037030020054200370300200142003703b004200141b8076a41a8f8c600410410810220052006290000370300200120012900b8073703b00420014198096a41e38bc500410b108102200441086a20072900003700002004200129009809370000200141f0036a200141b0046a108503200220012903f803420020012802f0031b7c220e2002540d014200210242002008420020091b2208200e7d220e200e2008561b42e012540d05200141b0046a41186a22034200370300200141b0046a41106a220f420037030041082107200141b0046a41086a22064200370300200142003703b004200141800d6a41a081ca0041071081022006200141800d6a41086a2205290000370300200120012900800d3703b004200141800d6a41e4d1c100410c10810220032005290000370300200f20012900800d370300200141e8036a200141b0046a4120108e0220012802ec03211020012802e803211120034200370300200f420037030020064200370300200142003703b004200141800d6a41a081ca00410710810220062005290000370300200120012900800d3703b004200141800d6a4188d2c100410d10810220032005290000370300200f20012900800d370300200141b0046a1086032112200141c00c6a41186a22034200370300200141c00c6a41106a220c4200370300200141c00c6a41086a22064200370300200142003703c00c200141800d6a41a081ca00410710810220062005290000370300200120012900800d3703c00c200141800d6a41e4d1c100410c10810220032005290000370300200c20012900800d370300200141e0036a200141c00c6a4120108e0220012802e403210d20012802e0032113200141f0046a10870320034200370300200c420037030020064200370300200142003703c00c200141800d6a41a081ca00410710810220062005290000370300200120012900800d3703c00c200141800d6a41f09dc500410a10810220032005290000370300200c20012900800d370300200141800d6a200141c00c6a10880320012902840d2102200120012802800d2205410120051b22033602e005200120033602d80520012002420020051b22023e02dc05200120032002422088a74105746a3602e405200141003602e805200141800d6a200141d8056a10bd0102400240200141c00d6a280200450d0041d000102c2207450d0a2007200141800d6a41d00010e9081a200141b8076a41106a200141d8056a41106a280200360200200141b8076a41086a200141d8056a41086a290300370300200120012903d8053703b80720014198096a200141b8076a10bd01024002400240200141d8096a2802000d0041012105410121030c010b41d000210641012105410121030340200141800d6a20014198096a41d00010e9081a024020032005470d00200541016a22092005490d0d2005410174220a2009200a20094b1b22094104200941044b1bad42d0007e2202422088a74541037421092002a7210a0240024020050d00200141003602f80a0c010b200141083602800b200120073602f80a2001200541d0006c3602fc0a0b200141e00c6a200a2009200141f80a6a107d20012802e80c210520012802e00c4101460d0320012802e40c2107200541d0006e21050b200720066a200141800d6a41d00010e9081a200641d0006a2106200341016a210320014198096a200141b8076a10bd0120012802d8090d000b0b024020012802bc0741ffffff3f71450d0020012802b807102e0b2001200336028805200120053602840520012007360280050c020b2005450d090c0a0b20014100360288052001420837038005024020012802dc0541ffffff3f71450d0020012802d805102e0b41002105410021030b200141d80c6a4200370300200141d00c6a4200370300200141c00c6a41086a22064200370300200142003703c00c200141800d6a41a081ca0041071081022006200141800d6a41086a2209290000370300200120012900800d3703c00c200141800d6a41e4d1c100410c108102200c41086a2009290000370000200c20012900800d370000200141d8036a200141c00c6a4120108e0220012802dc03210620012802d8032109200141b8076a41bed8c800410810810220014198096a41a4fcc800411210810220012006410020091b3602e00c2001200141e00c6a410410a3013703f80a200141800d6a410c6a200141e00c6a41046a3602002001200141f80a6a41086a3602840d2001200141e00c6a3602880d2001200141f80a6a3602800d200141d8056a200141800d6a107c20012802e005220941206a2206417f4c0d070240024020060d004101210a0c010b2006102c220a450d090b200141003602880d200120063602840d2001200a3602800d200141800d6a200141b8076a41101074200141800d6a20014198096a41101074200141800d6a20012802d805220620091074024020012802dc05450d002006102e0b20012802800d220620012802880d108903024020012802840d450d002006102e0b200141d80c6a4200370300200141d00c6a4200370300200141c00c6a41086a22064200370300200142003703c00c200141800d6a41a081ca0041071081022006200141800d6a41086a2209290000370300200120012900800d3703c00c200141800d6a41e4d1c100410c108102200c41086a2009290000370000200c20012900800d370000200141d0036a200141c00c6a4120108e0220012802d403210620012802d0032109200141b8076a41bed8c800410810810220014198096a41edd8c800410e10810220012006410020091b3602e00c2001200141e00c6a410410a3013703f80a200141800d6a410c6a200141e00c6a41046a3602002001200141f80a6a41086a3602840d2001200141e00c6a3602880d2001200141f80a6a3602800d200141d8056a200141800d6a107c20012802e005220941206a2206417f4c0d070240024020060d004101210a0c010b2006102c220a450d090b200141003602880d200120063602840d2001200a3602800d200141800d6a200141b8076a41101074200141800d6a20014198096a41101074200141800d6a20012802d805220620091074024020012802dc05450d002006102e0b20012802800d220620012802880d108903024020012802840d450d002006102e0b024020030d00200141013a00840d200141083a00800d200141800d6a10fe012005450d05200541d0006c450d052007102e0c050b200141800d6a20014180056a10c601200141a3096a200141800d6a41086a280200360000200120012903800d37009b092001418c0d6a2001419f096a290000370000200141023a00840d200141083a00800d20012001290098093700850d200141800d6a10fe0120012802f8042114200141a0056a20014180056a41086a28020036020020012014360294052001200d410020131b220a36029005200120012903800537039805200141b8056a20014190056a41086a10c601200141003602d005200142013703c80520012802b805211520012802bc05211620012802c00521134104102c2205450d08200142043702d404200120053602d0042001200a3602800d200141d0046a200141800d6a41041074200141800d6a41f996c500108a0320014198096a20012802800d220320012802880d108b03200129029c09420020012802980922051b21022005410120051b2117024020012802840d450d002003102e0b200120024220883e02b404200120173602b004200141c8036a200141b0046a10ab01024020012802c803450d00410021184104210c4100210d0c040b20012802cc03220c20012802b40441246e22052005200c4b1bad42247e2208422088a70d072008a72205417f4c0d070240024020050d00410421190c010b2005102c2219450d090b200541246e211a0240200c0d004100210c0c030b4100210d034002400240024020012802b40422034104490d00200d41016a211820012802b0042207280000211b20012003417c6a22093602b4042001200741046a3602b00441002105200141003a00a00d2003417b6a210302400340200141003a00a80520092005460d01200141800d6a20056a200720056a220641046a2d00003a00002001200641056a3602b0042001200541016a22063a00a00d200120033602b4042003417f6a21032006210520064120470d000b20014198096a41186a2205200141800d6a41186a29030037030020014198096a41106a2203200141800d6a41106a29030037030020014198096a41086a2207200141800d6a41086a290300370300200120012903800d37039809200641ff01714120490d01200141d8056a41086a20072903002208370300200141f80a6a41186a22062005290300370300200141f80a6a41106a22052003290300370300200141f80a6a41086a22032008370300200120012903980922083703d805200120083703f80a200141e00c6a41186a22072006290300370300200141e00c6a41106a22062005290300370300200141e00c6a41086a22092003290300370300200120012903f80a3703e00c200d201a470d03201a41016a2205201a4f0d020c0c0b200541ff0171450d00200141003a00a00d0b410021184104210c0240201a450d00201a41246c450d002019102e0b4100210d0c060b201a41017422032005200320054b1b22054104200541044b1bad42247e2208422088a74541027421052008a7210302400240201a0d00200141003602800d0c010b200141043602880d200120193602800d2001201a41246c3602840d0b20014198096a20032005200141800d6a107d20012802a009210502402001280298094101470d0020050d0b0c0a0b200128029c092119200541246e211a0b2019200d41246c6a2205201b360200200520012903e00c3702042005410c6a2009290300370200200541146a20062903003702002005411c6a20072903003702002018210d2018200c460d030c000b0b41e8b2c40041fa0041e4b3c400105d000b41e8b2c40041fa0041f4b3c400105d000b200c410020191b210d201a410020191b21182019410420191b210c0b200141800d6a41f996c500200141d0046a108c0320014198096a20012802800d220320012802880d108d032001280298092105200129029c092108024020012802840d450d002003102e0b2008420020051b210820012802d804211c20012802d404211d20012802d004211e02402002a7450d002017102e0b2005410120051b211f2008a72119024002400240024002402013450d002008422088a7211a2015201341d0006c6a2117200141800d6a41d0006a2120200141800d6a410c6a211b200141b8076a41c4006a21212015210941002122024002400340200141d8056a41386a22232009220541386a290300370300200141d8056a41306a2224200541306a290300370300200141d8056a41286a2225200541286a290300370300200141d8056a41206a2226200541206a290300370300200141d8056a41186a2206200541186a290300370300200141d8056a41106a2207200541106a290300370300200141d8056a41086a2213200541086a290300370300200141b8076a41086a2203200541cc006a280200360200200120052903003703d8052001200541c4006a2902003703b807200541d0006a2109200541c0006a2802002205450d04200141f80a6a41386a22272023290300370300200141f80a6a41306a22232024290300370300200141f80a6a41286a22242025290300370300200141f80a6a41206a22252026290300370300200141f80a6a41186a22262006290300370300200141f80a6a41106a22282007290300370300200141f80a6a41086a22292013290300370300200141a8056a41086a222a2003280200360200200120012903d8053703f80a200120012903b8073703a805200141b8076a41386a2027290300370300200141b8076a41306a2023290300370300200141b8076a41286a2024290300370300200141b8076a41206a2025290300370300200141b8076a41186a2026290300370300200141b8076a41106a202829030037030020032029290300370300200120012903f80a3703b807200120053602f807202120012903a805370200202141086a202a2802003602004104102c2205450d0c200142043702840d200120053602800d2001200a36029809200141800d6a20014198096a41041074201b41086a41002900819745370000201b41002900f996453700002001200141b8076a36029c0d200141d8056a200141800d6a10ae01024020012802840d450d0020012802800d102e0b200141800d6a200141d8056a108e0320012802800d220320012802880d108f022105024020012802840d450d002003102e0b024002400240024020050d0020014198096a200141b8076a41d00010e9081a200141e00c6a200141c8056a10c801200141800d6a20014198096a41d00010e9081a202041086a200141e00c6a41086a280200360200202020012903e00c37020020014198096a200141d8056a108e03200128029809220520012802a009200141800d6a108f030240200128029c09450d002005102e0b024020012802c40d2205450d00200541306c450d0020012802c00d102e0b024020012802d40d41ffffff3f71450d0020012802d00d102e0b200141b0046a41186a22232006290300370300200141b0046a41106a22242007290300370300200141b0046a41086a22252013290300370300200120012903d8053703b004410021050240200d0e020302000b41002105200d2103034020052003410176220620056a2207200c200741246c6a280200200a4b1b2105200320066b220341014b0d000c020b0b20012802fc072205450d02200541306c450d0220012802f807102e0c020b200c200541246c6a2802002203200a460d0020052003200a496a21050b200141800d6a41186a22062023290300370300200141800d6a41106a22072024290300370300200141800d6a41086a22132025290300370300200120012903b0043703800d200d2005490d020240200d2018470d00201841016a22032018490d0d201841017422262003202620034b1b22034104200341044b1bad42247e2202422088a74541027421032002a721260240024020180d0020014100360298090c010b200141043602a0092001200c360298092001201841246c36029c090b200141e00c6a2026200320014198096a107d20012802e80c210320012802e00c4101460d0420012802e40c210c200341246e21180b200c200541246c6a220341246a2003200d20056b41246c10ea081a2003200a3602002003411c6a2006290300370200200341146a20072903003702002003410c6a2013290300370200200320012903800d370204200141d0046a41186a22032023290300370300200141d0046a41106a22062024290300370300200141d0046a41086a22072025290300370300200120012903b0043703d0040240201a2019470d00201941016a22052019490d0d201941017422132005201320054b1b22054104200541044b1b220541ffffff3f712005462113200541057421050240024020190d00200141003602800d0c010b200141013602880d2001201f3602800d200120194105743602840d0b20014198096a20052013200141800d6a107d20012802a009210502402001280298094101470d0020050d0f0c0e0b200128029c09211f200541057621190b200d41016a210d201f201a4105746a220520012903d004370000200541186a2003290300370000200541106a2006290300370000200541086a200729030037000041012122201a41016a211a0b20092017470d000b201721090c030b2005200d1045000b20030d090c080b2016450d01201641d0006c450d012015102e0c010b024020172009460d0003402009220541d0006a21090240200541c4006a2802002203450d00200341306c450d00200541c0006a280200102e0b20172009470d000b0b02402016450d00201641d0006c450d002015102e0b2022410171450d00024002400240201a450d00201a4105742107200141c40d6a2105201f21030340200141d0046a2003108e03200141800d6a20012802d004220920012802d80410900320014198096a41086a2213200141800d6a41086a29030037030020014198096a41106a2217200141800d6a41106a29030037030020014198096a41186a221b200141800d6a41186a29030037030020014198096a41206a2221200141800d6a41206a29030037030020014198096a41286a2223200141800d6a41286a29030037030020014198096a41306a2224200141800d6a41306a29030037030020014198096a41386a2225200141800d6a41386a290300370300200141e00c6a41086a2226200541086a290200370300200141e00c6a41106a2227200541106a290200370300200141e00c6a41186a2228200541186a280200360200200120012903800d37039809200120052902003703e00c024020012802c00d2206450d00200141b8076a41386a2025290300370300200141b8076a41306a2024290300370300200141b8076a41286a2023290300370300200141b8076a41206a2021290300370300200141b8076a41186a201b290300370300200141b8076a41106a2017290300370300200141b8076a41086a2013290300370300200141d8056a41086a2026290300370300200141d8056a41106a2027290300370300200141d8056a41186a202828020036020020012001290398093703b807200120012903e00c3703d8050b024020012802d404450d002009102e0b20060d02200341206a2103200741606a22070d000b0b42002102410821090c010b200141f80a6a41386a2205200141b8076a41386a290300370300200141f80a6a41306a2213200141b8076a41306a290300370300200141f80a6a41286a2217200141b8076a41286a290300370300200141f80a6a41206a221b200141b8076a41206a290300370300200141f80a6a41186a2221200141b8076a41186a290300370300200141f80a6a41106a2223200141b8076a41106a290300370300200141f80a6a41086a2224200141b8076a41086a290300370300200141c00c6a41086a2225200141d8056a41086a290300370300200141c00c6a41106a2226200141d8056a41106a290300370300200141c00c6a41186a2227200141d8056a41186a280200360200200120012903b8073703f80a200120012903d8053703c00c41e000102c2209450d08200920012903f80a37030020092006360240200920012903c00c370244200941386a2005290300370300200941306a2013290300370300200941286a2017290300370300200941206a201b290300370300200941186a2021290300370300200941106a2023290300370300200941086a2024290300370300200941cc006a2025290300370200200941d4006a2026290300370200200941dc006a2027280200360200024020074120470d0042818080801021020c010b200341206a2113201f201a4105746a222241606a2115200141800d6a41c4006a210542818080801021020340201321030340200141d0046a2003108e03200141800d6a20012802d004220720012802d80410900320014198096a41086a2213200141800d6a41086a222929030037030020014198096a41106a2217200141800d6a41106a222a29030037030020014198096a41186a221b200141800d6a41186a222029030037030020014198096a41206a2221200141800d6a41206a29030037030020014198096a41286a2223200141800d6a41286a29030037030020014198096a41306a2224200141800d6a41306a29030037030020014198096a41386a2225200141800d6a41386a290300370300200141e00c6a41086a2226200541086a290200370300200141e00c6a41106a2227200541106a290200370300200141e00c6a41186a2228200541186a280200360200200120012903800d37039809200120052902003703e00c024020012802c00d2206450d00200141b8076a41386a2025290300370300200141b8076a41306a2024290300370300200141b8076a41286a2023290300370300200141b8076a41206a2021290300370300200141b8076a41186a201b290300370300200141b8076a41106a2017290300370300200141b8076a41086a2013290300370300200141f80a6a41086a2026290300370300200141f80a6a41106a2027290300370300200141f80a6a41186a202828020036020020012001290398093703b807200120012903e00c3703f80a0b024020012802d404450d002007102e0b024020060d002022200341206a2203470d010c030b0b200141d8056a41386a2207200141b8076a41386a2217290300370300200141d8056a41306a2213200141b8076a41306a221b290300370300200141d8056a41286a2227200141b8076a41286a2221290300370300200141d8056a41206a2228200141b8076a41206a2223290300370300200141d8056a41186a2216200141b8076a41186a2224290300370300200141d8056a41106a222b200141b8076a41106a2225290300370300200141d8056a41086a222c200141b8076a41086a2226290300370300200141c00c6a41086a222d200141f80a6a41086a290300370300200141c00c6a41106a222e200141f80a6a41106a290300370300200141c00c6a41186a222f200141f80a6a41186a280200360200200120012903b8073703d805200120012903f80a3703c00c2026202c2903003703002025202b290300370300202420162903003703002023202829030037030020212027290300370300201b201329030037030020172007290300370300200120012903d8053703b8072029202d290300370300202a202e2903003703002020202f280200360200200120012903c00c3703800d024002402002422088a722072002a7460d00200221080c010b200741016a22132007490d0920074101742227201320132027491b22134104201341044b1bad42e0007e2208422088a74541037421132008a721270240024020070d0020014100360298090c010b200141083602a00920012009360298092001200741e0006c36029c090b200141f80a6a2027201320014198096a107d20012802800b211320012802f80a4101460d0420012802fc0a2109201341e0006ead21080b200341206a21132009200741e0006c6a220720012903b807370300200741106a2025290300370300200741086a2026290300370300201b290300210e20172903002130202129030021312023290300213220242903002133200741c0006a2006360200200741186a2033370300200741206a2032370300200741286a2031370300200741386a2030370300200741306a200e370300200741c4006a20012903800d370200200741cc006a2029290300370200200741d4006a202a290300370200200741dc006a2020280200360200200842ffffffff0f8320024280808080107c4280808080708384210220152003470d000b0b200141a00d6a200d3602002001419c0d6a2018360200200141940d6a201a360200200141900d6a20193602002001200c3602980d2001201f36028c0d2001201c3602880d2001201d3602840d2001201e3602800d200d41246c41046a2205417f4c0d060240024020050d00410121030c010b2005102c2203450d080b200141003602c007200120053602bc07200120033602b807200d200141b8076a10760240200d450d00200c200d41246c6a2106200c210503402001200528020036029809200141b8076a20014198096a410410744120102c2203450d092001422037029c09200120033602980920014198096a200541046a220541201074200141b8076a200128029809220320012802a00910740240200128029c09450d002003102e0b200541206a22052006470d000b0b20014198096a41f996c500108a03200128029809220520012802a009200141b8076a10c5020240200128029c09450d002005102e0b024020012802bc07450d0020012802b807102e0b20014198096a41f996c500200141800d6a108c03200128029809220520012802a0092001418c0d6a1091030240200128029c09450d002005102e0b0240201d450d00201e102e0b0240201941ffffff3f71450d00201f102e0b2018450d02201841246c450d02200c102e0c020b0240201d450d00201e102e0b0240201941ffffff3f71450d00201f102e0b4100210902402018450d00201841246c450d00200c102e0b0c010b20130d050c040b024020012802cc0541ffffff3f71450d0020012802c805102e0b024020090d0020012802980521070240200141a0056a2802002205450d00200541d0006c2103200741c4006a21050340024020052802002206450d00200641306c450d002005417c6a280200102e0b200541d0006a2105200341b07f6a22030d000b0b024020014190056a410c6a2802002205450d00200541d0006c450d002007102e0b41bceacc00410c10ef0241adeacc00410f10ef020c010b4100210602400240024002402014410a6e417f732002422088a722076a220320074b0d0020144101201441014b1b2205418094ebdc036e2005418094ebdc03704100476a22064101200641014b1b220620054b0d012005200341036c220320052003491b20066ead428094ebdc037e200520066ead8042ffffffff0f834280bbb0217e428094ebdc0380a721060b200741ffffffff03712007470d0620074102742205417f4c0d060240024020050d004104210c0c010b2005102c220c450d080b02402005410276220d20074f0d00200541017622032007200320074b1b22034104200341044b1b220341ffffffff0371200346410274210d200341027421030240024020050d00200141003602800d0c010b200141880d6a4104360200200120053602840d2001200c3602800d0b20014198096a2003200d200141800d6a107d200141a0096a280200210502402001280298094101460d00200128029c09210c2005410276210d0c030b20050d080c070b20070d01410021050c020b41d0d8c800411941bcd7cc001039000b20072103200c2105034020052006360200200541046a21052003417f6a22030d000b200721050b200141b8036a20092007200c20052001280290051092034104102c2205450d04200142043702bc07200120053602b8072001200a3602800d200141b8076a200141800d6a41041074200141cc076a41002900819745370200200141002900f996453702c407200141b3096a200141b8076a41186a280200360000200141ab096a200141b8076a41106a290300370000200141a3096a20012903c007370000200120012903b80737009b09200141890d6a200141a0096a290000370000200141910d6a20014198096a41106a290000370000200141800d6a41186a200141af096a290000370000200141a00d6a41013a0000200141053a00800d20012001290098093700810d200141800d6a10fe010240200d450d00200c102e0b02402007450d00200741e0006c2103200941d4006a210503400240200541706a2802002206450d00200641306c450d002005416c6a280200102e0b0240200528020041ffffff3f71450d002005417c6a280200102e0b200541e0006a2105200341a07f6a22030d000b0b02402002a72205450d00200541e0006c450d002009102e0b20012802980521070240200141a0056a2802002205450d00200541d0006c2103200741c4006a21050340024020052802002206450d00200641306c450d002005417c6a280200102e0b200541d0006a2105200341b07f6a22030d000b0b2001419c056a2802002205450d00200541d0006c450d002007102e0b024020012802f40441ffffff3f71450d0020012802f004102e0b200141b0046a41186a22184200370300200141b0046a41106a221a4200370300200141b0046a41086a22174200370300200142003703b004200141800d6a41a081ca0041071081022017200141800d6a41086a2205290000370300200120012900800d3703b004200141800d6a41f09dc500410a108102200441086a2005290000370000200420012900800d370000200141800d6a200141b0046a10880320012802800d2205410120051b212920012902840d420020051b2202a7211f0240024002402002422088a72205450d002029200541057422076a2119200141b8076a41206a212a2001419c0b6a2103202921050340200141c00c6a41186a2206200541186a2209290000370300200141c00c6a41106a220a200541106a220c290000370300200141c00c6a41086a220d200541086a2213290000370300200120052900003703c00c20132900002102200c29000021082005290000210e200141d0046a41186a220c2009290000370300200141d0046a41106a22092008370300200141d0046a41086a221320023703002001200e3703d004200141b8076a41186a2006290300370300200141b8076a41106a200a290300370300200141b8076a41086a200d290300370300200120012903c00c3703b807200141f80a6a200141b8076a10bf01200141e00c6a41086a200141f80a6a41086a290300370300200141e00c6a41106a200141f80a6a41106a290300370300200141e00c6a41186a200141f80a6a41186a29030037030020014190056a41086a200341086a280200360200200120012903f80a3703e00c200120032902003703900520012802980b21062018200c290300370300201a200929030037030020172013290300370300200120012903d0043703b00402402006450d00202a20012903e00c370300202a41086a200141e00c6a41086a290300370300202a41106a200141e00c6a41106a290300370300202a41186a200141e00c6a41186a290300370300200141b8076a41186a200141b0046a41186a2903002202370300200141b8076a41106a200141b0046a41106a2903002208370300200141b8076a41086a200141b0046a41086a290300220e370300200141800d6a41086a2203200e370300200141800d6a41106a22092008370300200141800d6a41186a220a2002370300200141800d6a41206a220c200141b8076a41206a290300370300200141800d6a41286a220d200141b8076a41286a290300370300200141800d6a41306a2213200141b8076a41306a290300370300200141800d6a41386a2217200141b8076a41386a290300370300200120012903b00422023703b807200120023703800d200141c8056a41086a221820014190056a41086a28020036020020014198096a41386a221a201729030037030020014198096a41306a2217201329030037030020014198096a41286a2213200d29030037030020014198096a41206a220d200c29030037030020014198096a41186a220c200a29030037030020014198096a41106a220a200929030037030020014198096a41086a2209200329030037030020012001290390053703c805200120012903800d37039809200141b8056a41086a22032018280200360200200120012903c8053703b805200141d8056a41386a2218201a290300370300200141d8056a41306a221a2017290300370300200141d8056a41286a221b2013290300370300200141d8056a41206a2213200d290300370300200141d8056a41186a220d200c290300370300200141d8056a41106a220c200a290300370300200141d8056a41086a220a200929030037030020012001290398093703d805200141a8056a41086a22092003280200360200200120012903b8053703a80541d000102c2217450d08201720012903d80537030020172006360240201720012903a805370244201741386a2018290300370300201741306a201a290300370300201741286a201b290300370300201741206a2013290300370300201741186a200d290300370300201741106a200c290300370300201741086a200a290300370300201741cc006a2009280200360200024020074120470d0041012128410121270c040b200541206a210a201941606a2120200141fc056a210341012128410121270340200a21050340200141c00c6a41186a2206200541186a2207290000370300200141c00c6a41106a2209200541106a220a290000370300200141c00c6a41086a220c200541086a220d290000370300200120052900003703c00c200141d0046a41186a22132007290000370300200141d0046a41106a2207200a290000370300200141d0046a41086a220a200d290000370300200120052900003703d004200141b8076a41186a221a2006290300370300200141b8076a41106a221b2009290300370300200141b8076a41086a2209200c290300370300200120012903c00c3703b807200141d8056a200141b8076a10bf01200141e00c6a41086a2221200141d8056a41086a220c290300370300200141e00c6a41106a2223200141d8056a41106a220d290300370300200141e00c6a41186a2224200141d8056a41186a221829030037030020014190056a41086a2225200341086a280200360200200120012903d8053703e00c200120032902003703900520012802f8052106200141b0046a41186a22262013290300370300200141b0046a41106a22132007290300370300200141b0046a41086a2207200a290300370300200120012903d0043703b00402402006450d00202a20012903e00c370300202a41086a2021290300370300202a41106a2023290300370300202a41186a2024290300370300201a20262903002202370300201b2013290300220837030020092007290300220e370300200141800d6a41086a2207200e370300200141800d6a41106a220a2008370300200141800d6a41186a22132002370300200141800d6a41206a221a200141b8076a41206a290300370300200141800d6a41286a221b200141b8076a41286a290300370300200141800d6a41306a2221200141b8076a41306a290300370300200141800d6a41386a2223200141b8076a41386a290300370300200120012903b00422023703b807200120023703800d200141c8056a41086a2224202528020036020020014198096a41386a2225202329030037030020014198096a41306a2223202129030037030020014198096a41286a2221201b29030037030020014198096a41206a221b201a29030037030020014198096a41186a221a201329030037030020014198096a41106a2213200a29030037030020014198096a41086a220a200729030037030020012001290390053703c805200120012903800d37039809200141b8056a41086a22072024280200360200200120012903c8053703b805200141f80a6a41386a22242025290300370300200141f80a6a41306a22252023290300370300200141f80a6a41286a22232021290300370300200141f80a6a41206a2221201b290300370300200141f80a6a41186a221b201a290300370300200141f80a6a41106a221a2013290300370300200141f80a6a41086a2213200a29030037030020012001290398093703f80a200141a8056a41086a220a2007280200360200200120012903b8053703a805200c2013290300370300200d201a2903003703002018201b290300370300200141d8056a41206a22132021290300370300200141d8056a41286a221a2023290300370300200141d8056a41306a221b2025290300370300200141d8056a41386a22212024290300370300200120012903f80a3703d8052009200a280200360200200120012903a8053703b8070240024020272028470d00202841016a22072028490d0c2028410174220a2007200a20074b1b22074104200741044b1bad42d0007e2202422088a74541037421072002a7210a0240024020280d00200141003602800d0c010b200141083602880d200120173602800d2001202841d0006c3602840d0b20014198096a200a2007200141800d6a107d20012802a00921072001280298094101460d01200128029c092117200741d0006e21280b200541206a210a2017202741d0006c6a220720012903d805370300200d2903002102201829030021082013290300210e201a2903002130201b290300213120212903002132200c290300213320072006360240200741086a2033370300200741386a2032370300200741306a2031370300200741286a2030370300200741206a200e370300200741186a2008370300200741106a2002370300200720012903b807370244200741cc006a2009280200360200202741016a212720202005470d030c070b20070d0b0c0a0b2019200541206a2205470d000c050b0b0b200541206a2105200741606a22070d000b0b0240201f41ffffff3f71450d002029102e0b410821174100212741042105410021280c010b0240201f41ffffff3f71450d002029102e0b202741d0006c4104722205417f4c0d030b2005102c2203450d032010410020111b2107200141003602880d200120053602840d200120033602800d2027200141800d6a10760240202741d0006c2205450d00201720056a21032017210503402005200141800d6a10a1012003200541d0006a2205470d000b0b20012802880d210320012802800d210620012007360298094117102c2205450d032005412f3a0012200541e1d8013b0010200542e8d2cda3f7cddcb4e300370008200542f3cacd9b97ed9bb7df00370000200520012802980936001320054117200620031093032005102e024020012802840d450d0020012802800d102e0b02402027450d00202741d0006c2103201741c4006a21050340024020052802002206450d00200641306c450d002005417c6a280200102e0b200541d0006a2105200341b07f6a22030d000b0b02402028450d00202841d0006c450d002017102e0b200141b8076a109403024020012903b80722024202510d0020012903c0072108200141800d6a200141c8076a280200220641016a109503200141b0036a20012802800d220320012802880d108e0220012802b403210920012802b0032105024020012802840d450d002003102e0b20054101470d002009200741016a470d0020024201520d00200141e8046a22094200370300200141d0046a41106a220a4200370300200141d0046a41086a22054200370300200142003703d004200141800d6a41e8fcc60041091081022005200141800d6a41086a2203290000370300200120012900800d3703d004200141800d6a41b08ec9004103108102200b41086a220c2003290000370000200b20012900800d370000200141a0036a200141d0046a108503200141f8026a20012903a803420020012802a0031b220242e80780420042e807420010e808200141800d6a200610960320014188036a20012802800d221320012802880d10f80220012903f802220e200242e807827c2202427f200141f8026a41086a2903002002200e54ad7c501b20087d213020014188036a41106a2903004200200128028803220d1b21082001290390034200200d1b2131024020012802840d450d002013102e0b20094200370300200a420037030020054200370300200142003703d004200141800d6a41f8fcc600410810810220052003290000370300200120012900800d3703d004200141800d6a41a8aac800410d108102200c2003290000370000200b20012900800d370000200141e0026a200141d0046a412010f802200141d0026a20012903e802420020012802e00222051b220e200141e0026a41106a290300420020051b2202428094ebdc03420010e608200141c0026a200e2002428094ebdc03420010e708200220082031200e56200820025620082002511b22051b2108200e203120051b21332030428086ebc7f5002030428086ebc7f500541b420588428094ebdc037e4298ac9fd603802134200141c0026a41086a29030021314100210341b0fac600210520012903c002213220012903d0022130024002400340200141b0026a2032203120053502002202420010e808203320012903b002220e203020027e2202428094ebdc0380a7417f2002428080808080c0b2cd3b541b2002428094ebdc03824280cab5ee01566aad7c2202542008200141b0026a41086a2903002002200e54ad7c22025420082002511b0d01200541086a2105200341016a22034121470d000b200141a0026a203220314298f1840d420010e808200141a8026a29030020012903a002220820304298f1840d7e2202428094ebdc0380a72002428094ebdc03824280cab5ee01566aad7c2202200854ad7c21080c010b02402003417f6a220920034d0d00200141b0016a2032203142c0f0f50b420010e808200141b8016a29030020012903b00122082030422880a7203042c0f0f50b7e428094ebdc03824280cab5ee01566aad7c2202200854ad7c21080c010b02400240200941204b0d0020014190026a203220312009410374220a41b0fac6006a2802002209ad2202420010e808200141f0016a2033200129039002220e203020027e2202428094ebdc0380a7417f2002428080808080c0b2cd3b541b220341016a20032002428094ebdc03824280cab5ee01561bad7c22022033200256200820014190026a41086a2903002002200e54ad7c220e562008200e511b22031b22352002203320031b22027d22332008200e20031b200e200820031b7d2035200254ad7d220e41002005280200220c20096b22092009200c4b1b22094101200941014b1bad2202420010e708200141c0016a200141f0016a41086a2903004200200541046a2802002209200a41b4fac6006a2802002205200920054b220a1b20052009200a1b6bad2208420010e808200141d0016a20012903f00142002008420010e808200141e0016a2033200e2002420010e60820014180026a203220312005ad2233420010e808427f427f200141d0016a41086a290300220e20012903c0017c223520012903c8014200522035200e5472220a1b2235427f20012903d001200a1b220e20012903e00120087e2002807c2202200e54220aad7c2208200a20082035542002200e5a1b220a1b2135427f2002200a1b210e20014180026a41086a2903002001290380022236203020337e2202428094ebdc0380a7417f2002428080808080c0b2cd3b541b2002428094ebdc03824280cab5ee01566aad7c2208203654ad7c21022003200920054d460d01427f200220357c2008200e7c220e2008542205ad7c22082005200820025420082002511b22051b2108427f200e20051b21020c020b2009412141f889c500103c000b4200200220357d2008200e54ad7d22332008200e7d220e200856203320025620332002511b22051b21084200200e20051b21020b200141a0016a20022008428094ebdc03420010e60820014190016a20022008428094ebdc03420010e70820014180016a20012903900120014190016a41086a2903002034420010e808200141f0006a203220314280c2d72f420010e808200141e0006a200129037022082030420a80a720304280c2d72f7e428094ebdc03824280cab5ee01566aad7c2202200141f0006a41086a2903002002200854ad7c2208428094ebdc03420010e608200141d0006a20022008428094ebdc03420010e708200141c0006a2001290350200141d0006a41086a2903002034420010e8082001418c0d6a2006360200200141800d6a41086a41003a0000200141800d6a41106a2001290380012208203420012903a0017e2202428094ebdc0380a72002428094ebdc03824280cab5ee01566aad7c2202370300200141980d6a20014180016a41086a2903002002200854ad7c2208370300200141a80d6a4200200141c0006a41086a29030020012903402230203420012903607e220e428094ebdc0380a7200e428094ebdc03824280cab5ee01566aad7c220e203054ad7c223020087d200e200254ad7d2231200e20027d2232200e56203120305620312030511b22051b2231370300200141a00d6a4200203220051b2232370300200141043a00800d200141800d6a10fe0120014198096a200610970320012802a00921032001280298092105200120083703880d200120023703800d20052003200141800d6a411010b2010240200128029c09450d002005102e0b200120313703880d200120323703800d024002400240200e200256203020085620302008511b0d00200142003703880d200142003703800d0c010b200141800d6a10980320012903800d21022001200141800d6a41086a29030022083703880d200120023703800d20022008844200520d010b2001200141800d6a3602980920014198096a10cc020c010b200142f0f2bda1a7ee9cb9f90037039809200141800d6a20014198096a10cd02200141306a200141800d6a2002200810fd01200141a8096a200141306a41086a290300223020087d2001290330220e200254ad7d200820307d2002200e54ad7d200e200256203020085620302008511b22051b3703002001200e20027d2002200e7d20051b3703a00920012005ad3703980920014198096a41086a21030240024020050d00200120033602d805200141d8056a10cc020c010b200120033602d805200141d8056a10ce020b200141980d6a2008370300200141900d6a2002370300200141880d6a41063a00002001410e3a00800d200141800d6a10fe010b200141c8046a4200370300200141c0046a4200370300200141b0046a41086a22054200370300200142003703b004200141800d6a41a081ca0041071081022005200141800d6a41086a2203290000370300200120012900800d3703b004200141800d6a41dff9c000410a108102200f41086a2003290000370000200f20012900800d370000200141203602bc052001200141b0046a3602b80520014190056a200141b0046a412010ed0202400240200128029005220a0d00410021090c010b200128029405210c200120014190056a41086a2802003602cc052001200a3602c805200141286a200141c8056a10ab010240024020012802280d00200128022c220d20012802cc0541e0016e22052005200d4b1bad42e0017e2202422088a70d052002a72205417f4c0d050240024020050d00410121090c010b2005102c2209450d070b200541e0016ead210202400240200d450d00200141800d6a41206a2117200141f80a6a4101722118410021130340200141003a00980b20012802cc05417f6a2105201341016a211341002103024002400240024002400340200141003a00a8052005417f460d01200141f80a6a20036a20012802c80522062d00003a00002001200641016a3602c8052001200341016a22063a00980b200120053602cc052005417f6a21052006210320064120470d000b200141e00c6a41186a2205200141f80a6a41186a290300370300200141e00c6a41106a2203200141f80a6a41106a290300370300200141e00c6a41086a221a200141f80a6a41086a290300370300200120012903f80a3703e00c200641ff01714120490d01200141d0046a41086a2206201a290300370300200141d0046a41106a221a2003290300370300200141d0046a41186a22032005290300370300200120012903e00c3703d004200141f80a6a200141c8056a10990320012d00f80a4101460d01200141800d6a41186a2003290300370300200141800d6a41106a201a290300370300200141800d6a41086a2006290300370300200120012903d0043703800d2017201841c00110e9081a20014198096a200141800d6a41e00110e9081a200141b8076a20014198096a41e00110e9081a200141d8056a200141b8076a41e00110e9081a2002422088a722052002a7470d04200541016a22032005490d0d20054101742206200320032006491b22034104200341044b1bad42e0017e2202a721032002422088a745210620050d02200141003602800d0c030b200341ff0171450d00200141003a00980b0b2002a721052005450d06200541e0016c450d062009102e0c060b200141013602880d200120093602800d2001200541e0016c3602840d0b20014198096a20032006200141800d6a107d20012802a00921032001280298094101460d03200128029c092109200341e0016ead21020b2009200541e0016c6a200141d8056a41e00110e9081a200242ffffffff0f83200541016aad4220868421022013200d470d000b0b2009450d010c020b20030d060c050b41002109200141003602a00920014201370398092001410a3602bc072001200141b8056a3602b807200120014198096a3602d805200141940d6a4101360200200142013702840d200141909dc5003602800d2001200141b8076a3602900d200141d8056a419cebc000200141800d6a103d1a20012802980920012802a00910ef02200128029c09450d00200128029809102e0b200c450d00200a102e0b2002420020091b2208422088a7222141ffffff3f712021470d0241012123024020214105742205450d002005102c2223450d040b2009410120091b2124410021032001410036029805200120233602900520012005410576222736029405024002400240202720214f0d00200541047622032021200320214b1b22034104200341044b1b220341ffffff3f712003462106200341057421030240024020050d00200141003602800d0c010b200141880d6a4101360200200120053602840d200120233602800d0b20014198096a20032006200141800d6a107d200141a0096a280200210502402001280298094101460d002001200128029c09222336029005200120054105762227360294050c020b20050d060c050b2021450d010b202141e0016c220641a07e6a41e0016e21092023210520242103034020052003290000370000200541186a200341186a290000370000200541106a200341106a290000370000200541086a200341086a290000370000200541206a2105200341e0016a2103200641a07e6a22060d000b200941016a21030b2001200336029805200141c8046a22064200370300200141c0046a22094200370300200141b0046a41086a22054200370300200142003703b004200141800d6a41a081ca0041071081022005200141800d6a41086a2203290000370300200120012900800d3703b004200141800d6a41f09dc500410a108102200f41086a220a2003290000370000200f20012900800d370000200141b0046a20014190056a109a0302402012201241ff0171410247712220450d00200642003703002009420037030020054200370300200142003703b004200141800d6a41a081ca00410710810220052003290000370300200120012900800d3703b004200141800d6a41f8d2c1004112108102200a2003290000370000200f20012900800d370000200141800d6a200141b0046a109b0320012802800d220c450d00200141b0046a412010ff0120012902840d42ffffffff0383500d00200c102e0b200642003703002009420037030020054200370300200142003703b004200141800d6a41a081ca00410710810220052003290000370300200120012900800d3703b004200141800d6a41e4d1c100410c108102200a2003290000370000200f20012900800d3700002001200741016a22283602800d200141b0046a4120200141800d6a410410b201200141800d6a1094030240024020012903800d4202510d00200141900d6a28020041016a21050c010b410021050b200141800d6a2005109503200141206a20012802800d220620012802880d108e022001280224210320012802202105024020012802840d450d002006102e0b024020054101470d00024020032028460d00200320284f0d0141c3ebc600413010ef020b2028109c030b200141c8046a4200370300200141c0046a4200370300200141b0046a41086a22054200370300200142003703b004200141b8076a41a081ca0041071081022005200141b8076a41086a290000370300200120012900b8073703b00420014198096a41bfadc000410b108102200441086a20014198096a41086a2900003700002004200129009809370000200141800d6a200141b0046a4120109d03200741026a211b0240024020012802800d4101470d0020013502840d21020c010b201bad220242208620028421020b2001200242ffffffff0f83200741036aad422086843702840d200141013602800d200141b0046a41186a4200370300200141b0046a41106a4200370300200141b0046a41086a22054200370300200142003703b004200141b8076a41a081ca0041071081022005200141b8076a41086a290000370300200120012900b8073703b00420014198096a41bfadc000410b108102200441086a20014198096a41086a2900003700002004200129009809370000200141b0046a4120200141800d6a410472109e03200141d0046a41186a22064200370300200141d0046a41106a22074200370300200141d0046a41086a22054200370300200142003703d004200141800d6a4192fdc60041071081022005200141800d6a41086a2203290000370300200120012900800d3703d004200141800d6a4198b7c6004115108102200b41086a22092003290000370000200b20012900800d3700002001201b3602800d200141d0046a4120200141800d6a410410b201200642003703002007420037030020054200370300200142003703d004200141800d6a4192fdc600410710810220052003290000370300200120012900800d3703d004200141800d6a4194adc600410a10810220092003290000370000200b20012900800d370000200141186a200141d0046a4120108e020240024020012802184101460d00200141c00c6a201b109f030c010b200141800d6a200128021c109503200141106a20012802800d220620012802880d108e022001280214210320012802102105024020012802840d450d002006102e0b024020050d00418debc600413610ef02410021030b024002400240024010a00341ff01710e0401000302030b200141e8046a4200370300200141e0046a4200370300200141d0046a41086a22054200370300200142003703d004200141800d6a4192fdc60041071081022005200141800d6a41086a2203290000370300200120012900800d3703d004200141800d6a41b8b2c6004108108102200b41086a2003290000370000200b20012900800d370000200141d0046a412010ff010c010b4100201b20036b22052005201b4b1b4106490d010b200141c00c6a201b109f030c010b200141003602c00c0b024002400240024002400240024020012802c00c2226450d00200141e8046a4200370300200141e0046a4200370300200141d0046a41086a22054200370300200142003703d004200141800d6a4192fdc60041071081022005200141800d6a41086a2203290000370300200120012900800d3703d004200141800d6a4194adc600410a108102200b41086a2003290000370000200b20012900800d370000200141086a200141d0046a4120108e02200141c00c6a41086a2802002205ad42d0007e2202422088a70d092002a72203417f4c0d0920012802082106200128020c210720012802c40c21290240024020030d00410821250c010b2003102c2225450d0b0b024002400240200341d0006e222a20054f0d00202a41017422092005200920054b1b22094104200941044b1bad42d0007e2202422088a74541037421092002a7210a02400240200341cf004b0d00200141003602800d0c010b200141800d6a41086a4108360200200120253602800d2001202a41d0006c3602840d0b20014198096a200a2009200141800d6a107d200141a0096a280200210302402001280298094101460d00200128029c092125200341d0006e212a0c020b20030d0d0c0c0b20050d00410021090c010b2007410020061b21192005410574220941606a410576211f200141b8076a41206a210620252105202621030340200141d8056a41186a220a200341186a290000370300200141d8056a41106a220c200341106a290000370300200141d8056a41086a220d200341086a290000370300200120032900003703d805200141f80a6a2019200141d8056a10a103200141800d6a20012802f80a220420012802800b10a203200141e00c6a41186a2217200141800d6a41186a290300370300200141e00c6a41106a2218200141800d6a41106a290300370300200141e00c6a41086a221a200141800d6a41086a290300370300200120012903800d3703e00c20012802ac0d21130240024020012802a00d22070d004200210220014198096a41186a420037030020014198096a41106a42003703004108210720014198096a41086a420037030020014200370398090c010b20014198096a41086a201a29030037030020014198096a41106a201829030037030020014198096a41186a2017290300370300200120012903e00c3703980920012902a40d21020b024020012802fc0a450d002004102e0b200341206a21032006200129039809370300200141b8076a41086a2204200d290300370300200141b8076a41106a220d200c290300370300200141b8076a41186a220c200a290300370300200641186a20014198096a41186a290300370300200641106a20014198096a41106a290300370300200641086a20014198096a41086a290300370300200120012903d8053703b807200541386a200141b8076a41386a290300370300200541306a200141b8076a41306a290300370300200541286a200141b8076a41286a290300370300200541206a2006290300370300200541186a200c290300370300200541106a200d290300370300200541086a2004290300370300200520012903b807370300200541cc006a2013360200200541c4006a2002370200200541c0006a2007360200200541d0006a2105200941606a22090d000b201f41016a21090b0240202941ffffff3f71450d002026102e0b2025450d00200941ffffff3f712009470d0920094105742205417f4c0d090240024020050d00410121290c010b2005102c2229450d0b0b02400240024002402005410576221f20094f0d00200541047622032009200320094b1b22034104200341044b1b220341ffffff3f712003462106200341057421030240024020050d00200141003602800d0c010b200141880d6a4101360200200120053602840d200120293602800d0b20014198096a20032006200141800d6a107d200141a0096a28020021052001280298094101460d01200128029c0921292005410576211f0b20252025200941d0006c6a470d01410021060c020b20050d0c0c0b0b2025200941d0006c6a2107410021062029210520252103034020052003290000370000200541186a200341186a290000370000200541106a200341106a290000370000200541086a200341086a290000370000200641016a2106200541206a21052007200341d0006a2203470d000b0b200120093602a0092001202a36029c092001202536029809200141800d6a20014198096a10a30320012802800d4101470d0120012802880d210520012802840d21034188accb00413710ef022003200510ef020c020b200141b8076a4100201b417f6a22052005201b4b1b10a403200141800d6a20012802b807220520012802c00710a503200141f80a6a41086a2203200141800d6a41106a290300370300200141f80a6a41106a2206200141800d6a41186a290300370300200141f80a6a41186a2207200141a00d6a2903003703002001200141800d6a41086a2903003703f80a20012802800d4101470d0220012802840d210920014198096a41186a200729030037030020014198096a41106a200629030037030020014198096a41086a2003290300370300200120012903f80a37039809024020012802bc07450d002005102e0b2001418c0d6a200141a0096a290300370200200141940d6a200141a8096a2903003702002001419c0d6a200141b0096a290300370200200120093602800d20012001290398093702840d200141f80a6a201b10a40320012802800b210320012802f80a21054104102c2206450d09200142043702dc05200120063602d8054120102c2206450d09200142203702bc07200120063602b807200141b8076a200141800d6a41201074200141d8056a20012802b807220620012802c0071074024020012802bc07450d002006102e0b200120012802a00d3602b807200141d8056a200141b8076a410410742005200320012802d805220620012802e00510b201024020012802dc05450d002006102e0b20012802fc0a450d032005102e0c030b20014198096a200141800d6a41086a41800110e9081a200141d0076a200141900a6a290300370300200141c8076a200141880a6a290300370300200141b8076a41086a200141800a6a290300370300200120012903f8093703b807200120093602d807200141e00c6a201b10a40320012802e80c210320012802e00c21054104102c2207450d08200142043702fc0a200120073602f80a4120102c2207450d08200142203702dc05200120073602d805200141d8056a200141b8076a41201074200141f80a6a20012802d805220720012802e0051074024020012802dc05450d002007102e0b200120093602d805200141f80a6a200141d8056a410410742005200320012802f80a220720012802800b10b201024020012802fc0a450d002007102e0b024020012802e40c450d002005102e0b20014198096a10b8020b20294521222029450d022006ad422086201fad8421024101212a2029210b0c030b20012802bc07450d002005102e0b41002129410121220b200141e8046a4200370300200141e0046a4200370300200141d0046a41086a22054200370300200142003703d004200141800d6a41a081ca0041071081022005200141800d6a41086a2203290000370300200120012900800d3703d004200141800d6a41f09dc500410a108102200b41086a2003290000370000200b20012900800d370000200141800d6a200141d0046a10880320012902840d420020012802800d22051b21022005410120051b210b4100212a0b2002422088a722064105744105752203ad42e0017e220e422088a70d02200ea72205417f4c0d020240024020050d00410121250c010b2005102c2225450d040b0240024002400240200541e0016e222620034f0d00202641017422072003200720034b1b22034104200341044b1bad42e0017e220ea72103200e422088a745210702400240200541df014b0d00200141003602800d0c010b200141880d6a4101360200200120253602800d2001202641e0016c3602840d0b20014198096a20032007200141800d6a107d200141a0096a28020021052001280298094101460d01200128029c092125200541e0016e21260b20060d0141002118202a21040c020b20050d050c040b2024202141e0016c6a211b2006410574220741606a4105762114200141800d6a41206a2118200141f80a6a41a0016a2115200141f80a6a4180016a2111200141f80a6a41e0006a2110200141f80a6a41c0006a2112200141f80a6a41206a211920014198096a410172211a202a21042024210620252109200b2105034020062103200141e00c6a41186a220a200541186a290000370300200141e00c6a41106a220c200541106a290000370300200141e00c6a41086a220d200541086a290000370300200120052900003703e00c200141c00c6a200141e00c6a10a60320014198096a20012802c00c221720012802c80c10a70320012d0098092113200141b8076a201a41c00110e9081a41002106024020134101470d00200141d8056a200141b8076a41c00110e9081a410121060b024020012802c40c450d002017102e0b0240024020060d00200141f80a6a41186a4200370300200141f80a6a41106a4200370300200141f80a6a41086a4200370300200142003703f80a2019410041a00110eb081a0c010b200141f80a6a200141d8056a41c00110e9081a0b02400240200441ff0171450d00200321060c010b4100210402402003201b470d00200321060c010b200341e0016a21060240200341206a200141f80a6a412010ec080d00200341c0006a2019412010ec080d00200341e0006a2012412010ec080d0020034180016a2010412010ec080d00200341a0016a2011412010ec080d00200341c0016a2015412010ec08450d010b410121040b200541206a2105200141800d6a41186a200a290300370300200141800d6a41106a200c290300370300200141800d6a41086a200d290300370300200120012903e00c3703800d2018200141f80a6a41c00110e9081a2009200141800d6a41e00110e90841e0016a2109200741606a22070d000b201441016a21180b0240200242ffffff3f83500d00200b102e0b2018ad42e0017e2202422088a70d022002a72219417f4c0d020240024020190d00410121174100211b0c010b2019102c2217450d04201941e0016e211b201941e001490d002025201841e0016c6a211a200141c00e6a2103200141a00e6a2106200141800e6a2107200141e00d6a2109200141c00d6a210a200141a00d6a210c4100210d20252105201b21130340201a2005460d012013450d03200141800d6a41186a200541186a290000370300200141800d6a41106a200541106a290000370300200141800d6a41086a200541086a29000037030020052900002102200c2005290020370000200c41086a200541286a290000370000200c41106a200541306a290000370000200c41186a200541386a290000370000200a41186a200541d8006a290000370000200a41106a200541d0006a290000370000200a41086a200541c8006a290000370000200a2005290040370000200120023703800d200941186a200541f8006a290000370000200941106a200541f0006a290000370000200941086a200541e8006a29000037000020092005290060370000200741186a20054198016a290000370000200741106a20054190016a290000370000200741086a20054188016a2900003700002007200529008001370000200620052900a001370000200641086a200541a8016a290000370000200641106a200541b0016a290000370000200641186a200541b8016a290000370000200320052900c001370000200341086a200541c8016a290000370000200341186a200541d8016a290000370000200341106a200541d0016a2900003700002017200d6a200141800d6a41e00110e9081a200d41e0016a210d200541e0016a21052013417f6a22130d000b0b200141c8046a4200370300200141c0046a4200370300200141b0046a41086a22054200370300200142003703b004200141800d6a41a081ca0041071081022005200141800d6a41086a2203290000370300200120012900800d3703b004200141800d6a41dff9c000410a108102200f41086a2003290000370000200f20012900800d370000201841e0016c4104722205417f4c0d022005102c2203450d03200141003602880d200120053602840d200120033602800d2018200141800d6a107620172018200141800d6a109c01200141b0046a412020012802800d220520012802880d10b201024020012802840d450d002005102e0b0240201941e001490d00201b41e0016c450d002017102e0b200141c8046a4200370300200141c0046a4200370300200141b0046a41086a22054200370300200142003703b004200141800d6a41a081ca0041071081022005200141800d6a41086a2203290000370300200120012900800d3703b004200141800d6a4188d2c100410d108102200f41086a2003290000370000200f20012900800d370000200120043a00a805200141b0046a4120200141a8056a410110b201200120283602840d200141063a00800d200141800d6a10fe012020202420212025201810a80302402026450d00202641e0016c450d002025102e0b0240202a2022720d00201f41ffffff3f71450d002029102e0b02402027450d002023102e0b02402008a72205450d00200541e0016c450d002024102e0b200141800d6a10a90320012903880d21020b200010aa032108200141e00e6a2400427f200220087c220820082002541b0f0b201b201b4188decc00103c000b1038000b1036000bdd2107067f017e037f017e017f067e017f230041900e6b22002400200041a0036a2201420037030020004198036a2202420037030020004188036a41086a220342003703002000420037038803200041b00c6a41a8f8c60041041081022003200041b00c6a41086a2204290000370300200020002900b00c37038803200041b00c6a41978cc500410b10810220012004290000370300200220002900b00c370300200041a8096a20004188036a10a004024020002d00a8094102470d002001420037030020024200370300200342003703002000420037038803200041b00c6a41d9fcc600410610810220032004290000370300200020002900b00c37038803200041b00c6a41b4f4cb004106108102200241086a2004290000370000200220002900b00c370000200041a8096a20004188036a10a10420002802a8092203410420031b21050240024020002902ac09420020031b2206422088a7220741246c2203450d00200520036a2104200041a8096a41086a2108200521030340024020032d00004101470d00200341016a2800002101200341086a28020021092000200341106a2802003602cc07200020093602c8070240200141c28289aa04470d00200041a8096a200041c8076a10930220002903a809220a4203510d0020004188036a200841f00010e9081a200041c00c6a20004188036a41f00010e9081a200041306a200041c00c6a41f00010e9081a0c040b200041c00c6a41e8b1c40041f00010e9081a0b2004200341246a2203470d000b0b4203210a0b02402007450d00200741246c21042005210303400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a280200102e0c030b2003410c6a280200450d02200341086a280200102e0c020b2003410c6a280200450d01200341086a280200102e0c010b200341086a280200450d00200341046a280200102e0b200341246a21032004415c6a22040d000b0b02402006a72203450d00200341246c450d002005102e0b200041a0016a200041306a41f00010e9081a41002109410021010240200a4203510d002000200a3703900220004190026a41086a200041a0016a41f00010e908210b200041a0036a2201420037030020004198036a2205420037030020004188036a41086a220342003703002000420037038803200041b00c6a41a8f8c60041041081022003200041b00c6a41086a2204290000370300200020002900b00c37038803200041b00c6a41e38bc500410b108102200241086a22072004290000370000200220002900b00c370000200041206a20004188036a1085032000290398022106024002402000280220450d0020002903284200520d010b2001420037030020054200370300200342003703002000420037038803200041b00c6a41a8f8c600410410810220032004290000370300200020002900b00c37038803200041b00c6a41e38bc500410b10810220072004290000370000200220002900b00c370000200020063703a80920004188036a4120200041a8096a410810b2012001420037030020054200370300200342003703002000420037038803200041b00c6a41a8f8c600410410810220032004290000370300200020002900b00c37038803200041b00c6a41a58bc500410b10810220072004290000370000200220002900b00c370000200041a8096a20004188036a10a20420002802a809210720002902ac09210c2001420037030020054200370300200342003703002000420037038803200041b00c6a41a8f8c600410410810220032004290000370300200020002900b00c37038803200041b00c6a41c28cc500410a10810220012004290000370300200520002900b00c370300200041a8096a20004188036a10a30420002d00a80921042001200041c1096a2900003703002005200041b9096a2900003703002003200041b1096a290000370300200020002900a90937038803200c420020071b210d200c42808080807083420020071b210c2007410820071b21030240024020044101460d00200041d80c6a4200370300200041d00c6a4200370300200041c80c6a4200370300200042003703c00c0c010b200041c00c6a41186a20004188036a41186a290300370300200041c00c6a41106a20004188036a41106a290300370300200041c00c6a41086a20004188036a41086a29030037030020002000290388033703c00c0b200041c8076a41086a200041c00c6a41086a290300220e370300200041c8076a41106a200041c00c6a41106a290300220f370300200041c8076a41186a200041c00c6a41186a2903002210370300200020002903c00c22113703c807200041a8096a41086a200c200d42ffffffff0f8384370300200041a8096a41106a2011370300200041a8096a41186a200e370300200041c8096a200f370300200041a8096a41286a2010370300200020033602ac09200041003602a80920004188036a200041a8096a10a404200041cb0c6a20004188036a41086a28020036000020002000290388033700c30c20004194036a200041c70c6a290000370000200041c28289aa0436008903200041023a008803200020002900c00c37008d0320004188036a10a504200da72204450d00200441286c450d002003102e0b200041a0036a2205420037030020004188036a41106a2207420037030020004188036a41086a220342003703002000420037038803200041b00c6a41a8f8c60041041081022003200041b00c6a41086a2204290000370300200020002900b00c37038803200041b00c6a41c98bc500410b108102200241086a22082004290000370000200220002900b00c370000200041106a20004188036a108503200028021021012000290318210c2005420037030020074200370300200342003703002000420037038803200041b00c6a41a8f8c600410410810220032004290000370300200020002900b00c37038803200041b00c6a41a28cc500410810810220082004290000370000200220002900b00c370000200042002006200c42017c420120011b7d220c200c2006561b3e02a80920004188036a4120200041a8096a410410b2012005420037030020074200370300200342003703002000420037038803200041b00c6a41a8f8c600410410810220032004290000370300200020002900b00c37038803200041b00c6a41c98bc500410b10810220082004290000370000200220002900b00c370000200020063703a80920004188036a4120200041a8096a410810b20141002101200a4201510d0020004190026a41106a28020021012005420037030020074200370300200342003703002000420037038803200041b00c6a41a8f8c600410410810220032004290000370300200020002900b00c37038803200041b00c6a41a58bc500410b10810220082004290000370000200220002900b00c370000200041a8096a20004188036a10a20420002802a8092203410820031b210402400240200120002902ac09420020031b220c422088a74f0d00200041c8076a41186a2004200141286c6a220341186a290000370300200041c8076a41106a200341106a290000370300200041c8076a41086a200341086a290000370300200020032900003703c807200041a8096a200041c8076a10f40120002802a809210320004188036a200041a8096a41047241c40110e9081a20034101460d00200b410c6a210720004188066a200041c00c6a41046a20004188036a41046a41c00110e90841c00110e9081a200041c8076a20004188066a41c00110e9081a20004188036a41186a2203420037030020004188036a41106a2201420037030020004188036a41086a220542003703002000420037038803200041b00c6a41a8f8c60041041081022005200041b00c6a41086a2208290000370300200020002900b00c37038803200041b00c6a41c28cc500410a10810220032008290000370300200120002900b00c370300200041a8096a20004188036a10a30420002d00a80921082003200041c1096a2900003703002001200041b9096a2900003703002005200041b1096a290000370300200020002900a909370388030240024020084101460d00200041a0096a420037030020004198096a420037030020004190096a420037030020004200370388090c010b20004188096a41186a20004188036a41186a29030037030020004188096a41106a20004188036a41106a29030037030020004188096a41086a20004188036a41086a2903003703002000200029038803370388090b20004188036a41186a420037030020004188036a41106a420037030020004188036a41086a220342003703002000420037038803200041b00c6a41a8f8c60041041081022003200041b00c6a41086a2201290000370300200020002900b00c37038803200041b00c6a41fa8bc500410a108102200241086a2001290000370000200220002900b00c370000200020004188036a1085032000290308210d20002802002103200041c00c6a41dcddcc004104108101200041c00c6a41e0ddcc00410b2006108501200041c00c6a41ebddcc00410d200d420020031b108501200041c00c6a41f8ddcc00411020004188096a412010840120004188036a200041c00c6a41d00110e9081a200041a8096a2007200041c8076a20004188036a10f30120002802a8094101460d0020004188036a200041a8096a41086a41800310e9081a200041a8096a20004188036a41800310e9081a200041c00c6a41b7b7c0004109108101200041c00c6a41d4e2cc00410041c9ddcc004113108401200041c00c6a41c0b7c0004106200041c80a6a4120108401200041c00c6a41c6b7c0004107200041880c6a412010840120004188096a41186a420037030020004188096a41106a420037030020004188096a41086a42003703002000420037038809200041c00c6a41d4e2cc00410020004188096a4120108601410021030340200041c00c6a20036a41003a0000200341016a220341c801470d000b200041c8076a41086a20004188096a41086a290300370300200041c8076a41106a20004188096a41106a290300370300200041c8076a41186a20004188096a41186a29030037030020002000290388093703c807410121010c010b410021010b200ca72203450d00200341286c450d002004102e0b0240200a4200520d00200041c00c6a41186a200041c8076a41186a290300370300200041c00c6a41106a200041c8076a41106a290300370300200041c00c6a41086a200041c8076a41086a290300370300200020002903c8073703c00c200121090b200041b1096a2205200041c00c6a41086a290300370000200041b9096a2207200041c00c6a41106a290300370000200041c1096a2208200041c00c6a41186a290300370000200020093a00a809200020002903c00c3700a90920004188036a41186a2209420037030020004188036a41106a220b420037030020004188036a41086a220342003703002000420037038803200041b00c6a41a8f8c60041041081022003200041b00c6a41086a2204290000370300200020002900b00c37038803200041b00c6a41978cc500410b108102200241086a22122004290000370000200220002900b00c37000020004188036a200041a8096a10a6042005200041c8076a41086a2903003700002007200041c8076a41106a2903003700002008200041c8076a41186a290300370000200020013a00a809200020002903c8073700a90920094200370300200b4200370300200342003703002000420037038803200041b00c6a41a8f8c600410410810220032004290000370300200020002900b00c37038803200041b00c6a41848cc500411310810220122004290000370000200220002900b00c37000020004188036a200041a8096a10a6040b200041900e6a24000b8d0204017f017e017f017e230041d0006b220224002002412036020420022001360200200241086a2001412010ed0202400240200228020822010d00420021030c010b200228020c210402400240200241086a41086a2802004108490d0020012900002105420121030c010b20024100360220200242013703182002410a36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241909dc5003602382002200241286a360248200241346a419cebc000200241386a103d1a2002280218200228022010ef020240200228021c450d002002280218102e0b420021030b2004450d002001102e0b2000200537030820002003370300200241d0006a24000b800201037f230041d0006b220124002001412036020420012000360200200141086a2000412010ed0202400240200128020822020d00410221000c010b200128020c210302400240200141106a280200450d0041002100024020022d00000e020200010b410121000c010b20014100360220200142013703182001410a36022c200120013602282001200141186a360234200141cc006a41013602002001420137023c200141909dc5003602382001200141286a360248200141346a419cebc000200141386a103d1a2001280218200128022010ef020240200128021c450d002001280218102e0b410221000b2003450d002002102e0b200141d0006a240020000ba70905077f017e037f037e027f23004190026b22012400200141206a22024200370300200141186a22034200370300200141086a41086a420037030020014200370308200141086a41bed8c8004108108102200141a8016a41e9d8c80041041081022002200141a8016a41086a290000370300200320012900a8013703002001412036022c2001200141086a360228200141306a200141086a412010ed020240024002400240024002400240200128023022040d00410021050c010b200128023421062001200141306a41086a280200360244200120043602402001200141c0006a10ab010240024020012802000d002001280204220720012802444105762202200220074b1b22024105742203417f4c0d070240024020020d00410121050c010b2003102c2205450d050b2002ad210802402007450d00410021090340200141003a00c8012001280244417f6a2102200941016a210941002103024002400240024003402002417f460d01200141a8016a20036a2001280240220a2d00003a00002001200a41016a3602402001200341016a220a3a00c801200120023602442002417f6a2102200a2103200a4120470d000b200141f0016a41186a2202200141a8016a41186a290300370300200141f0016a41106a2203200141a8016a41106a290300370300200141f0016a41086a220b200141a8016a41086a290300370300200120012903a8013703f001200a41ff01714120490d01200141e8006a41086a200b290300220c370300200141e8006a41106a2003290300220d370300200141e8006a41186a2002290300220e370300200141c8006a41186a220a200e370300200141c8006a41106a220b200d370300200141c8006a41086a220f200c370300200120012903f001220c370388012001200c3703682001200c3703482008422088220ca722022008a7470d03200241016a220320024f0d020c0d0b200341ff0171450d00200141003a00c8010b0240200842ffffff3f83500d002005102e0b0c040b20024101742210200320032010491b22034104200341044b1b220341ffffff3f712003462110200341057421030240024020020d00200141003602a8010c010b200141013602b001200120053602a8012001200c4205863e02ac010b200141f0016a20032010200141a8016a107d20012802f801210320012802f0014101460d0620012802f40121052003410576ad21080b200520024105746a22032001290348370000200341186a200a290300370000200341106a200b290300370000200341086a200f290300370000200842ffffffff0f83200241016aad42208684210820092007470d000b0b20050d010b41002105200141003602f801200142013703f0012001410a3602d4012001200141286a3602d0012001200141f0016a36028801200141bc016a4101360200200142013702ac01200141909dc5003602a8012001200141d0016a3602b80120014188016a419cebc000200141a8016a103d1a20012802f00120012802f80110ef0220012802f401450d0020012802f001102e0b2006450d002004102e0b20050d0220004100360208200042013702000c030b2003450d030b1036000b20002008370204200020053602000b20014190026a24000f0b1038000bd60201027f230041e0006b220224002002412036020c20022001360208200241106a2001412010ed0202400240200228021022010d00200041003602000c010b200228021421032002200241186a280200360224200220013602202002200241206a10ab0102400240024002402002280200450d00200241003602480c010b200241c8006a200241206a200228020410920120022802480d010b20024100360230200242013703282002410a36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241909dc5003602482002200241386a360258200241c4006a419cebc000200241c8006a103d1a2002280228200228023010ef020240200228022c450d002002280228102e0b200041003602000c010b20002002290348370200200041086a200241c8006a41086a2802003602000b2003450d002001102e0b200241e0006a24000b0e002001ad4220862000ad8410220bb40201037f230041e0006b22022400200241086a4199fdc6004108108102200241186a418092c5004112108102024002404110102c2203450d002002421037023c20022003360238200241386a2001411010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241c8006a41086a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000bba0302047f017e230041e0006b220324002003200236020c20032001360208200341106a2001200210ed0202400240024002400240200328021022010d00200041003602000c010b200328021421022003200341186a280200360224200320013602202003200341206a10ab010240024020032802000d002003280224220420032802042205490d002005417f4c0d030240024020050d00410121060c010b200510322206450d05200328022421040b024020042005490d0020062003280220200510e9082104200328022422062005490d0620002005ad2207422086200784370204200020043602002003200620056b3602242003200328022020056a3602200c020b2006102e0b20034100360230200342013703282003410a36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341909dc5003602482003200341386a360258200341c4006a419cebc000200341c8006a103d1a2003280228200328023010ef020240200328022c450d002003280228102e0b200041003602000b2002450d002001102e0b200341e0006a24000f0b1038000b1036000b2005200641b8b2c0001056000beb0201037f230041e0006b22032400200341086a4199fdc6004108108102200341186a41ac91c5004116108102024002404110102c2204450d002003421037023c20032004360238200341386a2001411010742003200328023822012003280240220410a301370348200341dc006a200120046a360200200320013602582003200341c8006a41086a3602542003200341c8006a360250200341286a200341d0006a107c0240200328023c450d002001102e0b200341d0006a2002280200200228020810a20120032802302202200328025822046a41206a2201417f4c0d010240024020010d00410121050c010b2001102c2205450d010b2000410036020820002001360204200020053602002000200341086a411010742000200341186a41101074200020032802282201200210742000200328025022022004107402402003280254450d002002102e0b0240200328022c450d002001102e0b200341e0006a24000f0b1036000b1038000bb10805057f017e037f037e027f230041f0016b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022040d00200041003602000c010b200328021421052003200341186a280200360224200320043602202003200341206a10ab010240024020032802000d00024002402003280204220620032802244105762201200120064b1b22014105742202417f4c0d000240024020010d00410121070c010b2002102c2207450d020b2001ad2108024002402006450d00410021090340200341003a00a8012003280224417f6a2101200941016a2109410021020240024002400240024003402001417f460d0120034188016a20026a2003280220220a2d00003a00002003200a41016a3602202003200241016a220a3a00a801200320013602242001417f6a2101200a2102200a4120470d000b200341d0016a41186a220120034188016a41186a290300370300200341d0016a41106a220220034188016a41106a290300370300200341d0016a41086a220b20034188016a41086a29030037030020032003290388013703d001200a41ff01714120490d01200341c8006a41086a200b290300220c370300200341c8006a41106a2002290300220d370300200341c8006a41186a2001290300220e370300200341286a41186a220a200e370300200341286a41106a220b200d370300200341286a41086a220f200c370300200320032903d001220c3703682003200c3703482003200c3703282008422088220ca722012008a7470d04200141016a22022001490d0820014101742210200220022010491b22024104200241044b1b220241ffffff3f7120024621102002410574210220010d0220034100360288010c030b200241ff0171450d00200341003a00a8010b200341c8006a41186a200341e8006a41186a290300370300200842ffffff3f83500d082007102e0c080b200341013602900120032007360288012003200c4205863e028c010b200341d0016a2002201020034188016a107d20032802d801210220032802d0014101460d0320032802d40121072002410576ad21080b200720014105746a22022003290328370000200241186a200a290300370000200241106a200b290300370000200241086a200f290300370000200842ffffffff0f83200141016aad42208684210820092006470d000b0b2007450d0320002008370204200020073602000c040b20020d010b1038000b1036000b200341003602d801200342013703d0012003410a3602b4012003200341086a3602b0012003200341d0016a3602682003419c016a41013602002003420137028c01200341909dc500360288012003200341b0016a36029801200341e8006a419cebc00020034188016a103d1a20032802d00120032802d80110ef02024020032802d401450d0020032802d001102e0b200041003602000b2005450d002004102e0b200341f0016a24000bb40201037f230041e0006b22022400200241086a4199fdc6004108108102200241186a419090c5004107108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241c8006a41086a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000b8b0101027f230041106b2203240020034100360208200342013703002002200310a10120022802502104200241d8006a28020022022003107602402002450d002002410574210203402003200441201074200441206a2104200241606a22020d000b0b2000200120032802002204200328020810b20102402003280204450d002004102e0b200341106a24000ba60201017f230041a0016b220324002003200236020420032001360200200341086a2001200210ed0202400240200328020822010d00200041003602400c010b200328020c21022003200341106a28020036027c20032001360278200341186a200341f8006a10e0040240024020032802580d00200341003602880120034201370380012003410a360294012003200336029001200320034180016a36029c012003412c6a41013602002003420137021c200341909dc500360218200320034190016a3602282003419c016a419cebc000200341186a103d1a20032802800120032802880110ef020240200328028401450d00200328028001102e0b200041003602400c010b2000200341186a41e00010e9081a0b2002450d002001102e0b200341a0016a24000be50101047f230041206b2203240002400240200228020822044105744104722205417f4c0d00200228020021022005102c2206450d0120034100360208200320053602042003200636020020042003107602402004450d002004410574210403404120102c2205450d032003422037021420032005360210200341106a2002412010742003200328021022052003280218107402402003280214450d002005102e0b200241206a2102200441606a22040d000b0b2000200120032802002202200328020810b20102402003280204450d002002102e0b200341206a24000f0b1038000b1036000bf63608077f017e097f017e067f067e077f027e230041c0036b22062400200641d8026a22074200370300200641d0026a22084200370300200641c0026a41086a22094200370300200642003703c002200641b0026a4192fdc60041071081022009200641b0026a41086a290000370300200620062900b0023703c00220064180036a41e0b2c6004113108102200720064180036a41086a22092900003703002008200629008003370300200641203602a4022006200641c0026a3602a00220064180036a200641c0026a412010ed020240024020062802800322070d004100210a0c010b200628028403210b0240024020092802004104490d004101210a2007280000220c418194ebdc03490d010b4100210a200641003602e801200642013703e0012006410a3602b4022006200641a0026a3602b0022006200641e0016a36029002200641ac036a41013602002006420137029c03200641909dc500360298032006200641b0026a3602a80320064190026a419cebc00020064198036a103d1a20062802e00120062802e80110ef0220062802e401450d0020062802e001102e0b200b450d002007102e0b200641c0026a1094030240024020062903c0024202520d0042c0f0f50b210d0c010b200641c0026a200641d0026a280200220e109503200641d8016a20062802c002220920062802c802108e0220062802dc01210b20062802d8012107024020062802c402450d002009102e0b02400240024020070d00418debc600413610ef024100200e41646a22072007200e4b1b210f428084afdf00210d200e21100c010b4100200e41646a22072007200e4b1b210f428084afdf00210d0240200b20054b0d00200e21100c010b200641c0026a10f10520062802c002221120062802c80241037422076a210903402007450d02200741786a21072009417c6a210b200941786a2109200b28020020054b0d000b201120076a2802002110024020062802c40241ffffffff0171450d002011102e0b42c0f4a4eb00210d0b200c4100200a1b2112200641c0026a41186a22134200370300200641c0026a41106a22144200370300200641c0026a41086a220c4200370300200642003703c002200641b0026a4192fdc6004107108102200c200641b0026a41086a2215290000370300200620062900b0023703c00220064180036a41e8b6c6004116108102200841086a220720064180036a41086a22162900003700002008200629008003370000200641d0016a200641c0026a4120108e0220062802d401210920062802d001210b2013420037030020144200370300200c4200370300200642003703c002200641b0026a4192fdc6004107108102200c2015290000370300200620062900b0023703c00220064180036a41e8b6c600411610810220072016290000370000200820062900800337000020062009200e200b4101461b36029803200641c0026a412020064198036a410410b2012013420037030020144200370300200c4200370300200642003703c002200641b0026a4192fdc6004107108102200c2015290000370300200620062900b0023703c00220064180036a418cabc600410d10810220072016290000370000200820062900800337000020064198036a200641c0026a108803200629029c03420020062802980322071b2217422088a7410574211820042002200220044b1b21192007410120071b211a20064198036a41106a210220064180026a41046a211b20064190026a41086a211c4100210802400240034020082019200820194b1b21040340024020082004470d00201742ffffff3f83500d06201a102e0c060b200841016a211d2001200841e0006c6a210520182107201a2109024003402007450d01200741606a210720092005412010ec08210b200941206a2109200b0d000b201d21080c010b0b200320084102746a2802002107200642003703880220064200370380022006420037039802200642003703900220064190016a2005290330221e200541386a290300221f428094ebdc03420010e608200641a0016a201e201f428094ebdc03420010e70820064180016a20062903a001200641a0016a41086a2903002007ad221f420010e808200641b0016a2005290320221e200541286a2903002220428094ebdc03420010e608200641c0016a201e2020428094ebdc03420010e708200641f0006a20062903c001200641c0016a41086a290300201f420010e808200629039001201f7e2220428094ebdc038021212020428094ebdc038221220240024002402006290370420020062903b001201f7e221e428094ebdc0380a7417f201e428080808080c0b2cd3b541b201e428094ebdc03824280cab5ee01566a2209ad7d85200641f0006a41086a29030042002009410047ad7d85844200520d00200642003703a802200642003703a002200642003703b802200642003703b00220064198036a200510ce050240024020062802a4030d00200642003703900320064280808080c000370388032006200f360284032006410036028003200520064180036a10d0050c010b20064180036a41106a2002290300370300201620064198036a41086a2903003703002006200629039803370380030b200c200629038003370200200c41086a2016290300370200200c41106a20064180036a41106a290300370200200641003a00ec02200620053602c4022006200f3602c002200620123602e8022006200641b0026a3602e4022006200641a0026a3602e00220064198036a200641c0026a201010f205024020062802a0034102460d0020062802980320062802c802470d002006200c200e108c0120062d00ec024100477222073a00ec0220064198036a2005108605200628029803220920062802a00310ff010240200628029c03450d002009102e0b20064198036a200510d105200628029803220920062802a00310ff010240200628029c03450d002009102e0b0240200510f30541ff017122094102460d002009410171450d00024010a00341ff0171417f6a0e03010001000b20064198036a41186a42003703002002420037030020064198036a41086a22094200370300200642003703980320064180036a4192fdc60041071081022009201629000037030020062006290080033703980320064180036a41b8b2c6004108108102200241086a2016290000370000200220062900800337000020064100360288032006420137038003200641013a00f00220064180036a200641f0026a4101107420064198036a4120200628028003220920062802880310b201200628028403450d002009102e0b2007450d00200641f0026a200c20062802c002108d01024020062802f0024101470d0020062802f402220720062802f80222054f0d0020062802c4022109034020064198036a41186a200941186a2900003703002002200941106a29000037030020064198036a41086a200941086a2900003703002006200929000037039803200620073602b80320064180036a20064198036a10cd05200628028003220b20062802880310ff01200741016a21070240200628028403450d00200b102e0b20052007470d000b0b20062802c402200c10d0050b20062802d80241ffffffff0371450d0120062802d402102e0c010b200629038001211e20064180016a41086a2903002123200641b0026a2010200510cc0520062802b0022109200620062802b802220b3602f402200620093602f00220064180036a2009200b10ed0202400240200628028003220b0d0041002104200a21240c010b20062802840321080240024020062802880322114104490d00200b2800002224418094ebdc034b0d00202421042011417c6a410f4b0d010b200641003602a00320064201370398032006410a3602a4022006200641f0026a3602a002200620064198036a3602bc03200641013602d402200642013702c402200641909dc5003602c0022006200641a0026a3602d002200641bc036a419cebc000200641c0026a103d1a20062802980320062802a00310ef020240200628029c03450d00200628029803102e0b41002104200a21240b2008450d00200b102e0b024020062802b402450d002009102e0b0240200720044d0d0020064180036a2010200510cc05200628028803210b20062802800321094110102c2208450d052006421037029c032006200836029803200620073602c00220064198036a200641c0026a4104107420062023201e2021a7417f2020428080808080c0b2cd3b541b20224280cab5ee01566aad7c2220201e54ad7c221e3703c802200620203703c00220064198036a200641c0026a411010742009200b200628029803220720062802a00310b2010240200628029c03450d002007102e0b0240200628028403450d002009102e0b20064198036a200510ce050240024020062802a4030d00200642003703900320064280808080c000370388032006200f360284032006410036028003200520064180036a10d0050c010b20064180036a41106a2002290300370300201620064198036a41086a2903003703002006200629039803370380030b200c200629038003370200200c41086a22252016290300370200200c41106a222620064180036a41106a2227290300370200200641003a00ec02200620053602c4022006200f3602c002200620123602e802200620064190026a3602e402200620064180026a3602e002200641e8006a200641c0026a20102020201e10f40502400240024020062802684101470d00200628026c20062802c802460d010b20062d00ec0221070c010b2006200c200e108c0120062d00ec024100477222073a00ec0220064198036a2005108605200628029803220920062802a00310ff010240200628029c03450d002009102e0b20064198036a200510d105200628029803220920062802a00310ff010240200628029c03450d002009102e0b200510f30541ff017122094102460d002009410171450d00024010a00341ff0171417f6a0e03010001000b20064198036a41186a42003703002002420037030020064198036a41086a22094200370300200642003703980320064180036a4192fdc60041071081022009201629000037030020062006290080033703980320064180036a41b8b2c6004108108102200241086a2016290000370000200220062900800337000020064100360288032006420137038003200641013a00b00220064180036a200641b0026a4101107420064198036a4120200628028003220920062802880310b201200628028403450d002009102e0b0240200741ff0171450d00200641b0026a200c20062802c002108d01024020062802b0024101470d0020062802b402220720062802b80222084f0d0020062802c4022109034020064198036a41186a200941186a2900003703002002200941106a29000037030020064198036a41086a200941086a2900003703002006200929000037039803200620073602b80320064180036a20064198036a10cd05200628028003220b20062802880310ff01200741016a21070240200628028403450d00200b102e0b20082007470d000b0b20062802c402200c10d0050b024020062802d80241ffffffff0371450d0020062802d402102e0b42002120200642003703a802200642003703a0024100211102400240200541c8006a220928020022070d004108212841002129420021210c010b200641003602c00220064198036a20074104200741044b1bad42307e221ea7201e422088a745410374200641c0026a107d20062802a003210702402006280298034101470d002007450d060c070b200628029c032128200741306e21290240200928020022070d0042002120420021210c010b200541c0006a280200220a200741306c6a212a2004ad2123410021110340200642003703b802200642003703b002200641c0006a200a290300221e200a41086a2903002220428094ebdc03420010e608200641306a201e2020428094ebdc03420010e708200641206a2006290330221e200641306a41086a29030022202023420010e808200641106a201e2020201f420010e808200641c0026a2010200a41106a220b10cb05200641d0006a20062802c002220920062802c80210f8024200200641106a41086a2903002006290310222020062903402221201f7e221e428094ebdc0380a7417f201e428080808080c0b2cd3b541b201e428094ebdc03824280cab5ee01566aad7c221e202054ad7c2220200641206a41086a29030020062903202222202120237e2221428094ebdc0380a7417f2021428080808080c0b2cd3b541b2021428094ebdc03824280cab5ee01566aad7c2221202254ad7c7d201e202154ad7d2222201e20217d2221201e56202220205620222020511b22071b21204200202120071b211e200641d0006a41106a29030021212006290358212220062802502107024020062802c402450d002009102e0b20064198036a2010200b10cb0520062802a0032108200628029803210920062022420020071b2222201e7c221e3703c00220062021420020071b20207c201e202254ad7c22203703c80220092008200641c0026a411010b2010240200628029c03450d002009102e0b20064198036a200b10ce050240024020062802a4030d00200642003703900320064280808080c000370388032006200f360284032006410036028003200b20064180036a10d0050c010b20272002290300370300201620064198036a41086a2903003703002006200629039803370380030b200c2006290380033702002025201629030037020020262027290300370200200641003a00ec022006200b3602c4022006200f3602c002200620123602e8022006200641b0026a3602e4022006200641a0026a3602e002200641086a200641c0026a2010201e202010f4050240024020062802084101470d00200628020c20062802c802470d002006200c200e108c0120062d00ec024100477222073a00ec020c010b20062d00ec0221070b0240200741ff0171450d00200641f0026a200c20062802c002108d01024020062802f0024101470d0020062802f402220720062802f80222044f0d0020062802c4022109034020064198036a41186a200941186a2900003703002002200941106a29000037030020064198036a41086a200941086a2900003703002006200929000037039803200620073602b80320064180036a20064198036a10cd05200628028003220820062802880310ff01200741016a21070240200628028403450d002008102e0b20042007470d000b0b20062802c402200c10d0050b024020062802d80241ffffffff0371450d0020062802d402102e0b200b41086a290000211e200b29000021202013200b41186a2900003703002014200b41106a290000370300200c201e370300200620203703c0022015290300211e20062903b0022120024020112029470d00202941016a22072029490d07202941017422092007200920074b1b22074104200741044b1bad42307e2221422088a74541037421072021a721090240024020290d0020064100360298030c010b200641083602a00320062028360298032006202941306c36029c030b20064180036a2009200720064198036a107d200628028803210702402006280280034101470d0020070d090c080b2006280284032128200741306e21290b200c2903002121201429030021222013290300212b20062903c002212c2028201141306c6a220720203703202007202c370300200741286a201e370300200741186a202b370300200741106a2022370300200741086a2021370300201141016a2111200a41306a220a202a470d000b200641a0026a41086a290300212120062903a00221200b200641e0016a41086a2207200541086a290300370300200641e0016a41106a2209200541106a290300370300200641e0016a41186a220b200541186a290300370300200620052903003703e00120280d020b2024210a0b200d42808c8d9e027c210d201d21080c010b20064180026a41086a2903002122200629038002211f201c2903002123200629039002212b200641c0026a200541d0006a10c80120062802c802210820062802c402210420062802c002210a20064198036a41186a2227200b2903003703002002200929030037030020064198036a41086a220b2007290300370300200620062903e00137039803200641b0026a4192fdc600410710810220064180036a41d0b3c60041101081022006200e36028002200620064180026a410410a301370390022006201b3602cc022006201c3602c402200620064180026a3602c802200620064190026a3602c002200641a0026a200641c0026a107c20062802a802220941206a2207417f4c0d010240024020070d00410121050c010b2007102c2205450d030b20064100360298022006200736029402200620053602900220064190026a200641b0026a4110107420064190026a20064180036a4110107420064190026a20062802a002220720091074024020062802a402450d002007102e0b200641c0026a20062802900220062802980210f5050240024020062802c00222050d00410021094200211e41082105410021070c010b20062902c402221e422088a72109201ea721070b2013202729030037030020142002290300370300200c200b29030037030020062006290398033703c0020240024020092007470d00201ea7201e422088a72209470d00200941016a22072009490d032009410174220b20072007200b491b22074104200741044b1bad42d8007e221e422088a7454103742107201ea7210b0240024020090d0020064100360280030c010b200641083602880320062005360280032006200941d8006c360284030b200641b0026a200b200720064180036a107d20062802b802210720062802b0024101460d0120062802b4022105200741d8006ead211e0b2011ad42c097e8b2017e200d7c212c2005200941d8006c220b6a2207201f20207c2220370310200720233703082007202b3703002007200a36022c20072028360220200741186a202220217c2020201f54ad7c370300200741346a2008360200200741306a2004360200200741286a2011360200200741246a2029360200200720062903c002370338200741c0006a200c290300370300200741c8006a2014290300370300200741d0006a20132903003703002006201e42ffffffff0f83200941016a2209ad422086843702c402200620053602c002200628029802210720062802900221080240024020050d002008200710ff010c010b201ea7210420062007360284032006200836028003200641c0026a20064180036a10b10102402009450d00200541306a2107200b41d8006a210903400240200741746a280200220b450d00200b41306c450d00200741706a280200102e0b0240200728020041ffffff3f71450d002007417c6a280200102e0b200741d8006a2107200941a87f6a22090d000b0b2004450d00200441d8006c450d002005102e0b202c42c097e8b2017c211e0240200628029402450d002008102e0b201e42c0b2cd3b7c210d201d21082024210a0c010b0b20070d010b1038000b1036000b024020062802c40241ffffffff0171450d002011102e0b42c0d1e123210d0b2000200d37030820004200370300200641c0036a24000b18002001ad4220862000ad842003ad4220862002ad8410000bbe0304037f017e027f017e230041f0006b22012400200141186a22024200370300200141106a22034200370300200141086a42003703002001420037030020014192fdc6004107108102200141d8006a41d0adc60041091081022002200141d8006a41086a290000370300200320012900583703002001412036022420012001360220200141286a2001412010ed0202400240200128022822020d00420221040c010b200128022c210502400240200141286a41086a28020022064104490d002002280000210320064104460d0042002104024020022d00040e020200010b2006417b6a4108490d0020022900052107420121040c010b20014100360240200142013703382001410a36024c2001200141206a3602482001200141386a360254200141ec006a41013602002001420137025c200141909dc5003602582001200141c8006a360268200141d4006a419cebc000200141d8006a103d1a2001280238200128024010ef020240200128023c450d002001280238102e0b420221040b2005450d002002102e0b0240024020044202520d00200042023703000c010b2000200737030820002004370300200041106a20033602000b200141f0006a24000b850201037f230041d0006b22022400200241086a4192fdc6004107108102200241186a4198aec6004115108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000b850201037f230041d0006b22022400200241086a4192fdc6004107108102200241186a4188b2c600410e108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000b850201037f230041d0006b22022400200241086a4192fdc6004107108102200241186a418cb1c6004113108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000ba00304067f027e017f027e230041d0006b22012400200141386a22024200370300200141206a41106a22034200370300200141206a41086a2204420037030020014200370320200141c0006a41f8fcc60041081081022004200141c0006a41086a220529000037030020012001290040370320200141c0006a41a8aac800410d1081022002200529000037030020032001290040370300200141086a200141206a412010f802024020012903104200200128020822061b220720002903007c22082007542209200141086a41106a290300420020061b220a200041086a2903007c2009ad7c220b200a54200b200a511b4101470d00427f210820002007427f853703002000200a427f85370308427f210b0b20024200370300200342003703002004420037030020014200370320200141c0006a41f8fcc60041081081022004200529000037030020012001290040370320200141c0006a41a8aac800410d108102200341086a2005290000370000200320012900403700002001200b37034820012008370340200141206a4120200141c0006a411010b201200141d0006a24000bcc1202067f017e230041f0056b2202240041002103200241003a00a8052001280204417f6a2104024002400240024002400240024002400240024002400240024003402004417f460d0120024188056a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00a8052004417f6a21042005210320054120470d000b200241b0056a41086a220320024188056a41086a290300370300200241b0056a41106a220620024188056a41106a290300370300200241b0056a41186a220720024188056a41186a29030037030020022002290388053703b005200541ff0171411f4d0d0120024188036a41086a20032903002208370300200241c8016a41186a2007290300370300200241c8016a41106a2006290300370300200241c8016a41086a2008370300200220022903b005220837038803200220083703c80141002103200241003a00a80503402004417f460d0320024188056a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00a8052004417f6a21042005210320054120470d000b200241b0056a41086a220320024188056a41086a290300370300200241b0056a41106a220620024188056a41106a290300370300200241b0056a41186a220720024188056a41186a29030037030020022002290388053703b005200541ff0171411f4d0d0320024188036a41086a20032903002208370300200241e8016a41186a2007290300370300200241e8016a41106a2006290300370300200241e8016a41086a2008370300200220022903b005220837038803200220083703e80141002103200241003a00a80503402004417f460d0520024188056a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00a8052004417f6a21042005210320054120470d000b200241b0056a41086a220320024188056a41086a290300370300200241b0056a41106a220620024188056a41106a290300370300200241b0056a41186a220720024188056a41186a29030037030020022002290388053703b005200541ff0171411f4d0d0520024188036a41086a2003290300220837030020024188026a41186a200729030037030020024188026a41106a200629030037030020024188026a41086a2008370300200220022903b005220837038803200220083703880241002103200241003a00a80503402004417f460d0720024188056a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00a8052004417f6a21042005210320054120470d000b200241b0056a41086a220320024188056a41086a290300370300200241b0056a41106a220620024188056a41106a290300370300200241b0056a41186a220720024188056a41186a29030037030020022002290388053703b005200541ff0171411f4d0d0720024188036a41086a20032903002208370300200241a8026a41186a2007290300370300200241a8026a41106a2006290300370300200241a8026a41086a2008370300200220022903b005220837038803200220083703a80241002103200241003a00a80503402004417f460d0920024188056a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00a8052004417f6a21042005210320054120470d000b200241b0056a41086a220320024188056a41086a290300370300200241b0056a41106a220620024188056a41106a290300370300200241b0056a41186a220720024188056a41186a29030037030020022002290388053703b005200541ff0171411f4d0d0920024188036a41086a20032903002208370300200241c8026a41186a2007290300370300200241c8026a41106a2006290300370300200241c8026a41086a2008370300200220022903b005220837038803200220083703c80241002103200241003a00a80503402004417f460d0b20024188056a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00a8052004417f6a21042005210320054120470d000b200241b0056a41086a220420024188056a41086a290300370300200241b0056a41106a220120024188056a41106a290300370300200241b0056a41186a220320024188056a41186a29030037030020022002290388053703b005200541ff0171411f4d0d0b20024188036a41086a20042903002208370300200241e8026a41186a22042003290300370300200241e8026a41106a22032001290300370300200241e8026a41086a22012008370300200220022903b005220837038803200220083703e802200241086a41186a200241c8016a41186a290300370300200241086a41106a200241c8016a41106a290300370300200241086a41086a200241c8016a41086a290300370300200220022903c801370308200241c0006a200241e8016a41186a290300370300200241386a200241e8016a41106a290300370300200241306a200241e8016a41086a290300370300200220022903e801370328200241e0006a20024188026a41186a290300370300200241d8006a20024188026a41106a290300370300200241d0006a20024188026a41086a290300370300200220022903880237034820024180016a200241a8026a41186a290300370300200241f8006a200241a8026a41106a290300370300200241f0006a200241a8026a41086a290300370300200220022903a802370368200241a0016a200241c8026a41186a29030037030020024198016a200241c8026a41106a29030037030020024190016a200241c8026a41086a290300370300200220022903c80237038801200241c0016a2004290300370300200241b8016a2003290300370300200241b0016a2001290300370300200220022903e8023703a801200041016a200241086a41c00110e9081a200041003a00000c0c0b200341ff0171450d00200241003a00a8050b200041013a00000c0a0b200341ff0171450d00200241003a00a8050b200041013a00000c080b200341ff0171450d00200241003a00a8050b200041013a00000c060b200341ff0171450d00200241003a00a8050b200041013a00000c040b200341ff0171450d00200241003a00a8050b200041013a00000c020b200341ff0171450d00200241003a00a8050b200041013a00000b200241f0056a24000bac0101047f230041106b2202240002400240200128020822034105744104722204417f4c0d00200128020021012004102c2205450d0120024100360208200220043602042002200536020020032002107602402003450d002003410574210303402002200141201074200141206a2101200341606a22030d000b0b2000412020022802002201200228020810b20102402002280204450d002001102e0b200241106a24000f0b1038000b1036000bb30201027f230041e0006b220224002002412036020c20022001360208200241106a2001412010ed0202400240200228021022010d00200041003602000c010b200228021421032002200241106a41086a28020036022420022001360220200241c8006a200241206a10e7010240024020022802480d0020024100360230200242013703282002410a36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241909dc5003602482002200241386a360258200241c4006a419cebc000200241c8006a103d1a2002280228200228023010ef020240200228022c450d002002280228102e0b200041003602000c010b20002002290348370200200041086a200241c8006a41086a2802003602000b2003450d002001102e0b200241e0006a24000b961c03017f017e167f23004180026b22012400200141206a109403200129032021022001420037032020014100200128023041016a20024202511b2203360230200141b0016a22044200370300200141a8016a2205420037030020014198016a41086a220642003703002001420037039801200141f8006a4192fdc60041071081022006200141f8006a41086a22072900003703002001200129007837039801200141f8006a41d0adc6004109108102200420072900003703002005200129007837030020014100360280012001420137037820012003360258200141f8006a200141d8006a41041074200141003a0058200141f8006a200141d8006a4101107420014198016a41202001280278220420012802800110b2010240200128027c450d002004102e0b200141106a10f10502400240024002400240024002402001280218220420012802142208470d00200441016a22062004490d04200441017422072006200720064b1b22064104200641044b1b220641ffffffff01712006464102742107200641037421060240024020040d0020014100360298010c010b200141a0016a410436020020012001280210360298012001200441037436029c010b200141206a2006200720014198016a107d200141286a280200210620012802204101460d01200120012802243602102001200641037622083602140b2001280210220920044103746a22062000360204200620033602002001200441016a220a3602182003411d490d024100210b200a450d01200341646a2100200441ffffffff017141016a21064100210b2009210402400340200428020020004f0d01200441086a21042006200b41016a220b470d000b2006210b0b200a200b4f0d01200b200a41b4b3c000104d000b2006450d020c040b200141003602180240200b4103742207450d00200141f4016a41046a210c200141f8016a41086a210d20092100034020002802002106200141f8006a4192fdc6004107108102200141206a41fd9fc5004113108102200120063602f4012001200141f4016a410410a3013703f8012001200c3602a4012001200d36029c012001200141f4016a3602a0012001200141f8016a36029801200141d8006a20014198016a107c2001280260220e41206a2204417f4c0d030240024020040d004101210f0c010b2004102c220f450d060b200141003602a0012001200436029c012001200f3602980120014198016a200141f8006a4110107420014198016a200141206a4110107420014198016a20012802582204200e10740240200128025c450d002004102e0b200128029801220420012802a0011089030240200128029c01450d002004102e0b200141f8006a4192fdc6004107108102200141206a4190a0c5004113108102200120063602f4012001200141f4016a410410a3013703f8012001200c3602a4012001200d36029c012001200141f4016a3602a0012001200141f8016a36029801200141d8006a20014198016a107c2001280260220641206a2204417f4c0d030240024020040d004101210e0c010b2004102c220e450d060b200141003602a0012001200436029c012001200e3602980120014198016a200141f8006a4110107420014198016a200141206a4110107420014198016a20012802582204200610740240200128025c450d002004102e0b200128029801220420012802a0011089030240200128029c01450d002004102e0b200041086a2100200741786a22070d000b0b0240200a200b6b220a0d004100210a0c010b0240200b450d0020092009200b4103746a200a41037410ea081a0b2001200a3602182009280204210c200141b0016a22044200370300200141a8016a2207420037030020014198016a41086a220042003703002001420037039801200141f8006a41a081ca0041071081022000200141f8006a41086a2900003703002001200129007837039801200141206a41bfadc000410b1081022004200141206a41086a29000037030020072001290020370300200141206a20014198016a4120109d032001290224210241002104024020012802204101470d0002402002422088a7220d200c200c200d4b1b22062002a722044f0d00410121040c010b0240200620044d0d00034020014198016a200410a403200128029801220020012802a00110ff01200441016a21040240200128029c01450d002000102e0b20062004470d000b0b200c200d4921042002428080808070832006ad8421020b2001200237025c20012004360258024020040d00200141b0016a4200370300200141a8016a420037030020014198016a41086a220442003703002001420037039801200141f8006a41a081ca0041071081022004200141f8006a41086a2900003703002001200129007837039801200141206a41bfadc000410b108102200741086a200141206a41086a2900003700002007200129002037000020014198016a412010ff010c010b200141b0016a4200370300200141a8016a420037030020014198016a41086a220442003703002001420037039801200141f8006a41a081ca0041071081022004200141f8006a41086a2900003703002001200129007837039801200141206a41bfadc000410b108102200741086a200141206a41086a2900003700002007200129002037000020014198016a4120200141d8006a410472109e030b200141b0016a4200370300200141a8016a420037030020014198016a41086a220442003703002001420037039801200141f8006a4192fdc60041071081022004200141f8006a41086a22002900003703002001200129007837039801200141f8006a41a8b4c600410a108102200541086a200029000037000020052001290078370000200a4103744104722204417f4c0d002004102c2200450d02200141003602282001200436022420012000360220200a200141206a10760240200a450d002009200a4103746a210020092104034020012004280200360278200141206a200141f8006a410410742001200441046a280200360278200141206a200141f8006a41041074200441086a22042000470d000b0b20014198016a412020012802202204200128022810b20102402001280224450d002004102e0b0240200841ffffffff0171450d002009102e0b200141b0016a4200370300200141a8016a420037030020014198016a41086a220442003703002001420037039801200141f8006a4192fdc60041071081022004200141f8006a41086a22002900003703002001200129007837039801200141f8006a41e8b6c6004116108102200541086a200029000037000020052001290078370000200141086a20014198016a4120108e02200128020c2110024020012802084101460d00410021040c020b024020104100200341656a2204200420034b1b22114f0d0020014198016a41246a210020014198016a41286a210f201021120340200141206a201210f90520014198016a200128022022042001280228220610f5050240024020012802980122130d0042002102410821130c010b2004200610ff01200129029c0121020b02402001280224450d002004102e0b20132002422088a7220441d8006c6a21070240024020040d00201321040c010b201321040340200141f8006a41186a220b200441186a290300370300200141f8006a41106a220a200441106a290300370300200141f8006a41086a2203200441086a29030037030020012004290300370378200441206a280200210620014198016a41086a220c2004412c6a29020037030020014198016a41106a220d200441346a29020037030020014198016a41186a220e2004413c6a29020037030020014198016a41206a2209200441c4006a290200370300200f200441cc006a29020037030020014198016a41306a2208200441d4006a2802003602002001200441246a29020037039801024020060d00200441d8006a21040c020b200141d8006a41186a2214200b290300370300200141d8006a41106a220b200a290300370300200141d8006a41086a220a2003290300370300200141206a41086a2203200c290300370300200141206a41106a2215200d290300370300200141206a41186a2216200e290300370300200141206a41206a22172009290300370300200141206a41286a2209200f290300370300200141206a41306a22182008280200360200200120012903783703582001200129039801370320200e2014290300370300200d200b290300370300200c200a29030037030020002001290320370200200041086a2003290300370200200041106a2015290300370200200041186a2016290300370200200041206a2017290300370200200041286a2009290300370200200041306a20182802003602002001200129035837039801200120063602b80120014198016a10fa05200441d8006a22042007470d000b200721040b2002a7210c024020072004460d0003400240200441246a2802002206450d00200641306c450d00200441206a280200102e0b200441d8006a21060240200441306a28020041ffffff3f71450d002004412c6a280200102e0b2006210420072006470d000b0b201241016a21120240200c450d00200c41d8006c450d002013102e0b20122011470d000b0b20102011201020114b1b2110410121040c010b1038000b2001200436022020012010360224200141b0016a4200370300200141a8016a420037030020014198016a41086a220042003703002001420037039801200141f8006a4192fdc60041071081022000200141f8006a41086a22062900003703002001200129007837039801200141f8006a41e8b6c6004116108102200541086a2006290000370000200520012900783700000240024020040d0020014198016a412010ff010c010b2001201036027820014198016a4120200141f8006a410410b2010b20014180026a24000f0b1036000b8f0201027f230041d0006b220324002003200236020420032001360200200341086a2001200210ed0202400240200328020822010d00200041003602000c010b200328020c2102024002400240200341106a28020022044104490d002004417c714104470d010b4100210420034100360220200342013703182003410a36022c200320033602282003200341186a360234200341cc006a41013602002003420137023c200341909dc5003602382003200341286a360248200341346a419cebc000200341386a103d1a2003280218200328022010ef02200328021c450d012003280218102e0c010b20002001290000370204410121040b200020043602002002450d002001102e0b200341d0006a24000b7e01027f230041106b2203240002404108102c2204450d0020034208370204200320043602002003200228020036020c20032003410c6a410410742003200228020436020c20032003410c6a410410742000200120032802002202200328020810b20102402003280204450d002002102e0b200341106a24000f0b1036000bd67b070a7f027e127f027e0c7f097e057f230041f0056b2202240020024180046a22034200370300200241f8036a22044200370300200241e8036a41086a22054200370300200242003703e803200241d8016a4192fdc60041071081022005200241d8016a41086a2206290000370300200220022900d8013703e80320024198026a4194adc600410a108102200320024198026a41086a22072900003703002004200229009802370300200241c0016a200241e8036a4120108e0220022802c001210820022802c4012109200342003703002004420037030020054200370300200242003703e803200241d8016a4192fdc600410710810220052006290000370300200220022900d8013703e80320024198026a4194adc600410a108102200320072900003703002004200229009802370300410121052002200941016a410020081b220a36029802200241e8036a412020024198026a410410b201200241d8016a4192fdc600410710810220024198026a4198aec60041151081022002200a3602d0052002200241d0056a410410a3013703f802200241f4036a200241d0056a41046a3602002002200241f8026a41086a3602ec032002200241d0056a3602f0032002200241f8026a3602e803200241a8036a200241e8036a107c024020022802b003220641206a2203417f4c0d00024002402003450d002003102c2205450d010b200241003602f003200220033602ec03200220053602e803200241e8036a200241d8016a41101074200241e8036a20024198026a41101074200241e8036a20022802a803220320061074024020022802ac03450d002003102e0b20022802e803210320022802f003210520022001360298022003200520024198026a410410b201024020022802ec03450d002003102e0b200241e8036a41186a4200370300200241e8036a41106a4200370300200241e8036a41086a22034200370300200242003703e803200241d8016a4192fdc60041071081022003200241d8016a41086a290000370300200220022900d8013703e80320024198026a41e0a9c600410c108102200441086a20024198026a41086a2900003700002004200229009802370000200241b8016a200241e8036a4120108e020240200a20022802bc0141016a41d50020022802b8011b6b2205200a4b0d00200510f6050b200241f8026a41186a22054200370300200241f8026a41106a220b4200370300200241f8026a41086a22014200370300200242003703f802200241e8036a41a5fec600411a10810220012003290000370300200220022900e8033703f802200241e8036a4184c4c800410e10810220052003290000370300200b20022900e803370300200241e8036a200241f8026a10ab05024020022d00a40422034103460d00200241f8026a412010ff010b024002400240024002400240024020034103460d0020022802a0042105200229039804210c429896c78220210d0c010b200241e8036a4100200310e9054101210320022802e8034101460d01200241e8036a41106a2205280200210e200241f4036a2201280200210f200241e8036a41086a22032802002110200241e8036a4100200310ef0520022802e8034101460d02200528020021112001280200211220032802002113200241a0056a41186a22144200370300200241a0056a41106a22054200370300200241a0056a41086a22014200370300200242003703a005200241e8036a4192fdc600410710810220012003290000370300200220022900e8033703a005200241e8036a41b4aac600410e10810220142003290000370300200520022900e803370300200241b0016a200241a0056a4120108e0220022802b401211520022802b0012116200242003702dc030240200e450d002010200e41386c6a2117200241f8026a41086a2118200241a0056a41086a2119200241e8036a41086a211a410021072010210903402009290300210c2009290208210d201a200941106a290200370300200241e8036a41106a221b200941186a290200370300200241e8036a41186a221c200941206a2902003703002002200d3703e803024002402007450d0020022802d803211d0c010b41c003102c2207450d094100211d200741003b015e20074100360258200220073602dc03200241003602d8030b200941386a21090240024002400240024002400240024002400240024002400340200741e0006a211e20072f015e221f410574210841002101417f21054100210302400340024020082003470d00201f21050c020b200241e8036a200720036a41e0006a412010ec082206450d03200541016a2105200141086a2101200341206a21032006417f4a0d000b0b0240201d450d00201d417f6a211d200720054102746a41c0036a28020021070c010b0b200241c0056a41086a201a41086a290200220d3703002002201a29020022203703c00520022802ec03210820022802e803211d200229038004212120024198026a41086a2222200d37030020022020370398020240201f410a4b0d00200241d0056a41086a2206202229030037030020022002290398023703d005200541016a211b201f41016a210102402005201f4f221f0d00201e201b4105746a201e20054105746a20012005417f736a41057410ea081a0b201e20054105746a220320083600042003201d360000200320022903d005370008200341106a2006290300370000200320213700180240201f0d002007201b4103746a200720054103746a20012005417f736a41037410ea081a0b200720054103746a200c370300200720013b015e0c0b0b410021234104210302400240200541054f0d00200521010c010b4105210341052101024002402005417b6a0e020201000b200541796a210141012123410621030c010b41002101410121230b41c003102c221f450d14201f41003b015e201f4100360258201f20072f015e22242003417f736a22053b015e201e20034105746a2206280004212520062800002126200241d0056a41086a2227200641106a290000370300200220062900083703d0052005410c4f0d012024200341016a22286b2005470d02200720034103746a290300210d20062900182120201f41e0006a201e20284105746a200541057410e9081a201f200720284103746a200541037410e9082129200720033b015e201a2027290300370300200220022903d0053703e8032029200720231b22032f015e21052027202229030037030020022002290398023703d005200341e0006a2106200541016a211e0240200141016a222820054b22230d00200620284105746a200620014105746a201e2001417f736a41057410ea081a0b200620014105746a220520083600042005201d360000200520022903d005370008200541106a202729030037000020052021370018024020230d00200320284103746a200320014103746a201e2001417f736a41037410ea081a0b200320014103746a200c3703002003201e3b015e200241d8016a41086a2224201a290300220c370300200220022903e80322213703d801200241a8036a41086a2223200c370300200220213703a8030240024002402007280258221d0d00410021280c010b4100212820202121200d210c202921292025212a2026212b034020072f015c210720222023290300370300200220022903a80337039802201d2f015e221e410b490d024100210841042103024020074105490d0020072103024002402007417b6a0e020201000b200741796a210741012108410621030c010b4100210741012108410521030b41f003102c221f450d17201f41003b015e201f4100360258201f201d2f015e222c2003417f736a22053b015e201d41e0006a222d20034105746a22012800042125200128000021262027200141106a290000370300200220012900083703d0052005410c4f0d06202c200341016a22066b2005470d0720012900182120201d20034103746a290300210d201f41e0006a202d20064105746a200541057410e9081a201f201d20064103746a200541037410e9082105201d20033b015e201a2027290300370300200220022903d0053703e80320052f015e220141016a212c2001410c4f0d08201e20036b2203202c470d09202841016a2128200541c0036a201d20064102746a41c0036a200341027410e9081a4100210302400340200520034102746a41c0036a280200220620033b015c200620053602582003200320014922066a220320014b0d0120060d000b0b2024201a290300370300200220022903e8033703d8012005201d20081b22062f015e21012019200229039802370000201941086a20222903003700002002202a3602a4052002202b3602a005200220213703b805200641e0006a211e200141016a210802400240200741016a220320014b0d00201e20034105746a201e20074105746a221e2007417f7320086a222a41057410ea081a201e41186a2014290300370000201e41106a200241a0056a41106a290300370000201e41086a2019290300370000201e20022903a005370000200620034103746a200620074103746a202a41037410ea081a0c010b201e20074105746a221e20022903a005370000201e41186a2014290300370000201e41106a200241a0056a41106a290300370000201e41086a20192903003700000b200620074103746a200c370300200641c0036a211e0240200741026a222a200141026a22014f0d00201e202a4102746a201e20034102746a2003417f7320016a41027410ea081a0b201e20034102746a2029360200200620083b015e0240200320014f0d00200620074102746a41c4036a2103034020032802002201200741016a22073b015c20012006360258200341046a210320082007470d000b0b20232024290300370300200220022903d8013703a803201d210720202121201d2802582203211d200d210c200521292025212a2026212b20030d000b0b200241d8026a41086a2023290300220c370300200220022903a80322213703d80220182021370300201841086a200c370300200220253602fc02200220263602f802200220203703900320022802dc032205450d0820022802d803210141f003102c2203450d15200320053602c003200341003b015e20034100360258200541003b015c20052003360258200220033602dc032002200141016a3602d803201c200241f8026a41186a290300370300201b200241f8026a41106a290300370300201a2018290300370300200220022903f8023703e80320012028470d0920032f015e2205410b4f0d0a2003200541016a22063b015e200320054105746a220141e0006a20022903e803370000200141e8006a201a290300370000200141f0006a201b290300370000200141f8006a201c290300370000200320054103746a200d370300200341c0036a20064102746a201f360200201f20063b015c201f2003360258200220022802e00341016a3602e003200d1a20071a20281a201f1a20201a0c0c0b2019200229039802370000201941086a20222903003700002002202a3602a4052002202b3602a005200220213703b805201d41e0006a2103201e41016a210502402007201e4f0d00200320074105746a220141206a20012007417f7320056a41057410ea081a0b200320074105746a220320022903a005370000200341186a2014290300370000200341106a200241a0056a41106a290300370000200341086a2019290300370000200741016a2103201d20074103746a2101024002402007201e490d002001200c370300201d41c0036a2101201e41026a21060c010b201d20034103746a20012007417f7320056a41037410ea081a2001200c3703002007410274201d41c0036a22016a41086a200120034102746a2003417f73201e41026a22066a41027410ea081a0b2001200341027422076a2029360200201d20053b015e200320064f0d0a2007201d6a41c0036a210503402005280200220120033b015c2001201d360258200541046a21052006200341016a2203470d000c0b0b0b200720016a200c3703000c0a0b2005410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b2005410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b202c410c41f49cc700104d000b41f49bc7004128419c9cc7001039000b41e8aac700412b4194abc7001039000b41e899c700413041989ac7001039000b41a89ac700412041c89ac7001039000b200220022802e00341016a3602e0030b20092017460d0120022802dc0321070c000b0b200220113602b003200220123602ac03200220133602a8032002200e3602e0012002200f3602dc01200220103602d801200242003703e80320024198026a2015410020161b200241a8036a200241d8016a200241e8036a10fb020240024002402002280298024101470d00200229029c02220c422088a72101200241a4026a2802002107200ca721060c010b20024198026a41106a2222280200220f20024198026a41146a290200222e422088a72203412c6c6a212c20024198026a41086a2227290300212f200228029c0221120240024020030d00200f211d200f21090c010b200241e8036a410c6a211f200241e8036a410472211e20024198026a41186a212820024198026a41206a2125200f211d03402027201d2209410c6a2902003703002022200941146a222629020037030020282009411c6a22232902003703002025200941246a222429020037030020022009290204370398022009412c6a211d2009280200221b450d01201e200229039802370200201e41086a2027290300370200201e41106a2022290300370200201e41186a2028290300370200201e41206a20252903003702002002201b3602e80302400240200241d8036a201f10a20222030d00420021210c010b200329030021210b200241d0056a41086a2229201f41086a290200370300200241d0056a41106a222a201f41106a290200370300200241d0056a41186a222b201f41186a2902003703002002201f2902003703d00520022802ec0321190240024020022802f0032203450d00200341246c221c2101201b21030340200341206a2802002105200341086a290200210c200341106a290200210d20032902002120200241a0056a41186a2206200341186a290200370300200241a0056a41106a2207200d370300200241a0056a41086a2208200c370300200220203703a00502402005450d00200241d8016a41086a222d2008290300370300200241d8016a41106a22142007290300370300200241d8016a41186a220e2006290300370300200220022903a005220c3703f8022002200c3703d8012021428094ebdc0380210d2021428094ebdc038221204130102c221a450d0e200241a0016a200d42002005ad220c420010e808201a20022903d801370300201a41186a200e290300370300201a41106a2014290300370300201a41086a202d290300370300201a20022903a00122212020200c7e220c428094ebdc0380a7417f200c428080808080c0b2cd3b541b200c428094ebdc03824280cab5ee01566aad7c220c370320201a41286a200241a0016a41086a290300200c202154ad7c37030002400240024020014124470d00410121174101211c0c010b200341246a2110201b201c6a2201415c6a2111410121174101211c034020102103024002400340200341206a28020021052006200341186a2902003703002007200341106a2902003703002008200341086a290200370300200220032902003703a00502402005450d0020024190016a200d42002005ad220c420010e808200241f8026a41086a20082903002221370300200241f8026a41106a20072903002230370300200241f8026a41186a20062903002231370300200220022903a00522323703f802200e203137030020142030370300202d2021370300200220323703d8012020200c7e220c428094ebdc03802130200c428094ebdc03822131200229039001212120024190016a41086a2903002132201c2017470d03201741016a220520174f0d020c160b2001200341246a2203470d000c040b0b201741017422102005201020054b1b22054104200541044b1bad42307e2233422088a74541037421052033a721100240024020170d00200241003602a8030c010b200241083602b0032002201a3602a8032002201741306c3602ac030b200241a0056a20102005200241a8036a107d20022802a805210520022802a0054101460d0320022802a405211a200541306e21170b200341246a2110202d290300213320142903002134200e290300213520022903d8012136201a201c41306c6a220520212030a7417f200c428080808080c0b2cd3b541b20314280cab5ee01566aad7c220c37032020052036370300200541286a2032200c202154ad7c370300200541186a2035370300200541106a2034370300200541086a2033370300201c41016a211c20112003470d000b0b2019450d04201941246c450d04201b102e0c040b2005450d0f0c0e0b200341246a21032001415c6a22010d000b0b410021174108211a02402019450d00201941246c450d00201b102e0b4100211c0b200241d8016a41186a2203202b290300370300200241d8016a41106a2205202a290300370300200241d8016a41086a22012029290300370300200220022903d0053703d801200920173602042009201c3602082009201a360200200920022903d80137020c202620012903003702002023200529030037020020242003290300370200201d202c470d000b201d2109202c211d0b202f422088210c202c201d6b2203412c6d210502402003450d002005412c6c210303400240201d41046a2802002205450d00200541246c450d00201d280200102e0b201d412c6a211d200341546a22030d000b0b200ca72107202ea72108202fa7211d200f2009200f6b221f412c6d2209412c6c6a2106200f2103034020032006460d0202400240200241d8036a2003410c6a220310a20222050d004200210c0c010b2005290300210c0b20024188016a200341746a200c420010bf04200341206a21032002280288012201450d000b200228028c0121070240201f450d002009412c6c2105200f210303400240200341046a2802002206450d00200641306c450d002003280200102e0b2003412c6a2103200541546a22050d000b0b02402008450d002008412c6c450d00200f102e0b41032106201d450d00201d41306c450d002012102e0b200241d8036a10be022007ad2120410021030c050b200220123602f0032002201d3602ec03200220123602e80320022012200741306c6a3602f403200241d8016a200241e8036a10c201200241e8036a20022802d801220320022802e001200f200910b704410121060240024020022802e8034101470d00200241f4036a350200212020022902ec03210c0c010b20022802ec0321052002200241f0036a29030037029c022002200536029802200241e8036a10a90320022903f003210d200229039802210c20022903a0022120410021060b024020022802dc0141ffffff3f71450d002003102e0b0240201f450d002009412c6c2105200f210303400240200341046a2802002201450d00200141306c450d002003280200102e0b2003412c6a2103200541546a22050d000b0b02402008450d002008412c6c450d00200f102e0b200241d8036a10be0202402006450d00200c422088a72101200ca72106410021030c050b2020a72105410021030b200220033a00ed03200241013a00ec03200241173a00e803200241e8036a10fe0120024190036a420037030020024188036a4200370300200241f8026a41086a22034200370300200242003703f802200241e8036a41a5fec600411a1081022003200241e8036a41086a2201290000370300200220022900e8033703f802200241e8036a4180c3c8004105108102200b41086a2001290000370000200b20022900e80337000020024180016a200241f8026a4120108e0220022005ad3703d0012002200c3703c801200ca72126410021080c040b200241f0036a280200210120022802ec0321060c010b2003280200210120022802ec0321060240200e450d00200e41386c21052010412c6a210303400240200328020041ffffff3f71450d002003417c6a280200102e0b200341386a2103200541486a22050d000b0b41012103200f450d00200f41386c450d002010102e0b0b200241f4036a20203e020020022001ad4220862006ad843702ec03200220033602e803200241e8036a41086a2203290300210d20022903e803210c20024181063b01ec03200241173a00e803200241e8036a10fe0120024190036a420037030020024188036a4200370300200241f8026a41086a22054200370300200242003703f802200241e8036a41a5fec600411a10810220052003290000370300200220022900e8033703f802200241e8036a4180c3c8004105108102200b41086a2003290000370000200b20022900e803370000200241f8006a200241f8026a4120108e022002200d3703d0012002200c4220883e02cc012002200ca722263602c801410121080b20024190036a22014200370300200241f8026a41106a22064200370300200241f8026a41086a22034200370300200242003703f802200241e8036a41a5fec600411a1081022003200241e8036a41086a2205290000370300200220022900e8033703f802200241e8036a4180c3c8004105108102200b41086a22072005290000370000200b20022900e803370000200241f0006a200241f8026a4120108e02200228027021092002280274211d200142003703002006420037030020034200370300200242003703f802200241e8036a41a5fec600411a10810220032005290000370300200220022900e8033703f802200241e8036a4180c3c800410510810220072005290000370000200b20022900e8033700002002201d41016a410220091b3602e803200241f8026a4120200241e8036a410410b2014102200310ec04200142003703002006420037030020034200370300200242003703f802200241e8036a41a5fec600411a10810220032005290000370300200220022900e8033703f802200241e8036a41c8c4c800410810810220072005290000370000200b20022900e803370000200241f8026a412010ff01200142003703002006420037030020034200370300200242003703f802200241e8036a41a5fec600411a10810220032005290000370300200220022900e8033703f802200241e8036a41ccc5c800411010810220072005290000370000200b20022900e803370000200241f8026a412010ff01200142003703002006420037030020034200370300200242003703f802200241e8036a41a5fec600411a10810220032005290000370300200220022900e8033703f802200241e8036a4194c5c800410e10810220072005290000370000200b20022900e803370000200241f8026a412010ff010240024020080d002026450d0020022902cc012136200d410210f104200241b8056a22034200370300200241a0056a41106a22054200370300200241a0056a41086a22014200370300200242003703a005200241e8036a41f8fcc60041081081022001200241e8036a41086a2206290000370300200220022900e8033703a005200241e8036a41a8aac800410d10810220032006290000370300200520022900e803370300200241d8006a200241a0056a412010f8022036422088a7220641067422014106752203ad42d0007e220c422088a70d03200ca72205417f4c0d03200241d8006a41106a290300210c2002290360210d200228025821070240024020050d00410821180c010b2005102c2218450d030b0240024002400240200541d0006e223720034f0d00203741017422082003200820034b1b22084104200841044b1bad42d0007e2220422088a74541037421082020a7210902400240200541cf004b0d00200241003602e8030c010b200241e8036a41086a4108360200200220183602e8032002203741d0006c3602ec030b20024198026a20092008200241e8036a107d200241a0026a28020021052002280298024101460d01200228029c022118200541d0006e21370b20060d01410021172026211a0c020b2005450d050c040b202620016a2125200241c8006a200d200c427f420010e708200241c8006a41086a290300420020071b220c42002002290348420020071b220d420156200c420052200c501b22031b2130200d420120031b2131200641067441406a41067641016a2123200241e8036a41206a211b2018211e410021172026211a0240034020024198026a41286a2201201a220341286a29030037030020024198026a41206a2206200341206a29030037030020024198026a41186a2207200341186a29030037030020024198026a41106a2208200341106a29030037030020024198026a41086a2209200341086a2903003703002002200329030037039802200341c0006a211a200341306a2802002219450d01200341386a2802002105200341346a280200211c200241e8036a41286a2001290300370300201b2006290300370300200241e8036a41186a2007290300220c370300200241e8036a41106a2008290300220d370300200241e8036a41086a20092903002220370300200220022903980222213703e803200241a8036a41186a2222200c370300200241a8036a41106a2227200d370300200241a8036a41086a22282020370300200220213703a803200241d0056a41086a201b41086a2903003703002002201b2903003703d0052005ad42307e220c422088a70d06200ca72203417f4c0d060240024020030d004108211f0c010b2003102c221f450d060b200341306e21060240024020050d004200210d410021014200210c42002134420021330c010b200541306c21074200210d410021014200210c4200213442002133201921030340200341206a2903002120200341286a2903002121200241f8026a41186a200341186a2205290300370300200241f8026a41106a200341106a2208290300370300200241f8026a41086a200341086a2209290300370300200220032903003703f802200241186a202142002031420010e808200241286a203042002020420010e808200241386a202042002031420010e808200241d8016a41186a221d2005290000370300200241d8016a41106a220b2008290000370300200241d8016a41086a22082009290000370300200220032900003703d801427f200241386a41086a2903002220200229031820022903287c7c2232202142005220304200527120022903204200527220022903304200527220322020547222051b2120427f200229033820051b212102400240200241d8016a200241a8036a412010ec080d00427f203320207c203420217c22352034542205ad7c22322005203220335420322033511b22051b2133427f203520051b21340c010b200241a0056a41186a2209201d290300370300200241a0056a41106a221d200b290300370300200241a0056a41086a220b2008290300370300200220022903d8013703a005024020012006470d00200641016a22052006490d0a200641017422082005200820054b1b22054104200541044b1bad42307e2232422088a74541037421052032a721080240024020060d00200241003602d8020c010b200241083602e0022002201f3602d8022002200641306c3602dc020b200241c0056a20082005200241d8026a107d20022802c8052105024020022802c0054101470d002005450d0b0c0a0b20022802c405211f200541306e21060b201f200141306c6a2205202037030820052021370300200520022903a005370310200541186a200b290300370300200541206a201d290300370300200541286a2009290300370300200141016a21010b200341306a2103427f200c20207c200d20217c2220200d542205ad7c220d2005200d200c54200d200c511b22051b210c427f202020051b210d200741506a22070d000b0b0240201c450d00201c41306c450d002019102e0b200241d8016a41186a20222903002220370300200241d8016a41106a20272903002221370300200241d8016a41086a20282903002232370300200220022903a80322353703d801201e41386a2033370300201e41306a2034370300201e41286a200c370300201e200d370320201e41186a2020370300201e41106a2021370300201e41086a2032370300201e2035370300201e41c8006a2001360200201e41c4006a2006360200201e41c0006a201f360200201741016a2117201e41d0006a211e201a2025470d000b2025211a202321170b2025201a6b220141067521030b02402001450d0020034106742105201a41346a21030340024020032802002201450d00200141306c450d002003417c6a280200102e0b200341c0006a2103200541406a22050d000b0b0240203642ffffff1f83500d002026102e0b201741d0006c221d41d0006e213802400240201d0d00410121390c010b2038410574102c2239450d030b4100212b024020182018201d6a2209460d004100212b20392103201821050340200241a0056a41086a2201200541086a290300370300200241a0056a41106a2206200541106a290300370300200241a0056a41186a2207200541186a290300370300200220052903003703a005200241e8036a200541c0006a220510c501024020022802ec032208450d00200841306c450d0020022802e803102e0b200320022903a005370000200341186a2007290300370000200341106a2006290300370000200341086a2001290300370000202b41016a212b200341206a2103200541106a22052009470d000b0b4200213320024180046a4200370300200241e8036a41106a4200370300200241e8036a41086a22034200370300200242003703e803200241d8016a4192fdc60041071081022003200241d8016a41086a290000370300200220022900d8013703e80320024198026a41dcaac6004115108102200441086a20024198026a41086a2900003700002004200229009802370000200241106a200241e8036a4120108e02024002400240202b2002280214410020022802101b22034101200341014b1b490d002018201741d0006c6a210e024020170d002018212c420021320c020b200241a8036a41106a213a200241f8026a41106a213b2002419c036a210f200241e8036a41206a211442002133420021322018212c0340200241d8016a41386a2205202c220341386a290300370300200241d8016a41306a2201200341306a290300370300200241d8016a41286a2206200341286a290300370300200241d8016a41206a2207200341206a290300370300200241d8016a41186a2208200341186a290300370300200241d8016a41106a2209200341106a290300370300200241d8016a41086a221d200341086a2903003703002003290300210c200241c8016a41086a220b200341cc006a2802003602002002200c3703d8012002200341c4006a2902003703c801200341d0006a212c200341c0006a2802002203450d0220024198026a41386a200529030037030020024198026a41306a200129030037030020024198026a41286a200629030037030020024198026a41206a200729030037030020024198026a41186a221f200829030037030020024198026a41106a221e200929030037030020024198026a41086a221a201d290300370300200220022903d80137039802200241e8036a41386a2005290300370300200241e8036a41306a2001290300370300200241e8036a41286a200629030037030020142007290300370300200241e8036a41186a2008290300370300200241e8036a41106a2009290300370300200241e8036a41086a201d290300370300200220022903d8013703e803200241d8026a41186a201f290300370300200241d8026a41106a201e290300370300200241d8026a41086a201a29030037030020022002290398023703d802200241f8026a41186a2206201441186a290300370300200241f8026a41106a2207201441106a290300370300200241f8026a41086a2208201441086a290300223437030020022003360298032002201429030022353703f802200f20022903c801370200200f41086a200b280200360200200241d0056a200a200241d8026a10a10320022802d805210920022802d0052101200241003602b003200242013703a8032002200241f8026a3602a005200241a0056a200241a8036a10af012002203b3602a005200241a0056a200241a8036a10af01200228029803210320022802a0032205200241a8036a107602402005450d00200541306c21050340200241a8036a200341106a41201074200220033602a005200341306a2103200241a0056a200241a8036a10af01200541506a22050d000b0b2001200920022802a803220320022802b00310b201024020022802ac03450d002003102e0b024020022802d405450d002001102e0b200241d0056a41186a22112006290300370300200241d0056a41106a22122007290300370300200241d0056a41086a22132008290300370300200220022903f8023703d00520022802a4032115200228029c0321162002280298032127024020022802a0032226418102490d002026410176ad42307e220c422088a70d08200ca72210417f4c0d082010102c2223450d07202741506a2129202741f07e6a212d410021244104211a4100211f202621190340024002402019221d417f6a22010d0041012109410021190c010b02400240024002400240024002402027200141306c6a2203290300201d41306c222a20276a41a07f6a2205290300220d56200341086a2903002220200541086a290300220c562020200c511b0d00201d417e6a2108202d202a6a210341002119410021050340024020082005470d00201d21090c090b200d20032903002221582101200c200341086a2903002220512106200c2020582107200341506a2103200541016a21052021210d2020210c2001200720061b0d000b200541016a21092005417f73201d6a21010c010b202d202a6a210302400340024020014101470d00410021010c020b200d20032903002221562105200c200341086a2903002220512106200c2020562107200341506a21032001417f6a21012021210d2020210c2005200720061b0d000b0b201d2001490d01201d20264b0d02201d20016b22094101762206450d002029202a6a21032027200141306c6a21050340200241a8036a41186a2207200541186a2208290300370300200241a8036a41106a220b200541106a221e290300370300200241a8036a41086a221b200541086a221c290300370300200220052903003703a803200541206a2217290300210c200341286a2219290300210d200341086a22042903002120200341106a22222903002121200341186a22282903002130200329030021312017200341206a222529030037030020082030370300201e2021370300201c202037030020052031370300200541286a220829030021202008200d3703002022200b290300370300202820072903003703002004201b290300370300200320022903a803370300201920203703002025200c370300200341506a2103200541306a21052006417f6a22060d000b0b024020010d00200121190c060b0240200941094d0d00200121190c060b201d20264b0d03201d20016b21062027200141306c6a210b2029202a6a21220340201d2001417f6a2219490d050240201d20196b22094102490d002027200141306c6a22032903002027201941306c6a2208290300222058200341086a2205290300220d200841086a2201290300220c58200d200c511b0d00200241a0056a41186a221b200841286a2207290300370300200241a0056a41106a221c200841206a221e290300370300200241a0056a41086a2217200841186a2204290300370300200220082903103703a0052008200329030037030020012005290300370300200841106a200341106a2903003703002004200341186a290300370300201e200341206a2903003703002007200341286a29030037030041012105024020094103490d002006417f6a211e41002105200b210302400340200341306a2201290300202058200341386a2207290300220d200c58200d200c511b0d0120062005460d07200341286a200341d8006a290300370300200341206a200341d0006a290300370300200341186a200341c8006a290300370300200341106a200341c0006a290300370300200341086a20072903003703002003200129030037030020012103201e200541016a2205470d000b200541016a2105202221030c010b200541016a21050b200320203703002003200c3703082008200541306c6a220341286a201b290300370300200341206a201c290300370300200341186a2017290300370300200320022903a0053703100b2019450d06200641016a2106200b41506a210b201921012009410a4f0d060c000b0b2001201d41e4d1cc001057000b201d202641e4d1cc00104d000b200541016a200941d4d1cc00103c000b201d2001417f6a2219490d00201d202641f4d1cc00104d000b2019201d41f4d1cc001057000b0240201f2024470d00202441016a22032024490d0a202441017422052003200520034b1b22034104200341044b1b220341ffffffff01712003464102742105200341037421030240024020240d00200241003602a8030c010b200241043602b0032002201a3602a803200220244103743602ac030b200241a0056a20032005200241a8036a107d20022802a8052103024020022802a0054101470d002003450d0b0c0a0b20022802a405211a200341037621240b201a201f4103746a2203200936020420032019360200201f41016a2204211f024020044102490d0002400240024003400240024002400240201a2004221f417f6a22044103746a2203280200450d00201f410374201a6a220741746a2802002206200328020422054d0d00201f41024d0d08201a201f417d6a22034103746a2802042201200520066a4d0d01201f41034d0d08200741646a280200200120066a4b0d080c010b201f4103490d0120032802042105201a201f417d6a22034103746a28020421010b20012005490d010b201f417e6a21030b0240201f200341016a22224d0d00201f20034d0d02201a20034103746a221b2802042228201b2802006a2203201a20224103746a221c2802002217490d03200320264b0d04201b41046a21252027201741306c6a220b201c280204221e41306c22056a2106200341306c210102400240200320176b2208201e6b2203201e490d002023200b200510e908221d20056a210702400240201e4101480d002008201e4a0d010b200b2103201d21050c020b202720016a2109201d2105200b210303402003200620052006290300200529030056200641086a290300220c200541086a290300220d56200c200d511b22081b2201290300370300200341086a200141086a290300370300200341106a200141106a290300370300200341186a200141186a290300370300200341206a200141206a290300370300200341286a200141286a2903003703002005200541306a20081b2105200341306a2103200641306a200620081b220620094f0d02200720054b0d000c020b0b20232006200341306c220510e908221d20056a210702400240201e4101480d00200341014e0d010b20062103201d21050c010b202920016a21012006210303402001200341506a2206200741506a22082008290300200629030056200841086a290300220c200641086a290300220d56200c200d511b22091b2205290300370300200141086a200541086a290300370300200141106a200541106a290300370300200141186a200541186a290300370300200141206a200541206a290300370300200141286a200541286a2903003703002007200820091b21070240200b2006200320091b2203490d00201d21050c020b200141506a2101201d2105201d2007490d000b0b20032005200720056b220120014130706b10e9081a20252028201e6a360200201b2017360200201c201c41086a201f2022417f736a41037410ea081a4101211f200441014d0d050c010b0b2022201f4184d2cc00103c000b2003201f4194d2cc00103c000b2017200341a4d2cc001057000b2003202641a4d2cc00104d000b20190d000b0240202441ffffffff0171450d00201a102e0b20104130702103024020104130490d0020102003460d002023102e0b20264180022026418002491b21260b203220347c210c203320357c220d2033542206ad2120200241a8036a41186a2011290300370300200241a8036a41106a2012290300370300200241a8036a41086a2013290300370300200220022903d0053703a803200220153602d403200220263602d003200220163602cc03200220273602c803200241c0056a200a200241d8026a10f70520022802c805210720022802c0052101200241003602a805200242013703a0052002200241a8036a3602d803200241d8036a200241a0056a10af012002203a3602d803200241d8036a200241a0056a10af0120022802c803210320022802d0032205200241a0056a107602402005450d00200541306c21050340200241a0056a200341106a41201074200220033602d803200341306a2103200241d8036a200241a0056a10af01200541506a22050d000b0b200c20207c210c2001200720022802a005220320022802a80510b201024020022802a405450d002003102e0b200c2032512103200c2032542105024020022802c405450d002001102e0b2006200520031b2103024020022802cc032205450d00200541306c450d0020022802c803102e0b427f200c20031b2132427f200d20031b2133202c200e470d000c030b0b0240201d450d002039102e0b02402017450d00201741d0006c2105201841c4006a21030340024020032802002201450d00200141306c450d002003417c6a280200102e0b200341d0006a2103200541b07f6a22050d000b0b2037450d02203741d0006c450d022018102e0c020b200e202c460d000340202c220341d0006a212c0240200341c4006a2802002205450d00200541306c450d00200341c0006a280200102e0b200e202c470d000b0b02402037450d00203741d0006c450d002018102e0b20024198026a200a10960320022802a00221052002280298022103200220323703f003200220333703e80320032005200241e8036a411010b2010240200228029c02450d002003102e0b0240202b450d00202b4105742106203921030340200241e8036a2003108605200241086a20022802e803220720022802f0031087054100200228020820022d000c22054102461b210120054101712105024020022802ec03450d002007102e0b200220053a00dc01200220013602d80120024198026a200a200310f80520022802a00221072002280298022101200241003602f003200242013703e803200241d8016a200241e8036a109102200220053a00a803200241e8036a200241a8036a410110742001200720022802e803220520022802f00310b201024020022802ec03450d002005102e0b0240200228029c02450d002001102e0b200341206a2103200641606a22060d000b0b200241f0036a41043a0000200241043a00e803200241e8036a10fe012039450d002000202bad4220862038ad84370204200020393602000c010b200041003602000b200241f0056a24000f0b1036000b1038000b810301047f230041f0006b22002400200041186a22014200370300200041106a22024200370300200041086a42003703002000420037030020004192fdc6004107108102200041d8006a41b8b2c60041081081022001200041d8006a41086a290000370300200220002900583703002000412036022420002000360220200041286a2000412010ed0241042101024020002802282202450d00200028022c210302400240200041286a41086a280200450d004100210102400240024020022d00000e0404000102030b410121010c030b410221010c020b410321010c010b20004100360240200042013703382000410a36024c2000200041206a3602482000200041386a360254200041ec006a41013602002000420137025c200041909dc5003602582000200041c8006a360268200041d4006a419cebc000200041d8006a103d1a2000280238200028024010ef020240200028023c450d002000280238102e0b410421010b2003450d002002102e0b200041f0006a24004100200120014104461b0bae0301037f230041f0006b22032400200341086a4192fdc6004107108102200341186a41b29dc500410b108102200320013602382003200341386a410410a301370348200341ec006a2201200341386a41046a3602002003200341c8006a41086a3602642003200341386a3602682003200341c8006a360260200341286a200341e0006a107c024002404120102c2204450d002003422037024c20032004360248200341c8006a2002412010742003200328024822022003280250220410a3013703582001200220046a360200200320023602682003200341d8006a41086a3602642003200341d8006a360260200341386a200341e0006a107c0240200328024c450d002002102e0b20032802302201200328024022046a41206a2202417f4c0d010240024020020d00410121050c010b2002102c2205450d010b2000410036020820002002360204200020053602002000200341086a411010742000200341186a4110107420002003280228220220011074200020032802382201200410740240200328023c450d002001102e0b0240200328022c450d002002102e0b200341f0006a24000f0b1036000b1038000bfb0201017f230041f0006b220324002003200236020420032001360200200341086a2001200210ed0202400240200328020822010d00200041003602200c010b200328020c21022003200341086a41086a28020036024c20032001360248200341186a200341c8006a1085050240024020032802380d0020034100360258200342013703502003410a360264200320033602602003200341d0006a36026c2003412c6a41013602002003420137021c200341909dc5003602182003200341e0006a360228200341ec006a419cebc000200341186a103d1a2003280250200328025810ef0202402003280254450d002003280250102e0b200041003602200c010b20002003290318370300200041286a200341186a41286a290300370300200041206a200341186a41206a290300370300200041186a200341186a41186a290300370300200041106a200341186a41106a290300370300200041086a200341186a41086a2903003703000b2002450d002001102e0b200341f0006a24000b921c030a7f037e137f230041800a6b22022400200241d8006a10ab02200241b8016a41186a22034200370300200241b8016a41106a22044200370300200241b8016a41086a22054200370300200242003703b801200241e0066a41aad3c800410110b0012003200241e0066a41186a22062900003703002004200241e0066a41106a22072900003703002005200241e0066a41086a2208290000370300200220022900e0063703b801200241e0066a41aad3c800410110b001200241b8086a41186a22092006290000370300200241b8086a41106a220a2007290000370300200241b8086a41086a220b2008290000370300200220022900e0063703b80802400240024002404120102c2203450d002008200b2903003703002007200a29030037030020062009290300370300410041003502e8f54c200241a0056aad7c42adfed5e4d485fda8d8007e422189220c3e02e8f54c200241c8006a41e8f5cc00ad220d42a4bb99fed1a0bbb02385420042adfed5e4d485fda8d800420010e808200241286a200c42a4bb99fed1a0bbb02385420042adfed5e4d485fda8d800420010e808200241386a200d42c5ecb3fec9ecf7c2c30085420042adfed5e4d485fda8d800420010e808200241186a200c42c5ecb3fec9ecf7c2c30085420042adfed5e4d485fda8d800420010e808200241086a200c200d85420042adfed5e4d485fda8d800420010e8082002418c026a420037020020024194026a4200370200200220022903b8083703e0062002410436028802200241d8016a41d0006a41d081ca00360200200241d8016a41c8006a4108360200200241d8016a41c4006a20033602002002200241b8016a3602ac022002200241d8006a3602a402200241013a00b002200241c9026a2006290300370000200241c1026a2007290300370000200241b9026a2008290300370000200241b1026a20022903e006370000200241d3026a200241a2056a2d00003a0000200241d1026a20022f00a0053b0000200241d8016a41286a4200370300200241d8016a41246a41d0a1c000360200200241003602d402200241003602f8012002200241186a41086a290300200229031885200d7c200241086a41086a29030020022903088542cf829ebbefefde82147c220e423088893703f0012002200c200241386a41086a2903002002290338857c200e422088893703e8012002200241286a41086a290300200229032885200d7c200e421088893703e0012002200c200241c8006a41086a2903002002290348857c200e893703d8012001280200220f2001280208221041d0006c6a2111200241e0066a41306a2112200241e0066a41206a2113200241b8086a41246a2104200241f8026a41046a2105200241e0066a41046a2103200241e0066a410172211420012802042115200f2116410021170340201621012017211802400240034002400240024020112001470d00200241e0066a41386a200241a0056a41386a290300370300200241e0066a41306a200241a0056a41306a290300370300200241e0066a41286a200241a0056a41286a290300370300200241e0066a41206a200241a0056a41206a290300370300200241e0066a41186a200241a0056a41186a290300370300200241e0066a41106a200241a0056a41106a290300370300200241e0066a41086a200241a0056a41086a290300370300200220022903a0053703e006201121010c010b200241a0056a41386a200141386a2219290300370300200241a0056a41306a200141306a221a290300370300200241a0056a41286a200141286a221b290300370300200241a0056a41206a200141206a221c290300370300200241a0056a41186a200141186a2216290300370300200241a0056a41106a200141106a2217290300370300200241a0056a41086a200141086a221d290300370300200220012903003703a005200141c0006a280200211e200141c4006a280200211f200141c8006a290200210c200241e0066a41386a222020192903003703002012201a290300370300200241e0066a41286a2219201b2903003703002013201c29030037030020062016290300370300200720172903003703002008201d290300370300200220012903003703e006201e0d01200141d0006a21010b024020112001460d0003402001220341d0006a21010240200341c4006a2802002204450d00200441306c450d00200341c0006a280200102e0b20112001470d000b0b02402015450d00201541d0006c450d00200f102e0b200241d8016a109b08200241e0066a200241d8006a41e00010e9081a200241d8076a200241d0016a290300370300200241d0076a200241c8016a290300370300200241c8076a200241b8016a41086a290300370300200220022903b8013703c007200041086a200241e0066a41800110e9081a200041003602000c080b200241e0036a41386a221a2020290300370300200241e0036a41306a221b2012290300370300200241e0036a41286a221c2019290300370300200241e0036a41206a22192013290300370300200241e0036a41186a22162006290300370300200241e0036a41106a22172007290300370300200241e0036a41086a221d2008290300370300200220022903e0063703e003200341386a201a290300370200200341306a201b290300370200200341286a201c290300370200200341206a2019290300370200200341186a2016290300370200200341106a2017290300370200200341086a201d290300370200200320022903e003370200200241b8086a200241e0066a41c40010e9081a200241f8026a41086a200b290200370300200241f8026a41106a200a290200370300200241f8026a41186a2009290200370300200241f8026a41206a200241b8086a41206a280200360200200241d8026a41086a2219200441086a290200370300200241d8026a41106a221a200441106a290200370300200241d8026a41186a221b200441186a290200370300200220022902b8083703f802200220042902003703d802200241a0036a41186a221c200541186a290000370300200241a0036a41106a2216200541106a290000370300200241a0036a41086a2217200541086a290000370300200220052900003703a003200241c0036a41186a221d201b290300370300200241c0036a41106a2220201a290300370300200241c0036a41086a22212019290300370300200220022903d8023703c003200241a8086a200241a0036a10a603200241e0066a20022802a808221b20022802b00810a70320022d00e006211a200241b8086a201441c00110e9081a410021190240201a4101470d00200241a0056a200241b8086a41c00110e9081a410121190b024020022802ac08450d00201b102e0b024002402019450d00200241e0036a200241a0056a41c00110e9081a2006201c2903003703002007201629030037030020082017290300370300201320022903c003370300201341086a2021290300370300201341106a2020290300370300201341186a201d290300370300200220022903a0033703e0062002200c3703a8072002201f3602a4072002201e3602a007201841016a2117200141d0006a21164100211903402002200241e0036a20194198fac6006a221a28000010d1032002280204221e41046a221f417f4c0d022002280200211b02400240201f0d004101211c0c010b201f102c221c450d080b200241003602a8052002201f3602a4052002201c3602a005200241a0056a201a41041074201e200241a0056a1076200241a0056a201b201e107420022802a805211e20022802a005211f200220183602a808200241b8086a200241d8016a201f201e200241a8086a4104109c08024020022802a405450d00201f102e0b20022802bc08211f024020022802b8084101470d0002400240201f2d00000e0407070007010b201f41086a280200450d06201f41046a280200102e0c060b201f41286a280200450d05201f41246a280200102e0c050b0240201f450d0020022802c008450d00201f102e0b201941046a22194118460d050c000b0b0240201f450d00201f41306c450d00201e102e0b200141d0006a2101201841016a21180c010b0b1038000b201f102e200041086a411a360200200041f881ca00360204200041013602000c040b200220183602fc09200241003602a805200242013703a005200241a0056a200241e0066a41201074200220133602a808200241a8086a200241a0056a10af01200220123602a808200241a8086a200241a0056a10af0120022802a007211f20022802a8072218200241a0056a107602402018450d00201841306c21180340200241a0056a201f41106a412010742002201f3602a808201f41306a211f200241a8086a200241a0056a10af01201841506a22180d000b0b200241b8086a200241d8016a200241fc096a410420022802a005221f20022802a805109c08024020022802a405450d00201f102e0b024020022802b8084101470d000240024020022802bc0822032d00000e0405050005010b200341086a280200450d04200341046a280200102e0c040b200341286a280200450d03200341246a280200102e0c030b024020022802bc082201450d0020022802c008450d002001102e0b20022802a4072201450d00200141306c450d0020022802a007102e0c000b0b1036000b2003102e200041086a411a360200200041f881ca00360204200041013602000b201141b07f6a2103024020022802a4072204450d00200441306c450d0020022802a007102e0b024020032001460d00201041d0006c200f6a41b07f6a21040340024020014194016a2802002203450d00200341306c450d0020014190016a280200102e0b2004200141d0006a2201470d000b0b02402015450d00201541d0006c450d00200f102e0b200241d8016a109b08200241d8006a10b8020b200241800a6a24000b850201037f230041d0006b22022400200241086a41a081ca004107108102200241186a41a781ca004112108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000bdf0902087f047e230041b0016b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022010d00200041003602000c010b200341186a280200210220032802142104200341003a0060024002402002450d00200320012d00003a0040200341013a0060024020024101460d00200320012d00013a0041200341023a006020024102460d00200320012d00023a0042200341033a006020024103460d00200320012d00033a0043200341043a006020024104460d00200320012d00043a0044200341053a006020024105460d00200320012d00053a0045200341063a006020024106460d00200320012d00063a0046200341073a006020024107460d00200320012d00073a0047200341083a006020024108460d00200320012d00083a0048200341093a006020024109460d00200320012d00093a00492003410a3a00602002410a460d00200320012d000a3a004a2003410b3a00602002410b460d00200320012d000b3a004b2003410c3a00602002410c460d00200320012d000c3a004c2003410d3a00602002410d460d00200320012d000d3a004d2003410e3a00602002410e460d00200320012d000e3a004e2003410f3a00602002410f460d00200320012d000f3a004f200341103a006020024110460d00200320012d00103a0050200341113a006020024111460d00200320012d00113a0051200341123a006020024112460d00200320012d00123a0052200341133a006020024113460d00200320012d00133a0053200341143a006020024114460d00200320012d00143a0054200341153a006020024115460d00200320012d00153a0055200341163a006020024116460d00200320012d00163a0056200341173a006020024117460d00200320012d00173a0057200341183a006020024118460d00200320012d00183a0058200341193a006020024119460d00200320012d00193a00592003411a3a00602002411a460d00200320012d001a3a005a2003411b3a00602002411b460d00200320012d001b3a005b2003411c3a00602002411c460d00200320012d001c3a005c2003411d3a00602002411d460d00200320012d001d3a005d2003411e3a00602002411e460d00200320012d001e3a005e2003411f3a00602002411f460d00200341206a41106a2205200341c0006a41106a2206290300370300200341206a41086a2207200341c0006a41086a2208290300370300200320012d001f3a005f200341206a41186a2209200341c0006a41186a220a290300370300200341203a006020032003290340220b3703682003200b3703202002417c714120460d0120082007290300220b37030020062005290300220c370300200a2009290300220d37030020032003290320220e370340200128002021022000411c6a200d370200200041146a200c3702002000410c6a200b3702002000200e370204200041246a2002360200410121020c020b200341003a00600b4100210220034100360270200342013703682003410a3602242003200341086a3602202003200341e8006a3602ac01200341d4006a410136020020034201370244200341909dc5003602402003200341206a360250200341ac016a419cebc000200341c0006a103d1a2003280268200328027010ef02200328026c450d002003280268102e0b200020023602002004450d002001102e0b200341b0016a24000bb40201037f230041e0006b22022400200241086a41a081ca004107108102200241186a41b4d3c1004108108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241c8006a41086a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000bcb0201027f230041c0036b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022010d00200041003a00000c010b200328021421042003200341186a2802003602ac03200320013602a803200341e0016a200341a8036a109903410121020240024020032d00e0014101470d004100210220034100360228200342013703202003410a3602b4032003200341086a3602b0032003200341206a3602bc03200341f4016a4101360200200342013702e401200341909dc5003602e0012003200341b0036a3602f001200341bc036a419cebc000200341e0016a103d1a2003280220200328022810ef022003280224450d012003280220102e0c010b200341206a200341e0016a41017241c00110e9081a200041016a200341206a41c00110e9081a0b200020023a00002004450d002001102e0b200341c0036a24000b986905087f017e097f027e017f230041d0026b2205240002404108102c2206450d0020062001200241e0016c6a2207360204200620013602004108102c2208450d0020082003200441e0016c6a22093602042008200336020002400240024002400240024002402000450d00200541c0016a210a0c010b200541d8016a220b4200370300200541d0016a22044200370300200541c0016a41086a22024200370300200542003703c001200541a8026a41a0dac800410f1081022002200541a8026a41086a220c290000370300200520052900a8023703c001200541a8026a41a0eec8004107108102200b200c290000370300200420052900a802370300200541c0016a210a200541c0016a4120108f02450d010b200541a8026a200610a9070240024020052802a802450d00200541c0016a41106a200541a8026a41106a290300370300200541c0016a41086a200541a8026a41086a290300370300200541c0016a41186a200541a8026a41186a290300370300200541c0016a41206a200541a8026a41206a280200360200200541a0016a41086a200541cc016a290200370300200541a0016a41106a200541d4016a290200370300200541a0016a41186a200541dc016a290200370300200520052903a8023703c001200520052902c4013703a001200541c0016a200610aa07417f20052802c001220441016a220220022004491bad42287e220d422088a70d06200da72204417f4c0d062004102c220e450d07200e20052903a001370300200e4201370320200e41186a200541a0016a41186a220f290300370300200e41106a200541a0016a41106a2210290300370300200e41086a200541a0016a41086a2211290300370300200541a8026a200610a907200441286e2112024020052802a8020d00410121022006102e0c020b200541c0016a410472210b4128210c410221134101210202400340200541c0016a41206a200541a8026a41206a280200360200200541c0016a41186a2214200541a8026a41186a290300370300200541c0016a41106a2215200541a8026a41106a290300370300200541c0016a41086a2216200541a8026a41086a290300370300200520052903a8023703c0012011200b41086a2902003703002010200b41106a290200370300200f200b41186a2902003703002005200b2902003703a0012014200f2903003703002015201029030037030020162011290300370300200520052903a0013703c001024020022012470d00200541a8026a200610aa072002417f20052802a802220441016a221220122004491b6a22042002490d0920132004201320044b1b22044104200441044b1bad42287e220d422088a7454103742104200da721120240024020020d00200541003602a8020c010b200541083602b0022005200c3602ac022005200e3602a8020b20054180016a20122004200541a8026a107d20052802880121042005280280014101460d02200528028401210e200441286e21120b200e200c6a220420052903c001370300200441186a2014290300370300200441106a2015290300370300200441086a2016290300370300200441206a4201370300200541a8026a200610a907200c41286a210c201341026a2113200241016a210220052802a8020d000b2006102e0c020b2004450d060c070b2006102e4108210e41002102410021120b200541d8016a220b4200370300200541d0016a22044200370300200541c0016a41086a4200370300200542003703c001200541a8026a41a0dac800410f108102200a41086a200541a8026a41086a220c290000370000200a20052900a802370000200541a8026a41a0eec8004107108102200b200c290000370300200420052900a802370300200541a8026a200a4120109d0320052802a8024101460d01200520023602c801200520123602c4012005200e3602c001200541a0016a200541c0016a41004100200510ab070c020b200b42003703002004420037030020024200370300200542003703c001200541a8026a41a0dac800410f1081022002200c290000370300200520052900a8023703c001200541a8026a41e0eec800410c108102200441086a200c290000370000200420052900a802370000200541d0006a200541c0016a1085032005290358210d20052802502113200b42003703002004420037030020024200370300200542003703c001200541a8026a41a081ca0041071081022002200c290000370300200520052900a8023703c001200541e0006a41e4d1c100410c108102200b200541e0006a41086a29000037030020042005290060370300200541c8006a200541c0016a4120108e02200528024c21022005280248210b200541c0016a200d420020131b10ac0720052802c801210c20052802c0012104200520024100200b1b3602a8022004200c200541a8026a410410b201024020052802c401450d002004102e0b2008102e2006102e0c020b200a412010ff0120052902ac02210d200520023602c801200520123602c4012005200e3602c001200541a0016a200541c0016a200da74101200d422088a710ab070b20052d00a0012114200541d8016a220b4200370300200541d0016a220c4200370300200541c0016a41086a22134200370300200542003703c001200541a8026a41a0dac800410f108102200a41086a2215200541a8026a41086a2202290000370000200a20052900a802370000200541a8026a41e0eec800410c108102200441086a22162002290000370000200420052900a802370000200541386a200a1085032005290340420020052802381b210d024020144106470d00200b4200370300200c420037030020134200370300200542003703c001200541a8026a41a0dac800410f10810220152002290000370000200a20052900a802370000200541a8026a41e0eec800410c10810220162002290000370000200420052900a8023700002005200d42017c220d3703a802200a4120200541a8026a410810b2010b200b4200370300200c420037030020134200370300200542003703c001200541a8026a41a081ca00410710810220132002290000370300200520052900a8023703c001200541e0006a41e4d1c100410c108102200b200541e0006a41086a290000370300200c2005290060370300200541306a200541c0016a4120108e02200528023421022005280230210b200541c0016a200d10ac0720052802c801210c20052802c0012104200520024100200b1b3602a8022004200c200541a8026a410410b201024020052802c401450d002004102e0b2008102e0b4108102c2211450d0120112007360204201120013602004108102c2208450d012008200936020420082003360200200541a8026a201110ad070240024020052802a802450d00200541c0016a41106a200541a8026a41106a290300370300200541c0016a41086a200541a8026a41086a290300370300200541c0016a41186a200541a8026a41186a290300370300200541c0016a41206a200541a8026a41206a280200360200200541a0016a41086a200541cc016a290200370300200541a0016a41106a200541d4016a290200370300200541a0016a41186a200541dc016a290200370300200520052903a8023703c001200520052902c4013703a001200541c0016a201110aa07417f20052802c001220441016a220220022004491bad42287e220d422088a70d02200da72204417f4c0d022004102c2210450d03201020052903a00137030020104201370320201041186a200541a0016a41186a220e290300370300201041106a200541a0016a41106a2206290300370300201041086a200541a0016a41086a220f290300370300200541a8026a201110ad07200441286e2102024020052802a8020d004101210c2011102e0c020b200541c0016a410472210441c80021134101210c02400340200541c0016a41206a200541a8026a41206a280200360200200541c0016a41186a2214200541a8026a41186a290300370300200541c0016a41106a2215200541a8026a41106a290300370300200541c0016a41086a2216200541a8026a41086a290300370300200520052903a8023703c001200f200441086a2902003703002006200441106a290200370300200e200441186a290200370300200520042902003703a0012014200e290300370300201520062903003703002016200f290300370300200520052903a0013703c0010240200c2002470d00200541a8026a201110aa072002417f20052802a802220b41016a22122012200b491b6a220b2002490d0520024101742212200b2012200b4b1b220b4104200b41044b1bad42287e220d422088a745410374210b200da721120240024020020d00200541003602a8020c010b200541083602b002200520103602a8022005200241286c3602ac020b20054180016a2012200b200541a8026a107d20052802880121022005280280014101460d022005280284012110200241286e21020b201020136a221241606a220b20052903c0013703002016290300210d201529030021172014290300211820124201370300200b41186a2018370300200b41106a2017370300200b41086a200d370300200541a8026a201110ad07201341286a2113200c41016a210c20052802a8020d000b2011102e0c020b20020d030c020b2011102e410821104100210c410021020b200541a8026a200810ad070240024020052802a802450d00200541c0016a41106a200541a8026a41106a290300370300200541c0016a41086a200541a8026a41086a290300370300200541c0016a41186a200541a8026a41186a290300370300200541c0016a41206a200541a8026a41206a280200360200200541a0016a41086a200541cc016a290200370300200541a0016a41106a200541d4016a290200370300200541a0016a41186a200541dc016a290200370300200520052903a8023703c001200520052902c4013703a001200541c0016a200810aa07417f20052802c001220441016a220b200b2004491bad42287e220d422088a70d02200da72204417f4c0d022004102c220f450d03200f20052903a001370300200f4201370320200f41186a200541a0016a41186a2211290300370300200f41106a200541a0016a41106a2212290300370300200f41086a200541a0016a41086a220a290300370300200541a8026a200810ad07200441286e2114024020052802a8020d00410121152008102e0c020b200541c0016a410472210441c80021134101211502400340200541c0016a41206a200541a8026a41206a280200360200200541c0016a41186a2216200541a8026a41186a290300370300200541c0016a41106a220e200541a8026a41106a290300370300200541c0016a41086a2206200541a8026a41086a290300370300200520052903a8023703c001200a200441086a2902003703002012200441106a2902003703002011200441186a290200370300200520042902003703a00120162011290300370300200e20122903003703002006200a290300370300200520052903a0013703c001024020152014470d00200541a8026a200810aa072014417f20052802a802220b41016a22192019200b491b6a220b2014490d0520144101742219200b2019200b4b1b220b4104200b41044b1bad42287e220d422088a745410374210b200da721190240024020140d00200541003602a8020c010b200541083602b0022005200f3602a8022005201441286c3602ac020b20054180016a2019200b200541a8026a107d200528028801210b2005280280014101460d02200528028401210f200b41286e21140b200f20136a221941606a220b20052903c0013703002006290300210d200e29030021172016290300211820194201370300200b41186a2018370300200b41106a2017370300200b41086a200d370300200541a8026a200810ad07201341286a2113201541016a211520052802a8020d000b2008102e0c020b200b0d030c020b2008102e410021144108210f410021150b200541f8006a22134200370300200541f0006a220e4200370300200541e0006a41086a2204420037030020054200370360200541a8026a41a8f8c60041041081022004200541a8026a41086a220b290000370300200520052900a802370360200541a8026a41fa8bc500410a1081022013200b290000370300200e20052900a802370300200541206a200541e0006a10850302402005290328420020052802201b221742017c220d2017540d0020134200370300200e42003703002004420037030020054200370360200541a8026a41a8f8c60041041081022004200b290000370300200520052900a802370360200541a8026a41fa8bc500410a108102200e41086a2216200b290000370000200e20052900a8023700002005200d3703c001200541e0006a4120200541c0016a410810b20120134200370300200e42003703002004420037030020054200370360200541a8026a41a8f8c60041041081022004200b290000370300200520052900a802370360200541a8026a41a58bc500410b1081022016200b290000370000200e20052900a802370000200c41286c4104722204417f4c0d012004102c220b450d02200541003602c801200520043602c4012005200b3602c001200c200541c0016a10760240200c41286c2204450d00201020046a210b201021040340200541c0016a2004412010742005200441206a2903003703a802200541c0016a200541a8026a41081074200441286a2204200b470d000b0b200541e0006a412020052802c001220420052802c80110b201024020052802c401450d002004102e0b02402002450d00200241286c450d002010102e0b0240200d42017c2217200d540d00200541a0016a41186a22044200370300200541a0016a41106a22064200370300200541a0016a41086a22024200370300200542003703a001200541a8026a41a8f8c60041041081022002200541a8026a41086a220b290000370300200520052900a8023703a001200541a8026a41978bc500410e1081022004200b290000370300200620052900a802370300200541c0016a200541a0016a10a30420052d00c0012104200541e0006a41186a2202200541d9016a290000370300200541e0006a41106a220b200541d1016a290000370300200541e0006a41086a220c200541c9016a290000370300200520052900c1013703600240024020044101460d0020054180016a41186a420037030020054180016a41106a420037030020054180016a41086a420037030020054200370380010c010b20054180016a41186a200229030037030020054180016a41106a200b29030037030020054180016a41086a200c29030037030020052005290360370380010b200541e0006a41186a220b4200370300200541e0006a41106a220c4200370300200541e0006a41086a2202420037030020054200370360200541a8026a41a8f8c60041041081022002200541a8026a41086a2204290000370300200520052900a802370360200541a8026a41ee8bc500410c108102200e41086a22132004290000370000200e20052900a802370000200541186a200541e0006a4120108e02200528021c211620052802182110200b4200370300200c42003703002002420037030020054200370360200541a8026a41a8f8c600410410810220022004290000370300200520052900a802370360200541a8026a41ee8bc500410c10810220132004290000370000200e20052900a802370000200541003602c001200541e0006a4120200541c0016a410410b201200541a8026a41186a20054180016a41186a290300370300200541a8026a41106a20054180016a41106a290300370300200420054180016a41086a29030037030020052005290380013703a802417f2016410020101b221041016a220420042010491b410d744128722204417f4c0d022004102c220b450d0341002102200541003602f801200520043602f4012005200b3602f001200541f0016a200541a8026a41201074200520173703c001200541f0016a200541c0016a4108107441002104034020022010200220104b1b21160240034002402004450d00200b200c470d02201341ffffff3f71450d002004102e0b024020162002460d0020054188026a200210db06200541e0006a200528028802220b200528029002220c10b60502400240200528026022040d004200210d410121040c010b200b200c10ff012005290264210d0b0240200528028c02450d00200b102e0b200241016a21022004200d422088a74105746a210c200da721132004210b0c010b0b200541c0016a20052802f001220420052802f80110b001024020052802f401450d002004102e0b200541f8006a4200370300200541f0006a4200370300200541e0006a41086a2204420037030020054200370360200541a8026a41a8f8c60041041081022004200541a8026a41086a2202290000370300200520052900a802370360200541a8026a41978bc500410e108102200e41086a2002290000370000200e20052900a8023700004120102c2204450d05200542203702ac02200520043602a802200541a8026a200541c0016a41201074200541e0006a412020052802a802220420052802b00210b201024020052802ac02450d002004102e0b200541a0016a41186a20054180016a41186a290300370300200541a0016a41106a20054180016a41106a290300370300200541a0016a41086a20054180016a41086a29030037030020052005290380013703a001200541e0006a41186a4200370300200541e0006a41106a4200370300200541e0006a41086a2204420037030020054200370360200541a8026a41a8f8c60041041081022004200541a8026a41086a2202290000370300200520052900a802370360200541a8026a41c28cc500410a108102200e41086a2002290000370000200e20052900a8023700004120102c2204450d05200542203702c401200520043602c001200541c0016a200541a0016a41201074200541e0006a412020052802c001220420052802c80110b201024020052802c401450d002004102e0b200541f8006a4200370300200541f0006a4200370300200541e0006a41086a2204420037030020054200370360200541a8026a41a8f8c60041041081022004200541a8026a41086a2202290000370300200520052900a802370360200541a8026a41ba8bc500410f108102200e41086a2002290000370000200e20052900a802370000201541286c4104722204417f4c0d042004102c2202450d05200541003602c801200520043602c401200520023602c0012015200541c0016a10760240201541286c2204450d00200f20046a2102200f21040340200541c0016a2004412010742005200441206a2903003703a802200541c0016a200541a8026a41081074200441286a22042002470d000b0b200541e0006a412020052802c001220420052802c80110b201024020052802c401450d002004102e0b200541a0016a41186a220c4200370300200541a0016a41106a22134200370300200541a0016a41086a22044200370300200542003703a001200541a8026a41a8f8c60041041081022004200541a8026a41086a2202290000370300200520052900a8023703a001200541e0006a41b08bc500410a108102200641086a2216200541e0006a41086a220b29000037000020062005290060370000200541c0016a200541a0016a4120109d03200541c0016a41086a2212280200210a20052802c0012108200541e0006a41186a22104200370300200541e0006a41106a22114200370300200b420037030020054200370360200541a8026a41d9fcc6004106108102200b2002290000370300200520052900a802370360200541a8026a4180f4cb004106108102200e41086a2002290000370000200e20052900a802370000200541106a200541e0006a4120108e0220122005280214410020052802101b360200200541013602c0012005200a410020084101461b3602c401200c42003703002013420037030020044200370300200542003703a001200541a8026a41a8f8c600410410810220042002290000370300200520052900a8023703a001200541e0006a41b08bc500410a1081022016200b29000037000020062005290060370000200541a0016a4120200541c0016a410472109e03200c42003703002013420037030020044200370300200542003703a001200541a8026a41a8f8c600410410810220042002290000370300200520052900a8023703a001200541a8026a41978bc500410e10810220162002290000370000200620052900a802370000200541c0016a200541a0016a10a30420052d00c00121022010200541d9016a2900003703002011200541d1016a290000370300200b200541c9016a290000370300200520052900c1013703600240024020024101460d00200c42003703002013420037030020044200370300200542003703a0010c010b200c2010290300370300201320112903003703002004200b290300370300200520052903603703a0010b200541c0016a410c6a2015360200200541c0016a41086a2014360200200541c0016a41106a20052903a001370300200541c0016a41186a200541a0016a41086a290300370300200541e0016a200541a0016a41106a290300370300200541c0016a41286a200541a0016a41186a2903003703002005200f3602c401200541003602c001200541a8026a200541c0016a10a404200541eb006a200541a8026a41086a2204280200360000200520052903a802370063200541a8026a410c6a200541e7006a290000370000200541c28289aa043600a902200541023a00a802200520052900603700ad02200541a8026a10a50402402014450d00201441286c450d00200f102e0b200541e0006a41186a4200370300200541e0006a41106a4200370300200541e0006a41086a2202420037030020054200370360200541a8026a41a8f8c600410410810220022004290000370300200520052900a802370360200541a8026a41d48bc500410f108102200e41086a2004290000370000200e20052900a802370000200541c0016a200541e0006a10b005024020052d00d00122044103460d0020052903c001210d20052903c8012117200541f8006a4200370300200541f0006a4200370300200541e0006a41086a2202420037030020054200370360200541a8026a41a8f8c60041041081022002200541a8026a41086a220b290000370300200520052900a802370360200541a8026a418c8bc500410b108102200e41086a200b290000370000200e20052900a802370000200541e0006a200d2017200410c2050b200541e0006a41186a4200370300200541f0006a4200370300200541e0006a41086a2204420037030020054200370360200541a8026a41a8f8c60041041081022004200541a8026a41086a2202290000370300200520052900a802370360200541a8026a41aa8cc5004118108102200e41086a2002290000370000200e20052900a80237000020054120360284022005200541e0006a3602800220054188026a200541e0006a412010ed020240024020052802880222020d00410321040c010b200528028c02210b200520054188026a41086a28020036029c022005200236029802200541c0016a20054198026a1095020240024020052d00d00122044103470d00200541003602b002200542013703a8022005410a3602f401200520054180026a3602f0012005200541a8026a3602a402200541d4016a4101360200200542013702c401200541909dc5003602c0012005200541f0016a3602d001200541a4026a419cebc000200541c0016a103d1a20052802a80220052802b00210ef02024020052802ac02450d0020052802a802102e0b0c010b200520052800d1013602a8022005200541d4016a2800003600ab0220052903c801210d20052903c00121170b0240200b450d002002102e0b024020044103470d00410321040c010b200541e0006a412010ff010b200520052800ab0236008b02200520052802a80236028802024020044103460d00200541e0006a41186a4200370300200541e0006a41106a4200370300200541e0006a41086a220b420037030020054200370360200541a8026a41a8f8c6004104108102200b200541a8026a41086a2202290000370300200520052900a802370360200541a8026a41d48bc500410f108102200e41086a2002290000370000200e20052900a802370000200541e0006a2017200d200410c205200541c0016a41186a20043a0000200541c0016a41106a200d370300200541c0016a41086a2017370300200541dc016a200528008b0236000020052005280288023600d901200541023602c001200541a8026a200541c0016a10a404200541e0006a41036a220441086a2002280200360000200420052903a802370000200541b4026a200541e7006a290000370000200541c28289aa043600a902200541023a00a802200520052900603700ad02200541a8026a10a5040b4108102c2206450d0520062007360204200620013602004108102c2212450d052012200936020420122003360200200541c0016a41186a22044200370300200541c0016a41106a22114200370300200541c0016a41086a22024200370300200542003703c001200541a8026a41d9fcc60041061081022002200541a8026a41086a220b290000370300200520052900a8023703c001200541e0006a4180f4cb0041061081022004200541e0006a41086a221429000037030020112005290060370300200541086a200541c0016a4120108e022005280208210c200528020c2113200442003703002011420037030020024200370300200542003703c001200541a8026a41bed8c80041081081022002200b290000370300200520052900a8023703c001200541a8026a41dbdac800410e1081022004200b290000370300201120052900a8023703002005201341b0096a41b009200c1b3602a802200541c0016a4120200541a8026a410410b201200541a8026a200610ae070240024020052802a802450d002011200541a8026a41106a2903003703002002200b2903003703002004200541a8026a41186a290300370300200541c0016a41206a200541a8026a41206a2802003602002014200541cc016a290200370300200541e0006a41106a200541d4016a290200370300200541e0006a41186a200541dc016a290200370300200520052903a8023703c001200520052902c401370360200541c0016a200610aa07417f20052802c001220441016a220220022004491b220441ffffff3f712004470d0620044105742204417f4c0d062004102c220e450d07200541e0006a41086a290300210d200541e0006a41106a290300211720052903602118200e41186a200541e0006a41186a290300370000200e41106a2017370000200e41086a200d370000200e2018370000200541a8026a200610ae072004410576210b024020052802a8020d004101210c2006102e0c020b200541c0016a4104722104412021134101210c02400340200541c0016a41206a200541a8026a41206a280200360200200541c0016a41186a2214200541a8026a41186a290300370300200541c0016a41106a2215200541a8026a41106a290300370300200541c0016a41086a2216200541a8026a41086a290300370300200520052903a8023703c001200541a0016a41086a2202200441086a290000370300200541a0016a41106a220f200441106a290000370300200541a0016a41186a2210200441186a290000370300200520042900003703a001201420102903003703002015200f29030037030020162002290300370300200520052903a0013703c0010240200c200b470d00200541a8026a200610aa07200b417f20052802a802220241016a220f200f2002491b6a2202200b490d09200b410174220f2002200f20024b1b22024104200241044b1b220241ffffff3f71200246210f2002410574210202400240200b0d00200541003602a8020c010b200541013602b0022005200e3602a8022005200b4105743602ac020b20054180016a2002200f200541a8026a107d20052802880121022005280280014101460d02200528028401210e2002410576210b0b200e20136a220220052903c001370000200241186a2014290300370000200241106a2015290300370000200241086a2016290300370000200541a8026a200610ae07201341206a2113200c41016a210c20052802a8020d000b2006102e0c020b20020d070c060b2006102e4101210e4100210c4100210b0b200541d8016a4200370300200541d0016a4200370300200541c0016a41086a22044200370300200542003703c001200541a8026a41bed8c80041081081022004200541a8026a41086a2202290000370300200520052900a8023703c001200541a8026a41e9d8c8004104108102201141086a2002290000370000201120052900a802370000200c4105744104722204417f4c0d042004102c2202450d05200541003602b002200520043602ac02200520023602a802200c200541a8026a10760240200c450d00200c4105742102200e21040340200541a8026a200441201074200441206a2104200241606a22020d000b0b200541c0016a412020052802a802220420052802b00210b201024020052802ac02450d002004102e0b0240200b41ffffff3f71450d00200e102e0b2012102e4108102c2204450d0520042007360204200420013602004108102c2202450d0520022009360204200220033602002002102e2004102e4108102c2204450d0520042007360204200420013602004108102c2202450d0520022009360204200220033602002002102e2004102e4108102c220e450d05200e2007360204200e20013602004108102c2206450d052006200936020420062003360200024002402000450d00200541a8026a200e10af070240024020052802a802450d00200541c0016a41106a200541a8026a41106a290300370300200541c0016a41086a200541a8026a41086a290300370300200541c0016a41186a200541a8026a41186a290300370300200541c0016a41206a200541a8026a41206a280200360200200541e0006a41086a200541cc016a290200370300200541e0006a41106a200541d4016a290200370300200541e0006a41186a200541dc016a290200370300200520052903a8023703c001200520052902c401370360200541c0016a200e10aa07417f20052802c001220441016a220220022004491b220441ffffff3f712004470d0820044105742204417f4c0d082004102c220f450d09200541e0006a41086a290300210d200541e0006a41106a290300211720052903602118200f41186a200541e0006a41186a290300370000200f41106a2017370000200f41086a200d370000200f2018370000200541a8026a200e10af072004410576211202400240024020052802a8020d00410121040c010b200541c0016a41047221024120210c41022113410121040340200541c0016a41206a200541a8026a41206a280200360200200541c0016a41186a2214200541a8026a41186a290300370300200541c0016a41106a2215200541a8026a41106a290300370300200541c0016a41086a2216200541a8026a41086a290300370300200520052903a8023703c001200541a0016a41086a220b200241086a290000370300200541a0016a41106a2210200241106a290000370300200541a0016a41186a2211200241186a290000370300200520022900003703a00120142011290300370300201520102903003703002016200b290300370300200520052903a0013703c001024020042012470d00200541a8026a200e10aa072004417f20052802a802220b41016a22102010200b491b6a220b2004490d0c2013200b2013200b4b1b220b4104200b41044b1b220b41ffffff3f71200b462110200b410574210b0240024020040d00200541003602a8020c010b200541013602b0022005200c3602ac022005200f3602a8020b20054180016a200b2010200541a8026a107d200528028801210b2005280280014101460d03200528028401210f200b41057621120b200f200c6a220b20052903c001370000200b41186a2014290300370000200b41106a2015290300370000200b41086a2016290300370000200541a8026a200e10af07200c41206a210c201341026a2113200441016a210420052802a8020d000b0b200e102e200520043602c801200520123602c4012005200f3602c0010c020b200b0d090c080b41002112200541003602c801200542013703c001200e102e4101210f0b200541c0026a22044200370300200541b8026a220a4200370300200541a8026a41086a4200370300200542003703a802200541a8026a41b2fdc6004112108102200541e0006a41e9d8c80041041081022004200541e0006a41086a290000370300200a2005290060370300200541a8026a200541c0016a10c1050240201241ffffff3f71450d00200f102e0b200541a8026a200610af070240024020052802a802450d00200541c0016a41106a200541a8026a41106a290300370300200541c0016a41086a200541a8026a41086a290300370300200541c0016a41186a200541a8026a41186a290300370300200541c0016a41206a200541a8026a41206a280200360200200541e0006a41086a200541cc016a290200370300200541e0006a41106a200541d4016a290200370300200541e0006a41186a200541dc016a290200370300200520052903a8023703c001200520052902c401370360200541c0016a200610aa07417f20052802c001220441016a220220022004491b220441ffffff3f712004470d0820044105742204417f4c0d082004102c220e450d09200541e0006a41086a290300210d200541e0006a41106a290300211720052903602118200e41186a200541e0006a41186a290300370000200e41106a2017370000200e41086a200d370000200e2018370000200541a8026a200610af072004410576211102400240024020052802a8020d00410121040c010b200541c0016a41047221024120210c41022113410121040340200541c0016a41206a200541a8026a41206a280200360200200541c0016a41186a2214200541a8026a41186a290300370300200541c0016a41106a2215200541a8026a41106a290300370300200541c0016a41086a2216200541a8026a41086a290300370300200520052903a8023703c001200541a0016a41086a220b200241086a290000370300200541a0016a41106a220f200241106a290000370300200541a0016a41186a2210200241186a290000370300200520022900003703a001201420102903003703002015200f2903003703002016200b290300370300200520052903a0013703c001024020042011470d00200541a8026a200610aa072004417f20052802a802220b41016a220f200f200b491b6a220b2004490d0c2013200b2013200b4b1b220b4104200b41044b1b220b41ffffff3f71200b46210f200b410574210b0240024020040d00200541003602a8020c010b200541013602b0022005200c3602ac022005200e3602a8020b20054180016a200b200f200541a8026a107d200528028801210b2005280280014101460d03200528028401210e200b41057621110b200e200c6a220b20052903c001370000200b41186a2014290300370000200b41106a2015290300370000200b41086a2016290300370000200541a8026a200610af07200c41206a210c201341026a2113200441016a210420052802a8020d000b0b2006102e200520043602c801200520113602c4012005200e3602c0010c020b200b0d090c080b41002111200541003602c801200542013703c0012006102e4101210e0b200541c0026a4200370300200541b8026a4200370300200541a8026a41086a4200370300200542003703a802200541a8026a41b2fdc6004112108102200541e0006a41b4d3c1004108108102200a41086a200541e0006a41086a290000370000200a2005290060370000200541a8026a200541c0016a10c105201141ffffff3f71450d01200e102e0c010b2006102e200e102e0b200541d0026a24000f0b200541a0016a41186a200b41186a2216290000370300200541a0016a41106a200b41106a2211290000370300200541a0016a41086a200b41086a22122900003703002005200b2900003703a0012012290000210d20112900002117200b2900002118200541c0016a41186a22112016290000370300200541c0016a41106a22162017370300200541c0016a41086a2212200d370300200520183703c001200541e0006a41186a2011290300370300200541e0006a41106a2016290300370300200541e0006a41086a2012290300370300200520052903c001370360200541f0016a200541e0006a41201074200b41206a210b0c000b0b41bcb4c40041c9004198b5c400105d000b41bcb4c40041c9004188b5c400105d000b1038000b1036000b930501047f230041a0036b22012400200141106a4200370300200141186a4200370300200141206a4200370300200141286a4200370300200120012903c801370308200142c0b2cd3b37039803200142c0b2cd3b37039003200142c0b2cd3b370388034100210241012103034020014188036a2104024002400240200241ff01710e03010002010b20014190036a21040c010b20014198036a21040b200442c0b2cd3b370300024020034103460d00200341e99fc0006a2104200341016a210320042d000022024103470d010b0b20014188026a420037030020014180026a4201370300200141f8016a22034200370300200141f0016a22044201370300200141c8016a41186a4200370300200141c8016a41f8006a4200370300200141c8016a41f0006a4201370300200141c8016a41e8006a4200370300200141c8016a41e0006a420137030020014198026a420037030020014190026a200129039003370300200141d0026a4200370300200141c8026a200129038803370300200142003703d00120014280e497d0123703c80120012001290398033703d801200141f8026a200141286a290300370300200141f0026a200141086a41186a290300370300200141e8026a200141186a290300370300200141e0026a200141106a290300370300200141d8026a20012903083703002004420137030020034280b0def7d32b3703002001410036028003200141086a200141c8016a41c00110e9081a200141086a41f8006a428090cad2c60e370300200141086a41f0006a4201370300200141086a41e8006a4280c0a8ca9a3a370300200141086a41e0006a4201370300200141c8016a200141086a41b80110e9081a2001428180808080d0a5cc00370380032000200141c8016a107f200141a0036a24000bc88d0109017f027e047f047e057f017e117f037e287f230041d01a6b22012400200141d0176a10df0420012903d81721024200210320014190046a22044200370300200141f8036a41106a22054200370300200141f8036a41086a22064200370300200142003703f803200141d0176a4199fdc60041081081022006200141d0176a41086a2207290000370300200120012900d0173703f803200141d0176a41fc8ac500411010810220042007290000370300200520012900d017370300200141203602dc142001200141f8036a3602d814200141f0066a200141f8036a412010ed022002428094ebdc038242808c8d9e027e2208428094ebdc038021092008428094ebdc0382210a2002428094ebdc0380210b4100210c024002400240024020012802f006220d0d004100210e0c010b20012802f406210f2001200141f0066a41086a280200360294152001200d36029015200141c0006a20014190156a10ab010240024002402001280240450d000c010b20012802442210200128029415411c6e2204200420104b1bad421c7e2202422088a70d042002a72204417f4c0d040240024020040d004104210e0c010b2004102c220e450d040b2004411c6ead21110240024002400240024020100d000c010b200141d0176a41c4006a2106410021120340200141386a20014190156a10ab0120012802380d04200128023c221320012802941541e0006e2204200420134b1bad42e0007e2202422088a70d092002a72204417f4c0d090240024020040d00410821140c010b2004102c2214450d090b200441e0006e21150240024020130d00410021130c010b41002116410021054100210702400340200141d0176a20014190156a10e004200141c8006a41386a2204200141d0176a41386a290300370300200141c8006a41306a2217200141d0176a41306a290300370300200141c8006a41286a2218200141d0176a41286a290300370300200141c8006a41206a2219200141d0176a41206a290300370300200141c8006a41186a221a200141d0176a41186a290300370300200141c8006a41106a221b200141d0176a41106a290300370300200141c8006a41086a221c200141d0176a41086a290300370300200141a00f6a41086a221d200641086a290200370300200141a00f6a41106a221e200641106a290200370300200141a00f6a41186a221f200641186a280200360200200120012903d017370348200120062902003703a00f2001280290182220450d0120014198126a41386a2221200429030037030020014198126a41306a2222201729030037030020014198126a41286a2217201829030037030020014198126a41206a2218201929030037030020014198126a41186a2219201a29030037030020014198126a41106a221a201b29030037030020014198126a41086a221b201c290300370300200141e00c6a41086a221c201d290300370300200141e00c6a41106a221d201e290300370300200141e00c6a41186a221e201f2802003602002001200129034837039812200120012903a00f3703e00c024020072015470d002016200741016a2204201620044b1b22044104200441044b1bad42e0007e2202422088a74541037421042002a7211f0240024020070d00200141003602d0170c010b200141083602d817200120053602d417200120143602d0170b200141e8096a201f2004200141d0176a107d20012802f0092104024020012802e8094101470d0020040d0d0c0e0b20012802ec092114200441e0006e21150b201420056a2204200129039812370300200441106a201a290300370300200441086a201b2903003703002022290300210220212903002108201729030021232018290300212420192903002125200441c0006a2020360200200441186a2025370300200441206a2024370300200441286a2023370300200441386a2008370300200441306a2002370300200441c4006a20012903e00c370200200441cc006a201c290300370200200441d4006a201d290300370200200441dc006a201e280200360200201641026a2116200541e0006a21052013200741016a2207460d020c000b0b02402007450d00201441d4006a210403400240200441706a2802002206450d00200641306c450d002004416c6a280200102e0b0240200428020041ffffff3f71450d002004417c6a280200102e0b200441e0006a2104200541a07f6a22050d000b0b2015450d05201541e0006c450d050c040b2014450d04200141306a20014190156a10ab010240024020012802300d00200128023422262001280294154102762204200420264b1b22274102742204417f4c0d0b0240024020270d00410421280c010b2004102c2228450d0b0b0240024020260d00410021260c010b4100210541002107410021040240034020012802941522174104490d012001280290152218280000211620012017417c6a360294152001201841046a360290152016418094ebdc034b0d01024020042027470d002007200441016a2217200720174b1b22174104201741044b1b221741ffffffff03712017464102742118201741027421170240024020040d00200141003602d0170c010b200141043602d817200120053602d417200120283602d0170b200141c8006a20172018200141d0176a107d20012802502117024020012802484101470d002017450d100c0f0b200128024c2128201741027621270b202820056a2016360200200541046a2105200741026a21072026200441016a2204460d020c000b0b202741ffffffff0371450d012028102e0c010b2028450d00200128029415220441034b0d010240202741ffffffff0371450d002028102e0b02402013450d002014201341e0006c6a21062014210403400240200441c4006a2802002205450d00200541306c450d00200441c0006a280200102e0b200441e0006a21050240200441d4006a28020041ffffff3f71450d00200441d0006a280200102e0b2005210420062005470d000b0b2015450d06201541e0006c0d050c060b02402013450d002014201341e0006c6a21062014210403400240200441c4006a2802002205450d00200541306c450d00200441c0006a280200102e0b200441e0006a21050240200441d4006a28020041ffffff3f71450d00200441d0006a280200102e0b2005210420062005470d000b0b2015450d05201541e0006c0d040c050b2001280290152205280000212920012004417c6a360294152001200541046a3602901502402011422088a722042011a7470d00200441016a22052004490d0a20044101742207200520052007491b22054104200541044b1bad421c7e2202422088a74541027421052002a721070240024020040d00200141003602d0170c010b200141043602d8172001200e3602d01720012004411c6c3602d4170b200141c8006a20072005200141d0176a107d2001280250210520012802484101460d03200128024c210e2011428080808070832005411c6ead8421110b200e2004411c6c6a2204201536020420042014360200200441186a2029360200200441146a2026360200200441106a20273602002004410c6a2028360200200441086a201336020020114280808080107c21112026212a2027212b2028212c2013212d2015212e201241016a22122010470d000b0b200e0d040c030b2005450d060c050b2014102e0b02402011422088a72204450d00200e2004411c6c6a2116200e21070340024020072802082204450d00200441e0006c2105200728020041d4006a210403400240200441706a2802002206450d00200641306c450d002004416c6a280200102e0b0240200428020041ffffff3f71450d002004417c6a280200102e0b200441e0006a2104200541a07f6a22050d000b0b0240200741046a2802002204450d00200441e0006c450d002007280200102e0b2007411c6a21040240200741106a28020041ffffffff0371450d00200728020c102e0b2004210720042016470d000b0b02402011a72204450d002004411c6c450d00200e102e0b202e2115202d2113202c2128202b2127202a21260b4100210e20014100360250200142013703482001410a36029c122001200141d8146a360298122001200141c8006a3602a00f200141e4176a4101360200200142013702d417200141909dc5003602d017200120014198126a3602e017200141a00f6a419cebc000200141d0176a103d1a2001280248200128025010ef02200128024c450d002001280248102e0b200f450d00200d102e0b200e4104200e1b2114024020114200200e1b2208422088a72207450d00200b42808c8d9e027e2009200a4280cab5ee0156ad7c7c210242002103410021164100210c0240034002400240200c450d0020142104200c210603400240200320025a0d00200141206a200420166a220e2802002014200c411c6c6a2204280208200428020c200441146a2802002004280218109203200129032821230c030b2004200420166a2205290200370200200441186a200541186a280200360200200441106a200541106a290200370200200441086a200541086a2902003702002004411c6a2104200641016a22062007490d000c040b0b200c210403400240200320025a0d00200141106a2014200c411c6c6a220e280200200e280208200e28020c200e41146a280200200e280218109203200129031821230c020b200441016a22042007490d000b4100210c0c030b02402014200c411c6c6a22172802082204450d00200441e0006c2105200e28020041d4006a210403400240200441706a2802002206450d00200641306c450d002004416c6a280200102e0b0240200428020041ffffff3f71450d002004417c6a280200102e0b200441e0006a2104200541a07f6a22050d000b0b0240200e41046a2802002204450d00200441e0006c450d00200e280200102e0b200c41016a210c0240201741106a28020041ffffffff0371450d00201728020c102e0b200320237c21032016411c6a2116200c2106200c2007490d000b0b0240200c0d004100210c0c010b20142006200c6b411c6c6a20142006411c6c6a200720066b411c6c10ea081a0b200141e8176a22044200370300200141d0176a41106a22054200370300200141d0176a41086a22064200370300200142003703d017200141c8006a4199fdc60041081081022006200141c8006a41086a2216290000370300200120012900483703d017200141c8006a41fc8ac500411010810220042016290000370300200520012900483703002007200c6b2204411c6c41046a2205417f4c0d010240024020050d00410121060c010b2005102c2206450d010b200141003602502001200536024c200120063602482004200141c8006a107620142004200141c8006a10a001200141d0176a412020012802482205200128025010b2010240200128024c450d002005102e0b02402004450d0020142004411c6c6a2116201421070340024020072802082204450d00200441e0006c2105200728020041d4006a210403400240200441706a2802002206450d00200641306c450d002004416c6a280200102e0b0240200428020041ffffff3f71450d002004417c6a280200102e0b200441e0006a2104200541a07f6a22050d000b0b0240200741046a2802002204450d00200441e0006c450d002007280200102e0b2007411c6a21040240200741106a28020041ffffffff0371450d00200728020c102e0b2004210720042016470d000b0b02402008a72204450d002004411c6c450d002014102e0b20014198126a10e1044100210520012802981221164100210602400240024002400240024020012802a012220c450d00200c41c4006c2107200c410274417c6a41027641016a2114410021062016210402400340024020042d00004101460d00200441046a28020020004f0d020b200441c4006a2104200641016a2106200741bc7f6a22070d000b201421060b200c2006490d010b200141003602a012200c20066b210e2016200641c4006c220c6a210402400340200c2005460d01201620056a2107200541c4006a2214210520072d00004102470d000b201620146a21040b2016200641c4006c6a21070240034020072004460d0120042d00002105200441c4006a210420054102470d000b0b02400240200e0d004100210e0c010b02402006450d0020162016200641c4006c6a200e41c4006c10ea081a0b2001200e3602a0120b200128029c122106200141e8176a22054200370300200141e0176a22044200370300200141d0176a41086a22074200370300200142003703d017200141c8006a4190dac800410a1081022007200141c8006a41086a220c290000370300200120012900483703d017200141c8006a41d5dac80041061081022005200c29000037030020042001290048370300200e41c4006c41046a2205417f4c0d060240024020050d00410121070c010b2005102c2207450d060b200141003602502001200536024c20012007360248200e200141c8006a10762016200e200141c8006a109f01200141d0176a412020012802482205200128025010b2010240200128024c450d002005102e0b02402006450d00200641c4006c450d002016102e0b42002102200141d0176a41186a22074200370300200141d0176a41106a221642003703004108212a200141d0176a41086a22064200370300200142003703d017200141c8006a4190dac800410a1081022006200141c8006a41086a2205290000370300200120012900483703d017200141c8006a41d097c900410c108102200441086a200529000037000020042001290048370000200141003a0048200141d0176a4120200141c8006a410110b201200141c8006a10e204200141f8036a41186a220c200141c8006a41186a2214290300370300200141f8036a41106a220e200141c8006a41106a2217290300370300200141f8036a41086a22182005290300370300200120012903483703f8034124102c2204450d05200420012903f80337010020044114360220200441186a200c290300370100200441106a200e290300370100200441086a201829030037010020014281808080103702d417200120043602d017200141d0176a10e304200720142903003703002016201729030037030020062005290300370300200120012903483703d017200141d0176a10e404108403200141d0176a10df0420012903d8172108200141c8006a200010a704200141d0176a200128024822042001280250220510c5042008428094ebdc0382428090bcfd027e2223428094ebdc038021242023428094ebdc038221232008428094ebdc03802108024020012802d0172206450d002004200510ff0120012902d41721022006212a0b0240200128024c450d002004102e0b202a2002422088a7220441f8026c22056a21062002a7212b024020040d00202a21040c030b200541887d6a2119200141d0176a41046a2110200141c8006a41046a2121200141a00f6a41046a210d41002107200141c0036a41306a2116200141c0036a41286a210c200141c0036a41206a2114200141c0036a41186a210e200141c0036a41106a2117200141c0036a41086a2118202a210402400340200141f8036a200441bc0210e9081a200441bc026a28020021052016200441f0026a290300370300200c200441e8026a2903003703002014200441e0026a290300370300200e200441d8026a2903003703002017200441d0026a2903003703002018200441c8026a2903003703002001200441c0026a2903003703c00320054103460d03200d200141f8036a41bc0210e9082122200141c8006a200141a00f6a41c00210e9081a20014190156a202141bc0210e9081a200141d8146a41306a221b2016290300370300200141d8146a41286a221c200c290300370300200141d8146a41206a221d2014290300370300200141d8146a41186a221e200e290300370300200141d8146a41106a221f2017290300370300200141d8146a41086a22202018290300370300200120012903c0033703d814024002402005410247221a0d00200141e00c6a4194b4c00041c00210e9081a4100211b200141a80c6a41306a4100290388b740370300200141a80c6a41286a4100290380b740370300200141a80c6a41206a41002903f8b640370300200141a80c6a41186a41002903f0b640370300200141a80c6a41106a41002903e8b640370300200141a80c6a41086a41002903e0b640370300200141002903d8b6403703a80c0c010b201020014190156a41bc0210e9081a20014198126a200141d0176a41c00210e9081a200141e0116a41306a220f201b290300370300200141e0116a41286a221b201c290300370300200141e0116a41206a221c201d290300370300200141e0116a41186a221d201e290300370300200141e0116a41106a221e201f290300370300200141e0116a41086a221f2020290300370300200120012903d8143703e011200141e00c6a20014198126a41c00210e9081a200141a80c6a41306a200f290300370300200141a80c6a41286a201b290300370300200141a80c6a41206a201c290300370300200141a80c6a41186a201d290300370300200141a80c6a41106a201e290300370300200141a80c6a41086a201f290300370300200120012903e0113703a80c2007211b0b201a0d01200741016a2107201941887d6a2119200441f8026a22042006470d000b200621040c030b200141f0066a200141e00c6a41c00210e9081a200141b8066a41306a2216200141a80c6a41306a290300370300200141b8066a41286a220c200141a80c6a41286a290300370300200141b8066a41206a2214200141a80c6a41206a290300370300200141b8066a41186a220e200141a80c6a41186a290300370300200141b8066a41106a2217200141a80c6a41106a290300370300200141b8066a41086a2218200141a80c6a41086a290300370300200120012903a80c3703b806200141e8096a200141f0066a41c00210e9081a200141b0096a41306a221a2016290300370300200141b0096a41286a2216200c290300370300200141b0096a41206a220c2014290300370300200141b0096a41186a2214200e290300370300200141b0096a41106a220e2017290300370300200141b0096a41086a22172018290300370300200120012903b8063703b009418003102c2220450d052020201b360200202041046a200141e8096a41c00210e9081a202020053602c402202020012903b0093703c802202041d0026a2017290300370300202041d8026a200e290300370300202041e0026a2014290300370300202041e8026a200c290300370300202041f0026a2016290300370300202041f8026a201a29030037030020062105024002402019450d00200441f8026a2104200741016a2107200141a00f6a41046a210d200141a80c6a41306a2116200141a80c6a41286a210c200141a80c6a41206a2114200141a80c6a41186a210e200141a80c6a41106a2117200141a80c6a41086a211802400340200141f0066a200441bc0210e9081a200441bc026a28020021052016200441f0026a290300370300200c200441e8026a2903003703002014200441e0026a290300370300200e200441d8026a2903003703002017200441d0026a2903003703002018200441c8026a2903003703002001200441c0026a2903003703a80c20054103460d01200d200141f0066a41bc0210e9081a200141c8006a200141a00f6a41c00210e9081a20014190156a202141bc0210e9081a200141d8146a41306a221a2016290300370300200141d8146a41286a221b200c290300370300200141d8146a41206a221c2014290300370300200141d8146a41186a221d200e290300370300200141d8146a41106a221e2017290300370300200141d8146a41086a221f2018290300370300200120012903a80c3703d81402400240200541024722190d00200141e00c6a4194b4c00041c00210e9081a4100211a200141e0116a41306a4100290388b740370300200141e0116a41286a4100290380b740370300200141e0116a41206a41002903f8b640370300200141e0116a41186a41002903f0b640370300200141e0116a41106a41002903e8b640370300200141e0116a41086a41002903e0b640370300200141002903d8b6403703e0110c010b201020014190156a41bc0210e9081a20014198126a200141d0176a41c00210e9081a200141f8036a41306a220f201a290300370300200141f8036a41286a221a201b290300370300200141f8036a41206a221b201c290300370300200141f8036a41186a221c201d290300370300200141f8036a41106a221d201e290300370300200141f8036a41086a221e201f290300370300200120012903d8143703f803200141e00c6a20014198126a41c00210e9081a200141e0116a41306a200f290300370300200141e0116a41286a201a290300370300200141e0116a41206a201b290300370300200141e0116a41186a201c290300370300200141e0116a41106a201d290300370300200141e0116a41086a201e290300370300200120012903f8033703e0112007211a0b20190d03200741016a2107200441f8026a22042006470d000b200621050c010b200441f8026a21050b4101212f4101210d0c040b200141e8096a200141e00c6a41c00210e9081a200141b0096a41306a222c200141e0116a41306a221b290300370300200141b0096a41286a222d200141e0116a41286a221c290300370300200141b0096a41206a222e200141e0116a41206a221d290300370300200141b0096a41186a2212200141e0116a41186a221e290300370300200141b0096a41106a2230200141e0116a41106a221f290300370300200141b0096a41086a2231200141e0116a41086a220f290300370300200120012903e0113703b009200441f8026a2104200741016a21074101212f4101210d0340200141d0176a200141e8096a41c00210e9081a200141c8006a41306a220c202c290300370300200141c8006a41286a2214202d290300370300200141c8006a41206a220e202e290300370300200141c8006a41186a22172012290300370300200141c8006a41106a22182030290300370300200141c8006a41086a22192031290300370300200120012903b009370348024002400240200d202f470d00202f41016a2216202f490d0a202f41017422322016203220164b1b22164104201641044b1bad4280037e2202422088a74541037421162002a7213202400240202f0d0020014100360298120c010b200141083602a01220012020360298122001202f4180036c36029c120b200141a00f6a2032201620014198126a107d20012802a80f211620012802a00f4101460d0120012802a40f212020164180036e212f0b2020200d4180036c6a2216201a360200201641046a200141d0176a41c00210e9081a201641c4026a2005360200201641c8026a2001290348370300201641d0026a2019290300370300201641d8026a2018290300370300201641e0026a2017290300370300201641e8026a200e290300370300201641f0026a2014290300370300201641f8026a200c290300370300200d41016a210d20042006470d01200621050c060b2016450d080c070b024002400340200141f8036a200441bc0210e9081a200441bc026a2802002105200141c0036a41306a2216200441f0026a290300370300200141c0036a41286a220c200441e8026a290300370300200141c0036a41206a2214200441e0026a290300370300200141c0036a41186a220e200441d8026a290300370300200141c0036a41106a2217200441d0026a290300370300200141c0036a41086a2218200441c8026a2903003703002001200441c0026a2903003703c00320054103460d012022200141f8036a41bc0210e9081a200141c8006a200141a00f6a41c00210e9081a20014190156a202141bc0210e9081a200141d8146a41306a22192016290300370300200141d8146a41286a221a200c290300370300200141d8146a41206a220c2014290300370300200141d8146a41186a2214200e290300370300200141d8146a41106a220e2017290300370300200141d8146a41086a22172018290300370300200120012903c0033703d81402400240200541024722160d00200141e00c6a4194b4c00041c00210e9081a4100211a200141a80c6a41306a4100290388b740370300200141a80c6a41286a4100290380b740370300200141a80c6a41206a41002903f8b640370300200141a80c6a41186a41002903f0b640370300200141a80c6a41106a41002903e8b640370300200141a80c6a41086a41002903e0b640370300200141002903d8b6403703a80c0c010b201020014190156a41bc0210e9081a20014198126a200141d0176a41c00210e9081a201b2019290300370300201c201a290300370300201d200c290300370300201e2014290300370300201f200e290300370300200f2017290300370300200120012903d8143703e011200141e00c6a20014198126a41c00210e9081a200141a80c6a41306a201b290300370300200141a80c6a41286a201c290300370300200141a80c6a41206a201d290300370300200141a80c6a41186a201e290300370300200141a80c6a41106a201f290300370300200141a80c6a41086a200f290300370300200120012903e0113703a80c2007211a0b20160d02200741016a2107200441f8026a22042006470d000b200621050c060b200441f8026a21050c050b200141f0066a200141e00c6a41c00210e9081a200141b8066a41306a2216200141a80c6a41306a290300370300200141b8066a41286a220c200141a80c6a41286a290300370300200141b8066a41206a2214200141a80c6a41206a290300370300200141b8066a41186a220e200141a80c6a41186a290300370300200141b8066a41106a2217200141a80c6a41106a290300370300200141b8066a41086a2218200141a80c6a41086a290300370300200120012903a80c3703b806200141e8096a200141f0066a41c00210e9081a202c2016290300370300202d200c290300370300202e20142903003703002012200e2903003703002030201729030037030020312018290300370300200120012903b8063703b009200441f8026a2104200741016a21070c000b0b2006200c41b4b3c000104d000b200441f8026a21040b024020062004460d000340200441f8026a21050240200441bc026a2802004102460d000240200441b0026a2802002207450d00200441b4026a280200450d002007102e0b2004108b020b2005210420062005470d000b0b4100212f410821200240202b450d00202b41f8026c450d00202a102e0b4100210d0c010b024020062005460d000340200541f8026a21040240200541bc026a2802004102460d000240200541b0026a2802002207450d00200541b4026a280200450d002007102e0b2005108b020b2004210520062004470d000b0b0240202b450d00202b41f8026c450d00202a102e0b0240024002400240200d41144b0d00200d41014d0d042020200d417f6a22064180036c6a2114410021070340200d20062204417f6a2206490d030240200d20066b22174102490d00202020044180036c6a220441f8026a2d0000202020064180036c6a220541f8026a2d0000220c4f0d00200141d0176a200541f80210e9081a2001200541fc026a28000036004b2001200541f9026a2800003602482005200441800310e9081a024020174103490d002007417f6a210e41002105201421040340200441f8056a2d0000200c4f0d01200e2005460d05200420044180036a221641800310e9081a2016210420072005417f6a2205470d000b201621040b2004200141d0176a41f80210e908220441f8026a200c3a0000200441f9026a2001280248360000200441fc026a200128004b3600000b201441807d6a21142007417f6a210720060d000c050b0b200d410176ad4280037e2202422088a70d052002a7222c417f4c0d05202c102c220f450d04202041807d6a212a202041f8796a212b410421194100211041002117200d211d0340201d21144100211d4101210c02402014417f6a2204450d000240024002400240024002400240202020044180036c6a41f8026a2d000020144180036c220e20206a41f87c6a2d00002205490d002014417e6a2116202b200e6a21064100211d410021040340024020162004470d002014210c0c090b200441016a2104200541ff0171210720062d00002105200641807d6a2106200720054f0d000b200441016a210c2004417f7320146a21040c010b202b200e6a210602400340024020044101470d00410021040c020b2004417f6a2104200541ff0171210720062d00002105200641807d6a210620072005490d000b0b20142004490d012014200d4b0d02201420046b220c4101762207450d00202020044180036c6a2105202a200e6a21060340200141d0176a200541800310e9081a2005200641800310ea084180036a21052006200141d0176a41800310e90841807d6a21062007417f6a22070d000b0b024020040d002004211d0c060b0240200c41094d0d002004211d0c060b2014200d4b0d03200420146b2106202020044180036c6a210e034020142004417f6a221d490d0502402014201d6b220c4102490d00202020044180036c6a220441f8026a2d00002020201d4180036c6a220541f8026a2d000022164f0d00200141d0176a200541f80210e9081a2001200541fc026a28000036004b2001200541f9026a2800003602482005200441800310e9081a0240200c4103490d0041012105200e21040340200441f8056a2d000020164f0d01200620056a4101460d06200420044180036a220741800310e9081a200721042006200541016a22056a0d000b200721040b2004200141d0176a41f80210e908220441f8026a20163a0000200441f9026a2001280248360000200441fc026a200128004b3600000b201d450d06200e41807d6a210e2006417f6a2106201d2104200c410a4f0d060c000b0b2004201441e4d1cc001057000b2014200d41e4d1cc00104d000b2005200c41d4d1cc00103c000b20142004417f6a221d490d002014200d41f4d1cc00104d000b201d201441f4d1cc001057000b024020172010470d00201041016a22042010490d07201041017422052004200520044b1b22044104200441044b1b220441ffffffff01712004464102742105200441037421040240024020100d00200141003602d0170c010b200141043602d817200120193602d017200120104103743602d4170b200141c8006a20042005200141d0176a107d20012802502104024020012802484101470d002004450d080c070b200128024c2119200441037621100b201920174103746a2204200c3602042004201d360200201741016a221e21170240201e4102490d00024002400240034002400240024002402019201e2217417f6a221e4103746a2204280200450d00201741037420196a221641746a2802002207200428020422054d0d00201741024d0d0820192017417d6a22044103746a2802042206200520076a4d0d01201741034d0d08201641646a280200200620076a4b0d080c010b20174103490d012004280204210520192017417d6a22044103746a28020421060b20062005490d010b2017417e6a21040b02402017200441016a221f4d0d00201720044d0d02201920044103746a221a2802042221201a2802006a22042019201f4103746a221b280200221c490d032004200d4b0d04201a41046a21222020201c4180036c6a220e201b28020422184180036c22056a210720044180036c210c024002402004201c6b221620186b22042018490d00200f200e200510e908220420056a21060240024020184101480d00201620184a0d010b200e2105200421040c020b2020200c6a211420042104200e2105034020072004200741f8026a2d0000200441f8026a2d00004922161b210c200420044180036a20161b21042005200c41800310e9084180036a210520074180036a200720161b220720144f0d02200620044b0d000c020b0b200f200720044180036c220510e908221620056a21060240024020184101480d00200441014e0d010b20072105201621040c010b202a200c6a210c200721050340200c200541807d6a2207200641807d6a2214200641786a2d0000200541786a2d00004922041b41800310e908210c2006201420041b21060240200e2007200520041b2205490d00201621040c020b200c41807d6a210c2016210420162006490d000b0b20052004200620046b22062006418003706b10e9081a2022202120186a360200201a201c360200201b201b41086a2017201f417f736a41037410ea081a41012117201e41014d0d050c010b0b201f20174184d2cc00103c000b200420174194d2cc00103c000b201c200441a4d2cc001057000b2004200d41a4d2cc00104d000b201d450d030c000b0b410120056b201741d4d1cc00103c000b2006200d41c4d1cc001056000b0240201041ffffffff0171450d002019102e0b202c418003702104202c418003490d00202c2004460d00200f102e0b2020200d4180036c6a210c02400240200d0d0042002123202021050c010b2008428090bcfd027e202420234280cab5ee0156ad7c7c2124200141c8006a41b0026a2133200141d0176a41c0026a2105200141c8006a41c0026a2106200041016a2134200141ed176a2135200141f8036a4105722136200141c8006a41ca026a2137200141c8006a41cd026a2138200141a00f6a410572212d200141f8036a4103722139200141d0176a41ca026a213a200141d0176a41cd026a213b200141c8006a41046a213c42c0f4a4eb00210220014190156a41306a211c20014190156a41286a211d20014190156a41206a211e20014190156a41186a211f20014190156a41106a212120014190156a41086a2122200141890a6a223d41076a213e410021174200212320202104024003402004280200213f20014198126a200441046a41c00210e9081a200441c4026a2802002107201c200441f8026a290300370300201d200441f0026a290300370300201e200441e8026a290300370300201f200441e0026a2903003703002021200441d8026a2903003703002022200441d0026a2903003703002001200441c8026a29030037039015024020074102470d0020044180036a21050c030b200141c8006a20014198126a41c00210e9081a200141d0176a203c41bc0210e9081a2005200129039015370300200541086a220d2022290300370300200541106a220f2021290300370300200541186a2210201f290300370300200541206a222a201e290300370300200541286a222b201d290300370300200541306a222c201c2903003703002001200736028c1a200141a00f6a200141d0176a10970420012903a00f2108024002400240024020012d00981a0e03000102000b4102210e02400240024020012d00991a0e03000102000b4100210e0c010b200141f8036a41186a203a41186a290000370300200141f8036a41106a203a41106a290000370300200141f8036a41086a203a41086a2900003703002001203a29000022253703f8032025a721404101210e0b200141a00f6a41026a203941026a2d00003a0000200120392f00003b01a00f201b4180807c7120012f01960472211b20012d00fa03211820012801fe032119200128018204211a200128018604212e200128018a042112200128018e042130200128019204213141002132410121160c020b41022118024002400240024020012d009c1a0e03000103000b410021180c010b200141f8036a41026a203b41026a2d00003a00002001203b2f00003b01f803204141807e7120012d00bc1a7221414101211820012802b81a214220012802b41a214320012802b01a214420012802ac1a214520012802a81a21460b20012802a41a211a20012802a01a21190b200141a00f6a41026a200141f8036a41026a2d00003a0000200120012f01f8033b01a00f41012132410021162046212e204521122044213020432131204121472042211b0c010b4102213241022118024002400240024020012d009c1a0e03000103000b410021180c010b200141f8036a41026a203b41026a2d00003a00002001203b2f00003b01f803202941807e7120012d00bc1a7221294101211820012802b81a212620012802b41a212720012802b01a212820012802ac1a211320012802a81a21150b20012802a41a211a20012802a01a21190b200141a00f6a41026a200141f8036a41026a2d00003a0000200120012f01f8033b01a00f410021162015212e201321122028213020272131202921472026211b0b4110102c2207450d03200741f8f7c60036020c200741013602082007428180808010370200200141e8096a41026a2248200141a00f6a41026a2d00003a0000200120012f01a00f3b01e809024002402016200e41ff01714571450d00200721160c010b4110102c2216450d0420164190f8c60036020c20164101360208201642818080801037020020072007280200417f6a224936020020490d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22492049280200417f6a224936020020490d002007102e0b200141f8036a41026a224920482d000022073a0000200120012f01e80922483b01f803202d20483b0000202d41026a20073a0000200120183a00a40f200120403b01a20f2001200e3a00a10f200120323a00a00f200120163602c80f200120473602c40f2001201b3602c00f200120313602bc0f200120303602b80f200120123602b40f2001202e3602b00f2001201a3602ac0f200120193602a80f200141e8096a200141a00f6a10c10220012d00e8092116200128028c1a210720012802801a2118200141e00c6a200141d0176a41bc0210e9081a200141f0066a41306a2219202c290300370300200141f0066a41286a221a202b290300370300200141f0066a41206a222e202a290300370300200141f0066a41186a22122010290300370300200141f0066a41106a2230200f290300370300200141f0066a41086a2231200d290300370300200120052903003703f00620074102460d01427f427f427f200220087c220820082002541b2202427f200242c0b2cd3b7c220820082002541b20161b22024280c2d72f7c220820082002541b200220181b220242c0b2cd3b7c220820082002541b200220074101461b2102200141c8006a200141e00c6a41bc0210e9081a200641306a22162019290300370300200620012903f006370300200641086a22182031290300370300200641106a22192030290300370300200641186a22302012290300370300200641206a2212202e290300370300200641286a222e201a290300370300200120073602840302400240024020012d00b80341c000490d002017450d0020022024560d010b200141a00f6a200141c8006a10a804024002400240024020012d0090030e03000102000b4102214a02400240024020012d0091030e03000102000b4100214a0c010b200141f8036a41186a203741186a290000370300200141f8036a41106a203741106a290000370300200141f8036a41086a203741086a2900003703002001203729000022083703f8032008a7214b4101214a0b200141d0176a41026a203941026a2d00003a0000200120392f00003b01d017204c4180807c7120012f01960472214c20012d00fa03211820012801fe032119200128018204211a200128018604210f200128018a042110200128018e04212a200128019204212b4100212c410121160c020b41022118024002400240024020012d0094030e03000103000b410021180c010b2049203841026a2d00003a0000200120382f00003b01f803204141807e7120012d00b4037221414101211820012802b003214220012802ac03214320012802a803214420012802a403214520012802a00321460b200128029c03211a20012802980321190b200141d0176a41026a20492d00003a0000200120012f01f8033b01d0174101212c410021162046210f204521102044212a2043212b2041214d2042214c0c010b4102212c41022118024002400240024020012d0094030e03000103000b410021180c010b2049203841026a2d00003a0000200120382f00003b01f803202941807e7120012d00b4037221294101211820012802b003212620012802ac03212720012802a803212820012802a403211320012802a00321150b200128029c03211a20012802980321190b200141d0176a41026a200141f8036a41026a2d00003a0000200120012f01f8033b01d017410021162015210f201321102028212a2027212b2029214d2026214c0b200141d8146a41026a222e200141d0176a41026a2d00003a0000200120012f01d0173b01d8144110102c2207450d05200741f8f7c60036020c200741013602082007428180808010370200200741086a210d024002402016204a41ff01714571450d00200d2112200721160c010b4110102c2216450d0620164190f8c60036020c20164101360208201642818080801037020020072007280200417f6a2230360200201641086a211220300d002007280208200728020c2802001103000240200728020c280204450d00200d280200102e0b200741046a220d200d280200417f6a220d360200200d0d002007102e0b024002402016280208200141a00f6a201628020c28020c1101000d0020162016280200417f6a2207360200200141023a00880a200141003a00800a200142003703f009200142013703e809024020070d002012280200201628020c2802001103000240201628020c280204450d002016280208102e0b201641046a22072007280200417f6a220736020020070d002016102e0b200141a00f6a10dc020c010b200141d0176a200141a00f6a41b00210e9081a203620012f01d8143b0000203641026a202e2d00003a0000200120183a00fc032001204b3b01fa032001204a3a00f9032001202c3a00f803200120163602a0042001204d36029c042001204c360298042001202b360294042001202a360290042001201036028c042001200f360288042001201a360284042001201936028004200141e8096a200141d0176a200141f8036a10dd020b0240024020012802f80222160d00410021070c010b2001280280032214417f4c0d070240024020140d00410121070c010b2014102c2207450d070b20072016201410e9081a0b024002402001280284034101460d004101211820012802f802450d01200141d0176a203310a90420012802d017221620012802d81710ff0120012802d417450d012016102e0c010b200128028803211602400240200128028c0322184102490d00200141013602840320012018417f6a36028c030c010b20014100360284030b201620006a2116024020012802f802450d00200141d0176a201610a70420012802d817211920012802d0172118200141f8036a41046a41003a0000200141003602f803200141086a20182019200141f8036a4105410010ca04024002402001280208450d002001200128020c2219410520194105491b3602a40f2001200141f8036a3602a00f2001200141a00f6a10ab0120012802042119200128020045211a0c010b4100211a0b024020012802d417450d002018102e0b200141d0176a203310a90420012802d017221820012802d817201620194100201a1b10e50420012802d417450d002018102e0b200141d0176a200141c8006a41f80210e9081a2016200141d0176a10aa04410021180b2001203d2900003703d0172001203e2800003600d7170240024020012903e8094201510d00410621160c010b20012d00880a211920012903f0092108200120012800d7173600a70f200120012903d0173703a00f4106211620084202510d00200120012800a70f3600d717200120012903a00f3703d017201921160b200120012903d0173703f803200120012800d7173600ff03203520012903f803370000203541076a20012800ff03360000200120163a00ec17200120143602e817200120143602e417200120073602e0172001203f3602dc17200120003602d817200141023602d417200141013a00d017200141d0176a10fe0102402018450d00024020012802f8022207450d0020012802fc02450d002007102e0b200141c8006a108b020b200221230c010b200141a00f6a200141c8006a41bc0210e9081a200141e8096a41306a221a2016290300370300200141e8096a41286a2216202e290300370300200141e8096a41206a222e2012290300370300200141e8096a41186a22122030290300370300200141e8096a41106a22302019290300370300200141e8096a41086a22192018290300370300200120062903003703e80920074103460d00200141d0176a200141a00f6a41bc0210e9081a200520012903e809370300200d2019290300370300200f203029030037030020102012290300370300202a202e290300370300202b2016290300370300202c201a2903003703002001200736028c1a2034200141d0176a10aa040b2017417f6a211720044180036a2204200c470d000b200c21050c010b20044180036a21050b0240200c2005460d000340200522044180036a21050240200441b8026a2802002206450d00200441bc026a280200450d002006102e0b200441086a108b02200c2005470d000b0b0240202f450d00202f4180036c450d002020102e0b200141c8006a41186a22044200370300200141c8006a41106a22054200370300200141c8006a41086a2206420037030020014200370348200141d0176a41d9fcc60041061081022006200141d0176a41086a2207290000370300200120012900d017370348200141d0176a41a0f4cb00410a10810220042007290000370300200520012900d017370300200141d0176a200141c8006a4120108d0220012d00d0172107200141f8036a41186a2216200141e9176a290000370300200141f8036a41106a220c200141e1176a290000370300200141f8036a41086a2214200141d9176a290000370300200120012900d1173703f8030240024020074101460d00200442003703002005420037030020064200370300200142003703480c010b200420162903003703002005200c29030037030020062014290300370300200120012903f8033703480b200141d0176a41186a22054200370300200141d0176a41106a22074200370300200141d0176a41086a22064200370300200142003703d01720014198126a41f4c2cc004118108102200620014198126a41086a220429000037030020012001290098123703d01720014198126a41e4c3cc00410e108102200520042900003703002007200129009812370300200141a00f6a200141d0176a4120108d03024002400240024002400240024020012802a00f22040d002005200141c8006a41186a2903003703002007200141c8006a41106a2903003703002006200141c8006a41086a290300370300200120012903483703d0174100210641012104200141d0176a21160c010b20012802a40f2106200141a00f6a41086a280200220541d0004b0d03200141d0176a41186a200141c8006a41186a290300370300200141d0176a41106a200141c8006a41106a290300370300200141d0176a41086a200141c8006a41086a290300370300200120012903483703d017024020052006472214450d00200141d0176a21162006210c0c020b200141d0176a21162006210c20140d010b200641016a22052006490d062006410174220c2005200c20054b1b22054104200541044b1b220541ffffff3f71200546210c200541057421050240024020060d0020014100360298120c010b200141a0126a410136020020012004360298122001200641057436029c120b200141a00f6a2005200c20014198126a107d200141a80f6a280200210520012802a00f4101460d0120012802a40f21042005410576210c200621050b200420054105746a22062016290000370000200641186a201641186a290000370000200641106a201641106a290000370000200641086a201641086a290000370000200541016a21050c020b2005450d040c030b200141d0176a41186a220c200141c8006a41186a290300370300200141d0176a41106a2214200141c8006a41106a290300370300200141d0176a41086a220e200141c8006a41086a290300370300200120012903483703d01720052000417f6a41d1007022164d0d01200420164105746a221620012903d017370000201641186a200c290300370000201641106a2014290300370000201641086a200e2903003700002006210c0b200141a00f6a41086a20053602002001200c3602a40f200120043602a00f0240024020040d00200141d0176a41186a4200370300200141e0176a4200370300200141d0176a41086a22044200370300200142003703d01720014198126a41f4c2cc004118108102200420014198126a41086a220529000037030020012001290098123703d01720014198126a41e4c3cc00410e108102200741086a20052900003700002007200129009812370000200141d0176a412010ff010c010b200141d0176a41186a4200370300200141e0176a4200370300200141d0176a41086a22054200370300200142003703d01720014198126a41f4c2cc004118108102200520014198126a41086a220629000037030020012001290098123703d01720014198126a41e4c3cc00410e108102200741086a20062900003700002007200129009812370000200141d0176a200141a00f6a10e6042004450d00200c41ffffff3f71450d002004102e0b200141d01a6a2400427f2003427f20234290f796027c220220022023541b7c220220022003541b0f0b2016200541b4cccc00103c000b1036000b1038000bf50101047f230041306b22022400200241b6d1cc004106108102200241106a41bcd1cc004107108102024002404114102c2203450d002002421437022420022003360220200241206a20014114107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000bdf0b04027f027e037f077e230041a0026b22032400200341e0006a200110e202200341c8006a20032802602204200328026810f802200341d8006a2903002105200329035021062003280248210702402003280264450d002004102e0b0240024002402007450d00200341f8006a22044200370300200341e0006a41106a22074200370300200341e0006a41086a2208420037030020034200370360200341e0016a41b6d1cc0041061081022008200341e0016a41086a2209290000370300200320032900e001370360200341e0016a41e9f9c000410510810220042009290000370300200720032900e001370300200341306a200341e0006a412010f80220032903384200200328023022081b220a20067d220b200a56200341306a41106a290300420020081b220c20057d200a200654ad7d220a200c56200a200c511b0d01200341e0016a200110ad03200341e0006a20032802e001220820032802e80110ae03200341e0006a41206a290300210d2004290300210e2007290300210f20034188016a2802002104200329036821102003290360210c024020032802e401450d002008102e0b02400240200c4201520d00200341e0016a200210af03024020032903e0014201520d00200341f8006a22014200370300200341f0006a22074200370300200341e0006a41086a420037030020034200370360200341e0006a41d9fcc600410610810220034190026a4180f4cb004106108102200120034190026a41086a2900003703002007200329009002370300200341086a200341e0006a4120108e0220034190026a200210c802200341e0006a200328029002220120032802980210c9020240200328029402450d002001102e0b2000410610b0030c050b200341106a20022006200510fd012003200341186a290300370368200320032903103703602003200341e0006a3602e001200341e0016a10ce022010200f84500d01200341e0006a200210b103200328026022092003280268108f02210802402003280264450d002009102e0b024020080d00200341e0006a41186a2208200d3703002003200e3703702003201037036020032004360280012003200f3703682002200341e0006a10b2032008200241186a290000370300200341e0006a41106a200241106a290000370300200341e0006a41086a200241086a29000037030020032002290000370360200341e0016a200341e0006a10b3030c020b200341e8006a411736020020034194a4c700360264200341013a006220034183323b016041eef9c0004137200341e0006a41a8fac00041b8fac000103e000b200341206a20022006200510fd012003200341286a290300370368200320032903203703602003200341e0006a3602e001200341e0016a10ce020b200341f8006a4200370300200341e0006a41106a4200370300200341e0006a41086a2204420037030020034200370360200341e0016a41b6d1cc0041061081022004200341e0016a41086a2208290000370300200320032900e001370360200341e0016a41e9f9c0004105108102200741086a2008290000370000200720032900e0013700002003200a3703e8012003200b3703e001200341e0006a4120200341e0016a411010b201200341e0006a200110e20220032802602207200328026810ff0102402003280264450d002007102e0b200341e0006a200110ad0320032802602207200328026810ff0102402003280264450d002007102e0b200341e0006a200110ab0320032802602207200328026810ff0102402003280264450d002007102e0b200341e0006a41106a2005370300200341e0006a41086a2006370300200341e0006a41186a200229000037030020034180016a200241086a29000037030020034188016a200241106a29000037030020034190016a200241186a29000037030020034198016a2001290000370300200341a0016a200141086a290000370300200341a8016a200141106a2800003602002003410f3a0060200341e0006a10fe01200041063a00000c020b2000410210b0030c010b2000410410b0030b200341a0026a24000bf50101047f230041306b22022400200241b6d1cc004106108102200241106a41bcdbc8004107108102024002404114102c2203450d002002421437022420022003360220200241206a20014114107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000bd80202027f017e230041d0006b220324002003200236020420032001360200200341086a2001200210ed0202400240200328020822010d00200042003703000c010b200328020c2102024002400240200341106a28020022044110490d0020044170714110460d002004417c714120470d010b20034100360220200342013703182003410a36022c200320033602282003200341186a360234200341cc006a41013602002003420137023c200341909dc5003602382003200341286a360248200341346a419cebc000200341386a103d1a2003280218200328022010ef020240200328021c450d002003280218102e0b420021050c010b200041186a200129001037030020002001290000370308200041286a2001280020360200200041206a200141186a290000370300200041106a200141086a290000370300420121050b200020053703002002450d002001102e0b200341d0006a24000b940304027f017e027f047e230041e0006b220224002002200110b1032002280200210120022002280208220336021420022001360210200241186a2001200310ed0202400240200228021822030d00420021040c010b200228021c2105024002400240200241206a28020022064110490d0020064170714110460d002006417c714120470d010b20024100360230200242013703282002410a36023c2002200241106a3602382002200241286a360244200241dc006a41013602002002420137024c200241909dc5003602482002200241386a360258200241c4006a419cebc000200241c8006a103d1a2002280228200228023010ef020240200228022c450d002002280228102e0b420021040c010b200341186a2900002107200341086a2900002108200329001021092003290000210a20032800202106420121040b2005450d002003102e0b200041206a2007370300200041186a2009370300200041106a20083703002000200a370308200041286a20063602002000200437030002402002280204450d002001102e0b200241e0006a24000b860201047f230041c0006b2202240041c4f6c000210341132104410521050240024002400240024002400240200141ff01710e0700010203040506000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a41d0c1cc001044000b41c0f5c000210341182104410021050c040b41e0f5c000210341102104410121050c030b41f8f5c000210341102104410221050c020b4190f6c0002103410c2104410321050c010b41acf6c000210341102104410421050b20004183303b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000bac0201037f230041e0006b22022400200241bcdbc8004107108102200241106a41bcdbc8004107108102024002404120102c2203450d002002422037023420022003360230200241306a200141201074200241c0006a200228023022012002280238220310d803200241dc006a200120036a360200200220013602582002200241d0006a3602542002200241c0006a360250200241206a200241d0006a107c02402002280234450d002001102e0b2002280228220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b20004100360208200020013602042000200436020020002002411010742000200241106a411010742000200228022022012003107402402002280224450d002001102e0b200241e0006a24000f0b1036000b1038000be40104017f027e017f027e230041306b22022400200141186a2903002103200141086a29030021042001280220210520012903102106200129030021072002200010b103200228020821002002280200210120024100360218200242013703102002200437032820022007370320200241106a200241206a411010742002200337032820022006370320200241106a200241206a4110107420022005360220200241106a200241206a410410742001200020022802102205200228021810b20102402002280214450d002005102e0b02402002280204450d002001102e0b200241306a24000bc00807027f017e017f027e017f027e067f230041c0016b22022400200241c0006a200110af03024002400240024020022903404201520d00200241d0006a22032903002104200241d8006a22052903002106200241c0006a41206a2903002107200241e8006a2802002108200229034821092005420037030020034200370300200241c0006a41086a420037030020024200370340200241c0006a41d9fcc6004106108102200241306a4180f4cb0041061081022005200241306a41086a29000037030020032002290030370300200241286a200241c0006a4120108e02200241086a200742004100200228022c410020022802281b220320086b2205200520034b1bad220a420010e808200241186a200a42002006420010e80802402002290310420052200241186a41086a290300220720022903087c2206200754720d0020092002290318220756200420065620042006511b0d020b200242f6cacda397cddbb320370330200241c0006a200110d4062002280248210b2002410036024802400240200b0d004100210c2002280240210d0c010b2002280240220d41106a210e4100210f4100210c410021080240034002400240200c450d00200d20084105746a2103200d2008200f6a4105746a21050340200341106a22102900002002290330510d0220052003290300370300200541186a200341186a290300370300200541106a2010290300370300200541086a200341086a290300370300200541206a2105200341206a2103200b200841016a22084b0d000c040b0b200e20084105746a2103034020032900002002290330510d01200341206a2103200b200841016a22084b0d000b4100210c0c030b200f417f6a210f200c41016a210c200b200841016a22084b0d000b0b0240200c0d004100210c0c010b200d2008200c6b4105746a200d20084105746a200b20086b41057410ea081a0b2002200b200c6b22033602482001200d200310d5060240200228024441ffffff3f71450d00200d102e0b200241c0006a200110b10320022802402203200228024810ff0102402002280244450d002003102e0b200241c0006a41086a41013a0000200241c9006a2001290000370000200241d1006a200141086a290000370000200241e1006a200141186a290000370000200241103a0040200241d9006a200141106a290000370000200241c0006a10fe010c020b2000410110d6060c020b42f6cacda397cddbb32020014200200920077d220a200a200956200420067d2009200754ad7d220620045620062004511b22031b22044200200620031b22064106108506200241f8006a2006370300200241f0006a2004370300200241c0006a41086a41003a0000200241c9006a2001290000370000200241d1006a200141086a290000370000200241e1006a200141186a290000370000200241103a0040200241d9006a200141106a290000370000200241c0006a10fe010b200041063a00000b200241c0016a24000b13002000410a360204200041c4ffc0003602000b340020004190fec60036020420004100360200200041146a4102360200200041106a4188b2c100360200200041086a42053702000b130020004106360204200041d8b6c1003602000b4201027f230041106b2202240002404104102c22030d001036000b20004204370204200020033602002002412036020c20002002410c6a41041074200241106a24000b4201027f230041106b2202240002404102102c22030d001036000b2000420237020420002003360200200241203b010e20002002410e6a41021074200241106a24000b4a01027f230041106b2202240002404110102c22030d001036000b20004210370204200020033602002002420037030820024280cdad9d013703002000200241101074200241106a24000b4b01027f230041106b2202240002404110102c22030d001036000b2000421037020420002003360200200242003703082002428088caade9053703002000200241101074200241106a24000be22505027f017e027f017e037f230041b0046b22022400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e1c0102030405060708090a0b0c0d0e0f101112131415161718191a1b00010b200241086a200141386a10ca0120024180026a41286a200141306a29030037030020024180026a41206a200141286a29030037030020024180026a41186a200141206a29030037030020024180026a41106a200141186a29030037030020024180026a41086a200141106a2903003703002002200141086a29030037038002200141f8016a280200210320024180026a41306a200241086a41c00110e9081a20014180026a2903002104200241086a20024180026a41f00110e9081a200041086a200241086a41f00110e9081a20004180026a2004370300200041f8016a20033602002000411b3602000c1b0b20024180026a200141086a10cb0120004100360200200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c1a0b20024180026a200141046a10cc0120004101360200200041246a200241a0026a2802003602002000411c6a20024198026a290300370200200041146a20024190026a2903003702002000410c6a20024188026a29030037020020002002290380023702040c190b20024180026a200141086a10cd01200041086a20024180026a41a00210e9081a200041023602000c180b20004103360200200041086a200141086a2903003703000c170b41042103200141046a210502400240024002400240024002400240024020012d0004417f6a0e050102030405000b41e2a0cc00412841e89bc4001039000b200141086a2802002105410121030c040b41022103200241086a41026a200541036a2d00003a000020024180026a41086a200141146a29020037030020024190026a2001411c6a29020037030020024198026a200141246a2d00003a0000200220052f00013b010820022001410c6a29020037038002200141086a2802002105200141286a28020021010c040b200141086a2802002105410321030c020b2002410a6a200541036a2d00003a000020024180026a41086a200141146a29020037030020024190026a2001411c6a29020037030020024198026a200141246a2d00003a0000200220052f00013b010820022001410c6a2902003703800220012d00254100472106200141086a2802002105200141286a28020021010c030b200141086a2802002105410521030b0b0b200020033a0004200020022f01083b0005200020063a0025200020022f01fc013b0126200041086a20053602002000410c6a200229038002370200200041286a2001360200200041076a2002410a6a2d00003a0000200041146a20024180026a41086a2903003702002000411c6a20024190026a290300370200200041246a20024198026a2d00003a0000200041043602000c160b20024180026a200141086a10ce01200041086a20024180026a41e00010e9081a200041053602000c150b20024180026a200141046a10cf01200041063602002000410c6a20024188026a28020036020020002002290380023702040c140b20024180026a200141086a10d001200041086a20024180026a41d80010e9081a200041073602000c130b10d101000b02400240200128020422050d00410021030c010b20024180026a41186a200141286a29000037030020024180026a41106a200141206a29000037030020024188026a200141186a29000037030020024180026a41286a200141386a29000037030020024180026a41306a200141c0006a29000037030020024180026a41386a200141c8006a29000037030020024180026a41c8006a200141d8006a29000037030020024180026a41d0006a200141e0006a29000037030020024180026a41d8006a200141e8006a2900003703002002200141106a290000370380022002200141306a2900003703a0022002200141d0006a2900003703c00220024180026a41f8006a20014188016a29000037030020024180026a41f0006a20014180016a29000037030020024180026a41e8006a200141f8006a29000037030020024180026a4198016a200141a8016a29000037030020024180026a4190016a200141a0016a29000037030020024180026a4188016a20014198016a29000037030020024180026a41b8016a200141c8016a29000037030020024180026a41b0016a200141c0016a29000037030020024180026a41a8016a200141b8016a2900003703002002200141f0006a2900003703e002200220014190016a290000370380032002200141b0016a2900003703a0032001410c6a2802002201417f4c0d130240024020010d00410121030c010b2001102c2203450d150b20032005200110e9081a200241086a20024180026a41c00110e9081a0b200020033602042000410c6a2001360200200041086a2001360200200041106a200241086a41c00110e9081a200041093602000c110b20024180026a200141086a10d201200041086a20024180026a41980210e9081a2000410a3602000c100b20024180026a200141046a10d301200041046a20024180026a41e80010e9081a2000410b3602000c0f0b10d401000b20024180026a200141086a10d5012000410d360200200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c0d0b20024180026a200141086a10d6012000410e360200200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c0c0b20024180026a200141086a10d6012000410f360200200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c0b0b20024180026a200141086a10d70120004110360200200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c0a0b200141046a2103410721050240024002400240024002400240024020012d0004417f6a0e0701020304050607000b41e2a0cc00412841a4c3cb001039000b20024198026a200341196a29000037030020024190026a200341116a29000037030020024188026a200341096a2900003703002002200329000137038002410121050c050b20024198026a200341196a29000037030020024190026a200341116a29000037030020024188026a200341096a2900003703002002200329000137038002410221050c040b20024180026a41186a200341196a29000037030020024180026a41106a200341116a29000037030020024180026a41086a200341096a290000370300200241086a41086a200341296a290000370300200241086a41106a200341316a290000370300200241086a41186a200341396a29000037030020022003290001370380022002200341216a290000370308410321050c030b200241086a200141086a10c8012002418b026a200241086a41086a2802003600002002200229030837008302410421050c020b20024198026a200341196a29000037030020024190026a200341116a29000037030020024188026a200341096a2900003703002002200329000137038002410521050c010b20024198026a200341196a29000037030020024190026a200341116a29000037030020024188026a200341096a2900003703002002200329000137038002410621050b200020053a0004200020022903800237000520002002290308370025200020022f00fc013b00452000410d6a20024180026a41086a290300370000200041156a20024180026a41106a2903003700002000411d6a20024180026a41186a2903003700002000412d6a200241086a41086a290300370000200041356a200241086a41106a2903003700002000413d6a200241086a41186a290300370000200041c7006a200241fe016a2d00003a0000200041113602000c090b024002400240024002400240200141086a280200417f6a0e03010203000b41e2a0cc0041284184ccc2001039000b200141386a2903002104200141306a29030021074101210841012109024002400240024002402001410c6a2d00000e050104020300010b4104210920024180026a41046a200141206a2d00003a000020022001411c6a2800003602800220012f000d2001410f6a2d0000411074722106200141186a280200210a200141146a2802002103200141106a28020021050c030b20024188026a200141246a29000037030020024180026a41106a2001412c6a2d00003a000020022001411c6a2900003703800220012f000d2001410f6a2d0000411074722106200141186a280200210a200141146a2802002103200141106a2802002105410021090c020b200141186a2802002203417f4c0d0f200141106a28020021010240024020030d00410121050c010b2003102c2205450d110b20052001200310e9081a410221092003210a0c010b20024188026a200141246a29000037030020024180026a41106a2001412c6a2d00003a000020022001411c6a2900003703800220012f000d2001410f6a2d0000411074722106200141186a280200210a200141146a2802002103200141106a2802002105410321090b200241086a41106a20024180026a41106a2d00003a0000200241086a41086a20024180026a41086a290300370300200241046a41026a200241fc016a41026a2d00003a00002002200229038002370308200220022f00fc013b01040c030b2001410c6a28020022094108762106410221080c010b2001410c6a28020022094108762106410321080b0b200020022f01043b002d20004112360200200041386a2004370300200041306a2007370300200041186a200a360200200041146a2003360200200041106a2005360200200041086a20083602002000411c6a20022903083702002000410c6a2006410874200941ff017172360200200041246a200241086a41086a2903003702002000412c6a200241086a41106a2d00003a00002000412f6a200241066a2d00003a00000c080b20024180026a200141086a10d801200041086a20024180026a41f00010e9081a200041133602000c070b20024180026a200141086a10d901200041086a20024180026a41f80010e9081a200041143602000c060b024002400240024020012f0104417f6a0e03010200010b20024180026a200141086a10c90120022902840221042002280280022103410321010c020b20024180026a200141086a10c90120022902840221042002280280022103410121010c010b20012f0106210541b002102c2203450d0820024180026a200141086a28020010da01200320024180026a41b00210e9081a410221010b200020013b0104200041153602002000410c6a2004370200200041086a2003360200200041066a20053b01000c050b20024180026a200141086a10db01200041086a20024180026a41a80210e9081a200041163602000c040b20024180026a200141046a10dc01200041046a20024180026a41c80010e9081a200041173602000c030b20024180026a200141086a10dd01200041086a20024180026a41c80010e9081a200041183602000c020b20024180026a200141086a10de0120004119360200200041c0006a20024180026a41386a290300370300200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c010b20024180026a200141086a10df012000411a360200200041c0006a20024180026a41386a290300370300200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000b200241b0046a24000f0b1038000b1036000bec3703057f047e047f230041900c6b22022400024002400240024002400240024002400240024002400240024002400240024002400240024002400240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020020060e0a0102030405060708090a0b0b2000410b3a00000c130b41002104200241003a0080040240024002400340200128020022032802042205450d01200241e0036a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a0080042003210420034120470d000b200241b0016a41186a200241e0036a41186a290300220737030020024190016a41086a2203200241e0036a41086a29030037030020024190016a41106a2204200241e0036a41106a29030037030020024190016a41186a22052007370300200220022903e00337039001200241f0006a41186a2005290300370300200241f0006a41106a2004290300370300200241f0006a41086a20032903003703002002200229039001370370200128020022032802042204450d12200328020022052d0000210620032004417f6a3602042003200541016a3602004107210320060e020201120b0240200441ff0171450d00200241003a0080040b2000410b3a00000c140b200128020022032802042204450d10200328020022052d0000210620032004417f6a3602042003200541016a360200410021030240024002400240024020060e0705040001150203150b410221030c040b410321030c030b410521030c020b410621030c010b410121030b2001200128020441016a22043602040240200420012802084b0d00200241e0036a200110950120022802e0032104200241b0016a200241e0036a41047241ac0210e9081a2004411c460d00200241e0036a200241b0016a41ac0210e9081a41b002102c2205450d1220052004360200200541046a200241e0036a41ac0210e9081a200241d0006a41186a200241f0006a41186a2903002207370300200241d0006a41106a200241f0006a41106a2903002208370300200241d0006a41086a200241f0006a41086a290300220937030020012001280204417f6a36020420022002290370220a370350200041013a00002000200a370001200041096a2009370000200041116a2008370000200041196a2007370000200041246a2005360200200041216a20033a0000200041286a2002290230370200200041306a200241306a41086a290200370200200041386a200241306a41106a290200370200200041c0006a200241306a41186a2902003702000c130b2000410b3a00000c120b41002104200241003a0080040240024002400240024002400240024002400340200128020022032802042205450d01200241e0036a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a0080042003210420034120470d000b200241b0016a41186a200241e0036a41186a290300220737030020024190016a41086a2203200241e0036a41086a29030037030020024190016a41106a2204200241e0036a41106a29030037030020024190016a41186a22052007370300200220022903e00337039001200241f0006a41186a2005290300370300200241f0006a41106a2004290300370300200241f0006a41086a20032903003703002002200229039001370370200128020022032802042204450d07200328020022052d0000210620032004417f6a3602042003200541016a3602004100210320060e0706050102070304070b0240200441ff0171450d00200241003a0080040b2000410b3a00000c190b410221030c040b410321030c030b410521030c020b410621030c010b410121030b2001280200220128020422044104490d0120012802002205280000210620012004417c6a3602042001200541046a360200200241d0006a41086a200241f0006a41086a2903002207370300200241d0006a41106a200241f0006a41106a2903002208370300200241d0006a41186a200241f0006a41186a290300220937030020022002290370220a370350200041023a00002000200a370001200041096a2007370000200041116a2008370000200041196a2009370000200041246a2006360200200041216a20033a0000200041286a2002290230370200200041306a200241306a41086a290200370200200041386a200241306a41106a290200370200200041c0006a200241306a41186a2902003702000c130b2000410b3a00000c120b2000410b3a00000c110b41002104200241003a0080040240024002400240024002400240024002400340200128020022032802042205450d01200241e0036a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a0080042003210420034120470d000b200241b0016a41186a200241e0036a41186a290300220737030020024190016a41086a2203200241e0036a41086a29030037030020024190016a41106a2204200241e0036a41106a29030037030020024190016a41186a22052007370300200220022903e00337039001200241f0006a41186a2005290300370300200241f0006a41106a2004290300370300200241f0006a41086a20032903003703002002200229039001370370200128020022032802042204450d07200328020022052d0000210620032004417f6a3602042003200541016a3602004100210320060e0706050102070304070b0240200441ff0171450d00200241003a0080040b2000410b3a00000c180b410221030c040b410321030c030b410521030c020b410621030c010b410121030b2001280200220128020422044104490d0120012802002205280000210620012004417c6a3602042001200541046a360200200241d0006a41086a200241f0006a41086a2903002207370300200241d0006a41106a200241f0006a41106a2903002208370300200241d0006a41186a200241f0006a41186a290300220937030020022002290370220a370350200041033a00002000200a370001200041096a2007370000200041116a2008370000200041196a2009370000200041246a2006360200200041216a20033a0000200041286a2002290230370200200041306a200241306a41086a290200370200200041386a200241306a41106a290200370200200041c0006a200241306a41186a2902003702000c120b2000410b3a00000c110b2000410b3a00000c100b200041043a00000c0f0b200128020022032802042204450d0c200328020022052d0000210620032004417f6a3602042003200541016a3602004100210402400240024002400240024020060e0705000102120304120b410121040c040b410221040c030b410321040c020b410521040c010b410621040b024002402001280200220328020422054104490d0020032802002206280000210b20032005417c6a3602042003200641046a3602002001280200220128020422034102490d01200128020022052f0000210620012003417e6a3602042001200541026a360200200041046a200b360200200041026a20063b0100200020043a0001200041053a0000200041086a20022902e003370200200041106a200241e0036a41086a290200370200200041186a200241e0036a41106a290200370200200041206a200241e0036a41186a290200370200200041286a200241e0036a41206a290200370200200041306a200241e0036a41286a290200370200200041386a200241e0036a41306a290200370200200041c0006a200241e0036a41386a2902003702000c100b2000410b3a00000c0f0b2000410b3a00000c0e0b41002104200241003a008004024002400240024002400240024002400240024002400340200128020022032802042205450d01200241e0036a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a0080042003210420034120470d000b200241b0016a41186a200241e0036a41186a290300220737030020024190016a41086a2203200241e0036a41086a29030037030020024190016a41106a2204200241e0036a41106a29030037030020024190016a41186a22052007370300200220022903e00337039001200241f0006a41186a2005290300370300200241f0006a41106a2004290300370300200241f0006a41086a20032903003703002002200229039001370370200128020022032802042204450d07200328020022052d0000210620032004417f6a3602042003200541016a3602004100210420060e0706050102070304070b0240200441ff0171450d00200241003a0080040b2000410b3a00000c170b410221040c040b410321040c030b410521040c020b410621040c010b410121040b2001280200220328020422054102490d01200328020022062f0000210b20032005417e6a3602042003200641026a360200200241086a200110ad0120022802080d02200228020c21032002200110ad0120022802000d0320022802042101200241d0006a41186a200241f0006a41186a2903002207370300200241d0006a41106a200241f0006a41106a2903002208370300200241d0006a41086a200241f0006a41086a290300220937030020022002290370220a370350200041063a00002000200a370001200041096a2009370000200041116a2008370000200041196a2007370000200041286a2001360200200041246a2003360200200041226a200b3b0100200041216a20043a00002000412c6a2002290230370200200041346a200241306a41086a2902003702002000413c6a200241306a41106a290200370200200041c4006a200241306a41186a2802003602000c110b2000410b3a00000c100b2000410b3a00000c0f0b2000410b3a00000c0e0b2000410b3a00000c0d0b41002104200241003a008004024002400340200128020022032802042205450d01200241e0036a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a0080042003210420034120470d000b200241b0016a41186a200241e0036a41186a290300220737030020024190016a41086a2203200241e0036a41086a29030037030020024190016a41106a2204200241e0036a41106a29030037030020024190016a41186a22052007370300200220022903e00337039001200241f0006a41186a2005290300370300200241f0006a41106a2004290300370300200241f0006a41086a2003290300370300200220022903900137037041002104200241003a0080040340200128020022032802042205450d02200241e0036a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a0080042003210420034120470d000b200241b0016a41186a200241e0036a41186a2903002207370300200241306a41086a2201200241e0036a41086a290300370300200241306a41106a2203200241e0036a41106a290300370300200241306a41186a22042007370300200220022903e003370330200241d0006a41186a2205200241f0006a41186a290300370300200241d0006a41106a2206200241f0006a41106a290300370300200241d0006a41086a220b200241f0006a41086a29030037030020022002290370370350200041073a000020002002290350370001200041096a200b290300370000200041116a2006290300370000200041196a2005290300370000200041216a2002290330370000200041296a2001290300370000200041316a2003290300370000200041396a2004290300370000200041c1006a2002280010360000200041c4006a200241136a2800003600000c0e0b0240200441ff0171450d00200241003a0080040b2000410b3a00000c0d0b0240200441ff0171450d00200241003a0080040b2000410b3a00000c0c0b41002104200241003a008004024002400340200128020022032802042205450d01200241e0036a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a0080042003210420034120470d000b200241b0016a41186a200241e0036a41186a290300220737030020024190016a41086a2203200241e0036a41086a29030037030020024190016a41106a2204200241e0036a41106a29030037030020024190016a41186a22052007370300200220022903e00337039001200241f0006a41186a2005290300370300200241f0006a41106a2004290300370300200241f0006a41086a2003290300370300200220022903900137037041002104200241003a0080040340200128020022032802042205450d02200241e0036a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a0080042003210420034120470d000b200241b0016a41186a200241e0036a41186a2903002207370300200241306a41086a2201200241e0036a41086a290300370300200241306a41106a2203200241e0036a41106a290300370300200241306a41186a22042007370300200220022903e003370330200241d0006a41186a2205200241f0006a41186a290300370300200241d0006a41106a2206200241f0006a41106a290300370300200241d0006a41086a220b200241f0006a41086a29030037030020022002290370370350200041083a000020002002290350370001200041096a200b290300370000200041116a2006290300370000200041196a2005290300370000200041216a2002290330370000200041296a2001290300370000200041316a2003290300370000200041396a2004290300370000200041c1006a2002280010360000200041c4006a200241136a2800003600000c0d0b0240200441ff0171450d00200241003a0080040b2000410b3a00000c0c0b0240200441ff0171450d00200241003a0080040b2000410b3a00000c0b0b41002104200241003a008004024002400340200128020022032802042205450d01200241e0036a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a0080042003210420034120470d000b200241b0016a41186a200241e0036a41186a290300220737030020024190016a41086a2203200241e0036a41086a29030037030020024190016a41106a2204200241e0036a41106a29030037030020024190016a41186a22052007370300200220022903e00337039001200241f0006a41186a2005290300370300200241f0006a41106a2004290300370300200241f0006a41086a2003290300370300200220022903900137037041002104200241003a0080040340200128020022032802042205450d02200241e0036a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a0080042003210420034120470d000b200241b0016a41186a200241e0036a41186a2903002207370300200241306a41086a2201200241e0036a41086a290300370300200241306a41106a2203200241e0036a41106a290300370300200241306a41186a22042007370300200220022903e003370330200241d0006a41186a2205200241f0006a41186a290300370300200241d0006a41106a2206200241f0006a41106a290300370300200241d0006a41086a220b200241f0006a41086a29030037030020022002290370370350200041093a000020002002290350370001200041096a200b290300370000200041116a2006290300370000200041196a2005290300370000200041216a2002290330370000200041296a2001290300370000200041316a2003290300370000200041396a2004290300370000200041c1006a2002280010360000200041c4006a200241136a2800003600000c0c0b0240200441ff0171450d00200241003a0080040b2000410b3a00000c0b0b0240200441ff0171450d00200241003a0080040b2000410b3a00000c0a0b41002104200241003a00800402400340200128020022032802042205450d01200241e0036a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a0080042003210420034120470d000b200241b0016a41186a200241e0036a41186a290300220737030020024190016a41086a2203200241e0036a41086a29030037030020024190016a41106a2204200241e0036a41106a29030037030020024190016a41186a22052007370300200220022903e00337039001200241d0006a41186a2005290300370300200241d0006a41106a2004290300370300200241d0006a41086a2003290300370300200220022903900137035041002104200241003a0080040340200128020022032802042205450d03200241e0036a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a0080042003210420034120470d000b200241b0016a41186a200241e0036a41186a290300220737030020024190016a41086a2203200241e0036a41086a29030037030020024190016a41106a2204200241e0036a41106a29030037030020024190016a41186a22052007370300200220022903e00337039001200241f0006a41186a2005290300370300200241f0006a41106a2004290300370300200241f0006a41086a20032903003703002002200229039001370370200128020022032802042204450d05200328020022052d0000210620032004417f6a3602042003200541016a3602004107210320060e020403050b0240200441ff0171450d00200241003a0080040b2000410b3a00000c090b2000410b3a00000c080b0240200441ff0171450d00200241003a0080040b2000410b3a00000c070b200128020022032802042204450d01200328020022052d0000210620032004417f6a3602042003200541016a360200410021030240024002400240024020060e0705040001060203060b410221030c040b410321030c030b410521030c020b410621030c010b410121030b2001200128020441016a2204360204200420012802084b0d01200241e0036a200110950120022802e0032104200241b0016a200241e0036a41047241ac0210e9081a2004411c460d01200241e0036a200241b0016a41ac0210e9081a41b002102c2205450d0420052004360200200541046a200241e0036a41ac0210e9081a200241306a41086a2204200241d0006a41086a290300370300200241306a41106a2206200241d0006a41106a290300370300200241306a41186a220b200241d0006a41186a290300370300200241106a41086a220c200241f0006a41086a290300370300200241106a41106a220d200241f0006a41106a290300370300200241106a41186a220e200241f0006a41186a29030037030020012001280204417f6a36020420022002290350370330200220022903703703102000410a3a000020002002290330370001200041096a2004290300370000200041116a2006290300370000200041196a200b290300370000200041216a2002290310370000200041296a200c290300370000200041316a200d290300370000200041396a200e290300370000200041c4006a2005360200200041c1006a20033a00000c050b2000410b3a00000c040b2000410b3a00000c030b2000410b3a00000c020b2000410b3a00000c010b1036000b200241900c6a24000bad2a03067f047e027f230041e0066b22022400024002400240024002400240024002400240024002400240024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a36020020050e0a0102030405060708090b0a0b2000410b3a00000c100b200241d0036a200110930120022d00d0034101460d0a20024198016a200241e9036a29000037030020024190016a200241e1036a29000037030020024188016a200241d9036a290000370300200220022900d10337038001024020012802042203450d00200128020022042d0000210520012003417f6a22073602042001200441016a360200410721060240024020050e020100020b2007450d0120042d0001210520012003417e6a3602042001200441026a360200410021060240024002400240024020050e0705040001060203060b410221060c040b410321060c030b410521060c020b410621060c010b410121060b200241d0036a200110980120022802d0032101200241a0016a200241d0036a41047241ac0210e9081a024002402001411c460d00200241d0036a200241a0016a41ac0210e9081a41b002102c22030d010c130b2000410b3a00000c110b20032001360200200341046a200241d0036a41ac0210e9081a200241e0006a41186a20024180016a41186a2903002208370300200241e0006a41106a20024180016a41106a2903002209370300200241e0006a41086a20024180016a41086a290300220a3703002002200229038001220b370360200041013a00002000200b370001200041096a200a370000200041116a2009370000200041196a2008370000200041246a2003360200200041216a20063a0000200041286a2002290240370200200041306a200241c0006a41086a290200370200200041386a200241c0006a41106a290200370200200041c0006a200241c0006a41186a2902003702000c100b2000410b3a00000c0f0b200241d0036a200110930102400240024020022d00d0034101460d00200241b8016a200241e9036a290000370300200241b0016a200241e1036a290000370300200241a8016a200241d9036a290000370300200220022900d1033703a00120012802042203450d0d200128020022042d0000210620012003417f6a22073602042001200441016a36020041002105024002400240024020060e0706050001110203110b410221050c050b410321050c040b410521050c030b410621050c020b2000410b3a00000c100b410121050b024020074104490d002004280001210620012003417b6a3602042001200441056a36020020024180016a41086a200241a0016a41086a290300220837030020024180016a41106a200241a0016a41106a290300220937030020024180016a41186a200241a0016a41186a290300220a370300200220022903a001220b37038001200041023a00002000200b370001200041096a2008370000200041116a2009370000200041196a200a370000200041246a2006360200200041216a20053a0000200041286a2002290260370200200041306a200241e0006a41086a290200370200200041386a200241e0006a41106a290200370200200041c0006a200241e0006a41186a2902003702000c0f0b2000410b3a00000c0e0b200241d0036a200110930102400240024020022d00d0034101460d00200241b8016a200241e9036a290000370300200241b0016a200241e1036a290000370300200241a8016a200241d9036a290000370300200220022900d1033703a00120012802042203450d0d200128020022042d0000210620012003417f6a22073602042001200441016a36020041002105024002400240024020060e0706050001110203110b410221050c050b410321050c040b410521050c030b410621050c020b2000410b3a00000c0f0b410121050b024020074104490d002004280001210620012003417b6a3602042001200441056a36020020024180016a41086a200241a0016a41086a290300220837030020024180016a41106a200241a0016a41106a290300220937030020024180016a41186a200241a0016a41186a290300220a370300200220022903a001220b37038001200041033a00002000200b370001200041096a2008370000200041116a2009370000200041196a200a370000200041246a2006360200200041216a20053a0000200041286a2002290260370200200041306a200241e0006a41086a290200370200200041386a200241e0006a41106a290200370200200041c0006a200241e0006a41186a2902003702000c0e0b2000410b3a00000c0d0b200041043a00000c0c0b0240024002402006450d0020042d0001210620012003417e6a22073602042001200441026a3602004100210502400240024002400240024020060e0705000102060304060b410121050c040b410221050c030b410321050c020b410521050c010b410621050b20074104490d012004280002210720012003417a6a22063602042001200441066a36020020064102490d0220042f000621062001200341786a3602042001200441086a360200200041046a2007360200200041026a20063b0100200020053a0001200041053a0000200041086a20022902d003370200200041106a200241d0036a41086a290200370200200041186a200241d0036a41106a290200370200200041206a200241d0036a41186a290200370200200041286a200241d0036a41206a290200370200200041306a200241d0036a41286a290200370200200041386a200241d0036a41306a290200370200200041c0006a200241d0036a41386a2902003702000c0e0b2000410b3a00000c0d0b2000410b3a00000c0c0b2000410b3a00000c0b0b200241d0036a2001109301024002400240024002400240024020022d00d0034101460d00200241b8016a200241e9036a290000370300200241b0016a200241e1036a290000370300200241a8016a200241d9036a290000370300200220022900d1033703a00120012802042203450d03200128020022042d0000210520012003417f6a22063602042001200441016a36020041002107024002400240024020050e0706050001070203070b410221070c050b410321070c040b410521070c030b410621070c020b2000410b3a00000c100b410121070b20064102490d0120042f0001210520012003417d6a3602042001200441036a360200200241106a200110ab0120022802100d0220022802142103200241086a200110ab0120022802080d03200228020c210120024180016a41186a200241a0016a41186a290300220837030020024180016a41106a200241a0016a41106a290300220937030020024180016a41086a200241a0016a41086a290300220a370300200220022903a001220b37038001200041063a00002000200b370001200041096a200a370000200041116a2009370000200041196a2008370000200041286a2001360200200041246a2003360200200041226a20053b0100200041216a20073a00002000412c6a2002290260370200200041346a200241e0006a41086a2902003702002000413c6a200241e0006a41106a290200370200200041c4006a200241e0006a41186a2802003602000c0e0b2000410b3a00000c0d0b2000410b3a00000c0c0b2000410b3a00000c0b0b2000410b3a00000c0a0b200241d0036a2001109301024020022d00d0034101460d00200241f8006a200241e9036a290000370300200241f0006a200241e1036a290000370300200241e8006a200241d9036a290000370300200220022900d10337036041002104200241003a00f0032001280204417f6a21030240024003402003417f460d01200241d0036a20046a200128020022052d00003a0000200120033602042001200541016a3602002002200441016a22053a00f0032003417f6a21032005210420054120470d000b200241a0016a41086a2201200241d0036a41086a290300370300200241a0016a41106a2203200241d0036a41106a290300370300200241a0016a41186a2204200241d0036a41186a290300370300200220022903d0033703a001200541ff0171411f4d0d01200241206a41086a22052001290300370300200241206a41106a22012003290300370300200241206a41186a22032004290300370300200241c0006a41086a2204200241e0006a41086a290300370300200241c0006a41106a2206200241e0006a41106a290300370300200241c0006a41186a2207200241e0006a41186a290300370300200220022903a00137032020022002290360370340200041073a000020002002290340370001200041096a2004290300370000200041116a2006290300370000200041196a2007290300370000200041216a2002290320370000200041296a2005290300370000200041316a2001290300370000200041396a2003290300370000200041c1006a2002280019360000200041c4006a2002411c6a2800003600000c0c0b200441ff0171450d00200241003a00f0030b2000410b3a00000c0a0b2000410b3a00000c090b200241d0036a2001109301024020022d00d0034101460d00200241f8006a200241e9036a290000370300200241f0006a200241e1036a290000370300200241e8006a200241d9036a290000370300200220022900d10337036041002104200241003a00f0032001280204417f6a21030240024003402003417f460d01200241d0036a20046a200128020022052d00003a0000200120033602042001200541016a3602002002200441016a22053a00f0032003417f6a21032005210420054120470d000b200241a0016a41086a2201200241d0036a41086a290300370300200241a0016a41106a2203200241d0036a41106a290300370300200241a0016a41186a2204200241d0036a41186a290300370300200220022903d0033703a001200541ff0171411f4d0d01200241206a41086a22052001290300370300200241206a41106a22012003290300370300200241206a41186a22032004290300370300200241c0006a41086a2204200241e0006a41086a290300370300200241c0006a41106a2206200241e0006a41106a290300370300200241c0006a41186a2207200241e0006a41186a290300370300200220022903a00137032020022002290360370340200041083a000020002002290340370001200041096a2004290300370000200041116a2006290300370000200041196a2007290300370000200041216a2002290320370000200041296a2005290300370000200041316a2001290300370000200041396a2003290300370000200041c1006a2002280019360000200041c4006a2002411c6a2800003600000c0b0b200441ff0171450d00200241003a00f0030b2000410b3a00000c090b2000410b3a00000c080b200241d0036a2001109301024020022d00d0034101460d00200241f8006a200241e9036a290000370300200241f0006a200241e1036a290000370300200241e8006a200241d9036a290000370300200220022900d10337036041002104200241003a00f0032001280204417f6a21030240024003402003417f460d01200241d0036a20046a200128020022052d00003a0000200120033602042001200541016a3602002002200441016a22053a00f0032003417f6a21032005210420054120470d000b200241a0016a41086a2201200241d0036a41086a290300370300200241a0016a41106a2203200241d0036a41106a290300370300200241a0016a41186a2204200241d0036a41186a290300370300200220022903d0033703a001200541ff0171411f4d0d01200241206a41086a22052001290300370300200241206a41106a22012003290300370300200241206a41186a22032004290300370300200241c0006a41086a2204200241e0006a41086a290300370300200241c0006a41106a2206200241e0006a41106a290300370300200241c0006a41186a2207200241e0006a41186a290300370300200220022903a00137032020022002290360370340200041093a000020002002290340370001200041096a2004290300370000200041116a2006290300370000200041196a2007290300370000200041216a2002290320370000200041296a2005290300370000200041316a2001290300370000200041396a2003290300370000200041c1006a2002280019360000200041c4006a2002411c6a2800003600000c0a0b200441ff0171450d00200241003a00f0030b2000410b3a00000c080b2000410b3a00000c070b2000410b3a00000c060b200241d0036a200110930120022d00d0034101460d03200241e0006a41186a200241e9036a2203290000370300200241e0006a41106a200241e1036a2204290000370300200241e0006a41086a200241d9036a2205290000370300200220022900d103370360200241d0036a2001109301024002400240024020022d00d0034101460d0020024180016a41186a200329000037030020024180016a41106a200429000037030020024180016a41086a2005290000370300200220022900d1033703800120012802042203450d03200128020022042d0000210520012003417f6a22073602042001200441016a36020041072106024020050e020300040b2007450d0320042d0001210520012003417e6a3602042001200441026a36020041002106024002400240024020050e0706050001070203070b410221060c050b410321060c040b410521060c030b410621060c020b2000410b3a00000c080b410121060b200241d0036a200110980120022802d0032101200241a0016a200241d0036a41047241ac0210e9081a2001411c460d05200241d0036a200241a0016a41ac0210e9081a41b002102c2203450d0720032001360200200341046a200241d0036a41ac0210e9081a200241c0006a41086a2201200241e0006a41086a290300370300200241c0006a41106a2204200241e0006a41106a290300370300200241c0006a41186a2205200241e0006a41186a290300370300200241206a41086a220720024180016a41086a290300370300200241206a41106a220c20024180016a41106a290300370300200241206a41186a220d20024180016a41186a2903003703002002200229036037034020022002290380013703202000410a3a000020002002290340370001200041096a2001290300370000200041116a2004290300370000200041196a2005290300370000200041216a2002290320370000200041296a2007290300370000200041316a200c290300370000200041396a200d290300370000200041c4006a2003360200200041c1006a20063a00000c060b2000410b3a00000c050b2000410b3a00000c040b2000410b3a00000c030b2000410b3a00000c020b2000410b3a00000c010b2000410b3a00000b200241e0066a24000f0b1036000baf0101017f230041106b22042400200420003703082003200441086a410810740240024002400240200141ff01710e03000102030b200441003a00072003200441076a410110740c020b200441013a00072003200441076a410110740c010b200441023a00072003200441076a410110740b02400240200241ff01714101460d00200441003a00072003200441076a410110740c010b200441013a00072003200441076a410110740b200441106a24000b13002000410236020420004188c4c1003602000b3400200041a081ca0036020420004100360200200041146a4107360200200041106a41d0ccc100360200200041086a42073702000b2f01017f02404104102c22020d001036000b2000420437020420002002360200410020001076410141002000109c010bf70201047f230041e0006b22022400200241086a41a081ca004107108102200241186a41e4d3c100410810810202400240200141086a280200220341046a2204417f4c0d000240024020040d00410121050c010b2004102c2205450d020b200241003602402002200436023c20022005360238200241386a200141041074200128020421012003200241386a1076200241386a2001200310742002200228023822012002280240220410a301370348200241dc006a200120046a360200200220013602582002200241d0006a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220441206a2201417f4c0d000240024020010d00410121030c010b2001102c2203450d020b2000410036020820002001360204200020033602002000200241086a411010742000200241186a41101074200020022802282201200410740240200228022c450d002001102e0b200241e0006a24000f0b1038000b1036000b960203047f017e027f230041306b22012400200141186a22024200370300200141106a22034200370300200141086a4200370300200142003703002001418ef9c0004110108102200141206a41c7c3cb0041071081022002200141206a41086a29000037030020032001290020370300200141206a200110f10220012802202203410820031b2104410021020240024002402001290224420020031b2205422088a722030e020201000b4100210203402003410176220620026a210720072002200420074106746a41206a2000412010ec084101481b2102200320066b220341014b0d000b0b200420024106746a41206a2000412010ec084521020b0240200542ffffff1f83500d002004102e0b200141306a240020020b130020004105360204200041acd8c1003602000b3400200041b6d1cc0036020420004100360200200041146a4105360200200041106a41b8f0c100360200200041086a42063702000b130020004101360204200041f4f7c1003602000b3101017f02404125102c22020d001036000b2000422537020420002002360200412120001076200041b8fcc600412110740b13002000410636020420004194fcc1003602000b34002000418ef9c00036020420004100360200200041146a4105360200200041106a41c09ec200360200200041086a42103702000b5401017f230041106b2202240020004100360208200042013702004100200010762002420037030820024200370300200020024110107420024200370308200242003703002000200241101074200241106a24000b2901017f230041106b2202240020024100360208200242083703002000200210b401200241106a24000b130020004107360204200041a0a9c2003602000b4b01027f230041106b22022400200242f0d0c9abc6add9b1f40037030802404108102c22030d001036000b20004208370204200020033602002000200241086a41081074200241106a24000b4201027f230041106b2202240002404104102c22030d001036000b20004204370204200020033602002002410d36020c20002002410c6a41041074200241106a24000b4b01027f230041106b2202240002404110102c22030d001036000b20004210370204200020033602002002420037030820024280e0cdb8eb053703002000200241101074200241106a24000ba30302057f017e230041b0016b220224002002200141206a41e7e485f30610d103200228020421032002280200210441002105200241003a0068024002400240034020032005460d01200241c8006a20056a200420056a2d00003a00002002200541016a22063a00682006210520064120470d000b200241f0006a41086a2205200241c8006a41086a290300370300200241f0006a41106a2203200241c8006a41106a290300370300200241f0006a41186a2204200241c8006a41186a29030037030020022002290348370370200641ff0171411f4d0d01200241286a41186a20042903002207370300200241086a41086a2005290300370300200241086a41106a2003290300370300200241086a41186a2007370300200220022903703703080c020b200541ff0171450d00200241003a00680b200241106a4200370300200241186a4200370300200241206a4200370300200242003703080b20002001360200200020022903083700042000410c6a200241106a290300370000200041146a200241186a2903003700002000411c6a200241206a290300370000200241b0016a24000bc00101027f4100210341d4e2cc0021040240024002400240024002400240200241e6e485f3064a0d00200241f0c2c98b06460d03200241e2c289ab06460d01200241e1ea91cb06470d06200141a0016a21040c050b200241e9dabdf306460d01200241e1e69df306460d03200241e7e485f306470d0541202103200121040c050b41202103200141206a21040c040b200141c0006a21040c020b200141e0006a21040c010b20014180016a21040b412021030b20002003360204200020043602000ba30302057f017e230041b0016b220224002002200141206a41e9dabdf30610d103200228020421032002280200210441002105200241003a0068024002400240034020032005460d01200241c8006a20056a200420056a2d00003a00002002200541016a22063a00682006210520064120470d000b200241f0006a41086a2205200241c8006a41086a290300370300200241f0006a41106a2203200241c8006a41106a290300370300200241f0006a41186a2204200241c8006a41186a29030037030020022002290348370370200641ff0171411f4d0d01200241286a41186a20042903002207370300200241086a41086a2005290300370300200241086a41106a2003290300370300200241086a41186a2007370300200220022903703703080c020b200541ff0171450d00200241003a00680b200241106a4200370300200241186a4200370300200241206a4200370300200242003703080b20002001360200200020022903083700042000410c6a200241106a290300370000200041146a200241186a2903003700002000411c6a200241206a290300370000200241b0016a24000b130020004105360204200041c8b9c2003602000b130020004108360204200041c8bcc2003602000b13002000411136020420004180c2c2003602000b870201037f230041d0006b22022400200241086a41bad7c7004108108102200241186a41dbafc9004109108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241386a41086a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000bac0201037f230041e0006b2202240020024188fec6004108108102200241106a41e7ccc2004107108102024002404120102c2203450d002002422037023420022003360230200241306a200141201074200241c0006a200228023022012002280238220310d803200241dc006a200120036a360200200220013602582002200241d0006a3602542002200241c0006a360250200241206a200241d0006a107c02402002280234450d002001102e0b2002280228220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b20004100360208200020013602042000200436020020002002411010742000200241106a411010742000200228022022012003107402402002280224450d002001102e0b200241e0006a24000f0b1036000b1038000b2c0020002002ad4220862001ad84100f2201290000370000200041086a200141086a2900003700002001102e0b1300200041053602042000419ccdc2003602000b3400200041f1fcc60036020420004100360200200041146a4101360200200041106a41b4e4c200360200200041086a42073702000b130020004101360204200041f4e5c2003602000b4b01027f230041106b2202240002404110102c22030d001036000b20004210370204200020033602002002420037030820024280d0dbc3f4023703002000200241101074200241106a24000b13002000410f360204200041c4ebc2003602000b340020004188fec60036020420004100360200200041146a4104360200200041106a41f0aac300360200200041086a42083702000b2f01017f02404104102c22020d001036000b2000420437020420002002360200410020001076410841002000109a010b4c01027f230041106b2202240002404114102c22030d001036000b200042143702042000200336020020024200370308200242003703002000200241101074410020001076200241106a24000b7001027f230041d0006b22022400200241063a002802404101102c2203450d002000420137020420002003360200200241003a004f2000200241cf006a41011074024020022d00284101470d00200241306a280200450d002002412c6a280200102e0b200241d0006a24000f0b1036000b840101027f230041d0026b22022400200241ac026a41023a000002404101102c2203450d002000420137020420002003360200200241003a00cf022000200241cf026a41011074024020022d00ac024102460d0002402002411c6a28020041ffffff3f71450d002002280218102e0b200241246a10e3030b200241d0026a24000f0b1036000b930301027f024020002802082201450d0020002802002202200141c8006c6a21010340024020022d00004101470d00200241086a280200450d00200241046a280200102e0b0240200241246a2d00004101470d002002412c6a280200450d00200241286a280200102e0b200241c8006a22022001470d000b0b0240200041046a2802002202450d00200241c8006c450d002000280200102e0b024020002d000c4101470d00200041146a280200450d00200041106a280200102e0b024020002d00304101470d00200041386a280200450d00200041346a280200102e0b024020002d00544101470d00200041dc006a280200450d00200041d8006a280200102e0b024020002d00784101470d0020004180016a280200450d00200041fc006a280200102e0b024020002d009c014101470d00200041a4016a280200450d00200041a0016a280200102e0b024020002d00c0014101470d00200041c8016a280200450d00200041c4016a280200102e0b024020002d00e4014101470d00200041ec016a280200450d00200041e8016a280200102e0b0b130020004106360204200041d0b4c3003602000b4201027f230041106b2202240002404104102c22030d001036000b20004204370204200020033602002002411436020c20002002410c6a41041074200241106a24000b4b01027f230041106b2202240002404110102c22030d001036000b20004210370204200020033602002002420037030820024280f19384eb053703002000200241101074200241106a24000b4a01027f230041106b2202240002404110102c22030d001036000b200042103702042000200336020020024200370308200242809adbba023703002000200241101074200241106a24000b4b01027f230041106b2202240002404110102c22030d001036000b20004210370204200020033602002002420037030820024280fad5d5f2053703002000200241101074200241106a24000bfc0302037f017e230041106b2202240020002802102103200041186a280200220420011076024020044105742204450d00200320046a21040340200220032802003602002001200241041074200341086a200110ea03200341206a22032004470d000b0b200029030021052002200041086a2903003703082002200537030020012002411010742000411c6a200110b7012002200041286a108a012001200228020022032002280208107402402002280204450d002003102e0b2002200041cc006a108a012001200228020022032002280208107402402002280204450d002003102e0b2002200041f0006a108a012001200228020022032002280208107402402002280204450d002003102e0b200220004194016a108a012001200228020022032002280208107402402002280204450d002003102e0b2002200041b8016a108a012001200228020022032002280208107402402002280204450d002003102e0b02400240200041a4026a2d00004101460d00200241003a000020012002410110740c010b200241013a000020012002410110742001200041a5026a411410740b2002200041dc016a108a012001200228020022032002280208107402402002280204450d002003102e0b200220004180026a108a012001200228020022032002280208107402402002280204450d002003102e0b200241106a24000bd50102017f017e230041106b220224000240024002400240024002400240024020002802000e0700010203040506070b200241003a000020012002410110740c060b200241013a00002001200241011074200029030821032002200041106a2903003703082002200337030020012002411010740c050b200241023a000020012002410110740c040b200241033a000020012002410110740c030b200241043a000020012002410110740c020b200241053a000020012002410110740c010b200241063a000020012002410110740b200241106a24000baa0b010a7f230041e0006b22022400200241003a00380240024002400240024002400240024002400240024020012802002203280204220420044100472205490d00200241386a20032802002206200510e9081a2003200420056b3602042003200620056a360200024020040d0041002107200241056a2103200241086a21042002411c6a21050c0a0b41002107200241056a2103200241086a21042002411c6a210520022d003822080e260901010101010101010101010101010101010101010101010101010101010101010102030405010b200041063a00000c090b02402008417f6a220641ff01714121490d00200041063a00000c090b0240024020060d00410121090c010b200610322209450d060b20092001280200220128020020012802042208200620082006491b220a10e908210b20012802042207200a490d0620012007200a6b36020420012001280200200a6a360200410121070240200820064f0d00200b200a6a22014100200b20066a20016b10eb081a0b2006210a0c070b200241386a200110a60141022107200241346a41026a220120022d003b3a0000200241206a41086a2208200241d0006a290300370300200241206a41106a220b200241d8006a2d00003a0000200220022f00393b01342002200241386a41106a29030037032020022d00384101460d03200241386a41086a2802002106200241c4006a280200210a200228023c21092002411c6a41026a20012d00003a0000200241086a41086a2008290300370300200241086a41106a200b2d00003a0000200220022f01343b011c200220022903203703080c060b200241386a200110a601200241346a41026a220120022d003b3a0000200241206a41086a2207200241d0006a290300370300200241206a41106a2208200241d8006a2d00003a0000200220022f00393b01342002200241386a41106a290300370320024020022d00384101460d00200241386a41086a2802002106200241c4006a280200210a200228023c21092002411c6a41026a20012d00003a0000200241086a41086a2007290300370300200241086a41106a20082d00003a0000200220022f01343b011c20022002290320370308410321070c060b200041063a00000c060b200241386a200110a601200241346a41026a220120022d003b3a0000200241206a41086a2207200241d0006a290300370300200241206a41106a2208200241d8006a2d00003a0000200220022f00393b01342002200241386a41106a290300370320024020022d00384101460d00200241386a41086a2802002106200241c4006a280200210a200228023c21092002411c6a41026a20012d00003a0000200241086a41086a2007290300370300200241086a41106a20082d00003a0000200220022f01343b011c20022002290320370308410421070c050b200041063a00000c050b200241386a200110a601200241346a41026a220120022d003b3a0000200241206a41086a2207200241d0006a290300370300200241206a41106a2208200241d8006a2d00003a0000200220022f00393b01342002200241386a41106a290300370320024020022d00384101460d00200241386a41086a2802002106200241c4006a280200210a200228023c21092002411c6a41026a20012d00003a0000200241086a41086a2007290300370300200241086a41106a20082d00003a0000200220022f01343b011c20022002290320370308410521070c040b200041063a00000c040b200041063a00000c030b1036000b200a200741b8b2c0001056000b200020073a0000200020052f00003b00012000410c6a200a360000200041086a2006360000200041046a2009360000200041106a2004290000370000200041216a20032f00003b0000200041036a200541026a2d00003a0000200041186a200441086a290000370000200041206a200441106a2d00003a0000200041236a200341026a2d00003a00000b200241e0006a24000bbe1503097f027e027f23004190016b2202240002400240024002400240024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a3602004100210720050e260601010101010101010101010101010101010101010101010101010101010101010102030405010b200041063a00000c0a0b02402005417f6a41ff01714121490d00200041063a00000c0a0b024002402005417f6a22080d00410121090c010b200810322209450d07200128020421060b20062008490d0520092001280200200810e9081a200128020422042008490d072001200420086b3602042001200128020020086a360200410121072008210a0c040b41002108200241003a00582003417f6a21092003417e6a210302400240034020092008460d01200241386a20086a200420086a220541016a2d00003a0000200120033602042001200541026a3602002002200841016a22053a00582003417f6a21032005210820054120470d000b200241f4006a41026a220420022d003a22013a00002002418c016a41026a220320013a0000200241f8006a41086a2207200241cf006a290000220b370300200241f8006a41106a2206200241d7006a2d000022013a0000200220022f013822083b0174200220083b018c0120022002290047220c370378200228003b2109200228003f210a20022800432108200241e0006a41106a220d20013a0000200241e0006a41086a220e200b3703002002200c37036041012101200541ff01714120490d01200320042d00003a00002007200e2903003703002006200d2d00003a0000200220022f01743b018c0120022002290360370378410021010c010b0240200841ff0171450d00200241003a00580b410121010b41022107200241346a41026a22042002418c016a41026a2d00003a0000200241206a41086a2203200241f8006a41086a290300370300200241206a41106a2205200241f8006a41106a2d00003a0000200220022f018c013b013420022002290378370320024020010d002002411c6a41026a20042d00003a0000200241086a41086a2003290300370300200241086a41106a20052d00003a0000200220022f01343b011c200220022903203703080c040b200041063a00000c080b41002108200241003a00582003417f6a21092003417e6a210302400240034020092008460d01200241386a20086a200420086a220541016a2d00003a0000200120033602042001200541026a3602002002200841016a22053a00582003417f6a21032005210820054120470d000b200241f4006a41026a220420022d003a22013a00002002418c016a41026a220320013a0000200241f8006a41086a2207200241cf006a290000220b370300200241f8006a41106a2206200241d7006a2d000022013a0000200220022f013822083b0174200220083b018c0120022002290047220c370378200228003b2109200228003f210a20022800432108200241e0006a41106a220d20013a0000200241e0006a41086a220e200b3703002002200c37036041012101200541ff01714120490d01200320042d00003a00002007200e2903003703002006200d2d00003a0000200220022f01743b018c0120022002290360370378410021010c010b0240200841ff0171450d00200241003a00580b410121010b200241346a41026a22042002418c016a41026a2d00003a0000200241206a41086a2203200241f8006a41086a290300370300200241206a41106a2205200241f8006a41106a2d00003a0000200220022f018c013b013420022002290378370320024020010d002002411c6a41026a20042d00003a0000200241086a41086a2003290300370300200241086a41106a20052d00003a0000200220022f01343b011c20022002290320370308410321070c030b200041063a00000c070b41002108200241003a00582003417f6a21092003417e6a210302400240034020092008460d01200241386a20086a200420086a220541016a2d00003a0000200120033602042001200541026a3602002002200841016a22053a00582003417f6a21032005210820054120470d000b200241f4006a41026a220420022d003a22013a00002002418c016a41026a220320013a0000200241f8006a41086a2207200241cf006a290000220b370300200241f8006a41106a2206200241d7006a2d000022013a0000200220022f013822083b0174200220083b018c0120022002290047220c370378200228003b2109200228003f210a20022800432108200241e0006a41106a220d20013a0000200241e0006a41086a220e200b3703002002200c37036041012101200541ff01714120490d01200320042d00003a00002007200e2903003703002006200d2d00003a0000200220022f01743b018c0120022002290360370378410021010c010b0240200841ff0171450d00200241003a00580b410121010b200241346a41026a22042002418c016a41026a2d00003a0000200241206a41086a2203200241f8006a41086a290300370300200241206a41106a2205200241f8006a41106a2d00003a0000200220022f018c013b013420022002290378370320024020010d002002411c6a41026a20042d00003a0000200241086a41086a2003290300370300200241086a41106a20052d00003a0000200220022f01343b011c20022002290320370308410421070c020b200041063a00000c060b41002108200241003a00582003417f6a21092003417e6a210302400240034020092008460d01200241386a20086a200420086a220541016a2d00003a0000200120033602042001200541026a3602002002200841016a22053a00582003417f6a21032005210820054120470d000b200241f4006a41026a220420022d003a22013a00002002418c016a41026a220320013a0000200241f8006a41086a2207200241cf006a290000220b370300200241f8006a41106a2206200241d7006a2d000022013a0000200220022f013822083b0174200220083b018c0120022002290047220c370378200228003b2109200228003f210a20022800432108200241e0006a41106a220d20013a0000200241e0006a41086a220e200b3703002002200c37036041012101200541ff01714120490d01200320042d00003a00002007200e2903003703002006200d2d00003a0000200220022f01743b018c0120022002290360370378410021010c010b0240200841ff0171450d00200241003a00580b410121010b200241346a41026a22042002418c016a41026a2d00003a0000200241206a41086a2203200241f8006a41086a290300370300200241206a41106a2205200241f8006a41106a2d00003a0000200220022f018c013b01342002200229037837032020010d042002411c6a41026a20042d00003a0000200241086a41086a2003290300370300200241086a41106a20052d00003a0000200220022f01343b011c20022002290320370308410521070b200020073a0000200020022f011c3b00012000410c6a2008360000200041086a200a360000200041046a2009360000200041106a2002290308370000200041216a20022f00053b0000200041036a2002411c6a41026a2d00003a0000200041186a200241086a41086a290300370000200041206a200241086a41106a2d00003a0000200041236a200241056a41026a2d00003a00000c040b200041063a00002009102e0c030b1036000b2008200441b8b2c0001056000b200041063a00000b20024190016a24000bd61405067f017e027f017e017f23004190016b22022400024002400240024002400240024002400240024002400240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a3602004100210720060e260601010101010101010101010101010101010101010101010101010101010101010102030405010b200041063a00000c0a0b02402006417f6a41ff01714121490d00200041063a00000c0a0b024002402006417f6a22030d00410121040c010b200310322204450d070b200128020022012802042003490d0520042001280200200310e9081a200128020422052003490d072001200520036b3602042001200128020020036a36020041012107200321050c040b41002104200241003a0058024002400340200128020022032802042205450d01200241386a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00582003210420034120470d000b200241f4006a41026a220120022d003a22033a00002002418c016a41026a220620033a0000200241f8006a41086a2207200241cf006a2900002208370300200241f8006a41106a2209200241d7006a2d0000220a3a0000200220022f013822033b0174200220033b018c0120022002290047220b370378200228003b2104200228003f210520022800432103200241e0006a41106a220c200a3a0000200241e0006a41086a220a20083703002002200b370360200620012d00003a0000200220022f01743b018c012009200c2d00003a00002007200a29030037030020022002290360370378410021010c010b0240200441ff0171450d00200241003a00580b410121010b41022107200241346a41026a22062002418c016a41026a2d00003a0000200241206a41086a2209200241f8006a41086a290300370300200241206a41106a220a200241f8006a41106a2d00003a0000200220022f018c013b013420022002290378370320024020010d002002411c6a41026a20062d00003a0000200241086a41086a2009290300370300200241086a41106a200a2d00003a0000200220022f01343b011c200220022903203703080c040b200041063a00000c080b41002104200241003a0058024002400340200128020022032802042205450d01200241386a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00582003210420034120470d000b200241f4006a41026a220120022d003a22033a00002002418c016a41026a220620033a0000200241f8006a41086a2207200241cf006a2900002208370300200241f8006a41106a2209200241d7006a2d0000220a3a0000200220022f013822033b0174200220033b018c0120022002290047220b370378200228003b2104200228003f210520022800432103200241e0006a41106a220c200a3a0000200241e0006a41086a220a20083703002002200b370360200620012d00003a0000200220022f01743b018c012009200c2d00003a00002007200a29030037030020022002290360370378410021010c010b0240200441ff0171450d00200241003a00580b410121010b200241346a41026a22062002418c016a41026a2d00003a0000200241206a41086a2207200241f8006a41086a290300370300200241206a41106a2209200241f8006a41106a2d00003a0000200220022f018c013b013420022002290378370320024020010d002002411c6a41026a20062d00003a0000200241086a41086a2007290300370300200241086a41106a20092d00003a0000200220022f01343b011c20022002290320370308410321070c030b200041063a00000c070b41002104200241003a0058024002400340200128020022032802042205450d01200241386a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00582003210420034120470d000b200241f4006a41026a220120022d003a22033a00002002418c016a41026a220620033a0000200241f8006a41086a2207200241cf006a2900002208370300200241f8006a41106a2209200241d7006a2d0000220a3a0000200220022f013822033b0174200220033b018c0120022002290047220b370378200228003b2104200228003f210520022800432103200241e0006a41106a220c200a3a0000200241e0006a41086a220a20083703002002200b370360200620012d00003a0000200220022f01743b018c012009200c2d00003a00002007200a29030037030020022002290360370378410021010c010b0240200441ff0171450d00200241003a00580b410121010b200241346a41026a22062002418c016a41026a2d00003a0000200241206a41086a2207200241f8006a41086a290300370300200241206a41106a2209200241f8006a41106a2d00003a0000200220022f018c013b013420022002290378370320024020010d002002411c6a41026a20062d00003a0000200241086a41086a2007290300370300200241086a41106a20092d00003a0000200220022f01343b011c20022002290320370308410421070c020b200041063a00000c060b41002104200241003a0058024002400340200128020022032802042205450d01200241386a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00582003210420034120470d000b200241f4006a41026a220120022d003a22033a00002002418c016a41026a220620033a0000200241f8006a41086a2207200241cf006a2900002208370300200241f8006a41106a2209200241d7006a2d0000220a3a0000200220022f013822033b0174200220033b018c0120022002290047220b370378200228003b2104200228003f210520022800432103200241e0006a41106a220c200a3a0000200241e0006a41086a220a20083703002002200b370360200620012d00003a0000200220022f01743b018c012009200c2d00003a00002007200a29030037030020022002290360370378410021010c010b0240200441ff0171450d00200241003a00580b410121010b200241346a41026a22062002418c016a41026a2d00003a0000200241206a41086a2207200241f8006a41086a290300370300200241206a41106a2209200241f8006a41106a2d00003a0000200220022f018c013b01342002200229037837032020010d042002411c6a41026a20062d00003a0000200241086a41086a2007290300370300200241086a41106a20092d00003a0000200220022f01343b011c20022002290320370308410521070b200020073a0000200020022f011c3b00012000410c6a2003360000200041086a2005360000200041046a2004360000200041106a2002290308370000200041216a20022f00053b0000200041036a2002411c6a41026a2d00003a0000200041186a200241086a41086a290300370000200041206a200241086a41106a2d00003a0000200041236a200241056a41026a2d00003a00000c040b200041063a00002004102e0c030b1036000b2003200541b8b2c0001056000b200041063a00000b20024190016a24000b13002000410436020420004180ccc3003602000b340020004195fec60036020420004100360200200041146a4102360200200041106a41c4f2c300360200200041086a42083702000b130020004103360204200041b4f5c3003602000b4301027f230041106b2202240002404102102c22030d001036000b2000420237020420002003360200200241e4003b010e20002002410e6a41021074200241106a24000b4a01027f230041106b2202240002404110102c22030d001036000b20004210370204200020033602002002420037030820024280a0cb98013703002000200241101074200241106a24000b4b01027f230041106b2202240002404110102c22030d001036000b200042103702042000200336020020024200370308200242809886abec053703002000200241101074200241106a24000b130020004103360204200041ecffc3003602000b3400200041bad7c70036020420004100360200200041146a4103360200200041106a41c489c400360200200041086a42083702000b2e01017f02404104102c22020d001036000b200042043702042000200236020041002000107620004104410010740b130020004105360204200041d88dc4003602000b4b01027f230041106b22022400200242f0f2bda1a7ee9cb9f90037030802404108102c22030d001036000b20004208370204200020033602002000200241086a41081074200241106a24000b4401027f230041106b2202240002404104102c22030d001036000b200042043702042000200336020020024190ce0036020c20002002410c6a41041074200241106a24000b4401027f230041106b2202240002404104102c22030d001036000b2000420437020420002003360200200241808c1536020c20002002410c6a41041074200241106a24000b4401027f230041106b2202240002404104102c22030d001036000b2000420437020420002003360200200241d0860336020c20002002410c6a41041074200241106a24000b130020004110360204200041989cc4003602000b13002000410e360204200041e4a3c4003602000b130020004102360204200041e4adc4003602000bff0101037f230041d0006b22022400200241f1fcc6004107108102200241106a418ce5c20041081081022002200136022c200241306a2002412c6a410410d803200241cc006a2002412c6a41046a3602002002200241c0006a36024420022002412c6a3602482002200241306a360240200241206a200241c0006a107c024002402002280228220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b20004100360208200020013602042000200436020020002002411010742000200241106a411010742000200228022022012003107402402002280224450d002001102e0b200241d0006a24000f0b1038000b1036000be4810203097f097e187f230041e0116b220324000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e100001020f0e0d0c0b0a09080706050403000b200341940f6a4101360200200342013702840f2003419cc3cb003602800f200341043602c40c20034194c3cb003602c00c2003200341c00c6a3602900f200341800f6a41f89bc4001044000b41022104200341f0046a41026a200141036a2d00003a0000200341c00c6a41086a2205200141146a290000370300200341c00c6a410d6a2206200141196a290000370000200320012f00013b01f00420032001410c6a2900003703c00c200141086a2800002107200141046a280000210820022802282101024002400240024020022d00000e0400010203020b20022d0001210220012001280200417f6a2209360200024020090d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22092009280200417f6a220936020020090d002001102e0b200241ff0171450d024110102c2202450d1a200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1a20014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220536020020050d012002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22052005280200417f6a220536020020050d012002102e0c010b200241046a2d00002109200241086a280200210a2002410c6a280200210b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0240200941ff01710d00200a410174200b4b0d020b4110102c2202450d19200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1920014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220536020020050d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22052005280200417f6a220536020020050d002002102e0b20012001280200417f6a220236020020020d192001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d192001102e0c1a0b20034190056a108104200341e8016a41086a2005290300370300200341e8016a410d6a2006290000370000200320032f01f0043b0184022003200341f2046a2d00003a008602200320032903c00c3703e8010240200328029805220241134b0d00200341800f6a41086a2204200341e8016a41086a290300370300200341800f6a410d6a2205200341e8016a410d6a290000370000200320032f0184023b01a00c200320032d0086023a00a20c200320032903e8013703800f02400240024002402002200328029405470d00200241016a22012002490d13200241017422062001200620014b1b22014104200141044b1b220141ffffff1f712001464103742106200141067421010240024020020d00200341003602f0090c010b200341f0096a41086a410836020020032003280290053602f009200320024106743602f4090b200341c0076a20012006200341f0096a107d200341c8076a280200210120032802c0074101460d01200320032802c4073602900520032001410676360294050b20032802900520024106746a2201420037030820014201370300200141106a4200370300200141186a4200370300200141206a20032f01a00c3b0100200141226a20032d00a20c3a0000200141276a2007360000200141236a20083600002001412b6a20032903800f370000200141336a2004290300370000200141386a20052900003700002003200241016a220136029805200341f0096a41086a20013602002003200329039005220c3703f009200ca722040d0120034188026a41186a2204420037030020034188026a41106a2205420037030020034188026a41086a220642003703002003420037038802200341800f6a4188fec60041081081022006200341800f6a41086a2207290000370300200320032900800f37038802200341800f6a41b0afc300410a10810220042007290000370300200520032900800f37030020034188026a412010ff010c020b2001450d110c1a0b20034188026a41186a2205420037030020034188026a41106a2206420037030020034188026a41086a220742003703002003420037038802200341800f6a4188fec60041081081022007200341800f6a41086a2208290000370300200320032900800f37038802200341800f6a41b0afc300410a10810220052008290000370300200620032900800f37030020034188026a200341f0096a10820420032802f40941ffffff1f71450d002004102e0b2003418c0f6a2002360200200341880f6a41063a0000200341123a00800f200341800f6a10fe01200320032800c8023602c0112003200341cb026a2800003600c311200041186a41003a0000200041106a2001ad42b0ae157e42c896efc5007c37030020004201370308200020032802c0113600192000411c6a20032800c311360000200042003703000c1b0b200341800f6a410d108304200341880f6a280200210120032802840f210220032802800f210420032802940541ffffff1f71450d19200328029005102e0c190b200341f0096a200141046a41a00210e9081a200341800f6a41286a200241286a280200360200200341800f6a41206a200241206a290200370300200341800f6a41186a200241186a290200370300200341800f6a41106a200241106a290200370300200341800f6a41086a200241086a290200370300200320022902003703800f200341c00c6a200341800f6a10c10220034188026a41086a2201200341c90c6a29000037030020034188026a41106a2202200341d10c6a29000037030020034188026a41186a2204200341d90c6a290000370300200320032900c10c3703880220032d00c00c4101460d11200341c0076a41186a2004290300370300200341c0076a41106a2002290300370300200341c0076a41086a200129030037030020032003290388023703c007024020032802f809220141e4004d0d00200341800f6a410c10830420032f00810f20032d00830f41107472210120032902840f210c20032d00800f21020c130b200341106a2001ad220d420042809adbba02420010e808200341c0116a200341c0076a108404200341800f6a20032802c011220120032802c81110850420034190056a200341800f6a41a40210e9081a200341f0046a41086a2202200341ad116a290000370300200341f0046a41106a2204200341b5116a290000370300200341f0046a41176a2205200341bc116a280000360000200320032900a5113703f004200341106a41086a290300210e2003290310210f20032d00a41122064102460d13200341c8026a20034190056a41a40210e9081a200341a8026a41176a2005280000360000200341a8026a41106a2004290300370300200341a8026a41086a2002290300370300200320032903f0043703a802024020032802c411450d002001102e0b200341800f6a200341c8026a41a40210e9081a200341800f6a41a4026a20063a0000200341a5116a20032903a802370000200341ad116a200341a8026a41086a290300370000200341b5116a200341a8026a41106a290300370000200341bc116a200341bf026a280000360000200341800f6a41186a22012802002106410021072001410036020002402006450d0020032802900f220841086a210a41002109410021074100210402400340024002402007450d00200820044105746a21012008200420096a4105746a210203400240200141086a2205280200417f6a0e06000303030300030b20022001290300370300200241186a200141186a290300370300200241106a200141106a290300370300200241086a2005290300370300200241206a2102200141206a21012006200441016a22044b0d000c040b0b200a20044105746a2101034002402001280200417f6a0e06000202020200020b200141206a21012006200441016a22044b0d000b410021070c030b2009417f6a2109200741016a21072006200441016a22044b0d000b0b024020070d00410021070c010b2008200420076b4105746a200820044105746a200620046b41057410ea081a0b2003200620076b3602980f2003419c0f6a220110e3032001200341f0096a41a00210e9081a200341c00c6a200341800f6a41c00210e9081a200341c00c6a41086a290300211020032903c00c21110c140b200341800f6a41286a200241286a280200360200200341800f6a41206a200241206a290200370300200341800f6a41186a200241186a290200370300200341800f6a41106a200241106a290200370300200341800f6a41086a200241086a290200370300200320022902003703800f200341c00c6a200341800f6a10c102200341c0076a41086a2201200341c90c6a290000370300200341c0076a41106a2202200341d10c6a290000370300200341c0076a41186a2204200341d90c6a290000370300200320032900c10c3703c00702400240024002400240024020032d00c00c4101460d0020034190056a41186a200429030037030020034190056a41106a200229030037030020034190056a41086a2001290300370300200320032903c00737039005200341c0076a20034190056a10d703200341800f6a20032802c007220120032802c8072204108604024020032d00a00f220541064622020d002001200410ff010b20034188026a41086a200341800f6a41086a29030037030020034188026a41106a200341800f6a41106a29030037030020034188026a41186a2204200341800f6a41186a290300370300200341bc076a41026a2206200341a30f6a2d00003a0000200341a00c6a41086a2207200341b40f6a290200370300200341a00c6a41106a2208200341bc0f6a290200370300200320032903800f37038802200320032f00a10f3b01bc072003200341ac0f6a2902003703a00c024020020d00200341a80f6a2802002109200341a40f6a280200210a200341b8016a41086a20034188026a41136a290000370300200341b8016a410d6a22022004290000370000200341b8076a41026a20062d00003a0000200341f0046a41106a2008290300370300200341f0046a41086a2007290300370300200320032d008a023a00ea01200320032f0188023b01e80120032003290093023703b801200320032f01bc073b01b807200320032903a00c3703f004200328008b022104200328008f022106024020032802c407450d002001102e0b200341c00c6a410d6a22012002290000370000200341c00c6a41086a2202200341b8016a41086a290300370300200341b4016a220720032d00ea013a0000200341f0096a41086a22082002290300370300200341f0096a410d6a22022001290000370000200320032f01e8013b01d201200320032903b8013703f009200320032801d0013602b001200320063600c707200320043600c307200320072d00003a00c207200320032f01b2013b01c007200341c0076a41136a2008290300370000200341c0076a41186a2002290000370000200320032903f0093700cb0741012108024020054101470d002009450d00200a102e0b200341e8016a41086a200341a3056a290000370300200341f5016a220120034190056a41186a290000370000200320032f0190053b018402200320032d0092053a0086022003200329009b053703e80120032800930521022003280097052104200341c8026a200341c0076a108704200341800f6a20032802c80220032802d0021088044100210720032802900f22050d024200210e410021064200210c4200210f0c030b024020032802c407450d002001102e0b200341c0116a410f10830420032d00c0114106460d0320032902c411210c0c040b200341023a00c0110c030b20032902940f220c42ffffffff0f83210e200c422088a72106200341880f6a290300210f2003419c0f6a280200210a20032903800f210c200521080b200341cb0c6a2004360000200341cf0c6a20032903e801370000200341d70c6a200341e8016a41086a290300370000200341dc0c6a2001290000370000200320032f0184023b01c40c200320032d0086023a00c60c200320023600c70c2003200341c0076a3602c00c200341c00c6a410472210502402006450d0041002109410021074100210402400340024002402007450d00200820044105746a21012008200420096a4105746a2102034020012005412010ec08450d0220022001290000370000200241186a200141186a290000370000200241106a200141106a290000370000200241086a200141086a290000370000200241206a2102200141206a21012006200441016a22044b0d000c040b0b200820044105746a2101034020012005412010ec08450d01200141206a21012006200441016a22044b0d000b410021070c030b2009417f6a2109200741016a21072006200441016a22044b0d000b0b024020070d00410021070c010b2008200420076b4105746a200820044105746a200620046b41057410ea081a0b200341800f6a20032802c00c2005200c4280f19384eb05200c4280f19384eb05544100200f501b22011b2210200f420020011b2211410010890420032802c00c2101200341f0096a41186a200541186a290000220d370300200341f0096a41106a200541106a2900002212370300200341f0096a41086a200541086a29000022133703002003200529000022143703f009200341d80f6a2011370300200341d00f6a2010370300200341800f6a41086a41093a0000200341800f6a41096a2014370000200341910f6a2013370000200341990f6a2012370000200341a10f6a200d370000200341a90f6a2001290000370000200341b10f6a200141086a290000370000200341b90f6a200141106a290000370000200341c10f6a200141186a290000370000200341123a00800f200341800f6a10fe01200341940f6a200620076bad422086200e843702002003200f20117d200c201054ad7d3703880f2003200c20107d3703800f2003200a36029c0f200320083602900f20032802c802220120032802d002200341800f6a108a040240200e42ffffff3f83500d002008102e0b024020032802cc02450d002001102e0b200341063a00c0110b4200210c20004200370308200020032800800f360019200041186a41003a00002000411c6a200341830f6a2800003600000c010b20032802c01121012000200c370024200041206a2001360000200041186a41003a0000200042003703084201210c0b2000200c3703000c180b200341e4016a41026a200141076a2d00003a0000200341a8026a41086a200141186a290200370300200341a8026a41106a200141206a2902003703002003200141056a2f00003b01e4012003200141106a2902003703a802200141046a2d00002104200141086a28020021052001410c6a2802002101200341800f6a41286a200241286a280200360200200341800f6a41206a200241206a290200370300200341800f6a41186a200241186a290200370300200341800f6a41106a200241106a290200370300200341800f6a41086a200241086a290200370300200320022902003703800f200341c00c6a200341800f6a10c102200341c0076a41086a2202200341c90c6a290000370300200341c0076a41106a2206200341d10c6a290000370300200341c0076a41186a2207200341d90c6a290000370300200320032900c10c3703c007024002400240024020032d00c00c4101460d00200341c0116a41186a2007290300370300200341c0116a41106a2006290300370300200341c0116a41086a2002290300370300200320032903c0073703c011200341800f6a200341c0116a10840420032802800f220620032802880f108f022102024020032802840f450d002006102e0b024020020d00200341d8016a41061083040c020b200341f0096a41026a2206200341e4016a41026a2d00003a0000200341800f6a41086a2202200341a8026a41086a290300370300200341800f6a41106a2207200341a8026a41106a290300370300200320032f01e4013b01f009200320032903a8023703800f02400240024020040e03020100010b2001450d002005102e0b200320032903c00c3703b801200341013a00d8010c030b200341c00c6a410d6a2204200341800f6a410d6a290000370000200341c00c6a41086a22082002290300370300200341b8016a41086a22092008290300370300200341b8016a410d6a22082004290000370000200320032f01f0093b01e801200320032903800f3703b801200320062d00003a00ea01200320032d00ea013a00ca02200320032f01e8013b01c802200320013600cf02200320053600cb02200341c8026a41186a2008290000370000200341c8026a41136a2009290300370000200320032903b8013700d302200341c0076a200341c8026a10d703200341800f6a20032802c007220120032802c80710860420034188026a41086a200229030037030020034188026a41106a200729030037030020034188026a41186a2202200341800f6a41186a290300370300200341bc076a41026a200341a30f6a2d00003a0000200341a00c6a41086a200341b40f6a290200370300200341a00c6a41106a200341bc0f6a290200370300200320032903800f37038802200320032f00a10f3b01bc072003200341ac0f6a2902003703a00c0240024020032d00a00f22044106460d00200341a80f6a2802002109200341a40f6a280200210a200341e8016a41086a220520034188026a41136a290000370300200341e8016a410d6a2002290000370000200341b8076a41026a200341bc076a41026a2d00003a0000200341f0046a41106a200341a00c6a41106a290300370300200341f0046a41086a200341a00c6a41086a290300370300200320032d008a023a008602200320032f0188023b01840220032003290093023703e801200320032f01bc073b01b807200320032903a00c3703f004200328008b022102200328008f022106024020032802c407450d002001102e0b200341c00c6a410d6a2201200341e8016a410d6a290000370000200341c00c6a41086a22072005290300370300200341b4016a220520032d0086023a0000200341f0096a41086a22082007290300370300200341f0096a410d6a22072001290000370000200320032f0184023b01d201200320032903e8013703f009200320032801d0013602b00120032006360097052003200236009305200320052d00003a009205200320032f01b2013b019005200341a3056a2008290300370000200341a8056a2007290000370000200320032903f00937009b05024020044101470d002009450d00200a102e0b20034190056a200341c0116a412010ec08450d01200341d8016a41101083040c040b024020032802c407450d002001102e0b200341d8016a410f1083040c030b200341800f6a200341c8026a10d70320032802800f220120032802880f10ff01024020032802840f450d002001102e0b200341c0076a41186a200341c8026a41186a290300220c370300200341c0076a41106a200341c8026a41106a2903002210370300200341c0076a41086a200341c8026a41086a290300220f370300200341c0076a41286a200341c0116a41086a2903002211370300200341c0076a41306a200341c0116a41106a290300220e370300200341c0076a41386a200341c0116a41186a290300220d370300200320032903c80222123703c007200320032903c01122133703e007200341f0096a41386a2201200d370300200341f0096a41306a2202200e370300200341f0096a41286a22042011370300200341f0096a41206a22082013370300200341f0096a41186a220a200c370300200341f0096a41106a220b2010370300200341f0096a41086a2215200f370300200320123703f009200341a00c6a20034190056a108704200341800f6a20032802a00c220920032802a80c2216108804410021060240024020032802900f22070d004200211141012107410021054200210c420021100c010b20032902940f220c42ffffffff0f832111200c422088a72105200341800f6a41086a29030021102003419c0f6a280200211720032903800f210c0b200341c00c6a41386a2001290300370300200341c00c6a41306a2002290300370300200341c00c6a41286a2004290300370300200341c00c6a41206a2008290300370300200341c00c6a41186a200a290300370300200341c00c6a41106a200b290300370300200341c00c6a41086a2015290300370300200320032903f0093703c00c02402005450d0041002108410021064100210402400340024002402006450d00200720044105746a21012007200420086a4105746a210203402001200341c00c6a412010ec08450d0220022001290000370000200241186a200141186a290000370000200241106a200141106a290000370000200241086a200141086a290000370000200241206a2102200141206a21012005200441016a22044b0d000c040b0b200720044105746a210103402001200341c00c6a412010ec08450d01200141206a21012005200441016a22044b0d000b410021060c030b2008417f6a2108200641016a21062005200441016a22044b0d000b0b024020060d00410021060c010b2007200420066b4105746a200720044105746a200520046b41057410ea081a0b20034190016a200341e00c6a200c4280f19384eb05200c4280f19384eb055441002010501b22011b220f2010420020011b220e10fb01200341d80f6a200e370300200341d00f6a200f370300200341800f6a41086a41083a0000200341890f6a20032903c00c370000200341910f6a200341c00c6a41086a290300370000200341990f6a200341d00c6a290300370000200341a10f6a200341d80c6a290300370000200341a90f6a20032903e00c370000200341b10f6a200341e80c6a290300370000200341b90f6a200341f00c6a290300370000200341c10f6a200341f80c6a290300370000200341123a00800f200341800f6a10fe01200341940f6a200520066bad42208620118437020020032010200e7d200c200f54ad7d3703880f2003200c200f7d3703800f2003201736029c0f200320073602900f20092016200341800f6a108a040240201142ffffff3f83500d002007102e0b024020032802a40c450d002009102e0b200341063a00d8010c030b200341023a00d8010b20044102470d002001450d002005102e0b20032d00d8014106460d0020032802d8012101200020032902dc01370024200041206a2001360000200041186a41003a000020004200370308200042013703000c180b20004200370308200020032800a001360019200041186a41003a00002000411c6a200341a3016a280000360000200042003703000c170b200341a0016a41026a2209200141076a2d00003a0000200341c8026a41086a220a200141186a290200370300200341c8026a41106a220b200141206a2902003703002003200141056a2f00003b01a0012003200141106a2902003703c802200141046a2d00002104200141086a28020021072001410c6a2802002106200341d8016a41026a2001412b6a2d00003a000020034190056a41086a2001413c6a29020037030020034190056a41106a200141c4006a2902003703002003200141296a2f00003b01d8012003200141346a29020037039005200141286a2d000021052001412c6a2802002108200141306a2802002101200341800f6a41286a200241286a280200360200200341800f6a41206a200241206a290200370300200341800f6a41186a200241186a290200370300200341800f6a41106a2215200241106a290200370300200341800f6a41086a2216200241086a290200370300200320022902003703800f200341c00c6a200341800f6a10c102200341c0076a41086a2202200341c90c6a290000370300200341c0076a41106a2217200341d10c6a290000370300200341c0076a41186a2218200341d90c6a290000370300200320032900c10c3703c0070240024002400240024020032d00c00c4101460d00200341f0096a41186a2018290300370300200341f0096a41106a2017290300370300200341f0096a41086a2002290300370300200320032903c0073703f009200341a00c6a41026a20092d00003a0000200320032f01a0013b01a00c2016200a2903003703002015200b290300370300200320032903c8023703800f0240024020040e03030100010b2006450d002007102e0b200320032903c0073703b801200341013a00c0110c020b200341023a00c0110240200541ff01714101470d002001450d002008102e0b20044102470d022006450d022007102e0c020b200341c0076a410d6a2202200341800f6a410d6a290000370000200341c0076a41086a2204200341800f6a41086a290300370300200341b8016a41086a22092004290300370300200341b8016a410d6a22042002290000370000200320032f01a00c3b01e801200320032903800f3703b8012003200341a20c6a2d00003a00ea01200320032d00ea013a00c20c200320032f01e8013b01c00c200320063600c70c200320073600c30c200341d80c6a2004290000370000200341d30c6a2009290300370000200320032903b8013700cb0c200341800f6a200341f0096a10840420032802800f220420032802880f108f022102024020032802840f450d002004102e0b024020020d00200341c0116a41061083040c010b200341c0076a200341c00c6a10d703200341800f6a20032802c007220420032802c80710860420034188026a41086a200341800f6a41086a29030037030020034188026a41106a200341800f6a41106a29030037030020034188026a41186a2206200341800f6a41186a290300370300200341bc076a41026a2207200341a30f6a2d00003a0000200341a00c6a41086a2209200341b40f6a290200370300200341a00c6a41106a220a200341bc0f6a290200370300200320032903800f37038802200320032f00a10f3b01bc072003200341ac0f6a2902003703a00c0240024020032d00a00f22024106460d00200341a80f6a280200210b200341a40f6a2802002115200341e8016a41086a20034188026a41136a290000370300200341f5016a22162006290000370000200341b8076a41026a20072d00003a0000200341f0046a41106a200a290300370300200341f0046a41086a2009290300370300200320032d008a023a008602200320032f0188023b01840220032003290093023703e801200320032f01bc073b01b807200320032903a00c3703f004200328008b022106200328008f022107024020032802c407450d002004102e0b200341a10f6a20032f01b8073b0000200341800f6a41136a200341e8016a41086a290300370000200341980f6a2016290000370000200341a30f6a200341ba076a2d00003a0000200320032d0086023a00820f200320032f0184023b01800f200320073600870f200320063600830f200320032903e80137008b0f200320023a00a00f200341a80f6a200b360200200341a40f6a2015360200200341ac0f6a20032903f004370200200341b40f6a200341f0046a41086a290300370200200341bc0f6a20034180056a290300370200200341800f6a200341f0096a412010ec082104024020024101470d00200b450d002015102e0b20040d01200341a10f6a20032f01d8013b0000200341a80f6a2001360200200341a40f6a2008360200200341ac0f6a200329039005370200200341800f6a41186a200341f0096a41186a290300370300200341800f6a41106a200341f0096a41106a290300370300200341800f6a41086a200341f0096a41086a290300370300200341a30f6a200341da016a2d00003a0000200341b40f6a20034190056a41086a290300370200200341bc0f6a20034190056a41106a290300370200200320032903f0093703800f200320053a00a00f200341c0076a200341c00c6a10d70320032802c007220120032802c807200341800f6a108b04024020032802c407450d002001102e0b024020032d00a00f4101470d0020032802a80f450d0020032802a40f102e0b200341063a00c0110c040b20032802c407450d002004102e0b200341c0116a41101083040b200541ff01714101470d002001450d002008102e0b20032d00c0114106460d0020032802c0112101200020032902c411370024200041206a2001360000200041186a41003a000020004200370308200042013703000c170b20004200370308200020032800a802360019200041186a41003a00002000411c6a200341ab026a280000360000200042003703000c160b200341b0016a41026a2209200141076a2d00003a0000200341c0116a41086a220a200141186a290200370300200341c0116a41106a220b200141206a2902003703002003200141056a2f00003b01b0012003200141106a2902003703c011200141046a2d00002105200141086a28020021072001410c6a2802002106200341d0016a41026a2001412b6a2d00003a0000200341c8026a41086a2001413c6a290200370300200341c8026a41106a200141c4006a2902003703002003200141296a2f00003b01d0012003200141346a2902003703c802200141286a2d000021042001412c6a2802002108200141306a2802002101200341800f6a41286a200241286a280200360200200341800f6a41206a200241206a290200370300200341800f6a41186a200241186a290200370300200341800f6a41106a2215200241106a290200370300200341800f6a41086a2216200241086a290200370300200320022902003703800f200341c00c6a200341800f6a10c102200341c0076a41086a2202200341c90c6a290000370300200341c0076a41106a2217200341d10c6a290000370300200341c0076a41186a2218200341d90c6a290000370300200320032900c10c3703c007024002400240024020032d00c00c4101460d0020034190056a41186a201829030037030020034190056a41106a201729030037030020034190056a41086a2002290300370300200320032903c00737039005200341c0076a41026a20092d00003a0000200320032f01b0013b01c0072016200a2903003703002015200b290300370300200320032903c0113703800f0240024020050e03030100010b2006450d002007102e0b200320032903c00c3703b801200341013a00d8010c020b200341023a00d8010240200441ff01714101470d002001450d002008102e0b20054102470d022006450d022007102e0c020b200341c00c6a410d6a2202200341800f6a410d6a290000370000200341c00c6a41086a2205200341800f6a41086a290300370300200341b8016a41086a22092005290300370300200341b8016a410d6a22052002290000370000200320032f01c0073b01e801200320032903800f3703b8012003200341c2076a2d00003a00ea01200320032d00ea013a00f209200320032f01e8013b01f009200320063600f709200320073600f309200341880a6a2005290000370000200341830a6a2009290300370000200320032903b8013700fb09200341800f6a20034190056a10840420032802800f220520032802880f108f022102024020032802840f450d002005102e0b024020020d00200341d8016a41061083040c010b200341800f6a200341f0096a10d70320032802800f220520032802880f108f022102024020032802840f450d002005102e0b02402002450d00200341d8016a410e1083040c010b200341b8016a41026a220b200341d0016a41026a2d00003a0000200341e8016a41086a2215200341fb096a220241086a290000370300200341e8016a410d6a22162002410d6a290000370000200320032f01d0013b01b801200320032f01f0093b018402200320032d00f2093a008602200320022900003703e801200341c0076a41086a2217200341c8026a41086a290300370300200341c0076a41106a2218200341c8026a41106a290300370300200320032903c8023703c007200341a8026a20034190056a108704200341800f6a20032802a802220a20032802b00222191088040240024020032802900f22020d004200210c410021094101210241002105420021100c010b20032902940f220c422088a72105200ca72109200341800f6a41086a29030021102003419c0f6a280200211a20032903800f210c0b200341cc0c6a2001360200200341c00c6a41086a2008360200200341c00c6a41106a20032903c007370300200341d80c6a2017290300370300200341e00c6a2018290300370300200341ea0c6a20032d0086023a0000200320043a00c40c200320032f01b8013b00c50c2003200b2d00003a00c70c200320032f0184023b01e80c200320034190056a3602c00c200341ef0c6a2006360000200341eb0c6a2007360000200341f30c6a20032903e801370000200341fb0c6a2015290300370000200341800d6a201629000037000002400240024002400240200541e400490d00200341f0046a41011083040c010b200341800f6a20034190056a4280f19384eb05420010c302024020032d00800f22064106470d00200341800f6a41186a20034190056a41186a290300370300200341800f6a41106a20034190056a41106a290300370300200341800f6a41086a20034190056a41086a290300370300200341800f6a41286a200341c00c6a410472220141086a290200370300200341b00f6a200141106a290200370300200341b80f6a200141186a290200370300200341c00f6a200141206a28020036020020032003290390053703800f200320012902003703a00f200341a00c6a200341c00c6a41286a10d70320032802a00c220120032802a80c200341800f6a108b04024020032802a40c450d002001102e0b200341e80c6a2101024020032d00a00f4101470d00200341a80f6a280200450d00200341a40f6a280200102e0b20034188026a41186a2206200141186a220729020037030020034188026a41106a2208200141106a220b29020037030020034188026a41086a2215200141086a22162902003703002003200129020037038802024020052009470d00200941016a22042009490d11200941017422172004201720044b1b22044104200441044b1b220441ffffff3f712004462117200441057421040240024020090d00200341003602800f0c010b200341880f6a4101360200200320023602800f200320094105743602840f0b200341a00c6a20042017200341800f6a107d200341a80c6a2802002104024020032802a00c4101470d0020040d1b0c120b20032802a40c2102200441057621090b200220054105746a2204200329038802370000200441186a2006290300370000200441106a2008290300370000200441086a201529030037000020032802c00c2104200341d80f6a4200370300200341d00f6a4280f19384eb05370300200341800f6a41086a41073a0000200341890f6a2001290000370000200341910f6a2016290000370000200341990f6a200b290000370000200341a10f6a2007290000370000200341a90f6a2004290000370000200341b10f6a200441086a290000370000200341b90f6a200441106a290000370000200341c10f6a200441186a290000370000200341123a00800f200341800f6a10fe01200341063a00f004427f2010200c4280f19384eb057c220f200c542201ad7c221120012011201054200f200c5a1b22011b2110427f200f20011b210c200541016a21050c020b20032d00830f210720032f00810f210b200320032902840f3702f404200320063a00f0042003200b20074110747222063b00f104200320064110763a00f3040b0240200441ff01714101470d002001450d002008102e0b20032d00f0044106470d010b200341940f6a2005ad4220862009ad843702002003200c3703800f2003201a36029c0f200320023602900f200320103703880f0240024020020d00200a201910ff010c010b200a2019200341800f6a108a042002450d00200941ffffff3f71450d002002102e0b200341d8016a41086a200341f0046a41086a280200360200200320032903f0043703d8010c010b200341d8016a41086a200341f0046a41086a280200360200200320032903f0043703d801200941ffffff3f71450d002002102e0b20032802ac02450d01200a102e0c010b200441ff01714101470d002001450d002008102e0b024020032d00d8014106460d0020032802d8012101200020032902dc01370024200041206a2001360000200041186a41003a000020004200370308200042013703000c160b20004200370308200020032800a001360019200041186a41003a00002000411c6a200341a3016a280000360000200042003703000c150b200341b0016a41026a2207200141076a2d00003a0000200341a00c6a41086a2208200141186a290200370300200341a00c6a41106a2209200141206a2902003703002003200141056a2f00003b01b0012003200141106a2902003703a00c2001410c6a2802002104200141086a2802002106200141046a2d0000210520022802282101024002400240024002400240024020022d00000e0400010203020b20022d0001210220012001280200417f6a220a3602000240200a0d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a220a200a280200417f6a220a360200200a0d002001102e0b200241ff0171450d024110102c2202450d17200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1720014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220736020020070d012002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22072007280200417f6a220736020020070d012002102e0c010b200241046a2d0000210a200241086a280200210b2002410c6a280200211520012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0240200a41ff01710d00200b41017420154b0d020b4110102c2202450d16200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1620014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220736020020070d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22072007280200417f6a220736020020070d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b4102210120054102470d012004450d012006102e0c010b200341f0096a41026a20072d00003a0000200341800f6a41086a2008290300370300200341800f6a41106a2009290300370300200320032f01b0013b01f009200320032903a00c3703800f4101210102400240024020050e03000201020b200341c0076a41026a200341f0096a41026a2d00003a0000200341c00c6a41086a200341800f6a41086a290300370300200341c00c6a410d6a200341800f6a410d6a290000370000200320032f01f0093b01c007200320032903800f3703c00c410021010c010b2004450d002006102e0b2003419b026a200341c00c6a41086a29030037000020034188026a41186a2202200341cd0c6a290000370000200320032f01c0073b0188022003200436008f022003200636008b02200320032903c00c370093022003200341c2076a2d00003a008a02024020010d00200341c0116a41186a2002290300370300200341c0116a41106a20034188026a41106a290300370300200341c0116a41086a20034188026a41086a29030037030020032003290388023703c011200341c00c6a200341c0116a108704200341800f6a20032802c00c220220032802c80c22041088040240024020032802900f22010d00410121050c010b2002200410ff01200121050b20032903800f211020032902940f210c200341880f6a2903002111024020032802c40c450d002002102e0b200341b8016a200341c0116a108404200341800f6a20032802b801220220032802c0012206108504024020032d00a411220741024622040d002002200610ff010b200c420020011b210f20034190056a200341800f6a41a40210e9081a200341f0046a41176a2206200341bc116a280000360000200341f0046a41106a2208200341b5116a290000370300200341f0046a41086a2209200341ad116a290000370300200320032900a5113703f004024020040d00200341c8026a20034190056a41a40210e9081a200341a8026a41176a2006280000360000200341a8026a41106a2008290300370300200341a8026a41086a2009290300370300200320032903f0043703a802024020032802bc01450d002002102e0b2010420020011b210e2011420020011b210d200341f0096a41066a200341c8026a41a40210e9081a200341c0076a200341f0096a41aa0210e9081a20034188026a41176a2201200341a8026a41176a28000036000020034188026a41106a2202200341a8026a41106a29030037030020034188026a41086a2204200341a8026a41086a290300370300200320032903a80237038802200341c00c6a200341c0076a41066a41a40210e9081a200341c00c6a41a4026a20073a0000200341e50e6a200329038802370000200341ed0e6a2004290300370000200341f50e6a2002290300370000200341fc0e6a2001280000360000200341c00c6a41086a290300211220032903c00c211120032802d00c210602400240200341d80c6a280200220741057422020d004200210c420021100c010b200641106a21014200210c420021100340200141086a2903004200200141786a29030042015122041b20107c2001290300420020041b2210200c7c220c201054ad7c2110200141206a2101200241606a22020d000b0b2012200d7c2011200e7c220e201154ad7c20107c200e200c7c220d200e54ad7c210e0240200f4220882212a72201450d0020014105742102200521010340200341800f6a200110d70320032802800f220420032802880f10ff01024020032802840f450d002004102e0b200141206a2101200241606a22020d000b0b200341f0006a200341c0116a200d200e10cb022003290370210c2003200341f0006a41086a29030022103703880f2003200c3703800f200c2010844200520d032003200341800f6a3602f009200341f0096a10cc020c040b024020032802bc01450d002002102e0b200341800f6a4103108304200320032900810f3703e8012003200341880f6a2800003600ef0120032d00800f2101200f42ffffff3f83500d012005102e0c010b410121010b200320032800a0013602d001200320032903e8013703d801200320032800ef013600df012003200341a3016a2800003600d301200041186a41003a000020004200370308200020032802d0013600192000411c6a20032800d301360000200041206a20013a0000200020032903d801370021200041286a20032800df01360000200042013703000c160b200342f0f2bda1a7ee9cb9f9003703f009200341800f6a200341f0096a10cd02200341e0006a200341800f6a200c201010fd01200341800a6a200341e0006a41086a290300221320107d20032903602211200c54ad7d201020137d200c201154ad7d2011200c56201320105620132010511b22011b37030020032011200c7d200c20117d20011b3703f80920032001ad3703f009200341f0096a41086a21020240024020010d00200320023602c007200341c0076a10cc020c010b200320023602c007200341c0076a10ce020b200341980f6a2010370300200341900f6a200c370300200341880f6a41063a00002003410e3a00800f200341800f6a10fe010b200341b80f6a200e370300200341b00f6a200d370300200341800f6a41086a41023a0000200341890f6a20032903c011370000200341910f6a200341c0116a41086a290300370000200341990f6a200341d0116a290300370000200341a10f6a200341d8116a290300370000200341123a00800f200341800f6a10fe012007ad42e0d4037e201242f0fb8d017e7c200341e40c6a35020042e8077e7c20124280c2d72f7e7c210c200341dc0c6a21010240200341d40c6a28020041ffffff3f71450d002006102e0b200c4288babcd6017c210c200110e3030240200f42ffffff3f83500d002005102e0b200320032800a0013602d0012003200341a3016a2800003600d301200041186a41003a0000200041106a200c37030020004201370308200020032802d0013600192000411c6a20032800d301360000200042003703000c140b200141c0006a2903002110200141386a290300210f200141306a290300210c200141046a280200211741022104200341bc076a41026a22072001410b6a2d00003a0000200341b8016a41086a22082001411c6a290200370300200341b8016a41106a2209200141246a2902003703002003200141096a2f00003b01bc072003200141146a2902003703b801200141086a2d000021052001410c6a2802002106200141106a2802002101200341800f6a41286a200241286a280200360200200341800f6a41206a200241206a290200370300200341800f6a41186a200241186a290200370300200341800f6a41106a220a200241106a290200370300200341800f6a41086a220b200241086a290200370300200320022902003703800f200341c00c6a200341800f6a10c102200341e8016a41086a2215200341c00c6a41146a290200370300200341f5016a2216200341d90c6a290000370000200320032f00c10c3b018402200320032d00c30c3a0086022003200341c00c6a410c6a2902003703e80141012102024002400240024002400240024002400240024020032d00c00c4101460d00200341c00c6a41086a280200210420032802c40c2118200341a00c6a41136a2015290300370000200341a00c6a41186a2016290000370000200320032d0086023a00a20c200320032f0184023b01a00c200320043600a70c200320183600a30c200320032903e8013700ab0c200341f0096a41026a20072d00003a0000200320032f01bc073b01f009200b2008290300370300200a2009290300370300200320032903b8013703800f02400240024020050e03000201020b200341c0076a41026a200341f0096a41026a2d00003a0000200341c00c6a41086a200341800f6a41086a290300370300200341c00c6a410d6a200341800f6a410d6a290000370000200320032f01f0093b01c007200320032903800f3703c00c410021020c010b2001450d002006102e0b20034188026a41136a200341c00c6a41086a29030037000020034188026a41186a2204200341cd0c6a290000370000200320032f01c0073b0188022003200136008f022003200636008b02200320032903c00c370093022003200341c2076a2d00003a008a0220020d02200341c0116a41186a2004290300370300200341c0116a41106a20034188026a41106a290300370300200341c0116a41086a20034188026a41086a29030037030020032003290388023703c011200c4201520d01200341800f6a4109108304200320032900810f3703d8012003200341880f6a2800003600df0120032d00800f21040c030b20054102470d022001450d022006102e0c020b200341c00c6a10810420032802c00c210102400240024020032802c80c20174d0d00200120174106746a22022903004201520d00200241206a200341a00c6a412010ec080d00024020032802c40c41ffffff1f71450d002001102e0b200341e8016a200341c0116a108404200341800f6a20032802e801220120032802f00110850420034190056a200341800f6a41a40210e9081a200341f0046a41086a2202200341ad116a290000370300200341f0046a41106a2204200341b5116a290000370300200341f0046a41176a2205200341bc116a280000360000200320032900a5113703f004024020032d00a41122064102460d00200341c8026a20034190056a41a40210e9081a200341a8026a41176a2005280000360000200341a8026a41106a2004290300370300200341a8026a41086a2002290300370300200320032903f0043703a802024020032802ec01450d002001102e0b200341f0096a41066a200341c8026a41a40210e9081a200341c0076a200341f0096a41aa0210e9081a20034188026a41176a2201200341a8026a41176a28000036000020034188026a41106a2202200341a8026a41106a29030037030020034188026a41086a2204200341a8026a41086a290300370300200320032903a80237038802200341c00c6a200341c0076a41066a41a40210e9081a200341c00c6a41a4026a20063a0000200341e50e6a200329038802370000200341ed0e6a2004290300370000200341f50e6a2002290300370000200341fc0e6a20012800003600004100210120032802d00c2106200341c00c6a41186a28020022070e020803020b024020032802ec01450d002001102e0b200341800f6a410b108304200320032900810f3703d8012003200341880f6a2800003600df0120032d00800f21040c040b200341800f6a410a108304200320032900810f3703d8012003200341880f6a2800003600df0120032d00800f210420032802c40c41ffffff1f71450d032001102e0c030b4100210120072102034020012002410176220420016a2205200620054105746a28020020174b1b2101200220046b220241014b0d000c040b0b4100210120062102200628020022042017470d030c060b410121040b200320032800d0013602b001200320032903d8013703a001200320032800df013600a7012003200341d3016a2800003600b301200041186a41003a000020004200370308200020032802b0013600192000411c6a20032800b301360000200041206a20043a0000200020032903a001370021200041286a20032800a701360000200042013703000c190b200620014105746a220228020022042017460d020b200120042017496a21010b200341800f6a41186a2010370300200341800f6a41106a200f3703002003200c3703880f200320173602800f200341c00c6a41106a2001200341800f6a10ba0120032802d80c21070c020b200720014b0d00200120074180afc400103c000b200620014105746a220141086a2104024020012903084201520d00200341800f6a200341c0116a200341a00c6a200141106a290300200141186a29030041001089040b2004200c37030020022017360200200141186a2010370300200141106a200f3703000b200341e40c6a350200210c200341800f6a200341c00c6a41c00210e9081a200341c0076a200341c0116a10840420032802c807210220032802c0072101200341003602f809200342013703f009200341800f6a200341f0096a10e9032001200220032802f009220420032802f80910b201024020032802f409450d002004102e0b024020032802c407450d002001102e0b0240200341940f6a28020041ffffff3f71450d0020032802900f102e0b200341800f6a411c6a10e303200341800f6a41086a41053a0000200341890f6a20032903c011370000200341910f6a200341c0116a41086a290300370000200341990f6a200341c0116a41106a290300370000200341a10f6a200341c0116a41186a290300370000200341ac0f6a2017360200200341123a00800f200341800f6a10fe01200320032800d0013602b0012003200341d3016a2800003600b301200041186a41003a0000200041106a2007ad42c08b117e200c42e8fcd6007e7c42a8d793d9007c37030020004201370308200020032802b0013600192000411c6a20032800b301360000200042003703000c130b200141086a290300210c200141046a2802002104200341800f6a41286a200241286a280200360200200341800f6a41206a200241206a290200370300200341800f6a41186a200241186a290200370300200341800f6a41106a200241106a290200370300200341800f6a41086a200241086a290200370300200320022902003703800f200341c00c6a200341800f6a10c102200341e8016a41086a2201200341d40c6a290200370300200341f5016a2202200341d90c6a290000370000200320032f00c10c3b018402200320032d00c30c3a0086022003200341cc0c6a2902003703e8010240024020032d00c00c4101460d00200341c00c6a41086a280200210520032802c40c2106200341830a6a2001290300370000200341f0096a41186a2002290000370000200320032d0086023a00f209200320032f0184023b01f009200320053600f709200320063600f309200320032903e8013700fb09200341c0076a1081040240024020032802c807220120044d0d0020032802c007220520044106746a22022903004201520d00200241206a200341f0096a412010ec080d00200520044106746a200c370318410021020c010b200341800f6a410a108304024020032d00800f22024106470d00410021020c010b20032902840f210c20032f00810f20032d00830f411074724108742002722101410121020b200341c00c6a41086a200341c0076a41086a280200360200200320032903c00722103703c00c024002402010a722040d00200341a0026a2204420037030020034198026a2205420037030020034188026a41086a220642003703002003420037038802200341800f6a4188fec60041081081022006200341800f6a41086a2207290000370300200320032900800f37038802200341800f6a41b0afc300410a10810220042007290000370300200520032900800f37030020034188026a412010ff010c010b200341a0026a2205420037030020034198026a2206420037030020034188026a41086a220742003703002003420037038802200341800f6a4188fec60041081081022007200341800f6a41086a2208290000370300200320032900800f37038802200341800f6a41b0afc300410a10810220052008290000370300200620032900800f37030020034188026a200341c00c6a10820420032802c40c41ffffff1f71450d002004102e0b20020d0120032003280090053602c802200320034193056a2800003600cb02200041186a41003a0000200041106a2001ad42f0f5127e4290ddb83f7c37030020004201370308200020032802c8023600192000411c6a20032800cb02360000200042003703000c140b410221010b20032003280090053602c802200320034193056a2800003600cb02200041186a41003a000020004200370308200020032802c8023600192000411c6a20032800cb02360000200041246a200c370200200041206a2001360200200042013703000c120b200141246a280200210541022104200341a00c6a41026a2206200141036a2d00003a0000200341c0076a41086a2207200141146a290000370300200341c0076a410d6a2208200141196a290000370000200320012f00013b01a00c20032001410c6a2900003703c007200141046a2800002109200141086a280000210a200341800f6a41286a200241286a280200360200200341800f6a41206a200241206a290200370300200341800f6a41186a200241186a290200370300200341800f6a41106a200241106a290200370300200341800f6a41086a200241086a290200370300200320022902003703800f200341c00c6a200341800f6a10c102200341b8016a41086a2201200341c00c6a41146a290200370300200341b8016a410d6a2202200341c00c6a41196a290000370000200320032f00c10c3b01e801200320032d00c30c3a00ea012003200341c00c6a410c6a2902003703b8010240024020032d00c00c4101460d00200341c00c6a41086a280200210420032802c40c210b200341830a6a2001290300370000200341f0096a41186a2002290000370000200320032d00ea013a00f209200320032f01e8013b01f009200320043600f7092003200b3600f309200320032903b8013700fb0920034190056a108104200341e8016a41086a2007290300370300200341e8016a410d6a2008290000370000200320032f01a00c3b018402200320062d00003a008602200320032903c0073703e80102400240200328029805220420054d0d0020032802900520054106746a22012903004201520d002003419b026a200341e8016a41086a29030037000020034188026a41186a2202200341f5016a290000370000200320032d0086023a008a02200320032f0184023b0188022003200a36008f022003200936008b02200320032903e80137009302200141206a2201200341f0096a412010ec080d002001200329038802370200200141186a2002290300370200200141106a20034188026a41106a290300370200200141086a20034188026a41086a290300370200410021010c010b200341800f6a410a108304024020032d00800f22014106470d00410021010c010b20032902840f210c20032f00810f20032d00830f411074724108742001722104410121010b200341c00c6a41086a20034190056a41086a280200360200200320032903900522103703c00c024002402010a722020d00200341a0026a2202420037030020034198026a2205420037030020034188026a41086a220642003703002003420037038802200341800f6a4188fec60041081081022006200341800f6a41086a2207290000370300200320032900800f37038802200341800f6a41b0afc300410a10810220022007290000370300200520032900800f37030020034188026a412010ff010c010b200341a0026a2205420037030020034198026a2206420037030020034188026a41086a220742003703002003420037038802200341800f6a4188fec60041081081022007200341800f6a41086a2208290000370300200320032900800f37038802200341800f6a41b0afc300410a10810220052008290000370300200620032900800f37030020034188026a200341c00c6a10820420032802c40c41ffffff1f71450d002002102e0b20010d01200320032800c8023602c0112003200341cb026a2800003600c311200041186a41003a0000200041106a2004ad42f89c137e42a8adef3f7c37030020004201370308200020032802c0113600192000411c6a20032800c311360000200042003703000c130b0b200320032800c8023602c0112003200341cb026a2800003600c311200041186a41003a000020004200370308200020032802c0113600192000411c6a20032800c311360000200041246a200c370200200041206a2004360200200042013703000c110b200141106a290300210c200141086a2903002110200141046a2802002104200341800f6a41286a200241286a280200360200200341800f6a41206a200241206a290200370300200341800f6a41186a200241186a290200370300200341800f6a41106a200241106a290200370300200341800f6a41086a200241086a290200370300200320022902003703800f200341c00c6a200341800f6a10c102200341e8016a41086a2201200341d40c6a290200370300200341f5016a2202200341d90c6a290000370000200320032f00c10c3b018402200320032d00c30c3a0086022003200341cc0c6a2902003703e8010240024020032d00c00c4101460d00200341c00c6a41086a280200210520032802c40c2106200341830a6a2001290300370000200341f0096a41186a2002290000370000200320032d0086023a00f209200320032f0184023b01f009200320053600f709200320063600f309200320032903e8013700fb09200341c0076a1081040240024020032802c807220120044d0d0020032802c00720044106746a22022903004201520d00200241206a200341f0096a412010ec080d00200241086a220220103703002002200c370308410021020c010b200341800f6a410a108304024020032d00800f22024106470d00410021020c010b20032902840f210c20032f00810f20032d00830f411074724108742002722101410121020b200341c00c6a41086a200341c0076a41086a280200360200200320032903c00722103703c00c024002402010a722040d00200341a0026a2204420037030020034198026a2205420037030020034188026a41086a220642003703002003420037038802200341800f6a4188fec60041081081022006200341800f6a41086a2207290000370300200320032900800f37038802200341800f6a41b0afc300410a10810220042007290000370300200520032900800f37030020034188026a412010ff010c010b200341a0026a2205420037030020034198026a2206420037030020034188026a41086a220742003703002003420037038802200341800f6a4188fec60041081081022007200341800f6a41086a2208290000370300200320032900800f37038802200341800f6a41b0afc300410a10810220052008290000370300200620032900800f37030020034188026a200341c00c6a10820420032802c40c41ffffff1f71450d002004102e0b20020d0120032003280090053602c802200320034193056a2800003600cb02200041186a41003a0000200041106a2001ad42a0e6127e42e0efb73f7c37030020004201370308200020032802c8023600192000411c6a20032800cb02360000200042003703000c120b410221010b20032003280090053602c802200320034193056a2800003600cb02200041186a41003a000020004200370308200020032802c8023600192000411c6a20032800cb02360000200041246a200c370200200041206a2001360200200042013703000c100b200141046a2802002106200341800f6a41286a200241286a280200360200200341800f6a41206a200241206a290200370300200341800f6a41186a200241186a290200370300200341800f6a41106a200241106a290200370300200341800f6a41086a200241086a290200370300200320022902003703800f200341c00c6a200341800f6a10c10220034188026a41086a2201200341c90c6a29000037030020034188026a41106a2202200341d10c6a29000037030020034188026a41186a2204200341d90c6a290000370300200320032900c10c3703880202400240024002400240024002400240024020032d00c00c4101460d00200341c0116a41186a2004290300370300200341c0116a41106a2002290300370300200341c0116a41086a200129030037030020032003290388023703c011200341a00c6a200341c0116a108404200341800f6a20032802a00c220120032802a80c10850420034190056a200341800f6a41a40210e9081a200341f0046a41086a200341ad116a290000370300200341f0046a41106a200341b5116a290000370300200341f0046a41176a2202200341bc116a280000360000200320032900a5113703f004024020032d00a41122044102460d00200341c8026a20034190056a41a40210e9081a200341a8026a41176a2002280000360000200341a8026a41106a2202200341f0046a41106a290300370300200341a8026a41086a2205200341f0046a41086a290300370300200320032903f0043703a802024020032802a40c450d002001102e0b200341f0096a41066a200341c8026a41a40210e9081a200341c0076a200341f0096a41aa0210e9081a20034188026a41176a2201200341a8026a41176a28000036000020034188026a41106a2207200229030037030020034188026a41086a22022005290300370300200320032903a80237038802200341c00c6a200341c0076a41066a41a40210e9081a200341c00c6a41a4026a20043a0000200341e50e6a200329038802370000200341ed0e6a2002290300370000200341f50e6a2007290300370000200341fc0e6a200128000036000020032802d00c2107200341d80c6a28020022080e020403020b024020032802a40c450d002001102e0b200341800f6a4106108304200320032900810f3703b8012003200341880f6a2800003600bf0120032d00800f21010c070b410221010c060b4100210120082102034020012002410176220420016a2205200720054105746a28020020064b1b2101200220046b220241014b0d000b200720014105746a2802002006470d01200820014d0d020c030b4100210120072802002006460d020b200341800f6a4102108304200320032900810f3703b8012003200341880f6a2800003600bf010c020b200120081046000b200720014105746a220241186a2903002110200241106a290300210f2002290308210c2002200241206a20082001417f736a41057410ea081a20032008417f6a22013602d80c200c4201510d02200341800f6a4108108304200320032900810f3703b8012003200341800f6a41086a2800003600bf010b20032d00800f21010240200341d40c6a28020041ffffff3f71450d002007102e0b200341dc0c6a10e3030b200320032800d8013602a001200320032903b8013703e801200320032800bf013600ef012003200341db016a2800003600a301200041186a41003a000020004200370308200020032802a0013600192000411c6a20032800a301360000200041206a20013a0000200020032903e801370021200041286a20032800ef01360000200042013703000c100b200341d0006a200341c0116a200f201010fb01200341e40c6a350200210c200341800f6a200341c00c6a41c00210e9081a200341c0076a200341c0116a10840420032802c807210420032802c0072102200341003602f809200342013703f009200341800f6a200341f0096a10e9032002200420032802f009220520032802f80910b201024020032802f409450d002005102e0b024020032802c407450d002002102e0b0240200341940f6a28020041ffffff3f71450d0020032802900f102e0b200341800f6a411c6a10e303200341800f6a41086a41043a0000200341890f6a20032903c011370000200341910f6a200341c0116a41086a290300370000200341990f6a200341c0116a41106a290300370000200341a10f6a200341c0116a41186a290300370000200341ac0f6a2006360200200341123a00800f200341800f6a10fe01200320032800d8013602a0012003200341db016a2800003600a301200041186a41003a0000200041106a2001ad4288800d7e200c42c0b6d6007e7c42e8dfb4d4007c37030020004201370308200020032802a0013600192000411c6a20032800a301360000200042003703000c0f0b200141106a290300210c200141086a2903002110200141046a2802002101200341800f6a41286a200241286a280200360200200341800f6a41206a200241206a290200370300200341800f6a41186a200241186a290200370300200341800f6a41106a200241106a290200370300200341800f6a41086a200241086a290200370300200320022902003703800f200341c00c6a200341800f6a10c10220034188026a41086a2202200341c90c6a29000037030020034188026a41106a2204200341d10c6a29000037030020034188026a41186a2205200341d90c6a290000370300200320032900c10c37038802024002400240024002400240024002400240024002400240024020032d00c00c4101460d00200341c0116a41186a2005290300370300200341c0116a41106a2004290300370300200341c0116a41086a200229030037030020032003290388023703c011200341b8016a10810420032802b801210420032802c00120014d0d01200420014106746a22022903004201520d0102402002290308201056200241106a2903002210200c562010200c511b450d00200341800f6a410510830420032f00810f20032d00830f4110747221010c0b0b200341a00c6a200341c0116a108404200341800f6a20032802a00c220520032802a80c10850420034190056a200341800f6a41a40210e9081a200341f0046a41086a200341ad116a290000370300200341f0046a41106a200341b5116a290000370300200341f0046a41176a2206200341bc116a280000360000200320032900a5113703f00402400240024020032d00a41122074102460d00200241086a2109200341c8026a20034190056a41a40210e9081a200341a8026a41176a2006280000360000200341a8026a41106a2202200341f0046a41106a290300370300200341a8026a41086a2206200341f0046a41086a290300370300200320032903f0043703a802024020032802a40c450d002005102e0b200341f0096a41066a200341c8026a41a40210e9081a200341c0076a200341f0096a41aa0210e9081a20034188026a41176a2205200341a8026a41176a28000036000020034188026a41106a2208200229030037030020034188026a41086a22022006290300370300200320032903a80237038802200341c00c6a200341c0076a41066a41a40210e9081a200341c00c6a41a4026a20073a0000200341e50e6a200329038802370000200341ed0e6a2002290300370000200341f50e6a2008290300370000200341fc0e6a2005280000360000200941086a290300210c200929030021104100210220032802d00c2108200341c00c6a41186a280200220a0e020702010b024020032802a40c450d002005102e0b200341800f6a410610830420032f00810f20032d00830f4110747221010c0c0b41002102200a2105034020022005410176220620026a2207200820074105746a28020020014b1b2102200520066b220541014b0d000c040b0b4100210220082106200828020022052001470d030c060b410221020c0b0b200341800f6a410410830420032f00810f20032d00830f4110747221010c080b200820024105746a220628020022052001460d020b200220052001496a21020b200341800f6a41186a200c370300200341900f6a2010370300200342013703880f200320013602800f200341c00c6a41106a2002200341800f6a10ba010c020b200a20024b0d002002200a41f0aec400103c000b02400240200820024105746a2202280208417f6a0e06000101010100010b200341800f6a410710830420032f00810f20032d00830f41107472210120032902840f210c20032d00800f21020c020b200241086a420137030020062001360200200241186a200c370300200241106a20103703000b200341800f6a200341c0116a2009290300200941086a29030010c30220032d00800f22024106460d0120032f00810f20032d00830f41107472210120032902840f210c0b0240200341d40c6a28020041ffffff3f71450d0020032802d00c102e0b200341dc0c6a10e3030c020b200341e40c6a350200210c20033502d80c2110200341800f6a200341c00c6a41c00210e9081a200341c0076a200341c0116a10840420032802c807210520032802c0072102200341003602f809200342013703f009200341800f6a200341f0096a10e9032002200520032802f009220620032802f80910b201024020032802f409450d002006102e0b024020032802c407450d002002102e0b0240200341940f6a28020041ffffff3f71450d0020032802900f102e0b200341800f6a411c6a10e303200341800f6a41086a41033a0000200341890f6a20032903c011370000200341910f6a200341c0116a41086a290300370000200341990f6a200341c0116a41106a290300370000200341a10f6a200341c0116a41186a290300370000200341ac0f6a2001360200200341123a00800f201042e0a4137e200c4290c3d7007e7c42c8a3e7e2007c210c200341800f6a10fe01024020032802bc0141ffffff1f71450d002004102e0b200320032800e8013602d8012003200341e8016a41036a2800003600db01200041186a41003a0000200041106a200c37030020004201370308200020032802d8013600192000411c6a20032800db01360000200042003703000c110b20032902840f210c20032d00800f21020b20032802bc0141ffffff1f71450d002004102e0b200320032800e8013602d8012003200341eb016a2800003600db01200041236a20014110763a0000200020013b0021200041186a41003a000020004200370308200020032802d8013600192000411c6a20032800db013600002000200c370024200041206a20023a0000200042013703000c0e0b200341800f6a41286a200241286a280200360200200341800f6a41206a200241206a290200370300200341800f6a41186a200241186a290200370300200341800f6a41106a200241106a290200370300200341800f6a41086a200241086a290200370300200320022902003703800f200341c00c6a200341800f6a10c10220034188026a41086a2201200341c90c6a29000037030020034188026a41106a2202200341d10c6a29000037030020034188026a41186a2204200341d90c6a290000370300200320032900c10c37038802410121050240024020032d00c00c4101460d00200341c0116a41186a2004290300370300200341c0116a41106a2002290300370300200341c0116a41086a200129030037030020032003290388023703c011200341c00c6a200341c0116a108704200341800f6a20032802c00c220220032802c80c2204108804024020032802900f2201450d002002200410ff01200121050b20032903800f211020032902940f210c200341880f6a2903002111024020032802c40c450d002002102e0b200341a00c6a200341c0116a108404200341800f6a20032802a00c220220032802a80c2206108504024020032d00a411220741024622040d002002200610ff010b200c420020011b210f20034190056a200341800f6a41a40210e9081a200341f0046a41176a2206200341bc116a280000360000200341f0046a41106a2208200341b5116a290000370300200341f0046a41086a2209200341ad116a290000370300200320032900a5113703f004024020040d00200341c8026a20034190056a41a40210e9081a200341a8026a41176a2006280000360000200341a8026a41106a2008290300370300200341a8026a41086a2009290300370300200320032903f0043703a802024020032802a40c450d002002102e0b2010420020011b210e2011420020011b210d200341f0096a41066a200341c8026a41a40210e9081a200341c0076a200341f0096a41aa0210e9081a20034188026a41176a2201200341a8026a41176a28000036000020034188026a41106a2202200341a8026a41106a29030037030020034188026a41086a2204200341a8026a41086a290300370300200320032903a80237038802200341c00c6a200341c0076a41066a41a40210e9081a200341c00c6a41a4026a20073a0000200341e50e6a200329038802370000200341ed0e6a2004290300370000200341f50e6a2002290300370000200341fc0e6a2001280000360000200341c00c6a41086a290300211220032903c00c211120032802d00c210602400240200341d80c6a280200220741057422020d004200210c420021100c010b200641106a21014200210c420021100340200141086a2903004200200141786a29030042015122041b20107c2001290300420020041b2210200c7c220c201054ad7c2110200141206a2101200241606a22020d000b0b2012200d7c2011200e7c220e201154ad7c20107c200e200c7c220c200e54ad7c21100240200f4220882211a72201450d0020014105742102200521010340200341800f6a200110d70320032802800f220420032802880f10ff01024020032802840f450d002004102e0b200141206a2101200241606a22020d000b0b200341c0006a200341c0116a200c201010fb01200341b80f6a2010370300200341b00f6a200c370300200341800f6a41086a41013a0000200341890f6a20032903c011370000200341910f6a200341c0116a41086a290300370000200341990f6a200341d0116a290300370000200341a10f6a200341d8116a290300370000200341123a00800f200341800f6a10fe012007ad42a084097e201142b0ba8e017e7c200341e40c6a35020042d8ac2d7e7c20114280c2d72f7e7c210c200341dc0c6a21010240200341d40c6a28020041ffffff3f71450d002006102e0b200c42d0faca90017c210c200110e3030240200f42ffffff3f83500d002005102e0b200320032800d8013602a0012003200341db016a2800003600a301200041186a41003a0000200041106a200c37030020004201370308200020032802a0013600192000411c6a20032800a301360000200042003703000c100b024020032802a40c450d002002102e0b200341800f6a4103108304200320032900810f3703b8012003200341880f6a2800003600bf0120032d00800f2101200f42ffffff3f83500d012005102e0c010b410221010b200320032800d8013602a001200320032903b8013703e801200320032800bf013600ef012003200341db016a2800003600a301200041186a41003a000020004200370308200020032802a0013600192000411c6a20032800a301360000200041206a20013a0000200020032903e801370021200041286a20032800ef01360000200042013703000c0d0b2001410c6a2802002107200141086a2802002108200141046a280200211b200341800f6a41286a200241286a280200360200200341800f6a41206a200241206a290200370300200341800f6a41186a200241186a290200370300200341800f6a41106a200241106a290200370300200341800f6a41086a200241086a290200370300200320022902003703800f200341c00c6a200341800f6a10c102200341b8016a41086a2201200341d40c6a290200370300200341c5016a2202200341d90c6a290000370000200320032f00c10c3b01e801200320032d00c30c3a00ea012003200341c00c6a410c6a2902003703b801024020032d00c00c4101460d00200341c00c6a41086a280200210420032802c40c2105200341d3076a2001290300370000200341c0076a41186a2002290000370000200320032d00ea013a00c207200320032f01e8013b01c007200320043600c707200320053600c307200320032903b8013700cb07200341800f6a200341c0076a10840420032802800f220220032802880f108f022101024020032802840f450d002002102e0b024020010d00200341800f6a410210830420032f00810f20032d00830f4110747221040c040b0240200741e500490d00200341800f6a410110830420032f00810f20032d00830f4110747221040c040b200341c00c6a200341c0076a108704200341800f6a20032802c00c220120032802c80c108804200341800f6a41086a290300210f20032802900f211c20032903800f211020032902940f210c024020032802c40c450d002001102e0b200c4200201c1b210d201c4101201c1b211d200341306a2007ad42004280f19384eb05420010e808200341306a41086a29030021112003290330210e0240200741c4006c2205450d00200341ac0f6a2101200341a10f6a2104200341800f6a410b6a210a20034188026a410b6a210b201b21020340200341c00c6a200210d703200341800f6a20032802c00c220920032802c80c10860420034188026a41086a200341800f6a41086a29030037030020034188026a41106a200341800f6a41106a29030037030020034188026a41186a200341800f6a41186a290300370300200341bc076a41026a2215200441026a22162d00003a0000200341a00c6a41086a2217200141086a2218290000370300200341a00c6a41106a2219200141106a221a290000370300200320032903800f37038802200320042f00003b01bc07200320012900003703a00c0240024020032d00a00f22064106460d0020032802a80f211e20032802a40f211f200341e8016a41086a2220200b41086a290000370300200341e8016a410d6a2221200b410d6a290000370000200341b8076a41026a222220152d00003a0000200341f0046a41106a22152019290300370300200341f0046a41086a22192017290300370300200320032d008a023a008602200320032f0188023b018402200320032f01bc073b01b807200320032903a00c3703f0042003200b2900003703e801200328008b022117200328008f022123024020032802c40c450d002009102e0b200a20032903e801370000200420032f01b8073b0000200a41086a2020290300370000200a410d6a2021290000370000201620222d00003a0000200320032d0086023a00820f200320032f0184023b01800f200320233600870f200320173600830f200320063a00a00f200120032903f00437000020182019290300370000201a20152903003700002003201e3602a80f2003201f3602a40f200341800f6a200341c0076a412010ec082109024020064101470d00201e450d00201f102e0b2009450d01200341800f6a410e10830420032f00810f20032d00830f41107472210420032902840f210c20032d00800f21050c060b20032802c40c450d002009102e0b200241c4006a2102200541bc7f6a22050d000b0b0240024020104200201c1b2210200e5a200f4200201c1b220c20115a200c20115122011b0d00200341800f6a200341c0076a200e20107d2011200c7d200e201054ad7d10c30220032d00800f22054106460d0120032f00810f20032d00830f41107472210420032902840f210c0c040b2010200e58200c20115820011b0d00200341206a200341c0076a2010200e7d200c20117d2010200e54ad7d10fb010b0240200d4220882212a72201450d0020014105742102201d21010340200341800f6a200110d70320032802800f220420032802880f10ff01024020032802840f450d002004102e0b200141206a2101200241606a22020d000b0b200741c4006c220441c4006d220141ffffff3f712001470d0120014105742202417f4c0d010240024020020d00410121240c010b2002102c2224450d0b0b02400240024002402002410576222520014f0d00200241047622052001200520014b1b22054104200541044b1b220541ffffff3f712005462106200541057421050240024020020d00200341003602800f0c010b200341880f6a4101360200200320023602840f200320243602800f0b200341c00c6a20052006200341800f6a107d200341c80c6a280200210220032802c00c4101460d0120032802c40c2124200241057621250b201b20046a2226201b470d0141002106201b21050c020b20020d0c0c030b2007410274417c6a41027641016a2127200341800f6a41216a210441002106200341c00c6a411f6a2107201b21012024210202400340200141186a290200210c200141176a2d00002109200141166a2d0000210a200141146a2f0100210b200141136a2d00002115200141126a2d00002116200141106a2f010021172001410f6a2d000021182001410e6a2d000021192001410c6a2f0100211a2001410b6a2d0000211e2001410a6a2d0000211f200141086a2f01002120200141076a2d00002121200141066a2d00002122200141046a2f01002123200141036a2d0000211c200141026a2d00002128200141206a2d0000210520012f010021292007200141c0006a280000360000200341c00c6a41186a222a200141396a290000370300200341c00c6a41106a222b200141316a290000370300200341c00c6a41086a222c200141296a2900003703002003200141216a2900003703c00c024020054106470d00200141c4006a21050c020b2003200c3703880a200320093a00870a2003200a3a00860a2003200b3b01840a200320153a00830a200320163a00820a200320173b01800a200320183a00ff09200320193a00fe092003201a3b01fc092003201e3a00fb092003201f3a00fa09200320203b01f809200320213a00f709200320223a00f609200320233b01f4092003201c3a00f309200320283a00f209200320293b01f009200341800f6a41186a200341c0076a41186a290300370300200341800f6a41106a200341c0076a41106a290300370300200341800f6a41086a200341c0076a41086a290300370300200420032903c00c370000200441086a202c290300370000200441106a202b290300370000200441186a202a2903003700002004411f6a2007280000360000200320032903c0073703800f200320053a00a00f20034190056a200341f0096a10d7032003280290052205200328029805200341800f6a108b040240200328029405450d002005102e0b024020032d00a00f4101470d0020032802a80f450d0020032802a40f102e0b200341f0096a41086a290300210c200341f0096a41106a290300211020032903f009210f200241186a200341f0096a41186a290300370000200241106a2010370000200241086a200c3700002002200f370000200641016a2106200241206a2102200141c4006a22012026470d000b20262105202721060b202620056b220441c4006d21010b02402004450d00200141c4006c2102200541286a210103400240200141786a2d00004101470d002001280200450d002001417c6a280200102e0b200141c4006a2101200241bc7f6a22020d000b0b02402008450d00200841c4006c450d00201b102e0b0240024020060d00200341800f6a200341c0076a10870420032802800f220120032802880f10ff01024020032802840f450d002001102e0b201242e0aa8e017e20124280c2d72f7e7c4290cf9fb8017c210c2025450d012024102e0c010b200341f0096a200341c0076a10870420064105744114722201417f4c0d0220032802f809210520032802f00921042001102c2202450d0b200341003602c80c200320013602c40c200320023602c00c200320113703880f2003200e3703800f200341c00c6a200341800f6a411010742006200341c00c6a107620064105742102202421010340200341c00c6a200141201074200141206a2101200241606a22020d000b2004200520032802c00c220120032802c80c10b201024020032802c40c450d002001102e0b024020032802f409450d002004102e0b02402025450d002024102e0b201242e0aa8e017e20124280c2d72f7e7c2006ad220c42b8fea8037e200c42c0f0f50b7e7c200c4280c2d72f7e7c7c4290cf9fb8017c210c0b0240200d42ffffff3f83500d00201d102e0b200320032800c8023602c0112003200341cb026a2800003600c311200041186a41003a0000200041106a200c37030020004201370308200020032802c0113600192000411c6a20032800c311360000200042003703000c0d0b410221050c030b1038000b200d42ffffff3f83500d01201d102e0c010b20032902840f210c20032d00800f21050b02402007450d00200741c4006c2102201b41286a210103400240200141786a2d00004101470d002001280200450d002001417c6a280200102e0b200141c4006a2101200241bc7f6a22020d000b0b02402008450d00200841c4006c450d00201b102e0b200320032800c8023602c0112003200341cb026a2800003600c311200041236a20044110763a0000200020043b0021200041186a41003a000020004200370308200020032802c0113600192000411c6a20032800c3113600002000200c370024200041206a20053a0000200042013703000c080b410221020b200341f0096a10e3030c020b024020032802c411450d002001102e0b200341d80c6a410036020042002111200342003703c80c200342003703c00c200342083703d00c200341dc0c6a200341f0096a41a00210e9081a420021100b2003200f4280fad5d5f2057c220c3703c00c2003200e200c200f54ad7c220f3703c80c0240200c201158200f201058200f20105122011b0d00200341800f6a200341c0076a200c20117d200f20107d200c201154ad7d10c30220032d00800f22024106460d0020032d00830f411074210120032f00810f210420032902840f210c0240200341d40c6a28020041ffffff3f71450d0020032802d00c102e0b20042001722101200341dc0c6a10e3030c010b02402011200c582010200f5820011b0d002003200341c0076a2011200c7d2010200f7d2011200c54ad7d10fb010b200341d80c6a350200210c200341800f6a200341c00c6a41c00210e9081a200341c8026a200341c0076a10840420032802d002210220032802c802210120034100360298052003420137039005200341800f6a20034190056a10e90320012002200328029005220420032802980510b2010240200328029405450d002004102e0b024020032802cc02450d002001102e0b0240200341940f6a28020041ffffff3f71450d0020032802900f102e0b200341800f6a411c6a10e303200341800f6a41086a41003a0000200341890f6a20032903c007370000200341910f6a200341c0076a41086a290300370000200341990f6a200341c0076a41106a290300370000200341a10f6a200341c0076a41186a290300370000200341123a00800f200341800f6a10fe01200320032800a00c3602b8012003200341a30c6a2800003600bb01200041186a41003a0000200041106a200c4288f70f7e200d4280aec4007e7c4280e7a9d6007c37030020004201370308200020032802b8013600192000411c6a20032800bb01360000200042003703000c040b200320032800a00c3602b8012003200341a30c6a2800003600bb01200041236a20014110763a0000200020013b0021200041186a41003a000020004200370308200020032802b8013600192000411c6a20032800bb013600002000200c370024200041206a20023a0000200042013703000c030b1036000b0b200320032800c8023602c0112003200341cb026a2800003600c311200041186a41003a000020004200370308200020032802c0113600192000411c6a20032800c311360000200041286a2001360200200041246a2002360200200041206a2004360200200042013703000b200341e0116a24000bca0a06067f017e037f017e047f067e230041f0016b22012400200141206a22024200370300200141186a22034200370300200141086a41086a420037030020014200370308200141086a4188fec6004108108102200141c8016a41b0afc300410a1081022002200141c8016a41086a290000370300200320012900c8013703002001412036022c2001200141086a360228200141306a200141086a412010ed02024002400240200128023022040d00410021030c010b200128023421052001200141306a41086a280200360244200120043602402001200141c0006a10ab010240024020012802000d00024002402001280204220620012802444106762202200220064b1b22024106742203417f4c0d000240024020020d00410821030c010b2003102c2203450d060b2002ad2107024002402006450d00200141c8016a4101722108034020012802442202450d04200128024022092d0000210a20012002417f6a3602442001200941016a3602404200210b02400240200a0e020100060b200141c8016a200141c0006a10930120012d00c8014101460d05200141a8016a41186a220c200841186a290000370300200141a8016a41106a220d200841106a290000370300200141a8016a41086a220e200841086a290000370300200120082900003703a801200128024422024110490d0520012001280240220941106a220a3602402001200241706a220f360244200f4108490d05200941086a2900002110200929000021112001200241686a3602442001200a41086a360240200a290000220b4280025a0d0520014188016a41186a200c29030037030020014188016a41106a200d29030037030020014188016a41086a200e290300370300200120012903a80137038801200b42ff018321124201210b0b200141e8006a41186a20014188016a41186a2903002213370300200141e8006a41106a20014188016a41106a2903002214370300200141e8006a41086a20014188016a41086a2903002215370300200141c8006a41086a22092015370300200141c8006a41106a220a2014370300200141c8006a41186a220f20133703002001200129038801221337036820012013370348024020074220882213a722022007a7470d00200241016a220c2002490d042002410174220d200c200c200d491b220c4104200c41044b1b220c41ffffff1f71200c46410374210d200c410674210c0240024020020d00200141003602c8010c010b200141083602d001200120033602c801200120134206863e02cc010b200141a8016a200c200d200141c8016a107d20012802b001210c20012802a8014101460d0320012802ac012103200742808080807083200c410676ad8421070b200320024106746a220220113703082002200b370300200241106a2010370300200241186a2012370300200241206a2001290348370300200241286a2009290300370300200241306a200a290300370300200241386a200f29030037030020074280808080107c21072006417f6a22060d000b0b2003450d030c040b200c0d050b1038000b0240200742ffffff1f83500d002003102e0b0b41002103200141003602b001200142013703a8012001410a36028c012001200141286a360288012001200141a8016a360268200141dc016a4101360200200142013702cc01200141909dc5003602c801200120014188016a3602d801200141e8006a419cebc000200141c8016a103d1a20012802a80120012802b00110ef0220012802ac01450d0020012802a801102e0b2005450d002004102e0b0240024020030d0020004100360208200042083702000c010b20002007370204200020033602000b200141f0016a24000f0b1036000b8b0101047f230041106b2202240002400240200128020822034106744104722204417f4c0d00200128020021012004102c2205450d01200241003602082002200436020420022005360200200320021076200120032002109a012000412020022802002201200228020810b20102402002280204450d002001102e0b200241106a24000f0b1038000b1036000bd80301047f230041c0006b2202240041bbebc2002103410f21044108210502400240024002400240024002400240024002400240024002400240024002400240200141ff01710e11000102030405060708090a0b0c0d0e0f10000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a4198a6cc001044000b41a9ebc200210341122105410021040c0e0b418be7c400210341012104410821050c0d0b41a1ebc200210341022104410821050c0c0b4197ebc2002103410a2105410321040c0b0b418debc2002103410a2105410421040c0a0b4183ebc2002103410a2105410521040c090b41f4eac2002103410f2105410621040c080b41e6eac2002103410e2105410721040c070b41d6eac200210341102105410821040c060b41caeac2002103410c2105410921040c050b41bdeac2002103410d2105410a21040c040b41b0eac2002103410d2105410b21040c030b419feac200210341112105410c21040c020b41faa0c5002103410e2105410d21040c010b4199eac200210341062105410e21040b20004183383b0100200041086a2005360200200041046a2003360200200041026a20043a0000200241c0006a24000bb40201037f230041e0006b22022400200241086a4188fec6004108108102200241186a41d0adc300410a108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241c8006a41086a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000baa37050e7f027e017f027e247f230041f0086b220324002003200236021c20032001360218200341206a2001200210ed0202400240200328022022040d00200041023a00a4020c010b200328022421052003200341206a41086a2802003602bc02200320043602b8022003200341b8026a3602e805200341106a200341e8056a10d8040240024020032802100d004108210602400240200328021422074180012007418001491b2208450d002008410574102c2206450d010b024002400240024002400240024020070d00410021070c010b20034198086a41106a210920034198086a41046a210a20034198086a41086a210b4100210c4100210d4100210e0340200341003602980820034198086a20032802b802220f20032802bc022201410420014104491b220210e9081a2003200120026b22013602bc022003200f20026a220f3602b802024020034198086a20026a2210200a460d0020104100410420026b10eb081a0b2003350298082111200341003a0098070240200120014100472202490d0020034198076a200f200210e9081a2003200120026b22103602bc022003200f20026a22023602b80202400240024020010d00420021120c010b4200211202400240024002400240024020032d0098070e0707000102030405080b20034198086a2010411020104110491b22016a41004100411020016b22132001410f4b1b10eb08210f20034198086a2002200110e9081a2003201020016b3602bc022003200220016a3602b8020240200f2009460d00200f4100201310eb081a0b200b29030021142003290398082115420121120c060b420221120c040b420321120c030b420421120c020b420521120c010b420621120b0b0240200e2008470d00200d200e41016a2201200d20014b1b22014104200141044b1b220141ffffff3f7120014641037421022001410574210102400240200e0d0020034100360298080c010b200341083602a0082003200c36029c0820032006360298080b200341f0076a2001200220034198086a107d20032802f8072101024020032802f0074101470d002001450d050c0a0b20032802f4072106200141057621080b2006200c6a22012011370300200141186a2014370300200141106a2015370300200141086a2012370300200c41206a210c200d41026a210d2007200e41016a220e460d020c010b0b410221010240200841ffffff3f710d000c090b2006102e0c080b2006450d06200341a0086a220e4200370300200342003703980820034198086a20032802b802220c20032802bc022202411020024110491b220110e9081a2003200220016b3602bc022003200c20016a3602b802024020014110460d0020034198086a20016a4100411020016b10eb081a0b200e29030021152003290398082112200341086a200341e8056a10d80420032802080d0302400240200328020c220c4138200c4138491b22020d004104210e0c010b200241c8006c102c220e450d060b0240200c0d004100210c0c020b200341f0076a410c6a2116200341f0076a4101722117410021104100210d0340200341f0076a200341e8056a10eb0302400240024020032d00f007220f4106460d00200341c8056a41026a2209201741026a2d00003a0000200341d8076a41086a220b201641086a290200370300200341d8076a41106a2213201641106a290200370300200320172f00003b01c805200320162902003703d80720032802f407210a20032802f807210120034198086a200341e8056a10eb0320032d0098084106470d01200f4101470d002001450d00200a102e0b4106210f0c010b200341a8056a41026a20092d00003a0000200341c0076a41086a200b290300370300200341c0076a41106a201329030037030020034198076a41086a20034198086a41086a29030037030020034198076a41106a20034198086a41106a29030037030020034198076a41186a20034198086a41186a29030037030020034198076a41206a20034198086a41206a280200360200200320032f01c8053b01a805200320032903d8073703c007200320032903980837039807200a2118200121190b20034188056a41026a2201200341a8056a41026a2d00003a000020034180076a41086a220a200341c0076a41086a29030037030020034180076a41106a2209200341c0076a41106a290300370300200341d8066a41086a220b20034198076a41086a290300370300200341d8066a41106a221320034198076a41106a290300370300200341d8066a41186a221a20034198076a41186a290300370300200341d8066a41206a221b20034198076a41206a280200360200200320032f01a8053b018805200320032903c0073703800720032003290398073703d8060240200f4106460d00200341e8046a41026a221c20012d00003a0000200341c0066a41086a221d200a290300370300200341c0066a41106a220a200929030037030020034198066a41086a2209200b29030037030020034198066a41106a220b201329030037030020034198066a41186a2213201a29030037030020034198066a41206a221a201b280200360200200320032f0188053b01e80420032003290380073703c006200320032903d806370398060240200d2002470d00200241016a22012002490d032002410174221b2001201b20014b1b22014104200141044b1bad42c8007e2214422088a74541027421012014a7211b0240024020020d0020034100360298080c010b200341043602a0082003200e360298082003200241c8006c36029c080b200341f0076a201b200120034198086a107d20032802f8072101024020032802f0074101470d0020010d090c040b20032802f407210e200141c8006e21020b200e20106a2201200f3a0000200141086a2019360000200141046a2018360000200141036a201c2d00003a0000200141016a20032f01e8043b00002001410c6a20032903c006370000200141146a201d2903003700002001411c6a200a290300370000200141346a200b2903003700002001412c6a20092903003700002001413c6a2013290300370000200141246a200329039806370000200141c4006a201a280200360000201041c8006a2110200c200d41016a220d460d030c010b0b0240200d450d00200e20106a210c200e21010340024020012d00004101470d00200141086a280200450d00200141046a280200102e0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102e0b200c200141c8006a2201470d000b0b2002450d03200241c8006c0d020c030b1038000b200e450d0120034198086a200341e8056a10eb03024020032d00980822104106460d00200341ec056a41026a20032d009b083a000020034180076a41086a200341ac086a220129020037030020034180076a41106a200341b4086a220f290200370300200320032f0099083b01ec052003200341a4086a220d2902003703800720034198086a41086a2213280200210a200328029c08210920034198086a200341e8056a10eb03024020032d009808220b4106460d00200341f0056a41026a20032d009b083a0000200341c0076a41086a2001290200370300200341c0076a41106a200f290200370300200320032f0099083b01f0052003200d2902003703c00720132802002113200328029c08211a20034198086a200341e8056a10eb03024020032d009808221b4106460d00200341f4056a41026a20032d009b083a0000200341d8076a41086a200341ac086a2201290200370300200341d8076a41106a200341b4086a220f290200370300200320032f0099083b01f4052003200341a4086a220d2902003703d80720034198086a41086a2218280200211c200328029c08211d20034198086a200341e8056a10eb03024020032d00980822164106460d00200341f8056a41026a20032d009b083a000020034198066a41086a200129020037030020034198066a41106a200f290200370300200320032f0099083b01f8052003200d2902003703980620182802002118200328029c08211920034198086a200341e8056a10eb03024020032d00980822174106460d00200341fe056a20032d009b083a0000200341d8066a41086a200341ac086a290200370300200341e8066a200341b4086a290200370300200320032f0099083b01fc052003200341a4086a2902003703d80620034198086a41086a280200211e200328029c08211f200341003a009808024020032802e805222028020422012001410047220d490d0020034198086a20202802002221200d10e9081a20202001200d6b220f36020420202021200d6a22213602000240024020010d00410021010c010b41002101024020032d0098080e020100020b200341003a00ac084100212202400340200341003a009807200f200f4100472201490d01202241016a210d20034198076a2021200110e9081a2020200f20016b22233602042020202120016a22213602000240200f0d00200341003a0098070b20034198086a20226a20032d0098073a00002003200d3a00ac082023210f200d2122200d4114470d000b200341f0076a41086a20034198086a41086a290300370300200341f0076a41106a20034198086a41106a28020036020020032003290398083703f007410121010c010b202241ff0171450d01200341003a00ac080c010b20034180066a41106a200341f0076a41106a28020036020020034180066a41086a200341f0076a41086a290300370300200320032903f0073703800620034198086a200341e8056a10eb0320032d00980822204106460d0020034194066a41026a220f20032d009b083a000020034198076a41086a200341ac086a29020037030020034198076a41106a200341b4086a290200370300200320032f0099083b0194062003200341a4086a2902003703980720034198086a41086a2802002121200328029c08212220034198086a200341e8056a10eb0320032d0098084106470d0820204101470d002021450d002022102e0b20174101470d00201e450d00201f102e0b20164101470d002018450d002019102e0b201b4101470d00201c450d00201d102e0b200b4101470d002013450d00201a102e0b20104101470d00200a450d002009102e0b0240200c450d00200e200c41c8006c6a210c200e21010340024020012d00004101470d00200141086a280200450d00200141046a280200102e0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102e0b200141c8006a2201200c470d000b0b2002450d01200241c8006c450d010b200e102e0b200841ffffff3f71450d022006102e410221010c030b200341f0076a41206a20034198086a41206a280200360200200341f0076a41186a20034198086a41186a290300370300200341f0076a41106a20034198086a41106a220d290300370300200341f0076a41086a20034198086a41086a2223290300370300200341e4056a41026a200341ec056a41026a2d00003a0000200341c0066a41086a20034180076a41086a290300370300200341c0066a41106a20034180076a41106a29030037030020032003290398083703f007200320032f01ec053b01e40520032003290380073703c006200341e0056a41026a200341f0056a41026a2d00003a0000200320032f01f0053b01e005200341c8056a41106a200341c0076a41106a290300370300200341c8056a41086a200341c0076a41086a290300370300200320032903c0073703c805200341c4056a41026a200341f4056a41026a2d00003a0000200320032f01f4053b01c405200341a8056a41106a200341d8076a41106a290300370300200341a8056a41086a200341d8076a41086a290300370300200320032903d8073703a805200341a4056a41026a200341f8056a41026a2d00003a0000200320032f01f8053b01a40520034188056a41106a20034198066a41106a29030037030020034188056a41086a20034198066a41086a29030037030020032003290398063703880520034184056a41026a200341fc056a41026a2d00003a0000200320032f01fc053b018405200341e8046a41106a200341d8066a41106a290300370300200341e8046a41086a200341d8066a41086a290300370300200320032903d8063703e804200d20034180066a41106a280200360200202320034180066a41086a290300370300200320032903800637039808200341e4046a41026a200f2d00003a0000200320032f0194063b01e404200341c8046a41106a20034198076a41106a290300370300200341c8046a41086a20034198076a41086a29030037030020032003290398073703c8040c020b1036000b410221010b200341c4046a41026a200341e4056a41026a2d00003a0000200341a8046a41086a200341c0066a41086a290300370300200341a8046a41106a2223200341c0066a41106a290300370300200341a4046a41026a200341e0056a41026a2d00003a000020034188046a41086a200341c8056a41086a29030037030020034188046a41106a2224200341c8056a41106a290300370300200320032f01e4053b01c404200320032903c0063703a804200320032f01e0053b01a404200320032903c8053703880420034184046a41026a200341c4056a41026a2d00003a0000200341e8036a41086a200341a8056a41086a290300370300200341e8036a41106a2225200341a8056a41106a290300370300200341e4036a41026a200341a4056a41026a2d00003a0000200341c8036a41086a20034188056a41086a290300370300200341c8036a41106a222620034188056a41106a290300370300200320032f01c4053b018404200320032903a8053703e803200320032f01a4053b01e40320032003290388053703c803200341c4036a41026a20034184056a41026a2d00003a0000200341a8036a41106a2227200341e8046a41106a290300370300200341a8036a41086a200341e8046a41086a290300370300200341a4036a41026a200341e4046a41026a2d00003a000020034188036a41106a2228200341c8046a41106a29030037030020034188036a41086a200341c8046a41086a290300370300200320032f0184053b01c403200320032903e8043703a803200320032f01e4043b01a403200320032903c80437038803200341e0026a41206a2229200341f0076a41206a280200360200200341e0026a41186a222a200341f0076a41186a290300370300200341e0026a41106a222b200341f0076a41106a290300370300200341e0026a41086a200341f0076a41086a290300370300200320032903f0073703e002200341c0026a41176a20034198086a41176a220f280000360000200341c0026a41106a20034198086a41106a220d290300370300200341c0026a41086a20034198086a41086a29030037030020032003290398083703c0020240024020014102470d00200341003602f807200342013703f0072003410a36029c072003200341186a360298072003200341f0076a3602d806200341ac086a41013602002003420137029c08200341909dc50036029808200320034198076a3602a808200341d8066a419cebc00020034198086a103d1a20032802f00720032802f80710ef0220032802f407450d0120032802f007102e0c010b200341b4026a41026a222c200341c4046a41026a2d00003a000020034198026a41086a222d200341a8046a41086a29030037030020034198026a41106a222e202329030037030020034194026a41026a2223200341a4046a41026a2d00003a0000200341f8016a41086a222f20034188046a41086a290300370300200341f8016a41106a22302024290300370300200320032f01c4043b01b402200320032903a80437039802200320032f01a4043b01940220032003290388043703f801200341f4016a41026a222420034184046a41026a2d00003a0000200341d8016a41086a2231200341e8036a41086a290300370300200341d8016a41106a22322025290300370300200341d4016a41026a2225200341e4036a41026a2d00003a0000200341b8016a41086a2233200341c8036a41086a290300370300200341b8016a41106a22342026290300370300200320032f0184043b01f401200320032903e8033703d801200320032f01e4033b01d401200320032903c8033703b801200341b4016a41026a2226200341c4036a41026a2d00003a000020034198016a41106a2235202729030037030020034198016a41086a2227200341a8036a41086a29030037030020034194016a41026a2236200341a4036a41026a2d00003a0000200341f8006a41106a22372028290300370300200341f8006a41086a222820034188036a41086a290300370300200320032f01c4033b01b401200320032903a80337039801200320032f01a4033b0194012003200329038803370378200341d0006a41206a22382029280200360200200341d0006a41186a2229202a290300370300200341d0006a41106a222a202b290300370300200341d0006a41086a222b200341e0026a41086a290300370300200320032903e002370350200341306a410f6a200341c0026a410f6a290000370000200341306a41086a2239200341c0026a41086a290300370300200320032903c0023703302000201537030820002012370300200020103a00282000200c360224200020023602202000200e36021c2000200736021820002008360214200020063602102000200a3602302000200936022c200020032f01b4023b00292000412b6a202c2d00003a000020002003290398023702342000413c6a202d290300370200200041c4006a202e2903003702002000200b3a004c200041cf006a20232d00003a0000200020032f0194023b004d200020133602542000201a360250200041e8006a2030290300370200200041e0006a202f290300370200200020032903f8013702582000201b3a0070200041f3006a20242d00003a0000200020032f01f4013b00712000201c3602782000201d3602742000418c016a203229030037020020004184016a2031290300370200200020032903d80137027c200020163a00940120004197016a20252d00003a0000200020032f01d4013b0095012000201836029c012000201936029801200041b0016a2034290300370200200041a8016a2033290300370200200020032903b8013702a001200020173a00b801200041bb016a20262d00003a0000200020032f01b4013b00b9012000201e3602c0012000201f3602bc01200041d4016a2035290300370200200041cc016a202729030037020020002003290398013702c401200020203a00dc01200041df016a20362d00003a0000200020032f0194013b00dd01200020213602e401200020223602e001200041f8016a2037290300370200200041f0016a2028290300370200200020032903783702e801200041a0026a203828020036020020004198026a202929030037020020004190026a202a29030037020020004188026a202b2903003702002000200329035037028002200f200341306a41176a280000360000200d200341306a41106a29030037030020034198086a41086a220220392903003703002003200329033037039808200041bc026a200f280000360000200041b5026a200d290300370000200041ad026a200229030037000020002003290398083700a5020b200020013a00a4022005450d002004102e0b200341f0086a24000bbd07010a7f23004180026b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022040d00200041063a00200c010b200328021421052003200341186a280200220636029401200320043602900141002101200341003a00d801024002400240034020062001460d01200341b8016a20016a200420016a22022d00003a00002003200241016a360290012003200141016a22023a00d8012002210120024120470d000b2003200620026b36029401200341206a41186a2201200341b8016a41186a290300370300200341206a41106a2206200341b8016a41106a290300370300200341206a41086a2207200341b8016a41086a290300370300200320032903b801370320200241ff01714120490d0120034198016a41086a200729030037030020034198016a41106a200629030037030020034198016a41186a20012903003703002003200329032037039801200341b8016a20034190016a10ec0320032d00b80122014106460d01200341f0006a41186a220220034198016a41186a290300370300200341f0006a41106a220620034198016a41106a290300370300200341f0006a41086a220720034198016a41086a290300370300200341c8006a41086a2208200341c1016a290000370300200341c8006a41106a2209200341c9016a290000370300200341c8006a41186a220a200341d1016a290000370300200341c8006a411f6a220b200341d8016a2800003600002003200329039801370370200320032900b901370348200341206a411f6a220c200b280000360000200341206a41186a220b200a290300370300200341206a41106a220a2009290300370300200341206a41086a22092008290300370300200041186a2002290300370200200041106a2006290300370200200041086a20072903003702002000200329037037020020032003290348370320200041c0006a200c280000360000200041396a200b290300370000200041316a200a290300370000200041296a2009290300370000200020032903203700210c020b2003410036029401200141ff0171450d00200341003a00d8010b20034100360250200342013703482003410a3602242003200341086a3602202003200341c8006a3602e001200341cc016a4101360200200342013702bc01200341909dc5003602b8012003200341206a3602c801200341e0016a419cebc000200341b8016a103d1a2003280248200328025010ef020240200328024c450d002003280248102e0b410621010b200020013a00202005450d002004102e0b20034180026a24000bb40201037f230041e0006b22022400200241086a4188fec6004108108102200241186a41d0aec3004106108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241c8006a41086a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000b8e0302027f037e230041e0006b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022010d00200041003602100c010b200328021421042003200341106a41086a2802002202360224200320013602200240024020024110490d002003200241706a3602242003200141106a360220200141086a2900002105200129000021062003200341206a10ab0102402003280200450d00200341003602480c010b200341c8006a200341206a200328020410920120032802482202450d00200329024c2107200020053703082000200637030020002007370214200020023602100c010b20034100360230200342013703282003410a36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341909dc5003602482003200341386a360258200341c4006a419cebc000200341c8006a103d1a2003280228200328023010ef020240200328022c450d002003280228102e0b200041003602100b2004450d002001102e0b200341e0006a24000ba43809017f0a7e027f077e017f017e037f037e047f230041f0056b22062400200620043703202006200337031820062001360214200620053a002f0240024020032004844200520d0020004100360200200041106a4200370300200041086a42003703000c010b024002400240024002400240024002400240024020012002412010ec080d002005450d01200641d0016a200110c802200641f0046a20062802d001220220062802d80110c90220064190056a290300420020062903f00442015122011b210720064188056a290300420020011b2108024020062802d401450d002002102e0b20004100360200200041106a4200200420077d2003200854ad7d2207200320087d2208200356200720045620072004511b22011b370300200041086a4200200820011b3703000c0a0b2006200236028c01200641d0016a200210c802200641f0046a20062802d001220520062802d80110c902200641f0046a41386a2903002109200641f0046a41306a2903002107200641f0046a41286a290300210a200641f0046a41206a290300210b200641f0046a41186a290300210c200641f0046a41106a2903002103200641b0056a290300210d20062903f804210420062903f0042108200641c8036a41086a200641c0056a2903003703002006200641b8056a2903003703c8030240024020084201510d004200210d20064190016a41386a420037030020064190016a41306a420037030020064190016a41286a4200370300200641b0016a420037030020064190016a41186a420037030020064190016a41106a420037030020064190016a41086a420037030020064200370390014200210b4200210a420021074200210942002104420021034200210c4200210e4200210f42002108420021100c010b200641b0016a200a37030020064190016a41286a200737030020064190016a41106a200c37030020064190016a41306a20093703002006200b3703a80120062004370390012006200d3703c8012006200337039801200a210e2007210f20042108200321100b024020062802d401450d002005102e0b0240024020082010844200520d00200e20062903a00184200f200641a8016a29030084844200520d0020062903c001200641c8016a2903008450450d0042002108410021110c010b42012108410121110b0240024020084201510d0042002104200641c0036a4200370300200641b8036a4200370300200641b0036a4200370300200641a8036a4200370300200641a0036a420037030020064198036a420037030020064190036a42003703002006420037038803420021030c010b200641a8036a200a370300200641b0036a2007370300200641b8036a200937030020064198036a200c3703002006200b3703a0032006200d3703c003200620043703880320062003370390030b024020084201510d00200641a0046a41206a200641b8036a290300370300200641a0046a41186a200641b0036a290300370300200641b0046a20064188036a41206a290300370300200641a8046a20064188036a41186a29030037030020062006290398033703a00441838a1c211241b4a4c7002101410b21050c070b200620013602dc03200641a0046a200110c802200641f0046a20062802a004220520062802a80410c902200641f0046a41386a2903002113200641f0046a41306a290300210f200641f0046a41286a2903002114200641f0046a41206a2903002104200641f0046a41186a290300210c200641f0046a41106a2903002103200641b0056a290300211520062903f804211020062903f004210e200641c8036a41086a200641c0056a2903003703002006200641b8056a2903003703c80302400240200e4201510d0042002115200641e0036a41386a4200370300200641e0036a41306a4200370300200641e0036a41286a4200370300200641e0036a41206a4200370300200641e0036a41186a4200370300200641e0036a41106a4200370300200641e0036a41086a4200370300200642003703e00342002104420021144200210f4200211342002110420021034200210c42002116420021174200210e420021180c010b200641e0036a41206a2014370300200641e0036a41286a200f370300200641e0036a41106a200c370300200641e0036a41306a2013370300200620043703f803200620103703e0032006201537039804200620033703e80320142116200f21172010210e200321180b024020062802a404450d002005102e0b02400240200e2018844200520d00201620062903f003842017200641f8036a29030084844200520d0020062903900420064198046a2903008450450d0042002117410021120c010b42012117410121120b024020174201510d00420021044200210c42002115420021144200210f4200211342002110420021030b200641186a41086a290300220e2004200c20062903182218562004200e562004200e511b22051b21162018200c20051b210e02400240024020062d002f4101470d002006290398032218200e7c22192018542205200641a0036a221a290300221820167c2005ad7c221b201854201b2018511b450d010c060b2006290388032218200e7c2219201854220520064188036a41086a290300221820167c2005ad7c221b201854201b2018511b0d0520062019370388032006201b370390030c010b201a201b37030020062019370398030b20064198056a221c200f370300200641a0056a221d201337030020064188056a200420167d200c200e54ad7d220f37030020062014370390052006200c200e7d221437038005200620103703f004200620033703f80442002104200e422088a72105200ea7211a02400240427f201020147c220c200c201054221e2003200f7c201ead7c220c200354200c2003511b221e1b221842ffc7afa02556427f200c201e1b22134200522013501b0d0020102014842003200f8484220450211e4200210c2004420052ad21040c010b201d290300211f201c290300212020064190056a290300212120064180056a290300211b200629038805211920062903f804211420062903f004210e4201210c4101211e0b200641c8046a2013370300200641c0046a221c2018370300200641b0046a2003370300200620103703a804200620163703d804200620053602d4042006201a3602d004200620043703b80420062017420152ad220f3703a0040240024002402012200c420152720d00200620013602f0042001200641f0046a10bd060c010b024020124101732205200c420151720d00200620013602f0042001200641f0046a10be0641ff017122054103460d01024020050e03030200030b41002105410421120240201e0d002006201c3602f004200641f0046a10cc020b410021010c070b200c4201522005710d030b200641e0046a200110c802200641f0046a20062802e004221220062802e804221a10c90220062903f0042103200641c8036a41086a2205200641c0056a2903003703002006200641b8056a2903003703c8030240024020034201510d00200641e8026a41086a4200370300200642003703e8020c010b200641e8026a41086a2005290300370300200620062903c8033703e8020b200641b8056a20062903e802370300200641c0056a200641e8026a41086a290300370300200642013703f004200641f0046a41386a201f4200200c42015122051b370300200641a0056a2020420020051b370300200641f0046a41286a2021420020051b37030020064190056a2019420020051b37030020064188056a201b420020051b370300200641f0046a41106a2014420020051b370300200641b0056a2015420020051b3703002006200e420020051b3703f8042012201a200641f0046a41086a10c805024020062802e404450d002012102e0b200641a0046a41106a2903002103200641a0046a41286a2903002113200641a0046a41386a290300210c20062903a804211020062903c004211820062903d004210e20062903a004210f20062903b80421040c030b200641c8046a2903002113200641b0046a2903002103200641d8046a290300210c20062903c004211820062903a804211020062903d004210e20062903b804210420062903a004210f0c020b200620012003200410fb0120062903002103200041106a200641086a290300370300200041086a2003370300200041003602000c080b200641d8046a290300210c20062903d004210e0b0240200f4201520d00200641a8056a2003370300200641a0056a2010370300200641f0046a41086a41003a0000200641f9046a200129000037000020064181056a200141086a29000037000020064189056a200141106a29000037000020064191056a200141186a290000370000200641033a00f004200641f0046a10fe010b02400240200450450d00420021150c010b200641f0046a41086a20062802dc03220141086a290000370300200641f0046a41106a200141106a290000370300200641f0046a41186a200141186a290000370300200620012900003703f004420121150b200641e0036a41186a200641f0046a41186a290300370300200641e0036a41106a200641f0046a41106a290300370300200641e0036a41086a200641f0046a41086a290300370300200620062903f0043703e0034100211a0c020b41808008210141800a2105410321120b20014180800c71200541800e7172201272211241a984ca00ad4280808080800184210e4101211a4200210c0b20064188036a41086a2903002103200641c0036a29030021212006290388032104200641a0046a41206a221e20064188036a41306a290300370300200641a0046a41186a221c20064188036a41286a290300370300200641b0046a221d20064188036a41206a290300370300200641a0046a41086a222220064188036a41186a29030037030020062006290398033703a004200e422088a72105200ea72101201a450d010b2005ad4220862001ad8421084200210f410121010c010b200641f0046a41186a20222903002207370300200641f0046a41206a201d290300370300200641f0046a41286a201c290300370300200641f0046a41306a201e290300370300200620062903a004220a37038005200620043703f004200620033703f804420021104201210f2008420152211a02400240427f2004200a7c22082008200454221e200320077c201ead7c220820035420082003511b221e1b221442ffc7afa02556427f2008201e1b220e420052200e501b0d004200210f2004200a84200320078484420052ad21100c010b200641a0056a290300210920064198056a290300210720064190056a290300210a20064180056a2903002119200629038805210b20062903f804211b20062903f00421170b201aad2108200641e8026a41086a200641e0036a41086a290300370300200641e8026a41106a200641e0036a41106a290300370300200641e8026a41186a200641e0036a41186a290300370300200620062903e0033703e8022005ad4220862001ad842116410021012021210d0b200641c8026a41086a2205200641e8026a41086a290300370300200641c8026a41106a221a200641e8026a41106a290300370300200641c8026a41186a221e200641e8026a41186a290300370300200620062903e8023703c8020240024002400240024020010d0020064188026a200c370300200641f8016a200e370300200641f0016a22012014370300200641d0016a41106a2003370300200641c0026a2013370300200641b8026a221c201837030020064190026a201537030020064198026a20062903c802370300200641a0026a2005290300370300200641a8026a201a290300370300200641b0026a201e2903003703002006201637038002200620043703d801200620103703e801200620083703d001024002402011200f420152720d00200620023602f0042002200641f0046a10bd060c010b024020114101732205200f420151720d00200620023602f0042002200641f0046a10be0641ff017122054103460d010240024020050e03010300010b02402010500d00200620013602f004200641f0046a10cc020b20064190026a220510d20441012101410421122005290300500d052006201c3602f004200641f0046a10cc020c050b20064190046a200641c0026a29030037030020064188046a200641b8026a29030037030020064180046a200641b0026a290300370300200641f8036a200641a8026a290300370300200641f0036a200641a0026a290300370300200641e8036a20064198026a290300370300200620064190026a2903003703e003410021010c040b200f4201522005710d020b20064188036a200210c802200641f0046a2006280288032205200628029003221210c90220062903f0042103200641c8036a41086a2201200641c0056a2903003703002006200641b8056a2903003703c8030240024020034201510d00200641a0046a41086a4200370300200642003703a0040c010b200641a0046a41086a2001290300370300200620062903c8033703a0040b200641f0046a41c8006a20062903a004370300200641f0046a41d0006a200641a0046a41086a2211290300370300200642013703f004200641f0046a41386a20094200200f42015122011b370300200641f0046a41306a2007420020011b370300200641f0046a41286a200a420020011b370300200641f0046a41206a200b420020011b370300200641f0046a41186a2019420020011b370300200641f0046a41106a201b420020011b370300200641f0046a41c0006a200d420020011b37030020062017420020011b3703f80420052012200641f0046a41086a10c8050240200628028c03450d002005102e0b200641e0036a41086a2201200641d0016a41c8006a290300370300200641e0036a41106a2205200641d0016a41d0006a290300370300200641e0036a41186a2212200641a8026a290300370300200641e0036a41206a221a200641b0026a290300370300200641e0036a41286a221e200641b8026a290300370300200641e0036a41306a221c200641c0026a2903003703002006200641d0016a41c0006a2903003703e003200641d0016a41106a2903002103200641d0016a41286a290300210e200641d0016a41386a290300210c20062903d801210420062903f0012114200629038002210820062903d001210720062903e8012110200641a0046a41306a201c290300370300200641a0046a41286a201e290300370300200641a0046a41206a201a290300370300200641a0046a41186a2012290300370300200641a0046a41106a200529030037030020112001290300370300200620062903e0033703a004200641a0046a21010c030b410121010c010b20064190046a200641c0026a29030037030020064188046a200641b8026a29030037030020064180046a200641b0026a290300370300200641f8036a200641a8026a290300370300200641f0036a200641a0026a290300370300200641e8036a20064198026a290300370300200620064190026a2903003703e003410021010b200641a0046a41306a200641e0036a41306a290300370300200641a0046a41286a200641e0036a41286a290300370300200641a0046a41206a200641e0036a41206a290300370300200641a0046a41186a200641e0036a41186a290300370300200641a0046a41106a200641e0036a41106a290300370300200641a0046a41086a200641e0036a41086a290300370300200620062903e0033703a00402402001450d00410121010c020b200641a0046a210120082107201621080b200641d0016a41306a200141306a290300370300200641d0016a41286a200141286a290300370300200641d0016a41206a200141206a290300370300200641d0016a41186a200141186a290300370300200641d0016a41106a200141106a290300370300200641d0016a41086a200141086a290300370300200620012903003703d001024020074201520d00200628028c012101200641a8056a2003370300200641f0046a41306a2004370300200641f0046a41086a41003a0000200641f9046a200129000037000020064181056a200141086a29000037000020064189056a200141106a29000037000020064191056a200141186a290000370000200641033a00f004200641f0046a10fe010b02400240201050450d00420021030c010b20064188036a41086a200628028c01220141086a29000037030020064188036a41106a200141106a29000037030020064188036a41186a200141186a2900003703002006200129000037038803420121030b20064190016a41186a20064188036a41186a29030037030020064190016a41106a20064188036a41106a29030037030020064190016a41086a20064188036a41086a290300370300200641f0046a41086a200641d0016a41086a290300370300200641f0046a41106a200641d0016a41106a290300370300200641f0046a41186a200641d0016a41186a290300370300200641f0046a41206a200641d0016a41206a290300370300200641f0046a41286a200641d0016a41286a290300370300200641f0046a41306a200641d0016a41306a290300370300200620062903880337039001200620062903d0013703f004410021010b200641d0006a41086a2205200641f0046a41086a2211290300370300200641d0006a41106a221a200641f0046a41106a290300370300200641d0006a41186a221e200641f0046a41186a290300370300200641d0006a41206a221c200641f0046a41206a290300370300200641d0006a41286a221d200641f0046a41286a290300370300200641d0006a41306a2222200641f0046a41306a290300370300200641306a41086a222320064190016a41086a290300370300200641306a41106a222420064190016a41106a290300370300200641306a41186a222520064190016a41186a290300370300200620062903f0043703502006200629039001370330024020010d00200641a0046a41306a2022290300370300200641a0046a41286a201d290300370300200641a0046a41206a201c290300370300200641a0046a41186a201e290300370300200641a0046a41106a201a290300370300200641a0046a41086a2005290300370300200620062903503703a004200641d0016a41306a200e370300200641d0016a41286a22122014370300200641d0016a41106a2023290300370300200641d0016a41186a2024290300370300200641d0016a41206a2025290300370300200620033703d001200620062903303703d80120062d002f2105200641e0036a41186a2006280214220141186a2900002203370300200641e0036a41106a200141106a2900002204370300200641e0036a41086a200141086a290000220737030020062001290000220a3703e003200641c8056a200c370300200641c0056a2008370300201141073a0000200641f9046a200a37000020064181056a200737000020064189056a200437000020064191056a2003370000200641b9056a20053a000020064199056a2002290000370000200641a1056a200241086a290000370000200641a9056a200241106a290000370000200641b1056a200241186a290000370000200641033a00f004200641f0046a10fe01200041086a2006290318220320087d37030020004100360200200041106a200641186a41086a290300200c7d2003200854ad7d370300200641d0016a10d204024020062903d001500d00200620123602f004200641f0046a10cc020b200641a0046a10d20420062903a004500d012006200641c8046a3602f004200641f0046a10cc020c010b2000201236020420004101360200200041086a20083702000b200641f0056a24000bda0102037f017e230041206b2203240002400240200241186a2802004105744114722204417f4c0d002004102c2205450d01200341003602082003200436020420032005360200200229030021062003200241086a290300370318200320063703102003200341106a4110107420022802102104200228021822022003107602402002450d002002410574210203402003200441201074200441206a2104200241606a22020d000b0b2000200120032802002204200328020810b20102402003280204450d002004102e0b200341206a24000f0b1038000b1036000b7801017f230041206b2203240020034100360208200342013703002003200241201074200341106a200241206a108a012003200328021022022003280218107402402003280214450d002002102e0b2000200120032802002202200328020810b20102402003280204450d002002102e0b200341206a24000b832501047f024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002802000e1b00010218180304051806070818090a0b0c0d0e0f10111213141516170b0240024002400240024002400240200041086a2802000e0a1e1e001e01021e030405060b200041106a280200450d1d2000410c6a280200102e0f0b200041106a280200450d1c2000410c6a280200102e0f0b200041106a280200450d1b2000410c6a280200102e0f0b0240200041146a2802002201450d002000410c6a2802002102200141186c210103400240200241046a280200450d002002280200102e0b0240200241106a280200450d002002410c6a280200102e0b200241186a2102200141686a22010d000b0b200041106a2802002202450d1a200241186c450d1a200028020c102e0f0b0240200041146a2802002201450d002000410c6a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041106a2802002202450d192002410c6c450d19200028020c102e0f0b200041106a280200450d182000410c6a280200102e0f0b200041106a280200450d172000410c6a280200102e0f0b0240024002400240024020002d00040e061b001b010203040b200041186a2202280200108c042002280200102e0f0b02402000410c6a280200450d00200041086a280200102e0b200041246a2202280200108c042002280200102e0f0b2000410c6a280200450d18200041086a280200102e0f0b200041186a2202280200108c042002280200102e0f0b02402000410c6a280200450d00200041086a280200102e0b200041246a2202280200108c042002280200102e0f0b02400240200041086a280200417f6a0e020001170b2000412c6a220110e1010240200041306a2802002202450d00200241246c450d002001280200102e0b2000419c016a220110e1010240200041a0016a2802002202450d00200241246c450d002001280200102e0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d162002410c6c450d162000280210102e0f0b2000412c6a220110e1010240200041306a2802002202450d00200241246c450d002001280200102e0b2000419c016a220110e1010240200041a0016a2802002202450d00200241246c450d002001280200102e0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d152002410c6c450d152000280210102e0f0b0240024002400240200041086a2802000e0418000102030b2000410c6a2d00004102470d17200041146a280200450d17200041106a280200102e0f0b2000410c6a2d00004102470d16200041146a280200450d16200041106a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004102470d15200041386a280200450d15200041346a280200102e0f0b2000410c6a2d00004102470d14200041146a280200450d14200041106a280200102e0f0b02402000410c6a2802002201450d0020002802042202200141f0006c6a21030340024020022204410c6a2802002201450d0020042802042102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b200441f0006a21020240200441086a2802002201450d00200141246c450d002004280204102e0b20022003470d000b0b200041086a2802002202450d13200241f0006c450d132000280204102e0f0b024002400240024002400240200041086a2d00000e171800181818180118180218181818180318180418181818050b2000412c6a2d00004102470d17200041346a280200450d17200041306a280200102e0f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b200041106a2802002202450d16200241246c450d16200028020c102e0f0b2000410c6a2d00004102470d15200041146a280200450d15200041106a280200102e0f0b200041106a28020041ffffff3f71450d142000410c6a280200102e0f0b200041146a28020041ffffffff0371450d13200041106a280200102e0f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b200041106a2802002202450d12200241246c450d12200028020c102e0f0b20002802042202450d11200041086a280200450d112002102e0f0b02400240200041086a280200417f6a0e020001120b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d112002410c6c450d112000280210102e0f0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d102002410c6c450d102000280210102e0f0b02402000410c6a280200450d00200041086a280200102e0b02402000411c6a2802002201450d00200041146a28020021022001410c6c210103400240200241046a280200450d002002280200102e0b2002410c6a2102200141746a22010d000b0b200041186a2802002202450d0f2002410c6c450d0f2000280214102e0f0b0240024002400240200041086a2d000041716a0e0400010203120b200041106a280200450d112000410c6a280200102e0f0b200041106a280200450d102000410c6a280200102e0f0b200041106a280200450d0f2000410c6a280200102e0f0b200041106a280200450d0e2000410c6a280200102e0f0b024002400240200041086a2d0000417f6a0e03000102100b200041306a28020041ffffff3f71450d0f2000412c6a280200102e0f0b2000410c6a2202280200108c042002280200102e0f0b200041106a2202280200108c042002280200102e0f0b024002400240200041086a2d0000417f6a0e030001020f0b200041306a28020041ffffff3f71450d0e2000412c6a280200102e0f0b2000410c6a2202280200108c042002280200102e0f0b200041106a2202280200108c042002280200102e0f0b02400240200041086a2d0000417f6a0e05000d0d0d010d0b200041106a28020041ffffff3f71450d0c2000410c6a280200102e0f0b2000410c6a2d00004102470d0b200041146a280200450d0b200041106a280200102e0f0b20002d00044104470d0a2000410c6a28020041ffffff3f71450d0a200041086a280200102e0f0b200041086a2802004101470d092000410c6a2d00004102470d09200041146a280200450d09200041106a280200102e0f0b02400240200041086a2d0000417d6a0e0200010a0b200041f0006a280200450d09200041ec006a280200102e0f0b200041106a280200450d082000410c6a280200102e0f0b024002400240200041086a2802000e040a0a0001020b2000410c6a2d00004102470d09200041146a280200450d09200041106a280200102e0f0b2000410c6a2d00004102470d08200041146a280200450d08200041106a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004102470d07200041386a280200450d07200041346a280200102e0f0b02400240024020002f01040e03090001020b0240200041106a2802002201450d00200041086a2802002102200141b0026c210103402002109601200241b0026a2102200141d07d6a22010d000b0b2000410c6a2802002202450d08200241b0026c450d082000280208102e0f0b200041086a2202280200108c042002280200102e0f0b0240200041106a2802002201450d00200041086a2802002102200141b0026c210103402002109601200241b0026a2102200141d07d6a22010d000b0b2000410c6a2802002202450d06200241b0026c450d062000280208102e0f0b0240024002400240024002400240200041086a2d0000417e6a0e0d00010c0c0c0c0c0c02030405060c0b2000410c6a10e3030f0b0240200041146a2802002202450d00200241c4006c21012000410c6a28020041286a210203400240200241786a2d00004101470d002002280200450d002002417c6a280200102e0b200241c4006a2102200141bc7f6a22010d000b0b200041106a2802002202450d0a200241c4006c450d0a200028020c102e0f0b200041106a2d00004102470d09200041186a280200450d09200041146a280200102e0f0b2000410c6a2d00004102470d08200041146a280200450d08200041106a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004101470d07200041386a280200450d07200041346a280200102e0f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a280200102e0b200041306a2d00004101470d06200041386a280200450d06200041346a280200102e0f0b2000410c6a2d00004102470d05200041146a280200450d05200041106a280200102e0f0b20002d00042202417e6a4108490d040240024020020e020600010b200041286a2202280200108c042002280200102e0f0b200041c8006a2202280200108c042002280200102e0f0b0240024002400240200041086a2d00000e0407000102030b0240200041106a28020041ffffff3f71450d002000410c6a280200102e0b200041186a2202280200108c042002280200102e0f0b0240200041106a28020041ffffff3f71450d002000410c6a280200102e0b200041286a280200450d05200041246a280200102e0f0b200041306a28020041ffffff3f71450d042000412c6a280200102e0f0b200041306a28020041ffffff3f71450d032000412c6a280200102e0f0b0240024002400240200041086a2802000e09060006010606020606030b200041106a280200450d052000410c6a280200102e0f0b200041106a2d00004102470d04200041186a280200450d04200041146a280200102e0f0b200041106a2d00004102470d03200041186a280200450d03200041146a280200102e0f0b200041146a280200450d02200041106a280200102e0f0b02400240200041086a2d0000417f6a0e03000301030b200041306a280200450d022000412c6a280200102e0c020b200041306a280200450d012000412c6a280200102e0f0b02402000413c6a28020041ffffffff0171450d00200041386a280200102e0b0240200041c8006a2802002202450d002002410c6c450d00200041c4006a280200102e0b0240200041d4006a28020041ffffffff0071450d00200041d0006a280200102e0b0240200041e0006a2802002202450d00200241146c450d00200041dc006a280200102e0b0240200041ec006a2802002202450d00200241186c450d00200041e8006a280200102e0b0240200041f8006a2802002202450d002002411c6c450d00200041f4006a280200102e0b024020004184016a28020041ffffff3f71450d0020004180016a280200102e0b024020004190016a2802002202450d00200241246c450d002000418c016a280200102e0b02402000419c016a2802002202450d00200241286c450d0020004198016a280200102e0b0240200041a8016a2802002202450d002002412c6c450d00200041a4016a280200102e0b0240200041b4016a2802002202450d00200241306c450d00200041b0016a280200102e0b0240200041c0016a2802002202450d00200241346c450d00200041bc016a280200102e0b0240200041cc016a2802002202450d00200241386c450d00200041c8016a280200102e0b0240200041d8016a2802002202450d002002413c6c450d00200041d4016a280200102e0b0240200041e4016a28020041ffffff1f71450d00200041e0016a280200102e0b200041f0016a2802002202450d00200241c4006c450d00200041ec016a280200102e0f0b0b830501077f230041c0006b220324002001280204210420012802002105024002400240200128020822060d00410021070c010b200641057421084100210941002107200521010240034002402009450d0020092001412010ec084100480d0020034106108e04200041013602002000410c6a200341086a280200360200200020032903003702040c020b024020012002412010ec08220941004a0d00024020090d0020034107108e04200041013602002000410c6a200341086a280200360200200020032903003702040c030b200741016a21070b20012109200141206a2101200841606a2208450d020c000b0b200441ffffff3f71450d012005102e0c010b200341186a200241186a290000370300200341106a200241106a290000370300200341086a200241086a290000370300200320022900003703000240024020062007490d000240024020062004470d00200441016a22012004490d03200441017422092001200920014b1b22014104200141044b1b220141ffffff3f712001462109200141057421010240024020040d00200341003602300c010b200341386a410136020020032005360230200320044105743602340b200341206a20012009200341306a107d200341286a280200210120032802204101460d0120032802242105200141057621040b200520074105746a220141206a2001200620076b41057410ea081a200141186a200341186a290300370000200141106a200341106a290300370000200141086a200341086a290300370000200120032903003700002000410c6a200641016a360200200041086a200436020020002005360204200041003602000c030b2001450d011036000b200720061045000b1038000b200341c0006a24000bae0301047f230041c0006b2202240041f0cbc3002103410d2104410d2105024002400240024002400240024002400240024002400240024002400240200141ff01710e0f000102030405060708090a0b0c0d0e000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a4180a7cc001044000b41e0cbc300210341102105410021040c0c0b41d1cbc3002103410f2105410121040c0b0b41c0cbc300210341112105410221040c0a0b41afcbc300210341112105410321040c090b419dcbc300210341122105410421040c080b4188cbc300210341152105410521040c070b41f5cac300210341132105410621040c060b418be7c400210341082105410721040c050b41feccc200210341082104410821050c040b41eacac3002103410b2105410921040c030b41dccac3002103410e2105410a21040c020b41c9cac300210341132105410b21040c010b41bacac3002103410f2105410c21040b200041833c3b0100200041086a2005360200200041046a2003360200200041026a20043a0000200241c0006a24000b9d3e07077f017e027f037e017f027e067f230041b00d6b220924004101210a02400240200241ffff037141014b0d00200941d00a6a4101108e042009418f026a200941d00a6a41086a2802002202360000200920092903d00a37008702200041186a41003a0000200042003703082000200929008002370019200041216a20094180026a41086a290000370000200041286a200236000020004201370300410121020c010b02400240200341086a280200220b0d00200941d00a6a4104108e042009418f026a200941d00a6a41086a280200220a360000200920092903d00a37008702200041186a41003a0000200042003703082000200929008002370019200041216a20094180026a41086a290000370000200041286a200a360000200042013703000c010b0240200b41e400490d00200941d00a6a4105108e042009418f026a200941d00a6a41086a280200220a360000200920092903d00a37008702200041186a41003a0000200042003703082000200929008002370019200041216a20094180026a41086a290000370000200041286a200a360000200042013703000c010b20094198076a41086a200341086a280200360200200920032902003703980720094180026a41186a200141186a29000037030020094180026a41106a200141106a29000037030020094180026a41086a220c200141086a2900003703002009200129000037038002200941d00a6a20094198076a20094180026a108d044101210a200941d00a6a41086a280200210d200941dc0a6a280200210e20092802d40a210f024002400240024002400240024002400240024002400240024002400240024020092802d00a4101460d00200c200e360200200920023b018c022009200f36028402200941b1c5cb003602800220094198076a20094180026a109004200941203602d40a200920094198076a3602d00a20094180026a200941d00a6a1093010240024020092d0080024101470d00200941d0006a4200370300200941c8006a4200370300200941c0006a4200370300200942003703380c010b200941d0006a20094199026a290000370300200941c8006a20094191026a290000370300200941c0006a20094189026a29000037030020092009290081023703380b4101210a0240024020072d00004101470d0020094198026a200741196a29000037030020094190026a200741116a29000037030020094188026a200741096a29000037030020092007290001370380024200211041002111410021120c010b20072d0001210e20094180026a200741046a2802002211200741086a29020022134220882210a710b0014100210a200e41004721120b200941d8006a41186a20094180026a41186a2903002214370300200941d8006a41106a20094180026a41106a220e2903002215370300200941d8006a41086a20094180026a41086a221629030022173703002009200929038002221837035820094198076a41186a201437030020094198076a41106a220c201537030020094198076a41086a221920173703002009201837039807200941b8046a200941386a20094198076a10910420094180026a20092802b804221a20092802c00410920420192016290300370300200c200e290300370300200941d00a6a41086a2216200941a8026a290300370300200941d00a6a41106a221b200941b0026a290300370300200941d00a6a41186a221c200941b8026a290300370300200941d00a6a41206a221d200941c0026a290300370300200920092903800237039807200920094180026a41206a2903003703d00a200928029c02211e0240200928029802220e450d00200941a0016a41106a200c290300370300200941a0016a41086a2019290300370300200941f8006a41086a2016290300370300200941f8006a41106a201b290300370300200941f8006a41186a201c290300370300200941f8006a41206a201d29030037030020092009290398073703a001200920092903d00a3703780b024020092802bc04450d00201a102e0b02400240200e0d004101210520044101470d01200941d00a6a410c108e042009418f026a200941d00a6a41086a2802002202360000200920092903d00a37008702200041186a41003a0000200042003703082000200929008002370019200041216a20094180026a41086a290000370000200041286a2002360000200042013703000c100b200941d4016a201e360200200941b8016a41206a2009290378370300200941b8016a41106a200941a0016a41106a290300370300200941b8016a41086a200941a0016a41086a290300370300200941b8016a41286a200941f8006a41086a290300370300200941e8016a200941f8006a41106a290300370300200941f0016a200941f8006a41186a290300370300200941f8016a200941f8006a41206a290300370300200920092903a0013703b8012009200e3602d0010240024020044101470d00024020092802c8012005470d00200941cc016a2802002006460d020b200941d00a6a410b108e042009418f026a200941d00a6a41086a2802002202360000200920092903d00a3700870241002105200041186a41003a0000200042003703082000200929008002370019200041216a20094180026a41086a290000370000200041286a20023600002000420137030020092802d40141ffffff3f71450d1120092802d001102e0c110b200941d00a6a410a108e042009418f026a200941d00a6a41086a2802002202360000200920092903d00a3700870241002105200041186a41003a0000200042003703082000200929008002370019200041216a20094180026a41086a290000370000200041286a20023600002000420137030020092802d40141ffffff3f71450d1020092802d001102e0c100b4101211b410021044100210c024020092802d801221a0e020605000b41002104201a210c0340200c410176221620046a211920192004200e20194105746a2001412010ec084101481b2104200c20166b220c41014b0d000c050b0b200941186a2002ad42ffff038342004280a0cb9801420010e808200941186a41086a2903002009290318221442809886abec057c2208201454ad7c21140240024002400240024002402011450d002013a7210220120d012002450d002011102e0b20094180026a20012008201410c30220092009290081023703d00a200920094180026a41086a2800003600d70a20092d00800222024106470d044100211d0c010b20094180026a41186a200141186a29000037030020094180026a41106a200141106a29000037030020094180026a41086a200141086a2900003703002009200129000037038002200920134220883e02d80a200920023602d40a200920113602d00a20094198076a20094180026a200941d8006a200941d00a6a2008201410930420092009290099073703b804200920094198076a41086a2800003600bf0420092d00980722024106470d014101211d0b200941b8046a41186a220a200941d8006a41186a290300370300200941b8046a41106a2202200941d8006a41106a290300370300200941b8046a41086a2204200941d8006a41086a290300370300200920092903583703b80420094180026a41186a2207420037030020094180026a41106a2205420037030020094180026a41086a4200370300200942003703800220094180026a41d9fcc6004106108102200941d00a6a4180f4cb0041061081022007200941d00a6a41086a2203290000370300200520092900d00a370300200941106a20094180026a4120108e022009280214210520092802102106200941086a41fcc6cb004110108e02200928020c210c20092802082119200941d00a6a41186a2211200141186a2216290000370300200941d00a6a41106a221a200141106a221b2900003703002003200141086a221c290000370300200920012900003703d00a4120102c2207450d0820072001290000370000200741186a2016290000370000200741106a201b290000370000200741086a201c29000037000020094180026a41146a200c410020191b360200200941ac026a2003290300370200200941b4026a201a290300370200200941bc026a20112903003702002009200837038002200920092903d00a3702a402200920143703880220092005410020061b360290022009419c026a428180808010370200200920073602980220094198076a41186a200a29030037030020094198076a41106a200229030037030020094198076a41086a2004290300370300200920092903b80437039807200941d00a6a200941386a20094198076a10910420092802d00a220320092802d80a20094180026a109404024020092802d40a450d002003102e0b2007102e200941a5026a2009290338370000200941ad026a200941386a41086a290300370000200941b5026a200941386a41106a290300370000200941bd026a200941386a41186a2903003700002009418d026a200141086a29000037000020094195026a200141106a2900003700002009419d026a200141186a290000370000200941003a008402200941143a0080022009200129000037008502200941dd026a200941d8006a41186a290300370000200941d5026a200941d8006a41106a290300370000200941cd026a200941d8006a41086a290300370000200941c5026a200929035837000020094180026a10fe01200bad2108201d0d01200842a08a077e201042e8077e7c42e0ff9fe1007c21080c050b20004200370308200020092903b80437002120004201370300200041206a20023a0000200041186a41003a0000200041286a20092800bf043600000c030b200842d8a1077e201042b8177e7c428093e49f017c21080c030b20004200370308200020092903d00a37002120004201370300200041206a20023a0000200041186a41003a0000200041286a20092800d70a3600000c010b2000200d3600242000420037030820004201370300200041286a200e360000200041206a200f36000041002102200041186a41003a00000c100b410121050c0d0b200042013703082000420037030041002107200041186a41003a0000200041106a20083703000c0a0b0240200e20044105746a2001412010ec08220c0d002004210c4100211b0c010b2004200c411f766a210c0b02400240024002400240201a41ffff0371200241ffff0371220249201b712204201a6a41ffff03712002490d000240024020110d0020094198076a200941d8006a109504200941d00a6a200928029807220220092802a007109604024020092802d00a2219450d0020092902d40a21140240200928029c07450d002002102e0b20092014422088a722163602bc04200920193602b804200941d00a6a200941b8046a109801024020092802d00a2202411c460d0020094198076a200941d00a6a41047241ac0210e9081a20094180026a41047220094198076a41ac0210e9081a200920163602b0040b20092002360280022014a7450d022019102e20092802800221020c020b0240200928029c07450d002002102e0b2009411c360280020c040b20092013422088a722193602bc04200920113602b804200941d00a6a200941b8046a109801024020092802d00a2202411c460d0020094198076a200941d00a6a41047241ac0210e9081a20094180026a41047220094198076a41ac0210e9081a200920193602b0040b20092002360280020b2002411c460d01200941b8046a20094180026a41b00210e9081a20093502b0042114200941d00a6a200941b8046a109704024020092903d00a2008580d0020094198076a410d108e04200941df0a6a20094198076a41086a280200220236000020092009290398073700d70a41002105200041186a41003a000020004200370308200020092900d00a370019200041216a200941d00a6a41086a290000370000200041286a200236000020004201370300200941b8046a108c0420092802d40141ffffff3f71450d0f20092802d001102e0c0f0b20094198076a41186a200941d8006a41186a29030037030020094198076a41106a200941d8006a41106a29030037030020094198076a41086a200941d8006a41086a2903003703002009200929035837039807200941d00a6a200941386a20094198076a10910420092802d00a220720092802d80a10ff01024020092802d40a450d002007102e0b200941d8006a109804200941286a200941dc016a20092903b801200941b8016a41086a29030010fb0120094198076a200941b8046a41b00210e9081a200941c8096a41186a200941386a41186a290300370300200941c8096a41106a200941386a41106a290300370300200941c8096a41086a200941386a41086a290300370300200920092903383703c8094110102c2203450d05200341f8f7c60036020c2003410136020820034281808080103702004110102c2207450d0520074190f8c60036020c20074101360208200742818080801037020020032003280200417f6a220a3602000240200a0d002003280208200328020c2802001103000240200328020c280204450d002003280208102e0b200341046a220a200a280200417f6a220a360200200a0d002003102e0b02400240200728020820094198076a200728020c28020c1101000d004102210320094188076a41023a000020094180076a41003a000020072007280200417f6a220a36020042002108200942003703f006200942013703e8060240200a0d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a220a200a280200417f6a220a360200200a0d002007102e0b20094198076a10dc02410121070c010b200941d00a6a20094198076a41b00210e9081a2009418a0d6a200941d0096a290300370100200941920d6a200941d8096a2903003701002009419a0d6a200941e0096a290300370100200941800d6a41206a200941e6096a29010037010020094180023b01800d200920092903c8093701820d200920073602a80d200941e8066a200941d00a6a200941800d6a10dd0220092903e8064201512107200941e8066a41206a2d0000210320092903f00621080b200941800d6a41186a200141186a290000370300200941800d6a41106a200141106a290000370300200941800d6a41086a200141086a290000370300200920012900003703800d20094198076a41186a200941386a41186a29030037030020094198076a41106a200941386a41106a29030037030020094198076a41086a200941386a41086a2903003703002009200929033837039807200941d00a6a41186a200941d8006a41186a290300370300200941d00a6a41106a200941d8006a41106a290300370300200941d00a6a41086a200941d8006a41086a290300370300200920092903583703d00a200920094190076a2800003600cf0920092009290089073703c8090240024020070d00410621070c010b200920092800cf093600c70a200920092903c8093703c00a4106210720084202510d00200920092800c70a3600b70a200920092903c00a3703b00a200321070b200941c8096a41086a2203200941800d6a41086a290300370300200941c8096a41106a220a200941800d6a41106a290300370300200941c8096a41186a2202200941800d6a41186a290300370300200941900a6a41086a220120094198076a41086a290300370300200941900a6a41106a220420094198076a41106a290300370300200941900a6a41186a220c20094198076a41186a290300370300200941f0096a41186a2219200941d00a6a41186a290300370300200941f0096a41106a2216200941d00a6a41106a290300370300200941f0096a41086a221a200941d00a6a41086a290300370300200920092903800d3703c80920092009290398073703900a200920092903d00a3703f009200920092800b70a3600c70a200920092903b00a3703c00a200941dd0a6a2003290300370000200941e50a6a200a290300370000200941ed0a6a2002290300370000200941143a00d00a200920092903c8093700d50a200941023a00d40a200941f50a6a20092903900a370000200941fd0a6a2001290300370000200941850b6a20042903003700002009418d0b6a200c290300370000200941ad0b6a2019290300370000200941a50b6a20162903003700002009419d0b6a201a290300370000200941950b6a20092903f009370000200941b70b6a20094198076a41026a2d00003a0000200941b50b6a20092f0098073b0000200941c00b6a20073a0000200941bc0b6a2006360200200941b80b6a2005360200200941c80b6a20092800c70a360000200941c10b6a20092903c00a370000200941d00a6a10fe010240024020092802f0060d00420021080c010b427f200bad42d886107e20144288277e7c42c0c995d6017c2208200941e8066a41106a2903007c221420142008541b2114420121080b20002008370308200020092800d00a36001920004200370300200041186a41003a0000200041106a20143703002000411c6a200941d30a6a280000360000024020092802d40141ffffff3f71450d0020092802d001102e0b410121072011450d0d2013a7450d0d2011102e0c0d0b2009411c360280020b2011450d00024020120d002013a7450d012011102e0c010b200941d00a6a41186a200141186a290000370300200941d00a6a41106a200141106a290000370300200941d00a6a41086a200141086a290000370300200920012900003703d00a2009201337029c072009201136029807200941b8046a200941d00a6a200941d8006a20094198076a42004200109304200920092900b9043703e8062009200941b8046a41086a2800003600ef06024020092d00b80422024106460d0020004200370308200020092903e80637002120004201370300200041206a20023a0000200041186a41003a0000200041286a20092800ef063600000c020b410121024101210720040d020c040b4100210220040d0120094198076a4102108e04200941df0a6a20094198076a41086a280200220236000020092009290398073700d70a200041186a41003a000020004200370308200020092900d00a370019200041216a200941d00a6a41086a290000370000200041286a2002360000200042013703000b0240200928028002411c460d0020094180026a108c040b024020092802d40141ffffff3f71450d0020092802d001102e0b410021050c0b0b200941d00a6a41186a200141186a290000370300200941d00a6a41106a200141106a290000370300200941d00a6a41086a200141086a290000370300200920012900003703d00a20092802d8012207200c490d0302400240200720092802d401470d00200741016a22032007490d062007410174220a2003200a20034b1b22034104200341044b1b220341ffffff3f71200346210a200341057421030240024020070d0020094100360298070c010b200941a0076a4101360200200920092802d001360298072009200741057436029c070b200941b8046a2003200a20094198076a107d200941c0046a280200210320092802b8044101460d01200920092802bc043602d001200920034105763602d4010b20092802d001200c4105746a220341206a20032007200c6b41057410ea081a200341186a200941d00a6a41186a290300370000200341106a200941d00a6a41106a290300370000200341086a200941d00a6a41086a290300370000200320092903d00a3700002009200741016a3602d801200941d00a6a200941b8016a41c80010e9081a20094198076a41186a200941d8006a41186a29030037030020094198076a41106a200941d8006a41106a29030037030020094198076a41086a200941d8006a41086a2903003703002009200929035837039807200941b8046a200941386a20094198076a10910420092802b804220720092802c004200941d00a6a109404024020092802bc04450d002007102e0b0240200941ec0a6a28020041ffffff3f71450d0020092802e80a102e0b200941f50a6a2009290338370000200941dd0a6a200141086a290000370000200941e50a6a200141106a290000370000200941ed0a6a200141186a290000370000200941fd0a6a200941386a41086a290300370000200941850b6a200941386a41106a2903003700002009418d0b6a200941386a41186a290300370000200941013a00d40a200941143a00d00a200920012900003700d50a200941b80b6a2005360200200941bc0b6a2006360200200941ad0b6a200941d8006a41186a290300370000200941a50b6a200941d8006a41106a2903003700002009419d0b6a200941d8006a41086a290300370000200941950b6a2009290358370000200941d00a6a10fe014100210720020d02200bad42c0a6087e201042e8077e7c42b090bbca007c2108410021070c030b2003450d040b1036000b200bad42f093097e201042b8177e7c42d086c192017c21080b2000420137030820004200370300200041186a41003a0000200041106a2008370300200928028002411c470d0220070d030c040b200c20071045000b1038000b20094180026a108c042007450d010b20092802d40141ffffff3f71450d0020092802d001102e0b410121070b0240200d41ffffff3f71450d00200f102e0b02402007200e45720d00201e41ffffff3f71450d00200e102e0b200941b00d6a24000f0b2011450d002013a7450d002011102e0b0240200d41ffffff3f71450d00200f102e0b02400240200e450d0020054101730d00201e41ffffff3f710d010b410021020c020b200e102e410021020c010b4101210a410121020b024020072d00000d00200a450d00200741086a280200450d00200741046a280200102e0b02402002450d00200341046a28020041ffffff3f71450d002003280200102e0b200941b00d6a24000bcd0101047f230041106b2202240002400240200141086a28020022034105744116722204417f4c0d002004102c2205450d0120024100360208200220043602042002200536020020022001280200411010742001280204210420032002107602402003450d002003410574210303402002200441201074200441206a2104200341606a22030d000b0b200220012f010c3b010e20022002410e6a41021074200020022802002204200228020810b00102402002280204450d002004102e0b200241106a24000f0b1038000b1036000bd40301037f230041f0006b2203240020034195fec6004108108102200341106a41f4f3c3004109108102024002404120102c2204450d002003422037025420032004360250200341d0006a2001412010742003200328025022012003280258220410a301370340200341ec006a200120046a360200200320013602682003200341c0006a41086a3602642003200341c0006a360260200341206a200341e0006a107c02402003280254450d002001102e0b4120102c2201450d002003422037024420032001360240200341c0006a200241201074200341d0006a200328024022012003280248220210d803200341ec006a200120026a360200200320013602682003200341e0006a3602642003200341d0006a360260200341306a200341e0006a107c02402003280244450d002001102e0b20032802282202200328023822046a41206a2201417f4c0d010240024020010d00410121050c010b2001102c2205450d010b20004100360208200020013602042000200536020020002003411010742000200341106a41101074200020032802202201200210742000200328023022022004107402402003280234450d002002102e0b02402003280224450d002001102e0b200341f0006a24000f0b1036000b1038000bc00502057f077e23004190016b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022010d00200041003602180c010b200328021421042003200341186a2802002202360244200320013602400240024020024104490d00200128000021052003200141046a36024020032002417c6a220636024420064104490d002003200141086a360240200128000421072003200241786a220636024420064110490d002003200241686a3602442003200141186a360240200141106a290000210820012900082109200341e8006a200341c0006a10930120032d00684101460d00200341c8006a41186a20034181016a290000370300200341d8006a200341f9006a290000370300200341d0006a200341f1006a290000370300200320032900693703482003200341c0006a10ab0102402003280200450d00200341003602680c010b200341e8006a200341c0006a200328020410920120032802682202450d00200341206a41086a200341c8006a41086a290300220a370300200341206a41106a200341c8006a41106a290300220b370300200341206a41186a200341c8006a41186a290300220c37030020032003290348220d370320200329026c210e20002008370308200020093703002000200e37021c200020023602182000200736021420002005360210200041246a200d3702002000412c6a200a370200200041346a200b3702002000413c6a200c3702000c010b20034100360250200342013703482003410a3602242003200341086a3602202003200341c8006a36028c01200341fc006a41013602002003420137026c200341909dc5003602682003200341206a3602782003418c016a419cebc000200341e8006a103d1a2003280248200328025010ef020240200328024c450d002003280248102e0b200041003602180b2004450d002001102e0b20034190016a24000bc70603037f027e017f23004180016b22062400200641106a2002109504200628021022072006280218108f02210802402006280214450d002007102e0b024002400240024002402008450d002000410e108e040c010b2006200341086a2208280200411f6a410576ad42004280a0cb9801420010e808200641106a2001200420062903007c220942809886abec057c220a2005200641086a2903007c2009200454ad7c200a200954ad7c220410c302200620062900113703702006200641106a41086a2207280000360077024020062d0010220b4106470d00200641c8006a200437030020072008280200360200200641246a200141086a2900003702002006412c6a200141106a290000370200200641346a200141186a2900003702002006200a370340200620032902003703102006200129000037021c200641d0006a4195fec6004108108102200641f0006a41ccf4c30041051081024120102c2203450d032006422037026420062003360260200641e0006a20024120107420062802682203417f4c0d04200628026021010240024020030d00410121020c010b2003102c2202450d040b20022001200310e908210202402006280264450d002001102e0b200341206a2201417f4c0d042001102c2208450d03200641003602682006200136026420062008360260200641e0006a200641d0006a41101074200641e0006a200641f0006a41101074200641e0006a20022003107402402003450d002002102e0b2006280218220141146a2203417f4c0d0420062802602102200628026821080240024020030d00410121070c010b2003102c2207450d040b200641003602582006200336025420062007360250200628021021032001200641d0006a1076200641d0006a200320011074200641d0006a2006411c6a41201074200620043703782006200a370370200641d0006a200641f0006a411010742002200820062802502201200628025810b20102402006280254450d002001102e0b02402006280264450d002002102e0b02402006280214450d002003102e0b200041063a00000c020b2000200b3a000020002006290370370001200041086a20062800773600000b200341046a280200450d002003280200102e0b20064180016a24000f0b1036000b1038000be50103017f017e017f230041206b220324002003410036020820034201370300200320022802103602102003200341106a410410742003200241146a2802003602102003200341106a41041074200229030021042003200241086a290300370318200320043703102003200341106a411010742003200241246a4120107420022802182105200241206a28020022022003107602402002450d002002410574210203402003200541201074200541206a2105200241606a22020d000b0b2000200120032802002205200328020810b20102402003280204450d002005102e0b200341206a24000bf50101047f230041306b2202240020024195fec6004108108102200241106a41ccf4c3004105108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000bee0502087f057e23004190016b220324002003200236020c20032001360208200341106a2001200210ed0202400240024002400240200328021022010d00200041003602000c010b200328021421022003200341186a280200360244200320013602402003200341c0006a10ab0102400240024020032802000d002003280244220420032802042205490d002005417f4c0d040240024020050d00410121060c010b200510322206450d06200328024421040b024020042005490d0020062003280240200510e9082107200328024422042005490d072003200420056b3602442003200328024020056a360240200341e8006a200341c0006a109301024020032d00684101470d0020050d010c020b200341c8006a41186a220420034181016a290000370300200341c8006a41106a2208200341f9006a290000370300200341c8006a41086a2209200341f1006a290000370300200320032900693703482003280244220a410f4b0d022005450d010b2006102e0b20034100360250200342013703482003410a3602242003200341086a3602202003200341c8006a36028c01200341fc006a41013602002003420137026c200341909dc5003602682003200341206a3602782003418c016a419cebc000200341e8006a103d1a2003280248200328025010ef020240200328024c450d002003280248102e0b200041003602000c010b200341206a41086a2009290300220b370300200341206a41106a2008290300220c370300200341206a41186a2206200429030037030020032003290348220d3703202003200a41706a36024420032003280240220441106a360240200441086a290000210e2004290000210f200041086a20053602002000200536020420002007360200200041386a200e370300200041306a200f3703002000410c6a200d370200200041146a200b3702002000411c6a200c370200200041246a20062903003702000b2002450d002001102e0b20034190016a24000f0b1038000b1036000b2005200441b8b2c0001056000bd34804017f027e107f037e230041d0016b2202240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e1c0102030405060708090a0b0c0d0e0f101112131415161718191a1b00010b20014184026a350200210320014180026a3502002104200141f4016a2802002105200141e8016a2802002106200141dc016a2802002107200141d0016a2802002108200141c4016a2802002109200141b8016a280200210a200141ac016a280200210b200141a0016a280200210c20014194016a280200210d20014188016a280200210e200141fc006a280200210f200141f0006a2802002110200141e4006a2802002111200141d8006a2802002112200141cc006a2802002113200141c0006a2802002114200241086a200141386a109706200342889b047e200442f0aefa017e7c417f2005417f2006417f2007417f2008417f2009417f200a417f200b417f200c417f200d417f200e417f200f417f2010417f2011417f2012417f201420136a220120012014491b22016a221420142001491b22016a221420142001491b22016a221420142001491b22016a221420142001491b22016a221420142001491b22016a221420142001491b22016a221420142001491b22016a221420142001491b22016a221420142001491b22016a221420142001491b22016a221420142001491b22016a221420142001491b22016a221420142001491b22016a221420142001491bad42e8aede067e7c200235021042a0ede0017e7c4280e59af7007c21030240200228020c41808080807872418080808078460d002002280208102e0b200041003b0108200020033703000c1b0b02400240024002400240024002400240024002400240200141086a2802000e0b000102030405060708090a000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194cccc003602c0012002200241c0016a360218200241086a41ecc5cc001044000b2001410c6a3502002103200241086a10a90320022903102104200041003b0108200020032004428094ebdc03807e20032004428094ebdc03827e2203428094ebdc038042ffffffff0f2003428080808080c0b2cd3b541b2003428094ebdc03824280cab5ee0156ad7c42ffffffff0f837c3703000c230b200041003b0108200042b0f7d0003703000c220b200041013b0108200042a8afc8303703000c210b200241086a10a90320022903102103200041013b0108200020033703000c200b200241086a10a90320022903102103200041013b0108200020033703000c1f0b200041013b0108200042e8f084f0003703000c1e0b200041013b01082000200141146a3502004290a7fa2f7e3703000c1d0b200041013b01082000200141146a3502004280f4f02f7e3703000c1c0b200041013b01082000417f200141186a280200220141016a221420142001491bad42f8f88b307e3703000c1b0b200041003b01082000200141146a35020042e8077e3703000c1a0b024002400240024002400240024020012d00040e0700010203040506000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a41ecb0c4001044000b200041003b0108200042d8c4c7c8003703000c1e0b200041003b010820004290cf93bc013703000c1d0b200041003b0108200042f8a8ee87013703000c1c0b200041003b010820004288b68eca013703000c1b0b200041003b0108200042d8c4c7c8003703000c1a0b200041003b0108200042f8a8ee87013703000c190b0240024002400240200141086a2802000e0400010203000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194cccc003602c0012002200241c0016a360218200241086a4190afc4001044000b200041003b010820002001411c6a280200220141e400200141e4004b1bad4298d70a7e4280a9f3bbb0027c3703000c1a0b200041003b010820002001411c6a280200220141e400200141e4004b1bad4298d70a7e4280a9f3bbb0027c3703000c190b200041003b010820004280c2d72f3703000c180b200041023b0108200042a0bebbd8003703000c170b02400240024002400240024020012d00040e06000102030405000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a41e89bc4001044000b200041003b0108200042a887a2cf003703000c1a0b200041003b0108200042c8f8978f013703000c190b200041003b0108200042e8e398cf003703000c180b200041003b010820004280c6928b013703000c170b200041003b0108200042b8a8b4ce003703000c160b02400240024002400240200141086a2802000e050001020304000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194cccc003602c0012002200241c0016a360218200241086a4194a7c7001044000b200041003b0108200042e8dae8df003703000c180b200041003b0108200042f085f7cc003703000c170b200041003b0108200042988ef29a013703000c160b200041003b0108200042d0e0dad6003703000c150b200041023b0108200042003703000c140b024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200141086a2d00000e18000102030405060708090a0b0c0d0e0f1011121314151617000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a41f4ebc6001044000b200041003b0108200042f0a8939e023703000c290b200041003b0108200042c8c6ce9e013703000c280b200041003b0108200042b8f4cad7013703000c270b200041003b010820002001410c6a350200220342f8ef9e017e20034280c2d72f7e7c4290fb86ed037c3703000c260b200041003b010820004280e5a9f2003703000c250b200041003b01082000200141146a350200220342f094d6027e200342c0f0f50b7e7c4280d0d98e017c3703000c240b200041003b010820004298e7fcf1003703000c230b200041003b0108200042f0dba8c1003703000c220b200041003b010820004280f7b6bf013703000c210b200041003b0108200042c8b6d0303703000c200b200041003b0108200042c8b6d0303703000c1f0b200041003b0108200042c8b6d0303703000c1e0b200041003b0108200042808fe5303703000c1d0b200041003b0108200042d0a1e4303703000c1c0b200041003b01082000200141146a35020042b891027e428086e8307c3703000c1b0b200041003b010820002001412c6a350200220342c0db9d017e20034280c2d72f7e7c42c0abb4c9037c3703000c1a0b200041003b0108200042a0bde0303703000c190b200041003b01082000200141186a35020042a8edc0107e42d8c8e8c0167c3703000c180b200041003b0108200042c88dfff4d5033703000c170b200041003b0108200042f8b3dac4013703000c160b200041003b01082000200141106a35020022034298bfe50e7e20034280cee4cd027e7c4280e9c9d6017c3703000c150b200041003b010820002001412c6a350200220342b08a9e017e20034280c2d72f7e7c428091a2cb037c3703000c140b200041003b01082000200141146a350200220342b0b2cf087e200342c0f0f50b7e7c20034280c2d72f7e7c42b0fbf2107c3703000c130b108405000b200041003b0108200042b08ee2d00342b0a1bafa0220012802041b3703000c110b0240024002400240200141086a2802000e0400010203000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a41c499c9001044000b200041003b010820002001411c6a280200220141e400200141e4004b1bad4298d70a7e42c0c6cbccb0027c3703000c120b200041003b010820002001411c6a280200220141e400200141e4004b1bad4298d70a7e42c0c6cbccb0027c3703000c110b200041003b0108200042c0cf8e313703000c100b200041003b01082000200141286a35020042d0e50d7e2001411c6a35020042e092197e7c42c0b7828b017c3703000c0f0b109f04000b02400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200141086a2d00000e1a000102030405060708090a0b0c0d0e0f10111213141516171819000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a41c0accb001044000b200041003b0108200042a8cad6cf013703000c250b200041003b01082000200141106a35020042a0f80c7e42f89f9fcf007c3703000c240b200041003b010820004288dbaed7013703000c230b200041013b0108200042d0ed9c85013703000c220b200041003b010820004280ac9cd3003703000c210b200041003b010820004288dc82313703000c200b200041003b010820004280b582313703000c1f0b200041003b0108200042b0d0b5b4013703000c1e0b200041003b0108200042d89afd8e013703000c1d0b200041003b01082000429080ef373703000c1c0b200041013b0108200042f899c995013703000c1b0b200041003b01082000429887abd1333703000c1a0b200041003b010820004290fbc2c9323703000c190b200041003b0108200042d09be6303703000c180b200041003b01082000200141146a35020042a01f7e42f0ae87d1007c3703000c170b200041013b01082000200141146a35020042a01f7e42f0ae87d1007c3703000c160b200041003b01082000200141146a35020042b8177e4298d7a9c9007c3703000c150b200041013b01082000200141146a35020042b8177e4298d7a9c9007c3703000c140b200041003b010820002001412c6a35020042b8177e42c0cae5da007c3703000c130b200041003b0108200042b880d9d1013703000c120b200041003b01082000428881b08d013703000c110b200041003b010820004298c3b48d013703000c100b200241086a10a90320022903102103200041003b0108200020033703000c0f0b200041013b0108200042c88892a5033703000c0e0b200041003b010820004290848df0013703000c0d0b0240024002400240024002400240200141086a2d00000e0700010203040506000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a41b8afc9001044000b200041013b01082000200141346a35020042b882077e200141386a35020042c0b5e5097e7c42a0c0b291397c3703000c110b200141106a3502002103200241086a2001410c6a28020010970420022903082104200041013b01082000427f2004200342a01f7e42d8878f1c7c22037c220420042003541b3703000c100b200141146a2802002114024002402001410c6a28020041014b0d00200241086a200141106a280200109704427f2014ad42a01f7e42f8f3e32f7c220320022903087c220420042003541b21030c010b2014ad4288277e4280d997a0027c21030b200041013b0108200020033703000c0f0b200041013b0108200042a0949fe6003703000c0e0b200041013b01082000427f200141306a35020042b8177e42e090bd8a027c2203200141386a2903007c220420042003541b3703000c0d0b200041003b010820004290d591bc013703000c0c0b0240024002400240024002400240200141086a2d00000e0700010203040506000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a41b8afc9001044000b200041013b01082000200141346a35020042b882077e200141386a35020042c0b5e5097e7c42a0c0b291397c3703000c100b200141106a3502002103200241086a2001410c6a28020010970420022903082104200041013b01082000427f2004200342a01f7e42d8878f1c7c22037c220420042003541b3703000c0f0b200141146a2802002114024002402001410c6a28020041014b0d00200241086a200141106a280200109704427f2014ad42a01f7e42f8f3e32f7c220320022903087c220420042003541b21030c010b2014ad4288277e4280d997a0027c21030b200041013b0108200020033703000c0e0b200041013b0108200042a0949fe6003703000c0d0b200041013b01082000427f200141306a35020042b8177e42e090bd8a027c2203200141386a2903007c220420042003541b3703000c0c0b200041003b010820004290d591bc013703000c0b0b0240024002400240024002400240200141086a2d00000e0700010203040506000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a4188f3c0001044000b200041003b01082000200141146a35020022034288f1117e42d0ef9dbc017c2204200342c8ac137e42c0da8abc017c221520042015561b2204200342c082147e4290faffaf017c220320042003561b3703000c0f0b200041003b0108200042f8a1f095013703000c0e0b200041003b010820002001410c6a35020042e08f1a7e42f0e2efee007c3703000c0d0b4288e3e7d40021030240024002402001410c6a2802000e03010200010b200141106a35020042e0b30e7e42c089ecd1007c21030c010b42f0f7f0920221030b200041003b0108200020033703000c0c0b42e0fca3da022103024020012d00090d00200241086a10a903200229031021030b200041003b0108200020033703000c0b0b200041003b010820002001410c6a350200220342a0838b377e200342c0d1e1237e7c20034280c6868f017e7c4280c2d72f7c3703000c0a0b0240024002400240024002400240024020012d00040e080001020304050607000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a41a4c3cb001044000b200041003b010820004280e1eb173703000c0f0b200041003b010820004280e1eb173703000c0e0b200041003b010820004280e1eb173703000c0d0b200041003b010820004280e1eb173703000c0c0b200041003b010820004280e1eb173703000c0b0b200041003b010820004280e1eb173703000c0a0b200041003b010820004280e1eb173703000c090b0240024002400240200141086a2802000e0400010203000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a4184ccc2001044000b200041003b0108200042c88b98ff003703000c0a0b200041013b0108200042f8b59f92013703000c090b200041013b0108200042c0b4c6cb003703000c080b024002400240024002400240200141086a2d00000e06000102030405000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a41e0f3c0001044000b200041003b0108200042e8b0efff043703000c0b0b200041003b0108200042b8e5dbd3013703000c0a0b200041003b0108200042b895a182053703000c090b20004180023b0108200042a8a0c4a7043703000c080b200041003b0108200042e0ecad90033703000c070b02400240024002400240200141086a2802000e050001020304000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194cccc003602c0012002200241c0016a360218200241086a41aca7c7001044000b200041003b0108200042f0ee8291013703000c090b200041003b0108200042a8aac0cc013703000c080b200041003b010820004288b0b6e7013703000c070b200041003b010820004280c2eca2023703000c060b024002400240024002400240024020012f01040e0400010203000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194cccc003602c0012002200241c0016a360218200241086a41fcc5cc001044000b200141106a280200220741ffffffff00712007470d0b41082106200141086a2802002114024020074104742201450d002001102c2206450d030b02400240024002402001410476220820074f0d00200141037622052007200520074b1b22054104200541044b1b220541ffffffff00712005464103742108200541047421050240024020010d00200241003602080c010b200241086a41086a41083602002002200136020c200220063602080b200241c0016a20052008200241086a107d200241c8016a280200210120022802c0014101460d0120022802c4012106200141047621080b20142014200741b0026c6a470d0142002103200621050c020b20010d040c0d0b200741b0026c2105200741047441706a4104762109200621010340200241086a2014109704200141086a200241086a41086a29030037030020012002290308370300200141106a2101201441b0026a2114200541d07d6a22050d000b2006200941016a41047422146a2105420021034100210141000d000340427f2003200620016a2903007c220420042003541b21032014200141106a2201470d000b0b427f2007ad4288b0fa007e20037c42c8b8fa067c220420042003541b21032005200622146b210141012107024003402001450d01200141706a2101201441086a2105201441106a211420052d00004101460d000b410021070b02402008450d002006102e0b200041003a0009200020073a0008200020033703000c0a0b200241086a200141086a2802001097042002290308210320022d00102101200041003a0009200020013a00082000427f200342d0ceae3d7c220420042003541b3703000c090b200141106a280200220741ffffffff00712007470d0941082106200141086a2802002114024020074104742201450d002001102c2206450d010b024002402001410476220820074f0d00200141037622052007200520074b1b22054104200541044b1b220541ffffffff00712005464103742108200541047421050240024020010d00200241003602080c010b200241086a41086a41083602002002200136020c200220063602080b200241c0016a20052008200241086a107d200241c8016a280200210120022802c0014101460d0120022802c4012106200141047621080b20142014200741b0026c6a470d0242002103200621050c030b2001450d090b1036000b200741b0026c2105200741047441706a4104762109200621010340200241086a2014109704200141086a200241086a41086a29030037030020012002290308370300200141106a2101201441b0026a2114200541d07d6a22050d000b2006200941016a41047422146a2105420021034100210141000d000340427f2003200620016a2903007c220420042003541b21032014200141106a2201470d000b0b427f2007ad42e88dfb007e20037c42e0b8a1077c220420042003541b21032005200622146b210141012107024003402001450d01200141706a2101201441086a2105201441106a211420052d00004101460d000b410021070b02402008450d002006102e0b200041003a0009200020073a0008200020033703000c050b0240024002400240024002400240024002400240024002400240024002400240200141086a2d00000e10000102030405060708090a0b0c0d0e0f000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a41f89bc4001044000b200041003b010820004288b69ac9003703000c120b200041003b0108200042a0ac9c8e013703000c110b200041003b01082000200141146a350200220342b8fea8037e200342c0f0f50b7e7c20034280c2d72f7e7c4290cae8c7277c3703000c100b200041003b0108200042f0d98bc5273703000c0f0b200041003b010820004288bb99aa013703000c0e0b200041003b010820004288abfb99013703000c0d0b200041003b0108200042e0ecafc2003703000c0c0b200041003b010820004288f0efc2003703000c0b0b200041003b0108200042d092b3c2003703000c0a0b200041003b0108200042c8fee29f013703000c090b200041003b0108200042e891b0e6273703000c080b200041003b0108200042e099e6a8013703000c070b200041003b0108200042889e8ad1003703000c060b200041003b010820004288ee8ea8013703000c050b200041003b0108200042e8dcfb90013703000c040b0240024002400240024002400240024002400240024020012d00040e0b000102030405060708090a000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194cccc003602c0012002200241c0016a360218200241086a4198f3c0001044000b200241086a200141286a2802001097042002290308210320022d00102101200041003a0009200020013a00082000427f200342f0f6e0d5007c220420042003541b3703000c0c0b200041003b0108200042f097e5d0003703000c0b0b200041003b0108200042a0fe91d1003703000c0a0b200041003b010820004298b0a4cf003703000c090b200041003b0108200042e0cedfdf003703000c080b200041003b0108200042b0b19ed0003703000c070b200041003b0108200042c0ff90a8013703000c060b200041003b0108200042a0a68f93013703000c050b200041003b0108200042c8e69193013703000c040b200241086a200141c8006a2802001097042002290308210320022d00102101200041003a0009200020013a00082000427f200342b0c1a4e5017c220420042003541b3703000c030b02400240024002400240200141086a2d00000e050001020304000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a41889cc4001044000b200241086a200141186a2802002201109704200241003602c801200242013703c0012001200241c0016a10900220023502c8012103024020022802c401450d0020022802c001102e0b2002290308210420022d00102101200041003a0009200020013a00082000427f427f2004200342e8077e42b0b182067c22037c220420042003541b220342c0b2cd3b7c220420042003541b3703000c050b200041003b01082000427f200141146a350200220342a08a077e2001412c6a350200220442e8077e22157c42e0ff9fe1007c2216200342d8a1077e200442b8177e7c428093e49f017c221720162017561b2216200342c0a6087e20157c42b090bbca007c221520162015561b2215200342d886107e20044288277e7c42c0c995d6017c220320152003561b2203200141306a2903007c220420042003541b3703000c040b200041003b01082000427f200141346a350200220342a08a077e42f8c287e1007c2204200342f096087e42b8f9a5ca007c221520042015561b220420034298c5107e4288b6fef8017c220320042003561b2203200141c8006a2903007c220420042003541b3703000c030b200041003b01082000200141346a35020042f8c0077e42b8dfe7a6017c3703000c020b0240024002400240024002400240024002400240200141086a2802000e0a00010203040506070809000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a41e0ecc0001044000b200041003b01082000200141146a35020042e8077e42a0a080ec017c3703000c090b200041003b0108200042c0bcd7fc003703000c080b200041003b0108200042c8e4e73f3703000c070b200041003b0108200042b08ddb93013703000c060b200041003b010820004298c6bf89013703000c050b200041003b0108200042d8cac8c7003703000c040b200041003b0108200042b897cedd023703000c030b200041003b01082000428887a88c023703000c020b200041003b0108200042c89596c7003703000c010b0240024002400240024002400240200141086a2d00000e0700010203040506000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602c40120024194c3cb003602c0012002200241c0016a360218200241086a41d4cec8001044000b200041003b01082000200141346a35020042d00f7e42a096ca8f017c3703000c050b200041003b0108200042a0cfe181013703000c040b200041003b01082000200141346a35020042d00f7e42a0899387017c3703000c030b200041003b0108200042c0c1f7d5003703000c020b200041003b010820004288fbb8de013703000c010b200041003b010820004280e4c4f7003703000b200241d0016a24000f0b1038000baa0303067f027e017f230041b0016b22012400200141386a2000109504200141c8006a2001280238220220012802402203109604024020012802482200450d002002200310ff010b20014188016a41086a2203200141c8006a41106a29030037030020014188016a41106a2204200141c8006a41186a29030037030020014188016a41186a2205200141c8006a41206a29030037030020014188016a41206a2206200141f0006a2802003602002001200141c8006a41086a290300370388010240024020000d00200128023c450d012002102e0c010b20014180016a2903002107200141f8006a2903002108200128024c2109200141106a41206a2006280200360200200141106a41186a2005290300370300200141106a41106a2004290300370300200141106a41086a200329030037030020012001290388013703100240200128023c450d002002102e0b200141e0006a2001412c6a290200370300200141d8006a200141246a290200370300200141d0006a2001411c6a290200370300200120012902143703482001200141c8006a2008200710fb012009450d002000102e0b200141b0016a24000bc64b0a017f017e047f017e017f037e087f017e147f027e230041d0076b22042400200441c0006a20024180026a290000370300200441386a200241f8016a290000370300200441286a41086a200241f0016a290000370300200420022900e80137032820022903002105200441e8016a200241880210e9081a200420044180056a3602f403200420044180056a3602f003200441d0056a200441e8016a41086a2206109a04200441f8036a200441e0026a2207109a0402400240024002400240200441d0056a200441f8036a412010ec08450d00200441fc016a2802002208450d00200441f4016a2802002102200841246c21080340024020022d00004101470d00200241016a28000041c28289aa04470d002004200241106a2802003602d4052004200241086a2802003602d005200441f8036a200441d0056a10930220042903f8034203510d00200441ec026a2802002208450d022004280288042109200429038004210a200441e4026a2802002102200841246c2108024002400240024002400340024020022d00004101470d00200241016a28000041c28289aa04470d002004200241106a2802003602d4052004200241086a2802003602d005200441f8036a200441d0056a10930220042903f8034203510d0020042903e801200a520d09200a200429038004520d092009200428028804470d09200441f8036a200641f00010e9081a2004200441d0036a22023602e804200441f8036a2002109b04450d0a200441f8036a200741f00010e9081a200420023602e804200441f8036a2002109b04450d0b2003280210210b20032802002107200441e8016a41186a22024200370300200441e8016a41106a22084200370300200441e8016a41086a22064200370300200442003703e801200441f8036a41a8f8c60041041081022006200441f8036a41086a2209290000370300200420042900f8033703e801200441f8036a41e38bc500410b10810220022009290000370300200820042900f803370300200441186a200441e8016a10850302402007420020052004290320420020042802181b7d220a200a2005561b220a42e01280a7417f200a428080808080ac02541b460d00200441e8016a4102109c0420004201370300200041286a200441e8016a41206a290300370300200041206a2002290300370300200041186a2008290300370300200041106a2006290300370300200020042903e8013703080c0d0b2004418c056a200441286a41086a29030037020020044194056a200441286a41106a2903003702002004419c056a200441286a41186a290300370200200441e2c289ab0636028005200420042903283702840520044198016a41106a200341106a28020036020020044198016a41086a200341086a2902003703002004200329020037039801200441d0056a20044180056a20044198016a109d04200428029006450d02200441e8016a41066a200441d0056a41d00010e9081a200441f8036a200441e8016a41d60010e9081a200441c8006a200441f8036a41066a41d00010e9081a20044198016a200441c8006a41d00010e9081a4101210841002103024020012d00004101470d00200441e8016a41186a2202200141196a290000370300200441e8016a41106a2203200141116a290000370300200441e8016a41086a2206200141096a290000370300200420012900013703e8014120102c2208450d06200820042903e801370000200841186a2002290300370000200841106a2003290300370000200841086a2006290300370000410121030b200420053703f803200441f8036a41086a20044198016a41d00010e90821022004200b3602d404200420073602d00441d000102c2206450d05200441e8016a41086a2207200241086a290300370300200441e8016a41106a2201200241106a290300370300200441e8016a41186a2209200241186a290300370300200420022903003703e801200441f8036a41286a290300210a200441a8046a290300210c200441f8036a41386a290300210d200441b8046a290300210e200441d0056a200441f8036a41c8006a10c501200641386a200e3703002006200d370330200641286a200c3703002006200a370320200641186a2009290300370300200641106a2001290300370300200641086a2007290300370300200620042903e801370300200620042903d005370340200641c8006a200441d0056a41086a280200360200200420033602f804200420033602f404200420083602f0044108102c2202450d05200442083702e406200420023602e006200420053703e8014108210f200441e0066a200441e8016a41081074200441e8016a419997c500108a03200441d0056a20042802e801220820042802f001108b0320042902d405420020042802d00522021b210a2002410120021b2109024020042802ec01450d002008102e0b2004200a4220883e02c407200420093602c007200441106a200441c0076a10ab01410021104100211120042802100d042004280214221220042802c40741286e2202200220124b1bad42287e220c422088a70d06200ca72202417f4c0d060240024020020d00410821130c010b2002102c2213450d060b200241286e2114024020120d00410021120c040b41002115034002400240024020042802c40722084108490d00201541016a211620042802c0072207290000210c2004200841786a22013602c4072004200741086a3602c00741002102200441003a008802200841776a21080240034020012002460d01200441e8016a20026a200720026a220341086a2d00003a00002004200341096a3602c0072004200241016a22033a008802200420083602c4072008417f6a21082003210220034120470d000b200441d0056a41186a2202200441e8016a41186a290300370300200441d0056a41106a2208200441e8016a41106a290300370300200441d0056a41086a2207200441e8016a41086a290300370300200420042903e8013703d005200341ff01714120490d01200441c0066a41086a2007290300220d370300200441c0066a41106a2008290300220e370300200441c0066a41186a20022903002217370300200441a0066a41186a22082017370300200441a0066a41106a2203200e370300200441a0066a41086a2207200d370300200420042903d005220d370380072004200d3703c0062004200d3703a00620152014470d03201441016a220220144f0d020c0b0b200241ff0171450d00200441003a0088020b410021104108210f02402014450d00201441286c450d002013102e0b410021110c070b201441017422012002200120024b1b22024104200241044b1bad42287e220d422088a7454103742102200da721010240024020140d00200441003602e8010c010b200441083602f001200420133602e8012004201441286c3602ec010b200441d0056a20012002200441e8016a107d20042802d8052102024020042802d0054101470d002002450d090c080b20042802d4052113200241286e21140b2013201541286c6a2202200c370300200220042903a006370308200241106a2007290300370300200241186a2003290300370300200241206a20082903003703002016211520162012460d040c000b0b200241246a21022008415c6a22080d000c080b0b200441e8016a4102109c0420004201370300200041286a200441e8016a41206a290300370300200041206a200441e8016a41186a290300370300200041186a200441e8016a41106a290300370300200041106a200441f0016a290300370300200020042903e8013703080c0a0b2012410020131b21112014410020131b21102013410820131b210f0b200441e8016a419997c500200441e0066a108c03200441d0056a20042802e801220820042802f001108d0320042902d405420020042802d00522021b210c024020042802ec01450d002008102e0b200c422088210d20042802e806211820042802e406211920042802e006211a0240200aa7450d002009102e0b2002410120021b211b200da7211c200ca7211d200441e8016a41086a2202200641086a290300370300200441e8016a41106a2208200641106a290300370300200441e8016a41186a2203200641186a290300370300200441e8016a41206a2207200641206a290300370300200441e8016a41286a2201200641286a290300370300200441e8016a41306a2209200641306a290300370300200441e8016a41386a2214200641386a290300370300200441d0056a41086a2212200641cc006a280200360200200420062903003703e801200420062902443703d00502400240200628024022130d00410021070c010b20044180076a41386a2215201429030037030020044180076a41306a2214200929030037030020044180076a41286a2209200129030037030020044180076a41206a2201200729030037030020044180076a41186a2207200329030037030020044180076a41106a2203200829030037030020044180076a41086a22082002290300370300200441c0076a41086a22022012280200360200200420042903e80137038007200420042903d0053703c00720044180056a41386a201529030037030020044180056a41306a201429030037030020044180056a41286a200929030037030020044180056a41206a200129030037030020044180056a41186a200729030037030020044180056a41106a200329030037030020044180056a41086a2008290300370300200420042903800737038005200420133602c005200441c4056a220820042903c007370200200841086a20022802003602004108102c2202450d01200442083702ec01200420023602e801200420053703d005200441e8016a200441d0056a41081074200441f4016a220241086a41002900a19745370000200241002900999745370000200420044180056a36028402200441c0066a200441e8016a10ae01024020042802ec01450d0020042802e801102e0b200441e8016a200441c0066a108e0320042802e801220820042802f001108f022102024020042802ec01450d002008102e0b02400240024020020d00200441d0056a20044180056a41d00010e9081a200441a0066a200441f0046a10c801200441e8016a200441d0056a41d00010e9081a200441e8016a41d0006a220241086a200441a0066a41086a280200360200200220042903a006370200200441d0056a200441c0066a108e0320042802d005220220042802d805200441e8016a108f03024020042802d405450d002002102e0b024020042802ac022202450d00200241306c450d0020042802a802102e0b024020042802bc0241ffffff3f71450d0020042802b802102e0b200441d0056a41186a2201200441c0066a41186a290300370300200441d0056a41106a2209200441c0066a41106a290300370300200441d0056a41086a2214200441c0066a41086a290300370300200420042903c0063703d00541002102024020110e020302000b4100210220112108034020022008410176220320026a2207200f200741286c6a2903002005561b2102200820036b220841014b0d000c020b0b4100210720042802c4052202450d02200241306c450d0220042802c005102e0c020b200f200241286c6a290300220a2005510d002002200a2005546a21020b200441e8016a41186a2001290300370300200441e8016a41106a2009290300370300200441e8016a41086a2014290300370300200420042903d0053703e8010240024020112002490d00024020112010470d00201041016a22082010490d05201041017422032008200320084b1b22084104200841044b1bad42287e220a422088a7454103742108200aa721030240024020100d00200441003602a0060c010b200441083602a8062004200f3602a0062004201041286c3602a4060b200441e0066a20032008200441a0066a107d20042802e806210820042802e0064101460d0220042802e406210f200841286e21100b200f200241286c6a220841286a2008201120026b41286c10ea081a20082005370300200841206a200441e8016a41186a2203290300370300200841186a200441e8016a41106a2201290300370300200841106a200441e8016a41086a2209290300370300200820042903e8013703082003200441d0056a41186a2903003703002001200441d0056a41106a2903003703002009200441d0056a41086a290300370300200420042903d0053703e8010240201c201d470d00201d41016a2202201d490d05201d41017422082002200820024b1b22024104200241044b1b220241ffffff3f7120024621082002410574210202400240201d0d00200441003602a0060c010b200441013602a8062004201b3602a0062004201d4105743602a4060b200441e0066a20022008200441a0066a107d20042802e8062102024020042802e0064101470d002002450d060c050b20042802e406211b2002410576211d0b41012107201141016a2111201b201c4105746a220220042903e801370000200241186a2003290300370000200241106a2001290300370000200241086a2009290300370000201c41016a211c0c020b200220111045000b2008450d020c010b200641d0006a220220026b220841d0006d210302402008450d00200341d0006c2108200241c4006a21020340024020022802002203450d00200341306c450d002002417c6a280200102e0b200241d0006a2102200841b07f6a22080d000b0b2006102e0240024002402007450d00024002400240201c450d00201c4105742106200441ac026a2102201b21080340200441c0076a2008108e03200441e8016a20042802c007220720042802c807109003200441d0056a41086a2201200441e8016a41086a290300370300200441d0056a41106a2209200441e8016a41106a290300370300200441d0056a41186a2214200441e8016a41186a290300370300200441d0056a41206a2212200441e8016a41206a290300370300200441d0056a41286a2213200441e8016a41286a290300370300200441d0056a41306a2215200441e8016a41306a290300370300200441d0056a41386a2216200441e8016a41386a290300370300200441c0066a41086a221e200241086a290200370300200441c0066a41106a221f200241106a290200370300200441c0066a41186a2220200241186a280200360200200420042903e8013703d005200420022902003703c006024020042802a8022203450d0020044180056a41386a201629030037030020044180056a41306a201529030037030020044180056a41286a201329030037030020044180056a41206a201229030037030020044180056a41186a201429030037030020044180056a41106a200929030037030020044180056a41086a2001290300370300200441a0066a41086a201e290300370300200441a0066a41106a201f290300370300200441a0066a41186a2020280200360200200420042903d00537038005200420042903c0063703a0060b024020042802c407450d002007102e0b20030d02200841206a2108200641606a22060d000b0b4200210a410821070c010b20044180076a41386a220220044180056a41386a29030037030020044180076a41306a220120044180056a41306a29030037030020044180076a41286a220920044180056a41286a29030037030020044180076a41206a221420044180056a41206a29030037030020044180076a41186a221220044180056a41186a29030037030020044180076a41106a221320044180056a41106a29030037030020044180076a41086a221520044180056a41086a290300370300200441e0066a41086a2216200441a0066a41086a290300370300200441e0066a41106a221e200441a0066a41106a290300370300200441e0066a41186a221f200441a0066a41186a280200360200200420042903800537038007200420042903a0063703e00641e000102c2207450d04200720042903800737030020072003360240200720042903e006370244200741386a2002290300370300200741306a2001290300370300200741286a2009290300370300200741206a2014290300370300200741186a2012290300370300200741106a2013290300370300200741086a2015290300370300200741cc006a2016290300370200200741d4006a201e290300370200200741dc006a201f280200360200024020064120470d00428180808010210a0c010b200841206a2112201b201c4105746a222141606a2122200441e8016a41c4006a2102428180808010210a0340201221080340200441c0076a2008108e03200441e8016a20042802c007221420042802c807109003200441d0056a41086a2206200441e8016a41086a2223290300370300200441d0056a41106a2201200441e8016a41106a2224290300370300200441d0056a41186a2209200441e8016a41186a2225290300370300200441d0056a41206a2212200441e8016a41206a2226290300370300200441d0056a41286a2213200441e8016a41286a2227290300370300200441d0056a41306a2215200441e8016a41306a2228290300370300200441d0056a41386a2216200441e8016a41386a2229290300370300200441c0066a41086a221e200241086a290200370300200441c0066a41106a221f200241106a290200370300200441c0066a41186a2220200241186a280200360200200420042903e8013703d005200420022902003703c006024020042802a8022203450d0020044180056a41386a201629030037030020044180056a41306a201529030037030020044180056a41286a201329030037030020044180056a41206a201229030037030020044180056a41186a200929030037030020044180056a41106a200129030037030020044180056a41086a2006290300370300200441a0066a41086a201e290300370300200441a0066a41106a201f290300370300200441a0066a41186a2020280200360200200420042903d00537038005200420042903c0063703a0060b024020042802c407450d002014102e0b024020030d002021200841206a2208470d010c030b0b20044180076a41386a221420044180056a41386a29030037030020044180076a41306a221220044180056a41306a29030037030020044180076a41286a221320044180056a41286a29030037030020044180076a41206a221520044180056a41206a29030037030020044180076a41186a221620044180056a41186a29030037030020044180076a41106a221e20044180056a41106a29030037030020044180076a41086a221f20044180056a41086a290300370300200441e0066a41086a2220200441a0066a41086a290300370300200441e0066a41106a222a200441a0066a41106a290300370300200441e0066a41186a222b200441a0066a41186a280200360200200420042903800537038007200420042903a0063703e0062023201f2903003703002024201e290300370300202520162903003703002026201529030037030020272013290300370300202820122903003703002029201429030037030020042004290380073703e801200620202903003703002001202a2903003703002009202b280200360200200420042903e0063703d00502400240200a422088a72214200aa7460d00200a210c0c010b201441016a22122014490d0720144101742213201220122013491b22124104201241044b1bad42e0007e220c422088a7454103742112200ca721130240024020140d0020044100360280050c010b200441083602880520042007360280052004201441e0006c360284050b200441c0066a2013201220044180056a107d20042802c806211220042802c0064101460d0420042802c4062107201241e0006ead210c0b200841206a21122007201441e0006c6a221420042903e801370300201441106a2024290300370300201441086a20232903003703002028290300210d2029290300210e202729030021172026290300212c2025290300212d201441c0006a2003360200201441186a202d370300201441206a202c370300201441286a2017370300201441386a200e370300201441306a200d370300201441c4006a20042903d005370200201441cc006a2006290300370200201441d4006a2001290300370200201441dc006a2009280200360200200c42ffffffff0f83200a4280808080107c4280808080708384210a20222008470d000b0b20044188026a201136020020044184026a2010360200200441fc016a201c360200200441f8016a201d3602002004200f360280022004201b3602f401200420183602f001200420193602ec012004201a3602e801201141286c4104722202417f4c0d042002102c2208450d03200441003602880520042002360284052004200836028005201120044180056a107602402011450d00200f201141286c6a2103200f21020340200420022903003703d00520044180056a200441d0056a410810744120102c2208450d05200442203702d405200420083602d005200441d0056a200241086a22024120107420044180056a20042802d005220820042802d8051074024020042802d405450d002008102e0b200241206a22022003470d000b0b200441d0056a419997c500108a0320042802d005220220042802d80520044180056a10c502024020042802d405450d002002102e0b0240200428028405450d00200428028005102e0b200441d0056a419997c500200441e8016a108c0320042802d005220220042802d805200441f4016a109103024020042802d405450d002002102e0b02402019450d00201a102e0b0240201d41ffffff3f71450d00201b102e0b2010450d02201041286c450d02200f102e0c020b02402019450d00201a102e0b0240201d41ffffff3f71450d00201b102e0b4100210702402010450d00201041286c450d00200f102e0b0c010b2012450d020c010b024020042802f40441ffffff3f71450d0020042802f004102e0b024020070d000240200441c4046a2802002202450d00200241306c450d0020042802c004102e0b200441e8016a4103109c0420004201370300200041286a200441e8016a41206a290300370300200041206a200441e8016a41186a290300370300200041186a200441e8016a41106a290300370300200041106a200441f0016a290300370300200020042903e8013703080c090b024002400240200b4101200b41014b1b2202418094ebdc036e2002418094ebdc03704100476a22084101200841014b1b220820024b0d002002200a422088a7220641036c220320022003491b20086ead428094ebdc037e200220086ead80a7109e042103200641ffffffff03712006470d0420064102742202417f4c0d040240024020020d00410421010c010b2002102c2201450d040b02402002410276220920064f0d00200241017622082006200820064b1b22084104200841044b1b220841ffffffff03712008464102742109200841027421080240024020020d00200441003602e8010c010b200441f0016a4104360200200420023602ec01200420013602e8010b200441d0056a20082009200441e8016a107d200441d8056a2802002102024020042802d0054101460d0020042802d4052101200241027621090c030b2002450d050c040b20060d01410021020c020b41d0d8c800411941bcd7cc001039000b2006210820012102034020022003360200200241046a21022008417f6a22080d000b200621020b2004200720062001200220042802d0041092034108102c2202450d0020044208370284052004200236028005200420053703e80120044180056a200441e8016a4108107420044194056a41002900a1974537020020044100290099974537028c05200441eb056a20044180056a41186a280200360000200441e3056a20044180056a41106a290300370000200441db056a20042903880537000020042004290380053700d305200441f1016a200441d0056a41086a290000370000200441f9016a200441d0056a41106a290000370000200441e8016a41186a200441e7056a29000037000020044188026a41013a0000200441053a00e801200420042900d0053700e901200441e8016a10fe0102402009450d002001102e0b02402006450d00200641e0006c2108200741d4006a210203400240200241706a2802002203450d00200341306c450d002002416c6a280200102e0b0240200228020041ffffff3f71450d002002417c6a280200102e0b200241e0006a2102200841a07f6a22080d000b0b0240200aa72202450d00200241e0006c450d002007102e0b0240200441c4046a2802002202450d00200241306c450d0020042802c004102e0b2000420037030820004200370300200041186a41013a0000200441d0076a24000f0b1036000b1038000b200241246a21022008415c6a22080d000b0b0240200441fc016a2802002208450d00200441e8016a410c6a2802002102200841246c210803400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022008415c6a22080d000b0b200441f8016a2802002202450d00200241246c450d0020042802f401102e0b0240200441ec026a2802002208450d00200441e4026a2802002102200841246c210803400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102e0c030b2002410c6a280200450d02200241086a280200102e0c020b2002410c6a280200450d01200241086a280200102e0c010b200241086a280200450d00200241046a280200102e0b200241246a21022008415c6a22080d000b0b200441e8026a2802002202450d00200241246c450d0020042802e402102e0b200441e8016a4101109c0420004201370300200041286a200441e8016a41206a290300370300200041206a200441e8016a41186a290300370300200041186a200441e8016a41106a290300370300200041106a200441f0016a290300370300200020042903e8013703080b2003280204210002402003410c6a2802002202450d002002410c6c21082000210203400240200241046a280200450d002002280200102e0b2002410c6a2102200841746a22080d000b0b200341086a2802002202450d002002410c6c450d002000102e0b200441d0076a24000bfb0201037f230041206b22022400200241003602082002420137030002404120102c2203450d002002422037021420022003360210200241106a200141106a412010742002200228021022032002280218107402402002280214450d002003102e0b200120021091024120102c2203450d002002422037021420022003360210200241106a200141306a412010742002200228021022032002280218107402402002280214450d002003102e0b4120102c2203450d002002422037021420022003360210200241106a200141d0006a412010742002200228021022032002280218107402402002280214450d002003102e0b200128020421032001410c6a2802002201200210760240200141246c2201450d000340200241106a200310ef042002200228021022042002280218107402402002280214450d002004102e0b200341246a21032001415c6a22010d000b0b200020022802002203200228020810b00102402002280204450d002003102e0b200241206a24000f0b1036000bc90a03047f037e057f230041c0026b220224000240024002402000410c6a28020022030d00200241f8016a411f6a200241d0016a411f6a280000360000200241f8016a41186a200241d0016a41186a290300370300200241f8016a41106a200241d0016a41106a290300370300200241f8016a41086a200241d0016a41086a290300370300200220022903d0013703f8010c010b20002003417f6a220336020c200241d0016a411f6a22042000280204200341246c6a220341206a280000360000200241d0016a41186a2205200341196a290000370300200241d0016a41086a200341096a2900002206370300200241d0016a41106a200341116a29000022073703002002200329000122083703d00120032d00002103200241f8016a411f6a22092004280000360000200241f8016a41186a22042005290300370300200241f8016a41106a22052007370300200241f8016a41086a220a2006370300200220083703f80120034106460d00200241a8016a411f6a220b2009280000360000200241a8016a41186a22092004290300370300200241a8016a41106a20052903002206370300200241a8016a41086a200a290300220737030020024180016a41096a200737000020024180016a41116a200637000020024180016a41196a200929030037000020024180016a41206a200b280000360000200220022903f80122063703a8012002200637008101200220033a00800102400240024020034103470d0020024180016a41017228000041c28289aa04470d01200220024180016a41106a2802003602d401200220024180016a41086a2802003602d001200241f8016a200241d0016a10a701410121030240024020022d00f8014101470d00410021030c010b200241f8006a200241b1026a290000370300200241f0006a200241a9026a290000370300200241e8006a200241a1026a290000370300200241e0006a20024199026a290000370300200241d8006a20024191026a290000370300200241c0006a41106a20024189026a290000370300200241c0006a41086a20024181026a290000370300200220022900f9013703400b200241f8016a41386a2204200241c0006a41386a290300370300200241f8016a41306a2205200241c0006a41306a290300370300200241f8016a41286a2209200241c0006a41286a290300370300200241f8016a41206a220a200241c0006a41206a290300370300200241f8016a41186a220b200241c0006a41186a290300370300200241f8016a41106a220c200241c0006a41106a290300370300200241f8016a41086a220d200241c0006a41086a290300370300200220022903403703f8012003450d01200241386a2004290300370300200241306a2005290300370300200241286a2009290300370300200241206a200a290300370300200241186a200b290300370300200241106a200c290300370300200241086a200d290300370300200220022903f80137030002402002418c016a280200450d0020024188016a280200102e0b200241f8016a2000109a042002200241f8016a4120200110fa04450d03200041046a220410e10141012103200041086a2802002200450d04200041246c450d042004280200102e0c040b0240024020030e050400010304030b2002418c016a280200450d0320024188016a280200102e0c030b2002418c016a280200450d0220024188016a280200102e0c020b2002418c016a280200450d0120024188016a280200102e0c010b20024188016a280200450d00200228028401102e0b200041046a220410e10141002103200041086a2802002200450d00200041246c450d002004280200102e0b200241c0026a240020030bd50101047f230041c0006b220224004116210341baddc8002104410221050240024002400240200141ff01710e0400010203000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602242002418883ca003602202002200241206a360218200241086a4190b7c4001044000b4118210341dfdcc8002104410021050c010b4118210341f7dcc8002104410121050b20004183043b0118200041003a001020004200370300200041206a20033602002000411c6a20043602002000411a6a20053a0000200241c0006a24000baa1404077f047e017f057e230041e0036b2203240020012800002104200341106a41186a2001411c6a290000370300200341106a41106a200141146a290000370300200341106a41086a2001410c6a2900003703002003200129000437031020022802002105200341b0036a41186a22064200370300200341b0036a41106a22014200370300200341b0036a41086a22074200370300200342003703b003200341d0006a41a081ca0041071081022007200341d0006a41086a2208290000370300200320032900503703b003200341d0006a41e4d1c100410c1081022006200829000037030020012003290050370300200341086a200341b0036a4120108e0241002109024002402005200328020c410020032802081b470d0020084120360200200320043602502003200341106a360254200341d0026a200341d0006a10c203200341d0006a20032802d002220520032802d80210f4022007200341d9006a2900003703002001200341e1006a2900003703002006200341e9006a290000370300200320032900513703b003024020032d00504101470d00200341306a41186a200341b0036a41186a290300370300200341306a41106a200341b0036a41106a290300370300200341306a41086a200341b0036a41086a290300370300200320032903b003370330410121090b024020032802d402450d002005102e0b2002410c6a2802002106200241086a280200210520022802042107024020090d002000410036024002402006450d002006410c6c21002007210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b2005450d022005410c6c450d022007102e0c020b20022802102104200341d0016a41186a2202200341306a41186a290300220a370300200341d0016a41106a2208200341306a41106a290300220b370300200341d0016a41086a2209200341306a41086a290300220c37030020032003290330220d3703d001200341d0006a41186a200a370300200341d0006a41106a200b370300200341d0006a41086a200c3703002003200d370350200341d0026a200341d0006a10bf01200341f0016a41186a220e2002290300370300200341f0016a41106a22022008290300370300200341f0016a41086a2009290300370300200320032903d0013703f001024020032802f00222080d002000410036024002402006450d002006410c6c21002007210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b2005450d022005410c6c450d022007102e0c020b20034190026a41186a200e29030037030020034190026a41106a200229030037030020034190026a41086a200341f0016a41086a290300370300200320032903f00137039002200341b0026a41186a200341d0026a41186a290300370300200341b0026a41106a200341d0026a41106a290300370300200341b0026a41086a200341d0026a41086a290300370300200320032903d0023703b002200341f8026a290300210a20032802f4022102200341b0036a41186a4200370300200341b0036a41106a4200370300200341b0036a41086a22094200370300200342003703b003200341d0006a41a081ca0041071081022009200341d0006a41086a220e290000370300200320032900503703b003200341d0006a41f09dc500410a108102200141086a200e29000037000020012003290050370000200341d0036a200341b0036a1088030240024020032802d00322090d00410021010c010b20032902d403220b422088a72101200b42ffffff3f83500d002009102e0b0240024020042001460d002000410036024002402002450d00200241306c450d002008102e0b02402006450d002006410c6c21002007210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b2005450d032005410c6c0d010c030b2000200329039002220b370300200041206a20032903b002220c370300200341d0006a41186a20034190026a41186a290300220d370300200341d0006a41106a20034190026a41106a290300220f370300200341d0006a41086a20034190026a41086a2903002210370300200341d0006a41286a200341b0026a41086a2903002211370300200341d0006a41306a200341b0026a41106a2903002212370300200341d0006a41386a200341b0026a41186a2903002213370300200041086a2010370300200041106a200f370300200041186a200d370300200041286a2011370300200041306a2012370300200041386a20133703002003200b3703502003200c370370200041c8006a200a370300200020023602442000200836024002402006450d002006410c6c21002007210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b2005450d022005410c6c450d020b2007102e0c010b200341d0006a2005109908200341d0026a41086a200341d0006a410c6a290200370300200341d0026a41106a200341d0006a41146a290200370300200341d0026a41186a200341d0006a411c6a290200370300200320032902543703d0020240024020032802504101470d00200341b0036a41086a2205200341d0026a41086a290300220a370300200341b0036a41106a2206200341d0026a41106a290300220b370300200341b0036a41186a2207200341d0026a41186a290300220c370300200320032903d002220d3703b003200341f4006a2802002101200341b0026a41186a2208200c370300200341b0026a41106a2209200b370300200341b0026a41086a220e200a3703002003200d3703b002024020012002280210460d00200041003602400c020b20072008290300370300200620092903003703002005200e290300370300200320032903b0023703b0032002410c6a280200210720022802042108200341d0026a10ab0202402007450d0020082007410c6c6a210541002802cca140210641002902c4a140210a20082101034020034190026a41086a20063602002003200a37039002200341d0006a200341d0026a20034190026a2001280200200141086a28020010b0022001410c6a22012005470d000b0b200341d0006a200341d0026a41e00010e9081a200341c8016a200341c8036a290300370300200341c0016a200341c0036a290300370300200341b8016a200341b0036a41086a290300370300200320032903b0033703b0012000200341d0006a2004200341106a109a08200341d0006a10b80202402007450d002007410c6c21002008210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b200241086a2802002201450d022001410c6c450d022008102e0c020b200041003602400b2002280204210502402002410c6a2802002201450d002001410c6c21002005210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b200241086a2802002201450d002001410c6c450d002005102e0b200341e0036a24000b2e01017e2000ad220120017e220142808090bbbad6adf00d200142808090bbbad6adf00d541b428094ebdc0380a70b4d01017f230041206b22002400200041146a4101360200200042013702042000419cc3cb003602002000410436021c20004194c3cb003602182000200041186a360210200041f4afc4001044000bfa0a02047f047e230041b0016b220224002002412036020c20022001360208200241106a2001412010ed0202400240200228021022010d00200041023a00000c010b2002280214210302400240200241186a2802002204450d004100210502400240024020012d00000e020100030b200241003a006020044101460d0220012d00012105200241013a0060200220053a004020044102460d0120012d00022105200241023a0060200220053a004120044103460d0120012d00032105200241033a0060200220053a004220044104460d0120012d00042105200241043a0060200220053a004320044105460d0120012d00052105200241053a0060200220053a004420044106460d0120012d00062105200241063a0060200220053a004520044107460d0120012d00072105200241073a0060200220053a004620044108460d0120012d00082105200241083a0060200220053a004720044109460d0120012d00092105200241093a0060200220053a00482004410a460d0120012d000a21052002410a3a0060200220053a00492004410b460d0120012d000b21052002410b3a0060200220053a004a2004410c460d0120012d000c21052002410c3a0060200220053a004b2004410d460d0120012d000d21052002410d3a0060200220053a004c2004410e460d0120012d000e21052002410e3a0060200220053a004d2004410f460d0120012d000f21052002410f3a0060200220053a004e20044110460d0120012d00102105200241103a0060200220053a004f20044111460d0120012d00112105200241113a0060200220053a005020044112460d0120012d00122105200241123a0060200220053a005120044113460d0120012d00132105200241133a0060200220053a005220044114460d0120012d00142105200241143a0060200220053a005320044115460d0120012d00152105200241153a0060200220053a005420044116460d0120012d00162105200241163a0060200220053a005520044117460d0120012d00172105200241173a0060200220053a005620044118460d0120012d00182105200241183a0060200220053a005720044119460d0120012d00192105200241193a0060200220053a00582004411a460d0120012d001a21052002411a3a0060200220053a00592004411b460d0120012d001b21052002411b3a0060200220053a005a2004411c460d0120012d001c21052002411c3a0060200220053a005b2004411d460d0120012d001d21052002411d3a0060200220053a005c2004411e460d0120012d001e21052002411e3a0060200220053a005d2004411f460d0120012d001f21052002411f3a0060200220053a005e20044120460d01200241206a41106a200241c0006a41106a290300370300200241206a41086a200241c0006a41086a290300370300200220012d00203a005f200241206a41186a200241c0006a41186a290300370300200241203a006020022002290340220637036820022006370320410121050b200241c0006a41186a200241206a41186a2903002206370300200241c0006a41106a200241206a41106a2903002207370300200241c0006a41086a200241206a41086a2903002208370300200220022903202209370340200020053a000020002009370001200041096a2008370000200041116a2007370000200041196a20063700000c020b200241003a00600b20024100360270200242013703682002410a3602242002200241086a3602202002200241e8006a3602ac01200241d4006a410136020020024201370244200241909dc5003602402002200241206a360250200241ac016a419cebc000200241c0006a103d1a2002280268200228027010ef020240200228026c450d002002280268102e0b200041023a00000b2003450d002001102e0b200241b0016a24000bb30201027f230041e0006b220224002002412036020c20022001360208200241106a2001412010ed0202400240200228021022010d00200041003602000c010b200228021421032002200241106a41086a28020036022420022001360220200241c8006a200241206a10b5050240024020022802480d0020024100360230200242013703282002410a36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241909dc5003602482002200241386a360258200241c4006a419cebc000200241c8006a103d1a2002280228200228023010ef020240200228022c450d002002280228102e0b200041003602000c010b20002002290348370200200041086a200241c8006a41086a2802003602000b2003450d002001102e0b200241e0006a24000ba50904047f017e087f047e23004190026b220224002002412036020c20022001360208200241106a2001412010ed0202400240200228021022030d00200041003602000c010b200228021421042002200241186a280200360224200220033602202002200241206a10ab010240024020022802000d000240024020022802042205200228022441286e2201200120054b1bad42287e2206422088a70d002006a72201417f4c0d000240024020010d00410821070c010b2001102c2207450d020b200141286ead2106024002402005450d00410021080340200241003a00c801200841016a210820022802242109417f210a4100210102400240024002400240034020092001460d01200241a8016a20016a2002280220220b2d00003a000020022009200a6a3602242002200b41016a3602202002200141016a220c3a00c801200a417f6a210a200c2101200c4120470d000b200241f0016a41186a2201200241a8016a41186a290300370300200241f0016a41106a220a200241a8016a41106a290300370300200241f0016a41086a220d200241a8016a41086a290300370300200220022903a8013703f001200c41ff01714120490d0120024188016a41086a220e200d29030037030020024188016a41106a220d200a29030037030020024188016a41186a220a2001290300370300200220022903f001370388012009200c6b22014108490d01200241c8006a41086a200e290300220f370300200241c8006a41106a200d2903002210370300200241c8006a41186a200a2903002211370300200241286a41086a220c200f370300200241286a41106a22092010370300200241286a41186a220d2011370300200b290001210f2002200b41096a3602202002200141786a36022420022002290388012210370348200220103703282006422088a722012006a7470d04200141016a220a2001490d082001410174220b200a200a200b491b220a4104200a41044b1bad42287e2206422088a745410374210a2006a7210b20010d02200241003602a8010c030b200141ff0171450d00200241003a00c8010b2006a72201450d08200141286c450d082007102e0c080b200241083602b001200220073602a8012002200141286c3602ac010b200241f0016a200b200a200241a8016a107d20022802f801210a20022802f0014101460d0320022802f4012107200a41286ead21060b2007200141286c6a220a2002290328370300200c290300211020092903002111200d2903002112200a200f370320200a41186a2012370300200a41106a2011370300200a41086a2010370300200642ffffffff0f83200141016aad42208684210620082005470d000b0b2007450d0320002006370204200020073602000c040b200a0d010b1038000b1036000b200241003602f801200242013703f0012002410a3602d4012002200241086a3602d0012002200241f0016a36028801200241bc016a4101360200200242013702ac01200241909dc5003602a8012002200241d0016a3602b80120024188016a419cebc000200241a8016a103d1a20022802f00120022802f80110ef02024020022802f401450d0020022802f001102e0b200041003602000b2004450d002003102e0b20024190026a24000b9d0902057f017e230041b0016b220224002002412036020c20022001360208200241106a2001412010ed0202400240200228021022010d00200041003a00000c010b200241186a280200210320022802142104200241003a0060024002402003450d00200220012d00003a0040200241013a0060024020034101460d00200220012d00013a0041200241023a006020034102460d00200220012d00023a0042200241033a006020034103460d00200220012d00033a0043200241043a006020034104460d00200220012d00043a0044200241053a006020034105460d00200220012d00053a0045200241063a006020034106460d00200220012d00063a0046200241073a006020034107460d00200220012d00073a0047200241083a006020034108460d00200220012d00083a0048200241093a006020034109460d00200220012d00093a00492002410a3a00602003410a460d00200220012d000a3a004a2002410b3a00602003410b460d00200220012d000b3a004b2002410c3a00602003410c460d00200220012d000c3a004c2002410d3a00602003410d460d00200220012d000d3a004d2002410e3a00602003410e460d00200220012d000e3a004e2002410f3a00602003410f460d00200220012d000f3a004f200241103a006020034110460d00200220012d00103a0050200241113a006020034111460d00200220012d00113a0051200241123a006020034112460d00200220012d00123a0052200241133a006020034113460d00200220012d00133a0053200241143a006020034114460d00200220012d00143a0054200241153a006020034115460d00200220012d00153a0055200241163a006020034116460d00200220012d00163a0056200241173a006020034117460d00200220012d00173a0057200241183a006020034118460d00200220012d00183a0058200241193a006020034119460d00200220012d00193a00592002411a3a00602003411a460d00200220012d001a3a005a2002411b3a00602003411b460d00200220012d001b3a005b2002411c3a00602003411c460d00200220012d001c3a005c2002411d3a00602003411d460d00200220012d001d3a005d2002411e3a00602003411e460d00200220012d001e3a005e2002411f3a00602003411f460d00200241206a41106a2203200241c0006a41106a290300370300200241206a41086a2205200241c0006a41086a290300370300200220012d001f3a005f200241206a41186a2206200241c0006a41186a290300370300200241203a006020022002290340220737036820022007370320200041196a2006290300370000200041116a2003290300370000200041096a200529030037000020002002290320370001410121030c020b200241003a00600b20024100360270200242013703682002410a3602242002200241086a3602202002200241e8006a3602ac01200241d4006a410136020020024201370244200241909dc5003602402002200241206a360250200241ac016a419cebc000200241c0006a103d1a2002280268200228027010ef020240200228026c450d002002280268102e0b410021030b200020033a00002004450d002001102e0b200241b0016a24000bf50101037f230041206b220224002000410036020820004201370200024002400240024020012802000e03000102030b200241013a000f20002002410f6a41011074200128020421032001410c6a2802002204200010760240200441286c2204450d00200320046a2104034020002003412010742002200341206a2903003703102000200241106a41081074200341286a22032004470d000b0b2000200141106a412010740c020b200241023a000f20002002410f6a410110742002200128020436021c20002002411c6a410410740c010b200241033a000f20002002410f6a41011074200141086a20001096020b200241206a24000b850301047f230041f0006b22012400200141086a41206a200041206a280200360200200141086a41186a200041186a290200370300200141086a41106a200041106a290200370300200141086a41086a2202200041086a29020037030020012000290200370308200141306a41186a22004200370300200141306a41106a22034200370300200141306a41086a420037030020014200370330200141306a41d9fcc6004106108102200141e0006a41b4f4cb0041061081022000200141e0006a41086a220429000037030020032001290060370300200141d0006a200141086a10ef042004200141d0006a41086a28020036020020012001290350370360200141306a4120200141e0006a10c7020240024002400240024020012d00080e050400010204030b200141146a280200450d03200141106a280200102e0c030b200141146a280200450d02200141106a280200102e0c020b200141146a280200450d01200141106a280200102e0c010b2002280200450d00200128020c102e0b200141f0006a24000ba50101047f230041106b2202240002404121410120012d000041014622031b2204102c2205450d002002410036020820022004360204200220053602000240024020030d00200241003a000f20022002410f6a410110740c010b200241013a000f20022002410f6a410110742002200141016a412010740b2000412020022802002201200228020810b20102402002280204450d002001102e0b200241106a24000f0b1036000b850201037f230041d0006b22022400200241086a41dffcc6004109108102200241186a41d3b1c4004106108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000be22505027f017e027f017e037f230041b0046b22022400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e1c0102030405060708090a0b0c0d0e0f101112131415161718191a1b00010b200241086a200141386a10ca0120024180026a41286a200141306a29030037030020024180026a41206a200141286a29030037030020024180026a41186a200141206a29030037030020024180026a41106a200141186a29030037030020024180026a41086a200141106a2903003703002002200141086a29030037038002200141f8016a280200210320024180026a41306a200241086a41c00110e9081a20014180026a2903002104200241086a20024180026a41f00110e9081a200041086a200241086a41f00110e9081a20004180026a2004370300200041f8016a20033602002000411b3602000c1b0b20024180026a200141086a10cb0120004100360200200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c1a0b20024180026a200141046a10cc0120004101360200200041246a200241a0026a2802003602002000411c6a20024198026a290300370200200041146a20024190026a2903003702002000410c6a20024188026a29030037020020002002290380023702040c190b20024180026a200141086a10cd01200041086a20024180026a41a00210e9081a200041023602000c180b20004103360200200041086a200141086a2903003703000c170b41042103200141046a210502400240024002400240024002400240024020012d0004417f6a0e050102030405000b41e2a0cc00412841e89bc4001039000b200141086a2802002105410121030c040b41022103200241086a41026a200541036a2d00003a000020024180026a41086a200141146a29020037030020024190026a2001411c6a29020037030020024198026a200141246a2d00003a0000200220052f00013b010820022001410c6a29020037038002200141086a2802002105200141286a28020021010c040b200141086a2802002105410321030c020b2002410a6a200541036a2d00003a000020024180026a41086a200141146a29020037030020024190026a2001411c6a29020037030020024198026a200141246a2d00003a0000200220052f00013b010820022001410c6a2902003703800220012d00254100472106200141086a2802002105200141286a28020021010c030b200141086a2802002105410521030b0b0b200020033a0004200020022f01083b0005200020063a0025200020022f01fc013b0126200041086a20053602002000410c6a200229038002370200200041286a2001360200200041076a2002410a6a2d00003a0000200041146a20024180026a41086a2903003702002000411c6a20024190026a290300370200200041246a20024198026a2d00003a0000200041043602000c160b20024180026a200141086a10ce01200041086a20024180026a41e00010e9081a200041053602000c150b20024180026a200141046a10cf01200041063602002000410c6a20024188026a28020036020020002002290380023702040c140b20024180026a200141086a10d001200041086a20024180026a41d80010e9081a200041073602000c130b10d101000b02400240200128020422050d00410021030c010b20024180026a41186a200141286a29000037030020024180026a41106a200141206a29000037030020024188026a200141186a29000037030020024180026a41286a200141386a29000037030020024180026a41306a200141c0006a29000037030020024180026a41386a200141c8006a29000037030020024180026a41c8006a200141d8006a29000037030020024180026a41d0006a200141e0006a29000037030020024180026a41d8006a200141e8006a2900003703002002200141106a290000370380022002200141306a2900003703a0022002200141d0006a2900003703c00220024180026a41f8006a20014188016a29000037030020024180026a41f0006a20014180016a29000037030020024180026a41e8006a200141f8006a29000037030020024180026a4198016a200141a8016a29000037030020024180026a4190016a200141a0016a29000037030020024180026a4188016a20014198016a29000037030020024180026a41b8016a200141c8016a29000037030020024180026a41b0016a200141c0016a29000037030020024180026a41a8016a200141b8016a2900003703002002200141f0006a2900003703e002200220014190016a290000370380032002200141b0016a2900003703a0032001410c6a2802002201417f4c0d130240024020010d00410121030c010b2001102c2203450d150b20032005200110e9081a200241086a20024180026a41c00110e9081a0b200020033602042000410c6a2001360200200041086a2001360200200041106a200241086a41c00110e9081a200041093602000c110b20024180026a200141086a10d201200041086a20024180026a41980210e9081a2000410a3602000c100b20024180026a200141046a10d301200041046a20024180026a41e80010e9081a2000410b3602000c0f0b10d401000b20024180026a200141086a10d5012000410d360200200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c0d0b20024180026a200141086a10d6012000410e360200200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c0c0b20024180026a200141086a10d6012000410f360200200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c0b0b20024180026a200141086a10d70120004110360200200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c0a0b200141046a2103410721050240024002400240024002400240024020012d0004417f6a0e0701020304050607000b41e2a0cc00412841a4c3cb001039000b20024198026a200341196a29000037030020024190026a200341116a29000037030020024188026a200341096a2900003703002002200329000137038002410121050c050b20024198026a200341196a29000037030020024190026a200341116a29000037030020024188026a200341096a2900003703002002200329000137038002410221050c040b20024180026a41186a200341196a29000037030020024180026a41106a200341116a29000037030020024180026a41086a200341096a290000370300200241086a41086a200341296a290000370300200241086a41106a200341316a290000370300200241086a41186a200341396a29000037030020022003290001370380022002200341216a290000370308410321050c030b200241086a200141086a10c8012002418b026a200241086a41086a2802003600002002200229030837008302410421050c020b20024198026a200341196a29000037030020024190026a200341116a29000037030020024188026a200341096a2900003703002002200329000137038002410521050c010b20024198026a200341196a29000037030020024190026a200341116a29000037030020024188026a200341096a2900003703002002200329000137038002410621050b200020053a0004200020022903800237000520002002290308370025200020022f00fc013b00452000410d6a20024180026a41086a290300370000200041156a20024180026a41106a2903003700002000411d6a20024180026a41186a2903003700002000412d6a200241086a41086a290300370000200041356a200241086a41106a2903003700002000413d6a200241086a41186a290300370000200041c7006a200241fe016a2d00003a0000200041113602000c090b024002400240024002400240200141086a280200417f6a0e03010203000b41e2a0cc0041284184ccc2001039000b200141386a2903002104200141306a29030021074101210841012109024002400240024002402001410c6a2d00000e050104020300010b4104210920024180026a41046a200141206a2d00003a000020022001411c6a2800003602800220012f000d2001410f6a2d0000411074722106200141186a280200210a200141146a2802002103200141106a28020021050c030b20024188026a200141246a29000037030020024180026a41106a2001412c6a2d00003a000020022001411c6a2900003703800220012f000d2001410f6a2d0000411074722106200141186a280200210a200141146a2802002103200141106a2802002105410021090c020b200141186a2802002203417f4c0d0f200141106a28020021010240024020030d00410121050c010b2003102c2205450d110b20052001200310e9081a410221092003210a0c010b20024188026a200141246a29000037030020024180026a41106a2001412c6a2d00003a000020022001411c6a2900003703800220012f000d2001410f6a2d0000411074722106200141186a280200210a200141146a2802002103200141106a2802002105410321090b200241086a41106a20024180026a41106a2d00003a0000200241086a41086a20024180026a41086a290300370300200241046a41026a200241fc016a41026a2d00003a00002002200229038002370308200220022f00fc013b01040c030b2001410c6a28020022094108762106410221080c010b2001410c6a28020022094108762106410321080b0b200020022f01043b002d20004112360200200041386a2004370300200041306a2007370300200041186a200a360200200041146a2003360200200041106a2005360200200041086a20083602002000411c6a20022903083702002000410c6a2006410874200941ff017172360200200041246a200241086a41086a2903003702002000412c6a200241086a41106a2d00003a00002000412f6a200241066a2d00003a00000c080b20024180026a200141086a10d801200041086a20024180026a41f00010e9081a200041133602000c070b20024180026a200141086a10d901200041086a20024180026a41f80010e9081a200041143602000c060b024002400240024020012f0104417f6a0e03010200010b20024180026a200141086a10c90120022902840221042002280280022103410321010c020b20024180026a200141086a10c90120022902840221042002280280022103410121010c010b20012f0106210541b002102c2203450d0820024180026a200141086a28020010da01200320024180026a41b00210e9081a410221010b200020013b0104200041153602002000410c6a2004370200200041086a2003360200200041066a20053b01000c050b20024180026a200141086a10db01200041086a20024180026a41a80210e9081a200041163602000c040b20024180026a200141046a10dc01200041046a20024180026a41c80010e9081a200041173602000c030b20024180026a200141086a10dd01200041086a20024180026a41c80010e9081a200041183602000c020b20024180026a200141086a10de0120004119360200200041c0006a20024180026a41386a290300370300200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c010b20024180026a200141086a10df012000411a360200200041c0006a20024180026a41386a290300370300200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000b200241b0046a24000f0b1038000b1036000bbc0101037f230041306b22022400200241dffcc6004109108102200241106a41e5b0c4004106108102200241206a2001280200200128020810a201024002402002280228220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b20004100360208200020013602042000200436020020002002411010742000200241106a411010742000200228022022012003107402402002280224450d002001102e0b200241306a24000f0b1038000b1036000bfa0101037f230041306b220224002002200010a704200228020821032002280200210002404101102c2204450d0020024201370214200220043602100240024020012802bc024102470d00200241003a0020200241106a200241206a410110740c010b200241013a0020200241106a200241206a410110742001200241106a10ab040b200241206a41086a200241106a41086a2802003602002002200229031037032020002003200241206a10c70202402002280204450d002000102e0b024020012802bc024102460d00024020012802b0022200450d00200141b4026a280200450d002000102e0b2001108b020b200241306a24000f0b1036000bb20501037f230041106b220224000240024020002802b00222030d00200241003a000c20012002410c6a410110742002410c6a21030c010b200241013a000c20012002410c6a41011074200041b8026a28020022042001107620012003200410742002410c6a21030b200220002d00f0023a000c2001200341011074200020011090020240024020002802bc024101460d00200241003a000c20012003410110740c010b200241013a000c20012003410110742002200041c0026a28020036020c20012002410c6a410410742002200041c4026a28020036020c20012002410c6a410410740b0240024002400240024020002d00c8020e0400010203000b200241003a000c2001200341011074024002400240200041c9026a2d00000e03000102060b200241003a000c20012003410110740c050b200241013a000c20012003410110742001200041ca026a412010740c040b200241023a000c20012003410110740c030b2002410f3a000c2001200341011074024002400240200041cc026a2d00000e03000102050b200241003a000c20012003410110742002200041d0026a28020036020c20012002410c6a410410742002200041d4026a28020036020c20012002410c6a410410740c040b200241013a000c20012003410110742001200041cd026a412010740c030b200241023a000c20012003410110740c020b200241103a000c2001200341011074024002400240200041cc026a2d00000e03000102040b200241003a000c20012003410110742002200041d0026a28020036020c20012002410c6a410410742002200041d4026a28020036020c20012002410c6a410410740c030b200241013a000c20012003410110742001200041cd026a412010740c020b200241023a000c20012003410110740c010b200241033a000c2001200341011074200110b6040b200241106a24000b130020004103360204200041a0b7c4003602000b3400200041a8f8c60036020420004100360200200041146a4110360200200041106a41a8bec400360200200041086a42043702000b130020004102360204200041f4e0c4003602000b4301027f230041106b2202240002404108102c22030d001036000b2000420837020420002003360200200242f02e3703082000200241086a41081074200241106a24000b4301027f230041106b2202240002404108102c22030d001036000b2000420837020420002003360200200242e0123703082000200241086a41081074200241106a24000ba10402067f027e230041206b2102024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a36020020050e020102030b200041023a00000f0b2006450d0420042d0001210520012003417e6a22073602042001200441026a360200410021060240024002400240024002400240200541ff00710e07060001020304050b0b410121060c050b410221060c040b410321060c030b410421060c020b410521060c010b410621060b024020074110490d00200041003a0000200041086a2004290002370300200041026a20063a0000200020054107763a0001200041036a200228001b360000200041186a2002290308370300200041106a2004410a6a29000037030020012003416e6a3602042001200441126a360200200041076a2002411f6a2d00003a0000200041206a200241086a41086a2903003703000f0b200041023a00000f0b20064110490d01200441096a29000021082004290001210920012003416f6a22053602042001200441116a36020020054110490d02200041013a000020002002280008360001200041186a2004290011370300200041106a2008370300200041086a2009370300200041206a200441196a29000037030020012003415f6a3602042001200441216a360200200041046a2002410b6a2800003600000f0b200041023a00000f0b200041023a00000f0b200041023a00000f0b200041023a00000ba20202037f017e230041106b220224000240024020002d00004101460d00200241003a0000200120024101107420002d00012103410621040240024002400240024002400240200041026a2d00000e0700010203040506000b410021040c050b410121040c040b410221040c030b410321040c020b410421040c010b410521040b20022004200341ff0171410047410774723a00002001200241011074200029030821052002200041106a2903003703082002200537030020012002411010740c010b200241013a00002001200241011074200029030821052002200041106a290300370308200220053703002001200241101074200041186a29030021052002200041206a2903003703082002200537030020012002411010740b200241106a24000b130020004106360204200041b8e7c4003602000b3400200041dffcc60036020420004100360200200041146a4103360200200041106a41f0f7c400360200200041086a42093702000b3401017f230041106b220224002000410036020820004201370200200241003a000f20002002410f6a41011074200241106a24000b4601027f230041106b220124002001410036020820014201370300200110b6042000200128020022022001280208107402402001280204450d002002102e0b200141106a24000bef43050e7f037e1c7f047e0a7f230041f0026b220524000240024002400240024002400240024002400240024002400240024002400240024020020d0041002106410021070c010b200120024105746a2108200541b0026a41186a2109200541386a41186a210a200541b0026a41086a210b410021064100210703402009200141186a290000370300200541b0026a41106a220c200141106a290000370300200b200141086a290000370300200520012900003703b002024020070d0041c805102c2207450d0e4100210d200741003b01e602200741003602e0020b200141206a21012007210e200d210f024002400340200e41e8026a2110200e2f01e6022111410021020240034020112002460d01200541b0026a2010412010ec082212450d03200241016a2102201041206a21102012417f4a0d000b2002417f6a21110b0240200f450d00200f417f6a210f200e20114102746a41c8056a280200210e0c010b0b200541206a41086a200b41086a2902002213370300200541206a41106a200b41106a29020022143703002005200b290200221537032020052802b402210f20052802b0022116200541c0016a41106a22172014370300200541c0016a41086a22182013370300200520153703c00102400240200e2f01e6022202410a4b0d0020054198026a41106a2219201729030037030020054198026a41086a221a2018290300370300200520052903c00137039802200e41e8026a2110200241016a21120240201141016a221b20024b221c0d002010201b4105746a201020114105746a20122011417f736a41057410ea081a0b20102011410574220c6a2202200f360004200220163600002002200529039802370008200241106a201a290300370000200241186a20192903003700000240201c0d00200e201b4105746a200e200c6a20122011417f736a41057410ea081a0b200e200c6a22024200370308200242003703002002410036021820024208370310200e20123b01e6020c010b4100211a4104210202400240201141054f0d00201121120c010b4105210241052112024002402011417b6a0e020201000b201141796a21124101211a410621020c010b410021124101211a0b41c805102c2219450d10201941003b01e602201941003602e0022019200e2f01e602221b2002417f736a22113b01e602200e41e8026a221c2002410574221d6a2210280004211e2010280000211f20054198026a41106a2220201041186a29000037030020054198026a41086a2221201041106a2900003703002005201029000837039802200a200e201d6a221041186a290300370300200541386a41106a2222201041106a290300370300200541386a41086a2223201041086a290300370300200520102903003703382011410c4f0d0e201b200241016a22106b2011470d0d201941e8026a201c201041057422106a2011410574221110e9081a2019200e20106a201110e908211d20092005290338370300200941086a22242023290300370300200941106a22252022290300370300200941186a2226200a290300370300200e20023b01e602200c20202903002213370300200541e0016a41086a22272021290300370300200541e0016a41106a22282013370300200541e0016a41186a22292009290300370300200541e0016a41206a222a200541b0026a41206a222b290300370300200541e0016a41286a222c200541b0026a41286a222d290300370300200541e0016a41306a222e200541b0026a41306a222f29030037030020052005290398023703e001201d200e201a1b22022f01e60221102020201729030037030020212018290300370300200520052903c00137039802200241e8026a2111201041016a211a0240201241016a221c20104b22300d002011201c4105746a201120124105746a201a2012417f736a41057410ea081a0b20112012410574221b6a2210200f360004201020163600002010200529039802370008201041106a2021290300370000201041186a2020290300370000024020300d002002201c4105746a2002201b6a201a2012417f736a41057410ea081a0b2002201b6a22104200370308201042003703004100213120104100360218201042083703102002201a3b01e602200541f0006a41086a221a20272903002213370300200541f0006a41106a221b20282903002214370300200541f0006a41186a221c20292903002215370300200541f0006a41206a202a2903002232370300200541f0006a41286a202c2903002233370300200541f0006a41306a202e2903002234370300200520052903e0012235370370200541386a41306a22362034370300200541386a41286a22372033370300200541386a41206a22382032370300200a201537030020222014370300202320133703002005203537033802400240200e2802e0022216450d0041002131201d2139201e213a201f213b0340200e2f01e402210e200541a8016a41106a22302022290300370300200541a8016a41086a223c2023290300370300200520052903383703a801200541c0016a41186a221d200a41186a2903003703002017200a41106a2903003703002018200a41086a2903003703002005200a2903003703c0014101450d0f20162f01e602223d410b490d024100210f410421020240200e4105490d00200e210202400240200e417b6a0e020201000b200e41796a210e4101210f410621020c010b4100210e4101210f410521020b41f805102c2219450d13201941003b01e602201941003602e002201920162f01e602223e2002417f736a22123b01e602201641e8026a223f200241057422116a2210280004211e2010280000211f2020201041186a2900003703002021201041106a2900003703002005201029000837039802201c201620116a221041186a290300370300201b201041106a290300370300201a201041086a290300370300200520102903003703702012410c4f0d0e203e200241016a22116b2012470d0d201941e8026a203f201141057422106a2012410574221210e9081a2019201620106a201210e9082110201620023b01e602200b2021290300370300200c2020290300370300200920052903703703002024201a2903003703002025201b2903003703002026201c29030037030020052005290398023703b00220102f01e602221241016a213e2012410c4f0d0c203d20026b2202203e470d0b203141016a2131201041c8056a201620114102746a41c8056a200241027410e9081a4100210202400340201020024102746a41c8056a280200221120023b01e402201120103602e0022002200220124922116a220220124b0d0120110d000b0b202e202f290300370300202c202d290300370300202a202b290300370300202920092903003703002028200c2903003703002027200b290300370300200520052903b0023703e001201c201d290300370300201b2017290300370300201a2018290300370300200520052903c00137037020102016200f1b22112f01e602211d200c2030290300370300200b203c290300370300200520052903a8013703b002201141e8026a2112201d41016a210f0240200e41016a2202201d4b223c0d00201220024105746a2012200e4105746a200e417f73200f6a41057410ea081a0b2012200e41057422306a2212203a3600042012203b360000201241186a200c290300370000201241106a200b290300370000201220052903b0023700082009201c290300370300200c201b290300370300200b201a290300370300200520052903703703b0020240203c0d00201120024105746a201120306a200e417f73200f6a41057410ea081a0b201120306a221220052903b002370300201241186a2009290300370300201241106a200c290300370300201241086a200b290300370300201141c8056a21120240200e41026a2230201d41026a221d4f0d00201220304102746a201220024102746a2002417f73201d6a41027410ea081a0b201220024102746a20393602002011200f3b01e60202402002201d4f0d002011200e4102746a41cc056a2102034020022802002212200e41016a220e3b01e402201220113602e002200241046a2102200f200e470d000b0b2023202729030037030020222028290300370300200a20292903003703002038202a2903003703002037202c2903003703002036202e290300370300200520052903e0013703382016210e20162802e0022202211620102139201e213a201f213b20020d000b0b202e20362903002213370300202c20372903002214370300202a203829030022153703002029200a29030022323703002028202229030022333703002027202329030022343703002005200529033822353703e001202f2013370300202d2014370300202b201537030020092032370300200c2033370300200b2034370300200520353703b0022007450d0841f805102c2202450d11200220073602c805200241003b01e602200241003602e002200741003b01e402200720023602e0022022200c2903003703002023200b290300370300200520052903b002370338201c2026290300370300201b2025290300370300201a202429030037030020052009290300370370200d2031470d0720022f01e6022210410b4f0d06200d41016a210d2002201041016a22123b01e602200220104105746a22102005290370370300201041ec026a201e360000201041e8026a201f360000201041f0026a2005290338370000201041f8026a202329030037000020104180036a2022290300370000201041086a201a290300370300201041106a201b290300370300201041186a201c290300370300200220124102746a41c8056a2019360200201920123b01e402201920023602e002200221070c010b201c201d290300370300201b2017290300370300201a2018290300370300200520052903c00137037020162f01e6022112200c2030290300370300200b203c290300370300200520052903a8013703b002200e41016a2102201641e8026a2110201241016a21110240200e20124f220f0d00201020024105746a2010200e4105746a200e417f7320116a41057410ea081a0b2010200e41057422196a2210203a3600042010203b360000201041186a200c290300370000201041106a200b290300370000201020052903b0023700082009201c290300370300200c201b290300370300200b201a290300370300200520052903703703b0020240200f0d00201620024105746a201620196a200e417f7320116a41057410ea081a0b201620196a221020052903b002370300201041186a2009290300370300201041106a200c290300370300201041086a200b290300370300201641c8056a2110201241026a21120240200f0d00200e41027420106a41086a201020024102746a2002417f7320126a41027410ea081a0b201020024102746a2039360200201620113b01e602200220124f0d0020162002417f6a22024102746a41cc056a2110034020102802002212200241016a22023b01e402201220163602e002201041046a211020112002470d000b0b2005410036028001200641016a21060c010b200541003602c802200542083703c002200542003703b802200542003703b002200e20024105746a220229031021132002420837031020022903082114200242003703082002290300211520024200370300200241186a22022903002132200220052903c802370300200541f0006a41186a2032370300200520133703800120052014370378200520153703702013a72202450d002005280284012210450d00201041306c450d002002102e0b20012008470d000b0b02402004450d0020032004412c6c6a211903400240200328020841306c2202450d002003280200220e20026a21092003410c6a2116024003402007450d01200e41306a210b20072101200d210f02400340200141e8026a211020012f01e60221114100210202400240034020112002460d01200e2010412010ec082212450d02200241016a2102201041206a21102012417f4a0d000b2002417f6a21110b200f450d02200f417f6a210f200120114102746a41c8056a28020021010c010b0b200120024105746a2202427f20022903002213200e2903207c221420142013542210200241086a22122903002213200e41286a22112903007c2010ad7c221420135420142013511b22101b3703002012427f201420101b37030020162900002113200541b0026a41086a2201201641086a290000370300200541b0026a41106a220f201641106a290000370300200541b0026a41186a220c201641186a290000370300200520133703b00220112903002113200e2903202114200241186a2110200241106a2111024020022802182212200241146a280200470d0020112012410110b804201028020021120b2011280200201241306c6a220220052903b00237030020022014370320200241186a200c290300370300200241106a200f290300370300200241086a2001290300370300200241286a20133703002010201028020041016a360200200b210e200b2009460d030c010b0b0240200d450d00034020072802c8052107200d417f6a220d0d000b0b02402006450d0041002110200541c0026a2101200541b8026a210f03402006417f6a210641012102024002400340201020072f01e602490d01024020072802e00222120d002007102e410021070c030b20072f01e40221102007102e2002417f6a2102201221070c000b0b2001200720104105746a22124180036a290000370300200f201241f8026a2900003703002005201241f0026a2900003703b002201041016a2110201228021421112012280210210e20024101460d00200720104102746a41c8056a280200210702402002450d000340200241016a221020024f211220072802c80521072010210220120d000b0b410021100b200e450d0202402011450d00201141306c450d00200e102e0b20060d000b0b034020072802e00221022007102e2002210720020d000b0b20004104360204410121020c110b2003412c6a22032019470d000b0b024020070d0041002102410021060c0b0b200721020340200d450d0b200d417f6a210d200720072f01e6024102746a41c8056a280200210720022802c80521020c000b0b41a89ac700412041c89ac7001039000b41e899c700413041989ac7001039000b41e8aac700412b4194abc7001039000b41f49bc7004128419c9cc7001039000b203e410c41f49cc700104d000b41f49bc7004128419c9cc7001039000b2012410b41e49bc700104d000b41ac9cc700413541e49cc7001039000b41f49bc7004128419c9cc7001039000b2011410b41e49bc700104d000b0240024002400240024002402006450d002002450d032006417f6a210741002110024002400340201020022f01e602490d01024020022802e00222120d002002102e410021020c030b20022f01e40221102002102e200d41016a210d201221020c000b0b200541f0006a41186a2201200220104105746a22114180036a290000370300200541f0006a41106a220f201141f8026a290000370300200541f0006a41086a2216201141f0026a2900003703002005201141e8026a2900003703702011280210210e200541c0016a41086a220b2011411c6a280200360200200520112902143703c001201041016a2112201141086a2903002114201129030021130240200d450d00200220124102746a41c8056a28020021020240200d4101460d0041012110034020022802c8052102200d201041016a2210470d000b0b410021120b200541bc026a2016290300370200200541c4026a200f290300370200200541b0026a411c6a200129030037020020054198026a41086a200b280200360200200520052903703702b402200541e0016a41086a200541b0026a41086a290200370300200541e0016a41106a200541b0026a41106a290200370300200541e0016a41186a200541b0026a41186a290200370300200541e0016a41206a200541b0026a41206a280200360200200520052903c00137039802200520052902b0023703e0010b200541b0026a41106a200541e0016a41106a290300370300200541b0026a41086a200541e0016a41086a290300370300200541b0026a41186a200541e0016a41186a290300370300200541b0026a41206a200541e0016a41206a280200360200200541a8016a41086a20054198026a41086a280200360200200541386a41086a200541bc026a290200370300200541386a41106a200541c4026a290200370300200541386a41186a200541cc026a290200370300200520052903e0013703b00220052005290398023703a801200520052902b402370338200e450d01417f200741016a221020102007491b221041ffffff1f712010470d0420104106742210417f4c0d042010102c220f450d06200f2013370320200f2005290338370300200f200e360230200f20052903a801370234200f41286a2014370300200f41186a200541386a41186a290300370300200f41106a200541386a41106a290300370300200f41086a200541386a41086a290300370300200f413c6a200541a8016a41086a2802003602002010410676210d024020070d004101210e0c080b2007417f6a210741012111024002400340201220022f01e602490d01024020022802e00222100d002002102e410021020c030b20022f01e40221122002102e2011417f6a2111201021020c000b0b200541f0006a41186a2201200220124105746a220e4180036a290000370300200541f0006a41106a2216200e41f8026a290000370300200541f0006a41086a220c200e41f0026a2900003703002005200e41e8026a290000370370200e280210210b200541386a41086a2209200e411c6a2802003602002005200e290214370338201241016a2110200e41086a2903002134200e2903002133024020114101460d00200220104102746a41c8056a280200210202402011450d000340201141016a221020114f211220022802c80521022010211120120d000b0b410021100b200541bc026a200c290300370200200541c4026a2016290300370200200541b0026a411c6a200129030037020020054198026a41086a2009280200360200200520052903703702b402200541e0016a41086a200541b0026a41086a290200370300200541e0016a41106a200541b0026a41106a290200370300200541e0016a41186a200541b0026a41186a290200370300200541e0016a41206a200541b0026a41206a2802003602002005200529033837039802200520052902b0023703e0010b200541b0026a41106a220c200541e0016a41106a2208290300370300200541b0026a41086a2209200541e0016a41086a2206290300370300200541b0026a41186a2219200541e0016a41186a2222290300370300200541b0026a41206a2220200541e0016a41206a2223280200360200200541206a41086a220a20054198026a41086a2230280200360200200541c0016a41086a221a200541bc026a290200370300200541c0016a41106a221b200541c4026a290200370300200541c0016a41186a221c200541b0026a411c6a290200370300200520052903e0013703b0022005200529039802370320200520052902b4023703c00102400240200b0d004101210e0c010b200541f0006a41046a2101200541b0026a41046a211d4101210e03402009201a290300370300200c201b2903003703002019201c290300370300200541386a41086a2216200a280200360200200520052903c0013703b00220052005290320370338024002400240200d200e470d00200d200e6b417f200741016a221220122007491b22124f0d00200e20126a2212200e490d09200d41017422112012201120124b1b22124104201241044b1b221241ffffff1f7120124641037421112012410674211202400240200d0d00200541003602e0010c010b200541083602e8012005200f3602e0012005200d4106743602e4010b200541f0006a20122011200541e0016a107d2005280278211220052802704101460d012005280274210f2012410676210d0b200c2903002113201929030021142009290300211520052903b0022132200f200e4106746a2212200b36023020122032370300201241086a201537030020122033370320201241286a2034370300201241186a2014370300201241106a2013370300201220052903383702342012413c6a2016280200360200200e41016a210e2007450d0b2007417f6a2107410121120c010b2012450d070c090b024002400340201020022f01e602490d01024020022802e0022211450d0020022f01e40221102002102e2012417f6a2112201121020c010b0b2002102e410021020c010b200541386a41186a2217200220104105746a22114180036a290000370300200541386a41106a2218201141f8026a2900003703002016201141f0026a2900003703002005201141e8026a2900003703382011280210210b20302011411c6a2802003602002005201129021437039802201041016a2110201141086a290300213420112903002133024020124101460d00200220104102746a41c8056a280200210202402012450d000340201241016a221020124f211120022802c80521022010211220110d000b0b410021100b201d2005290338370000201d41086a2016290300370000201d41106a2018290300370000201d41186a2017290300370000200541a8016a41086a2030280200360200200620092902003703002008200c290200370300202220192902003703002023202028020036020020052005290398023703a801200520052902b0023703e0010b200541f0006a41206a2023280200360200200541f0006a41186a2022290300370300200541f0006a41106a2008290300370300200541f0006a41086a2006290300370300200a200541a8016a41086a280200360200200520052903e001370370200520052903a801370320201a200141086a290200370300201b200141106a290200370300201c200141186a290200370300200520012902003703c001200b0d000b0b2007450d0703402007417f6a210741012112024002400340201020022f01e602490d01024020022802e00222110d002002102e410021020c030b20022f01e40221102002102e2012417f6a2112201121020c000b0b201041016a2111200220104105746a2210280214210120102802102116024020124101470d00201121100c010b200220114102746a41c8056a280200210202402012450d0041002110034020022802c805210220122010417f6a2210470d000b0b410021100b2016450d0902402001450d00200141306c450d002016102e0b2007450d080c000b0b20020d010c040b2007450d00200541c0026a210f200541b8026a210d03402007417f6a210741012110024002400340201220022f01e602490d01024020022802e0022211450d0020022f01e40221122002102e2010417f6a2110201121020c010b0b2002102e410021020c010b200f200220124105746a22114180036a290000370300200d201141f8026a2900003703002005201141f0026a2900003703b002201241016a21122011280214210e2011280210210120104101460d00200220124102746a41c8056a280200210202402010450d000340201041016a221220104f211120022802c80521022012211020110d000b0b410021120b2001450d040240200e450d00200e41306c450d002001102e0b20070d000b0b034020022802e00221102002102e2010210220100d000c030b0b41e8aac700412b41f8b7c0001039000b1038000b4108210f4100210e4100210d0c020b1036000b034020022802e00221102002102e2010210220100d000b0b2000200f3602042000410c6a200e360200200041086a200d360200410021020b20002002360200200541f0026a24000be30102027f017e230041206b22032400024002400240200041046a280200220420016b20024f0d00200120026a22022001490d02200441017422012002200120024b1b22014104200141044b1bad42307e2205422088a74541037421012005a721020240024020040d00200341003602100c010b200341106a41086a41083602002003200441306c360214200320002802003602100b200320022001200341106a107d200341086a280200210120032802004101460d0120002003280204360200200041046a200141306e3602000b200341206a24000f0b2001450d001036000b1038000be71e080a7f017e017f017e017f027e0e7f017e230041d0046b220324002003420037020c02400240024002400240024002402001280208220441ffffffff03712004470d0020044102742205417f4c0d0020012802042106200128020021070240024020050d00410421010c010b2005102c2201450d070b41002108200341003602202003200136021820032005410276220936021c024002400240200920044f0d00200541017622092004200920044b1b22094104200941044b1b220941ffffffff0371200946410274210a200941027421090240024020050d00200341003602e8030c010b200341f0036a4104360200200320053602ec03200320013602e8030b20034180036a2009200a200341e8036a107d20034188036a280200210502402003280280034101460d00200320032802840322013602182003200541027636021c200328022021080c020b2005450d030c090b2004450d010b2004410574210b200120084102746a210a200341e8036a41046a210c20034180036a41c4006a210141002109200721050340200341c8016a41186a200541186a2204290000220d370300200341c8016a41106a200541106a220e290000220f370300200341c8016a41086a200541086a221029000022113703002003200529000022123703c801200341a8026a41186a22132004290000370300200341a8026a41106a2204200e290000370300200341a8026a41086a220e2010290000370300200320052900003703a802200341e8036a41186a200d370300200341e8036a41106a200f370300200341e8036a41086a2011370300200320123703e803200341086a200341e8036a200910a402200141186a2013290300370200200141106a2004290300370200200141086a200e290300370200200120032903a80237020020034180036a410041c40010eb081a200c20034180036a41e40010e9081a41f800102c2204450d08200541206a21052004410036020820044281808080103703002004410c6a200341e8036a41e80010e9081a200441003a0074200420032f00f8013b0075200441f7006a200341f8016a41026a2d00003a0000200a2004360200200941016a2109200a41046a210a200b41606a220b0d000b200820096a21080b200320083602200240200641ffffff3f71450d002007102e0b2002280208210420022802042107200228020021022003413c6a200341186a360200200320023602302003200736022c2003200236022820032002200441386c220a6a22143602342003200341086a360238200221012004450d04200341e8036a41346a2106200341286a41106a210820034180036a412c6a2109200221010340200341d8026a41086a220b2001220441086a290300370300200341d8026a41106a220e200441106a290300370300200341d8026a41186a2210200441186a290300370300200341d8026a41206a2213200441206a290300370300200320042903003703d8022003200441386a2201360230200441286a2802002105200341c0006a41086a220c200441346a28020036020020032004412c6a2902003703402005450d0420034180036a41206a201329030037030020034180036a41186a201029030037030020034180036a41106a200e29030037030020034180036a41086a200b29030037030020092003290340370200200941086a200c280200360200200320032903d80237038003200320053602a803200341e8036a200820034180036a10ba04024020032802980422050d00200a41486a220a0d010c050b0b200341a8026a41286a2204200341e8036a41286a290300370300200341a8026a41206a2201200341e8036a41206a290300370300200341a8026a41186a2209200341e8036a41186a290300370300200341a8026a41106a220a200341e8036a41106a290300370300200341a8026a41086a220b200341e8036a41086a290300370300200341d0006a41086a220e200641086a290200370300200341d0006a41106a2210200641106a290200370300200341d0006a41186a2213200641186a290200370300200341d0006a41206a220c200641206a290200370300200341d0006a41286a2208200641286a280200360200200320032903e8033703a80220032006290200370350200341f8016a41086a2202200e290300370300200341f8016a41106a220e2010290300370300200341f8016a41186a22102013290300370300200341f8016a41206a2213200c290300370300200341f8016a41286a220c2008280200360200200341c8016a41086a2208200b290300370300200341c8016a41106a220b200a290300370300200341c8016a41186a220a2009290300370300200341c8016a41206a22072001290300370300200341c8016a41286a22012004290300370300200320032903503703f801200320032903a8023703c80120034198016a41286a2204200c28020036020020034198016a41206a220c201329030037030020034198016a41186a2213201029030037030020034198016a41106a2210200e29030037030020034198016a41086a220e2002290300370300200320032903f8013703980141e000102c2209450d06200920032903c801370300200920053602302009200329039801370234200941286a2001290300370300200941206a2007290300370300200941186a200a290300370300200941106a200b290300370300200941086a20082903003703002009413c6a200e290300370200200941c4006a2010290300370200200941cc006a2013290300370200200941d4006a200c290300370200200941dc006a200428020036020020034180016a41086a200341286a41086a290300220d37030020034180016a41106a2202200341286a41106a29030037030020032003290328370380010240200da72201200328028c012208470d0041012107410121060c030b20034180036a412c6a210a200341e8036a41346a211541012107410121060340200341d8026a41186a220b2001220441186a290300370300200341d8026a41206a220e200441206a2903003703002003200441386a220136028801200341d8026a41086a2210200441086a290300370300200341d8026a41106a2213200441106a290300370300200320042903003703d802200441286a2802002105200341c0006a41086a220c200441346a28020036020020032004412c6a2902003703402005450d0220034180036a41206a2214200e29030037030020034180036a41186a220e200b29030037030020034180036a41106a220b201329030037030020034180036a41086a22132010290300370300200a2003290340370200200a41086a200c280200360200200320032903d80237038003200320053602a803200341e8036a200220034180036a10ba04024020032802980422050d0020082001470d010c030b200341a8026a41286a2204200341e8036a41286a2201290300370300200341a8026a41206a2216200341e8036a41206a2210290300370300200341a8026a41186a2217200341e8036a41186a220c290300370300200341a8026a41106a2218200341e8036a41106a2208290300370300200341a8026a41086a2219200341e8036a41086a221a290300370300200341d0006a41086a221b201541086a290200370300200341d0006a41106a221c201541106a290200370300200341d0006a41186a221d201541186a290200370300200341d0006a41206a221e201541206a290200370300200341d0006a41286a221f201541286a280200360200200320032903e8033703a80220032015290200370350200341f8016a41086a2220201b290300370300200341f8016a41106a221b201c290300370300200341f8016a41186a221c201d290300370300200341f8016a41206a221d201e290300370300200341f8016a41286a221e201f280200360200200341c8016a41086a221f2019290300370300200341c8016a41106a22192018290300370300200341c8016a41186a22182017290300370300200341c8016a41206a22172016290300370300200341c8016a41286a22162004290300370300200320032903503703f801200320032903a8023703c80120034198016a41286a2204201e28020036020020034198016a41206a221e201d29030037030020034198016a41186a221d201c29030037030020034198016a41106a221c201b29030037030020034198016a41086a221b2020290300370300200320032903f80137039801201a201f29030037030020082019290300370300200c20182903003703002010201729030037030020012016290300370300200320032903c8013703e8032013201b290300370300200b201c290300370300200e201d2903003703002014201e29030037030020034180036a41286a221620042802003602002003200329039801370380030240024020062007470d00200741016a22042007490d03200741017422172004201720044b1b22044104200441044b1bad42e0007e220d422088a7454103742104200da721170240024020070d00200341003602a8020c010b200341083602b002200320093602a8022003200741e0006c3602ac020b200341f8016a20172004200341a8026a107d200328028002210420032802f8014101460d0120032802fc012109200441e0006e21070b2009200641e0006c6a220420032903e8033703002001290300210d201a290300210f20082903002111200c29030021122010290300212120042005360230200441206a2021370300200441186a2012370300200441106a2011370300200441086a200f370300200441286a200d370300200441346a2003290380033702002004413c6a2013290300370200200441c4006a200b290300370200200441cc006a200e290300370200200441d4006a2014290300370200200441dc006a2016280200360200200641016a21062003280288012201200328028c012208470d010c040b0b20040d060b1038000b200441386a21010b200820016b220441386d210502402004450d00200541386c21052001412c6a210403400240200428020041ffffff3f71450d002004417c6a280200102e0b200441386a2104200541486a22050d000b0b2003280284012204450d02200441386c450d02200328028001102e0c020b200441386a21010b201420016b220441386d210502402004450d00200541386c21052001412c6a210403400240200428020041ffffff3f71450d002004417c6a280200102e0b200441386a2104200541486a22050d000b0b410821094100210602402007450d00200741386c450d002002102e0b410021070b200020032903183702002000200936020c200041146a2006360200200041106a2007360200200041086a200341186a41086a280200360200200341086a10bc02200341d0046a24000f0b1036000ba10b05047f027e0b7f037e017f230041f0016b220324002002412c6a2802002104200241306a28020021052002280228210620022903002107200341186a200241206a290000370300200341106a200241186a290000370300200341086a200241106a2900003703002003200229000837030002400240024002400240024002402005ad42d8007e2208422088a70d002008a72202417f4c0d000240024020020d00410821090c010b2002102c2209450d020b200241d8006e210a024020050d004100210b0c070b200620054105746a210c20034188016a41046a210d4100210b2006210e0340200341206a41086a220f200e41086a290000370300200341206a41106a2210200e41106a290000370300200341206a41186a2211200e41186a2900003703002003200e290000370320200b41d8006c2102200e41206a210e2009210502400240024003402002450d01200241a87f6a2102200541346a2112200541d8006a21052012200341206a412010ec080d000c020b0b2001280200200341206a10a0022202450d00200128020422052802082213200228020022124d0d05200528020020124102746a28020022122802080d062012417f3602082012427f2012290330220820077c221420142008542205201241386a221329030022152005ad7c2216201554201420085a1b22051b3703302013427f201620051b370300200341e0006a41186a22132011290300370300200341e0006a41106a22112010290300370300200341e0006a41086a2210200f2903003703002003200329032037036020012802042205280208220f200228020022024d0d07200528020020024102746a280200220f28020041016a220241014d0d08200f2002360200200d410041e40010eb081a41f800102c2205450d042005410036020820054281808080103703002005410c6a20034188016a41e80010e9081a200541003a0074200520032f0085013b0075200541f7006a20034185016a41026a2d00003a0000200341c0006a41086a22172010290300370300200341c0006a41106a22102011290300370300200341c0006a41186a22112013290300370300200320032903603703400240200b200a470d00200b41016a2202200b490d04200b41017422132002201320024b1b22024104200241044b1bad42d8007e2208422088a74541037421022008a7211302400240200b0d0020034100360288010c010b200341083602900120032009360288012003200b41d8006c36028c010b200341e0006a2013200220034188016a107d2003280268210220032802604101460d0220032802642109200241d8006e210a0b2009200b41d8006c6a220242003703002002200f360230200241186a4200370300200241106a4200370300200241086a4200370300200241206a4200370300200241286a4200370300200220032903403702342002413c6a2017290300370200200241c4006a2010290300370200200241cc006a201129030037020020052005280200417f6a2202360200024020020d00200541046a22022002280200417f6a220236020020020d002005102e0b200b41016a210b2012201228020841016a3602080b200e200c460d080c010b0b20020d010b1038000b1036000b20122013418884c500103c000b4194dacc00411020034188016a41e4ffc400419884c500103e000b2002200f41a884c500103c000b00000b0240200441ffffff3f71450d002006102e0b02400240200b0d0020004100360230200a450d01200a41d8006c450d012009102e0c010b200042013703202000420037031020004200370308200020073703002000200a36023420002009360230200041286a4200370300200041186a4200370300200041386a200b3602002000413c6a2003290300370000200041c4006a200341086a290300370000200041cc006a200341106a290300370000200041d4006a200341186a2903003700000b200341f0016a24000bf60805077f027e047f037e027f230041306b2202240002400240024002400240024002400240200141386a2802002203450d002001280230220441d8006a21052004200341d8006c22066a21070340200541586a2802002203280208220441016a41004c0d04200541486a22082903002109200841086a290300210a20032004360208200341f4006a2d00004101460d02200541d8006a2105200641a87f6a22060d000b0b4100210620024100360220200242083703184108210b0c010b024002404110102c220b450d00200b2009370300200b200a3703084101210641012108034020052007460d02200541306a2802002203280208220441016a41004c0d05200541286a2903002109200541206a290300210a20032004360208200541d8006a22042105200341f4006a2d00004101470d000240024020082006470d00200641016a22052006490d08200641017422032005200320054b1b22054104200541044b1b220541ffffffff00712005464103742103200541047421050240024020060d00200241003602080c010b200241083602102002200b3602082002200641047436020c0b200241186a20052003200241086a107d2002280220210520022802184101460d01200228021c210b200541047621060b200b20084104746a220520093703082005200a370300200841016a2108200421050c010b0b2005450d050b1036000b200220083602202002200636021c2002200b3602180b200241086a200241186a2001290300200141086a29030010bc040240024020022802084101470d00200241086a41086a2802002105200228020c21030c010b20012802302204200128023841d8006c6a2108200228020c220c200241146a2802004104746a210d200241086a41086a280200210e200c210702400340200820042205460d01200541306a2802002203280208220441016a41004c0d0620032004360208200541d8006a2104200341f4006a2d0000450d002007200d460d01200541d8006a220441586a28020022052802080d07200741086a29030021092007290300210a2005417f360208200542002005290340220f200441486a220129030022107d22112011200f56200541c8006a22032903002211200141086a22122903007d200f201054ad7d220f201156200f2011511b22131b37034020034200200f20131b370300201220093703002001200a3703002005200528020841016a3602082005427f200a2005290340220f7c220a200a200f54220120092003290300220a7c2001ad7c2209200a542009200a511b22011b3703402003427f200920011b370300200741106a21070c000b0b410021030240200e41ffffffff0071450d00200c102e0b0b0240200641ffffffff0071450d00200b102e0b2000200536020420002003360200200241306a24000f0b41bcd9cc004118200241286a41c4ffc40041e883c500103e000b41bcd9cc004118200241286a41c4ffc40041e883c500103e000b1038000b41bcd9cc004118200241286a41c4ffc40041d4ffc400103e000b4194dacc004110200241286a41e4ffc40041f4ffc400103e000bdb3609057f027e017f027e037f067e0e7f017e077f230041e0006b22042400200128020022052001280208220641047422076a210842002109410021014200210a02400240024002400340024020072001470d0020060d02200042808080808001370200200041086a42003702000c030b200a200520016a220b41086a2903007c2009200b2903007c220c200954220bad7c220d200a51210e200d200a54210f200141106a2101200c2109200d210a200b200f200e1b4101470d000b200041b4d2cc0036020420004101360200200041086a411e3602000c010b0240200220092009200254200a200354200a200351220b1b22101b220d2009200220101b220c7d22112003200a20101b200a200320101b7d200d200c54ad7d2212844200520d00200641ffffffff00712006470d0320064104742201417f4c0d032001102c220b450d02200b2005200641047410e90821052000410c6a2006360200200041086a200141047636020020002005360204200041003602000c010b200441286a201120122006ad2213420010e708200441186a201120122013420010e608201342187e220d422088a70d02200da72201417f4c0d02200441186a41086a2903002114200441286a41086a29030021152004290318210c200429032821162001102c2217450d0102400240024002400240024002400240024002400240024002400240024002400240024002400240200141186e221820064f0d00200441386a41086a41083602002004201841186c36023c20042017360238200441d0006a201841017422012006200120064b1b22014104200141044b1bad42187e220da7200d422088a745410374200441386a107d200441d0006a41086a280200210120042802504101460d0120042802542117200141186e21180b20052008460d042006410474210b410021192017210103402005290300210a200141106a200541086a290300370300200141086a200a37030020012019360200200141186a2101201941016a2119200541106a2105200b41706a220b0d000b201941144b0d01201941014d0d0620172019417f6a220b41186c6a21084100210e03402019200b2201417f6a220b490d0402402019200b6b221a4102490d002017200141186c6a220141086a220f2903002017200b41186c6a220541086a2207290300220d5a200141106a221b2903002209200541106a221c290300220a5a2009200a511b0d002005280200211d200520012903003703002007200f290300370300201c201b2903003703000240201a4103490d00200e417f6a211b41002105200821010340200141206a220f290300200d5a200141286a22072903002209200a5a2009200a511b0d01201b2005460d06200141106a2007290300370300200141086a200f2903003703002001200141186a220f290300370300200f2101200e2005417f6a2205470d000b200f21010b2001200d3703082001201d360200200141106a200a3703000b200841686a2108200e417f6a210e200b0d000c070b0b20010d130c140b2019410176ad42187e220a422088a70d13200aa7221e417f4c0d13201e102c221f450d12201741686a2120201741406a212141042122410021234100211c20192124034020242108410021244101210702402008417f6a220e450d0002400240024002400240024002402017200e41186c6a220141086a290300200841186c221b20176a41586a2205290300220954200141106a290300220d200541086a290300220a54200d200a511b0d002008417e6a21072021201b6a210141002124410021050340024020072005470d00200821070c090b2009200129030022255a210b200a200141086a290300220d51210e200a200d5a210f200141686a2101200541016a210520252109200d210a200b200f200e1b0d000b200541016a21072005417f7320086a210e0c010b2021201b6a2101024003400240200e4101470d004100210e0c020b200920012903002225542105200a200141086a290300220d51210b200a200d54210f200141686a2101200e417f6a210e20252109200d210a2005200f200b1b0d000b0b2008200e490d01200820194b0d022008200e6b2207410176220b450d002017200e41186c6a21012020201b6a21050340200441386a41106a220f200141106a221b290300370300200441386a41086a221a200141086a221d29030037030020042001290300370338200541106a2226290300210a200541086a2227290300210920012005290300370300201d2009370300201b200a3703002026200f2903003703002027201a29030037030020052004290338370300200141186a2101200541686a2105200b417f6a220b0d000b0b0240200e0d00200e21240c060b0240200741094d0d00200e21240c060b200820194b0d03200e20086b210b2017200e41186c6a211b03402008200e417f6a2224490d050240200820246b22074102490d002017200e41186c6a220141086a220e2903002017202441186c6a220541086a220f290300220d5a200141106a221a2903002209200541106a221d290300220a5a2009200a511b0d002005280200212620052001290300370300200f200e290300370300201d201a290300370300024020074103490d0041012105201b21010340200141206a220e290300200d5a200141286a220f2903002209200a5a2009200a511b0d01200b20056a4101460d06200141106a200f290300370300200141086a200e2903003703002001200141186a220e290300370300200e2101200b200541016a22056a0d000b200e21010b2001200d37030820012026360200200141106a200a3703000b2024450d06201b41686a211b200b417f6a210b2024210e2007410a4f0d060c000b0b200e200841e4d1cc001057000b2008201941e4d1cc00104d000b2005200741d4d1cc00103c000b2008200e417f6a2224490d002008201941f4d1cc00104d000b2024200841f4d1cc001057000b02400240024002400240201c2023460d00201c21010c010b202341016a22012023490d18202341017422052001200520014b1b22014104200141044b1b220141ffffffff01712001464102742105200141037421010240024020230d00200441003602380c010b20044104360240200420223602382004202341037436023c0b200441d0006a20012005200441386a107d2004280258210520042802504101460d012004280254212220232101200541037621230b202220014103746a2201200736020420012024360200201c41016a2228211c202841024f0d010c020b2005450d160c150b0240024002400340024002400240024020222028221c417f6a22284103746a2201280200450d00201c41037420226a220f41746a280200220e200128020422054d0d00201c41024d0d082022201c417d6a22014103746a280204220b2005200e6a4d0d01201c41034d0d08200f41646a280200200b200e6a4b0d080c010b201c4103490d01200128020421052022201c417d6a22014103746a280204210b0b200b2005490d010b201c417e6a21010b0240201c200141016a22294d0d00201c20014d0d02202220014103746a2226280204222a20262802006a2201202220294103746a2227280200222b490d03200120194b0d04202641046a212c2017202b41186c6a221a2027280204221d41186c22056a210b200141186c210f024002402001202b6b2207201d6b2201201d490d00201f201a200510e908221b20056a210e02400240201d4101480d002007201d4a0d010b201a2101201b21050c020b2017200f6a2108201b2105201a210103402001200b2005200b41086a290300200541086a29030054200b41106a290300220a200541106a290300220954200a2009511b220f1b2207290300370300200141086a200741086a290300370300200141106a200741106a2903003703002005200541186a200f1b2105200141186a2101200b41186a200b200f1b220b20084f0d02200e20054b0d000c020b0b201f200b200141186c220510e908220720056a210e02400240201d4101480d00200141014e0d010b200b2101200721050c010b2020200f6a210f200b21010340200f200141686a2208200e41686a221b200e41706a2205290300200141706a220b29030054200541086a290300220a200b41086a290300220954200a2009511b22051b220b290300370300200f41086a200b41086a290300370300200f41106a200b41106a290300370300200e201b20051b210e0240201a2008200120051b2201490d00200721050c020b200f41686a210f200721052007200e490d000b0b20012005200e20056b220b200b4118706b10e9081a202c202a201d6a3602002026202b3602002027202741086a201c2029417f736a41037410ea081a4101211c202841014d0d050c010b0b2029201c4184d2cc00103c000b2001201c4194d2cc00103c000b202b200141a4d2cc001057000b2001201941a4d2cc00104d000b2024450d040c000b0b410120056b201a41d4d1cc00103c000b200b201941c4d1cc001056000b0240200920025a200a20035a200b1b0d004101210f410021190c030b41d2d2cc00413f4194d3cc00105d000b0240202341ffffffff0171450d002022102e0b201e4118702101201e4118490d00201e2001460d00201f102e0b2019411549210f20100d002006417f6a210b201741106a290300212520172903082102201120135441002012501b450d01200c2109200b21010c020b200441086a200220032013420010e70841002101200441086a41086a290300210d200429030821030240201120135441002012501b0d00410021012006210b0340201920014d0d0a2017200141186c6a2205290308220a20167c2209200a54220e200541106a290300222520157c200ead7c220a202554200a2025511b4101460d09200541086a220520093703002005200a37030802402009200354200a200d54200a200d511b0d00200141016a20067021010b200b417f6a220b0d000b0b200c201484500d020340201920014d0d072017200141186c6a2205290308222542017c220a202554220b200541106a2903002216200bad7c2209201654200a20255a1b4101460d06200541086a2205200a370300200520093703080240200a2003542009200d542009200d511b0d00200141016a20067021010b200c427f7c220a200c542105200a210c200a20142005ad7c427f7c22148450450d000c030b0b200b21010340201920014d0d042017200141186c6a220542002005290308220a20167d22032003200a56200541106a220e290300220920157d200a201654ad7d220d200956200d2009511b22051b200320051b2203370308200e4200200d20051b200d20051b220d3703002001200b2001417f6a220e200e20014b1b2003200256200d202556200d2025511b1b21012014201520097d2016200a54ad7d420020051b7c200c2016200a7d420020051b7c2209200c54ad7c21142009210c2006417f6a22060d000b0b2009201484500d002009210c0340201920014d0d02024002402017200141186c6a2205290308220a427f7c2216200a56200541106a2903002203200a50ad7d220d200356200a4200521b4101470d00200b2001417f6a2205200520014b1b21010c010b200541086a220520163703002005200d3703082001200b2001417f6a2205200520014b1b2016200256200d202556200d2025511b1b210120142009427f7c220c200954ad7c427f7c2114200c21090b200c2014844200520d000b0b024002400240200f450d00201941014d0d0a20172019417f6a220e41186c6a21084100210f03402019200e2201417f6a220e490d0302402019200e6b221a4102490d002017200141186c6a22012802002017200e41186c6a220528020022074f0d00200520012903003703002005290308210a200541086a200141086a290300370300200541106a220529030021092005200141106a2903003703000240201a4103490d00200f417f6a211b41002105200821010340200141186a220b28020020074f0d01201b2005460d05200141106a200141286a290300370300200141086a200141206a2903003703002001200b290300370300200b2101200f2005417f6a2205470d000b200b21010b2001200a37030820012007360200200141106a20093703000b200841686a2108200f417f6a210f200e0d000c0b0b0b2019410176ad42187e220a422088a70d0c200aa72210417f4c0d0c2010102c221f450d0b201741686a2123201741b87f6a212041042122410021064100211c20192124034020242108410021244101210702402008417f6a220b450d0002400240024002400240024002402017200b41186c6a280200200841186c221b20176a41506a2802002201490d002008417e6a21072020201b6a210b41002124410021050340024020072005470d00200821070c090b200541016a21052001200b280200220e4f210f200b41686a210b200e2101200f0d000b200541016a21072005417f7320086a210b0c010b2020201b6a2105024003400240200b4101470d004100210b0c020b200b417f6a210b20012005280200220e49210f200541686a2105200e2101200f0d000b0b2008200b490d01200820194b0d022008200b6b2207410176220e450d002017200b41186c6a21012023201b6a21050340200441386a41106a220f200141106a221b290300370300200441386a41086a221a200141086a221d29030037030020042001290300370338200541106a2226290300210a200541086a2227290300210920012005290300370300201d2009370300201b200a3703002026200f2903003703002027201a29030037030020052004290338370300200141186a2101200541686a2105200e417f6a220e0d000b0b0240200b0d00200b21240c060b0240200741094d0d00200b21240c060b200820194b0d03200b20086b210e2017200b41186c6a211b03402008200b417f6a2224490d050240200820246b22074102490d002017200b41186c6a22012802002017202441186c6a2205280200220f4f0d00200520012903003703002005290308210a200541086a200141086a290300370300200541106a220529030021092005200141106a290300370300024020074103490d0041012105201b21010340200141186a220b280200200f4f0d01200e20056a4101460d06200141106a200141286a290300370300200141086a200141206a2903003703002001200b290300370300200b2101200e200541016a22056a0d000b200b21010b2001200a3703082001200f360200200141106a20093703000b2024450d06201b41686a211b200e417f6a210e2024210b2007410a4f0d060c000b0b200b200841e4d1cc001057000b2008201941e4d1cc00104d000b2005200741d4d1cc00103c000b2008200b417f6a2224490d002008201941f4d1cc00104d000b2024200841f4d1cc001057000b02400240024002400240201c2006460d00201c21010c010b200641016a22012006490d11200641017422052001200520014b1b22014104200141044b1b220141ffffffff01712001464102742105200141037421010240024020060d00200441003602380c010b20044104360240200420223602382004200641037436023c0b200441d0006a20012005200441386a107d2004280258210520042802504101460d012004280254212220062101200541037621060b202220014103746a2201200736020420012024360200201c41016a2228211c202841024f0d010c020b2005450d0f0c0e0b0240024002400340024002400240024020222028221c417f6a22284103746a2201280200450d00201c41037420226a220f41746a280200220e200128020422054d0d00201c41024d0d082022201c417d6a22014103746a280204220b2005200e6a4d0d01201c41034d0d08200f41646a280200200b200e6a4b0d080c010b201c4103490d01200128020421052022201c417d6a22014103746a280204210b0b200b2005490d010b201c417e6a21010b0240201c200141016a22294d0d00201c20014d0d02202220014103746a2226280204222a20262802006a2201202220294103746a2227280200222b490d03200120194b0d04202641046a212c2017202b41186c6a221a2027280204221d41186c22056a210b200141186c210f024002402001202b6b2207201d6b2201201d490d00201f201a200510e908221b20056a210e02400240201d4101480d002007201d4a0d010b201a2101201b21050c020b2017200f6a2108201b2105201a210103402001200b2005200b280200200528020049220f1b2207290300370300200141106a200741106a290300370300200141086a200741086a2903003703002005200541186a200f1b2105200141186a2101200b41186a200b200f1b220b20084f0d02200e20054b0d000c020b0b201f200b200141186c220510e908221b20056a210e02400240201d4101480d00200141014e0d010b200b2101201b21050c010b2023200f6a210f200b21010340200f200141686a2205200e41686a220b200b28020020052802004922071b2208290300370300200f41106a200841106a290300370300200f41086a200841086a290300370300200e200b20071b210e0240201a2005200120071b2201490d00201b21050c020b200f41686a210f201b2105201b200e490d000b0b20012005200e20056b220b200b4118706b10e9081a202c202a201d6a3602002026202b3602002027202741086a201c2029417f736a41037410ea081a4101211c202841014d0d050c010b0b2029201c4184d2cc00103c000b2001201c4194d2cc00103c000b202b200141a4d2cc001057000b2001201941a4d2cc00104d000b2024450d090c000b0b410120056b201a41d4d1cc00103c000b200e201941c4d1cc001056000b20012019419cd4cc00103c000b20012019418cd4cc00103c000b41b4d3cc00412641fcd3cc00105d000b2001201941ecd3cc00103c000b41b4d3cc00412641dcd3cc00105d000b2001201941a4d3cc00103c000b0240200641ffffffff0171450d002022102e0b2010411870210120104118490d0020102001460d00201f102e0b201941186c41186d220141ffffffff00712001470d0220014104742205417f4c0d020240024020050d004108210e0c010b2005102c220e450d020b02400240024002402005410476220f20014f0d002005410376220b2001200b20014b1b22014104200141044b1b220141ffffffff0071200146410374210b200141047421010240024020050d00200441003602380c010b200441386a41086a41083602002004200536023c2004200e3602380b200441d0006a2001200b200441386a107d200441d8006a280200210120042802504101460d012004280254210e2001410476210f0b20190d01410021010c020b2001450d040c030b201741086a2101201941186c220b41686a41186e2107200e210503402001290300210a2005200141086a2903003703082005200a370300200141186a2101200541106a2105200b41686a220b0d000b200741016a21010b02402018450d00201841186c450d002017102e0b2000200e360204200041003602002000410c6a2001360200200041086a200f3602000b200441e0006a24000f0b1036000b1038000bb50b020d7f047e23004190026b220424002004200337036820042002370360200128020021052001280204210602400240024002400240024020012802082207450d002005200741226c22086a2109200441d0006a2002200342ffff03420010e608200441c0006a2002200342ffff03420010e708200441c0006a41086a2903002102200429034021032004280250210a200521070340200741206a2f0100210b200441f0016a41186a200741186a290000370300200441f0016a41106a200741106a290000370300200441f0016a41086a200741086a290000370300200420072900003703f001200b0d02200741226a21072008415e6a22080d000b0b20004100360208200042083702002006450d01200641226c450d012005102e0c010b200441306a20032002200bad420010e80820044190016a41086a200441f0016a41086a2903002202370300200441f0006a41186a220c200441f0016a41186a290300370300200441f0006a41106a220d200441f0016a41106a290300370300200441f0006a41086a220e2002370300200420042903f00122023703900120042002370370200a200b6c220b41ffff036e210a200b41ffff0370210f20042903302102200441306a41086a29030021034130102c2210450d0220102002200a417f200b4180807c491b200f41ffff014b6aad42ffff03837c221137032020102004290370370300201041286a20032011200254ad7c370300201041186a200c290300370300201041106a200d290300370300201041086a200e2903003703002004200936027c2004200741226a220736027820042006360274200420053602702004200441e0006a360280010240024020084122470d004101210d4101210c0c010b4101210d4101210c03402004200741226a220b360278200741206a2f01002108200441f0016a41186a2205200741186a290000370300200441f0016a41106a2206200741106a290000370300200441f0016a41086a220a200741086a290000370300200420072900003703f001024020080d00200b21072009200b470d010c020b200441206a20042802800122072903002202200741086a290300220342ffff03420010e608200441106a2002200342ffff03420010e70820042004290310200441106a41086a2903002008ad420010e80820044190016a41086a2207200a29030037030020044190016a41106a220b200629030037030020044190016a41186a22092005290300370300200420042903f00122023703b0012004200237039001200520092903003703002006200b290300370300200a200729030037030020042004290390013703f001200428022020086c220b41ffff036e2108200b41ffff0370210920042903002102200441086a29030021030240200c200d470d00200d41016a2207200d490d06200d410174220e2007200e20074b1b22074104200741044b1bad42307e2211422088a74541037421072011a7210e02400240200d0d00200441003602d0010c010b200441083602d801200420103602d0012004200d41306c3602d4010b200441b0016a200e2007200441d0016a107d20042802b801210720042802b0014101460d0420042802b4012110200741306e210d0b2010200c41306c6a220720042903f0013703002006290300211120052903002112200a2903002113200720022008417f200b4180807c491b200941ffff014b6aad42ffff03837c2214370320200741086a2013370300200741286a20032014200254ad7c370300200741186a2012370300200741106a2011370300200c41016a210c20042802782207200428027c2209470d000b0b024020042802742207450d00200741226c450d002004280270102e0b2000200c3602082000200d360204200020103602000b2000200129020c37020c200041246a200141246a2902003702002000411c6a2001411c6a290200370200200041146a200141146a29020037020020044190026a24000f0b2007450d010b1036000b1038000b9e3203187f017e0f7f230041206b2202240002402001280208220320036a22042003490d002001280200210502400240024020040d00410221060c010b2004102c2206450d010b02400240024002402004410176220720034f0d0020042003200420034b1b22084104200841044b1b220820086a220920084f41017421080240024020040d00200241003602100c010b200241186a410236020020022004360214200220063602100b200220092008200241106a107d200241086a280200210420022802004101460d0120022802042106200441017621070b20052005200341226c6a470d01410021040c020b20040d020c030b200541206a2104200341226c2205415e6a41226e2108200621030340200320042f01003b0100200441226a2104200341026a21032005415e6a22050d000b200841016a21040b4101450d0120044102742203417f4c0d010240024020030d004104210a0c010b2003102c220a450d010b0240024002402003410276220b20044f0d00200341017622052004200520044b1b22054104200541044b1b41027421050240024020030d00200241003602100c010b200241186a4104360200200220033602142002200a3602100b200220054104200241106a107d200241086a2802002103024020022802004101460d002002280204210a2003410276210b0c020b2003450d040c030b20040d004100210c0c010b20044101742205417e6a4101762108200a2104200621030340200420032f0100360200200441046a2104200341026a21032005417e6a22050d000b200841016a210c0b200a200c41027422046a21094100210d200a2103024002400240024002400340024020040d000240200c0d004100210e4104210f4100210c0c050b024041ffff03200d200d41ffff034922041b200d41ffff0320041b6b22100d00200c41ffffffff0371200c470d09200c4102742204417f4c0d092004102c220f450d08200f200a200c41027410e9081a2004410276210e0c050b2010200c7021112010200c6e21122009200a6b2204410276220341ffffffff01712003470d0820044101742204417f4c0d080240024020040d00410421130c010b2004102c2213450d080b02400240024002402004410376221420034f0d00200441027622052003200520034b1b22034104200341044b1b220341ffffffff01712003464102742105200341037421030240024020040d00200241003602100c010b200241186a410436020020022004360214200220133602100b200220032005200241106a107d200241086a280200210420022802004101460d0120022802042113200441037621140b200c4102742208417c6a221541027621164100210320132104200a21050340200441046a200528020036020020042003360200200441086a2104200341016a2103200541046a21052008417c6a22080d000b201641016a21170240201541cf004b0d002015450d07201320164103746a2118201741037420136a41786a210e41002108201621050340201720052204417f6a2205490d040240201720056b22194102490d00201320044103746a220441046a280200201320054103746a220341046a2802004f0d002003290200211a20032004290200370200024020194103490d00201a422088a7210f2008417f6a211b41002103200e210403402004410c6a280200200f4f0d01201b2003460d062004200441086a22092902003702002009210420082003417f6a2203470d000b201821040b2004201a3702000b2008417f6a2108200e41786a210e20050d000c080b0b2017410176220441ffffffff01712004470d0b2004410374221c417f4c0d0b201c102c221d450d0a201341786a211e2013416c6a211f4104212041002121410021192017212203402022210f41002122410121090240200f417f6a2204450d000240024002400240024002400240201320044103746a41046a280200200f410374221820136a41746a2802002203490d00200f417e6a210e201f20186a2105410021224100210403400240200e2004470d00200f21090c090b200441016a21042003200528020022084f2109200541786a21052008210320090d000b200441016a21092004417f73200f6a21040c010b201f20186a210502400340024020044101470d00410021040c020b2004417f6a2104200320052802002208492109200541786a21052008210320090d000b0b200f2004490d01200f20174b0d02200f20046b22094101762208450d00201320044103746a2103201e20186a210503402003290200211a200320052902003702002005201a370200200341086a2103200541786a21052008417f6a22080d000b0b024020040d00200421220c060b0240200941094d0d00200421220c060b200f20174b0d03200f20046b2105201320044103746a211b201e20186a21230340200f2004417f6a2222490d050240200f20226b22094102490d00201320044103746a220441046a280200201320224103746a220341046a2802004f0d002003290200211a20032004290200370200024020094103490d00201a422088a7210e2005417f6a211841002103201b210403402004410c6a280200200e4f0d0120052003460d062004200441086a2208290200370200200821042018200341016a2203470d000b202321040b2004201a3702000b2022450d06200541016a2105201b41786a211b202221042009410a4f0d060c000b0b2004200f41e4d1cc001057000b200f201741e4d1cc00104d000b200341016a200941d4d1cc00103c000b200f2004417f6a2222490d00200f201741f4d1cc00104d000b2022200f41f4d1cc001057000b0240024002400240024020192021460d00201921040c010b202141016a22042021490d10202141017422032004200320044b1b22044104200441044b1b220441ffffffff01712004464102742103200441037421040240024020210d00200241003602100c010b2002410436021820022020360210200220214103743602140b200220042003200241106a107d2002280208210320022802004101460d012002280204212020212104200341037621210b202020044103746a2204200936020420042022360200201941016a22242119202441024f0d010c020b2003450d0e0c0d0b02400240024003400240024002400240202020242219417f6a22244103746a2204280200450d00201941037420206a220941746a2802002208200428020422034d0d00201941024d0d0820202019417d6a22044103746a2802042205200320086a4d0d01201941034d0d08200941646a280200200520086a4b0d080c010b20194103490d012004280204210320202019417d6a22044103746a28020421050b20052003490d010b2019417e6a21040b02402019200441016a22254d0d00201920044d0d02202020044103746a2223280204222620232802006a2204202020254103746a22272802002228490d03200420174b0d04202341046a2129201320284103746a221b2027280204221841037422036a21082004410374210902400240200420286b220f20186b22042018490d00201d201b200310e908220420036a21050240024020184101480d00200f20184a0d010b201b2103200421040c020b201320096a210f20042104201b21030340200320082004200841046a280200200441046a2802004922091b2902003702002004200441086a20091b2104200341086a2103200841086a200820091b2208200f4f0d02200520044b0d000c020b0b201d20082004410374220310e908220f20036a21050240024020184101480d00200441014e0d010b20082103200f21040c010b201e20096a21092008210303402009200341786a2208200541786a220e2005417c6a2802002003417c6a2802004922041b2902003702002005200e20041b21050240201b2008200320041b2203490d00200f21040c020b200941786a2109200f2104200f2005490d000b0b20032004200520046b41787110e9081a2029202620186a360200202320283602002027202741086a20192025417f736a41037410ea081a41012119202441014d0d050c010b0b202520194184d2cc00103c000b200420194194d2cc00103c000b2028200441a4d2cc001057000b2004201741a4d2cc00104d000b2022450d060c000b0b2004450d0a0c090b410120036b201941d4d1cc00103c000b2005201741c4d1cc001056000b2004417c6a2104200d20032802006a2205200d492108200341046a21032005210d2008450d000b0240200b450d00200a102e0b411e210e41b4d2cc0021040c030b0240202141ffffffff0171450d002020102e0b201c450d00201d102e0b0240024002400240024002400240024002400240200d41feff034b0d0041ffff03200c6e2109410021040240200c20104b0d0041002104200c2105034020162004490d09201320044103746a2208280204220f20126a2203200f490d08200841046a2003360200024020032009490d00200441016a200c7021040b2005417f6a22050d000b0b2011450d01034020162004490d06201320044103746a2205280204220841016a22032008490d05200541046a2003360200024020032009490d00200441016a200c7021040b2011417f6a22110d000c020b0b200c417f6a21092013280204210e02400240200c20104d0d00200921040c010b20092104034020162004490d04201320044103746a220341002003280204220320126b2205200520034b22081b200520081b2205360204200420092004417f6a220f200f20044b1b2005200e4b1b21042011201220036b410020081b6a2111200c417f6a220c0d000b0b2011450d00034020162004490d0202400240201320044103746a22082802042203417f6a220520034d0d0020092004417f6a2203200320044b1b21040c010b200841046a2005360200200420092004417f6a2203200320044b1b2005200e4b1b21042011417f6a21110b20110d000b0b024002400240201541cf004b0d002015450d0a201320164103746a2119201741037420136a41786a210f410021080340201720162204417f6a2216490d030240201720166b221b4102490d00201320044103746a2204280200201320164103746a22032802004f0d002003290200211a200320042902003702000240201b4103490d00201aa721092008417f6a210e41002103200f21040340200441086a220528020020094f0d01200e2003460d05200420052902003702002005210420082003417f6a2203470d000b201921040b2004201a3702000b2008417f6a2108200f41786a210f20160d000c0b0b0b2017410176220441ffffffff01712004470d0e2004410374220c417f4c0d0e200c102c2229450d0d201341786a211d201341686a21114104212041002116410021192017212203402022210f41002122410121090240200f417f6a2204450d000240024002400240024002400240201320044103746a280200200f410374221820136a41706a2802002203490d00200f417e6a210e201120186a2105410021224100210403400240200e2004470d00200f21090c090b200441016a21042003200528020022084f2109200541786a21052008210320090d000b200441016a21092004417f73200f6a21040c010b201120186a210502400340024020044101470d00410021040c020b2004417f6a2104200320052802002208492109200541786a21052008210320090d000b0b200f2004490d01200f20174b0d02200f20046b22094101762208450d00201320044103746a2103201d20186a210503402003290200211a200320052902003702002005201a370200200341086a2103200541786a21052008417f6a22080d000b0b024020040d00200421220c060b0240200941094d0d00200421220c060b200f20174b0d03200f20046b2108201320044103746a211b201d20186a21230340200f2004417f6a2222490d050240200f20226b22094102490d00201320044103746a2204280200201320224103746a22032802004f0d002003290200211a20032004290200370200024020094103490d00201aa7210e2008417f6a211841002103201b21040340200441086a2205280200200e4f0d0120082003460d0620042005290200370200200521042018200341016a2203470d000b202321040b2004201a3702000b2022450d06200841016a2108201b41786a211b202221042009410a4f0d060c000b0b2004200f41e4d1cc001057000b200f201741e4d1cc00104d000b200341016a200941d4d1cc00103c000b200f2004417f6a2222490d00200f201741f4d1cc00104d000b2022200f41f4d1cc001057000b0240024002400240024020192016460d00201921040c010b201641016a22042016490d13201641017422032004200320044b1b22044104200441044b1b220441ffffffff01712004464102742103200441037421040240024020160d00200241003602100c010b2002410436021820022020360210200220164103743602140b200220042003200241106a107d2002280208210320022802004101460d012002280204212020162104200341037621160b202020044103746a2204200936020420042022360200201941016a22242119202441024f0d010c020b2003450d110c100b02400240024003400240024002400240202020242219417f6a22244103746a2204280200450d00201941037420206a220941746a2802002208200428020422034d0d00201941024d0d0820202019417d6a22044103746a2802042205200320086a4d0d01201941034d0d08200941646a280200200520086a4b0d080c010b20194103490d012004280204210320202019417d6a22044103746a28020421050b20052003490d010b2019417e6a21040b02402019200441016a220d4d0d00201920044d0d02202020044103746a2223280204222520232802006a22042020200d4103746a22272802002228490d03200420174b0d04202341046a2126201320284103746a221b2027280204221841037422036a21052004410374210902400240200420286b220f20186b22042018490d002029201b200310e908220420036a21080240024020184101480d00200f20184a0d010b201b2103200421040c020b201320096a210f20042104201b21030340200320052004200528020020042802004922091b2902003702002004200441086a20091b2104200341086a2103200541086a200520091b2205200f4f0d02200820044b0d000c020b0b202920052004410374220310e908220e20036a21080240024020184101480d00200441014e0d010b20052103200e21040c010b201d20096a210f200521030340200f200341786a2204200841786a2205200528020020042802004922091b2902003702002008200520091b21080240201b2004200320091b2203490d00200e21040c020b200f41786a210f200e2104200e2008490d000b0b20032004200820046b41787110e9081a2026202520186a360200202320283602002027202741086a2019200d417f736a41037410ea081a41012119202441014d0d050c010b0b200d20194184d2cc00103c000b200420194194d2cc00103c000b2028200441a4d2cc001057000b2004201741a4d2cc00104d000b2022450d090c000b0b410120036b201b41d4d1cc00103c000b2016201741c4d1cc001056000b20042017419cd4cc00103c000b20042017418cd4cc00103c000b41b4d3cc00412641fcd3cc00105d000b2004201741ecd3cc00103c000b41b4d3cc00412641dcd3cc00105d000b2004201741a4d3cc00103c000b0240201641ffffffff0171450d002020102e0b200c450d002029102e0b2017410374410375220441ffffffff03712004470d0420044102742203417f4c0d040240024020030d004104210f0c010b2003102c220f450d040b02402003410276220e20044f0d00200341017622052004200520044b1b22044104200441044b1b220441ffffffff03712004464102742105200441027421040240024020030d00200241003602100c010b200241186a4104360200200220033602142002200f3602100b200220042005200241106a107d200241086a280200210420022802004101460d032002280204210f2004410276210e0b2017410374220541786a4103762108200f2104201321030340200420033502043e0200200441046a2104200341086a2103200541786a22050d000b200841016a210c2014450d002013102e0b200c4102742205410275220320036a22042003490d032004417f4c0d030240024020040d004102211b0c010b2004102c221b450d030b02400240024002402004410176221920034f0d0020042003200420034b1b22034104200341044b1b220320036a220820034f41017421030240024020040d00200241003602100c010b200241186a4102360200200220043602142002201b3602100b200220082003200241106a107d200241086a280200210420022802004101460d012002280204211b200441017621190b200f20056a2209200f470d01410021050c020b2004450d050c040b41002105201b2104200f21030340200420032802002208417f200841808004491b3b0100200541016a2105200441026a21042009200341046a2203470d000b0b0240200e450d00200f102e0b0240200b450d00200a102e0b02402005410174410175220420012802082203200320044b1b2205450d00200128020041206a2104201b21030340200420032f01003b0100200341026a2103200441226a21042005417f6a22050d000b0b410021042019450d00201b102e0b02402007450d002006102e0b2000200e36020420002004360200200241206a24000f0b2004450d010b1036000b1038000be80402087f017e230041306b2204240002400240024002402001280208220541ffffffff00712005470d0020054104742206417f4c0d00200128020021070240024020060d00410821080c010b2006102c2208450d040b41002109200441003602182004200836021020042006410476220a36021402400240200a20054f0d002006410376220a2005200a20054b1b220a4104200a41044b1b220a41ffffffff0071200a46410374210b200a410474210a0240024020060d00200441003602000c010b200441086a410836020020042006360204200420083602000b200441206a200a200b2004107d200441286a280200210620042802204101460d0120042004280224220836021020042006410476220a3602140b024020072007200541306c6a460d00200741206a2106200541306c220741506a41306e21092008210503402006290300210c2005200641086a2903003703082005200c370300200641306a2106200541106a2105200741506a22070d000b200941016a21090b200420093602182004200441106a2002200310bc0420042802004101470d02200441086a2802002106200428020421050c030b20060d030b1038000b200441086a280200210b2004280204210902402004410c6a280200220620012802082205200520064b1b2207450d00200128020041206a21062009210503402005290300210c2006200541086a2903003703082006200c370300200541106a2105200641306a21062007417f6a22070d000b0b410021050240200b41ffffffff0071450d002009102e0b0b0240200a450d002008102e0b2000200636020420002005360200200441306a24000f0b1036000bee2e0a057f027e077f027e037f027e057f027e127f057e23004180016b2204240002402001450d0041002105034020002802082206450d0120002802002207200641e0006c6a2108420021094200210a0340024002402007280238220b450d00200b41d8006c210c2007280230220d210602400240024002400240024002400240024002400340200641306a280200220e280208220f41016a41004c0d01200641d8006a2110200e200f3602080240200e41f4006a2d00000d0020102106200c41a87f6a220c450d0c0c010b0b4104102c2211450d09201120063602000240200c41d800470d0042002112420021132011102e0c0c0b200d200b41d8006c6a220f41a87f6a210b4101211441012115024002400240024003402010210602400340200641306a280200220e280208220c41016a41004c0d08200e200c3602080240200e41f4006a2d00000d00200f200641d8006a2206470d010c020b0b024020152014470d00201441016a220e2014490d0f2014410174220c200e200c200e4b1b220e4104200e41044b1b220e41ffffffff0371200e46410274210c200e410274210e0240024020140d00200441003602680c010b20044104360270200420113602682004201441027436026c0b200441d8006a200e200c200441e8006a107d2004280260210e20042802584101460d03200428025c2111200e41027621140b200641d8006a2110201120154102746a2006360200201541016a2115200b2006470d010b0b420021124200211320154102490d0320112015410274220b6a2116200b0d0142002117420021180c020b200e450d0b0c0c0b4200211742002118201121060340427f20182006280200220e41286a2903007c2017200e41206a2903007c2213201754220ead7c2217200e201720185420172018511b220e1b2118427f2013200e1b21172016200641046a2206470d000b0b201541ffffffff00712015470d0920154104742206417f4c0d090240024020060d00410821190c010b2006102c2219450d0b0b0240024002402006410476221a20154f0d002006410376220e2015200e20154b1b220e4104200e41044b1b220e41ffffffff0071200e46410374210c200e410474210e0240024020060d00200441003602680c010b200441083602702004200636026c200420193602680b200441d8006a200e200c200441e8006a107d2004280260210620042802584101460d01200428025c21192006410476211a0b4108211b2011201646221c450d014100211d0c090b20060d0b0c0a0b41002110201921062011210c0340200c28020041306a280200220e280208220f41016a41004c0d04200e200f360208200e29034021132006200e41c8006a29030037030820062013370300201041016a2110200641106a21062016200c41046a220c470d000b4100211d201c0d07201121060240034002402006280200220e290320200e41286a29030084500d00200e280230220e280208220c41016a41004a0d0241bcd9cc004118200441f8006a41c4ffc40041f883c500103e000b200641046a2106200b417c6a220b450d090c000b0b200e200c360208200e41c8006a2903002113200e290340211e4110102c221b450d0a200641046a2106201b201e370300201b20133703084101211d4100210f4101210b0240034020162006460d012006280200210e200641046a220c2106200e290320200e41286a29030084500d00200e2802302206280208220e41016a41004c0d062006200e360208200641c8006a29030021132006290340211e02400240200b201d470d00201d41016a2206201d490d0d201d410174220e2006200e20064b1b22064104200641044b1b220641ffffffff0071200646410374210e2006410474210602400240201d0d00200441003602680c010b200441083602702004201b3602682004201d41047436026c0b200441d8006a2006200e200441e8006a107d2004280260210620042802584101460d01200428025c211b2006410476211d0b201b200b4104746a220620133703082006201e370300200f41106a210f200b41016a210b200c21060c010b0b20060d0b0c0a0b200b450d07200b410474450d0502400240200b4101470d00201b210e0c010b201b41106a2106201b210e0340200e2006200e290300200629030056200e41086a2903002213200641086a290300221e562013201e511b1b210e200641106a2106200f41706a220f0d000b0b2010410474220c450d060240024020104101470d002019210c0c010b201941106a2106200c41706a21102019210c03402006200c200c290300200629030056200c41086a2903002213200641086a290300221e562013201e511b1b210c200641106a2106201041706a22100d000b0b427f4200200e2903002213200c29030022127d221e201e201356200e41086a290300221e200c41086a2903007d2013201254ad7d2213201e562013201e511b22061b221f42002007290300221e20177d22122012201e56200741086a290300221220187d201e201754ad7d221820125620182012511b220e1b7c22172017201f54220c4200201320061b221742002018200e1b7c200cad7c221820175420182017511b22061b2212200254427f201820061b221320035420132003511b450d080240201d41ffffffff0071450d00201b102e0b201a450d002019102e0b201441ffffffff0371450d0b2011102e0c0b0b41bcd9cc004118200441f8006a41c4ffc40041d883c500103e000b41bcd9cc004118200441f8006a41c4ffc40041d883c500103e000b41bcd9cc004118200441f8006a41f09cc50041809dc500103e000b41bcd9cc004118200441f8006a41c4ffc40041f883c500103e000b41e580c5004130419881c500105d000b41a881c500413241dc81c500105d000b200741086a2903002113200729030021120b024002400240024002400240201c0d002011210e0340200e28020028023022062802080d022006417f3602082006420020062903402218200e280200220c290320221e7d22172017201856200641c8006a22102903002217200c41286a2903007d2018201e54ad7d221820175620182017511b220c1b370340201042002018200c1b370300200e280200220c4200370320200c41286a42003703002006200628020841016a3602082016200e41046a220e470d000b0b0240201541144b0d00201541014d0d052015417e6a21064102210e201120154102746a41786a210c034020152006490d03200c200e10c104200c417c6a210c200e41016a210e2006417f6a2206417f470d000c060b0b2015410176220641ffffffff03712006470d0520064102742220417f4c0d052020102c2221450d062011417c6a2122201141746a2123410021244104212541002126201521270340024002402027220b417f6a22270d004101210c410021270c010b024002400240024002400240024002400240024002400240201120274102746a28020041306a2802002206280208220e41016a41004c0d002006200e3602082011200b417e6a220d4102746a28020041306a280200220e280208220c41016a41004c0d01200641c8006a290300211820062903402117200e200c3602082017200e290340542018200e41c8006a29030022175420182017511b0d042023200b4102746a2106410021274100211003400240200d2010470d00200b210c0c0e0b200641046a28020041306a280200220e280208220c41016a41004c0d03200e200c360208200628020041306a280200220c280208220f41016a41004c0d04200e41c8006a2903002118200e2903402117200c200f3602082006417c6a2106201041016a21102017200c2903405a2018200c41c8006a29030022175a20182017511b0d000b201041016a210c2010417f73200b6a21270c050b41bcd9cc004118200441f8006a41c4f8c90041ccf9c900103e000b41bcd9cc004118200441f8006a41c4f8c90041ccf9c900103e000b41bcd9cc004118200441f8006a41c4f8c90041ccf9c900103e000b41bcd9cc004118200441f8006a41c4f8c90041ccf9c900103e000b2023200b410274220f6a210602400340024020274101470d00410021270c020b200641046a28020041306a280200220e280208220c41016a41004c0d03200e200c360208200628020041306a280200220c280208221041016a41004c0d04200e41c8006a2903002118200e2903402117200c20103602082006417c6a21062027417f6a21272017200c290340542018200c41c8006a29030022175420182017511b0d000b0b200b2027490d03200b20154b0d04200b20276b220c4101762210450d00201120274102746a21062022200f6a210e03402006280200210f2006200e280200360200200e200f360200200641046a2106200e417c6a210e2010417f6a22100d000b0b2027450d06200c41094b0d06200b20154b0d04200b20276b210c2027417f6a2106202220274102746a210e0340200b2006490d0b200e200c41016a220c10c1042006417f6a221020064f0d06200e417c6a210e20102106200c410a490d000c060b0b41bcd9cc004118200441f8006a41c4f8c90041ccf9c900103e000b41bcd9cc004118200441f8006a41c4f8c90041ccf9c900103e000b2027200b41e4d1cc001057000b200b201541e4d1cc00104d000b200b2027417f6a2206490d05200b201541f4d1cc00104d000b201041016a21270b0240024002400240024020262024460d00202621060c010b202441016a22062024490d0a2024410174220e2006200e20064b1b22064104200641044b1b220641ffffffff0171200646410274210e200641037421060240024020240d00200441003602680c010b20044104360270200420253602682004202441037436026c0b200441d8006a2006200e200441e8006a107d2004280260210e20042802584101460d01200428025c212520242106200e41037621240b202520064103746a2206200c36020420062027360200202641016a22282126202841024f0d010c020b200e0d090c080b024002400240024002400240024003400240024002400240202520282226417f6a22284103746a2206280200450d00202641037420256a220f41746a28020022102006280204220e4d0d00202641024d0d0c20252026417d6a22064103746a280204220c200e20106a4d0d01202641034d0d0c200f41646a280200200c20106a4b0d0c0c010b20264103490d012006280204210e20252026417d6a22064103746a280204210c0b200c200e490d010b2026417e6a21060b02402026200641016a22294d0d00202620064d0d02202520064103746a222a280204222b202a2802006a2206202520294103746a222c280200222d490d03200620154b0d042011202d4102746a222e202c280204222f410274220e6a210c2006410274210f024002402006202d6b220b202f6b2206202f490d002021202e200e10e9082206200e6a211002400240202f4101480d00200b202f4a0d010b202e210e200621060c020b2011200f6a213020062106202e210e0340200c28020041306a280200220f280208220b41016a41004c0d08200f200b360208200628020041306a280200220b280208220d41016a41004c0d09200f41c8006a2903002118200f2903402117200b200d360208200e200c20062017200b290340542018200b41c8006a29030022175420182017511b220f1b2802003602002006200641046a200f1b2106200e41046a210e200c41046a200c200f1b220c20304f0d02201020064b0d000c020b0b2021200c2006410274220e10e9082230200e6a211002400240202f4101480d00200641014e0d010b200c210e203021060c010b2022200f6a210f200c210e03402010417c6a220b28020041306a2802002206280208220c41016a41004c0d092006200c360208200e417c6a220d28020041306a280200220c280208223141016a41004c0d0a200641c8006a290300211820062903402117200c2031360208200f200d200b2017200c290340542018200c41c8006a29030022175420182017511b22061b2802003602002010200b20061b21100240202e200d200e20061b220e490d00203021060c020b200f417c6a210f2030210620302010490d000b0b200e2006201020066b417c7110e9081a202a41046a202b202f6a360200202a202d360200202c202c41086a20262029417f736a41037410ea081a41012126202841014d0d090c010b0b202920264184d2cc00103c000b200620264194d2cc00103c000b202d200641a4d2cc001057000b2006201541a4d2cc00104d000b41bcd9cc004118200441f8006a41c4f8c90041ccf9c900103e000b41bcd9cc004118200441f8006a41c4f8c90041ccf9c900103e000b41bcd9cc004118200441f8006a41c4f8c90041ccf9c900103e000b41bcd9cc004118200441f8006a41c4f8c90041ccf9c900103e000b2027450d040c000b0b4194dacc004110200441f8006a41e4ffc40041ec81c500103e000b2006201541c4d1cc001056000b2006200b41f4d1cc001057000b0240202441ffffffff0171450d002025102e0b2020450d002021102e0b2015417f6a210f02400240024002400240024002400240201c450d0042002118420021170c010b420021184100210e420021172011210c0340200c2802002802302206280208221041016a41004c0d0220062010360208200441386a200641c8006a29030022324200200ead2233420010e808200441c8006a2006290340223442002033420010e80802404200427f20042903482004290340420052200441c8006a41086a290300221e20042903387c221f201e547222061b221e20187d22352035201e56427f201f20061b221f20177d201e201854ad7d221e201f56201e201f511b22061b2007290300584200201e20061b221e200741086a290300221f58201e201f511b0d0042002033427f7c221e201e203356200e45200e1b1ba7210f0c020b200e41016a210e427f201720327c201820347c221e2018542206ad7c22182006201820175420182017511b22061b2117427f201e20061b21182016200c41046a220c470d000b0b2015200f4d0d012011200f4102746a2802002802302206280208220e41016a41004c0d022006200e360208200441186a200641c8006a29030022354200200f41016a220fad2233420010e808200441286a2006290340223242002033420010e8084200427f200741086a290300221e20177c2007290300221720187c221f2017542206ad7c221820062018201e542018201e511b22061b2218427f200441286a41086a290300221720042903187c221e2004290320420052201e20175472220e1b7d427f201f20061b2217427f2004290328200e1b221f54ad7d221e2017201f7d221f201756201e201856201e2018511b22061b21344200201f20061b21362015410274210c201121100340200c450d0620102802002206450d062006280230220e280208220b41016a41004c0d04200e200b360208200441086a203620342033420010e70820064200427f2004290308221820327c22172017201854220b200441086a41086a290300221820357c200bad7c221720185420172018511b220b1b2218200e290340221e7d221f201f201856427f2017200b1b2217200e41c8006a2903007d2018201e54ad7d221820175620182017511b220e1b2217370320200641286a42002018200e1b221e370300200628023022062802080d05201041046a2110200641003602082006427f2006290340221820177c22172017201854220e200641c8006a220b2903002218201e7c200ead7c221720185420172018511b220e1b370340200b427f2017200e1b370300200c417c6a210c200f417f6a220f0d000c060b0b41bcd9cc004118200441f8006a41c4ffc40041fc81c500103e000b418c82c500418a01419883c500105d000b41bcd9cc004118200441f8006a41c4ffc40041a883c500103e000b41bcd9cc004118200441f8006a41c4ffc40041b883c500103e000b4194dacc004110200441f8006a41e4ffc40041c883c500103e000b0240201441ffffffff0371450d002011102e0b2004200710bb040240201d41ffffffff0071450d00201b102e0b201a450d032019102e0c030b1038000b1036000b42002112420021130b2013200a20122009562013200a562013200a511b22061b210a2012200920061b2109200741e0006a22072008470d000b200541016a220520014f0d012009200258200a200358200a2003511b450d000b0b20044180016a24000bf00303047f027e037f230041106b2202240002400240024002400240024020014102490d00200028020441306a2802002203280208220441016a41004c0d0220032004360208200028020041306a2802002204280208220541016a41004c0d03200341c8006a29030021062003290340210720042005360208200720042903405a2006200441c8006a29030022075a20062007511b0d00200028020021082000200028020436020002400240200141034f0d00200041046a21040c010b200041046a21052001417f6a21090340200541046a220428020041306a2802002200280208220341016a41004c0d0620002003360208200841306a2802002203280208220a41016a41004c0d07200041c8006a2903002106200029034021072003200a3602080240200720032903405a2006200341c8006a29030022075a20062007511b450d00200521040c020b2009450d0320052004280200360200200421052009417f6a22094101470d000b0b200420083602000b200241106a24000f0b2001200141d4d1cc00103c000b41bcd9cc004118200241086a41c4f8c90041ccf9c900103e000b41bcd9cc004118200241086a41c4f8c90041ccf9c900103e000b41bcd9cc004118200241086a41c4f8c90041ccf9c900103e000b41bcd9cc004118200241086a41c4f8c90041ccf9c900103e000bf70302037f017e230041106b2202240020004100360208200042013702000240024020012d00004101460d00200241003a00002000200241011074200141046a28020021032001410c6a2802002204200010760240200441306c2204450d00200320046a21040340200220032802003602002000200241041074200341086a200010b204200341306a22032004470d000b0b200129031021052002200141186a290300370308200220053703002000200241101074200141206a29030021052002200141286a2903003703082002200537030020002002411010742002200141c0006a2802003602002000200241041074200129033021052002200141386a2903003703082002200537030020002002411010740c010b200241013a00002000200241011074200141286a29030021052002200141306a2903003703082002200537030020002002411010742000200141016a41201074200141216a2d000020001073200141386a29030021052002200141c0006a290300370308200220053703002000200241101074200141c8006a29030021052002200141d0006a2903003703082002200537030020002002411010742002200141e8006a2802003602002000200241041074200141d8006a29030021052002200141e0006a2903003703082002200537030020002002411010740b200241106a24000bb20b04057f017e037f017e230041c0046b2203240020034180026a41086a200241086a2802003602002003200229020037038002200341086a20034180026a10c404200341186a20032802082003280210109d03200341286a41206a2204200141206a290200370300200341286a41186a2205200141186a290200370300200341286a41106a2206200141106a290200370300200341286a41086a2207200141086a290200370300200328021821022003410036021820032001290200370328024002400240024020024101470d00200329021c2108200341e0006a41206a22022004290300370300200341e0006a41186a22092005290300370300200341e0006a41106a22052006290300370300200341e0006a41086a220a20072903003703002003200329032837036020034188016a2008a7220b10a70420034180026a2003280288012206200328029001220410c504200329028402210c2003280280022101200341a0016a41206a2002290300370300200341a0016a41186a2009290300370300200341a0016a41106a2005290300370300200341a0016a41086a200a290300370300200320032903603703a0012001410820011b2105024002400240200c420020011b220c422088a722022008422088a722074d0d0020034180026a41206a200341a0016a41206a29030037030020034180026a41186a200341a0016a41186a29030037030020034180026a41106a200341a0016a41106a29030037030020034180026a41086a200341a0016a41086a290300370300200320032903a00122083703800220032005200741f8026c6a22013602a80202402008a741ff01714103460d0020012802bc024102460d0020034180026a2005200741f8026c6a41c8026a10c6040d020b200141bc026a2104024020012802bc024102460d0002402005200741f8026c6a22062802b0022209450d00200641b4026a280200450d002009102e0b2001108b020b200120034180026a41bc0210e9081a200441023602002005200741f8026c6a220141f0026a200341f8016a290300370300200141e8026a200341f0016a290300370300200141e0026a200341e8016a290300370300200141d8026a200341e0016a290300370300200141d0026a200341d8016a290300370300200141c8026a200341d0016a290300370300200120032903c8013703c002200328028801210620032802900121040b20032005360280022003200c370284022006200420034180026a10c704200ca7210902402002450d00200241f8026c21022005210103400240200141bc026a2802004102460d000240200141b0026a2802002204450d00200141b4026a280200450d002004102e0b20011096010b200141f8026a2101200241887d6a22020d000b0b02402009450d00200941f8026c450d002005102e0b20032003290095013703c80120032003419c016a2800003600cf0141062101410121020c010b20032003290095013703c80120032003419c016a2800003600cf01200241f8026c21022005210103400240200141bc026a2802004102460d000240200141b0026a2802002204450d00200141b4026a280200450d002004102e0b20011096010b200141f8026a2101200241887d6a22020d000b4102210141002102200ca72204450d00200441f8026c450d002005102e0b0240200328028c01450d002006102e0b200320032903c801370350200320032800cf01360057024020020d00200020013a000020002003290350370001200041086a20032800573600000c020b2003418c026a200736020020034188026a200b3602002003410136028402200341013a00800220034180026a10fe01200041063a00000c020b2000410210c80420002d000021010b200141ff01714106470d010b2003280210210120032802082102024020032802184101460d002002200110ff010c010b20022001200341186a410472109e030b0240200328020c450d002003280208102e0b200341c0046a24000bd00101057f230041306b22022400200241dffcc6004109108102200241106a41e5b0c4004106108102200241206a20012802002203200128020810a201024002402002280228220441206a2205417f4c0d000240024020050d00410121060c010b2005102c2206450d020b20004100360208200020053602042000200636020020002002411010742000200241106a411010742000200228022022052004107402402002280224450d002005102e0b0240200141046a280200450d002003102e0b200241306a24000f0b1038000b1036000bb91f09047f017e0c7f027e047f037e167f017e087f230041a00e6b220324002003200236021c20032001360218200341206a2001200210ed020240024002400240200328022022040d00200041003602000c010b200328022421052003200341286a28020036023420032004360230200341106a200341306a10ab010240024020032802100d000240024020032802142206200328023441f8026e2201200120064b1bad42f8027e2207422088a70d002007a72201417f4c0d000240024020010d00410821080c010b2001102c2208450d060b200141f8026ead2107024002402006450d00200341870b6a2109200341c80d6a41126a210a200341f50d6a210b200341e00d6a410372210c200341e00d6a41126a210d200341900e6a41086a210e200341f80a6a410472220f41076a211003400240024020032802342201450d00200328023022112d0000211220032001417f6a22133602342003201141016a360230410321020240024020120e020001030b410221020c020b024002400240024002402013450d0020112d0001210220032001417e6a22013602342003201141026a22123602304100211102400240024020020e020100030b200341086a200341306a10ab0120032802080d0220032802342201200328020c2202490d022002417f4c0d0c0240024020020d00410121110c010b200210322211450d12200328023421010b20012002490d0120112003280230200210e9081a200328023422012002490d122002ad221442208620148421152003200120026b22013602342003200328023020026a22123602300b2015a7211302402001450d0020122d0000211620032001417f6a3602342003201241016a360230200341f80a6a200341306a10980120032802f80a411c460d00200341c8086a200341f80a6a41b00210e9081a024020032802342201450d00200328023022122d0000211720032001417f6a22183602342003201241016a2219360230410021020240024020170e020100020b20184104490d01201235000121142003201241056a36023020032001417b6a220236023420024104490d012012350005211a2003200141776a22183602342003201241096a2219360230201a422086201484211b410121020b2018450d0020192d0000210120032018417f6a22123602342003201941016a360230024002400240024020010e110004040304040404040404040404040102040b2012450d0320192d0001210120032018417e6a3602342003201941026a3602304100211741002118024020010e03090008040b200341f80a6a200341306a10930120032d00f80a4101460d03200341f80d6a41086a200941086a2900002214370300200341f80d6a41106a200941106a2f000022013b01002003200f290000221a3703900e20032009290000221c3703f80d200320102800003600970e20032d00fb0a211d20032f00f90a211e20032d00920e211f20032800930e212020032800970e2121200341e00d6a41106a20013b0100200341e00d6a41086a20143703002003201c3703e00d201aa72122410121180c080b2012450d0220192d0001210120032018417e6a2217360234410221122003201941026a36023002400240024020010e03000102050b20174104490d04201928000221172003201941066a36023020032018417a6a220136023420014104490d04200341e00d6a41086a200341f80a6a41086a290200370300200341e00d6a41106a200341f80a6a41106a290200370300200320032902f80a3703e00d201928000621232003201841766a36023420032019410a6a36023041002112201721240c010b200341f80a6a200341306a10930120032d00f80a4101460d03200341f80d6a41086a2201200941086a290000370300200341f80d6a41106a2212200941106a2f00003b01002003200f29000022143703900e200320092900003703f80d200320102800003600970e20032d00fb0a212520032f00f90a212620032802940e21232003200e41026a2d00003a00e20d2003200e2f01003b01e00d200c20032903f80d370000200c41086a2001290300370000200c41106a20122f01003b0000200b20032f009d0e3b0000200b41026a2003419d0e6a41026a2d00003a00002014a72124410121120b200341c80d6a41106a200341e00d6a41106a2903002214370300200341c80d6a41086a200341e00d6a41086a290300221a370300200341b00d6a41086a201a370300200341b00d6a41106a20143d0100200320032903e00d22143703c80d200341a80d6a41046a200a41046a2f01003b0100200320143703b00d2003200a2801003602a80d410121170c080b2012450d0120192d0001210120032018417e6a2227360234410221172003201941026a3602304102211202400240024020010e03000102040b20274104490d03201928000221272003201941066a36023020032018417a6a220136023420014104490d03200341e00d6a41086a200341f80a6a41086a290200370300200341e00d6a41106a200341f80a6a41106a290200370300200320032902f80a3703e00d201928000621232003201841766a36023420032019410a6a36023041002112202721240c010b200341f80a6a200341306a10930120032d00f80a4101460d02200341f80d6a41086a2201200941086a290000370300200341f80d6a41106a2212200941106a2f00003b01002003200f29000022143703900e200320092900003703f80d200320102800003600970e20032d00fb0a212520032f00f90a212620032802940e21232003200e41026a2d00003a00e20d2003200e2f01003b01e00d200c20032903f80d370000200c41086a2001290300370000200c41106a20122f01003b0000200b20032f009d0e3b0000200b41026a2003419d0e6a41026a2d00003a00002014a72124410121120b200341b00d6a41106a200341e00d6a41106a2f01003b0100200341b00d6a41086a200341e00d6a41086a290300370300200341a80d6a41046a200d41046a2f01003b0100200320032903e00d3703b00d2003200d2801003602a80d0c070b2012450d0020032018417e6a3602342003201941026a3602300b200341c8086a108b020b2011450d012013450d010b2011102e0b41022102410121010c030b410221180b200341b00d6a41106a200341e00d6a41106a2f01003b0100200341b00d6a41086a200341e00d6a41086a290300370300200341a80d6a41046a200341c80d6a41046a2f01003b0100200320032903e00d3703b00d200320032801c80d3602a80d20222126201d21122020212420212123201f21250b2015422088a72128200341e00d6a41106a200341b00d6a41106a2f01003b0100200341e00d6a41086a200341b00d6a41086a290300370300200341f80d6a41046a200341a80d6a41046a2f01003b0100200320032903b00d3703e00d200320032802a80d3602f80d200341f80a6a200341c8086a41b00210e9081a200320032800c1083602c80d2003200341c1086a41036a2800003600cb0d41002101201821292017212a201b211c2012212b2013212c2011212d2016212e0b20034190066a200341f80a6a41b00210e9081a200341f8056a41106a2211200341e00d6a41106a2f01003b0100200341f8056a41086a2212200341e00d6a41086a290300370300200341f0056a41046a2213200341f80d6a41046a2f01003b0100200320032903e00d3703f805200320032802f80d3602f005200320032802c80d3602e805200320032800cb0d3600eb0520010d00200341f80a6a20034190066a41b00210e9081a200341c8086a41106a20112f01003b0100200341c8086a41086a2012290300370300200341c80d6a41046a20132f01003b0100200320032903f8053703c808200320032802f0053602c80d200320032802e8053602e00d200320032800eb053600e30d201e212f2026213020292131202a2132201c2133202b2134202421352023213620282137202c2138202d2139202e213a2025213b0c010b410321020b200341b8036a200341f80a6a41b00210e9081a200341a0036a41106a2201200341c8086a41106a2f01003b0100200341a0036a41086a2211200341c8086a41086a29030037030020034198036a41046a2212200341c80d6a41046a2f01003b0100200320032903c8083703a003200320032802c80d36029803200320032802e00d36029003200320032800e30d3600930320024103460d04200341e0006a200341b8036a41b00210e9081a200341c8006a41106a221320012f01003b0100200341c8006a41086a22162011290300370300200341c0006a41046a221120122f01003b0100200320032903a00337034820032003280298033602402003200328029003360238200320032800930336003b02402007422088a722012007a7470d00200141016a22122001490d0420014101742218201220122018491b22124104201241044b1bad42f8027e2214422088a74541037421122014a721180240024020010d00200341003602f80a0c010b200341083602800b200320083602f80a2003200141f8026c3602fc0a0b200341c8086a20182012200341f80a6a107d20032802d008211220032802c8084101460d0320032802cc082108200742808080807083201241f8026ead8421070b2008200141f8026c6a200341e0006a41b00210e908220141d4026a2036360000200141d0026a2035360000200141cf026a203b3a0000200141cd026a20303b0000200141cc026a20343a0000200141ca026a202f3b0000200141c9026a20313a0000200141c8026a20323a0000200120333703c002200120023602bc02200120373602b802200120383602b402200120393602b00220132f010021022016290300211420112f010021112003290348211a20032802402112200141f0026a203a3a0000200141ea026a2012360000200141ee026a20113b0000200141d8026a201a370000200141e0026a2014370000200141e8026a20023b0000200141f1026a2003280238360000200141f4026a200328003b36000020074280808080107c21072006417f6a22060d000b0b2008450d0320002007370204200020083602000c040b20120d050b1038000b02402007422088a72201450d00200141f8026c21022008210103400240200141bc026a2802004102460d000240200141b0026a2802002206450d00200141b4026a280200450d002006102e0b20011096010b200141f8026a2101200241887d6a22020d000b0b2007a72201450d00200141f8026c450d002008102e0b200341003602d008200342013703c8082003410a360294062003200341186a360290062003200341c8086a3602b8032003418c0b6a4101360200200342013702fc0a200341909dc5003602f80a200320034190066a3602880b200341b8036a419cebc000200341f80a6a103d1a20032802c80820032802d00810ef02024020032802cc08450d0020032802c808102e0b200041003602000b2005450d002004102e0b200341a00e6a24000f0b1036000b2002200141b8b2c0001056000ba50201027f41012102024020002d0000220320012d0000470d0002400240024020030e03000102000b4101210220002d0001220320012d0001470d024100210220034101470d02200041026a200141026a412010ec084100470f0b200041046a2d00002203200141046a2d0000470d01410021020240024020030e03010003010b200041056a200141056a412010ec084100470f0b41012102200041086a280200200141086a280200470d012000410c6a2802002001410c6a280200470f0b200041046a2d00002203200141046a2d0000470d00410021020240024020030e03010002010b200041056a200141056a412010ec084100470f0b41012102200041086a280200200141086a280200470d002000410c6a2802002001410c6a2802004721020b20020be80101047f230041106b22032400024002402002280208220441f8026c4104722205417f4c0d00200228020021022005102c2206450d012003410036020820032005360204200320063602002004200310760240200441f8026c2204450d00034002400240200241bc026a2802004102470d00200341003a000f20032003410f6a410110740c010b200341013a000f20032003410f6a410110742002200310ab040b200241f8026a2102200441887d6a22040d000b0b200020012003280200200328020810b20102402003280204450d002003280200102e0b200341106a24000f0b1038000b1036000bdc0101047f230041c0006b2202240041a3e7c4002103411221044103210502400240024002400240200141ff01710e050001020304000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602242002418883ca003602202002200241206a360218200241086a41e4e6c4001044000b4193e7c400210341102104410021050c020b418be7c400210341082104410121050c010b41f4e6c400210341172104410221050b20004183023b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000bb80701057f230041b0036b220a2400200a41206a200110a904200a280220220b200a280228108f02210c0240200a280224450d00200b102e0b02400240024002400240200c0d00200a41386a220c4200370300200a41306a220b4200370300200a41206a41086a4200370300200a4200370320200a41206a41d9fcc6004106108102200a4198036a4180f4cb004106108102200c200a4198036a41086a290000370300200b200a29009803370300200a41186a200a41206a4120108e024100210d0240417f417f200a28021c4100200a2802181b220c20036a220b200b200c491b220b41016a220e200e200b491b200320021b2203200c4d0d00024020044101470d002005410047200641014b71210d2006417f6a21020b2001280208220c417f4c0d042001280200210b02400240200c0d00410121040c010b200c102c2204450d060b2004200b200c10e9082104200a41206a200941b00210e9081a200a41e4026a2002360200200a41e0026a2005360200200a41d8026a200c360200200a41d4026a200c360200200a41f0026a200841086a290200370300200a41f8026a200841106a290200370300200a4180036a200841186a290200370300200a4188036a200841206a290200370300200a200d3602dc02200a20043602d002200a20073a009003200a20082902003703e8022003200a41206a10aa04200a41206a200310a704200a280228210c200a280220210841002109200a41ac036a41003a0000200a41003602a803200a41106a2008200c200a41a8036a4105410010ca0402400240200a280210450d00200a200a2802142209410520094105491b36029c03200a200a41a8036a36029803200a41086a200a4198036a10ab01200a28020c417f6a210c200a2802084521090c010b0b0240200a280224450d002008102e0b200a200c410020091b220836029c03200a200336029803200a41206a200110a904200a2802202209200a280228200a4198036a109e030240200a280224450d002009102e0b200a412c6a2008360200200a41206a41086a2003360200200a4100360224200a41013a0020200a41206a10fe01200041086a20083602002000200336020420004100360200200141046a280200450d03200b102e0c030b20004281808080b0a08001370200200041086a41f4e6c400ad4280808080f002843702000c010b200041003a000620004183023b0104200041013602002000410c6a4110360200200041086a4193e7c4003602000b2009108b02200141046a280200450d002001280200102e0b200a41b0036a24000f0b1038000b1036000b940102017f017e230041106b2206240002402002ad4220862001ad842004ad4220862003ad84200510272207422088a72203450d0041002105024002402007a722022d00000e020100020b2003417f6a4104490d0120022800012101410121050b2002102e2000200136020420002005360200200641106a24000f0b41cae0cc00412e200641086a41f8e0cc004188e1cc00103e000b8f0101027f230041e0046b22012400200141b0026a200010980120012802b0022102200141046a200141b0026a41047241ac0210e9081a0240024002402002411c460d00200141b0026a200141046a41ac0210e9081a41b002102c2200450d0220002002360200200041046a200141b0026a41ac0210e9081a0c010b410021000b200141e0046a240020000f0b1036000bb00101037f230041e0046b220124002000200028020441016a22023602044100210302400240200220002802084b0d00200141b0026a200010950120012802b0022102200141046a200141b0026a41047241ac0210e9081a2002411c460d00200141b0026a200141046a41ac0210e9081a41b002102c2203450d0120032002360200200341046a200141b0026a41ac0210e9081a20002000280204417f6a3602040b200141e0046a240020030f0b1036000b5a01017f024020002802002201450d0020012001280200417f6a360200200028020022012802000d002001410c6a10cd04200028020041046a22012001280200417f6a3602002000280200220041046a2802000d002000102e0b0b950102027f027e230041106b2201240002404101102c2202450d00200142013702042001200236020002400240200028020022020d00200141003a000f20012001410f6a410110740c010b200141013a000f20012001410f6a41011074200041086a28020022002001107620012002200010740b2001350208210320013502002104200141106a240020042003422086840f0b1036000b810302037f027e230041206b22012400200141003602102001420137030820012000290300370318200141086a200141186a4108107420012000290308370318200141086a200141186a4108107420012000290310370318200141086a200141186a4108107420002802302102200041386a2802002203200141086a10760240200341286c2203450d00200220036a21030340200141086a2002412010742001200241206a290300370318200141086a200141186a41081074200241286a22022003470d000b0b200141086a2000413c6a4120107420012000290318370318200141086a200141186a410810742001200041206a290300370318200141086a200141186a410810740240024002400240200041286a2d00000e03000102030b200141003a0018200141086a200141186a410110740c020b200141013a0018200141086a200141186a410110740c010b200141023a0018200141086a200141186a410110740b2001350210210420013502082105200141206a240020052004422086840bce0202057f017e230041b0016b22022400200241003a006820012802002103200128020421044100210502400340200241003a0028200241286a20032004410047220610e9081a024020040d00200241003a00280b20042006490d01200241c8006a20056a20022d00283a00002001200420066b22043602042001200320066a22033602002002200541016a22063a00682006210520064120470d000b200241286a41186a200241c8006a41186a2903002207370300200241086a41086a2204200241c8006a41086a290300370300200241086a41106a2206200241c8006a41106a290300370300200241086a41186a2203200737030020022002290348370308200041196a2003290300370000200041116a2006290300370000200041096a200429030037000020002002290308370001200041003a0000200241b0016a24000f0b2006200441cce9cc001056000bbb010002400240024002402002450d0020014100480d01024002400240200328020022020d0020010d01410121020c020b0240200328020422030d0020010d01410121020c020b200220032001103022020d010c040b2001102c2202450d030b20002002360204410021020c030b2000200136020420004101360200200041086a41003602000f0b20004101360200200041086a41003602000f0b2000200136020441012101410121020b20002002360200200041086a20013602000b8c0202017f067e23004190016b220124002000290300210220004200370300024020024201520d00200041286a2903002102200041186a29030021032000290310210420002903082105200041206a2903002106200141c8006a200041306a2903002207370300200141106a41306a2002370300200141296a2003370000200141216a2004370000200141196a2005370000200141316a2006370000200141186a41013a0000200141033a0010200141106a10fe012001200737031820012002370310024020022007844200520d002001200141106a36020c2001410c6a10cc020c010b20012007370318200120023703102001200141106a36020c2001410c6a10cc020b20014190016a24000b130020004104360204200041b884c5003602000b130020004103360204200041ec86c5003602000ba56d031a7f2d7e037f230022032104200341a0056b41607122032400024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e0700010203040506000b200341ac016a41013602002003420137029c012003419cc3cb0036029801200341043602a40420034194c3cb003602a0042003200341a0046a3602a80120034198016a41ecb0c4001044000b200141146a2802002105200141046a280200210620012d0001210741022108200341206a41026a200241246a2d00003a00002003200241226a2f01003b0120200141106a28020021092001410c6a280200210a200141086a280200210b200241206a2f0100210c2002411c6a280200210d200241186a280200210e200241146a280200210f200241106a28020021102002410c6a2802002111200241086a2802002112200241066a2f00002113200241056a2d00002114200241046a2d00002115200241026a2f010021162002280228210120022d0001211702400240024002400240024020022d000022180e03000102000b20174521194101211a201521080c040b410221080240024020150e03000104000b410021080c030b20034180016a41026a200341206a41026a2d00003a0000200320032f01203b0180010c010b0240024020150e03000103000b410021080c020b20034180016a41026a200341206a41026a2d00003a0000200320032f01203b0180010b410121080b4100211a0b2001280200221b41016a221c41014d0d052001201c36020020012102024002400240201a450d002001201b36020020194101710d014110102c221c450d09201c41f8f7c60036020c201c4101360208201c4281808080103702004110102c2202450d0920024190f8c60036020c200241013602082002428180808010370200201c201c280200417f6a2208360200024020080d00201c280208201c28020c2802001103000240201c28020c280204450d00201c280208102e0b201c41046a22082008280200417f6a220836020020080d00201c102e0b2002280200211c0b2002201c417f6a221c3602000240201c0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a221c201c280200417f6a221c360200201c0d002002102e0b2005108b022005102e20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b410221020c010b41022102200341386a41026a200341206a41026a2d00003a0000200320032f01203b0138024002400240024020180e03000102000b4102210202400240024020170e03000102000b410021020c010b41012102201521080b200341c0046a200c3b0100200341bc046a200d360200200341b8046a200e360200200341b4046a200f360200200341b0046a2010360200200341ac046a2011360200200341a8046a2012360200200320133b01a604200320143a00a504200320083a00a404200320163b01a204200320023a00a104200341003a00a0040c020b4102210202400240024020150e03000102000b410021020c010b20034180016a41026a200341386a41026a2d00003a0000200320032f01383b018001410121020b200341c0046a200c3b0100200341bc046a200d360200200341b8046a200e360200200341b4046a200f360200200341b0046a2010360200200341ac046a2011360200200341a8046a2012360200200341c2046a200328018001360100200341c6046a20034184016a2f01003b0100200320133b01a604200320143a00a504200320023a00a404200341013a00a0040c010b02400240024020150e03000102000b410021020c010b20034180016a41026a200341386a41026a2d00003a0000200320032f01383b018001410121020b200341c0046a200c3b0100200341bc046a200d360200200341b8046a200e360200200341b4046a200f360200200341b0046a2010360200200341ac046a2011360200200341a8046a2012360200200341c2046a200328018001360100200341c6046a20034184016a2f01003b0100200320133b01a604200320143a00a504200320023a00a404200341023a00a0040b20034198016a200541b00210e9081a20034180016a41002006200b200a20092007200341a0046a20034198016a10d604200341f0006a41026a221c20032d0087013a0000200320032f0085013b017002402003280280014101460d0020012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b2005102e0c120b20034188016a290300211d20032d0084012102200341086a41026a201c2d00003a0000200320032f01703b010820012001280200417f6a221c3602000240201c0d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a221c201c280200417f6a221c360200201c0d002001102e0b2005102e200241ff01714106460d110b20034198046a41026a200341086a41026a2d000022013a0000200320032f010822053b019804200041206a20023a0000200041186a41003a000020004200370308200020053b0021200041236a20013a00002000201d37002420004201370300200424000f0b200141086a280200211b200141046a280200210c4102211c200341106a41026a200241246a2d00003a00002003200241226a2f01003b0110200241206a2f0100210e2002411c6a280200210f200241186a2802002110200241146a2802002111200241106a28020021122002410c6a2802002113200241086a2802002114200241066a2f00002106200241056a2d00002107200241046a2d00002108200241026a2f010021092002280228210520022d0001211702400240024002400240024020022d0000220d0e03000102000b201745211a410121152008211c0c040b4102211c0240024020080e03000104000b4100211c0c030b20034180016a41026a200341106a41026a2d00003a0000200320032f01103b0180010c010b0240024020080e03000103000b4100211c0c020b20034180016a41026a200341106a41026a2d00003a0000200320032f01103b0180010b4101211c0b410021150b2005280200221941016a220141014d0d042005200136020020052102024002402015450d0020052019360200201a4101710d014110102c2203450d07200341f8f7c60036020c2003410136020820034281808080103702004110102c2202450d0720024190f8c60036020c20024101360208200242818080801037020020032003280200417f6a2201360200024020010d002003280208200328020c2802001103000240200328020c280204450d002003280208102e0b200341046a22012001280200417f6a220136020020010d002003102e0b200228020021010b20022001417f6a2203360200024020030d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22032003280200417f6a220336020020030d002002102e0b20052005280200417f6a22033602004102210820030d0e2005280208200528020c2802001103000240200528020c280204450d002005280208102e0b200541046a22032003280200417f6a220336020020030d0e2005102e0c0f0b41022102200341146a41026a200341106a41026a2d00003a0000200320032f01103b011402400240024002400240200d0e03000102000b4100210a4102210d0240024020170e03000105000b4100210d4100210a0c040b4101210d2008211c0c030b4102211c02400240024020080e03000102000b4100211c0c010b20034180016a41026a200341146a41026a2d00003a0000200320032f01143b0180014101211c0b200341186a41046a20034180016a41046a2f01003b010020032003280180013602184101210a0c010b02400240024020080e03000102000b410021020c010b20034180016a41026a200341146a41026a2d00003a0000200320032f01143b018001410121020b200341186a41046a20034180016a41046a2f01003b010020032003280180013602184102210a2002211c0b0b200341e8006a41046a2201200341186a41046a2f01003b010020032003280218360268200341f0006a200c10a70420034198016a2003280270221a2003280278221910c504200329029c01211d2003280298012102200341dc036a4102360200200341003602980120034198046a41046a220820012f01003b010020032003280268360298042002410820021b21150240024002400240201b201d420020021b221d422088a72201490d0020034180016a41086a20034188046a29030037030020034180016a41106a20034190046a290300370300200320034180046a29030037038001200341f8036a290300211e200341f0036a290300211f200341e8036a2903002120200341e0036a2903002121200341d8036a2903002122200341d0036a2903002123200341c8036a2903002124200341c0036a2903002125200341b8036a2903002126200341b0036a2903002127200341a8036a2903002128200341a0036a290300212920034198036a290300212a20034190036a290300212b20034188036a290300212c20034180036a290300212d200341f8026a290300212e200341f0026a290300212f200341e8026a2903002130200341e0026a2903002131200341d8026a2903002132200341d0026a2903002133200341c8026a2903002134200341c0026a2903002135200341b8026a2903002136200341b0026a2903002137200341a8026a2903002138200341a0026a290300213920034198026a290300213a20034190026a290300213b20034188026a290300213c20034180026a290300213d200341f8016a290300213e200341f0016a290300213f200341e8016a2903002140200341e0016a2903002141200341d8016a2903002142200341d0016a2903002143200341c8016a2903002144200341c0016a2903002145200341b8016a2903002146200341b0016a290300214720034198016a41106a290300214820032903a0012149200328029c0121080c010b200341c2046a200328029804360100200341c0046a200e3b0100200341bc046a200f360200200341a0046a41186a2010360200200341b4046a2011360200200341a0046a41106a2012360200200341ac046a2013360200200341a0046a41086a2014360200200341c6046a20082f01003b0100200320063b01a604200320073a00a5042003201c3a00a404200320093b01a2042003200d3a00a1042003200a3a00a00420032015201b41f8026c6a22023602c804024020022802bc024102460d00200341a0046a200241c8026a10c6040d020b41022108200341023602bc0420022903a0022125200241186a290300214620022903102147200229030821482002290300214920032903b004211e20032903a804212320032903b804211f200220032903a0043703a002200241b8026a221c2903002122201c201f370300200241a8026a221c2903002124201c2023370300200241b0026a221c2903002123201c201e370300200229038002212920022903e001212d20022903c001213120022903a001213520022903800121392002290360213d200229034021412002290320214520022903c002212120024198026a290300212620024190026a290300212720024188026a2903002128200241f8016a290300212a200241f0016a290300212b200241e8016a290300212c200241d8016a290300212e200241d0016a290300212f200241c8016a2903002130200241b8016a2903002132200241b0016a2903002133200241a8016a290300213420024198016a290300213620024190016a290300213720024188016a2903002138200241f8006a290300213a200241f0006a290300213b200241e8006a290300213c200241d8006a290300213e200241d0006a290300213f200241c8006a2903002140200241386a2903002142200241306a2903002143200241286a2903002144200241d8026a290300211e200241d0026a290300211f200241c8026a290300212020034188016a200241e8026a29030037030020034180016a41106a200241f0026a2903003703002003200241e0026a290300370380012003280298010d0020032802dc034102460d0020034198016a41086a21020240200341d0036a280200221c450d00200341d4036a280200450d00201c102e0b2002108b020b20032015360298012003201d37029c01201a201920034198016a10c704201da7211902402001450d00200141f8026c21012015210203400240200241bc026a2802004102460d000240200241b0026a280200221c450d00200241b4026a280200450d00201c102e0b20021096010b200241f8026a2102200141887d6a22010d000b0b02402019450d00201941f8026c450d002015102e0b200341d0006a41086a20034180016a41086a290300370300200341d0006a41106a20034180016a41106a2903003703002003200329038001370350410021020c010b200341d0006a41086a20034180016a41086a290300370300200341d0006a41106a20034180016a41106a2903003703002003200329038001370350200141f8026c21012015210203400240200241bc026a2802004102460d000240200241b0026a280200221c450d00200241b4026a280200450d00201c102e0b20021096010b200241f8026a2102200141887d6a22010d000b41012102410221080240201da72201450d00200141f8026c450d002015102e0b0b02402003280274450d00201a102e0b200341386a41086a2201200341d0006a41086a290300370300200341386a41106a221c200341d0006a41106a290300370300200320032903503703380240024020020d00200341206a41106a201c290300370300200341206a41086a2001290300370300200320032903383703200240202242808080807083428080808020854200520d0041082103418be7c400210241012115410321084101211c0c020b200341e0036a2020370300200341d8036a2021370300200341c0036a2024370300200341b8036a2025370300200341a0036a202837030020034198036a202937030020034180036a202c370300200341f8026a202d370300200341e0026a2030370300200341d8026a2031370300200341c0026a2034370300200341b8026a2035370300200341a0026a203837030020034198026a203937030020034180026a203c370300200341f8016a203d370300200341e0016a2040370300200341d8016a2041370300200341c0016a2044370300200341b8016a2045370300200341f8036a2003290320370300200341e8036a201f370300200341c8036a2023370300200341a8036a202737030020034188036a202b370300200341e8026a202f370300200341c8026a2033370300200341a8026a203737030020034188026a203b370300200341e8016a203f370300200341c8016a204337030020034180046a200341206a41086a29030037030020034188046a200341306a290300370300200341f0036a201e370300200341d0036a22022022370300200341b0036a202637030020034190036a202a370300200341f0026a202e370300200341d0026a2032370300200341b0026a203637030020034190026a203a370300200341f0016a203e370300200341d0016a2042370300200341b0016a20463703002003204937039801200320483703a001200320473703a8010240202342ffffffff0f83500d00200341a0046a41086a2002280200360200200320032903c8033703a00420034180016a200341a0046a10c404200328028001220220032802880110ff01200328028401450d002002102e0b200341ac046a201b360200200341a0046a41086a200c360200200341013602a404200341013a00a004200341a0046a10fe0120034198016a108b020c0e0b200841ff01714106460d0d200841187621012008411076211c200841087621152049422088a721032049a721020b20052005280200417f6a221a360200201a0d0e2005280208200528020c2802001103000240200528020c280204450d002005280208102e0b200541046a221a201a280200417f6a221a360200201a0d0e2005102e0c0e0b200141206a2802002105200141106a280200210920012d0001210a41022108200341086a41026a200241246a2d00003a00002003200241226a2f01003b01082001411c6a280200210b200141186a2802002118200141146a28020021162001410c6a280200214a200141086a280200211a200141046a280200211b200241206a2f0100210e2002411c6a280200210f200241186a2802002110200241146a2802002111200241106a28020021122002410c6a2802002113200241086a2802002114200241066a2f00002106200241056a2d00002107200241046a2d00002115200241026a2f0100214b2002280228210120022d0001210d02400240024002400240024020022d0000224c0e03000102000b200d45211741012119201521080c040b410221080240024020150e03000104000b410021080c030b20034180016a41026a200341086a41026a2d00003a0000200320032f01083b0180010c010b0240024020150e03000103000b410021080c020b20034180016a41026a200341086a41026a2d00003a0000200320032f01083b0180010b410121080b410021190b2001280200220c41016a221c41014d0d032001201c360200200121020240024002402019450d002001200c36020020174101710d014110102c221c450d07201c41f8f7c60036020c201c4101360208201c4281808080103702004110102c2202450d0720024190f8c60036020c200241013602082002428180808010370200201c201c280200417f6a2208360200024020080d00201c280208201c28020c2802001103000240201c28020c280204450d00201c280208102e0b201c41046a22082008280200417f6a220836020020080d00201c102e0b2002280200211c0b2002201c417f6a221c3602000240201c0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a221c201c280200417f6a221c360200201c0d002002102e0b2005108b022005102e0240201a450d00201b102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b410221020c010b41022102200341206a41026a200341086a41026a2d00003a0000200320032f01083b01202003204a3602582003201a3602542003201b3602500240024002400240204c0e03000102000b41022102024002400240200d0e03000102000b410021020c010b41012102201521080b200341c0046a200e3b0100200341bc046a200f360200200341b8046a2010360200200341b4046a2011360200200341b0046a2012360200200341ac046a2013360200200341a8046a2014360200200320063b01a604200320073a00a504200320083a00a4042003204b3b01a204200320023a00a104200341003a00a0040c020b4102210202400240024020150e03000102000b410021020c010b20034180016a41026a200341206a41026a2d00003a0000200320032f01203b018001410121020b200341c0046a200e3b0100200341bc046a200f360200200341b8046a2010360200200341b4046a2011360200200341b0046a2012360200200341ac046a2013360200200341a8046a2014360200200341c2046a200328018001360100200341c6046a20034184016a2f01003b0100200320063b01a604200320073a00a504200320023a00a404200341013a00a0040c010b02400240024020150e03000102000b410021020c010b20034180016a41026a200341206a41026a2d00003a0000200320032f01203b018001410121020b200341c0046a200e3b0100200341bc046a200f360200200341b8046a2010360200200341b4046a2011360200200341b0046a2012360200200341ac046a2013360200200341a8046a2014360200200341c2046a200328018001360100200341c6046a20034184016a2f01003b0100200320063b01a604200320073a00a504200320023a00a404200341023a00a0040b20034198016a200541b00210e9081a20034180016a200341d0006a4100200920162018200b200a200341a0046a20034198016a10c904200341f0006a41026a221c20032d0087013a0000200320032f0085013b017002402003280280014101460d0020012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b2005102e0c0c0b20034188016a290300211d20032d008401210220034198046a41026a201c2d00003a0000200320032f01703b01980420012001280200417f6a221c3602000240201c0d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a221c201c280200417f6a221c360200201c0d002001102e0b2005102e200241ff01714106460d0b0b200341e8006a41026a20034198046a41026a2d000022013a0000200320032f01980422053b0168200041206a20023a0000200041186a41003a000020004200370308200020053b0021200041236a20013a00002000201d37002420004201370300200424000f0b4102211c200341206a41026a200241246a2d00003a00002003200241226a2f01003b01202001410c6a2802002107200141086a2802002115200141046a2802002119200241206a2f0100210d2002411c6a280200210e200241186a280200210f200241146a2802002110200241106a28020021112002410c6a2802002112200241086a2802002113200241066a2f00002114200241056a2d00002106200241046a2d00002108200241026a2f0100210a2002280228210120022d0001210c02400240024002400240024020022d000022090e03000102000b200c45211b4101211a2008211c0c040b4102211c0240024020080e03000104000b4100211c0c030b20034180016a41026a200341206a41026a2d00003a0000200320032f01203b0180010c010b0240024020080e03000103000b4100211c0c020b20034180016a41026a200341206a41026a2d00003a0000200320032f01203b0180010b4101211c0b4100211a0b2001280200221741016a220541014d0d02200120053602002001210202400240201a450d0020012017360200201b4101710d014110102c2203450d05200341f8f7c60036020c2003410136020820034281808080103702004110102c2202450d0520024190f8c60036020c20024101360208200242818080801037020020032003280200417f6a2205360200024020050d002003280208200328020c2802001103000240200328020c280204450d002003280208102e0b200341046a22052005280200417f6a220536020020050d002003102e0b200228020021050b20022005417f6a2203360200024020030d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22032003280200417f6a220336020020030d002002102e0b02402015450d002019102e0b20012001280200417f6a22033602004102210220030d082001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22032003280200417f6a220336020020030d082001102e0c090b41022102200341386a41026a200341206a41026a2d00003a0000200320032f01203b0138024002400240024020090e03000102000b41022102024002400240200c0e03000102000b410021020c010b410121022008211c0b200341b8016a200d3b0100200341b4016a200e360200200341b0016a200f360200200341ac016a2010360200200341a8016a2011360200200341a4016a2012360200200341a0016a2013360200200320143b019e01200320063a009d012003201c3a009c012003200a3b019a01200320023a009901200341003a0098010c020b4102210202400240024020080e03000102000b410021020c010b20034180016a41026a200341386a41026a2d00003a0000200320032f01383b018001410121020b200341b8016a200d3b0100200341b4016a200e360200200341b0016a200f360200200341ac016a2010360200200341a8016a2011360200200341a4016a2012360200200341a0016a2013360200200341ba016a200328018001360100200341be016a20034184016a2f01003b0100200320143b019e01200320063a009d01200320023a009c01200341013a0098010c010b02400240024020080e03000102000b410021020c010b20034180016a41026a200341386a41026a2d00003a0000200320032f01383b018001410121020b200341b8016a200d3b0100200341b4016a200e360200200341b0016a200f360200200341ac016a2010360200200341a8016a2011360200200341a4016a2012360200200341a0016a2013360200200341ba016a200328018001360100200341be016a20034184016a2f01003b0100200320143b019e01200320063a009d01200320023a009c01200341023a0098010b200320073602a804200320153602a404200320193602a00420034180016a20034198016a200341a0046a10c30420034188016a280200210520032d008101211a20032d008201211520032d0083012108200328028401211c20032d008001210220012001280200417f6a2219360200024020024106470d00024020190d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b200041186a41003a000020004200370308200020032800503600192000411c6a200341d3006a28000036000020004200370300200424000f0b20190d082001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22032003280200417f6a220336020020030d082001102e0c080b200141146a2802002105200141046a280200210620012d0001210741022108200341206a41026a200241246a2d00003a00002003200241226a2f01003b0120200141106a28020021092001410c6a280200210a200141086a280200210b200241206a2f0100210c2002411c6a280200210d200241186a280200210e200241146a280200210f200241106a28020021102002410c6a2802002111200241086a2802002112200241066a2f00002113200241056a2d00002114200241046a2d00002115200241026a2f010021162002280228210120022d0001211702400240024002400240024020022d000022180e03000102000b20174521194101211a201521080c040b410221080240024020150e03000104000b410021080c030b20034180016a41026a200341206a41026a2d00003a0000200320032f01203b0180010c010b0240024020150e03000103000b410021080c020b20034180016a41026a200341206a41026a2d00003a0000200320032f01203b0180010b410121080b4100211a0b2001280200221b41016a221c41014d0d012001201c36020020012102024002400240201a450d002001201b36020020194101710d014110102c221c450d05201c41f8f7c60036020c201c4101360208201c4281808080103702004110102c2202450d0520024190f8c60036020c200241013602082002428180808010370200201c201c280200417f6a2208360200024020080d00201c280208201c28020c2802001103000240201c28020c280204450d00201c280208102e0b201c41046a22082008280200417f6a220836020020080d00201c102e0b2002280200211c0b2002201c417f6a221c3602000240201c0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a221c201c280200417f6a221c360200201c0d002002102e0b2005108b022005102e20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b410221020c010b41022102200341386a41026a200341206a41026a2d00003a0000200320032f01203b0138024002400240024020180e03000102000b4102210202400240024020170e03000102000b410021020c010b41012102201521080b200341c0046a200c3b0100200341bc046a200d360200200341b8046a200e360200200341b4046a200f360200200341b0046a2010360200200341ac046a2011360200200341a8046a2012360200200320133b01a604200320143a00a504200320083a00a404200320163b01a204200320023a00a104200341003a00a0040c020b4102210202400240024020150e03000102000b410021020c010b20034180016a41026a200341386a41026a2d00003a0000200320032f01383b018001410121020b200341c0046a200c3b0100200341bc046a200d360200200341b8046a200e360200200341b4046a200f360200200341b0046a2010360200200341ac046a2011360200200341a8046a2012360200200341c2046a200328018001360100200341c6046a20034184016a2f01003b0100200320133b01a604200320143a00a504200320023a00a404200341013a00a0040c010b02400240024020150e03000102000b410021020c010b20034180016a41026a200341386a41026a2d00003a0000200320032f01383b018001410121020b200341c0046a200c3b0100200341bc046a200d360200200341b8046a200e360200200341b4046a200f360200200341b0046a2010360200200341ac046a2011360200200341a8046a2012360200200341c2046a200328018001360100200341c6046a20034184016a2f01003b0100200320133b01a604200320143a00a504200320023a00a404200341023a00a0040b20034198016a200541b00210e9081a20034180016a41012006200b200a20092007200341a0046a20034198016a10d604200341f0006a41026a221c20032d0087013a0000200320032f0085013b017002402003280280014101460d0020012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b2005102e0c070b20034188016a290300211d20032d0084012102200341086a41026a201c2d00003a0000200320032f01703b010820012001280200417f6a221c3602000240201c0d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a221c201c280200417f6a221c360200201c0d002001102e0b2005102e200241ff01714106460d060b20034198046a41026a200341086a41026a2d000022013a0000200320032f010822053b019804200041206a20023a0000200041186a41003a000020004200370308200020053b0021200041236a20013a00002000201d37002420004201370300200424000f0b200141206a2802002105200141106a280200210920012d0001210a41022108200341206a41026a200241246a2d00003a00002003200241226a2f01003b01202001411c6a280200210b200141186a2802002118200141146a28020021162001410c6a280200214a200141086a280200211a200141046a280200211b200241206a2f0100210e2002411c6a280200210f200241186a2802002110200241146a2802002111200241106a28020021122002410c6a2802002113200241086a2802002114200241066a2f00002106200241056a2d00002107200241046a2d00002115200241026a2f0100214b2002280228210120022d0001210d02400240024002400240024020022d0000224c0e03000102000b200d45211741012119201521080c040b410221080240024020150e03000104000b410021080c030b20034180016a41026a200341206a41026a2d00003a0000200320032f01203b0180010c010b0240024020150e03000103000b410021080c020b20034180016a41026a200341206a41026a2d00003a0000200320032f01203b0180010b410121080b410021190b2001280200220c41016a221c41014d0d002001201c360200200121020240024002402019450d002001200c36020020174101710d014110102c221c450d04201c41f8f7c60036020c201c4101360208201c4281808080103702004110102c2202450d0420024190f8c60036020c200241013602082002428180808010370200201c201c280200417f6a2208360200024020080d00201c280208201c28020c2802001103000240201c28020c280204450d00201c280208102e0b201c41046a22082008280200417f6a220836020020080d00201c102e0b2002280200211c0b2002201c417f6a221c3602000240201c0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a221c201c280200417f6a221c360200201c0d002002102e0b2005108b022005102e0240201a450d00201b102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b410221020c010b41022102200341386a41026a200341206a41026a2d00003a0000200320032f01203b01382003204a3602582003201a3602542003201b3602500240024002400240204c0e03000102000b41022102024002400240200d0e03000102000b410021020c010b41012102201521080b200341c0046a200e3b0100200341bc046a200f360200200341b8046a2010360200200341b4046a2011360200200341b0046a2012360200200341ac046a2013360200200341a8046a2014360200200320063b01a604200320073a00a504200320083a00a4042003204b3b01a204200320023a00a104200341003a00a0040c020b4102210202400240024020150e03000102000b410021020c010b20034180016a41026a200341386a41026a2d00003a0000200320032f01383b018001410121020b200341c0046a200e3b0100200341bc046a200f360200200341b8046a2010360200200341b4046a2011360200200341b0046a2012360200200341ac046a2013360200200341a8046a2014360200200341c2046a200328018001360100200341c6046a20034184016a2f01003b0100200320063b01a604200320073a00a504200320023a00a404200341013a00a0040c010b02400240024020150e03000102000b410021020c010b20034180016a41026a200341386a41026a2d00003a0000200320032f01383b018001410121020b200341c0046a200e3b0100200341bc046a200f360200200341b8046a2010360200200341b4046a2011360200200341b0046a2012360200200341ac046a2013360200200341a8046a2014360200200341c2046a200328018001360100200341c6046a20034184016a2f01003b0100200320063b01a604200320073a00a504200320023a00a404200341023a00a0040b20034198016a200541b00210e9081a20034180016a200341d0006a4101200920162018200b200a200341a0046a20034198016a10c904200341f0006a41026a221c20032d0087013a0000200320032f0085013b017002402003280280014101460d0020012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b2005102e0c040b20034188016a290300211d20032d0084012102200341086a41026a201c2d00003a0000200320032f01703b010820012001280200417f6a221c3602000240201c0d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a221c201c280200417f6a221c360200201c0d002001102e0b2005102e200241ff01714106460d030b20034198016a41026a200341086a41026a2d000022013a0000200320032f010822053b019801200041206a20023a0000200041186a41003a000020004200370308200020053b0021200041236a20013a00002000201d3700244201211d0c030b00000b1036000b4200211d200042003703082000200328009801360019200041186a41003a00002000411c6a2003419b016a2800003600000b2000201d370300200424000f0b2000420037030820002003280050360019200041186a41003a00002000411c6a200341d3006a28000036000020004200370300200424000f0b0b2000201c360024200020083a0023200020153a00222000201a3a002120004200370308200041286a2005360000200041206a20023a0000200041186a41003a000020004201370300200424000f0b2000420037030820002003280038360019200041186a41003a00002000411c6a2003413b6a28000036000020004200370300200424000f0b20052005280200417f6a2202360200024020020d002005280208200528020c2802001103000240200528020c280204450d002005280208102e0b200541046a22022002280200417f6a220236020020020d002005102e0b200041186a41003a000020004200370308200020032800083600192000411c6a2003410b6a28000036000020004200370300200424000f0b0b20002002360024200020013a00232000201c3a0022200020153a002120004200370308200041286a2003360000200041206a20083a0000200041186a41003a000020004201370300200424000f0b2000420037030820002003280050360019200041186a41003a00002000411c6a200341d3006a28000036000020004200370300200424000b9f0501057f230041b0036b22092400200941386a220a4200370300200941306a220b4200370300200941206a41086a420037030020094200370320200941206a41d9fcc600410610810220094198036a4180f4cb004106108102200a20094198036a41086a290000370300200b200929009803370300200941186a200941206a4120108e024100210c02400240417f417f200928021c410020092802181b220a20026a220b200b200a491b220b41016a220d200d200b491b200220011b2202200a4d0d00024020034101470d002004410047200541014b71210c2005417f6a210a0b200941206a200841b00210e9081a200941e4026a200a36020020094190036a20063a0000200941e8026a2007290200370300200941f0026a200741086a290200370300200941f8026a200741106a29020037030020094180036a200741186a29020037030020094188036a200741206a290200370300200920043602e0022009200c3602dc0241002107200941003602d0022002200941206a10aa04200941206a200210a704200928022821082009280220210a200941ac036a41003a0000200941003602a803200941106a200a2008200941a8036a4105410010ca04024002402009280210450d00200920092802142207410520074105491b36029c032009200941a8036a36029803200941086a20094198036a10ab01200928020c417f6a210820092802084521070c010b0b02402009280224450d00200a102e0b2009412c6a2008410020071b2207360200200941206a41086a200236020020094100360224200941013a0020200941206a10fe01200041086a200736020020002002360204200041003602000c010b20004281808080b0a08001370200200041086a41f4e6c400ad4280808080f002843702002008108b020b200941b0036a24000b880301077f410121020240024002400240024002402001280208220341016a2204200128020422054d0d000c010b200320054f0d012001280200220620036a2d00002107200120043602080240200741037122084103460d0002400240024020080e03000102000b20074102762108410021020c030b0240200341026a220320054d0d000c030b200120033602082004417f460d04200620046a2d0000410874200772220141ffff0371418002490d02200141fcff03714102762108410021020c020b200341046a220320054b0d01200120033602082004417d4f0d04200620046a22012f0000200141026a2d000041107472410874200772220141808004492102200141027621080c010b0240200741034d0d000c010b200341056a220320054b0d00200120033602082004417c4f0d04200620046a28000022084180808080044921020b20002008360204200020023602000f0b200320054188eccc00103c000b417f20034198ebcc001057000b200420034198ebcc001057000b200420034198ebcc001057000bdf0401057f230041106b22022400200241003a0005024002400240024002400240024020012802002203280204220420044100472205490d00200241056a20032802002206200510e9081a2003200420056b3602042003200620056a360200024020040d00410021040c060b024020022d0005220441037122034103460d000240024020030e03080001080b200241003b0106200220043a00064101210420012802002201280204220320034100472205490d04200241066a41017220012802002204200510e90821062001200320056b3602042001200420056a360200024020030d00200620056a41003a00000b20022f0106220441ff014d0d0220044102762103410021040c080b20024100360208200220043a0008200241086a4101722001280200220428020020042802042203410320034103491b220310e9082101200428020422052003490d042004200520036b3602042004200428020020036a360200024020034103732204450d00200120036a4100200410eb081a0b2002280208220341808004492104200341027621030c070b200441034d0d010b410121040c050b2002410036020c2002410c6a2001280200220328020020032802042204410420044104491b220410e9081a200328020422052004490d022003200520046b3602042003200328020020046a360200024020044104460d002002410c6a20046a4100410420046b10eb081a0b200228020c22034180808080044921040c040b0c030b2003200541b8b2c0001056000b2004200541b8b2c0001056000b20044102762103410021040b2000200336020420002004360200200241106a24000bb40404057f017e027f017e0240024020012802042202450d00200128020022032d0000210420012002417f6a22053602042001200341016a360200024002400240200441037122064103460d000240024020060e03030001030b41012106024020050d000c060b20032d0001210520012002417e6a3602042001200341026a3602002005410874200472220141ffff0371418002490d05200141fcff0371410276ad21070c030b410121060240200541034f0d000c050b200341036a2d0000210520032f0001210820012002417c6a3602042001200341046a3602002008200541107472410874200472220141808004490d042001410276ad21070c020b024002400240200441027622090e050002020201020b20054104490d042003350001210720012002417b6a3602042001200341056a36020020074280808080045421060c050b20054108490d03200329000121072001200241776a3602042001200341096a3602002007428080808080808080015421060c040b200441134b0d02200941046a21082002417e6a2102200341026a2103410021044200210741012106034002402002417f470d000c050b2003417f6a310000210a20012002360204200120033602002002417f6a2102200341016a2103200a2004410374413871ad862007842107200441016a22052104200541ff01712008490d000b2007427f412820094103746b413871ad885821060c030b2004410276ad21070b410021060c010b410121060b2000200737030820002006ad3703000be70404047f017e037f017e02400240200128020022022802042203450d00200228020022042d0000210520022003417f6a3602042002200441016a3602000240200541037122024103460d0002400240024020020e03000102000b2005410276ad2106410021020c040b200128020022012802042202450d02200128020022032d0000210420012002417f6a360204410121022001200341016a3602002004410874200572220141ffff0371418002490d03200141fcff0371410276ad2106410021020c030b41012102024020012802002201280204220341034f0d000c030b2001280200220441026a2d0000210720042f000021082001200441036a36020020012003417d6a3602042008200741107472410874200572220141808004490d022001410276ad2106410021020c020b024002400240200541027622090e050002020201020b2001280200220228020422014104490d0220022802002205350000210620022001417c6a3602042002200541046a36020020064280808080045421020c030b2001280200220228020422014108490d012002280200220529000021062002200141786a3602042002200541086a3602002006428080808080808080015421020c020b200541134b0d00200941046a2108410021034200210641012102034002402001280200220528020422040d000c030b20052802002207310000210a20052004417f6a3602042005200741016a360200200a2003410374413871ad862006842106200341016a22052103200541ff01712008490d000b2006427f412820094103746b413871ad885821020c010b410121020b2000200637030820002002ad3703000be10506067f017e027f017e017f017e230041206b220224000240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a360200024002400240200541037122074103460d0002400240024020070e03000102000b2005410276ad21080c040b410121072006450d0220042d0001210620012003417e6a3602042001200441026a3602002006410874200572220141ffff0371418002490d02200141fcff0371410276ad21080c030b4101210720064103490d01200441036a2d0000210620042f0001210920012003417c6a3602042001200441046a3602002009200641107472410874200572220141808004490d012001410276ad21080c020b02400240024002402005410276220a0e0d00030303010303030303030302030b20064104490d052004350001210820012003417b6a3602042001200441056a36020020084280808080045421074200210b0c060b20064108490d04200429000121082001200341776a3602042001200441096a3602002008428080808080808080015421074200210b0c050b20064110490d03200441096a290000210b2004290001210820012003416f6a3602042001200441116a360200200b428080808080808080015421070c040b200541334b0d02200a41046a21092003417e6a2103200441026a21044100210541012107200241186a210c420021084200210b03402003417f460d012004417f6a310000210d2001200336020420012004360200200241106a200d4200200541037441f8007110ed082003417f6a2103200441016a2104200c290300200b84210b20022903102008842108200541016a22062105200641ff01712009490d000b2002427f427f41e800200a4103746b41f8007110e4082008200229030058200b200241086a290300220d58200b200d511b21070c030b0c020b4200210b410021070c010b410121070b20002008370308200041106a200b37030020002007ad370300200241206a24000bd60203017f017e027f230041206b220224000240024002400240024002402000290300220342c000540d00200342808001540d012003428080808004540d024108200379a741037622046b41044f0d0341c087c500413641f887c5001039000b20022003a74102743a00082001200241086a410110740c030b20022003a74102744101723b01082001200241086a410210740c020b20022003a74102744102723602082001200241086a410410740c010b2002411320044102746b3a00082001200241086a41011074200220002903002203370300200441786a21000340200220033c00082001200241086a4101107420034208882103200041016a22042000492105200421002005450d000b20022003370300200350450d010b200241206a24000f0b2002411c6a4100360200200241186a41d4e2cc003602002002420137020c2002418888c5003602082002200241086a10dd04000b6c01017f230041206b220224002002419088c50036020420022000360200200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241c4cec800200241046a41c4cec800200241086a419888c5001058000b6c01017f230041206b22022400200241d889c50036020420022000360200200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241b4cec800200241046a41b4cec800200241086a41e889c5001058000b930501047f230041a0036b22012400200141106a4200370300200141186a4200370300200141206a4200370300200141286a4200370300200120012903c801370308200142c0b2cd3b37039803200142c0b2cd3b37039003200142c0b2cd3b370388034100210241012103034020014188036a2104024002400240200241ff01710e03010002010b20014190036a21040c010b20014198036a21040b200442c0b2cd3b370300024020034103460d00200341e99fc0006a2104200341016a210320042d000022024103470d010b0b20014188026a420037030020014180026a4201370300200141f8016a22034200370300200141f0016a22044201370300200141c8016a41186a4200370300200141c8016a41f8006a4200370300200141c8016a41f0006a4201370300200141c8016a41e8006a4200370300200141c8016a41e0006a420137030020014198026a420037030020014190026a200129039003370300200141d0026a4200370300200141c8026a200129038803370300200142003703d00120014280e497d0123703c80120012001290398033703d801200141f8026a200141286a290300370300200141f0026a200141086a41186a290300370300200141e8026a200141186a290300370300200141e0026a200141106a290300370300200141d8026a20012903083703002004420137030020034280b0def7d32b3703002001410036028003200141086a200141c8016a41c00110e9081a200141086a41f8006a428090cad2c60e370300200141086a41f0006a4201370300200141086a41e8006a4280c0a8ca9a3a370300200141086a41e0006a4201370300200141c8016a200141086a41b80110e9081a2001428180808080d0a5cc00370380032000200141c8016a107f200141a0036a24000b800903097f017e027f23004190036b2202240041002103200241003a00a0022001280204417f6a2104024002400240024003402004417f460d0120024180026a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00a0022004417f6a21042005210320054120470d000b200241d0026a41086a220420024180026a41086a290300370300200241d0026a41106a220320024180026a41106a290300370300200241d0026a41186a220620024180026a41186a29030037030020022002290380023703d002200541ff0171411f4b0d010c020b200341ff0171450d01200241003a00a0020c010b200241e0016a41086a2004290300370300200241e0016a41106a2003290300370300200241e0016a41186a2006290300370300200220022903d0023703e00120024180026a200110850520022802a0022204450d00200241a0016a41186a2203200241e0016a41186a290300370300200241a0016a41106a2205200241e0016a41106a290300370300200241a0016a41086a2206200241e0016a41086a290300370300200241a0016a41286a220720024180026a41086a290300370300200241a0016a41306a220820024180026a41106a290300370300200241a0016a41386a220920024180026a41186a290300370300200220022903e0013703a00120022002290380023703c001200241a4026a280200210a20024180026a41286a290300210b200241e0006a41086a220c2006290300370300200241e0006a41106a22062005290300370300200241e0006a41186a22052003290300370300200241e0006a41206a220320022903c001370300200241e0006a41286a220d2007290300370300200241e0006a41306a22072008290300370300200241e0006a41386a22082009290300370300200220022903a0013703602004450d00200241206a41386a2008290300370300200241206a41306a2007290300370300200241206a41286a200d290300370300200241206a41206a2003290300370300200241206a41186a2005290300370300200241206a41106a2006290300370300200241206a41086a200c29030037030020022002290360370320200241086a200110ab010240024002402002280208450d00200241003602a0010c010b200241a0016a2001200228020c10920120022802a0010d010b20004100360240200a450d02200a41306c450d022004102e0c020b200241106a41086a2201200241a0016a41086a280200360200200220022903a001370310200041386a200241206a41386a290300370300200041306a200241206a41306a290300370300200041286a200241206a41286a290300370300200041206a200241206a41206a290300370300200041186a200241206a41186a290300370300200041106a200241206a41106a290300370300200041086a200241206a41086a29030037030020002002290320370300200041c8006a200b3703002000200a36024420002004360240200041d0006a2002290310370300200041d8006a20012802003602000c010b200041003602400b20024190036a24000bc01509077f017e097f017e017f017e027f017e047f230041c0036b22012400200141286a22024200370300200141206a22034200370300200141106a41086a420037030020014200370310200141106a4190dac800410a10810220014198036a41d5dac8004106108102200220014198036a41086a2900003703002003200129009803370300200141203602342001200141106a360230200141386a200141106a412010ed02024002400240200128023822040d00410021050c010b200128023c21062001200141386a41086a28020036024c20012004360248200141086a200141c8006a10ab010240024020012802080d0002400240200128020c2207200128024c41c4006e2202200220074b1bad42c4007e2208422088a70d002008a72202417f4c0d000240024020020d00410421050c010b2002102c2205450d060b200241c4006ead2108024002402007450d0020014198036a410172210920014198036a410772210a4100210b03400240024002400240200128024c2203450d002001280248220c2d0000210220012003417f6a220d36024c2001200c41016a3602480240024020020e020001020b200d4104490d012001418c026a41026a200141f0026a41026a2d00003a0000200141f0016a41086a200141b0026a41086a290200370300200141f0016a41106a200141b0026a41106a290200370300200141f0016a41186a200141b0026a41186a2d00003a0000200141d0016a41086a20014198036a41086a290100370300200141d0016a41106a20014198036a41106a290100370300200141d0016a41186a20014198036a41186a290100370300200120012f00f0023b018c02200120012902b0023703f00120012001290198033703d001200c280001210e20012003417b6a36024c2001200c41056a36024841002102410021030c040b41002102200141003a00b8032003417e6a210302400340200d2002460d0120014198036a20026a200c20026a220f41016a2d00003a00002001200f41026a3602482001200241016a220f3a00b8032001200336024c2003417f6a2103200f2102200f4120460d030c000b0b200241ff0171450d02200141003a00b8030c020b200141cc016a41026a2001418c026a41026a2d00003a0000200141b0016a41086a200141f0016a41086a290300370300200141b0016a41106a200141f0016a41106a290300370300200141b0016a41186a200141f0016a41186a2d00003a000020014190016a41086a200141d0016a41086a29030037030020014190016a41106a200141d0016a41106a29030037030020014190016a41186a200141d0016a41186a290300370300200120012f018c023b01cc01200120012903f0013703b001200120012903d001370390010c070b20014190036a41026a221020012d009a0322023a000020014194036a41026a20023a0000200141b0026a41086a2211200a41086a2900002212370300200141b0026a41106a2213200a41106a2900002214370300200141b0026a41186a2215200a41186a2d000022023a0000200120012f01980322163b019003200120163b0194032001200a29000022173703b002200128009b032118200141f0026a41186a221620023a0000200141f0026a41106a22022014370300200141f0026a41086a22192012370300200120173703f002200f41ff0171411f4d0d00200141ec026a41026a20102d000022103a0000200141d0026a41086a20192903002212370300200141d0026a41106a20022903002214370300200141d0026a41186a20162d000022023a0000200141ac026a41026a221920103a0000200120012f01900322163b01ec02200120012903f00222173703d002200120163b01ac0220014190026a41186a221620023a000020014190026a41106a2210201437030020014190026a41086a221a20123703002001201737039002200d200f460d00200c200f6a220241016a2d0000210f2001200336024c2001200241026a360248410021024100210c02400240200f0e020100020b20014198036a200141c8006a10930120012d0098034101460d012015200941186a2900003703002013200941106a2900003703002011200941086a290000370300200120092900003703b0024101210c0b200141d0016a41186a2015290300370300200141d0016a41106a2013290300370300200141d0016a41086a20112903003703002001418c026a41026a20192d00003a0000200141f0016a41086a201a290300370300200141f0016a41106a2010290300370300200141f0016a41186a20162d00003a0000200120012903b0023703d001200120012f01ac023b018c0220012001290390023703f00141012103200c211b2018210e0c010b41022103410121020b200141cc016a41026a220f2001418c026a41026a2d00003a0000200141b0016a41086a220c200141f0016a41086a290300370300200141b0016a41106a220d200141f0016a41106a290300370300200141b0016a41186a2216200141f0016a41186a2d00003a000020014190016a41086a2210200141d0016a41086a29030037030020014190016a41106a2219200141d0016a41106a29030037030020014190016a41186a2211200141d0016a41186a290300370300200120012f018c023b01cc01200120012903f0013703b001200120012903d0013703900120020d042001418c016a41026a2213200f2d00003a0000200141f0006a41086a220f200c290300370300200141f0006a41106a220c200d290300370300200141f0006a41186a220d20162d00003a0000200141d0006a41086a22162010290300370300200141d0006a41106a22102019290300370300200141d0006a41186a22192011290300370300200120012f01cc013b018c01200120012903b001370370200120012903900137035002402008422088a722022008a7470d00200241016a22112002490d0420024101742215201120112015491b22114104201141044b1bad42c4007e2212422088a74541027421112012a721150240024020020d0020014100360298030c010b200141043602a00320012005360298032001200241c4006c36029c030b200141b0026a2015201120014198036a107d20012802b802211120012802b0024101460d0320012802b4022105200842808080807083201141c4006ead8421080b2005200241c4006c6a220220033a00002002200e360004200241036a20132d00003a0000200220012f018c013b0001200d2d00002103200c2903002112200f2903002114200129037021172002201b3a002120022017370008200241106a2014370000200241186a2012370000200241206a20033a00002002413a6a2019290300370000200241326a20102903003700002002412a6a20162903003700002002200129035037002220084280808080107c2108200b41016a220b2007470d000b0b2005450d030c040b20110d050b1038000b2008a721022002450d00200241c4006c450d002005102e0b41002105200141003602b802200142013703b0022001410a3602d4012001200141306a3602d0012001200141b0026a36029001200141ac036a41013602002001420137029c03200141909dc500360298032001200141d0016a3602a80320014190016a419cebc00020014198036a103d1a20012802b00220012802b80210ef0220012802b402450d0020012802b002102e0b2006450d002004102e0b0240024020050d0020004100360208200042043702000c010b20002008370204200020053602000b200141c0036a24000f0b1036000bdc0b04067f017e037f017e230041d0016b22012400200141386a41186a22024200370300200141386a41106a22034200370300200141386a41086a2204420037030020014200370338200141286a4190dac800410a1081022004200141286a41086a220529000037030020012001290028370338200141286a419adac80041061081022002200529000037030020032001290028370300200141d8006a200141386a412010f40220012d005821052002200141f1006a2900003703002003200141e9006a2900003703002004200141e1006a290000370300200120012900593703380240024020054101470d0020002001290338370000200041186a2002290300370000200041106a2003290300370000200041086a20042903003700000c010b200141d8006a41186a22024200370300200141d8006a41106a22064200370300200141d8006a41086a2203420037030020014200370358200141386a41d9fcc60041061081022003200429000037030020012001290038370358200141386a41b4f4cb0041061081022002200429000037030020062001290038370300200141386a200141d8006a10a10420012802382204410420041b210302400240200129023c420020041b2207422088a7220541246c2204450d00200320046a2202415c6a2108200321040340024020042d00004101460d002002200441246a2204470d010c020b200441016a2800002109200441086a280200210a2001200441106a28020036023c2001200a36023802400240200941c28289aa04470d00200141d8006a200141386a10930220012903584203510d03200141d8006a41106a22042802002102200141d8006a41186a420037030020044200370300200141d8006a41086a2204420037030020014200370358200141386a41a081ca0041071081022004200141386a41086a220929000037030020012001290038370358200141386a41f09dc500410a108102200641086a200929000037000020062001290038370000200141386a200141d8006a1088034101210620012802382204410120041b210902402002200129023c420020041b220b422088a74f0d00200141086a41186a200920024105746a220441186a290000370300200141086a41106a200441106a290000370300200141086a41086a200441086a29000037030020012004290000370308410021060b0240200b42ffffff3f83500d002009102e0b20060d03200141d8006a41186a200141086a41186a290300370300200141d8006a41106a200141086a41106a290300370300200141d8006a41086a200141086a41086a29030037030020012001290308370358200141386a41186a22044200370300200141386a41106a22024200370300200141386a41086a2206420037030020014200370338200141286a4190dac800410a1081022006200141286a41086a220929000037030020012001290028370338200141286a419adac800410610810220042009290000370300200220012900283703004120102c2204450d012001422037022c20012004360228200141286a200141d8006a41201074200141386a412020012802282204200128023010b2010240200128022c450d002004102e0b20002001290358370000200041186a200141d8006a41186a290300370000200041106a200141d8006a41106a290300370000200041086a200141d8006a41086a2903003700000c040b20082004462109200441246a21042009450d010c020b0b1036000b20004200370000200041186a4200370000200041106a4200370000200041086a42003700000b02402005450d00200541246c21022003210403400240024002400240024020042d00000e050400010204030b2004410c6a280200450d03200441086a280200102e0c030b2004410c6a280200450d02200441086a280200102e0c020b2004410c6a280200450d01200441086a280200102e0c010b200441086a280200450d00200441046a280200102e0b200441246a21042002415c6a22020d000b0b2007a72204450d00200441246c450d002003102e0b200141d0016a24000ba70702117f047e23004190016b22012400200110940302400240024020012903004202510d00200028020821022000280204210320002802002104200141186a200141106a28020010a105200141d8006a2001280218200128022010a205200141386a41086a2200200141e4006a2902003703002001200129025c3703380240024020012802584101460d00200141286a41086a4200370300200141003602280c010b200141286a41086a2000290300370300200120012903383703280b02402002450d002004200241246c6a2105200141d8006a41106a2106200141286a410472210720042108034020082802202109200141d8006a41186a220a200841186a2900003703002006200841106a290000370300200141d8006a41086a220b200841086a29000037030020012008290000370358024002402001280230220c450d00200128022c210d0c010b419403102c220c450d054100210d200c4100360200200c41003b01322001200c3602302001410036022c0b200841246a2108024002400340200c2f0132220e410574210f41002100417c2110417f2102024003400240200f2000470d00200e21020c020b200141d8006a200c20006a41346a412010ec082211450d03200241016a21022010417c6a2110200041206a21002011417f4a0d000b0b0240200d450d00200d417f6a210d200c20024102746a4194036a280200210c0c010b0b200141386a41186a200a2903002212370300200141386a41106a20062903002213370300200141386a41086a200b290300221437030020012001290358221537033820062015370200200641086a2014370200200641106a2013370200200641186a201237020020012007360264200120023602602001200c36025c20014100360258200141d8006a410010a30521000c010b200c20106b21000b2000200028020020096a3602002001200128022820096a36022820082005470d000b0b02402003450d00200341246c450d002004102e0b200141e4006a200141286a41086a29030037020020012001290328221237025c2001410136025820012802182100200128022021022001410036024020014201370338200120123e028c01200141386a2001418c016a41041074200141d8006a41086a2210200141386a10f2012000200220012802382211200128024010b2010240200128023c450d002011102e0b201010bc02200128021c450d012000102e0c010b200041046a2802002202450d00200241246c450d002000280200102e0b20014190016a24000f0b1036000be70501067f230041a0016b22012400200141d8006a41186a22024200370300200141d8006a41106a22034200370300200141d8006a41086a2204420037030020014200370358200141d8006a41a081ca00410710810220014190016a41e4d1c100410c108102200220014190016a41086a2900003703002003200129009001370300200141106a200141d8006a4120108e0220012802142105200128021021062002200041186a2900003703002003200041106a2900003703002004200041086a29000037030020012000290000370358200141186a41bed8c8004108108102200141286a41edd8c800410e10810220012005410020061b3602482001200141c8006a410410a30137037820014190016a410c6a2202200141c8006a41046a3602002001200141f8006a41086a360294012001200141c8006a360298012001200141f8006a36029001200141386a20014190016a107c024002404120102c2200450d002001422037027c20012000360278200141f8006a200141d8006a41201074200120012802782200200128028001220310a301370388012002200020036a3602002001200036029801200120014188016a41086a36029401200120014188016a36029001200141c8006a20014190016a107c0240200128027c450d002000102e0b20012802402202200128025022036a41206a2200417f4c0d010240024020000d00410121040c010b2000102c2204450d010b20014100360298012001200036029401200120043602900120014190016a200141186a4110107420014190016a200141286a4110107420014190016a200128023822002002107420014190016a20012802482202200310740240200128024c450d002002102e0b0240200128023c450d002000102e0b200141086a20012802900122002001280298012202108e022001200128020c41016a410120012802081b36025820002002200141d8006a410410b2010240200128029401450d002000102e0b200141a0016a24000f0b1036000b1038000b7801027f230041106b2204240002404108102c2205450d0020044208370204200420053602002004200236020c20042004410c6a410410742004200336020c20042004410c6a410410742000200120042802002202200428020810b20102402004280204450d002002102e0b200441106a24000f0b1036000be50101047f230041206b2202240002400240200128020822034105744104722204417f4c0d00200128020021012004102c2205450d0120024100360208200220043602042002200536020020032002107602402003450d002003410574210303404120102c2204450d032002422037021420022004360210200241106a2001412010742002200228021022042002280218107402402002280214450d002004102e0b200141206a2101200341606a22030d000b0b2000412020022802002201200228020810b20102402002280204450d002001102e0b200241206a24000f0b1038000b1036000bb80404017f017e017f047e230041c0036b2207240042002108024020050d00200741186a2001ad420042c0843d420010e80820074188026a10a903200741c0006a2007290390022208200220082002541b10e804200741c0006a41086a290300210820072903402102200741a0026a2201420037030020074188026a41106a2205420037030020074188026a41086a22094200370300200742003703880220074188026a4180fdc6004112108102200741d0006a41dc98c50041111081022001200741d0006a41086a29000037030020052007290050370300200741286a20074188026a10e90420074188026a200729033042808090bbbad6adf00d200728022822011b200741286a41106a290300420020011b2002200842808090bbbad6adf00d420010ea04200741186a41086a29030021022007290318210a024002402007280288024101470d00427f210b427f210c0c010b2005290300210c2009290300210b0b200741d0006a10a9030240024002400240200641ff01710e03010200010b200741d0016a21050c020b200741e0006a21050c010b20074198016a21050b2005290300210820074188026a10a903200741086a200729039002220d2008200d2008541b10e804200741106a29030021082007290308210d200041306a200c370300200041286a200b370300200041206a2002370300200041186a200a370300200041106a20083703002000200d370308420121080b2000200337033820002008370300200041c0006a2004370300200741c0036a24000bdd0706017f017e047f037e037f067e230041c0026b22022400420021034280c2d72f42004280f985d40442001082052104200241e0016a22054200370300200241d0016a41086a4200370300200241ec016a22064180023b0100200241e8016a22072004360200200242003703d00141012104200241013602b802024002404100450d0042012108420021090c010b0240024002404101450d004200210a0c010b200241c8016a210b4101210c420021080340200241b0016a200842002001420010e808200241c0016a200142002001420010e808200820022903b801220184200184420052200b290300220120022903b001220a200a7c7c220a200154720d0220022903c0012101200c410271210d200c4101762204210c200a2108200d450d000b0b0240200441024f0d0020012108200a21090c020b200241a0016a41086a210d20012108200a2109034020024190016a200a42002001420010e808200241a0016a200142002001420010e808200a200229039801220184200184420052200d2903002201200229039001220a200a7c7c220a200154720d0120022903a001210102402004410271450d00200241e0006a200942002001420010e808200241f0006a200a42002008420010e80820024180016a200842002001420010e8082009420052200a4200527120022903684200527220022903784200527220024180016a41086a2903002208200229036020022903707c7c2209200854720d0220022903800121080b200441034b210c20044101762104200a210a200c0d000c020b0b427f2108427f21090b200241d0006a20082009428094ebdc03420010e608200241306a2005290300220a42002008420010e808200241206a2009420020022903d8012201420010e808200241c0006a200142002008420010e8080240024020062d0000450d00420021010c010b2002290338210e2002290328210f2002290320211020022903302111200241c0006a41086a2903002101200728020021042002290350210320022903402112200241106a20082009428094ebdc03420010e70820022002290310200241106a41086a2903002004ad2208420010e808427f200241086a29030020022903002213200320087e2208428094ebdc0380a7417f2008428080808080c0b2cd3b541b2008428094ebdc03824280cab5ee01566aad7c2208201354ad7c2203427f2001201120107c7c2210200a420052200942005271200e42005272200f4200527220102001547222041b7c2008427f201220041b7c220a2008542204ad7c22012004200120035420012003511b22041b2101427f200a20041b21030b2000200337030020002001370308200241c0026a24000ba10204017f017e017f027e230041d0006b220224002002412036020420022001360200200241086a2001412010ed0202400240200228020822010d00420021030c010b200228020c210402400240200241086a41086a2802004110490d00200141086a290000210520012900002106420121030c010b20024100360220200242013703182002410a36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241909dc5003602382002200241286a360248200241346a419cebc000200241386a103d1a2002280218200228022010ef020240200228021c450d002002280218102e0b420021030b2004450d002001102e0b2000200637030820002003370300200041106a2005370300200241d0006a24000bcd3607017f017e017f027e017f017e1b7f230041e0026b220724000240024002402001200284500d0020032004844200520d010b20004100360200200041106a4200370300200041086a42003703000c010b42012108200741f0006a200320012003200156200420025620042002511b22091b220a2004200220091b220b20054201200542015620064200522006501b220c1b220d20064200200c1b220510e6082002200420091b21022001200320091b21040240024002402007290370200741f0006a41086a29030084500d00200741e0006a20042002200d200510e6082007290360200741e0006a41086a29030084500d01200d21080c020b200741c0006a200a200b200d200510e708200741c0006a41086a290300210b420021052007290340210a0c010b200741d0006a20042002200d200510e708200741d8006a29030021024200210542012108200729035021040b200741106a200b42002004420010e808200741206a20024200200a420010e808200741306a200a42002004420010e8080240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200b420052200242005271200729031842005272200729032842005272200741306a41086a2903002201200729031020072903207c7c2203200154724101470d004110102c2209450d192009200a3e020c2009200a4220883e02082009200b3e02042009200b4220883e020020074284808080c00037028401200720093602800120074180016a10bb074110102c2209450d19200920043e020c200920044220883e0208200920023e0204200920024220883e020020074284808080c00037029401200720093602900120074190016a10bb074110102c2209450d1920092008a7220e36020c200920084220883e0208200920053e0204200920054220883e020020074284808080c0003702a401200720093602a001200741a0016a10bb07200741f0016a41086a20074190016a41086a28020036020020072007290390013703f00120074180026a41086a20074180016a41086a280200360200200720072903800137038002200741b0016a20074180026a200741f0016a10bc07024020072802f40141ffffffff0371450d0020072802f001102e0b200741b0016a10bb0720072802b801210920072802b401210f20072802b001211020072802a80122110e020501020b2007200729033020032008200510e70820004100360200200041106a200741086a290300370300200041086a20072903003703000c1b0b20094101200941014b1b221141ffffffff03712011470d162011410274220c417f4c0d1602400240200c0d00410421120c010b200c10322212450d180b200720113602d802200720123602d0022007200c4102763602d4022009450d182012201141027420094102746b6a210c410020096b2109200e4101200e41014b1bad2102420021042010210e03402011201120096a22124d0d02200c2004422086200e3502008422042002803e02002009417f460d19200e41046a210e200c41046a210c200941016a2109200420028221040c000b0b20072802a00122132802000d010c020b2012201141ecd8cc00103c000b2009450d032010280200450d00200920114d0d00200720113602bc01200920116b221441016a22154101201541014b1b221641ffffffff03712016470d1320164102742217417f4c0d1320170d01410421180c020b410021180240200f41ffffffff03710d000c070b2010102e0c060b201710322218450d120b20114101201141014b1b221941ffffffff03712019470d102019410274221a417f4c0d10201a1032221b450d11410121124102210c024002400240201328020067221c0e020201000b4102210c201c210e410121120340200c4101200e4101711b20126c2112200e41034b211d200c200c6c210c200e410176210e201d0d000b0b200c20126c21120b200720093602f8012007200f3602f401200720103602f0014104102c2209450d11200920123602002007428180808010370284022007200936028002200741c0016a200741f0016a20074180026a10bc072009102e201141ffffffff03712011470d1020114102742209417f4c0d104104210c02402009450d002009102c220c450d120b2007200c3602f001200720094102763602f401200c2013201141027410e9081a200720113602f8014104102c2209450d11200920123602002007428180808010370284022007200936028002200741d0016a200741f0016a20074180026a10bc072009102e201520072802bc016a220920072802c801220c4d0d032009200c6b220941ffffffff03712009470d1020094102742211417f4c0d100240024020110d004104210c0c010b2011102c220c450d120b02402011410276220e20094f0d002011410176220e2009200e20094b1b220e4104200e41044b1b220e41ffffffff0371200e464102742112200e410274210e0240024020110d0020074100360280020c010b20074188026a410436020020072011360284022007200c360280020b200741f0016a200e201220074180026a107d200741f8016a280200210e024020072802f0014101460d0020072802f401210c200e410276210e0c030b200e450d110c120b20090d01410021090c020b4100410041fcd8cc00103c000b200c4100200941027410eb081a0b20072802c001211002400240200e20096b20072802c8012211490d00200920116a21120c010b200920116a22122009490d0e200e410174220f2012200f20124b1b220f4104200f41044b1b220f41ffffffff0371200f46410274211d200f410274210f02400240200e0d0020074100360280020c010b20074188026a41043602002007200c360280022007200e410274360284020b200741f0016a200f201d20074180026a107d200741f8016a280200210e024020072802f0014101460d0020072802f401210c200e410276210e0c010b200e0d0f0c0e0b200c20094102746a2010201141027410e9081a024020072802c40141ffffffff0371450d0020072802c001102e0b200720123602c8012007200e3602c4012007200c3602c0010b2017410276211e201a410276211f200741d0016a10bb0703402007201422203602dc01024020072802c801220920072802bc01220c20206a220e417f736a22112009490d002011200941ccd7cc00103c000b024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020092009200e6b220e4d0d0020072802d80122092009200c6b220c4d0d0120072802d001200c4102746a35020022024200510d02202020204100476b211420072802c001220920114102746a35020021042009200e4102746a3502002101200741003602e0012007200120044220868422042002803703e801200720042002823703f801200741003602f0012007200741dc016a360294022007200741c0016a360290022007200741bc016a36028c022007200741d0016a360288022007200741f0016a360284022007200741e0016a3602800220074180026a10d7081a034020072802f001220941016a41004c0d04200720093602f001024020072903f80142ffffffff0f560d0020074180026a10d7080d010b0b20072903e80121024100210c02400240024020072802bc01221220072802dc01220e6a22092012490d00201241016a220c20124f0d00410421102007410436029802410021130c010b200c41ffffffff0371200c470d2b200c4102742211417f4c0d2b0240024020110d00410421100c010b2011102c2210450d2d0b2007201036029802201141027621134100210c2009200e490d0b201241016a220c20124f0d010b41002111410021124100210c034020072802c801220f2009417f736a221d200f4f0d06200e20094f210f2009200e2009496b210920072802c001201d4102746a280200211d02400240200c2013470d00200c417f41004100417f2009200e6b221341016a221720172013491b200f1b2009200e491b221341016a221720172013491b6a2213200c490d2d20122013201220134b1b22134104201341044b1b221341ffffffff037120134641027421172013410274211302400240200c0d00200741003602d0020c010b200741043602d802200720113602d402200720103602d0020b200741c0026a20132017200741d0026a107d20072802c802211320072802c0024101460d01200720072802c402221036029802201341027621130b201020116a201d360200201141046a2111201241026a2112200c41016a210c2009200e49200f72450d010c0c0b0b20130d2b0c2a0b02402013200c4f0d002011410176220f200c200f200c4b1b220c4104200c41044b1b220c41ffffffff0371200c46410274210f200c410274210c0240024020110d00200741003602d0020c010b200741043602d802200720113602d402200720103602d0020b200741c0026a200c200f200741d0026a107d20072802c802210c20072802c0024101460d07200720072802c402221036029802200c41027621130b200e20094f0d072009417f73210c0340200c20072802c801220f6a2211200c4f0d06201020072802c00120114102746a280200360200200c41016a210c201041046a2110200e2009417f6a2209490d000b2012210c0c080b200e200941ccd7cc00103c000b200c200941ccd7cc00103c000b4190d9cc00411941acd9cc001039000b41bcd9cc004118200741d0026a41d4d9cc0041e4d9cc00103e000b201d200f41ccd7cc00103c000b2011200f41ccd7cc00103c000b200c0d230c220b4100210c20120d010b20072802c8012209200e417f736a220e20094f0d01201020072802c001200e4102746a280200360200200c41016a210c0b20072802d801220e41ffffffff0371200e470d1f200e4102742209417f4c0d1f20072802d00121120240024020090d00410421110c010b2009102c2211450d210b200720113602c002200720094102763602c40220112012200910e9081a2007200e3602c8024108102c2209450d2020092002a72221360204200920024220883e020020074282808080203702d402200720093602d002200741a0026a200741c0026a200741d0026a10bc072009102e200c20072802a8022222200c20224b1b220f4101200f41014b1b221041ffffffff03712010470d1f20104102742223417f4c0d1f20072802980221240240024020230d00410421250c010b202310322225450d210b02400240200f0d004100211d0c010b2010417f6a210e2022417f6a222620224b2117200c417f6a2227200c4b2115202520236a417c6a2111410021124200210420072802a0022128034041002109024020150d0041002109200c202720126b221d4d0d0041002109201d20274b0d002024201d4102746a28020021090b2009ad210241002109024020170d002022202620126b221d4d0d00201d20264b0d002028201d4102746a28020021090b0240024020022009ad22067d22032002560d00200320047d22012003560d00420021044100211d0c010b20024280808080108420047d20067d2101420121044101211d0b2010200e4d0d03201120013e02002011417c6a2111200e417f6a210e200f201241016a2212470d000b0b0240201341ffffffff0371450d002024102e0b20072802bc01220e20072802dc01220c6a2213200e490d06200c20134f0d04200c417f732109034020102010200c6a20096a22114d0d03200920072802c80122126a220c20094f0d0420072802c001200c4102746a202520114102746a2802003602002009417f6a210920072802dc01210c200e417f6a220e0d000c060b0b200e200941ccd7cc00103c000b200e201041ecd8cc00103c000b200f4101200f41014b1b200c6a20096a201041ccd7cc00103c000b200c201241ecd8cc00103c000b200e0d010b200c2013417f7322096a220c20106a220e200c4f0d0120072802c801220c20096a2209200c4f0d0220072802c00120094102746a2025200e4102746a28020036020020072802dc01210c0b2016200c417f736a220920164f0d02201820094102746a2021360200201d450d0a201620072802dc01417f736a220920164f0d03201820094102746a22092009280200417f6a3602004100210c02400240024020072802bc01221220072802dc01220e6a22092012490d00201241016a220c20124f0d0041042110200741043602bc02410021130c010b200c41ffffffff0371200c470d1a200c410274220c417f4c0d1a02400240200c0d00410421100c010b200c102c2210450d1c0b200720103602bc02200c410276211302402009200e4f0d004100210c0c0c0b201241016a221120124f0d010b41002111410021124100210c034020072802c801220f2009417f736a221d200f4f0d06200e20094f210f2009200e2009496b210920072802c001201d4102746a280200211d02400240200c2013470d00200c417f41004100417f2009200e6b221341016a221720172013491b200f1b2009200e491b221341016a221720172013491b6a2213200c490d1c20122013201220134b1b22134104201341044b1b221341ffffffff037120134641027421172013410274211302400240200c0d00200741003602d0020c010b200741043602d802200720113602d402200720103602d0020b200741c0026a20132017200741d0026a107d20072802c802211320072802c0024101460d01200720072802c40222103602bc02201341027621130b201020116a201d360200201141046a2111201241026a2112200c41016a210c2009200e49200f72450d010c0c0b0b20130d1a0c190b0240201320114f0d00200c410176220f2011200f20114b1b22114104201141044b1b221141ffffffff0371201146410274210f2011410274211102400240200c0d00200741003602d0020c010b200741043602d8022007200c3602d402200720103602d0020b200741c0026a2011200f200741d0026a107d20072802c802210c20072802c0024101460d07200720072802c40222103602bc02200c41027621130b200e20094f0d072009417f73210c0340200c20072802c801220f6a2211200c4f0d06201020072802c00120114102746a280200360200200c41016a210c201041046a2110200e2009417f6a2209490d000b2012210c0c080b200e201041ccd7cc00103c000b2009200c41ecd8cc00103c000b2009201641ecd8cc00103c000b2009201641ccd7cc00103c000b201d200f41ccd7cc00103c000b2011200f41ccd7cc00103c000b200c0d120c110b4100210c20120d010b20072802c8012209200e417f736a220e20094f0d04201020072802c001200e4102746a280200360200200c41016a210c20072802bc0221100b2007200c3602b802200720133602b402200720103602b00220072802d801220c41ffffffff0371200c470d0e200c4102742209417f4c0d0e20072802d00121110240024020090d004104210e0c010b2009102c220e450d100b2007200e3602d002200720094102763602d402200e2011200910e9081a2007200c3602d802200741c0026a200741d0026a200741b0026a10d608024020072802bc01220920072802dc01220f6a220c2009490d0002400240200f200c4f0d00200c417f73210920072802c002211d20072802c802210e200f21110340200e200e20116a20096a22114d0d08200920072802c80122176a221220094f0d0920072802c00120124102746a201d20114102746a280200360200200941016a210920072802dc012111200f200c417f6a220c490d000c020b0b20090d0120072802c802210e200f21110b200e2011200f417f7322096a6a220c200e4f0d0720072802c801220e20096a2209200e4f0d0820072802c00120094102746a20072802c002200c4102746a2802003602000b024020072802c40241ffffffff0371450d0020072802c002102e0b201341ffffffff0371450d002010102e0b02402023450d002025102e0b024020072802a40241ffffffff0371450d0020072802a002102e0b20200d000b02400240201c450d00024020072802bc0122094101460d00410020096b2110201c411f71210f4100201c6b411f71211d2019410274201b6a417c6a210c417f21090340200920072802c80122116a220e20094f0d0c2011200e417f6a22124d0d0d2019201920096a22114d0d0e200c20072802c001221120124102746a280200201d742011200e4102746a280200200f7672360200200c417c6a210c20102009417f6a2209470d000b20072802bc0121090b20072802c801220c200c20096b220e4d0d082019201920096b22094d0d09201b20094102746a20072802c001200e4102746a280200201c411f717636020041012109201b210e0c010b4100210920072802c801211920072802c401211f20072802c001210e201a450d00201b102e0b024020072802d40141ffffffff0371450d0020072802d001102e0b2009450d0020072802c40141ffffffff0371450d0020072802c001102e0b4104102c2209450d0c200941003602004104102c220c450d0c200c41003602000240024020180d00410121194101211f410121164101211e0c010b2009102e200c102e200e210c201821090b200720163602e8012007201e3602e401200720093602e001200720193602f8012007201f3602f4012007200c3602f00120074180026a200741f0016a10d5082007280280024101460d0a024020074180026a41086a29030020084201882005423f86845820074180026a41106a2903002202200542018822045820022004511b0d00200741f0016a41086a200741e0016a41086a280200360200200720072903e0013703f0014110102c2209450d0d20094280808080103702082009420037020020074284808080c00037028402200720093602800220074180026a10bb07200741e0016a200741f0016a20074180026a10d60820072802840241ffffffff0371450d00200728028002102e0b200741d0026a41086a200741e0016a41086a280200360200200720072903e0013703d0020c0e0b200e200941ccd7cc00103c000b2011200e41ccd7cc00103c000b2012201741ecd8cc00103c000b200c200e41ccd7cc00103c000b2009200e41ecd8cc00103c000b200e200c41ccd7cc00103c000b2009201941ecd8cc00103c000b200e201141ccd7cc00103c000b200e417f6a201141ccd7cc00103c000b2011201941ecd8cc00103c000b20072007290284023703f00141f8dbcc00412f200741f0016a41a8dccc0041b8dccc00103e000b1038000b1036000b200f41ffffffff0371450d002010102e0b200741d0026a10bb07200741f0016a41086a200741d0026a41086a280200360200200720072903d0023703f00120074180026a200741f0016a10d50841012109024002402007280280024101470d00200041c8dccc00360204200041086a41193602000c010b200041106a20074180026a41106a290300370300200041086a20074180026a41086a290300370300410021090b2000200936020020072802a40141ffffffff0371450d0020072802a001102e0b200741e0026a24000ba40201037f230041c0006b22022400200241206a22034200370300200241186a22044200370300200241086a41086a420037030020024200370308200241086a41d9fcc6004106108102200241286a41e8f7cb00410e1081022003200241286a41086a290000370300200420022900283703004100210320024100360230200242013703280240024002400240024020000e03000102040b200241003a003c200241286a2002413c6a410110742002200136023c200241286a2002413c6a410410740c020b200241013a003c200241286a2002413c6a410110740c010b200241023a003c200241286a2002413c6a410110740b200228022c21030b200241086a412020022802282200200228023010b20102402003450d002000102e0b200241c0006a24000bc30201037f230041c0006b22022400200241206a22034200370300200241186a22044200370300200241086a41086a420037030020024200370308200241086a41a5fec600411a108102200241286a41c8c3c800410c1081022003200241286a41086a29000037030020042002290028370300200241003602302002420137032802400240024002402000417e6a22034102200341ff01714102491b41ff01710e03000102030b200241003a003c200241286a2002413c6a410110740c020b200241013a003c200241286a2002413c6a410110740c010b200241023a003c200241286a2002413c6a41011074200220003a003c200241286a2002413c6a410110742002200136023c200241286a2002413c6a410410740b200241086a412020022802282200200228023010b2010240200228022c450d002000102e0b200241c0006a24000bdf0203027f027e017f230041c0006b2201240020002d001021022000290308210320002903002104200141086a41186a22004200370300200141186a22054200370300200141086a41086a420037030020014200370308200141086a41a8f8c6004104108102200141286a41aa8cc50041181081022000200141286a41086a290000370300200520012900283703002001410036023020014201370328200141013a0038200141286a200141386a4101107420012004370338200141286a200141386a4108107420012003370338200141286a200141386a41081074024002400240024020020e03000102030b200141003a0038200141286a200141386a410110740c020b200141013a0038200141286a200141386a410110740c010b200141023a0038200141286a200141386a410110740b200141086a412020012802282200200128023010b2010240200128022c450d002000102e0b200141c0006a24000bc10201047f230041c0006b22012400200141186a22024200370300200141106a22034200370300200141086a420037030020014200370300200141d9fcc6004106108102200141206a41b4f4cb0041061081022002200141206a41086a29000037030020032001290020370300024002402000280208220341246c41046a2202417f4c0d00200028020021000240024020020d00410121040c010b2002102c2204450d020b2001410036023820012002360234200120043602302003200141306a10760240200341246c2202450d000340200141206a200010ef04200141306a200128022022032001280228107402402001280224450d002003102e0b200041246a21002002415c6a22020d000b0b2001412020012802302200200128023810b20102402001280234450d002000102e0b200141c0006a24000f0b1038000b1036000bbe0401027f230041106b220224000240024002400240024002400240024020012d00000e06010402030500010b2000410036020820004201370200200241003a00002000200241011074200141046a28020021032001410c6a28020022012000107620002003200110740c050b2000410036020820004201370200200241023a000020002002410110744120102c2203450d0520024220370204200220033602002002200141016a41201074200020022802002201200228020810742002280204450d042001102e0c040b2000410036020820004201370200200241043a000020002002410110742000200141016a41041074200141086a2802002103200141106a28020022012000107620002003200110740c030b2000410036020820004201370200200241053a000020002002410110742000200141016a41041074200141086a2802002103200141106a28020022012000107620002003200110740c020b2000410036020820004201370200200241063a000020002002410110742000200141016a41041074200141086a2802002103200141106a28020022012000107620002003200110740c010b2000410036020820004201370200200241073a00002000200241011074200241003a000020002002410110740240200141046a2802004101460d00200241003a000020002002410110740c010b200241013a000020002002410110742002200141086a280200360200200020024104107420022001410c6a28020036020020002002410410740b200241106a24000f0b1036000bbd0101037f230041306b22012400200141186a22024200370300200141106a22034200370300200141086a420037030020014200370300200141d9fcc6004106108102200141206a41a0f4cb00410a1081022002200141206a41086a2900003703002003200129002037030002404120102c2202450d002001422037022420012002360220200141206a2000412010742001412020012802202200200128022810b20102402001280224450d002000102e0b200141306a24000f0b1036000bd50302087f017e230041f0006b22022400200241c0006a41186a22034200370300200241c0006a41106a22044200370300200241c0006a41086a2205420037030020024200370340200241e0006a41d9fcc60041061081022005200241e0006a41086a220629000037030020022002290060370340200241e0006a41d4f2cb00410b1081022003200629000037030020042002290060370300200241206a200241c0006a10f204200220022903284200200229032042015122071b3703182002200241206a41106a2208290300420020071b3703102002200241206a41186a2209290300420020071b370308200241086a2107024002400240200141ff01710e03010002010b200241106a21070c010b200241186a21070b2007427f2007290300220a20007c22002000200a541b3703002009200229030837030020082002290310370300200220022903183703282002420137032020034200370300200442003703002005420037030020024200370340200241e0006a41d9fcc60041061081022005200629000037030020022002290060370340200241e0006a41d4f2cb00410b108102200441086a200629000037000020042002290060370000200241c0006a200241206a41086a10f304200241f0006a24000bbb0202037f017e230041d0006b220224002002412036020420022001360200200241086a2001412010ed0202400240200228020822010d00200042003703000c010b200228020c2103024002400240200241086a41086a28020022044108490d00200441787141786a0e09000101010101010100010b20024100360220200242013703182002410a36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241909dc5003602382002200241286a360248200241346a419cebc000200241386a103d1a2002280218200228022010ef020240200228021c450d002002280218102e0b420021050c010b200041186a2001290010370300200041106a200129000837030020002001290000370308420121050b200020053703002003450d002001102e0b200241d0006a24000b8c0101017f230041206b22022400200241003602102002420137030820022001290300370318200241086a200241186a4108107420022001290308370318200241086a200241186a4108107420022001290310370318200241086a200241186a410810742000412020022802082201200228021010b2010240200228020c450d002001102e0b200241206a24000bb80301067f230041f0006b22012400200141186a22024200370300200141106a22034200370300200141086a420037030020014200370300200141a5fec600411a108102200141d8006a41c8c3c800410c1081022002200141d8006a41086a290000370300200320012900583703002001412036022420012001360220200141286a2001412010ed0202400240200128022822040d00410421020c010b200128022c2105024002400240200141286a41086a2802002206450d00410221020240024020042d00000e03040001020b410321020c020b20064101460d00410021020240024020042d00010e020100020b410121020b2006417e6a4104490d00200428000221030c020b20014100360240200142013703382001410a36024c2001200141206a3602482001200141386a360254200141ec006a41013602002001420137025c200141909dc5003602582001200141c8006a360268200141d4006a419cebc000200141d8006a103d1a2001280238200128024010ef020240200128023c450d002001280238102e0b410421020b0b2005450d002004102e0b2000200336020420004102200220024104461b3a0000200141f0006a24000bc50d04077f017e097f037e230041c0026b22012400200141306a22024200370300200141286a22034200370300200141186a41086a420037030020014200370318200141186a41a5fec600411a108102200141d8016a41c8c4c80041081081022002200141d8016a41086a290000370300200320012900d8013703002001412036023c2001200141186a360238200141c0006a200141186a412010ed0202400240200128024022040d00410021050c010b200128024421062001200141c0006a41086a28020036025420012004360250200141106a200141d0006a10ab010240024020012802100d000240024020012802142207200128025441386e2202200220074b1bad42387e2208422088a70d002008a72202417f4c0d0002400240024020020d00410821050c010b2002102c2205450d010b200241386e21090240024020070d00410021070c010b4100210a4100210b0340200141003a00f801200b220c41016a210b2001280254210d417f210341002102024002400340200d2002460d01200141d8016a20026a2001280250220e2d00003a00002001200d20036a3602542001200e41016a3602502001200241016a220f3a00f8012003417f6a2103200f2102200f4120470d000b200141a0026a41186a2202200141d8016a41186a290300370300200141a0026a41106a2203200141d8016a41106a290300370300200141a0026a41086a2210200141d8016a41086a290300370300200120012903d8013703a002200f41ff01714120490d06200141b8016a41086a22112010290300370300200141b8016a41106a22102003290300370300200141b8016a41186a22032002290300370300200120012903a0023703b801200d200f6b22024108490d06200e29000121122001200e41096a3602502001200241786a360254200141086a200141d0006a10ab012001280208450d01200141003602d8010c060b200241ff0171450d05200141003a00f8010c050b200141d8016a200141d0006a200128020c10920120012802d801220f450d0420014198016a41186a2003290300220837030020014198016a41106a20102903002213370300200141f8006a41086a20112903002214370300200141f8006a41106a2013370300200141f8006a41186a2008370300200141d8006a41186a22032008370300200141d8006a41106a220d2013370300200141d8006a41086a220e2014370300200120012903b80122083703782001200837035820012902dc0121080240200c2009470d00200941016a22022009490d04200941017422102002201020024b1b22024104200241044b1bad42387e2213422088a74541037421022013a721100240024020090d00200141003602d8010c010b200141083602e001200120053602d8012001200941386c3602dc010b200141a0026a20102002200141d8016a107d20012802a8022102024020012802a0024101470d0020020d040c050b20012802a4022105200241386e21090b2005200c41386c6a2202201237030020022001290358370308200241106a200e290300370300200241186a200d290300370300200241206a20032903003703002002412c6a20083702002002200f360228200a41386a210a200b2007470d000b0b2005450d032001200141d0006a10ab010240024002402001280200450d00200141003602d8010c010b200141d8016a200141d0006a200128020410920120012802d8010d010b02402007450d002005200741386c6a210f200521020340200241386a210302402002412c6a28020041ffffff3f71450d00200241286a280200102e0b20032102200f2003470d000b0b024020090d00410021090c050b200941386c450d042005102e0c040b200141a0026a41086a200141d8016a41086a280200360200200120012903d8013703a0020c040b1036000b1038000b200141f8006a41186a20014198016a41186a2903003703000240200c450d002005412c6a210203400240200228020041ffffff3f71450d002002417c6a280200102e0b200241386a2102200a41486a220a0d000b0b2009450d00200941386c21022002450d002005102e0b41002105200141003602a802200142013703a0022001410a360284022001200141386a360280022001200141a0026a3602b801200141ec016a4101360200200142013702dc01200141909dc5003602d801200120014180026a3602e801200141b8016a419cebc000200141d8016a103d1a20012802a00220012802a80210ef0220012802a402450d0020012802a002102e0b2006450d002004102e0b200041086a200736020020002009360204200020053602002000410c6a20012903a002370200200041146a200141a0026a41086a280200360200200141c0026a24000b340020004199fdc60036020420004100360200200041146a4104360200200041106a41b08dc500360200200041086a42083702000b2e01017f02404104102c22020d001036000b200042043702042000200236020041002000107620004101410010740b2f01017f02404104102c22020d001036000b200042043702042000200236020041002000107641044100200010a0010b950101027f230041f0006b22022400200241c8006a410036020002404101102c2203450d002000420137020420002003360200200241003a006f2000200241ef006a41011074024020022802482200450d000240200241cc006a2802002203450d00200341306c450d002000102e0b200241dc006a28020041ffffff3f71450d002002280258102e0b200241f0006a24000f0b1036000b150020002002ad4220862001ad842003100a4101460bb60201067f024002402001280200220228020422030d00410121030c010b200228020022042d0000210520022003417f6a360204410121032002200441016a3602000240200541037122024103470d000c010b024002400240024020020e03000102000b200541027621020c020b02402001280200220228020422010d000c030b200228020022032d0000210420022001417f6a3602042002200341016a360200200441087420057241ffff03712202418002492103200241027621020c020b024020012802002202280204220141034f0d000c020b2002280200220441026a2d0000210620042f000021072002200441036a36020020022001417d6a360204200720064110747241087420057222014180807c6a41ffff0b4b0d01200141027621020b410021030b200020023b0102200020033b01000b950201067f02400240200128020422020d00410121030c010b200128020022042d0000210520012002417f6a2206360204410121032001200441016a3602000240200541037122074103470d000c010b024002400240024020070e03000102000b200541027621010c020b024020060d000c030b20042d0001210320012002417e6a3602042001200441026a360200200341087420057241ffff03712201418002492103200141027621010c020b0240200641034f0d000c020b200441036a2d0000210720042f0001210620012002417c6a3602042001200441046a360200200620074110747241087420057222024180807c6a41ffff0b4b0d01200241027621010b410021030b200020013b0102200020033b01000be10101027f230041106b2202240002400240024020002f0100220341c000490d00200341808001490d012002200341027441027236020020012002410410740c020b200220034102743a00052001200241056a410110740c010b200220034102744101723b01062001200241066a410210740b02400240024020002f0102220041c000490d00200041808001490d01200220004102744102723602082001200241086a410410740c020b200220004102743a00052001200241056a410110740c010b200220004102744101723b010e20012002410e6a410210740b200241106a24000b340020004180fdc60036020420004100360200200041146a4102360200200041106a41ac97c500360200200041086a42123702000b4e01027f230041106b2202240002404110102c22030d001036000b200042103702042000200336020020024200370308200242808090bbbad6adf00d3703002000200241101074200241106a24000b1300200041023602042000419899c5003602000bc60202057f017e230041f0006b220224004280c2d72f42004280f985d40442001082052103200241106a22044200370300200241086a42003703002002411c6a22054180023b0100200241186a22062003360200200242003703002002410136026802404118102c2203450d0020032002290308370300200320022d001d3a00152003200429030037030820032006280200360210200320052d00004100473a00140240200228026822044105490d00200441186c450d002002280204102e0b411c102c2204450d002000421c37020420002004360200410120001076200329030021072002200341086a290300370308200220073703002000200241101074200220032802103602002000200241041074200220032d00143a00002000200241011074200220032d00153a000020002002410110742003102e200241f0006a24000f0b1036000bb10302027f037e230041d0006b22042400200441386a20024201200242015620034200522003501b22051b22022003420020051b2203428094ebdc03420010e708200441286a20022003428094ebdc03420010e608200441186a20022003200429033822062004290328200441286a41086a29030084420052ad7c220742012007420156200441386a41086a2903002007200654ad7c22074200522007501b22051b22062007420020051b220810e70802400240024020042903182207428080808010544100200441186a41086a290300501b450d00200441086a200220002002200054200320015420032001511b22051b2003200120051b2006200810e70820042903082203428080808010544100200441086a41086a290300501b450d012007a70d0241d0d8c800411941bcd7cc001039000b2004411136024c2004419cd5cc0036024841add5cc0041de00200441c8006a41bcdcc80041bcd7cc00103e000b2004411136024c2004419cd5cc0036024841add5cc0041de00200441c8006a41bcdcc80041bcd7cc00103e000b200441d0006a2400200342ffffffff0f83428094ebdc037e200742ffffffff0f8380a70b4801027f230041106b2202240002404110102c22030d001036000b200042103702042000200336020020024200370308200242c0843d3703002000200241101074200241106a24000b4d01017f230041206b22002400200041146a4101360200200042013702042000419cc3cb003602002000410436021c20004194c3cb003602182000200041186a360210200041889cc5001044000b840707017f047e027f017e047f057e037f23004180026b22022400200241c0006a200110db040240024002402002290340a70d00200241c0006a41106a290300210320022903482104200241286a200110db0402402002290328a70d00200241286a41106a290300210520022903302106200241206a200110ab01024020022802200d000240024020022802242207200128020441306e2208200820074b1bad42307e2209422088a70d002009a72208417f4c0d000240024020080d004108210a0c010b2008102c220a450d060b200841306ead2109024002402007450d00200241d8016a410172210b0340200241d8016a200110930120022d00d8014101460d04200241b8016a41186a2208200b41186a290000370300200241b8016a41106a220c200b41106a290000370300200241b8016a41086a220d200b41086a2900003703002002200b2900003703b801200241086a200110db042002290308a70d04200241086a41106a290300210e2002290310210f200241f8006a41086a200d2903002210370300200241f8006a41106a200c2903002211370300200241f8006a41186a20082903002212370300200241d8006a41086a220d2010370300200241d8006a41106a22132011370300200241d8006a41186a22142012370300200220022903b80122103703782002201037035802402009422088a7220c2009a7470d00200c41016a2208200c490d04200c4101742215200820082015491b22084104200841044b1bad42307e2209422088a74541037421082009a7211502400240200c0d00200241003602d8010c010b200241083602e0012002200a3602d8012002200c41306c3602dc010b200241b8016a20152008200241d8016a107d20022802c001210820022802b8014101460d0320022802bc01210a200841306ead21090b200a200c41306c6a2208200e3703082008200f37030020082002290358370310200841186a200d290300370300200841206a2013290300370300200841286a2014290300370300200942ffffffff0f83200c41016aad4220868421092007417f6a22070d000b0b200a450d0320002004370300200020093702242000200a3602202000200637031020002003370308200041186a20053703000c070b20080d050b1038000b2009a72201450d00200141306c450d00200a102e0b200041003602200c030b200041003602200c020b200041003602200c010b1036000b20024180026a24000bb10201037f230041e0006b22022400200241086a4192fdc6004107108102200241186a41f09dc500410a108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241d0006a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000b830301057f230041e0006b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022040d00410221010c010b200328021421052003200341186a280200360224200320043602202003200341206a10ab010240024020032802000d00200328020421012003418094ebdc0336024c2003200136024820032802242206450d00200341c8006a2001418094ebdc034b4102746a2802002102200328022022012d0000210720032006417f6a3602242003200141016a36022041002101024020070e020200010b410121010c010b20034100360230200342013703282003410a36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341909dc5003602482003200341386a360258200341c4006a419cebc000200341c8006a103d1a2003280228200328023010ef020240200328022c450d002003280228102e0b410221010b2005450d002004102e0b200020013a000420002002360200200341e0006a24000b801301267f23004190046b220424000240024002402001280200220520012802044f0d00200441f7026a2106200441a4016a2107200441ac036a2108200441f0026a4101722109200441d1036a220a41036a210b03402001200541016a360200200441e0016a2005108905200441f0026a20042802e001220c20042802e801108a05200441d8036a41086a220d200941086a290000370300200441d8036a41106a220e200941106a290000370300200441d8036a41186a220f200941186a290000370300200441d8036a41206a2210200941206a290000370300200441d8036a41286a2211200941286a290000370300200441d8036a412f6a22122009412f6a29000037000020044188026a41086a2213200841086a29000037030020044188026a41106a2214200841106a29000037030020044188026a41186a2215200841186a29000037030020044188026a41206a2216200841206a280000360200200420092900003703d803200420082900003703880220042802a803211720042d00f00221182004200a2800003602782004200b28000036007b41022119024020184102460d0020042d00d003211a200441a0016a412f6a2012290000370000200441a0016a41286a2011290300370300200441a0016a41206a2010290300370300200441a0016a41186a200f290300370300200441a0016a41106a200e290300370300200441a0016a41086a200d290300370300200441c8026a41086a2013290300370300200441c8026a41106a2014290300370300200441c8026a41186a2015290300370300200441c8026a41206a2016280200360200200420042903d8033703a00120042004290388023703c8022004200428007b3600c302200420042802783602c002201821192017211b0b024020042802e401450d00200c102e0b200d200441a0016a41086a221c290300370300200e200441a0016a41106a221d290300370300200f200441a0016a41186a221e2903003703002010200441a0016a41206a221f2903003703002011200441a0016a41286a22202903003703002012200441a0016a412f6a290000370000200441f8006a41086a2221200441c8026a41086a2218290300370300200441f8006a41106a2222200441c8026a41106a220c290300370300200441f8006a41186a2223200441c8026a41186a2217290300370300200441f8006a41206a2224200441c8026a41206a2225280200360200200420042903a0013703d803200420042903c802370378200420042800c302360073200420042802c002360270200441f0026a41086a2226200d290300370300200441f0026a41106a2227200e290300370300200441f0026a41186a220e200f290300370300200441f0026a41206a220f2010290300370300200441f0026a41286a22102011290300370300200441f0026a412f6a2012290000370000200420042903d8033703f00220182021290300370300200c20222903003703002017202329030037030020252024280200360200200420042903783703c802200420042800733600c302200420042802703602c00202400240024020194102460d002019410171450d010b4103210d0c010b20072006290000370000200741286a200641286a290000370000200741206a200641206a290000370000200741186a200641186a290000370000200741106a200641106a290000370000200741086a200641086a290000370000200441e0016a41086a22112018290300370300200441e0016a41106a2212200c290300370300200441e0016a41186a22192017290300370300200441e0016a41206a22182025280200360200200420042903c8023703e0012013201c2902003703002014201d2902003703002015201e2902003703002016201f29020037030020044188026a41286a220c202029020037030020044188026a41306a2217200441a0016a41306a280200360200200420042800c3023600db01200420042802c0023602d801200420042902a001370388024103210d201a41ff01714103460d002026201329030037030020272014290300370300200e2015290300370300200f20162903003703002010200c290300370300200441f0026a41306a220d2017280200360200201c2011290300370300201d2012290300370300201e2019290300370300201f201828020036020020042004290388023703f002200420042903e0013703a001200420042800db013600cb02200420042802d8013602c8020240201b2003280200280200470d00200441386a41306a200d280200360200200441386a41286a2010290300370300200441386a41206a200f290300370300200441386a41186a200e290300370300200441386a41106a2027290300370300200441386a41086a2026290300370300200441106a41086a201c290300370300200441106a41106a201d290300370300200441106a41186a201e290300370300200441106a41206a201f280200360200200420042903f002370338200420042903a001370310200420042800cb0236000b200420042802c80236020820052128201b2129201a210d0c010b41002128200441386a41306a41002802b49e45360200200441386a41286a41002902ac9e45370300200441386a41206a41002902a49e45370300200441386a41186a410029029c9e45370300200441386a41106a41002902949e45370300200441386a41086a410029028c9e45370300200441106a41086a41002902c49e45370300200441106a41106a41002902cc9e45370300200441106a41186a41002902d49e45370300200441106a41206a41002802dc9e45360200200441002902849e45370338200441002902bc9e45370310200441002800e49e4536000b200441002800e19e453602084103210d410021290b200d41ff01714103470d02200128020022052001280204490d000b0b200041033a00600c010b2000202836020020002004290338370204200020293602382000200429031037023c2000410c6a200441386a41086a290300370200200041146a200441386a41106a2903003702002000411c6a200441386a41186a290300370200200041246a200441386a41206a2903003702002000412c6a200441e0006a290300370200200041346a200441e8006a280200360200200041c4006a200441106a41086a290300370200200041cc006a200441106a41106a290300370200200041d4006a200441106a41186a290300370200200041dc006a200441106a41206a2802003602002004200428000b360003200420042802083602002000200d3a006020002004280200360061200041e4006a20042800033600000b20044190046a24000b850201037f230041d0006b22022400200241086a41de80ca004109108102200241186a41e780ca004110108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000bfc0f05057f017e027f057e037f230041d0016b220324002003200236020420032001360200200341086a2001200210ed0202400240200328020822010d00200041023a00000c010b200328020c210202400240200341106a2802002204450d002004417f6a21050240024002400240024020012d00000e020001050b20054104490d0420012800012106200341003a00880120044105460d0420012d00052105200341013a008801200320053a006820044106470d010c030b2005450d03410021050240024020012d00010e020100050b410121050b2004417e6a4104490d03200341206a41086a200341e8006a41086a290300370300200341206a41106a200341e8006a41106a290300370300200341206a41186a200341e8006a41186a290300370300200320032903683703202003200328009001360218200320034193016a28000036001b20012800022107410121040c010b20012d00062105200341023a008801200320053a006920044107460d0120012d00072105200341033a008801200320053a006a20044108460d0120012d00082105200341043a008801200320053a006b20044109460d0120012d00092105200341053a008801200320053a006c2004410a460d0120012d000a2105200341063a008801200320053a006d2004410b460d0120012d000b2105200341073a008801200320053a006e2004410c460d0120012d000c2105200341083a008801200320053a006f2004410d460d0120012d000d2105200341093a008801200320053a00702004410e460d0120012d000e21052003410a3a008801200320053a00712004410f460d0120012d000f21052003410b3a008801200320053a007220044110460d0120012d001021052003410c3a008801200320053a007320044111460d0120012d001121052003410d3a008801200320053a007420044112460d0120012d001221052003410e3a008801200320053a007520044113460d0120012d001321052003410f3a008801200320053a007620044114460d0120012d00142105200341103a008801200320053a007720044115460d0120012d00152105200341113a008801200320053a007820044116460d0120012d00162105200341123a008801200320053a007920044117460d0120012d00172105200341133a008801200320053a007a20044118460d0120012d00182105200341143a008801200320053a007b20044119460d0120012d00192105200341153a008801200320053a007c2004411a460d0120012d001a2105200341163a008801200320053a007d2004411b460d0120012d001b2105200341173a008801200320053a007e2004411c460d0120012d001c2105200341183a008801200320053a007f2004411d460d0120012d001d2105200341193a008801200320053a0080012004411e460d0120012d001e21052003411a3a008801200320053a0081012004411f460d0120012d001f21052003411b3a008801200320053a00820120044120460d0120012d002021052003411c3a008801200320053a00830120044121460d012003411d3a008801200320012d00213a00840120044122460d012003411e3a008801200320012d00223a00850120044123460d012003411f3a008801200320012d00233a00860120044124460d01200341c8006a41106a200341e8006a41106a290300370300200341c8006a41086a200341e8006a41086a290300370300200320012d00243a008701200341c8006a41186a200341e8006a41186a290300370300200341203a008801200320032903682208370390012003200837034820044125460d024100210902400240024020012d00250e03020100050b410221090c010b410121090b2004415a6a4104490d02200441566a4110490d02200441466a4110490d02200441b67f6a410f4d0d022001280026210a200341206a41086a200341c8006a41086a290300370300200341206a41106a200341c8006a41106a290300370300200341206a41186a200341c8006a41186a29030037030020032003290348370320200320032800413602182003200341c4006a28000036001b200141d2006a2900002108200141c2006a290000210b200141326a290000210c200129004a210d200129003a210e200129002a210f410021040b200341e8006a41186a2210200341206a41186a290300370300200341e8006a41106a2211200341206a41106a290300370300200341e8006a41086a2212200341206a41086a2903003703002003200329032037036820032003280218360290012003200328001b36009301200041306a2008370000200041286a200d370000200041206a200b370000200041186a200e370000200041106a200c370000200041086a200f3700002000413c6a200a360000200041386a2006360000200041046a2007360000200020053a0001200041e0006a20093a0000200041c0006a2003290368370000200041c8006a2012290300370000200041d0006a2011290300370000200041d8006a2010290300370000200041e1006a200328029001360000200041e4006a2003280093013600000c020b200341003a0088010b200341003602980120034201370390012003410a36024c20032003360248200320034190016a360220200341fc006a41013602002003420137026c200341909dc5003602682003200341c8006a360278200341206a419cebc000200341e8006a103d1a20032802900120032802980110ef020240200328029401450d00200328029001102e0b410221040b200020043a00002002450d002001102e0b200341d0016a24000b130020002002ad4220862001ad84102610da080bbe0303057f017e037f230041306b22022400200241086a200128020c200141146a280200108b050240024020022802082203450d00200141086a2104200141106a2105024003400240024020042802002206200229020c2207422088a722084b0d0020012802002003200610ec08450d010b2007a7450d032003102e0c030b02402005280200450d00200128020c102e0b2001200336020c20052007370200200241086a2003200810ed020240024020022802082203450d0020022802102109200228020c2108024020012d001c450d00200128020c200128021410ff010b2001280214220a20042802002206490d03200241086a200128020c20066a200a20066b20032009200128021811050020022d002c4102470d012008450d002003102e0b200241086a200128020c2001280214108b05200228020822030d010c030b0b20002002290308370200200041206a200241086a41206a290300370200200041186a200241086a41186a290300370200200041106a200241086a41106a290300370200200041086a200241086a41086a2903003702002008450d022003102e0c020b2006200a41e89ec5001056000b200041023a00240b200241306a24000be30303057f017e037f230041c0006b22022400200241086a200128020c200141146a280200108b050240024020022802082203450d00200141086a2104200141106a2105024003400240024020042802002206200229020c2207422088a722084b0d0020012802002003200610ec08450d010b2007a7450d032003102e0c030b02402005280200450d00200128020c102e0b2001200336020c20052007370200200241086a2003200810ed020240024020022802082203450d0020022802102109200228020c2108024020012d001c450d00200128020c200128021410ff010b2001280214220a20042802002206490d03200241086a200128020c20066a200a20066b20032009200128021811050020022802340d012008450d002003102e0b200241086a200128020c2001280214108b05200228020822030d010c030b0b20002002290308370200200041306a200241086a41306a290300370200200041286a200241086a41286a290300370200200041206a200241086a41206a290300370200200041186a200241086a41186a290300370200200041106a200241086a41106a290300370200200041086a200241086a41086a2903003702002008450d022003102e0c020b2006200a41e89ec5001056000b2000410036022c0b200241c0006a24000bbe0301017f230041106b220224000240024020002d00004101460d00200241003a000f20012002410f6a41011074024002400240024002400240024002400240024020002d00010e0a000102030405060708090b0b200241003a000f20012002410f6a410110740c0a0b200241013a000f20012002410f6a410110740c090b200241023a000f20012002410f6a410110740c080b200241033a000f20012002410f6a410110740c070b200241043a000f20012002410f6a410110740c060b200241053a000f20012002410f6a410110740c050b200241063a000f20012002410f6a410110740c040b200241073a000f20012002410f6a410110742002200041026a2d00003a000f20012002410f6a410110740c030b200241083a000f20012002410f6a410110740c020b200241093a000f20012002410f6a410110740c010b200241013a000f20012002410f6a4101107402400240024020002d00010e03000102030b200241003a000f20012002410f6a410110740c020b200241013a000f20012002410f6a410110740c010b200241023a000f20012002410f6a410110742002200041026a2d00003a000f20012002410f6a410110740b200241106a24000b9c0101037f230041206b2202240020024100360208200242013703002001280200210302404120102c2204450d002002422037021420022004360210200241106a2003412010742002200228021022032002280218107402402002280214450d002003102e0b2002200128020441201074200020022802002201200228020810b00102402002280204450d002001102e0b200241206a24000f0b1036000baa0a01067f230041c0006b22022400024041ca03102c2203450d0020002003360200200041046a220442ca03370200200341003b000041022105200041086a4102360200024002400240200128020022032903684202520d00410221010240024020042802004102470d00200242828080801037021420022000280200360210200241306a41084101200241106a107d200241306a41086a280200210120022802304101460d0120002002280234360200200041046a2001360200200041086a28020021010b200028020020016a41043a0000200041086a2201200128020041016a3602000c020b2001450d020c030b02400240024002400240024020042802004102470d00200242828080801037021420022000280200360210200241306a41084101200241106a107d200241306a41086a280200210120022802304101460d0120002002280234360200200041046a2001360200200041086a28020021050b200341e8006a2101200028020020056a4184013a0000200041086a2204200428020041016a3602002003200010f50120032d00240e03010203040b20010d060c050b200241003a00102000200241106a410110742000200341256a41c00010740c020b200241013a00102000200241106a410110742000200341256a41c00010740c010b200241023a00102000200241106a410110742000200341256a41c10010740b200120001091050b20034198016a2000109002200041086a220128020021034104102c2204450d01200242043702042002200436020041012003417e6a220320034101461b410020031b2002107602402001280200220141014d0d00200241286a2002280200220320022802086a220436020020022000360220200041086a4100360200200241023602102002411c6a2000280200220541026a22063602002002200336022420022001417e6a220136021420022006360218200241246a21060240024020010d002000200610ee010c010b41002101034020032004460d012002200341016a360224200520016a20032d00003a00002000200028020841016a360208024020014101460d00200141016a210120022802242103200228022821040c010b0b0240200228022820022802246b2203450d00200241106a200310920520022802202200280208220320022802102201460d00200120036b2104200028020020036a21030340200228022422012002280228460d022002200141016a360224200320012d00003a00002000200028020841016a360208200341016a21032004417f6a22040d000b0b200228022820022802246b2203417f4c0d020240024020030d00410121010c010b2003102c2201450d040b200241003602382002200336023420022001360230200241306a200610ee012002280234210620022802302107024020022802382203450d00200241106a200310920520022802202204280208220120022802102200460d00200020016b2105200428020020016a21012007210003402003450d01200120002d00003a00002004200428020841016a3602082003417f6a2103200041016a2100200141016a21012005417f6a22050d000b0b2006450d002007102e0b02402002280218200228021c2203460d00200220033602180b024020022802142203450d000240200228021022042002280220220541086a22002802002201460d002005280200220520016a200520046a200310ea081a200228021421030b2000200320016a3602000b02402002280204450d002002280200102e0b200241c0006a24000f0b4102200141b4b3c000104d000b1038000b1036000baa0103017f027e017f230041106b220224000240024020002903004201520d002002200041106a290300200041086a2903002203420c882204420120044201561b80a741047420037aa7417f6a22054101200541014b1b2205410f2005410f491b723b01082001200241086a410210740c010b200241003a000b20012002410b6a410110740b200041286a20011091022002200041186a36020c2002410c6a200110af01200241106a24000b950201067f230041206b22022400024002402000280210220341046a280200220420002802042205200028020022066a22076b2001490d00200328020021040c010b0240200720016a22062007490d00200441017422052006200520064b1b22064108200641084b1b21060240024020040d00200241003602100c010b200241106a41086a410136020020022004360214200220032802003602100b200220064101200241106a107d200241086a2802002106024020022802004101460d00200320022802042204360200200341046a200636020020002802042105200028020021060c020b2006450d001036000b1038000b2004200620016a22016a200420066a200510ea081a20002001360200200241206a24000b5401027f230041106b2202240002404108102c22030d001036000b2000420837020420002003360200200241003602082000200241086a410410742002410036020c20002002410c6a41041074200241106a24000b4f01027f230041106b2202240002404114102c22030d001036000b200042143702042000200336020041044100200010950520024200370308200242003703002000200241101074200241106a24000ba40101027f230041106b22032400200120021076024002402001450d00200141c4006c210103402002200041046a412010744120102c2204450d0220034220370204200320043602002003200041246a412010742002200328020022042003280208107402402003280204450d002004102e0b200320002802003602002002200341041074200041c4006a2100200141bc7f6a22010d000b0b200341106a24000f0b1036000b5d01027f230041206b22022400200241186a4200370300200241106a4200370300200241086a42003703002002420037030002404120102c22030d001036000b20004220370204200020033602002000200241201074200241206a24000b2f01017f02404104102c22020d001036000b2000420437020420002002360200410020001076410841002000109e010b4f01027f230041106b2202240002404114102c22030d001036000b200042143702042000200336020041044100200010d80220024200370308200242003703002000200241101074200241106a24000b5801017f230041106b220224002000410036020820004201370200200242003703082000200241086a41081074200242003703082000200241086a41081074200242003703082000200241086a41081074200241106a24000b7a01017f230041106b22022400200041003602082000420137020020024200370308200242003703002000200241101074200242003703082002420037030020002002411010742002420037030820024200370300200020024110107420024200370308200242003703002000200241101074200241106a24000b8f0101027f230041306b220224002000410036020820004201370200200241186a4200370300200241106a4200370300200241086a42003703002002420037030002404120102c2203450d002002422037022420022003360220200241206a2002412010742000200228022022032002280228107402402002280224450d002003102e0b200241306a24000f0b1036000b4201027f230041106b2202240002404104102c22030d001036000b20004204370204200020033602002002410136020c20002002410c6a41041074200241106a24000bb60101017f230041106b22022400200041003602082000420137020020024100360200200020024104107420024100360200200020024104107420024100360200200020024104107420024100360200200020024104107420024200370308200242003703002000200241101074200242003703082002420037030020002002411010742002420037030820024200370300200020024110107420024200370308200242003703002000200241101074200241106a24000b2901017f230041106b2202240020024100360208200242043703002000200210b501200241106a24000ba40b02087f067e230041b0036b2203240020034190036a41186a2204420037030020034190036a41106a2205420037030020034190036a41086a22064200370300200342003703900341062107200341d8016a41d9fcc60041061081022006200341d8016a41086a2208290000370300200320032900d80137039003200341d8016a4188f3cb00411010810220042008290000370300200520032900d801370300200341086a20034190036a4120108e02410021090240417f200328020c410020032802081b220a20026a22022002200a491b220a418080c002418080f001200141ff017122021b4b0d00200341106a10a9032004420037030020054200370300200642003703002003420037039003200341d8016a41d9fcc600410610810220062008290000370300200320032900d80137039003200341d8016a41d4f2cb00410b108102200541086a2008290000370000200520032900d801370000200341d8016a20034190036a10f204200341d8016a41186a290300210b200341d8016a41106a290300210c20032903e001210d20032903d801210e200341d8016a200341106a41b80110e9081a2003200d4200200e42015122061b370390032003200c420020061b3703d0012003200b420020061b3703c801024002400240024020020e03010200010b427f2000200341d8026a22062903007c220b200b2000541b210b0c020b427f200020032903e8017c220b200b2000541b210b200341e8016a21060c010b427f2000200341a0026a22062903007c220b200b2000541b210b0b02400240024002402006290318220c4201510d0020062903284201510d00200341c8016a2108024002400240200141ff01710e03010002010b200341d0016a21080c010b20034190036a21080b2008427f2008290300220d200b7c220b200b200d541b3703000c010b200341c8016a2108024002400240200141ff01710e03010002010b200341d0016a21080c010b20034190036a21080b2008290300220d200b7c220b200d540d012008200b3703000b200341c8016a2108024002400240200141ff01710e03000102000b20034190036a21080c010b200341d0016a21080b2008290300210e0240200c4201520d00200e200641206a290300560d010b0240427f427f200329039003220b20032903d001220c7c220d200d200b541b220f20032903c801220d7c22102010200f541b20032903e001580d0020062903284201520d00200e200641306a290300560d010b41002106410021070c010b41062107410121060b20060d00200341d8016a10a9030240024002400240200141ff01710e03010200010b200341d8026a21010c020b200341e8016a21010c010b200341a0026a21010b024020012903084201520d0041062107200141106a2903002000540d010b200341a8036a2208420037030020034190036a41106a2207420037030020034190036a41086a220142003703002003420037039003200341d8016a41d9fcc60041061081022001200341d8016a41086a2206290000370300200320032900d80137039003200341d8016a4188f3cb004110108102200541086a22042006290000370000200520032900d8013700002003200a3602d80120034190036a4120200341d8016a410410b2012008420037030020074200370300200142003703002003420037039003200341d8016a41d9fcc600410610810220012006290000370300200320032900d80137039003200341d8016a41d4f2cb00410b10810220042006290000370000200520032900d801370000200341003602e001200342013703d8012003200b370310200341d8016a200341106a410810742003200c370310200341d8016a200341106a410810742003200d370310200341d8016a200341106a4108107420034190036a412020032802d801220520032802e00110b201024020032802dc01450d002005102e0b410221090b200341b0036a240020074108742009720bee0302037f017e230041d0016b22042400200441206a22054200370300200441086a41106a22064200370300200441086a41086a420037030020044200370308200441086a41d9fcc6004106108102200441c0016a4188f3cb0041101081022005200441c0016a41086a290000370300200620042900c0013703002004200441086a4120108e0202400240417f2004280204410020042802001b220520036a220320032005491b418080c002418080f001200241ff017122031b4b0d00200441086a10a903024002400240024020030e03010200010b20044188016a21030c020b200441186a21030c010b200441d0006a21030b0240024020032903084201520d00200341106a2903002001540d010b42002107024002400240200241ff01710e03000102000b200121070c010b427f200142ffffffffffffffffbf7f7c220720072001541b21070b200041003a0000200041306a41013a0000200041286a4200370200200041206a4280808080c000370300200041186a4204370300200041106a427f370300200041086a2007370300200041316a2004280008360000200041346a2004410b6a2800003600000c020b200041800c3b0001200041013a0000200041036a41003a00000c010b200041800c3b0001200041013a0000200041036a41003a00000b200441d0016a24000b850201037f230041d0006b22022400200241086a4192fdc6004107108102200241186a41ed9fc5004110108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000b8c0a03107f047e037f23004180026b220324002003200236021420032001360210200341186a2001200210ed0202400240200328021822040d00200041003602000c010b200328021c21052003200341206a280200220136022c200320043602280240024020014104490d002004280000210620032001417c6a36022c2003200441046a360228200341086a200341286a10ab0120032802080d00200328020c210720034200370244024002402007450d00200341d0016a41106a2108410021090340200341003a00f001200941016a2109200328022c210a417f21024100210102400240024002400340200a2001460d01200341d0016a20016a2003280228220b2d00003a00002003200a20026a36022c2003200b41016a3602282003200141016a220c3a00f0012002417f6a2102200c2101200c4120470d000b200341b0016a41186a220d200341d0016a41186a220e290300370300200341b0016a41106a220f2008290300370300200341b0016a41086a2210200341d0016a41086a2211290300370300200320032903d0013703b001200c41ff01714120490d01200341f0006a41086a22012010290300370300200341f0006a41106a2202200f290300370300200341f0006a41186a2212200d290300370300200320032903b001370370200a200c6b220c4104490d01200341d0006a41086a20012903002213370300200341d0006a41106a20022903002214370300200341d0006a41186a20122903002215370300200320032903702216370350200b28000121172003200b41056a3602282003200c417c6a36022c200e20153703002008201437030020112013370300200320163703d0012003280244220b450d02200328024021180c030b200141ff0171450d00200341003a00f0010b200341d0016a41086a200341c0006a41086a280200360200200320032903403703d001200341d0016a10bc020c050b419403102c220b450d0341002118200b4100360200200b41003b01322003200b360244200341003602400b024002400340200b2f013222194105742112410021014104210c417f210202400340024020122001470d00201921020c020b200341d0016a200b20016a41346a412010ec08220a450d03200241016a2102200c41046a210c200141206a2101200a417f4a0d000b0b02402018450d002018417f6a2118200b20024102746a4194036a280200210b0c010b0b200d200e2903002213370300200f20082903002214370300201020112903002215370300200320032903d00122163703b00120082016370200200841086a2015370200200841106a2014370200200841186a2013370200200320023602d8012003200b3602d401200341003602d0012003200341c0006a3602dc01200341d0016a201710a3051a0c010b200b200c6a20173602000b20092007470d000b0b200341b0016a41086a200341c0006a41086a28020022013602002003200329034022133703b0012000200636020420004101360200200041086a2013370200200041106a20013602000c020b1036000b200341003602b801200342013703b0012003410a360294012003200341106a360290012003200341b0016a360270200341e4016a4101360200200342013702d401200341909dc5003602d001200320034190016a3602e001200341f0006a419cebc000200341d0016a103d1a20032802b00120032802b80110ef02024020032802b401450d0020032802b001102e0b200041003602000b2005450d002004102e0b20034180026a24000bc51a07147f017e027f017e027f017e087f230041a0016b2202240020002802102103200028020821042000280200210520002802042106200241c0006a41186a22072000412c6a280000360200200241c0006a41106a2208200041246a290000370300200241c0006a41086a22092000411c6a2900003703002002200041146a29000037034002400240024020062f0132220a410a4b0d0020024180016a41186a200728020036020020024180016a41106a200829030037030020024180016a41086a20092903003703002002200229034037038001200641346a2107200a41016a21080240200441016a2209200a4b22050d00200720094105746a200720044105746a20082004417f736a41057410ea081a0b200720044105746a220a2003360000200a200229038001370004200a410c6a20024188016a290300370000200a41146a20024190016a290300370000200a411c6a20024198016a280200360000200641046a210a024020050d00200a20094102746a200a20044102746a20082004417f736a41027410ea081a0b200a20044102746a220b2001360200200620083b01320c010b4105210a4100210c02400240200441054f0d004104210a200421070c010b41052107024002402004417b6a0e020201000b200441796a21074101210c4106210a0c010b410021074101210c0b02400240024002400240024002400240024002400240419403102c2204450d00200441003b013220044100360200200420062f0132220d200a417f736a22083b013220024188016a200641346a220e200a4105746a2209410c6a29000037030020024190016a200941146a29000037030020024198016a2009411c6a28000036020020022009290004370380012008410c4f0d01200d200a41016a220f6b2008470d02200641046a220d200a4102746a280200211020092800002111200441346a200e200f4105746a200841057410e9081a200441046a200d200f4102746a200841027410e9081a2006200a3b0132200241e0006a41086a20024180016a41086a2209290300370300200241e0006a41106a20024180016a41106a220f290300370300200241e0006a41186a20024180016a41186a220d280200360200200220022903800137036020042006200c1b22082f0132210a200d200241c0006a41186a280200360200200f200241c0006a41106a2903003703002009200241c0006a41086a2903003703002002200229034037038001200841346a210c200a41016a210e0240200741016a2212200a4b22130d00200c20124105746a200c20074105746a200e2007417f736a41057410ea081a0b200c20074105746a220a2003360000200a200229038001370004200a410c6a2009290300370000200a41146a200f290300370000200a411c6a200d280200360000200841046a210a024020130d00200a20124102746a200a20074102746a200e2007417f736a41027410ea081a0b200a20074102746a220b2001360200200241206a41086a2214200241e0006a41086a22152903002216370300200241206a41106a2217200241e0006a41106a22182903002219370300200241206a41186a221a200241e0006a41186a221b280200220a3602002008200e3b013220022002290360221c370320200241186a220e200a360200200241106a22122019370300200241086a221320163703002002201c370300024002400240200628020022010d00410021050c010b2010211d4100210a2004211e2011211f034020062f01302108200241c0006a41186a2220200e280200360200200241c0006a41106a22212012290300370300200241c0006a41086a22222013290300370300200220022903003703402005200a470d0620012f0132220c410b490d024100210941042106024020084105490d0020082106024002402008417b6a0e020201000b200841796a210841012109410621060c010b4100210841012109410521060b41c403102c2204450d03200441003b013220044100360200200420012f013222102006417f736a220a3b0132200141346a222320064105746a2207280000211120024180016a41186a22032007411c6a28000036020020024180016a41106a220f200741146a29000037030020024180016a41086a220d2007410c6a2900003703002002200729000437038001200a410c4f0d072010200641016a22076b200a470d08200141046a222420064102746a2802002110200441346a202320074105746a200a41057410e9081a200441046a2024200741027422076a200a41027410e9081a200120063b01322015200d2903003703002018200f290300370300201b2003280200360200200220022903800137036020042f0132220a41016a2123200a410c4f0d09200c20066b22062023470d0a200541016a210520044194036a200120076a4194036a200641027410e9081a4100210602400340200420064102746a4194036a280200220720063b01302007200436020020062006200a4922076a2206200a4b0d0120070d000b0b201a201b2802003602002017201829030037030020142015290300370300200220022903603703202004200120091b22072f0132210c20032020280200360200200f2021290300370300200d20222903003703002002200229034037038001200741346a210a200c41016a21090240200841016a2206200c4b22200d00200a20064105746a200a20084105746a2008417f7320096a41057410ea081a0b200a20084105746a220a201f360000200a200229038001370004200a410c6a200d290300370000200a41146a200f290300370000200a411c6a2003280200360000200741046a210a024020200d00200a20064102746a200a20084102746a2008417f7320096a41027410ea081a0b200a2008410274220f6a201d36020020074194036a210a0240200841026a220d200c41026a22034f0d00200a200d4102746a200a20064102746a2006417f7320036a41027410ea081a0b200a20064102746a201e360200200720093b01320240200620034f0d002007200f6a4198036a210603402006280200220a200841016a22083b0130200a2007360200200641046a210620092008470d000b0b2013201429030037030020122017290300370300200e201a28020036020020022002290320370300200121062001280200220721012010211d2005210a2004211e2011211f20070d000b0b200241c0006a41186a200e2802002206360200200241c0006a41106a20122903002216370300200241c0006a41086a2013290300221937030020022002290300221c370340201b200636020020182016370300201520193703002002201c370360200028020c220a2802042207450d09200a280200210841c403102c2206450d012006200736029403200641003b013220064100360200200741003b013020072006360200200a2006360204200a200841016a36020020024180016a41186a200241e0006a41186a28020036020020024180016a41106a200241e0006a41106a29030037030020024180016a41086a200241e0006a41086a290300370300200220022903603703800120082005470d0a20062f01322208410b4f0d0b200620084105746a220741346a2011360000200741386a200229038001370000200741c0006a20024188016a290300370000200741c8006a20024190016a290300370000200741d0006a20024198016a2802003600002006200841016a22073b0132200620074102746a4194036a2004360200200620084102746a41046a2010360200200420073b013020042006360200200a200a28020841016a3602080c0d0b20012f0132210a20024180016a41186a2205200241c0006a41186a28020036020020024180016a41106a2203200241c0006a41106a29030037030020024180016a41086a220f200241c0006a41086a2903003703002002200229034037038001200841016a2106200141346a2104200a41016a210902402008200a4f22070d00200420064105746a200420084105746a2008417f7320096a41057410ea081a0b200420084105746a2204201f36000020042002290380013700042004410c6a200f290300370000200441146a20032903003700002004411c6a2005280200360000200141046a2104024020070d00200420064102746a200420084102746a2008417f7320096a41027410ea081a0b2004200841027422056a201d36020020014194036a2104200a41026a2108024020070d00200520046a41086a200420064102746a2006417f7320086a41027410ea081a0b200420064102746a201e360200200120093b0132200620084f0d0b200a41016a210720012006417f6a22064102746a4198036a210403402004280200220a200641016a22063b0130200a2001360200200441046a210420072006470d000c0c0b0b1036000b2008410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b41ac9cc700413541e49cc7001039000b200a410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b2023410c41f49cc700104d000b41f49bc7004128419c9cc7001039000b41e8aac700412b4194abc7001039000b41e899c700413041989ac7001039000b41a89ac700412041c89ac7001039000b200028020c2206200628020841016a3602080b200241a0016a2400200b0bf60d04067f017e057f027e230041800d6b2202240010a505200141086a28020021032001410c6a280200210420012802042105200241a00a6a2001280200220610a6052005200441b0026c6a2107200241a00a6a10a7052101024002400240024002400240024020040d0042002108200521010c010b20024180056a41047221090240024020010d00200241e9026a210a420021084100210b20052101024003402001280200210c200241c0076a200141046a220d41ac0210e9081a200241a00a6a200d41ac0210e9081a200c411c460d0120024180056a200241a00a6a41ac0210e9081a200241d0026a20024180056a41ac0210e9081a200241246a200241d0026a41ac0210e9081a2002200c360280052009200241246a41ac0210e9081a200241b0076a20024180056a109704200241a00a6a20024180056a41b00210e9081a200241c0076a200610a605200241d0026a200241a00a6a200241c0076a10dd020240024020022903d8024201510d0020022903b007210e0c010b20022903b007220e20022903e002220f200f200e561b210e0b200241a00a6a41086a200a41086a290000370300200241a00a6a410f6a200a410f6a2900003700002002200a2900003703a00a427f2008200e7c220e200e2008541b2108024020022903d0024201510d00200b41016a210b200141b0026a22012007470d010c040b0b200141b0026a21010c050b200141b0026a21010c060b200241e9026a210c4100210b200521014200210803402001280200210a200241c0076a200141046a220d41ac0210e9081a200241a00a6a200d41ac0210e9081a200a411c460d0520024180056a200241a00a6a41ac0210e9081a200241d0026a20024180056a41ac0210e9081a200241246a200241d0026a41ac0210e9081a2002200a360280052009200241246a41ac0210e9081a200241b0076a20024180056a109704200241c0076a20024180056a41b00210e9081a200241f0096a200610a6050240024020022802980a220a280208200241c0076a200a28020c28020c1101000d00200a200a280200417f6a220d360200200241023a00f002200241003a00e802200242003703d802200242013703d0020240200d0d00200a280208200a28020c2802001103000240200a28020c280204450d00200a280208102e0b200a41046a220d200d280200417f6a220d360200200d0d00200a102e0b200241c0076a10dc0220022903b007210e0c010b200241a00a6a200241c0076a41b00210e9081a200241d00c6a41286a200241f0096a41286a280200360200200241d00c6a41206a200241f0096a41206a290300370300200241d00c6a41186a200241f0096a41186a290300370300200241d00c6a41106a200241f0096a41106a290300370300200241d00c6a41086a200241f0096a41086a290300370300200220022903f0093703d00c200241d0026a200241a00a6a200241d00c6a10dd02024020022903d8024201510d0020022903b007210e0c010b20022903b007220e20022903e002220f200f200e561b210e0b200241a00a6a41086a200c41086a290000370300200241a00a6a410f6a200c410f6a2900003700002002200c2900003703a00a427f2008200e7c220e200e2008541b210820022903d0024201510d03200b41016a210b200141b0026a22012007470d000b0b200721010b200241a00a6a200241c0076a41ac0210e9081a0c030b200141b0026a21010b200241086a410f6a200241a00a6a410f6a290000370000200241086a41086a200241a00a6a41086a290300370300200220022903a00a370308200b41016aad42e88dfb007e20087c2108024020072001460d0003402001108b022007200141b0026a2201470d000b0b200842e0b8a1077c210802402003450d00200341b0026c450d002005102e0b200241c0076a410f6a2201200241086a410f6a290000370000200241c0076a41086a2207200241086a41086a290300370300200220022903083703c00710a805200041186a41003a0000200041106a20083703002000420137030820004201370300200020022903c007370019200041216a2007290300370000200041286a20012900003700000c020b200141b0026a21010b024020072001460d0003402001108b022007200141b0026a2201470d000b0b02402003450d00200341b0026c450d002005102e0b200241a00a6a41086a41063a0000200241113a00a00a200241a00a6a10fe01200241c0076a41086a2201200241086a41086a290300370300200241c0076a410f6a2207200241086a410f6a290000370000200220022903083703c00710a905200041186a41003a0000200041106a2004ad42e88dfb007e20087c42e0b8a1077c3703002000420137030820004200370300200020022903c007370019200041216a2001290300370000200041286a20072900003700000b200241800d6a24000b0400102b0ba10701087f230041c0006b21020240024002400240024020012d00000e03000102000b4102210302400240024020012d00010e03000102000b410021030c010b2002413c6a41026a200141076a2d00003a0000200241206a41086a200141186a290000370300200241206a41106a200141206a2f00003b01002002200141056a2f00003b013c2002200141106a2900003703202001410c6a2800002104200141086a2800002105200141046a2d00002106200141026a2f00002107410121030b2002411c6a41026a2002413c6a41026a2d00003a0000200241086a200241206a41086a290300370300200241106a200241206a41106a2f01003b0100200220022f013c3b011c20022002290320370300410021080c030b41022106024002400240200141046a2d00000e03000102000b2001410c6a2802002104200141086a2802002105410021060c010b2002413e6a200141076a2d00003a0000200241206a41086a200141186a2900003703002002412d6a2001411d6a2900003700002002200141056a2f00003b013c2002200141106a2900003703202001410c6a2800002104200141086a2800002105410121060b2002411c6a41026a2002413c6a41026a2d00003a0000200241086a200241206a41086a290300370300200241106a200241206a41106a290300370300200220022f013c3b011c20022002290320370300410121080c010b4102210841022106024002400240200141046a2d00000e03000102000b2001410c6a2802002104200141086a2802002105410021060c010b2002413e6a200141076a2d00003a0000200241206a41086a200141186a2900003703002002412d6a2001411d6a2900003700002002200141056a2f00003b013c2002200141106a2900003703202001410c6a2800002104200141086a2800002105410121060b2002411c6a41026a2002413c6a41026a2d00003a0000200241086a200241206a41086a290300370300200241106a200241206a41106a290300370300200220022f013c3b011c200220022903203703000b0b02402001280228220128020041016a220941014b0d0000000b200020033a0001200020083a000020002001360228200041046a20063a0000200041026a20073b010020012009360200200041056a20022f011c3b00002000410c6a2004360200200041086a2005360200200041106a2002290300370200200041076a2002411c6a41026a2d00003a0000200041186a200241086a290300370200200041206a200241106a2903003702000bcc0101037f200028022822012001280200417f6a220236020020002d0001210302400240024020002d00000d004100210020020d022001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a22023602002002450d010c020b4101210020020d012001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d010b2001102e0b200341ff01714100472000720b040010280b040010230bce0902037f017e230041b0016b220224002002412036020c20022001360208200241106a2001412010ed0202400240200228021022010d00200041033a00200c010b200241186a280200210320022802142104200241003a0060024002402003450d00200220012d00003a0040200241013a0060024020034101460d00200220012d00013a0041200241023a006020034102460d00200220012d00023a0042200241033a006020034103460d00200220012d00033a0043200241043a006020034104460d00200220012d00043a0044200241053a006020034105460d00200220012d00053a0045200241063a006020034106460d00200220012d00063a0046200241073a006020034107460d00200220012d00073a0047200241083a006020034108460d00200220012d00083a0048200241093a006020034109460d00200220012d00093a00492002410a3a00602003410a460d00200220012d000a3a004a2002410b3a00602003410b460d00200220012d000b3a004b2002410c3a00602003410c460d00200220012d000c3a004c2002410d3a00602003410d460d00200220012d000d3a004d2002410e3a00602003410e460d00200220012d000e3a004e2002410f3a00602003410f460d00200220012d000f3a004f200241103a006020034110460d00200220012d00103a0050200241113a006020034111460d00200220012d00113a0051200241123a006020034112460d00200220012d00123a0052200241133a006020034113460d00200220012d00133a0053200241143a006020034114460d00200220012d00143a0054200241153a006020034115460d00200220012d00153a0055200241163a006020034116460d00200220012d00163a0056200241173a006020034117460d00200220012d00173a0057200241183a006020034118460d00200220012d00183a0058200241193a006020034119460d00200220012d00193a00592002411a3a00602003411a460d00200220012d001a3a005a2002411b3a00602003411b460d00200220012d001b3a005b2002411c3a00602003411c460d00200220012d001c3a005c2002411d3a00602003411d460d00200220012d001d3a005d2002411e3a00602003411e460d00200220012d001e3a005e2002411f3a00602003411f460d00200241206a41106a200241c0006a41106a290300370300200241206a41086a200241c0006a41086a290300370300200220012d001f3a005f200241206a41186a200241c0006a41186a290300370300200241203a00602002200229034022053703682002200537032020034120460d014100210302400240024020012d00200e03020001040b410121030c010b410221030b20002002290320370000200041186a200241206a41186a290300370000200041106a200241206a41106a290300370000200041086a200241206a41086a2903003700000c020b200241003a00600b20024100360270200242013703682002410a3602242002200241086a3602202002200241e8006a3602ac01200241d4006a410136020020024201370244200241909dc5003602402002200241206a360250200241ac016a419cebc000200241c0006a103d1a2002280268200228027010ef020240200228026c450d002002280268102e0b410321030b200020033a00202004450d002001102e0b200241b0016a24000be30d020f7f077e230041c0026b220224002002412036021420022001360210200241186a2001412010ed020240024002400240200228021822030d00200041033a003c0c010b200228021c21042002200241206a28020036022c20022003360228200241086a200241286a10ab01024002400240024020022802080d00200228020c2205200228022c4106762201200120054b1b22064106742201417f4c0d060240024020060d00410821070c010b2001102c2207450d060b02400240024020050d00410021050c010b41002108410021090340200241003a0088012009220a41016a2109200228022c210b417f210c41002101024002400240024002400340200b2001460d01200241e8006a20016a2002280228220d2d00003a00002002200b200c6a36022c2002200d41016a3602282002200141016a220e3a008801200c417f6a210c200e2101200e4120470d000b200241386a41186a2201200241e8006a41186a290300370300200241386a41106a220c200241e8006a41106a290300370300200241386a41086a220f200241e8006a41086a29030037030020022002290368370338200e41ff01714120490d0120024180026a41086a2210200f29030037030020024180026a41106a220f200c29030037030020024180026a41186a220c20012903003703002002200229033837038002200b200e6b22014110490d012002200d41116a3602282002200141706a36022c200d41096a2900002111200d2900012112200241e8006a200241286a10e9012002280268220e450d01200241c0016a41086a20102903002213370300200241c0016a41106a200f2903002214370300200241c0016a41186a200c2903002215370300200241a0016a41086a22012013370300200241a0016a41106a220c2014370300200241a0016a41186a220b2015370300200220022903800222133703c001200220133703a001200229026c2113200a2006470d04200641016a220d2006490d0e2006410174220f200d200f200d4b1b220d4104200d41044b1b220d41ffffff1f71200d46410374210f200d410674210d20060d02200241003602680c030b200141ff0171450d00200241003a0088010b0240200a450d00200741346a2101034002402001280200220c450d00200c41306c450d002001417c6a280200102e0b200141c0006a2101200841406a22080d000b0b200641ffffff1f710d050c060b20024108360270200220073602682002200641067436026c0b200241386a200d200f200241e8006a107d2002280240210d024020022802384101470d00200d0d0a0c0b0b200228023c2107200d41067621060b20012903002114200c2903002115200b290300211620022903a00121172007200a4106746a2201201237032020012017370300200120133702342001200e360230200141286a2011370300200141186a2016370300200141106a2015370300200141086a2014370300200841c0006a210820092005470d000b0b2007450d01200241e8006a200241286a10a401024020022903684201510d00200241386a41286a20024198016a290300370300200241386a41206a200241e8006a41286a290300370300200241386a41186a200241e8006a41206a290300370300200241386a41106a200241e8006a41186a290300370300200241c0006a200241e8006a41106a29030037030020022002290370370338200228022c2201450d002002280228220c2d0000210e20022001417f6a36022c2002200c41016a360228410021010240200e0e03050400010b410221010c040b02402005450d00200720054106746a210b2007210103402001220c41c0006a21010240200c41346a280200220e450d00200e41306c450d00200c41306a280200102e0b200b2001470d000b0b200641ffffff1f71450d010b2007102e0b20024100360240200242013703382002410a3602a4022002200241106a3602a0022002200241386a36028002200241fc006a41013602002002420137026c200241909dc5003602682002200241a0026a36027820024180026a419cebc000200241e8006a103d1a2002280238200228024010ef020240200228023c450d002002280238102e0b410321010c020b410121010b20002002290338370300200041286a200241386a41286a290300370300200041206a200241386a41206a290300370300200041186a200241386a41186a290300370300200041106a200241386a41106a290300370300200041086a200241386a41086a290300370300200241e8006a41026a220c200241356a41026a2d00003a0000200220022f00353b0168200020053602382000200636023420002007360230200020022f01683b003d2000413f6a200c2d00003a00000b200020013a003c2004450d002003102e0b200241c0026a24000f0b1036000b1038000b990805067f017e037f037e027f230041f0016b220224002002412036020c20022001360208200241106a2001412010ed0202400240200228021022030d00200041003602000c010b200228021421042002200241186a280200360224200220033602202002200241206a10ab010240024020022802000d00024002402002280204220520022802244105762201200120054b1b22014105742206417f4c0d000240024020010d00410121070c010b2006102c2207450d020b2001ad2108024002402005450d00410021090340200241003a00a8012002280224417f6a2101200941016a2109410021060240024002400240024003402001417f460d0120024188016a20066a2002280220220a2d00003a00002002200a41016a3602202002200641016a220a3a00a801200220013602242001417f6a2101200a2106200a4120470d000b200241d0016a41186a220120024188016a41186a290300370300200241d0016a41106a220620024188016a41106a290300370300200241d0016a41086a220b20024188016a41086a29030037030020022002290388013703d001200a41ff01714120490d01200241c8006a41086a200b290300220c370300200241c8006a41106a2006290300220d370300200241c8006a41186a2001290300220e370300200241286a41186a220a200e370300200241286a41106a220b200d370300200241286a41086a220f200c370300200220022903d001220c3703682002200c3703482002200c3703282008422088220ca722012008a7470d04200141016a22062001490d0820014101742210200620062010491b22064104200641044b1b220641ffffff3f7120064621102006410574210620010d0220024100360288010c030b200641ff0171450d00200241003a00a8010b200842ffffff3f83500d082007102e0c080b200241013602900120022007360288012002200c4205863e028c010b200241d0016a2006201020024188016a107d20022802d801210620022802d0014101460d0320022802d40121072006410576ad21080b200720014105746a22062002290328370000200641186a200a290300370000200641106a200b290300370000200641086a200f290300370000200842ffffffff0f83200141016aad42208684210820092005470d000b0b2007450d0320002008370204200020073602000c040b20060d010b1038000b1036000b200241003602d801200242013703d0012002410a3602b4012002200241086a3602b0012002200241d0016a3602682002419c016a41013602002002420137028c01200241909dc500360288012002200241b0016a36029801200241e8006a419cebc00020024188016a103d1a20022802d00120022802d80110ef02024020022802d401450d0020022802d001102e0b200041003602000b2004450d002003102e0b200241f0016a24000bf30a06087f027e027f027e017f017e230041a0016b220324002003200236021420032001360210200341186a2001200210ed0202400240024002400240200328021822010d00200041023a00000c010b200328021c21042003200341206a280200220236024c20032001360248024002402002450d0020012d0000210520032002417f6a220636024c2003200141016a3602480240024002400240024020050e020001050b20064104490d04200341c4006a41026a200341d8006a41026a2d00003a0000200341286a41086a200341f8006a41086a290300370300200341286a41106a200341f8006a41106a290300370300200341286a41186a200341f8006a41186a280200360200200320032f00583b0144200320032903783703282001280001210720032002417b6a36024c2003200141056a360248410021020c010b200341086a200341c8006a10ab0120032802080d03200328024c2202200328020c2205490d032005417f4c0d060240024020050d00410121060c010b200510322206450d08200328024c21020b20022005490d0220062003280248200510e9081a200328024c22022005490d082003200220056b36024c2003200328024820056a360248200341f8006a200341c8006a10930120032d00784101460d012003419e016a20032d007b3a0000200341d8006a41086a200341f8006a41106a290300370300200341d8006a41106a200341f8006a41186a290300370300200341d8006a41186a20034198016a2d00003a0000200320032f00793b019c012003200341f8006a41086a290300370358200328024c22024110490d01200328027c210720032003280248220841106a22093602482003200241706a220a36024c200a4104490d01200841086a290000210b2008290000210c20032002416c6a220836024c2003200941046a3602482008450d012009280000210d20032002416b6a220e36024c2003200941056a3602484100210a0240024020092d00040e020100030b200e4104490d022003200241676a36024c2003200941096a360248200928000521084101210a0b200341c4006a41026a2003419c016a41026a2d00003a0000200341286a41086a200341d8006a41086a290300370300200341286a41106a200341d8006a41106a290300370300200341286a41186a200341d8006a41186a2d00003a0000200341c3006a200341d5006a41026a2d00003a0000200320032f019c013b014420032003290358370328200320032f00553b0041410121020b200341d8006a41026a200341c4006a41026a2d000022093a0000200341f8006a41086a200341286a41086a290300220f370300200341f8006a41106a200341286a41106a2903002210370300200341f8006a41186a200341286a41186a280200220e360200200320032f014422113b0158200320032903282212370378200041036a20093a0000200020113b0001200041046a2007360000200041c8006a200b370000200041c0006a200c370000200041086a2012370000200041106a200f370000200041186a2010370000200041206a200e360000200041386a2008360000200041346a200a360000200041306a200d3600002000412c6a2005360000200041286a2005360000200041246a20063600000c030b2005450d010b2006102e0b20034100360230200342013703282003410a36025c2003200341106a3602582003200341286a36029c012003418c016a41013602002003420137027c200341909dc5003602782003200341d8006a360288012003419c016a419cebc000200341f8006a103d1a2003280228200328023010ef020240200328022c450d002003280228102e0b410221020b200020023a00002004450d002001102e0b200341a0016a24000f0b1038000b1036000b2005200241b8b2c0001056000bbf0302057f017e230041e0006b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022010d00200041003602000c010b200328021421022003200341186a280200360224200320013602202003200341206a10ab0102400240024002402003280200450d00200341003602480c010b200341c8006a200341206a200328020410920120032802482204450d00200328024c210520032802242206410f4b0d01200541ffffff3f71450d002004102e0b20034100360230200342013703282003410a36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341909dc5003602482003200341386a360258200341c4006a419cebc000200341c8006a103d1a2003280228200328023010ef020240200328022c450d002003280228102e0b200041003602000c010b2003200641706a36022420032003280220220641106a360220200341c8006a41086a280200210720062900002108200041186a200641086a290000370300200041106a2008370300200041086a200736020020002005360204200020043602000b2002450d002001102e0b200341e0006a24000bc20201027f23004190056b220324002003200236020420032001360200200341086a2001200210ed0202400240200328020822010d002000411c3602000c010b200328020c21022003200341106a2802003602fc04200320013602f804200341c8026a200341f8046a1098010240024020032802c8022204411c470d0020034100360220200342013703182003410a3602840520032003360280052003200341186a36028c05200341dc026a4101360200200342013702cc02200341909dc5003602c802200320034180056a3602d8022003418c056a419cebc000200341c8026a103d1a2003280218200328022010ef02200328021c450d012003280218102e0c010b200341186a200341c8026a41047241ac0210e9081a200041046a200341186a41ac0210e9081a0b200020043602002002450d002001102e0b20034190056a24000bf90202037f027e230041d0006b220224002002412036020420022001360200200241086a2001412010ed0202400240200228020822010d00200041033a00100c010b200228020c21030240024002400240200241086a41086a28020022044108490d0020044178714108460d0020044110460d00200129000021052001290008210641002104024020012d00100e03030200010b410221040c020b20024100360220200242013703182002410a36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241909dc5003602382002200241286a360248200241346a419cebc000200241386a103d1a2002280218200228022010ef020240200228021c450d002002280218102e0b410321040c020b410121040b2002200228003836021820022002413b6a28000036001b200020063703082000200537030020002002280218360011200041146a200228001b3600000b200020043a00102003450d002001102e0b200241d0006a24000b901308057f017e057f027e017f017e037f047e23004180026b220324002003200236020c20032001360208200341106a2001200210ed020240024002400240200328021022020d00200041023a00000c010b200328021421042003200341186a280200220536025420032002360250024002402005450d0020022d0000210120032005417f6a22063602542003200241016a3602500240024002400240024020010e020001050b2003200341d0006a10ab0120032802000d0420032802042207200328025441306e2201200120074b1bad42307e2208422088a70d082008a72201417f4c0d080240024020010d00410821090c010b2001102c2209450d080b200141306e210a0240024020070d00410021070c010b200341d8016a41017221064100210b41002105034002400240200328025422014104490d002003280250220c350000210820032001417c6a3602542003200c41046a360250200341d8016a200341d0006a10b10420032d00d801220c4102470d010b20034188016a411f6a200341b0016a411f6a29000037000020034188016a41186a200341b0016a41186a290300370300200a450d07200a41306c0d060c070b200341b0016a411f6a22012006411f6a290000370000200341b0016a41186a220d200641186a29000037030020034188016a41086a200641086a290000220e37030020034188016a41106a200641106a290000220f37030020034188016a41186a2210200d29030037030020034188016a411f6a220d200129000037000020032006290000221137038801200341e0006a411f6a2212200d290000370000200341e0006a41186a220d2010290300370300200341e0006a41106a2210200f370300200341e0006a41086a2213200e3703002003201137036002402005200a470d00200a41016a2201200a490d0b200a41017422142001201420014b1b22014104200141044b1bad42307e220e422088a7454103742101200ea7211402400240200a0d00200341003602d8010c010b200341083602e001200320093602d8012003200a41306c3602dc010b200341b0016a20142001200341d8016a107d20032802b8012101024020032802b0014101470d0020010d0b0c0c0b20032802b4012109200141306e210a0b2009200b6a22012008370300200141086a200c3a0000200141096a2003290360370000200141116a2013290300370000200141196a2010290300370000200141216a200d290300370000200141286a2012290000370000200b41306a210b2007200541016a2205470d000b0b2009450d04200328025422014110490d0220032003280250220641106a3602502003200141706a220b360254200b4110490d02200641086a290000210f200629000021112003200641206a220b3602502003200141606a220536025420054104490d02200641186a29000021082006290010210e2003200b41046a36025020032001415c6a220636025420064110490d02200b2800002106200341386a200b410c6a290000370300200341cc006a41026a200341dc006a41026a2d00003a00002003200e370320200320032f005c3b014c200320063602402003200b2900043703302003200837032820032001414c6a3602542003200b41146a360250410021010c010b20064110490d0320032005416f6a220a3602542003200241116a360250200241096a29000021082002290001210e41002101200341003a00f801416e2106024002400240024002400240024002400340200a2001460d01200341d8016a20016a200220016a220b41116a2d00003a00002003200520066a3602542003200b41126a3602502003200141016a220b3a00f8012006417f6a2106200b2101200b4120470d000b20034188016a41026a220120032d00da013a0000200320032f01d8013b018801200b41ff01714120490d0b200341ef016a290000210f20032900e701211120032d00f701210c20032800e301210720032800df01210a20032800db012109200341dc006a41026a20012d00003a0000200320032f0188013b015c2005416f6a200b460d0b2002200b6a220141116a2d0000210d2003200520066a22063602542003200141126a36025041002110200d0e07070102030405060b0b200141ff0171450d0a200341003a00f8010c0a0b410121100c050b410221100c040b410321100c030b410421100c020b410521100c010b410621100b20064110490d032003200141226a220d36025020032005200b6b220b415e6a220636025420064110490d032001411a6a2900002115200141126a29000021162003200141326a22053602502003200b414e6a220636025420064104490d032001412a6a2900002117200d2900002118200528000021062003200141366a220d3602502003200b414a6a220536025420054110490d03200341cc006a41026a200341dc006a41026a2d00003a0000200341c0006a2015370300200341206a41106a2008370300200320032f015c3b014c2003200b41ba7f6a3602542003200141c6006a360250200320163703382003200e370328200320103a00212003200c3a0020200320032801b0013601222003200341b4016a2f01003b01262001413e6a290000210e200d2900002108410121010b200341b0016a41026a200341cc006a41026a2d0000220b3a0000200341d8016a41086a2205200341206a41086a290300370300200341d8016a41106a220c200341206a41106a290300370300200341d8016a41186a220d200341206a41186a290300370300200341d8016a41206a2210200341206a41206a290300370300200320032f014c22123b01b001200320032903203703d801200041186a200f370000200041106a2011370000200041036a200b3a0000200020123b00012000410c6a2007360000200041086a200a360000200041046a2009360000200041e8006a2006360000200041e0006a200e370000200041d8006a2008370000200041d0006a2017370000200041c8006a2018370000200041206a20032903d801370000200041286a2005290300370000200041306a200c290300370000200041386a200d290300370000200041c0006a20102903003700000c030b200a450d01200a41306c450d010b2009102e0b20034100360228200342013703202003410a3602b4012003200341086a3602b0012003200341206a36028801200341ec016a4101360200200342013702dc01200341909dc5003602d8012003200341b0016a3602e80120034188016a419cebc000200341d8016a103d1a2003280220200328022810ef0202402003280224450d002003280220102e0b410221010b200020013a00002004450d002002102e0b20034180026a24000f0b1036000b1038000b8a0b02027f067e230041d0016b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022010d00200041023a00300c010b200341186a280200210220032802142104200341003a008801024002402002450d00200320012d00003a0068200341013a008801024020024101460d00200320012d00013a0069200341023a00880120024102460d00200320012d00023a006a200341033a00880120024103460d00200320012d00033a006b200341043a00880120024104460d00200320012d00043a006c200341053a00880120024105460d00200320012d00053a006d200341063a00880120024106460d00200320012d00063a006e200341073a00880120024107460d00200320012d00073a006f200341083a00880120024108460d00200320012d00083a0070200341093a00880120024109460d00200320012d00093a00712003410a3a0088012002410a460d00200320012d000a3a00722003410b3a0088012002410b460d00200320012d000b3a00732003410c3a0088012002410c460d00200320012d000c3a00742003410d3a0088012002410d460d00200320012d000d3a00752003410e3a0088012002410e460d00200320012d000e3a00762003410f3a0088012002410f460d00200320012d000f3a0077200341103a00880120024110460d00200320012d00103a0078200341113a00880120024111460d00200320012d00113a0079200341123a00880120024112460d00200320012d00123a007a200341133a00880120024113460d00200320012d00133a007b200341143a00880120024114460d00200320012d00143a007c200341153a00880120024115460d00200320012d00153a007d200341163a00880120024116460d00200320012d00163a007e200341173a00880120024117460d00200320012d00173a007f200341183a00880120024118460d00200320012d00183a008001200341193a00880120024119460d00200320012d00193a0081012003411a3a0088012002411a460d00200320012d001a3a0082012003411b3a0088012002411b460d00200320012d001b3a0083012003411c3a0088012002411c460d00200320012d001c3a0084012003411d3a0088012002411d460d00200320012d001d3a0085012003411e3a0088012002411e460d00200320012d001e3a0086012003411f3a0088012002411f460d00200341c8006a41106a200341e8006a41106a290300370300200341c8006a41086a200341e8006a41086a290300370300200320012d001f3a008701200341c8006a41186a200341e8006a41186a290300370300200341203a0088012003200329036822053703900120032005370348200241606a22024110490d0120024110460d01200141286a290000210520012900202106410021020240024020012d00300e020100030b410121020b200341206a41186a200341c8006a41186a2903002207370300200341206a41106a200341c8006a41106a2903002208370300200341206a41086a200341c8006a41086a290300220937030020032003290348220a370320200320032800413602682003200341c4006a28000036006b20002005370308200020063703002000200a370310200041186a2009370300200041206a2008370300200041286a2007370300200041346a200328006b360000200020032802683600310c020b200341003a0088010b200341003602980120034201370390012003410a36024c2003200341086a360248200320034190016a360220200341fc006a41013602002003420137026c200341909dc5003602682003200341c8006a360278200341206a419cebc000200341e8006a103d1a20032802900120032802980110ef020240200328029401450d00200328029001102e0b410221020b200020023a00302004450d002001102e0b200341d0016a24000bf80403047f017e067f230041f0006b220324002003200236021c20032001360218200341206a2001200210ed0202400240200328022022010d00200041003602080c010b200328022421042003200341286a2802002202360234200320013602300240024020024104490d00200128000021052003200141046a36023020032002417c6a220636023420064104490d00200128000421062003200241786a3602342003200141086a360230200341106a200341306a10ab0102402003280210450d00200341003602580c010b200341d8006a200341306a200328021410920120032802582202450d00200329025c2107200341086a200341306a10ab01024002402003280208450d00200341003602580c010b200341d8006a200341306a200328020c10920120032802582208450d00200328025c210902402003280234220a4104490d00200341e0006a280200210b2003280230220c280000210d2003200a417c6a3602342003200c41046a3602302002450d022000200737020c200020023602082000200636020420002005360200200041206a200d3602002000411c6a200b360200200041186a2009360200200041146a20083602000c030b200941ffffff3f71450d002008102e0b200742ffffff3f83500d002002102e0b20034100360240200342013703382003410a36024c2003200341186a3602482003200341386a360254200341ec006a41013602002003420137025c200341909dc5003602582003200341c8006a360268200341d4006a419cebc000200341d8006a103d1a2003280238200328024010ef020240200328023c450d002003280238102e0b200041003602080b2004450d002001102e0b200341f0006a24000ba40c03057f027e0c7f230041f0016b220324002003200236020420032001360200200341086a2001200210ed0202400240200328020822040d00200041023602100c010b200328020c21052003200341106a280200220636025c2003200436025841002101200341003a00a8012006417f6a21020240024002400240024002400240034020062001460d0120034188016a20016a200420016a22072d00003a00002003200741016a3602582003200141016a22073a00a8012003200236025c2002417f6a21022007210120074120470d000b200341d0016a41186a220120034188016a41186a290300370300200341d0016a41106a220220034188016a41106a290300370300200341d0016a41086a220620034188016a41086a29030037030020032003290388013703d001200741ff01714120490d03200341e8006a41086a2006290300370300200341e8006a41106a2002290300370300200341e8006a41186a2001290300370300200320032903d00137036820034188016a200341d8006a10930120032d0088014101460d03200341b0016a41186a200341a1016a2201290000370300200341b0016a41106a20034199016a2202290000370300200341b0016a41086a20034191016a220729000037030020032003290089013703b00120034188016a200341d8006a10930120032d0088014101460d03200341d0016a41186a2001290000370300200341d0016a41106a2002290000370300200341d0016a41086a200729000037030020032003290089013703d001200328025c22024110490d032003200241706a220636025c20032003280258220141106a22073602582006450d03200141086a29000021082001290000210920032002416f6a220636025c2003200741016a3602584100210120072d00000e020201030b200141ff0171450d02200341003a00a8010c020b20064104490d0120032002416b6a36025c2003200741056a3602582007280001210a410121010b20034188016a200341d8006a10e9012003280288012207450d00200328028c0121020240200328025c2206450d0020034190016a280200210b2003280258220c2d0000210d20032006417f6a36025c2003200c41016a36025841002106200d0e020302000b2002450d00200241306c450d002007102e0b200341003602d801200342013703d0012003410a3602b401200320033602b0012003200341d0016a3602682003419c016a41013602002003420137028c01200341909dc500360288012003200341b0016a36029801200341e8006a419cebc00020034188016a103d1a20032802d00120032802d80110ef02024020032802d401450d0020032802d001102e0b410221010c020b410121060b20034188016a41186a220c200341e8006a41186a29030037030020034188016a41106a220d200341e8006a41106a29030037030020034188016a41086a220e200341e8006a41086a290300370300200341386a41086a220f200341b0016a41086a290300370300200341386a41106a2210200341b0016a41106a290300370300200341386a41186a2211200341b0016a41186a290300370300200341186a41086a2212200341d0016a41086a290300370300200341186a41106a2213200341d0016a41106a290300370300200341186a41186a2214200341d0016a41186a2903003703002003200329036837038801200320032903b001370338200320032903d001370318200341146a41026a2215200341e5006a41026a2d00003a0000200320032f00653b01142000200837030820002009370300200041206a200b3602002000411c6a2002360200200041186a20073602002000200a360214200041246a2003290388013702002000412c6a200e290300370200200041346a200d2903003702002000413c6a200c290300370200200041c4006a2003290338370200200041cc006a200f290300370200200041d4006a2010290300370200200041dc006a2011290300370200200041fc006a2014290300370200200041f4006a2013290300370200200041ec006a2012290300370200200041e4006a200329031837020020004184016a20063a000020004187016a20152d00003a0000200020032f01143b0085010b200020013602102005450d002004102e0b200341f0016a24000bfc0d05037f017e097f027e057f230041c0016b22022400200241086a200110ab0102400240024020022802080d00200228020c2203200128020441246e2204200420034b1bad42247e2205422088a70d022005a72204417f4c0d0202400240024020040d00410421060c010b2004102c2206450d010b200441246ead2105024002402003450d002002413d6a21072002418b016a220841056a21094100210a03400240024002402001280204220b450d002001280200220c2d000021042001200b417f6a220d3602042001200c41016a3602000240024002400240024002400240024002400240024020040e08000b010b030402050b0b2002200110ab0120022802000d0a2001280204220b20022802042204490d0a2004417f4c0d130240024020040d004101210e0c010b20041032220e450d112001280204210b0b200b2004490d06200e2001280200200410e908210b2001280204220c20044f0d052004200c41b8b2c0001056000b41002104200241003a009801200b417e6a210b02400340200d2004460d01200241f8006a20046a200c20046a220e41016a2d00003a00002001200b3602042001200e41026a3602002002200441016a220e3a009801200b417f6a210b200e2104200e4120460d090c000b0b200441ff0171450d09200241003a0098010c090b200241f8006a200110aa01200228027c220c450d0820022f017820022d007a41107472210b20022d007b210e200229038001220f428080808070832110200fa7210d410121110c070b200241f8006a200110aa01200228027c220c450d0720022f017820022d007a41107472210b20022d007b210e200229038001220f428080808070832110200fa7210d410221110c060b200241f8006a200110aa01200228027c220c450d0620022f017820022d007a41107472210b20022d007b210e200229038001220f428080808070832110200fa7210d410321110c050b200d450d05200c2d000121042001200b417e6a3602042001200c41026a36020020040d05200241b0016a200110fe0520022802b001220e4102460d05200241306a41086a200241f8006a41086a2902003703002002200229027837033020022802b801210d20022802b401210c4104211142002110410021120c020b2001200c20046b3602042001200128020020046a360200200b450d04200241306a41086a200241f8006a41086a29020037030020022002290278370330200b41087621122004ad220f422086200f84220f422088a7210d200fa7210c41052111420021100c010b200e102e0c030b0c010b200220082900003703b001200220092900003700b501200220022903b0013703a001200220022900b5013700a501200e41ff0171411f4d0d0120022f017820022d007a41107472210b200228007b210e200228007f210c200229008301210f200220022900a50137006d200220022903a0013703682002200229006d37005d20022002290368370358200220022903583703482002200229005d37004d2002200229004d37003520022002290348370330200720022f00453b0000200741026a200241c5006a41026a2d00003a0000200f428080808070832110200e4108762112200fa7210d410021110b200241206a41086a200241306a41086a290300220f370300200241106a41086a2213200f37030020022002290330220f3703202002200f3703102005422088220fa722042005a7470d02200441016a221420044f0d010c090b02402005422088a72201450d00200141246c21042006210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012004415c6a22040d000b0b2005a72201450d06200141246c450d062006102e0c060b20044101742215201420142015491b22144104201441044b1bad42247e220f422088a7454102742114200fa721150240024020040d00200241003602780c010b2002410436028001200220063602782002200441246c36027c0b200241306a20152014200241f8006a107d2002280238211420022802304101460d03200228023421062005422088220fa72104201441246ead21050b2006200441246c6a22042010200dad8437000c2004200c36000820042012410874200e41ff0171723600042004200b3b0001200420113a0000200441036a200b4110763a0000200420022903103700142004411c6a2013290300370000200f422086200542ffffffff0f83844280808080107c2105200a41016a220a2003470d000b0b2006450d0220002005370204200020063602000c030b2014450d030b1036000b200041003602000b200241c0016a24000f0b1038000bd00905057f017e047f017e017f230041f0016b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022040d00200041003602000c010b200328021421052003200341186a280200360224200320043602202003200341206a10ab010240024020032802000d00024002402003280204220620032802244105762201200120064b1b22014105742202417f4c0d000240024020010d00410121070c010b2002102c2207450d020b2001ad2108024002402006450d00410021090340200341003a00a8012003280224417f6a2101200941016a2109410021020240024002400240024003402001417f460d0120034188016a20026a2003280220220a2d00003a00002003200a41016a3602202003200241016a220a3a00a801200320013602242001417f6a2101200a2102200a4120470d000b200341b0016a41086a220220034188016a41086a290300370300200341b0016a41106a220b20034188016a41106a290300370300200341b0016a41186a220c20034188016a41186a29030037030020032003290388013703b001410121010240200a41ff01714120490d00200341e8006a41186a200c290300370300200341e8006a41106a200b290300370300200341e8006a41086a2002290300370300200320032903b001370368410021010b200341c8006a41086a2202200341e8006a41086a290300370300200341c8006a41106a220a200341e8006a41106a290300370300200341c8006a41186a220b200341e8006a41186a2903003703002003200329036837034820010d01200341286a41186a220c200b290300370300200341286a41106a220b200a290300370300200341286a41086a220a2002290300370300200320032903483703282008422088220da722012008a7470d04200141016a22022001490d082001410174220e20022002200e491b22024104200241044b1b220241ffffff3f71200246210e2002410574210220010d0220034100360288010c030b0240200241ff0171450d00200341003a00a8010b200341c8006a41086a200341e8006a41086a290300370300200341c8006a41106a200341e8006a41106a290300370300200341c8006a41186a200341e8006a41186a290300370300200320032903683703480b200842ffffff3f83500d082007102e0c080b200341013602900120032007360288012003200d4205863e028c010b200341b0016a2002200e20034188016a107d20032802b801210220032802b0014101460d0320032802b40121072002410576ad21080b200720014105746a22022003290328370000200241186a200c290300370000200241106a200b290300370000200241086a200a290300370000200842ffffffff0f83200141016aad42208684210820092006470d000b0b2007450d0320002008370204200020073602000c040b20020d010b1038000b1036000b200341003602b801200342013703b0012003410a36026c2003200341086a3602682003200341b0016a3602482003419c016a41013602002003420137028c01200341909dc500360288012003200341e8006a36029801200341c8006a419cebc00020034188016a103d1a20032802b00120032802b80110ef02024020032802b401450d0020032802b001102e0b200041003602000b2005450d002004102e0b200341f0016a24000bf40201037f230041e0006b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022010d00200041003602040c010b200328021421042003200341186a2802002202360224200320013602200240024020024104490d002001280000210520032002417c6a3602242003200141046a3602202003200341206a10ab0102402003280200450d00200341003602480c010b200341c8006a200341206a200328020410920120032802482202450d002000200329024c37020820002002360204200020053602000c010b20034100360230200342013703282003410a36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341909dc5003602482003200341386a360258200341c4006a419cebc000200341c8006a103d1a2003280228200328023010ef020240200328022c450d002003280228102e0b200041003602040b2004450d002001102e0b200341e0006a24000bf90604027f027e077f017e230041b0016b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022010d00200042003703000c010b200328021421022003200341106a41086a2802003602442003200136024020034188016a200341c0006a10930102400240024020032d0088014101460d00200341e0006a200341a1016a290000370300200341c8006a41106a20034199016a290000370300200341c8006a41086a20034191016a2900003703002003200329008901370348200328024422044110490d002003200441706a36024420032003280240220441106a360240200441086a29000021052004290000210620034188016a200341c0006a10930120032d0088014101460d00200341e8006a41186a2204200341a1016a290000370300200341e8006a41106a220720034199016a290000370300200341e8006a41086a20034191016a29000037030020032003290089013703682003280244220841104f0d010b20034100360270200342013703682003410a36024c2003200341086a3602482003200341e8006a3602202003419c016a41013602002003420137028c01200341909dc500360288012003200341c8006a36029801200341206a419cebc00020034188016a103d1a2003280268200328027010ef020240200328026c450d002003280268102e0b420021050c010b20034188016a41086a2209200341c8006a41086a29030037030020034188016a41106a220a200341c8006a41106a29030037030020034188016a41186a220b200341c8006a41186a290300370300200341206a41086a220c200341e8006a41086a290300370300200341206a41106a220d2007290300370300200341206a41186a220720042903003703002003200329034837038801200320032903683703202003200841706a36024420032003280240220441106a3602402004290000210e200041206a200441086a290000370300200041186a200e370300200041106a200537030020002006370308200041286a200329038801370300200041306a2009290300370300200041386a200a290300370300200041c0006a200b290300370300200041c8006a2003290320370300200041d0006a200c290300370300200041d8006a200d290300370300200041e0006a2007290300370300420121050b200020053703002002450d002001102e0b200341b0016a24000bd10102037f017e230041206b22032400200341003602082003420137030020022802202104200241286a28020022052003107602402005450d002005410574210503402003200441201074200441206a2104200541606a22050d000b0b200229030021062003200241086a290300370318200320063703102003200341106a41101074200229031021062003200241186a290300370318200320063703102003200341106a411010742000200120032802002204200328020810b20102402003280204450d002004102e0b200341206a24000bb70102027f017e230041206b2203240002404124102c2204450d002003422437020420032004360200200229030021052003200241086a290300370318200320053703102003200341106a41101074200229031021052003200241186a290300370318200320053703102003200341106a41101074200320022802203602102003200341106a410410742000200120032802002202200328020810b20102402003280204450d002002102e0b200341206a24000f0b1036000b9e0303027f017e017f230041206b22032400200341003602082003420137030002404120102c2204450d002003422037021420032004360210200341106a200241246a412010742003200328021022042003280218107402402003280214450d002004102e0b2003200241c4006a412010742003200241e4006a41201074200229030021052003200241086a290300370318200320053703102003200341106a411010740240024020022802104101460d00200341003a00102003200341106a410110740c010b200341013a00102003200341106a410110742003200241146a2802003602102003200341106a410410740b20022802182104200241206a2802002206200310760240200641306c2206450d00200420066a210603402003200441201074200441206a29030021052003200441286a290300370318200320053703102003200341106a41101074200441306a22042006470d000b0b200320022d0084013a00102003200341106a410110742000200120032802002204200328020810b20102402003280204450d002004102e0b200341206a24000f0b1036000b9b0302027f017e230041106b2202240002400240024020002d00004101460d00200241003a000020012002410110742002200041386a28020036020020012002410410744120102c2203450d0220024220370204200220033602002002200041c0006a412010742001200228020022032002280208107402402002280204450d002003102e0b0240024002400240200041e0006a2d00000e03000102030b200241003a000020012002410110740c020b200241013a000020012002410110740c010b200241023a000020012002410110740b20022000413c6a2802003602002001200241041074200029030821042002200041106a290300370308200220043703002001200241101074200041186a29030021042002200041206a290300370308200220043703002001200241101074200041286a29030021042002200041306a2903003703082002200437030020012002411010740c010b200241013a00002001200241011074200220002d00013a000020012002410110742002200041046a28020036020020012002410410740b200241106a24000f0b1036000bd80102047f017e230041206b22022400024002402001280208220341306c4104722204417f4c0d00200128020021012004102c2205450d012002410036020820022004360204200220053602002003200210760240200341306c2203450d00200120036a210303402002200141201074200141206a29030021062002200141286a290300370318200220063703102002200241106a41101074200141306a22012003470d000b0b2000412020022802002201200228020810b20102402002280204450d002001102e0b200241206a24000f0b1038000b1036000b810201037f230041106b2203240020034100360208200342013703002003200228020036020c20032003410c6a410410742003200228020436020c20032003410c6a4104107420022802082104200241106a28020022052003107602402005450d002005410574210503402003200441201074200441206a2104200541606a22050d000b0b200228021421042002411c6a28020022052003107602402005450d002005410574210503402003200441201074200441206a2104200541606a22050d000b0b2003200228022036020c20032003410c6a410410742000200120032802002204200328020810b20102402003280204450d002004102e0b200341106a24000bc90101047f230041106b22032400024002402002410c6a28020022044105742205410472417b4c0d0020054108722205102c2206450d012003410036020820032005360204200320063602002003200228020036020c20032003410c6a410410742002280204210220042003107602402004450d002004410574210403402003200241201074200241206a2102200441606a22040d000b0b2000200120032802002202200328020810b20102402003280204450d002002102e0b200341106a24000f0b1038000b1036000b810201037f230041106b2203240020034100360208200342013703002003200228020036020c20032003410c6a410410742003200228020436020c20032003410c6a4104107420022802082104200241106a28020022052003107602402005450d002005410574210503402003200441201074200441206a2104200541606a22050d000b0b200228021421042002411c6a28020022052003107602402005450d002005410574210503402003200441201074200441206a2104200541606a22050d000b0b2003200228022036020c20032003410c6a410410742000200120032802002204200328020810b20102402003280204450d002004102e0b200341106a24000bac0101047f230041106b2202240002400240200128020822034105744104722204417f4c0d00200128020021012004102c2205450d0120024100360208200220043602042002200536020020032002107602402003450d002003410574210303402002200141201074200141206a2101200341606a22030d000b0b2000412020022802002201200228020810b20102402002280204450d002001102e0b200241106a24000f0b1038000b1036000bc90101017f230041206b22042400200441003602102004420137030820042001370318200441086a200441186a4108107420042002370318200441086a200441186a410810740240024002400240200341ff01710e03000102030b200441003a0018200441086a200441186a410110740c020b200441013a0018200441086a200441186a410110740c010b200441023a0018200441086a200441186a410110740b2000412020042802082203200428021010b2010240200428020c450d002003102e0b200441206a24000b970101047f230041106b22032400024002402002280208220441046a2205417f4c0d00200228020021020240024020050d00410121060c010b2005102c2206450d020b20034100360208200320053602042003200636020020042003107620032002200410742000200120032802002205200328020810b20102402003280204450d002005102e0b200341106a24000f0b1038000b1036000b9c0101047f230041106b22022400024002402001280208220341c4006c41046a2204417f4c0d00200128020021010240024020040d00410121050c010b2004102c2205450d020b200241003602082002200436020420022005360200200320021076200120032002109b012000412020022802002204200228020810b20102402002280204450d002004102e0b200241106a24000f0b1038000b1036000ba00101037f230041106b220324000240024020024105744104722204417f4c0d002004102c2205450d0120034100360208200320043602042003200536020020022003107602402002450d002002410574210203402003200141201074200141206a2101200241606a22020d000b0b2000412020032802002201200328020810b20102402003280204450d002001102e0b200341106a24000f0b1038000b1036000b9c0102027f017e230041206b2203240002404111102c2204450d0020034211370204200320043602002003200241106a41201074200229030021052003200241086a290300370318200320053703102003200341106a41101074200320022d00303a00102003200341106a410110742000200120032802002202200328020810b20102402003280204450d002002102e0b200341206a24000f0b1036000b9c0101057f230041106b220224000240024020012802082203410274220441046a2205417f4c0d00200128020021010240024020050d00410121060c010b2005102c2206450d020b20024100360208200220053602042002200636020020032002107620022001200410742000412020022802002205200228020810b20102402002280204450d002005102e0b200241106a24000f0b1038000b1036000bb20202017f017e230041206b220324002003410036020820034201370300200320022802403602102003200341106a41041074200320022802443602102003200341106a41041074200320022802483602102003200341106a410410742003200228024c3602102003200341106a41041074200229030021042003200241086a290300370318200320043703102003200341106a41101074200229031021042003200241186a290300370318200320043703102003200341106a41101074200229032021042003200241286a290300370318200320043703102003200341106a41101074200229033021042003200241386a290300370318200320043703102003200341106a411010742000200120032802002202200328020810b20102402003280204450d002002102e0b200341206a24000bb20202017f017e230041206b220324002003410036020820034201370300200320022802403602102003200341106a41041074200320022802443602102003200341106a41041074200320022802483602102003200341106a410410742003200228024c3602102003200341106a41041074200229030021042003200241086a290300370318200320043703102003200341106a41101074200229031021042003200241186a290300370318200320043703102003200341106a41101074200229032021042003200241286a290300370318200320043703102003200341106a41101074200229033021042003200241386a290300370318200320043703102003200341106a411010742000200120032802002202200328020810b20102402003280204450d002002102e0b200341206a24000bdd0101027f230041206b22022400200241003602082002420137030002404120102c2203450d002002422037021420022003360210200241106a2001412010742002200228021022032002280218107402402002280214450d002003102e0b024002400240024020012d00200e03000102030b200241003a00102002200241106a410110740c020b200241013a00102002200241106a410110740c010b200241023a00102002200241106a410110740b2000412020022802002201200228020810b20102402002280204450d002001102e0b200241206a24000f0b1036000bae0301037f230041f0006b22032400200341086a4192fdc6004107108102200341186a4190a0c5004113108102200320013602382003200341386a410410a301370348200341ec006a2201200341386a41046a3602002003200341c8006a41086a3602642003200341386a3602682003200341c8006a360260200341286a200341e0006a107c024002404120102c2204450d002003422037024c20032004360248200341c8006a2002412010742003200328024822022003280250220410a3013703582001200220046a360200200320023602682003200341d8006a41086a3602642003200341d8006a360260200341386a200341e0006a107c0240200328024c450d002002102e0b20032802302201200328024022046a41206a2202417f4c0d010240024020020d00410121050c010b2002102c2205450d010b2000410036020820002002360204200020053602002000200341086a411010742000200341186a4110107420002003280228220220011074200020032802382201200410740240200328023c450d002001102e0b0240200328022c450d002002102e0b200341f0006a24000f0b1036000b1038000bae0301037f230041f0006b22032400200341086a4192fdc6004107108102200341186a41fd9fc5004113108102200320013602382003200341386a410410a301370348200341ec006a2201200341386a41046a3602002003200341c8006a41086a3602642003200341386a3602682003200341c8006a360260200341286a200341e0006a107c024002404120102c2204450d002003422037024c20032004360248200341c8006a2002412010742003200328024822022003280250220410a3013703582001200220046a360200200320023602682003200341d8006a41086a3602642003200341d8006a360260200341386a200341e0006a107c0240200328024c450d002002102e0b20032802302201200328024022046a41206a2202417f4c0d010240024020020d00410121050c010b2002102c2205450d010b2000410036020820002002360204200020053602002000200341086a411010742000200341186a4110107420002003280228220220011074200020032802382201200410740240200328023c450d002001102e0b0240200328022c450d002002102e0b200341f0006a24000f0b1036000b1038000bca0201037f230041e0006b22022400200241086a4192fdc6004107108102200241186a41a3a0c5004109108102024002404104102c2203450d002002420437023c20022003360238200241386a20014120107420022001280220360250200241386a200241d0006a410410742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241d0006a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000bdd0302077f017e230041f0006b22022400200241086a200110cf052002280208210120022002280210220336021c20022001360218200241206a2001200310ed0202400240200228022022030d00410021040c010b200228022421052002200241286a2802002204360234200220033602300240024020044104490d00200328000021062002200341046a36023020022004417c6a220736023420074104490d002002200341086a360230200328000421072002200441786a220836023420084104490d002002200441746a36023420022003410c6a36023020032800082108200241d8006a200241306a10e70120022802582204450d00200229025c21090c010b4100210420024100360240200242013703382002410a36024c2002200241186a3602482002200241386a360254200241ec006a41013602002002420137025c200241909dc5003602582002200241c8006a360268200241d4006a419cebc000200241d8006a103d1a2002280238200228024010ef020240200228023c450d002002280238102e0b0b02402005450d002003102e0b024020040d00410021040c010b200020093702102000200836020820002007360204200020063602000b2000200436020c0240200228020c450d002001102e0b200241f0006a24000bb10201037f230041e0006b22022400200241086a4192fdc6004107108102200241186a41aca0c500410d108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241d0006a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000bd60101037f230041206b220224002002200010cf05200228020821032002280200210020024100360218200242013703102002200128020036021c200241106a2002411c6a410410742002200128020436021c200241106a2002411c6a410410742002200128020836021c200241106a2002411c6a41041074200128020c2104200141146a2802002201200241106a1076200241106a2004200141027410742000200320022802102201200228021810b20102402002280214450d002001102e0b02402002280204450d002000102e0b200241206a24000bb10201037f230041e0006b22022400200241086a4192fdc6004107108102200241186a41dfa2c500410a108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241d0006a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000ba30201047f230041206b220224002002200010d30520022802082103200228020021042002410036021820024201370310200241106a200141386a412010742002200136021c2002411c6a200241106a10af012002200141106a36021c2002411c6a200241106a10af0120012802202100200141286a2802002205200241106a10760240200541186c2205450d00200020056a210503402002200036021c2002411c6a200241106a10af01200041106a200241106a109102200041186a22002005470d000b0b200128022c2100200141346a2802002205200241106a1076200241106a2000200541027410742004200320022802102200200228021810b20102402002280214450d002000102e0b02402002280204450d002004102e0b200241206a24000bac0201037f230041e0006b2202240020024192fdc6004107108102200241106a41e9a2c5004106108102024002404120102c2203450d002002422037023420022003360230200241306a200141201074200241c0006a200228023022012002280238220310d803200241dc006a200120036a360200200220013602582002200241d0006a3602542002200241c0006a360250200241206a200241d0006a107c02402002280234450d002001102e0b2002280228220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b20004100360208200020013602042000200436020020002002411010742000200241106a411010742000200228022022012003107402402002280224450d002001102e0b200241e0006a24000f0b1036000b1038000b130020004117360204200041f0a2c5003602000b340020004192fdc60036020420004100360200200041146a411e360200200041106a419095c600360200200041086a42073702000b3401017f230041106b220224002000410036020820004201370200200241053a000f20002002410f6a41011074200241106a24000b4e01017f230041106b2202240020004100360208200042013702002002420037030820024200370300200020024110107420024200370308200242003703002000200241101074200241106a24000b2f01017f02404104102c22020d001036000b2000420437020420002002360200410020001076410841002000109d010b4601027f230041106b2202240002404110102c22030d001036000b200042103702042000200336020020024200370308200242003703002000200241101074200241106a24000b5901027f230041206b220224002000410036020820004201370200200241106a4200370300200241003602082002410036021c20002002411c6a41041074200241086a4104722203200010f201200310bc02200241206a24000b4901017f230041106b220224002000410036020820004201370200200241003a00042002410036020020022000109102200241003a000f20002002410f6a41011074200241106a24000bf20101037f230041c0006b220224002000410036020820004201370200200241206a4200370300200241086a41106a22034200370300200241106a4200370300200241306a2204410036020020024200370308200242083703282002200241086a36023c2002413c6a200010af012002200336023c2002413c6a200010af0120022802282103200428020022042000107602402004450d00200441306c210403402000200341106a412010742002200336023c2002413c6a200010af01200341306a2103200441506a22040d000b0b0240200228022c2203450d00200341306c450d002002280228102e0b200241c0006a24000b2601017f02404104102c22020d001036000b20004204370204200020023602004100200010760b4301027f230041106b2202240002404104102c22030d001036000b2000420437020420002003360200200241d40036020c20002002410c6a41041074200241106a24000b130020004105360204200041c4d5c6003602000b4201027f230041106b2202240002404104102c22030d001036000b20004204370204200020033602002002411036020c20002002410c6a41041074200241106a24000b4301027f230041106b2202240002404104102c22030d001036000b2000420437020420002003360200200241800236020c20002002410c6a41041074200241106a24000b4201027f230041106b2202240002404104102c22030d001036000b20004204370204200020033602002002411b36020c20002002410c6a41041074200241106a24000b4201027f230041106b2202240002404104102c22030d001036000b20004204370204200020033602002002411c36020c20002002410c6a41041074200241106a24000b4201027f230041106b2202240002404104102c22030d001036000b20004204370204200020033602002002410636020c20002002410c6a41041074200241106a24000bb10201037f230041e0006b22022400200241086a4192fdc6004107108102200241186a41c4abc6004106108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241d0006a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000bd30908017f047e027f017e027f027e047f017e230041e0016b220324002003200236025c20032001360258200341e0006a2001200210ed02024002400240200328026022010d00200041003602200c010b200328026421022003200341e0006a41086a280200360284012003200136028001200341a8016a20034180016a10930102400240024020032d00a8014101460d00200341a0016a200341c1016a29000037030020034188016a41106a200341b9016a29000037030020034188016a41086a200341b1016a290000370300200320032900a90137038801200341c0006a20034180016a10db042003290340a70d00200341c0006a41106a290300210420032903482105200341286a20034180016a10db042003290328a70d00200341286a41106a290300210620032903302107200341206a20034180016a10ab0120032802200d000240024002402003280224220820032802840141186e2209200920084b1bad42187e220a422088a70d00200aa72209417f4c0d000240024020090d004108210b0c010b2009102c220b450d080b200941186ead210a024002402008450d00200341186a210c0340200341086a20034180016a10db042003290308a70d04200c290300210d2003290310210e200320034180016a10ab0120032802000d042003280204210f0240200a422088a72210200aa72209470d00200941016a22112009490d04200941017422122011201220114b1b22114104201141044b1bad42187e2213422088a74541037421112013a721120240024020090d00200341003602a8010c010b200341083602b0012003200b3602a8012003200941186c3602ac010b200341d0016a20122011200341a8016a107d20032802d801210920032802d0014101460d0320032802d401210b200a42808080807083200941186ead84210a0b200b201041186c6a2209200d3703082009200e3703002009200f360210200a4280808080107c210a2008417f6a22080d000b0b200b450d04200341d0016a20034180016a10e70120032802d0010d05200aa72209450d04200941186c0d030c040b20090d070b1038000b200aa72209450d01200941186c450d010b200b102e0b200341003602900120034201370388012003410a3602d4012003200341d8006a3602d001200320034188016a360270200341bc016a4101360200200342013702ac01200341909dc5003602a8012003200341d0016a3602b801200341f0006a419cebc000200341a8016a103d1a20032802880120032802900110ef020240200328028c01450d00200328028801102e0b200041003602200c010b200341f0006a41086a2209200341d0016a41086a280200360200200341a8016a41086a220820034188016a41086a290300370300200341a8016a41106a220f20034188016a41106a290300370300200341a8016a41186a221020034188016a41186a290300370300200320032903d00137037020032003290388013703a801200041186a20063703002000200737031020002004370308200020053703002000200a3702242000200b3602202000412c6a2003290370370200200041346a2009280200360200200041386a20032903a801370300200041c0006a2008290300370300200041c8006a200f290300370300200041d0006a20102903003703000b2002450d002001102e0b200341e0016a24000f0b1036000ba20201037f230041106b220224002001280208210302404101102c2204450d0020004201370204200020043602000240024020030d00200241003a00032000200241036a410110740c010b200241013a00032000200241036a41011074200220012802003602042000200241046a41041074200220012802043602082000200241086a41041074200128021022042000107602402004450d002004410574210403402000200341201074200341206a2103200441606a22040d000b0b200141146a28020021032001411c6a28020022042000107602402004450d002004410574210403402000200341201074200341206a2103200441606a22040d000b0b2002200141206a28020036020c20002002410c6a410410740b200241106a24000f0b1036000bbd0401047f230041106b2202240020002802042103024002400240024020002802004101470d002000410c6a280200220041046a2204417f4c0d020240024002400240024020040d002002410036020820022004360204200241013602000c010b2004102c2205450d07200241003602082002200436020420022005360200200041c000490d01200041808001490d022000418080808004490d030b200241033a000c20022002410c6a410110742002200036020c20022002410c6a4104107420022003200010740c040b200220004102743a000c20022002410c6a4101107420022003200010740c030b200220004102744101723b010c20022002410c6a4102107420022003200010740c020b2002200041027441027236020c20022002410c6a4104107420022003200010740c010b200041086a280200220041046a2204417f4c0d0102400240024002400240024020040d002002410036020820022004360204200241013602000c010b2004102c2205450d07200241003602082002200436020420022005360200200041c000490d01200041808001490d022000418080808004490d030b200241031091012002200036020c20022002410c6a410410740c030b200220004102741091010c020b200220004102744101723b010c20022002410c6a410210740c010b2002200041027441027236020c20022002410c6a410410740b20022003200010740b200120022802002002280208107402402002280204450d002002280200102e0b200241106a24000f0b1038000b1036000b884c09047f017e037f027e077f017e037f017e2a7f23004190056b22032400200341d8006a4192fdc600410710810220034190016a41dfa2c500410a10810202404120102c2204450d00200342203702c404200320043602c004200341c0046a200341d8006a41101074200341c0046a20034190016a4110107402400240024020032802c8042204417f4c0d0020032802c00421050240024020040d00410121060c010b2004102c2206450d040b20062005200410e9082105200341e8036a41086a200341c0046a41086a2802002206360200200320032903c00422073703e803200341ec006a2006360200200341f7006a200341c0046a41026a2d00003a0000200320043602602003200436025c200320053602582003200737026441002108200341003a00742003410c360270200320032f00c0043b007520034190016a200341d8006a10eb050240200341c0016a2d00004102460d00410021080340024020032802b40141ffffff3f71450d0020032802b001102e0b200841016a210820034190016a200341d8006a10eb0520032d00c0014102470d000b0b0240200328025c450d002003280258102e0b0240200341e8006a280200450d002003280264102e0b200341d8006a4192fdc600410710810220034190016a41f09dc500410a1081024120102c2204450d03200342203702c404200320043602c004200341c0046a200341d8006a41101074200341c0046a20034190016a4110107420032802c8042204417f4c0d0020032802c00421050240024020040d00410121060c010b2004102c2206450d040b20062005200410e9082105200341e8036a41086a200341c0046a41086a2802002206360200200320032903c00422073703e803200341ec006a2006360200200341f7006a200341c0046a41026a2d00003a0000200320043602602003200436025c200320053602582003200737026441002109200341003a00742003410d360270200320032f00c0043b007520034190016a200341d8006a108c050240200341b4016a2d00004102460d00410021090340200941016a210920034190016a200341d8006a108c0520032d00b4014102470d000b0b0240200328025c450d002003280258102e0b0240200341e8006a280200450d002003280264102e0b02402001450d00417f200820096a220420042008491b20024d0d00200041e0eac60036020420004101360200200041086a41163602000c030b200341d8006a4192fdc600410710810220034190016a41aca0c500410d1081024120102c2204450d03200342203702c404200320043602c004200341c0046a200341d8006a41101074200341c0046a20034190016a4110107420032802c8042204417f4c0d0020032802c00421010240024020040d00410121050c010b2004102c2205450d040b20052001200410e9082101200341e8036a41086a200341c0046a41086a2802002205360200200320032903c00422073703e803200341ec006a2005360200200341f7006a200341c2046a2d00003a0000200320043602602003200436025c20032001360258200320073702644100210a200341003a00742003410e360270200320032f00c0043b007520034190016a200341d8006a108d05024020032802bc012204450d004100210a0340024020032802c00141ffffffff0371450d002004102e0b200a41016a210a20034190016a200341d8006a108d0520032802bc0122040d000b0b0240200328025c450d002003280258102e0b0240200341d8006a41106a280200450d002003280264102e0b200341d8046a22044200370300200341c0046a41106a22014200370300200341c0046a41086a22054200370300200342003703c00420034190016a41f8fcc6004108108102200520034190016a41086a220629000037030020032003290090013703c00420034190016a41a8aac800410d1081022004200629000037030020012003290090013703002003200341c0046a412010f802200341106a29030021072003290308210b2003290300210c4110102c220d450d03200d200b4200200ca722041b370300200d2007420020041b370308200341d8006a4192fdc600410710810220034190016a41f09dc500410a1081024120102c2204450d03200342203702c404200320043602c004200341c0046a200341d8006a41101074200341c0046a20034190016a4110107420032802c8042204417f4c0d0020032802c00421010240024020040d00410121050c010b2004102c2205450d040b20052001200410e90821014108210e200341c8016a41086a200341c0046a41086a2802002205360200200341386a41026a220620034190016a41026a2d00003a0000200320032903c00422073703c801200320032f0090013b0138200341ac036a2005360200200320043602a0032003200436029c032003200136029803200320073702a4034100210f200341003a00b4032003410d3602b003200341b7036a20062d00003a0000200320032f01383b00b50320034190016a20034198036a108c05410021100240200341b4016a2d00004102460d0041002111410021124100210f410021104108210e0340200341d8006a41206a20034190016a41206a290300370300200341d8006a41186a220420034190016a41186a22052903002207370300200341d8006a41106a220120034190016a41106a2206290300220b370300200341d8006a41086a221320034190016a41086a2202290300220c37030020032003290390012214370358200341e8036a41186a22152007370300200341e8036a41106a2216200b370300200341e8036a41086a2217200c370300200320143703e8032005200429030037030020062001290300370300200220132903003703002003200329035837039001200d200341e8036a10ee0521074120102c2201450d05200120032903e803370000200141186a2015290300370000200141106a2016290300370000200141086a2017290300370000200341c0046a41086a2002290300220b370300200341c0046a41106a2006290300220c370300200341c0046a41186a20052903002214370300200320032903900122183703c004200520143703002006200c3703002002200b37030020032018370390010240200f2010470d00200f41016a2204200f490d0320122004201220044b1b22044104200441044b1bad42387e220b422088a7454103742104200ba7211302400240200f0d00200341003602e0020c010b200341083602e802200320113602e4022003200e3602e0020b200341a8026a20132004200341e0026a107d20032802b0022104024020032802a8024101470d002004450d040c070b20032802ac02210e200441386e21100b200e20116a22042007370300200441086a200329039001370300200441106a2002290300370300200441186a2006290300370300200441206a20052903003703002004412c6a428180808010370200200441286a2001360200201141386a2111201241026a2112200f41016a210f20034190016a20034198036a108c0520032d00b4014102470d000b0b0240200328029c03450d00200328029803102e0b0240200341a8036a280200450d0020032802a403102e0b200341d8006a4192fdc600410710810220034190016a41aca0c500410d1081024120102c2204450d03200342203702c404200320043602c004200341c0046a200341d8006a41101074200341c0046a20034190016a4110107420032802c8042204417f4c0d0020032802c00421010240024020040d00410121050c010b2004102c2205450d040b20052001200410e9082101200341286a41086a200341c0046a41086a22172802002205360200200320032903c00422073703282003420037021c200341386a41146a2005360200200341d7006a200341256a41026a2d00003a0000200320043602402003200436023c2003200136023820032007370244200341003a00542003410e360250200320032f00253b0055200341d8006a200341386a108d0502402003280284012219450d00200341a8026a411c6a211a200341c0046a410472211b200341c0046a411c6a211c200341e0026a411c6a211d200341c8016a41206a211641002112034020034190016a41306a200341d8006a41306a220429030037030020034190016a41286a200341d8006a41286a220129030037030020034190016a41206a200341d8006a41206a290300220737030020034190016a41186a2205200341d8006a41186a290300220b37030020034190016a41106a2206200341d8006a41106a290300220c37030020034190016a41086a2202200341d8006a41086a290300221437030020032003290358221837039001200341c8016a41286a200128020036020020162007370300200341c8016a41186a200b370300200341c8016a41106a200c370300200341c8016a41086a2014370300200320183703c8012004280200211e200328028c01211f200341f8016a41086a2220201641086a280200360200200320162903003703f801200341c0046a41186a22212005290300370300200341c0046a41106a222220062903003703002017200229030037030020032003290390013703c004024002402012450d00200328021821130c010b41f004102c2212450d0641002113201241003b018e02201241003602002003201236021c200341003602180b0240024002400240024002400240024002400240024002400340201241186a210120124190026a211120122f018e022215410574210241002104417f210502400340024020022004470d00201521050c020b200341c0046a201120046a412010ec082206450d03200541016a2105200141186a2101200441206a21042006417f4a0d000b0b02402013450d002013417f6a2113201220054102746a41f0046a28020021120c010b0b20034188026a41086a201b41086a2223290200220737030020034188026a41106a201b41106a2224290200220b37030020034188026a41186a201b41186a222528020022043602002003201b290200220c3703880220032802c0042113200341e0026a41186a22262004360200200341e0026a41106a2227200b370300200341e0026a41086a222820073703002003200c3703e002200341d0036a41086a22292020280200360200200320032903f8013703d00302402015410a4b0d00200341e8036a41086a22062029280200360200200320032903d0033703e803200341a0046a41186a22022026280200360200200341a0046a41106a22222027290300370300200341a0046a41086a22202028290300370300200320032903e0023703a004200541016a2121201541016a21010240200520154f22270d00201120214105746a201120054105746a20012005417f736a41057410ea081a0b201120054105746a22042013360000200441146a20222903003700002004410c6a2020290300370000200420032903a0043700042004411c6a200228020036000020172006280200360200200320032903e8033703c004201241046a2104024020270d002004202141186c6a2004200541186c6a201520056b41186c10ea081a0b2004200541186c6a220420032903c004370200201728020021052004201f3602142004201e3602102004201936020c200441086a2005360200201220013b018e020c0b0b4100212a4104210402400240200541054f0d00200521060c010b4105210441052106024002402005417b6a0e020201000b200541796a21064101212a410621040c010b410021064101212a0b41f004102c2201450d11200141003b018e0220014100360200200120122f018e02222b2004417f736a22053b018e02201120044105746a2202280000212c200341a0046a41186a222d2002411c6a280000360200200341a0046a41106a2215200241146a290000370300200341a0046a41086a22202002410c6a290000370300200320022900043703a004200341f8046a41106a222e201241046a222f200441186c6a220241106a290200370300200341f8046a41086a2230200241086a290200370300200320022902003703f8042005410c4f0d01202b200441016a22026b2005470d0220014190026a201120024105746a200541057410e9081a200141046a202f200241186c6a200541186c10e9081a201c20032903f8043702002021202d280200360200201c41086a22312030290300370200201c41106a2232202e290300370200201220043b018e02202220152903002207370300200341e8036a41086a222b2020290300370300200341e8036a41106a222f2007370300200341e8036a41186a22332021290300370300200341e8036a41206a2234200341c0046a41206a2235290300370300200341e8036a41286a2236200341c0046a41286a2237290300370300200341e8036a41306a2238200341c0046a41306a2239280200360200200320032903a0043703e80320302029280200360200200320032903d0033703f80420012012202a1b22052f018e022102202d20262802003602002015202729030037030020202028290300370300200320032903e0023703a00420054190026a2104200241016a21110240200641016a222a20024b223a0d002004202a4105746a200420064105746a20112006417f736a41057410ea081a0b200420064105746a22042013360000200441146a20152903003700002004410c6a2020290300370000200420032903a0043700042004411c6a202d28020036000020172030280200360200200320032903f8043703c004200541046a21040240203a0d002004202a41186c6a2004200641186c6a200220066b41186c10ea081a0b2004200641186c6a220420032903c004370200201728020021062004201f3602142004201e3602102004201936020c200441086a2006360200200520113b018e0220034198036a41306a2204203828020036020020034198036a41286a2205203629030037030020034198036a41206a2206203429030037030020034198036a41186a221f203329030037030020034198036a41106a2219202f29030037030020034198036a41086a221e202b290300370300200320032903e80337039803200341e0026a41306a223b2004280200360200200341e0026a41286a223c2005290300370300200341e0026a41206a223d20062903003703002026201f290300370300202720192903003703002028201e29030037030020032003290398033703e002024002400240201228020022130d004100212a0c010b4100212a2001213a202c213e034020122f018c022102201f202628020036020020192027290300370300201e2028290300370300200320032903e00237039803200341d0036a41106a223f201d41106a2902003703002029201d41086a2902003703002003201d2902003703d00320132f018e022212410b490d024100211141042104024020024105490d0020022104024002402002417b6a0e020201000b200241796a210241012111410621040c010b4100210241012111410521040b41a005102c2201450d14200141003b018e0220014100360200200120132f018e0222402004417f736a22053b018e0220134190026a224120044105746a2206280000212c202d2006411c6a2800003602002015200641146a29000037030020202006410c6a290000370300200320062900043703a004202e201341046a2242200441186c6a220641106a2902003703002030200641086a290200370300200320062902003703f8042005410c4f0d062040200441016a22066b2005470d0720014190026a204120064105746a200541057410e9081a200141046a2042200641186c6a200541186c10e9081a201320043b018e0220172020290300370300202220152903003703002021202d280200360200201c20032903f804370200203120302903003702002032202e290300370200200320032903a0043703c00420012f018e02220541016a21402005410c4f0d08201220046b22042040470d09202a41016a212a200141f0046a201320064102746a41f0046a200441027410e9081a4100210402400340200120044102746a41f0046a280200220620043b018c02200620013602002004200420054922066a220420054b0d0120060d000b0b20382039280200360200203620372903003703002034203529030037030020332021290300370300202f2022290300370300202b2017290300370300200320032903c0043703e8032015203f29030037030020202029290300370300200320032903d0033703a0042001201320111b22062f018e0221052003203e3602c004201b2003290398033700002023201e290300370000202420192903003700002025201f28020036000020064190026a2112200541016a21110240200241016a220420054b223e0d00201220044105746a201220024105746a2002417f7320116a41057410ea081a0b201220024105746a221220032903c004370000201241186a2021290300370000201241106a2022290300370000201241086a20172903003700002022201529030037030020172020290300370300200320032903a0043703c004200641046a21120240203e0d002012200441186c6a2012200241186c6a200520026b41186c10ea081a0b2012200241186c6a221220032903c004370200201241106a2022290300370200201241086a2017290300370200200641f0046a21120240200241026a223e200541026a22054f0d002012203e4102746a201220044102746a2004417f7320056a41027410ea081a0b201220044102746a203a360200200620113b018e020240200420054f0d00200620024102746a41f4046a2104034020042802002205200241016a22023b018c0220052006360200200441046a210420112002470d000b0b2028202b2903003703002027202f29030037030020262033290300370300203d2034290300370300203c2036290300370300203b2038280200360200200320032903e8033703e002201321122013280200220421132001213a202c213e20040d000b0b200341a8026a41306a203b280200360200200341a8026a41286a203c290300370300200341a8026a41206a203d290300370300200341a8026a41186a20262903002207370300200341a8026a41106a2027290300220b370300200341a8026a41086a2028290300220c370300200320032903e00222143703a802202b200c370300202f200b370300203320073e02002028201a41086a2902003703002027201a41106a290200370300200320143703e8032003201a2902003703e002200328021c2205450d082003280218210641a005102c2204450d12200420053602f004200441003b018e0220044100360200200541003b018c02200520043602002003200436021c2003200641016a360218202120332802003602002022202f2903003703002017202b290300370300200320032903e8033703c00420192027290300370300201e2028290300370300200320032903e002370398032006202a470d0920042f018e022206410b4f0d0a2004200641016a22023b018e02200420064105746a22054190026a202c36000020054194026a20032903c0043700002005419c026a2017290300370000200541a4026a2022290300370000200541ac026a20212802003600002004200641186c6a220541046a2003290398033702002005410c6a201e290300370200200541146a2019290300370200200441f0046a20024102746a2001360200200120023b018c02200120043602002003200328022041016a360220202a1a20011a0c0c0b2015203f29030037030020202029290300370300200320032903d0033703a004201b2003290398033700002023201e290300370000202420192903003700002025201f2802003600002003203e3602c00420134190026a2104201241016a21060240201220024d22010d00200420024105746a220541206a20052002417f7320066a41057410ea081a0b200420024105746a220420032903c004370000200441186a2021290300370000200441106a2022290300370000200441086a20172903003700002022201529030037030020172020290300370300200320032903a0043703c004200241016a2104201341046a2105024020010d002005200441186c6a2005200241186c6a201220026b41186c10ea081a0b2005200241186c6a220520032903c004370200200541106a2022290300370200200541086a2017290300370200201341f0046a2105201241026a2111024020010d00200241027420056a41086a200520044102746a2004417f7320116a41027410ea081a0b200520044102746a203a360200201320063b018e02200420114f0d0a20132004417f6a22044102746a41f4046a2101034020012802002205200441016a22043b018c0220052013360200200141046a210120062004470d000c0b0b0b2001416c6a220520032903f801370200200141786a2206280200210420202802002102200620193602002001417c6a220628020021112006201e3602002001201f360200200541086a20023602002004450d0a201141ffffffff0371450d0a2004102e0c0a0b2005410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b2005410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b2040410c41f49cc700104d000b41f49bc7004128419c9cc7001039000b41e8aac700412b4194abc7001039000b41e899c700413041989ac7001039000b41a89ac700412041c89ac7001039000b2003200328022041016a3602200b200341d8006a200341386a108d052003280284012219450d01200328021c21120c000b0b0240200328023c450d002003280238102e0b0240200341c8006a280200450d002003280244102e0b200341d8006a4192fdc600410710810220034190016a41dfa2c500410a1081024120102c2204450d03200342203702c404200320043602c004200341c0046a200341d8006a41101074200341c0046a20034190016a4110107420032802c8042204417f4c0d0020032802c00421010240024020040d00410121050c010b2004102c2205450d040b20052001200410e9082101200341a8026a41086a200341c0046a41086a22212802002205360200200341c8016a41026a220620034190016a41026a2d00003a0000200320032903c00422073703a802200320032f0090013b01c801200341fc036a2005360200200320043602f003200320043602ec03200320013602e803200320073702f403200341003a0084042003410c3602800420034187046a20062d00003a0000200320032f01c8013b00850420034190016a200341e8036a10eb0520034190016a41306a2d00004102460d010340202120034190016a41086a22152903002207370300200341c0046a41106a20034190016a41106a2216290300220b370300200341c0046a41186a20034190016a41186a2217290300220c370300200320032903900122143703c00420032802bc01211120032802b001211320032802b401211920032802b8012106200341d8006a41186a221e200c370300200341d8006a41106a221f200b370300200341d8006a41086a22202007370300200320143703580240024020060d00410021120c010b41002122410021124100210502400340024002402012450d00201320054105746a21042013200520226a4105746a210103400240200341186a200410a1022202450d00200228020820114b0d030b20012004290000370000200141186a200441186a290000370000200141106a200441106a290000370000200141086a200441086a290000370000200441206a2104200141206a21012006200541016a22054b0d000c040b0b201320054105746a210403400240200341186a200410a1022201450d00200128020820114b0d020b200441206a21042006200541016a22054b0d000b410021120c030b2022417f6a2122201241016a21122006200541016a22054b0d000b0b024020120d00410021120c010b2013200520126b4105746a201320054105746a200620056b41057410ea081a0b200d200341d8006a10ee0521072017201e2903003703002016201f2903003703002015202029030037030020032003290358370390010240200f2010470d00200f41016a2204200f490d02200f41017422012004200120044b1b22044104200441044b1bad42387e220b422088a7454103742104200ba7210102400240200f0d0020034100360298030c010b200341083602a0032003200e360298032003200f41386c36029c030b200341e0026a2001200420034198036a107d20032802e8022104024020032802e0024101470d0020040d060c030b20032802e402210e200441386e21100b200e200f41386c6a220420073703002004200329039001370308200441106a2015290300370300200441186a2016290300370300200441206a2017290300370300200441306a200620126b3602002004412c6a201936020020042013360228200f41016a210f20034190016a200341e8036a10eb0520032d00c0014102470d000c020b0b1038000b2009ad220742f8cdaf0d7e2008ad220b42c8acef0b7e7c200aad220c42d8e5f90a7e7c200b42c0d1e1237e7c200742c0d1e1237e7c42c0d1e1237c220b200c42c0f0f50b7e7c2107024020032802ec03450d0020032802e803102e0b2007200b5421040240200341f8036a280200450d0020032802f403102e0b427f200720041b210b200328021c21042003410036021c02402004450d00024020032802182201450d002001417f6a2101034020042802f00421042001450d012001417f6a21010c000b0b024020032802202202450d0041002105200341c8046a211203402002417f6a210241012101024002400340200520042f018e02490d010240200428020022060d002004102e410021040c030b20042f018c0221052004102e2001417f6a2101200621040c000b0b200341c0046a41186a200420054105746a220641a8026a290000370300200341c0046a41106a200641a0026a290000370300201220064198026a290000370300200320064190026a2900003703c004200541016a21062004200541186c6a220541146a2902002107200541106a2802002111024020014101470d00200621050c010b200420064102746a41f0046a280200210402402001450d000340200141016a220520014f210620042802f00421042005210120060d000b0b410021050b2011450d020240200742ffffffff0383500d002011102e0b20020d000b0b0340200428020021012004102e2001210420010d000b0b200d102e200041186a200b370300200041106a200f3602002000410c6a2010360200200041086a200e360200200041003602000b20034190056a24000f0b1036000b980501047f23004190016b220524002005200436021420052003360210200541d4e2cc00200141086a20024108491b36021820054100200241786a2201200120024b1b36021c200541e0006a200541186a109301200541c0006a41086a2202200541e9006a290000370300200541c0006a41106a2201200541f1006a290000370300200541c0006a41186a2203200541f9006a29000037030020052005290061370340024002400240024020052d00604101460d00200541206a41186a2003290300370300200541206a41106a2001290300370300200541206a41086a200229030037030020052005290340370320200541086a200541106a10ab01024002402005280208450d00200541003602600c010b200541e0006a200541106a200528020c10920120052802602202450d00200528026421010240200528021422034104490d00200541e8006a280200210620052802102204280000210720052003417c6a22083602142005200441046a22043602102008450d0020042d0000210820052003417b6a3602142005200441016a3602104100210320080e020403000b200141ffffff3f71450d002002102e0b20054186016a41026a2005418a016a41026a2d00003a0000200520052f018a013b018601200041023a00300c030b200041023a00300c020b410121030b20054186016a41026a22042005418d016a41026a2d00003a0000200520052f008d013b018601200041186a200541206a41186a290300370000200041106a200541206a41106a290300370000200041086a200541206a41086a29030037000020002005290320370000200020033a00302000200736022c200020063602282000200136022420002002360220200020052f0186013b0031200041336a20042d00003a00000b20054190016a24000be60303057f017e037f230041c0006b22022400200241086a200128020c200141146a280200108b050240024020022802082203450d00200141086a2104200141106a2105024003400240024020042802002206200229020c2207422088a722084b0d0020012802002003200610ec08450d010b2007a7450d032003102e0c030b02402005280200450d00200128020c102e0b2001200336020c20052007370200200241086a2003200810ed020240024020022802082203450d0020022802102109200228020c2108024020012d001c450d00200128020c200128021410ff010b2001280214220a20042802002206490d03200241086a200128020c20066a200a20066b20032009200128021811050020022d00384102470d012008450d002003102e0b200241086a200128020c2001280214108b05200228020822030d010c030b0b20002002290308370200200041306a200241086a41306a280200360200200041286a200241086a41286a290300370200200041206a200241086a41206a290300370200200041186a200241086a41186a290300370200200041106a200241086a41106a290300370200200041086a200241086a41086a2903003702002008450d022003102e0c020b2006200a41e89ec5001056000b200041023a00300b200241c0006a24000bf80301017f23004190016b220524002005200436021420052003360210200541d4e2cc00200141086a20024108491b36021820054100200241786a2201200120024b1b36021c200541e8006a200541186a109301200541c8006a41086a2202200541f1006a290000370300200541c8006a41106a2201200541f9006a290000370300200541c8006a41186a220320054181016a290000370300200520052900693703480240024002400240024020052d00684101460d00200541286a41186a2003290300370300200541286a41106a2001290300370300200541286a41086a200229030037030020052005290348370328200541086a200541106a10ab0120052802080d03200528020c21022005418094ebdc0336026c2005200236026820052802142201450d03200541e8006a2002418094ebdc034b4102746a2802002104200528021022022d0000210320052001417f6a3602142005200241016a3602104100210220030e020201030b200041023a00240c030b410121020b20002005290328370000200041186a200541286a41186a290300370000200041106a200541286a41106a290300370000200041086a200541286a41086a290300370000200020023a002420002004360220200020052f00253b0025200041276a200541276a2d00003a00000c010b200041023a00240b20054190016a24000bf70302027f017e23004180016b220524002005200436020c20052003360208200541d4e2cc00200141086a20024108491b36021020054100200241786a2201200120024b1b360214200541d8006a200541106a109301200541386a41086a2202200541e1006a290000370300200541386a41106a2201200541e9006a290000370300200541386a41186a2206200541f1006a290000370300200520052900593703380240024020052d00584101460d00200541186a41186a2006290300370300200541186a41106a2001290300370300200541186a41086a200229030037030020052005290338370318024020044104490d002005200341046a36020820052004417c6a220236020c20024104490d00200328000021012005200341086a3602082005200441786a220236020c20024104490d00200328000421022005200441746a36020c20052003410c6a36020820032800082104200541d8006a200541086a10e70120052802582203450d00200529025c210720002005290318370000200041186a200541186a41186a290300370000200041106a200541186a41106a290300370000200041086a200541186a41086a290300370000200020073702302000200336022c2000200436022820002002360224200020013602200c020b2000410036022c0c010b2000410036022c0b20054180016a24000ba10706017f027e027f017e027f017e230041a0026b22022400200041086a29030021032000290300210420024190026a200110e505200241e8006a200228029002220020022802980210f402200241c8006a41086a2201200241f1006a290000370300200241c8006a41106a2205200241f9006a290000370300200241c8006a41186a220620024181016a2900003703002002200229006937034802400240024002400240024020022d00684101470d00200241286a41186a2006290300370300200241286a41106a2005290300370300200241286a41086a2001290300370300200220022903483703280240200228029402450d002000102e0b200241e8006a41186a200241286a41186a290300370300200241e8006a41106a200241286a41106a290300370300200241e8006a41086a200241286a41086a29030037030020022002290328370368200241d0016a4192fdc6004107108102200241e0016a41e9a2c50041061081024120102c2200450d042002422037028402200220003602800220024180026a200241e8006a4120107420024190026a2002280280022200200228028802220110d803200241d4006a200020016a36020020022000360250200220024190026a41106a36024c200220024190026a360248200241f0016a200241c8006a107c0240200228028402450d002000102e0b20022802f801220141206a2200417f4c0d050240024020000d00410121050c010b2000102c2205450d050b200241003602c801200220003602c401200220053602c001200241c0016a200241d0016a41101074200241c0016a200241e0016a41101074200241c0016a20022802f001220020011074024020022802f401450d002000102e0b200241e8006a20022802c001220520022802c80110e60520022802c40121002002280288012206450d0120024180016a290300210720024198016a280200210820024194016a28020021092002290378210a200228028c01210102402000450d002005102e0b02402001450d00200141186c450d002006102e0b200841ffffffff0371450d032009102e0c030b200228029402450d012000102e0c010b2000450d002005102e0b4200210a420021070b200241186a20042003427f420010e708200241086a200a20072002290318220342012003420156200241186a41086a29030022034200522003501b22001b2003420020001b10e708200241086a41086a290300210320022903082104200241a0026a24002004427f2003501b0f0b1036000b1038000bc00c07047f017e047f017e017f027e017f230041c0016b22032400200341d8006a4192fdc6004107108102200341f8006a41f09dc500410a108102024002400240024002404120102c2204450d002003422037023c20032004360238200341386a200341d8006a41101074200341386a200341f8006a4110107420032802402204417f4c0d04200328023821050240024020040d00410121060c010b2004102c2206450d010b20062005200410e9082105200341186a41086a200341386a41086a2802002206360200200320032903382207370318200341ec006a2006360200200341f7006a200341386a41026a2d00003a0000200320043602602003200436025c200320053602582003200737026441002104200341003a00742003410d360270200320032f00383b0075200341f8006a200341d8006a108c0502402003419c016a2d00004102460d00410021040340200441016a2104200341f8006a200341d8006a108c0520032d009c014102470d000b0b0240200328025c450d002003280258102e0b0240200341e8006a280200450d002003280264102e0b02402001450d00200420024d0d00200041f6eac600360204200041086a4117360200410121040c040b200341d8006a4192fdc6004107108102200341f8006a41f09dc500410a1081024120102c2201450d002003422037023c20032001360238200341386a200341d8006a41101074200341386a200341f8006a4110107420032802402201417f4c0d04200328023821050240024020010d00410121060c010b2001102c2206450d010b20062005200110e9082105200341086a41086a200341386a41086a2802002206360200200341046a41026a2202200341f8006a41026a2d00003a0000200320032903382207370308200320032f00783b01042003412c6a2006360200200320013602202003200136021c2003200536021820032007370224200341003a00342003410d360230200341376a20022d00003a0000200320032f01043b0035200341f8006a200341186a108c0520032d009c014102460d01200341d8006a41186a2201200341f8006a41186a290300370300200341d8006a41106a2205200341f8006a41106a290300370300200341d8006a41086a200341f8006a41086a290300370300200320032903783703584120102c2208450d0020082003290358370000200841186a2001290300370000200841106a2005290300370000200841086a200341d8006a41086a2209290300370000200341386a41186a200341186a41186a290300370300200341386a41106a200341186a41106a290300370300200341386a41086a200341186a41086a29030037030020032003290318370338200341f8006a200341386a108c0502400240024020032d009c014102470d0041012101410121060c010b4120210241012101410121060340200341d8006a41186a200341f8006a41186a220a2903002207370300200341d8006a41106a200341f8006a41106a220b290300220c3703002009200341f8006a41086a220d290300220e37030020032003290378220f370358200a2007370300200b200c370300200d200e3703002003200f370378024020062001470d00200141016a22052001490d08200141017422102005201020054b1b22054104200541044b1b220541ffffff3f712005462110200541057421050240024020010d00200341003602b0010c010b200341013602b801200320083602b001200320014105743602b4010b200341a0016a20052010200341b0016a107d20032802a801210120032802a0014101460d0320032802a4012108200141057621010b200820026a22052003290378370000200541186a200a290300370000200541106a200b290300370000200541086a200d290300370000200241206a2102200641016a2106200341f8006a200341386a108c0520032d009c014102470d000b0b0240200328023c450d002003280238102e0b200341c8006a280200450d032003280244102e0c030b2001450d040b1036000b0240200328021c450d002003280218102e0b41002101410121080240200341286a280200450d002003280224102e0b410021060b200041186a2004ad42c0f0f50b7e370300200041106a20063602002000410c6a2001360200200041086a2008360200410021040b20002004360200200341c0016a24000f0b1038000bdb0401097f230041c0016b2202240020024188016a200110d305200241306a200228028801220320022802900110e60520024198016a41086a2204200241ec006a29020037030020024198016a41106a2205200241f4006a29020037030020024198016a41186a2206200241fc006a29020037030020024198016a41206a220720024184016a2802003602002002200241e4006a290200370398010240024020022802502208450d00200241e0006a2802002109200241dc006a280200210a20022802542101200241086a41206a2007280200360200200241086a41186a2006290300370300200241086a41106a2005290300370300200241086a41086a200429030037030020022002290398013703080240200228028c01450d002003102e0b200241306a41106a200241086a41106a290300370300200241306a41086a200241086a41086a290300370300200241306a41186a200241086a41186a290300370300200241306a41206a200241086a41206a28020036020020024198016a41086a2002413c6a29020037030020024198016a41106a200241c4006a29020037030020024198016a41186a200241cc006a29020037030020022002290308370330200220022902343703980102402001450d00200141186c450d002008102e0b0240200941ffffffff0371450d00200a102e0b2000200229039801370001200041196a200241b0016a290300370000200041116a200241a8016a290300370000200041096a200241a0016a290300370000410121010c010b0240200228028c01450d002003102e0b410021010b200020013a0000200241c0016a24000bd60605067f017e037f017e017f23004180016b22012400200141286a22024200370300200141206a22034200370300200141106a41086a420037030020014200370310200141106a4192fdc6004107108102200141e8006a41a8b4c600410a1081022002200141e8006a41086a29000037030020032001290068370300200141203602342001200141106a360230200141386a200141106a412010ed02024002400240200128023822040d00410021030c010b200128023c21052001200141386a41086a28020036024c20012004360248200141086a200141c8006a10ab010240024020012802080d0002400240200128020c2206200128024c4103762202200220064b1b22024103742203417f4c0d000240024020020d00410421030c010b2003102c2203450d060b2002ad2107024002402006450d000340200128024c22084104490d042001280248220228000021092001200241046a36024820012008417c6a220a36024c200a4104490d042002280004210a2001200841786a36024c2001200241086a36024802402007422088220ba722022007a7470d00200241016a22082002490d042002410174220c20082008200c491b22084104200841044b1b220841ffffffff0171200846410274210c200841037421080240024020020d00200141003602680c010b20014104360270200120033602682001200b4203863e026c0b200141d8006a2008200c200141e8006a107d2001280260210820012802584101460d03200128025c21032007428080808070832008410376ad8421070b200320024103746a2202200a3602042002200936020020074280808080107c21072006417f6a22060d000b0b2003450d030c040b20080d050b1038000b0240200742ffffffff0183500d002003102e0b0b4100210320014100360260200142013703582001410a3602542001200141306a3602502001200141d8006a360264200141fc006a41013602002001420137026c200141909dc5003602682001200141d0006a360278200141e4006a419cebc000200141e8006a103d1a2001280258200128026010ef02200128025c450d002001280258102e0b2005450d002004102e0b0240024020030d0020004100360208200042043702000c010b20002007370204200020033602000b20014180016a24000f0b1036000bc40101057f2001280208210302402001410c6a280200220420024b0d002000410036020820002004ad4220862003ad843702000f0b02402001411c6a28020022050d00200041023602080f0b200141146a2802002101200541027421052003417f6a21030240034002402004200128020022066b220720024b0d00200420024b0d020b200141046a21012003417f6a2103200721042005417c6a22050d000b200041023602080f0b2000200636020c20002007ad4220862003ad84370200200041013602080bd80c08017f017e047f017e067f027e027f027e23004180016b2201240042002102200141306a22034200370300200141286a22044200370300200141186a41086a420037030020014200370318200141186a41a081ca004107108102200141d8006a41f09dc500410a1081022003200141d8006a41086a29000037030020042001290058370300200141d8006a200141186a10880320012802582203410120031b210541022106024002400240200129025c420020031b2207422088a72203450d00200341057441606a41057641016a210841002104200521030240034020032000412010ec08450d01200242017c2102200341206a21032008200441016a2204470d000c020b0b200141306a22094200370300200141286a220a4200370300200141186a41086a220b420037030020014200370318200141d8006a41a081ca004107108102200b200141d8006a41086a220c29000037030020012001290058370318200141d8006a41f8d2c10041121081022009200c290000370300200a2001290058370300200141d8006a200141186a109b0320012802582208410420081b210d4100210641002103410021000240024002400240024002400240200129025c420020081b220e422088220fa722100e020201000b4100210320102100034020032000410176220820036a22112004200d20114102746a280200491b2103200020086b220041014b0d000b0b41012100200d20034102746a28020022082004460d012003200420084b6a21000b20094200370300200a4200370300200b420037030020014200370318200141d8006a41a081ca004107108102200b200c29000037030020012001290058370318200141d8006a41f09dc500410a108102200a41086a200c290000370000200a2001290058370000200141c8006a41046a41003a000020014100360248200141106a200141186a4120200141c8006a4105410010ca040240024002402001280210450d00200120012802142203410520034105491b36025c2001200141c8006a360258200141086a200141d8006a10ab012001280208450d010b410021030c010b200128020c21030b2003418094ebdc0370ad4280fd87d1007e2212428094ebdc038221132012428094ebdc038021122003418094ebdc036e2108200020104b0d0502402010200ea7470d00201041016a22032010490d0720104101742211200320032011491b22034104200341044b1b220341ffffffff03712003464102742111200341027421030240024020100d00200141003602180c010b200141206a41043602002001200d3602182001200f4202863e021c0b200141d8006a20032011200141186a107d200141e0006a280200210320012802584101460d02200128025c210d2003410276ad210e0b200d20004102746a220341046a2003201020006b41027410ea081a20032004360200200e42ffffffff0f83201041016a2203ad42208684210e200320084180fd87d1006c2012a720134280cab5ee01566a6a4b2106410021000b2001200e37024c2001200d360248200d0d01200141306a4200370300200141286a4200370300200141186a41086a2203420037030020014200370318200141d8006a41a081ca0041071081022003200141d8006a41086a220829000037030020012001290058370318200141d8006a41f8d2c1004112108102200a41086a2008290000370000200a2001290058370000200141186a412010ff010c020b2003450d041036000b200141306a4200370300200141286a4200370300200141186a41086a2203420037030020014200370318200141d8006a41a081ca0041071081022003200141d8006a41086a220829000037030020012001290058370318200141d8006a41f8d2c1004112108102200a41086a2008290000370000200a2001290058370000200141186a200141c8006a10c705200d450d00200e42ffffffff0383500d00200d102e0b20000d00200141186a41086a200237030020014102360218200141186a108c06200141013602182001200436021c200141d8006a200141186a10a404200141d3006a200141d8006a41086a2802003600002001200129035837004b200141e4006a200141cf006a290000370000200141c28289aa04360059200141023a00582001200129004837005d200141d8006a10a5040b0240200742ffffff3f83500d002005102e0b20014180016a240020060f0b200020101045000b1038000bd90c04047f017e027f067e230041d0026b22052400200541c8016a2001200210f2050240024002400240024020052802d0014102460d0020052802c8012106200541c8016a41086a2001280204220741086a290000370300200541c8016a41106a200741106a290000370300200541c8016a41186a200741186a290000370300200520063602e801200520072900003703c801200541f0016a200541c8016a10cd0520052802f0012108200520052802f8012207360284022005200836028002200541b0026a2008200710ed020240024020052802b00222070d00420021090c010b20052802b402210a024002400240200541b0026a41086a280200220b4110490d00200b4170714110470d010b200541003602c802200542013703c0022005410a36028c02200520054180026a360288022005200541c0026a36029402200541ac026a41013602002005420137029c02200541909dc50036029802200520054188026a3602a80220054194026a419cebc00020054198026a103d1a20052802c00220052802c80210ef02024020052802c402450d0020052802c002102e0b420021090c010b200741186a290000210c200741086a290000210d2007290010210e2007290000210f420121090b200a450d002007102e0b200d4200200942005222071b210d200f420020071b210f024020052802f401450d002008102e0b200c420020071b210c200e420020071b210e0240200f200354200d200454200d2004511b0d00200f200385200d2004858450450d04200541b8016a20032004428094ebdc03420010e608200541a8016a20032004428094ebdc03420010e70820054198016a20052903a801200541a8016a41086a2903002001350228220d420010e80820054188016a4200200529039801220f200d20052903b8017e220d428094ebdc0380a7417f200d428080808080c0b2cd3b541b200d428094ebdc03824280cab5ee01566aad7c220d200e7d22092009200d5620054198016a41086a290300200d200f54ad7c220f200c7d200d200e54ad7d220d200f56200d200f511b22021b220f4200200d20021b220d428094ebdc03420010e608200541f8006a200f200d428094ebdc03420010e708200541e8006a2005290378200541f8006a41086a2903004280cab5ee01420010e8082005290368220f200529038801220d420188a7200d4280cab5ee017e428094ebdc03824280cab5ee01566aad7c220d200541e8006a41086a290300200d200f54ad7c220f84500d040c020b200541d8006a20032004428094ebdc03420010e608200541c8006a20032004428094ebdc03420010e708200541386a2005290348200541c8006a41086a29030020013502282209420010e808200541286a420020052903382210200920052903587e2209428094ebdc0380a7417f2009428080808080c0b2cd3b541b2009428094ebdc03824280cab5ee01566aad7c2209200e7d22112011200956200541386a41086a2903002009201054ad7c2210200c7d2009200e54ad7d220920105620092010511b22071b22104200200920071b2209428094ebdc03420010e608200541186a20102009428094ebdc03420010e708200541086a2005290318200541186a41086a2903004280cab5ee01420010e808200128022422072003200f7d220920072903007c2210370300200741086a22072004200d7d2003200f54ad7d20072903007c2010200954ad7c370300200141106a2207200728020022072002200720024b1b3602002005290308220f2005290328220d420188a7200d4280cab5ee017e428094ebdc03824280cab5ee01566aad7c220d200541086a41086a290300200d200f54ad7c220f8450450d01200e210d0c020b410021010c030b2001280220220220022903002209200d7c2210370300200241086a22022002290300200f7c2010200954ad7c370300200c200f7c200e200d7c220d200e54ad7c210c0b200141013a002c200541b0026a200541c8016a10cd0520052802b802210220052802b0022101200541003602c802200542013703c002200520043703a0022005200337039802200541c0026a20054198026a411010742005200c3703a0022005200d37039802200541c0026a20054198026a411010742001200220052802c002220720052802c80210b201024020052802c402450d002007102e0b20052802b402450d002001102e0b410121010b2000200636020420002001360200200541d0026a24000b9c0b09047f017e047f027e017f017e037f037e027f230041e0016b220324002003200236021c20032001360218200341206a2001200210ed0202400240200328022022040d00200041003602000c010b200328022421052003200341286a28020036023420032004360230200341106a200341306a10ab010240024020032802100d000240024002400240024020032802142206200328023441d8006e2201200120064b1bad42d8007e2207422088a70d002007a72201417f4c0d000240024020010d00410821080c010b2001102c2208450d020b200141d8006ead2107024002402006450d00200341b8016a41017221020340200341b8016a200341306a10930120032d00b8014101460d0720034198016a41186a2209200241186a29000037030020034198016a41106a220a200241106a29000037030020034198016a41086a220b200241086a2900003703002003200229000037039801200328023422014110490d072003200141706a36023420032003280230220141106a360230200141086a290000210c2001290000210d200341b8016a200341306a10e90120032802b801220e450d0720032902bc01210f200341086a200341306a10ab0102402003280208450d00200341003602b8010c070b200341b8016a200341306a200328020c10920120032802b8012210450d0620032802bc012111200328023422014110490d0520032802c0012112200341d8006a41086a200b2903002213370300200341d8006a41106a200a2903002214370300200341d8006a41186a20092903002215370300200341386a41186a22092015370300200341386a41106a220a2014370300200341386a41086a220b20133703002003200141706a36023420032003280230220141106a3602302003200329039801221337035820032013370338200141086a29000021132001290000211402402007422088a722012007a7470d00200141016a22162001490d0420014101742217201620162017491b22164104201641044b1bad42d8007e2215422088a74541037421162015a721170240024020010d00200341003602b8010c010b200341083602c001200320083602b8012003200141d8006c3602bc010b20034198016a20172016200341b8016a107d20032802a00121162003280298014101460d03200328029c012108200742808080807083201641d8006ead8421070b2008200141d8006c6a220120143703102001200c3703082001200d3703002001200e360220200141186a2013370300200141346a2012360200200141306a20113602002001412c6a2010360200200141246a200f370200200141386a2003290338370200200141c0006a200b290300370200200141c8006a200a290300370200200141d0006a200929030037020020074280808080107c21072006417f6a22060d000b0b2008450d0620002007370204200020083602000c070b20160d010b1038000b1036000b201141ffffff3f71450d002010102e0b200fa72201450d00200141306c450d00200e102e0b200341d8006a41086a200341f8006a41086a29030037030002402007422088a72201450d00200141d8006c2102200841306a210103400240200141746a2802002206450d00200641306c450d00200141706a280200102e0b0240200128020041ffffff3f71450d002001417c6a280200102e0b200141d8006a2101200241a87f6a22020d000b0b2007a72201450d00200141d8006c450d002008102e0b200341003602a00120034201370398012003410a36027c2003200341186a360278200320034198016a360258200341cc016a4101360200200342013702bc01200341909dc5003602b8012003200341f8006a3602c801200341d8006a419cebc000200341b8016a103d1a20032802980120032802a00110ef020240200328029c01450d00200328029801102e0b200041003602000b2005450d002004102e0b200341e0016a24000bb10b01047f230041d0006b22012400200141086a4192fdc6004107108102200141186a41b29dc500410b108102200120003602342001200141346a410410a301370338200141cc006a200141346a41046a3602002001200141c0006a3602442001200141346a3602482001200141386a360240200141286a200141c0006a107c024002402001280230220241206a2203417f4c0d000240024020030d00410121040c010b2003102c2204450d020b200141003602482001200336024420012004360240200141c0006a200141086a41101074200141c0006a200141186a41101074200141c0006a20012802282203200210740240200128022c450d002003102e0b20012802402203200128024810890302402001280244450d002003102e0b200141086a4192fdc6004107108102200141186a41c4afc6004112108102200120003602342001200141346a410410a301370338200141cc006a200141346a41046a3602002001200141c0006a3602442001200141346a3602482001200141386a360240200141286a200141c0006a107c2001280230220241206a2203417f4c0d000240024020030d00410121040c010b2003102c2204450d020b200141003602482001200336024420012004360240200141c0006a200141086a41101074200141c0006a200141186a41101074200141c0006a20012802282203200210740240200128022c450d002003102e0b20012802402203200128024810890302402001280244450d002003102e0b200141086a4192fdc6004107108102200141186a41c0b0c6004112108102200120003602342001200141346a410410a301370338200141cc006a200141346a41046a3602002001200141c0006a3602442001200141346a3602482001200141386a360240200141286a200141c0006a107c2001280230220241206a2203417f4c0d000240024020030d00410121040c010b2003102c2204450d020b200141003602482001200336024420012004360240200141c0006a200141086a41101074200141c0006a200141186a41101074200141c0006a20012802282203200210740240200128022c450d002003102e0b20012802402203200128024810890302402001280244450d002003102e0b200141086a4192fdc6004107108102200141186a418cb1c6004113108102200120003602342001200141346a410410a301370338200141cc006a200141346a41046a3602002001200141c0006a3602442001200141346a3602482001200141386a360240200141286a200141c0006a107c2001280230220241206a2203417f4c0d000240024020030d00410121040c010b2003102c2204450d020b200141003602482001200336024420012004360240200141c0006a200141086a41101074200141c0006a200141186a41101074200141c0006a20012802282203200210740240200128022c450d002003102e0b20012802402203200128024810ff0102402001280244450d002003102e0b200141c0006a200010a10520012802402203200128024810ff0102402001280244450d002003102e0b200141086a4192fdc6004107108102200141186a4188b2c600410e108102200120003602342001200141346a410410a301370338200141cc006a200141346a41046a3602002001200141c0006a3602442001200141346a3602482001200141386a360240200141286a200141c0006a107c2001280230220241206a2203417f4c0d000240024020030d00410121040c010b2003102c2204450d020b200141003602482001200336024420012004360240200141c0006a200141086a41101074200141c0006a200141186a41101074200141c0006a20012802282203200210740240200128022c450d002003102e0b20012802402203200128024810ff0102402001280244450d002003102e0b200141c0006a200010950320012802402200200128024810ff0102402001280244450d002000102e0b200141d0006a24000f0b1038000b1036000bae0301037f230041f0006b22032400200341086a4192fdc6004107108102200341186a41c4afc6004112108102200320013602382003200341386a410410a301370348200341ec006a2201200341386a41046a3602002003200341c8006a41086a3602642003200341386a3602682003200341c8006a360260200341286a200341e0006a107c024002404120102c2204450d002003422037024c20032004360248200341c8006a2002412010742003200328024822022003280250220410a3013703582001200220046a360200200320023602682003200341d8006a41086a3602642003200341d8006a360260200341386a200341e0006a107c0240200328024c450d002002102e0b20032802302201200328024022046a41206a2202417f4c0d010240024020020d00410121050c010b2002102c2205450d010b2000410036020820002002360204200020053602002000200341086a411010742000200341186a4110107420002003280228220220011074200020032802382201200410740240200328023c450d002001102e0b0240200328022c450d002002102e0b200341f0006a24000f0b1036000b1038000bae0301037f230041f0006b22032400200341086a4192fdc6004107108102200341186a41c0b0c6004112108102200320013602382003200341386a410410a301370348200341ec006a2201200341386a41046a3602002003200341c8006a41086a3602642003200341386a3602682003200341c8006a360260200341286a200341e0006a107c024002404120102c2204450d002003422037024c20032004360248200341c8006a2002412010742003200328024822022003280250220410a3013703582001200220046a360200200320023602682003200341d8006a41086a3602642003200341d8006a360260200341386a200341e0006a107c0240200328024c450d002002102e0b20032802302201200328024022046a41206a2202417f4c0d010240024020020d00410121050c010b2002102c2205450d010b2000410036020820002002360204200020053602002000200341086a411010742000200341186a4110107420002003280228220220011074200020032802382201200410740240200328023c450d002001102e0b0240200328022c450d002002102e0b200341f0006a24000f0b1036000b1038000b850201037f230041d0006b22022400200241086a4192fdc6004107108102200241186a41d0b3c6004110108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000ba20a08037f047e017f027e017f027e017f047e23004180026b2201240020014200370348200142003703402001200041186a29030037035820012000290310370350200041386a2000290300200041086a290300200141d0006a200141c0006a10ca080240200041286a28020041306c2202450d002000280220210303402003200341206a290300200341286a290300200141d0006a200141c0006a10ca08200341306a2103200241506a22020d000b0b200141c0006a41086a29030021042001290340210502400240024020012903502206200141d0006a41086a290300220784500d00200041346a28020022030d010b2001200537036020012004370368024020052004844200520d002001200141e0006a3602e001200141e0016a10cc020c020b200142f0f2bda1a7ee9cb9f9003703e001200141e0006a200141e0016a10cd022001200141e0006a2005200410fd01200141f0016a200141086a290300220620047d20012903002207200554ad7d200420067d2005200754ad7d2007200556200620045620062004511b22031b3703002001200720057d200520077d20031b3703e80120012003ad3703e001200141e0016a41086a21020240024020030d00200120023602fc01200141fc016a10cc020c010b200120023602fc01200141fc016a10ce020b200141f8006a2004370300200141f0006a2005370300200141e8006a41063a00002001410e3a0060200141e0006a10fe010c010b200028022c2102200141306a200520062005200654200420075420042007511b22081b22092004200720081b220a2003ad420010e70820034105742108200141e0006a41086a210b200141306a41086a290300210c2001290330210d200141f0006a210e2009210f200a21100340200141206a2002200d200f200f200d562010200c562010200c511b22031b2207200c201020031b220610fd01200e200141206a41086a290300221120067d20012903202212200754ad7d200620117d2007201254ad7d2012200756201120065620112006511b22031b3703002001201220077d200720127d20031b37036820012003ad370360201020067d2106200f200754ad21100240024020030d002001200b3602e001200141e0016a10cc020c010b2001200b3602e001200141e0016a10ce020b200620107d2110200f20077d210f200241206a2102200841606a22080d000b2001427f2004200a7d2005200954ad7d221220107c200520097d2211200f7c220c2011542203ad7c22072003200720125420072012511b22031b22063703682001427f200c20031b220737036002402011200f842012201084844200520d002001200141e0006a3602e001200141e0016a10cc020c010b200142f0f2bda1a7ee9cb9f9003703e001200141e0006a200141e0016a10cd02200141106a200141e0006a2007200610fd01200141f0016a200141106a41086a290300221020067d2001290310220f200754ad7d200620107d2007200f54ad7d200f200756201020065620102006511b22031b3703002001200f20077d2007200f7d20031b3703e80120012003ad3703e001200141e0016a41086a21020240024020030d00200120023602fc01200141fc016a10cc020c010b200120023602fc01200141fc016a10ce020b200141f8006a2006370300200141f0006a2007370300200141e8006a41063a00002001410e3a0060200141e0006a10fe010b0240200041246a2802002203450d00200341306c450d002000280220102e0b0240200041306a28020041ffffff3f71450d00200028022c102e0b20014180026a24000b8f0201027f20014180feff07714108762102024002402001410171450d00411f210341aae7cc00210102400240200241ff01710e03000103000b41c100210341e9e6cc0021010c020b41c100210341a8e6cc0021010c010b411f21034189e6cc002101024002400240024002400240024002400240200241ff01710e0a00060102030405090708000b4120210341e9e5cc0021010c080b412721034189e5cc0021010c070b4117210341f2e4cc0021010c060b41d3e4cc0021010c050b4126210341ade4cc0021010c040b412a21034183e4cc0021010c030b4139210341b0e5cc0021010c020b413b210341c8e3cc0021010c010b41d200210341f6e2cc0021010b20002003360204200020013602000b4201027f41032102024020014105490d004100210302400240024020002d00040e03020001030b410121030c010b410221030b2003410320014105461b21020b20020be30101047f0240024002400240200128020022022802042203450d00200228020022042d0000210520022003417f6a3602042002200441016a36020020050e020203010b200041023602000f0b200041023602000f0b200041003602000f0b02402001280200220228020422034104490d0020022802002204280000210520022003417c6a3602042002200441046a3602002001280200220228020422014104490d00200020053602042000410136020020022802002203280000210420022001417c6a3602042002200341046a360200200041086a20043602000f0b200041023602000bc40101047f024002400240024020012802042202450d00200128020022032d0000210420012002417f6a22053602042001200341016a36020020040e020203010b200041023602000f0b200041023602000f0b200041003602000f0b024020054104490d002003280001210520012002417b6a22043602042001200341056a36020020044104490d002000200536020420004101360200200328000521042001200241776a3602042001200341096a360200200041086a20043602000f0b200041023602000bc60401047f230041106b22022400024002400240024020002d00000e03010200010b200041046a280200220041ffff03200041ffff03491b220341c0006a41ff0020032000413e2003413e491b2204461b2100200320046b2103410121040340024002400240200441ff01714102470d00200021050c010b410021052004410171450d00410021040c010b2003450d0402400240200341ff014b0d002003417f6a2100410021030c010b200341817e6a210341ff0121000b410221040b200220003a000f20012002410f6a41011074200521000c000b0b200241003a000f20012002410f6a410110740c010b200041046a2802002203413e200341ffff03200341ffff03491b2203413e491b2104024020002d0001450d00200341406a417f20032004461b2100200320046b2103410121040340024002400240200441ff01714102470d00200021050c010b410021052004410171450d00410021040c010b2003450d0302400240200341ff014b0d002003417f6a2100410021030c010b200341817e6a210341ff0121000b410221040b200220003a000f20012002410f6a41011074200521000c000b0b200341807f7341bf7f20032004461b2100200320046b2103410121040340024002400240200441ff01714102470d00200021050c010b410021052004410171450d00410021040c010b2003450d0202400240200341ff014b0d002003417f6a2100410021030c010b200341817e6a210341ff0121000b410221040b200220003a000f20012002410f6a41011074200521000c000b0b200241106a24000b13002000411436020420004184ecc6003602000bd5b1020a017f027e057f027e027f057e107f017e047f027e230041e0066b2203240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e18000102030405060708090a0b0c0d0e0f10111213201f1e1d000b200341f4056a4101360200200342013702e4052003419cc3cb003602e005200341043602840520034194c3cb0036028005200320034180056a3602f005200341e0056a41f4ebc6001044000b200141d0006a2903002104200141c8006a2903002105200341d8026a41026a200141276a2d00003a0000200341b0036a41086a200141386a290200370300200341b0036a41106a200141c0006a2902003703002003200141256a2f00003b01d8022003200141306a2902003703b003200141246a2d00002106200141286a28020021072001412c6a2802002108200341b8046a41206a200141216a2d00003a0000200341b8046a41186a200141196a290000370300200341b8046a41106a200141116a290000370300200341b8046a41086a200141096a290000370300200320012900013703b804200341e0056a41286a200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a200241086a290200370300200320022902003703e00520034180056a200341e0056a10c10220034180046a41086a220220034180056a41096a29000037030020034180046a41106a220120034180056a41116a29000037030020034180046a41186a220920034180056a41196a29000037030020032003290081053703800402400240024020032d0080054101460d00200341d8036a41186a2009290300370300200341d8036a41106a2001290300370300200341d8036a41086a200229030037030020032003290380043703d803200341e0056a200341d8036a10e50520032802e005220120032802e805108f022102024020032802e405450d002001102e0b02402002450d00200341a8046a41031082060c020b20034180046a41026a2202200341d8026a41026a2d00003a0000200341e0056a41086a2201200341b0036a41086a290300370300200341e0056a41106a200341b0036a41106a290300370300200320032f01d8023b018004200320032903b0033703e0050240024002400240024020064107710e03000201020b200341f0026a410d6a2206200341e0056a410d6a290000370000200341f0026a41086a22092001290300370300200341d8056a41026a220120022d00003a000020034190036a41086a2202200929030037030020034190036a410d6a22092006290000370000200320032f0180043b01d805200320032903e00537039003200320012d00003a008205200320032f01d8053b0180052003200836008705200320073600830520034198056a200929000037000020034193056a2002290300370000200320032903900337008b05200341e0056a20034180056a10d30520032802e005220120032802e805108f022102024020032802e405450d002001102e0b2002450d03200341a8046a41041082060c060b02402008450d002007102e0b200341d8056a41026a2003418c036a41026a2d00003a000020034190036a41086a200341f0026a41086a29030037030020034190036a410d6a200341f0026a410d6a290000370000200320032f018c033b01d805200320032903f002370390030c010b200341d8056a41026a2003418c036a41026a2d00003a000020034190036a41086a200341f0026a41086a29030037030020034190036a410d6a200341f0026a410d6a290000370000200320032f018c033b01d805200320032903f002370390030b200341013a00a8040c030b0240200542ffc7afa0255620044200522004501b0d00200341a8046a41081082060c030b0240200341d8036a1083060d0020034180046a200341d8036a10e505200328028804210120032802800421024120102c2206450d41200342203702e405200320063602e005200341e0056a20034180056a412010742002200120032802e005220620032802e80510b201024020032802e405450d002006102e0b0240200328028404450d002002102e0b200341e0056a41206a200341b8046a41206a2d00003a0000200341e0056a41186a200341b8046a41186a290300370300200341e0056a41106a200341b8046a41106a290300370300200341e0056a41086a200341b8046a41086a290300370300200320032903b8043703e005200341e0046a200341d8036a10840620032802e804210120032802e00421022003410036028804200342013703800402400240024002400240024020032d00e0050e050001020304050b200341003a00900320034180046a20034190036a410110740c040b200341013a00900320034180046a20034190036a410110740c030b200341023a00900320034180046a20034190036a410110740c020b200341033a00900320034180046a20034190036a4101107420034180046a200341e0056a410172412010740c010b200341043a00900320034180046a20034190036a410110740b20022001200328028004220620032802880410b2010240200328028404450d002006102e0b024020032802e404450d002002102e0b20034180046a41186a2202420037030020034180046a41106a2201420037030020034180046a41086a220642003703002003420037038004200341f0026a4192fdc60041071081022006200341f0026a41086a2207290300370300200320032903f0023703800420034190036a4194adc600410a108102200220034190036a41086a22082903003703002001200329039003370300200341106a20034180046a4120108e02200328021421092003280210210a2002420037030020014200370300200642003703002003420037038004200341f0026a4192fdc600410710810220062007290300370300200320032903f0023703800420034190036a41e0a9c600410c108102200220082903003703002001200329039003370300200341086a20034180046a4120108e02200328020c21022003280208210120034180046a200341d8036a10c802200341e0056a200328028004220720032802880410c902410020094100200a1b2206200241d40020011b6b2202200220064b1b2102200341e0056a41106a290300420020032903e00542015122011b210b20032903e805420020011b210c0240200328028404450d002007102e0b200341e0056a41086a41053a0000200341e9056a20032903d803370000200341f1056a200341d8036a41086a290300370000200341f9056a200341d8036a41106a29030037000020034181066a200341d8036a41186a220129030037000020034198066a200b2004200c200554200b200454200b2004511b22071b220437030020034190066a200c200520071b2205370300200341043a00e005200341e0056a10fe012008200341eb036a2900003703002003419d036a2001290000370000200320032f01d8033b01d805200320032d00da033a00da05200320032900e303370390034100200620026b2209200920064b1b220141ffffffff03712001470d3b20014102742208417f4c0d3b20032800df03210d20032800db03210e0240024020080d00410421070c010b2008102c2207450d420b024002402008410276220a20014f0d002008410176220a2001200a20014b1b22014104200141044b1b220141ffffffff0371200146410274210a200141027421010240024020080d00200341003602e0050c010b200341e8056a4104360200200320083602e405200320073602e0050b20034180046a2001200a200341e0056a107d20034188046a28020021012003280280044101460d0120032802840421072001410276210a0b410021010240200620024d0d0020072101034020012002360200200141046a21012006200241016a2202470d000b200921010b200341e0056a41186a20043703002003419a066a20032d00da053a00002003419f066a200d3600002003419b066a200e360000200341a3066a20032903900337000020034194066a200136020020034190066a200a36020020034188066a4100360200200341ab066a20034198036a290300370000200341b0066a2003419d036a290000370000200320053703f005200320053703e005200320032f01d8053b0198062003200736028c062003420837038006200320043703e80542f3e885db96cddbb32020034198066a20052004411f10850620034180056a200341e0056a10d205024020034184066a2802002202450d00200241186c450d00200328028006102e0b024020032802900641ffffffff0371450d00200328028c06102e0b200341063a00a8040c430b2001450d3b0c410b200341a8046a41121082060c020b200341023a00a8040b200641ff01714102470d002008450d002007102e0b20032d00a8044106460d3e20032802a8042102200020032902ac04370024200041206a2002360000200041186a41003a000020004200370308200042013703000c3f0b200141106a2903002104200141086a2903002105200341e0056a41286a200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a200241086a290200370300200320022902003703e00520034180056a200341e0056a10c10220034180046a41086a220220034189056a29000037030020034180046a41106a220120034191056a29000037030020034180046a41186a220620034180056a41196a29000037030020032003290081053703800420032d0080054101460d19200341e0046a41186a2006290300370300200341e0046a41106a2001290300370300200341e0046a41086a200229030037030020032003290380043703e004200341d8036a200341e0046a10e505200341e0056a20032802d803220220032802e00310f40220034180056a41086a200341ea056a29010037030020034180056a41106a200341f2056a29010037030020034180056a41176a2201200341e0056a41196a290000370000200320032901e2053703800502400240024020032d00e0054101470d0020032d00e105210620034190036a41176a200129000037000020034190036a41106a220120034180056a41106a29030037030020034190036a41086a220820034180056a41086a290300370300200320032903800537039003024020032802dc03450d002002102e0b20034180046a41176a220720034190036a41176a29000037000020034180046a41106a22022001290300370300200341c1046a2008290300370000200341c9046a2002290300370000200341b8046a41186a2007290000370000200320063a00b80420032003290390033700b90420034190036a200341b8046a10d305200341e0056a200328029003220120032802980310e60520034180046a41086a2003419c066a2902003703002002200341a4066a29020037030020034180046a41186a2202200341ac066a29020037030020034180046a41206a2206200341b4066a280200360200200320034194066a2902003703800402402003280280062208450d00200341e0056a41186a290300210f200341e0056a41086a290300210c20034190066a28020021072003418c066a280200210920034188066a280200210a20032903f005211020032903e005210b200328028406210d200341d8036a41206a2006280200360200200341d8036a41186a2002290300370300200341d8036a41106a220220034180046a41106a290300370300200341d8036a41086a220620034180046a41086a29030037030020032003290380043703d8030240200328029403450d002001102e0b200341b0036a41086a22012006290300370300200341b0036a41106a22062002290300370300200341b0036a41186a2202200341d8036a41186a290300370300200341b0036a41206a220e200341d8036a41206a28020036020020034180056a41186a200f370300200341b0056a2007360200200341a8056a200a360200200341a4056a200d360200200320032903d8033703b00320032010370390052003200b37038005200320093602ac05200320083602a0052003200c37038805200341d4056a200e280200360200200341cc056a2002290300370200200341c4056a2006290300370200200341bc056a2001290300370200200341b4056a20032903b00337020020034180046a200341e0046a10c802200341e0056a200328028004220120032802880410c902200341e0056a41106a290300420020032903e00542015122021b210f20032903e805420020021b21100240200328028404450d002001102e20034188056a290300210c200329038005210b0b2010200b7d2211201056200f200c7d2010200b54ad7d2210200f562010200f511b0d0320034180056a41186a2202290300211220032003290390052213200520112011200556201020045620102004511b22011b22057c220f37039005200220122004201020011b22107c200f201354ad7c220437030020032005200b7c220b3703800520032010200c7c200b200554ad7c220c37038805200f42ffc7afa0255620044200522004501b0d02200341f0026a4108108206024020032802a4052202450d00200241186c450d0020032802a005102e0b20032802b00541ffffffff0371450d3e20032802ac05102e0c3e0b0240200328029403450d002001102e0b200341f0026a41011082060c3d0b024020032802dc03450d002002102e0b200341f0026a41021082060c3c0b200341e0056a41386a201037030020034190066a2005370300200341e0056a41086a41053a0000200341e9056a20032903e004370000200341f1056a200341e0046a41086a290300370000200341f9056a200341f0046a29030037000020034181066a200341e0046a41186a290300370000200341043a00e005200341e0056a10fe0142f3e885db96cddbb32020034180056a41386a200b200c411f108506200341b8046a20034180056a10d2050b024020032802a4052202450d00200241186c450d0020032802a005102e0b024020032802b00541ffffffff0371450d0020032802ac05102e0b200341063a00f0020c3b0b200141106a2903002104200141086a2903002105200341e0056a41286a2206200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a2208200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a2207200241086a290200370300200320022902003703e00520034180056a200341e0056a10c10220034190036a41086a220220034194056a2902003703002003419d036a220120034199056a290000370000200320032f0081053b01d805200320032d0083053a00da0520032003418c056a290200370390030240024020032d0080054101460d0020034180056a41086a2802002109200328028405210a200341cb046a2002290300370000200341b8046a41186a2001290000370000200320032d00da053a00ba04200320032f01d8053b01b804200320093600bf042003200a3600bb0420032003290390033700c304200341e0046a200341b8046a10d305200341e0056a20032802e004220920032802e80410e60520034180046a41086a2003419c066a29020037030020034180046a41106a200341a4066a29020037030020034180046a41186a200341ac066a29020037030020034180046a41206a200341b4066a280200360200200320034194066a2902003703800402402003280280062201450d002008290300210b2007290300210f20034190066a28020021082003418c066a28020021072006280200210620032903f005210c20032903e00521102003280284062102200341d8036a41206a220a20034180046a41206a280200360200200341d8036a41186a220d20034180046a41186a290300370300200341d8036a41106a220e20034180046a41106a290300370300200341d8036a41086a221420034180046a41086a29030037030020032003290380043703d803024020032802e404450d002009102e0b200341b0036a41086a22092014290300370300200341b0036a41106a2214200e290300370300200341b0036a41186a220e200d290300370300200341b0036a41206a220d200a28020036020020034180056a41186a200b370300200341b0056a2008360200200341a8056a2006360200200341a4056a2002360200200320032903d8033703b0032003200c370390052003201037038005200320073602ac05200320013602a0052003200f37038805200341d4056a200d280200360200200341cc056a200e290300370200200341c4056a2014290300370200200341bc056a2009290300370200200341b4056a20032903b0033702002006411f4d0d02200341a8046a4109108206024020032802a4052202450d00200241186c450d0020032802a005102e0b20032802b00541ffffffff0371450d3920032802ac05102e0c390b024020032802e404450d002009102e0b200341a8046a41011082060c380b200341023a00a8040c380b02400240200c2005200c200554200b200454200b2004511b22061b2205200b200420061b220484500d0020034180056a41186a4200200b20047d200c200554ad7d220f200c20057d22104280c8afa025544100200f501b22061b37030020034200201020061b3703900520034180046a41186a2202420037030020034190046a2208420037030020034180046a41086a220742003703002003420037038004200341f0026a4192fdc60041071081022007200341f0026a41086a290300370300200320032903f0023703800420034190036a4194adc600410a108102200220034190036a41086a2903003703002008200329039003370300200341186a20034180046a4120108e02200328021c210820032802182107024020032802a805220220032802a405470d00200241016a22092002490d382002410174220a2009200a20094b1b22094104200941044b1bad42187e220f422088a7454103742109200fa7210a0240024020020d00200341003602e0050c010b200341e0056a41086a4108360200200320013602e0052003200241186c3602e4050b20034180046a200a2009200341e0056a107d20034188046a28020021022003280280044101460d02200320032802840422013602a0052003200241186e3602a40520032802a80521020b2001200241186c6a2202200b200420061b22043703082002200c200520061b220537030020022008411c6a411c20071b360210200320032802a80541016a3602a80542f3e885db96cddbb32020034180056a41386a20032903800520034180056a41086a290300411f108506200341b8046a20034180056a10d205200341e0056a41386a200437030020034190066a2005370300200341e0056a41086a41063a0000200341e9056a20032903b805370000200341f1056a200341c0056a290300370000200341f9056a200341c8056a29030037000020034181066a200341d0056a290300370000200341043a00e005200341e0056a10fe0120032802a40521020b02402002450d00200241186c450d0020032802a005102e0b024020032802b00541ffffffff0371450d0020032802ac05102e0b200341063a00a8040c390b20020d3b0c350b200141046a280200210e200341e0056a41286a2207200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a220a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a220d200241086a290200370300200320022902003703e00520034180056a200341e0056a10c102410221022003418c036a41026a220120032d0083053a0000200341f0026a41086a220620034194056a290200370300200341fd026a220820034199056a290000370000200320032f0081053b018c0320032003418c056a2902003703f002024002400240024020032d0080054101460d0020034180056a41086a28020021022003280284052109200341f3046a2006290300370000200341e0046a41186a2008290000370000200320032f018c033b01e004200320023600e704200320093600e304200320032903f0023700eb04200320012d00003a00e204200341b8046a200341e0046a10d305200341e0056a20032802b804221420032802c00410e60520034180046a41086a2003419c066a29020037030020034180046a41106a200341a4066a29020037030020034180046a41186a200341ac066a29020037030020034180046a41206a200341b4066a280200360200200320034194066a2902003703800402402003280280062209450d00200a2903002104200d290300210f20034190066a280200210d2003418c066a28020021152007280200210220032903f005210520032903e0052110200328028406210a200341d8036a41206a220720034180046a41206a280200360200200341d8036a41186a221620034180046a41186a2201290300370300200341d8036a41106a221720034180046a41106a2206290300370300200341d8036a41086a221820034180046a41086a220829030037030020032003290380043703d803024020032802bc04450d002014102e0b200341b0036a41086a22142018290300370300200341b0036a41106a22182017290300370300200341b0036a41186a22172016290300370300200341b0036a41206a2216200728020036020020034180056a41186a2004370300200341b0056a200d360200200341a8056a2002360200200341a4056a200a360200200320032903d8033703b00320032005370390052003201037038005200320153602ac05200320093602a0052003200f37038805200341d4056a2016280200360200200341cc056a2017290300370200200341c4056a2018290300370200200341bc056a2014290300370200200341b4056a220720032903b003370200200341b8046a41186a200341d0056a220d290300370300200341b8046a41106a200341c8056a290300370300200341b8046a41086a200341c0056a290300370300200320032903b8053703b8042001420037030020064200370300200842003703002003420037038004200341f0026a4192fdc60041071081022008200341f0026a41086a290300370300200320032903f0023703800420034190036a4194adc600410a108102200120034190036a41086a2903003703002006200329039003370300200341206a20034180046a4120108e0220032802204101460d0220102105200f210b0c030b024020032802bc04450d002014102e0b200341e0056a4101108206200341da026a20032d00e3053a0000200320032f00e1053b01d80220032d00e005210220032902e40521040c030b0c020b20032802242108200341e0056a41086a2216200728020036020020034190036a41086a2217200341cb056a29000037030020034190036a410d6a2218200d290000370000200320032902ac053703e0052003200341c3056a220d290000370390032003200341b8056a22142f01003b01d8052003201441026a22192d00003a00da05200341ac056a211520034180056a41186a221a2903002111200341bf056a280000211b200341bb056a280000211c20032903900521120240024020020d0020102105200f210b200921010c010b2009200241186c6a210720102105200f210b20092102200921010340200241086a290300210c20022903002104024002402008200241106a28020022064f0d0020012004370300200120063602102001200c370308200141186a21010c010b4200200b200c7d2005200454ad7d220c200520047d2204200556200c200b56200c200b511b22061b210b4200200420061b21050b200241186a22022007470d000b0b201520032903e005370200201420032f01d8053b0100200d200329039003370000201a2011370300201920032d00da053a0000201541086a2016280200360200200d41086a2017290300370000200d410d6a2018290000370000200320123703900520032005370380052003200a3602a4052003201b3600bf052003201c3600bb052003200b37038805200320093602a0052003200120096b41186d22023602a8050b0240024020020d002003290390054280c8afa02554410020034198056a290300501b0d010b42f3e885db96cddbb320200341b8056a2005200b411f108506200ead42f8d2017e4288ca87d8017c2105200341e0046a20034180056a10d2054201210b0c350b200341e0056a200341b8046a200e108606200341b0036a41026a220120032d00e3053a0000200320032f00e1053b01b003024020032d00e00522024106470d0042f3e885db96cddbb320200341b8046a10ea024200210b0c350b20032902e4052104200341d8026a41026a20012d00003a0000200320032f01b0033b01d802024020032802a4052201450d00200141186c450d0020032802a005102e0b20032802b00541ffffffff0371450d0020032802ac05102e0b200341d4026a41026a2201200341d8026a41026a2d00003a0000200320032800a8043602e002200320032f01d8023b01d4022003200341ab046a2800003600e302200041186a41003a000020004200370308200020032802e0023600192000411c6a20032800e302360000200041206a20023a000020002004370024200020032f01d4023b0021200041236a20012d00003a0000200042013703000c3c0b200141086a2d00002108200141046a2802002107200341e0056a41286a2209200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a220a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a220d200241086a290200370300200320022902003703e00520034180056a200341e0056a10c10220034180046a41086a220220034189056a29000037030020034180046a41106a220120034191056a29000037030020034180046a41186a220620034199056a29000037030020032003290081053703800420032d0080054101460d15200341b8046a41186a2006290300370300200341b8046a41106a2001290300370300200341b8046a41086a200229030037030020032003290380043703b804200341e0046a200341b8046a10d305200341e0056a20032802e004220e20032802e80410e60520022003419c066a2902003703002001200341a4066a2902003703002006200341ac066a29020037030020034180046a41206a200341b4066a280200360200200320034194066a2902003703800402402003280280062201450d00200a2903002104200d290300210520034190066a28020021062003418c066a280200210a2009280200210920032903f005210b20032903e005210c2003280284062102200341d8036a41206a220d20034180046a41206a280200360200200341d8036a41186a221420034180046a41186a290300370300200341d8036a41106a221520034180046a41106a290300370300200341d8036a41086a221620034180046a41086a29030037030020032003290380043703d803024020032802e404450d00200e102e0b200341b0036a41086a220e2016290300370300200341b0036a41106a22162015290300370300200341b0036a41186a22152014290300370300200341b0036a41206a2214200d28020036020020034180056a41186a2004370300200341b0056a2006360200200341a8056a2009360200200341a4056a2002360200200320032903d8033703b0032003200b370390052003200c370380052003200a3602ac05200320013602a0052003200537038805200341d4056a2014280200360200200341cc056a2015290300370200200341c4056a2016290300370200200341bc056a200e290300370200200341b4056a20032903b003370200200341e0056a200341b8056a220910d10520032802e005220d20032802e80510ff01024020032802e405450d00200d102e0b200320083a00dc03200320073602d80320034180046a200910860520032802880421092003280280042107200341003602e805200342013703e005200341d8036a200341e0056a109102200320083a00b003200341e0056a200341b0036a410110742007200920032802e005220820032802e80510b201024020032802e405450d002008102e0b0240200328028404450d002007102e0b02402002450d00200241186c450d002001102e0b0240200641ffffffff0371450d00200a102e0b200341063a0090030c320b024020032802e404450d00200e102e0b20034190036a410110820620032d0090034106460d3120032902940321040c300b2001410c6a2802002106200141086a2802002108200141046a2802002107200341e0056a41286a2209200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a220a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a220d200241086a290200370300200320022902003703e00520034180056a200341e0056a10c10220034190036a41086a220220034194056a2902003703002003419d036a220120034199056a290000370000200320032f0081053b01d805200320032d0083053a00da05200320034180056a410c6a290200370390030240024002400240024020032d0080054101460d0020034180056a41086a280200210e2003280284052114200341f3046a2002290300370000200341e0046a41186a2001290000370000200320032d00da053a00e204200320032f01d8053b01e0042003200e3600e704200320143600e30420032003290390033700eb04200341b8046a200341e0046a10d305200341e0056a20032802b804220e20032802c00410e60520034180046a41086a2003419c066a29020037030020034180046a41106a200341a4066a29020037030020034180046a41186a200341ac066a29020037030020034180046a41206a200341b4066a280200360200200320034194066a29020037038004024002402003280280062201450d00200a2903002104200d290300210520034190066a280200210a2003418c066a280200210d2009280200210920032903f005210b20032903e005210c2003280284062102200341d8036a41206a221420034180046a41206a280200360200200341d8036a41186a221520034180046a41186a290300370300200341d8036a41106a221620034180046a41106a290300370300200341d8036a41086a221720034180046a41086a29030037030020032003290380043703d803024020032802bc04450d00200e102e0b200341b0036a41086a220e2017290300370300200341b0036a41106a22172016290300370300200341b0036a41186a22162015290300370300200341b0036a41206a2215201428020036020020034180056a41186a2004370300200341b0056a200a360200200341a8056a2009360200200341a4056a2002360200200320032903d8033703b0032003200b370390052003200c370380052003200d3602ac05200320013602a0052003200537038805200341d4056a2015280200360200200341cc056a2016290300370200200341c4056a2017290300370200200341bc056a200e290300370200200341b4056a20032903b00337020020060d01200341e0026a410510820602402002450d00200241186c450d002001102e0b200a41ffffffff0371450d05200d102e0c050b024020032802bc04450d00200e102e0b200341e0026a41011082060c020b024020064111490d00200341e0026a411310820602402002450d00200241186c450d002001102e0b200a41ffffffff0371450d03200d102e0c030b20034180046a200341b8056a221510d105200341e0056a2003280280042202200328028804108706200341f0026a41086a2201200341e0056a41086a290300370300200320032903e0053703f0020240024020032d00f0054102460d00200341b8046a41086a2001290300370300200320032903f0023703b8040240200328028404450d002002102e0b200341a8046a41086a200341b8046a41086a280200360200200320032903b8043703a8040c010b0240200328028404450d002002102e0b200341003602b004200342013703a8040b200341063a00f00220032007200641246c6a3602e403200320073602e003200320083602dc03200320073602d8032003200341f0026a3602ec032003200341a8046a3602e803200341e0056a200341d8036a1088060240024020032d00e0054101470d004120102c2209450d3f200920032900e105370000200941186a200341f9056a290000370000200941106a200341f1056a290000370000200941086a200341e9056a29000037000020034180046a41106a200341d8036a41106a29030037030020034180046a41086a200341d8036a41086a290300370300200320032903d80337038004200341e0056a20034180046a10880602400240024020032d00e0050d0041012101410121080c010b200341e0056a41017221024120210741012101410121080340200341b8046a41186a220a200241186a290000370300200341b8046a41106a220d200241106a290000370300200341b8046a41086a220e200241086a290000370300200320022900003703b804024020082001470d00200141016a22062001490d3d200141017422142006201420064b1b22064104200641044b1b220641ffffff3f712006462114200641057421060240024020010d00200341003602b0030c010b200341013602b803200320093602b003200320014105743602b4030b20034190036a20062014200341b0036a107d20032802980321012003280290034101460d032003280294032109200141057621010b200920076a220620032903b804370000200641186a200a290300370000200641106a200d290300370000200641086a200e290300370000200741206a2107200841016a2108200341e0056a20034180046a10880620032d00e0050d000b0b200328028c0420032802880422026b220641246d210702402006450d00200741246c21060340024020022d00004102470d00200241086a280200450d00200241046a280200102e0b200241246a21022006415c6a22060d000b0b2003280284042202450d02200241246c450d02200328028004102e0c020b20010d3f0c390b20032802e40320032802e00322026b220141246d210602402001450d00200641246c21010340024020022d00004102470d00200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b4100210141012109024020032802dc032202450d00200241246c450d0020032802d803102e0b410021080b200341f0026a41086a2102024020032d00f00222064106460d0020032f00f10220032d00f3024110747221082002280200210220032802f40221070240200141ffffff3f71450d002009102e0b200341e8026a2002360200200320073602e402200320063a00e002200320083b00e102200320084110763a00e302024020032802ac0441ffffff3f71450d0020032802a804102e0b024020032802a4052202450d00200241186c450d0020032802a005102e0b20032802b00541ffffffff0371450d0520032802ac05102e0c050b20034198046a2206420037030020034180046a41106a2207420037030020034180046a41086a220a4200370300200342003703800420034190036a4192fdc6004107108102200a20034190036a41086a290300370300200320032903900337038004200341f0026a4194adc600410a10810220062002290300370300200720032903f002370300200341286a20034180046a4120108e02200328022c210220032802282106200341e0056a201510860520032802e005220720032802e80510ff01024020032802e405450d002007102e0b2002410020061b210a200341b8046a201510d10520032802c004210d20032802b8042107200341003602e805200342013703e0052008200341e0056a107602402008450d0020084105742106200921020340200341e0056a200241201074200241206a2102200641606a22060d000b0b2003200a36028004200341e0056a20034180046a41041074200341003a00b003200341e0056a200341b0036a410110742007200d20032802e005220220032802e80510b201024020032802e405450d002002102e0b024020032802bc04450d002007102e0b0240200141ffffff3f71450d002009102e0b024020032802ac0441ffffff3f71450d0020032802a804102e0b024020032802a4052202450d00200241186c450d0020032802a005102e0b024020032802b00541ffffffff0371450d0020032802ac05102e0b200341063a00e0020c330b200341023a00e0020b2006450d010b200641246c2101200721020340024020022d00004102470d00200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b2008450d00200841246c450d002007102e0b20032d00e0024106460d2e20032802e0022102200020032902e402370024200041206a2002360000200041186a41003a000020004200370308200042013703000c3a0b200341e0056a41286a2208200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a2207200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a2209200241086a290200370300200320022902003703e00520034180056a200341e0056a10c10220034180046a41086a220220034189056a29000037030020034180046a41106a220120034191056a29000037030020034180046a41186a220620034199056a29000037030020032003290081053703800420032d0080054101460d12200341b8046a41186a2006290300370300200341b8046a41106a2001290300370300200341b8046a41086a200229030037030020032003290380043703b804200341e0046a200341b8046a10d305200341e0056a20032802e004220a20032802e80410e60520022003419c066a2902003703002001200341a4066a2902003703002006200341ac066a29020037030020034180046a41206a200341b4066a280200360200200320034194066a2902003703800402402003280280062201450d00200729030021042009290300210520034190066a28020021062003418c066a28020021072008280200210820032903f005210b20032903e005210c2003280284062102200341d8036a41206a220920034180046a41206a280200360200200341d8036a41186a220d20034180046a41186a290300370300200341d8036a41106a220e20034180046a41106a290300370300200341d8036a41086a221420034180046a41086a29030037030020032003290380043703d803024020032802e404450d00200a102e0b200341b0036a41086a220a2014290300370300200341b0036a41106a2214200e290300370300200341b0036a41186a220e200d290300370300200341b0036a41206a220d200928020036020020034180056a41186a2004370300200341b0056a2006360200200341a8056a2008360200200341a4056a2002360200200320032903d8033703b0032003200b370390052003200c37038005200320073602ac05200320013602a0052003200537038805200341d4056a200d280200360200200341cc056a200e290300370200200341c4056a2014290300370200200341bc056a200a290300370200200341b4056a20032903b003370200200341e0056a200341b8056a220810860520032802e005220920032802e80510ff01024020032802e405450d002009102e0b200341e0056a200810d10520032802e005220820032802e80510ff01024020032802e405450d002008102e0b02402002450d00200241186c450d002001102e0b0240200641ffffffff0371450d002007102e0b200341063a0090030c2d0b024020032802e404450d00200a102e0b20034190036a410110820620032d0090034106460d2c20032902940321040c2b0b200341b8046a41206a200141216a2d00003a0000200341b8046a41186a200141196a290000370300200341b8046a41106a200141116a290000370300200341b8046a41086a200141096a290000370300200320012900013703b804200341e0056a41286a2208200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a2207200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a2209200241086a290200370300200320022902003703e00520034180056a200341e0056a10c10220034180046a41086a220220034180056a41096a29000037030020034180046a41106a220120034180056a41116a29000037030020034180046a41186a220620034180056a41196a29000037030020032003290081053703800420032d0080054101460d10200341e0046a41186a2006290300370300200341e0046a41106a2001290300370300200341e0046a41086a200229030037030020032003290380043703e00420034190036a200341e0046a10d305200341e0056a200328029003220a20032802980310e60520022003419c066a2902003703002001200341a4066a2902003703002006200341ac066a29020037030020034180046a41206a200341b4066a280200360200200320034194066a2902003703800402402003280280062201450d00200729030021042009290300210520034190066a28020021062003418c066a28020021072008280200210820032903f005210b20032903e005210c2003280284062102200341d8036a41206a220920034180046a41206a280200360200200341d8036a41186a220d20034180046a41186a290300370300200341d8036a41106a220e20034180046a41106a290300370300200341d8036a41086a221420034180046a41086a29030037030020032003290380043703d8030240200328029403450d00200a102e0b200341b0036a41086a220a2014290300370300200341b0036a41106a2214200e290300370300200341b0036a41186a220e200d290300370300200341b0036a41206a220d200928020036020020034180056a41186a2004370300200341b0056a2006360200200341a8056a2008360200200341a4056a2002360200200320032903d8033703b0032003200b370390052003200c37038005200320073602ac05200320013602a0052003200537038805200341d4056a200d280200360200200341cc056a200e290300370200200341c4056a2014290300370200200341bc056a200a290300370200200341b4056a20032903b003370200200341e0056a41206a200341b8046a41206a2d00003a0000200341e0056a41186a200341b8046a41186a290300370300200341e0056a41106a200341b8046a41106a290300370300200341e0056a41086a200341b8046a41086a290300370300200320032903b8043703e005200341d8036a200341b8056a10840620032802e003210920032802d80321082003410036028804200342013703800402400240024002400240024020032d00e0050e050001020304050b200341003a00b00320034180046a200341b0036a410110740c040b200341013a00b00320034180046a200341b0036a410110740c030b200341023a00b00320034180046a200341b0036a410110740c020b200341033a00b00320034180046a200341b0036a4101107420034180046a200341e0056a410172412010740c010b200341043a00b00320034180046a200341b0036a410110740b20082009200328028004220a20032802880410b2010240200328028404450d00200a102e0b024020032802dc03450d002008102e0b02402002450d00200241186c450d002001102e0b0240200641ffffffff0371450d002007102e0b200341063a00f0020c2a0b0240200328029403450d00200a102e0b200341f0026a410110820620032d00f0024106460d2920032902f40221040c280b200341d8026a41026a200141076a2d00003a0000200341e0046a41086a200141186a290200370300200341e0046a41106a200141206a2902003703002003200141056a2f00003b01d8022003200141106a2902003703e004200141046a2d00002106200141086a28020021082001410c6a2802002101200341e0056a41286a200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a200241086a290200370300200320022902003703e00520034180056a200341e0056a10c1022003418c036a41026a220220032d0083053a0000200341f0026a41086a220720034194056a290200370300200341fd026a220920034180056a41196a290000370000200320032f0081053b018c03200320034180056a410c6a2902003703f00202400240024020032d0080054101460d0020034180056a41086a220a280200210d200328028405210e200341c3036a2007290300370000200341b0036a41186a2009290000370000200320032f018c033b01b0032003200d3600b7032003200e3600b303200320032903f0023700bb03200320022d00003a00b203200341b8046a200341b0036a10e505200341e0056a20032802b804220220032802c00410f402200a200341ea056a29010037030020034180056a41106a200341f2056a29010037030020034180056a41176a2207200341e0056a41196a290000370000200320032901e20537038005024002400240024020032d00e0054101470d0020032d00e105210920034190036a41176a200729000037000020034190036a41106a220720034180056a41106a29030037030020034190036a41086a220a20034180056a41086a290300370300200320032903800537039003024020032802bc04450d002002102e0b20034180046a41176a220220034190036a41176a29000037000020034180046a41106a220d2007290300370300200341e1036a200a290300370000200341e9036a200d290300370000200341d8036a41186a2002290000370000200320093a00d80320032003290390033700d90320034180056a41026a2202200341d8026a41026a2d00003a0000200320032f01d8023b018005200341e0056a41086a200341e0046a41086a290300370300200341e0056a41106a200341e0046a41106a290300370300200320032903e0043703e0050240024020064107710e03000301030b20034180046a41186a2206200341e0056a410d6a29000037000020034180046a41136a2207200341e0056a41086a29030037000020034190036a41086a2209200729000037030020034190036a410d6a22072006290000370000200320032f01800522063b0180042003200136008704200320022d000022023a008204200320063b01d805200320032903e00537039003200320023a00da05200320032d00da053a00ba04200320032f01d8053b01b804200320013600bf04200320083600bb04200341b8046a41186a2007290000370000200341b8046a41136a200929030037000020032003290390033700c304200341e0056a200341b8046a10d30520032802e005220120032802e805108f022102024020032802e405450d002001102e0b2002450d04200341a8046a41041082060c070b02402001450d002008102e0b20034198036a20034193046a2900003703002003419d036a20034198046a290000370000200320032f0180043b01d805200320032d0082043a00da052003200329008b04370390030c020b024020032802bc04450d002002102e0b200341a8046a41021082060c040b20034198036a20034193046a2900003703002003419d036a20034180046a41186a290000370000200320032f0180043b01d805200320032d0082043a00da052003200329008b04370390030b200341013a00a8040c030b200341b8046a200341d8036a412010ec08450d2820034180056a200341b0036a10e505200328028805210120032802800521024120102c2206450d38200342203702e405200320063602e005200341e0056a200341b8046a412010742002200120032802e005220620032802e80510b201024020032802e405450d002006102e0b0240200328028405450d002002102e0b20034190036a200341d8036a10d305200341e0056a2003280290032201200328029803220610e60502402003280280062202450d002001200610ff010b20034180046a41086a22062003419c066a29020037030020034180046a41106a2208200341a4066a29020037030020034180046a41186a2207200341ac066a29020037030020034180046a41206a2209200341b4066a280200360200200320034194066a2902003703800402402002450d00200341e0056a41186a2903002104200341e0056a41086a290300210520034190066a280200210a2003418c066a280200210d20034188066a280200210e20032903f005210b20032903e005210c200328028406211420034180056a41206a200928020036020020034180056a41186a200729030037030020034180056a41106a200829030037030020034180056a41086a20062903003703002003200329038004370380050240200328029403450d002001102e0b200341e0056a41186a200437030020034190066a200a36020020034188066a2201200e36020020034184066a201436020020034194066a2003290380053702002003419c066a20034188056a290300370200200341a4066a20034180056a41106a290300370200200341ac066a20034180056a41186a290300370200200341b4066a20034180056a41206a2802003602002003200b3703f005200320053703e8052003200c3703e0052003200d36028c06200320023602800620034190036a200341b8046a10d305200328029803210820032802900321062003410036028804200342013703800420034180046a20034198066a412010742003200341e0056a3602f002200341f0026a20034180046a10af012003200341e0056a41106a3602f002200341f0026a20034180046a10af0120032802800621022001280200220120034180046a10760240200141186c2201450d00200220016a21010340200320023602f002200341f0026a20034180046a10af01200241106a20034180046a109102200241186a22022001470d000b0b200328028c062102200328029406220120034180046a107620034180046a20022001410274107420062008200328028004220220032802880410b2010240200328028404450d002002102e0b0240200328029403450d002006102e0b02402003280284062202450d00200241186c450d00200328028006102e0b20032802900641ffffffff0371450d29200328028c06102e0c290b200328029403450d282001102e0c280b200341023a00a8040b200641ff01714102470d002001450d002008102e0b20032d00a8044106460d2620032802a8042102200020032902ac04370024200041206a2002360000200041186a41003a000020004200370308200042013703000c370b200141046a2802002101200341e0056a41286a200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a200241086a290200370300200320022902003703e0050240200341e0056a10a705450d00200341d8036a41026a200341b8046a41026a2d000022023a0000200320032f00b80422013b01d803200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c370b20034180046a41186a2202420037030020034180046a41106a2206420037030020034180046a41086a220842003703002003420037038004200341f0026a4192fdc60041071081022008200341f0026a41086a290200370300200320032902f0023703800420034190036a41b4aac600410e108102200220034190036a41086a2903003703002006200329039003370300200320013602e00520034180046a4120200341e0056a410410b201200041186a41003a00002000420037030820002003280080053600192000411c6a20034183056a280000360000200042003703000c360b200141046a2802002108200341e0056a41286a200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a200241086a290200370300200320022902003703e0050240200341e0056a10a705450d00200341d8036a41026a200341b8046a41026a2d000022023a0000200320032f00b80422013b01d803200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c360b20034180046a41186a2202420037030020034180046a41106a2201420037030020034180046a41086a220642003703002003420037038004200341f0026a4192fdc60041071081022006200341f0026a41086a2207290200370300200320032902f0023703800420034190036a41b4aac600410e108102200220034190036a41086a22092903003703002001200329039003370300200341306a20034180046a4120108e022003280234210a2003280230210d2002420037030020014200370300200642003703002003420037038004200341f0026a4192fdc600410710810220062007290200370300200320032902f0023703800420034190036a41b4aac600410e1081022002200929030037030020012003290390033703002003200a4100200d1b20086a3602e00520034180046a4120200341e0056a410410b201200041186a41003a00002000420037030820002003280080053600192000411c6a20034183056a280000360000200042003703000c350b20012d00012101200341e0056a41286a200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a200241086a290200370300200320022902003703e0050240200341e0056a10a7050d0020034180046a41186a2202420037030020034180046a41106a2206420037030020034180046a41086a220842003703002003420037038004200341f0026a4192fdc60041071081022008200341f0026a41086a2207290200370300200320032902f0023703800420034190036a41b4aac600410e108102200220034190036a41086a22092903003703002006200329039003370300200341386a20034180046a4120108e02200328023c210a2003280238210d2002420037030020064200370300200842003703002003420037038004200341f0026a4192fdc600410710810220082007290200370300200320032902f0023703800420034190036a41b4aac600410e1081022002200929030037030020062003290390033703002003200a4100200d1b220241e4006e20016c200241e4007020016c220141e4006e41ff0120014180c801491b200141e4007041324b6a41ff01716a20026a3602e00520034180046a4120200341e0056a410410b201200041186a41003a00002000420037030820002003280080053600192000411c6a20034183056a280000360000200042003703000c350b200341d8036a41026a200341b8046a41026a2d000022023a0000200320032f00b80422013b01d803200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c340b200341e0056a41286a200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a2201200241086a290200370300200320022902003703e005200341e0056a10a7050d0a200341b8046a41186a22024200370300200341b8046a41106a22064200370300200341b8046a41086a22084200370300200342003703b804200341e0056a4192fdc600410710810220082001290000370300200320032900e0053703b804200341e0056a41b8b2c600410810810220022001290000370300200620032900e005370300200341003602e805200342013703e005200341023a00b003200341e0056a200341b0036a41011074200341b8046a412020032802e005220220032802e80510b201024020032802e405450d002002102e0b200041186a41003a00002000420037030820002003280080053600192000411c6a20034183056a280000360000200042003703000c330b200341e0056a41286a200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a2201200241086a290200370300200320022902003703e005200341e0056a10a7050d08200341b8046a41186a22024200370300200341b8046a41106a22064200370300200341b8046a41086a22084200370300200342003703b804200341e0056a4192fdc600410710810220082001290000370300200320032900e0053703b804200341e0056a41b8b2c600410810810220022001290000370300200620032900e005370300200341003602e805200342013703e005200341013a00b003200341e0056a200341b0036a41011074200341b8046a412020032802e005220220032802e80510b201024020032802e405450d002002102e0b200041186a41003a00002000420037030820002003280080053600192000411c6a20034183056a280000360000200042003703000c320b2001410c6a2802002106200141086a2802002108200141046a2802002107200341e0056a41286a200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a200241086a290200370300200320022902003703e0050240200341e0056a10a7050d0020034180046a41186a2202420037030020034180046a41106a2201420037030020034180046a41086a220942003703002003420037038004200341f0026a4192fdc60041071081022009200341f0026a41086a290200370300200320032902f0023703800420034190036a418cabc600410d108102200220034190036a41086a290300370300200120032903900337030020064105744104722202417f4c0d2a2002102c2201450d30200341003602e805200320023602e405200320013602e0052006200341e0056a107602402006450d0020064105742101200721020340200341e0056a200241201074200241206a2102200141606a22010d000b0b20034180046a412020032802e005220220032802e80510b201024020032802e405450d002002102e0b0240200841ffffff3f71450d002007102e0b200042003703082000200328008005360019200041186a41003a00002000411c6a20034183056a280000360000200042003703000c320b0240200841ffffff3f71450d002007102e0b200341d8036a41026a200341b8046a41026a2d000022023a0000200320032f00b80422013b01d803200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c310b200141246a280200210620034180056a41186a200141196a29000037030020034180056a41106a200141116a29000037030020034180056a41086a200141096a2900003703002003200129000137038005200341e0056a41286a200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a200241086a290200370300200320022902003703e005200341e0056a10a7050d05200341e0056a20034180056a2006108606200341b0036a41026a220120032d00e3053a0000200320032f00e1053b01b003024020032d00e00522024106460d0020032902e405210420034180046a41026a20012d00003a0000200320032f01b0033b0180040c1e0b42f3e885db96cddbb32020034180056a10ea02200041186a41003a000020004200370308200020032800b8043600192000411c6a200341bb046a280000360000200042003703000c300b200341e0056a41286a200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a2201200241086a290200370300200320022902003703e005200341e0056a10a7050d03200341b8046a41186a22024200370300200341b8046a41106a22064200370300200341b8046a41086a22084200370300200342003703b804200341e0056a4192fdc600410710810220082001290000370300200320032900e0053703b804200341e0056a41b8b2c600410810810220022001290000370300200620032900e005370300200341003602e805200342013703e005200341033a00b003200341e0056a200341b0036a41011074200341b8046a412020032802e005220220032802e80510b201024020032802e405450d002002102e0b200041186a41003a00002000420037030820002003280080053600192000411c6a20034180056a41036a280000360000200042003703000c2f0b200141046a280200211b2002410e6a2f010021092002410d6a2d0000210a2002410c6a2d0000210d2002410a6a2f0100210e200241096a2d00002114200241086a2d00002115200241046a2d00002108200141106a28020021072001410c6a280200211a200141086a280200211920022802282101024020022d000022060d002002411a6a2901002104200241196a2d00002106200241186a2d00002116200241166a2f01002117200241156a2d00002118200241146a2d0000211c200241126a2f0100211d200241116a2d0000211e200241106a2d0000211f200241066a2f01002120200241056a2d00002121200241026a2f0100212220022d0001210220012001280200417f6a2223360200024020230d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22232023280200417f6a222336020020230d002001102e0b200320043701d004200320063a00cf04200320163a00ce04200320173b01cc04200320183a00cb042003201c3a00ca042003201d3b01c8042003201e3a00c7042003201f3a00c604200320093b01c4042003200a3a00c3042003200d3a00c2042003200e3b01c004200320143a00bf04200320153a00be04200320203b01bc04200320213a00bb04200320083a00ba04200320223b01b8040240200241ff01710d00410321060c010b4110102c2202450d2d200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d2d20014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a22163602004100210620160d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22162016280200417f6a221636020020160d002002102e0b024002402006417f6a0e03001a011a0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b200841ff01710d18200e4110742014410874722015724102742009411074200a41087472200d7241036c490d180b024020070d0020034180046a41051082060c1a0b200741016a210120192102024003402001417f6a22014102490d01200241046a210620022802002108200241046a210220082006280200490d000b20034180046a410e1082060c1a0b200341e0056a201b10f90520034180056a20032802e005220220032802e80510f5050240024020032802800522180d004100211c200341003602c004200342083703b80441082118410021170c010b200320032902840522043702bc04200320183602b8042004422088a721172004a7211c0b024020032802e405450d002002102e0b02402007410274220d20196a417c6a2802002017490d0020034180046a410710820602402017450d00201741d8006c2101201841306a210203400240200241746a2802002206450d00200641306c450d00200241706a280200102e0b0240200228020041ffffff3f71450d002002417c6a280200102e0b200241d8006a2102200141a87f6a22010d000b0b201c450d1a201c41d8006c450d1a2018102e0c1a0b201741d8006c210641002101417f2108201921070340201720016a220920012007280200220e6a22024d0d022018200241d8006c6a220228022c211520022802202116200241306a2802002114200241246a280200210a2002200241d8006a20092008200e6b6a41d8006c10ea081a20032009417f6a3602c0040240200a450d00200a41306c450d002016102e0b0240201441ffffff3f71450d002015102e0b200741046a2107200841016a21082001417f6a2101200641a87f6a2106200d417c6a220d450d170c000b0b200141246a2802002106200341e0046a41186a2208200141196a290000370300200341e0046a41106a2207200141116a290000370300200341e0046a41086a2209200141096a290000370300200320012900013703e004200341e0056a41286a200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a200241086a290200370300200320022902003703e00520034180056a200341e0056a10c10220032d0080054101460d0e200341b0036a41186a2008290300370300200341b0036a41106a2007290300370300200341b0036a41086a2009290300370300200320032903e0043703b00320034180046a41186a2201420037030020034180046a41106a2202420037030020034180046a41086a220842003703002003420037038004200341f0026a4192fdc60041071081022008200341f0026a41086a290200370300200320032902f0023703800420034190036a4194adc600410a108102200120034190036a41086a2903003703002002200329039003370300200341b8026a20034180046a4120108e0220032802b802450d0d024020032802bc02220120064f0d00200341e0026a410c1082060c130b20034198046a420037030020034180046a41106a420037030020034180046a41086a220842003703002003420037038004200341f0026a4192fdc60041071081022008200341f0026a41086a290200370300200320032902f0023703800420034190036a41e0a9c600410c108102200241086a20034190036a41086a2903003700002002200329039003370000200341b0026a20034180046a4120108e02024020064100200120032802b40241d40020032802b0021b6b2202200220014b1b22074f0d00200341e0026a410c1082060c130b200341e0056a200610970320034198026a20032802e005220120032802e80510f80220034198026a41106a290300210420032903a00221052003280298022102024020032802e405450d002001102e0b02402002450d00200341d8036a200341b0036a10e505200341e0056a20032802d803220120032802e00310f40220034180046a41086a200341e0056a41096a29000037030020034180046a41106a200341e0056a41116a29000037030020034198046a2208200341f9056a290000370300200320032900e10537038004410121020240024020032d00e0054101460d00410021020c010b20034180056a41086a20034180046a41096a29000037030020034180056a41106a20034180046a41116a29000037030020034197056a200829000037000020032003290081043703800520032d00800421080b024020032802dc03450d002001102e0b2002450d1120034190036a41176a220220034180056a41176a29000037000020034190036a41106a220120034180056a41106a290300370300200341c1046a20034180056a41086a290300370000200341c9046a2001290300370000200341b8046a41186a2002290000370000200320083a00b80420032003290380053700b90420034190036a200341b8046a10d305200341e0056a200328029003220e20032802980310e60520034180046a41086a22022003419c066a29020037030020034180046a41106a2201200341a4066a29020037030020034180046a41186a2209200341ac066a29020037030020034180046a41206a220a200341b4066a280200360200200320034194066a29020037038004200328028006220d450d12200341e0056a41186a290300210b200341e0056a41086a290300210c20034190066a28020021142003418c066a280200210820034188066a280200211520032903f005210f20032903e00521102003280284062116200341d8036a41206a200a280200360200200341d8036a41186a2009290300370300200341d8036a41106a2001290300370300200341d8036a41086a200229030037030020032003290380043703d8030240200328029403450d00200e102e0b20034180056a41186a200b370300200341b0056a2014360200200341a8056a2015360200200341a4056a2016360200200341b4056a220220032903d803370200200341bc056a200341e0036a290300370200200341c4056a200341e8036a290300370200200341cc056a200341d8036a41186a290300370200200341d4056a200341f8036a2802003602002003200f370390052003201037038005200320083602ac052003200d3602a0052003200c370388052002280200210d4100210920024100360200410021140240200d450d004100210e410021144100210102400340024002402014450d002001410274210203402007200820026a280200220a4b0d022008200e6a20026a200a3602000240200d200141016a220a4d0d00200241046a210220032802ac052108200a21010c010b0b200141016a21010c030b200820014102746a21020340200720022802004b0d01200241046a2102200d200141016a22014b0d000b410021140c030b200e417c6a210e201441016a2114200d200141016a22014b0d000b0b024020140d00410021140c010b20032802ac052202200120146b4102746a200220014102746a200d20016b41027410ea081a0b2003200d20146b220a3602b40520032802ac0521070240024002400240024002400240200a0e020201000b41002109200a2102034020092002410176220120096a22082006200720084102746a280200491b2109200220016b220241014b0d000b0b02402006200720094102746a2802002202470d00200341e0026a410f1082060c020b200a2009200620024b6a2209490d030b0240024002400240200a20032802b005470d00200a41016a2202200a490d2e200a41017422012002200120024b1b22024104200241044b1b220241ffffffff037120024641027421012002410274210202400240200a0d00200341003602e0050c010b200341e8056a4104360200200320073602e0052003200a4102743602e4050b20034180046a20022001200341e0056a107d20034188046a28020021022003280280044101460d01200320032802840422073602ac05200320024102763602b0050b200720094102746a220241046a2002200a20096b41027410ea081a200220063602002003200a41016a3602b40520034180046a2006200341b8056a220a10f705200341e0056a200328028004220220032802880410a20320032802800622150d01420021104100211a410821154100211641002117420021114200210c4200210f0c020b20020d320c2c0b20032f00850620034187066a2d0000411074724108742117200341e0056a41086a290300210f200341f8056a290300211120034188066a280200211a20032903e005210c20032903f005211020032d00840621160b0240200328028404450d002002102e0b200341b8046a20034180056a10d205200341f0026a4192fdc600410710810220034190036a41ed9fc5004110108102200320063602d8052003200341d8056a410410a3013703d803200341ec056a200341d8056a41046a3602002003200341e0036a3602e4052003200341d8056a3602e8052003200341d8036a3602e00520034180046a200341e0056a107c200328028804220141206a2202417f4c0d2a0240024020020d00410121080c010b2002102c2208450d310b200341003602e003200320023602dc03200320083602d803200341d8036a200341f0026a41101074200341d8036a20034190036a41101074200341d8036a2003280280042202200110740240200328028404450d002002102e0b200341e0056a20032802d803220220032802e00310a20520034180046a41086a2201200341ec056a290200370300200320032902e405370380040240024020032802e0054101460d00200341a8046a41086a420037030041002119200341003602a8040c010b200341a8046a41086a20012903003703002003200329038004220b3703a804200ba721190b024020032802dc03450d002002102e0b200341a8046a41047221180240200341b0046a280200220d450d0020032802ac04210e0340200d41046a2107200d41346a2101200d2f013222144105742102417f2108024002400340024020020d00201421080c020b200a2001412010ec082209450d02200841016a2108200741046a2107200241606a2102200141206a21012009417f4a0d000b0b200e450d02200e417f6a210e200d20084102746a4194036a280200210d0c010b0b200728020022010d020b200341063a00e002201810bc0220172016722202450d00200241306c450d002015102e0b024020032802a4052202450d00200241186c450d0020032802a005102e0b20032802b00541ffffffff0371450d1620032802ac05102e0c160b20194101201941014b1b2202418094ebdc036e2002418094ebdc03704100476a22084101200841014b1b220820024b0d0120034180026a20052004428094ebdc03420010e608200341f0016a20052004428094ebdc03420010e708200341e0016a20032903f001200341f0016a41086a2903002002200120022001491b20086ead428094ebdc037e200220086ead8042ffffffff0f832204420010e808200341e0056a2006200341b0036a10f80520034190026a20032802e005220120032802e805108705200341e0016a41086a29030020032903e001220520042003290380027e2204428094ebdc0380a72004428094ebdc03824280cab5ee01566aad7c2204200554ad7c2105410020032802900220032d0094024102461b2102024020032802e405450d002001102e0b200341b8016a20042005428094ebdc03420010e608200341a8016a20042005428094ebdc03420010e70820034198016a20032903a801200341a8016a41086a2903002002ad220b420010e80820034188016a2004200329039801221220032903b801200b7e220b428094ebdc0380a7417f200b428080808080c0b2cd3b541b200b428094ebdc03824280cab5ee01566aad7c220b7d2213200520034198016a41086a290300200b201254ad7c22247d2004200b54ad7d2204428094ebdc03420010e608200341f8006a20132004428094ebdc03420010e70820102011200c200f1082052102200341e8006a20032903782210200341f8006a41086a29030022112002ad2204420010e808200341c8016a200a20032903682205200329038801221220047e2204428094ebdc0380a7417f2004428080808080c0b2cd3b541b2004428094ebdc03824280cab5ee01566aad7c2204200b7c220b200341e8006a41086a2903002004200554ad7c20247c200b200454ad7c10890620034180046a41106a200341c8016a41106a2903002205370300200320032903d001220b37038804200320032903c80122043703800402402004a74101470d002003200b3703d803200320053703e003200341bb056a290000210420034198066a200537030020034190066a200b370300200341e8056a41013a0000200341e9056a20032f01b8053b0000200341eb056a200341ba056a2d00003a0000200341ec056a2004370200200341f4056a200341c3056a290000370200200341fc056a200341cb056a29000037020020034181066a200341d0056a290000370000200341043a00e005200341e0056a10fe012003200341d8036a3602e005200341e0056a10ce020c130b20044201520d12200320034180046a41086a3602e005200341e0056a10ce020c120b2009200a1045000b41d0d8c800411941bcd7cc001039000b200341e0026a410c1082060c120b200220091046000b200341d8036a41026a20034180046a41026a2d000022023a0000200320032f00800422013b01d803200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c2b0b410221020c170b200341d8036a41026a20034180046a41026a2d000022023a0000200320032f00800422013b01d803200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c290b200341d8036a41026a20034180046a41026a2d000022023a0000200320032f00800422013b01d803200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c280b200341023a00f0020c170b200341023a0090030c180b200341023a0090030c1a0b200341023a00f0020c200b2001410c6a2802002106200141086a2802002107200141046a2802002108200341e0056a41286a220a200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a220d200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a220e200241086a290200370300200320022902003703e00520034180056a200341e0056a10c10220034180046a41086a220220034189056a29000037030020034180046a41106a220120034191056a29000037030020034180046a41186a220920034199056a290000370300200320032900810537038004024002400240024002400240024020032d0080054101460d00200341e0046a41186a2009290300370300200341e0046a41106a2001290300370300200341e0046a41086a200229030037030020032003290380043703e004200341b8046a200341e0046a10d305200341e0056a20032802b804221420032802c00410e60520022003419c066a2902003703002001200341a4066a2902003703002009200341ac066a29020037030020034180046a41206a200341b4066a280200360200200320034194066a2902003703800402402003280280062202450d00200d2903002104200e290300210520034190066a28020021012003418c066a2802002109200a280200210a20032903f005210b20032903e005210c200328028406210d200341d8036a41206a220e20034180046a41206a280200360200200341d8036a41186a221520034180046a41186a290300370300200341d8036a41106a221620034180046a41106a290300370300200341d8036a41086a221720034180046a41086a29030037030020032003290380043703d803024020032802bc04450d002014102e0b200341b0036a41086a22142017290300370300200341b0036a41106a22172016290300370300200341b0036a41186a22162015290300370300200341b0036a41206a2215200e28020036020020034180056a41186a2004370300200341b0056a2001360200200341a8056a200a36020020034180056a41246a200d360200200320032903d8033703b0032003200b370390052003200c37038005200320093602ac05200320023602a0052003200537038805200341d4056a2015280200360200200341cc056a2016290300370200200341c4056a2017290300370200200341bc056a2014290300370200200341b4056a20032903b0033702002008200641246c22026a2109024020020d00200821020c050b200341e0026a41026a2201200841036a2d00003a000020034190036a41086a220a200841146a29000037030020034190036a41106a220d2008411c6a290000370300200320082f00013b01e0022003200829000c37039003200841246a210220082d0000220e4105460d042008280008211420082800042115200341a8046a41026a20012d00003a0000200341b0036a41086a200a290300370300200341b0036a41106a200d290300370300200320032f01e0023b01a80420032003290390033703b0030240024002400240200e4107710e03000201020b200341b8046a41026a200341a8046a41026a2d00003a0000200341cb046a200341b8036a290300370000200341d0046a200341bd036a290000370000200320032f01a8043b01b804200320143600bf04200320153600bb04200320032903b0033700c304410121014100210a0c020b2014450d002015102e0b410021014101210a0b20034180046a41086a220d200341b8046a41086a29010037030020034180046a41106a220e200341b8046a41106a29010037030020034180046a41186a2214200341b8046a41186a290100370300200320032901b804370380042001450d05200341d8036a41186a2014290300370300200341d8036a41106a200e290300370300200341d8036a41086a200d29030037030020032003290380043703d8034120102c221c450d29201c20032903d803370000201c41186a200341d8036a41186a290300370000201c41106a200341d8036a41106a290300370000201c41086a200341d8036a41086a290300370000200921010240024020092002460d00200341e0026a41026a2201200241036a2d00003a000020034190036a41086a200841386a29000037030020034190036a41106a200841c0006a290000370300200320022f00013b01e0022003200829003037039003200841c8006a2102024020082d0024220d4105460d00200828002c210e20082800282114200341a8046a41026a20012d00003a0000200341b0036a41086a220120034190036a41086a290300370300200341b0036a41106a20034190036a41106a290300370300200320032f01e0023b01a80420032003290390033703b0030240024002400240200d4107710e03000201020b200341b8046a41026a200341a8046a41026a2d00003a0000200341cb046a2001290300370000200341d0046a200341bd036a290000370000200320032f01a8043b01b8042003200e3600bf04200320143600bb04200320032903b0033700c304410121010c020b200e450d002014102e0b410021014101210a0b20034180046a41086a2216200341b8046a41086a222529010037030020034180046a41106a2217200341b8046a41106a222629010037030020034180046a41186a2218200341b8046a41186a2227290100370300200320032901b8043703800420010d020b200221010b4101211f4101210d0c040b200341d8036a41186a22192018290300370300200341d8036a41106a221a2017290300370300200341d8036a41086a221b201629030037030020032003290380043703d803200841ec006a2101200641246c41b87f6a2114200341c3046a2128412021154102210d4101211f0340200341e0056a41186a221d2019290300370300200341e0056a41106a221e201a290300370300200341e0056a41086a2220201b290300370300200320032903d8033703e005024002400240200d417f6a201f470d00201f41016a220e201f490d27201f4101742221200e2021200e4b1b220e4104200e41044b1b220e41ffffff3f71200e462121200e410574210e02400240201f0d00200341003602b8040c010b200341013602c0042003201c3602b8042003201f4105743602bc040b20034180046a200e2021200341b8046a107d200328028804210e2003280280044101460d01200328028404211c200e410576211f0b201c20156a220e20032903e005370000200e41186a201d290300370000200e41106a201e290300370000200e41086a202029030037000020140d01200921010c060b200e0d2b0c250b200241086a2800002122200241046a2800002123200241036a2d0000210e20022f0001211d20034190036a41086a221e200241146a29000037030020034190036a41106a22202002411c6a290000370300200341e0026a41026a2221200e3a00002003201d3b01e00220032002410c6a2900003703900320022d0000220e4105460d04200341a8046a41026a221d20212d00003a0000200341b0036a41086a2221201e290300370300200341b0036a41106a2020290300370300200320032f01e0023b01a80420032003290390033703b0030240024002400240200e4107710e03000201020b202820032903b003370000200341b8046a41026a201d2d00003a0000202841086a20212903003700002028410d6a200341b0036a410d6a290000370000200320032f01a8043b01b804200320223600bf04200320233600bb044101210e0c020b2022450d002023102e0b4100210e4101210a0b201620252901003703002017202629010037030020182027290100370300200320032901b80437038004200e450d04200241246a210220192018290300370300201a2017290300370300201b201629030037030020032003290380043703d803201541206a2115200d41016a210d2014415c6a2114200141246a21010c000b0b024020032802bc04450d002014102e0b200341f0026a41011082060c010b200341023a00f0020b02402006450d00200641246c2101200821020340024020022d00004102470d00200241086a280200450d00200241046a280200102e0b200241246a21022001415c6a22010d000b0b2007450d04200741246c450d042008102e0c040b024020092001460d002008200641246c6a210603402001220241246a2101024020022d00004102470d00200241086a280200450d00200241046a280200102e0b20062001470d000b0b2007450d02200741246c450d022008102e0c020b4100210a0b024020092002460d002008200641246c6a210603402002220141246a2102024020012d00004102470d00200141086a280200450d00200141046a280200102e0b20062002470d000b0b4100211f4101211c02402007450d00200741246c450d002008102e0b4100210d0b024002400240200a41ff0171450d00201f41ffffff3f71450d01201c102e0c010b201c0d010b200341013a00f002024020032802a4052202450d00200241186c450d0020032802a005102e0b20032802b00541ffffffff0371450d0120032802ac05102e0c010b0240200d450d00201c200d4105746a211920034189066a211d200341e9056a211e200341b8056a2107201c21060340200641086a2900002104200641106a29000021052006290000210b200341b8046a41186a2216200641186a290000370300200341b8046a41106a22172005370300200341b8046a41086a221820043703002003200b3703b80420034180046a200341b8046a10d105200341e0056a200328028004220e200328028804221410870620034190036a41086a200341e0056a41086a290300370300200320032903e00537039003024002400240024020032d00f00522154102460d00200328029c03211a200328029403211b20032802900321080240200328029803220d0d004100210d0c030b200d41057441606a41057641016a210a41002102410021010340200820026a22092007412010ec08450d02200241206a2102200a200141016a2201470d000c030b0b200e201410ff010c020b2008200d417f6a220d4105746a22022900002104200229000821052002290010210b200941186a200241186a2900003700002009200b3700102009200537000820092004370000201e20032903b804370000201e41106a2017290300370000201e41186a2016290300370000201d2007290000370000201d41106a200741106a290000370000201d41186a200741186a290000370000200341083a00e805201e41086a2018290300370000201d41086a200741086a290000370000200341043a00e005200341e0056a10fe010b200341003602e805200342013703e005200d200341e0056a10760240200d450d00200d4105742101200821020340200341e0056a200241201074200241206a2102200141606a22010d000b0b2003201a3602d803200341e0056a200341d8036a41041074200320153a00b003200341e0056a200341b0036a41011074200e201420032802e005220220032802e80510b201024020032802e405450d002002102e0b201b41ffffff3f71450d002008102e0b200641206a21060240200328028404450d00200e102e0b20062019470d000b0b0240201f41ffffff3f71450d00201c102e0b200341063a00f002024020032802a4052202450d00200241186c450d0020032802a005102e0b20032802b00541ffffffff0371450d0020032802ac05102e0b0240024020032d00f0024106460d0020032802f0022102200020032902f402370024200041206a2002360000200041186a41003a000020004200370308420121040c010b4200210420004200370308200020032800e005360019200041186a41003a00002000411c6a200341e3056a2800003600000b200020043703000c230b200141246a28020021082002280228210220034180056a41186a200141196a29000037030020034180056a41106a200141116a29000037030020034188056a200141096a2900003703002003200129000137038005200341b8046a20034180056a10c802200341e0056a20032802b804220620032802c00410c902200341e0056a41106a290300420020032903e00542015122011b210420032903e805420020011b210520034180066a290300420020011b210b200341e0056a41186a290300420020011b210c024020032802bc04450d002006102e0b024002400240427f2005200c7c220c200c20055422012004200b7c2001ad7c220520045420052004511b22011b4280c8afa02585427f200520011b84500d0020034180046a410b1082060c010b200341e0056a20034180056a2008108606200341b2036a220120032d00e3053a0000200320032f00e1053b01b003024020032d00e00522064106470d0042f3e885db96cddbb32020034180056a10ea0220022002280200417f6a2201360200200341063a00800420010d022002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d022002102e0c020b20032902e4052104200320063a008004200320032f01b0033b0081042003200437028404200320012d00003a0083040b20022002280200417f6a2201360200024020010d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b20032d0080044106460d0020032802800421022000200329028404370024200041206a2002360000200041186a41003a000020004200370308200042013703000c230b20004200370308200020032800d803360019200041186a41003a00002000411c6a200341db036a280000360000200042003703000c220b200141046a2802002108200341e0056a41286a200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a200241086a290200370300200320022902003703e0050240200341e0056a10a7050d0020034180046a41186a2202420037030020034180046a41106a2206420037030020034180046a41086a220142003703002003420037038004200341f0026a4192fdc60041071081022001200341f0026a41086a290200370300200320032902f0023703800420034190036a4194adc600410a108102200220034190036a41086a2903003703002006200329039003370300200341c8026a20034180046a4120108e02024020032802c8024101470d0020032802cc02210120034198046a2209420037030020034190046a220a420037030020034180046a41086a220742003703002003420037038004200341f0026a4192fdc60041071081022007200341f0026a41086a220d290200370300200320032902f0023703800420034190036a41e0a9c600410c108102200641086a220e20034190036a41086a22142903003700002006200329039003370000200341c0026a20034180046a4120108e0202404100200120032802c40241d40020032802c0021b6b2202200220014b1b22024100200120086b2215201520014b1b22014f0d000340200210f6052001200241016a2202470d000b0b20094200370300200a4200370300200742003703002003420037038004200341f0026a4192fdc60041071081022007200d290200370300200320032902f0023703800420034190036a41e0a9c600410c108102200e20142903003700002006200329039003370000200320083602e00520034180046a4120200341e0056a410410b2010b200042003703082000200328008005360019200041186a41003a00002000411c6a20034183056a280000360000200042003703000c220b200341d8036a41026a200341b8046a41026a2d000022023a0000200320032f00b80422013b01d803200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c210b200141106a290300210b200141086a2903002110200341e0056a41286a2208200241286a280200360200200341e0056a41206a200241206a290200370300200341e0056a41186a2207200241186a290200370300200341e0056a41106a200241106a290200370300200341e0056a41086a2209200241086a290200370300200320022902003703e00520034180056a200341e0056a10c10220034180046a41086a220220034189056a29000037030020034180046a41106a220120034191056a29000037030020034180046a41186a220620034199056a290000370300200320032900810537038004024002400240024020032d0080054101460d00200341e0046a41186a2006290300370300200341e0046a41106a2001290300370300200341e0046a41086a200229030037030020032003290380043703e00420034180056a200341e0046a10d305200341e0056a200328028005220d20032802880510e60520022003419c066a2902003703002001200341a4066a2902003703002006200341ac066a29020037030020034180046a41206a200341b4066a280200360200200320034194066a290200370380040240200328028006220a450d00200729030021112009290300212920034190066a28020021072003418c066a28020021142008280200210120032903f005210c20032903e005212a2003280284062108200341d8036a41206a220220034180046a41206a280200360200200341d8036a41186a220620034180046a41186a290300370300200341d8036a41106a220920034180046a41106a290300370300200341d8036a41086a220e20034180046a41086a29030037030020032003290380043703d8030240200328028405450d00200d102e0b200341b0036a41106a20092903002204370300200341b8046a41086a200e290300370300200341b8046a41106a2004370300200341b8046a41186a2006290300370300200341b8046a41206a2002280200360200200320032903d8033703b80420010d02200341e0056a410a108206200320032900e105370390032003200341e8056a2800003600970320032d00e005210202402008450d00200841186c450d00200a102e0b200741ffffffff0371450d032014102e0c030b0240200328028405450d00200d102e0b200341e0056a4101108206200320032900e105370390032003200341e8056a2800003600970320032d00e00521020c020b410221020c010b20034180056a41206a200341b8046a41206a28020036020020034180056a41186a200341b8046a41186a29030037030020034180056a41106a200341b8046a41106a29030037030020034180056a41086a200341b8046a41086a290300370300200320032903b80437038005200141186c200a6a41686a2102420021124200211302400340024020010d0041002101200c210f0c020b02402002290300220f20127c2204201058200241086a290300222420137c2004200f54ad7c2205200b582005200b5122061b0d002002200f201020127d22047d37030020022024200b20137d2010201254ad7d22057d200f200454ad7d370308201120057c200c20047c220f200c54ad7c21110c020b2001417f6a2101201120247c200c200f7c220f200c54ad7c2111200241686a2102200f210c200421122005211320042010542005200b5420061b0d000b0b20034190066a200736020020034188066a200136020020034184066a200836020020034194066a2003290380053702002003200f3703f005200341e0056a41186a20113703002003419c066a20034180056a41086a2202290300370200200341a4066a20034190056a290300370200200341ac066a20034180056a41186a290300370200200341b4066a200341a0056a2802003602002003202a3703e0052003201436028c062003200a36028006200320293703e805200f42ffc7afa0255620114200522011501b0d0120034180056a4108108206200320032900810537039003200320022800003600970320032d008005210202402003280284062201450d00200141186c450d00200328028006102e0b20032802900641ffffffff0371450d00200328028c06102e0b200320032800a8043602e00220032003290390033703f00220032003280097033600f7022003200341ab046a2800003600e302200041186a41003a000020004200370308200020032802e0023600192000411c6a20032800e302360000200041206a20023a0000200020032903f002370021200041286a20032800f702360000200042013703000c210b42f3e885db96cddbb32020034198066a202a2029411f108506200341e0046a200341e0056a10d20520033502880642d086037e210402402003280284062202450d00200241186c450d00200328028006102e0b20044280f3e893017c2104024020032802900641ffffffff0371450d00200328028c06102e0b200320032800a8043602e0022003200341ab046a2800003600e302200041186a41003a0000200041106a200437030020004201370308200020032802e0023600192000411c6a20032800e302360000200042003703000c200b200341e0026a410c1082060c040b200341023a00e0020c040b0240201a450d002015201a41306c6a2109200341e0056a41146a2106200341e9056a210a20034180046a41086a210e20034198066a210d201521020340200341c0006a201020112002290300200241086a290300200c200f108205ad2204420010e808200341d0006a200241106a220120032903402205201220047e2204428094ebdc0380a7417f2004428080808080c0b2cd3b541b2004428094ebdc03824280cab5ee01566aad7c2204200341c0006a41086a2903002004200554ad7c10890620034180046a41106a200341d0006a41106a290300220537030020032003290358220b3703880420032003290350220437038004024002402004a74101470d002003200b3703d803200320053703e00320012f000021082003418c036a41026a200241126a2d000022073a0000200320083b01d805200320073a00da05200320083b018c03200241136a2900002104200a20083b0000200a41026a20073a0000200341013a00e805200341043a00e005200320043702ec052002412b6a28000021082002412f6a2d00002107200241236a290000210420062002411b6a290000370000200641086a2004370000200d2005370300200641146a20073a0000200641106a20083600002003200b37039006200341e0056a10fe012003200341d8036a3602e005200341e0056a10ce020c010b20044201520d002003200e3602e005200341e0056a10ce020b200141206a22022009470d000b0b200341063a00e002201810bc02024020172016722202450d00200241306c450d002015102e0b024020032802a4052202450d00200241186c450d0020032802a005102e0b20032802b00541ffffffff0371450d0220032802ac05102e0c020b200341e0026a41021082060c010b0240200328029403450d00200e102e0b200341e0026a41011082060b20032d00e0024106460d0120032902e40221040b20032802e002210220002004370024200041206a2002360000200041186a41003a000020004200370308200042013703000c190b20004200370308200020032800d802360019200041186a41003a00002000411c6a200341db026a280000360000200042003703000c180b0240201a41ffffffff0371450d002019102e0b201720016a2101200341e0056a201b10f90520032802e0052102200320032802e805360284052003200236028005200341b8046a20034180056a10b101024020032802e405450d002002102e0b02402001450d00201841306a210203400240200241746a2802002201450d00200141306c450d00200241706a280200102e0b0240200228020041ffffff3f71450d002002417c6a280200102e0b200241d8006a2102200641a87f6a22060d000b0b0240201c450d00201c41d8006c450d002018102e0b200341063a0080040c030b4110102c2202450d14200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1420014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220636020020060d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22062006280200417f6a220636020020060d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b200341023a0080040b0240201a41ffffffff0371450d002019102e0b20032d0080044106460d0020032802800421022000200329028404370024200041206a2002360000200041186a41003a000020004200370308200042013703000c140b20004200370308200020032800d803360019200041186a41003a00002000411c6a200341db036a280000360000200042003703000c130b200341d8036a41026a20034180046a41026a2d000022013a0000200320032f01800422063b01d803200041206a20023a0000200041186a41003a000020004200370308200020063b0021200041236a20013a000020002004370024200042013703000c120b200341063a00a8040b20004200370308200020032800e002360019200041186a41003a00002000411c6a200341e3026a280000360000200042003703000c100b20032802f002210220002004370024200041206a2002360000200041186a41003a000020004200370308200042013703000c0f0b20004200370308200020032800a804360019200041186a41003a00002000411c6a200341ab046a280000360000200042003703000c0e0b200328029003210220002004370024200041206a2002360000200041186a41003a000020004200370308200042013703000c0d0b20004200370308200020032800f002360019200041186a41003a00002000411c6a200341f3026a280000360000200042003703000c0c0b20004200370308200020032800d802360019200041186a41003a00002000411c6a200341db026a280000360000200042003703000c0b0b200328029003210220002004370024200041206a2002360000200041186a41003a000020004200370308200042013703000c0a0b20004200370308200020032800f002360019200041186a41003a00002000411c6a200341f3026a280000360000200042003703000c090b02402010200329038005220c58200f20034180056a41086a290300220458200f2004511b0d0020034190066a2010200c7d370300200341e0056a41086a41073a0000200341e9056a20032903b804370000200341f1056a200341b8046a41086a290300370000200341f9056a200341c8046a29030037000020034181066a200341d0046a29030037000020034198066a200f20047d2010200c54ad7d370300200341043a00e005200341e0056a10fe010b024020032802a4052202450d00200241186c450d0020032802a005102e0b024020032802b00541ffffffff0371450d0020032802ac05102e0b200320032800a8043602e0022003200341ab046a2800003600e302200041186a41003a0000200041106a20053703002000200b370308200020032802e0023600192000411c6a20032800e302360000200042003703000c080b1038000b20032d00a8044106460d0120032902ac0421040b20032802a804210220002004370024200041206a2002360000200041186a41003a000020004200370308200042013703000c050b20004200370308200020032800e002360019200041186a41003a00002000411c6a200341e3026a280000360000200042003703000c040b20032d00f0024106460d0020032802f0022102200020032902f402370024200041206a2002360000200041186a41003a000020004200370308200042013703000c030b20004200370308200020032800a804360019200041186a41003a00002000411c6a200341ab046a280000360000200042003703000c020b1036000b20004200370308200020032800e002360019200041186a41003a00002000411c6a200341e3026a280000360000200042003703000b200341e0066a24000bac0401047f230041c0006b2202240041d6a2c50021034109210441132105024002400240024002400240024002400240024002400240024002400240024002400240024002400240200141ff01710e15000102030405060708090a0b0c0d0e0f1011121314000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a41ec8fcc001044000b41c9a2c5002103410d2104410021050c120b41c1a2c500210341082104410121050c110b41b4a2c5002103410d2104410221050c100b41a7a2c5002103410d2104410321050c0f0b419ba2c5002103410c2104410421050c0e0b418da2c5002103410e2104410521050c0d0b41fca1c500210341112104410621050c0c0b41eba1c500210341112104410721050c0b0b41dfa1c5002103410c2104410821050c0a0b41d2a1c5002103410d2104410921050c090b41c6a1c5002103410c2104410a21050c080b41b4a1c500210341122104410b21050c070b419aa1c5002103411a2104410c21050c060b4188a1c500210341122104410d21050c050b41faa0c5002103410e2105410e21040c040b41e5a0c500210341152104410f21050c030b41cfa0c500210341162104411021050c020b41c7a0c500210341082104411121050c010b41b9a0c5002103410e2104411221050b200041830e3b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000b9c0203057f017e017f23004180026b22012400200141086a200010c802200141e0006a200128020822022001280210220310c902200141b4016a2802002104200141b0016a2802002100200141ac016a280200210520012903602106200141b8016a200141e8006a41c40010e9081a0240024020064201510d00200141186a410041c40010eb081a410121000c010b200141186a200141b8016a41c40010e9081a024020000d00410121000c010b200141e8006a200141186a41c40010e9082107200141b4016a2004360200200141b0016a2000360200200141ac016a417f200541016a220020002005491b3602002001420137036020022003200710c805410021000b0240200128020c450d002002102e0b20014180026a240020000bb10201037f230041e0006b22022400200241086a4192fdc6004107108102200241186a41a8acc6004105108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241d0006a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000bee06020a7f017e230022052106200541a0016b41607122052400200520003703180240024002402002200384500d00200520023703202005200037033020052003370328200541004102410120044101711b200441ff01714101461b3a003820054180016a200110d40620052802840121072005280280012208210902402005280288012204450d00200820044105746a210a200541e0006a41196a210b20082104200821090340200541c8006a41106a220c200441106a290300370300200541c8006a41086a220d200441086a29030037030020052004290300370348200441186a2d0000210e2005200441196a28000036024020052004411c6a280000360043200e4103460d01200b2005280240360000200b41036a2005280043360000200541e0006a41106a200c2903002202370300200520052903483703602005200e3a00782005200d2903003703680240024020022005290318520d00200541033a0098012005290330210320052005290390013703302005290328210020052005290388013703282005290320210f20052005290380013703202005290338210220052005290398013703382002a7210e0c010b200541e0006a41186a2903002202a7210e20052903702103200529036821002005290360210f0b0240200e41ff01714103460d002009200f3703002009200037030820092003370310200941186a2002370300200941206a21090b200441206a2204200a470d000b0b200920086b41057521040240024020052d00384103470d00200721050c010b2005290338210220052903302103200529032821002005290320210f0240024020042007460d0020072105200421070c010b200741016a22042007490d04200741017422092004200920044b1b22044104200441044b1b220441ffffff3f712004464103742109200441057421040240024020070d0020054100360280010c010b20054180016a41086a4108360200200520083602800120052007410574360284010b200541e0006a2004200920054180016a107d200541e8006a280200210420052802604101460d0320052802642108200441057621050b200820074105746a22042003370310200420003703082004200f370300200441186a2002370300200741016a21040b20012008200410d506200541ffffff3f71450d002008102e0b200624000f0b2004450d001036000b1038000bd20801087f230041c0016b22032400200341e8006a200110e50520034198016a20032802682204200328027010f402200341f8006a41086a2205200341a2016a290100370300200341f8006a41106a2206200341aa016a290100370300200341f8006a41176a2207200341b1016a2900003700002003200329019a01370378024002400240024020032d0098014101470d0020032d0099012108200341c8006a41176a2007290000370000200341c8006a41106a2006290300370300200341c8006a41086a2005290300370300200320032903783703480240200328026c450d002004102e0b200341286a41176a2204200341c8006a41176a290000370000200341286a41106a2205200341c8006a41106a290300370300200341116a200341d0006a290300370000200341196a2005290300370000200341206a2004290000370000200320083a00082003200329034837000920034198016a200110ce050240024020032802a4012209450d0020032802a801210a024002400240200341ac016a28020022044102742205417c6a41027641026a410120041b20024d0d00200341c8006a4111108206200a41ffffffff03710d010c020b200328029801210220034198016a200110cf05200328029801220420032802a00110ff010240200328029c01450d002004102e0b200920056a2108410021042009210620022107024003402004417e712105410221040240024020054102460d00200221050c010b2006450d0220082006460d02200641046a2106410321042007417f6a220721050b20034198016a41186a200141186a29000037030020034198016a41106a200141106a29000037030020034198016a41086a200141086a290000370300200320053602b8012003200129000037039801200341f8006a20034198016a10cd052003280278220520032802800110ff01200328027c450d002005102e0c000b0b200341063a0048200a41ffffffff0371450d030b2009102e0b200320032900493703282003200341c8006a41086a28000036002f20032d004822044106470d030c040b200341063a00480b200320032900493703282003200341d0006a28000036002f0c020b0240200328026c450d002004102e0b200041021082060c020b200020043a000020002003290328370001200041086a200328002f3600000c010b20034198016a200110e505200328029801220420032802a00110ff010240200328029c01450d002004102e0b20034198016a200341086a10d305200328029801220420032802a00110ff010240200328029c01450d002004102e0b20034198016a2001108406200328029801220420032802a00110ff010240200328029c01450d002004102e0b20034198016a2001108605200328029801220420032802a00110ff010240200328029c01450d002004102e0b20034198016a200110d105200328029801220420032802a00110ff010240200328029c01450d002004102e0b2001108a06200041063a00000b200341c0016a24000b970401087f230041e0006b220324002003200236020c20032001360208200341106a2001200210ed0202400240200328021022010d00200041023a00100c010b200328021421042003200341186a280200360224200320013602202003200341206a10ab01024002400240024002402003280200450d00200341003602480c010b200341c8006a200341206a200328020410920120032802482205450d00200328024c21060240200328022422024104490d00200341d0006a280200210720032802202208280000210920032002417c6a220a3602242003200841046a2208360220200a450d0020082d0000210a20032002417b6a3602242003200841016a36022041002102200a0e020302000b200641ffffff3f71450d002005102e0b20034100360230200342013703282003410a36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341909dc5003602482003200341386a360258200341c4006a419cebc000200341c8006a103d1a2003280228200328023010ef020240200328022c450d002003280228102e0b410221020c020b410121020b200341c8006a41026a200341286a41026a2d000022083a0000200320032f0028220a3b01482000200936020c2000200736020820002006360204200020053602002000200a3b0011200041136a20083a00000b200020023a00102004450d002001102e0b200341e0006a24000bbd0a020a7f017e230041c0016b2202240002400240024020012802082203200128020c460d00200128021421042001200341246a3602082002413c6a41026a2205200341036a2d00003a0000200241286a41086a2206200341186a290000370300200241286a41106a2207200341206a2d00003a0000200220032f00013b013c2002200341106a29000037032820032d000022084105470d010b410021030c010b2003410c6a2800002109200341086a280000210a200341046a280000210b20024188016a41026a20052d00003a0000200241a0016a41086a2006290300370300200241a0016a41106a20072d00003a0000200220022f013c3b018801200220022903283703a001024002400240024020084107710e03020100010b200a450d00200b102e0b4101210b410121030c010b20024184016a41026a20024188016a41026a2d000022033a0000200241f0006a41086a200241a0016a41086a290300220c370300200241f0006a41106a200241a0016a41106a2d000022053a0000200241ec006a41026a20033a0000200241d8006a41086a200c370300200241d8006a41106a20053a0000200220022f01880122033b018401200220022903a001220c370370200220033b016c2002200c370358410021030b2001280210210120024184016a41026a2205200241ec006a41026a2d00003a0000200241f0006a41086a2206200241d8006a41086a290300370300200241f0006a41106a2207200241d8006a41106a2d00003a0000200220022f016c3b0184012002200229035837037002400240024002402003450d00200b2103200a2101200921050c010b200241b7016a2006290300370000200241bf016a20072d00003a0000200220022f0184013b01a001200220093600ab012002200a3600a7012002200b3600a301200220022903703700af01200220052d00003a00a2012001280208410574210320012802002101200241af016a2106024003402003450d01200341606a21032001200241a0016a412010ec082105200141206a210120050d000c030b0b20024188016a200241a0016a108605200241086a200228028801220120022802900110870520022d000c41017121030240200228028c01450d002001102e0b2003450d0120024188016a411410820620024190016a2802002105200228028c01210120022802880121030b200420053602082004200136020420042003360200410021060c010b2002419c016a41026a20022d00a20122033a000020024188016a41086a200641086a290000220c37030020024188016a41106a200641106a2d000022013a0000200241d4006a41026a20033a0000200241c0006a41086a200c370300200241c0006a41106a20013a0000200220022f01a00122033b019c0120022006290000220c37038801200220033b01542002200c370340410121060b200241246a41026a200241d4006a41026a2d000022033a0000200241106a41086a2201200241c0006a41086a290300370300200241106a41106a2205200241c0006a41106a2d00003a0000200220022f015422043b01242002200229034037031020024188016a41026a220720033a0000200220043b018801200241a0016a41106a220420052d00003a0000200241a0016a41086a22052001290300370300200220022903103703a001410021032006450d00200020022f0188013b00012000410c6a2009360000200041086a200a360000200041046a200b360000200041106a20022903a001370000200041036a20072d00003a0000200041186a2005290300370000200041206a20042d00003a0000410121030b200020033a0000200241c0016a24000bfb1904057f037e077f057e230041d0036b22042400200441c0006a2001108406200428024021052004200428024822063602bc01200420053602b801200441f8006a2005200610ed0241052106024020042802782207450d00200428027c2108200420044180016a28020022063602fc01200420073602f80102400240024002402006450d0020042006417f6a3602fc012004200741016a3602f8014100210602400240024020072d00000e050504000102030b410221060c040b200441f8026a200441f8016a10930120042d00f8024101460d01200441b0026a20044191036a290000370300200441a8026a20044189036a290000370300200441a0026a20044181036a290000370300200420042900f90237039802410321060c030b410421060c020b200441003602a00220044201370398022004410a3602dc022004200441b8016a3602d802200420044198026a3602202004418c036a4101360200200442013702fc02200441909dc5003602f8022004200441d8026a36028803200441206a419cebc000200441f8026a103d1a20042802980220042802a00210ef020240200428029c02450d00200428029802102e0b410521060c020b410121060b200441d8016a41186a20044198026a41186a2903002209370300200441d8016a41106a20044198026a41106a290300220a370300200441d8016a41086a20044198026a41086a290300220b370300200441f8026a41086a200b370300200441f8026a41106a200a370300200441f8026a41186a2009370300200420042903980222093703d801200420093703f8020b2008450d002007102e0b200441d8016a41186a2208200441f8026a41186a290300370300200441d8016a41106a220c200441f8026a41106a290300370300200441d8016a41086a220d200441f8026a41086a290300370300200420042903f8023703d80141002107024020064105460d00200441206a41186a2008290300370300200441206a41106a200c290300370300200441206a41086a200d290300370300200420042903d801370320200621070b02402004280244450d002005102e0b4200210b024002400240024002400240024020070e050201000306020b200441f8006a200110e505200441f8026a2004280278220520042802800110f402200441d8016a41086a220620044181036a290000370300200441d8016a41106a220720044189036a290000370300200441d8016a41186a220120044191036a290000370300200420042900f9023703d801024020042d00f8024101470d0020044198026a41186a200129030037030020044198026a41106a200729030037030020044198026a41086a2006290300370300200420042903d801370398020240200428027c450d002005102e0b200441f8026a41186a20044198026a41186a290300370300200441f8026a41106a20044198026a41106a290300370300200441f8026a41086a20044198026a41086a29030037030020042004290398023703f8022004200441f8026a2002200310fd01200441086a290300210a200429030021090c040b0240200428027c450d002005102e0b0c050b200441f8026a200120022003108b0620043502f802420185210b20044188036a290300210a20044180036a29030021090c040b20044198026a200110e505200441f8026a200428029802220520042802a00210f402200441d8016a41086a220620044181036a290000370300200441d8016a41106a220720044189036a290000370300200441d8016a41186a220820044191036a290000370300200420042900f9023703d80102400240024020042d00f8024101470d00200441b8016a41186a2008290300370300200441b8016a41106a2007290300370300200441b8016a41086a2006290300370300200420042903d8013703b8010240200428029c02450d002005102e0b200441f8016a41186a200441b8016a41186a290300370300200441f8016a41106a200441b8016a41106a290300370300200441f8016a41086a200441b8016a41086a290300370300200420042903b8013703f801200441d8016a200441f8016a10d305200441f8026a20042802d801220620042802e00110e605200441f8006a41086a2207200441f8026a41086a290300370300200441f8006a41106a2208200441f8026a41106a290300370300200441f8006a41186a220c200441f8026a41186a29030037030020044198026a41086a220d200441a4036a29020037030020044198026a41106a220e200441ac036a29020037030020044198026a41186a220f200441b4036a29020037030020044198026a41206a2210200441bc036a29020037030020044198026a41286a2211200441c4036a29020037030020044198026a41306a2212200441cc036a280200360200200420042903f8023703782004200429029c03370398022004280298032205450d01200441d8026a41186a200c290300370300200441d8026a41106a2008290300370300200441d8026a41086a2007290300370300200441c0006a41086a200d290300370300200441c0006a41106a200e290300370300200441c0006a41186a200f290300370300200441c0006a41206a2010290300370300200441c0006a41286a2011290300370300200441c0006a41306a2012280200360200200420042903783703d8022004200429039802370340024020042802dc01450d002006102e0b200441d8016a41186a200441f8016a41186a2903002209370300200441d8016a41106a200441f8016a41106a290300220a370300200441d8016a41086a200441f8016a41086a290300220b370300200420042903f80122133703d801200441f8026a41186a2009370300200441f8026a41106a200a370300200441f8026a41086a200b370300200441f8026a41286a200441d8026a41086a2903002214370300200441f8026a41306a200441d8026a41106a2903002215370300200441f8026a41386a200441d8026a41186a2903002216370300200420133703f802200420042903d802221737039803200441f8006a41386a2016370300200441f8006a41306a2015370300200441f8006a41286a201437030020044198016a2017370300200441f8006a41186a2009370300200441f8006a41106a200a370300200441f8006a41086a200b370300200420133703780c020b200428029c02450d042005102e0c040b024020042802dc01450d002006102e0b200441d8016a41186a200441f8016a41186a290300370300200441d8016a41106a200441f8016a41106a290300370300200441d8016a41086a200441f8016a41086a290300370300200420042903f8013703d8010b2005450d0220044198026a41386a2207200441f8006a41386a29030037030020044198026a41306a2208200441f8006a41306a29030037030020044198026a41286a220c200441f8006a41286a29030037030020044198026a41206a220d200441f8006a41206a29030037030020044198026a41186a200441f8006a41186a220629030037030020044198026a41106a200441f8006a41106a220e29030037030020044198026a41086a200441f8006a41086a220f2903003703002004200429037837039802200441d8026a41186a2006290300370300200441d8026a41106a200e290300370300200441d8026a41086a200f290300370300200420042903783703d802200441f8026a41186a22062007290300370300200441f8026a41106a22072008290300370300200441f8026a41086a2208200c29030037030020042005360298032004200d2903003703f8022004419c036a22052004290340370200200441a4036a200441c0006a41086a290300370200200441ac036a200441c0006a41106a290300370200200441b4036a200441c0006a41186a290300370200200441bc036a200441c0006a41206a290300370200200441c4036a200441c0006a41286a290300370200200441cc036a200441c0006a41306a2802003602002006290300210920072007290300220a20027c220b3703002006200920037c200b200a54ad7c3703002008200829030020037c20042903f802220920027c220b200954ad7c22133703002004200b3703f802200441f8016a200120022003108b06200441f8016a41106a290300210a200441f8016a41086a290300210920043502f801210242f3e885db96cddbb320200441f8026a41386a200b2013411f108506200441d8026a200441f8026a10d205024020052802002205450d00200541186c450d00200428029803102e0b0240200441f8026a41306a28020041ffffffff0371450d0020042802a403102e0b2002420185210b0c030b200441f8026a41186a200441206a41186a290300370300200441f8026a41106a200441206a41106a290300370300200441f8026a41086a200441206a41086a290300370300200420042903203703f802200441106a200441f8026a2002200310fd01200441106a41086a290300210a200429031021090b4201210b0c010b4200210b0b200020093703082000200b370300200041106a200a370300200441d0036a24000bff0105027f017e017f017e017f23004180026b22012400200141086a200010c802200141e0006a200128020822002001280210220210c902200141b0016a2903002103200141ac016a280200210420012903602105200141b8016a200141e8006a41c40010e9081a02400240024020054201510d00200141186a410041c40010eb081a420021030c010b200141186a200141b8016a41c40010e9081a2004450d002004417f6a21040c010b410021040b200141e8006a200141186a41c40010e9082106200141b0016a2003370300200141ac016a20043602002001420137036020002002200610c8050240200128020c450d002000102e0b20014180026a24000bc21005027f0c7e037f017e017f230041b0026b220424000240024020022003844200520d0020004100360200200041106a4200370300200041086a42003703000c010b200441c0006a200110c802200441b0016a20042802402205200428024810c902200441b0016a41386a2903002106200441b0016a41306a2903002107200441b0016a41286a2903002108200441b0016a41206a2903002109200441b0016a41186a290300210a200441b0016a41106a290300210b200441f0016a290300210c20042903b801210d20042903b001210e20044180016a41086a20044180026a2903003703002004200441f8016a2903003703800102400240200e4201510d004200210c200441386a4200370300200441306a4200370300200441286a4200370300200441206a4200370300200441186a4200370300200441106a4200370300200441086a420037030020044200370300420021094200210842002107420021064200210d4200210b4200210a4200210f420021104200210e420021110c010b200441206a2008370300200441286a2007370300200441106a200a370300200441306a2006370300200420093703182004200d3703002004200c3703382004200b3703082008210f20072110200d210e200b21110b02402004280244450d002005102e0b02400240200e2011844200520d00200f2004290310842010200441186a29030084844200520d002004290330200441386a2903008450450d004200210e410021050c010b4201210e410121050b024002400240200e4201510d004280808080b001210241b4a4c70021054180801c21010c010b0240200d20027c220e200d542212200b20037c2012ad7c220d200b54200d200b511b450d0042808080808001210241a984ca0021054180800821010c010b200441d0016a2008370300200441d8016a2007370300200441e0016a2006370300200420093703c8012004200e3703b0012004200d3703b8012004200a3703c0014200210b2002422088a721122002a7211302400240427f200e200a7c22022002200e542214200d20097c2014ad7c2202200d542002200d511b22141b221142ffc7afa02556427f200220141b22024200522002501b0d00200e200a84200d20098484220b5021144200210a200b420052ad210b0c010b200441c0016a290300211520042903b801211020042903b001210f4201210a410121140b200441e8006a2002370300200441e0006a22162011370300200441d0006a200d3703002004200e3703482004200337037820042012360274200420133602702004200b3703582004420037034002400240024002402005200a420152720d00200420013602b0012001200441b0016a10bd060c010b024020054101732205200a420151720d00200420013602b0012001200441b0016a10be0641ff017122054103460d010240024020050e03010300010b200441f0006a2101024020140d00200420163602b001200441b0016a10cc020b200420013602b001200441b0016a10ce024104210541002101410021120c060b200441f8006a29030021092004290370210a0c030b200a4201522005710d010b20044190016a200110c802200441b0016a2004280290012212200428029801221310c90220042903b001210220044180016a41086a220520044180026a2903003703002004200441f8016a290300370380010240024020024201510d00200441a0016a41086a4200370300200442003703a0010c010b200441a0016a41086a200529030037030020042004290380013703a0010b200441f8016a20042903a00137030020044180026a200441a0016a41086a290300370300200442013703b001200441b0016a41386a20064200200a42015122051b370300200441e0016a2007420020051b370300200441b0016a41286a2008420020051b370300200441d0016a2009420020051b370300200441c8016a2015420020051b370300200441b0016a41106a2010420020051b370300200441f0016a200c420020051b3703002004200f420020051b3703b80120122013200441b0016a41086a10c8050240200428029401450d002012102e0b200441c0006a41286a2903002102200441c0006a41386a2903002109200429036021112004290370210a2004290358210b20042903404201520d0120042903482103200441e8016a200441c0006a41106a290300370300200441e0016a2003370300200441b0016a41086a41003a0000200441b9016a2001290000370000200441c1016a200141086a290000370000200441c9016a200141106a290000370000200441d1016a200141186a290000370000200441033a00b001200441b0016a10fe010c010b200441f8006a29030021092004290370210a0b02400240200b50450d004200210b0c010b200441b0016a41186a200141186a290000370300200441b0016a41106a200141106a290000370300200441b0016a41086a200141086a290000370300200420012900003703b0014201210b0b200441c0006a41186a200441b0016a41186a22012903002203370300200441c0006a41106a200441b0016a41106a2205290300220d370300200441c0006a41086a200441b0016a41086a2903002207370300200420042903b0012208370340200441e0016a2002370300200441d8016a22122011370300200520073703002001200d370300200441d0016a20033703002004200b3703b001200420083703b801200441b0016a10d204024020042903b001500d0020042012360200200410cc020b20004100360200200041106a2009370300200041086a200a3703000c020b20022005ad8421024103210541800a21120b200041086a200237020020004101360200200020014180801c71201241800e71722005723602040b200441b0026a24000bb50501047f230041c0006b220124002001410036022020014201370318024002400240024002400240200028020022020e050001020304050b200141013a0008200141186a200141086a41011074200028020421032000410c6a2802002204200141186a10760240200441286c2204450d00200320046a21040340200141186a2003412010742001200341206a290300370308200141186a200141086a41081074200341286a22032004470d000b0b2001200041106a280200360208200141186a200141086a410410740c040b200141023a0008200141186a200141086a4101107420012000280204360208200141186a200141086a41041074200041086a2802002103200041106a2802002204200141186a10760240200441286c2204450d00200320046a21040340200141186a2003412010742001200341206a290300370308200141186a200141086a41081074200341286a22032004470d000b0b2001200041146a280200360208200141186a200141086a410410740c030b200141033a0008200141186a200141086a410110742001200041086a290300370308200141186a200141086a410810740c020b200141043a0008200141186a200141086a4101107420012000280204360208200141186a200141086a410410740c010b200141053a0008200141186a200141086a4101107420012000280204360208200141186a200141086a410410740b200141136a200141186a41086a2802003600002001200129031837000b200141186a410c6a2001410f6a290000370000200141c6a4b9da04360019200141023a00182001200129000837001d200141186a10a50402400240024020020e020001020b200041086a2802002203450d01200341286c450d012000280204102e0c010b2000410c6a2802002203450d00200341286c450d00200041086a280200102e0b200141c0006a24000b9dc602140c7f017e017f017e057f017e087f017e017f017e087f017e017f027e017f017e017f017e017f017e230041c0026b220424002004200336020420012802042105200128020021060240024002400240024002400240200128020822030d004104210741002108410021090c010b2003410374210a20044198026a41026a210b200441e0006a41106a210c4100210d411b210e4100210841002109410421072006210f02400240024003404100210302402002280208200f2902002210a722114d0d00200b2002280200201141386c6a2203410a6a2d00003a0000200441e0006a41086a2003411f6a290000370300200c200341276a2d00003a0000200420032f00083b0198022004200341176a2900003703602003410f6a29000021122003410b6a2800002113410121030b41022114200441bc016a41026a20044198026a41026a2d00003a0000200441d8016a41086a2215200441e0006a41086a2216290300370300200441d8016a41106a2217200c2d00003a0000200420042f0198023b01bc01200420042903603703d8014101211102402003450d00200441206a41026a200441bc016a41026a2d00003a0000200441f0016a41086a2015290300370300200441f0016a41106a20172d00003a0000200420042f01bc013b0120200420042903d8013703f0014100211120122118201321140b200441dc006a41026a2203200441206a41026a22192d00003a0000200441c0016a41086a221a200441f0016a41086a221b290300370300200441c0016a41106a221c200441f0016a41106a221d2d00003a0000200420042f01203b015c200420042903f0013703c00120110d02200441d8006a41026a221e20032d00003a0000200441a0016a41086a221f201a290300370300200441a0016a41106a2220201c2d00003a0000200420042f015c3b0158200420042903c0013703a0014122102c2203450d094100211102402004280204221a2802082010422088a741ffff0371221c4d0d002019201a280200201c4105746a221141026a2d00003a00002016201141176a290000370300200c2011411f6a2d00003a0000200420112f00003b01202004201129000f3703602011290007212120112800032122410121110b4102211a200441bc016a41026a200441206a41026a2d00003a0000201520162903003703002017200c2d00003a0000200420042f01203b01bc01200420042903603703d8014101211602402011450d00200441086a41026a200441bc016a41026a2d00003a0000201b2015290300370300201d20172d00003a0000200420042f01bc013b0108200420042903d8013703f00141002116202121232022211a0b200441b8016a41026a2211200441086a41026a2d00003a000020044198026a41086a2215201b29030037030020044198026a41106a2217201d2d00003a0000200420042f01083b01b801200420042903f0013703980220160d01200320042f01b8013b0000200320233700072003201a360003200320042903980237000f200341ffff033b0120200341026a20112d00003a0000200341176a20152903003700002003411f6a20172d00003a0000200420042f01583b01542004201e2d00003a0056200441386a41106a221520202d00003a0000200441386a41086a2217201f290300370300200420042903a0013703380240024020082009470d00200d200841016a2211200d20114b1b22114104201141044b1bad422c7e2210422088a74541027421112010a7210902400240200e411b470d00200441003602600c010b20044104360268200420073602602004200e41656a3602640b200441f0016a20092011200441e0006a107d20042802f801211120042802f0014101460d0120042802f40121072011412c6e21090b200f41086a210f2007200e6a221141656a2003360200201141696a428180808010370200201141786a201837000020042d0056210320042f01542116201141746a2014360000201141716a221420163b0100201441026a20033a000020112004290338370000201141086a2017290300370000201141106a20152d00003a0000200d41026a210d200e412c6a210e200841016a2108200a41786a220a450d050c010b0b2011450d070c080b2000201a36020420004101360200200041086a20233702002003102e0c010b2000201436020420004101360200200041086a20183702000b4101210c0240200541ffffffff0171450d002006102e0b41012102410121164101211b4101211d4101211a4101210f410121154101211c4101210a410121174101210d410121144101210e4101211e0c010b0240200541ffffffff0171450d002006102e0b200141106a2802002124200128020c21250240200141146a2802002203450d002003410c6c21262008410174211b2008412c6c411b6a211420044198026a41026a2127200441e0006a41106a210e41002116024002400240024003400240202520166a220341066a2f0100221d41ffff03470d00200042013702000c050b200341086a2f0100210a200341046a2f0100210d4100211502402002280208200328020022034d0d0020272002280200200341386c6a2203410a6a2d00003a0000200441e0006a41086a2003411f6a290000370300200e200341276a2d00003a0000200420032f00083b0198022004200341176a2900003703602003410f6a29000021122003410b6a2800002128410121150b4102211a200441bc016a41026a20044198026a41026a2d00003a0000200441d8016a41086a2211200441e0006a41086a220f290300370300200441d8016a41106a220c200e2d00003a0000200420042f0198023b01bc01200420042903603703d8014101210302402015450d00200441c0016a41026a200441bc016a41026a2d00003a0000200441f0016a41086a2011290300370300200441f0016a41106a200c2d00003a0000200420042f01bc013b01c001200420042903d8013703f00141002103201221102028211a0b200441cc006a41026a221c200441c0016a41026a2d00003a0000200441386a41086a221e200441f0016a41086a2215290300370300200441386a41106a221f200441f0016a41106a22172d00003a0000200420042f01c0013b014c200420042903f00137033820030d02200441346a41026a2222201c2d00003a0000200441206a41086a220b201e290300370300200441206a41106a2206201f2d00003a0000200420042f014c3b01342004200429033837032041c400102c2203450d0a4100211c02402004280204221f2802082220200d4d0d002027201f280200200d4105746a220d41026a2d00003a0000200f200d41176a290000370300200e200d411f6a2d00003a00002004200d2f00003b0198022004200d29000f370360200d2900072121200d28000321294101211c0b4102211e200441bc016a41026a20044198026a41026a2d00003a00002011200f290300370300200c200e2d00003a0000200420042f0198023b01bc01200420042903603703d8014101210d0240201c450d00200441b8016a41026a200441bc016a41026a2d00003a0000201520112903003703002017200c2d00003a0000200420042f01bc013b01b801200420042903d8013703f0014100210d202121182029211e0b200441d4006a41026a221c200441b8016a41026a222a2d00003a0000200441c0016a41086a22192015290300370300200441c0016a41106a221320172d00003a0000200420042f01b8013b0154200420042903f0013703c001200d0d03200441d0006a41026a2205201c2d00003a0000200441a0016a41086a222b2019290300370300200441a0016a41106a221920132d00003a0000200420042f01543b0150200420042903c0013703a0014100210d02402020200a4d0d00202a201f280200200a4105746a220d41026a2d00003a0000200f200d41176a290000370300200e200d411f6a2d00003a00002004200d2f00003b01b8012004200d29000f370360200d290007212c200d280003212d4101210d0b4102211c200441bc016a41026a200441b8016a41026a2d00003a00002011200f290300370300200c200e2d00003a0000200420042f01b8013b01bc01200420042903603703d8014101210f0240200d450d00200441dc006a41026a200441bc016a41026a2d00003a0000201520112903003703002017200c2d00003a0000200420042f01bc013b015c200420042903d8013703f0014100210f202c2123202d211c0b200441d8006a41026a2211200441dc006a41026a2d00003a000020044198026a41086a220c201529030037030020044198026a41106a221520172d00003a0000200420042f015c3b0158200420042903f00137039802200f0d01200320042f01503b0100200320183700072003201e360003200320042903a00137000f2003201d3b0120200320042f01583b0022200341026a20052d00003a0000200341176a202b2903003700002003411f6a20192d00003a0000200341246a20112d00003a0000200320233700292003201c3600252003201d417f733b01422003200429039802370031200341396a200c290300370000200341c1006a20152d00003a0000200441086a41086a220c200b290300370300200441086a41106a220f20062d00003a0000200420042f01343b011c200420222d00003a001e200420042903203703080240024020082009470d00201b200841016a2211201b20114b1b22114104201141044b1bad422c7e222e422088a7454102742111202ea721150240024020080d00200441003602600c010b20044104360268200420073602602004201441656a3602640b200441f0016a20152011200441e0006a107d20042802f801211120042802f0014101460d0120042802f40121072011412c6e21090b200720146a221141656a2003360200201141696a428280808020370200201141786a201037000020042d001e210320042f011c2115201141746a201a360000201141716a221720153b0100201741026a20033a000020112004290308370000201141086a200c290300370000201141106a200f2d00003a0000201b41026a211b2014412c6a2114200841016a210820262016410c6a2216470d010c060b0b20110d090c080b2000201c36020420004101360200200041086a20233702002003102e0c020b2000201a36020420004101360200200041086a20103702000c010b2000201e36020420004101360200200041086a20183702002003102e0b4100211e4101210c02402024450d002024410c6c450d002025102e0b41012102410121164101211b4101211d4101211a4101210f410121154101211c4101210a410121174101210d410121144101210e0c010b02402024450d002024410c6c450d002025102e0b200128021821282001411c6a28020021270240200141206a2802002203450d00202820034104746a2125200441e0006a4102722116200441206a41086a21052028211e02400240024002400340201e2f010c211f201e28020021202004201e290204370320200441003b015c20044105360238200420053602dc012004200441386a3602e8012004200441046a3602e4012004200441dc006a3602e0012004200441206a3602d801200441e0006a200441d8016a108e060240024020042f01604101470d004122102c220f450d0c200f2016290100370100200f41206a201641206a221b2f01003b0100200f41186a201641186a221d290100370100200f41106a201641106a221a290100370100200f41086a201641086a221c29010037010020044198026a41106a200441d8016a41106a28020036020020044198026a41086a200441d8016a41086a290300370300200420042903d80137039802200441e0006a20044198026a108e06410121114101210e20042f01604101470d01410121114122210c4101210e02400340200441f0016a41206a2215201b2f01003b0100200441f0016a41186a2217201d290100370300200441f0016a41106a220d201a290100370300200441f0016a41086a2214201c290100370300200420162901003703f0010240200e2011470d00201141016a22032011490d0e2011410174220a2003200a20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7210a0240024020110d00200441003602c0010c010b200441023602c8012004200f3602c0012004201141226c3602c4010b200441a0016a200a2003200441c0016a107d20042802a801210320042802a0014101460d0220042802a401210f200341226e21110b200f200c6a220320042903f001370100200341206a20152f01003b0100200341186a2017290300370100200341106a200d290300370100200341086a2014290300370100200c41226a210c200e41016a210e200441e0006a20044198026a108e0620042f01604101460d000c030b0b20030d0c0c0b0b410021114102210f4100210e0b0240200428023822034105460d00200429023c211002402011450d00201141226c450d00200f102e0b20002003360204200041013602002000410c6a20104220883e0200200041086a20103e02000c050b20042f015c222241ffff03460d024100210302402004280204220c280208201f4d0d00200441a0016a41026a200c280200201f4105746a220341026a2d00003a0000200441e0006a41086a200341176a290000370300200441e0006a41106a2003411f6a2d00003a0000200420032f00003b01a0012004200329000f370360200329000721122003280003212b410121030b4102211a200441bc016a41026a200441a0016a41026a2d00003a0000200441d8016a41086a221b200441e0006a41086a221c290300370300200441d8016a41106a221d200441e0006a41106a220a2d00003a0000200420042f01a0013b01bc01200420042903603703d8014101210d02402003450d00200441386a41026a200441bc016a41026a2d00003a0000200441f0016a41086a201b290300370300200441f0016a41106a201d2d00003a0000200420042f01bc013b0138200420042903d8013703f0014100210d20122118202b211a0b200441086a41026a220c200441386a41026a221f2d00003a000020044198026a41086a2215200441f0016a41086a221929030037030020044198026a41106a2217200441f0016a41106a22132d00003a0000200420042f01383b0108200420042903f0013703980202400240024002400240200d0d00200441b8016a41026a220b200c2d00003a0000200441c0016a41086a220d2015290300370300200441c0016a41106a221420172d00003a0000200420042f01083b01b80120042004290398023703c001024002400240200e2011460d0020112106200e21110c010b201141016a22032011490d10201141017422062003200620034b1b22034104200341044b1bad42227e2210422088a74541017421032010a721060240024020110d00200441003602600c010b200441023602682004200f3602602004201141226c3602640b200441f0016a20062003200441e0006a107d20042802f801210320042802f0014101460d0120042802f401210f200341226e21060b200f201141226c6a22032018370007200b2d0000211120042f01b801210b2003201a3600032003200b3b0100200341026a20113a0000200320042903c00137000f200341176a200d2903003700002003411f6a20142d00003a000020032022417f733b0120410021030240200228020820204d0d00200441a0016a41026a2002280200202041386c6a2203410a6a2d00003a0000201c2003411f6a290000370300200a200341276a2d00003a0000200420032f00083b01a0012004200341176a2900003703602003410f6a29000021212003410b6a280000212a410121030b4102211a200441bc016a41026a200441a0016a41026a2d00003a0000201b201c290300370300201d200a2d00003a0000200420042f01a0013b01bc01200420042903603703d8014101211102402003450d00201f200441bc016a41026a2d00003a00002019201b2903003703002013201d2d00003a0000200420042f01bc013b0138200420042903d8013703f0014100211120212123202a211a0b200c201f2d00003a000020152019290300370300201720132d00003a0000200420042f01383b0108200420042903f0013703980220110d07200d2015290300370300201420172d00003a0000200420042f01083b01b80120042004290398023703c0012004200c2d00003a00ba0120082009470d0420084101742203200841016a2211200320114b1b22034104200341044b1bad422c7e2210422088a74541027421032010a7211120080d02200441003602600c030b20030d0f0c0e0b2000201a36020420004101360200200041086a20183702000c070b200441043602682004200736026020042008412c6c3602640b200441f0016a20112003200441e0006a107d20042802f801210320042802f0014101460d0120042802f40121072003412c6e21090b20072008412c6c6a2203200e41016a360208200320063602042003200f360200200341136a2023370000200320042f01b8013b010c2003410e6a20042d00ba013a00002003410f6a201a3600002003411b6a20042903c001370000200341236a200d2903003700002003412b6a20142d00003a0000200841016a2108201e41106a221e2025470d010c060b0b20030d090c080b2000201a36020420004101360200200041086a2023370200200621110c010b200042013702000b2011450d00201141226c450d00200f102e0b4100210e4101210c0240202741ffffffff0071450d002028102e0b41012102410121164101211b4101211d4101211a4101210f410121154101211c4101210a410121174101210d410121144100211e0c010b0240202741ffffffff0071450d002028102e0b20012802242127200141286a2802002129024002402001412c6a2802002203450d002027200341146c6a2128200441e0006a4102722116200441206a410c6a2105200441206a41086a212b2027211e02400240024002400340201e2f0110211f201e2802002120201e2901042110202b201e410c6a28010036020020042010370320200441003b015c20044105360238200420053602dc012004200441386a3602e8012004200441046a3602e4012004200441dc006a3602e0012004200441206a3602d801200441e0006a200441d8016a108e060240024020042f01604101470d004122102c220f450d0d200f2016290100370100200f41206a201641206a221b2f01003b0100200f41186a201641186a221d290100370100200f41106a201641106a221a290100370100200f41086a201641086a221c29010037010020044198026a41106a200441d8016a41106a28020036020020044198026a41086a200441d8016a41086a290300370300200420042903d80137039802200441e0006a20044198026a108e06410121114101210e20042f01604101470d01410121114122210c4101210e02400340200441f0016a41206a2215201b2f01003b0100200441f0016a41186a2217201d290100370300200441f0016a41106a220d201a290100370300200441f0016a41086a2214201c290100370300200420162901003703f0010240200e2011470d00201141016a22032011490d0f2011410174220a2003200a20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7210a0240024020110d00200441003602c0010c010b200441023602c8012004200f3602c0012004201141226c3602c4010b200441a0016a200a2003200441c0016a107d20042802a801210320042802a0014101460d0220042802a401210f200341226e21110b200f200c6a220320042903f001370100200341206a20152f01003b0100200341186a2017290300370100200341106a200d290300370100200341086a2014290300370100200c41226a210c200e41016a210e200441e0006a20044198026a108e0620042f01604101460d000c030b0b20030d0d0c0c0b410021114102210f4100210e0b0240200428023822034105460d00200429023c211002402011450d00201141226c450d00200f102e0b20002003360204200041013602002000410c6a20104220883e0200200041086a20103e02000c050b20042f015c222241ffff03460d024100210302402004280204220c280208201f4d0d00200441a0016a41026a200c280200201f4105746a220341026a2d00003a0000200441e0006a41086a200341176a290000370300200441e0006a41106a2003411f6a2d00003a0000200420032f00003b01a0012004200329000f370360200329000721122003280003212a410121030b4102211a200441bc016a41026a200441a0016a41026a2d00003a0000200441d8016a41086a221b200441e0006a41086a221c290300370300200441d8016a41106a221d200441e0006a41106a220a2d00003a0000200420042f01a0013b01bc01200420042903603703d8014101210d02402003450d00200441386a41026a200441bc016a41026a2d00003a0000200441f0016a41086a201b290300370300200441f0016a41106a201d2d00003a0000200420042f01bc013b0138200420042903d8013703f0014100210d20122118202a211a0b200441086a41026a220c200441386a41026a221f2d00003a000020044198026a41086a2215200441f0016a41086a221929030037030020044198026a41106a2217200441f0016a41106a22132d00003a0000200420042f01383b0108200420042903f0013703980202400240024002400240200d0d00200441b8016a41026a220b200c2d00003a0000200441c0016a41086a220d2015290300370300200441c0016a41106a221420172d00003a0000200420042f01083b01b80120042004290398023703c001024002400240200e2011460d0020112106200e21110c010b201141016a22032011490d11201141017422062003200620034b1b22034104200341044b1bad42227e2210422088a74541017421032010a721060240024020110d00200441003602600c010b200441023602682004200f3602602004201141226c3602640b200441f0016a20062003200441e0006a107d20042802f801210320042802f0014101460d0120042802f401210f200341226e21060b200f201141226c6a22032018370007200b2d0000211120042f01b801210b2003201a3600032003200b3b0100200341026a20113a0000200320042903c00137000f200341176a200d2903003700002003411f6a20142d00003a000020032022417f733b0120410021030240200228020820204d0d00200441a0016a41026a2002280200202041386c6a2203410a6a2d00003a0000201c2003411f6a290000370300200a200341276a2d00003a0000200420032f00083b01a0012004200341176a2900003703602003410f6a29000021212003410b6a2800002125410121030b41022111200441bc016a41026a200441a0016a41026a2d00003a0000201b201c290300370300201d200a2d00003a0000200420042f01a0013b01bc01200420042903603703d8014101211a02402003450d00201f200441bc016a41026a2d00003a00002019201b2903003703002013201d2d00003a0000200420042f01bc013b0138200420042903d8013703f0014100211a20212123202521110b200c201f2d00003a000020152019290300370300201720132d00003a0000200420042f01383b0108200420042903f00137039802201a0d07200d2015290300370300201420172d00003a0000200420042f01083b01b80120042004290398023703c0012004200c2d00003a00ba0120082009470d0420084101742203200841016a220c2003200c4b1b22034104200341044b1bad422c7e2210422088a74541027421032010a7210c20080d02200441003602600c030b20030d100c0f0b2000201a36020420004101360200200041086a20183702000c070b200441043602682004200736026020042008412c6c3602640b200441f0016a200c2003200441e0006a107d20042802f801210320042802f0014101460d0120042802f40121072003412c6e21090b20072008412c6c6a2203200e41016a360208200320063602042003200f360200200341136a2023370000200320042f01b8013b010c2003410e6a20042d00ba013a00002003410f6a20113600002003411b6a20042903c001370000200341236a200d2903003700002003412b6a20142d00003a0000200841016a2108201e41146a221e2028470d010c060b0b20030d0a0c090b2000201136020420004101360200200041086a2023370200200621110c010b200042013702000b2011450d00201141226c450d00200f102e0b410021144101210c02402029450d00202941146c450d002027102e0b41012102410121164101211b4101211d4101211a4101210f410121154101211c4101210a410121174101210d0c010b02402029450d00202941146c450d002027102e0b20012802302127200141346a280200212902400240200141386a2802002203450d002027200341186c6a2128200441e0006a4102722116200441a0016a41106a2105200441a0016a41086a212b2027211e02400240024002400340201e2f0114211f201e2802002120201e2901042110202b201e410c6a290100370300200420103703a001200441003b015c20044105360220200420053602dc012004200441206a3602e8012004200441046a3602e4012004200441dc006a3602e0012004200441a0016a3602d801200441e0006a200441d8016a108e060240024020042f01604101470d004122102c220f450d0e200f2016290100370100200f41206a201641206a221b2f01003b0100200f41186a201641186a221d290100370100200f41106a201641106a221a290100370100200f41086a201641086a221c29010037010020044198026a41106a200441d8016a41106a28020036020020044198026a41086a200441d8016a41086a290300370300200420042903d80137039802200441e0006a20044198026a108e06410121114101210e20042f01604101470d01410121114122210c4101210e02400340200441f0016a41206a2215201b2f01003b0100200441f0016a41186a2217201d290100370300200441f0016a41106a220d201a290100370300200441f0016a41086a2214201c290100370300200420162901003703f0010240200e2011470d00201141016a22032011490d102011410174220a2003200a20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7210a0240024020110d00200441003602c0010c010b200441023602c8012004200f3602c0012004201141226c3602c4010b200441386a200a2003200441c0016a107d2004280240210320042802384101460d02200428023c210f200341226e21110b200f200c6a220320042903f001370100200341206a20152f01003b0100200341186a2017290300370100200341106a200d290300370100200341086a2014290300370100200c41226a210c200e41016a210e200441e0006a20044198026a108e0620042f01604101460d000c030b0b20030d0e0c0d0b410021114102210f4100210e0b0240200428022022034105460d002004290224211002402011450d00201141226c450d00200f102e0b20002003360204200041013602002000410c6a20104220883e0200200041086a20103e02000c050b20042f015c222241ffff03460d024100210302402004280204220c280208201f4d0d00200441386a41026a200c280200201f4105746a220341026a2d00003a0000200441e0006a41086a200341176a290000370300200441e0006a41106a2003411f6a2d00003a0000200420032f00003b01382004200329000f370360200329000721122003280003212a410121030b4102211a200441bc016a41026a200441386a41026a2d00003a0000200441d8016a41086a221b200441e0006a41086a221c290300370300200441d8016a41106a221d200441e0006a41106a220a2d00003a0000200420042f01383b01bc01200420042903603703d8014101210d02402003450d00200441206a41026a200441bc016a41026a2d00003a0000200441f0016a41086a201b290300370300200441f0016a41106a201d2d00003a0000200420042f01bc013b0120200420042903d8013703f0014100210d20122118202a211a0b200441086a41026a220c200441206a41026a221f2d00003a000020044198026a41086a2215200441f0016a41086a221929030037030020044198026a41106a2217200441f0016a41106a22132d00003a0000200420042f01203b0108200420042903f0013703980202400240024002400240200d0d00200441b8016a41026a220b200c2d00003a0000200441c0016a41086a220d2015290300370300200441c0016a41106a221420172d00003a0000200420042f01083b01b80120042004290398023703c001024002400240200e2011460d0020112106200e21110c010b201141016a22032011490d12201141017422062003200620034b1b22034104200341044b1bad42227e2210422088a74541017421032010a721060240024020110d00200441003602600c010b200441023602682004200f3602602004201141226c3602640b200441f0016a20062003200441e0006a107d20042802f801210320042802f0014101460d0120042802f401210f200341226e21060b200f201141226c6a22032018370007200b2d0000211120042f01b801210b2003201a3600032003200b3b0100200341026a20113a0000200320042903c00137000f200341176a200d2903003700002003411f6a20142d00003a000020032022417f733b0120410021030240200228020820204d0d00200441386a41026a2002280200202041386c6a2203410a6a2d00003a0000201c2003411f6a290000370300200a200341276a2d00003a0000200420032f00083b01382004200341176a2900003703602003410f6a29000021212003410b6a2800002125410121030b41022111200441bc016a41026a200441386a41026a2d00003a0000201b201c290300370300201d200a2d00003a0000200420042f01383b01bc01200420042903603703d8014101211a02402003450d00201f200441bc016a41026a2d00003a00002019201b2903003703002013201d2d00003a0000200420042f01bc013b0120200420042903d8013703f0014100211a20212123202521110b200c201f2d00003a000020152019290300370300201720132d00003a0000200420042f01203b0108200420042903f00137039802201a0d07200d2015290300370300201420172d00003a0000200420042f01083b01b80120042004290398023703c0012004200c2d00003a00ba0120082009470d0420084101742203200841016a220c2003200c4b1b22034104200341044b1bad422c7e2210422088a74541027421032010a7210c20080d02200441003602600c030b20030d110c100b2000201a36020420004101360200200041086a20183702000c070b200441043602682004200736026020042008412c6c3602640b200441f0016a200c2003200441e0006a107d20042802f801210320042802f0014101460d0120042802f40121072003412c6e21090b20072008412c6c6a2203200e41016a360208200320063602042003200f360200200341136a2023370000200320042f01b8013b010c2003410e6a20042d00ba013a00002003410f6a20113600002003411b6a20042903c001370000200341236a200d2903003700002003412b6a20142d00003a0000200841016a2108201e41186a221e2028470d010c060b0b20030d0b0c0a0b2000201136020420004101360200200041086a2023370200200621110c010b200042013702000b2011450d00201141226c450d00200f102e0b4100210d4101210c02402029450d00202941186c450d002027102e0b41012102410121164101211b4101211d4101211a4101210f410121154101211c4101210a410121170c010b02402029450d00202941186c450d002027102e0b200128023c2129200141c0006a280200212d02400240200141c4006a2802002203450d0020292003411c6c6a2127200441e0006a4102722116200441c0016a41146a2105200441c0016a41106a212b200441c0016a41086a212a2029211e02400240024002400340201e2f0118211f201e2802002120201e410c6a2901002110201e2901042118202b201e41146a280100360200202a2010370300200420183703c001200441003b015c20044105360220200420053602dc012004200441206a3602e8012004200441046a3602e4012004200441dc006a3602e0012004200441c0016a3602d801200441e0006a200441d8016a108e060240024020042f01604101470d004122102c220f450d0f200f2016290100370100200f41206a201641206a221b2f01003b0100200f41186a201641186a221d290100370100200f41106a201641106a221a290100370100200f41086a201641086a221c29010037010020044198026a41106a200441d8016a41106a28020036020020044198026a41086a200441d8016a41086a290300370300200420042903d80137039802200441e0006a20044198026a108e06410121114101210e20042f01604101470d01410121114122210c4101210e02400340200441f0016a41206a2215201b2f01003b0100200441f0016a41186a2217201d290100370300200441f0016a41106a220d201a290100370300200441f0016a41086a2214201c290100370300200420162901003703f0010240200e2011470d00201141016a22032011490d112011410174220a2003200a20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7210a0240024020110d00200441003602a0010c010b200441023602a8012004200f3602a0012004201141226c3602a4010b200441386a200a2003200441a0016a107d2004280240210320042802384101460d02200428023c210f200341226e21110b200f200c6a220320042903f001370100200341206a20152f01003b0100200341186a2017290300370100200341106a200d290300370100200341086a2014290300370100200c41226a210c200e41016a210e200441e0006a20044198026a108e0620042f01604101460d000c030b0b20030d0f0c0e0b410021114102210f4100210e0b0240200428022022034105460d002004290224211002402011450d00201141226c450d00200f102e0b20002003360204200041013602002000410c6a20104220883e0200200041086a20103e02000c050b20042f015c222241ffff03460d024100210302402004280204220c280208201f4d0d00200441386a41026a200c280200201f4105746a220341026a2d00003a0000200441e0006a41086a200341176a290000370300200441e0006a41106a2003411f6a2d00003a0000200420032f00003b01382004200329000f3703602003290007212120032800032125410121030b4102211a200441bc016a41026a200441386a41026a2d00003a0000200441d8016a41086a221b200441e0006a41086a221c290300370300200441d8016a41106a221d200441e0006a41106a220a2d00003a0000200420042f01383b01bc01200420042903603703d8014101210d02402003450d00200441206a41026a200441bc016a41026a2d00003a0000200441f0016a41086a201b290300370300200441f0016a41106a201d2d00003a0000200420042f01bc013b0120200420042903d8013703f0014100210d202121232025211a0b200441086a41026a220c200441206a41026a221f2d00003a000020044198026a41086a2215200441f0016a41086a221929030037030020044198026a41106a2217200441f0016a41106a22132d00003a0000200420042f01203b0108200420042903f0013703980202400240024002400240200d0d00200441b8016a41026a220b200c2d00003a0000200441a0016a41086a220d2015290300370300200441a0016a41106a221420172d00003a0000200420042f01083b01b80120042004290398023703a001024002400240200e2011460d0020112106200e21110c010b201141016a22032011490d13201141017422062003200620034b1b22034104200341044b1bad42227e2210422088a74541017421032010a721060240024020110d00200441003602600c010b200441023602682004200f3602602004201141226c3602640b200441f0016a20062003200441e0006a107d20042802f801210320042802f0014101460d0120042802f401210f200341226e21060b200f201141226c6a22032023370007200b2d0000211120042f01b801210b2003201a3600032003200b3b0100200341026a20113a0000200320042903a00137000f200341176a200d2903003700002003411f6a20142d00003a000020032022417f733b0120410021030240200228020820204d0d00200441386a41026a2002280200202041386c6a2203410a6a2d00003a0000201c2003411f6a290000370300200a200341276a2d00003a0000200420032f00083b01382004200341176a2900003703602003410f6a290000212c2003410b6a2800002128410121030b41022111200441bc016a41026a200441386a41026a2d00003a0000201b201c290300370300201d200a2d00003a0000200420042f01383b01bc01200420042903603703d8014101211a02402003450d00201f200441bc016a41026a2d00003a00002019201b2903003703002013201d2d00003a0000200420042f01bc013b0120200420042903d8013703f0014100211a202c2112202821110b200c201f2d00003a000020152019290300370300201720132d00003a0000200420042f01203b0108200420042903f00137039802201a0d07200d2015290300370300201420172d00003a0000200420042f01083b01b80120042004290398023703a0012004200c2d00003a00ba0120082009470d04200841016a22032008490d122008410174220c2003200c20034b1b22034104200341044b1bad422c7e2210422088a74541027421032010a7210c20080d02200441003602600c030b20030d120c110b2000201a36020420004101360200200041086a20233702000c070b200441043602682004200736026020042008412c6c3602640b200441f0016a200c2003200441e0006a107d20042802f801210320042802f0014101460d0120042802f40121072003412c6e21090b20072008412c6c6a2203200e41016a360208200320063602042003200f360200200341136a2012370000200320042f01b8013b010c2003410e6a20042d00ba013a00002003410f6a20113600002003411b6a20042903a001370000200341236a200d2903003700002003412b6a20142d00003a0000200841016a2108201e411c6a221e2027470d010c060b0b20030d0c0c0b0b2000201136020420004101360200200041086a2012370200200621110c010b200042013702000b2011450d00201141226c450d00200f102e0b410021174101210c0240202d450d00202d411c6c450d002029102e0b41012102410121164101211b4101211d4101211a4101210f410121154101211c4101210a0c010b0240202d450d00202d411c6c450d002029102e0b20012802482129200141cc006a280200212d02400240200141d0006a2802002203450d00202920034105746a2127200441e0006a410272211620044198026a41186a210520044198026a41106a212b20044198026a41086a212a2029211e02400240024002400340201e2f011c211f201e2802002120201e410c6a2901002110201e2901042118202b201e41146a290100370300202a20103703002004201837039802200441003b015c20044105360220200420053602c4012004200441206a3602d0012004200441046a3602cc012004200441dc006a3602c801200420044198026a3602c001200441e0006a200441c0016a108e060240024020042f01604101470d004122102c220f450d10200f2016290100370100200f41206a201641206a221b2f01003b0100200f41186a201641186a221d290100370100200f41106a201641106a221a290100370100200f41086a201641086a221c290100370100200441d8016a41106a200441c0016a41106a280200360200200441d8016a41086a200441c0016a41086a290300370300200420042903c0013703d801200441e0006a200441d8016a108e06410121114101210e20042f01604101470d01410121114122210c4101210e02400340200441f0016a41206a2215201b2f01003b0100200441f0016a41186a2217201d290100370300200441f0016a41106a220d201a290100370300200441f0016a41086a2214201c290100370300200420162901003703f0010240200e2011470d00201141016a22032011490d122011410174220a2003200a20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7210a0240024020110d00200441003602a0010c010b200441023602a8012004200f3602a0012004201141226c3602a4010b200441386a200a2003200441a0016a107d2004280240210320042802384101460d02200428023c210f200341226e21110b200f200c6a220320042903f001370100200341206a20152f01003b0100200341186a2017290300370100200341106a200d290300370100200341086a2014290300370100200c41226a210c200e41016a210e200441e0006a200441d8016a108e0620042f01604101460d000c030b0b20030d100c0f0b410021114102210f4100210e0b0240200428022022034105460d002004290224211002402011450d00201141226c450d00200f102e0b20002003360204200041013602002000410c6a20104220883e0200200041086a20103e02000c050b20042f015c222241ffff03460d024100210302402004280204220c280208201f4d0d00200441386a41026a200c280200201f4105746a220341026a2d00003a0000200441e0006a41086a200341176a290000370300200441e0006a41106a2003411f6a2d00003a0000200420032f00003b01382004200329000f3703602003290007212120032800032125410121030b4102211a200441bc016a41026a200441386a41026a2d00003a0000200441d8016a41086a221b200441e0006a41086a221c290300370300200441d8016a41106a221d200441e0006a41106a220a2d00003a0000200420042f01383b01bc01200420042903603703d8014101210d02402003450d00200441206a41026a200441bc016a41026a2d00003a0000200441f0016a41086a201b290300370300200441f0016a41106a201d2d00003a0000200420042f01bc013b0120200420042903d8013703f0014100210d202121232025211a0b200441086a41026a220c200441206a41026a221f2d00003a0000200441c0016a41086a2215200441f0016a41086a2219290300370300200441c0016a41106a2217200441f0016a41106a22132d00003a0000200420042f01203b0108200420042903f0013703c00102400240024002400240200d0d00200441b8016a41026a220b200c2d00003a0000200441a0016a41086a220d2015290300370300200441a0016a41106a221420172d00003a0000200420042f01083b01b801200420042903c0013703a001024002400240200e2011460d0020112106200e21110c010b201141016a22032011490d14201141017422062003200620034b1b22034104200341044b1bad42227e2210422088a74541017421032010a721060240024020110d00200441003602600c010b200441023602682004200f3602602004201141226c3602640b200441f0016a20062003200441e0006a107d20042802f801210320042802f0014101460d0120042802f401210f200341226e21060b200f201141226c6a22032023370007200b2d0000211120042f01b801210b2003201a3600032003200b3b0100200341026a20113a0000200320042903a00137000f200341176a200d2903003700002003411f6a20142d00003a000020032022417f733b0120410021030240200228020820204d0d00200441386a41026a2002280200202041386c6a2203410a6a2d00003a0000201c2003411f6a290000370300200a200341276a2d00003a0000200420032f00083b01382004200341176a2900003703602003410f6a290000212c2003410b6a2800002128410121030b41022111200441bc016a41026a200441386a41026a2d00003a0000201b201c290300370300201d200a2d00003a0000200420042f01383b01bc01200420042903603703d8014101211a02402003450d00201f200441bc016a41026a2d00003a00002019201b2903003703002013201d2d00003a0000200420042f01bc013b0120200420042903d8013703f0014100211a20282111202c21120b200c201f2d00003a000020152019290300370300201720132d00003a0000200420042f01203b0108200420042903f0013703c001201a0d07200d2015290300370300201420172d00003a0000200420042f01083b01b801200420042903c0013703a0012004200c2d00003a00ba0120082009470d04200841016a22032008490d132008410174220c2003200c20034b1b22034104200341044b1bad422c7e2210422088a74541027421032010a7210c20080d02200441003602600c030b20030d130c120b2000201a36020420004101360200200041086a20233702000c070b200441043602682004200736026020042008412c6c3602640b200441f0016a200c2003200441e0006a107d20042802f801210320042802f0014101460d0120042802f40121072003412c6e21090b20072008412c6c6a2203200e41016a360208200320063602042003200f360200200341136a2012370000200320042f01b8013b010c2003410e6a20042d00ba013a00002003410f6a20113600002003411b6a20042903a001370000200341236a200d2903003700002003412b6a20142d00003a0000200841016a2108201e41206a221e2027470d010c060b0b20030d0d0c0c0b2000201136020420004101360200200041086a2012370200200621110c010b200042013702000b2011450d00201141226c450d00200f102e0b4100210a4101210c0240202d41ffffff3f71450d002029102e0b41012102410121164101211b4101211d4101211a4101210f410121154101211c0c010b0240202d41ffffff3f71450d002029102e0b2001280254212d200141d8006a280200212602400240200141dc006a2802002203450d00202d200341246c6a2129200441e0006a410272211620044198026a411c6a210520044198026a41186a212b20044198026a41106a212a20044198026a41086a2125202d211e02400240024002400340201e2f0120211f201e2802002120201e410c6a2901002110201e41146a2901002118201e2901042123202b201e411c6a280100360200202a2018370300202520103703002004202337039802200441003b015c20044105360220200420053602c4012004200441206a3602d0012004200441046a3602cc012004200441dc006a3602c801200420044198026a3602c001200441e0006a200441c0016a108e060240024020042f01604101470d004122102c220f450d11200f2016290100370100200f41206a201641206a221b2f01003b0100200f41186a201641186a221d290100370100200f41106a201641106a221a290100370100200f41086a201641086a221c290100370100200441d8016a41106a200441c0016a41106a280200360200200441d8016a41086a200441c0016a41086a290300370300200420042903c0013703d801200441e0006a200441d8016a108e06410121114101210e20042f01604101470d01410121114122210c4101210e02400340200441f0016a41206a2215201b2f01003b0100200441f0016a41186a2217201d290100370300200441f0016a41106a220d201a290100370300200441f0016a41086a2214201c290100370300200420162901003703f0010240200e2011470d00201141016a22032011490d132011410174220a2003200a20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7210a0240024020110d00200441003602a0010c010b200441023602a8012004200f3602a0012004201141226c3602a4010b200441386a200a2003200441a0016a107d2004280240210320042802384101460d02200428023c210f200341226e21110b200f200c6a220320042903f001370100200341206a20152f01003b0100200341186a2017290300370100200341106a200d290300370100200341086a2014290300370100200c41226a210c200e41016a210e200441e0006a200441d8016a108e0620042f01604101460d000c030b0b20030d110c100b410021114102210f4100210e0b0240200428022022034105460d002004290224211002402011450d00201141226c450d00200f102e0b20002003360204200041013602002000410c6a20104220883e0200200041086a20103e02000c050b20042f015c222241ffff03460d024100210302402004280204220c280208201f4d0d00200441386a41026a200c280200201f4105746a220341026a2d00003a0000200441e0006a41086a200341176a290000370300200441e0006a41106a2003411f6a2d00003a0000200420032f00003b01382004200329000f3703602003290007212c20032800032128410121030b4102211a200441bc016a41026a200441386a41026a2d00003a0000200441d8016a41086a221b200441e0006a41086a221c290300370300200441d8016a41106a221d200441e0006a41106a220a2d00003a0000200420042f01383b01bc01200420042903603703d8014101210d02402003450d00200441206a41026a200441bc016a41026a2d00003a0000200441f0016a41086a201b290300370300200441f0016a41106a201d2d00003a0000200420042f01bc013b0120200420042903d8013703f0014100210d2028211a202c21120b200441086a41026a220c200441206a41026a221f2d00003a0000200441c0016a41086a2215200441f0016a41086a2219290300370300200441c0016a41106a2217200441f0016a41106a22132d00003a0000200420042f01203b0108200420042903f0013703c00102400240024002400240200d0d00200441b8016a41026a220b200c2d00003a0000200441a0016a41086a220d2015290300370300200441a0016a41106a221420172d00003a0000200420042f01083b01b801200420042903c0013703a001024002400240200e2011460d0020112106200e21110c010b201141016a22032011490d15201141017422062003200620034b1b22034104200341044b1bad42227e2210422088a74541017421032010a721060240024020110d00200441003602600c010b200441023602682004200f3602602004201141226c3602640b200441f0016a20062003200441e0006a107d20042802f801210320042802f0014101460d0120042802f401210f200341226e21060b200f201141226c6a22032012370007200b2d0000211120042f01b801210b2003201a3600032003200b3b0100200341026a20113a0000200320042903a00137000f200341176a200d2903003700002003411f6a20142d00003a000020032022417f733b0120410021030240200228020820204d0d00200441386a41026a2002280200202041386c6a2203410a6a2d00003a0000201c2003411f6a290000370300200a200341276a2d00003a0000200420032f00083b01382004200341176a2900003703602003410f6a290000212e2003410b6a2800002127410121030b41022111200441bc016a41026a200441386a41026a2d00003a0000201b201c290300370300201d200a2d00003a0000200420042f01383b01bc01200420042903603703d8014101211a02402003450d00201f200441bc016a41026a2d00003a00002019201b2903003703002013201d2d00003a0000200420042f01bc013b0120200420042903d8013703f0014100211a20272111202e21210b200c201f2d00003a000020152019290300370300201720132d00003a0000200420042f01203b0108200420042903f0013703c001201a0d07200d2015290300370300201420172d00003a0000200420042f01083b01b801200420042903c0013703a0012004200c2d00003a00ba0120082009470d04200841016a22032008490d142008410174220c2003200c20034b1b22034104200341044b1bad422c7e2210422088a74541027421032010a7210c20080d02200441003602600c030b20030d140c130b2000201a36020420004101360200200041086a20123702000c070b200441043602682004200736026020042008412c6c3602640b200441f0016a200c2003200441e0006a107d20042802f801210320042802f0014101460d0120042802f40121072003412c6e21090b20072008412c6c6a2203200e41016a360208200320063602042003200f360200200341136a2021370000200320042f01b8013b010c2003410e6a20042d00ba013a00002003410f6a20113600002003411b6a20042903a001370000200341236a200d2903003700002003412b6a20142d00003a0000200841016a2108201e41246a221e2029470d010c060b0b20030d0e0c0d0b2000201136020420004101360200200041086a2021370200200621110c010b200042013702000b2011450d00201141226c450d00200f102e0b4100211c4101210c02402026450d00202641246c450d00202d102e0b41012102410121164101211b4101211d4101211a4101210f410121150c010b02402026450d00202641246c450d00202d102e0b2001280260212d200141e4006a280200212602400240200141e8006a2802002203450d00202d200341286c6a2129200441e0006a410272211620044198026a41206a210520044198026a41186a212b20044198026a41106a212a20044198026a41086a2125202d211e02400240024002400340201e2f0124211f201e2802002120201e410c6a2901002110201e41146a2901002118201e2901042123202b201e411c6a290100370300202a2018370300202520103703002004202337039802200441003b015c20044105360220200420053602c4012004200441206a3602d0012004200441046a3602cc012004200441dc006a3602c801200420044198026a3602c001200441e0006a200441c0016a108e060240024020042f01604101470d004122102c220f450d12200f2016290100370100200f41206a201641206a221b2f01003b0100200f41186a201641186a221d290100370100200f41106a201641106a221a290100370100200f41086a201641086a221c290100370100200441d8016a41106a200441c0016a41106a280200360200200441d8016a41086a200441c0016a41086a290300370300200420042903c0013703d801200441e0006a200441d8016a108e06410121114101210e20042f01604101470d01410121114122210c4101210e02400340200441f0016a41206a2215201b2f01003b0100200441f0016a41186a2217201d290100370300200441f0016a41106a220d201a290100370300200441f0016a41086a2214201c290100370300200420162901003703f0010240200e2011470d00201141016a22032011490d142011410174220a2003200a20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7210a0240024020110d00200441003602a0010c010b200441023602a8012004200f3602a0012004201141226c3602a4010b200441386a200a2003200441a0016a107d2004280240210320042802384101460d02200428023c210f200341226e21110b200f200c6a220320042903f001370100200341206a20152f01003b0100200341186a2017290300370100200341106a200d290300370100200341086a2014290300370100200c41226a210c200e41016a210e200441e0006a200441d8016a108e0620042f01604101460d000c030b0b20030d120c110b410021114102210f4100210e0b0240200428022022034105460d002004290224211002402011450d00201141226c450d00200f102e0b20002003360204200041013602002000410c6a20104220883e0200200041086a20103e02000c050b20042f015c222241ffff03460d024100210302402004280204220c280208201f4d0d00200441386a41026a200c280200201f4105746a220341026a2d00003a0000200441e0006a41086a200341176a290000370300200441e0006a41106a2003411f6a2d00003a0000200420032f00003b01382004200329000f3703602003290007212c20032800032128410121030b4102211a200441bc016a41026a200441386a41026a2d00003a0000200441d8016a41086a221b200441e0006a41086a221c290300370300200441d8016a41106a221d200441e0006a41106a220a2d00003a0000200420042f01383b01bc01200420042903603703d8014101210d02402003450d00200441206a41026a200441bc016a41026a2d00003a0000200441f0016a41086a201b290300370300200441f0016a41106a201d2d00003a0000200420042f01bc013b0120200420042903d8013703f0014100210d2028211a202c21120b200441086a41026a220c200441206a41026a221f2d00003a0000200441c0016a41086a2215200441f0016a41086a2219290300370300200441c0016a41106a2217200441f0016a41106a22132d00003a0000200420042f01203b0108200420042903f0013703c00102400240024002400240200d0d00200441b8016a41026a220b200c2d00003a0000200441a0016a41086a220d2015290300370300200441a0016a41106a221420172d00003a0000200420042f01083b01b801200420042903c0013703a001024002400240200e2011460d0020112106200e21110c010b201141016a22032011490d16201141017422062003200620034b1b22034104200341044b1bad42227e2210422088a74541017421032010a721060240024020110d00200441003602600c010b200441023602682004200f3602602004201141226c3602640b200441f0016a20062003200441e0006a107d20042802f801210320042802f0014101460d0120042802f401210f200341226e21060b200f201141226c6a22032012370007200b2d0000211120042f01b801210b2003201a3600032003200b3b0100200341026a20113a0000200320042903a00137000f200341176a200d2903003700002003411f6a20142d00003a000020032022417f733b0120410021030240200228020820204d0d00200441386a41026a2002280200202041386c6a2203410a6a2d00003a0000201c2003411f6a290000370300200a200341276a2d00003a0000200420032f00083b01382004200341176a2900003703602003410f6a290000212e2003410b6a2800002127410121030b41022111200441bc016a41026a200441386a41026a2d00003a0000201b201c290300370300201d200a2d00003a0000200420042f01383b01bc01200420042903603703d8014101211a02402003450d00201f200441bc016a41026a2d00003a00002019201b2903003703002013201d2d00003a0000200420042f01bc013b0120200420042903d8013703f0014100211a20272111202e21210b200c201f2d00003a000020152019290300370300201720132d00003a0000200420042f01203b0108200420042903f0013703c001201a0d07200d2015290300370300201420172d00003a0000200420042f01083b01b801200420042903c0013703a0012004200c2d00003a00ba0120082009470d04200841016a22032008490d152008410174220c2003200c20034b1b22034104200341044b1bad422c7e2210422088a74541027421032010a7210c20080d02200441003602600c030b20030d150c140b2000201a36020420004101360200200041086a20123702000c070b200441043602682004200736026020042008412c6c3602640b200441f0016a200c2003200441e0006a107d20042802f801210320042802f0014101460d0120042802f40121072003412c6e21090b20072008412c6c6a2203200e41016a360208200320063602042003200f360200200341136a2021370000200320042f01b8013b010c2003410e6a20042d00ba013a00002003410f6a20113600002003411b6a20042903a001370000200341236a200d2903003700002003412b6a20142d00003a0000200841016a2108201e41286a221e2029470d010c060b0b20030d0f0c0e0b2000201136020420004101360200200041086a2021370200200621110c010b200042013702000b2011450d00201141226c450d00200f102e0b410021154101210c02402026450d00202641286c450d00202d102e0b41012102410121164101211b4101211d4101211a4101210f0c010b02402026450d00202641286c450d00202d102e0b200128026c2126200141f0006a280200212402400240200141f4006a2802002203450d0020262003412c6c6a212d200441e0006a4102722116200441f0016a41246a2105200441f0016a41206a212b200441f0016a41186a212a200441f0016a41106a2125200441f0016a41086a21282026211b02400240024002400340201b2f0128211f201b2802002120201b410c6a2901002110201b41146a2901002118201b411c6a2901002123201b2901042112202b201b41246a280100360200202a20233703002025201837030020282010370300200420123703f001200441003b015c20044105360220200420053602c4012004200441206a3602d0012004200441046a3602cc012004200441dc006a3602c8012004200441f0016a3602c001200441e0006a200441c0016a108e060240024020042f01604101470d004122102c220f450d13200f2016290100370100200f41206a201641206a221d2f01003b0100200f41186a201641186a221a290100370100200f41106a201641106a221c290100370100200f41086a201641086a220a290100370100200441d8016a41106a200441c0016a41106a280200360200200441d8016a41086a200441c0016a41086a290300370300200420042903c0013703d801200441e0006a200441d8016a108e06410121114101210e20042f01604101470d01410121114122210c4101210e0240034020044198026a41206a2215201d2f01003b010020044198026a41186a2217201a29010037030020044198026a41106a220d201c29010037030020044198026a41086a2214200a29010037030020042016290100370398020240200e2011470d00201141016a22032011490d152011410174221e2003201e20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7211e0240024020110d00200441003602a0010c010b200441023602a8012004200f3602a0012004201141226c3602a4010b200441386a201e2003200441a0016a107d2004280240210320042802384101460d02200428023c210f200341226e21110b200f200c6a2203200429039802370100200341206a20152f01003b0100200341186a2017290300370100200341106a200d290300370100200341086a2014290300370100200c41226a210c200e41016a210e200441e0006a200441d8016a108e0620042f01604101460d000c030b0b20030d130c120b410021114102210f4100210e0b0240200428022022034105460d002004290224211002402011450d00201141226c450d00200f102e0b20002003360204200041013602002000410c6a20104220883e0200200041086a20103e02000c050b20042f015c222241ffff03460d024100210302402004280204220c280208201f4d0d00200441386a41026a200c280200201f4105746a220341026a2d00003a0000200441e0006a41086a200341176a290000370300200441e0006a41106a2003411f6a2d00003a0000200420032f00003b01382004200329000f3703602003290007212e20032800032127410121030b4102211c200441bc016a41026a200441386a41026a2d00003a0000200441d8016a41086a221d200441e0006a41086a220a290300370300200441d8016a41106a221a200441e0006a41106a221e2d00003a0000200420042f01383b01bc01200420042903603703d8014101210d02402003450d00200441206a41026a200441bc016a41026a2d00003a000020044198026a41086a201d29030037030020044198026a41106a201a2d00003a0000200420042f01bc013b0120200420042903d801370398024100210d2027211c202e21210b200441086a41026a220c200441206a41026a221f2d00003a0000200441c0016a41086a221520044198026a41086a2219290300370300200441c0016a41106a221720044198026a41106a22132d00003a0000200420042f01203b010820042004290398023703c00102400240024002400240200d0d00200441b8016a41026a2206200c2d00003a0000200441a0016a41086a220d2015290300370300200441a0016a41106a221420172d00003a0000200420042f01083b01b801200420042903c0013703a001024002400240200e2011460d002011210b200e21110c010b201141016a22032011490d172011410174220b2003200b20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7210b0240024020110d00200441003602600c010b200441023602682004200f3602602004201141226c3602640b20044198026a200b2003200441e0006a107d20042802a00221032004280298024101460d01200428029c02210f200341226e210b0b200f201141226c6a2203202137000720062d0000211120042f01b80121062003201c360003200320063b0100200341026a20113a0000200320042903a00137000f200341176a200d2903003700002003411f6a20142d00003a000020032022417f733b0120410021030240200228020820204d0d00200441386a41026a2002280200202041386c6a2203410a6a2d00003a0000200a2003411f6a290000370300201e200341276a2d00003a0000200420032f00083b01382004200341176a2900003703602003410f6a290000212f2003410b6a2800002129410121030b4102211c200441bc016a41026a200441386a41026a2d00003a0000201d200a290300370300201a201e2d00003a0000200420042f01383b01bc01200420042903603703d8014101211102402003450d00201f200441bc016a41026a2d00003a00002019201d2903003703002013201a2d00003a0000200420042f01bc013b0120200420042903d80137039802410021112029211c202f212c0b200c201f2d00003a000020152019290300370300201720132d00003a0000200420042f01203b010820042004290398023703c00120110d07200d2015290300370300201420172d00003a0000200420042f01083b01b801200420042903c0013703a0012004200c2d00003a00ba0120082009470d04200841016a22032008490d16200841017422112003201120034b1b22034104200341044b1bad422c7e2210422088a74541027421032010a7211120080d02200441003602600c030b20030d160c150b2000201c36020420004101360200200041086a20213702000c070b200441043602682004200736026020042008412c6c3602640b20044198026a20112003200441e0006a107d20042802a00221032004280298024101460d01200428029c0221072003412c6e21090b20072008412c6c6a2203200e41016a3602082003200b3602042003200f360200200341136a202c370000200320042f01b8013b010c2003410e6a20042d00ba013a00002003410f6a201c3600002003411b6a20042903a001370000200341236a200d2903003700002003412b6a20142d00003a0000200841016a2108201b412c6a221b202d470d010c060b0b20030d100c0f0b2000201c36020420004101360200200041086a202c370200200b21110c010b200042013702000b2011450d00201141226c450d00200f102e0b4100210f4101210c02402024450d002024412c6c450d002026102e0b41012102410121164101211b4101211d4101211a0c010b02402024450d002024412c6c450d002026102e0b20012802782126200141fc006a28020021240240024020014180016a2802002203450d002026200341306c6a212d200441f0016a410272211620044188016a2105200441e0006a41206a212b200441e0006a41186a212a200441e0006a41106a2125200441e0006a41086a21282026211b02400240024002400340201b2f012c211f201b2802002120201b410c6a2901002110201b41146a2901002118201b411c6a2901002123201b2901042112202b201b41246a290100370300202a2023370300202520183703002028201037030020042012370360200441003b015c20044105360220200420053602c4012004200441206a3602d0012004200441046a3602cc012004200441dc006a3602c8012004200441e0006a3602c001200441f0016a200441c0016a108e060240024020042f01f0014101470d004122102c220f450d14200f2016290100370100200f41206a201641206a221d2f01003b0100200f41186a201641186a221a290100370100200f41106a201641106a221c290100370100200f41086a201641086a220a290100370100200441d8016a41106a200441c0016a41106a280200360200200441d8016a41086a200441c0016a41086a290300370300200420042903c0013703d801200441f0016a200441d8016a108e06410121114101210e20042f01f0014101470d01410121114122210c4101210e0240034020044198026a41206a2215201d2f01003b010020044198026a41186a2217201a29010037030020044198026a41106a220d201c29010037030020044198026a41086a2214200a29010037030020042016290100370398020240200e2011470d00201141016a22032011490d162011410174221e2003201e20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7211e0240024020110d00200441003602a0010c010b200441023602a8012004200f3602a0012004201141226c3602a4010b200441386a201e2003200441a0016a107d2004280240210320042802384101460d02200428023c210f200341226e21110b200f200c6a2203200429039802370100200341206a20152f01003b0100200341186a2017290300370100200341106a200d290300370100200341086a2014290300370100200c41226a210c200e41016a210e200441f0016a200441d8016a108e0620042f01f0014101460d000c030b0b20030d140c130b410021114102210f4100210e0b0240200428022022034105460d002004290224211002402011450d00201141226c450d00200f102e0b20002003360204200041013602002000410c6a20104220883e0200200041086a20103e02000c050b20042f015c222241ffff03460d024100210302402004280204220c280208201f4d0d00200441386a41026a200c280200201f4105746a220341026a2d00003a0000200441f0016a41086a200341176a290000370300200441f0016a41106a2003411f6a2d00003a0000200420032f00003b01382004200329000f3703f0012003290007212e20032800032127410121030b4102211c200441bc016a41026a200441386a41026a2d00003a0000200441d8016a41086a221d200441f0016a41086a220a290300370300200441d8016a41106a221a200441f0016a41106a221e2d00003a0000200420042f01383b01bc01200420042903f0013703d8014101210d02402003450d00200441206a41026a200441bc016a41026a2d00003a000020044198026a41086a201d29030037030020044198026a41106a201a2d00003a0000200420042f01bc013b0120200420042903d801370398024100210d2027211c202e21210b200441086a41026a220c200441206a41026a221f2d00003a0000200441c0016a41086a221520044198026a41086a2219290300370300200441c0016a41106a221720044198026a41106a22132d00003a0000200420042f01203b010820042004290398023703c00102400240024002400240200d0d00200441b8016a41026a220b200c2d00003a0000200441a0016a41086a220d2015290300370300200441a0016a41106a221420172d00003a0000200420042f01083b01b801200420042903c0013703a001024002400240200e2011460d0020112106200e21110c010b201141016a22032011490d18201141017422062003200620034b1b22034104200341044b1bad42227e2210422088a74541017421032010a721060240024020110d00200441003602f0010c010b200441023602f8012004200f3602f0012004201141226c3602f4010b20044198026a20062003200441f0016a107d20042802a00221032004280298024101460d01200428029c02210f200341226e21060b200f201141226c6a22032021370007200b2d0000211120042f01b801210b2003201c3600032003200b3b0100200341026a20113a0000200320042903a00137000f200341176a200d2903003700002003411f6a20142d00003a000020032022417f733b0120410021030240200228020820204d0d00200441386a41026a2002280200202041386c6a2203410a6a2d00003a0000200a2003411f6a290000370300201e200341276a2d00003a0000200420032f00083b01382004200341176a2900003703f0012003410f6a290000212f2003410b6a2800002129410121030b41022111200441bc016a41026a200441386a41026a2d00003a0000201d200a290300370300201a201e2d00003a0000200420042f01383b01bc01200420042903f0013703d8014101211c02402003450d00201f200441bc016a41026a2d00003a00002019201d2903003703002013201a2d00003a0000200420042f01bc013b0120200420042903d801370398024100211c20292111202f212c0b200c201f2d00003a000020152019290300370300201720132d00003a0000200420042f01203b010820042004290398023703c001201c0d07200d2015290300370300201420172d00003a0000200420042f01083b01b801200420042903c0013703a0012004200c2d00003a00ba0120082009470d04200841016a22032008490d172008410174220c2003200c20034b1b22034104200341044b1bad422c7e2210422088a74541027421032010a7210c20080d02200441003602f0010c030b20030d170c160b2000201c36020420004101360200200041086a20213702000c070b200441043602f801200420073602f00120042008412c6c3602f4010b20044198026a200c2003200441f0016a107d20042802a00221032004280298024101460d01200428029c0221072003412c6e21090b20072008412c6c6a2203200e41016a360208200320063602042003200f360200200341136a202c370000200320042f01b8013b010c2003410e6a20042d00ba013a00002003410f6a20113600002003411b6a20042903a001370000200341236a200d2903003700002003412b6a20142d00003a0000200841016a2108201b41306a221b202d470d010c060b0b20030d110c100b2000201136020420004101360200200041086a202c370200200621110c010b200042013702000b2011450d00201141226c450d00200f102e0b4100211a4101210c02402024450d00202441306c450d002026102e0b41012102410121164101211b4101211d0c010b02402024450d00202441306c450d002026102e0b200128028401212420014188016a2802002130024002402001418c016a2802002203450d002024200341346c6a2126200441f0016a4102722116200441e0006a412c6a210520044188016a212b200441e0006a41206a212a200441e0006a41186a2125200441e0006a41106a2128200441e0006a41086a21272024211b02400240024002400340201b2f0130211f201b2802002120201b410c6a2901002110201b41146a2901002118201b411c6a2901002123201b41246a2901002112201b2901042121202b201b412c6a280100360200202a201237030020252023370300202820183703002027201037030020042021370360200441003b015c20044105360220200420053602c4012004200441206a3602d0012004200441046a3602cc012004200441dc006a3602c8012004200441e0006a3602c001200441f0016a200441c0016a108e060240024020042f01f0014101470d004122102c220f450d15200f2016290100370100200f41206a201641206a221d2f01003b0100200f41186a201641186a221a290100370100200f41106a201641106a221c290100370100200f41086a201641086a220a290100370100200441d8016a41106a200441c0016a41106a280200360200200441d8016a41086a200441c0016a41086a290300370300200420042903c0013703d801200441f0016a200441d8016a108e06410121114101210e20042f01f0014101470d01410121114122210c4101210e0240034020044198026a41206a2215201d2f01003b010020044198026a41186a2217201a29010037030020044198026a41106a220d201c29010037030020044198026a41086a2214200a29010037030020042016290100370398020240200e2011470d00201141016a22032011490d172011410174221e2003201e20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7211e0240024020110d00200441003602a0010c010b200441023602a8012004200f3602a0012004201141226c3602a4010b200441386a201e2003200441a0016a107d2004280240210320042802384101460d02200428023c210f200341226e21110b200f200c6a2203200429039802370100200341206a20152f01003b0100200341186a2017290300370100200341106a200d290300370100200341086a2014290300370100200c41226a210c200e41016a210e200441f0016a200441d8016a108e0620042f01f0014101460d000c030b0b20030d150c140b410021114102210f4100210e0b0240200428022022034105460d002004290224211002402011450d00201141226c450d00200f102e0b20002003360204200041013602002000410c6a20104220883e0200200041086a20103e02000c050b20042f015c222241ffff03460d024100210302402004280204220c280208201f4d0d00200441386a41026a200c280200201f4105746a220341026a2d00003a0000200441f0016a41086a200341176a290000370300200441f0016a41106a2003411f6a2d00003a0000200420032f00003b01382004200329000f3703f0012003290007212f20032800032129410121030b4102211c200441bc016a41026a200441386a41026a2d00003a0000200441d8016a41086a221d200441f0016a41086a220a290300370300200441d8016a41106a221a200441f0016a41106a221e2d00003a0000200420042f01383b01bc01200420042903f0013703d8014101210d02402003450d00200441206a41026a200441bc016a41026a2d00003a000020044198026a41086a201d29030037030020044198026a41106a201a2d00003a0000200420042f01bc013b0120200420042903d801370398024100210d2029211c202f212c0b200441086a41026a220c200441206a41026a221f2d00003a0000200441c0016a41086a221520044198026a41086a2219290300370300200441c0016a41106a221720044198026a41106a22132d00003a0000200420042f01203b010820042004290398023703c00102400240024002400240200d0d00200441b8016a41026a220b200c2d00003a0000200441a0016a41086a220d2015290300370300200441a0016a41106a221420172d00003a0000200420042f01083b01b801200420042903c0013703a001024002400240200e2011460d0020112106200e21110c010b201141016a22032011490d19201141017422062003200620034b1b22034104200341044b1bad42227e2210422088a74541017421032010a721060240024020110d00200441003602f0010c010b200441023602f8012004200f3602f0012004201141226c3602f4010b20044198026a20062003200441f0016a107d20042802a00221032004280298024101460d01200428029c02210f200341226e21060b200f201141226c6a2203202c370007200b2d0000211120042f01b801210b2003201c3600032003200b3b0100200341026a20113a0000200320042903a00137000f200341176a200d2903003700002003411f6a20142d00003a000020032022417f733b0120410021030240200228020820204d0d00200441386a41026a2002280200202041386c6a2203410a6a2d00003a0000200a2003411f6a290000370300201e200341276a2d00003a0000200420032f00083b01382004200341176a2900003703f0012003410f6a29000021312003410b6a280000212d410121030b4102211c200441bc016a41026a200441386a41026a2d00003a0000201d200a290300370300201a201e2d00003a0000200420042f01383b01bc01200420042903f0013703d8014101211102402003450d00201f200441bc016a41026a2d00003a00002019201d2903003703002013201a2d00003a0000200420042f01bc013b0120200420042903d8013703980241002111202d211c2031212e0b200c201f2d00003a000020152019290300370300201720132d00003a0000200420042f01203b010820042004290398023703c00120110d07200d2015290300370300201420172d00003a0000200420042f01083b01b801200420042903c0013703a0012004200c2d00003a00ba0120082009470d04200841016a22032008490d18200841017422112003201120034b1b22034104200341044b1bad422c7e2210422088a74541027421032010a7211120080d02200441003602f0010c030b20030d180c170b2000201c36020420004101360200200041086a202c3702000c070b200441043602f801200420073602f00120042008412c6c3602f4010b20044198026a20112003200441f0016a107d20042802a00221032004280298024101460d01200428029c0221072003412c6e21090b20072008412c6c6a2203200e41016a360208200320063602042003200f360200200341136a202e370000200320042f01b8013b010c2003410e6a20042d00ba013a00002003410f6a201c3600002003411b6a20042903a001370000200341236a200d2903003700002003412b6a20142d00003a0000200841016a2108201b41346a221b2026470d010c060b0b20030d120c110b2000201c36020420004101360200200041086a202e370200200621110c010b200042013702000b2011450d00201141226c450d00200f102e0b4100211d4101210c02402030450d00203041346c450d002024102e0b41012102410121164101211b0c010b02402030450d00203041346c450d002024102e0b200128029001212420014194016a28020021300240024020014198016a2802002203450d002024200341386c6a2126200441f0016a410272211620044190016a210520044188016a212b200441e0006a41206a212a200441e0006a41186a2125200441e0006a41106a2128200441e0006a41086a21272024211b02400240024002400340201b2f0134211f201b2802002120201b410c6a2901002110201b41146a2901002118201b411c6a2901002123201b41246a2901002112201b2901042121202b201b412c6a290100370300202a201237030020252023370300202820183703002027201037030020042021370360200441003b015c20044105360220200420053602c4012004200441206a3602d0012004200441046a3602cc012004200441dc006a3602c8012004200441e0006a3602c001200441f0016a200441c0016a108e060240024020042f01f0014101470d004122102c220f450d16200f2016290100370100200f41206a201641206a221d2f01003b0100200f41186a201641186a221a290100370100200f41106a201641106a221c290100370100200f41086a201641086a220a290100370100200441d8016a41106a200441c0016a41106a280200360200200441d8016a41086a200441c0016a41086a290300370300200420042903c0013703d801200441f0016a200441d8016a108e06410121114101210e20042f01f0014101470d01410121114122210c4101210e0240034020044198026a41206a2215201d2f01003b010020044198026a41186a2217201a29010037030020044198026a41106a220d201c29010037030020044198026a41086a2214200a29010037030020042016290100370398020240200e2011470d00201141016a22032011490d182011410174221e2003201e20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7211e0240024020110d00200441003602a0010c010b200441023602a8012004200f3602a0012004201141226c3602a4010b200441386a201e2003200441a0016a107d2004280240210320042802384101460d02200428023c210f200341226e21110b200f200c6a2203200429039802370100200341206a20152f01003b0100200341186a2017290300370100200341106a200d290300370100200341086a2014290300370100200c41226a210c200e41016a210e200441f0016a200441d8016a108e0620042f01f0014101460d000c030b0b20030d160c150b410021114102210f4100210e0b0240200428022022034105460d002004290224211002402011450d00201141226c450d00200f102e0b20002003360204200041013602002000410c6a20104220883e0200200041086a20103e02000c050b20042f015c222241ffff03460d024100210302402004280204220c280208201f4d0d00200441386a41026a200c280200201f4105746a220341026a2d00003a0000200441f0016a41086a200341176a290000370300200441f0016a41106a2003411f6a2d00003a0000200420032f00003b01382004200329000f3703f0012003290007212f20032800032129410121030b4102211c200441bc016a41026a200441386a41026a2d00003a0000200441d8016a41086a221d200441f0016a41086a220a290300370300200441d8016a41106a221a200441f0016a41106a221e2d00003a0000200420042f01383b01bc01200420042903f0013703d8014101210d02402003450d00200441206a41026a200441bc016a41026a2d00003a000020044198026a41086a201d29030037030020044198026a41106a201a2d00003a0000200420042f01bc013b0120200420042903d801370398024100210d2029211c202f212c0b200441086a41026a220c200441206a41026a221f2d00003a0000200441c0016a41086a221520044198026a41086a2219290300370300200441c0016a41106a221720044198026a41106a22132d00003a0000200420042f01203b010820042004290398023703c00102400240024002400240200d0d00200441b8016a41026a220b200c2d00003a0000200441a0016a41086a220d2015290300370300200441a0016a41106a221420172d00003a0000200420042f01083b01b801200420042903c0013703a001024002400240200e2011460d0020112106200e21110c010b201141016a22032011490d1a201141017422062003200620034b1b22034104200341044b1bad42227e2210422088a74541017421032010a721060240024020110d00200441003602f0010c010b200441023602f8012004200f3602f0012004201141226c3602f4010b20044198026a20062003200441f0016a107d20042802a00221032004280298024101460d01200428029c02210f200341226e21060b200f201141226c6a2203202c370007200b2d0000211120042f01b801210b2003201c3600032003200b3b0100200341026a20113a0000200320042903a00137000f200341176a200d2903003700002003411f6a20142d00003a000020032022417f733b0120410021030240200228020820204d0d00200441386a41026a2002280200202041386c6a2203410a6a2d00003a0000200a2003411f6a290000370300201e200341276a2d00003a0000200420032f00083b01382004200341176a2900003703f0012003410f6a29000021312003410b6a280000212d410121030b41022111200441bc016a41026a200441386a41026a2d00003a0000201d200a290300370300201a201e2d00003a0000200420042f01383b01bc01200420042903f0013703d8014101211c02402003450d00201f200441bc016a41026a2d00003a00002019201d2903003703002013201a2d00003a0000200420042f01bc013b0120200420042903d801370398024100211c202d21112031212e0b200c201f2d00003a000020152019290300370300201720132d00003a0000200420042f01203b010820042004290398023703c001201c0d07200d2015290300370300201420172d00003a0000200420042f01083b01b801200420042903c0013703a0012004200c2d00003a00ba0120082009470d04200841016a22032008490d192008410174220c2003200c20034b1b22034104200341044b1bad422c7e2210422088a74541027421032010a7210c20080d02200441003602f0010c030b20030d190c180b2000201c36020420004101360200200041086a202c3702000c070b200441043602f801200420073602f00120042008412c6c3602f4010b20044198026a200c2003200441f0016a107d20042802a00221032004280298024101460d01200428029c0221072003412c6e21090b20072008412c6c6a2203200e41016a360208200320063602042003200f360200200341136a202e370000200320042f01b8013b010c2003410e6a20042d00ba013a00002003410f6a20113600002003411b6a20042903a001370000200341236a200d2903003700002003412b6a20142d00003a0000200841016a2108201b41386a221b2026470d010c060b0b20030d130c120b2000201136020420004101360200200041086a202e370200200621110c010b200042013702000b2011450d00201141226c450d00200f102e0b4100211b4101210c02402030450d00203041386c450d002024102e0b41012102410121160c010b02402030450d00203041386c450d002024102e0b200128029c012130200141a0016a280200213202400240200141a4016a2802002203450d0020302003413c6c6a2124200441f0016a410272211b200441e0006a41346a210520044190016a212b20044188016a212a200441e0006a41206a2125200441e0006a41186a2128200441e0006a41106a2127200441e0006a41086a2129203021160240024002400240034020162f0138211f201628020021202016410c6a2901002110201641146a29010021182016411c6a2901002123201641246a29010021122016412c6a29010021212016290104212c202b201641346a280100360200202a2021370300202520123703002028202337030020272018370300202920103703002004202c370360200441003b015c20044105360220200420053602c4012004200441206a3602d0012004200441046a3602cc012004200441dc006a3602c8012004200441e0006a3602c001200441f0016a200441c0016a108e060240024020042f01f0014101470d004122102c220f450d17200f201b290100370100200f41206a201b41206a221d2f01003b0100200f41186a201b41186a221a290100370100200f41106a201b41106a221c290100370100200f41086a201b41086a220a290100370100200441d8016a41106a200441c0016a41106a280200360200200441d8016a41086a200441c0016a41086a290300370300200420042903c0013703d801200441f0016a200441d8016a108e06410121114101210e20042f01f0014101470d01410121114122210c4101210e0240034020044198026a41206a2215201d2f01003b010020044198026a41186a2217201a29010037030020044198026a41106a220d201c29010037030020044198026a41086a2214200a2901003703002004201b290100370398020240200e2011470d00201141016a22032011490d192011410174221e2003201e20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7211e0240024020110d00200441003602a0010c010b200441023602a8012004200f3602a0012004201141226c3602a4010b200441386a201e2003200441a0016a107d2004280240210320042802384101460d02200428023c210f200341226e21110b200f200c6a2203200429039802370100200341206a20152f01003b0100200341186a2017290300370100200341106a200d290300370100200341086a2014290300370100200c41226a210c200e41016a210e200441f0016a200441d8016a108e0620042f01f0014101460d000c030b0b20030d170c160b410021114102210f4100210e0b0240200428022022034105460d002004290224211002402011450d00201141226c450d00200f102e0b20002003360204200041013602002000410c6a20104220883e0200200041086a20103e02000c050b20042f015c222241ffff03460d024100210302402004280204220c280208201f4d0d00200441386a41026a200c280200201f4105746a220341026a2d00003a0000200441f0016a41086a200341176a290000370300200441f0016a41106a2003411f6a2d00003a0000200420032f00003b01382004200329000f3703f001200329000721312003280003212d410121030b4102211c200441bc016a41026a200441386a41026a2d00003a0000200441d8016a41086a221d200441f0016a41086a220a290300370300200441d8016a41106a221a200441f0016a41106a221e2d00003a0000200420042f01383b01bc01200420042903f0013703d8014101210d02402003450d00200441206a41026a200441bc016a41026a2d00003a000020044198026a41086a201d29030037030020044198026a41106a201a2d00003a0000200420042f01bc013b0120200420042903d801370398024100210d202d211c2031212e0b200441086a41026a220c200441206a41026a221f2d00003a0000200441c0016a41086a221520044198026a41086a2219290300370300200441c0016a41106a221720044198026a41106a22132d00003a0000200420042f01203b010820042004290398023703c00102400240024002400240200d0d00200441b8016a41026a220b200c2d00003a0000200441a0016a41086a220d2015290300370300200441a0016a41106a221420172d00003a0000200420042f01083b01b801200420042903c0013703a001024002400240200e2011460d0020112106200e21110c010b201141016a22032011490d1b201141017422062003200620034b1b22034104200341044b1bad42227e2210422088a74541017421032010a721060240024020110d00200441003602f0010c010b200441023602f8012004200f3602f0012004201141226c3602f4010b20044198026a20062003200441f0016a107d20042802a00221032004280298024101460d01200428029c02210f200341226e21060b200f201141226c6a2203202e370007200b2d0000211120042f01b801210b2003201c3600032003200b3b0100200341026a20113a0000200320042903a00137000f200341176a200d2903003700002003411f6a20142d00003a000020032022417f733b0120410021030240200228020820204d0d00200441386a41026a2002280200202041386c6a2203410a6a2d00003a0000200a2003411f6a290000370300201e200341276a2d00003a0000200420032f00083b01382004200341176a2900003703f0012003410f6a29000021332003410b6a2800002126410121030b4102211c200441bc016a41026a200441386a41026a2d00003a0000201d200a290300370300201a201e2d00003a0000200420042f01383b01bc01200420042903f0013703d8014101211102402003450d00201f200441bc016a41026a2d00003a00002019201d2903003703002013201a2d00003a0000200420042f01bc013b0120200420042903d80137039802410021112026211c2033212f0b200c201f2d00003a000020152019290300370300201720132d00003a0000200420042f01203b010820042004290398023703c00120110d07200d2015290300370300201420172d00003a0000200420042f01083b01b801200420042903c0013703a0012004200c2d00003a00ba0120082009470d04200841016a22032008490d1a200841017422112003201120034b1b22034104200341044b1bad422c7e2210422088a74541027421032010a7211120080d02200441003602f0010c030b20030d1a0c190b2000201c36020420004101360200200041086a202e3702000c070b200441043602f801200420073602f00120042008412c6c3602f4010b20044198026a20112003200441f0016a107d20042802a00221032004280298024101460d01200428029c0221072003412c6e21090b20072008412c6c6a2203200e41016a360208200320063602042003200f360200200341136a202f370000200320042f01b8013b010c2003410e6a20042d00ba013a00002003410f6a201c3600002003411b6a20042903a001370000200341236a200d2903003700002003412b6a20142d00003a0000200841016a21082016413c6a22162024470d010c060b0b20030d140c130b2000201c36020420004101360200200041086a202f370200200621110c010b200042013702000b2011450d00201141226c450d00200f102e0b410021164101210c02402032450d002032413c6c450d002030102e0b410121020c010b02402032450d002032413c6c450d002030102e0b20012802a8012130200141ac016a28020021320240200141b0016a2802002203450d00203020034106746a2124200441f0016a410272211b200441e0006a41386a210520044190016a212b20044188016a212a200441e0006a41206a2125200441e0006a41186a2128200441e0006a41106a2127200441e0006a41086a2129203021160240024002400240034020162f013c211f201628020021202016410c6a2901002110201641146a29010021182016411c6a2901002123201641246a29010021122016412c6a29010021212016290104212c202b201641346a290100370300202a2021370300202520123703002028202337030020272018370300202920103703002004202c370360200441003b015c20044105360220200420053602c4012004200441206a3602d0012004200441046a3602cc012004200441dc006a3602c8012004200441e0006a3602c001200441f0016a200441c0016a108e060240024020042f01f0014101470d004122102c220f450d17200f201b290100370100200f41206a201b41206a221d2f01003b0100200f41186a201b41186a221a290100370100200f41106a201b41106a221c290100370100200f41086a201b41086a220a290100370100200441d8016a41106a200441c0016a41106a280200360200200441d8016a41086a200441c0016a41086a290300370300200420042903c0013703d801200441f0016a200441d8016a108e06410121114101210e20042f01f0014101470d01410121114122210c4101210e0240034020044198026a41206a2215201d2f01003b010020044198026a41186a2217201a29010037030020044198026a41106a220d201c29010037030020044198026a41086a2214200a2901003703002004201b290100370398020240200e2011470d00201141016a22032011490d192011410174221e2003201e20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7211e0240024020110d00200441003602a0010c010b200441023602a8012004200f3602a0012004201141226c3602a4010b200441386a201e2003200441a0016a107d2004280240210320042802384101460d02200428023c210f200341226e21110b200f200c6a2203200429039802370100200341206a20152f01003b0100200341186a2017290300370100200341106a200d290300370100200341086a2014290300370100200c41226a210c200e41016a210e200441f0016a200441d8016a108e0620042f01f0014101460d000c030b0b20030d170c160b410021114102210f4100210e0b0240200428022022034105460d002004290224211002402011450d00201141226c450d00200f102e0b20002003360204200041013602002000410c6a20104220883e0200200041086a20103e02000c050b20042f015c222241ffff03460d024100210302402004280204220c280208201f4d0d00200441386a41026a200c280200201f4105746a220341026a2d00003a0000200441f0016a41086a200341176a290000370300200441f0016a41106a2003411f6a2d00003a0000200420032f00003b01382004200329000f3703f001200329000721312003280003212d410121030b4102211c200441bc016a41026a200441386a41026a2d00003a0000200441d8016a41086a221d200441f0016a41086a220a290300370300200441d8016a41106a221a200441f0016a41106a221e2d00003a0000200420042f01383b01bc01200420042903f0013703d8014101210d02402003450d00200441206a41026a200441bc016a41026a2d00003a000020044198026a41086a201d29030037030020044198026a41106a201a2d00003a0000200420042f01bc013b0120200420042903d801370398024100210d202d211c2031212e0b200441086a41026a220c200441206a41026a221f2d00003a0000200441c0016a41086a221520044198026a41086a2219290300370300200441c0016a41106a221720044198026a41106a22132d00003a0000200420042f01203b010820042004290398023703c00102400240024002400240200d0d00200441b8016a41026a2206200c2d00003a0000200441a0016a41086a220d2015290300370300200441a0016a41106a221420172d00003a0000200420042f01083b01b801200420042903c0013703a001024002400240200e2011460d002011210b200e21110c010b201141016a22032011490d1b2011410174220b2003200b20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7210b0240024020110d00200441003602f0010c010b200441023602f8012004200f3602f0012004201141226c3602f4010b20044198026a200b2003200441f0016a107d20042802a00221032004280298024101460d01200428029c02210f200341226e210b0b200f201141226c6a2203202e37000720062d0000211120042f01b80121062003201c360003200320063b0100200341026a20113a0000200320042903a00137000f200341176a200d2903003700002003411f6a20142d00003a000020032022417f733b0120410021030240200228020820204d0d00200441386a41026a2002280200202041386c6a2203410a6a2d00003a0000200a2003411f6a290000370300201e200341276a2d00003a0000200420032f00083b01382004200341176a2900003703f0012003410f6a29000021332003410b6a2800002126410121030b41022111200441bc016a41026a200441386a41026a2d00003a0000201d200a290300370300201a201e2d00003a0000200420042f01383b01bc01200420042903f0013703d8014101211c02402003450d00201f200441bc016a41026a2d00003a00002019201d2903003703002013201a2d00003a0000200420042f01bc013b0120200420042903d801370398024100211c202621112033212f0b200c201f2d00003a000020152019290300370300201720132d00003a0000200420042f01203b010820042004290398023703c001201c0d07200d2015290300370300201420172d00003a0000200420042f01083b01b801200420042903c0013703a0012004200c2d00003a00ba0120082009470d04200841016a22032008490d1a2008410174220c2003200c20034b1b22034104200341044b1bad422c7e2210422088a74541027421032010a7210c20080d02200441003602f0010c030b20030d1a0c190b2000201c36020420004101360200200041086a202e3702000c070b200441043602f801200420073602f00120042008412c6c3602f4010b20044198026a200c2003200441f0016a107d20042802a00221032004280298024101460d01200428029c0221072003412c6e21090b20072008412c6c6a2203200e41016a3602082003200b3602042003200f360200200341136a202f370000200320042f01b8013b010c2003410e6a20042d00ba013a00002003410f6a20113600002003411b6a20042903a001370000200341236a200d2903003700002003412b6a20142d00003a0000200841016a2108201641c0006a22162024470d010c060b0b20030d140c130b2000201136020420004101360200200041086a202f370200200b21110c010b200042013702000b2011450d00201141226c450d00200f102e0b410021024101210c0240203241ffffff1f710d00410021160c020b2030102e410021160c010b0240203241ffffff1f71450d002030102e0b20012802b4012132200141b8016a2802002134200141bc016a2802002203450d0c2032200341c4006c6a2130200441f0016a410272211b200441e0006a413c6a2105200441e0006a41386a212b20044190016a212a20044188016a2125200441e0006a41206a2128200441e0006a41186a2127200441e0006a41106a2129200441e0006a41086a212d203221160240024002400240034020162f0140211f201628020021202016410c6a2901002110201641146a29010021182016411c6a2901002123201641246a29010021122016412c6a2901002121201641346a290100212c2016290104212e202b2016413c6a280100360200202a202c37030020252021370300202820123703002027202337030020292018370300202d20103703002004202e370360200441003b015c20044105360220200420053602c4012004200441206a3602d0012004200441046a3602cc012004200441dc006a3602c8012004200441e0006a3602c001200441f0016a200441c0016a108e060240024020042f01f0014101470d004122102c220f450d16200f201b290100370100200f41206a201b41206a221d2f01003b0100200f41186a201b41186a221a290100370100200f41106a201b41106a221c290100370100200f41086a201b41086a220a290100370100200441d8016a41106a200441c0016a41106a280200360200200441d8016a41086a200441c0016a41086a290300370300200420042903c0013703d801200441f0016a200441d8016a108e06410121114101210e20042f01f0014101470d01410121114122210c4101210e0240034020044198026a41206a2215201d2f01003b010020044198026a41186a2217201a29010037030020044198026a41106a220d201c29010037030020044198026a41086a2214200a2901003703002004201b290100370398020240200e2011470d00201141016a22032011490d182011410174221e2003201e20034b1b22034104200341044b1bad42227e2210422088a74541017421032010a7211e0240024020110d00200441003602a0010c010b200441023602a8012004200f3602a0012004201141226c3602a4010b200441386a201e2003200441a0016a107d2004280240210320042802384101460d02200428023c210f200341226e21110b200f200c6a2203200429039802370100200341206a20152f01003b0100200341186a2017290300370100200341106a200d290300370100200341086a2014290300370100200c41226a210c200e41016a210e200441f0016a200441d8016a108e0620042f01f0014101460d000c030b0b20030d160c150b410021114102210f4100210e0b0240200428022022034105460d002004290224211002402011450d00201141226c450d00200f102e0b20002003360204200041013602002000410c6a20104220883e0200200041086a20103e02000c050b20042f015c222241ffff03460d024100210302402004280204220c280208201f4d0d00200441386a41026a200c280200201f4105746a220341026a2d00003a0000200441f0016a41086a200341176a290000370300200441f0016a41106a2003411f6a2d00003a0000200420032f00003b01382004200329000f3703f0012003290007213320032800032126410121030b4102211c200441bc016a41026a200441386a41026a2d00003a0000200441d8016a41086a221d200441f0016a41086a220a290300370300200441d8016a41106a221a200441f0016a41106a221e2d00003a0000200420042f01383b01bc01200420042903f0013703d8014101210d02402003450d00200441206a41026a200441bc016a41026a2d00003a000020044198026a41086a201d29030037030020044198026a41106a201a2d00003a0000200420042f01bc013b0120200420042903d801370398024100210d2026211c2033212f0b200441086a41026a220c200441206a41026a221f2d00003a0000200441c0016a41086a221520044198026a41086a2219290300370300200441c0016a41106a221720044198026a41106a22132d00003a0000200420042f01203b010820042004290398023703c00102400240024002400240200d0d00200441b8016a41026a220b200c2d00003a0000200441a0016a41086a220d2015290300370300200441a0016a41106a221420172d00003a0000200420042f01083b01b801200420042903c0013703a001024002400240200e2011460d0020112106200e21110c010b201141016a22032011490d1a201141017422062003200620034b1b22034104200341044b1bad42227e2210422088a74541017421032010a721060240024020110d00200441003602f0010c010b200441023602f8012004200f3602f0012004201141226c3602f4010b20044198026a20062003200441f0016a107d20042802a00221032004280298024101460d01200428029c02210f200341226e21060b200f201141226c6a2203202f370007200b2d0000211120042f01b801210b2003201c3600032003200b3b0100200341026a20113a0000200320042903a00137000f200341176a200d2903003700002003411f6a20142d00003a000020032022417f733b0120410021030240200228020820204d0d00200441386a41026a2002280200202041386c6a2203410a6a2d00003a0000200a2003411f6a290000370300201e200341276a2d00003a0000200420032f00083b01382004200341176a2900003703f0012003410f6a29000021352003410b6a2800002124410121030b41022111200441bc016a41026a200441386a41026a2d00003a0000201d200a290300370300201a201e2d00003a0000200420042f01383b01bc01200420042903f0013703d8014101211c02402003450d00201f200441bc016a41026a2d00003a00002019201d2903003703002013201a2d00003a0000200420042f01bc013b0120200420042903d801370398024100211c20242111203521310b200c201f2d00003a000020152019290300370300201720132d00003a0000200420042f01203b010820042004290398023703c001201c0d07200d2015290300370300201420172d00003a0000200420042f01083b01b801200420042903c0013703a0012004200c2d00003a00ba0120082009470d04200841016a22032008490d192008410174220c2003200c20034b1b22034104200341044b1bad422c7e2210422088a74541027421032010a7210c20080d02200441003602f0010c030b20030d190c180b2000201c36020420004101360200200041086a202f3702000c070b200441043602f801200420073602f00120042008412c6c3602f4010b20044198026a200c2003200441f0016a107d20042802a00221032004280298024101460d01200428029c0221072003412c6e21090b20072008412c6c6a2203200e41016a360208200320063602042003200f360200200341136a2031370000200320042f01b8013b010c2003410e6a20042d00ba013a00002003410f6a20113600002003411b6a20042903a001370000200341236a200d2903003700002003412b6a20142d00003a0000200841016a2108201641c4006a22162030470d010c120b0b20030d130c120b2000201136020420004101360200200041086a2031370200200621110c010b200042013702000b2011450d00201141226c450d00200f102e0b4100210c02402034450d00203441c4006c450d002032102e41002102410021160c010b41002102410021160b4100211b0b4100211d0b4100211a0b4100210f0b410021150b4100211c0b4100210a0b410021170b4100210d0b410021140b4100210e4100211e0b02402008450d002008412c6c21112007210303400240200341046a2802002208450d00200841226c450d002003280200102e0b2003412c6a2103201141546a22110d000b0b02402009450d002009412c6c450d002007102e0b0240201e450d00200141106a2802002203450d002003410c6c450d00200128020c102e0b0240200e450d002001411c6a28020041ffffffff0071450d002001280218102e0b02402014450d00200141286a2802002203450d00200341146c450d002001280224102e0b0240200d450d00200141346a2802002203450d00200341186c450d002001280230102e0b02402017450d00200141c0006a2802002203450d002003411c6c450d00200128023c102e0b0240200a450d00200141cc006a28020041ffffff3f71450d002001280248102e0b0240201c450d00200141d8006a2802002203450d00200341246c450d002001280254102e0b02402015450d00200141e4006a2802002203450d00200341286c450d002001280260102e0b0240200f450d00200141f0006a2802002203450d002003412c6c450d00200128026c102e0b0240201a450d00200141fc006a2802002203450d00200341306c450d002001280278102e0b0240201d450d0020014188016a2802002203450d00200341346c450d00200128028401102e0b0240201b450d0020014194016a2802002203450d00200341386c450d00200128029001102e0b02402016450d00200141a0016a2802002203450d002003413c6c450d00200128029c01102e0b02402002450d00200141ac016a28020041ffffff1f71450d0020012802a801102e0b200c450d01200141b8016a2802002203450d01200341c4006c450d0120012802b401102e0c010b02402034450d00203441c4006c450d002032102e0b20002007360204200041003602002000410c6a2008360200200041086a20093602000b200441c0026a24000f0b1038000b1036000be90504077f017e017f027e23004180016b210202400240200128020022032001280204460d00200128021021042001200341046a3602004102210520032f010021062001280208220720072f0100200341026a2f010022076a220341ffff03200341ffff03491b3b0100024002402001410c6a280200280200220128020820064b0d00200241e8006a41106a200241d0006a41106a2d00003a0000200241e8006a41086a200241d0006a41086a29000037030020022002290050370368410121010c010b200241d0006a41086a200128020020064105746a220141176a2203290000370300200241d0006a41106a2001411f6a22082d00003a00002002200129000f370350200129000721092001280003210520012d0002210620012f0000210a200241e8006a41106a20082d000022083a0000200241e8006a41086a2003290000220b3703002002200129000f220c370368200241386a41106a20083a0000200241386a41086a200b3703002002200c370338410021010b200241206a41086a2203200241386a41086a290300370300200241206a41106a2208200241386a41106a2d00003a000020022002290338370320024002402001450d00200220053602682002200937026c200228006921012004410b6a20094238883c0000200441096a20094228883d0000200420094208883e000520042001360001200420053a0000410021030c010b200241e8006a41106a20082d00003a0000200241e8006a41086a200329030037030020022002290320370368410121030b200241d0006a41086a2204200241e8006a41086a290300370300200241d0006a41106a2208200241e8006a41106a2d00003a000020022002290368370350410021012003450d012000200a3b010220002002290350370011200041096a2009370000200041056a2005360000200041046a20063a0000200041226a20073b0100200041196a2004290300370000200041216a20082d00003a0000200041013b01000f0b410021010b200020013b01000bc10201037f230041106b2202240002404120102c2203450d0020024220370204200220033602002002200041106a412010742001200228020022032002280208107402402002280204450d002003102e0b200020011091024120102c2203450d0020024220370204200220033602002002200041306a412010742001200228020022032002280208107402402002280204450d002003102e0b4120102c2203450d0020024220370204200220033602002002200041d0006a412010742001200228020022032002280208107402402002280204450d002003102e0b200028020421032000410c6a2802002200200110760240200041246c2200450d0003402002200310ef042001200228020022042002280208107402402002280204450d002004102e0b200341246a21032000415c6a22000d000b0b200241106a24000f0b1036000bae0401047f230041106b22022400200220002903003703002001200241081074200041106a210302400240024020002903084201510d00200241003a000020012002410110742002200029031037030020012002410810742001200041e0016a412010744120102c2204450d02200242203702042002200436020020022003410c6a412010742001200228020022042002280208107402402002280204450d002004102e0b2002200041186a280200360200200120024104107420012003412c6a41c00010744120102c2204450d02200041a0016a21052002422037020420022004360200200220004180016a412010742001200228020022002002280208107402402002280204450d002000102e0b2002200328026c36020020012002410410742001200541c00010740c010b200241013a000020012002410110742002200029031037030020012002410810742001200041e0016a412010744120102c2204450d01200242203702042002200436020020022003410c6a412010742001200228020022042002280208107402402002280204450d002004102e0b2002200041186a280200360200200120024104107420012003412c6a41c00010744120102c2204450d01200041a0016a21052002422037020420022004360200200220004180016a412010742001200228020022002002280208107402402002280204450d002000102e0b2002200328026c36020020012002410410742001200541c00010740b200241106a24000f0b1036000b84660b087f017e107f037e047f017e047f017e047f017e027f230041206b22022400200041003602082000420137020002402001280208220341ffffffff01712003470d0020034103742204417f4c0d002001280200210502400240024020040d00410421060c010b2004102c2206450d010b0240024002402004410376220720034f0d00200441027622082003200820034b1b22084104200841044b1b220841ffffffff01712008464102742109200841037421080240024020040d00200241003602100c010b200241186a410436020020022004360214200220063602100b200220082009200241106a107d200241086a2802002108024020022802004101460d0020022802042106200841037621070c020b20080d030c040b20030d00410021050c010b200520046a2108200341037441786a410376210920062103034020052802002104200341046a200541046a2f01003b010020032004360200200341086a2103200541086a22052008470d000b200941016a21050b20052000107602402005450d00200620054103746a210420062105034002400240024002402005280200220341c000490d00200341808001490d012003418080808004490d02200241033a00102000200241106a41011074200220033602102000200241106a410410740c030b200220034102743a00102000200241106a410110740c020b200220034102744101723b01102000200241106a410210740c010b200220034102744102723602102000200241106a410410740b024002400240200541046a2f0100220341c000490d00200341808001490d01200220034102744102723602102000200241106a410410740c020b200220034102743a00102000200241106a410110740c010b200220034102744101723b01102000200241106a410210740b200541086a22052004470d000b0b200141146a2802002203ad420c7e220a422088a70d01200aa72204417f4c0d01200128020c21050240024020040d004104210b0c010b2004102c220b450d010b0240024002402004410c6e220c20034f0d00200c41017422082003200820034b1b22084104200841044b1bad420c7e220a422088a7454102742108200aa72109024002402004410b4b0d00200241003602100c010b200241186a41043602002002200b3602102002200c410c6c3602140b200220092008200241106a107d200241086a2802002104024020022802004101460d002002280204210b2004410c6e210c0c020b2004450d040c030b20030d00410021050c010b20052003410c6c6a21042003410c6c41746a410c6e2108200b2103034020032005290200370200200341086a200541086a2f01003b01002003410c6a21032005410c6a22052004470d000b200841016a21050b20052000107602402005450d002005410c6c2104200b21050340200541046a210802400240024002402005280200220341c000490d00200341808001490d012003418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220034102743a00102000200241106a410110740c020b200220034102744101723b01102000200241106a410210740c010b200220034102744102723602102000200241106a410410740b2008200010fd04024002400240200541086a2f0100220341c000490d00200341808001490d01200220034102744102723602102000200241106a410410740c020b200220034102743a00102000200241106a410110740c010b200220034102744101723b01102000200241106a410210740b2005410c6a2105200441746a22040d000b0b200141206a280200220341ffffffff00712003470d0120034104742204417f4c0d01200128021821054104210d02402004450d002004102c220d450d010b0240024002402004410476220e20034f0d00200441037622082003200820034b1b22084104200841044b1b220841ffffffff00712008464102742109200841047421080240024020040d00200241003602100c010b200241186a4104360200200220043602142002200d3602100b200220082009200241106a107d200241086a2802002108024020022802004101460d002002280204210d2008410476210e0c020b2008450d040c030b20030d00410021050c010b200520046a2104200341047441706a4104762108200d21030340200320052802003602002003410c6a2005410c6a2f01003b0100200341046a200541046a290200370200200341106a2103200541106a22052004470d000b200841016a21050b20052000107602402005450d0020054104742104200d2105034002400240024002402005280200220341c000490d00200341808001490d012003418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220034102743a00102000200241106a410110740c020b200220034102744101723b01102000200241106a410210740c010b200220034102744102723602102000200241106a410410740b200541046a200010fd04200541086a200010fd040240024002402005410c6a2f0100220341c000490d00200341808001490d01200220034102744102723602102000200241106a410410740c020b200220034102743a00102000200241106a410110740c010b200220034102744101723b01102000200241106a410210740b200541106a2105200441706a22040d000b0b2001412c6a2802002203ad42147e220a422088a70d01200aa72204417f4c0d01200128022421050240024020040d004104210f0c010b2004102c220f450d010b024002400240200441146e221020034f0d00201041017422082003200820034b1b22084104200841044b1bad42147e220a422088a7454102742108200aa7210902400240200441134b0d00200241003602100c010b200241186a41043602002002200f3602102002201041146c3602140b200220092008200241106a107d200241086a2802002104024020022802004101460d002002280204210f200441146e21100c020b2004450d040c030b20030d00410021050c010b2005200341146c6a2104200341146c416c6a41146e2108200f2103034020032005280200360200200341106a200541106a2f01003b01002003410c6a2005410c6a280200360200200341046a200541046a290200370200200341146a2103200541146a22052004470d000b200841016a21050b20052000107602402005450d00200541146c2104200f2105034002400240024002402005280200220341c000490d00200341808001490d012003418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220034102743a00102000200241106a410110740c020b200220034102744101723b01102000200241106a410210740c010b200220034102744102723602102000200241106a410410740b200541046a200010fd04200541086a200010fd042005410c6a200010fd04024002400240200541106a2f0100220341c000490d00200341808001490d01200220034102744102723602102000200241106a410410740c020b200220034102743a00102000200241106a410110740c010b200220034102744101723b01102000200241106a410210740b200541146a21052004416c6a22040d000b0b200141386a2802002203ad42187e220a422088a70d01200aa72204417f4c0d01200128023021050240024020040d00410421110c010b2004102c2211450d010b024002400240200441186e221220034f0d00201241017422082003200820034b1b22084104200841044b1bad42187e220a422088a7454102742108200aa7210902400240200441174b0d00200241003602100c010b200241186a4104360200200220113602102002201241186c3602140b200220092008200241106a107d200241086a2802002104024020022802004101460d0020022802042111200441186e21120c020b2004450d040c030b20030d00410021050c010b2005200341186c6a2104200341186c41686a41186e210820112103034020032005280200360200200341146a200541146a2f01003b01002003410c6a2005410c6a290200370200200341046a200541046a290200370200200341186a2103200541186a22052004470d000b200841016a21050b20052000107602402005450d00200541186c21084100210303400240024002400240201120036a2205280200220441c000490d00200441808001490d012004418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220044102743a00102000200241106a410110740c020b200220044102744101723b01102000200241106a410210740c010b200220044102744102723602102000200241106a410410740b200541046a200010fd04200541086a200010fd042005410c6a200010fd04200541106a200010fd04024002400240200541146a2f0100220541c000490d00200541808001490d01200220054102744102723602102000200241106a410410740c020b200220054102743a00102000200241106a410110740c010b200220054102744101723b01102000200241106a410210740b2008200341186a2203470d000b0b200141c4006a2802002203ad421c7e220a422088a70d01200aa72204417f4c0d01200128023c21050240024020040d00410421130c010b2004102c2213450d010b0240024002402004411c6e221420034f0d00201441017422082003200820034b1b22084104200841044b1bad421c7e220a422088a7454102742108200aa72109024002402004411b4b0d00200241003602100c010b200241186a41043602002002201336021020022014411c6c3602140b200220092008200241106a107d200241086a2802002104024020022802004101460d00200228020421132004411c6e21140c020b2004450d040c030b20030d00410021050c010b20052003411c6c6a21042003411c6c41646a411c6e210820132103034020032005280200360200200341186a200541186a2f01003b0100200341146a200541146a2802003602002003410c6a2005410c6a290200370200200341046a200541046a2902003702002003411c6a21032005411c6a22052004470d000b200841016a21050b20052000107602402005450d002005411c6c21084100210303400240024002400240201320036a2205280200220441c000490d00200441808001490d012004418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220044102743a00102000200241106a410110740c020b200220044102744101723b01102000200241106a410210740c010b200220044102744102723602102000200241106a410410740b200541046a200010fd04200541086a200010fd042005410c6a200010fd04200541106a200010fd04200541146a200010fd04024002400240200541186a2f0100220541c000490d00200541808001490d01200220054102744102723602102000200241106a410410740c020b200220054102743a00102000200241106a410110740c010b200220054102744101723b01102000200241106a410210740b20082003411c6a2203470d000b0b200141d0006a280200220341ffffff3f712003470d0120034105742204417f4c0d01200128024821050240024020040d00410421150c010b2004102c2215450d010b0240024002402004410576221620034f0d00200441047622082003200820034b1b22084104200841044b1b220841ffffff3f712008464102742109200841057421080240024020040d00200241003602100c010b200241186a410436020020022004360214200220153602100b200220082009200241106a107d200241086a2802002108024020022802004101460d0020022802042115200841057621160c020b2008450d040c030b20030d00410021050c010b200520046a2104200341057441606a4105762108201521030340200320052802003602002003411c6a2005411c6a2f01003b0100200341146a200541146a2902003702002003410c6a2005410c6a290200370200200341046a200541046a290200370200200341206a2103200541206a22052004470d000b200841016a21050b20052000107602402005450d00200541057421084100210303400240024002400240201520036a2205280200220441c000490d00200441808001490d012004418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220044102743a00102000200241106a410110740c020b200220044102744101723b01102000200241106a410210740c010b200220044102744102723602102000200241106a410410740b200541046a200010fd04200541086a200010fd042005410c6a200010fd04200541106a200010fd04200541146a200010fd04200541186a200010fd040240024002402005411c6a2f0100220541c000490d00200541808001490d01200220054102744102723602102000200241106a410410740c020b200220054102743a00102000200241106a410110740c010b200220054102744101723b01102000200241106a410210740b2008200341206a2203470d000b0b200141dc006a2802002203ad42247e220a422088a70d01200aa72204417f4c0d01200128025421050240024020040d00410421170c010b2004102c2217450d010b024002400240200441246e221820034f0d00201841017422082003200820034b1b22084104200841044b1bad42247e220a422088a7454102742108200aa7210902400240200441234b0d00200241003602100c010b200241186a4104360200200220173602102002201841246c3602140b200220092008200241106a107d200241086a2802002104024020022802004101460d0020022802042117200441246e21180c020b2004450d040c030b20030d00410021050c010b2005200341246c6a2104200341246c415c6a41246e210820172103034020032005280200360200200341206a200541206a2f01003b01002003411c6a2005411c6a280200360200200341146a200541146a2902003702002003410c6a2005410c6a290200370200200341046a200541046a290200370200200341246a2103200541246a22052004470d000b200841016a21050b20052000107602402005450d00200541246c21084100210303400240024002400240201720036a2205280200220441c000490d00200441808001490d012004418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220044102743a00102000200241106a410110740c020b200220044102744101723b01102000200241106a410210740c010b200220044102744102723602102000200241106a410410740b200541046a200010fd04200541086a200010fd042005410c6a200010fd04200541106a200010fd04200541146a200010fd04200541186a200010fd042005411c6a200010fd04024002400240200541206a2f0100220541c000490d00200541808001490d01200220054102744102723602102000200241106a410410740c020b200220054102743a00102000200241106a410110740c010b200220054102744101723b01102000200241106a410210740b2008200341246a2203470d000b0b200141e8006a2802002203ad42287e220a422088a70d01200aa72204417f4c0d01200128026021050240024020040d00410421190c010b2004102c2219450d010b024002400240200441286e221a20034f0d00201a41017422082003200820034b1b22084104200841044b1bad42287e220a422088a7454102742108200aa7210902400240200441274b0d00200241003602100c010b200241186a4104360200200220193602102002201a41286c3602140b200220092008200241106a107d200241086a2802002104024020022802004101460d0020022802042119200441286e211a0c020b2004450d040c030b20030d00410021050c010b2005200341286c6a2104200341286c41586a41286e2108201921030340200541046a290200210a2005410c6a290200211b200541146a290200211c2005411c6a290200211d20032005280200360200200341246a200541246a2f01003b01002003411c6a201d370200200341146a201c3702002003410c6a201b370200200341046a200a370200200341286a2103200541286a22052004470d000b200841016a21050b20052000107602402005450d00200541286c21084100210303400240024002400240201920036a2205280200220441c000490d00200441808001490d012004418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220044102743a00102000200241106a410110740c020b200220044102744101723b01102000200241106a410210740c010b200220044102744102723602102000200241106a410410740b200541046a200010fd04200541086a200010fd042005410c6a200010fd04200541106a200010fd04200541146a200010fd04200541186a200010fd042005411c6a200010fd04200541206a200010fd04024002400240200541246a2f0100220541c000490d00200541808001490d01200220054102744102723602102000200241106a410410740c020b200220054102743a00102000200241106a410110740c010b200220054102744101723b01102000200241106a410210740b2008200341286a2203470d000b0b200141f4006a2802002203ad422c7e220a422088a70d01200aa72204417f4c0d01200128026c21050240024020040d004104211e0c010b2004102c221e450d010b0240024002402004412c6e221f20034f0d00201f41017422082003200820034b1b22084104200841044b1bad422c7e220a422088a7454102742108200aa72109024002402004412b4b0d00200241003602100c010b200241186a41043602002002201e3602102002201f412c6c3602140b200220092008200241106a107d200241086a2802002104024020022802004101460d002002280204211e2004412c6e211f0c020b2004450d040c030b20030d00410021050c010b20052003412c6c6a21082003412c6c41546a412c6e2109201e21030340200541046a290200210a2005410c6a290200211b200541146a290200211c2005411c6a290200211d200541246a280200210420032005280200360200200341286a200541286a2f01003b0100200341246a20043602002003411c6a201d370200200341146a201c3702002003410c6a201b370200200341046a200a3702002003412c6a21032005412c6a22052008470d000b200941016a21050b20052000107602402005450d002005412c6c21084100210303400240024002400240201e20036a2205280200220441c000490d00200441808001490d012004418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220044102743a00102000200241106a410110740c020b200220044102744101723b01102000200241106a410210740c010b200220044102744102723602102000200241106a410410740b200541046a200010fd04200541086a200010fd042005410c6a200010fd04200541106a200010fd04200541146a200010fd04200541186a200010fd042005411c6a200010fd04200541206a200010fd04200541246a200010fd04024002400240200541286a2f0100220541c000490d00200541808001490d01200220054102744102723602102000200241106a410410740c020b200220054102743a00102000200241106a410110740c010b200220054102744101723b01102000200241106a410210740b20082003412c6a2203470d000b0b20014180016a2802002203ad42307e220a422088a70d01200aa72204417f4c0d01200128027821050240024020040d00410421200c010b2004102c2220450d010b024002400240200441306e222120034f0d00202141017422082003200820034b1b22084104200841044b1bad42307e220a422088a7454102742108200aa72109024002402004412f4b0d00200241003602100c010b200241186a4104360200200220203602102002202141306c3602140b200220092008200241106a107d200241086a2802002104024020022802004101460d0020022802042120200441306e21210c020b2004450d040c030b20030d00410021050c010b2005200341306c6a2108200341306c41506a41306e2109202021030340200541046a290200210a2005410c6a290200211b200541146a290200211c2005411c6a290200211d200541246a2902002122200528020021042003412c6a2005412c6a2f01003b0100200341246a20223702002003411c6a201d370200200341146a201c3702002003410c6a201b370200200341046a200a37020020032004360200200341306a2103200541306a22052008470d000b200941016a21050b20052000107602402005450d00200541306c21084100210303400240024002400240202020036a2205280200220441c000490d00200441808001490d012004418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220044102743a00102000200241106a410110740c020b200220044102744101723b01102000200241106a410210740c010b200220044102744102723602102000200241106a410410740b200541046a200010fd04200541086a200010fd042005410c6a200010fd04200541106a200010fd04200541146a200010fd04200541186a200010fd042005411c6a200010fd04200541206a200010fd04200541246a200010fd04200541286a200010fd040240024002402005412c6a2f0100220541c000490d00200541808001490d01200220054102744102723602102000200241106a410410740c020b200220054102743a00102000200241106a410110740c010b200220054102744101723b01102000200241106a410210740b2008200341306a2203470d000b0b2001418c016a2802002203ad42347e220a422088a70d01200aa72204417f4c0d0120012802840121050240024020040d00410421230c010b2004102c2223450d010b024002400240200441346e222420034f0d00202441017422082003200820034b1b22084104200841044b1bad42347e220a422088a7454102742108200aa7210902400240200441334b0d00200241003602100c010b200241186a4104360200200220233602102002202441346c3602140b200220092008200241106a107d200241086a2802002104024020022802004101460d0020022802042123200441346e21240c020b2004450d040c030b20030d00410021050c010b2005200341346c6a2109200341346c414c6a41346e2125202321030340200541046a290200210a2005410c6a290200211b200541146a290200211c2005411c6a290200211d200541246a29020021222005412c6a280200210420052802002108200341306a200541306a2f01003b01002003412c6a2004360200200341246a20223702002003411c6a201d370200200341146a201c3702002003410c6a201b370200200341046a200a37020020032008360200200341346a2103200541346a22052009470d000b202541016a21050b20052000107602402005450d00200541346c21084100210303400240024002400240202320036a2205280200220441c000490d00200441808001490d012004418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220044102743a00102000200241106a410110740c020b200220044102744101723b01102000200241106a410210740c010b200220044102744102723602102000200241106a410410740b200541046a200010fd04200541086a200010fd042005410c6a200010fd04200541106a200010fd04200541146a200010fd04200541186a200010fd042005411c6a200010fd04200541206a200010fd04200541246a200010fd04200541286a200010fd042005412c6a200010fd04024002400240200541306a2f0100220541c000490d00200541808001490d01200220054102744102723602102000200241106a410410740c020b200220054102743a00102000200241106a410110740c010b200220054102744101723b01102000200241106a410210740b2008200341346a2203470d000b0b20014198016a2802002203ad42387e220a422088a70d01200aa72204417f4c0d0120012802900121050240024020040d00410421250c010b2004102c2225450d010b024002400240200441386e222620034f0d00202641017422082003200820034b1b22084104200841044b1bad42387e220a422088a7454102742108200aa7210902400240200441374b0d00200241003602100c010b200241186a4104360200200220253602102002202641386c3602140b200220092008200241106a107d200241086a2802002104024020022802004101460d0020022802042125200441386e21260c020b2004450d040c030b20030d00410021050c010b2005200341386c6a2108200341386c41486a41386e2109202521030340200541046a290200210a2005410c6a290200211b200541146a290200211c2005411c6a290200211d200541246a29020021222005412c6a290200212720052802002104200341346a200541346a2f01003b01002003412c6a2027370200200341246a20223702002003411c6a201d370200200341146a201c3702002003410c6a201b370200200341046a200a37020020032004360200200341386a2103200541386a22052008470d000b200941016a21050b20052000107602402005450d00200541386c21084100210303400240024002400240202520036a2205280200220441c000490d00200441808001490d012004418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220044102743a00102000200241106a410110740c020b200220044102744101723b01102000200241106a410210740c010b200220044102744102723602102000200241106a410410740b200541046a200010fd04200541086a200010fd042005410c6a200010fd04200541106a200010fd04200541146a200010fd04200541186a200010fd042005411c6a200010fd04200541206a200010fd04200541246a200010fd04200541286a200010fd042005412c6a200010fd04200541306a200010fd04024002400240200541346a2f0100220541c000490d00200541808001490d01200220054102744102723602102000200241106a410410740c020b200220054102743a00102000200241106a410110740c010b200220054102744101723b01102000200241106a410210740b2008200341386a2203470d000b0b200141a4016a2802002203ad423c7e220a422088a70d01200aa72204417f4c0d01200128029c0121050240024020040d00410421280c010b2004102c2228450d010b0240024002402004413c6e222920034f0d00202941017422082003200820034b1b22084104200841044b1bad423c7e220a422088a7454102742108200aa72109024002402004413b4b0d00200241003602100c010b200241186a41043602002002202836021020022029413c6c3602140b200220092008200241106a107d200241086a2802002104024020022802004101460d00200228020421282004413c6e21290c020b2004450d040c030b20030d00410021050c010b20052003413c6c6a21092003413c6c41446a413c6e212a202821030340200541046a290200210a2005410c6a290200211b200541146a290200211c2005411c6a290200211d200541246a29020021222005412c6a2902002127200541346a280200210420052802002108200341386a200541386a2f01003b0100200341346a20043602002003412c6a2027370200200341246a20223702002003411c6a201d370200200341146a201c3702002003410c6a201b370200200341046a200a370200200320083602002003413c6a21032005413c6a22052009470d000b202a41016a21050b20052000107602402005450d002005413c6c21084100210303400240024002400240202820036a2205280200220441c000490d00200441808001490d012004418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220044102743a00102000200241106a410110740c020b200220044102744101723b01102000200241106a410210740c010b200220044102744102723602102000200241106a410410740b200541046a200010fd04200541086a200010fd042005410c6a200010fd04200541106a200010fd04200541146a200010fd04200541186a200010fd042005411c6a200010fd04200541206a200010fd04200541246a200010fd04200541286a200010fd042005412c6a200010fd04200541306a200010fd04200541346a200010fd04024002400240200541386a2f0100220541c000490d00200541808001490d01200220054102744102723602102000200241106a410410740c020b200220054102743a00102000200241106a410110740c010b200220054102744101723b01102000200241106a410210740b20082003413c6a2203470d000b0b200141b0016a280200220341ffffff1f712003470d0120034106742204417f4c0d0120012802a80121050240024020040d00410421090c010b2004102c2209450d010b0240024002402004410676222b20034f0d00200441057622082003200820034b1b22084104200841044b1b220841ffffff1f71200846410274212a200841067421080240024020040d00200241003602100c010b200241186a410436020020022004360214200220093602100b20022008202a200241106a107d200241086a2802002108024020022802004101460d00200228020421092008410676212b0c020b2008450d040c030b20030d00410021050c010b200520046a2108200341067441406a410676212a200921030340200541046a290200210a2005410c6a290200211b200541146a290200211c2005411c6a290200211d200541246a29020021222005412c6a2902002127200541346a290200212c200528020021042003413c6a2005413c6a2f01003b0100200341346a202c3702002003412c6a2027370200200341246a20223702002003411c6a201d370200200341146a201c3702002003410c6a201b370200200341046a200a37020020032004360200200341c0006a2103200541c0006a22052008470d000b202a41016a21050b20052000107602402005450d00200541067421084100210303400240024002400240200920036a2205280200220441c000490d00200441808001490d012004418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220044102743a00102000200241106a410110740c020b200220044102744101723b01102000200241106a410210740c010b200220044102744102723602102000200241106a410410740b200541046a200010fd04200541086a200010fd042005410c6a200010fd04200541106a200010fd04200541146a200010fd04200541186a200010fd042005411c6a200010fd04200541206a200010fd04200541246a200010fd04200541286a200010fd042005412c6a200010fd04200541306a200010fd04200541346a200010fd04200541386a200010fd040240024002402005413c6a2f0100220541c000490d00200541808001490d01200220054102744102723602102000200241106a410410740c020b200220054102743a00102000200241106a410110740c010b200220054102744101723b01102000200241106a410210740b2008200341c0006a2203470d000b0b200141bc016a2802002203ad42c4007e220a422088a70d01200aa72204417f4c0d0120012802b40121050240024020040d004104212a0c010b2004102c222a450d010b024002400240200441c4006e222d20034f0d00202d41017422082003200820034b1b22084104200841044b1bad42c4007e220a422088a7454102742108200aa7210102400240200441c3004b0d00200241003602100c010b200241186a41043602002002202a3602102002202d41c4006c3602140b200220012008200241106a107d200241086a2802002104024020022802004101460d002002280204212a200441c4006e212d0c020b2004450d040c030b20030d00410021050c010b2005200341c4006c6a2101200341c4006c41bc7f6a41c4006e212e202a21030340200541046a290200210a2005410c6a290200211b200541146a290200211c2005411c6a290200211d200541246a29020021222005412c6a2902002127200541346a290200212c2005413c6a280200210420052802002108200341c0006a200541c0006a2f01003b01002003413c6a2004360200200341346a202c3702002003412c6a2027370200200341246a20223702002003411c6a201d370200200341146a201c3702002003410c6a201b370200200341046a200a37020020032008360200200341c4006a2103200541c4006a22052001470d000b202e41016a21050b20052000107602402005450d00200541c4006c21084100210303400240024002400240202a20036a2205280200220441c000490d00200441808001490d012004418080808004490d02200241033a00102000200241106a41011074200220052802003602102000200241106a410410740c030b200220044102743a00102000200241106a410110740c020b200220044102744101723b01102000200241106a410210740c010b200220044102744102723602102000200241106a410410740b200541046a200010fd04200541086a200010fd042005410c6a200010fd04200541106a200010fd04200541146a200010fd04200541186a200010fd042005411c6a200010fd04200541206a200010fd04200541246a200010fd04200541286a200010fd042005412c6a200010fd04200541306a200010fd04200541346a200010fd04200541386a200010fd042005413c6a200010fd04024002400240200541c0006a2f0100220541c000490d00200541808001490d01200220054102744102723602102000200241106a410410740c020b200220054102743a00102000200241106a410110740c010b200220054102744101723b01102000200241106a410210740b2008200341c4006a2203470d000b0b0240202d450d00202d41c4006c450d00202a102e0b0240202b450d002009102e0b02402029450d002029413c6c450d002028102e0b02402026450d00202641386c450d002025102e0b02402024450d00202441346c450d002023102e0b02402021450d00202141306c450d002020102e0b0240201f450d00201f412c6c450d00201e102e0b0240201a450d00201a41286c450d002019102e0b02402018450d00201841246c450d002017102e0b02402016450d002015102e0b02402014450d002014411c6c450d002013102e0b02402012450d00201241186c450d002011102e0b02402010450d00201041146c450d00200f102e0b0240200e450d00200d102e0b0240200c450d00200c410c6c450d00200b102e0b02402007450d002006102e0b200241206a24000f0b1036000b1038000b040041010b040041010b040041010bf5be010f057f017e017f017e077f017e147f017e027f017e047f017e077f017e0e7f230041c0196b22022400200241f8116a200110ad0102400240024002400240024020022802f8110d0020022802fc11220320012802002802044103762204200420034b1b22044103742205417f4c0d050240024020040d00410421050c010b2005102c2205450d050b2001200128020441016a22063602042004ad21070240200620012802084b0d00024002402003450d000340200241f0116a200110ad0120022802f0110d0320022802f4112106200241e8116a200110fb0420022f01e8110d0320022f01ea112108024020074220882209a722042007a7470d00200441016a220a2004490d0a2004410174220b200a200a200b491b220a4104200a41044b1b220a41ffffffff0171200a46410274210b200a410374210a0240024020040d0020024100360280180c010b20024104360288182002200536028018200220094203863e0284180b200241c0186a200a200b20024180186a107d20022802c818210a20022802c0184101460d0320022802c418210520074220882209a72104200a410376ad21070b200520044103746a220420083b0104200420063602002009422086200742ffffffff0f83844280808080107c21072003417f6a22030d000b200128020421060b20012006417f6a3602042005450d022007422088a741037422040d03200521040c040b200a0d050c060b200742ffffffff0183500d002005102e0b200041003602000c020b200520046a21032005210403402004200429020022093e0200200441046a20094220883d0100200441086a22042003470d000b0b2007a7210a200241e0116a200110ad01024002400240024020022802e0110d0020022802e41122062001280200280204410c6e2203200320064b1bad420c7e2207422088a70d062007a72203417f4c0d060240024020030d00410421080c010b2003102c2208450d060b2001200128020441016a220b3602042003410c6ead21070240200b20012802084b0d00024002402006450d000340200241d8116a200110ad0120022802d8110d0320022802dc11210b200241d0116a200110fb0420022f01d0110d0320022f01d211210c200241c8116a200110fb0420022f01c8110d0320022f01ca11210d200241c0116a200110fb0420022f01c0110d0320022f01c211210e024020074220882209a722032007a7470d00200341016a220f2003490d0b20034101742210200f200f2010491b220f4104200f41044b1bad420c7e2209422088a745410274210f2009a721100240024020030d0020024100360280180c010b2002410436028818200220083602801820022003410c6c360284180b200241c0186a2010200f20024180186a107d20022802c818210f20022802c0184101460d0320022802c418210820074220882209a72103200f410c6ead21070b20082003410c6c6a2203200e3b01082003200c3b01042003200b360200200341066a200d3b01002009422086200742ffffffff0f83844280808080107c21072006417f6a22060d000b2001280204210b0b2001200b417f6a3602042008450d022007422088a7410c6c22030d03200821030c040b200f450d070c060b2007a72204450d002004410c6c450d002008102e0b200041003602000c020b200820036a21062008210303402003410c6a22032006470d000b0b2007a72106200241b8116a200110ad01200320086b410c6d210f0240024020022802b8110d004104210c20022802bc11220b200128020028020441047622032003200b4b1b2203410474220d417f4c0d0502402003450d00200d102c220c450d050b2001200128020441016a220d3602042003ad21070240200d20012802084b0d0002400240024002400240200b450d000340200241b0116a200110ad0120022802b0110d0620022802b411210e200241003a008818200241a8116a200110fb0420022f01a8110d0620022f01aa112103200241a0116a200110fb0420022f01a0110d0620022f01a211210d200241013a0088182002200d3b018218200220033b01801820024198116a200110fb0420022f0198110d0520022f019a11210320024190116a200110fb0420022f0190110d05200220022f0192113b018618200220033b018418200229038018210920024188116a200110fb0420022f0188110d0620022f018a112110024020074220882211a722032007a7470d00200341016a220d2003490d0d20034101742212200d200d2012491b220d4104200d41044b1b220d41ffffffff0071200d464102742112200d410474210d0240024020030d0020024100360280180c010b20024104360288182002200c36028018200220114204863e0284180b200241c0186a200d201220024180186a107d20022802c818210d20022802c0184101460d0320022802c418210c200d410476ad21070b200c20034104746a220d20103b010c200d2009370204200d200e360200200742ffffffff0f83200341016aad422086842107200b417f6a220b0d000b2001280204210d0b2001200d417f6a360204200c450d052007422088a741047422030d01200c21030c020b200d450d090c080b200c20036a210b200c21030340200341106a2203200b470d000b0b2007a7210d20024180116a200110ad01024002402002280280110d00200228028411220e200128020028020441146e220b200b200e4b1bad42147e2207422088a70d092007a7220b417f4c0d0902400240200b0d00410421120c010b200b102c2212450d090b2001200128020441016a2210360204200b41146ead21070240201020012802084b0d0002400240024002400240200e450d00200241c0186a41086a21130340200241f8106a200110ad0120022802f8100d0620022802fc102114200241003a008c18200241f0106a200110fb0420022f01f0100d0620022f01f210210b200241e8106a200110fb0420022f01e8100d0620022f01ea102110200241013a008c18200220103b0182182002200b3b018018200241e0106a200110fb0420022f01e0100d0520022f01e210210b200241d8106a200110fb0420022f01d8100d0520022f01da102110200241023a008c18200220103b0186182002200b3b018418200241d0106a200110fb0420022f01d0100d0520022f01d210210b200241c8106a200110fb0420022f01c8100d05200220022f01ca103b018a182002200b3b018818201320022802881836020020022002290380183703c018200241c0106a200110fb0420022f01c0100d0620022f01c210211520024180176a41086a2013280200220b360200200241c0166a41086a2216200b360200200220022903c018220937038017200220093703c01602402007422088a7220b2007a7470d00200b41016a2210200b490d11200b4101742217201020102017491b22104104201041044b1bad42147e2207422088a74541027421102007a7211702400240200b0d0020024100360280180c010b200241043602881820022012360280182002200b41146c360284180b200241c0186a2017201020024180186a107d20022802c818211020022802c0184101460d0320022802c4182112201041146ead21070b2012200b41146c6a22102014360200201020022903c0163702042010410c6a2016280200360200201020153b0110200742ffffffff0f83200b41016aad422086842107200e417f6a220e0d000b200128020421100b20012010417f6a3602042012450d052007422088a741146c220b0d012012210b0c020b2010450d0d0c0c0b2012200b6a210e2012210b0340200b41146a220b200e470d000b0b2007a7210e200241b8106a200110ad01200b20126b41146d21150240024020022802b8100d0020022802bc102210200128020028020441186e220b200b20104b1bad42187e2207422088a70d0d2007a7220b417f4c0d0d02400240200b0d00410421130c010b200b102c2213450d0d0b2001200128020441016a2214360204200b41186ead21070240201420012802084b0d00024002400240024002402010450d000340200241b0106a200110ad0120022802b0100d0620022802b4102116200241003a009018200241a8106a200110fb0420022f01a8100d0620022f01aa10210b200241a0106a200110fb0420022f01a0100d0620022f01a2102114200241013a009018200220143b0182182002200b3b01801820024198106a200110fb0420022f0198100d0520022f019a10210b20024190106a200110fb0420022f0190100d0520022f0192102114200241023a009018200220143b0186182002200b3b01841820024188106a200110fb0420022f0188100d0520022f018a10210b20024180106a200110fb0420022f0180100d0520022f0182102114200241033a009018200220143b018a182002200b3b018818200241f80f6a200110fb0420022f01f80f0d0520022f01fa0f210b200241f00f6a200110fb0420022f01f00f0d05200220022f01f20f3b018e182002200b3b018c18200241c0186a41086a220b20024180186a41086a29030037030020022002290380183703c018200241e80f6a200110fb0420022f01e80f0d0620022f01ea0f211720024180176a41086a200b2903002209370300200241c0166a41086a22182009370300200220022903c018220937038017200220093703c01602402007422088a7220b2007a7470d00200b41016a2214200b490d15200b4101742219201420142019491b22144104201441044b1bad42187e2207422088a74541027421142007a7211902400240200b0d0020024100360280180c010b200241043602881820022013360280182002200b41186c360284180b200241c0186a2019201420024180186a107d20022802c818211420022802c0184101460d0320022802c4182113201441186ead21070b2013200b41186c6a22142016360200201420022903c0163702042014410c6a2018290300370200201420173b0114200742ffffffff0f83200b41016aad4220868421072010417f6a22100d000b200128020421140b20012014417f6a3602042013450d052007422088a741186c220b0d012013210b0c020b2014450d110c100b2013200b6a21102013210b0340200b41186a220b2010470d000b0b2007a72110200241e00f6a200110ad01200b20136b41186d21180240024020022802e00f0d0020022802e40f220b2001280200280204411c6e22142014200b4b1bad421c7e2207422088a70d112007a72214417f4c0d110240024020140d00410421170c010b2014102c2217450d110b2001200128020441016a22163602042014411c6ead21070240201620012802084b0d0002400240024002400240200b450d00200241c0186a41106a21190340200241d80f6a200110ad0120022802d80f0d0620022802dc0f211a200241003a009418200241d00f6a200110fb0420022f01d00f0d0620022f01d20f2114200241c80f6a200110fb0420022f01c80f0d0620022f01ca0f2116200241013a009418200220163b018218200220143b018018200241c00f6a200110fb0420022f01c00f0d0520022f01c20f2114200241b80f6a200110fb0420022f01b80f0d0520022f01ba0f2116200241023a009418200220163b018618200220143b018418200241b00f6a200110fb0420022f01b00f0d0520022f01b20f2114200241a80f6a200110fb0420022f01a80f0d0520022f01aa0f2116200241033a009418200220163b018a18200220143b018818200241a00f6a200110fb0420022f01a00f0d0520022f01a20f2114200241980f6a200110fb0420022f01980f0d0520022f019a0f2116200241043a009418200220163b018e18200220143b018c18200241900f6a200110fb0420022f01900f0d0520022f01920f2114200241880f6a200110fb0420022f01880f0d0520022f018a0f2116200241c0186a41086a221b20024180186a41086a290300370300200220163b019218200220143b0190182019200228029018360200200241053a00941820022002290380183703c018200241800f6a200110fb0420022f01800f0d0620022f01820f211c20024180176a41086a201b290300220937030020024180176a41106a20192802002214360200200241c0166a41086a221b2009370300200241c0166a41106a221d2014360200200220022903c018220937038017200220093703c01602402007422088a722142007a7470d00201441016a22162014490d192014410174221e20162016201e491b22164104201641044b1bad421c7e2207422088a74541027421162007a7211e0240024020140d0020024100360280180c010b2002410436028818200220173602801820022014411c6c360284180b200241c0186a201e201620024180186a107d20022802c818211620022802c0184101460d0320022802c41821172016411c6ead21070b20172014411c6c6a2216201a360200201620022903c0163702042016410c6a201b290300370200201641146a201d2802003602002016201c3b0118200742ffffffff0f83201441016aad422086842107200b417f6a220b0d000b200128020421160b20012016417f6a3602042017450d052007422088a7411c6c220b0d012017210b0c020b2016450d150c140b2017200b6a21142017210b0340200b411c6a220b2014470d000b0b2007a72114200241f80e6a200110ad01200b20176b411c6d211a0240024020022802f80e0d0020022802fc0e220b200128020028020441057622162016200b4b1b22164105742219417f4c0d150240024020160d00410421190c010b2019102c2219450d150b2001200128020441016a221b3602042016ad21070240201b20012802084b0d0002400240024002400240200b450d000340200241f00e6a200110ad0120022802f00e0d0620022802f40e211c200241003a009818200241e80e6a200110fb0420022f01e80e0d0620022f01ea0e2116200241e00e6a200110fb0420022f01e00e0d0620022f01e20e211b200241013a0098182002201b3b018218200220163b018018200241d80e6a200110fb0420022f01d80e0d0520022f01da0e2116200241d00e6a200110fb0420022f01d00e0d0520022f01d20e211b200241023a0098182002201b3b018618200220163b018418200241c80e6a200110fb0420022f01c80e0d0520022f01ca0e2116200241c00e6a200110fb0420022f01c00e0d0520022f01c20e211b200241033a0098182002201b3b018a18200220163b018818200241b80e6a200110fb0420022f01b80e0d0520022f01ba0e2116200241b00e6a200110fb0420022f01b00e0d0520022f01b20e211b200241043a0098182002201b3b018e18200220163b018c18200241a80e6a200110fb0420022f01a80e0d0520022f01aa0e2116200241a00e6a200110fb0420022f01a00e0d0520022f01a20e211b200241053a0098182002201b3b019218200220163b019018200241980e6a200110fb0420022f01980e0d0520022f019a0e2116200241900e6a200110fb0420022f01900e0d0520022f01920e211b200241c0186a41086a221d20024180186a41086a2903003703002002201b3b019618200220163b019418200241c0186a41106a221620024180186a41106a290300370300200241063a00981820022002290380183703c018200241880e6a200110fb0420022f01880e0d0620022f018a0e211e20024180176a41086a201d290300220937030020024180176a41106a20162903002211370300200241c0166a41086a221d2009370300200241c0166a41106a221f2011370300200220022903c018220937038017200220093703c016024020074220882209a7221b2007a7470d00201b41016a2216201b490d1d201b4101742220201620162020491b22164104201641044b1b221641ffffff3f7120164641027421202016410574211602400240201b0d0020024100360280180c010b20024104360288182002201936028018200220094205863e0284180b200241c0186a2016202020024180186a107d20022802c818211620022802c0184101460d0320022802c41821192016410576ad21070b2019201b4105746a2216201c360200201620022903c0163702042016410c6a201d290300370200201641146a201f2903003702002016201e3b011c200742ffffffff0f83201b41016aad422086842107200b417f6a220b0d000b2001280204211b0b2001201b417f6a3602042019450d052007422088a7410574220b0d012019210b0c020b2016450d190c180b2019200b6a21162019210b0340200b41206a220b2016470d000b0b2007a72116200241800e6a200110ad010240024020022802800e0d0020022802840e221c200128020028020441246e221b201b201c4b1bad42247e2207422088a70d192007a7221b417f4c0d1902400240201b0d004104211d0c010b201b102c221d450d190b2001200128020441016a221e360204201b41246ead21070240201e20012802084b0d0002400240024002400240201c450d00200241c0176a41186a211f0340200241f80d6a200110ad0120022802f80d0d0620022802fc0d2120200241003a009c18200241f00d6a200110fb0420022f01f00d0d0620022f01f20d211b200241e80d6a200110fb0420022f01e80d0d0620022f01ea0d211e200241013a009c182002201e3b0182182002201b3b018018200241e00d6a200110fb0420022f01e00d0d0520022f01e20d211b200241d80d6a200110fb0420022f01d80d0d0520022f01da0d211e200241023a009c182002201e3b0186182002201b3b018418200241d00d6a200110fb0420022f01d00d0d0520022f01d20d211b200241c80d6a200110fb0420022f01c80d0d0520022f01ca0d211e200241033a009c182002201e3b018a182002201b3b018818200241c00d6a200110fb0420022f01c00d0d0520022f01c20d211b200241b80d6a200110fb0420022f01b80d0d0520022f01ba0d211e200241043a009c182002201e3b018e182002201b3b018c18200241b00d6a200110fb0420022f01b00d0d0520022f01b20d211b200241a80d6a200110fb0420022f01a80d0d0520022f01aa0d211e200241053a009c182002201e3b0192182002201b3b019018200241a00d6a200110fb0420022f01a00d0d0520022f01a20d211b200241980d6a200110fb0420022f01980d0d0520022f019a0d211e200241063a009c182002201e3b0196182002201b3b019418200241900d6a200110fb0420022f01900d0d0520022f01920d211b200241880d6a200110fb0420022f01880d0d0520022f018a0d211e200241c0176a41106a222120024180186a41106a290300370300200241c0176a41086a222220024180186a41086a2903003703002002201e3b019a182002201b3b019818201f200228029818360200200241073a009c18200220022903801822093703c018200220093703c017200241800d6a200110fb0420022f01800d0d0620022f01820d2123200241c0166a41086a20222903002209370300200241c0166a41106a20212903002211370300200241c0166a41186a201f280200221b36020020024180166a41086a2221200937030020024180166a41106a2222201137030020024180166a41186a2224201b360200200220022903c01722093703c016200220093703801602402007422088a7221e2007a7470d00201e41016a221b201e490d21201e4101742225201b201b2025491b221b4104201b41044b1bad42247e2207422088a745410274211b2007a7212502400240201e0d0020024100360280180c010b20024104360288182002201d360280182002201e41246c360284180b200241c0186a2025201b20024180186a107d20022802c818211b20022802c0184101460d0320022802c418211d201b41246ead21070b201d201e41246c6a221b2020360200201b200229038016370204201b410c6a2021290300370200201b41146a2022290300370200201b411c6a2024280200360200201b20233b0120200742ffffffff0f83201e41016aad422086842107201c417f6a221c0d000b2001280204211e0b2001201e417f6a360204201d450d052007422088a741246c221b0d01201d211b0c020b201b450d1d0c1c0b201d201b6a211c201d211b0340201b41246a221b201c470d000b0b2007a7211c200241f80c6a200110ad01201b201d6b41246d21200240024020022802f80c0d0020022802fc0c221e200128020028020441286e221b201b201e4b1bad42287e2207422088a70d1d2007a7221b417f4c0d1d02400240201b0d004104211f0c010b201b102c221f450d1d0b2001200128020441016a2221360204201b41286ead21070240202120012802084b0d0002400240024002400240201e450d000340200241f00c6a200110ad0120022802f00c0d0620022802f40c2122200241003a00a018200241e80c6a200110fb0420022f01e80c0d0620022f01ea0c211b200241e00c6a200110fb0420022f01e00c0d0620022f01e20c2121200241013a00a018200220213b0182182002201b3b018018200241d80c6a200110fb0420022f01d80c0d0520022f01da0c211b200241d00c6a200110fb0420022f01d00c0d0520022f01d20c2121200241023a00a018200220213b0186182002201b3b018418200241c80c6a200110fb0420022f01c80c0d0520022f01ca0c211b200241c00c6a200110fb0420022f01c00c0d0520022f01c20c2121200241033a00a018200220213b018a182002201b3b018818200241b80c6a200110fb0420022f01b80c0d0520022f01ba0c211b200241b00c6a200110fb0420022f01b00c0d0520022f01b20c2121200241043a00a018200220213b018e182002201b3b018c18200241a80c6a200110fb0420022f01a80c0d0520022f01aa0c211b200241a00c6a200110fb0420022f01a00c0d0520022f01a20c2121200241053a00a018200220213b0192182002201b3b019018200241980c6a200110fb0420022f01980c0d0520022f019a0c211b200241900c6a200110fb0420022f01900c0d0520022f01920c2121200241063a00a018200220213b0196182002201b3b019418200241880c6a200110fb0420022f01880c0d0520022f018a0c211b200241800c6a200110fb0420022f01800c0d0520022f01820c2121200241073a00a018200220213b019a182002201b3b019818200241f80b6a200110fb0420022f01f80b0d0520022f01fa0b211b200241f00b6a200110fb0420022f01f00b0d0520022f01f20b2121200241c0176a41106a222320024180186a41106a290300370300200220213b019e182002201b3b019c18200241c0176a41186a221b20024180186a41186a290300370300200241083a00a018200241c0176a41086a222120024180186a41086a290300370300200220022903801822093703c018200220093703c017200241e80b6a200110fb0420022f01e80b0d0620022f01ea0b2124200241c0166a41086a20212903002209370300200241c0166a41106a20232903002211370300200241c0166a41186a201b290300222637030020024180166a41086a2223200937030020024180166a41106a2225201137030020024180166a41186a22272026370300200220022903c01722093703c016200220093703801602402007422088a722212007a7470d00202141016a221b2021490d2520214101742228201b201b2028491b221b4104201b41044b1bad42287e2207422088a745410274211b2007a721280240024020210d0020024100360280180c010b20024104360288182002201f360280182002202141286c360284180b200241c0186a2028201b20024180186a107d20022802c818211b20022802c0184101460d0320022802c418211f201b41286ead21070b201f202141286c6a221b2022360200201b200229038016370204201b410c6a2023290300370200201b41146a2025290300370200201b411c6a2027290300370200201b20243b0124200742ffffffff0f83202141016aad422086842107201e417f6a221e0d000b200128020421210b20012021417f6a360204201f450d052007422088a741286c221b0d01201f211b0c020b201b450d210c200b201f201b6a211e201f211b0340201b41286a221b201e470d000b0b2007a7211e200241e00b6a200110ad01201b201f6b41286d21220240024020022802e00b0d0020022802e40b22212001280200280204412c6e221b201b20214b1bad422c7e2207422088a70d212007a7221b417f4c0d2102400240201b0d00410421230c010b201b102c2223450d210b2001200128020441016a2224360204201b412c6ead21070240202420012802084b0d00024002400240024002402021450d000340200241d80b6a200110ad0120022802d80b0d0620022802dc0b2125200241003a00a418200241d00b6a200110fb0420022f01d00b0d0620022f01d20b211b200241c80b6a200110fb0420022f01c80b0d0620022f01ca0b2124200241013a00a418200220243b0182182002201b3b018018200241c00b6a200110fb0420022f01c00b0d0520022f01c20b211b200241b80b6a200110fb0420022f01b80b0d0520022f01ba0b2124200241023a00a418200220243b0186182002201b3b018418200241b00b6a200110fb0420022f01b00b0d0520022f01b20b211b200241a80b6a200110fb0420022f01a80b0d0520022f01aa0b2124200241033a00a418200220243b018a182002201b3b018818200241a00b6a200110fb0420022f01a00b0d0520022f01a20b211b200241980b6a200110fb0420022f01980b0d0520022f019a0b2124200241043a00a418200220243b018e182002201b3b018c18200241900b6a200110fb0420022f01900b0d0520022f01920b211b200241880b6a200110fb0420022f01880b0d0520022f018a0b2124200241053a00a418200220243b0192182002201b3b019018200241800b6a200110fb0420022f01800b0d0520022f01820b211b200241f80a6a200110fb0420022f01f80a0d0520022f01fa0a2124200241063a00a418200220243b0196182002201b3b019418200241f00a6a200110fb0420022f01f00a0d0520022f01f20a211b200241e80a6a200110fb0420022f01e80a0d0520022f01ea0a2124200241073a00a418200220243b019a182002201b3b019818200241e00a6a200110fb0420022f01e00a0d0520022f01e20a211b200241d80a6a200110fb0420022f01d80a0d0520022f01da0a2124200241083a00a418200220243b019e182002201b3b019c18200241d00a6a200110fb0420022f01d00a0d0520022f01d20a211b200241c80a6a200110fb0420022f01c80a0d05200220022f01ca0a3b01a2182002201b3b01a018200241093a00a418200241c0186a41086a20024180186a41086a2903002209370300200241c0186a41106a20024180186a41106a2903002211370300200241c0186a41186a20024180186a41186a2903002226370300200241c0186a41206a20022802a018221b360200200220022903801822293703c018200241c0176a41206a2224201b360200200241c0176a41186a22272026370300200241c0176a41106a22282011370300200241c0176a41086a222a2009370300200220293703c017200241c00a6a200110fb0420022f01c00a0d0620022f01c20a212b20024180176a41206a2024280200221b360200200241c0166a41086a202a2903002209370300200241c0166a41106a20282903002211370300200241c0166a41186a20272903002226370300200241c0166a41206a201b36020020024180166a41086a2227200937030020024180166a41106a2228201137030020024180166a41186a222a202637030020024180166a41206a222c201b360200200220022903c01722093703c016200220093703801602402007422088a722242007a7470d00202441016a221b2024490d292024410174222d201b201b202d491b221b4104201b41044b1bad422c7e2207422088a745410274211b2007a7212d0240024020240d0020024100360280180c010b2002410436028818200220233602801820022024412c6c360284180b200241c0186a202d201b20024180186a107d20022802c818211b20022802c0184101460d0320022802c4182123201b412c6ead21070b20232024412c6c6a221b2025360200201b200229038016370204201b410c6a2027290300370200201b41146a2028290300370200201b411c6a202a290300370200201b41246a202c280200360200201b202b3b0128200742ffffffff0f83202441016aad4220868421072021417f6a22210d000b200128020421240b20012024417f6a3602042023450d052007422088a7412c6c221b0d012023211b0c020b201b450d250c240b2023201b6a21212023211b0340201b412c6a221b2021470d000b0b2007a72121200241b80a6a200110ad01201b20236b412c6d21250240024020022802b80a0d0020022802bc0a2224200128020028020441306e221b201b20244b1bad42307e2207422088a70d252007a7221b417f4c0d2502400240201b0d00410421270c010b201b102c2227450d250b2001200128020441016a2228360204201b41306ead21070240202820012802084b0d00024002400240024002402024450d000340200241b00a6a200110ad0120022802b00a0d0620022802b40a212a200241003a00a818200241a80a6a200110fb0420022f01a80a0d0620022f01aa0a211b200241a00a6a200110fb0420022f01a00a0d0620022f01a20a2128200241013a00a818200220283b0182182002201b3b018018200241980a6a200110fb0420022f01980a0d0520022f019a0a211b200241900a6a200110fb0420022f01900a0d0520022f01920a2128200241023a00a818200220283b0186182002201b3b018418200241880a6a200110fb0420022f01880a0d0520022f018a0a211b200241800a6a200110fb0420022f01800a0d0520022f01820a2128200241033a00a818200220283b018a182002201b3b018818200241f8096a200110fb0420022f01f8090d0520022f01fa09211b200241f0096a200110fb0420022f01f0090d0520022f01f2092128200241043a00a818200220283b018e182002201b3b018c18200241e8096a200110fb0420022f01e8090d0520022f01ea09211b200241e0096a200110fb0420022f01e0090d0520022f01e2092128200241053a00a818200220283b0192182002201b3b019018200241d8096a200110fb0420022f01d8090d0520022f01da09211b200241d0096a200110fb0420022f01d0090d0520022f01d2092128200241063a00a818200220283b0196182002201b3b019418200241c8096a200110fb0420022f01c8090d0520022f01ca09211b200241c0096a200110fb0420022f01c0090d0520022f01c2092128200241073a00a818200220283b019a182002201b3b019818200241b8096a200110fb0420022f01b8090d0520022f01ba09211b200241b0096a200110fb0420022f01b0090d0520022f01b2092128200241083a00a818200220283b019e182002201b3b019c18200241a8096a200110fb0420022f01a8090d0520022f01aa09211b200241a0096a200110fb0420022f01a0090d0520022f01a2092128200241093a00a818200220283b01a2182002201b3b01a01820024198096a200110fb0420022f0198090d0520022f019a09211b20024190096a200110fb0420022f0190090d05200220022f0192093b01a6182002201b3b01a4182002410a3a00a818200241c0186a41086a20024180186a41086a2903002209370300200241c0186a41106a20024180186a41106a2903002211370300200241c0186a41186a20024180186a41186a2903002226370300200241c0186a41206a20024180186a41206a29030022293703002002200229038018222e3703c018200241c0176a41206a221b2029370300200241c0176a41186a22282026370300200241c0176a41106a222b2011370300200241c0176a41086a222c20093703002002202e3703c01720024188096a200110fb0420022f0188090d0620022f018a09212d20024180176a41206a201b2903002209370300200241c0166a41086a202c2903002211370300200241c0166a41106a202b2903002226370300200241c0166a41186a20282903002229370300200241c0166a41206a200937030020024180166a41086a222b201137030020024180166a41106a222c202637030020024180166a41186a222f202937030020024180166a41206a22302009370300200220022903c01722093703c016200220093703801602402007422088a722282007a7470d00202841016a221b2028490d2d20284101742231201b201b2031491b221b4104201b41044b1bad42307e2207422088a745410274211b2007a721310240024020280d0020024100360280180c010b200241043602881820022027360280182002202841306c360284180b200241c0186a2031201b20024180186a107d20022802c818211b20022802c0184101460d0320022802c4182127201b41306ead21070b2027202841306c6a221b202a360200201b200229038016370204201b410c6a202b290300370200201b41146a202c290300370200201b411c6a202f290300370200201b41246a2030290300370200201b202d3b012c200742ffffffff0f83202841016aad4220868421072024417f6a22240d000b200128020421280b20012028417f6a3602042027450d052007422088a741306c221b0d012027211b0c020b201b450d290c280b2027201b6a21242027211b0340201b41306a221b2024470d000b0b2007a7212420024180096a200110ad01201b20276b41306d212a024002402002280280090d002002280284092228200128020028020441346e221b201b20284b1bad42347e2207422088a70d292007a7221b417f4c0d2902400240201b0d004104212b0c010b201b102c222b450d290b2001200128020441016a222c360204201b41346ead21070240202c20012802084b0d00024002400240024002402028450d000340200241f8086a200110ad0120022802f8080d0620022802fc08212d200241003a00ac18200241f0086a200110fb0420022f01f0080d0620022f01f208211b200241e8086a200110fb0420022f01e8080d0620022f01ea08212c200241013a00ac182002202c3b0182182002201b3b018018200241e0086a200110fb0420022f01e0080d0520022f01e208211b200241d8086a200110fb0420022f01d8080d0520022f01da08212c200241023a00ac182002202c3b0186182002201b3b018418200241d0086a200110fb0420022f01d0080d0520022f01d208211b200241c8086a200110fb0420022f01c8080d0520022f01ca08212c200241033a00ac182002202c3b018a182002201b3b018818200241c0086a200110fb0420022f01c0080d0520022f01c208211b200241b8086a200110fb0420022f01b8080d0520022f01ba08212c200241043a00ac182002202c3b018e182002201b3b018c18200241b0086a200110fb0420022f01b0080d0520022f01b208211b200241a8086a200110fb0420022f01a8080d0520022f01aa08212c200241053a00ac182002202c3b0192182002201b3b019018200241a0086a200110fb0420022f01a0080d0520022f01a208211b20024198086a200110fb0420022f0198080d0520022f019a08212c200241063a00ac182002202c3b0196182002201b3b01941820024190086a200110fb0420022f0190080d0520022f019208211b20024188086a200110fb0420022f0188080d0520022f018a08212c200241073a00ac182002202c3b019a182002201b3b01981820024180086a200110fb0420022f0180080d0520022f018208211b200241f8076a200110fb0420022f01f8070d0520022f01fa07212c200241083a00ac182002202c3b019e182002201b3b019c18200241f0076a200110fb0420022f01f0070d0520022f01f207211b200241e8076a200110fb0420022f01e8070d0520022f01ea07212c200241093a00ac182002202c3b01a2182002201b3b01a018200241e0076a200110fb0420022f01e0070d0520022f01e207211b200241d8076a200110fb0420022f01d8070d0520022f01da07212c2002410a3a00ac182002202c3b01a6182002201b3b01a418200241d0076a200110fb0420022f01d0070d0520022f01d207211b200241c8076a200110fb0420022f01c8070d05200220022f01ca073b01aa182002201b3b01a8182002410b3a00ac18200241c0186a41086a20024180186a41086a2903002209370300200241c0186a41106a20024180186a41106a2903002211370300200241c0186a41186a20024180186a41186a2903002226370300200241c0186a41206a20024180186a41206a2903002229370300200241c0186a41286a20022802a818221b3602002002200229038018222e3703c018200241c0176a41286a222c201b360200200241c0176a41206a222f2029370300200241c0176a41186a22302026370300200241c0176a41106a22312011370300200241c0176a41086a223220093703002002202e3703c017200241c0076a200110fb0420022f01c0070d0620022f01c207213320024180176a41286a202c280200221b36020020024180176a41206a202f2903002209370300200241c0166a41086a20322903002211370300200241c0166a41106a20312903002226370300200241c0166a41186a20302903002229370300200241c0166a41206a2009370300200241c0166a41286a201b360200200220022903c017222e3703c01620024180166a41286a222f201b36020020024180166a41206a2230200937030020024180166a41186a2231202937030020024180166a41106a2232202637030020024180166a41086a223420113703002002202e3703801602402007422088a7222c2007a7470d00202c41016a221b202c490d31202c4101742235201b201b2035491b221b4104201b41044b1bad42347e2207422088a745410274211b2007a7213502400240202c0d0020024100360280180c010b20024104360288182002202b360280182002202c41346c360284180b200241c0186a2035201b20024180186a107d20022802c818211b20022802c0184101460d0320022802c418212b201b41346ead21070b202b202c41346c6a221b202d360200201b200229038016370204201b410c6a2034290300370200201b41146a2032290300370200201b411c6a2031290300370200201b41246a2030290300370200201b412c6a202f280200360200201b20333b0130200742ffffffff0f83202c41016aad4220868421072028417f6a22280d000b2001280204212c0b2001202c417f6a360204202b450d052007422088a741346c221b0d01202b211b0c020b201b450d2d0c2c0b202b201b6a2128202b211b0340201b41346a221b2028470d000b0b2007a72128200241b8076a200110ad01201b202b6b41346d212d0240024020022802b8070d0020022802bc07222c200128020028020441386e221b201b202c4b1bad42387e2207422088a70d2d2007a7221b417f4c0d2d02400240201b0d004104212f0c010b201b102c222f450d2d0b2001200128020441016a2230360204201b41386ead21070240203020012802084b0d0002400240024002400240202c450d000340200241b0076a200110ad0120022802b0070d0620022802b4072131200241003a00b018200241a8076a200110fb0420022f01a8070d0620022f01aa07211b200241a0076a200110fb0420022f01a0070d0620022f01a2072130200241013a00b018200220303b0182182002201b3b01801820024198076a200110fb0420022f0198070d0520022f019a07211b20024190076a200110fb0420022f0190070d0520022f0192072130200241023a00b018200220303b0186182002201b3b01841820024188076a200110fb0420022f0188070d0520022f018a07211b20024180076a200110fb0420022f0180070d0520022f0182072130200241033a00b018200220303b018a182002201b3b018818200241f8066a200110fb0420022f01f8060d0520022f01fa06211b200241f0066a200110fb0420022f01f0060d0520022f01f2062130200241043a00b018200220303b018e182002201b3b018c18200241e8066a200110fb0420022f01e8060d0520022f01ea06211b200241e0066a200110fb0420022f01e0060d0520022f01e2062130200241053a00b018200220303b0192182002201b3b019018200241d8066a200110fb0420022f01d8060d0520022f01da06211b200241d0066a200110fb0420022f01d0060d0520022f01d2062130200241063a00b018200220303b0196182002201b3b019418200241c8066a200110fb0420022f01c8060d0520022f01ca06211b200241c0066a200110fb0420022f01c0060d0520022f01c2062130200241073a00b018200220303b019a182002201b3b019818200241b8066a200110fb0420022f01b8060d0520022f01ba06211b200241b0066a200110fb0420022f01b0060d0520022f01b2062130200241083a00b018200220303b019e182002201b3b019c18200241a8066a200110fb0420022f01a8060d0520022f01aa06211b200241a0066a200110fb0420022f01a0060d0520022f01a2062130200241093a00b018200220303b01a2182002201b3b01a01820024198066a200110fb0420022f0198060d0520022f019a06211b20024190066a200110fb0420022f0190060d0520022f01920621302002410a3a00b018200220303b01a6182002201b3b01a41820024188066a200110fb0420022f0188060d0520022f018a06211b20024180066a200110fb0420022f0180060d0520022f01820621302002410b3a00b018200220303b01aa182002201b3b01a818200241f8056a200110fb0420022f01f8050d0520022f01fa05211b200241f0056a200110fb0420022f01f0050d05200220022f01f2053b01ae182002201b3b01ac182002410c3a00b018200241c0186a41086a20024180186a41086a2903002209370300200241c0186a41106a20024180186a41106a2903002211370300200241c0186a41186a20024180186a41186a2903002226370300200241c0186a41206a20024180186a41206a2903002229370300200241c0186a41286a20024180186a41286a290300222e370300200220022903801822363703c018200241c0176a41286a221b202e370300200241c0176a41206a22302029370300200241c0176a41186a22322026370300200241c0176a41106a22332011370300200241c0176a41086a22342009370300200220363703c017200241e8056a200110fb0420022f01e8050d0620022f01ea05213520024180176a41286a201b290300220937030020024180176a41206a20302903002211370300200241c0166a41086a20342903002226370300200241c0166a41106a20332903002229370300200241c0166a41186a2032290300222e370300200241c0166a41206a2011370300200241c0166a41286a2009370300200220022903c01722363703c01620024180166a41286a2232200937030020024180166a41206a2233201137030020024180166a41186a2234202e37030020024180166a41106a2237202937030020024180166a41086a22382026370300200220363703801602402007422088a722302007a7470d00203041016a221b2030490d3520304101742239201b201b2039491b221b4104201b41044b1bad42387e2207422088a745410274211b2007a721390240024020300d0020024100360280180c010b20024104360288182002202f360280182002203041386c360284180b200241c0186a2039201b20024180186a107d20022802c818211b20022802c0184101460d0320022802c418212f201b41386ead21070b202f203041386c6a221b2031360200201b200229038016370204201b410c6a2038290300370200201b41146a2037290300370200201b411c6a2034290300370200201b41246a2033290300370200201b412c6a2032290300370200201b20353b0134200742ffffffff0f83203041016aad422086842107202c417f6a222c0d000b200128020421300b20012030417f6a360204202f450d052007422088a741386c221b0d01202f211b0c020b201b450d310c300b202f201b6a212c202f211b0340201b41386a221b202c470d000b0b2007a7212c200241e0056a200110ad01201b202f6b41386d21310240024020022802e0050d0020022802e40522302001280200280204413c6e221b201b20304b1bad423c7e2207422088a70d312007a7221b417f4c0d3102400240201b0d00410421320c010b201b102c2232450d310b2001200128020441016a2233360204201b413c6ead21070240203320012802084b0d00024002400240024002402030450d000340200241d8056a200110ad0120022802d8050d0620022802dc052134200241003a00b418200241d0056a200110fb0420022f01d0050d0620022f01d205211b200241c8056a200110fb0420022f01c8050d0620022f01ca052133200241013a00b418200220333b0182182002201b3b018018200241c0056a200110fb0420022f01c0050d0520022f01c205211b200241b8056a200110fb0420022f01b8050d0520022f01ba052133200241023a00b418200220333b0186182002201b3b018418200241b0056a200110fb0420022f01b0050d0520022f01b205211b200241a8056a200110fb0420022f01a8050d0520022f01aa052133200241033a00b418200220333b018a182002201b3b018818200241a0056a200110fb0420022f01a0050d0520022f01a205211b20024198056a200110fb0420022f0198050d0520022f019a052133200241043a00b418200220333b018e182002201b3b018c1820024190056a200110fb0420022f0190050d0520022f019205211b20024188056a200110fb0420022f0188050d0520022f018a052133200241053a00b418200220333b0192182002201b3b01901820024180056a200110fb0420022f0180050d0520022f018205211b200241f8046a200110fb0420022f01f8040d0520022f01fa042133200241063a00b418200220333b0196182002201b3b019418200241f0046a200110fb0420022f01f0040d0520022f01f204211b200241e8046a200110fb0420022f01e8040d0520022f01ea042133200241073a00b418200220333b019a182002201b3b019818200241e0046a200110fb0420022f01e0040d0520022f01e204211b200241d8046a200110fb0420022f01d8040d0520022f01da042133200241083a00b418200220333b019e182002201b3b019c18200241d0046a200110fb0420022f01d0040d0520022f01d204211b200241c8046a200110fb0420022f01c8040d0520022f01ca042133200241093a00b418200220333b01a2182002201b3b01a018200241c0046a200110fb0420022f01c0040d0520022f01c204211b200241b8046a200110fb0420022f01b8040d0520022f01ba0421332002410a3a00b418200220333b01a6182002201b3b01a418200241b0046a200110fb0420022f01b0040d0520022f01b204211b200241a8046a200110fb0420022f01a8040d0520022f01aa0421332002410b3a00b418200220333b01aa182002201b3b01a818200241a0046a200110fb0420022f01a0040d0520022f01a204211b20024198046a200110fb0420022f0198040d0520022f019a0421332002410c3a00b418200220333b01ae182002201b3b01ac1820024190046a200110fb0420022f0190040d0520022f019204211b20024188046a200110fb0420022f0188040d05200220022f018a043b01b2182002201b3b01b0182002410d3a00b418200241c0186a41086a223a20024180186a41086a290300370300200241c0186a41106a223920024180186a41106a290300370300200241c0186a41186a223820024180186a41186a290300370300200241c0186a41206a223720024180186a41206a290300370300200241c0186a41286a223520024180186a41286a290300370300200241c0186a41306a223320022802b01836020020022002290380183703c018200241c0176a41306a221b2033280200360200200241c0176a41286a22332035290300370300200241c0176a41206a22352037290300370300200241c0176a41186a22372038290300370300200241c0176a41106a22382039290300370300200241c0176a41086a2239203a290300370300200220022903c0183703c01720024180046a200110fb0420022f0180040d0620022f018204213a20024180176a41306a201b280200221b36020020024180176a41286a2033290300220937030020024180176a41206a20352903002211370300200241c0166a41086a22332039290300370300200241c0166a41106a22352038290300370300200241c0166a41186a22382037290300370300200241c0166a41206a22372011370300200241c0166a41286a22392009370300200241c0166a41306a223b201b360200200220022903c0173703c01620024180166a41306a223c203b28020036020020024180166a41286a223b203929030037030020024180166a41206a2239203729030037030020024180166a41186a2237203829030037030020024180166a41106a2238203529030037030020024180166a41086a22352033290300370300200220022903c0163703801602402007422088a722332007a7470d00203341016a221b2033490d392033410174223d201b201b203d491b221b4104201b41044b1bad423c7e2207422088a745410274211b2007a7213d0240024020330d0020024100360280180c010b2002410436028818200220323602801820022033413c6c360284180b200241c0186a203d201b20024180186a107d20022802c818211b20022802c0184101460d0320022802c4182132201b413c6ead21070b20322033413c6c6a221b2034360200201b200229038016370204201b410c6a2035290300370200201b41146a2038290300370200201b411c6a2037290300370200201b41246a2039290300370200201b412c6a203b290300370200201b41346a203c280200360200201b203a3b0138200742ffffffff0f83203341016aad4220868421072030417f6a22300d000b200128020421330b20012033417f6a3602042032450d052007422088a7413c6c221b0d012032211b0c020b201b450d350c340b2032201b6a21302032211b0340201b413c6a221b2030470d000b0b2007a72133200241f8036a200110ad01201b20326b413c6d21370240024020022802f8030d0020022802fc0322302001280200280204410676221b201b20304b1b221b4106742234417f4c0d3502400240201b0d00410421340c010b2034102c2234450d350b2001200128020441016a2235360204201bad21070240203520012802084b0d00024002400240024002402030450d000340200241f0036a200110ad0120022802f0030d0620022802f4032138200241003a00b818200241e8036a200110fb0420022f01e8030d0620022f01ea03211b200241e0036a200110fb0420022f01e0030d0620022f01e2032135200241013a00b818200220353b0182182002201b3b018018200241d8036a200110fb0420022f01d8030d0520022f01da03211b200241d0036a200110fb0420022f01d0030d0520022f01d2032135200241023a00b818200220353b0186182002201b3b018418200241c8036a200110fb0420022f01c8030d0520022f01ca03211b200241c0036a200110fb0420022f01c0030d0520022f01c2032135200241033a00b818200220353b018a182002201b3b018818200241b8036a200110fb0420022f01b8030d0520022f01ba03211b200241b0036a200110fb0420022f01b0030d0520022f01b2032135200241043a00b818200220353b018e182002201b3b018c18200241a8036a200110fb0420022f01a8030d0520022f01aa03211b200241a0036a200110fb0420022f01a0030d0520022f01a2032135200241053a00b818200220353b0192182002201b3b01901820024198036a200110fb0420022f0198030d0520022f019a03211b20024190036a200110fb0420022f0190030d0520022f0192032135200241063a00b818200220353b0196182002201b3b01941820024188036a200110fb0420022f0188030d0520022f018a03211b20024180036a200110fb0420022f0180030d0520022f0182032135200241073a00b818200220353b019a182002201b3b019818200241f8026a200110fb0420022f01f8020d0520022f01fa02211b200241f0026a200110fb0420022f01f0020d0520022f01f2022135200241083a00b818200220353b019e182002201b3b019c18200241e8026a200110fb0420022f01e8020d0520022f01ea02211b200241e0026a200110fb0420022f01e0020d0520022f01e2022135200241093a00b818200220353b01a2182002201b3b01a018200241d8026a200110fb0420022f01d8020d0520022f01da02211b200241d0026a200110fb0420022f01d0020d0520022f01d20221352002410a3a00b818200220353b01a6182002201b3b01a418200241c8026a200110fb0420022f01c8020d0520022f01ca02211b200241c0026a200110fb0420022f01c0020d0520022f01c20221352002410b3a00b818200220353b01aa182002201b3b01a818200241b8026a200110fb0420022f01b8020d0520022f01ba02211b200241b0026a200110fb0420022f01b0020d0520022f01b20221352002410c3a00b818200220353b01ae182002201b3b01ac18200241a8026a200110fb0420022f01a8020d0520022f01aa02211b200241a0026a200110fb0420022f01a0020d0520022f01a20221352002410d3a00b818200220353b01b2182002201b3b01b01820024198026a200110fb0420022f0198020d0520022f019a02211b20024190026a200110fb0420022f0190020d05200220022f0192023b01b6182002201b3b01b4182002410e3a00b818200241c0186a41086a223d20024180186a41086a290300370300200241c0186a41106a223c20024180186a41106a290300370300200241c0186a41186a223b20024180186a41186a290300370300200241c0186a41206a223a20024180186a41206a290300370300200241c0186a41286a223920024180186a41286a290300370300200241c0186a41306a223520024180186a41306a29030037030020022002290380183703c018200241c0176a41306a221b2035290300370300200241c0176a41286a22352039290300370300200241c0176a41206a2239203a290300370300200241c0176a41186a223a203b290300370300200241c0176a41106a223b203c290300370300200241c0176a41086a223c203d290300370300200220022903c0183703c01720024188026a200110fb0420022f0188020d0620022f018a02213d20024180176a41306a201b290300220937030020024180176a41286a2035290300221137030020024180176a41206a20392903002226370300200241c0166a41086a221b203c290300370300200241c0166a41106a2235203b290300370300200241c0166a41186a2239203a290300370300200241c0166a41206a223a2026370300200241c0166a41286a223b2011370300200241c0166a41306a223c2009370300200220022903c0173703c01620024180166a41306a223e203c29030037030020024180166a41286a223c203b29030037030020024180166a41206a223b203a29030037030020024180166a41186a223a203929030037030020024180166a41106a2239203529030037030020024180166a41086a223f201b290300370300200220022903c01637038016024020074220882209a722352007a7470d00203541016a221b2035490d3d20354101742240201b201b2040491b221b4104201b41044b1b221b41ffffff1f71201b464102742140201b410674211b0240024020350d0020024100360280180c010b20024104360288182002203436028018200220094206863e0284180b200241c0186a201b204020024180186a107d20022802c818211b20022802c0184101460d0320022802c4182134201b410676ad21070b203420354106746a221b2038360200201b200229038016370204201b410c6a203f290300370200201b41146a2039290300370200201b411c6a203a290300370200201b41246a203b290300370200201b412c6a203c290300370200201b41346a203e290300370200201b203d3b013c200742ffffffff0f83203541016aad4220868421072030417f6a22300d000b200128020421350b20012035417f6a3602042034450d052007422088a7410674221b0d012034211b0c020b201b450d390c380b2034201b6a21302034211b0340201b41c0006a221b2030470d000b0b2007a7213a20024180026a200110ad0102402002280280020d002002280284022239200128020028020441c4006e2230203020394b1bad42c4007e2207422088a70d382007a72235417f4c0d380240024020350d00410421300c010b2035102c2230450d380b2001200128020441016a2238360204203541c4006ead21070240203820012802084b0d00024002400240024002402039450d000340200241f8016a200110ad0120022802f8010d0620022802fc01213b200241003a00bc18200241f0016a200110fb0420022f01f0010d0620022f01f2012135200241e8016a200110fb0420022f01e8010d0620022f01ea012138200241013a00bc18200220383b018218200220353b018018200241e0016a200110fb0420022f01e0010d0520022f01e2012135200241d8016a200110fb0420022f01d8010d0520022f01da012138200241023a00bc18200220383b018618200220353b018418200241d0016a200110fb0420022f01d0010d0520022f01d2012135200241c8016a200110fb0420022f01c8010d0520022f01ca012138200241033a00bc18200220383b018a18200220353b018818200241c0016a200110fb0420022f01c0010d0520022f01c2012135200241b8016a200110fb0420022f01b8010d0520022f01ba012138200241043a00bc18200220383b018e18200220353b018c18200241b0016a200110fb0420022f01b0010d0520022f01b2012135200241a8016a200110fb0420022f01a8010d0520022f01aa012138200241053a00bc18200220383b019218200220353b019018200241a0016a200110fb0420022f01a0010d0520022f01a201213520024198016a200110fb0420022f0198010d0520022f019a012138200241063a00bc18200220383b019618200220353b01941820024190016a200110fb0420022f0190010d0520022f019201213520024188016a200110fb0420022f0188010d0520022f018a012138200241073a00bc18200220383b019a18200220353b01981820024180016a200110fb0420022f0180010d0520022f0182012135200241f8006a200110fb0420022f01780d0520022f017a2138200241083a00bc18200220383b019e18200220353b019c18200241f0006a200110fb0420022f01700d0520022f01722135200241e8006a200110fb0420022f01680d0520022f016a2138200241093a00bc18200220383b01a218200220353b01a018200241e0006a200110fb0420022f01600d0520022f01622135200241d8006a200110fb0420022f01580d0520022f015a21382002410a3a00bc18200220383b01a618200220353b01a418200241d0006a200110fb0420022f01500d0520022f01522135200241c8006a200110fb0420022f01480d0520022f014a21382002410b3a00bc18200220383b01aa18200220353b01a818200241c0006a200110fb0420022f01400d0520022f01422135200241386a200110fb0420022f01380d0520022f013a21382002410c3a00bc18200220383b01ae18200220353b01ac18200241306a200110fb0420022f01300d0520022f01322135200241286a200110fb0420022f01280d0520022f012a21382002410d3a00bc18200220383b01b218200220353b01b018200241206a200110fb0420022f01200d0520022f01222135200241186a200110fb0420022f01180d0520022f011a21382002410e3a00bc18200220383b01b618200220353b01b418200241106a200110fb0420022f01100d0520022f01122135200241086a200110fb0420022f01080d05200220022f010a3b01ba18200220353b01b8182002410f3a00bc18200241c0186a41086a223820024180186a41086a290300370300200241c0186a41106a223c20024180186a41106a290300370300200241c0186a41186a223d20024180186a41186a290300370300200241c0186a41206a223e20024180186a41206a290300370300200241c0186a41286a223f20024180186a41286a290300370300200241c0186a41306a224020024180186a41306a290300370300200241c0186a41386a224120022802b81836020020022002290380183703c018200241c0176a41086a22352038290300370300200241c0176a41106a2238203c290300370300200241c0176a41186a223c203d290300370300200241c0176a41206a223d203e290300370300200241c0176a41286a223e203f290300370300200241c0176a41306a223f2040290300370300200241c0176a41386a22402041280200360200200220022903c0183703c0172002200110fb0420022f01000d0620022f0102214120024180176a41386a2040280200224036020020024180176a41306a203f290300220937030020024180176a41286a203e290300221137030020024180176a41206a203d2903002226370300200241c0166a41086a223d2035290300370300200241c0166a41106a22352038290300370300200241c0166a41186a2238203c290300370300200241c0166a41206a223c2026370300200241c0166a41286a223e2011370300200241c0166a41306a223f2009370300200241c0166a41386a22422040360200200220022903c0173703c01620024180166a41386a2240204228020036020020024180166a41306a2242203f29030037030020024180166a41286a223f203e29030037030020024180166a41206a223e203c29030037030020024180166a41186a223c203829030037030020024180166a41106a2243203529030037030020024180166a41086a2244203d290300370300200220022903c0163703801602402007422088a722382007a7470d00203841016a22352038490d402038410174223d20352035203d491b22354104203541044b1bad42c4007e2207422088a74541027421352007a7213d0240024020380d0020024100360280180c010b200241043602881820022030360280182002203841c4006c360284180b200241c0186a203d203520024180186a107d20022802c818213520022802c0184101460d0320022802c4182130203541c4006ead21070b2030203841c4006c6a2235203b36020020352002290380163702042035410c6a2044290300370200203541146a20432903003702002035411c6a203c290300370200203541246a203e2903003702002035412c6a203f290300370200203541346a20422903003702002035413c6a2040280200360200203520413b0140200742ffffffff0f83203841016aad4220868421072039417f6a22390d000b200128020421380b20012038417f6a3602042030450d05200420056b41037521352003200c6b4104752103200b20196b410575210b201b20346b410675211b2007a721382007422088a741c4006c22040d01203021040c020b2035450d3c0c3b0b203020046a2101203021040340200441c4006a22042001470d000b0b2000200a36020420002005360200200041b8016a2038360200200041b4016a2030360200200041b0016a201b360200200041ac016a203a360200200041a8016a2034360200200041a4016a2037360200200041a0016a20333602002000419c016a203236020020004198016a203136020020004194016a202c36020020004190016a202f3602002000418c016a202d36020020004188016a202836020020004184016a202b36020020004180016a202a360200200041fc006a2024360200200041f8006a2027360200200041f4006a2025360200200041f0006a2021360200200041ec006a2023360200200041e8006a2022360200200041e4006a201e360200200041e0006a201f360200200041dc006a2020360200200041d8006a201c360200200041d4006a201d360200200041d0006a200b360200200041cc006a2016360200200041c8006a2019360200200041c4006a201a360200200041c0006a20143602002000413c6a2017360200200041386a2018360200200041346a2010360200200041306a20133602002000412c6a2015360200200041286a200e360200200041246a2012360200200041206a20033602002000411c6a200d360200200041186a200c360200200041146a200f360200200041106a20063602002000410c6a2008360200200041086a2035360200200041bc016a200420306b41c4006d3602000c380b200241003a00bc180b2007a72204450d00200441c4006c450d002030102e0b20004100360200203a41ffffff1f71450d032034102e0c030b200241003a00b8180b200742ffffff1f83500d002034102e0b200041003602000b2033450d032033413c6c450d032032102e0c030b200241003a00b4180b2007a72204450d002004413c6c450d002032102e0b200041003602000b202c450d03202c41386c450d03202f102e0c030b200241003a00b0180b2007a72204450d00200441386c450d00202f102e0b200041003602000b2028450d03202841346c450d03202b102e0c030b200241003a00ac180b2007a72204450d00200441346c450d00202b102e0b200041003602000b2024450d03202441306c450d032027102e0c030b200241003a00a8180b2007a72204450d00200441306c450d002027102e0b200041003602000b2021450d032021412c6c450d032023102e0c030b200241003a00a4180b2007a72204450d002004412c6c450d002023102e0b200041003602000b201e450d03201e41286c450d03201f102e0c030b200241003a00a0180b2007a72204450d00200441286c450d00201f102e0b200041003602000b201c450d03201c41246c450d03201d102e0c030b200241003a009c180b2007a72204450d00200441246c450d00201d102e0b200041003602000b201641ffffff3f71450d032019102e0c030b200241003a0098180b200742ffffff3f83500d002019102e0b200041003602000b2014450d032014411c6c450d032017102e0c030b200241003a0094180b2007a72204450d002004411c6c450d002017102e0b200041003602000b2010450d03201041186c450d032013102e0c030b200241003a0090180b2007a72204450d00200441186c450d002013102e0b200041003602000b200e450d03200e41146c450d032012102e0c030b200241003a008c180b2007a72204450d00200441146c450d002012102e0b200041003602000b200d41ffffffff0071450d03200c102e0c030b200241003a0088180b200742ffffffff0083500d00200c102e0b200041003602000b2006450d002006410c6c450d002008102e0b200a41ffffffff0171450d002005102e0b200241c0196a24000f0b1036000b1038000ba9b9010f057f017e027f017e067f017e147f017e027f017e047f017e077f017e0e7f230041c0196b22022400200241f8116a200110ab0102400240024002400240024020022802f8110d0020022802fc11220320012802044103762204200420034b1b22044103742205417f4c0d050240024020040d00410421060c010b2005102c2206450d050b2004ad21070240024002402003450d000340200241f0116a200110ab0120022802f0110d0320022802f4112108200241e8116a200110fc0420022f01e8110d0320022f01ea11210902402007422088220aa722052007a72204470d00200441016a22052004490d0a2004410174220b2005200b20054b1b22054104200541044b1b220541ffffffff0171200546410274210b200541037421050240024020040d0020024100360280180c010b2002410436028818200220063602801820022004410374360284180b200241c0186a2005200b20024180186a107d20022802c818210420022802c0184101460d0320022802c41821062007422088220aa721052004410376ad21070b200620054103746a220420093b010420042008360200200a422086200742ffffffff0f83844280808080107c21072003417f6a22030d000b0b2006450d022007422088a741037422040d03200621040c040b20040d050c060b200742ffffffff0183500d002006102e0b200041003602000c020b200620046a210520062104034020042004290200220a3e0200200441046a200a4220883d0100200441086a22042005470d000b0b2007a7210c200241e0116a200110ab01024002400240024020022802e0110d0020022802e41122032001280204410c6e2205200520034b1bad420c7e2207422088a70d062007a72205417f4c0d060240024020050d00410421080c010b2005102c2208450d060b2005410c6ead21070240024002402003450d000340200241d8116a200110ab0120022802d8110d0320022802dc11210b200241d0116a200110fc0420022f01d0110d0320022f01d211210d200241c8116a200110fc0420022f01c8110d0320022f01ca11210e200241c0116a200110fc0420022f01c0110d0320022f01c211210f02402007422088220aa722092007a72205470d00200541016a22092005490d0b200541017422102009201020094b1b22094104200941044b1bad420c7e220a422088a7454102742109200aa721100240024020050d0020024100360280180c010b2002410436028818200220083602801820022005410c6c360284180b200241c0186a2010200920024180186a107d20022802c818210520022802c0184101460d0320022802c41821082007422088220aa721092005410c6ead21070b20082009410c6c6a2205200f3b01082005200d3b01042005200b360200200541066a200e3b0100200a422086200742ffffffff0f83844280808080107c21072003417f6a22030d000b0b2008450d022007422088a7410c6c22050d03200821050c040b2005450d070c060b2007a72204450d002004410c6c450d002008102e0b200041003602000c020b200820056a21032008210503402005410c6a22052003470d000b0b2007a7210d200241b8116a200110ab01200520086b410c6d21100240024020022802b8110d004104210b20022802bc11220320012802044104762205200520034b1b22054104742209417f4c0d0502402005450d002009102c220b450d050b2005ad21070240024002400240024002402003450d000340200241b0116a200110ab0120022802b0110d0620022802b411210e200241003a008818200241a8116a200110fc0420022f01a8110d0620022f01aa112105200241a0116a200110fc0420022f01a0110d0620022f01a2112109200241013a008818200220093b018218200220053b01801820024198116a200110fc0420022f0198110d0520022f019a11210520024190116a200110fc0420022f0190110d05200220022f0192113b018618200220053b018418200229038018210a20024188116a200110fc0420022f0188110d0620022f018a11210f024020074220882211a722052007a7470d00200541016a22092005490d0d20054101742212200920092012491b22094104200941044b1b220941ffffffff00712009464102742112200941047421090240024020050d0020024100360280180c010b20024104360288182002200b36028018200220114204863e0284180b200241c0186a2009201220024180186a107d20022802c818210920022802c0184101460d0320022802c418210b2009410476ad21070b200b20054104746a2209200f3b010c2009200a3702042009200e360200200742ffffffff0f83200541016aad4220868421072003417f6a22030d000b0b200b450d052007422088a741047422050d01200b21050c020b2009450d090c080b200b20056a2103200b21050340200541106a22052003470d000b0b2007a7211220024180116a200110ab01024002402002280280110d00200228028411220e200128020441146e22032003200e4b1bad42147e2207422088a70d092007a72203417f4c0d090240024020030d004104210f0c010b2003102c220f450d090b200341146ead2107024002400240024002400240200e450d00200241c0186a41086a21130340200241f8106a200110ab0120022802f8100d0620022802fc102114200241003a008c18200241f0106a200110fc0420022f01f0100d0620022f01f2102103200241e8106a200110fc0420022f01e8100d0620022f01ea102109200241013a008c18200220093b018218200220033b018018200241e0106a200110fc0420022f01e0100d0520022f01e2102103200241d8106a200110fc0420022f01d8100d0520022f01da102109200241023a008c18200220093b018618200220033b018418200241d0106a200110fc0420022f01d0100d0520022f01d2102103200241c8106a200110fc0420022f01c8100d05200220022f01ca103b018a18200220033b018818201320022802881836020020022002290380183703c018200241c0106a200110fc0420022f01c0100d0620022f01c210211520024180176a41086a20132802002203360200200241c0166a41086a22162003360200200220022903c018220a370380172002200a3703c01602402007422088a722032007a7470d00200341016a22092003490d1120034101742217200920092017491b22094104200941044b1bad42147e2207422088a74541027421092007a721170240024020030d0020024100360280180c010b20024104360288182002200f360280182002200341146c360284180b200241c0186a2017200920024180186a107d20022802c818210920022802c0184101460d0320022802c418210f200941146ead21070b200f200341146c6a22092014360200200920022903c0163702042009410c6a2016280200360200200920153b0110200742ffffffff0f83200341016aad422086842107200e417f6a220e0d000b0b200f450d052007422088a741146c22030d01200f21030c020b2009450d0d0c0c0b200f20036a2109200f21030340200341146a22032009470d000b0b2007a72109200241b8106a200110ab012003200f6b41146d21180240024020022802b8100d0020022802bc102213200128020441186e2203200320134b1bad42187e2207422088a70d0d2007a72203417f4c0d0d0240024020030d00410421140c010b2003102c2214450d0d0b200341186ead21070240024002400240024002402013450d000340200241b0106a200110ab0120022802b0100d0620022802b4102115200241003a009018200241a8106a200110fc0420022f01a8100d0620022f01aa102103200241a0106a200110fc0420022f01a0100d0620022f01a210210e200241013a0090182002200e3b018218200220033b01801820024198106a200110fc0420022f0198100d0520022f019a10210320024190106a200110fc0420022f0190100d0520022f019210210e200241023a0090182002200e3b018618200220033b01841820024188106a200110fc0420022f0188100d0520022f018a10210320024180106a200110fc0420022f0180100d0520022f018210210e200241033a0090182002200e3b018a18200220033b018818200241f80f6a200110fc0420022f01f80f0d0520022f01fa0f2103200241f00f6a200110fc0420022f01f00f0d05200220022f01f20f3b018e18200220033b018c18200241c0186a41086a220320024180186a41086a29030037030020022002290380183703c018200241e80f6a200110fc0420022f01e80f0d0620022f01ea0f211620024180176a41086a2003290300220a370300200241c0166a41086a2217200a370300200220022903c018220a370380172002200a3703c01602402007422088a722032007a7470d00200341016a220e2003490d1520034101742219200e200e2019491b220e4104200e41044b1bad42187e2207422088a745410274210e2007a721190240024020030d0020024100360280180c010b200241043602881820022014360280182002200341186c360284180b200241c0186a2019200e20024180186a107d20022802c818210e20022802c0184101460d0320022802c4182114200e41186ead21070b2014200341186c6a220e2015360200200e20022903c016370204200e410c6a2017290300370200200e20163b0114200742ffffffff0f83200341016aad4220868421072013417f6a22130d000b0b2014450d052007422088a741186c22030d01201421030c020b200e450d110c100b201420036a210e201421030340200341186a2203200e470d000b0b2007a7210e200241e00f6a200110ab01200320146b41186d211a0240024020022802e00f0d0020022802e40f22152001280204411c6e2203200320154b1bad421c7e2207422088a70d112007a72203417f4c0d110240024020030d00410421160c010b2003102c2216450d110b2003411c6ead21070240024002400240024002402015450d00200241c0186a41106a21170340200241d80f6a200110ab0120022802d80f0d0620022802dc0f2119200241003a009418200241d00f6a200110fc0420022f01d00f0d0620022f01d20f2103200241c80f6a200110fc0420022f01c80f0d0620022f01ca0f2113200241013a009418200220133b018218200220033b018018200241c00f6a200110fc0420022f01c00f0d0520022f01c20f2103200241b80f6a200110fc0420022f01b80f0d0520022f01ba0f2113200241023a009418200220133b018618200220033b018418200241b00f6a200110fc0420022f01b00f0d0520022f01b20f2103200241a80f6a200110fc0420022f01a80f0d0520022f01aa0f2113200241033a009418200220133b018a18200220033b018818200241a00f6a200110fc0420022f01a00f0d0520022f01a20f2103200241980f6a200110fc0420022f01980f0d0520022f019a0f2113200241043a009418200220133b018e18200220033b018c18200241900f6a200110fc0420022f01900f0d0520022f01920f2103200241880f6a200110fc0420022f01880f0d0520022f018a0f2113200241c0186a41086a221b20024180186a41086a290300370300200220133b019218200220033b0190182017200228029018360200200241053a00941820022002290380183703c018200241800f6a200110fc0420022f01800f0d0620022f01820f211c20024180176a41086a201b290300220a37030020024180176a41106a20172802002203360200200241c0166a41086a221b200a370300200241c0166a41106a221d2003360200200220022903c018220a370380172002200a3703c01602402007422088a722032007a7470d00200341016a22132003490d192003410174221e20132013201e491b22134104201341044b1bad421c7e2207422088a74541027421132007a7211e0240024020030d0020024100360280180c010b2002410436028818200220163602801820022003411c6c360284180b200241c0186a201e201320024180186a107d20022802c818211320022802c0184101460d0320022802c41821162013411c6ead21070b20162003411c6c6a22132019360200201320022903c0163702042013410c6a201b290300370200201341146a201d2802003602002013201c3b0118200742ffffffff0f83200341016aad4220868421072015417f6a22150d000b0b2016450d052007422088a7411c6c22030d01201621030c020b2013450d150c140b201620036a21132016210303402003411c6a22032013470d000b0b2007a72113200241f80e6a200110ab01200320166b411c6d211b0240024020022802f80e0d0020022802fc0e221720012802044105762203200320174b1b22034105742215417f4c0d150240024020030d00410421190c010b2015102c2219450d150b2003ad21070240024002400240024002402017450d000340200241f00e6a200110ab0120022802f00e0d0620022802f40e211c200241003a009818200241e80e6a200110fc0420022f01e80e0d0620022f01ea0e2103200241e00e6a200110fc0420022f01e00e0d0620022f01e20e2115200241013a009818200220153b018218200220033b018018200241d80e6a200110fc0420022f01d80e0d0520022f01da0e2103200241d00e6a200110fc0420022f01d00e0d0520022f01d20e2115200241023a009818200220153b018618200220033b018418200241c80e6a200110fc0420022f01c80e0d0520022f01ca0e2103200241c00e6a200110fc0420022f01c00e0d0520022f01c20e2115200241033a009818200220153b018a18200220033b018818200241b80e6a200110fc0420022f01b80e0d0520022f01ba0e2103200241b00e6a200110fc0420022f01b00e0d0520022f01b20e2115200241043a009818200220153b018e18200220033b018c18200241a80e6a200110fc0420022f01a80e0d0520022f01aa0e2103200241a00e6a200110fc0420022f01a00e0d0520022f01a20e2115200241053a009818200220153b019218200220033b019018200241980e6a200110fc0420022f01980e0d0520022f019a0e2103200241900e6a200110fc0420022f01900e0d0520022f01920e2115200241c0186a41086a221d20024180186a41086a290300370300200220153b019618200220033b019418200241c0186a41106a220320024180186a41106a290300370300200241063a00981820022002290380183703c018200241880e6a200110fc0420022f01880e0d0620022f018a0e211e20024180176a41086a201d290300220a37030020024180176a41106a20032903002211370300200241c0166a41086a221d200a370300200241c0166a41106a221f2011370300200220022903c018220a370380172002200a3703c01602402007422088220aa722152007a7470d00201541016a22032015490d1d20154101742220200320032020491b22034104200341044b1b220341ffffff3f712003464102742120200341057421030240024020150d0020024100360280180c010b200241043602881820022019360280182002200a4205863e0284180b200241c0186a2003202020024180186a107d20022802c818210320022802c0184101460d0320022802c41821192003410576ad21070b201920154105746a2203201c360200200320022903c0163702042003410c6a201d290300370200200341146a201f2903003702002003201e3b011c200742ffffffff0f83201541016aad4220868421072017417f6a22170d000b0b2019450d052007422088a741057422030d01201921030c020b2003450d190c180b201920036a2115201921030340200341206a22032015470d000b0b2007a72117200241800e6a200110ab010240024020022802800e0d0020022802840e221c200128020441246e22152015201c4b1bad42247e2207422088a70d192007a72215417f4c0d190240024020150d004104211e0c010b2015102c221e450d190b201541246ead2107024002400240024002400240201c450d00200241c0176a41186a211f0340200241f80d6a200110ab0120022802f80d0d0620022802fc0d2120200241003a009c18200241f00d6a200110fc0420022f01f00d0d0620022f01f20d2115200241e80d6a200110fc0420022f01e80d0d0620022f01ea0d211d200241013a009c182002201d3b018218200220153b018018200241e00d6a200110fc0420022f01e00d0d0520022f01e20d2115200241d80d6a200110fc0420022f01d80d0d0520022f01da0d211d200241023a009c182002201d3b018618200220153b018418200241d00d6a200110fc0420022f01d00d0d0520022f01d20d2115200241c80d6a200110fc0420022f01c80d0d0520022f01ca0d211d200241033a009c182002201d3b018a18200220153b018818200241c00d6a200110fc0420022f01c00d0d0520022f01c20d2115200241b80d6a200110fc0420022f01b80d0d0520022f01ba0d211d200241043a009c182002201d3b018e18200220153b018c18200241b00d6a200110fc0420022f01b00d0d0520022f01b20d2115200241a80d6a200110fc0420022f01a80d0d0520022f01aa0d211d200241053a009c182002201d3b019218200220153b019018200241a00d6a200110fc0420022f01a00d0d0520022f01a20d2115200241980d6a200110fc0420022f01980d0d0520022f019a0d211d200241063a009c182002201d3b019618200220153b019418200241900d6a200110fc0420022f01900d0d0520022f01920d2115200241880d6a200110fc0420022f01880d0d0520022f018a0d211d200241c0176a41106a222120024180186a41106a290300370300200241c0176a41086a222220024180186a41086a2903003703002002201d3b019a18200220153b019818201f200228029818360200200241073a009c182002200229038018220a3703c0182002200a3703c017200241800d6a200110fc0420022f01800d0d0620022f01820d2123200241c0166a41086a2022290300220a370300200241c0166a41106a20212903002211370300200241c0166a41186a201f280200221536020020024180166a41086a2221200a37030020024180166a41106a2222201137030020024180166a41186a22242015360200200220022903c017220a3703c0162002200a3703801602402007422088a7221d2007a7470d00201d41016a2215201d490d21201d4101742225201520152025491b22154104201541044b1bad42247e2207422088a74541027421152007a7212502400240201d0d0020024100360280180c010b20024104360288182002201e360280182002201d41246c360284180b200241c0186a2025201520024180186a107d20022802c818211520022802c0184101460d0320022802c418211e201541246ead21070b201e201d41246c6a2215202036020020152002290380163702042015410c6a2021290300370200201541146a20222903003702002015411c6a2024280200360200201520233b0120200742ffffffff0f83201d41016aad422086842107201c417f6a221c0d000b0b201e450d052007422088a741246c22150d01201e21150c020b2015450d1d0c1c0b201e20156a211c201e21150340201541246a2215201c470d000b0b2007a7211c200241f80c6a200110ab012015201e6b41246d21210240024020022802f80c0d0020022802fc0c221d200128020441286e22152015201d4b1bad42287e2207422088a70d1d2007a72215417f4c0d1d0240024020150d00410421200c010b2015102c2220450d1d0b201541286ead2107024002400240024002400240201d450d000340200241f00c6a200110ab0120022802f00c0d0620022802f40c2122200241003a00a018200241e80c6a200110fc0420022f01e80c0d0620022f01ea0c2115200241e00c6a200110fc0420022f01e00c0d0620022f01e20c211f200241013a00a0182002201f3b018218200220153b018018200241d80c6a200110fc0420022f01d80c0d0520022f01da0c2115200241d00c6a200110fc0420022f01d00c0d0520022f01d20c211f200241023a00a0182002201f3b018618200220153b018418200241c80c6a200110fc0420022f01c80c0d0520022f01ca0c2115200241c00c6a200110fc0420022f01c00c0d0520022f01c20c211f200241033a00a0182002201f3b018a18200220153b018818200241b80c6a200110fc0420022f01b80c0d0520022f01ba0c2115200241b00c6a200110fc0420022f01b00c0d0520022f01b20c211f200241043a00a0182002201f3b018e18200220153b018c18200241a80c6a200110fc0420022f01a80c0d0520022f01aa0c2115200241a00c6a200110fc0420022f01a00c0d0520022f01a20c211f200241053a00a0182002201f3b019218200220153b019018200241980c6a200110fc0420022f01980c0d0520022f019a0c2115200241900c6a200110fc0420022f01900c0d0520022f01920c211f200241063a00a0182002201f3b019618200220153b019418200241880c6a200110fc0420022f01880c0d0520022f018a0c2115200241800c6a200110fc0420022f01800c0d0520022f01820c211f200241073a00a0182002201f3b019a18200220153b019818200241f80b6a200110fc0420022f01f80b0d0520022f01fa0b2115200241f00b6a200110fc0420022f01f00b0d0520022f01f20b211f200241c0176a41106a222320024180186a41106a2903003703002002201f3b019e18200220153b019c18200241c0176a41186a221520024180186a41186a290300370300200241083a00a018200241c0176a41086a221f20024180186a41086a2903003703002002200229038018220a3703c0182002200a3703c017200241e80b6a200110fc0420022f01e80b0d0620022f01ea0b2124200241c0166a41086a201f290300220a370300200241c0166a41106a20232903002211370300200241c0166a41186a2015290300222637030020024180166a41086a2223200a37030020024180166a41106a2225201137030020024180166a41186a22272026370300200220022903c017220a3703c0162002200a3703801602402007422088a7221f2007a7470d00201f41016a2215201f490d25201f4101742228201520152028491b22154104201541044b1bad42287e2207422088a74541027421152007a7212802400240201f0d0020024100360280180c010b200241043602881820022020360280182002201f41286c360284180b200241c0186a2028201520024180186a107d20022802c818211520022802c0184101460d0320022802c4182120201541286ead21070b2020201f41286c6a2215202236020020152002290380163702042015410c6a2023290300370200201541146a20252903003702002015411c6a2027290300370200201520243b0124200742ffffffff0f83201f41016aad422086842107201d417f6a221d0d000b0b2020450d052007422088a741286c22150d01202021150c020b2015450d210c200b202020156a211d202021150340201541286a2215201d470d000b0b2007a7211d200241e00b6a200110ab01201520206b41286d21240240024020022802e00b0d0020022802e40b221f2001280204412c6e22152015201f4b1bad422c7e2207422088a70d212007a72215417f4c0d210240024020150d00410421220c010b2015102c2222450d210b2015412c6ead2107024002400240024002400240201f450d000340200241d80b6a200110ab0120022802d80b0d0620022802dc0b2125200241003a00a418200241d00b6a200110fc0420022f01d00b0d0620022f01d20b2115200241c80b6a200110fc0420022f01c80b0d0620022f01ca0b2123200241013a00a418200220233b018218200220153b018018200241c00b6a200110fc0420022f01c00b0d0520022f01c20b2115200241b80b6a200110fc0420022f01b80b0d0520022f01ba0b2123200241023a00a418200220233b018618200220153b018418200241b00b6a200110fc0420022f01b00b0d0520022f01b20b2115200241a80b6a200110fc0420022f01a80b0d0520022f01aa0b2123200241033a00a418200220233b018a18200220153b018818200241a00b6a200110fc0420022f01a00b0d0520022f01a20b2115200241980b6a200110fc0420022f01980b0d0520022f019a0b2123200241043a00a418200220233b018e18200220153b018c18200241900b6a200110fc0420022f01900b0d0520022f01920b2115200241880b6a200110fc0420022f01880b0d0520022f018a0b2123200241053a00a418200220233b019218200220153b019018200241800b6a200110fc0420022f01800b0d0520022f01820b2115200241f80a6a200110fc0420022f01f80a0d0520022f01fa0a2123200241063a00a418200220233b019618200220153b019418200241f00a6a200110fc0420022f01f00a0d0520022f01f20a2115200241e80a6a200110fc0420022f01e80a0d0520022f01ea0a2123200241073a00a418200220233b019a18200220153b019818200241e00a6a200110fc0420022f01e00a0d0520022f01e20a2115200241d80a6a200110fc0420022f01d80a0d0520022f01da0a2123200241083a00a418200220233b019e18200220153b019c18200241d00a6a200110fc0420022f01d00a0d0520022f01d20a2115200241c80a6a200110fc0420022f01c80a0d05200220022f01ca0a3b01a218200220153b01a018200241093a00a418200241c0186a41086a20024180186a41086a290300220a370300200241c0186a41106a20024180186a41106a2903002211370300200241c0186a41186a20024180186a41186a2903002226370300200241c0186a41206a20022802a0182215360200200220022903801822293703c018200241c0176a41206a22232015360200200241c0176a41186a22272026370300200241c0176a41106a22282011370300200241c0176a41086a222a200a370300200220293703c017200241c00a6a200110fc0420022f01c00a0d0620022f01c20a212b20024180176a41206a20232802002215360200200241c0166a41086a202a290300220a370300200241c0166a41106a20282903002211370300200241c0166a41186a20272903002226370300200241c0166a41206a201536020020024180166a41086a2227200a37030020024180166a41106a2228201137030020024180166a41186a222a202637030020024180166a41206a222c2015360200200220022903c017220a3703c0162002200a3703801602402007422088a722232007a7470d00202341016a22152023490d292023410174222d20152015202d491b22154104201541044b1bad422c7e2207422088a74541027421152007a7212d0240024020230d0020024100360280180c010b2002410436028818200220223602801820022023412c6c360284180b200241c0186a202d201520024180186a107d20022802c818211520022802c0184101460d0320022802c41821222015412c6ead21070b20222023412c6c6a2215202536020020152002290380163702042015410c6a2027290300370200201541146a20282903003702002015411c6a202a290300370200201541246a202c2802003602002015202b3b0128200742ffffffff0f83202341016aad422086842107201f417f6a221f0d000b0b2022450d052007422088a7412c6c22150d01202221150c020b2015450d250c240b202220156a211f2022211503402015412c6a2215201f470d000b0b2007a7211f200241b80a6a200110ab01201520226b412c6d21280240024020022802b80a0d0020022802bc0a2215200128020441306e2223202320154b1bad42307e2207422088a70d252007a72223417f4c0d250240024020230d00410421250c010b2023102c2225450d250b202341306ead21070240024002400240024002402015450d000340200241b00a6a200110ab0120022802b00a0d0620022802b40a212a200241003a00a818200241a80a6a200110fc0420022f01a80a0d0620022f01aa0a2123200241a00a6a200110fc0420022f01a00a0d0620022f01a20a2127200241013a00a818200220273b018218200220233b018018200241980a6a200110fc0420022f01980a0d0520022f019a0a2123200241900a6a200110fc0420022f01900a0d0520022f01920a2127200241023a00a818200220273b018618200220233b018418200241880a6a200110fc0420022f01880a0d0520022f018a0a2123200241800a6a200110fc0420022f01800a0d0520022f01820a2127200241033a00a818200220273b018a18200220233b018818200241f8096a200110fc0420022f01f8090d0520022f01fa092123200241f0096a200110fc0420022f01f0090d0520022f01f2092127200241043a00a818200220273b018e18200220233b018c18200241e8096a200110fc0420022f01e8090d0520022f01ea092123200241e0096a200110fc0420022f01e0090d0520022f01e2092127200241053a00a818200220273b019218200220233b019018200241d8096a200110fc0420022f01d8090d0520022f01da092123200241d0096a200110fc0420022f01d0090d0520022f01d2092127200241063a00a818200220273b019618200220233b019418200241c8096a200110fc0420022f01c8090d0520022f01ca092123200241c0096a200110fc0420022f01c0090d0520022f01c2092127200241073a00a818200220273b019a18200220233b019818200241b8096a200110fc0420022f01b8090d0520022f01ba092123200241b0096a200110fc0420022f01b0090d0520022f01b2092127200241083a00a818200220273b019e18200220233b019c18200241a8096a200110fc0420022f01a8090d0520022f01aa092123200241a0096a200110fc0420022f01a0090d0520022f01a2092127200241093a00a818200220273b01a218200220233b01a01820024198096a200110fc0420022f0198090d0520022f019a09212320024190096a200110fc0420022f0190090d05200220022f0192093b01a618200220233b01a4182002410a3a00a818200241c0186a41086a20024180186a41086a290300220a370300200241c0186a41106a20024180186a41106a2903002211370300200241c0186a41186a20024180186a41186a2903002226370300200241c0186a41206a20024180186a41206a29030022293703002002200229038018222e3703c018200241c0176a41206a22232029370300200241c0176a41186a22272026370300200241c0176a41106a222b2011370300200241c0176a41086a222c200a3703002002202e3703c01720024188096a200110fc0420022f0188090d0620022f018a09212d20024180176a41206a2023290300220a370300200241c0166a41086a202c2903002211370300200241c0166a41106a202b2903002226370300200241c0166a41186a20272903002229370300200241c0166a41206a200a37030020024180166a41086a222b201137030020024180166a41106a222c202637030020024180166a41186a222f202937030020024180166a41206a2230200a370300200220022903c017220a3703c0162002200a3703801602402007422088a722272007a7470d00202741016a22232027490d2d20274101742231202320232031491b22234104202341044b1bad42307e2207422088a74541027421232007a721310240024020270d0020024100360280180c010b200241043602881820022025360280182002202741306c360284180b200241c0186a2031202320024180186a107d20022802c818212320022802c0184101460d0320022802c4182125202341306ead21070b2025202741306c6a2223202a36020020232002290380163702042023410c6a202b290300370200202341146a202c2903003702002023411c6a202f290300370200202341246a20302903003702002023202d3b012c200742ffffffff0f83202741016aad4220868421072015417f6a22150d000b0b2025450d052007422088a741306c22150d01202521150c020b2023450d290c280b202520156a2123202521150340201541306a22152023470d000b0b2007a7212320024180096a200110ab01201520256b41306d212c024002402002280280090d002002280284092227200128020441346e2215201520274b1bad42347e2207422088a70d292007a72215417f4c0d290240024020150d004104212a0c010b2015102c222a450d290b201541346ead21070240024002400240024002402027450d000340200241f8086a200110ab0120022802f8080d0620022802fc08212d200241003a00ac18200241f0086a200110fc0420022f01f0080d0620022f01f2082115200241e8086a200110fc0420022f01e8080d0620022f01ea08212b200241013a00ac182002202b3b018218200220153b018018200241e0086a200110fc0420022f01e0080d0520022f01e2082115200241d8086a200110fc0420022f01d8080d0520022f01da08212b200241023a00ac182002202b3b018618200220153b018418200241d0086a200110fc0420022f01d0080d0520022f01d2082115200241c8086a200110fc0420022f01c8080d0520022f01ca08212b200241033a00ac182002202b3b018a18200220153b018818200241c0086a200110fc0420022f01c0080d0520022f01c2082115200241b8086a200110fc0420022f01b8080d0520022f01ba08212b200241043a00ac182002202b3b018e18200220153b018c18200241b0086a200110fc0420022f01b0080d0520022f01b2082115200241a8086a200110fc0420022f01a8080d0520022f01aa08212b200241053a00ac182002202b3b019218200220153b019018200241a0086a200110fc0420022f01a0080d0520022f01a208211520024198086a200110fc0420022f0198080d0520022f019a08212b200241063a00ac182002202b3b019618200220153b01941820024190086a200110fc0420022f0190080d0520022f019208211520024188086a200110fc0420022f0188080d0520022f018a08212b200241073a00ac182002202b3b019a18200220153b01981820024180086a200110fc0420022f0180080d0520022f0182082115200241f8076a200110fc0420022f01f8070d0520022f01fa07212b200241083a00ac182002202b3b019e18200220153b019c18200241f0076a200110fc0420022f01f0070d0520022f01f2072115200241e8076a200110fc0420022f01e8070d0520022f01ea07212b200241093a00ac182002202b3b01a218200220153b01a018200241e0076a200110fc0420022f01e0070d0520022f01e2072115200241d8076a200110fc0420022f01d8070d0520022f01da07212b2002410a3a00ac182002202b3b01a618200220153b01a418200241d0076a200110fc0420022f01d0070d0520022f01d2072115200241c8076a200110fc0420022f01c8070d05200220022f01ca073b01aa18200220153b01a8182002410b3a00ac18200241c0186a41086a20024180186a41086a290300220a370300200241c0186a41106a20024180186a41106a2903002211370300200241c0186a41186a20024180186a41186a2903002226370300200241c0186a41206a20024180186a41206a2903002229370300200241c0186a41286a20022802a81822153602002002200229038018222e3703c018200241c0176a41286a222b2015360200200241c0176a41206a222f2029370300200241c0176a41186a22302026370300200241c0176a41106a22312011370300200241c0176a41086a2232200a3703002002202e3703c017200241c0076a200110fc0420022f01c0070d0620022f01c207213320024180176a41286a202b280200221536020020024180176a41206a202f290300220a370300200241c0166a41086a20322903002211370300200241c0166a41106a20312903002226370300200241c0166a41186a20302903002229370300200241c0166a41206a200a370300200241c0166a41286a2015360200200220022903c017222e3703c01620024180166a41286a222f201536020020024180166a41206a2230200a37030020024180166a41186a2231202937030020024180166a41106a2232202637030020024180166a41086a223420113703002002202e3703801602402007422088a7222b2007a7470d00202b41016a2215202b490d31202b4101742235201520152035491b22154104201541044b1bad42347e2207422088a74541027421152007a7213502400240202b0d0020024100360280180c010b20024104360288182002202a360280182002202b41346c360284180b200241c0186a2035201520024180186a107d20022802c818211520022802c0184101460d0320022802c418212a201541346ead21070b202a202b41346c6a2215202d36020020152002290380163702042015410c6a2034290300370200201541146a20322903003702002015411c6a2031290300370200201541246a20302903003702002015412c6a202f280200360200201520333b0130200742ffffffff0f83202b41016aad4220868421072027417f6a22270d000b0b202a450d052007422088a741346c22150d01202a21150c020b2015450d2d0c2c0b202a20156a2127202a21150340201541346a22152027470d000b0b2007a72127200241b8076a200110ab012015202a6b41346d212f0240024020022802b8070d0020022802bc072215200128020441386e222b202b20154b1bad42387e2207422088a70d2d2007a7222b417f4c0d2d02400240202b0d004104212d0c010b202b102c222d450d2d0b202b41386ead21070240024002400240024002402015450d000340200241b0076a200110ab0120022802b0070d0620022802b4072131200241003a00b018200241a8076a200110fc0420022f01a8070d0620022f01aa07212b200241a0076a200110fc0420022f01a0070d0620022f01a2072130200241013a00b018200220303b0182182002202b3b01801820024198076a200110fc0420022f0198070d0520022f019a07212b20024190076a200110fc0420022f0190070d0520022f0192072130200241023a00b018200220303b0186182002202b3b01841820024188076a200110fc0420022f0188070d0520022f018a07212b20024180076a200110fc0420022f0180070d0520022f0182072130200241033a00b018200220303b018a182002202b3b018818200241f8066a200110fc0420022f01f8060d0520022f01fa06212b200241f0066a200110fc0420022f01f0060d0520022f01f2062130200241043a00b018200220303b018e182002202b3b018c18200241e8066a200110fc0420022f01e8060d0520022f01ea06212b200241e0066a200110fc0420022f01e0060d0520022f01e2062130200241053a00b018200220303b0192182002202b3b019018200241d8066a200110fc0420022f01d8060d0520022f01da06212b200241d0066a200110fc0420022f01d0060d0520022f01d2062130200241063a00b018200220303b0196182002202b3b019418200241c8066a200110fc0420022f01c8060d0520022f01ca06212b200241c0066a200110fc0420022f01c0060d0520022f01c2062130200241073a00b018200220303b019a182002202b3b019818200241b8066a200110fc0420022f01b8060d0520022f01ba06212b200241b0066a200110fc0420022f01b0060d0520022f01b2062130200241083a00b018200220303b019e182002202b3b019c18200241a8066a200110fc0420022f01a8060d0520022f01aa06212b200241a0066a200110fc0420022f01a0060d0520022f01a2062130200241093a00b018200220303b01a2182002202b3b01a01820024198066a200110fc0420022f0198060d0520022f019a06212b20024190066a200110fc0420022f0190060d0520022f01920621302002410a3a00b018200220303b01a6182002202b3b01a41820024188066a200110fc0420022f0188060d0520022f018a06212b20024180066a200110fc0420022f0180060d0520022f01820621302002410b3a00b018200220303b01aa182002202b3b01a818200241f8056a200110fc0420022f01f8050d0520022f01fa05212b200241f0056a200110fc0420022f01f0050d05200220022f01f2053b01ae182002202b3b01ac182002410c3a00b018200241c0186a41086a20024180186a41086a290300220a370300200241c0186a41106a20024180186a41106a2903002211370300200241c0186a41186a20024180186a41186a2903002226370300200241c0186a41206a20024180186a41206a2903002229370300200241c0186a41286a20024180186a41286a290300222e370300200220022903801822363703c018200241c0176a41286a222b202e370300200241c0176a41206a22302029370300200241c0176a41186a22322026370300200241c0176a41106a22332011370300200241c0176a41086a2234200a370300200220363703c017200241e8056a200110fc0420022f01e8050d0620022f01ea05213520024180176a41286a202b290300220a37030020024180176a41206a20302903002211370300200241c0166a41086a20342903002226370300200241c0166a41106a20332903002229370300200241c0166a41186a2032290300222e370300200241c0166a41206a2011370300200241c0166a41286a200a370300200220022903c01722363703c01620024180166a41286a2232200a37030020024180166a41206a2233201137030020024180166a41186a2234202e37030020024180166a41106a2237202937030020024180166a41086a22382026370300200220363703801602402007422088a722302007a7470d00203041016a222b2030490d3520304101742239202b202b2039491b222b4104202b41044b1bad42387e2207422088a745410274212b2007a721390240024020300d0020024100360280180c010b20024104360288182002202d360280182002203041386c360284180b200241c0186a2039202b20024180186a107d20022802c818212b20022802c0184101460d0320022802c418212d202b41386ead21070b202d203041386c6a222b2031360200202b200229038016370204202b410c6a2038290300370200202b41146a2037290300370200202b411c6a2034290300370200202b41246a2033290300370200202b412c6a2032290300370200202b20353b0134200742ffffffff0f83203041016aad4220868421072015417f6a22150d000b0b202d450d052007422088a741386c22150d01202d21150c020b202b450d310c300b202d20156a212b202d21150340201541386a2215202b470d000b0b2007a7212b200241e0056a200110ab012015202d6b41386d21320240024020022802e0050d0020022802e40522152001280204413c6e2230203020154b1bad423c7e2207422088a70d312007a72230417f4c0d310240024020300d00410421310c010b2030102c2231450d310b2030413c6ead21070240024002400240024002402015450d000340200241d8056a200110ab0120022802d8050d0620022802dc052134200241003a00b418200241d0056a200110fc0420022f01d0050d0620022f01d2052130200241c8056a200110fc0420022f01c8050d0620022f01ca052133200241013a00b418200220333b018218200220303b018018200241c0056a200110fc0420022f01c0050d0520022f01c2052130200241b8056a200110fc0420022f01b8050d0520022f01ba052133200241023a00b418200220333b018618200220303b018418200241b0056a200110fc0420022f01b0050d0520022f01b2052130200241a8056a200110fc0420022f01a8050d0520022f01aa052133200241033a00b418200220333b018a18200220303b018818200241a0056a200110fc0420022f01a0050d0520022f01a205213020024198056a200110fc0420022f0198050d0520022f019a052133200241043a00b418200220333b018e18200220303b018c1820024190056a200110fc0420022f0190050d0520022f019205213020024188056a200110fc0420022f0188050d0520022f018a052133200241053a00b418200220333b019218200220303b01901820024180056a200110fc0420022f0180050d0520022f0182052130200241f8046a200110fc0420022f01f8040d0520022f01fa042133200241063a00b418200220333b019618200220303b019418200241f0046a200110fc0420022f01f0040d0520022f01f2042130200241e8046a200110fc0420022f01e8040d0520022f01ea042133200241073a00b418200220333b019a18200220303b019818200241e0046a200110fc0420022f01e0040d0520022f01e2042130200241d8046a200110fc0420022f01d8040d0520022f01da042133200241083a00b418200220333b019e18200220303b019c18200241d0046a200110fc0420022f01d0040d0520022f01d2042130200241c8046a200110fc0420022f01c8040d0520022f01ca042133200241093a00b418200220333b01a218200220303b01a018200241c0046a200110fc0420022f01c0040d0520022f01c2042130200241b8046a200110fc0420022f01b8040d0520022f01ba0421332002410a3a00b418200220333b01a618200220303b01a418200241b0046a200110fc0420022f01b0040d0520022f01b2042130200241a8046a200110fc0420022f01a8040d0520022f01aa0421332002410b3a00b418200220333b01aa18200220303b01a818200241a0046a200110fc0420022f01a0040d0520022f01a204213020024198046a200110fc0420022f0198040d0520022f019a0421332002410c3a00b418200220333b01ae18200220303b01ac1820024190046a200110fc0420022f0190040d0520022f019204213020024188046a200110fc0420022f0188040d05200220022f018a043b01b218200220303b01b0182002410d3a00b418200241c0186a41086a223020024180186a41086a290300370300200241c0186a41106a223320024180186a41106a290300370300200241c0186a41186a223520024180186a41186a290300370300200241c0186a41206a223720024180186a41206a290300370300200241c0186a41286a223820024180186a41286a290300370300200241c0186a41306a223920022802b01836020020022002290380183703c018200241c0176a41306a223a2039280200360200200241c0176a41286a22392038290300370300200241c0176a41206a22382037290300370300200241c0176a41186a22372035290300370300200241c0176a41106a22352033290300370300200241c0176a41086a22332030290300370300200220022903c0183703c01720024180046a200110fc0420022f0180040d0620022f018204213b20024180176a41306a203a280200223036020020024180176a41286a2039290300220a37030020024180176a41206a20382903002211370300200241c0166a41086a22382033290300370300200241c0166a41106a22332035290300370300200241c0166a41186a22352037290300370300200241c0166a41206a22372011370300200241c0166a41286a2239200a370300200241c0166a41306a223a2030360200200220022903c0173703c01620024180166a41306a223c203a28020036020020024180166a41286a223a203929030037030020024180166a41206a2239203729030037030020024180166a41186a2237203529030037030020024180166a41106a2235203329030037030020024180166a41086a223d2038290300370300200220022903c0163703801602402007422088a722332007a7470d00203341016a22302033490d3920334101742238203020302038491b22304104203041044b1bad423c7e2207422088a74541027421302007a721380240024020330d0020024100360280180c010b2002410436028818200220313602801820022033413c6c360284180b200241c0186a2038203020024180186a107d20022802c818213020022802c0184101460d0320022802c41821312030413c6ead21070b20312033413c6c6a2230203436020020302002290380163702042030410c6a203d290300370200203041146a20352903003702002030411c6a2037290300370200203041246a20392903003702002030412c6a203a290300370200203041346a203c2802003602002030203b3b0138200742ffffffff0f83203341016aad4220868421072015417f6a22150d000b0b2031450d052007422088a7413c6c22150d01203121150c020b2030450d350c340b203120156a21302031211503402015413c6a22152030470d000b0b2007a72130200241f8036a200110ab01201520316b413c6d21350240024020022802f8030d0020022802fc03221520012802044106762233203320154b1b22334106742234417f4c0d350240024020330d00410421340c010b2034102c2234450d350b2033ad21070240024002400240024002402015450d000340200241f0036a200110ab0120022802f0030d0620022802f4032138200241003a00b818200241e8036a200110fc0420022f01e8030d0620022f01ea032133200241e0036a200110fc0420022f01e0030d0620022f01e2032137200241013a00b818200220373b018218200220333b018018200241d8036a200110fc0420022f01d8030d0520022f01da032133200241d0036a200110fc0420022f01d0030d0520022f01d2032137200241023a00b818200220373b018618200220333b018418200241c8036a200110fc0420022f01c8030d0520022f01ca032133200241c0036a200110fc0420022f01c0030d0520022f01c2032137200241033a00b818200220373b018a18200220333b018818200241b8036a200110fc0420022f01b8030d0520022f01ba032133200241b0036a200110fc0420022f01b0030d0520022f01b2032137200241043a00b818200220373b018e18200220333b018c18200241a8036a200110fc0420022f01a8030d0520022f01aa032133200241a0036a200110fc0420022f01a0030d0520022f01a2032137200241053a00b818200220373b019218200220333b01901820024198036a200110fc0420022f0198030d0520022f019a03213320024190036a200110fc0420022f0190030d0520022f0192032137200241063a00b818200220373b019618200220333b01941820024188036a200110fc0420022f0188030d0520022f018a03213320024180036a200110fc0420022f0180030d0520022f0182032137200241073a00b818200220373b019a18200220333b019818200241f8026a200110fc0420022f01f8020d0520022f01fa022133200241f0026a200110fc0420022f01f0020d0520022f01f2022137200241083a00b818200220373b019e18200220333b019c18200241e8026a200110fc0420022f01e8020d0520022f01ea022133200241e0026a200110fc0420022f01e0020d0520022f01e2022137200241093a00b818200220373b01a218200220333b01a018200241d8026a200110fc0420022f01d8020d0520022f01da022133200241d0026a200110fc0420022f01d0020d0520022f01d20221372002410a3a00b818200220373b01a618200220333b01a418200241c8026a200110fc0420022f01c8020d0520022f01ca022133200241c0026a200110fc0420022f01c0020d0520022f01c20221372002410b3a00b818200220373b01aa18200220333b01a818200241b8026a200110fc0420022f01b8020d0520022f01ba022133200241b0026a200110fc0420022f01b0020d0520022f01b20221372002410c3a00b818200220373b01ae18200220333b01ac18200241a8026a200110fc0420022f01a8020d0520022f01aa022133200241a0026a200110fc0420022f01a0020d0520022f01a20221372002410d3a00b818200220373b01b218200220333b01b01820024198026a200110fc0420022f0198020d0520022f019a02213320024190026a200110fc0420022f0190020d05200220022f0192023b01b618200220333b01b4182002410e3a00b818200241c0186a41086a223320024180186a41086a290300370300200241c0186a41106a223720024180186a41106a290300370300200241c0186a41186a223920024180186a41186a290300370300200241c0186a41206a223a20024180186a41206a290300370300200241c0186a41286a223b20024180186a41286a290300370300200241c0186a41306a223c20024180186a41306a29030037030020022002290380183703c018200241c0176a41306a223d203c290300370300200241c0176a41286a223c203b290300370300200241c0176a41206a223b203a290300370300200241c0176a41186a223a2039290300370300200241c0176a41106a22392037290300370300200241c0176a41086a22372033290300370300200220022903c0183703c01720024188026a200110fc0420022f0188020d0620022f018a02213e20024180176a41306a203d290300220a37030020024180176a41286a203c290300221137030020024180176a41206a203b2903002226370300200241c0166a41086a22332037290300370300200241c0166a41106a22372039290300370300200241c0166a41186a2239203a290300370300200241c0166a41206a223a2026370300200241c0166a41286a223b2011370300200241c0166a41306a223c200a370300200220022903c0173703c01620024180166a41306a223d203c29030037030020024180166a41286a223c203b29030037030020024180166a41206a223b203a29030037030020024180166a41186a223a203929030037030020024180166a41106a2239203729030037030020024180166a41086a223f2033290300370300200220022903c0163703801602402007422088220aa722372007a7470d00203741016a22332037490d3d20374101742240203320332040491b22334104203341044b1b223341ffffff1f712033464102742140203341067421330240024020370d0020024100360280180c010b200241043602881820022034360280182002200a4206863e0284180b200241c0186a2033204020024180186a107d20022802c818213320022802c0184101460d0320022802c41821342033410676ad21070b203420374106746a2233203836020020332002290380163702042033410c6a203f290300370200203341146a20392903003702002033411c6a203a290300370200203341246a203b2903003702002033412c6a203c290300370200203341346a203d2903003702002033203e3b013c200742ffffffff0f83203741016aad4220868421072015417f6a22150d000b0b2034450d052007422088a741067422150d01203421150c020b2033450d390c380b203420156a2133203421150340201541c0006a22152033470d000b0b2007a7213320024180026a200110ab0102402002280280020d002002280284022237200128020441c4006e2238203820374b1bad42c4007e2207422088a70d382007a72238417f4c0d380240024020380d00410421390c010b2038102c2239450d380b203841c4006ead21070240024002400240024002402037450d000340200241f8016a200110ab0120022802f8010d0620022802fc01213b200241003a00bc18200241f0016a200110fc0420022f01f0010d0620022f01f2012138200241e8016a200110fc0420022f01e8010d0620022f01ea01213a200241013a00bc182002203a3b018218200220383b018018200241e0016a200110fc0420022f01e0010d0520022f01e2012138200241d8016a200110fc0420022f01d8010d0520022f01da01213a200241023a00bc182002203a3b018618200220383b018418200241d0016a200110fc0420022f01d0010d0520022f01d2012138200241c8016a200110fc0420022f01c8010d0520022f01ca01213a200241033a00bc182002203a3b018a18200220383b018818200241c0016a200110fc0420022f01c0010d0520022f01c2012138200241b8016a200110fc0420022f01b8010d0520022f01ba01213a200241043a00bc182002203a3b018e18200220383b018c18200241b0016a200110fc0420022f01b0010d0520022f01b2012138200241a8016a200110fc0420022f01a8010d0520022f01aa01213a200241053a00bc182002203a3b019218200220383b019018200241a0016a200110fc0420022f01a0010d0520022f01a201213820024198016a200110fc0420022f0198010d0520022f019a01213a200241063a00bc182002203a3b019618200220383b01941820024190016a200110fc0420022f0190010d0520022f019201213820024188016a200110fc0420022f0188010d0520022f018a01213a200241073a00bc182002203a3b019a18200220383b01981820024180016a200110fc0420022f0180010d0520022f0182012138200241f8006a200110fc0420022f01780d0520022f017a213a200241083a00bc182002203a3b019e18200220383b019c18200241f0006a200110fc0420022f01700d0520022f01722138200241e8006a200110fc0420022f01680d0520022f016a213a200241093a00bc182002203a3b01a218200220383b01a018200241e0006a200110fc0420022f01600d0520022f01622138200241d8006a200110fc0420022f01580d0520022f015a213a2002410a3a00bc182002203a3b01a618200220383b01a418200241d0006a200110fc0420022f01500d0520022f01522138200241c8006a200110fc0420022f01480d0520022f014a213a2002410b3a00bc182002203a3b01aa18200220383b01a818200241c0006a200110fc0420022f01400d0520022f01422138200241386a200110fc0420022f01380d0520022f013a213a2002410c3a00bc182002203a3b01ae18200220383b01ac18200241306a200110fc0420022f01300d0520022f01322138200241286a200110fc0420022f01280d0520022f012a213a2002410d3a00bc182002203a3b01b218200220383b01b018200241206a200110fc0420022f01200d0520022f01222138200241186a200110fc0420022f01180d0520022f011a213a2002410e3a00bc182002203a3b01b618200220383b01b418200241106a200110fc0420022f01100d0520022f01122138200241086a200110fc0420022f01080d05200220022f010a3b01ba18200220383b01b8182002410f3a00bc18200241c0186a41086a223820024180186a41086a290300370300200241c0186a41106a223a20024180186a41106a290300370300200241c0186a41186a223c20024180186a41186a290300370300200241c0186a41206a223d20024180186a41206a290300370300200241c0186a41286a223e20024180186a41286a290300370300200241c0186a41306a223f20024180186a41306a290300370300200241c0186a41386a224020022802b81836020020022002290380183703c018200241c0176a41086a22412038290300370300200241c0176a41106a2238203a290300370300200241c0176a41186a223a203c290300370300200241c0176a41206a223c203d290300370300200241c0176a41286a223d203e290300370300200241c0176a41306a223e203f290300370300200241c0176a41386a223f2040280200360200200220022903c0183703c0172002200110fc0420022f01000d0620022f0102214020024180176a41386a203f280200223f36020020024180176a41306a203e290300220a37030020024180176a41286a203d290300221137030020024180176a41206a203c2903002226370300200241c0166a41086a223c2041290300370300200241c0166a41106a223d2038290300370300200241c0166a41186a2238203a290300370300200241c0166a41206a223a2026370300200241c0166a41286a223e2011370300200241c0166a41306a2241200a370300200241c0166a41386a2242203f360200200220022903c0173703c01620024180166a41386a223f204228020036020020024180166a41306a2242204129030037030020024180166a41286a2241203e29030037030020024180166a41206a223e203a29030037030020024180166a41186a2243203829030037030020024180166a41106a2244203d29030037030020024180166a41086a223d203c290300370300200220022903c0163703801602402007422088a7223a2007a7470d00203a41016a2238203a490d40203a410174223c20382038203c491b22384104203841044b1bad42c4007e2207422088a74541027421382007a7213c02400240203a0d0020024100360280180c010b200241043602881820022039360280182002203a41c4006c360284180b200241c0186a203c203820024180186a107d20022802c818213820022802c0184101460d0320022802c4182139203841c4006ead21070b2039203a41c4006c6a2238203b36020020382002290380163702042038410c6a203d290300370200203841146a20442903003702002038411c6a2043290300370200203841246a203e2903003702002038412c6a2041290300370200203841346a20422903003702002038413c6a203f280200360200203820403b0140200742ffffffff0f83203a41016aad4220868421072037417f6a22370d000b0b2039450d05200420066b41037521372005200b6b4104752105200320196b4105752103201520346b41067521152007a721382007422088a741c4006c22040d01203921040c020b2038450d3c0c3b0b203920046a2101203921040340200441c4006a22042001470d000b0b2000200c36020420002006360200200041b8016a2038360200200041b4016a2039360200200041b0016a2015360200200041ac016a2033360200200041a8016a2034360200200041a4016a2035360200200041a0016a20303602002000419c016a203136020020004198016a203236020020004194016a202b36020020004190016a202d3602002000418c016a202f36020020004188016a202736020020004184016a202a36020020004180016a202c360200200041fc006a2023360200200041f8006a2025360200200041f4006a2028360200200041f0006a201f360200200041ec006a2022360200200041e8006a2024360200200041e4006a201d360200200041e0006a2020360200200041dc006a2021360200200041d8006a201c360200200041d4006a201e360200200041d0006a2003360200200041cc006a2017360200200041c8006a2019360200200041c4006a201b360200200041c0006a20133602002000413c6a2016360200200041386a201a360200200041346a200e360200200041306a20143602002000412c6a2018360200200041286a2009360200200041246a200f360200200041206a20053602002000411c6a2012360200200041186a200b360200200041146a2010360200200041106a200d3602002000410c6a2008360200200041086a2037360200200041bc016a200420396b41c4006d3602000c380b200241003a00bc180b2007a72204450d00200441c4006c450d002039102e0b20004100360200203341ffffff1f71450d032034102e0c030b200241003a00b8180b200742ffffff1f83500d002034102e0b200041003602000b2030450d032030413c6c450d032031102e0c030b200241003a00b4180b2007a72204450d002004413c6c450d002031102e0b200041003602000b202b450d03202b41386c450d03202d102e0c030b200241003a00b0180b2007a72204450d00200441386c450d00202d102e0b200041003602000b2027450d03202741346c450d03202a102e0c030b200241003a00ac180b2007a72204450d00200441346c450d00202a102e0b200041003602000b2023450d03202341306c450d032025102e0c030b200241003a00a8180b2007a72204450d00200441306c450d002025102e0b200041003602000b201f450d03201f412c6c450d032022102e0c030b200241003a00a4180b2007a72204450d002004412c6c450d002022102e0b200041003602000b201d450d03201d41286c450d032020102e0c030b200241003a00a0180b2007a72204450d00200441286c450d002020102e0b200041003602000b201c450d03201c41246c450d03201e102e0c030b200241003a009c180b2007a72204450d00200441246c450d00201e102e0b200041003602000b201741ffffff3f71450d032019102e0c030b200241003a0098180b200742ffffff3f83500d002019102e0b200041003602000b2013450d032013411c6c450d032016102e0c030b200241003a0094180b2007a72204450d002004411c6c450d002016102e0b200041003602000b200e450d03200e41186c450d032014102e0c030b200241003a0090180b2007a72204450d00200441186c450d002014102e0b200041003602000b2009450d03200941146c450d03200f102e0c030b200241003a008c180b2007a72204450d00200441146c450d00200f102e0b200041003602000b201241ffffffff0071450d03200b102e0c030b200241003a0088180b200742ffffffff0083500d00200b102e0b200041003602000b200d450d00200d410c6c450d002008102e0b200c41ffffffff0171450d002006102e0b200241c0196a24000f0b1036000b1038000bc61e01097f230041f0006b2202240020024200370204024020012802082203450d0020034103742104200128020041046a21030340200220032f0100109806200341086a2103200441786a22040d000b0b0240200141146a2802002203450d002003410c6c2104200128020c41086a2103034020032f0100210520022003417c6a2f0100109806200220051098062003410c6a2103200441746a22040d000b0b0240200141206a2802002203450d00200341047421042001280218410c6a210303402002200341786a2f010010980620022003417c6a2f0100109806200220032f0100109806200341106a2103200441706a22040d000b0b02402001412c6a2802002203450d00200341146c2104200128022441106a210303402002200341746a2f01001098062002200341786a2f010010980620022003417c6a2f0100109806200220032f0100109806200341146a21032004416c6a22040d000b0b0240200141386a2802002203450d00200341186c2104200128023041146a210303402002200341706a2f01001098062002200341746a2f01001098062002200341786a2f010010980620022003417c6a2f0100109806200220032f0100109806200341186a2103200441686a22040d000b0b0240200141c4006a2802002203450d00200128023c21052003411c6c21064100210403402002200520046a220341046a2f01001098062002200341086a2f010010980620022003410c6a2f01001098062002200341106a2f01001098062002200341146a2f01001098062002200341186a2f010010980620062004411c6a2204470d000b0b0240200141d0006a2802002203450d0020012802482105200341057421064100210403402002200520046a220341046a2f01001098062002200341086a2f010010980620022003410c6a2f01001098062002200341106a2f01001098062002200341146a2f01001098062002200341186a2f010010980620022003411c6a2f01001098062006200441206a2204470d000b0b0240200141dc006a2802002203450d0020012802542105200341246c21064100210403402002200520046a220341046a2f01001098062002200341086a2f010010980620022003410c6a2f01001098062002200341106a2f01001098062002200341146a2f01001098062002200341186a2f010010980620022003411c6a2f01001098062002200341206a2f01001098062006200441246a2204470d000b0b0240200141e8006a2802002203450d0020012802602105200341286c21064100210403402002200520046a220341046a2f01001098062002200341086a2f010010980620022003410c6a2f01001098062002200341106a2f01001098062002200341146a2f01001098062002200341186a2f010010980620022003411c6a2f01001098062002200341206a2f01001098062002200341246a2f01001098062006200441286a2204470d000b0b0240200141f4006a2802002203450d00200128026c21052003412c6c21064100210403402002200520046a220341046a2f01001098062002200341086a2f010010980620022003410c6a2f01001098062002200341106a2f01001098062002200341146a2f01001098062002200341186a2f010010980620022003411c6a2f01001098062002200341206a2f01001098062002200341246a2f01001098062002200341286a2f010010980620062004412c6a2204470d000b0b024020014180016a2802002203450d0020012802782105200341306c21064100210403402002200520046a220341046a2f01001098062002200341086a2f010010980620022003410c6a2f01001098062002200341106a2f01001098062002200341146a2f01001098062002200341186a2f010010980620022003411c6a2f01001098062002200341206a2f01001098062002200341246a2f01001098062002200341286a2f010010980620022003412c6a2f01001098062006200441306a2204470d000b0b02402001418c016a2802002203450d002001280284012105200341346c21064100210403402002200520046a220341046a2f01001098062002200341086a2f010010980620022003410c6a2f01001098062002200341106a2f01001098062002200341146a2f01001098062002200341186a2f010010980620022003411c6a2f01001098062002200341206a2f01001098062002200341246a2f01001098062002200341286a2f010010980620022003412c6a2f01001098062002200341306a2f01001098062006200441346a2204470d000b0b024020014198016a2802002203450d002001280290012105200341386c21064100210403402002200520046a220341046a2f01001098062002200341086a2f010010980620022003410c6a2f01001098062002200341106a2f01001098062002200341146a2f01001098062002200341186a2f010010980620022003411c6a2f01001098062002200341206a2f01001098062002200341246a2f01001098062002200341286a2f010010980620022003412c6a2f01001098062002200341306a2f01001098062002200341346a2f01001098062006200441386a2204470d000b0b0240200141a4016a2802002203450d00200128029c0121052003413c6c21064100210403402002200520046a220341046a2f01001098062002200341086a2f010010980620022003410c6a2f01001098062002200341106a2f01001098062002200341146a2f01001098062002200341186a2f010010980620022003411c6a2f01001098062002200341206a2f01001098062002200341246a2f01001098062002200341286a2f010010980620022003412c6a2f01001098062002200341306a2f01001098062002200341346a2f01001098062002200341386a2f010010980620062004413c6a2204470d000b0b0240200141b0016a2802002203450d0020012802a8012105200341067421064100210403402002200520046a220341046a2f01001098062002200341086a2f010010980620022003410c6a2f01001098062002200341106a2f01001098062002200341146a2f01001098062002200341186a2f010010980620022003411c6a2f01001098062002200341206a2f01001098062002200341246a2f01001098062002200341286a2f010010980620022003412c6a2f01001098062002200341306a2f01001098062002200341346a2f01001098062002200341386a2f010010980620022003413c6a2f01001098062006200441c0006a2204470d000b0b0240200141bc016a2802002203450d0020012802b4012105200341c4006c21014100210403402002200520046a220341046a2f01001098062002200341086a2f010010980620022003410c6a2f01001098062002200341106a2f01001098062002200341146a2f01001098062002200341186a2f010010980620022003411c6a2f01001098062002200341206a2f01001098062002200341246a2f01001098062002200341286a2f010010980620022003412c6a2f01001098062002200341306a2f01001098062002200341346a2f01001098062002200341386a2f010010980620022003413c6a2f01001098062002200341c0006a2f01001098062001200441c4006a2204470d000b0b02400240200228020422050d004100210541002103410021060c010b200228020821062002280200210420052103034020052f010621012004450d012004417f6a2104200520014102746a41206a2802002105200328022021030c000b0b200241246a2001360200200241206a200536020020022006360228200242003703182002200336021420022004360210024002400240024002400240024002402006450d0020022006417f6a22063602282003450d0141002105024002400340200520032f0106490d010240200328020022010d002003102e410021030c030b20032f010421052003102e200441016a2104200121030c000b0b200541016a2101200320054101746a41086a2f010021072004450d00200320014102746a41206a2802002103024020044101460d00410121050340200328022021032004200541016a2205470d000b0b410021010b200220013602182002200336021420024100360210417f200641016a220320032006491b220420046a22032004490d052003417f4c0d052003102c2208450d02200820073b0100200241306a41186a200241106a41186a2802002204360200200241306a41106a200241106a41106a290300370300200241306a41086a200241106a41086a2903003703002002200229031037033041012106200341017621072004450d0620022004417f6a220936024820022802342203450d032002280238210520022802302104024002400340200520032f0106490d010240200328020022010d002003102e410021030c030b20032f010421052003102e200441016a2104200121030c000b0b200541016a2101200320054101746a41086a2f0100210a2004450d00200320014102746a41206a2802002103024020044101460d00410121050340200328022021032004200541016a2205470d000b0b410021010b20022001360238200220033602342002410036023041012106034002400240024020072006470d00200720066b417f200941016a220320032009491b22034f0d00200620036a22032006490d09200741017422042003200420034b1b22034104200341044b1b220320036a220520034f41017421030240024020070d00200241003602600c010b2002410236026820022004360264200220083602600b200241d0006a20052003200241e0006a107d2002280258210320022802504101460d0120022802542108200341017621070b200820064101746a200a3b0100200641016a2106200228024822030d010c090b20030d040c070b20022003417f6a220936024820022802342203450d05410120022802306b210420022802382105024002400340200520032f0106490d010240200328020022010d002003102e410021030c030b20032f010421052003102e2004417f6a2104200121030c000b0b200541016a2101200320054101746a41086a2f0100210a20044101460d00200320014102746a41206a280200210302402004450d004100210503402003280220210320042005417f6a2205470d000b0b410021010b2002200136023820022003360234200241003602300c000b0b2000410036020820004202370200200241106a10bf020c060b41e8aac700412b41f8b7c0001039000b1036000b41e8aac700412b41f8b7c0001039000b41e8aac700412b41f8b7c0001039000b1038000b200241306a10bf022000200636020820002007360204200020083602000b200241f0006a24000b870e010c7f024002400240024002400240024002400240024002400240024020002802042202450d00200028020021030c010b4120102c2202450d0141002103200241003b01062002410036020020002002360204200041003602000b200141ffff037121040240034020022f01062205410174210641002107417f210802400340024020062007470d00200521080c020b200220076a2109200841016a2108200741026a2107417f200941086a2f01002209200447200920044b1b41016a0e03010300010b0b02402003450d002003417f6a2103200220084102746a41206a28020021020c010b0b0240024020022f01062207410a4b0d00200241086a2104200741016a21090240200841016a220620074b0d00200420064101746a200420084101746a20092008417f736a41017410ea081a0b200420084101746a20013b0100200220093b01060c010b410521074100210602400240200841054f0d0041042107200821040c010b41052104024002402008417b6a0e020201000b200841796a210441012106410621070c010b41002104410121060b4120102c2208450d02200841003b010620084100360200200820022f010622032007417f736a22093b01062009410c4f0d032003200741016a22056b2009470d04200241086a220320074101746a2f0100210a200841086a200320054101746a200941017410e9081a200220073b01062008200220061b220741086a210920072f0106220341016a21060240200441016a220520034b0d00200920054101746a200920044101746a20062004417f736a41017410ea081a0b200920044101746a20013b0100200720063b0106024002400240200228020022030d00410021010c010b410021012008210b200a210c03404101450d0820022f0104210920032f01062205410b490d024100210641042107024020094105490d0020092107024002402009417b6a0e020201000b200941796a210941012106410621070c010b4100210941012106410521070b41d000102c2208450d05200841003b010620084100360200200820032f0106220a2007417f736a22023b01062002410c4f0d09200a200741016a22046b2002470d0a200341086a220d20074101746a2f0100210a200841086a200d20044101746a200241017410e9081a200320073b010620082f0106220241016a210d2002410c4f0d0b200520076b2207200d470d0c200141016a2101200841206a200320044102746a41206a200741027410e9081a4100210702400340200820074102746a41206a280200220420073b0104200420083602002007200720024922046a220720024b0d0120040d000b0b2008200320061b220441086a210220042f0106220541016a21060240200941016a220720054b0d00200220074101746a200220094101746a2009417f7320066a41017410ea081a0b200220094101746a200c3b0100200441206a21020240200941026a220c200541026a22054f0d002002200c4102746a200220074102746a2007417f7320056a41027410ea081a0b200220074102746a200b360200200420063b01060240200720054f0d00200420094102746a41246a2107034020072802002202200941016a22093b010420022004360200200741046a210720062009470d000b0b200321022003280200220721032008210b200a210c20070d000b0b20002802042202450d0b2000280200210441d000102c2207450d0320072002360220200741003b010620074100360200200241003b010420022007360200200020073602042000200441016a36020020042001470d0c20072f01062202410b4f0d0d2007200241016a22043b0106200720024101746a41086a200a3b0100200720044102746a41206a2008360200200820043b0104200820073602002000200028020841016a3602080f0b200941016a2107200341086a210220032f0106220841016a21040240200920084f22050d00200220074101746a200220094101746a2009417f7320046a41017410ea081a0b200220094101746a200c3b0100200341206a2102200841026a2106024020050d00200941027420026a41086a200220074102746a2007417f7320066a41027410ea081a0b200220074102746a200b360200200320043b0106200720064f0d00200841016a210420032007417f6a22074102746a41246a2108034020082802002202200741016a22073b010420022003360200200841046a210820042007470d000b0b2000200028020841016a3602080b0f0b1036000b2009410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b41ac9cc700413541e49cc7001039000b2002410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b200d410c41f49cc700104d000b41f49bc7004128419c9cc7001039000b41e8aac700412b4194abc7001039000b41e899c700413041989ac7001039000b41a89ac700412041c89ac7001039000bfd8c0103087f057ebb017f230041e00a6b22042400200420033602bc08200441f8096a4200370300200441f0096a4280808080c000370300200441e0096a4200370300200441d8096a4280808080c000370300200441c0086a4188016a4200370300200441c0096a4280808080c000370300200441b0096a4200370300200441a8096a4280808080c00037030020044198096a420037030020044190096a4280808080c00037030020044180096a4200370300200441c0086a41386a4280808080c000370300200441c0086a41286a4200370300200441c0086a41206a4280808080c000370300200441c0086a41106a4200370300200442043703e809200442043703d009200442043703b809200442043703a0092004420437038809200442043703f008200442043703d80820044280808080c0003703c808200442043703c0082001280200220520012802082203412c6c22066a210720012802042108200521010240024002402003450d00200641546a2103200441a00a6a41186a2109200441a00a6a41106a210a200441a00a6a41086a210b2005210602400340200641046a290200210c200628020021012009200641246a290200370300200a2006411c6a290200370300200b200641146a29020037030020042006410c6a2902003703a00a024020010d002006412c6a21010c030b200441800a6a41186a2009290300220d370300200441800a6a41106a200a290300220e370300200441800a6a41086a200b290300220f370300200420042903a00a22103703800a2009200d370300200a200e370300200b200f370300200420103703a00a02400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200c422088a70e1113000102030405060708090a0b0c0d0e0f140b2002280200200441a00a6a10a0022211450d14201128020021122004200441bc086a2001109a06024020042f01002213450d0020042f010221140240024020042802c808221120042802c408470d00201141016a22152011490da201201141017422162015201620154b1b22154104201541044b1b221541ffffffff01712015464102742116201541037421150240024020110d00200441003602d00a0c010b200441043602d80a200420042802c0083602d00a200420114103743602d40a0b200441c00a6a20152016200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a3602c008200420114103763602c40820042802c80821110b20042802c00820114103746a22112014201720131b22173b010420112012360200200420042802c80841016a3602c8080c110b2011450da0010ca2010b20004281808080203702000c9c010b2002280200200441a00a6a10a0022211450d1420112802002112200441106a200441bc086a2001109a0620042f01102213450d1520042f0112211420012f01202115200441086a200441bc086a200141226a109a06024020042f01082216450d0020042f010a21180240024020042802d408221120042802d008470d00201141016a22192011490da1012011410174221a2019201a20194b1b22194104201941044b1bad420c7e220d422088a7454102742119200da7211a0240024020110d00200441003602d00a0c010b200441043602d80a200420042802cc083602d00a20042011410c6c3602d40a0b200441c00a6a201a2019200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a3602cc0820042011410c6e3602d00820042802d40821110b20042802cc082011410c6c6a22112018201b20161b221b3b010820112014201c20131b221c3b010420112012360200201141066a20153b0100200420042802d40841016a3602d4080c100b20110da1010c9f010b20004281808080203702000c9b010b2002280200200441a00a6a10a0022211450d1520112802002112200441286a200441bc086a2001109a0620042f01282213450d1620042f012a211420012f01202115200441206a200441bc086a200141226a109a0620042f01202216450d1720042f01222118200141c2006a2f01002119200441186a200441bc086a200141c4006a109a06024020042f0118221a450d0020042f011a211d0240024020042802e008221120042802dc08470d00201141016a221e2011490da0012011410174221f201e201f201e4b1b221e4104201e41044b1b221e41ffffffff0071201e46410274211f201e410474211e0240024020110d00200441003602d00a0c010b200420042802d8083602d00a200441043602d80a200420114104743602d40a0b200441c00a6a201e201f200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a3602d808200420114104763602dc0820042802e00821110b20042802d80820114104746a2211201d2020201a1b22203b010c20112014202120131b22213b0104201120123602002011410a6a20193b0100201141086a2018202220161b22223b0100201141066a20153b0100200420042802e00841016a3602e0080c0f0b20110da0010c9e010b20004281808080203702000c9a010b2002280200200441a00a6a10a0022211450d1720112802002112200441c8006a200441bc086a2001109a0620042f01482213450d1820042f014a211420012f01202115200441c0006a200441bc086a200141226a109a0620042f01402216450d1920042f01422118200141c2006a2f01002119200441386a200441bc086a200141c4006a109a0620042f0138221a450d1a20042f013a211d200141e4006a2f0100211e200441306a200441bc086a200141e6006a109a06024020042f0130221f450d0020042f013221230240024020042802ec08221120042802e808470d00201141016a22242011490d9f01201141017422252024202520244b1b22244104202441044b1bad42147e220d422088a7454102742124200da721250240024020110d00200441003602d00a0c010b200441043602d80a200420042802e4083602d00a2004201141146c3602d40a0b200441c00a6a20252024200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a3602e4082004201141146e3602e80820042802ec0821110b20042802e408201141146c6a221120232026201f1b22263b011020112014202720131b22273b0104201120123602002011410e6a201e3b01002011410c6a201d2028201a1b22283b01002011410a6a20193b0100201141086a2018202920161b22293b0100201141066a20153b0100200420042802ec0841016a3602ec080c0e0b20110d9f010c9d010b20004281808080203702000c99010b2002280200200441a00a6a10a0022211450d1a20112802002112200441f0006a200441bc086a2001109a0620042f01702213450d1b20042f0172211420012f01202115200441e8006a200441bc086a200141226a109a0620042f01682216450d1c20042f016a2118200141c2006a2f01002119200441e0006a200441bc086a200141c4006a109a0620042f0160221a450d1d20042f0162211d200141e4006a2f0100211e200441d8006a200441bc086a200141e6006a109a0620042f0158221f450d1e20042f015a212320014186016a2f01002124200441d0006a200441bc086a20014188016a109a06024020042f01502225450d0020042f0152212a0240024020042802f808221120042802f408470d00201141016a222b2011490d9e012011410174222c202b202c202b4b1b222b4104202b41044b1bad42187e220d422088a745410274212b200da7212c0240024020110d00200441003602d00a0c010b200441043602d80a200420042802f0083602d00a2004201141186c3602d40a0b200441c00a6a202c202b200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a3602f0082004201141186e3602f40820042802f80821110b20042802f008201141186c6a2211202a202d20251b222d3b011420112014202e20131b222e3b010420112012360200201141126a20243b0100201141106a2023202f201f1b222f3b01002011410e6a201e3b01002011410c6a201d2030201a1b22303b01002011410a6a20193b0100201141086a2018203120161b22313b0100201141066a20153b0100200420042802f80841016a3602f8080c0d0b20110d9e010c9c010b20004281808080203702000c98010b2002280200200441a00a6a10a0022211450d1e20112802002112200441a0016a200441bc086a2001109a0620042f01a0012213450d1f20042f01a201211420012f0120211520044198016a200441bc086a200141226a109a0620042f0198012216450d2020042f019a012118200141c2006a2f0100211920044190016a200441bc086a200141c4006a109a0620042f019001221a450d2120042f019201211d200141e4006a2f0100211e20044188016a200441bc086a200141e6006a109a0620042f018801221f450d2220042f018a01212320014186016a2f0100212420044180016a200441bc086a20014188016a109a0620042f0180012225450d2320042f018201212a200141a8016a2f0100212b200441f8006a200441bc086a200141aa016a109a06024020042f0178222c450d0020042f017a2132024002402004280284092211200428028009470d00201141016a22332011490d9d01201141017422342033203420334b1b22334104203341044b1bad421c7e220d422088a7454102742133200da721340240024020110d00200441003602d00a0c010b200441043602d80a200420042802fc083602d00a20042011411c6c3602d40a0b200441c00a6a20342033200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a3602fc0820042011411c6e3602800920042802840921110b20042802fc082011411c6c6a221120322035202c1b22353b011820112014203620131b22363b010420112012360200201141166a202b3b0100201141146a202a203720251b22373b0100201141126a20243b0100201141106a20232038201f1b22383b01002011410e6a201e3b01002011410c6a201d2039201a1b22393b01002011410a6a20193b0100201141086a2018203a20161b223a3b0100201141066a20153b0100200420042802840941016a360284090c0c0b20110d9d010c9b010b20004281808080203702000c97010b2002280200200441a00a6a10a0022211450d2320112802002112200441d8016a200441bc086a2001109a0620042f01d8012213450d2420042f01da01211420012f01202115200441d0016a200441bc086a200141226a109a0620042f01d0012216450d2520042f01d2012118200141c2006a2f01002119200441c8016a200441bc086a200141c4006a109a0620042f01c801221a450d2620042f01ca01211d200141e4006a2f0100211e200441c0016a200441bc086a200141e6006a109a0620042f01c001221f450d2720042f01c201212320014186016a2f01002124200441b8016a200441bc086a20014188016a109a0620042f01b8012225450d2820042f01ba01212a200141a8016a2f0100212b200441b0016a200441bc086a200141aa016a109a0620042f01b001222c450d2920042f01b2012132200141ca016a2f01002133200441a8016a200441bc086a200141cc016a109a06024020042f01a8012234450d0020042f01aa01213b024002402004280290092211200428028c09470d00201141016a223c2011490d9c012011410174223d203c203d203c4b1b223c4104203c41044b1b223c41ffffff3f71203c46410274213d203c410574213c0240024020110d00200441003602d00a0c010b200441043602d80a20042004280288093602d00a200420114105743602d40a0b200441c00a6a203c203d200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a360288092004201141057636028c0920042802900921110b20042802880920114105746a2211203b203e20341b223e3b011c20112014203f20131b223f3b0104201120123602002011411a6a20333b0100201141186a20322040202c1b22403b0100201141166a202b3b0100201141146a202a204120251b22413b0100201141126a20243b0100201141106a20232042201f1b22423b01002011410e6a201e3b01002011410c6a201d2043201a1b22433b01002011410a6a20193b0100201141086a2018204420161b22443b0100201141066a20153b0100200420042802900941016a360290090c0b0b20110d9c010c9a010b20004281808080203702000c96010b2002280200200441a00a6a10a0022211450d292011280200211220044198026a200441bc086a2001109a0620042f0198022213450d2a20042f019a02211420012f0120211520044190026a200441bc086a200141226a109a0620042f0190022216450d2b20042f0192022118200141c2006a2f0100211920044188026a200441bc086a200141c4006a109a0620042f018802221a450d2c20042f018a02211d200141e4006a2f0100211e20044180026a200441bc086a200141e6006a109a0620042f018002221f450d2d20042f018202212320014186016a2f01002124200441f8016a200441bc086a20014188016a109a0620042f01f8012225450d2e20042f01fa01212a200141a8016a2f0100212b200441f0016a200441bc086a200141aa016a109a0620042f01f001222c450d2f20042f01f2012132200141ca016a2f01002133200441e8016a200441bc086a200141cc016a109a0620042f01e8012234450d3020042f01ea01213b200141ec016a2f0100213c200441e0016a200441bc086a200141ee016a109a06024020042f01e001223d450d0020042f01e201214502400240200428029c092211200428029809470d00201141016a22462011490d9b01201141017422472046204720464b1b22464104204641044b1bad42247e220d422088a7454102742146200da721470240024020110d00200441003602d00a0c010b200441043602d80a20042004280294093602d00a2004201141246c3602d40a0b200441c00a6a20472046200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a360294092004201141246e36029809200428029c0921110b200428029409201141246c6a221120452048203d1b22483b012020112014204920131b22493b0104201120123602002011411e6a203c3b01002011411c6a203b204a20341b224a3b01002011411a6a20333b0100201141186a2032204b202c1b224b3b0100201141166a202b3b0100201141146a202a204c20251b224c3b0100201141126a20243b0100201141106a2023204d201f1b224d3b01002011410e6a201e3b01002011410c6a201d204e201a1b224e3b01002011410a6a20193b0100201141086a2018204f20161b224f3b0100201141066a20153b01002004200428029c0941016a36029c090c0a0b20110d9b010c99010b20004281808080203702000c95010b2002280200200441a00a6a10a0022211450d3020112802002112200441e0026a200441bc086a2001109a0620042f01e0022213450d3120042f01e202211420012f01202115200441d8026a200441bc086a200141226a109a0620042f01d8022216450d3220042f01da022118200141c2006a2f01002119200441d0026a200441bc086a200141c4006a109a0620042f01d002221a450d3320042f01d202211d200141e4006a2f0100211e200441c8026a200441bc086a200141e6006a109a0620042f01c802221f450d3420042f01ca02212320014186016a2f01002124200441c0026a200441bc086a20014188016a109a0620042f01c0022225450d3520042f01c202212a200141a8016a2f0100212b200441b8026a200441bc086a200141aa016a109a0620042f01b802222c450d3620042f01ba022132200141ca016a2f01002133200441b0026a200441bc086a200141cc016a109a0620042f01b0022234450d3720042f01b202213b200141ec016a2f0100213c200441a8026a200441bc086a200141ee016a109a0620042f01a802223d450d3820042f01aa0221452001418e026a2f01002146200441a0026a200441bc086a20014190026a109a06024020042f01a0022247450d0020042f01a20221500240024020042802a809221120042802a409470d00201141016a22512011490d9a01201141017422522051205220514b1b22514104205141044b1bad42287e220d422088a7454102742151200da721520240024020110d00200441003602d00a0c010b200441043602d80a200420042802a0093602d00a2004201141286c3602d40a0b200441c00a6a20522051200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a3602a0092004201141286e3602a40920042802a80921110b20042802a009201141286c6a22112050205320471b22533b012420112014205420131b22543b010420112012360200201141226a20463b0100201141206a20452055203d1b22553b01002011411e6a203c3b01002011411c6a203b205620341b22563b01002011411a6a20333b0100201141186a20322057202c1b22573b0100201141166a202b3b0100201141146a202a205820251b22583b0100201141126a20243b0100201141106a20232059201f1b22593b01002011410e6a201e3b01002011410c6a201d205a201a1b225a3b01002011410a6a20193b0100201141086a2018205b20161b225b3b0100201141066a20153b0100200420042802a80941016a3602a8090c090b20110d9a010c98010b20004281808080203702000c94010b2002280200200441a00a6a10a0022211450d3820112802002112200441b0036a200441bc086a2001109a0620042f01b0032213450d3920042f01b203211420012f01202115200441a8036a200441bc086a200141226a109a0620042f01a8032216450d3a20042f01aa032118200141c2006a2f01002119200441a0036a200441bc086a200141c4006a109a0620042f01a003221a450d3b20042f01a203211d200141e4006a2f0100211e20044198036a200441bc086a200141e6006a109a0620042f019803221f450d3c20042f019a03212320014186016a2f0100212420044190036a200441bc086a20014188016a109a0620042f0190032225450d3d20042f019203212a200141a8016a2f0100212b20044188036a200441bc086a200141aa016a109a0620042f018803222c450d3e20042f018a032132200141ca016a2f0100213320044180036a200441bc086a200141cc016a109a0620042f0180032234450d3f20042f018203213b200141ec016a2f0100213c200441f8026a200441bc086a200141ee016a109a0620042f01f802223d450d4020042f01fa0221452001418e026a2f01002146200441f0026a200441bc086a20014190026a109a0620042f01f0022247450d4120042f01f2022150200141b0026a2f01002151200441e8026a200441bc086a200141b2026a109a06024020042f01e8022252450d0020042f01ea02215c0240024020042802b409221120042802b009470d00201141016a225d2011490d99012011410174225e205d205e205d4b1b225d4104205d41044b1bad422c7e220d422088a745410274215d200da7215e0240024020110d00200441003602d00a0c010b200441043602d80a200420042802ac093602d00a20042011412c6c3602d40a0b200441c00a6a205e205d200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a3602ac0920042011412c6e3602b00920042802b40921110b20042802ac092011412c6c6a2211205c205f20521b225f3b012820112014206020131b22603b010420112012360200201141266a20513b0100201141246a2050206120471b22613b0100201141226a20463b0100201141206a20452062203d1b22623b01002011411e6a203c3b01002011411c6a203b206320341b22633b01002011411a6a20333b0100201141186a20322064202c1b22643b0100201141166a202b3b0100201141146a202a206520251b22653b0100201141126a20243b0100201141106a20232066201f1b22663b01002011410e6a201e3b01002011410c6a201d2067201a1b22673b01002011410a6a20193b0100201141086a2018206820161b22683b0100201141066a20153b0100200420042802b40941016a3602b4090c080b20110d99010c97010b20004281808080203702000c93010b2002280200200441a00a6a10a0022211450d412011280200211220044188046a200441bc086a2001109a0620042f0188042213450d4220042f018a04211420012f0120211520044180046a200441bc086a200141226a109a0620042f0180042216450d4320042f0182042118200141c2006a2f01002119200441f8036a200441bc086a200141c4006a109a0620042f01f803221a450d4420042f01fa03211d200141e4006a2f0100211e200441f0036a200441bc086a200141e6006a109a0620042f01f003221f450d4520042f01f203212320014186016a2f01002124200441e8036a200441bc086a20014188016a109a0620042f01e8032225450d4620042f01ea03212a200141a8016a2f0100212b200441e0036a200441bc086a200141aa016a109a0620042f01e003222c450d4720042f01e2032132200141ca016a2f01002133200441d8036a200441bc086a200141cc016a109a0620042f01d8032234450d4820042f01da03213b200141ec016a2f0100213c200441d0036a200441bc086a200141ee016a109a0620042f01d003223d450d4920042f01d20321452001418e026a2f01002146200441c8036a200441bc086a20014190026a109a0620042f01c8032247450d4a20042f01ca032150200141b0026a2f01002151200441c0036a200441bc086a200141b2026a109a0620042f01c0032252450d4b20042f01c203215c200141d2026a2f0100215d200441b8036a200441bc086a200141d4026a109a06024020042f01b803225e450d0020042f01ba0321690240024020042802c009221120042802bc09470d00201141016a226a2011490d98012011410174226b206a206b206a4b1b226a4104206a41044b1bad42307e220d422088a745410274216a200da7216b0240024020110d00200441003602d00a0c010b200441043602d80a200420042802b8093602d00a2004201141306c3602d40a0b200441c00a6a206b206a200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a3602b8092004201141306e3602bc0920042802c00921110b20042802b809201141306c6a22112069206c205e1b226c3b012c20112014206d20131b226d3b0104201120123602002011412a6a205d3b0100201141286a205c206e20521b226e3b0100201141266a20513b0100201141246a2050206f20471b226f3b0100201141226a20463b0100201141206a20452070203d1b22703b01002011411e6a203c3b01002011411c6a203b207120341b22713b01002011411a6a20333b0100201141186a20322072202c1b22723b0100201141166a202b3b0100201141146a202a207320251b22733b0100201141126a20243b0100201141106a20232074201f1b22743b01002011410e6a201e3b01002011410c6a201d2075201a1b22753b01002011410a6a20193b0100201141086a2018207620161b22763b0100201141066a20153b0100200420042802c00941016a3602c0090c070b20110d98010c96010b20004281808080203702000c92010b2002280200200441a00a6a10a0022211450d4b20112802002112200441e8046a200441bc086a2001109a0620042f01e8042213450d4c20042f01ea04211420012f01202115200441e0046a200441bc086a200141226a109a0620042f01e0042216450d4d20042f01e2042118200141c2006a2f01002119200441d8046a200441bc086a200141c4006a109a0620042f01d804221a450d4e20042f01da04211d200141e4006a2f0100211e200441d0046a200441bc086a200141e6006a109a0620042f01d004221f450d4f20042f01d204212320014186016a2f01002124200441c8046a200441bc086a20014188016a109a0620042f01c8042225450d5020042f01ca04212a200141a8016a2f0100212b200441c0046a200441bc086a200141aa016a109a0620042f01c004222c450d5120042f01c2042132200141ca016a2f01002133200441b8046a200441bc086a200141cc016a109a0620042f01b8042234450d5220042f01ba04213b200141ec016a2f0100213c200441b0046a200441bc086a200141ee016a109a0620042f01b004223d450d5320042f01b20421452001418e026a2f01002146200441a8046a200441bc086a20014190026a109a0620042f01a8042247450d5420042f01aa042150200141b0026a2f01002151200441a0046a200441bc086a200141b2026a109a0620042f01a0042252450d5520042f01a204215c200141d2026a2f0100215d20044198046a200441bc086a200141d4026a109a0620042f019804225e450d5620042f019a042169200141f4026a2f0100216a20044190046a200441bc086a200141f6026a109a06024020042f019004226b450d0020042f01920421770240024020042802cc09221120042802c809470d00201141016a22782011490d9701201141017422792078207920784b1b22784104207841044b1bad42347e220d422088a7454102742178200da721790240024020110d00200441003602d00a0c010b200441043602d80a200420042802c4093602d00a2004201141346c3602d40a0b200441c00a6a20792078200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a3602c4092004201141346e3602c80920042802cc0921110b20042802c409201141346c6a22112077207a206b1b227a3b013020112014207b20131b227b3b0104201120123602002011412e6a206a3b01002011412c6a2069207c205e1b227c3b01002011412a6a205d3b0100201141286a205c207d20521b227d3b0100201141266a20513b0100201141246a2050207e20471b227e3b0100201141226a20463b0100201141206a2045207f203d1b227f3b01002011411e6a203c3b01002011411c6a203b20800120341b2280013b01002011411a6a20333b0100201141186a2032208101202c1b2281013b0100201141166a202b3b0100201141146a202a20820120251b2282013b0100201141126a20243b0100201141106a2023208301201f1b2283013b01002011410e6a201e3b01002011410c6a201d208401201a1b2284013b01002011410a6a20193b0100201141086a201820850120161b2285013b0100201141066a20153b0100200420042802cc0941016a3602cc090c060b20110d97010c95010b20004281808080203702000c91010b2002280200200441a00a6a10a0022211450d5620112802002112200441d0056a200441bc086a2001109a0620042f01d0052213450d5720042f01d205211420012f01202115200441c8056a200441bc086a200141226a109a0620042f01c8052216450d5820042f01ca052118200141c2006a2f01002119200441c0056a200441bc086a200141c4006a109a0620042f01c005221a450d5920042f01c205211d200141e4006a2f0100211e200441b8056a200441bc086a200141e6006a109a0620042f01b805221f450d5a20042f01ba05212320014186016a2f01002124200441b0056a200441bc086a20014188016a109a0620042f01b0052225450d5b20042f01b205212a200141a8016a2f0100212b200441a8056a200441bc086a200141aa016a109a0620042f01a805222c450d5c20042f01aa052132200141ca016a2f01002133200441a0056a200441bc086a200141cc016a109a0620042f01a0052234450d5d20042f01a205213b200141ec016a2f0100213c20044198056a200441bc086a200141ee016a109a0620042f019805223d450d5e20042f019a0521452001418e026a2f0100214620044190056a200441bc086a20014190026a109a0620042f0190052247450d5f20042f0192052150200141b0026a2f0100215120044188056a200441bc086a200141b2026a109a0620042f0188052252450d6020042f018a05215c200141d2026a2f0100215d20044180056a200441bc086a200141d4026a109a0620042f018005225e450d6120042f0182052169200141f4026a2f0100216a200441f8046a200441bc086a200141f6026a109a0620042f01f804226b450d6220042f01fa04217720014196036a2f01002178200441f0046a200441bc086a20014198036a109a06024020042f01f0042279450d0020042f01f2042186010240024020042802d809221120042802d409470d00201141016a2287012011490d960120114101742288012087012088012087014b1b228701410420870141044b1bad42387e220d422088a745410274218701200da72188010240024020110d00200441003602d00a0c010b200441043602d80a200420042802d0093602d00a2004201141386c3602d40a0b200441c00a6a208801208701200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a3602d0092004201141386e3602d40920042802d80921110b20042802d009201141386c6a221120860120890120791b2289013b013420112014208a0120131b228a013b010420112012360200201141326a20783b0100201141306a2077208b01206b1b228b013b01002011412e6a206a3b01002011412c6a2069208c01205e1b228c013b01002011412a6a205d3b0100201141286a205c208d0120521b228d013b0100201141266a20513b0100201141246a2050208e0120471b228e013b0100201141226a20463b0100201141206a2045208f01203d1b228f013b01002011411e6a203c3b01002011411c6a203b20900120341b2290013b01002011411a6a20333b0100201141186a2032209101202c1b2291013b0100201141166a202b3b0100201141146a202a20920120251b2292013b0100201141126a20243b0100201141106a2023209301201f1b2293013b01002011410e6a201e3b01002011410c6a201d209401201a1b2294013b01002011410a6a20193b0100201141086a201820950120161b2295013b0100201141066a20153b0100200420042802d80941016a3602d8090c050b20110d96010c94010b20004281808080203702000c90010b2002280200200441a00a6a10a0022211450d6220112802002112200441c0066a200441bc086a2001109a0620042f01c0062213450d6320042f01c206211420012f01202115200441b8066a200441bc086a200141226a109a0620042f01b8062216450d6420042f01ba062118200141c2006a2f01002119200441b0066a200441bc086a200141c4006a109a0620042f01b006221a450d6520042f01b206211d200141e4006a2f0100211e200441a8066a200441bc086a200141e6006a109a0620042f01a806221f450d6620042f01aa06212320014186016a2f01002124200441a0066a200441bc086a20014188016a109a0620042f01a0062225450d6720042f01a206212a200141a8016a2f0100212b20044198066a200441bc086a200141aa016a109a0620042f019806222c450d6820042f019a062132200141ca016a2f0100213320044190066a200441bc086a200141cc016a109a0620042f0190062234450d6920042f019206213b200141ec016a2f0100213c20044188066a200441bc086a200141ee016a109a0620042f018806223d450d6a20042f018a0621452001418e026a2f0100214620044180066a200441bc086a20014190026a109a0620042f0180062247450d6b20042f0182062150200141b0026a2f01002151200441f8056a200441bc086a200141b2026a109a0620042f01f8052252450d6c20042f01fa05215c200141d2026a2f0100215d200441f0056a200441bc086a200141d4026a109a0620042f01f005225e450d6d20042f01f2052169200141f4026a2f0100216a200441e8056a200441bc086a200141f6026a109a0620042f01e805226b450d6e20042f01ea05217720014196036a2f01002178200441e0056a200441bc086a20014198036a109a0620042f01e0052279450d6f20042f01e205218601200141b8036a2f0100218701200441d8056a200441bc086a200141ba036a109a06024020042f01d805228801450d0020042f01da052196010240024020042802e409221120042802e009470d00201141016a2297012011490d950120114101742298012097012098012097014b1b229701410420970141044b1bad423c7e220d422088a745410274219701200da72198010240024020110d00200441003602d00a0c010b200441043602d80a200420042802dc093602d00a20042011413c6c3602d40a0b200441c00a6a209801209701200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a3602dc0920042011413c6e3602e00920042802e40921110b20042802dc092011413c6c6a22112096012099012088011b2299013b013820112014209a0120131b229a013b010420112012360200201141366a2087013b0100201141346a208601209b0120791b229b013b0100201141326a20783b0100201141306a2077209c01206b1b229c013b01002011412e6a206a3b01002011412c6a2069209d01205e1b229d013b01002011412a6a205d3b0100201141286a205c209e0120521b229e013b0100201141266a20513b0100201141246a2050209f0120471b229f013b0100201141226a20463b0100201141206a204520a001203d1b22a0013b01002011411e6a203c3b01002011411c6a203b20a10120341b22a1013b01002011411a6a20333b0100201141186a203220a201202c1b22a2013b0100201141166a202b3b0100201141146a202a20a30120251b22a3013b0100201141126a20243b0100201141106a202320a401201f1b22a4013b01002011410e6a201e3b01002011410c6a201d20a501201a1b22a5013b01002011410a6a20193b0100201141086a201820a60120161b22a6013b0100201141066a20153b0100200420042802e40941016a3602e4090c040b20110d95010c93010b20004281808080203702000c8f010b2002280200200441a00a6a10a0022211450d6f20112802002112200441b8076a200441bc086a2001109a0620042f01b8072213450d7020042f01ba07211420012f01202115200441b0076a200441bc086a200141226a109a0620042f01b0072216450d7120042f01b2072118200141c2006a2f01002119200441a8076a200441bc086a200141c4006a109a0620042f01a807221a450d7220042f01aa07211d200141e4006a2f0100211e200441a0076a200441bc086a200141e6006a109a0620042f01a007221f450d7320042f01a207212320014186016a2f0100212420044198076a200441bc086a20014188016a109a0620042f0198072225450d7420042f019a07212a200141a8016a2f0100212b20044190076a200441bc086a200141aa016a109a0620042f019007222c450d7520042f0192072132200141ca016a2f0100213320044188076a200441bc086a200141cc016a109a0620042f0188072234450d7620042f018a07213b200141ec016a2f0100213c20044180076a200441bc086a200141ee016a109a0620042f018007223d450d7720042f01820721452001418e026a2f01002146200441f8066a200441bc086a20014190026a109a0620042f01f8062247450d7820042f01fa062150200141b0026a2f01002151200441f0066a200441bc086a200141b2026a109a0620042f01f0062252450d7920042f01f206215c200141d2026a2f0100215d200441e8066a200441bc086a200141d4026a109a0620042f01e806225e450d7a20042f01ea062169200141f4026a2f0100216a200441e0066a200441bc086a200141f6026a109a0620042f01e006226b450d7b20042f01e206217720014196036a2f01002178200441d8066a200441bc086a20014198036a109a0620042f01d8062279450d7c20042f01da06218601200141b8036a2f0100218701200441d0066a200441bc086a200141ba036a109a0620042f01d006228801450d7d20042f01d206219601200141da036a2f0100219701200441c8066a200441bc086a200141dc036a109a06024020042f01c806229801450d0020042f01ca0621a7010240024020042802f009221120042802ec09470d00201141016a22a8012011490d9401201141017422a90120a80120a90120a8014b1b22a801410420a80141044b1b22a80141ffffff1f7120a8014641027421a90120a80141067421a8010240024020110d00200441003602d00a0c010b200441043602d80a200420042802e8093602d00a200420114106743602d40a0b200441c00a6a20a80120a901200441d00a6a107d20042802c80a211120042802c00a4101460d01200420042802c40a3602e809200420114106763602ec0920042802f00921110b20042802e80920114106746a221120a70120aa012098011b22aa013b013c2011201420ab0120131b22ab013b0104201120123602002011413a6a2097013b0100201141386a20960120ac012088011b22ac013b0100201141366a2087013b0100201141346a20860120ad0120791b22ad013b0100201141326a20783b0100201141306a207720ae01206b1b22ae013b01002011412e6a206a3b01002011412c6a206920af01205e1b22af013b01002011412a6a205d3b0100201141286a205c20b00120521b22b0013b0100201141266a20513b0100201141246a205020b10120471b22b1013b0100201141226a20463b0100201141206a204520b201203d1b22b2013b01002011411e6a203c3b01002011411c6a203b20b30120341b22b3013b01002011411a6a20333b0100201141186a203220b401202c1b22b4013b0100201141166a202b3b0100201141146a202a20b50120251b22b5013b0100201141126a20243b0100201141106a202320b601201f1b22b6013b01002011410e6a201e3b01002011410c6a201d20b701201a1b22b7013b01002011410a6a20193b0100201141086a201820b80120161b22b8013b0100201141066a20153b0100200420042802f00941016a3602f0090c030b20110d94010c92010b20004281808080203702000c8e010b2002280200200441a00a6a10a0022211450d7d20112802002112200441b8086a200441bc086a2001109a0620042f01b8082213450d7e20042f01ba08211420012f01202115200441b0086a200441bc086a200141226a109a0620042f01b0082216450d7f20042f01b2082118200141c2006a2f01002119200441a8086a200441bc086a200141c4006a109a0620042f01a808221a450d800120042f01aa08211d200141e4006a2f0100211e200441a0086a200441bc086a200141e6006a109a0620042f01a008221f450d810120042f01a208212320014186016a2f0100212420044198086a200441bc086a20014188016a109a0620042f0198082225450d820120042f019a08212a200141a8016a2f0100212b20044190086a200441bc086a200141aa016a109a0620042f019008222c450d830120042f0192082132200141ca016a2f0100213320044188086a200441bc086a200141cc016a109a0620042f0188082234450d840120042f018a08213b200141ec016a2f0100213c20044180086a200441bc086a200141ee016a109a0620042f018008223d450d850120042f01820821452001418e026a2f01002146200441f8076a200441bc086a20014190026a109a0620042f01f8072247450d860120042f01fa072150200141b0026a2f01002151200441f0076a200441bc086a200141b2026a109a0620042f01f0072252450d870120042f01f207215c200141d2026a2f0100215d200441e8076a200441bc086a200141d4026a109a0620042f01e807225e450d880120042f01ea072169200141f4026a2f0100216a200441e0076a200441bc086a200141f6026a109a0620042f01e007226b450d890120042f01e207217720014196036a2f01002178200441d8076a200441bc086a20014198036a109a0620042f01d8072279450d8a0120042f01da07218601200141b8036a2f0100218701200441d0076a200441bc086a200141ba036a109a0620042f01d007228801450d8b0120042f01d207219601200141da036a2f0100219701200441c8076a200441bc086a200141dc036a109a0620042f01c807229801450d8c0120042f01ca0721a701200141fc036a2f010021a801200441c0076a200441bc086a200141fe036a109a0620042f01c00722a901450d0220042f01c20721b901024020042802fc09221120042802f809470d00201141016a22ba012011490d9101201141017422bb0120ba0120bb0120ba014b1b22ba01410420ba0141044b1bad42c4007e220d422088a74541027421ba01200da721bb010240024020110d00200441003602d00a0c010b200441043602d80a200420042802f4093602d00a2004201141c4006c3602d40a0b200441c00a6a20bb0120ba01200441d00a6a107d20042802c80a211120042802c00a4101460d02200420042802c40a3602f4092004201141c4006e3602f80920042802fc0921110b20042802f409201141c4006c6a221120b90120bc0120a9011b22bc013b01402011201420bd0120131b22bd013b0104201120123602002011413e6a20a8013b01002011413c6a20a70120be012098011b22be013b01002011413a6a2097013b0100201141386a20960120bf012088011b22bf013b0100201141366a2087013b0100201141346a20860120c00120791b22c0013b0100201141326a20783b0100201141306a207720c101206b1b22c1013b01002011412e6a206a3b01002011412c6a206920c201205e1b22c2013b01002011412a6a205d3b0100201141286a205c20c30120521b22c3013b0100201141266a20513b0100201141246a205020c40120471b22c4013b0100201141226a20463b0100201141206a204520c501203d1b22c5013b01002011411e6a203c3b01002011411c6a203b20c60120341b22c6013b01002011411a6a20333b0100201141186a203220c701202c1b22c7013b0100201141166a202b3b0100201141146a202a20c80120251b22c8013b0100201141126a20243b0100201141106a202320c901201f1b22c9013b01002011410e6a201e3b01002011410c6a201d20ca01201a1b22ca013b01002011410a6a20193b0100201141086a201820cb0120161b22cb013b0100201141066a20153b0100200420042802fc0941016a3602fc090b200ca72211450d8e01201141226c450d8e010c8d010b20110d90010c8e010b20004281808080203702000c8a010b200ca72211450d8b01201141226c0d8a010c8b010b20004281808080103702000c88010b20004281808080203702000c87010b20004281808080203702000c86010b20004281808080203702000c85010b20004281808080203702000c84010b20004281808080203702000c83010b20004281808080203702000c82010b20004281808080203702000c81010b20004281808080203702000c80010b20004281808080203702000c7f0b20004281808080203702000c7e0b20004281808080203702000c7d0b20004281808080203702000c7c0b20004281808080203702000c7b0b20004281808080203702000c7a0b20004281808080203702000c790b20004281808080203702000c780b20004281808080203702000c770b20004281808080203702000c760b20004281808080203702000c750b20004281808080203702000c740b20004281808080203702000c730b20004281808080203702000c720b20004281808080203702000c710b20004281808080203702000c700b20004281808080203702000c6f0b20004281808080203702000c6e0b20004281808080203702000c6d0b20004281808080203702000c6c0b20004281808080203702000c6b0b20004281808080203702000c6a0b20004281808080203702000c690b20004281808080203702000c680b20004281808080203702000c670b20004281808080203702000c660b20004281808080203702000c650b20004281808080203702000c640b20004281808080203702000c630b20004281808080203702000c620b20004281808080203702000c610b20004281808080203702000c600b20004281808080203702000c5f0b20004281808080203702000c5e0b20004281808080203702000c5d0b20004281808080203702000c5c0b20004281808080203702000c5b0b20004281808080203702000c5a0b20004281808080203702000c590b20004281808080203702000c580b20004281808080203702000c570b20004281808080203702000c560b20004281808080203702000c550b20004281808080203702000c540b20004281808080203702000c530b20004281808080203702000c520b20004281808080203702000c510b20004281808080203702000c500b20004281808080203702000c4f0b20004281808080203702000c4e0b20004281808080203702000c4d0b20004281808080203702000c4c0b20004281808080203702000c4b0b20004281808080203702000c4a0b20004281808080203702000c490b20004281808080203702000c480b20004281808080203702000c470b20004281808080203702000c460b20004281808080203702000c450b20004281808080203702000c440b20004281808080203702000c430b20004281808080203702000c420b20004281808080203702000c410b20004281808080203702000c400b20004281808080203702000c3f0b20004281808080203702000c3e0b20004281808080203702000c3d0b20004281808080203702000c3c0b20004281808080203702000c3b0b20004281808080203702000c3a0b20004281808080203702000c390b20004281808080203702000c380b20004281808080203702000c370b20004281808080203702000c360b20004281808080203702000c350b20004281808080203702000c340b20004281808080203702000c330b20004281808080203702000c320b20004281808080203702000c310b20004281808080203702000c300b20004281808080203702000c2f0b20004281808080203702000c2e0b20004281808080203702000c2d0b20004281808080203702000c2c0b20004281808080203702000c2b0b20004281808080203702000c2a0b20004281808080203702000c290b20004281808080203702000c280b20004281808080203702000c270b20004281808080203702000c260b20004281808080203702000c250b20004281808080203702000c240b20004281808080203702000c230b20004281808080203702000c220b20004281808080203702000c210b20004281808080203702000c200b20004281808080203702000c1f0b20004281808080203702000c1e0b20004281808080203702000c1d0b20004281808080203702000c1c0b20004281808080203702000c1b0b20004281808080203702000c1a0b20004281808080203702000c190b20004281808080203702000c180b20004281808080203702000c170b20004281808080203702000c160b20004281808080203702000c150b20004281808080203702000c140b20004281808080203702000c130b20004281808080203702000c120b20004281808080203702000c110b20004281808080203702000c100b20004281808080203702000c0f0b20004281808080203702000c0e0b20004281808080203702000c0d0b20004281808080203702000c0c0b20004281808080203702000c0b0b20004281808080203702000c0a0b20004281808080203702000c090b20004281808080203702000c080b20004281808080203702000c070b20004281808080203702000c060b20004281808080203702000c050b20004281808080203702000c040b20004281808080203702000c030b20004281808080203702000c020b20004281808080203702000c010b20004281808080203702000b0240200ca72207450d00200741226c450d002001102e0b02402003450d002006412c6a210103400240200141046a2802002206450d00200641226c450d002001280200102e0b2001412c6a2101200341546a22030d000b0b02402008450d002008412c6c450d002005102e0b200441c0086a109b060c070b2001102e0b200341546a21032006412c6a22062007470d010c040b0b1038000b1036000b20072001460d00034020012203412c6a21010240200341046a2802002206450d00200641226c450d002003280200102e0b20072001470d000b0b02402008450d002008412c6c450d002005102e0b200041046a200441c0086a41c00110e9081a200041003602000b200441e00a6a24000bc60101067f02400240200128020022012802042203450d00200128020021040340200341046a210520032f015e22064102742101410021070240024003402001450d0120022005280200412010ec082208450d022001417c6a2101200741016a2107200541046a21052008417f4a0d000b2007417f6a21060b2004450d022004417f6a2104200320064102746a41e0006a28020021030c010b0b200320074102746a41306a2802002205418080044921010c010b410021010b200020053b0102200020013b01000bf70301017f0240200041046a28020041ffffffff0171450d002000280200102e0b0240200041106a2802002201450d002001410c6c450d00200028020c102e0b02402000411c6a28020041ffffffff0071450d002000280218102e0b0240200041286a2802002201450d00200141146c450d002000280224102e0b0240200041346a2802002201450d00200141186c450d002000280230102e0b0240200041c0006a2802002201450d002001411c6c450d00200028023c102e0b0240200041cc006a28020041ffffff3f71450d002000280248102e0b0240200041d8006a2802002201450d00200141246c450d002000280254102e0b0240200041e4006a2802002201450d00200141286c450d002000280260102e0b0240200041f0006a2802002201450d002001412c6c450d00200028026c102e0b0240200041fc006a2802002201450d00200141306c450d002000280278102e0b024020004188016a2802002201450d00200141346c450d00200028028401102e0b024020004194016a2802002201450d00200141386c450d00200028029001102e0b0240200041a0016a2802002201450d002001413c6c450d00200028029c01102e0b0240200041ac016a28020041ffffff1f71450d0020002802a801102e0b0240200041b8016a2802002201450d00200141c4006c450d0020002802b401102e0b0b8c5103037f017e017f230041106b220224000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002d00000e18000102030405060708090a0b0c0d0e0f1011121314151617180b200241003a00002001200241011074024002400240024002400240200041086a2d00000e060001020304051d0b200241003a00002001200241011074200041106a290300200041186a2d0000200041196a2d0000200110be030c1c0b200241013a000020012002410110742000410c6a2d00002000410d6a2d00002000410e6a2d00002001109d06200041186a290300200041206a2d0000200041216a2d0000200110be030c1b0b200241023a000020012002410110740c1a0b200241033a000020012002410110742001200041096a412010740c190b200241043a000020012002410110742001200041096a412010740c180b200241053a000020012002410110742001200041096a412010744120102c2203450d1820024220370204200220033602002002200041296a41201074200120022802002200200228020810742002280204450d172000102e0c170b200241013a00002001200241011074024002400240200041046a2802000e03000102190b200241003a000020012002410110742002200041086a280200360200200120024104107420022000410c6a28020036020020012002410410740c180b200241013a000020012002410110742002200041086a280200360200200120024104107420022000410c6a28020036020020012002410410740c170b200241023a000020012002410110742002200041086a280200360200200120024104107420022000410c6a280200360200200120024104107402400240200041106a28020022030d00200241003a000020012002410110740c010b200241013a00002001200241011074200041186a28020022042001107620012003200410740b024020002d001c4106460d00200241013a0000200120024101107420002d001c2000411d6a2d00002000411e6a2d00002001109d060c170b200241003a000020012002410110740c160b200241043a00002001200241011074024002400240200041046a2d00000e03000102180b200241003a000020012002410110742001200041056a412010742002200041286a28020036020020012002410410740c170b200241013a000020012002410110742002200041086a28020036020020012002410410740c160b200241023a000020012002410110742002200041286a28020036020020012002410410742001200041056a412010740c150b200241053a0000200120024101107402400240024002400240024002400240200041086a2d00000e080001020304050607000b200241003a000020012002410110742001200041096a41201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c1b0b200241013a000020012002410110742001200041096a41201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c1a0b200241023a000020012002410110742001200041096a412010742001200041296a41201074200041d0006a29030021052002200041d8006a2903003703082002200537030020012002411010740c190b200241033a000020012002410110742001200041096a41201074200041306a29030021052002200041386a290300370308200220053703002001200241101074200041c0006a29030021052002200041c8006a2903003703082002200537030020012002411010740c180b200241043a000020012002410110742001200041096a41201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c170b200241053a000020012002410110742001200041096a41201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c160b200241063a000020012002410110742001200041096a41201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c150b200241073a000020012002410110742001200041096a412010742001200041296a41201074200041d0006a29030021052002200041d8006a2903003703082002200537030020012002411010740240200041c9006a2d00004101460d00200241003a000020012002410110740c150b200241013a000020012002410110740c140b200241073a00002001200241011074024002400240024002400240024002400240200041086a2d00000e090001020304050607081c0b200241003a0000200120024101107420022000410c6a2802003602002001200241041074200041106a29030021052002200041186a290300370308200220053703002001200241101074200041206a29030021052002200041286a2903003703082002200537030020012002411010740c1b0b200241013a000020012002410110742001200041096a41201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c1a0b200241023a000020012002410110742001200041096a41201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c190b200241033a0000200120024101107420022000410c6a28020036020020012002410410740c180b200241043a000020012002410110740c170b200241053a000020012002410110742001200041096a41201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c160b200241063a000020012002410110742001200041096a41201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c150b200241073a000020012002410110742001200041096a41201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c140b200241083a000020012002410110742001200041096a412010742001200041296a412010740c130b200241083a00002001200241011074200241003a000020012002410110742001200041106a41101074200041046a28020021032000410c6a28020022042001107620012003200410742002200041206a2d00003a000020012002410110740c120b200241093a00002001200241011074200241003a000020012002410110742002200041046a28020036020020012002410410740c110b2002410b3a00002001200241011074024002400240200041046a2802000e03000102130b200241003a00002001200241011074200041086a2802002103200041106a280200220020011076200041286c2200450d12200320006a2100034020012003412010742002200341206a2903003703002001200241081074200341286a22032000470d000c130b0b200241013a000020012002410110740c110b200241023a000020012002410110740c100b2002410c3a00002001200241011074024002400240200041046a2d00000e03000102120b200241003a000020012002410110742001200041056a412010740c110b200241013a000020012002410110740c100b200241023a00002001200241011074200041086a2802002103200041106a280200220020011076200041d0006c2200450d0f03402003200110a101200341d0006a2103200041b07f6a22000d000c100b0b2002410e3a00002001200241011074024002400240024002400240024002400240024002400240024002400240024002400240200041086a2d00000e12000102030405060708090a0b0c0d0e0f1011200b200241003a0000200120024101107420022000410c6a2802003602002001200241041074200041106a29030021052002200041186a2903003703082002200537030020012002411010740c1f0b200241013a0000200120024101107420022000410c6a2802003602002001200241041074200041206a29030021052002200041286a290300370308200220053703002001200241101074200041106a2802002103200041186a2802002200200110762000450d1e2000410574210003402001200341201074200341206a2103200041606a22000d000c1f0b0b200241023a000020012002410110740c1d0b200241033a0000200120024101107420022000410c6a2802003602002001200241041074024002400240200041096a2d00000e030001021f0b200241003a000020012002410110740c1e0b200241013a000020012002410110740c1d0b200241023a000020012002410110740c1c0b200241043a0000200120024101107420022000410c6a28020036020020012002410410740c1b0b200241053a0000200120024101107420022000410c6a28020036020020012002410410740c1a0b200241063a0000200120024101107420022000410c6a28020036020020012002410410740c190b200241073a0000200120024101107420022000410c6a28020036020020012002410410742002200041096a2d00003a000020012002410110740c180b200241083a000020012002410110742001200041096a412010742001200041296a412010740c170b200241093a000020012002410110742001200041096a412010740c160b2002410a3a000020012002410110742001200041096a412010744120102c2203450d1620024220370204200220033602002002200041296a412010742001200228020022032002280208107402402002280204450d002003102e0b2002200028024c36020020012002410410740c150b2002410b3a000020012002410110744120102c2203450d15200041296a210420024220370204200220033602002002200041096a412010742001200228020022032002280208107402402002280204450d002003102e0b2001200441201074200029035021052002200041d8006a2903003703082002200537030020012002411010740c140b2002410c3a000020012002410110744120102c2203450d14200041296a210420024220370204200220033602002002200041096a412010742001200228020022032002280208107402402002280204450d002003102e0b2001200441201074200029035021052002200041d8006a2903003703082002200537030020012002411010740c130b2002410d3a000020012002410110744120102c2203450d1320024220370204200220033602002002200041096a412010742001200228020022032002280208107402402002280204450d002003102e0b2002200028022c36020020012002410410740c120b2002410e3a000020012002410110744120102c2203450d1220024220370204200220033602002002200041096a412010742001200228020022032002280208107402402002280204450d002003102e0b2002200028022c36020020012002410410740c110b2002410f3a000020012002410110744120102c2203450d11200041c9006a2104200041296a210620024220370204200220033602002002200041096a412010742001200228020022032002280208107402402002280204450d002003102e0b2001200641201074200029037021052002200041f8006a29030037030820022005370300200120024110107420012004412010740c100b200241103a000020012002410110742001200041096a412010740c0f0b200241113a000020012002410110744120102c2203450d0f20024220370204200220033602002002200041096a41201074200120022802002200200228020810742002280204450d0e2000102e0c0e0b2002410f3a000020012002410110740240024002400240024002400240200041046a2d00000e0700010203040506140b200241003a000020012002410110742001200041056a412010742002200041c8006a28020036020020012002410410744120102c2203450d1420024220370204200220033602002002200041256a412010742001200228020022032002280208107402402002280204450d002003102e0b2002200028024c36020020012002410410740c130b200241013a000020012002410110742001200041056a412010744120102c2203450d1320024220370204200220033602002002200041256a412010742001200228020022032002280208107402402002280204450d002003102e0b200220002d00453a000020012002410110742002200028024836020020012002410410742002200028024c36020020012002410410740c120b200241023a000020012002410110744120102c2203450d1220024220370204200220033602002002200041056a41201074200120022802002200200228020810742002280204450d112000102e0c110b200241033a000020012002410110744120102c2203450d1120024220370204200220033602002002200041056a41201074200120022802002200200228020810742002280204450d102000102e0c100b200241043a000020012002410110744120102c2203450d1020024220370204200220033602002002200041056a412010742001200228020022032002280208107402402002280204450d002003102e0b024020002d00284106460d00200241013a0000200120024101107420002d0028200041296a2d00002000412a6a2d00002001109d060c100b200241003a000020012002410110740c0f0b200241053a000020012002410110744120102c2203450d0f20024220370204200220033602002002200041056a412010742001200228020022032002280208107402402002280204450d002003102e0b024020002d00284106460d00200241013a0000200120024101107420002d0028200041296a2d00002000412a6a2d00002001109d060c0f0b200241003a000020012002410110740c0e0b200241063a000020012002410110744120102c2203450d0e20024220370204200220033602002002200041056a412010742001200228020022032002280208107402402002280204450d002003102e0b2002200028022836020020012002410410742002200028022c36020020012002410410740c0d0b200241103a000020012002410110740240024002400240024002400240200041046a2d00000e0700010203040506130b200241003a000020012002410110742001200041056a412010742002200041c8006a28020036020020012002410410744120102c2203450d1320024220370204200220033602002002200041256a412010742001200228020022032002280208107402402002280204450d002003102e0b2002200028024c36020020012002410410740c120b200241013a000020012002410110742001200041056a412010744120102c2203450d1220024220370204200220033602002002200041256a412010742001200228020022032002280208107402402002280204450d002003102e0b200220002d00453a000020012002410110742002200028024836020020012002410410742002200028024c36020020012002410410740c110b200241023a000020012002410110744120102c2203450d1120024220370204200220033602002002200041056a41201074200120022802002200200228020810742002280204450d102000102e0c100b200241033a000020012002410110744120102c2203450d1020024220370204200220033602002002200041056a41201074200120022802002200200228020810742002280204450d0f2000102e0c0f0b200241043a000020012002410110744120102c2203450d0f20024220370204200220033602002002200041056a412010742001200228020022032002280208107402402002280204450d002003102e0b024020002d00284106460d00200241013a0000200120024101107420002d0028200041296a2d00002000412a6a2d00002001109d060c0f0b200241003a000020012002410110740c0e0b200241053a000020012002410110744120102c2203450d0e20024220370204200220033602002002200041056a412010742001200228020022032002280208107402402002280204450d002003102e0b024020002d00284106460d00200241013a0000200120024101107420002d0028200041296a2d00002000412a6a2d00002001109d060c0e0b200241003a000020012002410110740c0d0b200241063a000020012002410110744120102c2203450d0d20024220370204200220033602002002200041056a412010742001200228020022032002280208107402402002280204450d002003102e0b2002200028022836020020012002410410742002200028022c36020020012002410410740c0c0b200241113a000020012002410110740240024002400240024002400240200041086a2d00000e0700010203040506120b200241003a000020012002410110742000410c6a2802002103200041146a280200220020011076200041306c2200450d11200320006a210003402001200341201074200341206a29030021052002200341286a290300370308200220053703002001200241101074200341306a22032000470d000c120b0b200241013a000020012002410110740c100b200241023a000020012002410110740c0f0b200241033a000020012002410110742001200041096a412010740c0e0b200241043a000020012002410110742001200041096a412010740c0d0b200241053a000020012002410110742001200041096a41201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c0c0b200241063a000020012002410110742001200041096a41201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c0b0b200241123a0000200120024101107402400240024002400240024020002d00010e06000102030405100b200241003a000020012002410110740c0f0b200241013a000020012002410110740c0e0b200241023a000020012002410110740c0d0b200241033a000020012002410110740c0c0b200241043a000020012002410110740c0b0b200241053a000020012002410110740c0a0b200241133a000020012002410110740240024002400240024002400240200041086a2d00000e0700010203040506100b200241003a0000200120024101107420022000410c6a28020036020020012002410410740c0f0b200241013a00002001200241011074200041106a29030021052002200041186a2903003703082002200537030020012002411010740c0e0b200241023a0000200120024101107420022000412c6a2802003602002001200241041074200041306a29030021052002200041386a2903003703082002200537030020012002411010742001200041096a412010740c0d0b200241033a0000200120024101107420022000410c6a2802003602002001200241041074200041106a29030021052002200041186a2903003703082002200537030020012002411010740c0c0b200241043a00002001200241011074200041106a29030021052002200041186a2903003703082002200537030020012002411010740c0b0b200241053a00002001200241011074200041106a29030021052002200041186a2903003703082002200537030020012002411010740c0a0b200241063a00002001200241011074200041106a29030021052002200041186a2903003703082002200537030020012002411010740c090b200241183a00002001200241011074200241003a000020012002410110742001200041186a412010742001200041386a41141074200041086a29030021052002200041106a2903003703082002200537030020012002411010740c080b200241193a00002001200241011074200041096a21030240200041086a2d00004101460d00200241003a000020012002410110742001200341201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c080b200241013a0000200120024101107420012003412010740c070b2002411a3a000020012002410110740240200041086a2d00004106460d00200241003a000020012002410110742002200041046a280200360200200120024104107420002d0008200041096a2d00002000410a6a2d00002001109d060c070b200241013a000020012002410110740c060b2002411c3a000020012002410110740240024002400240024002400240024002400240200041086a2d00000e0a000102030405060708090f0b200241003a000020012002410110742001200041096a412010740c0e0b200241013a000020012002410110742001200041096a41201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c0d0b200241023a000020012002410110742001200041096a41201074200041306a29030021052002200041386a2903003703082002200537030020012002411010740c0c0b200241033a000020012002410110742001200041096a4120107420022000412c6a28020036020020012002410410740c0b0b200241043a000020012002410110742001200041096a4120107420022000412c6a28020036020020012002410410740c0a0b200241053a000020012002410110742001200041096a4120107420022000412c6a28020036020020012002410410740c090b200241063a0000200120024101107420022000410c6a28020036020020012002410410740c080b200241073a000020012002410110742001200041096a412010742001200041296a41201074200041d0006a29030021052002200041d8006a2903003703082002200537030020012002411010740c070b200241083a000020012002410110742001200041096a412010742001200041296a41201074200041d0006a29030021052002200041d8006a2903003703082002200537030020012002411010740c060b200241093a000020012002410110742001200041096a412010742001200041296a41201074200041d0006a29030021052002200041d8006a2903003703082002200537030020012002411010740c050b2002411d3a00002001200241011074024002400240200041046a2d00000e03000102070b200241003a000020012002410110740240200041086a2d00004106460d00200241013a0000200120024101107420002d0008200041096a2d00002000410a6a2d00002001109d060c070b200241003a000020012002410110740c060b200241013a000020012002410110742001200041056a412010742001200041256a412010740240024002400240024002400240200041c5006a2d00000e0700010203060405060b200241003a000020012002410110740c050b200241013a000020012002410110740c040b200241023a000020012002410110740c030b200241033a000020012002410110740c020b200241053a000020012002410110740c010b200241063a000020012002410110740b200220002f01463b010020012002410210740c050b200241023a000020012002410110742001200041056a412010742001200041256a412010744120102c2203450d0520024220370204200220033602002002200041c5006a41201074200120022802002200200228020810742002280204450d042000102e0c040b2002411e3a000020012002410110740240024002400240200041046a2d00000e0400010203000b200241003a000020012002410110742001200041056a412010742001200041256a412010742001200041c5006a412010740c060b200241013a000020012002410110742001200041056a412010742002200041e8006a28020036020020012002410410742002200041ec006a28020036020020012002410410742001200041256a412010742001200041c5006a412010740c050b200241023a000020012002410110742001200041056a412010742002200041e8006a28020036020020012002410410742002200041ec006a28020036020020012002410410742001200041256a412010742001200041c5006a412010740240200041f0006a2d00004106460d00200241013a0000200120024101107420002d0070200041f1006a2d0000200041f2006a2d00002001109d060c050b200241003a000020012002410110740c040b200241033a000020012002410110742001200041056a412010742002200041e8006a28020036020020012002410410742002200041ec006a28020036020020012002410410742001200041256a412010742001200041c5006a412010740c030b200241223a000020012002410110740240024002400240024002400240200041086a2d00000e0700010203040506090b200241003a0000200120024101107420022000410c6a28020036020020012002410410740c080b200241013a0000200120024101107420022000410c6a2802003602002001200241041074200041106a29030021052002200041186a2903003703082002200537030020012002411010740c070b200241023a0000200120024101107420022000410c6a28020036020020012002410410740c060b200241033a0000200120024101107420022000412c6a28020036020020012002410410742001200041096a412010740c050b200241043a0000200120024101107420022000412c6a2802003602002001200241041074200041306a29030021052002200041386a2903003703082002200537030020012002411010742001200041096a412010740c040b200241053a0000200120024101107420022000410c6a28020036020020012002410410740c030b200241063a0000200120024101107420022000410c6a28020036020020012002410410740c020b200241233a0000200120024101107402400240024002400240200041086a2d00000e050001020304060b200241003a000020012002410110744120102c2203450d0620024220370204200220033602002002200041096a41201074200120022802002200200228020810742002280204450d052000102e0c050b200241013a000020012002410110744120102c2203450d0520024220370204200220033602002002200041096a41201074200120022802002200200228020810742002280204450d042000102e0c040b200241023a000020012002410110744120102c2203450d04200041296a210420024220370204200220033602002002200041096a412010742001200228020022032002280208107402402002280204450d002003102e0b2001200441201074200029035021052002200041d8006a2903003703082002200537030020012002411010740c030b200241033a000020012002410110744120102c2203450d0320024220370204200220033602002002200041096a41201074200120022802002200200228020810742002280204450d022000102e0c020b200241043a000020012002410110744120102c2203450d02200041296a210420024220370204200220033602002002200041096a412010742001200228020022032002280208107402402002280204450d002003102e0b2001200441201074200029035021052002200041d8006a2903003703082002200537030020012002411010740c010b200241243a000020012002410110740240024002400240024002400240200041046a2d00000e06000102030405070b200241003a00002001200241011074024002400240200041056a2d00000e03000102090b200241003a000020012002410110740c080b200241013a000020012002410110740c070b200241023a000020012002410110740c060b200241013a000020012002410110740240200041056a2d000022004103470d00200241003a000020012002410110740c060b200241013a0000200120024101107402400240024020000e03000102080b200241003a000020012002410110740c070b200241013a000020012002410110740c060b200241023a000020012002410110740c050b200241023a000020012002410110742001200041056a412010740c040b200241033a000020012002410110742001200041056a412010740c030b200241043a000020012002410110742002200041086a2802003602000c010b200241053a000020012002410110742002200041086a2802003602000b20012002410410740b200241106a24000f0b1036000bd20101017f230041106b220424000240024002400240024002400240200041ff01710e06000102030405060b200441003a000f20032004410f6a410110740c050b200441013a000f20032004410f6a410110740c040b200441023a000f20032004410f6a410110740c030b200441033a000f20032004410f6a41011074200420013a000f20032004410f6a41011074200420023a000f20032004410f6a410110740c020b200441043a000f20032004410f6a410110740c010b200441053a000f20032004410f6a410110740b200441106a24000b1300200041063602042000418cc7cb003602000b130020004103360204200041c4fcc4003602000b130020004103360204200041f0e6c2003602000b130020004108360204200041ec82c8003602000b1300200041093602042000419cdec6003602000b130020004101360204200041c8aac0003602000b130020004101360204200041ccadc0003602000b130020004103360204200041e0a7c0003602000b130020004103360204200041c883c9003602000b130020004112360204200041b897cb003602000b130020004107360204200041e4edc9003602000b13002000410736020420004184aec2003602000b130020004106360204200041b8b9cc003602000b130020004107360204200041d894c4003602000b13002000410136020420004198f9c1003602000b130020004102360204200041d8eac7003602000b130020004102360204200041e8afc0003602000b13002000410a360204200041f8bec3003602000b13002000410336020420004184fbc0003602000b130020004104360204200041e4f9c3003602000b13002000410736020420004198e4c0003602000b1300200041053602042000419ce3c7003602000b130020004106360204200041d4afc8003602000b7201017f200028020022012001280200417f6a3602000240200028020022012802000d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200028020041046a22012001280200417f6a3602002000280200220041046a2802000d002000102e0b0b980301037f0240200028020022022802082001200228020c28020c110100450d00200041286a2d0000210002400240200128020022024117470d00024002400240024020012d0004417e6a0e050001020403040b2000450d0320012d0025220341ff01712000460d034101210420004101470d05200341ff0171450d050c040b2000450d0220012d0025220341ff01712000460d024101210420004101470d04200341ff0171450d040c030b20000d0341010f0b20000d0241010f0b4101210402400240024002400240024020000e0706010203000405060b000b2002411a4b0d05410120027441cfffbf3f710d04024020024104460d0020024114470d0641012104200141086a280200417f6a41024f0d060c050b20012d0004220141054b0d05410121044101200174412a71450d050c040b2002411a4b0d0441012002744180c0973171450d040c030b200241154b0d034101200274418085800171450d030c020b02402002416b6a0e020200030b200141086a2d0000410a470d020c010b20024117470d0120012d00044109470d010b20040f0b41000b7d01017f2000200110b6062102200028020022012001280200417f6a3602000240200028020022012802000d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200028020041046a22012001280200417f6a3602002000280200220041046a2802000d002000102e0b20020bb51302117f097e230041c0026b2202240020024198016a10f4040240024020022d0098014101460d002000410110f0060c010b200241e8016a22034200370300200241e0016a22044200370300200241d0016a41086a22054200370300200242003703d00120024180026a41a5fec600411a108102200520024180026a41086a220629000037030020022002290080023703d00120024180026a4194c5c800410e10810220032006290000370300200420022900800237030020024190016a200241d0016a4120108e022002280294012103200228029001210520024180026a200141306a1097062003410020051b21032002280288022105024020022802840241808080807872418080808078460d00200228028002102e0b024020032005460d002000410210f0060c010b200241d0016a41186a22064200370300200241d0016a41106a22074200370300200241d0016a41086a22054200370300200242003703d00120024180026a41a5fec600411a108102200520024180026a41086a220329000037030020022002290080023703d00120024180026a4184c4c800410e108102200441086a2003290000370000200420022900800237000020024180026a200241d0016a10ab05200241a0016a41086a22042003290300370300200241a0016a41106a220820024180026a41106a2209290300370300200241a0016a41186a220a20024180026a41186a220b290300370300200241a0016a41206a220c20024180026a41206a220d290300370300200241a0016a41286a220e20024180026a41286a220f29030037030020022002290380023703a001024020022d00bc024103460d0020022802b002211020022802b402211120022802b8022112200241d0016a41286a200141286a290300370300200241d0016a41206a200141206a2903003703002006200141186a2903003703002007200141106a2903003703002005200141086a290300370300200220012903003703d001200f200e290300370300200d200c290300370300200b200a2903003703002009200829030037030020032004290300370300200220022903a0013703800202400240024002404106102c2201450d0020024180016a200229038002221320024180026a41086a2903002214428094ebdc03420010e608200241f0006a20132014428094ebdc03420010e708200241e0006a2002290370200241f0006a41086a29030042a0c21e420010e808200241d0016a41086a290300211520022903d00121160240024020022903602217200229038001221842d00f80a7201842a0c21e7e428094ebdc03824200526aad7c2218200241e0006a41086a2903002018201754ad7c2217844200520d00417f20162013852015201485844200522016201354201520145420152014511b1b21040c010b0240427f201320187c221920192013542204201420177c2004ad7c221920145420192014511b22041b221a4200201320187d221b201b201356201420177d2013201854ad7d221820145620182014511b22031b221b56427f201920041b22174200201820031b22185620172018511b0d00417f20162013852015201485844200522016201354201520145420152014511b1b21040c010b4100210402400240417f2016201b852015201885844200522016201b54201520185420152018511b1b41016a0e03000201020b417f41002016201a54201520175420152017511b1b21040c010b2016201a56201520175620152017511b21040b200120043a00012001201620135a201520145a20152014511b3a0000200241306a200229039002221320024180026a41186a2903002214428094ebdc03420010e608200241d0006a20132014428094ebdc03420010e708200241c0006a2002290350200241d0006a41086a29030042a0c21e420010e808200241d0016a41186a290300211520022903e001211602400240200229034022172002290330221842d00f80a7201842a0c21e7e428094ebdc03824200526aad7c2218200241c0006a41086a2903002018201754ad7c22178450450d00417f20162013852015201485844200522016201354201520145420152014511b1b21040c010b0240427f201320187c221920192013542204201420177c2004ad7c221920145420192014511b22041b221a4200201320187d221b201b201356201420177d2013201854ad7d221820145620182014511b22031b221b56427f201920041b22174200201820031b22185620172018511b0d00417f20162013852015201485844200522016201354201520145420152014511b1b21040c010b4100210402400240417f2016201b852015201885844200522016201b54201520185420152018511b1b41016a0e03010200020b2016201a56201520175620152017511b21040c010b417f41002016201a54201520175420152017511b1b21040b200120043a00032001201620135a201520145a20152014511b3a0002200220022903a002221320024180026a41286a2903002214428094ebdc03420010e608200241206a20132014428094ebdc03420010e708200241106a2002290320200241206a41086a29030042a0c21e420010e808200241d0016a41286a290300211520022903f001211602400240200229031022172002290300221842d00f80a7201842a0c21e7e428094ebdc03824200526aad7c2218200241106a41086a2903002018201754ad7c221784500d000240427f201320187c221920192013542204201420177c2004ad7c221920145420192014511b22041b221a4200201320187d221b201b201356201420177d2013201854ad7d221820145620182014511b22031b221b56427f201920041b22174200201820031b22185620172018511b0d00417f20162013852015201485844200522016201354201520145420152014511b1b21040c020b4100210402400240417f2016201b852015201885844200522016201b54201520185420152018511b1b41016a0e03010300030b2016201a56201520175620152017511b21040c020b417f41002016201a54201520175420152017511b1b21040c010b417f20162013852015201485844200522016201354201520145420152014511b1b21040b200120043a00052001201620135a201520145a20152014511b3a00044100210520012c00010e020102030b1036000b20012d0000450d01024020012c00030e020001020b20012d0002450d0120012d000541ff014621050c010b410121050b2001102e02402012450d0020124106742104201041346a21010340024020012802002203450d00200341306c450d002001417c6a280200102e0b200141c0006a2101200441406a22040d000b0b0240201141ffffff1f71450d002010102e0b20050d002000410310f0060c010b200041063a00000b200241c0026a24000bdc2204057f027e157f097e23004190056b22022400200241306a200141306a41c00110e9081a200241f0016a41286a200141286a290300370300200241f0016a41206a200141206a290300370300200241f0016a41186a200141186a290300370300200241f0016a41106a200141106a290300370300200241f0016a41086a200141086a290300370300200220012903003703f00120012802f0012103200241a0046a41186a22044200370300200241a0046a41106a22014200370300200241a0046a41086a22054200370300200242003703a004200241e0026a41a5fec600411a1081022005200241e0026a41086a2206290000370300200220022900e0023703a004200241e0026a4180c3c800410510810220042006290000370300200120022900e002370300200241286a200241a0046a4120108e020240024002402003200228022c410120022802281b460d0020004281808080c0013703000c010b200241a0026a200241306a109706200442003703002001420037030020054200370300200242003703a004200241e0026a41a5fec600411a10810220052006290000370300200220022900e0023703a004200241e0026a4194c5c800410e108102200141086a2006290000370000200120022900e002370000200241206a200241a0046a4120108e020240024002400240024002402002280220450d00024020022802a80220022802242204460d0020004281808080d0003703000c020b200241e0026a10f504024020022802e0022201450d00200241c0046a41086a200241f4026a28020022053602002002200241ec026a29020022073703c004200220022902e40222083702b402200220013602b002200241c0026a41086a2005360200200220073703c002200242003702d40202402008422088a72205450d00200541386c2106200141086a2101410021050340200241e0026a41186a200141186a290000370300200241e0026a41106a200141106a290000370300200241e0026a41086a200141086a290000370300200220012900003703e002200141386a2101200241d0026a200241e0026a200510a402200541016a2105200641486a22060d000b0b20022802a402210920022802a002210a024002402004450d000240024020022802c802200a2f010022014b0d0041002101410a210b0c010b2002418c056a41026a20022802c00220014105746a220141026a2d00003a000020024180056a200141176a29000037030020024188056a2001411f6a2d00003a0000200220012f00003b018c052002200129000f3703f804200129000721072001280003210541012101410d210b0b200241c0046a41086a2206200241f8046a41086a290300370300200241c0046a41106a2203200241f8046a41106a2d00003a0000200220022903f80422083703e004200220022f018c053b01a004200220083703c00420022002418e056a2d00003a00a204200220073700a704200220053600a304200241bf046a20032d00003a0000200241b7046a2006290300370000200220022903c0043700af042001450d01200241e0026a41186a2201200241a0046a41186a290300370300200241e0026a41106a200241a0046a41106a290300370300200241e0026a41086a200241a0046a41086a290300370300200220022903a0043703e0024120102c220c450d06200c20022903e002370000200c41186a2001290300370000200c41106a200241e0026a41106a290300370000200c41086a200241e0026a41086a2903003700000240024020044101460d00200241af046a210d0240024020022802c802200a2f010222014b0d0041002106410a210b0c010b2002418c056a41026a20022802c00220014105746a220141026a2d00003a000020024180056a200141176a29000037030020024188056a2001411f6a2d00003a0000200220012f00003b018c052002200129000f3703f8042001290007210720012800032103410121060b200241e0026a41086a2201200241f8046a41086a220e290300370300200241e0026a41106a2205200241f8046a41106a220f2d00003a0000200220022903f80422083703e004200220022f018c053b01a004200220083703e00220022002418c056a41026a22102d00003a00a204200220073700a704200220033600a304200d20022903e002370000200d41086a22112001290300370000200d41106a221220052d00003a000020060d010b41012104410121130c080b200a41046a2114200241c0046a41186a2215200241a0046a41186a2216290300370300200241c0046a41106a2217200241a0046a41106a2218290300370300200241c0046a41086a2219200241a0046a41086a221a290300370300200220022903a0043703c0042004410174417c6a21034120211b41022113410121040340200241e0026a41186a221c20152903003703002005201729030037030020012019290300370300200220022903c0043703e00202400240024002402013417f6a2004470d00200441016a22062004490d0a2004410174221d2006201d20064b1b22064104200641044b1b220641ffffff3f71200646211d200641057421060240024020040d00200241003602a0040c010b200241013602a8042002200c3602a004200220044105743602a4040b200241f8046a2006201d200241a0046a107d200228028005210620022802f8044101460d0120022802fc04210c200641057621040b200c201b6a220620022903e002370000200641186a201c290300370000200641106a2005290300370000200641086a20012903003700002003450d0b20022802c80220142f010022064b0d0141002106410a210b0c020b2006450d080c090b201020022802c00220064105746a220641026a2d00003a0000200e200641176a290000370300200f2006411f6a2d00003a0000200220062f00003b018c052002200629000f3703f804200629000721072006280003211c410121060b2001200e2903003703002005200f2d00003a0000200220022903f80422083703e004200220022f018c053b01a004200220083703e002200220102d00003a00a204200220073700a7042002201c3600a304200d20022903e00237000020112001290300370000201220052d00003a00002006450d08201441026a211420152016290300370300201720182903003703002019201a290300370300200220022903a0043703c004201b41206a211b201341016a21132003417e6a21030c000b0b410d210b0b410021044101210c0240200941808080807872418080808078460d00200a102e0b410021130c060b20004281808080e0003703000c010b20004281808080e0003703000b20022802a40241808080807872418080808078460d0420022802a002102e0c040b1038000b1036000b200941808080807872418080808078460d00200a102e0b02400240200b410d460d000240200441ffffff3f71450d00200c102e0b2000200b36020441012106200041013602002000410c6a41003602000c010b200241e0026a200241306a41c00110e9081a200241c0046a200241e0026a200241b0026a200241c0026a108d060240024020022802c0044101470d0020022902c40421072000410c6a200241c0046a410c6a28020036020020002007370204200041013602000c010b20022802c404211b200241c8046a280200211402400240200241c0046a410c6a280200220b412c6c2201450d00201b20016a210e201b2101034041092105200241d0026a2001410c6a10a0022206450d0220022802b802200628020022064d0d022001412c6a210a20022802b002200641386c6a220541306a211720012802002203200128020841226c6a2115200541286a21190240034020152003460d01200341226a211c20172802004105742101201928020021050340024020010d00410821050c060b200141606a210120052003412010ec082106200541206a210520060d000b201c21030c000b0b200a2101200a200e470d000b0b2002200b3602c804200220143602c4042002201b3602c004200241e0026a200241c0046a200241d0026a200241b0026a10e706024020022802e0024101470d0020022902e40221072000410c6a200241e0026a410c6a28020036020020002007370204200041013602000c020b200241e8026a22052802002103200241e0026a200c201320022802e4022214200241e0026a410c6a2201280200221b10b7040240024020022802e0024101460d002005280200211520022802e402210b02400240200128020022130d00427f211e4200211f420021204200212142002122427f21230c010b20134106742105200b41206a2101427f211e427f212342002121420021224200211f4200212003402002200141086a2903002207420020012903002208420010e808200241106a200842002008420010e808427f2020427f200241106a41086a29030022242002290300222520257c7c22252007200229030822268420268442005220252024547222061b7c201f427f200229031020061b7c2224201f542206ad7c221f2006201f202054201f2020511b22061b2120427f202420061b211f200720232008201e54200720235420072023511b22061b21232008201e20061b211e427f202220077c202120087c22082021542206ad7c22072006200720225420072022511b22061b2122427f200820061b2121200141c0006a2101200541406a22050d000b0b200241e0026a41286a2020370300200241e0026a41186a20223703002002201f37038003200220213703f0022002201e3703e002200220233703e8020240200241e0026a200241f0016a413010ec08450d0020004281808080b00137030002402013450d0020134106742105200b41346a21010340024020012802002206450d00200641306c450d002001417c6a280200102e0b200141c0006a2101200541406a22050d000b0b201541ffffff1f71450d02200b102e0c020b20004100360200200041086a20022903f001370300200041c4006a41023a0000200041c0006a20133602002000413c6a2015360200200041386a200b360200200041306a200241f0016a41286a290300370300200041286a200241f0016a41206a290300370300200041206a200241f0016a41186a290300370300200041186a200241f0016a41106a290300370300200041106a200241f0016a41086a2903003703000240201b450d00201b412c6c21052014210103400240200141046a2802002206450d00200641306c450d002001280200102e0b2001412c6a2101200541546a22050d000b0b02402003450d002003412c6c450d002014102e0b0240200441ffffff3f71450d00200c102e0b200241d0026a10bc02024020022802c40241ffffff3f71450d0020022802c002102e0b024020022802b8022201450d00200141386c210520022802b002412c6a210103400240200128020041ffffff3f71450d002001417c6a280200102e0b200141386a2101200541486a22050d000b0b20022802b4022201450d06200141386c450d0620022802b002102e0c060b20022902e40221072000410c6a200128020036020020002007370204200041013602000b0240201b450d00201b412c6c21052014210103400240200141046a2802002206450d00200641306c450d002001280200102e0b2001412c6a2101200541546a22050d000b0b2003450d012003412c6c450d012014102e0c010b20004101360200200020053602040240200b450d00200b412c6c2105201b210103400240200141046a2802002206450d00200641226c450d002001280200102e0b2001412c6a2101200541546a22050d000b0b2014450d002014412c6c450d00201b102e0b41002106200441ffffff3f71450d00200c102e0b200241d0026a10bc02024020022802c40241ffffff3f71450d0020022802c002102e0b024020022802b8022201450d00200141386c210520022802b002412c6a210103400240200128020041ffffff3f71450d002001417c6a280200102e0b200141386a2101200541486a22050d000b0b024020022802b4022201450d00200141386c450d0020022802b002102e0b2006450d010b200241306a109b060b20024190056a24000b130020002002ad4220862001ad84101710da080bcc0101037f200028022822012001280200417f6a220236020020002d0001210302400240024020002d00000d004100210020020d022001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a22023602002002450d010c020b4101210020020d012001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d010b2001102e0b200341ff01714102472000720bf10101047f230041c0006b220224004191cdc20021034109210441042105024002400240024002400240200141ff01710e06000102030405000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a419c8ecc001044000b4186cdc2002103410b2104410021050c030b41feccc200210341082104410121050c020b41f9ccc200210341052104410221050c010b41eeccc2002103410b2104410321050b20004183083b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000bf30202047f017e230041a0026b220224002002200010c802200241a0016a200228020022032002280208220410c902200241f4016a2802002105200241f0016a280200210020022903a0012106200241d8006a200241a8016a41c80010e9081a0240024020064201510d0041002100200241106a410041c80010eb081a410021050c010b200241106a200241d8006a41c80010e9081a0b024002402000200572450d00417f200041016a220120012000491b21000c010b20012802002100200241a0016a41086a41033a0000200241a9016a2000290000370000200241b1016a200041086a290000370000200241b9016a200041106a290000370000200241c1016a200041186a290000370000200241003a00a001200241a0016a10fe01410121000b200241a8016a200241106a41c80010e9082101200241f4016a2005360200200241f0016a2000360200200242013703a00120032004200110c80502402002280204450d002003102e0b200241a0026a24000bf20304037f017e047f027e23004190026b22022400200241086a200010c802200241186a200228020822002002280210220310c902200241f0006a41086a2204200241e0006a28020036020020022903182105200242003703182002200241d8006a22062903003703700240024020054201520d00200241306a2903002105200241ec006a2802002107200241e8006a2802002108200241e4006a28020021092002290328210a2002290320210b20024180016a41086a2004280200360200200220022903703703800141012104024002400240200841014b0d002007200972450d0220090d01410121080b2006200229038001370300200241286a200a370300200241ec006a2007360200200241e4006a2009360200200241306a2005370300200641086a20024180016a41086a2802003602002002200b3703202002420137031820022008417f6a36026820002003200241186a41086a10c8050c030b410221040c020b2001280200210420024190016a41086a41043a000020024199016a2004290000370000200241a1016a200441086a290000370000200241a9016a200441106a290000370000200241b1016a200441186a290000370000200241003a00900120024190016a10fe010b2000200310ff01410021040b0240200228020c450d002000102e0b20024190026a240020040b9b0201047f230041c0006b2202240041c893c9002103410621044108210502400240024002400240024002400240200141ff01710e080001020304050607000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a41a4a9cc001044000b41b693c900210341122105410021040c050b41a693c900210341102105410121040c040b419993c9002103410d2105410221040c030b418d93c9002103410c2105410321040c020b418193c9002103410c2105410421040c010b41ed92c900210341142105410521040b200041830c3b0100200041086a2005360200200041046a2003360200200041026a20043a0000200241c0006a24000bf10101047f230041c0006b2202240041fdc3c10021034109210441042105024002400240024002400240200141ff01710e06000102030405000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a41848fcc001044000b41f1c3c1002103410c2104410021050c030b41dac3c100210341172104410121050c020b41cdc3c1002103410d2104410221050c010b41c7c3c100210341062104410321050b20004183123b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000b935608027f017e027f017e017f027e237f057e230041c0076b22042400200241106a2205290300210620032802102107200328020021082002290300210920044184036a200241e8016a2900003702002004418c036a200241f0016a29000037020020044194036a200241f8016a290000370200200441e7e485f3063602f8022004200241e0016a2900003702fc0220044180056a41106a200328021036020020044180056a41086a200341086a2902003703002004200329020037038005200441d0056a200441f8026a20044180056a109d040240024002400240200428029006220a450d00200441f8006a413e6a200441d0056a41386a290300370100200441f8006a41366a200441d0056a41306a290300370100200441f8006a412e6a200441d0056a41286a290300370100200441f8006a41266a200441d0056a41206a290300370100200441f8006a411e6a200441d0056a41186a290300370100200441f8006a41166a200441d0056a41106a290300370100200441f8006a410e6a200441d0056a41086a290300370100200420042903d00537017e20044198066a290300210b2004280294062103200441c8036a200441f8006a41c60010e9081a200441386a41086a200441c8036a410e6a290100370300200441386a41106a200441c8036a41166a290100370300200441386a41186a200441c8036a411e6a290100370300200441386a41206a200441c8036a41266a290100370300200441386a41286a200441c8036a412e6a290100370300200441386a41306a200441c8036a41366a290100370300200441386a41386a200441c8036a413e6a290100370300200420042901ce033703382002290308210c200441f8006a200541f00110e9081a02400240200c4201520d00200441d0056a200441f8006a41f00110e9081a0240200441d0056a410c6a200441c0066a412010ec080d0020042802d80520042802bc06460d020b200441ec036a2205200441d0056a41086a220241206a280200360200200441e4036a220d200241186a290200370200200441dc036a220e200241106a290200370200200441c8036a410c6a220f200241086a290200370200200441013602c803200420022902003702cc03200441c8036a200441a0076a2210200441fc056a20042903d005200910880721112005200441bc066a220241206a280200360200200d200241186a290200370200200e200241106a290200370200200f200241086a290200370200200441013602c803200420022902003702cc03200441c8036a2010200441e0066a20042903d005200910880721022011450d012002450d010c030b200441d0056a200441f8006a41f00110e9081a0240200441d0056a410c6a200441c0066a412010ec080d0020042802d80520042802bc06460d010b200441ec036a2205200441d0056a41086a220241206a280200360200200441e4036a220d200241186a290200370200200441dc036a220e200241106a290200370200200441c8036a410c6a220f200241086a290200370200200441003602c803200420022902003702cc03200441c8036a200441a0076a2210200441fc056a20042903d005200910880721112005200441bc066a220241206a280200360200200d200241186a290200370200200e200241106a290200370200200f200241086a290200370200200441003602c803200420022902003702cc03200441c8036a2010200441e0066a20042903d005200910880721022011450d0020020d020b200441f8006a410610b007200441df056a200441f8006a41086a2802002202360000200420042903783700d705200041186a41003a000020004200370308200020042900d005370019200041216a200441d0056a41086a290000370000200041286a2002360000200042013703000c020b200441f8006a410510b007200441df056a200441f8006a41086a2802002202360000200420042903783700d705200041186a41003a000020004200370308200020042900d005370019200041216a200441d0056a41086a290000370000200041286a2002360000200042013703000c020b0240024020094200520d00200441d0056a420010ac07200441206a20042802d005220520042802d805108e022004280224210d20042802202102024020042802d405450d002005102e0b4101210e0c010b200441d0056a2009427f7c10ac07200441306a20042802d005220d20042802d805108e022004280234210520042802302102024020042802d405450d00200d102e0b024020024101460d00200441f8006a410610b007200441df056a200441f8006a41086a2802002202360000200420042903783700d705200041186a41003a000020004200370308200020042900d005370019200041216a200441d0056a41086a290000370000200041286a2002360000200042013703000c020b200441d0056a200910ac07200441286a20042802d005220e20042802d805108e02200428022c210d20042802282102024020042802d405450d00200e102e0b4100210e0b024020024101460d00200441f8006a410610b007200441df056a200441f8006a41086a2802002202360000200420042903783700d705200041186a41003a000020004200370308200020042900d005370019200041216a200441d0056a41086a290000370000200041286a2002360000200042013703000c010b024002402008200d4b0d00410121124102200820054d200e1b22024102460d012002410171450d010b200441f8006a410610b007200441df056a200441f8006a41086a2802002202360000200420042903783700d705200041186a41003a000020004200370308200020042900d005370019200041216a200441d0056a41086a290000370000200041286a2002360000200042013703000c010b20012d00002202410146221341057421142001411f6a2d000021052001411e6a2d0000210d2001411d6a2d0000210e2001411c6a2d0000210f2001411b6a2d000021102001411a6a2d00002111200141196a2d00002115200141186a2d00002116200141176a2d00002117200141166a2d00002118200141156a2d00002119200141146a2d0000211a200141136a2d0000211b200141126a2d0000211c200141116a2d0000211d2001410f6a2d0000211e2001410e6a2d0000211f2001410d6a2d000021202001410c6a2d000021212001410b6a2d000021222001410a6a2d00002123200141096a2d00002124200141076a2d00002125200141066a2d00002126200141056a2d00002127200141036a2d00002128200141206a2d0000212920012d0010212a20012d0008212b20012d0004212c20012d0002212d20012d0001212e0240024020024101470d002014102c2212450d010b024002400240024002402014410576222f20134f0d00201441047622012013200120134b1b22014104200141044b1b41057421010240024020024101460d00200441003602d0050c010b200441d8056a4101360200200420143602d405200420123602d0050b200441f8006a20014101200441d0056a107d20044180016a280200210120042802784101460d01200428027c21122001410576212f0b20020d01410021010c020b2001450d020c030b410021012012210203402002411f6a20293a00002002202e41ff0171202d4108747241ffff0371202841ff0171202c4108747241107472ad202741ff017120264108747241ffff0371202541ff0171202b4108747241107472ad422086843700002002202441ff017120234108747241ffff0371202241ff017120214108747241107472ad202041ff0171201f4108747241ffff0371201e41ff0171202a4108747241107472ad422086843700082002411e6a20053a0000200241106a201d41ff0171201c4108747241ffff0371201b41ff0171201a4108747241107472ad201941ff017120184108747241ffff0371201741ff017120164108747241107472ad422086843700002002411c6a200e41ff0171200d410874723b0000200241186a201541ff017120114108747241ffff0371201041ff0171200f4108747241107472360000200241206a2102200141016a2101410041ff01710d000b0b200441d0016a200b370300200441cc016a2003360200200441f8006a41d0006a2203200a360200200441f8006a41186a200441386a41086a290300370300200441f8006a41206a200441386a41106a290300370300200441f8006a41286a200441386a41186a290300370300200441f8006a41306a220a200441386a41206a290300370300200441f8006a41386a220d200441386a41286a290300370300200441b8016a220e200441386a41306a290300370300200441f8006a41c8006a220f200441386a41386a2903003703002004200637038001200420093703782004200429033837038801200420073602dc01200420083602d80141d000102c2205450d01200441a0046a41086a2208200441f8006a41106a220241086a290300370300200441a0046a41106a2210200241106a290300370300200441a0046a41186a2211200241186a290300370300200420022903003703a004200a290300210c200d290300210b200e2903002130200f2903002131200441d0056a200310c501200541386a203137030020052030370330200541286a200b3703002005200c370320200541186a2011290300370300200541106a2010290300370300200541086a2008290300370300200520042903a004370300200520042903d005370340200541c8006a200441d0056a41086a280200360200200420013602f0022004202f3602ec02200420123602e8024100211b200441003602c805200442013703c005200420093703d005200441c0056a200441d0056a41081074200420063703d005200441c0056a200441d0056a41081074200441d0056a418997c500108a03200441c8036a20042802d005220320042802d805108b0320042902cc03420020042802c80322021b210c2002410120021b210d024020042802d405450d002003102e0b2004200c4220883e029c042004200d36029804200441186a20044198046a10ab01410821194100211a024020042802180d00200428021c220f200428029c0441306e22022002200f4b1bad42307e220b422088a70d01200ba72202417f4c0d010240024020020d00410821100c010b2002102c2210450d030b200241306e210e02400240200f0d004100210f0c010b410021110340024002400240200428029c0422034108490d00200428029804220a290000210b2004200a41086a360298042004200341786a220236029c0420024108490d00201141016a21152004200341706a220836029c042004200a41106a36029804200a290008213041002102200441003a00f0052003416f6a21030240034020082002460d01200441d0056a20026a200a20026a220141106a2d00003a00002004200141116a360298042004200241016a22013a00f0052004200336029c042003417f6a21032001210220014120470d000b200441c8036a41186a2202200441d0056a41186a290300370300200441c8036a41106a2203200441d0056a41106a290300370300200441c8036a41086a220a200441d0056a41086a290300370300200420042903d0053703c803200141ff01714120490d0120044180056a41086a200a2903002231370300200441e0046a41186a22012002290300370300200441e0046a41106a22022003290300370300200441e0046a41086a22032031370300200420042903c803223137038005200420313703e004200441c0046a41186a220a2001290300370300200441c0046a41106a22012002290300370300200441c0046a41086a22082003290300370300200420042903e0043703c0042011200e470d03200e41016a2202200e4f0d020c070b200241ff0171450d00200441003a00f0050b4100211b410821190240200e450d00200e41306c450d002010102e0b4100211a0c040b200e41017422032002200320024b1b22024104200241044b1bad42307e2231422088a74541037421022031a7210302400240200e0d00200441003602d0050c010b200441083602d805200420103602d0052004200e41306c3602d4050b200441c8036a20032002200441d0056a107d20042802d0032102024020042802c8034101470d0020020d060c050b20042802cc032110200241306e210e0b2010201141306c6a220220303703082002200b370300200220042903c004370310200241186a2008290300370300200241206a2001290300370300200241286a200a290300370300201521112015200f470d000b0b200f410020101b211a200e410020101b211b2010410820101b21190b200441d0056a418997c500200441c0056a108c03200441c8036a20042802d005220320042802d805108d0320042902cc03420020042802c80322021b210b024020042802d405450d002003102e0b200b422088213020042802c805212a20042802c405212720042802c00521280240200ca7450d00200d102e0b2002410120021b21262030a7211d200ba7211c200441d0056a41086a2202200541086a290300370300200441d0056a41106a2203200541106a290300370300200441d0056a41186a2201200541186a290300370300200441d0056a41206a220a200541206a290300370300200441d0056a41286a2208200541286a290300370300200441d0056a41306a220d200541306a290300370300200441d0056a41386a220e200541386a290300370300200441c8036a41086a220f200541cc006a280200360200200420052903003703d005200420052902443703c80302400240200528024022100d004100210a0c010b20044180056a41386a2211200e29030037030020044180056a41306a220e200d29030037030020044180056a41286a220d200829030037030020044180056a41206a2208200a29030037030020044180056a41186a220a200129030037030020044180056a41106a2201200329030037030020044180056a41086a22032002290300370300200441c0056a41086a2202200f280200360200200420042903d00537038005200420042903c8033703c005200441f8026a41386a2011290300370300200441f8026a41306a200e290300370300200441f8026a41286a200d290300370300200441f8026a41206a2008290300370300200441f8026a41186a200a290300370300200441f8026a41106a2001290300370300200441f8026a41086a200329030037030020042004290380053703f802200420103602b803200441bc036a220320042903c005370200200341086a2002280200360200200442013703d005200441003602d805200420093703c803200441d0056a200441c8036a41081074200420063703c803200441d0056a200441c8036a41081074200441e4056a410029009197453702002004410029008997453702dc052004200441f8026a3602ec05200441e0046a200441d0056a10ae01024020042802d405450d0020042802d005102e0b200441d0056a200441e0046a108e0320042802d005220320042802d805108f022102024020042802d405450d002003102e0b02400240024020020d00200441c8036a200441f8026a41d00010e9081a200441c0046a200441e8026a10c801200441d0056a200441c8036a41d00010e9081a200441d0056a41d0006a220241086a200441c0046a41086a280200360200200220042903c004370200200441c8036a200441e0046a108e0320042802c803220220042802d003200441d0056a108f03024020042802cc03450d002002102e0b02402004280294062202450d00200241306c450d00200428029006102e0b024020042802a40641ffffff3f71450d0020042802a006102e0b200441c8036a41186a220e200441e0046a41186a290300370300200441c8036a41106a220f200441e0046a41106a290300370300200441c8036a41086a2210200441e0046a41086a290300370300200420042903e0043703c803410021020240201a0e020302000b41002102201a210303400240417f20192003410176220a20026a220841306c6a220d290300220c200952200c2009541b22010d00417f200d290308220c200652200c2006541b21010b2002200820014101461b21022003200a6b220341014d0d020c000b0b4100210a20042802bc032202450d02200241306c450d0220042802b803102e0c020b02400240417f2019200241306c6a2201290300220c200952200c2009541b22030d0041ff0121032001290308220c2006540d01200c20065221030b2003450d010b2002200341ff017141ff01466a21020b200441d0056a41186a200e290300370300200441d0056a41106a200f290300370300200441d0056a41086a2010290300370300200420042903c8033703d00502400240201a2002490d000240201a201b470d00201b41016a2203201b490d04201b41017422012003200120034b1b22034104200341044b1bad42307e220c422088a7454103742103200ca7210102400240201b0d00200441003602c0040c010b200441083602c804200420193602c0042004201b41306c3602c4040b200441a0046a20012003200441c0046a107d20042802a804210320042802a0044101460d0220042802a4042119200341306e211b0b2019200241306c6a220341306a2003201a20026b41306c10ea081a2003200637030820032009370300200341286a200441d0056a41186a2201290300370300200341206a200441d0056a41106a2208290300370300200341186a200441d0056a41086a220d290300370300200320042903d0053703102001200441c8036a41186a2903003703002008200441c8036a41106a290300370300200d200441c8036a41086a290300370300200420042903c8033703d0050240201d201c470d00201c41016a2202201c490d04201c41017422032002200320024b1b22024104200241044b1b220241ffffff3f7120024621032002410574210202400240201c0d00200441003602c0040c010b200441013602c804200420263602c0042004201c4105743602c4040b200441a0046a20022003200441c0046a107d20042802a8042102024020042802a0044101470d0020020d060c050b20042802a40421262002410576211c0b4101210a201a41016a211a2026201d4105746a220220042903d005370000200241186a2001290300370000200241106a2008290300370000200241086a200d290300370000201d41016a211d0c020b2002201a1045000b20030d020c010b200541d0006a220220026b220341d0006d210102402003450d00200141d0006c2103200241c4006a21020340024020022802002201450d00200141306c450d002002417c6a280200102e0b200241d0006a2102200341b07f6a22030d000b0b2005102e024002400240200a450d00024002400240201d450d00201d410574210520044194066a2102202621030340200441c0056a2003108e03200441d0056a20042802c005220a20042802c805109003200441c8036a41086a2208200441d0056a41086a290300370300200441c8036a41106a220d200441d0056a41106a290300370300200441c8036a41186a220e200441d0056a41186a290300370300200441c8036a41206a220f200441d0056a41206a290300370300200441c8036a41286a2210200441d0056a41286a290300370300200441c8036a41306a2211200441d0056a41306a290300370300200441c8036a41386a2215200441d0056a41386a290300370300200441e0046a41086a2216200241086a290200370300200441e0046a41106a2217200241106a290200370300200441e0046a41186a2218200241186a280200360200200420042903d0053703c803200420022902003703e00402402004280290062201450d00200441f8026a41386a2015290300370300200441f8026a41306a2011290300370300200441f8026a41286a2010290300370300200441f8026a41206a200f290300370300200441f8026a41186a200e290300370300200441f8026a41106a200d290300370300200441f8026a41086a2008290300370300200441c0046a41086a2016290300370300200441c0046a41106a2017290300370300200441c0046a41186a2018280200360200200420042903c8033703f802200420042903e0043703c0040b024020042802c405450d00200a102e0b20010d02200341206a2103200541606a22050d000b0b4200210c4108210a0c010b20044180056a41386a2202200441f8026a41386a29030037030020044180056a41306a2208200441f8026a41306a29030037030020044180056a41286a220d200441f8026a41286a29030037030020044180056a41206a220e200441f8026a41206a29030037030020044180056a41186a220f200441f8026a41186a29030037030020044180056a41106a2210200441f8026a41106a29030037030020044180056a41086a2211200441f8026a41086a290300370300200441a0046a41086a2215200441c0046a41086a290300370300200441a0046a41106a2216200441c0046a41106a290300370300200441a0046a41186a2217200441c0046a41186a280200360200200420042903f80237038005200420042903c0043703a00441e000102c220a450d05200a200429038005370300200a2001360240200a20042903a004370244200a41386a2002290300370300200a41306a2008290300370300200a41286a200d290300370300200a41206a200e290300370300200a41186a200f290300370300200a41106a2010290300370300200a41086a2011290300370300200a41cc006a2015290300370200200a41d4006a2016290300370200200a41dc006a2017280200360200024020054120470d00428180808010210c0c010b200341206a210f2026201d4105746a222541606a212b200441d0056a41c4006a2102428180808010210c0340200f21030340200441c0056a2003108e03200441d0056a20042802c005220e20042802c805109003200441c8036a41086a2205200441d0056a41086a221e290300370300200441c8036a41106a2208200441d0056a41106a221f290300370300200441c8036a41186a220d200441d0056a41186a2220290300370300200441c8036a41206a220f200441d0056a41206a2221290300370300200441c8036a41286a2210200441d0056a41286a2222290300370300200441c8036a41306a2211200441d0056a41306a2223290300370300200441c8036a41386a2215200441d0056a41386a2224290300370300200441e0046a41086a2216200241086a290200370300200441e0046a41106a2217200241106a290200370300200441e0046a41186a2218200241186a280200360200200420042903d0053703c803200420022902003703e00402402004280290062201450d00200441f8026a41386a2015290300370300200441f8026a41306a2011290300370300200441f8026a41286a2010290300370300200441f8026a41206a200f290300370300200441f8026a41186a200d290300370300200441f8026a41106a2008290300370300200441f8026a41086a2005290300370300200441c0046a41086a2016290300370300200441c0046a41106a2017290300370300200441c0046a41186a2018280200360200200420042903c8033703f802200420042903e0043703c0040b024020042802c405450d00200e102e0b024020010d002025200341206a2203470d010c030b0b20044180056a41386a220e200441f8026a41386a29030037030020044180056a41306a220f200441f8026a41306a29030037030020044180056a41286a2210200441f8026a41286a29030037030020044180056a41206a2211200441f8026a41206a29030037030020044180056a41186a2215200441f8026a41186a29030037030020044180056a41106a2216200441f8026a41106a29030037030020044180056a41086a2217200441f8026a41086a290300370300200441a0046a41086a2218200441c0046a41086a290300370300200441a0046a41106a222c200441c0046a41106a290300370300200441a0046a41186a222d200441c0046a41186a280200360200200420042903f80237038005200420042903c0043703a004201e2017290300370300201f20162903003703002020201529030037030020212011290300370300202220102903003703002023200f2903003703002024200e29030037030020042004290380053703d005200520182903003703002008202c290300370300200d202d280200360200200420042903a0043703c80302400240200c422088a7220e200ca7460d00200c210b0c010b200e41016a220f200e490d06200e4101742210200f200f2010491b220f4104200f41044b1bad42e0007e220b422088a745410374210f200ba7211002400240200e0d00200441003602f8020c010b20044108360280032004200a3602f8022004200e41e0006c3602fc020b200441e0046a2010200f200441f8026a107d20042802e804210f20042802e0044101460d0420042802e404210a200f41e0006ead210b0b200341206a210f200a200e41e0006c6a220e20042903d005370300200e41106a201f290300370300200e41086a201e2903003703002023290300213020242903002131202229030021322021290300213320202903002134200e41c0006a2001360200200e41186a2034370300200e41206a2033370300200e41286a2032370300200e41386a2031370300200e41306a2030370300200e41c4006a20042903c803370200200e41cc006a2005290300370200200e41d4006a2008290300370200200e41dc006a200d280200360200200b42ffffffff0f83200c4280808080107c4280808080708384210c202b2003470d000b0b200441f0056a201a360200200441ec056a201b360200200441e4056a201d360200200441e0056a201c360200200420193602e805200420263602dc052004202a3602d805200420273602d405200420283602d005201a41306c4104722202417f4c0d032002102c2203450d042004410036028003200420023602fc02200420033602f802201a200441f8026a10760240201a450d002019201a41306c6a2101201921020340200420022903003703c803200441f8026a200441c8036a410810742004200241086a2903003703c803200441f8026a200441c8036a410810744120102c2203450d06200442203702cc03200420033602c803200441c8036a200241106a220241201074200441f8026a20042802c803220320042802d0031074024020042802cc03450d002003102e0b200241206a22022001470d000b0b200441c8036a418997c500108a0320042802c803220220042802d003200441f8026a10c502024020042802cc03450d002002102e0b024020042802fc02450d0020042802f802102e0b200441c8036a418997c500200441d0056a108c0320042802c803220220042802d003200441dc056a109103024020042802cc03450d002002102e0b02402027450d002028102e0b0240201c41ffffff3f71450d002026102e0b201b450d02201b41306c450d022019102e0c020b02402027450d002028102e0b0240201c41ffffff3f71450d002026102e0b4100210a0240201b450d00201b41306c450d002019102e0b0c010b200f0d020c010b024020042802ec0241ffffff3f71450d0020042802e802102e0b0240200a0d00024020042802cc012202450d00200241306c450d0020042802c801102e0b200441f8006a410710b007200441df056a200441f8006a41086a2802002202360000200420042903783700d705200041186a41003a000020004200370308200020042900d005370019200041216a200441d0056a41086a290000370000200041286a2002360000200042013703000c040b02400240024020074101200741014b1b2202418094ebdc036e2002418094ebdc03704100476a22034101200341014b1b220320024b0d002002200c422088a7220541036c220120022001491b20036ead428094ebdc037e200220036ead80a7109e042101200541ffffffff03712005470d0320054102742202417f4c0d030240024020020d00410421080c010b2002102c2208450d050b02402002410276220720054f0d00200241017622032005200320054b1b22034104200341044b1b220341ffffffff03712003464102742107200341027421030240024020020d00200441003602d0050c010b200441d8056a4104360200200420023602d405200420083602d0050b200441c8036a20032007200441d0056a107d200441d0036a2802002102024020042802c8034101460d0020042802cc032108200241027621070c030b20020d050c040b20050d01410021020c020b41d0d8c800411941bcd7cc001039000b2005210320082102034020022001360200200241046a21022003417f6a22030d000b200521020b200441086a200a20052008200220042802d801109203200442013703f8022004410036028003200420093703d005200441f8026a200441d0056a41081074200420063703d005200441f8026a200441d0056a410810742004418c036a4100290091974537020020044100290089974537028403200441e3036a200441f8026a41186a280200360000200441db036a200441f8026a41106a290300370000200441d3036a200429038003370000200420042903f8023700cb03200441d9056a200441c8036a41086a290000370000200441e1056a200441c8036a41106a290000370000200441d0056a41186a200441df036a290000370000200441f0056a41013a0000200441053a00d005200420042900c8033700d105200441d0056a10fe0102402007450d002008102e0b02402005450d00200541e0006c2103200a41d4006a210203400240200241706a2802002201450d00200141306c450d002002416c6a280200102e0b0240200228020041ffffff3f71450d002002417c6a280200102e0b200241e0006a2102200341a07f6a22030d000b0b0240200ca72202450d00200241e0006c450d00200a102e0b024020042802cc012202450d00200241306c450d0020042802c801102e0b2000420037030820004200370300200041186a41013a00000c030b1038000b1036000b2003450d00200341306c450d00200a102e0b200441c0076a24000b860301037f230041e0006b22032400200341086a41bed8c8004108108102200341186a41a4fcc8004112108102200320013602482003200341c8006a410410a301370338200341dc006a2201200341c8006a41046a3602002003200341386a41086a3602542003200341c8006a3602582003200341386a360250200341286a200341d0006a107c200320023602442003200341c4006a410410a3013703482001200341c4006a41046a3602002003200341c8006a41086a3602542003200341c4006a3602582003200341c8006a360250200341386a200341d0006a107c0240024020032802302201200328024022046a41206a2202417f4c0d000240024020020d00410121050c010b2002102c2205450d020b2000410036020820002002360204200020053602002000200341086a411010742000200341186a4110107420002003280228220220011074200020032802382201200410740240200328023c450d002001102e0b0240200328022c450d002002102e0b200341e0006a24000f0b1038000b1036000baff4020b027f027e077f027e047f0e7e027f057e047f047e0e7f230022032104200341c00b6b41607122032400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e1a000102030405060708090a0b0c0d0e0f10111213141516171819000b200341d40a6a4101360200200342013702c40a2003419cc3cb003602c00a200341043602940920034194c3cb0036029009200320034190096a3602d00a200341c00a6a41c0accb001044000b200141306a2903002105200141286a2903002106200341e0066a41186a200141196a290000370300200341e0066a41106a200141116a290000370300200341e0066a41086a200141096a290000370300200320012900013703e006200341c00a6a41286a200241286a280200360200200341c00a6a41206a200241206a290200370300200341c00a6a41186a200241186a290200370300200341c00a6a41106a200241106a290200370300200341c00a6a41086a200241086a290200370300200320022902003703c00a20034190096a200341c00a6a10c102200341b8046a41086a220220034190096a41096a290000370300200341b8046a41106a220120034190096a41116a290000370300200341b8046a41186a220720034190096a41196a29000037030020032003290091093703b80420032d0090094101460d25200341d8046a41186a2007290300370300200341d8046a41106a2001290300370300200341d8046a41086a2002290300370300200320032903b8043703d8040240024020064280a094a58d1d5441002005501b450d00200341c0056a41011093080c010b20034198066a2201420037030020034190066a2202420037030020034180066a41086a220742003703002003420037038006200341c0076a41de80ca0041091081022007200341c0076a41086a2208290000370300200320032900c00737038006200341c0076a41b4f6ca00410f10810220012008290000370300200220032900c007370300200341286a20034180066a4120108e02200328022c21092003280228210a2001420037030020024200370300200742003703002003420037038006200341c0076a41de80ca00410910810220072008290000370300200320032900c00737038006200341c0076a418c81ca00410b10810220012008290000370300200220032900c00737030020034194096a41003a00002003410036029009200341206a20034180066a412020034190096a4105410010ca0402402003280220450d00200320032802242201410520014105491b3602c40a200320034190096a3602c00a200341186a200341c00a6a10ab0120032802180d00200328021c41e400490d00200341c0056a41231093080c010b200341c00a6a41186a2201200341e0066a41186a290300370300200341c00a6a41106a2207200341e0066a41106a290300370300200341c00a6a41086a2208200341e0066a41086a290300370300200320032903e0063703c00a20034190096a200341c00a6a10b7080240200328029409220b450d00200328029009210c200142003703002007420037030020084200370300200342003703c00a20034188086a41d9fcc6004106108102200820034188086a41086a220d29000037030020032003290088083703c00a20034188086a4180f4cb0041061081022001200d2900003703002007200329008808370300200341106a200341c00a6a4120108e0202402003280214410020032802101b200c4f0d00200341c0056a410610930820032802980941ffffff3f71450d02200b102e0c020b20032802980941ffffff3f71450d00200b102e0b200341c00a6a200341d8046a2006200510c302200341ca066a220120032d00c30a3a0000200320032f00c10a3b01c806024020032d00c00a22074106470d0020034180066a41186a420037030020034180066a41106a420037030020034180066a41086a220142003703002003420037038006200341c0076a41de80ca0041091081022001200341c0076a41086a2207290000370300200320032900c00737038006200341c0076a41b4f6ca00410f108102200241086a2007290000370000200220032900c007370000200320094100200a1b220141016a3602c00a20034180066a4120200341c00a6a410410b2012003200341d8046a36028006200341c0076a200110940820032802c807210820032802c00721074118102c2209450d6020034218370294092003200936029009410120034190096a107620034190096a20032802800641201074200320053703c80a200320063703c00a20034190096a200341c00a6a4110107420072008200328029009220920032802980910b2010240200328029409450d002009102e0b024020032802c407450d002007102e0b200341cc0a6a200341e0066a41086a290300370200200341d40a6a200341e0066a41106a290300370200200341dc0a6a200341e0066a41186a290300370200200341ec0a6a200341d8046a41086a290300370200200341f40a6a200341d8046a41106a290300370200200341fc0a6a200341d8046a41186a290300370200200320013602c00a200320032903e0063702c40a200320032903d8043702e40a20034180066a41186a420037030020034180066a41106a420037030020034180066a41086a220742003703002003420037038006200341c0076a41de80ca0041091081022007200341c0076a41086a2208290000370300200320032900c00737038006200341c0076a418c81ca00410b108102200241086a2008290000370000200220032900c0073700004104102c2202450d60200342043702c407200320023602c0072003200136029009200341c0076a20034190096a410410744120102c2202450d602003422037029409200320023602900920034190096a200341c00a6a41047241201074200341c0076a200328029009220220032802980910740240200328029409450d002002102e0b200341c0076a200341e40a6a4120107420034190096a41086a200341c0076a41086a280200360200200320032903c0073703900920034180066a412020034190096a10c702200341d80a6a2005370300200341d00a6a2006370300200341cc0a6a2001360200200341c00a6a41086a41003a0000200341093a00c00a200341c00a6a10fe01200341063a00c0050c630b20032902c40a2105200320073a00c005200320032f01c8063b00c105200320053702c405200320012d00003a00c3050b20032d00c0054106460d6120032902c40521050c600b200141086a2802002109200141046a2802002101200341c00a6a41286a200241286a280200360200200341c00a6a41206a200241206a290200370300200341c00a6a41186a200241186a290200370300200341c00a6a41106a200241106a290200370300200341c00a6a41086a200241086a290200370300200320022902003703c00a20034190096a200341c00a6a10c102200341b8046a41086a220220034199096a290000370300200341b8046a41106a2207200341a1096a290000370300200341b8046a41186a2208200341a9096a29000037030020032003290091093703b80420032d0090094101460d23200341d8046a41186a2008290300370300200341d8046a41106a2007290300370300200341d8046a41086a2002290300370300200320032903b8043703d804200341c00a6a200110940820032802c80a210820032802c00a21024100210720034190096a41046a41003a00002003410036029009200341306a2002200820034190096a4105410010ca04024002402003280230450d0020032802342107200341003a00f00802402007410520074105491b2207450d002007417f6a210b024020032d0090092207410371220a4103460d00024002400240200a0e03000102000b2007410276210a410121070c050b200b450d0220032d009109410874200772220741ffff0371418002490d02200741fcff0371410276210a410121070c040b200b4103490d0120032f00910920032d00930941107472410874200772220741ffff034d0d012007410276210a410121070c030b200741034b0d00200b4104490d0041012107200328009109220a41ffffffff034b0d020b41c4a6c000412010ef022002200810c907410021070b0b024020032802c40a450d002002102e0b2007450d220240200a20094d0d00200341c0076a41201093080c5b0b20034190096a2001109408200341c00a6a200328029009220a20032802980910ae052003280294092102024002400240024020032802c00a2208450d00200341d80a6a2903002105200341d00a6a2903002106200341c80a6a280200210920032802c40a210702402002450d00200a102e0b200341c00a6a200341d8046a2006200510c302200341ca066a220220032d00c30a3a0000200320032f00c10a3b01c80620032d00c00a220a4106470d0320034180066a41186a220a200341d8046a41186a29030037030020034180066a41106a220b200341d8046a41106a29030037030020034180066a41086a220c200341d8046a41086a290300370300200320032903d8043703800620092007470d02200741016a220220074f0d010c620b02402002450d00200a102e0b200341c0076a41021093080c5d0b2007410174220d2002200d20024b1b22024104200241044b1b220241ffffff3f71200246210d200241057421020240024020070d00200341003602c00a0c010b200341c80a6a4101360200200320083602c00a200320074105743602c40a0b20034190096a2002200d200341c00a6a107d20034198096a280200210202402003280290094101470d002002450d610c600b2003280294092108200241057621070b200820094105746a2202200329038006370000200241186a200a290300370000200241106a200b290300370000200241086a200c290300370000200341e0066a2001109408200941016a22024105744114722201417f4c0d5f20032802e806210b20032802e006210a2001102c220c450d5e200341003602980920032001360294092003200c36029009200220034190096a107602402002450d00200941057441206a210120082102034020034190096a200241201074200241206a2102200141606a22010d000b0b200320063703c00a200320053703c80a20034190096a200341c00a6a41101074200a200b200328029009220220032802980910b2010240200328029409450d002002102e0b024020032802e406450d00200a102e0b0240200741ffffff3f71450d002008102e0b200341063a00c0070c5d0b20032902c40a21052003200a3a00c007200320032f01c8063b00c107200320053702c407200320022d00003a00c307200741ffffff3f71450d5a2008102e0c5a0b200141046a2802002108200341d0086a41046a22092001410f6a2d00003a000020032001410b6a2800003602d008200141186a2903002105200141106a2903002106200141286a290300210e200141206a290300210f2001410a6a2d00002110200141096a2d00002111200141086a2d00002112200341c00a6a41286a220a200241286a280200360200200341c00a6a41206a220b200241206a290200370300200341c00a6a41186a220c200241186a290200370300200341c00a6a41106a220d200241106a290200370300200341c00a6a41086a2213200241086a290200370300200320022902003703c00a20034190096a200341c00a6a10c10220034180066a41086a220220034190096a41096a29000037030020034180066a41106a2201200341a1096a29000037030020034180066a41186a2207200341a9096a29000037030020032003290091093703800620032d0090094101460d1e200341c0076a41186a2007290300370300200341c0076a41106a2001290300370300200341c0076a41086a200229030037030020032003290380063703c00720034198046a41046a20092d00003a0000200320032802d00836029804200341f0086a2008108905200341c00a6a20032802f008220920032802f808108a052002200341800b6a2903003703002001200341880b6a2903003703002007200341900b6a29030037030020034180066a41206a200341980b6a29030037030020034180066a41286a200341a00b6a290300370300200320032800c10a3602c806200320032800c40a3600cb062003200341f80a6a2903003703800602400240024020032d00c00a22024102460d00200341f00a6a2903002114200a2903002115200b2903002116200c2903002117200d290300211820132903002119200341c0056a41286a220120034180066a41286a290300370300200341c0056a41206a220720034180066a41206a290300370300200341c0056a41186a220a20034180066a41186a290300370300200341c0056a41106a220b20034180066a41106a290300370300200341c0056a41086a220c20034180066a41086a29030037030020032003290380063703c005024020032802f408450d002009102e0b200341c00a6a41286a2001290300370300200341c00a6a41206a2007290300370300200341c00a6a41186a200a290300370300200341c00a6a41106a200b290300370300200341c00a6a41086a200c290300370300200320032903c0053703c00a02402002450d0020034190096a4111109308200341d8046a20034190096a41e40010e9081a0c020b20034190096a412c6a201437020020034190096a411c6a201637020020034190096a410c6a201837020020034190096a413c6a200341c00a6a41086a29030037020020034190096a41c4006a200341c00a6a41106a220229030037020020034190096a41cc006a200341c00a6a41186a29030037020020034190096a41d4006a200341c00a6a41206a29030037020020034190096a41dc006a200341c00a6a41286a290300370200200320153702b409200320173702a4092003201937029409200320032903c00a3702c409200341d8046a20034190096a41e40010e9081a200341e0066a41086a200341d8046a413c6a290200370300200341e0066a41106a200341d8046a41c4006a290200370300200341e0066a41186a200341d8046a41cc006a290200370300200341e0066a41206a200341d8046a41d4006a290200370300200341e0066a41286a200341d8046a41dc006a2902003703002003200329028c053703e006200341d8046a410c6a290200211a200341d8046a411c6a290200211b200341d8046a412c6a290200211820032902dc04211c20032902ec04211d20032902fc04211e20034190096a200341c0076a10c802200341c00a6a200328029009220720032802980910c902427f2005200e7c2006200f7c22172006542201ad7c22142001201420055420142005511b220b1b2005201241ff017141014622011b2115427f2017200b1b200620011b21192002290300420020032903c00a42015122021b211620032903c80a420020021b211f0240200328029409450d002007102e0b2019201f56201520165620152016511b450d0220034188086a411b1093080c590b024020032802f408450d002009102e0b20034190096a4111109308200341d8046a20034190096a41e40010e9081a0b20034188086a41086a200341d8046a41086a280200360200200320032902d804370388080c570b200341c0056a200341c0076a10b808200341c00a6a20032802c00520032802c80510b105200341e8086a41026a220220032d00c30a3a000041082107200341d0066a41086a200341a00b6a290300370300200320032f00c10a3b01e8082003200341980b6a2903003703d006200341900b6a2903002120200341880b6a2903002121200341ac0b6a2802002122200341a80b6a28020021230240024020032d00c00a220c4102470d00420021244100210d42002125420021264100211342002119420021274200211f420021284100210c0c010b200341d80a6a2903002127200341d00a6a2903002119200341e80a6a2903002128200341e00a6a290300211f200341800b6a2903002126200341f80a6a2903002125200341c00a6a41086a280200210d200341cc0a6a2802002113200341f00a6a290300212420032802c40a2107200341c0086a41026a20022d00003a000020034190096a41086a200341d0066a41086a290300370300200320032f01e8083b01c008200320032903d006370390090b0240200c450d0020034180066a41181093080c4f0b41002101024002400240024020130e025000010b41002102200728020022012008460d01200120084921010c4f0b4100210220132101034020022001410176220920026a220a2007200a41306c6a28020020084b1b2102200120096b220141014b0d000b02402007200241306c6a28020022012008460d00201341e4004b0d02200220012008496a21010c4f0b201320024d0d220b2007200241306c6a220141206a2109200141186a2903002116200141106a222929030021152001410a6a210a200141096a222a2d0000212b0240024002400240024020012d0008222c4101470d00200141286a290300212d2009290300212e20034198016a20152016420a420010e70820034188016a202e202d420a420010e708201e20157d222f201e56201820167d201e201554ad7d221620185620162018511b0d02202f202e7d2230202f562016202d7d202f202e54ad7d221520165620152016511b0d02201c20032903980122167d222f201c56201a20034198016a41086a2903007d201c201654ad7d2216201a562016201a511b0d01201d20032903880122187d221e201d56201b20034188016a41086a2903007d201d201854ad7d2218201b562018201b511b450d032030211e20152118202f211c2016211a0c020b02400240200a2d0000223141ff0171450d0041062132024002400240024002400240024020314107710e0700010203040506000b410021320c050b410121320c040b410221320c030b410321320c020b410421320c010b410521320b200341b8016a201642002032ad222e420010e808200341c8016a20154200202e420010e808427f200341d0016a290300222e20032903b8017c223020032903c0014200522030202e547222321b212d427f20032903c80120321b212e0c010b200341a8016a20152016420a420010e708200341b0016a290300212d20032903a801212e0b201e20157d2230201e56201820167d201e201554ad7d221520185620152018511b0d010240202b41ff01710d00201d202e7d2218201d56201b202d7d201d202e54ad7d2216201b562016201b511b0d012018211d2016211b201c212f201a21160c040b201c202e7d222f201c56201a202d7d201c202e54ad7d2216201a562016201a511b450d030b2030211e201521180b20034180066a411a1093080c510b201e211d2018211b0b201320024d0d20200141086a2101202c0d4a202b41ff0171222b4102460d4a4200201520287d2030201f54ad7d22182030201f7d221e203056201820155620182015511b222c1b21184200201e202c1b211e0240202b0d004200201b20277d201d201954ad7d2215201d20197d221a201d562015201b562015201b511b222b1b211b4200201a202b1b211d0c4c0b4200201620277d202f201954ad7d2215202f20197d221c202f56201520165620152016511b222b1b211a4200201c202b1b211c0c4c0b20034180066a41211093080c4e0b200141046a280200210b200241196a2d0000210c200241186a2d0000210d200241166a2f01002113200241156a2d00002112200241146a2d00002110200241126a2f01002111200241116a2d00002122200241106a2d000021232002410c6a2802002109200241086a280200210a200241046a2802002108200241026a2f0100212b2002280228210120022d0001212920022d00002107200341c00a6a41086a200241226a28010036020020032002411a6a2901003703c00a02400240024020074101470d0020012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b200841ff0171450d010c480b20074103460d0120070d482008410876210220084110762107200a411076212a200a410876212c200941107621322009410876213120032903c00a210520012001280200417f6a22333602002003200537039009024020330d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22332033280200417f6a223336020020330d002001102e0b2003200c3a00d70a2003200d3a00d60a200320133b01d40a200320123a00d30a200320103a00d20a200320113b01d00a200320223a00cf0a200320233a00ce0a200320323b01cc0a200320313a00cb0a200320093a00ca0a2003202a3b01c80a2003202c3a00c70a2003200a3a00c60a200320073b01c40a200320023a00c30a200320083a00c20a2003202b3b01c00a20032003290390093703d80a202941ff0171450d014110102c2202450d5d200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d5d20014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220736020020070d482002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22072007280200417f6a220736020020070d482002102e0c480b200a41036c2009410174490d460b200341f0086a200b108905200341c00a6a20032802f008220220032802f808108a0520034180066a41086a2201200341800b6a29030037030020034180066a41106a2207200341880b6a29030037030020034180066a41186a2208200341900b6a29030037030020034180066a41206a2209200341980b6a29030037030020034180066a41286a220a200341a00b6a290300370300200320032800c10a3602c806200320032800c40a3600cb062003200341f80a6a2903003703800602400240024020032d00c00a220c4102460d00200341f00a6a2903002116200341c00a6a41286a2903002117200341c00a6a41206a2903002118200341c00a6a41186a2903002119200341c00a6a41106a290300211f200341c00a6a41086a290300211e200341c0056a41286a200a290300370300200341c0056a41206a2009290300370300200341c0056a41186a2008290300370300200341c0056a41106a2007290300370300200341c0056a41086a200129030037030020032003290380063703c005024020032802f408450d002002102e0b200341c0076a41086a200341c0056a41086a2903002205370300200341c0076a41106a200341c0056a41106a2903002206370300200341c0076a41186a200341c0056a41186a290300220e370300200341c0076a41206a200341c0056a41206a290300220f370300200341c0076a41286a200341c0056a41286a2903002214370300200320032903c00522153703c007200341c00a6a41286a22082014370300200341c00a6a41206a2209200f370300200341c00a6a41186a2202200e370300200341c00a6a41106a22012006370300200341c00a6a41086a22072005370300200320153703c00a0240200c450d0020034190096a4111109308200341d8046a20034190096a41e40010e9081a0c020b200341bc096a2016370200200341ac096a20183702002003419c096a201f370200200341cc096a2007290300370200200341d4096a2001290300370200200341dc096a2002290300370200200341e4096a2009290300370200200341ec096a2008290300370200200320173702b409200320193702a4092003201e37029409200320032903c00a3702c409200341d8046a20034190096a41e40010e9081a200341e0066a200341dc046a41e00010e9081a20034180066a41186a200341b0076a290300220537030020034180066a41106a200341a8076a290300220637030020034180066a41086a200341a0076a290300220e3703002003200329039807220f3703800620022005370300200120063703002007200e3703002003200f3703c00a20034190096a200341c00a6a10b9082003280290092201200328029809108f0221020240200328029409450d002001102e0b2002450d0220034188086a41041093080c460b024020032802f408450d002002102e0b20034190096a4111109308200341d8046a20034190096a41e40010e9081a0b20034188086a41086a200341d8046a41086a280200360200200320032902d804370388080c440b200341c00a6a41186a20034180066a41186a290300370300200341c00a6a41106a20034180066a41106a290300370300200341c00a6a41086a220120034180066a41086a29030037030020032003290380063703c00a20034190096a200341c00a6a10b90820032802900921022003280298092107200341013a00f00820022007200341f0086a410110b2010240200328029409450d002002102e0b200341cc0a6a200b360200200141063a0000200341093a00c00a200341c00a6a10fe01200341c00a6a200b10890520032802c00a220220032802c80a10ff01024020032802c40a450d002002102e0b200341063a0088080c440b20034190096a41186a200141196a29000037030020034190096a41106a200141116a29000037030020034190096a41086a200141096a2900003703002003200129000137039009200241026a2f0100210b200241046a2802002108200241086a28020021092002410c6a280200210a200241106a2d0000210c200241116a2d0000210d200241126a2f01002113200241146a2d00002112200241156a2d00002110200241166a2f01002111200241186a2d00002122200241196a2d0000212320022d0001212b2002280228210120022d00002107200341c00a6a41086a200241226a28010036020020032002411a6a2901003703c00a024002400240024020074101470d0020012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0240200841ff01710d002009410174200a4f0d030b4110102c2202450d5e200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d5e20014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220736020020070d012002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22072007280200417f6a220736020020070d012002102e0c010b20074103460d0120070d002008410876210220084110762107200941107621292009410876212a200a411076212c200a410876213220032903c00a210520012001280200417f6a2231360200200320053703d804024020310d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22312031280200417f6a223136020020310d002001102e0b200320233a00d70a200320223a00d60a200320113b01d40a200320103a00d30a200320123a00d20a200320133b01d00a2003200d3a00cf0a2003200c3a00ce0a2003202c3b01cc0a200320323a00cb0a2003200a3a00ca0a200320293b01c80a2003202a3a00c70a200320093a00c60a200320073b01c40a200320023a00c30a200320083a00c20a2003200b3b01c00a200320032903d8043703d80a202b41ff0171450d014110102c2202450d5d200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d5d20014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220736020020070d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22072007280200417f6a220736020020070d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b200341023a00e0060c010b20034180066a41186a2201420037030020034180066a41106a2202420037030020034180066a41086a220742003703002003420037038006200341c0076a41de80ca0041091081022007200341c0076a41086a2208290000370300200320032900c00737038006200341c0076a418081ca00410c10810220012008290000370300200220032900c0073703000240024020034180066a4120108f020d00200341c00a6a41186a20034190096a41186a290300370300200341c00a6a41106a20034190096a41106a290300370300200341c00a6a41086a20034190096a41086a29030037030020032003290390093703c00a200341d8046a200341c00a6a10b708024020032802dc042201450d0020032802d8042107200341d80a6a22084200370300200341d00a6a22094200370300200341c00a6a41086a220a4200370300200342003703c00a20034188086a41d9fcc6004106108102200a20034188086a41086a220b29000037030020032003290088083703c00a20034188086a4180f4cb0041061081022008200b2900003703002009200329008808370300200341d8016a200341c00a6a4120108e02024020032802dc01410020032802d8011b20074f0d00200341e0066a410610930820032802e00441ffffff3f71450d032001102e0c030b20032802e00441ffffff3f71450d002001102e0b200341c00a6a41186a20034190096a41186a290300370300200341c00a6a41106a20034190096a41106a290300370300200341c00a6a41086a20034190096a41086a29030037030020032003290390093703c00a200341003a00e00a20034180066a41186a420037030020034180066a41106a420037030020034180066a41086a220142003703002003420037038006200341c0076a41de80ca0041091081022001200341c0076a41086a2207290000370300200320032900c00737038006200341c0076a418081ca00410c108102200241086a2007290000370000200220032900c00737000020034180066a200341c00a6a10ca05200341063a00e0060c440b200341e0066a41051093080b20032d00e0064106460d420b20032802e0062102200020032902e406370024200041206a2002360000200041186a41003a00002000420037030820004201370300200424000f0b20034190096a41186a200141196a29000037030020034190096a41106a200141116a29000037030020034190096a41086a200141096a2900003703002003200129000137039009200241026a2f0100210b200241046a2802002108200241086a28020021092002410c6a280200210a200241106a2d0000210c200241116a2d0000210d200241126a2f01002113200241146a2d00002112200241156a2d00002110200241166a2f01002111200241186a2d00002122200241196a2d0000212320022d0001212b2002280228210120022d00002107200341c00a6a41086a200241226a28010036020020032002411a6a2901003703c00a02400240024020074101470d0020012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b200841ff0171450d010c410b20074103460d0120070d412008410876210220084110762107200941107621292009410876212a200a411076212c200a410876213220032903c00a210520012001280200417f6a2231360200200320053703d804024020310d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22312031280200417f6a223136020020310d002001102e0b200320233a00d70a200320223a00d60a200320113b01d40a200320103a00d30a200320123a00d20a200320133b01d00a2003200d3a00cf0a2003200c3a00ce0a2003202c3b01cc0a200320323a00cb0a2003200a3a00ca0a200320293b01c80a2003202a3a00c70a200320093a00c60a200320073b01c40a200320023a00c30a200320083a00c20a2003200b3b01c00a200320032903d8043703d80a202b41ff0171450d014110102c2202450d5b200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d5b20014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220736020020070d412002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22072007280200417f6a220736020020070d412002102e0c410b200941056c200a41036c490d3f0b200341c00a6a41186a20034190096a41186a290300370300200341c00a6a41106a20034190096a41106a290300370300200341c00a6a41086a20034190096a41086a29030037030020032003290390093703c00a200341023a00e00a20034180066a41186a2202420037030020034180066a41106a2201420037030020034180066a41086a220742003703002003420037038006200341c0076a41de80ca0041091081022007200341c0076a41086a2208290000370300200320032900c00737038006200341c0076a418081ca00410c10810220022008290000370300200120032900c00737030020034180066a200341c00a6a10ca05200041186a41003a000020004200370308200020032800e0063600192000411c6a200341e3066a28000036000020004200370300200424000f0b20034190096a41186a200141196a29000037030020034190096a41106a200141116a29000037030020034190096a41086a200141096a2900003703002003200129000137039009200241026a2f0100210b200241046a2802002108200241086a28020021092002410c6a280200210a200241106a2d0000210c200241116a2d0000210d200241126a2f01002113200241146a2d00002112200241156a2d00002110200241166a2f01002111200241186a2d00002122200241196a2d0000212320022d0001212b2002280228210120022d00002107200341c00a6a41086a200241226a28010036020020032002411a6a2901003703c00a02400240024020074101470d0020012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0240200841ff01710d002009200a4f0d030b4110102c2202450d5b200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d5b20014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220736020020070d012002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22072007280200417f6a220736020020070d012002102e0c010b20074103460d0120070d002008410876210220084110762107200941107621292009410876212a200a411076212c200a410876213220032903c00a210520012001280200417f6a2231360200200320053703d804024020310d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22312031280200417f6a223136020020310d002001102e0b200320233a00d70a200320223a00d60a200320113b01d40a200320103a00d30a200320123a00d20a200320133b01d00a2003200d3a00cf0a2003200c3a00ce0a2003202c3b01cc0a200320323a00cb0a2003200a3a00ca0a200320293b01c80a2003202a3a00c70a200320093a00c60a200320073b01c40a200320023a00c30a200320083a00c20a2003200b3b01c00a200320032903d8043703d80a202b41ff0171450d014110102c2202450d5a200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d5a20014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220736020020070d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22072007280200417f6a220736020020070d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b200341f0086a41026a200341c0056a41026a2d000022023a0000200320032f00c00522013b01f008200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a000020004201370300200424000f0b200341c00a6a41186a20034190096a41186a290300370300200341c00a6a41106a20034190096a41106a290300370300200341c00a6a41086a20034190096a41086a29030037030020032003290390093703c00a200341013a00e00a20034180066a41186a2202420037030020034180066a41106a2201420037030020034180066a41086a220742003703002003420037038006200341c0076a41de80ca0041091081022007200341c0076a41086a2208290000370300200320032900c00737038006200341c0076a418081ca00410c10810220022008290000370300200120032900c00737030020034180066a200341c00a6a10ca05200041186a41003a000020004200370308200020032800e0063600192000411c6a200341e3066a28000036000020004200370300200424000f0b200141286a2802002134200141246a2802002109200241266a2f00002135200241226a28000021082002411a6a2900002105200241196a2d0000210b200241186a2d0000210c200241166a2f0000210d200241156a2d00002129200241146a2d0000212a200241126a2f0000212c200241116a2d00002132200241106a2d000021312002410e6a2f000021122002410d6a2d000021102002410c6a2d000021112002410a6a2f00002122200241096a2d00002123200241086a2d0000212b200241066a2f00002133200241056a2d00002136200241046a2d00002113200241026a2f000021372002280228210720022d0001213820022d00002102200341d8046a41186a200141196a290000370300200341d8046a41106a200141116a290000370300200341d8046a41086a200141096a290000370300200320012900013703d804200941880e490d37200320083602c80a200320053703c00a0240200241ff017122014102470d0020072007280200417f6a220236020020032902c40a2106024020020d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b201341ff01710d364101210a2022411074202341087472202b7241036c2012411074201041087472201172410174490d36410021010c350b024020014103470d00410021014101210a0c350b200241ff01710d3620072007280200417f6a22023602002003200537039009024020020d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b2003200b3a00d70a2003200c3a00d60a2003200d3b01d40a200320293a00d30a2003202a3a00d20a2003202c3b01d00a200320323a00cf0a200320313a00ce0a200320123b01cc0a200320103a00cb0a200320113a00ca0a200320223b01c80a200320233a00c70a2003202b3a00c60a200320333b01c40a200320363a00c30a200320133a00c20a200320373b01c00a200320032903900922053703d80a0240203841ff01710d00410321020c380b4110102c2201450d57200141f8f7c60036020c2001410136020820014281808080103702004110102c2207450d5720074190f8c60036020c20074101360208200742818080801037020020012001280200417f6a220a36020041002102200a0d372001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a220a200a280200417f6a220a360200200a0d372001102e0c370b200341f8066a200141196a290000370300200341e0066a41106a200141116a290000370300200341e0066a41086a200141096a290000370300200320012900013703e0062002280228210102400240024020022d00004102470d00200241246a2802002107200241226a2f01002108200241216a2d00002109200241206a2d0000210a2002411e6a2f0100210b2002411d6a2d0000210c2002411c6a2d0000212b2002411a6a2f01002129200241196a2d0000212a200241116a2900002105200241106a2d0000210d2002410e6a2f000021132002410d6a2d000021122002410c6a2d000021102002410a6a2f00002111200241096a2d00002122200241086a2d00002123200241066a2f0000212c200241056a2d00002132200241046a2d0000210220012001280200417f6a2231360200024020310d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22312031280200417f6a223136020020310d002001102e0b200320073a00df0a200320083b00dd0a200320093a00dc0a2003200a3a00db0a2003200b3b00d90a2003200c3a00d80a2003202b3a00d70a200320293b00d50a2003202a3a00d40a200320053702cc0a2003200d3a00cb0a200320133b00c90a200320123a00c80a200320103a00c70a200320113b00c50a200320223a00c40a200320233a00c30a2003202c3b00c10a200320323a00c00a200241ff01714101460d014110102c2202450d59200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d5920014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220736020020070d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22072007280200417f6a220736020020070d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b200341023a00c0050c010b200320032d00c20a3a00da04200320032f01c00a3b01d804200320073a00f704200320083b00f504200320093a00f4042003200a3a00f3042003200b3b00f1042003200c3a00f0042003200d3a00e304200320133b00e104200320123a00e004200320103a00df04200320113b00dd04200320223a00dc04200320233a00db04200320032903d00a3703e804200320053c00e404200320054218883c00e704200320054208883d00e504200341b8046a41186a22024200370300200341b8046a41106a22014200370300200341b8046a41086a22074200370300200342003703b804200341c0076a41de80ca0041091081022007200341c0076a41086a2208290000370300200320032900c0073703b804200341c0076a418081ca00410c10810220022008290000370300200120032900c007370300200341c00a6a200341b8046a10aa0520032d00e00a210220034180066a41186a2201200341c00a6a41186a220729030037030020034180066a41106a2208200341c00a6a41106a220929030037030020034180066a41086a220a200341c00a6a41086a220b290300370300200320032903c00a370380060240024020024103460d0020034190096a41186a2001290300220537030020034190096a41106a2008290300220637030020034190096a41086a200a290300220e3703002003200329038006220f370390092007200537030020092006370300200b200e3703002003200f3703c00a0240200341e0066a200341c00a6a412010ec08450d00200341c0056a41021093080c020b20034190096a200341e0066a10ba08200341c00a6a200328029009220220032802980910b70520032903c80a210520032802c40a21010240200328029409450d002002102e0b2001410120011b210941002102024002400240024002402005420020011b22054220882206a7220a0e020201000b41002102200a210103402001410176220820026a210720072002200920074105746a200341d8046a412010ec084101481b2102200120086b220141014b0d000b0b200920024105746a200341d8046a412010ec082207450d02200341c00a6a41186a200341d8046a41186a290300370300200341c00a6a41106a200341d8046a41106a290300370300200341c00a6a41086a200341d8046a41086a290300370300200320032903d8043703c00a200341c00a6a210120022007411f766a2207200a4d0d012007200a1045000b200341c00a6a41186a200341d8046a41186a290300370300200341c00a6a41106a200341d8046a41106a290300370300200341c00a6a41086a200341d8046a41086a290300370300200320032903d8043703c00a41002107200341c00a6a21010b024002400240200a2005a7460d00200521060c010b200a41016a2202200a490d5d200a4101742208200220022008491b22024104200241044b1b220241ffffff3f7120024621082002410574210202400240200a0d0020034100360290090c010b20034198096a41013602002003200936029009200320064205863e0294090b200341c0076a2002200820034190096a107d200341c8076a280200210220032802c0074101460d0120032802c40721092002410576ad21060b200920074105746a220241206a2002200a20076b41057410ea081a200241186a200141186a290000370000200241106a200141106a290000370000200241086a200141086a29000037000020022001290000370000200341c00a6a41186a22014200370300200341c00a6a41106a22074200370300200341c00a6a41086a22024200370300200342003703c00a20034188086a41d9fcc6004106108102200220034188086a41086a220829000037030020032003290088083703c00a20034188086a4180f4cb004106108102200120082900003703002007200329008808370300200341e8016a200341c00a6a4120108e0220032802e801210120032802ec0121072002200642ffffffff0f8320054280808080107c4280808080708384370300200320093602c40a2003200741c093066a41c0930620011b22023602c00a20034190096a200341e0066a10ba082003280290092201200328029809200341c00a6a10bf050240200328029409450d002001102e0b0240200642ffffff3f83500d002009102e0b200341c00a6a41086a410a3a0000200341c00a6a41096a20032903d804370000200341e90a6a20032903e006370000200341d10a6a200341d8046a41086a290300370000200341d90a6a200341d8046a41106a290300370000200341e10a6a200341d8046a41186a290300370000200341f10a6a200341e0066a41086a290300370000200341f90a6a200341e0066a41106a290300370000200341810b6a200341e0066a41186a290300370000200341093a00c00a2003418c0b6a2002360200200341c00a6a10fe0120034180066a41186a2202420037030020034180066a41106a2201420037030020034180066a41086a220742003703002003420037038006200341c0076a41de80ca0041091081022007200341c0076a41086a2208290000370300200320032900c00737038006200341c0076a418081ca00410c10810220022008290000370300200120032900c00737030020034180066a412010ff01200341063a00c0050c370b2002450d5b0c5a0b200341c0056a410a109308200542ffffff3f83500d012009102e0c010b200341c0056a41091093080b20032d00c0054106460d330b20032802c0052102200020032902c405370024200041206a2002360000200041186a41003a00002000420037030820004201370300200424000f0b200141046a2802002101200341c00a6a41286a200241286a280200360200200341c00a6a41206a200241206a290200370300200341c00a6a41186a200241186a290200370300200341c00a6a41106a200241106a290200370300200341c00a6a41086a2207200241086a290200370300200320022902003703c00a200341c00a6a10a7050d16200341cc0a6a2001360200200741063a0000200341093a00c00a200341c00a6a10fe01200341c00a6a200110890520032802c00a220220032802c80a10ff01024020032802c40a450d002002102e0b200041186a41003a00002000420037030820002003280090093600192000411c6a20034193096a28000036000020004200370300200424000f0b200141046a2802002101200341c00a6a41286a200241286a280200360200200341c00a6a41206a200241206a290200370300200341c00a6a41186a200241186a290200370300200341c00a6a41106a200241106a290200370300200341c00a6a41086a200241086a290200370300200320022902003703c00a200341c00a6a10a7050d14200320013602e806200342e4cab5fbb6ccdcb0e3003703e006410c102c2202450d542003420c3702c407200320023602c007200341c0076a200341e0066a41081074200320013602c00a200341c0076a200341c00a6a41041074200341033a00c00a20034190096a41086a20032802c807360200200320032903c00737039009200341d8046a200341c00a6a20034190096a10c304024020032d00d8044106470d00200341063a0080060c300b20034180066a410210930820032d0080064106460d2f20032902840621050c2e0b200141306a2903002105200141286a2903002106200141216a2d0000210b20034198046a41186a2207200141196a29000037030020034198046a41106a2208200141116a29000037030020034198046a41086a2209200141096a2900003703002003200129000137039804200341c00a6a41286a200241286a280200360200200341c00a6a41206a200241206a290200370300200341c00a6a41186a200241186a290200370300200341c00a6a41106a200241106a290200370300200341c00a6a41086a200241086a290200370300200320022902003703c00a20034190096a200341c00a6a10c10220034180066a41086a220220034190096a41096a29000037030020034180066a41106a220120034190096a41116a29000037030020034180066a41186a220a20034190096a41196a29000037030020032003290091093703800620032d0090094101460d11200341b8046a41186a200a290300220e370300200341b8046a41106a2001290300220f370300200341b8046a41086a20022903002214370300200320032903800622153703b80420034188086a41186a200e37030020034188086a41106a200f37030020034188086a41086a20143703002003201537038808200341f0086a41186a2007290300370300200341f0086a41106a2008290300370300200341f0086a41086a200929030037030020032003290398043703f008024020034188086a200341f0086a412010ec080d00200341c00a6a411f1093080c2c0b20034190096a20034188086a10c802200341c00a6a200328029009220120032802980910c902200341d00a6a290300420020032903c00a42015122021b210e20032903c80a420020021b210f0240200328029409450d002001102e0b0240200f20065a200e20055a200e2005511b0d00200341c00a6a411b1093080c2c0b200341a8086a20034188086a10b808200341c00a6a20032802a808223720032802b008223910b105200341e8086a41026a220220032d00c30a3a0000200341d0066a41086a2201200341a00b6a290300370300200320032f00c10a3b01e8082003200341980b6a2903003703d006200341ac0b6a280200213a0240024020032d00c00a22074102470d0020034190096a41206a220241003602004200211420034190096a41106a420037030020034190096a41186a4200370300200341083602c40520034190096a41086a4200370300200342003703c805200341003a00c005200342003703d005200342003703d805200342003703900920034190096a41306a29030021192002290300211b20032903b809211f4200210e4200210f420021150c010b200341c00a6a41186a2903002116200341c00a6a41106a2903002117200341e80a6a290300210e200341c00a6a41206a2903002114200341f80a6a2903002115200341900b6a2903002119200341880b6a290300211f200341c00a6a41086a2802002108200341cc0a6a2802002109200341c00a6a41306a290300210f20032802c40a210a20034190096a41206a200341c00a6a41c0006a290300221b37030020034190096a41306a201937030020034190096a41c0006a2001290300370300200320173703d005200320153703a80920032014370390092003201f3703b809200320073a00c005200320032f01e8083b00c105200320093602cc05200320083602c8052003200a3602c4052003200f3703a009200320032903d0063703c809200320163703d8052003200e37039809200320022d00003a00c3052003200341a80b6a280200220a3602b8080b200342003703d807200320053703d007200320063703c807200320032903f0083700e1062003200341f0086a41086a2903003700e9062003200341f0086a41106a2903003700f1062003200341f0086a41176a2900003700f8062003200b3a00c107200320032d008f093a00c007200320153703d8072003200f3703d0072003200e3703c807200341013a00e00620032903e006211620032903e806211820032903f006211e20032903f806211a200320032903d805221d3703f806200320032903d00522273703f006200320032903c805221c3703e806200320032903c00522173703e0062003201a3703d8052003201e3703d005200320183703c805200320163703c00520032903c007211e200320143703c007200341a8096a4200370300200320053703a00920032006370398092003201e3703900920032903c809211e200341c0096a4200370300200342003703c809200342003703b809200342003703b00920032903d009211a200342003703d009200341003602b808200341c8096a2108200341b8096a2109200341b0096a21012016a721070240024002402017a741ff01714101460d002017422088a7210c201ca7210a201c422088a70d02200920034190096a200741ff017141014622021b2207200e37030820072014370300200341a8096a200341c0056a41107220021b2207201d37030820072027370300200820034190096a41106a20021b220720153703082007200f370300200341b8086a200120021b201ba7360200200a450d01200a41306c450d01200c102e0c010b200341c00a6a41176a200341e0066a410172220241176a290000370000200341c00a6a41106a200241106a290000370300200341c00a6a41086a200241086a290000370300200320022900003703c00a20032014a7220c3a00df0a4106210202400240024002400240024002400240200c41087641ff01710e0706000102030405060b410121020c040b410221020c030b410321020c020b410421020c010b410521020b200341b0026a200f42002002ad2214420010e808200341c0026a200e42002014420010e808427f200341c8026a290300221420032903b0027c221620032903b80242005220162014547222021b2114427f20032903c00220021b21160c010b200341a0026a200e200f420a420010e708200341a8026a290300211420032903a00221160b200341c00a6a20162014200e200f10bb081a200920034190096a200741ff017141014622021b220720193703082007201f370300200820034190096a41106a20021b2207201a3703082007201e3703002001200341c0056a41187220021b201b37030020034190096a41186a200341c0056a41107220021b2015370300200341b8086a200120021b200a3602000b02400240200b41ff0171450d00410621020240024002400240024002400240200b4107710e0700010203040506000b410021020c050b410121020c040b410221020c030b410321020c020b410421020c010b410521020b20034180026a200542002002ad220e420010e80820034190026a20064200200e420010e808427f20034198026a290300220e2003290380027c220f200329038802420052200f200e547222021b211a427f20032903900220021b211c0c010b200341f0016a20062005420a420010e708200341f8016a290300211a20032903f001211c0b200341c0086a200341f0086a10b808200341c00a6a20032802c008223b20032802c808223c10b105200341e8086a41026a220220032d00c30a3a000041082138200341d0066a41086a2201200341a00b6a290300370300200320032f00c10a3b01e8082003200341980b6a2903003703d006200341900b6a290300211b200341880b6a2903002128200341ac0b6a280200213d200341a80b6a280200213e0240024020032d00c00a22344102470d004200211f4100213541002136420021184200211e4200211942002121420021204200211d410021340c010b200341d80a6a2903002118200341d00a6a290300211f200341e80a6a2903002119200341e00a6a290300211e200341800b6a290300211d200341f80a6a2903002120200341c00a6a41086a2802002135200341cc0a6a2802002136200341f00a6a290300212120032802c40a2107200341e4086a41026a20022d00003a0000200341d0086a41086a2001290300370300200320032f01e8083b01e408200320032903d0063703d0084101210120344101460d14200721380b427f201920057c201e20067c220f201e542202ad7c220e2002200e201954200e2019511b22021b2119427f200f20021b211e427f2018201a7c201f201c7c220f201f542202ad7c220e2002200e201854200e2018511b22021b2118427f200f20021b211f0240203641306c2202450d00203820026a210c200341f80a6a2101200341c00a6a410172220d41036a2113203821020340200241306a21070240200241086a2d00004101710d00200241096a2d00002133200341d0066a2002280200108905200341c00a6a20032802d006220820032802d8062212108a0520034180066a41086a2229200141086a221029000037030020034180066a41106a222a200141106a221129000037030020034180066a41186a222c200141186a222229000037030020034180066a41206a2232200141206a222329000037030020034180066a41286a2231200141286a222b2900003703002003200d2800003602c806200320132800003600cb062003200129000037038006200341c00a6a41306a2109200341c00a6a41206a210a200341c00a6a41106a210b0240024020032d00c00a22024102470d00410221020c010b2009290300210e200a2903002114200b290300211520032903e80a210f20032903d80a211620032903c80a2117200341d8046a41086a2029290300370300200341d8046a41106a202a290300370300200341d8046a41186a202c290300370300200341d8046a41206a2032290300370300200341d8046a41286a2031290300370300200320032800cb063600eb08200320032802c8063602e80820032003290380063703d80420020d00427f200e20057c200f20067c2227200f542202ad7c220f2002200f200e54200f200e511b22021b210e427f202720021b210f0240024020334101710d00427f2014201a7c2016201c7c22272016542202ad7c22162002201620145420162014511b22021b2114427f202720021b21160c010b427f2015201a7c2017201c7c22272017542202ad7c22172002201720155420172015511b22021b2115427f202720021b21170b410021020b200d20032802e808360000200120032903d8043703002009200e370300200a2014370300200b2015370300201320032800eb083600002010200341d8046a41086a2903003703002011200341d8046a41106a2903003703002022200341d8046a41186a2903003703002023200341d8046a41206a290300370300202b200341d8046a41286a2903003703002003200f3703e80a200320163703d80a200320173703c80a200320023a00c00a0240024020024102470d002008201210ff010c010b20034100360288062003420137038006200341c00a6a20034180066a10bc0520082012200328028006220220032802880610b201200328028406450d002002102e0b20032802d406450d002008102e0b20072102200c2007470d000b0b2038210720342101203621020c2a0b200341c00a6a411d10930820032902c40a210520032802c00a21020240200a450d00200a41306c450d00200c102e0b41012101200741ff01710d2a2018a72207450d2a200741306c450d2a2016422088a7102e0c2a0b200341c00a6a41286a2208200241286a280200360200200341c00a6a41206a2209200241206a290200370300200341c00a6a41186a220a200241186a290200370300200341c00a6a41106a220b200241106a290200370300200341c00a6a41086a220c200241086a290200370300200320022902003703c00a20034190096a200341c00a6a10c10220034180066a41086a220220034199096a29000037030020034180066a41106a2201200341a1096a29000037030020034180066a41186a2207200341a9096a29000037030020032003290091093703800620032d0090094101460d0f200341b8046a41186a20072903002205370300200341b8046a41106a20012903002206370300200341b8046a41086a2002290300220e3703002003200329038006220f3703b804200341f0086a41186a2005370300200341f0086a41106a2006370300200341f0086a41086a200e3703002003200f3703f00820034198046a200341f0086a10b808200341c00a6a200328029804220720032802a004220d10b105200341e8086a41026a220220032d00c30a3a0000200341d0066a41086a200341a00b6a290300370300200320032f00c10a3b01e8082003200341980b6a2903003703d0060240024020032d00c00a22014102470d0042002106200342003703d805200342003703d005200342003703c805200342003703c00520034200370388064100210a200341003a00800620034108360284062003420037039006200342003703980620034100360290094100210142002105420021150c010b200341880b6a290300210f200341800b6a2903002114200341f80a6a2903002115200829030021062009290300210e200a2903002116200b2903002117200341f00a6a2903002105200341cc0a6a2802002108200c280200210920032802c40a210a200341a0096a200341900b6a290300370300200341b0096a200341d8066a29030037030020032017370390062003200f37039809200320013a008006200320032f01e8083b0081062003200836028c0620032009360288062003200a36028406200320153703d805200320053703d005200320032903d0063703a809200320163703980620032014370390092003200e3703c005200320063703c805200320022d00003a0083062003200341a80b6a28020022083602a808200e420888a72101200ea7210a0b200341083602e406200341003a00e006200341003602c007200329039806210e200342003703980620032903900621142003420037039006200329038806210f2003420037038806200342003703d805200342003703d005200342003703c805200342003703c0052003200e3703f806200320143703f0062003200f3703e80620032903d80721162003200341a8096a220229030022173703d80720032903d0072118200320032903a009221e3703d00720032903c80721192003200329039809221a3703c80720032903e006210e200320032903800622143703e0062003200e3703800620032903c007211f2003200329039009221c3703c00720022016370300200320183703a00920032019370398092003201f37039009200ea7210902400240024002402014a741ff0171220b4101470d0020032903b009210e200341ef046a20032900f806370000200341e8046a20032900f106370300200341d8046a41086a20032900e906370300200320032900e1063703d8042003200a3a00f70402400240200141ff0171450d0041062102024002400240024002400240024020014107710e0700010203040506000b410021020c050b410121020c040b410221020c030b410321020c020b410421020c010b410521020b200341e8026a200542002002ad220f420010e808200341f8026a20064200200f420010e808427f20034180036a290300220f20032903e8027c221420032903f0024200522014200f547222021b210f427f20032903f80220021b21140c010b200341d8026a20062005420a420010e708200341e0026a290300210f20032903d80221140b200341d8046a2014200f2006200510bb082102200341c00a6a41186a220a4200370300200341c00a6a41106a220b4200370300200341c00a6a41086a220c4200370300200342003703c00a20034188086a41d9fcc6004106108102200c20034188086a41086a221329000037030020032003290088083703c00a20034188086a4180f4cb004106108102200a2013290000370300200b200329008808370300200341d0026a200341c00a6a4120108e0220032802d402410020032802d0021b210c4180c09306210b0240024002400240024020014107710e0706000102030407060b4180ce18210b0c060b41809c31210b0c050b4180b8e200210b0c040b4180f0c401210b0c030b4180e08903210b0c020b200341c00a6a411c10930820032902c40a210520032802c00a21020240200b0d00200fa72201450d00200141306c450d002014422088a7102e0b41012101200941ff01710d0241010d0241010d02200e422088a7102e410121010c020b4100210b0b20034190096a41086a200341c0056a200941ff017141014622011b2209201e3703082009201a37030020034190096a20034180066a41187220011b201c370300200341c0056a41187220034180066a41107220011b2015370300200341a8086a20034190096a20011b2008200b200c6a2209200820094b1b36020020034190096a41186a200341c0056a41107220011b2201200e20052017200656200e200556200e2005511b22081b37030820012017200620081b370300200a200329039806370300200341f80a6a20032903d805370300200341f00a6a20032903d005370300200341e80a6a20032903c805370300200341c00a6a41206a20032903c005370300200341800b6a200329039009370300200341880b6a200329039809370300200341900b6a20034190096a41106a290300370300200341980b6a20032903a809370300200341a00b6a20034190096a41206a290300370300200341a80b6a20032802a80836020020032003290390063703d00a200320032903880622063703c80a200320032903800622053703c00a024002402005a7220141ff01714102470d002007200d10ff010c010b200341d8046a200341c00a6a10c2042007200d20032802d804220820032802e00410b201024020032802dc04450d002008102e0b200141ff01710d002006a72201450d00200141306c450d002005422088a7102e0b410021010b0240200328029c04450d002007102e0b20010d27200341c00a6a41086a41093a0000200341c00a6a41096a20032903f008370000200341d10a6a200341f0086a41086a290300370000200341d90a6a200341f0086a41106a290300370000200341e10a6a200341f0086a41186a290300370000200341093a00c00a200341c00a6a10fe01200320032800d0083602c0082003200341d3086a2800003600c308200041186a41003a0000200041106a2002ad220542f0cfe9037e200542c0f0f50b7e7c20054280c2d72f7e7c42d08dc582017c37030020004201370308200020032802c0083600192000411c6a20032800c30836000020004200370300200424000f0b200341c00a6a41286a200241286a280200360200200341c00a6a41206a200241206a290200370300200341c00a6a41186a200241186a290200370300200341c00a6a41106a200241106a290200370300200341c00a6a41086a200241086a290200370300200320022902003703c00a0240200341c00a6a10a705450d00200341e0066a41026a200341d8046a41026a2d000022023a0000200320032f00d80422013b01e006200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a000020004201370300200424000f0b20034180066a41186a2202420037030020034180066a41106a2201420037030020034180066a41086a220742003703002003420037038006200341c0076a41de80ca0041091081022007200341c0076a41086a2208290000370300200320032900c00737038006200341c0076a418c81ca00410b10810220022008290000370300200120032900c00737030020034180066a412010ff01200041186a41003a00002000420037030820002003280090093600192000411c6a20034193096a28000036000020004200370300200424000f0b2001410c6a2802002108200141086a2802002107200141046a2802002101200341c00a6a41286a200241286a280200360200200341c00a6a41206a200241206a290200370300200341c00a6a41186a200241186a290200370300200341c00a6a41106a200241106a290200370300200341c00a6a41086a200241086a290200370300200320022902003703c00a20034190096a200341c00a6a10c10220034180066a41086a220220034199096a29000037030020034180066a41106a2209200341a1096a29000037030020034180066a41186a220a200341a9096a29000037030020032003290091093703800602400240024020032d0090094101460d00200341d8046a41186a200a290300370300200341d8046a41106a2009290300370300200341d8046a41086a200229030037030020032003290380063703d804200320083602c80a200320073602c40a200320013602c00a200341e0066a200341d8046a200341c00a6a10bc08200341c8066a41026a220120032d00e3063a0000200320032f00e1063b01c80620032d00e00622024106460d0220032902e4062105200341c0056a41026a20012d00003a0000200320032f01c8063b01c0050c010b4102210202402007450d002001102e0b0b200341f0086a41026a200341c0056a41026a2d000022013a0000200320032f01c00522073b01f008200041206a20023a0000200041186a41003a000020004200370308200020073b0021200041236a20013a00002000200537002420004201370300200424000f0b200041186a41003a000020004200370308200020032800c0073600192000411c6a200341c3076a28000036000020004200370300200424000f0b2001410c6a2802002132200141086a2802002129200141046a280200212c4101212b200241246a2802002107200241226a2f01002108200241216a2d00002109200241206a2d0000210a2002411e6a2f0100210b2002411d6a2d0000210c200241106a2d0000210d2002410e6a2f000021132002410d6a2d000021122002410c6a2d000021102002410a6a2f01002111200241096a2d00002122200241086a2d0000212320022802282101024020022d00004101470d002002411c6a2d0000212a2002411a6a2f01002131200241196a2d00002133200241116a2900002106200241066a2f01002136200241056a2d00002137200241046a2d0000210220012001280200417f6a2238360200024020380d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22382038280200417f6a223836020020380d002001102e0b200320073a00df0a200320083b00dd0a200320093a00dc0a2003200a3a00db0a2003200b3b00d90a2003200c3a00d80a2003202a3a00d70a200320313b00d50a200320333a00d40a200320063702cc0a2003200d3a00cb0a200320133b00c90a200320123a00c80a200320103a00c70a200320113b00c50a200320223a00c40a200320233a00c30a200320363b00c10a200320373a00c00a200241ff01714101460d0c4110102c2202450d50200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d5020014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a222a360200202a0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a222a202a280200417f6a222a360200202a0d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0c230b2001410c6a2802002108200141086a2802002107200141046a2802002101200341c00a6a41286a200241286a280200360200200341c00a6a41206a200241206a290200370300200341c00a6a41186a200241186a290200370300200341c00a6a41106a200241106a290200370300200341c00a6a41086a200241086a290200370300200320022902003703c00a20034190096a200341c00a6a10c10220034180066a41086a220220034199096a29000037030020034180066a41106a2209200341a1096a29000037030020034180066a41186a220a200341a9096a29000037030020032003290091093703800602400240024020032d0090094101460d00200341d8046a41186a200a290300370300200341d8046a41106a2009290300370300200341d8046a41086a200229030037030020032003290380063703d804200320083602c80a200320073602c40a200320013602c00a200341e0066a200341d8046a200341c00a6a10bd08200341c8066a41026a220120032d00e3063a0000200320032f00e1063b01c80620032d00e00622024106460d0220032902e4062105200341f0086a41026a20012d00003a0000200320032f01c8063b01f0080c010b4102210202402007450d002001102e0b0b20034188086a41026a2201200341f0086a41026a2d00003a0000200320032800c0073602c005200320032f01f0083b0188082003200341c3076a2800003600c305200041186a41003a000020004200370308200020032802c0053600192000411c6a20032800c305360000200041206a20023a0000200041246a2005370200200020032f0188083b0021200041236a20012d00003a000020004201370300200424000f0b200320032800c0073602c0052003200341c3076a2800003600c305200041186a41013a000020004200370308200020032802c0053600192000411c6a20032800c30536000020004200370300200424000f0b2001410c6a2802002132200141086a2802002129200141046a280200212c4101212b200241246a2802002107200241226a2f01002108200241216a2d00002109200241206a2d0000210a2002411e6a2f0100210b2002411d6a2d0000210c200241106a2d0000210d2002410e6a2f000021132002410d6a2d000021122002410c6a2d000021102002410a6a2f01002111200241096a2d00002122200241086a2d0000212320022802282101024020022d00004101470d002002411c6a2d0000212a2002411a6a2f01002131200241196a2d00002133200241116a2900002106200241066a2f01002136200241056a2d00002137200241046a2d0000210220012001280200417f6a2238360200024020380d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22382038280200417f6a223836020020380d002001102e0b200320073a00df0a200320083b00dd0a200320093a00dc0a2003200a3a00db0a2003200b3b00d90a2003200c3a00d80a2003202a3a00d70a200320313b00d50a200320333a00d40a200320063702cc0a2003200d3a00cb0a200320133b00c90a200320123a00c80a200320103a00c70a200320113b00c50a200320223a00c40a200320233a00c30a200320363b00c10a200320373a00c00a200241ff01714101460d094110102c2202450d4e200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d4e20014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a222a360200202a0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a222a202a280200417f6a222a360200202a0d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0c200b200141246a2802002113200341c0056a41186a2207200141196a290000370300200341c0056a41106a2208200141116a290000370300200341c0056a41086a2209200141096a290000370300200320012900013703c005200341c00a6a41286a200241286a280200360200200341c00a6a41206a200241206a290200370300200341c00a6a41186a2201200241186a290200370300200341c00a6a41106a220a200241106a290200370300200341c00a6a41086a220b200241086a290200370300200320022902003703c00a20034190096a200341c00a6a10c102200341b8046a41086a220220034190096a41096a290000370300200341b8046a41106a220c20034190096a41116a290000370300200341b8046a41186a220d20034190096a41196a29000037030020032003290091093703b8040240024020032d0090094101460d00200341c0076a41186a200d290300370300200341c0076a41106a200c290300370300200341c0076a41086a2002290300370300200320032903b8043703c007200341e4066a41003b0100200341003602e00620012007290300370300200a2008290300370300200b2009290300370300200320032903c0053703c00a20034190096a200341c00a6a10be0820034198036a2003280290092201200328029809200341e0066a4106410010ca0402402003280298030d00200341c00a6a41101093080c1e0b2003200328029c032202410620024106491b22023602dc042003200341e0066a3602d804200341003a00f0080240024002402002450d0020032002417f6a3602dc042003200341e0066a4101723602d80420032d00e0060e020102000b4190c1cb00412910ef02200341c00a6a41101093080c1f0b200341c00a6a41101093080c1e0b20034190036a200341d8046a10ab01200328029003450d014190c1cb00412910ef02200341c00a6a41101093080c1d0b200341023a0098040c1e0b20032802940321020240200328029409450d002001102e0b0240200220134d0d0020034198046a41201093080c1d0b200341f0086a200341c0056a109808200341c00a6a20032802f008220220032802f80810ad0520034190096a41086a2201200341c90a6a29000037030020034190096a41106a2207200341d10a6a29000037030020034190096a41186a2208200341d90a6a29000037030020034190096a411f6a2209200341e00a6a280000360000200320032900c10a3703900902400240024020032d00c00a220a4102460d00200341880b6a2903002105200341800b6a2903002106200341f80a6a2802002112200341f40a6a2802002113200341f00a6a280200210b200341e80a6a280200210c200341e40a6a280200210d200341d8046a411f6a2009280000360000200341d8046a41186a2008290300370300200341d8046a41106a2007290300370300200341d8046a41086a200129030037030020032003290390093703d804024020032802f408450d002002102e0b200341c00a6a411f6a200341d8046a411f6a280000360000200341c00a6a41186a2202200341d8046a41186a290300370300200341c00a6a41106a2201200341d8046a41106a290300370300200341c00a6a41086a2207200341d8046a41086a290300370300200320032903d8043703c00a200a450d01200341e0066a41186a2002290300370300200341e0066a41106a2001290300370300200341e0066a41086a2007290300370300200320032903c00a3703e0060240200c450d00200d102e0b20034180066a41086a200341e0066a41086a290300220e37030020034180066a41106a200341e0066a41106a290300220f37030020034180066a41186a200341e0066a41186a2903002214370300200320032903e00622153703800620034190096a41186a201437030020034190096a41106a200f37030020034190096a41086a200e3703002003201537039009200341c00a6a41186a22024200370300200341c00a6a41106a22014200370300200341c00a6a41086a22074200370300200342003703c00a20034188086a41d9fcc6004106108102200720034188086a41086a220829000037030020032003290088083703c00a20034188086a4180f4cb00410610810220022008290000370300200120032900880837030020034188036a200341c00a6a4120108e02200328028c0341002003280288031b2202200b4180ce184100200341c0076a20034190096a412010ec081b6a4180ce186a4f0d0220034198046a410e1093080c1f0b20032802f408450d002002102e0b20034198046a41101093080c1d0b02402013450d00200220124b0d0020034198046a410f1093080c1d0b200341d8046a20034190096a200341c0076a200620054100108904200341c00a6a200341c0056a10980820032802c00a220220032802c80a10ff01024020032802c40a450d002002102e0b200341c00a6a41086a410f3a0000200341e90a6a200329039009370000200341d10a6a200341c0056a41086a290300370000200341d90a6a200341c0056a41106a290300370000200341e10a6a200341c0056a41186a290300370000200341f10a6a20034190096a41086a290300370000200341f90a6a20034190096a41106a290300370000200341810b6a20034190096a41186a290300370000200341093a00c00a200341c00a6a41096a20032903c005370000200341b00b6a2006370300200341b80b6a2005370300200341a10b6a200341c0076a41186a290300370000200341990b6a200341c0076a41106a290300370000200341910b6a200341c0076a41086a290300370000200341890b6a20032903c007370000200341c00a6a10fe01200341063a0098040c1e0b200341d8046a41186a200141196a290000370300200341d8046a41106a200141116a290000370300200341d8046a41086a200141096a290000370300200320012900013703d804200341c00a6a41286a2201200241286a280200360200200341c00a6a41206a2207200241206a290200370300200341c00a6a41186a2209200241186a290200370300200341c00a6a41106a220a200241106a290200370300200341c00a6a41086a220b200241086a290200370300200320022902003703c00a20034190096a200341c00a6a10c10202400240024020032d0090094101460d00200341c0076a200341d8046a10b808200341c00a6a20032802c007220820032802c807220c10b105200341e8086a41026a220220032d00c30a3a0000200341d0066a41086a200341c00a6a41e0006a290300370300200320032f00c10a3b01e8082003200341c00a6a41d8006a2903003703d0060240024020032d00c00a220d4102470d00200341a0096a4200370300200341a8096a4200370300200341b0096a4200370300200341b8096a420037030020034190096a41306a420037030020034190096a41386a420037030020034190096a41c0006a4100360200200341083602940920034190096a41086a4200370300200341003a0090090c010b200341c00a6a41c8006a2903002105200341c00a6a41c0006a2903002106200341c00a6a41386a290300210e2001290300210f2007290300211420092903002115200a2903002116200341c00a6a41306a2903002117200341c00a6a410c6a2802002101200b280200210720032802c40a210920034190096a41d0006a200341c00a6a41d0006a29030037030020034190096a41c8006a200537030020034190096a41c0006a200637030020034190096a41386a200e370300200341b8096a200f370300200341b0096a2014370300200341a8096a2015370300200341a0096a201637030020034190096a41306a201737030020034190096a410c6a200136020020034190096a41086a200736020020034190096a41d8006a20032903d00637030020034190096a41e0006a200341d0066a41086a2903003703002003200d3a009009200320032f01e8083b0091092003200936029409200320022d00003a00930920034190096a41e8006a200341c00a6a41e8006a2903003703000b200341d80a6a22024200370300200341c00a6a41106a22014200370300200341c00a6a41086a22074200370300200342003703c00a20034188086a41d9fcc6004106108102200720034188086a41086a220929000037030020032003290088083703c00a20034188086a4180f4cb004106108102200220092900003703002001200329008808370300200341a0036a200341c00a6a4120108e020240200341f8096a200341d0096a20032d009009220241014622011b28020020032802a403410020032802a0031b4b0d00200341e8096a200341c0096a20011b22014200370300200141106a4100360200200141086a42003703000b0240024020024101470d00200341c0096a290300210e200341b8096a290300210f0c010b200341c8096a290300210e20034190096a41306a290300210f2003419c096a28020041306c2201450d0020032802940941206a21020340200241706a22072903002106200741086a29030021050240200241686a2d00004101470d00427f2005200241086a2903007c200620022903007c22142006542207ad7c22062007200620055420062005511b22071b2105427f201420071b21060b200e20052006200f542005200e542005200e511b22071b210e200f200620071b210f200241306a2102200141506a22010d000b0b200341c00a6a20034190096a41f00010e9081a0240024020032d00c00a22024102470d002008200c10ff010c010b200341e0066a200341c00a6a10c2042008200c20032802e006220120032802e80610b201024020032802e406450d002001102e0b20020d00200341c80a6a2802002202450d00200241306c450d0020032802c40a102e0b024020032802c407450d002008102e0b200f200e844200520d0142e4cab5fbb6ccdcb0e300200341d8046a10ea020c020b200341f0086a41026a200341c0056a41026a2d000022023a0000200320032f00c00522013b01f008200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a000020004201370300200424000f0b42e4cab5fbb6ccdcb0e300200341d8046a200f200e41021085060b200041186a41003a00002000420037030820002003280080063600192000411c6a20034183066a28000036000020004200370300200424000f0b200141046a2802002101200341c00a6a41286a200241286a280200360200200341c00a6a41206a200241206a290200370300200341c00a6a41186a200241186a290200370300200341c00a6a41106a200241106a290200370300200341c00a6a41086a200241086a290200370300200320022902003703c00a20034190096a200341c00a6a10c10220034180066a41086a220220034199096a29000037030020034180066a41106a2207200341a1096a29000037030020034180066a41186a2208200341a9096a29000037030020032003290091093703800602400240024020032d0090094101470d00200341023a00e0060c010b200341d8046a41186a2008290300370300200341d8046a41106a2007290300370300200341d8046a41086a200229030037030020032003290380063703d804200341e0066a200341d8046a2001410010bf0820032d00e0064106460d0120032902e40621050b20032802e006210320002005370024200041206a2003360000200041186a41003a00002000420037030820004201370300200424000f0b20004200370308200020032800c007360019200041186a41003a00002000411c6a200341c3076a28000036000020004200370300200424000f0b200141246a2802002107200341e0066a41186a200141196a290000370300200341e0066a41106a200141116a290000370300200341e0066a41086a200141096a290000370300200320012900013703e006200341c00a6a41286a200241286a280200360200200341c00a6a41206a200241206a290200370300200341c00a6a41186a200241186a290200370300200341c00a6a41106a200241106a290200370300200341c00a6a41086a200241086a290200370300200320022902003703c00a20034190096a200341c00a6a10c10220034180066a41086a220220034190096a41096a29000037030020034180066a41106a220120034190096a41116a29000037030020034180066a41186a220820034190096a41196a29000037030020032003290091093703800620032d0090094101460d03200341d8046a41186a2008290300370300200341d8046a41106a2001290300370300200341d8046a41086a200229030037030020032003290380063703d804200341c00a6a200341e0066a2007200341e0066a200341d8046a412010ec0841004710bf08200341c8066a41026a220120032d00c30a3a0000200320032f00c10a3b01c806024020032d00c00a22024106460d0020032902c40a2105200341c0056a41026a20012d00003a0000200320032f01c8063b01c0050c180b200041186a41003a000020004200370308200020032800c0073600192000411c6a200341c3076a28000036000020004200370300200424000f0b200141246a280200210720034190096a41186a2208200141196a29000037030020034190096a41106a2209200141116a29000037030020034190096a41086a220a200141096a2900003703002003200129000137039009200341c00a6a41286a200241286a280200360200200341c00a6a41206a200241206a290200370300200341c00a6a41186a2201200241186a290200370300200341c00a6a41106a220b200241106a290200370300200341c00a6a41086a220c200241086a290200370300200320022902003703c00a024002400240200341c00a6a10a705450d00200341023a00d8040c010b20012008290300370300200b2009290300370300200c200a29030037030020032003290390093703c00a200341d8046a200341c00a6a200710970820032d00d8044106460d0120032902dc0421050b20032802d804210320002005370024200041206a2003360000200041186a41003a00002000420037030820004201370300200424000f0b20004200370308200020032800e006360019200041186a41003a00002000411c6a200341e3066a28000036000020004200370300200424000f0b200141286a280200210a200141246a2802002109200341e0066a41186a200141196a290000370300200341e0066a41106a200141116a290000370300200341e0066a41086a200141096a290000370300200320012900013703e00620022802282101024020022d000022070d002002411a6a2901002105200241196a2d00002107200241186a2d00002108200241166a2f0100210b200241156a2d0000210c200241146a2d0000210d200241126a2f01002113200241116a2d00002112200241106a2d000021102002410e6a2f010021112002410d6a2d000021222002410c6a2d000021232002410a6a2f0100212b200241096a2d00002129200241086a2d0000212a200241066a2f0100212c200241056a2d00002132200241046a2d00002131200241026a2f0100213320022d0001210220012001280200417f6a2236360200024020360d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22362036280200417f6a223636020020360d002001102e0b200320053701d80a200320073a00d70a200320083a00d60a2003200b3b01d40a2003200c3a00d30a2003200d3a00d20a200320133b01d00a200320123a00cf0a200320103a00ce0a200320113b01cc0a200320223a00cb0a200320233a00ca0a2003202b3b01c80a200320293a00c70a2003202a3a00c60a2003202c3b01c40a200320323a00c30a200320313a00c20a200320333b01c00a0240200241ff01710d00410321070c010b4110102c2202450d48200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d4820014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a22083602004100210720080d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22082008280200417f6a220836020020080d002002102e0b024020074103460d0020012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b20034198046a41026a20034188086a41026a2d000022023a0000200320032f00880822013b019804200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a000020004201370300200424000f0b200341c80a6a4200370300200342ffffffff1f3703c00a20034190096a200341e0066a10ba082003280290092202200328029809200341c00a6a10bf050240200328029409450d002002102e0b20034180066a109108200328028806220b450d14200b41c4006c41bc7f6a2101200b410274417c6a41027641016a210841002107200328028006210202400340200241046a200341e0066a412010ec08450d01200141bc7f6a2101200241c4006a21022008200741016a2207470d000c160b0b200228020021072002200241c4006a200110ea081a2003200b417f6a3602880620034190096a2007109408200341c00a6a2003280290092202200328029809220110ae05024020032802c00a220b450d002002200110ff010b200341d80a6a2903002114200341d00a6a290300211520032902c40a21160240200328029409450d002002102e0b200b450d142016422088a74105742207450d13200341d8046a41086a2108200b21020340200241086a2900002105200241106a29000021062002290000210e20034190096a41186a200241186a29000037030020034190096a41106a200637030020034190096a41086a20053703002003200e37039009200341b8036a20034190096a2015201410cb0220032903b80321052003200341b8036a41086a29030022063703c80a200320053703c00a0240024020052006844200520d002003200341c00a6a3602d804200341d8046a10cc020c010b200342f0f2bda1a7ee9cb9f9003703d804200341c00a6a200341d8046a10cd02200341a8036a200341c00a6a2005200610fd01200341d8046a41106a200341a8036a41086a290300220f20067d20032903a803220e200554ad7d2006200f7d2005200e54ad7d200e200556200f200656200f2006511b22011b3703002003200e20057d2005200e7d20011b3703e00420032001ad3703d8040240024020010d00200320083602c007200341c0076a10cc020c010b200320083602c007200341c0076a10ce020b200341c00a6a41186a2006370300200320053703d00a200341063a00c80a2003410e3a00c00a200341c00a6a10fe010b200241206a2102200741606a22070d000c140b0b200141046a2802002109200341c00a6a41286a200241286a280200360200200341c00a6a41206a200241206a290200370300200341c00a6a41186a200241186a290200370300200341c00a6a41106a200241106a290200370300200341c00a6a41086a200241086a290200370300200320022902003703c00a200341c00a6a10fd0641ff01714102460d0e20034190096a10910820032802980921084100210a200341003602980902402008450d004100210c200328029009210b4100210a410021010240034002400240200a450d00200b200141c4006c6a2102200b2001200c6a41c4006c6a2107034020022802002009460d022007200241c40010e9082107200241c4006a2102200741c4006a21072008200141016a22014b0d000c040b0b200b200141c4006c6a2102034020022802002009460d01200241c4006a21022008200141016a22014b0d000b4100210a0c030b200c417f6a210c200a41016a210a2008200141016a22014b0d000b0b0240200a0d004100210a0c010b200b2001200a6b41c4006c6a200b200141c4006c6a200820016b41c4006c10ea081a0b20032008200a6b220236029809200341c00a6a41086a2002360200200320032903900922053703c00a024002402005a722020d0020034198066a2202420037030020034190066a2201420037030020034180066a41086a220742003703002003420037038006200341c0076a41de80ca0041091081022007200341c0076a41086a2208290000370300200320032900c00737038006200341c0076a418c81ca00410b10810220022008290000370300200120032900c00737030020034180066a412010ff010c010b20034198066a2201420037030020034190066a2207420037030020034180066a41086a220842003703002003420037038006200341c0076a41de80ca0041091081022008200341c0076a41086a220a290000370300200320032900c00737038006200341c0076a418c81ca00410b1081022001200a290000370300200720032900c00737030020034180066a200341c00a6a10c40520032802c40a2201450d00200141c4006c450d002002102e0b20034190096a2009109408200341c00a6a2003280290092202200328029809220110ae05024020032802c00a2209450d002002200110ff010b2003280294092101024020090d002001450d112002102e0c110b200341d80a6a2903002114200341d00a6a2903002115200341c80a6a280200210720032802c40a210a02402001450d002002102e0b20074105742207450d0f200341d8046a41086a2108200921020340200241086a2900002105200241106a29000021062002290000210e20034190096a41186a200241186a29000037030020034190096a41106a200637030020034190096a41086a20053703002003200e37039009200341e8036a20034190096a2015201410cb0220032903e80321052003200341e8036a41086a29030022063703c80a200320053703c00a0240024020052006844200520d002003200341c00a6a3602d804200341d8046a10cc020c010b200342f0f2bda1a7ee9cb9f9003703d804200341c00a6a200341d8046a10cd02200341d8036a200341c00a6a2005200610fd01200341d8046a41106a200341d8036a41086a290300220f20067d20032903d803220e200554ad7d2006200f7d2005200e54ad7d200e200556200f200656200f2006511b22011b3703002003200e20057d2005200e7d20011b3703e00420032001ad3703d8040240024020010d00200320083602e006200341e0066a10cc020c010b200320083602e006200341e0066a10ce020b200341c00a6a41186a2006370300200320053703d00a200341063a00c80a2003410e3a00c00a200341c00a6a10fe010b200241206a2102200741606a22070d000c100b0b410221020c130b20034190096a41026a20032d00c20a22023a0000200341d8046a41026a20023a0000200320032f01c00a22023b019009200320023b01d8042006420888a721022006421888a7210120032903d00a21052006a7212a4100212b0c170b20034190096a41026a20032d00c20a22023a0000200341d8046a41026a20023a0000200320032f01c00a22023b019009200320023b01d8042006420888a721022006421888a7210120032903d00a21052006a7212a4100212b0c170b410221020c170b410221020c1a0b427f201b20057c202820067c220f2028542202ad7c220e2002200e201b54200e201b511b22021b211b427f200f20021b2128427f201d201a7c2020201c7c220f2020542202ad7c220e2002200e201d54200e201d511b22021b211d427f200f20021b2120410121020c160b200341023a0080060c190b200341e0066a41026a200341d8046a41026a2d000022023a0000200320032f00d80422013b01e006200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a000020004201370300200424000f0b200341023a0088080c380b200220134180c1cb00103c000b2002201341f0c0cb00103c000b200341c0076a41021093080c370b200341023a00c0070c370b200341023a00c0050c3a0b200341c00a6a41026a200341c0056a41026a2d000022023a0000200320032f00c00522013b01c00a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000420121050c020b200a41ffffff3f71450d002009102e0b4200210520004200370308200020032800c00a360019200041186a41003a00002000411c6a200341c30a6a2800003600000b20002005370300200424000f0b201642ffffff3f83500d00200b102e0b200341c00a6a41086a20034180066a41086a280200360200200320032903800622053703c00a024002402005a722020d00200341d0046a22024200370300200341c8046a22014200370300200341b8046a41086a22074200370300200342003703b804200341c0076a41de80ca0041091081022007200341c0076a41086a2208290000370300200320032900c0073703b804200341c0076a418c81ca00410b10810220022008290000370300200120032900c007370300200341b8046a412010ff010c010b200341d0046a22014200370300200341c8046a22074200370300200341b8046a41086a22084200370300200342003703b804200341c0076a41de80ca0041091081022008200341c0076a41086a220b290000370300200320032900c0073703b804200341c0076a418c81ca00410b1081022001200b290000370300200720032900c007370300200341b8046a200341c00a6a10c40520032802c40a2201450d00200141c4006c450d002002102e0b20034180066a41186a2202420037030020034180066a41106a2201420037030020034180066a41086a220742003703002003420037038006200341c0076a41de80ca0041091081022007200341c0076a41086a2208290000370300200320032900c00737038006200341c0076a418081ca00410c10810220022008290000370300200120032900c007370300200341c00a6a20034180066a10aa0520032d00e00a2102200341b8046a41186a2201200341c00a6a41186a290300370300200341b8046a41106a2207200341c00a6a41106a290300370300200341b8046a41086a2208200341c00a6a41086a290300370300200320032903c00a3703b804024020024103460d0020034190096a41186a200129030037030020034190096a41106a200729030037030020034190096a41086a2008290300370300200320032903b80437039009200320023a00b00920034190096a200341e0066a412010ec080d00200341d0046a22024200370300200341c8046a22014200370300200341b8046a41086a22074200370300200342003703b804200341c0076a41de80ca0041091081022007200341c0076a41086a2208290000370300200320032900c0073703b804200341c0076a418081ca00410c10810220022008290000370300200120032900c007370300200341b8046a412010ff010b02402009450d0020034190096a200a108905200341c00a6a2003280290092202200328029809108a0520034180066a41086a2201200341800b6a29030037030020034180066a41106a2207200341880b6a29030037030020034180066a41186a2208200341900b6a29030037030020034180066a41206a2209200341980b6a29030037030020034180066a41286a220b200341a00b6a290300370300200320032800c10a3602c806200320032800c40a3600cb062003200341f80a6a290300370380060240024020032d00c00a220c4102460d00200341f00a6a2903002116200341c00a6a41286a2903002117200341c00a6a41206a2903002118200341c00a6a41186a2903002119200341c00a6a41106a290300211f200341c00a6a41086a290300211e200341c0056a41286a200b290300370300200341c0056a41206a2009290300370300200341c0056a41186a2008290300370300200341c0056a41106a2007290300370300200341c0056a41086a200129030037030020032003290380063703c0050240200328029409450d002002102e0b200341c0076a41086a200341c0056a41086a2903002205370300200341c0076a41106a200341c0056a41106a2903002206370300200341c0076a41186a200341c0056a41186a290300220e370300200341c0076a41206a200341c0056a41206a290300220f370300200341c0076a41286a200341c0056a41286a2903002214370300200320032903c00522153703c007200341c00a6a41286a22022014370300200341c00a6a41206a2201200f370300200341c00a6a41186a2207200e370300200341c00a6a41106a22082006370300200341c00a6a41086a22092005370300200320153703c00a200c450d01200341d8046a41111093080c020b0240200328029409450d002002102e0b200341d8046a41111093080c010b20034184056a2016370200200341f4046a2018370200200341d8046a410c6a201f37020020034194056a20092903003702002003419c056a2008290300370200200341a4056a2007290300370200200341ac056a2001290300370200200341b4056a2002290300370200200320173702fc04200320193702ec042003201e3702dc04200320032903c00a37028c0520034190096a200341dc046a41e00010e9081a200341c8096a200341e0066a412010ec080d00200341c00a6a410c6a200a360200200341c80a6a41063a0000200341093a00c00a200341c00a6a10fe01200341c00a6a200a10890520032802c00a220220032802c80a10ff0120032802c40a450d002002102e0b200341c00a6a41086a41113a0000200341093a00c00a200341c00a6a41096a20032903e006370000200341c00a6a41116a200341e0066a41086a290300370000200341d90a6a200341f0066a290300370000200341e10a6a200341e0066a41186a290300370000200341c00a6a10fe01200041186a41003a000020004200370308200020032800f0083600192000411c6a200341f3086a28000036000020004200370300200424000f0b200341f0086a41026a200341c0056a41026a2d000022013a0000200320032f01c00522073b01f008200041206a20023a0000200041186a41003a000020004200370308200020073b0021200041236a20013a00002000200537002420004201370300200424000f0b20032902c40a210520032802c00a21020240200328029409450d002001102e0b2003200537029c0420032002360298040b20032d0098044106460d01200329029c0421050b200328029804210320002005370024200041206a2003360000200041186a41003a00002000420037030820004201370300200424000f0b20004200370308200020032800d008360019200041186a41003a00002000411c6a200341d3086a28000036000020004200370300200424000f0b200320032f01d8043b018006200320073a009f06200320083b009d06200320093a009c062003200a3a009b062003200b3b0099062003200c3a0098062003200537039006200320013a008f06200320023b008d062003202a3a008c062003200d3a008b06200320133b008906200320123a008806200320103a008706200320113b008506200320223a008406200320233a008306410221022003200341d8046a41026a2d00003a008206024002400240202b0d00200341b8046a41186a20034180066a41186a2903002205370300200341b8046a41106a20034180066a41106a2903002206370300200341b8046a41086a20034180066a41086a290300220e3703002003200329038006220f3703b804200341c00a6a41186a2005370300200341c00a6a41106a2006370300200341c00a6a41086a200e3703002003200f3703c00a200320323602980920032029360294092003202c36029009200341d8046a200341c00a6a20034190096a10bd08200341c8066a41026a20032d00db043a0000200320032f00d9043b01c80620032d00d80422024106460d0220032902dc042105200341c0056a41026a200341c8066a41026a2d00003a0000200320032f01c8063b01c0050c010b02402029450d00202c102e0b0b200341f0086a41026a2201200341c0056a41026a2d00003a0000200320032800e0063602c007200320032f01c0053b01f0082003200341e3066a2800003600c307200041186a41003a000020004200370308200020032802c0073600192000411c6a20032800c307360000200041206a20023a0000200041246a2005370200200020032f01f0083b0021200041236a20012d00003a000020004201370300200424000f0b200320032800e0063602c0072003200341e3066a2800003600c307200041186a41013a000020004200370308200020032802c0073600192000411c6a20032800c30736000020004200370300200424000f0b200320032f01d8043b018006200320073a009f06200320083b009d06200320093a009c062003200a3a009b062003200b3b0099062003200c3a0098062003200537039006200320013a008f06200320023b008d062003202a3a008c062003200d3a008b06200320133b008906200320123a008806200320103a008706200320113b008506200320223a008406200320233a008306410221022003200341d8046a41026a2d00003a008206024002400240202b0d00200341b8046a41186a20034180066a41186a2903002205370300200341b8046a41106a20034180066a41106a2903002206370300200341b8046a41086a20034180066a41086a290300220e3703002003200329038006220f3703b804200341c00a6a41186a2005370300200341c00a6a41106a2006370300200341c00a6a41086a200e3703002003200f3703c00a200320323602980920032029360294092003202c36029009200341d8046a200341c00a6a20034190096a10bc08200341c8066a41026a20032d00db043a0000200320032f00d9043b01c80620032d00d80422024106460d0220032902dc042105200341c0076a41026a200341c8066a41026a2d00003a0000200320032f01c8063b01c0070c010b02402029450d00202c102e0b0b200341c0056a41026a200341c0076a41026a2d000022013a0000200320032f01c00722073b01c005200041206a20023a0000200041186a41003a000020004200370308200020073b0021200041236a20013a00002000200537002420004201370300200424000f0b200041186a41003a000020004200370308200020032800e0063600192000411c6a200341e3066a28000036000020004200370300200424000f0b200320032800d0083602c0082003200341d3086a2800003600c308200041186a41003a000020004200370308200020032802c0083600192000411c6a20032800c308360000200041246a2005370200200041206a200236020020004201370300200424000f0b200341900b6a201b370300200341880b6a2028370300200341800b6a201d370300200341f80a6a2020370300200341e80a6a2019370300200341e00a6a201e370300200341d80a6a2018370300200341d00a6a201f370300200341f00a6a2021370300200341cc0a6a2036360200200341c00a6a41086a2035360200200341980b6a20032903d008370300200341ac0b6a203d360200200341a80b6a203e360200200341a00b6a200341d0086a41086a290300370300200320032f01e4083b00c10a200320073602c40a2003200341e4086a41026a2d00003a00c30a200320013a00c00a0240024020014102470d00203b203c10ff010c010b200341d8046a200341c00a6a10c204203b203c20032802d804220820032802e00410b201024020032802dc04450d002008102e0b20010d002035450d00203541306c450d002007102e0b024020032802c408450d00203b102e0b20034188086a20062005108307200341d80a6a20032903d805370300200320032903d0053703d00a200320032903c80522063703c80a200320032903c00522053703c00a200341e00a6a20034190096a41c80010e9081a200341ac0b6a203a360200200341a80b6a20032802b80836020002402005a7220141ff01714102470d002037203910ff01410021010c010b200341d8046a200341c00a6a10c2042037203920032802d804220720032802e00410b201024020032802dc04450d002007102e0b0240200141ff01710d002006a72201450d00200141306c450d002005422088a7102e0b410021010b024020032802ac08450d002037102e0b20010d01200341c00a6a41086a41083a0000200341e90a6a20032903f008370000200341093a00c00a200341c00a6a41096a200329038808370000200341d10a6a20034188086a41086a290300370000200341d90a6a20034188086a41106a290300370000200341e10a6a20034188086a41186a290300370000200341f10a6a200341f0086a41086a290300370000200341f90a6a200341f0086a41106a290300370000200341810b6a200341f0086a41186a290300370000200341c00a6a10fe01200320032800910436028804200320034194046a28000036008b04200041186a41003a0000200041106a2002ad220542d8d4ea037e200542c0f0f50b7e7c20054280c2d72f7e7c42b8b8c589027c3703002000420137030820002003280288043600192000411c6a200328008b0436000020004200370300200424000f0b20032902c40a210520032802c00a21020b200320032800910436028804200320034194046a28000036008b04200041186a41003a00002000420037030820002003280288043600192000411c6a200328008b04360000200041246a2005370200200041206a200236020020004201370300200424000f0b200328028006210320002005370024200041206a2003360000200041186a41003a00002000420037030820004201370300200424000f0b20004200370308200020032800c005360019200041186a41003a00002000411c6a200341c3056a28000036000020004200370300200424000f0b20004200370308200020032800f008360019200041186a41003a00002000411c6a200341f3086a28000036000020004200370300200424000f0b0c030b20032005421888a73a00c30a20032005421088a73a00c20a20032005a73b01c00a200320063702c40a20032903c00a21054110102c2202450d21200241f8f7c60036020c2002410136020820024281808080103702004110102c2207450d212006422088210620074190f8c60036020c20074101360208200742818080801037020020022002280200417f6a2201360200024020010d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b2006a72108410221020b20032005370294092003200b3a0093092003200c3a0092092003200d3b0190090b41002101200241ff0171410346220a0d00200341e60a6a20353b0100200341e20a6a2008360100200341da0a6a2005370100200341d90a6a200b3a0000200341d80a6a200c3a0000200341d60a6a200d3b0100200341d50a6a20293a0000200341d40a6a202a3a0000200341d20a6a202c3b0100200341d10a6a20323a0000200341d00a6a20313a0000200341ce0a6a20123b0100200341cd0a6a20103a0000200341cc0a6a20113a0000200341ca0a6a20223b0100200341c90a6a20233a0000200341c80a6a202b3a0000200320073602e80a200320333b01c60a200320363a00c50a200320133a00c40a200320373b01c20a200320383a00c10a200320023a00c00a41012101200341c00a6a10fd0641ff01714102470d00200341023a00c0050c010b200341b8046a41186a22024200370300200341b8046a41106a22084200370300200341b8046a41086a220b4200370300200342003703b804200341c0076a41de80ca004109108102200b200341c0076a41086a220c290000370300200320032900c0073703b804200341c0076a418081ca00410c1081022002200c290000370300200820032900c007370300200341c00a6a200341b8046a10aa0520032d00e00a210220034180066a41186a2208200341c00a6a41186a29030037030020034180066a41106a200341c00a6a41106a29030037030020034180066a41086a200341c00a6a41086a290300370300200320032903c00a370380060240024020024103460d00200341f7066a220b2008290000370000200341e0066a41106a220820034180066a41116a290000370300200341e0066a41086a20034180066a41096a2900002205370300200320032900810622063703e00620032d008006210c20034190096a41096a200537000020034190096a41116a200829030037000020034190096a41186a200b2900003700002003200c3a0090092003200637009109024020020d00200341c0056a41071093080c020b0240200341d8046a20034190096a412010ec08450d00200341c0056a41081093080c020b20034180066a41186a2208420037030020034180066a41106a220b420037030020034180066a41086a220c42003703002003420037038006200341c0076a41de80ca004109108102200c200341c0076a41086a220d290000370300200320032900c00737038006200341c0076a418081ca00410c1081022008200d290000370300200b20032900c00737030020034180066a412010ff01200341c00a6a41186a22084200370300200341c00a6a41106a220b4200370300200341c00a6a41086a220c4200370300200342003703c00a20034188086a41d9fcc6004106108102200c20034188086a41086a220d29000037030020032003290088083703c00a20034188086a4180f4cb0041061081022008200d290000370300200b200329008808370300200341e0016a200341c00a6a4120108e0220032802e401210d20032802e00121132008200341d8046a41186a290300370300200b200341d8046a41106a290300370300200c200341d8046a41086a290300370300200320032903d8043703c00a200d410020131b20096a200341c00a6a200220341095082001200a720d0320072007280200417f6a220236020020020d032007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d032007102e0c030b200341c0056a41021093080b02402001200a724101460d0020072007280200417f6a220236020020020d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22022002280200417f6a220236020020020d002007102e0b20032d00c0054106460d020b20032802c0052102200020032902c405370024200041206a2002360000200041186a41003a00002000420037030820004201370300200424000f0b200341063a00c0050b20004200370308200020032800f008360019200041186a41003a00002000411c6a200341f3086a28000036000020004200370300200424000f0b4110102c2202450d1a200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1a20014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220736020020070d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22072007280200417f6a220736020020070d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b200341f0086a41026a200341c0056a41026a2d000022023a0000200320032f00c00522013b01f008200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a000020004201370300200424000f0b20004200370308200020032800c005360019200041186a41003a00002000411c6a200341c3056a28000036000020004200370300200424000f0b20032d0088084106470d030b20004200370308200020032800b804360019200041186a41003a00002000411c6a200341bb046a28000036000020004200370300200424000f0b4110102c2202450d15200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1520014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220736020020070d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22072007280200417f6a220736020020070d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b200341023a0088080b20032802880821022000200329028c08370024200041206a2002360000200041186a41003a00002000420037030820004201370300200424000f0b2030211e201521180b202f211c2016211a0b200341c00a6a41046a222b20034198046a41046a2d00003a000020032003280298043602c00a202a20113a0000200120123a0000200a20103a00002007200241306c6a2202410f6a202b2d00003a00002002410b6a20032802c00a36000020292005370308202920063703002009200e3703082009200f3703000c010b200341f0086a41046a20034198046a41046a2d00003a000020032003280298043602f00820132001490d0202402013200d470d00200d41016a2202200d490d11200d41017422092002200920024b1b22024104200241044b1bad42307e2215422088a74541037421022015a7210902400240200d0d00200341003602c00a0c010b200341c00a6a41086a4108360200200320073602c00a2003200d41306c3602c40a0b200341d8046a20092002200341c00a6a107d200341e0046a280200210220032802d8044101460d0520032802dc042107200241306e210d0b2007200141306c6a220241306a2002201320016b41306c10ea081a2002410a6a20103a0000200241096a20113a0000200220123a000820022008360200200241286a200e370300200241206a200f370300200241186a2005370300200241106a20063703002002410b6a20032802f0083600002002410f6a200341f4086a2d00003a0000201341016a21130b0240024002400240201241ff01714101470d00200341c8006a20062005420a420010e708200341386a200f200e420a420010e708201e20067c2216201e542202201820057c2002ad7c221520185420152018511b0d022016200f7c220f20165422022015200e7c2002ad7c220e201554200e2015511b0d02201c20032903487c2216201c542202201a200341c8006a41086a2903007c2002ad7c2215201a542015201a511b0d01201d20032903387c221e201d542202201b200341386a41086a2903007c2002ad7c2218201b542018201b511b450d09200f211e200e21182016211c2015211a0c020b02400240201041ff0171450d0041062102024002400240024002400240024020104107710e0700010203040506000b410021020c050b410121020c040b410221020c030b410321020c020b410421020c010b410521020b200341e8006a200542002002ad220e420010e808200341f8006a20064200200e420010e808427f20034180016a290300220e20032903687c220f2003290370420052200f200e547222021b2115427f200329037820021b21160c010b200341d8006a20062005420a420010e708200341e0006a2903002115200329035821160b201e20067c220f201e542202201820057c2002ad7c220e201854200e2018511b0d010240201141ff01710d00201d20167c221e201d542202201b20157c2002ad7c2218201b542018201b511b0d01201241ff0171450d060c080b201c20167c2216201c542202201a20157c2002ad7c2215201a542015201a511b450d020b200f211e200e21180b20034180066a41191093080c010b0240201241ff01710d00201141ff01714102460d00427f201520277c201620197c22182016542202ad7c22162002201620155420162015511b22021b2115427f201820021b2116427f200e20287c200f201f7c2218200f542202ad7c220f2002200f200e54200f200e511b22021b210e427f201820021b210f0b201d211e201b21180c050b024020032d00800622024106470d00201e210f2018210e201d211e201b2118201c2116201a21150c060b200341ca066a20032d0083063a0000200320032f0081063b01c80620032902840621190240200c0d00200d450d00200d41306c450d002007102e0b201e210f2018210e201d211e201b2118201c2116201a21150c060b200120131045000b427f201820277c201e20197c2216201e542202ad7c22152002201520185420152018511b22021b2118427f201620021b211e427f200e20287c200f201f7c2215200f542202ad7c220f2002200f200e54200f200e511b22021b210e427f201520021b210f0c010b2002450d0b0c0a0b201c2116201a21150b200341063a0080060b200341900b6a2020370300200341880b6a2021370300200341800b6a2026370300200341f80a6a2025370300200341e80a6a2028370300200341e00a6a201f370300200341d80a6a2027370300200341d00a6a2019370300200341f00a6a2024370300200341cc0a6a2013360200200341c00a6a41086a200d360200200341980b6a200329039009370300200341ac0b6a2022360200200341a80b6a2023360200200341a00b6a20034190096a41086a290300370300200320032f01c0083b00c10a200320073602c40a2003200341c0086a41026a2d00003a00c30a2003200c3a00c00a20032802c805210220032802c005210102400240200c4102470d002001200210ff010c010b200341d8046a200341c00a6a10c2042001200220032802d804220920032802e00410b201024020032802dc04450d002009102e0b200c0d00200d450d00200d41306c450d002007102e0b200341ca066a20032d0083063a0000200320032f0081063b01c8062003290284062119410621020b024020032802c405450d0020032802c005102e0b200341a8086a41026a2201200341c8066a41026a2d00003a0000200320032f01c8063b01a808024020024106470d00200341c0076a427f2017200b1b2006201241ff017141014622021b427f2014200b1b200520021b108307200341f00a6a200e370300200341c00a6a41286a200f370300200341c00a6a41206a2018370300200341c00a6a41186a201e370300200341c00a6a41106a2015370300200341f80a6a20032903e006370300200341800b6a200341e8066a290300370300200341880b6a200341e0066a41106a290300370300200341900b6a200341e0066a41186a290300370300200341980b6a200341e0066a41206a290300370300200341a00b6a200341e0066a41286a290300370300200320163703c80a200341003a00c00a200341d8046a200810890520032802e004210120032802d804210220034100360298092003420137039009200341c00a6a20034190096a10bc0520022001200328029009220720032802980910b2010240200328029409450d002007102e0b024020032802dc04450d002002102e0b200341063a0088080c030b200320023a008808200320032f01a8083b0089082003201937028c08200320012d00003a008b080b20032d0088084106460d01200329028c0821050b200328028808210320002005370024200041206a2003360000200041186a41003a00002000420037030820004201370300200424000f0b20004200370308200020032800b804360019200041186a41003a00002000411c6a200341bb046a28000036000020004200370300200424000f0b20032d00c0074106460d0120032902c40721050b20032802c007210320002005370024200041206a2003360000200041186a41003a00002000420037030820004201370300200424000f0b20004200370308200020032800c005360019200041186a41003a00002000411c6a200341c3056a28000036000020004200370300200424000f0b1036000b1038000b20032802c005210320002005370024200041206a2003360000200041186a41003a00002000420037030820004201370300200424000f0b20004200370308200020032800f008360019200041186a41003a00002000411c6a200341f3086a28000036000020004200370300200424000bec7a08077f027e017f017e027f017e067f037e230041a00a6b2203240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e0700010203040506000b200341c4076a4101360200200342013702b4072003419cc3cb003602b007200341043602fc0420034194c3cb003602f8042003200341f8046a3602c007200341b0076a41b8afc9001044000b20012d000121042001412c6a2802002105200141286a2802002106200141246a2802002107200341c8026a41186a2001411a6a290000370300200341c8026a41106a200141126a290000370300200341c8026a41086a2001410a6a2900003703002003200141026a2900003703c802200341b0076a41286a200241286a280200360200200341b0076a41206a200241206a290200370300200341b0076a41186a2208200241186a290200370300200341b0076a41106a2201200241106a290200370300200341b0076a41086a2209200241086a290200370300200320022902003703b007024002400240200341b0076a10a7050d00200842003703002001420037030020094200370300200342003703b007200341f8046a41c8afc90041131081022009200341f8046a41086a2202290000370300200320032900f8043703b007200341f8046a41c7c3cb00410710810220082002290000370300200120032900f804370300200341f8046a200341b0076a10880320032802f804210220032902fc04210a2007200510fc02200341b0076a200720052002410120021b2208200a420020021b220a422088220ba710fe022001280200210120032802b407210220032802b007210920032802bc07220c200341c4076a2802002007200510f5020240200141ffffff3f71450d00200c102e0b0240200241ffffff3f71450d002009102e0b200341f8006a41186a2201200341c8026a41186a290300370300200341f8006a41106a2202200341c8026a41106a290300370300200341f8006a41086a2209200341c8026a41086a290300370300200320032903c802370378200441ff01710d01200341f8046a41186a22014200370300200341f8046a41106a22024200370300200341f8046a41086a22094200370300200342003703f80420034198016a41c8afc9004113108102200920034198016a41086a220429000037030020032003290098013703f80420034198016a41dbc3cb004105108102200120042900003703002002200329009801370300200341f8046a412010ff010c020b0240200641ffffff3f71450d002007102e0b200320032800b8013602f801200320032900a802370388022003200341bb016a2800003600fb012003200341af026a28000036008f02200041186a41003a000020004200370308200020032802f8013600192000411c6a20032800fb01360000200041206a41023a00002000200329038802370021200041286a200328008f02360000200042013703000c200b200341b0076a41186a2001290300370300200341b0076a41106a2002290300370300200341b0076a41086a2009290300370300200320032903783703b007200341f0096a41186a22014200370300200341f0096a41106a22024200370300200341f0096a41086a22094200370300200342003703f009200341f8046a41c8afc90041131081022009200341f8046a41086a2204290000370300200320032900f8043703f009200341f8046a41dbc3cb00410510810220012004290000370300200220032900f8043703004120102c2201450d1a200342203702fc04200320013602f804200341f8046a200341b0076a41201074200341f0096a412020032802f804220120032802800510b20120032802fc04450d002001102e0b2005ad42b882077e200b42c0b5e5097e7c210b0240200641ffffff3f71450d002007102e0b200b42a0c0b291397c210b0240200a42ffffff3f83500d002008102e0b200320032800b8013602f8012003200341bb016a2800003600fb01200041186a41003a0000200041106a200b37030020004201370308200020032802f8013600192000411c6a20032800fb01360000200042003703000c1e0b200141086a2802002104200141046a2802002105200341b0076a41286a200241286a280200360200200341b0076a41206a200241206a290200370300200341b0076a41186a2201200241186a290200370300200341b0076a41106a2207200241106a290200370300200341b0076a41086a2206200241086a290200370300200320022902003703b007200341f8046a200341b0076a10c102200341f8006a41086a220220034181056a290000370300200341f8006a41106a220820034189056a290000370300200341f8006a41186a220920034191056a290000370300200320032900f90437037820032d00f8044101460d0820034198016a41186a200929030037030020034198016a41106a200829030037030020034198016a41086a20022903003703002003200329037837039801200142003703002007420037030020064200370300200342003703b007200341f8046a41c8afc90041131081022006200341f8046a41086a2202290000370300200320032900f8043703b007200341f8046a41c7c3cb00410710810220012002290000370300200720032900f804370300200341f8046a200341b0076a10880320032902fc04420020032802f80422021b220a422088220ba741057421012002410120021b22062102024002400240024003402001450d01200141606a2101200220034198016a412010ec082107200241206a210220070d000b200341003602b807200342013703b0072005200341b0076a10900220032802b8072107024020032802b407450d0020032802b007102e0b0240200720044d0d00200341b0076a410a10f307200320032900b1073703602003200341b8076a2800003600670c020b2003410036028005200342013703f8042005200341f8046a109002200341b0076a20032802f80420032802800510b00120034188026a41186a200341b0076a41186a29030037030020034188026a41106a200341b0076a41106a29030037030020034188026a41086a200341b0076a41086a290300370300200320032903b00737038802024020032802fc04450d0020032802f804102e0b200341f8046a200541b00210e9081a200341a8026a41086a20034198016a41086a290300370300200341a8026a41106a20034198016a41106a290300370300200341a8026a41186a20034198016a41186a29030037030020032003290398013703a8024110102c2202450d1c200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1c20014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a2208360200024020080d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22082008280200417f6a220836020020080d002002102e0b024002402001280208200341f8046a200128020c28020c1101000d0041022102200341e8026a41023a0000200341e0026a41003a000020012001280200417f6a22083602004200210d200342003703d002200342013703c802024020080d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22082008280200417f6a220836020020080d002001102e0b200341f8046a10dc02410121010c010b200341b0076a200341f8046a41b00210e9081a200341fd096a200341b0026a290300370000200341850a6a200341b8026a2903003700002003418d0a6a200341c0026a290300370000200341950a6a20032f00783b0000200341970a6a200341fa006a2d00003a0000200341013a00f409200341013a00f009200320032903a8023700f509200320013602980a200341c8026a200341b0076a200341f0096a10dd0220032903c8024201512101200341e8026a2d0000210220032903d002210d0b200341f8046a41186a20034188026a41186a290300370300200341f8046a41106a20034188026a41106a290300370300200341f8046a41086a20034188026a41086a29030037030020032003290388023703f8042003200341f0026a2800003600b707200320032900e9023703b0070240024020010d00410621010c010b200320032800b7073600ff01200320032903b0073703f80141062101200d4202510d00200320032800ff013600ef01200320032903f8013703e801200221010b200341f0096a41086a2202200341f8046a41086a290300370300200341f0096a41106a2208200341f8046a41106a290300370300200341f0096a41186a2209200341f8046a41186a290300370300200320032903f8043703f009200320032903e8013703d801200320032800ef013600df01200341053a00b4072003410a3a00b007200341bd076a2002290300370000200341c5076a2008290300370000200341cd076a2009290300370000200341d8076a20013a0000200320032903f0093700b507200341d5076a20032f00e5013b0000200341d7076a200341e7016a2d00003a0000200341d9076a20032903d801370000200341e0076a20032800df01360000200341fc076a200341b8016a41186a280200360200200341f4076a200341b8016a41106a290200370200200341ec076a200341b8016a41086a290200370200200341e4076a20032902b801370200200341b0076a10fe01200da70d024200210b0c030b200341b0076a410110f307200320032900b1073703602003200341b8076a2800003600670b20032d00b0072101200a42ffffff3f83500d1e2006102e0c1e0b427f2007ad42a01f7e200b4280eb067e7c42d8bbe3167c220b200341c8026a41106a2903007c220d200d200b541b210d4201210b0b0240200a42ffffff3f83500d002006102e0b2005102e2003200341f4006a28000036005b20032003280071360258200041186a41003a0000200041106a200d3703002000200b370308200020032802583600192000411c6a200328005b360000200042003703000c1d0b2001410c6a2802002104200141086a2802002105200141046a280200210c200341b0076a41286a200241286a280200360200200341b0076a41206a200241206a290200370300200341b0076a41186a2201200241186a290200370300200341b0076a41106a2206200241106a290200370300200341b0076a41086a2207200241086a290200370300200320022902003703b007200341f8046a200341b0076a10c102200341c8026a41086a220220034181056a290000370300200341c8026a41106a220820034189056a290000370300200341c8026a41186a220920034191056a290000370300200320032900f9043703c80202400240024020032d00f8044101460d0020034188026a41186a200929030037030020034188026a41106a200829030037030020034188026a41086a2002290300370300200320032903c80237038802200142003703002006420037030020074200370300200342003703b007200341f8046a41c8afc90041131081022007200341f8046a41086a2202290000370300200320032900f8043703b007200341f8046a41c7c3cb00410710810220012002290000370300200620032900f804370300200341f8046a200341b0076a10880320032902fc04420020032802f80422021b220b422088220aa741057421012002410120021b2208210203402001450d02200141606a2101200220034188026a412010ec082107200241206a210220070d000b200341003602b807200342013703b0072005200341b0076a10900220032802b8072101024020032802b407450d0020032802b007102e0b200120044d0d02200341b0076a410a10f3070c1b0b410221010c1c0b200341b0076a410110f3070c190b2003410036028005200342013703f8042005200341f8046a109002200341b0076a20032802f80420032802800510b001200341a8026a41186a2202200341b0076a41186a2207290300370300200341a8026a41106a2209200341b0076a41106a2204290300370300200341a8026a41086a220e200341b0076a41086a220f290300370300200320032903b0073703a802024020032802fc04450d0020032802f804102e0b2007200229030037030020042009290300370300200f200e290300370300200320032903a8023703b007200341f8046a200341b0076a10f40720032802f8042207200328028005108f022102024020032802fc04450d002007102e0b02402002450d00200341b0076a410210f3070c190b024002400240200c41014b0d00200341c8076a4200370300200341c0076a4200370300200341b0076a41086a22024200370300200342003703b007200341f8046a41c8afc90041131081022002200341f8046a41086a2207290000370300200320032900f8043703b007200341f8046a41c7c3cb004107108102200641086a2007290000370000200620032900f804370000200341c8026a200341b0076a1088030240024020032802c80222020d00410021090c010b20032902cc02220d422088a72109200d42ffffff3f83500d002002102e0b200341f8046a200541b00210e9081a4110102c2207450d1a200741f8f7c60036020c2007410136020820074281808080103702004110102c2202450d1a20024190f8c60036020c20024101360208200242818080801037020020072007280200417f6a2206360200024020060d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22062006280200417f6a220636020020060d002007102e0b024002402002280208200341f8046a200228020c28020c1101000d0041022107200341e8026a41023a0000200341e0026a41003a000020022002280200417f6a22063602004200210d200342003703d002200342013703c802024020060d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22062006280200417f6a220636020020060d002002102e0b200341f8046a10dc02410121020c010b200341b0076a200341f8046a41b00210e9081a200341fc096a2009360200200341f0096a41086a4101360200200341f0096a41106a200329019801370300200341880a6a20034198016a41086a290100370300200341f0096a41206a20034198016a41106a290100370300200341003a00f409200341013a00f009200320032f00783b00f5092003200341fa006a2d00003a00f709200320023602980a200341c8026a200341b0076a200341f0096a10dd0220032903c8024201512102200341c8026a41206a2d0000210720032903d002210d0b200341f0096a41186a200341a8026a41186a290300370300200341f0096a41106a200341a8026a41106a290300370300200341f0096a41086a200341a8026a41086a290300370300200320032903a8023703f0092003200341f0026a2800003600b707200320032900e9023703b0070240024020020d00410621020c010b200320032800b7073600ff01200320032903b0073703f80141062102200d4202510d00200320032800ff013600ef01200320032903f8013703e801200721020b200341f8006a41086a2207200341f0096a41086a290300370300200341f8006a41106a2206200341f0096a41106a290300370300200341f8006a41186a2209200341f0096a41186a290300370300200320032903f009370378200320032903e8013703d801200320032800ef013600df01200341043a00b4072003410a3a00b007200341bd076a2007290300370000200341c5076a2006290300370000200341cd076a2009290300370000200341d8076a20023a0000200320032903783700b507200341d5076a20032f00e5013b0000200341d7076a200341e7016a2d00003a0000200341d9076a20032903d801370000200341e0076a20032800df01360000200341fc076a200341b8016a41186a280200360200200341f4076a200341b8016a41106a290200370200200341ec076a200341b8016a41086a290200370200200341e4076a20032902b801370200200341b0076a10fe010240200da70d004200210d0c020b427f2001ad42a01f7e200a42e8dd0d7e7c42d8ce86257c220a200341c8026a41106a2903007c220d200d200a541b210a4201210d0c010b200341b0076a41186a4200370300200341b0076a41106a4200370300200341b0076a41086a22024200370300200342003703b007200341f8046a41c8afc90041131081022002200341f8046a41086a2209290000370300200320032900f8043703b007200341f8046a41dbafc9004109108102200641086a2009290000370000200620032900f804370000200341f8046a200341b0076a4120108d0320032802f804210220032902fc04210d200341f8046a41186a220e200341a8026a41186a290300370300200341f8046a41106a220f200341a8026a41106a2903003703002009200341a8026a41086a290300370300200320032903a8023703f8042002410120021b21070240024002400240200d420020021b220d4220882210a72202200da7470d00200241016a22042002490d1820024101742211200420042011491b22044104200441044b1b220441ffffff3f712004462111200441057421040240024020020d00200341003602b0070c010b200341b8076a4101360200200320073602b007200320104205863e02b4070b200341c8026a20042011200341b0076a107d200341d0026a280200210420032802c8024101460d0120032802cc022107200d422088a721022004410576ad210d0b200720024105746a220420032903f804370000200441186a200e290300370000200441106a200f290300370000200441086a2009290300370000200241016a220241e4004b0d04200320073602b0072003200d42ffffffff0f832002ad2210422086843702b40720070d0120034190056a2202420037030020034188056a22074200370300200341f8046a41086a22094200370300200342003703f80420034198016a41c8afc9004113108102200920034198016a41086a220429000037030020032003290098013703f80420034198016a41dbafc9004109108102200220042900003703002007200329009801370300200341f8046a412010ff010c020b2004450d160c1b0b20034190056a2202420037030020034188056a22094200370300200341f8046a41086a22044200370300200342003703f80420034198016a41c8afc9004113108102200420034198016a41086a220e29000037030020032003290098013703f80420034198016a41dbafc90041091081022002200e2900003703002009200329009801370300200341f8046a200341b0076a10e6042007450d00200d42ffffff3f83500d002007102e0b200341f8046a41186a22024200370300200341f8046a41106a22074200370300200341f8046a41086a22094200370300200342003703f80420034198016a41c8afc9004113108102200920034198016a41086a220429000037030020032003290098013703f80420034198016a41e4afc900410d108102200220042900003703002007200329009801370300200341186a200341f8046a4120108e02200328021c210e2003280218210f200242003703002007420037030020094200370300200342003703f80420034198016a41c8afc90041131081022009200429000037030020032003290098013703f80420034198016a41e4afc900410d108102200220042900003703002007200329009801370300200341106a200341f8046a4120108e022003280210211120032802142112200242003703002007420037030020094200370300200342003703f80420034198016a41c8afc90041131081022009200429000037030020032003290098013703f80420034198016a41e4afc900410d1081022002200429000037030020072003290098013703002003201241016a410120111b3602b007200341f8046a4120200341b0076a410410b201200341b0076a200541b00210e9081a2002200341a8026a41186a2903003703002007200341a8026a41106a2903003703002009200341a8026a41086a290300370300200320032903a8023703f804200341c8026a200341f8046a10f40720032802c802210220032802d0022107200342013703f8042003410036028005200341b0076a200341f8046a1090022002200720032802f80420032802800510b201024020032802fc04450d0020032802f804102e0b024020032802cc02450d002002102e0b200341b0076a108b02200341b0076a41186a4200370300200341b0076a41106a4200370300200341b0076a41086a22024200370300200342003703b007200341f8046a41d9fcc60041061081022002200341f8046a41086a2207290000370300200320032900f8043703b007200341f8046a4180f4cb004106108102200641086a2007290000370000200620032900f804370000200341086a200341b0076a4120108e02200328020c2106200328020821094120102c2202450d192002200329038802370000200241186a20034188026a41186a290300370000200241106a20034188026a41106a290300370000200241086a20034188026a41086a290300370000200341cc076a4100360200200341bc076a4281808080103702002003200641c093066a41c0930620091b3602d0074201210d200342013702c407200320023602b8072003200c3602b4072003200e4100200f1b22063602b007200341f8046a41186a200341a8026a41186a290300370300200341f8046a41106a200341a8026a41106a2903003703002007200341a8026a41086a290300370300200320032903a8023703f804200341c8026a200341f8046a10f50720032802c802220720032802d002200341b0076a10be05024020032802cc02450d002007102e0b2002102e200341bd076a20034188026a41086a290300370000200341c5076a20034188026a41106a290300370000200341cd076a20034188026a41186a290300370000200341d5076a20032903a802370000200341dd076a200341a8026a41086a290300370000200341e5076a200341a8026a41106a290300370000200341ed076a200341a8026a41186a290300370000200341fc076a200c360200200341f8076a2006360200200341003a00b4072003410a3a00b00720032003290388023700b5072001ad4288277e200a42a08a077e7c201042f8fe1c7e7c42a0c28084027c210a200341b0076a10fe010b0240200b42ffffff3f83500d002008102e0b2005102e2003200341e3006a28000036004b20032003280060360248200041186a41003a0000200041106a200a3703002000200d370308200020032802483600192000411c6a200328004b360000200042003703000c1d0b200341b0076a410810f30720032902b407210a20032802b0072101200d42ffffff3f83500d192007102e0c190b200141216a2d00002104200141246a2802002109200341a8026a41186a200141196a290000370300200341a8026a41106a200141116a290000370300200341a8026a41086a200141096a290000370300200320012900013703a802200341b0076a41286a200241286a280200360200200341b0076a41206a200241206a290200370300200341b0076a41186a2201200241186a290200370300200341b0076a41106a2207200241106a290200370300200341b0076a41086a2205200241086a290200370300200320022902003703b007200341f8046a200341b0076a10c102200341f8006a41086a2202200341f8046a41096a290000370300200341f8006a41106a2206200341f8046a41116a290000370300200341f8006a41186a2208200341f8046a41196a290000370300200320032900f904370378024002400240024020032d00f8044101460d00200341c8026a41186a2008290300370300200341c8026a41106a2006290300370300200341c8026a41086a2002290300370300200320032903783703c802200142003703002007420037030020054200370300200342003703b007200341f8046a41c8afc90041131081022005200341f8046a41086a2202290000370300200320032900f8043703b007200341f8046a41c7c3cb00410710810220012002290000370300200720032900f804370300200341f8046a200341b0076a10880320032902fc04420020032802f80422021b220a422088220ba741057421012002410120021b2208210203402001450d02200141606a21012002200341c8026a412010ec082107200241206a210220070d000b200341f8046a200341a8026a10f607200341b0076a20032802f804220220032802800510b30520032802fc04210120032802b807220c450d02200341d0076a2802002113200341cc076a280200210f200341c8076a2802002112200341c4076a2802002114200341c0076a280200210e20032802bc07211120032903b007210d02402001450d002002102e0b2009200da7460d03200341b0076a410410f307200320032900b107370388022003200341b8076a28000036008f020c110b410221010c120b200341b0076a410110f307200320032900b107370388022003200341b8076a28000036008f0220032d00b00721010c100b02402001450d002002102e0b200341b0076a410310f307200320032900b107370388022003200341b8076a28000036008f0220032d00b00721010c0f0b4100210202400240200e0d004101210641002107410021090c010b200e41057441606a41057641016a210541002107200c2101034002402001200341c8026a412010ec080d0041002106410121090c020b200141206a2101410121062005200741016a2207470d000b41002109200521070b02400240024002400240200f450d00200f41057441606a41057641016a2105410021022014210103402001200341c8026a412010ec08450d02200141206a21012005200241016a2202470d000b200521020b2009450d01200441ff01710d03410021050c020b200441ff0171450d052006450d0241002105410121060c130b4100210641012105200441ff01710d120b200341f8046a41186a2202200341c8026a41186a290300370300200341f8046a41106a2206200341c8026a41106a290300370300200341f8046a41086a2215200341c8026a41086a290300370300200320032903c8023703f8040240200f2012470d00201241016a22012012490d13201241017422162001201620014b1b22014104200141044b1b220141ffffff3f712001462116200141057421010240024020120d00200341003602b0070c010b200341b8076a4101360200200320143602b007200320124105743602b4070b200341f0096a20012016200341b0076a107d200341f8096a2802002101024020032802f0094101470d0020010d190c140b20032802f4092114200141057621120b2014200f4105746a220120032903f804370000200141186a2002290300370000200141106a2006290300370000200141086a2015290300370000200f41016a210f2009450d15200e20074d0d04200c200e417f6a220e4105746a220129000021102001290008211720012900102118200c20074105746a220241186a200141186a2900003700002002201837001020022017370008200220103700000c150b200341b0076a410510f307200320032900b107370388022003200341b8076a28000036008f020c0d0b200141286a2802002108200141306a290300210b200141246a2802002107200341a8026a41186a200141196a290000370300200341a8026a41106a200141116a290000370300200341a8026a41086a200141096a290000370300200320012900013703a802200341b0076a41286a200241286a280200360200200341b0076a41206a2201200241206a290200370300200341b0076a41186a2205200241186a290200370300200341b0076a41106a2206200241106a290200370300200341b0076a41086a200241086a290200370300200320022902003703b007200341f8046a200341b0076a10c10202400240024020032d00f8044101460d00200341f8046a200341a8026a10f607200341b0076a20032802f804220920032802800510b30520032802fc042102024020032802b8072204450d002001280200210f200341cc076a280200210c20052802002105200341c4076a280200210e2006280200210120032802bc07210620032903b007210d02402002450d002009102e0b2007200da7460d03200341b0076a410410f307200320032900b107370388022003200341b8076a28000036008f0220032d00b0072102410121070c0c0b02402002450d002009102e0b200341b0076a410310f307200320032900b107370388022003200341b8076a28000036008f0220032d00b00721020c010b410221020b4200210a410021010c0b0b200d422088a7210942002110200341c8076a22074200370300200341c0076a22024200370300200341b0076a41086a22114200370300200342003703b007200341f8046a41c8afc90041131081022011200341f8046a41086a2212290000370300200320032900f8043703b007200341f8046a41c7c3cb00410710810220072012290000370300200220032900f804370300200341c8026a200341b0076a1088030240024020032802c80222070d00410021110c010b20032902cc02220a4220882210a72111200a42ffffff3f83500d002007102e0b0240024020012009490d00200341b0076a200341a8026a2008200b10f70720032d00b407210220032802b0072108200341f8046a200341b0076a41057241b30210e9081a41012107024020084101460d00200341e8096a350200210a200341c8026a200341fb046a41b00210e9081a200341bd076a200341a8026a41086a2202290300370000200341c5076a200341a8026a41106a2207290300370000200341cd076a200341a8026a41186a2208290300370000200341dc076a200c360200200341d8076a2001360200200341063a00b4072003410a3a00b007200320032903a8023700b507200341b0076a10fe0120034194056a200c360200200341f8046a41186a2005360200200341f8046a41106a200136020020034184056a20063602002003200f360298052003200e36028c0520032004360280052003200d3703f804200341f0096a41186a2008290300370300200341f0096a41106a2007290300370300200341f0096a41086a2002290300370300200320032903a8023703f009200341b0076a200341c8026a41b00210e9081a200341386a2011200341f8046a200341f0096a200341b0076a10f807427f200a42b8177e201042b0c60d7e7c200335024042b09c1b7e7c42e0c3b9dc017c220a20032903387c220b200b200a541b210b0c020b200320032900f804370388022003200341ff046a28000036008f020c0a0b4100210741002011200c6b2212201220114b1b2009490d074200210a200341b0076a41186a4200370300200341b0076a41106a4200370300200341b0076a41086a22074200370300200342003703b007200341f8046a41d9fcc60041061081022007200341f8046a41086a2212290000370300200320032900f8043703b007200341f8046a4180f4cb004106108102200241086a2012290000370000200220032900f804370000200341306a200341b0076a4120108e0202402003280234410020032802301b200f4f0d00200341b0076a410710f307200320032900b107370388022003200728000036008f0220032d00b007210241012107410021010c0b0b200341f0096a41186a22024200370300200341f0096a41106a22074200370300200341f0096a41086a22144200370300200342003703f00920034198016a41c8afc9004113108102201420034198016a41086a221329000037030020032003290098013703f00920034198016a41dbc3cb004105108102200220132900003703002007200329009801370300200341b0076a200341f0096a412010f40220032d00b0072102200341f8046a41186a200341c9076a290000370300200341f8046a41106a200341c1076a2900003703002012200341b9076a290000370300200320032900b1073703f8040240024020024101460d00410221020c010b200341c8026a41186a200341f8046a41186a290300220a370300200341c8026a41106a200341f8046a41106a2903002217370300200341c8026a41086a200341f8046a41086a2903002218370300200320032903f80422193703c802200341b0076a41186a200a370300200341b0076a41106a2017370300200341b0076a41086a2018370300200320193703b00720014105742102200421070340024020020d00410021020c020b200241606a21022007200341b0076a412010ec082112200741206a210720120d000b410121020b41002107410020112001200c6a6b2212200220024102477122021b200c6a21142012410020021b20016a22122009490d04200341b0076a200341a8026a2008200b10f70720032d00b407210220032802b0072108200341f8046a200341b0076a41057241b30210e9081a4101210720084101460d05200341e8096a350200210a200341c8026a200341fb046a41b00210e9081a200341bd076a200341a8026a41086a2202290300370000200341c5076a200341a8026a41106a2207290300370000200341cd076a200341a8026a41186a2208290300370000200341dc076a2014360200200341d8076a2012360200200341063a00b4072003410a3a00b007200320032903a8023700b507200341b0076a10fe0120034194056a200c360200200341f8046a41186a2005360200200341f8046a41106a200136020020034184056a20063602002003200f360298052003200e36028c0520032004360280052003200d3703f804200341f0096a41186a2008290300370300200341f0096a41106a2007290300370300200341f0096a41086a2002290300370300200320032903a8023703f009200341b0076a200341c8026a41b00210e9081a200341206a2011200341f8046a200341f0096a200341b0076a10f807427f200a42b8177e201042e0b60d7e7c20033502284280ac1b7e7c42e0fdcfea017c220a20032903207c220b200b200a541b210b0b4201210a410021010c0b0b200341c8026a41186a2207200141196a290000370300200341c8026a41106a2205200141116a290000370300200341c8026a41086a2206200141096a290000370300200320012900013703c802200341b0076a41286a200241286a280200360200200341b0076a41206a200241206a290200370300200341b0076a41186a2201200241186a290200370300200341b0076a41106a2208200241106a290200370300200341b0076a41086a2209200241086a290200370300200320022902003703b00702400240200341b0076a10a705450d00200320032800a80236028802200320032900f0093703b0072003200341ab026a28000036008b022003200341f7096a2800003600b707200041186a41003a00002000420037030820002003280288023600192000411c6a200328008b02360000200041206a41023a0000200020032903b007370021200041286a20032800b7073600004201210a0c010b200341f8046a41186a22022007290300220a370300200341f8046a41106a22072005290300220b370300200341f8046a41086a22052006290300220d370300200320032903c80222103703f804200341bd076a200d370000200341c5076a200b370000200341cd076a200a3700002003410a3a00b007200320103700b507200341033a00b407200341b0076a10fe01200120022903003703002008200729030037030020092005290300370300200320032903f8043703b007200341b0076a10f9072101200320032800a802360288022003200341a8026a41036a28000036008b02200041186a41003a0000200041106a2001ad42d0be1a7e42d0deb8a7017c3703002000420137030820002003280288023600192000411c6a200328008b023600004200210a0b2000200a3703000c190b200341b0076a410510f307200320032900b107370388022003200341b8076a28000036008f020c0a0b2007200e1042000b200341dc076a2014360200200341d8076a2012360200200341bd076a2201200341a8026a41086a2202290300370000200341c5076a2208200341a8026a41106a2209290300370000200341cd076a220c200341a8026a41186a220f290300370000200341063a00b4072003410a3a00b007200320032903a8023700b507200341b0076a10fe01200341f8006a41186a2211200f290300220a370300200341f8006a41106a220f2009290300220b370300200341f8006a41086a22092002290300220d370300200320032903a80222173703782001200d3700002008200b370000200c200a370000200341033a00b4072003410a3a00b007200320173700b507200341b0076a10fe01200341b0076a41186a2011290300370300200341b0076a41106a200f290300370300200341b0076a41086a2009290300370300200320032903783703b007201042c8be0d7e200341b0076a10f907ad42a0ce1a7e7c42c8b9d4d5017c210b0c030b200320032900f804370388022003200341ff046a28000036008f020c030b410221010c130b200341dc076a200c360200200341d8076a2001360200200341bd076a2201200341a8026a41086a2202290300370000200341c5076a2208200341a8026a41106a2209290300370000200341cd076a220c200341a8026a41186a220f290300370000200341063a00b4072003410a3a00b007200320032903a8023700b507200341b0076a10fe01200341f8046a41186a2211200f290300220a370300200341f8046a41106a220f2009290300220b370300200341f8046a41086a22092002290300220d370300200320032903a80222173703f8042001200d3700002008200b370000200c200a370000200341033a00b4072003410a3a00b007200320173700b507200341b0076a10fe01200341b0076a41186a2011290300370300200341b0076a41106a200f290300370300200341b0076a41086a2009290300370300200320032903f8043703b007201042a89f0d7e200341b0076a10f907ad42e8b61a7e7c42a0adc1c7017c210b0b4201210a410121010c010b4200210a410021010b0240200641ffffff3f71450d002004102e0b0240200541ffffff3f71450d00200e102e0b2007450d010b200320032800f8013602e80120032003290388023703b8012003200328008f023600bf012003200341fb016a2800003600eb01200041186a20013a0000200041106a200b3703002000200a370308200020032802e8013600192000411c6a20032800eb01360000200041206a20023a0000200020032903b801370021200041286a20032800bf01360000200042013703000c0f0b200320032800f8013602e8012003200341fb016a2800003600eb01200041186a20013a0000200041106a200b3703002000200a370308200020032802e8013600192000411c6a20032800eb01360000200042003703000c0e0b20032d00b00721010240201141ffffff3f71450d00200c102e0b201241ffffff3f71450d002014102e0b200a42ffffff3f83500d002008102e0b200320032800b8013602f8012003200329038802370398012003200328008f0236009f012003200341bb016a2800003600fb01200041186a41003a000020004200370308200020032802f8013600192000411c6a20032800fb01360000200041206a20013a00002000200329039801370021200041286a200328009f01360000200042013703000c0b0b200341f0096a41186a2207200341c8026a41186a290300370300200341f0096a41106a2209200341c8026a41106a290300370300200341f0096a41086a2215200341c8026a41086a290300370300200320032903c8023703f009200e2011470d02201141016a22012011490d00201141017422162001201620014b1b22014104200141044b1b220141ffffff3f712001462116200141057421010240024020110d00200341003602b0070c010b200341b8076a41013602002003200c3602b007200320114105743602b4070b200341f8046a20012016200341b0076a107d20034180056a280200210120032802f8044101470d0120010d050b1038000b20032802fc04210c200141057621110b200c200e4105746a220120032903f009370000200141186a2007290300370000200141106a2009290300370000200141086a2015290300370000200e41016a210e2006450d00200f20024d0d012014200f417f6a220f4105746a220129000021102001290008211720012900102118201420024105746a220241186a200141186a2900003700002002201837001020022017370008200220103700000b200341d5076a20032903a802370000200341bd076a200341c8026a41086a290300370000200341c5076a200341c8026a41106a290300370000200341cd076a200341c8026a41186a290300370000200341dd076a200341a8026a41086a290300370000200341e5076a200341a8026a41106a290300370000200341ed076a200341a8026a41186a290300370000200341013a00b4072003410a3a00b007200320032903c8023700b507200341fc076a200f360200200341f8076a200e360200200341f5076a20043a0000200341b0076a10fe01200341cc076a200f360200200341b0076a41186a2012360200200341b0076a41106a200e360200200341bc076a2011360200200320133602d007200320143602c4072003200c3602b8072003200d3703b007200341f8046a200341a8026a10f60720032802f8042201200328028005200341b0076a10be05024020032802fc04450d002001102e0b0240201141ffffff3f71450d00200c102e0b0240201241ffffff3f71450d002014102e0b200b42e8ce127e4280cbd9d7007c210b0240200a42ffffff3f83500d002008102e0b200320032800b8013602f8012003200341bb016a2800003600fb01200041186a20053a0000200041106a200b37030020004201370308200020032802f8013600192000411c6a20032800fb01360000200042003703000c060b2002200f1042000b1036000b20032902b407210a20032802b00721010b200b42ffffff3f83500d002008102e0b2005108b022005102e2003200341e3006a28000036004b20032003280060360248200041186a41003a000020004200370308200020032802483600192000411c6a200328004b360000200041246a200a370200200041206a2001360200200042013703000c010b2005108b022005102e2003200341f4006a28000036005b20032003280071360258200320032903603703482003200328006736004f200041186a41003a000020004200370308200020032802583600192000411c6a200328005b360000200041206a20013a000020002003290348370021200041286a200328004f360000200042013703000b200341a00a6a24000b8b7a040a7f047e067f037e230041a00a6b2203240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e0700010203040506000b200341c4076a4101360200200342013702b4072003419cc3cb003602b007200341043602fc0420034194c3cb003602f8042003200341f8046a3602c007200341b0076a41b8afc9001044000b20012d000121042001412c6a2802002105200141286a2802002106200141246a2802002107200341c8026a41186a22082001411a6a290000370300200341c8026a41106a2209200141126a290000370300200341c8026a41086a220a2001410a6a2900003703002003200141026a2900003703c802200341b0076a41286a200241286a280200360200200341b0076a41206a200241206a290200370300200341b0076a41186a2201200241186a290200370300200341b0076a41106a220b200241106a290200370300200341b0076a41086a220c200241086a290200370300200320022902003703b007024002400240200341b0076a10a7050d0020014200370300200b4200370300200c4200370300200342003703b007200341f8046a4181b0c9004113108102200c200341f8046a41086a2202290000370300200320032900f8043703b007200341f8046a41c7c3cb00410710810220012002290000370300200b20032900f804370300200341f8046a200341b0076a10880320032802f804210120032902fc04210d2007200510fc02200720052001410120011b2202200d420020011b220d422088220ea710fc07200341f8006a41186a2008290300370300200341f8006a41106a2009290300370300200341f8006a41086a200a290300370300200320032903c802370378200441ff01710d0120034190056a2201420037030020034188056a220b4200370300200341f8046a41086a220c4200370300200342003703f80420034198016a4181b0c9004113108102200c20034198016a41086a220429000037030020032003290098013703f80420034198016a41dbc3cb00410510810220012004290000370300200b200329009801370300200341f8046a412010ff010c020b0240200641ffffff3f71450d002007102e0b200320032800b8013602f801200320032900a802370388022003200341bb016a2800003600fb012003200341af026a28000036008f02200041186a41003a000020004200370308200020032802f8013600192000411c6a20032800fb01360000200041206a41023a00002000200329038802370021200041286a200328008f02360000200042013703000c200b200341b0076a41186a200341f8006a41186a290300370300200341b0076a41106a200341f8006a41106a290300370300200341b0076a41086a200341f8006a41086a290300370300200320032903783703b007200341f0096a41186a22014200370300200341f0096a41106a220b4200370300200341f0096a41086a220c4200370300200342003703f009200341f8046a4181b0c9004113108102200c200341f8046a41086a2204290000370300200320032900f8043703f009200341f8046a41dbc3cb00410510810220012004290000370300200b20032900f8043703004120102c2201450d1a200342203702fc04200320013602f804200341f8046a200341b0076a41201074200341f0096a412020032802f804220120032802800510b20120032802fc04450d002001102e0b2005ad42b882077e200e42c0b5e5097e7c210e0240200641ffffff3f71450d002007102e0b200e42a0c0b291397c210e0240200d42ffffff3f83500d002002102e0b200320032800b8013602f8012003200341bb016a2800003600fb01200041186a41003a0000200041106a200e37030020004201370308200020032802f8013600192000411c6a20032800fb01360000200042003703000c1e0b200141086a2802002104200141046a2802002105200341b0076a41286a200241286a280200360200200341b0076a41206a200241206a290200370300200341b0076a41186a2201200241186a290200370300200341b0076a41106a2207200241106a290200370300200341b0076a41086a2206200241086a290200370300200320022902003703b007200341f8046a200341b0076a10c102200341f8006a41086a220220034181056a290000370300200341f8006a41106a220b20034189056a290000370300200341f8006a41186a220c20034191056a290000370300200320032900f90437037820032d00f8044101460d0820034198016a41186a200c29030037030020034198016a41106a200b29030037030020034198016a41086a20022903003703002003200329037837039801200142003703002007420037030020064200370300200342003703b007200341f8046a4181b0c90041131081022006200341f8046a41086a2202290000370300200320032900f8043703b007200341f8046a41c7c3cb00410710810220012002290000370300200720032900f804370300200341f8046a200341b0076a10880320032902fc04420020032802f80422021b220d422088220ea741057421012002410120021b22062102024002400240024003402001450d01200141606a2101200220034198016a412010ec082107200241206a210220070d000b200341003602b807200342013703b0072005200341b0076a10900220032802b8072107024020032802b407450d0020032802b007102e0b0240200720044d0d00200341b0076a410a10fd07200320032900b1073703602003200341b8076a2800003600670c020b2003410036028005200342013703f8042005200341f8046a109002200341b0076a20032802f80420032802800510b00120034188026a41186a200341b0076a41186a29030037030020034188026a41106a200341b0076a41106a29030037030020034188026a41086a200341b0076a41086a290300370300200320032903b00737038802024020032802fc04450d0020032802f804102e0b200341f8046a200541b00210e9081a200341a8026a41086a20034198016a41086a290300370300200341a8026a41106a20034198016a41106a290300370300200341a8026a41186a20034198016a41186a29030037030020032003290398013703a8024110102c2202450d1c200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1c20014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220b3602000240200b0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a220b200b280200417f6a220b360200200b0d002002102e0b024002402001280208200341f8046a200128020c28020c1101000d0041022102200341e8026a41023a0000200341e0026a41003a000020012001280200417f6a220b3602004200210f200342003703d002200342013703c8020240200b0d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a220b200b280200417f6a220b360200200b0d002001102e0b200341f8046a10dc02410121010c010b200341b0076a200341f8046a41b00210e9081a200341fd096a200341b0026a290300370000200341850a6a200341b8026a2903003700002003418d0a6a200341c0026a290300370000200341950a6a20032f00783b0000200341023a00f009200341970a6a200341f8006a41026a2d00003a0000200341013a00f409200320032903a8023700f509200320013602980a200341c8026a200341b0076a200341f0096a10dd0220032903c8024201512101200341e8026a2d0000210220032903d002210f0b200341f8046a41186a20034188026a41186a290300370300200341f8046a41106a20034188026a41106a290300370300200341f8046a41086a20034188026a41086a29030037030020032003290388023703f8042003200341f0026a2800003600b707200320032900e9023703b0070240024020010d00410621010c010b200320032800b7073600ff01200320032903b0073703f80141062101200f4202510d00200320032800ff013600ef01200320032903f8013703e801200221010b200341f0096a41086a2202200341f8046a41086a290300370300200341f0096a41106a220b200341f8046a41106a290300370300200341f0096a41186a220c200341f8046a41186a290300370300200320032903f8043703f009200320032903e8013703d801200320032800ef013600df01200341053a00b4072003410b3a00b007200341bd076a2002290300370000200341c5076a200b290300370000200341cd076a200c290300370000200341d8076a20013a0000200320032903f0093700b507200341d5076a20032f00e5013b0000200341d7076a200341e7016a2d00003a0000200341d9076a20032903d801370000200341e0076a20032800df01360000200341fc076a200341b8016a41186a280200360200200341f4076a200341b8016a41106a290200370200200341ec076a200341b8016a41086a290200370200200341e4076a20032902b801370200200341b0076a10fe01200fa70d024200210e0c030b200341b0076a410110fd07200320032900b1073703602003200341b8076a2800003600670b20032d00b0072101200d42ffffff3f83500d1e2006102e0c1e0b427f2007ad42a01f7e200e4280eb067e7c42d8bbe3167c220e200341c8026a41106a2903007c220f200f200e541b210f4201210e0b0240200d42ffffff3f83500d002006102e0b2005102e2003200341f4006a28000036005b20032003280071360258200041186a41003a0000200041106a200f3703002000200e370308200020032802583600192000411c6a200328005b360000200042003703000c1d0b2001410c6a2802002104200141086a2802002105200141046a2802002108200341b0076a41286a200241286a280200360200200341b0076a41206a200241206a290200370300200341b0076a41186a2201200241186a290200370300200341b0076a41106a2206200241106a290200370300200341b0076a41086a2207200241086a290200370300200320022902003703b007200341f8046a200341b0076a10c102200341c8026a41086a220220034181056a290000370300200341c8026a41106a220b20034189056a290000370300200341c8026a41186a220c20034191056a290000370300200320032900f9043703c80202400240024020032d00f8044101460d0020034188026a41186a200c29030037030020034188026a41106a200b29030037030020034188026a41086a2002290300370300200320032903c80237038802200142003703002006420037030020074200370300200342003703b007200341f8046a4181b0c90041131081022007200341f8046a41086a2202290000370300200320032900f8043703b007200341f8046a41c7c3cb00410710810220012002290000370300200620032900f804370300200341f8046a200341b0076a10880320032902fc04420020032802f80422021b220e422088220da741057421012002410120021b220b210203402001450d02200141606a2101200220034188026a412010ec082107200241206a210220070d000b200341003602b807200342013703b0072005200341b0076a10900220032802b8072101024020032802b407450d0020032802b007102e0b200120044d0d02200341b0076a410a10fd070c1b0b410221010c1c0b200341b0076a410110fd070c190b2003410036028005200342013703f8042005200341f8046a109002200341b0076a20032802f80420032802800510b001200341a8026a41186a2202200341b0076a41186a2207290300370300200341a8026a41106a220c200341b0076a41106a2204290300370300200341a8026a41086a2209200341b0076a41086a220a290300370300200320032903b0073703a802024020032802fc04450d0020032802f804102e0b200720022903003703002004200c290300370300200a2009290300370300200320032903a8023703b007200341f8046a200341b0076a10fe0720032802f8042207200328028005108f022102024020032802fc04450d002007102e0b02402002450d00200341b0076a410210fd070c190b024002400240200841014b0d00200341c8076a4200370300200341c0076a4200370300200341b0076a41086a22024200370300200342003703b007200341f8046a4181b0c90041131081022002200341f8046a41086a2207290000370300200320032900f8043703b007200341f8046a41c7c3cb004107108102200641086a2007290000370000200620032900f804370000200341c8026a200341b0076a1088030240024020032802c80222020d004100210c0c010b20032902cc02220f422088a7210c200f42ffffff3f83500d002002102e0b200341f8046a200541b00210e9081a4110102c2207450d1a200741f8f7c60036020c2007410136020820074281808080103702004110102c2202450d1a20024190f8c60036020c20024101360208200242818080801037020020072007280200417f6a2206360200024020060d002007280208200728020c2802001103000240200728020c280204450d002007280208102e0b200741046a22062006280200417f6a220636020020060d002007102e0b024002402002280208200341f8046a200228020c28020c1101000d0041022107200341e8026a41023a0000200341e0026a41003a000020022002280200417f6a22063602004200210f200342003703d002200342013703c802024020060d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22062006280200417f6a220636020020060d002002102e0b200341f8046a10dc02410121020c010b200341b0076a200341f8046a41b00210e9081a200341fc096a200c360200200341f0096a41086a4101360200200341f0096a41106a200329019801370300200341880a6a20034198016a41086a290100370300200341f0096a41206a20034198016a41106a290100370300200341003a00f409200320032f00783b00f509200320023602980a200341023a00f0092003200341f8006a41026a2d00003a00f709200341c8026a200341b0076a200341f0096a10dd0220032903c8024201512102200341c8026a41206a2d0000210720032903d002210f0b200341f0096a41186a200341a8026a41186a290300370300200341f0096a41106a200341a8026a41106a290300370300200341f0096a41086a200341a8026a41086a290300370300200320032903a8023703f0092003200341f0026a2800003600b707200320032900e9023703b0070240024020020d00410621020c010b200320032800b7073600ff01200320032903b0073703f80141062102200f4202510d00200320032800ff013600ef01200320032903f8013703e801200721020b200341f8006a41086a2207200341f0096a41086a290300370300200341f8006a41106a2206200341f0096a41106a290300370300200341f8006a41186a220c200341f0096a41186a290300370300200320032903f009370378200320032903e8013703d801200320032800ef013600df01200341043a00b4072003410b3a00b007200341bd076a2007290300370000200341c5076a2006290300370000200341cd076a200c290300370000200341d8076a20023a0000200320032903783700b507200341d5076a20032f00e5013b0000200341d7076a200341e7016a2d00003a0000200341d9076a20032903d801370000200341e0076a20032800df01360000200341fc076a200341b8016a41186a280200360200200341f4076a200341b8016a41106a290200370200200341ec076a200341b8016a41086a290200370200200341e4076a20032902b801370200200341b0076a10fe010240200fa70d004200210f0c020b427f2001ad42a01f7e200d42e8dd0d7e7c42d8ce86257c220d200341c8026a41106a2903007c220f200f200d541b210d4201210f0c010b200341b0076a41186a4200370300200341b0076a41106a4200370300200341b0076a41086a22024200370300200342003703b007200341f8046a4181b0c90041131081022002200341f8046a41086a220c290000370300200320032900f8043703b007200341f8046a41dbafc9004109108102200641086a200c290000370000200620032900f804370000200341f8046a200341b0076a4120108d0320032802f804210220032902fc04210f200341f8046a41186a2209200341a8026a41186a290300370300200341f8046a41106a220a200341a8026a41106a290300370300200c200341a8026a41086a290300370300200320032903a8023703f8042002410120021b21070240024002400240200f420020021b220f4220882210a72202200fa7470d00200241016a22042002490d1820024101742211200420042011491b22044104200441044b1b220441ffffff3f712004462111200441057421040240024020020d00200341003602b0070c010b200341b8076a4101360200200320073602b007200320104205863e02b4070b200341c8026a20042011200341b0076a107d200341d0026a280200210420032802c8024101460d0120032802cc022107200f422088a721022004410576ad210f0b200720024105746a220420032903f804370000200441186a2009290300370000200441106a200a290300370000200441086a200c290300370000200241016a220241e4004b0d04200320073602b0072003200f42ffffffff0f832002ad2210422086843702b40720070d0120034190056a2202420037030020034188056a22074200370300200341f8046a41086a220c4200370300200342003703f80420034198016a4181b0c9004113108102200c20034198016a41086a220429000037030020032003290098013703f80420034198016a41dbafc9004109108102200220042900003703002007200329009801370300200341f8046a412010ff010c020b2004450d160c1b0b20034190056a2202420037030020034188056a220c4200370300200341f8046a41086a22044200370300200342003703f80420034198016a4181b0c9004113108102200420034198016a41086a220929000037030020032003290098013703f80420034198016a41dbafc900410910810220022009290000370300200c200329009801370300200341f8046a200341b0076a10e6042007450d00200f42ffffff3f83500d002007102e0b200341f8046a41186a22024200370300200341f8046a41106a22074200370300200341f8046a41086a220c4200370300200342003703f80420034198016a4181b0c9004113108102200c20034198016a41086a220429000037030020032003290098013703f80420034198016a41e4afc900410d108102200220042900003703002007200329009801370300200341186a200341f8046a4120108e02200328021c21092003280218210a2002420037030020074200370300200c4200370300200342003703f80420034198016a4181b0c9004113108102200c200429000037030020032003290098013703f80420034198016a41e4afc900410d108102200220042900003703002007200329009801370300200341106a200341f8046a4120108e0220032802102111200328021421122002420037030020074200370300200c4200370300200342003703f80420034198016a4181b0c9004113108102200c200429000037030020032003290098013703f80420034198016a41e4afc900410d1081022002200429000037030020072003290098013703002003201241016a410120111b3602b007200341f8046a4120200341b0076a410410b201200341b0076a200541b00210e9081a2002200341a8026a41186a2903003703002007200341a8026a41106a290300370300200c200341a8026a41086a290300370300200320032903a8023703f804200341c8026a200341f8046a10fe0720032802c802210220032802d0022107200342013703f8042003410036028005200341b0076a200341f8046a1090022002200720032802f80420032802800510b201024020032802fc04450d0020032802f804102e0b024020032802cc02450d002002102e0b200341b0076a108b02200341b0076a41186a4200370300200341b0076a41106a4200370300200341b0076a41086a22024200370300200342003703b007200341f8046a41d9fcc60041061081022002200341f8046a41086a2207290000370300200320032900f8043703b007200341f8046a4180f4cb004106108102200641086a2007290000370000200620032900f804370000200341086a200341b0076a4120108e02200328020c21062003280208210c4120102c2202450d192002200329038802370000200241186a20034188026a41186a290300370000200241106a20034188026a41106a290300370000200241086a20034188026a41086a290300370000200341cc076a4100360200200341bc076a4281808080103702002003200641c093066a41c09306200c1b3602d0074201210f200342013702c407200320023602b807200320083602b407200320094100200a1b22063602b007200341f8046a41186a200341a8026a41186a290300370300200341f8046a41106a200341a8026a41106a2903003703002007200341a8026a41086a290300370300200320032903a8023703f804200341c8026a200341f8046a10ff0720032802c802220720032802d002200341b0076a10be05024020032802cc02450d002007102e0b2002102e200341bd076a20034188026a41086a290300370000200341c5076a20034188026a41106a290300370000200341cd076a20034188026a41186a290300370000200341d5076a20032903a802370000200341dd076a200341a8026a41086a290300370000200341e5076a200341a8026a41106a290300370000200341ed076a200341a8026a41186a290300370000200341fc076a2008360200200341f8076a2006360200200341003a00b4072003410b3a00b00720032003290388023700b5072001ad4288277e200d42a08a077e7c201042f8fe1c7e7c42a0c28084027c210d200341b0076a10fe010b0240200e42ffffff3f83500d00200b102e0b2005102e2003200341e3006a28000036004b20032003280060360248200041186a41003a0000200041106a200d3703002000200f370308200020032802483600192000411c6a200328004b360000200042003703000c1d0b200341b0076a410810fd0720032902b407210d20032802b0072101200f42ffffff3f83500d192007102e0c190b200141216a2d00002104200141246a280200210c200341a8026a41186a200141196a290000370300200341a8026a41106a200141116a290000370300200341a8026a41086a200141096a290000370300200320012900013703a802200341b0076a41286a200241286a280200360200200341b0076a41206a200241206a290200370300200341b0076a41186a2201200241186a290200370300200341b0076a41106a2207200241106a290200370300200341b0076a41086a2205200241086a290200370300200320022902003703b007200341f8046a200341b0076a10c102200341f8006a41086a2202200341f8046a41096a290000370300200341f8006a41106a2206200341f8046a41116a290000370300200341f8006a41186a220b200341f8046a41196a290000370300200320032900f904370378024002400240024020032d00f8044101460d00200341c8026a41186a200b290300370300200341c8026a41106a2006290300370300200341c8026a41086a2002290300370300200320032903783703c802200142003703002007420037030020054200370300200342003703b007200341f8046a4181b0c90041131081022005200341f8046a41086a2202290000370300200320032900f8043703b007200341f8046a41c7c3cb00410710810220012002290000370300200720032900f804370300200341f8046a200341b0076a10880320032902fc04420020032802f80422021b220d422088220ea741057421012002410120021b220b210203402001450d02200141606a21012002200341c8026a412010ec082107200241206a210220070d000b200341f8046a200341a8026a108008200341b0076a20032802f804220220032802800510b30520032802fc04210120032802b8072208450d02200341d0076a2802002113200341cc076a280200210a200341c8076a2802002112200341c4076a2802002114200341c0076a280200210920032802bc07211120032903b007210f02402001450d002002102e0b200c200fa7460d03200341b0076a410410fd07200320032900b107370388022003200341b8076a28000036008f020c110b410221010c120b200341b0076a410110fd07200320032900b107370388022003200341b8076a28000036008f0220032d00b00721010c100b02402001450d002002102e0b200341b0076a410310fd07200320032900b107370388022003200341b8076a28000036008f0220032d00b00721010c0f0b410021020240024020090d0041012106410021074100210c0c010b200941057441606a41057641016a21054100210720082101034002402001200341c8026a412010ec080d00410021064101210c0c020b200141206a2101410121062005200741016a2207470d000b4100210c200521070b02400240024002400240200a450d00200a41057441606a41057641016a2105410021022014210103402001200341c8026a412010ec08450d02200141206a21012005200241016a2202470d000b200521020b200c450d01200441ff01710d03410021050c020b200441ff0171450d052006450d0241002105410121060c130b4100210641012105200441ff01710d120b200341f8046a41186a2202200341c8026a41186a290300370300200341f8046a41106a2206200341c8026a41106a290300370300200341f8046a41086a2215200341c8026a41086a290300370300200320032903c8023703f8040240200a2012470d00201241016a22012012490d13201241017422162001201620014b1b22014104200141044b1b220141ffffff3f712001462116200141057421010240024020120d00200341003602b0070c010b200341b8076a4101360200200320143602b007200320124105743602b4070b200341f0096a20012016200341b0076a107d200341f8096a2802002101024020032802f0094101470d0020010d190c140b20032802f4092114200141057621120b2014200a4105746a220120032903f804370000200141186a2002290300370000200141106a2006290300370000200141086a2015290300370000200a41016a210a200c450d15200920074d0d0420082009417f6a22094105746a220129000021102001290008211720012900102118200820074105746a220241186a200141186a2900003700002002201837001020022017370008200220103700000c150b200341b0076a410510fd07200320032900b107370388022003200341b8076a28000036008f020c0d0b200141286a280200210b200141306a290300210e200141246a2802002107200341a8026a41186a200141196a290000370300200341a8026a41106a200141116a290000370300200341a8026a41086a200141096a290000370300200320012900013703a802200341b0076a41286a200241286a280200360200200341b0076a41206a2201200241206a290200370300200341b0076a41186a2205200241186a290200370300200341b0076a41106a2206200241106a290200370300200341b0076a41086a200241086a290200370300200320022902003703b007200341f8046a200341b0076a10c10202400240024020032d00f8044101460d00200341f8046a200341a8026a108008200341b0076a20032802f804220c20032802800510b30520032802fc042102024020032802b8072204450d002001280200210a200341cc076a280200210820052802002105200341c4076a28020021092006280200210120032802bc07210620032903b007210f02402002450d00200c102e0b2007200fa7460d03200341b0076a410410fd07200320032900b107370388022003200341b8076a28000036008f0220032d00b0072102410121070c0c0b02402002450d00200c102e0b200341b0076a410310fd07200320032900b107370388022003200341b8076a28000036008f0220032d00b00721020c010b410221020b4200210d410021010c0b0b200f422088a7210c42002110200341c8076a22074200370300200341c0076a22024200370300200341b0076a41086a22114200370300200342003703b007200341f8046a4181b0c90041131081022011200341f8046a41086a2212290000370300200320032900f8043703b007200341f8046a41c7c3cb00410710810220072012290000370300200220032900f804370300200341c8026a200341b0076a1088030240024020032802c80222070d00410021110c010b20032902cc02220d4220882210a72111200d42ffffff3f83500d002007102e0b024002402001200c490d00200341b0076a200341a8026a200b200e10810820032d00b407210220032802b007210b200341f8046a200341b0076a41057241b30210e9081a410121070240200b4101460d00200341e8096a350200210d200341c8026a200341fb046a41b00210e9081a200341bd076a200341a8026a41086a2202290300370000200341c5076a200341a8026a41106a2207290300370000200341cd076a200341a8026a41186a220b290300370000200341dc076a2008360200200341d8076a2001360200200341063a00b4072003410b3a00b007200320032903a8023700b507200341b0076a10fe0120034194056a2008360200200341f8046a41186a2005360200200341f8046a41106a200136020020034184056a20063602002003200a360298052003200936028c0520032004360280052003200f3703f804200341f0096a41186a200b290300370300200341f0096a41106a2007290300370300200341f0096a41086a2002290300370300200320032903a8023703f009200341b0076a200341c8026a41b00210e9081a200341386a2011200341f8046a200341f0096a200341b0076a108208427f200d42b8177e201042b0c60d7e7c200335024042b09c1b7e7c42e0c3b9dc017c220d20032903387c220e200e200d541b210e0c020b200320032900f804370388022003200341ff046a28000036008f020c0a0b410021074100201120086b2212201220114b1b200c490d074200210d200341b0076a41186a4200370300200341b0076a41106a4200370300200341b0076a41086a22074200370300200342003703b007200341f8046a41d9fcc60041061081022007200341f8046a41086a2212290000370300200320032900f8043703b007200341f8046a4180f4cb004106108102200241086a2012290000370000200220032900f804370000200341306a200341b0076a4120108e0202402003280234410020032802301b200a4f0d00200341b0076a410710fd07200320032900b107370388022003200728000036008f0220032d00b007210241012107410021010c0b0b200341f0096a41186a22024200370300200341f0096a41106a22074200370300200341f0096a41086a22144200370300200342003703f00920034198016a4181b0c9004113108102201420034198016a41086a221329000037030020032003290098013703f00920034198016a41dbc3cb004105108102200220132900003703002007200329009801370300200341b0076a200341f0096a412010f40220032d00b0072102200341f8046a41186a200341c9076a290000370300200341f8046a41106a200341c1076a2900003703002012200341b9076a290000370300200320032900b1073703f8040240024020024101460d00410221020c010b200341c8026a41186a200341f8046a41186a290300220d370300200341c8026a41106a200341f8046a41106a2903002217370300200341c8026a41086a200341f8046a41086a2903002218370300200320032903f80422193703c802200341b0076a41186a200d370300200341b0076a41106a2017370300200341b0076a41086a2018370300200320193703b00720014105742102200421070340024020020d00410021020c020b200241606a21022007200341b0076a412010ec082112200741206a210720120d000b410121020b4100210741002011200120086a6b2212200220024102477122021b20086a21142012410020021b20016a2212200c490d04200341b0076a200341a8026a200b200e10810820032d00b407210220032802b007210b200341f8046a200341b0076a41057241b30210e9081a41012107200b4101460d05200341e8096a350200210d200341c8026a200341fb046a41b00210e9081a200341bd076a200341a8026a41086a2202290300370000200341c5076a200341a8026a41106a2207290300370000200341cd076a200341a8026a41186a220b290300370000200341dc076a2014360200200341d8076a2012360200200341063a00b4072003410b3a00b007200320032903a8023700b507200341b0076a10fe0120034194056a2008360200200341f8046a41186a2005360200200341f8046a41106a200136020020034184056a20063602002003200a360298052003200936028c0520032004360280052003200f3703f804200341f0096a41186a200b290300370300200341f0096a41106a2007290300370300200341f0096a41086a2002290300370300200320032903a8023703f009200341b0076a200341c8026a41b00210e9081a200341206a2011200341f8046a200341f0096a200341b0076a108208427f200d42b8177e201042e0b60d7e7c20033502284280ac1b7e7c42e0fdcfea017c220d20032903207c220e200e200d541b210e0b4201210d410021010c0b0b200341c8026a41186a2207200141196a290000370300200341c8026a41106a2205200141116a290000370300200341c8026a41086a2206200141096a290000370300200320012900013703c802200341b0076a41286a200241286a280200360200200341b0076a41206a200241206a290200370300200341b0076a41186a2201200241186a290200370300200341b0076a41106a220b200241106a290200370300200341b0076a41086a220c200241086a290200370300200320022902003703b00702400240200341b0076a10a705450d00200320032800a80236028802200320032900f0093703b0072003200341ab026a28000036008b022003200341f7096a2800003600b707200041186a41003a00002000420037030820002003280288023600192000411c6a200328008b02360000200041206a41023a0000200020032903b007370021200041286a20032800b7073600004201210d0c010b200341f8046a41186a22022007290300220d370300200341f8046a41106a22072005290300220e370300200341f8046a41086a22052006290300220f370300200320032903c80222103703f804200341bd076a200f370000200341c5076a200e370000200341cd076a200d3700002003410b3a00b007200320103700b507200341033a00b407200341b0076a10fe0120012002290300370300200b2007290300370300200c2005290300370300200320032903f8043703b007200341b0076a1083082101200320032800a802360288022003200341a8026a41036a28000036008b02200041186a41003a0000200041106a2001ad42d0be1a7e42d0deb8a7017c3703002000420137030820002003280288023600192000411c6a200328008b023600004200210d0b2000200d3703000c190b200341b0076a410510fd07200320032900b107370388022003200341b8076a28000036008f020c0a0b200720091042000b200341dc076a2014360200200341d8076a2012360200200341bd076a2201200341a8026a41086a2202290300370000200341c5076a220b200341a8026a41106a220c290300370000200341cd076a2208200341a8026a41186a220a290300370000200341063a00b4072003410b3a00b007200320032903a8023700b507200341b0076a10fe01200341f8006a41186a2211200a290300220d370300200341f8006a41106a220a200c290300220e370300200341f8006a41086a220c2002290300220f370300200320032903a80222173703782001200f370000200b200e3700002008200d370000200341033a00b4072003410b3a00b007200320173700b507200341b0076a10fe01200341b0076a41186a2011290300370300200341b0076a41106a200a290300370300200341b0076a41086a200c290300370300200320032903783703b007201042c8be0d7e200341b0076a108308ad42a0ce1a7e7c42c8b9d4d5017c210e0c030b200320032900f804370388022003200341ff046a28000036008f020c030b410221010c130b200341dc076a2008360200200341d8076a2001360200200341bd076a2201200341a8026a41086a2202290300370000200341c5076a220b200341a8026a41106a220c290300370000200341cd076a2208200341a8026a41186a220a290300370000200341063a00b4072003410b3a00b007200320032903a8023700b507200341b0076a10fe01200341f8046a41186a2211200a290300220d370300200341f8046a41106a220a200c290300220e370300200341f8046a41086a220c2002290300220f370300200320032903a80222173703f8042001200f370000200b200e3700002008200d370000200341033a00b4072003410b3a00b007200320173700b507200341b0076a10fe01200341b0076a41186a2011290300370300200341b0076a41106a200a290300370300200341b0076a41086a200c290300370300200320032903f8043703b007201042a89f0d7e200341b0076a108308ad42e8b61a7e7c42a0adc1c7017c210e0b4201210d410121010c010b4200210d410021010b0240200641ffffff3f71450d002004102e0b0240200541ffffff3f71450d002009102e0b2007450d010b200320032800f8013602e80120032003290388023703b8012003200328008f023600bf012003200341fb016a2800003600eb01200041186a20013a0000200041106a200e3703002000200d370308200020032802e8013600192000411c6a20032800eb01360000200041206a20023a0000200020032903b801370021200041286a20032800bf01360000200042013703000c0f0b200320032800f8013602e8012003200341fb016a2800003600eb01200041186a20013a0000200041106a200e3703002000200d370308200020032802e8013600192000411c6a20032800eb01360000200042003703000c0e0b20032d00b00721010240201141ffffff3f71450d002008102e0b201241ffffff3f71450d002014102e0b200d42ffffff3f83500d00200b102e0b200320032800b8013602f8012003200329038802370398012003200328008f0236009f012003200341bb016a2800003600fb01200041186a41003a000020004200370308200020032802f8013600192000411c6a20032800fb01360000200041206a20013a00002000200329039801370021200041286a200328009f01360000200042013703000c0b0b200341f0096a41186a2207200341c8026a41186a290300370300200341f0096a41106a220c200341c8026a41106a290300370300200341f0096a41086a2215200341c8026a41086a290300370300200320032903c8023703f00920092011470d02201141016a22012011490d00201141017422162001201620014b1b22014104200141044b1b220141ffffff3f712001462116200141057421010240024020110d00200341003602b0070c010b200341b8076a4101360200200320083602b007200320114105743602b4070b200341f8046a20012016200341b0076a107d20034180056a280200210120032802f8044101470d0120010d050b1038000b20032802fc042108200141057621110b200820094105746a220120032903f009370000200141186a2007290300370000200141106a200c290300370000200141086a2015290300370000200941016a21092006450d00200a20024d0d012014200a417f6a220a4105746a220129000021102001290008211720012900102118201420024105746a220241186a200141186a2900003700002002201837001020022017370008200220103700000b200341d5076a20032903a802370000200341bd076a200341c8026a41086a290300370000200341c5076a200341c8026a41106a290300370000200341cd076a200341c8026a41186a290300370000200341dd076a200341a8026a41086a290300370000200341e5076a200341a8026a41106a290300370000200341ed076a200341a8026a41186a290300370000200341013a00b4072003410b3a00b007200320032903c8023700b507200341fc076a200a360200200341f8076a2009360200200341f5076a20043a0000200341b0076a10fe01200341cc076a200a360200200341b0076a41186a2012360200200341b0076a41106a2009360200200341bc076a2011360200200320133602d007200320143602c407200320083602b8072003200f3703b007200341f8046a200341a8026a10800820032802f8042201200328028005200341b0076a10be05024020032802fc04450d002001102e0b0240201141ffffff3f71450d002008102e0b0240201241ffffff3f71450d002014102e0b200e42e8ce127e4280cbd9d7007c210e0240200d42ffffff3f83500d00200b102e0b200320032800b8013602f8012003200341bb016a2800003600fb01200041186a20053a0000200041106a200e37030020004201370308200020032802f8013600192000411c6a20032800fb01360000200042003703000c060b2002200a1042000b1036000b20032902b407210d20032802b00721010b200e42ffffff3f83500d00200b102e0b2005108b022005102e2003200341e3006a28000036004b20032003280060360248200041186a41003a000020004200370308200020032802483600192000411c6a200328004b360000200041246a200d370200200041206a2001360200200042013703000c010b2005108b022005102e2003200341f4006a28000036005b20032003280071360258200320032903603703482003200328006736004f200041186a41003a000020004200370308200020032802583600192000411c6a200328005b360000200041206a20013a000020002003290348370021200041286a200328004f360000200042013703000b200341a00a6a24000bec7b06017f017e147f057e1a7f017e23004190076b220324000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e0700010203040507000b2003419c056a41013602002003420137028c052003419cc3cb0036028805200341043602840420034194c3cb0036028004200320034180046a3602980520034188056a41d4cec8001044000b200341c0016a41086a2001412c6a2802003602002003200141246a2902003703c001200341d0036a41186a200141196a290000370300200341d0036a41106a200141116a290000370300200341d0036a41086a200141096a290000370300200320012900013703d0032002411a6a2901002104200241196a2d00002105200241186a2d00002106200241166a2f01002107200241156a2d00002108200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f0100211620022d0001211720022d00002101200228022822022002280200417f6a2218360200024002400240024020010d00024020180d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b201741ff01714101470d01200320043703f801200320053a00f701200320063a00f601200320073b01f401200320083a00f301200320093a00f2012003200a3b01f0012003200b3a00ef012003200c3a00ee012003200d3b01ec012003200e3a00eb012003200f3a00ea01200320103b01e801200320113a00e701200320123a00e601200320133b01e401200320143a00e301200320153a00e201200320163b01e00120032802c8012202418080014d0d02200341f0036a41011098070c030b20180d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b200341023a00f0030c010b20034190066a20032802c0012217200210b001200341d8026a41186a20034190066a41186a290300370300200341d8026a41106a20034190066a41106a290300370300200341d8026a41086a20034190066a41086a29030037030020032003290390063703d80220034188056a200341d8026a1099072003280288052218200328029005108f0221010240200328028c05450d002018102e0b02402001450d00200341f0036a41021098070c010b2003200341d0036a36028c052003200341d8026a3602880520034180046a20034188056a108f0520034188056a20034180046a109a072003280288052218200328029005108f0221010240200328028c05450d002018102e0b02402001450d00200341f0036a41021098070c010b200341086a2002ad42004280c2d72f420010e80820034188056a200341e0016a200329030822194280c8afa0257c2204200341086a41086a2903002004201954ad7c221910c302200320032900890537039006200320034188056a41086a28000036009706024020032d00880522024106470d0020034188056a200341d8026a1099072003280288052202200328029005200341c0016a10c3050240200328028c05450d002002102e0b200341a8056a4100360200200341b4056a200341d8026a41086a290300370200200341bc056a200341d8026a41106a290300370200200341c4056a200341d8026a41186a290300370200200341d4056a200341d0036a41086a290300370200200341dc056a200341d0036a41106a290300370200200341e4056a200341d0036a41186a29030037020020032019370390052003200437038805200342083703a0052003410036029805200320032903d8023702ac05200320032903d0033702cc0520034184066a200341e0016a41186a290300370200200341fc056a200341e0016a41106a290300370200200341f4056a200341e0016a41086a290300370200200341013a008c06200320032903e0013702ec0520034190066a20034180046a109a07200328029006220220032802980620034188056a10bb050240200328029406450d002002102e0b20034188056a41086a41003a000020034191056a20032903800437000020034199056a20034180046a41086a290300370000200341a1056a20034180046a41106a290300370000200341a9056a20034180046a41186a290300370000200341163a00880520034188056a10fe01200341063a00f00320032802c401450d182017102e0c180b200341f0036a41086a200328009706360000200320023a00f00320032003290390063700f1030b024020032802c401450d0020032802c001102e0b20032d00f0034106460d1620032802f0032102200020032902f403370024200041206a2002360000200041186a41003a000020004200370308200042013703000c170b200341c0016a41186a200141196a290000370300200341c0016a41106a200141116a290000370300200341c0016a41086a200141096a290000370300200320012900013703c0012002411a6a2901002104200241196a2d00002105200241186a2d00002106200241166a2f01002107200241156a2d00002108200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f0100211620022d0001211720022d00002101200228022822022002280200417f6a2218360200024002400240024020010d00024020180d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b201741ff01714101470d01200320043703e803200320053a00e703200320063a00e603200320073b01e403200320083a00e303200320093a00e2032003200a3b01e0032003200b3a00df032003200c3a00de032003200d3b01dc032003200e3a00db032003200f3a00da03200320103b01d803200320113a00d703200320123a00d603200320133b01d403200320143a00d303200320153a00d203200320163b01d003200341f0036a200341c0016a109a0720034188056a20032802f003220120032802f80310b40520034190056a29030021042003290388052119200328029805210220034190066a2003419c056a41f40010e9081a20024102460d02200341d8026a20034190066a41f40010e9081a024020032802f403450d002001102e0b200341e0016a200341d8026a41f40010e9081a20032004370388042003201937038004200320023602900420034194046a200341e0016a41f40010e9081a200341e4046a200341d0036a412010ec08450d03200341b0016a41041098072003419c046a2802002202450d16200241306c450d16200328029804102e0c160b20180d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b200341023a00b0010c150b024020032802f403450d002001102e0b200341b0016a41031098070c130b20034188056a200341a4046a109907200328028805220220032802900510ff010240200328028c05450d002002102e0b20034188056a200341c0016a109a07200328028805220220032802900510ff010240200328028c05450d002002102e0b02402019200484500d00200341186a200341d0036a2019200410fb010b20034188056a41086a41033a000020034191056a20032903c00137000020034199056a200341c0016a41086a290300370000200341a1056a200341d0016a290300370000200341a9056a200341d8016a290300370000200341163a00880520034188056a10fe0102402003419c046a2802002202450d00200241306c450d00200328029804102e0b200341063a00b0010c140b200141386a2903002119200141306a290300211a200341c0016a41086a2001412c6a2802003602002003200141246a2902003703c001200341d0036a41186a200141196a290000370300200341d0036a41106a200141116a290000370300200341d0036a41086a200141096a290000370300200320012900013703d0032002411a6a2901002104200241196a2d00002105200241186a2d00002106200241166a2f01002107200241156a2d00002108200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f0100211620022d0001211720022d00002101200228022822022002280200417f6a221836020002400240024020010d00024020180d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b201741ff01714101470d01200320043703f801200320053a00f701200320063a00f601200320073b01f401200320083a00f301200320093a00f2012003200a3b01f0012003200b3a00ef012003200c3a00ee012003200d3b01ec012003200e3a00eb012003200f3a00ea01200320103b01e801200320113a00e701200320123a00e601200320133b01e401200320143a00e301200320153a00e201200320163b01e001200341e0016a10c3030d02200341023a00f0030c120b20180d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b200341023a00f0030c100b20034190066a20032802c00120032802c80110b001200341d8026a41186a20034190066a41186a290300370300200341d8026a41106a20034190066a41106a290300370300200341d8026a41086a20034190066a41086a29030037030020032003290390063703d80220034188056a200341d8026a1099072003280288052201200328029005108f0221020240200328028c05450d002001102e0b02402002450d00200341f0036a41021098070c100b2003200341d0036a36028c052003200341d8026a3602880520034180046a20034188056a108f0520034188056a200341d8026a1099072003280288052202200328029005200341c0016a10c3050240200328028c05450d002002102e0b2003290380042104200329038804211b200329039004211c200341a9056a200329039804370000200341a1056a201c37000020034199056a201b37000020034191056a200437000020034188056a41086a220141003a0000200341163a00880520034188056a10fe014130102c2202450d0d2002201a370320200220032903e001370100200241286a2019370300200241186a200341e0016a41186a2218290300370100200241106a200341e0016a41106a2217290300370100200241086a200341e0016a41086a220529030037010020034188056a41106a410036020020014200370300200341a4056a428180808010370200200341b4056a200341d8026a41086a290300370200200341bc056a200341d8026a41106a290300370200200341c4056a200341d8026a41186a2903003702002003420037038805200320023602a005200320032903d8023702ac05200341d4056a200341d0036a41086a290300370200200341dc056a200341d0036a41106a290300370200200341e4056a200341d0036a41186a290300370200200320032903d0033702cc0520034184066a2018290300370200200341fc056a2017290300370200200341f4056a2005290300370200200320032903e0013702ec05200341003a008c0620034190066a20034180046a109a07200328029006220120032802980620034188056a10bb050240200328029406450d002001102e0b2002102e200341063a00f00320032802c401450d1020032802c001102e0c100b200141306a2903002119200141286a290300211a200341c0016a41186a200141196a290000370300200341c0016a41106a200141116a290000370300200341c0016a41086a200141096a290000370300200320012900013703c0012002411a6a2901002104200241196a2d00002105200241186a2d00002106200241166a2f01002107200241156a2d00002108200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f0100211620022d0001211720022d00002101200228022822022002280200417f6a2218360200024002400240024002400240024002400240024020010d00024020180d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b201741ff01714101470d01200320043703e803200320053a00e703200320063a00e603200320073b01e403200320083a00e303200320093a00e2032003200a3b01e0032003200b3a00df032003200c3a00de032003200d3b01dc032003200e3a00db032003200f3a00da03200320103b01d803200320113a00d703200320123a00d603200320133b01d403200320143a00d303200320153a00d203200320163b01d003200341d0036a10c303450d0120034190066a41186a200341c0016a41186a29030037030020034190066a41106a200341c0016a41106a29030037030020034190066a41086a200341c0016a41086a290300370300200320032903c00137039006200341f0036a20034190066a109b0720034188056a20032802f003220120032802f80310b40520034188056a41086a2903002104200329038805211b200328029805210220034190066a2003419c056a41f40010e9081a20024102460d02200341d8026a20034190066a41f40010e9081a024020032802f403450d002001102e0b200341e0016a200341d8026a41f40010e9081a20032004370388042003201b37038004200320023602900420034194046a200341e0016a41f40010e9081a200341d8026a41186a2201200341d0036a41186a290300370300200341d8026a41106a2218200341d0036a41106a290300370300200341d8026a41086a2217200341d0036a41086a290300370300200320032903d0033703d80241002102200328029804210520034180046a41206a28020022060e020504030b20180d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b200341023a00b0010c150b024020032802f403450d002001102e0b200341b0016a410310980720032d00b0014106460d0620032902b40121040c140b410021022006210103402001410176221720026a2118201820022005201841306c6a200341d8026a412010ec084101481b2102200120176b220141014b0d000b0b2005200241306c6a2201200341d8026a412010ec082218450d0220034188056a41186a200341d8026a41186a29030037030020034188056a41106a200341d8026a41106a29030037030020034188056a41086a200341d8026a41086a290300370300200320032903d8023703880520034188056a2101200620022018411f766a22184f0d01201820061045000b20034188056a41186a200129030037030020034188056a41106a201829030037030020034188056a41086a2017290300370300200320032903d802370388054100211820034188056a21010b0240024020062003419c046a280200470d00200641016a22022006490d10200641017422172002201720024b1b22024104200241044b1bad42307e2204422088a74541037421022004a721170240024020060d0020034100360290060c010b20034190066a41086a410836020020032005360290062003200641306c360294060b200341e0016a2017200220034190066a107d200341e8016a280200210220032802e0014101460d01200320032802e4012205360298042003200241306e36029c040b2005201841306c6a220241306a2002200620186b41306c10ea081a200141086a2903002104200141106a290300211b200141186a290300211c2001290300211d200241286a20193703002002201a370320200241186a201c370300200241106a201b370300200241086a20043703002002201d3703002003200641016a3602a0040c020b2002450d0e0c0f0b200620024d0d0320032901da02210420032901e202211b20032801ea02211820032f01ee02211720032903f002211c200120032f01d8023b01002005200241306c6a2202201a3703202002201c370318200220173b0116200220183601122002201b37010a20022004370102200241286a20193703000b20034180046a41186a2117200341a8066a2201420037030020034190066a41106a2202420037030020034190066a41086a221842003703002003420037039006200341e0016a418ef9c00041101081022018200341e0016a41086a2205290000370300200320032900e00137039006200341e0016a41c7c3cb00410710810220012005290000370300200220032900e00137030020034188056a20034190066a10f102200329028c05210420032003280288052201410820011b221836029005200320183602880520032004420020011b22043e028c05200320182004422088a74106746a3602940520034190066a20034188056a10c00120032003280290062201360288052003200120032802980622184105746a36028c050240024020180d00410021180c010b2003200141206a36028805200121180b200320183602e0012017200341e0016a20034188056a10bb01024020032802940641ffffff3f71450d002001102e0b200341a8066a420037030020034190066a41106a420037030020034190066a41086a220142003703002003420037039006200341e0016a418ef9c00041101081022001200341e0016a41086a2218290000370300200320032900e00137039006200341e0016a41c7c3cb004107108102200241086a2018290000370000200220032900e00137000020034188056a20034190066a10f102200329028c05210420032003280288052201410820011b221836029005200320183602880520032004420020011b22043e028c05200320182004422088a74106746a3602940520034190066a20034188056a10c0012003280298062101024020032802940641ffffff3f71450d00200328029006102e0b024020032802a004200141016a410176490d002003280290044101460d00200341a8066a4200370300200341a0066a420037030020034190066a41086a220142003703002003420037039006200341e0016a41d9fcc60041061081022001200341e0016a41086a2218290000370300200320032900e00137039006200341e0016a4180f4cb004106108102200241086a2018290000370000200220032900e001370000200341286a20034190066a4120108e0220034101360290042003200328022c41c0f0006a41c0f00020032802281b3602940420032903c001210420032903c801211920032903d001211a200341a9056a20032903d801370000200341a1056a201a37000020034199056a201937000020034191056a200437000020034188056a41086a41013a0000200341163a00880520034188056a10fe010b20034188056a20034180046a41880110e9081a20034190066a200341c0016a109a07200328029006220220032802980620034188056a10bb050240200328029406450d002002102e0b0240200341a4056a2802002202450d00200241306c450d0020032802a005102e0b200341063a00b0010b20004200370308200020032800a901360019200041186a41003a00002000411c6a200341ac016a280000360000200042003703000c140b200141196a290000211d200141186a2d0000211e200141176a2d0000211f200141156a2f00002120200141146a2d00002121200141136a2d00002122200141116a2f00002123200141106a2d000021242001410f6a2d000021252001410d6a2f000021262001410c6a2d000021272001410b6a2d00002128200141096a2f00002129200141086a2d0000212a200141076a2d0000212b200141056a2f0000212c200141046a2d0000212d200141036a2d0000212e20022d0001211720022d0000211820012f0001212f200228022822022002280200417f6a2201360200024002400240024020180d00024020010d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b201741ff01714101470d012003201d3703a8062003201e3a00a7062003201f3a00a606200320203b01a406200320213a00a306200320223a00a206200320233b01a006200320243a009f06200320253a009e06200320263b019c06200320273a009b06200320283a009a06200320293b0198062003202a3a0097062003202b3a0096062003202c3b0194062003202d3a0093062003202e3a0092062003202f3b019006200341d0036a20034190066a109b0720034188056a20032802d003220120032802d80310b40520034190056a29030021042003290388052119200328029805210220034190066a2003419c056a41f40010e9081a20024102460d02200341d8026a20034190066a41f40010e9081a024020032802d403450d002001102e0b200341e0016a200341d8026a41f40010e9081a20032004370388042003201937038004200320023602900420034194046a200341e0016a41f40010e9081a20024101470d06200341a8066a22014200370300200341a0066a2202420037030020034190066a41086a221842003703002003420037039006200341e0016a41d9fcc60041061081022018200341e0016a41086a2217290000370300200320032900e00137039006200341e0016a4180f4cb00410610810220012017290000370300200220032900e001370300200341f0006a20034190066a4120108e022003280274410020032802701b2003280294044f0d03200341f0036a41061098070c070b20010d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22012001280200417f6a220136020020010d002002102e0b200341023a00f0030c070b024020032802d403450d002001102e0b200341f0036a41031098070c050b20034188056a200341a4046a109907200328028805220120032802900510ff010240200328028c05450d002001102e0b2003201d3703a0052003201e3a009f052003201f3a009e05200320203b019c05200320213a009b05200320223a009a05200320233b019805200320243a009705200320253a009605200320263b019405200320273a009305200320283a009205200320293b0190052003202a3a008f052003202b3a008e052003202c3b018c052003202d3a008b052003202e3a008a052003202f3b01880520034190066a20034188056a109b07200328029006220120032802980610ff010240200328029406450d002001102e0b20034188056a20034180046a41880110e9081a200341c0016a41086a20034188056a41206a280200360200200320032903a0053703c001200341a8066a420037030020034190066a41106a420037030020034190066a41086a220142003703002003420037039006200341e0016a418ef9c00041101081022001200341e0016a41086a2218290000370300200320032900e00137039006200341e0016a41c7c3cb004107108102200241086a2018290000370000200220032900e001370000200341d8026a20034190066a10f10220032902dc022104200320032802d8022202410820021b220136029806200320013602900620032004420020021b22043e029406200320012004422088a74106746a36029c06200341d8026a20034190066a10c001200320032802d8022202360290062003200220032802e00222014105746a360294060240024020010d00410021010c010b2003200241206a36029006200221010b200320013602e001200341c0016a200341e0016a20034190066a10bb01024020032802dc0241ffffff3f71450d002002102e0b20032802c001211302400240024020032802c801221641144b0d00201641014d0d0a20132016417f6a221841306c6a2107410021170340201620182202417f6a2218490d030240201620186b22094102490d002013200241306c6a220241206a22052903002013201841306c6a220141206a2206290300221a5a200241286a22082903002219200141286a220a29030022045a20192004511b0d0020034190066a41186a220b200141186a220c29030037030020034190066a41106a220d200141106a220e29030037030020034190066a41086a220f200141086a22102903003703002003200129030037039006200120022903003703002010200241086a290300370300200e200241106a290300370300200c200241186a29030037030020062005290300370300200a2008290300370300024020094103490d002017417f6a210841002101200721020340200241d0006a2205290300201a5a200241d8006a2206290300221920045a20192004511b0d0120082001460d05200241286a2006290300370300200241206a2005290300370300200241186a200241c8006a290300370300200241106a200241c0006a290300370300200241086a200241386a2903003703002002200241306a22052903003703002005210220172001417f6a2201470d000b200521020b2002201a3703202002200329039006370300200241286a2004370300200241186a200b290300370300200241106a200d290300370300200241086a200f2903003703000b200741506a21072017417f6a211720180d000c0b0b0b2016410176ad42307e2204422088a70d0c2004a72230417f4c0d0c2030102c2231450d0d201341506a2132201341907f6a21334104210c410021344100210a20162110034020102107410021104101210602402007417f6a2217450d0002400240024002400240024002402013201741306c6a220241206a290300200741306c220820136a41406a2201290300221954200241286a290300221a200141086a290300220454201a2004511b0d002007417e6a2106203320086a210241002110410021010340024020062001470d00200721060c090b20192002290300221b5a21182004200241086a290300221a5121172004201a5a2105200241506a2102200141016a2101201b2119201a21042018200520171b0d000b200141016a21062001417f7320076a21170c010b203320086a210202400340024020174101470d00410021170c020b20192002290300221b5421012004200241086a290300221a5121182004201a542105200241506a21022017417f6a2117201b2119201a21042001200520181b0d000b0b20072017490d01200720164b0d02200720176b22064101762218450d00203220086a21022013201741306c6a2101034020034190066a41286a2205200141286a220829030037030020034190066a41206a2209200141206a220b29030037030020034190066a41186a220d200141186a220e29030037030020034190066a41106a220f200141106a221029030037030020034190066a41086a2211200141086a22122903003703002003200129030037039006200241086a22142903002104200241106a22152903002119200241186a2235290300211a200241206a2236290300211b200241286a2237290300211c200120022903003703002008201c370300200b201b370300200e201a370300201020193703002012200437030020372005290300370300203620092903003703002035200d2903003703002015200f290300370300201420112903003703002002200329039006370300200241506a2102200141306a21012018417f6a22180d000b0b024020170d00201721100c060b0240200641094d0d00201721100c060b200720164b0d03201720076b21182013201741306c6a2108034020072017417f6a2210490d050240200720106b22064102490d002013201741306c6a220241206a22172903002013201041306c6a220141206a2205290300221a5a200241286a22092903002219200141286a220b29030022045a20192004511b0d0020034190066a41186a220d200141186a220e29030037030020034190066a41106a220f200141106a221129030037030020034190066a41086a2212200141086a22142903003703002003200129030037039006200120022903003703002014200241086a2903003703002011200241106a290300370300200e200241186a29030037030020052017290300370300200b2009290300370300024020064103490d0041012101200821020340200241d0006a2217290300201a5a200241d8006a2205290300221920045a20192004511b0d01201820016a4101460d06200241286a2005290300370300200241206a2017290300370300200241186a200241c8006a290300370300200241106a200241c0006a290300370300200241086a200241386a2903003703002002200241306a2217290300370300201721022018200141016a22016a0d000b201721020b2002201a3703202002200329039006370300200241286a2004370300200241186a200d290300370300200241106a200f290300370300200241086a20122903003703000b2010450d06200841506a21082018417f6a2118201021172006410a4f0d060c000b0b2017200741e4d1cc001057000b2007201641e4d1cc00104d000b2001200641d4d1cc00103c000b20072017417f6a2210490d002007201641f4d1cc00104d000b2010200741f4d1cc001057000b0240200a2034470d00203441016a22022034490d0e203441017422012002200120024b1b22024104200241044b1b220241ffffffff01712002464102742101200241037421020240024020340d0020034100360290060c010b20034104360298062003200c3602900620032034410374360294060b200341d8026a2002200120034190066a107d20032802e0022102024020032802d8024101470d0020020d100c0f0b20032802dc02210c200241037621340b200c200a4103746a2202200636020420022010360200200a41016a2211210a024020114102490d0002400240024003400240024002400240200c2011220a417f6a22114103746a2202280200450d00200a410374200c6a220541746a2802002217200228020422014d0d00200a41024d0d08200c200a417d6a22024103746a2802042218200120176a4d0d01200a41034d0d08200541646a280200201820176a4b0d080c010b200a4103490d0120022802042101200c200a417d6a22024103746a28020421180b20182001490d010b200a417e6a21020b0240200a200241016a22124d0d00200a20024d0d02200c20024103746a220d2802042214200d2802006a2202200c20124103746a220e280200220f490d03200220164b0d04200d41046a21152013200f41306c6a2209200e280204220b41306c22016a2117200241306c2118024002402002200f6b2206200b6b2202200b490d0020312009200110e908220820016a210502400240200b4101480d002006200b4a0d010b20092102200821010c020b201320186a210720082101200921020340200220172001201741206a290300200141206a29030054201741286a2903002204200141286a29030022195420042019511b22061b2218290300370300200241086a201841086a290300370300200241106a201841106a290300370300200241186a201841186a290300370300200241206a201841206a290300370300200241286a201841286a2903003703002001200141306a20061b2101200241306a2102201741306a201720061b221720074f0d02200520014b0d000c020b0b20312017200241306c220110e908220620016a210502400240200b4101480d00200241014e0d010b20172102200621010c010b203220186a21182017210203402018200241506a2207200541506a2208200541706a2201290300200241706a221729030054200141086a2903002204201741086a29030022195420042019511b22171b2201290300370300201841086a200141086a290300370300201841106a200141106a290300370300201841186a200141186a290300370300201841206a200141206a290300370300201841286a200141286a2903003703002005200820171b2105024020092007200220171b2202490d00200621010c020b201841506a21182006210120062005490d000b0b20022001200520016b221820184130706b10e9081a20152014200b6a360200200d200f360200200e200e41086a200a2012417f736a41037410ea081a4101210a201141014d0d050c010b0b2012200a4184d2cc00103c000b2002200a4194d2cc00103c000b200f200241a4d2cc001057000b2002201641a4d2cc00104d000b2010450d090c000b0b410120016b200941d4d1cc00103c000b2018201641c4d1cc001056000b2002200641ecd3c800103c000b200341d0036a41186a2218200141196a290000370300200341d0036a41106a2217200141116a290000370300200341d0036a41086a2205200141096a290000370300200320012900013703d0032002280228210102400240024002400240024002400240024020022d00000e0400010203020b20022d0001210220012001280200417f6a2206360200024020060d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22062006280200417f6a220636020020060d002001102e0b200241ff0171450d024110102c2202450d11200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1120014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a221836020020180d012002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22182018280200417f6a221836020020180d012002102e0c010b200241046a2d00002106200241086a28020021072002410c6a280200210820012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0240200641ff01710d00200741017420084b0d020b4110102c2202450d10200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1020014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a221836020020180d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22182018280200417f6a221836020020180d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b200341023a00f0030c010b20034188056a41186a201829030037030020034188056a41106a201729030037030020034188056a41086a2005290300370300200320032903d00337038805200341c0016a20034188056a109b0720034188056a20032802c001220220032802c801220110b405024020032802980522184102460d002002200110ff0120034190056a2903002104200329038805211920034190066a20034188056a41146a41f40010e9081a200341d8026a20034190066a41f40010e9081a024020032802c401450d002002102e0b200341e0016a200341d8026a41f40010e9081a20032018360290042003201937038004200320043703880420034180046a41146a200341e0016a41f40010e9081a2019200484500d0320034188016a200341e4046a2019200410cb022003290388012104200320034188016a41086a290300221937039005200320043703880520042019844200520d02200320034188056a3602900620034190066a10cc020c030b20034190066a2003419c056a41f40010e9081a024020032802c401450d002002102e0b200341f0036a410310980720032d00f0034106460d0320032902f40321040b20032802f003210220002004370024200041206a2002360000200041186a41003a000020004200370308420121040c030b200342f0f2bda1a7ee9cb9f9003703900620034188056a20034190066a10cd02200341f8006a20034188056a2004201910fd01200341a0066a200341f8006a41086a290300221b20197d2003290378221a200454ad7d2019201b7d2004201a54ad7d201a200456201b201956201b2019511b22021b3703002003201a20047d2004201a7d20021b3703980620032002ad3703900620034190066a41086a21010240024020020d00200320013602d802200341d8026a10cc020c010b200320013602d802200341d8026a10ce020b200341a0056a201937030020034198056a200437030020034190056a41063a00002003410e3a00880520034188056a10fe010b20034188056a200341a4046a109907200328028805220220032802900510ff010240200328028c05450d002002102e0b20034180046a41086a2903002104200329038004211920034188056a41086a41043a000020034191056a20032903d00337000020034199056a200341d0036a41086a290300370000200341a1056a200341e0036a290300370000200341a9056a200341e8036a290300370000200341b1056a20032902e404370000200341b9056a200341ec046a290200370000200341c1056a200341f4046a290200370000200341c9056a200341fc046a290200370000200341163a008805200341e0056a2004370300200341d8056a201937030020034188056a10fe0102402003419c046a2802002202450d00200241306c450d00200328029804102e0b200341063a00f0030b42002104200042003703082000200328008805360019200041186a41003a00002000411c6a2003418b056a2800003600000b200020043703000c110b200341f0036a41051098070b2003419c046a2802002202450d00200241306c450d00200328029804102e0b20032d00f0034106460d0320032902f40321040b20032802f003210220002004370024200041206a2002360000200041186a41003a000020004200370308200042013703000c0d0b0240203441ffffffff0171450d00200c102e0b2030413070210220304130490d0020302002460d002031102e0b200342f0f2bda1a7ee9cb9f90037039006200341e0016a20034190066a10cd02200342f0f2bda1a7ee9cb9f90037039006200341d8026a20034190066a10cd02200341d0036a200341d8026a10c80220034190066a20032802d003220220032802d80310c9022003290390062104200341a0066a2903002119200329039806211a024020032802d403450d002002102e0b20032802c8012202200241017622014d0d0120032802c001200141306c6a2202290320221b4200201a4200200442015122011b22044280b8d0df5a7c221a201a2004562019420020011b221920044280c8afa02554ad7d221a201956200442ffc7afa025561b22011b221c56200241286a29030022044200201a20011b22195620042019511b21020240200329038805221a20034190056a290300223884500d00200341e0006a200341ec056a201a203810fb010b2019200420021b2119201c201b20021b2104024020032d008c06450d0020034188056a41e4006a2202200341cc056a412010ec08450d00200341d0006a2004201942e400420010e608200341c0006a2004201942e400420010e708200341306a2003290340200341c0006a41086a2903004214420010e80820034190066a200341e0016a20022003290330221b2003280250220141ffff037141056e200141146c41fcff037141e4007041324b6aad42ff01837c221a200341306a41086a290300201a201b54ad7c221b410010ca022019201b7d2004201a54ad7d21192004201a7d21040b200341d8026a200341e0016a200341cc056a20042019410010ca02200341b1066a201d370000200341b0066a201e3a0000200341af066a201f3a0000200341ad066a20203b0000200341ac066a20213a0000200341ab066a20223a0000200341a9066a20233b0000200341a8066a20243a0000200341a7066a20253a0000200341a5066a20263b0000200341a4066a20273a0000200341a3066a20283a0000200341a1066a20293b0000200341a0066a202a3a00002003419f066a202b3a00002003419d066a202c3b00002003419c066a202d3a00002003419b066a202e3a000020034199066a202f3b000020034198066a41023a0000200341163a009006200341e0066a2004370300200341e8066a2019370300200341d1066a200341e4056a290200370000200341c9066a200341dc056a290200370000200341c1066a200341d4056a290200370000200341b9066a20032902cc0537000020034190066a10fe01024020032802c4012202450d00200241306c450d0020032802c001102e0b200341063a00f0030b20004200370308200020032800b001360019200041186a41003a00002000411c6a200341b3016a280000360000200042003703000c0a0b2001200241fcd3c800103c000b1038000b1036000b20032802b001210220002004370024200041206a2002360000200041186a41003a000020004200370308200042013703000c060b024020032802c401450d0020032802c001102e0b20032d00f0034106460d0020032802f0032102200020032902f403370024200041206a2002360000200041186a41003a000020004200370308200042013703000c050b20004200370308200020032800b001360019200041186a41003a00002000411c6a200341b3016a280000360000200042003703000c040b20032d00b0014106460d0120032902b40121040b20032802b001210220002004370024200041206a2002360000200041186a41003a000020004200370308200042013703000c020b20004200370308200020032800a901360019200041186a41003a00002000411c6a200341ac016a280000360000200042003703000c010b20004200370308200020032800b001360019200041186a41003a00002000411c6a200341b3016a280000360000200042003703000b20034190076a24000b8e7906097f017e0b7f037e037f017e230041c0026b22032400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e080001020304050607000b200341d4016a4101360200200342013702c4012003419cc3cb003602c0012003410436029c0120034194c3cb0036029801200320034198016a3602d001200341c0016a41a4c3cb001044000b20034198016a41186a200141196a29000037030020034198016a41106a200141116a29000037030020034198016a41086a200141096a29000037030020032001290001370398012002410e6a2f010021042002410d6a2d000021052002410c6a2d000021062002410a6a2f01002107200241096a2d00002108200241086a2d00002109200241046a2d0000210a20022802282101024020022d0000220b0d002002411a6a290100210c200241196a2d0000210b200241186a2d0000210d200241166a2f0100210e200241156a2d0000210f200241146a2d00002110200241126a2f01002111200241116a2d00002112200241106a2d00002113200241066a2f01002114200241056a2d00002115200241026a2f0100211620022d0001210220012001280200417f6a2217360200024020170d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22172017280200417f6a221736020020170d002001102e0b2003200c3703d8012003200b3a00d7012003200d3a00d6012003200e3b01d4012003200f3a00d301200320103a00d201200320113b01d001200320123a00cf01200320133a00ce01200320043b01cc01200320053a00cb01200320063a00ca01200320073b01c801200320083a00c701200320093a00c601200320143b01c401200320153a00c3012003200a3a00c201200320163b01c0010240200241ff01710d004103210b0c010b4110102c2202450d18200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1820014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220d3602004100210b200d0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a220d200d280200417f6a220d360200200d0d002002102e0b0240024002400240200b417f6a0e03000102010b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0240200a41ff01710d00200741107420084108747220097241017420044110742005410874722006724b0d020b4110102c2202450d1a200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1a20014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220b360200200b0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a220b200b280200417f6a220b360200200b0d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b410221020c010b200341d8016a22024200370300200341d0016a22014200370300200341c0016a41086a220b4200370300200342003703c001200341c8006a41b4c3cb004113108102200b200341c8006a41086a220a290000370300200320032900483703c001200341c8006a41c7c3cb0041071081022002200a29000037030020012003290048370300200341f8006a200341c0016a1088030240200328027822040d0041002106200341003602302003420137032841012104410021050c170b2003200329027c220c37022c20032004360228200ca721054100210202400240200c422088a722060e021801000b410021022006210103402001410176220a20026a210b200b20022004200b4105746a20034198016a412010ec084101481b21022001200a6b220141014b0d000b0b0240200420024105746a20034198016a412010ec082201450d00200341c0016a41186a20034198016a41186a290300370300200341c0016a41106a20034198016a41106a290300370300200341c0016a41086a20034198016a41086a29030037030020032003290398013703c001200620022001411f766a220b490d08200341c0016a21010c180b0240200541ffffff3f71450d002004102e0b410321020b200041cec3cb00360024200041123b002120004200370308200041286a410d360000200041206a20023a0000200041186a41003a0000200042013703000c180b200341f8006a41186a200141196a290000370300200341f8006a41106a200141116a290000370300200341f8006a41086a200141096a290000370300200320012900013703782002410e6a2f010021042002410d6a2d000021052002410c6a2d000021062002410a6a2f01002107200241096a2d00002108200241086a2d00002109200241046a2d0000210a20022802282101024020022d0000220b0d002002411a6a290100210c200241196a2d0000210b200241186a2d0000210d200241166a2f0100210e200241156a2d0000210f200241146a2d00002110200241126a2f01002111200241116a2d00002112200241106a2d00002113200241066a2f01002114200241056a2d00002115200241026a2f0100211620022d0001210220012001280200417f6a2217360200024020170d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22172017280200417f6a221736020020170d002001102e0b2003200c3703d8012003200b3a00d7012003200d3a00d6012003200e3b01d4012003200f3a00d301200320103a00d201200320113b01d001200320123a00cf01200320133a00ce01200320043b01cc01200320053a00cb01200320063a00ca01200320073b01c801200320083a00c701200320093a00c601200320143b01c401200320153a00c3012003200a3a00c201200320163b01c0010240200241ff01710d004103210b0c010b4110102c2202450d17200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1720014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220d3602004100210b200d0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a220d200d280200417f6a220d360200200d0d002002102e0b0240024002400240200b417f6a0e03000102010b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0240200a41ff01710d00200741107420084108747220097241017420044110742005410874722006724b0d020b4110102c2202450d19200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1920014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220b360200200b0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a220b200b280200417f6a220b360200200b0d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b410221020c010b200341d8016a22024200370300200341d0016a22014200370300200341c0016a41086a220b4200370300200342003703c001200341c8006a41b4c3cb004113108102200b200341c8006a41086a220a290000370300200320032900483703c001200341c8006a41c7c3cb0041071081022002200a2900003703002001200329004837030020034198016a200341c0016a1088030240024020032802980122040d0020034100360210200342013703080c010b2003200329029c01220c37020c20032004360208200ca741ffffff3f71210641002102024002400240200c422088a722050e020201000b410021022005210103402001410176220a20026a210b200b20022004200b4105746a200341f8006a412010ec084101481b21022001200a6b220141014b0d000b0b200420024105746a200341f8006a412010ec080d00200520024d0d09200420024105746a2201200141206a20052002417f736a41057410ea081a20032005417f6a2202360210200341c0016a41186a220b4200370300200341c0016a41106a220a4200370300200341c0016a41086a22074200370300200342003703c00120034198016a41b4c3cb004113108102200720034198016a41086a220129000037030020032003290098013703c00120034198016a41c7c3cb004107108102200b2001290000370300200a200329009801370300200341c0016a200341086a109a03200b200341f8006a41186a290300370300200a200341f8006a41106a2903003703002007200341f8006a41086a290300370300200320032903783703c001200341c0016a41012004200210840820034198016a41186a220a420037030020034198016a41106a22074200370300200142003703002003420037039801200341c8006a41b4c3cb0041131081022001200341c8006a41086a220b2900003703002003200329004837039801200341c8006a41dbc3cb004105108102200a200b29000037030020072003290048370300200341c0016a20034198016a412010f40220032d00c0012108200341c8006a41186a2209200341d9016a290000370300200341c8006a41106a220d200341d1016a290000370300200b200341c9016a290000370300200320032900c101370348024020084101470d00200341286a41186a2009290300220c370300200341286a41106a200d2903002218370300200341286a41086a200b290300221937030020032003290348221a370328200a200c37030020072018370300200120193703002003201a370398014100210102400240024002402005417f6a0e020201000b4100210103402002410176220a20016a210b200b20012004200b4105746a20034198016a412010ec084101481b21012002200a6b220241014b0d000b0b200420014105746a20034198016a412010ec08450d010b200341e0006a22024200370300200341d8006a22014200370300200341c8006a41086a220b420037030020034200370348200341c0016a41b4c3cb004113108102200b200341c0016a41086a220a290000370300200320032900c001370348200341c0016a41dbc3cb0041051081022002200a290000370300200120032900c001370300200341c8006a412010ff010c010b200341d9016a200341b0016a290300370000200341d1016a200341a8016a290300370000200341c9016a200341a0016a29030037000020032003290398013700c101200341013a00c001200341c0016a1086080b2003418d023b01c001200341c0016a10fe0102402006450d002004102e0b200041186a41003a000020004200370308200020032800683600192000411c6a200341eb006a280000360000200042003703000c1a0b2006450d002004102e0b410321020b200041e0c3cb0036002420004192023b002120004200370308200041286a4109360000200041206a20023a0000200041186a41003a0000200042013703000c170b200341086a41186a200141196a290000370300200341086a41106a200141116a290000370300200341086a41086a200141096a29000037030020032001290001370308200341f8006a41186a200141396a290000370300200341f8006a41106a200141316a290000370300200341f8006a41086a200141296a2900003703002003200141216a2900003703782002410e6a2f010021042002410d6a2d000021052002410c6a2d000021062002410a6a2f01002107200241096a2d00002108200241086a2d00002109200241046a2d0000210a20022802282101024020022d0000220b0d002002411a6a290100210c200241196a2d0000210b200241186a2d0000210d200241166a2f0100210e200241156a2d0000210f200241146a2d00002110200241126a2f01002111200241116a2d00002112200241106a2d00002113200241066a2f01002114200241056a2d00002115200241026a2f0100211620022d0001210220012001280200417f6a2217360200024020170d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22172017280200417f6a221736020020170d002001102e0b2003200c3703d8012003200b3a00d7012003200d3a00d6012003200e3b01d4012003200f3a00d301200320103a00d201200320113b01d001200320123a00cf01200320133a00ce01200320043b01cc01200320053a00cb01200320063a00ca01200320073b01c801200320083a00c701200320093a00c601200320143b01c401200320153a00c3012003200a3a00c201200320163b01c0010240200241ff01710d004103210b0c010b4110102c2202450d16200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1620014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220d3602004100210b200d0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a220d200d280200417f6a220d360200200d0d002002102e0b024002400240200b417f6a0e03000102010b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0240200a41ff01710d00200741107420084108747220097241017420044110742005410874722006724b0d020b4110102c2202450d17200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1720014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220b360200200b0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a220b200b280200417f6a220b360200200b0d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b410221020c100b200341086a200341f8006a412010ec08450d11200341d8016a22024200370300200341d0016a22014200370300200341c0016a41086a220b4200370300200342003703c001200341c8006a41b4c3cb004113108102200b200341c8006a41086a220a290000370300200320032900483703c001200341c8006a41c7c3cb0041071081022002200a2900003703002001200329004837030020034198016a200341c0016a108803024020032802980122040d0020034100360270200342013703684109210641e0c3cb002107410121050c0f0b2003200329029c01220c37026c2003200436026841012105200ca741ffffff3f7121094100210241e0c3cb0021074109210602400240200c422088a722080e020f01000b410021022008210103402001410176220a20026a210b200b20022004200b4105746a200341086a412010ec084101481b21022001200a6b220141014b0d000b0b200420024105746a200341086a412010ec080d0d4100210541002101024020080e02110d000b410021012008210b0340200b410176220620016a210a200a20012004200a4105746a200341f8006a412010ec084101481b2101200b20066b220b41014b0d000c0d0b0b2002410e6a2f010021072002410d6a2d000021082002410c6a2d000021092002410a6a2f0100210d200241096a2d0000210e200241086a2d0000210f200241046a2d000021042001410c6a2802002105200141086a2802002106200141046a280200210a20022802282101024020022d0000220b0d002002411a6a290100210c200241196a2d0000210b200241186a2d00002110200241166a2f01002111200241156a2d00002112200241146a2d00002113200241126a2f01002114200241116a2d00002115200241106a2d00002116200241066a2f01002117200241056a2d0000211b200241026a2f0100211c20022d0001210220012001280200417f6a221d3602000240201d0d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a221d201d280200417f6a221d360200201d0d002001102e0b2003200c3703d8012003200b3a00d701200320103a00d601200320113b01d401200320123a00d301200320133a00d201200320143b01d001200320153a00cf01200320163a00ce01200320073b01cc01200320083a00cb01200320093a00ca012003200d3b01c8012003200e3a00c7012003200f3a00c601200320173b01c4012003201b3a00c301200320043a00c2012003201c3b01c0010240200241ff01710d004103210b0c010b4110102c2202450d15200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1520014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a22103602004100210b20100d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a22102010280200417f6a221036020020100d002002102e0b024002400240200b417f6a0e03000102010b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0240200441ff01710d00200d411074200e41087472200f7241017420074110742008410874722009724b0d020b4110102c2202450d16200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1620014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220b360200200b0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a220b200b280200417f6a220b360200200b0d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0240200641ffffff3f71450d00200a102e0b20004200370308200041206a41023a0000200041186a41003a0000200042013703000c160b200a200510fc02200341c0016a41186a22014200370300200341c0016a41106a220b4200370300200341c0016a41086a22044200370300200342003703c001200341c8006a41b4c3cb0041131081022004200341c8006a41086a2202290000370300200320032900483703c001200341c8006a41c7c3cb00410710810220012002290000370300200b200329004837030020034198016a200341c0016a108803200a20052003280298012201410120011b2208200329029c01420020011b220c422088a710fc0720034198016a41186a2201420037030020034198016a41106a220b420037030020034198016a41086a220442003703002003420037039801200341c8006a41b4c3cb004113108102200420022900003703002003200329004837039801200341c8006a41dbc3cb00410510810220012002290000370300200b2003290048370300200341c0016a20034198016a412010f40220032d00c0012107200341c8006a41186a2209200341d9016a290000370300200341c8006a41106a220d200341d1016a2900003703002002200341c9016a290000370300200320032900c101370348024020074101470d00200341286a41186a20092903002218370300200341286a41106a200d2903002219370300200341286a41086a2002290300221a37030020032003290348221e37032820012018370300200b20193703002004201a3703002003201e3703980141002102024002400240024020050e020201000b410021022005210103402001410176220420026a210b200b2002200a200b4105746a20034198016a412010ec084101481b2102200120046b220141014b0d000b0b200a20024105746a20034198016a412010ec08450d010b200341e0006a22024200370300200341d8006a22014200370300200341c8006a41086a220b420037030020034200370348200341c0016a41b4c3cb004113108102200b200341c0016a41086a2204290000370300200320032900c001370348200341c0016a41dbc3cb00410510810220022004290000370300200120032900c001370300200341c8006a412010ff010c010b200341d9016a200341b0016a290300370000200341d1016a200341a8016a290300370000200341c9016a200341a0016a29030037000020032003290398013700c101200341013a00c001200341c0016a1086080b2005ad4220862006ad8421180240200c42ffffff3f83500d002008102e0b2003201837029c012003200a36029801200341c8006a41186a22024200370300200341d8006a22014200370300200341c8006a41086a220b420037030020034200370348200341c0016a41b4c3cb004113108102200b200341c0016a41086a2204290000370300200320032900c001370348200341c0016a41c7c3cb00410710810220022004290000370300200120032900c001370300200341c8006a20034198016a109a030240200641ffffff3f71450d00200a102e0b2003418d063b01c001200341c0016a10fe01200041186a41003a000020004200370308200020032800783600192000411c6a200341fb006a280000360000200042003703000c150b200341086a41186a200141196a290000370300200341086a41106a200141116a290000370300200341086a41086a200141096a29000037030020032001290001370308200341c0016a41286a200241286a280200360200200341c0016a41206a200241206a290200370300200341c0016a41186a200241186a290200370300200341c0016a41106a200241106a290200370300200341c0016a41086a200241086a290200370300200320022902003703c00120034198016a200341c0016a10c102200341286a41086a220220034198016a41096a290000370300200341286a41106a220120034198016a41116a290000370300200341286a41186a220b20034198016a41196a2900003703002003200329009901370328024020032d0098014101460d00200341f8006a41186a200b290300370300200341f8006a41106a2001290300370300200341f8006a41086a200229030037030020032003290328370378200341f8006a200341086a412010ec08450d08200341d8016a22024200370300200341d0016a22014200370300200341c0016a41086a220b4200370300200342003703c001200341c8006a41b4c3cb004113108102200b200341c8006a41086a220a290000370300200320032900483703c001200341c8006a41c7c3cb0041071081022002200a2900003703002001200329004837030020034198016a200341c0016a108803024020032802980122040d0020034100360230200342013703284109210641e0c3cb00210741012105410321020c0a0b2003200329029c01220c37022c2003200436022841012105200ca741ffffff3f7121094100210241e0c3cb0021074109210602400240200c422088a722080e020801000b410021022008210103402001410176220a20026a210b200b20022004200b4105746a200341f8006a412010ec084101481b21022001200a6b220141014b0d000b0b200420024105746a200341f8006a412010ec080d064100210541002101024020080e020806000b410021012008210b0340200b410176220620016a210a200a20012004200a4105746a200341086a412010ec084101481b2101200b20066b220b41014b0d000c060b0b410221020c080b20034198016a41186a200141196a29000037030020034198016a41106a200141116a29000037030020034198016a41086a200141096a29000037030020032001290001370398012002410e6a2f010021042002410d6a2d000021052002410c6a2d000021062002410a6a2f01002107200241096a2d00002108200241086a2d00002109200241046a2d0000210a20022802282101024020022d0000220b0d002002411a6a290100210c200241196a2d0000210b200241186a2d0000210d200241166a2f0100210e200241156a2d0000210f200241146a2d00002110200241126a2f01002111200241116a2d00002112200241106a2d00002113200241066a2f01002114200241056a2d00002115200241026a2f0100211620022d0001210220012001280200417f6a2217360200024020170d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22172017280200417f6a221736020020170d002001102e0b2003200c3701d8012003200b3a00d7012003200d3a00d6012003200e3b01d4012003200f3a00d301200320103a00d201200320113b01d001200320123a00cf01200320133a00ce01200320043b01cc01200320053a00cb01200320063a00ca01200320073b01c801200320083a00c701200320093a00c601200320143b01c401200320153a00c3012003200a3a00c201200320163b01c0010240200241ff01710d004103210b0c010b4110102c2202450d13200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1320014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220d3602004100210b200d0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a220d200d280200417f6a220d360200200d0d002002102e0b0240024002400240200b417f6a0e03000102010b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0240200a41ff01710d00200741107420084108747220097241017420044110742005410874722006724b0d020b4110102c2202450d15200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1520014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220b360200200b0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a220b200b280200417f6a220b360200200b0d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b410221020c010b200341d8016a22024200370300200341d0016a22014200370300200341c0016a41086a220b4200370300200342003703c001200341c8006a41b4c3cb004113108102200b200341c8006a41086a220a290000370300200320032900483703c001200341c8006a41c7c3cb0041071081022002200a29000037030020012003290048370300200341f8006a200341c0016a10880320032802782201410120011b210441002102024002400240200329027c420020011b220c422088a722010e020201000b4100210203402001410176220a20026a210b200b20022004200b4105746a20034198016a412010ec084101481b21022001200a6b220141014b0d000b0b200420024105746a20034198016a412010ec080d000240200c42ffffff3f83500d002004102e0b200341e0006a22024200370300200341d8006a22014200370300200341c8006a41086a220b420037030020034200370348200341c0016a41b4c3cb004113108102200b200341c0016a41086a220a290000370300200320032900c001370348200341c0016a41dbc3cb0041051081022002200a290000370300200120032900c0013703004120102c2202450d14200342203702c401200320023602c001200341c0016a20034198016a41201074200341c8006a412020032802c001220220032802c80110b201024020032802c401450d002002102e0b200341d9016a20034198016a41186a290300370000200341d1016a200341a8016a290300370000200341c9016a200341a0016a29030037000020032003290398013700c101200341013a00c001200341c0016a108608200041186a41003a000020004200370308200020032800283600192000411c6a2003412b6a280000360000200042003703000c150b0240200c42ffffff3f83500d002004102e0b410321020b200041e0c3cb0036002420004192023b002120004200370308200041286a4109360000200041206a20023a0000200041186a41003a0000200042013703000c130b2002410e6a2f010021042002410d6a2d000021052002410c6a2d000021062002410a6a2f01002107200241096a2d00002108200241086a2d00002109200241046a2d0000210a20022802282101024020022d0000220b0d002002411a6a290100210c200241196a2d0000210b200241186a2d0000210d200241166a2f0100210e200241156a2d0000210f200241146a2d00002110200241126a2f01002111200241116a2d00002112200241106a2d00002113200241066a2f01002114200241056a2d00002115200241026a2f0100211620022d0001210220012001280200417f6a2217360200024020170d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22172017280200417f6a221736020020170d002001102e0b2003200c3701d8012003200b3a00d7012003200d3a00d6012003200e3b01d4012003200f3a00d301200320103a00d201200320113b01d001200320123a00cf01200320133a00ce01200320043b01cc01200320053a00cb01200320063a00ca01200320073b01c801200320083a00c701200320093a00c601200320143b01c401200320153a00c3012003200a3a00c201200320163b01c0010240200241ff01710d004103210b0c010b4110102c2202450d12200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1220014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220d3602004100210b200d0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a220d200d280200417f6a220d360200200d0d002002102e0b0240024002400240200b417f6a0e03000102010b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b0240200a41ff01710d00200741107420084108747220097241017420044110742005410874722006724b0d020b4110102c2202450d14200241f8f7c60036020c2002410136020820024281808080103702004110102c2201450d1420014190f8c60036020c20014101360208200142818080801037020020022002280200417f6a220b360200200b0d002002280208200228020c2802001103000240200228020c280204450d002002280208102e0b200241046a220b200b280200417f6a220b360200200b0d002002102e0b20012001280200417f6a2202360200024020020d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22022002280200417f6a220236020020020d002001102e0b20004200370308200041206a41023a0000200041186a41003a00004201210c0c010b4200210c200341c8006a41186a22024200370300200341d8006a22014200370300200341c8006a41086a220b420037030020034200370348200341c0016a41b4c3cb004113108102200b200341c0016a41086a220a290000370300200320032900c001370348200341c0016a41dbc3cb0041051081022002200a290000370300200120032900c001370300200341c8006a412010ff01200341003a00c001200341c0016a108608200041186a41003a000020004200370308200020032800c0013600192000411c6a200341c3016a2800003600000b2000200c3703000c120b200b20061045000b200220051046000b200420014105746a200341086a412010ec080d0141cec3cb002107410d21060b02402009450d002004102e0b410321020c020b20034198016a41186a2201200341086a41186a29030037030020034198016a41106a220b200341086a41106a29030037030020034198016a41086a220a200341086a41086a2903003703002003200329030837039801200820024d0d02200420024105746a2202200329039801370000200241186a2001290300370000200241106a200b290300370000200241086a200a2903003700002004200810fc02200341c8006a41186a22014200370300200341c8006a41106a22024200370300200341c8006a41086a220b420037030020034200370348200341c0016a41b4c3cb004113108102200b200341c0016a41086a220a290000370300200320032900c001370348200341c0016a41c7c3cb0041071081022001200a290000370300200220032900c001370300200341c8006a200341286a109a03200341c0016a41186a200341f8006a41186a290300370300200341c0016a41106a200341f8006a41106a290300370300200a200341f8006a41086a290300370300200320032903783703c00141012105200341c0016a4101200420081084082001420037030020024200370300200b420037030020034200370348200341c0016a41b4c3cb004113108102200b200a290000370300200320032900c001370348200341c0016a41dbc3cb0041051081022001200a290000370300200220032900c001370300200341c0016a200341c8006a412010f40220032d00c001210a2001200341c0016a41196a2900003703002002200341c0016a41116a290000370300200b200341c0016a41096a290000370300200320032900c10137034802400240200a4101460d0041002105200341003a0098010c010b20034198016a41096a200341d0006a29030037000020034198016a41116a200341d8006a29030037000020034198016a41196a200341e0006a290300370000200341013a00980120032003290348370099010b200341d9016a20034190016a290300370000200341d1016a20034188016a290300370000200341c9016a20034180016a290300370000200320032903783700c101200341013a00c00102402005450d0020034198016a410172200341c0016a410172412010ec080d00200341e0006a4200370300200341d8006a4200370300200341c8006a41086a2201420037030020034200370348200341c0016a41b4c3cb0041131081022001200341c0016a41086a220b290000370300200320032900c001370348200341c0016a41dbc3cb004105108102200241086a200b290000370000200220032900c0013700004120102c2202450d0d200342203702c401200320023602c001200341c0016a200341086a41201074200341c8006a412020032802c001220220032802c80110b201024020032802c401450d002002102e0b200341d9016a200341206a290300370000200341d1016a200341186a290300370000200341c9016a200341106a290300370000200320032903083700c101200341013a00c001200341c0016a1086080b2009450d002004102e0b2003418d083b01c001200341c0016a10fe01200041186a41003a000020004200370308200020032800683600192000411c6a200341eb006a280000360000200042003703000c0c0b20002007360024200020053a0022200041123a002120004200370308200041286a2006360000200041206a20023a0000200041186a41003a0000200042013703000c0b0b2002200841fcc3cb00103c000b200420014105746a200341f8006a412010ec080d0341cec3cb002107410d21060b2009450d002004102e0b410321020b20002007360024200020053a0022200041123a002120004200370308200041286a2006360000200041206a20023a0000200041186a41003a0000200042013703000c060b200341c0016a41186a2201200341f8006a41186a290300370300200341c0016a41106a220b200341f8006a41106a290300370300200341c0016a41086a220a200341f8006a41086a290300370300200320032903783703c001200820024d0d01200420024105746a220220032903c001370000200241186a2001290300370000200241106a200b290300370000200241086a200a2903003700002004200810fc0220014200370300200b4200370300200a4200370300200342003703c00120034198016a41b4c3cb004113108102200a20034198016a41086a220229000037030020032003290098013703c00120034198016a41c7c3cb00410710810220012002290000370300200b200329009801370300200341c0016a200341e8006a109a032001200341086a41186a290300370300200b200341086a41106a290300370300200a200341086a41086a290300370300200320032903083703c001200341c0016a41012004200810840820034198016a41186a220b420037030020034198016a41106a220a4200370300200242003703002003420037039801200341c8006a41b4c3cb0041131081022002200341c8006a41086a22012900003703002003200329004837039801200341c8006a41dbc3cb004105108102200b2001290000370300200a2003290048370300200341c0016a20034198016a412010f40220032d00c0012102200341c8006a41186a200341d9016a290000370300200341c8006a41106a200341d1016a2900003703002001200341c9016a290000370300200320032900c101370348024020024101470d00200341286a41186a200341c8006a41186a220a290300220c370300200341286a41106a200341c8006a41106a22052903002218370300200341286a41086a200341c8006a41086a2206290300221937030020032003290348221a37032820034198016a41186a200c37030020034198016a41106a201837030020034198016a41086a20193703002003201a3703980141002102024002400240024020080e020201000b4100210203402008410176220b20026a210120012002200420014105746a20034198016a412010ec084101481b21022008200b6b220841014b0d000b0b200420024105746a20034198016a412010ec08450d010b200a4200370300200542003703002006420037030020034200370348200341c0016a41b4c3cb0041131081022006200341c0016a41086a2202290000370300200320032900c001370348200341c0016a41dbc3cb004105108102200a2002290000370300200520032900c001370300200341c8006a412010ff010c010b200341d9016a200341b0016a290300370000200341d1016a200341a8016a290300370000200341c9016a200341a0016a29030037000020032003290398013700c101200341013a00c001200341c0016a1086080b2003418d043b01c001200341c0016a10fe012009450d002004102e0b2000420037030820002003280001360019200041186a41003a00002000411c6a200341046a280000360000200042003703000c040b2002200841ecc3cb00103c000b200341c0016a41186a20034198016a41186a290300370300200341c0016a41106a20034198016a41106a290300370300200341c0016a41086a20034198016a41086a29030037030020032003290398013703c0014100210b200341c0016a21010b0240024020062005470d00200541016a22022005490d042005410174220a2002200a20024b1b22024104200241044b1b220241ffffff3f71200246210a200241057421020240024020050d00200341003602780c010b20034180016a4101360200200320043602782003200541057436027c0b200341c8006a2002200a200341f8006a107d200341d0006a280200210220032802484101460d012003200328024c22043602282003200241057636022c0b2004200b4105746a220241206a20022006200b6b41057410ea081a20022001290000370000200241186a200141186a290000370000200241106a200141106a290000370000200241086a200141086a2900003700002003200641016a2201360230200341c8006a41186a220b4200370300200341c8006a41106a220a4200370300200341c8006a41086a2204420037030020034200370348200341c0016a41b4c3cb0041131081022004200341c0016a41086a2202290000370300200320032900c001370348200341c0016a41c7c3cb004107108102200b2002290000370300200a20032900c001370300200341c8006a200341286a109a03200341c0016a41186a20034198016a41186a290300370300200341c0016a41106a20034198016a41106a290300370300200220034198016a41086a29030037030020032003290398013703c00141d4e2cc0041002003280228220220011084082003410d3b01c001200341c0016a10fe010240200328022c41ffffff3f71450d002002102e0b200041186a41003a000020004200370308200020032800083600192000411c6a2003410b6a280000360000200042003703000c020b2002450d020b1036000b200341c0026a24000f0b1038000be33a0b037f017e037f017e047f017e017f037e027f017e0c7f230041d0096b22022400024002400240200128020422034108490d002001280200220429000021052001200341786a22063602042001200441086a22073602002006450d0120072d000021062001200341776a22083602042001200741016a36020002400240024002400240024020060e020001070b20084108490d062007290001210920012003416f6a220a3602042001200741096a36020041002107200241003a00a80820032106200a210b0240024002400340200a2007460d0120024188086a20076a200420076a220841116a2d00003a000020012006416e6a3602042001200841126a3602002002200741016a22083a00a8082006417f6a2106200b417f6a210b2008210720084120470d000b20024188076a41086a220720024188086a41086a29030037030020024188076a41106a220a20024188086a41106a29030037030020024188076a41186a220c20024188086a41186a290300370300200220022903880837038807200841ff0171411f4d0d09200320086b416f6a210d200241e8036a41086a2007290300370300200241e8036a41106a200a290300370300200241e8036a41186a200c2903003703002002200229038807220e3703c8052002200e3703e80341002107200241003a00a808200420086a210f2006416e6a210a0340200d2007460d0220024188086a20076a200f20076a220c41116a2d00003a00002001200a3602042001200c41126a3602002002200741016a220c3a00a808200a417f6a210a2003417f6a2103200c2107200c4120470d000b20024188076a41086a220720024188086a41086a29030037030020024188076a41106a220320024188086a41106a29030037030020024188076a41186a220a20024188086a41186a290300370300200220022903880837038807200c41ff0171411f4d0d09200241c8056a41086a2007290300370300200241c8056a41106a2003290300370300200241c8056a41186a200a29030037030020022002290388073703c8052006200c6b2207416f6a4104490d092004200b411f200b411f491b6a20086a41126a280000210820012007416b6a360204200241e8066a41086a2207200241c8056a41086a290300370300200241e8066a41106a2203200241c8056a41106a290300370300200241e8066a41186a2204200241c8056a41186a2903003703002001200f200c6a41156a360200200220022903c8053703e80620024188086a200110a70120022d0088084101460d0920024188076a41386a200241c1086a290000220e37030020024188076a41306a200241b9086a290000221037030020024188076a41286a200241b1086a290000221137030020024188076a41206a200241a9086a290000221237030020024188066a41086a220620024191086a29000037030020024188066a41106a220b20024199086a29000037030020024188066a41186a220a200241a1086a29000037030020024188066a41206a220c201237030020024188066a41286a220d201137030020024188066a41306a220f201037030020024188066a41386a2213200e370300200220022900890837038806200241c8066a41186a22142004290300370300200241c8066a41106a22042003290300370300200241c8066a41086a22032007290300370300200220022903e8063703c806200241a8056a41186a22072014290300370300200241a8056a41106a22142004290300370300200241a8056a41086a22042003290300370300200220022903c8063703a805200241e8046a41386a22032013290300370300200241e8046a41306a2213200f290300370300200241e8046a41286a220f200d290300370300200241e8046a41206a220d200c290300370300200241e8046a41186a220c200a290300370300200241e8046a41106a220a200b290300370300200241e8046a41086a220b200629030037030020022002290388063703e804200241c8046a41186a2007290300370300200241c8046a41106a2014290300370300200241c8046a41086a2004290300370300200220022903a8053703c80420024188046a41386a200329030037030020024188046a41306a201329030037030020024188046a41286a200f29030037030020024188046a41206a200d29030037030020024188046a41186a200c29030037030020024188046a41106a200a29030037030020024188046a41086a200b290300370300200220022903e8043703880441002107200241003a00a80820012802042106417f2103034020062007460d0320024188086a20076a200128020022042d00003a00002001200620036a3602042001200441016a3602002002200741016a22043a00a8082003417f6a21032004210720044120470d000b20024188076a41086a220720024188086a41086a29030037030020024188076a41106a220320024188086a41106a29030037030020024188076a41186a220b20024188086a41186a290300370300200220022903880837038807200441ff0171411f4d0d09200241c8056a41086a2007290300370300200241c8056a41106a2003290300370300200241c8056a41186a200b29030037030020022002290388073703c805200620046b22074104490d0920012802002204280000210320012007417c6a3602042001200441046a360200200241e8066a41086a2207200241c8056a41086a290300370300200241e8066a41106a2204200241c8056a41106a290300370300200241e8066a41186a2206200241c8056a41186a290300370300200220022903c8053703e80620024188086a200110a70120022d0088084101460d0920024188076a41386a200241c1086a290000220e37030020024188076a41306a200241b9086a290000221037030020024188076a41286a200241b1086a290000221137030020024188076a41206a200241a9086a290000221237030020024188076a41186a200241a1086a290000221537030020024188066a41086a220120024191086a29000037030020024188066a41106a220b20024199086a29000037030020024188066a41186a220a201537030020024188066a41206a220c201237030020024188066a41286a220d201137030020024188066a41306a220f201037030020024188066a41386a2213200e370300200220022900890837038806200241c8066a41186a22142006290300370300200241c8066a41106a22062004290300370300200241c8066a41086a22042007290300370300200220022903e8063703c806200241a8056a41186a22072014290300370300200241a8056a41106a22142006290300370300200241a8056a41086a22062004290300370300200220022903c8063703a805200241e8046a41386a22042013290300370300200241e8046a41306a2213200f290300370300200241e8046a41286a220f200d290300370300200241e8046a41206a220d200c290300370300200241e8046a41186a220c200a290300370300200241e8046a41106a220a200b290300370300200241e8046a41086a220b200129030037030020022002290388063703e804200241c8026a41186a2007290300370300200241c8026a41106a2014290300370300200241c8026a41086a2006290300370300200220022903a8053703c80220024188026a41386a200429030037030020024188026a41306a201329030037030020024188026a41286a200f29030037030020024188026a41206a200d29030037030020024188026a41186a200c29030037030020024188026a41106a200a29030037030020024188026a41086a200b290300370300200220022903e80437038802200241c8036a41186a2201200241e8036a41186a290300370300200241c8036a41106a2207200241e8036a41106a290300370300200241c8036a41086a2204200241e8036a41086a290300370300200220022903e8033703c803200241a8036a41186a200241c8046a41186a290300370300200241a8036a41106a200241c8046a41106a290300370300200241a8036a41086a200241c8046a41086a290300370300200220022903c8043703a803200241e8026a41386a20024188046a41386a290300370300200241e8026a41306a20024188046a41306a290300370300200241e8026a41286a20024188046a41286a290300370300200241e8026a41206a20024188046a41206a290300370300200241e8026a41186a20024188046a41186a290300370300200241e8026a41106a20024188046a41106a290300370300200241e8026a41086a20024188046a41086a29030037030020022002290388043703e802200241e8016a41186a2001290300370300200241e8016a41106a2007290300370300200241e8016a41086a2004290300370300200220022903c8033703e8014200210e0c040b200741ff0171450d08200241003a00a8080c080b200741ff0171450d07200241003a00a8080c070b200741ff0171450d06200241003a00a8080c060b20084108490d052007290001210920012003416f6a220a3602042001200741096a36020041002107200241003a00a80820032106200a210b0340200a2007460d0220024188086a20076a200420076a220841116a2d00003a000020012006416e6a3602042001200841126a3602002002200741016a22083a00a8082006417f6a2106200b417f6a210b2008210720084120470d000b20024188076a41086a220720024188086a41086a29030037030020024188076a41106a220a20024188086a41106a29030037030020024188076a41186a220c20024188086a41186a290300370300200220022903880837038807200841ff0171411f4d0d05200320086b416f6a210d200241e8036a41086a2007290300370300200241e8036a41106a200a290300370300200241e8036a41186a200c2903003703002002200229038807220e3703c8052002200e3703e80341002107200241003a00a808200420086a210f2006416e6a210a0340200d2007460d0320024188086a20076a200f20076a220c41116a2d00003a00002001200a3602042001200c41126a3602002002200741016a220c3a00a808200a417f6a210a2003417f6a2103200c2107200c4120470d000b20024188076a41086a220720024188086a41086a29030037030020024188076a41106a220320024188086a41106a29030037030020024188076a41186a220a20024188086a41186a290300370300200220022903880837038807200c41ff0171411f4d0d05200241c8056a41086a2007290300370300200241c8056a41106a2003290300370300200241c8056a41186a200a29030037030020022002290388073703c8052006200c6b2207416f6a4104490d052004200b411f200b411f491b6a20086a41126a280000210820012007416b6a360204200241e8066a41086a2207200241c8056a41086a290300370300200241e8066a41106a2203200241c8056a41106a290300370300200241e8066a41186a2204200241c8056a41186a2903003703002001200f200c6a41156a360200200220022903c8053703e80620024188086a200110a70120022d0088084101460d0520024188076a41386a200241c1086a290000220e37030020024188076a41306a200241b9086a290000221037030020024188076a41286a200241b1086a290000221137030020024188076a41206a200241a9086a290000221237030020024188066a41086a220620024191086a29000037030020024188066a41106a220b20024199086a29000037030020024188066a41186a220a200241a1086a29000037030020024188066a41206a220c201237030020024188066a41286a220d201137030020024188066a41306a220f201037030020024188066a41386a2213200e370300200220022900890837038806200241c8066a41186a22142004290300370300200241c8066a41106a22042003290300370300200241c8066a41086a22032007290300370300200220022903e8063703c806200241a8056a41186a22072014290300370300200241a8056a41106a22142004290300370300200241a8056a41086a22042003290300370300200220022903c8063703a805200241e8046a41386a22032013290300370300200241e8046a41306a2213200f290300370300200241e8046a41286a220f200d290300370300200241e8046a41206a220d200c290300370300200241e8046a41186a220c200a290300370300200241e8046a41106a220a200b290300370300200241e8046a41086a220b200629030037030020022002290388063703e804200241c8046a41186a2007290300370300200241c8046a41106a2014290300370300200241c8046a41086a2004290300370300200220022903a8053703c80420024188046a41386a200329030037030020024188046a41306a201329030037030020024188046a41286a200f29030037030020024188046a41206a200d29030037030020024188046a41186a200c29030037030020024188046a41106a200a29030037030020024188046a41086a200b290300370300200220022903e8043703880441002107200241003a00a80820012802042106417f2103034020062007460d0420024188086a20076a200128020022042d00003a00002001200620036a3602042001200441016a3602002002200741016a22043a00a8082003417f6a21032004210720044120470d000b20024188076a41086a220720024188086a41086a29030037030020024188076a41106a220320024188086a41106a29030037030020024188076a41186a220b20024188086a41186a290300370300200220022903880837038807200441ff0171411f4d0d05200241c8056a41086a2007290300370300200241c8056a41106a2003290300370300200241c8056a41186a200b29030037030020022002290388073703c805200620046b22074104490d0520012802002204280000210320012007417c6a3602042001200441046a360200200241e8066a41086a2207200241c8056a41086a290300370300200241e8066a41106a2204200241c8056a41106a290300370300200241e8066a41186a2206200241c8056a41186a290300370300200220022903c8053703e80620024188086a200110a70120022d0088084101460d0520024188076a41386a200241c1086a290000220e37030020024188076a41306a200241b9086a290000221037030020024188076a41286a200241b1086a290000221137030020024188076a41206a200241a9086a290000221237030020024188076a41186a200241a1086a290000221537030020024188066a41086a220120024191086a29000037030020024188066a41106a220b20024199086a29000037030020024188066a41186a220a201537030020024188066a41206a220c201237030020024188066a41286a220d201137030020024188066a41306a220f201037030020024188066a41386a2213200e370300200220022900890837038806200241c8066a41186a22142006290300370300200241c8066a41106a22062004290300370300200241c8066a41086a22042007290300370300200220022903e8063703c806200241a8056a41186a22072014290300370300200241a8056a41106a22142006290300370300200241a8056a41086a22062004290300370300200220022903c8063703a805200241e8046a41386a22042013290300370300200241e8046a41306a2213200f290300370300200241e8046a41286a220f200d290300370300200241e8046a41206a220d200c290300370300200241e8046a41186a220c200a290300370300200241e8046a41106a220a200b290300370300200241e8046a41086a220b200129030037030020022002290388063703e804200241c8026a41186a2007290300370300200241c8026a41106a2014290300370300200241c8026a41086a2006290300370300200220022903a8053703c80220024188026a41386a200429030037030020024188026a41306a201329030037030020024188026a41286a200f29030037030020024188026a41206a200d29030037030020024188026a41186a200c29030037030020024188026a41106a200a29030037030020024188026a41086a200b290300370300200220022903e80437038802200241c8036a41186a2201200241e8036a41186a290300370300200241c8036a41106a2207200241e8036a41106a290300370300200241c8036a41086a2204200241e8036a41086a290300370300200220022903e8033703c803200241a8036a41186a200241c8046a41186a290300370300200241a8036a41106a200241c8046a41106a290300370300200241a8036a41086a200241c8046a41086a290300370300200220022903c8043703a803200241e8026a41386a20024188046a41386a290300370300200241e8026a41306a20024188046a41306a290300370300200241e8026a41286a20024188046a41286a290300370300200241e8026a41206a20024188046a41206a290300370300200241e8026a41186a20024188046a41186a290300370300200241e8026a41106a20024188046a41106a290300370300200241e8026a41086a20024188046a41086a29030037030020022002290388043703e802200241e8016a41186a2001290300370300200241e8016a41106a2007290300370300200241e8016a41086a2004290300370300200220022903c8033703e8014201210e0b200241c8016a41186a2201200241a8036a41186a290300370300200241c8016a41106a2207200241a8036a41106a290300370300200241c8016a41086a2204200241a8036a41086a29030037030020024188016a41086a2206200241e8026a41086a29030037030020024188016a41106a220b200241e8026a41106a29030037030020024188016a41186a220a200241e8026a41186a29030037030020024188016a41206a220c200241e8026a41206a29030037030020024188016a41286a220d200241e8026a41286a29030037030020024188016a41306a220f200241e8026a41306a29030037030020024188016a41386a2213200241e8026a41386a290300370300200220022903a8033703c801200220022903e80237038801200241e8006a41186a2214200241c8026a41186a290300370300200241e8006a41106a2216200241c8026a41106a290300370300200241e8006a41086a2217200241c8026a41086a290300370300200241286a41386a221820024188026a41386a290300370300200241286a41306a221920024188026a41306a290300370300200241286a41286a221a20024188026a41286a290300370300200241286a41206a221b20024188026a41206a290300370300200241286a41186a221c20024188026a41186a290300370300200241286a41106a221d20024188026a41106a290300370300200241286a41086a221e20024188026a41086a290300370300200220022903c8023703682002200229038802370328200241086a41186a221f200241e8016a41186a290300370300200241086a41106a2220200241e8016a41106a290300370300200241086a41086a2221200241e8016a41086a290300370300200220022903e801370308200041186a2008360200200020093703102000200e37030820002005370300200020022903c80137021c200041246a20042903003702002000412c6a2007290300370200200041346a2001290300370200200020022903880137023c200041c4006a2006290300370200200041cc006a200b290300370200200041d4006a200a290300370200200041dc006a200c290300370200200041e4006a200d290300370200200041ec006a200f290300370200200041f4006a20132903003702002000200336027c20004198016a201429030037020020004190016a201629030037020020004188016a201729030037020020004180016a2002290368370200200041d8016a2018290300370200200041d0016a2019290300370200200041c8016a201a290300370200200041c0016a201b290300370200200041b8016a201c290300370200200041b0016a201d290300370200200041a8016a201e290300370200200041a0016a2002290328370200200041f8016a201f290300370300200041f0016a2020290300370300200041e8016a2021290300370300200041e0016a20022903083703000c050b200741ff0171450d03200241003a00a8080c030b200741ff0171450d02200241003a00a8080c020b200741ff0171450d01200241003a00a8080c010b200042023703080c010b200042023703080b200241d0096a24000bde17020b7f057e23004190076b22022400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a36020020050e06010203040506070b200041073a00000c1a0b200241086a200110ab0102402002280208450d0020024100360280040c190b20024180046a2001200228020c1092012002280280042205450d18200228028404210420012802042206450d0620024188046a2802002107200128020022032d0000210820012006417f6a22063602042001200341016a360200410021030240024020080e020100080b20024180046a200110930120022d0080044101460d07200241e8016a20024199046a290000370300200241e0016a20024191046a290000370300200241d8016a20024189046a29000037030020022002290081043703d00120012802042106410121030b200241d0006a41186a2208200241d0016a41186a290300370300200241d0006a41106a2209200241d0016a41106a290300370300200241d0006a41086a220a200241d0016a41086a290300370300200220022903d001370350024020064104490d002001280200220b280000210c20012006417c6a3602042001200b41046a360200200241b0016a41086a200a290300220d370300200241b0016a41106a2009290300220e370300200241b0016a41186a2008290300220f3703002002200229035022103703b001200020033a0001200041013a0000200041026a20103700002000410a6a200d370000200041126a200e3700002000411a6a200f370000200041306a200c3602002000412c6a2007360100200041286a2004360100200041246a2005360100200041226a20022f0190013b01000c1a0b200041073a00000c070b20024180046a20011098012002280280042105200241d0016a20024180046a41047241ac0210e9081a024002402005411c460d0020024180046a200241d0016a41ac0210e9081a41b002102c22040d010c180b200041073a00000c190b20042005360200200441046a20024180046a41ac0210e9081a200241106a200110ab01024020022802100d0020022802142101200041023a0000200020022f00b0013b0001200041086a2001360200200041046a20043602002000410c6a2002290250370200200041036a200241b0016a41026a2d00003a0000200041146a200241d0006a41086a2902003702002000411c6a200241e0006a290200370200200041246a200241e8006a2902003702002000412c6a200241f0006a290200370200200041346a200241f8006a2802003602000c190b200041073a00002004108b022004102e0c180b200241206a200110ab0120022802200d072002280224210620024180046a20011098012002280280042105200241d0016a20024180046a41047241ac0210e9081a2005411c460d0620024180046a200241d0016a41ac0210e9081a41b002102c2204450d1520042005360200200441046a20024180046a41ac0210e9081a200241186a200110ab01024020022802180d00200228021c2101200041033a0000200020022f00b0013b00012000410c6a2001360200200041086a2004360200200041046a2006360200200041106a2002290350370300200041036a200241b2016a2d00003a0000200041186a200241d0006a41086a290300370300200041206a200241d0006a41106a290300370300200041286a200241d0006a41186a290300370300200041306a200241d0006a41206a2903003703000c180b200041073a00002004108b022004102e0c170b41002105200241003a00a0042003417e6a21030240034020062005460d0120024180046a20056a200420056a220841016a2d00003a0000200120033602042001200841026a3602002002200541016a22083a00a0042003417f6a21032008210520084120460d100c000b0b200541ff0171450d0f200241003a00a0040c0f0b41002105200241003a00a0042003417e6a21030240034020062005460d0120024180046a20056a200420056a220841016a2d00003a0000200120033602042001200841026a3602002002200541016a22083a00a0042003417f6a21032008210520084120460d0a0c000b0b200541ff0171450d09200241003a00a0040c090b41002105200241003a00a0042003417e6a21030240034020062005460d0120024180046a20056a200420056a220841016a2d00003a0000200120033602042001200841026a3602002002200541016a22083a00a0042003417f6a21032008210520084120460d070c000b0b200541ff0171450d06200241003a00a0040c060b200041073a00000c130b200041073a00000b200441ffffff3f71450d112005102e0c110b200041073a00000c100b200041073a00000c0f0b200241d0016a41086a220120024180046a41086a290300370300200241d0016a41106a220520024180046a41106a290300370300200241d0016a41186a220420024180046a41186a29030037030020022002290380043703d001200841ff0171411f4d0d00200241b0016a41086a2001290300220d370300200241b0016a41106a2005290300220e370300200241b0016a41186a2004290300220f370300200220022903d00122103703b001200041063a000020002010370001200041096a200d370000200041116a200e370000200041196a200f370000200041216a200229009001370000200041296a20024190016a41086a290000370000200041306a2002419f016a2900003700000c0e0b200041073a00000c0d0b200241d0016a41086a220520024180046a41086a290300370300200241d0016a41106a220420024180046a41106a290300370300200241d0016a41186a220620024180046a41186a29030037030020022002290380043703d001200841ff0171411f4d0d00200241b0016a41086a2005290300370300200241b0016a41106a2004290300370300200241b0016a41186a2006290300370300200220022903d0013703b001200241c8006a200110ab0120022802480d01200228024c2105200241386a200110d9042002290338a70d022002290340210d200241306a200110ab0120022802300d032002280234210120024190016a41186a200241b0016a41186a290300220e37030020024190016a41106a200241b0016a41106a290300220f37030020024190016a41086a200241b0016a41086a2903002210370300200220022903b001221137039001200041053a000020002011370001200041096a2010370000200041116a200f370000200041196a200e370000200041216a20022f0080013b0000200041236a20024182016a2d00003a0000200041306a200d370300200041286a2001360200200041246a20053602000c0c0b200041073a00000c0b0b200041073a00000c0a0b200041073a00000c090b200041073a00000c080b200241d0016a41086a220520024180046a41086a290300370300200241d0016a41106a220420024180046a41106a290300370300200241d0016a41186a220620024180046a41186a29030037030020022002290380043703d001200841ff0171411f4d0d00200241b0016a41086a2005290300370300200241b0016a41106a2004290300370300200241b0016a41186a2006290300370300200220022903d0013703b001200241286a200110ab0120022802280d0120012802042205450d04200228022c2103200128020022042d0000210620012005417f6a3602042001200441016a3602004100210120060e020302040b200041073a00000c060b200041073a00000c050b410121010b20024190016a41186a200241b0016a41186a290300220d37030020024190016a41106a200241b0016a41106a290300220e37030020024190016a41086a200241b0016a41086a290300220f370300200220022903b001221037039001200041043a000020002010370001200041096a200f370000200041116a200e370000200041196a200d370000200041246a2003360200200041216a20013a0000200041286a200229038001370300200041306a20024180016a41086a2903003703000c030b200041073a00000c020b1036000b200041073a00000b20024190076a24000bb20401057f23004180056b22022400024002400240024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a36020020050e03010203040b200041043b01000c080b2002200110ab0102402002280200450d00200241003602200c070b200241206a200120022802041097012002280220450d06200241da026a200241206a41086a280200360100200220022903203701d202200041013b0100200020022901d002370102200041086a200241d6026a2901003701000c070b024020064102490d0020042f0001210520012003417d6a3602042001200441036a360200200241d0026a200110980120022802d0022101200241206a200241d0026a41047241ac0210e9081a024002402001411c460d00200241d0026a200241206a41ac0210e9081a41b002102c22030d011036000b200041043b01000c080b20032001360200200341046a200241d0026a41ac0210e9081a200041046a2003360200200020053b0102200041023b01000c070b200041043b01000c060b200241086a200110ab012002280208450d01200241003602200c020b200041043b01000c040b200241206a2001200228020c10970120022802200d010b200041043b01000c020b200241da026a200241206a41086a280200360100200220022903203701d202200041033b0100200020022901d002370102200041086a200241d6026a2901003701000c010b200041043b01000b20024180056a24000bb54507047f017e017f027e047f077e107f230041d00d6b220224000240024002402001280200220328020422044108490d002003280200220529000021062003200441786a3602042003200541086a360200200128020022032802042204450d01200328020022052d0000210720032004417f6a3602042003200541016a3602000240024002400240024002400240024020070e020001090b2001280200220328020422044108490d082003280200220529000021082003200441786a3602042003200541086a36020041002104200241003a00a80a024002400240024002400340200128020022032802042205450d01200241880a6a20046a200328020022072d00003a000020032005417f6a3602042003200741016a3602002002200441016a22033a00a80a2003210420034120470d000b200241d00a6a41186a200241880a6a41186a2903002209370300200241c8096a41086a2203200241880a6a41086a290300370300200241c8096a41106a2204200241880a6a41106a290300370300200241c8096a41186a22052009370300200220022903880a3703c809200241e8036a41186a2005290300370300200241e8036a41106a2004290300370300200241e8036a41086a2003290300370300200220022903c8093703e80341002104200241003a00a80a0340200128020022032802042205450d02200241880a6a20046a200328020022072d00003a000020032005417f6a3602042003200741016a3602002002200441016a22033a00a80a2003210420034120470d000b200241d00a6a41186a200241880a6a41186a2903002209370300200241c8096a41086a2204200241880a6a41086a290300370300200241c8096a41106a2205200241880a6a41106a290300370300200241c8096a41186a22072009370300200220022903880a3703c80920012802002203280204220a4104490d0d2003280200220b280000210c2003200a417c6a3602042003200b41046a360200200241e8066a41086a2004290300370300200241e8066a41106a2005290300370300200241e8066a41186a2007290300370300200220022903c8093703e80641002104200241003a00c80a0340200128020022032802042205450d03200241880a6a20046a200328020022072d00003a000020032005417f6a3602042003200741016a3602002002200441016a22033a00c80a20032104200341c000470d000b200241d00a6a41086a2203200241880a6a41086a290300370300200241d00a6a41106a2204200241880a6a41106a290300370300200241d00a6a41186a2205200241880a6a41186a290300370300200241d00a6a41206a2207200241880a6a41206a290300370300200241d00a6a41286a220a200241880a6a41286a290300370300200241d00a6a41306a220b200241880a6a41306a290300370300200241d00a6a41386a220d200241880a6a41386a290300370300200220022903880a3703d00a200241c8096a41086a2003290300220e370300200241c8096a41106a20042903002209370300200241c8096a41186a2005290300220f370300200241c8096a41206a20072903002210370300200241c8096a41286a200a2903002211370300200241c8096a41306a200b2903002212370300200241c8096a41386a2203200d290300370300200220022903d00a22133703c80920024188076a41306a201237030020024188076a41286a201137030020024188076a41206a201037030020024188076a41186a200f37030020024188076a41106a200937030020024188076a41386a2003290300221437030020024188066a41306a2203201237030020024188066a41286a2204201137030020024188066a41206a2205201037030020024188066a41186a2207200f37030020024188066a41106a220a200937030020024188066a41086a220b200e37030020024188066a41386a220d20143703002002201337038806200241c8066a41186a2215200241e8066a41186a290300370300200241c8066a41106a2216200241e8066a41106a290300370300200241c8066a41086a2217200241e8066a41086a290300370300200220022903e8063703c806200241a8056a41186a22182015290300370300200241a8056a41106a22152016290300370300200241a8056a41086a22162017290300370300200220022903c8063703a805200241e8046a41386a2217200d290300370300200241e8046a41306a220d2003290300370300200241e8046a41286a22032004290300370300200241e8046a41206a22042005290300370300200241e8046a41186a22052007290300370300200241e8046a41106a2207200a290300370300200241e8046a41086a220a200b29030037030020022002290388063703e804200241c8046a41186a2018290300370300200241c8046a41106a2015290300370300200241c8046a41086a2016290300370300200220022903a8053703c80420024188046a41386a201729030037030020024188046a41306a200d29030037030020024188046a41286a200329030037030020024188046a41206a200429030037030020024188046a41186a200529030037030020024188046a41106a200729030037030020024188046a41086a200a290300370300200220022903e8043703880441002104200241003a00a80a0340200128020022032802042205450d04200241880a6a20046a200328020022072d00003a000020032005417f6a3602042003200741016a3602002002200441016a22033a00a80a2003210420034120470d000b200241d00a6a41186a200241880a6a41186a2903002209370300200241c8096a41086a2204200241880a6a41086a290300370300200241c8096a41106a2205200241880a6a41106a290300370300200241c8096a41186a22072009370300200220022903880a3703c80920012802002203280204220a4104490d0d2003280200220d280000210b2003200a417c6a3602042003200d41046a360200200241e8066a41086a2004290300370300200241e8066a41106a2005290300370300200241e8066a41186a2007290300370300200220022903c8093703e80641002104200241003a00c80a0340200128020022032802042205450d05200241880a6a20046a200328020022072d00003a000020032005417f6a3602042003200741016a3602002002200441016a22033a00c80a20032104200341c000470d000b200241d00a6a41086a2201200241880a6a41086a290300370300200241d00a6a41106a2203200241880a6a41106a290300370300200241d00a6a41186a2204200241880a6a41186a290300370300200241d00a6a41206a2205200241880a6a41206a290300370300200241d00a6a41286a2207200241880a6a41286a290300370300200241d00a6a41306a220a200241880a6a41306a290300370300200241d00a6a41386a220d200241880a6a41386a290300370300200220022903880a3703d00a200241c8096a41386a2215200d290300370300200241c8096a41306a200a2903002209370300200241c8096a41286a2007290300220f370300200241c8096a41206a20052903002210370300200241c8096a41186a20042903002211370300200241c8096a41106a20032903002212370300200241c8096a41086a2001290300220e370300200220022903d00a22133703c80920024188076a41306a2201200937030020024188076a41286a2203200f37030020024188076a41206a2204201037030020024188076a41186a2205201137030020024188076a41106a2207201237030020024188076a41086a220a200e37030020024188076a41386a220d2015290300370300200220133703880720024188066a41386a2215200d29030037030020024188066a41306a220d200129030037030020024188066a41286a2201200329030037030020024188066a41206a2203200429030037030020024188066a41186a2204200529030037030020024188066a41106a2205200729030037030020024188066a41086a2207200a290300370300200220022903880737038806200241c8066a41186a220a200241e8066a41186a290300370300200241c8066a41106a2216200241e8066a41106a290300370300200241c8066a41086a2217200241e8066a41086a290300370300200220022903e8063703c806200241a8056a41186a2218200a290300370300200241a8056a41106a220a2016290300370300200241a8056a41086a22162017290300370300200220022903c8063703a805200241e8046a41386a22172015290300370300200241e8046a41306a2215200d290300370300200241e8046a41286a220d2001290300370300200241e8046a41206a22012003290300370300200241e8046a41186a22032004290300370300200241e8046a41106a22042005290300370300200241e8046a41086a2205200729030037030020022002290388063703e804200241c8026a41186a2018290300370300200241c8026a41106a200a290300370300200241c8026a41086a2016290300370300200220022903a8053703c80220024188026a41386a201729030037030020024188026a41306a201529030037030020024188026a41286a200d29030037030020024188026a41206a200129030037030020024188026a41186a200329030037030020024188026a41106a200429030037030020024188026a41086a2005290300370300200220022903e80437038802200241c8036a41186a2201200241e8036a41186a290300370300200241c8036a41106a2203200241e8036a41106a290300370300200241c8036a41086a2204200241e8036a41086a290300370300200220022903e8033703c803200241a8036a41186a200241c8046a41186a290300370300200241a8036a41106a200241c8046a41106a290300370300200241a8036a41086a200241c8046a41086a290300370300200220022903c8043703a803200241e8026a41386a20024188046a41386a290300370300200241e8026a41306a20024188046a41306a290300370300200241e8026a41286a20024188046a41286a290300370300200241e8026a41206a20024188046a41206a290300370300200241e8026a41186a20024188046a41186a290300370300200241e8026a41106a20024188046a41106a290300370300200241e8026a41086a20024188046a41086a29030037030020022002290388043703e802200241e8016a41186a2001290300370300200241e8016a41106a2003290300370300200241e8016a41086a2004290300370300200220022903c8033703e801420021090c060b200441ff0171450d0c200241003a00a80a0c0c0b200441ff0171450d0b200241003a00a80a0c0b0b200441ff0171450d0a200241003a00c80a0c0a0b200441ff0171450d09200241003a00a80a0c090b200441ff0171450d08200241003a00c80a0c080b2001280200220328020422044108490d072003280200220529000021082003200441786a3602042003200541086a36020041002104200241003a00a80a0340200128020022032802042205450d02200241880a6a20046a200328020022072d00003a000020032005417f6a3602042003200741016a3602002002200441016a22033a00a80a2003210420034120470d000b200241d00a6a41186a200241880a6a41186a2903002209370300200241c8096a41086a2203200241880a6a41086a290300370300200241c8096a41106a2204200241880a6a41106a290300370300200241c8096a41186a22052009370300200220022903880a3703c809200241e8036a41186a2005290300370300200241e8036a41106a2004290300370300200241e8036a41086a2003290300370300200220022903c8093703e80341002104200241003a00a80a0340200128020022032802042205450d03200241880a6a20046a200328020022072d00003a000020032005417f6a3602042003200741016a3602002002200441016a22033a00a80a2003210420034120470d000b200241d00a6a41186a200241880a6a41186a2903002209370300200241c8096a41086a2204200241880a6a41086a290300370300200241c8096a41106a2205200241880a6a41106a290300370300200241c8096a41186a22072009370300200220022903880a3703c80920012802002203280204220a4104490d072003280200220b280000210c2003200a417c6a3602042003200b41046a360200200241e8066a41086a2004290300370300200241e8066a41106a2005290300370300200241e8066a41186a2007290300370300200220022903c8093703e80641002104200241003a00c80a0340200128020022032802042205450d04200241880a6a20046a200328020022072d00003a000020032005417f6a3602042003200741016a3602002002200441016a22033a00c80a20032104200341c000470d000b200241d00a6a41086a2203200241880a6a41086a290300370300200241d00a6a41106a2204200241880a6a41106a290300370300200241d00a6a41186a2205200241880a6a41186a290300370300200241d00a6a41206a2207200241880a6a41206a290300370300200241d00a6a41286a220a200241880a6a41286a290300370300200241d00a6a41306a220b200241880a6a41306a290300370300200241d00a6a41386a220d200241880a6a41386a290300370300200220022903880a3703d00a200241c8096a41086a2003290300220e370300200241c8096a41106a20042903002209370300200241c8096a41186a2005290300220f370300200241c8096a41206a20072903002210370300200241c8096a41286a200a2903002211370300200241c8096a41306a200b2903002212370300200241c8096a41386a2203200d290300370300200220022903d00a22133703c80920024188076a41306a201237030020024188076a41286a201137030020024188076a41206a201037030020024188076a41186a200f37030020024188076a41106a200937030020024188076a41386a2003290300221437030020024188066a41306a2203201237030020024188066a41286a2204201137030020024188066a41206a2205201037030020024188066a41186a2207200f37030020024188066a41106a220a200937030020024188066a41086a220b200e37030020024188066a41386a220d20143703002002201337038806200241c8066a41186a2215200241e8066a41186a290300370300200241c8066a41106a2216200241e8066a41106a290300370300200241c8066a41086a2217200241e8066a41086a290300370300200220022903e8063703c806200241a8056a41186a22182015290300370300200241a8056a41106a22152016290300370300200241a8056a41086a22162017290300370300200220022903c8063703a805200241e8046a41386a2217200d290300370300200241e8046a41306a220d2003290300370300200241e8046a41286a22032004290300370300200241e8046a41206a22042005290300370300200241e8046a41186a22052007290300370300200241e8046a41106a2207200a290300370300200241e8046a41086a220a200b29030037030020022002290388063703e804200241c8046a41186a2018290300370300200241c8046a41106a2015290300370300200241c8046a41086a2016290300370300200220022903a8053703c80420024188046a41386a201729030037030020024188046a41306a200d29030037030020024188046a41286a200329030037030020024188046a41206a200429030037030020024188046a41186a200529030037030020024188046a41106a200729030037030020024188046a41086a200a290300370300200220022903e8043703880441002104200241003a00a80a0340200128020022032802042205450d05200241880a6a20046a200328020022072d00003a000020032005417f6a3602042003200741016a3602002002200441016a22033a00a80a2003210420034120470d000b200241d00a6a41186a200241880a6a41186a2903002209370300200241c8096a41086a2204200241880a6a41086a290300370300200241c8096a41106a2205200241880a6a41106a290300370300200241c8096a41186a22072009370300200220022903880a3703c80920012802002203280204220a4104490d072003280200220d280000210b2003200a417c6a3602042003200d41046a360200200241e8066a41086a2004290300370300200241e8066a41106a2005290300370300200241e8066a41186a2007290300370300200220022903c8093703e80641002104200241003a00c80a0340200128020022032802042205450d06200241880a6a20046a200328020022072d00003a000020032005417f6a3602042003200741016a3602002002200441016a22033a00c80a20032104200341c000470d000b200241d00a6a41086a2201200241880a6a41086a290300370300200241d00a6a41106a2203200241880a6a41106a290300370300200241d00a6a41186a2204200241880a6a41186a290300370300200241d00a6a41206a2205200241880a6a41206a290300370300200241d00a6a41286a2207200241880a6a41286a290300370300200241d00a6a41306a220a200241880a6a41306a290300370300200241d00a6a41386a220d200241880a6a41386a290300370300200220022903880a3703d00a200241c8096a41386a2215200d290300370300200241c8096a41306a200a2903002209370300200241c8096a41286a2007290300220f370300200241c8096a41206a20052903002210370300200241c8096a41186a20042903002211370300200241c8096a41106a20032903002212370300200241c8096a41086a2001290300220e370300200220022903d00a22133703c80920024188076a41306a2201200937030020024188076a41286a2203200f37030020024188076a41206a2204201037030020024188076a41186a2205201137030020024188076a41106a2207201237030020024188076a41086a220a200e37030020024188076a41386a220d2015290300370300200220133703880720024188066a41386a2215200d29030037030020024188066a41306a220d200129030037030020024188066a41286a2201200329030037030020024188066a41206a2203200429030037030020024188066a41186a2204200529030037030020024188066a41106a2205200729030037030020024188066a41086a2207200a290300370300200220022903880737038806200241c8066a41186a220a200241e8066a41186a290300370300200241c8066a41106a2216200241e8066a41106a290300370300200241c8066a41086a2217200241e8066a41086a290300370300200220022903e8063703c806200241a8056a41186a2218200a290300370300200241a8056a41106a220a2016290300370300200241a8056a41086a22162017290300370300200220022903c8063703a805200241e8046a41386a22172015290300370300200241e8046a41306a2215200d290300370300200241e8046a41286a220d2001290300370300200241e8046a41206a22012003290300370300200241e8046a41186a22032004290300370300200241e8046a41106a22042005290300370300200241e8046a41086a2205200729030037030020022002290388063703e804200241c8026a41186a2018290300370300200241c8026a41106a200a290300370300200241c8026a41086a2016290300370300200220022903a8053703c80220024188026a41386a201729030037030020024188026a41306a201529030037030020024188026a41286a200d29030037030020024188026a41206a200129030037030020024188026a41186a200329030037030020024188026a41106a200429030037030020024188026a41086a2005290300370300200220022903e80437038802200241c8036a41186a2201200241e8036a41186a290300370300200241c8036a41106a2203200241e8036a41106a290300370300200241c8036a41086a2204200241e8036a41086a290300370300200220022903e8033703c803200241a8036a41186a200241c8046a41186a290300370300200241a8036a41106a200241c8046a41106a290300370300200241a8036a41086a200241c8046a41086a290300370300200220022903c8043703a803200241e8026a41386a20024188046a41386a290300370300200241e8026a41306a20024188046a41306a290300370300200241e8026a41286a20024188046a41286a290300370300200241e8026a41206a20024188046a41206a290300370300200241e8026a41186a20024188046a41186a290300370300200241e8026a41106a20024188046a41106a290300370300200241e8026a41086a20024188046a41086a29030037030020022002290388043703e802200241e8016a41186a2001290300370300200241e8016a41106a2003290300370300200241e8016a41086a2004290300370300200220022903c8033703e801420121090b200241c8016a41186a2201200241a8036a41186a290300370300200241c8016a41106a2203200241a8036a41106a290300370300200241c8016a41086a2204200241a8036a41086a29030037030020024188016a41086a2205200241e8026a41086a29030037030020024188016a41106a2207200241e8026a41106a29030037030020024188016a41186a220a200241e8026a41186a29030037030020024188016a41206a220d200241e8026a41206a29030037030020024188016a41286a2215200241e8026a41286a29030037030020024188016a41306a2216200241e8026a41306a29030037030020024188016a41386a2217200241e8026a41386a290300370300200220022903a8033703c801200220022903e80237038801200241e8006a41186a2218200241c8026a41186a290300370300200241e8006a41106a2219200241c8026a41106a290300370300200241e8006a41086a221a200241c8026a41086a290300370300200241286a41386a221b20024188026a41386a290300370300200241286a41306a221c20024188026a41306a290300370300200241286a41286a221d20024188026a41286a290300370300200241286a41206a221e20024188026a41206a290300370300200241286a41186a221f20024188026a41186a290300370300200241286a41106a222020024188026a41106a290300370300200241286a41086a222120024188026a41086a290300370300200220022903c8023703682002200229038802370328200241086a41186a2222200241e8016a41186a290300370300200241086a41106a2223200241e8016a41106a290300370300200241086a41086a2224200241e8016a41086a290300370300200220022903e801370308200041186a200c360200200020083703102000200937030820002006370300200020022903c80137021c200041246a20042903003702002000412c6a2003290300370200200041346a2001290300370200200020022903880137023c200041c4006a2005290300370200200041cc006a2007290300370200200041d4006a200a290300370200200041dc006a200d290300370200200041e4006a2015290300370200200041ec006a2016290300370200200041f4006a20172903003702002000200b36027c20004198016a201829030037020020004190016a201929030037020020004188016a201a29030037020020004180016a2002290368370200200041d8016a201b290300370200200041d0016a201c290300370200200041c8016a201d290300370200200041c0016a201e290300370200200041b8016a201f290300370200200041b0016a2020290300370200200041a8016a2021290300370200200041a0016a2002290328370200200041f8016a2022290300370300200041f0016a2023290300370300200041e8016a2024290300370300200041e0016a20022903083703000c070b200441ff0171450d05200241003a00a80a0c050b200441ff0171450d04200241003a00a80a0c040b200441ff0171450d03200241003a00c80a0c030b200441ff0171450d02200241003a00a80a0c020b200441ff0171450d01200241003a00c80a0c010b200042023703080c010b200042023703080b200241d00d6a24000bdc1704087f037e037f027e230041a0086b220224000240024002400240024002400240024002400240024002400240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020020060e06010203040506070b200041073a00000c0a0b20024190046a200110e40102402002280290042207450d0020022802940421080240200128020022032802042204450d0020024198046a2802002109200328020022052d0000210620032004417f6a3602042003200541016a3602004100210302400240024020060e020100030b41002104200241003a00b0040340200128020022032802042205450d0220024190046a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00b0042003210420034120470d000b200241e0016a41086a20024190046a41086a290300220a37030020024190016a41186a20024190046a41186a290300220b37030020024190016a41106a20024190046a41106a290300220c370300200241c0016a41186a200b370300200241c0016a41106a200c370300200241c0016a41086a200a37030020022002290390043703c001410121030b200241f0006a41186a2204200241c0016a41186a290300370300200241f0006a41106a2205200241c0016a41106a290300370300200241f0006a41086a2206200241c0016a41086a290300370300200220022903c00137037020012802002201280204220d4104490d092001280200220e280000210f2001200d417c6a3602042001200e41046a360200200241d0006a41086a2006290300220a370300200241d0006a41106a2005290300220b370300200241d0006a41186a2004290300220c370300200220022903702210370350200020033a0001200041013a0000200041026a20103700002000410a6a200a370000200041126a200b3700002000411a6a200c370000200041306a200f3602002000412c6a2009360100200041286a2008360100200041246a2007360100200041226a20022f014e3b01000c0c0b200441ff0171450d00200241003a00b0040b200041073a00000c080b200041073a00000c090b2001200128020441016a220336020402400240200320012802084b0d0020024190046a20011095012002280290042103200241e0016a20024190046a41047241ac0210e9081a2003411c460d0020024190046a200241e0016a41ac0210e9081a41b002102c22040d010c0b0b200041073a00000c090b20042003360200200441046a20024190046a41ac0210e9081a20012001280204417f6a360204200241086a200110ad012002280208450d07200041073a00002004108b022004102e0c080b200241186a200110ad0102400240024020022802180d00200228021c21052001200128020441016a2203360204200320012802084b0d0120024190046a20011095012002280290042103200241e0016a20024190046a41047241ac0210e9081a2003411c460d0120024190046a200241e0016a41ac0210e9081a41b002102c2204450d0b20042003360200200441046a20024190046a41ac0210e9081a20012001280204417f6a360204200241106a200110ad0120022802100d0220022802142101200041033a0000200020022f00c0013b00012000410c6a2001360200200041086a2004360200200041046a2005360200200041106a200229039001370300200041036a200241c2016a2d00003a0000200041186a20024190016a41086a290300370300200041206a20024190016a41106a290300370300200041286a20024190016a41186a290300370300200041306a20024190016a41206a2903003703000c0a0b200041073a00000c090b200041073a00000c080b200041073a00002004108b022004102e0c070b41002104200241003a00b004024002400240024002400340200128020022032802042205450d0120024190046a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00b0042003210420034120470d000b200241e0016a41186a20024190046a41186a290300220a37030020024190016a41086a20024190046a41086a29030037030020024190016a41106a20024190046a41106a29030037030020024190016a41186a200a370300200220022903900437039001200241206a200110ad0120022802200d01200128020022012802042203450d0420022802242106200128020022042d0000210520012003417f6a3602042001200441016a3602004100210120050e020302040b0240200441ff0171450d00200241003a00b0040b200041073a00000c0a0b200041073a00000c090b410121010b200241c0016a41186a20024190016a41186a290300220a370300200241c0016a41106a20024190016a41106a290300220b370300200241c0016a41086a20024190016a41086a290300220c370300200220022903900122103703c001200041043a000020002010370001200041096a200c370000200041116a200b370000200041196a200a370000200041246a2006360200200041216a20013a0000200041286a2002290370370300200041306a200241f0006a41086a2903003703000c070b200041073a00000c060b41002104200241003a00b00402400240024002400340200128020022032802042205450d0120024190046a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00b0042003210420034120470d000b200241e0016a41186a20024190046a41186a290300220a37030020024190016a41086a20024190046a41086a29030037030020024190016a41106a20024190046a41106a29030037030020024190016a41186a200a370300200220022903900437039001200241c0006a200110ad0120022802400d0120022802442103200241306a200110da042002290330a70d022002290338210a200241286a200110ad0120022802280d03200228022c2101200241c0016a41186a20024190016a41186a290300220b370300200241c0016a41106a20024190016a41106a290300220c370300200241c0016a41086a20024190016a41086a2903002210370300200220022903900122113703c001200041053a000020002011370001200041096a2010370000200041116a200c370000200041196a200b370000200041216a20022f00703b0000200041236a200241f2006a2d00003a0000200041306a200a370300200041286a2001360200200041246a20033602000c090b0240200441ff0171450d00200241003a00b0040b200041073a00000c080b200041073a00000c070b200041073a00000c060b200041073a00000c050b41002104200241003a00b00402400340200128020022032802042205450d0120024190046a20046a200328020022062d00003a000020032005417f6a3602042003200641016a3602002002200441016a22033a00b0042003210420034120470d000b200241e0016a41186a20024190046a41186a290300220a37030020024190016a41086a220120024190046a41086a29030037030020024190016a41106a220320024190046a41106a29030037030020024190016a41186a2204200a370300200220022903900437039001200041063a00002000200229039001370001200041096a2001290300370000200041116a2003290300370000200041196a2004290300370000200041216a20022900c001370000200041296a200241c0016a41086a290000370000200041306a200241cf016a2900003700000c050b0240200441ff0171450d00200241003a00b0040b200041073a00000c040b200041073a00000c030b200041073a00000b200841ffffff3f71450d012007102e0c010b200228020c2101200041023a0000200020022f00c0013b0001200041086a2001360200200041046a20043602002000410c6a200229029001370200200041036a200241c0016a41026a2d00003a0000200041146a20024190016a41086a2902003702002000411c6a200241a0016a290200370200200041246a200241a8016a2902003702002000412c6a200241b0016a290200370200200041346a200241b8016a2802003602000b200241a0086a24000f0b1036000beb0401057f23004180056b2202240002400240024002400240024002400240024002400240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020020060e03010203040b200041043b01000c090b2002200110ad0102402002280200450d00200241003602200c080b200241206a200120022802041094012002280220450d07200241da026a200241206a41086a280200360100200220022903203701d202200041013b0100200020022901d002370102200041086a200241d6026a2901003701000c080b024002402001280200220328020422044102490d00200328020022052f0000210620032004417e6a3602042003200541026a3602002001200128020441016a2203360204200320012802084b0d01200241d0026a200110950120022802d0022103200241206a200241d0026a41047241ac0210e9081a2003411c460d01200241d0026a200241206a41ac0210e9081a41b002102c2204450d0620042003360200200441046a200241d0026a41ac0210e9081a200041046a2004360200200020063b0102200041023b010020012001280204417f6a3602040c090b200041043b01000c080b200041043b01000c070b200241086a200110ad012002280208450d01200241003602200c020b200041043b01000c050b200241206a2001200228020c10940120022802200d020b200041043b01000c030b1036000b200241da026a200241206a41086a280200360100200220022903203701d202200041033b0100200020022901d002370102200041086a200241d6026a2901003701000c010b200041043b01000b20024180056a24000ba40e01127f230041b0026b2203240020012802002104200128020422052f01062106200341f0006a41386a2207200541086a2208200128020822094106746a220141386a290000370300200341f0006a41306a220a200141306a290000370300200341f0006a41286a220b200141286a290000370300200341f0006a41206a220c200141206a290000370300200341f0006a41186a220d200141186a290000370300200341f0006a41106a220e200141106a290000370300200341f0006a41086a220f200141086a2900003703002003200129000037037020012008200941016a22104106746a20062009417f736a220841067410ea081a200341b0016a41186a2211200541c8056a221220094105746a220141186a290000370300200341b0016a41106a2213200141106a290000370300200341b0016a41086a2214200141086a290000370300200320012900003703b0012001201220104105746a200841057410ea081a20052006417f6a22013b0106200341d0016a41386a2007290300370300200341d0016a41306a200a290300370300200341d0016a41286a200b290300370300200341d0016a41206a200c290300370300200341d0016a41186a200d290300370300200341d0016a41106a200e290300370300200341d0016a41086a200f29030037030020034198026a2014290300370300200341a0026a2013290300370300200341a8026a2011290300370300200320032903703703d001200320032903b00137039002200341106a200341d0016a41e00010e9081a200341d0016a200341106a41e00010e9081a0240200141ffff037141044b0d0002400240024020052802002206450d00200441016a21080240024020052f010422070d0020062f01060d01200341246a4101360200200342013702142003419cc3cb0036021020034104360274200341849dc7003602702003200341f0006a360220200341106a418c9dc7001044000b024020062007417f6a22074102746a41a8086a280200220a2f0106200141ffff03716a41016a410b4b0d00200341286a2005360200200341206a200a360200200320043602242003200436021c200320073602182003200636021420032008360210200341b0016a200341106a4101200910cf060c040b200341286a2005360200200341206a200a360200200320043602242003200436021c200320073602182003200636021420032008360210200341106a410110d006200320103602b8010c020b0240200141ffff0371200741027420066a41ac086a28020022012f01066a41016a410b4b0d00200341286a2001360200200341206a2005360200200320043602242003200436021c200320073602182003200636021420032008360210200341b0016a200341106a4100200910cf060c030b200341286a2001360200200341206a2005360200200320043602242003200436021c200320073602182003200636021420032008360210200341106a410110d1060b200320093602b8010b200320053602b401200320043602b0010b20032802b801210920032802b001210420032802b40122052802002201450d0020012f0106220741044b0d00200141066a2108200441016a21060240034020012802002210450d01200741ffff0371210b200641016a210a024002400240024020012f010422070d0020102f01060d01200341246a4101360200200342013702142003419cc3cb0036021020034104360274200341849dc7003602702003200341f0006a360220200341106a418c9dc7001044000b20102007417f6a220c4102746a41a8086a28020021072003200136028801200320063602840120032007360280012003200636027c2003200c360278200320103602742003200a360270024020072f010620082f01006a41016a410b4b0d00200341106a41186a200341f0006a41186a280200360200200341106a41106a200341f0006a41106a290300370300200341106a41086a200341f0006a41086a29030037030020032003290370370310200341086a200341106a10d206200328020c2101200328020821060c030b200341f0006a4105200b6b10d0060c010b2003200741027420106a41ac086a280200220c36028801200320063602840120032001360280012003200636027c20032007360278200320103602742003200a360270024020082f0100200c2f01066a41016a410b4b0d00200341106a41186a200341f0006a41186a280200360200200341106a41106a200341f0006a41106a290300370300200341106a41086a200341f0006a41086a290300370300200320032903703703102003200341106a10d20620032802042101200328020021060c020b200341f0006a4105200b6b10d1060b410021010b2001450d02200141066a210820012f0106220741044d0d000c020b0b200741ffff03710d00200241013a00000b2000200341d0016a41e00010e908220141e8006a2009360200200141e4006a200536020020012004360260200341b0026a24000bc50701167f230041e0006b22042400024002400240200141186a28020022052f01062206200141106a28020022072f0106220820021b2003490d00200841016a220920066a220a410c4f0d01200128020c210b2001280208210c2001280200210d2001280204220e2f0106210f2007200a3b0106200441386a2210200e41086a2211200c4106746a221241386a290000370300200441306a2213201241306a290000370300200441286a2214201241286a290000370300200441206a2215201241206a290000370300200441186a2216201241186a290000370300200441106a2217201241106a290000370300200441086a2218201241086a2900003703002004201229000037030020122011200c41016a22014106746a200f200c417f736a221141067410ea081a200741086a221920084106746a221241386a2010290300370000201241306a2013290300370000201241286a2014290300370000201241206a2015290300370000201241186a2016290300370000201241106a2017290300370000201241086a201829030037000020122004290300370000201920094106746a200541086a200641067410e9081a200441c0006a41186a2210200e41c8056a2213200c4105746a221241186a290000370300200441c0006a41106a2214201241106a290000370300200441c0006a41086a2215201241086a290000370300200420122900003703402012201320014105746a201141057410ea081a200741c8056a221120084105746a221241186a2010290300370000201241106a2014290300370000201241086a201529030037000020122004290340370000201120094105746a200541c8056a200641057410e9081a200e41a8086a221220014102746a200c410274220c20126a41086a200f2001417f736a41027441046a10ea081a02402001200f4f0d00200c200e6a41ac086a211203402012280200220c20013b0104200c200e360200201241046a2112200f200141016a2201470d000b0b200e200e2f0106417f6a3b01060240200d4102490d002006200a20096b470d03200720094102746a41a8086a200541a8086a200641016a41027410e9081a200a20084d0d00200641016a210c200720084102746a41ac086a21012009211203402001280200220e20123b0104200e2007360200200141046a2101201241016a2112200c417f6a220c0d000b0b2005102e200020073602042000200b36020020002009410020021b20036a360208200441e0006a24000f0b41f09fc7004191014184a1c7001039000b419c9dc700412a41c89dc7001039000b41f49bc7004128419c9cc7001039000be307040c7f017e017f0c7e0240024002400240200041186a2802002f0106220220016a2203410c4f0d00200041106a28020022042f010622052001490d012004200520016b22063b0106200041186a220428020020033b0106200428020041086a220720014106746a2007200241067410ea081a200428020041c8056a220720014105746a2007200241057410ea081a2005200641016a22076b22022001417f6a470d02200428020041086a200041106a220828020020074106746a41086a2002410674220910e9081a200428020041c8056a200828020020074105746a41c8056a2002410574220a10e9081a200041046a280200220b2000280208220c4106746a220241c0006a220d290000210e2008280200220f20064105746a220541e0056a2900002110200541c8056a2900002111200541d0056a2900002112200541d8056a2900002113200f20064106746a220641086a2900002114200641106a2900002115200641186a2900002116200641206a2900002117200641286a2900002118200641306a2900002119200641386a290000211a200d200641c0006a290000370000200241386a2206290000211b2006201a370000200241306a2206290000211a20062019370000200241286a2206290000211920062018370000200241206a2206290000211820062017370000200241186a2206290000211720062016370000200241106a2206290000211620062015370000200241086a2202290000211520022014370000200b200c4105746a220241d8056a2206290000211420062013370000200241d0056a2206290000211320062012370000200241c8056a2206290000211220062011370000200241e0056a2202290000211120022010370000200428020020096a220241c0006a200e370000200241386a201b370000200241306a201a370000200241286a2019370000200241206a2018370000200241186a2017370000200241106a2016370000200241086a20153700002004280200200a6a220241e0056a2011370000200241d8056a2014370000200241d0056a2013370000200241c8056a2012370000200028020c21020240024020002802140d002002450d010c050b2002450d04200828020021022004280200220641a8086a2200200141027422046a2000200320016b41027441046a10ea081a2000200220074102746a41a8086a200410e9081a200341016a21044100210103402000280200220220013b010420022006360200200041046a21002004200141016a2201470d000b0b0f0b41e49ec700413341989fc7001039000b41a89fc700412741d09fc7001039000b41f49bc7004128419c9cc7001039000b41e2a0cc00412841e09fc7001039000bb60806097f017e037f047e017f087e0240024002400240200041106a28020022022f0106220320016a2204410c4f0d00200041186a2802002f010622052001490d01200220043b0106200041186a2206280200200520016b22073b0106200041046a2802002208200028020822094106746a220241206a220a290000210b2006280200220c2001417f6a220d410574220e6a220541e0056a290000210f200541c8056a2900002110200541d0056a2900002111200541d8056a2900002112200c200d41067422136a220541286a2900002114200541306a2900002115200541386a2900002116200541c0006a2900002117200541086a2900002118200541106a2900002119200541186a290000211a200a200541206a290000370000200241186a2205290000211b2005201a370000200241106a2205290000211a20052019370000200241086a2205290000211920052018370000200241c0006a2205290000211820052017370000200241386a2205290000211720052016370000200241306a2205290000211620052015370000200241286a2202290000211520022014370000200820094105746a220241d8056a2205290000211420052012370000200241d0056a2205290000211220052011370000200241c8056a2205290000211120052010370000200241e0056a220229000021102002200f370000200041106a220528020020034106746a220241c0006a2018370000200241386a2017370000200241306a2016370000200241286a2015370000200241206a200b370000200241186a201b370000200241106a201a370000200241086a2019370000200528020020034105746a220241e0056a2010370000200241d8056a2014370000200241d0056a2012370000200241c8056a2011370000200d2004200341016a22026b470d02200528020020024106746a41086a200628020041086a201310e9081a200528020020024105746a41c8056a200628020041c8056a200e10e9081a200628020041086a220d200d20014106746a200741067410ea081a200628020041c8056a220d200d20014105746a200741057410ea081a200028020c210d0240024020002802140d00200d450d010c050b200d450d042005280200220d20024102746a41a8086a2006280200220641a8086a22002001410274220510e9081a2000200020056a200741027441046a10ea081a0240200420034d0d002003410274200d6a41ac086a210003402000280200220520023b01042005200d360200200041046a2100200241016a21022001417f6a22010d000b0b2007417f460d00200641a8086a2102200741016a21054100210003402002280200220120003b010420012006360200200241046a21022005200041016a2200470d000b0b0f0b41d89dc7004132418c9ec7001039000b419c9ec700412841c49ec7001039000b41f49bc7004128419c9cc7001039000b41e2a0cc00412841d49ec7001039000b8c0701157f230041e0006b2202240002400240200141106a28020022032f0106220441016a2205200141186a28020022062f010622076a2208410c4f0d00200128020821092001280200210a2001280204220b2f0106210c200320083b0106200241386a220d200b41086a220e20094106746a220f41386a290000370300200241306a2210200f41306a290000370300200241286a2211200f41286a290000370300200241206a2212200f41206a290000370300200241186a2213200f41186a290000370300200241106a2214200f41106a290000370300200241086a2215200f41086a2900003703002002200f290000370300200f200e200941016a22014106746a200c2009417f736a220e41067410ea081a200341086a221620044106746a220f41386a200d290300370000200f41306a2010290300370000200f41286a2011290300370000200f41206a2012290300370000200f41186a2013290300370000200f41106a2014290300370000200f41086a2015290300370000200f2002290300370000201620054106746a200641086a200741067410e9081a200241c0006a41186a220d200b41c8056a221020094105746a220f41186a290000370300200241c0006a41106a2211200f41106a290000370300200241c0006a41086a2212200f41086a2900003703002002200f290000370340200f201020014105746a200e41057410ea081a200341c8056a220e20044105746a220f41186a200d290300370000200f41106a2011290300370000200f41086a2012290300370000200f2002290340370000200e20054105746a200641c8056a200741057410e9081a200b41a8086a220f20014102746a20094102742209200f6a41086a200c2001417f736a41027441046a10ea081a02402001200c4f0d002009200b6a41ac086a210f0340200f280200220920013b01042009200b360200200f41046a210f200c200141016a2201470d000b0b200b200b2f0106417f6a3b01060240200a4102490d002007200820056b470d02200320054102746a41a8086a200641a8086a200741016a41027410e9081a200820044d0d00200741016a210f200441027420036a41ac086a210103402001280200220920053b010420092003360200200141046a2101200541016a2105200f417f6a220f0d000b0b2006102e2000200b3602042000200a360200200241e0006a24000f0b419c9dc700412a41c89dc7001039000b41f49bc7004128419c9cc7001039000b130020004108360204200041a8a1c7003602000bb90706057f017e017f017e037f037e23004180016b22022400200241106a200110d8062002280210210120022002280218220336022420022001360220200241286a2001200310ed02024002400240024020022802282204450d00200228022c21052002200241306a28020036023c20022004360238200241086a200241386a10ab010240024020022802080d0002400240200228020c2206200228023c4105762201200120064b1b22014105742203417f4c0d000240024020010d00410821030c010b2003102c2203450d080b2001ad2107024002402006450d00200241d8006a41036a21080340200241e8006a200241386a10a50120022d00684101460d04200228023c22014110490d04200229006921092002200141706a220a36023c20022002280238220b41106a220c360238200a450d04200b41086a290000210d200b290000210e20022001416f6a36023c2002200c41016a3602384100210b024002400240200c2d00000e03020001070b4101210b0c010b4102210b0b20022002280058360240200220082800003600432002200228004336005320022002280240360250200220022802503602482002200228005336004b02402007422088220fa722012007a7470d00200141016a220c2001490d042001410174220a200c200c200a491b220c4104200c41044b1b220c41ffffff3f71200c46410374210a200c410574210c0240024020010d00200241003602680c010b20024108360270200220033602682002200f4205863e026c0b200241d8006a200c200a200241e8006a107d2002280260210c20022802584101460d03200228025c2103200742808080807083200c410576ad8421070b200320014105746a2201200b3a00182001200d3703082001200e37030020012009370310200120022802483600192001411c6a200228004b36000020074280808080107c21072006417f6a22060d000b0b2003450d030c040b200c0d070b1038000b0240200742ffffff3f83500d002003102e0b0b4100210320024100360260200242013703582002410a3602442002200241206a3602402002200241d8006a360250200241fc006a41013602002002420137026c200241909dc5003602682002200241c0006a360278200241d0006a419cebc000200241e8006a103d1a2002280258200228026010ef02200228025c450d002002280258102e0b02402005450d002004102e0b20030d010b20004100360208200042083702000c010b20002007370204200020033602000b02402002280214450d002002280210102e0b20024180016a24000f0b1036000bf91106027f0a7e017f017e037f047e230041a0026b22032400200341c0006a200010c802200341a0016a20032802402204200328024810c902200341a0016a41386a2903002105200341a0016a41306a2903002106200341a0016a41286a2903002107200341a0016a41206a2903002108200341a0016a41186a2903002109200341a0016a41106a290300210a200341e0016a290300210b20032903a801210c20032903a001210d200341f0006a41086a200341f0016a2903003703002003200341e8016a29030037037002400240200d4201510d0042002108200341386a4200370300200341306a4200370300200341286a4200370300200341206a4200370300200341186a4200370300200341106a4200370300200341086a4200370300200342003703004200210c4200210a4200210942002107420021064200210d420021050c010b200341206a2007370300200341286a2006370300200341106a2009370300200341306a2005370300200320083703182003200c3703002003200b3703382003200a370308200c210d200a21050b02402003280244450d002004102e0b02400240200d2005844200520d0020072003290310842006200341186a29030084844200520d002003290330200341386a2903008450450d004200210e4100210f0c010b4201210e4101210f0b420021100240200e4201510d004200210c4200210a42002109420021080b0240024020020d00420021054200210b420021070c010b2002410574211142002110420021054200210b42002107200121040340024002400240200441186a2d00002212417f6a41ff017141014b0d002007200441086a2903002206200b2004290300220d56200720065620072006511b22131b2107200b200d20131b210b201241ff01714102460d010c020b201241ff01710d01200441086a29030021062004290300210d0b200520062010200d56200520065620052006511b22121b21052010200d20121b21100b200441206a2104201141606a22110d000b0b200341d8016a2005370300200341c8016a221120073703002003200c3703a001200320103703d0012003200b3703c001200320083703b8012003200a3703a801200320093703b001420021074201210d200e420152ad210b02400240427f200c20097c22062006200c542204200a20087c2004ad7c2206200a542006200a511b22041b221042ffc7afa02556427f200620041b22064200522006501b0d002009200c842008200a848422075021044200210d2007420052ad21070c010b200341d0016a290300211420112903002115200341c0016a2903002116200341b0016a290300210e20032903b801211720032903a801210820032903a0012109410121040b200341e8006a2006370300200341e0006a22112010370300200341d0006a200a3703002003200c370348200320073703582003200b3703400240024002400240200f200d420152720d00200320003602a0012000200341a0016a10bd060c010b0240200f4101732212200d420151720d00200320003602a0012000200341a0016a10be0641ff017122124103460d01024020120e03030200030b20040d03200320113602a001200341a0016a10cc020c030b200d4201522012710d010b20034180016a200010c802200341a0016a2003280280012211200328028801221210c90220032903a0012106200341f0006a41086a2204200341f0016a2903003703002003200341e8016a2903003703700240024020064201510d0020034190016a41086a420037030020034200370390010c010b20034190016a41086a200429030037030020032003290370370390010b200341e8016a200329039001370300200341f0016a20034190016a41086a290300370300200342013703a001200341d8016a20144200200d42015122041b370300200341d0016a2015420020041b370300200341a0016a41286a2016420020041b370300200341c0016a2017420020041b370300200341b8016a200e420020041b370300200341a0016a41106a2008420020041b370300200341e0016a2005420020041b37030020032009420020041b3703a80120112012200341a0016a41086a10c8050240200328028401450d002011102e0b200341c0006a41106a290300210a200341c0006a41286a29030021062003290348210c200329036021102003290340210b200329035821070b0240200b4201520d00200341d8016a200a370300200341d0016a200c370300200341a0016a41086a41003a0000200341a9016a2000290000370000200341b1016a200041086a290000370000200341b9016a200041106a290000370000200341c1016a200041186a290000370000200341033a00a001200341a0016a10fe010b02400240200750450d00420021070c010b200341a0016a41186a200041186a290000370300200341a0016a41106a200041106a290000370300200341a0016a41086a200041086a290000370300200320002900003703a001420121070b200341186a200341a0016a41186a2204290300220d370300200341106a200341a0016a41106a22112903002205370300200341086a200341a0016a41086a290300220b370300200320032903a001220a370300200341d0016a2006370300200341c8016a221220103703002011200b37030020042005370300200341c0016a200d370300200320073703a0012003200a3703a801200341a0016a10d20420032903a001500d0020032012360240200341c0006a10cc020b200341a0016a200010d80620032802a001221120032802a801108f022104024020032802a401450d002011102e0b024002400240024020020d00200341a0016a200010d80620032802a001221120032802a80110ff01024020032802a401450d002011102e0b2004450d012000108a060c010b2003200010d80620024105744104722211417f4c0d0120032802082113200328020021122011102c220f450d02200341003602a801200320113602a4012003200f3602a0012002200341a0016a107620012002200341a0016a109e012012201320032802a001221120032802a80110b201024020032802a401450d002011102e0b02402003280204450d002012102e0b20040d0020001083061a0b200341a0026a24000f0b1038000b1036000bc70101047f230041c0006b220224004109210341ceeac7002104410221050240024002400240200141ff01710e0400010203000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602242002418883ca003602202002200241206a360218200241086a41b4eac7001044000b410a210341c4eac7002104410021050c010b411721034194a4c7002104410121050b20004183323b0100200041086a2003360200200041046a2004360200200041026a20053a0000200241c0006a24000bcf0202027f047e230041f0006b220724000240024020022003844200520d00200041063a00000c010b200741e0006a200110c802200741086a20072802602208200728026810c90220072903084201512101200741386a2903002102200741306a2903002103200741c8006a2903002109200741c0006a290300210a02402007280264450d002008102e0b2002420020011b210b2003420020011b210c2009420020011b2102200a420020011b210302400240024041004102410120044101711b200441ff01714101461b0e03020100020b200b2002200c200356200b200256200b2002511b22011b2102200c200320011b21030c010b200c2103200b21020b02402003200558200220065820022006511b0d00200041830a3b0100200041086a4115360200200041046a41a0a3c700360200200041026a41013a00000c010b200041063a00000b200741f0006a24000bac0201037f230041e0006b22022400200241f8fcc6004108108102200241106a41f0faca004105108102024002404120102c2203450d002002422037023420022003360230200241306a200141201074200241c0006a200228023022012002280238220310d803200241dc006a200120036a360200200220013602582002200241d0006a3602542002200241c0006a360250200241206a200241d0006a107c02402002280234450d002001102e0b2002280228220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b20004100360208200020013602042000200436020020002002411010742000200241106a411010742000200228022022012003107402402002280224450d002001102e0b200241e0006a24000f0b1036000b1038000b8e3504087f017e047f0d7e230041a0036b2201240020014190016a2202420037030020014188016a22034200370300200141f8006a41086a2204420037030020014200370378200141b0026a41a0dac800410f1081022004200141b0026a41086a2205290000370300200120012900b002370378200141b0026a41afdac800410d10810220022005290000370300200320012900b00237030020014120360294032001200141f8006a36029003200141e8006a200141f8006a412010ed0202400240200128026822020d00410221040c010b200128026c21062001200141e8006a41086a28020022043602e402200120023602e0020240024020044104490d00200228000021052001200241046a3602e00220012004417c6a22073602e40220074104490d00200228000421072001200441786a3602e4022001200241086a3602e002200141e0006a200141e0026a10ab0102402001280260450d00200141003602f0020c010b200141f0026a200141e0026a200128026410990120012802f0022208450d0020012902f402210941002104200141003a00d0020240024020012802e402220a450d0020012802e002220b2d0000210c2001200a417f6a220d3602e4022001200b41016a3602e0020240200c4101460d000c040b200d41044f0d010b0c020b200b280001210c2001200a417b6a3602e4022001200b41056a3602e002410121040c010b200141003602b802200142013703b0022001410a3602d402200120014190036a3602d0022001200141b0026a36029c0320014184036a4101360200200142013702f402200141909dc5003602f0022001200141d0026a360280032001419c036a419cebc000200141f0026a103d1a20012802b00220012802b80210ef02024020012802b402450d0020012802b002102e0b410221040b2006450d002002102e0b0240024002400240024002400240024020044102460d0020014188036a200c360200200141fc026a20093702002001200436028403200120083602f802200120073602f402200120053602f002200141f8026a2108024020052000470d00024020044101460d00200141b0026a200810e00120014188016a200736020020014184016a200141b8026a28020036020020014100360278200120012903b00237027c200141f8006a108c060c010b200141b0026a200810e0012001418c016a2007360200200141f8006a41086a20012903b00237030020014188016a200141b0026a41086a2802003602002001200c36027c20014101360278200141f8006a108c060b024020012802f40220012802f0026a2000470d0020014180036a28020041286c4105722202417f4c0d022002102c2204450d0620014100360280012001200236027c20012004360278200141013a00d002200141f8006a200141d0026a4101107420012802f80221022001280280032204200141f8006a10760240200441286c2204450d00200220046a21040340200141f8006a2002412010742001200241206a2903003703b002200141f8006a200141b0026a41081074200241286a22022004470d000b0b41bcdac80041142001280278220220012802800110b2010240200128027c450d002002102e0b200141f8006a41086a2202200829020037030020014188016a2204200841086a2802003602002001410036027c200141073a0078200141f8006a10fe0120014190016a4200370300200442003703002002420037030020014200370378200141b0026a41a0dac800410f1081022002200141b0026a41086a2204290000370300200120012900b002370378200141b0026a41afdac800410d108102200341086a2004290000370000200320012900b002370000200141f8006a412010ff010c010b20012802fc022202450d00200241286c450d0020012802f802102e0b20014190016a420037030020014188016a4200370300200141f8006a41086a2202420037030020014200370378200141b0026a41a0dac800410f1081022002200141b0026a41086a2204290000370300200120012900b002370378200141b0026a41d0dac8004105108102200341086a2004290000370000200320012900b002370000200141203602e4022001200141f8006a3602e002200141e8006a200141f8006a412010ed02024020012802682202450d00200141e8006a41086a2802002105200128026c210741002104200141003a00d0020240024002402005450d0002400240024020022d00000e0405000102030b2005417f6a4108490d0220022900012109410121040c040b410221040c020b2005417f6a4108490d0020022900012109410321040c020b200141003602b802200142013703b0022001410a3602d4022001200141e0026a3602d0022001200141b0026a3602900320014184036a4101360200200142013702f402200141909dc5003602f0022001200141d0026a3602800320014190036a419cebc000200141f0026a103d1a20012802b00220012802b80210ef02024020012802b402450d0020012802b002102e0b410421040b0b02402007450d002002102e0b024002402004417f6a0e03010200020b2009422088a7210202402009a722042000470d00200141043602782001200236027c200141f8006a108c060b200220046a2000470d0120014190016a420037030020014188016a4200370300200141f8006a41086a2202420037030020014200370378200141b0026a41a0dac800410f1081022002200141b0026a41086a2204290000370300200120012900b002370378200141b0026a41d0dac8004105108102200341086a2004290000370000200320012900b002370000200141f0026a41002001200110da06200141f8006a412020012802f002220220012802f80210b201024020012802f402450d002002102e0b2001410236027c200141073a0078200141f8006a10fe010c010b2009422088a7210202402009a722042000470d00200141033602782001200236027c200141f8006a108c060b200220046a2000470d0020014190016a420037030020014188016a4200370300200141f8006a41086a2202420037030020014200370378200141b0026a41a0dac800410f1081022002200141b0026a41086a2204290000370300200120012900b002370378200141b0026a41d0dac8004105108102200341086a2004290000370000200320012900b002370000200141f0026a41022001200110da06200141f8006a412020012802f002220220012802f80210b201024020012802f402450d002002102e0b2001410136027c200141073a0078200141f8006a10fe010b200141f0026a109403024020012903f002427f7c4202540d00200141f0026a41106a2903002109200141b0026a41186a22044200370300200141b0026a41106a22034200370300200141b0026a41086a22024200370300200142003703b002200141e8006a41e8fcc60041091081022002200141e8006a41086a2200290000370300200120012900683703b002200141e8006a41b08ec90041031081022004200029000037030020032001290068370300200141d0006a200141b0026a108503200141c0006a2001290358420020012802501b220e42e80780420042e807420010e808200141f8006a41186a22044200370300200141f8006a41106a22034200370300200141f8006a41086a2200420037030020014200370378200141b0026a4192fdc600410710810220002002290000370300200120012900b002370378200141b0026a41d0adc600410910810220042002290000370300200320012900b002370300200141003602b802200142013703b002200120093e0268200141b0026a200141e8006a41041074200141013a00d002200141b0026a200141d0026a41011074200120012903402209200e42e807827c220e427f200141c0006a41086a290300200e200954ad7c501b370368200141b0026a200141e8006a41081074200141f8006a412020012802b002220220012802b80210b20120012802b402450d002002102e0b20014190016a22034200370300200141f8006a41106a22024200370300200141f8006a41086a2204420037030020014200370378200141f0026a4190dac800410a1081022004200141f0026a41086a2200290000370300200120012900f002370378200141f0026a419adac800410610810220032000290000370300200220012900f002370300200141f8006a412010ff0120034200370300200242003703002004420037030020014200370378200141f0026a4190dac800410a10810220042000290000370300200120012900f002370378200141f0026a41d097c900410c10810220032000290000370300200220012900f002370300200141f8006a412010ff0120034200370300200242003703002004420037030020014200370378200141f0026a4180fdc600411210810220042000290000370300200120012900f002370378200141f0026a41dc98c500411110810220032000290000370300200220012900f002370300200141286a200141f8006a10e904200141286a41106a290300210f2001290330211020012802282103200141f8006a4201420042808090bbbad6adf00d420042c0843d420010ea040240024020012802784101470d00427f2111427f21090c010b20022903002109200429030021110b200141f8006a10a903200141f8006a41086a200141a8016a200141a0016a290300501b290300210e200141c8026a22044200370300200141b0026a41106a22004200370300200141b0026a41086a22054200370300200142003703b002200141e8006a41d9fcc60041061081022005200141e8006a41086a2207290000370300200120012900683703b002200141e8006a41d4f2cb00410b1081022004200729000037030020002001290068370300200141f0026a200141b0026a10f20420012903f802211220012903f0022113200141f0026a4203420042808090bbbad6adf00d420042a08d06420010ea04200e2012420020134201511b22122012200e561b21120240024020012802f0024101470d00427f2113427f21140c010b200141f0026a41106a2903002114200141f0026a41086a29030021130b200141186a200e42808090bbbad6adf00d8222154200428080e4ceceb58bbc03420010e808200141086a2001290318200141186a41086a29030042808090bbbad6adf00d420010e608200141f0026a2012200e42808090bbbad6adf00d80428080e4ceceb58bbc037e20154202882001290308428080c89d9deb96f80656200141086a41086a29030022154200522015501bad7c7c2215201220155622041b22162015201220041b22177d42002016201754ad7d42808090bbbad6adf00d4200200e4201200e4201561b420010ea040240024020012802f0024101470d00427f210e427f21160c010b20014180036a2903002116200141f0026a41086a290300210e0b200141f0026a200e2016200e201642808090bbbad6adf00d420010ea040240024020012802f0024101470d00427f2117427f21180c010b20014180036a2903002118200141f8026a29030021170b200141f0026a201320142013201442808090bbbad6adf00d420010ea040240024020012802f0024101470d00427f2119427f211a0c010b20014180036a290300211a200141f8026a29030021190b200141f0026a2019201a42808090bbbad6adf00d4200428080a0f6f4acdbe01b420010ea0420012802f0024101460d052011201042808090bbbad6adf00d20031b22195421042009200f420020031b220f5121032009200f54210020014180036a22052903002110200141f8026a2207290300211a200141f0026a20132014200e201642808090bbbad6adf00d420010ea040240024020012802f0024101470d00427f2116427f21140c010b20052903002114200729030021160b2004200020031b2104200141f0026a201a20102017201842808090bbbad6adf00d420010ea040240024020012802f0024101470d00427f2110427f21170c010b20014180036a2903002117200141f8026a29030021100b200f200920041b210e2019201120041b21130240024020122015540d00427f2115200141f0026a427f201620107c221220122016542204201420177c2004ad7c221220145420122014511b22041b427f201220041b2013200e42808090bbbad6adf00d420010ea040240024020012802f0024101470d00427f21120c010b20014180036a2903002112200141f8026a29030021150b427f200e20127c201320157c22142013542204ad7c221220042012200e542012200e511b22041b220e2009427f201420041b2212201156200e200956200e2009511b22041b21092012201120041b210e0c010b200141f0026a4200201620107d22122012201656201420177d2016201054ad7d221220145620122014511b22041b4200201220041b2013200e42808090bbbad6adf00d420010ea040240024020012802f0024101470d00427f2112427f21140c010b20014180036a2903002114200141f8026a29030021120b4200200e20147d2013201254ad7d2214201320127d22122013562014200e562014200e511b22041b220e20094200201220041b2212201156200e200956200e2009511b22041b21092012201120041b210e0b200141f8006a41186a4200370300200141f8006a41106a4200370300200141f8006a41086a2204420037030020014200370378200141f0026a4180fdc60041121081022004200141f0026a41086a2203290000370300200120012900f002370378200141f0026a41dc98c5004111108102200241086a2003290000370000200220012900f002370000200120093703f8022001200e3703f002200141f8006a4120200141f0026a411010b201200141b0026a41186a22044200370300200141b0026a41106a22024200370300200141b0026a41086a22034200370300200142003703b002200141e8006a41e8fcc60041091081022003200141e8006a41086a2200290000370300200120012900683703b002200141e8006a41d48ec90041091081022004200029000037030020022001290068370300200141b0026a108603220441ff01714102460d06200141b0026a412010ff012004410171450d06200141b0026a41186a4200370300200141b0026a41106a4200370300200141b0026a41086a22044200370300200142003703b002200141e8006a41a8f8c60041041081022004200141e8006a41086a2203290000370300200120012900683703b002200141e8006a41978cc500410b108102200241086a200329000037000020022001290068370000200141f8006a200141b0026a10a004024020012d007822044102460d00200141b0026a412010ff010b200141f0026a41186a20014191016a290000370300200141f0026a41106a20014189016a290000370300200141f0026a41086a20014181016a290000370300200120012900793703f0020240200441037122044103460d0020040e03040004040b200141f8006a41186a200141f0026a41186a290300370300200141f8006a41106a200141f0026a41106a290300370300200141f8006a41086a200141f0026a41086a290300370300200120012903f002370378200141b0026a41186a4200370300200141b0026a41106a4200370300200141b0026a41086a22044200370300200142003703b002200141e8006a41a8f8c60041041081022004200141e8006a41086a2203290000370300200120012900683703b002200141e8006a41ee8bc500410c108102200241086a2003290000370000200220012900683700002001200141b0026a4120108e0241002104200141b0026a2001280204410020012802001b220510db06200141e8006a20012802b002220720012802b80210b60502400240200128026822030d00200141003602d802200142013703d00241012103410021000c010b2001200129026c22093702d402200120033602d0022009422088a721002009a721040b024020012802b402450d002007102e0b200041ff014b0d01200141b0026a41186a220c200141f8006a41186a290300370300200141b0026a41106a2208200141f8006a41106a290300370300200141b0026a41086a2206200141f8006a41086a290300370300200120012903783703b0020240024020002004470d00200441016a22072004490d022004410174220a2007200a20074b1b22074104200741044b1b220741ffffff3f71200746210a200741057421070240024020040d00200141003602680c010b200141f0006a4101360200200120033602682001200441057436026c0b200141e0026a2007200a200141e8006a107d200141e8026a280200210420012802e0024101460d01200120012802e40222033602d0022001200441057622043602d4020b200320004105746a220720012903b002370000200741186a200c290300370000200741106a2008290300370000200741086a20062903003700002001200041016a3602d8022005200141d0026a10dc060c030b20040d040b1038000b4120102c2200450d0220002001290378370000200041186a200141f8006a41186a290300370000200041106a200141f8006a41106a290300370000200041086a200141f8006a41086a29030037000020014281808080103702b402200120003602b002200541016a2205200141b0026a10dc062000102e200141b0026a41186a4200370300200141b0026a41106a4200370300200141b0026a41086a22004200370300200142003703b002200141e8006a41a8f8c60041041081022000200141e8006a41086a2207290000370300200120012900683703b002200141e8006a41ee8bc500410c108102200241086a20072900003700002002200129006837000020012005360268200141b0026a4120200141e8006a410410b2010b200441ffffff3f71450d002003102e0b200141c8026a22004200370300200141c0026a22054200370300200141b0026a41086a22044200370300200142003703b002200141e8006a41a8f8c60041041081022004200141e8006a41086a2203290000370300200120012900683703b002200141e8006a41848cc5004113108102200241086a2207200329000037000020022001290068370000200141b0026a412010ff01200042003703002005420037030020044200370300200142003703b002200141e8006a41a8f8c600410410810220042003290000370300200120012900683703b002200141e8006a41a28cc50041081081022007200329000037000020022001290068370000200141b0026a412010ff01200141a0036a24000f0b1036000b10dd06000b41d2d9c800412b4180dac8001039000bd00101017f230041106b2204240020004100360208200042013702000240024002400240024020010e0400010203000b200441003a000c20002004410c6a410110740c030b200441013a000c20002004410c6a410110742004200236020c20002004410c6a410410742004200336020c20002004410c6a410410740c020b200441023a000c20002004410c6a410110740c010b200441033a000c20002004410c6a410110742004200236020c20002004410c6a410410742004200336020c20002004410c6a410410740b200441106a24000b850201037f230041d0006b22022400200241086a41a8f8c6004104108102200241186a4197dbc8004111108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000bd60101057f230041206b220224002002200010db0602400240200128020822004105744104722203417f4c0d002001280200210120022802082104200228020021052003102c2206450d012002410036021820022003360214200220063602102000200241106a107602402000450d00200041057421000340200241106a200141201074200141206a2101200041606a22000d000b0b2005200420022802102201200228021810b20102402002280214450d002001102e0b02402002280204450d002005102e0b200241206a24000f0b1038000b1036000b110041c9dbcc00411f41e8dbcc001039000ba7cc010a077f017e027f017e177f037e0b7f027e067f037e230022012102200141a0136b41607122012400200141b8016a10f40402400240024020012d00b8014101470d0020012802bc012000470d00200141a0056a41014196a9c700412410df0602400240024020012802a0052203450d00200141a8056a28020041034d0d0002402003280000220420004b0d00200441056a2000490d010b20012802a405450d012003102e0c030b200120003602c001200120003602b003200141d80f6a41086a200141a0056a41086a280200360200200120012903a0053703d80f41014196a9c7004124200141d80f6a200141b0036a410410e0060d010b0c010b200141d80f6a10e10620012802d80f410b702105200141d80f6a10f5040240024002400240024020012802d80f2206450d00200141d80f6a41106a22072903002108200141e40f6a2209280200210a20012902dc0f210b200141d00e6a41186a22044200370300200141d00e6a41106a220c4200370300200141d00e6a41086a220d4200370300200142003703d00e200141d80f6a41a5fec600411a108102200d200141d80f6a41086a2203290000370300200120012900d80f3703d00e200141d80f6a4194c5c800410e10810220042003290000370300200c20012900d80f370300200141b0016a200141d00e6a4120108e02024020012802b001450d0020012802b401210e200120083702940d2001200a3602900d2001200b3702a405200120063602a005200141d80f6a200141900d6a200141a0056a10b904200141f00e6a41086a20032802002204360200200120012903d80f220b3703f00e200141800f6a41086a200141ec0f6a2802002206360200200120012902e40f22083703800f200141900d6a41086a20043602002001200b3703900d200141a0056a41086a2006360200200120083703a005200141d80f6a200e200141900d6a200141a0056a10e206200141a80a6a41086a200141d80f6a41186a280200360200200120072903003703a80a024020012802d80f4101470d000c060b2003280200210f2009280200210420012802dc0f2110200141900f6a41086a200141a80a6a41086a280200360200200120012903a80a3703900f200141900f6a20054200420010c004201020044102746a2107024002400240200e0d00201021032010210d0c010b201021032010210d2004450d0020044102742105201021032010210d024003402003220641046a210320062802002204450d022004280208220a41016a41004c0d032004200a36020802400240200441f4006a2d00000d0020042004280200417f6a220636020020060d01200441046a22062006280200417f6a220636020020060d012004102e0c010b200d2004360200200d41046a210d200e417f6a220e450d020b2005417c6a22050d000b200721030c010b200641046a21030b0240200720036b2204450d00200441027541027421040340200328020022062006280200417f6a3602000240200328020022062802000d00200641046a22062006280200417f6a3602002003280200220641046a2802000d002006102e0b200341046a21032004417c6a22040d000b0b02400240200d20106b2211410275221241144b0d00201241014d0d074102210320102012417e6a22044102746a2106034020122004490d022006200310e3062006417c6a2106200341016a21032004417f6a2204417f470d000c080b0b2012410176220341ffffffff03712003470d0a20034102742213417f4c0d0a2013102c2214450d092010417c6a2115201041746a21164104211741002118410021192012211a0340201a210a4100211a410121040240200a417f6a220d450d000240024002400240024002400240024002400240024002402010200d4102746a2802002203280208220441016a41004c0d00200320043602082010200a417e6a22054102746a2802002204280208220641016a41004c0d01200328025021032004200636020820032004280250490d042016200a4102746a21034100211a410021060340024020052006470d00200a21040c0e0b200341046a2802002204280208220d41016a41004c0d032004200d3602082003280200220d280208220e41016a41004c0d0420042802502104200d200e3602082003417c6a2103200641016a21062004200d2802504f0d000b200641016a21042006417f73200a6a210d0c050b41bcd9cc004118200141d80f6a41c4f8c90041d4f8c900103e000b41bcd9cc004118200141d80f6a41c4f8c90041d4f8c900103e000b41bcd9cc004118200141d80f6a41c4f8c90041d4f8c900103e000b41bcd9cc004118200141d80f6a41c4f8c90041d4f8c900103e000b2016200a41027422056a2103024003400240200d4101470d004100210d0c020b200341046a2802002204280208220641016a41004c0d032004200636020820032802002206280208220e41016a41004c0d04200428025021042006200e3602082003417c6a2103200d417f6a210d20042006280250490d000b0b200a200d490d03200a20124b0d04200a200d6b2204410176220e450d002010200d4102746a2103201520056a21060340200328020021052003200628020036020020062005360200200341046a21032006417c6a2106200e417f6a220e0d000b0b0240200d0d00200d211a0c070b0240200441094d0d00200d211a0c070b200a20124b0d04200a200d6b2104200d417f6a21032015200d4102746a21060340200a2003490d0d2006200441016a220410e3062003417f6a220d20034f0d062006417c6a2106200d21032004410a490d000c060b0b41bcd9cc004118200141d80f6a41c4f8c90041d4f8c900103e000b41bcd9cc004118200141d80f6a41c4f8c90041d4f8c900103e000b200d200a41e4d1cc001057000b200a201241e4d1cc00104d000b200a200d417f6a2203490d07200a201241f4d1cc00104d000b200d41016a211a0b024020192018470d00201841016a22032018490d0c201841017422062003200620034b1b22034104200341044b1b220341ffffffff01712003464102742106200341037421030240024020180d00200141003602d80f0c010b200141043602e00f200120173602d80f200120184103743602dc0f0b200141a0056a20032006200141d80f6a107d20012802a8052103024020012802a0054101470d0020030d0c0c0d0b20012802a4052117200341037621180b201720194103746a220320043602042003201a360200201941016a221b21190240201b4102490d000240024002400240024002400240034002400240024002402017201b2219417f6a221b4103746a2203280200450d00201941037420176a220e41746a280200220d200328020422044d0d00201941024d0d0c20172019417d6a22034103746a28020422062004200d6a4d0d01201941034d0d0c200e41646a2802002006200d6a4b0d0c0c010b20194103490d012003280204210420172019417d6a22034103746a28020421060b20062004490d010b2019417e6a21030b02402019200341016a221c4d0d00201920034d0d02201720034103746a221d280204221e201d2802006a22032017201c4103746a221f2802002220490d03200320124b0d04201020204102746a2221201f280204222241027422046a21062003410274210e02400240200320206b220520226b22032022490d0020142021200410e908220320046a210d0240024020224101480d00200520224a0d010b20212104200321030c020b2010200e6a2107200321032021210403402006280200220e280208220541016a41004c0d08200e200536020820032802002205280208220a41016a41004c0d09200e280250210e2005200a360208200420062003200e200528025049220e1b2802003602002003200341046a200e1b2103200441046a2104200641046a2006200e1b220620074f0d02200d20034b0d000c020b0b201420062003410274220410e908220720046a210d0240024020224101480d00200341014e0d010b20062104200721030c010b2015200e6a210a200621040340200d417c6a22032802002206280208220e41016a41004c0d092006200e3602082004417c6a220e2802002205280208220941016a41004c0d0a2006280250210620052009360208200a200e2003200620052802504922061b280200360200200d200320061b210d02402021200e200420061b2204490d00200721030c020b200a417c6a210a200721032007200d490d000b0b20042003200d20036b417c7110e9081a201d41046a201e20226a360200201d2020360200201f201f41086a2019201c417f736a41037410ea081a41012119201b41014d0d090c010b0b201c20194184d2cc00103c000b200320194194d2cc00103c000b2020200341a4d2cc001057000b2003201241a4d2cc00104d000b41bcd9cc004118200141d80f6a41c4f8c90041d4f8c900103e000b41bcd9cc004118200141d80f6a41c4f8c90041d4f8c900103e000b41bcd9cc004118200141d80f6a41c4f8c90041d4f8c900103e000b41bcd9cc004118200141d80f6a41c4f8c90041d4f8c900103e000b201a450d060c000b0b2004201241c4d1cc001056000b41bcd9cc004118200141d80f6a4190b7c00041a0b7c000103e000b0240200842ffffff3f83500d00200a102e0b0240200b422088a72203450d00200341386c21042006412c6a210303400240200328020041ffffff3f71450d002003417c6a280200102e0b200341386a2103200441486a22040d000b0b200ba72203450d00200341386c450d002006102e0b20014198076a200141d8086a41c00110e9081a0c040b2003200a41f4d1cc001057000b0240201841ffffffff0171450d002017102e0b2013450d002014102e0b20012802980f210420012802940f2106200120012802900f22033602a80f200120063602a40f200120033602a00f20012003200441e0006c6a221d3602ac0f4104211e024002402004450d00200141900d6a410472211f200141d80f6a41346a2104024002400340200141a0056a41286a220d200341286a290300370300200141a0056a41206a220e200341206a290300370300200141a0056a41186a2205200341186a290300370300200141a0056a41106a220a200341106a290300370300200141a0056a41086a2207200341086a290300370300200120032903003703a005200341306a2802002106200141a80a6a41086a22092003413c6a290200370300200141a80a6a41106a2221200341c4006a290200370300200141a80a6a41186a2219200341cc006a290200370300200141a80a6a41206a2222200341d4006a290200370300200141a80a6a41286a2217200341dc006a2802003602002001200341346a2902003703a80a2006450d01200141d80f6a41286a200d290300370300200141d80f6a41206a200e290300370300200141d80f6a41186a2005290300370300200141d80f6a41106a200a290300370300200141d80f6a41086a2007290300370300200420012903a80a370200200441086a2009290300370200200441106a2021290300370200200441186a2019290300370200200441206a2022290300370200200441286a2017280200360200200120012903a0053703d80f2001200636028810200141900d6a200141d80f6a10e406024020012802900d22060d00200341e0006a2203201d470d010c030b0b200141b00f6a41206a201f41206a290200220b370300200141b00f6a41186a201f41186a2902002208370300200141b00f6a41106a201f41106a2902002223370300200141b00f6a41086a201f41086a29020022243703002001200341e0006a3602a80f2001201f29020022253703b00f20012802b40f210720012802d40f212220012802cc0f211920012802c40f212120012802bc0f2109412c102c221e450d06201e2022360228201e200ba7221b360224201e2019360220201e2008a7222036021c201e2021360218201e2023a7221f360214201e2009360210201e2024a7221d36020c201e2007360208201e2025a72217360204201e2006360200200141d00e6a41086a200141a00f6a41086a290300220b370300200120012903a00f3703d00e024002400240200ba7220620012802dc0e2226470d0041012127410121130c010b200141d80f6a41346a2104200141900d6a410472212841012127410121130340200141a0056a41286a220d2006220341286a290300370300200141a0056a41206a220e200341206a290300370300200141a0056a41186a2205200341186a290300370300200141a0056a41106a220a200341106a290300370300200141a0056a41086a221c200341086a290300370300200120032903003703a005200341306a2802002106200141a80a6a41086a22142003413c6a290200370300200141a80a6a41106a221a200341c4006a290200370300200141a80a6a41186a2218200341cc006a290200370300200141a80a6a41206a2215200341d4006a290200370300200141a80a6a41286a2216200341dc006a2802003602002001200341346a2902003703a80a024002402006450d00200141d80f6a41286a200d290300370300200141d80f6a41206a220d200e290300370300200141d80f6a41186a220e2005290300370300200141d80f6a41106a2205200a290300370300200141d80f6a41086a220a201c290300370300200420012903a80a370200200441086a2014290300370200200441106a201a290300370200200441186a2018290300370200200441206a2015290300370200200441286a2016280200360200200120012903a0053703d80f2001200636028810200141900d6a200141d80f6a10e40620012802900d22060d01200341e0006a22062026470d020b2001200341e0006a3602d80e0c020b200141b00f6a41106a202841106a290200220b370300200141e00b6a41086a221c202841086a290200370300200141e00b6a41106a2214200b370300200141e00b6a41186a221a202841186a290200370300200141e00b6a41206a2218202841206a2902003703002001200341e0006a3602d80e200120282902003703e00b200d2018290300370300200e201a29030037030020052014290300370300200a201c290300370300200120012903e00b3703d80f024020132027470d00202741016a22032027490d0b2027410174221c2003201c20034b1b22034104200341044b1bad422c7e220b422088a7454102742103200ba7211c0240024020270d00200141003602a0050c010b200141043602a8052001201e3602a00520012027412c6c3602a4050b200141900d6a201c2003200141a0056a107d20012802980d210320012802900d4101460d0320012802940d211e2003412c6e21270b201e2013412c6c6a220320063602002003410c6a200a290300370200200320012903d80f370204200341146a20052903003702002003411c6a200e290300370200200341246a200d290300370200201341016a211320012802d80e220620012802dc0e2226470d000b0b200141d00e6a10ac020c040b2003450d070c060b200341e0006a211d0b2001201d3602a80f0b200141a00f6a10ac0241002127410021130b2013412c6c2104410021030240034020042003460d01200141a8016a201e20036a10be042003412c6a210320012802a801450d000b02402013450d002013412c6c2104201e210303400240200341046a2802002206450d00200641226c450d002003280200102e0b2003412c6a2103200441546a22040d000b0b02402027450d002027412c6c450d00201e102e0b02402011450d0020124102742104201021030340200328020022062006280200417f6a3602000240200328020022062802000d00200641046a22062006280200417f6a3602002003280200220641046a2802000d002006102e0b200341046a21032004417c6a22040d000b0b200f41ffffffff0371450d012010102e0c010b2012ad42307e220b422088a70d03200ba72203417f4c0d030240024020030d00410821290c010b2003102c2229450d030b0240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200341306e222a20124f0d00202a41017422042012200420124b1b22044104200441044b1bad42307e220b422088a7454103742104200ba72106024002402003412f4b0d00200141003602d80f0c010b200141d80f6a41086a4108360200200120293602d80f2001202a41306c3602dc0f0b200141a0056a20062004200141d80f6a107d200141a8056a280200210320012802a0054101460d0120012802a4052129200341306e212a0b2012410274210420110d0141002118201021030c020b2003450d170c160b201020046a21152012410274210d2011417c6a41027641016a2116200141d00e6a41186a210e200141d00e6a41106a2105200141d00e6a41086a210a410021182029210420102106024003400240200628020022030d00200641046a21030c020b200328020841016a221c41004c0d032003201c360208200e200341ec006a2900003703002005200341e4006a290000370300200a200341dc006a2900003703002001200341d4006a2900003703d00e2003280208221c41016a221241004c0d0420032012360208200e290300210b20052903002108200a29030021232003201c417f6a360208200141d80f6a41086a221c2023370300200141d80f6a41106a22122008370300200141d80f6a41186a2214200b370300200120012903d00e3703d80f200341c8006a290300210b2003290340210820032003280200417f6a221a3602000240201a0d00200341046a221a201a280200417f6a221a360200201a0d002003102e0b200641046a2106200420012903d80f370300201c29030021232012290300212420142903002125200441286a200b370300200441206a2008370300200441186a2025370300200441106a2024370300200441086a2023370300200441306a2104201841016a2118200d417c6a220d0d000b20152103201621180b201520036b220441027521120b02402004450d00201241027421040340200328020022062006280200417f6a3602000240200328020022062802000d00200641046a22062006280200417f6a3602002003280200220641046a2802000d002006102e0b200341046a21032004417c6a22040d000b0b0240200f41ffffffff0371450d002010102e0b200141d80f6a10f504024020012802d80f2203450d00200141e40f6a2802002104200141d80f6a41106a290300210b200120012902dc0f37029c0a200120033602980a2001200b3702f40e200120043602f00e200141e80e6a4200370300200141d00e6a41106a4200370300200141d00e6a41086a22034200370300200142003703d00e200141d80f6a41a5fec600411a1081022003200141d80f6a41086a2204290000370300200120012900d80f3703d00e200141d80f6a4194c5c800410e108102200c41086a2004290000370000200c20012900d80f370000200141a0016a200141d00e6a4120108e02024020012802a001450d0020012802a401212b200142003702840f024020012802a00a2203450d00200341386c210620012802980a41086a2103410021040340200141d80f6a41186a200341186a290000370300200141d80f6a41106a200341106a290000370300200141d80f6a41086a200341086a290000370300200120032900003703d80f200341386a2103200141800f6a200141d80f6a200410a402200441016a2104200641486a22060d000b0b2001200141800f6a3602a40a200142003702940f024020012802f80e2203450d0020012802f00e220520034105746a21154100210d41002112034002400240200d450d0020012802900f211c0c010b41e000102c220d450d194100211c200d4100360200200d41003b015e2001200d3602940f200141003602900f0b200541206a2114024002400340200d41046a211a200d2f015e2210410274210e41002103417f2104024003400240200e2003470d00201021040c020b2005200d20036a220a41046a280200412010ec082206450d03200441016a2104200341046a21032006417f4a0d000b0b0240201c450d00201c417f6a211c200d20044102746a41e0006a280200210d0c010b0b024002402010410a4b0d00201041016a21030240200420104f0d00201a200441016a41027422066a201a2004410274220e6a20032004417f736a410274220a10ea081a200d41306a221c20066a201c200e6a200a10ea081a0b201a200441027422046a2005360200200d20046a41306a2012360200200d20033b015e0c010b4100210a4104210302400240200441054f0d00200421060c010b4105210341052106024002402004417b6a0e020201000b200441796a21064101210a410621030c010b410021064101210a0b41e000102c2204450d1b200441003b015e200441003602002004200d2f015e221c2003417f736a220e3b015e200e410c4f0d09201c200341016a22106b200e470d0a200d41306a221c200341027422116a2802002116201a20116a2802002111200441046a201a201041027422106a200e410274220e10e9081a200441306a201c20106a200e10e9081a200d20033b015e2004200d200a1b220341046a210e20032f015e221c41016a210a0240200641016a2210201c4b0d00200e2010410274221c6a200e200641027422106a200a2006417f736a410274221a10ea081a200341306a2226201c6a202620106a201a10ea081a0b200e200641027422066a2005360200200320066a41306a20123602002003200a3b015e024002400240200d280200220a0d004100211a0c010b4100211a201121262016210f200421280340200d2f015c210e200a2f015e221c410b490d0241002105410421030240200e4105490d00200e210302400240200e417b6a0e020201000b200e41796a210e41012105410621030c010b4100210e41012105410521030b419001102c2204450d1e200441003b015e200441003602002004200a2f015e220d2003417f736a22063b015e2006410c4f0d0e200d200341016a22106b2006470d0f200a41306a222c2003410274220d6a2802002116200a41046a222d200d6a2802002111200441046a202d2010410274220d6a2006410274220610e9081a200441306a202c200d6a200610e9081a200a20033b015e20042f015e220641016a21102006410c4f0d10201c20036b22032010470d11201a41016a211a200441e0006a200a200d6a41e0006a200341027410e9081a4100210302400340200420034102746a41e0006a280200220d20033b015c200d200436020020032003200649220d6a220320064b0d01200d0d000b0b2004200a20051b220d41046a222c200e410274221c6a2110200d2f015e220641016a210502400240200e41016a220320064d0d0020102026360200200d41306a21100c010b202c2003410274222d6a2010200e417f7320056a410274222c10ea081a20102026360200200d41306a2210202d6a2010201c6a202c10ea081a0b2010201c6a200f360200200d41e0006a21100240200e41026a2226200641026a22064f0d00201020264102746a201020034102746a2003417f7320066a41027410ea081a0b201020034102746a2028360200200d20053b015e0240200320064f0d00200d201c6a41e4006a2103034020032802002206200e41016a220e3b015c2006200d360200200341046a21032005200e470d000b0b200a210d200a2802002203210a201121262016210f2004212820030d000b0b20012802940f2206450d1020012802900f210d419001102c2203450d1c20032006360260200341003b015e2003410036020020062003360200200641003b015c200120033602940f2001200d41016a3602900f200d201a470d1120032f015e2206410b4f0d122003200641016a220d3b015e200320064102746a220641306a2016360200200641046a2011360200200341e0006a200d4102746a2004360200200420033602002004200d3b015c200120012802980f41016a3602980f0c030b200a41046a2104201c41016a210602400240200e201c490d002004200e41027422036a2026360200200a20036a41306a200f360200200a41e0006a2104201c41026a210d200e41016a21030c010b2004200e41016a2203410274220d6a2004200e41027422056a2204200e417f7320066a410274220e10ea081a20042026360200200a41306a2204200d6a200420056a2204200e10ea081a2004200f3602002005200a41e0006a22046a41086a2004200d6a2003417f73201c41026a220d6a41027410ea081a0b20042003410274220e6a2028360200200a20063b015e2003200d4f0d00200a200e6a41e0006a210403402004280200220620033b015c2006200a360200200441046a2104200d200341016a2203470d000b0b200120012802980f41016a3602980f0c010b200a41306a20123602000b20142015460d01201241016a211220012802940f210d201421050c000b0b201e2013412c6c6a211c0240024020130d00201e2104201e21030c010b200141a0056a410c6a2110200141a0056a4104722104200141e00b6a41206a210d200141e00b6a41186a210e200141e00b6a41106a2105200141e00b6a41086a210a201e21060340200622032802002106200d200341246a290200370300200e2003411c6a2902003703002005200341146a290200370300200a2003410c6a2902003703002001200341046a2902003703e00b024020060d002003412c6a21040c020b200420012903e00b370200200441086a200a290300370200200441106a2005290300370200200441186a200e290300370200200441206a200d290300370200200120063602a0054200210b0240200141800f6a201010a0022206450d0020012802a00a200628020022064d0d0020012802980a200641386c6a290300210b0b200141d80f6a41286a200141a0056a41286a280200360200200141d80f6a41206a200141a0056a41206a290300370300200141d80f6a41186a200141a0056a41186a290300370300200141d80f6a41106a200141a0056a41106a290300370300200141d80f6a41086a200141a0056a41086a290300370300200120012903a0053703d80f200141900d6a200141d80f6a200b420010bd04200341286a200141900d6a41286a280200360200200341206a200141900d6a41206a290300370200200341186a200141900d6a41186a290300370200200341106a200141900d6a41106a290300370200200341086a200141900d6a41086a290300370200200320012903900d3702002003412c6a2206201c470d000b2003412c6a2103201c21040b2027ad210b201c20046b2206412c6d210d02402006450d00200d412c6c210603400240200441046a280200220d450d00200d41226c450d002004280200102e0b2004412c6a2104200641546a22060d000b0b2003201e6b220e412c6d220d412c6c2104200dad422086200b842108201e210602400340200621032004450d014200210b0240200141800f6a2003410c6a10a0022206450d0020012802a00a200628020022064d0d0020012802980a200641386c6a290300210b0b2003412c6a210620014198016a2003200b420010bf04200441546a2104200128029801450d000b0240200e450d00201e200d412c6c6a210d201e2103034020032204412c6a21030240200441046a2802002206450d00200641306c450d002004280200102e0b200d2003470d000b0b2027450d0f2027412c6c450d0f201e102e0c0f0b200120083702a40f2001201e3602a00f201e200d412c6c6a212d200141a00f6a10e5060240200e0d00201e211c201e21050c0e0b200141e00b6a41086a2112200141e00b6a41206a212e200141e00b6a41186a212f200141e00b6a41106a2130201e211c02400340201c22052802002114202e200541246a2213290200370300202f2005411c6a22112902003703002030200541146a222629020037030020122005410c6a290200370300200120052902043703e00b2005412c6a211c2014450d0f200141a80a6a41086a220f201241086a290200370300200141a80a6a41106a2228201241106a290200370300200141a80a6a41186a222c201241186a290200370300200120122902003703a80a20012802e00b21160240024020012802e40b220e41306c220d0d00420021084200210b0c010b201441206a210342002108200d21044200210b0340427f200b200341086a2903007c200820032903007c22232008542206ad7c220820062008200b542008200b511b22061b210b427f202320061b2108200341306a2103200441506a22040d000b0b024002400240200e41306c2204450d002014200d6a2110201421030340200341286a2903002123200341206a2903002124200341086a2903002125200341106a290300213120032903002132200141d00e6a41186a2206200341186a290300370300200141d00e6a41106a220d2031370300200141d00e6a41086a220e2025370300200120323703d00e202420232008200b10e606220a41ffff03710d02200341306a2103200441506a22040d000b0b410021154102211a02402016450d00201641306c450d002014102e0b4100210a0c010b200141900d6a41086a2215200e290300370300200141900d6a41106a2233200d290300370300200141900d6a41186a22342006290300370300200120012903d00e22233703a005200120233703900d4122102c221a450d19201a20012903900d370100201a200a3b0120201a41186a2034290300370100201a41106a2033290300370100201a41086a20152903003701000240024020044130470d00410121154101210a0c010b200341306a2134201041506a2135410121154101210a03402034210302400340200341286a2903002123200341206a29030021242006200341186a290300370300200d200341106a290300370300200e200341086a290300370300200120032903003703d00e202420232008200b10e606220441ffff03710d012010200341306a2203470d000c030b0b200141a0056a41086a200e2903002223370300200141a0056a41106a200d2903002224370300200141a0056a41186a20062903002225370300200120012903d00e22313703a005200141d80f6a41186a22362025370300200141d80f6a41106a22372024370300200141d80f6a41086a22382023370300200120313703d80f0240200a2015470d00201541016a22332015490d1d201541017422342033203420334b1b22334104203341044b1bad42227e2223422088a74541017421332023a721340240024020150d00200141003602900d0c010b200141023602980d2001201a3602900d2001201541226c3602940d0b200141b00f6a20342033200141900d6a107d20012802b80f211520012802b00f4101460d0520012802b40f211a201541226e21150b200341306a2134201a200a41226c6a223320012903d80f370100203829030021232037290300212420362903002125203320043b0120203341186a2025370100203341106a2024370100203341086a2023370100200a41016a210a20352003470d000b0b2016450d00201641306c450d002014102e0b200141d80f6a41186a2203202c290300370300200141d80f6a41106a22042028290300370300200141d80f6a41086a2206200f290300370300200120012903a80a3703d80f200520153602042005201a3602002005200a360208200520012903d80f37020c202620062903003702002011200429030037020020132003290300370200201c202d470d000b201c2105202d211c0c0e0b2015450d170c160b024020012802f40e41ffffff3f71450d0020012802f00e102e0b024020012802a00a2203450d00200341386c210420012802980a412c6a210303400240200328020041ffffff3f71450d002003417c6a280200102e0b200341386a2103200441486a22040d000b0b200128029c0a2203450d00200341386c450d0020012802980a102e0b0240202a450d00202a41306c450d002029102e0b02402013450d00201e2013412c6c6a210d201e2103034020032204412c6a21030240200441046a2802002206450d00200641226c450d002004280200102e0b200d2003470d000b0b2027450d122027412c6c450d12201e102e0c120b41bcd9cc004118200141d80f6a41f09cc50041c09dc500103e000b41bcd9cc004118200141d80f6a41f09cc50041d09dc500103e000b200e410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b2006410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b2010410c41f49cc700104d000b41f49bc7004128419c9cc7001039000b41e8aac700412b4194abc7001039000b41e899c700413041989ac7001039000b41a89ac700412041c89ac7001039000b202d201c6b2203412c6d210402402003450d002004412c6c210303400240201c41046a2802002204450d00200441306c450d00201c280200102e0b201c412c6a211c200341546a22030d000b0b201e2005201e6b220d412c6d2206412c6c6a2104201e21030240034020042003460d0120014190016a200310be042003412c6a2103200128029001450d000b0240200d450d00201e2006412c6c6a210d201e2103034020032204412c6a21030240200441046a2802002206450d00200641226c450d002004280200102e0b200d2003470d000b0b2027450d012027412c6c450d01201e102e0c010b200120063602980d200120273602940d2001201e3602900d200141d80f6a200141900d6a200141a40a6a200141900f6a109906200141e00f6a280200210e200141e40f6a280200210620012802dc0f210520012802d80f2103200141a0056a200141e80f6a41b40110e9081a20034101460d00200141a80a6a200141a0056a41b40110e9081a20012802a00a212f20012802f80e2135200141d80f6a10df040240024002400240200141f00f6a2903004200510d00200141f80f6a210a02400240202f0d00410021040c010b4200200a290300220b42809ce8af6d7c22082008200b561b210b2035ad42889b047e202fad222442f0aefa017e7c2108202bad42a0ede0017e2123202f21030240202f410176220d450d00202f21040340024002400240417f2008202442e8aede067e7c20237c4280e59af7007c2224200b522024200b541b41016a0e03000501000b02402004200d6a220320044f0d00200421030c040b2003202f490d01200421030c030b2004200d6b220320044d0d00200421030c020b20032004460d022003ad212420032104200d410176220d0d000b0b024003402003220441016a2203202f4b0d0120082003ad42e8aede067e7c20237c4280e59af7007c200b540d000b0b4100211c02402004417f6a20044b0d000340024020082004ad42e8aede067e7c20237c4280e59af7007c200b560d002004211c0c020b2004417e6a21032004417f6a220d21042003200d4d0d000b0b202f201c201c202f4b1b21040b2001200e3602dc0f200120053602d80f200120063602e00f200141e40f6a200141a80a6a41b40110e9081a02400240417f417f417f417f417f417f417f417f417f417f417f417f417f417f417f2006200141ec0f6a2802006a220320032006491b2203200a2802006a220d200d2003491b220320014184106a2802006a220d200d2003491b220320014190106a2802006a220d200d2003491b22032001419c106a2802006a220d200d2003491b2203200141a8106a2802006a220d200d2003491b2203200141b4106a2802006a220d200d2003491b2203200141c0106a2802006a220d200d2003491b2203200141cc106a2802006a220d200d2003491b2203200141d8106a2802006a220d200d2003491b2203200141e4106a2802006a220d200d2003491b2203200141f0106a2802006a220d200d2003491b2203200141fc106a2802006a220d200d2003491b2203200141d80f6a41b0016a2802006a220d200d2003491b220320014194116a2802006a220d200d2003491b220320046b223320034b0d0020330d010b20012802e40f2103200141a0056a200141e80f6a41b00110e9081a200141e00b6a200141a0056a41b00110e9081a0c070b200141b00f6a10f50420012802b00f2210450d0320012902b40f21080240200141c00f6a29030042ffffff3f83500d00200141bc0f6a280200102e0b2008422088a7220d41386c220641386d2203ad42287e220b422088a70d0d200ba72204417f4c0d0d0240024020040d00410821260c010b2004102c2226450d0d0b0240024002400240200441286e223620034f0d002036410174220e2003200e20034b1b220e4104200e41044b1bad42287e220b422088a745410374210e200ba7210502400240200441274b0d00200141003602b00f0c010b200141b00f6a41086a4108360200200120263602b00f2001203641286c3602b40f0b200141d00e6a2005200e200141b00f6a107d200141d80e6a280200210420012802d00e4101460d0120012802d40e2126200441286e21360b201020066a221e2010470d014100212c2010210e0c020b2004450d0f0c0e0b200d41037441786a41037641016a21124100212c2010210320262104024003402003290300210b200141b00f6a41186a2206200341206a290300370300200141b00f6a41106a220d200341186a290300370300200141b00f6a41086a220e200341106a2903003703002001200341086a2903003703b00f0240200341286a280200221c0d00200341386a210e0c020b2003412c6a2802002105200141d00e6a41186a220a2006290300370300200141d00e6a41106a2206200d290300370300200141d00e6a41086a220d200e290300370300200120012903b00f3703d00e0240200541ffffff3f71450d00201c102e0b200420012903d00e370300200441186a200a290300370300200441106a2006290300370300200441086a200d290300370300200441206a200b370300200441286a2104202c41016a212c200341386a2203201e470d000b201e210e2012212c0b201e200e6b220641386d21030b2008a7210d02402006450d00200341386c2104200e412c6a210303400240200328020041ffffff3f71450d002003417c6a280200102e0b200341386a2103200441486a22040d000b0b0240200d450d00200d41386c450d002010102e0b024002400240202c41144b0d00202c41014d0d052026202c417f6a220641286c6a21054100210d0340202c20062203417f6a2206490d030240202c20066b221c4102490d002026200341286c6a220341206a220e2903002026200641286c6a220441206a220a290300220b5a0d00200141d00e6a41186a221e200441186a2210290300370300200141d00e6a41106a2212200441106a2214290300370300200141d00e6a41086a221a200441086a2215290300370300200120042903003703d00e200420032903003703002015200341086a2903003703002014200341106a2903003703002010200341186a290300370300200a200e2903003703000240201c4103490d00200d417f6a210a41002104200521030340200341c8006a220e290300200b5a0d01200a2004460d05200341206a200e290300370300200341186a200341c0006a290300370300200341106a200341386a290300370300200341086a200341306a2903003703002003200341286a220e290300370300200e2103200d2004417f6a2204470d000b200e21030b200320012903d00e3703002003200b370320200341186a201e290300370300200341106a2012290300370300200341086a201a2903003703000b200541586a2105200d417f6a210d20060d000c060b0b202c410176ad42287e220b422088a70d0f200ba72237417f4c0d0f2037102c222d450d0e202641586a2130202641a87f6a2134410421144100212e41002110202c2113034020132105410021134101210e02402005417f6a220d450d0002400240024002400240024002402026200d41286c6a41206a290300200541286c220a20266a41506a290300220b540d002005417e6a210d2034200a6a2104410021134100210303400240200d2003470d002005210e0c090b200341016a2103200b200429030022085a2106200441586a21042008210b20060d000b200341016a210e2003417f7320056a210d0c010b2034200a6a2103024003400240200d4101470d004100210d0c020b200d417f6a210d200b20032903002208542104200341586a21032008210b20040d000b0b2005200d490d012005202c4b0d022005200d6b220e4101762206450d002030200a6a21032026200d41286c6a21040340200141b00f6a41206a220a200441206a221c290300370300200141b00f6a41186a221e200441186a2212290300370300200141b00f6a41106a221a200441106a2215290300370300200141b00f6a41086a2216200441086a2213290300370300200120042903003703b00f200341206a2227290300210b200341186a22112903002108200341106a220f2903002123200341086a2228290300212420042003290300370300201320243703002015202337030020122008370300201c200b3703002027200a2903003703002011201e290300370300200f201a29030037030020282016290300370300200320012903b00f370300200341586a2103200441286a21042006417f6a22060d000b0b0240200d0d00200d21130c060b0240200e41094d0d00200d21130c060b2005202c4b0d03200d20056b21062026200d41286c6a210a03402005200d417f6a2213490d050240200520136b220e4102490d002026200d41286c6a220341206a220d2903002026201341286c6a220441206a221c290300220b5a0d00200141d00e6a41186a221e200441186a2212290300370300200141d00e6a41106a221a200441106a2215290300370300200141d00e6a41086a2216200441086a2227290300370300200120042903003703d00e200420032903003703002027200341086a2903003703002015200341106a2903003703002012200341186a290300370300201c200d2903003703000240200e4103490d0041012104200a21030340200341c8006a220d290300200b5a0d01200620046a4101460d06200341206a200d290300370300200341186a200341c0006a290300370300200341106a200341386a290300370300200341086a200341306a2903003703002003200341286a220d290300370300200d21032006200441016a22046a0d000b200d21030b200320012903d00e3703002003200b370320200341186a201e290300370300200341106a201a290300370300200341086a20162903003703000b2013450d06200a41586a210a2006417f6a21062013210d200e410a4f0d060c000b0b200d200541e4d1cc001057000b2005202c41e4d1cc00104d000b2004200e41d4d1cc00103c000b2005200d417f6a2213490d002005202c41f4d1cc00104d000b2013200541f4d1cc001057000b02402010202e470d00202e41016a2203202e490d11202e41017422042003200420034b1b22034104200341044b1b220341ffffffff017120034641027421042003410374210302400240202e0d00200141003602b00f0c010b200141043602b80f200120143602b00f2001202e4103743602b40f0b200141d00e6a20032004200141b00f6a107d20012802d80e2103024020012802d00e4101470d002003450d120c110b20012802d40e21142003410376212e0b201420104103746a2203200e36020420032013360200201041016a22272110024020274102490d0002400240024003400240024002400240201420272210417f6a22274103746a2203280200450d00201041037420146a220e41746a280200220d200328020422044d0d00201041024d0d0820142010417d6a22034103746a28020422062004200d6a4d0d01201041034d0d08200e41646a2802002006200d6a4b0d080c010b20104103490d012003280204210420142010417d6a22034103746a28020421060b20062004490d010b2010417e6a21030b02402010200341016a22114d0d00201020034d0d02201420034103746a221a280204220f201a2802006a2203201420114103746a22152802002216490d032003202c4b0d04201a41046a21282026201641286c6a221e2015280204221241286c22046a210e200341286c210602400240200320166b220520126b22032012490d00202d201e200410e908221c20046a210d0240024020124101480d00200520124a0d010b201e2103201c21040c020b202620066a210a201c2104201e210303402003200e2004200e41206a290300200441206a2903005422051b2206290300370300200341206a200641206a290300370300200341186a200641186a290300370300200341106a200641106a290300370300200341086a200641086a2903003703002004200441286a20051b2104200341286a2103200e41286a200e20051b220e200a4f0d02200d20044b0d000c020b0b202d200e200341286c220410e908220520046a210d0240024020124101480d00200341014e0d010b200e2103200521040c010b203020066a2106200e210303402006200341586a220a200d41586a221c200d41786a290300200341786a29030054220e1b2204290300370300200641206a200441206a290300370300200641186a200441186a290300370300200641106a200441106a290300370300200641086a200441086a290300370300200d201c200e1b210d0240201e200a2003200e1b2203490d00200521040c020b200641586a2106200521042005200d490d000b0b20032004200d20046b220620064128706b10e9081a2028200f20126a360200201a20163602002015201541086a20102011417f736a41037410ea081a41012110202741014d0d050c010b0b201120104184d2cc00103c000b200320104194d2cc00103c000b2016200341a4d2cc001057000b2003202c41a4d2cc00104d000b2013450d040c000b0b410120046b201c41d4d1cc00103c000b2006202c41c4d1cc001056000b41baa9c700413e41f8a9c700105d000b0240202e41ffffffff0171450d002014102e0b2037412870210320374128490d0020372003460d00202d102e0b2026202c41286c6a211e4100210a20012802a40a2110202621050340201e2005460d03024002400240024002400240024002400240024002400240024002400240024002402010200510a0022203450d0020032802002103024020012802e00f220e450d00200e41037441786a41037641016a210d4100210620012802d80f2104034020042802002003460d03200441086a2104200d200641016a2206470d000b0b024020012802ec0f221c450d00201c410c6c41746a2106201c410274417c6a41027641016a210e4100210d20012802e40f2104034020042802002003460d04200641746a21062004410c6a2104200e200d41016a220d470d000b0b024020012802f80f220e450d00200e41047441706a41047641016a210d4100210620012802f00f2104034020042802002003460d05200441106a2104200d200641016a2206470d000b0b0240200128028410221c450d00201c41146c416c6a2106201c410274417c6a41027641016a210e4100210d20012802fc0f2104034020042802002003460d062006416c6a2106200441146a2104200e200d41016a220d470d000b0b0240200128029010221c450d00201c41186c41686a2106201c41037441786a41037641016a210e4100210d2001280288102104034020042802002003460d07200641686a2106200441186a2104200e200d41016a220d470d000b0b0240200128029c10221c450d00201c411c6c41646a2106201c410274417c6a41027641016a210e4100210d2001280294102104034020042802002003460d08200641646a21062004411c6a2104200e200d41016a220d470d000b0b024020012802a810220e450d00200e41057441606a41057641016a210d4100210620012802a0102104034020042802002003460d09200441206a2104200d200641016a2206470d000b0b024020012802b410221c450d00201c41246c415c6a2106201c410274417c6a41027641016a210e4100210d20012802ac102104034020042802002003460d0a2006415c6a2106200441246a2104200e200d41016a220d470d000b0b024020012802c010221c450d00201c41286c41586a2106201c41037441786a41037641016a210e4100210d20012802b8102104034020042802002003460d0b200641586a2106200441286a2104200e200d41016a220d470d000b0b024020012802cc10221c450d00201c412c6c41546a2106201c410274417c6a41027641016a210e4100210d20012802c4102104034020042802002003460d0c200641546a21062004412c6a2104200e200d41016a220d470d000b0b024020012802d810221c450d00201c41306c41506a2106201c41047441706a41047641016a210e4100210d20012802d0102104034020042802002003460d0d200641506a2106200441306a2104200e200d41016a220d470d000b0b024020012802e410221c450d00201c41346c414c6a2106201c410274417c6a41027641016a210e4100210d20012802dc102104034020042802002003460d0e2006414c6a2106200441346a2104200e200d41016a220d470d000b0b024020012802f010221c450d00201c41386c41486a2106201c41037441786a41037641016a210e4100210d20012802e8102104034020042802002003460d0f200641486a2106200441386a2104200e200d41016a220d470d000b0b024020012802fc10221c450d00201c413c6c41446a2106201c410274417c6a41027641016a210e4100210d20012802f4102104034020042802002003460d10200641446a21062004413c6a2104200e200d41016a220d470d000b0b024002400240200128028811220e450d00200e41067441406a41067641016a210d410021062001280280112104034020042802002003460d02200441c0006a2104200d200641016a2206470d000b0b024020012802941122120d00410021040c130b201241c4006c41bc7f6a210d2012410274417c6a41027641016a211c4100210e200128028c112106034020062802002003460d02200d41bc7f6a210d200641c4006a210641002104201c200e41016a220e470d000c130b0b2004200441c0006a200e2006417f736a41067410ea081a2001200e417f6a360288110c100b2006200641c4006a200d10ea081a20012012417f6a360294110c0f0b2036450d11203641286c450d112026102e0c110b2004200441086a200e2006417f736a41037410ea081a2001200e417f6a3602e00f0c0d0b20042004410c6a200610ea081a2001201c417f6a3602ec0f0c0c0b2004200441106a200e2006417f736a41047410ea081a2001200e417f6a3602f80f0c0b0b2004200441146a200610ea081a2001201c417f6a360284100c0a0b2004200441186a200610ea081a2001201c417f6a360290100c090b20042004411c6a200610ea081a2001201c417f6a36029c100c080b2004200441206a200e2006417f736a41057410ea081a2001200e417f6a3602a8100c070b2004200441246a200610ea081a2001201c417f6a3602b4100c060b2004200441286a200610ea081a2001201c417f6a3602c0100c050b20042004412c6a200610ea081a2001201c417f6a3602cc100c040b2004200441306a200610ea081a2001201c417f6a3602d8100c030b2004200441346a200610ea081a2001201c417f6a3602e4100c020b2004200441386a200610ea081a2001201c417f6a3602f0100c010b20042004413c6a200610ea081a2001201c417f6a3602fc100b410121040b200541286a2105200a20046a220a2033490d000c030b0b200141d80f6a109b060b202a450d02202a41306c450d022029102e0c020b20012802e40f210320012802e00f210620012802dc0f210e20012802d80f2105200141a0056a200141e80f6a41b00110e9081a02402036450d00203641286c450d002026102e0b200141e00b6a200141a0056a41b00110e9081a0b2001200336029c0d200120063602980d2001200e3602940d200120053602900d200141a00d6a200141e00b6a41b00110e9081a20012029201841306c6a3602e40f200120293602e00f2001202a3602dc0f200120293602d80f200141b00f6a200141d80f6a10c201200141a0056a200141900d6a10ca0120012802b80f210320012802b00f211c200141d80f6a200141a0056a41c00110e9081a200141e00b6a200141d80f6a200141980a6a200141f00e6a108d06024020012802e00b4101460d00200141e00b6a41086a280200210420012802e40b21062001200141e00b6a410c6a2802003602e80b200120043602e40b200120063602e00b200141d80f6a200141e00b6a200141800f6a200141980a6a10e70620012802d80f4101460d00200141d80f6a41086a280200211e200141d80f6a201c200320012802dc0f2212200141d80f6a410c6a280200221010b704024020012802d80f4101460d00200141e00f6a280200211820012802dc0f2114200141e40f6a2802002203410674211a024020030d0042002131417f210e20142103420021234200213242002124417f2105417f210a417f21150c040b201441206a2103201a2105427f2139427f21254200213242002124420021314200212303400240200341106a280200220a0d00200341206a21032039422088a721052025422088a721152039a7210e2025a7210a0c050b200341146a280200210e200141f0006a200341086a290300220b420020032903002208420010e80820014180016a200842002008420010e8082031427f200129038001200b2001290378223a84203a8442005220014180016a41086a290300223a2001290370223b203b7c7c223b203a547222041b7c223a20315422062023427f203b20041b7c2006ad7c223120235420312023511b21042008203954200b202554200b2025511b2106203220087c223b203254220d2024200b7c200dad7c223220245420322024511b210d0240200e450d00200e41306c450d00200a102e0b427f203120041b2123427f203a20041b2131200b202520061b21252008203920061b2139427f2032200d1b2124427f203b200d1b2132200341c0006a2103200541406a22050d000b2039422088a721052025422088a721152039a7210e2025a7210a0c040b02402010450d002010412c6c21042012210303400240200341046a2802002206450d00200641306c450d002003280200102e0b2003412c6a2103200441546a22040d000b0b201e450d00201e412c6c450d002012102e0b024020012802b40f41ffffff3f71450d00201c102e0b200141900d6a109b060b200141900f6a10bd02200141800f6a10bc02024020012802f40e41ffffff3f71450d0020012802f00e102e0b024020012802a00a2203450d00200341386c210420012802980a412c6a210303400240200328020041ffffff3f71450d002003417c6a280200102e0b200341386a2103200441486a22040d000b0b200128029c0a2203450d02200341386c450d0220012802980a102e0c020b2014201a6a220d2003460d0003402003220441c0006a21030240200441346a2802002206450d00200641306c450d00200441306a280200102e0b200d2003470d000b0b0240201841ffffff1f71450d002014102e0b02402010450d002010412c6c21042012210303400240200341046a2802002206450d00200641306c450d002003280200102e0b2003412c6a2103200441546a22040d000b0b0240201e450d00201e412c6c450d002012102e0b200141e80e6a4200370300200141e00e6a4200370300200141d00e6a41086a22034200370300200142003703d00e200141d80f6a41a5fec600411a1081022003200141d80f6a41086a2204290000370300200120012900d80f3703d00e200141d80f6a4180c3c8004105108102200c41086a2004290000370000200c20012900d80f370000200141e8006a200141d00e6a4120108e02200128026c21062001280268210d200141d8086a200141900d6a41c00110e9081a024020012802b40f41ffffff3f71450d00201c102e0b200141900f6a10bd02200141800f6a10bc02024020012802f40e41ffffff3f71450d0020012802f00e102e0b024020012802a00a2203450d00200341386c210420012802980a412c6a210303400240200328020041ffffff3f71450d002003417c6a280200102e0b200341386a2103200441486a22040d000b0b20064101200d1b21040240200128029c0a2203450d00200341386c450d0020012802980a102e0b20014198076a200141d8086a41c00110e9081a200141a0056a41286a22062023370300200141a0056a41186a220d2024370300200120313703c005200120323703b005200120153602ac052001200a3602a805200120053602a4052001200e3602a005200141a0056a41306a20014198076a41c00110e90821032001200436029007200141d80f6a200141a0056a10b8060240024020012d00d80f4106470d00200141900d6a200310ca01200141d80f6a41286a2006290300370300200141d80f6a41206a200141a0056a41206a290300370300200141d80f6a41186a200d290300370300200141d80f6a41106a200141a0056a41106a290300370300200141d80f6a41086a200141a0056a41086a290300370300200120012903a0053703d80f2001280290072104200141d80f6a41306a200141900d6a41c00110e9081a200120043602c811200141d8086a200141d80f6a10b90620012802d8084101470d010b2003109b060c020b20014194096a280200210e20014190096a280200210d0240200141d8086a41c0006a2802002203450d0020034106742104200d41346a21030340024020032802002206450d00200641306c450d002003417c6a280200102e0b200341c0006a2103200441406a22040d000b0b200141ac056a21030240200e41ffffff1f71450d00200d102e0b20012903a005210b20012802a8052104200141b0036a200341ec0110e9081a200141c0016a200141b0036a41ec0110e9081a200141a0056a200141c0016a41ec0110e9081a20014180116a2004360200200141f8106a200b3703002001411b3602f010200142023703c01020014184116a200141a0056a41ec0110e9081a200141f4126a2035360200200141f0126a202f3602002001200141d80f6a3602b003200141c0016a200141b0036a109005200141b0036a41086a200141c0016a41086a280200360200200120012903c0013703b003200141b0036a10e8061a024020012903c0104202510d0020012d00d80f41ff01714102470d0020012802e00f450d0020012802dc0f102e0b200141f0106a108b020c010b20014198076a200141d8086a41c00110e9081a0b024010e906450d00200141d80f6a41186a220e4200370300200141d80f6a41106a22044200370300200141d80f6a41086a22034200370300200142003703d80f200141a0056a41a8f8c60041041081022003200141a0056a41086a2206290000370300200120012900a0053703d80f200141a0056a41c98bc500410b108102200e2006290000370300200420012900a005370300200141d8006a200141d80f6a1085032001290360210820012802582105200141d00e6a41186a220a4200370300200141d00e6a41106a220d4200370300200141d00e6a41086a221c4200370300200142003703d00e200141d80f6a41a8f8c6004104108102201c2003290000370300200120012900d80f3703d00e200141d80f6a41fa8bc500410a108102200a2003290000370300200d20012900d80f370300200141c8006a200141d00e6a108503200141386a2001290350420020012802481b420042e012420010e80802400240024002400240200129034050450d002001290338210b200e42003703002004420037030020034200370300200142003703d80f200141a0056a41a8f8c600410410810220032006290000370300200120012900a0053703d80f200141a0056a41e38bc500410b108102200441086a2006290000370000200420012900a005370000200141286a200141d80f6a1085030240200b2001290330420020012802281b7c2223200b540d00024042002008420020051b220b20237d22082008200b561b42017c220b42e012200b42e012541b421880a741ff017141314b0d00200120223602840c2001201b3602800c200120193602fc0b200120203602f80b200120213602f40b2001201f3602f00b200120093602ec0b2001201d3602e80b200120073602e40b200120173602e00b41002103200141e00b6a211e200141b00f6a21170c060b200141d00e6a41186a4200370300200141d00e6a41106a4200370300200141d00e6a41086a22044200370300200142003703d00e200141d80f6a41a081ca0041071081022004200141d80f6a41086a2203290000370300200120012900d80f3703d00e200141d80f6a41e4d1c100410c108102200d41086a2003290000370000200d20012900d80f370000200141206a200141d00e6a4120108e022001280224212720012802202111200141d80f6a41186a22044200370300200141d80f6a41106a2206420037030020034200370300200142003703d80f200141a0056a41bed8c80041081081022003200141a0056a41086a220d290000370300200120012900a0053703d80f200141a0056a41e9d8c80041041081022004200d290000370300200620012900a005370300200141b0036a41046a41003a0000200141003602b003200141186a200141d80f6a4120200141b0036a4105410010ca040240024002402001280218450d002001200128021c2203410520034105491b3602a4052001200141b0036a3602a005200141106a200141a0056a10ab012001280210450d010b410021160c010b200128021421160b200141b0036a108703200141d80f6a41e9dabdf30610ea0620012802dc0f211320012802d80f22102103024020012802e00f2204450d0020044105742104201021030340200341206a2103200441606a22040d000b0b02400240200320106b410575221241144b0d00201241014d0d0620102012417e6a22034105746a210441022106034020122003490d022004200610eb06200441606a2104200641016a21062003417f6a2203417f470d000c070b0b2012410176220341ffffff3f712003470d0920034105742226417f4c0d092026102c2214450d08201041606a2115201041a07f6a210c4104212241002118410021212012211a0340201a211b4100211a410121060240201b417f6a220d450d000240024002400240024002402010200d4105746a201b410574220520106a41406a412010ec084100480d00201b417e6a210d200c20056a21034100211a4100210403400240200d2004470d00201b21060c080b200441016a2104200341206a2003412010ec082106200341606a21032006417f4a0d000b200441016a21062004417f73201b6a210d0c010b200c20056a2103024003400240200d4101470d004100210d0c020b200d417f6a210d200341206a2003412010ec082104200341606a210320044100480d000b0b201b200d490d01201b20124b0d02201b200d6b2206410176220e450d00201520056a21032010200d4105746a21040340200141d00e6a41186a2205200441186a220a290000370300200141d00e6a41106a2207200441106a2209290000370300200141d00e6a41086a2219200441086a2217290000370300200120042900003703d00e200341086a221d290000210b200341106a221f2900002108200341186a2220290000212320042003290000370000200a2023370000200920083700002017200b37000020202005290300370000201f2007290300370000201d2019290300370000200320012903d00e370000200341606a2103200441206a2104200e417f6a220e0d000b0b0240200d0d00200d211a0c050b0240200641094d0d00200d211a0c050b201b20124b0d02201b200d6b2106200d417f6a21032015200d4105746a21040340201b2003490d0a2004200641016a220610eb062003417f6a220d20034f0d04200441606a2104200d21032006410a490d000c040b0b200d201b41e4d1cc001057000b201b201241e4d1cc00104d000b201b200d417f6a2203490d06201b201241f4d1cc00104d000b200d41016a211a0b024020212018470d00201841016a22032018490d0b201841017422042003200420034b1b22034104200341044b1b220341ffffffff01712003464102742104200341037421030240024020180d00200141003602d80f0c010b200141043602e00f200120223602d80f200120184103743602dc0f0b200141a0056a20032004200141d80f6a107d20012802a8052103024020012802a0054101470d002003450d0c0c0b0b20012802a4052122200341037621180b202220214103746a220320063602042003201a360200202141016a22202121024020204102490d0002400240024003400240024002400240202220202221417f6a22204103746a2203280200450d00202141037420226a220e41746a280200220d200328020422044d0d00202141024d0d0820222021417d6a22034103746a28020422062004200d6a4d0d01202141034d0d08200e41646a2802002006200d6a4b0d080c010b20214103490d012003280204210420222021417d6a22034103746a28020421060b20062004490d010b2021417e6a21030b02402021200341016a221b4d0d00202120034d0d02202220034103746a2217280204221c20172802006a22032022201b4103746a221d280200221f490d03200320124b0d04201741046a211e2010201f4105746a2209201d280204221941057422046a210d20034105742106024002402003201f6b220520196b22032019490d0020142009200410e908220720046a210e0240024020194101480d00200520194a0d010b20092103200721040c020b201020066a210a200721042009210303402003200d2004200d2004412010ec0841004822051b2206290000370000200341186a200641186a290000370000200341106a200641106a290000370000200341086a200641086a2900003700002004200441206a20051b2104200341206a2103200d41206a200d20051b220d200a4f0d02200e20044b0d000c020b0b2014200d2003410574220410e908220720046a210e0240024020194101480d00200341014e0d010b200d2103200721040c010b201520066a2106200d21030340200341606a2104200e41606a210d20062004200d200d2004412010ec08410048220a1b2205290000370000200641186a200541186a290000370000200641106a200541106a290000370000200641086a200541086a290000370000200e200d200a1b210e0240200920042003200a1b2203490d00200721040c020b200641606a2106200721042007200e490d000b0b20032004200e20046b41607110e9081a201e201c20196a3602002017201f360200201d201d41086a2021201b417f736a41037410ea081a41012121202041014d0d050c010b0b201b20214184d2cc00103c000b200320214194d2cc00103c000b201f200341a4d2cc001057000b2003201241a4d2cc00104d000b201a450d050c000b0b2003201241c4d1cc001056000b41e8b2c40041fa0041f4b3c400105d000b41e8b2c40041fa0041e4b3c400105d000b2003201b41f4d1cc001057000b0240201841ffffffff0171450d002022102e0b2026450d002014102e0b20012802b403210420012802b003210320012802b8032106200120163602d40f200120003602d00f20012027410020111b220d3602cc0f200120123602c80f200120133602c40f200120103602c00f200141003602bc0f2001200320064105746a22063602b80f200120033602b40f200120043602b00f200120163602840c200120003602800c2001200d3602fc0b200120123602f80b200120133602f40b200120103602f00b200141003602ec0b200120063602e80b200120033602e40b200120043602e00b200141e00b6a211e200141b00f6a21170b200141d80f6a41106a2204201741106a221d290200220b370300200141d80f6a41186a2206201741186a221f2902002208370300200141b0036a41086a220d201741086a2220290200370300200141b0036a41106a220e200b370300200141b0036a41186a22052008370300200141b0036a41206a220a201741206a221b290200370300200141c0016a41206a2207200141a0056a41206a290200370300200141c0016a41186a2209200141a0056a41186a290200370300200141c0016a41106a2221200141a0056a41106a290200370300200141c0016a41086a2219200141a0056a41086a290200370300200120172902003703b003200120012902a0053703c001200141900d6a41206a2222200141d80f6a41206a221c290300370300200141900d6a41186a22102006290300370300200141900d6a41106a22122004290300370300200141900d6a41086a2214200141d80f6a41086a221a290300370300200120012903d80f3703900d200120033602dc0f200141013602d80f201a20012903b0033703002004200d2903003703002006200e290300370300201c200529030037030020014180106a200a29030037030020014100360288102001418c106a220320012903c00137020020014194106a20192903003702002001419c106a2021290300370200200141a4106a2009290300370200200141ac106a2007290300370200200141003602b410200141d8106a2022290300370300200141d0106a2010290300370300200141c8106a2012290300370300200141c0106a2014290300370300200141b8106a221020012903900d370300200141b4106a211c20014188106a2122200141f40f6a2106200141ec0f6a210d200141e40f6a210e20014190106a210920014198106a2121200141a0106a2119410021040340024002402004450d00202210ec064108470d0102402001280288102204450d000240200128028c1041ffffff3f71450d002004102e0b20012802a01041ffffff3f71450d00200128029c10102e0b20032017290200370200200341086a2020290200370200200341106a201d290200370200200341186a201f290200370200200341206a201b29020037020020014100360288100b20062902002108200620012903b805370200200d2902002123200d20012903b005370200200e2902002124200e20012903a805370200200141003602a00520012902dc0f210b200120012903a0053702dc0f0240200ba72204450d0020012802fc0f2105200128028010210a20012802841021072001200b37038810200920243703002021202337030020192008370300200120073602b0102001200a3602ac10200120053602a8100c020b024020012802b410450d00201c10ec064108470d01024020012802b4102203450d000240200141b8106a28020041ffffff3f71450d002003102e0b200141cc106a28020041ffffff3f71450d0020012802c810102e0b2010201e290200370200201041086a201e41086a290200370200201041106a201e41106a290200370200201041186a201e41186a290200370200201041206a201e41206a290200370200200141003602b4100b024020012802d80f450d0020012802dc0f2203450d00024020012802e00f41ffffff3f71450d002003102e0b200141f40f6a28020041ffffff3f71450d00200141f00f6a280200102e0b02402001280288102203450d000240200128028c1041ffffff3f71450d002003102e0b20012802a01041ffffff3f71450d00200128029c10102e0b20012802b4102203450d020240200141b8106a28020041ffffff3f71450d002003102e0b200141cc106a28020041ffffff3f71450d0220012802c810102e0c020b20012802881021040c000b0b200224000f0b1036000b1038000b1800200020014101472003ad4220862002ad84101a10da080b8d0101017f230041206b22062400200641086a200310dc0820004101472002ad4220862001ad84200641186a200641106a2200200628020822014101461b2903002005ad4220862004ad841019210202402001450d002000280200450d00200628020c102e0b024020032802002201450d00200341046a280200450d002001102e0b200641206a240020024101460b4401017f2000101d2201290000370000200041186a200141186a290000370000200041106a200141106a290000370000200041086a200141086a2900003700002001102e0bc11d09097f027e057f017e027f017e017f047e037f230041f0006b220424000240200241086a22052802002206200120062001491b2207450d00410021080240024002400240024003402002280200210902402006410274220a450d00200a210b2009210c02400340200c28020022012802080d012001417f3602080240200141f4006a2d00000d0002402001290330220d200141386a290300220e844200520d00200142013703202001427f370310200141286a4200370300200141186a427f3703000c010b200441086a427f427f200d200e10e7082001427f370320200141286a427f370300200141186a200441086a41086a290300370300200120042903083703100b200c41046a210c20014100360208200b417c6a220b0d000c020b0b4194dacc004110200441186a41c498c90041d498c900103e000b2003280200220f2003280208221041e0006c6a211102402010450d00200f21120340024020122802382201450d00200141d8006c2113201228023041306a210c02400340200c28020022012802080d01417f210b2001417f3602080240200141f4006a2d00000d002001290330220d200141386a290300220e84500d00200441186a2012290310201241186a2903002012290300201241086a290300200d200e10ea0420012001290310220d427f200d427f20042903202004280218410146220b1b22147c220e200e200d542215200141186a2216290300220d427f200441186a41106a290300200b1b22177c2015ad7c220e200d54200e200d511b220b1b20142017845022151b3703102016200d427f200e200b1b20151b3703002001280208210b0b2001200b41016a360208200c41d8006a210c201341a87f6a2213450d020c000b0b4194dacc004110200441186a41c498c900418499c900103e000b201241e0006a22122011470d000b0b200841016a21182009200a6a2116200641027421012009417c6a210b03402001450d07200b41046a220b280200220c280208221341016a41004c0d06200c20133602082001417c6a2101200c41f4006a2d00000d000b200b2802002213280208220c41016a41004c0d042013200c36020802402001450d00200b41046a210c201341286a2903002114201341186a2903002119201329032021172013290310211a0340200c2802002201280208221341016a41004c0d05200120133602080240200141f4006a2d00000d0020012013360208200141186a290300210d2001290310210e02400240024020172001290320221b852014200141286a290300221c85844200520d00201a200e542019200d542019200d511b0d03201a200e852019200d858442005221120c010b2017201484500d01201b201c84500d024110102c2201450d072001201a3e020c2001201a4220883e0208200120193e0204200120194220883e020020044284808080c00037025420042001360250200441d0006a10bb074110102c2201450d072001201b3e020c2001201b4220883e02082001201c3e02042001201c4220883e020020044284808080c00037026420042001360260200441e0006a10bb07200441186a41086a2213200441d0006a41086a221228020036020020042004290350370318200441306a200441186a200441e0006a10bc070240200428026441ffffffff0371450d002004280260102e0b4110102c2201450d072001200e3e020c2001200e4220883e02082001200d3e02042001200d4220883e020020044284808080c00037025420042001360250200441d0006a10bb074110102c2201450d07200120173e020c200120174220883e0208200120143e0204200120144220883e020020044284808080c00037026420042001360260200441e0006a10bb072013201228020036020020042004290350370318200441c0006a200441186a200441e0006a10bc070240200428026441ffffffff0371450d002004280260102e0b2004280230211d024002402004280238221e0d0041012106410021130c010b201e4102742212417c6a41027641016a211541002113201d2101034002402001280200450d00410021060c020b200141046a210141012106201341016a21132012417c6a22120d000b201521130b2004280240210a024002400240024002402004280248221f450d00200a201f4102746a210941002112201f2115200a2101034020012802000d022015417f6a2115201241016a2112200141046a22012009470d000b0b410121124100210920060d010c030b410121092006450d010b410020096b21120c010b201e2013490d07417f201f20126b2212201e20136b22064720062012491b22120d00201d20134102746a21092015200620152006491b41016a211541002113034002402015417f6a22150d00410021120c020b200120136a2112200920136a2106201341046a2113417f20062802002206201228020022124720062012491b2212450d000b0b0240200428024441ffffffff0371450d00200a102e0b200428023441ffffffff0371450d00201d102e0b20124101470d010b200e211a200d2119201b2117201c2114200c210b0b200c41046a220c2016470d000b0b200b450d060240200b280200220c2802080d00417f2101200c417f360208200c2008360250200c41f4006a41013a000002402010450d00200c41106a41c4006a21120340200f221341e0006a210f02402013280238220b450d0020132802302101200b41d8006c210b03400240200141346a2012412010ec080d00201341186a22152903002117200c41186a2216290300210d20132903102114200c290310210e200c2903202119200141186a200c41286a2206290300370300200141106a20193703002001200d4200200d20177d200e201454ad7d2219200e20147d221b200e562019200d562019200d511b22091b201420178450220a1b3703082001200e4200201b20091b200a1b3703002016290300210d2006290300210e200c29031021142013200c290320370320201341286a200e370300201320143703102015200d3703000b200141d8006a2101200b41a87f6a220b0d000b0b200f2011470d000b200c28020821010b200c200141016a36020820182007460d0720052802002106201821080c010b0b4194dacc004110200441186a41c498c900419499c900103e000b2013201e41d4dacc001056000b1036000b41bcd9cc004118200441186a41f09cc50041f498c900103e000b41bcd9cc004118200441186a41b4ebc00041e09dc500103e000b41bcd9cc004118200441186a41e498c90041f498c900103e000b20032802002201200328020841e0006c6a2111200441286a2116024003400240024002402001220b2011460d00200b41386a220a280200220c0d0141002115200a4100360200410021090c020b200441186a41086a2201200241086a280200360200200441186a41146a200341086a2802003602002000410036020020002002290200370204200420032902003702242000410c6a2001290300370200200041146a200441286a2903003702000c030b200b2802302101200c41d8006c2113024003400240200141306a2212280200220c280208221541016a41004a0d0041bcd9cc004118200441186a41e498c90041a499c900103e000b200c201536020802400240200c41f4006a2d0000450d00200441186a200b290300200b41086a2903002001290300200141086a290300200b290310200b41186a29030010ea042004290320210d200141286a427f20162903002004280218410146220c1b370300200141206a427f200d200c1b3703000c010b200141286a4200370300200141206a42003703000b02402012280200220c2802080d00200c417f360208200141206a290300210d200141286a290300210e200c4100360208200c427f200d200c29034022147c220d200d2014542212200e200c41c8006a2215290300220d7c2012ad7c220e200d54200e200d511b22121b3703402015427f200e20121b370300200141d8006a2101201341a87f6a2213450d020c010b0b4194dacc004110200441186a41c498c90041b499c900103e000b200a280200211541002109200a41003602002015450d0041002106410021094100210c02400340024002402009450d00200c41d8006c21010340200b280230221220016a221341206a290300201341286a290300844200510d02201220066a20016a201341d80010e9081a200141d8006a21012015200c41016a220c4b0d000c040b0b200b2802302212200c41d8006c6a41206a210103402001290300200141086a29030084500d01200141d8006a21012015200c41016a220c4b0d000b410021090c030b2012200c41d8006c6a220128023022132013280200417f6a360200200c41016a210c0240200128023022132802000d00201341046a22132013280200417f6a360200200141306a280200220141046a2802000d002001102e0b200941016a2109200641a87f6a21062015200c4b0d000b0b024020090d00410021090c010b200b2802302201200c20096b41d8006c6a2001200c41d8006c6a2015200c6b41d8006c10ea081a0b200b41e0006a2101200a201520096b3602002004200b10bb042004280200220c450d000b200428020421012000428180808030370200200041086a2001ad422086200cad8437020020032802002115024020032802082201450d002015200141e0006c6a211220152101034002402001221341386a2802002201450d00200141d8006c210c201328023041306a210103402001280200220b200b280200417f6a36020002402001280200220b2802000d00200b41046a220b200b280200417f6a3602002001280200220b41046a2802000d00200b102e0b200141d8006a2101200c41a87f6a220c0d000b0b201341e0006a21010240201341346a280200220c450d00200c41d8006c450d002013280230102e0b20012012470d000b0b0240200341046a2802002201450d00200141e0006c450d002015102e0b200228020021130240200241086a2802002201450d002001410274210c2013210103402001280200220b200b280200417f6a36020002402001280200220b2802000d00200b41046a220b200b280200417f6a3602002001280200220b41046a2802000d00200b102e0b200141046a2101200c417c6a220c0d000b0b200241046a28020041ffffffff0371450d002013102e0b200441f0006a24000b930301067f230041106b2202240002400240024002400240024020014102490d0020002802042203280208220441016a41004c0d022003200436020820002802002204280208220541016a41004c0d032003280250210320042005360208200320042802504f0d00200028020021032000200028020436020002400240200141034f0d00200041046a21000c010b200041046a21042001417f6a21060340200441046a22002802002205280208220741016a41004c0d06200520073602082003280208220741016a41004c0d072005280250210520032007360208024020052003280250490d00200421000c020b2006450d0320042000280200360200200021042006417f6a22064101470d000b0b200020033602000b200241106a24000f0b2001200141d4d1cc00103c000b41bcd9cc004118200241086a41c4f8c90041d4f8c900103e000b41bcd9cc004118200241086a41c4f8c90041d4f8c900103e000b41bcd9cc004118200241086a41c4f8c90041d4f8c900103e000b41bcd9cc004118200241086a41c4f8c90041d4f8c900103e000bb51006037f017e017f017e0c7f027e23004180026b22022400200141346a2802002103200141386a2802002104200141086a29030021052001280230210620012903002107200241086a41186a200141d4006a290000370300200241086a41106a200141cc006a290000370300200241086a41086a200141c4006a2900003703002002200129003c37030820022005370330200220073703282006200441d8006c22086a21092006210102400240024002402004450d004100210a20024198016a41086a210b20024198016a41106a210c20024198016a41186a210d024002400340200b2006200a6a2201413c6a290200370300200c200141c4006a290200370300200d200141cc006a29020037030020024198016a41206a200141d4006a2802003602002002200141346a29020037039801200141306a280200220e450d02200141286a2903002105200141206a2903002107200241e0016a41186a220f200d290300370300200241e0016a41106a2210200c290300370300200241e0016a41086a2211200b29030037030020022002290398013703e00102400240200720052002290328200241286a41086a29030010e606221241ffff03710d004100210f0c010b200241c0016a41186a200f290300370300200241c0016a41106a2010290300370300200241c0016a41086a2011290300370300200220022903e0013703c0014101210f201221130b200e200e280200417f6a2210360200024020100d00200e41046a22102010280200417f6a221036020020100d00200e102e0b200f0d012008200a41d8006a220a470d000b200921010c020b200241386a41086a220e200241c0016a41086a290300370300200241386a41106a220b200241c0016a41106a290300370300200241386a41186a220c200241c0016a41186a290300370300200220022903c00122053703582002200537033802404122102c2208450d0020082002290338370100200820133b0120200841186a200c290300370100200841106a200b290300370100200841086a200e290300370100200220093602442002200141d8006a220b3602402002200336023c200220063602382002200241286a360248024002400240200441d8006c41a87f6a200a470d0041012103410121040c010b20024198016a41086a210a20024198016a41106a210c20024198016a41186a210d410121034101210403402002200b220141d8006a220b360240200141306a280200210e200141286a2903002105200141206a2903002107200a2001413c6a290200370300200c200141c4006a290200370300200d200141cc006a29020037030020024198016a41206a200141d4006a2802003602002002200141346a2902003703980102400240200e450d00200241e0016a41186a2210200d290300370300200241e0016a41106a2211200c290300370300200241e0016a41086a2212200a29030037030020022002290398013703e00102400240200720052002280248220f290300200f41086a29030010e606220641ffff03710d004100210f0c010b200241c0016a41186a2010290300370300200241c0016a41106a2011290300370300200241c0016a41086a2012290300370300200220022903e0013703c0014101210f200621130b200e200e280200417f6a2210360200024020100d00200e41046a22102010280200417f6a221036020020100d00200e102e0b200f0d012009200b470d020b200141d8006a210b0c020b200241d8006a41086a200241c0016a41086a2903002205370300200241d8006a41106a200241c0016a41106a2903002207370300200241d8006a41186a200241c0016a41186a2903002214370300200220022903c0012215370358200d2014370300200c2007370300200a20053703002002201537039801024020042003470d00200341016a22012003490d092003410174220e2001200e20014b1b22014104200141044b1bad42227e2205422088a74541017421012005a7210e0240024020030d00200241003602e0010c010b200241023602e801200220083602e0012002200341226c3602e4010b200241c0016a200e2001200241e0016a107d20022802c801210120022802c0014101460d0320022802c4012108200141226e21030b2008200441226c6a2201200229039801370100200c2903002105200d2903002107200a2903002114200120133b0120200141086a2014370100200141186a2007370100200141106a2005370100200441016a21042002280240220b20022802442209470d000b0b2009200b6b220141d8006d210e02402001450d00200e41d8006c210e200b41306a210103402001280200220a200a280200417f6a36020002402001280200220a2802000d00200a41046a220a200a280200417f6a3602002001280200220a41046a2802000d00200a102e0b200141d8006a2101200e41a87f6a220e0d000b0b0240200228023c2201450d00200141d8006c450d002002280238102e0b2004450d042000200336020420002008360200200041086a20043602002000410c6a2002290308370000200041146a200241086a41086a2903003700002000411c6a200241186a290300370000200041246a200241206a2903003700000c050b2001450d050b1036000b200141d8006a21010b024020092001460d000340200141306a220e280200220a200a280200417f6a360200200141d8006a21010240200e280200220a2802000d00200a41046a220a200a280200417f6a360200200e280200220e41046a2802000d00200e102e0b20092001470d000b0b02402003450d00200341d8006c450d002006102e0b200041003602000c010b200041003602002003450d00200341226c450d002008102e0b20024180026a24000f0b1038000bd6d20102517f0d7e230041c0076b22012400200141003602e4022001420037020c0240024002400240200041086a220228020022030d002001410036020c0c010b200141f8016a41c0006a2104200141c8066a41c0006a2105200141a8036a41c0006a2106200141c8066a41206a2107200141386a41206a2108200141186a41106a2109200141186a41186a210a200141c8066a41d8006a210b200141c8066a41d0006a210c200141c8066a41c8006a210d4100210e03400240024002402002280200220f200e4d0d00200141186a41086a22102000280200200e412c6c22116a220f41146a2900003703002009200f411c6a290000370300200a200f41246a2900003703002001200f29000c370318200f280208221241ffffff3f712012470d0620124105742213417f4c0d06200f280200210f0240024020130d00410121140c010b2013102c2214450d060b0240024002402013410576221520124f0d00201341047622162012201620124b1b22164104201641044b1b221641ffffff3f712016462117201641057421160240024020130d00200141003602c8060c010b200141013602d006200120133602cc06200120143602c8060b200141c8056a20162017200141c8066a107d20012802d005211320012802c8054101460d0120012802cc052114201341057621150b200f200f201241306c22136a460d03201341506a41306e21182014211203402012200f290000370000201241186a200f41186a290000370000201241106a200f41106a290000370000201241086a200f41086a290000370000201241206a2112200f41306a210f201341506a22130d000b201841016a22194102490d032019417f6a20196c410176220f41ffffff1f71200f470d08200f410674220f417f4c0d084101211a4101211b0240200f450d00200f102c221b450d080b201441206a211c200f410676211d410021134100211e0c010b20130d060c070b03400240201e220f41016a221e20194f0d0002400240200f20194f0d00201a201a2019201a20194b1b6b211f2014200f4105746a2116201e2019201e20194b1b2120201341017421212013410674211720182122201c21120340200141a8066a41186a220f201641186a290000370300200141a8066a41106a2223201641106a290000370300200141a8066a41086a2224201641086a290000370300200120162900003703a806201f450d02200141c8066a41186a2225200f290300370300200141c8066a41106a22262023290300370300200141c8066a41086a22232024290300370300200120012903a8063703c80620072012290000370000200741086a201241086a290000370000200741106a201241106a290000370000200741186a201241186a290000370000024002402013201d470d00201341016a220f2013490d0d2021200f2021200f4b1b220f4104200f41044b1b220f41ffffff1f71200f462124200f410674210f0240024020130d00200141003602c8050c010b200141013602d005200120173602cc052001201b3602c8050b20014188046a200f2024200141c8056a107d200128029004210f2001280288044101460d01200128028c04211b200f410676211d0b201b20176a220f20012903c806370000200f41386a200141c8066a41386a290300370000200f41306a200141c8066a41306a290300370000200f41286a200141c8066a41286a290300370000200f41206a2007290300370000200f41186a2025290300370000200f41106a2026290300370000200f41086a2023290300370000201f41016a211f201241206a2112202141026a2121201741c0006a2117201341016a21132022417f6a2222450d040c010b0b200f450d0a0c090b200f201941b8aac700103c000b2020201941c8aac700103c000b2018417f6a2118201a41016a211a201c41206a211c201e2019470d000b2013450d02201b20134106746a2127201b21230340200141386a41386a202341386a290000370300200141386a41306a202341306a290000370300200141386a41286a202341286a2900003703002008202341206a290000370300200141386a41186a202341186a220f290000370300200141386a41106a202341106a2212290000370300200141386a41086a202341086a221329000037030020012023290000370338200141f8006a41186a2216200f290000370300200141f8006a41106a220f2012290000370300200141f8006a41086a221220132900003703002001202329000037037820014198016a41186a200841186a221329000037030020014198016a41106a200841106a221729000037030020014198016a41086a200841086a221f2900003703002001200829000037039801200141c8066a41186a22252016290300370300200141c8066a41106a2226200f290300370300200141c8066a41086a2219201229030037030020072008290000370000200741086a201f290000370000200741106a2017290000370000200741186a2013290000370000200120012903783703c80602400240200128020c221f450d00200128020821210c010b41a808102c221f450d0741002121201f41003b0106201f41003602002001201f36020c200141003602080b202341c0006a21230340201f41286a210f201f2f010621164100211203400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020162012460d0002400240200141c8066a200f41606a412010ec082213450d002013417f4c0d010c270b2007200f412010ec082213450d02201341004e0d260b201221160b2021450d012021417f6a2121201f20164102746a41a8086a280200211f0c260b2002280200221e200e4d0d022000280200222220116a220f28020841306c2216450d22201f20124105746a41c8056a2124200f280200210f41002113034002400240200f200141f8006a412010ec080d00410121170c010b200f20014198016a412010ec084521170b200f41306a210f201720136a2113201641506a22160d000b20134102470d22201e412c6c210f202241546a21130340200f450d23200f41546a210f2013412c6a21132022410c6a21162022412c6a212220162024412010ec080d000b0240201341086a280200220f450d0020132802002217200f41306c22226a2116410021130340201720136a220f200141f8006a412010ec08450d03200f20014198016a412010ec08450d032022201341306a2213470d000b0b4108211e4100211a0c0f0b200141b8016a41386a220f200141c8066a41386a2228290300370300200141b8016a41306a2212200141c8066a41306a2229290300370300200141b8016a41286a2213200141c8066a41286a222a290300370300200141b8016a41206a22172007290300370300200141b8016a41186a22212025290300370300200141b8016a41106a22222026290300370300200141b8016a41086a22242019290300370300200120012903c8063703b801200141a8036a41386a222b200f290300370300200141a8036a41306a222c2012290300370300200141a8036a41286a222d2013290300370300200141a8036a41206a222e2017290300370300200141a8036a41186a222f2021290300370300200141a8036a41106a22302022290300370300200141a8036a41086a22312024290300370300200120012903b8013703a803200141a8066a41186a2232200a290300370300200141a8066a41106a22332009290300370300200141a8066a41086a22342010290300370300200120012903183703a8060240201f2f0106220f410a4b0d00200141c8056a41186a22172032290300370300200141c8056a41106a22212033290300370300200141c8056a41086a22222034290300370300200120012903a8063703c8052028202b2903003703002029202c290300370300202a202d2903003703002007202e2903003703002025202f2903003703002026203029030037030020192031290300370300200120012903a8033703c806201f41086a2113200f41016a21120240201641016a2224200f4b221e0d00201320244106746a201320164106746a20122016417f736a41067410ea081a0b201320164106746a220f20012903c806370000200f41386a2028290300370000200f41306a2029290300370000200f41286a202a290300370000200f41206a2007290300370000200f41186a2025290300370000200f41106a2026290300370000200f41086a2019290300370000200141e8026a41186a22132017290300370300200141e8026a41106a22172021290300370300200141e8026a41086a22212022290300370300200120012903c8053703e802201f41c8056a210f0240201e0d00200f20244105746a200f20164105746a20122016417f736a41057410ea081a0b200f20164105746a220f20012903e802370000200f41186a2013290300370000200f41106a2017290300370000200f41086a2021290300370000201f20123b01060c210b410021214104211302400240201641054f0d00201621170c010b4105211341052117024002402016417b6a0e020201000b201641796a211741012121410621130c010b41002117410121210b41a808102c2212450d2b201241003b0106201241003602002012201f2f010622222013417f736a22163b0106200141c8056a41386a2235201f41086a222420134106746a220f41386a290000370300200141c8056a41306a2236200f41306a290000370300200141c8056a41286a2237200f41286a290000370300200141c8056a41206a2238200f41206a290000370300200141c8056a41186a2239200f41186a290000370300200141c8056a41106a223a200f41106a290000370300200141c8056a41086a223b200f41086a2900003703002001200f2900003703c805200141e8026a41186a223c201f41c8056a221e20134105746a220f41186a290000370300200141e8026a41106a223d200f41106a290000370300200141e8026a41086a223e200f41086a2900003703002001200f2900003703e8022016410c4f0d022022201341016a220f6b2016470d03201241086a2024200f4106746a201641067410e9081a201241c8056a201e200f4105746a201641057410e9081a201f20133b01062028203529030037030020292036290300370300202a203729030037030020072038290300370300202520392903003703002026203a2903003703002019203b290300370300200520012903e802370000200541086a223f203e290300370000200541106a2240203d290300370000200541186a2241203c290300370000200120012903c8053703c806200141c8056a200141c8066a41e00010e9081a200141e8046a41186a22422032290300370300200141e8046a41106a22432033290300370300200141e8046a41086a22442034290300370300200120012903a8063703e8042012201f20211b22132f0106210f2028202b2903003703002029202c290300370300202a202d2903003703002007202e2903003703002025202f2903003703002026203029030037030020192031290300370300200120012903a8033703c806201341086a2121200f41016a21160240201741016a2222200f4b22240d00202120224106746a202120174106746a20162017417f736a41067410ea081a0b202120174106746a220f20012903c806370000200f41386a2028290300370000200f41306a2029290300370000200f41286a202a290300370000200f41206a2007290300370000200f41186a2025290300370000200f41106a2026290300370000200f41086a2019290300370000203c2042290300370300203d2043290300370300203e2044290300370300200120012903e8043703e802201341c8056a210f024020240d00200f20224105746a200f20174105746a20162017417f736a41057410ea081a0b200f20174105746a220f20012903e802370000200f41186a203c290300370000200f41106a203d290300370000200f41086a203e290300370000201320163b010620014188046a200141c8056a41e00010e9081a200141a8036a20014188046a41e00010e9081a024002400240201f28020022210d00410021450c010b41002145201221460340201f2f01042117200141e8046a41386a2247202b290300370300200141e8046a41306a2248202c290300370300200141e8046a41286a2249202d290300370300200141e8046a41206a224a202e2903003703002042202f2903003703002043203029030037030020442031290300370300200120012903a8033703e804200141a8056a41186a224b200641186a290000370300200141a8056a41106a224c200641106a290000370300200141a8056a41086a224d200641086a290000370300200120062900003703a8054101450d0720212f0106224e410b490d024100212041042116024020174105490d0020172116024002402017417b6a0e020201000b201741796a211741012120410621160c010b4100211741012120410521160b41d808102c2212450d2e201241003b010620124100360200201220212f0106224f2016417f736a22133b010620014188046a41386a221f202141086a225020164106746a220f41386a29000037030020014188046a41306a2222200f41306a29000037030020014188046a41286a2224200f41286a29000037030020014188046a41206a221e200f41206a29000037030020014188046a41186a221a200f41186a29000037030020014188046a41106a2218200f41106a29000037030020014188046a41086a221c200f41086a2900003703002001200f29000037038804203c202141c8056a225120164105746a220f41186a290000370300203d200f41106a290000370300203e200f41086a2900003703002001200f2900003703e8022013410c4f0d08204f201641016a220f6b2013470d09201241086a2050200f4106746a201341067410e9081a201241c8056a2051200f4105746a201341057410e9081a202120163b01062028201f29030037030020292022290300370300202a20242903003703002007201e2903003703002025201a290300370300202620182903003703002019201c290300370300200520012903e802370000203f203e2903003700002040203d2903003700002041203c29030037000020012001290388043703c80620122f0106221341016a214f2013410c4f0d0a204e20166b2216204f470d0b204541016a2145201241a8086a2021200f4102746a41a8086a201641027410e9081a4100210f024003402012200f4102746a41a8086a2802002216200f3b010420162012360200200f200f20134922166a220f20134b0d0120160d000b0b200141c8056a200141c8066a41e00010e9081a201f20472903003703002022204829030037030020242049290300370300201e204a290300370300201a204229030037030020182043290300370300201c2044290300370300200120012903e804370388042032204b2903003703002033204c2903003703002034204d290300370300200120012903a8053703a8062012202120201b22162f010621202028201f29030037030020292022290300370300202a20242903003703002007201e2903003703002025201a290300370300202620182903003703002019201c29030037030020012001290388043703c806201641086a210f202041016a211f0240201741016a221320204b22220d00200f20134106746a200f20174106746a2017417f73201f6a41067410ea081a0b200f20174106746a220f20012903c806370000200f41386a2028290300370000200f41306a2029290300370000200f41286a202a290300370000200f41206a2007290300370000200f41186a2025290300370000200f41106a2026290300370000200f41086a201929030037000020014188036a41186a2224203229030037030020014188036a41106a221e203329030037030020014188036a41086a221a2034290300370300200120012903a80637038803201641c8056a210f024020220d00200f20134105746a200f20174105746a2017417f73201f6a41057410ea081a0b200f20174105746a220f200129038803370000200f41186a2024290300370000200f41106a201e290300370000200f41086a201a290300370000201641a8086a210f0240201741026a2224202041026a22224f0d00200f20244102746a200f20134102746a2013417f7320226a41027410ea081a0b200f20134102746a20463602002016201f3b01060240201320224f0d00201620174102746a41ac086a210f0340200f2802002213201741016a22173b010420132016360200200f41046a210f201f2017470d000b0b200141a8036a200141c8056a41e00010e9081a2021211f2021280200220f212120122146200f0d000b0b200141f8016a200141a8036a41e00010e9081a203b200141f8016a41086a290200370300203a200141f8016a41106a2902003703002039200141f8016a41186a2902003703002038200141f8016a41206a2902003703002037200141f8016a41286a2902003703002036200141f8016a41306a2902003703002035200141f8016a41386a2902003703002034200441086a2902003703002033200441106a2902003703002032200441186a290200370300200120012902f8013703c805200120042902003703a806200128020c2213450d0a2001280208211641d808102c220f450d2c200f20133602a808200f41003b0106200f4100360200201341003b01042013200f3602002001200f36020c2001201641016a3602082028203529030037030020292036290300370300202a203729030037030020072038290300370300202520392903003703002026203a2903003703002019203b290300370300200120012903c8053703c80620014188046a41186a2217203229030037030020014188046a41106a221f203329030037030020014188046a41086a22212034290300370300200120012903a8063703880420162045470d0b200f2f01062216410b4f0d0c200f20164106746a221341086a20012903c806370000201341106a2019290300370000201341186a2026290300370000201341206a2025290300370000201341286a2007290300370000201341306a202a290300370000201341386a2029290300370000201341c0006a2028290300370000200f20164105746a221341c8056a200129038804370000201341d0056a2021290300370000201341d8056a201f290300370000201341e0056a2017290300370000200f201641016a22133b0106200f20134102746a41a8086a2012360200201220133b01042012200f3602002001200128021041016a36021020121a0c220b20014188046a41386a220f204729030037030020014188046a41306a2212204829030037030020014188046a41286a2216204929030037030020014188046a41206a221f204a29030037030020014188046a41186a2222204229030037030020014188046a41106a2224204329030037030020014188046a41086a221e2044290300370300200120012903e804370388042032204b2903003703002033204c2903003703002034204d290300370300200120012903a8053703a80620212f010621132028200f29030037030020292012290300370300202a20162903003703002007201f29030037030020252022290300370300202620242903003703002019201e29030037030020012001290388043703c806201741016a2112202141086a210f201341016a21160240201720134f221f0d00200f20124106746a200f20174106746a2017417f7320166a41067410ea081a0b200f20174106746a220f20012903c806370000200f41386a2028290300370000200f41306a2029290300370000200f41286a202a290300370000200f41206a2007290300370000200f41186a2025290300370000200f41106a2026290300370000200f41086a201929030037000020014188036a41186a2222203229030037030020014188036a41106a2224203329030037030020014188036a41086a22252034290300370300200120012903a80637038803202141c8056a210f0240201f0d00200f20124105746a200f20174105746a2017417f7320166a41057410ea081a0b200f20174105746a220f200129038803370000200f41186a2022290300370000200f41106a2024290300370000200f41086a2025290300370000202141a8086a210f201341026a21130240201f0d002017410274200f6a41086a200f20124102746a2012417f7320136a41027410ea081a0b200f20124102746a2046360200202120163b0106201220134f0d2020212012417f6a220f4102746a41ac086a2112034020122802002213200f41016a220f3b010420132021360200201241046a21122016200f470d000c210b0b2019200f41086a2903003703002026200f41106a2903003703002025200f41186a2903003703002001200f2903003703c806200f41286a2903002152200f41206a29030021534130102c221e450d2a201e2053370320201e20012903c806370300201e41286a2052370300201e41186a2025290300370300201e41106a2026290300370300201e41086a2019290300370300200120163602cc052001200f41306a220f3602c805200120014198016a3602d4052001200141f8006a3602d005202241506a2013460d0b4101211a200141f8006a211720014198016a21224101211803402001200f41306a22133602c8050240200f2017412010ec08450d00200f2022412010ec08450d002013210f20162013470d010c0e0b200f41286a2903002152200f41206a29030021532025200f41186a2903003703002026200f41106a2903003703002019200f41086a2903003703002001200f2903003703c806024002402018201a470d00201a41016a220f201a490d2e201a4101742213200f2013200f4b1b220f4104200f41044b1bad42307e2254422088a745410374210f2054a7211302400240201a0d0020014100360288040c010b20014108360290042001201e360288042001201a41306c36028c040b200141a8036a2013200f20014188046a107d20012802b003210f20012802a8034101460d0120012802ac03211e200f41306e211a0b201e201841306c6a220f20012903c806370300202629030021542025290300215520192903002156200f2053370320200f41086a2056370300200f41286a2052370300200f41186a2055370300200f41106a2054370300201841016a211820012802c805220f20012802cc052216460d0e20012802d405212220012802d00521170c010b0b200f450d2b0c2a0b200e201e41d8aac700103c000b2016410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b41ac9cc700413541e49cc7001039000b2013410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b204f410c41f49cc700104d000b41f49bc7004128419c9cc7001039000b41e8aac700412b4194abc7001039000b41e899c700413041989ac7001039000b41a89ac700412041c89ac7001039000b4101211a0c010b201841014d0d0020184102470d0b41e000102c2218450d1d2002280200220f200e4d0d010240200028020020116a220f28020841306c22170d00410221200c100b200f280200210f4102212041002113024002400240034002400240200f200141f8006a412010ec08450d00200f20014198016a412010ec080d010b200141a8066a41186a2216200f41186a290300370300200141a8066a41106a2222200f41106a290300370300200141a8066a41086a221c200f41086a2903003703002001200f2903003703a806200f41286a2903002152200f41206a2903002153024020132020470d00201341016a22202013490d24201341017422282020202820204b1b22204104202041044b1bad42307e2254422088a74541037421202054a721280240024020130d00200141003602c8060c010b200141083602d006200120183602c8062001201341306c3602cc060b200141c8056a20282020200141c8066a107d20012802d005212020012802c8054101460d0320012802cc052118202041306e21200b201c2903002154202229030021552016290300215620012903a80621572018201341306c6a2216205337032020162057370300201641286a2052370300201641186a2056370300201641106a2055370300201641086a2054370300201341016a21130b200f41306a210f201741506a22170d000b20134102470d120240201e2018412010ec08450d00200141c8066a41286a220f201e41286a22132903003703002007201e41206a22162903003703002025201e41186a22172903003703002026201e41106a22222903003703002019201e41086a221c2903003703002001201e2903003703c8062013201e41d8006a22282903003703002016201e41d0006a22132903003703002017201e41c8006a22162903003703002022201e41c0006a2217290300370300201c201e41386a2222290300370300201e201e2903303703002028200f29030037030020132007290300370300201620252903003703002017202629030037030020222019290300370300201e20012903c8063703300b2001427f3703d0052001427f3703c805200141003602a80641c00141e000201e1b41e0004100201e1b20181b21132018201e72221c0d014108210f0c020b2020450d200c1f0b2013102c220f450d1e0b200141003602f0042001200f3602e8042001201341306e22173602ec0402400240024020180d0041022113201e0d01410021220c020b41044102201e1b21130b41002116410021220240201720134f0d00201741017422222013202220134b1b22134104201341044b1b41306c211302400240201c0d00200141003602c8060c010b200141083602d0062001200f3602c8062001201741306c3602cc060b20014188046a20134108200141c8066a107d20012802900421132001280288044101460d052001200128028c04220f3602e8042001201341306e3602ec0420012802f00421220b200f202241306c6a210f02402018450d00201841e0006a221c2018460d00200141c8056a41086a290300215420012903c805215841002116201821130340201341306a21170240201341206a2903002253205856201341286a290300225220545620522054511b0d00200120533703c805200120163602a806200120523703d00520532158205221540b200f2013290300370300201341086a2903002155201341106a2903002156201341186a2903002157200f41286a2052370300200f41206a2053370300200f41186a2057370300200f41106a2056370300200f41086a2055370300200f41306a210f201641016a211620172113201c2017470d000b202220166a21220b201e450d00201e41e0006a221c201e460d00200141c8056a41086a290300215420012903c8052158201e21130340201341306a21170240201341206a2903002253205856201341286a290300225220545620522054511b0d00200120533703c805200120163602a806200120523703d00520532158205221540b200f2013290300370300201341086a2903002155201341106a2903002156201341186a2903002157200f41286a2052370300200f41206a2053370300200f41186a2057370300200f41106a2056370300200f41086a2055370300200f41306a210f201641016a2116202241016a212220172113201c2017470d000b0b200120223602f00420012802a806210f200141003602c80620014188046a41104104200141c8066a107d200128029004211302402001280288044101470d002013450d1f0c1e0b200128028c042232200f360200201341027621330240024020012802a806220f41014b0d00200141003602c80620014188046a41104104200141c8066a107d20012802900421132001280288044101460d06200128028c0422294101200f6b360200024020334101470d0020014284808080c0003702cc06200120323602c80620014188046a41104104200141c8066a107d20012802900421162001280288044101460d08200128028c042132201641027621330b20324103200f6b36020420012802a806210f024002402013410276222a4101470d0020014284808080c0003702cc06200120293602c80620014188046a41104104200141c8066a107d20012802900421132001280288044101460d01200128028c0421292013410276212a0b2029200f41026a3602040c020b2013450d200c1f0b200141003602c80620014188046a41104104200141c8066a107d20012802900421132001280288044101460d07200128028c042229200f410171410373220f360200024020334101470d0020014284808080c0003702cc06200120323602c80620014188046a41104104200141c8066a107d20012802900421162001280288044101460d09200128028c042132201641027621330b2032200f417e6a36020420012802a806210f02402013410276222a4101470d0020014284808080c0003702cc06200120293602c80620014188046a41104104200141c8066a107d20012802900421132001280288044101460d0a200128028c0421292013410276212a0b2029200f417e6a3602040b4104102c220f450d1d200142013702fc012001200f3602f801024002402029280200220f41014b0d002025200a2903003703002026200929030037030020192010290300370300200120012903183703c8060c010b2025202441186a2900003703002026202441106a2900003703002019202441086a290000370300200120242900003703c8060b024020022802002213450d002000280200221c2013412c6c6a212803400240201c410c6a200141c8066a412010ec080d00201c2802082216450d00201c2802002113201641306c21174100212220012802f004211603402016200f4d0d060240201320012802e804200f41306c6a412010ec08450d00201341306a2113202241016a2122201741506a22170d010c020b0b201341206a2216427f2016290300225220012903c8057c225320532052542216201341286a22132903002252200141c8056a41086a2903007c2016ad7c225320525420532052511b22161b3703002013427f205320161b3703000b201c412c6a221c2028470d000b0b024002402029280204220f4102490d002025202441186a2900003703002026202441106a2900003703002019202441086a290000370300200120242900003703c8060c010b2025200a2903003703002026200929030037030020192010290300370300200120012903183703c8060b024020022802002213450d002000280200221c2013412c6c6a212803400240201c410c6a200141c8066a412010ec080d00201c2802082216450d00201c2802002113201641306c21174100212220012802f004211603402016200f4d0d060240201320012802e804200f41306c6a412010ec08450d00201341306a2113202241016a2122201741506a22170d010c020b0b201341206a2216427f2016290300225220012903c8057c225320532052542216201341286a22132903002252200141c8056a41086a2903007c2016ad7c225320525420532052511b22161b3703002013427f205320161b3703000b201c412c6a221c2028470d000b0b202a0d090c0a0b20242001290318370000202441186a200a290300370000202441106a2009290300370000202441086a20102903003700000c0f0b200e200f41a4abc700103c000b200f201641b4abc700103c000b2013450d1a0c190b2013450d190c180b2016450d180c170b2013450d170c160b2016450d160c150b2013450d150c140b2029102e0b024002402032280200220f41014b0d002025200a2903003703002026200929030037030020192010290300370300200120012903183703c8060c010b2025202441186a2900003703002026202441106a2900003703002019202441086a290000370300200120242900003703c8060b024002400240024020022802002213450d002000280200221c2013412c6c6a212803400240201c410c6a200141c8066a412010ec080d00201c41086a222a2802002229450d00201c2802002113202941306c41506a21174100212220012802f004211603402016200f4d0d040240201320012802e804200f41306c6a412010ec08450d00201341306a2113202241016a2122201741506a22174150470d010c020b0b0240201341206a2216290300225320012903c805225556201341286a22222903002252200141c8056a41086a29030022545620522054511b0d002013201341306a201710ea081a202a2029417f6a3602000240200128028002221320012802fc01470d00201341016a22162013490d1b201341017422172016201720164b1b22164104201641044b1b221641ffffffff03712016464102742117201641027421160240024020130d0020014100360288040c010b2001410436029004200120012802f801360288042001201341027436028c040b200141a8036a2016201720014188046a107d20012802b003211320012802a8034101460d0b200120012802ac033602f801200120134102763602fc0120012802800221130b20012802f80120134102746a200f360200200120012802e40241016a3602e402200120012802800241016a360280020c010b20224200205220547d2053205554ad7d2254205320557d2255205356205420525620542052511b22131b37030020164200205520131b3703000b201c412c6a221c2028470d000b0b024002402032280204220f4102490d002025202441186a2900003703002026202441106a2900003703002019202441086a290000370300200120242900003703c8060c010b2025200a2903003703002026200929030037030020192010290300370300200120012903183703c8060b024020022802002213450d00200028020022262013412c6c6a2119034002402026410c6a200141c8066a412010ec080d00202641086a2228280200221c450d0020262802002113201c41306c41506a21174100212220012802f004211603402016200f4d0d040240201320012802e804200f41306c6a412010ec08450d00201341306a2113202241016a2122201741506a22174150470d010c020b0b0240201341206a2216290300225320012903c805225556201341286a22222903002252200141c8056a41086a29030022545620522054511b0d002013201341306a201710ea081a2028201c417f6a3602000240200128028002221320012802fc01470d00201341016a22162013490d1b201341017422172016201720164b1b22164104201641044b1b221641ffffffff0371201646410274211720164102742116024002402013450d002001410436029004200120012802f801360288042001201341027436028c040c010b20014100360288040b200141a8036a2016201720014188046a107d20012802b003211320012802a8034101460d0b200120012802ac033602f801200120134102763602fc0120012802800221130b20012802f80120134102746a200f360200200120012802e40241016a3602e402200120012802800241016a360280020c010b20224200205220547d2053205554ad7d2254205320557d2255205356205420525620542052511b22131b37030020164200205520131b3703000b2026412c6a22262019470d000b0b20330d010c020b200f201641c4abc700103c000b2032102e0b20012802f8012222417c6a2116200128028002410274220f211302400340024020130d00410021160c020b2013417c6a2113201641046a221628020041014b0d000b0b20012802fc012126202221130240024002400340200f450d01200f417c6a210f20132802002117201341046a211320174102490d000b0240202641ffffffff0371450d002022102e0b20160d0120242001290318370000202441186a200a290300370000202441106a2009290300370000202441086a20102903003700000c020b0240202641ffffffff0371450d002022102e0b20160d0141d4abc70041294180acc7001039000b200141003a00a803024002402021450d002021417f6a2113201f20124102746a41a8086a280200210f02400340200f2f010621122013450d012013417f6a2113200f20124102746a41a8086a280200210f0c000b0b200141003602880420012012417f6a410020121b360290042001200f410020121b36028c04200141c8066a20014188046a200141a8036a10ce0620252903002152200141c8066a41386a22172903002153200141c8066a41306a221f2903002154200141c8066a41286a22212903002155200b2903002156200c2903002157200d290300215820012903d806215920012903d006215a20012903c806215b20012903e806215c200129038807215d20012802a80721160240024020012802b007221320012802ac0722122f01064f0d002012210f0c010b034002402012280200220f0d004100210f0c020b201641016a211620122f01042113200f21122013200f2f01064f0d000b0b200f20134106746a221241206a2222290000215e20222052370000201241186a2222290000215220222059370000201241106a222229000021592022205a370000201241086a2222290000215a2022205b370000201241c0006a2222290000215b20222053370000201241386a2222290000215320222054370000201241306a2222290000215420222055370000201241286a221229000021552012205c370000200f20134105746a221241d8056a2222290000215c20222057370000201241d0056a2222290000215720222058370000201241c8056a222229000021582022205d370000201241e0056a2212290000215d20122056370000201341016a211202402016450d00200f20124102746a41a8086a280200210f02402016417f6a2212450d000340200f2802a808210f2012417f6a22120d000b0b410021120b200d205737030020212054370300200c205c370300201f2053370300200b205d3703002017205b3703002025205e3703002001205837038807200120553703e8062001205a3703c806200120123602b0072001200f3602ac07200141003602a807200120593703d006200120523703d8060c010b20012012360290042001201f36028c042001410036028804200141c8066a20014188046a200141a8036a10ce060b20012001280210417f6a36021020012d00a803450d00200128020c220f450d0220012802082212450d032001200f2802a808221336020c20012012417f6a36020820134100360200200f102e0b024020012802ec04220f450d00200f41306c450d0020012802e804102e0b2020450d00202041306c450d002018102e0b201a450d07201a41306c0d050c070b41e8aac700412b4190acc7001039000b41b39bc700412141d49bc7001039000b2013450d0f0c0e0b2020450d00202041306c450d002018102e0b201a450d02201a41306c450d020b201e102e0c010b2001200128021041016a3602100b20232027470d030c060b201241016a2112200f41c0006a210f0c000b0b0b0b200e200f41a8aac700103c000b4100211d4101211b0b0240201d41ffffff1f71450d00201b102e0b200e41016a210e02402015450d002014102e0b200e2003470d000b200128020c210f2001410036020c200f450d00024020012802082212450d002012417f6a21120340200f2802a808210f2012450d012012417f6a21120c000b0b024020012802102216450d00200141c8066a41c0006a21174100210703402016417f6a2116410121120240024003402007200f2f0106490d010240200f28020022130d00200f102e4100210f0c030b200f2f01042107200f102e2012417f6a21122013210f0c000b0b20014188046a41386a221f200f20074106746a221341c0006a29000037030020014188046a41306a2221201341386a29000037030020014188046a41286a2222201341306a29000037030020014188046a41206a2223201341286a29000037030020014188046a41186a2224201341206a29000037030020014188046a41106a2225201341186a29000037030020014188046a41086a2226201341106a2900003703002001201341086a2900003703880420014188036a41186a221b200f20074105746a221341e0056a29000037030020014188036a41106a221d201341d8056a29000037030020014188036a41086a2219201341d0056a2900003703002001201341c8056a29000037038803200741016a2107024020124101460d00200f20074102746a41a8086a280200210f02402012450d000340201241016a220720124f2113200f2802a808210f2007211220130d000b0b410021070b2017200129038803370000200141c8066a41386a201f290300370300200141c8066a41306a2021290300370300200141c8066a41286a2022290300370300200141c8066a41206a2023290300370300200141c8066a41186a2024290300370300200141c8066a41106a2025290300370300200141c8066a41086a2026290300370300201741086a2019290300370000201741106a201d290300370000201741186a201b29030037000020012001290388043703c806200141c8056a200141c8066a41e00010e9081a0b20160d000b0b0340200f2802002112200f102e2012210f20120d000b0b200141003602d8022001420037029c0102400240200041086a222828020022020d002001410036029c010c010b20282802002112200141c8066a410472211d200141386a41106a2142200141386a41186a2143200141a8036a41206a213d4100211602400340200120163602dc02201220164d0d01201641016a2114200141386a41086a22442000280200220f2016412c6c6a220741146a29000037030020422007411c6a2900003703002043200741246a2900003703002001200729000c3703384100212003400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200f2016412c6c6a220f28020820204b0d002014211620142002470d2c200128029c01210f2001410036029c01200f450d2e2001280298012212450d012012417f6a21120340200f2802a003210f2012450d022012417f6a21120c000b0b200141a8066a41186a200f280200202041306c6a220f41186a2207290300370300200141a8066a41106a200f41106a2213290300370300200141a8066a41086a200f41086a22172903003703002001200f2903003703a806200141e8046a41186a221f2043290300370300200141e8046a41106a22212042290300370300200141e8046a41086a22222044290300370300200120012903383703e804200141003a008805200141f8016a41186a22122007290000370300200141f8016a41106a22072013290000370300200141f8016a41086a221320172900003703002001200f2900003703f801200141013a00980220014198016a200141e8046a109f02211720014198016a200141f8016a109f022125200141c8056a41186a221a2043290300370300200141c8056a41106a22182042290300370300200141c8056a41086a221c2044290300370300200120012903383703c805200141003a00e805200141c8066a20014198016a200141c8056a10a302203d20012d0088053a0000200141a8036a41186a222a201f290300370300200141a8036a41106a22322021290300370300200141a8036a41086a22332022290300370300200120012903e8043703a8030240024020012802c8064101460d00200141c8056a41306a201d41306a280200360200200141c8056a41286a201d41286a290200370300200141c8056a41206a201d41206a290200370300201a201d41186a2902003703002018201d41106a290200370300201c201d41086a2902003703002001201d2902003703c80520014188046a41086a221f203329030037030020014188046a41106a2221203229030037030020014188046a41186a2222202a29030037030020014188046a41206a2223203d2d00003a0000200120012903a803370388044134102c220f450d30200f4200370208200f428180808010370200200f200129038804370210200f20012f00b8013b0031200f41186a201f290300370200200f41206a2021290300370200200f41286a2022290300370200200f41306a20232d00003a0000200f41336a200141b8016a41026a2d00003a0000200141c8056a200f10ed06210f0c010b20012802d00620012802d4064102746a41046a210f0b200f280200222428020041016a220f41014d0d1e2024200f360200201a201229030037030020182007290300370300201c2013290300370300200120012903f8013703c805200141013a00e805200141c8066a20014198016a200141c8056a10a302203d200141f8016a41206a2d00003a0000202a20122903003703002032200729030037030020332013290300370300200120012903f8013703a8030240024020012802c8064101460d00200141c8056a41306a201d41306a280200360200200141c8056a41286a201d41286a290200370300200141c8056a41206a201d41206a290200370300201a201d41186a2902003703002018201d41106a290200370300201c201d41086a2902003703002001201d2902003703c80520014188046a41086a2212203329030037030020014188046a41106a2207203229030037030020014188046a41186a2213202a29030037030020014188046a41206a221f203d2d00003a0000200120012903a803370388044134102c220f450d30200f4200370208200f428180808010370200200f200129038804370210200f20012f00b8013b0031200f41186a2012290300370200200f41206a2007290300370200200f41286a2013290300370200200f41306a201f2d00003a0000200f41336a200141b8016a41026a2d00003a0000200141c8056a200f10ed06210f0c010b20012802d00620012802d4064102746a41046a210f0b200f2802002223280200221241016a220f41014d0d1e2023200f360200024002400240024002400240024020170d0020250d01202428020041016a220f41014d0d252024200f36020020232802080d0a2023417f3602080240202328020c220f450d00200f200f280200417f6a360200202328020c220f2802000d00200f410c6a10cd04202328020c41046a220f200f280200417f6a360200202328020c220f41046a2802000d00200f102e0b2023202436020c2023202328020841016a3602080c2f0b2025450d01200141c8066a202410ee0620012802d406214720012802d006214c20012802cc06213c20012802c806210e200141c8066a202310ee0620012802d406214620012802d006214d20012802cc06213e0240200e20012802c8062245460d00200e28020841016a220f41004c0d08200e200f3602082045280208220f41016a221241004c0d0920452012360208200e41106a204541106a412010ec080d03200e2d003020452d0030470d032045200f360208200e200e280208417f6a3602080b203e2046410274221e6a2122203c204741027422196a211220190d03410021170c040b2012417e4f0d232023201241026a36020020242802080d092024417f3602080240202428020c220f450d00200f200f280200417f6a360200202428020c220f2802000d00200f410c6a10cd04202428020c41046a220f200f280200417f6a360200202428020c220f41046a2802000d00200f102e0b2024202336020c2024202428020841016a3602080c2d0b202428020041016a220f41014d0d222024200f36020020232802080d092023417f3602080240202328020c220f450d00200f200f280200417f6a360200202328020c220f2802000d00200f410c6a10cd04202328020c41046a220f200f280200417f6a360200202328020c220f41046a2802000d00200f102e0b2023202436020c2023202328020841016a3602080c2c0b2045200f360208200e200e280208417f6a360208204dad422086203ead842252204cad422086203cad842253204720464b220f1b2254a72116024020462047200f1b22074102742212450d00201620126a21254101211341002121201621172016211f0340024020214101710d00202520176b4102762013417f6a4d0d02201720134102746a21170b20172025460d012017450d01201f280200222128020041016a221341014d0d2320212013360200201728020022132802080d0b201f41046a211f2013417f3602080240201328020c2222450d0020222022280200417f6a360200201328020c22222802000d002022410c6a10cd04201328020c41046a22222022280200417f6a360200201328020c222241046a2802000d002022102e0b201741046a21172013202136020c410121212013201328020841016a360208410021132025201f470d000b0b2007450d0a20472046200f1b221f0d024100410041e0acc700103c000b204641ffffffff0371212541002117202221132012211603400240203e2013470d00202521170c020b024002402016417c6a2216280200220f2013417c6a22132802002207460d00200f28020841016a221f41004c0d0d200f201f3602082007280208221f41016a222141004c0d0e20072021360208200f41106a200741106a412010ec080d01200f2d003020072d0030470d012007201f360208200f200f280208417f6a3602080b201741016a2117203c2016470d010c020b0b2007201f360208200f200f280208417f6a3602080b204720176b211f204620176b225141016a210702400240203e450d0020072022203e6b410276220f200f20074b1b410020071b201f2012203c6b410276220f200f201f4b1b4100201f1b6a210f0c010b201f2012203c6b410276220f200f201f4b1b4100201f1b210f0b200f41ffffffff0371200f470d30200f4102742213417f4c0d300240024020130d004104210f0c010b2013102c220f450d300b20014100360290032001200f3602880320012013410276221336028c0302400240203e450d0020072022203e6b4102762216201620074b1b410020071b201f2012203c6b41027622162016201f4b1b4100201f1b6a21160c010b201f2012203c6b41027622162016201f4b1b4100201f1b21160b0240024020132016490d00410021260c010b201341017422212016202120164b1b22164104201641044b1b221641ffffffff03712016464102742121201641027421160240024020130d00200141003602c8060c010b200141043602d0062001200f3602c806200120134102743602cc060b200141c8056a20162021200141c8066a107d20012802d005211320012802c8054101460d1d200120012802cc05220f360288032001201341027636028c0320012802900321260b200f20264102746a210f0240203e450d002007450d00203e201e6a21212046417f7320176a2113202620466a20176b41016a2122203e2107034020212007460d012007280200221628020041016a221741014d0d2120162017360200200f2016360200202641016a2126200f41046a210f200741046a2107201341016a221620134f21172016211320170d000b202221260b0240201f450d0002402012203c6b4102762207201f4d0d002007201f417f736a221320074f0d01201220134102746b417c6a203c20132007491b21120b2012203c460d0003402012417c6a2212280200220728020041016a221341014d0d2120072013360200200f2007360200202641016a2126200f41046a210f203c2012470d000b0b20012026360290032001427f3703b0052001427f3703a805200141b8016a41186a224e4200370300200141b8016a41106a224f4200370300200141b8016a41086a22504200370300200142003703b801202a42003703002032420037030020334200370300200142003703a80341002106200141003602e002200141003602e402200120014188036a360208200120014188036a360218410021254100214b4100213402402026450d00427f21534100214b200128028803211b41002134427f215220262125410021210340202520214d0d0d201b20214102746a280200220f280208221241016a41004c0d0e202141016a21220240200f2d00300d00200f201236020820014188046a41186a2225200f41286a29000037030020014188046a41106a2208200f41206a29000037030020014188046a41086a2229200f41186a2900003703002001200f29001037038804200128029003220f20224100200f417f6a20214b1b22124d0d10201b20124102746a280200220f280208221241016a41004c0d11200f2012360208201a200f41286a2900003703002018200f41206a290000370300201c200f41186a2900003703002001200f2900103703c805200128029003220f2021200f20211b417f6a22124d0d12201b20124102746a280200220f280208221241016a41004c0d13200f2012360208200141c8066a41186a2248200f41286a290000370300200141c8066a41106a2249200f41206a290000370300200141c8066a41086a224a200f41186a2900003703002001200f2900103703c8062028280200412c6c221221072000280200220f41546a22162117200f2113024003402007450d01200741546a21072017412c6a21172013410c6a211f2013412c6a2113201f20014188046a412010ec080d000b201741086a28020041306c21072017280200211303402007450d01200741506a21072013200141c8056a412010ec082117201341306a221f211320170d000b2053201f41706a22072903002255582052200741086a29030022545820522054511b0d002050201c290300370300204f2018290300370300204e201a2903003703002033202929030037030020322008290300370300202a2025290300370300200120553703a805200120012903c8053703b80120012001290388043703a803200120213602e002200120543703b0054101214b200141013602e4022021213420552153205421520b03402012450d01201241546a21122016412c6a2116200f410c6a2107200f412c6a210f200720014188046a412010ec080d000b201641086a28020041306c210f201628020021120340200f450d01200f41506a210f2012200141c8066a412010ec082107201241306a2213211220070d000b2053201341706a220f2903002255582052200f41086a29030022545820522054511b0d002050204a290300370300204f2049290300370300204e20482903003703002033202929030037030020322008290300370300202a2025290300370300200120553703a805200120012903c8063703b80120012001290388043703a803200120213602e002200120543703b0054100214b200141003602e4022021213420552153205421520b20012802900321252022212120222026470d000b0b20014100360290042001420437038804204b20346a214941012129024020250d004100210f0c1f0b20494101712108410021062025210f4100211f03402001201f360278200f201f4d0d122001280288032213201f4102746a280200220f28020841016a221241004c0d13201f41016a211b200f20123602082001200f41086a22073602ec022001200f410c6a3602e8020240200f2d00300d00201f210f0240201f0d00200128021841086a280200210f0b2001280290032212200f417f6a220f4d0d152013200f4102746a280200220f28020841016a221241004c0d16200f20123602082001200f41086a3602cc052001200f410c6a3602c805024002402028280200220f0d00201b210f0c010b20002802002216200f412c6c6a212141002117034002402016410c6a20012802e80241046a412010ec080d00201641086a22262802002222450d002016280200210f20012802c80541046a2113202241306c41506a21124100210702400340200f2013412010ec08450d01200f41306a210f200741016a2107201241506a22124150470d000c020b0b200f41286a22072903002152200f41206a22132903002153200141a8056a41086a290300215520012903a805215402400240201f4101710d0002402008450d00427f205220557c205320547c22542053542248ad7c22532048205320525420532052511b22481b2152427f205420481b21530c020b4200205220557d2053205454ad7d2255205320547d2254205356205520525620552052511b22481b21524200205420481b21530c010b02402008450d004200205220557d2053205454ad7d2255205320547d2254205356205520525620552052511b22481b21524200205420481b21530c010b427f205220557c205320547c22542053542248ad7c22532048205320525420532052511b22481b2152427f205420481b21530b0240024020532052844200520d0020012802dc022107200f200f41306a201210ea081a20262022417f6a360200200120012802d80241016a3602d8024100202920072017461b21292001280278221f20012802e0022234470d0120012802e4020d01201f21340c020b20072052370300201320533703000c010b200128029003220f201f4d0d1a200128028803201f4102746a280200220f28020041016a221241014d0d24200f2012360200201f21120240201f0d00200128021841086a28020021120b20012802900322072012417f6a22124d0d1b20012802880320124102746a280200221228020041016a220741014d0d242012200736020002402006200128028c04470d0020014188046a10bc0120012802900421060b20012802880420064103746a220720123602042007200f3602002001200641016a2206360290040b201741016a21172016412c6a22162021470d000b201f41016a210f0b2001280290032212200f4100200128020841086a280200417f6a201f4b1b220f4d0d19200128028803200f4102746a280200220f28020841016a221241004c0d1a200f20123602082001200f41086a22073602cc062001200f410c6a3602c80602402028280200220f450d0020002802002216200f412c6c6a212141002117034002402016410c6a20012802e80241046a412010ec080d00201641086a22262802002222450d002016280200210f20012802c80641046a2113202241306c41506a21124100210702400340200f2013412010ec08450d01200f41306a210f200741016a2107201241506a22124150470d000c020b0b200f41286a22072903002152200f41206a22132903002153200141a8056a41086a290300215520012903a805215402400240201f4101710d0002402008450d004200205220557d2053205454ad7d2255205320547d2254205356205520525620552052511b22481b21524200205420481b21530c020b427f205220557c205320547c22542053542248ad7c22532048205320525420532052511b22481b2152427f205420481b21530c010b02402008450d00427f205220557c205320547c22542053542248ad7c22532048205320525420532052511b22481b2152427f205420481b21530c010b4200205220557d2053205454ad7d2255205320547d2254205356205520525620552052511b22481b21524200205420481b21530b0240024020532052844200520d0020012802dc022107200f200f41306a201210ea081a20262022417f6a360200200120012802d80241016a3602d8024100202920072017461b21292001280278221f20012802e0022234470d0120012802e4024101470d01201f21340c020b20072052370300201320533703000c010b200128029003220f201f4d0d1e200128028803201f4102746a280200220f28020041016a221241014d0d24200f20123602002001280290032207201f41016a4100200128020841086a280200417f6a201f4b1b22124d0d1f20012802880320124102746a280200221228020041016a220741014d0d242012200736020002402006200128028c04470d0020014188046a10bc0120012802900421060b20012802880420064103746a220720123602042007200f3602002001200641016a2206360290040b201741016a21172016412c6a22162021470d000b20012802cc06220728020021120b20072012417f6a36020020012802cc05220f200f280200417f6a36020020012802ec02220728020021120b20072012417f6a360200200128029003210f201b211f201b2025460d1e0c000b0b20532052200f1b2252a72217280200220728020041016a220f41014d0d1e2007200f3602002016280200220f2802080d1a200f417f3602080240200f28020c2213450d0020132013280200417f6a360200200f28020c22132802000d002013410c6a10cd04200f28020c41046a22132013280200417f6a360200200f28020c221341046a2802000d002013102e0b200f200736020c200f200f28020841016a360208201f41027421072017210f0340200f28020022132013280200417f6a3602000240200f28020022132802000d002013410c6a10cd04200f28020041046a22132013280200417f6a360200200f280200221341046a2802000d002013102e0b200f41046a210f2007417c6a22070d000b024020524280808080f0ffffff3f83500d002017102e0b2016210f0340200f28020022072007280200417f6a3602000240200f28020022072802000d002007410c6a10cd04200f28020041046a22072007280200417f6a360200200f280200220741046a2802000d002007102e0b200f41046a210f2012417c6a22120d000b024020544280808080f0ffffff3f83500d002016102e0b20452045280200417f6a220f360200202041016a2120200f0d272045410c6a10cd04204541046a220f200f280200417f6a220f360200200f0d272045102e0c270b024020012802a0012217450d004100210720014188036a41186a211f20014188036a41106a212120014188036a41086a212203402017417f6a2117410121120240024003402007200f2f0132490d010240200f28020022130d00200f102e0c030b200f2f01302107200f102e2012417f6a21122013210f0c000b0b201f200f200741216c6a221341cc006a2900003703002021201341c4006a29000037030020222013413c6a2900003703002001201341346a29000037038803200741016a2113200f20074102746a41046a28020021160240024020124101470d00201321070c010b200f20134102746a41a0036a280200210f02402012450d000340201241016a220720124f2113200f2802a003210f2007211220130d000b0b410021070b200141e8026a41186a201f290300370300200141e8026a41106a2021290300370300200141e8026a41086a202229030037030020012001290388033703e8020b20162016280200417f6a2212360200024020120d002016410c6a10cd04201641046a22122012280200417f6a221236020020120d002016102e0b20170d000b0b0340200f2802002112200f102e2012210f20120d000c2d0b0b41bcd9cc004118200141b8076a41c0acc70041c4bfcc00103e000b41bcd9cc004118200141b8076a41c0acc70041d4bfcc00103e000b4194dacc004110200141b8076a4190c1cc0041b0c1cc00103e000b4194dacc004110200141b8076a4190c1cc0041b0c1cc00103e000b4194dacc004110200141b8076a4190c1cc0041b0c1cc00103e000b4194dacc004110200141b8076a4190c1cc0041b0c1cc00103e000b4100410041d0acc700103c000b41bcd9cc004118200141b8076a41c0acc70041c4bfcc00103e000b41bcd9cc004118200141b8076a41c0acc70041d4bfcc00103e000b2021202541f0acc700103c000b41bcd9cc004118200141b8076a41c0acc7004180adc700103e000b2012200f4190adc700103c000b41bcd9cc004118200141b8076a41c0acc70041a0adc700103e000b2012200f41b0adc700103c000b41bcd9cc004118200141b8076a41c0acc70041c0adc700103e000b201f200f41d0adc700103c000b41bcd9cc004118200141b8076a41c0acc70041e0adc700103e000b200f201241f0adc700103c000b41bcd9cc004118200141b8076a41c0acc7004180aec700103e000b201f200f4190aec700103c000b2012200741a0aec700103c000b200f201241b0aec700103c000b41bcd9cc004118200141b8076a41c0acc70041c0aec700103e000b201f200f41d0aec700103c000b2012200741e0aec700103c000b4194dacc004110200141b8076a4190c1cc0041b0c1cc00103e000b2013450d130c120b20012802e402214b0b024002402034200f417f6a470d00204b4101460d010b41c000102c2212450d11201220012903a803370000201220012903b801370020201241186a202a290300370000201241106a2032290300370000201241086a2033290300370000201241286a2050290300370000201241306a204f290300370000201241386a204e29030037000002400240204920514d0d0002400240024002400240024002402047417f6a2222450d0020474101204741014b1b417f6a2121410021130340201322072047460d02203c20074102746a221f280200220f280200221641016a221341014d0d0b200f2013360200200f280208221741016a41004c0d03200741016a2113200f2017360208200f2016360200201a200f41286a2900003703002018200f41206a290000370300201c200f41186a2900003703002001200f2900103703c80520072021460d04203c20134102746a2217280200220f280200220741016a221641014d0d0b200f2016360200200f280208221641016a41004c0d05200f2016360208200f2007360200200141c8066a41186a200f41286a290000370300200141c8066a41106a200f41206a290000370300200141c8066a41086a200f41186a2900003703002001200f2900103703c8064100210f02400340200f41c000460d012012200f6a2107200f41206a210f2007200141c8056a412010ec080d000b4100210f0340200f41c000460d012012200f6a2107200f41206a210f2007200141c8066a412010ec080d000c030b0b201f280200220728020041016a220f41014d0d0b2007200f3602002017280200220f2802080d06200f417f3602080240200f28020c2216450d0020162016280200417f6a360200200f28020c22162802000d002016410c6a10cd04200f28020c41046a22162016280200417f6a360200200f28020c221641046a2802000d002016102e0b200f200736020c200f200f28020841016a36020820132022470d000b0b202328020041016a220f41014d0d092023200f36020020242802080d052024417f3602080240202428020c220f450d00200f200f280200417f6a360200202428020c220f2802000d00200f410c6a10cd04202428020c41046a220f200f280200417f6a360200202428020c220f41046a2802000d00200f102e0b2024202336020c2024202428020841016a3602080c070b2047204741f0aec700103c000b41bcd9cc004118200141b8076a41c0acc7004180afc700103e000b201320474190afc700103c000b41bcd9cc004118200141b8076a41c0acc70041a0afc700103e000b4194dacc004110200141b8076a4190c1cc0041b0c1cc00103e000b4194dacc004110200141b8076a4190c1cc0041b0c1cc00103e000b02402046417f6a2222450d0020464101204641014b1b417f6a2121410021130340201322072046460d05203e20074102746a221f280200220f280200221641016a221341014d0d04200f2013360200200f280208221741016a41004c0d06200741016a2113200f2017360208200f2016360200201a200f41286a2900003703002018200f41206a290000370300201c200f41186a2900003703002001200f2900103703c80520072021460d07203e20134102746a2217280200220f280200220741016a221641014d0d04200f2016360200200f280208221641016a41004c0d08200f2016360208200f2007360200200141c8066a41186a200f41286a290000370300200141c8066a41106a200f41206a290000370300200141c8066a41086a200f41186a2900003703002001200f2900103703c8064100210f02400340200f41c000460d012012200f6a2107200f41206a210f2007200141c8056a412010ec080d000b4100210f0340200f41c000460d012012200f6a2107200f41206a210f2007200141c8066a412010ec080d000c030b0b201f280200220728020041016a220f41014d0d042007200f3602002017280200220f2802080d09200f417f3602080240200f28020c2216450d0020162016280200417f6a360200200f28020c22162802000d002016410c6a10cd04200f28020c41046a22162016280200417f6a360200200f28020c221641046a2802000d002016102e0b200f200736020c200f200f28020841016a36020820132022470d000b0b202428020041016a220f41014d0d022024200f36020020232802080d082023417f3602080240202328020c220f450d00200f200f280200417f6a360200202328020c220f2802000d00200f410c6a10cd04202328020c41046a220f200f280200417f6a360200202328020c220f41046a2802000d00200f102e0b2023202436020c2023202328020841016a3602080b2012102e0b200128028804221720064103746a2113200128028c04211f20172112024002402006450d0020172107024003402007280200220f450d0102400240200f200741046a280200221210ef06450d00200f2802080d0d200f417f3602080240200f28020c2216450d0020162016280200417f6a360200200f28020c22162802000d002016410c6a10cd04200f28020c41046a22162016280200417f6a360200200f28020c221641046a2802000d002016102e0b200f410036020c200f200f28020841016a3602080c010b2012200f10ef06450d0020122802080d0d2012417f3602080240201228020c2216450d0020162016280200417f6a360200201228020c22162802000d002016410c6a10cd04201228020c41046a22162016280200417f6a360200201228020c221641046a2802000d002016102e0b2012410036020c2012201228020841016a3602080b20122012280200417f6a2216360200024020160d002012410c6a10cd04201241046a22162016280200417f6a221636020020160d002012102e0b200f200f280200417f6a2212360200024020120d00200f410c6a10cd04200f41046a22122012280200417f6a221236020020120d00200f102e0b200741086a22072013470d000c030b0b200741086a21120b20132012460d0003402012220f28020022122012280200417f6a3602000240200f28020022122802000d002012410c6a10cd04200f28020041046a22122012280200417f6a360200200f280200221241046a2802000d002012102e0b200f41086a2112200f41046a220f28020022072007280200417f6a3602000240200f28020022072802000d002007410c6a10cd04200f28020041046a22072007280200417f6a360200200f280200220f41046a2802000d00200f102e0b20132012470d000b0b0240201f41ffffffff0171450d002017102e0b02402001280290032212450d00200128028803210f201241027421120340200f28020022072007280200417f6a3602000240200f28020022072802000d002007410c6a10cd04200f28020041046a22072007280200417f6a360200200f280200220741046a2802000d002007102e0b200f41046a210f2012417c6a22120d000b0b0240200128028c0341ffffffff0371450d00200128028803102e0b02402046450d00203e210f0340200f28020022122012280200417f6a3602000240200f28020022122802000d002012410c6a10cd04200f28020041046a22122012280200417f6a360200200f280200221241046a2802000d002012102e0b200f41046a210f201e417c6a221e0d000b0b0240204d41ffffffff0371450d00203e102e0b20452045280200417f6a220f3602000240200f0d002045410c6a10cd04204541046a220f200f280200417f6a220f360200200f0d002045102e0b202941ff0171210702402047450d00203c210f0340200f28020022122012280200417f6a3602000240200f28020022122802000d002012410c6a10cd04200f28020041046a22122012280200417f6a360200200f280200221241046a2802000d002012102e0b200f41046a210f2019417c6a22190d000b0b202020076a2120204c41ffffffff0371450d09203c102e0c090b00000b2046204641b0afc700103c000b41bcd9cc004118200141b8076a41c0acc70041c0afc700103e000b2013204641d0afc700103c000b41bcd9cc004118200141b8076a41c0acc70041e0afc700103e000b4194dacc004110200141b8076a4190c1cc0041b0c1cc00103e000b4194dacc004110200141b8076a4190c1cc0041b0c1cc00103e000b4194dacc004110200141b8076a4190c1cc0041a0c1cc00103e000b4194dacc004110200141b8076a4190c1cc0041a0c1cc00103e000b200e200e280200417f6a220f3602000240200f0d00200e410c6a10cd04200e41046a220f200f280200417f6a220f360200200f0d00200e102e0b20232023280200417f6a220f3602000240200f0d002023410c6a10cd04202341046a220f200f280200417f6a220f360200200f0d002023102e0b20242024280200417f6a220f3602000240200f0d002024410c6a10cd04202441046a220f200f280200417f6a220f360200200f0d002024102e0b20012802dc0221160c010b20232023280200417f6a220f3602000240200f0d002023410c6a10cd04202341046a220f200f280200417f6a220f360200200f0d002023102e0b20242024280200417f6a220f3602000240200f0d002024410c6a10cd04202441046a220f200f280200417f6a220f360200200f0d002024102e0b202041016a21200b2000280200210f2028280200221220164b0d000b0b2016201241b0acc700103c000b2016201241a0acc700103c000b200141c0076a24000f0b1036000b1038000ba50302027f037e230041d0006b22042400200441386a20024201200242015620034200522003501b22051b22022003420020051b220342ffff03420010e708200441286a2002200342ffff03420010e608200441186a20022003200429033822062004290328200441286a41086a29030084420052ad7c220742012007420156200441386a41086a2903002007200654ad7c22074200522007501b22051b22062007420020051b220710e7080240024002402004290318220842808004544100200441186a41086a290300501b450d00200441086a200220002002200054200320015420032001511b22051b2003200120051b2006200710e7082004290308220342808004544100200441086a41086a290300501b450d012008a741ffff037122050d0241d0d8c80041194180a1c9001039000b2004411136024c2004419cd5cc0036024841add5cc0041de00200441c8006a41bcdcc8004180a1c900103e000b2004411136024c2004419cd5cc0036024841add5cc0041de00200441c8006a41bcdcc8004180a1c900103e000b200441d0006a24002003a741ffff037141ffff036c20056e0baf08030b7f017e017f230041d0016b2204240020042003360214200420023602102001280200220520012802082202412c6c22066a2107200128020421080240024020020d0020052102200521010c010b200441f0006a410c6a2109200441f0006a4104722103200441186a41086a210a200441186a41106a210b200441186a41186a210c200441186a41206a210d200521020340200a20022201410c6a290200370300200b200141146a290200370300200c2001411c6a290200370300200d200141246a2902003703002004200141046a2902003703182001412c6a21022001280200220e450d0120032004290318370200200341086a200a290300370200200341106a200b290300370200200341186a200c290300370200200341206a200d2903003702002004200e3602704200210f02402004280210200910a002220e450d0020042802142210280208200e280200220e4d0d002010280200200e41386c6a290300210f0b200441a0016a41286a200441f0006a41286a280200360200200441a0016a41206a200441f0006a41206a290300370300200441a0016a41186a200441f0006a41186a290300370300200441a0016a41106a200441f0006a41106a290300370300200441a0016a41086a200441f0006a41086a290300370300200420042903703703a001200441c0006a200441a0016a200f420010bd04200141286a200441c0006a41286a280200360200200141206a200441c0006a41206a290300370200200141186a200441c0006a41186a290300370200200141106a200441c0006a41106a290300370200200141086a200441c0006a41086a29030037020020012004290340370200200641546a22060d000b20022101200721020b200720026b2203412c6d210602402003450d002006412c6c210303400240200241046a2802002206450d00200641226c450d002002280200102e0b2002412c6a2102200341546a22030d000b0b200441053602a001200120056b220b412c6d220a412c6c21022005210302400340200321012002450d014200210f024020042802102001410c6a10a0022203450d0020042802142206280208200328020022034d0d002006280200200341386c6a290300210f0b2001412c6a2103200441086a2001200f420010bf04200241546a210220042802082201450d000b200428020c2102200441033602a00120042002ad4220862001ad843702a4010b0240024020042802a00122014105470d00200020053602042000410c6a200a360200200041086a2008360200410021010c010b20042902a401210f20002001360204200041086a200f3702000240200b450d00200a412c6c21022005210103400240200141046a2802002203450d00200341306c450d002001280200102e0b2001412c6a2101200241546a22020d000b0b410121012008450d002008412c6c450d002005102e0b20002001360200200441d0016a24000b850103027f017e027f230041106b22012400024002400240200035020842208620002802002202ad84101e2203428080808010540d00410021042003a722052d00000e020201000b41cae0cc00412e200141086a41f8e0cc004188e1cc00103e000b410121040b2005102e0240200041046a280200450d002002102e0b200141106a240020040b070010184101460b8b0705017f017e077f037e027f23004180026b220224002002200136020c0240024002402002410c6a10082203422088a722010d0020004100360208200042013702000c010b2002200136021420022003a722043602102002200241106a10ab01024002400240024020022802000d002002280204220520022802144105762201200120054b1b22014105742206417f4c0d050240024020010d00410121070c010b2006102c2207450d030b2001ad210302402005450d00410021080340200241003a00b8012002280214417f6a2101200841016a210841002106024002400240024003402001417f460d0120024198016a20066a200228021022092d00003a00002002200941016a3602102002200641016a22093a00b801200220013602142001417f6a21012009210620094120470d000b200241c0016a41086a220120024198016a41086a290300370300200241c0016a41106a220620024198016a41106a290300370300200241c0016a41186a220a20024198016a41186a29030037030020022002290398013703c001200941ff0171411f4d0d01200241386a41086a2001290300220b370300200241386a41106a2006290300220c370300200241386a41186a200a290300220d370300200241186a41186a2209200d370300200241186a41106a220a200c370300200241186a41086a220e200b370300200220022903c001220b3703582002200b3703382002200b3703182003422088220ba722012003a7470d03200141016a220620014f0d020c0b0b200641ff0171450d00200241003a00b8010b200342ffffff3f83500d042007102e0c040b2001410174220f20062006200f491b22064104200641044b1b220641ffffff3f71200646210f200641057421060240024020010d0020024100360298010c010b200241013602a00120022007360298012002200b4205863e029c010b200241c0016a2006200f20024198016a107d20022802c801210620022802c0014101460d0420022802c40121072006410576ad21030b200720014105746a22062002290318370000200641186a2009290300370000200641106a200a290300370000200641086a200e290300370000200342ffffffff0f83200141016aad42208684210320082005470d000b0b20070d030b41cae0cc00412e20024198016a41c4dfcc0041d4dfcc00103e000b2006450d030b1036000b20002003370204200020073602002004102e0b20024180026a24000f0b1038000bfa0203027f017e067f230041206b220224000240024020014102490d00200041206a22032000412010ec08417f4a0d002000290000210420002003290000370000200241186a2205200041186a2206290000370300200241106a2207200041106a2208290000370300200241086a2209200041086a220a290000370300200a200341086a2900003700002008200341106a2900003700002006200341186a29000037000020022004370300024020014103490d00200041206a210320002001417f6a22064105746a21080340200341206a22002002412010ec08417f4a0d012006450d0320032000290000370000200341186a200041186a290000370000200341106a200041106a290000370000200341086a200041086a290000370000200021032006417f6a22064101470d000b200821030b20032002290300370000200341186a2005290300370000200341106a2007290300370000200341086a20092903003700000b200241206a24000f0b2001200141d4d1cc00103c000bb719030a7f047e0d7f230041a0076b220124000240024020002802082202200028020c2203470d00410821020c010b2000200241206a22043602082000280210210520014190026a41186a200241186a29000037030020014190026a41106a200241106a29000037030020014190026a41086a200241086a2900003703002001200229000037039002200028021421064100210202400240024002402000411c6a28020022070e020201000b410021022007210803402008410176220920026a210a200a20022006200a4105746a20014190026a412010ec084101481b2102200820096b220841014b0d000b0b200620024105746a20014190026a412010ec08450d010b03402000200541016a2205360210024020042003470d00410821020c030b2000200441206a220936020820014190026a41186a200441186a29000037030020014190026a41106a200441106a29000037030020014190026a41086a200441086a290000370300200120042900003703900241002102200921040240024020070e020201000b410021022007210403402004410176220a20026a210820082002200620084105746a20014190026a412010ec084101481b21022004200a6b220441014b0d000b0b20092104200620024105746a20014190026a412010ec080d000b0b02400240200720024d0d00200141186a200620024105746a220241186a290000220b370300200141106a200241106a290000220c370300200141086a200241086a290000220d37030020012002290000220e3703002000200541016a360210200041246a2802002109200041286a280200210320002802202107200141206a41186a200b370300200141206a41106a200c370300200141206a41086a200d3703002001200e370320410221022005109e070d0202400240411b102c220a450d00200a41176a4100280093db48360000200a41106a410029008cdb48370000200a41086a4100290084db48370000200a41002900fcda483700004104102c2202450d00200142043702c401200120023602c0012001200536029002200141c0016a20014190026a4104107420012802c401210820012802c0012104024020012802c80122020d00411b210f2002411b6a21000c040b2002411b6a22002002490d012001429b80808010370294022001200a36029002200141d8056a20004136200041364b1b410120014190026a107d200141e0056a280200210f024020012802d8054101460d0020012802dc05210a0c040b200f450d010b1036000b1038000b2002200741ecdac800103c000b200a411b6a2004200210e9081a02402008450d002004102e0b200141c0016a4101200a200010df0602400240024002400240024002400240024020012802c0012202450d00200141c8016a28020022044104490d002004417c714104460d0020022800002007470d00200228000441036a20094b0d010b200141003602e005200142013703d805200120073602900241042102200141d8056a20014190026a410410742001200936029002200141d8056a20014190026a4104107420012802d805210420012802e005210820014190026a41086a200141c0016a41086a280200360200200120012903c001370390024101200a200020014190026a2004200810e0062108024020012802dc05450d002004102e0b2008450d0120014190026a109f072001280290022210450d04200141a0026a280200211120014190026a410c6a2802002112200141a4026a280200211320014190026a41086a2802002114200128029402211520014100360288022001420137038002200120093602900220014180026a20014190026a41041074201420014180026a107620014180026a201020141074201320014180026a107602402013450d0020122013410c6c6a210620122102034020022802002104200241086a280200220820014180026a107620014180026a2004200810742002410c6a22022006470d000b0b200120073602900220014180026a20014190026a41041074200120053602900220014180026a20014190026a41041074200120033602900220014180026a20014190026a4104107420014190026a41e9dabdf306200141206a200128028002220420012802880210a0074101210220012d0090024101460d02410321080c030b024020012802c401450d002002102e0b410121020b200f0d050c060b200141fe016a20012d0093023a0000200141d8056a41086a200141a4026a290200370300200141e8056a200141ac026a290200370300200141f0056a200141b4026a290200370300200141f8056a200141bc026a29020037030020014180066a200141c4026a29020037030020014185066a200141c9026a290000370000200120012f0091023b01fc0120012001419c026a2902003703d80520014190026a41086a28020021062001280294022108410021020b200141f8016a41026a2216200141fc016a41026a2d00003a0000200141c0016a41086a2217200141d8056a41086a290300370300200141c0016a41106a2218200141d8056a41106a290300370300200141c0016a41186a2219200141d8056a41186a290300370300200141c0016a41206a221a200141d8056a41206a290300370300200141c0016a41286a221b200141d8056a41286a290300370300200141c0016a41306a200141d8056a41306a290300370300200120012f01fc013b01f801200120012903d8053703c001024020020d00200141bc016a41026a20162d00003a000020014190026a41086a201729030037030020014190026a41106a201829030037030020014190026a41186a201929030037030020014190026a41206a201a29030037030020014190026a41286a201b29030037030020014190026a412d6a200141c0016a412d6a290000370000200120012f01f8013b01bc01200120012903c001370390020240200128028402450d002004102e0b200120012f01bc013b01d8052001200141be016a2d00003a00da05410021020c030b0240200128028402450d002004102e0b02402015450d002010102e0b02402013450d002013410c6c21042012210203400240200241046a280200450d002002280200102e0b2002410c6a2102200441746a22040d000b0b4101210202402011450d002011410c6c450d002012102e0b20082109200621100c010b41012102410521090b0b20014180016a41086a220420014190026a41086a29030037030020014180016a41106a221620014190026a41106a29030037030020014180016a41186a221720014190026a41186a29030037030020014180016a41206a221820014190026a41206a29030037030020014180016a41286a221920014190026a41286a29030037030020014180016a412d6a221a20014190026a412d6a290000370000200120012d00da053a00ba01200120012f01d8053b01b80120012001290390023703800102400240024020020d00200141c0006a41086a22022004290300370300200141c0006a41106a22042016290300370300200141c0006a41186a22162017290300370300200141c0006a41206a22172018290300370300200141c0006a41286a22182019290300370300200141c0006a412d6a2219201a290000370000200120012d00ba013a007e200120012f01b8013b017c2001200129038001370340200141d0036a2003360200200141cc036a2005360200200141c8036a2007360200200141c4036a2013360200200141c0036a2011360200200141bc036a2012360200200141b8036a2014360200200141b4036a2015360200200141b0036a2010360200200141ac036a200936020020014190026a41c4016a20012f017c3b0100200141d6036a20012d007e3a0000200141db036a2006360000200141d7036a20083600002001410b3602a803200142023703f8022001418c046a201929000037000020014187046a2018290300370000200141ff036a2017290300370000200141f7036a2016290300370000200141ef036a2004290300370000200141e7036a2002290300370000200120012903403700df0320014194046a200141d8056a41c40110e9081a200120014190026a3602d805200141c0016a200141d8056a109005200141d8056a41086a200141c0016a41086a280200360200200120012903c0013703d805200141d8056a10e8062104024020012903f8024202510d0020012d00900241ff01714102470d00200128029802450d00200128029402102e0b200141a8036a108b02410721024106210920040d010c020b4107210220094107460d010b20014100360298022001420137039002200120073602d80520014190026a200141d8056a41041074200141003602d80520014190026a200141d8056a410410744101200a2000200128029002220220012802980210a1070240200128029402450d002002102e0b200921020b200f450d010b200a102e0b200141a0076a240020020bc41c07127f017e017f017e017f027e097f230041b0016b22022400200028020821032000280200210420002802042105200241206a41206a2206200041306a2d00003a0000200241206a41186a2207200041286a290000370300200241206a41106a2208200041206a290000370300200241206a41086a2209200041186a29000037030020022000290010370320024002400240024002400240024002400240024002400240024002400240024002400240024020052f0132220a410a4b0d0020024188016a41206a20062d00003a000020024188016a41186a200729030037030020024188016a41106a200829030037030020024188016a41086a20092903003703002002200229032037038801200541346a2106200a41016a2107200341016a2208200a4d0d012006200341216c6a220a200229038801370000200a41206a20024188016a41206a2d00003a0000200a41186a20024188016a41186a290300370000200a41106a20024188016a41106a290300370000200a41086a20024188016a41086a290300370000200541046a210a0c020b4105210a4100210b02400240200341054f0d004104210a200321060c010b41052106024002402003417b6a0e020201000b200341796a21064101210b4106210a0c010b410021064101210b0b41a003102c2203450d05200341003b013220034100360200200320052f0132220c200a417f736a22073b013220024190016a200541346a220d200a41216c6a2208410c6a29000037030020024198016a200841146a2900003703002002419d016a200841196a29000037000020022008290004370388012007410c4f0d06200c200a41016a22096b2007470d07200541046a220c200a4102746a280200210e2008280000210f200341346a200d200941216c6a200741216c10e9081a200341046a200c20094102746a200741027410e9081a2005200a3b0132200241e8006a41086a20024188016a41086a2208290300370300200241e8006a41106a20024188016a41106a2209290300370300200241e8006a41156a20024188016a41156a290000370000200220022903880137036820032005200b1b220a2f0132210720024188016a41206a220d200241206a41206a2d00003a000020024188016a41186a2210200241206a41186a2903003703002009200241206a41106a2903003703002008200241206a41086a2903003703002002200229032037038801200a41346a210b200741016a210c02400240200641016a221120074d0d00200b200641216c6a2207200229038801370000200741206a200d2d00003a0000200741186a2010290300370000200741106a2009290300370000200741086a2008290300370000200a41046a21070c010b200b201141216c6a200b200641216c6a220b200720066b41216c10ea081a200b41206a200d2d00003a0000200b41186a2010290300370000200b41106a2009290300370000200b41086a2008290300370000200b200229038801370000200a41046a220720114102746a200720064102746a200c2006417f736a41027410ea081a0b200720064102746a22122001360200200a200c3b0132200241086a2213200241e8006a41086a22102903002214370300200241106a2215200241e8006a41106a22112903002216370300200241186a200241e8006a41186a2217290300221837030020022002290368221937030020172018370300201120163703002010201437030020022019370368200528020022010d02410021040c030b2006200841216c6a2006200341216c6a2206200a20036b41216c10ea081a200641206a20024188016a41206a2d00003a0000200641186a20024188016a41186a290300370000200641106a20024188016a41106a290300370000200641086a20024188016a41086a2903003700002006200229038801370000200541046a220a20084102746a200a20034102746a20072003417f736a41027410ea081a0b200a20034102746a22122001360200200520073b01320c0e0b200e211a4100210a2003211b200f211c034020052f01302107200241c8006a41156a221d200241e8006a41156a290000370000200241c8006a41106a221e2011290300370300200241c8006a41086a221f2010290300370300200220022903683703482004200a470d0620012f01322209410b490d024100210841042105024020074105490d0020072105024002402007417b6a0e020201000b200741796a210741012108410621050c010b4100210741012108410521050b41d003102c2203450d03200341003b013220034100360200200320012f0132220b2005417f736a220a3b0132200141346a220c200541216c6a2206280000210f200241156a2220200641196a2900003700002015200641146a29000037030020132006410c6a29000037030020022006290004370300200a410c4f0d07200b200541016a22066b200a470d08200141046a220b20054102746a280200210e200341346a200c200641216c6a200a41216c10e9081a200341046a200b200641027422066a200a41027410e9081a200120053b013220024188016a41086a220b201329030037030020024188016a41106a220c201529030037030020024188016a41156a220d2020290000370000200220022903003703880120032f0132220a41016a2120200a410c4f0d09200920056b22052020470d0a200441016a2104200341a0036a200120066a41a0036a200541027410e9081a4100210502400340200320054102746a41a0036a280200220620053b01302006200336020020052005200a4922066a2205200a4b0d0120060d000b0b200241206a41186a222020024188016a41186a290300370300200241206a41106a2221200c290300370300200241206a41086a2222200b29030037030020022002290388013703202003200120081b22062f01322109200d201d290000370000200c201e290300370300200b201f2903003703002002200229034837038801200641346a210a0240200741016a220520094b221d0d00200a200541216c6a200a200741216c6a200920076b41216c10ea081a0b200941016a2108200a200741216c6a220a201c360000200a200229038801370004200a410c6a200b290300370000200a41146a200c290300370000200a41196a200d290000370000200641046a210a0240201d0d00200a20054102746a200a20074102746a2007417f7320086a41027410ea081a0b200a2007410274220b6a201a360200200641a0036a210a0240200741026a220c200941026a22094f0d00200a200c4102746a200a20054102746a2005417f7320096a41027410ea081a0b200a20054102746a201b360200200620083b01320240200520094f0d002006200b6a41a4036a210503402005280200220a200741016a22073b0130200a2006360200200541046a210520082007470d000b0b2010202229030037030020112021290300370300201720202903003703002002200229032037036820012105200128020022062101200e211a2004210a2003211b200f211c20060d000b0b20024188016a41186a201729030037030020024188016a41106a2011290300221437030020024188016a41086a2010290300221637030020022002290368221837038801200241e8006a41156a20024188016a41156a290000370000201120143703002010201637030020022018370368200028020c220a2802042206450d09200a280200210741d003102c2205450d01200520063602a003200541003b013220054100360200200641003b013020062005360200200a2005360204200a200741016a360200200241206a41156a200241e8006a41156a290000370000200241206a41106a200241e8006a41106a290300370300200241206a41086a200241e8006a41086a2903003703002002200229036837032020072004470d0a20052f01322207410b4f0d0b2005200741216c6a220641346a200f360000200641386a2002290320370000200641c0006a200241286a290300370000200641c8006a200241306a290300370000200641cd006a200241356a2900003700002005200741016a22063b0132200520064102746a41a0036a2003360200200520074102746a41046a200e360200200320063b013020032005360200200a200a28020841016a3602080c0d0b20012f0132210320024188016a41156a2209200241c8006a41156a29000037000020024188016a41106a2204200241c8006a41106a29030037030020024188016a41086a220b200241c8006a41086a2903003703002002200229034837038801200741016a2105200141346a210a0240200320074d22060d00200a200541216c6a200a200741216c6a200320076b41216c10ea081a0b200341016a2108200a200741216c6a220a201c360000200a200229038801370004200a410c6a200b290300370000200a41146a2004290300370000200a41196a2009290000370000200141046a210a024020060d00200a20054102746a200a20074102746a2007417f7320086a41027410ea081a0b200a200741027422096a201a360200200141a0036a210a200341026a2107024020060d002009200a6a41086a200a20054102746a2005417f7320076a41027410ea081a0b200a20054102746a201b360200200120083b0132200520074f0d0b200341016a210620012005417f6a22054102746a41a4036a210303402003280200220a200541016a22053b0130200a2001360200200341046a210320062005470d000c0c0b0b1036000b2007410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b41ac9cc700413541e49cc7001039000b200a410b41e49bc700104d000b41f49bc7004128419c9cc7001039000b2020410c41f49cc700104d000b41f49bc7004128419c9cc7001039000b41e8aac700412b4194abc7001039000b41e899c700413041989ac7001039000b41a89ac700412041c89ac7001039000b200028020c2205200528020841016a3602080b200241b0016a240020120be80a010f7f230041206b220224000240200128020041016a220341014d0d002001200336020020024100360210200241104104200241106a107d200241086a28020021030240024002400240024020022802004101460d00200228020422042001360200200128020041016a220541024f0d010c050b2003450d010c030b2001200536020020024100360210200241104104200241106a107d200241086a28020021060240024020022802004101460d00200228020422072001360200200128020041016a22054102490d052003410276210820012005360200200641027621094104210a4101210b0240024002400340200541016a220341014d0d0920012003360200200128020841016a220341004c0d0120012003360208200128020c2205450d07200541106a210c2007200b410274220d6a210e2007210602400340200e2006460d01200628020022032005460d09200328020841016a220f41004c0d042003200f3602082005280208220f41016a221041004c0d05200520103602080240200341106a200c412010ec080d0020032d003020052d0030470d002005200f36020820032003280208417f6a3602080c0a0b200641046a21062005200f36020820032003280208417f6a3602080c000b0b200128020c220328020041016a220541014d0d09200320053602000240200b2008470d00200b41016a2205200b490d07200b41017422062005200620054b1b22054104200541044b1b220541ffffffff037120054641027421062005410274210502400240200b0d00200241003602100c010b20024104360218200220043602102002200d3602140b200220052006200241106a107d2002280208210520022802004101460d0620022802042104200541027621080b2004200d6a2003360200200128020c220328020041016a220541014d0d092003200536020020012001280200417f6a2205360200024020050d002001410c6a10cd04200141046a22052005280200417f6a220536020020050d002001102e0b200328020041016a220541014d0d092003200536020002400240200b2009470d00200b41016a2205200b490d08200b41017422062005200620054b1b22054104200541044b1b220541ffffffff037120054641027421062005410274210502400240200b0d00200241003602100c010b20024104360218200220073602102002200d3602140b200220052006200241106a107d2002280208210520022802004101460d0120022802042107200541027621090b2007200d6a200336020020012001280208417f6a36020820012001280200417f6a2205360200024020050d002001410c6a10cd04200141046a22052005280200417f6a220536020020050d002001102e0b200b41016a210b200a41046a210a20032802002105200321010c010b0b20050d070c050b41bcd9cc004118200241106a41a4bfcc0041c0c1cc00103e000b41bcd9cc004118200241106a41c4ffc40041c4bfcc00103e000b41bcd9cc004118200241106a41c4ffc40041d4bfcc00103e000b20060d030c010b20050d020b1038000b20012001280208417f6a36020820012001280200417f6a2203360200024020030d002001410c6a10cd04200141046a22032003280200417f6a220336020020030d002001102e0b20002004360204200020013602002000410c6a200b360200200041086a20083602000240200b450d00200721030340200328020022052005280200417f6a3602000240200328020022052802000d002005410c6a10cd04200328020041046a22052005280200417f6a3602002003280200220541046a2802000d002005102e0b200341046a2103200a417c6a220a0d000b0b0240200941ffffffff0371450d002007102e0b200241206a24000f0b1036000b00000bae0201047f230041106b220224004100210302400240024002400240024002402000280208220441016a220541004c0d0020002004360208200028020c2204450d0620002005360208024020042001470d00410121030c060b200428020841016a220341004c0d01200420033602082001280208220541016a220341004c0d0220012003360208200441106a200141106a412010ec080d034101210320042d003020012d0030470d030c040b41bcd9cc004118200241086a41a4bfcc0041b4bfcc00103e000b41bcd9cc004118200241086a41a4bfcc0041c4bfcc00103e000b41bcd9cc004118200241086a41a4bfcc0041d4bfcc00103e000b410021030b2001200536020820042004280208417f6a360208200028020821050b20002005417f6a3602080b200241106a240020030bc80101047f230041c0006b220224004119210341e0b2c7002104410221050240024002400240200141ff01710e0400010203000b2002411c6a41013602002002420137020c2002419cc3cb00360208200241043602242002418883ca003602202002200241206a360218200241086a41c4afc8001044000b411a21034198b2c7002104410021050c010b411b210341bcb2c7002104410121050b20004183c8003b0100200041086a2003360200200041046a2004360200200041026a20053a0000200241c0006a24000b130020004103360204200041c4b1c7003602000bc40403027f017e037f230041a0036b22022400200241d0026a410c6a200041f0016a290200370200200241e4026a200041f8016a290200370200200241ec026a20004180026a290200370200200241e2c289ab063602d002200220002902e8013702d4022001280200210320024190036a200141046a10c301200241f8026a410c6a20024190036a41086a280200360200200220033602f80220022002290390033702fc02200220012802103602880320024180026a200241d0026a200241f8026a109d0402400240024020022802c002450d00200241a8016a41056a20024180026a41d00010e9081a200241d0006a200241a8016a41d50010e9081a2002200241d0006a41056a41d00010e908220141a8016a200141d00010e9081a200141d0006a410c6a210320002903002104410021054100210002400340200041d000460d014108102c2206450d0420014208370254200120063602502001200437038002200141d0006a20014180026a41081074200341086a41002900a197453700002003410029009997453700002001200141a8016a20006a36026c20014180026a200141d0006a10ae0102402001280254450d002001280250102e0b200141d0006a20014180026a108e03200128025022072001280258108f02210602402001280254450d002007102e0b200041d0006a210020060d000b410221050b0240200141ec016a2802002200450d00200041306c450d00200141e8016a280200102e0b41800621010c010b4100210541800821010b200241a0036a240020012005720f0b1036000b130020004106360204200041b4b4c7003602000b3400200041bad7c70036020420004100360200200041146a4102360200200041106a41c4d7c700360200200041086a42083702000b130020004105360204200041f8dcc7003602000b4401027f230041106b2202240002404104102c22030d001036000b200042043702042000200336020020024180800136020c20002002410c6a41041074200241106a24000b4901027f230041106b2202240002404110102c22030d001036000b20004210370204200020033602002002420037030820024280c2d72f3703002000200241101074200241106a24000b4a01027f230041106b2202240002404110102c22030d001036000b20004210370204200020033602002002420037030820024280c8afa0253703002000200241101074200241106a24000b4201027f230041106b2202240002404101102c22030d001036000b2000420137020420002003360200200241143a000f20002002410f6a41011074200241106a24000b4401027f230041106b2202240002404104102c22030d001036000b2000420437020420002003360200200241c0f00036020c20002002410c6a41041074200241106a24000bab0301087f230041106b2203240020032000200220016b10fc060240024020032802004101470d00200341086a2802000d0141d0f0cc00411141e4f0cc001039000b02400240200028020022044125490d002000410c6a22052802002106200041086a28020021070c010b200041056a21072004210620002105412421040b024002400240200620044f0d00034020022001460d02200720066a20012d00003a0000200141016a21012004200641016a2206470d000b200421060b2005200636020020012002460d01200141016a21062000410c6a2108200041056a210920012d0000210a034002400240200028020022074125490d00200028020c210120002802082105200821040c010b200721012000210420092105412421070b024020012007470d0020032000410110fc06024020032802004101470d00200341086a2802000d0541d0f0cc00411141e4f0cc001039000b200028020c210120002802082105200821040b200520016a200a3a00002004200428020041016a36020020022006460d0220062d0000210a200641016a21060c000b0b200520063602000b200341106a24000f0b1036000baa0301047f02400240200128020022034125490d002001410c6a2802002104200321050c010b41242105200321040b0240200520046b2002490d00200041003602000f0b0240024002400240200420026a22022004490d004100417f2002417f6a677620024102491b220441016a22052004490d000240024020034125490d002001410c6a2802002104200141086a2802002102200321060c010b200141056a210241242106200321040b200420054b0d010240200541244b0d000240200341244b0d00200041003602000f0b200141003a0004200141056a2002200410e9081a200120043602002002102e0c040b20062005460d030240200341244b0d0002402005102c2203450d0020032002200410e9081a0c040b2000200536020420004101360200200041086a41013602000f0b200220062005103022030d022000200536020420004101360200200041086a41013602000f0b2000200536020420004101360200200041086a41003602000f0b41c2f1cc00412041e4f1cc001039000b200141013a0004200120053602002001410c6a2004360200200141086a20033602000b200041003602000bd60501047f20002802282101024002400240024020002d000022024102470d002000410c6a2802002102200041086a2802002103200041046a280200210020012001280200417f6a2204360200024020040d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22042004280200417f6a220436020020040d002001102e0b0240200041ff01710d0041002104200320024f0d030b4110102c2200450d03200041f8f7c60036020c2000410136020820004281808080103702004110102c2201450d0320014190f8c60036020c20014101360208200142818080801037020020002000280200417f6a220436020020040d012000280208200028020c2802001103000240200028020c280204450d002000280208102e0b200041046a22042004280200417f6a220436020020040d012000102e0c010b410021040240024020020e0400010103010b20002d0001210020012001280200417f6a2204360200024020040d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22042004280200417f6a220436020020040d002001102e0b0240200041ff01710d0041010f0b4110102c2200450d03200041f8f7c60036020c2000410136020820004281808080103702004110102c2201450d0320014190f8c60036020c20014101360208200142818080801037020020002000280200417f6a220436020020040d012000280208200028020c2802001103000240200028020c280204450d002000280208102e0b200041046a22042004280200417f6a220436020020040d012000102e0c010b4101210420024103460d010b20012001280200417f6a22003602004102210420000d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22002000280200417f6a220036020020000d002001102e0b20040f0b1036000be21205027f0c7e037f027e017f230041c0026b220524000240024020022003844200520d0020004100360200200041106a4200370300200041086a42003703000c010b2005200136020c200541d0006a200110c802200541c0016a20052802502206200528025810c902200541c0016a41386a2903002107200541c0016a41306a2903002108200541c0016a41286a2903002109200541c0016a41206a290300210a200541c0016a41186a290300210b200541c0016a41106a290300210c20054180026a290300210d20052903c801210e20052903c001210f20054190016a41086a20054190026a290300370300200520054188026a2903003703900102400240200f4201510d004200210d200541106a41386a4200370300200541106a41306a4200370300200541106a41286a4200370300200541106a41206a4200370300200541106a41186a4200370300200541106a41106a4200370300200541106a41086a4200370300200542003703104200210a4200210942002108420021074200210e4200210c4200210b42002110420021114200210f420021120c010b200541106a41206a2009370300200541106a41286a2008370300200541106a41106a200b370300200541106a41306a20073703002005200a3703282005200e3703102005200d3703482005200c3703182009211020082111200e210f200c21120b02402005280254450d002006102e0b02400240200f2012844200520d0020102005290320842011200541286a29030084844200520d002005290340200541c8006a2903008450450d0042002110410021130c010b42012110410121130b024020104201510d004200210a4200210b4200210d4200210942002108420021074200210e4200210c0b41032106024002400240200e20027d2212200e56200c20037d200e200254ad7d220f200c56200f200c511b450d004113211441c8a3c700211541052101410321130c010b02402012200b7c221642ffc7afa02556200f200a7c20162012542214ad7c22114200522011501b0d00200e200b7c221742ffc7afa02556200c200a7c2017200e54ad7c220e420052200e501b450d00410921144180a4c700211541052113410521010c010b200541c0016a20012002200320042012200f10d706024020052d00c00122064106460d00200541c8016a280200211420052802c401211520052d00c301210420052d00c201211320052d00c10121010c010b200541e8016a22152008370300200541f0016a221820073703002005200b3703d001200541d8016a200a370300200520093703e001200520123703c0012005200f3703c8014200210c2002422088a721062002a7210402400240427f201620142011200f542011200f511b22141b220242ffc7afa02556427f201120141b220e420052200e501b0d002012200b84200f200a8484220c5021144200210b200c420052ad210c0c010b2018290300211720152903002116200541e0016a2903002111200541d0016a290300210920052903d801210720052903c801210820052903c001210a4201210b410121140b200541f8006a200e370300200541f0006a22152002370300200541e0006a200f370300200520123703582005200337038801200520063602840120052004360280012005200c37036820052010420152ad22033703500240024002400240024002402013200b420152720d00200520013602c0012001200541c0016a10bd060c010b024020134101732206200b420151720d00200520013602c0012001200541c0016a10be0641ff017122064103460d01024020060e03030200030b20054180016a2101024020140d00200520153602c001200541c0016a10cc020b200520013602c001200541c0016a10cc02410421064100210441002113410021010c070b200b4201522006710d020b200541a0016a200110c802200541c0016a20052802a001220420052802a801221310c90220052903c001210e20054190016a41086a220620054190026a290300370300200520054188026a2903003703900102400240200e4201510d00200541b0016a41086a4200370300200542003703b0010c010b200541b0016a41086a200629030037030020052005290390013703b0010b20054188026a20052903b00137030020054190026a200541b0016a41086a290300370300200542013703c001200541c0016a41386a20174200200b42015122061b370300200541f0016a2016420020061b370300200541c0016a41286a2011420020061b370300200541e0016a2007420020061b370300200541d8016a2009420020061b370300200541c0016a41106a2008420020061b37030020054180026a200d420020061b3703002005200a420020061b3703c80120042013200541c0016a41086a10c805024020052802a401450d002004102e0b200541d0006a41106a290300210f200541d0006a41286a290300210e200541d0006a41386a290300210920052903582112200529037021022005290380012108200529035021032005290368210c0c030b20054188016a29030021090c010b20054188016a29030021090b20052903800121080b024020034201520d00200541f8016a200f370300200541f0016a2012370300200541c0016a41086a41003a0000200541c9016a2001290000370000200541d1016a200141086a290000370000200541d9016a200141106a290000370000200541e1016a200141186a290000370000200541033a00c001200541c0016a10fe010b02400240200c50450d004200210c0c010b200541c0016a41086a200528020c220141086a290000370300200541c0016a41106a200141106a290000370300200541c0016a41186a200141186a290000370300200520012900003703c0014201210c0b200541d0006a41186a200541c0016a41186a22012903002203370300200541d0006a41106a200541c0016a41106a2206290300220b370300200541d0006a41086a200541c0016a41086a290300220a370300200520052903c001220f370350200541f0016a200e370300200541e8016a220420023703002006200a3703002001200b370300200541e0016a20033703002005200c3703c0012005200f3703c801200541c0016a10d204024020052903c001500d0020052004360210200541106a10cc020b20004100360200200041106a2009370300200041086a20083703000c020b2014ad4220862015ad84210e0b200041086a200e3702002000410136020020002004411874201341ff017141107472200141ff0171410874722006723602040b200541c0026a24000bdb0403027f027e037f230041a0036b22022400200241d0026a410c6a200041e8016a290200370200200241e4026a200041f0016a290200370200200241ec026a200041f8016a290200370200200241e7e485f3063602d0022002200041e0016a2902003702d4022001280200210320024190036a200141046a10c301200241f8026a410c6a20024190036a41086a280200360200200220033602f80220022002290390033702fc02200220012802103602880320024180026a200241d0026a200241f8026a109d040240024020022802c002450d00200241a8016a41056a20024180026a41d00010e9081a200241d0006a200241a8016a41d50010e9081a2002200241d0006a41056a41d00010e9082101200041106a290300210420002903002105200141a8016a200141d00010e9081a200141d0006a410c6a2103410021064100210002400340200041d000460d0120014201370350200141003602582001200537038002200141d0006a20014180026a410810742001200437038002200141d0006a20014180026a41081074200341086a410029009197453700002003410029008997453700002001200141a8016a20006a36026c20014180026a200141d0006a10ae0102402001280254450d002001280250102e0b200141d0006a20014180026a108e03200128025022072001280258108f02210802402001280254450d002007102e0b200041d0006a210020080d000b410221060b0240200141ec016a2802002200450d00200041306c450d00200141e8016a280200102e0b41800621010c010b4100210641800821010b200241a0036a240020012006720b130020004104360204200041fcedc7003602000b3400200041bcdbc80036020420004100360200200041146a4101360200200041106a41a480c800360200200041086a42073702000b130020004101360204200041cc81c8003602000b900706027f017e027f017e087f057e23002203210420034180016b4160712203240042e4cab5fbb6ccdcb0e3002105200342e4cab5fbb6ccdcb0e3003703180240024002402001200284500d00200341e0006a200010d40620032802602106200328026421074201210802400240200328026822090d002006210a0c010b200620094105746a210b200341c0006a41196a210c200621092006210a0340200341286a41106a220d200941106a290300370300200341286a41086a220e200941086a29030037030020032009290300370328200941186a2d0000210f2003200941196a28000036022020032009411c6a280000360023200f4103460d01200c2003280220360000200c41036a22102003280023360000200341c0006a41106a200d2903002211370300200341c0006a41086a220d200e290300370300200320032903283703402003200f3a005802400240024020112003290318520d002008a7210e200341033a0078200329037021052003290360211220032903682113200329037821080240200e41ff0171220e4103470d0020122101201321020c030b200d2903002211200220032903402214200156201120025620112002511b220d1b211120142001200d1b2114200f4102200f200e461b210f2003290350211520122101201321020c010b2003200c28000036026020032010280000360063200d290300211120032903402114200329035021150b200a2014370300200a200f3a0018200a2015370310200a2003280260360019200a2011370308200a411c6a2003280063360000200a41206a210a0b200941206a2209200b470d000b0b200a20066b410575210902400240200842ff018342038550450d00200721030c010b0240024020092007460d0020072103200921070c010b200741016a22092007490d042007410174220a2009200a20094b1b22094104200941044b1b220941ffffff3f71200946410374210a200941057421090240024020070d00200341003602600c010b200341e0006a41086a410836020020032006360260200320074105743602640b200341c0006a2009200a200341e0006a107d200341c8006a280200210920032802404101460d0320032802442106200941057621030b200620074105746a220920053703102009200237030820092001370300200941186a2008370300200741016a21090b20002006200910d506200341ffffff3f71450d002006102e0b200424000f0b2009450d001036000b1038000b130020004104360204200041888dc8003602000b3400200041f8fcc60036020420004100360200200041146a4104360200200041106a41c8a7c800360200200041086a42083702000b130020004101360204200041acaec8003602000bf00101037f230041106b2202240020004100360208200042013702002001200010e805200141106a200010e8052002200128022036020c20002002410c6a410410742002200128022436020c20002002410c6a410410742002200128022836020c20002002410c6a41041074200141306a2802002103200141386a200141346a200128022c4101461b28020022042000107602402004410c6c2204450d00200320046a2104034020002003410810742002200341086a28020036020c20002002410c6a410410742003410c6a22032004470d000b0b2002200128023c36020c20002002410c6a41041074200241106a24000bcf0301027f230041206b2205240020054100360208200542013703000240024002400240024020002802000e03000102030b200541003a00102005200541106a410110744120102c2206450d032005422037021420052006360210200541106a200041086a412010742005200528021022062005280218107402402005280214450d002006102e0b200520002802043602102005200541106a410410740c020b200541013a00102005200541106a410110744120102c2206450d022005422037021420052006360210200541106a200041086a412010742005200528021022062005280218107402402005280214450d002006102e0b200520002802043602102005200541106a410410740c010b200541023a00102005200541106a410110744120102c2206450d012005422037021420052006360210200541106a200041086a412010742005200528021022062005280218107402402005280214450d002006102e0b200520002802043602102005200541106a410410740b200520033703102005200541106a41081074200520043703102005200541106a4108107420022005280200220620052802082001108907210002402005280204450d002006102e0b200541206a240020000f0b1036000b150020002002ad4220862001ad84200310034101460b130020004101360204200041ecb7c8003602000b3400200041a5fec60036020420004100360200200041146a4106360200200041106a41f0bec800360200200041086a421a3702000b130020004103360204200041c8cac8003602000b4301027f230041106b2202240002404104102c22030d001036000b2000420437020420002003360200200241d80436020c20002002410c6a41041074200241106a24000b100020002802002000280204200110680bbc0201037f23004180016b2202240020002802002100024002400240024020012802002203411071450d0020002802002104410021000340200220006a41ff006a2004410f712203413072200341d7006a2003410a491b3a00002000417f6a2100200441047622040d000b20004180016a22044181014f0d02200141ac88c0004102200220006a4180016a410020006b104b21000c010b2000280200210402402003412071450d00410021000340200220006a41ff006a2004410f712203413072200341376a2003410a491b3a00002000417f6a2100200441047622040d000b20004180016a22044181014f0d03200141ac88c0004102200220006a4180016a410020006b104b21000c010b2004ad2001104821000b20024180016a240020000f0b2004418001419c88c0001056000b2004418001419c88c0001056000b8a0702027f047e230041f0016b2202240020002802002100024002400240024020012802002203411071450d00200041086a290300210420002903002105418001210002400340024020000d00410021000c020b200241f0006a20006a417f6a2005a7410f712203413072200341d7006a2003410a491b3a00002000417f6a210020054204882004423c8684220520044204882204844200520d000b20004181014f0d030b200141ac88c0004102200241f0006a20006a41800120006b104b21000c010b200041086a29030021042000290300210502402003412071450d00418001210002400340024020000d00410021000c020b200241f0006a20006a417f6a2005a7410f712203413072200341376a2003410a491b3a00002000417f6a210020054204882004423c8684220520044204882204844200520d000b20004181014f0d040b200141ac88c0004102200241f0006a20006a41800120006b104b21000c010b2002412736026c02400240200442ffff1f560d0020054213882004422d868442bda282a38eab04802104420021060c010b200241386a2005420042f3b2d8c19e9ebdcc957f420010e808200241286a2005420042d2e1aadaeda7c987f600420010e808200241d8006a2004420042f3b2d8c19e9ebdcc957f420010e808200241c8006a2004420042d2e1aadaeda7c987f600420010e808200241c8006a41086a290300200241286a41086a290300200241386a41086a290300220620022903287c2204200654ad7c220720022903487c2206200754ad7c2006200241d8006a41086a290300200420022903587c200454ad7c7c2204200654ad7c2207423e8821062004423e8820074202868421040b200241186a20042006428080e0b0b79fb79cf500427f10e808200229031820057c200241f0006a200241ec006a106702402004200684500d00200241f0006a41146a4130200228026c416c6a10eb081a2002411436026c200241086a20044213882006422d8684220542bda282a38eab048022062004428080e0b0b79fb79cf500427f10e808200229030820047c200241f0006a200241ec006a1067200542bda282a38eab04540d00200241f1006a4130200228026c417f6a10eb081a20022006a74130723a00702002410036026c0b200141d4e2cc004100200241f0006a200228026c22006a412720006b104b21000b200241f0016a240020000f0b2000418001419c88c0001056000b2000418001419c88c0001056000ba90705017f047e027f017e017f230041c0016b22022400200241b0016a200141186a2903002203200041186a29020085420020012903102204200029021085420010e808200241a0016a2003200041086a2902008542002004200029020085420010e8082001200141086a2903002205200241a0016a41086a29030020022903a001857c2005200241b0016a41086a29030020022903b001857c200129030042adfed5e4d485fda8d8007e42a0cbbf9599b5a19f0a7c8542178985421789220637030002400240200028022022074125490d002000412c6a2802002107200041286a28020021080c010b200041256a21080b20024190016a20062007ad220985420042adfed5e4d485fda8d800420010e808200120024198016a2903002002290390018520097c42adfed5e4d485fda8d8007e22063703000240024002400240024020074109490d00200741104d0d01200241c0006a2003200720086a41706a220a41086a2900008542002004200a29000085420010e80820012005200241c0006a41086a2903002002290340857c20068542178922063703000340200241306a2003200841086a2900008542002004200829000085420010e808200841106a21082005200241306a41086a2903002002290330857c2006854217892106200741706a220741104b0d000c040b0b0240200741014b0d002007450d0420024180016a2006200831000085420042adfed5e4d485fda8d800420010e80820024188016a2903002002290380018521060c030b200741034b0d01200241f0006a200720086a417f6a310000422086200833000084200685420042adfed5e4d485fda8d800420010e808200241f8006a29030020022903708521060c020b200241d0006a2003200720086a41786a2900008542002004200829000085420010e8082005200241d8006a2903002002290350857c20068542178921060c010b200241e0006a2003200720086a417c6a3500008542002004200835000085420010e8082005200241e8006a2903002002290360857c20068542178921060b200120063703000b02400240200041cc006a2d00000d0020022006420042adfed5e4d485fda8d800420010e808200241086a29030020022903008521060c010b200241206a2006420185420042adfed5e4d485fda8d800420010e808200241106a200241206a41086a290300200229032085200041cd006a31000085420042adfed5e4d485fda8d800420010e808200241106a41086a29030020022903108521060b20012006370300200241c0016a24000b6901017f230041206b220324002003200136020420032000360200200341086a41106a200241106a290200370300200341086a41086a200241086a29020037030020032002290200370308200341a4cec800200341046a41a4cec800200341086a4180a2cc001058000bd30202027f017e23004180016b2202240020002802002100024002400240024020012802002203411071450d0020002903002104418001210002400340024020000d00410021000c020b200220006a417f6a2004a7410f712203413072200341d7006a2003410a491b3a00002000417f6a2100200442048822044200520d000b20004181014f0d030b200141ac88c0004102200220006a41800120006b104b21000c010b2000290300210402402003412071450d00418001210002400340024020000d00410021000c020b200220006a417f6a2004a7410f712203413072200341376a2003410a491b3a00002000417f6a2100200442048822044200520d000b20004181014f0d040b200141ac88c0004102200220006a41800120006b104b21000c010b20042001104821000b20024180016a240020000f0b2000418001419c88c0001056000b2000418001419c88c0001056000b13002000410636020420004194cfc8003602000b110041e2a0cc00412841acd3c8001039000b110041e2a0cc00412841bcd3c8001039000bfb0501087f230041206b22042400024002400240200141086a280200220541036a2206417f4c0d0020012d000021072001280204210820012d000121094101210102402006450d002006102c2201450d020b20002001360200200041086a4100360200200041046a2006360200200541017420076a220141ffff03200141ffff03491b220641c0006a41ff0020062006413e2006413e491b220a461b21012006200a6b21064101210a02400340024002400240200a41ff01714102470d002001210b0c010b4100210b200a410171450d004100210a0c010b2006450d020240200641ff014b0d002006417f6a21014102210a410021060c010b200641817e6a210641ff0121014102210a0b200420013a00102000200441106a41011074200b21010c000b0b024002400240024020070d00200041046a2802002106200041086a28020021010c010b0240200041086a220b280200220a200041046a2802002206470d00200a41016a2201200a490d04200a41017422062001200620014b1b22014108200141084b1b210102400240200a0d00200441003602100c010b200441106a41086a41013602002004200a360214200420002802003602100b200420014101200441106a10d104200441086a280200210620042802004101460d0220002004280204360200200041046a20063602000b200b200a41016a22013602002000280200200a6a2009410f713a00000b200620016b2005490d01200028020021060c040b2006450d010c020b200120056a220a2001490d002006410174220b200a200b200a4b1b220a4108200a41084b1b210a0240024020060d00200441003602100c010b200441106a41086a410136020020042006360214200420002802003602100b2004200a4101200441106a10d104200441086a280200210a024020042802004101460d00200020042802042206360200200041046a200a3602000c030b200a0d010b1038000b1036000b200620016a2008200510e9081a200041086a200120056a3602002003200010762000200220031074200441206a24000bff0101047f230041c0006b2202240041aab4c700210341092104410521050240024002400240024002400240200141ff01710e0700010203040506000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a41c4c5cb001044000b419eb4c7002103410c2104410021050c040b4192b4c7002103410c2104410121050c030b4188b4c7002103410a2104410221050c020b41ffb3c7002103410321050c010b41f6b3c7002103410421050b20004183c6003b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000bf50101047f230041306b22022400200241bad7c7004108108102200241106a41dcd9c7004107108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000bb40201037f230041e0006b22022400200241086a41bad7c7004108108102200241186a41f4d8c7004104108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241c8006a41086a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000bb40201037f230041e0006b22022400200241086a41bad7c7004108108102200241186a41f4d8c7004104108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241c8006a41086a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000b1300200041033602042000418cd4c8003602000b9a0801097f230041e0006b220224000240024020012802202203109e07450d0020004180063b0001200041013a0000200041036a410a3a00000c010b200241386a22044200370300200241306a22054200370300200241206a41086a420037030020024200370320200241206a41a081ca004107108102200241c0006a41e4d1c100410c1081022004200241c0006a41086a29000037030020052002290040370300200241086a200241206a4120108e020240200128021c200228020c410020022802081b2206460d0020004180063b0001200041013a0000200041036a410a3a00000c010b200241106a10870302400240200228021822052001280224460d00200041800e3b0001200041013a0000200041036a410a3a00000c010b0240200520034b0d0020004180083b0001200041013a0000200041036a410a3a00000c010b200141286a2107200228021020034105746a2108200241003602282002420137032020022001280200360240200241206a200241c0006a41041074200128020421042001410c6a2802002209200241206a1076200241206a200420091074200141106a2802002104200141186a2802002209200241206a10762006210a02402009450d0020042009410c6c6a2109034020042802002103200441086a2802002205200241206a1076200241206a2003200510742004410c6a22042009470d000b2001280224210520012802202103200128021c210a0b2002200a360240200241206a200241c0006a4104107420022003360240200241206a200241c0006a4104107420022005360240200241206a200241c0006a410410742007200228022022012002280228200810fa04210402402002280224450d002001102e0b024020040d0020004180083b0001200041013a0000200041036a410a3a00000c010b0240024002404110102c2204450d0020024210370254200220043602504108200241d0006a1076200241d0006a41bed8c8004108107420022006360220200241d0006a200241206a41041074200241d0006a20084120107420024100360220200241c0006a41304104200241206a107d200241c0006a41086a280200210120022802404101470d012001450d020b1036000b200228024422042002290350370200200441086a200241d0006a41086a280200360200200220022800203602402002200241236a280000360043200041306a41013a00002000412c6a4101360200200041286a2001410c6e360200200041246a2004360200200041206a4100360200200041186a4204370300200041106a42b009370300200041086a427f370300200041003a0000200041316a2002280240360000200041346a2002280043360000200228021441ffffff3f71450d022002280210102e0c020b1038000b200228021441ffffff3f71450d002002280210102e0b200241e0006a24000bdc0102037f017e230041306b22012400200141186a22024200370300200141106a22034200370300200141086a420037030020014200370300200141a081ca004107108102200141206a41f09dc500410a1081022002200141206a41086a29000037030020032001290020370300200141206a200110880320012802202202410120021b21030240024002402001290224420020021b2204422088a720004b0d0041002100200442ffffff3f8350450d010c020b2000200320004105746a10be012100200442ffffff3f83500d010b2003102e0b200141306a240020000bec0505017f017e097f027e027f230041306b2201240002400240101c2202422088a722030d002001200336020c200141013602080c010b2001200336020c20012002a7220436020820042d0000210520012003417f6a36020c2001200441016a3602080240024002400240024020050e020001050b200141206a200141086a10db0820012802202206450d04200141286a2802002107200128022421082001200141086a10ab0120012802000d03024020012802042209200128020c410c6e2205200520094b1bad420c7e2202422088a70d002002a72205417f4c0d000240024020050d004104210a0c010b2005102c220a450d040b2005410c6ead2102024002402009450d000340200141206a200141086a10db0802402001280220220b0d0002402002422088a72205450d002005410c6c2109200a210503400240200541046a280200450d002005280200102e0b2005410c6a2105200941746a22090d000b0b2002a72205450d082005410c6c450d08200a102e0c080b2001290224210c02402002422088220da722052002a7470d00200541016a220e2005490d042005410174220f200e200e200f491b220e4104200e41044b1bad420c7e220d422088a745410274210e200da7210f0240024020050d00200141003602200c010b200141043602282001200a36022020012005410c6c3602240b200141106a200f200e200141206a107d2001280218210e20012802104101460d032001280214210a2002422088220da72105200e410c6ead21020b200a2005410c6c6a2205200c3702042005200b360200200d422086200242ffffffff0f83844280808080107c21022009417f6a22090d000b0b200a450d0520060d030c060b200e0d030b1038000b410021060b2000200836020420002006360200200041106a20023702002000410c6a200a360200200041086a200736020002402003450d002004102e0b200141306a24000f0b1036000b2008450d002006102e0b41cae0cc00412e200141206a41f8e0cc004188e1cc00103e000bd10302017f017e230041a0016b220524002005200136020c024002402005410c6a20022004ad4220862003ad8410092206422088a722030d00410121020c010b2006a721020b200520033602542005200236025002402003450d0020022d0000210420052003417f6a3602542005200241016a360250410021030240024020040e020100020b200541d8006a200541d0006a10a70120052d00584101460d01200541c8006a20054191016a290000370300200541c0006a20054189016a290000370300200541386a20054181016a290000370300200541306a200541f9006a290000370300200541286a200541f1006a290000370300200541206a200541e9006a290000370300200541186a200541e1006a29000037030020052005290059370310410121030b200020033a000020002005290310370001200041096a200541186a290300370000200041116a200541206a290300370000200041196a200541286a290300370000200041216a200541306a290300370000200041296a200541386a290300370000200041316a200541c0006a290300370000200041396a200541c8006a2903003700002002102e200541a0016a24000f0b41cae0cc00412e200541d8006a41f8e0cc004188e1cc00103e000b1d0020004101472002ad4220862001ad842004ad4220862003ad84101b0b930201017f230041106b22022400200220002903003703082001200241086a410810740240024020002903084201510d00200241003a00082001200241086a410110740c010b200241013a00082001200241086a410110742002200041106a2903003703082001200241086a410810740b0240024020002903184201510d00200241003a00082001200241086a410110740c010b200241013a00082001200241086a410110742002200041206a2903003703082001200241086a410810740b0240024020002903284201510d00200241003a00082001200241086a410110740c010b200241013a00082001200241086a410110742002200041306a2903003703082001200241086a410810740b200241106a24000b850201037f230041d0006b22022400200241086a41d9fcc6004106108102200241186a41d8f3cb00410d108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000b830101037f230041206b2202240020022000108c02200228020821032002280200210002404120102c2204450d002002422037021420022004360210200241106a2001412010742000200320022802102201200228021810b20102402002280214450d002001102e0b02402002280204450d002000102e0b200241206a24000f0b1036000b130020004103360204200041d0ddc8003602000b3400200041a0dac80036020420004100360200200041146a4106360200200041106a41fce8c800360200200041086a420f3702000b4201027f230041106b2202240002404108102c22030d001036000b2000420837020420002003360200200242003703082000200241086a41081074200241106a24000b0d00200041002000200010da060b3001017f0240200128020022022001280204470d00200041003602000f0b2001200241e0016a3602002000200210d0030b290020004101360204200041086a200128020420012802006b41e0016e2201360200200020013602000ba20801087f230041d0006b22052400200541306a22064200370300200541286a22074200370300200541186a41086a2208420037030020054200370318200541386a41a0dac800410f1081022008200541386a41086a220929000037030020052005290038370318200541386a41afdac800410d1081022006200929000037030020072005290038370300024002400240200541186a4120108f020d0020064200370300200742003703002008420037030020054200370318200541186a41d9fcc6004106108102200541386a4180f4cb0041061081022006200929000037030020072005290038370300200541106a200541186a4120108e022005280214410020052802101b2106024020034101470d00200541306a220a4200370300200541286a220b4200370300200541186a41086a2208420037030020054200370318200541386a41a0dac800410f1081022008200541386a41086a220929000037030020052005290038370318200541386a41fcedc800410a108102200741086a220c200929000037000020072005290038370000200541086a200541186a4120108e0202402005280208450d00200528020c20064d0d002000410410b0070c030b200a4200370300200b42003703002008420037030020054200370318200541386a41a0dac800410f1081022008200929000037030020052005290038370318200541386a41fcedc800410a108102200c2009290000370000200720052900383700002005200241017420066a360238200541186a4120200541386a410410b2010b200128020421082001280200210920012802082101200541306a4200370300200541286a4200370300200541186a41086a220a420037030020054200370318200541386a41a0dac800410f108102200a200541386a41086a220b29000037030020052005290038370318200541386a41afdac800410d108102200741086a200b29000037000020072005290038370000200541003602402005420137033820052006360248200541386a200541c8006a4104107420052002360248200541386a200541c8006a410410742001200541386a10760240200141286c2207450d00200920076a2101200921070340200541386a2007412010742005200741206a290300370348200541386a200541c8006a41081074200741286a22072001470d000b0b0240024020034101460d00200541003a0048200541386a200541c8006a410110740c010b200541013a0048200541386a200541c8006a4101107420052004360248200541386a200541c8006a410410740b200541186a412020052802382207200528024010b2010240200528023c450d002007102e0b02402008450d00200841286c450d002009102e0b200041063a00000c020b2000410310b0070b200141046a2802002207450d00200741286c450d002001280200102e0b200541d0006a24000b840201047f230041d0006b22022400200241a0dac800410f108102200241106a4194efc800410c108102200220013703302002200241306a410810a301370338200241c0006a410c6a200241306a41086a3602002002200241386a41086a3602442002200241306a3602482002200241386a360240200241206a200241c0006a107c024002402002280228220341206a2204417f4c0d000240024020040d00410121050c010b2004102c2205450d020b20004100360208200020043602042000200536020020002002411010742000200241106a411010742000200228022022042003107402402002280224450d002004102e0b200241d0006a24000f0b1038000b1036000bd30302057f017e230041b0016b2202240002400240200128020022032001280204470d00200041003602000c010b2001200341e0016a3602002002200341206a41e2c289ab0610d103200228020421042002280200210541002101200241003a00680240024002400240034020042001460d01200241c8006a20016a200520016a2d00003a00002002200141016a22063a00682006210120064120460d020c000b0b200141ff0171450d01200241003a00680c010b200241f0006a41086a2201200241c8006a41086a290300370300200241f0006a41106a2204200241c8006a41106a290300370300200241f0006a41186a2205200241c8006a41186a29030037030020022002290348370370200641ff0171411f4d0d00200241286a41186a20052903002207370300200241086a41086a2001290300370300200241086a41106a2004290300370300200241086a41186a2007370300200220022903703703080c010b200241106a4200370300200241186a4200370300200241206a4200370300200242003703080b20002003360200200020022903083700042000410c6a200241106a290300370000200041146a200241186a2903003700002000411c6a200241206a2903003700000b200241b0016a24000b3001017f0240200128020022022001280204470d00200041003602000f0b2001200241e0016a3602002000200210d2030bd30302057f017e230041b0016b2202240002400240200128020022032001280204470d00200041003602000c010b2001200341e0016a3602002002200341206a41e1ea91cb0610d103200228020421042002280200210541002101200241003a00680240024002400240034020042001460d01200241c8006a20016a200520016a2d00003a00002002200141016a22063a00682006210120064120460d020c000b0b200141ff0171450d01200241003a00680c010b200241f0006a41086a2201200241c8006a41086a290300370300200241f0006a41106a2204200241c8006a41106a290300370300200241f0006a41186a2205200241c8006a41186a29030037030020022002290348370370200641ff0171411f4d0d00200241286a41186a20052903002207370300200241086a41086a2001290300370300200241086a41106a2004290300370300200241086a41186a2007370300200220022903703703080c010b200241106a4200370300200241186a4200370300200241206a4200370300200242003703080b20002003360200200020022903083700042000410c6a200241106a290300370000200041146a200241186a2903003700002000411c6a200241206a2903003700000b200241b0016a24000b9b0201047f230041c0006b2202240041baddc8002103411621044106210502400240024002400240024002400240200141ff01710e080001020304050607000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a41b48dcc001044000b41afddc8002103410b2104410021050c050b41a3ddc8002103410c2104410121050c040b4196ddc8002103410d2104410221050c030b418fddc800210341072104410321050c020b41f7dcc800210341182104410421050c010b41dfdcc800210341182104410521050b20004183163b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000b130020004101360204200041c8f3c8003602000b3400200041bed8c80036020420004100360200200041146a4104360200200041106a41b0f8c800360200200041086a42083702000b1300200041013602042000418487c9003602000b3400200041e8fcc60036020420004100360200200041146a4102360200200041106a41808dc900360200200041086a42093702000b130020004101360204200041cc8fc9003602000b4301027f230041106b2202240002404108102c22030d001036000b2000420837020420002003360200200242b8173703082000200241086a41081074200241106a24000b130020004101360204200041d093c9003602000b340020004190dac80036020420004100360200200041146a4103360200200041106a41dc94c900360200200041086a420a3702000b02000b2f01017f02404104102c22020d001036000b2000420437020420002002360200410020001076410441002000109f010b810201057f0240024002400240200041086a2802002201450d0020014102742102410021032000280200220421050240034020052802000d01200541046a2105200341016a21032002417c6a22020d000b2001417f6a21030b2003450d0020012003490d01200120036b220541ffffffff03712005470d0220054102742202417f4c0d024104210102402002450d002002102c2201450d040b2001200420034102746a200541027410e9082103200241027621020240200041046a28020041ffffffff0371450d002000280200102e0b20002003360200200041086a2005360200200041046a20023602000b0f0b2003200141dcd8cc001056000b1038000b1036000b9c04030d7f017e017f02400240200241086a2802002203200141086a28020022046a22054101200541014b1b220641ffffffff03712006470d0020064102742205417f4c0d0002400240024020050d00410421070c010b200510322207450d010b20002007360200200041086a2006360200200020054102763602042004450d022006417f6a2108200341027420022802006a417c6a2109200641027420076a417c6a210a4100210b200141086a210c2004210d0240034002400240024002400240024002402004200d200b417f736a220e4d0d002001280200200e4102746a220f280200450d06024020030d00410021000c060b420021104100210020092102200a21050340200d200e4d0d022003200320006a2211417f6a4d0d032006200820006a22114d0d0420052002350200200f3502007e20107c20053502007c22103e02002002417c6a21022005417c6a21052010422088211020032000417f6a22006a450d050c000b0b200e200441ccd7cc00103c000b200e200d41ccd7cc00103c000b2011417f6a200341ccd7cc00103c000b2011200641ccd7cc00103c000b2010a721000b2006200b20036a417f736a220520064f0d02200720054102746a20003602000b200b41016a220b2004460d04200a417c6a210a2008417f6a2108200c280200210d0c000b0b2005200641ecd8cc00103c000b1036000b1038000b0240200141046a28020041ffffffff0371450d002001280200102e0b0bab1006037f017e017f017e0c7f027e23004180026b22022400200141346a2802002103200141386a2802002104200141086a29030021052001280230210620012903002107200241086a41186a200141d4006a290000370300200241086a41106a200141cc006a290000370300200241086a41086a200141c4006a2900003703002002200129003c37030820022005370330200220073703282006200441d8006c22086a21092006210102400240024002402004450d004100210a20024198016a41086a210b20024198016a41106a210c20024198016a41186a210d024002400340200b2006200a6a2201413c6a290200370300200c200141c4006a290200370300200d200141cc006a29020037030020024198016a41206a200141d4006a2802003602002002200141346a29020037039801200141306a280200220e450d02200141286a2903002105200141206a2903002107200241e0016a41186a220f200d290300370300200241e0016a41106a2210200c290300370300200241e0016a41086a2211200b29030037030020022002290398013703e00102400240200720052002290328200241286a41086a29030010820522120d004100210f0c010b200241c0016a41186a200f290300370300200241c0016a41106a2010290300370300200241c0016a41086a2011290300370300200220022903e0013703c0014101210f201221130b200e200e280200417f6a2210360200024020100d00200e41046a22102010280200417f6a221036020020100d00200e102e0b200f0d012008200a41d8006a220a470d000b200921010c020b200241386a41086a220e200241c0016a41086a290300370300200241386a41106a220b200241c0016a41106a290300370300200241386a41186a220c200241c0016a41186a290300370300200220022903c00122053703582002200537033802404124102c2208450d002008200229033837020020082013360220200841186a200c290300370200200841106a200b290300370200200841086a200e290300370200200220093602442002200141d8006a220b3602402002200336023c200220063602382002200241286a360248024002400240200441d8006c41a87f6a200a470d0041012103410121040c010b20024198016a41086a210a20024198016a41106a210c20024198016a41186a210d410121034101210403402002200b220141d8006a220b360240200141306a280200210e200141286a2903002105200141206a2903002107200a2001413c6a290200370300200c200141c4006a290200370300200d200141cc006a29020037030020024198016a41206a200141d4006a2802003602002002200141346a2902003703980102400240200e450d00200241e0016a41186a2210200d290300370300200241e0016a41106a2211200c290300370300200241e0016a41086a2212200a29030037030020022002290398013703e00102400240200720052002280248220f290300200f41086a29030010820522060d004100210f0c010b200241c0016a41186a2010290300370300200241c0016a41106a2011290300370300200241c0016a41086a2012290300370300200220022903e0013703c0014101210f200621130b200e200e280200417f6a2210360200024020100d00200e41046a22102010280200417f6a221036020020100d00200e102e0b200f0d012009200b470d020b200141d8006a210b0c020b200241d8006a41086a200241c0016a41086a2903002205370300200241d8006a41106a200241c0016a41106a2903002207370300200241d8006a41186a200241c0016a41186a2903002214370300200220022903c0012215370358200d2014370300200c2007370300200a20053703002002201537039801024020042003470d00200341016a22012003490d092003410174220e2001200e20014b1b22014104200141044b1bad42247e2205422088a74541027421012005a7210e0240024020030d00200241003602e0010c010b200241043602e801200220083602e0012002200341246c3602e4010b200241c0016a200e2001200241e0016a107d20022802c801210120022802c0014101460d0320022802c4012108200141246e21030b2008200441246c6a2201200229039801370200200c2903002105200d2903002107200a290300211420012013360220200141086a2014370200200141186a2007370200200141106a2005370200200441016a21042002280240220b20022802442209470d000b0b2009200b6b220141d8006d210e02402001450d00200e41d8006c210e200b41306a210103402001280200220a200a280200417f6a36020002402001280200220a2802000d00200a41046a220a200a280200417f6a3602002001280200220a41046a2802000d00200a102e0b200141d8006a2101200e41a87f6a220e0d000b0b0240200228023c2201450d00200141d8006c450d002002280238102e0b2004450d042000200336020420002008360200200041086a20043602002000410c6a2002290308370000200041146a200241086a41086a2903003700002000411c6a200241186a290300370000200041246a200241206a2903003700000c050b2001450d050b1036000b200141d8006a21010b024020092001460d000340200141306a220e280200220a200a280200417f6a360200200141d8006a21010240200e280200220a2802000d00200a41046a220a200a280200417f6a360200200e280200220e41046a2802000d00200e102e0b20092001470d000b0b02402003450d00200341d8006c450d002006102e0b200041003602000c010b200041003602002003450d00200341246c450d002008102e0b20024180026a24000f0b1038000b130020004107360204200041d499c9003602000b13002000410236020420004188a0c9003602000b13002000410736020420004190a1c9003602000b1f0002402000280200450d00200041086a280200450d002000280204102e0b0b940202017f027e230041e0006b2202240002402001450d00200241d4006a410f3602002002411c6a41023602002002420237020c200241a0a7c9003602082002410436024c20024198a7c9003602482002200241c8006a3602182002200241d8006a360250200241086a41b0a7c9001044000b200241c0006a41002903e8f846370300200241386a41002903e0f846370300200241306a41002903d8f846370300200241286a41002903d0f846370300200241206a41002903c8f846370300200241186a41002903c0f846370300200241106a41002903b8f846370300200241002903b0f846370308200241c8006a200241086a1087072002350250210320023502482104200241e0006a240020042003422086840bfd1d02087f047e230041900a6b22022400200242808080808020370214200220013602a4062002200041d4e2cc0020011b3602a0062002200241a0066a360210200241b0066a200241106a10990202400240024020022802b4062203450d00200241bc066a280200210420022802b806210520022802b0062106200241e0026a200241c0066a41e00010e9081a200241b0066a200241106a10ec0120022802b00622070d0102402004450d00200441246c21002003210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b2005450d00200541246c450d002003102e0b200241f0016a200241f0006a41e00010e9081a0c010b200241b8066a280200210820022802b4062109200241f0006a200241e0026a41e00010e9081a200241f0016a200241f0006a41e00010e9081a200241b8056a200241f0016a41e00010e9081a0240024020022802102802040d00200241b0066a200241b8056a41e00010e9081a0c010b02402004450d00200441246c21002003210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b02402005450d00200541246c450d002003102e0b02402008450d00200841c8036c210020072103034002402003220141e8006a2903004202510d0020012d00004102470d00200141086a280200450d00200141046a280200102e0b200141c8036a210320014198016a109601200041b87c6a22000d000b0b410021032009450d00200941c8036c450d002007102e0b2003450d00200241106a200241b0066a41e00010e9081a200241fc006a2004360200200241f0006a41086a20053602002002200336027420022006360270200241f0006a41106a200241106a41e00010e9082101200241e8016a2008360200200241e4016a2009360200200220073602e001200241f0006a10c4070240024002400240024002402006450d00200241b8056a2006417f6a108c02200241b0066a20022802b805220320022802c005108d0220022d00b0062100200241e0026a41186a2206200241c9066a290000370300200241e0026a41106a200241c1066a290000370300200241e0026a41086a200241b9066a290000370300200220022900b1063703e0020240024020004101460d00200241f0016a41186a420037030020024180026a4200370300200241f8016a4200370300200242003703f0010c010b200241f0016a41186a2006290300370300200241f0016a41106a200241e0026a41106a290300370300200241f0016a41086a200241e0026a41086a290300370300200220022903e0023703f0010b024020022802bc05450d002003102e0b200241f0016a2001412010ec080d0010c507200241f0016a200241f0006a41f00010e9081a2007200841c8036c6a210320022802f001210602400240024020080d00200721000c010b200241b0066a41f0006a21002007210102400340200241b8056a200141e80010e9081a200141e8006a290300210a200241e0026a200141f0006a41d80210e9081a200a4203510d01200241b0066a200241b8056a41e80010e9081a2002200a370398072000200241e0026a41d80210e9081a200241a0066a200241b0066a10c60720022d00a0060d05200141c8036a22012003470d000c030b0b200141c8036a21000b20032000460d002007200841c8036c6a210303402000220141c8036a21000240200141e8006a2903004202510d0020012d00004102470d00200141086a280200450d00200141046a280200102e0b20014198016a108b0220032000470d000b0b02402009450d00200941c8036c450d002007102e0b200241fcc6cb004110108e02200228020421080240200228020022094101470d0041fcc6cb00411010ff010b200241e0026a41186a22014200370300200241e0026a41106a22004200370300200241e0026a41086a22034200370300200242003703e002200241b0066a41d9fcc60041061081022003200241b0066a41086a2207290000370300200220022900b0063703e002200241b0066a41acf2cb00410e10810220012007290000370300200020022900b00637030020022008410020091b3602b006200241e0026a4120200241b0066a410410b2014101200210eb04200142003703002000420037030020034200370300200242003703e002200241b0066a41d9fcc600410610810220032007290000370300200220022900b0063703e002200241b0066a41d4f2cb00410b10810220012007290000370300200020022900b006370300200241b0066a200241e0026a10f20420022903b006210a200241b0066a41106a290300210b20022903b806210c200241b0066a41186a290300210d200241b0066a10a903024020022903b806427f427f200c4200200a42015122011b220a200b420020011b7c220b200b200a541b220a200d420020011b7c220b200b200a541b580d004200410210f1040b200610d90610c707450d02200241b0066a10c8072002200241f0016a410c6a28020022083602a0062002200241b0066a410c6a28020022013602b80520082001470d032008450d0520022802b406210920022802f401210641002103034002400240200620036a22012d00002207200920036a22002d0000470d0002400240024002400240024020070e06000304050102000b200141016a200041016a412010ec080d050c060b200141046a2802002205200041046a280200470d042005450d05200141086a280200200041086a280200470d042001410c6a2802002000410c6a280200470d040c050b2001410c6a28020022052000410c6a280200470d03200141046a280200200041046a280200200510ec080d030c040b200141016a280000200041016a280000470d02200141106a2802002205200041106a280200470d02200141086a280200200041086a280200200510ec080d020c030b200141016a280000200041016a280000470d01200141106a2802002205200041106a280200470d01200141086a280200200041086a280200200510ec080d010c020b200141016a280000200041016a280000470d00200141106a2802002205200041106a280200470d00200141086a280200200041086a280200200510ec08450d010b418ba4cc00411410ef02200241e0026a200110ef0420022802e002220720022802e80210c907024020022802e402450d002007102e0b200241e0026a200010ef0420022802e002220720022802e80210c907024020022802e402450d002007102e0b20012d000020002d00002207470d060b024002400240024002400240024020070e06050203040001050b200141046a2802002207200041046a280200470d0b2007450d05200141086a280200200041086a280200470d0b2001410c6a2802002000410c6a280200470d0b0c050b2001410c6a28020022072000410c6a280200470d0a200141046a280200200041046a280200200710ec080d0a0c040b200141016a280000200041016a280000470d09200141106a2802002207200041106a280200470d09200141086a280200200041086a280200200710ec080d090c030b200141016a280000200041016a280000470d08200141106a2802002207200041106a280200470d08200141086a280200200041086a280200200710ec080d080c020b200141016a280000200041016a280000470d07200141106a2802002207200041106a280200470d07200141086a280200200041086a280200200710ec08450d010c070b200141016a200041016a412010ec080d060b200341246a21032008417f6a22080d000c060b0b418aa1cc00411c41a8a1cc001039000b200241086a20022f00a10620022d00a3064110747210fb05200220022903083703f809200241c4066a4101360200200242013702b406200241c4e2cc003602b006200241043602840a2002200241800a6a3602c0062002200241f8096a3602800a200241b0066a41b8a1cc001044000b41c8a1cc00411e41e8a1cc001039000b200241f4026a4100360200200241f0026a41d4e2cc00360200200242013702e402200241f8a1cc003602e002200241a0066a200241b8056a200241e0026a109207000b4190a2cc00412741b8a2cc001039000b0240200241f0016a41306a2201200241b0066a41306a2200412010ec08450d0041dee8cc00410e10ef022001412010c9072000412010c9070b024020012000412010ec08450d0041c8a2cc00412841f0a2cc001039000b0240200241f0016a41d0006a200241b0066a41d0006a412010ec080d00024020022802bc062200450d0020022802b4062101200041246c210003400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b0240200241b8066a2802002201450d00200141246c450d0020022802b406102e0b024020022802fc012200450d0020022802f4012101200041246c210003400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b0240200241f8016a2802002201450d00200141246c450d0020022802f401102e0b200241900a6a240042010f0b4180a3cc00412441a4a3cc001039000b200241fc006a410f360200200241f4026a4102360200200242023702e402200241a0a7c9003602e00220024104360274200241e4a7c9003602702002200241f0006a3602f0022002200241880a6a360278200241e0026a41b0a7c9001044000b99cc010a0b7f027e047f017e017f097e037f027e087f047e230041f0096b2201240020014100360298042001420437039004024002400240024002400240024002400240024002402000410c6a28020041246c2202450d0020002802042103410421044104210541002106410021070340024020032d00004101470d00200341106a2802002208417f4c0d0c200341086a2802002109200341016a280000210a0240024020080d004101210b0c010b2008102c220b450d0c0b200b2009200810e90821092001200a3602a00520014190096a41086a220b200141b0086a41086a2902003703002001200a3602c004200120012800a3053600c304200120012902b00837039009024020072006470d0020062006470d00200641016a220a2006490d0d20064101742204200a2004200a4b1b220a4104200a41044b1bad42247e220c422088a745410274210a200ca721040240024020060d0020014100360280060c010b200141043602880620012005360280062001200641246c360284060b200141b8056a2004200a20014180066a107d20012802c005210620012802b8054101460d04200120012802bc052204360290042001200641246e2206360294040b2004200741246c6a220741013a000020012802c004210a20012800c3042105200720083602102007200836020c20072009360208200741046a20053600002007200a36000120072001290390093702142007411c6a200b290300370200200120012802980441016a220736029804200421050b200341246a21032002415c6a22020d000b0b200141d8046a22034200370300200141c0046a41106a22064200370300200141c0046a41086a22074200370300200142003703c004200141e0046a41d9fcc60041061081022007200141e0046a41086a290300370300200120012903e0043703c004200141f0046a41ccf6cb0041121081022003200141f0046a41086a290300370300200620012903f004370300200141203602a4052001200141c0046a3602a005200141b0086a200141c0046a412010ed0220012802b00822070d01410221080c020b20060d070c080b20012802b40821042001200141b0086a41086a2802003602bc05200120073602b80520014188046a200141b8056a10ab01200128028c04210a024002402001280288040d0020014180046a200141b8056a10ab012001280280040d0020012802bc0522082001280284042203490d002003417f4c0d090240024020030d00410121020c010b200310322202450d0920012802bc0521080b024020082003490d00200220012802b805200310e9081a20012802bc0522082003490d042001200820036b3602bc05200120012802b80520036a3602b805410121080c020b2002102e0b200141003602980920014201370390092001410a360294052001200141a0056a36029005200120014190096a3602f00420014194066a41013602002001420137028406200141909dc50036028006200120014190056a36029006200141f0046a419cebc00020014180066a103d1a20012802900920012802980910ef020240200128029409450d00200128029009102e0b410221080b2004450d002007102e0b024020084102460d00410121070240200a411e490d0041002107024020034108470d00200229000042f0deb1db968cd9b7f4005121070b200741017321070b02402003450d002002102e0b20070d004200210d20014190096a210e0c050b2001418c066a41002903b8f8463702002001411e36028006200141002903b0f84637028406200141c0046a41186a22074200370300200141d0046a22084200370300200141c0046a41086a22034200370300200142003703c004200141e0046a41d9fcc60041061081022003200141e0046a41086a2202290300370300200120012903e0043703c004200141f0046a41ccf6cb004112108102200641086a220a200141f0046a41086a2204290300370000200620012903f00437000020014100360298092001420137039009411e20014190096a107620014180066a41047220014190096a10e805200141c0046a4120200128029009220920012802980910b2010240200128029409450d002009102e0b200742003703002008420037030020034200370300200142003703c004200141e0046a41d9fcc600410610810220032002290300370300200120012903e0043703c004200141f0046a41c0f7cb004118108102200a2004290300370000200620012903f0043700000240200141c0046a108603220341ff01714102460d002003410171450d004200210c20014190056a210f0c040b200141c0046a41186a4200370300200141c0046a41106a4200370300200141c0046a41086a22034200370300200142003703c004200141e0046a41d9fcc60041061081022003200141e0046a41086a290300370300200120012903e0043703c004200141f0046a41c0f7cb004118108102200641086a200141f0046a41086a290300370000200620012903f004370000200141013a009005200141c0046a412020014190056a410110b201200141e0046a41d9fcc6004106108102200141f0046a41dcf1cb0041071081024120102c2203450d05200142203702bc05200120033602b805200141b8056a200141e0046a41101074200141b8056a200141f0046a4110107420012802c0052208417f4c0d0620012802b805210a0240024020080d00410121030c010b2008102c2203450d060b20014180066a2003200a200810e9082008108b052008ad220c422086200c84210c2001280280062207450d02200141b8066a210e200141a8066a211020014198066a2111034020032102200c211220072103024002402008200129028406220c422088a722074b0d00200a2003200810ec08450d010b200ca7450d032003102e0c030b02402012a7450d002002102e0b200120073602c404200120033602c004200141b0086a2003200710ed020240024020012802b0082202450d0020012802b408210402400240024020012802b80822094104490d002009417c71220b4104460d00200b4108460d00200941746a4110490d00200941646a4110490d00200941546a4110490d00200941446a410f4b0d010b200141003602980920014201370390092001410a360294052001200141c0046a36029005200120014190096a3602a00520014101360294062001420137028406200141909dc50036028006200120014190056a36029006200141a0056a419cebc00020014180066a103d1a20012802900920012802980910ef020240200128029409450d00200128029009102e0b410021090c010b2002280000210f2002280004211320022800082105200241146a2900002114200229000c2115200241c4006a2900002116200241346a2900002117200241246a2900002118200229003c2119200229002c211a200229001c211b410121090b02402004450d002002102e0b2009450d00200820074b0d01200141d4e2cc00200320086a41106a200720086b22024110491b3602900920014100200241706a2204200420024b1b3602940920014180066a20014190096a10930120012d0080064101460d00200e20163703002010201737030020112018370300200120193703b0062001201a3703a0062001201b370390062001201537038006200141003602cc06200120053602c806200120133602c4062001200f3602c00620012014370388062003200720014180066a10c9050b20014180066a20032007108b0520012802800622070d010c040b0b2008200741c4dbc8001056000b2003200841b8b2c0001056000b2012210c200221030b0240200ca7450d002003102e0b024020012802bc05450d00200a102e0b20014180066a10a903200129038806210c20014190056a210f0b200141b0086a41d9fcc600410610810220014190096a419f8dcc00411410810220014180066a41086a200141b0086a41086a220329020037030020014180066a41106a20012903900937030020014180066a41186a20014190096a41086a290300370300200120012902b0083703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00900520014190096a200f41011074200141003a00900520014190096a200f4101107420014180066a4120200128029009220720012802980910b2010240200128029409450d002007102e0b200141c0046a41186a4200370300200141c0046a41106a4200370300200141c0046a41086a22074200370300200142003703c004200141b8056a41a8f8c60041041081022007200141b8056a41086a290000370300200120012900b8053703c004200141b0086a41d48bc500410f108102200641086a2003290000370000200620012900b008370000200141203602a4052001200141c0046a3602a005200141b0086a200141c0046a412010ed0241042103024020012802b0082207450d0020012802b40821082001200141b8086a28020022033602bc05200120073602b805200141003a009005024002402003450d0020012003417f6a3602bc052001200741016a3602b8054103210302400240024020072d00000e020100030b20014180066a200141b8056a10950220012d00900622034103460d01200141e0046a41086a20014180066a41086a290300221237030020014190096a41086a22022012370300200120012800910636028005200120014194066a28000036008305200120012903800637039009200120012802800536029005200120012800830536009305200141f0046a41086a200229030037030020012001290390093703f00420012001280093053600b30520012001280290053602b0050b20014180066a41086a200141f0046a41086a290300370300200120012800b30536008b05200120012802b00536028805200120012903f004370380062001200128028805360290052001200128008b05360093050c020b200120012903e004370390090b200141003602980920014201370390092001410a360294052001200141a0056a36029005200120014190096a3602f00420014194066a41013602002001420137028406200141909dc50036028006200120014190056a36029006200141f0046a419cebc00020014180066a103d1a20012802900920012802980910ef020240200128029409450d00200128029009102e0b410421030b2008450d002007102e0b200141e0046a41086a220820014180066a41086a29030037030020012001290380063703e00420012001280290053602800520012001280093053600830541032107024020034104460d0020014190096a41086a2008290300370300200120012903e0043703900920012001280280053602b00820012001280083053600b308200321070b42c0b6fc9a012117024020074103460d0020014194066a20012800b30836000020014180066a41086a20014190096a41086a290300370300200120012903900937038006200120073a009006200120012802b0083600910620014180066a10ed0442c0f8d3ca0121170b200141d8046a22074200370300200141c0046a41106a22084200370300200141c0046a41086a22034200370300200142003703c004200141e0046a41a8f8c60041041081022003200141e0046a41086a2202290300370300200120012903e0043703c004200141f0046a41d48bc500410f108102200641086a220a200141f0046a41086a2204290300370000200620012903f004370000200141c0046a412010ff01200742003703002008420037030020034200370300200142003703c004200141e0046a41a8f8c600410410810220032002290300370300200120012903e0043703c004200141f0046a418c8bc500410b108102200a2004290300370000200620012903f004370000200141c0046a42014204410210c205200742003703002008420037030020034200370300200142003703c004200141e0046a41a8f8c600410410810220032002290300370300200120012903e0043703c004200141f0046a41d48bc500410f108102200a2004290300370000200620012903f004370000200141c0046a42014204410210c205200141e0046a418ef9c0004110108102200141f0046a41fbafc90041061081024120102c2203450d012001422037029409200120033602900920014190096a200141e0046a4110107420014190096a200141f0046a411010742001280298092208417f4c0d0220012802900921054101210202402008450d002008102c2202450d020b427f200c4280c2d72f7c22122012200c541b211920022005200810e9081a20014198066a21132008210a20082107034020014180066a20022007108b05024002400240024002402001280280062203450d002001280284062104024020012802880622072008490d0020052003200810ec08450d020b2004450d002003102e0b0240200a450d002002102e0b0240200128029409450d002005102e0b20014180066a10df04200129038806210c200141c0046a41a5fec600411a108102200141b8056a419f8dcc00411410810220014180066a41086a2207200141c0046a41086a220829000037030020014180066a41106a220220012900b80537030020014180066a41186a220a200141b8056a41086a2204290000370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009220920012802980910b201200141b0086a41106a21030240200128029409450d002009102e0b200141c0046a41f4d8c7004104108102200141b8056a419f8dcc004114108102200320012900b805370000200341086a20042900003700002007200829000037030020022003290300370300200a200141b0086a41186a290300370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009220720012802980910b2010240200128029409450d002007102e0b200141c0046a419dfec6004108108102200141b0086a419f8dcc00411410810220014190096a41086a2207200141c0046a41086a29000037030020014190096a41106a220820012900b008370300200141a8096a2202200141b0086a41086a220a290000370300200120012900c0043703900920014100360288062001420137038006200141033b01b00820014180066a200141b0086a41021074200141003a00b00820014180066a200141b0086a41011074200141003a00b00820014180066a200141b0086a4101107420014190096a4120200128028006220420012802880610b2010240200128028406450d002004102e0b200141b8056a4195fec6004108108102200141b0086a419f8dcc0041141081022007200141b8056a41086a290000370300200820012900b0083703002002200a290000370300200120012900b8053703900920014100360288062001420137038006200141033b01b00820014180066a200141b0086a41021074200141003a00b00820014180066a200141b0086a41011074200141003a00b00820014180066a200141b0086a4101107420014190096a4120200128028006220720012802880610b2010240200128028406450d002007102e0b200141e0046a4190fec6004105108102200141f0046a419f8dcc004114108102200141c0046a41086a2207200141e0046a41086a290300370300200141c0046a41106a20012903f004370300200141c0046a41186a200141f0046a41086a290300370300200120012903e0043703c00420014100360288062001420137038006200141033b01900920014180066a20014190096a41021074200141003a00900920014180066a20014190096a41011074200141003a00900920014180066a20014190096a41011074200141c0046a4120200128028006220820012802880610b2010240200128028406450d002008102e0b200141c0046a4188fec6004108108102200141b8056a419f8dcc004114108102200141b0086a41086a2007290000370300200141b0086a41106a20012900b805370300200141b0086a41186a200141b8056a41086a290000370300200120012900c0043703b00820014100360288062001420137038006200141033b01900920014180066a20014190096a41021074200141003a00900920014180066a20014190096a41011074200141003a00900920014180066a20014190096a41011074200141b0086a4120200128028006220720012802880610b2010240200128028406450d002007102e0b200141c0046a4181fec6004107108102200141b0086a419f8dcc00411410810220014180066a41086a2207200141c0046a41086a29000037030020014180066a41106a220820012900b00837030020014180066a41186a2202200141b0086a41086a220a290000370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00900520014190096a200f41011074200141003a00900520014190096a200f4101107420014180066a4120200128029009220420012802980910b2010240200128029409450d002004102e0b200141b8056a41bcdbc8004107108102200141b0086a419f8dcc004114108102200620012900b008370000200641086a200a2900003700002007200141b8056a41086a2900003703002008200141c0046a41106a2903003703002002200141c0046a41186a290300370300200120012900b8053703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009220720012802980910b2010240200128029409450d002007102e0b20014180066a41106a2108200141e0046a41b6d1cc004106108102200141f0046a419f8dcc004114108102200320012903f004370000200341086a200141f0046a41086a29030037000020014180066a41086a200141e0046a41086a29030037030020014180066a41106a2207200141b0086a41106a29030037030020014180066a41186a220a200141b0086a41186a290300370300200120012903e0043703800620014100360298092001420137039009200141003b01b00820014190096a200141b0086a41021074200141083a00b00820014190096a200141b0086a410110742001411e3a00b00820014190096a200141b0086a4101107420014180066a4120200128029009220220012802980910b2010240200128029409450d002002102e0b20014180066a41106a2102200141c0046a41bad7c7004108108102200141b8056a419f8dcc004114108102200820012900b805370000200841086a200141b8056a41086a29000037000020014190096a41086a200141c0046a41086a29000037030020014190096a41106a200729030037030020014190096a41186a200a290300370300200120012900c0043703900920014100360288062001420137038006200141033b01b00820014180066a200141b0086a41021074200141003a00b00820014180066a200141b0086a41011074200141003a00b00820014180066a200141b0086a4101107420014190096a4120200128028006220720012802880610b2010240200128028406450d002007102e0b20014190096a41106a2107200141b8056a41eefdc6004113108102200141b0086a419f8dcc004114108102200220012900b008370000200241086a200141b0086a41086a2202290000370000200141c0046a41086a200141b8056a41086a290000370300200141c0046a41106a20014180066a41106a290300370300200141c0046a41186a20014180066a41186a290300370300200120012900b8053703c00420014100360288062001420137038006200141033b01900920014180066a20014190096a41021074200141003a00900520014180066a200f41011074200141003a00900520014180066a200f41011074200141c0046a4120200128028006220a20012802880610b2010240200128028406450d00200a102e0b200141e0046a41ddfdc6004111108102200141f0046a419f8dcc004114108102200720012903f004370000200741086a200141f0046a41086a2903003700002002200141e0046a41086a290300370300200141b0086a41106a20014190096a41106a290300370300200141b0086a41186a20014190096a41186a290300370300200120012903e0043703b00820014100360288062001420137038006200141033b01900920014180066a20014190096a41021074200141003a00900920014180066a20014190096a41011074200141003a00900920014180066a20014190096a41011074200141b0086a4120200128028006220220012802880610b2010240200128028406450d002002102e0b200141c0046a41cbfdc6004112108102200141b8056a419f8dcc004114108102200320012900b805370000200341086a2202200141b8056a41086a220a29000037000020014180066a41086a2204200141c0046a41086a220929000037030020014180066a41106a220b200141b0086a41106a220529030037030020014180066a41186a2213200141b0086a41186a220e290300370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009221020012802980910b2010240200128029409450d002010102e0b200141c0046a41c4fdc6004107108102200141b8056a419f8dcc004114108102200320012900b8053700002002200a29000037000020042009290000370300200b20052903003703002013200e290300370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009220220012802980910b2010240200128029409450d002002102e0b200141e0046a41de80ca004109108102200141f0046a419f8dcc004114108102200820012903f004370000200841086a200141f0046a41086a29030037000020014190096a41086a200141e0046a41086a29030037030020014190096a41106a220220014180066a41106a29030037030020014190096a41186a220a20014180066a41186a290300370300200120012903e0043703900920014100360288062001420137038006200141033b01b00820014180066a200141b0086a41021074200141003a00b00820014180066a200141b0086a41011074200141003a00b00820014180066a200141b0086a4101107420014190096a4120200128028006220420012802880610b2010240200128028406450d002004102e0b200141c0046a41b2fdc6004112108102200141b8056a419f8dcc004114108102200720012900b805370000200741086a200141b8056a41086a290000370000200141b0086a41086a200141c0046a41086a290000370300200141b0086a41106a2002290300370300200141b0086a41186a200a290300370300200120012900c0043703b00820014100360288062001420137038006200141033b01900920014180066a20014190096a41021074200141003a00900920014180066a20014190096a41011074200141003a00900920014180066a20014190096a41011074200141b0086a4120200128028006220220012802880610b2010240200128028406450d002002102e0b200141e0046a41bed8c8004108108102200141f0046a419f8dcc004114108102200320012903f004370000200341086a2202200141f0046a41086a220a29030037000020014180066a41086a2204200141e0046a41086a220929030037030020014180066a41106a220b200141b0086a41106a220529030037030020014180066a41186a2213200141b0086a41186a220e290300370300200120012903e0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009221020012802980910b2010240200128029409450d002010102e0b200141e0046a41abfdc6004107108102200141f0046a419f8dcc004114108102200320012903f0043700002002200a29030037000020042009290300370300200b20052903003703002013200e290300370300200120012903e0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009220220012802980910b2010240200128029409450d002002102e0b200141c0046a41a081ca004107108102200141b8056a419f8dcc004114108102200820012900b805370000200841086a200141b8056a41086a29000037000020014190096a41086a200141c0046a41086a29000037030020014190096a41106a220820014180066a41106a29030037030020014190096a41186a220220014180066a41186a290300370300200120012900c0043703900920014100360288062001420137038006200141033b01b00820014180066a200141b0086a41021074200141003a00b00820014180066a200141b0086a41011074200141003a00b00820014180066a200141b0086a4101107420014190096a4120200128028006220a20012802880610b2010240200128028406450d00200a102e0b200141e0046a41a1fdc600410a108102200141f0046a419f8dcc004114108102200720012903f004370000200741086a200141f0046a41086a290300370000200141b0086a41086a200141e0046a41086a290300370300200141b0086a41106a2008290300370300200141b0086a41186a2002290300370300200120012903e0043703b00820014100360288062001420137038006200141033b01900920014180066a20014190096a41021074200141003a00900920014180066a20014190096a41011074200141003a00900920014180066a20014190096a41011074200141b0086a4120200128028006220820012802880610b2010240200128028406450d002008102e0b200141c0046a4199fdc6004108108102200141b8056a419f8dcc004114108102200320012900b805370000200341086a200141b8056a41086a29000037000020014180066a41086a200141c0046a41086a29000037030020014180066a41106a200141b0086a41106a29030037030020014180066a41186a200141b0086a41186a290300370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009220820012802980910b2010240200128029409450d002008102e0b20014190096a41186a420037030020014190096a41106a420037030020014190096a41086a220842003703002001420037039009200141e0046a4192fdc60041071081022008200141e0046a41086a290300370300200120012903e00437039009200141f0046a419cfdca00410e108102200741086a200141f0046a41086a290300370000200720012903f004370000200141203602c404200120014190096a3602c004200141b8056a20014190096a412010ed0220012802b80522080d01410621070c020b0240200a450d002002102e0b20014180066a2003200710e90220012802a0062209450d022013290300210c20014180066a41086a29030021152001290390062112200129038006211420012903a806211b20012802a406210b20014100200720086b220241786a220a200a20024b1b3602b408200141d4e2cc00200320086a41086a20024108491b3602b00820014180066a200141b0086a109301024020012d0080064101470d00200321022004210a200b41ffffff3f71450d042009102e0c030b420021184280e8eda1ba01211a024020124280cab5ee0185200c84500d0020124280e8eda1ba0185200c84500d002012211a200c21180b201320183703002001201a3703900620012014370380062001201b3703a806200120093602a00620012015370388062001200b3602a4062003200720014180066a10b905200b41ffffff3f71450d022009102e0c020b200141c0056a280200210220012802bc05210a41002107200141003a00a005024002402002450d000240024002400240024020082d00000e06060001020304050b410121070c050b410221070c040b410321070c030b410421070c020b410521070c010b200141003602b808200142013703b0082001410a360294052001200141c0046a360290052001200141b0086a3602a00520014194066a41013602002001420137028406200141909dc50036028006200120014190056a36029006200141a0056a419cebc00020014180066a103d1a20012802b00820012802b80810ef02024020012802b408450d0020012802b008102e0b410621070b200a450d002008102e0b42c0acb7a20b2112024020074104470d00200141c8086a22084200370300200141c0086a22024200370300200141b0086a41086a22074200370300200142003703b008200141c0046a4192fdc60041071081022007200141c0046a41086a220a290000370300200120012900c0043703b008200141b8056a41dd8cc5004112108102200341086a2204200141b8056a41086a2209290000370000200320012900b805370000200141b0086a412010ff01200842003703002002420037030020074200370300200142003703b008200141c0046a4192fdc60041071081022007200a290000370300200120012900c0043703b008200141b8056a419c8dc500411210810220042009290000370000200320012900b805370000200141b0086a412010ff01200842003703002002420037030020074200370300200142003703b008200141c0046a4192fdc60041071081022007200a290000370300200120012900c0043703b008200141b8056a41fa8cc500410d10810220042009290000370000200320012900b805370000200141b0086a412010ff01200842003703002002420037030020074200370300200142003703b008200141c0046a4192fdc60041071081022007200a290000370300200120012900c0043703b008200141b8056a41ef8cc500410b10810220042009290000370000200320012900b805370000200141b0086a412010ff01200842003703002002420037030020074200370300200142003703b008200141c0046a4192fdc60041071081022007200a290000370300200120012900c0043703b008200141b8056a41cc8cc500411110810220042009290000370000200320012900b805370000200141b0086a412010ff01200842003703002002420037030020074200370300200142003703b008200141c0046a4192fdc60041071081022007200a290000370300200120012900c0043703b008200141b8056a41878dc500411510810220042009290000370000200320012900b805370000200141b0086a412010ff01200842003703002002420037030020074200370300200142003703b008200141c0046a4192fdc60041071081022007200a290000370300200120012900c0043703b008200141b8056a419cfdca00410e10810220042009290000370000200320012900b80537000020014100360288062001420137038006200141053a00a00520014180066a200141a0056a41011074200141b0086a4120200128028006220720012802880610b2010240200128028406450d002007102e0b42808aa6e40d21120b200141c0046a4192fdc6004107108102200141b8056a419f8dcc004114108102200320012900b805370000200341086a2207200141b8056a41086a220829000037000020014180066a41086a2202200141c0046a41086a220a29000037030020014180066a41106a2204200141b0086a41106a220929030037030020014180066a41186a220b200141b0086a41186a2205290300370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00900520014190096a200f41011074200141003a00900520014190096a200f4101107420014180066a4120200128029009221320012802980910b2010240200128029409450d002013102e0b200141c0046a4190dac800410a108102200141b8056a419f8dcc004114108102200320012900b805370000200720082900003700002002200a29000037030020042009290300370300200b2005290300370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009220720012802980910b2010240200128029409450d002007102e0b200141c0046a4180fdc6004112108102200141b8056a419f8dcc004114108102200320012900b805370000200341086a2207200141b8056a41086a220829000037000020014180066a41086a2202200141c0046a41086a220a29000037030020014180066a41106a2204200141b0086a41106a220929030037030020014180066a41186a220b200141b0086a41186a2205290300370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009221320012802980910b2010240200128029409450d002013102e0b2017200c7c210c200141c0046a41f8fcc6004108108102200141b8056a419f8dcc004114108102200320012900b805370000200720082900003700002002200a29000037030020042009290300370300200b2005290300370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009220720012802980910b2010240200128029409450d002007102e0b200c2017542107200141c0046a41f1fcc6004107108102200141b8056a419f8dcc004114108102200320012900b805370000200341086a2208200141b8056a41086a220229000037000020014180066a41086a220a200141c0046a41086a220429000037030020014180066a41106a2209200141b0086a41106a220b29030037030020014180066a41186a2205200141b0086a41186a2213290300370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009220f20012802980910b2010240200128029409450d00200f102e0b427f200c20071b210c200141c0046a41e8fcc6004109108102200141b8056a419f8dcc004114108102200320012900b80537000020082002290000370000200a20042900003703002009200b29030037030020052013290300370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009220720012802980910b2010240200128029409450d002007102e0b2019200c7c210c200141c0046a41a8f8c6004104108102200141b8056a419f8dcc004114108102200320012900b805370000200341086a2207200141b8056a41086a220829000037000020014180066a41086a2202200141c0046a41086a220a29000037030020014180066a41106a2204200141b0086a41106a220929030037030020014180066a41186a220b200141b0086a41186a2205290300370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009221320012802980910b2010240200128029409450d002013102e0b200c2019542113200141c0046a41dffcc6004109108102200141b8056a419f8dcc004114108102200320012900b805370000200720082900003700002002200a29000037030020042009290300370300200b2005290300370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00b00820014190096a200141b0086a41011074200141003a00b00820014190096a200141b0086a4101107420014180066a4120200128029009220720012802980910b2010240200128029409450d002007102e0b427f200c20131b210c200141c0046a41f4c2cc004118108102200141b8056a419f8dcc004114108102200320012900b805370000200341086a200141b8056a41086a29000037000020014180066a41086a200141c0046a41086a29000037030020014180066a41106a200141b0086a41106a29030037030020014180066a41186a200141b0086a41186a290300370300200120012900c0043703800620014100360298092001420137039009200141033b01b00820014190096a200141b0086a41021074200141003a00a00520014190096a200141a0056a41011074200141003a00a00520014190096a200141a0056a4101107420014180066a4120200128029009220320012802980910b2010240200128029409450d002003102e0b427f200c20127c22122012200c541b210d20014190096a210e0c020b200321022004210a0c000b0b4102200110eb04200141003602800641fcc6cb00411020014180066a410410b201200141c0046a41186a22074200370300200141c0046a41106a22084200370300200141c0046a41086a22034200370300200142003703c004200141e0046a41d9fcc60041061081022003200141e0046a41086a2202290300370300200120012903e0043703c004200141f0046a4180f4cb004106108102200641086a220a200141f0046a41086a2209290300370000200620012903f00437000020012000280200220436028006200141c0046a412020014180066a410410b20120014190046a10ee04200041106a220b10f0042004417f6a200b10a407200742003703002008420037030020034200370300200142003703c004200141e0046a41d9fcc600410610810220032002290300370300200120012903e0043703c004200141f0046a41d4f2cb00410b108102200a2009290300370000200620012903f004370000200141c0046a412010ff01200742003703002008420037030020034200370300200142003703c004200141e0046a41d9fcc600410610810220032002290300370300200120012903e0043703c004200141f0046a41e0f4cb004106108102200a2009290300370000200620012903f004370000200141c0046a412010ff01200742003703002008420037030020034200370300200142003703c004200141e0046a41d9fcc600410610810220032002290300370300200120012903e0043703c004200141f0046a41a4f5cb00410a108102200a2009290300370000200620012903f004370000200141c0046a412010ff01200742003703002008420037030020034200370300200142003703c004200141e0046a41d9fcc600410610810220032002290300370300200120012903e0043703c004200141f0046a41c0f5cb00410b108102200a2009290300370000200620012903f004370000200141c0046a412010890320014190096a41186a220b420037030020014190096a41106a2200420037030020014190096a41086a220542003703002001420037039009200141c0046a4192fdc600410710810220052003290000370300200120012900c00437039009200141b0086a4194adc600410a108102200b200141b0086a41086a2213290000370300200020012900b008370300200141f8036a200e4120108e0220012802fc03210f20012802f8032110200b420037030020004200370300200542003703002001420037039009200141c0046a4192fdc600410710810220052003290000370300200120012900c00437039009200141b0086a4198b7c6004115108102200b2013290000370300200020012900b008370300200141f0036a200e4120108e0220012802f403210b20012802f003210520014180066a200f410020101b109503200141e8036a2001280280062210200128028806108e0220012802ec03211320012802e803210f0240200128028406450d002010102e0b200742003703002008420037030020034200370300200142003703c004200141e0046a41a8f8c600410410810220032002290300370300200120012903e0043703c004200141f0046a41fa8bc500410a108102200a2009290300370000200620012903f004370000200141d8036a200141c0046a108503200141c8036a20012903e003420020012802d8031b420042e012420010e808024002400240024020012903d00350450d0020012903c803210c20014198066a2207420037030020014190066a2209420037030020014180066a41086a220342003703002001420037038006200141b8056a41a8f8c60041041081022003200141b8056a41086a2208290000370300200120012900b80537038006200141b0086a41e38bc500410b1081022007200141b0086a41086a2202290000370300200920012900b008370300200141b8036a20014180066a108503200c20012903c003420020012802b8031b7c2212200c540d012007420037030020094200370300200342003703002001420037038006200141b8056a41a8f8c600410410810220032008290000370300200120012900b80537038006200141b0086a41c98bc500410b108102200941086a2002290000370000200920012900b008370000200141a8036a20014180066a1085034100417f2004417f41004100417f2004427f201242e0127c220c200c2012541b221220012903b003420020012802a8031b7d220ca7417f200c428080808010541b6a220320032004491b200c2012561b220320046b2207200720034b1b22034100410041064100200b410020051b220720134100200f1b6b2208200820074b1b6b2207200741064b1b2207417f6a2208200820074b1b41e0126c6a220720072003491b6a220320032004491b220320046b2207200720034b1b2108200141a0036a10f40442a082c0dd00211c0240024020012d00a0032202417e6a22074102200741ff01714102491b41ff01710e020001050b200320044d0d04200841d8044b0d040c030b200320044d0d03200841d904490d020c030b41e8b2c40041fa0041e4b3c400105d000b41e8b2c40041fa0041f4b3c400105d000b4290cad9c400210c42002112024002400240200241ff01714103460d0020014180066a410141ffff0310ef052001280280064101460d0320014198066a2208290300210c20014190066a220328020021072001418c066a2213280200210a20014180066a41086a2202280200210b20014180066a4101417f10e9052001280280064101460d022008290300211220032802002105201328020021132002280200210f2008420037030020034200370300200242003703002001420037038006200141b0086a4192fdc60041071081022002200141b0086a41086a2210290000370300200120012900b00837038006200141b0086a41b4aac600410e10810220082010290000370300200320012900b00837030020014198036a20014180066a4120108e02200741ffff034b0d01200128029c0341002001280298031b211d200120073602bc05200120053602b80520014198066a2210420037030020014180066a41106a2211420037030020014180066a41086a220842003703002001420037038006200141b0086a41a5fec600411a1081022008200141b0086a41086a2202290000370300200120012900b00837038006200141b0086a41ccc5c8004110108102200341086a221e2002290000370000200320012900b00837000020014100360298092001420137039009200141b8056a20014190096a109102200141b8056a41047220014190096a10910220014180066a4120200128029009221f20012802980910b2010240200128029409450d00201f102e0b2010420037030020114200370300200842003703002001420037038006200141b0086a41a5fec600411a10810220082002290000370300200120012900b00837038006200141b0086a4194c5c800410e108102201e2002290000370000200320012900b0083700002001201d3602900920014180066a412020014190096a410410b201200141a4096a200736020020014190096a41106a200a3602002001200b36029c09200120053602980920012013360294092001200f360290092010420037030020114200370300200842003703002001420037038006200141b0086a41a5fec600411a10810220082002290000370300200120012900b00837038006200141b0086a41c8c4c8004108108102201e2002290000370000200320012900b008370000200141003602b808200142013703b00820014190096a200141b0086a10b6012007200141b0086a107602402007450d0020074105742107200b21030340200141b0086a200341201074200341206a2103200741606a22070d000b0b20014180066a412020012802b008220320012802b80810b201024020012802b408450d002003102e0b02402005450d00200541386c2107200f412c6a210303400240200328020041ffffff3f71450d002003417c6a280200102e0b200341386a2103200741486a22070d000b0b02402013450d00201341386c450d00200f102e0b0240200a41ffffff3f71450d00200b102e0b427f427f200c20127c22122012200c541b220c42c0b6fc9a017c22122012200c541b21124290bad8ce02210c0b4101200410ec04200141d8046a4200370300200141d0046a4200370300200141c0046a41086a22034200370300200142003703c004200141e0046a41a5fec600411a1081022003200141e0046a41086a290300370300200120012903e0043703c004200141f0046a4180c3c8004105108102200641086a200141f0046a41086a290300370000200620012903f00437000020014190036a200141c0046a4120108e0220014180066a41086a20012802940341012001280290031b360200200141053a008406200141173a008006427f200c427f20124280c2d72f7c221520152012541b7c22122012200c541b211c20014180066a10fe010c020b02402005450d00200541386c2107200f412c6a210303400240200328020041ffffff3f71450d002003417c6a280200102e0b200341386a2103200741486a22070d000b0b2013450d00201341386c450d00200f102e0b200a41ffffff3f71450d00200b102e0b42002120420021210240200441808c15700d00200142f0f2bda1a7ee9cb9f9003703800620014190096a20014180066a10cd02200141b0086a20014190096a10c80220014180066a20012802b008220a20012802b80810c9024100210341002107410021084100210202402001290380064201520d0020014190066a28020021072001280288062102200128028c06210820012802940621030b024020012802b408450d00200a102e0b200142002003ad4220862007ad8422122008ad4220862002ad84220c4280c8afa02554ad7d2215200c4280b8d0df5a7c2214200c562015201256200c42ffc7afa025561b22031b220c3703980520014200201420031b22123703900520014180066a41186a200c37030020014180066a41106a201237030020014180066a41086a221341013a00002001410e3a00800620014180066a10fe01200142f0f2bda1a7ee9cb9f90037038006200141b8056a20014180066a10cd0241002110200141003a008005200142003703a805200142003703a00520014190096a41186a2222420037030020014190096a41106a2223420037030020014190096a41086a220a42003703002001420037039009200141c0046a41bad7c7004108108102200a200141c0046a41086a2224290000370300200120012900c00437039009200141b0086a4194ccc2004109108102200041086a2225200141b0086a41086a2226290000370000200020012900b00837000020014180066a200e109b03200129028406220c4200200128028006221d1b221b42ffffffff0f832118200c422088211a201d4104201d1b21110240201b422088a7220b450d0020014180066a41096a2127200141d0096a211f200141b0096a21284100211e200141b8066a21294100211041002107024003400240024002402010450d00201120074102746a210320112007201e6a4102746a21080340200141c0046a2003280200220510d60320014180066a20012802c004220f20012802c80410b805200129038006210c20014190096a201341e00010e9081a410021020240200c4201520d00200141b0086a20014190096a41e00010e9081a410121020b024020012802c404450d00200f102e0b2002450d0320014190096a200141b0086a41e00010e9081a200129039005221520012903900922145420014190056a41086a290300220c200a290300221254200c2012511b450d02200141013a00800520082003280200360200200341046a2103200841046a2108200741016a2207200b490d000c050b0b201120074102746a21030340200141c0046a2003280200220510d60320014180066a20012802c004220220012802c80410b805200129038006210c20014190096a201341e00010e9081a410021080240200c4201520d00200141b0086a20014190096a41e00010e9081a410121080b024020012802c404450d002002102e0b2008450d0220014190096a200141b0086a41e00010e9081a200129039005221520012903900922145a20014190056a41086a290300220c200a29030022125a200c2012511b0d01200341046a2103200141013a008005200741016a2207200b490d000b410021100c040b2001201520147d370390052001200c20127d2015201454ad7d3703980520014180066a200510d603200128028006220320012802880610ff010240200128028406450d002003102e0b20014180036a202820012903a009202229030010fb01200141f0026a201f200129039009200a29030010fd01200141a0056a41086a2203427f2003290300220c200141f0026a41086a2903007c20012903a005221220012903f0027c22152012542203ad7c221220032012200c542012200c511b22031b3703002001427f201520031b3703a005200129039009210c2029200a2903003703002027201f290000370000202741086a201f41086a290000370000202741106a201f41106a290000370000202741186a201f41186a2900003700002001200c3703b006200141023a0088062001410e3a008006200120053602ac0620014180066a10fe010b201e417f6a211e201041016a2110200741016a2207200b490d000b0b024020100d00410021100c010b2011200720106b4102746a201120074102746a200b20076b41027410ea081a0b201a4200201d1b210c200120113602800620012018200b20106bad42208684370284062022420037030020234200370300200a42003703002001420037039009200141c0046a41bad7c7004108108102200a2024290000370300200120012900c00437039009200141b0086a4194ccc200410910810220252026290000370000200020012900b008370000200e20014180066a10c7050240201b42ffffffff0383500d002011102e0b200120014180056a3602b0082001200141a0056a3602b005200120014190056a36028805200141d8046a22004200370300200141d0046a220e4200370300200141c0046a41086a22134200370300200142003703c004200141e0046a41bad7c70041081081022013200141e0046a41086a2210290300370300200120012903e0043703c004200141f0046a41c0dac000410f108102200641086a2211200141f0046a41086a221e290300370000200620012903f004370000200c42f89fb81d7e200c42c0d1e1237e7c2115200c4280c6868f017e211420014180066a200141c0046a109b03200129028406420020012802800622031b221242ffffffff0f83211b2003410420031b2105024002402012422088220ca7220a0d004100210b0c010b4100210f4100210b410021070240034002400240200b450d00200520074102746a210320052007200f6a4102746a21080340200120032802002202360290092001200141b0086a36028c06200120014190096a360288062001200141b0056a36028406200120014188056a36028006200220014180066a10f801450d0220082003280200360200200341046a2103200841046a2108200741016a2207200a490d000c040b0b200520074102746a21030340200120032802002208360290092001200141b0086a36028c06200120014190096a360288062001200141b0056a36028406200120014188056a36028006200820014180066a10f801450d01200341046a2103200741016a2207200a490d000b4100210b0c030b200f417f6a210f200b41016a210b200741016a2207200a490d000b0b0240200b0d004100210b0c010b20052007200b6b4102746a200520074102746a200a20076b41027410ea081a0b201520147c211520012005360280062001201b200a200b6bad422086843702840620004200370300200e420037030020134200370300200142003703c004200141e0046a41bad7c700410810810220132010290300370300200120012903e0043703c004200141f0046a41c0dac000410f1081022011201e290300370000200620012903f004370000200141c0046a20014180066a10c7050240201242ffffffff0383500d002005102e0b201542f8a8df8c017c2115200c42c0b6fc1d7e200c42c0d1e1237e7c200c4280c6868f017e7c2114024020012d0080050d0042002117200141e0026a200129039005221220014190056a41086a2203290300220c42c0843d420010e608200141d0026a2012200c42c0843d420010e708200141c0026a20012903d002200141d0026a41086a2903004290ce00420010e8082003200c200c200141c0026a41086a29030020012903c002221b20012903e002221842e40080a720184290ce007e42c0843d8242a0c21e566aad7c2218201b54ad7c221b2018201256201b200c56201b200c511b22071b221b7d20122012201820071b220c54ad7d37030020012012200c7d3703900502400240200c201b844200520d00200142003703880620014200370380064200211942002112420021180c010b200141d8046a22084200370300200141c0046a41106a22024200370300200141c0046a41086a22034200370300200142003703c004200141e0046a41f8fcc60041081081022003200141e0046a41086a220a290300370300200120012903e0043703c004200141f0046a41a8aac800410d108102200641086a220b200141f0046a41086a2205290300370000200620012903f004370000200141a8026a200141c0046a412010f802200141a8026a41106a290300211220012903b002211820012802a8022107200842003703002002420037030020034200370300200142003703c004200141e0046a41f8fcc60041081081022003200a290300370300200120012903e0043703c004200141f0046a41a8aac800410d108102200b2005290300370000200620012903f004370000200142002012420020071b2212201b7d2018420020071b2218200c54ad7d221a2018200c7d2217201856201a201256201a2012511b22031b3703880620014200201720031b37038006200141c0046a412020014180066a411010b2012001201b370388062001200c370380062012201b20031b21192018200c20031b211720014180066a109803200129038806211820012903800621120b200141a8056a2203427f2003290300221a20197c20012903a005221920177c22162019542203ad7c221720032017201a542017201a511b22031b3703002001427f201620031b3703a005200120123703800620012018370388060240024020122018844200520d00200120014180066a3602900920014190096a10cc020c010b20012018370388062001201237038006200120014180066a3602900920014190096a10cc020b20014198066a201b37030020014190066a200c37030020014188066a41043a00002001410e3a00800620014180066a10fe010b201420157c211520014190096a200141b8056a20012903a005220c200141a0056a41086a2903002212410210fe060240024002402001280290090d0020014180066a41106a20014190096a41106a290300221b20127d2001290398092214200c54ad7d2012201b7d200c201454ad7d2014200c56201b201256201b2012511b22031b37030020012014200c7d200c20147d20031b3703880620012003ad3703800620014180066a41086a210720030d01200120073602b008200141b0086a10ce020c020b419dccc20041ca0010ef0220012012370388062001200c37038006200120014180066a3602900920014190096a10ce020c010b200120073602b008200141b0086a10cc020b201542c0b2cd3b7c2121200129039005210c20014198066a20014190056a41086a29030037030020014190066a200c37030020014180066a41086a41053a00002001410e3a00800620014180066a10fe010b0240200441c09306700d0010f70221200b20014180066a10a903200129038806212a42002112024020044180ce18700d0020014198066a420037030020014190066a420037030020014180066a41086a220342003703002001420037038006200141b8056a41de80ca0041091081022003200141b8056a41086a290000370300200120012900b80537038006200141b0086a41a8fbca004115108102200941086a200141b0086a41086a290000370000200920012900b0083700000240024020014180066a108603220341ff01714102460d0020014180066a412010ff012003410171450d0020014180066a2004109008024020012d0080064106460d0020014190096a20041096080c020b200141063a0090090c010b20014180066a2004109608024020012d0080064106460d0020014190096a20041090080c010b200141063a0090090b0240024020012d0090094106460d0020014180066a41131093080c010b200141063a0080060b202a21120b20014198066a2207420037030020014190066a220842003703004108210a20014180066a41086a220342003703002001420037038006200141b8056a41de80ca0041091081022003200141b8056a41086a2202290000370300200120012900b80537038006200141b0086a41f4f8ca00410d108102200941086a220b200141b0086a41086a2205290000370000200920012900b008370000200141a0026a20014180066a4120108e0220012802a402211320012802a002210f2007420037030020084200370300200342003703002001420037038006200141b8056a41de80ca00410910810220032002290000370300200120012900b80537038006200141b0086a41ccf8ca00410f108102200b2005290000370000200920012900b00837000020014198026a20014180066a4120108e02200128029c0221032001280298022107200120043602f00420012003410020071b22003602a405200120134100200f1b220e3602a0052001200141f0046a3602a80520014180066a200141a0056a200141a0056a200141a0056a41086a1088050240024020012d00e00622034103460d0020014190096a20014180066a41e00010e9081a200120014180066a41e4006a28000036008b05200120012800e1063602880541e800102c220a450d02200a20014190096a41e00010e908220720033a00602007200128028805360061200741e4006a200128008b05360000200141c0046a41086a220b200141a0056a41086a280200360200200120012903a0053703c00420014180066a200141c0046a200141c0046a200b108805024020012d00e00622094103470d0041012102410121070c020b41c9012108200141e1066a220541036a211341012102410121070240034020014190096a20014180066a41e00010e9081a200120132800003600b305200120052800003602b00520014180066a20014190096a41e00010e9081a200120012800b30536009305200120012802b00536029005024020072002470d00200241016a22032002490d062002410174220f2003200f20034b1b22034104200341044b1bad42e8007e220c422088a7454103742103200ca7210f0240024020020d00200141003602b0080c010b200141083602b8082001200a3602b0082001200241e8006c3602b4080b200141b8056a200f2003200141b0086a107d20012802c005210320012802b8054101460d0220012802bc05210a200341e8006e21020b200a20086a2203419f7f6a20014180066a41e00010e9081a2003417f6a20093a00002003200128029005360000200341036a20012800930536000020014180066a200141c0046a200141c0046a200b108805200841e8006a2108200741016a210720012d00e00622094103470d000c030b0b2003450d030c020b41002102410021070b427f41002000200e6b2203200320004b1bad220c428899d2027e200c42c0f0f50b7e7c20127c42d0f4c53f7c220c200c2012541b210c02402007450d00200a280200210920014180066a200a41046a41dc0010e9081a2001200a41e1006a280000360280052001200a41e4006a28000036008305200a41e0006a2d000022054103460d00200a200741e8006c6a210f200141c8096a211320014180066a41086a212220014180066a4101722127200141b0086a41046a210020014180066a41096a211e200141e9096a220e41036a2110200141b8096a2111200a21080340200141b0086a20014180066a41dc0010e9081a20012001280083053600b30520012001280280053602b00520014190096a200041d80010e9081a200e20012802b005360000201020012800b305360000200120053a00e809200141c0046a41186a4200370300200141c0046a41106a4200370300200141c0046a41086a22034200370300200142003703c004200141e0046a41f8fcc60041081081022003200141e0046a41086a290300370300200120012903e0043703c004200141f0046a41a8aac800410d108102200641086a200141f0046a41086a290300370000200620012903f00437000020014180026a200141c0046a412010f80220014180026a41106a29030021152001280280022107200129038802211420014190096a41186a290300211620014190096a41086a290300212b20012903a009212c200129039009212d41002103024020012903b009221a42028820112903002218423e8684220c2018420288221284500d0041002103200c201a85201220188584500d00410021030340200141f0016a201a2018200341046a41fe007110e408200341026a210320012903f001220c200141f0016a41086a290300221284500d01200c201a8520122018858450450d000b0b2015420020071b21172014420020071b2119200841e8006a210b42002114420021120340200141d0016a20124201862014423f88842212420020144201862214420184220c420010e808200141e0016a200c4200200c420010e8080240201220012903d801221584201584420052200141e0016a41086a290300221520012903d001221b201b7c7c221b201554720d0020012903e0012115200141c0016a201a2018200341ff007110e40820122012201520012903c00156201b200141c0016a41086a290300221556201b2015511b22071b21122014200c20071b21140b02402003450d0041002003417e6a2207200720034b1b21030c010b0b41002103024020194202882017423e8684220c2017420288221584500d00200c201985201520178584500d00410021030340200141b0016a20192017200341046a41fe007110e408200341026a210320012903b001220c200141b0016a41086a290300221584500d01200c20198520152017858450450d000b0b420021154200210c034020014190016a200c4201862015423f8884220c420020154201862215420184221b420010e808200141a0016a201b4200201b420010e8080240200c200129039801221884201884420052200141a0016a41086a2903002218200129039001221a201a7c7c221a201854720d0020012903a001211820014180016a20192017200341ff007110e408200c200c201820012903800156201a20014180016a41086a290300221856201a2018511b22071b210c2015201b20071b21150b02402003450d0041002003417e6a2207200720034b1b21030c010b0b02400240024002402014201284500d00024002400240024002400240200541ff01710e03000102000b0340200141306a202c20162014201210e70820152215200c221b844200510d04200141306a41086a290300210c20012903302118200141206a202d202b2015201b10e70820182001290320221754200c200141206a41086a290300221a54200c201a5122031b0d032017201854201a200c5420031b0d06200141106a202c20162014201210e6082001202d202b2015201b10e6082001290300220c200141086a290300221884500d062014212d2012212b200c2114201821122015212c201b211620012903102215200141106a41086a290300220c8450450d000c030b0b034020122112201421142015200c844200510d04200141f0006a202c20162015200c10e708200141e0006a202d202b2014201210e7082001290370221a2001290360221754200141f0006a41086a290300221b200141e0006a41086a290300221854201b20185122031b0d022017201a542018201b5420031b0d05200141d0006a202c20162015200c10e608200141c0006a202d202b2014201210e6082001290340221b200141c0006a41086a290300221884500d052015212d200c212b201b21152018210c2014212c2012211620012903502214200141d0006a41086a29030022128450450d000c020b0b202d202c58202b201658202b2016511b0d030b2001200936028c06200141043a008806200141093a00800620014180066a10fe01024020012802c40922030d0020014180066a41186a201341186a29000037030020014180066a41106a201341106a2900003703002022201341086a2900003703002001201329000037038006200141b8056a20014180066a2009109708410121030c060b200141c0046a201310980820014180066a20012802c004220520012802c804221d10ad05200320046a2107024020012d00800622034103712223410346221f0d00024020030e03000100000b02400240201f0d0020230e03010001010b20012802a806450d0020012802a406102e0b202720012f00a0053b0000202741026a200141a0056a41026a2d00003a000041002103200141003a00800620012007360284062022200141b8056a41c80010e9081a0c040b200120073602b806200141013602b40620034102470d032005201d10ff010c040b41d0d8c8004119418cd5cc001039000b41d0d8c8004119418cd5cc001039000b2001200936028c06200141053a008806200141093a00800620014180066a10fe01410021030c020b200141003602c005200142013703b80520014180066a200141b8056a10ac082005201d20012802b805221f20012802c00510b201024020012802bc05450d00201f102e0b0240200341037122034103460d0020030e03010001010b20012802a806450d0020012802a406102e0b024020012802c404450d002005102e0b2001200936029805200142e4cab5fbb6ccdcb0e30037039005410c102c2203450d032001420c3702f404200120033602f004200141f0046a20014190056a410810742001200936028006200141f0046a20014180066a41041074200141a0056a41086a20012802f804360200200120012903f0043703a005200141003b01b805201e2013290000370000201e41086a201341086a290000370000201e41106a201341106a290000370000201e41186a201341186a290000370000200141173a0088062001410d36028006200120093602ac06200141c0046a200141a0056a41002007410020014100413f200141b8056a20014180066a10c9044101210320012802c0044101470d0041ac80ca00413210ef020b2001200436028406200120033a008106200141013a008006200141b8056a200910890520012802c005210720012802b80521032001410036029809200142013703900920014180066a20014190096a10bc0520032007200128029009220920012802980910b2010240200128029409450d002009102e0b024020012802bc05450d002003102e0b0240200b200f460d002008280268210920014180066a200841ec006a41dc0010e9081a2001200841c9016a280000360280052001200841cc016a28000036008305200841c8016a2103200b210820032d000022054103470d010b0b202a210c0b02402002450d00200241e8006c450d00200a102e0b2004108303211220014180066a10a903427f427f200d427f201c427f2021427f2020427f200c20127c22122012200c541b7c220c200c2020541b7c220c200c2021541b7c220c200c201c541b7c220c200c200d541b220c2001290380067c22122012200c541b410210f1044100410010eb04200128029004210802402001280298042203450d00200341246c21072008210303400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a280200102e0c030b2003410c6a280200450d02200341086a280200102e0c020b2003410c6a280200450d01200341086a280200102e0c010b200341086a280200450d00200341046a280200102e0b200341246a21032007415c6a22070d000b0b02402001280294042203450d00200341246c450d002008102e0b200141f0096a24000f0b1036000b1038000b0400100b0ba33f04067f087e057f027e230041b0126b22022400200220013602900a200241f0006a200241900a6a109005200228027821032002280270210420022802742105200241900a6a200141c80310e9081a20024188076a200241900a6a108a0220022d008807210120022f008907210620022d008b07210720024180046a20024188076a41047241840310e9081a02400240024002400240024002400240024020014101460d0020024180016a20024180046a41046a41800310e9081a200241e8006a41fcc6cb004110108e02200228026c21012002280268210620022003360290072002200536028c072002200436028807200241900a6a2001410020061b10a30720022802900a220120022802980a20024188076a10c502024020022802940a450d002001102e0b02402005450d002004102e0b200241d80d6a20024180016a41d0006a109704200241900a6a20024180016a41800310e9081a02400240024002400240024002400240024020022903b00a22084202520d0020022903d80d20022d00e00d2003109f05220141ff01714102470d08200241a0076a4200370300200241a8076a4200370300200241b0076a4200370300200242003703800f200242003703900720024200370388072002420037039807200242003703b80720022802e00a417e6a0e1a010b0b0b0b0b0b0b02040b0b0b0b0b0b0b050b0b0b0b0b0b0b060b0b200241980e6a41186a200241900a6a41186a290300370300200241980e6a41106a200241900a6a41106a290300370300200241980e6a41086a200241900a6a41086a290300370300200220022903900a3703980e200241900a6a41c0006a2903002109200241900a6a41386a290300210a200241900a6a41c8006a280200210120022903b80a210b200241f0116a41186a22054200370300200241f0116a41106a22044200370300200241f0116a41086a22064200370300200242003703f011200241d0116a41d9fcc60041061081022006200241d0116a41086a2207290000370300200220022900d0113703f011200241d0116a4180f4cb00410610810220052007290000370300200420022900d011370300200241e0006a200241f0116a4120108e02024020084201520d00200b4200510d0a0b200241d0116a200241980e6a10c80220024188076a20022802d011220420022802d81110c90220024188076a41c8006a2802002105200229038807210820024188116a41086a20024188076a41106a29030037030020024188116a41106a20024188076a41186a29030037030020024188116a41186a20024188076a41206a29030037030020024188116a41206a20024188076a41286a29030037030020024188116a41286a220620024188076a41306a29030037030020024188116a41306a220720024188076a41386a29030037030020024188116a41386a20024188076a41c0006a290300370300200220022903900737038811200241a0106a41086a200241dc076a280200360200200220022902d4073703a0100240024020084201510d00200241a8126a4200370300200241f0116a41306a4200370300200241f0116a41286a420037030020024190126a420037030020024188126a420037030020024180126a4200370300200241f0116a41086a420037030041002105200241e0116a41086a4100360200200242003703f011200242003703e0110c010b200241f0116a41386a20024188116a41386a290300370300200241f0116a41306a2007290300370300200241f0116a41286a2006290300370300200241f0116a41206a20024188116a41206a290300370300200241f0116a41186a20024188116a41186a290300370300200241f0116a41106a20024188116a41106a290300370300200241f0116a41086a20024188116a41086a290300370300200241e0116a41086a200241a0106a41086a28020036020020022002290388113703f011200220022903a0103703e0110b024020022802d411450d002004102e0b024020052001470d0020024188076a41386a200241f0116a41386a29030037030020024188076a41306a200241f0116a41306a29030037030020024188076a41286a200241f0116a41286a29030037030020024188076a41206a200241f0116a41206a29030037030020024188076a41186a200241f0116a41186a29030037030020024188076a41106a200241f0116a41106a29030037030020024188076a41086a200241f0116a41086a290300370300200220022903f011370388072002200141016a3602c807200241d4076a200241e0116a41086a280200360200200220022903e0113702cc0720024188116a200241980e6a10c802200228028811220120022802901120024188076a10c9050240200228028c11450d002001102e0b418012210120022d00e00d22054102460d0e20022903d80d220820052003109f05220141ff01714102470d0e20024188076a20032008200a200920022d00e10d410047200510e7044200210c4200210b4200210802402002290388074201520d00427f427f20024198076a2903002208200241a8076a2903007c200229039007220b200241a0076a2903007c220d200b542201ad7c220b2001200b200854200b2008511b22011b2208200241b8076a2903007c427f200d20011b220b200241b0076a2903007c220d200b542201ad7c220b2001200b200854200b2008511b22011b2108427f200d20011b210b0b02400240024002400240200b20022903c007220d84200820024188076a41c0006a290300220e848450450d000c010b20024188076a200241980e6a427f200b200d7c220c200c200b5422012008200e7c2001ad7c220b200854200b2008511b22011b427f200b20011b41014111200a200984501b10fe062002280288074101460d0120024198076a290300210f200229039007210e4201210c0b200241a0106a41086a200241980e6a41086a2903002208370300200241a0106a41106a200241980e6a41106a290300220b370300200241a0106a41186a200241980e6a41186a290300220d37030020024188116a41c0006a200f370300200241c0116a2201200e37030020024188116a41186a200837030020024188116a41206a200b37030020024188116a41286a200d370300200220022903980e22083703a0102002200a3703881120022008370398112002200c3703b811200220093703901120024188076a200241980e6a200241900a6a41d0006a10800320022d0088074101460d01200241b4076a280200210720024188076a41286a2802002104200241ac076a2802002110200241a4076a280200210620024188076a41186a2802002111024020024188076a41206a2802002201450d002001410c6c21052011210103400240200141046a280200450d002001280200102e0b2001410c6a2101200541746a22050d000b0b02402006450d002006410c6c450d002011102e0b02402007450d002007410c6c21052010210103400240200141046a280200450d002001280200102e0b2001410c6a2101200541746a22050d000b0b2004450d022004410c6c450d022010102e0c020b200241a0106a41086a200241f0116a41086a290300370300200241a0106a41106a200241f0116a41106a290300370300200241a0106a41186a200241f0116a41186a290300370300200220022903f0113703a01041800221010c100b20022d00890722054102470d0e0b200241c0106a20024188116a41c80010e9081a200241d00f6a41046a200241c0106a41c80010e9081a200241800f6a200241d00f6a41cc0010e9081a200241b80e6a200241800f6a41046a41c80010e9081a200241f80d6a41086a200241980e6a41086a290300370300200241f80d6a41106a200241980e6a41106a290300370300200241f80d6a41186a200241980e6a41186a290300370300200220022903980e3703f80d20024187046a200241b80e6a41c80010e9081a410121010c0c0b418006418004200520014b1b21010c0d0b4100210141002105200241e80a6a2802004102470d05200241800b6a200241ec0a6a10f20622014180feff077141087621050c010b4100210141002105200241e80a6a2802004102470d04200241800b6a200241ec0a6a10ff0622014180feff077141087621050b200141ff01714102470d030c070b200241d00f6a200241e40a6a109d07024020022d00d00f4101460d00200241fc0f6a2802002107200241f80f6a2802002104200241f40f6a2802002110200241ec0f6a2802002106200241e80f6a28020021110240200241f00f6a2802002201450d002001410c6c21052011210103400240200141046a280200450d002001280200102e0b2001410c6a2101200541746a22050d000b0b02402006450d002006410c6c450d002011102e0b02402007450d002007410c6c21052010210103400240200141046a280200450d002001280200102e0b2001410c6a2101200541746a22050d000b0b2004450d072004410c6c450d072010102e0c070b20022d00d10f22014102460d0620022f01d20f21050c020b200241d00f6a200241e80a6a10df02024020022d00d00f4101460d00200241fc0f6a2802002107200241f80f6a2802002104200241f40f6a2802002110200241ec0f6a2802002106200241e80f6a28020021110240200241f00f6a2802002201450d002001410c6c21052011210103400240200141046a280200450d002001280200102e0b2001410c6a2101200541746a22050d000b0b02402006450d002006410c6c450d002011102e0b02402007450d002007410c6c21052010210103400240200141046a280200450d002001280200102e0b2001410c6a2101200541746a22050d000b0b2004450d062004410c6c450d062010102e0c060b20022d00d10f22014102460d0520022f01d20f21050c010b200241d00f6a200241e80a6a10b80641002101410021050240024020022d00d00f417d6a0e0400010106010b20022d00d20f21050b200541087441077221050b2005410874200141ff017172210120022903b807500d072002200241c0076a3602d00f200241d00f6a10cc020c070b200241800f6a41186a200241d00f6a41186a290300370300200241800f6a41106a200241d00f6a41106a2903003703000c060b2000200620074110747222013b0001200041013a0000200041036a20014110763a00002005450d072004102e0c070b41d0e7cc00411941ece7cc001039000b20024187046a20024188076a41c80010e9081a410021010b200241a0106a41186a2205200241f80d6a41186a290300370300200241a0106a41106a2204200241f80d6a41106a290300370300200241a0106a41086a2206200241f80d6a41086a290300370300200220022903f80d3703a010200241d00f6a20024187046a41c80010e9081a20024180046a200241e00a6a41b00210e9081a20024188076a41186a2207200529030037030020024188076a41106a2205200429030037030020024188076a41086a22102006290300370300200220022903a010370388074102210402402001450d00200241800f6a41186a2007290300370300200241800f6a41106a2005290300370300200241800f6a41086a201029030037030020022002290388073703800f410121040b200241c0106a41086a200241800f6a41086a290300370300200241c0106a41106a200241800f6a41106a290300370300200241c0106a41186a200241800f6a41186a290300370300200220022903800f3703c01002404110102c2205450d00200541f8f7c60036020c2005410136020820054281808080103702004110102c2201450d0020014190f8c60036020c20014101360208200142818080801037020020052005280200417f6a2206360200024020060d002005280208200528020c2802001103000240200528020c280204450d002005280208102e0b200541046a22062006280200417f6a220636020020060d002005102e0b02400240200128020820024180046a200128020c28020c1101000d00200241a8116a41023a0000200241a0116a41003a000020012001280200417f6a22053602002002420037039011420121082002420137038811024020050d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22052005280200417f6a220536020020050d002001102e0b20024180046a10dc020c010b20024188076a20024180046a41b00210e9081a2002418a0f6a200241c8106a290300370100200241920f6a200241d0106a2903003701002002419a0f6a200241d8106a290300370100200241a00f6a200241de106a290100370100200220043a00810f200241003a00800f200220022903c0103701820f200220013602a80f20024188116a20024188076a200241800f6a10dd0220022903881121080b20024198116a2903002109200241a0116a2d00002106200229039011210a20024180046a200241d00f6a41c80010e9081a200241a8116a2d0000210520022d00e00d21010240024002400240024002402008500d00200a4202510d00200141ff01714102470d004102210120054106460d00200241b0116a2802002104200241ac116a280200210120023100aa11210820023100a911210b41e09fc500410d10ef024191eacc00410d10ef020240024002400240024020050e06000102030406000b2001200410ef020c060b41f8e9cc00410d10ef020c050b41eee9cc00410a10ef020c040b200b10cc08200810cc082001450d032001200410ef020c030b41dce9cc00411210ef020c020b20022903d80d21084200210e0240200a4201520d0020082009580d004200200820097d220b200b2008561b210b200241f0116a41186a22124200370300200241f0116a41106a22044200370300200241f0116a41086a22074200370300200242003703f011200241d0116a41d9fcc60041061081022007200241d0116a41086a2210290000370300200220022900d0113703f011200241d0116a41d4f2cb00410b10810220122010290000370300200420022900d01137030020024188076a200241f0116a10f2042002200229039007420020022903880742015122111b3703800f200220024188076a41106a2213290300420020111b3703c010200220024188076a41186a2214290300420020111b3703b80e200241b80e6a211102400240024020014103710e03010002010b200241c0106a21110c010b200241800f6a21110b201142002011290300220c200b7d220b200b200c561b370300201420022903b80e370300201320022903c010370300200220022903800f370390072002420137038807201242003703002004420037030020074200370300200242003703f011200241d0116a41d9fcc600410610810220072010290000370300200220022900d0113703f011200241d0116a41d4f2cb00410b108102200441086a2010290000370000200420022900d011370000200241f0116a20024188076a41086a10f3040b20024180046a41c0006a290300210c200241b8046a290300210b20024180046a41086a290300210d20022903b0042115200229038004210f200241b80e6a41186a20024180046a41286a290300370300200241b80e6a41106a20024180046a41206a290300370300200241b80e6a41086a20024180046a41186a29030037030020022002290390043703b80e20024188076a20032008200920092008561b2008200a4201511b200f200d20022d00e10d410146200641ff017141014672200110e7044200210802402002290388074201520d00427f427f20024188076a41106a290300220820024188076a41206a2903007c200229039007220920024188076a41186a2903007c220a2009542201ad7c22092001200920085420092008511b22011b2208200241b8076a2903007c427f200a20011b220920024188076a41286a2903007c220a2009542201ad7c22092001200920085420092008511b22011b2108427f200a20011b210e0b024020154201520d0020024188076a200241b80e6a4200200b427f200e20022903c0077c22092009200e542201200820024188076a41c0006a2903007c2001ad7c220920085420092008511b22011b22087d220a200a200b56200c427f200920011b7d200b200854ad7d2208200c562008200c511b22011b4200200820011b108b06420020024188076a41086a29030020022802880741014622011b2208200b7d200b20087d2008200b56420020024188076a41106a29030020011b220a200c56200a200c511b22011b2109200a200c7d2008200b54ad7d200c200a7d200b200854ad7d20011b210820010d05200241800f6a41106a200d20082009200f562008200d562008200d511b22011b220a370300200241a00f6a22042009200f200920011b220b7d2215370300200241a80f6a2008200a7d2009200b54ad7d220e370300200242003703980f200242023703800f2002200b3703880f200241c0006a200b420042d000420010e808200241306a200a420042d000420010e808200241d0006a2002290340200241c0006a41086a290300220820022903307c220c42e400420010e708200242dc9e8aae8f85d7c702200241d0006a41086a2903002002290338420052200c2008547222011b2208200a42c2eba3e1f5d1f0fa28200229035020011b220d200b542008200a542008200a511b22011b220c370390072002200d200b20011b220837038807427f200a200c7d200b200854ad7d220a200e7c200920087d220d200b20087d2216542201ad7c220b2001200b200a54200b200a511b22011b2109427f200d20011b210b024002402008200c844200520d00200220024188076a3602c010200241c0106a10cc020c010b200242f0f2bda1a7ee9cb9f9003703c01020024188076a200241c0106a10cd02200241206a20024188076a2008200c10fd01200241d0106a200241206a41086a290300220f200c7d2002290320220d200854ad7d200c200f7d2008200d54ad7d200d200856200f200c56200f200c511b22011b3703002002200d20087d2008200d7d20011b3703c81020022001ad3703c010200241c0106a41086a21030240024020010d00200220033602f011200241f0116a10cc020c010b200220033602f011200241f0116a10ce020b200241a0076a200c37030020024198076a200837030020024190076a41063a00002002410e3a00880720024188076a10fe010b2002200b370388072002200937039007024002402016201584200a200e84844200520d00200220024188076a3602c010200241c0106a10cc020c010b200241c0106a10e20420024188076a10e204200241106a20024188076a200b200910fd0120024180126a200241106a41086a290300220a20097d20022903102208200b54ad7d2009200a7d200b200854ad7d2008200b56200a200956200a2009511b22011b37030020022008200b7d200b20087d20011b3703f81120022001ad3703f011200241f0116a41086a21030240024020010d00200220033602980e200241980e6a10cc020c010b200220033602980e200241980e6a10ce020b200241c0076a2009370300200241b8076a200b37030020024188076a41086a41043a000020024191076a20022903c01037000020024199076a200241c0106a41086a290300370000200241a1076a200241d0106a290300370000200241a9076a200241d8106a290300370000200241033a00880720024188076a10fe010b0240024020022903800f22084202560d002008a70e03010001010b2002200241800f6a41086a3602880720024188076a10cc020b024020022903980f22084202560d002008a70e03010001010b200220043602880720024188076a10cc020b200241ec0d6a41026a2201200241a9116a220441026a2d00003a0000200220042f000022043b01f00d200220043b01ec0d20022902ac11210b20022903d80d2208200229039811220920092008561b2008200229039011220d4201511b210820022903e00d2109200229038811220a4201510d022009210c410021040c030b4185eacc00410c10ef020b418010210120022903b004500d072002200241b8046a3602880720024188076a10cc020c070b200241d00f6a41026a20012d00003a0000200220022f01ec0d3b01d00f410121042008210c200b21080b200241900a6a41086a20043a0000200241990a6a20022f0080043b00002002419c0a6a20053a00002002419d0a6a20022f01d00f3b0000200241900a6a41206a2009370300200241900a6a41186a200c370300200241900a6a41106a2008370300200241b80a6a2002290388073703002002419b0a6a20024180046a41026a2d00003a00002002419f0a6a200241d00f6a41026a2d00003a0000200241c00a6a20024188076a41086a290300370300200241c80a6a20024188076a41106a290300370300200241d00a6a20024188076a41186a290300370300200241d80a6a20024188076a41206a290300370300200241003a00900a200241900a6a10fe01200241086a41fcc6cb004110108e022002200228020c41016a410120022802081b22043602900a41fcc6cb004110200241900a6a410410b2014100200410eb04200241900a6a41026a20012d00003a0000200220022f01ec0d3b01900a02400240200a4201510d00410621010c010b20024188076a41026a2204200241900a6a41026a22032d00003a0000200220022f01900a3b01880741062101200d4202510d00200320042d00003a0000200220022f0188073b01900a200521010b200041003a0000200041046a20013a0000200041056a20022f01900a3b0000200041086a200b370000200041076a200241920a6a2d00003a00000c060b20022009370388072002200837039007200220024188076a3602800f200241800f6a10ce0241800221010c040b1036000b20022f018a074108742104024020022903b811500d00200220013602880720024188076a10cc020b200420057221010b200241800f6a200241d00f6a41cc0010e9081a0b200241e00a6a108b020b200241f00d6a41026a200241f40d6a41026a2d00003a0000200220022f01f40d3b01f00d200041036a20014110763a0000200020013b0001200041013a00000b200241b0126a24000b070010044101460ba922030a7f027e027f230041c0026b22012400200141f0016a41186a22024200370300200141f0016a41106a22034200370300200141f0016a41086a22044200370300200142003703f001200141c8016a41d9fcc60041061081022004200141c8016a41086a2205290000370300200120012900c8013703f001200141c8016a41e8f7cb00410e10810220022005290000370300200320012900c801370300200141f0016a412010ff01200242003703002003420037030020044200370300200142003703f001200141c8016a41d9fcc600410610810220042005290000370300200120012900c8013703f001200141c8016a4188f3cb00411010810220022005290000370300200320012900c801370300200141f0016a412010ff01200242003703002003420037030020044200370300200142003703f001200141c8016a41d9fcc600410610810220042005290000370300200120012900c8013703f001200141c8016a4180f4cb00410610810220022005290000370300200320012900c801370300200141086a200141f0016a4120108e02200128020c210620012802082107200242003703002003420037030020044200370300200142003703f001200141c8016a41d9fcc600410610810220042005290000370300200120012900c8013703f001200141c8016a41a0f4cb00410a10810220022005290000370300200320012900c801370300200141c8016a200141f0016a4120108d0220012d00c80121052002200141e1016a2900003703002003200141d9016a2900003703002004200141d1016a290000370300200120012900c9013703f0010240024020054101460d00200141106a41186a4200370300200141106a41106a4200370300200141106a41086a4200370300200142003703100c010b200141106a41186a2002290300370300200141106a41106a2003290300370300200141106a41086a2004290300370300200120012903f0013703100b20014188026a2205420037030020014180026a22084200370300200141f0016a41086a22024200370300200142003703f001200141c8016a41d9fcc60041061081022002200141c8016a41086a2204290000370300200120012900c8013703f001200141c8016a41b4f4cb004106108102200341086a22092004290000370000200320012900c801370000200141c8016a200141f0016a10a10420012802c801210a20012902cc01210b200542003703002008420037030020024200370300200142003703f001200141c8016a41d9fcc600410610810220022004290000370300200120012900c8013703f001200141c8016a41acf2cb00410e10810220092004290000370000200320012900c8013700002001200141f0016a4120108e0241012103200128020421020240024020012802004101460d00410021030c010b200141f0016a412010ff010b02402002410020031b2209ad420c7e220c422088a70d00200ca72203417f4c0d00024002400240024002400240024020030d004104210d0c010b2003102c220d450d010b0240024002402003410c6e220e20094f0d00200e41017422022009200220094b1b22024104200241044b1bad420c7e220c422088a7454102742102200ca72104024002402003410b4b0d00200141003602c8010c010b200141d0016a41043602002001200d3602c8012001200e410c6c3602cc010b200141f0016a20042002200141c8016a107d200141f8016a2802002103024020012802f0014101460d0020012802f401210d2003410c6e210e0c020b20030d030c080b20090d00410021090c010b41002103200d21020340200141f0016a200310a307200141c8016a20012802f001220520012802f8012208108b030240024020012802c80122040d004200210c410121040c010b2005200810ff0120012902cc01210c0b200341016a2103024020012802f401450d002005102e0b20022004360200200241046a200c3702002002410c6a210220092003470d000b0b200120093602d0012001200e3602cc012001200d3602c801200141306a200141c8016a10cd0802402006410020071b220541e212490d00200141c8016a41002005419f6d6a2203200320054b1b108c0220012802c801220320012802d00110ff0120012802cc01450d002003102e0b20014180016a10ce0820012802880121022001280280012103200141003a00e8012002450d04200120032d00003a00c801200141013a00e80120024101460d03200120032d00013a00c901200141023a00e80120024102460d03200120032d00023a00ca01200141033a00e80120024103460d03200120032d00033a00cb01200141043a00e80120024104460d03200120032d00043a00cc01200141053a00e80120024105460d03200120032d00053a00cd01200141063a00e80120024106460d03200120032d00063a00ce01200141073a00e80120024107460d03200120032d00073a00cf01200141083a00e80120024108460d03200120032d00083a00d001200141093a00e80120024109460d03200120032d00093a00d1012001410a3a00e8012002410a460d03200120032d000a3a00d2012001410b3a00e8012002410b460d03200120032d000b3a00d3012001410c3a00e8012002410c460d03200120032d000c3a00d4012001410d3a00e8012002410d460d03200120032d000d3a00d5012001410e3a00e8012002410e460d03200120032d000e3a00d6012001410f3a00e8012002410f460d03200120032d000f3a00d701200141103a00e80120024110460d03200120032d00103a00d801200141113a00e80120024111460d03200120032d00113a00d901200141123a00e80120024112460d03200120032d00123a00da01200141133a00e80120024113460d03200120032d00133a00db01200141143a00e80120024114460d03200120032d00143a00dc01200141153a00e80120024115460d03200120032d00153a00dd01200141163a00e80120024116460d03200120032d00163a00de01200141173a00e80120024117460d03200120032d00173a00df01200141183a00e80120024118460d03200120032d00183a00e001200141193a00e80120024119460d03200120032d00193a00e1012001411a3a00e8012002411a460d03200120032d001a3a00e2012001411b3a00e8012002411b460d03200120032d001b3a00e3012001411c3a00e8012002411c460d03200120032d001c3a00e4012001411d3a00e8012002411d460d03200120032d001d3a00e5012001411e3a00e8012002411e460d03200120032d001e3a00e6012001411f3a00e8012002411f460d03200141d0006a41106a200141c8016a41106a290300370300200141d0006a41086a200141c8016a41086a290300370300200120032d001f3a00e701200141d0006a41186a200141c8016a41186a290300370300200141203a00e801200120012903c801220c3703f0012001200c3703500240200128028401450d002003102e0b200141003602f801200142013703f0014120102c2203450d00200142203702cc01200120033602c801200141c8016a200141106a41201074200141f0016a20012802c801220320012802d0011074024020012802cc01450d002003102e0b200141f0006a20012802f001220320012802f80110cf08024020012802f401450d002003102e0b200b4200200a1b210c200a4104200a1b21040240024020012802702203450d00200141f8006a28020021022001280274210d200141003a00e8012002450d04200120032d00003a00c801200141013a00e80120024101460d03200120032d00013a00c901200141023a00e80120024102460d03200120032d00023a00ca01200141033a00e80120024103460d03200120032d00033a00cb01200141043a00e80120024104460d03200120032d00043a00cc01200141053a00e80120024105460d03200120032d00053a00cd01200141063a00e80120024106460d03200120032d00063a00ce01200141073a00e80120024107460d03200120032d00073a00cf01200141083a00e80120024108460d03200120032d00083a00d001200141093a00e80120024109460d03200120032d00093a00d1012001410a3a00e8012002410a460d03200120032d000a3a00d2012001410b3a00e8012002410b460d03200120032d000b3a00d3012001410c3a00e8012002410c460d03200120032d000c3a00d4012001410d3a00e8012002410d460d03200120032d000d3a00d5012001410e3a00e8012002410e460d03200120032d000e3a00d6012001410f3a00e8012002410f460d03200120032d000f3a00d701200141103a00e80120024110460d03200120032d00103a00d801200141113a00e80120024111460d03200120032d00113a00d901200141123a00e80120024112460d03200120032d00123a00da01200141133a00e80120024113460d03200120032d00133a00db01200141143a00e80120024114460d03200120032d00143a00dc01200141153a00e80120024115460d03200120032d00153a00dd01200141163a00e80120024116460d03200120032d00163a00de01200141173a00e80120024117460d03200120032d00173a00df01200141183a00e80120024118460d03200120032d00183a00e001200141193a00e80120024119460d03200120032d00193a00e1012001411a3a00e8012002411a460d03200120032d001a3a00e2012001411b3a00e8012002411b460d03200120032d001b3a00e3012001411c3a00e8012002411c460d03200120032d001c3a00e4012001411d3a00e8012002411d460d03200120032d001d3a00e5012001411e3a00e8012002411e460d03200120032d001e3a00e6012001411f3a00e8012002411f460d0320014180016a41106a2202200141c8016a41106a220829030037030020014180016a41086a220e200141c8016a41086a2209290300370300200120032d001f3a00e70120014180016a41186a2206200141c8016a41186a220a290300370300200141203a00e801200120012903c801220b3703f0012001200b370380012009200e29030037030020082002290300370300200a200629030037030020012001290380013703c801200141a4016a41026a220e200141fd006a41026a2d00003a0000200120012f007d3b01a40102400240200c422088a72202200ca7460d00200c210b0c010b200241016a22062002490d0820024101742207200620062007491b22064104200641044b1bad42247e220b422088a7454102742106200ba721070240024020020d00200141003602f0010c010b200141f8016a4104360200200120043602f0012001200241246c3602f4010b200141b0026a20072006200141f0016a107d200141b8026a280200210220012802b0024101460d0220012802b4022104200c42808080807083200241246ead84210b200c422088a721020b2004200241246c6a220241003a0000200220012903c801370001200241096a2009290300370000200241116a2008290300370000200241196a200a290300370000200220012f01a4013b0021200241236a200e2d00003a0000200b4280808080107c210c200d450d002003102e0b200020012903103700102000200536020020002001290350370030200041286a200141106a41186a290300370000200041206a200141106a41106a290300370000200041186a200141106a41086a290300370000200041386a200141d0006a41086a290300370000200041c0006a200141d0006a41106a290300370000200041c8006a200141d0006a41186a290300370000200041086a200c37020020002004360204200041e8006a200141306a41186a290300370000200041e0006a200141306a41106a290300370000200041d8006a200141306a41086a29030037000020002001290330370050200141c0026a24000f0b2002450d050b1036000b200141003a00e8010b41d1a4cc00412c200141c8016a4180a5cc0041a0a5cc00103e000b200141003a00e8010b41d1a4cc00412c200141c8016a4180a5cc004190a5cc00103e000b1038000b0e002001ad4220862000ad8410140bd20501057f230041d0026b22022400200242808080808020370204200220013602142002200041d4e2cc0020011b3602102002200241106a360200200241d8016a2002109902200241e4016a280200210320022802e001210420022802dc01210520022802d8012106200241f8006a200241e8016a41e00010e9081a02402005450d00200241186a200241f8006a41e00010e9081a0240024020022802002802040d00200241f8006a200241186a41e00010e9081a0c010b02402003450d00200341246c21002005210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b02402004450d00200441246c450d002005102e0b410021050b2005450d00200241d8016a410c6a2003360200200241d8016a41086a2004360200200220053602dc01200220063602d801200241e8016a200241f8006a41e00010e9081a200241d8016a10c40702402003450d00200341246c21002005210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b02402004450d00200441246c450d002005102e0b200241d0026a240042010f0b200241246a410f360200200241ec016a4102360200200242023702dc01200241a0a7c9003602d8012002410436021c200241fca7c9003602182002200241186a3602e8012002200241c8026a360220200241d8016a41b0a7c9001044000b840c04017f017e097f017e230041306b220224000240024002400240024020010d0020024100360220200242043703184108102c2201450d0420014110360204200141b1afc8003602002002200141086a36020c200220013602082002410136020420022001360200200241186a200210a9014108102c2201450d042001410e360204200141cdb7c0003602002002200141086a36020c200220013602082002410136020420022001360200200241186a200210a9014108102c2201450d042001410c360204200141dbb7c0003602002002200141086a36020c200220013602082002410136020420022001360200200241186a200210a9014108102c2201450d042001410e360204200141e7b7c0003602002002200141086a36020c200220013602082002410136020420022001360200200241186a200210a9014108102c2201450d042001410a360204200141b4d8c8003602002002200141086a36020c200220013602082002410136020420022001360200200241186a200210a9014108102c2201450d042001410b360204200141d59fc5003602002002200141086a36020c200220013602082002410136020420022001360200200241186a200210a9014108102c2201450d0420014118360204200141e48ac5003602002002200141086a36020c200220013602082002410136020420022001360200200241186a200210a9014108102c2201450d0420014112360204200141c4f9c0003602002002200141086a36020c200220013602082002410136020420022001360200200241186a200210a90120022802202201ad420c7e2203422088a70d032003a72204417f4c0d0320022802182105200228021c21060240024020040d00410421070c010b2004102c2207450d050b02402004410c6e220820014f0d00200841017422092001200920014b1b22094104200941044b1bad420c7e2203422088a74541027421092003a7210a024002402004410b4b0d00200241003602000c010b200241086a41043602002002200736020020022008410c6c3602040b200241186a200a20092002107d200241206a2802002104024020022802184101460d00200228021c21072004410c6e21080c030b2004450d040c050b20010d01410021090c020b200241246a410f360200200241146a410236020020024202370204200241a0a7c9003602002002410436021c20024194a8c9003602182002200241186a3602102002200241286a360220200241b0a7c9001044000b200520014103746a210b200141037441786a41037641016a210c41002109200721012005210403402004280200220a450d01200141086a200441046a280200360200200141046a200a360200200141003602002001410c6a2101200941016a2109200441086a2204200b470d000b200c21090b0240200641ffffffff0171450d002005102e0b2002410036020820024201370300200241edcad18b063602182002200241186a410410742002410c3a00182002200241186a41011074411f2002107641d8fec600411f20021079200241043a00182002200241186a4101107420092002107602402009450d002009410c6c2104200741086a210103402001417c6a28020021092001280200220a2002107620022009200a10742001410c6a2101200441746a22040d000b0b200228020821012002280204210a2002280200210902402008450d002008410c6c450d002007102e0b200141046a2204417f4c0d0002400240024002400240024020040d002002410036020820022004360204200241013602000c010b2004102c220b450d0620024100360208200220043602042002200b360200200141c000490d01200141808001490d022001418080808004490d030b200241033a00182002200241186a41011074200220013602182002200241186a410410740c030b200220014102743a00182002200241186a410110740c020b200220014102744101723b01182002200241186a410210740c010b200220014102744102723602182002200241186a410410740b2002200920011074200235020821032002350200210d0240200a450d002009102e0b200241306a24002003422086200d840f0b1038000b1036000bde0504017f017e017f017e230041f00a6b22022400200242808080808020370204200220013602142002200041d4e2cc0020011b3602102002200241106a360200200241a0076a200210ed01200241b8066a200241a0076a41e80010e9081a2002290388082103200241e0036a200241a0076a41f0006a41d80210e9081a0240024020034203510d00200241186a200241b8066a41e80010e9081a2002200337038001200241186a41f0006a200241e0036a41d80210e90821010240024020022802002802040d00200241e0036a200241186a41e80010e9081a200241a0076a200141d80210e9081a0c010b024020034202510d0020022d001841ff01714102470d002002280220450d00200228021c102e0b200241b0016a108b02420321030b20034203510d00200241b8066a200241e0036a41e80010e9081a200241186a200241a0076a41d80210e9081a200241a0076a200241b8066a41e80010e9081a200220033703880820024190086a200241186a41d80210e9081a200241e0036a200241a0076a10c6074101410220022d00e00322014101461b2200102c2204450d01200241003602a807200220003602a407200220043602a0070240024020014101470d00200241013a0018200241a0076a200241186a41011074200241e0036a410172200241a0076a108e050c010b200241003a0018200241a0076a200241186a41011074024020022d00e40322014106460d00200241013a0018200241a0076a200241186a41011074200120022d00e50320022d00e603200241a0076a109d060c010b200241003a0018200241a0076a200241186a410110740b20023502a807210320023502a0072105200241f00a6a240020052003422086840f0b200241c4066a410f3602002002412c6a41023602002002420237021c200241a0a7c900360218200241043602bc06200241a4a8c9003602b8062002200241b8066a3602282002200241e80a6a3602c006200241186a41b0a7c9001044000b1036000ba30a02067f047e23004180026b220224000240024020010d00200241086a41fcc6cb004110108e02200228020c21030240200228020822044101470d0041fcc6cb00411010ff010b200241c8016a41186a22014200370300200241c8016a41106a22054200370300200241c8016a41086a22064200370300200242003703c801200241106a41d9fcc60041061081022006200241106a41086a2207290000370300200220022900103703c801200241106a41acf2cb00410e108102200120072900003703002005200229001037030020022003410020041b360210200241c8016a4120200241106a410410b2014101200210eb04200142003703002005420037030020064200370300200242003703c801200241106a41d9fcc600410610810220062007290000370300200220022900103703c801200241106a4180f4cb00410610810220012007290000370300200520022900103703002002200241c8016a4120108e022002280204210320022802002104200142003703002005420037030020064200370300200242003703c801200241106a41d9fcc600410610810220062007290000370300200220022900103703c801200241106a41d4f2cb00410b1081022001200729000037030020052002290010370300200241106a200241c8016a10f20420022903102108200241106a41106a29030021092002290318210a200241106a41186a290300210b200241106a10a9032003410020041b210502402002290318427f427f200a4200200842015122011b22082009420020011b7c220920092008541b2208200b420020011b7c220920092008541b580d004200410210f1040b200510d906200241106a10c807200241003602f001200242013703e8014120102c2201450d01200242203702cc01200220013602c801200241c8016a200241206a41201074200241e8016a20022802c801220120022802d0011074024020022802cc01450d002001102e0b200241106a200241e8016a1091024120102c2201450d01200242203702cc01200220013602c801200241c8016a200241c0006a41201074200241e8016a20022802c801220120022802d0011074024020022802cc01450d002001102e0b4120102c2201450d01200242203702cc01200220013602c801200241c8016a200241e0006a41201074200241e8016a20022802c801220120022802d0011074024020022802cc01450d002001102e0b200228021421032002411c6a2802002207200241e8016a10760240200741246c2205450d00200321010340200241c8016a200110ef04200241e8016a20022802c801220620022802d0011074024020022802cc01450d002006102e0b200141246a21012005415c6a22050d000b0b20023502f001210820023502e801210902402007450d00200741246c21052003210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012005415c6a22050d000b0b0240200241186a2802002201450d00200141246c450d002003102e0b20024180026a240020084220862009840f0b200241d4016a410f360200200241246a410236020020024202370214200241a0a7c900360210200241043602cc01200241bca8c9003602c8012002200241c8016a3602202002200241f8016a3602d001200241106a41b0a7c9001044000b1036000bd40704017f017e017f017e230041f0036b220224002002428080808080203702dc022002200136022c2002200041d4e2cc0020011b3602282002200241286a3602d802200241386a200241d8026a10ef01024002400240024020022802384101460d0020024180036a41086a2201200241c4006a2802003602002002200229023c37038003024020022802d8022802040d00200241186a41086a2001280200220136020020022002290380032203370318200241286a41086a200136020020022003370328200241386a200241286a108e0120022802384101460d02200241386a41086a22012903002103200241386a41186a22004200370300200241386a41106a220442003703002001420037030020024200370338200241386a41e8fcc600410910810220024180036a41b08ec9004103108102200020024180036a41086a22012900003703002004200229008003370300200241086a200241386a10850320022802082104200229031021052002410036023820024180036a41a00e4108200241386a107d2001280200210002402002280280034101470d002000450d040c050b20022802840320024180036a41e80010e908220142023703682001410336029801200120022903d802370370200141f8006a200241d8026a41086a29030037030020014180016a200241d8026a41106a29030037030020014188016a200241d8026a41186a29030037030020014190016a200241f8026a290300370300200141a0016a2003200542b8177c42b81720041b220520032005561b370300200141a8016a200241386a41a00210e9081a200241286a10f10141cc03102c2204450d04200242cc03370284032002200436028003410120024180036a1076200220013602d802200241386a200241d8026a10900520024180036a20022802382204200228024010740240200228023c450d002004102e0b20023502800321032002350288032105024020012903684202510d0020012d00004102470d00200141086a280200450d00200141046a280200102e0b20014198016a109601200041c8037021040240200041c803490d0020002004460d002001102e0b200241f0036a240020054220862003840f0b20024180036a10f1010b2002418c036a410f360200200241cc006a41023602002002420237023c200241a0a7c9003602382002410436028403200241d4a8c90036028003200220024180036a3602482002200241e8036a36028803200241386a41b0a7c9001044000b20024188036a200241c4006a2902003703002002200229023c3703800341e4a4c900412820024180036a418ca5c900419ca5c900103e000b1038000b1036000bfe1a070a7f017e057f027e037f027e057f230041c0056b2202240020024280808080802037021c2002200136022c2002200041d4e2cc0020011b3602282002200241286a360218200241c8046a200241186a109902024020022802cc042203450d00200241d4046a280200210420022802d004210520022802c8042101200241e8036a200241d8046a41e00010e9081a200241c8046a200241186a10ec01024020022802c80422060d0002402004450d00200441246c21002003210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b2005450d01200541246c450d012003102e0c010b200241c8046a41086a280200210720022802cc04210820024188036a200241e8036a41e00010e9081a200241a8026a20024188036a41e00010e9081a200241c8046a200241186a10ef01024020022802c8044101470d0002402004450d00200441246c21002003210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b02402005450d00200541246c450d002003102e0b02402007450d00200741c8036c210020062109034002402009220141e8006a2903004202510d0020012d00004102470d00200141086a280200450d00200141046a280200102e0b200141c8036a210920014198016a109601200041b87c6a22000d000b0b2008450d01200841c8036c450d012006102e0c010b200241b8016a41086a2200200241c8046a410c6a280200360200200220022902cc043703b801200241c8016a200241a8026a41e00010e9081a200241306a410c6a2004360200200241306a41086a20053602002002200336023420022001360230200241c0006a200241c8016a41e00010e9081a200241a8016a2007360200200241a4016a2008360200200241b4016a2000280200360200200220063602a001200220022903b8013702ac01200241ac016a210a0240024020022802182802040d00200241e8036a41086a200a41086a2802003602002002200a2902003703e8030c010b02402004450d00200441246c210103400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a280200102e0c030b2003410c6a280200450d02200341086a280200102e0c020b2003410c6a280200450d01200341086a280200102e0c010b200341086a280200450d00200341046a280200102e0b200341246a21032001415c6a22010d000b0b02402005450d00200541246c450d002002280234102e0b02402007450d00200741c8036c210020062109034002402009220141e8006a2903004202510d0020012d00004102470d00200141086a280200450d00200141046a280200102e0b200141c8036a210920014198016a109601200041b87c6a22000d000b0b02402008450d00200841c8036c450d002006102e0b200a10f101410021030b2003450d00200241c8016a41086a200241e8036a41086a220b2802002201360200200220022903e803220c3703c801200241a8026a41086a20013602002002200c3703a802200241013b01f403200242003702ec0302400240024002402007450d002006200741c8036c6a210d200241c8046a410472210e200241c0006a210f200241c8006a2110200621110340201141e8006a2903004202520d0102402011280298014103470d0020112903a0012112200241306a200241a8026a108e010240024020022802304101460d002002290338210c20104200370300200f4200370300200241306a41086a2201420037030020024200370330200241c8046a41e8fcc60041091081022001200241c8046a41086a2200290000370300200220022900c804370330200241c8046a41b08ec9004103108102200f41086a2000290000370000200f20022900c804370000200241086a200241306a10850302402012200c42b0ea017c580d00201342808080807083211341dea5c900ad210c4280808080d00421124100211441012115410021160c020b2012200229031042b8177c42b81720022802081b220c5a0d02200c42808080807083211241002115410121140c010b2002290338220c428080808070832112200228023421164101211541002114201742808080807083200235024084221721130b200220133703d804200220163602cc04200220153602c80420022012200c42ffffffff0f838422183703d004024002400240024020022d00f503450d004131210141b8a6c90021000c010b0240024002402015450d00200241e8036a10f101200242003702ec03200242f4d2b59bc7ae98b8303703300c010b20022802ec03210a200242f4d2b59bc7ae98b830370330200a450d0020022802e80321190c010b41e401102c220a450d0841002119200a4100360200200a41003b018a012002200a3602ec03200241003602e8030b2012422088a7211a200ca7211b02400340200a2f018a01221c410374211d41002101417f2100024003400240201d2001470d00201c21000c020b200241306a200a20016a418c016a410810ec082209450d03200041016a2100200141086a21012009417f4a0d000b0b02402019450d002019417f6a2119200a20004102746a41e4016a280200210a0c010b0b200242f4d2b59bc7ae98b830370340200220003602382002200a360234200241003602302002200241e8036a36023c2002410036029003200242013703880320150d02200241003a00b80120024188036a200241b8016a41011074200220183703b80120024188036a200241b8016a410810740c030b412d210141e9a6c90021000b20022001360234200220003602304183a6c9004122200241306a41a8a6c90041aca5c900103e000b200241013a00b80120024188036a200241b8016a41011074200e20024188036a10e8050b200241306a20024188036a10f001200220153a00f503200241003a00f40302402015450d0020024188036a41086a200241e8036a41086a290300370300200220022903e803370388032016450d04201a450d04201b102e0c040b2014201645720d00201a450d00201b102e0b201141c8036a2211200d470d000b0b20024188036a41086a200b290300370300200220022903e803370388030b200241a8026a10f10102402004450d00200441246c21002003210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b02402005450d00200541246c450d002003102e0b02402007450d00200741c8036c210020062109034002402009220141e8006a2903004202510d0020012d00004102470d00200141086a280200450d00200141046a280200102e0b200141c8036a210920014198016a109601200041b87c6a22000d000b0b02402008450d00200841c8036c450d002006102e0b200241003602d004200242013703c804200220022d0094033a00b801200241c8046a200241b8016a41011074200220022d0095033a00b801200241c8046a200241b8016a41011074200228029003220a200241c8046a10760240200228028c0322000d0041002101410021004100210a0c020b200228028803210920002101034020002f018a01211d2009450d022009417f6a21092000201d4102746a41e4016a280200210020012802e40121010c000b0b1036000b200241c4006a201d360200200241c0006a20003602002002200a3602482002420037033820022001360234200241003602300240200a450d0003402002200a417f6a360248200241306a410020011b221d280200210902400240201d280208220a201d28020422002f018a014f0d00200021010c010b03400240200028020022010d00410021010c020b200941016a210920002f018801210a20012100200a20012f018a014f0d000b0b200a41016a21190240024020090d00200121000c010b200120194102746a41e4016a280200210002402009417f6a2209450d00034020002802e40121002009417f6a22090d000b0b410021190b201d2000360204201d4100360200201d2019360208200241c8046a2001200a4103746a418c016a410810742001200a410c6c6a220141046a28020021002001410c6a2802002201200241c8046a1076200241c8046a2000200110742002280248220a450d01200228023421010c000b0b20023502d004210c20023502c804211220024188036a10f101200241c0056a24002012200c422086840f0b200241d4046a410f360200200241c4006a410236020020024202370234200241a0a7c900360230200241043602cc04200241f0a8c9003602c8042002200241c8046a3602402002200241b8056a3602d004200241306a41b0a7c9001044000bbd0702087f027e23004180016b2202240002400240024020010d00200241003602082002420137030020024100360230200241d8006a41204101200241306a107d200241d8006a41086a22012802002103024020022802584101470d002003450d020c030b200228025c21042002200336020420022004360200200241d8006a41186a22034200370300200241d8006a41106a220442003703002001420037030020024200370358200241106a41a8f8c60041041081022001200241106a41086a220529000037030020022002290010370358200241106a41978bc500410e1081022003200529000037030020042002290010370300200241306a200241d8006a10a30420022d003021052003200241c9006a2900003703002004200241c1006a2900003703002001200241396a290000370300200220022900313703580240024020054101460d00200241106a41186a4200370300200241106a41106a4200370300200241186a4200370300200242003703100c010b200241106a41186a2003290300370300200241106a41106a2004290300370300200241106a41086a200241d8006a41086a290300370300200220022903583703100b2002200241106a41201074200241d8006a20022802002206200228020810b001200241306a41186a2205200241d8006a41186a2201290300370300200241306a41106a2207200241d8006a41106a2203290300370300200241306a41086a2208200241d8006a41086a22042903003703002002200229035837033020014200370300200342003703002004420037030020024200370358200241106a41a8f8c60041041081022004200241106a41086a220929000037030020022002290010370358200241106a41b08bc500410a1081022001200929000037030020032002290010370300200241106a200241d8006a4120109d0302402002280204450d002006102e0b2004200829030037030020032007290300370300200120052903003703002002200229033037035820024100360218200242013703104120102c2201450d022002422037023420022001360230200241306a200241d8006a41201074200241106a200228023022012002280238107402402002280234450d002001102e0b2002350218210a2002350210210b20024180016a2400200b200a422086840f0b200241e4006a410f360200200241c4006a410236020020024202370234200241a0a7c9003602302002410436025c20024188a9c9003602582002200241d8006a3602402002200241f8006a360260200241306a41b0a7c9001044000b1038000b1036000bbf5d05027f027e0c7f077e027f230041e0176b220224002002428080808080203702ac17200220013602e4162002200041d4e2cc0020011b22033602e0162002200241e0166a3602a81741002100200241003a00901102400240024002402001450d0020022001417f6a3602e4162002200341016a3602e016024020032d00000e03030200010b410221000c020b420321040c020b410121000b200241c0076a200241a8176a10ed0142032104024020022903a80822054203520d000c010b2002418f0b6a200241c0076a41e80010e9081a20024190116a200241b0086a41d80210e9081a200241286a200241880b6a41ef0010e9081a200521040b200241d0066a200241286a41ef0010e9081a200241880e6a20024190116a41d80210e9081a02400240024002400240024002400240024020044203510d00200220003a00800320024180036a410172200241d0066a41ef0010e9082101200241f0036a2004370300200241f8036a200241880e6a41d80210e90821030240024020022802a8172802040d0020024190116a200141ef0010e9081a200241c0076a200341d80210e9081a0c010b024020044202510d0020022d0088034102470d0020024190036a280200450d00200228028c03102e0b200241a0046a108b02420321040b20044203510d0020024180036a20024190116a41ef0010e9081a200241d0066a20024187036a41e80010e9081a200241286a200241c0076a41d80210e9081a200241c0076a200241d0066a41e80010e9081a200220043703a808200241b0086a200241286a41d80210e9081a2002200241c0076a3602901120024180036a20024190116a10900520022802880321060240200228028403450d00200228028003102e0b20024180036a200241c0076a41c80310e9081a20024190116a20024180036a108a0220022d009011210120022f009111210320022d0093112107200241880e6a20024190116a41047241840310e9081a024020014101460d00200241880b6a200241880e6a41046a41800310e9081a20024198146a200241d80b6a22081097040240024020022903a80b4202520d0020024190116a41206a2201420037030020024190116a41186a22034280808080c000370300200241013a00b811200242043703a0112002427f37039811200242003703901120024180036a41206a2207420037030020024180036a41186a22094280808080c000370300200241013a00a80320024204370390032002427f370388032002420037038003200241f0146a20024190116a20024180036a10d20720024190116a41286a220a200241f0146a41286a2903003703002001200241f0146a41206a2903003703002003200241f0146a41186a29030037030020024190116a41106a220b200241f0146a41106a29030037030020024190116a41086a220c200241f0146a41086a290300370300200220022903f014370390112007420037030020094280808080c000370300200241013a00a80320024204370390032002427f370388032002420037038003200241a0156a20024190116a20024180036a10d207200a200241a0156a41286a2903003703002001200241a0156a41206a2903003703002003200241a0156a41186a290300370300200b200241a0156a41106a290300370300200c200241a0156a41086a290300370300200220022903a015370390112007420037030020094280808080c000370300200241013a00a80320024204370390032002427f370388032002420037038003200241d0156a20024190116a20024180036a10d207200a200241d0156a41286a2903003703002001200241d0156a41206a2903003703002003200241d0156a41186a290300370300200b200241d0156a41106a290300370300200c200241d0156a41086a290300370300200220022903d015370390112007420037030020094280808080c000370300200241013a00a80320024204370390032002427f37038803200242003703800320024180166a20024190116a20024180036a10d207200a20024180166a41286a290300370300200120024180166a41206a290300370300200320024180166a41186a290300370300200b20024180166a41106a290300370300200c20024180166a41086a2903003703002002200229038016370390112007420037030020094280808080c000370300200241013a00a80320024204370390032002427f370388032002420037038003200241b0166a20024190116a20024180036a10d207200241a8176a41286a220d200241b0166a41286a290300370300200241a8176a41206a220e200241b0166a41206a290300370300200241a8176a41186a220f200241b0166a41186a290300370300200241a8176a41106a2210200241b0166a41106a290300370300200241a8176a41086a2211200241b0166a41086a290300370300200220022903b0163703a81720024180036a20022903981420022d00a014200610a005200c20024180036a410c6a290200370300200b20024180036a41146a290200370300200320024180036a411c6a290200370300200120024180036a41246a290200370300200a20024180036a412c6a290200370300200241c0116a200241b4036a28020036020020022002290284033703901120022d0080034101470d0120022d008303210720022f008103210920022802b81721030240200f2802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b0240200241bc176a2802002201450d002001410c6c450d002003102e0b2007411074210720022802c41721030240200241cc176a2802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b200920077221010240200241c8176a2802002200450d002000410c6c450d002003102e0b200241013a008003200220013b008103200220014110763a0083032008108b020c0a0b20024190116a41206a2200420037030020024190116a41186a22034280808080c000370300200241013a00b811200242043703a011427f21042002427f37039811200242003703901120024180036a41206a2207420037030020024180036a41186a22014280808080c000370300200241013a00a80320024204370390032002427f370388032002420037038003200241c0146a20024190116a20024180036a10d20720024190116a41286a2209200241c0146a41286a2903003703002000200241c0146a41206a2903003703002003200241c0146a41186a29030037030020024190116a41106a220a200241c0146a41106a29030037030020024190116a41086a220b200241c0146a41086a290300370300200220022903c014370390112007420037030020014280808080c000370300200241013a00a80320024204370390032002427f370388032002420037038003200241f0146a20024190116a20024180036a10d2072009200241f0146a41286a2903003703002000200241f0146a41206a2903003703002003200241f0146a41186a290300370300200a200241f0146a41106a290300370300200b200241f0146a41086a290300370300200220022903f014370390112007420037030020014280808080c000370300200241013a00a80320024204370390032002427f370388032002420037038003200241a0156a20024190116a20024180036a10d2072009200241a0156a41286a2903003703002000200241a0156a41206a2903003703002003200241a0156a41186a290300370300200a200241a0156a41106a290300370300200b200241a0156a41086a290300370300200220022903a015370390112001420037030020024180036a41106a2203420037030020024180036a41086a220942003703002002420037038003200241880e6a41d9fcc60041061081022009200241880e6a41086a2200290000370300200220022900880e37038003200241880e6a4180f4cb00410610810220012000290000370300200320022900880e370300200241206a20024180036a4120108e022002280224410020022802201bad2105024020022903a80b4201520d0020022903b00b22044200510d04200241b80b6a290300221220047c4200200520127d221220122005561b22127c20122004827d21040b2007420037030020014280808080c000370300200220022800880e3602a81720022002418b0e6a2800003600ab17200241ac036a20022800ab17360000200241013a00a8032002420437039003200242003703800320024200200420057d220520052004561b37038803200220022802a8173600a903200241d0156a20024190116a20024180036a10d207200241880e6a41286a200241d0156a41286a290300370300200241880e6a41206a200241d0156a41206a290300370300200241880e6a41186a200241d0156a41186a290300370300200241880e6a41106a200241d0156a41106a2903003703002000200241d0156a41086a290300370300200220022903d0153703880e200241a8176a200241880b6a10c80220024180036a20022802a817220020022802b01710c902200241c8036a28020041002002290380034201511b2101024020022802ac17450d002000102e0b0240024020022802d00b22002001490d00410c102c2203450d0c410421074104102c2209450d0c2002420437028403200220093602800320024180036a200241880b6a41201074200220003602a81720024180036a200241a8176a41041074200341086a2002280288033602002003200229038003370200410021090240200120004f0d00410c102c2207450d0d4104102c2201450d0d2002420437028403200220013602800320024180036a200241880b6a4120107420022000417f6a3602a81720024180036a200241a8176a41041074200741086a2002280288033602002007200229038003370200410121090b20024190116a41206a42818080801037030020024190116a41186a2201200936020020024190116a41146a2009360200200220022800e0163602b8142002200241e3166a2800003600bb1420024190116a412c6a20022800bb14360000200241013a00b811200220033602ac11200220073602a0112002427f370398112002420037039011200220022802b8143600b91120024180166a200241880e6a20024190116a10d207200241a8176a41286a20024180166a41286a290300370300200241a8176a41206a20024180166a41206a290300370300200241a8176a41186a20024180166a41186a290300370300200241a8176a41106a20024180166a41106a290300370300200241a8176a41086a20024180166a41086a29030037030020022002290380163703a817024020022d00a01422004102470d0020024198116a2002418c036a29020037030020024190116a41106a20024180036a41146a29020037030020012002419c036a290200370300200241b0116a200241a4036a29020037030020024190116a41286a20024180036a412c6a290200370300200241c0116a200241b4036a28020036020020022002290284033703901141801221010c0a0b20024180036a2002290398142000200610a00520024190116a41086a20024180036a410c6a29020037030020024190116a41106a20024180036a41146a290200370300200120024180036a411c6a29020037030020024190116a41206a20024180036a41246a29020037030020024190116a41286a20024180036a412c6a290200370300200241c0116a200241b4036a28020036020020022002290284033703901120022d0080034101470d0120022f00810320022d0083034110747221010c090b200220022800e0163602b8142002200241e3166a2800003600bb142002410a3a00830320024180063b008103200241013a00800320022802980e21030240200241a00e6a2802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b02402002419c0e6a2802002201450d002001410c6c450d002003102e0b20022802a40e21030240200241ac0e6a2802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b200241a80e6a2802002201450d092001410c6c450d092003102e2008108b020c0a0b200241880e6a41286a2201200241bc116a290200370300200241880e6a41206a220320024190116a41246a290200370300200241880e6a41186a220720024190116a411c6a290200370300200241880e6a41106a2209200241a4116a290200370300200241880e6a41086a220a20024190116a410c6a29020037030020022002290294113703880e200241b0166a200241a8176a200241880e6a10d2072001200241b0166a41286a2903003703002003200241b0166a41206a2903003703002007200241b0166a41186a2903003703002009200241b0166a41106a290300370300200a200241b0166a41086a290300370300200220022903b0163703880e20024180036a2006200229039814221320022903c00b2214200241880b6a41c0006a290300221520022d00a114410047200010e704420021054200210402402002290380034201520d00427f427f20024180036a41106a2903002204200241a0036a2903007c200229038803220520024180036a41186a2903007c22122005542201ad7c22052001200520045420052004511b22011b2204200241b0036a2903007c427f201220011b220520024180036a41286a2903007c22122005542201ad7c22052001200520045420052004511b22011b2104427f201220011b21050b427f200420024180036a41c0006a29030022167c200520022903b80322177c22182005542201ad7c22122001201220045420122004511b22011b2112427f201820011b2118024002400240024020052017842004201684844200520d00200220183703a817200242003703b817200220123703b0170c010b20024190176a200241880b6a20182012410141112014201584501b10fe062002280290174101460d01200241c0176a2201200229039817370300200241c8176a200241a0176a290300370300200220183703a817200242013703b817200220123703b017200220013602800320024180036a10cc020b20024180036a10a9032002290388032104200241013a00b811200220124200418080f00120064101200641014b1b6ead220520042013420120134201561b80220420042005561b2204420010e808200241106a201842002004420010e80820024190116a41206a2200420037030020024190116a41186a22034280808080c0003703002002200241ab146a2800003600bb14200220022800a8143602b81420024190116a412c6a220720022800bb14360000200242043703a011200220022802b8143600b91120022903082105200241106a41086a2903002104200229030021122002427f370398112002427f20022903102005420052200420127c22052004547222011b427f427f200520011b501b37039011200241e0166a200241880e6a20024190116a10d207200241880e6a41286a200241e0166a41286a290300370300200241880e6a41206a200241e0166a41206a290300370300200241880e6a41186a2201200241e0166a41186a290300370300200241880e6a41106a200241e0166a41106a290300370300200241880e6a41086a200241e0166a41086a290300370300200220022903e0163703880e20024180036a200241880b6a20081080032002200241b1036a2800003602b8142002200241b4036a2800003600bb1420022d0080034101460d01200241b0036a22012d0000210920024180036a41286a220a280200210b20024180036a41246a280200210c20024180036a41206a2206280200210f2002419c036a280200210d20024180036a41186a220e280200211020024180036a41106a2211290300210420024180036a41086a2219290300210520024190116a41246a20024180036a412c6a2802003602002000200b3602002003200f360200200241a4116a200d360200200720022800bb14360000200220093a00b8112002200c3602ac11200220103602a01120022004370398112002200537039011200220022802b8143600b911200241a8176a200241880e6a20024190116a10d207201920022903a8173703002011200241a8176a41086a290300370300200e200241a8176a41106a2903003703002006200241a8176a41186a290300370300200a200241a8176a41206a2903003703002001200241a8176a41286a290300370300200241003a0080032008108b020c0b0b200220022800a8143602b8142002200241ab146a2800003600bb14200241003a00830320024180023b008103200241013a00800320022802980e21030240200241a00e6a2802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b02402002419c0e6a2802002201450d002001410c6c450d002003102e0b20022802a40e21030240200241ac0e6a2802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b200241a80e6a2802002201450d092001410c6c450d092003102e2008108b020c0a0b20022d008303210020022f0081032103200241013a0080032002200320004110747222003b008103200220004110763a00830320022802980e2103024020012802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b02402002419c0e6a2802002201450d002001410c6c450d002003102e0b20022802a40e21030240200241ac0e6a2802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b200241a80e6a2802002201450d082001410c6c450d082003102e2008108b020c090b200241880e6a41286a20024190116a412c6a290200370300200241880e6a41206a220620024190116a41246a290200370300200241880e6a41186a221920024190116a411c6a290200370300200241880e6a41106a20024190116a41146a290200370300200241880e6a41086a221a20024190116a410c6a29020037030020022002290294113703880e200241e0166a200241a8176a200241880e6a10d207200a200241e0166a41286a2903003703002001200241e0166a41206a2903003703002003200241e0166a41186a290300370300200b200241e0166a41106a290300370300200c200241e0166a41086a290300370300200220022903e016370390112007420037030020094280808080c000370300200241013a00a80320024204370390032002427f370388032002420037038003200241a8176a20024190116a20024180036a10d207200a200d2903003703002001200e2903003703002003200f290300370300200b2010290300370300200c2011290300370300200220022903a817370390112007420037030020094280808080c000370300200241013a00a80320024204370390032002427f370388032002420037038003200241880e6a20024190116a20024180036a10d207200241c0146a410c6a201a290300370200200220022903880e3702c414200241880e6a41146a28020021032019280200210120062802002107200241880e6a41246a280200210920022802980e210a20022802a40e210b20022903b00e210420024190176a41106a200241c0146a41106a28020036020020024190176a41086a200241c0146a41086a290200370300200220022902c01437039017200241a8146a41086a20024190176a410c6a29020037030020022002290294173703a814024002400240024002400240024020022802d80b417e6a0e1a0100000000000000020500000000000000030000000000000004000b200241003a00830320024181023b0081030c0a0b0240200241e00b6a2802004102460d002002410a3a008303200241003b0081030c0a0b0240200041ff01714102490d002002410a3a008303200241003b0081030c0a0b0240200241f80b6a200241e40b6a10f206220c41ff01714102470d0020024180036a41086a427f370300200241b4036a2200411036020020024180036a41206a420037030020024180036a41186a4280808080c0003703002002427f37038003200241d8b2c4003602b003200241013a00a8032002420437039003200241a8176a41186a200241f80d6a2903002205370300200241a8176a41106a200241f00d6a2903002212370300200241a8176a41086a200241e80d6a29030022183703002002200241e00d6a29030022133703a817200220022903f80b22163703c81720024190116a41106a201837030020024190116a41186a201237030020024190116a41206a2005370300200241b8116a220c20163703002002200241b0036a360290112002201337039811411c102c2206450d0f2002421c37028416200220063602801620022802b00321062000280200220020024180166a107620024180166a20062000107420024180166a20024190116a41086a412010742002200c2903003703b01620024180166a200241b0166a410810740240024020022802a403220c20022802a0032200470d00200041016a220c2000490d0b20004101742206200c2006200c4b1b220c4104200c41044b1bad420c7e2205422088a745410274210c2005a721060240024020000d0020024100360290110c010b20024198116a41043602002002200228029c033602901120022000410c6c360294110b200241b0166a2006200c20024190116a107d200241b8166a280200210020022802b0164101460d01200220022802b41636029c0320022000410c6e3602a00320022802a403210c0b200228029c03200c410c6c6a2200200229038016370200200041086a20024180166a41086a28020036020020024190116a41086a220020024198036a220c290300370300200220022802a40341016a3602a40320024190116a41106a2206200241a0036a220f2903003703002002200229039003370390112002200241a9036a220d2900003703b0162002200d41076a2900003700b716200229038003210520024180036a41106a4280ce1837030020024180036a41086a2005370300200241a8036a2006290300370300200f2000290300370300200c20022903901137030041002100200241b0036a41003a0000200241b4036a20022800b316360000200241b1036a20022802b016360000200241003a0080030c0c0b2000450d090c0f0b41012100200241013a0080032002200c3b0081032002200c4110763a0083030c0a0b0240200241e00b6a2802004102460d002002410a3a008303200241003b0081030c090b0240200041ff01714102490d002002410a3a008303200241003b0081030c090b0240200241f80b6a200241e40b6a10ff06220c41ff01714102470d0020024190116a41086a427f370300200241c4116a2200411336020020024190116a41206a420037030020024190116a41186a4280808080c0003703002002427f37039011200241ccdcc8003602c011200241013a00b811200242043703a011200241a8176a41106a200241e00d6a2903002205370300200241a8176a41186a200241e80d6a2903002212370300200241a8176a41206a200241f00d6a29030022183703002002200241d80d6a29030022133703b0172002200241880c6a29030022163703d017200220022903f80b22173703a81720024180036a41106a220c201337030020024180036a41186a200537030020024180036a41206a2012370300200241a8036a201837030020024180036a41306a22062016370300200220024190116a41306a3602800320022017370388034127102c220f450d0e20024227370284162002200f3602801620022802c011210f2000280200220020024180166a107620024180166a200f2000107420024180166a200c4120107420022002290388033703b01620024180166a200241b0166a41081074200220062903003703b01620024180166a200241b0166a410810740240024020022802b411220c20022802b0112200470d00200041016a220c2000490d0a20004101742206200c2006200c4b1b220c4104200c41044b1bad420c7e2205422088a745410274210c2005a721060240024020000d0020024100360280030c010b20024188036a4104360200200220022802ac113602800320022000410c6c360284030b200241b0166a2006200c20024180036a107d200241b8166a280200210020022802b0164101460d01200220022802b4163602ac1120022000410c6e3602b01120022802b411210c0b20022802ac11200c410c6c6a2200200229038016370200200041086a20024180166a41086a280200360200200241b0166a41086a220020024190116a41186a290300370300200220022802b41141016a3602b411200241b0166a41106a220c20024190116a41206a290300370300200220022903a0113703b0162002200241b9116a2206290000370380162002200641076a29000037008716200229039011210520024180036a41106a4280ce1837030020024180036a41086a2005370300200241a8036a200c29030037030020024180036a41206a200029030037030020024180036a41186a20022903b01637030041002100200241b0036a41003a0000200241b4036a200228008316360000200241b1036a200228028016360000200241003a0080030c0b0b20000d0e0c080b41012100200241013a0080032002200c3b0081032002200c4110763a0083030c090b20024180036a200241e00b6a10df020c020b0240200041ff01714102490d002002410a3a008303200241003b0081030c070b20024190116a200241e00b6a10b806024020022d009011220c4106460d00200241800e3b00810341012100200241013a008003200220022d0092114100200c4103461b3a0083030c080b200241e80b6a290300210520022903e00b2112200241d00d6a28020021004118102c220c450d0b200242183702ac172002200c3602a8174110200241a8176a1076200241a8176a41e6b3c700411010742002200036028003200241a8176a20024180036a4104107441002100200241003602800320024190116a4130410420024180036a107d20024190116a41086a280200210602402002280290114101470d0020060d0c0c060b200228029411220c20022903a817370200200c41086a200241a8176a41086a28020036020020024180036a41306a41003a0000200241ac036a4101360200200241a8036a2006410c6e360200200241a4036a200c360200200241a0036a410036020020024198036a420437030020024180036a41106a42d80437030020024180036a41086a427f2012427f2005501b220542e5cc99b3e6cc99b3667c221220122005541b37030020022002280090113602b016200220024193116a2800003600b316200241b4036a20022800b316360000200241b1036a20022802b016360000200241003a0080030c070b20024180036a200241dc0b6a109d070b20022d00800321000c050b200241013a0080032002200320074110747222013b008103200220014110763a0083030c070b200241940e6a410f36020020024194036a41023602002002420237028403200241a0a7c900360280032002410436028c0e2002419ca9c9003602880e2002200241880e6a360290032002200241d8176a3602900e20024180036a41b0a7c9001044000b41d0e7cc00411941ece7cc001039000b1038000b41012100200241013a0080030b200241880e6a41086a220c20024180036a410c6a290200370300200241880e6a41106a20024180036a41146a290200370300200241880e6a41186a220620024180036a411c6a290200370300200241880e6a41206a220f20024180036a41246a290200370300200241880e6a41286a20024180036a412c6a290200370300200241880e6a41306a200241b4036a28020036020020022002290284033703880e0240200041ff01714101460d00200241e0166a41286a2200200241880e6a412c6a290200370300200241e0166a41206a220d200241880e6a41246a220e290200370300200241e0166a41186a2210200241880e6a411c6a290200370300200241e0166a41106a2211200241880e6a41146a2219290200370300200241e0166a41086a221a200241880e6a410c6a2902003703002002200229028c0e3703e016200c200241a8146a41086a290300370300200e2009360200200f20073602002006200136020020192003360200200220022903a8143703880e200220043703b00e2002200b3602a40e2002200a3602980e20024190116a41286a200029030037030020024190116a41206a200d29030037030020024190116a41186a201029030037030020024190116a41106a201129030037030020024190116a41086a201a290300370300200220022903e01637039011200241a8176a200241880e6a20024190116a10d20720024180036a41086a20022903a81737030020024180036a41106a200241a8176a41086a29030037030020024180036a41186a200241a8176a41106a29030037030020024180036a41206a200241a8176a41186a29030037030020024180036a41286a200241a8176a41206a29030037030020024180036a41306a200241a8176a41286a290300370300200241003a0080032008108b020c030b20022d008303210020022f008103210c200241013a0080032002200c20004110747222003b008103200220004110763a00830302402001450d002001410c6c2100200a210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b02402003450d002003410c6c450d00200a102e0b02402009450d002009410c6c2100200b210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b2007450d012007410c6c450d01200b102e0c010b200241013a008003200220013b008103200220014110763a00830320022802b81721030240200241c0176a2802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b0240200241bc176a2802002201450d002001410c6c450d002003102e0b20022802c41721030240200241cc176a2802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b200241c8176a2802002201450d002001410c6c450d002003102e2008108b020c010b2008108b020b4101102c2201450d00200242013702c407200220013602c0070240024020022d0080034101470d00200241013a009011200241c0076a20024190116a4101107420024180036a410172200241c0076a108e050c010b200241003a009011200241c0076a20024190116a41011074200220024180036a41086a29030037039011200241c0076a20024190116a4108107420024198036a2802002101200241a0036a2802002200200241c0076a107602402000450d0020012000410c6c6a2107034020012802002100200141086a2802002203200241c0076a1076200241c0076a2000200310742001410c6a22012007470d000b0b200241a4036a2802002101200241ac036a2802002200200241c0076a107602402000450d0020012000410c6c6a2107034020012802002100200141086a2802002203200241c0076a1076200241c0076a2000200310742001410c6a22012007470d000b0b200220024190036a29030037039011200241c0076a20024190116a410810742002200241b0036a2d00003a009011200241c0076a20024190116a410110740b20023502c807210420023502c0072105024020022d0080030d000240200241a0036a2802002200450d0020024198036a28020021012000410c6c210003400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b02402002419c036a2802002201450d002001410c6c450d00200228029803102e0b0240200241ac036a2802002200450d00200241a4036a28020021012000410c6c210003400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b200241a8036a2802002201450d002001410c6c450d0020022802a403102e0b200241e0176a240020044220862005840f0b1036000bb30304017f027e067f027e230041206b22032400200229030021042001290300210520022802102106200141106a200241186a2207280200220810e0082001280210200141186a2209280200220a410c6c6a20062008410c6c10e9081a200741003602002009200a20086a2208360200200341086a200836020020032001290210370300200228021c21072001411c6a200241246a2209280200220810e008200128021c200141246a220a280200220b410c6c6a20072008410c6c10e9081a20094100360200200a200b20086a2208360200200341106a41086a20083602002003200129021c3703102002290308210c2001290308210d0240024020012d0028450d004101210120022d00280d010b410021010b200020032903003702102000200329031037021c200020013a0028200041186a200341086a280200360200200041246a200341106a41086a2802003602002000200c200d200d200c561b3703082000427f200520047c220c200c2005541b3703000240200241146a2802002201450d002001410c6c450d002006102e0b0240200241206a2802002201450d002001410c6c450d002007102e0b200341206a24000bb30b01087f230041f0026b220224002002428080808080203702dc02200220013602cc022002200041d4e2cc0020011b3602c8022002200241c8026a3602d802200241c8016a200241d8026a109902200241d4016a280200210320022802d001210420022802cc01210520022802c8012106200241e8006a200241d8016a41e00010e9081a024002402005450d00200241086a200241e8006a41e00010e9081a0240024020022802d8022802040d00200241e8006a200241086a41e00010e9081a0c010b02402003450d00200341246c21002005210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b02402004450d00200441246c450d002005102e0b410021050b2005450d00200241d4016a2003360200200241c8016a41086a2004360200200220053602cc01200220063602c801200241c8016a41106a200241e8006a41e00010e9082107200241b8026a200241c8016a41047210c7014102200110eb042002410036026841fcc6cb004110200241e8006a410410b201200241e8006a41186a22014200370300200241e8006a41106a22004200370300200241e8006a41086a2208420037030020024200370368200241086a41d9fcc60041061081022008200241086a41086a220929000037030020022002290008370368200241086a4180f4cb004106108102200120092900003703002000200229000837030020022006360208200241e8006a4120200241086a410410b201200241b8026a10ee04200710f0042006417f6a200710a40720014200370300200042003703002008420037030020024200370368200241086a41d9fcc60041061081022008200929000037030020022002290008370368200241086a41d4f2cb00410b1081022001200929000037030020002002290008370300200241e8006a412010ff01200241086a200241c8016a109a042001200241086a41186a2903003703002000200241086a41106a2903003703002008200929030037030020022002290308370368200241c8026a2006108c0220022802d002210020022802c80221014120102c2208450d01200242203702dc02200220083602d802200241d8026a200241e8006a412010742001200020022802d802220820022802e00210b201024020022802dc02450d002008102e0b024020022802cc02450d002001102e0b200610de0620022802b8022106024020022802c0022201450d00200141246c21002006210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b024020022802bc022201450d00200141246c450d002006102e0b02402003450d00200341246c21002005210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b02402004450d00200441246c450d002005102e0b200241f0026a240042010f0b200241146a410f360200200241dc016a4102360200200242023702cc01200241a0a7c9003602c8012002410436020c200241b8a9c9003602082002200241086a3602d8012002200241e8026a360210200241c8016a41b0a7c9001044000b1036000bab0102017f027e230041306b220224000240024020010d004104102c2201450d0120024204370204200220013602004100200210762002350208210320023502002104200241306a240020042003422086840f0b200241246a410f360200200241146a410236020020024202370204200241a0a7c9003602002002410436021c200241d0a9c9003602182002200241186a3602102002200241286a360220200241b0a7c9001044000b1036000be10102017f027e230041306b220224000240024020010d004104102c2201450d012002420437020420022001360200410020021076200241003602182002200241186a41041074200241003602182002200241186a41041074200241003602182002200241186a410410742002350208210320023502002104200241306a240020042003422086840f0b200241246a410f360200200241146a410236020020024202370204200241a0a7c9003602002002410436021c200241e4a9c9003602182002200241186a3602102002200241286a360220200241b0a7c9001044000b1036000bab0102017f027e230041306b220224000240024020010d004104102c2201450d0120024204370204200220013602004100200210762002350208210320023502002104200241306a240020042003422086840f0b200241246a410f360200200241146a410236020020024202370204200241a0a7c9003602002002410436021c200241fca9c9003602182002200241186a3602102002200241286a360220200241b0a7c9001044000b1036000bcb0102017f027e230041306b2202240002400240200041d4e2cc0020011b200110fc0541ff01714103460d004101102c2201450d012002420137020420022001360200200241003a00182002200241186a410110742002350208210320023502002104200241306a240020042003422086840f0b200241246a410f360200200241146a410236020020024202370204200241a0a7c9003602002002410436021c20024198aac9003602182002200241186a3602102002200241286a360220200241b0a7c9001044000b1036000bb210040d7f017e017f017e230041f0006b22022400200242808080808020370254200220013602642002200041d4e2cc0020011b22003602602002200241e0006a3602500240024002400240024002400240024020014104490d0020022001417c6a3602642002200041046a360260200241286a200241d0006a10e80120022802282203450d00200241306a2802002104200228022c2105200241206a200241d0006a10ad010240024020022802200d004104210620022802242207200228025022012802044104762200200020074b1b22084104742200417f4c0d0902402008450d002000102c2206450d050b2002200228025441016a22003602540240024002400240200020022802584b0d00024020070d00410021070c030b2007417f6a21094100210a4100210b024002400340200128020422004104490d022001280200220c280000210d20012000417c6a3602042001200c41046a360200200241186a200241d0006a10ad0120022802180d022001280204220c200228021c2200490d022000417f4c0d100240024020000d004101210e0c010b20001032220e450d0c2001280204210c0b200c2000490d01200e2001280200200010e908210c2001280204220e2000490d0c2001200e20006b3602042001200128020020006a360200200c450d02024002400240200b2008460d002008210e200b21080c010b200841016a22012008490d122008410174220e2001200e20014b1b22014104200141044b1b220141ffffffff0071200146410274210e200141047421010240024020080d00200241003602280c010b20022006360228200241043602302002200841047436022c0b200241c0006a2001200e200241286a107d2002280248210120022802404101460d01200228024421062001410476210e0b200620084104746a2201200c3602042001200d360200200141086a2000ad220f422086200f843702002009200b460d05200b41016a210b200a41106a210a20022802502101200e21080c010b0b20010d0a0c0f0b200e102e0b200b450d00200641086a2101034002402001280200450d002001417c6a280200102e0b200141106a2101200a41706a220a0d000b0b200841ffffffff00710d020c030b20022802542100200e21080b20022000417f6a3602542006450d01200228025021014100210b200241003a0040024020012802042200450d002001280200220c2d0000210d20012000417f6a3602042001200c41016a360200024002400240200d0e020100030b200241106a200241d0006a10ad0120022802100d022001280204220c20022802142200490d022000417f4c0d0d0240024020000d004101210b0c010b20001032220b450d092001280204210c0b200c2000490d01200b2001280200200010e908210c2001280204220d2000490d0a2001200d20006b3602042001200128020020006a360200200c450d022000ad220f422086200f84210f0b200fa72110200241086a200241d0006a10ad01024020022802080d002001280204220c200228020c2200490d002000417f4c0d0d0240024020000d004101210d0c010b20001032220d450d092001280204210c0b0240200c2000490d00200d2001280200200010e908210c2001280204220e2000490d0c2001200e20006b3602042001200128020020006a360200200c450d012000ad220f422086200f84a7210e0240200128020422004104490d0020012000417c6a220a36020420012001280200220941046a360200200a41034b0d070b200e450d010b200d102e0b200b450d012010450d010b200b102e0b02402007450d00200741047421004100210103400240200620016a220b41086a280200450d00200b41046a280200102e0b2000200141106a2201470d000b0b200841ffffffff0071450d010b2006102e0b02402004450d002004410c6c21002003210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b2005450d012005410c6c450d012003102e0c010b2001200041786a3602042001200941086a3602002003450d002002280250280204450d0102402004450d002004410c6c21004100210103400240200320016a220d41046a280200450d00200d280200102e0b20002001410c6a2201470d000b0b02402005450d002005410c6c450d002003102e0b02402007450d0020074104742100200641086a2101034002402001280200450d002001417c6a280200102e0b200141106a2101200041706a22000d000b0b0240200841ffffffff0071450d002006102e0b0240200b450d002010450d00200b102e0b200e450d00200c102e0b200241cc006a410f3602002002413c6a41023602002002420237022c200241a0a7c90036022820024104360244200241bcaac9003602402002200241c0006a3602382002200241e8006a360248200241286a41b0a7c9001044000b02402004450d002004410c6c21002003210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b02402005450d002005410c6c450d002003102e0b02402007450d0020074104742100200641086a2101034002402001280200450d002001417c6a280200102e0b200141106a2101200041706a22000d000b0b0240200841ffffffff0071450d002006102e0b0240200b450d002010450d00200b102e0b0240200e450d00200c102e0b4101102c22010d040b1036000b2000200e41b8b2c0001056000b2000200d41b8b2c0001056000b2000200e41b8b2c0001056000b2002420137022c20022001360228200241003a0040200241286a200241c0006a410110742002350230210f20023502282111200241f0006a24002011200f422086840f0b1038000bb70102017f027e230041306b220224000240024020010d004104102c2201450d012002420437020420022001360200200241003602182002200241186a410410742002350208210320023502002104200241306a240020042003422086840f0b200241246a410f360200200241146a410236020020024202370204200241a0a7c9003602002002410436021c200241dcaac9003602182002200241186a3602102002200241286a360220200241b0a7c9001044000b1036000bba0102017f027e230041306b220224000240024020014104470d004101102c2201450d012002420137020420022001360200200241003a00182002200241186a410110742002350208210320023502002104200241306a240020042003422086840f0b200241246a410f360200200241146a410236020020024202370204200241a0a7c9003602002002410436021c200241fcaac9003602182002200241186a3602102002200241286a360220200241b0a7c9001044000b1036000b950102017f017e230041306b220224000240200041d4e2cc0020011b200110fc0541ff01714103470d00200241246a410f360200200241146a410236020020024202370204200241a0a7c9003602002002410436021c20024190abc9003602182002200241186a3602102002200241286a360220200241b0a7c9001044000b20024100360200200210ce042103200241306a240020030b910102017f017e230041306b220224000240024020014108470d002001417c714104470d010b200241246a410f360200200241146a410236020020024202370204200241a0a7c9003602002002410436021c200241a8abc9003602182002200241186a3602102002200241286a360220200241b0a7c9001044000b20024100360200200210ce042103200241306a240020030be30303017f027e017f230041e0026b220224000240024020014104470d0020024100360284024101102c2201450d01200242013702c402200220013602c002200241003a00d702200241c0026a200241d7026a4101107420023502c002210320023502c802210402402002280284022201450d000240200228028c022205450d002005410c6c210503400240200141046a280200450d002001280200102e0b2001410c6a2101200541746a22050d000b0b02402002280288022201450d002001410c6c450d00200228028402102e0b024020024198026a2802002201450d002001410474210520024190026a28020041086a2101034002402001280200450d002001417c6a280200102e0b200141106a2101200541706a22050d000b0b024020024194026a28020041ffffffff0071450d00200228029002102e0b02402002419c026a2802002201450d00200241a0026a280200450d002001102e0b200241ac026a280200450d00200241a8026a280200102e0b200241e0026a240020044220862003840f0b200241cc026a410f360200200241146a410236020020024202370204200241a0a7c900360200200241043602c402200241ccabc9003602c0022002200241c0026a3602102002200241d8026a3602c802200241b0a7c9001044000b1036000bab0102017f027e230041306b220224000240024020010d004104102c2201450d0120024204370204200220013602004100200210762002350208210320023502002104200241306a240020042003422086840f0b200241246a410f360200200241146a410236020020024202370204200241a0a7c9003602002002410436021c200241f4abc9003602182002200241186a3602102002200241286a360220200241b0a7c9001044000b1036000bae0102017f027e230041306b220224000240024020014104470d004104102c2201450d0120024204370204200220013602004100200210762002350208210320023502002104200241306a240020042003422086840f0b200241246a410f360200200241146a410236020020024202370204200241a0a7c9003602002002410436021c2002418cacc9003602182002200241186a3602102002200241286a360220200241b0a7c9001044000b1036000bae0102017f027e230041306b220224000240024020014104470d004104102c2201450d0120024204370204200220013602004100200210762002350208210320023502002104200241306a240020042003422086840f0b200241246a410f360200200241146a410236020020024202370204200241a0a7c9003602002002410436021c200241a0acc9003602182002200241186a3602102002200241286a360220200241b0a7c9001044000b1036000bd30704067f017e017f037e230041f0006b22022400024002400240024020010d002002411436021c200241bcdac800360218200241206a41bcdac800411410ed0202400240024020022802202201450d00200228022421032002200241286a280200220436023c200220013602380240024002402004450d0020012d0000210520022004417f6a36023c2002200141016a3602382002200241386a10ab0102402002280200450d00200241003602500c010b200241d0006a200241386a200228020410990120022802502206450d004101210720022902542108200541ff01714101460d012008a72204450d00200441286c450d002006102e0b4100210720024100360210200242013703082002410a3602442002200241186a3602402002200241086a36024c41012104200241e4006a410136020020024201370254200241909dc5003602502002200241c0006a360260200241cc006a419cebc000200241d0006a103d1a2002280208200228021010ef020240200228020c450d002002280208102e0b0c010b2002200636022c200220083702302008422088a721052008a72109410021040b02402003450d002001102e0b2004450d010b200242003702304108210641002105410021090c010b20070d0020062802082205ad42287e2208422088a70d022008a72203417f4c0d02024020030d0041082106410021090c010b200628020021012003102c2206450d03200341286e210920034128490d00200621042009210703402003450d012007450d05200141086a2903002108200141106a290300210a2001290320210b2001290300210c200441186a200141186a290300370300200441106a200a370300200441086a20083703002004200c370300200441206a200b370300200441286a2104200341586a2103200141286a21012007417f6a22070d000b0b200541286c4104722201417f4c0d012001102c2204450d022002410036025820022001360254200220043602502005200241d0006a10760240200541286c2201450d00200620016a2104200621010340200241d0006a2001412010742002200141206a290300370308200241d0006a200241086a41081074200141286a22012004470d000b0b200235025821082002350250210a02402009450d00200941286c450d002006102e0b200241f0006a24002008422086200a840f0b200241146a410f360200200241e4006a410236020020024202370254200241a0a7c9003602502002410436020c200241c8acc9003602082002200241086a3602602002200241e8006a360210200241d0006a41b0a7c9001044000b1038000b1036000b200920094188decc00103c000bb80804017f027e027f017e230041f0076b220224002002428080808080203702cc07200220013602dc072002200041d4e2cc0020011b3602d8072002200241d8076a3602c80720024180046a200241c8076a10cb06024020022903880422034202510d00200229038004210420024180026a20024190046a41f00110e9081a200241086a200241c8076a10ad0120022802080d0020022802dc072200200228020c2201490d0002400240024002402001417f4c0d000240024020010d00410121050c010b200110322205450d0420022802dc0721000b0240024020002001490d00200520022802d807200110e908210020022802dc07220520014f0d012001200541b8b2c0001056000b2005102e0c050b2002200520016b22053602dc07200220022802d80720016a3602d807200241106a20024180026a41f00110e9081a2005450d01420221032001450d022000102e0c020b1038000b20024180046a200241106a41f00110e9081a0b20034202510d01200241106a20024180046a41f00110e9081a20024180026a200241106a41f00110e9081a200220013602dc07200220003602d80720024180046a200241d8076a10f7010240024020022802840422050d00410021050c010b200241d0076a20024190046a28020036020020022002290388043703c80720022802800421060b02402001450d002000102e0b20024180046a41086a2200200241c8076a41086a2201280200360200200220022903c80737038004024002402005450d00200241f0036a41086a20002802002200360200200220022903800422073703f003200241a8056a2005360200200241a4056a2006360200200241a0056a4102360200200241ac056a2007370200200241b4056a2000360200200241c0056a2003370300200241b8056a20043703002002410a36029805200242023703e804200241c8056a20024180026a41f00110e9081a200241c0076a2001290300370300200241b8076a20022903c807370300200220024180046a3602c807200241d8076a200241c8076a1090052001200241d8076a41086a280200360200200220022903d8073703c807200241c8076a10e8061a024020022903e8044202510d0020022d00800441ff01714102470d00200228028804450d00200228028404102e0b20024198056a108b02410121010c010b410021010b4101102c2200450d00200242013702840420022000360280040240024020010d00200241003a00800220024180046a20024180026a410110740c010b200241013a00800220024180046a20024180026a410110740b20023502880421032002350280042104200241f0076a240020042003422086840f0b1036000b2002411c6a410f36020020024194026a41023602002002420237028402200241a0a7c9003602800220024104360214200241e4acc9003602102002200241106a360290022002200241e8076a36021820024180026a41b0a7c9001044000b902508047f017e037f017e027f027e0f7f037e230041d0056b22022400024020014108490d00200241003a008004200041d4e2cc0020011b41086a2103200141786a2104410021010340200241003a008801024020042001470d00200141ff0171450d02200241003a0080040c020b200241e0036a20016a200320016a2d00003a00002002200141016a22003a0080042000210120004120470d000b20024188016a41186a2201200241e0036a41186a29030037030020024188016a41106a2203200241e0036a41106a29030037030020024188016a41086a2205200241e0036a41086a290300370300200220022903e00337038801200041ff01714120490d00200241286a41086a2005290300370300200241286a41106a2003290300370300200241286a41186a2001290300370300200220022903880122063703482002200637032820042000470d00200241e0036a41186a2205200241286a41186a22072903002206370300200241e0036a41106a2208200241286a41106a2209290300220a3703004108210b200241e0036a41086a2204200241286a41086a220c290300220d37030020022002290328220e3703e003200241086a41186a2006370300200241086a41106a200a370300200241086a41086a200d3703002002200e370308200241e8006a41186a2006370300200241e8006a41106a200a370300200241e8006a41086a200d3703002002200e3703682007420037030020094200370300200c420037030020024200370328200241e0036a41a081ca004107108102200c2004290000370300200220022900e003370328200241e0036a41e4d1c100410c10810220072004290000370300200920022900e0033703002002200241286a4120108e022002280204210f200228020021102007420037030020094200370300200c420037030020024200370328200241e0036a41a081ca004107108102200c2004290000370300200220022900e003370328200241e0036a41f09dc500410a10810220072004290000370300200920022900e003370300200241e0036a200241286a10880320022802e0032201410120011b211120022902e403420020011b2206a72112024002400240024002400240024002402006422088a72201450d002011200141057422136a2114200241bc056a2115200241e0036a41206a2100201121010340200241b8036a41186a2203200141186a2216290000370300200241b8036a41106a2217200141106a2218290000370300200241b8036a41086a2219200141086a221a290000370300200220012900003703b803200241c8006a41086a221b201a290000370300200241c8006a41106a221a2018290000370300200241c8006a41186a2218201629000037030020022001290000370348200520032903003703002008201729030037030020042019290300370300200220022903b8033703e00320024198056a200241e0036a10bf01200720182903003703002009201a290300370300200c201b290300370300200220022903483703280240024020022802b80522030d00410021030c010b2000200229039805370300200041186a20024198056a41186a290300370300200041106a20024198056a41106a290300370300200041086a20024198056a41086a29030037030020052007290300370300200820092903003703002004200c29030037030020024188056a41086a201541086a280200360200200220022903283703e003200220152902003703880520024188016a41386a200241e0036a41386a29030037030020024188016a41306a200241e0036a41306a29030037030020024188016a41286a200241e0036a41286a29030037030020024188016a41206a200029030037030020024188016a41186a200529030037030020024188016a41106a200829030037030020024188016a41086a2004290300370300200220022903e003370388010b20030d02200141206a2101201341606a22130d000b0b0240201241ffffff3f71450d002011102e0b41002118410021190c010b20024188026a41386a220020024188016a41386a29030037030020024188026a41306a220420024188016a41306a29030037030020024188026a41286a220520024188016a41286a29030037030020024188026a41206a220820024188016a41206a29030037030020024188026a41186a220720024188016a41186a29030037030020024188026a41106a220920024188016a41106a29030037030020024188026a41086a220c20024188016a41086a290300370300200241e8046a41086a221620024188056a41086a28020036020020022002290388013703880220022002290388053703e804200241e0026a41086a2217200c290300370300200241e0026a41106a220c2009290300370300200241e0026a41186a22092007290300370300200241e0026a41206a22072008290300370300200241e0026a41286a22082005290300370300200241e0026a41306a22052004290300370300200241e0026a41386a22042000290300370300200241f8046a41086a2200201628020036020020022002290388023703e002200220022903e8043703f80441d000102c220b450d05200b20022903e002370300200b2003360240200b20022903f804370244200b41386a2004290300370300200b41306a2005290300370300200b41286a2008290300370300200b41206a2007290300370300200b41186a2009290300370300200b41106a200c290300370300200b41086a2017290300370300200b41cc006a20002802003602000240024020134120470d0041012119410121180c010b200141206a2109201441606a211a200241bc056a2117200241e0036a41206a210041012119410121180340200921010340200241b8036a41186a2204200141186a2203290000370300200241b8036a41106a2208200141106a2205290000370300200241b8036a41086a2207200141086a2209290000370300200220012900003703b803200241c8006a41186a220c2003290000370300200241c8006a41106a22132005290000370300200241c8006a41086a2216200929000037030020022001290000370348200241e0036a41186a22032004290300370300200241e0036a41106a22052008290300370300200241e0036a41086a22082007290300370300200220022903b8033703e00320024198056a200241e0036a10bf01200241286a41186a2207200c290300370300200241286a41106a22092013290300370300200241286a41086a220c2016290300370300200220022903483703280240024020022802b80522040d00410021040c010b2000200229039805370300200041186a20024198056a41186a290300370300200041106a20024198056a41106a290300370300200041086a20024198056a41086a29030037030020032007290300370300200520092903003703002008200c29030037030020024188056a41086a201741086a280200360200200220022903283703e003200220172902003703880520024188016a41386a200241e0036a41386a29030037030020024188016a41306a200241e0036a41306a29030037030020024188016a41286a200241e0036a41286a29030037030020024188016a41206a200029030037030020024188016a41186a200329030037030020024188016a41106a200529030037030020024188016a41086a2008290300370300200220022903e003370388010b024020040d002014200141206a2201470d010c030b0b20024188026a41386a220720024188016a41386a29030037030020024188026a41306a220920024188016a41306a29030037030020024188026a41286a220c20024188016a41286a29030037030020024188026a41206a221320024188016a41206a29030037030020024188026a41186a221620024188016a41186a29030037030020024188026a41106a221b20024188016a41106a29030037030020024188026a41086a221520024188016a41086a290300370300200241e8046a41086a221c20024188056a41086a28020036020020022002290388013703880220022002290388053703e804200241e0026a41086a221d2015290300370300200241e0026a41106a2215201b290300370300200241e0026a41186a221b2016290300370300200241e0026a41206a22162013290300370300200241e0026a41286a2213200c290300370300200241e0026a41306a220c2009290300370300200241e0026a41386a22092007290300370300200241f8046a41086a2207201c28020036020020022002290388023703e002200220022903e8043703f8042008201d290300370300200520152903003703002003201b29030037030020002016290300370300200241e0036a41286a22162013290300370300200241e0036a41306a2213200c290300370300200241e0036a41386a220c2009290300370300200220022903e0023703e00320024198056a41086a221b2007280200360200200220022903f80437039805024020182019470d00201941016a22072019490d07201941017422092007200920074b1b22074104200741044b1bad42d0007e2206422088a74541037421072006a721090240024020190d0020024100360288010c010b20024108360290012002200b360288012002201941d0006c36028c010b20024188026a2009200720024188016a107d20022802900221072002280288024101460d04200228028c02210b200741d0006e21190b200141206a2109200b201841d0006c6a220720022903e003370300200529030021062003290300210a2000290300210d2016290300210e2013290300211e200c290300211f2008290300212020072004360240200741086a2020370300200741386a201f370300200741306a201e370300200741286a200e370300200741206a200d370300200741186a200a370300200741106a20063703002007200229039805370244200741cc006a201b280200360200201841016a2118201a2001470d000b0b201241ffffff3f71450d002011102e0b200220183602a0052002201936029c052002200b36029805200241e0036a20024198056a10a30341002101024020022802e0034101460d00200241b8036a41206a20024188046a280200360200200241b8036a41186a200241e0036a41206a290300370300200241b8036a41106a200241e0036a41186a290300370300200241b8036a41086a200241e0036a41106a2903003703002002200241e0036a41086a2903003703b8032002418c046a2802002101200241e0026a20024190046a41d80010e9081a0b20024198056a41086a2200200241b8036a41086a29030037030020024198056a41106a2204200241b8036a41106a29030037030020024198056a41186a2203200241b8036a41186a29030037030020024198056a41206a2205200241b8036a41206a280200360200200220022903b80337039805200241e0036a200241e0026a41d80010e9081a02402001450d0020024188016a41206a200528020036020020024188016a41186a200329030037030020024188016a41106a200429030037030020024188016a41086a200029030037030020022002290398053703880120024188026a200241e0036a41d80010e9081a200241ac016a2001360200200241b0016a20024188026a41d80010e9081a200241e0036a41186a200241e8006a41186a290300370300200241e0036a41106a200241e8006a41106a290300370300200241e0036a41086a200241e8006a41086a290300370300200220022903683703e003200241e0026a20024188016a41e7e485f306200241e0036a10e40720022902e402210620022802e002210420024188016a10b80220040d020b4100210120024100360288010c020b2007450d020c030b200241e8036a2006370300200220183602f003200220043602e4032002200f410020101b3602e00320024188016a200241e0036a1097022006a7210302402006422088a72201450d002001410c6c21002004210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b02402003450d002003410c6c450d002004102e0b024020022802880122010d00410021010c010b20024190016a2802002100200228028c0121030b4101102c2204450d01200242013702e403200220043602e0030240024020010d00200241003a008801200241e0036a20024188016a410110740c010b200241013a008801200241e0036a20024188016a410110742000200241e0036a1076200241e0036a2001200010740b20023502e803210620023502e003210a02402001450d002003450d002001102e0b200241d0056a24002006422086200a840f0b1038000b1036000b20024194016a410f360200200241f4036a4102360200200242023702e403200241a0a7c9003602e0032002410436028c012002419cadc90036028801200220024188016a3602f0032002200241c8056a36029001200241e0036a41b0a7c9001044000b891003037f017e067f230041e0016b220424000240024002400240024002400240024002400240200141e0006a22052001413c6a412010ec08450d00200441d0006a41186a200541186a290000370300200441d0006a41106a200541106a290000370300200441d0006a41086a200541086a2900003703002004200529000037035002402001200441d0006a10af022206450d00200628020c41004a0d010b200441206a41086a2201200541086a290000370300200441206a41106a2203200541106a290000370300200441206a41186a2202200541186a290000370300200420052900003703204130102c2205450d01200541003a00002005200429032037000120052004290050370021200541096a2001290300370000200541116a2003290300370000200541196a2002290300370000200541286a2201200441d7006a2900003700000240024020052d00000e040a0a000a010b200541086a280200450d09200541046a280200102e0c090b2001280200450d08200541246a280200102e0c080b2004410036020c20042005360208200441bc81ca0036020420042001360200200442003703182004420437031020044188016a4120360200200420033602840120042002360280014124102c2205450d00200442243702a401200420053602a001200441a0016a20044180016a410410744120200441a0016a1076200441a0016a200341201074200441d0006a200420042802a001220120042802a801200441106a10a702024002400240024020042802504101470d0002400240200428025422052d00000e0403030003010b200541086a280200450d02200541046a280200102e0c020b200541286a280200450d01200541246a280200102e0c010b20042802542202450d0102400240200441d8006a2903002207422088a741044f0d00410021050c010b20022800002103410121050b2007a7450d022002102e0c020b2005102e0b410021050b024020042802a401450d002001102e0b0240024002402005450d0020042003360244200441d0006a2004200441c4006a4104200441106a10a702024020042802504101470d0002400240200428025422052d00000e040a0a000a010b200541086a280200450d09200541046a280200102e0c090b200541286a280200450d08200541246a280200102e0c080b20042802542202450d08200441d8006a29030021072004200236024820042007422088a7220636024c41002105200441003a00702006417f6a210102400240034020062005460d01200441d0006a20056a200220056a22032d00003a00002004200341016a3602482004200541016a22033a00702004200136024c2001417f6a21012003210520034120470d000b200441a0016a41086a2205200441d0006a41086a290300370300200441a0016a41106a2201200441d0006a41106a290300370300200441a0016a41186a2206200441d0006a41186a290300370300200420042903503703a001200341ff0171411f4b0d010c030b200541ff0171450d02200441003a0070410021050c030b200441206a41086a2005290300370300200441206a41106a2001290300370300200441206a41186a2006290300370300200420042903a001370320200441d0006a200441c8006a10850520042802702205450d01200441f4006a28020021010c020b200041003602000c080b410021050b02402007a7450d002002102e0b2005450d0502402001450d00200141306c450d002005102e0b2004280214210820042802102109200442043703102004280218210620044100360218200641306c220a41306d2202ad420c7e2207422088a70d032007a72201417f4c0d034104210502402001450d002001102c2205450d010b2000200536020041002103200041086a4100360200200041046a2001410c6e220b36020002400240200b20024f0d00200b410174220c2002200c20024b1b220c4104200c41044b1bad420c7e2207422088a745410274210c2007a7210d024002402001410b4b0d00200441003602500c010b200441d8006a4104360200200420053602502004200b410c6c3602540b200441a0016a200d200c200441d0006a107d200441a8016a280200210120042802a0014101460d01200020042802a4012205360200200041046a2001410c6e3602000b20060d02200921010c030b2001450d030b1036000b2009200a6a210a200641306c2102200941306a2101200641047441706a41047641016a210b4100210302400340200141546a2802002206450d01200541046a200141586a290200370200200520063602002005410c6a2105200141306a2101200341016a2103200241506a22020d000b200a2101200b21030b200a20016b220a41306d21020b200041086a20033602000240200a450d00200241306c2103200141086a2105034002402005280200450d002005417c6a280200102e0b200541306a2105200341506a22030d000b0b02402008450d00200841306c450d002009102e0b20042802102103024020042802182205450d00200541306c2101200341086a2105034002402005280200450d002005417c6a280200102e0b200541306a2105200141506a22010d000b0b20042802142205450d05200541306c450d052003102e0c050b1038000b2005102e0b200041003602000b20042802102103024020042802182205450d00200541306c2101200341086a2105034002402005280200450d002005417c6a280200102e0b200541306a2105200141506a22010d000b0b20042802142205450d01200541306c450d012003102e0c010b2005102e200041003602000b200441e0016a24000b8c0804057f017e037f017e230041c0016b22022400024020010d0020024198016a41186a2203420037030020024198016a41106a2204420037030020024198016a41086a220542003703002002420037039801200241f0006a41a8f8c60041041081022005200241f0006a41086a22012900003703002002200229007037039801200241f0006a41a58bc500410b1081022003200129000037030020042002290070370300200220024198016a10a2042002280200210620022902042107200241186a22084200370300200241106a22094200370300200241086a220a420037030020024200370300200241f0006a41a8f8c6004104108102200a200129000037030020022002290070370300200241f0006a41c28cc500410a1081022008200129000037030020092002290070370300200241f0006a200210a30420022d00702101200320024189016a290000370300200420024181016a2900003703002005200241f9006a29000037030020022002290071370398012007420020061b21072006410820061b21080240024020014101460d00200241d0006a41186a4200370300200241d0006a41106a4200370300200241d0006a41086a4200370300200242003703500c010b200241d0006a41186a2003290300370300200241d0006a41106a2004290300370300200241d0006a41086a200529030037030020022002290398013703500b200241246a2007370200200241186a4204370300200241346a200241d0006a41086a2903003702002002413c6a200241e0006a290300370200200241c4006a200241d0006a41186a29030037020020024201370310200242e012370308200242f02e3703002002200229035037022c200241023a004c200220083602202002410036027820024201370370200242f02e37039801200241f0006a20024198016a41081074200242e01237039801200241f0006a20024198016a410810742002420137039801200241f0006a20024198016a410810742002420437039801200241f0006a20024198016a410810742007422088a72201200241f0006a10762007a721030240200141286c2201450d00200820016a2106200821010340200241f0006a2001412010742002200141206a29030037039801200241f0006a20024198016a41081074200141286a22012006470d000b0b200241f0006a2002412c6a41201074200241023a009801200241f0006a20024198016a41011074200235027021072002350278210b02402003450d00200341286c450d002008102e0b200241c0016a2400200b4220862007840f0b200241fc006a410f360200200241146a410236020020024202370204200241a0a7c90036020020024104360274200241c0adc9003602702002200241f0006a3602102002200241b8016a360278200241b0a7c9001044000b820402047f027e230041f0006b22022400024002400240024020010d00200241d0006a22014200370300200241c8006a22034200370300200241386a41086a2204420037030020024200370338200241386a41a8f8c6004104108102200241d8006a41fa8bc500410a1081022001200241d8006a41086a220529000037030020032002290058370300200241286a200241386a108503200241186a2002290330420020022802281b420042e012420010e808200229032050450d012002290318210620014200370300200342003703002004420037030020024200370338200241386a41a8f8c6004104108102200241d8006a41e38bc500410b1081022001200529000037030020032002290058370300200241086a200241386a10850320062002290310420020022802081b7c22072006540d024108102c2201450d032002420837023c2002200136023820022007370358200241386a200241d8006a410810742002350240210620023502382107200241f0006a240020072006422086840f0b200241e4006a410f360200200241cc006a41023602002002420237023c200241a0a7c9003602382002410436025c200241d8adc9003602582002200241d8006a3602482002200241e8006a360260200241386a41b0a7c9001044000b41e8b2c40041fa0041e4b3c400105d000b41e8b2c40041fa0041f4b3c400105d000b1036000be10c04047f017e037f027e23004190026b22022400024002400240024020010d00200241e8016a41186a22034200370300200241e8016a41106a22014200370300200241e8016a41086a22044200370300200242003703e801200241c8006a41a8f8c60041041081022004200241c8006a41086a2205290000370300200220022900483703e801200241c8006a41fa8bc500410a1081022003200529000037030020012002290048370300200241386a200241e8016a1085032002290340210620022802382107200241c8006a41186a22084200370300200241c8006a41106a220942003703002005420037030020024200370348200241c8006a41a8f8c6004104108102200241e8016a41fa8bc500410a10810220082004290000370300200920022900e801370300200241286a200241c8006a108503200241186a2002290330420020022802281b420042e012420010e808200229032050450d012002290318210a200342003703002001420037030020044200370300200242003703e801200241c8006a41a8f8c600410410810220042005290000370300200220022900483703e801200241c8006a41e38bc500410b108102200141086a200529000037000020012002290048370000200241086a200241e8016a108503200a2002290310420020022802081b7c220b200a540d02200241e8016a41186a22054200370300200241e8016a41106a22034200370300200241e8016a41086a22044200370300200242003703e801200241c8006a41a8f8c60041041081022004200241c8006a41086a2208290000370300200220022900483703e801200241c8006a41a58bc500410b108102200141086a200829000037000020012002290048370000200241c8006a200241e8016a10a20420022802482109200229024c210a200542003703002003420037030020044200370300200242003703e801200241c8006a41a8f8c600410410810220042008290000370300200220022900483703e801200241c8006a41c28cc500410a1081022005200829000037030020032002290048370300200241c8006a200241e8016a10a30420022d004821082005200241e1006a2900003703002003200241d9006a2900003703002004200241d1006a290000370300200220022900493703e8010240024020084101460d00200241a8016a41186a4200370300200241a8016a41106a4200370300200241a8016a41086a4200370300200242003703a8010c010b200241a8016a41186a2005290300370300200241a8016a41106a2003290300370300200241a8016a41086a2004290300370300200220022903e8013703a8010b200241e8016a41186a4200370300200241e8016a41106a4200370300200241e8016a41086a22044200370300200242003703e801200241c8006a41a8f8c60041041081022004200241c8006a41086a2205290000370300200220022900483703e801200241c8006a418c8bc500410b108102200141086a200529000037000020012002290048370000200241c8006a200241e8016a10b005200241d8016a41086a22012005290300370300200220022903483703d801200220022800593602d0012002200241dc006a2800003600d30120022d005822054103460d0320042001290300370300200241fc006a200a420020091b220a3702002002418c016a200241a8016a41086a29030037020020024194016a200241a8016a41106a2903003702002002419c016a200241a8016a41186a290300370200200220022903d8013703e801200220022802d0013602c801200220022800d3013600cb0120022009410820091b2203360278200242e0123703582002200b37035020022006420020071b370348200220022903a80137028401200241e8006a2004290300370300200220022903e801370360200241c8006a41286a20053a0000200241f4006a20022800cb01360000200241f1006a20022802c801360000200241c8006a10cf0421060240200aa72201450d00200141286c450d002003102e0b20024190026a240020060f0b200241f4016a410f360200200241dc006a41023602002002420237024c200241a0a7c900360248200241043602ec01200241f4adc9003602e8012002200241e8016a360258200220024188026a3602f001200241c8006a41b0a7c9001044000b41e8b2c40041fa0041e4b3c400105d000b41e8b2c40041fa0041f4b3c400105d000b41a8b6c40041c8004180b7c400105d000bde0d05047f027e027f017e047f23004190026b220224000240024002400240024020010d0020024180026a22034200370300200241f8016a22014200370300200241e8016a41086a22044200370300200242003703e801200241306a41a8f8c60041041081022004200241306a41086a2205290000370300200220022900303703e801200241306a41fa8bc500410a1081022003200529000037030020012002290030370300200241206a200241e8016a1085032002290328420020022802201b220642017c22072006540d01200241106a2007420042e012420010e808200229031850450d022002290310210620024180026a22054200370300200241f8016a22084200370300200241e8016a41086a22034200370300200242003703e801200241306a41a8f8c60041041081022003200241306a41086a2204290000370300200220022900303703e801200241306a41e38bc500410b108102200141086a22092004290000370000200120022900303700002002200241e8016a10850320062002290308420020022802001b7c220a2006540d03200542003703002008420037030020034200370300200242003703e801200241306a41a8f8c600410410810220032004290000370300200220022900303703e801200241306a41ba8bc500410f1081022009200429000037000020012002290030370000200241306a200241e8016a10a2042002280230210920022902342106200542003703002008420037030020034200370300200242003703e801200241306a41a8f8c600410410810220032004290000370300200220022900303703e801200241306a41978bc500410e1081022005200429000037030020082002290030370300200241306a200241e8016a10a30420022d003021042005200241c9006a2900003703002008200241c1006a2900003703002003200241396a290000370300200220022900313703e8010240024020044101460d00200241a8016a4200370300200241a0016a420037030020024198016a420037030020024200370390010c010b20024190016a41186a200241e8016a41186a29030037030020024190016a41106a200241e8016a41106a29030037030020024190016a41086a200241e8016a41086a290300370300200220022903e801370390010b20024180026a22084200370300200241f8016a220b4200370300200241e8016a41086a22044200370300200242003703e801200241306a41a8f8c60041041081022004200241306a41086a2203290000370300200220022900303703e801200241306a41d48bc500410f108102200141086a220c200329000037000020012002290030370000200241306a200241e8016a10b005200241c0016a41086a220d2003290300370300200220022903303703c001200220022800413602b8012002200241c4006a220e2800003600bb010240024020022d004022054103470d0020084200370300200b420037030020044200370300200242003703e801200241306a41a8f8c600410410810220042003290000370300200220022900303703e801200241306a418c8bc500410b108102200c200329000037000020012002290030370000200241306a200241e8016a10b005200241d8016a41086a2003290300370300200220022903303703d801200220022800413602d0012002200e2800003600d30120022d004022054103460d06200241e8016a41086a200241d8016a41086a290300370300200220022903d8013703e801200220022802d0013602b001200220022800d3013600b3010c010b2004200d290300370300200220022903c0013703e801200220022802b8013602b001200220022800bb013600b3010b200241e4006a2006420020091b2206370200200241f4006a20024190016a41086a290300370200200241fc006a200241a0016a29030037020020024184016a200241a8016a290300370200200241d0006a200241e8016a41086a29030037030020022009410820091b2203360260200242e0123703402002200a37033820022007370330200220022903900137026c200220022903e801370348200241306a41286a20053a0000200241d9006a20022802b001360000200241dc006a20022800b301360000200241306a10cf04210702402006a72201450d00200141286c450d002003102e0b20024190026a240020070f0b200241f4016a410f360200200241c4006a410236020020024202370234200241a0a7c900360230200241043602ec012002418caec9003602e8012002200241e8016a360240200220024188026a3602f001200241306a41b0a7c9001044000b41a8b5c40041ef004198b6c400105d000b41e8b2c40041fa0041e4b3c400105d000b41e8b2c40041fa0041f4b3c400105d000b41a8b6c40041c80041f0b6c400105d000b902508047f017e037f017e027f027e0f7f037e230041d0056b22022400024020014108490d00200241003a008004200041d4e2cc0020011b41086a2103200141786a2104410021010340200241003a008801024020042001470d00200141ff0171450d02200241003a0080040c020b200241e0036a20016a200320016a2d00003a00002002200141016a22003a0080042000210120004120470d000b20024188016a41186a2201200241e0036a41186a29030037030020024188016a41106a2203200241e0036a41106a29030037030020024188016a41086a2205200241e0036a41086a290300370300200220022903e00337038801200041ff01714120490d00200241286a41086a2005290300370300200241286a41106a2003290300370300200241286a41186a2001290300370300200220022903880122063703482002200637032820042000470d00200241e0036a41186a2205200241286a41186a22072903002206370300200241e0036a41106a2208200241286a41106a2209290300220a3703004108210b200241e0036a41086a2204200241286a41086a220c290300220d37030020022002290328220e3703e003200241086a41186a2006370300200241086a41106a200a370300200241086a41086a200d3703002002200e370308200241e8006a41186a2006370300200241e8006a41106a200a370300200241e8006a41086a200d3703002002200e3703682007420037030020094200370300200c420037030020024200370328200241e0036a41a081ca004107108102200c2004290000370300200220022900e003370328200241e0036a41e4d1c100410c10810220072004290000370300200920022900e0033703002002200241286a4120108e022002280204210f200228020021102007420037030020094200370300200c420037030020024200370328200241e0036a41a081ca004107108102200c2004290000370300200220022900e003370328200241e0036a41f09dc500410a10810220072004290000370300200920022900e003370300200241e0036a200241286a10880320022802e0032201410120011b211120022902e403420020011b2206a72112024002400240024002400240024002402006422088a72201450d002011200141057422136a2114200241bc056a2115200241e0036a41206a2100201121010340200241b8036a41186a2203200141186a2216290000370300200241b8036a41106a2217200141106a2218290000370300200241b8036a41086a2219200141086a221a290000370300200220012900003703b803200241c8006a41086a221b201a290000370300200241c8006a41106a221a2018290000370300200241c8006a41186a2218201629000037030020022001290000370348200520032903003703002008201729030037030020042019290300370300200220022903b8033703e00320024198056a200241e0036a10bf01200720182903003703002009201a290300370300200c201b290300370300200220022903483703280240024020022802b80522030d00410021030c010b2000200229039805370300200041186a20024198056a41186a290300370300200041106a20024198056a41106a290300370300200041086a20024198056a41086a29030037030020052007290300370300200820092903003703002004200c29030037030020024188056a41086a201541086a280200360200200220022903283703e003200220152902003703880520024188016a41386a200241e0036a41386a29030037030020024188016a41306a200241e0036a41306a29030037030020024188016a41286a200241e0036a41286a29030037030020024188016a41206a200029030037030020024188016a41186a200529030037030020024188016a41106a200829030037030020024188016a41086a2004290300370300200220022903e003370388010b20030d02200141206a2101201341606a22130d000b0b0240201241ffffff3f71450d002011102e0b41002118410021190c010b20024188026a41386a220020024188016a41386a29030037030020024188026a41306a220420024188016a41306a29030037030020024188026a41286a220520024188016a41286a29030037030020024188026a41206a220820024188016a41206a29030037030020024188026a41186a220720024188016a41186a29030037030020024188026a41106a220920024188016a41106a29030037030020024188026a41086a220c20024188016a41086a290300370300200241e8046a41086a221620024188056a41086a28020036020020022002290388013703880220022002290388053703e804200241e0026a41086a2217200c290300370300200241e0026a41106a220c2009290300370300200241e0026a41186a22092007290300370300200241e0026a41206a22072008290300370300200241e0026a41286a22082005290300370300200241e0026a41306a22052004290300370300200241e0026a41386a22042000290300370300200241f8046a41086a2200201628020036020020022002290388023703e002200220022903e8043703f80441d000102c220b450d05200b20022903e002370300200b2003360240200b20022903f804370244200b41386a2004290300370300200b41306a2005290300370300200b41286a2008290300370300200b41206a2007290300370300200b41186a2009290300370300200b41106a200c290300370300200b41086a2017290300370300200b41cc006a20002802003602000240024020134120470d0041012119410121180c010b200141206a2109201441606a211a200241bc056a2117200241e0036a41206a210041012119410121180340200921010340200241b8036a41186a2204200141186a2203290000370300200241b8036a41106a2208200141106a2205290000370300200241b8036a41086a2207200141086a2209290000370300200220012900003703b803200241c8006a41186a220c2003290000370300200241c8006a41106a22132005290000370300200241c8006a41086a2216200929000037030020022001290000370348200241e0036a41186a22032004290300370300200241e0036a41106a22052008290300370300200241e0036a41086a22082007290300370300200220022903b8033703e00320024198056a200241e0036a10bf01200241286a41186a2207200c290300370300200241286a41106a22092013290300370300200241286a41086a220c2016290300370300200220022903483703280240024020022802b80522040d00410021040c010b2000200229039805370300200041186a20024198056a41186a290300370300200041106a20024198056a41106a290300370300200041086a20024198056a41086a29030037030020032007290300370300200520092903003703002008200c29030037030020024188056a41086a201741086a280200360200200220022903283703e003200220172902003703880520024188016a41386a200241e0036a41386a29030037030020024188016a41306a200241e0036a41306a29030037030020024188016a41286a200241e0036a41286a29030037030020024188016a41206a200029030037030020024188016a41186a200329030037030020024188016a41106a200529030037030020024188016a41086a2008290300370300200220022903e003370388010b024020040d002014200141206a2201470d010c030b0b20024188026a41386a220720024188016a41386a29030037030020024188026a41306a220920024188016a41306a29030037030020024188026a41286a220c20024188016a41286a29030037030020024188026a41206a221320024188016a41206a29030037030020024188026a41186a221620024188016a41186a29030037030020024188026a41106a221b20024188016a41106a29030037030020024188026a41086a221520024188016a41086a290300370300200241e8046a41086a221c20024188056a41086a28020036020020022002290388013703880220022002290388053703e804200241e0026a41086a221d2015290300370300200241e0026a41106a2215201b290300370300200241e0026a41186a221b2016290300370300200241e0026a41206a22162013290300370300200241e0026a41286a2213200c290300370300200241e0026a41306a220c2009290300370300200241e0026a41386a22092007290300370300200241f8046a41086a2207201c28020036020020022002290388023703e002200220022903e8043703f8042008201d290300370300200520152903003703002003201b29030037030020002016290300370300200241e0036a41286a22162013290300370300200241e0036a41306a2213200c290300370300200241e0036a41386a220c2009290300370300200220022903e0023703e00320024198056a41086a221b2007280200360200200220022903f80437039805024020182019470d00201941016a22072019490d07201941017422092007200920074b1b22074104200741044b1bad42d0007e2206422088a74541037421072006a721090240024020190d0020024100360288010c010b20024108360290012002200b360288012002201941d0006c36028c010b20024188026a2009200720024188016a107d20022802900221072002280288024101460d04200228028c02210b200741d0006e21190b200141206a2109200b201841d0006c6a220720022903e003370300200529030021062003290300210a2000290300210d2016290300210e2013290300211e200c290300211f2008290300212020072004360240200741086a2020370300200741386a201f370300200741306a201e370300200741286a200e370300200741206a200d370300200741186a200a370300200741106a20063703002007200229039805370244200741cc006a201b280200360200201841016a2118201a2001470d000b0b201241ffffff3f71450d002011102e0b200220183602a0052002201936029c052002200b36029805200241e0036a20024198056a10a30341002101024020022802e0034101460d00200241b8036a41206a20024188046a280200360200200241b8036a41186a200241e0036a41206a290300370300200241b8036a41106a200241e0036a41186a290300370300200241b8036a41086a200241e0036a41106a2903003703002002200241e0036a41086a2903003703b8032002418c046a2802002101200241e0026a20024190046a41d80010e9081a0b20024198056a41086a2200200241b8036a41086a29030037030020024198056a41106a2204200241b8036a41106a29030037030020024198056a41186a2203200241b8036a41186a29030037030020024198056a41206a2205200241b8036a41206a280200360200200220022903b80337039805200241e0036a200241e0026a41d80010e9081a02402001450d0020024188016a41206a200528020036020020024188016a41186a200329030037030020024188016a41106a200429030037030020024188016a41086a200029030037030020022002290398053703880120024188026a200241e0036a41d80010e9081a200241ac016a2001360200200241b0016a20024188026a41d80010e9081a200241e0036a41186a200241e8006a41186a290300370300200241e0036a41106a200241e8006a41106a290300370300200241e0036a41086a200241e8006a41086a290300370300200220022903683703e003200241e0026a20024188016a41e2c289ab06200241e0036a10e40720022902e402210620022802e002210420024188016a10b80220040d020b4100210120024100360288010c020b2007450d020c030b200241e8036a2006370300200220183602f003200220043602e4032002200f410020101b3602e00320024188016a200241e0036a1097022006a7210302402006422088a72201450d002001410c6c21002004210103400240200141046a280200450d002001280200102e0b2001410c6a2101200041746a22000d000b0b02402003450d002003410c6c450d002004102e0b024020022802880122010d00410021010c010b20024190016a2802002100200228028c0121030b4101102c2204450d01200242013702e403200220043602e0030240024020010d00200241003a008801200241e0036a20024188016a410110740c010b200241013a008801200241e0036a20024188016a410110742000200241e0036a1076200241e0036a2001200010740b20023502e803210620023502e003210a02402001450d002003450d002001102e0b200241d0056a24002006422086200a840f0b1038000b1036000b20024194016a410f360200200241f4036a4102360200200242023702e403200241a0a7c9003602e0032002410436028c012002419cadc90036028801200220024188016a3602f0032002200241c8056a36029001200241e0036a41b0a7c9001044000be115020a7f027e230041d00b6b2202240020024280808080802037020c2002200136021c2002200041d4e2cc0020011b3602182002200241186a36020820024180086a200241086a1098020240024002400240024002402002418c086a2802002203450d00200241f0076a41086a20024180086a41086a28020036020020022002290380083703f00720024190086a280200210420024194086a280200210520024188076a20024198086a41e40010e9081a20024184096a280200210620024180086a4180016a2802002107200241fc086a280200210820024188066a20024188096a41800110e9081a2002200241086a10ad01024020022802000d0020022802082201280204220020022802042209490d002009417f4c0d030240024020090d004101210a0c010b20091032220a450d06200128020421000b024020002009490d00200a2001280200200910e9081a200128020422002009490d072001200020096b3602042001200128020020096a360200200241f8056a41086a200241f0076a41086a280200360200200220022903f0073703f80520024190056a20024188076a41e40010e9081a20024190046a20024188066a41800110e9081a0c030b200a102e0b02402005450d00200541246c21002003210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b02402004450d00200441246c450d002003102e0b02402006450d00200641246c21002008210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b2007450d00200741246c450d002008102e0b410021030b20024180046a41086a2201200241f8056a41086a280200360200200220022903f8053703800420024198036a20024190056a41e40010e9081a20024198026a20024190046a41800110e9081a2003450d0120024188026a41086a2001280200360200200220022903800437038802200241a0016a20024198036a41e40010e9081a200241206a20024198026a41800110e9081a0240024020022802082802040d0020024190056a41086a20024188026a41086a28020036020020022002290388023703900520024188066a200241a0016a41e40010e9081a20024180086a200241206a41800110e9081a0c010b02402005450d00200541246c21002003210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b02402004450d00200441246c450d002003102e0b02402006450d00200641246c21002008210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b02402007450d00200741246c450d002008102e0b410021032009450d00200a102e0b2003450d01200241f0076a41086a220120024190056a41086a28020036020020022002290390053703f00720024188076a20024188066a41e40010e9081a20024190046a20024180086a41800110e9081a200241a0016a41086a2001280200360200200220022903f0073703a001200241206a20024188076a41e40010e9081a20024188066a20024190046a41800110e9081a20022009360294052002200a3602900520024180086a20024190056a10f7010240024020022802840822010d00410021010c010b20024198026a41086a20024190086a28020036020020022002290388083703980220022802800821000b02402009450d00200a102e0b200241f8056a41086a220920024198026a41086a220a28020036020020022002290398023703f805024002402001450d0020024198036a41086a220b2009280200360200200220022903f8053703980320024180086a20024198026a41e80010e9081a200241a8096a2001360200200241a4096a2000360200200241a0096a4102360200200241f8086a20024190056a41086a220129030037030020024180086a4180016a200241a0056a29030037030020024188096a200241a8056a29030037030020024190096a200241b0056a290300370300200241ac096a200229039803370200200241b4096a200b280200360200200241023602980920022002290390053703f008200242023703e808200241c4096a2003360200200241c8096a2004360200200241cc096a2005360200200241c0096a200241a0016a41086a280200360200200241b8096a20022903a001370300200241d0096a200241206a41e40010e9081a200241bc0a6a2006360200200241b80a6a2007360200200241b40a6a2008360200200241c00a6a20024188066a41800110e9081a200220024180086a3602980220024190056a20024198026a109005200a200128020036020020022002290390053703980220024198026a10e8061a024020022903e8084202510d0020022d00800841ff01714102470d00200228028808450d00200228028408102e0b20024198096a108b02410121010c010b02402005450d00200541246c21002003210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b02402004450d00200441246c450d002003102e0b02402006450d00200641246c21002008210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a280200102e0c030b2001410c6a280200450d02200141086a280200102e0c020b2001410c6a280200450d01200141086a280200102e0c010b200141086a280200450d00200141046a280200102e0b200141246a21012000415c6a22000d000b0b410021012007450d00200741246c450d002008102e0b4101102c2200450d02200242013702840820022000360280080240024020010d00200241003a00880620024180086a20024188066a410110740c010b200241013a00880620024180086a20024188066a410110740b200235028808210c200235028008210d200241d00b6a2400200d200c422086840f0b1038000b200241a4026a410f360200200241a4046a41023602002002420237029404200241a0a7c900360290042002410436029c02200241e4acc90036029802200220024198026a3602a0042002200241c80b6a3602a00220024190046a41b0a7c9001044000b1036000b2009200041b8b2c0001056000b901706057f017e017f037e157f017e230041c0006b22022400024002400240024002400240024002400240024020010d00200241306a22014200370300200241286a22034200370300200241186a41086a2204420037030020024200370318200241186a41b2fdc6004112108102200241086a41e9d8c80041041081022001200241086a41086a220529000037030020032002290008370300200241086a200241186a10ac0520022802082106200229020c210720014200370300200342003703002004420037030020024200370318200241186a41b2fdc6004112108102200241086a41b4d3c10041081081022001200529000037030020032002290008370300200241086a200241186a10ac052006410120061b21080240024002402007420020061b2209a7220420094220882207a722016b200229020c4200200228020822031b220a422088220ba722064f0d00200120066a22052001490d0c200441017422012005200120054b1b22014104200141044b1b220141ffffff3f712001462105200141057421010240024020040d00200241003602180c010b200241206a4101360200200220083602182002200441057436021c0b200241086a20012005200241186a107d200241106a280200210420022802084101460d01200228020c210820094220882207a721012004410576ad21090b200820014105746a2003410120031b2201200641057410e9081a2007200b7c21070240200a42ffffff3f83500d002001102e0b2007a7220c41144b0d01200c41014b0d050c080b2004450d0a0c090b200c410176220141ffffff3f712001470d092001410574220d417f4c0d09200d102c220e450d08200841606a210f200841a07f6a2110410421114100211241002113200c2114034020142115410021144101210602402015417f6a2204450d00024002400240024002400240200820044105746a2015410574221620086a41406a412010ec084100480d002015417e6a2104201020166a210141002114410021030340024020042003470d00201521060c080b200341016a2103200141206a2001412010ec082106200141606a21012006417f4a0d000b200341016a21062003417f7320156a21040c010b201020166a210102400340024020044101470d00410021040c020b2004417f6a2104200141206a2001412010ec082103200141606a210120034100480d000b0b20152004490d012015200c4b0d02201520046b22064101762205450d00200f20166a2101200820044105746a21030340200241186a41186a2216200341186a2217290000370300200241186a41106a2218200341106a2219290000370300200241186a41086a221a200341086a221b29000037030020022003290000370318200141086a221c2900002107200141106a221d290000210a200141186a221e290000210b200320012900003700002017200b3700002019200a370000201b2007370000201e2016290300370000201d2018290300370000201c201a29030037000020012002290318370000200141606a2101200341206a21032005417f6a22050d000b0b024020040d00200421140c050b0240200641094d0d00200421140c050b2015200c4b0d02201520046b21062004417f6a2101200f20044105746a2103034020152001490d082003200641016a220610eb062001417f6a220420014f0d04200341606a2103200421012006410a490d000c040b0b2004201541e4d1cc001057000b2015200c41e4d1cc00104d000b20152004417f6a2201490d042015200c41f4d1cc00104d000b200441016a21140b024020132012470d00201241016a22012012490d0b201241017422032001200320014b1b22014104200141044b1b220141ffffffff01712001464102742103200141037421010240024020120d00200241003602180c010b20024104360220200220113602182002201241037436021c0b200241086a20012003200241186a107d20022802102101024020022802084101470d0020010d0b0c0c0b200228020c2111200141037621120b201120134103746a2201200636020420012014360200201341016a221e21130240201e4102490d00024002400240034002400240024002402011201e2213417f6a221e4103746a2201280200450d00201341037420116a220541746a2802002204200128020422034d0d00201341024d0d0820112013417d6a22014103746a2802042206200320046a4d0d01201341034d0d08200541646a280200200620046a4b0d080c010b20134103490d012001280204210320112013417d6a22014103746a28020421060b20062003490d010b2013417e6a21010b02402013200141016a22154d0d00201320014d0d02201120014103746a221b280204221f201b2802006a2201201120154103746a221c280200221d490d032001200c4b0d04201b41046a21202008201d4105746a2219201c280204221a41057422036a210420014105742106024002402001201d6b2216201a6b2201201a490d00200e2019200310e908221820036a210502400240201a4101480d002016201a4a0d010b20192101201821030c020b200820066a21172018210320192101034020012004200320042003412010ec0841004822161b2206290000370000200141186a200641186a290000370000200141106a200641106a290000370000200141086a200641086a2900003700002003200341206a20161b2103200141206a2101200441206a200420161b220420174f0d02200520034b0d000c020b0b200e20042001410574220310e908221820036a210502400240201a4101480d00200141014e0d010b20042101201821030c010b200f20066a2106200421010340200141606a2103200541606a210420062003200420042003412010ec0841004822171b2216290000370000200641186a201641186a290000370000200641106a201641106a290000370000200641086a201641086a2900003700002005200420171b2105024020192003200120171b2201490d00201821030c020b200641606a21062018210320182005490d000b0b20012003200520036b41607110e9081a2020201f201a6a360200201b201d360200201c201c41086a20132015417f736a41037410ea081a41012113201e41014d0d050c010b0b201520134184d2cc00103c000b200120134194d2cc00103c000b201d200141a4d2cc001057000b2001200c41a4d2cc00104d000b2014450d030c000b0b200241146a410f3602002002412c6a41023602002002420237021c200241a0a7c9003602182002410436020c200241a0aec9003602082002200241086a3602282002200241386a360210200241186a41b0a7c9001044000b2001201541f4d1cc001057000b0240201241ffffffff0171450d002011102e0b200d450d01200e102e0c010b2008200c417e6a22014105746a21034102210603402001200c4b0d022003200610eb06200341606a2103200641016a21062001417f6a2201417f470d000b0b200c4102490d01200841206a21014101210641012103034002402001200341057420086a220441606a412010ec08450d00024020062003460d002001290000210720012004290000370000200141186a2205290000210a2005200441186a2216290000370000200141106a2205290000210b2005200441106a2217290000370000200141086a220529000021212005200441086a2218290000370000201820213700002017200b3700002016200a370000200420073700000b200341016a21030b200141206a2101200c200641016a2206470d000b2003200c4d0d0241c4f1c000412341e8f1c0001039000b2001200c41c4d1cc001056000b200c21030b20034105744104722201417f4c0d012001102c2206450d00200241003602202002200136021c200220063602182003200241186a107602402003450d0020034105742103200821010340200241186a200141201074200141206a2101200341606a22030d000b0b200235022021072002350218210a0240200942ffffff3f83500d002008102e0b200241c0006a24002007422086200a840f0b1036000b1038000b890e04027f017e027f017e230041a0036b2202240020024280808080802037020c200220013602ec022002200041d4e2cc0020011b22003602e8022002200241e8026a360208024002400240024002402001450d0020022001417f6a22013602ec022002200041016a3602e802024002400240024020002d00000e020100040b2002200241086a10ad0120022802000d0320022802ec02220320022802042200490d032000417f4c0d060240024020000d00410121010c010b200010322201450d0820022802ec0221030b20032000490d02200120022802e802200010e9081a20022802ec0222032000490d042002200320006b22033602ec02200220022802e80220006a3602e80220030d012000ad220442208620048421040c050b20010d02410021010c040b2000450d010b2001102e0b200241f4026a410f3602002002411c6a41023602002002420237020c200241a0a7c900360208200241043602ec02200241b4aec9003602e8022002200241e8026a360218200220024198036a3602f002200241086a41b0a7c9001044000b2000200341b8b2c0001056000b410021030240024020010d00410021050c010b2004422088a72200417f4c0d010240024020000d00410121050c010b2000102c2205450d030b20052001200010e9081a0b200241106a220620003602002002200036020c20022005360208200241c8016a41e7e485f306200241086a10ed070240024020010d000c010b2004422088a72200417f4c0d010240024020000d00410121030c010b2000102c2203450d030b20032001200010e9081a0b200620003602002002200036020c20022003360208200241e8016a41e2c289ab06200241086a10ee07410021030240024020010d00410021050c010b2004422088a72200417f4c0d010240024020000d00410121050c010b2000102c2205450d030b20052001200010e9081a0b200241106a220620003602002002200036020c2002200536020820024188026a41e9dabdf306200241086a10ee070240024020010d000c010b2004422088a72200417f4c0d010240024020000d00410121030c010b2000102c2203450d030b20032001200010e9081a0b200620003602002002200036020c20022003360208200241a8026a41f0c2c98b06200241086a10ee07410021050240024020010d00410021030c010b2004422088a72200417f4c0d010240024020000d00410121030c010b2000102c2203450d030b20032001200010e9081a0b200241086a41086a220620003602002002200036020c20022003360208200241c8026a41e1e69df306200241086a10ee070240024020010d00410021030c010b2004422088a72200417f4c0d010240024020000d00410121030c010b2000102c2203450d030b20032001200010e9081a200121050b20024188036a41086a20003602002002200036028c032002200336028803200241e8026a41e1ea91cb0620024188036a10ee072006200241c8016a41086a290300370300200241086a41106a200241c8016a41106a290300370300200241086a41186a200241c8016a41186a290300370300200241306a200241e8016a41086a290300370300200241386a200241e8016a41106a290300370300200241c0006a200241e8016a41186a290300370300200241d0006a20024188026a41086a290300370300200241d8006a20024188026a41106a290300370300200241e0006a20024188026a41186a290300370300200220022903c801370308200220022903e801370328200220022903880237034820024180016a200241a8026a41186a290300370300200241f8006a200241a8026a41106a290300370300200241f0006a200241a8026a41086a29030037030020024190016a200241c8026a41086a29030037030020024198016a200241c8026a41106a290300370300200241a0016a200241c8026a41186a290300370300200241b0016a200241e8026a41086a290300370300200241b8016a200241e8026a41106a290300370300200241c0016a200241e8026a41186a290300370300200220022903a802370368200220022903c80237038801200220022903e8023703a8012002420137038803200241003602900320024188036a200241086a4120107420024188036a200241086a41206a4120107420024188036a200241c8006a4120107420024188036a200241e8006a4120107420024188036a20024188016a4120107420024188036a200241a8016a4120107402402001450d002004a7450d002005102e0b200228029003220041046a2201417f4c0d0020022802880321030240024020010d00410121050c010b2001102c2205450d020b200241003602102002200136020c200220053602082000200241086a1076200241086a20032000107420023502102104200235020821070240200228028c03450d002003102e0b200241a0036a240020044220862007840f0b1038000b1036000bff0101067f230041c0006b2203240020032001360204200341086a200210dc08200341206a41186a2204200341046a200341086a41106a200341086a41086a2205200328020822064101461b2903001002220141186a290000370300200341206a41106a2207200141106a290000370300200341206a41086a2208200141086a290000370300200320012900003703202001102e200041186a2004290300370000200041106a2007290300370000200041086a20082903003700002000200329032037000002402006450d002005280200450d00200328020c102e0b024020022802002200450d00200241046a280200450d002000102e0b200341c0006a24000bff0101067f230041c0006b2203240020032001360204200341086a200210dc08200341206a41186a2204200341046a200341086a41106a200341086a41086a2205200328020822064101461b2903001007220141186a290000370300200341206a41106a2207200141106a290000370300200341206a41086a2208200141086a290000370300200320012900003703202001102e200041186a2004290300370000200041106a2007290300370000200041086a20082903003700002000200329032037000002402006450d002005280200450d00200328020c102e0b024020022802002200450d00200241046a280200450d002000102e0b200341c0006a24000bef1103037f017e017f230041c0036b220224002002428080808080203702cc012002200136020c2002200041d4e2cc0020011b3602082002200241086a3602c8012002200241c8016a10ad010240024002400240024020022802000d00200228020c220020022802042201490d002001417f4c0d040240024020010d00410121030c010b200110322203450d04200228020c21000b024020002001490d0020032002280208200110e9082104200228020c22002001490d032002200020016b36020c2002200228020820016a3602082004450d012001ad22054220862005842105200228020c450d022005a7450d010b2003102e0b200241146a410f360200200241dc016a4102360200200242023702cc01200241a0a7c9003602c8012002410436020c200241d4aec9003602082002200241086a3602d8012002200241b8036a360210200241c8016a41b0a7c9001044000b200220054220883e0294032002200436029003200241c8016a20024190036a109903024002400240024002400240024002400240024020022d00c8014101470d00410021010c010b200241086a200241c8016a41017241c00110e9081a200241c8016a200241086a41c00110e9081a4120102c2200450d0a200020022903c801370000200041186a200241c8016a41186a290300370000200041106a200241c8016a41106a290300370000200041086a200241c8016a41086a290300370000200241003602a80320024198036a41c0004104200241a8036a107d20024198036a41086a28020021062002280298034101460d01200228029c03220141e7e485f30636020c200142a08080808004370204200120003602004120102c2203450d0a200320022903e801370000200341186a20024180026a290300370000200341106a200241f8016a290300370000200341086a200241f0016a2903003700000240200641047622004101470d0020024290808080c0003702ac03200220013602a80320024198036a41c0004104200241a8036a107d20024198036a41086a28020021002002280298034101460d03200228029c032101200041047621000b200120033602102001411c6a41e2c289ab06360200200141146a42a080808080043702004120102c2203450d0a2003200229038802370000200341186a200241a0026a290300370000200341106a20024198026a290300370000200341086a20024190026a290300370000024020004102470d00200242a0808080c0003702ac03200220013602a80320024198036a41c0004104200241a8036a107d20024198036a41086a28020021002002280298034101460d04200228029c032101200041047621000b200120033602202001412c6a41e9dabdf306360200200141246a42a080808080043702004120102c2203450d0a200320022903a802370000200341186a200241c0026a290300370000200341106a200241b8026a290300370000200341086a200241b0026a290300370000024020004103470d00200242b0808080c0003702ac03200220013602a80320024198036a41e0004104200241a8036a107d20024198036a41086a28020021002002280298034101460d05200228029c032101200041047621000b200120033602302001413c6a41f0c2c98b06360200200141346a42a080808080043702004120102c2203450d0a200320022903c802370000200341186a200241e0026a290300370000200341106a200241d8026a290300370000200341086a200241d0026a290300370000024020004104470d00200242c0808080c0003702ac03200220013602a80320024198036a4180014104200241a8036a107d20024198036a41086a28020021002002280298034101460d06200228029c032101200041047621000b20012003360240200141cc006a41e1e69df306360200200141c4006a42a080808080043702004120102c2203450d0a200320022903e802370000200341186a20024180036a290300370000200341106a200241f8026a290300370000200341086a200241f0026a290300370000024020004105470d00200242d0808080c0003702ac03200220013602a80320024198036a41a0014104200241a8036a107d20024198036a41086a28020021002002280298034101460d07200228029c032101200041047621000b20012003360250200141dc006a41e1ea91cb06360200200141d4006a42a080808080043702000b02402005a7450d002004102e0b41e500410120011b2204102c2203450d09200241003602d001200220043602cc01200220033602c80120010d06200241003a0008200241c8016a200241086a4101107420022802c801210420022802d00121030c070b20060d080c090b2000450d080c070b2000450d070c060b2000450d060c050b2000450d050c040b2000450d040c030b200241013a0008200241c8016a200241086a410110744106200241c8016a10762001280200210420012802082203200241c8016a1076200241c8016a200420031074200241c8016a2001410c6a410410742001280210210420012802182203200241c8016a1076200241c8016a200420031074200241c8016a2001411c6a410410742001280220210420012802282203200241c8016a1076200241c8016a200420031074200241c8016a2001412c6a410410742001280230210420012802382203200241c8016a1076200241c8016a200420031074200241c8016a2001413c6a410410742001280240210420012802482203200241c8016a1076200241c8016a200420031074200241c8016a200141cc006a410410742001280250210420012802582203200241c8016a1076200241c8016a200420031074200241c8016a200141dc006a4104107420022802d001210320022802c80121040240200141046a280200450d002001280200102e0b0240200141146a280200450d002001280210102e0b0240200141246a280200450d002001280220102e0b0240200141346a280200450d002001280230102e0b0240200141c4006a280200450d002001280240102e0b0240200141d4006a280200450d002001280250102e0b200041ffffffff0071450d002001102e0b200241c0036a24002003ad4220862004ad840f0b2001200041b8b2c0001056000b1036000b1038000b9a0c02067f047e23004190026b22022400200241003a00800102402001450d002002200041d4e2cc0020011b22002d00003a0060200241013a008001024020014101460d00200220002d00013a0061200241023a00800120014102460d00200220002d00023a0062200241033a00800120014103460d00200220002d00033a0063200241043a00800120014104460d00200220002d00043a0064200241053a00800120014105460d00200220002d00053a0065200241063a00800120014106460d00200220002d00063a0066200241073a00800120014107460d00200220002d00073a0067200241083a00800120014108460d00200220002d00083a0068200241093a00800120014109460d00200220002d00093a00692002410a3a0080012001410a460d00200220002d000a3a006a2002410b3a0080012001410b460d00200220002d000b3a006b2002410c3a0080012001410c460d00200220002d000c3a006c2002410d3a0080012001410d460d00200220002d000d3a006d2002410e3a0080012001410e460d00200220002d000e3a006e2002410f3a0080012001410f460d00200220002d000f3a006f200241103a00800120014110460d00200220002d00103a0070200241113a00800120014111460d00200220002d00113a0071200241123a00800120014112460d00200220002d00123a0072200241133a00800120014113460d00200220002d00133a0073200241143a00800120014114460d00200220002d00143a0074200241153a00800120014115460d00200220002d00153a0075200241163a00800120014116460d00200220002d00163a0076200241173a00800120014117460d00200220002d00173a0077200241183a00800120014118460d00200220002d00183a0078200241193a00800120014119460d00200220002d00193a00792002411a3a0080012001411a460d00200220002d001a3a007a2002411b3a0080012001411b460d00200220002d001b3a007b2002411c3a0080012001411c460d00200220002d001c3a007c2002411d3a0080012001411d460d00200220002d001d3a007d2002411e3a0080012001411e460d00200220002d001e3a007e2002411f3a0080012001411f460d00200241106a2203200241e0006a41106a2204290300370300200241086a2205200241e0006a41086a2206290300370300200220002d001f3a007f200241186a2200200241e0006a41186a2207290300370300200241203a0080012002200229036022083703202002200837030020014120470d01200241206a41186a20002903002208370300200241206a41106a20032903002209370300200241206a41086a2005290300220a37030020022002290300220b37032020072008370300200420093703002006200a3703002002200b370360200241b8016a41d9fcc6004106108102200241c8016a41dcf1cb004107108102024002404120102c2201450d00200242203702ec01200220013602e801200241e8016a200241e0006a41201074200241f8016a20022802e801220120022802f001220010d8032002410c6a200120006a36020020022001360208200220024188026a3602042002200241f8016a360200200241d8016a2002107c024020022802ec01450d002001102e0b20022802e001220041206a2201417f4c0d010240024020010d00410121030c010b2001102c2203450d010b2002410036020820022001360204200220033602002002200241b8016a411010742002200241c8016a41101074200220022802d801220120001074024020022802dc01450d002001102e0b200241e0006a20022802002200200228020810c902200241a8016a28020021012002290360210802402002280204450d002000102e0b4104102c2200450d00200242043702642002200036026020022001410020084201511b360220200241e0006a200241206a41041074200235026821082002350260210920024190026a240020092008422086840f0b1036000b1038000b200241003a0080010b2002412c6a410f360200200241f4006a410236020020024202370264200241a0a7c90036026020024104360224200241f0aec9003602202002200241206a360270200220024188026a360228200241e0006a41b0a7c9001044000bd10504017f027e017f037e23004180086b22022400200241d0036a200041d4e2cc0020011b200110a602024020022903b8044203510d00200241d0036a41c8036a2802002101200241086a200241d0036a41c80310e9081a200241d0036a200241086a41c80310e9081a200241a0076a200241e8046a220010970442002103200241b0076a200120022903a00722044200420020022d00a90741004720022d00a807220510e70442002106024020022903b0074201520d00427f427f200241c0076a2903002206200241d0076a2903007c20022903b8072203200241c8076a2903007c22072003542201ad7c22032001200320065420032006511b22011b2206200241e0076a2903007c427f200720011b2203200241d8076a2903007c22072003542201ad7c22032001200320065420032006511b22011b2106427f200720011b21030b200241f0076a290300210720022903e8072108024020022903b8044202510d0020022d00d00341ff01714102470d0020022802d803450d0020022802d403102e0b2000108b022002410036021020024201370308200220043703d003200241086a200241d0036a41081074024002400240024020050e03000102030b200241003a00d003200241086a200241d0036a410110740c020b200241013a00d003200241086a200241d0036a410110740c010b200241023a00d003200241086a200241d0036a410110740b2002427f200620077c200320087c22042003542201ad7c22032001200320065420032006511b22011b3703d8032002427f200420011b3703d003200241086a200241d0036a41101074200235021021062002350208210320024180086a240020032006422086840f0b200241bc076a410f3602002002411c6a41023602002002420237020c200241a0a7c900360208200241043602b40720024188afc9003602b0072002200241b0076a3602182002200241f8076a3602b807200241086a41b0a7c9001044000bd60402017f027e23004180086b2202240020024198046a200041d4e2cc0020011b200110a60202402002290380054203510d0020024198046a41c8036a2802002101200241d0006a20024198046a41c80310e9081a20024198046a200241d0006a41c80310e9081a200241e8076a200241b0056a2200109704200241086a200120022903e8074200420020022d00f10741004720022d00f00710e70402402002290380054202510d0020022d00980441ff01714102470d0020022802a004450d00200228029c04102e0b2000108b0220024100360258200242013703500240024020022903084201510d00200241003a009804200241d0006a20024198046a410110740c010b200241013a009804200241d0006a20024198046a41011074200229031021032002200241086a41106a2903003703a0042002200337039804200241d0006a20024198046a41101074200241206a29030021032002200241286a2903003703a0042002200337039804200241d0006a20024198046a41101074200241306a29030021032002200241386a2903003703a0042002200337039804200241d0006a20024198046a411010740b200229034021032002200241c8006a2903003703a0042002200337039804200241d0006a20024198046a41101074200235025821032002350250210420024180086a240020042003422086840f0b200241146a410f360200200241e4006a410236020020024202370254200241a0a7c9003602502002410436020c2002419cafc9003602082002200241086a3602602002200241f8076a360210200241d0006a41b0a7c9001044000bd60201047f230041c0006b2202240041d0b0c9002103411321044109210502400240024002400240024002400240024002400240200141ff01710e0b000102030405060708090a000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a418caacc001044000b41e0c3cb00210341092104410021050c080b41a186ca00210341112104410121050c070b41c986ca002103410f2104410221050c060b41c6b0c9002103410a2104410321050c050b41b9b0c9002103410d2104410421050c040b41a7b0c900210341122104410521050c030b41ab85ca00210341082104410621050c020b41e086ca00210341102104410721050c010b4194b0c9002103410821050b200041831e3b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000bf50101047f230041306b22022400200241c8afc9004113108102200241106a41f1afc900410a108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000bf50101047f230041306b22022400200241c8afc9004113108102200241106a41fbafc9004106108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000bf50101047f230041306b22022400200241c8afc9004113108102200241106a41fbafc9004106108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000ba70401037f230041900c6b22042400200441106a200110fb07200441086a20042802102205200428021841d4e2cc004100410010ca0402400240024002402004280208450d000240200428020c220620024d0d00200441a8076a410a10f307200041013602002000410c6a200441b0076a280200360200200020042903a8073702040c020b200441d8096a200110fb07200441a8076a20042802d809220220042802e00910af0520042802a8072101200441e4096a200441a8076a41047241ac0210e9081a024002402001411c460d00200441fc046a200441e4096a41ac0210e9081a024020042802dc09450d002002102e0b200441d0026a200441fc046a41ac0210e9081a20042001360220200441206a410472200441d0026a41ac0210e9081a200441a8076a200441206a10970420042903a8072003580d01200441a8076a410910f307200041013602002000410c6a200441b0076a280200360200200020042903a807370204200441206a108b020c030b024020042802dc09450d002002102e0b200441a8076a410310f307200041013602002000410c6a200441b0076a280200360200200020042903a8073702040c020b200041086a200441206a41b00210e9081a20004100360200200041b8026a20063602002004280214450d030c020b200441a8076a410310f307200041013602002000410c6a200441b0076a280200360200200020042903a8073702040b2004280214450d010b2005102e0b200441900c6a24000bb40b06017f017e047f017e017f017e23004190066b22052400200541bd036a200341086a290000370000200541c5036a200341106a290000370000200541cd036a200341186a290000370000200541023a00b4032005410a3a00b003200520032900003700b503200541b0036a10fe01200541b0036a200410970420052903b00321062002280204210702404110102c2208450d00200841f8f7c60036020c2008410136020820084281808080103702004110102c2209450d0020094190f8c60036020c20094101360208200942818080801037020020082008280200417f6a220a3602000240200a0d002008280208200828020c2802001103000240200828020c280204450d002008280208102e0b200841046a220a200a280200417f6a220a360200200a0d002008102e0b200541d8006a200441b00210e9081a200541a0036a41026a2208200541256a41026a2d00003a000020054188036a41086a22042005410c6a41086a29010037030020054188036a41106a220a2005410c6a41106a290100370300200520052f00253b01a0032005200529010c37038803024002402009280208200541d8006a200928020c28020c1101000d00200541c8006a41023a0000200541c0006a41003a000020092009280200417f6a22083602004200210b2005420037033020054201370328024020080d002009280208200928020c2802001103000240200928020c280204450d002009280208102e0b200941046a22082008280200417f6a220836020020080d002009102e0b200541d8006a10dc0241012109410221080c010b200541b0036a200541d8006a41b00210e9081a200541ec056a2001360200200541e0056a41086a2007360200200541e0056a41106a200529038803370300200541f8056a2004290300370300200541e0056a41206a200a290300370300200541003a00e405200541013a00e005200520052f01a0033b00e505200520082d00003a00e7052005200936028806200541286a200541b0036a200541e0056a10dd0220052903284201512109200541286a41206a2d000021082005290330210b0b200541b0036a41186a200341186a290000370300200541b0036a41106a200341106a290000370300200541b0036a41086a200341086a290000370300200520032900003703b0032005200541d0006a28000036005f200520052900493703580240024020090d00410621090c010b2005200528005f3600e705200520052903583703e00541062109200b4202510d00200520052800e70536008f03200520052903e00537038803200821090b200541d8006a41086a2208200541b0036a41086a2204290300370300200541d8006a41106a220a200541b0036a41106a2201290300370300200541d8006a41186a2207200541b0036a41186a220c290300370300200520052903b00337035820052005290388033703a0032005200528008f033600a703200541043a00b4032005410a3a00b003200541bd036a2008290300370000200541c5036a200a290300370000200541cd036a2007290300370000200541d8036a20093a0000200520052903583700b503200541d5036a20052f0088033b0000200541d7036a2005418a036a2d00003a0000200541d9036a20052903a003370000200541e0036a20052800a703360000200541fc036a200541e0056a41186a280200360200200541f4036a200541e0056a41106a290200370200200541ec036a200541e0056a41086a290200370200200541e4036a20052902e005370200200541b0036a10fe01200541286a41106a290300210d200c200341186a2900003703002001200341106a2900003703002004200341086a290000370300200520032900003703b003200541b0036a10f907210302402002410c6a28020041ffffff3f71450d002002280208102e0b0240200241186a28020041ffffff3f71450d002002280214102e0b200020033602082000200d2006200ba71b37030020054190066a24000f0b1036000bba0503067f027e067f230041c0006b22012400200141106a200010fb0720012802102202200128021810ff0102402001280214450d002002102e0b200141106a200010f60720012802102202200128021810ff0102402001280214450d002002102e0b200141106a41186a22034200370300200141106a41106a22044200370300200141106a41086a2205420037030020014200370310200141106a41c8afc9004113108102200141306a41dbafc90041091081022003200141306a41086a220629000037030020042001290030370300200141306a200141106a4120108d0320012902344200200128023022021b220742ffffffff0f8321082002410120021b2109024002402007422088a7220a0d004100210b0c010b4100210c4100210b4100210d0240034002400240200b450d002009200d4105746a21022009200d200c6a4105746a210e034020022000412010ec08450d02200e2002290000370000200e41186a200241186a290000370000200e41106a200241106a290000370000200e41086a200241086a290000370000200e41206a210e200241206a2102200d41016a220d200a490d000c040b0b2009200d4105746a2102034020022000412010ec08450d01200241206a2102200d41016a220d200a490d000b4100210b0c030b200c417f6a210c200b41016a210b200d41016a220d200a490d000b0b0240200b0d004100210b0c010b2009200d200b6b4105746a2009200d4105746a200a200d6b41057410ea081a0b2001200936020020012008200a200b6b2202ad4220868437020420034200370300200442003703002005420037030020014200370310200141106a41c8afc9004113108102200141306a41dbafc90041091081022003200629000037030020042001290030370300200141106a200110e6040240200742ffffff3f83500d002009102e0b200141c0006a2400200241016a0bfa0203027f017e067f230041206b220224000240024020014102490d00200041206a22032000412010ec08417f4a0d002000290000210420002003290000370000200241186a2205200041186a2206290000370300200241106a2207200041106a2208290000370300200241086a2209200041086a220a290000370300200a200341086a2900003700002008200341106a2900003700002006200341186a29000037000020022004370300024020014103490d00200041206a210320002001417f6a22064105746a21080340200341206a22002002412010ec08417f4a0d012006450d0320032000290000370000200341186a200041186a290000370000200341106a200041106a290000370000200341086a200041086a290000370000200021032006417f6a22064101470d000b200821030b20032002290300370000200341186a2005290300370000200341106a2007290300370000200341086a20092903003700000b200241206a24000f0b2001200141d4d1cc00103c000bf50101047f230041306b22022400200241c8afc9004113108102200241106a41f1afc900410a108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000be909010e7f230041c0006b220424002002410020031b21052000410020011b2106200241206a200220031b2107200041206a200020011b2108200020014105746a2109200220034105746a210a4101210b41002103410021024101210c4100210d4100210e02400240034002400240024020050d002006450d010c020b02402006450d00024020052006412010ec08220f0d00410020082008200946220f1b2106410020072007200a4622101b21052008200841206a200f1b21082007200741206a20101b21070c040b200f417f4a0d02200441186a220f200541186a290000370300200441106a2210200541106a290000370300200441086a2211200541086a2900003703002004200529000037030002400240200e200d470d00200d41016a2205200d490d07200d410174220e2005200e20054b1b22054104200541044b1b220541ffffff3f71200546210e2005410574210502400240200d0d00200441003602300c010b200441013602382004200c3602302004200d4105743602340b200441206a2005200e200441306a107d2004280228210520042802204101460d012004280224210c200d210e2005410576210d0b200c200e4105746a22052004290300370000200541186a200f290300370000200541106a2010290300370000200541086a2011290300370000410020072007200a46220f1b2105200e41016a210e2007200741206a200f1b21070c040b20050d040c050b200441186a220f200541186a290000370300200441106a2210200541106a290000370300200441086a2211200541086a2900003703002004200529000037030002400240200e200d470d00200d41016a2206200d490d06200d41017422052006200520064b1b22064104200641044b1b220641ffffff3f7120064621052006410574210602400240200d0d00200441003602300c010b200441013602382004200c3602302004200d4105743602340b200441206a20062005200441306a107d2004280228210620042802204101460d012004280224210c200d210e2006410576210d0b200c200e4105746a22062004290300370000200641186a200f290300370000200641106a2010290300370000200641086a201129030037000041002106410020072007200a46220f1b2105200e41016a210e2007200741206a200f1b21070c030b20060d030c040b200c200e200020011084080240200d41ffffff3f71450d00200c102e0b0240200341ffffff3f71450d00200b102e0b200441c0006a24000f0b200441186a220f200641186a290000370300200441106a2210200641106a290000370300200441086a2211200641086a290000370300200420062900003703000240024020022003470d00200341016a22062003490d04200341017422022006200220064b1b22064104200641044b1b220641ffffff3f712006462102200641057421060240024020030d00200441003602300c010b200441013602382004200b360230200420034105743602340b200441206a20062002200441306a107d2004280228210620042802204101460d012004280224210b20032102200641057621030b200b20024105746a22062004290300370000200641186a200f290300370000200641106a2010290300370000200641086a2011290300370000410020082008200946220f1b2106200241016a21022008200841206a200f1b21080c010b0b2006450d010b1036000b1038000bd60201047f230041c0006b2202240041d0b0c9002103411321044109210502400240024002400240024002400240024002400240200141ff01710e0b000102030405060708090a000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a418caacc001044000b41e0c3cb00210341092104410021050c080b41a186ca00210341112104410121050c070b41c986ca002103410f2104410221050c060b41c6b0c9002103410a2104410321050c050b41b9b0c9002103410d2104410421050c040b41a7b0c900210341122104410521050c030b41ab85ca00210341082104410621050c020b41e086ca00210341102104410721050c010b4194b0c9002103410821050b20004183203b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000bf50101047f230041306b2202240020024181b0c9004113108102200241106a41f1afc900410a108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000bf50101047f230041306b2202240020024181b0c9004113108102200241106a41fbafc9004106108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000bf50101047f230041306b2202240020024181b0c9004113108102200241106a41fbafc9004106108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000ba70401037f230041900c6b22042400200441106a2001108508200441086a20042802102205200428021841d4e2cc004100410010ca0402400240024002402004280208450d000240200428020c220620024d0d00200441a8076a410a10fd07200041013602002000410c6a200441b0076a280200360200200020042903a8073702040c020b200441d8096a2001108508200441a8076a20042802d809220220042802e00910af0520042802a8072101200441e4096a200441a8076a41047241ac0210e9081a024002402001411c460d00200441fc046a200441e4096a41ac0210e9081a024020042802dc09450d002002102e0b200441d0026a200441fc046a41ac0210e9081a20042001360220200441206a410472200441d0026a41ac0210e9081a200441a8076a200441206a10970420042903a8072003580d01200441a8076a410910fd07200041013602002000410c6a200441b0076a280200360200200020042903a807370204200441206a108b020c030b024020042802dc09450d002002102e0b200441a8076a410310fd07200041013602002000410c6a200441b0076a280200360200200020042903a8073702040c020b200041086a200441206a41b00210e9081a20004100360200200041b8026a20063602002004280214450d030c020b200441a8076a410310fd07200041013602002000410c6a200441b0076a280200360200200020042903a8073702040b2004280214450d010b2005102e0b200441900c6a24000bb40b06017f017e047f017e017f017e23004190066b22052400200541bd036a200341086a290000370000200541c5036a200341106a290000370000200541cd036a200341186a290000370000200541023a00b4032005410b3a00b003200520032900003700b503200541b0036a10fe01200541b0036a200410970420052903b00321062002280204210702404110102c2208450d00200841f8f7c60036020c2008410136020820084281808080103702004110102c2209450d0020094190f8c60036020c20094101360208200942818080801037020020082008280200417f6a220a3602000240200a0d002008280208200828020c2802001103000240200828020c280204450d002008280208102e0b200841046a220a200a280200417f6a220a360200200a0d002008102e0b200541d8006a200441b00210e9081a200541a0036a41026a2208200541256a41026a2d00003a000020054188036a41086a22042005410c6a41086a29010037030020054188036a41106a220a2005410c6a41106a290100370300200520052f00253b01a0032005200529010c37038803024002402009280208200541d8006a200928020c28020c1101000d00200541c8006a41023a0000200541c0006a41003a000020092009280200417f6a22083602004200210b2005420037033020054201370328024020080d002009280208200928020c2802001103000240200928020c280204450d002009280208102e0b200941046a22082008280200417f6a220836020020080d002009102e0b200541d8006a10dc0241012109410221080c010b200541b0036a200541d8006a41b00210e9081a200541ec056a2001360200200541e0056a41086a2007360200200541e0056a41106a200529038803370300200541f8056a2004290300370300200541e0056a41206a200a290300370300200541003a00e405200520052f01a0033b00e5052005200936028806200541023a00e005200520082d00003a00e705200541286a200541b0036a200541e0056a10dd0220052903284201512109200541286a41206a2d000021082005290330210b0b200541b0036a41186a200341186a290000370300200541b0036a41106a200341106a290000370300200541b0036a41086a200341086a290000370300200520032900003703b0032005200541d0006a28000036005f200520052900493703580240024020090d00410621090c010b2005200528005f3600e705200520052903583703e00541062109200b4202510d00200520052800e70536008f03200520052903e00537038803200821090b200541d8006a41086a2208200541b0036a41086a2204290300370300200541d8006a41106a220a200541b0036a41106a2201290300370300200541d8006a41186a2207200541b0036a41186a220c290300370300200520052903b00337035820052005290388033703a0032005200528008f033600a703200541043a00b4032005410b3a00b003200541bd036a2008290300370000200541c5036a200a290300370000200541cd036a2007290300370000200541d8036a20093a0000200520052903583700b503200541d5036a20052f0088033b0000200541d7036a2005418a036a2d00003a0000200541d9036a20052903a003370000200541e0036a20052800a703360000200541fc036a200541e0056a41186a280200360200200541f4036a200541e0056a41106a290200370200200541ec036a200541e0056a41086a290200370200200541e4036a20052902e005370200200541b0036a10fe01200541286a41106a290300210d200c200341186a2900003703002001200341106a2900003703002004200341086a290000370300200520032900003703b003200541b0036a108308210302402002410c6a28020041ffffff3f71450d002002280208102e0b0240200241186a28020041ffffff3f71450d002002280214102e0b200020033602082000200d2006200ba71b37030020054190066a24000f0b1036000bba0503067f027e067f230041c0006b22012400200141106a200010850820012802102202200128021810ff0102402001280214450d002002102e0b200141106a200010800820012802102202200128021810ff0102402001280214450d002002102e0b200141106a41186a22034200370300200141106a41106a22044200370300200141106a41086a2205420037030020014200370310200141106a4181b0c9004113108102200141306a41dbafc90041091081022003200141306a41086a220629000037030020042001290030370300200141306a200141106a4120108d0320012902344200200128023022021b220742ffffffff0f8321082002410120021b2109024002402007422088a7220a0d004100210b0c010b4100210c4100210b4100210d0240034002400240200b450d002009200d4105746a21022009200d200c6a4105746a210e034020022000412010ec08450d02200e2002290000370000200e41186a200241186a290000370000200e41106a200241106a290000370000200e41086a200241086a290000370000200e41206a210e200241206a2102200d41016a220d200a490d000c040b0b2009200d4105746a2102034020022000412010ec08450d01200241206a2102200d41016a220d200a490d000b4100210b0c030b200c417f6a210c200b41016a210b200d41016a220d200a490d000b0b0240200b0d004100210b0c010b2009200d200b6b4105746a2009200d4105746a200a200d6b41057410ea081a0b2001200936020020012008200a200b6b2202ad4220868437020420034200370300200442003703002005420037030020014200370310200141106a4181b0c9004113108102200141306a41dbafc90041091081022003200629000037030020042001290030370300200141106a200110e6040240200742ffffff3f83500d002009102e0b200141c0006a2400200241016a0bc210050b7f017e087f087e0b7f230022042105200441c0016b4160712206240002400240200141ffffff3f712001470d0020014105742207417f4c0d0041012108024002402007450d002007102c2208450d0120074105762109200821042007210a0340200a450d0120042000290000370000200441086a200041086a290000370000200441106a200041106a290000370000200441186a200041186a290000370000200441206a2104200a41606a210a200041206a21002009417f6a22090d000b0b2008200110fc02200641e0006a41186a220b4200370300200641e0006a41106a220c4200370300200641e0006a41086a220d42003703002006420037036020064180016a4181b0c9004113108102200d20064180016a41086a2200290000370300200620062900800137036020064180016a41dbafc9004109108102200b2000290000370300200c20062900800137030020064180016a200641e0006a4120108d032006280280012204410120041b210e200629028401420020041b220f422088a72204450d02200e20044105746a2110200641206a410c72211120064180016a410c6a2112200e2113034020064180016a41186a2214201341186a29000037030020064180016a41106a201341106a2900003703002000201341086a2900003703002006201329000037038001200641106a20064180016a10ff0720064180016a200628021022152006280218221610b305200d201241086a290200370300200c201241106a2802003602002006201229020037036020062802a00121170240200628028801220a450d00200629038001211820112006290360370200201141086a200d290300370200201141106a200c28020036020020062018370320201721040b2006200a360228200641003602880120062903382119200620062903980122183703382006290330211a2006200629039001221b3703302006290320211c2006200629038001221d3703202006290328211e2006200629038801221f37032802400240201ea722200d00200421170c010b2006201c3703402006201e3703482006201a370350201e422088a721212006201937035802400240201aa722040d00201a422088a721222019422088a721042019a72123202021240c010b202020044105746a212220202125202021240340200b202541186a2900002218370300200c202541106a290000221b370300200d202541086a290000221d37030020002025290000221e370000200041086a2226201d370000200041106a2227201b370000200041186a222820183700002006201e37036020062024360284012006202036028001202541206a212541002104024002400240024020010e020201000b410021042001210a0340200a410176222920046a210920092004200820094105746a2000412010ec084101481b2104200a20296b220a41014b0d000b0b200820044105746a2000412010ec08450d010b20242000290000370000202441186a2028290000370000202441106a2027290000370000202441086a2026290000370000202441206a21240b20252022470d000b200628025c210420062802582123200628025421220b201fa7212a2006202136024c200620203602482006202420206b4105753602500240024020040d00202221240c010b202220044105746a212020222125202221240340200b202541186a2900002218370300200c202541106a290000221b370300200d202541086a290000221d37030020002025290000221e370000200041086a2226201d370000200041106a2227201b370000200041186a222820183700002006201e37036020062024360284012006202236028001202541206a212541002104024002400240024020010e020201000b410021042001210a0340200a410176222920046a210920092004200820094105746a2000412010ec084101481b2104200a20296b220a41014b0d000b0b200820044105746a2000412010ec08450d010b20242000290000370000202441186a2028290000370000202441106a2027290000370000202441086a2026290000370000202441206a21240b20252020470d000b0b20062023360258200620223602542006202420226b41057536025c2006290348211f2006290340211d2006290350211b200629035821180240202a450d000240200628022c41ffffff3f71450d002006280228102e0b200628023841ffffff3f71450d002006280234102e0b2006201d3703202006201f3703282006201b370330200620183703380b2006201f370388012006201b37039001201420183703002006201d37038001200620173602a00102400240201fa722040d002015201610ff010c010b2018a7210a2015201620064180016a10c0050240201f422088a741ffffff3f71450d002004102e0b200a41ffffff3f71450d00201b422088a7102e0b201341206a211302402006280214450d002015102e0b2017210420132010470d000c030b0b1036000b1038000b0240200f42ffffff3f83500d00200e102e0b20064198016a2200420037030020064190016a2204420037030020064180016a41086a220a42003703002006420037038001200641e0006a4181b0c9004113108102200a200641e0006a41086a22092900003703002006200629006037038001200641e0006a41c7c3cb004107108102200020092900003703002004200629006037030020064180016a2002200310c5052000420037030020044200370300200a42003703002006420037038001200641e0006a4181b0c9004113108102200a20092900003703002006200629006037038001200641e0006a41dbc3cb004105108102200020092900003703002004200629006037030020064180016a412010ff0102402007450d002008102e0b200524000bf50101047f230041306b2202240020024181b0c9004113108102200241106a41f1afc900410a108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000bdc0301057f230041f0006b2201240020002d00002102200141186a2203200041196a290000370300200141106a2204200041116a290000370300200141086a2205200041096a2900003703002001200029000137030002400240024020020d00200141c0006a41186a22004200370300200141c0006a41106a22024200370300200141c0006a41086a420037030020014200370340200141c0006a4181b0c9004113108102200141206a41dbc3cb0041051081022000200141206a41086a29000037030020022001290020370300200141c0006a412010ff010c010b200141206a41186a2003290300370300200141206a41106a2004290300370300200141206a41086a200529030037030020012001290300370320200141c0006a41186a22004200370300200141c0006a41106a22024200370300200141c0006a41086a420037030020014200370340200141c0006a4181b0c9004113108102200141e0006a41dbc3cb0041051081022000200141e0006a41086a290000370300200220012900603703004120102c2200450d012001422037026420012000360260200141e0006a200141206a41201074200141c0006a412020012802602200200128026810b2012001280264450d002000102e0b200141f0006a24000f0b1036000b130020004106360204200041e4b0c9003602000b3400200041c8afc90036020420004100360200200041146a4106360200200041106a41d4e0c900360200200041086a42133702000b2501017f230041306b22022400200241003602102000200241086a10e705200241306a24000b2901017f230041106b2202240020024100360208200242013703002000200210b301200241106a24000b340020004181b0c90036020420004100360200200041146a4106360200200041106a41f4e8c900360200200041086a42133702000b4201027f230041106b2202240002404101102c22030d001036000b2000420137020420002003360200200241003a000f20002002410f6a41011074200241106a24000b6401027f230041c0026b220224002002411c36020802404101102c2203450d002000420137020420002003360200200241003a00bf022000200241bf026a4101107402402002280208411c460d00200241086a108b020b200241c0026a24000f0b1036000be22505027f017e027f017e037f230041b0046b22022400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e1c0102030405060708090a0b0c0d0e0f101112131415161718191a1b00010b200241086a200141386a10ca0120024180026a41286a200141306a29030037030020024180026a41206a200141286a29030037030020024180026a41186a200141206a29030037030020024180026a41106a200141186a29030037030020024180026a41086a200141106a2903003703002002200141086a29030037038002200141f8016a280200210320024180026a41306a200241086a41c00110e9081a20014180026a2903002104200241086a20024180026a41f00110e9081a200041086a200241086a41f00110e9081a20004180026a2004370300200041f8016a20033602002000411b3602000c1b0b20024180026a200141086a10cb0120004100360200200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c1a0b20024180026a200141046a10cc0120004101360200200041246a200241a0026a2802003602002000411c6a20024198026a290300370200200041146a20024190026a2903003702002000410c6a20024188026a29030037020020002002290380023702040c190b20024180026a200141086a10cd01200041086a20024180026a41a00210e9081a200041023602000c180b20004103360200200041086a200141086a2903003703000c170b41042103200141046a210502400240024002400240024002400240024020012d0004417f6a0e050102030405000b41e2a0cc00412841e89bc4001039000b200141086a2802002105410121030c040b41022103200241086a41026a200541036a2d00003a000020024180026a41086a200141146a29020037030020024190026a2001411c6a29020037030020024198026a200141246a2d00003a0000200220052f00013b010820022001410c6a29020037038002200141086a2802002105200141286a28020021010c040b200141086a2802002105410321030c020b2002410a6a200541036a2d00003a000020024180026a41086a200141146a29020037030020024190026a2001411c6a29020037030020024198026a200141246a2d00003a0000200220052f00013b010820022001410c6a2902003703800220012d00254100472106200141086a2802002105200141286a28020021010c030b200141086a2802002105410521030b0b0b200020033a0004200020022f01083b0005200020063a0025200020022f01fc013b0126200041086a20053602002000410c6a200229038002370200200041286a2001360200200041076a2002410a6a2d00003a0000200041146a20024180026a41086a2903003702002000411c6a20024190026a290300370200200041246a20024198026a2d00003a0000200041043602000c160b20024180026a200141086a10ce01200041086a20024180026a41e00010e9081a200041053602000c150b20024180026a200141046a10cf01200041063602002000410c6a20024188026a28020036020020002002290380023702040c140b20024180026a200141086a10d001200041086a20024180026a41d80010e9081a200041073602000c130b10d101000b02400240200128020422050d00410021030c010b20024180026a41186a200141286a29000037030020024180026a41106a200141206a29000037030020024188026a200141186a29000037030020024180026a41286a200141386a29000037030020024180026a41306a200141c0006a29000037030020024180026a41386a200141c8006a29000037030020024180026a41c8006a200141d8006a29000037030020024180026a41d0006a200141e0006a29000037030020024180026a41d8006a200141e8006a2900003703002002200141106a290000370380022002200141306a2900003703a0022002200141d0006a2900003703c00220024180026a41f8006a20014188016a29000037030020024180026a41f0006a20014180016a29000037030020024180026a41e8006a200141f8006a29000037030020024180026a4198016a200141a8016a29000037030020024180026a4190016a200141a0016a29000037030020024180026a4188016a20014198016a29000037030020024180026a41b8016a200141c8016a29000037030020024180026a41b0016a200141c0016a29000037030020024180026a41a8016a200141b8016a2900003703002002200141f0006a2900003703e002200220014190016a290000370380032002200141b0016a2900003703a0032001410c6a2802002201417f4c0d130240024020010d00410121030c010b2001102c2203450d150b20032005200110e9081a200241086a20024180026a41c00110e9081a0b200020033602042000410c6a2001360200200041086a2001360200200041106a200241086a41c00110e9081a200041093602000c110b20024180026a200141086a10d201200041086a20024180026a41980210e9081a2000410a3602000c100b20024180026a200141046a10d301200041046a20024180026a41e80010e9081a2000410b3602000c0f0b10d401000b20024180026a200141086a10d5012000410d360200200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c0d0b20024180026a200141086a10d6012000410e360200200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c0c0b20024180026a200141086a10d6012000410f360200200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c0b0b20024180026a200141086a10d70120004110360200200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c0a0b200141046a2103410721050240024002400240024002400240024020012d0004417f6a0e0701020304050607000b41e2a0cc00412841a4c3cb001039000b20024198026a200341196a29000037030020024190026a200341116a29000037030020024188026a200341096a2900003703002002200329000137038002410121050c050b20024198026a200341196a29000037030020024190026a200341116a29000037030020024188026a200341096a2900003703002002200329000137038002410221050c040b20024180026a41186a200341196a29000037030020024180026a41106a200341116a29000037030020024180026a41086a200341096a290000370300200241086a41086a200341296a290000370300200241086a41106a200341316a290000370300200241086a41186a200341396a29000037030020022003290001370380022002200341216a290000370308410321050c030b200241086a200141086a10c8012002418b026a200241086a41086a2802003600002002200229030837008302410421050c020b20024198026a200341196a29000037030020024190026a200341116a29000037030020024188026a200341096a2900003703002002200329000137038002410521050c010b20024198026a200341196a29000037030020024190026a200341116a29000037030020024188026a200341096a2900003703002002200329000137038002410621050b200020053a0004200020022903800237000520002002290308370025200020022f00fc013b00452000410d6a20024180026a41086a290300370000200041156a20024180026a41106a2903003700002000411d6a20024180026a41186a2903003700002000412d6a200241086a41086a290300370000200041356a200241086a41106a2903003700002000413d6a200241086a41186a290300370000200041c7006a200241fe016a2d00003a0000200041113602000c090b024002400240024002400240200141086a280200417f6a0e03010203000b41e2a0cc0041284184ccc2001039000b200141386a2903002104200141306a29030021074101210841012109024002400240024002402001410c6a2d00000e050104020300010b4104210920024180026a41046a200141206a2d00003a000020022001411c6a2800003602800220012f000d2001410f6a2d0000411074722106200141186a280200210a200141146a2802002103200141106a28020021050c030b20024188026a200141246a29000037030020024180026a41106a2001412c6a2d00003a000020022001411c6a2900003703800220012f000d2001410f6a2d0000411074722106200141186a280200210a200141146a2802002103200141106a2802002105410021090c020b200141186a2802002203417f4c0d0f200141106a28020021010240024020030d00410121050c010b2003102c2205450d110b20052001200310e9081a410221092003210a0c010b20024188026a200141246a29000037030020024180026a41106a2001412c6a2d00003a000020022001411c6a2900003703800220012f000d2001410f6a2d0000411074722106200141186a280200210a200141146a2802002103200141106a2802002105410321090b200241086a41106a20024180026a41106a2d00003a0000200241086a41086a20024180026a41086a290300370300200241046a41026a200241fc016a41026a2d00003a00002002200229038002370308200220022f00fc013b01040c030b2001410c6a28020022094108762106410221080c010b2001410c6a28020022094108762106410321080b0b200020022f01043b002d20004112360200200041386a2004370300200041306a2007370300200041186a200a360200200041146a2003360200200041106a2005360200200041086a20083602002000411c6a20022903083702002000410c6a2006410874200941ff017172360200200041246a200241086a41086a2903003702002000412c6a200241086a41106a2d00003a00002000412f6a200241066a2d00003a00000c080b20024180026a200141086a10d801200041086a20024180026a41f00010e9081a200041133602000c070b20024180026a200141086a10d901200041086a20024180026a41f80010e9081a200041143602000c060b024002400240024020012f0104417f6a0e03010200010b20024180026a200141086a10c90120022902840221042002280280022103410321010c020b20024180026a200141086a10c90120022902840221042002280280022103410121010c010b20012f0106210541b002102c2203450d0820024180026a200141086a28020010da01200320024180026a41b00210e9081a410221010b200020013b0104200041153602002000410c6a2004370200200041086a2003360200200041066a20053b01000c050b20024180026a200141086a10db01200041086a20024180026a41a80210e9081a200041163602000c040b20024180026a200141046a10dc01200041046a20024180026a41c80010e9081a200041173602000c030b20024180026a200141086a10dd01200041086a20024180026a41c80010e9081a200041183602000c020b20024180026a200141086a10de0120004119360200200041c0006a20024180026a41386a290300370300200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000c010b20024180026a200141086a10df012000411a360200200041c0006a20024180026a41386a290300370300200041386a20024180026a41306a290300370300200041306a20024180026a41286a290300370300200041286a20024180026a41206a290300370300200041206a20024180026a41186a290300370300200041186a20024180026a41106a290300370300200041106a20024180026a41086a290300370300200041086a2002290380023703000b200241b0046a24000f0b1038000b1036000b13002000410a360204200041c4fac9003602000bf30a04077f027e047f077e23002202210320024180026b41607122022400200241c0006a10910820022802402104024002400240024002400240024020022802482205450d00200241286a2004280200109208024020054101470d004100210620024180016a21070c030b200241286a41106a2903004200200228022822081b21092002290330420020081b210a200441c4006a2108200541c4006c41bc7f6a210b41002106200241106a41106a210c2004210d410121070340200241106a20082802001092082009200c29030042002002280210220e1b220f200a20022903184200200e1b2210562009200f562009200f511b220e1b2109200a2010200e1b210a20062007200e1b2106200d2008200e1b210d200741016a2107200841c4006a2108200b41bc7f6a220b0d000b2002200a3703800120022006360290012002200937038801200d0d010b2000411310930820022802442202450d02200241c4006c450d022004102e200324000f0b20024180016a2107200520064d0d020b2004200641c4006c6a220841186a220d290200210a20042005417f6a220641c4006c220b6a220e41c0006a280200210c200e41206a290200210f200e41286a2902002110200e41306a2902002111200e41386a2902002112200e2902002113200e2902082109200e2902102114200d200e41186a290200370200200829021021152008201437021020082902082114200820093702082008290200210920082013370200200841386a2012370200200841306a2011370200200841286a2010370200200841206a220e2802002105200e200f370200200841c0006a200c360200200220063602482002201537039001200220143703880120022009370380012002200a37039801200241d0006a41186a2007411c6a280000360200200241d0006a41106a200741146a290000370300200241d0006a41086a2007410c6a290000370300200220072900043703502002280244210e20024180016a41186a2208420037030020024180016a41106a2207420037030020024180016a41086a4200370300200242003703800120024180016a41de80ca004109108102200241f0006a418c81ca00410b1081022008200241f0006a41086a29000037030020072002290070370300200b41046a2208417f4c0d020240024020080d00410121070c010b2008102c2207450d040b2002410036027820022008360274200220073602702006200241f0006a107620042006200241f0006a109b0120024180016a412020022802702208200228027810b20102402002280274450d002008102e0b2009a721060240200e450d00200e41c4006c450d002004102e0b200241f0006a200610940820024180016a200228027022082002280278220e10ae0502402002280280012207450d002008200e10ff010b2002280274210e0240024020070d00200e450d012008102e0c010b20024198016a290300210920024190016a290300210a20024188016a280200210d200228028401210b0240200e450d002008102e0b0240200d450d00200d410574210e20072108034020022008200a200910fb01200841206a2108200e41606a220e0d000b0b200241a8016a2009370300200241a0016a200a37030020024180016a41186a2208200d36020020024194016a200b36020020024180016a41106a220e20073602002002418c016a200636020020024180016a41086a220741013a0000200241093a00800120024180016a10fe012008200241d0006a41186a280200360200200e200241d0006a41106a2903003703002007200241d0006a41086a29030037030020022002290350370380012002200536029c0120014180ce186a20024180016a41004180ce181095080b200041063a00000b200324000f0b200620051042000b1038000b1036000ba60d03077f017e0a7f23004190036b22012400200141206a22024200370300200141186a22034200370300200141086a41086a420037030020014200370308200141086a41de80ca004109108102200141a8026a418c81ca00410b1081022002200141a8026a41086a290000370300200320012900a8023703002001412036022c2001200141086a360228200141306a200141086a412010ed0202400240200128023022040d00410021050c010b200128023421062001200141306a41086a280200360244200120043602402001200141c0006a10ab010240024020012802000d000240024020012802042207200128024441c4006e2202200220074b1bad42c4007e2208422088a70d002008a72202417f4c0d000240024020020d00410421050c010b2002102c2205450d020b200241c4006ead2108024002402007450d00200141a8026a41017221094100210a03400240024002400240200128024422034104490d00200a41016a210a2001280240220b280000210c20012003417c6a220d3602442001200b41046a36024041002102200141003a00c8022003417b6a210302400340200d2002460d01200141a8026a20026a200b20026a220e41046a2d00003a00002001200e41056a3602402001200241016a220e3a00c802200120033602442003417f6a2103200e2102200e4120470d000b200141f0026a41186a2202200141a8026a41186a290300370300200141f0026a41106a2203200141a8026a41106a290300370300200141f0026a41086a220b200141a8026a41086a290300370300200120012903a8023703f002200e41ff01714120490d0120014188026a41086a220e200b29030037030020014188026a41106a220b200329030037030020014188026a41186a22032002290300370300200120012903f00237038802200141a8026a200141c0006a10930120012d00a8024101460d01200141e8016a41186a22022003290300370300200141e8016a41106a2203200b290300370300200141e8016a41086a220b200e29030037030020012001290388023703e801200141c8016a41086a220e200941086a290000370300200141c8016a41106a220d200941106a290000370300200141c8016a41186a220f200941186a290000370300200120092900003703c801200141a8016a41186a22102002290300370300200141a8016a41106a22022003290300370300200141a8016a41086a2203200b290300370300200120012903e8013703a80120014188016a41186a220b200f29030037030020014188016a41106a220f200d29030037030020014188016a41086a220d200e290300370300200120012903c80137038801200141e8006a41186a220e2010290300370300200141e8006a41106a22102002290300370300200141e8006a41086a22112003290300370300200120012903a801370368200141c8006a41186a2212200b290300370300200141c8006a41106a220b200f290300370300200141c8006a41086a220f200d29030037030020012001290388013703482008422088a722032008a7470d04200341016a22022003490d082003410174220d20022002200d491b22024104200241044b1bad42c4007e2208422088a74541027421022008a7210d20030d02200141003602a8020c030b200241ff0171450d00200141003a00c8020b2008a721022002450d08200241c4006c450d082005102e0c080b200141043602b002200120053602a8022001200341c4006c3602ac020b200141f0026a200d2002200141a8026a107d20012802f802210220012802f0024101460d0320012802f4022105200241c4006ead21080b2005200341c4006c6a2202200c360200200220012903683702042002410c6a2011290300370200200241146a20102903003702002002411c6a200e290300370200200220012903483702242002412c6a200f290300370200200241346a200b2903003702002002413c6a2012290300370200200842ffffffff0f83200341016aad422086842108200a2007470d000b0b2005450d030c040b20020d010b1038000b1036000b41002105200141003602f802200142013703f0022001410a3602d4022001200141286a3602d0022001200141f0026a36028802200141bc026a4101360200200142013702ac02200141909dc5003602a8022001200141d0026a3602b80220014188026a419cebc000200141a8026a103d1a20012802f00220012802f80210ef0220012802f402450d0020012802f002102e0b2006450d002004102e0b0240024020050d0020004100360208200042043702000c010b20002008370204200020053602000b20014190036a24000bd10102027f047e230041c0006b22022400200241306a2001109408200241106a20022802302201200228023810ae050240024020022802102203450d0020022902142104200241286a2903002105200241206a290300210602402002280234450d002001102e0b2002200620052004422088420010e808200241086a29030021054201210620022903002107200442ffffff3f83500d012003102e0c010b02402002280234450d002001102e0b420021060b2000200737030820002006370300200041106a2005370300200241c0006a24000be70601047f230041c0006b2202240041e086ca0021034110210441222105024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200141ff01710e24000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223000b2002413c6a41013602002002420137022c2002419cc3cb00360228200241043602242002418883ca003602202002200241206a360238200241286a41bca8cc001044000b41d886ca00210341082104410021050c210b41c986ca002103410f2104410121050c200b41c186ca00210341082104410221050c1f0b41b286ca002103410f2104410321050c1e0b41a186ca00210341112104410421050c1d0b418e86ca00210341132104410521050c1c0b41fd85ca00210341112104410621050c1b0b41f285ca002103410b2104410721050c1a0b41e885ca002103410a2104410821050c190b41db85ca002103410d2104410921050c180b41cf85ca002103410c2104410a21050c170b41be85ca00210341112104410b21050c160b41b385ca002103410b2104410c21050c150b41ab85ca00210341082104410d21050c140b41a385ca00210341082104410e21050c130b419485ca002103410f2105410f21040c120b418385ca00210341112104411021050c110b41f484ca002103410f2104411121050c100b41e984ca002103410b2104411221050c0f0b41e084ca00210341092104411321050c0e0b41d684ca002103410a2104411421050c0d0b41ce84ca00210341082104411521050c0c0b41c284ca002103410c2104411621050c0b0b41b184ca00210341112104411721050c0a0b41a984ca00210341082104411821050c090b41a084ca00210341092104411921050c080b418f84ca00210341112104411a21050c070b418284ca002103410d2104411b21050c060b41f883ca002103410a2104411c21050c050b41e783ca00210341112104411d21050c040b41df83ca00210341082104411e21050c030b41d083ca002103410f2104411f21050c020b41c183ca002103410f2104412021050c010b41b383ca002103410e2104412121050b200041831c3b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000b850201037f230041d0006b22022400200241086a41de80ca004109108102200241186a419781ca004109108102200220013602342002200241346a410410a301370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107c024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241d0006a24000f0b1038000b1036000bf30501077f230041e0016b22042400200441d0006a41186a22054200370300200441d0006a41106a22064200370300200441d0006a41086a2207420037030020044200370350200441086a41de80ca0041091081022007200441086a41086a220829000037030020042004290008370350200441086a41ccf8ca00410f10810220052008290000370300200620042900083703002004200441d0006a4120108e02200428020421092004280200210a20054200370300200642003703002007420037030020044200370350200441086a41de80ca0041091081022007200829000037030020042004290008370350200441086a41ccf8ca00410f1081022005200829000037030020062004290008370300200420094100200a1b220541016a360208200441d0006a4120200441086a410410b201200441376a42003700002004412f6a4200370000200441276a42003700002004411f6a4200370000200441086a410f6a42003700002004420037000f200441d0006a41096a2008290000370000200441e1006a200441086a41106a290000370000200441e9006a200441086a41186a290000370000200441f1006a200441086a41206a290000370000200441f9006a200441306a29000037000020044180016a42003700002004418c016a200336020020044188016a200036020020044190016a200129000037030020044198016a200141086a290000370300200441a0016a200141106a290000370300200441a8016a200141186a290000370300200441003a005020042004290008370051200441b0016a20023a0000200441c0006a20051089052004280248210820042802402101200441003602d801200442013703d001200441d0006a200441d0016a10bc052001200820042802d001220620042802d80110b201024020042802d401450d002006102e0b02402004280244450d002001102e0b200441dc006a2005360200200441d8006a41033a0000200441093a0050200441d0006a41096a20023a0000200441d0006a10fe01200441e0016a24000b8d04010b7f230041e0016b22022400200241206a41186a22034200370300200241206a41106a22044200370300200241206a41086a2205420037030020024200370320200241e0006a41de80ca0041091081022005200241e0006a41086a220629000037030020022002290060370320200241e0006a418081ca00410c1081022003200629000037030020042002290060370300200241e0006a200241206a10aa050240024020022d00800122034103470d00200041131093080c010b200241206a412010ff01200241086a22042006290300370300200241106a2205200241e0006a41106a2207290300370300200241186a2208200241e0006a41186a220929030037030020022002290360370300200241c0006a41186a220a4200370300200241c0006a41106a220b4200370300200241c0006a41086a220c420037030020024200370340200241e0006a41de80ca004109108102200c200629000037030020022002290060370340200241e0006a41a8fbca004115108102200a2006290000370300200b2002290060370300200241013a0060200241c0006a4120200241e0006a410110b201200641023a0000200241093a0060200241e0006a10fe012009200829030037030020072005290300370300200620042903003703002002200229030037036020014180ce186a200241e0006a20034180ce18109508200041063a00000b200241e0016a24000bf60d040a7f027e027f027e230041b0096b2203240020034190016a2001109808200341d0066a2003280290012204200328029801220510ad0541022106024020032d00d006220741024622080d002004200510ff010b200341f8036a411f6a2209200341f0066a280000360000200341f8036a41186a220a200341e9066a290000370300200341f8036a41106a220b200341e1066a290000370300200341f8036a41086a220c200341d9066a290000370300200320032900d1063703f80320034198076a290300210d20034190076a290300210e200341fc066a280200210f200341f8066a2802002110200341f4066a2802002105024020080d00200341c8006a411f6a2009280000360000200341c8006a41186a200a290300370300200341c8006a41106a200b290300370300200341c8006a41086a200c290300370300200320032903f803370348200721060b0240200328029401450d002004102e0b024002400240024002400240200641037122044103460d0020040e03010001010b200341f0006a41186a2206200341c8006a41186a290300370300200341f0006a41106a2204200341c8006a41106a290300370300200341f0006a41086a2208200341c8006a41086a290300370300200320032903483703702003200f3602c403200320053602c00320034190016a200341c0036a1098010240200328029001411c460d00200341386a200341f0006a200e200d10fb01200341a8076a200d370300200341a0076a200e370300200341d0066a41086a410c3a0000200341f9066a200329037037000020034181076a200829030037000020034189076a200429030037000020034191076a2006290300370000200341e1066a200141086a290000370000200341e9066a200141106a290000370000200341f1066a200141186a2900003700002001290000210d200341093a00d006200341d0066a41096a200d370000200341d0066a10fe01200341f8036a20034190016a41b00210e9081a4110102c2201450d02200141f8f7c60036020c200141013602082001428180808010370200024002404101200341f8036a1093060d00200341e8036a41023a000041002106200341e0036a41003a000020012001280200417f6a2204360200200342003703d003200342013703c803024020040d002001280208200128020c2802001103000240200128020c280204450d002001280208102e0b200141046a22042004280200417f6a220436020020040d002001102e0b200341f8036a10dc020c010b200341d0066a200341f8036a41b00210e9081a2003418a096a200341b2066a29010037010020034192096a200341ba066a2901003701002003419a096a200341c2066a290100370100200341a0096a200341c8066a290100370100200341003b018009200320032901aa0637018209200320013602a809200341c8036a200341d0066a20034180096a10dd0220032903c8035021060b200341dc066a2002360200200341d8066a41073a0000200341093a00d006200341d0066a41096a20063a0000200341d0066a10fe01200041063a000020100d040c050b200341186a200341f0006a200e200d10cb022003290318210d2003200341186a41086a290300220e3703d8062003200d3703d00602400240200d200e844200520d002003200341d0066a3602f803200341f8036a10cc020c010b200342f0f2bda1a7ee9cb9f9003703f803200341d0066a200341f8036a10cd02200341086a200341d0066a200d200e10fd0120034188046a200341086a41086a2903002211200e7d20032903082212200d54ad7d200e20117d200d201254ad7d2012200d562011200e562011200e511b22061b37030020032012200d7d200d20127d20061b3703800420032006ad3703f803200341f8036a41086a21040240024020060d00200320043602c803200341c8036a10cc020c010b200320043602c803200341c8036a10ce020b200341e8066a200e370300200341e0066a200d370300200341d8066a41063a00002003410e3a00d006200341d0066a10fe010b200341d0066a41086a410d3a0000200341fc066a20023602002001290000210d200341093a00d006200341d0066a41096a200d370000200341e1066a200141086a290000370000200341e9066a200141106a290000370000200341f1066a200141186a290000370000200341d0066a10fe012000411210930820100d030c040b200341d0066a41086a410e3a0000200341fc066a20023602002001290000210d200341093a00d006200341d0066a41096a200d370000200341e1066a200141086a290000370000200341e9066a200141106a290000370000200341f1066a200141186a290000370000200341d0066a10fe0120004110109308200641037122014103460d0120010e03030103030b1036000b2010450d010b2005102e0b200341b0096a24000bf50101047f230041306b22022400200241de80ca004109108102200241106a41f780ca004109108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000be70301047f23004180016b22022400200241386a41a081ca004107108102200241d8006a41a781ca0041121081022002200136027c2002200241fc006a410410a3013703282002410c6a200241fc006a41046a3602002002200241306a3602042002200241fc006a3602082002200241286a360200200241c8006a2002107c024002402002280250220341206a2201417f4c0d000240024020010d00410121040c010b2001102c2204450d020b200241003602302002200136022c20022004360228200241286a200241386a41101074200241286a200241d8006a41101074200241286a20022802482201200310740240200228024c450d002001102e0b200220022802282201200228023010a503200241e0006a22032002410c6a290200370300200241d8006a41106a200241146a290200370300200241f0006a22042002411c6a290200370300200241f8006a2205200241246a280200360200200220022902043703580240024020022802004101460d00200041003602000c010b20004101360200200020022903583702042000410c6a2003290300370200200041146a200241e8006a2903003702002000411c6a2004290300370200200041246a20052802003602000b0240200228022c450d002001102e0b20024180016a24000f0b1038000b1036000bcc0d04037f017e057f077e230041b0026b220424000240024002400240024002400240200141e0006a22052001413c6a412010ec08450d0020044180016a41186a200541186a29000037030020044180016a41106a200541106a29000037030020044180016a41086a200541086a29000037030020042005290000370380010240200120044180016a10af022206450d00200628020c41004a0d010b200441e0006a41086a2201200541086a290000370300200441e0006a41106a2203200541106a290000370300200441e0006a41186a2202200541186a290000370300200420052900003703604130102c2205450d01200541003a0000200520042903603700012005200429008001370021200541096a2001290300370000200541116a2003290300370000200541196a2002290300370000200541286a220120044187016a29000037000002400240024020052d00000e0402020002010b200541086a280200450d01200541046a280200102e0c010b2001280200450d00200541246a280200102e0b2005102e200041003602400c060b2004410036021420042005360210200441bc81ca0036020c20042001360208200441c8016a4120360200200420033602c401200420023602c0014124102c2205450d002004422437021c20042005360218200441186a200441c0016a410410744120200441186a1076200441186a20034120107420044180016a200441086a20042802182205200428022010aa020240200428021c450d002005102e0b02402004280280014101470d000240024020042802840122052d00000e0407070007010b200541086a280200450d06200541046a280200102e0c060b200541286a280200450d05200541246a280200102e0c050b02402004280284012205450d000240024020044188016a2903002207422088a741044f0d00410021010c010b20052800002103410121010b02402007a7450d002005102e0b2001450d002004200336021820044180016a200441086a200441186a410410aa0202402004280280014101470d000240024020042802840122052d00000e0407070007010b200541086a280200450d06200541046a280200102e0c060b200541286a280200450d05200541246a280200102e0c050b024020042802840122020d00200041003602400c070b200420044188016a2903002207422088a7220636025c2004200236025841002105200441003a00382006417f6a21010240034020062005460d01200441186a20056a200220056a22032d00003a00002004200341016a3602582004200541016a22033a00382004200136025c2001417f6a21012003210520034120460d040c000b0b0240200541ff0171450d00200441003a00380b410021050c030b200041003602400c050b1036000b200441c0016a41086a2205200441186a41086a290300370300200441c0016a41106a2201200441186a41106a290300370300200441c0016a41186a2206200441186a41186a290300370300200420042903183703c0010240200341ff0171411f4b0d00410021050c010b200441e0006a41086a2005290300370300200441e0006a41106a2001290300370300200441e0006a41186a2006290300370300200420042903c001370360200441c0016a200441d8006a108505024020042802e00122050d00410021050c010b20044180016a41186a2201200441e0006a41186a29030037030020044180016a41106a2203200441e0006a41106a29030037030020044180016a41086a2206200441e0006a41086a29030037030020044180016a41286a2208200441c0016a41086a29030037030020044180016a41306a2209200441c0016a41106a29030037030020044180016a41386a220a200441c0016a41186a290300370300200441f0016a41086a220b200441ec016a2802003602002004200429036037038001200420042903c0013703a0012004200441e4016a2902003703f001200441186a41386a220c200a290300370300200441186a41306a2009290300220d370300200441186a41286a2008290300220e370300200441186a41206a20042903a001220f370300200441186a41186a20012903002210370300200441186a41106a20032903002211370300200441186a41086a2006290300221237030020042004290380012213370318200041306a200d370300200041286a200e370300200041206a200f370300200041186a2010370300200041106a2011370300200041086a201237030020002013370300200041386a200c290300370300200020042903f001370244200041cc006a200b2802003602000b200020053602402007a7450d022002102e0c020b2005102e200041003602400c010b2005102e200041003602400b200441b0026a24000bca32021a7f0c7e23002201210220014180056b41607122012400200041246a220328020022042802002105200341d0a1c00036020020002802202106200041003602202000412c6a2203280200210720034100360200200041286a41003602002001200036021c2004200641016a22086a2109200441046a21032005417f7341808182847871210a200141a0026a410572210b200141a0026a41276a210c200141a0026a41206a210d2004210502400240034002400240200a0d000340024020032009490d004100210e0c060b200541c07d6a21052003280200210e200341046a220f2103200e41808182847871220e418081828478460d000b200e41808182847873220a417f6a200a71210e0c010b200a417f6a200a71210e2005450d022003210f0b20014180046a41186a221020054100200a684103766b41d0006c6a221141b07f6a220341186a29020037030020014180046a41106a2212200341106a29020037030020014180046a41086a2213200341086a2902003703002001200329020037038004201141506a280200210a201141546a2d00002111200c200341cc006a280000360000200d200341c5006a290000370300200141a0026a41186a22142003413d6a290000370300200141a0026a41106a2215200341356a290000370300200141a0026a41086a22162003412d6a290000370300200120032900253703a0022007417f6a2107024020114102470d00200f21030c030b200141b8036a41186a22032010290300370300200141b8036a41106a22172012290300370300200141b8036a41086a22182013290300370300200141a8016a41086a22192016290300370300200141a8016a41106a22162015290300370300200141a8016a41186a22152014290300370300200141a8016a41206a2214200d290300370300200141a8016a41276a221a200c28000036000020012001290380043703b803200120012903a0023703a801201020032903003703002012201729030037030020132018290300370300200120012903b80337038004200b20012903a801370000200b41086a2019290300370000200b41106a2016290300370000200b41186a2015290300370000200b41206a2014290300370000200b41276a201a280000360000200120113a00a4022001200a3602a002200128021c220341d0006a2802002111200328024c210302400240200a4125490d0020012802ac02210a20012802a80221100c010b200b21100b200120012f01cc023b01c8042001200a3602c404200120103602c004200320014180046a200141c0046a201128021c110600024020012802a0024125490d0020012802a802102e0b200f2103200e210a0c000b0b410021050b02402007450d00034002400240200e0d000340200320094f0d04200541c07d6a21052003280200210e200341046a220f2103200e41808182847871220e418081828478460d000b200e41808182847873220e417f6a200e71210b200f21030c010b2005450d02200e417f6a200e71210b0b200e68210f200b210e20054100200f4103766b41d0006c6a220f41506a2802004125490d00200f41586a280200102e200b210e0c000b0b024002402006450d00200441ff01200641056a10eb081a200641074d0d00200841037641076c21030c010b200621030b200020063602202000412c6a4100360200200041286a2003360200200041246a2004360200024002400240024002400240200128021c22052d00584101460d00200541dc006a28020021030240200541c8006a220b280200220e200e417f6a2209200541c0006a220f280200220e2005413c6a220a2802006b716b4101470d00200a10a502200b280200417f6a2109200f280200210e0b200f2009200e41016a71360200200541c4006a280200200e4102746a200336020002400240024002400240024002400240024002400240200541386a280200220e20034d0d00200541306a2209280200200341fc006c6a2203290210211b200320012903b0023702102003290208211c200320012903a802370208200341186a220e290200211d200e20012903b802370200200141003a00a002200141003602a4022003290200211e200320012903a002370200200141206a41086a220e200341e8006a290200370300200141206a41106a220f200341f0006a290200370300200141206a41186a220b200341f8006a2802003602002001201b370390012001201c370388012001201e37038001200120032902603703202001201d370398012003290240211f200341c8006a2902002120200341d0006a2902002121200341d8006a290200212220032902202123200341286a2902002124200341306a29020021252001200341386a29020022263703782001202537037020012024370368200120233703602001202237035820012021370350200120203703482001201f3703400240201ea741ff01714101470d00200141a8016a41176a220a200129009801221e370000200141a8016a41106a2211200129009101221c370300200141a8016a41086a2210200129008901221b37030020052802542203200129008101221d37000020032023a722053a001f200341086a201b370000200341106a201c370000200341176a201e3700002001201d3703a801200141a0026a41d8006a2022370300200141a0026a41d0006a2021370300200141a0026a41c8006a2020370300200141e0026a201f370300200141dc026a200128027c360200200141d4026a2001290274370200200141cc026a200129026c370200200120012902643702c40220014180036a2001290320370300200141a0026a41e8006a200e290300370300200141a0026a41f0006a200f290300370300200141a0026a41f8006a200b280200360200200141a9026a2010290300370000200141b1026a2011290300370000200141a0026a41186a200a290000370000200120012903a8013700a102200141c0026a20053a0000200141013a00a0022009200141a0026a109d082103200128021c220141003a0058200141dc006a20033602000c0c0b201ca72105201c422088a72103200141003602d401200141003a00ac01200141003602a801200141e8016a41106a2001280258360200200141e8016a41086a2001290350370300200120012903483703e80102400240024002400240201e422088a70e050102030400010b200141c0026a2024370300200141b8026a2023370300200141b0026a201d370300200141a8026a201b370300200141c8026a2025370300200120053602a002200120033602a4020240024020034125490d00201b422088a7210b201da721030c010b200141a9026a210b0b2005410176210f024002402005410171450d002003200f4d0d08200b200f6a2d0000410f71210e4100210a200f41016a210f0c010b2003200f490d064101210a4100210e0b200341017420056b220541ffff03200541ffff03491b220541017641036a2211102c2210450d142003200f6b2109200b200f6a210f200141003602e001200120113602dc01200120103602d80102402026422088a72218410020181b2211450d00200120053602840420014181023b01800420014180046a200141d8016a10ff0541002105200a450d0a410021030c0d0b2001200536028404200141013b01800420014180046a200141d8016a10ff0541002105200a450d0a410021030c0b0b4101102c2203450d13200141013602dc01200120033602d801200341003a0000200141013602e0010c0d0b200141c0026a2024370300200141b8026a2023370300200141b0026a201d370300200141a8026a201b370300200141c8026a2025370300200120053602a002200120033602a4020240024020034125490d00201b422088a72109201da721030c010b200141a9026a21090b2005410176210e024002402005410171450d002003200e4d0d08200141013a00800420014188046a2003200e41016a22056b3602002001200920056a3602840420012009200e6a2d0000410f713a0081040c010b2003200e490d0620014188046a2003200e6b360200200141003b01800420012009200e6a360284040b200141d8016a20014180046a2026a72203201fa710970702402026422088a7450d002003102e0b20012802a4024125490d0c200141ac026a280200102e0c0c0b200141c0026a2024370300200141b8026a2023370300200141b0026a201d370300200141a8026a201b370300200141c8026a2025370300200120053602a002200120033602a4020240024020034125490d00201b422088a7210e201da721030c010b200141a9026a210e0b200120053602e803200120033602e4032001200e3602e003200141c0046a200141e0036a109e08200141a8016a200141e0036a41002001109f082103200128021c2105200141b8036a41086a201f370300200141b8036a41106a20012903e801370300200141d0036a200141e8016a41086a290300370300200141d8036a200141e8016a41106a280200360200200120263703b80320014180046a2005200141b8036a200141a8016a10a008200141a8016a200310a108109607000b109507000b2003200e419482ca00103c000b200f200341e0eecc001056000b200f200341f0eecc00103c000b200e200341e0eecc001056000b200e200341f0eecc00103c000b410121030c020b410121030b03400240024020030e020001010b200520094f0d03200f20056a2d0000210e200541016a2105410121030c010b02400240024020012802e001220320012802dc01470d00200341016a220b2003490d0b2003410174220a200b200a200b4b1b220b4108200b41084b1b210b0240024020030d0020014100360280040c010b20014180046a41086a41013602002001200336028404200120012802d801360280040b200141b8036a200b410120014180046a107d200141c0036a280200210b20012802b8034101460d0120012802bc03210a2001200b3602dc012001200a3602d8010b20012802d80120036a200e3a00002001200341016a3602e0010c010b200b0d0a0c090b410021030c000b0b03400240024020030e020001010b200520094f0d02200f20056a2d0000210e200541016a2105410121030c010b02400240024020012802e001220320012802dc01470d00200341016a220b2003490d0a2003410174220a200b200a200b4b1b220b4108200b41084b1b210b0240024020030d0020014100360280040c010b20014180046a41086a41013602002001200336028404200120012802d801360280040b200141b8036a200b410120014180046a107d200141c0036a280200210b20012802b8034101460d0120012802bc03210a2001200b3602dc012001200a3602d8010b20012802d80120036a200e3a00002001200341016a3602e0010c010b200b450d080c090b410021030c000b0b20012802e00122162103024002400240024002400240201620012802dc01470d00201641016a22032016490d0b201641017422052003200520034b1b22034108200341084b1b21030240024020160d0020014100360280040c010b20014180046a41086a41013602002001201636028404200120012802d801360280040b200141b8036a2003410120014180046a107d200141c0036a280200210320012802b8034101460d0120012802bc032105200120033602dc01200120053602d80120012802e00121030b20012802d80120036a41003a0000200120012802e00141016a22033602e001024002400240200320012802dc01470d00200341016a22052003490d0d2003410174220e2005200e20054b1b22054108200541084b1b21050240024020030d0020014100360280040c010b20014180046a41086a41013602002001200336028404200120012802d801360280040b200141b8036a2005410120014180046a107d200141c0036a280200210320012802b8034101460d0120012802bc032105200120033602dc01200120053602d80120012802e00121030b2026a7221741c0046a211420012802d80120036a41003a0000200120012802e00141016a3602e00102402011450d00201f422088a72203200141d8016a1076200141d8016a2011200310740b20142017470d0141002111410021030c040b20030d0c0c0b0b20014180046a410172210e200141a9026a2119200141c0046a41017221054100210a20172103410021114101210b02400340200141023a0080042003290200211e200129039804211c2001290390042123200129038804211b20032001290380043702002003290208211d2003201b3702082003290210211b20032023370210200341186a220929020021232009201c370200200120233703d8042001201b3703d0042001201d3703c8042001201e3703c004200341206a280200210720014180046a41176a2210200541176a29000037000020014180046a41106a2209200541106a29000037030020014180046a41086a220f200541086a29000037030020012005290000370380040240201ea7220c41ff017122124103470d0020114180fe037141087621030c060b200141e0036a41176a22132010290000370000200141e0036a41106a22102009290300370300200141e0036a41086a200f290300221e3703002001200129038004221c3703e003200141c0046a41176a220d2013290000370000200141c0046a41106a22132010290300370300200141c0046a41086a2210201e3703002001201c3703c00402400240024020124102470d00200141023a00b8030c010b0240024020012802a40222124125490d0020012802b002211220012802ac0221150c010b201921150b200120012802a0023602f804200120123602f404200120153602f004200141a8016a200141f0046a4101200a109f082112200128021c2115200e20012903c004370000200e41086a2010290300370000200e41106a2013290300370000200e41176a200d2900003700002001200c3a008004200120073602a004200141b8036a201520014180046a200141a8016a10a008200141a8016a201210a10820012d00b8034103460d010b20014180046a41206a200141b8036a41206a29030037030020014180046a41186a200141b8036a41186a2903003703002009200141b8036a41106a290300370300200f200141b8036a41086a290300370300200120012903b803221e37038004410021090240024002400240201ea741ff0171417f6a0e020103000b4120200141d8016a1076200141d8016a200e412010740c010b200141c0046a41186a200e41186a2900003703002013200e41106a2900003703002010200e41086a2900003703002001200e2900003703c00420012802a404220941214f0d042009200141d8016a1076200141d8016a200141c0046a200910740b200b21090b200a41016a210a200b410174210b20092011722111200341246a22032014460d040c010b0b20114180fe037141087621030c050b2009412041ccd3c800104d000b20030d0a0c090b20114180fe037141087621030b200141033a00c00420014197046a20012900d80437000020014190046a20012900d10437030020014188046a20012900c904370300200120012900c104370380040b200141033a00b8030b201641026a21052016417e4f0d0220012802e001220e2005490d0320012802d80120166a2003410874201141ff0171723b000002402018450d00201fa7450d002018102e0b2017102e20012802a4024125490d00200141ac026a280200102e0b200128021c220341d0006a2802002105200328024c210320014180046a41086a41002802cca140360200200141002902c4a14037038004200141a0026a200320014180046a20012802d80120012802e0012005280214110500200128021c2203280254220520012903a002370000200541086a200141a0026a41086a290300370000200541106a200141a0026a41106a290300370000200541186a200141a0026a41186a2903003700002003200328027c41016a36027c2003280254220541186a290000211e200541106a290000211c200541086a290000211f200341d9006a2005290000370000200341013a0058200341e1006a201f370000200341e9006a201c370000200341f1006a201e370000024020012802dc01450d0020012802d801102e0b20012802a8014125490d00200141b0016a280200102e0b0240200041386a2802002203450d0020002802302101200341fc006c210303400240024020012d00000d00200141046a10e2010c010b200141246a10e2010b200141fc006a2101200341847f6a22030d000b0b0240200041346a2802002201450d00200141fc006c450d002000280230102e0b200041c8006a280200210102400240200041c0006a28020022032000413c6a2802002205490d00200120034f0d012003200141b4f1c000104d000b20012005490d030b0240200141ffffffff0371450d00200041c4006a280200102e0b024020002802202205450d0002402000412c6a280200450d00200041246a280200220341046a2101200520036a41016a210e2003280200417f73418081828478712105024003400240024020050d0003402001200e4f0d04200341c07d6a210320012802002105200141046a220921012005418081828478712205418081828478460d000b2005418081828478732205417f6a200571210f200921010c010b2003450d022005417f6a200571210f0b2005682109200f21052003410020094103766b41d0006c6a220941506a2802004125490d00200941586a280200102e200f21050c000b0b200028022021050b200041246a280200200541016aad42d0007ea76b102e0b200224000f0b2016200541dcd3c8001057000b2005200e41dcd3c800104d000b41c4f1c000412341e8f1c0001039000b1038000b1036000b960401037f23004190016b2206240041002107200641003602080240024020012d00584101460d00200141dc006a28020021080c010b200641366a200141db006a2d00003a0000200641206a200141e8006a290000370300200641286a200141f0006a290000370300200641306a200141f8006a2d00003a00002006200141d9006a2f00003b01342006200141e0006a290000370318200141dc006a2800002108410121070b200641c8006a41086a2006290318370300200641c8006a41106a200641186a41086a290300370300200641c8006a41186a200641186a41106a290300370300200641e8006a200641186a41186a280200360200200620073a0048200620062f01343b00492006200836024c2006200641366a2d00003a004b200641003602782006200336027420062002360270024002402005417f4c0d004101210702402005450d002005102c2207450d020b2006200536028401200620073602800120072004200510e9081a2006200536028801200641386a2001200641c8006a200641f0006a20064180016a200641086a10ad08200628023c21050240024020062802384101460d00200141003a00582000200629030837020420004100360200200141dc006a20053602002000410c6a200641106a2802003602000c010b200041013602002000200536020420062802082201450d00200628020c450d002001102e0b20064190016a24000f0b1038000b1036000bdd0302047f017e230041a0016b220224000240024002400240200028020c2203200041106a280200470d002002200141fc0010e90821030240024020002802082201200041046a280200470d00200141016a22042001490d04200141017422052004200520044b1b22044104200441044b1bad42fc007e2206422088a74541027421042006a721050240024020010d0020034100360290010c010b20034198016a41043602002003200141fc006c3602940120032000280200360290010b20034180016a2005200420034190016a107d20034188016a28020021012003280280014101460d012000200328028401360200200041046a200141fc006e360200200028020821010b2000280200200141fc006c6a200341fc0010e9081a20002000280208220341016a3602080c020b2001450d021036000b2000410c6a200041186a280200417f6a200341016a71360200200041146a28020020034102746a28020021032002200141fc0010e90821012000280208220420034d0d020240024020002802002200200341fc006c6a22042d00000d002000200341fc006c6a41046a10e2010c010b2000200341fc006c6a41246a10e2010b2004200141fc0010e9081a0b200241a0016a240020030f0b1038000b2003200441f882ca00103c000bb80101057f2001280208220241017621032001280204210402400240024002402002410171450d00200420034d0d034101210220012802002205200341016a22066a2101200520036a2d0000410f712105200621030c010b20042003490d01200128020020036a210141002105410021020b200020023a000c20002001360204200041003602002000410d6a20053a0000200041086a200420036b3602000f0b2003200441e0eecc001056000b2003200441f0eecc00103c000b960a01127f230041106b2204240002400240024002400240024020010d00410021010c010b200141086a28020022054101762106200141046a2802002107024002400240024002400240024002402005410171450d00200720064b0d012006200741f0eecc00103c000b20072006490d02200720066b2108200128020020066a21090c010b20002001280200220120066a2d0000410f7110e3082007200641016a22066b2108200120066a21090b0240024002400240024002400240200028020022014125490d002000412c6a210a2000410c6a2206280200410174200028022c470d02200628020021010c010b2000412c6a210a2001410174200028022c470d020b20042000200810fc06024020042802004101470d00200441086a2802000d0c41d0f0cc00411141e4f0cc001039000b02400240200028020022064125490d002000410c6a28020022062001490d08200041086a280200210b0c010b20062001490d07200041056a210b0b200b20016a220b20086a200b200620016b10ea081a200b2009200810e9081a0240024020002802004125490d002000410c6a21010c010b200021010b2001200620086a3602000c090b20080d01410021080c080b20080d01410021080c070b2000410c6a280200220b2006280200417f6a22064b0d01200b21010c0b0b20012001417f6a22064d0d0a200041056a20066a2d0000417071210b0c030b200041086a28020020066a2d0000417071210b20014125490d022000410c6a2802002101200041086a280200210c0c030b2006200741e0eecc001056000b41f4f1cc00411e4194f2cc001039000b200041056a210c0b200120064d0d03200c20066a200b3a000020092d0000210b02400240200028020022014125490d002000410c6a2802002101200041086a280200210c0c010b200041056a210c0b200120064d0d04200c20066a220120012d0000200b410476723a0000024002402008417f6a220d0d004100210d0c010b2008417f6a210e20084101200841014b1b417f6a210f410021012000410c6a2110200041086a2111200041056a21120340024002400240024020082001460d00200f2001460d01200920016a22062d00002113200641016a2d00002114024002402000280200220c4125490d0020102802002106201128020021152010210b0c010b200c21062000210b201221154124210c0b2006200c470d0320042000410110fc0620042802004101470d02200441086a2802000d0841d0f0cc00411141e4f0cc001039000b2008200841c0eecc00103c000b200141016a200841d0eecc00103c000b2000410c6a220b2802002106201128020021150b201520066a201441f001714104762013410474723a0000200b200b28020041016a360200200e200141016a2201470d000b0b2009200d6a2d00002115024002402000280200220b4125490d002000410c6a22012802002106200041086a280200210c0c010b200041056a210c200b2106200021014124210b0b02402006200b470d0020042000410110fc06024020042802004101470d00200441086a2802000d0441d0f0cc00411141e4f0cc001039000b2000410c6a22012802002106200041086a280200210c0b200c20066a20154104743a00002001200128020041016a3602000b200a200a28020020084101746a360200200741017420056b21010b02402002450d002000200310e308200141016a21010b200441106a240020010f0b1036000b2006200141a0eecc00103c000b2006200141b0eecc00103c000b200620014190eecc00103c000bec2603067f067e0d7f230022042105200441e0036b416071220424002004200336021420042001360210024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020022d00004101460d00200241046a28020021020240200141c8006a220628020022032003417f6a2207200141c0006a220828020022032001413c6a22092802006b716b4101470d00200910a5022006280200417f6a2107200828020021030b20082007200341016a71360200200141c4006a28020020034102746a2002360200200141386a280200220320024d0d022001280230200241fc006c6a2201290210210a200120042903f0013702102001290208210b200120042903e801370208200441d8006a2001290240220c370300200441386a22032001290220370300200441f8006a2001290260370300200141186a2202290200210d200220042903f801370200200441003a00e001200441003602e4012001290200210e200120042903e001370200200441186a41d8006a2207200141d8006a290200370300200441186a41d0006a2208200141d0006a290200370300200441186a41c8006a2206200141c8006a290200370300200441186a41386a200141386a290200220f370300200441186a41306a2209200141306a290200370300200441186a41286a2210200141286a290200370300200441186a41186a2211200d370300200441186a41e8006a200141e8006a290200370300200441186a41f0006a200141f0006a290200370300200441186a41f8006a200141f8006a2802003602002004200a3703282004200b3703202004200e370318200ea741ff01714101460d01200ba72102200b422088a72101200c422088a72112200fa72113200441c0016a41086a22142003290300370300200441c0016a41106a22032010290300370300200441c0016a41186a2009290300370300200441a8016a41086a2008290300370300200441a8016a41106a2007280200360200200420112903003703c001200420062903003703a801200441d4006a290200220fa7211502400240024002400240200e422088a70e050102030400010b200441e0016a41086a200a370300200441e0016a41106a20042903c001370300200441e0016a41186a201429030037030020044180026a200329030037030020044188026a200441c0016a41186a290300370300200420023602e001200420013602e4010240024020014125490d00200a422088a7210620042802f00121010c010b200441e9016a21060b20024101762108024002402002410171450d00200120084d0d0a200620086a2d0000410f71210341002109200841016a21080c010b20012008490d0841012109410021030b200141017420026b220241ffff03200241ffff03491b220241017641036a2210102c2211450d19200120086b2107200620086a2108200441003602a0012004201036029c01200420113602980102402015410020151b2210450d00200420023602e40220044181023b01e002200441e0026a20044198016a10ff05410021022009450d0c410021010c0f0b200420023602e402200441013b01e002200441e0026a20044198016a10ff05410021022009450d0c410021010c0d0b4101102c2201450d182004410136029c012004200136029801200141003a0000200441013602a0010c0f0b200441e0016a41086a200a370300200441e0016a41106a20042903c001370300200441e0016a41186a201429030037030020044180026a200329030037030020044188026a200441c0016a41186a290300370300200420023602e001200420013602e4010240024020014125490d00200a422088a7210720042802f00121010c010b200441e9016a21070b20024101762103024002402002410171450d00200120034d0d0a200441013a00e002200441e8026a2001200341016a22026b3602002004200720026a3602e4022004200720036a2d0000410f713a00e1020c010b20012003490d08200441e8026a200120036b360200200441003b01e0022004200720036a3602e4020b20044198016a200441e0026a2013200f422088a710970702402015450d002013102e0b20042802e4014125490d0e200441ec016a280200102e0c0e0b200441e0016a41086a200a370300200441e0016a41106a20042903c001370300200441e0016a41186a201429030037030020044180026a200329030037030020044188026a200441c0016a41186a290300370300200420023602e001200420013602e4010240024020014125490d00200a422088a7210020042802f00121010c010b200441e9016a21000b200420023602c802200420013602c402200420003602c002200441a0036a200441c0026a109e082004280214200441c0026a41002004109f08210120042802102102200441a4026a201236020020044198026a41106a20042903a801370300200441b0026a200441b0016a290300370300200441b8026a200441a8016a41106a2802003602002004200f37029c022004201336029802200441e0026a200220044198026a2004280214220410a0082004200110a108109607000b109507000b200041003a000020002002290001370001200041196a200241196a290000370000200041116a200241116a290000370000200041096a200241096a2900003700000c120b20002004290019370001200041003a0000200041196a200441186a41196a290000370000200041116a200441186a41116a290000370000200041096a200441186a41096a2900003700000c0b0b20022003419482ca00103c000b2008200141e0eecc001056000b2008200141f0eecc00103c000b2003200141e0eecc001056000b2003200141f0eecc00103c000b410121010c020b410121010b03400240024020010e020001010b200220074f0d03200820026a2d00002103200241016a2102410121010c010b02400240024020042802a0012201200428029c01470d00200141016a22062001490d0e200141017422092006200920064b1b22064108200641084b1b21060240024020010d00200441003602e0020c010b200441e0026a41086a4101360200200420013602e40220042004280298013602e0020b20044198026a20064101200441e0026a107d200441a0026a28020021062004280298024101460d01200428029c0221092004200636029c0120042009360298010b20042802980120016a20033a00002004200141016a3602a0010c010b20060d0d0c0c0b410021010c000b0b03400240024020010e020001010b200220074f0d02200820026a2d00002103200241016a2102410121010c010b02400240024020042802a0012201200428029c01470d00200141016a22062001490d0d200141017422092006200920064b1b22064108200641084b1b21060240024020010d00200441003602e0020c010b200441e0026a41086a4101360200200420013602e40220042004280298013602e0020b20044198026a20064101200441e0026a107d200441a0026a28020021062004280298024101460d01200428029c0221092004200636029c0120042009360298010b20042802980120016a20033a00002004200141016a3602a0010c010b2006450d0b0c0c0b410021010c000b0b20042802a001221621010240024002400240024002402016200428029c01470d00201641016a22012016490d0e201641017422022001200220014b1b22014108200141084b1b21010240024020160d00200441003602e0020c010b200441e0026a41086a4101360200200420163602e40220042004280298013602e0020b20044198026a20014101200441e0026a107d200441a0026a28020021012004280298024101460d01200428029c0221022004200136029c01200420023602980120042802a00121010b20042802980120016a41003a0000200420042802a00141016a22013602a0010240024002402001200428029c01470d00200141016a22022001490d10200141017422032002200320024b1b22024108200241084b1b21020240024020010d00200441003602e0020c010b200441e0026a41086a4101360200200420013602e40220042004280298013602e0020b20044198026a20024101200441e0026a107d200441a0026a28020021012004280298024101460d01200428029c0221022004200136029c01200420023602980120042802a00121010b201341c0046a211720042802980120016a41003a0000200420042802a00141016a3602a00102402010450d00201220044198016a107620044198016a2010201210740b20172013470d0141002110410021010c040b20010d0f0c0e0b200441e0026a4101722103200441e9016a2118200441a0036a41017221024100210920132101410021104101210602400340200441023a00e0022001290200210e20042903f802210b20042903f002210a20042903e802210d200120042903e0023702002001290208210c2001200d3702082001290210210d2001200a370210200141186a2207290200210a2007200b3702002004200a3703b8032004200d3703b0032004200c3703a8032004200e3703a003200141206a2802002119200441e0026a41176a2211200241176a290000370000200441e0026a41106a2207200241106a290000370300200441e0026a41086a2208200241086a290000370300200420022900003703e0020240200ea7221a41ff017122144103470d0020104180fe037141087621010c060b200441c0026a41176a22122011290000370000200441c0026a41106a22112007290300370300200441c0026a41086a2008290300220e370300200420042903e002220b3703c002200441a0036a41176a221b2012290000370000200441a0036a41106a22122011290300370300200441a0036a41086a2211200e3703002004200b3703a00302400240024020144102470d00200441023a0098020c010b0240024020042802e40122144125490d0020042802f001211420042802ec01211c0c010b2018211c0b200420042802e0013602d803200420143602d4032004201c3602d0032004280214200441d0036a41012009109f0821142004280210211c200320042903a003370000200341086a2011290300370000200341106a2012290300370000200341176a201b2900003700002004201a3a00e002200420193602800320044198026a201c200441e0026a2004280214221910a0082019201410a10820042d0098024103460d010b200441e0026a41206a20044198026a41206a290300370300200441e0026a41186a20044198026a41186a290300370300200720044198026a41106a290300370300200820044198026a41086a2903003703002004200429039802220e3703e002410021070240024002400240200ea741ff0171417f6a0e020103000b412020044198016a107620044198016a2003412010740c010b200441a0036a41186a200341186a2900003703002012200341106a2900003703002011200341086a290000370300200420032900003703a003200428028403220741214f0d04200720044198016a107620044198016a200441a0036a200710740b200621070b200941016a21092006410174210620072010722110200141246a22012017460d040c010b0b20104180fe037141087621010c050b2007412041ccd3c800104d000b20010d0d0c0c0b20104180fe037141087621010b200441033a00a003200441f7026a20042900b803370000200441f0026a20042900b103370300200441e8026a20042900a903370300200420042900a1033703e0020b200441033a0098020b201641026a21022016417e4f0d0220042802a00122032002490d0320042802980120166a2001410874201041ff0171723b000002402015450d00200f428080808010540d002015102e0b2013102e20042802e4014125490d00200441ec016a280200102e0b0240024020042802a00122014120490d002004280210220241d0006a2802002108200228024c21062004280214220728022c22094101762102200728020021030240024020094101710d000240024020034125490d002007410c6a2802002103200741086a28020021070c010b200741056a21070b20032002490d07200420073602e002410021030c010b0240024020034125490d002007410c6a220928020022032002490d0a200741086a2210280200210720092802002103201028020021090c010b20032002490d09200741056a220721090b200320024d0d07200441e9026a200920026a2d000041f001713a0000200420073602e002410121030b200420033a00e802200420023602e402200441e0016a2006200441e0026a20042802980120012008280214110500200020042903e001370001200041096a200441e8016a290300370000200041116a200441f0016a290300370000200041196a200441f8016a290300370000200041003a000020042802102201200128027c41016a36027c0c010b200441f8016a22024200370300200441f0016a22034200370300200441e8016a22074200370300200442003703e001200441e0016a200428029801200110e9081a200041246a2001360200200041013a0000200041196a2002290300370000200041116a2003290300370000200041096a2007290300370000200020042903e0013700010b0240200428029c01450d00200428029801102e0b20042d0018450d060b2004413c6a10e201200524000f0b2016200241dcd3c8001057000b2002200341dcd3c800104d000b2002200341e0edcc00104d000b200220034180eecc00103c000b2002200341f0edcc00104d000b200524000f0b1038000b1036000b960301057f0240024002402001450d000240200028022c220220014b0d0002400240200028020022014125490d002000410c6a220228020021010c010b200021020b02402001450d00200241003602000b2000410036022c0f0b200220016b2203410176200341017122046a210202400240200028020022014125490d002000410c6a28020021050c010b200121050b0240200220054f0d002000410c6a2106200220056b41016a210203400240024020014125490d0020062802002101200621050c010b200021050b02402001450d0020052001417f6a3602000b2002450d01200241016a2102200028020021010c000b0b2000200336022c2004450d0002400240200028020022014125490d002000410c6a220528020022012001417f6a22024d0d04200041086a220628020020026a2d0000417071210020052802002101200628020021050c010b2001417f6a220220014f0d03200041056a220520026a2d000041707121000b200120024d0d01200520026a20003a00000b0f0b2002200141d0edcc00103c000b2002200141c0edcc00103c000b130020004119360204200041f086ca003602000b3400200041de80ca0036020420004100360200200041146a410e360200200041106a41e4ecca00360200200041086a42093702000b7c01017f230041f0006b22022400200241106a4200370300200241186a4200370300200241206a4200370300200241286a4200370300200241306a4200370300200241386a4200370300200241c0006a410036020020024108360204200241086a4200370300200241003a00002000200210c204200241f0006a24000b2f01017f02404104102c22020d001036000b2000420437020420002002360200410020001076410441002000109b010b130020004108360204200041b48bcb003602000b4301027f230041106b2202240002404104102c22030d001036000b2000420437020420002003360200200241e40036020c20002002410c6a41041074200241106a24000b4401027f230041106b2202240002404104102c22030d001036000b2000420437020420002003360200200241c0930636020c20002002410c6a41041074200241106a24000b4301027f230041106b2202240002404104102c22030d001036000b2000420437020420002003360200200241880e36020c20002002410c6a41041074200241106a24000b4b01027f230041106b2202240002404110102c22030d001036000b20004210370204200020033602002002420037030820024280a094a58d1d3703002000200241101074200241106a24000b4401027f230041106b2202240002404104102c22030d001036000b200042043702042000200336020020024180ce1836020c20002002410c6a41041074200241106a24000b880202037f017e230041106b220224000240024020002d00004101460d00200241003a000020012002410110742002200041046a28020036020020012002410410740c010b200241013a00002001200241011074200041246a28020021032000412c6a28020022042001107620012003200410742001200041016a41201074200041c0006a29030021052002200041c8006a2903003703082002200537030020012002411010742002200041306a28020036020020012002410410740240200041346a2802004101460d00200241003a000020012002410110740c010b200241013a000020012002410110742002200041386a28020036020020012002410410740b200241106a24000bba3205077f017e017f0b7e0b7f230022062107200641e0086b416071220624000240024002400240024002400240024002400240024002400240024020022d00004101470d00200641b8036a200241196a290000370300200641b0036a200241116a290000370300200641a8036a200241096a290000370300200620022900013703a003200328020822084101762102200328020421092003280200210a0240024020084101710d00024020092002490d00410021090c020b2002200941a0f0cc00104d000b20092002490d03200220094f0d04200a20026a2d00004170712108410121090b200141d0006a280200210b200128024c210c200641e9046a20083a0000200620093a00e804200620023602e4042006200a3602e004200620062f01c8073b01ea0420064188086a200c200641a0036a200641e0046a200b28020c1104000240024020062802880822090d00200641f0056a2201200641ab036a290000370300200641e8056a41106a2203200641b3036a290000370300200641fd056a2209200641b8036a290000370000200620062900a3033703e80520062d00a203210520062f01a003210a4130102c22020d011036000b200629028c08210d200641c0046a41186a200641a0036a41186a2208290300370300200641c0046a41106a200641a0036a41106a220b290300370300200641c0046a41086a200641a0036a41086a220c290300370300200620062903a0033703c004200641e0046a200641c0046a2009200d422088a7200141306a220e10ae0820062802e404210220062802e004210a20064188086a200641e0046a41086a41d40010e9081a200a4101460d0c200641e0036a20064188086a41d40010e9081a200620023602840520064188056a200641e0036a41d40010e9081a200641f9046a2008290300370000200641f1046a200b290300370000200641e9046a200c290300370000200641013a00e004200620062903a0033700e104200e200641e0046a109d082102200da7450d022009102e0c020b2002200a20054110747222053b0001200241013a0000200220062903e805370004200220062900e004370021200241036a20054110763a00002002410c6a2001290300370000200241146a2003290300370000200241196a2009290000370000200241286a200641e7046a2900003700000c0c0b200241046a28020021020b0240200141c8006a220b28020022092009417f6a2208200141c0006a220a28020022092001413c6a220c2802006b716b4101470d00200c10a502200b280200417f6a2108200a28020021090b200a2008200941016a71360200200141c4006a28020020094102746a2002360200200141386a280200220920024d0d02200141306a220a280200200241fc006c6a2202290210210f200220062903f00437021020022902082110200220062903e804370208200241186a22092902002111200920062903f804370200200641003a00e004200641003602e4042002290200210d200220062903e00437020020022902402112200241c8006a2902002113200241d0006a2902002114200241d8006a290200211520022902202116200241286a2902002117200241306a2902002118200241386a290200211920064180036a41086a2209200241e8006a29020037030020064180036a41106a2208200241f0006a29020037030020064180036a41186a220b200241f8006a280200360200200620113703f8032006200f3703f003200620103703e8032006200d3703e003200620193703d804200620183703d004200620173703c804200620163703c004200620153703b803200620143703b003200620133703a803200620123703a0032006200229026037038003200641d0036a41086a2202200441086a280200360200200620042902003703d00302400240024002400240024002400240200da7220c41ff01714101470d002003280200211a2003280204211b2003280208210e20064188076a41186a20062802fc0336020020064188076a41106a20062902f40337030020064188076a41086a20062902ec03370300200620062902e40337038807200641bc086a2015370200200641b4086a201437020020064188086a41246a2013370200200641a4086a201237020020064188086a41186a20062802dc0436020020064188086a41106a20062902d40437030020064188086a41086a20062902cc04370300200620062902c4043703880820064188086a413c6a20062903800337020020064188086a41c4006a2009290300370200200641d4086a2008290300370200200641dc086a200b280200360200200641e8056a41086a2002280200360200200620062903d0033703e805200641e0046a200120064188086a2003200641e8056a200510af0820062802e404210220062802e0044101460d07200d420888a721092016a72103200641e8076a41186a220820064180056a280200360200200641e8076a41106a220b200641e0046a41186a290300370300200641e8076a41086a221c200641e0046a41106a221d290300370300200641c8076a41086a221e2006418d056a290000370300200641c8076a41106a221f20064195056a290000370300200641c8076a41176a2220200641e0046a413c6a29000037000020062006290085053703c8072006200641e0046a41086a22212903003703e807200641e0046a41246a2d00002104200641a8076a41086a2222200641ad056a290000370300200641a8076a41106a2223200641b5056a290000370300200641a8076a41176a2224200641bc056a280000360000200620062900a5053703a807200641e0046a41c4006a2d0000210520020e03020501020b200641bc086a2019370200200641b4086a201837020020064188086a41246a2017370200200641a4086a201637020020064188086a41186a20062802fc0336020020064188086a41106a20062902f40337030020064188086a41086a20062902ec0337030020064188086a413c6a20062903a00337020020064188086a41c4006a20062903a803370200200641d4086a20062903b003370200200641dc086a20062802b803360200200620062902e4033703880820064188076a41086a2002280200360200200620062903d00337038807200641e0046a200120064188086a200320064188076a200510af0820062802e404210220062802e0044101460d06200641e8056a41186a220520064180056a280200360200200641e8056a41106a2208200641e0046a41186a290300370300200641e8056a41086a220b200641e0046a41106a290300370300200641c8076a41086a220c2006418d056a290000370300200641c8076a41106a220e20064195056a290000370300200641c8076a41176a221a200641e0046a413c6a29000037000020062006290085053703c8072006200641e0046a41086a2903003703e805200641e0046a41246a2d00002103200641e8076a41086a221b200641ad056a290000370300200641e8076a41106a221c200641b5056a290000370300200641e8076a41176a221d200641bc056a280000360000200620062900a5053703e807200641e0046a41c4006a2d0000210441022101024020020e03000304000b200641e8066a41186a2005280200360200200641e8066a41106a2008290300370300200641e8066a41086a200b290300370300200641c8066a41086a200c290300370300200641c8066a41106a200e290300370300200641c8066a41176a201a290000370000200641a8066a41086a201b290300370300200641a8066a41106a201c290300370300200641a8066a41176a201d280000360000200620062903e8053703e806200620062903c8073703c806200620062903e8073703a80641002101410121090c030b200e410176210202400240200e4101710d000240201b2002490d00410021040c020b2002201b41a0f0cc00104d000b201b2002490d0a2002201b4f0d0b201a20026a2d00004170712108410121040b20064188086a201a200210b008200641b5086a20083a0000200641eb046a20064188076a41086a290300370000200641f3046a20064188076a41106a290300370000200641fb046a20064188076a41186a280200360000200641e0046a41286a20064188086a41086a29030037030020064190056a20064188086a41106a29030037030020064198056a20064188086a41186a290300370300200641a0056a200641a8086a290300370300200620043a00b408200641a8056a20064188086a41286a290300370300200620033a00ff0420062006290388073700e304200620062903880837038005200620093b01e004200620094110763a00e2042001200641e0046a10b108410221010c040b200e410176210202400240200e4101710d000240201b2002490d00410021080c020b2002201b41a0f0cc00104d000b201b2002490d0b2002201b4f0d0c201a20026a2d0000417071210b410121080b20064188086a201a200210b008200641b5086a200b3a0000200641eb046a20064188076a41086a290300370000200641f3046a20064188076a41106a290300370000200641fb046a20064188076a41186a280200360000200641e0046a41286a20064188086a41086a29030037030020064190056a20064188086a41106a29030037030020064198056a20064188086a41186a290300370300200641a0056a200641a8086a290300370300200620083a00b408200641a8056a20064188086a41286a290300370300200620033a00ff0420062006290388073700e304200620062903880837038005200620093b01e004200620094110763a00e2042001200641e0046a10b108200641e8066a41086a200641e8076a41086a290300370300200641e8066a41106a200641e8076a41106a290300370300200641e8066a41186a200641e8076a41186a280200360200200641c8066a41086a200641c8076a41086a290300370300200641c8066a41106a200641c8076a41106a290300370300200641c8066a41176a200641c8076a41176a290000370000200641a8066a41086a200641a8076a41086a290300370300200641a8066a41106a200641a8076a41106a290300370300200641a8066a41176a200641a8076a41176a280000360000200620062903e8073703e806200620062903c8073703c806200620062903a8073703a806410021014101210920042103200521040c030b200641e8066a41186a2005280200360200200641e8066a41106a2008290300370300200641e8066a41086a200b290300370300200641c8066a41086a200c290300370300200641c8066a41106a200e290300370300200641c8066a41176a201a290000370000200641a8066a41086a201b290300370300200641a8066a41106a201c290300370300200641a8066a41176a201d280000360000200620062903e8053703e806200620062903c8073703c806200620062903e8073703a80641002109410021010b410021020c0a0b200641e8066a41086a20064188076a41086a290300370300200641e8066a41106a20064188076a41106a290300370300200641e8066a41186a20064188076a41186a280200360200200641eb046a201c290300370000200641f3046a200b290300370000200641fb046a2008280200360000200641a8066a41176a2020290000370000200641a8066a41106a201f290300370300200641a8066a41086a201e29030037030020062006290388073703e806200620062903e8073700e304200620062903c8073703a80620064188066a41176a202428000036000020064188066a41106a202329030037030020064188066a41086a2022290300370300200641c8066a41176a200641e0046a41176a290000370000200641c8066a41106a201d290000370300200641c8066a41086a2021290000370300200620062903a80737038806200620062900e0043703c80641012101410021090b200c41807e7121020c080b410121010c080b2002200941b0f0cc00104d000b2002200941c0f0cc00103c000b20022009419482ca00103c000b2002201b41b0f0cc00104d000b2002201b41c0f0cc00103c000b2002201b41b0f0cc00104d000b2002201b41c0f0cc00103c000b200641c8076a41186a200641e8066a41186a280200360200200641c8076a41106a200641e8066a41106a290300370300200641c8076a41086a200641e8066a41086a290300370300200641e0046a41086a200641c8066a41086a290300370300200641e0046a41106a200641c8066a41106a290300370300200641e0046a41176a200641c8066a41176a29000037000020064188086a41086a200641a8066a41086a29030037030020064188086a41106a200641a8066a41106a29030037030020064188086a41176a200641a8066a41176a290000370000200620062903e8063703c807200620062903c8063703e004200620062903a80637038808200641e8056a41176a20064188066a41176a280000360000200641e8056a41106a20064188066a41106a290300370300200641e8056a41086a20064188066a41086a29030037030020062006290388063703e80520012002722102410021010b200641e0026a41086a2208200641c8076a41086a290300370300200641e0026a41106a220b200641c8076a41106a290300370300200641e0026a41186a220c200641c8076a41186a280200360200200641c0026a41086a220e200641e0046a41086a290300370300200641c0026a41106a221a200641e0046a41106a290300370300200641c0026a41176a221b200641e0046a41176a290000370000200620062903c8073703e002200620062903e0043703c002200641a0026a41176a221c20064188086a41176a290000370000200641a0026a41106a221d20064188086a41106a290300370300200641a0026a41086a221e20064188086a41086a29030037030020064180026a41086a221f200641e8056a41086a29030037030020064180026a41106a2220200641e8056a41106a29030037030020064180026a41176a2221200641e8056a41176a28000036000020062006290388083703a002200620062903e805370380020240024020010d00200641e0016a41186a200c280200360200200641e0016a41106a200b290300370300200641e0016a41086a2008290300370300200641c0016a41086a200e290300370300200641c0016a41106a201a290300370300200641c0016a41176a201b290000370000200641a0016a41086a201e290300370300200641a0016a41106a201d290300370300200641a0016a41176a201c290000370000200620062903e0023703e001200620062903c0023703c001200620062903a0023703a00120064180016a41176a202128000036000020064180016a41106a202029030037030020064180016a41086a201f290300370300200620062903800237038001200241ff01714102460d01200641e0006a41186a2201200641e0016a41186a280200360200200641e0006a41106a2208200641e0016a41106a290300370300200641e0006a41086a220b200641e0016a41086a290300370300200641c0006a41086a220c200641c0016a41086a290300370300200641c0006a41106a220e200641c0016a41106a290300370300200641c0006a41176a221a200641c0016a41176a290000370000200641206a41086a221b200641a0016a41086a290300370300200641206a41106a221c200641a0016a41106a290300370300200641206a41176a221d200641a0016a41176a290000370000200620062903e001370360200620062903c001370340200620062903a001370320200641176a221e20064180016a41176a280000360000200641106a221f20064180016a41106a290300370300200641086a222020064180016a41086a2903003703002006200629038001370300200641c0046a41086a2221200b290300370300200641c0046a41106a220b2008290300370300200641c0046a41186a22082001280200360200200620062903603703c00420064188086a41086a2201200c29030037030020064188086a41106a220c200e29030037030020064188086a41176a220e201a2900003700002006200629034037038808200641e0036a41086a221a201b290300370300200641e0036a41106a221b201c290300370300200641e0036a41176a221c201d290000370000200620062903203703e003200641a0036a41176a221d201e280000360000200641a0036a41106a221e201f290300370300200641a0036a41086a221f2020290300370300200620062903003703a00320064180056a20033a0000200620023a00e004200620024118763a00e304200620024108763b00e104200641ec046a2021290300370200200641f4046a200b290300370200200641fc046a2008280200360200200620062903c0043702e40420064181056a20062903880837000020064189056a200129030037000020064191056a200c29030037000020064198056a200e290000370000200641a0056a20043a0000200641b8056a201c290000370000200641b1056a201b290300370000200641a9056a201a290300370000200641a1056a20062903e003370000200641c0056a20053a0000200641d8056a201d280000360000200641d1056a201e290300370000200641c9056a201f290300370000200641c1056a20062903a003370000200a200641e0046a109d082106200041086a20093a00002000200636020420004100360200200724000f0b20004101360200200020023602040c030b41d0accb00411841e8accb00105d000b200da7450d002009102e0b2000410136020020002002360204200441046a280200450d002004280200102e200724000f0b200724000ba3a3011f047f017e017f017e017f017e017f017e017f017e017f017e017f017e017f017e017f017e017f017e017f017e017f017e017f017e027f017e087f017e087f230041b00e6b22052400200541086a2002200310a802024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020052d00084101470d0020052d00092102200541900e6a41086a2203200141086a290000370300200541900e6a41106a2204200141106a290000370300200541900e6a41186a2206200141186a290000370300200520012900003703900e4130102c22010d010c2a0b200541d4016a2802002107200541d0016a2802002108200541c8016a2903002109200541c4016a280200210a200541bc016a290200210b200541b8016a280200210c200541b0016a290300210d200541ac016a280200210e200541a4016a290200210f200541a0016a280200211020054198016a290300211120054194016a28020021122005418c016a290200211320054188016a280200211420054180016a2903002115200541fc006a2802002116200541f4006a2902002117200541f0006a2802002118200541e8006a2903002119200541e4006a280200211a200541dc006a290200211b200541086a41d0006a280200211c200541086a41c8006a290300211d200541086a41c4006a280200211e200541086a413c6a290200211f200541086a41386a2802002120200541386a2903002121200541086a412c6a2802002122200541086a41246a22232902002124200541286a22252802002126200541086a411c6a22272802002128200541086a41186a22292802002102200541086a41146a222a280200212b200541086a410c6a222c290200212d200541086a41086a222e280200212f41002130200528020c0e051502030401150b200141033a0000200120052903900e370001200120023a0021200120052901e00d370122200141096a2003290300370000200141116a2004290300370000200141196a2006290300370000200141286a200541e60d6a29010037010020004101360200200020013602040c270b200541e0016a2802002106200541dc016a2802002131200541d8016a28020021324102210302400240202b4102470d0041002102410021330c010b200541900e6a41186a2233200141186a290000370300200541900e6a41106a2234200141106a290000370300200541900e6a41086a2235200141086a290000370300200520012900003703900e200541e00d6a41086a2028360200200520023602e40d2005202b3602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012102024020052802084101460d002033200541286a2903003703002034200541086a41186a2903003703002035200541086a41106a2903003703002005200541086a41086a2903003703900e410021020b200341807e7121330b200541c0066a41186a2234200541900e6a41186a290300370300200541c0066a41106a2235200541900e6a41106a290300370300200541c0066a41086a222b200541900e6a41086a290300370300200520052903900e3703c0062033200341ff017172213320020d03200541a0066a41186a2034290300370300200541a0066a41106a2035290300370300200541a0066a41086a202b290300370300200520052903c0063703a006410221024100210341002134024020264102460d00200541900e6a41186a2234200141186a290000370300200541900e6a41106a2235200141106a290000370300200541900e6a41086a222b200141086a290000370300200520012900003703900e200520243702e40d200520263602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210241012103024020052802084101460d002034200541286a2903003703002035200541086a41186a290300370300202b200541086a41106a2903003703002005200541086a41086a2903003703900e410021030b200241807e7121340b20054180076a41186a2235200541900e6a41186a29030037030020054180076a41106a222b200541900e6a41106a29030037030020054180076a41086a2230200541900e6a41086a290300370300200520052903900e370380072034200241ff017172210220030d04200541e0066a41186a2035290300370300200541e0066a41106a202b290300370300200541e0066a41086a203029030037030020052005290380073703e006410221034100213441002135024020224102460d00200541900e6a41186a2235200141186a290000370300200541900e6a41106a222b200141106a290000370300200541900e6a41086a2230200141086a290000370300200520012900003703900e200520213702e40d200520223602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012134024020052802084101460d002035200541286a290300370300202b200541086a41186a2903003703002030200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e7121350b200541c0076a41186a222b200541900e6a41186a290300370300200541c0076a41106a2230200541900e6a41106a290300370300200541c0076a41086a222e200541900e6a41086a290300370300200520052903900e3703c0072035200341ff017172213520340d05200541a0076a41186a202b290300370300200541a0076a41106a2030290300370300200541a0076a41086a202e290300370300200520052903c0073703a00741022103410021344100212b024020204102460d00200541900e6a41186a222b200141186a290000370300200541900e6a41106a2230200141106a290000370300200541900e6a41086a222e200141086a290000370300200520012900003703900e2005201f3702e40d200520203602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012134024020052802084101460d00202b200541286a2903003703002030200541086a41186a290300370300202e200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e71212b0b20054180086a41186a2230200541900e6a41186a29030037030020054180086a41106a222e200541900e6a41106a29030037030020054180086a41086a2225200541900e6a41086a290300370300200520052903900e37038008202b200341ff017172212b20340d06200541e0076a41186a2030290300370300200541e0076a41106a202e290300370300200541e0076a41086a202529030037030020052005290380083703e0074102210341002134410021300240201e4102460d00200541900e6a41186a2230200141186a290000370300200541900e6a41106a222e200141106a290000370300200541900e6a41086a2225200141086a290000370300200520012900003703900e2005201d3702e40d2005201e3602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012134024020052802084101460d002030200541286a290300370300202e200541086a41186a2903003703002025200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e7121300b200541c0086a41186a222e200541900e6a41186a290300370300200541c0086a41106a2225200541900e6a41106a290300370300200541c0086a41086a2229200541900e6a41086a290300370300200520052903900e3703c0082030200341ff017172213020340d07200541a0086a41186a202e290300370300200541a0086a41106a2025290300370300200541a0086a41086a2029290300370300200520052903c0083703a00841022103410021344100212e0240201c4102460d00200541900e6a41186a222e200141186a290000370300200541900e6a41106a2225200141106a290000370300200541900e6a41086a2229200141086a290000370300200520012900003703900e2005201b3702e40d2005201c3602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012134024020052802084101460d00202e200541286a2903003703002025200541086a41186a2903003703002029200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e71212e0b20054180096a41186a2225200541900e6a41186a29030037030020054180096a41106a2229200541900e6a41106a29030037030020054180096a41086a222c200541900e6a41086a290300370300200520052903900e37038009202e200341ff017172212e20340d08200541e0086a41186a2025290300370300200541e0086a41106a2029290300370300200541e0086a41086a202c29030037030020052005290380093703e0084102210341002134410021250240201a4102460d00200541900e6a41186a2225200141186a290000370300200541900e6a41106a2229200141106a290000370300200541900e6a41086a222c200141086a290000370300200520012900003703900e200520193702e40d2005201a3602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012134024020052802084101460d002025200541286a2903003703002029200541086a41186a290300370300202c200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e7121250b200541c0096a41186a2229200541900e6a41186a290300370300200541c0096a41106a222c200541900e6a41106a290300370300200541c0096a41086a2228200541900e6a41086a290300370300200520052903900e3703c0092025200341ff017172212520340d09200541a0096a41186a2029290300370300200541a0096a41106a202c290300370300200541a0096a41086a2028290300370300200520052903c0093703a009410221034100213441002129024020184102460d00200541900e6a41186a2229200141186a290000370300200541900e6a41106a222c200141106a290000370300200541900e6a41086a2228200141086a290000370300200520012900003703900e200520173702e40d200520183602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012134024020052802084101460d002029200541286a290300370300202c200541086a41186a2903003703002028200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e7121290b200541800a6a41186a222c200541900e6a41186a290300370300200541800a6a41106a2228200541900e6a41106a290300370300200541800a6a41086a2226200541900e6a41086a290300370300200520052903900e3703800a2029200341ff017172212920340d0a200541e0096a41186a202c290300370300200541e0096a41106a2028290300370300200541e0096a41086a2026290300370300200520052903800a3703e00941022103410021344100212c024020164102460d00200541900e6a41186a222c200141186a290000370300200541900e6a41106a2228200141106a290000370300200541900e6a41086a2226200141086a290000370300200520012900003703900e200520153702e40d200520163602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012134024020052802084101460d00202c200541286a2903003703002028200541086a41186a2903003703002026200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e71212c0b200541c00a6a41186a2228200541900e6a41186a290300370300200541c00a6a41106a2226200541900e6a41106a290300370300200541c00a6a41086a2223200541900e6a41086a290300370300200520052903900e3703c00a202c200341ff017172212c20340d0b200541a00a6a41186a2028290300370300200541a00a6a41106a2026290300370300200541a00a6a41086a2023290300370300200520052903c00a3703a00a410221034100213441002128024020144102460d00200541900e6a41186a2228200141186a290000370300200541900e6a41106a2226200141106a290000370300200541900e6a41086a2223200141086a290000370300200520012900003703900e200520133702e40d200520143602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012134024020052802084101460d002028200541286a2903003703002026200541086a41186a2903003703002023200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e7121280b200541800b6a41186a2226200541900e6a41186a290300370300200541800b6a41106a2223200541900e6a41106a290300370300200541800b6a41086a2227200541900e6a41086a290300370300200520052903900e3703800b2028200341ff017172212820340d0c200541e00a6a41186a2026290300370300200541e00a6a41106a2023290300370300200541e00a6a41086a2027290300370300200520052903800b3703e00a410221034100213441002126024020124102460d00200541900e6a41186a2226200141186a290000370300200541900e6a41106a2223200141106a290000370300200541900e6a41086a2227200141086a290000370300200520012900003703900e200520113702e40d200520123602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012134024020052802084101460d002026200541286a2903003703002023200541086a41186a2903003703002027200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e7121260b200541c00b6a41186a2223200541900e6a41186a290300370300200541c00b6a41106a2227200541900e6a41106a290300370300200541c00b6a41086a222a200541900e6a41086a290300370300200520052903900e3703c00b2026200341ff017172212620340d0d200541a00b6a41186a2023290300370300200541a00b6a41106a2027290300370300200541a00b6a41086a202a290300370300200520052903c00b3703a00b410221034100213441002123024020104102460d00200541900e6a41186a2223200141186a290000370300200541900e6a41106a2227200141106a290000370300200541900e6a41086a222a200141086a290000370300200520012900003703900e2005200f3702e40d200520103602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012134024020052802084101460d002023200541286a2903003703002027200541086a41186a290300370300202a200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e7121230b200541800c6a41186a2227200541900e6a41186a290300370300200541800c6a41106a222a200541900e6a41106a290300370300200541800c6a41086a2222200541900e6a41086a290300370300200520052903900e3703800c2023200341ff017172212320340d0e200541e00b6a41186a2027290300370300200541e00b6a41106a202a290300370300200541e00b6a41086a2022290300370300200520052903800c3703e00b4102210341002134410021270240200e4102460d00200541900e6a41186a2227200141186a290000370300200541900e6a41106a222a200141106a290000370300200541900e6a41086a2222200141086a290000370300200520012900003703900e2005200d3702e40d2005200e3602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012134024020052802084101460d002027200541286a290300370300202a200541086a41186a2903003703002022200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e7121270b200541c00c6a41186a222a200541900e6a41186a290300370300200541c00c6a41106a2222200541900e6a41106a290300370300200541c00c6a41086a2220200541900e6a41086a290300370300200520052903900e3703c00c2027200341ff017172212720340d0f200541a00c6a41186a202a290300370300200541a00c6a41106a2022290300370300200541a00c6a41086a2020290300370300200520052903c00c3703a00c41022103410021344100212a0240200c4102460d00200541900e6a41186a222a200141186a290000370300200541900e6a41106a2222200141106a290000370300200541900e6a41086a2220200141086a290000370300200520012900003703900e2005200b3702e40d2005200c3602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012134024020052802084101460d00202a200541286a2903003703002022200541086a41186a2903003703002020200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e71212a0b200541800d6a41186a2222200541900e6a41186a290300370300200541800d6a41106a2220200541900e6a41106a290300370300200541800d6a41086a221e200541900e6a41086a290300370300200520052903900e3703800d202a200341ff017172212a20340d10200541e00c6a41186a2022290300370300200541e00c6a41106a2020290300370300200541e00c6a41086a201e290300370300200520052903800d3703e00c4102213441002103410021220240200a4102460d00200541900e6a41186a2222200141186a290000370300200541900e6a41106a2220200141106a290000370300200541900e6a41086a221e200141086a290000370300200520012900003703900e200520093702e40d2005200a3602e00d200541086a200541900e6a200541e00d6a200410b208200528020c213441012103024020052802084101460d002022200541286a2903003703002020200541086a41186a290300370300201e200541086a41106a2903003703002005200541086a41086a2903003703900e410021030b203441807e712122203441ff017121340b200541c00d6a41186a2220200541900e6a41186a290300370300200541c00d6a41106a221e200541900e6a41106a290300370300200541c00d6a41086a221c200541900e6a41086a290300370300200520052903900e3703c00d2022203472213420030d24200541a00d6a41186a2020290300370300200541a00d6a41106a201e290300370300200541a00d6a41086a201c290300370300200520052903c00d3703a00d4102210320084102470d1141002101410021040c120b200541086a202f202da710b008200541900e6a41086a2029290300370300200541900e6a41106a2025290300370300200541900e6a41186a200541306a2802003602002005200541086a41106a2903003703900e2002417f4c0d14202c2802002135202e2802002134200528020c210720052802082133410121304101210302402002450d002002102c2203450d270b202d422088a721312003202b200210e9081a20054180026a41186a200541900e6a41186a28020036020020054180026a41106a200541900e6a41106a29030037030020054180026a41086a200541900e6a41086a290300370300200520052903900e37038002200221320c120b200541086a202f202da710b008200541e00d6a41086a2029290300370300200541e00d6a41106a22312025290300370300200541e00d6a41186a200541306a2802003602002005200541086a41106a22062903003703e00d202c2802002135202e2802002134200528020c210720052802082133200541900e6a41186a200141186a290000370300200541900e6a41106a200141106a290000370300200541900e6a41086a200141086a290000370300200520012900003703900e200541a00d6a41086a2028360200200520023602a40d2005202b3602a00d200541086a200541900e6a200541a00d6a200410b208200541c00d6a41086a2027290200370300200541c00d6a41106a220120232802003602002005202a2902003703c00d200528020c2103024020052802084101460d00202e290300212420062802002106200541e8016a41106a2001280200360200200541e8016a41086a200541c00d6a41086a29030037030020054180026a41086a200541e00d6a41086a29030037030020054180026a41106a203129030037030020054180026a41186a200541e00d6a41186a280200360200200520052903c00d3703e801200520052903e00d370380022024422088a72132202d422088a721312024a72102410221300c120b200041013602002000200336020420334125490d242034102e0c240b4102210341002133410021060240202f4102460d00200541900e6a41186a2233200141186a290000370300200541900e6a41106a2234200141106a290000370300200541900e6a41086a2235200141086a290000370300200520012900003703900e2005202d3702e40d2005202f3602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012106024020052802084101460d002033200541286a2903003703002034200541086a41186a2903003703002035200541086a41106a2903003703002005200541086a41086a2903003703900e410021060b200341807e7121330b200541c0066a41186a2234200541900e6a41186a290300370300200541c0066a41106a2235200541900e6a41106a290300370300200541c0066a41086a2231200541900e6a41086a290300370300200520052903900e3703c006200341ff0171203372213320060d11200541a0066a41186a2034290300370300200541a0066a41106a2035290300370300200541a0066a41086a2031290300370300200520052903c0063703a0064102210302400240202b4102470d0041002106410021020c010b200541900e6a41186a2206200141186a290000370300200541900e6a41106a2234200141106a290000370300200541900e6a41086a2235200141086a290000370300200520012900003703900e200541e00d6a41086a2028360200200520023602e40d2005202b3602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210341012102024020052802084101460d002006200541286a2903003703002034200541086a41186a2903003703002035200541086a41106a2903003703002005200541086a41086a2903003703900e410021020b200341807e7121060b20054180076a41186a2234200541900e6a41186a29030037030020054180076a41106a2235200541900e6a41106a29030037030020054180076a41086a222b200541900e6a41086a290300370300200520052903900e37038007200341ff0171200672210320020d13200541e0066a41186a2034290300370300200541e0066a41106a2035290300370300200541e0066a41086a202b29030037030020052005290380073703e006410221024100213441002106024020264102460d00200541900e6a41186a2234200141186a290000370300200541900e6a41106a2235200141106a290000370300200541900e6a41086a222b200141086a290000370300200520012900003703900e200520243702e40d200520263602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210241012106024020052802084101460d002034200541286a2903003703002035200541086a41186a290300370300202b200541086a41106a2903003703002005200541086a41086a2903003703900e410021060b200241807e7121340b200541c0076a41186a2235200541900e6a41186a290300370300200541c0076a41106a222b200541900e6a41106a290300370300200541c0076a41086a2231200541900e6a41086a290300370300200520052903900e3703c007200241ff0171203472210220060d14200541a0076a41186a2035290300370300200541a0076a41106a202b290300370300200541a0076a41086a2031290300370300200520052903c0073703a007410221064100213541002134024020224102460d00200541900e6a41186a2235200141186a290000370300200541900e6a41106a222b200141106a290000370300200541900e6a41086a2231200141086a290000370300200520012900003703900e200520213702e40d200520223602e00d200541086a200541900e6a200541e00d6a200410b208200528020c210641012134024020052802084101460d002035200541286a290300370300202b200541086a41186a2903003703002031200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200641807e7121350b20054180086a41186a222b200541900e6a41186a29030037030020054180086a41106a2231200541900e6a41106a29030037030020054180086a41086a2232200541900e6a41086a290300370300200520052903900e37038008200641ff0171203572210620340d15200541e0076a41186a202b290300370300200541e0076a41106a2031290300370300200541e0076a41086a203229030037030020052005290380083703e007410221344100212b41002135024020204102460d00200541900e6a41186a222b200141186a290000370300200541900e6a41106a2231200141106a290000370300200541900e6a41086a2232200141086a290000370300200520012900003703900e2005201f3702e40d200520203602e00d200541086a200541900e6a200541e00d6a200410b208200528020c213441012135024020052802084101460d00202b200541286a2903003703002031200541086a41186a2903003703002032200541086a41106a2903003703002005200541086a41086a2903003703900e410021350b203441807e71212b0b200541c0086a41186a2231200541900e6a41186a290300370300200541c0086a41106a2232200541900e6a41106a290300370300200541c0086a41086a2230200541900e6a41086a290300370300200520052903900e3703c008203441ff0171202b72213420350d16200541a0086a41186a2031290300370300200541a0086a41106a2032290300370300200541a0086a41086a2030290300370300200520052903c0083703a00841022135410021314100212b0240201e4102460d00200541900e6a41186a2231200141186a290000370300200541900e6a41106a2232200141106a290000370300200541900e6a41086a2230200141086a290000370300200520012900003703900e2005201d3702e40d2005201e3602e00d200541086a200541900e6a200541e00d6a200410b208200528020c21354101212b024020052802084101460d002031200541286a2903003703002032200541086a41186a2903003703002030200541086a41106a2903003703002005200541086a41086a2903003703900e4100212b0b203541807e7121310b20054180096a41186a2232200541900e6a41186a29030037030020054180096a41106a2230200541900e6a41106a29030037030020054180096a41086a222f200541900e6a41086a290300370300200520052903900e37038009203541ff01712031722135202b0d17200541e0086a41186a2032290300370300200541e0086a41106a2030290300370300200541e0086a41086a202f29030037030020052005290380093703e0084102212b41002132410021310240201c4102460d00200541900e6a41186a2232200141186a290000370300200541900e6a41106a2230200141106a290000370300200541900e6a41086a222f200141086a290000370300200520012900003703900e2005201b3702e40d2005201c3602e00d200541086a200541900e6a200541e00d6a200410b208200528020c212b41012131024020052802084101460d002032200541286a2903003703002030200541086a41186a290300370300202f200541086a41106a2903003703002005200541086a41086a2903003703900e410021310b202b41807e7121320b200541c0096a41186a2230200541900e6a41186a290300370300200541c0096a41106a222f200541900e6a41106a290300370300200541c0096a41086a222e200541900e6a41086a290300370300200520052903900e3703c009202b41ff0171203272212b20310d18200541a0096a41186a2030290300370300200541a0096a41106a202f290300370300200541a0096a41086a202e290300370300200520052903c0093703a0094102213141002130410021320240201a4102460d00200541900e6a41186a2230200141186a290000370300200541900e6a41106a222f200141106a290000370300200541900e6a41086a222e200141086a290000370300200520012900003703900e200520193702e40d2005201a3602e00d200541086a200541900e6a200541e00d6a200410b208200528020c213141012132024020052802084101460d002030200541286a290300370300202f200541086a41186a290300370300202e200541086a41106a2903003703002005200541086a41086a2903003703900e410021320b203141807e7121300b200541800a6a41186a222f200541900e6a41186a290300370300200541800a6a41106a222e200541900e6a41106a290300370300200541800a6a41086a2225200541900e6a41086a290300370300200520052903900e3703800a203141ff0171203072213020320d19200541e0096a41186a202f290300370300200541e0096a41106a202e290300370300200541e0096a41086a2025290300370300200520052903800a3703e009410221314100212f41002132024020184102460d00200541900e6a41186a222f200141186a290000370300200541900e6a41106a222e200141106a290000370300200541900e6a41086a2225200141086a290000370300200520012900003703900e200520173702e40d200520183602e00d200541086a200541900e6a200541e00d6a200410b208200528020c213141012132024020052802084101460d00202f200541286a290300370300202e200541086a41186a2903003703002025200541086a41106a2903003703002005200541086a41086a2903003703900e410021320b203141807e71212f0b200541c00a6a41186a222e200541900e6a41186a290300370300200541c00a6a41106a2225200541900e6a41106a290300370300200541c00a6a41086a2229200541900e6a41086a290300370300200520052903900e3703c00a203141ff0171202f72212f20320d1a200541a00a6a41186a202e290300370300200541a00a6a41106a2025290300370300200541a00a6a41086a2029290300370300200520052903c00a3703a00a410221314100212e41002132024020164102460d00200541900e6a41186a222e200141186a290000370300200541900e6a41106a2225200141106a290000370300200541900e6a41086a2229200141086a290000370300200520012900003703900e200520153702e40d200520163602e00d200541086a200541900e6a200541e00d6a200410b208200528020c213141012132024020052802084101460d00202e200541286a2903003703002025200541086a41186a2903003703002029200541086a41106a2903003703002005200541086a41086a2903003703900e410021320b203141807e71212e0b200541800b6a41186a2225200541900e6a41186a290300370300200541800b6a41106a2229200541900e6a41106a290300370300200541800b6a41086a222c200541900e6a41086a290300370300200520052903900e3703800b203141ff0171202e72212e20320d1b200541e00a6a41186a2025290300370300200541e00a6a41106a2029290300370300200541e00a6a41086a202c290300370300200520052903800b3703e00a410221314100212541002132024020144102460d00200541900e6a41186a2225200141186a290000370300200541900e6a41106a2229200141106a290000370300200541900e6a41086a222c200141086a290000370300200520012900003703900e200520133702e40d200520143602e00d200541086a200541900e6a200541e00d6a200410b208200528020c213141012132024020052802084101460d002025200541286a2903003703002029200541086a41186a290300370300202c200541086a41106a2903003703002005200541086a41086a2903003703900e410021320b203141807e7121250b200541c00b6a41186a2229200541900e6a41186a290300370300200541c00b6a41106a222c200541900e6a41106a290300370300200541c00b6a41086a2228200541900e6a41086a290300370300200520052903900e3703c00b203141ff0171202572212520320d1c200541a00b6a41186a2029290300370300200541a00b6a41106a202c290300370300200541a00b6a41086a2028290300370300200520052903c00b3703a00b410221314100213241002129024020124102460d00200541900e6a41186a2229200141186a290000370300200541900e6a41106a222c200141106a290000370300200541900e6a41086a2228200141086a290000370300200520012900003703900e200520113702e40d200520123602e00d200541086a200541900e6a200541e00d6a200410b208200528020c213141012132024020052802084101460d002029200541286a290300370300202c200541086a41186a2903003703002028200541086a41106a2903003703002005200541086a41086a2903003703900e410021320b203141807e7121290b200541800c6a41186a222c200541900e6a41186a290300370300200541800c6a41106a2228200541900e6a41106a290300370300200541800c6a41086a2226200541900e6a41086a290300370300200520052903900e3703800c2029203141ff017172212920320d1d200541e00b6a41186a202c290300370300200541e00b6a41106a2028290300370300200541e00b6a41086a2026290300370300200520052903800c3703e00b41022131410021324100212c024020104102460d00200541900e6a41186a222c200141186a290000370300200541900e6a41106a2228200141106a290000370300200541900e6a41086a2226200141086a290000370300200520012900003703900e2005200f3702e40d200520103602e00d200541086a200541900e6a200541e00d6a200410b208200528020c213141012132024020052802084101460d00202c200541286a2903003703002028200541086a41186a2903003703002026200541086a41106a2903003703002005200541086a41086a2903003703900e410021320b203141807e71212c0b200541c00c6a41186a2228200541900e6a41186a290300370300200541c00c6a41106a2226200541900e6a41106a290300370300200541c00c6a41086a2223200541900e6a41086a290300370300200520052903900e3703c00c202c203141ff017172212c20320d1e200541a00c6a41186a2028290300370300200541a00c6a41106a2026290300370300200541a00c6a41086a2023290300370300200520052903c00c3703a00c4102213141002132410021280240200e4102460d00200541900e6a41186a2228200141186a290000370300200541900e6a41106a2226200141106a290000370300200541900e6a41086a2223200141086a290000370300200520012900003703900e2005200d3702e40d2005200e3602e00d200541086a200541900e6a200541e00d6a200410b208200528020c213141012132024020052802084101460d002028200541286a2903003703002026200541086a41186a2903003703002023200541086a41106a2903003703002005200541086a41086a2903003703900e410021320b203141807e7121280b200541800d6a41186a2226200541900e6a41186a290300370300200541800d6a41106a2223200541900e6a41106a290300370300200541800d6a41086a2227200541900e6a41086a290300370300200520052903900e3703800d2028203141ff017172212820320d1f200541e00c6a41186a2026290300370300200541e00c6a41106a2023290300370300200541e00c6a41086a2027290300370300200520052903800d3703e00c4102213241002131410021260240200c4102460d00200541900e6a41186a2226200141186a290000370300200541900e6a41106a2223200141106a290000370300200541900e6a41086a2227200141086a290000370300200520012900003703900e2005200b3702e40d2005200c3602e00d200541086a200541900e6a200541e00d6a200410b208200528020c213241012131024020052802084101460d002026200541286a2903003703002023200541086a41186a2903003703002027200541086a41106a2903003703002005200541086a41086a2903003703900e410021310b203241807e712126203241ff017121320b200541c00d6a41186a2223200541900e6a41186a290300370300200541c00d6a41106a2227200541900e6a41106a290300370300200541c00d6a41086a222a200541900e6a41086a290300370300200520052903900e3703c00d2026203272213220310d20200541a00d6a41186a2023290300370300200541a00d6a41106a2027290300370300200541a00d6a41086a202a290300370300200520052903c00d3703a00d4102212641002131410021230240200a4102460d00200541900e6a41186a2226200141186a290000370300200541900e6a41106a2223200141106a290000370300200541900e6a41086a2227200141086a290000370300200520012900003703900e200520093702840e2005200a3602800e200541086a200541900e6a200541800e6a200410b208200528020c210141012131024020052802084101460d002026200541286a2903003703002023200541086a41186a2903003703002027200541086a41106a2903003703002005200541086a41086a2903003703900e410021310b200141807e712123200141ff017121260b200541e00d6a41186a2204200541900e6a41186a290300370300200541e00d6a41106a2227200541900e6a41106a290300370300200541e00d6a41086a222a200541900e6a41086a290300370300200520052903900e3703e00d20232026722101024020310d00200541a0026a41186a2004290300370300200541a0026a41106a2027290300370300200541a0026a41086a202a29030037030020054180066a41086a200541a0066a41086a29030037030020054180066a41106a200541a0066a41106a29030037030020054180066a41186a200541a0066a41186a290300370300200541e0056a41086a200541e0066a41086a290300370300200541e0056a41106a200541e0066a41106a290300370300200541e0056a41186a200541e0066a41186a290300370300200520052903e00d3703a002200520052903a00637038006200520052903e0063703e005200541c0056a41186a200541a0076a41186a290300370300200541c0056a41106a200541a0076a41106a290300370300200541c0056a41086a200541a0076a41086a290300370300200541a0056a41086a200541e0076a41086a290300370300200541a0056a41106a200541e0076a41106a290300370300200541a0056a41186a200541e0076a41186a29030037030020054180056a41086a200541a0086a41086a29030037030020054180056a41106a200541a0086a41106a29030037030020054180056a41186a200541a0086a41186a290300370300200520052903a0073703c005200520052903e0073703a005200520052903a00837038005200541e0046a41186a200541e0086a41186a290300370300200541e0046a41106a200541e0086a41106a290300370300200541e0046a41086a200541e0086a41086a290300370300200541c0046a41186a200541a0096a41186a290300370300200541c0046a41106a200541a0096a41106a290300370300200541c0046a41086a200541a0096a41086a290300370300200541a0046a41186a200541e0096a41186a290300370300200541a0046a41106a200541e0096a41106a290300370300200541a0046a41086a200541e0096a41086a290300370300200520052903e0083703e004200520052903a0093703c004200520052903e0093703a00420054180046a41186a200541a00a6a41186a29030037030020054180046a41106a200541a00a6a41106a29030037030020054180046a41086a200541a00a6a41086a290300370300200520052903a00a37038004200541e0036a41186a200541e00a6a41186a290300370300200541e0036a41106a200541e00a6a41106a290300370300200541e0036a41086a200541e00a6a41086a290300370300200520052903e00a3703e003200541c0036a41186a200541a00b6a41186a290300370300200541c0036a41106a200541a00b6a41106a290300370300200541c0036a41086a200541a00b6a41086a290300370300200520052903a00b3703c003200541a0036a41186a200541e00b6a41186a290300370300200541a0036a41106a200541e00b6a41106a290300370300200541a0036a41086a200541e00b6a41086a290300370300200520052903e00b3703a00320054180036a41186a200541a00c6a41186a29030037030020054180036a41106a200541a00c6a41106a29030037030020054180036a41086a200541a00c6a41086a290300370300200520052903a00c37038003200541e0026a41186a200541e00c6a41186a290300370300200541e0026a41106a200541e00c6a41106a290300370300200541e0026a41086a200541e00c6a41086a290300370300200520052903e00c3703e002200541c0026a41186a200541a00d6a41186a290300370300200541c0026a41106a200541a00d6a41106a290300370300200541c0026a41086a200541a00d6a41086a290300370300200520052903a00d3703c00241c004102c2231450d2520312033360200203120052903800637020420312003360224203120052903e0053702282031410c6a20054180066a41086a290300370200203141146a20054180066a41106a2903003702002031411c6a20054180066a41186a290300370200203141306a200541e0056a41086a290300370200203141386a200541e0056a41106a290300370200203141c0006a200541e0056a41186a290300370200203120023602482031200636026c203120052903c00537024c203141d4006a200541c0056a41086a290300370200203141dc006a200541c0056a41106a290300370200203141e4006a200541c0056a41186a290300370200203120052903a005370270203141f8006a200541a0056a41086a29030037020020314180016a200541a0056a41106a29030037020020314188016a200541a0056a41186a2903003702002031203436029001203120353602b401203141ac016a20054180056a41186a290300370200203141a4016a20054180056a41106a2903003702002031419c016a20054180056a41086a290300370200203120052903800537029401203141d0016a200541e0046a41186a290300370200203141c8016a200541e0046a41106a290300370200203141c0016a200541e0046a41086a290300370200203120052903e0043702b8012031202b3602d801203141f4016a200541c0046a41186a290300370200203141ec016a200541c0046a41106a290300370200203141e4016a200541c0046a41086a290300370200203120052903c0043702dc01203120303602fc0120314198026a200541a0046a41186a29030037020020314190026a200541a0046a41106a29030037020020314188026a200541a0046a41086a290300370200203120052903a004370280022031202f3602a002203141bc026a20054180046a41186a290300370200203141b4026a20054180046a41106a290300370200203141ac026a20054180046a41086a29030037020020312005290380043702a4022031202e3602c402203141e0026a200541e0036a41186a290300370200203141d8026a200541e0036a41106a290300370200203141d0026a200541e0036a41086a290300370200203120052903e0033702c802203120253602e80220314184036a200541c0036a41186a290300370200203141fc026a200541c0036a41106a290300370200203141f4026a200541c0036a41086a290300370200203120052903c0033702ec022031202936028c03203141a8036a200541a0036a41186a290300370200203141a0036a200541a0036a41106a29030037020020314198036a200541a0036a41086a290300370200203120052903a003370290032031202c3602b003203141cc036a20054180036a41186a290300370200203141c4036a20054180036a41106a290300370200203141bc036a20054180036a41086a29030037020020312005290380033702b403203120283602d403203141f0036a200541e0026a41186a290300370200203141e8036a200541e0026a41106a290300370200203141e0036a200541e0026a41086a290300370200203120052903e0023702d803203120323602f80320314194046a200541c0026a41186a2903003702002031418c046a200541c0026a41106a29030037020020314184046a200541c0026a41086a290300370200203120052903c0023702fc032031200136029c04203141b8046a200541a0026a41186a290300370200203141b0046a200541a0026a41106a290300370200203141a8046a200541a0026a41086a290300370200203120052903a0023702a00441032130024020080d0041002133200721340c120b2007417f4c0d130240024020070d00410121330c010b2007102c2233450d260b20332008200710e9081a200721340c110b20004101360200200020013602040c230b20004101360200200020333602040c220b20004101360200200020023602040c210b20004101360200200020353602040c200b200041013602002000202b3602040c1f0b20004101360200200020303602040c1e0b200041013602002000202e3602040c1d0b20004101360200200020253602040c1c0b20004101360200200020293602040c1b0b200041013602002000202c3602040c1a0b20004101360200200020283602040c190b20004101360200200020263602040c180b20004101360200200020233602040c170b20004101360200200020273602040c160b200041013602002000202a3602040c150b200541900e6a41186a2222200141186a290000370300200541900e6a41106a2220200141106a290000370300200541900e6a41086a221e200141086a290000370300200520012900003703900e200541800e6a41086a2032360200200520073602840e200520083602800e200541086a200541900e6a200541800e6a200410b208200528020c210341012101024020052802084101460d002022200541286a2903003703002020200541086a41186a290300370300201e200541086a41106a2903003703002005200541086a41086a2903003703900e410021010b200341807e712104200341ff017121030b200541e00d6a41186a2207200541900e6a41186a290300370300200541e00d6a41106a2232200541900e6a41106a290300370300200541e00d6a41086a2222200541900e6a41086a290300370300200520052903900e3703e00d2004200372210420010d12200541a0026a41186a2007290300370300200541a0026a41106a2032290300370300200541a0026a41086a202229030037030020054180066a41086a200541a0066a41086a29030037030020054180066a41106a200541a0066a41106a29030037030020054180066a41186a200541a0066a41186a290300370300200541e0056a41086a200541e0066a41086a290300370300200541e0056a41106a200541e0066a41106a290300370300200541e0056a41186a200541e0066a41186a290300370300200520052903e00d3703a002200520052903a00637038006200520052903e0063703e005200541c0056a41186a200541a0076a41186a290300370300200541c0056a41106a200541a0076a41106a290300370300200541c0056a41086a200541a0076a41086a290300370300200541a0056a41086a200541e0076a41086a290300370300200541a0056a41106a200541e0076a41106a290300370300200541a0056a41186a200541e0076a41186a29030037030020054180056a41086a200541a0086a41086a29030037030020054180056a41106a200541a0086a41106a29030037030020054180056a41186a200541a0086a41186a290300370300200520052903a0073703c005200520052903e0073703a005200520052903a00837038005200541e0046a41186a200541e0086a41186a290300370300200541e0046a41106a200541e0086a41106a290300370300200541e0046a41086a200541e0086a41086a290300370300200541c0046a41186a200541a0096a41186a290300370300200541c0046a41106a200541a0096a41106a290300370300200541c0046a41086a200541a0096a41086a290300370300200541a0046a41186a200541e0096a41186a290300370300200541a0046a41106a200541e0096a41106a290300370300200541a0046a41086a200541e0096a41086a290300370300200520052903e0083703e004200520052903a0093703c004200520052903e0093703a00420054180046a41186a200541a00a6a41186a29030037030020054180046a41106a200541a00a6a41106a29030037030020054180046a41086a200541a00a6a41086a290300370300200520052903a00a37038004200541e0036a41186a200541e00a6a41186a290300370300200541e0036a41106a200541e00a6a41106a290300370300200541e0036a41086a200541e00a6a41086a290300370300200520052903e00a3703e003200541c0036a41186a200541a00b6a41186a290300370300200541c0036a41106a200541a00b6a41106a290300370300200541c0036a41086a200541a00b6a41086a290300370300200520052903a00b3703c003200541a0036a41186a200541e00b6a41186a290300370300200541a0036a41106a200541e00b6a41106a290300370300200541a0036a41086a200541e00b6a41086a290300370300200520052903e00b3703a00320054180036a41186a200541a00c6a41186a29030037030020054180036a41106a200541a00c6a41106a29030037030020054180036a41086a200541a00c6a41086a290300370300200520052903a00c37038003200541e0026a41186a200541e00c6a41186a290300370300200541e0026a41106a200541e00c6a41106a290300370300200541e0026a41086a200541e00c6a41086a290300370300200520052903e00c3703e002200541c0026a41186a200541a00d6a41186a290300370300200541c0026a41106a200541a00d6a41106a290300370300200541c0026a41086a200541a00d6a41086a290300370300200520052903a00d3703c00241c004102c2203450d1420032033360200200320052903800637020420032002360224200320052903e0053702282003410c6a20054180066a41086a290300370200200341146a20054180066a41106a2903003702002003411c6a20054180066a41186a290300370200200341306a200541e0056a41086a290300370200200341386a200541e0056a41106a290300370200200341c0006a200541e0056a41186a290300370200200320353602482003202b36026c200320052903c00537024c200341d4006a200541c0056a41086a290300370200200341dc006a200541c0056a41106a290300370200200341e4006a200541c0056a41186a290300370200200320052903a005370270200341f8006a200541a0056a41086a29030037020020034180016a200541a0056a41106a29030037020020034188016a200541a0056a41186a29030037020020032030360290012003202e3602b401200341ac016a20054180056a41186a290300370200200341a4016a20054180056a41106a2903003702002003419c016a20054180056a41086a290300370200200320052903800537029401200341d0016a200541e0046a41186a290300370200200341c8016a200541e0046a41106a290300370200200341c0016a200541e0046a41086a290300370200200320052903e0043702b801200320253602d801200341f4016a200541c0046a41186a290300370200200341ec016a200541c0046a41106a290300370200200341e4016a200541c0046a41086a290300370200200320052903c0043702dc01200320293602fc0120034198026a200541a0046a41186a29030037020020034190026a200541a0046a41106a29030037020020034188026a200541a0046a41086a290300370200200320052903a004370280022003202c3602a002200341bc026a20054180046a41186a290300370200200341b4026a20054180046a41106a290300370200200341ac026a20054180046a41086a29030037020020032005290380043702a402200320283602c402200341e0026a200541e0036a41186a290300370200200341d8026a200541e0036a41106a290300370200200341d0026a200541e0036a41086a290300370200200320052903e0033702c802200320263602e80220034184036a200541c0036a41186a290300370200200341fc026a200541c0036a41106a290300370200200341f4026a200541c0036a41086a290300370200200320052903c0033702ec022003202336028c03200341a8036a200541a0036a41186a290300370200200341a0036a200541a0036a41106a29030037020020034198036a200541a0036a41086a290300370200200320052903a00337029003200320273602b003200341cc036a20054180036a41186a290300370200200341c4036a20054180036a41106a290300370200200341bc036a20054180036a41086a29030037020020032005290380033702b4032003202a3602d403200341f0036a200541e0026a41186a290300370200200341e8036a200541e0026a41106a290300370200200341e0036a200541e0026a41086a290300370200200320052903e0023702d803200320343602f80320034194046a200541c0026a41186a2903003702002003418c046a200541c0026a41106a29030037020020034184046a200541c0026a41086a290300370200200320052903c0023702fc032003200436029c04200341b8046a200541a0026a41186a290300370200200341b0046a200541a0026a41106a290300370200200341a8046a200541a0026a41086a290300370200200320052903a0023702a004200541086a202f202da710b008200541900e6a41086a2201200541086a41186a290300370300200541900e6a41106a2204200541286a290300370300200541900e6a41186a222b200541306a2802003602002005200541086a41106a2903003703900e200541086a410c6a2802002135200541086a41086a2802002134200528020c2107200528020821330240024020310d00410021020c010b2006417f4c0d030240024020060d00410121020c010b2006102c2202450d160b20022031200610e9081a0b202d422088a7213120054180026a41186a202b28020036020020054180026a41106a200429030037030020054180026a41086a2001290300370300200520052903900e3703800241042130200621320b20002030360204200041186a2035360200200041146a2034360200200041106a20073602002000410c6a2033360200200041086a20313602002000411c6a200529038002370200200041c4006a2006360200200041386a2003360200200041c8006a20052903e801370200200041246a20054180026a41086a2903003702002000412c6a20054180026a41106a290300370200200041346a20054180026a41186a280200360200200041d0006a200541e8016a41086a290300370200200041d8006a200541e8016a41106a2802003602002000413c6a2032ad4220862002ad84370200200041003602000c120b20004101360200200020333602040c110b1038000b20004101360200200020033602040c0f0b20004101360200200020023602040c0e0b20004101360200200020063602040c0d0b20004101360200200020343602040c0c0b20004101360200200020353602040c0b0b200041013602002000202b3602040c0a0b20004101360200200020303602040c090b200041013602002000202f3602040c080b200041013602002000202e3602040c070b20004101360200200020253602040c060b20004101360200200020293602040c050b200041013602002000202c3602040c040b20004101360200200020283602040c030b20004101360200200020323602040c020b20004101360200200020343602040c010b20004101360200200020043602040b200541b00e6a24000f0b1036000bae5303117f047e037f23002206210720064180056b41607122062400200641106a41086a200341086a280200360200200620032902003703100240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020022802000e050104000203010b20064180016a2002412c6a290200370300200641f8006a200241246a290200370300200641d8006a41186a2002411c6a290200370300200641d8006a41106a2208200241146a290200370300200641d8006a41086a2002410c6a29020037030020062002290204370358200641a6016a200241376a2d00003a000020064188016a41086a200241c4006a29020037030020064188016a41106a200241cc006a29020037030020064188016a41186a200241d4006a280200360200200620022f00353b01a40120062002413c6a29020037038801200241346a2d00002109200241386a280200210a02400240200628025c220b4125490d002008280200210b200641d8006a410c6a280200210c0c010b200641e1006a210c0b20062006280258220d3602b0012006200c3602a8012006280214210e2006280218210f2006200b3602ac010240200b4101742210200d6b2211200e410174200f6b2202200220114b1b2212450d00410021022006280210211302400340200f20026a22084101762214200e4f0d0c200d20026a22154101762216200b4f0d0d201320146a2d00002214410f71201441f0017141047620084101711b200c20166a2d00002208410f71200841047620154101711b470d012012200241016a2202470d000b201221020b20020d060b2010200d470d0441f8accb00412a41a4adcb001039000b4101211520062802142208200628021822144101762202490d0a20064180046a200628021020026a200820026b10b008200641386a41086a20064194046a290200370300200641c8006a2006419c046a290200370300200641d0006a200641a4046a29020037030020062006418c046a2902003703382014410171210220064180046a41086a2802002108200628028404211620062802800421032004290204211720042802002111410021140c280b200241106a280200210d2002410c6a280200210c200241086a280200210b2002280204210202402006280214221441017420062802182208470d0020042802082108410021140240200b450d00200d2008470d00200b2004280200200d10ec08452114200d21080b2004280204211620042802002103024020052802002215450d00200541046a280200450d002015102e0b2005200c3602042005200b360200200541086a200d360200200641386a41086a20064180046a41086a290200370300200641386a41106a20064180046a41106a290200370300200641386a41186a20064180046a41186a290200370300200641206a41086a20064198036a41086a290200370300200641206a41106a20064198036a41106a28020036020020062006290280043703382006200629029803370320410321150c280b2008410176221520144f0d0a200628021020156a2d000021142003200328020841016a36020820022014410f71201441047620084101711b221541246c6a22082902102118200820062903900437021020082902082119200820062903880437020820082902002117200641023a0080042008200629038004370200200841186a2214290200211a201420062903980437020002400240024002402017a741ff01714102470d0020032802042216200328020822054101762214490d0f20064198036a200328020020146a201620146b10b0082006418c046a20062902980337020020064194046a20064198036a41086a2902003702002006419c046a200641a8036a29020037020020064180046a41246a200641b0036a290200370200200641ac046a200641b8036a290200370200200641b4046a200641c0036a280200360200200641b8046a2004290200370300200641c0046a200441086a280200360200200641013602840420064180046a41086a200541017136020041002114200641003a0080042002201541246c6a41046a200141306a20064180046a109d08360200200841003a00000c010b200641a0046a200828022036020020064180046a41186a201a37030020062019370388042006201737038004200620183703900420064198036a41086a200441086a2802003602002006200429020037039803200641c0026a200120064180046a200320064198036a200510ad0820062802c402211620062802c0024101460d01200641c0026a41086a2d0000210341002114200841003a00002002201541246c6a41046a2016360200200341ff0171450d020b41032115200b2103200c2116200d21080c290b20004101360200200020163602040240200b450d00200c450d00200b102e0b2002102e200724000f0b2000428080808010370200200041186a200d360200200041146a200c360200200041106a200b3602002000410c6a2002360200200041086a4103360200200724000f0b200641c0036a2002412c6a290200370300200641b8036a200241246a290200370300200641b0036a2002411c6a290200370300200641a8036a2208200241146a29020037030020064198036a41086a2002410c6a2902003703002006200229020437039803200241346a2802002111200241386a28020021102002413c6a280200211b200241c0006a280200211c02400240200628029c03220b4125490d002008280200210b20064198036a410c6a280200210c0c010b200641a1036a210c0b2006200628029803220d360290012006200c360288012006280214210e2006280218210f2006200b36028c01410021020240200b410174200d6b2209200e410174200f6b220a200a20094b1b2212450d00200628021021130340200f20026a22084101762214200e4f0d0d200d20026a22154101762216200b4f0d0e201320146a2d00002214410f71201441f0017141047620084101711b200c20166a2d00002208410f71200841047620154101711b470d012012200241016a2202470d000b201221020b0240024002400240024020022009470d002009200a460d010b200220094f0d01200b200d200241016a22126a22144101762208490d12200641d8006a200c20086a200b20086b10b008200641e8016a41086a2216200641d8006a41086a290300370300200641e8016a41106a2203200641d8006a41106a290300370300200641e8016a41186a2205200641d8006a41186a290300370300200641e8016a41206a220e200641d8006a41206a290300370300200641e8016a41286a220f200641d8006a41286a280200360200200620062903583703e801200d20026a220d4101762208200b4f0d13200c20086a2d0000210810b308211520064180046a41086a20144101713602002006418c046a220b20062903e80137020020064194046a20162903003702002006419c046a200329030037020020064180046a41246a2005290300370200200641ac046a200e290300370200200641b4046a200f280200360200200641c4046a201c360200200641c0046a201b360200200641bc046a2010360200200641b8046a20113602002006410436028404200641c8046a20062902b801370300200641d0046a200641b8016a41086a290200370300200641d8046a200641b8016a41106a28020036020041002114200641003a00800420152008410f712008410476200d4101711b41246c6a2208200141306a220320064180046a109d08360204200841003a000020062802142208410174200628021822166b2002470d0220064180046a20064188016a200210b408200641386a41086a20064180046a41186a290300370300200641386a41106a200641a0046a290300370300200641386a41186a200641a8046a290300370300200620064180046a41106a290300370338200b280200210820064180046a41086a28020021162004280208210b2004290200211720062802840421032006280280042102201521110c280b4100211402402010450d00201c2004280208470d0020102004280200201c10ec084521140b200b200d4101762202490d1020064180046a200c20026a200b20026b10b008200641c0026a41086a221520064194046a290200370300200641c0026a41106a220c2006419c046a290200370300200641c0026a41186a220e200641a4046a29020037030020062006418c046a2902003703c002200d410171210220064180046a41086a220d2802002108200628028404211620062802800421032004280208210b20042902002117024020052802002204450d00200541046a280200450d002004102e0b2005201b36020420052010360200200541086a201c360200200641386a41086a2015290300370300200641386a41106a200c290300370300200641386a41186a200e290300370300200641206a41086a200d290200370300200641206a41106a20064180046a41106a280200360200200620062903c00237033820062006290280043703200c270b200f20026a22144101762208200e4f0d12200628021020086a2d000021082003200220032802086a41016a36020820112008410f71200841047620144101711b221441246c6a22022902102118200220062903900437021020022902082119200220062903880437020820022902002117200641023a0080042002200629038004370200200241186a2208290200211a20082006290398043702002017a741ff01714102470d0120032802042215200328020822164101762208490d15200641c0026a200328020020086a201520086b10b0082006418c046a20062902c00237020020064194046a200641c0026a41086a2902003702002006419c046a200641d0026a29020037020020064180046a41246a200641d8026a290200370200200641ac046a200641e0026a290200370200200641b4046a200641e8026a280200360200200641b8046a2004290200370300200641c0046a200441086a280200360200200641013602840420064180046a41086a2016410171360200200641003a0080042011201441246c6a41046a200141306a20064180046a109d08360200200241003a00000c250b201620026a220b410176220d20084f0d122008201620126a22054101762214490d132006280210220c200d6a2d00002116200641c0026a200c20146a200820146b10b0082006418c046a220820062902c00237020020064194046a200641c0026a41086a2902003702002006419c046a200641c0026a41106a29020037020020064180046a41246a200641c0026a41186a290200370200200641ac046a200641c0026a41206a290200370200200641b4046a200641c0026a41286a280200360200200641b8046a2004290200370300200641c0046a200441086a280200360200200641013602840420064180046a41086a2204200541017136020041002114200641003a00800420152016410f71201641f00171410476200b4101711b41246c6a2216200320064180046a109d08360204201641003a000020064180046a20064188016a200210b408200641386a41086a20064180046a41186a290300370300200641386a41106a20064180046a41206a290300370300200641386a41186a20064180046a41286a290300370300200620064180046a41106a29030037033820082802002108200428020021162006280284042103200628028004210242002117201521110c250b200641a0046a200228022036020020064180046a41186a201a370300200620193703880420062017370380042006201837039004200641c0026a41086a200441086a280200360200200620042902003703c002200641e8016a200120064180046a2003200641c0026a200510ad0820062802ec012108024020062802e8014101460d00200641e8016a41086a2d00002115200241003a00002011201441246c6a41046a2008360200201541ff01710d24200b200d4101762202490d1520064180046a200c20026a200b20026b10b0082000410c6a200d41017136020020004281808080c000370204200041c8006a201c360200200041c4006a201b360200200041c0006a20103602002000413c6a2011360200200041106a200629028004370200200041186a20064188046a290200370200200041206a20064180046a41106a290200370200200041286a20064180046a41186a290200370200200041306a20064180046a41206a290200370200200041386a20064180046a41286a280200360200200041003602000c220b200041013602002000200836020402402010450d00201b450d002010102e0b2011102e0c210b200641e8026a2002412c6a290200370300200641e0026a200241246a290200370300200641d8026a2002411c6a290200370300200641d0026a2208200241146a290200370300200641c0026a41086a2002410c6a290200370300200620022902043703c0022002413c6a2802002109200241386a280200211c200241346a28020021100240024020062802c402220b4125490d002008280200210b200641c0026a410c6a280200210d0c010b200641c9026a210d0b410021020240200b41017420062802c002220c6b22112006280214220e4101742006280218220f6b220a200a20114b1b2212450d00200628021021130340200f20026a22084101762214200e4f0d16200c20026a22154101762216200b4f0d17201320146a2d00002214410f71201441f0017141047620084101711b200d20166a2d00002208410f71200841047620154101711b470d012012200241016a2202470d000b201221020b024002400240024020022011470d002011200a460d010b200220114f0d0110b3082108200c20026a22154101762216200b4f0d19200b201541016a220c4101762214490d1a200d20166a2d0000211620064198036a200d20146a200b20146b10b0082006418c046a220b20062902980337020020064180046a41146a220d20064198036a41086a220e29020037020020064180046a411c6a220f20064198036a41106a221229020037020020064180046a41246a221320064198036a41186a29020037020020064180046a412c6a221120064198036a41206a29020037020020064180046a41346a220a20064198036a41286a280200360200200641c0046a221b2009360200200641bc046a2209201c36020020064180046a41386a2010360200200641013602840420064180046a41086a2210200c41017136020041002114200641003a00800420082016410f71201641f0017141047620154101711b41246c6a2215200141306a20064180046a109d08360204201541003a000020064180046a200641106a200210b408200641a8016a41086a2202200b280200360200200641d8006a41086a221520064180046a41186a220c290300370300200641d8006a41106a221620064180046a41206a290300370300200641d8006a41186a221c20064180046a41286a29030037030020062006290284043703a801200620064180046a41106a221d290300370358200620062802800436029c032006410436029803200e20062903a8013703002012200228020036020020064198036a41386a410036020020064198036a41346a200836020020064198036a41146a200629035837020020064198036a411c6a201529030037020020064198036a41246a201629030037020020064198036a412c6a201c290300370200200641dc036a20062902880137020020064198036a41cc006a20064188016a41086a29020037020020064198036a41d4006a20064188016a41106a280200360200200641f0036a41086a200441086a280200360200200620042902003703f00320064180046a200120064198036a2003200641f0036a200510af08200641e8016a41086a22052013290200370300200641e8016a41106a220e2011290200370300200641e8016a41186a2212200a2902003703002006200f2902003703e80120102802002115200b2802002102201d2802002103200d2802002116200c280200210820092802002111201b2903002117200641c8046a280200210b200628028404210d2006280280042104200641b8016a41106a220c200641dc046a280200360200200641b8016a41086a220f20064180046a41d4006a290200370300200620064180046a41cc006a2902003703b80120044101460d07200641386a41186a2012290300370300200641386a41106a200e290300370300200641386a41086a2005290300370300200641206a41086a200f290300370300200641206a41106a200c280200360200200620062903e801370338200620062903b8013703200c020b41002102024020092004280208470d0020102004280200200910ec084521020b024020052802002208450d00200541046a280200450d002008102e0b2005201c36020420052010360200200541086a2009360200024020020d00200620062802c0023602800420064180046a41047221150240024020062802c40222084125490d00200641d0026a2802002108200641cc026a28020021020c010b200641c9026a21020b4100211420064180046a41086a221641003a0000200641003602840420152002200220086a10fb06200641386a41086a20064180046a41186a290300370300200641386a41106a200641a0046a290300370300200641386a41186a200641a8046a290300370300200641206a41086a20064198036a41086a290200370300200641206a41106a20064198036a41106a280200360200200620064180046a41106a29030037033820062006290298033703202006418c046a280200210820162802002116200429020421172004280200211120062802840421032006280280042102410121150c020b200620062802c0023602800420064180046a41047221140240024020062802c40222084125490d00200641d0026a2802002108200641cc026a28020021020c010b200641c9026a21020b20064180046a41086a221541003a0000200641003602840420142002200220086a10fb06200641386a41086a20064180046a41186a290300370300200641386a41106a200641a0046a290300370300200641386a41186a200641a8046a290300370300200641206a41086a20064198036a41086a290200370300200641206a41106a20064198036a41106a280200360200200620064180046a41106a29030037033820062006290298033703202006418c046a28020021082015280200211620042902042117200428020021112006280284042103200628028004210241012115410121140c010b200b200c4101762202490d19200641e8016a200d20026a200b20026b10b00810b308210220064198036a41086a20062902e80137030020064198036a41106a200641e8016a41086a29020037030020064198036a41186a200641e8016a41106a29020037030020064198036a41206a200641e8016a41186a29020037030020064198036a41286a200641e8016a41206a290200370300200641c8036a200641e8016a41286a28020036020020064198036a41c0006a200936020020064198036a413c6a201c360200200641d0036a201036020020064198036a41346a20023602002006200c41017136029c03200641043602980320064188016a41086a200441086a280200360200200620042902003703880120064180046a200120064198036a200320064188016a200510af08200641d8006a41086a2204200641a4046a290200370300200641d8006a41106a220d200641ac046a290200370300200641d8006a41186a220520064180046a41346a29020037030020062006419c046a29020037035820064180046a41086a28020021152006418c046a280200210220064180046a41106a280200210320064194046a280200211620064180046a41186a280200210820064180046a413c6a280200211120064180046a41c0006a2903002117200641c8046a280200210b200628028404210c2006280280042114200641b8016a41106a220e200641dc046a280200360200200641b8016a41086a220f200641d4046a2902003703002006200641cc046a2902003703b80120144101460d1a200641386a41186a2005290300370300200641386a41106a200d290300370300200641386a41086a2004290300370300200641206a41086a200f290300370300200641206a41106a200e28020036020020062006290358370338200620062903b801370320410021140b20062802c4024125490d26200641cc026a280200102e0c260b200d4101762202200b4f0d19200c20026a2d0000210210b30821080240024020114101470d0020064198036a41026a200641a4016a41026a2d00003a000020064180046a41086a20064188016a41086a29030037030020064180046a41106a20064188016a41106a29030037030020064180046a41186a20064188016a41186a280200360200200620062f01a4013b0198032006200629038801370380040c010b200b200d41016a22154101762214490d1b20064198036a200c20146a200b20146b10b00820064180046a41086a20154101713602002006418c046a20062902980337020020064194046a20064198036a41086a2902003702002006419c046a20064198036a41106a290200370200200641a4046a20064198036a41186a290200370200200641ac046a200641b8036a290200370200200641b4046a200641c0036a280200360200200641b8046a20093a0000200641b9046a20062f01a4013b00002006410236028404200641bb046a200641a4016a41026a2d00003a0000200641bc046a200a360200200641c0046a200629038801370300200641c8046a20064188016a41086a290300370300200641d0046a20064188016a41106a290300370300200641d8046a20064188016a41186a28020036020041002109200641003a008004200141306a20064180046a109d08210a0b20082002410f712002410476200d4101711b41246c6a220220093a0000200220062f0198033b00012002200a3602042002200629038004370208200241036a2006419a036a2d00003a0000200241106a20064180046a41086a2215290300370200200241186a20064180046a41106a2216290300370200200241206a20064180046a41186a220b2802003602004100211420064198036a41086a41003602002006200836029c032006410336029803200641b8016a41086a200441086a280200360200200620042902003703b80120064180046a200120064198036a2003200641b8016a200510af08200641c0026a41086a220d20064180046a41246a290200370300200641c0026a41106a2205200641ac046a290200370300200641c0026a41186a220c200641b4046a29020037030020062006419c046a2902003703c002201528020021152006418c046a28020021022016280200210320064194046a2802002116200b2802002108200641bc046a2802002111200641c0046a2903002117200641c8046a280200210b200628028404210e2006280280042104200641e8016a41106a220f200641dc046a280200360200200641e8016a41086a2212200641d4046a2902003703002006200641cc046a2902003703e80120044101460d01200641386a41186a200c290300370300200641386a41106a2005290300370300200641386a41086a200d290300370300200641206a41086a2012290300370300200641206a41106a200f280200360200200620062903c002370338200620062903e8013703200c1e0b0240024020022011460d00200b200d20026a22144101762208490d1c200641b8016a200c20086a200b20086b10b0082003200328020820026a36020820064198036a41086a221620062902b80137030020064198036a41106a220b200641b8016a41086a29020037030020064198036a41186a220d200641b8016a41106a29020037030020064198036a41206a220c200641b8016a41186a29020037030020064198036a41286a220e200641b8016a41206a29020037030020064198036a41306a200641b8016a41286a280200360200200641cc036a20093a00002006201441017136029c03410221152006410236029803200641cf036a200641a4016a41026a2d00003a0000200620062f01a4013b00cd03200641d0036a200a360200200641ec036a20064188016a41186a280200360200200641e4036a20064188016a41106a290300370200200641dc036a20064188016a41086a290300370200200641d4036a200629038801370200200641f0036a41086a200441086a280200360200200620042902003703f00320064180046a200120064198036a2003200641f0036a200510af0820062802840421142006280280042108200641c0026a20064180046a41086a41d80010e9081a20084101460d01200641e8016a200641c0026a41d80010e9081a20064198036a200641a8016a200210b40820064180046a410472200641e8016a41d80010e9081a41002111200641003a008004200141306a20064180046a109d082102200641386a41086a200d290300370300200641386a41106a200c290300370300200641386a41186a200e2903003703002006200b2903003703382002ad211720162802002116200641a4036a28020021082006280298032102200628029c032103410021140c1f0b2003200328020820116a36020820064180046a41086a20062903880137030020064180046a41106a20064188016a41086a29030037030020064180046a41186a20064188016a41106a290300370300200641a0046a20064188016a41186a280200360200200620093a008004200620062f01a4013b0081042006200641a6016a2d00003a0083042006200a3602840420064198036a41086a200441086a2802003602002006200429020037039803200641c0026a200120064180046a200320064198036a200510ad0820062802c4022115024020062802c0024101460d00200b200d4101762202490d1d200641c0026a41086a2d0000210820064180046a200c20026a200b20026b10b008200641386a41086a20064194046a290200370300200641386a41106a2006419c046a290200370300200641d0006a200641a4046a290200370300200641206a41086a20064198036a41086a290200370300200641206a41106a20064198036a41106a28020036020020062006418c046a2902003703382006200629029803370320200d4101712102200841ff017145211420064180046a41086a2802002108200628028404211620062802800421032015ad211741022115410021110c1f0b20004101360200200020153602040c020b20004101360200200020143602040c010b200041013602002000200e3602040b200628025c4125490d1d200641e4006a280200102e200724000f0b200041013602002000200d3602040c190b2014200e41e0efcc00103c000b2016200b41e0efcc00103c000b2002200841f0efcc001056000b2015201441e0efcc00103c000b2014201641f0efcc001056000b2014200e41e0efcc00103c000b2016200b41e0efcc00103c000b2002200b41f0efcc001056000b2008200b41f0efcc001056000b2008200b41e0efcc00103c000b2008200e41e0efcc00103c000b200d200841e0efcc00103c000b2014200841f0efcc001056000b2008201541f0efcc001056000b2002200b41f0efcc001056000b2014200e41e0efcc00103c000b2016200b41e0efcc00103c000b2016200b41e0efcc00103c000b2014200b41f0efcc001056000b2002200b41f0efcc001056000b200041013602002000200c3602040c040b2002200b41e0efcc00103c000b2014200b41f0efcc001056000b2008200b41f0efcc001056000b2002200b41f0efcc001056000b20062802c4024125490d02200641cc026a280200102e0c020b200628025c4125490d06200641e4006a280200102e0c060b200628029c034125490d00200641a4036a280200102e200724000f0b200724000f0b200b200d4101762202490d0120064180046a200c20026a200b20026b10b008200641386a41086a20064194046a290200370300200641c8006a2006419c046a290200370300200641d0006a200641a4046a29020037030020062006418c046a290200370338200d4101712102201bad4220862010ad84211720064180046a41086a28020021082006280284042116200628028004210341002114201c210b0b0240200628029c034125490d00200641a4036a280200102e0b410421150c020b2002200b41f0efcc001056000b0b20002014360204200041186a2008360200200041146a2016360200200041106a20033602002000410c6a2002360200200041086a20153602002000411c6a2006290338370200200041c8006a200b360200200041c0006a20173702002000413c6a2011360200200041cc006a2006290320370200200041246a200641386a41086a2903003702002000412c6a200641386a41106a290300370200200041346a200641386a41186a290300370200200041d4006a200641206a41086a290300370200200041dc006a200641206a41106a28020036020020004100360200200724000bd50301087f230041106b22032400200041003a00042000410036020020032000200210fc060240024020032802004101470d00200341086a2802000d0141d0f0cc00411141e4f0cc001039000b02400240200028020022044125490d002000410c6a22052802002106200041086a28020021070c010b200041056a21072004210620002105412421040b02400240024020062004490d00200121080c010b2002210920012108024003402009450d01200720066a20082d00003a00002009417f6a2109200841016a21082004200641016a2206470d000b200421060c010b200520063602000c010b20052006360200200120026a22012008460d00200841016a21062000410c6a2105200041056a210a20082d00002102034002400240200028020022044125490d00200028020c210820002802082107200521090c010b2004210820002109200a2107412421040b024020082004470d0020032000410110fc06024020032802004101470d00200341086a2802000d0441d0f0cc00411141e4f0cc001039000b200028020c210820002802082107200521090b200720086a20023a00002009200928020041016a36020020012006460d0120062d00002102200641016a21060c000b0b200341106a24000f0b1036000b880903017f027e177f230041d0016b22022400200241186a200141d00010e9081a20024188016a20002903182000290308853703002002200029031022033703782002200029030022043703702002200320048537038001200241186a200241f0006a109107200241086a2002290378420020022903702203420010e8084104210520002802202206200241106a290300200229030885200389a7220771220841046a200671210902400240024002400240200041246a280200220a20086a280000220b2007411976220c41818284086c220d732201417f73200141fffdfb776a7141808182847871220e0d004104210f200b21100340200921012010201041017471418081828478710d0320062001200f6a41046a712109200f41046a2205210f200d200a20016a280000221073220e417f73200e41fffdfb776a7141808182847871220e450d000c020b0b200b211020082101200a450d010b200e417f6a200e71210f2001200e684103766a210e200241186a41256a2111200241c4006a2802002112200241c0006a280200211320022802382114200241e4006a2d000041ff01712115200241186a41cd006a2d000041ff0171211603400240200241186a200a41002006200e716b41d0006c6a220e41b07f6a2217412010ec080d00200e41506a2118201321192012211a0240201441254f0d00201121192014211a0b024002402018280200221b4125490d00200e415c6a280200211b200e41586a28020021180c010b201841056a21180b201a201b470d0020192018201a10ec080d002015200e417c6a2d0000470d002015450d032016201741cd006a2d000041ff0171460d030b02400240200f450d00200f210e0c010b2005210f0340200921012010201041017471418081828478710d0320062001200f6a41046a712109200f41046a2205210f200d200a20016a280000221073220e417f73200e41fffdfb776a7141808182847871220e450d000b0b200e417f6a200e71210f2001200e684103766a210e0c000b0b200041206a210f2002200036026c200241f0006a200241186a41d00010e9081a4104210102400340200b4180818284787122100d01200820016a2110200141046a2101200a201020067122086a280000210b0c000b0b0240200a20106841037620086a20067122016a2c000022104100480d00200a200a280200418081828478716841037622016a2d000021100b200041286a280200210802402010410171220b450d0020080d00200241c0016a200f200241ec006a10b508200028022022062007712110200041246a280200210a4104210103402010220820016a2006712110200141046a2101200a20086a28000041808182847871220f450d000b0240200a200f6841037620086a20067122016a2c00004100480d00200a280200418081828478716841037621010b200028022821080b20002008200b6b360228200a20016a200c3a000020062001417c6a71200a6a41046a200c3a0000200a410020016b41d0006c6a41b07f6a200241f0006a41d00010e9081a2000412c6a2201200128020041016a3602000c010b20144125490d002013102e0b200241d0016a24000bc40801047f230041f0026b22042400024002400240024002400240024020022802004101470d00200241086a280200210520022802042102200441d0016a41186a200141186a290000370300200441d0016a41106a200141106a290000370300200441d0016a41086a200141086a290000370300200420012900003703d001200441f0016a200441d0016a20022005200310ae0820042802f401210120042802f0012102200441f8006a200441f0016a41086a220541d40010e9081a20024101460d05200441206a200441f8006a41d40010e9081a200420013602f4012005200441206a41d40010e9081a41002102200441003a00f0012003200441f0016a109d0821010c010b2002280204210302400240200241086a28020022024120460d00200441f0016a41186a200141186a290000370300200441f0016a41106a200141106a290000370300200441f0016a41086a200141086a290000370300200420012900003703f0012002417f4c0d040240024020020d00410121010c010b2002102c2201450d060b20012003200210e9082103200441f8006a41186a2205200441f0016a41186a290300370300200441f8006a41106a2206200441f0016a41106a290300370300200441f8006a41086a2207200441f0016a41086a290300370300200420042903f0013703784130102c2201450d05200141043a000020012004290378370001200120042f00f0013b00212001200236002c2001200236002820012003360024200141096a2007290300370000200141116a2006290300370000200141196a2005290300370000200141236a200441f2016a2d00003a0000410121020c010b200441f8006a41026a200341026a2d00003a0000200441f0016a41086a2003410f6a29000037030020044180026a200341176a29000037030020044188026a2003411f6a2d00003a0000200420032f00003b0178200420032900073703f00120032800032101410021020b200441d0016a41026a2203200441f8006a41026a2d00003a0000200441206a41086a2205200441f0016a41086a290300370300200441206a41106a2206200441f0016a41106a290300370300200441206a41186a2207200441f0016a41186a2d00003a0000200420042f01783b01d001200420042903f00137032020020d012004411c6a41026a20032d00003a0000200441086a2005290300370300200441106a2006290300370300200441186a20072d00003a0000200420042f01d0013b011c20042004290320370300410121020b200020023a000420004100360200200041056a20042f011c3b0000200041086a20013602002000410c6a2004290300370200200041076a2004411e6a2d00003a0000200041146a200441086a2903003702002000411c6a200441106a290300370200200041246a200441186a2802003602000c040b20004101360200200020013602040c030b1038000b1036000b20004101360200200020013602040b200441f0026a24000b800d01027f230041b0046b22002400024041c004102c22010d001036000b200141023a00002001200029008d04370001200141023a0024200120002900ea03370025200141096a2000418d046a41086a290000370000200141116a2000418d046a41106a290000370000200141196a2000418d046a41186a290000370000200141206a2000418d046a411f6a2800003600002001412d6a200041ea036a41086a290000370000200141356a200041ea036a41106a2900003700002001413d6a200041ea036a41186a290000370000200141c4006a200041ea036a411f6a280000360000200141023a0048200141023a006c200120002900c703370049200141d1006a200041c7036a41086a290000370000200141d9006a200041c7036a41106a290000370000200141e1006a200041c7036a41186a290000370000200141e8006a200041c7036a411f6a280000360000200120002900a40337006d200141f5006a200041a4036a41086a290000370000200141fd006a200041a4036a41106a29000037000020014185016a200041a4036a41186a2900003700002001418c016a200041a4036a411f6a280000360000200141023a009001200141023a00b40120012000290081033700910120014199016a20004181036a41086a290000370000200141a1016a20004181036a41106a290000370000200141a9016a20004181036a41186a290000370000200141b0016a20004181036a411f6a280000360000200120002900de023700b501200141bd016a200041de026a41086a290000370000200141c5016a200041de026a41106a290000370000200141cd016a200041de026a41186a290000370000200141d4016a200041de026a411f6a280000360000200141023a00d801200141f8016a200041bb026a411f6a280000360000200141f1016a200041bb026a41186a290000370000200141e9016a200041bb026a41106a290000370000200141e1016a200041bb026a41086a290000370000200120002900bb023700d901200141023a00fc012001419c026a20004198026a411f6a28000036000020014195026a20004198026a41186a2900003700002001418d026a20004198026a41106a29000037000020014185026a20004198026a41086a29000037000020012000290098023700fd01200141023a00a002200141c0026a200041f5016a411f6a280000360000200141b9026a200041f5016a41186a290000370000200141b1026a200041f5016a41106a290000370000200141a9026a200041f5016a41086a290000370000200120002900f5013700a102200141023a00c402200141e4026a200041d2016a411f6a280000360000200141dd026a200041d2016a41186a290000370000200141d5026a200041d2016a41106a290000370000200141cd026a200041d2016a41086a290000370000200120002900d2013700c502200141023a00e80220014188036a200041af016a411f6a28000036000020014181036a200041af016a41186a290000370000200141f9026a200041af016a41106a290000370000200141f1026a200041af016a41086a290000370000200120002900af013700e902200141023a008c03200141ac036a2000418c016a411f6a280000360000200141a5036a2000418c016a41186a2900003700002001419d036a2000418c016a41106a29000037000020014195036a2000418c016a41086a2900003700002001200029008c0137008d03200141023a00b003200141d0036a200041e9006a411f6a280000360000200141c9036a200041e9006a41186a290000370000200141c1036a200041e9006a41106a290000370000200141b9036a200041e9006a41086a290000370000200120002900693700b103200141023a00d403200141f4036a200041c6006a411f6a280000360000200141ed036a200041c6006a41186a290000370000200141e5036a200041c6006a41106a290000370000200141dd036a200041c6006a41086a290000370000200120002900463700d503200141023a00f80320014198046a200041236a411f6a28000036000020014191046a200041236a41186a29000037000020014189046a200041236a41106a29000037000020014181046a200041236a41086a290000370000200120002900233700f903200141023a009c04200141bc046a2000411f6a280000360000200141b5046a200041186a290000370000200141ad046a200041106a290000370000200141a5046a200041086a2900003700002001200029000037009d04200041b0046a240020010bf310010a7f230041e0006b220324000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200141046a2802002204410174200141086a28020022056b20024b0d00200420054101762202490d01200341206a200128020020026a200420026b10b00820002005410171360200200020032903203702042000410c6a200341286a290300370200200041146a200341306a2903003702002000411c6a200341386a290300370200200041246a200341c0006a2903003702002000412c6a200341c8006a2802003602000c150b20054101762106200520026a22074101762108024020074101710d0020082006490d0220042008490d03200128020020066a210202400240200820066b220141244b0d00200341206a2002200110e9081a200341d0006a41026a200341206a41026a2d00003a0000200341086a200341336a290000370300200341106a2003413b6a290000370300200341186a200341c3006a2d00003a0000200320032f00203b01502003200329002b3703002003280023210420032800272102410021060c010b2001417f4c0d052001102c2204450d0620042002200110e9081a41012106200121020b2000200136020420002005410171360200200041086a20063a0000200041096a20032f01503b0000200041106a20023602002000410c6a2004360200200041146a20032903003702002000410b6a200341d2006a2d00003a00002000411c6a200341086a290300370200200041246a200341106a2903003702002000412c6a200341186a2802003602000c150b200841016a22072006490d05200820044f0d06200128020020066a210802400240200720066b220441244b0d00200341206a2008200410e9081a2003411c6a41026a200341206a41026a2d00003a0000200341086a200341336a290000370300200341106a2003413b6a290000370300200341186a200341c3006a2d00003a0000200320032f00203b011c2003200329002b3703002003280023210120032800272106410021080c010b2004417f4c0d042004102c2201450d0520012008200410e9081a41012108200421060b200341206a4104722109200341296a220720032f011c3b0000200341206a41106a220a20063602002003412c6a2001360200200341346a20032903003702002003412b6a2003411e6a2d00003a00002003413c6a200341086a290300370200200341c4006a200341106a290300370200200341cc006a200341186a280200360200200320083a00282003200436022420032002410171220236022002402005410171220520024d0d000240024020044125490d002006417f6a220b0d0120012d000021040c150b2004417f6a220b450d090b200b417f6a210c410021010340200141016a21050240024020044125490d002003280230220420014d0d102003280230220420054d0d11200328022c20016a2d00004104742102200328022c20016a41016a2d0000410476210620032802302104200328022c21080c010b200420014d0d0f200420054d0d10200720016a22062d00004104742102200641016a2d00004104762106200721080b200420014d0d0a200820016a20062002723a00000240200c2001460d0020032802242104200521010c010b0b02400240200328022422014125490d0020032802302201200b4d0d11200328022c200b6a2d0000210420032802302101200328022c21070c010b2001200b4d0d102007200b6a2d000021040b2001200b4d0d0a2007200b6a21010c130b200520024f0d130240024020044125490d00200a21050c010b200421062009210520072101412421040b024020062004470d00200341d0006a2009410110fc06024020032802504101470d00200341d8006a2802000d0641d0f0cc00411141e4f0cc001039000b20032802302106200328022c2101200a21050b200120066a41003a00002005200528020041016a36020002400240200328022422044125490d00200328023021010c010b200421010b024020014102490d002001417e6a21010340200141016a21050240024020044125490d002003280230220420014d0d132003280230220420054d0d14200328022c20016a2d00004104742102200328022c20016a41016a2d0000410476210620032802302104200328022c21080c010b200420014d0d12200420054d0d13200720016a22062d00004104742102200641016a2d00004104762106200721080b200420054d0d0c200820016a41016a20062002723a00002001417f6a210120032802242104200541014b0d000b0b0240024020044125490d002003280230450d13200328022c2d0000210120032802302104200328022c21070c010b2004450d1220032d002921010b2004450d0b2007200141f001714104763a00000c130b2002200441f0efcc001056000b200620084180f0cc001057000b200820044180f0cc00104d000b1038000b1036000b200620074190f0cc001057000b200720044190f0cc00104d000b20032d00292104200721010c0a0b2001200441ecf4cc00103c000b200b2001418cf5cc00103c000b200141016a200441c4f2cc00103c000b4100410041acf5cc00103c000b2001200441ccf4cc00103c000b200141016a200441dcf4cc00103c000b200b200141fcf4cc00103c000b2001200441a4f2cc00103c000b200141016a200441b4f2cc00103c000b41004100419cf5cc00103c000b200120044104743a00000b02400240200328022422014125490d00200328023021010c010b2009210a0b02402001450d00200a2001417f6a3602000b20002003290320370200200041286a200341206a41286a290300370200200041206a200341206a41206a290300370200200041186a200341206a41186a290300370200200041106a200341206a41106a290300370200200041086a200341206a41086a2903003702000b200341e0006a24000bcc0f06087f017e077f017e017f027e230041e0006b220324000240024002400240024002400240200128020c220441016a22052004490d000240200520012802002206200641016a220741037641076c20064108491b22064101764b0d004100210641002105024003400240024020064101710d00200520074f0d0320052106200541016a21050c010b200541036a220620054922080d0220062007492209450d022007200541046a20081b200720091b21050b200141046a28020020066a220620062802002206410776417f73418182840871200641fffefdfb07726a360200410121060c000b0b200141046a2802002105200128020041016a22064104490d05200520066a20052800003600000c060b024002402005200641016a2206200520064b1b22050d0041d0a1c0002108410021094100210a0c010b02400240200541074b0d004104410820054104491b21050c010b200541ffffffff01712005470d03417f2005410374220541076e417f6a677641016a41012005410d4b1b21050b2005ad42d0007e220b422088a70d03200ba72206200541046a22096a22082006490d032008102c2208450d04200820066a220841ff01200910eb081a2005417f6a2209200541037641076c20094108491b210a0b200141046a280200220c41046a210d200c20076a210e200c280200417f734180818284787121072002280200210f200341d8006a2110200341086a211103400240024020070d0002400340200d200e4f0d01200c41c07d6a210c200d2802002105200d41046a2206210d2005418081828478712205418081828478460d000b2005418081828478732207417f6a20077121122006210d0c020b2001200436020c200041003602002001200a20046b3602082001280200210520012009360200200141046a22062802002107200620083602002005450d092007200541016aad42d0007ea76b102e0c090b2007417f6a20077121120b2010200f290318200f290308853703002003200f290310220b3703482003200f29030022133703402003200b20138537035041002105200c41002007684103766b41d0006c6a41b07f6a2214200341c0006a1091072003200329034842002003290340220b420010e8082011290300200329030085200b89220ba721060340200541046a2205200620097122076a2106200820076a280000418081828478712202450d000b0240200820026841037620076a20097122056a2c00004100480d002008280200418081828478716841037621050b200820056a200ba741197622063a00002005417c6a20097120086a41046a20063a00002008410020056b41d0006c6a41b07f6a201441d00010e9081a201221070c000b0b41accdcc00411c41c8cdcc001039000b41accdcc00411c41c8cdcc001039000b41accdcc00411c41c8cdcc001039000b1036000b200541046a2005200610ea081a0b4100210502402001280200220a417f460d002002280200210c200141046a210e200341c0006a41186a2110200341106a41086a21114100210603400240200e2802002205200622146a2d0000418001470d00410020146b210403402010200c290318200c290308853703002003200c290310220b3703482003200c29030022133703402003200b2013853703502005200441d0006c6a220f41b07f6a220d200341c0006a109107200341106a200329034842002003290340220b420010e808200e280200210920012802002108410021052011290300200329031085200b89220ba7221221060340200541046a2205200620087122076a2106200920076a280000418081828478712202450d000b0240200920026841037620076a20087122056a2c00004100480d002009280200418081828478716841037621050b02402005200820127122066b201420066b7320087141034b0d00200920146a200ba741197622053a000020082014417c6a7120096a41046a20053a00000c020b200920056a22062d000021072006200ba741197622023a00002005417c6a20087120096a41046a20023a00000240200741ff01470d00200e280200220620146a41ff013a0000200620012802002014417c6a716a41046a41ff013a0000200e280200410020056b41d0006c6a41b07f6a200d41d00010e9081a0c020b200e280200410020056b41d0006c6a220741b07f6a2205290200210b2005200d290200370200200541186a220629020021132006200d41186a2208290200370200200541106a220629020021152006200d41106a2209290200370200200541086a220529020021162005200d41086a2206290200370200200d200b370200200620163702002009201537020020082013370200200741506a220541186a2208290200210b2008200f41506a220641186a2209290200370200200541106a220829020021132008200641106a2202290200370200200541086a220829020021152008200641086a220d2902003702002005290200211620052006290200370200200620163702002009200b37020020022013370200200d2015370200200741706a220541086a2207290000210b2007200f41706a220641086a22082900003700002005290000211320052006290000370000200620133700002008200b370000200e28020021050c000b0b201441016a21062014200a470d000b20012802002205200541016a41037641076c20054108491b21050b2000410036020020012005200128020c6b3602080b200341e0006a24000b130020004123360204200041b4adcb003602000b8c0301047f230041d0006b22022400200241186a200141186a290000370300200241106a200141106a290000370300200241086a200141086a29000037030020022001290000370300200241206a41de80ca004109108102200241306a41a8fcca004109108102024002404120102c2201450d002002422037024420022001360240200241c0006a20024120107420022802482201417f4c0d01200228024021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280244450d002003102e0b200141206a2203417f4c0d012003102c2205450d00200241003602482002200336024420022005360240200241c0006a200241206a41101074200241c0006a200241306a41101074200241c0006a20042001107402402001450d002004102e0b200220022802402203200228024810b705024020022802042201450d0020002002290308370208200020022802003602000b2000200136020402402002280244450d002003102e0b200241d0006a24000f0b1036000b1038000bb40201037f230041e0006b22022400200241086a41de80ca004109108102200241186a4184faca004108108102024002404120102c2203450d002002422037023c20022003360238200241386a2001412010742002200228023822012002280240220310a301370348200241dc006a200120036a360200200220013602582002200241c8006a41086a3602542002200241c8006a360250200241286a200241d0006a107c0240200228023c450d002001102e0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b2001102c2204450d010b2000410036020820002001360204200020043602002000200241086a411010742000200241186a41101074200020022802282201200310740240200228022c450d002001102e0b200241e0006a24000f0b1036000b1038000bf50101047f230041306b22022400200241de80ca004109108102200241106a41f4fcca00410d108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000bf50101047f230041306b22022400200241de80ca004109108102200241106a41a8fcca004109108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000b950f0a067f027e017f017e027f067e017f027e127f067e230041a0026b220524002005200010b808200541306a200528020022062005280208220710b105200541b0016a41026a220020052d00333a000041082108200541e8016a41086a220920054190016a290300370300200541e8016a41106a220a20054198016a290300370300200520052f00313b01b001200520054188016a2903003703e80120054180016a290300210b200541f8006a290300210c024002400240024020052d0030220d4102470d004200210e4100210f410021104200211142002112420021134200211442002115420021164100210d0c010b200541f0006a2903002116200541e8006a2903002115200541d8006a2903002113200541d0006a2903002112200541c8006a2903002111200541306a41106a290300210e200541e0006a29030021142005413c6a2802002110200541306a41086a280200210f200528023421172005412c6a41026a20002d00003a0000200541106a41086a2009290300370300200541106a41106a200a290300370300200520052f01b0013b012c200520052903e80137031041012100200d4101460d01201721080b4200201320047d2012200354ad7d2218201220037d2219201256201820135620182013511b22001b21134200201920001b21124200201120027d200e200154ad7d2218200e20017d2219200e56201820115620182011511b22001b21114200201920001b210e0240201041306c2200450d00200820006a211a200541e8006a2117200541306a410172221b41036a211c200821000340200041306a21090240200041086a2d00004101710d00200041096a2d0000211d200541a0016a2000280200108905200541306a20052802a001220a20052802a801221e108a05200541e8016a41086a221f201741086a2220290000370300200541e8016a41106a2221201741106a2222290000370300200541e8016a41186a2223201741186a2224290000370300200541e8016a41206a2225201741206a2226290000370300200541e8016a41286a2227201741286a22282900003703002005201b280000360298022005201c28000036009b02200520172900003703e801200541306a41306a2129200541306a41206a212a200541306a41106a212b0240024020052d003022004102470d00410221000c010b20292903002119202a290300212c202b290300212d200529035821182005290348212e2005290338212f200541b0016a41086a201f290300370300200541b0016a41106a2021290300370300200541b0016a41186a2023290300370300200541b0016a41206a2025290300370300200541b0016a41286a20272903003703002005200528009b023600e30120052005280298023602e001200520052903e8013703b00120000d004200201920047d2018200354ad7d2230201820037d2231201856203020195620302019511b22001b21194200203120001b211802400240201d4101710d004200202c20027d202e200154ad7d2230202e20017d2231202e562030202c562030202c511b22001b212c4200203120001b212e0c010b4200202d20027d202f200154ad7d2230202f20017d2231202f562030202d562030202d511b22001b212d4200203120001b212f0b410021000b201b20052802e001360000201720052903b00137030020292019370300202a202c370300202b202d370300201c20052800e3013600002020200541b0016a41086a2903003703002022200541b0016a41106a2903003703002024200541b0016a41186a2903003703002026200541b0016a41206a2903003703002028200541b0016a41286a290300370300200520183703582005202e3703482005202f370338200520003a00300240024020004102470d00200a201e10ff010c010b200541003602f001200542013703e801200541306a200541e8016a10bc05200a201e20052802e801220020052802f00110b20120052802ec01450d002000102e0b20052802a401450d00200a102e0b20092100201a2009470d000b0b20082117200d2100201021090c010b4200200b20047d200c200354ad7d2218200c20037d2219200c562018200b562018200b511b22091b210b4200201920091b210c4200201620027d2015200154ad7d2218201520017d2219201556201820165620182016511b22091b21164200201920091b2115410121090b20054180016a200b370300200541f8006a200c370300200541f0006a2016370300200541e8006a2015370300200541d8006a2013370300200541d0006a2012370300200541c8006a2011370300200541306a41106a200e370300200541e0006a20143703002005413c6a2010360200200541306a41086a200f36020020054188016a200529031037030020054190016a200541106a41086a29030037030020054198016a200541106a41106a290300370300200520052f012c3b00312005201736023420052005412c6a41026a2d00003a0033200520003a00300240024020004102470d002006200710ff010c010b200541e8016a200541306a10c2042006200720052802e801220a20052802f00110b201024020052802ec01450d00200a102e0b20000d00200f450d00200f41306c450d002017102e0b02402005280204450d002006102e0b200541a0026a240020090bad0802057f027e23004180026b2203240020034180016a20022802002204200241086a280200220510b001200341206a41186a20034180016a41186a290000370300200341206a41106a20034180016a41106a290000370300200341206a41086a20034180016a41086a290000370300200320032900800137032020034180016a200341206a1098082003280280012206200328028801108f0221070240200328028401450d002006102e0b0240024002402007450d002000410c1093080c010b200341106a2005ad42004280c2d72f420010e80820034180016a200120032903102208200341106a41086a290300220910c3022003200329008101370360200320034180016a41086a2207280000360067024020032d00800122064106470d0020034180016a41186a2206420037030020034180016a41106a2205420037030020074200370300200342003703800120034180016a41d9fcc6004106108102200341e0006a4180f4cb0041061081022006200341e0006a41086a220729000037030020052003290060370300200341086a20034180016a4120108e02200328020c210620032802082105200341cc006a200241086a28000036000020032002290000370044200341c8016a2009370300200341c0016a2008370300200341a1016a2003290041370000200341a8016a200341c8006a290000370000200341b4016a4100360200200341b0016a2006410020051b36020020034189016a200141086a29000037000020034191016a200141106a29000037000020034199016a200141186a290000370000200341013a0080012003200129000037008101200341e0006a41186a200341206a41186a290300370300200341e0006a41106a200341206a41106a2903003703002007200341206a41086a29030037030020032003290320370360200341d0006a200341e0006a10be082003280250210220032802582107200341003602682003420137036020034180016a200341e0006a10ac082002200720032802602206200328026810b20102402003280264450d002006102e0b02402003280254450d002002102e0b0240200341a8016a280200450d00200341a4016a280200102e0b200341d8016a2009370300200341d0016a200837030020034180016a41086a410b3a000020034191016a200341206a41086a29030037000020034199016a200341206a41106a290300370000200341a1016a200341206a41186a290300370000200341a9016a2001290000370000200341b1016a200141086a290000370000200341b9016a200141106a290000370000200341c1016a200141186a290000370000200341093a00800120034180016a41096a200329032037000020034180016a10fe01200041063a00000c020b200020063a000020002003290360370001200041086a20032800673600000b200241046a280200450d002004102e0b20034180026a24000bab0a07037f017e017f017e017f027e037f230041f0016b22032400200341f0006a20022802002204200228020810b001200341106a41186a200341f0006a41186a22052900002206370300200341106a41106a200341f0006a41106a22072900002208370300200341106a41086a200341f0006a41086a2209290000220a37030020032003290070220b370310200341003a004020052006370300200720083703002009200a3703002003200b370370200341d0006a200341f0006a10be08200341086a200328025022052003280258200341c0006a4101410010ca0402400240024020032802080d00200341f0006a410d10930820032802540d010c020b0240024002400240200328020c450d0020032d00400e020102000b4190c1cb00412910ef02200341f0006a410d1093080c020b200341063a00700c010b200341f0006a410c1093080b2003280254450d010b2005102e0b200320032900713703302003200341f0006a41086a2800003600370240024002400240024020032d007022054106470d00200341d0006a200341106a109808200341f0006a20032802502207200328025810ad052003280254210520032d007022094102460d0120034198016a280200210c20034194016a280200210d2003280274210e02402005450d002007102e0b20090d02200341f0006a41186a22054200370300200341f0006a41106a22074200370300200341f0006a41086a420037030020034200370370200341f0006a41d9fcc6004106108102200341d0006a4180f4cb0041061081022005200341d0006a41086a2209290000370300200720032900503703002003200341f0006a4120108e0220032802042105200328020021072003413b6a200241086a28000036000020032002290000370033200341b8016a4200370300200341b0016a420037030020034191016a200329003037000020034198016a200341376a290000370000200341a8016a200e360200200341a4016a4101360200200341a0016a2005410020071b360200200341f9006a200141086a29000037000020034181016a200141106a29000037000020034189016a200141186a290000370000200341013a007020032001290000370071200341d0006a41186a200341106a41186a290300370300200341d0006a41106a200341106a41106a2903003703002009200341106a41086a29030037030020032003290310370350200341c0006a200341d0006a10be0820032802402102200328024821052003410036025820034201370350200341f0006a200341d0006a10ac082002200520032802502207200328025810b20102402003280254450d002007102e0b02402003280244450d002002102e0b024020034198016a280200450d0020034194016a280200102e0b200341c8016a4200370300200341c0016a4200370300200341f0006a41086a410b3a000020034181016a200341106a41086a29030037000020034189016a200341106a41106a29030037000020034191016a200341106a41186a29030037000020034199016a2001290000370000200341a1016a200141086a290000370000200341a9016a200141106a290000370000200341b1016a200141186a290000370000200341093a0070200341f0006a41096a2003290310370000200341f0006a10fe01200041063a00000c040b200020053a000020002003290330370001200041086a20032800373600000c020b02402005450d002007102e0b2000410d1093080c010b0240200c450d00200d102e0b2000410c1093080b200241046a280200450d002004102e0b200341f0016a24000bf50101047f230041306b22022400200241de80ca004109108102200241106a41f780ca004109108102024002404120102c2203450d002002422037022420022003360220200241206a20014120107420022802282201417f4c0d01200228022021030240024020010d00410121040c010b2001102c2204450d010b20042003200110e908210402402002280224450d002003102e0b200141206a2203417f4c0d012003102c2205450d0020004100360208200020033602042000200536020020002002411010742000200241106a41101074200020042001107402402001450d002004102e0b200241306a24000f0b1036000b1038000b8e1d08077f067e0a7f017e017f057e017f067e23004190046b22042400200441a0026a2002108905200441d0026a20042802a002220520042802a802108a05200441d0036a41086a220620044190036a290300370300200441d0036a41106a220720044198036a290300370300200441d0036a41186a2208200441a0036a290300370300200441d0036a41206a2209200441a8036a290300370300200441d0036a41286a220a200441b0036a290300370300200420044188036a2903003703d00320044180036a290300210b200441d0026a41286a290300210c200441d0026a41206a290300210d200441d0026a41186a290300210e200441d0026a41106a290300210f200441d0026a41086a290300211020042802d402211120042d00d1022112024020042d00d00222134102460d00200441e0006a41286a200a290300370300200441e0006a41206a2009290300370300200441e0006a41186a2008290300370300200441e0006a41106a2007290300370300200441e0006a41086a2006290300370300200420042903d0033703600b024020042802a402450d002005102e0b200441a0016a41286a2205200441e0006a41286a290300370300200441a0016a41206a2206200441e0006a41206a290300370300200441a0016a41186a2207200441e0006a41186a290300370300200441a0016a41106a2214200441e0006a41106a290300370300200441a0016a41086a2215200441e0006a41086a290300370300200420042903603703a001200441d0016a200110b808200441d0026a20042802d001221620042802d80110b105200441a0026a41026a220120042d00d3023a0000200441d0036a41086a2004419c036a290200370300200441d0036a41106a2217200441a4036a290200370300200441d0036a41186a2218200441ac036a290200370300200441d0036a41206a2219200441b4036a290200370300200441d0036a41286a221a200441bc036a280200360200200420042f00d1023b01a002200420044194036a2902003703d0030240024020042d00d00222094102470d004200211b4100210a4100211c4200211d4200211e4200211f42002120420021214100212241082108410021090c010b20044188036a290300212120044180036a2903002120200441d0026a41286a290300211f200441d0026a41206a290300211e200441d0026a41186a290300211d200441d0026a41106a290300211b20044190036a2802002122200441dc026a280200211c200441d0026a41086a280200210a20042802d40221082004418c026a41026a20012d00003a0000200441e0016a41086a200441d0036a41086a290300370300200441e0016a41106a2017290300370300200441e0016a41186a2018290300370300200441e0016a41206a2019290300370300200441e0016a41286a201a280200360200200420042f01a0023b018c02200420042903d0033703e0010b200441a0026a41286a2005290300370300200441a0026a41206a2006290300370300200441a0026a41186a2007290300370300200441a0026a41106a2014290300370300200441a0026a41086a2015290300370300200420042903a0013703a0020240024002400240024020090d004100210102400240024002400240024002400240024002400240201c0e020201000b41002101201c2105034020012005410176220620016a22072008200741306c6a28020020024b1b2101200520066b220541014b0d000b0b2008200141306c6a2802002002470d002013410371417f6a0e020208010b20044190026a41161093080c0a0b200441d0036a41286a200441a0026a41286a290300370300200441d0036a41206a200441a0026a41206a290300370300200441d0036a41186a200441a0026a41186a290300370300200441d0036a41106a200441a0026a41106a290300370300200441d0036a41086a200441a0026a41086a290300370300200420042903a0023703d00302402003450d0020044190026a41171093080c0a0b201c20014d0d012008200141306c6a220541186a2903002123200541106a29030021240240024020052d000822064101470d00200541286a2903002125200541206a2903002126200441186a20242023420a420010e708200441086a20262025420a420010e708200c20247d2227200c56200b20237d200c202454ad7d2224200b562024200b511b0d01202720267d2228202756202420257d2027202654ad7d220c202456200c2024511b0d0120102004290318220b7d2224201056200f200441186a41086a2903007d2010200b54ad7d220b200f56200b200f511b0d01200e2004290308220f7d2223200e56200d200441086a41086a2903007d200e200f54ad7d220e200d56200e200d511b450d070c010b200541096a2d00002107024002402005410a6a2d0000221441ff0171450d0041062105024002400240024002400240024020144107710e0700010203040506000b410021050c050b410121050c040b410221050c030b410321050c020b410421050c010b410521050b200441386a202342002005ad2226420010e808200441c8006a202442002026420010e808427f200441d0006a290300222620042903387c2225200429034042005220252026547222051b2125427f200429034820051b21260c010b200441286a20242023420a420010e708200441306a2903002125200429032821260b200c20247d2228200c56200b20237d200c202454ad7d220c200b56200c200b511b0d000240200741ff01710d00200e20267d2223200e56200d20257d200e202654ad7d220e200d56200e200d511b0d0120060d06200741ff01714102460d064200200e201d7d2023201b54ad7d220b2023201b7d220d202356200b200e56200b200e511b22051b210e4200200d20051b21234200200c201f7d2028201e54ad7d220b2028201e7d220d202856200b200c56200b200c511b22051b210c4200200d20051b21280c060b201020267d2224201056200f20257d2010202654ad7d220b200f56200b200f511b450d040b20044190026a411a1093080c090b201c20014d0d012008200141306c6a22052d00080d05200541096a2d000045201241ff0171410047460d05200541186a290300210b200541106a290300210c4180c09306210602400240024002400240024002402005410a6a2d00004107710e0700010203040506000b410021060c050b4180ce1821060c040b41809c3121060c030b4180b8e20021060c020b4180f0c40121060c010b4180e0890321060b200441e8026a22054200370300200441e0026a22074200370300200441d0026a41086a4200370300200442003703d002200441d0026a41d9fcc6004106108102200441d0036a4180f4cb0041061081022005200441d0036a41086a290000370300200720042900d003370300200441d8006a200441d0026a4120108e02200428025c410020042802581b200620116a22054f0d0502402003450d0020044190026a41171093080c090b2021200b2020200c562021200b562021200b511b22061b21212020200c20061b212020222005202220054b1b21220c050b2001201c41bcc1cb00103c000b2001201c41ccc1cb00103c000b024020060d00200741ff01714102460d004200200b201d7d2024201b54ad7d220f2024201b7d2210202456200f200b56200f200b511b22051b210b4200201020051b21244200200c201f7d2028201e54ad7d220f2028201e7d2210202856200f200c56200f200c511b22051b210c4200201020051b21280b200e2123200d210e0c010b20102124200f210b0b20044180036a200c370300200441d0026a41286a2028370300200441d0026a41206a200e370300200441d0026a41186a2023370300200441d0026a41106a200b37030020044188036a20042903d00337030020044190036a200441d8036a29030037030020044198036a200441d0036a41106a290300370300200441a0036a200441d0036a41186a290300370300200441a8036a200441d0036a41206a290300370300200441b0036a200441d0036a41286a290300370300200420243703d802200441003a00d002200441c0036a200210890520042802c803210620042802c003210520044100360288042004420137038004200441d0026a20044180046a10bc0520052006200428028004220720042802880410b2010240200428028404450d002007102e0b20042802c403450d002005102e0b201c20014d0d012008200141306c6a2205200541306a201c2001417f736a41306c10ea081a201c417f6a211c0b200441063a0090020c020b2001201c1046000b20042d00900222014106460d0020042004290091023703d003200420044198026a2800003600d70320090d01200a450d01200a41306c450d012008102e0c010b20044188036a202137030020044180036a2020370300200441d0026a41286a201f370300200441d0026a41206a201e370300200441d0026a41186a201d370300200441d0026a41106a201b37030020044190036a2022360200200441dc026a201c360200200441d0026a41086a200a36020020044194036a20042903e0013702002004419c036a200441e0016a41086a290300370200200441a4036a200441e0016a41106a290300370200200441ac036a200441e0016a41186a290300370200200441b4036a200441e0016a41206a290300370200200441bc036a200441e0016a41286a280200360200200420042f018c023b00d102200420083602d40220042004418c026a41026a2d00003a00d302200420093a00d00220042802d801210120042802d00121160240024020094102470d002016200110ff010c010b200441d0036a200441d0026a10c2042016200120042802d003220520042802d80310b20120042802d403450d002005102e0b024020090d00200a450d00200a41306c450d002008102e0b20042004290091023703d003200420044198026a2800003600d703410621010b024020042802d401450d002016102e0b200420042903d00337039001200420042800d7033600970141062105024020014106460d002000200429039001370001200041086a200428009701360000200121050b200020053a000020044190046a24000bf30201037f024002400240024002400240024020002d0000417f6a0e0c000606060106020304060605060b200041046a2802004102490d05200041106a2802002201450d05200041146a280200450d052001102e0f0b200041086a280200450d04200041046a280200102e0c040b200041046a2802000d032000410c6a2802002201450d03200141286c450d03200041086a280200102e0f0b200041046a2d00004102490d020240200041106a2802002201450d00200141d0006c2102200041086a28020041c4006a21010340024020012802002203450d00200341306c450d002001417c6a280200102e0b200141d0006a2101200241b07f6a22020d000b0b2000410c6a2802002201450d02200141d0006c450d022000280208102e0f0b200041086a2d00004101470d01200041146a28020041ffffff3f71450d01200041106a280200102e0f0b200041086a2d00000d00200041106a2802002201450d00200141306c450d002000410c6a280200102e0f0b0b130020004100360204200041d4e2cc003602000b13002000410a360204200041b4cccb003602000b3400200041d9fcc60036020420004100360200200041146a4110360200200041106a41dce6cb00360200200041086a42063702000b130020004106360204200041b883cc003602000b920101017f230041c0006b22022400200241386a41002903e8f846370300200241306a41002903e0f846370300200241286a41002903d8f846370300200241206a41002903d0f846370300200241186a41002903c8f846370300200241106a41002903c0f846370300200241086a41002903b8f846370300200241002903b0f84637030020002002108707200241c0006a24000b4c01017f230041106b220224002000410036020820004201370200200242c0f0f50b3703082000200241086a4108107420024280c2d72f3703082000200241086a41081074200241106a24000b4301027f230041106b2202240002404104102c22030d001036000b2000420437020420002003360200200241e01236020c20002002410c6a41041074200241106a24000b6101017f230041106b2202240020004100360208200042013702002002418080f0013602082000200241086a410410742002418080c00236020c20002002410c6a410410742002418080c0023602042000200241046a41041074200241106a24000b7701017f230041c0016b22022400200210a9032000410036020820004201370200200220022903003703b8012000200241b8016a41081074200220022903083703b8012000200241b8016a41081074200241106a200010a207200241c8006a200010a20720024180016a200010a207200241c0016a24000b8726040c7f0a7e037f0e7e230041f0036b22052400200541d0016a200010e505200541f0026a20052802d001220620052802d80110f402200541206a41086a2207200541f9026a290000370300200541206a41106a220820054181036a290000370300200541206a41186a220920054189036a290000370300200520052900f1023703204100210a024020052d00f0024101470d0020054190026a41186a200929030037030020054190026a41106a200829030037030020054190026a41086a200729030037030020052005290320370390024101210a0b024020052802d401450d002006102e0b0240200a450d00200541186a20054190026a41186a2206290300370300200541106a20054190026a41106a2207290300370300200541086a20054190026a41086a22082903003703002005200529039002370300200541c0016a200510d305200541f0026a20052802c001220920052802c80110e60520054198016a41086a220b200541f0026a41086a29030037030020054198016a41106a220c200541f0026a41106a29030037030020054198016a41186a220d200541f0026a41186a29030037030020082005419c036a2902003703002007200541a4036a2902003703002006200541ac036a29020037030020054190026a41206a220e200541b4036a29020037030020054190026a41286a220f200541bc036a29020037030020054190026a41306a2210200541c4036a280200360200200520052903f002370398012005200529029403370390020240200528029003220a450d00200541f8006a41186a200d290300370300200541f8006a41106a200c290300370300200541f8006a41086a200b290300370300200541d0016a41086a2008290300370300200541d0016a41106a2007290300370300200541d0016a41186a2006290300370300200541d0016a41206a200e290300370300200541d0016a41286a200f290300370300200541d0016a41306a2010280200360200200520052903980137037820052005290390023703d0010b024020052802c401450d002009102e0b200a450d00200541c4006a20052903d001370200200541206a41186a2206200541f8006a41186a290300370300200541206a41106a2207200541f8006a41106a290300370300200541206a41086a2208200541f8006a41086a290300370300200541cc006a200541d0016a41086a290300370200200541d4006a200541d0016a41106a290300370200200541dc006a200541d0016a41186a290300370200200541e4006a200541f0016a290300370200200541ec006a200541d0016a41286a290300370200200541f4006a20054180026a280200360200200520052903783703202005200a360240200542003703f80220054280c8afa0253703f00220082903002111200529032021120240024020072903002213200120132001542006290300221420025420142002511b22071b22152014200220071b22168450450d0020122117201121180c010b2006201420167d2013201554ad7d22193703002005201320157d22173703300240024020174280c8afa0255620194200522019501b450d0020152113201621140c010b200541386a420037030020054200370330201920027c201720017c2201201754ad7c21020b20054200201120147d2012201354ad7d2215201220137d2219201256201520115620152011511b22061b221837032820054200201920061b2217370320200220147d2001201354ad7d2102200120137d21010b02400240024002400240024002400240200541206a41286a280200220641186c0d00410021062005280248210a0c010b200641186c2108200641037441786a41037641016a210b41002106024003400240200a2903002213200120012013562002200a41086a220929030022145620022014511b22071b22152014200220071b221684500d00200a201320157d2217370300200a201420167d2013201554ad7d221937030802400240201720052903f002562019200541f0026a41086a29030022185620192018511b450d002001211920152113201621140c010b200a4200370308200a4200370300200220197c200120177c2219200154ad7c21020b200541206a41086a220742002007290300220120147d20052903202215201354ad7d2216201520137d2217201556201620015620162001511b22071b221837030020054200201720071b2217370320200220147d2019201354ad7d2102201920137d210120092903002114200a29030021130b20132014844200520d01200a41186a210a200641016a2106200841686a22080d000b200b21060b2005280248220a2006490d010b200541003602480240200a20066b220a450d0002402006450d00200528024022072007200641186c6a200a41186c10ea081a200541286a2903002118200529032021170b2005200a3602480b2012201758201120185820112018511b0d05201220177d2214201256201120187d2012201754ad7d221320115620132011511b210a20054190026a200010c802200541f0026a200528029002220620052802980210c90220054190036a290300210120054188036a290300211520054180036a290300211620052903f802211220052903f00221020240200528029402450d002006102e0b42002013200a1b211142002014200a1b21184200211320024201520d0342002119201821172011211a2012201584201620018484500d04200541f0026a41c8006a2108200541f0026a41086a211b20054190026a41306a211020054190026a41206a211c41002106200541f0026a41386a210f200541f0026a41106a210d200541d0016a41286a210c200541d0016a41186a211d02400340200520003602bc0120054190026a200010c802200541f0026a200528029002220a20052802980210c902200f2903002119200541f0026a41306a22072903002102200541f0026a41206a220e2903002116200d29030021132005290398032101200529038803211720052903f802211420052903b003211220052903f0022115200541c0016a41086a200841086a290300370300200520082903003703c0010240024020154201510d0042002112200541d0016a41386a4200370300200541d0016a41306a4200370300200c4200370300200541d0016a41206a4200370300201d4200370300200541d0016a41106a4200370300200541d0016a41086a4200370300200542003703d001420021014200210242002114420021130c010b200c2002370300200541d0016a41306a2019370300200520013703f001200520143703d0012005201237038802200520173703e001200520133703d801200520163703e8010b0240200528029402450d00200a102e0b0240024020142013844200520d00200120052903e00184200529038002842002201d29030084200541d0016a41386a290300848450450d00420021014100210a0c010b200541d0016a41106a2903002114200541d0016a41306a290300211e200c290300211f200541d0016a41206a290300212020052903d801211320052903d00121154201210120052903e80121024101210a0b024020014201522209450d004200211442002112420021204200211f4200211e4200210242002115420021130b201821162011211702402006450d004200200220137c201420157c2201201454ad7c221920014280c8afa02554ad7d221620014280b8d0df5a7c22172001562016201956200142ffc7afa025561b220b1b22012011201842002017200b1b221956201120015620112001511b220b1b211720192018200b1b21160b2013201720132015201656201320175620132017511b220b1b22197d201520162015200b1b221354ad7d2101201520137d211502400240201620137d221a201720197d2016201354ad7d221684500d00201120197d2018201354ad7d201620022014201a56200220165620022016511b220b1b22177d201820137d2221201a2014200b1b221654ad7d211a200220177d2014201654ad7d2102201720197c201620137c2213201654ad7c2119202120167d2117201420167d21140c010b201120197d2018201354ad7d211a201820137d21170b200541f0026a41286a220b201f370300200541f0026a41186a20023703002007201e37030020052020370390032005201437038003200520153703f002200520013703f8022009ad212002400240427f201520147c221620162015542209200120027c2009ad7c221620015420162001511b22091b221f42ffc7afa02556427f201620091b22164200522016501b0d0020222016201520148420012002848422025022071b21222023201f20071b2123420021142002420052ad21020c010b20072903002124200b2903002125200e2903002126200d2903002127200529038803212820052903f802212920052903f002212a4201211442002102410121072012212b0b20054190026a41c8006a201a37030020054190026a41386a201937030020054190026a41286a202237030020054190026a41106a2001370300200520173703d002200520133703c002200520233703b0022005201537039802200520023703a80220052020370390020240200a2014420152720d00200520003602f0022000200541f0026a10bd060c040b200a410173220a2014420151720d01200520003602f00202402000200541f0026a10be0641ff0171220a4102460d00200a0d04200541d8026a290300211a200541c8026a2903002119200541b8026a2903002122200541a0026a290300210120052903d002211720052903c002211320052903b0022123200529039802211520052903a802210220052903900221200c050b024020070d002005201c3602f002200541f0026a10cc020b200520103602f002200541f0026a10cc02200641016a22064102470d000b420021130c040b2014420152200a71450d010c020b2006200a41b4b3c000104d000b200541e0026a200010c802200541f0026a20052802e002220a20052802e802220610c90220052903f0022113200541c0016a41086a2207200841086a290300370300200520082903003703c0010240024020134201510d00200541f8006a41086a4200370300200542003703780c010b200541f8006a41086a2007290300370300200520052903c0013703780b024020144201510d004200212a420021294200212642002125420021244200212b42002127420021280b20082005290378370300200541a0036a202537030020054190036a2028370300200541f0026a41106a2029370300200541f0026a41386a2024370300200841086a200541f8006a41086a290300370300200520263703980320052027370388032005202a3703f8022005202b3703b003200542013703f002200a2006201b10c805024020052802e402450d00200a102e0b20054190026a41106a2903002101200541b8026a290300212220054190026a41386a2903002119200541d8026a290300211a200529039802211520052903b002212320052903c002211320052903d0022117200529039002212020052903a80221020b024020204201520d00200541a8036a2001370300200541a0036a2015370300200541f0026a41086a41003a0000200541f9026a200029000037000020054181036a200041086a29000037000020054189036a200041106a29000037000020054191036a200041186a290000370000200541033a00f002200541f0026a10fe010b02400240200250450d00420021140c010b200541f0026a41086a20052802bc01220a41086a290000370300200541f0026a41106a200a41106a290000370300200541f0026a41186a200a41186a2900003703002005200a2900003703f002420121140b20054198016a41186a200541f0026a41186a220a290300220237030020054198016a41106a200541f0026a41106a2206290300220137030020054198016a41086a200541f0026a41086a2903002215370300200520052903f002221637039801200541a0036a202237030020054198036a2207202337030020062015370300200a200137030020054190036a2002370300200520143703f002200520163703f802200541f0026a10d20420052903f002500d01200520073602900220054190026a10cc020c010b42002119201821172011211a0b2004427f2004290300221420137c22132013201454220a200441086a2206290300221320197c200aad7c221420135420142013511b220a1b3703002006427f2014200a1b37030002402017201a84500d00200342002003290300221320177d22142014201356200341086a220a2903002214201a7d2013201754ad7d221320145620132014511b22061b370300200a4200201320061b3703000b42f3e885db96cddbb320200541206a41386a2005290320200541206a41086a290300411f1085062005200541206a10d205200541f0026a41386a2011370300200541a0036a2018370300200541f0026a41086a41023a0000200541f9026a200029000037000020054181036a200041086a29000037000020054189036a200041106a29000037000020054191036a200041186a290000370000200541043a00f002200541f0026a10fe010b02402005280244220a450d00200a41186c450d002005280240102e0b200541d0006a28020041ffffffff0371450d00200528024c102e0b200541f0036a24000b130020004103360204200041d490cc003602000b0600200010150ba40301097f230041206b220224000240024020012802082203410c6c41046a2204417f4c0d00200128020021050240024020040d00410121060c010b2004102c2206450d020b20024100360208200220043602042002200636020020032002107602402003450d0020052003410c6c6a210720052104034020042802002106200441086a28020022082002107620022006200810742004410c6a22042007470d000b0b20022802042106200241186a2208200235020842208620022802002209ad84100c220441186a290000370300200241106a2207200441106a290000370300200241086a220a200441086a290000370300200220042900003703002004102e200041186a2008290300370000200041106a2007290300370000200041086a200a2903003700002000200229030037000002402006450d002009102e0b02402003450d002003410c6c21062005210403400240200441046a280200450d002004280200102e0b2004410c6a2104200641746a22060d000b0b0240200141046a2802002204450d002004410c6c450d002005102e0b200241206a24000f0b1038000b1036000b3b02017e017f0240024010292201422088a722020d0020004101360200410021020c010b20002001a73602000b20002002360208200020023602040b130020002002ad4220862001ad84102010da080b130020004107360204200041f4aacc003602000b3400200041b4c3cb0036020420004100360200200041146a4102360200200041106a41fcb6cc00360200200041086a42133702000b3400200041f4c2cc0036020420004100360200200041146a4101360200200041106a418cc3cc00360200200041086a42183702000bcf0403017f017e037f230041b0016b22032400024002402001200210062204422088a72201450d002001417f6a21050240024002402004a722062d00000e020001030b41002101200341003a0069200641016a21070240034020052001460d01200341c8006a20016a200720016a2d00003a00002003200141016a22023a00692002210120024121460d030c000b0b200141ff0171450d02200341003a00690c020b2005450d014100210202400240024020062d00010e03020100040b410221020c010b410121020b200341086a41186a200341c8006a41186a290000370300200341086a41106a200341c8006a41106a290000370300200341086a41086a200341c8006a41086a2900003703002003200329004837030841012105200341086a21010c020b200341f0006a41086a2201200341d1006a290000370300200341f0006a41106a2205200341d9006a290000370300200341f0006a41186a2207200341e1006a29000037030020032003290049370370200241ff017141204d0d0020032d00482102200341286a41186a20072903002204370300200341086a41086a2001290300370300200341086a41106a2005290300370300200341086a41186a20043703002003200329037037030841002105200341086a21010c010b41cae0cc00412e200341c8006a41f8e0cc004188e1cc00103e000b200020023a0001200020053a0000200041026a20012900003700002000410a6a200141086a290000370000200041126a200141106a2900003700002000411a6a200141186a2900003700002006102e200341b0016a24000b130020004105360204200041e4c6cc003602000bba0203027f027e037f230041206b22022400200241106a41086a2203200141086a28020036020020022001290200370310200241106a10bb070240024020032802002201410574418101490d00200041bdd8cc0036020420004101360200200041086a411d3602000c010b0240024020010d0042002104420021050c010b2002280210220341786a21062003200141027422016a417c6a280200210741002103200241086a21084200210442002105034020022007ad4200200341e0007110ed08200829030020057c2002290300220520047c2204200554ad7c210520014104460d01200341206a2103200620016a28020021072001417c6a21010c000b0b20004100360200200041106a2005370300200041086a20043703000b0240200228021441ffffffff0371450d002002280210102e0b200241206a24000bd003030a7f017e027f02400240024002400240200141086a2802002203200241086a2802002204200320044b1b220541016a22064101200641014b1b220741ffffffff03712007470d0020074102742206417f4c0d000240024020060d00410421080c010b200610322208450d020b20002008360200200041086a200736020020002006410276360204024020050d00410021000c050b2007417f6a21062004417f6a220920044b210a200741027420086a417c6a210b2002280200210c410021024200210d03404100210002402003417f6a220e20034b0d00410021002003200e20026b220f4d0d0041002100200f200e4b0d002001280200200f4102746a28020021000b4100210e0240200a0d002004200920026b220f4d0d00200f20094b0d00200c200f4102746a280200210e0b200720064d0d03200b200d2000ad7c200ead7c220d3e0200200b417c6a210b2006417f6a2106200d422088210d2005200241016a2202460d040c000b0b1038000b1036000b2006200741ecd8cc00103c000b200da721000b024020072005417f736a220620074f0d00200820064102746a20003602000240200141046a28020041ffffffff0371450d002001280200102e0b0f0b2006200741ecd8cc00103c000be30303047f017e057f230041106b22012400024002400240024002400240024020002802002202280200220341016a41004c0d002002200336020020002802042203280200220441016a41004c0d0120022903082105200320043602002000280208220441086a2802002206200028020c220728020022086b41016a220920064f0d024101200028021428020020086a6b22062000280210220841086a28020022006a220a20064f0d0302400240200542ffffffff0f560d00410021002005200428020020094102746a3502007e20032903084220862008280200200a4102746a35020084580d010b20022802000d052002410036020020022002290308427f7c370308200441086a2802002200200020072802006b22024d0d0620032802000d07200428020020024102746a3502002105200341003602002003200520032903087c370308410121000b200141106a240020000f0b41bcd9cc004118200141086a41d4d9cc0041f4d9cc00103e000b41bcd9cc004118200141086a41d4d9cc004184dacc00103e000b2009200641ccd7cc00103c000b200a200041ccd7cc00103c000b4194dacc004110200141086a41a4dacc0041b4dacc00103e000b2002200041ccd7cc00103c000b4194dacc004110200141086a41a4dacc0041c4dacc00103e000b1c002001280218419eeacc00410f2001411c6a28020028020c1100000b5601017f4104210502400240024002400240200041ff0171417f6a0e050001020304000b410021050c030b410121050c020b410221050c010b410321050b20052002ad4220862001ad842004ad4220862003ad8410010bbb0101047f230041206b22022400024002402001422088a722030d002002200336020c200241013602080c010b2002200336020c20022001a7220436020820042d0000210520022003417f6a36020c2002200441016a360208410021030240024020050e020100020b200241106a200241086a10db0820022802102203450d01200229021421010b20002001370204200020033602002004102e200241206a24000f0b41cae0cc00412e200241106a41f8e0cc004188e1cc00103e000bed0102047f017e230041106b22022400200241086a200110ab01024002400240024002402002280208450d00200041003602000c010b024020012802042203200228020c2204490d002004417f4c0d020240024020040d00410121050c010b200410322205450d04200128020421030b024020032004490d0020052001280200200410e9082103200128020422052004490d0520002004ad2206422086200684370204200020033602002001200520046b3602042001200128020020046a3602000c020b2005102e0b200041003602000b200241106a24000f0b1038000b1036000b2004200541b8b2c0001056000bec0101047f230041106b22022400024002400240200128020022030d00410121040c010b0240200141086a28020041056a2204417f4c0d0020040d0141012105410021040c020b1038000b2004102c22050d001036000b2002410036020820022004360204200220053602000240024020030d00200241003a000f20022002410f6a410110740c010b200241013a000f20022002410f6a41011074200141086a28020022042002107620022003200410740b20002002290300370204200041013602002000410c6a20022802082204360200200041106a2004ad422086200235020084370300200241106a24000bb10301047f230041c0006b22022400200028020021034101210002402001280218418c9dc000410c2001411c6a28020028020c1100000d0002400240200328020822000d0020032802002200200328020428020c11070042f4f99ee6eea3aaf9fe00520d012002200036020c2002411036021420022002410c6a36021020012802182104200128021c2105410121002002413c6a41013602002002420237022c200241989dc0003602282002200241106a36023820042005200241286a103d0d020c010b2002200036020c2002411136021420022002410c6a36021020012802182104200128021c2105410121002002413c6a41013602002002420237022c200241989dc0003602282002200241106a36023820042005200241286a103d0d010b200328020c2100200241106a41146a4101360200200241106a410c6a410136020020022000410c6a3602202002200041086a360218200241043602142002200036021020012802182100200128021c2101200241286a41146a41033602002002420337022c200241a89dc0003602282002200241106a36023820002001200241286a103d21000b200241c0006a240020000b06002000100d0b06002000100e0be50102037f017e230041206b22022400024002400240200041046a2802002203200028020822046b20014f0d00200420016a22012004490d02200341017422042001200420014b1b22014104200141044b1bad420c7e2205422088a74541027421012005a721040240024020030d00200241003602100c010b200241186a410436020020022003410c6c360214200220002802003602100b200220042001200241106a107d200241086a280200210120022802004101460d0120002002280204360200200041046a2001410c6e3602000b200241206a24000f0b2001450d001036000b1038000b1c002001280218419eeacc00410f2001411c6a28020028020c1100000b1c002001280218419eeacc00410f2001411c6a28020028020c1100000bc00201057f230041106b22022400024002400240024020002d002c4101710d0002400240200028020022034125490d002000410c6a22042802002105200041086a28020021060c010b200041056a21062003210520002104412421030b024020052003470d0020022000410110fc06024020022802004101470d00200241086a2802000d0441d0f0cc00411141e4f0cc001039000b2000410c6a22042802002105200041086a28020021060b200620056a20014104743a00002004200428020041016a3602000c010b02400240200028020022044125490d002000410c6a2802002104200041086a28020021050c010b200041056a21050b2005450d022004450d02200420056a417f6a220420042d00002001723a00000b2000200028022c41016a36022c200241106a24000f0b1036000b4198eccc00413a41d4eccc00105d000b5801017e02400240200341c00071450d0020022003413f71ad882101420021020c010b2003450d002002410020036b413f71ad8620012003413f71ad220488842101200220048821020b20002001370300200020023703080baa0604017f017e017f057e230041206b22052400024002400240024002400240024002402004500d00420021062001200354200220045420022004511b0d052002500d05200541106a20032004200479a7200279a76b220741ff007110ed0842012007413f71ad862108200541186a29030021092005290310210a4200210603402001200a7d210b0240200220097d2001200a54ad7d220c4200530d0020062008842106200b20035a200c20045a200c2004511b450d03200b2101200c21020b200a4201882009423f8684210a20084201882108200942018821090c000b0b4200210c024020024200520d0020012001200380220620037e7d21010c060b0240200220035a0d0020052003200441c000200279a7200379a76b22076b413f20071b220741ff007110ed0842012007413f71ad86210c200541086a290300210a200529030021094200210b034002402002200a7d2001200954ad7d22084200530d00200120097d2101200c200b84210b20084200510d04200821020b2009420188200a423f86842109200c420188210c200a420188210a0c000b0b20022003510d0320022002200380220820037e7d210c0240200342ffffffff0f560d00200c422086200142208884220a200a200380220a20037e7d422086200142ffffffff0f838422092009200380220920037e7d2101200a4220862009842106200a42208820088421084200210c0c070b0240200120035a200c20045a200c2004511b0d00420021060c070b2004423f86200342018884210a2003423f862109428080808080808080807f21024200210403400240200c200a7d2001200954ad7d220b4200530d00200120097d210120022004842104200b4200510d04200b210c0b2009420188200a423f8684210920024201882102200a420188210a0c000b0b42002108200b21010c050b2001200380220a200b8421062001200a20037e7d21014200210c0c030b2001200380220a20048421062001200a20037e7d21014200210c0c030b20012001200280220620027e7d21014200210c420121080c020b2002210c0b420021080b2000200137031020002006370300200041186a200c37030020002008370308200541206a24000b3c01017f230041206b220524002005200120022003200410e508200529031021012000200541186a29030037030820002001370300200541206a24000b3c01017f230041206b220524002005200120022003200410e508200529030021012000200541086a29030037030820002001370300200541206a24000b6e01077e2000200342ffffffff0f832205200142208822067e220720034220882208200142ffffffff0f8322097e7c220a422086220b200520097e7c22053703002000200a200754ad422086200a42208884200820067e7c2005200b54ad7c200420017e200320027e7c7c3703080b3601017f02402002450d00200021030340200320012d00003a0000200141016a2101200341016a21032002417f6a22020d000b0b20000b6f01017f02400240200020016b20024f0d002001417f6a21012000417f6a21030340200320026a200120026a2d00003a00002002417f6a22020d000c020b0b2002450d00200021030340200320012d00003a0000200141016a2101200341016a21032002417f6a22020d000b0b20000b2c01017f02402002450d00200021030340200320013a0000200341016a21032002417f6a22020d000b0b20000b4a01037f4100210302402002450d000240034020002d0000220420012d00002205470d01200041016a2100200141016a21012002417f6a2202450d020c000b0b200420056b21030b20030b5801017e02400240200341c00071450d0020012003413f71ad862102420021010c010b2003450d0020022003413f71ad2204862001410020036b413f71ad88842102200120048621010b20002001370300200020023703080b0bfef50c0200418080c0000be7f50c100010001c00000018020000050000006c6962726172792f616c6c6f632f7372632f7261775f7665632e7273c00010004b0000005a010000130000001200000004000000040000001300000014000000150000006120666f726d617474696e6720747261697420696d706c656d656e746174696f6e2072657475726e656420616e206572726f720012000000000000000100000016000000a800100018000000420200001c0000006c6962726172792f616c6c6f632f7372632f666d742e72732f72757374632f653337613133636333353934303034363633373338626431386438313030653664623936363663662f6c6962726172792f636f72652f7372632f666d742f6d6f642e72730050011000160000006601100016000000780f100001000000340110001c000000ee0400000d0000006c6962726172792f616c6c6f632f7372632f7665632f6d6f642e7273737761705f72656d6f766520696e6465782028697320292073686f756c64206265203c206c656e2028697320a401100014000000b801100017000000780f100001000000340110001c000000150500000d000000696e73657274696f6e20696e6465782028697320292073686f756c64206265203c3d206c656e202869732000f8011000120000006601100016000000780f100001000000340110001c000000450500000d00000072656d6f76616c20696e646578202869732000002c021000200000004c0210001200000012000000000000000100000017000000696e646578206f7574206f6620626f756e64733a20746865206c656e20697320206275742074686520696e64657820697320303030313032303330343035303630373038303931303131313231333134313531363137313831393230323132323233323432353236323732383239333033313332333333343335333633373338333934303431343234333434343534363437343834393530353135323533353435353536353735383539363036313632363336343635363636373638363937303731373237333734373537363737373837393830383138323833383438353836383738383839393039313932393339343935393639373938393900003803100010000000480310002200000072616e676520656e6420696e64657820206f7574206f662072616e676520666f7220736c696365206f66206c656e677468205b2e2e2e5d00d00310000b000000da0d1000160000000f04100001000000b80d10000e000000c60d100004000000ca0d1000100000000f04100001000000d00310000b000000db03100026000000010410000800000009041000060000000f041000010000006279746520696e64657820206973206e6f742061206368617220626f756e646172793b20697420697320696e7369646520202862797465732029206f6620606018041000020000002e2e0000520410001b0000006500000014000000307800004004100012000000480310002200000072616e676520737461727420696e646578206c6962726172792f636f72652f7372632f666d742f6e756d2e727300010305050606030706080809110a1c0b190c140d100e0d0f0410031212130916011705180219031a071c021d011f1620032b032c022d0b2e01300331023201a702a902aa04ab08fa02fb05fd04fe03ff0900d6091000250000000a0000001c000000ad78798b8da23057588b8c901c1ddd0e0f4b4cfbfc2e2f3f5c5d5fb5e2848d8e9192a9b1babbc5c6c9cadee4e5ff00041112293134373a3b3d494a5d848e92a9b1b4babbc6cacecfe4e500040d0e11122931343a3b4546494a5e646584919b9dc9cecf0d112945495764658d91a9b4babbc5c9dfe4e5f00d11454964658084b2bcbebfd5d7f0f183858ba4a6bebfc5c7cecfdadb4898bdcdc6cecf494e4f57595e5f898e8fb1b6b7bfc1c6c7d71116175b5cf6f7feff800d6d71dedf0e0f1f6e6f1c1d5f7d7eaeafbbbcfa16171e1f46474e4f585a5c5e7e7fb5c5d4d5dcf0f1f572738f7475962f5f262e2fa7afb7bfc7cfd7df9a409798308f1fc0c1ceff4e4f5a5b07080f10272feeef6e6f373d3f42459091feff536775c8c9d0d1d8d9e7feff00205f2282df048244081b04061181ac0e80ab35280b80e003190801042f043404070301070607110a500f1207550703041c0a090308030703020303030c0405030b06010e15053a0311070605100757070207150d500443032d03010411060f0c3a041d255f206d046a2580c80582b0031a0682fd035907150b1709140c140c6a060a061a0659072b05460a2c040c040103310b2c041a060b0380ac060a06213f4c042d0374083c030f033c0738082b0582ff1118082f112d032010210f808c048297190b158894052f053b07020e180980b32d740c80d61a0c0580ff0580df0cee0d03848d033709815c1480b80880cb2a38030a06380846080c06740b1e035a0459098083181c0a16094c04808a06aba40c170431a10481da26070c050580a511816d1078282a064c04808d0480be031b030f0d00d6091000250000001a000000360000000006010103010402080809020a050b020e041001110212051311140115021702190d1c051d0824016a036b02bc02d102d40cd509d602d702da01e005e102e802ee20f004f802f902fa02fb010c273b3e4e4f8f9e9e9f060709363d3e56f3d0d1041418363756577faaaeafbd35e01287898e9e040d0e11122931343a4546494a4e4f64655cb6b71b1c07080a0b141736393aa8a9d8d909379091a8070a3b3e66698f926f5feeef5a629a9b2728559da0a1a3a4a7a8adbabcc4060b0c151d3a3f4551a6a7cccda007191a22253e3fc5c604202325262833383a484a4c50535556585a5c5e606365666b73787d7f8aa4aaafb0c0d0aeaf79cc6e6f935e227b0503042d036603012f2e80821d03310f1c0424091e052b0544040e2a80aa06240424042808340b018090813709160a088098390363080930160521031b05014038044b052f040a070907402027040c0936033a051a07040c07504937330d33072e080a8126524e28082a561c1417094e041e0f430e19070a0648082709750b3f412a063b050a0651060105100305808b621e48080a80a65e22450b0a060d1339070a362c041080c03c64530c48090a46451b4808531d398107460a1d03474937030e080a0639070a81361980b7010f320d839b66750b80c48abc842f8fd18247a1b98239072a040260260a460a28051382b05b654b0439071140050b020e97f80884d62a09a2f7811f3103110408818c89046b050d03090710936080f60a73086e1746809a140c570919808781470385420f1585502b80d52d031a040281703a0501850080d7294c040a04028311444c3d80c23c06010455051b3402810e2c04640c560a80ae381d0d2c040907020e06809a83d8080d030d03740c59070c140c0438080a062808224e81540c15030305070919070709030d072980cb250a84066c6962726172792f636f72652f7372632f756e69636f64652f7072696e7461626c652e7273000c0a100016000000220a10000d000000736c69636520696e64657820737461727473206174202062757420656e647320617420000003000083042000910560005d13a0001217a01e0c20e01eef2c202b2a30a02b6fa6602c02a8e02c1efbe02d00fea0359effe035fd016136010aa136240d6137ab0ee1382f182139301c6146f31ea14af06a614e4f6fa14e9dbc214f65d1e14f00da215000e0e15130e16153ece2a154d0e8e15420002e55f001bf55900d100028000000520000003e00000000700007002d0101010201020101480b30151001650702060202010423011e1b5b0b3a09090118040109010301052b03770f0120370101010408040103070a021d013a0101010204080109010a021a010202390104020402020303011e0203010b0239010405010204011402160601013a0101020104080107030a021e013b0101010c0109012801030139030503010407020b021d013a01020102010301050207020b021c02390201010204080109010a021d0148010401020301010801510102070c08620102090b064a021b0101010101370e01050102050b0124090166040106010202021902040310040d01020206010f01000300031d031d021e02400201070801020b09012d03770222017603040209010603db0202013a010107010101010208060a020130113f0430070101050128090c0220040202010338010102030101033a0802029803010d0107040106010302c63a01050001c32100038d016020000669020004010a200250020001030104011902050197021a120d012608190b2e0330010204020227014306020202020c0108012f01330101030202050201012a020801ee010201040100010010101000020001e201950500030102050428030401a50200040002990bb001360f3803310402024503240501083e010c0234090a0402015f03020101020601a0010308150239020101010116010e070305c308020301011701510102060101020101020102eb010204060201021b025508020101026a0101010206010165030204010500090102f5010a0201010401900402020401200a280602040801090602032e0d010200070106010152160207010201027a060301010201070101480203010101000200053b0700013f0451010002000101030405080802071e0494030037043208010e011605010f000701110207010201050007000400076d07006080f000000000900d1000280000004b00000028000000900d10002800000057000000160000006c6962726172792f636f72652f7372632f756e69636f64652f756e69636f64655f646174612e7273626567696e203c3d20656e642028203c3d2029207768656e20736c6963696e672060206973206f7574206f6620626f756e6473206f6620603d3d00003c0e100019000000550e100012000000670e10000c0000000f041000010000003c0e100019000000550e100012000000670e10000c00000020311300020000000f04100001000000617373657274696f6e206661696c65643a2060286c6566742020726967687429600a20206c6566743a2060602c0a2072696768743a2060426f72726f774572726f72426f72726f774d75744572726f7270616e69636b656420617420c10e100001000000c20e1000030000005431130000000000c00e100001000000c00e1000010000003a27272c2020202020000000ec0e1000200000003200000021000000ec0e10002000000033000000120000006c6962726172792f636f72652f7372632f666d742f6275696c646572732e72731c0f1000200000005a000000050000006c6962726172792f636f72652f7372632f736c6963652f6d656d6368722e72732c200000120000000c0000000400000018000000190000001a0000002c0a00001200000004000000040000001b0000001c0000001d00000028280a2c290a5d617373657274696f6e206661696c65643a202a63757272203e20313900520410001b000000e6010000050000005b000000cc0f10001b0000001308000016000000cc0f10001b0000000c0800001e0000006c6962726172792f636f72652f7372632f666d742f6d6f642e727330620001021200000001000000010000001e0000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f73797374656d2f7372632f6c696d6974732e72734275696c6465722066696e6973686564207769746820606275696c645f6f725f70616e6963603b205468652070616e69632069732065787065637465642069662072756e74696d65207765696768747320617265206e6f7420636f727265637400fc0f100057000000aa01000016000000543113000000000000000000ffffffff00000000010000000000000082800000000000008a8000000000008000800080000000808b800000000000000100008000000000818000800000008009800000000000808a00000000000000880000000000000009800080000000000a000080000000008b800080000000008b0000000000008089800000000000800380000000000080028000000000008080000000000000800a800000000000000a0000800000008081800080000000808080000000000080010000800000000008800080000000801200000004000000040000001f00000001a8010001605354524f424576312e302e320000cc1110004f000000680000000d0000002f636172676f2d686f6d652f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f6d65726c696e2d322e302e302f7372632f7374726f62652e727300f2121000190000000b1310001600000000000000200000000400000002000000000000000200000000000000030000000100000020000000040000000200000000000000020000000000000003000000cc1110004f000000880000000d000000b41210003e000000cc1110004f0000009100000009000000cc1110004f0000005e00000009000000cc1110004f0000005f00000009000000596f75207573656420746865205420666c61672c207768696368207468697320696d706c656d656e746174696f6e20646f65736e277420737570706f7274596f7520747269656420746f20636f6e74696e7565206f702020627574206368616e67656420666c61677320746f20000000cc1110004f0000007c00000015000000cc1110004f0000007d0000000d0000004661696c656420746f206465636f646520636f6d70616374207533322061743a496e76616c6964526f756e6457726f6e6757696e6e6572436f756e74536e617073686f74556e617661696c61626c654e706f73456c656374696f6e0012000000040000000400000020000000496e76616c6964566f7465496e76616c6964566f746572496e76616c696457696e6e6572496e76616c696453636f726500000000641410000e00000000000000741410000100000000000000000000007c141000010000000000000000000000841410000600000000000000543113000000000000000000000000008c141000010000000000000000000000941410000700000000000000543113000000000000000000000000009c14100001000000000000004e6577417574686f7269746965730000291510000d000000f3141000360000005061757365640000cc14100027000000526573756d656400a4141000280000002043757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e2043757272656e7420617574686f726974792073657420686173206265656e207061757365642e204e657720617574686f726974792073657420686173206265656e206170706c6965642e205c5b617574686f726974795f7365745c5d417574686f726974794c69737400002813130056000000bd0000002e000000000000007415100007000000000000007c1510000300000000000000000000009415100004000000000000004f6666656e636500c248110004000000c64811000e000000a1fb120004000000b41510005500000009161000530000005c16100046000000a21610001d00000020546865726520697320616e206f6666656e6365207265706f72746564206f662074686520676976656e20606b696e64602068617070656e656420617420746865206073657373696f6e5f696e6465786020616e6420286b696e642d7370656369666963292074696d6520736c6f742e2054686973206576656e74206973206e6f74206465706f736974656420666f72206475706c696361746520736c61736865732e206c61737420656c656d656e7420696e64696361746573206f6620746865206f6666656e636520776173206170706c69656420287472756529206f7220717565756564202866616c736529205c5b6b696e642c2074696d65736c6f742c206170706c6965645c5d2e53746f72656452616e6765000000000000f81610000a0000000000000028b111000100000000000000000000000417100002000000000000004e657753657373696f6e000014171000590000006d17100022000000204e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e7420697320746865205c5b73657373696f6e5f696e6465785c5d2c206e6f742074686520626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e74696d737461703054696d657374616d7020696e686572656e742064617461206973206e6f742070726f76696465642e496e76616c69642074696d657374616d7020696e686572656e74206461746120656e636f64696e672e000000004018100010000000000000005018100002000000000000000000000060181000020000000000000000000000701810000e00000000000000543113000000000000000000000000008018100001000000000000004261746368496e746572727570746564cbed120003000000113513000d000000bb1810005600000011191000240000004261746368436f6d706c6574656400008818100033000000204261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e204261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061732077656c6c20617320746865206572726f722e205c5b696e6465782c206572726f725c5d000000481910005a00000067000000120000002f636172676f2d686f6d652f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d322e302e302f7372632f636f6465632e7273436f646563206572726f724572726f720000c41910004c00000076060000240000002f72757374632f653337613133636333353934303034363633373338626431386438313030653664623936363663662f6c6962726172792f616c6c6f632f7372632f7665632f6d6f642e727300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000100000021000000647c1200660000005c0000001f00000056524648617368565246526573756c747672662d696e7672662d6f7574436865636b547856657273696f6e436865636b47656e65736973436865636b4d6f7274616c697479000000081c10005a000000af050000350000002f72757374632f653337613133636333353934303034363633373338626431386438313030653664623936363663662f6c6962726172792f616c6c6f632f7372632f636f6c6c656374696f6e732f62747265652f6d61702e7273627450656e64696e675061796f7574496e76616c6964466565496e76616c696456616c75655265717569726543757261746f72556e657870656374656453746174757300000000000000341e10000e00000000000000441e1000020000000000000000000000741e10000c0000000000000000000000d41e10000e00000000000000e41e1000010000000000000000000000fc1e10000800000000000000000000003c1f10000f000000000000004c1f1000030000000000000000000000941f1000070000000000000000000000cc1f10001000000000000000e41e1000010000000000000000000000dc1f10001200000000000000000000006c2010000e00000000000000e41e10000100000000000000000000007c201000080000000000000000000000bc2010000c00000000000000c8201000020000000000000000000000f82010000a0000000000000000000000482110000c00000000000000e41e1000010000000000000000000000542110000900000000000000000000009c2110000c00000000000000e41e1000010000000000000000000000a82110000a0000000000000000000000f821100014000000000000000c2210000200000000000000000000003c2210000a0000000000000070726f706f73655f626f756e747900000000000048b6120005000000000000004db6120015000000000000002d2b10000b0000000000000042ec120007000000d42910001600000054311300000000006c0e1300340000005431130000000000c0ea110055000000ea291000550000003f2a10001a0000005431130000000000592a10003f000000982a10001a000000b22a10004a000000fc2a100031000000617070726f76655f626f756e74790000000000004623100009000000000000004f231000140000007c291000580000001f0211002b00000054311300000000004a0211002c0000005431130000000000f2eb12000b000000638711000800000036ec12000c00000070726f706f73655f63757261746f7200000000004623100009000000000000004f231000140000000000000075291000070000000000000085fc11002300000000000000e5ca100003000000000000004db6120015000000502910002500000054311300000000004a0211002c0000005431130000000000f2eb12000b000000638711000800000036ec12000c000000756e61737369676e5f63757261746f724c2610002000000054311300000000006c261000480000005431130000000000b42610005a0000000e2710004300000054311300000000005127100059000000aa27100058000000022810004e00000054311300000000005028100058000000a828100059000000012910004f0000005431130000000000f2eb12000b000000638711000800000036ec12000c0000006163636570745f63757261746f720000b625100026000000dc2510004b000000543113000000000027261000250000005431130000000000f2eb12000b000000638711000800000036ec12000c00000061776172645f626f756e7479000000004623100009000000000000004f2310001400000000000000b80411000b0000000000000085fc110023000000e6241000660000005431130000000000b82210004600000054311300000000004c251000230000006f251000470000005431130000000000f2eb12000b000000638711000800000036ec12000c000000636c61696d5f626f756e74793d2410003c0000005431130000000000792410004a0000005431130000000000c3241000230000005431130000000000f2eb12000b000000638711000800000036ec12000c000000636c6f73655f626f756e7479632310004f000000b2231000340000005431130000000000e623100033000000543113000000000019241000240000005431130000000000f2eb12000b000000638711000800000036ec12000c000000657874656e645f626f756e74795f657870697279000000004623100009000000000000004f231000140000000000000006f31200070000000000000042ec1200070000008c2210002c0000005431130000000000b8221000460000005431130000000000fe2210002400000022231000240000005431130000000000f2eb12000b000000638711000800000036ec12000c00000020457874656e6420746865206578706972792074696d65206f6620616e2061637469766520626f756e74792e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265207468652063757261746f72206f66207468697320626f756e74792e202d2060626f756e74795f6964603a20426f756e747920494420746f20657874656e642e202d206072656d61726b603a206164646974696f6e616c20696e666f726d6174696f6e2e626f756e74795f6964436f6d706163743c426f756e7479496e6465783e2043616e63656c20612070726f706f736564206f722061637469766520626f756e74792e20416c6c207468652066756e64732077696c6c2062652073656e7420746f20747265617375727920616e64207468652063757261746f72206465706f7369742077696c6c20626520756e726573657276656420696620706f737369626c652e204f6e6c792060543a3a52656a6563744f726967696e602069732061626c6520746f2063616e63656c206120626f756e74792e202d2060626f756e74795f6964603a20426f756e747920494420746f2063616e63656c2e20436c61696d20746865207061796f75742066726f6d20616e206177617264656420626f756e7479206166746572207061796f75742064656c61792e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265207468652062656e6566696369617279206f66207468697320626f756e74792e202d2060626f756e74795f6964603a20426f756e747920494420746f20636c61696d2e20417761726420626f756e747920746f20612062656e6566696369617279206163636f756e742e205468652062656e65666963696172792077696c6c2062652061626c6520746f20636c61696d207468652066756e647320616674657220612064656c61792e202d2060626f756e74795f6964603a20426f756e747920494420746f2061776172642e202d206062656e6566696369617279603a205468652062656e6566696369617279206163636f756e742077686f6d2077696c6c207265636569766520746865207061796f75742e20416363657074207468652063757261746f7220726f6c6520666f72206120626f756e74792e2041206465706f7369742077696c6c2062652072657365727665642066726f6d2063757261746f7220616e6420726566756e642075706f6e207375636365737366756c207061796f75742e204d6179206f6e6c792062652063616c6c65642066726f6d207468652063757261746f722e20556e61737369676e2063757261746f722066726f6d206120626f756e74792e20546869732066756e6374696f6e2063616e206f6e6c792062652063616c6c656420627920746865206052656a6563744f726967696e602061207369676e6564206f726967696e2e20496620746869732066756e6374696f6e2069732063616c6c656420627920746865206052656a6563744f726967696e602c20776520617373756d652074686174207468652063757261746f72206973206d616c6963696f7573206f7220696e6163746976652e204173206120726573756c742c2077652077696c6c20736c617368207468652063757261746f72207768656e20706f737369626c652e20496620746865206f726967696e206973207468652063757261746f722c2077652074616b6520746869732061732061207369676e20746865792061726520756e61626c6520746f20646f207468656972206a6f6220616e6420746865792077696c6c696e676c7920676976652075702e20576520636f756c6420736c617368207468656d2c2062757420666f72206e6f7720776520616c6c6f77207468656d20746f207265636f766572207468656972206465706f73697420616e64206578697420776974686f75742069737375652e20285765206d61792077616e7420746f206368616e67652074686973206966206974206973206162757365642e292046696e616c6c792c20746865206f726967696e2063616e20626520616e796f6e6520696620616e64206f6e6c79206966207468652063757261746f722069732022696e616374697665222e205468697320616c6c6f777320616e796f6e6520696e2074686520636f6d6d756e69747920746f2063616c6c206f7574207468617420612063757261746f72206973206e6f7420646f696e67207468656972206475652064696c6967656e63652c20616e642077652073686f756c64207069636b2061206e65772063757261746f722e20496e20746869732063617365207468652063757261746f722073686f756c6420616c736f20626520736c61736865642e2041737369676e20612063757261746f7220746f20612066756e64656420626f756e74792e63757261746f7220417070726f7665206120626f756e74792070726f706f73616c2e2041742061206c617465722074696d652c2074686520626f756e74792077696c6c2062652066756e64656420616e64206265636f6d65206163746976652050726f706f73652061206e657720626f756e74792e2060446174614465706f736974506572427974656020666f722065616368206279746520696e2060726561736f6e602e2049742077696c6c20626520756e72657365727665642075706f6e20617070726f76616c2c206f7220736c6173686564207768656e2072656a65637465642e202d206063757261746f72603a205468652063757261746f72206163636f756e742077686f6d2077696c6c206d616e616765207468697320626f756e74792e202d2060666565603a205468652063757261746f72206665652e202d206076616c7565603a2054686520746f74616c207061796d656e7420616d6f756e74206f66207468697320626f756e74792c2063757261746f722066656520696e636c756465642e202d20606465736372697074696f6e603a20546865206465736372697074696f6e206f66207468697320626f756e74792e6465736372697074696f6e00000000982c10000b0000000000000000000000a32c10000b0000000000000000000000000000000000000000000000000000000000000054311300b02c10000000000000000000c02c1000010000000000000001000000000000001dbf1100080000000105000000000000a32c10000b00000000000000c82c1000320000000000000000000000000000000000000054311300fc2c100000000000000000000c2d100001000000000000000000000000000000142d1000120000000105000000000000a32c10000b0000000000000042ec1200070000000000000000000000000000000000000054311300282d10000000000000000000382d100001000000000000000000000000000000402d10000f00000000000000000000004f2d1000100000000000000000000000000000000000000000000000000000000000000054311300602d10000000000000000000702d1000010000000000000001000000426f756e7479436f756e74426f756e7479496e646578000012000000000000000100000022000000f12d100030000000426f756e74793c543a3a4163636f756e7449642c2042616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e000012000000000000000100000023000000d32d10001e000000426f756e74794465736372697074696f6e73000012000000000000000100000023000000b32d100020000000426f756e7479417070726f76616c735665633c426f756e7479496e6465783e0012000000000000000100000024000000782d10003b00000020426f756e747920696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f74207965742066756e6465642e20546865206465736372697074696f6e206f66206561636820626f756e74792e20426f756e7469657320746861742068617665206265656e206d6164652e204e756d626572206f6620626f756e74792070726f706f73616c7320746861742068617665206265656e206d6164652e000000000000000cf01100120000000000000057a912000c0000000000000054311300ac2f10000000000000000000bc2f1000010000000000000000000000c42f1000110000000000000057a912000c0000000000000054311300d82f10000000000000000000e82f1000010000000000000000000000f02f10001800000000000000a9f912000e000000000000005431130008301000000000000000000018301000010000000000000000000000203010001200000000000000a9f912000e0000000000000054311300343010000000000000000000443010000100000000000000000000004c3010001400000000000000fc0711000700000000000000543113006030100000000000000000007030100001000000000000000000000078301000120000000000000057a912000c00000000000000543113008c30100000000000000000009c30100001000000000000000000000038f011001300000000000000cbed1200030000000000000054311300a430100000000000000000005cf01100010000000000000012000000000000000100000025000000d63110003f000000426f756e74794465706f73697442617365000000120000000000000001000000260000009c3110003a000000426f756e74794465706f7369745061796f757444656c6179120000000000000001000000270000004631100056000000426f756e7479557064617465506572696f640000120000000000000001000000280000002b3110001b000000426f756e747943757261746f724465706f73697412000000000000000100000029000000d03010005b000000426f756e747956616c75654d696e696d756d00001200000000000000010000002a000000b43010001c0000001200000000000000010000002b000000204d696e696d756d2076616c756520666f72206120626f756e74792e2050657263656e74616765206f66207468652063757261746f722066656520746861742077696c6c20626520726573657276656420757066726f6e74206173206465706f73697420666f7220626f756e74792063757261746f722e20426f756e7479206475726174696f6e20696e20626c6f636b732e205468652064656c617920706572696f6420666f72207768696368206120626f756e74792062656e6566696369617279206e65656420746f2077616974206265666f726520636c61696d20746865207061796f75742e2054686520616d6f756e742068656c64206f6e206465706f73697420666f7220706c6163696e67206120626f756e74792070726f706f73616c2e2054686520616d6f756e742068656c64206f6e206465706f7369742070657220627974652077697468696e20626f756e7479206465736372697074696f6e2e000000000000004c3310000e000000000000005c331000010000000000000000000000643310000100000000000000000000006c3310000e000000000000007c3310000200000000000000000000008c3310000100000000000000000000009433100012000000000000005c331000010000000000000000000000a8331000010000000000000000000000b03310000d00000000000000c0331000020000000000000000000000d0331000010000000000000000000000d83310000d00000000000000e833100003000000000000000000000000341000010000000000000000000000083410000e000000000000005c33100001000000000000000000000018341000010000000000000000000000203410000e000000000000005c331000010000000000000000000000303410000100000000000000426f756e747950726f706f7365640000a32c10000b0000007d3510001f000000426f756e747952656a65637465640000a32c10000b000000d5d11200070000003935100044000000426f756e7479426563616d6541637469766500000035100039000000426f756e747941776172646564000000a32c10000b00000079e5120009000000c33410003d000000426f756e7479436c61696d6564000000a32c10000b000000d5d112000700000079e51200090000008034100043000000426f756e747943616e63656c656400005f34100021000000426f756e7479457874656e64656400003834100027000000204120626f756e74792065787069727920697320657874656e6465642e205c5b696e6465785c5d204120626f756e74792069732063616e63656c6c65642e205c5b696e6465785c5d204120626f756e747920697320636c61696d65642062792062656e65666963696172792e205c5b696e6465782c207061796f75742c2062656e65666963696172795c5d204120626f756e7479206973206177617264656420746f20612062656e65666963696172792e205c5b696e6465782c2062656e65666963696172795c5d204120626f756e74792070726f706f73616c2069732066756e64656420616e6420626563616d65206163746976652e205c5b696e6465785c5d204120626f756e74792070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e205c5b696e6465782c20626f6e645c5d204e657720626f756e74792070726f706f73616c2e205c5b696e6465785c5d1200000004000000040000002c0000002d0000002e00000012000000000000000100000021000000617373657274696f6e206661696c65643a2073656c662e6361702829203d3d206f6c645f636170202a203200003610005e0000002d0800000d0000002f72757374632f653337613133636333353934303034363633373338626431386438313030653664623936363663662f6c6962726172792f616c6c6f632f7372632f636f6c6c656374696f6e732f7665635f64657175652f6d6f642e72730000c012130056000000030100000100000000000000d0ff10001c000000000000001c1711000100000000000000000000004ab510000c00000000000000241711000100000000000000000000001eda11000c000000000000003c281200010000000000000000000000951c100010000000000000006c371000010000000000000000000000871c10000e00000000000000743710000100000000000000000000007b1c10000c000000000000007c371000010000000000000000000000711c10000a0000000000000084371000010000000000000000000000641c10000d000000000000008c3710000200000000000000000000002ada110009000000000000009c371000010000000000000093381000210000007b3810001800000065381000160000005138100014000000f63710001c000000123810003f000000a4371000520000002054686520626f756e746965732063616e6e6f7420626520636c61696d65642f636c6f73656420626563617573652069742773207374696c6c20696e2074686520636f756e74646f776e20706572696f642e204120626f756e7479207061796f75742069732070656e64696e672e20546f2063616e63656c2074686520626f756e74792c20796f75206d75737420756e61737369676e20616e6420736c617368207468652063757261746f722e20496e76616c696420626f756e7479206665652e20496e76616c696420626f756e74792076616c75652e205265717569726520626f756e74792063757261746f722e2054686520626f756e74792073746174757320697320756e65787065637465642ef838100066000000200000000e000000617373657274696f6e206661696c65643a206d6964203c3d2073656c662e6c656e282900483513004d000000ff050000090000002f72757374632f653337613133636333353934303034363633373338626431386438313030653664623936363663662f6c6962726172792f616c6c6f632f7372632f636f6c6c656374696f6e732f7665635f64657175652f72696e675f736c696365732e727300002f00000060000000080000003000000031000000320000003300000034000000350000003600000014211300600000006f010000010000004c06130053000000a00000000f0000006d6f646c70792f70726f78795f5f5f5f00000000000000000000000000000000000000000000000000000000000000000000000007000000e020130023000000d8000000010000006d6f76655f636c61696d617474657374636c61696d5f6174746573746d696e745f636c61696d000000000000c03a10001800000000000000d83a1000010000000000000000000000e03a10001000000000000000f03a1000010000000000000000000000f83a10001000000000000000083b1000010000000000000000000000103b10000c000000000000001c3b10000200000000000000000000002c3b100010000000000000003c3b1000010000000000000000000000443b10001300000000000000583b10000100000000000000496e76616c6964457468657265756d5369676e6174757265523c10001c0000005369676e65724861734e6f436c61696d333c10001f00000053656e6465724861734e6f436c61696d0f3c100024000000506f74556e646572666c6f77af3b100059000000083c100007000000496e76616c696453746174656d656e748a3b10002500000056657374656442616c616e636545786973747300603b10002a00000020546865206163636f756e7420616c7265616479206861732061207665737465642062616c616e63652e2041206e65656465642073746174656d656e7420776173206e6f7420696e636c756465642e2054686572652773206e6f7420656e6f75676820696e2074686520706f7420746f20706179206f757420736f6d6520756e76657374656420616d6f756e742e2047656e6572616c6c7920696d706c6965732061206c6f676963206572726f722e204163636f756e742049442073656e64696e6720747820686173206e6f20636c61696d2e20457468657265756d206164647265737320686173206e6f20636c61696d2e20496e76616c696420457468657265756d207369676e61747572652e636c61696d7319457468657265756d205369676e6564204d6573736167653a0a50687261676d656e456c656374696f6e43616e6469646174657352756e6e65727355700000001421130060000000990300002c00000050726576616c696461746541747465737473507265636c61696d735175657565644b657973546f74616c4e6f206f746865722076657374696e67207363686564756c65206578697374732c20617320636865636b65642061626f76653b20716564000000120000000c0000000400000037000000e020130023000000bf01000012000000556e616e6e6f756e6365644475706c6963617465556e70726f787961626c654e6f7450726f7879546f6f4d616e794e6f53656c6650726f787900000000000000083e10000d00000000000000183e1000010000000000000000000000203e1000010000000000000000000000283e10001000000000000000383e1000040000000000000000000000583e1000020000000000000000000000683e10000900000000000000743e10000300000000000000000000008c3e1000010000000000000050726f78794578656375746564000000637a12000e000000863f10003b000000416e6f6e796d6f75734372656174656479e512000900000079e51200090000007d3f100009000000a50e130003000000e83e10003b000000233f10005a000000416e6e6f756e63656400000079e512000900000079e512000900000082e5120004000000943e10005400000020416e20616e6e6f756e63656d656e742077617320706c6163656420746f206d616b6520612063616c6c20696e20746865206675747572652e205c5b7265616c2c2070726f78792c2063616c6c5f686173685c5d20416e6f6e796d6f7573206163636f756e7420686173206265656e2063726561746564206279206e65772070726f7879207769746820676976656e20646973616d626967756174696f6e20696e64657820616e642070726f787920747970652e205c5b616e6f6e796d6f75732c2077686f2c2070726f78795f747970652c20646973616d626967756174696f6e5f696e6465785c5d50726f78795479706520412070726f78792077617320657865637574656420636f72726563746c792c20776974682074686520676976656e205c5b726573756c745c5d2e000000000000007c411000050000000000000084411000030000000000000000000000cc4110000f000000000000000000000044421000090000000000000050421000030000000000000000000000984210000d0000000000000000000000004310000c00000000000000504210000300000000000000000000000c4310000b0000000000000000000000644310000e0000000000000054311300000000000000000000000000744310000a0000000000000000000000c44310000900000000000000d043100003000000000000000000000018441000170000000000000000000000d04410000e00000000000000e044100005000000000000000000000058451000140000000000000000000000f845100008000000000000000046100002000000000000000000000030461000150000000000000000000000d8461000130000000000000000461000020000000000000000000000ec4610001000000000000000000000006c471000130000000000000080471000020000000000000000000000b0471000100000000000000000000000304810000f0000000000000040481000040000000000000000000000a0481000110000000000000070726f787900000000000000ef4a10000400000000000000e3f812000c00000000000000f34a10001000000000000000034b10001400000000000000a80e13000400000000000000ac0e130018000000b3581000540000007c4910000d0000005431130000000000894910002b00000054311300000000006c0e1300340000005431130000000000355f12000c000000b449100044000000f849100059000000514a1000350000005431130000000000f2eb12000b000000535210004000000036ec12000c0000006164645f70726f787900000000000000f48c12000800000000000000e3f812000c000000000000009a5210000a00000000000000a45210000c000000000000001fae12000500000000000000a9f912000e000000dc5710005200000054311300000000006c0e1300340000005431130000000000355f12000c0000002e58100045000000735810004000000007551000540000005b551000060000005431130000000000f2eb12000b000000535210004000000036ec12000c00000072656d6f76655f70726f7879165710002b00000054311300000000006c0e1300340000005431130000000000355f12000c000000415710004a0000008b571000510000005431130000000000f2eb12000b000000535210004000000036ec12000c00000072656d6f76655f70726f7869657300003b5610002e00000054311300000000006c0e13003400000054311300000000006956100056000000bf561000570000005431130000000000f2eb12000b000000535210004000000036ec12000c000000616e6f6e796d6f7573000000000000009a5210000a00000000000000a45210000c000000000000001fae12000500000000000000a9f912000e00000000000000a00e13000500000000000000a50e130003000000d65210004f00000025531000400000005431130000000000655310001c00000054311300000000008153100055000000d6531000540000002a5410001f00000049541000550000009e54100058000000f65410001100000007551000540000005b5510000600000054311300000000006155100055000000b6551000270000005431130000000000dd5510003a0000005431130000000000f2eb12000b000000535210004000000036ec12000c00000017561000240000006b696c6c5f616e6f6e796d6f7573000000000000935210000700000000000000e3f812000c000000000000009a5210000a00000000000000a45210000c00000000000000a00e13000500000000000000a50e13000300000000000000b05210000600000000000000b65210001700000000000000cd5210000900000000000000d2a012000c000000264f10002e0000005431130000000000544f100053000000a74f10000e0000005431130000000000b54f1000570000000c5010002b000000543113000000000037501000540000008b50100054000000df50100041000000205110005000000070511000530000005431130000000000c351100053000000165210003d0000005431130000000000f2eb12000b000000535210004000000036ec12000c000000616e6e6f756e636500000000ef4a10000400000000000000e3f812000c000000000000008cf010000900000000000000554c10000d000000294d10004200000054311300000000006b4d100058000000c34d10004a00000054311300000000000d4e1000450000005431130000000000524e100043000000954e1000470000005431130000000000dc4e10004a0000005431130000000000355f12000c000000b449100044000000e34c1000460000005431130000000000f2eb12000b000000864a1000190000009f4a100027000000c64a10002900000036ec12000c00000072656d6f76655f616e6e6f756e63656d656e7400624c10001d00000054311300000000007f4c100057000000d64c10000d00000054311300000000006c0e1300340000005431130000000000355f12000c000000b449100044000000e34c1000460000005431130000000000f2eb12000b000000864a1000190000009f4a100027000000c64a10002900000036ec12000c00000072656a6563745f616e6e6f756e63656d656e740000000000f48c12000800000000000000e3f812000c000000000000008cf010000900000000000000554c10000d000000174b10002d0000005431130000000000444b1000590000009d4b10004a00000054311300000000006c0e1300340000005431130000000000355f12000c000000e74b10003e000000254c1000300000005431130000000000f2eb12000b000000864a1000190000009f4a100027000000c64a10002900000036ec12000c00000070726f78795f616e6e6f756e6365640000000000f48c12000800000000000000e3f812000c00000000000000ef4a10000400000000000000e3f812000c00000000000000f34a10001000000000000000034b10001400000000000000a80e13000400000000000000ac0e13001800000028491000540000007c4910000d0000005431130000000000894910002b00000054311300000000006c0e1300340000005431130000000000355f12000c000000b449100044000000f849100059000000514a1000350000005431130000000000f2eb12000b000000864a1000190000009f4a100027000000c64a10002900000036ec12000c0000002044697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f72697a656420666f72207468726f75676820606164645f70726f7879602e2052656d6f76657320616e7920636f72726573706f6e64696e6720616e6e6f756e63656d656e742873292e202d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e202d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2e202d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e2057656967687420697320612066756e6374696f6e206f663a202d20413a20746865206e756d626572206f6620616e6e6f756e63656d656e7473206d6164652e202d20503a20746865206e756d626572206f662070726f78696573207468652075736572206861732e7265616c666f7263655f70726f78795f747970654f7074696f6e3c543a3a50726f7879547970653e2052656d6f76652074686520676976656e20616e6e6f756e63656d656e74206f6620612064656c65676174652e204d61792062652063616c6c6564206279206120746172676574202870726f7869656429206163636f756e7420746f2072656d6f766520612063616c6c2074686174206f6e65206f662074686569722064656c65676174657320286064656c656761746560292068617320616e6e6f756e63656420746865792077616e7420746f20657865637574652e20546865206465706f7369742069732072657475726e65642e202d206064656c6567617465603a20546865206163636f756e7420746861742070726576696f75736c7920616e6e6f756e636564207468652063616c6c2e202d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652e43616c6c486173684f663c543e2052656d6f7665206120676976656e20616e6e6f756e63656d656e742e204d61792062652063616c6c656420627920612070726f7879206163636f756e7420746f2072656d6f766520612063616c6c20746865792070726576696f75736c7920616e6e6f756e63656420616e642072657475726e20746865206465706f7369742e202d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e205075626c697368207468652068617368206f6620612070726f78792d63616c6c20746861742077696c6c206265206d61646520696e20746865206675747572652e2054686973206d7573742062652063616c6c656420736f6d65206e756d626572206f6620626c6f636b73206265666f72652074686520636f72726573706f6e64696e67206070726f78796020697320617474656d70746564206966207468652064656c6179206173736f6369617465642077697468207468652070726f78792072656c6174696f6e736869702069732067726561746572207468616e207a65726f2e204e6f206d6f7265207468616e20604d617850656e64696e676020616e6e6f756e63656d656e7473206d6179206265206d61646520617420616e79206f6e652074696d652e20546869732077696c6c2074616b652061206465706f736974206f662060416e6e6f756e63656d656e744465706f736974466163746f72602061732077656c6c2061732060416e6e6f756e63656d656e744465706f736974426173656020696620746865726520617265206e6f206f746865722070656e64696e6720616e6e6f756e63656d656e74732e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420612070726f7879206f6620607265616c602e2052656d6f76657320612070726576696f75736c7920737061776e656420616e6f6e796d6f75732070726f78792e205741524e494e473a202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a20416e792066756e64732068656c6420696e2069742077696c6c20626520696e61636365737369626c652e205265717569726573206120605369676e656460206f726967696e2c20616e64207468652073656e646572206163636f756e74206d7573742068617665206265656e206372656174656420627920612063616c6c20746f2060616e6f6e796d6f757360207769746820636f72726573706f6e64696e6720706172616d65746572732e202d2060737061776e6572603a20546865206163636f756e742074686174206f726967696e616c6c792063616c6c65642060616e6f6e796d6f75736020746f206372656174652074686973206163636f756e742e202d2060696e646578603a2054686520646973616d626967756174696f6e20696e646578206f726967696e616c6c792070617373656420746f2060616e6f6e796d6f7573602e2050726f6261626c79206030602e202d206070726f78795f74797065603a205468652070726f78792074797065206f726967696e616c6c792070617373656420746f2060616e6f6e796d6f7573602e202d2060686569676874603a2054686520686569676874206f662074686520636861696e207768656e207468652063616c6c20746f2060616e6f6e796d6f757360207761732070726f6365737365642e202d20606578745f696e646578603a205468652065787472696e73696320696e64657820696e207768696368207468652063616c6c20746f2060616e6f6e796d6f757360207761732070726f6365737365642e204661696c73207769746820604e6f5065726d697373696f6e6020696e2063617365207468652063616c6c6572206973206e6f7420612070726576696f75736c79206372656174656420616e6f6e796d6f7573206163636f756e742077686f73652060616e6f6e796d6f7573602063616c6c2068617320636f72726573706f6e64696e6720706172616d65746572732e2057656967687420697320612066756e6374696f6e206f6620746865206e756d626572206f662070726f7869657320746865207573657220686173202850292e737061776e657270726f78795f74797065543a3a50726f787954797065686569676874436f6d706163743c543a3a426c6f636b4e756d6265723e6578745f696e64657820537061776e2061206672657368206e6577206163636f756e7420746861742069732067756172616e7465656420746f206265206f746865727769736520696e61636365737369626c652c20616e6420696e697469616c697a65206974207769746820612070726f7879206f66206070726f78795f747970656020666f7220606f726967696e602073656e6465722e205265717569726573206120605369676e656460206f726967696e2e202d206070726f78795f74797065603a205468652074797065206f66207468652070726f78792074686174207468652073656e6465722077696c6c2062652072656769737465726564206173206f76657220746865206e6577206163636f756e742e20546869732077696c6c20616c6d6f737420616c7761797320626520746865206d6f7374207065726d697373697665206050726f7879547970656020706f737369626c6520746f20616c6c6f7720666f72206d6178696d756d20666c65786962696c6974792e202d2060696e646578603a204120646973616d626967756174696f6e20696e6465782c20696e206361736520746869732069732063616c6c6564206d756c7469706c652074696d657320696e207468652073616d65207472616e73616374696f6e2028652e672e207769746820607574696c6974793a3a626174636860292e20556e6c65737320796f75277265207573696e67206062617463686020796f752070726f6261626c79206a7573742077616e7420746f20757365206030602e202d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265207a65726f2e204661696c73207769746820604475706c69636174656020696620746869732068617320616c7265616479206265656e2063616c6c656420696e2074686973207472616e73616374696f6e2c2066726f6d207468652073616d652073656e6465722c2077697468207468652073616d6520706172616d65746572732e204661696c732069662074686572652061726520696e73756666696369656e742066756e647320746f2070617920666f72206465706f7369742e20544f444f3a204d69676874206265206f76657220636f756e74696e672031207265616420556e726567697374657220616c6c2070726f7879206163636f756e747320666f72207468652073656e6465722e205741524e494e473a2054686973206d61792062652063616c6c6564206f6e206163636f756e747320637265617465642062792060616e6f6e796d6f7573602c20686f776576657220696620646f6e652c207468656e2074686520756e726573657276656420666565732077696c6c20626520696e61636365737369626c652e202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a20556e726567697374657220612070726f7879206163636f756e7420666f72207468652073656e6465722e202d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f2072656d6f766520617320612070726f78792e202d206070726f78795f74797065603a20546865207065726d697373696f6e732063757272656e746c7920656e61626c656420666f72207468652072656d6f7665642070726f7879206163636f756e742e20526567697374657220612070726f7879206163636f756e7420666f72207468652073656e64657220746861742069732061626c6520746f206d616b652063616c6c73206f6e2069747320626568616c662e202d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f206d616b6520612070726f78792e202d206070726f78795f74797065603a20546865207065726d697373696f6e7320616c6c6f77656420666f7220746869732070726f7879206163636f756e742e2044697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f726973656420666f72207468726f7567680000000000a82d1200070000000105000000000000e3f812000c00000000000000b85910005100000000000000000000000000000000000000543113000c5a100000000000000000001c5a100002000000000000000100000000000000af2d12000d0000000105000000000000e3f812000c000000000000002c5a10004f00000000000000000000000000000000000000543113007c5a100000000000000000008c5a1000010000000000000001000000285665633c50726f7879446566696e6974696f6e3c543a3a4163636f756e7449642c20543a3a50726f7879547970652c20543a3a426c6f636b4e756d6265723e3e2c0a2042616c616e63654f663c543e2900000012000000000000000100000038000000bf5a100051000000105b100048000000285665633c416e6e6f756e63656d656e743c543a3a4163636f756e7449642c2043616c6c486173684f663c543e2c20543a3a426c6f636b4e756d6265723e3e2c0a2042616c616e63654f663c543e290012000000000000000100000039000000945a10002b0000002054686520616e6e6f756e63656d656e7473206d616465206279207468652070726f787920286b6579292e2054686520736574206f66206163636f756e742070726f786965732e204d61707320746865206163636f756e74207768696368206861732064656c65676174656420746f20746865206163636f756e747320776869636820617265206265696e672064656c65676174656420746f2c20746f67657468657220776974682074686520616d6f756e742068656c64206f6e206465706f7369742e00000000a85c1000100000000000000057a912000c0000000000000054311300b85c10000000000000000000c85c1000040000000000000000000000e85c1000120000000000000057a912000c0000000000000054311300fc5c100000000000000000000c5d1000050000000000000000000000345d10000a00000000000000a50e1300030000000000000054311300405d10000000000000000000505d1000010000000000000000000000585d10000a00000000000000cbed1200030000000000000054311300645d10000000000000000000745d10000100000000000000000000007c5d1000170000000000000057a912000c0000000000000054311300945d10000000000000000000a45d1000030000000000000000000000bc5d1000190000000000000057a912000c0000000000000054311300d85d10000000000000000000e85d1000040000000000000050726f78794465706f736974426173651200000000000000010000003a000000fa6010004400000054311300000000003e611000400000007e6110004900000050726f78794465706f736974466163746f7200001200000000000000010000003b000000e95f10002f0000005431130000000000186010005a0000007260100058000000ca601000300000004d617850726f7869657300001200000000000000010000003c000000ad5f10003c0000004d617850656e64696e6700001200000000000000010000003d0000005c5f100051000000416e6e6f756e63656d656e744465706f73697442617365001200000000000000010000003a000000b65e10004c0000005431130000000000025f10005a000000416e6e6f756e63656d656e744465706f736974466163746f720000001200000000000000010000003e000000085e10003500000054311300000000003d5e100056000000935e1000230000002054686520616d6f756e74206f662063757272656e6379206e65656465642070657220616e6e6f756e63656d656e74206d6164652e20546869732069732068656c6420666f7220616464696e6720616e20604163636f756e744964602c2060486173686020616e642060426c6f636b4e756d6265726020287479706963616c6c792036382062797465732920696e746f2061207072652d6578697374696e672073746f726167652076616c75652e20546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720616e20616e6e6f756e63656d656e742e20546869732069732068656c64207768656e2061206e65772073746f72616765206974656d20686f6c64696e672061206042616c616e636560206973206372656174656420287479706963616c6c79203136206279746573292e20546865206d6178696d756d20616d6f756e74206f662074696d652d64656c6179656420616e6e6f756e63656d656e747320746861742061726520616c6c6f77656420746f2062652070656e64696e672e20546865206d6178696d756d20616d6f756e74206f662070726f7869657320616c6c6f77656420666f7220612073696e676c65206163636f756e742e2054686520616d6f756e74206f662063757272656e6379206e6565646564207065722070726f78792061646465642e20546869732069732068656c6420666f7220616464696e6720333220627974657320706c757320616e20696e7374616e6365206f66206050726f78795479706560206d6f726520696e746f2061207072652d6578697374696e672073746f726167652076616c75652e20546875732c207768656e20636f6e6669677572696e67206050726f78794465706f736974466163746f7260206f6e652073686f756c642074616b6520696e746f206163636f756e7420603332202b2070726f78795f747970652e656e636f646528292e6c656e282960206279746573206f6620646174612e20546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720612070726f78792e20546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a65206973206073697a656f662842616c616e6365296020627974657320616e642077686f7365206b65792073697a65206973206073697a656f66284163636f756e74496429602062797465732e4e6f4b6579734475706c6963617465644b65794e6f4173736f63696174656456616c696461746f724964496e76616c696450726f6f664e6f4163636f756e7400000000000060621000080000000000000068621000020000000000000000000000986210000e0000000000000000000000086310000a0000000000000054311300000000000000000000000000146310000c000000000000007365745f6b657973000000007aee1200040000000000000042661000070000000000000049661000050000000000000042ec120007000000186510003a0000005265100048000000a7631000310000005431130000000000d8631000350000005431130000000000f2eb12000b000000c9e91100150000003a641000560000009a6510003c000000d665100029000000ff65100021000000206610002200000036ec12000c00000070757267655f6b65797300007463100033000000a7631000310000005431130000000000d8631000350000005431130000000000f2eb12000b0000000d6410002d0000003a64100056000000906410003c000000cc64100029000000f56410002300000036ec12000c0000002052656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e205468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e20546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e202d20436f6d706c65786974793a20604f2831296020696e206e756d626572206f66206b65792074797065732e20202041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f662060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642e202d20446252656164733a2060543a3a56616c696461746f7249644f66602c20604e6578744b657973602c20606f726967696e206163636f756e7460202d2044625772697465733a20604e6578744b657973602c20606f726967696e206163636f756e7460202d20446257726974657320706572206b65792069643a20604b65794f776e646572602053657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e20416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722e202d20446252656164733a20606f726967696e206163636f756e74602c2060543a3a56616c696461746f7249644f66602c20604e6578744b65797360202d2044625772697465733a20606f726967696e206163636f756e74602c20604e6578744b65797360202d204462526561647320706572206b65792069643a20604b65794f776e657260202d20446257726974657320706572206b65792069643a20604b65794f776e657260543a3a4b65797370726f6f66000000000000f04e11000a0000000000000000000000b8681000130000000000000000000000000000000000000000000000000000000000000054311300cc6810000000000000000000dc68100001000000000000000100000000000000e46810000c0000000000000000000000a03712000c0000000000000000000000000000000000000000000000000000000000000054311300f068100000000000000000000069100001000000000000000100000000000000086910000d0000000000000000000000a1fb12000400000000000000000000000000000000000000000000000000000000000000543113001869100000000000000000002869100002000000000000000100000000000000df3c10000a0000000000000000000000386910001e0000000000000000000000000000000000000000000000000000000000000054311300586910000000000000000000686910000200000000000000010000000000000078691000120000000000000000000000e47311000800000000000000000000000000000000000000000000000000000000000000543113008c69100000000000000000009c69100003000000000000000100000000000000b4691000080000000105000000000000bc6910000e0000000000000042661000070000000000000000000000000000000000000054311300cc6910000000000000000000dc69100001000000000000000000000000000000e4691000080000000105000000000000ec6910001400000000000000bc6910000e0000000000000000000000000000000000000054311300006a10000000000000000000106a10000100000000000000000000005665633c543a3a56616c696461746f7249643e001200000000000000010000003f0000000a6c10001f00000043757272656e74496e64657812000000000000000100000022000000ec6b10001e0000005175657565644368616e67656400000012000000000000000100000023000000756b10004e000000c36b1000290000005665633c28543a3a56616c696461746f7249642c20543a3a4b657973293e000012000000000000000100000040000000ee6a10004f0000003d6b10003800000044697361626c656456616c696461746f7273000012000000000000000100000024000000816a1000200000005431130000000000a16a10004d0000004e6578744b657973543a3a56616c696461746f7249640000120000000000000001000000230000005a6a1000270000004b65794f776e6572284b65795479706549642c205665633c75383e2912000000000000000100000023000000186a10004200000020546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e20496e6469636573206f662064697361626c65642076616c696461746f72732e205468652073657420697320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e732061206e657720736574206f66206964656e7469746965732e2054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b6579732077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e20547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f727320686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e2043757272656e7420696e646578206f66207468652073657373696f6e2e205468652063757272656e7420736574206f662076616c696461746f72732e0000000000000078a710000500000000000000086d1000020000000000000000000000386d10001800000000000000000000000c3a10000a00000000000000f86d1000040000000000000000000000586e10000f0000000000000000000000003a10000c00000000000000d06e1000030000000000000000000000186f10001a0000000000000000000000fa3910000600000000000000e86f100001000000000000000000000000701000110000000000000000000000f03910000a0000000000000088701000030000000000000000000000543113000000000000000000000000005b0c12000400000000000000e3f812000c00000000000000b07510001200000000000000c27510000e000000477710002300000054311300000000006073100032000000543113000000000088711000150000006a77100042000000dd731000200000005431130000000000fd7310001b000000ac771000260000005431130000000000d27710002a0000005431130000000000355f12000c000000cd7410003700000004751000440000004875100028000000543113000000000080721000090000008972100040000000fc77100039000000543113000000000006731000170000008d8511000a00000000000000791b13000300000000000000d37010000f0000000000000048b61200050000000000000057a912000c00000000000000ee7610001000000000000000fe76100034000000000000001d73100009000000000000003277100015000000d075100022000000543113000000000075fa1100320000005431130000000000355f12000c000000f27510003d0000002f761000340000006376100043000000543113000000000080721000090000008972100040000000a676100048000000543113000000000006731000170000008d8511000a000000000000005b0c12000400000000000000e3f812000c00000000000000b07510001200000000000000c27510000e000000000000001d731000090000000000000042ec120007000000267310003a0000005431130000000000607310003200000054311300000000008871100015000000927310004b000000dd731000200000005431130000000000fd7310001b0000001874100031000000543113000000000049741000530000009c741000310000005431130000000000355f12000c000000cd7410003700000004751000440000004875100028000000267210005a0000005431130000000000807210000900000089721000400000007075100040000000543113000000000006731000170000008d8511000a000000000000001d731000090000000000000042ec120007000000f07010003e00000054311300000000002e7110005a000000543113000000000088711000150000009d7110004b000000e87110003e0000005431130000000000355f12000c000000267210005a000000543113000000000080721000090000008972100040000000c97210003d000000543113000000000006731000170000008d8511000a00000000000000d07010000300000000000000d37010000f00000000000000871913000300000000000000d37010000f00000000000000e27010000e000000000000002c701200140000006f6c64457468657265756d416464726573736d617962655f707265636c61696d2041747465737420746f20612073746174656d656e742c206e656564656420746f2066696e616c697a652074686520636c61696d732070726f636573732e205741524e494e473a20496e73656375726520756e6c65737320796f757220636861696e20696e636c75646573206050726576616c69646174654174746573747360206173206120605369676e6564457874656e73696f6e602e20556e7369676e65642056616c69646174696f6e3a20412063616c6c20746f20617474657374206973206465656d65642076616c6964206966207468652073656e6465722068617320612060507265636c61696d60207265676973746572656420616e642070726f76696465732061206073746174656d656e746020776869636820697320657870656374656420666f7220746865206163636f756e742e202d206073746174656d656e74603a20546865206964656e74697479206f66207468652073746174656d656e74207768696368206973206265696e6720617474657374656420746f20696e20746865207369676e61747572652e203c7765696768743e2054686520776569676874206f6620746869732063616c6c20697320696e76617269616e74206f7665722074686520696e70757420706172616d65746572732e2057656967687420696e636c75646573206c6f67696320746f20646f207072652d76616c69646174696f6e206f6e2060617474657374602063616c6c2e20546f74616c20436f6d706c65786974793a204f28312973746174656d656e74204d616b65206120636c61696d20746f20636f6c6c65637420796f757220444f5473206279207369676e696e6720612073746174656d656e742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f4e6f6e655f2e20412063616c6c20746f2060636c61696d5f61747465737460206973206465656d65642076616c696420696620746865207369676e61747572652070726f7669646564206d61746368657320746865206578706563746564207369676e6564206d657373616765206f663a203e20457468657265756d205369676e6564204d6573736167653a203e2028636f6e666967757265642070726566697820737472696e67292861646472657373292873746174656d656e742920616e6420606164647265737360206d6174636865732074686520606465737460206163636f756e743b20746865206073746174656d656e7460206d757374206d617463682074686174207768696368206973206578706563746564206163636f7264696e6720746f20796f757220707572636861736520617272616e67656d656e742e202d206064657374603a205468652064657374696e6174696f6e206163636f756e7420746f207061796f75742074686520636c61696d2e202d2060657468657265756d5f7369676e6174757265603a20546865207369676e6174757265206f6620616e20657468657265756d207369676e6564206d657373616765202020206d61746368696e672074686520666f726d6174206465736372696265642061626f76652e2057656967687420696e636c75646573206c6f67696320746f2076616c696461746520756e7369676e65642060636c61696d5f617474657374602063616c6c2e657468657265756d5f7369676e617475726545636473615369676e6174757265204d696e742061206e657720636c61696d20746f20636f6c6c65637420444f54732e202d206077686f603a2054686520457468657265756d206164647265737320616c6c6f77656420746f20636f6c6c656374207468697320636c61696d2e202d206076616c7565603a20546865206e756d626572206f6620444f547320746861742077696c6c20626520636c61696d65642e202d206076657374696e675f7363686564756c65603a20416e206f7074696f6e616c2076657374696e67207363686564756c6520666f7220746865736520444f54732e20576520617373756d6520776f7273742063617365207468617420626f74682076657374696e6720616e642073746174656d656e74206973206265696e6720696e7365727465642e76657374696e675f7363686564756c654f7074696f6e3c2842616c616e63654f663c543e2c2042616c616e63654f663c543e2c20543a3a426c6f636b4e756d626572293e4f7074696f6e3c53746174656d656e744b696e643e204d616b65206120636c61696d20746f20636f6c6c65637420796f757220444f54732e20412063616c6c20746f20636c61696d206973206465656d65642076616c696420696620746865207369676e61747572652070726f7669646564206d617463686573203e2028636f6e666967757265642070726566697820737472696e672928616464726573732920616e6420606164647265737360206d6174636865732074686520606465737460206163636f756e742e2057656967687420696e636c75646573206c6f67696320746f2076616c696461746520756e7369676e65642060636c61696d602063616c6c2e00000000000000b6281300060000000106000000000000d37010000f0000000000000057a912000c0000000000000000000000000000000000000054311300f079100000000000000000005431130000000000000000000000000000000000e93c100005000000000000000000000057a912000c0000000000000000000000000000000000000000000000000000000000000054311300007a100000000000000000005431130000000000000000000100000000000000bc2d1200070000000106000000000000d37010000f00000000000000107a10002c00000000000000000000000000000000000000543113003c7a100000000000000000004c7a100004000000000000000000000000000000bc281300070000000106000000000000d37010000f000000000000006c7a10000d00000000000000000000000000000000000000543113007c7a100000000000000000008c7a100001000000000000000000000000000000d63c1000090000000106000000000000e3f812000c00000000000000d37010000f0000000000000000000000000000000000000054311300947a10000000000000000000a47a100001000000000000000000000012000000000000000100000023000000120000000000000001000000410000002842616c616e63654f663c543e2c2042616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265722912000000000000000100000023000000277b10001e000000457b100043000000887b100039000000c17b10003300000053746174656d656e744b696e6400000012000000000000000100000023000000f77a10003000000012000000000000000100000023000000ac7a10004b000000205072652d636c61696d656420457468657265756d206163636f756e74732c20627920746865204163636f756e74204944207468617420746865792061726520636c61696d656420746f2e205468652073746174656d656e74206b696e642074686174206d757374206265207369676e65642c20696620616e792e2056657374696e67207363686564756c6520666f72206120636c61696d2e2046697273742062616c616e63652069732074686520746f74616c20616d6f756e7420746861742073686f756c642062652068656c6420666f722076657374696e672e205365636f6e642062616c616e636520697320686f77206d7563682073686f756c6420626520756e6c6f636b65642070657220626c6f636b2e2054686520626c6f636b206e756d626572206973207768656e207468652076657374696e672073686f756c642073746172742e000000002c7c10000600000000000000327c1000050000000000000054311300387c10000000000000000000487c10000100000000000000507265666978265b75385d0012000000000000000100000042000000507c10004500000020546865205072656669782074686174206973207573656420696e207369676e656420457468657265756d206d6573736167657320666f722074686973206e6574776f726b00000000000000c47c10000700000000000000cc7c1000030000000000000000000000e47c10000100000000000000436c61696d65640079e5120009000000d37010000f000000d5d1120007000000ec7c10003b00000020536f6d656f6e6520636c61696d656420736f6d6520444f54732e205b77686f2c20657468657265756d5f616464726573732c20616d6f756e745d496e76616c696452656e6f756e63696e67496e76616c6964566f7465436f756e74496e76616c69645769746e65737344617461496e73756666696369656e7443616e64696461746546756e647352756e6e657255705375626d69744d656d6265725375626d69744475706c69636174656443616e6469646174655265706f727453656c664d7573744265566f746572556e61626c65546f506179426f6e644c6f7742616c616e63654d6178696d756d566f7465734578636565646564546f6f4d616e79566f7465734e6f566f746573556e61626c65546f566f7465496e76616c69645265706c6163656d656e7400000000d488120004000000000000001c7f10000200000000000000000000004c7f1000170000000000000000000000048010000c00000000000000543113000000000000000000000000001080100005000000000000000000000038801000100000000000000048801000010000000000000000000000608010000f0000000000000000000000d88010001200000000000000ec80100001000000000000000000000004811000110000000000000000000000e41613000d000000000000008c811000020000000000000000000000bc8110000e00000000000000000000002c821000140000000000000040821000020000000000000000000000708210000a0000000000000000000000398f100005000000000000002c1a1300110000000000000048b6120005000000000000004db6120015000000128c100057000000698c1000390000005431130000000000a28c100058000000fa8c10005400000054311300000000004e8d100014000000628d100012000000748d100056000000ca8d10004500000054311300000000000f8e1000540000005431130000000000498a10003100000054311300000000007a8a10000c0000005431130000000000638e100056000000b98e10002b0000005431130000000000f2eb12000b000000e48e10005500000036ec12000c00000072656d6f76655f766f746572878b10001c0000005431130000000000a38b10002f0000005431130000000000d28b1000400000007375626d69745f63616e64696461637900000000788b10000f00000000000000d2a012000c00000078891000450000005431130000000000bd89100058000000158a1000340000005431130000000000498a10003100000054311300000000007a8a10000c0000005431130000000000868a100058000000de8a1000570000005431130000000000f2eb12000b000000358b10004300000036ec12000c00000072656e6f756e63655f63616e646964616379000000000000648910000a000000000000006e8910000a0000001486100054000000688610001000000054311300000000007886100053000000cb8610003d000000088710005900000061871000240000008587100056000000db87100056000000318810005b0000008c8810004d0000005431130000000000d9881000520000005431130000000000f2eb12000b0000002b8910003900000036ec12000c00000000000000791b1300030000000000000085fc11002300000000000000058610000f00000000000000a1fb1200040000001d84100057000000748410002000000054311300000000009484100056000000ea8410004000000054311300000000007f8310002f00000054311300000000002a851000510000005431130000000000f2eb12000b0000007b85100055000000d08510003500000036ec12000c000000636c65616e5f646566756e63745f766f7465727300000000068410000b00000000000000cbed12000300000000000000118410000c00000000000000cbed120003000000c082100052000000128310002c00000054311300000000003e8310004100000054311300000000007f8310002f0000005431130000000000f2eb12000b000000ae8310005800000036ec12000c00000020436c65616e20616c6c20766f746572732077686f2061726520646566756e63742028692e652e207468657920646f206e6f7420736572766520616e7920707572706f736520617420616c6c292e20546865206465706f736974206f66207468652072656d6f76656420766f74657273206172652072657475726e65642e205468697320697320616e20726f6f742066756e6374696f6e20746f2062652075736564206f6e6c7920666f7220636c65616e696e67207468652073746174652e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d75737420626520726f6f742e2054686520746f74616c206e756d626572206f6620766f7465727320616e642074686f736520746861742061726520646566756e6374206d7573742062652070726f7669646564206173207769746e65737320646174612e5f6e756d5f766f746572735f6e756d5f646566756e63742052656d6f7665206120706172746963756c6172206d656d6265722066726f6d20746865207365742e20546869732069732065666665637469766520696d6d6564696174656c7920616e642074686520626f6e64206f6620746865206f7574676f696e67206d656d62657220697320736c61736865642e20496620612072756e6e65722d757020697320617661696c61626c652c207468656e2074686520626573742072756e6e65722d75702077696c6c2062652072656d6f76656420616e64207265706c6163657320746865206f7574676f696e67206d656d6265722e204f74686572776973652c2061206e65772070687261676d656e20656c656374696f6e20697320737461727465642e204e6f74652074686174207468697320646f6573206e6f7420616666656374207468652064657369676e6174656420626c6f636b206e756d626572206f6620746865206e65787420656c656374696f6e2e20496620776520686176652061207265706c6163656d656e742c20776520757365206120736d616c6c207765696768742e20456c73652c2073696e63652074686973206973206120726f6f742063616c6c20616e642077696c6c20676f20696e746f2070687261676d656e2c20776520617373756d652066756c6c20626c6f636b20666f72206e6f772e6861735f7265706c6163656d656e742052656e6f756e6365206f6e65277320696e74656e74696f6e20746f20626520612063616e64696461746520666f7220746865206e65787420656c656374696f6e20726f756e642e203320706f74656e7469616c206f7574636f6d65732065786973743a202d20606f726967696e6020697320612063616e64696461746520616e64206e6f7420656c656374656420696e20616e79207365742e20496e207468697320636173652c20746865206465706f736974206973202020756e72657365727665642c2072657475726e656420616e64206f726967696e2069732072656d6f76656420617320612063616e6469646174652e202d20606f726967696e6020697320612063757272656e742072756e6e65722d75702e20496e207468697320636173652c20746865206465706f73697420697320756e72657365727665642c2072657475726e656420616e642020206f726967696e2069732072656d6f76656420617320612072756e6e65722d75702e202d20606f726967696e6020697320612063757272656e74206d656d6265722e20496e207468697320636173652c20746865206465706f73697420697320756e726573657276656420616e64206f726967696e20697320202072656d6f7665642061732061206d656d6265722c20636f6e73657175656e746c79206e6f74206265696e6720612063616e64696461746520666f7220746865206e65787420726f756e6420616e796d6f72652e20202053696d696c617220746f205b6072656d6f76655f6d656d62657273605d2c206966207265706c6163656d656e742072756e6e657273206578697374732c20746865792061726520696d6d6564696174656c7920757365642e202020496620746865207072696d652069732072656e6f756e63696e672c207468656e206e6f207072696d652077696c6c20657869737420756e74696c20746865206e65787420726f756e642e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642c20616e642068617665206f6e65206f66207468652061626f766520726f6c65732e205468652074797065206f662072656e6f756e63696e67206d7573742062652070726f7669646564206173207769746e65737320646174612e72656e6f756e63696e6752656e6f756e63696e67205375626d6974206f6e6573656c6620666f722063616e6469646163792e204120666978656420616d6f756e74206f66206465706f736974206973207265636f726465642e20416c6c2063616e64696461746573206172652077697065642061742074686520656e64206f6620746865207465726d2e205468657920656974686572206265636f6d652061206d656d6265722f72756e6e65722d75702c206f72206c65617665207468652073797374656d207768696c65207468656972206465706f73697420697320736c61736865642e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642e20232323205761726e696e67204576656e20696620612063616e64696461746520656e6473207570206265696e672061206d656d6265722c2074686579206d7573742063616c6c205b6043616c6c3a3a72656e6f756e63655f63616e646964616379605d20746f20676574207468656972206465706f736974206261636b2e204c6f73696e67207468652073706f7420696e20616e20656c656374696f6e2077696c6c20616c77617973206c65616420746f206120736c6173682e20546865206e756d626572206f662063757272656e742063616e64696461746573206d7573742062652070726f7669646564206173207769746e65737320646174612e63616e6469646174655f636f756e742052656d6f766520606f726967696e60206173206120766f7465722e20546869732072656d6f76657320746865206c6f636b20616e642072657475726e7320746865206465706f7369742e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e656420616e64206265206120766f7465722e20566f746520666f72206120736574206f662063616e6469646174657320666f7220746865207570636f6d696e6720726f756e64206f6620656c656374696f6e2e20546869732063616e2062652063616c6c656420746f207365742074686520696e697469616c20766f7465732c206f722075706461746520616c7265616479206578697374696e6720766f7465732e2055706f6e20696e697469616c20766f74696e672c206076616c75656020756e697473206f66206077686f6027732062616c616e6365206973206c6f636b656420616e642061206465706f73697420616d6f756e742069732072657365727665642e20546865206465706f736974206973206261736564206f6e20746865206e756d626572206f6620766f74657320616e642063616e2062652075706461746564206f7665722074696d652e205468652060766f746573602073686f756c643a2020202d206e6f7420626520656d7074792e2020202d206265206c657373207468616e20746865206e756d626572206f6620706f737369626c652063616e646964617465732e204e6f7465207468617420616c6c2063757272656e74206d656d6265727320616e64202020202072756e6e6572732d75702061726520616c736f206175746f6d61746963616c6c792063616e6469646174657320666f7220746865206e65787420726f756e642e204966206076616c756560206973206d6f7265207468616e206077686f60277320746f74616c2062616c616e63652c207468656e20746865206d6178696d756d206f66207468652074776f20697320757365642e2049742069732074686520726573706f6e736962696c697479206f66207468652063616c6c657220746f202a2a4e4f542a2a20706c61636520616c6c206f662074686569722062616c616e636520696e746f20746865206c6f636b20616e64206b65657020736f6d6520666f722066757274686572206f7065726174696f6e732e20576520617373756d6520746865206d6178696d756d2077656967687420616d6f6e6720616c6c20332063617365733a20766f74655f657175616c2c20766f74655f6d6f726520616e6420766f74655f6c6573732e766f746573000000000000c7e11200070000000000000000000000f89010002b00000000000000000000000000000000000000000000000000000000000000543113002491100000000000000000003491100003000000000000000100000000000000a83c1000090000000000000000000000f89010002b00000000000000000000000000000000000000000000000000000000000000543113004c91100000000000000000005c911000040000000000000001000000000000009e3c10000a00000000000000000000007c911000210000000000000000000000000000000000000000000000000000000000000054311300a09110000000000000000000b091100006000000000000000100000000000000e09110000e0000000000000000000000cbed1200030000000000000000000000000000000000000000000000000000000000000054311300f091100000000000000000000092100001000000000000000100000000000000fb571200060000000105000000000000e3f812000c00000000000000089210002100000000000000000000000000000000000000543113002c92100000000000000000003c9210000300000000000000010000005665633c53656174486f6c6465723c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e3e0012000000000000000100000043000000809410001d0000005431130000000000ac9310002e00000012000000000000000100000043000000da931000210000005431130000000000fb93100056000000519410002f0000005665633c28543a3a4163636f756e7449642c2042616c616e63654f663c543e293e0000001200000000000000010000003f0000000393100056000000599310003400000054311300000000008d9310001f0000005431130000000000ac9310002e000000456c656374696f6e526f756e6473000012000000000000000100000022000000b392100050000000566f7465723c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e00000012000000000000000100000044000000549210002e0000005431130000000000829210003100000020566f74657320616e64206c6f636b6564207374616b65206f66206120706172746963756c617220766f7465722e2054574f582d4e4f54453a205341464520617320604163636f756e7449646020697320612063727970746f20686173682e2054686520746f74616c206e756d626572206f6620766f746520726f756e6473207468617420686176652068617070656e65642c206578636c7564696e6720746865207570636f6d696e67206f6e652e205468652070726573656e742063616e646964617465206c6973742e20412063757272656e74206d656d626572206f722072756e6e65722d75702063616e206e6576657220656e746572207468697320766563746f7220616e6420697320616c7761797320696d706c696369746c7920617373756d656420746f20626520612063616e6469646174652e205365636f6e6420656c656d656e7420697320746865206465706f7369742e20496e76617269616e743a20416c7761797320736f72746564206261736564206f6e206163636f756e742069642e205468652063757272656e742072657365727665642072756e6e6572732d75702e20496e76617269616e743a20416c7761797320736f72746564206261736564206f6e2072616e6b2028776f72736520746f2062657374292e2055706f6e2072656d6f76616c206f662061206d656d6265722c20746865206c6173742028692e652e205f626573745f292072756e6e65722d75702077696c6c206265207265706c616365642e205468652063757272656e7420656c6563746564206d656d626572732e00000000000000289610000d0000000000000057a912000c000000000000005431130038961000000000000000000054311300000000000000000000000000489610000e0000000000000057a912000c00000000000000543113005896100000000000000000005431130000000000000000000000000068961000100000000000000057a912000c000000000000005431130078961000000000000000000054311300000000000000000000000000889610000e00000000000000cbed120003000000000000005431130098961000000000000000000054311300000000000000000000000000a89610001000000000000000cbed1200030000000000000054311300b8961000000000000000000054311300000000000000000000000000c89610000c00000000000000a9f912000e0000000000000054311300d4961000000000000000000054311300000000000000000000000000a00811000800000000000000e49610000e0000000000000054311300f4961000000000000000000054311300000000000000000043616e646964616379426f6e6400000012000000000000000100000045000000566f74696e67426f6e6442617365000012000000000000000100000046000000566f74696e67426f6e64466163746f7212000000000000000100000047000000446573697265644d656d626572730000120000000000000001000000480000004465736972656452756e6e6572735570120000000000000001000000490000005465726d4475726174696f6e1200000000000000010000004a0000004c6f636b4964656e74696669657200001200000000000000010000004b0000000000000038981000070000000000000040981000010000000000000000000000489810000400000000000000000000006898100009000000000000005431130000000000000000000000000074981000020000000000000000000000849810000d0000000000000054311300000000000000000000000000949810000100000000000000000000009c9810000c00000000000000fce41200010000000000000000000000a8981000020000000000000000000000b89810000900000000000000fce41200010000000000000000000000c4981000010000000000000000000000cc9810001000000000000000c0f51100020000000000000000000000dc981000040000000000000000000000fc9810001100000000000000c0f511000200000000000000000000001099100001000000000000004e65775465726d00ad9c1000190000004d9b10005a000000a79b100056000000fd9b10005a000000579c100056000000456d7074795465726d000000cd9a10004d0000001a9b100033000000456c656374696f6e4572726f72000000939a10003a0000004d656d6265724b69636b6564319a100055000000869a10000d00000052656e6f756e6365640000000a9a10002700000043616e646964617465536c61736865646e99100057000000c59910000b0000005431130000000000d09910003a00000053656174486f6c646572536c617368656400000018991000560000002041205c5b7365617420686f6c6465725c5d2077617320736c6173686564206279205c5b616d6f756e745c5d206279206265696e6720666f72636566756c6c792072656d6f7665642066726f6d20746865207365742e2041205c5b63616e6469646174655c5d2077617320736c6173686564206279205c5b616d6f756e745c5d2064756520746f206661696c696e6720746f206f627461696e20612073656174206173206d656d626572206f722072756e6e65722d75702e204e6f74652074686174206f6c64206d656d6265727320616e642072756e6e6572732d75702061726520616c736f2063616e646964617465732e20536f6d656f6e65206861732072656e6f756e6365642074686569722063616e6469646163792e2041205c5b6d656d6265725c5d20686173206265656e2072656d6f7665642e20546869732073686f756c6420616c7761797320626520666f6c6c6f7765642062792065697468657220604e65775465726d60206f722060456d7074795465726d602e20496e7465726e616c206572726f722068617070656e6564207768696c6520747279696e6720746f20706572666f726d20656c656374696f6e2e204e6f20286f72206e6f7420656e6f756768292063616e64696461746573206578697374656420666f72207468697320726f756e642e205468697320697320646966666572656e742066726f6d20604e65775465726d285c5b5c5d29602e2053656520746865206465736372697074696f6e206f6620604e65775465726d602e2041206e6577207465726d2077697468205c5b6e65775f6d656d626572735c5d2e205468697320696e64696361746573207468617420656e6f7567682063616e64696461746573206578697374656420746f2072756e2074686520656c656374696f6e2c206e6f74207468617420656e6f756768206861766520686173206265656e20656c65637465642e2054686520696e6e65722076616c7565206d757374206265206578616d696e656420666f72207468697320707572706f73652e204120604e65775465726d285c5b5c5d296020696e64696361746573207468617420736f6d652063616e6469646174657320676f7420746865697220626f6e6420736c617368656420616e64206e6f6e65207765726520656c65637465642c207768696c73742060456d7074795465726d60206d65616e732074686174206e6f2063616e64696461746573206578697374656420746f20626567696e20776974682e5665633c284163636f756e7449642c2042616c616e6365293e000000000000f16110000c00000000000000549d1000010000000000000000000000da61100017000000000000005c9d1000010000000000000000000000cd6110000d00000000000000649d1000010000000000000000000000c761100006000000000000006c9d1000010000000000000000000000fd6110000900000000000000749d100001000000000000002f9e100019000000079e100028000000ed9d10001a000000c39d10002a0000007c9d100047000000204b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e204e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e2052656769737465726564206475706c6963617465206b65792e204e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e20496e76616c6964206f776e6572736869702070726f6f662e000000006f3d10000700000000000000289f10000100000000000000000000008b3311000800000000000000309f1000010000000000000000000000673d10000800000000000000389f10000100000000000000000000005c3d10000b00000000000000409f1000010000000000000000000000533d10000900000000000000489f1000010000000000000000000000428212000c00000000000000509f1000010000000000000000000000483d10000b00000000000000589f1000010000000000000000000000763d10000b00000000000000609f10000100000000000000b4a010004900000096a010001e00000062a010003400000019a0100049000000fd9f10001c000000b79f100046000000829f100035000000689f10001a0000002043616e6e6f74206164642073656c662061732070726f78792e20416e6e6f756e63656d656e742c206966206d61646520617420616c6c2c20776173206d61646520746f6f20726563656e746c792e2043616c6c206d6179206e6f74206265206d6164652062792070726f78792062656361757365206974206d617920657363616c617465206974732070726976696c656765732e204163636f756e7420697320616c726561647920612070726f78792e20412063616c6c20776869636820697320696e636f6d70617469626c652077697468207468652070726f7879207479706527732066696c7465722077617320617474656d707465642e2053656e646572206973206e6f7420612070726f7879206f6620746865206163636f756e7420746f2062652070726f786965642e2050726f787920726567697374726174696f6e206e6f7420666f756e642e2054686572652061726520746f6f206d616e792070726f786965732072656769737465726564206f7220746f6f206d616e7920616e6e6f756e63656d656e74732070656e64696e672e00000000000000f67d10000c00000000000000dca21000010000000000000000000000ef7d10000700000000000000e4a21000010000000000000000000000e37d10000c00000000000000eca21000010000000000000000000000cf7d10001400000000000000f4a21000010000000000000000000000c57d10000a00000000000000fca21000010000000000000000000000b67d10000f0000000000000004a31000010000000000000000000000ab7d10000b000000000000000ca31000010000000000000000000000a17d10000a0000000000000014a310000100000000000000000000008e7d100013000000000000001ca31000010000000000000000000000827d10000c0000000000000024a31000010000000000000000000000747d10000e000000000000002ca310000100000000000000000000005a7d10001a0000000000000034a31000010000000000000000000000e0e1120009000000000000003ca31000010000000000000000000000487d1000120000000000000044a31000010000000000000000000000387d100010000000000000004ca31000010000000000000000000000277d1000110000000000000054a31000010000000000000000000000027e100012000000000000005ca310000100000000000000d1a5100031000000aba510002600000089a510002200000062a510002700000030a510003200000011a510001f00000000a5100011000000eca4100014000000cba4100021000000a8a410002300000085a41000230000005fa410002600000051a410000e00000018a4100039000000e4a3100034000000a4a310004000000064a31000400000002050726564696374696f6e20726567617264696e67207265706c6163656d656e74206166746572206d656d6265722072656d6f76616c2069732077726f6e672e205468652072656e6f756e63696e67206f726967696e2070726573656e74656420612077726f6e67206052656e6f756e63696e676020706172616d657465722e205468652070726f766964656420636f756e74206f66206e756d626572206f6620766f74657320697320696e636f72726563742e205468652070726f766964656420636f756e74206f66206e756d626572206f662063616e6469646174657320697320696e636f72726563742e204e6f742061206d656d6265722e2043616e64696461746520646f6573206e6f74206861766520656e6f7567682066756e64732e2052756e6e65722063616e6e6f742072652d7375626d69742063616e6469646163792e204d656d6265722063616e6e6f742072652d7375626d69742063616e6469646163792e204475706c6963617465642063616e646964617465207375626d697373696f6e2e2043616e6e6f74207265706f72742073656c662e204d757374206265206120766f7465722e20566f7465722063616e206e6f742070617920766f74696e6720626f6e642e2043616e6e6f7420766f74652077697468207374616b65206c657373207468616e206d696e696d756d2062616c616e63652e2043616e6e6f7420766f7465206d6f7265207468616e206d6178696d756d20616c6c6f7765642e2043616e6e6f7420766f7465206d6f7265207468616e2063616e646964617465732e204d75737420766f746520666f72206174206c65617374206f6e652063616e6469646174652e2043616e6e6f7420766f7465207768656e206e6f2063616e64696461746573206f72206d656d626572732065786973742e0000e613130056000000e900000001000000417070726f76616c73496e636f6e73697374656e74207374617465202d20636f756c646e277420736574746c6520696d62616c616e636520666f722066756e6473207370656e7420627920747265617375727953757065724f664e6f745472616e73666572496e5573654e6f744f776e65724e6f7441737369676e65645065726d616e656e7400000000000078a71000050000000000000080a7100001000000000000000000000098a7100012000000000000000000000038071200080000000000000028a8100002000000000000000000000058a81000140000000000000000000000f8a81000040000000000000080a71000010000000000000000000000fca810001200000000000000000000002c0912000e000000000000008ca91000030000000000000000000000d4a910001500000000000000000000007caa1000060000000000000080a7100001000000000000000000000084aa10001100000000000000636c61696d00000000000000a00e13000500000000000000d7ae10000f00000097b11000270000005431130000000000beb110003800000054311300000000006c0e1300340000005431130000000000f6b110003d000000543113000000000016ae1000250000005431130000000000f2eb12000b000000bcfb11000a00000028ac10002700000020b01000190000006cac10000d00000079ac1000140000008dac10002500000036ec12000c00000000000000871913000300000000000000e3f812000c00000000000000a00e13000500000000000000d7ae10000f00000039b010005800000091b010002f00000054311300000000006c0e1300340000005431130000000000c0b010004a0000006dad100058000000543113000000000016ae1000250000005431130000000000f2eb12000b000000bcfb11000a00000028ac1000270000000ab110001a0000006cac10000d00000079ac100014000000c0ef12000d00000024b11000390000005db110003a00000036ec12000c00000066726565e6ae10002600000054311300000000000caf100058000000543113000000000064af1000560000005431130000000000baaf1000440000005431130000000000feaf1000220000005431130000000000f2eb12000b000000bcfb11000a00000028ac10002700000020b01000190000006cac10000d00000079ac1000140000008dac10002500000036ec12000c00000000000000871913000300000000000000e3f812000c00000000000000a00e13000500000000000000d7ae10000f000000000000007caa10000600000000000000a1fb120004000000b2ac10005600000008ad10003b000000543113000000000075fa110032000000543113000000000043ad10002a0000006dad100058000000c5ad100051000000543113000000000016ae1000250000005431130000000000f2eb12000b000000bcfb11000a00000028ac1000270000003bae10001f0000006cac10000d00000079ac100014000000c0ef12000d0000005aae10003e00000098ae10003f00000036ec12000c000000667265657a6500000cab10005a000000543113000000000066ab100057000000bdab10001c0000005431130000000000d9ab10002c000000543113000000000005ac1000230000005431130000000000f2eb12000b000000bcfb11000a00000028ac1000270000004fac10001d0000006cac10000d00000079ac1000140000008dac10002500000036ec12000c00000020467265657a6520616e20696e64657820736f2069742077696c6c20616c7761797320706f696e7420746f207468652073656e646572206163636f756e742e205468697320636f6e73756d657320746865206465706f7369742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d75737420686176652061206e6f6e2d66726f7a656e206163636f756e742060696e646578602e202d2060696e646578603a2074686520696e64657820746f2062652066726f7a656e20696e20706c6163652e20456d6974732060496e64657846726f7a656e60206966207375636365737366756c2e202d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202d20557020746f206f6e6520736c617368206f7065726174696f6e2e202d204f6e65206576656e742e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d202d204442205765696768743a203120526561642f577269746520284163636f756e74732920466f72636520616e20696e64657820746f20616e206163636f756e742e205468697320646f65736e277420726571756972652061206465706f7369742e2049662074686520696e64657820697320616c72656164792068656c642c207468656e20616e79206465706f736974206973207265696d62757273656420746f206974732063757272656e74206f776e65722e202d2060696e646578603a2074686520696e64657820746f206265202872652d2961737369676e65642e202d20606e6577603a20746865206e6577206f776e6572206f662074686520696e6465782e20546869732066756e6374696f6e2069732061206e6f2d6f7020696620697420697320657175616c20746f2073656e6465722e202d2060667265657a65603a2069662073657420746f206074727565602c2077696c6c20667265657a652074686520696e64657820736f2069742063616e6e6f74206265207472616e736665727265642e20456d6974732060496e64657841737369676e656460206966207375636365737366756c2e202d20557020746f206f6e652072657365727665206f7065726174696f6e2e202020202d2052656164733a20496e6469636573204163636f756e74732c2053797374656d204163636f756e7420286f726967696e616c206f776e657229202020202d205772697465733a20496e6469636573204163636f756e74732c2053797374656d204163636f756e7420286f726967696e616c206f776e657229543a3a4163636f756e74496e646578204672656520757020616e20696e646578206f776e6564206279207468652073656e6465722e205061796d656e743a20416e792070726576696f7573206465706f73697420706c6163656420666f722074686520696e64657820697320756e726573657276656420696e207468652073656e646572206163636f756e742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206f776e2074686520696e6465782e202d2060696e646578603a2074686520696e64657820746f2062652066726565642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e20456d6974732060496e646578467265656460206966207375636365737366756c2e202d204f6e652072657365727665206f7065726174696f6e2e2041737369676e20616e20696e64657820616c7265616479206f776e6564206279207468652073656e64657220746f20616e6f74686572206163636f756e742e205468652062616c616e6365207265736572766174696f6e206973206566666563746976656c79207472616e7366657272656420746f20746865206e6577206163636f756e742e202d2060696e646578603a2074686520696e64657820746f2062652072652d61737369676e65642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e202d204f6e65207472616e73666572206f7065726174696f6e2e202020202d2052656164733a20496e6469636573204163636f756e74732c2053797374656d204163636f756e742028726563697069656e7429202020202d205772697465733a20496e6469636573204163636f756e74732c2053797374656d204163636f756e742028726563697069656e74292041737369676e20616e2070726576696f75736c7920756e61737369676e656420696e6465782e205061796d656e743a20604465706f736974602069732072657365727665642066726f6d207468652073656e646572206163636f756e742e202d2060696e646578603a2074686520696e64657820746f20626520636c61696d65642e2054686973206d757374206e6f7420626520696e207573652e00000000008cb21000080000000102000000000000d7ae10000f0000000000000094b21000220000000000000000000000000000000000000054311300b8b210000000000000000000c8b210000100000000000000000000004163636f756e747328543a3a4163636f756e7449642c2042616c616e63654f663c543e2c20626f6f6c29000012000000000000000100000023000000d0b210002200000020546865206c6f6f6b75702066726f6d20696e64657820746f206163636f756e742e00000000000048031200070000000000000057a912000c00000000000000543113002cb3100000000000000000003cb3100001000000000000001200000000000000010000002a00000044b310002b00000020546865206465706f736974206e656564656420666f7220726573657276696e6720616e20696e6465782e0000000000f4b310000d0000000000000004b4100002000000000000000000000014b410000100000000000000000000001cb410000a0000000000000028b4100001000000000000000000000030b4100001000000000000000000000038b410000b0000000000000044b4100002000000000000000000000054b410000100000000000000496e64657841737369676e656400000079e5120009000000a6b410000c000000ecb410002d000000496e64657846726565640000a6b410000c000000b2b410003a000000496e64657846726f7a656e00a6b410000c00000079e51200090000005cb410004a0000002041206163636f756e7420696e64657820686173206265656e2066726f7a656e20746f206974732063757272656e74206163636f756e742049442e205c5b696e6465782c2077686f5c5d4163636f756e74496e6465782041206163636f756e7420696e64657820686173206265656e2066726565642075702028756e61737369676e6564292e205c5b696e6465785c5d2041206163636f756e7420696e646578207761732061737369676e65642e205c5b696e6465782c2077686f5c5d4e6f74537562546f6f4d616e7952656769737472617273546f6f4d616e794669656c6473496e76616c6964546172676574496e76616c6964496e646578496e76616c69644a756467656d656e744a756467656d656e74476976656e537469636b794a756467656d656e744e6f4964656e746974794665654368616e676564456d707479496e6465784e6f744e616d6564546f6f4d616e795375624163636f756e74734e6f744f776e6564000000000058b810000d0000000000000068b8100001000000000000000000000080b810000d0000000000000000000000e8b810000c00000000000000f4b810000100000000000000000000000cb91000130000000000000000000000a4b910000800000000000000acb91000010000000000000000000000c4b910001500000000000000000000006cba10000e00000000000000543113000000000000000000000000007cba10001200000000000000000000000cbb1000110000000000000020bb100002000000000000000000000050bb100017000000000000000000000008bc10000e0000000000000018bc100001000000000000000000000030bc1000110000000000000000000000b8bc10000700000000000000c0bc1000020000000000000000000000f0bc10000d000000000000000000000058bd10000e0000000000000068bd100002000000000000000000000098bd10000d000000000000000000000000be10000a000000000000000cbe10000200000000000000000000003cbe10000d0000000000000000000000a4be10001100000000000000b8be100003000000000000000000000000bf100013000000000000000000000098bf10000d0000000000000024f81100010000000000000000000000a8bf100013000000000000000000000040c01000070000000000000048c0100002000000000000000000000078c01000070000000000000000000000b0c010000a0000000000000048c01000020000000000000000000000bcc01000040000000000000000000000dcc010000a00000000000000e8c0100001000000000000000000000000c1100007000000000000000000000038c1100008000000000000005431130000000000000000000000000040c110000a000000000000006164645f7265676973747261720000000000000069d510000700000000000000e3f812000c00000048d410001f000000543113000000000067d41000400000005431130000000000a7d410002b0000005431130000000000d2d41000260000005431130000000000f2eb12000b000000f8d410004a00000042d51000270000006cac10000d00000036ec12000c0000007365745f6964656e746974790000000038d4100004000000000000003cd410000c0000003ed210004b000000543113000000000089d2100056000000dfd210001500000054311300000000006c0e1300340000005431130000000000f4d2100024000000543113000000000018d31000230000005431130000000000f2eb12000b0000003bd31000120000004dd310004800000095d3100039000000ced3100021000000efd31000490000006cac10000d00000036ec12000c0000007365745f737562730000000021d21000040000000000000025d2100019000000f7cf10002400000054311300000000001bd010005600000071d010004c00000054311300000000003ac2100059000000acce10000a0000005431130000000000bdd010002d0000005431130000000000f2eb12000b000000ead010000d000000f7d010003a00000022cf10003600000031d1100022000000946412000600000053d11000380000008bd1100030000000bbd1100031000000ecd110003500000036ec12000c000000636c6561725f6964656e74697479000021ce10004f000000543113000000000070ce10003c00000054311300000000003ac2100059000000acce10000a0000005431130000000000b6ce1000270000005431130000000000f2eb12000b000000ddce100011000000eece10003400000022cf10003600000058cf100049000000a1cf100023000000c4cf1000330000006cac10000d00000036ec12000c000000726571756573745f6a756467656d656e74000000000000003bc81000090000000000000044c8100017000000000000001ace100007000000000000004db612001500000060cc100026000000543113000000000086cc100056000000dccc100007000000543113000000000042cb10004e00000090cb1000150000005431130000000000e3cc1000480000002bcd100056000000543113000000000081cd10000d0000008ecd10002f000000bdcd1000040000005431130000000000c1cd10002a0000005431130000000000f2eb12000b000000b6c710000e00000004c6100021000000ebcd10002f0000006cac10000d00000036ec12000c00000063616e63656c5f726571756573740000000000003bc81000090000000000000052cc10000e000000e8ca10001b000000543113000000000003cb10003f000000543113000000000042cb10004e00000090cb1000150000005431130000000000a5cb1000520000005431130000000000f7cb10002c0000005431130000000000f2eb12000b000000b6c710000e00000004c610002100000023cc10002300000046cc10000c00000036ec12000c0000007365745f6665650000000000a00e1300050000000000000044c810001700000000000000e5ca100003000000000000004db61200150000004eca100047000000543113000000000071c6100056000000a6c81000290000005431130000000000cfc810003e00000095ca1000160000005431130000000000f2eb12000b00000051c910000a0000005bc910001f000000abca10003a00000036ec12000c0000007365745f6163636f756e745f6964000000000000a00e1300050000000000000044c810001700000000000000871913000300000000000000e3f812000c000000c8c9100030000000543113000000000071c6100056000000a6c81000290000005431130000000000cfc810003e000000f8c910001d0000005431130000000000f2eb12000b00000051c910000a0000005bc910001f00000015ca10003900000036ec12000c0000007365745f6669656c6473000000000000a00e1300050000000000000044c810001700000000000000b4c910000600000000000000bac910000e0000007bc810002b000000543113000000000071c6100056000000a6c81000290000005431130000000000cfc810003e0000000dc91000440000005431130000000000f2eb12000b00000051c910000a0000005bc910001f0000007ac910003a00000036ec12000c00000070726f766964655f6a756467656d656e74000000000000003bc81000090000000000000044c810001700000000000000739a1200060000000000000085fc110023000000000000005bc81000090000000000000064c810001700000042c610002f000000543113000000000071c6100056000000c7c610002d0000005431130000000000f4c610004900000058c5100056000000aec510001e0000003dc7100053000000543113000000000090c71000260000005431130000000000f2eb12000b000000b6c710000e000000c4c7100022000000e6c71000260000000cc810002f0000006cac10000d00000036ec12000c0000006b696c6c5f6964656e74697479000000fcc310005100000054311300000000004dc4100059000000a6c4100052000000f8c4100021000000543113000000000019c510003f000000543113000000000058c5100056000000aec510001e0000005431130000000000ccc51000260000005431130000000000f2eb12000b000000f2c510001200000004c610002100000025c610001d0000006cac10000d00000036ec12000c0000006164645f737562000000000091c31000030000000000000085fc11002300000000000000f4c310000400000000000000f8c3100004000000c8c310002c0000005431130000000000b4c11000580000006bc310000f00000054311300000000003ac21000590000007ac310001700000072656e616d655f737562000094c310003400000054311300000000003ac21000590000007ac310001700000072656d6f76655f73756200000000000091c31000030000000000000085fc1100230000003ac31000310000005431130000000000b4c11000580000006bc310000f00000054311300000000003ac21000590000007ac3100017000000717569745f73756290c11000240000005431130000000000b4c11000580000000cc210002e00000054311300000000003ac210005900000093c21000100000005431130000000000a3c2100052000000f5c21000450000002052656d6f7665207468652073656e6465722061732061207375622d6163636f756e742e205061796d656e743a2042616c616e636520726573657276656420627920612070726576696f757320607365745f73756273602063616c6c20666f72206f6e65207375622077696c6c20626520726570617472696174656420746f207468652073656e64657220282a6e6f742a20746865206f726967696e616c206465706f7369746f72292e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d7573742068617665206120726567697374657265642073757065722d6964656e746974792e204e4f54453a20546869732073686f756c64206e6f74206e6f726d616c6c7920626520757365642c206275742069732070726f766964656420696e207468652063617365207468617420746865206e6f6e2d20636f6e74726f6c6c6572206f6620616e206163636f756e74206973206d616c6963696f75736c7920726567697374657265642061732061207375622d6163636f756e742e2052656d6f76652074686520676976656e206163636f756e742066726f6d207468652073656e646572277320737562732e20746f207468652073656e6465722e20737562206964656e74697479206f662060737562602e73756220416c74657220746865206173736f636961746564206e616d65206f662074686520676976656e207375622d6163636f756e742e204164642074686520676976656e206163636f756e7420746f207468652073656e646572277320737562732e64617461446174612052656d6f766520616e206163636f756e742773206964656e7469747920616e64207375622d6163636f756e7420696e666f726d6174696f6e20616e6420736c61736820746865206465706f736974732e205061796d656e743a2052657365727665642062616c616e6365732066726f6d20607365745f737562736020616e6420607365745f6964656e74697479602061726520736c617368656420616e642068616e646c65642062792060536c617368602e20566572696669636174696f6e2072657175657374206465706f7369747320617265206e6f742072657475726e65643b20746865792073686f756c642062652063616e63656c6c6564206d616e75616c6c79207573696e67206063616e63656c5f72657175657374602e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206d617463682060543a3a466f7263654f726967696e602e202d2060746172676574603a20746865206163636f756e742077686f7365206964656e7469747920746865206a756467656d656e742069732075706f6e2e2054686973206d75737420626520616e206163636f756e742020207769746820612072656769737465726564206964656e746974792e20456d69747320604964656e746974794b696c6c656460206966207375636365737366756c2e202d20604f2852202b2053202b205829602e202d204f6e652062616c616e63652d72657365727665206f7065726174696f6e2e202d206053202b2032602073746f72616765206d75746174696f6e732e2050726f766964652061206a756467656d656e7420666f7220616e206163636f756e742773206964656e746974792e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74206f6620746865207265676973747261722077686f736520696e64657820697320607265675f696e646578602e202d20607265675f696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973206265696e67206d6164652e202d20606a756467656d656e74603a20746865206a756467656d656e74206f662074686520726567697374726172206f6620696e64657820607265675f696e646578602061626f75742060746172676574602e20456d69747320604a756467656d656e74476976656e60206966207375636365737366756c2e202d20604f2852202b205829602e202d204f6e652062616c616e63652d7472616e73666572206f7065726174696f6e2e202d20557020746f206f6e65206163636f756e742d6c6f6f6b7570206f7065726174696f6e2e202d2053746f726167653a2031207265616420604f285229602c2031206d757461746520604f2852202b205829602e7265675f696e646578436f6d706163743c526567697374726172496e6465783e6a756467656d656e744a756467656d656e743c42616c616e63654f663c543e3e2053657420746865206669656c6420696e666f726d6174696f6e20666f722061207265676973747261722e206f6620746865207265676973747261722077686f736520696e6465782069732060696e646578602e202d2060696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f73652066656520697320746f206265207365742e202d20606669656c6473603a20746865206669656c64732074686174207468652072656769737472617220636f6e6365726e73207468656d73656c76657320776974682e202d20604f285229602e202d204f6e652073746f72616765206d75746174696f6e20604f285229602e202d2042656e63686d61726b3a20372e343634202b2052202a20302e33323520c2b57320286d696e207371756172657320616e616c79736973296669656c64734964656e746974794669656c6473204368616e676520746865206163636f756e74206173736f63696174656420776974682061207265676973747261722e202d20606e6577603a20746865206e6577206163636f756e742049442e202d2042656e63686d61726b3a20382e383233202b2052202a20302e333220c2b57320286d696e207371756172657320616e616c797369732920536574207468652066656520726571756972656420666f722061206a756467656d656e7420746f206265207265717565737465642066726f6d2061207265676973747261722e202d2060666565603a20746865206e6577206665652e202d2042656e63686d61726b3a20372e333135202b2052202a20302e33323920c2b57320286d696e207371756172657320616e616c79736973296665652043616e63656c20612070726576696f757320726571756573742e205061796d656e743a20412070726576696f75736c79207265736572766564206465706f7369742069732072657475726e6564206f6e20737563636573732e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520612072656769737465726564206964656e746974792e202d20607265675f696e646578603a2054686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973206e6f206c6f6e676572207265717565737465642e20456d69747320604a756467656d656e74556e72657175657374656460206966207375636365737366756c2e202d204f6e652073746f72616765206d75746174696f6e20604f2852202b205829602e202d204f6e65206576656e74526567697374726172496e64657820526571756573742061206a756467656d656e742066726f6d2061207265676973747261722e205061796d656e743a204174206d6f737420606d61785f666565602077696c6c20626520726573657276656420666f72207061796d656e7420746f2074686520726567697374726172206966206a756467656d656e7420676976656e2e202d20607265675f696e646578603a2054686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973207265717565737465642e202d20606d61785f666565603a20546865206d6178696d756d206665652074686174206d617920626520706169642e20546869732073686f756c64206a757374206265206175746f2d706f70756c617465642061733a206060606e6f636f6d70696c652053656c663a3a7265676973747261727328292e676574287265675f696e646578292e756e7772617028292e6665652060606020456d69747320604a756467656d656e7452657175657374656460206966207375636365737366756c2e202d2053746f726167653a2031207265616420604f285229602c2031206d757461746520604f2858202b205229602e6d61785f66656520436c65617220616e206163636f756e742773206964656e7469747920696e666f20616e6420616c6c207375622d6163636f756e747320616e642072657475726e20616c6c206465706f736974732e205061796d656e743a20416c6c2072657365727665642062616c616e636573206f6e20746865206163636f756e74206172652072657475726e65642e206964656e746974792e20456d69747320604964656e74697479436c656172656460206966207375636365737366756c2e202d20604f2852202b2053202b205829602020202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292e2020202d2077686572652060536020737562732d636f756e742028686172642d20616e64206465706f7369742d626f756e646564292e2020202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e646564292e202d204f6e652062616c616e63652d756e72657365727665206f7065726174696f6e2e202d206032602073746f7261676520726561647320616e64206053202b2032602073746f726167652064656c6574696f6e732e2053657420746865207375622d6163636f756e7473206f66207468652073656e6465722e205061796d656e743a20416e79206167677265676174652062616c616e63652072657365727665642062792070726576696f757320607365745f73756273602063616c6c732077696c6c2062652072657475726e656420616e6420616e20616d6f756e7420605375624163636f756e744465706f736974602077696c6c20626520726573657276656420666f722065616368206974656d20696e206073756273602e202d206073756273603a20546865206964656e74697479277320286e657729207375622d6163636f756e74732e202d20604f2850202b205329602020202d20776865726520605060206f6c642d737562732d636f756e742028686172642d20616e64206465706f7369742d626f756e646564292e202d204174206d6f7374206f6e652062616c616e6365206f7065726174696f6e732e2020202d206050202b2053602073746f72616765206d75746174696f6e732028636f64656320636f6d706c657869747920604f28312960292020202d204f6e652073746f7261676520726561642028636f64656320636f6d706c657869747920604f28502960292e2020202d204f6e652073746f726167652077726974652028636f64656320636f6d706c657869747920604f28532960292e2020202d204f6e652073746f726167652d6578697374732028604964656e746974794f663a3a636f6e7461696e735f6b657960292e737562735665633c28543a3a4163636f756e7449642c2044617461293e2053657420616e206163636f756e742773206964656e7469747920696e666f726d6174696f6e20616e6420726573657276652074686520617070726f707269617465206465706f7369742e20496620746865206163636f756e7420616c726561647920686173206964656e7469747920696e666f726d6174696f6e2c20746865206465706f7369742069732074616b656e2061732070617274207061796d656e7420666f7220746865206e6577206465706f7369742e202d2060696e666f603a20546865206964656e7469747920696e666f726d6174696f6e2e20456d69747320604964656e7469747953657460206966207375636365737366756c2e202d20604f2858202b205827202b205229602020202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e646564292020202d20776865726520605260206a756467656d656e74732d636f756e7420287265676973747261722d636f756e742d626f756e64656429202d204f6e652062616c616e63652072657365727665206f7065726174696f6e2e202d204f6e652073746f72616765206d75746174696f6e2028636f6465632d7265616420604f285827202b205229602c20636f6465632d777269746520604f2858202b20522960292e696e666f4964656e74697479496e666f2041646420612072656769737472617220746f207468652073797374656d2e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060543a3a5265676973747261724f726967696e602e202d20606163636f756e74603a20746865206163636f756e74206f6620746865207265676973747261722e20456d6974732060526567697374726172416464656460206966207375636365737366756c2e202d20604f2852296020776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e64656420616e6420636f64652d626f756e646564292e202d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28522960292e6163636f756e7400000000d0d610000a0000000105000000000000e3f812000c00000000000000dad610001a0000000000000000000000000000000000000054311300f4d61000000000000000000004d710000300000000000000000000000000000067a61000070000000102000000000000e3f812000c000000000000001cd7100014000000000000000000000000000000000000005431130030d71000000000000000000040d710000200000000000000000000000000000050d71000060000000105000000000000e3f812000c0000000000000056d7100021000000000000000000000000000000000000005431130078d71000000000000000000088d7100005000000000000000100000000000000b0d710000a0000000000000000000000bad71000360000000000000000000000000000000000000000000000000000000000000054311300f0d71000000000000000000000d810000400000000000000010000004964656e746974794f66526567697374726174696f6e3c42616c616e63654f663c543e3e1200000000000000010000004c00000008da1000480000005431130000000000f2c112003000000028543a3a4163636f756e7449642c2044617461291200000000000000010000004d0000005cd9100058000000b4d9100054000000537562734f662842616c616e63654f663c543e2c205665633c543a3a4163636f756e7449643e29001200000000000000010000004e000000e7d810002e000000543113000000000015d91000470000005431130000000000f2c1120030000000526567697374726172735665633c4f7074696f6e3c526567697374726172496e666f3c42616c616e63654f663c543e2c20543a3a4163636f756e7449643e3e3e1200000000000000010000004f00000020d810005300000073d810002a00000054311300000000009dd810004a0000002054686520736574206f6620726567697374726172732e204e6f7420657870656374656420746f206765742076657279206269672061732063616e206f6e6c79206265206164646564207468726f7567682061207370656369616c206f726967696e20286c696b656c79206120636f756e63696c206d6f74696f6e292e2054686520696e64657820696e746f20746869732063616e206265206361737420746f2060526567697374726172496e6465786020746f2067657420612076616c69642076616c75652e20416c7465726e6174697665202273756222206964656e746974696573206f662074686973206163636f756e742e20546865206669727374206974656d20697320746865206465706f7369742c20746865207365636f6e64206973206120766563746f72206f6620746865206163636f756e74732e205468652073757065722d6964656e74697479206f6620616e20616c7465726e6174697665202273756222206964656e7469747920746f676574686572207769746820697473206e616d652c2077697468696e207468617420636f6e746578742e20496620746865206163636f756e74206973206e6f7420736f6d65206f74686572206163636f756e742773207375622d6964656e746974792c207468656e206a75737420604e6f6e65602e20496e666f726d6174696f6e20746861742069732070657274696e656e7420746f206964656e746966792074686520656e7469747920626568696e6420616e206163636f756e742e00000000a0db10000c0000000000000057a912000c0000000000000054311300acdb10000000000000000000bcdb1000010000000000000000000000c4db10000c0000000000000057a912000c0000000000000054311300d0db10000000000000000000e0db1000010000000000000000000000e8db1000110000000000000057a912000c0000000000000054311300fcdb100000000000000000000cdc100003000000000000000000000024dc10000e00000000000000cbed120003000000000000005431130034dc1000000000000000000044dc10000100000000000000000000004cdc10001300000000000000cbed120003000000000000005431130060dc1000000000000000000070dc100002000000000000000000000080dc10000d00000000000000cbed120003000000000000005431130090dc10000000000000000000a0dc1000020000000000000042617369634465706f7369741200000000000000010000005000000041df1000360000004669656c644465706f7369741200000000000000010000003e000000f6de10004b0000005375624163636f756e744465706f73697400000012000000000000000100000051000000f7dd10005900000050de10005c000000acde10004a0000004d61785375624163636f756e7473000012000000000000000100000052000000b4dd1000430000004d61784164646974696f6e616c4669656c6473001200000000000000010000005200000023dd1000590000007cdd1000380000004d61785265676973747261727300000012000000000000000100000049000000b0dc10005400000004dd10001f000000204d61786d696d756d206e756d626572206f66207265676973747261727320616c6c6f77656420696e207468652073797374656d2e204e656564656420746f20626f756e642074686520636f6d706c6578697479206f662c20652e672e2c207570646174696e67206a756467656d656e74732e204d6178696d756d206e756d626572206f66206164646974696f6e616c206669656c64732074686174206d61792062652073746f72656420696e20616e2049442e204e656564656420746f20626f756e642074686520492f4f20726571756972656420746f2061636365737320616e206964656e746974792c206275742063616e2062652070726574747920686967682e20546865206d6178696d756d206e756d626572206f66207375622d6163636f756e747320616c6c6f77656420706572206964656e746966696564206163636f756e742e2054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564207375626163636f756e742e20546869732073686f756c64206163636f756e7420666f722074686520666163742074686174206f6e652073746f72616765206974656d27732076616c75652077696c6c20696e637265617365206279207468652073697a65206f6620616e206163636f756e742049442c20616e642074686572652077696c6c20626520616e6f746865722074726965206974656d2077686f73652076616c7565206973207468652073697a65206f6620616e206163636f756e7420494420706c75732033322062797465732e2054686520616d6f756e742068656c64206f6e206465706f73697420706572206164646974696f6e616c206669656c6420666f7220612072656769737465726564206964656e746974792e2054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564206964656e746974792e000000000030e110000b00000000000000fce412000100000000000000000000003ce1100001000000000000000000000044e110000f00000000000000c0f5110002000000000000000000000054e110000100000000000000000000005ce110000e00000000000000c0f511000200000000000000000000006ce1100001000000000000000000000074e11000120000000000000088e1100002000000000000000000000098e11000010000000000000000000000a0e11000140000000000000088e11000020000000000000000000000b4e1100001000000000000000000000066b510000e0000000000000088e11000020000000000000000000000bce11000010000000000000000000000c4e110000e00000000000000d4e11000010000000000000000000000dce11000010000000000000000000000e4e110001000000000000000fc021200030000000000000000000000f4e11000010000000000000000000000fce110001200000000000000fc02120003000000000000000000000010e2100002000000000000000000000020e210001200000000000000fc02120003000000000000000000000034e2100002000000000000004964656e7469747953657400f6e41000440000004964656e74697479436c656172656400b1e41000450000004964656e746974794b696c6c656400006ee41000430000004a756467656d656e74526571756573746564000079e512000900000052cc10000e0000002de41000410000004a756467656d656e74556e726571756573746564f1e310003c000000afe31000420000005265676973747261724164646564000052cc10000e00000084e310002b0000005375624964656e7469747941646465642fe31000550000005375624964656e7469747952656d6f7665640000d5e210004300000018e31000170000005375624964656e746974795265766f6b6564000044e21000470000008be210004a0000002041207375622d6964656e746974792077617320636c65617265642c20616e642074686520676976656e206465706f7369742072657061747269617465642066726f6d20746865206d61696e206964656e74697479206163636f756e7420746f20746865207375622d6964656e74697479206163636f756e742e205c5b7375622c206d61696e2c206465706f7369745c5d2041207375622d6964656e74697479207761732072656d6f7665642066726f6d20616e206964656e7469747920616e6420746865206465706f7369742066726565642e205c5b7375622c206d61696e2c206465706f7369745c5d2041207375622d6964656e746974792077617320616464656420746f20616e206964656e7469747920616e6420746865206465706f73697420706169642e205c5b7375622c206d61696e2c206465706f7369745c5d204120726567697374726172207761732061646465642e205c5b7265676973747261725f696e6465785c5d2041206a756467656d656e742077617320676976656e2062792061207265676973747261722e205c5b7461726765742c207265676973747261725f696e6465785c5d2041206a756467656d656e74207265717565737420776173207265747261637465642e205c5b77686f2c207265676973747261725f696e6465785c5d2041206a756467656d656e74207761732061736b65642066726f6d2061207265676973747261722e205c5b77686f2c207265676973747261725f696e6465785c5d2041206e616d65207761732072656d6f76656420616e642074686520676976656e2062616c616e636520736c61736865642e205c5b77686f2c206465706f7369745c5d2041206e616d652077617320636c65617265642c20616e642074686520676976656e2062616c616e63652072657475726e65642e205c5b77686f2c206465706f7369745c5d2041206e616d652077617320736574206f72207265736574202877686963682077696c6c2072656d6f766520616c6c206a756467656d656e7473292e205c5b77686f5c5d4d6178576569676874546f6f4c6f77556e657870656374656454696d65706f696e7457726f6e6754696d65706f696e744e6f54696d65706f696e7453656e646572496e5369676e61746f726965735369676e61746f726965734f75744f664f72646572546f6f4d616e795369676e61746f72696573546f6f4665775369676e61746f726965734e6f417070726f76616c734e6565646564416c7265616479417070726f7665644d696e696d756d5468726573686f6c64416c726561647953746f72656400000000000000b0e610001400000000000000c4e61000020000000000000000000000f4e6100010000000000000000000000074e7100008000000000000007ce710000600000000000000000000000ce810002e00000000000000000000007ce9100010000000000000008ce9100005000000000000000000000004ea100024000000000000000000000024eb10000f0000000000000034eb100004000000000000000000000094eb10001a0000000000000061735f6d756c74695f7468726573686f6c645f310000000059f0100011000000000000002c1a13001100000000000000a80e13000400000000000000ac0e130018000000d5f710005500000054311300000000006c0e13003400000054311300000000002af81000500000007af8100041000000eaf41000230000005431130000000000bbf810002f0000005431130000000000f2eb12000b000000eaf8100047000000fbf610002000000031f9100012000000aef710001300000036ec12000c00000061735f6d756c746900000000176b12000900000000000000a50e1300030000000000000059f0100011000000000000002c1a130011000000000000007df410000f000000000000008cf410002100000000000000a80e13000400000000000000c1f710000a00000000000000cbf710000a00000000000000a1fb12000400000000000000adf410000a00000000000000b7f41000060000009df0100056000000f3f010003f0000005431130000000000bdf410002d000000543113000000000032f110004c0000007ef1100050000000cef110000e00000054311300000000006c0e1300340000005431130000000000ecec10005600000042ed10005100000093ed10001c000000dcf110005700000033f210005500000088f2100036000000eaf410002300000054311300000000000df510004800000055f510004700000054311300000000009cf5100057000000f3f510005600000049f61000380000005431130000000000f2eb12000b00000081f610001500000064ee10003400000098ee100050000000e8ee10005200000096f61000490000003aef1000300000000cf310003600000042f310003f0000006cac10000d000000dff610001c00000081f310004c000000cdf3100024000000f1f310002d000000fbf6100020000000c0ef12000d0000001bf710004900000064f710004a000000aef710001300000036ec12000c000000617070726f76655f61735f6d756c746900000000176b12000900000000000000a50e1300030000000000000059f0100011000000000000002c1a130011000000000000007df410000f000000000000008cf4100021000000000000008cf01000090000000000000095f010000800000000000000adf410000a00000000000000b7f41000060000009df0100056000000f3f010003f000000543113000000000032f110004c0000007ef1100050000000cef110000e00000054311300000000006c0e1300340000005431130000000000ecec10005600000042ed10005100000093ed10001c000000dcf110005700000033f210005500000088f210003600000026ee1000340000005431130000000000bef210004e0000005431130000000000f2eb12000b0000005aee10000a00000064ee10003400000098ee100050000000e8ee1000520000003aef1000300000000cf310003600000042f310003f0000006cac10000d00000081f310004c000000cdf3100024000000f1f310002d000000a9ef100023000000c0ef12000d0000001ef410002f0000004df410003000000036ec12000c00000063616e63656c5f61735f6d756c74690000000000176b12000900000000000000a50e1300030000000000000059f0100011000000000000002c1a130011000000000000006af01000090000000000000073f0100019000000000000008cf01000090000000000000095f010000800000064ec100056000000baec10003200000054311300000000006c0e1300340000005431130000000000ecec10005600000042ed10005100000093ed10001c000000afed10005800000007ee10001f00000026ee1000340000005431130000000000f2eb12000b0000005aee10000a00000064ee10003400000098ee100050000000e8ee1000520000003aef1000300000006cac10000d0000006aef1000220000008cef10001d000000a9ef100023000000c0ef12000d000000ccef10004600000012f010004700000036ec12000c0000002043616e63656c2061207072652d6578697374696e672c206f6e2d676f696e67206d756c7469736967207472616e73616374696f6e2e20416e79206465706f7369742072657365727665642070726576696f75736c7920666f722074686973206f7065726174696f6e2077696c6c20626520756e7265736572766564206f6e20737563636573732e202d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e202d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869732064697370617463682e204d6179206e6f7420626520656d7074792e202d206074696d65706f696e74603a205468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e20666f7220746869732064697370617463682e202d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e202d20604f285329602e202d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e202d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f662020207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2e202d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602e202d20492f4f3a2031207265616420604f285329602c206f6e652072656d6f76652e202d2053746f726167653a2072656d6f766573206f6e65206974656d2e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d20202020202d20526561643a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d2c20526566756e64204163636f756e742c2043616c6c7320202020202d2057726974653a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d2c20526566756e64204163636f756e742c2043616c6c736f746865725f7369676e61746f7269657374696d65706f696e7454696d65706f696e743c543a3a426c6f636b4e756d6265723e63616c6c5f686173685b75383b2033325d20526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e7420696620617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e205061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c757320607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f722069732063616e63656c6c65642e202d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e204966206974206973206e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2e204e4f54453a2049662074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2077616e7420746f20757365206061735f6d756c74696020696e73746561642e202d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292e202d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e202d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c207769746820612020206465706f7369742074616b656e20666f7220697473206c69666574696d65206f66202020604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e20202020202d20526561643a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d20202020202d2057726974653a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d6d617962655f74696d65706f696e744f7074696f6e3c54696d65706f696e743c543a3a426c6f636b4e756d6265723e3e6d61785f7765696768745765696768742049662074686572652061726520656e6f7567682c207468656e206469737061746368207468652063616c6c2e202d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e204e4f54453a20556e6c6573732074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2067656e6572616c6c792077616e7420746f207573652060617070726f76655f61735f6d756c74696020696e73746561642c2073696e6365206974206f6e6c7920726571756972657320612068617368206f66207468652063616c6c2e20526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c7420696620607468726573686f6c64602069732065786163746c79206031602e204f7468657277697365206f6e20737563636573732c20726573756c7420697320604f6b6020616e642074686520726573756c742066726f6d2074686520696e746572696f722063616c6c2c206966206974207761732065786563757465642c206d617920626520666f756e6420696e20746865206465706f736974656420604d756c7469736967457865637574656460206576656e742e202d20604f2853202b205a202b2043616c6c29602e202d204f6e652063616c6c20656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285a296020776865726520605a602069732074782d6c656e2e202d2054686520776569676874206f6620746865206063616c6c602e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d20202020202d2052656164733a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d2c2043616c6c7320286966206073746f72655f63616c6c602920202020202d205772697465733a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d2c2043616c6c7320286966206073746f72655f63616c6c6029202d20506c75732043616c6c205765696768744f706171756543616c6c73746f72655f63616c6c20496d6d6564696174656c792064697370617463682061206d756c74692d7369676e61747572652063616c6c207573696e6720612073696e676c6520617070726f76616c2066726f6d207468652063616c6c65722e202d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f206172652070617274206f6620746865206d756c74692d7369676e61747572652c2062757420646f206e6f7420706172746963697061746520696e2074686520617070726f76616c2070726f636573732e20526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c742e204f285a202b204329207768657265205a20697320746865206c656e677468206f66207468652063616c6c20616e6420432069747320657865637574696f6e207765696768742e202d204442205765696768743a204e6f6e650000000000f4f91000090000000205020000000000e3f812000c0000000000000095f010000800000000000000fdf9100034000000000000005431130034fa1000000000000000000044fa1000010000000000000000000000000000004cfa100005000000010600000000000095f01000080000000000000051fa10002800000000000000000000000000000000000000543113007cfa10000000000000000000543113000000000000000000000000004d756c7469736967734d756c74697369673c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e2c20543a3a4163636f756e7449643e000000120000000000000001000000230000008cfa10002500000043616c6c73284f706171756543616c6c2c20543a3a4163636f756e7449642c2042616c616e63654f663c543e29000000120000000000000001000000230000002054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e000000000000005cfb10000b0000000000000057a912000c000000000000005431130068fb1000000000000000000078fb100002000000000000000000000088fb10000d0000000000000057a912000c000000000000005431130098fb10000000000000000000a8fb1000010000000000000000000000b0fb10000e00000000000000a50e1300030000000000000054311300c0fb10000000000000000000d0fb100001000000000000004465706f7369744261736500120000000000000001000000530000006dfc10005c000000c9fc10001b0000004465706f736974466163746f720000001200000000000000010000004700000018fc1000550000004d61785369676e61746f72696573000012000000000000000100000054000000d8fb10004000000020546865206d6178696d756d20616d6f756e74206f66207369676e61746f7269657320616c6c6f77656420666f72206120676976656e206d756c74697369672e2054686520616d6f756e74206f662063757272656e6379206e65656465642070657220756e6974207468726573686f6c64207768656e206372656174696e672061206d756c746973696720657865637574696f6e2e20546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e672061206d756c746973696720657865637574696f6e206f7220746f2073746f726520612064697370617463682063616c6c20666f72206c617465722e0000000094fd10000b00000000000000a0fd1000030000000000000000000000b8fd1000010000000000000000000000c0fd10001000000000000000d0fd1000040000000000000000000000f0fd100002000000000000000000000000fe1000100000000000000010fe100005000000000000000000000038fe100001000000000000000000000040fe10001100000000000000d0fd100004000000000000000000000054fe100001000000000000004e65774d756c74697369670079e512000900000079e512000900000020ff10000800000089ff1000470000004d756c7469736967417070726f76616c79e51200090000000aff10001600000079e512000900000020ff10000800000028ff1000330000005bff10002e0000004d756c7469736967457865637574656479e51200090000000aff10001600000079e512000900000020ff100008000000637a12000e000000b4fe1000560000004d756c746973696743616e63656c6c65640000005cfe1000580000002041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e205c5b63616e63656c6c696e672c2074696d65706f696e742c206d756c74697369672c2063616c6c5f686173685c5d2041206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e205c5b617070726f76696e672c2074696d65706f696e742c206d756c74697369672c2063616c6c5f686173685c5d54696d65706f696e743c426c6f636b4e756d6265723e43616c6c486173682041206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e205c5b617070726f76696e672c2074696d65706f696e742c206d756c74697369672c2063616c6c5f686173685c5d2041206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e205c5b617070726f76696e672c206d756c74697369672c2063616c6c5f686173685c5d496e73756666696369656e7450726f706f7365727342616c616e636500000000700011000d0000000000000080001100020000000000000000000000b0001100090000000000000000000000f80011000f00000000000000080111000100000000000000000000002001110009000000000000000000000068011100100000000000000008011100010000000000000000000000780111000a0000000000000070726f706f73655f7370656e640000000000000048b612000500000000000000a00411001800000000000000b80411000b0000000000000085fc1100230000008b0311004b000000d60311004d00000023041100150000005431130000000000f2eb12000b0000000403110013000000380411002d000000650411003b00000036ec12000c00000072656a6563745f70726f706f73616c0000000000800311000b000000000000008765120016000000c50211003f0000005431130000000000f2df11002b0000005431130000000000f2eb12000b000000040311001300000017031100340000004b0311003500000036ec12000c000000617070726f76655f70726f706f73616cc8011100570000001f0211002b00000054311300000000004a0211002c0000005431130000000000f2eb12000b00000076021100140000008a02110024000000ae0211001700000036ec12000c00000020417070726f766520612070726f706f73616c2e2041742061206c617465722074696d652c207468652070726f706f73616c2077696c6c20626520616c6c6f636174656420746f207468652062656e656669636961727920616e6420746865206f726967696e616c206465706f7369742077696c6c2062652072657475726e65642e204d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a417070726f76654f726967696e602e202d20436f6d706c65786974793a204f2831292e202d20446252656164733a206050726f706f73616c73602c2060417070726f76616c7360202d20446257726974653a2060417070726f76616c73602052656a65637420612070726f706f736564207370656e642e20546865206f726967696e616c206465706f7369742077696c6c20626520736c61736865642e202d20436f6d706c65786974793a204f283129202d20446252656164733a206050726f706f73616c73602c206072656a65637465642070726f706f736572206163636f756e7460202d2044625772697465733a206050726f706f73616c73602c206072656a65637465642070726f706f736572206163636f756e746070726f706f73616c5f69642050757420666f727761726420612073756767657374696f6e20666f72207370656e64696e672e2041206465706f7369742070726f706f7274696f6e616c20746f207468652076616c756520697320726573657276656420616e6420736c6173686564206966207468652070726f706f73616c2069732072656a65637465642e2049742069732072657475726e6564206f6e6365207468652070726f706f73616c20697320617761726465642e202d20446252656164733a206050726f706f73616c436f756e74602c20606f726967696e206163636f756e7460202d2044625772697465733a206050726f706f73616c436f756e74602c206050726f706f73616c73602c20606f726967696e206163636f756e7460436f6d706163743c42616c616e63654f663c542c20493e3e62656e65666963696172790000000000e45712000d0000000000000000000000357c12000d0000000000000000000000000000000000000000000000000000000000000054311300cc0511000000000000000000dc05110001000000000000000100000000000000db571200090000000105000000000000357c12000d00000000000000e40511002700000000000000000000000000000000000000543113000c06110000000000000000001c0611000100000000000000000000000000000014a61000090000000000000000000000240611001200000000000000000000000000000000000000000000000000000000000000543113003806110000000000000000004806110001000000000000000100000012000000000000000100000022000000ad0611002900000050726f706f73616c3c543a3a4163636f756e7449642c2042616c616e63654f663c542c20493e3e00120000000000000001000000230000008e0611001f0000005665633c50726f706f73616c496e6465783e000012000000000000000100000024000000500611003e0000002050726f706f73616c20696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f742079657420617761726465642e2050726f706f73616c7320746861742068617665206265656e206d6164652e204e756d626572206f662070726f706f73616c7320746861742068617665206265656e206d6164652e000000000000f00711000c00000000000000fc07110007000000000000005431130004081100000000000000000014081100020000000000000000000000240811001300000000000000370811000f000000000000005431130048081100000000000000000058081100010000000000000000000000600811000b00000000000000a9f912000e00000000000000543113006c08110000000000000000007c081100010000000000000000000000840811000400000000000000fc07110007000000000000005431130088081100000000000000000098081100010000000000000000000000a00811000800000000000000a0081100080000000000000054311300a80811000000000000000000b8081100010000000000000050726f706f73616c426f6e645065726d696c6c0012000000000000000100000055000000be09110055000000130a11004400000050726f706f73616c426f6e644d696e696d756d42616c616e63654f663c542c20493e0000120000000000000001000000450000006c091100520000005370656e64506572696f6400120000000000000001000000560000004a091100220000004275726e1200000000000000010000005700000006091100440000004d6f64756c65496412000000000000000100000058000000c008110046000000205468652074726561737572792773206d6f64756c652069642c207573656420666f72206465726976696e672069747320736f7665726569676e206163636f756e742049442e2050657263656e74616765206f662073706172652066756e64732028696620616e7929207468617420617265206275726e7420706572207370656e6420706572696f642e20506572696f64206265747765656e2073756363657373697665207370656e64732e204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e204672616374696f6e206f6620612070726f706f73616c27732076616c756520746861742073686f756c6420626520626f6e64656420696e206f7264657220746f20706c616365207468652070726f706f73616c2e20416e2061636365707465642070726f706f73616c2067657473207468657365206261636b2e20412072656a65637465642070726f706f73616c20646f6573206e6f742e0000000000d0ce120008000000000000008c0b1100010000000000000000000000940b11000100000000000000000000009c0b11000800000000000000a40b1100010000000000000000000000ac0b1100010000000000000000000000b40b11000700000000000000bc0b1100030000000000000000000000d40b1100010000000000000000000000dc0b11000800000000000000e40b1100020000000000000000000000f40b1100010000000000000000000000fc0b11000500000000000000a40b1100010000000000000000000000040c11000100000000000000000000000c0c11000800000000000000a40b1100010000000000000000000000140c1100020000000000000000000000480312000700000000000000a40b1100010000000000000000000000240c11000100000000000000357c12000d000000c40d1100210000005370656e64696e67d5d1120007000000750d11004f0000004177617264656400357c12000d000000d5d112000700000079e51200090000002e0d11004700000052656a6563746564357c12000d000000d5d1120007000000e50c1100490000004275726e74000000b90c11002c000000526f6c6c6f766572580c11004c000000a40c1100150000002c0c11002c00000020536f6d652066756e64732068617665206265656e206465706f73697465642e205c5b6465706f7369745c5d205370656e64696e67206861732066696e69736865643b20746869732069732074686520616d6f756e74207468617420726f6c6c73206f76657220756e74696c206e657874207370656e642e205c5b6275646765745f72656d61696e696e675c5d20536f6d65206f66206f75722066756e64732068617665206265656e206275726e742e205c5b6275726e5c5d20412070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e205c5b70726f706f73616c5f696e6465782c20736c61736865645c5d20536f6d652066756e64732068617665206265656e20616c6c6f63617465642e205c5b70726f706f73616c5f696e6465782c2061776172642c2062656e65666963696172795c5d205765206861766520656e6465642061207370656e6420706572696f6420616e642077696c6c206e6f7720616c6c6f636174652066756e64732e205c5b6275646765745f72656d61696e696e675c5d204e65772070726f706f73616c2e205c5b70726f706f73616c5f696e6465785c5d0000002c0713005500000069000000010000002813130056000000ef010000010000009013130056000000c10000000100000000000000a9b510001200000000000000d80f11000100000000000000000000008b3311000800000000000000e00f1100010000000000000000000000a1b510000800000000000000e80f110001000000000000000000000097b510000a00000000000000f00f11000100000000000000000000008db510000a00000000000000f80f110001000000000000000000000083b510000a000000000000000010110001000000000000000000000074b510000f000000000000000810110001000000000000000000000066b510000e000000000000001010110001000000000000000000000056b510001000000000000000181011000100000000000000000000004ab510000c00000000000000201011000100000000000000000000003db510000d000000000000002810110001000000000000000000000030b510000d00000000000000301011000100000000000000000000001fb510001100000000000000381011000100000000000000000000007a5011000e000000000000004010110001000000000000000000000019b51000060000000000000048101100010000000000000000000000bbb510000800000000000000501011000100000000000000c911110018000000b4111100150000009f11110015000000921111000d00000082111100100000006f111100130000005d111100120000004c11110011000000391111001300000023111100160000000c11110017000000f01011001c000000b51011003b000000981011001d0000007b1011001d0000005810110023000000205375622d6163636f756e742069736e2774206f776e65642062792073656e6465722e2053656e646572206973206e6f742061207375622d6163636f756e742e204163636f756e7420494420697320616c7265616479206e616d65642e204d6178696d756d20616d6f756e74206f66207265676973747261727320726561636865642e2043616e6e6f742061646420616e79206d6f72652e20546f6f206d616e79206164646974696f6e616c206669656c64732e205468652074617267657420697320696e76616c69642e2054686520696e64657820697320696e76616c69642e20496e76616c6964206a756467656d656e742e204a756467656d656e7420676976656e2e20537469636b79206a756467656d656e742e204e6f206964656e7469747920666f756e642e20466565206973206368616e6765642e20456d70747920696e6465782e204163636f756e742069736e2774206e616d65642e204163636f756e742069736e277420666f756e642e20546f6f206d616e7920737562732d6163636f756e74732e00000000000000e0e5100010000000000000006c131100010000000000000000000000d1e510000f0000000000000074131100010000000000000000000000c0e5100011000000000000007c131100010000000000000000000000afe510001100000000000000841311000100000000000000000000009de5100012000000000000008c13110001000000000000000000000088e5100015000000000000009413110001000000000000000000000075e5100013000000000000009c1311000100000000000000000000008b3311000800000000000000a41311000100000000000000000000007ea610000800000000000000ac1311000100000000000000000000006ae510000b00000000000000b41311000100000000000000000000005ce510000e00000000000000bc13110001000000000000000000000049e510001300000000000000c41311000100000000000000000000003ae510000f00000000000000cc131100010000000000000000000000f0e510000d00000000000000d41311000100000000000000c316110020000000971611002c0000006f16110028000000441611002b000000181611002c000000d415110044000000901511004400000058151100380000000c1511004c000000c414110048000000781411004c0000003a1411003e0000000514110035000000dc1311002900000020546865206461746120746f2062652073746f72656420697320616c72656164792073746f7265642e20546865206d6178696d756d2077656967687420696e666f726d6174696f6e2070726f76696465642077617320746f6f206c6f772e20412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e204120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e204e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e204f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c2069742e204d756c7469736967206f7065726174696f6e206e6f7420666f756e64207768656e20617474656d7074696e6720746f2063616e63656c2e205468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e20546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e2054686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e2054686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e2043616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e2043616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e205468726573686f6c64206d7573742062652032206f7220677265617465722e0000000000d0ff10001c000000000000001c1711000100000000000000000000004ab510000c00000000000000241711000100000000000000511711001f0000002c17110025000000204e6f2070726f706f73616c206f7220626f756e7479206174207468617420696e6465782e2050726f706f73657227732062616c616e636520697320746f6f206c6f772e2813130056000000020300001d0000002813130056000000cc03000036000000a0171100520000005c0100000f0000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f626162652f7372632f6c69622e7273000004181100610000002e000000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f617574686f726974792d646973636f766572792f7372632f6c69622e72734c6f6f6b7570007c18110057000000c0000000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f7363686564756c65722f7372632f6c69622e72734167656e6461000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004261626545717569766f636174696f6e736c6f74206e756d626572206973207536343b2069742073686f756c642072656c61746520696e20736f6d652077617920746f2077616c6c20636c6f636b2074696d653b20696620753634206973206e6f7420656e6f7567682077652073686f756c6420637261736820666f72207361666574793b207165642e0000a017110052000000640200000e000000a017110052000000660200003b00000054696d657374616d7020736c6f74206d757374206d61746368206043757272656e74536c6f746000a0171100520000003e0300000900000065706f636820696e64696365732077696c6c206e6576657220726561636820325e3634206265666f726520746865206465617468206f662074686520756e6976657273653b20716564000000a017110052000000060200000e000000a0171100520000000e0200000e00000065706f636820696e646578206973207536343b20697420697320616c77617973206f6e6c7920696e6372656d656e746564206279206f6e653b20696620753634206973206e6f7420656e6f7567682077652073686f756c6420637261736820666f72207361666574793b207165642e00a0171100520000004b0200004600000045706f6368436f6e66696720697320696e697469616c697a656420696e2067656e657369733b207765206e65766572206074616b6560206f7220606b696c6c602069743b20716564a0171100520000005702000029000000a017110052000000440200002d000000a017110052000000a70000000f00000000000000542f12001300000000000000241c1100020000000000000000000000541c1100040000000000000000000000b82f12001c00000000000000241c1100020000000000000000000000741c1100080000000000000000000000b41c11001200000000000000c81c1100010000000000000000000000e01c11000400000000000000000000002034120012000000000000000a1f11001c000000000000005c3412000f000000000000006b34120010000000341e110043000000771e110042000000b91e110044000000fd1e11000d000000341e110043000000771e110042000000b91e110044000000fd1e11000d00000046331200440000008a33120046000000d033120046000000163412000a000000706c616e5f636f6e6669675f6368616e67650000000000001a1e11000600000000000000201e110014000000001d110058000000581d110055000000ad1d110057000000041e11001600000020506c616e20616e2065706f636820636f6e666967206368616e67652e205468652065706f636820636f6e666967206368616e6765206973207265636f7264656420616e642077696c6c20626520656e6163746564206f6e20746865206e6578742063616c6c20746f2060656e6163745f65706f63685f6368616e6765602e2054686520636f6e6669672077696c6c20626520616374697661746564206f6e652065706f63682061667465722e204d756c7469706c652063616c6c7320746f2074686973206d6574686f642077696c6c207265706c61636520616e79206578697374696e6720706c616e6e656420636f6e666967206368616e6765207468617420686164206e6f74206265656e20656e6163746564207965742e636f6e6669674e657874436f6e66696744657363726970746f72205265706f727420617574686f726974792065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c20766572696679207468652065717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f6620616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63652077696c6c206265207265706f727465642e45717569766f636174696f6e50726f6f663c543a3a4865616465723e000000000000fa4511000a0000000000000000000000e8f21200030000000000000000000000000000000000000000000000000000000000000054311300a82411000000000000000000b824110001000000000000000100000000000000a54511000b0000000000000000000000c0241100270000000000000000000000000000000000000000000000000000000000000054311300e82411000000000000000000f824110001000000000000000100000000000000e34511000b0000000000000000000000002511000400000000000000000000000000000000000000000000000000000000000000543113000425110000000000000000001425110002000000000000000100000000000000c94511000b0000000000000000000000002511000400000000000000000000000000000000000000000000000000000000000000543113000425110000000000000000002425110001000000000000000100000000000000424611000a00000000000000000000002c251100160000000000000000000000000000000000000000000000000000000000000054311300442511000000000000000000542511000a0000000000000001000000000000002a461100180000000000000000000000201e1100140000000000000000000000000000000000000000000000000000000000000054311300a42511000000000000000000b425110001000000000000000000000000000000974511000e00000000000000000000002c251100160000000000000000000000000000000000000000000000000000000000000054311300442511000000000000000000bc25110001000000000000000100000000000000ba4511000f0000000000000000000000c0241100270000000000000000000000000000000000000000000000000000000000000054311300e82411000000000000000000c425110001000000000000000100000000000000ee4511000c0000000000000000000000cbed1200030000000000000000000000000000000000000000000000000000000000000054311300cc2511000000000000000000dc25110009000000000000000100000000000000972d1200110000000105000000000000cbed12000300000000000000242611001b00000000000000000000000000000000000000543113004026110000000000000000005026110001000000000000000100000000000000174611000b0000000000000000000000582611000f0000000000000000000000000000000000000000000000000000000000000054311300682611000000000000000000782611000200000000000000000000000000000004461100130000000000000000000000582611000f00000000000000000000000000000000000000000000000000000000000000543113008826110000000000000000009826110003000000000000000100000000000000b04511000a000000000000000000000027371200200000000000000000000000000000000000000000000000000000000000000054311300b02611000000000000000000c02611000500000000000000010000000000000022461100080000000000000000000000a9f912000e0000000000000000000000000000000000000000000000000000000000000054311300cc2511000000000000000000e8261100050000000000000001000000000000008c4511000b0000000000000000000000102711001600000000000000000000000000000000000000000000000000000000000000543113002827110000000000000000003827110001000000000000000000000000000000d44511000f00000000000000000000001027110016000000000000000000000000000000000000000000000000000000000000005431130028271100000000000000000040271100020000000000000000000000120000000000000001000000590000005c301100150000005665633c28417574686f7269747949642c2042616265417574686f72697479576569676874293e001200000000000000010000003f000000413011001b000000536c6f7412000000000000000100000059000000df2f11003e0000001d30110024000000ca2f1100150000007363686e6f72726b656c3a3a52616e646f6d6e65737300001200000000000000010000005a000000042e11002e0000005431130000000000322e11000b00000054311300000000003d2e1100410000007e2e11003e000000bc2e110045000000012f110045000000462f110041000000872f11004300000012000000000000000100000023000000ac2d110058000000952d1100170000007d2d11001800000012000000000000000100000022000000382c11001f0000005431130000000000572c11003d000000942c110040000000d42c1100250000005431130000000000f92c11003b000000342d110042000000762d1100070000005665633c7363686e6f72726b656c3a3a52616e646f6d6e6573733e001200000000000000010000003f000000f32b1100450000004d6179626552616e646f6d6e65737300120000000000000001000000230000006c2b110040000000ac2b110047000000120000000000000001000000230000007b2a110057000000d22a110054000000262b1100460000001200000000000000010000005b000000212911005700000078291100050000007d29110052000000cf29110056000000252a110056000000362811003600000054311300000000006c28110045000000b128110044000000f52811002c0000004261626545706f6368436f6e66696775726174696f6e000012000000000000000100000023000000d527110061000000502711004b0000009b2711003a0000002054686520636f6e66696775726174696f6e20666f7220746865206e6578742065706f63682c20604e6f6e65602069662074686520636f6e6669672077696c6c206e6f74206368616e67652028796f752063616e2066616c6c6261636b20746f206045706f6368436f6e6669676020696e737465616420696e20746861742063617365292e2054686520636f6e66696775726174696f6e20666f72207468652063757272656e742065706f63682e2053686f756c64206e6576657220626520604e6f6e656020617320697420697320696e697469616c697a656420696e2067656e657369732e20486f77206c617465207468652063757272656e7420626c6f636b20697320636f6d706172656420746f2069747320706172656e742e205468697320656e74727920697320706f70756c617465642061732070617274206f6620626c6f636b20657865637574696f6e20616e6420697320636c65616e6564207570206f6e20626c6f636b2066696e616c697a6174696f6e2e205175657279696e6720746869732073746f7261676520656e747279206f757473696465206f6620626c6f636b20657865637574696f6e20636f6e746578742073686f756c6420616c77617973207969656c64207a65726f2e2054686520626c6f636b206e756d62657273207768656e20746865206c61737420616e642063757272656e742065706f6368206861766520737461727465642c20726573706563746976656c7920604e2d316020616e6420604e602e204e4f54453a20576520747261636b207468697320697320696e206f7264657220746f20616e6e6f746174652074686520626c6f636b206e756d626572207768656e206120676976656e20706f6f6c206f6620656e74726f7079207761732066697865642028692e652e20697420776173206b6e6f776e20746f20636861696e206f6273657276657273292e2053696e63652065706f6368732061726520646566696e656420696e20736c6f74732c207768696368206d617920626520736b69707065642c2074686520626c6f636b206e756d62657273206d6179206e6f74206c696e6520757020776974682074686520736c6f74206e756d626572732e2054656d706f726172792076616c75652028636c656172656420617420626c6f636b2066696e616c697a6174696f6e29207468617420696e636c756465732074686520565246206f75747075742067656e657261746564206174207468697320626c6f636b2e2054686973206669656c642073686f756c6420616c7761797320626520706f70756c6174656420647572696e6720626c6f636b2070726f63657373696e6720756e6c657373207365636f6e6461727920706c61696e20736c6f74732061726520656e61626c65642028776869636820646f6e277420636f6e7461696e206120565246206f7574707574292e2054656d706f726172792076616c75652028636c656172656420617420626c6f636b2066696e616c697a6174696f6e292077686963682069732060536f6d6560206966207065722d626c6f636b20696e697469616c697a6174696f6e2068617320616c7265616479206265656e2063616c6c656420666f722063757272656e7420626c6f636b2e2054574f582d4e4f54453a20605365676d656e74496e6465786020697320616e20696e6372656173696e6720696e74656765722c20736f2074686973206973206f6b61792e2052616e646f6d6e65737320756e64657220636f6e737472756374696f6e2e205765206d616b6520612074726164656f6666206265747765656e2073746f7261676520616363657373657320616e64206c697374206c656e6774682e2057652073746f72652074686520756e6465722d636f6e737472756374696f6e2072616e646f6d6e65737320696e207365676d656e7473206f6620757020746f2060554e4445525f434f4e535452554354494f4e5f5345474d454e545f4c454e475448602e204f6e63652061207365676d656e7420726561636865732074686973206c656e6774682c20776520626567696e20746865206e657874206f6e652e20576520726573657420616c6c207365676d656e747320616e642072657475726e20746f206030602061742074686520626567696e6e696e67206f662065766572792065706f63682e204e6578742065706f636820617574686f7269746965732e204e6578742065706f63682072616e646f6d6e6573732e2050656e64696e672065706f636820636f6e66696775726174696f6e206368616e676520746861742077696c6c206265206170706c696564207768656e20746865206e6578742065706f636820697320656e61637465642e205468652065706f63682072616e646f6d6e65737320666f7220746865202a63757272656e742a2065706f63682e20232053656375726974792054686973204d555354204e4f54206265207573656420666f722067616d626c696e672c2061732069742063616e20626520696e666c75656e6365642062792061206d616c6963696f75732076616c696461746f7220696e207468652073686f7274207465726d2e204974204d4159206265207573656420696e206d616e792063727970746f677261706869632070726f746f636f6c732c20686f77657665722c20736f206c6f6e67206173206f6e652072656d656d626572732074686174207468697320286c696b652065766572797468696e6720656c7365206f6e2d636861696e29206974206973207075626c69632e20466f72206578616d706c652c2069742063616e20626520757365642077686572652061206e756d626572206973206e656564656420746861742063616e6e6f742068617665206265656e2063686f73656e20627920616e206164766572736172792c20666f7220707572706f7365732073756368206173207075626c69632d636f696e207a65726f2d6b6e6f776c656467652070726f6f66732e2043757272656e7420736c6f74206e756d6265722e2054686520736c6f74206174207768696368207468652066697273742065706f63682061637475616c6c7920737461727465642e2054686973206973203020756e74696c2074686520666972737420626c6f636b206f662074686520636861696e2e2043757272656e742065706f636820617574686f7269746965732e2043757272656e742065706f636820696e6465782e00000000000000e43011000d00000000000000e8f21200030000000000000054311300f43011000000000000000000043111000300000000000000000000001c31110011000000000000003347120009000000000000005431130030311100000000000000000040311100050000000000000045706f63684475726174696f6e0000001200000000000000010000005c000000983211003b000000d33211004600000019331100480000004578706563746564426c6f636b54696d650000001200000000000000010000005d0000006831110041000000a931110044000000ed311100410000002e32110042000000703211002800000020546865206578706563746564206176657261676520626c6f636b2074696d6520617420776869636820424142452073686f756c64206265206372656174696e6720626c6f636b732e2053696e636520424142452069732070726f626162696c6973746963206974206973206e6f74207472697669616c20746f20666967757265206f7574207768617420746865206578706563746564206176657261676520626c6f636b2074696d652073686f756c64206265206261736564206f6e2074686520736c6f74206475726174696f6e20616e642074686520736563757269747920706172616d657465722060636020287768657265206031202d20636020726570726573656e7473207468652070726f626162696c697479206f66206120736c6f74206265696e6720656d707479292e2054686520616d6f756e74206f662074696d652c20696e20736c6f74732c207468617420656163682065706f63682073686f756c64206c6173742e204e4f54453a2043757272656e746c79206974206973206e6f7420706f737369626c6520746f206368616e6765207468652065706f6368206475726174696f6e2061667465722074686520636861696e2068617320737461727465642e20417474656d7074696e6720746f20646f20736f2077696c6c20627269636b20626c6f636b2070726f64756374696f6e2e0000007c18110057000000b300000001000000546172676574426c6f636b4e756d626572496e506173744e6f74466f756e644661696c6564546f5363686564756c6552657363686564756c654e6f4368616e676500000000000000a8fc11000800000000000000c0341100040000000000000000000000203511000a000000000000000000000070351100060000000000000078351100020000000000000000000000a83511000a0000000000000000000000f83511000e0000000000000008361100050000000000000000000000803611000a0000000000000000000000d03611000c00000000000000dc361100010000000000000000000000f43611000a0000000000000000000000443711000e0000000000000054371100040000000000000000000000b4371100050000000000000000000000dc3711001400000000000000f037110005000000000000000000000068381100050000000000000000000000e93a11000400000000000000a9f912000e00000000000000d83811000e00000000000000e638110028000000000000000e3911000800000000000000163911001200000000000000a80e13000400000000000000ac0e1300180000004b3b11001d0000005431130000000000f2eb12000b0000008839110028000000683b110024000000c0ef12000d000000383b1100130000008c3b110014000000a03b11004f00000036ec12000c00000063616e63656c000000000000e93a11000400000000000000a9f912000e00000000000000a00e13000500000000000000cbed120003000000ed3a1100260000005431130000000000f2eb12000b0000008839110028000000133b110025000000c0ef12000d000000383b110013000000f03911001c0000000c3a11005000000036ec12000c0000007363686564756c655f6e616d6564000000000000d1381100020000000000000042ec12000700000000000000e93a11000400000000000000a9f912000e00000000000000d83811000e00000000000000e638110028000000000000000e3911000800000000000000163911001200000000000000a80e13000400000000000000ac0e1300180000005c3a1100170000005431130000000000f2eb12000b0000008839110028000000733a110023000000c0ef12000d000000d53911001b000000f03911001c000000963a11005300000036ec12000c00000063616e63656c5f6e616d656400000000d1381100020000000000000042ec120007000000693911001f0000005431130000000000f2eb12000b0000008839110028000000b039110025000000c0ef12000d000000d53911001b000000f03911001c0000000c3a11005000000036ec12000c0000007363686564756c655f6166746572000000000000d33811000500000000000000a9f912000e00000000000000d83811000e00000000000000e638110028000000000000000e3911000800000000000000163911001200000000000000a80e13000400000000000000ac0e130018000000283911002b0000005431130000000000f2eb12000b000000533911001600000036ec12000c0000007363686564756c655f6e616d65645f616674657200000000d1381100020000000000000042ec12000700000000000000d33811000500000000000000a9f912000e00000000000000d83811000e00000000000000e638110028000000000000000e3911000800000000000000163911001200000000000000a80e13000400000000000000ac0e13001800000090381100250000005431130000000000f2eb12000b000000b53811001c00000036ec12000c000000205363686564756c652061206e616d6564207461736b20616674657220612064656c61792e2053616d65206173205b607363686564756c655f6e616d6564605d2e696461667465726d617962655f706572696f6469634f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e7072696f726974797363686564756c653a3a5072696f7269747920416e6f6e796d6f75736c79207363686564756c652061207461736b20616674657220612064656c61792e2053616d65206173205b607363686564756c65605d2e2043616e63656c2061206e616d6564207363686564756c6564207461736b2e202d2053203d204e756d626572206f6620616c7265616479207363686564756c65642063616c6c73202d2042617365205765696768743a2032342e3931202b20322e393037202a205320c2b57320202020202d20526561643a204167656e64612c204c6f6f6b757020202020202d2057726974653a204167656e64612c204c6f6f6b7570202d2057696c6c20757365206261736520776569676874206f66203130302077686963682073686f756c6420626520676f6f6420666f7220757020746f203330207363686564756c65642063616c6c73205363686564756c652061206e616d6564207461736b2e202d2042617365205765696768743a2032392e36202b202e313539202a205320c2b573202d2057696c6c20757365206261736520776569676874206f662033352077686963682073686f756c6420626520676f6f6420666f72206d6f7265207468616e203330207363686564756c65642063616c6c737768656e2043616e63656c20616e20616e6f6e796d6f75736c79207363686564756c6564207461736b2e202d2042617365205765696768743a2032322e3135202b20322e383639202a205320c2b57320202020202d20526561643a204167656e646120416e6f6e796d6f75736c79207363686564756c652061207461736b2e202d2042617365205765696768743a2032322e3239202b202e313236202a205320c2b57320202020202d2057726974653a204167656e6461202d2057696c6c20757365206261736520776569676874206f662032352077686963682073686f756c6420626520676f6f6420666f7220757020746f203330207363686564756c65642063616c6c730000000000d3181100060000000105000000000000a9f912000e00000000000000f83c11005c0000000000000000000000000000000000000054311300543d11000000000000000000643d1100010000000000000001000000000000006518110006000000010500000000000042ec120007000000000000006c3d11001b0000000000000000000000000000000000000054311300883d11000000000000000000983d1100010000000000000000000000000000009cbe12000e0000000000000000000000aabe1200080000000000000000000000000000000000000000000000000000000000000054311300a03d11000000000000000000c4be12000300000000000000010000005665633c4f7074696f6e3c5363686564756c65643c3c5420617320436f6e6669673e3a3a43616c6c2c20543a3a426c6f636b4e756d6265722c20543a3a0a50616c6c6574734f726967696e2c20543a3a4163636f756e7449643e3e3e1200000000000000010000003f000000f03d1100530000005461736b416464726573733c543a3a426c6f636b4e756d6265723e0012000000000000000100000023000000b03d1100400000001200000000000000010000005e000000204c6f6f6b75702066726f6d206964656e7469747920746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e0000000000c83e11000900000000000000d43e1100020000000000000000000000e43e1100010000000000000000000000ec3e11000800000000000000d43e1100020000000000000000000000f43e1100010000000000000000000000fc3e11000a00000000000000083f1100030000000000000000000000203f110001000000000000005363686564756c656400000085d312000b000000cbed1200030000009e3f11002500000043616e63656c65647a3f110024000000446973706174636865640000533f1100180000006b3f11000f000000637a12000e000000283f11002b000000204469737061746368656420736f6d65207461736b2e205c5b7461736b2c2069642c20726573756c745c5d5461736b416464726573733c426c6f636b4e756d6265723e4f7074696f6e3c5665633c75383e3e2043616e63656c656420736f6d65207461736b2e205c5b7768656e2c20696e6465785c5d205363686564756c656420736f6d65207461736b2e205c5b7768656e2c20696e6465785c5d00120000000000000001000000210000000440110061000000ab010000290000001200000000000000010000005f0000000440110061000000ae010000340000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f6e706f732d656c656374696f6e732f7372632f6c69622e7273766563746f72207769746820706f736974697665206c656e6774682077696c6c20686176652061206d61783b20716564000000dc7c120067000000780000000e0000006974657261746f72207769746820706f736974697665206c656e6774682077696c6c20686176652061206d696e3b207165640000dc7c1200670000007c0000000e000000dc7c120067000000890000002c000000dc7c120067000000950000002b0000006c656e677468206f6620656c65637465645f65646765732069732067726561746572207468616e206f7220657175616c20323b206c6173745f696e64657820696e64657820697320617420746865206d696e696d756d20656c65637465645f65646765732e6c656e2829202d20313b20696e6465782069732077697468696e2072616e67653b207165640000dc7c1200670000009f00000034000000dc7c120067000000a200000011000000dc7c120067000000ac0000002c000000dc7c120067000000b80000002c000000dc7c12006700000055000000210000000440110061000000a30100002c000000dc7c1200670000006d0000002200000004401100610000002303000025000000044011006100000023030000360000000440110061000000290300002f00000000000000933311001000000000000000a84211000100000000000000000000008b3311000800000000000000b0421100010000000000000000000000743311001700000000000000b8421100010000000000000000000000a33311001200000000000000c042110001000000000000004f4311001a0000002f43110020000000054311002a000000c84211003d0000002052657363686564756c65206661696c6564206265636175736520697420646f6573206e6f74206368616e6765207363686564756c65642074696d652e20476976656e2074617267657420626c6f636b206e756d62657220697320696e2074686520706173742e2043616e6e6f742066696e6420746865207363686564756c65642063616c6c2e204661696c656420746f207363686564756c6520612063616c6c000000000000005f2e12001800000000000000d04d1200010000000000000000000000772e12001800000000000000c84d1200010000000000000000000000ba2e12001600000000000000d84d1200010000000000000050726576696f7573206d617463682061726d206d61746368657320616e7974696e67206c657373207468616e20325e33303b207165640000284411005c0000005701000011000000844411003d0000000000000000000000284411005c0000005e010000110000002f636172676f2d686f6d652f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d322e302e302f7372632f636f6d706163742e7273736869667465642073756666696369656e74206269747320726967687420746f206c656164206f6e6c79206c656164696e67207a65726f733b20716564000000284411005c00000083010000110000000000000000000000000000000000000000000000284411005c0000008a01000011000000084511005c00000034000000120000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f72756e74696d652f7372632f63757276652e72734368617267655472616e73616374696f6e5061796d656e7444656665727265644f6666656e63657345706f6368436f6e6669674e65787452616e646f6d6e657373417574686f72697469657345706f636853746172744e657874417574686f72697469657343757272656e74536c6f744e65787445706f6368436f6e66696747656e65736973536c6f745365676d656e74496e64657845706f6368496e646578417574686f7256726652616e646f6d6e657373496e697469616c697a65644c6174656e65737350656e64696e6745706f6368436f6e6669674368616e676552616e646f6d6e657373457261456c656374696f6e537461747573536e617073686f7456616c696461746f727351756575656453636f7265517565756564456c6563746564497343757272656e7453657373696f6e46696e616c536e617073686f744e6f6d696e61746f727300000000000010481100070000000105000000000000174811000d000000000000002448110034000000000000000000000000000000000000005431130058481100000000000000000068481100010000000000000000000000000000007c451100100000000000000000000000704811001900000000000000000000000000000000000000000000000000000000000000543113008c48110000000000000000009c48110002000000000000000100000000000000ac481100160000000205050000000000c24811000400000000000000c64811000e00000000000000d4481100120000000000000054311300e84811000000000000000000f84811000100000000000000010000000000000000491100120000000105000000000000c2481100040000000000000042ec1200070000000000000000000000000000000000000054311300144911000000000000000000244911000600000000000000010000005265706f7274735265706f727449644f663c543e4f6666656e636544657461696c733c543a3a4163636f756e7449642c20543a3a4964656e74696669636174696f6e5475706c653e12000000000000000100000060000000274b1100520000005665633c44656665727265644f6666656e63654f663c543e3e00000012000000000000000100000061000000bd4a110059000000164b110011000000436f6e63757272656e745265706f727473496e6465784b696e644f706171756554696d65536c6f745665633c5265706f727449644f663c543e3e000012000000000000000100000062000000734a11004a0000005265706f72747342794b696e64496e64657800001200000000000000010000006300000054491100440000005431130000000000984911002f0000005431130000000000c749110052000000194a11005a00000020456e756d65726174657320616c6c207265706f727473206f662061206b696e6420616c6f6e672077697468207468652074696d6520746865792068617070656e65642e20416c6c207265706f7274732061726520736f72746564206279207468652074696d65206f66206f6666656e63652e204e6f74652074686174207468652061637475616c2074797065206f662074686973206d617070696e6720697320605665633c75383e602c207468697320697320626563617573652076616c756573206f6620646966666572656e7420747970657320617265206e6f7420737570706f7274656420617420746865206d6f6d656e7420736f2077652061726520646f696e6720746865206d616e75616c2073657269616c697a6174696f6e2e204120766563746f72206f66207265706f727473206f66207468652073616d65206b696e6420746861742068617070656e6564206174207468652073616d652074696d6520736c6f742e204465666572726564207265706f72747320746861742068617665206265656e2072656a656374656420627920746865206f6666656e63652068616e646c657220616e64206e65656420746f206265207375626d69747465642061742061206c617465722074696d652e20546865207072696d61727920737472756374757265207468617420686f6c647320616c6c206f6666656e6365207265636f726473206b65796564206279207265706f7274206964656e746966696572732e696d2d6f6e6c696e653a6f66666c696e6772616e6470613a65717569766f6361626162653a65717569766f636174696f000000000000005c4c11001100000000000000000000006d4c11000a0000000000000000000000000000000000000000000000000000000000000054311300784c1100000000000000000054311300000000000000000001000000000000009cbe12000e0000000000000000000000aabe1200080000000000000000000000000000000000000000000000000000000000000054311300884c11000000000000000000543113000000000000000000010000004e6578744665654d756c7469706c6965724d756c7469706c69657200120000000000000001000000640000001200000000000000010000005e00000000000000084d1100120000000000000057a912000c00000000000000543113001c4d110000000000000000002c4d1100010000000000000000000000344d11000b000000000000003f4d1100290000000000000054311300684d11000000000000000000784d110001000000000000005472616e73616374696f6e42797465466565000012000000000000000100000065000000c34d110043000000576569676874546f4665655665633c576569676874546f466565436f656666696369656e743c42616c616e63654f663c543e3e3e12000000000000000100000066000000804d1100430000002054686520706f6c796e6f6d69616c2074686174206973206170706c69656420696e206f7264657220746f20646572697665206665652066726f6d207765696768742e205468652066656520746f206265207061696420666f72206d616b696e672061207472616e73616374696f6e3b20746865207065722d6279746520706f7274696f6e2e0000184e11005600000074000000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f6f6666656e6365732f7372632f6c69622e7273000012000000000000000100000021000000dc7c120067000000650000001e000000984e11001a0000004552524f523a20436f7272757074656420737461746520617420457261735374616b657273000000647c1200660000006c0000001d000000647c1200660000006c00000039000000647c120066000000a70000001f00000056616c696461746f72730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000784f11005d00000021020000330000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f737570706f72742f7372632f73746f726167652f6d6f642e7273436865636b576569676874426164206d616e6461746f727945726173526577617264506f696e747356616c696461746f72536c617368496e4572614e6f6d696e61746f72536c617368496e4572615370616e536c617368536c617368696e675370616e73546f6f4d616e79546172676574734261645374617465496e636f7272656374536c617368696e675370616e73496e636f7272656374486973746f72794465707468416c7265616479436c61696d65644e6f74536f72746564416e64556e69717565496e76616c69644e756d6265724f664e6f6d696e6174696f6e73496e76616c6964457261546f52657761726446756e6465645461726765744e6f556e6c6f636b4368756e6b4e6f4d6f72654368756e6b73496e73756666696369656e7456616c7565496e76616c6964536c617368496e6465784475706c6963617465496e646578456d70747954617267657473416c7265616479506169726564416c7265616479426f6e6465644e6f7453746173684e6f74436f6e74726f6c6c65724261645461726765744e6f6d696e61746f72734c6564676572000000000064551100040000000000000068551100030000000000000000000000b0551100160000000000000000000000605611000a000000000000006c561100010000000000000000000000845611001500000000000000000000002c5711000600000000000000345711000100000000000000000000004c5711002000000000000000000000004c581100110000000000000060581100010000000000000000000000785811001f00000000000000000000007059110008000000000000007859110001000000000000000000000090591100110000000000000000000000185a11000800000000000000205a1100010000000000000000000000385a1100130000000000000000000000d05a1100050000000000000054311300000000000000000000000000d85a1100110000000000000000000000605b110009000000000000006c5b1100010000000000000000000000845b1100100000000000000000000000045c11000e00000000000000145c11000100000000000000000000002c5c1100100000000000000000000000ac5c11001300000000000000c05c1100010000000000000000000000d85c1100080000000000000000000000185d11001800000000000000305d1100010000000000000000000000485d1100070000000000000000000000805d11001500000000000000985d1100010000000000000000000000b05d1100070000000000000000000000e85d11000d0000000000000054311300000000000000000000000000f85d1100090000000000000000000000405e11000d0000000000000054311300000000000000000000000000505e11000a0000000000000000000000a05e11001100000000000000b45e1100010000000000000000000000cc5e11000800000000000000000000000c5f11000d000000000000001c5f11000200000000000000000000004c5f11000a00000000000000000000009c5f1100140000000000000054311300000000000000000000000000b05f1100080000000000000000000000f05f1100150000000000000008601100020000000000000000000000386011000d0000000000000000000000a06011000e00000000000000b0601100020000000000000000000000e06011001c0000000000000000000000c0611100060000000000000034571100010000000000000000000000c86111000e00000000000000000000003862110011000000000000004c6211000200000000000000000000007c621100150000000000000000000000246311000a000000000000001c5f1100020000000000000000000000306311000f0000000000000000000000a86311000400000000000000ac631100010000000000000000000000c46311000d00000000000000626f6e6400000000407911000a0000000000000085fc1100230000000000000048b6120005000000000000004db612001500000000000000a87911000500000000000000ad7911001f000000f4871100590000004d8811002100000054311300000000006e8811004c0000005431130000000000ba88110049000000543113000000000053871100100000005431130000000000f2eb12000b00000003891100350000006387110008000000388911001a00000054311300000000005289110054000000a689110050000000f6891100130000008b7711000d000000c15f12000b000000098a11004c000000558a11003800000036ec12000c000000626f6e645f6578747261000000000000e68711000e000000000000004db61200150000009785110059000000f08511000d0000005431130000000000fd851100540000005186110059000000aa861100130000005431130000000000bd86110058000000158711003e000000543113000000000053871100100000005431130000000000f2eb12000b000000287811003a00000063871100080000000d851100100000006b8711000d000000c15f12000b0000007887110045000000bd8711002900000036ec12000c000000756e626f6e6400000000000048b6120005000000000000004db612001500000028811100550000007d81110040000000bd811100490000005431130000000000068211005200000058821100300000005431130000000000888211004f000000d78211004f000000268311003f00000054311300000000009c64110055000000fe7911004300000054311300000000006583110012000000543113000000000077831100260000005431130000000000f2eb12000b0000009d831100500000006278110026000000ed83110059000000468411005c000000a284110054000000f6841100170000000d85110010000000ba7811000b0000008b7711000d000000c15f12000b0000001d8511004700000064851100290000008d8511000a00000077697468647261775f756e626f6e646564000000000000009d7511001200000000000000cbed120003000000147d11004b00000054311300000000005f7d11004d000000ac7d11001300000054311300000000009c64110055000000fe791100430000005431130000000000bf7d1100130000005431130000000000d27d11001b0000005431130000000000f2eb12000b000000ed7d110055000000427e110051000000937e11003d000000d07e11005e0000008878110032000000756d1100100000002e7f110042000000707f110008000000787f110049000000c17f11002a000000eb7f110006000000f17f11005100000042801100230000006580110054000000b98011002c000000c56811001d000000e58011004300000036ec12000c00000076616c696461746500000000017d11000500000000000000067d11000e000000837c11003a0000005431130000000000656411003700000054311300000000009c64110055000000fe791100430000005431130000000000f2eb12000b000000287811003a00000062781100260000008878110032000000157011000c0000008b7711000d000000c15f12000b000000bd7c110024000000e17c11002000000036ec12000c0000006e6f6d696e617465000000007c7c110007000000000000006366110028000000a17a1100440000005431130000000000e57a110054000000bb6c11002300000054311300000000009c64110055000000fe791100430000005431130000000000f2eb12000b000000397b11004c000000857b110040000000c57b110036000000787911000a000000fb7b11000d000000087c110021000000c15f12000b000000297c1100320000005b7c11002100000036ec12000c0000006368696c6c000000cc791100320000005431130000000000656411003700000054311300000000009c64110055000000fe791100430000005431130000000000f2eb12000b000000287811003a000000417a1100150000008878110032000000567a1100090000008b7711000d000000c15f12000b0000005f7a110022000000817a11002000000036ec12000c0000007365745f706179656500000000000000a87911000500000000000000ad7911001f0000004a7911002e0000005431130000000000656411003700000054311300000000009c641100550000005431130000000000f2eb12000b000000287811003a00000062781100260000008878110032000000787911000a0000004f7411000f000000c0ef12000d0000008279110013000000957911001300000036ec12000c0000007365745f636f6e74726f6c6c6572000000000000407911000a0000000000000085fc110023000000af77110024000000543113000000000065641100370000005431130000000000d3771100550000005431130000000000f2eb12000b000000287811003a00000062781100260000008878110032000000ba7811000b0000008b7711000d000000c15f12000b000000c57811003d000000027911003e00000036ec12000c0000007365745f76616c696461746f725f636f756e740000000000871913000300000000000000d2a012000c000000667711002500000054311300000000002d741100220000005431130000000000f2eb12000b0000008b7711000d000000987711001700000036ec12000c000000696e6372656173655f76616c696461746f725f636f756e74000000005c7711000a00000000000000d2a012000c000000317711002b00000054311300000000002d741100220000005431130000000000f2eb12000b0000000a7711002100000036ec12000c0000007363616c655f76616c696461746f725f636f756e74000000000000002b7711000600000000000000c1ef110007000000d57611003500000054311300000000002d741100220000005431130000000000f2eb12000b0000000a7711002100000036ec12000c000000666f7263655f6e6f5f65726173000000a97611002c00000054311300000000002d741100220000005431130000000000f2eb12000b00000088761100100000004f7411000f0000005e7411001200000036ec12000c000000666f7263655f6e65775f6572610000000d76110053000000607611002800000054311300000000002d741100220000005431130000000000f2eb12000b00000088761100100000004f7411000f000000987611001100000036ec12000c0000007365745f696e76756c6e657261626c657300000000000000007611000d000000000000002c1a130011000000af7511003300000054311300000000002d741100220000005431130000000000f2eb12000b000000e275110007000000e97511001700000036ec12000c000000666f7263655f756e7374616b6500000000000000987511000500000000000000e3f812000c000000000000009d7511001200000000000000cbed120003000000707411004300000054311300000000002d741100220000005431130000000000f2eb12000b000000b37411003b000000ee7411002e0000001c751100610000007d7511001b00000036ec12000c000000666f7263655f6e65775f6572615f616c77617973ec7311004100000054311300000000002d741100220000005431130000000000f2eb12000b0000004f7411000f0000005e7411001200000036ec12000c00000063616e63656c5f64656665727265645f736c617368000000000000008b72110003000000000000008e7211000800000000000000d77311000d00000000000000e47311000800000096721100260000005431130000000000bc7211002d0000005431130000000000e9721100410000005431130000000000f2eb12000b0000002a731100150000003f7311002e0000006d73110035000000a27311001a000000bc7311001b00000036ec12000c0000007061796f75745f7374616b6572730000000000007c7211000f00000000000000e3f812000c000000000000008b72110003000000000000008e72110008000000f36d1100440000005431130000000000376e1100530000008a6e11004a000000d46e11004d0000005431130000000000216f110056000000776f11001e0000005431130000000000956f1100400000005431130000000000f2eb12000b000000d56f110040000000f40d120031000000157011000c0000002170110047000000687011000800000070701100220000009270110031000000c15f12000b000000c37011004a0000000d7111004b00000058711100440000009c711100360000005431130000000000d271110054000000267211005600000036ec12000c0000007265626f6e6400002e6c1100380000005431130000000000666c110055000000bb6c1100230000005431130000000000f2eb12000b000000de6c110035000000136d110025000000386d11003d000000756d110010000000c0ef12000d000000856d110040000000c56d11002e00000036ec12000c0000007365745f686973746f72795f646570746800000000000000fa6b110011000000000000000b6c110011000000000000001c6c11001200000000000000d2a012000c000000e26811004c0000002e691100200000005431130000000000355f12000c0000004e691100440000009269110052000000e469110051000000356a110051000000866a1100280000005431130000000000ae6a1100150000005431130000000000f2eb12000b000000c36a110038000000fb6a11000f000000c0ef12000d0000000a6b110028000000326b11001c0000004e6b11004c0000009a6b11006000000036ec12000c000000726561705f737461736800008b66110058000000e3661100580000003b6711003e0000005431130000000000796711002400000054311300000000009d671100400000005431130000000000f2eb12000b000000dd67110049000000c15f12000b00000026681100360000005c68110069000000c56811001d00000036ec12000c0000006b69636b00000000791b1300030000000000000063661100280000002c641100390000005431130000000000656411003700000054311300000000009c64110055000000f164110052000000436511002600000054311300000000006965110054000000bd651100310000005431130000000000ee65110056000000446611001f0000002052656d6f76652074686520676976656e206e6f6d696e6174696f6e732066726f6d207468652063616c6c696e672076616c696461746f722e20456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e20416e642c2069742063616e206265206f6e6c792063616c6c6564207768656e205b60457261456c656374696f6e537461747573605d2069732060436c6f736564602e2054686520636f6e74726f6c6c6572206163636f756e742073686f756c6420726570726573656e7420612076616c696461746f722e202d206077686f603a2041206c697374206f66206e6f6d696e61746f72207374617368206163636f756e74732077686f20617265206e6f6d696e6174696e6720746869732076616c696461746f7220776869636820202073686f756c64206e6f206c6f6e676572206265206e6f6d696e6174696e6720746869732076616c696461746f722e204e6f74653a204d616b696e6720746869732063616c6c206f6e6c79206d616b65732073656e736520696620796f7520666972737420736574207468652076616c696461746f7220707265666572656e63657320746f20626c6f636b20616e792066757274686572206e6f6d696e6174696f6e732e5665633c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263653e2052656d6f766520616c6c20646174612073747275637475726520636f6e6365726e696e672061207374616b65722f7374617368206f6e6365206974732062616c616e636520697320617420746865206d696e696d756d2e205468697320697320657373656e7469616c6c79206571756976616c656e7420746f206077697468647261775f756e626f6e64656460206578636570742069742063616e2062652063616c6c656420627920616e796f6e6520616e6420746865207461726765742060737461736860206d7573742068617665206e6f2066756e6473206c656674206265796f6e64207468652045442e20546869732063616e2062652063616c6c65642066726f6d20616e79206f726967696e2e202d20607374617368603a20546865207374617368206163636f756e7420746f20726561702e204974732062616c616e6365206d757374206265207a65726f2e20436f6d706c65786974793a204f285329207768657265205320697320746865206e756d626572206f6620736c617368696e67207370616e73206f6e20746865206163636f756e742e202d2052656164733a205374617368204163636f756e742c20426f6e6465642c20536c617368696e67205370616e732c204c6f636b73202d205772697465733a20426f6e6465642c20536c617368696e67205370616e73202869662053203e2030292c204c65646765722c2050617965652c2056616c696461746f72732c204e6f6d696e61746f72732c205374617368204163636f756e742c204c6f636b73202d2057726974657320456163683a205370616e536c617368202a2053205365742060486973746f72794465707468602076616c75652e20546869732066756e6374696f6e2077696c6c2064656c65746520616e7920686973746f727920696e666f726d6174696f6e207768656e2060486973746f727944657074686020697320726564756365642e202d20606e65775f686973746f72795f6465707468603a20546865206e657720686973746f727920646570746820796f7520776f756c64206c696b6520746f207365742e202d20606572615f6974656d735f64656c65746564603a20546865206e756d626572206f66206974656d7320746861742077696c6c2062652064656c6574656420627920746869732064697370617463682e20202020546869732073686f756c64207265706f727420616c6c207468652073746f72616765206974656d7320746861742077696c6c2062652064656c6574656420627920636c656172696e67206f6c642020202065726120686973746f72792e204e656564656420746f207265706f727420616e2061636375726174652077656967687420666f72207468652064697370617463682e20547275737465642062792020202060526f6f746020746f207265706f727420616e206163637572617465206e756d6265722e204f726967696e206d75737420626520726f6f742e202d20453a204e756d626572206f6620686973746f7279206465707468732072656d6f7665642c20692e652e203130202d3e2037203d2033202d205765696768743a204f28452920202020202d2052656164733a2043757272656e74204572612c20486973746f727920446570746820202020202d205772697465733a20486973746f727920446570746820202020202d20436c6561722050726566697820456163683a20457261205374616b6572732c204572615374616b657273436c69707065642c204572617356616c696461746f72507265667320202020202d2057726974657320456163683a204572617356616c696461746f725265776172642c2045726173526577617264506f696e74732c2045726173546f74616c5374616b652c2045726173537461727453657373696f6e496e6465786e65775f686973746f72795f6465707468436f6d706163743c457261496e6465783e5f6572615f6974656d735f64656c65746564205265626f6e64206120706f7274696f6e206f6620746865207374617368207363686564756c656420746f20626520756e6c6f636b65642e20546865206469737061746368206f726967696e206d757374206265207369676e65642062792074686520636f6e74726f6c6c65722c20616e642069742063616e206265206f6e6c792063616c6c6564207768656e205b60457261456c656374696f6e537461747573605d2069732060436c6f736564602e202d2054696d6520636f6d706c65786974793a204f284c292c207768657265204c20697320756e6c6f636b696e67206368756e6b73202d20426f756e64656420627920604d41585f554e4c4f434b494e475f4348554e4b53602e202d2053746f72616765206368616e6765733a2043616e277420696e6372656173652073746f726167652c206f6e6c792064656372656173652069742e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d20202020202d2052656164733a20457261456c656374696f6e5374617475732c204c65646765722c204c6f636b732c205b4f726967696e204163636f756e745d20202020202d205772697465733a205b4f726967696e204163636f756e745d2c204c6f636b732c204c656467657220506179206f757420616c6c20746865207374616b65727320626568696e6420612073696e676c652076616c696461746f7220666f7220612073696e676c65206572612e202d206076616c696461746f725f73746173686020697320746865207374617368206163636f756e74206f66207468652076616c696461746f722e205468656972206e6f6d696e61746f72732c20757020746f20202060543a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602c2077696c6c20616c736f207265636569766520746865697220726577617264732e202d206065726160206d617920626520616e7920657261206265747765656e20605b63757272656e745f657261202d20686973746f72795f64657074683b2063757272656e745f6572615d602e20546865206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e20416e79206163636f756e742063616e2063616c6c20746869732066756e6374696f6e2c206576656e206966206974206973206e6f74206f6e65206f6620746865207374616b6572732e20546869732063616e206f6e6c792062652063616c6c6564207768656e205b60457261456c656374696f6e537461747573605d2069732060436c6f736564602e202d2054696d6520636f6d706c65786974793a206174206d6f7374204f284d61784e6f6d696e61746f72526577617264656450657256616c696461746f72292e202d2d2d2d2d2d2d2d2d2d2d204e20697320746865204e756d626572206f66207061796f75747320666f72207468652076616c696461746f722028696e636c7564696e67207468652076616c696461746f7229205765696768743a202d205265776172642044657374696e6174696f6e205374616b65643a204f284e29202d205265776172642044657374696e6174696f6e20436f6e74726f6c6c657220284372656174696e67293a204f284e29202d20526561643a20457261456c656374696f6e5374617475732c2043757272656e744572612c20486973746f727944657074682c204572617356616c696461746f725265776172642c202020202020202020457261735374616b657273436c69707065642c2045726173526577617264506f696e74732c204572617356616c696461746f725072656673202838206974656d7329202d205265616420456163683a20426f6e6465642c204c65646765722c2050617965652c204c6f636b732c2053797374656d204163636f756e74202835206974656d7329202d20577269746520456163683a2053797374656d204163636f756e742c204c6f636b732c204c6564676572202833206974656d73292020204e4f54453a20776569676874732061726520617373756d696e672074686174207061796f75747320617265206d61646520746f20616c697665207374617368206163636f756e7420285374616b6564292e202020506179696e67206576656e2061206465616420636f6e74726f6c6c65722069732063686561706572207765696768742d776973652e20576520646f6e277420646f20616e7920726566756e647320686572652e76616c696461746f725f7374617368657261457261496e6465782043616e63656c20656e6163746d656e74206f66206120646566657272656420736c6173682e2043616e2062652063616c6c6564206279207468652060543a3a536c61736843616e63656c4f726967696e602e20506172616d65746572733a2065726120616e6420696e6469636573206f662074686520736c617368657320666f7220746861742065726120746f206b696c6c2e20436f6d706c65786974793a204f2855202b2053292077697468205520756e6170706c69656420736c6173686573207765696768746564207769746820553d3130303020616e64205320697320746865206e756d626572206f6620736c61736820696e646963657320746f2062652063616e63656c65642e202d20526561643a20556e6170706c69656420536c6173686573202d2057726974653a20556e6170706c69656420536c6173686573736c6173685f696e64696365735665633c7533323e20466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f662073657373696f6e7320696e646566696e6974656c792e20546865206469737061746368206f726967696e206d75737420626520526f6f742e202d205765696768743a204f283129202d2057726974653a20466f72636545726120466f72636520612063757272656e74207374616b657220746f206265636f6d6520636f6d706c6574656c7920756e7374616b65642c20696d6d6564696174656c792e204f285329207768657265205320697320746865206e756d626572206f6620736c617368696e67207370616e7320746f2062652072656d6f7665642052656164733a20426f6e6465642c20536c617368696e67205370616e732c204163636f756e742c204c6f636b73205772697465733a20426f6e6465642c20536c617368696e67205370616e73202869662053203e2030292c204c65646765722c2050617965652c2056616c696461746f72732c204e6f6d696e61746f72732c204163636f756e742c204c6f636b732057726974657320456163683a205370616e536c617368202a205373746173686e756d5f736c617368696e675f7370616e7320536574207468652076616c696461746f72732077686f2063616e6e6f7420626520736c61736865642028696620616e79292e202d204f285629202d2057726974653a20496e76756c6e657261626c6573696e76756c6e657261626c657320466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f6620746865206e6578742073657373696f6e2e20416674657220746869732c2069742077696c6c20626520726573657420746f206e6f726d616c20286e6f6e2d666f7263656429206265686176696f75722e202d204e6f20617267756d656e74732e202d20577269746520466f72636545726120466f72636520746865726520746f206265206e6f206e6577206572617320696e646566696e6974656c792e205363616c652075702074686520696465616c206e756d626572206f662076616c696461746f7273206279206120666163746f722e2053616d65206173205b607365745f76616c696461746f725f636f756e74605d2e666163746f7220496e6372656d656e74732074686520696465616c206e756d626572206f662076616c696461746f72732e6164646974696f6e616c20536574732074686520696465616c206e756d626572206f662076616c696461746f72732e205765696768743a204f2831292057726974653a2056616c696461746f7220436f756e74202852652d297365742074686520636f6e74726f6c6c6572206f6620612073746173682e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c65722e202d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e202d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732e202d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e202d2d2d2d2d2d2d2d2d2d202d20526561643a20426f6e6465642c204c6564676572204e657720436f6e74726f6c6c65722c204c6564676572204f6c6420436f6e74726f6c6c6572202d2057726974653a20426f6e6465642c204c6564676572204e657720436f6e74726f6c6c65722c204c6564676572204f6c6420436f6e74726f6c6c6572636f6e74726f6c6c6572202852652d2973657420746865207061796d656e742074617267657420666f72206120636f6e74726f6c6c65722e202d2d2d2d2d2d2d2d2d20202020202d20526561643a204c656467657220202020202d2057726974653a205061796565706179656552657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e204465636c617265206e6f2064657369726520746f206569746865722076616c6964617465206f72206e6f6d696e6174652e20416e642c2069742063616e206265206f6e6c792063616c6c6564207768656e205b60457261456c656374696f6e537461747573605d2069732060436c6f736564602e202d20436f6e7461696e73206f6e6520726561642e202d2d2d2d2d2d2d2d202d20526561643a20457261456c656374696f6e5374617475732c204c6564676572202d2057726974653a2056616c696461746f72732c204e6f6d696e61746f7273204465636c617265207468652064657369726520746f206e6f6d696e6174652060746172676574736020666f7220746865206f726967696e20636f6e74726f6c6c65722e20456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e20546869732063616e206f6e6c792062652063616c6c6564207768656e202d20546865207472616e73616374696f6e277320636f6d706c65786974792069732070726f706f7274696f6e616c20746f207468652073697a65206f662060746172676574736020284e292077686963682069732063617070656420617420436f6d7061637441737369676e6d656e74733a3a4c494d495420284d41585f4e4f4d494e4154494f4e53292e202d20426f74682074686520726561647320616e642077726974657320666f6c6c6f7720612073696d696c6172207061747465726e2e205765696768743a204f284e29207768657265204e20697320746865206e756d626572206f662074617267657473202d2052656164733a2045726120456c656374696f6e205374617475732c204c65646765722c2043757272656e7420457261202d205772697465733a2056616c696461746f72732c204e6f6d696e61746f727374617267657473204465636c617265207468652064657369726520746f2076616c696461746520666f7220746865206f726967696e20636f6e74726f6c6c65722e202d20526561643a2045726120456c656374696f6e205374617475732c204c6564676572202d2057726974653a204e6f6d696e61746f72732c2056616c696461746f7273707265667356616c696461746f7250726566732052656d6f766520616e7920756e6c6f636b6564206368756e6b732066726f6d207468652060756e6c6f636b696e67602071756575652066726f6d206f7572206d616e6167656d656e742e205468697320657373656e7469616c6c7920667265657320757020746861742062616c616e636520746f206265207573656420627920746865207374617368206163636f756e7420746f20646f2077686174657665722069742077616e74732e20456d697473206057697468647261776e602e2053656520616c736f205b6043616c6c3a3a756e626f6e64605d2e202d20436f756c6420626520646570656e64656e74206f6e2074686520606f726967696e6020617267756d656e7420616e6420686f77206d7563682060756e6c6f636b696e6760206368756e6b732065786973742e2020497420696d706c6965732060636f6e736f6c69646174655f756e6c6f636b656460207768696368206c6f6f7073206f76657220604c65646765722e756e6c6f636b696e67602c2077686963682069732020696e6469726563746c7920757365722d636f6e74726f6c6c65642e20536565205b60756e626f6e64605d20666f72206d6f72652064657461696c2e202d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732c20796574207468652073697a65206f6620776869636820636f756c64206265206c61726765206261736564206f6e20606c6564676572602e20436f6d706c6578697479204f285329207768657265205320697320746865206e756d626572206f6620736c617368696e67207370616e7320746f2072656d6f7665205570646174653a202d2052656164733a20457261456c656374696f6e5374617475732c204c65646765722c2043757272656e74204572612c204c6f636b732c205b4f726967696e204163636f756e745d202d205772697465733a205b4f726967696e204163636f756e745d2c204c6f636b732c204c6564676572204b696c6c3a202d2052656164733a20457261456c656374696f6e5374617475732c204c65646765722c2043757272656e74204572612c20426f6e6465642c20536c617368696e67205370616e732c205b4f726967696e2020204163636f756e745d2c204c6f636b732c2042616c616e63654f66207374617368202d205772697465733a20426f6e6465642c20536c617368696e67205370616e73202869662053203e2030292c204c65646765722c2050617965652c2056616c696461746f72732c204e6f6d696e61746f72732c2020205b4f726967696e204163636f756e745d2c204c6f636b732c2042616c616e63654f662073746173682e204e4f54453a2057656967687420616e6e6f746174696f6e20697320746865206b696c6c207363656e6172696f2c20776520726566756e64206f74686572776973652e205363686564756c65206120706f7274696f6e206f662074686520737461736820746f20626520756e6c6f636b656420726561647920666f72207472616e73666572206f75742061667465722074686520626f6e6420706572696f6420656e64732e2049662074686973206c656176657320616e20616d6f756e74206163746976656c7920626f6e646564206c657373207468616e20543a3a43757272656e63793a3a6d696e696d756d5f62616c616e636528292c207468656e20697420697320696e6372656173656420746f207468652066756c6c20616d6f756e742e204f6e63652074686520756e6c6f636b20706572696f6420697320646f6e652c20796f752063616e2063616c6c206077697468647261775f756e626f6e6465646020746f2061637475616c6c79206d6f7665207468652066756e6473206f7574206f66206d616e6167656d656e7420726561647920666f72207472616e736665722e204e6f206d6f7265207468616e2061206c696d69746564206e756d626572206f6620756e6c6f636b696e67206368756e6b73202873656520604d41585f554e4c4f434b494e475f4348554e4b5360292063616e20636f2d657869737473206174207468652073616d652074696d652e20496e207468617420636173652c205b6043616c6c3a3a77697468647261775f756e626f6e646564605d206e65656420746f2062652063616c6c656420666972737420746f2072656d6f766520736f6d65206f6620746865206368756e6b732028696620706f737369626c65292e20456d6974732060556e626f6e646564602e2053656520616c736f205b6043616c6c3a3a77697468647261775f756e626f6e646564605d2e202d20496e646570656e64656e74206f662074686520617267756d656e74732e204c696d697465642062757420706f74656e7469616c6c79206578706c6f697461626c6520636f6d706c65786974792e202d20456163682063616c6c20287265717569726573207468652072656d61696e646572206f662074686520626f6e6465642062616c616e636520746f2062652061626f766520606d696e696d756d5f62616c616e6365602920202077696c6c2063617573652061206e657720656e74727920746f20626520696e73657274656420696e746f206120766563746f722028604c65646765722e756e6c6f636b696e676029206b65707420696e2073746f726167652e202020546865206f6e6c792077617920746f20636c65616e207468652061666f72656d656e74696f6e65642073746f72616765206974656d20697320616c736f20757365722d636f6e74726f6c6c6564207669612020206077697468647261775f756e626f6e646564602e202d204f6e6520444220656e7472792e202d20526561643a20457261456c656374696f6e5374617475732c204c65646765722c2043757272656e744572612c204c6f636b732c2042616c616e63654f662053746173682c202d2057726974653a204c6f636b732c204c65646765722c2042616c616e63654f662053746173682c203c2f7765696768743e2041646420736f6d6520657874726120616d6f756e742074686174206861766520617070656172656420696e207468652073746173682060667265655f62616c616e63656020696e746f207468652062616c616e636520757020666f72207374616b696e672e20557365207468697320696620746865726520617265206164646974696f6e616c2066756e647320696e20796f7572207374617368206163636f756e74207468617420796f75207769736820746f20626f6e642e20556e6c696b65205b60626f6e64605d206f72205b60756e626f6e64605d20746869732066756e6374696f6e20646f6573206e6f7420696d706f736520616e79206c696d69746174696f6e206f6e2074686520616d6f756e7420746861742063616e2062652061646465642e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c657220616e642069742063616e206265206f6e6c792063616c6c6564207768656e205b60457261456c656374696f6e537461747573605d2069732060436c6f736564602e20456d6974732060426f6e646564602e202d204f2831292e202d2d2d2d2d2d2d2d2d2d2d2d202d20526561643a2045726120456c656374696f6e205374617475732c20426f6e6465642c204c65646765722c205b4f726967696e204163636f756e745d2c204c6f636b73202d2057726974653a205b4f726967696e204163636f756e745d2c204c6f636b732c204c65646765726d61785f6164646974696f6e616c2054616b6520746865206f726967696e206163636f756e74206173206120737461736820616e64206c6f636b207570206076616c756560206f66206974732062616c616e63652e2060636f6e74726f6c6c6572602077696c6c20626520746865206163636f756e74207468617420636f6e74726f6c732069742e206076616c756560206d757374206265206d6f7265207468616e2074686520606d696e696d756d5f62616c616e636560207370656369666965642062792060543a3a43757272656e6379602e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20627920746865207374617368206163636f756e742e202d20496e646570656e64656e74206f662074686520617267756d656e74732e204d6f64657261746520636f6d706c65786974792e202d20546872656520657874726120444220656e74726965732e204e4f54453a2054776f206f66207468652073746f726167652077726974657320286053656c663a3a626f6e646564602c206053656c663a3a7061796565602920617265205f6e657665725f20636c65616e656420756e6c6573732074686520606f726967696e602066616c6c732062656c6f77205f6578697374656e7469616c206465706f7369745f20616e6420676574732072656d6f76656420617320647573742e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d202d20526561643a20426f6e6465642c204c65646765722c205b4f726967696e204163636f756e745d2c2043757272656e74204572612c20486973746f72792044657074682c204c6f636b73202d2057726974653a20426f6e6465642c2050617965652c205b4f726967696e204163636f756e745d2c204c6f636b732c204c656467657200000000000000e09411000c0000000000000000000000cbed1200030000000000000000000000000000000000000000000000000000000000000054311300ec9411000000000000000000fc94110007000000000000000100000000000000349511000e0000000000000000000000cbed120003000000000000000000000000000000000000000000000000000000000000005431130044951100000000000000000054951100010000000000000001000000000000005c951100150000000000000000000000cbed120003000000000000000000000000000000000000000000000000000000000000005431130074951100000000000000000084951100010000000000000001000000000000008c9511000d00000000000000000000002c1a13001100000000000000000000000000000000000000000000000000000000000000543113009c9511000000000000000000ac95110003000000000000000100000000000000c4951100060000000105000000000000e3f812000c00000000000000e3f812000c0000000000000000000000000000000000000054311300cc9511000000000000000000dc9511000100000000000000000000000000000069511100060000000102000000000000e3f812000c00000000000000e4951100290000000000000000000000000000000000000054311300109611000000000000000000209611000100000000000000000000000000000028961100050000000105000000000000e3f812000c00000000000000ad7911001f00000000000000000000000000000000000000543113003096110000000000000000004096110001000000000000000100000000000000f04e11000a0000000105000000000000e3f812000c00000000000000067d11000e000000000000000000000000000000000000005431130048961100000000000000000058961100010000000000000001000000000000005f5111000a0000000105000000000000e3f812000c00000000000000609611001900000000000000000000000000000000000000543113007c96110000000000000000008c96110001000000000000000000000000000000949611000a00000000000000000000008e721100080000000000000000000000000000000000000000000000000000000000000054311300a09611000000000000000000b096110004000000000000000000000000000000d0961100090000000000000000000000d99611000d0000000000000000000000000000000000000000000000000000000000000054311300e89611000000000000000000f896110004000000000000000000000000000000189711001500000001050000000000008e7211000800000000000000a03712000c00000000000000000000000000000000000000543113003097110000000000000000004097110004000000000000000000000000000000b24e11000b00000002050500000000008e7211000800000000000000e3f812000c00000000000000609711002400000000000000543113008497110000000000000000009497110006000000000000000100000000000000c49711001200000002050500000000008e7211000800000000000000e3f812000c0000000000000060971100240000000000000054311300d89711000000000000000000e89711000b000000000000000100000000000000409811001200000002050500000000008e7211000800000000000000e3f812000c00000000000000067d11000e000000000000005431130054981100000000000000000064981100050000000000000001000000000000008c9811001300000001050000000000008e721100080000000000000057a912000c0000000000000000000000000000000000000054311300a09811000000000000000000b098110003000000000000000000000000000000ed4f11001000000001050000000000008e7211000800000000000000c89811001d0000000000000000000000000000000000000054311300e89811000000000000000000f898110002000000000000000100000000000000089911000e00000001050000000000008e721100080000000000000057a912000c00000000000000000000000000000000000000543113001899110000000000000000002899110002000000000000000100000000000000389911000800000000000000000000004099110007000000000000000000000000000000000000000000000000000000000000005431130048991100000000000000000058991100010000000000000001000000000000006099110013000000000000000000000055f3120007000000000000000000000000000000000000000000000000000000000000005431130074991100000000000000000084991100030000000000000001000000000000009c99110013000000000000000000000057a912000c0000000000000000000000000000000000000000000000000000000000000054311300b09911000000000000000000c099110002000000000000000100000000000000d09911001000000001050000000000008e7211000800000000000000e09911002f0000000000000000000000000000000000000054311300109a11000000000000000000209a110001000000000000000100000000000000289a11000a0000000000000000000000329a11001d0000000000000000000000000000000000000000000000000000000000000054311300509a11000000000000000000609a110004000000000000000100000000000000fd4f11001300000002050500000000008e7211000800000000000000e3f812000c00000000000000809a1100170000000000000054311300989a11000000000000000000a89a110002000000000000000000000000000000105011001300000002050500000000008e7211000800000000000000e3f812000c0000000000000057a912000c0000000000000054311300b89a11000000000000000000c89a1100010000000000000000000000000000002c5011000d0000000105000000000000e3f812000c00000000000000d09a1100170000000000000000000000000000000000000054311300e89a11000000000000000000f89a11000100000000000000000000000000000023501100090000000105000000000000009b11002300000000000000239b1100220000000000000000000000000000000000000054311300489b11000000000000000000589b110002000000000000000100000000000000689b11001600000000000000000000008e721100080000000000000000000000000000000000000000000000000000000000000054311300809b11000000000000000000909b110001000000000000000000000000000000989b1100150000000000000000000000a03712000c0000000000000000000000000000000000000000000000000000000000000054311300b09b11000000000000000000c09b1100030000000000000001000000000000009cbe12000e0000000000000000000000aabe1200080000000000000000000000000000000000000000000000000000000000000054311300d89b11000000000000000000e89b1100040000000000000001000000486973746f72794465707468120000000000000001000000670000009fa91100230000005431130000000000c2a911004e000000543113000000000010aa11005800000068aa11004e000000b6aa11000c00000056616c696461746f72436f756e7400001200000000000000010000002200000075a911002a0000004d696e696d756d56616c696461746f72436f756e740000001200000000000000010000002200000025a9110050000000496e76756c6e657261626c65730000001200000000000000010000003f00000051a8110056000000a7a8110053000000faa811002b000000426f6e64656400001200000000000000010000002300000011a81100400000005374616b696e674c65646765723c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e00000012000000000000000100000023000000c0a711005100000050617965650000001200000000000000010000005e00000087a71100390000001200000000000000010000006800000036a71100510000004e6f6d696e6174696f6e733c543a3a4163636f756e7449643e00000012000000000000000100000023000000dda611005900000043757272656e744572610000120000000000000001000000230000004da6110017000000543113000000000064a6110059000000bda6110020000000416374697665457261416374697665457261496e666f00001200000000000000010000002300000096a51100360000005431130000000000cca511005600000022a611002b00000045726173537461727453657373696f6e496e64657800000012000000000000000100000023000000b6a411004c000000543113000000000002a51100580000005aa511003c0000004578706f737572653c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e1200000000000000010000006900000098a411001e000000543113000000000038a2110058000000543113000000000090a211002a00000048a4110050000000457261735374616b657273436c6970706564000012000000000000000100000069000000baa21100260000005431130000000000e0a211005600000036a31100370000006da3110047000000b4a311003d0000005431130000000000f1a3110057000000543113000000000090a211002a00000048a41100500000004572617356616c696461746f725072656673000012000000000000000100000068000000f4a1110044000000543113000000000038a2110058000000543113000000000090a211002a0000004572617356616c696461746f7252657761726400120000000000000001000000230000006aa11100420000005431130000000000aca1110048000000457261526577617264506f696e74733c543a3a4163636f756e7449643e0000001200000000000000010000006a000000f6a011002b00000021a111004900000045726173546f74616c5374616b6500001200000000000000010000004100000074a011003b000000afa0110047000000466f726365457261466f7263696e67001200000000000000010000005e0000005fa0110015000000536c6173685265776172644672616374696f6e0012000000000000000100000022000000e89f11003e000000543113000000000026a011003900000043616e63656c6564536c6173685061796f75740012000000000000000100000041000000689f110045000000ad9f11003b000000556e6170706c696564536c61736865735665633c556e6170706c696564536c6173683c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e3e001200000000000000010000006b000000379f110031000000426f6e646564457261735665633c28457261496e6465782c2053657373696f6e496e646578293e001200000000000000010000006c0000008d9e1100490000005431130000000000d69e110032000000089f11002f0000002850657262696c6c2c2042616c616e63654f663c543e290012000000000000000100000023000000209e110051000000719e11001c00000012000000000000000100000023000000c89d110058000000736c617368696e673a3a536c617368696e675370616e730012000000000000000100000023000000a59d11002300000028543a3a4163636f756e7449642c20736c617368696e673a3a5370616e496e64657829736c617368696e673a3a5370616e5265636f72643c42616c616e63654f663c543e3e0000001200000000000000010000006d000000289d11004f000000779d11002e0000004561726c69657374556e6170706c696564536c617368000012000000000000000100000023000000e99c11003f00000043757272656e74506c616e6e656453657373696f6e00000012000000000000000100000022000000639c11003a00000054311300000000009d9c11004c0000001200000000000000010000006e000000089c110033000000dcbe12001f00000054311300000000003b9c1100280000002054727565206966206e6574776f726b20686173206265656e20757067726164656420746f20746869732076657273696f6e2e20546869732069732073657420746f2076362e302e3020666f72206e6577206e6574776f726b732e20546865206c61737420706c616e6e65642073657373696f6e207363686564756c6564206279207468652073657373696f6e2070616c6c65742e2054686973206973206261736963616c6c7920696e2073796e632077697468207468652063616c6c20746f205b6053657373696f6e4d616e616765723a3a6e65775f73657373696f6e605d2e20546865206561726c696573742065726120666f72207768696368207765206861766520612070656e64696e672c20756e6170706c69656420736c6173682e205265636f72647320696e666f726d6174696f6e2061626f757420746865206d6178696d756d20736c617368206f6620612073746173682077697468696e206120736c617368696e67207370616e2c2061732077656c6c20617320686f77206d7563682072657761726420686173206265656e2070616964206f75742e20536c617368696e67207370616e7320666f72207374617368206163636f756e74732e20416c6c20736c617368696e67206576656e7473206f6e206e6f6d696e61746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682076616c7565206f6620746865206572612e20416c6c20736c617368696e67206576656e7473206f6e2076616c696461746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682070726f706f7274696f6e20616e6420736c6173682076616c7565206f6620746865206572612e2041206d617070696e672066726f6d207374696c6c2d626f6e646564206572617320746f207468652066697273742073657373696f6e20696e646578206f662074686174206572612e204d75737420636f6e7461696e7320696e666f726d6174696f6e20666f72206572617320666f72207468652072616e67653a20605b6163746976655f657261202d20626f756e64696e675f6475726174696f6e3b206163746976655f6572615d6020416c6c20756e6170706c69656420736c61736865732074686174206172652071756575656420666f72206c617465722e2054686520616d6f756e74206f662063757272656e637920676976656e20746f207265706f7274657273206f66206120736c617368206576656e74207768696368207761732063616e63656c65642062792065787472616f7264696e6172792063697263756d7374616e6365732028652e672e20676f7665726e616e6365292e205468652070657263656e74616765206f662074686520736c617368207468617420697320646973747269627574656420746f207265706f72746572732e205468652072657374206f662074686520736c61736865642076616c75652069732068616e646c6564206279207468652060536c617368602e204d6f6465206f662065726120666f7263696e672e2054686520746f74616c20616d6f756e74207374616b656420666f7220746865206c6173742060484953544f52595f44455054486020657261732e20496620746f74616c206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207374616b652069732072657475726e65642e205265776172647320666f7220746865206c6173742060484953544f52595f44455054486020657261732e20496620726577617264206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207265776172642069732072657475726e65642e2054686520746f74616c2076616c696461746f7220657261207061796f757420666f7220746865206c6173742060484953544f52595f44455054486020657261732e2045726173207468617420686176656e27742066696e697368656420796574206f7220686173206265656e2072656d6f76656420646f65736e27742068617665207265776172642e2053696d696c617220746f2060457261735374616b657273602c207468697320686f6c64732074686520707265666572656e636573206f662076616c696461746f72732e2054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e2049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e20436c6970706564204578706f73757265206f662076616c696461746f72206174206572612e20546869732069732073696d696c617220746f205b60457261735374616b657273605d20627574206e756d626572206f66206e6f6d696e61746f7273206578706f736564206973207265647563656420746f207468652060543a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602062696767657374207374616b6572732e20284e6f74653a20746865206669656c642060746f74616c6020616e6420606f776e60206f6620746865206578706f737572652072656d61696e7320756e6368616e676564292e2054686973206973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e2054686973206973206b657965642066697374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e204578706f73757265206f662076616c696461746f72206174206572612e205468652073657373696f6e20696e646578206174207768696368207468652065726120737461727420666f7220746865206c6173742060484953544f52595f44455054486020657261732e204e6f74653a205468697320747261636b7320746865207374617274696e672073657373696f6e2028692e652e2073657373696f6e20696e646578207768656e20657261207374617274206265696e67206163746976652920666f7220746865206572617320696e20605b43757272656e74457261202d20484953544f52595f44455054482c2043757272656e744572615d602e20546865206163746976652065726120696e666f726d6174696f6e2c20697420686f6c647320696e64657820616e642073746172742e2054686520616374697665206572612069732074686520657261206265696e672063757272656e746c792072657761726465642e2056616c696461746f7220736574206f66207468697320657261206d75737420626520657175616c20746f205b6053657373696f6e496e746572666163653a3a76616c696461746f7273605d2e205468652063757272656e742065726120696e6465782e205468697320697320746865206c617465737420706c616e6e6564206572612c20646570656e64696e67206f6e20686f77207468652053657373696f6e2070616c6c657420717565756573207468652076616c696461746f72207365742c206974206d6967687420626520616374697665206f72206e6f742e20546865206d61702066726f6d206e6f6d696e61746f72207374617368206b657920746f2074686520736574206f66207374617368206b657973206f6620616c6c2076616c696461746f727320746f206e6f6d696e6174652e20546865206d61702066726f6d202877616e6e616265292076616c696461746f72207374617368206b657920746f2074686520707265666572656e636573206f6620746861742076616c696461746f722e2057686572652074686520726577617264207061796d656e742073686f756c64206265206d6164652e204b657965642062792073746173682e204d61702066726f6d20616c6c2028756e6c6f636b6564292022636f6e74726f6c6c657222206163636f756e747320746f2074686520696e666f20726567617264696e6720746865207374616b696e672e204d61702066726f6d20616c6c206c6f636b65642022737461736822206163636f756e747320746f2074686520636f6e74726f6c6c6572206163636f756e742e20416e792076616c696461746f72732074686174206d6179206e6576657220626520736c6173686564206f7220666f726369626c79206b69636b65642e20497427732061205665632073696e63652074686579277265206561737920746f20696e697469616c697a6520616e642074686520706572666f726d616e636520686974206973206d696e696d616c2028776520657870656374206e6f206d6f7265207468616e20666f757220696e76756c6e657261626c65732920616e64207265737472696374656420746f20746573746e6574732e204d696e696d756d206e756d626572206f66207374616b696e67207061727469636970616e7473206265666f726520656d657267656e637920636f6e646974696f6e732061726520696d706f7365642e2054686520696465616c206e756d626572206f66207374616b696e67207061727469636970616e74732e204e756d626572206f66206572617320746f206b65657020696e20686973746f72792e20496e666f726d6174696f6e206973206b65707420666f72206572617320696e20605b63757272656e745f657261202d20686973746f72795f64657074683b2063757272656e745f6572615d602e204d757374206265206d6f7265207468616e20746865206e756d626572206f6620657261732064656c617965642062792073657373696f6e206f74686572776973652e20492e652e2061637469766520657261206d75737420616c7761797320626520696e20686973746f72792e20492e652e20606163746976655f657261203e2063757272656e745f657261202d20686973746f72795f646570746860206d7573742062652067756172616e746565642e000000000000dcab11000e00000000000000a03712000c0000000000000054311300ecab11000000000000000000fcab110001000000000000000000000004ac11000f000000000000008e72110008000000000000005431130014ac1100000000000000000024ac11000100000000000000000000002cac110012000000000000008e72110008000000000000005431130040ac1100000000000000000050ac110005000000000000000000000078ac11002000000000000000cbed120003000000000000005431130098ac11000000000000000000a8ac1100040000000000000000000000c8ac11000e00000000000000cbed1200030000000000000054311300d8ac11000000000000000000e8ac1100010000000000000053657373696f6e7350657245726100001200000000000000010000006f000000feae11001c000000426f6e64696e674475726174696f6e0012000000000000000100000070000000c5ae110039000000536c61736844656665724475726174696f6e000012000000000000000100000071000000fdad11004000000054311300000000003dae11002f0000006cae11004b000000b7ae11000e0000004d61784e6f6d696e61746f72526577617264656450657256616c696461746f72120000000000000001000000720000001dad11003e00000054311300000000005bad11005a000000b5ad1100480000004d61784e6f6d696e6174696f6e73000012000000000000000100000073000000f0ac11002d000000204d6178696d756d206e756d626572206f66206e6f6d696e6174696f6e7320706572206e6f6d696e61746f722e20546865206d6178696d756d206e756d626572206f66206e6f6d696e61746f727320726577617264656420666f7220656163682076616c696461746f722e20466f7220656163682076616c696461746f72206f6e6c79207468652060244d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602062696767657374207374616b6572732063616e20636c61696d207468656972207265776172642e2054686973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e204e756d626572206f662065726173207468617420736c6173686573206172652064656665727265642062792c20616674657220636f6d7075746174696f6e2e20546869732073686f756c64206265206c657373207468616e2074686520626f6e64696e67206475726174696f6e2e2053657420746f203020696620736c61736865732073686f756c64206265206170706c69656420696d6d6564696174656c792c20776974686f7574206f70706f7274756e69747920666f7220696e74657276656e74696f6e2e204e756d626572206f6620657261732074686174207374616b65642066756e6473206d7573742072656d61696e20626f6e64656420666f722e204e756d626572206f662073657373696f6e7320706572206572612e000000000000a8b011000900000000000000b4b01100030000000000000000000000ccb01100030000000000000000000000e4b011000600000000000000c0f51100020000000000000000000000ecb01100010000000000000000000000f4b011000500000000000000c0f51100020000000000000000000000fcb011000200000000000000000000000cb111001a0000000000000028b1110001000000000000000000000030b1110002000000000000000000000040b111000f000000000000005431130000000000000000000000000050b11100010000000000000000000000c49511000600000000000000c0f5110002000000000000000000000058b1110004000000000000000000000078b111000800000000000000c0f5110002000000000000000000000080b1110001000000000000000000000088b111000900000000000000c0f5110002000000000000000000000094b11100020000000000000000000000a4b111000600000000000000bccf1200020000000000000000000000acb1110001000000000000004572615061796f75740000008e72110008000000d5d1120007000000d5d1120007000000aeb411005600000004b511003100000035b511002b00000052657761726400006fb411003f000000536c61736800000010b411004900000059b41100160000004f6c64536c617368696e675265706f72744469736361726465640000a03712000c000000a5b3110047000000ecb31100240000005374616b696e67456c656374696f6e0083b3110022000000b1b21100350000005431130000000000e6b21100540000003ab3110049000000556e626f6e6465647ab211003700000057697468647261776e000000f7b11100570000004eb211002c0000004b69636b65640000b4b11100430000002041206e6f6d696e61746f7220686173206265656e206b69636b65642066726f6d20612076616c696461746f722e205c5b6e6f6d696e61746f722c2073746173685c5d20416e206163636f756e74206861732063616c6c6564206077697468647261775f756e626f6e6465646020616e642072656d6f76656420756e626f6e64696e67206368756e6b7320776f727468206042616c616e6365602066726f6d2074686520756e6c6f636b696e672071756575652e205c5b73746173682c20616d6f756e745c5d20416e206163636f756e742068617320756e626f6e646564207468697320616d6f756e742e205c5b73746173682c20616d6f756e745c5d20416e206163636f756e742068617320626f6e646564207468697320616d6f756e742e205c5b73746173682c20616d6f756e745c5d204e4f54453a2054686973206576656e74206973206f6e6c7920656d6974746564207768656e2066756e64732061726520626f6e64656420766961206120646973706174636861626c652e204e6f7461626c792c2069742077696c6c206e6f7420626520656d697474656420666f72207374616b696e672072657761726473207768656e20746865792061726520616464656420746f207374616b652e2041206e657720736574206f66207374616b6572732077617320656c65637465642e20416e206f6c6420736c617368696e67207265706f72742066726f6d2061207072696f72206572612077617320646973636172646564206265636175736520697420636f756c64206e6f742062652070726f6365737365642e205c5b73657373696f6e5f696e6465785c5d204f6e652076616c696461746f722028616e6420697473206e6f6d696e61746f72732920686173206265656e20736c61736865642062792074686520676976656e20616d6f756e742e205c5b76616c696461746f722c20616d6f756e745c5d20546865207374616b657220686173206265656e207265776172646564206279207468697320616d6f756e742e205c5b73746173682c20616d6f756e745c5d2054686520657261207061796f757420686173206265656e207365743b207468652066697273742062616c616e6365206973207468652076616c696461746f722d7061796f75743b20746865207365636f6e64206973207468652072656d61696e6465722066726f6d20746865206d6178696d756d20616d6f756e74206f66207265776172642e205c5b6572615f696e6465782c2076616c696461746f725f7061796f75742c2072656d61696e6465725c5d566f74657220736e617073686f7420746f6f2062696754617267657420736e617073686f7420746f6f206269674572726f723a2073746172745f73657373696f6e5f696e646578206d7573742062652073657420666f722063757272656e745f6572615761726e696e673a20412073657373696f6e206170706561727320746f2068617665206265656e20736b69707065642e00fc07130055000000940400000100000000000000495111000d0000000000000034b811000100000000000000000000004151110008000000000000003cb81100010000000000000000000000345111000d0000000000000044b81100010000000000000000000000275111000d000000000000004cb811000100000000000000000000001b5111000c0000000000000054b811000100000000000000000000000d5111000e000000000000005cb81100010000000000000000000000fc501100110000000000000064b81100010000000000000000000000eb50110011000000000000006cb81100010000000000000000000000df5011000c0000000000000074b81100010000000000000000000000d25011000d000000000000007cb81100010000000000000000000000c65011000c0000000000000084b81100010000000000000000000000b450110012000000000000008cb811000100000000000000000000009a5011001a0000000000000094b811000100000000000000000000008850110012000000000000009cb811000100000000000000000000007a5011000e00000000000000a4b81100010000000000000000000000655011001500000000000000acb811000100000000000000000000004f5011001600000000000000b4b81100010000000000000000000000475011000800000000000000bcb81100010000000000000000000000395011000e00000000000000c4b81100010000000000000000000000565111000900000000000000ccb811000100000000000000ddbb11001a000000c8bb110015000000afbb11001900000091bb11001e00000078bb11001900000067bb11001100000045bb11002200000012bb110033000000edba110025000000c4ba11002900000091ba1100330000007aba1100170000005bba11001f0000003aba110021000000f7b9110043000000c6b911003100000099b911002d0000004ab911004f00000024b9110026000000d4b81100500000002041206e6f6d696e6174696f6e207461726765742077617320737570706c69656420746861742077617320626c6f636b6564206f72206f7468657277697365206e6f7420612076616c696461746f722e20546f6f206d616e79206e6f6d696e6174696f6e207461726765747320737570706c6965642e20496e7465726e616c20737461746520686173206265636f6d6520736f6d65686f7720636f7272757074656420616e6420746865206f7065726174696f6e2063616e6e6f7420636f6e74696e75652e20496e636f7272656374206e756d626572206f6620736c617368696e67207370616e732070726f76696465642e20496e636f72726563742070726576696f757320686973746f727920646570746820696e7075742070726f76696465642e205265776172647320666f72207468697320657261206861766520616c7265616479206265656e20636c61696d656420666f7220746869732076616c696461746f722e204974656d7320617265206e6f7420736f7274656420616e6420756e697175652e20496e76616c6964206e756d626572206f66206e6f6d696e6174696f6e732e20496e76616c69642065726120746f207265776172642e20417474656d7074696e6720746f2074617267657420612073746173682074686174207374696c6c206861732066756e64732e2043616e206e6f74207265626f6e6420776974686f757420756e6c6f636b696e67206368756e6b732e2043616e206e6f74207363686564756c65206d6f726520756e6c6f636b206368756e6b732e2043616e206e6f7420626f6e6420776974682076616c7565206c657373207468616e206d696e696d756d2062616c616e63652e20536c617368207265636f726420696e646578206f7574206f6620626f756e64732e204475706c696361746520696e6465782e20546172676574732063616e6e6f7420626520656d7074792e20436f6e74726f6c6c657220697320616c7265616479207061697265642e20537461736820697320616c726561647920626f6e6465642e204e6f742061207374617368206163636f756e742e204e6f74206120636f6e74726f6c6c6572206163636f756e742e0012000000000000000100000074000000740000007500000012000000000000000100000074000000760000007500000042616265000000000000000070bc110008000000000000000000000078bc11000f00000000000000000000001e000000000000000000000088bc11000c0000000000000007000000706f6c6b61646f747061726974792d706f6c6b61646f7400df6acb689907609b0300000037e397fc7c91f5e40100000040fe3ad401f8959a04000000d2bc9897eed08f1502000000f78b278be53f454c02000000af2c0297a23e6d3d01000000ed99c5acb25eedf502000000cbca25e39f14238702000000687ad44ad37f03c201000000ab3c0572291feb8b01000000bc9d89904f5b923f0100000037c8bb1350a9a2a8010000006772616e62616265696d6f6e706172616173676e617564690000000040787d018017b42c00e1f505483e332d280479051065b22d80cb0905d88b312e68b0a604b8aeb02ec06a4e0498d12f2ff0c5ff0360f8ae2f70b4b903401b2e30f8477b030842ad30b0a94303e8642c31181e1203c887ab3150f9e502c0a62a32e8a6be02a0c9a932289e9b0268f02833f8657c02780ba833c89860024032273408d147026849a63498c031023070253570151e02408ba43510910c0220ae2336f8f4fc0160c1a236600eef0140e4213780aae20198f3a03748a2d70138f71f38a8cecd0190069f38780cc501a8f61d396040bd01701d9d39204bb601c82c1c3a3019b00190539b3a2093aa0190471a3b50a9a501783f993b3848a10100ca9a3b9838a10150617920444f547320746f2074686520506f6c6b61646f74206163636f756e743a53797374656d5363686564756c657254696d657374616d70496e646963657342616c616e6365735472616e73616374696f6e5061796d656e745374616b696e674f6666656e636573486973746f726963616c4772616e647061417574686f72697479446973636f76657279436f756e63696c546563686e6963616c436f6d6d6974746565456c656374696f6e7350687261676d656e546563686e6963616c4d656d626572736869705574696c6974794964656e7469747950726f78794d756c7469736967426f756e74696573456c656374696f6e50726f76696465724d756c7469506861736500770000002c000000040000007800000078000000790000000000000059be110006000000000000007a000000000000000000000000000000000000000000000000000000000000007b0000000000000000000000000000007c0000000000000000000000000000007d0000000000000000000000000000007e000000000000000000000000000000000000007421130018000000000000007f000000000000000000000000000000000000000000000000000000020000000000000000000000000000000200000000000000000000000000000000000000800000000000000000000000000000008000000000000000000000001f000000000000005fbe110009000000000000008100000000000000000000000000000000000000000000000000000000000000820000000000000000000000000000008300000000000000000000000000000080000000000000000000000000000000840000000000000000000000010000000000000028bc110004000000000000008500000000000000000000000000000000000000000000000000000000000000860000000000000000000000020000000000000000000000000000000000000087000000000000000000000000000000880000000000000000000000020000000000000068be1100090000000000000089000000000000000000000000000000000000000000000000000000000000008a000000000000000000000002000000000000000000000000000000000000008b000000000000000000000000000000800000000000000000000000030000000000000071be110007000000000000008c000000000000000000000000000000000000000000000000000000000000008d0000000000000000000000000000008e0000000000000000000000000000008f000000000000000000000000000000800000000000000000000000040000000000000078be110008000000000000009000000000000000000000000000000000000000000000000000000000000000910000000000000000000000000000009200000000000000000000000000000093000000000000000000000000000000940000000000000000000000050000000000000080be1100120000000000000095000000000000000000000000000000000000000000000000000000020000000000000000000000000000000200000000000000000000000000000000000000960000000000000000000000000000008000000000000000000000002000000000000000102d12000a000000000000009700000000000000000000000000000000000000000000000000000000000000980000000000000000000000020000000000000000000000000000000000000080000000000000000000000000000000990000000000000000000000060000000000000092be110007000000000000009a000000000000000000000000000000000000000000000000000000000000009b0000000000000000000000000000009c0000000000000000000000000000009d0000000000000000000000000000009e0000000000000000000000070000000000000099be110008000000000000009f0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000a0000000000000000000000000000000800000000000000000000000000000008000000000000000000000000800000000000000a1be11000a0000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000200000000000000000000000000000000000000800000000000000000000000000000008000000000000000000000002100000000000000a08012000700000000000000a100000000000000000000000000000000000000000000000000000000000000a2000000000000000000000000000000a300000000000000000000000000000080000000000000000000000000000000a400000000000000000000000900000000000000abbe11000700000000000000a500000000000000000000000000000000000000000000000000000000000000a6000000000000000000000000000000a700000000000000000000000000000080000000000000000000000000000000a800000000000000000000000b000000000000003e2c12000800000000000000a900000000000000000000000000000000000000000000000000000000000000aa000000000000000000000000000000ab00000000000000000000000000000080000000000000000000000000000000ac00000000000000000000000c00000000000000b2be1100120000000200000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000200000000000000000000000000000000000000800000000000000000000000000000008000000000000000000000000d000000000000005e8012000900000000000000ad00000000000000000000000000000000000000000000000000000000000000ae000000000000000000000000000000af000000000000000000000000000000b0000000000000000000000000000000b100000000000000000000000e00000000000000c4be11000700000000000000b200000000000000000000000000000000000000000000000000000000000000b3000000000000000000000000000000b400000000000000000000000000000080000000000000000000000000000000b500000000000000000000000f00000000000000cbbe11001200000000000000b600000000000000000000000000000000000000000000000000000000000000b3000000000000000000000000000000b400000000000000000000000000000080000000000000000000000000000000b500000000000000000000001000000000000000ddbe11001100000000000000b700000000000000000000000000000000000000000000000000000000000000b8000000000000000000000000000000b9000000000000000000000000000000ba000000000000000000000000000000bb00000000000000000000001100000000000000eebe11001300000000000000bc00000000000000000000000000000000000000000000000000000000000000bd000000000000000000000000000000be000000000000000000000000000000800000000000000000000000000000008000000000000000000000001200000000000000baeb11000800000000000000bf00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000c1000000000000000000000000000000c2000000000000000000000000000000c300000000000000000000001300000000000000b62813000600000000000000c400000000000000000000000000000000000000000000000000000000000000c5000000000000000000000000000000c6000000000000000000000000000000c7000000000000000000000000000000c800000000000000000000001800000000000000bc2d12000700000000000000c900000000000000000000000000000000000000000000000000000000000000ca000000000000000000000000000000cb000000000000000000000000000000cc000000000000000000000000000000cd0000000000000000000000190000000000000001bf110007000000020000000000000000000000000000000000000000000000000000000000000000000000ce000000000000000000000000000000cf000000000000000000000000000000800000000000000000000000000000008000000000000000000000001a0000000000000008bf11000800000000000000d000000000000000000000000000000000000000000000000000000000000000d1000000000000000000000000000000d2000000000000000000000000000000d3000000000000000000000000000000d400000000000000000000001c0000000000000010bf11000500000000000000d500000000000000000000000000000000000000000000000000000000000000d6000000000000000000000000000000d7000000000000000000000000000000d8000000000000000000000000000000d900000000000000000000001d0000000000000015bf11000800000000000000da00000000000000000000000000000000000000000000000000000000000000db000000000000000000000000000000dc000000000000000000000000000000dd000000000000000000000000000000de00000000000000000000001e000000000000001dbf11000800000000000000df00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000e1000000000000000000000000000000e2000000000000000000000000000000e30000000000000000000000220000000000000074ec11000400000000000000e400000000000000000000000000000000000000000000000000000000000000e5000000000000000000000000000000e6000000000000000000000000000000e7000000000000000000000000000000e80000000000000000000000230000000000000025bf11001a00000000000000e900000000000000000000000000000000000000000000000000000000000000ea000000000000000000000000000000eb000000000000000000000000000000ec000000000000000000000000000000ed000000000000000000000024000000617373657274696f6e206661696c65643a20656467652e686569676874203d3d2073656c662e686569676874202d203158cd11005b0000007702000009000000617373657274696f6e206661696c65643a20696478203c20434150414349545958cd11005b0000007b020000090000002f72757374632f653337613133636333353934303034363633373338626431386438313030653664623936363663662f6c6962726172792f616c6c6f632f7372632f636f6c6c656374696f6e732f62747265652f6e6f64652e7273617373657274696f6e206661696c65643a2073656c662e686569676874203e203058cd11005b000000d40000000900000058cd11005b0000002b04000016000000617373657274696f6e206661696c65643a207372632e6c656e2829203d3d206473742e6c656e282958cd11005b000000b006000005000000617373657274696f6e206661696c65643a20656467652e686569676874203d3d2073656c662e6e6f64652e686569676874202d203100000058cd11005b000000990300000900000058cd11005b0000006a0400001600000094d011001300000058cd11005b000000a60400001f000000617373657274696f6e206661696c65643a206e65775f6c6566745f6c656e203c3d204341504143495459000058cd11005b000000da04000009000000617373657274696f6e206661696c65643a206f6c645f6c6566745f6c656e202b20636f756e74203c3d204341504143495459000058cd11005b0000008d0500000d000000617373657274696f6e206661696c65643a206f6c645f72696768745f6c656e203e3d20636f756e7458cd11005b0000008e0500000d00000058cd11005b000000be05000016000000617373657274696f6e206661696c65643a206f6c645f72696768745f6c656e202b20636f756e74203c3d2043415041434954590058cd11005b0000004e0500000d000000617373657274696f6e206661696c65643a206f6c645f6c6566745f6c656e203e3d20636f756e740058cd11005b0000004f0500000d00000058cd11005b0000007e05000016000000617373657274696f6e206661696c65643a206d6174636820747261636b5f656467655f696478207b5c6e202020204c6566744f7252696768743a3a4c6566742869647829203d3e20696478203c3d206f6c645f6c6566745f6c656e2c5c6e202020204c6566744f7252696768743a3a52696768742869647829203d3e20696478203c3d2072696768745f6c656e2c5c6e7d00000058cd11005b0000002005000009000000656d70747920696e7465726e616c206e6f6465000000000088d111000e0000000000000098d11100010000000000000000000000a0d111001500000000000000b8d11100010000000000000000000000298212000800000000000000c0d11100010000000000000000000000c8d111001300000000000000dcd11100010000000000000000000000e4d111001200000000000000f8d1110001000000000000000000000000d2110009000000000000000cd2110001000000000000000000000014d2110017000000000000002cd2110001000000000000000000000034d211000b0000000000000040d21100010000000000000056657374696e6742616c616e636500006ad31100270000004c69717569646974795265737472696374696f6e7300000038d31100320000001bd311001d000000496e73756666696369656e7442616c616e636500fdd211001e0000004578697374656e7469616c4465706f7369740000c2d211003b0000004b656570416c6976650000009ed21100240000004578697374696e6756657374696e675363686564756c65006bd2110033000000446561644163636f756e740048d21100230000002042656e6566696369617279206163636f756e74206d757374207072652d657869737420412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e74205472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742056616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742042616c616e636520746f6f206c6f7720746f2073656e642076616c756520476f7420616e206f766572666c6f7720616674657220616464696e67204163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2056657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c756500000026e3120056000000e20000000f00000079d411001d00000024d4110055000000d10000000f0000007573657220646f6573206e6f74206861766520616e206578697374696e672076657374696e67207363686564756c653b20712e652e642e00120000000c000000040000003700000024d41100550000001e0100001200000024d411005500000045010000120000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f76657374696e672f7372632f6c69622e72735f5f5068616e746f6d4974656d2063616e6e6f7420626520757365642e7061726974792f6d756c74692d70686173652d756e7369676e65642d656c656374696f6e4e6f726d616c2065787472696e73696373206861766520776569676874206c696d697420636f6e666967757265642062792064656661756c743b2071656408d5110020000000780000000a0000002f6275696c642f72756e74696d652f636f6d6d6f6e2f7372632f6c69622e7273f0d71100640000007300000013000000f0d71100640000004800000018000000f0d7110064000000480000002a000000f0d71100640000008a0000001800000063616c6c656420604f7074696f6e3a3a756e77726170282960206f6e206120604e6f6e65602076616c75650054d8110060000000220100002e000000f0d7110064000000b600000019000000f0d71100640000000101000042000000f0d711006400000015010000420000004475706c696361746520766f74657220286f72206f7468657220636f727275707420696e707574292e000000f0d7110064000000360100002100000054d8110060000000d80100002a000000f0d71100640000005901000015000000f0d71100640000005e0100001e00000012000000000000000100000021000000f0d7110064000000610000001a000000f0d7110064000000610000002c000000f0d7110064000000cb01000018000000f0d7110064000000cb01000021000000f0d7110064000000ce01000024000000f0d7110064000000ce01000039000000f0d7110064000000cf01000024000000f0d7110064000000cf01000039000000f0d7110064000000f301000023000000f0d7110064000000f30100002c000000f0d7110064000000f501000024000000f0d7110064000000f501000039000000f0d71100640000001802000035000000f0d71100640000001902000035000000f0d71100640000002202000024000000f0d71100640000002202000039000000f0d71100640000004402000035000000f0d71100640000004502000035000000f0d71100640000005a0200002b000000f0d71100640000005a02000046000000f0d71100640000005b02000028000000f0d71100640000005b02000047000000f0d7110064000000650200002b000000f0d71100640000006502000047000000f0d71100640000006602000028000000f0d711006400000066020000480000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f6e706f732d656c656374696f6e732f7372632f7265647563652e72732f72757374632f653337613133636333353934303034363633373338626431386438313030653664623936363663662f6c6962726172792f616c6c6f632f7372632f636f6c6c656374696f6e732f62747265652f6d61702f656e7472792e72737375626d69745f756e7369676e6564000000000018d911001a0000000000000034d911000100000000000000000000003cd911001b0000000000000058d9110001000000000000000000000060d9110019000000000000007cd91100010000000000000050726544697370617463684561726c795375626d697373696f6e0000ccd911001a000000507265446973706174636857726f6e6757696e6e6572436f756e7400a9d911002300000050726544697370617463685765616b5375626d697373696f6e00000084d9110025000000205375626d697373696f6e2077617320746f6f207765616b2c2073636f72652d776973652e2057726f6e67206e756d626572206f662077696e6e6572732070726573656e7465642e205375626d697373696f6e2077617320746f6f206561726c792e4f6666636861696e456c656374696f6e5374696c6c4f70656e4e6f7446696e646572556e6b6e6f776e546970416c72656164794b6e6f776e526561736f6e546f6f4269675072656d617475726500000000003cdb11000e000000000000004cdb11000200000000000000000000007cdb110013000000000000000000000014dc11000b0000000000000020dc110001000000000000000000000038dc1100130000000000000000000000d0dc11000700000000000000d8dc110003000000000000000000000020dd1100160000000000000000000000d0dd11000300000000000000d4dd110002000000000000000000000004de1100190000000000000000000000ccde1100090000000000000020dc1100010000000000000000000000d8de110011000000000000000000000060df1100090000000000000020dc11000100000000000000000000006cdf11000c000000000000007265706f72745f617765736f6d6500000000000059e81100060000000000000042ec12000700000000000000791b13000300000000000000e3f812000c00000069ea11005700000054311300000000006c0e1300340000005431130000000000c0ea11005500000015eb110030000000543113000000000010e611005800000068e61100170000007fe611003b0000005431130000000000bae611001e0000005431130000000000f2eb12000b00000045eb11003300000078eb1100250000009deb11001d0000003be811001e00000036ec12000c000000726574726163745f7469700000000000c6e511000400000000000000b7f91200070000005fe81100550000005431130000000000b4e81100380000005431130000000000ece811005400000040e911005100000091e911001400000054311300000000005ce1110059000000b5e11100580000005431130000000000a5e91100240000005431130000000000f2eb12000b000000c9e9110015000000dee911003700000015ea11002400000039ea11003000000036ec12000c0000007469705f6e6577000000000059e81100060000000000000042ec12000700000000000000791b13000300000000000000e3f812000c00000000000000cae5110009000000000000004db6120015000000d3e511003d0000005431130000000000fce211005500000051e311001d000000543113000000000010e611005800000068e61100170000007fe611003b000000d4e311005400000028e41100360000005431130000000000bae611001e0000005431130000000000f2eb12000b000000d8e61100550000002de71100300000005de71100420000009fe7110043000000e2e71100390000001be81100200000003be811001e00000036ec12000c0000007469700000000000c6e511000400000000000000b7f912000700000000000000cae5110009000000000000004db6120015000000cfe211002d0000005431130000000000fce211005500000051e311001d00000054311300000000005ce11100590000006ee3110058000000c6e311000e000000d4e311005400000028e411003600000054311300000000005ee4110059000000b7e411000d0000005431130000000000f2eb12000b0000000de2110039000000c4e41100450000007de0110040000000bde0110041000000543113000000000009e511005800000061e511003500000096e511001d000000b3e511001300000036ec12000c000000636c6f73655f746970000000fee011001800000054311300000000006c0e130034000000543113000000000016e111004600000054311300000000005ce1110059000000b5e11100580000005431130000000000f2eb12000b0000000de211003900000046e21100270000007de0110040000000bde01100410000006de211002b00000098e211003700000036ec12000c000000736c6173685f746970000000ccdf1100260000005431130000000000f2df11002b00000054311300000000001de011003e00000054311300000000005be01100220000005431130000000000f2eb12000b0000007de0110040000000bde011004100000036ec12000c0000002052656d6f766520616e6420736c61736820616e20616c72656164792d6f70656e207469702e204d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602e204173206120726573756c742c207468652066696e64657220697320736c617368656420616e6420746865206465706f7369747320617265206c6f73742e20456d6974732060546970536c617368656460206966207375636365737366756c2e202020605460206973206368617267656420617320757070657220626f756e6420676976656e2062792060436f6e7461696e734c656e677468426f756e64602e2020205468652061637475616c20636f737420646570656e6473206f6e2074686520696d706c656d656e746174696f6e206f662060543a3a54697070657273602e20436c6f736520616e64207061796f75742061207469702e2054686520746970206964656e74696669656420627920606861736860206d75737420686176652066696e69736865642069747320636f756e74646f776e20706572696f642e202d206068617368603a20546865206964656e74697479206f6620746865206f70656e2074697020666f722077686963682061207469702076616c7565206973206465636c617265642e205468697320697320666f726d65642020206173207468652068617368206f6620746865207475706c65206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e6566696369617279206163636f756e742049442e202d20436f6d706c65786974793a20604f285429602077686572652060546020697320746865206e756d626572206f6620746970706572732e2020206465636f64696e6720605469707065726020766563206f66206c656e677468206054602e202d20446252656164733a206054697073602c206054697070657273602c20607469702066696e64657260202d2044625772697465733a2060526561736f6e73602c206054697073602c206054697070657273602c20607469702066696e64657260204465636c6172652061207469702076616c756520666f7220616e20616c72656164792d6f70656e207469702e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062652061206d656d626572206f662074686520605469707065727360207365742e2020206173207468652068617368206f6620746865207475706c65206f66207468652068617368206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e65666963696172792020206163636f756e742049442e202d20607469705f76616c7565603a2054686520616d6f756e74206f66207469702074686174207468652073656e64657220776f756c64206c696b6520746f20676976652e20546865206d656469616e2074697020202076616c7565206f662061637469766520746970706572732077696c6c20626520676976656e20746f20746865206077686f602e20456d6974732060546970436c6f73696e676020696620746865207468726573686f6c64206f66207469707065727320686173206265656e207265616368656420616e642074686520636f756e74646f776e20706572696f642068617320737461727465642e2020206465636f64696e6720605469707065726020766563206f66206c656e677468206054602c20696e736572742074697020616e6420636865636b20636c6f73696e672c20202041637475616c6c792077656967687420636f756c64206265206c6f77657220617320697420646570656e6473206f6e20686f77206d616e7920746970732061726520696e20604f70656e5469706020627574206974202020697320776569676874656420617320696620616c6d6f73742066756c6c20692e65206f66206c656e6774682060542d31602e202d20446252656164733a206054697070657273602c20605469707360202d2044625772697465733a20605469707360686173687469705f76616c7565204769766520612074697020666f7220736f6d657468696e67206e65773b206e6f2066696e6465722773206665652077696c6c2062652074616b656e2e202d2060726561736f6e603a2054686520726561736f6e20666f722c206f7220746865207468696e6720746861742064657365727665732c20746865207469703b2067656e6572616c6c7920746869732077696c6c20626520202061205554462d382d656e636f6465642055524c2e202d206077686f603a20546865206163636f756e742077686963682073686f756c6420626520637265646974656420666f7220746865207469702e20456d69747320604e657754697060206966207375636365737366756c2e202d20436f6d706c65786974793a20604f2852202b2054296020776865726520605260206c656e677468206f662060726561736f6e602c2060546020697320746865206e756d626572206f6620746970706572732e2020202d20604f285429603a206465636f64696e6720605469707065726020766563206f66206c656e677468206054602020202020605460206973206368617267656420617320757070657220626f756e6420676976656e2062792060436f6e7461696e734c656e677468426f756e64602e20202020205468652061637475616c20636f737420646570656e6473206f6e2074686520696d706c656d656e746174696f6e206f662060543a3a54697070657273602e2020202d20604f285229603a2068617368696e6720616e6420656e636f64696e67206f6620726561736f6e206f66206c656e67746820605260202d20446252656164733a206054697070657273602c2060526561736f6e7360202d2044625772697465733a2060526561736f6e73602c20605469707360726561736f6e20526574726163742061207072696f72207469702d7265706f72742066726f6d20607265706f72745f617765736f6d65602c20616e642063616e63656c207468652070726f63657373206f662074697070696e672e204966207375636365737366756c2c20746865206f726967696e616c206465706f7369742077696c6c20626520756e72657365727665642e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e642074686520746970206964656e74696669656420627920606861736860206d7573742068617665206265656e207265706f7274656420627920746865207369676e696e67206163636f756e74207468726f75676820607265706f72745f617765736f6d65602028616e64206e6f74207468726f75676820607469705f6e657760292e20456d697473206054697052657472616374656460206966207375636365737366756c2e202d20436f6d706c65786974793a20604f283129602020202d20446570656e6473206f6e20746865206c656e677468206f662060543a3a48617368602077686963682069732066697865642e202d20446252656164733a206054697073602c20606f726967696e206163636f756e7460202d2044625772697465733a2060526561736f6e73602c206054697073602c20606f726967696e206163636f756e7460205265706f727420736f6d657468696e672060726561736f6e60207468617420646573657276657320612074697020616e6420636c61696d20616e79206576656e7475616c207468652066696e6465722773206665652e205061796d656e743a20605469705265706f72744465706f73697442617365602077696c6c2062652072657365727665642066726f6d20746865206f726967696e206163636f756e742c2061732077656c6c2061732060446174614465706f736974506572427974656020666f722065616368206279746520696e2060726561736f6e602e202d20436f6d706c65786974793a20604f2852296020776865726520605260206c656e677468206f662060726561736f6e602e2020202d20656e636f64696e6720616e642068617368696e67206f662027726561736f6e27202d20446252656164733a2060526561736f6e73602c20605469707360547265617375727900000000000074ec1100040000000105000000000000b7f91200070000000000000078ec11003c0000000000000000000000000000000000000054311300b4ec11000000000000000000c4ec110003000000000000000000000000000000dcec1100070000000106000000000000b7f91200070000000000000042ec1200070000000000000000000000000000000000000054311300e4ec11000000000000000000f4ec1100020000000000000000000000546970734f70656e5469703c543a3a4163636f756e7449642c2042616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265722c20543a3a486173683e12000000000000000100000023000000aeed11005900000007ee11004f00000056ee110020000000526561736f6e73001200000000000000010000002300000004ed11005200000056ed1100580000002053696d706c6520707265696d616765206c6f6f6b75702066726f6d2074686520726561736f6e2773206861736820746f20746865206f726967696e616c20646174612e20416761696e2c2068617320616e20696e73656375726520656e756d657261626c6520686173682073696e636520746865206b65792069732067756172616e7465656420746f2062652074686520726573756c74206f6620612073656375726520686173682e20546970734d6170207468617420617265206e6f742079657420636f6d706c657465642e204b65796564206279207468652068617368206f66206028726561736f6e2c2077686f29602066726f6d207468652076616c75652e2054686973206861732074686520696e73656375726520656e756d657261626c6520686173682066756e6374696f6e2073696e636520746865206b657920697473656c6620697320616c72656164792067756172616e7465656420746f20626520612073656375726520686173682e00000000000090ef11000c00000000000000a9f912000e00000000000000543113009cef11000000000000000000acef1100010000000000000000000000b4ef11000d00000000000000c1ef1100070000000000000054311300c8ef11000000000000000000d8ef1100010000000000000000000000e0ef1100140000000000000057a912000c0000000000000054311300f4ef1100000000000000000004f011000100000000000000000000000cf01100120000000000000057a912000c000000000000005431130020f01100000000000000000030f0110001000000000000000000000038f011001300000000000000cbed12000300000000000000543113004cf0110000000000000000005cf011000100000000000000546970436f756e74646f776e120000000000000001000000ee00000049f111005100000054697046696e6465727346656550657263656e74120000000000000001000000ef000000fdf011004c0000005469705265706f72744465706f7369744261736512000000000000000100000026000000c8f0110035000000446174614465706f7369745065724279746500001200000000000000010000002500000086f01100420000004d6178696d756d526561736f6e4c656e677468001200000000000000010000002b00000064f0110022000000204d6178696d756d2061636365707461626c6520726561736f6e206c656e6774682e2054686520616d6f756e742068656c64206f6e206465706f7369742070657220627974652077697468696e2074686520746970207265706f727420726561736f6e2e2054686520616d6f756e742068656c64206f6e206465706f73697420666f7220706c6163696e67206120746970207265706f72742e2054686520616d6f756e74206f66207468652066696e616c2074697020776869636820676f657320746f20746865206f726967696e616c207265706f72746572206f6620746865207469702e2054686520706572696f6420666f722077686963682061207469702072656d61696e73206f70656e20616674657220697320686173206163686965766564207468726573686f6c6420746970706572732e00000000000078f211000600000000000000e8d0120001000000000000000000000080f2110001000000000000000000000088f211000a00000000000000e8d0120001000000000000000000000094f211000100000000000000000000009cf21100090000000000000020d01200030000000000000000000000a8f21100010000000000000000000000b0f211000c00000000000000e8d01200010000000000000000000000bcf21100010000000000000000000000c4f211000a0000000000000020d01200030000000000000000000000d0f2110001000000000000004e65775469700000cbf3110033000000546970436c6f73696e67000087f3110044000000546970436c6f7365640000004bf311003c00000054697052657472616374656419f3110032000000546970536c61736865640000d8f21100410000002041207469702073756767657374696f6e20686173206265656e20736c61736865642e205c5b7469705f686173682c2066696e6465722c206465706f7369745c5d2041207469702073756767657374696f6e20686173206265656e207265747261637465642e205c5b7469705f686173685c5d2041207469702073756767657374696f6e20686173206265656e20636c6f7365642e205c5b7469705f686173682c2077686f2c207061796f75745c5d2041207469702073756767657374696f6e206861732072656163686564207468726573686f6c6420616e6420697320636c6f73696e672e205c5b7469705f686173685c5d2041206e6577207469702073756767657374696f6e20686173206265656e206f70656e65642e205c5b7469705f686173685c5d496e76616c696420756e7369676e6564207375626d697373696f6e206d7573742070726f6475636520696e76616c696420626c6f636b20616e6420646570726976652076616c696461746f722066726f6d20746865697220617574686f72696e67207265776172642e00c8f411006b000000d70200003b000000c8f411006b000000db0200002b000000c8f411006b000000de0200000d000000c8f411006b000000df0200000d000000120000000c00000004000000f0000000c8f411006b000000e20200004e0000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f656c656374696f6e2d70726f76696465722d6d756c74692d70686173652f7372632f6c69622e72730024d4110055000000c40000000f0000004e6f7456657374696e67416d6f756e744c6f770000000000b0f511000e00000000000000c0f51100020000000000000000000000d0f51100030000000000000000000000e8f511001000000000000000fce41200010000000000000000000000f8f51100010000000000000056657374696e6755706461746564000079e5120009000000d5d112000700000047f61100560000009df6110046000000e3f611001600000056657374696e67436f6d706c6574656400f611004700000020416e205c5b6163636f756e745c5d20686173206265636f6d652066756c6c79207665737465642e204e6f20667572746865722076657374696e672063616e2068617070656e2e2054686520616d6f756e742076657374656420686173206265656e20757064617465642e205468697320636f756c6420696e646963617465206d6f72652066756e64732061726520617661696c61626c652e205468652062616c616e636520676976656e2069732074686520616d6f756e74207768696368206973206c65667420756e7665737465642028616e642074687573206c6f636b6564292e205c5b6163636f756e742c20756e7665737465645c5d00000000000000acf71100040000000000000054311300000000000000000000000000b0f711000d000000000000000000000018f811000a0000000000000024f811000100000000000000000000003cf811000f0000000000000000000000b4f811000f00000000000000c4f81100020000000000000000000000f4f8110010000000000000000000000074f9110015000000000000008cf91100030000000000000000000000d4f91100110000000000000076657374fefe11002f00000054311300000000002dff11005800000034fe11001a00000054311300000000004efe1100350000005431130000000000f2eb12000b000000bcfb11000a00000085ff11001e000000a3ff11003f000000e2ff11004000000036ec12000c000000766573745f6f74686572000000000000739a1200060000000000000085fc110023000000b0fd11002f00000054311300000000006c0e1300340000005431130000000000dffd11005500000034fe11001a00000054311300000000004efe1100350000005431130000000000f2eb12000b000000bcfb11000a000000f3fc11001e00000083fe11003d000000c0fe11003e00000036ec12000c0000007665737465645f7472616e736665720000000000739a1200060000000000000085fc11002300000000000000a8fc11000800000000000000b0fc110029000000d9fc11001a00000054311300000000006c0e1300340000005431130000000000e2fa11004500000027fb11004000000067fb11003d0000005431130000000000a4fb1100180000005431130000000000f2eb12000b000000bcfb11000a000000f3fc11001e00000011fd11004f00000060fd11005000000036ec12000c000000666f7263655f7665737465645f7472616e73666572000000000000007ffc1100060000000000000085fc11002300000000000000739a1200060000000000000085fc11002300000000000000a8fc11000800000000000000b0fc1100290000005cfa110019000000543113000000000075fa1100320000005431130000000000a7fa11003b000000e2fa11004500000027fb11004000000067fb11003d0000005431130000000000a4fb1100180000005431130000000000f2eb12000b000000bcfb11000a000000c6fb11001e000000e4fb11004d00000031fc11004e00000036ec12000c00000020466f726365206120766573746564207472616e736665722e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e202d2060736f75726365603a20546865206163636f756e742077686f73652066756e64732073686f756c64206265207472616e736665727265642e202d2060746172676574603a20546865206163636f756e7420746861742073686f756c64206265207472616e7366657272656420746865207665737465642066756e64732e202d2060616d6f756e74603a2054686520616d6f756e74206f662066756e647320746f207472616e7366657220616e642077696c6c206265207665737465642e202d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e20456d697473206056657374696e6743726561746564602e202d20604f283129602e202d2044625765696768743a20342052656164732c20342057726974657320202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c20536f75726365204163636f756e7420202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c20536f75726365204163636f756e74736f757263653c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263657363686564756c6556657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e20437265617465206120766573746564207472616e736665722e202d2044625765696768743a20332052656164732c20332057726974657320202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c205b53656e646572204163636f756e745d20202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c205b53656e646572204163636f756e745d20556e6c6f636b20616e79207665737465642066756e6473206f662061206074617267657460206163636f756e742e202d2060746172676574603a20546865206163636f756e742077686f7365207665737465642066756e64732073686f756c6420626520756e6c6f636b65642e204d75737420686176652066756e6473207374696c6c206c6f636b656420756e64657220746869732070616c6c65742e20456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e20202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e7420202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e7420556e6c6f636b20616e79207665737465642066756e6473206f66207468652073656e646572206163636f756e742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652066756e6473207374696c6c202d2044625765696768743a20322052656164732c20322057726974657320202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c205b53656e646572204163636f756e745d20202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c205b53656e646572204163636f756e745d000000000000bc2d1200070000000102000000000000e3f812000c00000000000000b0fc11002900000000000000000000000000000000000000543113007c00120000000000000000008c00120001000000000000000000000012000000000000000100000023000000940012003600000020496e666f726d6174696f6e20726567617264696e67207468652076657374696e67206f66206120676976656e206163636f756e742e00000000000004011200110000000000000057a912000c00000000000000543113001801120000000000000000002801120001000000000000004d696e5665737465645472616e7366657200000012000000000000000100000045000000300112003a00000020546865206d696e696d756d20616d6f756e74207472616e7366657272656420746f2063616c6c20607665737465645f7472616e73666572602e000000000000cc0212000700000000000000c0f51100020000000000000000000000d4021200010000000000000000000000dc0212000800000000000000c0f51100020000000000000000000000e4021200020000000000000000000000f40212000800000000000000fc021200030000000000000000000000140312000100000000000000000000001c0312000a000000000000002803120003000000000000000000000040031200010000000000000000000000480312000700000000000000c0f5110002000000000000000000000050031200010000000000000000000000580312000800000000000000c0f5110002000000000000000000000060031200010000000000000000000000680312000a00000000000000c0f51100020000000000000000000000740312000100000000000000000000007c031200120000000000000090031200040000000000000000000000b00312000300000000000000456e646f776564003c06120049000000447573744c6f7374b80512005000000008061200340000005472616e7366657279e512000900000079e5120009000000d5d1120007000000900512002800000042616c616e6365536574000079e5120009000000d5d1120007000000d5d11200070000005d051200330000004465706f7369740015051200480000005265736572766564cd04120048000000556e72657365727665640000830412004a000000526573657276655265706174726961746564000079e512000900000079e5120009000000d5d11200070000007d04120006000000c8031200540000001c04120037000000530412002a00000020536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742e2046696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e205c5b66726f6d2c20746f2c2062616c616e63652c2064657374696e6174696f6e5f7374617475735c5d53746174757320536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e205c5b77686f2c2076616c75655c5d20536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e205c5b77686f2c2076616c75655c5d20536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e205c5b77686f2c206465706f7369745c5d20412062616c616e6365207761732073657420627920726f6f742e205c5b77686f2c20667265652c2072657365727665645c5d205472616e73666572207375636365656465642e205c5b66726f6d2c20746f2c2076616c75655c5d20416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c20726573756c74696e6720696e20616e206f75747269676874206c6f73732e205c5b6163636f756e742c2062616c616e63655c5d20416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e205c5b6163636f756e742c20667265655f62616c616e63655c5d0000000000000038071200080000000000000040071200020000000000000000000000700712001b0000000000000000000000480812000b00000000000000540812000300000000000000000000009c0812001200000000000000000000002c0912000e000000000000003c09120003000000000000000000000084091200060000000000000000000000b4091200130000000000000040071200020000000000000000000000c80912000b000000000000007472616e73666572000000005b0c1200040000000000000085fc1100230000000000000048b6120005000000000000005f0c120013000000b70e1200360000005431130000000000ed0e1200420000002f0f120048000000770f120045000000bc0f12002d0000005431130000000000e90f1200460000005431130000000000f2eb12000b0000002f1012004c0000007b10120033000000ae1012005a0000005431130000000000081112001300000054311300000000001b111200540000006f1112004b000000ba11120035000000ef111200580000004712120052000000991212003e000000d712120022000000f9121200510000004a13120037000000811312004500000036ec12000c0000007365745f62616c616e63650000000000791b1300030000000000000085fc11002300000000000000a30e120008000000000000005f0c12001300000000000000ab0e12000c000000000000005f0c120013000000720c1200250000005431130000000000970c120048000000df0c120042000000210d120046000000670d1200400000005431130000000000a70d12002d0000005431130000000000f2eb12000b000000d40d120020000000f40d120031000000250e1200160000003b0e12000f0000004a0e12001a000000640e1200190000007d0e12002600000036ec12000c000000666f7263655f7472616e736665720000000000007ffc1100060000000000000085fc110023000000000000005b0c1200040000000000000085fc1100230000000000000048b6120005000000000000005f0c120013000000880b120054000000dc0b12000b000000f2eb12000b000000e70b120050000000370c12002400000036ec12000c0000007472616e736665725f6b6565705f616c69766500200a120054000000740a1200100000005431130000000000840a12002f0000005431130000000000b30a120031000000f2eb12000b000000e40a12003a0000001e0b120018000000360b1200470000007d0b12000b0000002053616d6520617320746865205b607472616e73666572605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e20393925206f66207468652074696d6520796f752077616e74205b607472616e73666572605d20696e73746561642e205b607472616e73666572605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572202d2043686561706572207468616e207472616e736665722062656361757365206163636f756e742063616e6e6f74206265206b696c6c65642e202d2042617365205765696768743a2035312e3420c2b573202d204442205765696768743a2031205265616420616e64203120577269746520746f2064657374202873656e64657220697320696e206f7665726c617920616c72656164792920233c2f7765696768743e2045786163746c7920617320607472616e73666572602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74206d6179206265207370656369666965642e202d2053616d65206173207472616e736665722c20627574206164646974696f6e616c207265616420616e6420777269746520626563617573652074686520736f75726365206163636f756e742069732020206e6f7420617373756d656420746f20626520696e20746865206f7665726c61792e64657374436f6d706163743c543a3a42616c616e63653e20536574207468652062616c616e636573206f66206120676976656e206163636f756e742e20546869732077696c6c20616c74657220604672656542616c616e63656020616e642060526573657276656442616c616e63656020696e2073746f726167652e2069742077696c6c20616c736f2064656372656173652074686520746f74616c2069737375616e6365206f66207468652073797374656d202860546f74616c49737375616e636560292e20496620746865206e65772066726565206f722072657365727665642062616c616e63652069732062656c6f7720746865206578697374656e7469616c206465706f7369742c2069742077696c6c20726573657420746865206163636f756e74206e6f6e63652028606672616d655f73797374656d3a3a4163636f756e744e6f6e636560292e20546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e202d20496e646570656e64656e74206f662074686520617267756d656e74732e202d20436f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e64207772697465732e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d202d2042617365205765696768743a20202020202d204372656174696e673a2032372e353620c2b57320202020202d204b696c6c696e673a2033352e313120c2b573202d204442205765696768743a203120526561642c203120577269746520746f206077686f606e65775f667265656e65775f7265736572766564205472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e20607472616e73666572602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e2049742077696c6c2064656372656173652074686520746f74616c2069737375616e6365206f66207468652073797374656d2062792074686520605472616e73666572466565602e204966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74206f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e202d20446570656e64656e74206f6e20617267756d656e747320627574206e6f7420637269746963616c2c20676976656e2070726f70657220696d706c656d656e746174696f6e7320666f72202020696e70757420636f6e6669672074797065732e205365652072656c617465642066756e6374696f6e732062656c6f772e202d20497420636f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e642077726974657320696e7465726e616c6c7920616e64206e6f20636f6d706c657820636f6d7075746174696f6e2e2052656c617465642066756e6374696f6e733a2020202d2060656e737572655f63616e5f77697468647261776020697320616c776179732063616c6c656420696e7465726e616c6c792062757420686173206120626f756e64656420636f6d706c65786974792e2020202d205472616e7366657272696e672062616c616e63657320746f206163636f756e7473207468617420646964206e6f74206578697374206265666f72652077696c6c20636175736520202020202060543a3a4f6e4e65774163636f756e743a3a6f6e5f6e65775f6163636f756e746020746f2062652063616c6c65642e2020202d2052656d6f76696e6720656e6f7567682066756e64732066726f6d20616e206163636f756e742077696c6c20747269676765722060543a3a4475737452656d6f76616c3a3a6f6e5f756e62616c616e636564602e2020202d20607472616e736665725f6b6565705f616c6976656020776f726b73207468652073616d652077617920617320607472616e73666572602c206275742068617320616e206164646974696f6e616c2020202020636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d202d2042617365205765696768743a2037332e363420c2b5732c20776f7273742063617365207363656e6172696f20286163636f756e7420637265617465642c206163636f756e742072656d6f76656429202d204442205765696768743a2031205265616420616e64203120577269746520746f2064657374696e6174696f6e206163636f756e74202d204f726967696e206163636f756e7420697320616c726561647920696e206d656d6f72792c20736f206e6f204442206f7065726174696f6e7320666f72207468656d2e000000000000281512000d0000000000000000000000351512000a00000000000000000000000000000000000000000000000000000000000000543113004015120000000000000000005015120001000000000000000100000000000000dcf81200070000000102000000000000e3f812000c0000000000000058151200170000000000000000000000000000000000000054311300701512000000000000000000801512000300000000000000010000000000000070bd1200050000000102000000000000e3f812000c00000000000000981512001c0000000000000000000000000000000000000054311300b41512000000000000000000c4151200020000000000000001000000000000009cbe12000e0000000000000000000000aabe1200080000000000000000000000000000000000000000000000000000000000000054311300d41512000000000000000000e4151200030000000000000001000000546f74616c49737375616e6365543a3a42616c616e6365001200000000000000010000004100000006171200260000004163636f756e74446174613c543a3a42616c616e63653e00120000000000000001000000f10000009b1612001b0000005431130000000000b6161200500000005665633c42616c616e63654c6f636b3c543a3a42616c616e63653e3e120000000000000001000000f2000000241612002e00000052161200490000001200000000000000010000005e000000dcbe12001f0000005431130000000000fc1512002800000020546869732069732073657420746f2076322e302e3020666f72206e6577206e6574776f726b732e20416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e205468652062616c616e6365206f6620616e206163636f756e742e204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e2054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e00000000e4d111001200000000000000351512000a0000000000000054311300641712000000000000000000741712000100000000000000120000000000000001000000260000007c1712003500000020546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e436865636b5370656356657273696f6e000000c8f411006b000000040300000f00000000000000dc1812000e00000000000000ec181200010000000000000000000000f41812000400000000000000000000001419120011000000000000002819120001000000000000000000000030191200020000000000000000000000401912000800000000000000fce4120001000000000000000000000048191200010000000000000000000000501912000700000000000000fce4120001000000000000000000000058191200010000000000000000000000601912001200000000000000741912000100000000000000000000007c19120001000000000000000000000084191200140000000000000074191200010000000000000000000000981912000100000000000000536f6c7574696f6e53746f7265640000dd1b12000f0000001d1b12002e00000054311300000000004b1b1200500000009b1b120042000000456c656374696f6e46696e616c697a6564000000061b120017000000971a120056000000ed1a12001900000052657761726465644d1a12004a000000536c617368656400041a1200490000005369676e65645068617365537461727465640000cbed120003000000d319120031000000556e7369676e6564506861736553746172746564a0191200330000002054686520756e7369676e6564207068617365206f662074686520676976656e20726f756e642068617320737461727465642e20546865207369676e6564207068617365206f662074686520676976656e20726f756e642068617320737461727465642e20416e206163636f756e7420686173206265656e20736c617368656420666f72207375626d697474696e6720616e20696e76616c6964207369676e6564207375626d697373696f6e2e20416e206163636f756e7420686173206265656e20726577617264656420666f72207468656972207369676e6564207375626d697373696f6e206265696e672066696e616c697a65642e2054686520656c656374696f6e20686173206265656e2066696e616c697a65642c20776974682060536f6d6560206f662074686520676976656e20636f6d7075746174696f6e2c206f7220656c73652069662074686520656c656374696f6e206661696c65642c20604e6f6e65602e4f7074696f6e3c456c656374696f6e436f6d707574653e204120736f6c7574696f6e207761732073746f72656420776974682074686520676976656e20636f6d707574652e2049662074686520736f6c7574696f6e206973207369676e65642c2074686973206d65616e732074686174206974206861736e277420796574206265656e2070726f6365737365642e2049662074686520736f6c7574696f6e20697320756e7369676e65642c2074686973206d65616e7320746861742069742068617320616c736f206265656e2070726f6365737365642e456c656374696f6e436f6d7075746500000000b4d811000f00000000000000181c1200020000000000000000000000481c12000e0000000000000000000000301f12000800000000000000381f12001900000000000000511f12000700000000000000581f120016000000b81c12002a0000005431130000000000e21c1200330000005431130000000000151d120050000000651d120056000000bb1d120058000000131e1200110000005431130000000000241e1200570000007b1e120054000000cf1e1200280000005431130000000000f71e120039000000205375626d6974206120736f6c7574696f6e20666f722074686520756e7369676e65642070686173652e20546865206469737061746368206f726967696e20666f20746869732063616c6c206d757374206265205f5f6e6f6e655f5f2e2054686973207375626d697373696f6e20697320636865636b6564206f6e2074686520666c792e204d6f72656f7665722c207468697320756e7369676e656420736f6c7574696f6e206973206f6e6c792076616c696461746564207768656e207375626d697474656420746f2074686520706f6f6c2066726f6d20746865202a2a6c6f63616c2a2a206e6f64652e204566666563746976656c792c2074686973206d65616e732074686174206f6e6c79206163746976652076616c696461746f72732063616e207375626d69742074686973207472616e73616374696f6e207768656e20617574686f72696e67206120626c6f636b202873696d696c617220746f20616e20696e686572656e74292e20546f2070726576656e7420616e7920696e636f727265637420736f6c7574696f6e2028616e642074687573207761737465642074696d652f776569676874292c2074686973207472616e73616374696f6e2077696c6c2070616e69632069662074686520736f6c7574696f6e207375626d6974746564206279207468652076616c696461746f7220697320696e76616c696420696e20616e79207761792c206566666563746976656c792070757474696e6720746865697220617574686f72696e6720726577617264206174207269736b2e204e6f206465706f736974206f7220726577617264206973206173736f63696174656420776974682074686973207375626d697373696f6e2e736f6c7574696f6e526177536f6c7574696f6e3c436f6d706163744f663c543e3e7769746e657373536f6c7574696f6e4f72536e617073686f7453697a6500000000000080211200050000000000000000000000cbed12000300000000000000000000000000000000000000000000000000000000000000543113008821120000000000000000009821120006000000000000000100000000000000c82112000c0000000000000000000000d4211200150000000000000000000000000000000000000000000000000000000000000054311300ec2112000000000000000000fc21120001000000000000000100000000000000042212000e0000000000000000000000122212001b0000000000000000000000000000000000000000000000000000000000000054311300302212000000000000000000402212000100000000000000000000000000000048221200080000000000000000000000502212001b00000000000000000000000000000000000000000000000000000000000000543113006c22120000000000000000007c22120003000000000000000000000000000000942212000e0000000000000000000000cbed1200030000000000000000000000000000000000000000000000000000000000000054311300a42212000000000000000000b422120003000000000000000000000000000000cc221200100000000000000000000000581f1200160000000000000000000000000000000000000000000000000000000000000054311300dc2212000000000000000000ec221200030000000000000000000000526f756e64000000120000000000000001000000f3000000582412002b00000054311300000000008324120055000000d82412001b0000005431130000000000f32412005300000043757272656e74506861736550686173653c543a3a426c6f636b4e756d6265723e0000001200000000000000010000005e000000492412000f000000517565756564536f6c7574696f6e5265616479536f6c7574696f6e3c543a3a4163636f756e7449643e00000012000000000000000100000023000000fa2312004f000000536e617073686f74526f756e64536e617073686f743c543a3a4163636f756e7449643e0012000000000000000100000023000000872312001c0000005431130000000000a3231200570000004465736972656454617267657473000012000000000000000100000023000000542312003300000054311300000000002a2312002a000000536e617073686f744d6574616461746112000000000000000100000023000000042312002600000054311300000000002a2312002a00000020546865206d65746164617461206f6620746865205b60526f756e64536e617073686f74605d204f6e6c7920657869737473207768656e205b60536e617073686f74605d2069732070726573656e742e2044657369726564206e756d626572206f66207461726765747320746f20656c65637420666f72207468697320726f756e642e20536e617073686f742064617461206f662074686520726f756e642e205468697320697320637265617465642061742074686520626567696e6e696e67206f6620746865207369676e656420706861736520616e6420636c65617265642075706f6e2063616c6c696e672060656c656374602e2043757272656e74206265737420736f6c7574696f6e2c207369676e6564206f7220756e7369676e65642c2071756575656420746f2062652072657475726e65642075706f6e2060656c656374602e2043757272656e742070686173652e20496e7465726e616c20636f756e74657220666f7220746865206e756d626572206f6620726f756e64732e20546869732069732075736566756c20666f722064652d6475706c69636174696f6e206f66207472616e73616374696f6e73207375626d697474656420746f2074686520706f6f6c2c20616e642067656e6572616c20646961676e6f7374696373206f66207468652070616c6c65742e2054686973206973206d6572656c7920696e6372656d656e746564206f6e6365207065722065766572792074696d65207468617420616e20757073747265616d2060656c656374602069732063616c6c65642e000000000000f02512000d00000000000000a9f912000e000000000000005431130000261200000000000000000010261200010000000000000000000000182612000b00000000000000a9f912000e0000000000000054311300242612000000000000000000342612000100000000000000000000003c2612001c0000000000000055f31200070000000000000054311300582612000000000000000000682612000200000000000000556e7369676e65645068617365000000120000000000000001000000f400000002271200200000005369676e656450686173650012000000000000000100000022000000e42612001e000000536f6c7574696f6e496d70726f76656d656e745468726573686f6c64120000000000000001000000290000007826120053000000cb2612001900000020546865206d696e696d756d20616d6f756e74206f6620696d70726f76656d656e7420746f2074686520736f6c7574696f6e2073636f7265207468617420646566696e6573206120736f6c7574696f6e2061732022626574746572222028696e20616e79207068617365292e204475726174696f6e206f6620746865207369676e65642070686173652e204475726174696f6e206f662074686520756e7369676e65642070686173652e0000120000000400000004000000f5000000120000000400000004000000f6000000120000000400000004000000f7000000d4e2120052000000c100000001000000a83513005e000000710000002e000000a83513005e0000009000000034000000a83513005e0000006900000034000000000000001eda11000c000000000000003c28120001000000000000000000000012da11000c000000000000004428120001000000000000000000000008da11000a000000000000004c281200010000000000000000000000ffd91100090000000000000054281200010000000000000000000000f6d9110009000000000000005c2812000100000000000000000000002ada11000900000000000000642812000100000000000000882912002200000065291200230000004c291200190000000429120048000000b92812004b0000006c2812004d00000020546865207469702063616e6e6f7420626520636c61696d65642f636c6f73656420626563617573652069742773207374696c6c20696e2074686520636f756e74646f776e20706572696f642e20546865207469702063616e6e6f7420626520636c61696d65642f636c6f736564206265636175736520746865726520617265206e6f7420656e6f7567682074697070657273207965742e20546865206163636f756e7420617474656d7074696e6720746f20726574726163742074686520746970206973206e6f74207468652066696e646572206f6620746865207469702e2054686520746970206861736820697320756e6b6e6f776e2e20546865207469702077617320616c726561647920666f756e642f737461727465642e2054686520726561736f6e20676976656e206973206a75737420746f6f206269672e0000a83513005e000000ba00000009000000a83513005e000000b300000009000000a83513005e000000d400000011000000a83513005e000000d900000009000000d4e2120052000000cd01000018000000d4e2120052000000fb0100001a0000000000000044f511000a00000000000000602a120001000000000000000000000014d211001700000000000000682a12000100000000000000000000004ef511000900000000000000702a12000100000000000000112b120022000000ba2a120057000000782a12004200000020416d6f756e74206265696e67207472616e7366657272656420697320746f6f206c6f7720746f2063726561746520612076657374696e67207363686564756c652e20416e206578697374696e672076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e7420746861742063616e6e6f7420626520636c6f6262657265642e20546865206163636f756e7420676976656e206973206e6f742076657374696e672e54696d657374616d70206d7573742062652075706461746564206f6e6c79206f6e636520696e2074686520626c6f636b00d42b120057000000c20000000d00000054696d657374616d70206d75737420696e6372656d656e74206279206174206c65617374203c4d696e696d756d506572696f643e206265747765656e2073657175656e7469616c20626c6f636b730000d42b120057000000c40000000d0000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f74696d657374616d702f7372632f6c69622e72737672662d6e6d2d706b436865636b4e6f6e6365496d4f6e6c696e6500000000000000000000617474656d707420746f20646976696465206279207a65726f4b657973417574686f726564426c6f636b732f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f696d2d6f6e6c696e652f7372632f6c69622e727354696d657374616d70206d7573742062652075706461746564206f6e636520696e2074686520626c6f636b000000d42b120057000000a70000000d000000417574686f7273686970417574686f724772616e64706146696e616c69747950656e64696e674368616e67653a6772616e6470615f617574686f7269746965735374617465556e636c657348656172746265617441667465720000007b2c1200570000004e020000340000007061726974792f696d2d6f6e6c696e652d6865617274626561742f556e646572436f6e737472756374696f6e50726f78696573416e6e6f756e63656d656e747356657374696e6700d42d120067000000b4000000380000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f737570706f72742f7372632f73746f726167652f67656e657261746f722f6d61702e727300120000000800000004000000f80000004772616e64706145717569766f636174696f6e496e76616c696445717569766f636174696f6e50726f6f66496e76616c69644b65794f776e65727368697050726f6f66546f6f536f6f6e4368616e676550656e64696e67526573756d654661696c656450617573654661696c65644475706c69636174654f6666656e63655265706f727400000000542f12001300000000000000682f1200020000000000000000000000982f1200040000000000000000000000b82f12001c00000000000000682f1200020000000000000000000000d42f12000900000000000000000000001c3012000c00000000000000283012000200000000000000000000005830120007000000000000007265706f72745f65717569766f636174696f6e0000000000203412001200000000000000323412002a000000000000005c3412000f000000000000006b341200100000007432120043000000b73212003e000000f53212003f00000034331200120000007265706f72745f65717569766f636174696f6e5f756e7369676e65647432120043000000b73212003e000000f53212003f0000003433120012000000543113000000000046331200440000008a33120046000000d033120046000000163412000a0000006e6f74655f7374616c6c6564000000001fae12000500000000000000a9f912000e00000000000000593212001b00000000000000a9f912000e0000009030120047000000d73012004a00000021311200480000006931120045000000ae3112004a000000f83112004a0000004232120017000000204e6f74652074686174207468652063757272656e7420617574686f7269747920736574206f6620746865204752414e4450412066696e616c6974792067616467657420686173207374616c6c65642e20546869732077696c6c2074726967676572206120666f7263656420617574686f7269747920736574206368616e67652061742074686520626567696e6e696e67206f6620746865206e6578742073657373696f6e2c20746f20626520656e6163746564206064656c61796020626c6f636b7320616674657220746861742e205468652064656c61792073686f756c64206265206869676820656e6f75676820746f20736166656c7920617373756d6520746861742074686520626c6f636b207369676e616c6c696e672074686520666f72636564206368616e67652077696c6c206e6f742062652072652d6f726765642028652e672e203130303020626c6f636b73292e20546865204752414e44504120766f746572732077696c6c20737461727420746865206e657720617574686f7269747920736574207573696e672074686520676976656e2066696e616c697a656420626c6f636b20617320626173652e204f6e6c792063616c6c61626c6520627920726f6f742e626573745f66696e616c697a65645f626c6f636b5f6e756d626572205265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c20766572696679207468652065717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f6620616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63652077696c6c206265207265706f727465642e20546869732065787472696e736963206d7573742062652063616c6c656420756e7369676e656420616e642069742069732065787065637465642074686174206f6e6c7920626c6f636b20617574686f72732077696c6c2063616c6c206974202876616c69646174656420696e206056616c6964617465556e7369676e656460292c20617320737563682069662074686520626c6f636b20617574686f7220697320646566696e65642069742077696c6c20626520646566696e6564206173207468652065717569766f636174696f6e207265706f727465722e65717569766f636174696f6e5f70726f6f6645717569766f636174696f6e50726f6f663c543a3a486173682c20543a3a426c6f636b4e756d6265723e6b65795f6f776e65725f70726f6f66543a3a4b65794f776e657250726f6f660000000000502d12000500000000000000000000008c3612001b0000000000000000000000000000000000000000000000000000000000000054311300a83612000000000000000000b8361200010000000000000001000000000000002f2d12000d0000000000000000000000c0361200230000000000000000000000000000000000000000000000000000000000000054311300e43612000000000000000000f436120001000000000000000000000000000000fc3612000a0000000000000000000000a9f912000e0000000000000000000000000000000000000000000000000000000000000054311300083712000000000000000000183712000100000000000000000000000000000020371200070000000000000000000000273712002000000000000000000000000000000000000000000000000000000000000000543113004837120000000000000000005837120001000000000000000000000000000000603712000c00000000000000000000006c3712000500000000000000000000000000000000000000000000000000000000000000543113007437120000000000000000008437120002000000000000000100000000000000943712000c00000001050000000000006c3712000500000000000000a03712000c0000000000000000000000000000000000000054311300ac3712000000000000000000bc37120004000000000000000000000053746f72656453746174653c543a3a426c6f636b4e756d6265723e00120000000000000001000000f9000000863912002400000053746f72656450656e64696e674368616e67653c543a3a426c6f636b4e756d6265723e001200000000000000010000002300000055391200310000004e657874466f72636564000012000000000000000100000023000000263912002f0000005374616c6c656428543a3a426c6f636b4e756d6265722c20543a3a426c6f636b4e756d626572290012000000000000000100000023000000023912002400000043757272656e7453657449645365744964000000120000000000000001000000590000007a38120057000000d138120031000000536574496453657373696f6e53657373696f6e496e64657812000000000000000100000023000000dc37120056000000323812001a00000054311300000000004c3812002e0000002041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f7220776869636820697473206d656d62657273207765726520726573706f6e7369626c652e2054574f582d4e4f54453a2060536574496460206973206e6f7420756e646572207573657220636f6e74726f6c2e20546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c69746965732920696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e20607472756560206966207765206172652063757272656e746c79207374616c6c65642e206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e2050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e205374617465206f66207468652063757272656e7420617574686f72697479207365742e496e76616c69644b65794475706c6963617465644865617274626561740000000000f43912000900000000000000003a1200020000000000000000000000303a1200090000000000000068656172746265617400000000000000f43912000900000000000000de3b12001900000000000000f73b12000a00000000000000013c12002f000000f2eb12000b000000783a120050000000c83a120040000000083b1200230000002b3b12002c000000573b12004f000000a63b120017000000bd3b12002100000036ec12000c000000202d20436f6d706c65786974793a20604f284b202b20452960207768657265204b206973206c656e677468206f6620604b6579736020286865617274626561742e76616c696461746f72735f6c656e29202020616e642045206973206c656e677468206f6620606865617274626561742e6e6574776f726b5f73746174652e65787465726e616c5f61646472657373602020202d20604f284b29603a206465636f64696e67206f66206c656e67746820604b602020202d20604f284529603a206465636f64696e672f656e636f64696e67206f66206c656e67746820604560202d20446252656164733a2070616c6c65745f73657373696f6e206056616c696461746f7273602c2070616c6c65745f73657373696f6e206043757272656e74496e646578602c20604b657973602c2020206052656365697665644865617274626561747360202d2044625772697465733a2060526563656976656448656172746265617473604865617274626561743c543a3a426c6f636b4e756d6265723e5f7369676e61747572653c543a3a417574686f7269747949642061732052756e74696d654170705075626c69633e3a3a5369676e6174757265000000005b2d12000e0000000000000000000000a9f912000e0000000000000000000000000000000000000000000000000000000000000054311300903d12000000000000000000a03d12000b000000000000000100000000000000692c1200040000000000000000000000f83d12001300000000000000000000000000000000000000000000000000000000000000543113000c3e120000000000000000001c3e120001000000000000000100000000000000243e1200120000000205050000000000a03712000c00000000000000363e1200090000000000000042ec1200070000000000000054311300403e12000000000000000000503e1200020000000000000000000000000000006d2c12000e0000000205050000000000a03712000c00000000000000603e12000e00000000000000cbed1200030000000000000054311300703e12000000000000000000803e120002000000000000000100000012000000000000000100000022000000973f120047000000de3f1200090000005431130000000000e73f120049000000304012004d0000007d40120046000000c34012002a0000005431130000000000ed4012004e0000003b4112004b00000086411200400000005665633c543a3a417574686f7269747949643e001200000000000000010000003f000000633f12003400000052656365697665644865617274626561747341757468496e6465780012000000000000000100000023000000073f12003c000000433f12002000000056616c696461746f7249643c543e000012000000000000000100000022000000903e120045000000d53e12003200000020466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206056616c696461746f7249643c543e6020746f20746865206e756d626572206f6620626c6f636b7320617574686f7265642062792074686520676976656e20617574686f726974792e20466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206041757468496e6465786020746f20606f6666636861696e3a3a4f70617175654e6574776f726b5374617465602e205468652063757272656e7420736574206f66206b6579732074686174206d61792069737375652061206865617274626561742e2054686520626c6f636b206e756d6265722061667465722077686963682069742773206f6b20746f2073656e64206865617274626561747320696e207468652063757272656e742073657373696f6e2e2041742074686520626567696e6e696e67206f6620656163682073657373696f6e20776520736574207468697320746f20612076616c756520746861742073686f756c642066616c6c20726f7567686c7920696e20746865206d6964646c65206f66207468652073657373696f6e206475726174696f6e2e20546865206964656120697320746f206669727374207761697420666f72207468652076616c696461746f727320746f2070726f64756365206120626c6f636b20696e207468652063757272656e742073657373696f6e2c20736f20746861742074686520686561727462656174206c61746572206f6e2077696c6c206e6f74206265206e65636573736172792e20546869732076616c75652077696c6c206f6e6c79206265207573656420617320612066616c6c6261636b206966207765206661696c20746f2067657420612070726f7065722073657373696f6e2070726f677265737320657374696d6174652066726f6d20604e65787453657373696f6e526f746174696f6e602c2061732074686f736520657374696d617465732073686f756c64206265206d6f7265206163637572617465207468656e207468652076616c75652077652063616c63756c61746520666f7220604865617274626561744166746572602e0000000000004c421200110000000000000060421200010000000000000000000000684212000100000000000000000000007042120007000000000000005431130000000000000000000000000078421200010000000000000000000000804212000b000000000000008c4212000100000000000000000000009442120001000000000000004865617274626561745265636569766564000000794312000b0000003843120041000000416c6c476f6f64000343120035000000536f6d654f66666c696e6500eb421200180000009c4212004f0000002041742074686520656e64206f66207468652073657373696f6e2c206174206c65617374206f6e652076616c696461746f722077617320666f756e6420746f206265205c5b6f66666c696e655c5d2e5665633c4964656e74696669636174696f6e5475706c653e2041742074686520656e64206f66207468652073657373696f6e2c206e6f206f6666656e63652077617320636f6d6d69747465642e2041206e657720686561727462656174207761732072656365697665642066726f6d2060417574686f72697479496460205c5b617574686f726974795f69645c5d417574686f72697479496400000000b04312000300000000000000b4431200010000000000000000000000cc4312000f0000000000000073657400000000006946120003000000000000006c46120012000000444412001600000054311300000000005a44120056000000b0441200360000005431130000000000e6441200510000003745120011000000543113000000000048451200360000005431130000000000f2eb12000b0000007e4512004d000000cb45120068000000334612003600000036ec12000c00000020536574207468652063757272656e742074696d652e20546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6e2070686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e205468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e742073706563696669656420627920604d696e696d756d506572696f64602e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e202d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f2831296029202d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202862656361757365206f6620604469645570646174653a3a74616b656020696e20606f6e5f66696e616c697a656029202d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e6e6f77436f6d706163743c543a3a4d6f6d656e743e00000000000030471200030000000000000000000000334712000900000000000000000000000000000000000000000000000000000000000000543113003c47120000000000000000004c4712000100000000000000010000000000000054471200090000000000000000000000a1fb1200040000000000000000000000000000000000000000000000000000000000000054311300604712000000000000000000704712000100000000000000010000004e6f77543a3a4d6f6d656e7412000000000000000100000059000000a54712002400000044696455706461746500000012000000000000000100000023000000784712002d00000020446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f2043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e00000000000000044812000d00000000000000334712000900000000000000543113001448120000000000000000002448120004000000000000004d696e696d756d506572696f64000000120000000000000001000000fa000000444812005a0000009e4812005a000000f848120059000000514912001c00000020546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a20706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c2067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c20626520646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e556e636c65416c7265616479496e636c75646564546f6f48696768556e636c6547656e65736973556e636c65546f6f4d616e79556e636c6573556e636c6573416c7265616479536574496e76616c6964556e636c65506172656e744f6c64556e636c6500000000fc4912000a00000000000000084a1200010000000000000000000000204a120001000000000000007365745f756e636c6573000000000000414a12000a000000000000004b4a12000e000000284a1200190000002050726f76696465206120736574206f6620756e636c65732e6e65775f756e636c65735665633c543a3a4865616465723e00000000000000552d1200060000000000000000000000644b12003a0000000000000000000000000000000000000000000000000000000000000054311300a04b12000000000000000000b04b1200010000000000000001000000000000001a2d1200060000000000000000000000e3f812000c0000000000000000000000000000000000000000000000000000000000000054311300b84b12000000000000000000c84b120001000000000000000000000000000000d04b12000c0000000000000000000000a1fb1200040000000000000000000000000000000000000000000000000000000000000054311300dc4b12000000000000000000ec4b12000100000000000000010000005665633c556e636c65456e7472794974656d3c543a3a426c6f636b4e756d6265722c20543a3a486173682c20543a3a4163636f756e7449643e3e0000120000000000000001000000fb0000003c4c12000700000012000000000000000100000023000000234c120019000000446964536574556e636c657312000000000000000100000023000000f44b12002f000000205768657468657220756e636c6573207765726520616c72656164792073657420696e207468697320626c6f636b2e20417574686f72206f662063757272656e7420626c6f636b2e20556e636c6573001200000000000000010000005f000000647c120066000000860000002700000012000000000000000100000021000000647c120066000000a60000001c000000647c1200660000009500000034000000647c120066000000a900000029000000647c120066000000bd0000001f000000647c120066000000c900000030000000c406130055000000f30000000100000000000000af2e12000b00000000000000984d1200020000000000000000000000a32e12000c00000000000000a84d1200020000000000000000000000962e12000d00000000000000b84d12000100000000000000000000008f2e12000700000000000000c04d1200010000000000000000000000772e12001800000000000000c84d12000100000000000000000000005f2e12001800000000000000d04d1200010000000000000000000000ba2e12001600000000000000d84d12000100000000000000994f120042000000db4f12002a0000002b4f120045000000704f120029000000f04e12003b000000c04e120030000000734e12004d000000264e12004d000000e04d120046000000204120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e20416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e2041206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e2043616e6e6f74207369676e616c20666f72636564206368616e676520736f20736f6f6e206166746572206c6173742e20417474656d707420746f207369676e616c204752414e445041206368616e67652077697468206f6e6520616c72656164792070656e64696e672e20417474656d707420746f207369676e616c204752414e44504120726573756d65207768656e2074686520617574686f72697479207365742069736e2774207061757365642028656974686572206c697665206f7220616c72656164792070656e64696e6720726573756d65292e20417474656d707420746f207369676e616c204752414e445041207061757365207768656e2074686520617574686f72697479207365742069736e2774206c697665202865697468657220706175736564206f7220616c72656164792070656e64696e67207061757365292e00000000000000aa3912000a0000000000000040501200010000000000000000000000b4391200130000000000000048501200010000000000000066501200190000005050120016000000204475706c696361746564206865617274626561742e204e6f6e206578697374656e74207075626c6963206b65792e000b2b1300640000003d0500000100000000000000b6491200120000000000000054511200010000000000000000000000a649120010000000000000005c511200010000000000000000000000994912000d00000000000000645112000100000000000000000000008d4912000c000000000000006c511200010000000000000000000000814912000c00000000000000745112000100000000000000000000006d49120014000000000000007c511200010000000000000000000000c84912000800000000000000845112000100000000000000415212002300000020521200210000000f52120011000000f951120016000000d951120020000000ba5112001f0000008c5112002e0000002054686520756e636c652069736e277420726563656e7420656e6f75676820746f20626520696e636c756465642e2054686520756e636c6520697320616c726561647920696e636c756465642e2054686520756e636c6520697320746f6f206869676820696e20636861696e2e2054686520756e636c652069732067656e657369732e20546f6f206d616e7920756e636c65732e20556e636c657320616c72656164792073657420696e2074686520626c6f636b2e2054686520756e636c6520706172656e74206e6f7420696e2074686520636861696e2e4765747320616e64206465636f6465732074696d657374616d7020696e686572656e742064617461fc0000001000000004000000fd000000d42b120057000000d900000012000000bc52120022000000bc030000010000002f6275696c642f72756e74696d652f706f6c6b61646f742f7372632f6c69622e727354696d657374616d7020746f6f2066617220696e2066757475726520746f206163636570745468657265206973206f6e6c79206f6e6520666174616c206572726f723b20716564000000120000000800000004000000fe0000004e6f206f74686572206572726f72732061726520616363657074656420616674657220616e2068617264206572726f7221496e686572656e7420776974682073616d65206964656e74696669657220616c726561647920657869737473210000db53120007000000c05312001b0000002031130002000000bc52120022000000620400000100000042616420696e70757420646174612070726f766964656420746f2076657273696f6e0000ec5312000d000000657865637574655f626c6f636b0000000454120010000000696e697469616c697a655f626c6f636b1c541200080000006d657461646174612c5412000f0000006170706c795f65787472696e73696300445412000e00000066696e616c697a655f626c6f636b00005c54120013000000696e686572656e745f65787472696e7369637300785412000f000000636865636b5f696e686572656e747300905412000b00000072616e646f6d5f7365656400a45412001400000076616c69646174655f7472616e73616374696f6ec05412000f0000006f6666636861696e5f776f726b657200d85412000a00000076616c696461746f72730000ec5412001000000076616c696461746f725f67726f7570730455120012000000617661696c6162696c6974795f636f726573000020551200190000007065727369737465645f76616c69646174696f6e5f646174610000004455120018000000636865636b5f76616c69646174696f6e5f6f757470757473645512001700000073657373696f6e5f696e6465785f666f725f6368696c6400845512000c00000073657373696f6e5f696e666f985512000f00000076616c69646174696f6e5f636f646500b05512001a000000686973746f726963616c5f76616c69646174696f6e5f636f64650000d45512001e00000063616e6469646174655f70656e64696e675f617661696c6162696c6974790000fc5512001000000063616e6469646174655f6576656e7473145612000c000000646d715f636f6e74656e7473285612001e000000696e626f756e645f68726d705f6368616e6e656c735f636f6e74656e7473000050561200130000006772616e6470615f617574686f726974696573006c5612002d0000007375626d69745f7265706f72745f65717569766f636174696f6e5f756e7369676e65645f65787472696e736963000000a45612001c00000067656e65726174655f6b65795f6f776e6572736869705f70726f6f66c85612000d000000636f6e66696775726174696f6e000000e05612001300000063757272656e745f65706f63685f737461727400fc5612000d00000063757272656e745f65706f6368000000145712000a0000006e6578745f65706f63680000285712000b000000617574686f726974696573003c5712001500000067656e65726174655f73657373696f6e5f6b6579730000005c571200130000006465636f64655f73657373696f6e5f6b65797300785712000d0000006163636f756e745f6e6f6e6365000000905712000a00000071756572795f696e666f0000a45712001100000071756572795f6665655f64657461696c730000001c151300580000001601000001000000496e7374616e636531436f6c6c65637469766550726f706f73616c7350726f706f73616c436f756e7450726f706f73616c4f66566f74696e67496e7374616e636532436f6c6c65637469766557726f6e6750726f706f73616c576569676874416c7265616479496e697469616c697a65644475706c6963617465566f746557726f6e67496e64657857726f6e6750726f706f73616c4c656e67746800000000006c5912000b0000000000000078591200030000000000000000000000c0591200180000000000000000000000805a12000700000000000000885a1200020000000000000000000000b85a12000a0000000000000000000000bc8712000700000000000000085b1200030000000000000000000000505b12001b0000000000000000000000d48812000400000000000000285c1200030000000000000000000000705c12000e0000000000000000000000e05c12000500000000000000e85c1200040000000000000000000000485d12001e0000000000000000000000385e12001300000000000000c88912000100000000000000000000004c5e12000d000000000000007365745f6d656d6265727300000000001c7012000b000000000000002c1a130011000000000000002770120005000000000000002c7012001400000000000000407012000900000000000000497012000b000000526c1200210000005431130000000000736c120052000000c56c120039000000fe6c12004e0000004c6d12002b0000005431130000000000776d12001600000054311300000000008d6d120055000000e26d1200490000005431130000000000f2eb12000b0000009e6312000a0000002b6e120015000000406e120039000000796e120039000000b26e1200270000009464120006000000d96e12005d000000366f12003c000000726f120052000000c46f12005800000036ec12000c00000065786563757465000000000001b512000800000000000000346b12001f00000000000000c16512000c00000000000000d2a012000c000000536b12003d0000005431130000000000906b12002b0000005431130000000000f2eb12000b0000009e6312000a000000bb6b1200610000001c6c120036000000796712000a00000036ec12000c00000000000000176b12000900000000000000206b1200140000000000000001b512000800000000000000346b12001f00000000000000c16512000c00000000000000d2a012000c0000008a6712003f0000005431130000000000c9671200220000005431130000000000eb671200510000003c681200160000005431130000000000f2eb12000b0000009e6312000a000000526812002c000000c663120039000000ff631200380000007e68120032000000b06812003e000000ee6812004000000094641200060000002e6912002e0000005c6912003d000000996912002b000000c469120043000000076a12002f000000366a1200370000006d6a12003a000000a76a120034000000db6a1200300000000b6b12000c00000036ec12000c0000000000000001b512000800000000000000b7f912000700000000000000a00e13000500000000000000876512001600000000000000836712000700000000000000a1fb120004000000cd6512003d00000054311300000000000a6612002400000054311300000000002e66120053000000816612005a000000f2eb12000b0000009e6312000a000000db6612004300000094641200060000001e6712002c0000004a6712002f000000796712000a00000036ec12000c000000636c6f736500000000000000389712000d00000000000000b7f912000700000000000000a00e130005000000000000008765120016000000000000009d6512001500000000000000b26512000f00000000000000c16512000c00000000000000d2a012000c000000076012005400000054311300000000005b601200560000005431130000000000b160120053000000046112003000000054311300000000003461120053000000876112004a0000005431130000000000d1611200590000002a6212005800000054311300000000008262120063000000e5621200590000003e631200600000005431130000000000f2eb12000b0000009e6312000a000000a86312001e000000c663120039000000ff6312003800000037641200330000006a6412002a00000094641200060000009a64120044000000de641200600000003e65120038000000766512001100000036ec12000c000000646973617070726f76655f70726f706f73616c00b45e12005e0000005431130000000000125f1200230000005431130000000000355f12000c000000415f1200480000005431130000000000f2eb12000b000000895f120038000000c15f12000b000000cc5f120013000000df5f12002800000036ec12000c00000020446973617070726f766520612070726f706f73616c2c20636c6f73652c20616e642072656d6f76652069742066726f6d207468652073797374656d2c207265676172646c657373206f66206974732063757272656e742073746174652e204d7573742062652063616c6c65642062792074686520526f6f74206f726967696e2e20506172616d65746572733a202a206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20746861742073686f756c6420626520646973617070726f7665642e20436f6d706c65786974793a204f285029207768657265205020697320746865206e756d626572206f66206d61782070726f706f73616c73204442205765696768743a202a2052656164733a2050726f706f73616c73202a205772697465733a20566f74696e672c2050726f706f73616c732c2050726f706f73616c4f6620436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e204d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e2049662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f74652069662069742069732068617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e2049662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e7320756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e2049662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c206265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e202b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642070726f706f73616c2e202b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b656420766961202020202020202020202020202020202020206073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e20232320576569676874202d20604f2842202b204d202b205031202b20503229602077686572653a2020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e646564292020202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564292020202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652e2020202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429202d2044423a20202d20322073746f726167652072656164732028604d656d62657273603a20636f64656320604f284d29602c20605072696d65603a20636f64656320604f283129602920202d2033206d75746174696f6e73202860566f74696e67603a20636f64656320604f284d29602c206050726f706f73616c4f66603a20636f64656320604f284229602c206050726f706f73616c73603a20636f64656320604f28503229602920202d20616e79206d75746174696f6e7320646f6e65207768696c6520657865637574696e67206070726f706f73616c6020286050316029202d20757020746f2033206576656e7473436f6d706163743c50726f706f73616c496e6465783e70726f706f73616c5f7765696768745f626f756e64436f6d706163743c5765696768743e6c656e6774685f626f756e642041646420616e20617965206f72206e617920766f746520666f72207468652073656e64657220746f2074686520676976656e2070726f706f73616c2e205265717569726573207468652073656e64657220746f2062652061206d656d6265722e205472616e73616374696f6e20666565732077696c6c2062652077616976656420696620746865206d656d62657220697320766f74696e67206f6e20616e7920706172746963756c61722070726f706f73616c20666f72207468652066697273742074696d6520616e64207468652063616c6c206973207375636365737366756c2e2053756273657175656e7420766f7465206368616e6765732077696c6c206368617267652061206665652e202d20604f284d296020776865726520604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564292020202d20312073746f72616765207265616420604d656d62657273602028636f64656320604f284d2960292020202d20312073746f72616765206d75746174696f6e2060566f74696e67602028636f64656320604f284d296029202d2031206576656e74617070726f7665204164642061206e65772070726f706f73616c20746f2065697468657220626520766f746564206f6e206f72206578656375746564206469726563746c792e205265717569726573207468652073656e64657220746f206265206d656d6265722e20607468726573686f6c64602064657465726d696e65732077686574686572206070726f706f73616c60206973206578656375746564206469726563746c792028607468726573686f6c64203c20326029206f722070757420757020666f7220766f74696e672e202d20604f2842202b204d202b2050312960206f7220604f2842202b204d202b20503229602077686572653a2020202d206272616e6368696e6720697320696e666c75656e63656420627920607468726573686f6c64602077686572653a20202020202d20605031602069732070726f706f73616c20657865637574696f6e20636f6d706c65786974792028607468726573686f6c64203c2032602920202020202d20605032602069732070726f706f73616c732d636f756e742028636f64652d626f756e646564292028607468726573686f6c64203e3d203260292020202d20312073746f726167652072656164206069735f6d656d626572602028636f64656320604f284d2960292020202d20312073746f726167652072656164206050726f706f73616c4f663a3a636f6e7461696e735f6b6579602028636f64656320604f28312960292020202d20444220616363657373657320696e666c75656e63656420627920607468726573686f6c64603a20202020202d204549544845522073746f7261676520616363657373657320646f6e65206279206070726f706f73616c602028607468726573686f6c64203c2032602920202020202d204f522070726f706f73616c20696e73657274696f6e2028607468726573686f6c64203c3d20326029202020202020202d20312073746f72616765206d75746174696f6e206050726f706f73616c73602028636f64656320604f285032296029202020202020202d20312073746f72616765206d75746174696f6e206050726f706f73616c436f756e74602028636f64656320604f2831296029202020202020202d20312073746f72616765207772697465206050726f706f73616c4f66602028636f64656320604f2842296029202020202020202d20312073746f726167652077726974652060566f74696e67602028636f64656320604f284d2960292020202d2031206576656e747468726573686f6c64436f6d706163743c4d656d626572436f756e743e426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e20446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e204f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e202d20604f284d202b2050296020776865726520604d60206d656d626572732d636f756e742028636f64652d626f756e6465642920616e642060506020636f6d706c6578697479206f66206469737061746368696e67206070726f706f73616c60202d2044423a203120726561642028636f64656320604f284d296029202b20444220616363657373206f66206070726f706f73616c60205365742074686520636f6c6c6563746976652773206d656d626572736869702e202d20606e65775f6d656d62657273603a20546865206e6577206d656d626572206c6973742e204265206e69636520746f2074686520636861696e20616e642070726f7669646520697420736f727465642e202d20607072696d65603a20546865207072696d65206d656d6265722077686f736520766f74652073657473207468652064656661756c742e202d20606f6c645f636f756e74603a2054686520757070657220626f756e6420666f72207468652070726576696f7573206e756d626572206f66206d656d6265727320696e2073746f726167652e202020202020202020202020202020205573656420666f722077656967687420657374696d6174696f6e2e20526571756972657320726f6f74206f726967696e2e204e4f54453a20446f6573206e6f7420656e666f7263652074686520657870656374656420604d61784d656d6265727360206c696d6974206f6e2074686520616d6f756e74206f66206d656d626572732c20627574202020202020207468652077656967687420657374696d6174696f6e732072656c79206f6e20697420746f20657374696d61746520646973706174636861626c65207765696768742e202d20604f284d50202b204e29602077686572653a2020202d20604d60206f6c642d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564292020202d20604e60206e65772d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564292020202d206050602070726f706f73616c732d636f756e742028636f64652d626f756e646564292020202d20312073746f72616765206d75746174696f6e2028636f64656320604f284d296020726561642c20604f284e29602077726974652920666f722072656164696e6720616e642077726974696e6720746865206d656d626572732020202d20312073746f7261676520726561642028636f64656320604f285029602920666f722072656164696e67207468652070726f706f73616c732020202d206050602073746f72616765206d75746174696f6e732028636f64656320604f284d29602920666f72207570646174696e672074686520766f74657320666f7220656163682070726f706f73616c2020202d20312073746f726167652077726974652028636f64656320604f283129602920666f722064656c6574696e6720746865206f6c6420607072696d656020616e642073657474696e6720746865206e6577206f6e656e65775f6d656d626572737072696d654f7074696f6e3c543a3a4163636f756e7449643e6f6c645f636f756e744d656d626572436f756e7400000000db571200090000000000000000000000f22113000c00000000000000000000000000000000000000000000000000000000000000543113006472120000000000000000007472120001000000000000000100000000000000f15712000a0000000106000000000000b7f9120007000000000000007c7212001a0000000000000000000000000000000000000054311300987212000000000000000000a872120001000000000000000000000000000000fb571200060000000106000000000000b7f912000700000000000000b0721200230000000000000000000000000000000000000054311300d47212000000000000000000e472120001000000000000000000000000000000e45712000d0000000000000000000000cbed1200030000000000000000000000000000000000000000000000000000000000000054311300ec7212000000000000000000fc72120001000000000000000100000000000000c7e112000700000000000000000000002c1a13001100000000000000000000000000000000000000000000000000000000000000543113000473120000000000000000001473120001000000000000000100000000000000dbe11200050000000000000000000000e3f812000c00000000000000000000000000000000000000000000000000000000000000543113001c73120000000000000000002c731200010000000000000000000000120000000000000001000000620000004d741200240000003c5420617320436f6e6669673c493e3e3a3a50726f706f73616c0000120000000000000001000000ff0000001a74120033000000566f7465733c543a3a4163636f756e7449642c20543a3a426c6f636b4e756d6265723e0012000000000000000100000000010000ed7312002d00000012000000000000000100000022000000db731200120000001200000000000000010000003f0000008d7312004e00000012000000000000000100000023000000347312005900000020546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e2050726f706f73616c7320736f206661722e20566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e2054686520686173686573206f6620746865206163746976652070726f706f73616c732e00000000000000db571200090000000000000000000000f22113000c00000000000000000000000000000000000000000000000000000000000000543113008476120000000000000000007472120001000000000000000100000000000000f15712000a0000000106000000000000b7f9120007000000000000007c7212001a0000000000000000000000000000000000000054311300947612000000000000000000a872120001000000000000000000000000000000fb571200060000000106000000000000b7f912000700000000000000b0721200230000000000000000000000000000000000000054311300a47612000000000000000000e472120001000000000000000000000000000000e45712000d0000000000000000000000cbed1200030000000000000000000000000000000000000000000000000000000000000054311300b47612000000000000000000fc72120001000000000000000100000000000000c7e112000700000000000000000000002c1a1300110000000000000000000000000000000000000000000000000000000000000054311300c476120000000000000000001473120001000000000000000100000000000000dbe11200050000000000000000000000e3f812000c0000000000000000000000000000000000000000000000000000000000000054311300d476120000000000000000002c73120001000000000000000000000012000000000000000100000062000000120000000000000001000000ff00000012000000000000000100000000010000120000000000000001000000220000001200000000000000010000003f0000001200000000000000010000002300000000000000d0ce1200080000000000000018781200040000000000000000000000387812000300000000000000000000005078120005000000000000005878120005000000000000000000000080781200030000000000000000000000987812000800000000000000e8d01200010000000000000000000000a0781200020000000000000000000000b07812000b00000000000000e8d01200010000000000000000000000bc78120002000000000000000000000090cf12000800000000000000cc781200020000000000000000000000dc781200020000000000000000000000ec7812000e00000000000000cc781200020000000000000000000000fc7812000200000000000000000000000c7912000600000000000000147912000300000000000000000000002c791200020000000000000079e5120009000000357c12000d00000082e5120004000000497012000b0000009c7b120053000000ef7b120010000000ff7b120036000000566f74656400000079e512000900000082e5120004000000a1fb120004000000497012000b000000497012000b000000e97a1200420000002b7b120046000000717b12002b000000417070726f766564b87a120031000000a67a120012000000446973617070726f76656400717a120035000000a67a12001200000082e5120004000000637a12000e0000001a7a120049000000007a12001a0000004d656d62657245786563757465640000ad79120053000000007a12001a000000436c6f736564000082e5120004000000497012000b000000497012000b0000003c79120056000000927912001b00000020412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e205c5b70726f706f73616c5f686173682c207965732c206e6f5c5d20412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e205c5b70726f706f73616c5f686173682c20726573756c745c5d2041206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e4469737061746368526573756c742041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e205c5b70726f706f73616c5f686173685c5d2041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2041206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e6720612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e205c5b6163636f756e742c2070726f706f73616c5f686173682c20766f7465642c207965732c206e6f5c5d2041206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e20604d656d626572436f756e7460292e205c5b6163636f756e742c2070726f706f73616c5f696e6465782c2070726f706f73616c5f686173682c207468726573686f6c645c5d50726f706f73616c496e646578000012000000000000000100000021000000647c12006600000062000000270000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f6e706f732d656c656374696f6e732f7372632f70687261676d656e2e72730000dc7c1200670000008e0000002f0000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f6e706f732d656c656374696f6e732f7372632f62616c616e63696e672e72730000000000e0e1120009000000000000005c7e1200010000000000000000000000218312001100000000000000647e1200010000000000000000000000498312000f000000000000006c7e1200010000000000000000000000465812000a00000000000000747e1200010000000000000000000000395812000d000000000000007c7e1200010000000000000000000000275812001200000000000000847e1200010000000000000000000000ab82120008000000000000008c7e1200010000000000000000000000608312001000000000000000947e12000100000000000000000000001458120013000000000000009c7e1200010000000000000000000000505812001300000000000000a47e120001000000000000001480120018000000f47f120020000000e07f120014000000cf7f120011000000b87f120017000000977f120021000000567f120041000000167f120040000000e17e120035000000ac7e1200350000002054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e2054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e2054686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e2054686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e204d656d626572732061726520616c726561647920696e697469616c697a656421204475706c696361746520766f74652069676e6f726564204d69736d61746368656420696e6465782050726f706f73616c206d757374206578697374204475706c69636174652070726f706f73616c73206e6f7420616c6c6f776564204163636f756e74206973206e6f742061206d656d6265724c4f474943204552524f523a2062616b655f7265666572656e64756d2f7363686564756c655f6e616d6564206661696c656444656d6f63726163795265666572656e64756d496e666f4f66507265696d616765734e65787445787465726e616c5075626c696350726f70734465706f7369744f6653657373696f6e486973746f726963616c53657373696f6e730000002f000000600000000800000001010000020100002f0000006000000008000000300000003100000032000000330000003400000035000000360000006661696c656420746f20696e7365727420696e746f207472696500002481120054000000740100001b0000002f636172676f2d686f6d652f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f747269652d64622d302e32322e332f7372632f7472696564626d75742e72732481120054000000670100000d0000009081120023000000605f5f49676e6f7265602063616e206e6576657220626520636f6e7374727563746564496e76616c69645769746e6573734d6178566f7465735265616368656457726f6e675570706572426f756e644e6f6e73656e7365496e7374616e744e6f74416c6c6f776564566f74657345786973744e6f7444656c65676174696e67496e73756666696369656e7446756e6473556e646572666c6f774f766572666c6f77416c726561647944656c65676174696e674e6f5065726d697373696f6e4e6f74566f7465724e6f74457870697265644e6f744c6f636b65644e6f6e6557616974696e67507265696d616765496e76616c69645265666572656e64756d496e76616c6964507265696d6167654d697373696e67496d6d696e656e74546f6f4561726c794e6f74496d6d696e656e744475706c6963617465507265696d6167654e6f7444656c656761746564416c72656164795665746f65644e6f50726f706f73616c496e76616c6964486173684e6f7453696d706c654d616a6f7269747950726f706f73616c426c61636b6c69737465644475706c696361746550726f706f73616c416c726561647943616e63656c6564426164496e64657850726f706f73616c4d697373696e6756616c75654c6f77546f6f4d616e7950726f706f73616c7300000000bc8712000700000000000000c4871200020000000000000000000000f48712000b00000000000000000000004c881200060000000000000054881200020000000000000000000000848812000a0000000000000000000000d48812000400000000000000d8881200020000000000000000000000088912000900000000000000000000005089120010000000000000006089120001000000000000000000000078891200080000000000000000000000b88912001000000000000000c8891200010000000000000000000000e0891200090000000000000000000000288a12001900000000000000c8891200010000000000000000000000448a12000b00000000000000000000009c8a12001800000000000000c8891200010000000000000000000000b48a12000b00000000000000000000000c8b12000a00000000000000188b1200030000000000000000000000608b12000f0000000000000000000000d88b12000d00000000000000c8891200010000000000000000000000e88b1200090000000000000000000000308c12001100000000000000448c12000100000000000000000000005c8c1200070000000000000000000000948c12000d00000000000000a48c1200010000000000000000000000bc8c1200070000000000000000000000f48c12000800000000000000fc8c1200030000000000000000000000448d1200140000000000000000000000e48d12000a0000000000000054311300000000000000000000000000f08d12000c0000000000000000000000508e1200160000000000000054311300000000000000000000000000688e1200050000000000000000000000908e12000d00000000000000a08e1200010000000000000000000000b88e12000a0000000000000000000000088f12001900000000000000a08e1200010000000000000000000000248f12000100000000000000000000002c8f12001600000000000000a08e1200010000000000000000000000448f12000c0000000000000000000000a48f12002200000000000000a08e1200010000000000000000000000c88f1200010000000000000000000000d08f12000d00000000000000e08f1200020000000000000000000000109012000f000000000000000000000088901200060000000000000090901200010000000000000000000000a8901200070000000000000000000000e09012000b00000000000000ec901200010000000000000000000000049112001b0000000000000000000000dc9112001100000000000000f0911200020000000000000000000000209212000f0000000000000000000000989212000e00000000000000a8921200020000000000000000000000d8921200010000000000000000000000e09212000900000000000000ec9212000200000000000000000000001c9312000f0000000000000000000000949312000f00000000000000a4931200010000000000000000000000bc931200070000000000000070726f706f73650000000000389712000d00000000000000b7f91200070000000000000048b6120005000000000000004db61200150000001cb5120028000000543113000000000044b51200460000008ab51200210000005431130000000000abb5120036000000e1b5120046000000543113000000000027b6120012000000543113000000000039b612000f0000007365636f6e6400000000000001b512000800000000000000c1941200120000000000000009b512001300000000000000d2a012000c00000037b312002e000000543113000000000065b3120041000000a6b31200450000005431130000000000ebb31200330000001eb41200510000006fb412004a0000005431130000000000b9b4120048000000766f74650000000072aa120009000000000000007baa12001800000000000000d488120004000000000000001eb3120019000000fcb112004d00000049b212002f00000054311300000000000b99120033000000543113000000000078b2120038000000b0b21200220000005431130000000000d2b212004c000000656d657267656e63795f63616e63656c0000000072aa12000900000000000000bf9712000f00000034b112005400000078b012000c000000543113000000000088b112003f0000005431130000000000c7b1120035000000543113000000000008a412001000000065787465726e616c5f70726f706f736500000000389712000d00000000000000b7f91200070000002cb012004c00000078b012000c000000543113000000000084b012003b0000005431130000000000d2ae1200360000005431130000000000bfb012004600000005b112002f00000065787465726e616c5f70726f706f73655f6d616a6f7269747900000082af120056000000d8af1200180000005431130000000000f0af12003c0000005431130000000000d2ae120036000000543113000000000008af1200530000005baf120027000000543113000000000003ae12000f00000065787465726e616c5f70726f706f73655f64656661756c7424ae12005200000076ae120021000000543113000000000097ae12003b0000005431130000000000d2ae120036000000543113000000000008af1200530000005baf120027000000543113000000000003ae12000f000000666173745f747261636b000000000000389712000d00000000000000b7f91200070000000000000012ae12000d00000000000000a9f912000e000000000000001fae12000500000000000000a9f912000e00000095ab120054000000e9ab12005900000042ac12003b00000054311300000000007dac1200350000005431130000000000b2ac12003e000000f0ac12005800000048ad1200260000006ead120055000000c3ad12002f0000005431130000000000f2ad120011000000543113000000000003ae12000f0000007665746f5f65787465726e616c00000093aa12002f0000005431130000000000c2aa1200370000005431130000000000f9aa12004c000000543113000000000045ab120010000000543113000000000055ab12004000000063616e63656c5f7265666572656e64756d0000000000000072aa120009000000000000007baa12001800000015aa1200150000005431130000000000d7a312003100000054311300000000002aaa120036000000543113000000000060aa12001200000063616e63656c5f7175657565640000000000000010aa12000500000000000000bf9712000f00000063a91200280000005431130000000000d7a312003100000054311300000000008ba91200320000005431130000000000bda912005300000064656c6567617465000000003aa912000200000000000000e3f812000c000000000000003ca912000a0000000000000046a912000a0000000000000050a91200070000000000000057a912000c000000dca512004f00000054311300000000002ba612005600000081a61200330000005431130000000000b4a61200580000000ca712001e0000002aa712005700000081a71200260000005431130000000000a7a7120052000000f9a71200560000004fa8120051000000a0a8120055000000f5a8120032000000543113000000000027a9120013000000543113000000000059a5120050000000a9a5120033000000756e64656c6567617465000018a412003400000054311300000000004ca4120058000000a4a41200380000005431130000000000dca41200520000002ea5120016000000543113000000000044a5120015000000543113000000000059a5120050000000a9a5120033000000636c6561725f7075626c69635f70726f706f73616c730000baa312001d0000005431130000000000d7a3120031000000543113000000000008a41200100000006e6f74655f707265696d61676500000000000000aaa31200100000000000000042ec12000700000009a312005800000061a312004900000054311300000000000b99120033000000543113000000000029a212003200000054311300000000005ba2120017000000543113000000000072a21200540000006e6f74655f707265696d6167655f6f7065726174696f6e616c000000c6a21200430000006e6f74655f696d6d696e656e745f707265696d61676500002aa11200510000007ba1120050000000cba112004e00000019a212001000000054311300000000000b99120033000000543113000000000029a212003200000054311300000000005ba2120017000000543113000000000072a21200540000006e6f74655f696d6d696e656e745f707265696d6167655f6f7065726174696f6e616c0000dea012004c000000726561705f707265696d61676500000000000000389712000d00000000000000b7f912000700000000000000baa012001800000000000000d2a012000c000000a19e12003d00000054311300000000000b991200330000005431130000000000de9e120034000000129f12004b0000005d9f12004000000054311300000000009d9f120054000000f19f12005700000048a012002c000000543113000000000074a012001800000054311300000000008ca012002e000000756e6c6f636b000000000000739a12000600000000000000e3f812000c000000199e12002900000054311300000000000b991200330000005431130000000000429e12002f0000005431130000000000719e12003000000072656d6f76655f766f74650000000000a00e13000500000000000000bf9712000f000000ce971200200000005431130000000000799a1200040000007d9a120023000000a09a120020000000c09a120025000000e59a120040000000259b1200360000005b9b1200220000007d9b120058000000d59b1200170000005431130000000000ec9b12002b000000179c12003c000000539c1200380000008b9c120030000000bb9c120057000000129d120057000000699d12003a0000005431130000000000a39d120053000000f69d1200230000005431130000000000a89912003e0000005431130000000000e6991200560000003c9a12003700000072656d6f76655f6f746865725f766f746500000000000000739a12000600000000000000e3f812000c00000000000000a00e13000500000000000000bf9712000f000000ce971200200000005431130000000000ee97120054000000429812004c0000008e98120056000000e49812002700000054311300000000000b9912003300000054311300000000003e991200540000009299120016000000a89912003e0000005431130000000000e6991200560000003c9a120037000000656e6163745f70726f706f73616c000000000000389712000d00000000000000b7f912000700000000000000a00e13000500000000000000bf9712000f0000006b97120054000000626c61636b6c69737400000000000000389712000d00000000000000b7f912000700000000000000459712000f000000000000005497120017000000d3941200520000002595120010000000543113000000000035951200550000008a95120055000000df9512001b0000005431130000000000fa9512003c0000005431130000000000369612003f0000007596120052000000c79612000b0000005431130000000000d296120051000000239712001500000063616e63656c5f70726f706f73616c0000000000b79412000a00000000000000c194120012000000f493120013000000543113000000000007941200410000005431130000000000489412003500000054311300000000007d9412003a0000002052656d6f766520612070726f706f73616c2e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206043616e63656c50726f706f73616c4f726967696e602e202d206070726f705f696e646578603a2054686520696e646578206f66207468652070726f706f73616c20746f2063616e63656c2e205765696768743a20604f28702960207768657265206070203d205075626c696350726f70733a3a3c543e3a3a6465636f64655f6c656e28296070726f705f696e646578436f6d706163743c50726f70496e6465783e205065726d616e656e746c7920706c61636520612070726f706f73616c20696e746f2074686520626c61636b6c6973742e20546869732070726576656e74732069742066726f6d2065766572206265696e672070726f706f73656420616761696e2e2049662063616c6c6564206f6e206120717565756564207075626c6963206f722065787465726e616c2070726f706f73616c2c207468656e20746869732077696c6c20726573756c7420696e206974206265696e672072656d6f7665642e2049662074686520607265665f696e6465786020737570706c69656420697320616e20616374697665207265666572656e64756d2077697468207468652070726f706f73616c20686173682c207468656e2069742077696c6c2062652063616e63656c6c65642e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d7573742062652060426c61636b6c6973744f726967696e602e202d206070726f706f73616c5f68617368603a205468652070726f706f73616c206861736820746f20626c61636b6c697374207065726d616e656e746c792e202d20607265665f696e646578603a20416e206f6e676f696e67207265666572656e64756d2077686f73652068617368206973206070726f706f73616c5f68617368602c2077686963682077696c6c2062652063616e63656c6c65642e205765696768743a20604f28702960202874686f756768206173207468697320697320616e20686967682d70726976696c6567652064697370617463682c20776520617373756d65206974206861732061202020726561736f6e61626c652076616c7565292e70726f706f73616c5f686173686d617962655f7265665f696e6465784f7074696f6e3c5265666572656e64756d496e6465783e20456e61637420612070726f706f73616c2066726f6d2061207265666572656e64756d2e20466f72206e6f77207765206a757374206d616b65207468652077656967687420626520746865206d6178696d756d2e5265666572656e64756d496e6465782052656d6f7665206120766f746520666f722061207265666572656e64756d2e2049662074686520607461726765746020697320657175616c20746f20746865207369676e65722c207468656e20746869732066756e6374696f6e2069732065786163746c79206571756976616c656e7420746f206072656d6f76655f766f7465602e204966206e6f7420657175616c20746f20746865207369676e65722c207468656e2074686520766f7465206d757374206861766520657870697265642c20656974686572206265636175736520746865207265666572656e64756d207761732063616e63656c6c65642c20626563617573652074686520766f746572206c6f737420746865207265666572656e64756d206f7220626563617573652074686520636f6e76696374696f6e20706572696f64206973206f7665722e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e202d2060746172676574603a20546865206163636f756e74206f662074686520766f746520746f2062652072656d6f7665643b2074686973206163636f756e74206d757374206861766520766f74656420666f722020207265666572656e64756d2060696e646578602e202d2060696e646578603a2054686520696e646578206f66207265666572656e64756d206f662074686520766f746520746f2062652072656d6f7665642e205765696768743a20604f2852202b206c6f6720522960207768657265205220697320746865206e756d626572206f66207265666572656e646120746861742060746172676574602068617320766f746564206f6e2e2020205765696768742069732063616c63756c6174656420666f7220746865206d6178696d756d206e756d626572206f6620766f74652e7461726765742049663a202d20746865207265666572656e64756d207761732063616e63656c6c65642c206f72202d20746865207265666572656e64756d206973206f6e676f696e672c206f72202d20746865207265666572656e64756d2068617320656e646564207375636820746861742020202d2074686520766f7465206f6620746865206163636f756e742077617320696e206f70706f736974696f6e20746f2074686520726573756c743b206f722020202d20746865726520776173206e6f20636f6e76696374696f6e20746f20746865206163636f756e74277320766f74653b206f722020202d20746865206163636f756e74206d61646520612073706c697420766f7465202e2e2e7468656e2074686520766f74652069732072656d6f76656420636c65616e6c7920616e64206120666f6c6c6f77696e672063616c6c20746f2060756e6c6f636b60206d617920726573756c7420696e206d6f72652066756e6473206265696e6720617661696c61626c652e2049662c20686f77657665722c20746865207265666572656e64756d2068617320656e64656420616e643a202d2069742066696e697368656420636f72726573706f6e64696e6720746f2074686520766f7465206f6620746865206163636f756e742c20616e64202d20746865206163636f756e74206d6164652061207374616e6461726420766f7465207769746820636f6e76696374696f6e2c20616e64202d20746865206c6f636b20706572696f64206f662074686520636f6e76696374696f6e206973206e6f74206f766572202e2e2e7468656e20746865206c6f636b2077696c6c206265206167677265676174656420696e746f20746865206f766572616c6c206163636f756e742773206c6f636b2c207768696368206d617920696e766f6c7665202a6f7665726c6f636b696e672a20287768657265207468652074776f206c6f636b732061726520636f6d62696e656420696e746f20612073696e676c65206c6f636b207468617420697320746865206d6178696d756d206f6620626f74682074686520616d6f756e74206c6f636b656420616e64207468652074696d65206973206974206c6f636b656420666f72292e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e6572206d7573742068617665206120766f7465207265676973746572656420666f72207265666572656e64756d2060696e646578602e20556e6c6f636b20746f6b656e732074686174206861766520616e2065787069726564206c6f636b2e202d2060746172676574603a20546865206163636f756e7420746f2072656d6f766520746865206c6f636b206f6e2e205765696768743a20604f2852296020776974682052206e756d626572206f6620766f7465206f66207461726765742e2052656d6f766520616e20657870697265642070726f706f73616c20707265696d61676520616e6420636f6c6c65637420746865206465706f7369742e202d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f6620612070726f706f73616c2e202d206070726f706f73616c5f6c656e6774685f75707065725f626f756e64603a20616e20757070657220626f756e64206f6e206c656e677468206f66207468652070726f706f73616c2e20202045787472696e736963206973207765696768746564206163636f7264696e6720746f20746869732076616c75652077697468206e6f20726566756e642e20546869732077696c6c206f6e6c7920776f726b2061667465722060566f74696e67506572696f646020626c6f636b732066726f6d207468652074696d6520746861742074686520707265696d61676520776173206e6f7465642c2069662069742773207468652073616d65206163636f756e7420646f696e672069742e2049662069742773206120646966666572656e74206163636f756e742c207468656e206974276c6c206f6e6c7920776f726b20616e206164646974696f6e616c2060456e6163746d656e74506572696f6460206c617465722e20456d6974732060507265696d616765526561706564602e205765696768743a20604f284429602077686572652044206973206c656e677468206f662070726f706f73616c2e70726f706f73616c5f6c656e5f75707065725f626f756e64436f6d706163743c7533323e2053616d6520617320606e6f74655f696d6d696e656e745f707265696d6167656020627574206f726967696e20697320604f7065726174696f6e616c507265696d6167654f726967696e602e2052656769737465722074686520707265696d61676520666f7220616e207570636f6d696e672070726f706f73616c2e2054686973207265717569726573207468652070726f706f73616c20746f20626520696e207468652064697370617463682071756575652e204e6f206465706f736974206973206e65656465642e205768656e20746869732063616c6c206973207375636365737366756c2c20692e652e2074686520707265696d61676520686173206e6f74206265656e2075706c6f61646564206265666f726520616e64206d61746368657320736f6d6520696d6d696e656e742070726f706f73616c2c206e6f2066656520697320706169642e202d2060656e636f6465645f70726f706f73616c603a2054686520707265696d616765206f6620612070726f706f73616c2e20456d6974732060507265696d6167654e6f746564602e205765696768743a20604f28452960207769746820452073697a65206f662060656e636f6465645f70726f706f73616c60202870726f7465637465642062792061207265717569726564206465706f736974292e2053616d6520617320606e6f74655f707265696d6167656020627574206f726967696e20697320604f7065726174696f6e616c507265696d6167654f726967696e602e2052656769737465722074686520707265696d61676520666f7220616e207570636f6d696e672070726f706f73616c2e205468697320646f65736e27742072657175697265207468652070726f706f73616c20746f20626520696e207468652064697370617463682071756575652062757420646f657320726571756972652061206465706f7369742c2072657475726e6564206f6e636520656e61637465642e656e636f6465645f70726f706f73616c20436c6561727320616c6c207075626c69632070726f706f73616c732e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e205765696768743a20604f283129602e20556e64656c65676174652074686520766f74696e6720706f776572206f66207468652073656e64696e67206163636f756e742e20546f6b656e73206d617920626520756e6c6f636b656420666f6c6c6f77696e67206f6e636520616e20616d6f756e74206f662074696d6520636f6e73697374656e74207769746820746865206c6f636b20706572696f64206f662074686520636f6e76696374696f6e2077697468207768696368207468652064656c65676174696f6e20776173206973737565642e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062652063757272656e746c792064656c65676174696e672e20456d6974732060556e64656c656761746564602e205765696768743a20604f28522960207768657265205220697320746865206e756d626572206f66207265666572656e64756d732074686520766f7465722064656c65676174696e6720746f20686173202020766f746564206f6e2e205765696768742069732063686172676564206173206966206d6178696d756d20766f7465732e2044656c65676174652074686520766f74696e6720706f77657220287769746820736f6d6520676976656e20636f6e76696374696f6e29206f66207468652073656e64696e67206163636f756e742e205468652062616c616e63652064656c656761746564206973206c6f636b656420666f72206173206c6f6e6720617320697427732064656c6567617465642c20616e64207468657265616674657220666f72207468652074696d6520617070726f70726961746520666f722074686520636f6e76696374696f6e2773206c6f636b20706572696f642e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e696e67206163636f756e74206d757374206569746865723a2020202d2062652064656c65676174696e6720616c72656164793b206f722020202d2068617665206e6f20766f74696e67206163746976697479202869662074686572652069732c207468656e2069742077696c6c206e65656420746f2062652072656d6f7665642f636f6e736f6c69646174656420202020207468726f7567682060726561705f766f746560206f722060756e766f746560292e202d2060746f603a20546865206163636f756e742077686f736520766f74696e6720746865206074617267657460206163636f756e74277320766f74696e6720706f7765722077696c6c20666f6c6c6f772e202d2060636f6e76696374696f6e603a2054686520636f6e76696374696f6e20746861742077696c6c20626520617474616368656420746f207468652064656c65676174656420766f7465732e205768656e207468652020206163636f756e7420697320756e64656c6567617465642c207468652066756e64732077696c6c206265206c6f636b656420666f722074686520636f72726573706f6e64696e6720706572696f642e202d206062616c616e6365603a2054686520616d6f756e74206f6620746865206163636f756e7427732062616c616e636520746f206265207573656420696e2064656c65676174696e672e2054686973206d7573742020206e6f74206265206d6f7265207468616e20746865206163636f756e7427732063757272656e742062616c616e63652e20456d697473206044656c656761746564602e746f636f6e76696374696f6e436f6e76696374696f6e62616c616e636542616c616e63654f663c543e2043616e63656c20612070726f706f73616c2071756575656420666f7220656e6163746d656e742e202d20607768696368603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e205765696768743a20604f284429602077686572652060446020697320746865206974656d7320696e207468652064697370617463682071756575652e205765696768746564206173206044203d203130602e77686963682052656d6f76652061207265666572656e64756d2e202d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e2023205765696768743a20604f283129602e7265665f696e646578436f6d706163743c5265666572656e64756d496e6465783e205665746f20616e6420626c61636b6c697374207468652065787465726e616c2070726f706f73616c20686173682e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d75737420626520605665746f4f726967696e602e202d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c20746f207665746f20616e6420626c61636b6c6973742e20456d69747320605665746f6564602e205765696768743a20604f2856202b206c6f6728562929602077686572652056206973206e756d626572206f6620606578697374696e67207665746f65727360205363686564756c65207468652063757272656e746c792065787465726e616c6c792d70726f706f736564206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c656420696d6d6564696174656c792e204966207468657265206973206e6f2065787465726e616c6c792d70726f706f736564207265666572656e64756d2063757272656e746c792c206f72206966207468657265206973206f6e6520627574206974206973206e6f742061206d616a6f726974792d63617272696573207265666572656e64756d207468656e206974206661696c732e20546865206469737061746368206f6620746869732063616c6c206d757374206265206046617374547261636b4f726967696e602e202d206070726f706f73616c5f68617368603a205468652068617368206f66207468652063757272656e742065787465726e616c2070726f706f73616c2e202d2060766f74696e675f706572696f64603a2054686520706572696f64207468617420697320616c6c6f77656420666f7220766f74696e67206f6e20746869732070726f706f73616c2e20496e6372656173656420746f2020206046617374547261636b566f74696e67506572696f646020696620746f6f206c6f772e202d206064656c6179603a20546865206e756d626572206f6620626c6f636b20616674657220766f74696e672068617320656e64656420696e20617070726f76616c20616e6420746869732073686f756c64206265202020656e61637465642e205468697320646f65736e277420686176652061206d696e696d756d20616d6f756e742e20456d697473206053746172746564602e205765696768743a20604f28312960766f74696e675f706572696f6464656c6179205363686564756c652061206e656761746976652d7475726e6f75742d62696173207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f207363686564756c6520616e2065787465726e616c207265666572656e64756d2e20546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c44656661756c744f726967696e602e202d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e20556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c6163652061207072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e205363686564756c652061206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f207363686564756c6520616e2065787465726e616c207265666572656e64756d2e20546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c4d616a6f726974794f726967696e602e205363686564756c652061207265666572656e64756d20746f206265207461626c6564206f6e6365206974206973206c6567616c20746f207363686564756c6520616e2065787465726e616c207265666572656e64756d2e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206045787465726e616c4f726967696e602e205765696768743a20604f2856296020776974682056206e756d626572206f66207665746f65727320696e2074686520626c61636b6c697374206f662070726f706f73616c2e2020204465636f64696e6720766563206f66206c656e67746820562e2043686172676564206173206d6178696d756d205363686564756c6520616e20656d657267656e63792063616e63656c6c6174696f6e206f662061207265666572656e64756d2e2043616e6e6f742068617070656e20747769636520746f207468652073616d6520546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206043616e63656c6c6174696f6e4f726967696e602e202d607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e20566f746520696e2061207265666572656e64756d2e2049662060766f74652e69735f6179652829602c2074686520766f746520697320746f20656e616374207468652070726f706f73616c3b206f7468657277697365206974206973206120766f746520746f206b65657020746865207374617475732071756f2e202d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f20766f746520666f722e202d2060766f7465603a2054686520766f746520636f6e66696775726174696f6e2e205765696768743a20604f28522960207768657265205220697320746865206e756d626572206f66207265666572656e64756d732074686520766f7465722068617320766f746564206f6e2e4163636f756e74566f74653c42616c616e63654f663c543e3e205369676e616c732061677265656d656e742077697468206120706172746963756c61722070726f706f73616c2e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652066756e647320746f20636f76657220746865206465706f7369742c20657175616c20746f20746865206f726967696e616c206465706f7369742e202d206070726f706f73616c603a2054686520696e646578206f66207468652070726f706f73616c20746f207365636f6e642e202d20607365636f6e64735f75707065725f626f756e64603a20616e20757070657220626f756e64206f6e207468652063757272656e74206e756d626572206f66207365636f6e6473206f6e207468697320202070726f706f73616c2e2045787472696e736963206973207765696768746564206163636f7264696e6720746f20746869732076616c75652077697468206e6f20726566756e642e205765696768743a20604f28532960207768657265205320697320746865206e756d626572206f66207365636f6e647320612070726f706f73616c20616c7265616479206861732e70726f706f73616c7365636f6e64735f75707065725f626f756e642050726f706f736520612073656e73697469766520616374696f6e20746f2062652074616b656e2e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652066756e647320746f20636f76657220746865206465706f7369742e202d206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20707265696d6167652e202d206076616c7565603a2054686520616d6f756e74206f66206465706f73697420286d757374206265206174206c6561737420604d696e696d756d4465706f73697460292e20456d697473206050726f706f736564602e205765696768743a20604f2870296076616c7565436f6d706163743c42616c616e63654f663c543e3e00000000000034bb12000f000000000000000000000043bb12000900000000000000000000000000000000000000000000000000000000000000543113004cbb120000000000000000005cbb1200010000000000000001000000000000008c8012000b000000000000000000000064bb12002700000000000000000000000000000000000000000000000000000000000000543113008cbb120000000000000000009cbb1200010000000000000001000000000000009780120009000000010500000000000043bb12000900000000000000a4bb1200210000000000000000000000000000000000000054311300c8bb12000000000000000000d8bb12000300000000000000000000000000000077801200090000000106000000000000b7f912000700000000000000f0bb12003a00000000000000000000000000000000000000543113002cbc120000000000000000003cbc1200020000000000000000000000000000004cbc12000f0000000000000000000000bf9712000f00000000000000000000000000000000000000000000000000000000000000543113005cbc120000000000000000006cbc12000100000000000000010000000000000074bc12000d0000000000000000000000bf9712000f000000000000000000000000000000000000000000000000000000000000005431130084bc1200000000000000000094bc12000200000000000000010000000000000067801200100000000105000000000000bf9712000f00000000000000a4bc1200350000000000000000000000000000000000000054311300dcbc12000000000000000000ecbc12000300000000000000000000000000000004bd1200080000000105000000000000e3f812000c000000000000000cbd120032000000000000000000000000000000000000005431130040bd1200000000000000000050bd12000400000000000000010000000000000070bd1200050000000105000000000000e3f812000c00000000000000a9f912000e000000000000000000000000000000000000005431130078bd1200000000000000000088bd120004000000000000000000000000000000a8bd1200150000000000000000000000a1fb1200040000000000000000000000000000000000000000000000000000000000000054311300c0bd12000000000000000000d0bd120002000000000000000100000000000000808012000c0000000000000000000000e0bd1200180000000000000000000000000000000000000000000000000000000000000054311300f8bd1200000000000000000008be12000400000000000000000000000000000028be1200090000000106000000000000b7f91200070000000000000031be120023000000000000000000000000000000000000005431130054be1200000000000000000064be12000200000000000000000000000000000074be12000d0000000106000000000000b7f912000700000000000000a1fb120004000000000000000000000000000000000000005431130084be1200000000000000000094be1200010000000000000001000000000000009cbe12000e0000000000000000000000aabe1200080000000000000000000000000000000000000000000000000000000000000054311300b4be12000000000000000000c4be12000300000000000000000000005075626c696350726f70436f756e7450726f70496e6465781200000000000000010000002200000075c512003d0000005665633c2850726f70496e6465782c20543a3a486173682c20543a3a4163636f756e744964293e00120000000000000001000000030100002dc5120048000000285665633c543a3a4163636f756e7449643e2c2042616c616e63654f663c543e2900000012000000000000000100000023000000d6c41200210000005431130000000000f7c4120036000000507265696d6167655374617475733c543a3a4163636f756e7449642c2042616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e00001200000000000000010000002300000045c41200580000009dc41200390000005265666572656e64756d436f756e740012000000000000000100000022000000f9c312004c0000004c6f77657374556e62616b65640000001200000000000000010000002200000079c3120049000000c2c31200370000005265666572656e64756d496e666f3c543a3a426c6f636b4e756d6265722c20543a3a486173682c2042616c616e63654f663c543e3e000000120000000000000001000000230000000ac312002d000000543113000000000037c3120042000000566f74696e674f66566f74696e673c42616c616e63654f663c543e2c20543a3a4163636f756e7449642c20543a3a426c6f636b4e756d6265723e00001200000000000000010000000401000022c212005700000079c21200570000005431130000000000d0c212003a0000004c6f636b730000001200000000000000010000002300000047c11200570000009ec11200540000005431130000000000f2c11200300000004c6173745461626c656457617345787465726e616c00000012000000000000000100000023000000e7c01200560000003dc112000a00000028543a3a486173682c20566f74655468726573686f6c642912000000000000000100000023000000f9bf1200560000004fc0120055000000a4c0120029000000cdc012001a000000426c61636b6c69737428543a3a426c6f636b4e756d6265722c205665633c543a3a4163636f756e7449643e29120000000000000001000000230000006bbf120054000000bfbf12003a00000043616e63656c6c6174696f6e730000001200000000000000010000002300000021bf12004a00000053746f7261676556657273696f6e52656c6561736573000012000000000000000100000023000000dcbe12001f0000005431130000000000fbbe1200260000002053746f726167652076657273696f6e206f66207468652070616c6c65742e204e6577206e6574776f726b732073746172742077697468206c6173742076657273696f6e2e205265636f7264206f6620616c6c2070726f706f73616c7320746861742068617665206265656e207375626a65637420746f20656d657267656e63792063616e63656c6c6174696f6e2e2041207265636f7264206f662077686f207665746f656420776861742e204d6170732070726f706f73616c206861736820746f206120706f737369626c65206578697374656e7420626c6f636b206e756d6265722028756e74696c207768656e206974206d6179206e6f742062652072657375626d69747465642920616e642077686f207665746f65642069742e20546865207265666572656e64756d20746f206265207461626c6564207768656e6576657220697420776f756c642062652076616c696420746f207461626c6520616e2065787465726e616c2070726f706f73616c2e20546869732068617070656e73207768656e2061207265666572656e64756d206e6565647320746f206265207461626c656420616e64206f6e65206f662074776f20636f6e646974696f6e7320617265206d65743a202d20604c6173745461626c656457617345787465726e616c60206973206066616c7365603b206f72202d20605075626c696350726f70736020697320656d7074792e205472756520696620746865206c617374207265666572656e64756d207461626c656420776173207375626d69747465642065787465726e616c6c792e2046616c7365206966206974207761732061207075626c69632070726f706f73616c2e204163636f756e747320666f7220776869636820746865726520617265206c6f636b7320696e20616374696f6e207768696368206d61792062652072656d6f76656420617420736f6d6520706f696e7420696e20746865206675747572652e205468652076616c75652069732074686520626c6f636b206e756d62657220617420776869636820746865206c6f636b206578706972657320616e64206d61792062652072656d6f7665642e2054574f582d4e4f54453a204f4b20e2809520604163636f756e7449646020697320612073656375726520686173682e20416c6c20766f74657320666f72206120706172746963756c617220766f7465722e2057652073746f7265207468652062616c616e636520666f7220746865206e756d626572206f6620766f74657320746861742077652068617665207265636f726465642e20546865207365636f6e64206974656d2069732074686520746f74616c20616d6f756e74206f662064656c65676174696f6e732c20746861742077696c6c2062652061646465642e2054574f582d4e4f54453a205341464520617320604163636f756e7449646073206172652063727970746f2068617368657320616e797761792e20496e666f726d6174696f6e20636f6e6365726e696e6720616e7920676976656e207265666572656e64756d2e2054574f582d4e4f54453a205341464520617320696e646578657320617265206e6f7420756e64657220616e2061747461636b6572e280997320636f6e74726f6c2e20546865206c6f77657374207265666572656e64756d20696e64657820726570726573656e74696e6720616e20756e62616b6564207265666572656e64756d2e20457175616c20746f20605265666572656e64756d436f756e74602069662074686572652069736e2774206120756e62616b6564207265666572656e64756d2e20546865206e6578742066726565207265666572656e64756d20696e6465782c20616b6120746865206e756d626572206f66207265666572656e6461207374617274656420736f206661722e204d6170206f662068617368657320746f207468652070726f706f73616c20707265696d6167652c20616c6f6e6720776974682077686f207265676973746572656420697420616e64207468656972206465706f7369742e2054686520626c6f636b206e756d6265722069732074686520626c6f636b20617420776869636820697420776173206465706f73697465642e2054686f73652077686f2068617665206c6f636b65642061206465706f7369742e2054574f582d4e4f54453a20536166652c20617320696e6372656173696e6720696e7465676572206b6579732061726520736166652e20546865207075626c69632070726f706f73616c732e20556e736f727465642e20546865207365636f6e64206974656d206973207468652070726f706f73616c277320686173682e20546865206e756d626572206f6620287075626c6963292070726f706f73616c7320746861742068617665206265656e206d61646520736f206661722e00000000000074c712000f00000000000000a9f912000e000000000000005431130084c71200000000000000000094c71200050000000000000000000000bcc712000c00000000000000a9f912000e0000000000000054311300c8c712000000000000000000d8c71200010000000000000000000000e0c712000c00000000000000a9f912000e0000000000000054311300ecc712000000000000000000fcc7120001000000000000000000000004c812000e0000000000000057a912000c000000000000005431130014c81200000000000000000024c812000100000000000000000000002cc812001500000000000000a9f912000e000000000000005431130044c81200000000000000000054c812000100000000000000000000005cc812000d00000000000000a9f912000e00000000000000543113006cc8120000000000000000007cc8120001000000000000000000000084c81200130000000000000057a912000c000000000000005431130098c812000000000000000000a8c81200010000000000000000000000b0c812000800000000000000cbed1200030000000000000054311300b8c812000000000000000000c8c812000100000000000000456e6163746d656e74506572696f6400120000000000000001000000050100008dca12005c0000005431130000000000e9ca12004c00000035cb12005a0000008fcb1200270000004c61756e6368506572696f641200000000000000010000000501000054ca120039000000566f74696e67506572696f641200000000000000010000000501000026ca12002e0000004d696e696d756d4465706f736974000012000000000000000100000045000000d9c912004d00000046617374547261636b566f74696e67506572696f64000000120000000000000001000000060100009ec912003b000000436f6f6c6f6666506572696f640000001200000000000000010000004a00000046c9120058000000507265696d616765427974654465706f7369740012000000000000000100000025000000fcc812004a0000004d6178566f74657312000000000000000100000052000000d0c812002c00000020546865206d6178696d756d206e756d626572206f6620766f74657320666f7220616e206163636f756e742e2054686520616d6f756e74206f662062616c616e63652074686174206d757374206265206465706f7369746564207065722062797465206f6620707265696d6167652073746f7265642e20506572696f6420696e20626c6f636b7320776865726520616e2065787465726e616c2070726f706f73616c206d6179206e6f742062652072652d7375626d6974746564206166746572206265696e67207665746f65642e204d696e696d756d20766f74696e6720706572696f6420616c6c6f77656420666f7220616e20656d657267656e6379207265666572656e64756d2e20546865206d696e696d756d20616d6f756e7420746f20626520757365642061732061206465706f73697420666f722061207075626c6963207265666572656e64756d2070726f706f73616c2e20486f77206f6674656e2028696e20626c6f636b732920746f20636865636b20666f72206e657720766f7465732e20486f77206f6674656e2028696e20626c6f636b7329206e6577207075626c6963207265666572656e646120617265206c61756e636865642e20546865206d696e696d756d20706572696f64206f66206c6f636b696e6720616e642074686520706572696f64206265747765656e20612070726f706f73616c206265696e6720617070726f76656420616e6420656e61637465642e2049742073686f756c642067656e6572616c6c792062652061206c6974746c65206d6f7265207468616e2074686520756e7374616b6520706572696f6420746f20656e73757265207468617420766f74696e67207374616b657273206861766520616e206f70706f7274756e69747920746f2072656d6f7665207468656d73656c7665732066726f6d207468652073797374656d20696e207468652063617365207768657265207468657920617265206f6e20746865206c6f73696e672073696465206f66206120766f74652e000000000000d0ce12000800000000000000d8ce1200020000000000000000000000e8ce1200010000000000000000000000f0ce12000600000000000000f8ce120003000000000000000000000010cf120001000000000000000000000018cf12000e000000000000005431130000000000000000000000000028cf120001000000000000000000000030cf1200070000000000000038cf120002000000000000000000000048cf120001000000000000000000000050cf1200060000000000000058cf120001000000000000000000000060cf120001000000000000000000000068cf1200090000000000000058cf120001000000000000000000000074cf12000100000000000000000000007ccf1200090000000000000058cf120001000000000000000000000088cf120001000000000000000000000090cf1200080000000000000098cf1200020000000000000000000000a8cf1200010000000000000000000000b0cf12000900000000000000bccf1200020000000000000000000000cccf1200010000000000000000000000d4cf12000b00000000000000fce41200010000000000000000000000e0cf1200010000000000000000000000e8cf12000600000000000000f0cf120003000000000000000000000008d0120001000000000000000000000010d012000d0000000000000020d0120003000000000000000000000038d0120001000000000000000000000040d012000c0000000000000020d012000300000000000000000000004cd01200020000000000000000000000748212000f000000000000005cd012000200000000000000000000006cd01200020000000000000000000000948212000f000000000000005cd012000200000000000000000000007cd012000200000000000000000000008cd012000e000000000000009cd01200040000000000000000000000bcd01200020000000000000000000000ccd012000800000000000000fce41200010000000000000000000000d4d01200010000000000000000000000dcd012000b00000000000000e8d01200010000000000000000000000f0d01200010000000000000050726f706f73656443bb120009000000d5d1120007000000bcd512004c0000005461626c6564000043bb120009000000d5d1120007000000aed512000e0000004fd512005f00000045787465726e616c5461626c6564000029d51200260000005374617274656400bf9712000f0000001cd512000d000000ebd41200310000005061737365640000bf9712000f000000b1d412003a0000004e6f7450617373656400000077d412003a00000043616e63656c6c656400000048d412002f0000004578656375746564bf9712000f000000a1fb12000400000016d412003200000044656c65676174656400000079e512000900000079e5120009000000ced3120048000000556e64656c6567617465640090d312003e0000005665746f6564000079e512000900000082e512000400000085d312000b00000041d3120044000000507265696d6167654e6f74656400000082e512000400000079e5120009000000d5d1120007000000e9d2120058000000507265696d616765557365647fd2120045000000c4d212002500000082e5120004000000bf9712000f0000003cd21200430000001fd212001d000000dcd11200430000001fd212001d000000507265696d616765526561706564000082e512000400000079e5120009000000d5d112000700000079e51200090000005dd112004b000000a8d112002d000000556e6c6f636b65642ed112002f000000426c61636b6c69737465640082e5120004000000f8d012003600000020412070726f706f73616c205c5b686173685c5d20686173206265656e20626c61636b6c6973746564207065726d616e656e746c792e20416e205c5b6163636f756e745c5d20686173206265656e20756e6c6f636b6564207375636365737366756c6c792e2041207265676973746572656420707265696d616765207761732072656d6f76656420616e6420746865206465706f73697420636f6c6c656374656420627920746865207265617065722e205c5b70726f706f73616c5f686173682c2070726f76696465722c206465706f7369742c207265617065725c5d42616c616e636520412070726f706f73616c20636f756c64206e6f7420626520657865637574656420626563617573652069747320707265696d61676520776173206d697373696e672e205c5b70726f706f73616c5f686173682c207265665f696e6465785c5d20412070726f706f73616c20636f756c64206e6f7420626520657865637574656420626563617573652069747320707265696d6167652077617320696e76616c69642e20412070726f706f73616c20707265696d616765207761732072656d6f76656420616e6420757365642028746865206465706f736974207761732072657475726e6564292e205c5b70726f706f73616c5f686173682c2070726f76696465722c206465706f7369745c5d20412070726f706f73616c277320707265696d61676520776173206e6f7465642c20616e6420746865206465706f7369742074616b656e2e205c5b70726f706f73616c5f686173682c2077686f2c206465706f7369745c5d20416e2065787465726e616c2070726f706f73616c20686173206265656e207665746f65642e205c5b77686f2c2070726f706f73616c5f686173682c20756e74696c5c5d426c6f636b4e756d62657220416e205c5b6163636f756e745c5d206861732063616e63656c6c656420612070726576696f75732064656c65676174696f6e206f7065726174696f6e2e20416e206163636f756e74206861732064656c65676174656420746865697220766f746520746f20616e6f74686572206163636f756e742e205c5b77686f2c207461726765745c5d20412070726f706f73616c20686173206265656e20656e61637465642e205c5b7265665f696e6465782c2069735f6f6b5c5d2041207265666572656e64756d20686173206265656e2063616e63656c6c65642e205c5b7265665f696e6465785c5d20412070726f706f73616c20686173206265656e2072656a6563746564206279207265666572656e64756d2e205c5b7265665f696e6465785c5d20412070726f706f73616c20686173206265656e20617070726f766564206279207265666572656e64756d2e205c5b7265665f696e6465785c5d2041207265666572656e64756d2068617320626567756e2e205c5b7265665f696e6465782c207468726573686f6c645c5d566f74655468726573686f6c6420416e2065787465726e616c2070726f706f73616c20686173206265656e207461626c65642e2041207075626c69632070726f706f73616c20686173206265656e207461626c656420666f72207265666572656e64756d20766f74652e205c5b70726f706f73616c5f696e6465782c206465706f7369742c206465706f7369746f72735c5d5665633c4163636f756e7449643e2041206d6f74696f6e20686173206265656e2070726f706f7365642062792061207075626c6963206163636f756e742e205c5b70726f706f73616c5f696e6465782c206465706f7369745c5d4661696c656420746f2067656e657261746520686973746f726963616c20616e6365737472792d696e636c7573696f6e2070726f6f662e004c141300570000001b02000001000000496e73657274696f6e206e657665722064656c657465732e2481120054000000640200000d000000617373657274696f6e206661696c65643a20216578697374696e675f6b65792e69735f656d70747928290000248112005400000080030000150000000000000058831200080000000000000088da1200010000000000000000000000498312000f0000000000000090da120001000000000000000000000041831200080000000000000098da1200010000000000000000000000328312000f00000000000000a0da1200010000000000000000000000218312001100000000000000a8da12000100000000000000000000000e8312001300000000000000b0da1200010000000000000000000000fd8212001100000000000000b8da1200010000000000000000000000f28212000b00000000000000c0da1200010000000000000000000000e88212000a00000000000000c8da1200010000000000000000000000db8212000d00000000000000d0da1200010000000000000000000000cf8212000c00000000000000d8da1200010000000000000000000000be8212001100000000000000e0da1200010000000000000000000000b38212000b00000000000000e8da1200010000000000000000000000ab8212000800000000000000f0da1200010000000000000000000000a38212000800000000000000f8da1200010000000000000000000000948212000f0000000000000000db120001000000000000000000000083821200110000000000000008db1200010000000000000000000000748212000f0000000000000010db1200010000000000000000000000698212000b0000000000000018db120001000000000000000000000060821200090000000000000020db1200010000000000000000000000568212000a0000000000000028db12000100000000000000000000004e821200080000000000000030db1200010000000000000000000000428212000c0000000000000038db120001000000000000000000000031821200110000000000000040db120001000000000000000000000029821200080000000000000048db120001000000000000000000000020821200090000000000000050db12000100000000000000000000000f821200110000000000000058db1200010000000000000000000000028212000d0000000000000060db1200010000000000000000000000f88112000a0000000000000068db1200020000000000000000000000e7811200110000000000000078db1200010000000000000000000000df811200080000000000000080db1200010000000000000000000000d08112000f0000000000000088db1200010000000000000000000000c18112000f0000000000000090db1200010000000000000000000000b38112000e0000000000000098db1200010000000000000000000000608312001000000000000000a0db120001000000000000004fe012000e00000037e012001800000029e012000e00000003e0120026000000eddf120016000000d2df12001b000000a7df12002b0000009adf12000d00000085df1200150000005edf12002700000050df12000e00000039df1200170000002cdf12000d00000022df12000a00000019df12000900000006df120013000000e4de120022000000d3de120011000000bede12001500000095de12002900000059de12003c00000027de120032000000f4dd120033000000d1dd120023000000a8dd1200290000007edd12002a0000003edd12004000000015dd12002900000084dc120056000000dadc12003b0000004ddc12003700000027dc12002600000012dc120015000000f1db120021000000cddb120024000000a8db120025000000204d6178696d756d206e756d626572206f662070726f706f73616c7320726561636865642e205468652070726f7669646564207769746e65737320646174612069732077726f6e672e204d6178696d756d206e756d626572206f6620766f74657320726561636865642e20496e76616c696420757070657220626f756e642e2044656c65676174696f6e20746f206f6e6573656c66206d616b6573206e6f2073656e73652e2054686520696e7374616e74207265666572656e64756d206f726967696e2069732063757272656e746c7920646973616c6c6f7765642e20546865206163636f756e742063757272656e746c792068617320766f74657320617474616368656420746f20697420616e6420746865206f7065726174696f6e2063616e6e6f74207375636365656420756e74696c207468657365206172652072656d6f7665642c20656974686572207468726f7567682060756e766f746560206f722060726561705f766f7465602e20546865206163636f756e74206973206e6f742063757272656e746c792064656c65676174696e672e20546f6f206869676820612062616c616e6365207761732070726f7669646564207468617420746865206163636f756e742063616e6e6f74206166666f72642e20416e20756e657870656374656420696e746567657220756e646572666c6f77206f636375727265642e20416e20756e657870656374656420696e7465676572206f766572666c6f77206f636375727265642e20546865206163636f756e7420697320616c72656164792064656c65676174696e672e20546865206163746f7220686173206e6f207065726d697373696f6e20746f20636f6e647563742074686520616374696f6e2e2054686520676976656e206163636f756e7420646964206e6f7420766f7465206f6e20746865207265666572656e64756d2e20546865206c6f636b206f6e20746865206163636f756e7420746f20626520756e6c6f636b656420686173206e6f742079657420657870697265642e2054686520746172676574206163636f756e7420646f6573206e6f7420686176652061206c6f636b2e204e6f2070726f706f73616c732077616974696e6720496e76616c696420707265696d61676520566f746520676976656e20666f7220696e76616c6964207265666572656e64756d20507265696d616765206e6f7420666f756e6420496d6d696e656e7420546f6f206561726c79204e6f7420696d6d696e656e7420507265696d61676520616c7265616479206e6f746564204e6f742064656c656761746564204964656e74697479206d6179206e6f74207665746f20612070726f706f73616c207477696365204e6f2065787465726e616c2070726f706f73616c20496e76616c69642068617368204e6578742065787465726e616c2070726f706f73616c206e6f742073696d706c65206d616a6f726974792050726f706f73616c207374696c6c20626c61636b6c69737465642050726f706f73616c20616c7265616479206d6164652043616e6e6f742063616e63656c207468652073616d652070726f706f73616c20747769636520556e6b6e6f776e20696e6465782050726f706f73616c20646f6573206e6f742065786973742056616c756520746f6f206c6f77000000120000000100000001000000070100004c14130057000000e70400002d0000004c14130057000000e8040000300000004661696c656420746f206465636f64652060507265696d616765537461747573602076617269616e740000004c14130057000000170500002d0000004c141300570000001e050000400000003a6865617070616765735370656356657273696f6e4e65656473546f496e637265617365496e76616c6964537065634e616d654661696c6564546f4578747261637452756e74696d6556657273696f6e3a636f64653a6368616e6765735f747269652f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f73797374656d2f7372632f6c69622e727300008ee212002300000064e212002a0000000ce21200580000006f00000001000000496e7374616e6365314d656d626572736869704d656d62657273416c72656164794d656d6265725072696d654e6f744d656d6265720000000ce2120058000000a70000000d0000000ce2120058000000d6000000110000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f6d656d626572736869702f7372632f6c69622e7273696e7465726e616c206572726f723a20656e746572656420756e726561636861626c6520636f64653a205f5f5068616e746f6d4974656d2073686f756c64206e6576657220626520757365642e6d6f646c70792f7574696c6973756261000000d4e2120052000000af000000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f746970732f7372632f6c69622e72732f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f62616c616e6365732f7372632f6c69622e72733a65787472696e7369635f696e6465780000000094e412001000000000000000a4e41200010000000000000000000000ace41200010000000000000000000000b4e412000f00000000000000c4e41200020000000000000000000000d4e41200010000000000000000000000dce412000b0000000000000054311300000000000000000000000000e8e41200010000000000000000000000f0e412000a00000000000000fce4120001000000000000000000000004e512000100000000000000000000000ce512000d00000000000000fce412000100000000000000000000001ce5120001000000000000000000000024e5120008000000000000002ce512000200000000000000000000003ce51200010000000000000045787472696e73696353756363657373fae512000c00000006e612002e00000045787472696e7369634661696c656400113513000d000000fae512000c000000d5e5120025000000436f64655570646174656400c0e51200150000004e65774163636f756e74000079e5120009000000a1e512001f0000004b696c6c65644163636f756e7400000086e512001b00000052656d61726b656479e512000900000082e512000400000044e5120035000000204f6e206f6e2d636861696e2072656d61726b2068617070656e65642e205c5b6f726967696e2c2072656d61726b5f686173685c5d4163636f756e7449644861736820416e205c5b6163636f756e745c5d20776173207265617065642e2041206e6577205c5b6163636f756e745c5d2077617320637265617465642e20603a636f6465602077617320757064617465642e20416e2065787472696e736963206661696c65642e205c5b6572726f722c20696e666f5c5d4469737061746368496e666f20416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e205c5b696e666f5c5d00000000ece712000a00000000000000f8e7120001000000000000000000000010e8120001000000000000000000000018e81200060000000000000020e8120001000000000000000000000038e8120005000000000000000000000060e812000e0000000000000070e8120001000000000000000000000088e81200080000000000000000000000c8e812000800000000000000d0e81200010000000000000000000000e8e812000a000000000000000000000038e912001700000000000000d0e8120001000000000000000000000050e9120008000000000000000000000090e912001700000000000000a8e91200010000000000000000000000c0e912000a000000000000000000000010ea12000b000000000000001cea120001000000000000000000000034ea120008000000000000000000000074ea12000c0000000000000080ea120001000000000000000000000098ea1200080000000000000000000000d8ea12000b00000000000000e4ea120002000000000000000000000014eb12000b00000000000000000000006ceb1200110000000000000080eb120001000000000000000000000098eb1200060000000000000066696c6c5f626c6f636b0000000000004ff31200060000000000000055f31200070000000df312004200000072656d61726b00000000000006f31200070000000000000042ec120007000000ebf212001b0000005431130000000000f2eb12000b0000003cef12000900000036ec12000c0000007365745f686561705f7061676573000000000000e3f212000500000000000000e8f212000300000060f212003f0000005431130000000000f2eb12000b0000003cef1200090000009ff2120013000000b2f2120019000000cbf212001800000036ec12000c0000007365745f636f6465000000005cf21200040000000000000042ec12000700000014f112001a0000005431130000000000f2eb12000b0000002ef112004d00000095f01200220000007bf112005e0000002bec12000b000000d9f112005f00000038f212002400000036ec12000c0000007365745f636f64655f776974686f75745f636865636b73002af01200470000005431130000000000f2eb12000b00000071f012002400000095f01200220000002bec12000b000000b7f012005d00000036ec12000c0000007365745f6368616e6765735f747269655f636f6e6669670000000000f7ef120013000000000000000af012002000000014ef1200280000005431130000000000f2eb12000b0000003cef12000900000045ef12002c00000071ef120036000000a7ef120019000000c0ef12000d000000cdef12002a00000036ec12000c0000007365745f73746f72616765000000000002ef1200050000000000000007ef12000d00000086ee12001b0000005431130000000000f2eb12000b000000a1ee120025000000c6ee12001f000000e5ee12001d00000060ee12001a00000036ec12000c0000006b696c6c5f73746f72616765000000007aee120004000000000000007eee120008000000ceed12001e0000005431130000000000f2eb12000b000000eced12003f0000002bee12001900000044ee12001c00000060ee12001a00000036ec12000c0000006b696c6c5f7072656669780000000000baed12000600000000000000c0ed12000300000000000000c3ed12000800000000000000cbed12000300000049ec12004500000054311300000000008eec12004f000000ddec1200500000005431130000000000f2eb12000b0000002ded12003700000064ed1200190000007ded12001d0000009aed12002000000036ec12000c00000072656d61726b5f776974685f6576656e740000000000000018e81200060000000000000042ec120007000000c8eb12002a0000005431130000000000f2eb12000b000000fdeb12002e0000002bec12000b00000036ec12000c000000204d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e2023203c7765696768743e202d20604f28622960207768657265206220697320746865206c656e677468206f66207468652072656d61726b2e202d2031206576656e742e2023203c2f7765696768743e5665633c75383e204b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e202a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465722074686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e202d20604f285029602077686572652060506020616d6f756e74206f66206b657973207769746820707265666978206070726566697860202d206050602073746f726167652064656c6574696f6e732e202d2042617365205765696768743a20302e383334202a205020c2b573202d205772697465733a204e756d626572206f66207375626b657973202b20317072656669784b65795f7375626b657973753332204b696c6c20736f6d65206974656d732066726f6d2073746f726167652e202d20604f28494b296020776865726520604960206c656e677468206f6620606b6579736020616e6420604b60206c656e677468206f66206f6e65206b6579202d206049602073746f726167652064656c6574696f6e732e202d2042617365205765696768743a202e333738202a206920c2b573202d205772697465733a204e756d626572206f66206974656d736b6579735665633c4b65793e2053657420736f6d65206974656d73206f662073746f726167652e202d20604f2849296020776865726520604960206c656e677468206f6620606974656d7360202d206049602073746f72616765207772697465732028604f28312960292e202d2042617365205765696768743a20302e353638202a206920c2b5736974656d735665633c4b657956616c75653e2053657420746865206e6577206368616e676573207472696520636f6e66696775726174696f6e2e202d20604f28312960202d20312073746f72616765207772697465206f722064656c6574652028636f64656320604f28312960292e202d20312063616c6c20746f20606465706f7369745f6c6f67603a20557365732060617070656e6460204150492c20736f204f283129202d2042617365205765696768743a20372e32313820c2b573202d204442205765696768743a20202020202d205772697465733a204368616e67657320547269652c2053797374656d204469676573746368616e6765735f747269655f636f6e6669674f7074696f6e3c4368616e67657354726965436f6e66696775726174696f6e3e2053657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e202d20604f2843296020776865726520604360206c656e677468206f662060636f646560202d20312073746f726167652077726974652028636f64656320604f28432960292e2054686520776569676874206f6620746869732066756e6374696f6e20697320646570656e64656e74206f6e207468652072756e74696d652e2057652077696c6c207472656174207468697320617320612066756c6c20626c6f636b2e2053657420746865206e65772072756e74696d6520636f64652e202d20604f2843202b2053296020776865726520604360206c656e677468206f662060636f64656020616e642060536020636f6d706c6578697479206f66206063616e5f7365745f636f646560202d20312063616c6c20746f206063616e5f7365745f636f6465603a20604f28532960202863616c6c73206073705f696f3a3a6d6973633a3a72756e74696d655f76657273696f6e6020776869636820697320657870656e73697665292e2054686520776569676874206f6620746869732066756e6374696f6e20697320646570656e64656e74206f6e207468652072756e74696d652c206275742067656e6572616c6c792074686973206973207665727920657870656e736976652e2057652077696c6c207472656174207468697320617320612066756c6c20626c6f636b2e636f64652053657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e202d20312073746f726167652077726974652e202d2042617365205765696768743a20312e34303520c2b573202d203120777269746520746f20484541505f50414745537061676573753634204d616b6520736f6d65206f6e2d636861696e2072656d61726b2e5f72656d61726b204120646973706174636820746861742077696c6c2066696c6c2074686520626c6f636b2077656967687420757020746f2074686520676976656e20726174696f2e5f726174696f50657262696c6c00000000dcf81200070000000102000000000000e3f812000c00000000000000eff8120025000000000000000000000000000000000000005431130014f91200000000000000000024f91200010000000000000001000000000000002cf912000e0000000000000000000000cbed12000300000000000000000000000000000000000000000000000000000000000000543113003cf9120000000000000000004cf912000100000000000000000000000000000054f912000b00000000000000000000005ff912000e000000000000000000000000000000000000000000000000000000000000005431130070f91200000000000000000080f912000100000000000000010000000000000088f91200100000000000000000000000cbed12000300000000000000000000000000000000000000000000000000000000000000543113003cf91200000000000000000098f9120001000000000000000000000000000000a0f91200090000000105000000000000a9f912000e00000000000000b7f91200070000000000000000000000000000000000000054311300c0f912000000000000000000d0f9120001000000000000000100000000000000d8f912000d0000000105000000000000cbed1200030000000000000042ec1200070000000000000000000000000000000000000054311300e8f912000000000000000000f8f912000100000000000000010000000000000000fa1200060000000000000000000000a9f912000e000000000000000000000000000000000000000000000000000000000000005431130008fa1200000000000000000018fa12000100000000000000010000000000000020fa12000a0000000000000000000000b7f91200070000000000000000000000000000000000000000000000000000000000000054311300c0f9120000000000000000002cfa12000100000000000000010000000000000034fa12000600000000000000000000003afa12000b000000000000000000000000000000000000000000000000000000000000005431130048fa1200000000000000000058fa12000100000000000000010000000000000060fa120006000000000000000000000066fa12002300000000000000000000000000000000000000000000000000000000000000543113008cfa120000000000000000009cfa120001000000000000000100000000000000a4fa12000a0000000000000000000000aefa12000a000000000000000000000000000000000000000000000000000000000000005431130008fa12000000000000000000b8fa120001000000000000000100000000000000c0fa12000b0000000102000000000000b7f912000700000000000000cbfa1200210000000000000000000000000000000000000054311300ecfa12000000000000000000fcfa12000a0000000000000001000000000000004cfb12001200000000000000000000005efb120016000000000000000000000000000000000000000000000000000000000000005431130074fb1200000000000000000084fb1200010000000000000000000000000000008cfb1200150000000000000000000000a1fb1200040000000000000000000000000000000000000000000000000000000000000054311300a8fb12000000000000000000b8fb120001000000000000000100000000000000c0fb1200180000000000000000000000a1fb1200040000000000000000000000000000000000000000000000000000000000000054311300a8fb12000000000000000000d8fb120002000000000000000100000000000000e8fb12000e0000000000000000000000f6fb1200050000000000000000000000000000000000000000000000000000000000000054311300fcfb120000000000000000000cfc12000100000000000000000000004163636f756e74543a3a4163636f756e7449644163636f756e74496e666f3c543a3a496e6465782c20543a3a4163636f756e74446174613e120000000000000001000000080100007e0113003a00000045787472696e736963436f756e74000012000000000000000100000023000000500113002e000000426c6f636b576569676874436f6e73756d6564576569676874000000120000000000000001000000090100002e01130022000000416c6c45787472696e736963734c656ede00130050000000426c6f636b48617368543a3a426c6f636b4e756d626572543a3a4861736800001200000000000000010000000a010000b80013002600000045787472696e7369634461746100000012000000000000000100000063000000690013004f0000004e756d6265720000120000000000000001000000220000002700130042000000506172656e744861736800000b0013001c0000004469676573744469676573744f663c543e0000001200000000000000010000003f000000cfff12003c0000004576656e74735665633c4576656e745265636f72643c543a3a4576656e742c20543a3a486173683e3e0000001200000000000000010000003f000000a7ff1200280000004576656e74436f756e744576656e74496e64657879ff12002e0000004576656e74546f706963735665633c28543a3a426c6f636b4e756d6265722c204576656e74496e646578293e1200000000000000010000006c00000047fd12004900000090fd1200250000005431130000000000b5fd12005400000009fe1200510000005afe120039000000543113000000000093fe120053000000e6fe12005300000039ff1200400000004c61737452756e74696d65557067726164654c61737452756e74696d6555706772616465496e666f12000000000000000100000023000000f2fc1200550000005570677261646564546f553332526566436f756e74626f6f6c000000120000000000000001000000230000009ffc1200530000005570677261646564546f547269706c65526566436f756e7436fc1200570000008dfc120012000000457865637574696f6e50686173655068617365001200000000000000010000002300000014fc1200220000002054686520657865637574696f6e207068617365206f662074686520626c6f636b2e2054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c7365202864656661756c7429206966206e6f742e2054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e2053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e6465786573206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e20416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e205468697320616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e6420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573742074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e20546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e20446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e2048617368206f66207468652070726576696f757320626c6f636b2e205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e2045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e20546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e205468652063757272656e742077656967687420666f722074686520626c6f636b2e20546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e00000000080313000c000000000000001403130014000000000000005431130028031300000000000000000038031300010000000000000000000000400313000b000000000000004b03130013000000000000005431130060031300000000000000000070031300010000000000000000000000780313000e00000000000000a9f912000e000000000000005431130088031300000000000000000098031300010000000000000000000000a00313000800000000000000a80313000f0000000000000054311300b80313000000000000000000c8031300010000000000000000000000d00313000700000000000000d70313000e0000000000000054311300e80313000000000000000000f8031300010000000000000000000000000413000a000000000000000a0413000200000000000000543113000c04130000000000000000001c0413000500000000000000426c6f636b576569676874736c696d6974733a3a426c6f636b576569676874731200000000000000010000000b0100000606130034000000426c6f636b4c656e6774686c696d6974733a3a426c6f636b4c656e67746800001200000000000000010000000c010000dc0513002a000000426c6f636b48617368436f756e7400001200000000000000010000000d0100008705130055000000446257656967687452756e74696d654462576569676874001200000000000000010000000e010000450513004200000056657273696f6e52756e74696d6556657273696f6e0000001200000000000000010000000f010000240513002100000053533538507265666978753812000000000000000100000023000000440413002a00000054311300000000006e0413004e000000bc0413004c000000080513001c000000205468652064657369676e61746564205353383520707265666978206f66207468697320636861696e2e2054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e2069732074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f6620697420617320616e206964656e746966696572206f662074686520636861696e2e204765742074686520636861696e27732063757272656e742076657273696f6e2e2054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e20546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e20426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e00004c0613005300000015020000100000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f70726f78792f7372632f6c69622e72733a5f5f50414c4c45545f56455253494f4e5f5f3a00c406130055000000be000000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f6772616e6470612f7372632f6c69622e72730000002c071300550000005a000000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f696e64696365732f7372632f6c69622e72730000009407130055000000ec010000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f73657373696f6e2f7372632f6c69622e7273000000fc0713005500000066040000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f7374616b696e672f7372632f6c69622e727300000000000000d80813000500000000000000e0081300010000000000000000000000f8081300120000000000000000000000880913000d0000000000000098091300020000000000000000000000c80913000d0000000000000000000000300a13000900000000000000e00813000100000000000000000000003c0a13000d000000000000006261746368000000000000004510130005000000000000004a10130018000000c40e1300200000005431130000000000290b13001f0000005431130000000000480b13003c0000005431130000000000840b130058000000dc0b1300330000005431130000000000f2eb12000b0000000f0c13004100000036ec12000c0000005431130000000000e40e1300560000003a0f13004d000000870f130056000000dd0f130054000000311013001400000061735f6465726976617469766500000000000000a00e13000500000000000000a50e13000300000000000000a80e13000400000000000000ac0e130018000000500c1300380000005431130000000000880c130056000000de0c13003000000054311300000000000e0d130052000000600d130059000000b90d1300550000000e0e13002000000054311300000000002e0e13003e00000054311300000000006c0e13003400000062617463685f616c6c000000a40a13003c000000e00a1300490000005431130000000000290b13001f0000005431130000000000480b13003c0000005431130000000000840b130058000000dc0b1300330000005431130000000000f2eb12000b0000000f0c13004100000036ec12000c0000002053656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e205468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e204d61792062652063616c6c65642066726f6d20616e79206f726967696e2e202d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e204966206f726967696e20697320726f6f74207468656e2063616c6c2061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e20285468697320696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e202d20436f6d706c65786974793a204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2053656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e2046696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e20776869636820757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e204e4f54453a20496620796f75206e65656420746f20656e73757265207468617420616e79206163636f756e742d62617365642066696c746572696e67206973206e6f7420686f6e6f7265642028692e652e206265636175736520796f7520657870656374206070726f78796020746f2068617665206265656e2075736564207072696f7220696e207468652063616c6c20737461636b20616e6420796f7520646f206e6f742077616e74207468652063616c6c207265737472696374696f6e7320746f206170706c7920746f20616e79207375622d6163636f756e7473292c207468656e20757365206061735f6d756c74695f7468726573686f6c645f316020696e20746865204d756c74697369672070616c6c657420696e73746561642e204e4f54453a205072696f7220746f2076657273696f6e202a31322c2074686973207761732063616c6c6564206061735f6c696d697465645f737562602e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e696e64657875313663616c6c426f783c3c5420617320436f6e6669673e3a3a43616c6c3e2053656e642061206261746368206f662064697370617463682063616c6c732e20546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e206576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e2074686520604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d61646520616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c6574656460206576656e74206973206465706f73697465642e63616c6c735665633c3c5420617320436f6e6669673e3a3a43616c6c3e696e7465726e616c206572726f723a20656e746572656420756e726561636861626c6520636f6465506172656e7420686173682073686f756c642062652076616c69642e0000b4111300570000003501000009000000b4111300570000005d0100000d0000005369676e617475726520766572696669636174696f6e206661696c65642e0000b4111300570000004e010000110000001f12130032000000b411130057000000b901000009000000446967657374206974656d206d757374206d6174636820746861742063616c63756c617465642e00b411130057000000c10100000d00000053746f7261676520726f6f74206d757374206d6174636820746861742063616c63756c617465642eb411130057000000c7010000090000005472616e73616374696f6e207472696520726f6f74206d7573742062652076616c69642eb411130057000000c9010000090000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f6578656375746976652f7372632f6c69622e72734469676573744974656d206e6f7420657175616c4e756d626572206f6620646967657374206974656d73206d757374206d6174636820746861742063616c63756c617465642e4e6f646520697320636f6e6669677572656420746f20757365207468652073616d6520686173683b20716564000000120000000000000001000000100100003ee1120054000000430500000e0000003ee11200540000004b05000016000000c012130056000000ea000000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f626f756e746965732f7372632f6c69622e727300002813130056000000c9010000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f6964656e746974792f7372632f6c69622e72730000901313005600000088000000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f6d756c74697369672f7372632f6c69622e72732f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f74726561737572792f7372632f6c69622e72734c14130057000000cf010000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f64656d6f63726163792f7372632f6c69622e727300b414130058000000a5000000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f617574686f72736869702f7372632f6c69622e72731c15130058000000f1000000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f636f6c6c6563746976652f7372632f6c69622e727300000000a81613000a00000000000000b4161300010000000000000000000000cc161300030000000000000000000000e41613000d00000000000000b4161300010000000000000000000000f41613000300000000000000000000000c1713000b000000000000001817130002000000000000000000000048171300050000000000000000000000701713000d000000000000008017130001000000000000000000000098171300040000000000000000000000b81713000a00000000000000c4171300010000000000000000000000dc171300050000000000000000000000041813000900000000000000b416130001000000000000000000000010181300030000000000000000000000281813000b00000000000000543113000000000000000000000000003418130003000000000000006164645f6d656d626572000000000000791b13000300000000000000e3f812000c000000321b13001f0000005431130000000000511b13002800000072656d6f76655f6d656d626572000000e31a1300240000005431130000000000071b13002b000000737761705f6d656d6265720000000000da1a13000600000000000000e3f812000c00000000000000e01a13000300000000000000e3f812000c0000003d1a13003000000054311300000000006d1a1300290000005431130000000000961a13004400000072657365745f6d656d6265727300000000000000251a130007000000000000002c1a1300110000008a19130056000000e01913001b0000005431130000000000fb1913002a0000006368616e67655f6b6579000000000000871913000300000000000000e3f812000c000000cc181300360000005431130000000000021913003d00000054311300000000003f191300480000007365745f7072696d650000009c181300300000005431130000000000721813002a000000636c6561725f7072696d65004c181300260000005431130000000000721813002a0000002052656d6f766520746865207072696d65206d656d626572206966206974206578697374732e204d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e2053657420746865207072696d65206d656d6265722e204d75737420626520612063757272656e74206d656d6265722e2053776170206f7574207468652073656e64696e67206d656d62657220666f7220736f6d65206f74686572206b657920606e6577602e204d6179206f6e6c792062652063616c6c65642066726f6d20605369676e656460206f726967696e206f6620612063757272656e74206d656d6265722e205072696d65206d656d62657273686970206973207061737365642066726f6d20746865206f726967696e206163636f756e7420746f20606e6577602c20696620657874616e742e6e6577204368616e676520746865206d656d6265727368697020746f2061206e6577207365742c20646973726567617264696e6720746865206578697374696e67206d656d626572736869702e204265206e69636520616e64207061737320606d656d6265727360207072652d736f727465642e204d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52657365744f726967696e602e6d656d626572735665633c543a3a4163636f756e7449643e2053776170206f7574206f6e65206d656d626572206072656d6f76656020666f7220616e6f746865722060616464602e204d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a537761704f726967696e602e205072696d65206d656d62657273686970206973202a6e6f742a207061737365642066726f6d206072656d6f76656020746f2060616464602c20696620657874616e742e72656d6f76656164642052656d6f76652061206d656d626572206077686f602066726f6d20746865207365742e204d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656d6f76654f726967696e602e204164642061206d656d626572206077686f6020746f20746865207365742e204d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a4164644f726967696e602e77686f00000000c7e112000700000000000000000000002c1a13001100000000000000000000000000000000000000000000000000000000000000543113002c1c130000000000000000003c1c130001000000000000000100000000000000dbe11200050000000000000000000000e3f812000c0000000000000000000000000000000000000000000000000000000000000054311300441c13000000000000000000541c13000100000000000000000000001200000000000000010000003f000000851c130032000000120000000000000001000000230000005c1c130029000000205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e0000000000c01d13000b0000000000000054311300000000000000000000000000cc1d1300010000000000000000000000d41d13000d0000000000000054311300000000000000000000000000e41d1300010000000000000000000000ec1d13000e0000000000000054311300000000000000000000000000fc1d1300010000000000000000000000041e13000c0000000000000054311300000000000000000000000000101e1300010000000000000000000000181e13000a0000000000000054311300000000000000000000000000241e13000100000000000000000000002c1e13000500000000000000341e13000100000000000000000000003c1e130001000000000000004d656d626572416464656400691f1300390000004d656d62657252656d6f7665640000002e1f13003b0000004d656d62657273537761707065640000f71e1300370000004d656d626572735265736574b11e1300460000004b65794368616e67656400008f1e13002200000044756d6d79000000601e13002f000000441e13001c000000205068616e746f6d206d656d6265722c206e6576657220757365642e73705f7374643a3a6d61726b65723a3a5068616e746f6d446174613c284163636f756e7449642c204576656e74293e204f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e20546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e2054776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e2054686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e2054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e0000120000000000000001000000210000002c201300620000006800000010000000e41f1300480000003a0400000f000000e41f1300480000003a040000220000002f72757374632f653337613133636333353934303034363633373338626431386438313030653664623936363663662f6c6962726172792f636f72652f7372632f63656c6c2e72732f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f6e706f732d656c656374696f6e732f7372632f6e6f64652e727300001200000000000000010000005f0000002c20130062000000700000000d0000002c20130062000000750000000d0000002c20130062000000890000003b000000e020130023000000a0000000010000002f6275696c642f72756e74696d652f636f6d6d6f6e2f7372632f636c61696d732e72730014211300600000002d010000010000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f656c656374696f6e732d70687261676d656e2f7372632f6c69622e727352616e646f6d6e657373436f6c6c656374697665466c697000000000e42113000e0000000000000000000000f22113000c00000000000000000000000000000000000000000000000000000000000000543113000022130000000000000000001022130003000000000000000100000052616e646f6d4d6174657269616c5665633c543a3a486173683e00001200000000000000010000006200000028221300580000008022130058000000d82213001100000020536572696573206f6620626c6f636b20686561646572732066726f6d20746865206c61737420383120626c6f636b73207468617420616374732061732072616e646f6d2073656564206d6174657269616c2e205468697320697320617272616e67656420617320612072696e672062756666657220776974682060626c6f636b5f6e756d626572202520383160206265696e672074686520696e64657820696e746f20746865206056656360206f6620746865206f6c6465737420686173682e0000003ee1120054000000180100000f0000000c23130055000000710000000f0000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f7574696c6974792f7372632f6c69622e72730000000000000000e112000f00000000000000f0231300020000000000000000000000e6e012001a00000000000000002413000200000000000000000000000fe112001d00000000000000102413000300000000000000000000002824130013000000000000003c241300010000000000000000000000442413000f00000000000000542413000100000000000000cf25130045000000ba251300150000006925130051000000ba25130015000000ea2413003c000000543113000000000026251300430000004e6f6e44656661756c74436f6d706f7369746500aa241300400000004e6f6e5a65726f526566436f756e74005c2413004e0000002054686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e20537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e204661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e204569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e205468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6520616e6420746865206e65772072756e74696d652e20546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d651c261300170000005f5f49676e6f72652063616e6e6f74206265207573656400442613006800000055000000110000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f6672616d652f72616e646f6d6e6573732d636f6c6c6563746976652d666c69702f7372632f6c69622e727348617368207461626c65206361706163697479206f766572666c6f77d8261300530000004f000000280000002f636172676f2d686f6d652f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f6861736862726f776e2d302e392e312f7372632f7261772f6d6f642e7273492068657265627920616772656520746f20746865207465726d73206f66207468652073746174656d656e742077686f7365205348412d323536206d756c74696861736820697320516d58456b4d61686668484a507a5433526a6b58695a56466937375a655665757874416a686f6a47524e59636b7a2e202854686973206d617920626520666f756e64206174207468652055524c3a2068747470733a2f2f73746174656d656e742e706f6c6b61646f742e6e6574776f726b2f736166742e68746d6c29492068657265627920616772656520746f20746865207465726d73206f66207468652073746174656d656e742077686f7365205348412d323536206d756c74696861736820697320516d63315859715436533339574e70325565695255725a6963685557555070474554684445366441623366364e792e202854686973206d617920626520666f756e64206174207468652055524c3a2068747470733a2f2f73746174656d656e742e706f6c6b61646f742e6e6574776f726b2f726567756c61722e68746d6c29436c61696d735369676e696e6700182f13004a0000001a04000022000000182f13004a0000007103000036000000182f13004a0000003604000015000000182f13004a000000440400001e000000182f13004a0000004d04000018000000182f13004a0000004e04000019000000182f13004a000000510400001a00000073756d206f6620696e7075742063616e6e6f742066697420696e206054606c656e677468206f6620696e7075742069732067726561746572207468616e207a65726f3b206974206d757374206861766520612066697273743b207165640000002c2a13005d000000e60000000e0000002c2a13005d000000c90000003000000050726f6f662070726f766964656420696e20746865206d6f64756c6520646f633b207165642e00002c2a13005d000000cb000000160000002c2a13005d000000d50000002c0000002c2a13005d000000d7000000120000002c2a13005d000000eb000000300000002c2a13005d000000fa000000210000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f61726974686d657469632f7372632f6c69622e72730000006f2b13004d000000da010000010000004661696c656420746f20636f6e7665727471202f206365696c28712f246d617829203c20246d61782e204d6163726f2070726576656e747320616e792074797065206265696e672063726561746564207468617420646f6573206e6f74207361746973667920746869733b207165642f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f61726974686d657469632f7372632f7065725f7468696e67732e72732f72757374632f653337613133636333353934303034363633373338626431386438313030653664623936363663662f6c6962726172792f636f72652f7372632f6f70732f61726974682e72730b2b1300640000005105000001000000dc2b1300610000006f000000090000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f61726974686d657469632f7372632f62696775696e742e727363616e6e6f74206669742061206e756d62657220696e746f20753132380000dc2b1300610000009e0000001b000000dc2b1300610000008000000009000000dc2b130061000000920000000900000000000000617474656d707420746f20646976696465206279207a65726f000000dc2b130061000000460000000d000000616c7265616479206d757461626c7920626f72726f77656412000000000000000100000021000000dc2b1300610000007a0100001a000000dc2b1300610000006801000028000000dc2b1300610000006901000028000000616c726561647920626f72726f7765641200000000000000010000005f000000dc2b130061000000710100001b000000dc2b130061000000720100001b000000dc2b130061000000d60100001c0000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f61726974686d657469632f7372632f66697865645f706f696e742e7273617474656d707420746f206469766964652077697468206f766572666c6f77642d1300650000004b0600000100000072656d696e646572206f6620646976206279206320697320616c77617973206c657373207468616e20633b2071656400120000000800000004000000f8000000612e1300680000006a00000012000000726573756c742063616e6e6f742066697420696e20753132382f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f61726974686d657469632f7372632f68656c706572735f3132386269742e727342616265565246496e4f7574436f6e7465787442414245736c6f74206e756d62657263757272656e742065706f6368636861696e2072616e646f6d6e657373182f13004a000000c4000000110000002f72757374632f653337613133636333353934303034363633373338626431386438313030653664623936363663662f6c6962726172792f616c6c6f632f7372632f736c6963652e72730000742f13004e000000cd000000200000002f636172676f2d686f6d652f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f61727261797665632d302e352e322f7372632f6c69622e7273000012000000000000000100000010010000e42f130066000000ce0000002a0000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f72756e74696d652d696e746572666163652f7372632f696d706c732e7273486f737420746f207761736d2076616c7565732061726520656e636f64656420636f72726563746c793b2071656412000000000000000100000010010000983013006800000009010000260000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f72756e74696d652d696e746572666163652f7372632f706173735f62792e7273373113000d0000002231130015000000543113000000000020311300020000003a20696e73756666696369656e7420636170616369747943617061636974794572726f72543113000000000072756e74696d650052756e74696d65206d656d6f7279206578686175737465642e2041626f7274696e675472616e73616374696f6e206469737061746368206973206d616e6461746f72793b207472616e73616374696f6e73206d6179206e6f742068617665206d616e6461746f727920646973706174636865732e412063616c6c20776173206c6162656c6c6564206173206d616e6461746f72792c2062757420726573756c74656420696e20616e204572726f722e5472616e73616374696f6e20776f756c6420657868617573742074686520626c6f636b206c696d6974735472616e73616374696f6e2068617320616e20616e6369656e7420626972746820626c6f636b5472616e73616374696f6e20686173206120626164207369676e61747572655472616e73616374696f6e206973206f757464617465645472616e73616374696f6e2077696c6c2062652076616c696420696e2074686520667574757265496e6162696c69747920746f2070617920736f6d6520666565732028652e672e206163636f756e742062616c616e636520746f6f206c6f77295472616e73616374696f6e2063616c6c206973206e6f74206578706563746564496e76616c69645472616e73616374696f6e20637573746f6d206572726f72436f756c64206e6f742066696e6420616e20756e7369676e65642076616c696461746f7220666f722074686520756e7369676e6564207472616e73616374696f6e436f756c64206e6f74206c6f6f6b757020696e666f726d6174696f6e20726571756972656420746f2076616c696461746520746865207472616e73616374696f6e556e6b6e6f776e5472616e73616374696f6e20637573746f6d206572726f7200000000000000617474656d707420746f20646976696465206279207a65726f000000fc33130062000000600000002b0000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f72756e74696d652f7372632f67656e657269632f6572612e727348617368206e6f7420657175616c2f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f72756e74696d652f7372632f7472616974732e72730000006c3413005d0000005904000013000000436f6e73756d65722072656d61696e696e67426164206f726967696e43616e6e6f74206c6f6f6b75704e6f2070726f76696465727344697370617463684572726f723c7761736d3a73747269707065643e4475706c69636174655265706f72744f6666656e63654572726f722f72757374632f653337613133636333353934303034363633373338626431386438313030653664623936363663662f6c6962726172792f636f72652f7372632f736c6963652f6d6f642e7273000000a83513005e000000470000001f0000002f636172676f2d686f6d652f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333635356639622f7072696d6974697665732f747269652f7372632f6e6f64655f636f6465632e72730000a83513005e00000050000000140000006c656e20213d20302073696e6365206c656e2025203220213d20303b20696e6e6572206861732061206c61737420656c656d656e743b207165640000643613005b0000003d000000120000002f636172676f2d686f6d652f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f747269652d64622d302e32322e332f7372632f6e6962626c652f6e6962626c657665632e727300643613005b0000006000000033000000643613005b000000600000000d000000643613005b000000690000000f000000643613005b0000006b0000000f000000643613005b0000006b0000003e000000643613005b0000009100000039000000643613005b0000009100000011000000643613005b0000009300000011000000643613005b0000009400000040000000643613005b000000940000004e000000803713005d0000009800000017000000803713005d00000096000000290000002f636172676f2d686f6d652f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f747269652d64622d302e32322e332f7372632f6e6962626c652f6e6962626c65736c6963652e7273000000f4391300550000004d0000001c000000803713005d0000004000000012000000803713005d0000004f0000002d000000803713005d0000005500000032000000803713005d000000dd0000000f000000803713005d000000df0000000f000000803713005d000000df0000003d0000006361706163697479206f766572666c6f77000000743813004e000000fb000000360000002f636172676f2d686f6d652f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f736d616c6c7665632d312e362e312f7372632f6c69622e7273617373657274696f6e206661696c65643a206e65775f636170203e3d206c656e0000743813004e000000320300000d000000617373657274696f6e206661696c65643a20696e646578203c3d206c656e0000743813004e0000005f05000009000000f4391300550000008d0000003c000000f4391300550000008d00000051000000f4391300550000008d00000031000000743913004f0000004b00000042000000743913004f0000004a0000003e0000002f636172676f2d686f6d652f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f747269652d64622d302e32322e332f7372632f6e6f64652e727300743913004f0000006b00000022000000743913004f0000009a00000032000000743913004f000000aa0000003e0000002f636172676f2d686f6d652f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f747269652d64622d302e32322e332f7372632f6e6962626c652f6d6f642e7273000000f4391300550000008600000031000000f4391300550000008600000042000000f4391300550000008600000026000000f439130055000000870000001d000000f439130055000000870000000d000000f4391300550000008e00000018000000f4391300550000008e0000000d00000063616c6c65642060526573756c743a3a756e77726170282960206f6e20616e2060457272602076616c75650041e8f5cc000b044f8167f700a98706046e616d6501a08706ee0800206578745f6f6666636861696e5f696e6465785f7365745f76657273696f6e5f3101196578745f6c6f6767696e675f6c6f675f76657273696f6e5f3102256578745f63727970746f5f656432353531395f67656e65726174655f76657273696f6e5f3103236578745f63727970746f5f656432353531395f7665726966795f76657273696f6e5f3104286578745f63727970746f5f66696e6973685f62617463685f7665726966795f76657273696f6e5f31052c6578745f63727970746f5f736563703235366b315f65636473615f7265636f7665725f76657273696f6e5f3106376578745f63727970746f5f736563703235366b315f65636473615f7265636f7665725f636f6d707265737365645f76657273696f6e5f3107256578745f63727970746f5f737232353531395f67656e65726174655f76657273696f6e5f3108286578745f63727970746f5f737232353531395f7075626c69635f6b6579735f76657273696f6e5f3109216578745f63727970746f5f737232353531395f7369676e5f76657273696f6e5f310a236578745f63727970746f5f737232353531395f7665726966795f76657273696f6e5f320b276578745f63727970746f5f73746172745f62617463685f7665726966795f76657273696f6e5f310c2a6578745f747269655f626c616b65325f3235365f6f7264657265645f726f6f745f76657273696f6e5f310d1c6578745f616c6c6f6361746f725f667265655f76657273696f6e5f310e1e6578745f616c6c6f6361746f725f6d616c6c6f635f76657273696f6e5f310f206578745f68617368696e675f626c616b65325f3132385f76657273696f6e5f3110206578745f68617368696e675f626c616b65325f3235365f76657273696f6e5f3111206578745f68617368696e675f6b656363616b5f3235365f76657273696f6e5f31121e6578745f68617368696e675f74776f785f3132385f76657273696f6e5f31131d6578745f68617368696e675f74776f785f36345f76657273696f6e5f31141c6578745f6d6973635f7072696e745f6865785f76657273696f6e5f31151c6578745f6d6973635f7072696e745f6e756d5f76657273696f6e5f31161d6578745f6d6973635f7072696e745f757466385f76657273696f6e5f3117226578745f6d6973635f72756e74696d655f76657273696f6e5f76657273696f6e5f3118236578745f6f6666636861696e5f69735f76616c696461746f725f76657273696f6e5f3119346578745f6f6666636861696e5f6c6f63616c5f73746f726167655f636f6d706172655f616e645f7365745f76657273696f6e5f311a286578745f6f6666636861696e5f6c6f63616c5f73746f726167655f6765745f76657273696f6e5f311b286578745f6f6666636861696e5f6c6f63616c5f73746f726167655f7365745f76657273696f6e5f311c246578745f6f6666636861696e5f6e6574776f726b5f73746174655f76657273696f6e5f311d226578745f6f6666636861696e5f72616e646f6d5f736565645f76657273696f6e5f311e296578745f6f6666636861696e5f7375626d69745f7472616e73616374696f6e5f76657273696f6e5f311f1c6578745f73746f726167655f617070656e645f76657273696f6e5f3120226578745f73746f726167655f6368616e6765735f726f6f745f76657273696f6e5f31211b6578745f73746f726167655f636c6561725f76657273696f6e5f3122226578745f73746f726167655f636c6561725f7072656669785f76657273696f6e5f3123286578745f73746f726167655f636f6d6d69745f7472616e73616374696f6e5f76657273696f6e5f31241c6578745f73746f726167655f6578697374735f76657273696f6e5f3125196578745f73746f726167655f6765745f76657273696f6e5f31261e6578745f73746f726167655f6e6578745f6b65795f76657273696f6e5f31271a6578745f73746f726167655f726561645f76657273696f6e5f31282a6578745f73746f726167655f726f6c6c6261636b5f7472616e73616374696f6e5f76657273696f6e5f31291a6578745f73746f726167655f726f6f745f76657273696f6e5f312a196578745f73746f726167655f7365745f76657273696f6e5f312b276578745f73746f726167655f73746172745f7472616e73616374696f6e5f76657273696f6e5f312c0c5f5f727573745f616c6c6f632d0a5f5f72675f616c6c6f632e0e5f5f727573745f6465616c6c6f632f0c5f5f72675f6465616c6c6f63300e5f5f727573745f7265616c6c6f63310c5f5f72675f7265616c6c6f6332135f5f727573745f616c6c6f635f7a65726f656433115f5f72675f616c6c6f635f7a65726f6564341a5f5f727573745f616c6c6f635f6572726f725f68616e646c657235085f5f72675f6f6f6d3633616c6c6f633a3a616c6c6f633a3a68616e646c655f616c6c6f635f6572726f723a3a68396233356666353366373862336237323708727573745f6f6f6d3834616c6c6f633a3a7261775f7665633a3a63617061636974795f6f766572666c6f773a3a68643334613339623261323062343861613929636f72653a3a70616e69636b696e673a3a70616e69633a3a68353931663938323162363132633033313a2e616c6c6f633a3a7261775f7665633a3a66696e6973685f67726f773a3a68393363643365663835616537633939663b25616c6c6f633a3a666d743a3a666f726d61743a3a68363637613739353430383938353533383c36636f72653a3a70616e69636b696e673a3a70616e69635f626f756e64735f636865636b3a3a68363764373564386363303561366261643d23636f72653a3a666d743a3a77726974653a3a68333133363666353338663366656331343e33636f72653a3a6f7074696f6e3a3a6578706563745f6e6f6e655f6661696c65643a3a68343335616366613232373730646637323f3a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a6833663662333835306339386135636265403b3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f636861723a3a6830336366666363666263313264333165413a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f666d743a3a68303036356465623766386363306231344243616c6c6f633a3a7665633a3a5665633c542c413e3a3a737761705f72656d6f76653a3a6173736572745f6661696c65643a3a6864303363393639353330646266643136434e636f72653a3a666d743a3a6e756d3a3a696d703a3a3c696d706c20636f72653a3a666d743a3a446973706c617920666f72207533323e3a3a666d743a3a6837626136613033376164623563643230442d636f72653a3a70616e69636b696e673a3a70616e69635f666d743a3a6830346365373030363561383039666238453e616c6c6f633a3a7665633a3a5665633c542c413e3a3a696e736572743a3a6173736572745f6661696c65643a3a6835623134346337343862643833363930463e616c6c6f633a3a7665633a3a5665633c542c413e3a3a72656d6f76653a3a6173736572745f6661696c65643a3a68666632366462653536343266386664624739636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6830393437373039326132383231633461482f636f72653a3a666d743a3a6e756d3a3a696d703a3a666d745f7536343a3a68353833323565656365316333313739374911727573745f626567696e5f756e77696e644a313c5420617320636f72653a3a616e793a3a416e793e3a3a747970655f69643a3a68353933346235316230646562653930614b35636f72653a3a666d743a3a466f726d61747465723a3a7061645f696e74656772616c3a3a68343636326361636365353764666465384c43636f72653a3a666d743a3a466f726d61747465723a3a7061645f696e74656772616c3a3a77726974655f7072656669783a3a68356536643061626130396633326235324d3f636f72653a3a736c6963653a3a696e6465783a3a736c6963655f656e645f696e6465785f6c656e5f6661696c3a3a68366334396438333039613035633366324e2c636f72653a3a666d743a3a466f726d61747465723a3a7061643a3a68336264306663356131363761396636344f2e636f72653a3a7374723a3a736c6963655f6572726f725f6661696c3a3a683036366638383363343461393435306350323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a6834616263393066366631306163663061514a3c636f72653a3a6f70733a3a72616e67653a3a52616e67653c4964783e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a686338363461636433656463666534326652323c6368617220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68626661316230393363356565656336385347636f72653a3a756e69636f64653a3a756e69636f64655f646174613a3a6772617068656d655f657874656e643a3a6c6f6f6b75703a3a68663135356233306366366635633062655439636f72653a3a756e69636f64653a3a7072696e7461626c653a3a69735f7072696e7461626c653a3a6839396635326564306263383232343831554c636f72653a3a666d743a3a6e756d3a3a3c696d706c20636f72653a3a666d743a3a446562756720666f72207573697a653e3a3a666d743a3a68373232653131323836353764373364302e33385641636f72653a3a736c6963653a3a696e6465783a3a736c6963655f73746172745f696e6465785f6c656e5f6661696c3a3a6838376139393138343461356136613264573d636f72653a3a736c6963653a3a696e6465783a3a736c6963655f696e6465785f6f726465725f6661696c3a3a68663065623763363063366164626633345838636f72653a3a70616e69636b696e673a3a6173736572745f6661696c65643a3a696e6e65723a3a683961613437343833393465613936323859303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68373630353135393538663833323238625a443c636f72653a3a666d743a3a417267756d656e747320617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a68616461363265643536366238623237615b453c636f72653a3a63656c6c3a3a426f72726f774572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68333961633465323730636264613361655c483c636f72653a3a63656c6c3a3a426f72726f774d75744572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68396364363938613032303366376637655d2e636f72653a3a6f7074696f6e3a3a6578706563745f6661696c65643a3a68313238646263363361373762363462335e323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a68653164623931393231326131373863655f323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a683334393932343863336163653936613960533c636f72653a3a666d743a3a6275696c646572733a3a5061644164617074657220617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a6833636330623732656235383131376131612f636f72653a3a666d743a3a57726974653a3a77726974655f636861723a3a6861663264376134626331363838373132622e636f72653a3a666d743a3a57726974653a3a77726974655f666d743a3a6832336431393265383735306239363134633a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a6863396239323564376434343463386336643b3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f636861723a3a6834336661353362343232643664383637653a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f666d743a3a68326132353136316331386631363162376639636f72653a3a666d743a3a6275696c646572733a3a44656275675475706c653a3a6669656c643a3a68663934343663353338336538346530666731636f72653a3a666d743a3a6e756d3a3a70617273655f7536345f696e746f3a3a683836356665636331363439653662386668313c73747220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68636166353765616336643835636166376947636f72653a3a666d743a3a6e756d3a3a3c696d706c20636f72653a3a666d743a3a42696e61727920666f722069383e3a3a666d743a3a68393534666231363062643530303465346a3e3c636f72653a3a666d743a3a4572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68303461626364316137336361656135626b5a637572766532353531395f64616c656b3a3a6261636b656e643a3a73657269616c3a3a7536343a3a6669656c643a3a4669656c64456c656d656e7435313a3a746f5f62797465733a3a68376437393064393161666331616134356c9201637572766532353531395f64616c656b3a3a6669656c643a3a3c696d706c20737562746c653a3a436f6e7374616e7454696d65457120666f7220637572766532353531395f64616c656b3a3a6261636b656e643a3a73657269616c3a3a7536343a3a6669656c643a3a4669656c64456c656d656e7435313e3a3a63745f65713a3a68396364656461363836373161653962666d24737562746c653a3a626c61636b5f626f783a3a68643538663262386531326262666438636e57637572766532353531395f64616c656b3a3a6261636b656e643a3a73657269616c3a3a7536343a3a6669656c643a3a4669656c64456c656d656e7435313a3a706f77326b3a3a68663236333730613433323836636163336f7e637572766532353531395f64616c656b3a3a6669656c643a3a3c696d706c20637572766532353531395f64616c656b3a3a6261636b656e643a3a73657269616c3a3a7536343a3a6669656c643a3a4669656c64456c656d656e7435313e3a3a737172745f726174696f5f693a3a6835363363396339363265323062373362705c637572766532353531395f64616c656b3a3a6261636b656e643a3a73657269616c3a3a7536343a3a6669656c643a3a4669656c64456c656d656e7435313a3a66726f6d5f62797465733a3a6832616238363561393631373334363633715a637572766532353531395f64616c656b3a3a72697374726574746f3a3a52697374726574746f506f696e743a3a656c6c696761746f725f72697374726574746f5f666c61766f723a3a68646461343666623535616233393161667249637572766532353531395f64616c656b3a3a7363616c61723a3a5363616c61723a3a66726f6d5f63616e6f6e6963616c5f62797465733a3a6839653365336238643333303431333564737b6672616d655f6d657461646174613a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f72206672616d655f6d657461646174613a3a53746f726167654861736865723e3a3a656e636f64655f746f3a3a683162656163376433656139313636306274423c73705f7374643a3a57726974657220617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a683363633661343561353130333135336375417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a6831636432373064666631313861613763766c3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a683563616634656137383534663333653777417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a683538303330336534653561396266326478417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a683637333262303539623133663935393579417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a68366466653838653631316263313030307a417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a68373364323466643532356561656535617b417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a68396561313134623133303139396634327c633c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a737065635f66726f6d5f697465723a3a5370656346726f6d497465723c542c493e3e3a3a66726f6d5f697465723a3a68373565373763666662363932356332627d2e616c6c6f633a3a7261775f7665633a3a66696e6973685f67726f773a3a68323639383637313236343665326136667e543c6672616d655f73797374656d3a3a6c696d6974733a3a56616c69646174696f6e4572726f727320617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68303564386661663138656538646536617f4c6672616d655f73797374656d3a3a6c696d6974733a3a426c6f636b576569676874734275696c6465723a3a6275696c645f6f725f70616e69633a3a68326463313939646664376530366331378001206b656363616b3a3a66313630303a3a68643136653639383530623363363336348101366d65726c696e3a3a7472616e7363726970743a3a5472616e7363726970743a3a6e65773a3a68663937363338316633643532623636308201366d65726c696e3a3a7374726f62653a3a5374726f62653132383a3a626567696e5f6f703a3a6834393265303662376564646166353330830131636f72653a3a70616e69636b696e673a3a6173736572745f6661696c65643a3a68353165396237626139333239313435378401416d65726c696e3a3a7472616e7363726970743a3a5472616e7363726970743a3a617070656e645f6d6573736167653a3a683832386436623530666233383133386185013d6d65726c696e3a3a7472616e7363726970743a3a5472616e7363726970743a3a617070656e645f7536343a3a68633365386666383661313861373738328601426d65726c696e3a3a7472616e7363726970743a3a5472616e7363726970743a3a6368616c6c656e67655f62797465733a3a68313833653739663961616235383637398701303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68316334646132633061303238396231668801643c70616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a466561736962696c6974794572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68356639353562323537383963303132628901303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68656632323534336265633130646631348a01573c70616c6c65745f6964656e746974793a3a44617461206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a68393563343662346135636139623633318b01633c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a737065635f66726f6d5f697465723a3a5370656346726f6d497465723c542c493e3e3a3a66726f6d5f697465723a3a68306264653266643331303639363735368c014470616c6c65745f7374616b696e673a3a736c617368696e673a3a536c617368696e675370616e733a3a656e645f7370616e3a3a68343665356663366630336239626165618d014170616c6c65745f7374616b696e673a3a736c617368696e673a3a536c617368696e675370616e733a3a7072756e653a3a68396461336662633239336538376636628e013a70616c6c65745f74696d657374616d703a3a657874726163745f696e686572656e745f646174613a3a68303534383936373432303432306536618f01503c7061726974795f7363616c655f636f6465633a3a6572726f723a3a4572726f7220617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a683464303838633264376634643433323490014e3c7061726974795f7363616c655f636f6465633a3a6572726f723a3a4572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a686263323663363266356563326365633891013f7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573685f627974653a3a68646535356531343739363262616232369201417061726974795f7363616c655f636f6465633a3a636f6465633a3a6465636f64655f7665635f776974685f6c656e3a3a683137326236353437366635353032356593017873705f636f72653a3a63727970746f3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f636f72653a3a63727970746f3a3a4163636f756e74496433323e3a3a6465636f64653a3a68343434323965343630393164333930619401417061726974795f7363616c655f636f6465633a3a636f6465633a3a6465636f64655f7665635f776974685f6c656e3a3a6838663036663234333538316330343764950173706f6c6b61646f745f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f7220706f6c6b61646f745f72756e74696d653a3a43616c6c3e3a3a6465636f64653a3a6866333132353766373030613764323632960143636f72653a3a7074723a3a64726f705f696e5f706c6163653c706f6c6b61646f745f72756e74696d653a3a43616c6c3e3a3a68323931336639633538376534623864329701417061726974795f7363616c655f636f6465633a3a636f6465633a3a6465636f64655f7665635f776974685f6c656e3a3a6865666161663031646263306131393837980173706f6c6b61646f745f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f7220706f6c6b61646f745f72756e74696d653a3a43616c6c3e3a3a6465636f64653a3a68623461303361656462343538393566379901417061726974795f7363616c655f636f6465633a3a636f6465633a3a6465636f64655f7665635f776974685f6c656e3a3a68666263373066313237623664313738319a01417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a68326431613761636333306632303331659b01417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a68333465323539333162346531636436639c01417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a68336561663130383731353339303430349d01417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a68346165376234343061616363373966649e01417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a68373663633033393565653930663335389f01417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a6838626231363161623938393934393263a001417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a6839343435623732353264366531656437a1017f7061726974795f7363616c655f636f6465633a3a636f6465633a3a696e6e65725f7475706c655f696d706c3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f72202851302c5230293e3a3a656e636f64655f746f3a3a6866613131656361613263343663353034a201437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6836633266613633383763613136303466a3014673705f696f3a3a68617368696e673a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a74776f785f36343a3a6862666666623834363238363136323839a401483c5b543b20335d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6838313536336661333561653762326136a501483c5b543b20385d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6831396132646534623066383332363739a601493c5b543b2033325d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6863623661636139343162313336393138a701493c5b543b2036345d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6838303933396439656231303661383563a801493c5b543b2036355d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6863383263363163623836653938303562a90183013c616c6c6f633a3a7665633a3a5665633c542c413e20617320616c6c6f633a3a7665633a3a737065635f657874656e643a3a53706563457874656e643c542c616c6c6f633a3a7665633a3a696e746f5f697465723a3a496e746f497465723c543e3e3e3a3a737065635f657874656e643a3a6834333433623739616665303932333864aa017c7061726974795f7363616c655f636f6465633a3a636f6465633a3a696e6e65725f7475706c655f696d706c3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f72202851302c5230293e3a3a6465636f64653a3a6835376539633762336138623139633366ab016b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7533323e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6830333032626636346534653237353864ac017c7061726974795f7363616c655f636f6465633a3a636f6465633a3a696e6e65725f7475706c655f696d706c3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f72202851302c5230293e3a3a6465636f64653a3a6835623230663231363165303530636137ad016b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7533323e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6866303535343637373665303230366363ae01437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6862663364636463663734333139353536af01723c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163745265663c753132383e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6833333331313533346166363863323539b0014973705f696f3a3a68617368696e673a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a626c616b65325f3235363a3a6832313066356631633064313636643162b1014a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a6839383566636366333564323132633461b2014273705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a7365743a3a6864326433663631373330386337633833b301433c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6831386466333633666639376330326663b401433c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6836623163333939616130323131633837b501433c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6862316237633535636335393331633438b601463c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6831356366376132373661656236306439b701463c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6831393433366263323536323035633439b801463c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6839386532353430376132336634383739b901463c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6864366238393961663663623862623565ba012f616c6c6f633a3a7665633a3a5665633c542c413e3a3a696e736572743a3a6862313463363838616531366339623262bb012f616c6c6f633a3a7665633a3a5665633c542c413e3a3a72657461696e3a3a6864303139346364376564376632653738bc0130616c6c6f633a3a7665633a3a5665633c542c413e3a3a726573657276653a3a6862633437373533393538393931366631bd01753c636f72653a3a697465723a3a61646170746572733a3a66696c7465725f6d61703a3a46696c7465724d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6834303462643035383132356562386236be013d70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e3a3a69735f6f6e6c696e655f6175783a3a6864343637623435636430623230393830bf01ef023c70616c6c65745f7374616b696e673a3a4578706f737572654f663c543e2061732073705f72756e74696d653a3a7472616974733a3a436f6e766572743c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449642c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c70616c6c65745f7374616b696e673a3a4578706f737572653c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449642c3c3c542061732070616c6c65745f7374616b696e673a3a436f6e6669673e3a3a43757272656e6379206173206672616d655f737570706f72743a3a7472616974733a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e3e3a3a42616c616e63653e3e3e3e3a3a636f6e766572743a3a6865303165636431646561633832386130c0018901616c6c6f633a3a7665633a3a736f757263655f697465725f6d61726b65723a3a3c696d706c20616c6c6f633a3a7665633a3a737065635f66726f6d5f697465723a3a5370656346726f6d497465723c542c493e20666f7220616c6c6f633a3a7665633a3a5665633c543e3e3a3a66726f6d5f697465723a3a6834363866663161336634646662653265c10137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6864613239663237353833366134393731c2018901616c6c6f633a3a7665633a3a736f757263655f697465725f6d61726b65723a3a3c696d706c20616c6c6f633a3a7665633a3a737065635f66726f6d5f697465723a3a5370656346726f6d497465723c542c493e20666f7220616c6c6f633a3a7665633a3a5665633c543e3e3a3a66726f6d5f697465723a3a6865613730666433376438633331646166c301463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6831346533613663623564663536666133c401463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6834613933633464303834333065643936c501463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6836303537393062333330306164356637c601463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6836356137396265346564383636373961c701463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6837313931373435626662633434323366c801463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6837643465373234323262363634313861c901463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6837643839626330393337326466386362ca01593c706f6c6b61646f745f72756e74696d653a3a4e706f73436f6d70616374536f6c7574696f6e313620617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6837333664376631306164343464663161cb016e6672616d655f73797374656d3a3a70616c6c65743a3a5f3a3a3c696d706c20636f72653a3a636c6f6e653a3a436c6f6e6520666f72206672616d655f73797374656d3a3a70616c6c65743a3a43616c6c3c543e3e3a3a636c6f6e653a3a6831323638366561316134663633343835cc014b3c70616c6c65745f7363686564756c65723a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6864623866366639643663633431383265cd016c70616c6c65745f626162653a3a70616c6c65743a3a5f3a3a3c696d706c20636f72653a3a636c6f6e653a3a436c6f6e6520666f722070616c6c65745f626162653a3a70616c6c65743a3a43616c6c3c543e3e3a3a636c6f6e653a3a6837383361613533666636313562646361ce017670616c6c65745f62616c616e6365733a3a70616c6c65743a3a5f3a3a3c696d706c20636f72653a3a636c6f6e653a3a436c6f6e6520666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a43616c6c3c542c493e3e3a3a636c6f6e653a3a6832363164653063313634666635363162cf014c3c70616c6c65745f617574686f72736869703a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6865653466643830656361663864633265d001493c70616c6c65745f7374616b696e673a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6838666433303361643661323836343566d1014a3c70616c6c65745f6f6666656e6365733a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6831663061313664386462333362636338d201493c70616c6c65745f6772616e6470613a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6833376165643665316663643739303161d3014b3c70616c6c65745f696d5f6f6e6c696e653a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6835343831313631613336386534353337d401553c70616c6c65745f617574686f726974795f646973636f766572793a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6837313034663531313462333966646661d5014b3c70616c6c65745f64656d6f63726163793a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6839666530363334663366393230333034d6014e3c70616c6c65745f636f6c6c6563746976653a3a43616c6c3c542c493e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6830653536616134646335643235646137d701543c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6838313437393230313536316437303734d8015a3c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a636c61696d733a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6830336430613931656339373162303366d9017270616c6c65745f76657374696e673a3a70616c6c65743a3a5f3a3a3c696d706c20636f72653a3a636c6f6e653a3a436c6f6e6520666f722070616c6c65745f76657374696e673a3a70616c6c65743a3a43616c6c3c543e3e3a3a636c6f6e653a3a6865633234666532306563376234343334da014d3c706f6c6b61646f745f72756e74696d653a3a43616c6c20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a68346635346532643136633036353534392e37393131db014a3c70616c6c65745f6964656e746974793a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6830643932653066343137613861643839dc016e70616c6c65745f70726f78793a3a70616c6c65743a3a5f3a3a3c696d706c20636f72653a3a636c6f6e653a3a436c6f6e6520666f722070616c6c65745f70726f78793a3a70616c6c65743a3a43616c6c3c543e3e3a3a636c6f6e653a3a6834613966316330373064656234363832dd014a3c70616c6c65745f6d756c74697369673a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6839313735663538626235363334363836de014a3c70616c6c65745f626f756e746965733a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6831656462306664313263653864316266df01463c70616c6c65745f746970733a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6862613164376164343261313264326466e001463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6865613535616363646537613037386539e101483c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6838303265616436643865666533353761e2015c636f72653a3a7074723a3a64726f705f696e5f706c6163653c747269655f64623a3a7472696564626d75743a3a4e6f64653c7072696d69746976655f74797065733a3a483235363e3e3a3a6865363831383635643166643564323865e301543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6834383261343630393333326134326266e401543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6835356239373466663865663336636665e501543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6836383964306330643238303636323565e601a30173705f72756e74696d653a3a6d756c7469616464726573733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f72756e74696d653a3a6d756c7469616464726573733a3a4d756c7469416464726573733c4163636f756e7449642c4163636f756e74496e6465783e3e3a3a6465636f64653a3a6837373966626133363039643039633130e701543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6837643539393962306662626634663963e801543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6839396138643766363633353339373038e901543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6862303830613235616131623864373537ea01543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6863316366336538323838306431313134eb01a30173705f72756e74696d653a3a6d756c7469616464726573733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f72756e74696d653a3a6d756c7469616464726573733a3a4d756c7469416464726573733c4163636f756e7449642c4163636f756e74496e6465783e3e3a3a6465636f64653a3a6862316637393732636333366234616539ec01543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6863633864643930663538363632356235ed019c013c73705f72756e74696d653a3a67656e657269633a3a756e636865636b65645f65787472696e7369633a3a556e636865636b656445787472696e7369633c416464726573732c43616c6c2c5369676e61747572652c45787472613e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6839346666333763376364373037646262ee01623c616c6c6f633a3a7665633a3a5665633c542c413e20617320616c6c6f633a3a7665633a3a737065635f657874656e643a3a53706563457874656e643c542c493e3e3a3a737065635f657874656e643a3a6833333437303064656532633961353763ef016f3c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6830623534306634353365383133623065f00152616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a656e7472793a3a566163616e74456e7472793c4b2c563e3a3a696e736572743a3a6835363337656364623930343331326231f101613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6832363133633830663161376437393065f201723c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6837646237386237343839393362373631f301407363686e6f72726b656c3a3a7672663a3a5652464f75747075743a3a6174746163685f696e7075745f686173683a3a6833623437323866663336313532616233f401457363686e6f72726b656c3a3a706f696e74733a3a52697374726574746f426f74683a3a66726f6d5f636f6d707265737365643a3a6836623232303364313364656139386139f501a60173705f72756e74696d653a3a6d756c7469616464726573733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722073705f72756e74696d653a3a6d756c7469616464726573733a3a4d756c7469416464726573733c4163636f756e7449642c4163636f756e74496e6465783e3e3a3a656e636f64655f746f3a3a6830323861626262393936346364313439f6017273705f73657373696f6e3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f73657373696f6e3a3a4d656d6265727368697050726f6f663e3a3a6465636f64653a3a6836653432643666363338623138656535f7017273705f73657373696f6e3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f73657373696f6e3a3a4d656d6265727368697050726f6f663e3a3a6465636f64653a3a6839343863376230663337363533613733f801776672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6d75746174653a3a6837323536646466373939663761393636f9015c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6862323066383061383637646331343662fa01386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6834333936376332633132393964646638fb01b80170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a52657365727661626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a756e726573657276653a3a6834316330613832386262346332313663fc01573c49642061732073705f72756e74696d653a3a7472616974733a3a4163636f756e744964436f6e76657273696f6e3c543e3e3a3a696e746f5f7375625f6163636f756e743a3a6839386431656634393434363831303630fd01b50170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a6465706f7369745f6372656174696e673a3a6835666133383763306132623164326139fe015e6672616d655f73797374656d3a3a3c696d706c206672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3e3a3a6465706f7369745f6576656e745f696e64657865643a3a6835626334326665303936353434373961ff014473705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a636c6561723a3a68346134363733353037653435373239368002950170616c6c65745f626f756e746965733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f626f756e746965733a3a426f756e74793c4163636f756e7449642c42616c616e63652c426c6f636b4e756d6265723e3e3a3a656e636f64655f746f3a3a683836323732623763633739373164653381024773705f696f3a3a68617368696e673a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a74776f785f3132383a3a686233633163373235303031363932636482026c3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c753132383e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a686332666438616232643963643236623883023d70616c6c65745f626f756e746965733a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a686137653033376266306337336539323684023f70616c6c65745f626f756e746965733a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a68373736383462363133633365306339308502703c70616c6c65745f626f756e746965733a3a5f5f47657442797465537472756374426f756e7479436f756e743c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a686161633861616139356362633466643186024870616c6c65745f626f756e746965733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a68313166383733393161316536393835328702a1013c70616c6c65745f626f756e746965733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a426f756e747943757261746f724465706f73697444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a686261323764323161396437643264353588029f013c70616c6c65745f626f756e746965733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a426f756e7479557064617465506572696f6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68646131336231653366663965626337318902a5013c70616c6c65745f626f756e746965733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a426f756e74794465706f7369745061796f757444656c617944656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68616263393661646633646638376363618a029f013c73705f72756e74696d653a3a67656e657269633a3a756e636865636b65645f65787472696e7369633a3a556e636865636b656445787472696e7369633c416464726573732c43616c6c2c5369676e61747572652c45787472613e2061732073705f72756e74696d653a3a7472616974733a3a436865636b61626c653c4c6f6f6b75703e3e3a3a636865636b3a3a68346639326161646435363062373164648b0248636f72653a3a7074723a3a64726f705f696e5f706c6163653c706f6c6b61646f745f72756e74696d653a3a43616c6c3e3a3a68323931336639633538376534623864322e313432358c025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68333939373138323566613065396463388d02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68653562653633373365646164633831398e02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68303134383831383335653235316462648f024573705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6578697374733a3a6839376131343563396531323964633665900276706f6c6b61646f745f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f7220706f6c6b61646f745f72756e74696d653a3a43616c6c3e3a3a656e636f64655f746f3a3a686361393330626465623166386435306291026f3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163745265663c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a68633461656239623633353630633063329202553c73705f72756e74696d653a3a4d756c74695369676e61747572652061732073705f72756e74696d653a3a7472616974733a3a5665726966793e3a3a7665726966793a3a686237316635333161643164613262656193028c0173705f636f6e73656e7375735f626162653a3a646967657374733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f636f6e73656e7375735f626162653a3a646967657374733a3a5072654469676573743e3a3a6465636f64653a3a68616635386165363233633966653764319402683c73705f636f6e73656e7375735f7672663a3a7363686e6f72726b656c3a3a56524650726f6f66206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68656636326139663434306438653364369502970173705f636f6e73656e7375735f626162653a3a646967657374733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f636f6e73656e7375735f626162653a3a646967657374733a3a4e657874436f6e66696744657363726970746f723e3a3a6465636f64653a3a686162663463613866346436393435616296029a0173705f636f6e73656e7375735f626162653a3a646967657374733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722073705f636f6e73656e7375735f626162653a3a646967657374733a3a4e657874436f6e66696744657363726970746f723e3a3a656e636f64655f746f3a3a683939383236366265356137643030313297023c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a683164343665666133393136303264326198028f0173705f636f6e73656e7375735f736c6f74733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f636f6e73656e7375735f736c6f74733a3a45717569766f636174696f6e50726f6f663c4865616465722c49643e3e3a3a6465636f64653a3a68333135346336303035323866333031329902723c73705f72756e74696d653a3a67656e657269633a3a6865616465723a3a4865616465723c4e756d6265722c486173683e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68623231666632396164616331653838649a028f0173705f636f6e73656e7375735f736c6f74733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f636f6e73656e7375735f736c6f74733a3a45717569766f636174696f6e50726f6f663c4865616465722c49643e3e3a3a6465636f64653a3a68623566303733383937623663383465349b02723c73705f72756e74696d653a3a67656e657269633a3a6865616465723a3a4865616465723c4e756d6265722c486173683e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68613332623433393933313031653361629c023a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a68313966616163363634303864623934669d023b3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f636861723a3a68363763306632616666393765366234629e023a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f666d743a3a68666363356433616135306235396631329f024e616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a636f6e7461696e735f6b65793a3a6838376533363161653833333837656238a00245616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a6765743a3a6833646530326462666133613238363739a10245616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a6765743a3a6861333765623834336637643765326537a20245616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a6765743a3a6864383238373766343238663833313338a30247616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a656e7472793a3a6831383231633937386265376630353764a40248616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a696e736572743a3a6863653637343566353364303332326632a50243616c6c6f633a3a636f6c6c656374696f6e733a3a7665635f64657175653a3a56656344657175653c543e3a3a67726f773a3a6834366165333765353832353364353264a602633c54206173207061726974795f7363616c655f636f6465633a3a64657074685f6c696d69743a3a4465636f64654c696d69743e3a3a6465636f64655f616c6c5f776974685f64657074685f6c696d69743a3a6831626665303966343531373238393166a7024d3c747269655f64623a3a7472696564623a3a5472696544423c4c3e20617320747269655f64623a3a547269653c4c3e3e3a3a6765745f776974683a3a6864356339653839303865303166386234a80239747269655f64623a3a6e6f64655f636f6465633a3a4e6f6465436f6465633a3a6465636f64653a3a6862383639363639626634646539366230a902503c61727261797665633a3a6572726f72733a3a43617061636974794572726f723c543e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6837393632333430663930373534656332aa0225747269655f64623a3a547269653a3a6765743a3a6866356631613264326561623833396537ab02553c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320636f72653a3a64656661756c743a3a44656661756c743e3a3a64656661756c743a3a6865366635633032326130396239613338ac02583c616c6c6f633a3a7665633a3a696e746f5f697465723a3a496e746f497465723c542c413e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6862333533653566623136316432346166ad02603c70616c6c65745f626f756e746965733a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6863643063343637366665323465363736ae024f3c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a4861736844423c482c543e3e3a3a6765743a3a6862333438336234343239643938366136af02366861736862726f776e3a3a6d61703a3a486173684d61703c4b2c562c533e3a3a6765743a3a6836383163343836306161303736623932b002523c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a4861736844423c482c543e3e3a3a696e736572743a3a6862353066336439303265626363366361b102533c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a4861736844423c482c543e3e3a3a656d706c6163653a3a6836396266313934303966653233633661b202386861736862726f776e3a3a6d61703a3a486173684d61703c4b2c562c533e3a3a656e7472793a3a6861633566643236653362313731346564b3023d6861736862726f776e3a3a6d61703a3a566163616e74456e7472793c4b2c562c533e3a3a696e736572743a3a6832663430376337386336316663386234b4023e6861736862726f776e3a3a7261773a3a5261775461626c653c543e3a3a726573657276655f7265686173683a3a6836393838383263396365666231343762b502523c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a4861736844423c482c543e3e3a3a72656d6f76653a3a6834343961373437343133653934373134b602543c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a4861736844423c482c543e3e3a3a636f6e7461696e733a3a6836613232666166626466643133653064b702583c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a41734861736844423c482c543e3e3a3a61735f686173685f64623a3a6831303435346136373839353264626566b802a901636f72653a3a7074723a3a64726f705f696e5f706c6163653c6d656d6f72795f64623a3a4d656d6f727944423c73705f72756e74696d653a3a7472616974733a3a426c616b6554776f3235362c6d656d6f72795f64623a3a486173684b65793c73705f72756e74696d653a3a7472616974733a3a426c616b6554776f3235363e2c616c6c6f633a3a7665633a3a5665633c75383e3e3e3a3a6830313666303233366232343132373036b9025c3c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a41734861736844423c482c543e3e3a3a61735f686173685f64625f6d75743a3a6862353561343564316233626532616638ba02523c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a4861736844425265663c482c543e3e3a3a6765743a3a6833666134393265626263313234643331bb02573c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a4861736844425265663c482c543e3e3a3a636f6e7461696e733a3a6832353132323963613832383432363161bc02613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6835356538336166333663326664663035bd02613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6836366136613134663532333430396563be02613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6836656237306566616438356130326136bf02613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a496e746f497465723c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6830653166636430626666306463643362c002763c70616c6c65745f626f756e746965733a3a43616c6c3c543e206173206672616d655f737570706f72743a3a7472616974733a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6837333134666566333966323865373037c1022e6672616d655f73797374656d3a3a656e737572655f7369676e65643a3a6839343964386432313865623034363961c2027d70616c6c65745f626f756e746965733a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f626f756e746965733a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6830316431626334633937303137663333c302b60170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a52657365727661626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a726573657276653a3a6864633331623132306161326533656433c4025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6865636133326566366233613338363261c502386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6866656538323763633632613763386363c602456672616d655f737570706f72743a3a7472616974733a3a456e737572654f726967696e3a3a656e737572655f6f726967696e3a3a6832613563363731373162363064633563c7024573705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a617070656e643a3a6836363166386537346163613530663636c8025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6835333133343234393238633635316166c902386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6861636633653336613230613037376439ca02ad0170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a7472616e736665723a3a6865396164326362343735366132323265cb02bd0170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a52657365727661626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a736c6173685f72657365727665643a3a6834326431633664613265613535356166cc026d6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a76616c75653a3a53746f7261676556616c75653c5072656669782c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a6d75746174653a3a6865303635646432626431333966613665cd024873705f72756e74696d653a3a7472616974733a3a4163636f756e744964436f6e76657273696f6e3a3a696e746f5f6163636f756e743a3a6864613330323036363463316562626164ce026d6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a76616c75653a3a53746f7261676556616c75653c5072656669782c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a6d75746174653a3a6866373065393061653031306163623163cf027b3c70616c6c65745f70726f78793a3a70616c6c65743a3a43616c6c3c543e206173206672616d655f737570706f72743a3a7472616974733a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6863323436633639653065323733663230d0025370616c6c65745f70726f78793a3a3c696d706c2070616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e3e3a3a66696e645f70726f78793a3a6836643264353862306537313934316562d102870170616c6c65745f70726f78793a3a70616c6c65743a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f70726f78793a3a70616c6c65743a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6833613734306530326565636236353064d2025170616c6c65745f70726f78793a3a3c696d706c2070616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e3e3a3a646f5f70726f78793a3a6861626666386330363533623131643365d3025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6864663863313664333937366561663565d402386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6830313536623363663230626436303530d50239636f72653a3a736c6963653a3a3c696d706c205b545d3e3a3a62696e6172795f7365617263683a3a6864656233663764633761666130346633d602386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6836363332326262393633366466346238d702437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6838343739323633656631306665336536d802483c5b545d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6862656566353337386265376665623366d9025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6838633632623463383365333765343632da02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6862616538653038373033623734343136db02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6862633935623837613635623363323666dc0248636f72653a3a7074723a3a64726f705f696e5f706c6163653c706f6c6b61646f745f72756e74696d653a3a43616c6c3e3a3a68323931336639633538376534623864322e33373630dd02743c706f6c6b61646f745f72756e74696d653a3a43616c6c206173206672616d655f737570706f72743a3a7472616974733a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6866376339643565333066316637366539de02703c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a636c61696d733a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6838383431316236383566343135386235df027a3c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a636c61696d733a3a4d6f64756c653c543e2061732073705f72756e74696d653a3a7472616974733a3a56616c6964617465556e7369676e65643e3a3a76616c69646174655f756e7369676e65643a3a6866313835343566303438646230356434e0027f73705f636f72653a3a63727970746f3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722073705f636f72653a3a63727970746f3a3a4163636f756e74496433323e3a3a7573696e675f656e636f6465643a3a6834646261363539653937333039303266e1024a706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a636c61696d733a3a4d6f64756c653c543e3a3a6574685f7265636f7665723a3a6837393037393133346164616130393932e2025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6864363861396235313731643365393731e3025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6834353966663333393336303734636463e402386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6866633037643535393132366639303334e5024973705f696f3a3a68617368696e673a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6b656363616b5f3235363a3a6864616135626130643861616139646232e6025573705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a736563703235366b315f65636473615f7265636f7665723a3a6864636565653466323033633166623335e7025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6861373938656635346334393466316334e8024870616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a646f5f72656d6f76655f766f7465723a3a6837613534613936326538626338313738e902386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836663265636539333735653538626434ea02b80170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a4c6f636b61626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a72656d6f76655f6c6f636b3a3a6866353463643063333039303236396433eb024570616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a69735f63616e6469646174653a3a6861376664643039656332306164643332ec02766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a6839393961666664333765366238666335ed024273705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6765743a3a6831363732623435356437613030613832ee02303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6861386633346532343837656333623162ef024673705f696f3a3a6d6973633a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a7072696e745f757466383a3a6832303234666164356461343966643938f0025270616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a72656d6f76655f616e645f7265706c6163655f6d656d6265723a3a6839336539653134363262316565623731f102386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6832626263616635393132643937623365f202386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6835346161376630656365626266353932f302910170616c6c65745f656c656374696f6e735f70687261676d656e3a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6831646263383135343261336565623361f402386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6831633739396334366139386635363639f502a2013c70616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a4368616e67654d656d626572733c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e3e3a3a6368616e67655f6d656d626572735f736f727465643a3a6863333430376532623132663963313036f60296013c70616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a4368616e67654d656d626572733c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e3e3a3a7365745f7072696d653a3a6833653861373335306333393533366464f7024470616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a646f5f70687261676d656e3a3a6839333534373134303735366363633234f802386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6839646134353138643739373663656438f90239636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6833316464633234363330386135626331fa026e3c6672616d655f737570706f72743a3a73746f726167653a3a5072656669784974657261746f723c543e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6839306636323863363234323766353731fb023c73705f6e706f735f656c656374696f6e733a3a70687261676d656e3a3a7365715f70687261676d656e3a3a6866653763663162343763383161613737fc022b616c6c6f633a3a736c6963653a3a6d657267655f736f72743a3a6832373766356437373265383862363166fd022c616c6c6f633a3a736c6963653a3a696e736572745f686561643a3a6839353035626533656131336430376139fe02546672616d655f737570706f72743a3a7472616974733a3a4368616e67654d656d626572733a3a636f6d707574655f6d656d626572735f646966665f736f727465643a3a6864373639333235343237623535383661ff02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a683931343463366132343662386133306180037c3c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a636c61696d733a3a50726576616c6964617465417474657374733c543e2061732073705f72756e74696d653a3a7472616974733a3a5369676e6564457874656e73696f6e3e3a3a76616c69646174653a3a686631623730353566656361646332643581035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68396262336162323333376464316366348203386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68653266656339393830336566663932308303753c285475706c65456c656d656e74302c5475706c65456c656d656e743129206173206672616d655f737570706f72743a3a7472616974733a3a4f6e496e697469616c697a653c426c6f636b4e756d6265723e3e3a3a6f6e5f696e697469616c697a653a3a683863366563343733643565666262323384035470616c6c65745f626162653a3a3c696d706c2070616c6c65745f626162653a3a70616c6c65743a3a50616c6c65743c543e3e3a3a646f5f696e697469616c697a653a3a68393031313835393863386331343736398503386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68346464386337303732326363373361378603386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68666665373861346335363539303865308703766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a68616333363936303163616465336262358803386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a683839343062383635373837343838396389034b73705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a636c6561725f7072656669783a3a68636634393736343337343039336533378a035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68383231643532353261656439636466398b03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68616130323337666437356664323533338c03706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a68633363396264323135316637346238378d03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68386335616564636663316638646336348e035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68646364383632626661303034663633378f03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68653165303339313735323330313334629003386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68643931303533376433363038393336379103386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6837663964633738333231383962666231920382023c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e2061732073705f7374616b696e673a3a6f6666656e63653a3a4f6e4f6666656e636548616e646c65723c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449642c283c542061732070616c6c65745f73657373696f6e3a3a436f6e6669673e3a3a56616c696461746f7249642c3c542061732070616c6c65745f73657373696f6e3a3a686973746f726963616c3a3a436f6e6669673e3a3a46756c6c4964656e74696669636174696f6e292c7536343e3e3a3a6f6e5f6f6666656e63653a3a683837653765363039393930313364383293034973705f696f3a3a6f6666636861696e5f696e6465783a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a7365743a3a68636561653863643562313830613534319403766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a686331383037313533356633646338326495035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a683933386336343338383963373230663696035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a683063626564653761313532393438336497035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a683630616630313838373337396132343198036d6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a76616c75653a3a53746f7261676556616c75653c5072656669782c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a6d75746174653a3a686633613361393035353865333365313999037a706f6c6b61646f745f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f7220706f6c6b61646f745f72756e74696d653a3a53657373696f6e4b6579733e3a3a6465636f64653a3a68656534346165336165636465343638329a03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68373333306132393265643230383130399b03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68393166363235366561623235373236659c033770616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a73746172745f6572613a3a68303064666132633662303936613639669d03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68363662663036373735633136383533379e03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68343835373832323630633236306662359f033570616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6e65775f6572613a3a6831343033303131653062646464626462a003766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a6830616364373330383063346464383766a103706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6835306437333539646535353961646534a203386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836353132613637363566313839353639a3034b70616c6c65745f73657373696f6e3a3a686973746f726963616c3a3a50726f76696e67547269653c543e3a3a67656e65726174655f666f723a3a6866613062373062353833656639636238a4035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6839373836663833313834623966356537a503386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836666563336566656234323238366436a6035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6865383832613836623933623138313534a703386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6862343966623735346136353530383765a803a1013c285475706c65456c656d656e74302c5475706c65456c656d656e74312c5475706c65456c656d656e74322c5475706c65456c656d656e74332c5475706c65456c656d656e74342c5475706c65456c656d656e7435292061732070616c6c65745f73657373696f6e3a3a53657373696f6e48616e646c65723c4149643e3e3a3a6f6e5f6e65775f73657373696f6e3a3a6864376661636132313263636566333234a903603c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a426c6f636b57656967687473206173206672616d655f737570706f72743a3a7472616974733a3a4765743c493e3e3a3a6765743a3a6835396263393435653263373465313736aa03753c285475706c65456c656d656e74302c5475706c65456c656d656e743129206173206672616d655f737570706f72743a3a7472616974733a3a4f6e496e697469616c697a653c426c6f636b4e756d6265723e3e3a3a6f6e5f696e697469616c697a653a3a6831666133666564653833383234353232ab035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6836373932393537613630613139303139ac034c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a636c61696d733a3a4d6f64756c653c543e3a3a70726f636573735f636c61696d3a3a6830643834343264333366626634343639ad035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6839303163353866646466353433383031ae03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6830373636366630623133336137666566af03746672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6765743a3a6837633366623861306633373432376130b0039d01706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a636c61696d733a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a636c61696d733a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6834613130373535623232396531663134b1035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6863383930363461363366316465363234b203746672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a6d61703a3a53746f726167654d61703c5072656669782c4861736865722c4b65792c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a696e736572743a3a6839373061383763393135386465323031b3035870616c6c65745f76657374696e673a3a3c696d706c2070616c6c65745f76657374696e673a3a70616c6c65743a3a50616c6c65743c543e3e3a3a7570646174655f6c6f636b3a3a6865356538333531313866306234633261b4034270616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a6836353133613337623862353530303463b5034470616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a6830303933313366303666306264326362b6034d70616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6834626432386134346437613463333534b7039c013c70616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d617850656e64696e6744656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6839636666316631353330663537373634b8039c013c70616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d617850726f7869657344656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6861363264626165653234336537663065b903a4013c70616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a50726f78794465706f736974466163746f7244656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835633736363432366363383639653833ba03a2013c70616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a50726f78794465706f7369744261736544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6832313336633039653537383934656233bb03483c706f6c6b61646f745f72756e74696d653a3a43616c6c20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6834663534653264313663303635353439bc037e70616c6c65745f70726f78793a3a70616c6c65743a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f70726f78793a3a70616c6c65743a3a43616c6c3c543e3e3a3a6465636f64653a3a6861323533316463633835653737373333bd037e70616c6c65745f70726f78793a3a70616c6c65743a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f70726f78793a3a70616c6c65743a3a43616c6c3c543e3e3a3a6465636f64653a3a6862346162346162366366336432316364be038a016672616d655f737570706f72743a3a776569676874733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f72206672616d655f737570706f72743a3a776569676874733a3a4469737061746368496e666f3e3a3a656e636f64655f746f3a3a6835653130633433366633656665336235bf033c70616c6c65745f73657373696f6e3a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6863616437373135646331623130633936c0033e70616c6c65745f73657373696f6e3a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6861396461363365363765616363333036c1036e3c70616c6c65745f73657373696f6e3a3a5f5f476574427974655374727563745175657565644b6579733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6831363538333962626465366135333039c2035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6834386637303037336261396437616439c30396013c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a436f6e7461696e733c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e3e3a3a636f6e7461696e733a3a6863366532336563353362646431336332c4034d706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a636c61696d733a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6839323431346233346432306361633731c5034f706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a636c61696d733a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6832636366396435396336623439366530c60358706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a636c61696d733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6865313136353432626239663234363332c703a3013c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a636c61696d733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a50726566697844656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6833633365626638613162646562656530c8034770616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6865386561343536333461363033333634c9034970616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6866346233323761663365326135363232ca03753c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a5f5f47657442797465537472756374566f74696e673c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6865366462353566333565313933326431cb03763c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a5f5f476574427974655374727563744d656d626572733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6832383763343539326366393239646566cc035270616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6836353761323739313431373934363265cd039f013c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d6f64756c65496444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863626365613235613233663838363839ce03a5013c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a446573697265644d656d6265727344656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864663737643336383337613332306562cf03a5013c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a566f74696e67426f6e644261736544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6836323262653630653339343430323731d0036a636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653c413e20666f7220266d757420463e3a3a63616c6c5f6f6e63653a3a6861636135363437333366376435383836d1035d3c706f6c6b61646f745f72756e74696d653a3a53657373696f6e4b6579732061732073705f72756e74696d653a3a7472616974733a3a4f70617175654b6579733e3a3a6765745f7261773a3a6837663863666435666561356439303937d2036a636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653c413e20666f7220266d757420463e3a3a63616c6c5f6f6e63653a3a6866363962626435656663366537383631d3035f3c70616c6c65745f73657373696f6e3a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6833626666356136303962326266313764d403653c70616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6833356639626233643038346339393834d5036a3c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6866636132313639646637383334303638d6035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6862653066643335623339626330643838d7035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6837343438343531353165646336646335d8034973705f696f3a3a68617368696e673a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a626c616b65325f3132383a3a6836373938353364663563393861396532d9033c70616c6c65745f696e64696365733a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6833306639303937393364613637366535da033e70616c6c65745f696e64696365733a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6838643939323762633730323536663137db034770616c6c65745f696e64696365733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6861323133336262373065356537353038dc0393013c70616c6c65745f696e64696365733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4465706f73697444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863353763626532623966633061363964dd033d70616c6c65745f6964656e746974793a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6831336536643533656436303837613538de033f70616c6c65745f6964656e746974793a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6833663462383563643138323533363666df036f3c70616c6c65745f6964656e746974793a3a5f5f47657442797465537472756374526567697374726172733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863393234396361643063626564613932e0036b3c70616c6c65745f6964656e746974793a3a5f5f47657442797465537472756374537562734f663c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864356538356631626131363838333132e1036c3c70616c6c65745f6964656e746974793a3a5f5f4765744279746553747275637453757065724f663c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6836633661613966626134376434626562e2036f3c70616c6c65745f6964656e746974793a3a5f5f476574427974655374727563744964656e746974794f663c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835356638333534346532663037656164e3034a636f72653a3a7074723a3a64726f705f696e5f706c6163653c70616c6c65745f6964656e746974793a3a4964656e74697479496e666f3e3a3a6835363532633932383730616537363761e4034870616c6c65745f6964656e746974793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6832306633653532663330306463343135e5039a013c70616c6c65745f6964656e746974793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d61785265676973747261727344656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6834313435633435646337336563646338e6039e013c70616c6c65745f6964656e746974793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a5375624163636f756e744465706f73697444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6861623366383532396636653366336464e70399013c70616c6c65745f6964656e746974793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4669656c644465706f73697444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864636637366133386663636364353630e80399013c70616c6c65745f6964656e746974793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a42617369634465706f73697444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6830663531393062393861653838643666e903850170616c6c65745f6964656e746974793a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f6964656e746974793a3a526567697374726174696f6e3c42616c616e63653e3e3a3a656e636f64655f746f3a3a6865333837336532643536343666613861ea03820170616c6c65745f6964656e746974793a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f6964656e746974793a3a4a756467656d656e743c42616c616e63653e3e3a3a656e636f64655f746f3a3a6836313661346630333738383731633432eb03573c70616c6c65745f6964656e746974793a3a44617461206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6839346437366261643037623237653735ec03573c70616c6c65745f6964656e746974793a3a44617461206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6862333836386437353330343962656362ed03573c70616c6c65745f6964656e746974793a3a44617461206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6832303736366165333465373666616163ee033d70616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6864306566633638646636366233643930ef033f70616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6839663835323535366665376264323335f0034870616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6835636338613863653034386235653135f1039b013c70616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d61785369676e61746f7269657344656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6832303365363332613866646430396362f2039a013c70616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4465706f736974466163746f7244656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864396231386162303333656133313730f30398013c70616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4465706f7369744261736544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6838643436663732383137323037366138f4033f70616c6c65745f74726561737572793a3a4d6f64756c653c542c493e3a3a63616c6c5f66756e6374696f6e733a3a6838326165393938666630636331353861f5034170616c6c65745f74726561737572793a3a4d6f64756c653c542c493e3a3a73746f726167655f6d657461646174613a3a6835666538313231366365396362663362f603703c70616c6c65745f74726561737572793a3a5f5f47657442797465537472756374417070726f76616c733c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862383932643864333533313934663438f7034a70616c6c65745f74726561737572793a3a4d6f64756c653c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6839643936633239303039666331396661f80399013c70616c6c65745f74726561737572793a3a4d6f64756c653c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d6f64756c65496444656661756c74427974654765747465723c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863306238616364646261363865323239f90395013c70616c6c65745f74726561737572793a3a4d6f64756c653c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4275726e44656661756c74427974654765747465723c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6865633262653666653539663761653333fa039c013c70616c6c65745f74726561737572793a3a4d6f64756c653c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a5370656e64506572696f6444656661756c74427974654765747465723c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6861646630373639353636333831653061fb039d013c70616c6c65745f74726561737572793a3a4d6f64756c653c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a50726f706f73616c426f6e6444656661756c74427974654765747465723c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6839643539366538343762393066393362fc03603c70616c6c65745f6964656e746974793a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6831643331336231336334666138643065fd03603c70616c6c65745f6d756c74697369673a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6861333432313564643131373737303232fe03623c70616c6c65745f74726561737572793a3a4d6f64756c653c542c493e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6837633863353133336365643263626230ff035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68336439633230316464653065333135318004763c70616c6c65745f6964656e746974793a3a43616c6c3c543e206173206672616d655f737570706f72743a3a7472616974733a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a68343834306132656462303138313331308104766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a68626564663437333565326366373265348204386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a683962396637383936356238653836303383047d70616c6c65745f6964656e746974793a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f6964656e746974793a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a683130643133663937396631343638623484045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68653063663231626531393462383464328504386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68646537643636636364656530373735308604386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a686463363165393636616564323834313587045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68653131643263386135343964343839348804386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68313334306262333666323966326562378904c20170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a52657365727661626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a726570617472696174655f72657365727665643a3a68616462666635313762333464663866618a04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68366364363233303036396533373834658b04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68373231663730343165363035663865618c0448636f72653a3a7074723a3a64726f705f696e5f706c6163653c706f6c6b61646f745f72756e74696d653a3a43616c6c3e3a3a68323931336639633538376534623864322e313936368d044770616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a656e737572655f736f727465645f616e645f696e736572743a3a68343335333836303531366237323937348e047d70616c6c65745f6d756c74697369673a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f6d756c74697369673a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a68323237653366396337616534383335348f043670616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a6f7065726174653a3a68616463633732353463656637653537349004437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a68376361303836333334393736623535399104706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a68343061396537663831636236326632619204386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a683633623765646561343538636333333093044570616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a73746f72655f63616c6c5f616e645f726573657276653a3a68323430386535656565666339343063669404386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a686566643932633663623038613836366595045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68323032383837323661363461666436389604386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68333131656566626538653064373865399704693c706f6c6b61646f745f72756e74696d653a3a43616c6c206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a683462393330303139653165316662623898043970616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a636c6561725f63616c6c3a3a686538346231626332646434613538343499045d70616c6c65745f626162653a3a3c696d706c2070616c6c65745f626162653a3a70616c6c65743a3a50616c6c65743c543e3e3a3a646f5f7265706f72745f65717569766f636174696f6e3a3a68613132646131633262386639373930639a043473705f72756e74696d653a3a7472616974733a3a486173683a3a686173685f6f663a3a68616230333232646265626164393335359b044b73705f636f6e73656e7375735f626162653a3a636865636b5f65717569766f636174696f6e5f70726f6f663a3a7b7b636c6f737572657d7d3a3a68616362316438626136393136623965309c045d3c73705f72756e74696d653a3a44697370617463684572726f7257697468506f7374496e666f3c543e20617320636f72653a3a636f6e766572743a3a46726f6d3c453e3e3a3a66726f6d3a3a68306431663965353836643261306238649d0495013c70616c6c65745f73657373696f6e3a3a686973746f726963616c3a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a4b65794f776e657250726f6f6653797374656d3c2873705f636f72653a3a63727970746f3a3a4b65795479706549642c44293e3e3a3a636865636b5f70726f6f663a3a68323730653566616534363162306534629e043d73705f61726974686d657469633a3a7065725f7468696e67733a3a50657262696c6c3a3a7371756172653a3a68613435383139626232663061646631369f04763c70616c6c65745f617574686f726974795f646973636f766572793a3a43616c6c3c543e206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a6865626466643235336163643433393530a004386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6861393962303137326439373231663330a104386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6864653331393230386662366432346235a204386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6865343363353732613638383430363436a304386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6832656465363336313862363431626363a4043c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6834336434353863643363326339653332a5046d6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a76616c75653a3a53746f7261676556616c75653c5072656669782c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a617070656e643a3a6830386461383561386636303133313438a604386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6864346436613861386633396238643038a7045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6839346462326262323766323730333833a8044d3c706f6c6b61646f745f72756e74696d653a3a43616c6c20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a68346635346532643136633036353534392e31393734a9045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6836636535656131383561353736636634aa04776672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a617070656e643a3a6835636131613035303530356235343434ab04a70170616c6c65745f7363686564756c65723a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f7363686564756c65723a3a5363686564756c656456323c43616c6c2c426c6f636b4e756d6265722c50616c6c6574734f726967696e2c4163636f756e7449643e3e3a3a656e636f64655f746f3a3a6832326166356638373438666136333132ac044170616c6c65745f626162653a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a6836333839303937316532626565666261ad044370616c6c65745f626162653a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a6864623934656133363064393565313530ae044c70616c6c65745f626162653a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6833323335323762663566633439643335af04a2013c70616c6c65745f626162653a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4578706563746564426c6f636b54696d6544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835376365393532636533626636323130b0049e013c70616c6c65745f626162653a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a45706f63684475726174696f6e44656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6834336337333932323031383333613036b1048f0170616c6c65745f64656d6f63726163793a3a766f74653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f64656d6f63726163793a3a766f74653a3a4163636f756e74566f74653c42616c616e63653e3e3a3a6465636f64653a3a6862323037393738343931626230316262b204920170616c6c65745f64656d6f63726163793a3a766f74653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f64656d6f63726163793a3a766f74653a3a4163636f756e74566f74653c42616c616e63653e3e3a3a656e636f64655f746f3a3a6836623835616336316263393232313361b3043e70616c6c65745f7363686564756c65723a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6834613261623933666330363330633631b4044070616c6c65745f7363686564756c65723a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6836636632666533343364346461373734b504743c70616c6c65745f7363686564756c65723a3a5f5f4765744279746553747275637453746f7261676556657273696f6e3c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864323633666330323330333033626436b6043f7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64655f746f3a3a6833616463366263363537346437313436b7043173705f6e706f735f656c656374696f6e733a3a746f5f737570706f7274733a3a6861666439373331643136633831316439b80437616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6837653863323639363931353362363861b9043273705f6e706f735f656c656374696f6e733a3a73657475705f696e707574733a3a6837656238313935316432393166323736ba0468636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4d75743c413e20666f7220266d757420463e3a3a63616c6c5f6d75743a3a6864363661356139383836363239653032bb044d73705f6e706f735f656c656374696f6e733a3a566f7465723c4163636f756e7449643e3a3a7472795f6e6f726d616c697a655f656c65637465643a3a6862653563363137363963393538356463bc045a3c616c6c6f633a3a7665633a3a5665633c753132383e2061732073705f61726974686d657469633a3a4e6f726d616c697a61626c653c753132383e3e3a3a6e6f726d616c697a653a3a6839303136313262656538323130313339bd044a73705f6e706f735f656c656374696f6e733a3a41737369676e6d656e743c4163636f756e7449642c503e3a3a696e746f5f7374616b65643a3a6833633237383735663837336439383439be044c73705f6e706f735f656c656374696f6e733a3a41737369676e6d656e743c4163636f756e7449642c503e3a3a7472795f6e6f726d616c697a653a3a6864306632373462636138386433636534bf045073705f6e706f735f656c656374696f6e733a3a5374616b656441737369676e6d656e743c4163636f756e7449643e3a3a7472795f6e6f726d616c697a653a3a6838393566656563623433653033623266c0043873705f6e706f735f656c656374696f6e733a3a62616c616e63696e673a3a62616c616e63653a3a6865653666636530363964346438663566c1042c616c6c6f633a3a736c6963653a3a696e736572745f686561643a3a6833386661393063363663633439663732c2043c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6839623564343334343237623536333236c3043f70616c6c65745f7363686564756c65723a3a4d6f64756c653c543e3a3a646f5f63616e63656c5f6e616d65643a3a6830646634316432383231353463363938c4045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6836306633616134616634663532316234c504386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6834363936613138316330633037626238c6044f3c706f6c6b61646f745f72756e74696d653a3a4f726967696e43616c6c657220617320636f72653a3a636d703a3a5061727469616c45713e3a3a6e653a3a6861353539633235333930353666633537c704386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6836646634616365623336623264343462c8047f70616c6c65745f7363686564756c65723a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f7363686564756c65723a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6832653238613266313864373332313135c9044170616c6c65745f7363686564756c65723a3a4d6f64756c653c543e3a3a646f5f7363686564756c655f6e616d65643a3a6837386236343764333735336132633966ca044373705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a726561643a3a6831613263386662613833353065656134cb04433c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6832303430316436366632336562393734cc04433c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6864323062653836376362326563383664cd04a201636f72653a3a7074723a3a64726f705f696e5f706c6163653c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c616c6c6f633a3a72633a3a52633c636f72653a3a63656c6c3a3a52656643656c6c3c73705f6e706f735f656c656374696f6e733a3a6e6f64653a3a4e6f64653c73705f636f72653a3a63727970746f3a3a4163636f756e74496433323e3e3e3e3e3a3a6837363339396666656266653065656630ce043d73705f636f72653a3a746f5f7375627374726174655f7761736d5f666e5f72657475726e5f76616c75653a3a6862323164393930633331366331653238cf043d73705f636f72653a3a746f5f7375627374726174655f7761736d5f666e5f72657475726e5f76616c75653a3a6864613162393666633238333736316235d0047873705f636f72653a3a63727970746f3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f636f72653a3a63727970746f3a3a4163636f756e74496433323e3a3a6465636f64653a3a6839653731326130306137363933643834d1042e616c6c6f633a3a7261775f7665633a3a66696e6973685f67726f773a3a6838636564306562626163616539663337d204553c70616c6c65745f62616c616e6365733a3a44757374436c65616e65723c542c493e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6831393635353932326232643331663061d304613c70616c6c65745f7363686564756c65723a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6830643665333666343930383536653763d404643c70616c6c65745f626162653a3a70616c6c65743a3a50616c6c65743c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6864323534363337313136316339346264d504773c70616c6c65745f7363686564756c65723a3a43616c6c3c543e206173206672616d655f737570706f72743a3a7472616974733a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6838333861376663303063633431663265d6043b70616c6c65745f7363686564756c65723a3a4d6f64756c653c543e3a3a646f5f7363686564756c653a3a6866323966343436646662376466373666d7046b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7533323e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6830643630363462633439636166353032d8046b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7533323e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6861356438653733353039373863343265d9046b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7536343e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6834383032623466376565646238316231da046b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7536343e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6865346463656637306165656164633965db046c3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c753132383e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6866333633353564336365303233666139dc04713c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163745265663c7536343e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6837383339636535356637343265343164dd0431636f72653a3a70616e69636b696e673a3a6173736572745f6661696c65643a3a6866323565313332343861393263626530de0431636f72653a3a70616e69636b696e673a3a6173736572745f6661696c65643a3a6834643763613939306565626363626661df043d706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a426c6f636b576569676874733a3a6765743a3a6839336264306338383566663261346531e004960173705f7374616b696e673a3a6f6666656e63653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f7374616b696e673a3a6f6666656e63653a3a4f6666656e636544657461696c733c5265706f727465722c4f6666656e6465723e3e3a3a6465636f64653a3a6835643836663139373036633835393739e104766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a6837633634353565626638336465343134e2043770616c6c65745f617574686f72736869703a3a4d6f64756c653c543e3a3a617574686f723a3a6838386434346435343262333762663130e3043b70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a7265776172645f62795f6964733a3a6833613233366363376165393766373839e4043f70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e3a3a6e6f74655f617574686f72736869703a3a6862656335633264633061643630396338e504386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6865373630323731363931666466336637e604386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6836613936376334333532623439653034e7044970616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a636f6d707574655f6665655f7261773a3a6833313031393864326262626331316266e804466672616d655f737570706f72743a3a776569676874733a3a576569676874546f466565506f6c796e6f6d69616c3a3a63616c633a3a6865373736303062323863386331366232e904386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6839336333623635346562636164666565ea044673705f61726974686d657469633a3a68656c706572735f3132386269743a3a6d756c7469706c795f62795f726174696f6e616c3a3a6836323434636635306439633764393262eb046a6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a76616c75653a3a53746f7261676556616c75653c5072656669782c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a7075743a3a6832313162326636663932336336663534ec046a6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a76616c75653a3a53746f7261676556616c75653c5072656669782c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a7075743a3a6832333463393638646133323561613739ed046a6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a76616c75653a3a53746f7261676556616c75653c5072656669782c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a7075743a3a6838303130323133373864313238393238ee046a6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a76616c75653a3a53746f7261676556616c75653c5072656669782c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a7075743a3a6862376561653564663330316439393734ef046f3c73705f72756e74696d653a3a67656e657269633a3a6469676573743a3a4469676573744974656d3c486173683e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6832626337626565653336326334336162f0046a6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a76616c75653a3a53746f7261676556616c75653c5072656669782c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a7075743a3a6863303061626262333264383135303233f1046d6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a76616c75653a3a53746f7261676556616c75653c5072656669782c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a6d75746174653a3a6863666364363534303031613462356464f204386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6830326436653762386232393466663866f304386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6865303732613930666335646532396335f404766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a6834386465396533616565656337346163f504766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a6865313039633563643564363934653166f6043f70616c6c65745f6f6666656e6365733a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6832326533616338643335626530323932f704773c70616c6c65745f6f6666656e6365733a3a5f5f476574427974655374727563745265706f72747342794b696e64496e6465783c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6866343532663030373334383733316630f804753c70616c6c65745f6f6666656e6365733a3a5f5f4765744279746553747275637444656665727265644f6666656e6365733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6861356461326230653532363737636462f9046c3c70616c6c65745f6f6666656e6365733a3a5f5f476574427974655374727563745265706f7274733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6838313236373063623331663966383931fa044c73705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a737232353531395f7665726966793a3a6830613965313635396366646564303966fb046b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7531363e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6832653266643130383536646633363061fc046b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7531363e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6839343765653431363262323061613237fd047f7061726974795f7363616c655f636f6465633a3a636f6465633a3a696e6e65725f7475706c655f696d706c3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f72202851302c5230293e3a3a656e636f64655f746f3a3a6865373061616163386239666130363838fe044a70616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6830393632663566333561323836306233ff0481013c70616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a5f5f476574427974655374727563744e6578744665654d756c7469706c6965723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683331323734323632373466396464306180055370616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a68303761656332643535353339393662658105a3013c70616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a576569676874546f46656544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a686466393631616138663536343965313782056d3c73705f61726974686d657469633a3a7065725f7468696e67733a3a50657262696c6c2061732073705f61726974686d657469633a3a7065725f7468696e67733a3a5065725468696e673e3a3a66726f6d5f726174696f6e616c3a3a68383663353535316139383136366332658305aa013c70616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a5472616e73616374696f6e4279746546656544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a686637306535626133336433333937313384056b3c70616c6c65745f6f6666656e6365733a3a43616c6c3c543e206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a68383863306366663831316637316639658505860170616c6c65745f7374616b696e673a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f7374616b696e673a3a4578706f737572653c4163636f756e7449642c42616c616e63653e3e3a3a6465636f64653a3a686331383030646435646334643637613086055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68663262386133633435316564373834348705386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a683966363261303166333530653539376688056c3c636f72653a3a697465723a3a61646170746572733a3a6d61703a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a7472795f666f6c643a3a683265393663626364336636313832623389055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68313262333364613838313462333930318a05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68643763383630303539346561306131328b054773705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6e6578745f6b65793a3a68313461663835393261663033343962308c056e3c6672616d655f737570706f72743a3a73746f726167653a3a5072656669784974657261746f723c543e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a68393763346161356563383833653037328d056e3c6672616d655f737570706f72743a3a73746f726167653a3a5072656669784974657261746f723c543e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a68643561393230653530363430303762388e05aa0173705f72756e74696d653a3a7472616e73616374696f6e5f76616c69646974793a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722073705f72756e74696d653a3a7472616e73616374696f6e5f76616c69646974793a3a5472616e73616374696f6e56616c69646974794572726f723e3a3a656e636f64655f746f3a3a68333733393737303633633263373539328f053473705f72756e74696d653a3a7472616974733a3a486173683a3a686173685f6f663a3a683562323837343836313038356464333490053e73705f72756e74696d653a3a67656e657269633a3a656e636f64655f776974685f7665635f7072656669783a3a6865313839373563656665383534623036910591017061726974795f7363616c655f636f6465633a3a636f6465633a3a696e6e65725f7475706c655f696d706c3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f7220284b302c4c302c4d302c4e302c4f302c50302c51302c5230293e3a3a656e636f64655f746f3a3a6836313165353933613362643063666566920556616c6c6f633a3a7665633a3a73706c6963653a3a3c696d706c20616c6c6f633a3a7665633a3a647261696e3a3a447261696e3c542c413e3e3a3a6d6f76655f7461696c3a3a683230316331323265376166613434316193057d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683064313361386638656634663465356194057d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68333537373339303165376334353334379505483c5b545d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a683339613336303035363632613033653796057d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683436363230653539666334613733303297057d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683861643761303761393437333532643598057d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683933373561386462396163306136636299057d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68613531623630613964323164643464669a057d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68613934383166663564333230643134669b057d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68643266346534643665346335393534629c057d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68643332623666633033313831643832349d057d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68653266306466316236316335346162389e057d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68653938356566663732356331313734399f055a6672616d655f73797374656d3a3a657874656e73696f6e733a3a636865636b5f7765696768743a3a436865636b5765696768743c543e3a3a646f5f7072655f64697370617463683a3a6862613239353437326664666130663865a005566672616d655f73797374656d3a3a657874656e73696f6e733a3a636865636b5f7765696768743a3a436865636b5765696768743c543e3a3a646f5f76616c69646174653a3a6836346530343863656535626261613033a1055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6864323337336331306362393638323834a205386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836353338613935353563323364323263a30552616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a656e7472793a3a566163616e74456e7472793c4b2c563e3a3a696e736572743a3a6837653236653931393464303138396139a4053b6672616d655f737570706f72743a3a73746f726167653a3a776974685f7472616e73616374696f6e3a3a6862333062653837363832313266366661a5055073705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a73746172745f7472616e73616374696f6e3a3a6837353866333538383836366262313833a6054a3c706f6c6b61646f745f72756e74696d653a3a4f726967696e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6830316439303835303930643336646266a7052c6672616d655f73797374656d3a3a656e737572655f726f6f743a3a6862393135316334303165306664316163a8055373705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a726f6c6c6261636b5f7472616e73616374696f6e3a3a6831613238343538616562323333623365a9055173705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a636f6d6d69745f7472616e73616374696f6e3a3a6865366663303539313834383933383230aa05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6831643937633731653330323337633762ab05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6832643961383431353139353338653735ac05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6834373637326331373635326364666137ad05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6835383234346161313063306332663761ae05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6835393565626236303631393766363431af05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6835623730313937313632333432333932b005386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6835633265386438666234383431343835b105386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836613939653831643238323934356462b205386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836623961626330303432363963353738b305386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6837356131316635626461616532333934b405386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6838346337303766323939666337666165b505910173705f72756e74696d653a3a67656e657269633a3a6469676573743a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f72756e74696d653a3a67656e657269633a3a6469676573743a3a4469676573743c486173683e3e3a3a6465636f64653a3a6866666336666134643839666262333835b605386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6864663336393061613039396331623435b705386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6866323063323866616466663064373537b805386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6866366239393637393833333632396137b905386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6830316136386237323036336239633663ba05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6830643638343464326239303732323166bb05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6830663565303730346330626235653361bc05a80170616c6c65745f64656d6f63726163793a3a74797065733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f64656d6f63726163793a3a74797065733a3a5265666572656e64756d496e666f3c426c6f636b4e756d6265722c486173682c42616c616e63653e3e3a3a656e636f64655f746f3a3a6833393132613565306130396636393732bd05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6832343739386131613963336566386332be05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6832363339643130326162623731343763bf05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6832366263653762613239363739393930c005386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6832376531366333376562353033343765c105386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6832656230313163333037663435396531c205386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6834643235363165353934383638396537c305386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6836306331653766613032373836613262c405386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6836653639353430666537393530633838c505386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6838363836393238386266666238313865c605386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6839326638653363346263393337653339c705386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6839366337303361393739623433363232c805386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6863303235313133316334333266626566c905386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6863326461626430396566656437343665ca05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6863616539373034656664623065633761cb05706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6833653836366563376335633738386664cc05706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6866376137383338643362313433613164cd055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6862386636626264613439633538303738ce05746672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6765743a3a6837333564613637336162323864636436cf055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6862623638393463303330663962663533d005776672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a696e736572743a3a6833616664303937343536316235653066d1055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6832616531656461653438336631336333d205776672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a696e736572743a3a6838376165303239623432383536346539d3055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6831336432646263346231336162303132d4053c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6863396137663838326432336334333939d5053e70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6832303863386262643862623133393935d605723c70616c6c65745f7374616b696e673a3a5f5f4765744279746553747275637453746f7261676556657273696f6e3c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835366430613662623731386566376637d7056d3c70616c6c65745f7374616b696e673a3a5f5f476574427974655374727563745370616e536c6173683c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6836623764343038353064363961333834d805743c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374556e6170706c696564536c61736865733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6830353866643664613931386235616134d905723c70616c6c65745f7374616b696e673a3a5f5f4765744279746553747275637445726173546f74616c5374616b653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6830393732306461303364366661303734da05743c70616c6c65745f7374616b696e673a3a5f5f4765744279746553747275637445726173526577617264506f696e74733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6830313730626366343634353064313732db05763c70616c6c65745f7374616b696e673a3a5f5f476574427974655374727563744572617356616c696461746f7250726566733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6866323537386534666539396561646666dc05763c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374457261735374616b657273436c69707065643c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6837396262346565386539666132613537dd05713c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374496e76756c6e657261626c65733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864373564656237393562663337356534de05703c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374486973746f727944657074683c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862393438633139346433393264303231df054770616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6864333731303266376631656233626462e0059a013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d61784e6f6d696e6174696f6e7344656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862316563666466336362353732636634e105ac013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f7244656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835366432366438313262626561373339e2059e013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a536c61736844656665724475726174696f6e44656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864366363633532663232303464303266e3059b013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a426f6e64696e674475726174696f6e44656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6866383436366565316631636661613531e4059a013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a53657373696f6e7350657245726144656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6833633864336336663064643236656437e5055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6831613962636330343532353134396239e605386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6838623130303734623563643737623936e7053c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6866346262366538363138313361393064e8053f7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64655f746f3a3a6839396539393962343666316539663831e905d0013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e206173206672616d655f656c656374696f6e5f70726f76696465725f737570706f72743a3a456c656374696f6e4461746150726f76696465723c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449642c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a426c6f636b4e756d6265723e3e3a3a766f746572733a3a6861613465663133393363346436366538ea0539636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6830616136646231633364343130616636eb056e3c6672616d655f737570706f72743a3a73746f726167653a3a5072656669784974657261746f723c543e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6861383361306561303339653736323336ec0539636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6839613363303536613561633134353838ed0539636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6835363937353737356631643834343931ee055270616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a736c61736861626c655f62616c616e63655f6f665f666e3a3a7b7b636c6f737572657d7d3a3a6832656162393334393363636135636163ef05d1013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e206173206672616d655f656c656374696f6e5f70726f76696465725f737570706f72743a3a456c656374696f6e4461746150726f76696465723c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449642c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a426c6f636b4e756d6265723e3e3a3a746172676574733a3a6833373539653864663034336232303035f005cc013c70616c6c65745f7374616b696e673a3a53746173684f663c543e2061732073705f72756e74696d653a3a7472616974733a3a436f6e766572743c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449642c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e3e3e3a3a636f6e766572743a3a6833333639353361653765356138333730f105766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a6832313230346639623837663461353834f2054970616c6c65745f7374616b696e673a3a736c617368696e673a3a496e7370656374696e675370616e733c543e3a3a6572615f7370616e3a3a6833353231613262323063323434653335f3057d3c542061732070616c6c65745f7374616b696e673a3a53657373696f6e496e746572666163653c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e3e3a3a64697361626c655f76616c696461746f723a3a6865313636356666353965663735656635f4055e70616c6c65745f7374616b696e673a3a736c617368696e673a3a496e7370656374696e675370616e733c543e3a3a636f6d706172655f616e645f7570646174655f7370616e5f736c6173683a3a6862326431313064646332393230633263f505386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6864306137353530333533356338386336f6054370616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a636c6561725f6572615f696e666f726d6174696f6e3a3a6835366537623239626234643366313734f705706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6831373762373438633364363031303364f805706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6837316635336364323239333131663934f9055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6861376666363138303133663662613333fa053870616c6c65745f7374616b696e673a3a736c617368696e673a3a6170706c795f736c6173683a3a6865396138653035383033373036363936fb05363c5420617320636f72653a3a636f6e766572743a3a496e746f3c553e3e3a3a696e746f3a3a6831376533363964343461323066633165fc05633c54206173207061726974795f7363616c655f636f6465633a3a64657074685f6c696d69743a3a4465636f64654c696d69743e3a3a6465636f64655f616c6c5f776974685f64657074685f6c696d69743a3a6866313931336463333735633731643032fd05593c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6836366231633538313031306538666335fe05593c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6861316164323531636364396565643633ff05653c73705f747269653a3a6e6f64655f6865616465723a3a4e6f6465486561646572206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a683739303464376339343638306565336180065f3c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a68383132653264383139316437363663668106753c70616c6c65745f7374616b696e673a3a43616c6c3c543e206173206672616d655f737570706f72743a3a7472616974733a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a683066363038653139616363383838396582067b70616c6c65745f7374616b696e673a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f7374616b696e673a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a68666132613161363532643639346335358306566672616d655f73797374656d3a3a3c696d706c206672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3e3a3a696e635f636f6e73756d6572733a3a683935616432666537343033363537643984065c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68336638313234363166356261656134308506b50170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a4c6f636b61626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a7365745f6c6f636b3a3a683132343765663161663238623839663686063870616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6b696c6c5f73746173683a3a68616361383233333830336231373834358706386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a683433623430353133663736656534663688066b3c636f72653a3a697465723a3a61646170746572733a3a526573756c745368756e743c492c453e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a686538663162333530633139393962663589063970616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d616b655f7061796f75743a3a68616466396639623663313633313636648a06566672616d655f73797374656d3a3a3c696d706c206672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3e3a3a6465635f636f6e73756d6572733a3a68653130613938326666366230323637398b06ba0170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a6465706f7369745f696e746f5f6578697374696e673a3a68353564396361386662633731346566668c063970616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a6465706f7369745f6c6f673a3a68653036386231613066313364316639398d06733c706f6c6b61646f745f72756e74696d653a3a4e706f73436f6d70616374536f6c7574696f6e31362061732073705f6e706f735f656c656374696f6e733a3a436f6d70616374536f6c7574696f6e3e3a3a696e746f5f61737369676e6d656e743a3a68383662656637653638616137393934358e066b3c636f72653a3a697465723a3a61646170746572733a3a526573756c745368756e743c492c453e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a68303439363935306666643166343161348f06753c73705f72756e74696d653a3a67656e657269633a3a6865616465723a3a4865616465723c4e756d6265722c486173683e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a686434613438666561653964313739346590068e0173705f66696e616c6974795f6772616e6470613a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722073705f66696e616c6974795f6772616e6470613a3a45717569766f636174696f6e50726f6f663c482c4e3e3e3a3a656e636f64655f746f3a3a68326336633638653366333463383831379106693c706f6c6b61646f745f72756e74696d653a3a4e706f73436f6d70616374536f6c7574696f6e3136206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6833376233626338346637333131316562920637636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4d75743a3a63616c6c5f6d75743a3a68306163316662333937636132363265639306773c706f6c6b61646f745f72756e74696d653a3a4f726967696e20617320636f72653a3a636f6e766572743a3a46726f6d3c706f6c6b61646f745f72756e74696d653a3a4f726967696e43616c6c65723e3e3a3a66726f6d3a3a7b7b636c6f737572657d7d3a3a6864353432643866363432373837353136940648636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63657b7b767461626c652e7368696d7d7d3a3a68373561353066643937393262346164649506693c706f6c6b61646f745f72756e74696d653a3a4e706f73436f6d70616374536f6c7574696f6e3136206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68336666643431633331376139313436339606693c706f6c6b61646f745f72756e74696d653a3a4e706f73436f6d70616374536f6c7574696f6e3136206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68356534653061306461343764373239629706723c706f6c6b61646f745f72756e74696d653a3a4e706f73436f6d70616374536f6c7574696f6e31362061732073705f6e706f735f656c656374696f6e733a3a436f6d70616374536f6c7574696f6e3e3a3a756e697175655f746172676574733a3a6865386439303736323031383930613532980646616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a7365743a3a42547265655365743c543e3a3a696e736572743a3a68373830363234353663656366626435659906733c706f6c6b61646f745f72756e74696d653a3a4e706f73436f6d70616374536f6c7574696f6e31362061732073705f6e706f735f656c656374696f6e733a3a436f6d70616374536f6c7574696f6e3e3a3a66726f6d5f61737369676e6d656e743a3a68323861626238346565343235633038619a065d636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e3c413e20666f722026463e3a3a63616c6c3a3a68316431306565363665383137303163649b0654636f72653a3a7074723a3a64726f705f696e5f706c6163653c706f6c6b61646f745f72756e74696d653a3a4e706f73436f6d70616374536f6c7574696f6e31363e3a3a68373239643065616231303334343434649c0677706f6c6b61646f745f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f7220706f6c6b61646f745f72756e74696d653a3a4576656e743e3a3a656e636f64655f746f3a3a68343037663536306235326365623031319d067373705f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a656e636f64655f746f3a3a68383332353664653833633230623434349e064a706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f6672616d655f73797374656d3a3a68633533306532643962323361356432329f064e706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f7363686564756c65723a3a6830343563623461633633616633326532a0064c706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f696e64696365733a3a6836363263636437316231393864633661a1064d706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f62616c616e6365733a3a6834643537343163373334653762353235a2064c706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f7374616b696e673a3a6863366363363534326164313330383764a3064d706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f6f6666656e6365733a3a6865653236326230333833363332313837a4064c706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f73657373696f6e3a3a6832383136353735303865316336386130a5064c706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f6772616e6470613a3a6864643434393862306234306465613630a6064e706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f696d5f6f6e6c696e653a3a6830396239663264316464666363366366a7064e706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f64656d6f63726163793a3a6863383939333330653036343133636338a80659706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f636f6c6c6563746976655f496e7374616e6365313a3a6830663736633337636262633466623766a90657706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f656c656374696f6e735f70687261676d656e3a3a6833316566313062376164653065643930aa0659706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f6d656d626572736869705f496e7374616e6365313a3a6864393739616531376563313166363633ab064d706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f74726561737572793a3a6839373430313532346666616632383537ac0644706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f636c61696d733a3a6833633236623266643062646136343637ad064c706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f76657374696e673a3a6837306133653037343936393464343732ae064c706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f7574696c6974793a3a6863613261393336373431333365393038af064d706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f6964656e746974793a3a6835343436376138376564343435336165b0064a706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f70726f78793a3a6866346565396162613464333736636138b1064d706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f6d756c74697369673a3a6835313237353862393831666339386533b2064d706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f626f756e746965733a3a6863383165663062323734326364663161b30649706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f746970733a3a6838613230663464626366393935333833b40662706f6c6b61646f745f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a6830333665383266366133646635623532b506eb01636f72653a3a7074723a3a64726f705f696e5f706c6163653c3c706f6c6b61646f745f72756e74696d653a3a4f726967696e206173206672616d655f737570706f72743a3a7472616974733a3a4f726967696e54726169743e3a3a6164645f66696c7465723c70616c6c65745f70726f78793a3a3c696d706c2070616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c706f6c6b61646f745f72756e74696d653a3a52756e74696d653e3e3a3a646f5f70726f78793a3a7b7b636c6f737572657d7d3e3a3a7b7b636c6f737572657d7d3e3a3a6835653732376263343238633233386536b6066c3c706f6c6b61646f745f72756e74696d653a3a4f726967696e206173206672616d655f737570706f72743a3a7472616974733a3a4f726967696e54726169743e3a3a6164645f66696c7465723a3a7b7b636c6f737572657d7d3a3a6833663166663730393666313564653234b70648636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63657b7b767461626c652e7368696d7d7d3a3a6861386533653264643231363530323735b8069f0170616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a756e7369676e65643a3a3c696d706c2070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a50616c6c65743c543e3e3a3a756e7369676e65645f7072655f64697370617463685f636865636b733a3a6838353734646366663966393261353232b9068a0170616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a3c696d706c2070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a50616c6c65743c543e3e3a3a666561736962696c6974795f636865636b3a3a6839666265626461343831626234663530ba064b73705f696f3a3a6d6973633a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a72756e74696d655f76657273696f6e3a3a6863393133363666363361356239393737bb062c6672616d655f73797374656d3a3a656e737572655f6e6f6e653a3a6838666165653839613434383838393631bc067b70616c6c65745f696e64696365733a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f696e64696365733a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6839636665643530373033653237643538bd06746672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a6d61703a3a53746f726167654d61703c5072656669782c4861736865722c4b65792c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a6d75746174653a3a6861636534633130646463376238343565be067f6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a6d61703a3a53746f726167654d61703c5072656669782c4861736865722c4b65792c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a7472795f6d75746174655f6578697374733a3a6837633334313964376563323739653062bf06810170616c6c65745f617574686f72736869703a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f617574686f72736869703a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6863636331393630363137353164623866c0067b70616c6c65745f73657373696f6e3a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f73657373696f6e3a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6831643266363066313230343139616235c1064470616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a646f5f7265706f72745f65717569766f636174696f6e3a3a6834633531326432636333643438623334c206706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6866666530636335643365353938343235c306773c70616c6c65745f64656d6f63726163793a3a43616c6c3c543e206173206672616d655f737570706f72743a3a7472616974733a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6833316537376466316466336237366465c4067a3c70616c6c65745f636f6c6c6563746976653a3a43616c6c3c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6861346366646165313636653465313362c5067a3c70616c6c65745f636f6c6c6563746976653a3a43616c6c3c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6862636137306562356438353963643832c606723c70616c6c65745f746970733a3a43616c6c3c543e206173206672616d655f737570706f72743a3a7472616974733a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6834656439643435616462366261393364c7067a3c70616c6c65745f6d656d626572736869703a3a43616c6c3c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6838383664383761393533303662363932c8068b0173705f66696e616c6974795f6772616e6470613a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f66696e616c6974795f6772616e6470613a3a45717569766f636174696f6e50726f6f663c482c4e3e3e3a3a6465636f64653a3a6834663162393161383030666132333133c9067a70616c6c65745f636f6c6c6563746976653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f636f6c6c6563746976653a3a43616c6c3c542c493e3e3a3a6465636f64653a3a6862373233643533353561376434613365ca06820170616c6c65745f7574696c6974793a3a70616c6c65743a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f7574696c6974793a3a70616c6c65743a3a43616c6c3c543e3e3a3a6465636f64653a3a6839313231626235656464613035323664cb068b0173705f66696e616c6974795f6772616e6470613a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f66696e616c6974795f6772616e6470613a3a45717569766f636174696f6e50726f6f663c482c4e3e3e3a3a6465636f64653a3a6862363265666136613065656162303061cc067a70616c6c65745f636f6c6c6563746976653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f636f6c6c6563746976653a3a43616c6c3c542c493e3e3a3a6465636f64653a3a6834313734613634613561363034333835cd06820170616c6c65745f7574696c6974793a3a70616c6c65743a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f7574696c6974793a3a70616c6c65743a3a43616c6c3c543e3e3a3a6465636f64653a3a6866393632313564363330306139316663ce06aa02616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a72656d6f76653a3a3c696d706c20616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a48616e646c653c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a4e6f64655265663c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a6d61726b65723a3a4d75742c4b2c562c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a6d61726b65723a3a4c6561663e2c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a6d61726b65723a3a4b563e3e3a3a72656d6f76655f6c6561665f6b763a3a6831326231626237366633613265643166cf0664616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a42616c616e63696e67436f6e746578743c4b2c563e3a3a6d657267655f747261636b696e675f6368696c645f656467653a3a6834613135623035366339373064663466d0065a616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a42616c616e63696e67436f6e746578743c4b2c563e3a3a62756c6b5f737465616c5f6c6566743a3a6839373631616434366137666633663038d1065b616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a42616c616e63696e67436f6e746578743c4b2c563e3a3a62756c6b5f737465616c5f72696768743a3a6833623236626563373231363965336138d20660616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a42616c616e63696e67436f6e746578743c4b2c563e3a3a6d657267655f747261636b696e675f706172656e743a3a6832396434643637313235613766616333d3066a3c70616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6838623336303130376562623263643733d406746672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6765743a3a6866636233386232326539336533383834d5065d70616c6c65745f62616c616e6365733a3a3c696d706c2070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a7570646174655f6c6f636b733a3a6834613766636634393833666561656530d6068b0170616c6c65745f76657374696e673a3a70616c6c65743a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f76657374696e673a3a70616c6c65743a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6861653739363863613338343432656438d706b80170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a656e737572655f63616e5f77697468647261773a3a6861363633313632636362303766363562d8065c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6830653531663865323337316366303162d906713c285475706c65456c656d656e74302c5475706c65456c656d656e743129206173206672616d655f737570706f72743a3a7472616974733a3a4f6e46696e616c697a653c426c6f636b4e756d6265723e3e3a3a6f6e5f66696e616c697a653a3a6839313333616264623863313661653734da063c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6866633038643266646333373838653065db065c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6836353862316235363864666330316264dc06746672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a6d61703a3a53746f726167654d61703c5072656669782c4861736865722c4b65792c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a696e736572743a3a6861306631376465613164376234356366dd06653c73705f61726974686d657469633a3a66697865645f706f696e743a3a46697865645531323820617320636f72653a3a6f70733a3a61726974683a3a4469763e3a3a6469763a3a7b7b636c6f737572657d7d3a3a6836646264376163336466616536346330de06793c285475706c65456c656d656e74302c5475706c65456c656d656e743129206173206672616d655f737570706f72743a3a7472616974733a3a4f6666636861696e576f726b65723c426c6f636b4e756d6265723e3e3a3a6f6666636861696e5f776f726b65723a3a6862356566323264353830663737626461df065173705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6c6f63616c5f73746f726167655f6765743a3a6831663133626331643463393964333062e0065d73705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6c6f63616c5f73746f726167655f636f6d706172655f616e645f7365743a3a6836343435643638623563666537326366e1064b73705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a72616e646f6d5f736565643a3a6837363461653665316561386261306666e2064173705f6e706f735f656c656374696f6e733a3a70687261676d656e3a3a7365715f70687261676d656e5f636f72653a3a6864656165626337636562623464356238e3062c616c6c6f633a3a736c6963653a3a696e736572745f686561643a3a6835363033663238376535366635643132e40668636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4d75743c413e20666f7220266d757420463e3a3a63616c6c5f6d75743a3a6838646230373634623032363235643965e5063473705f6e706f735f656c656374696f6e733a3a7265647563653a3a7265647563653a3a6863623362313762393064376632646566e6066c3c73705f61726974686d657469633a3a7065725f7468696e67733a3a5065725531362061732073705f61726974686d657469633a3a7065725f7468696e67733a3a5065725468696e673e3a3a66726f6d5f726174696f6e616c3a3a6839633136396230663230626265313230e7065473705f6e706f735f656c656374696f6e733a3a68656c706572733a3a61737369676e6d656e745f726174696f5f746f5f7374616b65645f6e6f726d616c697a65643a3a6863396330346266316531333338633530e8065273705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a7375626d69745f7472616e73616374696f6e3a3a6833393331636537313666306666626631e9064c73705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a69735f76616c696461746f723a3a6831313939326437643965646234323365ea065173705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a737232353531395f7075626c69635f6b6579733a3a6831396162613737386265343636386630eb062c616c6c6f633a3a736c6963653a3a696e736572745f686561643a3a6837646662396631373438333433643361ec06683c636f72653a3a697465723a3a61646170746572733a3a6d61703a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6837666139653366323631663166346137ed0652616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a656e7472793a3a566163616e74456e7472793c4b2c563e3a3a696e736572743a3a6834363766373065653562313664333265ee063973705f6e706f735f656c656374696f6e733a3a6e6f64653a3a4e6f64653c413e3a3a726f6f743a3a6836353762643739356162663838333132ef064173705f6e706f735f656c656374696f6e733a3a6e6f64653a3a4e6f64653c413e3a3a69735f706172656e745f6f663a3a6862373337326162336335323434353838f006b70170616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6830623133326664326435626239636231f1067d3c70616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a50616c6c65743c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6833643230393638366537613839643032f2063e70616c6c65745f626162653a3a65717569766f636174696f6e3a3a69735f6b6e6f776e5f6f6666656e63653a3a6835393139376165383938386535393633f3063970616c6c65745f746970733a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6865653939373134313561373134633238f4063b70616c6c65745f746970733a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6864373531303166393166636539626663f5064470616c6c65745f746970733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6865646336393635343532386562363733f6069c013c70616c6c65745f746970733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d6178696d756d526561736f6e4c656e67746844656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6839333432336131373765653335373836f7069b013c70616c6c65745f746970733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a446174614465706f7369745065724279746544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863313065383237386539666665366433f8069d013c70616c6c65745f746970733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a5469705265706f72744465706f7369744261736544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6833313438343239623934343731306630f90696013c70616c6c65745f746970733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a54697046696e6465727346656544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6831313866366661326264363766306638fa0695013c70616c6c65745f746970733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a546970436f756e74646f776e44656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6830623634333663333230373430353530fb06773c736d616c6c7665633a3a536d616c6c5665633c413e20617320636f72653a3a697465723a3a7472616974733a3a636f6c6c6563743a3a457874656e643c3c4120617320736d616c6c7665633a3a41727261793e3a3a4974656d3e3e3a3a657874656e643a3a6831303732383530353835363063336439fc0635736d616c6c7665633a3a536d616c6c5665633c413e3a3a7472795f726573657276653a3a6833396535633963356162343336383137fd06456672616d655f737570706f72743a3a7472616974733a3a456e737572654f726967696e3a3a656e737572655f6f726967696e3a3a6864303364343161333339636632666339fe06ad0170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a77697468647261773a3a6862396136656138366162616538653863ff064170616c6c65745f6772616e6470613a3a65717569766f636174696f6e3a3a69735f6b6e6f776e5f6f6666656e63653a3a683939393638636662383564613461646480074470616c6c65745f76657374696e673a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a683934313731376134633138386330383981074670616c6c65745f76657374696e673a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a683939633866306463323936633939356682074f70616c6c65745f76657374696e673a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a68393631633832383033393835323764328307b80170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a4c6f636b61626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a657874656e645f6c6f636b3a3a683066386430656265323534343066613384074770616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3a3a63616c6c5f66756e6374696f6e733a3a683538386261303939323333323638316685074970616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3a3a73746f726167655f6d657461646174613a3a683535646638323962393638313964393386075270616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a686234643039613832376261363833386287073c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a686337383330306365343165643839656388073f73705f66696e616c6974795f6772616e6470613a3a636865636b5f6d6573736167655f7369676e61747572653a3a683838666661633330363066353037313489074c73705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a656432353531395f7665726966793a3a68306566363730336231636563376535628a075a70616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a68653861633666363634353936306663358b075c70616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a68326438346366363330653935613831658c076570616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a68303330363838626366316161373034648d07b7013c70616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a556e7369676e6564506861736544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68653330653662313434663931333766668e07303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68303766643431353838616530343835348f07303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68363563666361303461643365383230369007303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a683834313834653361326539356262376391074d636f72653a3a686173683a3a696d706c733a3a3c696d706c20636f72653a3a686173683a3a4861736820666f722028412c42293e3a3a686173683a3a6833366162666661326664313765373432920731636f72653a3a70616e69636b696e673a3a6173736572745f6661696c65643a3a68326230343036313238656364623736629307303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a683839313332316231613035373332333494075c3c70616c6c65745f746970733a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a68623334616537623135666134616535619507653c73705f747269653a3a6e6f64655f636f6465633a3a4e6f6465436f6465633c483e20617320747269655f64623a3a6e6f64655f636f6465633a3a4e6f6465436f6465633e3a3a6272616e63685f6e6f64653a3a68316432343166346161396165353165359607683c73705f747269653a3a6e6f64655f636f6465633a3a4e6f6465436f6465633c483e20617320747269655f64623a3a6e6f64655f636f6465633a3a4e6f6465436f6465633e3a3a657874656e73696f6e5f6e6f64653a3a68666163353931376334663230626131329707633c73705f747269653a3a6e6f64655f636f6465633a3a4e6f6465436f6465633c483e20617320747269655f64623a3a6e6f64655f636f6465633a3a4e6f6465436f6465633e3a3a6c6561665f6e6f64653a3a683637396435643435653538346539633598077570616c6c65745f746970733a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f746970733a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a683062353935316364383239613864306199075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68393565653830363537366133666339649a075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68393637346265636432336263323731619b075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68376461383761633531396136366635329c07673c70616c6c65745f76657374696e673a3a70616c6c65743a3a50616c6c65743c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a68323733333634386365333064373365359d076b3c70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e2061732073705f72756e74696d653a3a7472616974733a3a56616c6964617465556e7369676e65643e3a3a76616c69646174655f756e7369676e65643a3a68633666373263666436316633346430359e073970616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e3a3a69735f6f6e6c696e653a3a68643531366230633230316536643861639f074d73705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6e6574776f726b5f73746174653a3a6837366633656261633635313664653936a0074a73705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a737232353531395f7369676e3a3a6839343039653237363331643733643462a1075173705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6c6f63616c5f73746f726167655f7365743a3a6865646535616139353838393332656239a20789016672616d655f73797374656d3a3a6c696d6974733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f72206672616d655f73797374656d3a3a6c696d6974733a3a57656967687473506572436c6173733e3a3a656e636f64655f746f3a3a6862636134306238366437396463386536a3075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6866316539636235663166363735666464a407746672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a6d61703a3a53746f726167654d61703c5072656669782c4861736865722c4b65792c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a696e736572743a3a6863333663393065356636616135386639a5073c70616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6831633739343534383165643434656439a6073e70616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6865343136643566613662363639366139a707703c70616c6c65745f6772616e6470613a3a5f5f4765744279746553747275637443757272656e7453657449643c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6837386230633231333864343164663632a807693c70616c6c65745f6772616e6470613a3a5f5f4765744279746553747275637453746174653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6831373062383564383464623064336333a907683c636f72653a3a697465723a3a61646170746572733a3a6d61703a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6833393361613437373062326535343834aa076d3c636f72653a3a697465723a3a61646170746572733a3a6d61703a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a73697a655f68696e743a3a6836663536633966373939373337376563ab073d70616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a7363686564756c655f6368616e67653a3a6866336265333233646139653737343964ac075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6863323932666135316334623838333331ad07683c636f72653a3a697465723a3a61646170746572733a3a6d61703a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6832343934393637653333383464626533ae07683c636f72653a3a697465723a3a61646170746572733a3a6d61703a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6865656333626230383165636166623433af07683c636f72653a3a697465723a3a61646170746572733a3a6d61703a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6830353361376663373932363861613436b0077b70616c6c65745f6772616e6470613a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f6772616e6470613a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6835313464323165636637376662323464b1073e70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6834666334663666303636323736616661b2074070616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6837623833616162616162323461376361b3074670616c6c65745f74696d657374616d703a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a6866303739613931373161326662363464b4074870616c6c65745f74696d657374616d703a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a6861353765316366333361366333633063b5075170616c6c65745f74696d657374616d703a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6836633066663635353532643130613463b607a3013c70616c6c65745f74696d657374616d703a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d696e696d756d506572696f6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835616262373535383462626330336162b7073f70616c6c65745f617574686f72736869703a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6836333265646131653835656164306535b8074170616c6c65745f617574686f72736869703a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6835316630616631643533306164363337b90776636f72653a3a7074723a3a64726f705f696e5f706c6163653c70616c6c65745f617574686f72736869703a3a5f5f47657442797465537472756374446964536574556e636c65733c706f6c6b61646f745f72756e74696d653a3a52756e74696d653e3e3a3a6834393363313239663536613264613531ba076d3c70616c6c65745f617574686f72736869703a3a5f5f47657442797465537472756374556e636c65733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6833396462353861613365393162646334bb073a73705f61726974686d657469633a3a62696775696e743a3a42696755696e743a3a6c73747269703a3a6837376366303362363038396365653739bc073773705f61726974686d657469633a3a62696775696e743a3a42696755696e743a3a6d756c3a3a6833646639636462376665356132393865bd0768636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4d75743c413e20666f7220266d757420463e3a3a63616c6c5f6d75743a3a6861666635343962323737363430653163be075f3c70616c6c65745f6772616e6470613a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6865656261323637653632663034333335bf07613c70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6830373261633761343532623137303830c007623c70616c6c65745f617574686f72736869703a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6839653935346131356639623933656465c10756636f72653a3a7074723a3a64726f705f696e5f706c6163653c73705f72756e74696d653a3a72756e74696d655f737472696e673a3a52756e74696d65537472696e673e3a3a6837393664306338396333386437396133c2070c436f72655f76657273696f6ec30712436f72655f657865637574655f626c6f636bc40784016672616d655f6578656375746976653a3a4578656375746976653c53797374656d2c426c6f636b2c436f6e746578742c556e7369676e656456616c696461746f722c416c6c50616c6c6574732c434f6e52756e74696d65557067726164653e3a3a696e697469616c697a655f626c6f636b3a3a6834336538626164326166376465326438c5075073705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a73746172745f62617463685f7665726966793a3a6835313338376262656362313437306265c60783016672616d655f6578656375746976653a3a4578656375746976653c53797374656d2c426c6f636b2c436f6e746578742c556e7369676e656456616c696461746f722c416c6c50616c6c6574732c434f6e52756e74696d65557067726164653e3a3a6170706c795f65787472696e7369633a3a6861653661663038313261636237646263c7075173705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a66696e6973685f62617463685f7665726966793a3a6863363232353331336166663764663032c807516672616d655f73797374656d3a3a3c696d706c206672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3e3a3a66696e616c697a653a3a6834303430326133633966333064633461c9074573705f696f3a3a6d6973633a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a7072696e745f6865783a3a6862386435623830303863633162396663ca0715436f72655f696e697469616c697a655f626c6f636bcb07114d657461646174615f6d65746164617461cc071c426c6f636b4275696c6465725f6170706c795f65787472696e736963cd071b426c6f636b4275696c6465725f66696e616c697a655f626c6f636bce0720426c6f636b4275696c6465725f696e686572656e745f65787472696e73696373cf071c426c6f636b4275696c6465725f636865636b5f696e686572656e7473d00718426c6f636b4275696c6465725f72616e646f6d5f73656564d1072b5461676765645472616e73616374696f6e51756575655f76616c69646174655f7472616e73616374696f6ed2075373705f72756e74696d653a3a7472616e73616374696f6e5f76616c69646974793a3a56616c69645472616e73616374696f6e3a3a636f6d62696e655f776974683a3a6836633731633462363732346364653561d307214f6666636861696e576f726b65724170695f6f6666636861696e5f776f726b6572d4071850617261636861696e486f73745f76616c696461746f7273d5071e50617261636861696e486f73745f76616c696461746f725f67726f757073d6072050617261636861696e486f73745f617661696c6162696c6974795f636f726573d7072750617261636861696e486f73745f7065727369737465645f76616c69646174696f6e5f64617461d8072650617261636861696e486f73745f636865636b5f76616c69646174696f6e5f6f757470757473d9072550617261636861696e486f73745f73657373696f6e5f696e6465785f666f725f6368696c64da071a50617261636861696e486f73745f73657373696f6e5f696e666fdb071d50617261636861696e486f73745f76616c69646174696f6e5f636f6465dc072850617261636861696e486f73745f686973746f726963616c5f76616c69646174696f6e5f636f6465dd072c50617261636861696e486f73745f63616e6469646174655f70656e64696e675f617661696c6162696c697479de071e50617261636861696e486f73745f63616e6469646174655f6576656e7473df071a50617261636861696e486f73745f646d715f636f6e74656e7473e0072c50617261636861696e486f73745f696e626f756e645f68726d705f6368616e6e656c735f636f6e74656e7473e1071e4772616e6470614170695f6772616e6470615f617574686f726974696573e207384772616e6470614170695f7375626d69745f7265706f72745f65717569766f636174696f6e5f756e7369676e65645f65787472696e736963e307274772616e6470614170695f67656e65726174655f6b65795f6f776e6572736869705f70726f6f66e4074470616c6c65745f73657373696f6e3a3a686973746f726963616c3a3a50726f76696e67547269653c543e3a3a70726f76653a3a6862353563613736306565303739663864e50715426162654170695f636f6e66696775726174696f6ee6071b426162654170695f63757272656e745f65706f63685f7374617274e70715426162654170695f63757272656e745f65706f6368e80712426162654170695f6e6578745f65706f6368e90724426162654170695f67656e65726174655f6b65795f6f776e6572736869705f70726f6f66ea0735426162654170695f7375626d69745f7265706f72745f65717569766f636174696f6e5f756e7369676e65645f65787472696e736963eb0721417574686f72697479446973636f766572794170695f617574686f726974696573ec072153657373696f6e4b6579735f67656e65726174655f73657373696f6e5f6b657973ed074e73705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a656432353531395f67656e65726174653a3a6863316664303463336532393065383031ee074e73705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a737232353531395f67656e65726174653a3a6830313637663336366230613437643830ef071f53657373696f6e4b6579735f6465636f64655f73657373696f6e5f6b657973f0071d4163636f756e744e6f6e63654170695f6163636f756e745f6e6f6e6365f107205472616e73616374696f6e5061796d656e744170695f71756572795f696e666ff207275472616e73616374696f6e5061796d656e744170695f71756572795f6665655f64657461696c73f307830170616c6c65745f636f6c6c6563746976653a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f636f6c6c6563746976653a3a4572726f723c542c493e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6837366366306236343239633336346133f4075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6838323564643865386538326634636137f5075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6835646635343932306635313230396635f6075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6839623866663838306462356462366633f7074c70616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a76616c69646174655f616e645f6765745f70726f706f73616c3a3a6835383738633938646139636463383363f8074670616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a646f5f617070726f76655f70726f706f73616c3a3a6838653139343831643130326339306638f9074270616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a72656d6f76655f70726f706f73616c3a3a6865303531363937393766396365393461fa072c616c6c6f633a3a736c6963653a3a696e736572745f686561643a3a6864343766383466303632386139386262fb075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6837663362303763353866343366666461fc074b6672616d655f737570706f72743a3a7472616974733a3a4368616e67654d656d626572733a3a7365745f6d656d626572735f736f727465643a3a6863383931636133346333653565313438fd07830170616c6c65745f636f6c6c6563746976653a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f636f6c6c6563746976653a3a4572726f723c542c493e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6833343662323764346164313939386465fe075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6866666531316339363163666533383837ff075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a683436303235633831373737643065306480085c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a683061653464613831333762613265323881084c70616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a76616c69646174655f616e645f6765745f70726f706f73616c3a3a683066386131616664366164376537323382084670616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a646f5f617070726f76655f70726f706f73616c3a3a683062373262663362306536303635616583084270616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a72656d6f76655f70726f706f73616c3a3a68396335383162363865316262663662348408a2013c70616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a4368616e67654d656d626572733c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e3e3a3a6368616e67655f6d656d626572735f736f727465643a3a686131333432636236633538333033626285085c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6866306131636265626437386138336561860896013c70616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a4368616e67654d656d626572733c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e3e3a3a7365745f7072696d653a3a683561303064343761363034353233336687084170616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a63616c6c5f66756e6374696f6e733a3a683139386339666561356130613965366388084370616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a73746f726167655f6d657461646174613a3a686131316338626234366439366163306589086f3c70616c6c65745f636f6c6c6563746976653a3a5f5f47657442797465537472756374566f74696e673c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68333436313139666638363463346633388a08723c70616c6c65745f636f6c6c6563746976653a3a5f5f4765744279746553747275637450726f706f73616c733c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68326163316338343739373230326563378b084370616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a73746f726167655f6d657461646174613a3a68626233626332356262373738636234308c086e3c70616c6c65745f636f6c6c6563746976653a3a5f5f476574427974655374727563745072696d653c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68333738613237356232326266373862628d08733c70616c6c65745f636f6c6c6563746976653a3a5f5f4765744279746553747275637450726f706f73616c4f663c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68383939653138373865333633323838668e084d3c706f6c6b61646f745f72756e74696d653a3a43616c6c20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a68346635346532643136633036353534392e363937328f08643c70616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a683665326539326334656339383738303690083d70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6c61756e63685f7075626c69633a3a68343565346563316566663739383464659108766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a683433396565613161396532623065363992083b70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6261636b696e675f666f723a3a683336636231396430393338623133383693087f70616c6c65745f64656d6f63726163793a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f64656d6f63726163793a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a686366613838626465313465613938636594085c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a683137653066643032383435373265656395084170616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a696e6a6563745f7265666572656e64756d3a3a683235333066646533623766313861313596083f70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6c61756e63685f65787465726e616c3a3a683831636464306133346563613035636497084170616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a646f5f656e6163745f70726f706f73616c3a3a686631343139626261653835626136663198085c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68383937653834613432613437396661339908746672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6765743a3a68323861656363306435656436313465359a084470616c6c65745f73657373696f6e3a3a686973746f726963616c3a3a50726f76696e67547269653c543e3a3a71756572793a3a68633666616435613335656264623861319b087c636f72653a3a7074723a3a64726f705f696e5f706c6163653c747269655f64623a3a7472696564626d75743a3a5472696544424d75743c73705f747269653a3a4c61796f75743c73705f72756e74696d653a3a7472616974733a3a426c616b6554776f3235363e3e3e3a3a68623036343462396563343165383362349c08543c747269655f64623a3a7472696564626d75743a3a5472696544424d75743c4c3e20617320747269655f64623a3a547269654d75743c4c3e3e3a3a696e736572743a3a68303064623137386465633734336631659d083c747269655f64623a3a7472696564626d75743a3a4e6f646553746f726167653c483e3a3a616c6c6f633a3a68393864623333663535313233366138329e0860747269655f64623a3a6e6962626c653a3a6e6962626c65736c6963653a3a3c696d706c20747269655f64623a3a6e6962626c653a3a4e6962626c65536c6963653e3a3a72696768745f697465723a3a68616238393463313266656332346637319f0872747269655f64623a3a6e6962626c653a3a6e6962626c657665633a3a3c696d706c20747269655f64623a3a6e6962626c653a3a4e6962626c655665633e3a3a617070656e645f6f7074696f6e616c5f736c6963655f616e645f6e6962626c653a3a6836653736666533383834643761313239a00841747269655f64623a3a7472696564626d75743a3a5472696544424d75743c4c3e3a3a636f6d6d69745f6368696c643a3a6839653238373934313839323633326237a1085c747269655f64623a3a6e6962626c653a3a6e6962626c657665633a3a3c696d706c20747269655f64623a3a6e6962626c653a3a4e6962626c655665633e3a3a64726f705f6c617374733a3a6833323163613533323735333564343337a2083e70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6830343832343138376665383763653430a3084070616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6831643935653165343136663162303161a4086e3c70616c6c65745f64656d6f63726163793a3a5f5f47657442797465537472756374566f74696e674f663c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6832643462356236373332373237316463a508713c70616c6c65745f64656d6f63726163793a3a5f5f476574427974655374727563745075626c696350726f70733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6861333236303938373931393338386337a6084970616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6836343035316338316565616332373862a70896013c70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d6178566f74657344656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6830313333636361373338303238323064a8089b013c70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a436f6f6c6f6666506572696f6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6836616232356135633538313336343532a908a3013c70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a46617374547261636b566f74696e67506572696f6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6834656635643263636136636536636534aa089c013c70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d696e696d756d4465706f73697444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6831323837323963353639616336303935ab089a013c70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4c61756e6368506572696f6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863616336353031653831646635323936ac089f0170616c6c65745f64656d6f63726163793a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f64656d6f63726163793a3a507265696d6167655374617475733c4163636f756e7449642c42616c616e63652c426c6f636b4e756d6265723e3e3a3a656e636f64655f746f3a3a6838333237653339333564346164663135ad083e747269655f64623a3a7472696564626d75743a3a5472696544424d75743c4c3e3a3a696e736572745f61743a3a6832643664353862306532313263386564ae083c747269655f64623a3a7472696564626d75743a3a4e6f64653c4f3e3a3a66726f6d5f656e636f6465643a3a6865343062323736383762663765313037af0845747269655f64623a3a7472696564626d75743a3a5472696544424d75743c4c3e3a3a696e736572745f696e73706563746f723a3a6837393432366333356233616362323162b008363c5420617320636f72653a3a636f6e766572743a3a496e746f3c553e3e3a3a696e746f3a3a6837646562303534633066303162313865b108376861736862726f776e3a3a7365743a3a486173685365743c542c533e3a3a696e736572743a3a6866333364323638623538366661306235b2083e747269655f64623a3a7472696564626d75743a3a4e6f64653c4f3e3a3a696e6c696e655f6f725f686173683a3a6861366133313430376230646333353037b30835747269655f64623a3a7472696564626d75743a3a656d7074795f6368696c6472656e3a3a6835626562303166386464643235656631b40865747269655f64623a3a6e6962626c653a3a6e6962626c65736c6963653a3a3c696d706c20747269655f64623a3a6e6962626c653a3a4e6962626c65536c6963653e3a3a746f5f73746f7265645f72616e67653a3a6864396463663637383466636331636465b5083e6861736862726f776e3a3a7261773a3a5261775461626c653c543e3a3a726573657276655f7265686173683a3a6832636234393366356435393163626233b608613c70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6861653239386236663234623935653462b708746672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6765743a3a6833363039663237306637383536363065b8085c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6830323631656634626633323963623736b9085c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6862323761343537616337343939323230ba085c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6830363663383638633766336134336562bb084a70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a7265647563655f757073747265616d5f64656c65676174696f6e3a3a6835336239336431666330376435633136bc084370616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6e6f74655f707265696d6167655f696e6e65723a3a6864336336646661373232343834383165bd084c70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6e6f74655f696d6d696e656e745f707265696d6167655f696e6e65723a3a6832626130643239626263616437363364be085c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6862346565313361383234636332306133bf083f70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a7472795f72656d6f76655f766f74653a3a6861346562643962366133653032613635c00844636f72653a3a7074723a3a64726f705f696e5f706c6163653c706f6c6b61646f745f72756e74696d653a3a4576656e743e3a3a6836303961353238303039633736633937c108723c70616c6c65745f72616e646f6d6e6573735f636f6c6c6563746976655f666c69703a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6861333432383834623135346138336439c208426672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a6839626431643765366561363131396464c308446672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a6865366366316461646338633236313635c4084d6672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6830393934343264396266616462353166c50899013c6672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a56657273696f6e44656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864643535663730653463633739626439c6089a013c6672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a446257656967687444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6833343233623861666163366636633539c708a0013c6672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a426c6f636b48617368436f756e7444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6861303838663336396165656430336164c8089d013c6672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a426c6f636b4c656e67746844656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6830303437613765363533353462343462c9089e013c6672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a426c6f636b5765696768747344656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6866323738396566366239353234653861ca083570616c6c65745f7374616b696e673a3a736c617368696e673a3a646f5f736c6173683a3a6861306535393762633130323039313466cb084470616c6c65745f7574696c6974793a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a6837376230396663383066666662383562cc084573705f696f3a3a6d6973633a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a7072696e745f6e756d3a3a6837663964343033643738623936343163cd085373705f696f3a3a747269653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a626c616b65325f3235365f6f7264657265645f726f6f743a3a6831383334336639663463383961363534ce084373705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a726f6f743a3a6865373734303961613634313366316635cf084b73705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6368616e6765735f726f6f743a3a6861313365373864363132663964373063d0084170616c6c65745f6d656d626572736869703a3a4d6f64756c653c542c493e3a3a63616c6c5f66756e6374696f6e733a3a6834626630666562363565346335356635d1084370616c6c65745f6d656d626572736869703a3a4d6f64756c653c542c493e3a3a73746f726167655f6d657461646174613a3a6832656262643239623937666239643561d2085170616c6c65745f72616e646f6d6e6573735f636f6c6c6563746976655f666c69703a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6833653263393930613663303034306132d3086073705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a736563703235366b315f65636473615f7265636f7665725f636f6d707265737365643a3a6862326437663338623634366537343762d408653c6672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6831316330663165316463613862623066d5083d3c5420617320636f72653a3a636f6e766572743a3a547279496e746f3c553e3e3a3a7472795f696e746f3a3a6837343439376331393031616237353061d6083773705f61726974686d657469633a3a62696775696e743a3a42696755696e743a3a6164643a3a6839313462303231323362636235353463d7084473705f61726974686d657469633a3a62696775696e743a3a42696755696e743a3a6469763a3a7b7b636c6f737572657d7d3a3a6834353636623433636231353966383365d808413c73705f696e686572656e74733a3a4572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6833386136323834363330313937393864d9084273705f696f3a3a6c6f6767696e673a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6c6f673a3a6865663666663431653361616162396435da087773705f72756e74696d655f696e746572666163653a3a706173735f62793a3a3c696d706c2073705f72756e74696d655f696e746572666163653a3a7761736d3a3a46726f6d46464956616c756520666f7220543e3a3a66726f6d5f6666695f76616c75653a3a6837666662626535633239343833356365db08543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6832363831323331623561376363343334dc087773705f72756e74696d655f696e746572666163653a3a706173735f62793a3a3c696d706c2073705f72756e74696d655f696e746572666163653a3a7761736d3a3a496e746f46464956616c756520666f7220543e3a3a696e746f5f6666695f76616c75653a3a6865336635623032656337336461316337dd08323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a6831383161396339356337373439376137de084573705f696f3a3a616c6c6f6361746f723a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a667265653a3a6834613665353738343364633938366265df084773705f696f3a3a616c6c6f6361746f723a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6d616c6c6f633a3a6839386165653164666364396236386334e00830616c6c6f633a3a7665633a3a5665633c542c413e3a3a726573657276653a3a6833666437333332326536333036393532e108473c73705f72756e74696d653a3a44697370617463684572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6832623636363136623332626131336165e208573c73705f72756e74696d653a3a72756e74696d655f737472696e673a3a52756e74696d65537472696e6720617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6833313066316330396365373161616361e30856747269655f64623a3a6e6962626c653a3a6e6962626c657665633a3a3c696d706c20747269655f64623a3a6e6962626c653a3a4e6962626c655665633e3a3a707573683a3a6833656264343631643335346637366166e408095f5f6c736872746933e5084c636f6d70696c65725f6275696c74696e733a3a696e743a3a7370656369616c697a65645f6469765f72656d3a3a753132385f6469765f72656d3a3a6866353635306232313761613464643134e608095f5f756d6f64746933e708095f5f75646976746933e808085f5f6d756c746933e908066d656d637079ea08076d656d6d6f7665eb08066d656d736574ec080462636d70ed08095f5f6173686c74693300550970726f64756365727302086c616e6775616765010452757374000c70726f6365737365642d62790105727573746325312e35322e302d6e696768746c79202865333761313363633320323032312d30322d323829" } } diff --git a/node/service/chain-specs/westend.json b/node/service/chain-specs/westend.json index 6527d81001df..43c7333f8a26 100644 --- a/node/service/chain-specs/westend.json +++ b/node/service/chain-specs/westend.json @@ -17,7 +17,17 @@ "/dns/boot-node.helikon.io/tcp/7080/p2p/12D3KooWRFDPyT8vA8mLzh6dJoyujn4QNjeqi6Ch79eSMz9beKXC", "/dns/boot-node.helikon.io/tcp/7082/wss/p2p/12D3KooWRFDPyT8vA8mLzh6dJoyujn4QNjeqi6Ch79eSMz9beKXC", "/dns/westend.bootnode.amforc.com/tcp/30333/p2p/12D3KooWJ5y9ZgVepBQNW4aabrxgmnrApdVnscqgKWiUu4BNJbC8", - "/dns/westend.bootnode.amforc.com/tcp/30334/wss/p2p/12D3KooWJ5y9ZgVepBQNW4aabrxgmnrApdVnscqgKWiUu4BNJbC8" + "/dns/westend.bootnode.amforc.com/tcp/30334/wss/p2p/12D3KooWJ5y9ZgVepBQNW4aabrxgmnrApdVnscqgKWiUu4BNJbC8", + "/dns/westend-bootnode.polkadotters.com/tcp/30333/p2p/12D3KooWHPHb64jXMtSRJDrYFATWeLnvChL8NtWVttY67DCH1eC5", + "/dns/westend-bootnode.polkadotters.com/tcp/30334/wss/p2p/12D3KooWHPHb64jXMtSRJDrYFATWeLnvChL8NtWVttY67DCH1eC5", + "/dns/wnd-bootnode-cr.gatotech.network/tcp/31330/p2p/12D3KooWQGR1vUhoy6mvQorFp3bZFn6NNezhQZ6NWnVV7tpFgoPd", + "/dns/wnd-bootnode-cr.gatotech.network/tcp/31430/ws/p2p/12D3KooWQGR1vUhoy6mvQorFp3bZFn6NNezhQZ6NWnVV7tpFgoPd", + "/dns/wnd-bootnode-cr.gatotech.network/tcp/31530/wss/p2p/12D3KooWQGR1vUhoy6mvQorFp3bZFn6NNezhQZ6NWnVV7tpFgoPd", + "/dns/boot-westend.metaspan.io/tcp/33012/p2p/12D3KooWNTau7iG4G9cUJSwwt2QJP1W88pUf2SgqsHjRU2RL8pfa", + "/dns/boot-westend.metaspan.io/tcp/33015/ws/p2p/12D3KooWNTau7iG4G9cUJSwwt2QJP1W88pUf2SgqsHjRU2RL8pfa", + "/dns/boot-westend.metaspan.io/tcp/33016/wss/p2p/12D3KooWNTau7iG4G9cUJSwwt2QJP1W88pUf2SgqsHjRU2RL8pfa", + "/dns/westend-bootnode.turboflakes.io/tcp/30310/p2p/12D3KooWJvPDCZmReU46ghpCMJCPVUvUCav4WQdKtXQhZgJdH6tZ", + "/dns/westend-bootnode.turboflakes.io/tcp/30410/wss/p2p/12D3KooWJvPDCZmReU46ghpCMJCPVUvUCav4WQdKtXQhZgJdH6tZ" ], "telemetryEndpoints": [ [ @@ -137,4 +147,4 @@ "childrenDefault": {} } } -} \ No newline at end of file +} diff --git a/node/service/src/chain_spec.rs b/node/service/src/chain_spec.rs index 8650499d064c..12b65c7ba853 100644 --- a/node/service/src/chain_spec.rs +++ b/node/service/src/chain_spec.rs @@ -25,7 +25,7 @@ use kusama_runtime as kusama; use kusama_runtime_constants::currency::UNITS as KSM; use pallet_im_online::sr25519::AuthorityId as ImOnlineId; use pallet_staking::Forcing; -use polkadot_primitives::v2::{AccountId, AccountPublic, AssignmentId, ValidatorId}; +use polkadot_primitives::{AccountId, AccountPublic, AssignmentId, ValidatorId}; #[cfg(feature = "polkadot-native")] use polkadot_runtime as polkadot; #[cfg(feature = "polkadot-native")] @@ -67,9 +67,9 @@ const DEFAULT_PROTOCOL_ID: &str = "dot"; #[serde(rename_all = "camelCase")] pub struct Extensions { /// Block numbers with known hashes. - pub fork_blocks: sc_client_api::ForkBlocks, + pub fork_blocks: sc_client_api::ForkBlocks, /// Known bad block hashes. - pub bad_blocks: sc_client_api::BadBlocks, + pub bad_blocks: sc_client_api::BadBlocks, /// The light sync state. /// /// This value will be set by the `sync-state rpc` implementation. @@ -172,10 +172,9 @@ pub fn wococo_config() -> Result { feature = "polkadot-native" ))] fn default_parachains_host_configuration( -) -> polkadot_runtime_parachains::configuration::HostConfiguration< - polkadot_primitives::v2::BlockNumber, -> { - use polkadot_primitives::v2::{MAX_CODE_SIZE, MAX_POV_SIZE}; +) -> polkadot_runtime_parachains::configuration::HostConfiguration +{ + use polkadot_primitives::{MAX_CODE_SIZE, MAX_POV_SIZE}; polkadot_runtime_parachains::configuration::HostConfiguration { validation_upgrade_cooldown: 2u32, @@ -190,8 +189,7 @@ fn default_parachains_host_configuration( max_upward_queue_count: 8, max_upward_queue_size: 1024 * 1024, max_downward_message_size: 1024 * 1024, - ump_service_total_weight: Weight::from_ref_time(100_000_000_000) - .set_proof_size(MAX_POV_SIZE as u64), + ump_service_total_weight: Weight::from_parts(100_000_000_000, MAX_POV_SIZE as u64), max_upward_message_size: 50 * 1024, max_upward_message_num_per_candidate: 5, hrmp_sender_deposit: 0, @@ -570,7 +568,7 @@ fn westend_staging_testnet_config_genesis(wasm_binary: &[u8]) -> westend::Genesi }, paras: Default::default(), registrar: westend_runtime::RegistrarConfig { - next_free_para_id: polkadot_primitives::v2::LOWEST_PUBLIC_ID, + next_free_para_id: polkadot_primitives::LOWEST_PUBLIC_ID, }, xcm_pallet: Default::default(), nomination_pools: Default::default(), @@ -1074,7 +1072,7 @@ fn rococo_staging_testnet_config_genesis(wasm_binary: &[u8]) -> rococo_runtime:: config: default_parachains_host_configuration(), }, registrar: rococo_runtime::RegistrarConfig { - next_free_para_id: polkadot_primitives::v2::LOWEST_PUBLIC_ID, + next_free_para_id: polkadot_primitives::LOWEST_PUBLIC_ID, }, xcm_pallet: Default::default(), nis_counterpart_balances: Default::default(), @@ -1547,7 +1545,7 @@ pub fn westend_testnet_genesis( }, paras: Default::default(), registrar: westend_runtime::RegistrarConfig { - next_free_para_id: polkadot_primitives::v2::LOWEST_PUBLIC_ID, + next_free_para_id: polkadot_primitives::LOWEST_PUBLIC_ID, }, xcm_pallet: Default::default(), nomination_pools: Default::default(), @@ -1631,7 +1629,7 @@ pub fn rococo_testnet_genesis( }, paras: rococo_runtime::ParasConfig { paras: vec![] }, registrar: rococo_runtime::RegistrarConfig { - next_free_para_id: polkadot_primitives::v2::LOWEST_PUBLIC_ID, + next_free_para_id: polkadot_primitives::LOWEST_PUBLIC_ID, }, xcm_pallet: Default::default(), nis_counterpart_balances: Default::default(), diff --git a/node/service/src/grandpa_support.rs b/node/service/src/grandpa_support.rs index f85249579ecf..14507e87a2d8 100644 --- a/node/service/src/grandpa_support.rs +++ b/node/service/src/grandpa_support.rs @@ -23,7 +23,7 @@ use sp_runtime::traits::{Block as BlockT, Header as _, NumberFor}; use crate::HeaderProvider; #[cfg(feature = "full-node")] -use polkadot_primitives::v2::{Block, Hash}; +use polkadot_primitives::{Block, Hash}; /// Returns the block hash of the block at the given `target_number` by walking /// backwards from the given `current_header`. @@ -224,7 +224,7 @@ mod tests { TestClientBuilder, TestClientBuilderExt, }; use sp_blockchain::HeaderBackend; - use sp_runtime::{generic::BlockId, traits::Header}; + use sp_runtime::traits::Header; use std::sync::Arc; #[test] @@ -232,13 +232,16 @@ mod tests { let _ = env_logger::try_init(); let client = Arc::new(TestClientBuilder::new().build()); + let mut hashes = vec![]; + hashes.push(client.info().genesis_hash); let mut push_blocks = { let mut client = client.clone(); - move |n| { + move |hashes: &mut Vec<_>, n| { for _ in 0..n { let block = client.init_polkadot_block_builder().build().unwrap().block; + hashes.push(block.header.hash()); futures::executor::block_on(client.import(BlockOrigin::Own, block)).unwrap(); } } @@ -246,7 +249,7 @@ mod tests { let get_header = { let client = client.clone(); - move |n| client.header(&BlockId::Number(n)).unwrap().unwrap() + move |n| client.expect_header(n).unwrap() }; // the rule should filter all votes after block #20 @@ -254,7 +257,7 @@ mod tests { let voting_rule = super::PauseAfterBlockFor(20, 30); // add 10 blocks - push_blocks(10); + push_blocks(&mut hashes, 10); assert_eq!(client.info().best_number, 10); // we have not reached the pause block @@ -262,38 +265,38 @@ mod tests { assert_eq!( futures::executor::block_on(voting_rule.restrict_vote( client.clone(), - &get_header(0), - &get_header(10), - &get_header(10) + &get_header(hashes[0]), + &get_header(hashes[10]), + &get_header(hashes[10]) )), None, ); // add 15 more blocks // best block: #25 - push_blocks(15); + push_blocks(&mut hashes, 15); // we are targeting the pause block, // the vote should not be restricted assert_eq!( futures::executor::block_on(voting_rule.restrict_vote( client.clone(), - &get_header(10), - &get_header(20), - &get_header(20) + &get_header(hashes[10]), + &get_header(hashes[20]), + &get_header(hashes[20]) )), None, ); // we are past the pause block, votes should // be limited to the pause block. - let pause_block = get_header(20); + let pause_block = get_header(hashes[20]); assert_eq!( futures::executor::block_on(voting_rule.restrict_vote( client.clone(), - &get_header(10), - &get_header(21), - &get_header(21) + &get_header(hashes[10]), + &get_header(hashes[21]), + &get_header(hashes[21]) )), Some((pause_block.hash(), *pause_block.number())), ); @@ -304,15 +307,15 @@ mod tests { futures::executor::block_on(voting_rule.restrict_vote( client.clone(), &pause_block, // #20 - &get_header(21), - &get_header(21), + &get_header(hashes[21]), + &get_header(hashes[21]), )), Some((pause_block.hash(), *pause_block.number())), ); // add 30 more blocks // best block: #55 - push_blocks(30); + push_blocks(&mut hashes, 30); // we're at the last block of the pause, this block // should still be considered in the pause period @@ -320,8 +323,8 @@ mod tests { futures::executor::block_on(voting_rule.restrict_vote( client.clone(), &pause_block, // #20 - &get_header(50), - &get_header(50), + &get_header(hashes[50]), + &get_header(hashes[50]), )), Some((pause_block.hash(), *pause_block.number())), ); @@ -331,8 +334,8 @@ mod tests { futures::executor::block_on(voting_rule.restrict_vote( client.clone(), &pause_block, // #20 - &get_header(51), - &get_header(51), + &get_header(hashes[51]), + &get_header(hashes[51]), )), None, ); diff --git a/node/service/src/lib.rs b/node/service/src/lib.rs index 4252474a68f5..14f3c6ba1197 100644 --- a/node/service/src/lib.rs +++ b/node/service/src/lib.rs @@ -49,7 +49,6 @@ use { polkadot_node_network_protocol::{ peer_set::PeerSetProtocolNames, request_response::ReqProtocolNames, }, - polkadot_overseer::BlockInfo, sc_client_api::BlockBackend, sp_core::traits::SpawnNamed, sp_trie::PrefixedMemoryDB, @@ -95,13 +94,14 @@ pub use polkadot_client::PolkadotExecutorDispatch; pub use chain_spec::{KusamaChainSpec, PolkadotChainSpec, RococoChainSpec, WestendChainSpec}; pub use consensus_common::{block_validation::Chain, Proposal, SelectChain}; +use frame_benchmarking_cli::SUBSTRATE_REFERENCE_HARDWARE; use mmr_gadget::MmrGadget; #[cfg(feature = "full-node")] pub use polkadot_client::{ AbstractClient, Client, ClientHandle, ExecuteWithClient, FullBackend, FullClient, RuntimeApiCollection, }; -pub use polkadot_primitives::v2::{Block, BlockId, BlockNumber, CollatorPair, Hash, Id as ParaId}; +pub use polkadot_primitives::{Block, BlockId, BlockNumber, CollatorPair, Hash, Id as ParaId}; pub use sc_client_api::{Backend, CallExecutor, ExecutionStrategy}; pub use sc_consensus::{BlockImport, LongestChain}; use sc_executor::NativeElseWasmExecutor; @@ -120,17 +120,13 @@ pub use sp_runtime::{ }; #[cfg(feature = "kusama-native")] -pub use kusama_runtime; +pub use {kusama_runtime, kusama_runtime_constants}; #[cfg(feature = "polkadot-native")] -pub use polkadot_runtime; +pub use {polkadot_runtime, polkadot_runtime_constants}; #[cfg(feature = "rococo-native")] -pub use rococo_runtime; +pub use {rococo_runtime, rococo_runtime_constants}; #[cfg(feature = "westend-native")] -pub use westend_runtime; - -/// The maximum number of active leaves we forward to the [`Overseer`] on startup. -#[cfg(any(test, feature = "full-node"))] -const MAX_ACTIVE_LEAVES: usize = 4; +pub use {westend_runtime, westend_runtime_constants}; /// Provides the header and block number for a hash. /// @@ -161,10 +157,7 @@ where &self, hash: Block::Hash, ) -> sp_blockchain::Result::Header>> { - >::header( - self, - generic::BlockId::::Hash(hash), - ) + >::header(self, hash) } fn number( &self, @@ -303,7 +296,7 @@ pub fn open_database(db_source: &DatabaseSource) -> Result, Er path.parent().ok_or(Error::DatabasePathRequired)?.into(), parachains_db::CacheSizes::default(), )?, - DatabaseSource::Auto { paritydb_path, rocksdb_path, .. } => + DatabaseSource::Auto { paritydb_path, rocksdb_path, .. } => { if paritydb_path.is_dir() && paritydb_path.exists() { parachains_db::open_creating_paritydb( paritydb_path.parent().ok_or(Error::DatabasePathRequired)?.into(), @@ -314,7 +307,8 @@ pub fn open_database(db_source: &DatabaseSource) -> Result, Er rocksdb_path.clone(), parachains_db::CacheSizes::default(), )? - }, + } + }, DatabaseSource::Custom { .. } => { unimplemented!("No polkadot subsystem db for custom source."); }, @@ -353,7 +347,7 @@ type FullGrandpaBlockImport; #[cfg(feature = "full-node")] type FullBeefyBlockImport = - beefy_gadget::import::BeefyBlockImport< + beefy::import::BeefyBlockImport< Block, FullBackend, FullClient, @@ -473,7 +467,7 @@ fn new_partial( >, grandpa::LinkHalf, ChainSelection>, babe::BabeLink, - beefy_gadget::BeefyVoterLinks, + beefy::BeefyVoterLinks, ), grandpa::SharedVoterState, sp_consensus_babe::SlotDuration, @@ -516,10 +510,11 @@ where let justification_import = grandpa_block_import.clone(); let (beefy_block_import, beefy_voter_links, beefy_rpc_links) = - beefy_gadget::beefy_block_import_and_links( + beefy::beefy_block_import_and_links( grandpa_block_import, backend.clone(), client.clone(), + config.prometheus_registry().cloned(), ); let babe_config = babe::configuration(&*client)?; @@ -621,6 +616,7 @@ pub struct NewFull { pub client: C, pub overseer_handle: Option, pub network: Arc::Hash>>, + pub sync_service: Arc>, pub rpc_handlers: RpcHandlers, pub backend: Arc, } @@ -634,6 +630,7 @@ impl NewFull { task_manager: self.task_manager, overseer_handle: self.overseer_handle, network: self.network, + sync_service: self.sync_service, rpc_handlers: self.rpc_handlers, backend: self.backend, } @@ -669,56 +666,6 @@ impl IsCollator { } } -/// Returns the active leaves the overseer should start with. -#[cfg(feature = "full-node")] -async fn active_leaves( - select_chain: &impl SelectChain, - client: &FullClient, -) -> Result, Error> -where - RuntimeApi: ConstructRuntimeApi> - + Send - + Sync - + 'static, - RuntimeApi::RuntimeApi: - RuntimeApiCollection>, - ExecutorDispatch: NativeExecutionDispatch + 'static, -{ - let best_block = select_chain.best_chain().await?; - - let mut leaves = select_chain - .leaves() - .await - .unwrap_or_default() - .into_iter() - .filter_map(|hash| { - let number = HeaderBackend::number(client, hash).ok()??; - - // Only consider leaves that are in maximum an uncle of the best block. - if number < best_block.number().saturating_sub(1) { - return None - } else if hash == best_block.hash() { - return None - }; - - let parent_hash = client.header(&BlockId::Hash(hash)).ok()??.parent_hash; - - Some(BlockInfo { hash, parent_hash, number }) - }) - .collect::>(); - - // Sort by block number and get the maximum number of leaves - leaves.sort_by_key(|b| b.number); - - leaves.push(BlockInfo { - hash: best_block.hash(), - parent_hash: *best_block.parent_hash(), - number: *best_block.number(), - }); - - Ok(leaves.into_iter().rev().take(MAX_ACTIVE_LEAVES).collect()) -} - pub const AVAILABILITY_CONFIG: AvailabilityConfig = AvailabilityConfig { col_data: parachains_db::REAL_COLUMNS.col_availability_data, col_meta: parachains_db::REAL_COLUMNS.col_availability_meta, @@ -758,6 +705,7 @@ where OverseerGenerator: OverseerGen, { use polkadot_node_network_protocol::request_response::IncomingRequest; + use sc_network_common::sync::warp::WarpSyncParams; let is_offchain_indexing_enabled = config.offchain_worker.indexing_enabled; let role = config.role.clone(); @@ -852,22 +800,21 @@ where .push(grandpa::grandpa_peers_set_config(grandpa_protocol_name.clone())); let beefy_gossip_proto_name = - beefy_gadget::gossip_protocol_name(&genesis_hash, config.chain_spec.fork_id()); + beefy::gossip_protocol_name(&genesis_hash, config.chain_spec.fork_id()); // `beefy_on_demand_justifications_handler` is given to `beefy-gadget` task to be run, // while `beefy_req_resp_cfg` is added to `config.network.request_response_protocols`. let (beefy_on_demand_justifications_handler, beefy_req_resp_cfg) = - beefy_gadget::communication::request_response::BeefyJustifsRequestHandler::new( + beefy::communication::request_response::BeefyJustifsRequestHandler::new( &genesis_hash, config.chain_spec.fork_id(), client.clone(), + prometheus_registry.clone(), ); if enable_beefy { config .network .extra_sets - .push(beefy_gadget::communication::beefy_peers_set_config( - beefy_gossip_proto_name.clone(), - )); + .push(beefy::communication::beefy_peers_set_config(beefy_gossip_proto_name.clone())); config.network.request_response_protocols.push(beefy_req_resp_cfg); } @@ -911,7 +858,7 @@ where grandpa_hard_forks, )); - let (network, system_rpc_tx, tx_handler_controller, network_starter) = + let (network, system_rpc_tx, tx_handler_controller, network_starter, sync_service) = service::build_network(service::BuildNetworkParams { config: &config, client: client.clone(), @@ -919,7 +866,7 @@ where spawn_handle: task_manager.spawn_handle(), import_queue, block_announce_validator_builder: None, - warp_sync: Some(warp_sync), + warp_sync_params: Some(WarpSyncParams::WithProvider(warp_sync)), })?; if config.offchain_worker.enabled { @@ -979,6 +926,7 @@ where client: client.clone(), keystore: keystore_container.sync_keystore(), network: network.clone(), + sync_service: sync_service.clone(), rpc_builder: Box::new(rpc_extensions_builder), transaction_pool: transaction_pool.clone(), task_manager: &mut task_manager, @@ -989,6 +937,12 @@ where if let Some(hwbench) = hwbench { sc_sysinfo::print_hwbench(&hwbench); + if !SUBSTRATE_REFERENCE_HARDWARE.check_hardware(&hwbench) && role.is_authority() { + log::warn!( + "⚠️ The hardware does not meet the minimal requirements for role 'Authority' find out more at:\n\ + https://wiki.polkadot.network/docs/maintain-guides-how-to-validate-polkadot#reference-hardware" + ); + } if let Some(ref mut telemetry) = telemetry { let telemetry_handle = telemetry.handle(); @@ -1004,15 +958,10 @@ where let overseer_client = client.clone(); let spawner = task_manager.spawn_handle(); - // Cannot use the `RelayChainSelection`, since that'd require a setup _and running_ overseer - // which we are about to setup. - let active_leaves = - futures::executor::block_on(active_leaves(select_chain.as_longest_chain(), &*client))?; let authority_discovery_service = if auth_or_collator || overseer_enable_anyways { use futures::StreamExt; - use sc_network::Event; - use sc_network_common::service::NetworkEventStream; + use sc_network::{Event, NetworkEventStream}; let authority_discovery_role = if role.is_authority() { sc_authority_discovery::Role::PublishAndDiscover(keystore_container.keystore()) @@ -1063,11 +1012,11 @@ where .generate::>( overseer_connector, OverseerGenArgs { - leaves: active_leaves, keystore, runtime_client: overseer_client.clone(), parachains_db, network_service: network.clone(), + sync_service: sync_service.clone(), authority_discovery_service, pov_req_receiver, chunk_req_receiver, @@ -1112,8 +1061,8 @@ where pin_mut!(forward); select! { - _ = forward => (), - _ = overseer_fut => (), + () = forward => (), + () = overseer_fut => (), complete => (), } }), @@ -1147,8 +1096,8 @@ where select_chain, block_import, env: proposer, - sync_oracle: network.clone(), - justification_sync_link: network.clone(), + sync_oracle: sync_service.clone(), + justification_sync_link: sync_service.clone(), create_inherent_data_providers: move |parent, ()| { let client_clone = client_clone.clone(); let overseer_handle = overseer_handle.clone(); @@ -1191,14 +1140,15 @@ where if enable_beefy { let justifications_protocol_name = beefy_on_demand_justifications_handler.protocol_name(); - let network_params = beefy_gadget::BeefyNetworkParams { + let network_params = beefy::BeefyNetworkParams { network: network.clone(), + sync: sync_service.clone(), gossip_protocol_name: beefy_gossip_proto_name, justifications_protocol_name, _phantom: core::marker::PhantomData::, }; let payload_provider = beefy_primitives::mmr::MmrRootProvider::new(client.clone()); - let beefy_params = beefy_gadget::BeefyParams { + let beefy_params = beefy::BeefyParams { client: client.clone(), backend: backend.clone(), payload_provider, @@ -1211,7 +1161,7 @@ where on_demand_justifications_handler: beefy_on_demand_justifications_handler, }; - let gadget = beefy_gadget::start_beefy_gadget::<_, _, _, _, _, _>(beefy_params); + let gadget = beefy::start_beefy_gadget::<_, _, _, _, _, _, _>(beefy_params); // Wococo's purpose is to be a testbed for BEEFY, so if it fails we'll // bring the node down with it to make sure it is noticed. @@ -1291,6 +1241,7 @@ where config, link: link_half, network: network.clone(), + sync: sync_service.clone(), voting_rule, prometheus_registry: prometheus_registry.clone(), shared_voter_state, @@ -1306,7 +1257,15 @@ where network_starter.start_network(); - Ok(NewFull { task_manager, client, overseer_handle, network, rpc_handlers, backend }) + Ok(NewFull { + task_manager, + client, + overseer_handle, + network, + sync_service, + rpc_handlers, + backend, + }) } #[cfg(feature = "full-node")] @@ -1351,32 +1310,36 @@ pub fn new_chain_ops( > { config.keystore = service::config::KeystoreConfig::InMemory; - let telemetry_worker_handle = None; - #[cfg(feature = "rococo-native")] if config.chain_spec.is_rococo() || config.chain_spec.is_wococo() || config.chain_spec.is_versi() { - return chain_ops!(config, jaeger_agent, telemetry_worker_handle; rococo_runtime, RococoExecutorDispatch, Rococo) + return chain_ops!(config, jaeger_agent, None; rococo_runtime, RococoExecutorDispatch, Rococo) } #[cfg(feature = "kusama-native")] if config.chain_spec.is_kusama() { - return chain_ops!(config, jaeger_agent, telemetry_worker_handle; kusama_runtime, KusamaExecutorDispatch, Kusama) + return chain_ops!(config, jaeger_agent, None; kusama_runtime, KusamaExecutorDispatch, Kusama) } #[cfg(feature = "westend-native")] if config.chain_spec.is_westend() { - return chain_ops!(config, jaeger_agent, telemetry_worker_handle; westend_runtime, WestendExecutorDispatch, Westend) + return chain_ops!(config, jaeger_agent, None; westend_runtime, WestendExecutorDispatch, Westend) } #[cfg(feature = "polkadot-native")] { - return chain_ops!(config, jaeger_agent, telemetry_worker_handle; polkadot_runtime, PolkadotExecutorDispatch, Polkadot) + return chain_ops!(config, jaeger_agent, None; polkadot_runtime, PolkadotExecutorDispatch, Polkadot) } + #[cfg(not(feature = "polkadot-native"))] - Err(Error::NoRuntime) + { + let _ = config; + let _ = jaeger_agent; + + Err(Error::NoRuntime) + } } /// Build a full node. @@ -1484,7 +1447,21 @@ pub fn build_full( } #[cfg(not(feature = "polkadot-native"))] - Err(Error::NoRuntime) + { + let _ = config; + let _ = is_collator; + let _ = grandpa_pause; + let _ = enable_beefy; + let _ = jaeger_agent; + let _ = telemetry_worker_handle; + let _ = overseer_enable_anyways; + let _ = overseer_gen; + let _ = overseer_message_channel_override; + let _ = malus_finality_delay; + let _ = hwbench; + + Err(Error::NoRuntime) + } } /// Reverts the node state down to at most the last finalized block. diff --git a/node/service/src/overseer.rs b/node/service/src/overseer.rs index 7dff86693827..39a57289a9f6 100644 --- a/node/service/src/overseer.rs +++ b/node/service/src/overseer.rs @@ -34,15 +34,15 @@ pub use polkadot_overseer::{ HeadSupportsParachains, }; use polkadot_overseer::{ - metrics::Metrics as OverseerMetrics, BlockInfo, InitializedOverseerBuilder, MetricsTrait, - Overseer, OverseerConnector, OverseerHandle, SpawnGlue, + metrics::Metrics as OverseerMetrics, InitializedOverseerBuilder, MetricsTrait, Overseer, + OverseerConnector, OverseerHandle, SpawnGlue, }; use polkadot_primitives::runtime_api::ParachainHost; use sc_authority_discovery::Service as AuthorityDiscoveryService; use sc_client_api::AuxStore; use sc_keystore::LocalKeystore; -use sc_network_common::service::NetworkStateInfo; +use sc_network::NetworkStateInfo; use sp_api::ProvideRuntimeApi; use sp_blockchain::HeaderBackend; use sp_consensus_babe::BabeApi; @@ -81,8 +81,6 @@ where RuntimeClient::Api: ParachainHost + BabeApi + AuthorityDiscoveryApi, Spawner: 'static + SpawnNamed + Clone + Unpin, { - /// Set of initial relay chain leaves to track. - pub leaves: Vec, /// The keystore to use for i.e. validator keys. pub keystore: Arc, /// Runtime client generic, providing the `ProvieRuntimeApi` trait besides others. @@ -91,6 +89,8 @@ where pub parachains_db: Arc, /// Underlying network service implementation. pub network_service: Arc>, + /// Underlying syncing service implementation. + pub sync_service: Arc>, /// Underlying authority discovery service. pub authority_discovery_service: AuthorityDiscoveryService, /// POV request receiver @@ -131,11 +131,11 @@ where /// with all default values. pub fn prepared_overseer_builder( OverseerGenArgs { - leaves, keystore, runtime_client, parachains_db, network_service, + sync_service, authority_discovery_service, pov_req_receiver, chunk_req_receiver, @@ -215,7 +215,7 @@ where .network_bridge_rx(NetworkBridgeRxSubsystem::new( network_service.clone(), authority_discovery_service.clone(), - Box::new(network_service.clone()), + Box::new(sync_service.clone()), network_bridge_metrics, peerset_protocol_names, )) @@ -231,6 +231,7 @@ where .availability_store(AvailabilityStoreSubsystem::new( parachains_db.clone(), availability_config, + Box::new(sync_service.clone()), Metrics::register(registry)?, )) .bitfield_distribution(BitfieldDistributionSubsystem::new(Metrics::register(registry)?)) @@ -287,7 +288,7 @@ where approval_voting_config, parachains_db.clone(), keystore.clone(), - Box::new(network_service.clone()), + Box::new(sync_service.clone()), Metrics::register(registry)?, )) .gossip_support(GossipSupportSubsystem::new( @@ -308,11 +309,6 @@ where Metrics::register(registry)?, )) .chain_selection(ChainSelectionSubsystem::new(chain_selection_config, parachains_db)) - .leaves(Vec::from_iter( - leaves - .into_iter() - .map(|BlockInfo { hash, parent_hash: _, number }| (hash, number)), - )) .activation_external_listeners(Default::default()) .span_per_active_leaf(Default::default()) .active_leaves(Default::default()) diff --git a/node/service/src/relay_chain_selection.rs b/node/service/src/relay_chain_selection.rs index 890e4c16ec8f..41bd08e611de 100644 --- a/node/service/src/relay_chain_selection.rs +++ b/node/service/src/relay_chain_selection.rs @@ -45,9 +45,7 @@ use polkadot_node_subsystem::messages::{ }; use polkadot_node_subsystem_util::metrics::{self, prometheus}; use polkadot_overseer::{AllMessages, Handle}; -use polkadot_primitives::v2::{ - Block as PolkadotBlock, BlockNumber, Hash, Header as PolkadotHeader, -}; +use polkadot_primitives::{Block as PolkadotBlock, BlockNumber, Hash, Header as PolkadotHeader}; use std::sync::Arc; /// The maximum amount of unfinalized blocks we are willing to allow due to approval checking @@ -56,7 +54,7 @@ use std::sync::Arc; /// This is a safety net that should be removed at some point in the future. // In sync with `MAX_HEADS_LOOK_BACK` in `approval-voting` // and `MAX_BATCH_SCRAPE_ANCESTORS` in `dispute-coordinator`. -const MAX_FINALITY_LAG: polkadot_primitives::v2::BlockNumber = PRIMITIVES_MAX_FINALITY_LAG; +const MAX_FINALITY_LAG: polkadot_primitives::BlockNumber = PRIMITIVES_MAX_FINALITY_LAG; const LOG_TARGET: &str = "parachain::chain-selection"; @@ -205,19 +203,12 @@ where target_hash: Hash, maybe_max_number: Option, ) -> Result { - let longest_chain_best = - self.longest_chain.finality_target(target_hash, maybe_max_number).await?; - if let IsDisputesAwareWithOverseer::Yes(ref selection) = self.selection { selection - .finality_target_with_longest_chain( - target_hash, - longest_chain_best, - maybe_max_number, - ) + .finality_target_with_longest_chain(target_hash, maybe_max_number) .await } else { - Ok(longest_chain_best) + self.longest_chain.finality_target(target_hash, maybe_max_number).await } } } @@ -366,11 +357,9 @@ where pub(crate) async fn finality_target_with_longest_chain( &self, target_hash: Hash, - best_leaf: Hash, maybe_max_number: Option, ) -> Result { let mut overseer = self.overseer.clone(); - gum::trace!(target: LOG_TARGET, ?best_leaf, "Longest chain"); let subchain_head = { let (tx, rx) = oneshot::channel(); @@ -416,7 +405,7 @@ where let subchain_header = self.block_header(subchain_head)?; if subchain_header.number <= max { - gum::trace!(target: LOG_TARGET, ?best_leaf, "Constrained sub-chain head",); + gum::trace!(target: LOG_TARGET, ?subchain_head, "Constrained sub-chain head",); subchain_head } else { let (ancestor_hash, _) = diff --git a/node/service/src/tests.rs b/node/service/src/tests.rs index 0997097ed996..1a2997fe6723 100644 --- a/node/service/src/tests.rs +++ b/node/service/src/tests.rs @@ -40,7 +40,7 @@ use polkadot_node_subsystem::messages::{ ApprovalVotingMessage, ChainSelectionMessage, DisputeCoordinatorMessage, HighestApprovedAncestorBlock, }; -use polkadot_primitives::v2::{Block, BlockNumber, Hash, Header}; +use polkadot_primitives::{Block, BlockNumber, Hash, Header}; use polkadot_node_subsystem_test_helpers::TestSubsystemSender; use polkadot_overseer::{SubsystemContext, SubsystemSender}; @@ -88,7 +88,7 @@ fn test_harness>( let target_hash = case_vars.target_block.clone(); let selection_process = async move { let best = select_relay_chain - .finality_target_with_longest_chain(target_hash, target_hash, None) + .finality_target_with_longest_chain(target_hash, None) .await .unwrap(); finality_target_tx.send(Some(best)).unwrap(); diff --git a/node/subsystem-test-helpers/Cargo.toml b/node/subsystem-test-helpers/Cargo.toml index 30b41a1a4dd3..f94bbed39c27 100644 --- a/node/subsystem-test-helpers/Cargo.toml +++ b/node/subsystem-test-helpers/Cargo.toml @@ -12,11 +12,11 @@ parking_lot = "0.12.0" polkadot-node-subsystem = { path = "../subsystem" } polkadot-node-subsystem-util = { path = "../subsystem-util" } polkadot-primitives = { path = "../../primitives" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } [dev-dependencies] polkadot-overseer = { path = "../overseer" } diff --git a/node/subsystem-test-helpers/src/lib.rs b/node/subsystem-test-helpers/src/lib.rs index dd207039091a..5a5a74d285f5 100644 --- a/node/subsystem-test-helpers/src/lib.rs +++ b/node/subsystem-test-helpers/src/lib.rs @@ -437,7 +437,7 @@ mod tests { use futures::executor::block_on; use polkadot_node_subsystem::messages::CollatorProtocolMessage; use polkadot_overseer::{dummy::dummy_overseer_builder, Handle, HeadSupportsParachains}; - use polkadot_primitives::v2::Hash; + use polkadot_primitives::Hash; use sp_core::traits::SpawnNamed; struct AlwaysSupportsParachains; @@ -457,7 +457,6 @@ mod tests { dummy_overseer_builder(spawner.clone(), AlwaysSupportsParachains, None) .unwrap() .replace_collator_protocol(|_| ForwardSubsystem(tx)) - .leaves(vec![]) .build() .unwrap(); diff --git a/node/subsystem-test-helpers/src/mock.rs b/node/subsystem-test-helpers/src/mock.rs index 17692dda7ea2..dffc65b75695 100644 --- a/node/subsystem-test-helpers/src/mock.rs +++ b/node/subsystem-test-helpers/src/mock.rs @@ -21,7 +21,7 @@ use sp_application_crypto::AppKey; use sp_keyring::Sr25519Keyring; use sp_keystore::{SyncCryptoStore, SyncCryptoStorePtr}; -use polkadot_primitives::v2::{AuthorityDiscoveryId, ValidatorId}; +use polkadot_primitives::{AuthorityDiscoveryId, ValidatorId}; /// Get mock keystore with `Ferdie` key. pub fn make_ferdie_keystore() -> SyncCryptoStorePtr { diff --git a/node/subsystem-types/Cargo.toml b/node/subsystem-types/Cargo.toml index 2f5c82be3757..2c10cee55e8a 100644 --- a/node/subsystem-types/Cargo.toml +++ b/node/subsystem-types/Cargo.toml @@ -13,12 +13,12 @@ polkadot-node-primitives = { path = "../primitives" } polkadot-node-network-protocol = { path = "../network/protocol" } polkadot-statement-table = { path = "../../statement-table" } polkadot-node-jaeger = { path = "../jaeger" } -orchestra = "0.0.2" -sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +orchestra = "0.2.0" +sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } smallvec = "1.8.0" -substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } thiserror = "1.0.31" async-trait = "0.1.57" diff --git a/node/subsystem-types/src/lib.rs b/node/subsystem-types/src/lib.rs index b5a8c67fc581..576507367095 100644 --- a/node/subsystem-types/src/lib.rs +++ b/node/subsystem-types/src/lib.rs @@ -24,7 +24,7 @@ use std::{fmt, sync::Arc}; -pub use polkadot_primitives::v2::{BlockNumber, Hash}; +pub use polkadot_primitives::{BlockNumber, Hash}; use smallvec::SmallVec; pub mod errors; diff --git a/node/subsystem-types/src/messages.rs b/node/subsystem-types/src/messages.rs index 94562ae6baef..e5b9db9e5e97 100644 --- a/node/subsystem-types/src/messages.rs +++ b/node/subsystem-types/src/messages.rs @@ -38,32 +38,25 @@ use polkadot_node_primitives::{ CollationSecondedSignal, DisputeMessage, DisputeStatus, ErasureChunk, PoV, SignedDisputeStatement, SignedFullStatement, ValidationResult, }; -use polkadot_primitives::v2::{ - AuthorityDiscoveryId, BackedCandidate, BlockNumber, CandidateEvent, CandidateHash, - CandidateIndex, CandidateReceipt, CollatorId, CommittedCandidateReceipt, CoreState, - DisputeState, GroupIndex, GroupRotationInfo, Hash, Header as BlockHeader, Id as ParaId, - InboundDownwardMessage, InboundHrmpMessage, MultiDisputeStatementSet, OccupiedCoreAssumption, - PersistedValidationData, PvfCheckStatement, SessionIndex, SessionInfo, - SignedAvailabilityBitfield, SignedAvailabilityBitfields, ValidationCode, ValidationCodeHash, - ValidatorId, ValidatorIndex, ValidatorSignature, +use polkadot_primitives::{ + vstaging::ExecutorParams, AuthorityDiscoveryId, BackedCandidate, BlockNumber, CandidateEvent, + CandidateHash, CandidateIndex, CandidateReceipt, CollatorId, CommittedCandidateReceipt, + CoreState, DisputeState, GroupIndex, GroupRotationInfo, Hash, Header as BlockHeader, + Id as ParaId, InboundDownwardMessage, InboundHrmpMessage, MultiDisputeStatementSet, + OccupiedCoreAssumption, PersistedValidationData, PvfCheckStatement, PvfExecTimeoutKind, + SessionIndex, SessionInfo, SignedAvailabilityBitfield, SignedAvailabilityBitfields, + ValidationCode, ValidationCodeHash, ValidatorId, ValidatorIndex, ValidatorSignature, }; use polkadot_statement_table::v2::Misbehavior; use std::{ collections::{BTreeMap, HashMap, HashSet}, sync::Arc, - time::Duration, }; /// Network events as transmitted to other subsystems, wrapped in their message types. pub mod network_bridge_event; pub use network_bridge_event::NetworkBridgeEvent; -/// Subsystem messages where each message is always bound to a relay parent. -pub trait BoundToRelayParent { - /// Returns the relay parent this message is bound to. - fn relay_parent(&self) -> Hash; -} - /// Messages received by the Candidate Backing subsystem. #[derive(Debug)] pub enum CandidateBackingMessage { @@ -74,20 +67,11 @@ pub enum CandidateBackingMessage { /// given relay-parent (ref. by hash). This candidate must be validated. Second(Hash, CandidateReceipt, PoV), /// Note a validator's statement about a particular candidate. Disagreements about validity must be escalated - /// to a broader check by Misbehavior Arbitration. Agreements are simply tallied until a quorum is reached. + /// to a broader check by the Disputes Subsystem, though that escalation is deferred until the approval voting + /// stage to guarantee availability. Agreements are simply tallied until a quorum is reached. Statement(Hash, SignedFullStatement), } -impl BoundToRelayParent for CandidateBackingMessage { - fn relay_parent(&self) -> Hash { - match self { - Self::GetBackedCandidates(hash, _, _) => *hash, - Self::Second(hash, _, _) => *hash, - Self::Statement(hash, _) => *hash, - } - } -} - /// Blanket error for validation failing for internal reasons. #[derive(Debug, Error)] #[error("Validation failed with {0:?}")] @@ -136,7 +120,7 @@ pub enum CandidateValidationMessage { CandidateReceipt, Arc, /// Execution timeout - Duration, + PvfExecTimeoutKind, oneshot::Sender>, ), /// Validate a candidate with provided, exhaustive parameters for validation. @@ -154,7 +138,7 @@ pub enum CandidateValidationMessage { CandidateReceipt, Arc, /// Execution timeout - Duration, + PvfExecTimeoutKind, oneshot::Sender>, ), /// Try to compile the given validation code and send back @@ -170,17 +154,6 @@ pub enum CandidateValidationMessage { ), } -impl CandidateValidationMessage { - /// If the current variant contains the relay parent hash, return it. - pub fn relay_parent(&self) -> Option { - match self { - Self::ValidateFromChainState(_, _, _, _) => None, - Self::ValidateFromExhaustive(_, _, _, _, _, _) => None, - Self::PreCheck(relay_parent, _, _) => Some(*relay_parent), - } - } -} - /// Messages received by the Collator Protocol subsystem. #[derive(Debug, derive_more::From)] pub enum CollatorProtocolMessage { @@ -218,12 +191,6 @@ impl Default for CollatorProtocolMessage { } } -impl BoundToRelayParent for CollatorProtocolMessage { - fn relay_parent(&self) -> Hash { - Default::default() - } -} - /// Messages received by the dispute coordinator subsystem. /// /// NOTE: Any response oneshots might get cancelled if the `DisputeCoordinator` was not yet @@ -397,23 +364,6 @@ pub enum NetworkBridgeTxMessage { }, } -impl NetworkBridgeTxMessage { - /// If the current variant contains the relay parent hash, return it. - pub fn relay_parent(&self) -> Option { - match self { - Self::ReportPeer(_, _) => None, - Self::DisconnectPeer(_, _) => None, - Self::SendValidationMessage(_, _) => None, - Self::SendCollationMessage(_, _) => None, - Self::SendValidationMessages(_) => None, - Self::SendCollationMessages(_) => None, - Self::ConnectToValidators { .. } => None, - Self::ConnectToResolvedValidators { .. } => None, - Self::SendRequests { .. } => None, - } - } -} - /// Availability Distribution Message. #[derive(Debug)] pub enum AvailabilityDistributionMessage { @@ -463,28 +413,6 @@ pub enum BitfieldDistributionMessage { NetworkBridgeUpdate(NetworkBridgeEvent), } -impl BitfieldDistributionMessage { - /// If the current variant contains the relay parent hash, return it. - pub fn relay_parent(&self) -> Option { - match self { - Self::DistributeBitfield(hash, _) => Some(*hash), - Self::NetworkBridgeUpdate(_) => None, - } - } -} - -/// Bitfield signing message. -/// -/// Currently non-instantiable. -#[derive(Debug)] -pub enum BitfieldSigningMessage {} - -impl BoundToRelayParent for BitfieldSigningMessage { - fn relay_parent(&self) -> Hash { - match *self {} - } -} - /// Availability store subsystem message. #[derive(Debug)] pub enum AvailabilityStoreMessage { @@ -538,13 +466,6 @@ pub enum AvailabilityStoreMessage { }, } -impl AvailabilityStoreMessage { - /// In fact, none of the `AvailabilityStore` messages assume a particular relay parent. - pub fn relay_parent(&self) -> Option { - None - } -} - /// A response channel for the result of a chain API request. pub type ChainApiResponseChannel = oneshot::Sender>; @@ -587,13 +508,6 @@ pub enum ChainApiMessage { }, } -impl ChainApiMessage { - /// If the current variant contains the relay parent hash, return it. - pub fn relay_parent(&self) -> Option { - None - } -} - /// Chain selection subsystem messages #[derive(Debug)] pub enum ChainSelectionMessage { @@ -604,20 +518,9 @@ pub enum ChainSelectionMessage { /// Request the best leaf containing the given block in its ancestry. Return `None` if /// there is no such leaf. BestLeafContaining(Hash, oneshot::Sender>), -} - -impl ChainSelectionMessage { - /// If the current variant contains the relay parent hash, return it. - pub fn relay_parent(&self) -> Option { - // None of the messages, even the ones containing specific - // block hashes, can be considered to have those blocks as - // a relay parent. - match *self { - ChainSelectionMessage::Approved(_) => None, - ChainSelectionMessage::Leaves(_) => None, - ChainSelectionMessage::BestLeafContaining(..) => None, - } - } + /// The passed blocks must be marked as reverted, and their children must be marked + /// as non-viable. + RevertBlocks(Vec<(BlockNumber, Hash)>), } /// A sender for the result of a runtime API request. @@ -654,7 +557,7 @@ pub enum RuntimeApiRequest { /// Sends back `true` if the validation outputs pass all acceptance criteria checks. CheckValidationOutputs( ParaId, - polkadot_primitives::v2::CandidateCommitments, + polkadot_primitives::CandidateCommitments, RuntimeApiSender, ), /// Get the session index that a child of the block will have. @@ -671,6 +574,8 @@ pub enum RuntimeApiRequest { /// Get all events concerning candidates (backing, inclusion, time-out) in the parent of /// the block in whose state this request is executed. CandidateEvents(RuntimeApiSender>), + /// Get the execution environment parameter set by session index + SessionExecutorParams(SessionIndex, RuntimeApiSender>), /// Get the session info for the given session, if stored. SessionInfo(SessionIndex, RuntimeApiSender>), /// Get all the pending inbound messages in the downward message queue for a para. @@ -684,7 +589,7 @@ pub enum RuntimeApiRequest { /// Get information about the BABE epoch the block was included in. CurrentBabeEpoch(RuntimeApiSender), /// Get all disputes in relation to a relay parent. - FetchOnChainVotes(RuntimeApiSender>), + FetchOnChainVotes(RuntimeApiSender>), /// Submits a PVF pre-checking statement into the transaction pool. SubmitPvfCheckStatement(PvfCheckStatement, ValidatorSignature, RuntimeApiSender<()>), /// Returns code hashes of PVFs that require pre-checking by validators in the active set. @@ -705,6 +610,9 @@ impl RuntimeApiRequest { /// `Disputes` pub const DISPUTES_RUNTIME_REQUIREMENT: u32 = 3; + + /// `ExecutorParams` + pub const EXECUTOR_PARAMS_RUNTIME_REQUIREMENT: u32 = 4; } /// A message to the Runtime API subsystem. @@ -714,15 +622,6 @@ pub enum RuntimeApiMessage { Request(Hash, RuntimeApiRequest), } -impl RuntimeApiMessage { - /// If the current variant contains the relay parent hash, return it. - pub fn relay_parent(&self) -> Option { - match self { - Self::Request(hash, _) => Some(*hash), - } - } -} - /// Statement distribution message. #[derive(Debug, derive_more::From)] pub enum StatementDistributionMessage { @@ -774,15 +673,6 @@ pub enum ProvisionerMessage { ProvisionableData(Hash, ProvisionableData), } -impl BoundToRelayParent for ProvisionerMessage { - fn relay_parent(&self) -> Hash { - match self { - Self::RequestInherentData(hash, _) => *hash, - Self::ProvisionableData(hash, _) => *hash, - } - } -} - /// Message to the Collation Generation subsystem. #[derive(Debug)] pub enum CollationGenerationMessage { @@ -790,13 +680,6 @@ pub enum CollationGenerationMessage { Initialize(CollationGenerationConfig), } -impl CollationGenerationMessage { - /// If the current variant contains the relay parent hash, return it. - pub fn relay_parent(&self) -> Option { - None - } -} - /// The result type of [`ApprovalVotingMessage::CheckAndImportAssignment`] request. #[derive(Debug, Clone, PartialEq, Eq)] pub enum AssignmentCheckResult { @@ -950,9 +833,3 @@ pub enum GossipSupportMessage { #[from] NetworkBridgeUpdate(NetworkBridgeEvent), } - -/// PVF checker message. -/// -/// Currently non-instantiable. -#[derive(Debug)] -pub enum PvfCheckerMessage {} diff --git a/node/subsystem-types/src/messages/network_bridge_event.rs b/node/subsystem-types/src/messages/network_bridge_event.rs index 06654153357a..cc9f21b5582e 100644 --- a/node/subsystem-types/src/messages/network_bridge_event.rs +++ b/node/subsystem-types/src/messages/network_bridge_event.rs @@ -22,7 +22,7 @@ use polkadot_node_network_protocol::{ grid_topology::SessionGridTopology, peer_set::ProtocolVersion, ObservedRole, OurView, View, WrongVariant, }; -use polkadot_primitives::v2::{AuthorityDiscoveryId, SessionIndex, ValidatorIndex}; +use polkadot_primitives::{AuthorityDiscoveryId, SessionIndex, ValidatorIndex}; /// A struct indicating new gossip topology. #[derive(Debug, Clone, PartialEq)] diff --git a/node/subsystem-types/src/runtime_client.rs b/node/subsystem-types/src/runtime_client.rs index 259c94fd4e51..81b33c62cc0a 100644 --- a/node/subsystem-types/src/runtime_client.rs +++ b/node/subsystem-types/src/runtime_client.rs @@ -16,14 +16,12 @@ use async_trait::async_trait; use polkadot_primitives::{ - runtime_api::ParachainHost, - v2::{ - Block, BlockId, BlockNumber, CandidateCommitments, CandidateEvent, CandidateHash, - CommittedCandidateReceipt, CoreState, DisputeState, GroupRotationInfo, Hash, Id, - InboundDownwardMessage, InboundHrmpMessage, OccupiedCoreAssumption, - PersistedValidationData, PvfCheckStatement, ScrapedOnChainVotes, SessionIndex, SessionInfo, - ValidationCode, ValidationCodeHash, ValidatorId, ValidatorIndex, ValidatorSignature, - }, + runtime_api::ParachainHost, vstaging::ExecutorParams, Block, BlockNumber, CandidateCommitments, + CandidateEvent, CandidateHash, CommittedCandidateReceipt, CoreState, DisputeState, + GroupRotationInfo, Hash, Id, InboundDownwardMessage, InboundHrmpMessage, + OccupiedCoreAssumption, PersistedValidationData, PvfCheckStatement, ScrapedOnChainVotes, + SessionIndex, SessionInfo, ValidationCode, ValidationCodeHash, ValidatorId, ValidatorIndex, + ValidatorSignature, }; use sp_api::{ApiError, ApiExt, ProvideRuntimeApi}; use sp_authority_discovery::AuthorityDiscoveryApi; @@ -150,15 +148,6 @@ pub trait RuntimeApiSubsystemClient { index: SessionIndex, ) -> Result, ApiError>; - /// Get the session info for the given session, if stored. - /// - /// NOTE: This function is only available since parachain host version 2. - async fn session_info_before_version_2( - &self, - at: Hash, - index: SessionIndex, - ) -> Result, ApiError>; - /// Submits a PVF pre-checking statement into the transaction pool. /// /// NOTE: This function is only available since parachain host version 2. @@ -184,6 +173,8 @@ pub trait RuntimeApiSubsystemClient { assumption: OccupiedCoreAssumption, ) -> Result, ApiError>; + /***** Added in v3 *****/ + /// Returns all onchain disputes. /// This is a staging method! Do not use on production runtimes! async fn disputes( @@ -191,6 +182,13 @@ pub trait RuntimeApiSubsystemClient { at: Hash, ) -> Result)>, ApiError>; + /// Get the execution environment parameter set by parent hash, if stored + async fn session_executor_params( + &self, + at: Hash, + session_index: SessionIndex, + ) -> Result, ApiError>; + // === BABE API === /// Returns information regarding the current epoch. @@ -212,21 +210,21 @@ where T::Api: ParachainHost + BabeApi + AuthorityDiscoveryApi, { async fn validators(&self, at: Hash) -> Result, ApiError> { - self.runtime_api().validators(&BlockId::Hash(at)) + self.runtime_api().validators(at) } async fn validator_groups( &self, at: Hash, ) -> Result<(Vec>, GroupRotationInfo), ApiError> { - self.runtime_api().validator_groups(&BlockId::Hash(at)) + self.runtime_api().validator_groups(at) } async fn availability_cores( &self, at: Hash, ) -> Result>, ApiError> { - self.runtime_api().availability_cores(&BlockId::Hash(at)) + self.runtime_api().availability_cores(at) } async fn persisted_validation_data( @@ -235,8 +233,7 @@ where para_id: Id, assumption: OccupiedCoreAssumption, ) -> Result>, ApiError> { - self.runtime_api() - .persisted_validation_data(&BlockId::Hash(at), para_id, assumption) + self.runtime_api().persisted_validation_data(at, para_id, assumption) } async fn assumed_validation_data( @@ -247,7 +244,7 @@ where ) -> Result, ValidationCodeHash)>, ApiError> { self.runtime_api().assumed_validation_data( - &BlockId::Hash(at), + at, para_id, expected_persisted_validation_data_hash, ) @@ -259,12 +256,11 @@ where para_id: Id, outputs: CandidateCommitments, ) -> Result { - self.runtime_api() - .check_validation_outputs(&BlockId::Hash(at), para_id, outputs) + self.runtime_api().check_validation_outputs(at, para_id, outputs) } async fn session_index_for_child(&self, at: Hash) -> Result { - self.runtime_api().session_index_for_child(&BlockId::Hash(at)) + self.runtime_api().session_index_for_child(at) } async fn validation_code( @@ -273,7 +269,7 @@ where para_id: Id, assumption: OccupiedCoreAssumption, ) -> Result, ApiError> { - self.runtime_api().validation_code(&BlockId::Hash(at), para_id, assumption) + self.runtime_api().validation_code(at, para_id, assumption) } async fn candidate_pending_availability( @@ -281,11 +277,11 @@ where at: Hash, para_id: Id, ) -> Result>, ApiError> { - self.runtime_api().candidate_pending_availability(&BlockId::Hash(at), para_id) + self.runtime_api().candidate_pending_availability(at, para_id) } async fn candidate_events(&self, at: Hash) -> Result>, ApiError> { - self.runtime_api().candidate_events(&BlockId::Hash(at)) + self.runtime_api().candidate_events(at) } async fn dmq_contents( @@ -293,7 +289,7 @@ where at: Hash, recipient: Id, ) -> Result>, ApiError> { - self.runtime_api().dmq_contents(&BlockId::Hash(at), recipient) + self.runtime_api().dmq_contents(at, recipient) } async fn inbound_hrmp_channels_contents( @@ -301,7 +297,7 @@ where at: Hash, recipient: Id, ) -> Result>>, ApiError> { - self.runtime_api().inbound_hrmp_channels_contents(&BlockId::Hash(at), recipient) + self.runtime_api().inbound_hrmp_channels_contents(at, recipient) } async fn validation_code_by_hash( @@ -309,14 +305,22 @@ where at: Hash, hash: ValidationCodeHash, ) -> Result, ApiError> { - self.runtime_api().validation_code_by_hash(&BlockId::Hash(at), hash) + self.runtime_api().validation_code_by_hash(at, hash) } async fn on_chain_votes( &self, at: Hash, ) -> Result>, ApiError> { - self.runtime_api().on_chain_votes(&BlockId::Hash(at)) + self.runtime_api().on_chain_votes(at) + } + + async fn session_executor_params( + &self, + at: Hash, + session_index: SessionIndex, + ) -> Result, ApiError> { + self.runtime_api().session_executor_params(at, session_index) } async fn session_info( @@ -324,7 +328,7 @@ where at: Hash, index: SessionIndex, ) -> Result, ApiError> { - self.runtime_api().session_info(&BlockId::Hash(at), index) + self.runtime_api().session_info(at, index) } async fn submit_pvf_check_statement( @@ -333,12 +337,11 @@ where stmt: PvfCheckStatement, signature: ValidatorSignature, ) -> Result<(), ApiError> { - self.runtime_api() - .submit_pvf_check_statement(&BlockId::Hash(at), stmt, signature) + self.runtime_api().submit_pvf_check_statement(at, stmt, signature) } async fn pvfs_require_precheck(&self, at: Hash) -> Result, ApiError> { - self.runtime_api().pvfs_require_precheck(&BlockId::Hash(at)) + self.runtime_api().pvfs_require_precheck(at) } async fn validation_code_hash( @@ -347,38 +350,28 @@ where para_id: Id, assumption: OccupiedCoreAssumption, ) -> Result, ApiError> { - self.runtime_api().validation_code_hash(&BlockId::Hash(at), para_id, assumption) + self.runtime_api().validation_code_hash(at, para_id, assumption) } async fn current_epoch(&self, at: Hash) -> Result { - self.runtime_api().current_epoch(&BlockId::Hash(at)) + self.runtime_api().current_epoch(at) } async fn authorities( &self, at: Hash, ) -> std::result::Result, ApiError> { - self.runtime_api().authorities(&BlockId::Hash(at)) + self.runtime_api().authorities(at) } async fn api_version_parachain_host(&self, at: Hash) -> Result, ApiError> { - self.runtime_api().api_version::>(&BlockId::Hash(at)) - } - - #[warn(deprecated)] - async fn session_info_before_version_2( - &self, - at: Hash, - index: SessionIndex, - ) -> Result, ApiError> { - #[allow(deprecated)] - self.runtime_api().session_info_before_version_2(&BlockId::Hash(at), index) + self.runtime_api().api_version::>(at) } async fn disputes( &self, at: Hash, ) -> Result)>, ApiError> { - self.runtime_api().disputes(&BlockId::Hash(at)) + self.runtime_api().disputes(at) } } diff --git a/node/subsystem-util/Cargo.toml b/node/subsystem-util/Cargo.toml index 6460ea6c7659..24c20714d740 100644 --- a/node/subsystem-util/Cargo.toml +++ b/node/subsystem-util/Cargo.toml @@ -8,8 +8,9 @@ edition.workspace = true [dependencies] async-trait = "0.1.57" futures = "0.3.21" +futures-channel = "0.3.23" itertools = "0.10" -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["derive"] } parking_lot = "0.11.2" pin-project = "1.0.9" rand = "0.8.5" @@ -17,7 +18,7 @@ thiserror = "1.0.31" fatality = "0.0.6" gum = { package = "tracing-gum", path = "../gum" } derive_more = "0.99.17" -lru = "0.8.0" +lru = "0.9.0" polkadot-node-subsystem = {path = "../subsystem" } polkadot-node-jaeger = { path = "../jaeger" } @@ -26,14 +27,14 @@ polkadot-node-network-protocol = { path = "../network/protocol" } polkadot-primitives = { path = "../../primitives" } polkadot-node-primitives = { path = "../primitives" } polkadot-overseer = { path = "../overseer" } -metered = { package = "prioritized-metered-channel", version = "0.2.0" } +metered = { package = "prioritized-metered-channel", version = "0.4.0" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } kvdb = "0.13.0" -parity-db = { version = "0.4.2"} +parity-db = { version = "0.4.4"} [dev-dependencies] assert_matches = "1.4.0" diff --git a/node/subsystem-util/src/determine_new_blocks.rs b/node/subsystem-util/src/determine_new_blocks.rs index aad1625798c2..5a032c38aa1e 100644 --- a/node/subsystem-util/src/determine_new_blocks.rs +++ b/node/subsystem-util/src/determine_new_blocks.rs @@ -18,7 +18,7 @@ use futures::{channel::oneshot, prelude::*}; use polkadot_node_subsystem::{messages::ChainApiMessage, SubsystemSender}; -use polkadot_primitives::v2::{BlockNumber, Hash, Header}; +use polkadot_primitives::{BlockNumber, Hash, Header}; /// Given a new chain-head hash, this determines the hashes of all new blocks we should track /// metadata for, given this head. diff --git a/node/subsystem-util/src/lib.rs b/node/subsystem-util/src/lib.rs index 7bfada5757a1..3aafc14a7878 100644 --- a/node/subsystem-util/src/lib.rs +++ b/node/subsystem-util/src/lib.rs @@ -29,6 +29,7 @@ use polkadot_node_subsystem::{ messages::{RuntimeApiMessage, RuntimeApiRequest, RuntimeApiSender}, overseer, SubsystemSender, }; +use polkadot_primitives::vstaging::ExecutorParams; pub use overseer::{ gen::{OrchestraError as OverseerError, Timeout}, @@ -40,7 +41,7 @@ pub use polkadot_node_metrics::{metrics, Metronome}; use futures::channel::{mpsc, oneshot}; use parity_scale_codec::Encode; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ AuthorityDiscoveryId, CandidateEvent, CommittedCandidateReceipt, CoreState, EncodeAs, GroupIndex, GroupRotationInfo, Hash, Id as ParaId, OccupiedCoreAssumption, PersistedValidationData, ScrapedOnChainVotes, SessionIndex, SessionInfo, Signed, @@ -72,6 +73,12 @@ pub mod runtime; /// Database trait for subsystem. pub mod database; +/// Nested message sending +/// +/// Useful for having mostly synchronous code, with submodules spawning short lived asynchronous +/// tasks, sending messages back. +pub mod nesting_sender; + mod determine_new_blocks; #[cfg(test)] @@ -109,6 +116,9 @@ pub enum Error { /// Already forwarding errors to another sender #[error("AlreadyForwarding")] AlreadyForwarding, + /// Data that are supposed to be there a not there + #[error("Data are not available")] + DataNotAvailable, } impl From for Error { @@ -203,6 +213,55 @@ specialize_requests! { fn request_validation_code_hash(para_id: ParaId, assumption: OccupiedCoreAssumption) -> Option; ValidationCodeHash; fn request_on_chain_votes() -> Option; FetchOnChainVotes; + fn request_session_executor_params(session_index: SessionIndex) -> Option; SessionExecutorParams; +} + +/// Requests executor parameters from the runtime effective at given relay-parent. First obtains +/// session index at the relay-parent, relying on the fact that it should be cached by the runtime +/// API caching layer even if the block itself has already been pruned. Then requests executor +/// parameters by session index. +/// Returns an error if failed to communicate to the runtime, or the parameters are not in the +/// storage, which should never happen. +/// Returns default execution parameters if the runtime doesn't yet support `SessionExecutorParams` +/// API call. +/// Otherwise, returns execution parameters returned by the runtime. +pub async fn executor_params_at_relay_parent( + relay_parent: Hash, + sender: &mut impl overseer::SubsystemSender, +) -> Result { + match request_session_index_for_child(relay_parent, sender).await.await { + Err(err) => { + // Failed to communicate with the runtime + Err(Error::Oneshot(err)) + }, + Ok(Err(err)) => { + // Runtime has failed to obtain a session index at the relay-parent. + Err(Error::RuntimeApi(err)) + }, + Ok(Ok(session_index)) => { + match request_session_executor_params(relay_parent, session_index, sender).await.await { + Err(err) => { + // Failed to communicate with the runtime + Err(Error::Oneshot(err)) + }, + Ok(Err(RuntimeApiError::NotSupported { .. })) => { + // Runtime doesn't yet support the api requested, should execute anyway + // with default set of parameters + Ok(ExecutorParams::default()) + }, + Ok(Err(err)) => { + // Runtime failed to execute the request + Err(Error::RuntimeApi(err)) + }, + Ok(Ok(None)) => { + // Storage doesn't contain a parameter set for the given session; should + // never happen + Err(Error::DataNotAvailable) + }, + Ok(Ok(Some(executor_params))) => Ok(executor_params), + } + }, + } } /// From the given set of validators, find the first key we can sign with, if any. diff --git a/node/subsystem-util/src/nesting_sender.rs b/node/subsystem-util/src/nesting_sender.rs new file mode 100644 index 000000000000..75f8da9a0cd2 --- /dev/null +++ b/node/subsystem-util/src/nesting_sender.rs @@ -0,0 +1,207 @@ +// Copyright 2022-2023 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +//! ## Background +//! +//! Writing concurrent and even multithreaded by default is inconvenient and slow: No references +//! hence lots of needless cloning and data duplication, locks, mutexes, ... We should reach +//! for concurrency and parallelism when there is an actual need, not just because we can and it is +//! reasonably safe in Rust. +//! +//! I very much agree with many points in this blog post for example: +//! +//! +//! +//! Another very good post by Pierre (Tomaka): +//! +//! +//! +//! ## Architecture +//! +//! This module helps with this in part. It does not break the multithreaded by default approach, +//! but it breaks the `spawn everything` approach. So once you `spawn` you will still be +//! multithreaded by default, despite that for most tasks we spawn (which just wait for network or some +//! message to arrive), that is very much pointless and needless overhead. You will just spawn less in +//! the first place. +//! +//! By default your code is single threaded, except when actually needed: +//! - need to wait for long running synchronous IO (a threaded runtime is actually useful here) +//! - need to wait for some async event (message to arrive) +//! - need to do some hefty CPU bound processing (a thread is required here as well) +//! +//! and it is not acceptable to block the main task for waiting for the result, because we actually +//! really have other things to do or at least need to stay responsive just in case. +//! +//! With the types and traits in this module you can achieve exactly that: You write modules which +//! just execute logic and can call into the functions of other modules - yes we are calling normal +//! functions. For the case a module you are calling into requires an occasional background task, +//! you provide it with a `NestingSender` that it can pass to any spawned tasks. +//! +//! This way you don't have to spawn a task for each module just for it to be able to handle +//! asynchronous events. The module relies on the using/enclosing code/module to forward it any +//! asynchronous messages in a structured way. +//! +//! What makes this architecture nice is the separation of concerns - at the top you only have to +//! provide a sender and dispatch received messages to the root module - it is completely +//! irrelevant how complex that module is, it might consist of child modules also having the need +//! to spawn and receive messages, which in turn do the same, still the root logic stays unchanged. +//! Everything is isolated to the level where it belongs, while we still keep a single task scope +//! in all non blocking/not CPU intensive parts, which allows us to share data via references for +//! example. +//! +//! Because the wrapping is optional and transparent to the lower modules, each module can also be +//! used at the top directly without any wrapping, e.g. for standalone use or for testing purposes. +//! +//! Checkout the documentation of [`NestingSender`][nesting_sender::NestingSender] below for a basic usage example. For a real +//! world usage I would like to point you to the dispute-distribution subsystem which makes use of +//! this architecture. +//! +//! ## Limitations +//! +//! Nothing is ever for free of course: Each level adds an indirect function call to message +//! sending. which should be cheap enough for most applications, but something to keep in mind. In +//! particular we avoided the use of of async traits, which would have required memory allocations +//! on each send. Also cloning of [`NestingSender`][nesting_sender::NestingSender] is more +//! expensive than cloning a plain mpsc::Sender, the overhead should be negligible though. +//! +//! Further limitations: Because everything is routed to the same channel, it is not possible with +//! this approach to put back pressure on only a single source (as all are the same). If a module +//! has a task that requires this, it indeed has to spawn a long running task which can do the +//! back-pressure on that message source or we make it its own subsystem. This is just one of the +//! situations that justifies the complexity of asynchronism. + +use std::{convert::identity, sync::Arc}; + +use futures::{channel::mpsc, SinkExt}; + +/// A message sender that supports sending nested messages. +/// +/// This sender wraps an `mpsc::Sender` and a conversion function for converting given messages of +/// type `Mnested` to the message type actually supported by the mpsc (`M`). +/// +/// Example: +/// +/// ```rust +/// # use polkadot_node_subsystem_util::nesting_sender::NestingSender; +/// +/// enum RootMessage { +/// Child1Message(ChildMessage), +/// Child2Message(OtherChildMessage), +/// SomeOwnMessage, +/// } +/// +/// enum ChildMessage { +/// TaskFinished(u32), +/// } +/// +/// enum OtherChildMessage { +/// QueryResult(bool), +/// } +/// +/// // We would then pass in a `NestingSender` to our child module of the following type: +/// type ChildSender = NestingSender; +/// +/// // Types in the child module can (and should) be generic over the root type: +/// struct ChildState { +/// tx: NestingSender, +/// } +/// +/// +/// // Create the root message sender: +/// +/// let (root_sender, receiver) = NestingSender::new_root(1); +/// // Get a sender for the child module based on that root sender: +/// let child_sender = NestingSender::new(root_sender.clone(), RootMessage::Child1Message); +/// // pass `child_sender` to child module ... +/// ``` +/// +/// `ChildMessage` could itself have a constructor with messages of a child of its own and can use +/// `NestingSender::new` with its own sender and a conversion function to provide a further nested +/// sender, suitable for the child module. +pub struct NestingSender { + sender: mpsc::Sender, + conversion: Arc M + 'static + Send + Sync>, +} + +impl NestingSender +where + M: 'static, +{ + /// Create a new "root" sender. + /// + /// This is a sender that directly passes messages to the internal mpsc. + /// + /// Params: The channel size of the created mpsc. + /// Returns: The newly constructed `NestingSender` and the corresponding mpsc receiver. + pub fn new_root(channel_size: usize) -> (Self, mpsc::Receiver) { + let (sender, receiver) = mpsc::channel(channel_size); + let s = Self { sender, conversion: Arc::new(identity) }; + (s, receiver) + } +} + +impl NestingSender +where + M: 'static, + Mnested: 'static, +{ + /// Create a new `NestingSender` which wraps a given "parent" sender. + /// + /// By passing in a necessary conversion from `Mnested` to `Mparent` (the `Mnested` of the + /// parent sender), we can construct a derived `NestingSender` from a + /// `NestingSender`. + /// + /// Resulting sender does the following conversion: + /// + /// ```text + /// Mnested -> Mparent -> M + /// Inputs: + /// F(Mparent) -> M (via parent) + /// F(Mnested) -> Mparent (via child_conversion) + /// Result: F(Mnested) -> M + /// ``` + pub fn new( + parent: NestingSender, + child_conversion: fn(Mnested) -> Mparent, + ) -> Self + where + Mparent: 'static, + { + let NestingSender { sender, conversion } = parent; + Self { sender, conversion: Arc::new(move |x| conversion(child_conversion(x))) } + } + + /// Send a message via the underlying mpsc. + /// + /// Necessary conversion is accomplished. + pub async fn send_message(&mut self, m: Mnested) -> Result<(), mpsc::SendError> { + // Flushing on an mpsc means to wait for the receiver to pick up the data - we don't want + // to wait for that. + self.sender.feed((self.conversion)(m)).await + } +} + +// Helper traits and implementations: + +impl Clone for NestingSender +where + M: 'static, + Mnested: 'static, +{ + fn clone(&self) -> Self { + Self { sender: self.sender.clone(), conversion: self.conversion.clone() } + } +} diff --git a/node/subsystem-util/src/rolling_session_window.rs b/node/subsystem-util/src/rolling_session_window.rs index 4ebfad405b5b..500ce755692b 100644 --- a/node/subsystem-util/src/rolling_session_window.rs +++ b/node/subsystem-util/src/rolling_session_window.rs @@ -24,7 +24,7 @@ use kvdb::{DBKey, DBOp}; use parity_scale_codec::{Decode, Encode}; pub use polkadot_node_primitives::{new_session_window_size, SessionWindowSize}; -use polkadot_primitives::v2::{BlockNumber, Hash, SessionIndex, SessionInfo}; +use polkadot_primitives::{BlockNumber, Hash, SessionIndex, SessionInfo}; use std::sync::Arc; use futures::channel::oneshot; @@ -594,7 +594,7 @@ mod tests { SubsystemContext, }; use polkadot_node_subsystem_test_helpers::make_subsystem_context; - use polkadot_primitives::v2::Header; + use polkadot_primitives::Header; use sp_core::testing::TaskExecutor; const SESSION_DATA_COL: u32 = 0; diff --git a/node/subsystem-util/src/runtime/error.rs b/node/subsystem-util/src/runtime/error.rs index 67e69c91c1bd..90a988d786ea 100644 --- a/node/subsystem-util/src/runtime/error.rs +++ b/node/subsystem-util/src/runtime/error.rs @@ -20,7 +20,7 @@ use futures::channel::oneshot; use polkadot_node_subsystem::errors::RuntimeApiError; -use polkadot_primitives::v2::SessionIndex; +use polkadot_primitives::SessionIndex; #[allow(missing_docs)] #[fatality::fatality(splitable)] diff --git a/node/subsystem-util/src/runtime/mod.rs b/node/subsystem-util/src/runtime/mod.rs index 5b8baad0f94f..0d3132ec1fda 100644 --- a/node/subsystem-util/src/runtime/mod.rs +++ b/node/subsystem-util/src/runtime/mod.rs @@ -26,7 +26,7 @@ use sp_core::crypto::ByteArray; use sp_keystore::{CryptoStore, SyncCryptoStorePtr}; use polkadot_node_subsystem::{messages::RuntimeApiMessage, overseer, SubsystemSender}; -use polkadot_primitives::v2::{ +use polkadot_primitives::{ CandidateEvent, CoreState, EncodeAs, GroupIndex, GroupRotationInfo, Hash, IndexedVec, OccupiedCore, ScrapedOnChainVotes, SessionIndex, SessionInfo, Signed, SigningContext, UncheckedSigned, ValidationCode, ValidationCodeHash, ValidatorId, ValidatorIndex, diff --git a/node/subsystem/src/lib.rs b/node/subsystem/src/lib.rs index ce5fef2c8b51..6d534f5fd5bd 100644 --- a/node/subsystem/src/lib.rs +++ b/node/subsystem/src/lib.rs @@ -34,6 +34,9 @@ pub use polkadot_node_subsystem_types::{ /// Re-export of all messages type, including the wrapper type. pub mod messages { pub use super::overseer::AllMessages; + // generated, empty message types + pub use super::overseer::messages::*; + // deliberately defined messages pub use polkadot_node_subsystem_types::messages::*; } diff --git a/node/test/client/Cargo.toml b/node/test/client/Cargo.toml index ecafc4ab39f3..115cf9fba22f 100644 --- a/node/test/client/Cargo.toml +++ b/node/test/client/Cargo.toml @@ -5,7 +5,7 @@ authors.workspace = true edition.workspace = true [dependencies] -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["derive"] } # Polkadot dependencies polkadot-test-runtime = { path = "../../../runtime/test-runtime" } @@ -14,20 +14,23 @@ polkadot-primitives = { path = "../../../primitives" } polkadot-node-subsystem = { path = "../../subsystem" } # Substrate dependencies -substrate-test-client = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-inherents = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +substrate-test-client = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-inherents = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } [dev-dependencies] -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } futures = "0.3.21" + +[features] +runtime-benchmarks=["polkadot-test-runtime/runtime-benchmarks"] diff --git a/node/test/client/src/block_builder.rs b/node/test/client/src/block_builder.rs index 1ee6d1e87dc5..428da8c1999d 100644 --- a/node/test/client/src/block_builder.rs +++ b/node/test/client/src/block_builder.rs @@ -16,7 +16,7 @@ use crate::{Client, FullBackend}; use parity_scale_codec::{Decode, Encode}; -use polkadot_primitives::v2::{Block, InherentData as ParachainsInherentData}; +use polkadot_primitives::{Block, InherentData as ParachainsInherentData}; use polkadot_test_runtime::{GetLastTimestamp, UncheckedExtrinsic}; use sc_block_builder::{BlockBuilder, BlockBuilderProvider}; use sp_api::ProvideRuntimeApi; @@ -24,7 +24,7 @@ use sp_consensus_babe::{ digests::{PreDigest, SecondaryPlainPreDigest}, BABE_ENGINE_ID, }; -use sp_runtime::{generic::BlockId, Digest, DigestItem}; +use sp_runtime::{traits::Block as BlockT, Digest, DigestItem}; use sp_state_machine::BasicExternalities; /// An extension for the test client to initialize a Polkadot specific block builder. @@ -42,22 +42,22 @@ pub trait InitPolkadotBlockBuilder { /// which should be the parent block of the block that is being build. fn init_polkadot_block_builder_at( &self, - at: &BlockId, + hash: ::Hash, ) -> sc_block_builder::BlockBuilder; } impl InitPolkadotBlockBuilder for Client { fn init_polkadot_block_builder(&self) -> BlockBuilder { let chain_info = self.chain_info(); - self.init_polkadot_block_builder_at(&BlockId::Hash(chain_info.best_hash)) + self.init_polkadot_block_builder_at(chain_info.best_hash) } fn init_polkadot_block_builder_at( &self, - at: &BlockId, + hash: ::Hash, ) -> BlockBuilder { let last_timestamp = - self.runtime_api().get_last_timestamp(&at).expect("Get last timestamp"); + self.runtime_api().get_last_timestamp(hash).expect("Get last timestamp"); // `MinimumPeriod` is a storage parameter type that requires externalities to access the value. let minimum_period = BasicExternalities::new_empty() @@ -87,7 +87,7 @@ impl InitPolkadotBlockBuilder for Client { }; let mut block_builder = self - .new_block_at(at, digest, false) + .new_block_at(hash, digest, false) .expect("Creates new block builder for test runtime"); let mut inherent_data = sp_inherents::InherentData::new(); @@ -97,7 +97,7 @@ impl InitPolkadotBlockBuilder for Client { .expect("Put timestamp inherent data"); let parent_header = self - .header(at) + .header(hash) .expect("Get the parent block header") .expect("The target block header must exist"); @@ -110,7 +110,7 @@ impl InitPolkadotBlockBuilder for Client { inherent_data .put_data( - polkadot_primitives::v2::PARACHAINS_INHERENT_IDENTIFIER, + polkadot_primitives::PARACHAINS_INHERENT_IDENTIFIER, ¶chains_inherent_data, ) .expect("Put parachains inherent data"); diff --git a/node/test/client/src/lib.rs b/node/test/client/src/lib.rs index 1370ec295788..2f698a09b94e 100644 --- a/node/test/client/src/lib.rs +++ b/node/test/client/src/lib.rs @@ -20,7 +20,7 @@ mod block_builder; -use polkadot_primitives::v2::Block; +use polkadot_primitives::Block; use sc_service::client; use sp_core::storage::Storage; use sp_runtime::BuildStorage; diff --git a/node/test/performance-test/Cargo.toml b/node/test/performance-test/Cargo.toml index 95da89662579..b2b2ef8148f2 100644 --- a/node/test/performance-test/Cargo.toml +++ b/node/test/performance-test/Cargo.toml @@ -13,6 +13,7 @@ log = "0.4" polkadot-node-core-pvf = { path = "../../core/pvf" } polkadot-erasure-coding = { path = "../../../erasure-coding" } polkadot-node-primitives = { path = "../../primitives" } +polkadot-primitives = { path = "../../../primitives" } kusama-runtime = { path = "../../../runtime/kusama" } diff --git a/node/test/performance-test/src/lib.rs b/node/test/performance-test/src/lib.rs index 762c530e5d20..4ba86014e1e4 100644 --- a/node/test/performance-test/src/lib.rs +++ b/node/test/performance-test/src/lib.rs @@ -18,6 +18,7 @@ use polkadot_erasure_coding::{obtain_chunks, reconstruct}; use polkadot_node_core_pvf::{sc_executor_common, sp_maybe_compressed_blob}; +use polkadot_primitives::vstaging::ExecutorParams; use std::time::{Duration, Instant}; mod constants; @@ -36,9 +37,6 @@ pub enum PerfCheckError { #[error("This subcommand is only available in release mode")] WrongBuildType, - #[error("This subcommand is only available when compiled with `{feature}`")] - FeatureNotEnabled { feature: &'static str }, - #[error("No wasm code found for running the performance test")] WasmBinaryMissing, @@ -69,7 +67,8 @@ pub fn measure_pvf_prepare(wasm_code: &[u8]) -> Result // Recreate the pipeline from the pvf prepare worker. let blob = polkadot_node_core_pvf::prevalidate(code.as_ref()).map_err(PerfCheckError::from)?; - polkadot_node_core_pvf::prepare(blob).map_err(PerfCheckError::from)?; + polkadot_node_core_pvf::prepare(blob, &ExecutorParams::default()) + .map_err(PerfCheckError::from)?; Ok(start.elapsed()) } diff --git a/node/test/service/Cargo.toml b/node/test/service/Cargo.toml index e77228562696..e28b6625839c 100644 --- a/node/test/service/Cargo.toml +++ b/node/test/service/Cargo.toml @@ -10,7 +10,7 @@ hex = "0.4.3" gum = { package = "tracing-gum", path = "../../gum" } rand = "0.8.5" tempfile = "3.2.0" -tokio = "1.22.0" +tokio = "1.24.2" # Polkadot dependencies polkadot-overseer = { path = "../../overseer" } @@ -26,42 +26,42 @@ test-runtime-constants = { path = "../../../runtime/test-runtime/constants" } polkadot-runtime-parachains = { path = "../../../runtime/parachains" } # Substrate dependencies -sp-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -babe = { package = "sc-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -consensus_common = { package = "sp-consensus", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -grandpa = { package = "sc-finality-grandpa", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -grandpa_primitives = { package = "sp-finality-grandpa", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -pallet-staking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-executor = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-network-common = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-service = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-arithmetic = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -substrate-test-client = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +babe = { package = "sc-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +consensus_common = { package = "sp-consensus", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +grandpa = { package = "sc-consensus-grandpa", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +grandpa_primitives = { package = "sp-consensus-grandpa", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +pallet-staking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-executor = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-service = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-arithmetic = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +substrate-test-client = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } [dev-dependencies] -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } serde_json = "1.0.81" -substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -tokio = { version = "1.22.0", features = ["macros"] } +substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +tokio = { version = "1.24.2", features = ["macros"] } [features] runtime-metrics=["polkadot-test-runtime/runtime-metrics"] +runtime-benchmarks=["polkadot-test-runtime/runtime-benchmarks"] diff --git a/node/test/service/src/chain_spec.rs b/node/test/service/src/chain_spec.rs index 1d8b300e4e27..e02bfc541495 100644 --- a/node/test/service/src/chain_spec.rs +++ b/node/test/service/src/chain_spec.rs @@ -19,7 +19,7 @@ use babe_primitives::AuthorityId as BabeId; use grandpa::AuthorityId as GrandpaId; use pallet_staking::Forcing; -use polkadot_primitives::v2::{AccountId, AssignmentId, ValidatorId, MAX_CODE_SIZE, MAX_POV_SIZE}; +use polkadot_primitives::{AccountId, AssignmentId, ValidatorId, MAX_CODE_SIZE, MAX_POV_SIZE}; use polkadot_service::chain_spec::{ get_account_id_from_seed, get_from_seed, polkadot_chain_spec_properties, Extensions, }; diff --git a/node/test/service/src/lib.rs b/node/test/service/src/lib.rs index 831f0c85aaaa..f95ee9f75ed3 100644 --- a/node/test/service/src/lib.rs +++ b/node/test/service/src/lib.rs @@ -25,7 +25,7 @@ use futures::future::Future; use polkadot_node_primitives::{CollationGenerationConfig, CollatorFn}; use polkadot_node_subsystem::messages::{CollationGenerationMessage, CollatorProtocolMessage}; use polkadot_overseer::Handle; -use polkadot_primitives::v2::{Balance, CollatorPair, HeadData, Id as ParaId, ValidationCode}; +use polkadot_primitives::{Balance, CollatorPair, HeadData, Id as ParaId, ValidationCode}; use polkadot_runtime_common::BlockHashCount; use polkadot_runtime_parachains::paras::{ParaGenesisArgs, ParaKind}; use polkadot_service::{ @@ -37,8 +37,10 @@ use polkadot_test_runtime::{ }; use sc_chain_spec::ChainSpec; use sc_client_api::execution_extensions::ExecutionStrategies; -use sc_network::{config::NetworkConfiguration, multiaddr}; -use sc_network_common::{config::TransportConfig, service::NetworkStateInfo}; +use sc_network::{ + config::{NetworkConfiguration, TransportConfig}, + multiaddr, NetworkStateInfo, +}; use sc_service::{ config::{ DatabaseSource, KeystoreConfig, MultiaddrWithPeerId, WasmExecutionMethod, @@ -381,7 +383,7 @@ pub fn construct_extrinsic( UncheckedExtrinsic::new_signed( function.clone(), polkadot_test_runtime::Address::Id(caller.public().into()), - polkadot_primitives::v2::Signature::Sr25519(signature.clone()), + polkadot_primitives::Signature::Sr25519(signature.clone()), extra.clone(), ) } diff --git a/node/zombienet-backchannel/Cargo.toml b/node/zombienet-backchannel/Cargo.toml index 74e6751eb7de..05c08501d0bd 100644 --- a/node/zombienet-backchannel/Cargo.toml +++ b/node/zombienet-backchannel/Cargo.toml @@ -9,12 +9,12 @@ authors.workspace = true edition.workspace = true [dependencies] -tokio = { version = "1.22.0", default-features = false, features = ["macros", "net", "rt-multi-thread", "sync"] } -url = "2.0.0" +tokio = { version = "1.24.2", default-features = false, features = ["macros", "net", "rt-multi-thread", "sync"] } +url = "2.3.1" tokio-tungstenite = "0.17" futures-util = "0.3.23" lazy_static = "1.4.0" -parity-scale-codec = { version = "3.1.5", features = ["derive"] } +parity-scale-codec = { version = "3.3.0", features = ["derive"] } reqwest = "0.11" thiserror = "1.0.31" gum = { package = "tracing-gum", path = "../gum/" } diff --git a/parachain/Cargo.toml b/parachain/Cargo.toml index 730976426cc0..1e5227070dbf 100644 --- a/parachain/Cargo.toml +++ b/parachain/Cargo.toml @@ -9,14 +9,15 @@ version.workspace = true # note: special care is taken to avoid inclusion of `sp-io` externals when compiling # this crate for WASM. This is critical to avoid forcing all parachain WASM into implementing # various unnecessary Substrate-specific endpoints. -parity-scale-codec = { version = "3.1.5", default-features = false, features = [ "derive" ] } +parity-scale-codec = { version = "3.3.0", default-features = false, features = [ "derive" ] } scale-info = { version = "2.1.2", default-features = false, features = ["derive"] } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } polkadot-core-primitives = { path = "../core-primitives", default-features = false } derive_more = "0.99.11" +bounded-collections = { version = "0.1.5", default-features = false } # all optional crates. serde = { version = "1.0.137", default-features = false, features = [ "derive" ], optional = true } @@ -25,6 +26,7 @@ serde = { version = "1.0.137", default-features = false, features = [ "derive" ] default = ["std"] wasm-api = [] std = [ + "bounded-collections/std", "parity-scale-codec/std", "scale-info/std", "serde/std", diff --git a/parachain/src/primitives.rs b/parachain/src/primitives.rs index e638b83c2d7c..00b36bb545a3 100644 --- a/parachain/src/primitives.rs +++ b/parachain/src/primitives.rs @@ -19,6 +19,7 @@ use sp_std::vec::Vec; +use bounded_collections::{BoundedVec, ConstU32}; use frame_support::weights::Weight; use parity_scale_codec::{CompactAs, Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; @@ -361,6 +362,22 @@ pub struct ValidationParams { pub relay_parent_storage_root: Hash, } +/// Maximum number of HRMP messages allowed per candidate. +/// +/// We also use this as a generous limit, which still prevents possible memory exhaustion, from +/// malicious parachains that may otherwise return a huge amount of messages in `ValidationResult`. +pub const MAX_HORIZONTAL_MESSAGE_NUM: u32 = 16 * 1024; +/// Maximum number of UMP messages allowed per candidate. +/// +/// We also use this as a generous limit, which still prevents possible memory exhaustion, from +/// malicious parachains that may otherwise return a huge amount of messages in `ValidationResult`. +pub const MAX_UPWARD_MESSAGE_NUM: u32 = 16 * 1024; + +pub type UpwardMessages = BoundedVec>; + +pub type HorizontalMessages = + BoundedVec, ConstU32>; + /// The result of parachain validation. // TODO: balance uploads (https://github.com/paritytech/polkadot/issues/220) #[derive(PartialEq, Eq, Clone, Encode)] @@ -371,9 +388,9 @@ pub struct ValidationResult { /// An update to the validation code that should be scheduled in the relay chain. pub new_validation_code: Option, /// Upward messages send by the Parachain. - pub upward_messages: Vec, + pub upward_messages: UpwardMessages, /// Outbound horizontal messages sent by the parachain. - pub horizontal_messages: Vec>, + pub horizontal_messages: HorizontalMessages, /// Number of downward messages that were processed by the Parachain. /// /// It is expected that the Parachain processes them from first to last. diff --git a/parachain/test-parachains/Cargo.toml b/parachain/test-parachains/Cargo.toml index 9815c989c35c..e4841a25b59f 100644 --- a/parachain/test-parachains/Cargo.toml +++ b/parachain/test-parachains/Cargo.toml @@ -7,13 +7,13 @@ edition.workspace = true [dependencies] tiny-keccak = { version = "2.0.2", features = ["keccak"] } -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["derive"] } adder = { package = "test-parachain-adder", path = "adder" } halt = { package = "test-parachain-halt", path = "halt" } [dev-dependencies] -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } [features] default = ["std"] diff --git a/parachain/test-parachains/adder/Cargo.toml b/parachain/test-parachains/adder/Cargo.toml index 5e238521b482..3e285e50e85f 100644 --- a/parachain/test-parachains/adder/Cargo.toml +++ b/parachain/test-parachains/adder/Cargo.toml @@ -8,16 +8,16 @@ authors.workspace = true [dependencies] parachain = { package = "polkadot-parachain", path = "../../", default-features = false, features = [ "wasm-api" ] } -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["derive"] } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["derive"] } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } tiny-keccak = { version = "2.0.2", features = ["keccak"] } dlmalloc = { version = "0.2.4", features = [ "global" ] } # We need to make sure the global allocator is disabled until we have support of full substrate externalities -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, features = [ "disable_allocator" ] , branch = "polkadot-v0.9.36" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, features = [ "disable_allocator" ] , branch = "polkadot-v0.9.40" } [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } [features] default = [ "std" ] diff --git a/parachain/test-parachains/adder/collator/Cargo.toml b/parachain/test-parachains/adder/collator/Cargo.toml index 0d32d39b14ea..329899a34868 100644 --- a/parachain/test-parachains/adder/collator/Cargo.toml +++ b/parachain/test-parachains/adder/collator/Cargo.toml @@ -14,7 +14,7 @@ name = "adder_collator_puppet_worker" path = "bin/puppet_worker.rs" [dependencies] -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["derive"] } clap = { version = "4.0.9", features = ["derive"] } futures = "0.3.21" futures-timer = "3.0.2" @@ -27,9 +27,9 @@ polkadot-service = { path = "../../../../node/service", features = ["rococo-nati polkadot-node-primitives = { path = "../../../../node/primitives" } polkadot-node-subsystem = { path = "../../../../node/subsystem" } -sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } # This one is tricky. Even though it is not used directly by the collator, we still need it for the # `puppet_worker` binary, which is required for the integration test. However, this shouldn't be @@ -40,8 +40,8 @@ polkadot-node-core-pvf = { path = "../../../../node/core/pvf" } polkadot-parachain = { path = "../../.." } polkadot-test-service = { path = "../../../../node/test/service" } -substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } -tokio = { version = "1.22.0", features = ["macros"] } +tokio = { version = "1.24.2", features = ["macros"] } diff --git a/parachain/test-parachains/adder/collator/src/lib.rs b/parachain/test-parachains/adder/collator/src/lib.rs index 1ab0fb1a4660..ae5596e1ce55 100644 --- a/parachain/test-parachains/adder/collator/src/lib.rs +++ b/parachain/test-parachains/adder/collator/src/lib.rs @@ -23,7 +23,7 @@ use polkadot_node_primitives::{ Collation, CollationResult, CollationSecondedSignal, CollatorFn, MaybeCompressedPoV, PoV, Statement, }; -use polkadot_primitives::v2::{CollatorId, CollatorPair}; +use polkadot_primitives::{CollatorId, CollatorPair}; use sp_core::{traits::SpawnNamed, Pair}; use std::{ collections::HashMap, @@ -172,8 +172,8 @@ impl Collator { let pov = PoV { block_data: block_data.encode().into() }; let collation = Collation { - upward_messages: Vec::new(), - horizontal_messages: Vec::new(), + upward_messages: Default::default(), + horizontal_messages: Default::default(), new_validation_code: None, head_data: head_data.encode().into(), proof_of_validity: MaybeCompressedPoV::Raw(pov.clone()), @@ -248,7 +248,7 @@ mod tests { use futures::executor::block_on; use polkadot_parachain::primitives::{ValidationParams, ValidationResult}; - use polkadot_primitives::v2::PersistedValidationData; + use polkadot_primitives::PersistedValidationData; #[test] fn collator_works() { diff --git a/parachain/test-parachains/adder/collator/src/main.rs b/parachain/test-parachains/adder/collator/src/main.rs index e0845f68720d..a953624df3b4 100644 --- a/parachain/test-parachains/adder/collator/src/main.rs +++ b/parachain/test-parachains/adder/collator/src/main.rs @@ -19,7 +19,7 @@ use polkadot_cli::{Error, Result}; use polkadot_node_primitives::CollationGenerationConfig; use polkadot_node_subsystem::messages::{CollationGenerationMessage, CollatorProtocolMessage}; -use polkadot_primitives::v2::Id as ParaId; +use polkadot_primitives::Id as ParaId; use sc_cli::{Error as SubstrateCliError, SubstrateCli}; use sp_core::hexdisplay::HexDisplay; use test_parachain_adder_collator::Collator; diff --git a/parachain/test-parachains/adder/collator/tests/integration.rs b/parachain/test-parachains/adder/collator/tests/integration.rs index c8ef0a40b2ae..a62f2a88c83c 100644 --- a/parachain/test-parachains/adder/collator/tests/integration.rs +++ b/parachain/test-parachains/adder/collator/tests/integration.rs @@ -23,7 +23,7 @@ const PUPPET_EXE: &str = env!("CARGO_BIN_EXE_adder_collator_puppet_worker"); #[substrate_test_utils::test(flavor = "multi_thread")] async fn collating_using_adder_collator() { - use polkadot_primitives::v2::Id as ParaId; + use polkadot_primitives::Id as ParaId; use sp_keyring::AccountKeyring::*; let mut builder = sc_cli::LoggerBuilder::new(""); diff --git a/parachain/test-parachains/adder/src/wasm_validation.rs b/parachain/test-parachains/adder/src/wasm_validation.rs index 240df6cb2c01..69c383a48796 100644 --- a/parachain/test-parachains/adder/src/wasm_validation.rs +++ b/parachain/test-parachains/adder/src/wasm_validation.rs @@ -37,8 +37,10 @@ pub extern "C" fn validate_block(params: *const u8, len: usize) -> u64 { parachain::write_result(&ValidationResult { head_data: GenericHeadData(new_head.encode()), new_validation_code: None, - upward_messages: sp_std::vec::Vec::new(), - horizontal_messages: sp_std::vec::Vec::new(), + upward_messages: sp_std::vec::Vec::new().try_into().expect("empty vec fits into bounds"), + horizontal_messages: sp_std::vec::Vec::new() + .try_into() + .expect("empty vec fits into bounds"), processed_downward_messages: 0, hrmp_watermark: params.relay_parent_number, }) diff --git a/parachain/test-parachains/halt/Cargo.toml b/parachain/test-parachains/halt/Cargo.toml index 1261ac2ebc5c..01f7ca4312a1 100644 --- a/parachain/test-parachains/halt/Cargo.toml +++ b/parachain/test-parachains/halt/Cargo.toml @@ -9,7 +9,7 @@ edition.workspace = true [dependencies] [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } [features] default = [ "std" ] diff --git a/parachain/test-parachains/undying/Cargo.toml b/parachain/test-parachains/undying/Cargo.toml index 8a6dcf1f272c..41380cf62eaf 100644 --- a/parachain/test-parachains/undying/Cargo.toml +++ b/parachain/test-parachains/undying/Cargo.toml @@ -8,17 +8,17 @@ edition.workspace = true [dependencies] parachain = { package = "polkadot-parachain", path = "../../", default-features = false, features = [ "wasm-api" ] } -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["derive"] } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["derive"] } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } tiny-keccak = { version = "2.0.2", features = ["keccak"] } dlmalloc = { version = "0.2.4", features = [ "global" ] } log = { version = "0.4.17", default-features = false } # We need to make sure the global allocator is disabled until we have support of full substrate externalities -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, features = [ "disable_allocator" ] , branch = "polkadot-v0.9.36" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, features = [ "disable_allocator" ] , branch = "polkadot-v0.9.40" } [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } [features] default = [ "std" ] diff --git a/parachain/test-parachains/undying/collator/Cargo.toml b/parachain/test-parachains/undying/collator/Cargo.toml index 14d568aa83f5..97c4697b3d73 100644 --- a/parachain/test-parachains/undying/collator/Cargo.toml +++ b/parachain/test-parachains/undying/collator/Cargo.toml @@ -14,7 +14,7 @@ name = "undying_collator_puppet_worker" path = "bin/puppet_worker.rs" [dependencies] -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["derive"] } clap = { version = "4.0.9", features = ["derive"] } futures = "0.3.19" futures-timer = "3.0.2" @@ -27,9 +27,9 @@ polkadot-service = { path = "../../../../node/service", features = ["rococo-nati polkadot-node-primitives = { path = "../../../../node/primitives" } polkadot-node-subsystem = { path = "../../../../node/subsystem" } -sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } # This one is tricky. Even though it is not used directly by the collator, we still need it for the # `puppet_worker` binary, which is required for the integration test. However, this shouldn't be @@ -40,8 +40,8 @@ polkadot-node-core-pvf = { path = "../../../../node/core/pvf" } polkadot-parachain = { path = "../../.." } polkadot-test-service = { path = "../../../../node/test/service" } -substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } -tokio = { version = "1.22.0", features = ["macros"] } +tokio = { version = "1.24.2", features = ["macros"] } diff --git a/parachain/test-parachains/undying/collator/src/lib.rs b/parachain/test-parachains/undying/collator/src/lib.rs index 5d1a53f60cb3..317b85d3d492 100644 --- a/parachain/test-parachains/undying/collator/src/lib.rs +++ b/parachain/test-parachains/undying/collator/src/lib.rs @@ -23,7 +23,7 @@ use polkadot_node_primitives::{ maybe_compress_pov, Collation, CollationResult, CollationSecondedSignal, CollatorFn, MaybeCompressedPoV, PoV, Statement, }; -use polkadot_primitives::v2::{CollatorId, CollatorPair, Hash}; +use polkadot_primitives::{CollatorId, CollatorPair, Hash}; use sp_core::Pair; use std::{ collections::HashMap, @@ -247,8 +247,8 @@ impl Collator { let pov = PoV { block_data: block_data.encode().into() }; let collation = Collation { - upward_messages: Vec::new(), - horizontal_messages: Vec::new(), + upward_messages: Default::default(), + horizontal_messages: Default::default(), new_validation_code: None, head_data: head_data.encode().into(), proof_of_validity: MaybeCompressedPoV::Raw(pov.clone()), @@ -330,7 +330,7 @@ mod tests { use super::*; use futures::executor::block_on; use polkadot_parachain::primitives::{ValidationParams, ValidationResult}; - use polkadot_primitives::v2::{Hash, PersistedValidationData}; + use polkadot_primitives::{Hash, PersistedValidationData}; #[test] fn collator_works() { diff --git a/parachain/test-parachains/undying/collator/src/main.rs b/parachain/test-parachains/undying/collator/src/main.rs index e352235679ce..e28e1e25cf63 100644 --- a/parachain/test-parachains/undying/collator/src/main.rs +++ b/parachain/test-parachains/undying/collator/src/main.rs @@ -19,7 +19,7 @@ use polkadot_cli::{Error, Result}; use polkadot_node_primitives::CollationGenerationConfig; use polkadot_node_subsystem::messages::{CollationGenerationMessage, CollatorProtocolMessage}; -use polkadot_primitives::v2::Id as ParaId; +use polkadot_primitives::Id as ParaId; use sc_cli::{Error as SubstrateCliError, SubstrateCli}; use sp_core::hexdisplay::HexDisplay; use test_parachain_undying_collator::Collator; diff --git a/parachain/test-parachains/undying/collator/tests/integration.rs b/parachain/test-parachains/undying/collator/tests/integration.rs index cf00ffa35125..c6f56e5faf6e 100644 --- a/parachain/test-parachains/undying/collator/tests/integration.rs +++ b/parachain/test-parachains/undying/collator/tests/integration.rs @@ -22,7 +22,7 @@ const PUPPET_EXE: &str = env!("CARGO_BIN_EXE_undying_collator_puppet_worker"); // If this test is failing, make sure to run all tests with the `real-overseer` feature being enabled. #[substrate_test_utils::test(flavor = "multi_thread")] async fn collating_using_undying_collator() { - use polkadot_primitives::v2::Id as ParaId; + use polkadot_primitives::Id as ParaId; use sp_keyring::AccountKeyring::*; let mut builder = sc_cli::LoggerBuilder::new(""); diff --git a/parachain/test-parachains/undying/src/wasm_validation.rs b/parachain/test-parachains/undying/src/wasm_validation.rs index 73dda396d81a..873819ad2b1e 100644 --- a/parachain/test-parachains/undying/src/wasm_validation.rs +++ b/parachain/test-parachains/undying/src/wasm_validation.rs @@ -37,8 +37,10 @@ pub extern "C" fn validate_block(params: *const u8, len: usize) -> u64 { parachain::write_result(&ValidationResult { head_data: GenericHeadData(new_head.encode()), new_validation_code: None, - upward_messages: sp_std::vec::Vec::new(), - horizontal_messages: sp_std::vec::Vec::new(), + upward_messages: sp_std::vec::Vec::new().try_into().expect("empty vec fits within bounds"), + horizontal_messages: sp_std::vec::Vec::new() + .try_into() + .expect("empty vec fits within bounds"), processed_downward_messages: 0, hrmp_watermark: params.relay_parent_number, }) diff --git a/primitives/Cargo.toml b/primitives/Cargo.toml index 71b054470bc0..8679b3cb246d 100644 --- a/primitives/Cargo.toml +++ b/primitives/Cargo.toml @@ -7,22 +7,22 @@ edition.workspace = true [dependencies] bitvec = { version = "1.0.0", default-features = false, features = ["alloc"] } hex-literal = "0.3.4" -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["bit-vec", "derive"] } +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["bit-vec", "derive"] } scale-info = { version = "2.1.2", default-features = false, features = ["bit-vec", "derive"] } serde = { version = "1.0.137", optional = true, features = ["derive"] } -application-crypto = { package = "sp-application-crypto", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -primitives = { package = "sp-core", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -runtime_primitives = { package = "sp-runtime", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-arithmetic = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-authority-discovery = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-consensus-slots = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-keystore = { git = "https://github.com/paritytech/substrate", optional = true , branch = "polkadot-v0.9.36" } -sp-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-std = { package = "sp-std", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +application-crypto = { package = "sp-application-crypto", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +primitives = { package = "sp-core", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +runtime_primitives = { package = "sp-runtime", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-arithmetic = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-authority-discovery = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-consensus-slots = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-keystore = { git = "https://github.com/paritytech/substrate", optional = true , branch = "polkadot-v0.9.40" } +sp-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-std = { package = "sp-std", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } polkadot-core-primitives = { path = "../core-primitives", default-features = false } polkadot-parachain = { path = "../parachain", default-features = false } diff --git a/primitives/src/lib.rs b/primitives/src/lib.rs index 168b5795b040..e242c7c0800c 100644 --- a/primitives/src/lib.rs +++ b/primitives/src/lib.rs @@ -30,3 +30,33 @@ pub mod vstaging; // `runtime_api` contains the actual API implementation. It contains stable and // unstable functions. pub mod runtime_api; + +// Current primitives not requiring versioning are exported here. +// Primitives requiring versioning must not be exported and must be referred by an exact version. +pub use v2::{ + byzantine_threshold, check_candidate_backing, collator_signature_payload, metric_definitions, + supermajority_threshold, well_known_keys, AbridgedHostConfiguration, AbridgedHrmpChannel, + AccountId, AccountIndex, AccountPublic, ApprovalVote, AssignmentId, AuthorityDiscoveryId, + AvailabilityBitfield, BackedCandidate, Balance, BlakeTwo256, Block, BlockId, BlockNumber, + CandidateCommitments, CandidateDescriptor, CandidateEvent, CandidateHash, CandidateIndex, + CandidateReceipt, CheckedDisputeStatementSet, CheckedMultiDisputeStatementSet, CollatorId, + CollatorSignature, CommittedCandidateReceipt, CompactStatement, ConsensusLog, CoreIndex, + CoreOccupied, CoreState, DisputeState, DisputeStatement, DisputeStatementSet, DownwardMessage, + EncodeAs, ExplicitDisputeStatement, GroupIndex, GroupRotationInfo, Hash, HashT, HeadData, + Header, HrmpChannelId, Id, InboundDownwardMessage, InboundHrmpMessage, IndexedVec, + InherentData, InvalidDisputeStatementKind, Moment, MultiDisputeStatementSet, Nonce, + OccupiedCore, OccupiedCoreAssumption, OutboundHrmpMessage, ParathreadClaim, ParathreadEntry, + PersistedValidationData, PvfCheckStatement, PvfExecTimeoutKind, PvfPrepTimeoutKind, + RuntimeMetricLabel, RuntimeMetricLabelValue, RuntimeMetricLabelValues, RuntimeMetricLabels, + RuntimeMetricOp, RuntimeMetricUpdate, ScheduledCore, ScrapedOnChainVotes, SessionIndex, + SessionInfo, Signature, Signed, SignedAvailabilityBitfield, SignedAvailabilityBitfields, + SignedStatement, SigningContext, Slot, UncheckedSigned, UncheckedSignedAvailabilityBitfield, + UncheckedSignedAvailabilityBitfields, UncheckedSignedStatement, UpgradeGoAhead, + UpgradeRestriction, UpwardMessage, ValidDisputeStatementKind, ValidationCode, + ValidationCodeHash, ValidatorId, ValidatorIndex, ValidatorSignature, ValidityAttestation, + ValidityError, ASSIGNMENT_KEY_TYPE_ID, LOWEST_PUBLIC_ID, MAX_CODE_SIZE, MAX_HEAD_DATA_SIZE, + MAX_POV_SIZE, PARACHAINS_INHERENT_IDENTIFIER, PARACHAIN_KEY_TYPE_ID, +}; + +#[cfg(feature = "std")] +pub use v2::{AssignmentPair, CollatorPair, ValidatorPair}; diff --git a/primitives/src/runtime_api.rs b/primitives/src/runtime_api.rs index 2f6793d22032..8275d595d61b 100644 --- a/primitives/src/runtime_api.rs +++ b/primitives/src/runtime_api.rs @@ -110,11 +110,15 @@ //! All staging API functions should use primitives from `vstaging`. They should be clearly separated //! from the stable primitives. -use crate::v2; +use crate::{ + vstaging, BlockNumber, CandidateCommitments, CandidateEvent, CandidateHash, + CommittedCandidateReceipt, CoreState, DisputeState, GroupRotationInfo, OccupiedCoreAssumption, + PersistedValidationData, PvfCheckStatement, ScrapedOnChainVotes, SessionIndex, SessionInfo, + ValidatorId, ValidatorIndex, ValidatorSignature, +}; use parity_scale_codec::{Decode, Encode}; use polkadot_core_primitives as pcp; use polkadot_parachain::primitives as ppp; -use sp_staking; use sp_std::{collections::btree_map::BTreeMap, prelude::*}; sp_api::decl_runtime_apis! { @@ -122,24 +126,24 @@ sp_api::decl_runtime_apis! { #[api_version(2)] pub trait ParachainHost { /// Get the current validators. - fn validators() -> Vec; + fn validators() -> Vec; /// Returns the validator groups and rotation info localized based on the hypothetical child /// of a block whose state this is invoked on. Note that `now` in the `GroupRotationInfo` /// should be the successor of the number of the block. - fn validator_groups() -> (Vec>, v2::GroupRotationInfo); + fn validator_groups() -> (Vec>, GroupRotationInfo); /// Yields information on all availability cores as relevant to the child block. /// Cores are either free or occupied. Free cores can have paras assigned to them. - fn availability_cores() -> Vec>; + fn availability_cores() -> Vec>; /// Yields the persisted validation data for the given `ParaId` along with an assumption that /// should be used if the para currently occupies a core. /// /// Returns `None` if either the para is not registered or the assumption is `Freed` /// and the para already occupies a core. - fn persisted_validation_data(para_id: ppp::Id, assumption: v2::OccupiedCoreAssumption) - -> Option>; + fn persisted_validation_data(para_id: ppp::Id, assumption: OccupiedCoreAssumption) + -> Option>; /// Returns the persisted validation data for the given `ParaId` along with the corresponding /// validation code hash. Instead of accepting assumption about the para, matches the validation @@ -147,29 +151,29 @@ sp_api::decl_runtime_apis! { fn assumed_validation_data( para_id: ppp::Id, expected_persisted_validation_data_hash: pcp::v2::Hash, - ) -> Option<(v2::PersistedValidationData, ppp::ValidationCodeHash)>; + ) -> Option<(PersistedValidationData, ppp::ValidationCodeHash)>; /// Checks if the given validation outputs pass the acceptance criteria. - fn check_validation_outputs(para_id: ppp::Id, outputs: v2::CandidateCommitments) -> bool; + fn check_validation_outputs(para_id: ppp::Id, outputs: CandidateCommitments) -> bool; /// Returns the session index expected at a child of the block. /// /// This can be used to instantiate a `SigningContext`. - fn session_index_for_child() -> sp_staking::SessionIndex; + fn session_index_for_child() -> SessionIndex; /// Fetch the validation code used by a para, making the given `OccupiedCoreAssumption`. /// /// Returns `None` if either the para is not registered or the assumption is `Freed` /// and the para already occupies a core. - fn validation_code(para_id: ppp::Id, assumption: v2::OccupiedCoreAssumption) + fn validation_code(para_id: ppp::Id, assumption: OccupiedCoreAssumption) -> Option; /// Get the receipt of a candidate pending availability. This returns `Some` for any paras /// assigned to occupied cores in `availability_cores` and `None` otherwise. - fn candidate_pending_availability(para_id: ppp::Id) -> Option>; + fn candidate_pending_availability(para_id: ppp::Id) -> Option>; /// Get a vector of events concerning candidates that occurred within a block. - fn candidate_events() -> Vec>; + fn candidate_events() -> Vec>; /// Get all the pending inbound messages in the downward message queue for a para. fn dmq_contents( @@ -184,19 +188,19 @@ sp_api::decl_runtime_apis! { fn validation_code_by_hash(hash: ppp::ValidationCodeHash) -> Option; /// Scrape dispute relevant from on-chain, backing votes and resolved disputes. - fn on_chain_votes() -> Option>; + fn on_chain_votes() -> Option>; /***** Added in v2 *****/ /// Get the session info for the given session, if stored. /// /// NOTE: This function is only available since parachain host version 2. - fn session_info(index: sp_staking::SessionIndex) -> Option; + fn session_info(index: SessionIndex) -> Option; /// Submits a PVF pre-checking statement into the transaction pool. /// /// NOTE: This function is only available since parachain host version 2. - fn submit_pvf_check_statement(stmt: v2::PvfCheckStatement, signature: v2::ValidatorSignature); + fn submit_pvf_check_statement(stmt: PvfCheckStatement, signature: ValidatorSignature); /// Returns code hashes of PVFs that require pre-checking by validators in the active set. /// @@ -206,20 +210,17 @@ sp_api::decl_runtime_apis! { /// Fetch the hash of the validation code used by a para, making the given `OccupiedCoreAssumption`. /// /// NOTE: This function is only available since parachain host version 2. - fn validation_code_hash(para_id: ppp::Id, assumption: v2::OccupiedCoreAssumption) + fn validation_code_hash(para_id: ppp::Id, assumption: OccupiedCoreAssumption) -> Option; - - /***** Replaced in v2 *****/ - - /// Old method to fetch v1 session info. - #[changed_in(2)] - fn session_info(index: sp_staking::SessionIndex) -> Option; - /***** STAGING *****/ /// Returns all onchain disputes. #[api_version(3)] - fn disputes() -> Vec<(v2::SessionIndex, v2::CandidateHash, v2::DisputeState)>; + fn disputes() -> Vec<(SessionIndex, CandidateHash, DisputeState)>; + + /// Returns execution parameters for the session. + #[api_version(4)] + fn session_executor_params(session_index: SessionIndex) -> Option; } } diff --git a/primitives/src/v2/mod.rs b/primitives/src/v2/mod.rs index 606ffd59920c..d39c322e37be 100644 --- a/primitives/src/v2/mod.rs +++ b/primitives/src/v2/mod.rs @@ -43,8 +43,8 @@ pub use polkadot_core_primitives::v2::{ // Export some polkadot-parachain primitives pub use polkadot_parachain::primitives::{ - HeadData, HrmpChannelId, Id, UpwardMessage, ValidationCode, ValidationCodeHash, - LOWEST_PUBLIC_ID, LOWEST_USER_ID, + HeadData, HorizontalMessages, HrmpChannelId, Id, UpwardMessage, UpwardMessages, ValidationCode, + ValidationCodeHash, LOWEST_PUBLIC_ID, LOWEST_USER_ID, }; #[cfg(feature = "std")] @@ -143,12 +143,12 @@ pub mod well_known_keys { // // The `StorageValue`, such as `ACTIVE_CONFIG` was obtained by calling: // - // ::ActiveConfig::hashed_key() + // ActiveConfig::::hashed_key() // // The `StorageMap` values require `prefix`, and for example for `hrmp_egress_channel_index`, // it could be obtained like: // - // ::HrmpEgressChannelsIndex::prefix_hash(); + // HrmpEgressChannelsIndex::::prefix_hash(); // /// The current epoch index. @@ -593,12 +593,12 @@ impl PersistedValidationData { /// Commitments made in a `CandidateReceipt`. Many of these are outputs of validation. #[derive(PartialEq, Eq, Clone, Encode, Decode, TypeInfo, RuntimeDebug)] -#[cfg_attr(feature = "std", derive(Hash, Default))] +#[cfg_attr(feature = "std", derive(Default, Hash))] pub struct CandidateCommitments { /// Messages destined to be interpreted by the Relay chain itself. - pub upward_messages: Vec, + pub upward_messages: UpwardMessages, /// Horizontal messages sent by the parachain. - pub horizontal_messages: Vec>, + pub horizontal_messages: HorizontalMessages, /// New validation code. pub new_validation_code: Option, /// The head-data produced as a result of execution. @@ -1603,6 +1603,9 @@ pub fn supermajority_threshold(n: usize) -> usize { } /// Information about validator sets of a session. +/// +/// NOTE: `SessionInfo` is frozen. Do not include new fields, consider creating a separate runtime +/// API. Reasoning and further outlook [here](https://github.com/paritytech/polkadot/issues/6586). #[derive(Clone, Encode, Decode, RuntimeDebug, TypeInfo)] #[cfg_attr(feature = "std", derive(PartialEq))] pub struct SessionInfo { @@ -1686,76 +1689,31 @@ impl PvfCheckStatement { } } -/// Old, v1-style info about session info. Only needed for limited -/// backwards-compatibility. -#[derive(Clone, Encode, Decode, RuntimeDebug, TypeInfo)] -#[cfg_attr(feature = "std", derive(PartialEq))] -pub struct OldV1SessionInfo { - /// Validators in canonical ordering. - /// - /// NOTE: There might be more authorities in the current session, than `validators` participating - /// in parachain consensus. See - /// [`max_validators`](https://github.com/paritytech/polkadot/blob/a52dca2be7840b23c19c153cf7e110b1e3e475f8/runtime/parachains/src/configuration.rs#L148). - /// - /// `SessionInfo::validators` will be limited to to `max_validators` when set. - pub validators: IndexedVec, - /// Validators' authority discovery keys for the session in canonical ordering. - /// - /// NOTE: The first `validators.len()` entries will match the corresponding validators in - /// `validators`, afterwards any remaining authorities can be found. This is any authorities not - /// participating in parachain consensus - see - /// [`max_validators`](https://github.com/paritytech/polkadot/blob/a52dca2be7840b23c19c153cf7e110b1e3e475f8/runtime/parachains/src/configuration.rs#L148) - pub discovery_keys: Vec, - /// The assignment keys for validators. - /// - /// NOTE: There might be more authorities in the current session, than validators participating - /// in parachain consensus. See - /// [`max_validators`](https://github.com/paritytech/polkadot/blob/a52dca2be7840b23c19c153cf7e110b1e3e475f8/runtime/parachains/src/configuration.rs#L148). - /// - /// Therefore: - /// ```ignore - /// assignment_keys.len() == validators.len() && validators.len() <= discovery_keys.len() - /// ``` - pub assignment_keys: Vec, - /// Validators in shuffled ordering - these are the validator groups as produced - /// by the `Scheduler` module for the session and are typically referred to by - /// `GroupIndex`. - pub validator_groups: IndexedVec>, - /// The number of availability cores used by the protocol during this session. - pub n_cores: u32, - /// The zeroth delay tranche width. - pub zeroth_delay_tranche_width: u32, - /// The number of samples we do of `relay_vrf_modulo`. - pub relay_vrf_modulo_samples: u32, - /// The number of delay tranches in total. - pub n_delay_tranches: u32, - /// How many slots (BABE / SASSAFRAS) must pass before an assignment is considered a - /// no-show. - pub no_show_slots: u32, - /// The number of validators needed to approve a block. - pub needed_approvals: u32, +/// Type discriminator for PVF preparation timeouts +#[derive(Encode, Decode, TypeInfo, Clone, Copy, Debug, PartialEq, Eq)] +pub enum PvfPrepTimeoutKind { + /// For prechecking requests, the time period after which the preparation worker is considered + /// unresponsive and will be killed. + Precheck, + + /// For execution and heads-up requests, the time period after which the preparation worker is + /// considered unresponsive and will be killed. More lenient than the timeout for prechecking + /// to prevent honest validators from timing out on valid PVFs. + Lenient, } -impl From for SessionInfo { - fn from(old: OldV1SessionInfo) -> SessionInfo { - SessionInfo { - // new fields - active_validator_indices: Vec::new(), - random_seed: [0u8; 32], - dispute_period: 6, - // old fields - validators: old.validators, - discovery_keys: old.discovery_keys, - assignment_keys: old.assignment_keys, - validator_groups: old.validator_groups, - n_cores: old.n_cores, - zeroth_delay_tranche_width: old.zeroth_delay_tranche_width, - relay_vrf_modulo_samples: old.relay_vrf_modulo_samples, - n_delay_tranches: old.n_delay_tranches, - no_show_slots: old.no_show_slots, - needed_approvals: old.needed_approvals, - } - } +/// Type discriminator for PVF execution timeouts +#[derive(Encode, Decode, TypeInfo, Clone, Copy, Debug, PartialEq, Eq)] +pub enum PvfExecTimeoutKind { + /// The amount of time to spend on execution during backing. + Backing, + + /// The amount of time to spend on execution during approval or disputes. + /// + /// This should be much longer than the backing execution timeout to ensure that in the + /// absence of extremely large disparities between hardware, blocks that pass backing are + /// considered executable by approval checkers or dispute participants. + Approval, } #[cfg(test)] diff --git a/primitives/src/vstaging/executor_params.rs b/primitives/src/vstaging/executor_params.rs new file mode 100644 index 000000000000..56d3e446d0c5 --- /dev/null +++ b/primitives/src/vstaging/executor_params.rs @@ -0,0 +1,149 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +//! Abstract execution environment parameter set. +//! +//! Parameter set is encoded as an opaque vector which structure depends on the execution +//! environment itself (except for environment type/version which is always represented +//! by the first element of the vector). Decoding to a usable semantics structure is +//! done in `polkadot-node-core-pvf`. + +use crate::{BlakeTwo256, HashT as _, PvfExecTimeoutKind, PvfPrepTimeoutKind}; +use parity_scale_codec::{Decode, Encode}; +use polkadot_core_primitives::Hash; +use scale_info::TypeInfo; +use sp_std::{ops::Deref, time::Duration, vec, vec::Vec}; + +/// The different executor parameters for changing the execution environment semantics. +#[derive(Clone, Debug, Encode, Decode, PartialEq, Eq, TypeInfo)] +pub enum ExecutorParam { + /// Maximum number of memory pages (64KiB bytes per page) the executor can allocate. + #[codec(index = 1)] + MaxMemoryPages(u32), + /// Wasm logical stack size limit (max. number of Wasm values on stack) + #[codec(index = 2)] + StackLogicalMax(u32), + /// Executor machine stack size limit, in bytes + #[codec(index = 3)] + StackNativeMax(u32), + /// Max. amount of memory the preparation worker is allowed to use during + /// pre-checking, in bytes + #[codec(index = 4)] + PrecheckingMaxMemory(u64), + /// PVF preparation timeouts, millisec + #[codec(index = 5)] + PvfPrepTimeout(PvfPrepTimeoutKind, u64), + /// PVF execution timeouts, millisec + #[codec(index = 6)] + PvfExecTimeout(PvfExecTimeoutKind, u64), +} + +/// Unit type wrapper around [`type@Hash`] that represents an execution parameter set hash. +/// +/// This type is produced by [`ExecutorParams::hash`]. +#[derive(Clone, Copy, Encode, Decode, Hash, Eq, PartialEq, PartialOrd, Ord, TypeInfo)] +pub struct ExecutorParamsHash(Hash); + +impl ExecutorParamsHash { + /// Create a new executor parameter hash from `H256` hash + pub fn from_hash(hash: Hash) -> Self { + Self(hash) + } +} + +impl sp_std::fmt::Display for ExecutorParamsHash { + fn fmt(&self, f: &mut sp_std::fmt::Formatter<'_>) -> sp_std::fmt::Result { + self.0.fmt(f) + } +} + +impl sp_std::fmt::Debug for ExecutorParamsHash { + fn fmt(&self, f: &mut sp_std::fmt::Formatter<'_>) -> sp_std::fmt::Result { + write!(f, "{:?}", self.0) + } +} + +impl sp_std::fmt::LowerHex for ExecutorParamsHash { + fn fmt(&self, f: &mut sp_std::fmt::Formatter<'_>) -> sp_std::fmt::Result { + sp_std::fmt::LowerHex::fmt(&self.0, f) + } +} + +/// # Deterministically serialized execution environment semantics +/// Represents an arbitrary semantics of an arbitrary execution environment, so should be kept as +/// abstract as possible. +// ADR: For mandatory entries, mandatoriness should be enforced in code rather than separating them +// into individual fields of the structure. Thus, complex migrations shall be avoided when adding +// new entries and removing old ones. At the moment, there's no mandatory parameters defined. If +// they show up, they must be clearly documented as mandatory ones. +#[derive(Clone, Debug, Encode, Decode, PartialEq, Eq, TypeInfo)] +pub struct ExecutorParams(Vec); + +impl ExecutorParams { + /// Creates a new, empty executor parameter set + pub fn new() -> Self { + ExecutorParams(vec![]) + } + + /// Returns hash of the set of execution environment parameters + pub fn hash(&self) -> ExecutorParamsHash { + ExecutorParamsHash(BlakeTwo256::hash(&self.encode())) + } + + /// Returns a PVF preparation timeout, if any + pub fn pvf_prep_timeout(&self, kind: PvfPrepTimeoutKind) -> Option { + for param in &self.0 { + if let ExecutorParam::PvfPrepTimeout(k, timeout) = param { + if kind == *k { + return Some(Duration::from_millis(*timeout)) + } + } + } + None + } + + /// Returns a PVF execution timeout, if any + pub fn pvf_exec_timeout(&self, kind: PvfExecTimeoutKind) -> Option { + for param in &self.0 { + if let ExecutorParam::PvfExecTimeout(k, timeout) = param { + if kind == *k { + return Some(Duration::from_millis(*timeout)) + } + } + } + None + } +} + +impl Deref for ExecutorParams { + type Target = Vec; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl From<&[ExecutorParam]> for ExecutorParams { + fn from(arr: &[ExecutorParam]) -> Self { + ExecutorParams(arr.to_vec()) + } +} + +impl Default for ExecutorParams { + fn default() -> Self { + ExecutorParams(vec![]) + } +} diff --git a/primitives/src/vstaging/mod.rs b/primitives/src/vstaging/mod.rs index 64671bd48a60..d6428d252149 100644 --- a/primitives/src/vstaging/mod.rs +++ b/primitives/src/vstaging/mod.rs @@ -17,3 +17,6 @@ //! Staging Primitives. // Put any primitives used by staging APIs functions here + +pub mod executor_params; +pub use executor_params::{ExecutorParam, ExecutorParams, ExecutorParamsHash}; diff --git a/primitives/test-helpers/Cargo.toml b/primitives/test-helpers/Cargo.toml index 054cf6f67685..31c8598c26c9 100644 --- a/primitives/test-helpers/Cargo.toml +++ b/primitives/test-helpers/Cargo.toml @@ -5,9 +5,9 @@ authors.workspace = true edition.workspace = true [dependencies] -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-application-crypto = { package = "sp-application-crypto", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", features = ["std"] , branch = "polkadot-v0.9.36" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-application-crypto = { package = "sp-application-crypto", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", features = ["std"] , branch = "polkadot-v0.9.40" } polkadot-primitives = { path = "../" } rand = "0.8.5" diff --git a/primitives/test-helpers/src/lib.rs b/primitives/test-helpers/src/lib.rs index 8873d69cdb2f..f1603a53bf2a 100644 --- a/primitives/test-helpers/src/lib.rs +++ b/primitives/test-helpers/src/lib.rs @@ -21,7 +21,7 @@ //! //! Note that `dummy_` prefixed values are meant to be fillers, that should not matter, and will //! contain randomness based data. -use polkadot_primitives::v2::{ +use polkadot_primitives::{ CandidateCommitments, CandidateDescriptor, CandidateReceipt, CollatorId, CollatorSignature, CommittedCandidateReceipt, Hash, HeadData, Id as ParaId, ValidationCode, ValidationCodeHash, ValidatorId, @@ -70,9 +70,9 @@ pub fn dummy_candidate_receipt_bad_sig( pub fn dummy_candidate_commitments(head_data: impl Into>) -> CandidateCommitments { CandidateCommitments { head_data: head_data.into().unwrap_or(dummy_head_data()), - upward_messages: vec![], + upward_messages: vec![].try_into().expect("empty vec fits within bounds"), new_validation_code: None, - horizontal_messages: vec![], + horizontal_messages: vec![].try_into().expect("empty vec fits within bounds"), processed_downward_messages: 0, hrmp_watermark: 0_u32, } @@ -159,7 +159,7 @@ pub fn make_valid_candidate_descriptor>( collator: Sr25519Keyring, ) -> CandidateDescriptor { let validation_code_hash = validation_code_hash.into(); - let payload = polkadot_primitives::v2::collator_signature_payload::( + let payload = polkadot_primitives::collator_signature_payload::( &relay_parent, ¶_id, &persisted_validation_data_hash, @@ -190,7 +190,7 @@ pub fn resign_candidate_descriptor_with_collator>( collator: Sr25519Keyring, ) { descriptor.collator = collator.public().into(); - let payload = polkadot_primitives::v2::collator_signature_payload::( + let payload = polkadot_primitives::collator_signature_payload::( &descriptor.relay_parent, &descriptor.para_id, &descriptor.persisted_validation_data_hash, @@ -256,6 +256,6 @@ impl rand::RngCore for AlwaysZeroRng { } } -pub fn dummy_signature() -> polkadot_primitives::v2::ValidatorSignature { +pub fn dummy_signature() -> polkadot_primitives::ValidatorSignature { sp_core::crypto::UncheckedFrom::unchecked_from([1u8; 64]) } diff --git a/roadmap/implementers-guide/src/SUMMARY.md b/roadmap/implementers-guide/src/SUMMARY.md index c504b9ac1923..41b52cf2299f 100644 --- a/roadmap/implementers-guide/src/SUMMARY.md +++ b/roadmap/implementers-guide/src/SUMMARY.md @@ -63,7 +63,6 @@ - [Provisioner](node/utility/provisioner.md) - [Network Bridge](node/utility/network-bridge.md) - [Gossip Support](node/utility/gossip-support.md) - - [Misbehavior Arbitration](node/utility/misbehavior-arbitration.md) - [Peer Set Manager](node/utility/peer-set-manager.md) - [Runtime API Requests](node/utility/runtime-api.md) - [Chain API Requests](node/utility/chain-api.md) diff --git a/roadmap/implementers-guide/src/node/backing/statement-distribution.md b/roadmap/implementers-guide/src/node/backing/statement-distribution.md index 39ea1c630d31..4ce3ee518c86 100644 --- a/roadmap/implementers-guide/src/node/backing/statement-distribution.md +++ b/roadmap/implementers-guide/src/node/backing/statement-distribution.md @@ -21,7 +21,7 @@ Output: Implemented as a gossip protocol. Handle updates to our view and peers' views. Neighbor packets are used to inform peers which chain heads we are interested in data for. -It is responsible for distributing signed statements that we have generated and forwarding them, and for detecting a variety of Validator misbehaviors for reporting to [Misbehavior Arbitration](../utility/misbehavior-arbitration.md). During the Backing stage of the inclusion pipeline, it's the main point of contact with peer nodes. On receiving a signed statement from a peer in the same backing group, assuming the peer receipt state machine is in an appropriate state, it sends the Candidate Receipt to the [Candidate Backing subsystem](candidate-backing.md) to handle the validator's statement. On receiving `StatementDistributionMessage::Share` we make sure to send messages to our backing group in addition to random other peers, to ensure a fast backing process and getting all statements quickly for distribution. +It is responsible for distributing signed statements that we have generated and forwarding them, and for detecting a variety of Validator misbehaviors for reporting to the [Provisioner Subsystem](../utility/provisioner.md). During the Backing stage of the inclusion pipeline, it's the main point of contact with peer nodes. On receiving a signed statement from a peer in the same backing group, assuming the peer receipt state machine is in an appropriate state, it sends the Candidate Receipt to the [Candidate Backing subsystem](candidate-backing.md) to handle the validator's statement. On receiving `StatementDistributionMessage::Share` we make sure to send messages to our backing group in addition to random other peers, to ensure a fast backing process and getting all statements quickly for distribution. Track equivocating validators and stop accepting information from them. Establish a data-dependency order: diff --git a/roadmap/implementers-guide/src/node/collators/collation-generation.md b/roadmap/implementers-guide/src/node/collators/collation-generation.md index 0a17a8619ab1..d7c62fee39f8 100644 --- a/roadmap/implementers-guide/src/node/collators/collation-generation.md +++ b/roadmap/implementers-guide/src/node/collators/collation-generation.md @@ -99,7 +99,6 @@ On `ActiveLeavesUpdate`: * If there is no collation generation config, ignore. * Otherwise, for each `activated` head in the update: * Determine if the para is scheduled on any core by fetching the `availability_cores` Runtime API. - > TODO: figure out what to do in the case of occupied cores; see [this issue](https://github.com/paritytech/polkadot/issues/1573). * Determine an occupied core assumption to make about the para. Scheduled cores can make `OccupiedCoreAssumption::Free`. * Use the Runtime API subsystem to fetch the full validation data. * Invoke the `collator`, and use its outputs to produce a `CandidateReceipt`, signed with the configuration's `key`. diff --git a/roadmap/implementers-guide/src/node/disputes/README.md b/roadmap/implementers-guide/src/node/disputes/README.md index 2db891aa216f..a6e126b1534b 100644 --- a/roadmap/implementers-guide/src/node/disputes/README.md +++ b/roadmap/implementers-guide/src/node/disputes/README.md @@ -1,40 +1,18 @@ # Disputes Subsystems -This section is for the node-side subsystems that lead to participation in disputes. There are five major roles that validator nodes must participate in when it comes to disputes - * Detection. Detect bad parablocks, either during candidate backing or approval checking, and initiate a dispute. - * Participation. Participate in active disputes. When a node becomes aware of a dispute, it should recover the data for the disputed block, check the validity of the parablock, and issue a statement regarding the validity of the parablock. - * Distribution. Validators should notify each other of active disputes and relevant statements over the network. - * Submission. When authoring a block, a validator should inspect the state of the parent block and provide any information about disputes that the chain needs as part of the `ParaInherent`. This should initialize new disputes on-chain as necessary. - * Fork-choice and Finality. When observing a block issuing a `DisputeRollback` digest in the header, that branch of the relay chain should be abandoned all the way back to the indicated block. When voting on chains in GRANDPA, no chains that contain blocks with active disputes or disputes that concluded invalid should be voted on. - -## Components - -### Dispute Coordinator - -This component is responsible for coordinating other subsystems around disputes. - -This component should track all statements received from all validators over some window of sessions. This includes backing statements, approval votes, and statements made specifically for disputes. This will be used to identify disagreements or instances where validators conflict with themselves. - -This is responsible for tracking and initiating disputes. Disputes will be initiated either externally by another subsystem which has identified an issue with a parablock or internally upon observing two statements which conflict with each other on the validity of a parablock. - -No more than one statement by each validator on each side of the dispute needs to be stored. That is, validators are allowed to participate on both sides of the dispute, although we won't write code to do so. Such behavior has negative extractable value in the runtime. - -This will notify the dispute participation subsystem of a new dispute if the local validator has not issued any statements on the disputed candidate already. - -Locally authored statements related to disputes will be forwarded to the dispute distribution subsystem. - -This subsystem also provides two further behaviors for the interactions between disputes and fork-choice - - Enhancing the finality voting rule. Given description of a chain and candidates included at different heights in that chain, it returns the `BlockHash` corresponding to the highest `BlockNumber` that there are no disputes before. I expect that we will slightly change `ApprovalVoting::ApprovedAncestor` to return this set and then the target block to vote on will be further constrained by this function. - - Chain roll-backs. Whenever importing new blocks, the header should be scanned for a roll-back digest. If there is one, the chain should be rolled back according to the digest. I expect this would be implemented with a `ChainApi` function and possibly an `ApprovalVoting` function to clean up the approval voting DB. - -### Dispute Participation - -This subsystem ties together the dispute tracker, availability recovery, candidate validation, and dispute distribution subsystems. When notified of a new dispute by the Dispute Tracker, the data should be recovered, the validation code loaded from the relay chain, and the candidate is executed. - -A statement depending on the outcome of the execution is produced, signed, and imported to the dispute tracker. - -### Dispute Distribution - -This is a networking component by which validators notify each other of live disputes and statements on those disputes. - -Validators will in the future distribute votes to each other via the network, but at the moment learn of disputes just from watching the chain. +If approval voting finds an invalid candidate, a dispute is raised. The disputes +subsystems are concerned with the following: + +1. Disputes can be raised +2. Disputes (votes) get propagated to all other validators +3. Votes get recorded as necessary +3. Nodes will participate in disputes in a sensible fashion +4. Finality is stopped while a candidate is being disputed on chain +5. Chains can be reverted in case a dispute concludes invalid +6. Votes are provided to the provisioner for importing on chain, in order for + slashing to work. + +The dispute-coordinator subsystem interfaces with the provisioner and chain +selection to make the bulk of this possible. `dispute-distribution` is concerned +with getting votes out to other validators and receiving them in a spam +resilient way. diff --git a/roadmap/implementers-guide/src/node/disputes/dispute-coordinator.md b/roadmap/implementers-guide/src/node/disputes/dispute-coordinator.md index 260f5843d0e2..7692491fde1f 100644 --- a/roadmap/implementers-guide/src/node/disputes/dispute-coordinator.md +++ b/roadmap/implementers-guide/src/node/disputes/dispute-coordinator.md @@ -9,7 +9,11 @@ In particular the dispute-coordinator is responsible for: - Ensuring that the node is able to raise a dispute in case an invalid candidate is found during approval checking. -- Ensuring approval votes will be recorded. +- Ensuring that backing and approval votes will be recorded on chain. With these + votes on chain we can be certain that appropriate targets for slashing will be + available for concluded disputes. Also, scraping these votes during a dispute + is necessary for critical spam prevention measures. +- Ensuring backing votes will never get overridden by explicit votes. - Coordinating actual participation in a dispute, ensuring that the node participates in any justified dispute in a way that ensures resolution of disputes on the network even in the case of many disputes raised (flood/DoS @@ -17,15 +21,13 @@ In particular the dispute-coordinator is responsible for: - Ensuring disputes resolve, even for candidates on abandoned forks as much as reasonably possible, to rule out "free tries" and thus guarantee our gambler's ruin property. -- Provide an API for chain selection, so we can prevent finalization of any +- Providing an API for chain selection, so we can prevent finalization of any chain which has included candidates for which a dispute is either ongoing or concluded invalid and avoid building on chains with an included invalid candidate. -- Provide an API for retrieving (resolved) disputes, including all votes, both +- Providing an API for retrieving (resolved) disputes, including all votes, both implicit (approval, backing) and explicit dispute votes. So validators can get rewarded/slashed accordingly. -- Ensure backing votes are recorded and will never get overridden by explicit - votes. ## Ensuring That Disputes Can Be Raised @@ -398,11 +400,22 @@ and only if all of the following conditions are satisfied: * the dispute is not confirmed * we haven't cast a vote for the dispute +Whenever any vote on a dispute is imported these conditions are checked. If the +dispute is found not to be potential spam, then spam slots for the disputed candidate hash are cleared. This decrements the spam count for every validator +which had voted invalid. + +To keep spam slots from filling up unnecessarily we want to clear spam slots +whenever a candidate is seen to be backed or included. Fortunately this behavior +is acheived by clearing slots on vote import as described above. Because on chain +backing votes are processed when a block backing the disputed candidate is discovered, spam slots are cleared for every backed candidate. Included +candidates have also been seen as backed on the same fork, so decrementing spam +slots is handled in that case as well. + The reason this works is because we only need to worry about actual dispute votes. Import of backing votes are already rate limited and concern only real -candidates for approval votes a similar argument holds (if they come from +candidates. For approval votes a similar argument holds (if they come from approval-voting), but we also don't import them until a dispute already -concluded. For actual dispute votes, we need two opposing votes, so there must be +concluded. For actual dispute votes we need two opposing votes, so there must be an explicit `invalid` vote in the import. Only a third of the validators can be malicious, so spam disk usage is limited to `2*vote_size*n/3*NUM_SPAM_SLOTS`, with `n` being the number of validators. @@ -516,16 +529,14 @@ We only ever care about disputes for candidates that have been included on at least some chain (became available). This is because the availability system was designed for precisely that: Only with inclusion (availability) we have guarantees about the candidate to actually be available. Because only then we -have guarantees that malicious backers can be reliably checked and slashed. The -system was also designed for non included candidates to not pose any threat to -the system. +have guarantees that malicious backers can be reliably checked and slashed. Also, by design non included candidates do not pose any threat to the system. One could think of an (additional) dispute system to make it possible to dispute any candidate that has been proposed by a validator, no matter whether it got successfully included or even backed. Unfortunately, it would be very brittle (no availability) and also spam protection would be way harder than for the -disputes handled by the dispute-coordinator. In fact all described spam handling -strategies above would simply be not available. +disputes handled by the dispute-coordinator. In fact, all the spam handling +strategies described above would simply be unavailable. It is worth thinking about who could actually raise such disputes anyway: Approval checkers certainly not, as they will only ever check once availability @@ -672,12 +683,17 @@ struct State { ``` ### On startup -When the subsystem is initialised it waits for a new leaf (message `OverseerSignal::ActiveLeaves`). -The leaf is used to initialise a `RollingSessionWindow` instance (contains leaf hash and -`DISPUTE_WINDOW` which is a constant. -Next the active disputes are loaded from the DB. The subsystem checks if there are disputes for -which a local statement is not issued. A list of these is passed to the main loop. +When the subsystem is initialised it waits for a new leaf (message +`OverseerSignal::ActiveLeaves`). The leaf is used to initialise a +`RollingSessionWindow` instance (contains leaf hash and `DISPUTE_WINDOW` which +is a constant). + +Next the active disputes are loaded from the DB and initialize spam slots +accordingly, then for each loaded dispute, we either send a +`DisputeDistribution::SendDispute` if there is a local vote from us available or +if there is none and participation is in order, we push the dispute to +participation. ### The main loop diff --git a/roadmap/implementers-guide/src/node/disputes/dispute-distribution.md b/roadmap/implementers-guide/src/node/disputes/dispute-distribution.md index 6b8e5ec03cf4..3a45f53c45d7 100644 --- a/roadmap/implementers-guide/src/node/disputes/dispute-distribution.md +++ b/roadmap/implementers-guide/src/node/disputes/dispute-distribution.md @@ -339,11 +339,8 @@ coordinator. ### Node Startup -On startup we need to check with the dispute coordinator for any ongoing -disputes and assume we have not yet sent our statement for those. In case we -find an explicit statement from ourselves via -`DisputeCoordinatorMessage::QueryCandidateVotes` we will pretend to just have -received a `SendDispute` message for that candidate. +Nothing special happens on node startup. We expect the `dispute-coordinator` to +inform us about any ongoing disputes via `SendDispute` messages. ## Backing and Approval Votes diff --git a/roadmap/implementers-guide/src/node/utility/chain-selection.md b/roadmap/implementers-guide/src/node/utility/chain-selection.md index 423b5ed406c0..640691e55961 100644 --- a/roadmap/implementers-guide/src/node/utility/chain-selection.md +++ b/roadmap/implementers-guide/src/node/utility/chain-selection.md @@ -8,6 +8,7 @@ This subsystem needs to update its information on the unfinalized chain: * On every leaf-activated signal * On every block-finalized signal * On every `ChainSelectionMessage::Approve` + * On every `ChainSelectionMessage::RevertBlocks` * Periodically, to detect stagnation. Simple implementations of these updates do `O(n_unfinalized_blocks)` disk operations. If the amount of unfinalized blocks is relatively small, the updates should not take very much time. However, in cases where there are hundreds or thousands of unfinalized blocks the naive implementations of these update algorithms would have to be replaced with more sophisticated versions. @@ -24,10 +25,17 @@ Delete data for all orphaned chains and update all metadata descending from the Update the approval status of the referenced block. If the block was stagnant and thus non-viable and is now viable, then the metadata of all of its descendants needs to be updated as well, as they may no longer be stagnant either. Update the set of viable leaves accordingly. +### `ChainSelectionMessage::Leaves` + +Gets all leaves of the chain, i.e. block hashes that are suitable to build upon and have no suitable children. Supplies the leaves in descending order by score. + ### `ChainSelectionMessage::BestLeafContaining` -If the required block is unknown or not viable, then return `None`. -Iterate over all leaves, returning the first leaf containing the required block in its chain, and `None` otherwise. +If the required block is unknown or not viable, then return `None`. Iterate over all leaves in order of descending weight, returning the first leaf containing the required block in its chain, and `None` otherwise. + +### `ChainSelectionMessage::RevertBlocks` +This message indicates that a dispute has concluded against a parachain block candidate. The message passes along a vector containing the block number and block hash of each block where the disputed candidate was included. The passed blocks will be marked as reverted, and their descendants will be marked as non-viable. + ### Periodically diff --git a/roadmap/implementers-guide/src/node/utility/misbehavior-arbitration.md b/roadmap/implementers-guide/src/node/utility/misbehavior-arbitration.md deleted file mode 100644 index 820bafd9d68a..000000000000 --- a/roadmap/implementers-guide/src/node/utility/misbehavior-arbitration.md +++ /dev/null @@ -1,7 +0,0 @@ -# Misbehavior Arbitration - -The Misbehavior Arbitration subsystem collects reports of validator misbehavior, and slashes the stake of both misbehaving validator nodes and false accusers. - -> TODO: It is not yet fully specified; that problem is postponed to a future PR. - -One policy question we've decided even so: in the event that MA has to call all validators to check some block about which some validators disagree, the minority voters all get slashed, and the majority voters all get rewarded. Validators which abstain have a minor slash penalty, but probably not in the same order of magnitude as those who vote wrong. diff --git a/roadmap/implementers-guide/src/node/utility/provisioner.md b/roadmap/implementers-guide/src/node/utility/provisioner.md index e477a652a60e..36747678106e 100644 --- a/roadmap/implementers-guide/src/node/utility/provisioner.md +++ b/roadmap/implementers-guide/src/node/utility/provisioner.md @@ -30,7 +30,14 @@ Dispute resolution is complex and is explained in substantially more detail [her ## Protocol -Input: [`ProvisionerMessage`](../../types/overseer-protocol.md#provisioner-message). Backed candidates come from the [Candidate Backing subsystem](../backing/candidate-backing.md), signed bitfields come from the [Bitfield Distribution subsystem](../availability/bitfield-distribution.md), and misbehavior reports and disputes come from the [Misbehavior Arbitration subsystem](misbehavior-arbitration.md). +Input: [`ProvisionerMessage`](../../types/overseer-protocol.md#provisioner-message). Backed candidates come from the [Candidate Backing subsystem](../backing/candidate-backing.md), signed bitfields come from the [Bitfield Distribution subsystem](../availability/bitfield-distribution.md), and disputes come from the [Disputes Subsystem](../disputes/dispute-coordinator.md). Misbehavior reports are currently sent from the [Candidate Backing subsystem](../backing/candidate-backing.md) and contain the following misbehaviors: + +1. `Misbehavior::ValidityDoubleVote` +2. `Misbehavior::MultipleCandidates` +3. `Misbehavior::UnauthorizedStatement` +4. `Misbehavior::DoubleSign` + +But we choose not to punish these forms of misbehavior for the time being. Risks from misbehavior are sufficiently mitigated at the protocol level via reputation changes. Punitive actions here may become desirable enough to dedicate time to in the future. At initialization, this subsystem has no outputs. @@ -73,7 +80,7 @@ The end result of this process is a vector of `BackedCandidate`s, sorted in orde This is the point at which the block author provides further votes to active disputes or initiates new disputes in the runtime state. -The block-authoring logic of the runtime has an extra step between handling the inherent-data and producing the actual inherent call, which we assume performs the work of filtering out disputes which are not relevant to the on-chain state. +The block-authoring logic of the runtime has an extra step between handling the inherent-data and producing the actual inherent call, which we assume performs the work of filtering out disputes which are not relevant to the on-chain state. Backing votes are always kept in the dispute statement set. This ensures we punish the maximum number of misbehaving backers. To select disputes: diff --git a/roadmap/implementers-guide/src/node/utility/pvf-prechecker.md b/roadmap/implementers-guide/src/node/utility/pvf-prechecker.md index fd75ce9e3804..3cae12e65f33 100644 --- a/roadmap/implementers-guide/src/node/utility/pvf-prechecker.md +++ b/roadmap/implementers-guide/src/node/utility/pvf-prechecker.md @@ -16,14 +16,31 @@ To be relevant for the subsystem, a PVF must be returned by the [`pvfs_require_p When a PVF just becomes relevant, the subsystem will send a message to the [Candidate Validation] subsystem asking for the pre-check. -Upon receving a message from the candidate-validation subsystem, the pre-checker will note down that the PVF has its judgement and will also sign and submit a [`PvfCheckStatement`][PvfCheckStatement] via the [`submit_pvf_check_statement` runtime API][PVF pre-checking runtime API]. In case, a judgement was received for a PVF that is no longer in view it is ignored. It is possible that the candidate validation was not able to check the PVF. In that case, the PVF pre-checker will abstain and won't submit any check statements. +Upon receving a message from the candidate-validation subsystem, the pre-checker will note down that the PVF has its judgement and will also sign and submit a [`PvfCheckStatement`][PvfCheckStatement] via the [`submit_pvf_check_statement` runtime API][PVF pre-checking runtime API]. In case, a judgement was received for a PVF that is no longer in view it is ignored. -Since a vote only is valid during [one session][overview], the subsystem will have to resign and submit the statements for for the new session. The new session is assumed to be started if at least one of the leaves has a greater session index that was previously observed in any of the leaves. +Since a vote only is valid during [one session][overview], the subsystem will have to resign and submit the statements for the new session. The new session is assumed to be started if at least one of the leaves has a greater session index that was previously observed in any of the leaves. -The subsystem tracks all the statement that it submitted within a session. If for some reason a PVF became irrelevant and then becomes relevant again, the subsystem will not submit a new statement for that PVF within the same session. +The subsystem tracks all the statements that it submitted within a session. If for some reason a PVF became irrelevant and then becomes relevant again, the subsystem will not submit a new statement for that PVF within the same session. If the node is not in the active validator set, it will still perform all the checks. However, it will only submit the check statements when the node is in the active validator set. +### Rejecting failed PVFs + +It is possible that the candidate validation was not able to check the PVF, e.g. if it timed out. In that case, the PVF pre-checker will vote against it. This is considered safe, as there is no slashing for being on the wrong side of a pre-check vote. + +Rejecting instead of abstaining is better in several ways: + +1. Conclusion is reached faster - we have actual votes, instead of relying on a timeout. +1. Being strict in pre-checking makes it safer to be more lenient in preparation errors afterwards. Hence we have more leeway in avoiding raising dubious disputes, without making things less secure. + +Also, if we only abstain, an attacker can specially craft a PVF wasm blob so that it will fail on e.g. 50% of the validators. In that case a supermajority will never be reached and the vote will repeat multiple times, most likely with the same result (since all votes are cleared on a session change). This is avoided by rejecting failed PVFs, and by only requiring 1/3 of validators to reject a PVF to reach a decision. + +### Note on Disputes + +Having a pre-checking phase allows us to make certain assumptions later when preparing the PVF for execution. If a runtime passed pre-checking, then we know that the runtime should be valid, and therefore any issue during preparation for execution can be assumed to be a local problem on the current node. + +For this reason, even deterministic preparation errors should not trigger disputes. And since we do not dispute as a result of the pre-checking phase, as stated above, it should be impossible for preparation in general to result in disputes. + [overview]: ../../pvf-prechecking.md [Runtime API]: runtime-api.md [PVF pre-checking runtime API]: ../../runtime-api/pvf-prechecking.md diff --git a/roadmap/implementers-guide/src/protocol-disputes.md b/roadmap/implementers-guide/src/protocol-disputes.md index 965d606340a8..76791ac16a4e 100644 --- a/roadmap/implementers-guide/src/protocol-disputes.md +++ b/roadmap/implementers-guide/src/protocol-disputes.md @@ -13,11 +13,15 @@ Disputes differ from backing and approval process (and can not be part of those) Every dispute stems from a disagreement among two or more validators. If a bad actor creates a bad block, but the bad actor never distributes it to honest validators, then nobody will dispute it. Of course, such a situation is not even an attack on the network, so we don't need to worry about defending against it. -From most to least important, here are the attack scenarios we are interested in identifying and deterring: +We are interested in identifying and deterring the following attack scenario: * A parablock included on a branch of the relay chain is bad + +We are also interested in identifying these additional scenarios: * A parablock backed on a branch of the relay chain is bad * A parablock seconded, but not backed on any branch of the relay chain, is bad. +Punishing misbehavior in the latter two scenarios doesn't effect our security guarantees and introduces substantial technical challenges as described in the `No Disputes for Non Included Candidates` section of [Dispute Coordinator](./node/disputes/dispute-coordinator.md). We therefore choose to punt on disputes in these cases, instead favoring the protocol simplicity resulting from only punishing in the first scenario. + As covered in the [protocol overview](./protocol-overview.md), checking a parachain block requires 3 pieces of data: the parachain validation code, the [`AvailableData`](types/availability.md), and the [`CandidateReceipt`](types/candidate.md). The validation code is available on-chain, and published ahead of time, so that no two branches of the relay chain have diverging views of the validation code for a given parachain. Note that only for the first scenario, where the parablock has been included on a branch of the relay chain, is the data necessarily available. Thus, dispute processes should begin with an availability process to ensure availability of the `AvailableData`. This availability process will conclude quickly if the data is already available. If the data is not already available, then the initiator of the dispute must make it available. Disputes have both an on-chain and an off-chain component. Slashing and punishment is handled on-chain, so votes by validators on either side of the dispute must be placed on-chain. Furthermore, a dispute on one branch of the relay chain should be transposed to all other active branches of the relay chain. The fact that slashing occurs _in all histories_ is crucial for deterring attempts to attack the network. The attacker should not be able to escape with their funds because the network has moved on to another branch of the relay chain where no attack was attempted. diff --git a/roadmap/implementers-guide/src/pvf-prechecking.md b/roadmap/implementers-guide/src/pvf-prechecking.md index 4dce61d2a83b..155d32d52898 100644 --- a/roadmap/implementers-guide/src/pvf-prechecking.md +++ b/roadmap/implementers-guide/src/pvf-prechecking.md @@ -29,9 +29,9 @@ The problem is solved by having a pre-checking process which is run when a new v Before any of those operations finish, the PVF pre-checking vote is initiated. The PVF pre-checking vote is identified by the PVF code hash that is being voted on. If there is already PVF pre-checking process running, then no new PVF pre-checking vote will be started. Instead, the operation just subscribes to the existing vote. -The pre-checking vote can be concluded either by obtaining a supermajority or if it expires. +The pre-checking vote can be concluded either by obtaining a threshold of votes for a decision, or if it expires. The threshold to accept is a supermajority of 2/3 of validators. We reject once a supermajority is no longer possible. -Each validator checks the list of PVFs available for voting. The vote is binary, i.e. accept or reject a given PVF. As soon as the supermajority of votes are collected for one of the sides of the vote, the voting is concluded in that direction and the effects of the voting are enacted. +Each validator checks the list of PVFs available for voting. The vote is binary, i.e. accept or reject a given PVF. As soon as the threshold of votes are collected for one of the sides of the vote, the voting is concluded in that direction and the effects of the voting are enacted. Only validators from the active set can participate in the vote. The set of active validators can change each session. That's why we reset the votes each session. A voting that observed a certain number of sessions will be rejected. @@ -46,7 +46,7 @@ The logic described above is implemented by the [paras] module. On the node-side, there is a PVF pre-checking [subsystem][pvf-prechecker-subsystem] that scans the chain for new PVFs via using [runtime APIs][pvf-runtime-api]. Upon finding a new PVF, the subsystem will initiate a PVF pre-checking request and wait for the result. Whenever the result is obtained, the subsystem will use the [runtime API][pvf-runtime-api] to submit a vote for the PVF. The vote is an unsigned transaction. The vote will be distributed via the gossip similarly to a normal transaction. Eventually a block producer will include the vote into the block where it will be handled by the [runtime][paras]. -## Pre-checking Summary +## Summary Parachains' and parathreads' validation function is described by a wasm module that we refer to as a PVF. @@ -54,7 +54,7 @@ In order to make the PVF usable for candidate validation it has to be registered As part of the registration process, it has to go through pre-checking. Pre-checking is a game of attempting preparation and reporting the results back on-chain. -We define preparation as a process that: validates the consistency of the wasm binary (aka prevalidation) and the compilation of the wasm module into machine code (refered to as artifact). +We define preparation as a process that: validates the consistency of the wasm binary (aka prevalidation) and the compilation of the wasm module into machine code (referred to as an artifact). Besides pre-checking, preparation can also be triggered by execution, since a compiled artifact is needed for the execution. If an artifact already exists, execution will skip preparation. If it does do preparation, execution uses a more lenient timeout than preparation, to avoid the situation where honest validators fail on valid, pre-checked PVFs. diff --git a/roadmap/implementers-guide/src/runtime/disputes.md b/roadmap/implementers-guide/src/runtime/disputes.md index 83ca86b36b04..b775bfbfcf0e 100644 --- a/roadmap/implementers-guide/src/runtime/disputes.md +++ b/roadmap/implementers-guide/src/runtime/disputes.md @@ -37,12 +37,6 @@ Disputes: double_map (SessionIndex, CandidateHash) -> Option, // All included blocks on the chain, as well as the block number in this chain that // should be reverted back to if the candidate is disputed and determined to be invalid. Included: double_map (SessionIndex, CandidateHash) -> Option, -// Maps session indices to a vector indicating the number of potentially-spam disputes -// each validator is participating in. Potentially-spam disputes are remote disputes which have -// fewer than `byzantine_threshold + 1` validators. -// -// The i'th entry of the vector corresponds to the i'th validator in the session. -SpamSlots: map SessionIndex -> Option>, // Whether the chain is frozen or not. Starts as `None`. When this is `Some`, // the chain will not accept any new parachain blocks for backing or inclusion, // and its value indicates the last valid block number in the chain. @@ -55,50 +49,45 @@ Frozen: Option, ## Session Change 1. If the current session is not greater than `config.dispute_period + 1`, nothing to do here. -1. Set `pruning_target = current_session - config.dispute_period - 1`. We add the extra `1` because we want to keep things for `config.dispute_period` _full_ sessions. +1. Set `pruning_target = current_session - config.dispute_period - 1`. We add the extra `1` because we want to keep things for `config.dispute_period` _full_ sessions. The stuff at the end of the most recent session has been around for a little over 0 sessions, not a little over 1. 1. If `LastPrunedSession` is `None`, then set `LastPrunedSession` to `Some(pruning_target)` and return. -1. Otherwise, clear out all disputes, included candidates, and `SpamSlots` entries in the range `last_pruned..=pruning_target` and set `LastPrunedSession` to `Some(pruning_target)`. +2. Otherwise, clear out all disputes and included candidates entries in the range `last_pruned..=pruning_target` and set `LastPrunedSession` to `Some(pruning_target)`. ## Block Initialization -1. Iterate through all disputes. If any have not concluded and started more than `config.dispute_conclusion_by_timeout_period` blocks ago, set them to `Concluded` and mildly punish all validators associated, as they have failed to distribute available data. If the `Included` map does not contain the candidate and there are fewer than `byzantine_threshold + 1` participating validators, reduce `SpamSlots` for all participating validators. +1. Iterate through all disputes. If any have not concluded and started more than `config.dispute_conclusion_by_timeout_period` blocks ago, set them to `Concluded` and mildly punish all validators associated, as they have failed to distribute available data. ## Routines * `filter_multi_dispute_data(MultiDisputeStatementSet) -> MultiDisputeStatementSet`: 1. Takes a `MultiDisputeStatementSet` and filters it down to a `MultiDisputeStatementSet` that satisfies all the criteria of `provide_multi_dispute_data`. That is, eliminating - ancient votes, votes which overwhelm the maximum amount of spam slots, and duplicates. - This can be used by block authors to create the final submission in a block which is + ancient votes, duplicates and unconfirmed disputes. + This can be used by block authors to create the final submission in a block which is guaranteed to pass the `provide_multi_dispute_data` checks. * `provide_multi_dispute_data(MultiDisputeStatementSet) -> Vec<(SessionIndex, Hash)>`: 1. Pass on each dispute statement set to `provide_dispute_data`, propagating failure. - 1. Return a list of all candidates who just had disputes initiated. + 2. Return a list of all candidates who just had disputes initiated. * `provide_dispute_data(DisputeStatementSet) -> bool`: Provide data to an ongoing dispute or initiate a dispute. - 1. All statements must be issued under the correct session for the correct candidate. + 1. All statements must be issued under the correct session for the correct candidate. 1. `SessionInfo` is used to check statement signatures and this function should fail if any signatures are invalid. 1. If there is no dispute under `Disputes`, create a new `DisputeState` with blank bitfields. 1. If `concluded_at` is `Some`, and is `concluded_at + config.post_conclusion_acceptance_period < now`, return false. - 1. If the overlap of the validators in the `DisputeStatementSet` and those already present in the `DisputeState` is fewer in number than `byzantine_threshold + 1` and the candidate is not present in the `Included` map - 1. increment `SpamSlots` for each validator in the `DisputeStatementSet` which is not already in the `DisputeState`. Initialize the `SpamSlots` to a zeroed vector first, if necessary. do not increment `SpamSlots` if the candidate is local. - 1. If the value for any spam slot exceeds `config.dispute_max_spam_slots`, return false. - 1. If the overlap of the validators in the `DisputeStatementSet` and those already present in the `DisputeState` is at least `byzantine_threshold + 1`, the `DisputeState` has fewer than `byzantine_threshold + 1` validators, and the candidate is not present in the `Included` map, then decrease `SpamSlots` by 1 for each validator in the `DisputeState`. - 1. Import all statements into the dispute. This should fail if any statements are duplicate or if the corresponding bit for the corresponding validator is set in the dispute already. - 1. If `concluded_at` is `None`, reward all statements. - 1. If `concluded_at` is `Some`, reward all statements slightly less. - 1. If either side now has supermajority and did not previously, slash the other side. This may be both sides, and we support this possibility in code, but note that this requires validators to participate on both sides which has negative expected value. Set `concluded_at` to `Some(now)` if it was `None`. - 1. If just concluded against the candidate and the `Included` map contains `(session, candidate)`: invoke `revert_and_freeze` with the stored block number. - 1. Return true if just initiated, false otherwise. + 2. Import all statements into the dispute. This should fail if any statements are duplicate or if the corresponding bit for the corresponding validator is set in the dispute already. + 3. If `concluded_at` is `None`, reward all statements. + 4. If `concluded_at` is `Some`, reward all statements slightly less. + 5. If either side now has supermajority and did not previously, slash the other side. This may be both sides, and we support this possibility in code, but note that this requires validators to participate on both sides which has negative expected value. Set `concluded_at` to `Some(now)` if it was `None`. + 6. If just concluded against the candidate and the `Included` map contains `(session, candidate)`: invoke `revert_and_freeze` with the stored block number. + 7. Return true if just initiated, false otherwise. * `disputes() -> Vec<(SessionIndex, CandidateHash, DisputeState)>`: Get a list of all disputes and info about dispute state. 1. Iterate over all disputes in `Disputes` and collect into a vector. * `note_included(SessionIndex, CandidateHash, included_in: BlockNumber)`: 1. Add `(SessionIndex, CandidateHash)` to the `Included` map with `included_in - 1` as the value. - 1. If there is a dispute under `(Sessionindex, CandidateHash)` with fewer than `byzantine_threshold + 1` participating validators, decrease `SpamSlots` by 1 for each validator in the `DisputeState`. 1. If there is a dispute under `(SessionIndex, CandidateHash)` that has concluded against the candidate, invoke `revert_and_freeze` with the stored block number. * `concluded_invalid(SessionIndex, CandidateHash) -> bool`: Returns whether a candidate has already concluded a dispute in the negative. @@ -111,3 +100,42 @@ Frozen: Option, 1. If `is_frozen()` return. 1. Set `Frozen` to `Some(BlockNumber)` to indicate a rollback to the block number. 1. Issue a `Revert(BlockNumber + 1)` log to indicate a rollback of the block's child in the header chain, which is the same as a rollback to the block number. + +# Disputes filtering + +All disputes delivered to the runtime by the client are filtered before the actual import. In this context actual import +means persisted in the runtime storage. The filtering has got two purposes: +- Limit the amount of data saved onchain. +- Prevent persisting malicious dispute data onchain. + +*Implementation note*: Filtering is performed in function `filter_dispute_data` from `Disputes` pallet. + +The filtering is performed on the whole statement set which is about to be imported onchain. The following filters are +applied: +1. Remove ancient disputes - if a dispute is concluded before the block number indicated in `OLDEST_ACCEPTED` parameter + it is removed from the set. `OLDEST_ACCEPTED` is a runtime configuration option. + *Implementation note*: `dispute_post_conclusion_acceptance_period` from + `HostConfiguration` is used in the current Polkadot/Kusama implementation. +2. Remove votes from unknown validators. If there is a vote from a validator which wasn't an authority in the session + where the dispute was raised - they are removed. Please note that this step removes only single votes instead of + removing the whole dispute. +3. Remove one sided disputes - if a dispute doesn't contain two opposing votes it is not imported onchain. This serves + as a measure not to import one sided disputes. A dispute is raised only if there are two opposing votes so if the + client is not sending them the dispute is a potential spam. +4. Remove unconfirmed disputes - if a dispute contains less votes than the byzantine threshold it is removed. This is + also a spam precaution. A legitimate client will send only confirmed disputes to the runtime. + +# Rewards and slashing + +After the disputes are filtered the validators participating in the disputes are rewarded and more importantly the +offenders are slashed. Generally there can be two types of punishments: +* "against valid" - the offender claimed that a valid candidate is invalid. +* "for invalid" - the offender claimed that an invalid candidate is valid. + +A dispute might be inconclusive. This means that it has timed out without being confirmed. A confirmed dispute is one +containing votes more than the byzantine threshold (1/3 of the active validators). Validators participating in +inconclusive disputes are not slashed. Thanks to the applied filtering (described in the previous section) one can be +confident that there are no spam disputes in the runtime. So if a validator is not voting it is due to another reason +(e.g. being under DoS attack). There is no reason to punish such validators with a slash. + +*Implementation note*: Slashing is performed in `process_checked_dispute_data` from `Disputes` pallet. \ No newline at end of file diff --git a/roadmap/implementers-guide/src/types/overseer-protocol.md b/roadmap/implementers-guide/src/types/overseer-protocol.md index 41d624670363..7b25b0ae7828 100644 --- a/roadmap/implementers-guide/src/types/overseer-protocol.md +++ b/roadmap/implementers-guide/src/types/overseer-protocol.md @@ -309,7 +309,8 @@ enum CandidateBackingMessage { /// The PoV is expected to match the `pov_hash` in the descriptor. Second(Hash, CandidateReceipt, PoV), /// Note a peer validator's statement about a particular candidate. Disagreements about validity must be escalated - /// to a broader check by Misbehavior Arbitration. Agreements are simply tallied until a quorum is reached. + /// to a broader check by the Disputes Subsystem, though that escalation is deferred until the approval voting + /// stage to guarantee availability. Agreements are simply tallied until a quorum is reached. Statement(Statement), } ``` diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index db20edcd8716..8f3ec8e50b08 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -7,26 +7,26 @@ edition.workspace = true [dependencies] jsonrpsee = { version = "0.16.2", features = ["server"] } polkadot-primitives = { path = "../primitives" } -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-consensus-babe-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-consensus-epochs = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-finality-grandpa = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-finality-grandpa-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-sync-state-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -txpool-api = { package = "sc-transaction-pool-api", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -frame-rpc-system = { package = "substrate-frame-rpc-system", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -mmr-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -beefy-gadget = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -beefy-gadget-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -substrate-state-trie-migration-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-consensus-babe-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-consensus-beefy = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-consensus-beefy-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-consensus-epochs = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-consensus-grandpa = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-consensus-grandpa-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-sync-state-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +txpool-api = { package = "sc-transaction-pool-api", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +frame-rpc-system = { package = "substrate-frame-rpc-system", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +mmr-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +substrate-state-trie-migration-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } diff --git a/rpc/src/lib.rs b/rpc/src/lib.rs index 43efefcae15b..bcd8adabe933 100644 --- a/rpc/src/lib.rs +++ b/rpc/src/lib.rs @@ -21,10 +21,13 @@ use std::sync::Arc; use jsonrpsee::RpcModule; -use polkadot_primitives::v2::{AccountId, Balance, Block, BlockNumber, Hash, Nonce}; +use polkadot_primitives::{AccountId, Balance, Block, BlockNumber, Hash, Nonce}; use sc_client_api::AuxStore; use sc_consensus_babe::{BabeConfiguration, Epoch}; -use sc_finality_grandpa::FinalityProofProvider; +use sc_consensus_beefy::communication::notification::{ + BeefyBestBlockStream, BeefyVersionedFinalityProofStream, +}; +use sc_consensus_grandpa::FinalityProofProvider; pub use sc_rpc::{DenyUnsafe, SubscriptionTaskExecutor}; use sp_api::ProvideRuntimeApi; use sp_block_builder::BlockBuilder; @@ -50,20 +53,17 @@ pub struct BabeDeps { /// Dependencies for GRANDPA pub struct GrandpaDeps { /// Voting round info. - pub shared_voter_state: sc_finality_grandpa::SharedVoterState, + pub shared_voter_state: sc_consensus_grandpa::SharedVoterState, /// Authority set info. - pub shared_authority_set: sc_finality_grandpa::SharedAuthoritySet, + pub shared_authority_set: sc_consensus_grandpa::SharedAuthoritySet, /// Receives notifications about justification events from Grandpa. - pub justification_stream: sc_finality_grandpa::GrandpaJustificationStream, + pub justification_stream: sc_consensus_grandpa::GrandpaJustificationStream, /// Executor to drive the subscription manager in the Grandpa RPC handler. pub subscription_executor: sc_rpc::SubscriptionTaskExecutor, /// Finality proof provider. pub finality_provider: Arc>, } -use beefy_gadget::communication::notification::{ - BeefyBestBlockStream, BeefyVersionedFinalityProofStream, -}; /// Dependencies for BEEFY pub struct BeefyDeps { /// Receives notifications about finality proof events from BEEFY. @@ -117,12 +117,12 @@ where B: sc_client_api::Backend + Send + Sync + 'static, B::State: sc_client_api::StateBackend>, { - use beefy_gadget_rpc::{Beefy, BeefyApiServer}; use frame_rpc_system::{System, SystemApiServer}; use mmr_rpc::{Mmr, MmrApiServer}; use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApiServer}; use sc_consensus_babe_rpc::{Babe, BabeApiServer}; - use sc_finality_grandpa_rpc::{Grandpa, GrandpaApiServer}; + use sc_consensus_beefy_rpc::{Beefy, BeefyApiServer}; + use sc_consensus_grandpa_rpc::{Grandpa, GrandpaApiServer}; use sc_sync_state_rpc::{SyncState, SyncStateApiServer}; use substrate_state_trie_migration_rpc::{StateMigration, StateMigrationApiServer}; diff --git a/runtime/common/Cargo.toml b/runtime/common/Cargo.toml index c922fead1b95..2df5af652caf 100644 --- a/runtime/common/Cargo.toml +++ b/runtime/common/Cargo.toml @@ -7,43 +7,41 @@ edition.workspace = true [dependencies] impl-trait-for-tuples = "0.2.2" bitvec = { version = "1.0.0", default-features = false, features = ["alloc"] } -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["derive"] } log = { version = "0.4.17", default-features = false } rustc-hex = { version = "2.1.0", default-features = false } scale-info = { version = "2.1.2", default-features = false, features = ["derive"] } -serde = { version = "1.0.137", default-features = false } +serde = { version = "1.0.139", default-features = false } serde_derive = { version = "1.0.117", optional = true } static_assertions = "1.1.0" -beefy-primitives = { git = "https://github.com/paritytech/substrate", default-features = false, package = "sp-beefy" , branch = "polkadot-v0.9.36" } -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-std = { package = "sp-std", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-npos-elections = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-std = { package = "sp-std", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-npos-elections = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } -pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-staking-reward-fn = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-vesting = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-treasury = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-election-provider-multi-phase = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-beefy-mmr = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-election-provider-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-bags-list = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-fast-unstake = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-staking-reward-fn = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-vesting = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-treasury = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-election-provider-multi-phase = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-election-provider-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } -frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } -pallet-babe = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } +pallet-babe = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } primitives = { package = "polkadot-primitives", path = "../../primitives", default-features = false } libsecp256k1 = { version = "0.7.0", default-features = false } @@ -54,10 +52,10 @@ xcm = { path = "../../xcm", default-features = false } [dev-dependencies] hex-literal = "0.3.4" -frame-support-test = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -pallet-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -pallet-treasury = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +frame-support-test = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +pallet-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +pallet-treasury = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } serde_json = "1.0.81" libsecp256k1 = "0.7.0" test-helpers = { package = "polkadot-primitives-test-helpers", path = "../../primitives/test-helpers" } @@ -82,8 +80,8 @@ std = [ "frame-support/std", "pallet-authorship/std", "pallet-balances/std", - "pallet-beefy-mmr/std", "pallet-session/std", + "pallet-fast-unstake/std", "pallet-staking/std", "pallet-staking-reward-fn/std", "pallet-timestamp/std", @@ -100,7 +98,6 @@ std = [ "runtime-parachains/std", "xcm/std", "sp-npos-elections/std", - "pallet-bags-list/std" ] runtime-benchmarks = [ "libsecp256k1/hmac", @@ -110,7 +107,7 @@ runtime-benchmarks = [ "frame-system/runtime-benchmarks", "runtime-parachains/runtime-benchmarks", "pallet-babe/runtime-benchmarks", - "pallet-bags-list/runtime-benchmarks", + "pallet-fast-unstake/runtime-benchmarks" ] try-runtime = [ "runtime-parachains/try-runtime", @@ -122,4 +119,5 @@ try-runtime = [ "pallet-vesting/try-runtime", "pallet-transaction-payment/try-runtime", "pallet-treasury/try-runtime", + "pallet-fast-unstake/try-runtime", ] diff --git a/runtime/common/slot_range_helper/Cargo.toml b/runtime/common/slot_range_helper/Cargo.toml index 77ad48851e19..8dd523c42cf3 100644 --- a/runtime/common/slot_range_helper/Cargo.toml +++ b/runtime/common/slot_range_helper/Cargo.toml @@ -7,9 +7,9 @@ edition.workspace = true [dependencies] paste = "1.0" enumn = "0.1.5" -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["derive"] } -sp-std = { package = "sp-std", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["derive"] } +sp-std = { package = "sp-std", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } [features] default = ["std"] diff --git a/runtime/common/src/assigned_slots.rs b/runtime/common/src/assigned_slots.rs index 9be227a37352..96e14820f751 100644 --- a/runtime/common/src/assigned_slots.rs +++ b/runtime/common/src/assigned_slots.rs @@ -32,7 +32,7 @@ use frame_support::{pallet_prelude::*, traits::Currency}; use frame_system::pallet_prelude::*; pub use pallet::*; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; -use primitives::v2::Id as ParaId; +use primitives::Id as ParaId; use runtime_parachains::{ configuration, paras::{self}, @@ -78,7 +78,6 @@ pub mod pallet { use super::*; #[pallet::pallet] - #[pallet::generate_store(pub(super) trait Store)] pub struct Pallet(_); #[pallet::config] @@ -200,6 +199,7 @@ pub mod pallet { impl Pallet { // TODO: Benchmark this /// Assign a permanent parachain slot and immediately create a lease for it. + #[pallet::call_index(0)] #[pallet::weight(((MAXIMUM_BLOCK_WEIGHT / 10) as Weight, DispatchClass::Operational))] pub fn assign_perm_parachain_slot(origin: OriginFor, id: ParaId) -> DispatchResult { T::AssignSlotOrigin::ensure_origin(origin)?; @@ -258,6 +258,7 @@ pub mod pallet { /// Assign a temporary parachain slot. The function tries to create a lease for it /// immediately if `SlotLeasePeriodStart::Current` is specified, and if the number /// of currently active temporary slots is below `MaxTemporarySlotPerLeasePeriod`. + #[pallet::call_index(1)] #[pallet::weight(((MAXIMUM_BLOCK_WEIGHT / 10) as Weight, DispatchClass::Operational))] pub fn assign_temp_parachain_slot( origin: OriginFor, @@ -341,6 +342,7 @@ pub mod pallet { // TODO: Benchmark this /// Unassign a permanent or temporary parachain slot + #[pallet::call_index(2)] #[pallet::weight(((MAXIMUM_BLOCK_WEIGHT / 10) as Weight, DispatchClass::Operational))] pub fn unassign_parachain_slot(origin: OriginFor, id: ParaId) -> DispatchResult { T::AssignSlotOrigin::ensure_origin(origin.clone())?; @@ -546,7 +548,7 @@ mod tests { use frame_support::{assert_noop, assert_ok, parameter_types}; use frame_system::EnsureRoot; use pallet_balances; - use primitives::v2::{BlockNumber, Header}; + use primitives::{BlockNumber, Header}; use runtime_parachains::{ configuration as parachains_configuration, paras as parachains_paras, shared as parachains_shared, diff --git a/runtime/common/src/auctions.rs b/runtime/common/src/auctions.rs index f9181a7eac7b..a75ca812f7b0 100644 --- a/runtime/common/src/auctions.rs +++ b/runtime/common/src/auctions.rs @@ -30,7 +30,7 @@ use frame_support::{ }; pub use pallet::*; use parity_scale_codec::Decode; -use primitives::v2::Id as ParaId; +use primitives::Id as ParaId; use sp_runtime::traits::{CheckedSub, One, Saturating, Zero}; use sp_std::{mem::swap, prelude::*}; @@ -84,7 +84,6 @@ pub mod pallet { use frame_system::{ensure_root, ensure_signed, pallet_prelude::*}; #[pallet::pallet] - #[pallet::generate_store(pub(super) trait Store)] pub struct Pallet(_); /// The module's configuration trait. @@ -253,6 +252,7 @@ pub mod pallet { /// This can only happen when there isn't already an auction in progress and may only be /// called by the root origin. Accepts the `duration` of this auction and the /// `lease_period_index` of the initial lease period of the four that are to be auctioned. + #[pallet::call_index(0)] #[pallet::weight((T::WeightInfo::new_auction(), DispatchClass::Operational))] pub fn new_auction( origin: OriginFor, @@ -279,6 +279,7 @@ pub mod pallet { /// absolute lease period index value, not an auction-specific offset. /// - `amount` is the amount to bid to be held as deposit for the parachain should the /// bid win. This amount is held throughout the range. + #[pallet::call_index(1)] #[pallet::weight(T::WeightInfo::bid())] pub fn bid( origin: OriginFor, @@ -296,6 +297,7 @@ pub mod pallet { /// Cancel an in-progress auction. /// /// Can only be called by Root origin. + #[pallet::call_index(2)] #[pallet::weight(T::WeightInfo::cancel_auction())] pub fn cancel_auction(origin: OriginFor) -> DispatchResult { ensure_root(origin)?; @@ -681,7 +683,7 @@ mod tests { }; use frame_system::{EnsureRoot, EnsureSignedBy}; use pallet_balances; - use primitives::v2::{BlockNumber, Header, Id as ParaId}; + use primitives::{BlockNumber, Header, Id as ParaId}; use sp_core::H256; use sp_runtime::traits::{BlakeTwo256, IdentityLookup}; use std::{cell::RefCell, collections::BTreeMap}; @@ -1727,7 +1729,7 @@ mod benchmarking { use frame_system::RawOrigin; use sp_runtime::{traits::Bounded, SaturatedConversion}; - use frame_benchmarking::{account, benchmarks, whitelisted_caller}; + use frame_benchmarking::{account, benchmarks, whitelisted_caller, BenchmarkError}; fn assert_last_event(generic_event: ::RuntimeEvent) { let events = frame_system::Pallet::::events(); @@ -1783,7 +1785,8 @@ mod benchmarking { new_auction { let duration = T::BlockNumber::max_value(); let lease_period_index = LeasePeriodOf::::max_value(); - let origin = T::InitiateOrigin::successful_origin(); + let origin = + T::InitiateOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?; }: _(origin, duration, lease_period_index) verify { assert_last_event::(Event::::AuctionStarted { @@ -1802,7 +1805,8 @@ mod benchmarking { // Create a new auction let duration = T::BlockNumber::max_value(); let lease_period_index = LeasePeriodOf::::zero(); - let origin = T::InitiateOrigin::successful_origin(); + let origin = T::InitiateOrigin::try_successful_origin() + .expect("InitiateOrigin has no successful origin required for the benchmark"); Auctions::::new_auction(origin, duration, lease_period_index)?; let para = ParaId::from(0); @@ -1854,7 +1858,8 @@ mod benchmarking { let duration: T::BlockNumber = lease_length / 2u32.into(); let lease_period_index = LeasePeriodOf::::zero(); let now = frame_system::Pallet::::block_number(); - let origin = T::InitiateOrigin::successful_origin(); + let origin = T::InitiateOrigin::try_successful_origin() + .expect("InitiateOrigin has no successful origin required for the benchmark"); Auctions::::new_auction(origin, duration, lease_period_index)?; fill_winners::(lease_period_index); @@ -1877,7 +1882,7 @@ mod benchmarking { pallet_babe::Pallet::::on_initialize(duration + now + T::EndingPeriod::get()); let authorities = pallet_babe::Pallet::::authorities(); let next_authorities = authorities.clone(); - pallet_babe::Pallet::::enact_epoch_change(authorities, next_authorities); + pallet_babe::Pallet::::enact_epoch_change(authorities, next_authorities, None); } }: { @@ -1898,7 +1903,8 @@ mod benchmarking { let duration: T::BlockNumber = lease_length / 2u32.into(); let lease_period_index = LeasePeriodOf::::zero(); let now = frame_system::Pallet::::block_number(); - let origin = T::InitiateOrigin::successful_origin(); + let origin = T::InitiateOrigin::try_successful_origin() + .expect("InitiateOrigin has no successful origin required for the benchmark"); Auctions::::new_auction(origin, duration, lease_period_index)?; fill_winners::(lease_period_index); diff --git a/runtime/common/src/claims.rs b/runtime/common/src/claims.rs index 1bb5b0cdc8d3..82bca143e18b 100644 --- a/runtime/common/src/claims.rs +++ b/runtime/common/src/claims.rs @@ -23,7 +23,7 @@ use frame_support::{ }; pub use pallet::*; use parity_scale_codec::{Decode, Encode}; -use primitives::v2::ValidityError; +use primitives::ValidityError; use scale_info::TypeInfo; #[cfg(feature = "std")] use serde::{self, Deserialize, Deserializer, Serialize, Serializer}; @@ -164,7 +164,6 @@ pub mod pallet { use frame_system::pallet_prelude::*; #[pallet::pallet] - #[pallet::generate_store(pub(super) trait Store)] #[pallet::without_storage_info] pub struct Pallet(_); @@ -305,6 +304,7 @@ pub mod pallet { /// /// Total Complexity: O(1) /// + #[pallet::call_index(0)] #[pallet::weight(T::WeightInfo::claim())] pub fn claim( origin: OriginFor, @@ -337,6 +337,7 @@ pub mod pallet { /// /// Total Complexity: O(1) /// + #[pallet::call_index(1)] #[pallet::weight(T::WeightInfo::mint_claim())] pub fn mint_claim( origin: OriginFor, @@ -384,6 +385,7 @@ pub mod pallet { /// /// Total Complexity: O(1) /// + #[pallet::call_index(2)] #[pallet::weight(T::WeightInfo::claim_attest())] pub fn claim_attest( origin: OriginFor, @@ -420,6 +422,7 @@ pub mod pallet { /// /// Total Complexity: O(1) /// + #[pallet::call_index(3)] #[pallet::weight(( T::WeightInfo::attest(), DispatchClass::Normal, @@ -436,6 +439,7 @@ pub mod pallet { Ok(()) } + #[pallet::call_index(4)] #[pallet::weight(T::WeightInfo::move_claim())] pub fn move_claim( origin: OriginFor, diff --git a/runtime/common/src/crowdloan/migration.rs b/runtime/common/src/crowdloan/migration.rs index 468c2a572b51..a46e72cc1a51 100644 --- a/runtime/common/src/crowdloan/migration.rs +++ b/runtime/common/src/crowdloan/migration.rs @@ -22,20 +22,21 @@ use frame_support::{ Twox64Concat, }; -pub struct MigrateToTrackInactive(sp_std::marker::PhantomData); -impl OnRuntimeUpgrade for MigrateToTrackInactive { +pub struct MigrateToTrackInactiveV2(sp_std::marker::PhantomData); +impl OnRuntimeUpgrade for MigrateToTrackInactiveV2 { fn on_runtime_upgrade() -> Weight { let onchain_version = Pallet::::on_chain_storage_version(); - if onchain_version == 0 { + if onchain_version == 1 { let mut translated = 0u64; - for index in Funds::::iter_keys() { - let b = CurrencyOf::::total_balance(&Pallet::::fund_account_id(index.into())); + for item in Funds::::iter_values() { + let b = + CurrencyOf::::total_balance(&Pallet::::fund_account_id(item.fund_index)); CurrencyOf::::deactivate(b); translated.saturating_inc(); } - StorageVersion::new(1).put::>(); + StorageVersion::new(2).put::>(); log::info!(target: "runtime::crowdloan", "Summed {} funds, storage to version 1", translated); T::DbWeight::get().reads_writes(translated * 2 + 1, translated * 2 + 1) } else { @@ -46,9 +47,9 @@ impl OnRuntimeUpgrade for MigrateToTrackInactive { #[cfg(feature = "try-runtime")] fn pre_upgrade() -> Result, &'static str> { - let total = Funds::::iter_keys() - .map(|index| { - CurrencyOf::::total_balance(&Pallet::::fund_account_id(index.into())) + let total = Funds::::iter_values() + .map(|item| { + CurrencyOf::::total_balance(&Pallet::::fund_account_id(item.fund_index)) }) .fold(BalanceOf::::zero(), |a, i| a.saturating_add(i)); Ok((total, CurrencyOf::::active_issuance()).encode()) diff --git a/runtime/common/src/crowdloan/mod.rs b/runtime/common/src/crowdloan/mod.rs index 224f06c0d6e4..9f70ac3dd895 100644 --- a/runtime/common/src/crowdloan/mod.rs +++ b/runtime/common/src/crowdloan/mod.rs @@ -51,8 +51,6 @@ pub mod migration; -// TODO: Expose the total amount held. - use crate::{ slot_range::SlotRange, traits::{Auctioneer, Registrar}, @@ -70,7 +68,7 @@ use frame_support::{ }; pub use pallet::*; use parity_scale_codec::{Decode, Encode}; -use primitives::v2::Id as ParaId; +use primitives::Id as ParaId; use scale_info::TypeInfo; use sp_runtime::{ traits::{ @@ -188,7 +186,6 @@ pub mod pallet { const STORAGE_VERSION: StorageVersion = StorageVersion::new(1); #[pallet::pallet] - #[pallet::generate_store(pub(super) trait Store)] #[pallet::without_storage_info] #[pallet::storage_version(STORAGE_VERSION)] pub struct Pallet(_); @@ -372,6 +369,7 @@ pub mod pallet { /// /// This applies a lock to your parachain configuration, ensuring that it cannot be changed /// by the parachain manager. + #[pallet::call_index(0)] #[pallet::weight(T::WeightInfo::create())] pub fn create( origin: OriginFor, @@ -449,6 +447,7 @@ pub mod pallet { /// Contribute to a crowd sale. This will transfer some balance over to fund a parachain /// slot. It will be withdrawable when the crowdloan has ended and the funds are unused. + #[pallet::call_index(1)] #[pallet::weight(T::WeightInfo::contribute())] pub fn contribute( origin: OriginFor, @@ -477,6 +476,7 @@ pub mod pallet { /// /// - `who`: The account whose contribution should be withdrawn. /// - `index`: The parachain to whose crowdloan the contribution was made. + #[pallet::call_index(2)] #[pallet::weight(T::WeightInfo::withdraw())] pub fn withdraw( origin: OriginFor, @@ -510,6 +510,7 @@ pub mod pallet { /// times to fully refund all users. We will refund `RemoveKeysLimit` users at a time. /// /// Origin must be signed, but can come from anyone. + #[pallet::call_index(3)] #[pallet::weight(T::WeightInfo::refund(T::RemoveKeysLimit::get()))] pub fn refund( origin: OriginFor, @@ -555,6 +556,7 @@ pub mod pallet { } /// Remove a fund after the retirement period has ended and all funds have been returned. + #[pallet::call_index(4)] #[pallet::weight(T::WeightInfo::dissolve())] pub fn dissolve(origin: OriginFor, #[pallet::compact] index: ParaId) -> DispatchResult { let who = ensure_signed(origin)?; @@ -582,6 +584,7 @@ pub mod pallet { /// Edit the configuration for an in-progress crowdloan. /// /// Can only be called by Root origin. + #[pallet::call_index(5)] #[pallet::weight(T::WeightInfo::edit())] pub fn edit( origin: OriginFor, @@ -619,6 +622,7 @@ pub mod pallet { /// Add an optional memo to an existing crowdloan contribution. /// /// Origin must be Signed, and the user must have contributed to the crowdloan. + #[pallet::call_index(6)] #[pallet::weight(T::WeightInfo::add_memo())] pub fn add_memo(origin: OriginFor, index: ParaId, memo: Vec) -> DispatchResult { let who = ensure_signed(origin)?; @@ -637,6 +641,7 @@ pub mod pallet { /// Poke the fund into `NewRaise` /// /// Origin must be Signed, and the fund has non-zero raise. + #[pallet::call_index(7)] #[pallet::weight(T::WeightInfo::poke())] pub fn poke(origin: OriginFor, index: ParaId) -> DispatchResult { ensure_signed(origin)?; @@ -650,6 +655,7 @@ pub mod pallet { /// Contribute your entire balance to a crowd sale. This will transfer the entire balance of a user over to fund a parachain /// slot. It will be withdrawable when the crowdloan has ended and the funds are unused. + #[pallet::call_index(8)] #[pallet::weight(T::WeightInfo::contribute())] pub fn contribute_all( origin: OriginFor, @@ -857,7 +863,7 @@ mod tests { assert_noop, assert_ok, parameter_types, traits::{OnFinalize, OnInitialize}, }; - use primitives::v2::Id as ParaId; + use primitives::Id as ParaId; use sp_core::H256; use std::{cell::RefCell, collections::BTreeMap, sync::Arc}; // The testing primitives are very useful for avoiding having to work with signatures diff --git a/runtime/common/src/impls.rs b/runtime/common/src/impls.rs index 51dbdd80c781..de6e415b8606 100644 --- a/runtime/common/src/impls.rs +++ b/runtime/common/src/impls.rs @@ -18,7 +18,7 @@ use crate::NegativeImbalance; use frame_support::traits::{Currency, Imbalance, OnUnbalanced}; -use primitives::v2::Balance; +use primitives::Balance; use sp_runtime::Perquintill; /// Logic for the author to get a portion of fees. @@ -26,8 +26,8 @@ pub struct ToAuthor(sp_std::marker::PhantomData); impl OnUnbalanced> for ToAuthor where R: pallet_balances::Config + pallet_authorship::Config, - ::AccountId: From, - ::AccountId: Into, + ::AccountId: From, + ::AccountId: Into, { fn on_nonzero_unbalanced(amount: NegativeImbalance) { if let Some(author) = >::author() { @@ -41,8 +41,8 @@ impl OnUnbalanced> for DealWithFees where R: pallet_balances::Config + pallet_treasury::Config + pallet_authorship::Config, pallet_treasury::Pallet: OnUnbalanced>, - ::AccountId: From, - ::AccountId: Into, + ::AccountId: From, + ::AccountId: Into, { fn on_unbalanceds(mut fees_then_tips: impl Iterator>) { if let Some(fees) = fees_then_tips.next() { @@ -105,7 +105,7 @@ mod tests { dispatch::DispatchClass, parameter_types, traits::FindAuthor, weights::Weight, PalletId, }; use frame_system::limits; - use primitives::v2::AccountId; + use primitives::AccountId; use sp_core::H256; use sp_runtime::{ testing::Header, @@ -124,7 +124,7 @@ mod tests { UncheckedExtrinsic = UncheckedExtrinsic, { System: frame_system::{Pallet, Call, Config, Storage, Event}, - Authorship: pallet_authorship::{Pallet, Call, Storage, Inherent}, + Authorship: pallet_authorship::{Pallet, Storage}, Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, Treasury: pallet_treasury::{Pallet, Call, Storage, Config, Event}, } @@ -133,12 +133,12 @@ mod tests { parameter_types! { pub const BlockHashCount: u64 = 250; pub BlockWeights: limits::BlockWeights = limits::BlockWeights::builder() - .base_block(Weight::from_ref_time(10)) + .base_block(Weight::from_parts(10, 0)) .for_class(DispatchClass::all(), |weight| { - weight.base_extrinsic = Weight::from_ref_time(100); + weight.base_extrinsic = Weight::from_parts(100, 0); }) .for_class(DispatchClass::non_mandatory(), |weight| { - weight.max_total = Some(Weight::from_ref_time(1024).set_proof_size(u64::MAX)); + weight.max_total = Some(Weight::from_parts(1024, u64::MAX)); }) .build_or_panic(); pub BlockLength: limits::BlockLength = limits::BlockLength::max(2 * 1024); @@ -219,8 +219,6 @@ mod tests { } impl pallet_authorship::Config for Test { type FindAuthor = OneAuthor; - type UncleGenerations = (); - type FilterUncle = (); type EventHandler = (); } diff --git a/runtime/common/src/integration_tests.rs b/runtime/common/src/integration_tests.rs index eb9c4496e59a..84efd48b3849 100644 --- a/runtime/common/src/integration_tests.rs +++ b/runtime/common/src/integration_tests.rs @@ -24,20 +24,18 @@ use crate::{ }; use frame_support::{ assert_noop, assert_ok, parameter_types, - traits::{Currency, GenesisBuild, KeyOwnerProofSystem, OnFinalize, OnInitialize}, + traits::{Currency, GenesisBuild, OnFinalize, OnInitialize}, weights::Weight, PalletId, }; use frame_support_test::TestRandomness; use frame_system::EnsureRoot; use parity_scale_codec::Encode; -use primitives::v2::{ - BlockNumber, HeadData, Header, Id as ParaId, ValidationCode, LOWEST_PUBLIC_ID, -}; +use primitives::{BlockNumber, HeadData, Header, Id as ParaId, ValidationCode, LOWEST_PUBLIC_ID}; use runtime_parachains::{ configuration, origin, paras, shared, Origin as ParaOrigin, ParaLifecycle, }; -use sp_core::{crypto::KeyTypeId, H256}; +use sp_core::H256; use sp_io::TestExternalities; use sp_keystore::{testing::KeyStore, KeystoreExt}; use sp_runtime::{ @@ -105,7 +103,7 @@ parameter_types! { pub const BlockHashCount: u32 = 250; pub BlockWeights: frame_system::limits::BlockWeights = frame_system::limits::BlockWeights::simple_max( - Weight::from_ref_time(4 * 1024 * 1024).set_proof_size(u64::MAX), + Weight::from_parts(4 * 1024 * 1024, u64::MAX), ); } @@ -148,18 +146,10 @@ impl pallet_babe::Config for Test { type ExpectedBlockTime = ExpectedBlockTime; type EpochChangeTrigger = pallet_babe::ExternalTrigger; type DisabledValidators = (); - type KeyOwnerProofSystem = (); - type KeyOwnerProof = >::Proof; - type KeyOwnerIdentification = >::IdentificationTuple; - type HandleEquivocation = (); type WeightInfo = (); type MaxAuthorities = MaxAuthorities; + type KeyOwnerProof = sp_core::Void; + type EquivocationReportSystem = (); } parameter_types! { diff --git a/runtime/common/src/lib.rs b/runtime/common/src/lib.rs index 3fb1d9021307..5952d11961a3 100644 --- a/runtime/common/src/lib.rs +++ b/runtime/common/src/lib.rs @@ -30,6 +30,8 @@ pub mod purchase; pub mod slot_range; pub mod slots; pub mod traits; +#[cfg(feature = "try-runtime")] +pub mod try_runtime; pub mod xcm_sender; #[cfg(test)] @@ -43,7 +45,7 @@ use frame_support::{ weights::{constants::WEIGHT_REF_TIME_PER_SECOND, Weight}, }; use frame_system::limits; -use primitives::v2::{AssignmentId, Balance, BlockNumber, ValidatorId, MAX_POV_SIZE}; +use primitives::{AssignmentId, Balance, BlockNumber, ValidatorId}; use sp_runtime::{FixedPointNumber, Perbill, Perquintill}; use static_assertions::const_assert; @@ -69,9 +71,10 @@ pub const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(1); /// We allow `Normal` extrinsics to fill up the block up to 75%, the rest can be used /// by Operational extrinsics. pub const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); +/// We allow for 2 seconds of compute with a 6 second average block time. /// The storage proof size is not limited so far. pub const MAXIMUM_BLOCK_WEIGHT: Weight = - Weight::from_parts(WEIGHT_REF_TIME_PER_SECOND.saturating_mul(2), MAX_POV_SIZE as u64); + Weight::from_parts(WEIGHT_REF_TIME_PER_SECOND.saturating_mul(2), u64::MAX); const_assert!(NORMAL_DISPATCH_RATIO.deconstruct() >= AVERAGE_ON_INITIALIZE_RATIO.deconstruct()); @@ -157,7 +160,7 @@ macro_rules! impl_runtime_weights { /// /// This must only be used as long as the balance type is `u128`. pub type CurrencyToVote = frame_support::traits::U128CurrencyToVote; -static_assertions::assert_eq_size!(primitives::v2::Balance, u128); +static_assertions::assert_eq_size!(primitives::Balance, u128); /// A placeholder since there is currently no provided session key handler for parachain validator /// keys. diff --git a/runtime/common/src/mock.rs b/runtime/common/src/mock.rs index 54cac99146e7..79bee1bbbc16 100644 --- a/runtime/common/src/mock.rs +++ b/runtime/common/src/mock.rs @@ -22,7 +22,7 @@ use frame_support::{ weights::Weight, }; use parity_scale_codec::{Decode, Encode}; -use primitives::v2::{HeadData, Id as ParaId, ValidationCode}; +use primitives::{HeadData, Id as ParaId, ValidationCode}; use sp_runtime::{traits::SaturatedConversion, Permill}; use std::{cell::RefCell, collections::HashMap}; diff --git a/runtime/common/src/paras_registrar.rs b/runtime/common/src/paras_registrar.rs index bfcc91e3ba71..2fe16f141683 100644 --- a/runtime/common/src/paras_registrar.rs +++ b/runtime/common/src/paras_registrar.rs @@ -24,7 +24,7 @@ use frame_support::{ traits::{Currency, Get, ReservableCurrency}, }; use frame_system::{self, ensure_root, ensure_signed}; -use primitives::v2::{HeadData, Id as ParaId, ValidationCode, LOWEST_PUBLIC_ID}; +use primitives::{HeadData, Id as ParaId, ValidationCode, LOWEST_PUBLIC_ID}; use runtime_parachains::{ configuration, ensure_parachain, paras::{self, ParaGenesisArgs}, @@ -97,7 +97,6 @@ pub mod pallet { use frame_system::pallet_prelude::*; #[pallet::pallet] - #[pallet::generate_store(pub(super) trait Store)] #[pallet::without_storage_info] pub struct Pallet(_); @@ -228,6 +227,7 @@ pub mod pallet { /// /// ## Events /// The `Registered` event is emitted in case of success. + #[pallet::call_index(0)] #[pallet::weight(::WeightInfo::register())] pub fn register( origin: OriginFor, @@ -246,6 +246,7 @@ pub mod pallet { /// /// The deposit taken can be specified for this registration. Any `ParaId` /// can be registered, including sub-1000 IDs which are System Parachains. + #[pallet::call_index(1)] #[pallet::weight(::WeightInfo::force_register())] pub fn force_register( origin: OriginFor, @@ -262,6 +263,7 @@ pub mod pallet { /// Deregister a Para Id, freeing all data and returning any deposit. /// /// The caller must be Root, the `para` owner, or the `para` itself. The para must be a parathread. + #[pallet::call_index(2)] #[pallet::weight(::WeightInfo::deregister())] pub fn deregister(origin: OriginFor, id: ParaId) -> DispatchResult { Self::ensure_root_para_or_owner(origin, id)?; @@ -279,6 +281,7 @@ pub mod pallet { /// `ParaId` to be a long-term identifier of a notional "parachain". However, their /// scheduling info (i.e. whether they're a parathread or parachain), auction information /// and the auction deposit are switched. + #[pallet::call_index(3)] #[pallet::weight(::WeightInfo::swap())] pub fn swap(origin: OriginFor, id: ParaId, other: ParaId) -> DispatchResult { Self::ensure_root_para_or_owner(origin, id)?; @@ -328,6 +331,7 @@ pub mod pallet { /// previously locked para to deregister or swap a para without using governance. /// /// Can only be called by the Root origin or the parachain. + #[pallet::call_index(4)] #[pallet::weight(T::DbWeight::get().reads_writes(1, 1))] pub fn remove_lock(origin: OriginFor, para: ParaId) -> DispatchResult { Self::ensure_root_or_para(origin, para)?; @@ -349,6 +353,7 @@ pub mod pallet { /// /// ## Events /// The `Reserved` event is emitted in case of success, which provides the ID reserved for use. + #[pallet::call_index(5)] #[pallet::weight(::WeightInfo::reserve())] pub fn reserve(origin: OriginFor) -> DispatchResult { let who = ensure_signed(origin)?; @@ -362,6 +367,7 @@ pub mod pallet { /// para to deregister or swap a para. /// /// Can be called by Root, the parachain, or the parachain manager if the parachain is unlocked. + #[pallet::call_index(6)] #[pallet::weight(T::DbWeight::get().reads_writes(1, 1))] pub fn add_lock(origin: OriginFor, para: ParaId) -> DispatchResult { Self::ensure_root_para_or_owner(origin, para)?; @@ -372,6 +378,7 @@ pub mod pallet { /// Schedule a parachain upgrade. /// /// Can be called by Root, the parachain, or the parachain manager if the parachain is unlocked. + #[pallet::call_index(7)] #[pallet::weight(::WeightInfo::schedule_code_upgrade(new_code.0.len() as u32))] pub fn schedule_code_upgrade( origin: OriginFor, @@ -386,6 +393,7 @@ pub mod pallet { /// Set the parachain's current head. /// /// Can be called by Root, the parachain, or the parachain manager if the parachain is unlocked. + #[pallet::call_index(8)] #[pallet::weight(::WeightInfo::set_current_head(new_head.0.len() as u32))] pub fn set_current_head( origin: OriginFor, @@ -654,7 +662,7 @@ mod tests { }; use frame_system::limits; use pallet_balances::Error as BalancesError; - use primitives::v2::{Balance, BlockNumber, Header}; + use primitives::{Balance, BlockNumber, Header}; use runtime_parachains::{configuration, origin, shared}; use sp_core::H256; use sp_io::TestExternalities; @@ -696,9 +704,7 @@ mod tests { parameter_types! { pub const BlockHashCount: u32 = 250; pub BlockWeights: limits::BlockWeights = - frame_system::limits::BlockWeights::simple_max( - Weight::from_ref_time(1024).set_proof_size(u64::MAX), - ); + frame_system::limits::BlockWeights::simple_max(Weight::from_parts(1024, u64::MAX)); pub BlockLength: limits::BlockLength = limits::BlockLength::max_with_normal_ratio(4 * 1024 * 1024, NORMAL_RATIO); } @@ -1280,7 +1286,7 @@ mod benchmarking { use crate::traits::Registrar as RegistrarT; use frame_support::assert_ok; use frame_system::RawOrigin; - use primitives::v2::{MAX_CODE_SIZE, MAX_HEAD_DATA_SIZE}; + use primitives::{MAX_CODE_SIZE, MAX_HEAD_DATA_SIZE}; use runtime_parachains::{paras, shared, Origin as ParaOrigin}; use sp_runtime::traits::Bounded; diff --git a/runtime/common/src/paras_sudo_wrapper.rs b/runtime/common/src/paras_sudo_wrapper.rs index 49f27a8d44c3..33b9d18071a3 100644 --- a/runtime/common/src/paras_sudo_wrapper.rs +++ b/runtime/common/src/paras_sudo_wrapper.rs @@ -20,7 +20,7 @@ use frame_support::pallet_prelude::*; use frame_system::pallet_prelude::*; pub use pallet::*; use parity_scale_codec::Encode; -use primitives::v2::Id as ParaId; +use primitives::Id as ParaId; use runtime_parachains::{ configuration, dmp, hrmp, paras::{self, ParaGenesisArgs}, @@ -33,7 +33,6 @@ pub mod pallet { use super::*; #[pallet::pallet] - #[pallet::generate_store(pub(super) trait Store)] pub struct Pallet(_); #[pallet::config] @@ -70,6 +69,7 @@ pub mod pallet { #[pallet::call] impl Pallet { /// Schedule a para to be initialized at the start of the next session. + #[pallet::call_index(0)] #[pallet::weight((1_000, DispatchClass::Operational))] pub fn sudo_schedule_para_initialize( origin: OriginFor, @@ -83,6 +83,7 @@ pub mod pallet { } /// Schedule a para to be cleaned up at the start of the next session. + #[pallet::call_index(1)] #[pallet::weight((1_000, DispatchClass::Operational))] pub fn sudo_schedule_para_cleanup(origin: OriginFor, id: ParaId) -> DispatchResult { ensure_root(origin)?; @@ -92,6 +93,7 @@ pub mod pallet { } /// Upgrade a parathread to a parachain + #[pallet::call_index(2)] #[pallet::weight((1_000, DispatchClass::Operational))] pub fn sudo_schedule_parathread_upgrade( origin: OriginFor, @@ -109,6 +111,7 @@ pub mod pallet { } /// Downgrade a parachain to a parathread + #[pallet::call_index(3)] #[pallet::weight((1_000, DispatchClass::Operational))] pub fn sudo_schedule_parachain_downgrade( origin: OriginFor, @@ -129,6 +132,7 @@ pub mod pallet { /// /// The given parachain should exist and the payload should not exceed the preconfigured size /// `config.max_downward_message_size`. + #[pallet::call_index(4)] #[pallet::weight((1_000, DispatchClass::Operational))] pub fn sudo_queue_downward_xcm( origin: OriginFor, @@ -149,6 +153,7 @@ pub mod pallet { /// /// This is equivalent to sending an `Hrmp::hrmp_init_open_channel` extrinsic followed by /// `Hrmp::hrmp_accept_open_channel`. + #[pallet::call_index(5)] #[pallet::weight((1_000, DispatchClass::Operational))] pub fn sudo_establish_hrmp_channel( origin: OriginFor, diff --git a/runtime/common/src/purchase.rs b/runtime/common/src/purchase.rs index 52ad22bec2fb..47190c5f2690 100644 --- a/runtime/common/src/purchase.rs +++ b/runtime/common/src/purchase.rs @@ -91,7 +91,6 @@ pub mod pallet { use super::*; #[pallet::pallet] - #[pallet::generate_store(pub(super) trait Store)] #[pallet::without_storage_info] pub struct Pallet(_); @@ -195,7 +194,8 @@ pub mod pallet { /// We check that the account does not exist at this stage. /// /// Origin must match the `ValidityOrigin`. - #[pallet::weight(Weight::from_ref_time(200_000_000) + T::DbWeight::get().reads_writes(4, 1))] + #[pallet::call_index(0)] + #[pallet::weight(Weight::from_parts(200_000_000, 0) + T::DbWeight::get().reads_writes(4, 1))] pub fn create_account( origin: OriginFor, who: T::AccountId, @@ -232,6 +232,7 @@ pub mod pallet { /// We check that the account exists at this stage, but has not completed the process. /// /// Origin must match the `ValidityOrigin`. + #[pallet::call_index(1)] #[pallet::weight(T::DbWeight::get().reads_writes(1, 1))] pub fn update_validity_status( origin: OriginFor, @@ -260,6 +261,7 @@ pub mod pallet { /// We check that the account is valid for a balance transfer at this point. /// /// Origin must match the `ValidityOrigin`. + #[pallet::call_index(2)] #[pallet::weight(T::DbWeight::get().reads_writes(2, 1))] pub fn update_balance( origin: OriginFor, @@ -297,6 +299,7 @@ pub mod pallet { /// /// Origin must match the configured `PaymentAccount` (if it is not configured then this /// will always fail with `BadOrigin`). + #[pallet::call_index(3)] #[pallet::weight(T::DbWeight::get().reads_writes(4, 2))] pub fn payout(origin: OriginFor, who: T::AccountId) -> DispatchResult { // Payments must be made directly by the `PaymentAccount`. @@ -366,6 +369,7 @@ pub mod pallet { /// Set the account that will be used to payout users in the DOT purchase process. /// /// Origin must match the `ConfigurationOrigin` + #[pallet::call_index(4)] #[pallet::weight(T::DbWeight::get().writes(1))] pub fn set_payment_account(origin: OriginFor, who: T::AccountId) -> DispatchResult { T::ConfigurationOrigin::ensure_origin(origin)?; @@ -378,6 +382,7 @@ pub mod pallet { /// Set the statement that must be signed for a user to participate on the DOT sale. /// /// Origin must match the `ConfigurationOrigin` + #[pallet::call_index(5)] #[pallet::weight(T::DbWeight::get().writes(1))] pub fn set_statement(origin: OriginFor, statement: Vec) -> DispatchResult { T::ConfigurationOrigin::ensure_origin(origin)?; @@ -394,6 +399,7 @@ pub mod pallet { /// Set the block where locked DOTs will become unlocked. /// /// Origin must match the `ConfigurationOrigin` + #[pallet::call_index(6)] #[pallet::weight(T::DbWeight::get().writes(1))] pub fn set_unlock_block( origin: OriginFor, diff --git a/runtime/common/src/slots/mod.rs b/runtime/common/src/slots/mod.rs index 21391dc3d774..2c3fd39ae00a 100644 --- a/runtime/common/src/slots/mod.rs +++ b/runtime/common/src/slots/mod.rs @@ -31,7 +31,7 @@ use frame_support::{ }; use frame_system::pallet_prelude::*; pub use pallet::*; -use primitives::v2::Id as ParaId; +use primitives::Id as ParaId; use sp_runtime::traits::{CheckedConversion, CheckedSub, Saturating, Zero}; use sp_std::prelude::*; @@ -67,7 +67,6 @@ pub mod pallet { use super::*; #[pallet::pallet] - #[pallet::generate_store(pub(super) trait Store)] #[pallet::without_storage_info] pub struct Pallet(_); @@ -165,6 +164,7 @@ pub mod pallet { /// independently of any other on-chain mechanism to use it. /// /// The dispatch origin for this call must match `T::ForceOrigin`. + #[pallet::call_index(0)] #[pallet::weight(T::WeightInfo::force_lease())] pub fn force_lease( origin: OriginFor, @@ -183,6 +183,7 @@ pub mod pallet { /// Clear all leases for a Para Id, refunding any deposits back to the original owners. /// /// The dispatch origin for this call must match `T::ForceOrigin`. + #[pallet::call_index(1)] #[pallet::weight(T::WeightInfo::clear_all_leases())] pub fn clear_all_leases(origin: OriginFor, para: ParaId) -> DispatchResult { T::ForceOrigin::ensure_origin(origin)?; @@ -205,6 +206,7 @@ pub mod pallet { /// let them onboard from here. /// /// Origin must be signed, but can be called by anyone. + #[pallet::call_index(2)] #[pallet::weight(T::WeightInfo::trigger_onboard())] pub fn trigger_onboard(origin: OriginFor, para: ParaId) -> DispatchResult { let _ = ensure_signed(origin)?; @@ -503,7 +505,7 @@ mod tests { use frame_support::{assert_noop, assert_ok, parameter_types}; use frame_system::EnsureRoot; use pallet_balances; - use primitives::v2::{BlockNumber, Header}; + use primitives::{BlockNumber, Header}; use sp_core::H256; use sp_runtime::traits::{BlakeTwo256, IdentityLookup}; @@ -984,7 +986,7 @@ mod benchmarking { use frame_system::RawOrigin; use sp_runtime::traits::{Bounded, One}; - use frame_benchmarking::{account, benchmarks, whitelisted_caller}; + use frame_benchmarking::{account, benchmarks, whitelisted_caller, BenchmarkError}; use crate::slots::Pallet as Slots; @@ -1024,7 +1026,8 @@ mod benchmarking { let amount = T::Currency::minimum_balance(); let period_begin = 69u32.into(); let period_count = 3u32.into(); - let origin = T::ForceOrigin::successful_origin(); + let origin = + T::ForceOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?; }: _(origin, para, leaser.clone(), amount, period_begin, period_count) verify { assert_last_event::(Event::::Leased { @@ -1058,7 +1061,8 @@ mod benchmarking { // T parathread are upgrading to parachains for (para, leaser) in paras_info { let amount = T::Currency::minimum_balance(); - let origin = T::ForceOrigin::successful_origin(); + let origin = T::ForceOrigin::try_successful_origin() + .expect("ForceOrigin has no successful origin required for the benchmark"); Slots::::force_lease(origin, para, leaser, amount, period_begin, period_count)?; } @@ -1109,7 +1113,8 @@ mod benchmarking { // Average slot has 4 lease periods. let period_count: LeasePeriodOf = 4u32.into(); let period_begin = period_count * i.into(); - let origin = T::ForceOrigin::successful_origin(); + let origin = T::ForceOrigin::try_successful_origin() + .expect("ForceOrigin has no successful origin required for the benchmark"); Slots::::force_lease(origin, para, leaser, amount, period_begin, period_count)?; } @@ -1118,7 +1123,8 @@ mod benchmarking { assert_eq!(T::Currency::reserved_balance(&leaser), T::Currency::minimum_balance()); } - let origin = T::ForceOrigin::successful_origin(); + let origin = + T::ForceOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?; }: _(origin, para) verify { for i in 0 .. max_people { diff --git a/runtime/common/src/traits.rs b/runtime/common/src/traits.rs index bb05a2ff9081..48d1ecfc6b4a 100644 --- a/runtime/common/src/traits.rs +++ b/runtime/common/src/traits.rs @@ -20,7 +20,7 @@ use frame_support::{ dispatch::DispatchResult, traits::{Currency, ReservableCurrency}, }; -use primitives::v2::{HeadData, Id as ParaId, ValidationCode}; +use primitives::{HeadData, Id as ParaId, ValidationCode}; use sp_std::vec::*; /// Parachain registration API. diff --git a/runtime/common/src/try_runtime.rs b/runtime/common/src/try_runtime.rs new file mode 100644 index 000000000000..508a2a069116 --- /dev/null +++ b/runtime/common/src/try_runtime.rs @@ -0,0 +1,107 @@ +// Copyright 2023 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +//! Common try-runtime only tests for runtimes. + +use frame_support::{ + dispatch::RawOrigin, + traits::{Get, Hooks}, +}; +use pallet_fast_unstake::{Pallet as FastUnstake, *}; +use pallet_staking::*; +use sp_std::{collections::btree_set::BTreeSet, prelude::*}; + +/// register all inactive nominators for fast-unstake, and progress until they have all been +/// processed. +pub fn migrate_all_inactive_nominators() +where + ::RuntimeEvent: TryInto>, +{ + let mut unstaked_ok = 0; + let mut unstaked_err = 0; + let mut unstaked_slashed = 0; + + let all_stakers = Ledger::::iter().map(|(ctrl, l)| (ctrl, l.stash)).collect::>(); + let mut all_exposed = BTreeSet::new(); + ErasStakers::::iter().for_each(|(_, val, expo)| { + all_exposed.insert(val); + all_exposed.extend(expo.others.iter().map(|ie| ie.who.clone())) + }); + + let eligible = all_stakers + .iter() + .filter_map(|(ctrl, stash)| all_exposed.contains(stash).then_some(ctrl)) + .collect::>(); + + log::info!( + target: "runtime::test", + "registering {} out of {} stakers for fast-unstake", + eligible.len(), + all_stakers.len() + ); + for ctrl in eligible { + if let Err(why) = + FastUnstake::::register_fast_unstake(RawOrigin::Signed(ctrl.clone()).into()) + { + log::warn!(target: "runtime::test", "failed to register {:?} due to {:?}", ctrl, why); + } + } + + log::info!( + target: "runtime::test", + "registered {} successfully, starting at {:?}.", + Queue::::count(), + frame_system::Pallet::::block_number(), + ); + while Queue::::count() != 0 || Head::::get().is_some() { + let now = frame_system::Pallet::::block_number(); + let weight = ::BlockWeights::get().max_block; + let consumed = FastUnstake::::on_idle(now, weight); + log::debug!(target: "runtime::test", "consumed {:?} ({})", consumed, consumed.ref_time() as f32 / weight.ref_time() as f32); + + frame_system::Pallet::::read_events_no_consensus() + .into_iter() + .map(|r| r.event) + .filter_map(|e| { + let maybe_fast_unstake_event: Option> = + e.try_into().ok(); + maybe_fast_unstake_event + }) + .for_each(|e: pallet_fast_unstake::Event| match e { + pallet_fast_unstake::Event::::Unstaked { result, .. } => + if result.is_ok() { + unstaked_ok += 1; + } else { + unstaked_err += 1 + }, + pallet_fast_unstake::Event::::Slashed { .. } => unstaked_slashed += 1, + pallet_fast_unstake::Event::::InternalError => unreachable!(), + _ => {}, + }); + + if now % 100u32.into() == sp_runtime::traits::Zero::zero() { + log::info!( + target: "runtime::test", + "status: ok {}, err {}, slash {}", + unstaked_ok, + unstaked_err, + unstaked_slashed, + ); + } + + frame_system::Pallet::::reset_events(); + } +} diff --git a/runtime/common/src/xcm_sender.rs b/runtime/common/src/xcm_sender.rs index 2d75edfd4571..e4cc02ae756b 100644 --- a/runtime/common/src/xcm_sender.rs +++ b/runtime/common/src/xcm_sender.rs @@ -16,34 +16,75 @@ //! XCM sender for relay chain. +use frame_support::traits::Get; use parity_scale_codec::Encode; -use runtime_parachains::{configuration, dmp}; -use sp_std::marker::PhantomData; -use xcm::latest::prelude::*; +use primitives::Id as ParaId; +use runtime_parachains::{ + configuration::{self, HostConfiguration}, + dmp, +}; +use sp_std::{marker::PhantomData, prelude::*}; +use xcm::prelude::*; +use SendError::*; + +/// Simple value-bearing trait for determining/expressing the assets required to be paid for a +/// messages to be delivered to a parachain. +pub trait PriceForParachainDelivery { + /// Return the assets required to deliver `message` to the given `para` destination. + fn price_for_parachain_delivery(para: ParaId, message: &Xcm<()>) -> MultiAssets; +} +impl PriceForParachainDelivery for () { + fn price_for_parachain_delivery(_: ParaId, _: &Xcm<()>) -> MultiAssets { + MultiAssets::new() + } +} + +/// Implementation of `PriceForParachainDelivery` which returns a fixed price. +pub struct ConstantPrice(sp_std::marker::PhantomData); +impl> PriceForParachainDelivery for ConstantPrice { + fn price_for_parachain_delivery(_: ParaId, _: &Xcm<()>) -> MultiAssets { + T::get() + } +} /// XCM sender for relay chain. It only sends downward message. -pub struct ChildParachainRouter(PhantomData<(T, W)>); +pub struct ChildParachainRouter(PhantomData<(T, W, P)>); -impl SendXcm - for ChildParachainRouter +impl + SendXcm for ChildParachainRouter { - fn send_xcm(dest: impl Into, msg: Xcm<()>) -> SendResult { - let dest = dest.into(); - match dest { - MultiLocation { parents: 0, interior: X1(Parachain(id)) } => { - // Downward message passing. - let versioned_xcm = - W::wrap_version(&dest, msg).map_err(|()| SendError::DestinationUnsupported)?; - let config = >::config(); - >::queue_downward_message( - &config, - id.into(), - versioned_xcm.encode(), - ) - .map_err(Into::::into)?; - Ok(()) - }, - dest => Err(SendError::CannotReachDestination(dest, msg)), - } + type Ticket = (HostConfiguration, ParaId, Vec); + + fn validate( + dest: &mut Option, + msg: &mut Option>, + ) -> SendResult<(HostConfiguration, ParaId, Vec)> { + let d = dest.take().ok_or(MissingArgument)?; + let id = if let MultiLocation { parents: 0, interior: X1(Parachain(id)) } = &d { + *id + } else { + *dest = Some(d); + return Err(NotApplicable) + }; + + // Downward message passing. + let xcm = msg.take().ok_or(MissingArgument)?; + let config = >::config(); + let para = id.into(); + let price = P::price_for_parachain_delivery(para, &xcm); + let blob = W::wrap_version(&d, xcm).map_err(|()| DestinationUnsupported)?.encode(); + >::can_queue_downward_message(&config, ¶, &blob) + .map_err(Into::::into)?; + + Ok(((config, para, blob), price)) + } + + fn deliver( + (config, para, blob): (HostConfiguration, ParaId, Vec), + ) -> Result { + let hash = sp_io::hashing::blake2_256(&blob[..]); + >::queue_downward_message(&config, para, blob) + .map(|()| hash) + .map_err(|_| SendError::Transport(&"Error placing into DMP queue")) } } diff --git a/runtime/kusama/Cargo.toml b/runtime/kusama/Cargo.toml index 7770e8a6f7d8..402b6f7424c5 100644 --- a/runtime/kusama/Cargo.toml +++ b/runtime/kusama/Cargo.toml @@ -7,90 +7,91 @@ edition.workspace = true [dependencies] bitvec = { version = "1.0.0", default-features = false, features = ["alloc"] } -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["derive", "max-encoded-len"] } +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["derive", "max-encoded-len"] } scale-info = { version = "2.1.2", default-features = false, features = ["derive"] } log = { version = "0.4.17", default-features = false } rustc-hex = { version = "2.1.0", default-features = false } -serde = { version = "1.0.137", default-features = false } +serde = { version = "1.0.139", default-features = false } serde_derive = { version = "1.0.117", optional = true } static_assertions = "1.1.0" smallvec = "1.8.0" -authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -beefy-primitives = { git = "https://github.com/paritytech/substrate", default-features = false, package = "sp-beefy" , branch = "polkadot-v0.9.36" } +authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +beefy-primitives = { package = "sp-consensus-beefy", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } kusama-runtime-constants = { package = "kusama-runtime-constants", path = "./constants", default-features = false } -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -offchain-primitives = { package = "sp-offchain", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-std = { package = "sp-std", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-arithmetic = { package = "sp-arithmetic", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-mmr-primitives = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -tx-pool-api = { package = "sp-transaction-pool", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -block-builder-api = { package = "sp-block-builder", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-npos-elections = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +offchain-primitives = { package = "sp-offchain", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-std = { package = "sp-std", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-arithmetic = { package = "sp-arithmetic", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-mmr-primitives = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +tx-pool-api = { package = "sp-transaction-pool", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +block-builder-api = { package = "sp-block-builder", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-npos-elections = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } -pallet-authority-discovery = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-babe = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-bags-list = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-bounties = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-child-bounties = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-nomination-pools-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-collective = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-conviction-voting = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-democracy = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-elections-phragmen = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-election-provider-multi-phase = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-fast-unstake = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-grandpa = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-nis = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-identity = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-im-online = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-indices = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-membership = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-nomination-pools = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-offences = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-preimage = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-proxy = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-ranked-collective = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-recovery = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-referenda = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-scheduler = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-society = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-system = {git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-tips = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-treasury = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-vesting = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-whitelist = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +pallet-authority-discovery = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-babe = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-bags-list = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-bounties = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-child-bounties = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-nomination-pools-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-collective = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-conviction-voting = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-democracy = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-elections-phragmen = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-election-provider-multi-phase = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-fast-unstake = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-grandpa = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-nis = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-identity = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-im-online = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-indices = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-membership = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-nomination-pools = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-offences = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-preimage = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-proxy = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-ranked-collective = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-recovery = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-referenda = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-scheduler = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-society = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-staking-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-system = {git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-tips = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-treasury = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-vesting = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-whitelist = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } pallet-xcm = { path = "../../xcm/pallet-xcm", default-features = false } pallet-xcm-benchmarks = { path = "../../xcm/pallet-xcm-benchmarks", default-features = false, optional = true } -frame-election-provider-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +frame-election-provider-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } -frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } -frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } -pallet-offences-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } -pallet-session-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } -pallet-nomination-pools-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } -frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } -pallet-election-provider-support-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } +frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } +pallet-offences-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } +pallet-session-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } +pallet-nomination-pools-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } +frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } +pallet-election-provider-support-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } hex-literal = { version = "0.3.4", optional = true } runtime-common = { package = "polkadot-runtime-common", path = "../common", default-features = false } @@ -104,16 +105,16 @@ xcm-builder = { package = "xcm-builder", path = "../../xcm/xcm-builder", default [dev-dependencies] hex-literal = "0.3.4" tiny-keccak = { version = "2.0.2", features = ["keccak"] } -keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-trie = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-trie = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } separator = "0.4.1" serde_json = "1.0.81" -remote-externalities = { git = "https://github.com/paritytech/substrate", package = "frame-remote-externalities" , branch = "polkadot-v0.9.36" } -tokio = { version = "1.22.0", features = ["macros"] } -sp-tracing = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +remote-externalities = { git = "https://github.com/paritytech/substrate", package = "frame-remote-externalities" , branch = "polkadot-v0.9.40" } +tokio = { version = "1.24.2", features = ["macros"] } +sp-tracing = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } [features] default = ["std"] @@ -169,6 +170,7 @@ std = [ "pallet-session/std", "pallet-society/std", "pallet-staking/std", + "pallet-staking-runtime-api/std", "pallet-timestamp/std", "pallet-tips/std", "pallet-treasury/std", diff --git a/runtime/kusama/constants/Cargo.toml b/runtime/kusama/constants/Cargo.toml index 773dc8da9db7..f86c756257ef 100644 --- a/runtime/kusama/constants/Cargo.toml +++ b/runtime/kusama/constants/Cargo.toml @@ -7,16 +7,19 @@ edition.workspace = true [dependencies] smallvec = "1.8.0" -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } primitives = { package = "polkadot-primitives", path = "../../../primitives", default-features = false } runtime-common = { package = "polkadot-runtime-common", path = "../../common", default-features = false } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-weights = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-weights = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } [features] default = ["std"] std = [ + "frame-support/std", + "primitives/std", + "runtime-common/std", "sp-core/std", "sp-runtime/std", "sp-weights/std" diff --git a/runtime/kusama/constants/src/lib.rs b/runtime/kusama/constants/src/lib.rs index 923f71b94dd8..73ca3d31652b 100644 --- a/runtime/kusama/constants/src/lib.rs +++ b/runtime/kusama/constants/src/lib.rs @@ -20,7 +20,7 @@ pub mod weights; /// Money matters. pub mod currency { - use primitives::v2::Balance; + use primitives::Balance; /// The existential deposit. pub const EXISTENTIAL_DEPOSIT: Balance = 1 * CENTS; @@ -38,7 +38,7 @@ pub mod currency { /// Time and blocks. pub mod time { - use primitives::v2::{BlockNumber, Moment}; + use primitives::{BlockNumber, Moment}; use runtime_common::prod_or_fast; pub const MILLISECS_PER_BLOCK: Moment = 6000; pub const SLOT_DURATION: Moment = MILLISECS_PER_BLOCK; @@ -63,7 +63,7 @@ pub mod fee { use frame_support::weights::{ WeightToFeeCoefficient, WeightToFeeCoefficients, WeightToFeePolynomial, }; - use primitives::v2::Balance; + use primitives::Balance; use smallvec::smallvec; pub use sp_runtime::Perbill; diff --git a/runtime/kusama/constants/src/weights/block_weights.rs b/runtime/kusama/constants/src/weights/block_weights.rs index adaf02eb138b..985c8bd7fc9b 100644 --- a/runtime/kusama/constants/src/weights/block_weights.rs +++ b/runtime/kusama/constants/src/weights/block_weights.rs @@ -14,8 +14,8 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16 (Y/M/D) -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16 (Y/M/D) +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! //! SHORT-NAME: `block`, LONG-NAME: `BlockExecution`, RUNTIME: `Development` //! WARMUPS: `10`, REPEAT: `100` @@ -42,17 +42,17 @@ parameter_types! { /// Calculated by multiplying the *Average* with `1.0` and adding `0`. /// /// Stats nanoseconds: - /// Min, Max: 6_685_216, 8_419_144 - /// Average: 6_866_800 - /// Median: 6_808_548 - /// Std-Dev: 272644.63 + /// Min, Max: 6_708_387, 7_042_534 + /// Average: 6_818_965 + /// Median: 6_826_464 + /// Std-Dev: 66350.7 /// /// Percentiles nanoseconds: - /// 99th: 8_064_831 - /// 95th: 7_116_548 - /// 75th: 6_856_386 + /// 99th: 6_991_352 + /// 95th: 6_933_543 + /// 75th: 6_854_332 pub const BlockExecutionWeight: Weight = - Weight::from_ref_time(WEIGHT_REF_TIME_PER_NANOS.saturating_mul(6_866_800)); + Weight::from_parts(WEIGHT_REF_TIME_PER_NANOS.saturating_mul(6_818_965), 0); } #[cfg(test)] diff --git a/runtime/kusama/constants/src/weights/extrinsic_weights.rs b/runtime/kusama/constants/src/weights/extrinsic_weights.rs index d9b6d1e36ed3..9d07e32fb26d 100644 --- a/runtime/kusama/constants/src/weights/extrinsic_weights.rs +++ b/runtime/kusama/constants/src/weights/extrinsic_weights.rs @@ -14,8 +14,8 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16 (Y/M/D) -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16 (Y/M/D) +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! //! SHORT-NAME: `extrinsic`, LONG-NAME: `ExtrinsicBase`, RUNTIME: `Development` //! WARMUPS: `10`, REPEAT: `100` @@ -42,17 +42,17 @@ parameter_types! { /// Calculated by multiplying the *Average* with `1.0` and adding `0`. /// /// Stats nanoseconds: - /// Min, Max: 95_632, 97_430 - /// Average: 96_247 - /// Median: 96_195 - /// Std-Dev: 376.91 + /// Min, Max: 105_285, 107_713 + /// Average: 106_013 + /// Median: 105_990 + /// Std-Dev: 441.55 /// /// Percentiles nanoseconds: - /// 99th: 97_334 - /// 95th: 97_055 - /// 75th: 96_444 + /// 99th: 107_324 + /// 95th: 106_820 + /// 75th: 106_178 pub const ExtrinsicBaseWeight: Weight = - Weight::from_ref_time(WEIGHT_REF_TIME_PER_NANOS.saturating_mul(96_247)); + Weight::from_parts(WEIGHT_REF_TIME_PER_NANOS.saturating_mul(106_013), 0); } #[cfg(test)] diff --git a/runtime/kusama/src/governance/mod.rs b/runtime/kusama/src/governance/mod.rs index 3dd4eba2b57e..c2db914f647e 100644 --- a/runtime/kusama/src/governance/mod.rs +++ b/runtime/kusama/src/governance/mod.rs @@ -82,8 +82,8 @@ impl pallet_referenda::Config for Runtime { type Scheduler = Scheduler; type Currency = Balances; type SubmitOrigin = frame_system::EnsureSigned; - type CancelOrigin = ReferendumCanceller; - type KillOrigin = ReferendumKiller; + type CancelOrigin = EitherOf, ReferendumCanceller>; + type KillOrigin = EitherOf, ReferendumKiller>; type Slash = Treasury; type Votes = pallet_conviction_voting::VotesOf; type Tally = pallet_conviction_voting::TallyOf; diff --git a/runtime/kusama/src/governance/old.rs b/runtime/kusama/src/governance/old.rs index 9365c903198a..e50c778d56f8 100644 --- a/runtime/kusama/src/governance/old.rs +++ b/runtime/kusama/src/governance/old.rs @@ -39,6 +39,7 @@ impl pallet_democracy::Config for Runtime { type LaunchPeriod = LaunchPeriod; type VotingPeriod = VotingPeriod; type MinimumDeposit = MinimumDeposit; + type SubmitOrigin = frame_system::EnsureSigned; /// A straight majority of the council can decide what their next motion is. type ExternalOrigin = pallet_collective::EnsureProportionAtLeast; @@ -99,6 +100,7 @@ impl pallet_collective::Config for Runtime { type MaxProposals = CouncilMaxProposals; type MaxMembers = CouncilMaxMembers; type DefaultVote = pallet_collective::PrimeDefaultVote; + type SetMembersOrigin = EnsureRoot; type WeightInfo = weights::pallet_collective_council::WeightInfo; } @@ -112,6 +114,7 @@ parameter_types! { pub TermDuration: BlockNumber = prod_or_fast!(24 * HOURS, 2 * MINUTES, "KSM_TERM_DURATION"); pub const DesiredMembers: u32 = 19; pub const DesiredRunnersUp: u32 = 19; + pub const MaxVotesPerVoter: u32 = 16; pub const MaxVoters: u32 = 10 * 1000; pub const MaxCandidates: u32 = 1000; pub const PhragmenElectionPalletId: LockIdentifier = *b"phrelect"; @@ -136,6 +139,7 @@ impl pallet_elections_phragmen::Config for Runtime { type TermDuration = TermDuration; type MaxVoters = MaxVoters; type MaxCandidates = MaxCandidates; + type MaxVotesPerVoter = MaxVotesPerVoter; type PalletId = PhragmenElectionPalletId; type WeightInfo = weights::pallet_elections_phragmen::WeightInfo; } @@ -155,6 +159,7 @@ impl pallet_collective::Config for Runtime { type MaxProposals = TechnicalMaxProposals; type MaxMembers = TechnicalMaxMembers; type DefaultVote = pallet_collective::PrimeDefaultVote; + type SetMembersOrigin = EnsureRoot; type WeightInfo = weights::pallet_collective_technical_committee::WeightInfo; } diff --git a/runtime/kusama/src/lib.rs b/runtime/kusama/src/lib.rs index e6ecb9b0df7a..f9f7d7a9434b 100644 --- a/runtime/kusama/src/lib.rs +++ b/runtime/kusama/src/lib.rs @@ -22,7 +22,7 @@ use pallet_nis::WithMaximumOf; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; -use primitives::v2::{ +use primitives::{ AccountId, AccountIndex, Balance, BlockNumber, CandidateEvent, CommittedCandidateReceipt, CoreState, GroupRotationInfo, Hash, Id as ParaId, InboundDownwardMessage, InboundHrmpMessage, Moment, Nonce, OccupiedCoreAssumption, PersistedValidationData, ScrapedOnChainVotes, @@ -46,7 +46,7 @@ use runtime_parachains::{ }; use authority_discovery_primitives::AuthorityId as AuthorityDiscoveryId; -use beefy_primitives::crypto::AuthorityId as BeefyId; +use beefy_primitives::crypto::{AuthorityId as BeefyId, Signature as BeefySignature}; use frame_election_provider_support::{ generate_solution_type, onchain, NposSolution, SequentialPhragmen, }; @@ -106,10 +106,9 @@ pub mod xcm_config; // Governance configurations. pub mod governance; use governance::{ - old::CouncilCollective, pallet_custom_origins, AuctionAdmin, GeneralAdmin, LeaseAdmin, + old::CouncilCollective, pallet_custom_origins, AuctionAdmin, Fellows, GeneralAdmin, LeaseAdmin, StakingAdmin, Treasurer, TreasurySpender, }; -use xcm_config::CheckAccount; #[cfg(test)] mod tests; @@ -126,13 +125,13 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("kusama"), impl_name: create_runtime_str!("parity-kusama"), authoring_version: 2, - spec_version: 9360, + spec_version: 9400, impl_version: 0, #[cfg(not(feature = "disable-runtime-api"))] apis: RUNTIME_API_VERSIONS, #[cfg(feature = "disable-runtime-api")] apis: sp_version::create_apis_vec![[]], - transaction_version: 18, + transaction_version: 21, state_version: 0, }; @@ -224,7 +223,7 @@ impl pallet_scheduler::Config for Runtime { type PalletsOrigin = OriginCaller; type RuntimeCall = RuntimeCall; type MaximumWeight = MaximumSchedulerWeight; - type ScheduleOrigin = EnsureRoot; + type ScheduleOrigin = EitherOf, AuctionAdmin>; type MaxScheduledPerBlock = MaxScheduledPerBlock; type WeightInfo = weights::pallet_scheduler::WeightInfo; type OriginPrivilegeCmp = OriginPrivilegeCmp; @@ -265,20 +264,11 @@ impl pallet_babe::Config for Runtime { type DisabledValidators = Session; - type KeyOwnerProof = >::Proof; - - type KeyOwnerIdentification = >::IdentificationTuple; - - type KeyOwnerProofSystem = Historical; + type KeyOwnerProof = + >::Proof; - type HandleEquivocation = - pallet_babe::EquivocationHandler; + type EquivocationReportSystem = + pallet_babe::EquivocationReportSystem; type WeightInfo = (); @@ -341,14 +331,8 @@ impl pallet_timestamp::Config for Runtime { type WeightInfo = weights::pallet_timestamp::WeightInfo; } -parameter_types! { - pub const UncleGenerations: u32 = 0; -} - impl pallet_authorship::Config for Runtime { type FindAuthor = pallet_session::FindAccountFromAuthorIndex; - type UncleGenerations = UncleGenerations; - type FilterUncle = (); type EventHandler = (Staking, ImOnline); } @@ -449,6 +433,7 @@ impl pallet_election_provider_multi_phase::MinerConfig for Runtime { as frame_election_provider_support::ElectionDataProvider >::MaxVotesPerVoter; + type MaxWinners = MaxActiveValidators; // The unsigned submissions have to respect the weight of the submit_unsigned call, thus their // weight estimate function is wired to this call's weight. @@ -584,8 +569,7 @@ impl pallet_staking::Config for Runtime { type SessionsPerEra = SessionsPerEra; type BondingDuration = BondingDuration; type SlashDeferDuration = SlashDeferDuration; - // The staking admin or root can cancel the slash. - type SlashCancelOrigin = EitherOf, StakingAdmin>; + type AdminOrigin = EitherOf, StakingAdmin>; type SessionInterface = Self; type EraPayout = EraPayout; type NextNewSession = Session; @@ -609,8 +593,11 @@ impl pallet_fast_unstake::Config for Runtime { EnsureRoot, pallet_collective::EnsureProportionAtLeast, >; - type WeightInfo = weights::pallet_fast_unstake::WeightInfo; type Staking = Staking; + type MaxErasToCheckPerBlock = ConstU32<1>; + #[cfg(feature = "runtime-benchmarks")] + type MaxBackersPerValidator = MaxNominatorRewardedPerValidator; + type WeightInfo = weights::pallet_fast_unstake::WeightInfo; } parameter_types! { @@ -727,27 +714,21 @@ impl pallet_im_online::Config for Runtime { type MaxPeerDataEncodingSize = MaxPeerDataEncodingSize; } +parameter_types! { + pub MaxSetIdSessionEntries: u32 = BondingDuration::get() * SessionsPerEra::get(); +} + impl pallet_grandpa::Config for Runtime { type RuntimeEvent = RuntimeEvent; - type KeyOwnerProof = - >::Proof; - - type KeyOwnerIdentification = >::IdentificationTuple; - - type KeyOwnerProofSystem = Historical; - - type HandleEquivocation = pallet_grandpa::EquivocationHandler< - Self::KeyOwnerIdentification, - Offences, - ReportLongevity, - >; - type WeightInfo = (); type MaxAuthorities = MaxAuthorities; + type MaxSetIdSessionEntries = MaxSetIdSessionEntries; + + type KeyOwnerProof = >::Proof; + + type EquivocationReportSystem = + pallet_grandpa::EquivocationReportSystem; } /// Submits transaction with the node's public and signature type. Adheres to the signed extension @@ -993,7 +974,6 @@ impl InstanceFilter for ProxyType { RuntimeCall::Indices(pallet_indices::Call::freeze {..}) | // Specifically omitting Indices `transfer`, `force_transfer` // Specifically omitting the entire Balances pallet - RuntimeCall::Authorship(..) | RuntimeCall::Staking(..) | RuntimeCall::Session(..) | RuntimeCall::Grandpa(..) | @@ -1276,6 +1256,7 @@ parameter_types! { pub const ThawThrottle: (Perquintill, BlockNumber) = (Perquintill::from_percent(25), 5); pub storage NisTarget: Perquintill = Perquintill::zero(); pub const NisPalletId: PalletId = PalletId(*b"py/nis "); + pub const NisReserveId: [u8; 8] = *b"py/nis "; } impl pallet_nis::Config for Runtime { @@ -1299,6 +1280,7 @@ impl pallet_nis::Config for Runtime { type IntakePeriod = IntakePeriod; type MaxIntakeWeight = MaxIntakeWeight; type ThawThrottle = ThawThrottle; + type ReserveId = NisReserveId; } parameter_types! { @@ -1325,7 +1307,7 @@ impl pallet_nomination_pools::Config for Runtime { construct_runtime! { pub enum Runtime where Block = Block, - NodeBlock = primitives::v2::Block, + NodeBlock = primitives::Block, UncheckedExtrinsic = UncheckedExtrinsic { // Basic stuff; balances is uncallable initially. @@ -1342,7 +1324,7 @@ construct_runtime! { // Consensus support. // Authorship must be before session in order to note author in the correct session and era // for im-online and staking. - Authorship: pallet_authorship::{Pallet, Call, Storage} = 5, + Authorship: pallet_authorship::{Pallet, Storage} = 5, Staking: pallet_staking::{Pallet, Call, Storage, Config, Event} = 6, Offences: pallet_offences::{Pallet, Storage, Event} = 7, Historical: session_historical::{Pallet} = 34, @@ -1474,14 +1456,22 @@ pub type SignedExtra = ( pallet_transaction_payment::ChargeTransactionPayment, ); -pub struct StakingMigrationV11OldPallet; -impl Get<&'static str> for StakingMigrationV11OldPallet { - fn get() -> &'static str { - "VoterList" +pub struct NominationPoolsMigrationV4OldPallet; +impl Get for NominationPoolsMigrationV4OldPallet { + fn get() -> Perbill { + Perbill::from_percent(10) } } -pub type Migrations = (); +/// All migrations that will run on the next runtime upgrade. +/// +/// Should be cleared after every release. +pub type Migrations = ( + pallet_nomination_pools::migration::v4::MigrateToV4< + Runtime, + NominationPoolsMigrationV4OldPallet, + >, +); /// Unchecked extrinsic type as expected by this runtime. pub type UncheckedExtrinsic = @@ -1560,6 +1550,7 @@ mod benches { [pallet_vesting, Vesting] [pallet_whitelist, Whitelist] // XCM + [pallet_xcm, XcmPallet] [pallet_xcm_benchmarks::fungible, pallet_xcm_benchmarks::fungible::Pallet::] [pallet_xcm_benchmarks::generic, pallet_xcm_benchmarks::generic::Pallet::] ); @@ -1654,7 +1645,7 @@ sp_api::impl_runtime_apis! { fn check_validation_outputs( para_id: ParaId, - outputs: primitives::v2::CandidateCommitments, + outputs: primitives::CandidateCommitments, ) -> bool { parachains_runtime_api_impl::check_validation_outputs::(para_id, outputs) } @@ -1706,8 +1697,8 @@ sp_api::impl_runtime_apis! { } fn submit_pvf_check_statement( - stmt: primitives::v2::PvfCheckStatement, - signature: primitives::v2::ValidatorSignature, + stmt: primitives::PvfCheckStatement, + signature: primitives::ValidatorSignature, ) { parachains_runtime_api_impl::submit_pvf_check_statement::(stmt, signature) } @@ -1724,10 +1715,33 @@ sp_api::impl_runtime_apis! { } impl beefy_primitives::BeefyApi for Runtime { + fn beefy_genesis() -> Option { + // dummy implementation due to lack of BEEFY pallet. + None + } + fn validator_set() -> Option> { // dummy implementation due to lack of BEEFY pallet. None } + + fn submit_report_equivocation_unsigned_extrinsic( + _equivocation_proof: beefy_primitives::EquivocationProof< + BlockNumber, + BeefyId, + BeefySignature, + >, + _key_owner_proof: beefy_primitives::OpaqueKeyOwnershipProof, + ) -> Option<()> { + None + } + + fn generate_key_ownership_proof( + _set_id: beefy_primitives::ValidatorSetId, + _authority_id: BeefyId, + ) -> Option { + None + } } impl mmr::MmrApi for Runtime { @@ -1880,6 +1894,12 @@ sp_api::impl_runtime_apis! { fn query_fee_details(uxt: ::Extrinsic, len: u32) -> FeeDetails { TransactionPayment::query_fee_details(uxt, len) } + fn query_weight_to_fee(weight: Weight) -> Balance { + TransactionPayment::weight_to_fee(weight) + } + fn query_length_to_fee(length: u32) -> Balance { + TransactionPayment::length_to_fee(length) + } } impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi @@ -1891,6 +1911,12 @@ sp_api::impl_runtime_apis! { fn query_call_fee_details(call: RuntimeCall, len: u32) -> FeeDetails { TransactionPayment::query_call_fee_details(call, len) } + fn query_weight_to_fee(weight: Weight) -> Balance { + TransactionPayment::weight_to_fee(weight) + } + fn query_length_to_fee(length: u32) -> Balance { + TransactionPayment::length_to_fee(length) + } } impl pallet_nomination_pools_runtime_api::NominationPoolsApi< @@ -1899,13 +1925,27 @@ sp_api::impl_runtime_apis! { Balance, > for Runtime { fn pending_rewards(member: AccountId) -> Balance { - NominationPools::pending_rewards(member).unwrap_or_default() + NominationPools::api_pending_rewards(member).unwrap_or_default() + } + + fn points_to_balance(pool_id: pallet_nomination_pools::PoolId, points: Balance) -> Balance { + NominationPools::api_points_to_balance(pool_id, points) + } + + fn balance_to_points(pool_id: pallet_nomination_pools::PoolId, new_funds: Balance) -> Balance { + NominationPools::api_balance_to_points(pool_id, new_funds) + } + } + + impl pallet_staking_runtime_api::StakingApi for Runtime { + fn nominations_quota(balance: Balance) -> u32 { + Staking::api_nominations_quota(balance) } } #[cfg(feature = "try-runtime")] impl frame_try_runtime::TryRuntime for Runtime { - fn on_runtime_upgrade(checks: bool) -> (Weight, Weight) { + fn on_runtime_upgrade(checks: frame_try_runtime::UpgradeCheckSelect) -> (Weight, Weight) { log::info!("try-runtime::on_runtime_upgrade kusama."); let weight = Executive::try_runtime_upgrade(checks).unwrap(); (weight, BlockWeights::get().max_block) @@ -1962,7 +2002,9 @@ sp_api::impl_runtime_apis! { use pallet_nomination_pools_benchmarking::Pallet as NominationPoolsBench; use frame_benchmarking::baseline::Pallet as Baseline; use xcm::latest::prelude::*; - use xcm_config::{CheckAccount, KsmLocation, SovereignAccountOf, Statemine, XcmConfig}; + use xcm_config::{ + LocalCheckAccount, SovereignAccountOf, Statemine, TokenLocation, XcmConfig, + }; impl pallet_session_benchmarking::Config for Runtime {} impl pallet_offences_benchmarking::Config for Runtime {} @@ -1977,10 +2019,10 @@ sp_api::impl_runtime_apis! { fn valid_destination() -> Result { Ok(Statemine::get()) } - fn worst_case_holding() -> MultiAssets { + fn worst_case_holding(_depositable_count: u32) -> MultiAssets { // Kusama only knows about KSM. vec![MultiAsset{ - id: Concrete(KsmLocation::get()), + id: Concrete(TokenLocation::get()), fun: Fungible(1_000_000 * UNITS), }].into() } @@ -1989,24 +2031,19 @@ sp_api::impl_runtime_apis! { parameter_types! { pub const TrustedTeleporter: Option<(MultiLocation, MultiAsset)> = Some(( Statemine::get(), - MultiAsset { fun: Fungible(1 * UNITS), id: Concrete(KsmLocation::get()) }, - )); - pub const TrustedReserve: Option<(MultiLocation, MultiAsset)> = Some(( - Statemine::get(), - MultiAsset { fun: Fungible(1 * UNITS), id: Concrete(KsmLocation::get()) }, + MultiAsset { fun: Fungible(1 * UNITS), id: Concrete(TokenLocation::get()) }, )); } impl pallet_xcm_benchmarks::fungible::Config for Runtime { type TransactAsset = Balances; - type CheckedAccount = CheckAccount; + type CheckedAccount = LocalCheckAccount; type TrustedTeleporter = TrustedTeleporter; - type TrustedReserve = TrustedReserve; fn get_multi_asset() -> MultiAsset { MultiAsset { - id: Concrete(KsmLocation::get()), + id: Concrete(TokenLocation::get()), fun: Fungible(1 * UNITS), } } @@ -2019,8 +2056,18 @@ sp_api::impl_runtime_apis! { (0u64, Response::Version(Default::default())) } - fn transact_origin() -> Result { - Ok(Statemine::get()) + fn worst_case_asset_exchange() -> Result<(MultiAssets, MultiAssets), BenchmarkError> { + // Kusama doesn't support asset exchanges + Err(BenchmarkError::Skip) + } + + fn universal_alias() -> Result { + // The XCM executor of Kusama doesn't have a configured `UniversalAliases` + Err(BenchmarkError::Skip) + } + + fn transact_origin_and_runtime_call() -> Result<(MultiLocation, RuntimeCall), BenchmarkError> { + Ok((Statemine::get(), frame_system::Call::remark_with_event { remark: vec![] }.into())) } fn subscribe_origin() -> Result { @@ -2029,10 +2076,15 @@ sp_api::impl_runtime_apis! { fn claimable_asset() -> Result<(MultiLocation, MultiLocation, MultiAssets), BenchmarkError> { let origin = Statemine::get(); - let assets: MultiAssets = (Concrete(KsmLocation::get()), 1_000 * UNITS).into(); + let assets: MultiAssets = (Concrete(TokenLocation::get()), 1_000 * UNITS).into(); let ticket = MultiLocation { parents: 0, interior: Here }; Ok((origin, ticket, assets)) } + + fn unlockable_asset() -> Result<(MultiLocation, MultiLocation, MultiAsset), BenchmarkError> { + // Kusama doesn't support asset locking + Err(BenchmarkError::Skip) + } } let whitelist: Vec = vec![ @@ -2113,6 +2165,19 @@ mod multiplier_tests { }) } + #[test] + fn fast_unstake_estimate() { + use pallet_fast_unstake::WeightInfo; + let block_time = BlockWeights::get().max_block.ref_time() as f32; + let on_idle = weights::pallet_fast_unstake::WeightInfo::::on_idle_check( + 1000, + ::BatchSize::get(), + ) + .ref_time() as f32; + println!("ratio of block weight for full batch fast-unstake {}", on_idle / block_time); + assert!(on_idle / block_time <= 0.5f32) + } + #[test] #[ignore] fn multiplier_growth_simulator() { @@ -2197,7 +2262,7 @@ mod multiplier_tests { #[cfg(all(test, feature = "try-runtime"))] mod remote_tests { use super::*; - use frame_try_runtime::runtime_decl_for_TryRuntime::TryRuntime; + use frame_try_runtime::{runtime_decl_for_try_runtime::TryRuntime, UpgradeCheckSelect}; use remote_externalities::{ Builder, Mode, OfflineConfig, OnlineConfig, SnapshotConfig, Transport, }; @@ -2205,6 +2270,10 @@ mod remote_tests { #[tokio::test] async fn run_migrations() { + if var("RUN_MIGRATION_TESTS").is_err() { + return + } + sp_tracing::try_init_simple(); let transport: Transport = var("WS").unwrap_or("wss://kusama-rpc.polkadot.io:443".to_string()).into(); @@ -2225,6 +2294,35 @@ mod remote_tests { .build() .await .unwrap(); - ext.execute_with(|| Runtime::on_runtime_upgrade(true)); + ext.execute_with(|| Runtime::on_runtime_upgrade(UpgradeCheckSelect::PreAndPost)); + } + + #[tokio::test] + #[ignore = "this test is meant to be executed manually"] + async fn try_fast_unstake_all() { + sp_tracing::try_init_simple(); + let transport: Transport = + var("WS").unwrap_or("wss://kusama-rpc.polkadot.io:443".to_string()).into(); + let maybe_state_snapshot: Option = var("SNAP").map(|s| s.into()).ok(); + let mut ext = Builder::::default() + .mode(if let Some(state_snapshot) = maybe_state_snapshot { + Mode::OfflineOrElseOnline( + OfflineConfig { state_snapshot: state_snapshot.clone() }, + OnlineConfig { + transport, + state_snapshot: Some(state_snapshot), + ..Default::default() + }, + ) + } else { + Mode::Online(OnlineConfig { transport, ..Default::default() }) + }) + .build() + .await + .unwrap(); + ext.execute_with(|| { + pallet_fast_unstake::ErasToCheckPerBlock::::put(1); + runtime_common::try_runtime::migrate_all_inactive_nominators::() + }); } } diff --git a/runtime/kusama/src/weights/frame_benchmarking_baseline.rs b/runtime/kusama/src/weights/frame_benchmarking_baseline.rs index 26ae9bdb3f3c..4f00c743b5b8 100644 --- a/runtime/kusama/src/weights/frame_benchmarking_baseline.rs +++ b/runtime/kusama/src/weights/frame_benchmarking_baseline.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `frame_benchmarking::baseline` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -46,54 +47,57 @@ pub struct WeightInfo(PhantomData); impl frame_benchmarking::baseline::WeightInfo for WeightInfo { /// The range of component `i` is `[0, 1000000]`. fn addition(_i: u32, ) -> Weight { - // Minimum execution time: 136 nanoseconds. - Weight::from_ref_time(166_415) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 181_000 picoseconds. + Weight::from_parts(213_057, 0) + .saturating_add(Weight::from_parts(0, 0)) } /// The range of component `i` is `[0, 1000000]`. fn subtraction(_i: u32, ) -> Weight { - // Minimum execution time: 134 nanoseconds. - Weight::from_ref_time(157_476) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 187_000 picoseconds. + Weight::from_parts(218_567, 0) + .saturating_add(Weight::from_parts(0, 0)) } /// The range of component `i` is `[0, 1000000]`. fn multiplication(_i: u32, ) -> Weight { - // Minimum execution time: 146 nanoseconds. - Weight::from_ref_time(181_850) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 186_000 picoseconds. + Weight::from_parts(217_697, 0) + .saturating_add(Weight::from_parts(0, 0)) } /// The range of component `i` is `[0, 1000000]`. fn division(_i: u32, ) -> Weight { - // Minimum execution time: 138 nanoseconds. - Weight::from_ref_time(160_267) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 175_000 picoseconds. + Weight::from_parts(215_174, 0) + .saturating_add(Weight::from_parts(0, 0)) } - /// The range of component `i` is `[0, 100]`. - fn hashing(i: u32, ) -> Weight { - // Minimum execution time: 20_402_851 nanoseconds. - Weight::from_ref_time(20_598_144_604) - // Standard Error: 170_002 - .saturating_add(Weight::from_ref_time(1_774_395).saturating_mul(i.into())) + fn hashing() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 19_355_019_000 picoseconds. + Weight::from_parts(19_438_410_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } /// The range of component `i` is `[0, 100]`. fn sr25519_verification(i: u32, ) -> Weight { - // Minimum execution time: 172 nanoseconds. - Weight::from_ref_time(184_000) - // Standard Error: 15_734 - .saturating_add(Weight::from_ref_time(47_361_013).saturating_mul(i.into())) - } - // Storage: Skipped Metadata (r:0 w:0) - /// The range of component `i` is `[0, 1000]`. - fn storage_read(i: u32, ) -> Weight { - // Minimum execution time: 153 nanoseconds. - Weight::from_ref_time(158_000) - // Standard Error: 3_447 - .saturating_add(Weight::from_ref_time(1_943_306).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) - } - // Storage: Skipped Metadata (r:0 w:0) - /// The range of component `i` is `[0, 1000]`. - fn storage_write(i: u32, ) -> Weight { - // Minimum execution time: 156 nanoseconds. - Weight::from_ref_time(165_000) - // Standard Error: 826 - .saturating_add(Weight::from_ref_time(339_692).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 215_000 picoseconds. + Weight::from_parts(225_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 21_389 + .saturating_add(Weight::from_parts(47_593_832, 0).saturating_mul(i.into())) } } diff --git a/runtime/kusama/src/weights/frame_election_provider_support.rs b/runtime/kusama/src/weights/frame_election_provider_support.rs index e87e6d18f9a4..90a8b946babc 100644 --- a/runtime/kusama/src/weights/frame_election_provider_support.rs +++ b/runtime/kusama/src/weights/frame_election_provider_support.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `frame_election_provider_support` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -48,22 +49,30 @@ impl frame_election_provider_support::WeightInfo for We /// The range of component `t` is `[500, 1000]`. /// The range of component `d` is `[5, 16]`. fn phragmen(v: u32, _t: u32, d: u32, ) -> Weight { - // Minimum execution time: 5_604_066 nanoseconds. - Weight::from_ref_time(5_684_602_000) - // Standard Error: 136_652 - .saturating_add(Weight::from_ref_time(5_624_974).saturating_mul(v.into())) - // Standard Error: 13_970_853 - .saturating_add(Weight::from_ref_time(1_542_520_189).saturating_mul(d.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 6_408_324_000 picoseconds. + Weight::from_parts(6_485_200_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 141_569 + .saturating_add(Weight::from_parts(5_934_369, 0).saturating_mul(v.into())) + // Standard Error: 14_473_545 + .saturating_add(Weight::from_parts(1_546_857_142, 0).saturating_mul(d.into())) } /// The range of component `v` is `[1000, 2000]`. /// The range of component `t` is `[500, 1000]`. /// The range of component `d` is `[5, 16]`. fn phragmms(v: u32, _t: u32, d: u32, ) -> Weight { - // Minimum execution time: 4_388_357 nanoseconds. - Weight::from_ref_time(4_435_501_000) - // Standard Error: 144_834 - .saturating_add(Weight::from_ref_time(5_517_220).saturating_mul(v.into())) - // Standard Error: 14_807_411 - .saturating_add(Weight::from_ref_time(1_743_460_054).saturating_mul(d.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 4_994_312_000 picoseconds. + Weight::from_parts(5_043_278_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 153_800 + .saturating_add(Weight::from_parts(5_926_584, 0).saturating_mul(v.into())) + // Standard Error: 15_724_043 + .saturating_add(Weight::from_parts(1_841_670_903, 0).saturating_mul(d.into())) } } diff --git a/runtime/kusama/src/weights/frame_system.rs b/runtime/kusama/src/weights/frame_system.rs index 41eefdd60edf..d840efb1effd 100644 --- a/runtime/kusama/src/weights/frame_system.rs +++ b/runtime/kusama/src/weights/frame_system.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `frame_system` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -46,51 +47,82 @@ pub struct WeightInfo(PhantomData); impl frame_system::WeightInfo for WeightInfo { /// The range of component `b` is `[0, 3932160]`. fn remark(b: u32, ) -> Weight { - // Minimum execution time: 3_648 nanoseconds. - Weight::from_ref_time(3_683_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_184_000 picoseconds. + Weight::from_parts(2_232_000, 0) + .saturating_add(Weight::from_parts(0, 0)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(411).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(374, 0).saturating_mul(b.into())) } /// The range of component `b` is `[0, 3932160]`. fn remark_with_event(b: u32, ) -> Weight { - // Minimum execution time: 13_146 nanoseconds. - Weight::from_ref_time(13_225_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_626_000 picoseconds. + Weight::from_parts(7_777_000, 0) + .saturating_add(Weight::from_parts(0, 0)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_768).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(1_410, 0).saturating_mul(b.into())) } - // Storage: System Digest (r:1 w:1) - // Storage: unknown [0x3a686561707061676573] (r:0 w:1) + /// Storage: System Digest (r:1 w:1) + /// Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: unknown `0x3a686561707061676573` (r:0 w:1) + /// Proof Skipped: unknown `0x3a686561707061676573` (r:0 w:1) fn set_heap_pages() -> Weight { - // Minimum execution time: 8_585 nanoseconds. - Weight::from_ref_time(8_945_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `1485` + // Minimum execution time: 4_094_000 picoseconds. + Weight::from_parts(4_332_000, 0) + .saturating_add(Weight::from_parts(0, 1485)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Skipped Metadata (r:0 w:0) + /// Storage: Skipped Metadata (r:0 w:0) + /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[0, 1000]`. fn set_storage(i: u32, ) -> Weight { - // Minimum execution time: 3_544 nanoseconds. - Weight::from_ref_time(3_627_000) - // Standard Error: 2_039 - .saturating_add(Weight::from_ref_time(627_800).saturating_mul(i.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_142_000 picoseconds. + Weight::from_parts(2_256_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 1_736 + .saturating_add(Weight::from_parts(658_559, 0).saturating_mul(i.into())) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } - // Storage: Skipped Metadata (r:0 w:0) + /// Storage: Skipped Metadata (r:0 w:0) + /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[0, 1000]`. fn kill_storage(i: u32, ) -> Weight { - // Minimum execution time: 3_552 nanoseconds. - Weight::from_ref_time(3_643_000) - // Standard Error: 931 - .saturating_add(Weight::from_ref_time(448_561).saturating_mul(i.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_179_000 picoseconds. + Weight::from_parts(2_226_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 817 + .saturating_add(Weight::from_parts(485_258, 0).saturating_mul(i.into())) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } - // Storage: Skipped Metadata (r:0 w:0) + /// Storage: Skipped Metadata (r:0 w:0) + /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) /// The range of component `p` is `[0, 1000]`. fn kill_prefix(p: u32, ) -> Weight { - // Minimum execution time: 5_388 nanoseconds. - Weight::from_ref_time(5_462_000) - // Standard Error: 1_167 - .saturating_add(Weight::from_ref_time(968_196).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `120 + p * (69 ±0)` + // Estimated: `121 + p * (70 ±0)` + // Minimum execution time: 4_109_000 picoseconds. + Weight::from_parts(4_255_000, 0) + .saturating_add(Weight::from_parts(0, 121)) + // Standard Error: 1_259 + .saturating_add(Weight::from_parts(1_043_188, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) + .saturating_add(Weight::from_parts(0, 70).saturating_mul(p.into())) } } diff --git a/runtime/kusama/src/weights/mod.rs b/runtime/kusama/src/weights/mod.rs index c277b2beb819..014204074484 100644 --- a/runtime/kusama/src/weights/mod.rs +++ b/runtime/kusama/src/weights/mod.rs @@ -50,6 +50,7 @@ pub mod pallet_treasury; pub mod pallet_utility; pub mod pallet_vesting; pub mod pallet_whitelist; +pub mod pallet_xcm; pub mod runtime_common_auctions; pub mod runtime_common_claims; pub mod runtime_common_crowdloan; diff --git a/runtime/kusama/src/weights/pallet_bags_list.rs b/runtime/kusama/src/weights/pallet_bags_list.rs index e971db995843..d41dac22e662 100644 --- a/runtime/kusama/src/weights/pallet_bags_list.rs +++ b/runtime/kusama/src/weights/pallet_bags_list.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_bags_list` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,34 +45,59 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_bags_list`. pub struct WeightInfo(PhantomData); impl pallet_bags_list::WeightInfo for WeightInfo { - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:0) - // Storage: VoterList ListNodes (r:4 w:4) - // Storage: VoterList ListBags (r:1 w:1) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:4 w:4) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn rebag_non_terminal() -> Weight { - // Minimum execution time: 66_208 nanoseconds. - Weight::from_ref_time(66_877_000) + // Proof Size summary in bytes: + // Measured: `1654` + // Estimated: `23146` + // Minimum execution time: 60_668_000 picoseconds. + Weight::from_parts(62_285_000, 0) + .saturating_add(Weight::from_parts(0, 23146)) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:0) - // Storage: VoterList ListNodes (r:3 w:3) - // Storage: VoterList ListBags (r:2 w:2) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:3 w:3) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:2 w:2) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn rebag_terminal() -> Weight { - // Minimum execution time: 64_493 nanoseconds. - Weight::from_ref_time(65_068_000) + // Proof Size summary in bytes: + // Measured: `1548` + // Estimated: `23074` + // Minimum execution time: 58_418_000 picoseconds. + Weight::from_parts(59_124_000, 0) + .saturating_add(Weight::from_parts(0, 23074)) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: VoterList ListNodes (r:4 w:4) - // Storage: Staking Bonded (r:2 w:0) - // Storage: Staking Ledger (r:2 w:0) - // Storage: VoterList CounterForListNodes (r:1 w:1) - // Storage: VoterList ListBags (r:1 w:1) + /// Storage: VoterList ListNodes (r:4 w:4) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:2 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:2 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn put_in_front_of() -> Weight { - // Minimum execution time: 64_542 nanoseconds. - Weight::from_ref_time(65_395_000) + // Proof Size summary in bytes: + // Measured: `1857` + // Estimated: `30748` + // Minimum execution time: 64_409_000 picoseconds. + Weight::from_parts(65_566_000, 0) + .saturating_add(Weight::from_parts(0, 30748)) .saturating_add(T::DbWeight::get().reads(10)) .saturating_add(T::DbWeight::get().writes(6)) } diff --git a/runtime/kusama/src/weights/pallet_balances.rs b/runtime/kusama/src/weights/pallet_balances.rs index 1787c8d3822d..ebe7d8bc43d1 100644 --- a/runtime/kusama/src/weights/pallet_balances.rs +++ b/runtime/kusama/src/weights/pallet_balances.rs @@ -47,49 +47,49 @@ impl pallet_balances::WeightInfo for WeightInfo { // Storage: System Account (r:1 w:1) fn transfer() -> Weight { // Minimum execution time: 40_902 nanoseconds. - Weight::from_ref_time(41_638_000 as u64) + Weight::from_parts(41_638_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { // Minimum execution time: 30_093 nanoseconds. - Weight::from_ref_time(30_732_000 as u64) + Weight::from_parts(30_732_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn set_balance_creating() -> Weight { // Minimum execution time: 23_901 nanoseconds. - Weight::from_ref_time(24_238_000 as u64) + Weight::from_parts(24_238_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn set_balance_killing() -> Weight { // Minimum execution time: 26_402 nanoseconds. - Weight::from_ref_time(27_026_000 as u64) + Weight::from_parts(27_026_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:2 w:2) fn force_transfer() -> Weight { // Minimum execution time: 40_328 nanoseconds. - Weight::from_ref_time(41_242_000 as u64) + Weight::from_parts(41_242_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: System Account (r:1 w:1) fn transfer_all() -> Weight { // Minimum execution time: 35_401 nanoseconds. - Weight::from_ref_time(36_122_000 as u64) + Weight::from_parts(36_122_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn force_unreserve() -> Weight { // Minimum execution time: 20_178 nanoseconds. - Weight::from_ref_time(20_435_000 as u64) + Weight::from_parts(20_435_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } diff --git a/runtime/kusama/src/weights/pallet_balances_nis_counterpart_balances.rs b/runtime/kusama/src/weights/pallet_balances_nis_counterpart_balances.rs index ec107400da19..cdd715608a52 100644 --- a/runtime/kusama/src/weights/pallet_balances_nis_counterpart_balances.rs +++ b/runtime/kusama/src/weights/pallet_balances_nis_counterpart_balances.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_balances` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,61 +45,105 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_balances`. pub struct WeightInfo(PhantomData); impl pallet_balances::WeightInfo for WeightInfo { - // Storage: NisCounterpartBalances Account (r:2 w:2) - // Storage: System Account (r:1 w:1) - // Storage: NisCounterpartBalances TotalIssuance (r:1 w:1) + /// Storage: NisCounterpartBalances Account (r:2 w:2) + /// Proof: NisCounterpartBalances Account (max_values: None, max_size: Some(112), added: 2587, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: NisCounterpartBalances TotalIssuance (r:1 w:1) + /// Proof: NisCounterpartBalances TotalIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn transfer() -> Weight { - // Minimum execution time: 44_076 nanoseconds. - Weight::from_ref_time(44_954_000) + // Proof Size summary in bytes: + // Measured: `219` + // Estimated: `11258` + // Minimum execution time: 39_224_000 picoseconds. + Weight::from_parts(39_636_000, 0) + .saturating_add(Weight::from_parts(0, 11258)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: NisCounterpartBalances Account (r:2 w:2) - // Storage: System Account (r:1 w:1) + /// Storage: NisCounterpartBalances Account (r:2 w:2) + /// Proof: NisCounterpartBalances Account (max_values: None, max_size: Some(112), added: 2587, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn transfer_keep_alive() -> Weight { - // Minimum execution time: 31_397 nanoseconds. - Weight::from_ref_time(31_869_000) + // Proof Size summary in bytes: + // Measured: `217` + // Estimated: `9757` + // Minimum execution time: 27_245_000 picoseconds. + Weight::from_parts(28_139_000, 0) + .saturating_add(Weight::from_parts(0, 9757)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: NisCounterpartBalances Account (r:1 w:1) - // Storage: NisCounterpartBalances TotalIssuance (r:1 w:1) + /// Storage: NisCounterpartBalances Account (r:1 w:1) + /// Proof: NisCounterpartBalances Account (max_values: None, max_size: Some(112), added: 2587, mode: MaxEncodedLen) + /// Storage: NisCounterpartBalances TotalIssuance (r:1 w:1) + /// Proof: NisCounterpartBalances TotalIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn set_balance_creating() -> Weight { - // Minimum execution time: 21_658 nanoseconds. - Weight::from_ref_time(22_126_000) + // Proof Size summary in bytes: + // Measured: `219` + // Estimated: `5078` + // Minimum execution time: 16_568_000 picoseconds. + Weight::from_parts(16_964_000, 0) + .saturating_add(Weight::from_parts(0, 5078)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: NisCounterpartBalances Account (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: NisCounterpartBalances TotalIssuance (r:1 w:1) + /// Storage: NisCounterpartBalances Account (r:1 w:1) + /// Proof: NisCounterpartBalances Account (max_values: None, max_size: Some(112), added: 2587, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: NisCounterpartBalances TotalIssuance (r:1 w:1) + /// Proof: NisCounterpartBalances TotalIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn set_balance_killing() -> Weight { - // Minimum execution time: 29_939 nanoseconds. - Weight::from_ref_time(31_169_000) + // Proof Size summary in bytes: + // Measured: `393` + // Estimated: `8671` + // Minimum execution time: 24_153_000 picoseconds. + Weight::from_parts(24_529_000, 0) + .saturating_add(Weight::from_parts(0, 8671)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: NisCounterpartBalances Account (r:2 w:2) - // Storage: System Account (r:2 w:2) - // Storage: NisCounterpartBalances TotalIssuance (r:1 w:1) + /// Storage: NisCounterpartBalances Account (r:2 w:2) + /// Proof: NisCounterpartBalances Account (max_values: None, max_size: Some(112), added: 2587, mode: MaxEncodedLen) + /// Storage: System Account (r:2 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: NisCounterpartBalances TotalIssuance (r:1 w:1) + /// Proof: NisCounterpartBalances TotalIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn force_transfer() -> Weight { - // Minimum execution time: 44_171 nanoseconds. - Weight::from_ref_time(44_796_000) + // Proof Size summary in bytes: + // Measured: `322` + // Estimated: `13861` + // Minimum execution time: 41_412_000 picoseconds. + Weight::from_parts(42_310_000, 0) + .saturating_add(Weight::from_parts(0, 13861)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: NisCounterpartBalances Account (r:2 w:2) - // Storage: System Account (r:1 w:1) + /// Storage: NisCounterpartBalances Account (r:2 w:2) + /// Proof: NisCounterpartBalances Account (max_values: None, max_size: Some(112), added: 2587, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn transfer_all() -> Weight { - // Minimum execution time: 39_905 nanoseconds. - Weight::from_ref_time(41_216_000) + // Proof Size summary in bytes: + // Measured: `217` + // Estimated: `9757` + // Minimum execution time: 35_218_000 picoseconds. + Weight::from_parts(36_321_000, 0) + .saturating_add(Weight::from_parts(0, 9757)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: NisCounterpartBalances Account (r:1 w:1) + /// Storage: NisCounterpartBalances Account (r:1 w:1) + /// Proof: NisCounterpartBalances Account (max_values: None, max_size: Some(112), added: 2587, mode: MaxEncodedLen) fn force_unreserve() -> Weight { - // Minimum execution time: 20_700 nanoseconds. - Weight::from_ref_time(20_942_000) + // Proof Size summary in bytes: + // Measured: `217` + // Estimated: `3577` + // Minimum execution time: 14_706_000 picoseconds. + Weight::from_parts(15_135_000, 0) + .saturating_add(Weight::from_parts(0, 3577)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/kusama/src/weights/pallet_bounties.rs b/runtime/kusama/src/weights/pallet_bounties.rs index 4e4080fa9663..bd67e5727929 100644 --- a/runtime/kusama/src/weights/pallet_bounties.rs +++ b/runtime/kusama/src/weights/pallet_bounties.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_bounties` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,107 +45,181 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_bounties`. pub struct WeightInfo(PhantomData); impl pallet_bounties::WeightInfo for WeightInfo { - // Storage: Bounties BountyCount (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: Bounties BountyDescriptions (r:0 w:1) - // Storage: Bounties Bounties (r:0 w:1) + /// Storage: Bounties BountyCount (r:1 w:1) + /// Proof: Bounties BountyCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Bounties BountyDescriptions (r:0 w:1) + /// Proof: Bounties BountyDescriptions (max_values: None, max_size: Some(16400), added: 18875, mode: MaxEncodedLen) + /// Storage: Bounties Bounties (r:0 w:1) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) /// The range of component `d` is `[0, 16384]`. fn propose_bounty(d: u32, ) -> Weight { - // Minimum execution time: 29_781 nanoseconds. - Weight::from_ref_time(31_180_609) - // Standard Error: 12 - .saturating_add(Weight::from_ref_time(798).saturating_mul(d.into())) + // Proof Size summary in bytes: + // Measured: `210` + // Estimated: `5082` + // Minimum execution time: 23_859_000 picoseconds. + Weight::from_parts(25_408_671, 0) + .saturating_add(Weight::from_parts(0, 5082)) + // Standard Error: 8 + .saturating_add(Weight::from_parts(719, 0).saturating_mul(d.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Bounties Bounties (r:1 w:1) - // Storage: Bounties BountyApprovals (r:1 w:1) + /// Storage: Bounties Bounties (r:1 w:1) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: Bounties BountyApprovals (r:1 w:1) + /// Proof: Bounties BountyApprovals (max_values: Some(1), max_size: Some(402), added: 897, mode: MaxEncodedLen) fn approve_bounty() -> Weight { - // Minimum execution time: 12_154 nanoseconds. - Weight::from_ref_time(12_331_000) + // Proof Size summary in bytes: + // Measured: `302` + // Estimated: `5529` + // Minimum execution time: 11_187_000 picoseconds. + Weight::from_parts(11_502_000, 0) + .saturating_add(Weight::from_parts(0, 5529)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Bounties Bounties (r:1 w:1) + /// Storage: Bounties Bounties (r:1 w:1) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) fn propose_curator() -> Weight { - // Minimum execution time: 11_691 nanoseconds. - Weight::from_ref_time(11_845_000) + // Proof Size summary in bytes: + // Measured: `322` + // Estimated: `3642` + // Minimum execution time: 9_836_000 picoseconds. + Weight::from_parts(10_094_000, 0) + .saturating_add(Weight::from_parts(0, 3642)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Bounties Bounties (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Bounties Bounties (r:1 w:1) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn unassign_curator() -> Weight { - // Minimum execution time: 41_489 nanoseconds. - Weight::from_ref_time(41_816_000) + // Proof Size summary in bytes: + // Measured: `498` + // Estimated: `7235` + // Minimum execution time: 34_372_000 picoseconds. + Weight::from_parts(34_747_000, 0) + .saturating_add(Weight::from_parts(0, 7235)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Bounties Bounties (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Bounties Bounties (r:1 w:1) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn accept_curator() -> Weight { - // Minimum execution time: 29_192 nanoseconds. - Weight::from_ref_time(29_842_000) + // Proof Size summary in bytes: + // Measured: `494` + // Estimated: `7235` + // Minimum execution time: 22_979_000 picoseconds. + Weight::from_parts(23_299_000, 0) + .saturating_add(Weight::from_parts(0, 7235)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Bounties Bounties (r:1 w:1) - // Storage: ChildBounties ParentChildBounties (r:1 w:0) + /// Storage: Bounties Bounties (r:1 w:1) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: ChildBounties ParentChildBounties (r:1 w:0) + /// Proof: ChildBounties ParentChildBounties (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) fn award_bounty() -> Weight { - // Minimum execution time: 25_494 nanoseconds. - Weight::from_ref_time(25_846_000) + // Proof Size summary in bytes: + // Measured: `506` + // Estimated: `7123` + // Minimum execution time: 19_237_000 picoseconds. + Weight::from_parts(19_629_000, 0) + .saturating_add(Weight::from_parts(0, 7123)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Bounties Bounties (r:1 w:1) - // Storage: System Account (r:3 w:3) - // Storage: ChildBounties ChildrenCuratorFees (r:1 w:1) - // Storage: Bounties BountyDescriptions (r:0 w:1) + /// Storage: Bounties Bounties (r:1 w:1) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: System Account (r:3 w:3) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildrenCuratorFees (r:1 w:1) + /// Proof: ChildBounties ChildrenCuratorFees (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) + /// Storage: Bounties BountyDescriptions (r:0 w:1) + /// Proof: Bounties BountyDescriptions (max_values: None, max_size: Some(16400), added: 18875, mode: MaxEncodedLen) fn claim_bounty() -> Weight { - // Minimum execution time: 69_638 nanoseconds. - Weight::from_ref_time(70_275_000) + // Proof Size summary in bytes: + // Measured: `870` + // Estimated: `15934` + // Minimum execution time: 74_467_000 picoseconds. + Weight::from_parts(75_107_000, 0) + .saturating_add(Weight::from_parts(0, 15934)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: Bounties Bounties (r:1 w:1) - // Storage: ChildBounties ParentChildBounties (r:1 w:0) - // Storage: System Account (r:1 w:1) - // Storage: Bounties BountyDescriptions (r:0 w:1) + /// Storage: Bounties Bounties (r:1 w:1) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: ChildBounties ParentChildBounties (r:1 w:0) + /// Proof: ChildBounties ParentChildBounties (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Bounties BountyDescriptions (r:0 w:1) + /// Proof: Bounties BountyDescriptions (max_values: None, max_size: Some(16400), added: 18875, mode: MaxEncodedLen) fn close_bounty_proposed() -> Weight { - // Minimum execution time: 44_759 nanoseconds. - Weight::from_ref_time(45_192_000) + // Proof Size summary in bytes: + // Measured: `550` + // Estimated: `10716` + // Minimum execution time: 39_805_000 picoseconds. + Weight::from_parts(40_350_000, 0) + .saturating_add(Weight::from_parts(0, 10716)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Bounties Bounties (r:1 w:1) - // Storage: ChildBounties ParentChildBounties (r:1 w:0) - // Storage: System Account (r:2 w:2) - // Storage: Bounties BountyDescriptions (r:0 w:1) + /// Storage: Bounties Bounties (r:1 w:1) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: ChildBounties ParentChildBounties (r:1 w:0) + /// Proof: ChildBounties ParentChildBounties (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: System Account (r:2 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Bounties BountyDescriptions (r:0 w:1) + /// Proof: Bounties BountyDescriptions (max_values: None, max_size: Some(16400), added: 18875, mode: MaxEncodedLen) fn close_bounty_active() -> Weight { - // Minimum execution time: 53_766 nanoseconds. - Weight::from_ref_time(54_825_000) + // Proof Size summary in bytes: + // Measured: `786` + // Estimated: `13319` + // Minimum execution time: 52_094_000 picoseconds. + Weight::from_parts(52_637_000, 0) + .saturating_add(Weight::from_parts(0, 13319)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Bounties Bounties (r:1 w:1) + /// Storage: Bounties Bounties (r:1 w:1) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) fn extend_bounty_expiry() -> Weight { - // Minimum execution time: 21_362 nanoseconds. - Weight::from_ref_time(21_892_000) + // Proof Size summary in bytes: + // Measured: `358` + // Estimated: `3642` + // Minimum execution time: 14_785_000 picoseconds. + Weight::from_parts(15_084_000, 0) + .saturating_add(Weight::from_parts(0, 3642)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Bounties BountyApprovals (r:1 w:1) - // Storage: Bounties Bounties (r:2 w:2) - // Storage: System Account (r:4 w:4) + /// Storage: Bounties BountyApprovals (r:1 w:1) + /// Proof: Bounties BountyApprovals (max_values: Some(1), max_size: Some(402), added: 897, mode: MaxEncodedLen) + /// Storage: Bounties Bounties (r:100 w:100) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: System Account (r:200 w:200) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `b` is `[0, 100]`. fn spend_funds(b: u32, ) -> Weight { - // Minimum execution time: 7_165 nanoseconds. - Weight::from_ref_time(8_511_058) - // Standard Error: 26_862 - .saturating_add(Weight::from_ref_time(25_766_730).saturating_mul(b.into())) + // Proof Size summary in bytes: + // Measured: `0 + b * (297 ±0)` + // Estimated: `3867 + b * (7858 ±0)` + // Minimum execution time: 4_401_000 picoseconds. + Weight::from_parts(4_483_000, 0) + .saturating_add(Weight::from_parts(0, 3867)) + // Standard Error: 14_951 + .saturating_add(Weight::from_parts(31_756_079, 0).saturating_mul(b.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(b.into()))) .saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(b.into()))) + .saturating_add(Weight::from_parts(0, 7858).saturating_mul(b.into())) } } diff --git a/runtime/kusama/src/weights/pallet_child_bounties.rs b/runtime/kusama/src/weights/pallet_child_bounties.rs index e9c924c95f6e..793ace553f50 100644 --- a/runtime/kusama/src/weights/pallet_child_bounties.rs +++ b/runtime/kusama/src/weights/pallet_child_bounties.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_child_bounties` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,87 +45,152 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_child_bounties`. pub struct WeightInfo(PhantomData); impl pallet_child_bounties::WeightInfo for WeightInfo { - // Storage: ChildBounties ParentChildBounties (r:1 w:1) - // Storage: Bounties Bounties (r:1 w:0) - // Storage: System Account (r:2 w:2) - // Storage: ChildBounties ChildBountyCount (r:1 w:1) - // Storage: ChildBounties ChildBountyDescriptions (r:0 w:1) - // Storage: ChildBounties ChildBounties (r:0 w:1) + /// Storage: ChildBounties ParentChildBounties (r:1 w:1) + /// Proof: ChildBounties ParentChildBounties (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Bounties Bounties (r:1 w:0) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: System Account (r:2 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildBountyCount (r:1 w:1) + /// Proof: ChildBounties ChildBountyCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildBountyDescriptions (r:0 w:1) + /// Proof: ChildBounties ChildBountyDescriptions (max_values: None, max_size: Some(16400), added: 18875, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildBounties (r:0 w:1) + /// Proof: ChildBounties ChildBounties (max_values: None, max_size: Some(145), added: 2620, mode: MaxEncodedLen) /// The range of component `d` is `[0, 16384]`. fn add_child_bounty(d: u32, ) -> Weight { - // Minimum execution time: 53_325 nanoseconds. - Weight::from_ref_time(54_134_414) - // Standard Error: 11 - .saturating_add(Weight::from_ref_time(798).saturating_mul(d.into())) + // Proof Size summary in bytes: + // Measured: `646` + // Estimated: `14808` + // Minimum execution time: 50_138_000 picoseconds. + Weight::from_parts(51_829_783, 0) + .saturating_add(Weight::from_parts(0, 14808)) + // Standard Error: 10 + .saturating_add(Weight::from_parts(705, 0).saturating_mul(d.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: Bounties Bounties (r:1 w:0) - // Storage: ChildBounties ChildBounties (r:1 w:1) - // Storage: ChildBounties ChildrenCuratorFees (r:1 w:1) + /// Storage: Bounties Bounties (r:1 w:0) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildBounties (r:1 w:1) + /// Proof: ChildBounties ChildBounties (max_values: None, max_size: Some(145), added: 2620, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildrenCuratorFees (r:1 w:1) + /// Proof: ChildBounties ChildrenCuratorFees (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) fn propose_curator() -> Weight { - // Minimum execution time: 19_505 nanoseconds. - Weight::from_ref_time(19_762_000) + // Proof Size summary in bytes: + // Measured: `700` + // Estimated: `10745` + // Minimum execution time: 17_630_000 picoseconds. + Weight::from_parts(18_089_000, 0) + .saturating_add(Weight::from_parts(0, 10745)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Bounties Bounties (r:1 w:0) - // Storage: ChildBounties ChildBounties (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Bounties Bounties (r:1 w:0) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildBounties (r:1 w:1) + /// Proof: ChildBounties ChildBounties (max_values: None, max_size: Some(145), added: 2620, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn accept_curator() -> Weight { - // Minimum execution time: 34_485 nanoseconds. - Weight::from_ref_time(34_897_000) + // Proof Size summary in bytes: + // Measured: `846` + // Estimated: `10845` + // Minimum execution time: 30_082_000 picoseconds. + Weight::from_parts(30_536_000, 0) + .saturating_add(Weight::from_parts(0, 10845)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: ChildBounties ChildBounties (r:1 w:1) - // Storage: Bounties Bounties (r:1 w:0) - // Storage: System Account (r:1 w:1) + /// Storage: ChildBounties ChildBounties (r:1 w:1) + /// Proof: ChildBounties ChildBounties (max_values: None, max_size: Some(145), added: 2620, mode: MaxEncodedLen) + /// Storage: Bounties Bounties (r:1 w:0) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn unassign_curator() -> Weight { - // Minimum execution time: 46_969 nanoseconds. - Weight::from_ref_time(47_597_000) + // Proof Size summary in bytes: + // Measured: `846` + // Estimated: `10845` + // Minimum execution time: 42_561_000 picoseconds. + Weight::from_parts(43_263_000, 0) + .saturating_add(Weight::from_parts(0, 10845)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Bounties Bounties (r:1 w:0) - // Storage: ChildBounties ChildBounties (r:1 w:1) + /// Storage: Bounties Bounties (r:1 w:0) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildBounties (r:1 w:1) + /// Proof: ChildBounties ChildBounties (max_values: None, max_size: Some(145), added: 2620, mode: MaxEncodedLen) fn award_child_bounty() -> Weight { - // Minimum execution time: 28_930 nanoseconds. - Weight::from_ref_time(29_187_000) + // Proof Size summary in bytes: + // Measured: `743` + // Estimated: `7252` + // Minimum execution time: 21_717_000 picoseconds. + Weight::from_parts(22_164_000, 0) + .saturating_add(Weight::from_parts(0, 7252)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: ChildBounties ChildBounties (r:1 w:1) - // Storage: System Account (r:3 w:3) - // Storage: ChildBounties ParentChildBounties (r:1 w:1) - // Storage: ChildBounties ChildBountyDescriptions (r:0 w:1) + /// Storage: ChildBounties ChildBounties (r:1 w:1) + /// Proof: ChildBounties ChildBounties (max_values: None, max_size: Some(145), added: 2620, mode: MaxEncodedLen) + /// Storage: System Account (r:3 w:3) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: ChildBounties ParentChildBounties (r:1 w:1) + /// Proof: ChildBounties ParentChildBounties (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildBountyDescriptions (r:0 w:1) + /// Proof: ChildBounties ChildBountyDescriptions (max_values: None, max_size: Some(16400), added: 18875, mode: MaxEncodedLen) fn claim_child_bounty() -> Weight { - // Minimum execution time: 68_827 nanoseconds. - Weight::from_ref_time(69_320_000) + // Proof Size summary in bytes: + // Measured: `682` + // Estimated: `15890` + // Minimum execution time: 72_569_000 picoseconds. + Weight::from_parts(74_474_000, 0) + .saturating_add(Weight::from_parts(0, 15890)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: Bounties Bounties (r:1 w:0) - // Storage: ChildBounties ChildBounties (r:1 w:1) - // Storage: ChildBounties ChildrenCuratorFees (r:1 w:1) - // Storage: ChildBounties ParentChildBounties (r:1 w:1) - // Storage: System Account (r:2 w:2) - // Storage: ChildBounties ChildBountyDescriptions (r:0 w:1) + /// Storage: Bounties Bounties (r:1 w:0) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildBounties (r:1 w:1) + /// Proof: ChildBounties ChildBounties (max_values: None, max_size: Some(145), added: 2620, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildrenCuratorFees (r:1 w:1) + /// Proof: ChildBounties ChildrenCuratorFees (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) + /// Storage: ChildBounties ParentChildBounties (r:1 w:1) + /// Proof: ChildBounties ParentChildBounties (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: System Account (r:2 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildBountyDescriptions (r:0 w:1) + /// Proof: ChildBounties ChildBountyDescriptions (max_values: None, max_size: Some(16400), added: 18875, mode: MaxEncodedLen) fn close_child_bounty_added() -> Weight { - // Minimum execution time: 54_410 nanoseconds. - Weight::from_ref_time(54_957_000) + // Proof Size summary in bytes: + // Measured: `946` + // Estimated: `20422` + // Minimum execution time: 51_947_000 picoseconds. + Weight::from_parts(52_480_000, 0) + .saturating_add(Weight::from_parts(0, 20422)) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: Bounties Bounties (r:1 w:0) - // Storage: ChildBounties ChildBounties (r:1 w:1) - // Storage: System Account (r:3 w:3) - // Storage: ChildBounties ChildrenCuratorFees (r:1 w:1) - // Storage: ChildBounties ParentChildBounties (r:1 w:1) - // Storage: ChildBounties ChildBountyDescriptions (r:0 w:1) + /// Storage: Bounties Bounties (r:1 w:0) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildBounties (r:1 w:1) + /// Proof: ChildBounties ChildBounties (max_values: None, max_size: Some(145), added: 2620, mode: MaxEncodedLen) + /// Storage: System Account (r:3 w:3) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildrenCuratorFees (r:1 w:1) + /// Proof: ChildBounties ChildrenCuratorFees (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) + /// Storage: ChildBounties ParentChildBounties (r:1 w:1) + /// Proof: ChildBounties ParentChildBounties (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildBountyDescriptions (r:0 w:1) + /// Proof: ChildBounties ChildBountyDescriptions (max_values: None, max_size: Some(16400), added: 18875, mode: MaxEncodedLen) fn close_child_bounty_active() -> Weight { - // Minimum execution time: 64_477 nanoseconds. - Weight::from_ref_time(65_243_000) + // Proof Size summary in bytes: + // Measured: `1133` + // Estimated: `23025` + // Minimum execution time: 63_618_000 picoseconds. + Weight::from_parts(64_227_000, 0) + .saturating_add(Weight::from_parts(0, 23025)) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(7)) } diff --git a/runtime/kusama/src/weights/pallet_collective_council.rs b/runtime/kusama/src/weights/pallet_collective_council.rs index fc3f6a6c5c41..82169403d440 100644 --- a/runtime/kusama/src/weights/pallet_collective_council.rs +++ b/runtime/kusama/src/weights/pallet_collective_council.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_collective` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,10 +45,14 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_collective`. pub struct WeightInfo(PhantomData); impl pallet_collective::WeightInfo for WeightInfo { - // Storage: Council Members (r:1 w:1) - // Storage: Council Proposals (r:1 w:0) - // Storage: Council Prime (r:0 w:1) - // Storage: Council Voting (r:100 w:100) + /// Storage: Council Members (r:1 w:1) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Proposals (r:1 w:0) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Voting (r:100 w:100) + /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Council Prime (r:0 w:1) + /// Proof Skipped: Council Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[0, 100]`. /// The range of component `n` is `[0, 100]`. /// The range of component `p` is `[0, 100]`. @@ -55,51 +60,75 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `n` is `[0, 100]`. /// The range of component `p` is `[0, 100]`. fn set_members(m: u32, _n: u32, p: u32, ) -> Weight { - // Minimum execution time: 17_159 nanoseconds. - Weight::from_ref_time(17_386_000) - // Standard Error: 49_098 - .saturating_add(Weight::from_ref_time(5_640_501).saturating_mul(m.into())) - // Standard Error: 49_098 - .saturating_add(Weight::from_ref_time(7_763_341).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `0 + m * (3232 ±0) + p * (3190 ±0)` + // Estimated: `19164 + m * (7799 ±17) + p * (10110 ±17)` + // Minimum execution time: 17_032_000 picoseconds. + Weight::from_parts(17_263_000, 0) + .saturating_add(Weight::from_parts(0, 19164)) + // Standard Error: 51_363 + .saturating_add(Weight::from_parts(5_779_193, 0).saturating_mul(m.into())) + // Standard Error: 51_363 + .saturating_add(Weight::from_parts(8_434_866, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) .saturating_add(T::DbWeight::get().writes(2)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) + .saturating_add(Weight::from_parts(0, 7799).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 10110).saturating_mul(p.into())) } - // Storage: Council Members (r:1 w:0) + /// Storage: Council Members (r:1 w:0) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[1, 100]`. /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[1, 100]`. fn execute(b: u32, m: u32, ) -> Weight { - // Minimum execution time: 20_828 nanoseconds. - Weight::from_ref_time(20_148_690) - // Standard Error: 21 - .saturating_add(Weight::from_ref_time(1_937).saturating_mul(b.into())) - // Standard Error: 223 - .saturating_add(Weight::from_ref_time(15_871).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `136 + m * (32 ±0)` + // Estimated: `1622 + m * (32 ±0)` + // Minimum execution time: 15_686_000 picoseconds. + Weight::from_parts(15_185_500, 0) + .saturating_add(Weight::from_parts(0, 1622)) + // Standard Error: 26 + .saturating_add(Weight::from_parts(1_363, 0).saturating_mul(b.into())) + // Standard Error: 277 + .saturating_add(Weight::from_parts(15_720, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) } - // Storage: Council Members (r:1 w:0) - // Storage: Council ProposalOf (r:1 w:0) + /// Storage: Council Members (r:1 w:0) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council ProposalOf (r:1 w:0) + /// Proof Skipped: Council ProposalOf (max_values: None, max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[1, 100]`. /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[1, 100]`. fn propose_execute(b: u32, m: u32, ) -> Weight { - // Minimum execution time: 23_137 nanoseconds. - Weight::from_ref_time(22_611_074) - // Standard Error: 41 - .saturating_add(Weight::from_ref_time(1_586).saturating_mul(b.into())) - // Standard Error: 422 - .saturating_add(Weight::from_ref_time(20_879).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `136 + m * (32 ±0)` + // Estimated: `5224 + m * (64 ±0)` + // Minimum execution time: 18_314_000 picoseconds. + Weight::from_parts(17_659_522, 0) + .saturating_add(Weight::from_parts(0, 5224)) + // Standard Error: 22 + .saturating_add(Weight::from_parts(1_153, 0).saturating_mul(b.into())) + // Standard Error: 237 + .saturating_add(Weight::from_parts(25_439, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(Weight::from_parts(0, 64).saturating_mul(m.into())) } - // Storage: Council Members (r:1 w:0) - // Storage: Council ProposalOf (r:1 w:1) - // Storage: Council Proposals (r:1 w:1) - // Storage: Council ProposalCount (r:1 w:1) - // Storage: Council Voting (r:0 w:1) + /// Storage: Council Members (r:1 w:0) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council ProposalOf (r:1 w:1) + /// Proof Skipped: Council ProposalOf (max_values: None, max_size: None, mode: Measured) + /// Storage: Council Proposals (r:1 w:1) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council ProposalCount (r:1 w:1) + /// Proof Skipped: Council ProposalCount (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Voting (r:0 w:1) + /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[2, 100]`. /// The range of component `p` is `[1, 100]`. @@ -107,51 +136,78 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `m` is `[2, 100]`. /// The range of component `p` is `[1, 100]`. fn propose_proposed(b: u32, m: u32, p: u32, ) -> Weight { - // Minimum execution time: 28_891 nanoseconds. - Weight::from_ref_time(30_004_891) - // Standard Error: 67 - .saturating_add(Weight::from_ref_time(2_998).saturating_mul(b.into())) - // Standard Error: 700 - .saturating_add(Weight::from_ref_time(20_671).saturating_mul(m.into())) - // Standard Error: 691 - .saturating_add(Weight::from_ref_time(110_436).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `426 + m * (32 ±0) + p * (36 ±0)` + // Estimated: `9685 + m * (165 ±0) + p * (180 ±0)` + // Minimum execution time: 23_916_000 picoseconds. + Weight::from_parts(25_192_989, 0) + .saturating_add(Weight::from_parts(0, 9685)) + // Standard Error: 50 + .saturating_add(Weight::from_parts(2_327, 0).saturating_mul(b.into())) + // Standard Error: 528 + .saturating_add(Weight::from_parts(17_763, 0).saturating_mul(m.into())) + // Standard Error: 522 + .saturating_add(Weight::from_parts(116_903, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) + .saturating_add(Weight::from_parts(0, 165).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 180).saturating_mul(p.into())) } - // Storage: Council Members (r:1 w:0) - // Storage: Council Voting (r:1 w:1) + /// Storage: Council Members (r:1 w:0) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Voting (r:1 w:1) + /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) /// The range of component `m` is `[5, 100]`. /// The range of component `m` is `[5, 100]`. fn vote(m: u32, ) -> Weight { - // Minimum execution time: 29_587 nanoseconds. - Weight::from_ref_time(30_985_593) - // Standard Error: 523 - .saturating_add(Weight::from_ref_time(37_334).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `875 + m * (64 ±0)` + // Estimated: `6698 + m * (128 ±0)` + // Minimum execution time: 21_641_000 picoseconds. + Weight::from_parts(22_373_888, 0) + .saturating_add(Weight::from_parts(0, 6698)) + // Standard Error: 299 + .saturating_add(Weight::from_parts(41_168, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 128).saturating_mul(m.into())) } - // Storage: Council Voting (r:1 w:1) - // Storage: Council Members (r:1 w:0) - // Storage: Council Proposals (r:1 w:1) - // Storage: Council ProposalOf (r:0 w:1) + /// Storage: Council Voting (r:1 w:1) + /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Council Members (r:1 w:0) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Proposals (r:1 w:1) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council ProposalOf (r:0 w:1) + /// Proof Skipped: Council ProposalOf (max_values: None, max_size: None, mode: Measured) /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. fn close_early_disapproved(m: u32, p: u32, ) -> Weight { - // Minimum execution time: 31_318 nanoseconds. - Weight::from_ref_time(33_600_470) - // Standard Error: 533 - .saturating_add(Weight::from_ref_time(19_935).saturating_mul(m.into())) - // Standard Error: 520 - .saturating_add(Weight::from_ref_time(94_658).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `464 + m * (64 ±0) + p * (36 ±0)` + // Estimated: `8211 + m * (260 ±0) + p * (144 ±0)` + // Minimum execution time: 26_158_000 picoseconds. + Weight::from_parts(27_675_242, 0) + .saturating_add(Weight::from_parts(0, 8211)) + // Standard Error: 845 + .saturating_add(Weight::from_parts(10_799, 0).saturating_mul(m.into())) + // Standard Error: 824 + .saturating_add(Weight::from_parts(141_199, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 260).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 144).saturating_mul(p.into())) } - // Storage: Council Voting (r:1 w:1) - // Storage: Council Members (r:1 w:0) - // Storage: Council ProposalOf (r:1 w:1) - // Storage: Council Proposals (r:1 w:1) + /// Storage: Council Voting (r:1 w:1) + /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Council Members (r:1 w:0) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council ProposalOf (r:1 w:1) + /// Proof Skipped: Council ProposalOf (max_values: None, max_size: None, mode: Measured) + /// Storage: Council Proposals (r:1 w:1) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. @@ -159,41 +215,64 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. fn close_early_approved(b: u32, m: u32, p: u32, ) -> Weight { - // Minimum execution time: 41_518 nanoseconds. - Weight::from_ref_time(42_821_909) - // Standard Error: 59 - .saturating_add(Weight::from_ref_time(2_119).saturating_mul(b.into())) - // Standard Error: 633 - .saturating_add(Weight::from_ref_time(13_816).saturating_mul(m.into())) - // Standard Error: 617 - .saturating_add(Weight::from_ref_time(112_098).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `766 + b * (1 ±0) + m * (64 ±0) + p * (40 ±0)` + // Estimated: `12372 + b * (4 ±0) + m * (264 ±0) + p * (160 ±0)` + // Minimum execution time: 37_601_000 picoseconds. + Weight::from_parts(41_302_278, 0) + .saturating_add(Weight::from_parts(0, 12372)) + // Standard Error: 67 + .saturating_add(Weight::from_parts(1_608, 0).saturating_mul(b.into())) + // Standard Error: 716 + .saturating_add(Weight::from_parts(14_628, 0).saturating_mul(m.into())) + // Standard Error: 698 + .saturating_add(Weight::from_parts(129_997, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 4).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(0, 264).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 160).saturating_mul(p.into())) } - // Storage: Council Voting (r:1 w:1) - // Storage: Council Members (r:1 w:0) - // Storage: Council Prime (r:1 w:0) - // Storage: Council Proposals (r:1 w:1) - // Storage: Council ProposalOf (r:0 w:1) + /// Storage: Council Voting (r:1 w:1) + /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Council Members (r:1 w:0) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Prime (r:1 w:0) + /// Proof Skipped: Council Prime (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Proposals (r:1 w:1) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council ProposalOf (r:0 w:1) + /// Proof Skipped: Council ProposalOf (max_values: None, max_size: None, mode: Measured) /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. fn close_disapproved(m: u32, p: u32, ) -> Weight { - // Minimum execution time: 34_513 nanoseconds. - Weight::from_ref_time(35_905_696) - // Standard Error: 471 - .saturating_add(Weight::from_ref_time(24_727).saturating_mul(m.into())) - // Standard Error: 459 - .saturating_add(Weight::from_ref_time(91_432).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `484 + m * (64 ±0) + p * (36 ±0)` + // Estimated: `10240 + m * (325 ±0) + p * (180 ±0)` + // Minimum execution time: 29_185_000 picoseconds. + Weight::from_parts(30_594_183, 0) + .saturating_add(Weight::from_parts(0, 10240)) + // Standard Error: 865 + .saturating_add(Weight::from_parts(30_165, 0).saturating_mul(m.into())) + // Standard Error: 844 + .saturating_add(Weight::from_parts(131_623, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 325).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 180).saturating_mul(p.into())) } - // Storage: Council Voting (r:1 w:1) - // Storage: Council Members (r:1 w:0) - // Storage: Council Prime (r:1 w:0) - // Storage: Council ProposalOf (r:1 w:1) - // Storage: Council Proposals (r:1 w:1) + /// Storage: Council Voting (r:1 w:1) + /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Council Members (r:1 w:0) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Prime (r:1 w:0) + /// Proof Skipped: Council Prime (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council ProposalOf (r:1 w:1) + /// Proof Skipped: Council ProposalOf (max_values: None, max_size: None, mode: Measured) + /// Storage: Council Proposals (r:1 w:1) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. @@ -201,28 +280,43 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. fn close_approved(b: u32, m: u32, p: u32, ) -> Weight { - // Minimum execution time: 43_857 nanoseconds. - Weight::from_ref_time(45_661_143) - // Standard Error: 64 - .saturating_add(Weight::from_ref_time(1_977).saturating_mul(b.into())) - // Standard Error: 681 - .saturating_add(Weight::from_ref_time(12_502).saturating_mul(m.into())) - // Standard Error: 664 - .saturating_add(Weight::from_ref_time(109_743).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `786 + b * (1 ±0) + m * (64 ±0) + p * (40 ±0)` + // Estimated: `14575 + b * (5 ±0) + m * (330 ±0) + p * (200 ±0)` + // Minimum execution time: 43_157_000 picoseconds. + Weight::from_parts(43_691_874, 0) + .saturating_add(Weight::from_parts(0, 14575)) + // Standard Error: 61 + .saturating_add(Weight::from_parts(1_862, 0).saturating_mul(b.into())) + // Standard Error: 654 + .saturating_add(Weight::from_parts(17_183, 0).saturating_mul(m.into())) + // Standard Error: 638 + .saturating_add(Weight::from_parts(133_193, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 5).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(0, 330).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 200).saturating_mul(p.into())) } - // Storage: Council Proposals (r:1 w:1) - // Storage: Council Voting (r:0 w:1) - // Storage: Council ProposalOf (r:0 w:1) + /// Storage: Council Proposals (r:1 w:1) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Voting (r:0 w:1) + /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Council ProposalOf (r:0 w:1) + /// Proof Skipped: Council ProposalOf (max_values: None, max_size: None, mode: Measured) /// The range of component `p` is `[1, 100]`. /// The range of component `p` is `[1, 100]`. fn disapprove_proposal(p: u32, ) -> Weight { - // Minimum execution time: 19_830 nanoseconds. - Weight::from_ref_time(23_098_905) - // Standard Error: 701 - .saturating_add(Weight::from_ref_time(98_442).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `293 + p * (32 ±0)` + // Estimated: `2364 + p * (96 ±0)` + // Minimum execution time: 14_666_000 picoseconds. + Weight::from_parts(16_623_386, 0) + .saturating_add(Weight::from_parts(0, 2364)) + // Standard Error: 430 + .saturating_add(Weight::from_parts(111_461, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 96).saturating_mul(p.into())) } } diff --git a/runtime/kusama/src/weights/pallet_collective_technical_committee.rs b/runtime/kusama/src/weights/pallet_collective_technical_committee.rs index 68b5e7b7bab9..531cde3877d4 100644 --- a/runtime/kusama/src/weights/pallet_collective_technical_committee.rs +++ b/runtime/kusama/src/weights/pallet_collective_technical_committee.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_collective` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,10 +45,14 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_collective`. pub struct WeightInfo(PhantomData); impl pallet_collective::WeightInfo for WeightInfo { - // Storage: TechnicalCommittee Members (r:1 w:1) - // Storage: TechnicalCommittee Proposals (r:1 w:0) - // Storage: TechnicalCommittee Prime (r:0 w:1) - // Storage: TechnicalCommittee Voting (r:100 w:100) + /// Storage: TechnicalCommittee Members (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Proposals (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Voting (r:100 w:100) + /// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Prime (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[0, 100]`. /// The range of component `n` is `[0, 100]`. /// The range of component `p` is `[0, 100]`. @@ -55,51 +60,75 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `n` is `[0, 100]`. /// The range of component `p` is `[0, 100]`. fn set_members(m: u32, _n: u32, p: u32, ) -> Weight { - // Minimum execution time: 17_846 nanoseconds. - Weight::from_ref_time(18_153_000) - // Standard Error: 47_680 - .saturating_add(Weight::from_ref_time(5_417_868).saturating_mul(m.into())) - // Standard Error: 47_680 - .saturating_add(Weight::from_ref_time(7_677_098).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `0 + m * (3232 ±0) + p * (3190 ±0)` + // Estimated: `19320 + m * (7799 ±16) + p * (10110 ±16)` + // Minimum execution time: 17_755_000 picoseconds. + Weight::from_parts(18_022_000, 0) + .saturating_add(Weight::from_parts(0, 19320)) + // Standard Error: 48_475 + .saturating_add(Weight::from_parts(5_505_299, 0).saturating_mul(m.into())) + // Standard Error: 48_475 + .saturating_add(Weight::from_parts(8_260_850, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) .saturating_add(T::DbWeight::get().writes(2)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) + .saturating_add(Weight::from_parts(0, 7799).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 10110).saturating_mul(p.into())) } - // Storage: TechnicalCommittee Members (r:1 w:0) + /// Storage: TechnicalCommittee Members (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[1, 100]`. /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[1, 100]`. fn execute(b: u32, m: u32, ) -> Weight { - // Minimum execution time: 21_224 nanoseconds. - Weight::from_ref_time(20_521_105) - // Standard Error: 19 - .saturating_add(Weight::from_ref_time(1_899).saturating_mul(b.into())) - // Standard Error: 204 - .saturating_add(Weight::from_ref_time(14_375).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `175 + m * (32 ±0)` + // Estimated: `1661 + m * (32 ±0)` + // Minimum execution time: 16_765_000 picoseconds. + Weight::from_parts(15_653_912, 0) + .saturating_add(Weight::from_parts(0, 1661)) + // Standard Error: 25 + .saturating_add(Weight::from_parts(1_539, 0).saturating_mul(b.into())) + // Standard Error: 261 + .saturating_add(Weight::from_parts(17_896, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) } - // Storage: TechnicalCommittee Members (r:1 w:0) - // Storage: TechnicalCommittee ProposalOf (r:1 w:0) + /// Storage: TechnicalCommittee Members (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee ProposalOf (r:1 w:0) + /// Proof Skipped: TechnicalCommittee ProposalOf (max_values: None, max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[1, 100]`. /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[1, 100]`. fn propose_execute(b: u32, m: u32, ) -> Weight { - // Minimum execution time: 23_738 nanoseconds. - Weight::from_ref_time(22_950_740) - // Standard Error: 34 - .saturating_add(Weight::from_ref_time(1_670).saturating_mul(b.into())) - // Standard Error: 357 - .saturating_add(Weight::from_ref_time(19_075).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `175 + m * (32 ±0)` + // Estimated: `5302 + m * (64 ±0)` + // Minimum execution time: 19_194_000 picoseconds. + Weight::from_parts(18_366_867, 0) + .saturating_add(Weight::from_parts(0, 5302)) + // Standard Error: 19 + .saturating_add(Weight::from_parts(1_342, 0).saturating_mul(b.into())) + // Standard Error: 200 + .saturating_add(Weight::from_parts(22_738, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(Weight::from_parts(0, 64).saturating_mul(m.into())) } - // Storage: TechnicalCommittee Members (r:1 w:0) - // Storage: TechnicalCommittee ProposalOf (r:1 w:1) - // Storage: TechnicalCommittee Proposals (r:1 w:1) - // Storage: TechnicalCommittee ProposalCount (r:1 w:1) - // Storage: TechnicalCommittee Voting (r:0 w:1) + /// Storage: TechnicalCommittee Members (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee ProposalOf (r:1 w:1) + /// Proof Skipped: TechnicalCommittee ProposalOf (max_values: None, max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Proposals (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee ProposalCount (r:1 w:1) + /// Proof Skipped: TechnicalCommittee ProposalCount (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Voting (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[2, 100]`. /// The range of component `p` is `[1, 100]`. @@ -107,51 +136,78 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `m` is `[2, 100]`. /// The range of component `p` is `[1, 100]`. fn propose_proposed(b: u32, m: u32, p: u32, ) -> Weight { - // Minimum execution time: 29_421 nanoseconds. - Weight::from_ref_time(30_696_255) - // Standard Error: 64 - .saturating_add(Weight::from_ref_time(3_400).saturating_mul(b.into())) - // Standard Error: 670 - .saturating_add(Weight::from_ref_time(19_149).saturating_mul(m.into())) - // Standard Error: 662 - .saturating_add(Weight::from_ref_time(119_172).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `465 + m * (32 ±0) + p * (36 ±0)` + // Estimated: `9880 + m * (165 ±0) + p * (180 ±0)` + // Minimum execution time: 24_958_000 picoseconds. + Weight::from_parts(25_925_520, 0) + .saturating_add(Weight::from_parts(0, 9880)) + // Standard Error: 54 + .saturating_add(Weight::from_parts(2_430, 0).saturating_mul(b.into())) + // Standard Error: 570 + .saturating_add(Weight::from_parts(17_303, 0).saturating_mul(m.into())) + // Standard Error: 563 + .saturating_add(Weight::from_parts(119_736, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) + .saturating_add(Weight::from_parts(0, 165).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 180).saturating_mul(p.into())) } - // Storage: TechnicalCommittee Members (r:1 w:0) - // Storage: TechnicalCommittee Voting (r:1 w:1) + /// Storage: TechnicalCommittee Members (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Voting (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured) /// The range of component `m` is `[5, 100]`. /// The range of component `m` is `[5, 100]`. fn vote(m: u32, ) -> Weight { - // Minimum execution time: 30_393 nanoseconds. - Weight::from_ref_time(31_647_861) - // Standard Error: 485 - .saturating_add(Weight::from_ref_time(38_473).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `914 + m * (64 ±0)` + // Estimated: `6776 + m * (128 ±0)` + // Minimum execution time: 22_620_000 picoseconds. + Weight::from_parts(23_356_968, 0) + .saturating_add(Weight::from_parts(0, 6776)) + // Standard Error: 273 + .saturating_add(Weight::from_parts(40_919, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 128).saturating_mul(m.into())) } - // Storage: TechnicalCommittee Voting (r:1 w:1) - // Storage: TechnicalCommittee Members (r:1 w:0) - // Storage: TechnicalCommittee Proposals (r:1 w:1) - // Storage: TechnicalCommittee ProposalOf (r:0 w:1) + /// Storage: TechnicalCommittee Voting (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Members (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Proposals (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee ProposalOf (r:0 w:1) + /// Proof Skipped: TechnicalCommittee ProposalOf (max_values: None, max_size: None, mode: Measured) /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. fn close_early_disapproved(m: u32, p: u32, ) -> Weight { - // Minimum execution time: 33_038 nanoseconds. - Weight::from_ref_time(34_364_089) - // Standard Error: 481 - .saturating_add(Weight::from_ref_time(20_649).saturating_mul(m.into())) - // Standard Error: 469 - .saturating_add(Weight::from_ref_time(95_367).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `503 + m * (64 ±0) + p * (36 ±0)` + // Estimated: `8367 + m * (260 ±0) + p * (144 ±0)` + // Minimum execution time: 27_667_000 picoseconds. + Weight::from_parts(29_094_490, 0) + .saturating_add(Weight::from_parts(0, 8367)) + // Standard Error: 842 + .saturating_add(Weight::from_parts(25_691, 0).saturating_mul(m.into())) + // Standard Error: 821 + .saturating_add(Weight::from_parts(133_244, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 260).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 144).saturating_mul(p.into())) } - // Storage: TechnicalCommittee Voting (r:1 w:1) - // Storage: TechnicalCommittee Members (r:1 w:0) - // Storage: TechnicalCommittee ProposalOf (r:1 w:1) - // Storage: TechnicalCommittee Proposals (r:1 w:1) + /// Storage: TechnicalCommittee Voting (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Members (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee ProposalOf (r:1 w:1) + /// Proof Skipped: TechnicalCommittee ProposalOf (max_values: None, max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Proposals (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. @@ -159,41 +215,64 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. fn close_early_approved(b: u32, m: u32, p: u32, ) -> Weight { - // Minimum execution time: 42_518 nanoseconds. - Weight::from_ref_time(43_502_130) - // Standard Error: 62 - .saturating_add(Weight::from_ref_time(2_096).saturating_mul(b.into())) - // Standard Error: 656 - .saturating_add(Weight::from_ref_time(14_832).saturating_mul(m.into())) - // Standard Error: 639 - .saturating_add(Weight::from_ref_time(113_147).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `805 + b * (1 ±0) + m * (64 ±0) + p * (40 ±0)` + // Estimated: `12528 + b * (4 ±0) + m * (264 ±0) + p * (160 ±0)` + // Minimum execution time: 41_678_000 picoseconds. + Weight::from_parts(42_218_269, 0) + .saturating_add(Weight::from_parts(0, 12528)) + // Standard Error: 59 + .saturating_add(Weight::from_parts(1_661, 0).saturating_mul(b.into())) + // Standard Error: 624 + .saturating_add(Weight::from_parts(16_946, 0).saturating_mul(m.into())) + // Standard Error: 608 + .saturating_add(Weight::from_parts(129_170, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 4).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(0, 264).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 160).saturating_mul(p.into())) } - // Storage: TechnicalCommittee Voting (r:1 w:1) - // Storage: TechnicalCommittee Members (r:1 w:0) - // Storage: TechnicalCommittee Prime (r:1 w:0) - // Storage: TechnicalCommittee Proposals (r:1 w:1) - // Storage: TechnicalCommittee ProposalOf (r:0 w:1) + /// Storage: TechnicalCommittee Voting (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Members (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Prime (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Proposals (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee ProposalOf (r:0 w:1) + /// Proof Skipped: TechnicalCommittee ProposalOf (max_values: None, max_size: None, mode: Measured) /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. fn close_disapproved(m: u32, p: u32, ) -> Weight { - // Minimum execution time: 35_037 nanoseconds. - Weight::from_ref_time(36_654_786) - // Standard Error: 482 - .saturating_add(Weight::from_ref_time(24_626).saturating_mul(m.into())) - // Standard Error: 470 - .saturating_add(Weight::from_ref_time(93_701).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `523 + m * (64 ±0) + p * (36 ±0)` + // Estimated: `10435 + m * (325 ±0) + p * (180 ±0)` + // Minimum execution time: 30_447_000 picoseconds. + Weight::from_parts(32_661_910, 0) + .saturating_add(Weight::from_parts(0, 10435)) + // Standard Error: 531 + .saturating_add(Weight::from_parts(29_960, 0).saturating_mul(m.into())) + // Standard Error: 517 + .saturating_add(Weight::from_parts(120_475, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 325).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 180).saturating_mul(p.into())) } - // Storage: TechnicalCommittee Voting (r:1 w:1) - // Storage: TechnicalCommittee Members (r:1 w:0) - // Storage: TechnicalCommittee Prime (r:1 w:0) - // Storage: TechnicalCommittee ProposalOf (r:1 w:1) - // Storage: TechnicalCommittee Proposals (r:1 w:1) + /// Storage: TechnicalCommittee Voting (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Members (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Prime (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee ProposalOf (r:1 w:1) + /// Proof Skipped: TechnicalCommittee ProposalOf (max_values: None, max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Proposals (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. @@ -201,28 +280,43 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. fn close_approved(b: u32, m: u32, p: u32, ) -> Weight { - // Minimum execution time: 44_759 nanoseconds. - Weight::from_ref_time(45_961_421) - // Standard Error: 58 - .saturating_add(Weight::from_ref_time(2_001).saturating_mul(b.into())) - // Standard Error: 613 - .saturating_add(Weight::from_ref_time(15_534).saturating_mul(m.into())) - // Standard Error: 597 - .saturating_add(Weight::from_ref_time(111_237).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `825 + b * (1 ±0) + m * (64 ±0) + p * (40 ±0)` + // Estimated: `14770 + b * (5 ±0) + m * (330 ±0) + p * (200 ±0)` + // Minimum execution time: 44_068_000 picoseconds. + Weight::from_parts(44_673_420, 0) + .saturating_add(Weight::from_parts(0, 14770)) + // Standard Error: 59 + .saturating_add(Weight::from_parts(1_779, 0).saturating_mul(b.into())) + // Standard Error: 625 + .saturating_add(Weight::from_parts(17_794, 0).saturating_mul(m.into())) + // Standard Error: 609 + .saturating_add(Weight::from_parts(134_062, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 5).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(0, 330).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 200).saturating_mul(p.into())) } - // Storage: TechnicalCommittee Proposals (r:1 w:1) - // Storage: TechnicalCommittee Voting (r:0 w:1) - // Storage: TechnicalCommittee ProposalOf (r:0 w:1) + /// Storage: TechnicalCommittee Proposals (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Voting (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: TechnicalCommittee ProposalOf (r:0 w:1) + /// Proof Skipped: TechnicalCommittee ProposalOf (max_values: None, max_size: None, mode: Measured) /// The range of component `p` is `[1, 100]`. /// The range of component `p` is `[1, 100]`. fn disapprove_proposal(p: u32, ) -> Weight { - // Minimum execution time: 20_592 nanoseconds. - Weight::from_ref_time(23_613_847) - // Standard Error: 651 - .saturating_add(Weight::from_ref_time(100_049).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `332 + p * (32 ±0)` + // Estimated: `2481 + p * (96 ±0)` + // Minimum execution time: 15_528_000 picoseconds. + Weight::from_parts(17_434_864, 0) + .saturating_add(Weight::from_parts(0, 2481)) + // Standard Error: 405 + .saturating_add(Weight::from_parts(111_909, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 96).saturating_mul(p.into())) } } diff --git a/runtime/kusama/src/weights/pallet_conviction_voting.rs b/runtime/kusama/src/weights/pallet_conviction_voting.rs index 9bcb1438ae2b..81d1d61051ff 100644 --- a/runtime/kusama/src/weights/pallet_conviction_voting.rs +++ b/runtime/kusama/src/weights/pallet_conviction_voting.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_conviction_voting` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,81 +45,137 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_conviction_voting`. pub struct WeightInfo(PhantomData); impl pallet_conviction_voting::WeightInfo for WeightInfo { - // Storage: Referenda ReferendumInfoFor (r:1 w:1) - // Storage: ConvictionVoting VotingFor (r:1 w:1) - // Storage: ConvictionVoting ClassLocksFor (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: ConvictionVoting VotingFor (r:1 w:1) + /// Proof: ConvictionVoting VotingFor (max_values: None, max_size: Some(27241), added: 29716, mode: MaxEncodedLen) + /// Storage: ConvictionVoting ClassLocksFor (r:1 w:1) + /// Proof: ConvictionVoting ClassLocksFor (max_values: None, max_size: Some(311), added: 2786, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn vote_new() -> Weight { - // Minimum execution time: 133_968 nanoseconds. - Weight::from_ref_time(138_131_000) + // Proof Size summary in bytes: + // Measured: `13445` + // Estimated: `86075` + // Minimum execution time: 111_359_000 picoseconds. + Weight::from_parts(115_021_000, 0) + .saturating_add(Weight::from_parts(0, 86075)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: Referenda ReferendumInfoFor (r:1 w:1) - // Storage: ConvictionVoting VotingFor (r:1 w:1) - // Storage: ConvictionVoting ClassLocksFor (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: Scheduler Agenda (r:2 w:2) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: ConvictionVoting VotingFor (r:1 w:1) + /// Proof: ConvictionVoting VotingFor (max_values: None, max_size: Some(27241), added: 29716, mode: MaxEncodedLen) + /// Storage: ConvictionVoting ClassLocksFor (r:1 w:1) + /// Proof: ConvictionVoting ClassLocksFor (max_values: None, max_size: Some(311), added: 2786, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:2 w:2) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn vote_existing() -> Weight { - // Minimum execution time: 157_963 nanoseconds. - Weight::from_ref_time(161_930_000) + // Proof Size summary in bytes: + // Measured: `14166` + // Estimated: `127513` + // Minimum execution time: 171_272_000 picoseconds. + Weight::from_parts(175_200_000, 0) + .saturating_add(Weight::from_parts(0, 127513)) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: ConvictionVoting VotingFor (r:1 w:1) - // Storage: Referenda ReferendumInfoFor (r:1 w:1) - // Storage: Scheduler Agenda (r:2 w:2) + /// Storage: ConvictionVoting VotingFor (r:1 w:1) + /// Proof: ConvictionVoting VotingFor (max_values: None, max_size: Some(27241), added: 29716, mode: MaxEncodedLen) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:2 w:2) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn remove_vote() -> Weight { - // Minimum execution time: 137_724 nanoseconds. - Weight::from_ref_time(139_037_000) + // Proof Size summary in bytes: + // Measured: `13918` + // Estimated: `118973` + // Minimum execution time: 149_987_000 picoseconds. + Weight::from_parts(152_677_000, 0) + .saturating_add(Weight::from_parts(0, 118973)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: ConvictionVoting VotingFor (r:1 w:1) - // Storage: Referenda ReferendumInfoFor (r:1 w:0) + /// Storage: ConvictionVoting VotingFor (r:1 w:1) + /// Proof: ConvictionVoting VotingFor (max_values: None, max_size: Some(27241), added: 29716, mode: MaxEncodedLen) + /// Storage: Referenda ReferendumInfoFor (r:1 w:0) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) fn remove_other_vote() -> Weight { - // Minimum execution time: 76_846 nanoseconds. - Weight::from_ref_time(78_498_000) + // Proof Size summary in bytes: + // Measured: `13004` + // Estimated: `35107` + // Minimum execution time: 60_514_000 picoseconds. + Weight::from_parts(62_286_000, 0) + .saturating_add(Weight::from_parts(0, 35107)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: ConvictionVoting VotingFor (r:2 w:2) - // Storage: ConvictionVoting ClassLocksFor (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: Referenda ReferendumInfoFor (r:10 w:10) - // Storage: Scheduler Agenda (r:2 w:2) + /// Storage: ConvictionVoting VotingFor (r:2 w:2) + /// Proof: ConvictionVoting VotingFor (max_values: None, max_size: Some(27241), added: 29716, mode: MaxEncodedLen) + /// Storage: Referenda ReferendumInfoFor (r:512 w:512) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:2 w:2) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) + /// Storage: ConvictionVoting ClassLocksFor (r:1 w:1) + /// Proof: ConvictionVoting ClassLocksFor (max_values: None, max_size: Some(311), added: 2786, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `r` is `[0, 512]`. fn delegate(r: u32, ) -> Weight { - // Minimum execution time: 77_270 nanoseconds. - Weight::from_ref_time(723_885_274) - // Standard Error: 60_058 - .saturating_add(Weight::from_ref_time(27_101_815).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `29640 + r * (365 ±0)` + // Estimated: `153818 + r * (3411 ±0)` + // Minimum execution time: 52_412_000 picoseconds. + Weight::from_parts(1_574_668_129, 0) + .saturating_add(Weight::from_parts(0, 153818)) + // Standard Error: 136_001 + .saturating_add(Weight::from_parts(37_269_909, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) .saturating_add(T::DbWeight::get().writes(6)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(r.into()))) + .saturating_add(Weight::from_parts(0, 3411).saturating_mul(r.into())) } - // Storage: ConvictionVoting VotingFor (r:2 w:2) - // Storage: Referenda ReferendumInfoFor (r:10 w:10) - // Storage: Scheduler Agenda (r:2 w:2) + /// Storage: ConvictionVoting VotingFor (r:2 w:2) + /// Proof: ConvictionVoting VotingFor (max_values: None, max_size: Some(27241), added: 29716, mode: MaxEncodedLen) + /// Storage: Referenda ReferendumInfoFor (r:512 w:512) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:2 w:2) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) /// The range of component `r` is `[0, 512]`. fn undelegate(r: u32, ) -> Weight { - // Minimum execution time: 56_587 nanoseconds. - Weight::from_ref_time(697_756_743) - // Standard Error: 60_091 - .saturating_add(Weight::from_ref_time(27_152_327).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `29555 + r * (365 ±0)` + // Estimated: `145278 + r * (3411 ±0)` + // Minimum execution time: 35_901_000 picoseconds. + Weight::from_parts(1_534_534_801, 0) + .saturating_add(Weight::from_parts(0, 145278)) + // Standard Error: 135_205 + .saturating_add(Weight::from_parts(37_478_595, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) .saturating_add(T::DbWeight::get().writes(4)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(r.into()))) + .saturating_add(Weight::from_parts(0, 3411).saturating_mul(r.into())) } - // Storage: ConvictionVoting VotingFor (r:1 w:1) - // Storage: ConvictionVoting ClassLocksFor (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: ConvictionVoting VotingFor (r:1 w:1) + /// Proof: ConvictionVoting VotingFor (max_values: None, max_size: Some(27241), added: 29716, mode: MaxEncodedLen) + /// Storage: ConvictionVoting ClassLocksFor (r:1 w:1) + /// Proof: ConvictionVoting ClassLocksFor (max_values: None, max_size: Some(311), added: 2786, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) fn unlock() -> Weight { - // Minimum execution time: 94_375 nanoseconds. - Weight::from_ref_time(96_800_000) + // Proof Size summary in bytes: + // Measured: `12217` + // Estimated: `39246` + // Minimum execution time: 71_968_000 picoseconds. + Weight::from_parts(74_104_000, 0) + .saturating_add(Weight::from_parts(0, 39246)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } diff --git a/runtime/kusama/src/weights/pallet_democracy.rs b/runtime/kusama/src/weights/pallet_democracy.rs index 384f20001d13..d6f08ba76e9d 100644 --- a/runtime/kusama/src/weights/pallet_democracy.rs +++ b/runtime/kusama/src/weights/pallet_democracy.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_democracy` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,219 +45,469 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_democracy`. pub struct WeightInfo(PhantomData); impl pallet_democracy::WeightInfo for WeightInfo { - // Storage: Democracy PublicPropCount (r:1 w:1) - // Storage: Democracy PublicProps (r:1 w:1) - // Storage: Democracy Blacklist (r:1 w:0) - // Storage: Democracy DepositOf (r:0 w:1) + /// Storage: Democracy PublicPropCount (r:1 w:1) + /// Proof: Democracy PublicPropCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Democracy PublicProps (r:1 w:1) + /// Proof: Democracy PublicProps (max_values: Some(1), max_size: Some(16702), added: 17197, mode: MaxEncodedLen) + /// Storage: Democracy Blacklist (r:1 w:0) + /// Proof: Democracy Blacklist (max_values: None, max_size: Some(3238), added: 5713, mode: MaxEncodedLen) + /// Storage: Democracy DepositOf (r:0 w:1) + /// Proof: Democracy DepositOf (max_values: None, max_size: Some(3230), added: 5705, mode: MaxEncodedLen) fn propose() -> Weight { - // Minimum execution time: 43_332 nanoseconds. - Weight::from_ref_time(44_449_000) + // Proof Size summary in bytes: + // Measured: `4768` + // Estimated: `26379` + // Minimum execution time: 35_098_000 picoseconds. + Weight::from_parts(35_696_000, 0) + .saturating_add(Weight::from_parts(0, 26379)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Democracy DepositOf (r:1 w:1) + /// Storage: Democracy DepositOf (r:1 w:1) + /// Proof: Democracy DepositOf (max_values: None, max_size: Some(3230), added: 5705, mode: MaxEncodedLen) fn second() -> Weight { - // Minimum execution time: 40_024 nanoseconds. - Weight::from_ref_time(42_081_000) + // Proof Size summary in bytes: + // Measured: `3523` + // Estimated: `6695` + // Minimum execution time: 32_218_000 picoseconds. + Weight::from_parts(32_458_000, 0) + .saturating_add(Weight::from_parts(0, 6695)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Democracy ReferendumInfoOf (r:1 w:1) - // Storage: Democracy VotingOf (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Democracy ReferendumInfoOf (r:1 w:1) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) + /// Storage: Democracy VotingOf (r:1 w:1) + /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3795), added: 6270, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) fn vote_new() -> Weight { - // Minimum execution time: 51_246 nanoseconds. - Weight::from_ref_time(51_986_000) + // Proof Size summary in bytes: + // Measured: `3437` + // Estimated: `15690` + // Minimum execution time: 46_641_000 picoseconds. + Weight::from_parts(47_324_000, 0) + .saturating_add(Weight::from_parts(0, 15690)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Democracy ReferendumInfoOf (r:1 w:1) - // Storage: Democracy VotingOf (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Democracy ReferendumInfoOf (r:1 w:1) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) + /// Storage: Democracy VotingOf (r:1 w:1) + /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3795), added: 6270, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) fn vote_existing() -> Weight { - // Minimum execution time: 51_221 nanoseconds. - Weight::from_ref_time(52_200_000) + // Proof Size summary in bytes: + // Measured: `3459` + // Estimated: `15690` + // Minimum execution time: 47_172_000 picoseconds. + Weight::from_parts(47_732_000, 0) + .saturating_add(Weight::from_parts(0, 15690)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Democracy ReferendumInfoOf (r:1 w:1) - // Storage: Democracy Cancellations (r:1 w:1) + /// Storage: Democracy ReferendumInfoOf (r:1 w:1) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) + /// Storage: Democracy Cancellations (r:1 w:1) + /// Proof: Democracy Cancellations (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:1 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) fn emergency_cancel() -> Weight { - // Minimum execution time: 22_015 nanoseconds. - Weight::from_ref_time(22_272_000) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) + // Proof Size summary in bytes: + // Measured: `333` + // Estimated: `10682` + // Minimum execution time: 25_744_000 picoseconds. + Weight::from_parts(26_226_000, 0) + .saturating_add(Weight::from_parts(0, 10682)) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Democracy PublicProps (r:1 w:1) - // Storage: Democracy DepositOf (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: Democracy NextExternal (r:1 w:1) - // Storage: Democracy ReferendumInfoOf (r:1 w:1) - // Storage: Democracy Blacklist (r:0 w:1) + /// Storage: Democracy PublicProps (r:1 w:1) + /// Proof: Democracy PublicProps (max_values: Some(1), max_size: Some(16702), added: 17197, mode: MaxEncodedLen) + /// Storage: Democracy DepositOf (r:1 w:1) + /// Proof: Democracy DepositOf (max_values: None, max_size: Some(3230), added: 5705, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:3 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + /// Storage: Democracy NextExternal (r:1 w:1) + /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumInfoOf (r:1 w:1) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) + /// Storage: Democracy Blacklist (r:0 w:1) + /// Proof: Democracy Blacklist (max_values: None, max_size: Some(3238), added: 5713, mode: MaxEncodedLen) fn blacklist() -> Weight { - // Minimum execution time: 79_080 nanoseconds. - Weight::from_ref_time(79_914_000) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(6)) + // Proof Size summary in bytes: + // Measured: `5877` + // Estimated: `42332` + // Minimum execution time: 88_365_000 picoseconds. + Weight::from_parts(90_080_000, 0) + .saturating_add(Weight::from_parts(0, 42332)) + .saturating_add(T::DbWeight::get().reads(8)) + .saturating_add(T::DbWeight::get().writes(7)) } - // Storage: Democracy NextExternal (r:1 w:1) - // Storage: Democracy Blacklist (r:1 w:0) + /// Storage: Democracy NextExternal (r:1 w:1) + /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) + /// Storage: Democracy Blacklist (r:1 w:0) + /// Proof: Democracy Blacklist (max_values: None, max_size: Some(3238), added: 5713, mode: MaxEncodedLen) fn external_propose() -> Weight { - // Minimum execution time: 16_980 nanoseconds. - Weight::from_ref_time(17_479_000) + // Proof Size summary in bytes: + // Measured: `3383` + // Estimated: `8320` + // Minimum execution time: 12_868_000 picoseconds. + Weight::from_parts(13_178_000, 0) + .saturating_add(Weight::from_parts(0, 8320)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Democracy NextExternal (r:0 w:1) + /// Storage: Democracy NextExternal (r:0 w:1) + /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) fn external_propose_majority() -> Weight { - // Minimum execution time: 4_733 nanoseconds. - Weight::from_ref_time(4_876_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_714_000 picoseconds. + Weight::from_parts(3_895_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Democracy NextExternal (r:0 w:1) + /// Storage: Democracy NextExternal (r:0 w:1) + /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) fn external_propose_default() -> Weight { - // Minimum execution time: 4_601 nanoseconds. - Weight::from_ref_time(4_717_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_565_000 picoseconds. + Weight::from_parts(3_831_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Democracy NextExternal (r:1 w:1) - // Storage: Democracy ReferendumCount (r:1 w:1) - // Storage: Democracy ReferendumInfoOf (r:0 w:1) + /// Storage: Democracy NextExternal (r:1 w:1) + /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumCount (r:1 w:1) + /// Proof: Democracy ReferendumCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:1 w:2) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumInfoOf (r:0 w:1) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) fn fast_track() -> Weight { - // Minimum execution time: 21_450 nanoseconds. - Weight::from_ref_time(21_767_000) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(3)) + // Proof Size summary in bytes: + // Measured: `253` + // Estimated: `6624` + // Minimum execution time: 26_453_000 picoseconds. + Weight::from_parts(26_938_000, 0) + .saturating_add(Weight::from_parts(0, 6624)) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: Democracy NextExternal (r:1 w:1) - // Storage: Democracy Blacklist (r:1 w:1) + /// Storage: Democracy NextExternal (r:1 w:1) + /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) + /// Storage: Democracy Blacklist (r:1 w:1) + /// Proof: Democracy Blacklist (max_values: None, max_size: Some(3238), added: 5713, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:1 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) fn veto_external() -> Weight { - // Minimum execution time: 26_708 nanoseconds. - Weight::from_ref_time(27_394_000) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - // Storage: Democracy PublicProps (r:1 w:1) - // Storage: Democracy DepositOf (r:1 w:1) - // Storage: System Account (r:1 w:1) - fn cancel_proposal() -> Weight { - // Minimum execution time: 67_036 nanoseconds. - Weight::from_ref_time(68_231_000) + // Proof Size summary in bytes: + // Measured: `3486` + // Estimated: `11838` + // Minimum execution time: 30_869_000 picoseconds. + Weight::from_parts(31_397_000, 0) + .saturating_add(Weight::from_parts(0, 11838)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Democracy ReferendumInfoOf (r:0 w:1) + /// Storage: Democracy PublicProps (r:1 w:1) + /// Proof: Democracy PublicProps (max_values: Some(1), max_size: Some(16702), added: 17197, mode: MaxEncodedLen) + /// Storage: Democracy DepositOf (r:1 w:1) + /// Proof: Democracy DepositOf (max_values: None, max_size: Some(3230), added: 5705, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:1 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + fn cancel_proposal() -> Weight { + // Proof Size summary in bytes: + // Measured: `5788` + // Estimated: `31993` + // Minimum execution time: 72_692_000 picoseconds. + Weight::from_parts(73_692_000, 0) + .saturating_add(Weight::from_parts(0, 31993)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(4)) + } + /// Storage: Democracy MetadataOf (r:1 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumInfoOf (r:0 w:1) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) fn cancel_referendum() -> Weight { - // Minimum execution time: 13_672 nanoseconds. - Weight::from_ref_time(14_014_000) - .saturating_add(T::DbWeight::get().writes(1)) + // Proof Size summary in bytes: + // Measured: `238` + // Estimated: `3518` + // Minimum execution time: 19_506_000 picoseconds. + Weight::from_parts(19_823_000, 0) + .saturating_add(Weight::from_parts(0, 3518)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Democracy LowestUnbaked (r:1 w:1) - // Storage: Democracy ReferendumCount (r:1 w:0) - // Storage: Democracy ReferendumInfoOf (r:2 w:0) + /// Storage: Democracy LowestUnbaked (r:1 w:1) + /// Proof: Democracy LowestUnbaked (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumCount (r:1 w:0) + /// Proof: Democracy ReferendumCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumInfoOf (r:99 w:0) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) /// The range of component `r` is `[0, 99]`. fn on_initialize_base(r: u32, ) -> Weight { - // Minimum execution time: 6_105 nanoseconds. - Weight::from_ref_time(9_273_381) - // Standard Error: 3_886 - .saturating_add(Weight::from_ref_time(2_093_384).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `211 + r * (86 ±0)` + // Estimated: `3968 + r * (2676 ±0)` + // Minimum execution time: 6_019_000 picoseconds. + Weight::from_parts(9_632_674, 0) + .saturating_add(Weight::from_parts(0, 3968)) + // Standard Error: 6_651 + .saturating_add(Weight::from_parts(2_769_264, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 2676).saturating_mul(r.into())) } - // Storage: Democracy LowestUnbaked (r:1 w:1) - // Storage: Democracy ReferendumCount (r:1 w:0) - // Storage: Democracy LastTabledWasExternal (r:1 w:0) - // Storage: Democracy NextExternal (r:1 w:0) - // Storage: Democracy PublicProps (r:1 w:0) - // Storage: Democracy ReferendumInfoOf (r:2 w:0) + /// Storage: Democracy LowestUnbaked (r:1 w:1) + /// Proof: Democracy LowestUnbaked (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumCount (r:1 w:0) + /// Proof: Democracy ReferendumCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Democracy LastTabledWasExternal (r:1 w:0) + /// Proof: Democracy LastTabledWasExternal (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) + /// Storage: Democracy NextExternal (r:1 w:0) + /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) + /// Storage: Democracy PublicProps (r:1 w:0) + /// Proof: Democracy PublicProps (max_values: Some(1), max_size: Some(16702), added: 17197, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumInfoOf (r:99 w:0) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) /// The range of component `r` is `[0, 99]`. fn on_initialize_base_with_launch_period(r: u32, ) -> Weight { - // Minimum execution time: 8_492 nanoseconds. - Weight::from_ref_time(12_036_123) - // Standard Error: 3_615 - .saturating_add(Weight::from_ref_time(2_085_813).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `211 + r * (86 ±0)` + // Estimated: `25258 + r * (2676 ±0)` + // Minimum execution time: 9_143_000 picoseconds. + Weight::from_parts(12_247_629, 0) + .saturating_add(Weight::from_parts(0, 25258)) + // Standard Error: 6_077 + .saturating_add(Weight::from_parts(2_764_547, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 2676).saturating_mul(r.into())) } - // Storage: Democracy VotingOf (r:3 w:3) - // Storage: Balances Locks (r:1 w:1) - // Storage: Democracy ReferendumInfoOf (r:2 w:2) + /// Storage: Democracy VotingOf (r:3 w:3) + /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3795), added: 6270, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumInfoOf (r:99 w:99) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `r` is `[0, 99]`. fn delegate(r: u32, ) -> Weight { - // Minimum execution time: 43_017 nanoseconds. - Weight::from_ref_time(49_545_735) - // Standard Error: 5_877 - .saturating_add(Weight::from_ref_time(3_070_283).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `797 + r * (108 ±0)` + // Estimated: `25554 + r * (2676 ±0)` + // Minimum execution time: 41_153_000 picoseconds. + Weight::from_parts(42_787_487, 0) + .saturating_add(Weight::from_parts(0, 25554)) + // Standard Error: 7_883 + .saturating_add(Weight::from_parts(3_862_521, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) .saturating_add(T::DbWeight::get().writes(4)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(r.into()))) + .saturating_add(Weight::from_parts(0, 2676).saturating_mul(r.into())) } - // Storage: Democracy VotingOf (r:2 w:2) - // Storage: Democracy ReferendumInfoOf (r:2 w:2) + /// Storage: Democracy VotingOf (r:2 w:2) + /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3795), added: 6270, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumInfoOf (r:99 w:99) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) /// The range of component `r` is `[0, 99]`. fn undelegate(r: u32, ) -> Weight { - // Minimum execution time: 25_997 nanoseconds. - Weight::from_ref_time(28_582_986) - // Standard Error: 5_921 - .saturating_add(Weight::from_ref_time(3_063_954).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `460 + r * (108 ±0)` + // Estimated: `14520 + r * (2676 ±0)` + // Minimum execution time: 20_767_000 picoseconds. + Weight::from_parts(21_768_239, 0) + .saturating_add(Weight::from_parts(0, 14520)) + // Standard Error: 9_791 + .saturating_add(Weight::from_parts(3_862_103, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) .saturating_add(T::DbWeight::get().writes(2)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(r.into()))) + .saturating_add(Weight::from_parts(0, 2676).saturating_mul(r.into())) } - // Storage: Democracy PublicProps (r:0 w:1) + /// Storage: Democracy PublicProps (r:0 w:1) + /// Proof: Democracy PublicProps (max_values: Some(1), max_size: Some(16702), added: 17197, mode: MaxEncodedLen) fn clear_public_proposals() -> Weight { - // Minimum execution time: 5_244 nanoseconds. - Weight::from_ref_time(5_386_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_663_000 picoseconds. + Weight::from_parts(3_798_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Democracy VotingOf (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Democracy VotingOf (r:1 w:1) + /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3795), added: 6270, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `r` is `[0, 99]`. fn unlock_remove(r: u32, ) -> Weight { - // Minimum execution time: 25_877 nanoseconds. - Weight::from_ref_time(32_903_261) - // Standard Error: 1_579 - .saturating_add(Weight::from_ref_time(31_424).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `530` + // Estimated: `15617` + // Minimum execution time: 19_923_000 picoseconds. + Weight::from_parts(25_945_279, 0) + .saturating_add(Weight::from_parts(0, 15617)) + // Standard Error: 1_366 + .saturating_add(Weight::from_parts(22_003, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Democracy VotingOf (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Democracy VotingOf (r:1 w:1) + /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3795), added: 6270, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `r` is `[0, 99]`. fn unlock_set(r: u32, ) -> Weight { - // Minimum execution time: 30_681 nanoseconds. - Weight::from_ref_time(32_498_252) - // Standard Error: 1_239 - .saturating_add(Weight::from_ref_time(68_223).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `531 + r * (22 ±0)` + // Estimated: `15617` + // Minimum execution time: 24_393_000 picoseconds. + Weight::from_parts(25_690_593, 0) + .saturating_add(Weight::from_parts(0, 15617)) + // Standard Error: 553 + .saturating_add(Weight::from_parts(59_042, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Democracy ReferendumInfoOf (r:1 w:1) - // Storage: Democracy VotingOf (r:1 w:1) + /// Storage: Democracy ReferendumInfoOf (r:1 w:1) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) + /// Storage: Democracy VotingOf (r:1 w:1) + /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3795), added: 6270, mode: MaxEncodedLen) /// The range of component `r` is `[1, 100]`. fn remove_vote(r: u32, ) -> Weight { - // Minimum execution time: 16_955 nanoseconds. - Weight::from_ref_time(19_294_735) - // Standard Error: 841 - .saturating_add(Weight::from_ref_time(66_746).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `695 + r * (26 ±0)` + // Estimated: `10926` + // Minimum execution time: 15_551_000 picoseconds. + Weight::from_parts(17_809_948, 0) + .saturating_add(Weight::from_parts(0, 10926)) + // Standard Error: 1_907 + .saturating_add(Weight::from_parts(86_496, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Democracy ReferendumInfoOf (r:1 w:1) - // Storage: Democracy VotingOf (r:1 w:1) + /// Storage: Democracy ReferendumInfoOf (r:1 w:1) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) + /// Storage: Democracy VotingOf (r:1 w:1) + /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3795), added: 6270, mode: MaxEncodedLen) /// The range of component `r` is `[1, 100]`. fn remove_other_vote(r: u32, ) -> Weight { - // Minimum execution time: 16_564 nanoseconds. - Weight::from_ref_time(19_243_442) - // Standard Error: 957 - .saturating_add(Weight::from_ref_time(69_793).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `695 + r * (26 ±0)` + // Estimated: `10926` + // Minimum execution time: 16_027_000 picoseconds. + Weight::from_parts(17_860_077, 0) + .saturating_add(Weight::from_parts(0, 10926)) + // Standard Error: 1_950 + .saturating_add(Weight::from_parts(87_722, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } + /// Storage: Democracy NextExternal (r:1 w:0) + /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) + /// Storage: Preimage StatusFor (r:1 w:0) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:0 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + fn set_external_metadata() -> Weight { + // Proof Size summary in bytes: + // Measured: `323` + // Estimated: `5173` + // Minimum execution time: 17_551_000 picoseconds. + Weight::from_parts(17_776_000, 0) + .saturating_add(Weight::from_parts(0, 5173)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: Democracy NextExternal (r:1 w:0) + /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:1 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + fn clear_external_metadata() -> Weight { + // Proof Size summary in bytes: + // Measured: `253` + // Estimated: `5135` + // Minimum execution time: 16_020_000 picoseconds. + Weight::from_parts(16_477_000, 0) + .saturating_add(Weight::from_parts(0, 5135)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: Democracy PublicProps (r:1 w:0) + /// Proof: Democracy PublicProps (max_values: Some(1), max_size: Some(16702), added: 17197, mode: MaxEncodedLen) + /// Storage: Preimage StatusFor (r:1 w:0) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:0 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + fn set_proposal_metadata() -> Weight { + // Proof Size summary in bytes: + // Measured: `4855` + // Estimated: `21743` + // Minimum execution time: 33_144_000 picoseconds. + Weight::from_parts(33_457_000, 0) + .saturating_add(Weight::from_parts(0, 21743)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: Democracy PublicProps (r:1 w:0) + /// Proof: Democracy PublicProps (max_values: Some(1), max_size: Some(16702), added: 17197, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:1 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + fn clear_proposal_metadata() -> Weight { + // Proof Size summary in bytes: + // Measured: `4789` + // Estimated: `21705` + // Minimum execution time: 31_022_000 picoseconds. + Weight::from_parts(31_534_000, 0) + .saturating_add(Weight::from_parts(0, 21705)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: Preimage StatusFor (r:1 w:0) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:0 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + fn set_referendum_metadata() -> Weight { + // Proof Size summary in bytes: + // Measured: `144` + // Estimated: `3556` + // Minimum execution time: 14_512_000 picoseconds. + Weight::from_parts(14_769_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: Democracy ReferendumInfoOf (r:1 w:0) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:1 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + fn clear_referendum_metadata() -> Weight { + // Proof Size summary in bytes: + // Measured: `269` + // Estimated: `7184` + // Minimum execution time: 17_966_000 picoseconds. + Weight::from_parts(18_270_000, 0) + .saturating_add(Weight::from_parts(0, 7184)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } } diff --git a/runtime/kusama/src/weights/pallet_election_provider_multi_phase.rs b/runtime/kusama/src/weights/pallet_election_provider_multi_phase.rs index 7922051c6b8b..ff0caff5982c 100644 --- a/runtime/kusama/src/weights/pallet_election_provider_multi_phase.rs +++ b/runtime/kusama/src/weights/pallet_election_provider_multi_phase.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_election_provider_multi_phase` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,130 +45,221 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_election_provider_multi_phase`. pub struct WeightInfo(PhantomData); impl pallet_election_provider_multi_phase::WeightInfo for WeightInfo { - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Staking CurrentPlannedSession (r:1 w:0) - // Storage: Staking ErasStartSessionIndex (r:1 w:0) - // Storage: Babe EpochIndex (r:1 w:0) - // Storage: Babe GenesisSlot (r:1 w:0) - // Storage: Babe CurrentSlot (r:1 w:0) - // Storage: Staking ForceEra (r:1 w:0) - // Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking CurrentPlannedSession (r:1 w:0) + /// Proof: Staking CurrentPlannedSession (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ErasStartSessionIndex (r:1 w:0) + /// Proof: Staking ErasStartSessionIndex (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Babe EpochIndex (r:1 w:0) + /// Proof: Babe EpochIndex (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Babe GenesisSlot (r:1 w:0) + /// Proof: Babe GenesisSlot (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Babe CurrentSlot (r:1 w:0) + /// Proof: Babe CurrentSlot (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Staking ForceEra (r:1 w:0) + /// Proof: Staking ForceEra (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) + /// Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) fn on_initialize_nothing() -> Weight { - // Minimum execution time: 16_970 nanoseconds. - Weight::from_ref_time(17_363_000) + // Proof Size summary in bytes: + // Measured: `1027` + // Estimated: `14936` + // Minimum execution time: 21_024_000 picoseconds. + Weight::from_parts(21_697_000, 0) + .saturating_add(Weight::from_parts(0, 14936)) .saturating_add(T::DbWeight::get().reads(8)) } - // Storage: ElectionProviderMultiPhase Round (r:1 w:0) - // Storage: ElectionProviderMultiPhase CurrentPhase (r:0 w:1) + /// Storage: ElectionProviderMultiPhase Round (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase Round (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) fn on_initialize_open_signed() -> Weight { - // Minimum execution time: 14_655 nanoseconds. - Weight::from_ref_time(14_881_000) - .saturating_add(T::DbWeight::get().reads(1)) + // Proof Size summary in bytes: + // Measured: `148` + // Estimated: `3266` + // Minimum execution time: 13_251_000 picoseconds. + Weight::from_parts(13_556_000, 0) + .saturating_add(Weight::from_parts(0, 3266)) + .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: ElectionProviderMultiPhase Round (r:1 w:0) - // Storage: ElectionProviderMultiPhase CurrentPhase (r:0 w:1) + /// Storage: ElectionProviderMultiPhase Round (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase Round (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) fn on_initialize_open_unsigned() -> Weight { - // Minimum execution time: 14_451 nanoseconds. - Weight::from_ref_time(14_825_000) - .saturating_add(T::DbWeight::get().reads(1)) + // Proof Size summary in bytes: + // Measured: `148` + // Estimated: `3266` + // Minimum execution time: 14_586_000 picoseconds. + Weight::from_parts(14_932_000, 0) + .saturating_add(Weight::from_parts(0, 3266)) + .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: System Account (r:1 w:1) - // Storage: ElectionProviderMultiPhase QueuedSolution (r:0 w:1) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: ElectionProviderMultiPhase QueuedSolution (r:0 w:1) + /// Proof Skipped: ElectionProviderMultiPhase QueuedSolution (max_values: Some(1), max_size: None, mode: Measured) fn finalize_signed_phase_accept_solution() -> Weight { - // Minimum execution time: 29_693 nanoseconds. - Weight::from_ref_time(30_030_000) + // Proof Size summary in bytes: + // Measured: `174` + // Estimated: `3767` + // Minimum execution time: 24_044_000 picoseconds. + Weight::from_parts(24_456_000, 0) + .saturating_add(Weight::from_parts(0, 3767)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: System Account (r:1 w:1) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn finalize_signed_phase_reject_solution() -> Weight { - // Minimum execution time: 23_101 nanoseconds. - Weight::from_ref_time(23_294_000) + // Proof Size summary in bytes: + // Measured: `174` + // Estimated: `3593` + // Minimum execution time: 16_778_000 picoseconds. + Weight::from_parts(17_098_000, 0) + .saturating_add(Weight::from_parts(0, 3593)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: ElectionProviderMultiPhase SnapshotMetadata (r:0 w:1) - // Storage: ElectionProviderMultiPhase DesiredTargets (r:0 w:1) - // Storage: ElectionProviderMultiPhase Snapshot (r:0 w:1) + /// Storage: ElectionProviderMultiPhase SnapshotMetadata (r:0 w:1) + /// Proof Skipped: ElectionProviderMultiPhase SnapshotMetadata (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase DesiredTargets (r:0 w:1) + /// Proof Skipped: ElectionProviderMultiPhase DesiredTargets (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase Snapshot (r:0 w:1) + /// Proof Skipped: ElectionProviderMultiPhase Snapshot (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `v` is `[1000, 2000]`. /// The range of component `t` is `[500, 1000]`. - fn create_snapshot_internal(v: u32, t: u32, ) -> Weight { - // Minimum execution time: 632_291 nanoseconds. - Weight::from_ref_time(32_358_301) - // Standard Error: 2_306 - .saturating_add(Weight::from_ref_time(547_479).saturating_mul(v.into())) - // Standard Error: 4_610 - .saturating_add(Weight::from_ref_time(80_995).saturating_mul(t.into())) + fn create_snapshot_internal(v: u32, _t: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 658_110_000 picoseconds. + Weight::from_parts(673_151_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 3_369 + .saturating_add(Weight::from_parts(392_624, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: ElectionProviderMultiPhase SignedSubmissionIndices (r:1 w:1) - // Storage: ElectionProviderMultiPhase SignedSubmissionNextIndex (r:1 w:1) - // Storage: ElectionProviderMultiPhase SnapshotMetadata (r:1 w:1) - // Storage: ElectionProviderMultiPhase SignedSubmissionsMap (r:1 w:0) - // Storage: System BlockWeight (r:1 w:1) - // Storage: ElectionProviderMultiPhase QueuedSolution (r:1 w:1) - // Storage: ElectionProviderMultiPhase Round (r:1 w:1) - // Storage: ElectionProviderMultiPhase DesiredTargets (r:0 w:1) - // Storage: ElectionProviderMultiPhase Snapshot (r:0 w:1) - // Storage: ElectionProviderMultiPhase CurrentPhase (r:0 w:1) + /// Storage: ElectionProviderMultiPhase SignedSubmissionIndices (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase SignedSubmissionIndices (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase SignedSubmissionNextIndex (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase SignedSubmissionNextIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase SnapshotMetadata (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase SnapshotMetadata (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase SignedSubmissionsMap (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase SignedSubmissionsMap (max_values: None, max_size: None, mode: Measured) + /// Storage: System BlockWeight (r:1 w:1) + /// Proof: System BlockWeight (max_values: Some(1), max_size: Some(48), added: 543, mode: MaxEncodedLen) + /// Storage: ElectionProviderMultiPhase QueuedSolution (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase QueuedSolution (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase Round (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase Round (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase DesiredTargets (r:0 w:1) + /// Proof Skipped: ElectionProviderMultiPhase DesiredTargets (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase Snapshot (r:0 w:1) + /// Proof Skipped: ElectionProviderMultiPhase Snapshot (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `a` is `[500, 800]`. /// The range of component `d` is `[200, 400]`. - fn elect_queued(a: u32, _d: u32, ) -> Weight { - // Minimum execution time: 371_762 nanoseconds. - Weight::from_ref_time(380_412_000) - // Standard Error: 8_912 - .saturating_add(Weight::from_ref_time(590_949).saturating_mul(a.into())) - .saturating_add(T::DbWeight::get().reads(7)) + fn elect_queued(a: u32, d: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `900 + a * (1152 ±0) + d * (47 ±0)` + // Estimated: `21873 + a * (10368 ±0) + d * (432 ±0)` + // Minimum execution time: 374_177_000 picoseconds. + Weight::from_parts(383_707_000, 0) + .saturating_add(Weight::from_parts(0, 21873)) + // Standard Error: 8_930 + .saturating_add(Weight::from_parts(575_485, 0).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(9)) + .saturating_add(Weight::from_parts(0, 10368).saturating_mul(a.into())) + .saturating_add(Weight::from_parts(0, 432).saturating_mul(d.into())) } - // Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) - // Storage: ElectionProviderMultiPhase SnapshotMetadata (r:1 w:0) - // Storage: TransactionPayment NextFeeMultiplier (r:1 w:0) - // Storage: ElectionProviderMultiPhase SignedSubmissionIndices (r:1 w:1) - // Storage: ElectionProviderMultiPhase SignedSubmissionNextIndex (r:1 w:1) - // Storage: ElectionProviderMultiPhase SignedSubmissionsMap (r:0 w:1) + /// Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase SnapshotMetadata (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase SnapshotMetadata (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TransactionPayment NextFeeMultiplier (r:1 w:0) + /// Proof: TransactionPayment NextFeeMultiplier (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: ElectionProviderMultiPhase SignedSubmissionIndices (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase SignedSubmissionIndices (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase SignedSubmissionNextIndex (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase SignedSubmissionNextIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase SignedSubmissionsMap (r:0 w:1) + /// Proof Skipped: ElectionProviderMultiPhase SignedSubmissionsMap (max_values: None, max_size: None, mode: Measured) fn submit() -> Weight { - // Minimum execution time: 51_620 nanoseconds. - Weight::from_ref_time(51_944_000) + // Proof Size summary in bytes: + // Measured: `1238` + // Estimated: `13631` + // Minimum execution time: 45_426_000 picoseconds. + Weight::from_parts(46_000_000, 0) + .saturating_add(Weight::from_parts(0, 13631)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) - // Storage: ElectionProviderMultiPhase Round (r:1 w:0) - // Storage: ElectionProviderMultiPhase DesiredTargets (r:1 w:0) - // Storage: ElectionProviderMultiPhase QueuedSolution (r:1 w:1) - // Storage: ElectionProviderMultiPhase SnapshotMetadata (r:1 w:0) - // Storage: ElectionProviderMultiPhase MinimumUntrustedScore (r:1 w:0) - // Storage: ElectionProviderMultiPhase Snapshot (r:1 w:0) + /// Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase Round (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase Round (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase DesiredTargets (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase DesiredTargets (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase QueuedSolution (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase QueuedSolution (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase SnapshotMetadata (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase SnapshotMetadata (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase Snapshot (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase Snapshot (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase MinimumUntrustedScore (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase MinimumUntrustedScore (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `v` is `[1000, 2000]`. /// The range of component `t` is `[500, 1000]`. /// The range of component `a` is `[500, 800]`. /// The range of component `d` is `[200, 400]`. - fn submit_unsigned(_v: u32, _t: u32, a: u32, _d: u32, ) -> Weight { - // Minimum execution time: 6_963_307 nanoseconds. - Weight::from_ref_time(6_992_705_000) - // Standard Error: 62_150 - .saturating_add(Weight::from_ref_time(7_173_871).saturating_mul(a.into())) + fn submit_unsigned(v: u32, t: u32, a: u32, _d: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `253 + v * (809 ±0) + t * (32 ±0)` + // Estimated: `12166 + v * (5663 ±0) + t * (224 ±0)` + // Minimum execution time: 7_353_352_000 picoseconds. + Weight::from_parts(7_409_425_000, 0) + .saturating_add(Weight::from_parts(0, 12166)) + // Standard Error: 24_654 + .saturating_add(Weight::from_parts(9_966, 0).saturating_mul(v.into())) + // Standard Error: 73_060 + .saturating_add(Weight::from_parts(7_603_657, 0).saturating_mul(a.into())) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 5663).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(0, 224).saturating_mul(t.into())) } - // Storage: ElectionProviderMultiPhase Round (r:1 w:0) - // Storage: ElectionProviderMultiPhase DesiredTargets (r:1 w:0) - // Storage: ElectionProviderMultiPhase MinimumUntrustedScore (r:1 w:0) - // Storage: ElectionProviderMultiPhase Snapshot (r:1 w:0) + /// Storage: ElectionProviderMultiPhase DesiredTargets (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase DesiredTargets (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase Snapshot (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase Snapshot (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase Round (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase Round (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase MinimumUntrustedScore (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase MinimumUntrustedScore (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `v` is `[1000, 2000]`. /// The range of component `t` is `[500, 1000]`. /// The range of component `a` is `[500, 800]`. /// The range of component `d` is `[200, 400]`. - fn feasibility_check(v: u32, _t: u32, a: u32, _d: u32, ) -> Weight { - // Minimum execution time: 5_821_005 nanoseconds. - Weight::from_ref_time(5_889_611_000) - // Standard Error: 24_617 - .saturating_add(Weight::from_ref_time(377_034).saturating_mul(v.into())) - // Standard Error: 72_952 - .saturating_add(Weight::from_ref_time(5_370_344).saturating_mul(a.into())) + fn feasibility_check(v: u32, t: u32, a: u32, _d: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `228 + v * (809 ±0) + t * (32 ±0)` + // Estimated: `6852 + v * (3236 ±0) + t * (128 ±0)` + // Minimum execution time: 6_174_792_000 picoseconds. + Weight::from_parts(6_244_237_000, 0) + .saturating_add(Weight::from_parts(0, 6852)) + // Standard Error: 21_322 + .saturating_add(Weight::from_parts(142_059, 0).saturating_mul(v.into())) + // Standard Error: 63_186 + .saturating_add(Weight::from_parts(5_948_175, 0).saturating_mul(a.into())) .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(Weight::from_parts(0, 3236).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(0, 128).saturating_mul(t.into())) } } diff --git a/runtime/kusama/src/weights/pallet_elections_phragmen.rs b/runtime/kusama/src/weights/pallet_elections_phragmen.rs index f2b2f38789d6..350cf90e2d70 100644 --- a/runtime/kusama/src/weights/pallet_elections_phragmen.rs +++ b/runtime/kusama/src/weights/pallet_elections_phragmen.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_elections_phragmen` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,153 +45,259 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_elections_phragmen`. pub struct WeightInfo(PhantomData); impl pallet_elections_phragmen::WeightInfo for WeightInfo { - // Storage: PhragmenElection Candidates (r:1 w:0) - // Storage: PhragmenElection Members (r:1 w:0) - // Storage: PhragmenElection RunnersUp (r:1 w:0) - // Storage: PhragmenElection Voting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: PhragmenElection Candidates (r:1 w:0) + /// Proof Skipped: PhragmenElection Candidates (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Members (r:1 w:0) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection RunnersUp (r:1 w:0) + /// Proof Skipped: PhragmenElection RunnersUp (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Voting (r:1 w:1) + /// Proof Skipped: PhragmenElection Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `v` is `[1, 16]`. fn vote_equal(v: u32, ) -> Weight { - // Minimum execution time: 32_051 nanoseconds. - Weight::from_ref_time(33_997_284) - // Standard Error: 5_326 - .saturating_add(Weight::from_ref_time(152_057).saturating_mul(v.into())) + // Proof Size summary in bytes: + // Measured: `403 + v * (80 ±0)` + // Estimated: `14292 + v * (320 ±0)` + // Minimum execution time: 27_353_000 picoseconds. + Weight::from_parts(28_103_445, 0) + .saturating_add(Weight::from_parts(0, 14292)) + // Standard Error: 4_556 + .saturating_add(Weight::from_parts(117_766, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 320).saturating_mul(v.into())) } - // Storage: PhragmenElection Candidates (r:1 w:0) - // Storage: PhragmenElection Members (r:1 w:0) - // Storage: PhragmenElection RunnersUp (r:1 w:0) - // Storage: PhragmenElection Voting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: PhragmenElection Candidates (r:1 w:0) + /// Proof Skipped: PhragmenElection Candidates (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Members (r:1 w:0) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection RunnersUp (r:1 w:0) + /// Proof Skipped: PhragmenElection RunnersUp (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Voting (r:1 w:1) + /// Proof Skipped: PhragmenElection Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `v` is `[2, 16]`. fn vote_more(v: u32, ) -> Weight { - // Minimum execution time: 42_433 nanoseconds. - Weight::from_ref_time(44_061_458) - // Standard Error: 5_255 - .saturating_add(Weight::from_ref_time(175_150).saturating_mul(v.into())) + // Proof Size summary in bytes: + // Measured: `371 + v * (80 ±0)` + // Estimated: `14164 + v * (320 ±0)` + // Minimum execution time: 36_885_000 picoseconds. + Weight::from_parts(37_769_975, 0) + .saturating_add(Weight::from_parts(0, 14164)) + // Standard Error: 6_586 + .saturating_add(Weight::from_parts(123_567, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 320).saturating_mul(v.into())) } - // Storage: PhragmenElection Candidates (r:1 w:0) - // Storage: PhragmenElection Members (r:1 w:0) - // Storage: PhragmenElection RunnersUp (r:1 w:0) - // Storage: PhragmenElection Voting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: PhragmenElection Candidates (r:1 w:0) + /// Proof Skipped: PhragmenElection Candidates (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Members (r:1 w:0) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection RunnersUp (r:1 w:0) + /// Proof Skipped: PhragmenElection RunnersUp (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Voting (r:1 w:1) + /// Proof Skipped: PhragmenElection Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `v` is `[2, 16]`. fn vote_less(v: u32, ) -> Weight { - // Minimum execution time: 42_410 nanoseconds. - Weight::from_ref_time(43_612_356) - // Standard Error: 5_057 - .saturating_add(Weight::from_ref_time(206_540).saturating_mul(v.into())) + // Proof Size summary in bytes: + // Measured: `403 + v * (80 ±0)` + // Estimated: `14292 + v * (320 ±0)` + // Minimum execution time: 36_610_000 picoseconds. + Weight::from_parts(37_524_808, 0) + .saturating_add(Weight::from_parts(0, 14292)) + // Standard Error: 6_164 + .saturating_add(Weight::from_parts(147_944, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 320).saturating_mul(v.into())) } - // Storage: PhragmenElection Voting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: PhragmenElection Voting (r:1 w:1) + /// Proof Skipped: PhragmenElection Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) fn remove_voter() -> Weight { - // Minimum execution time: 41_764 nanoseconds. - Weight::from_ref_time(42_348_000) + // Proof Size summary in bytes: + // Measured: `925` + // Estimated: `9154` + // Minimum execution time: 33_052_000 picoseconds. + Weight::from_parts(33_677_000, 0) + .saturating_add(Weight::from_parts(0, 9154)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: PhragmenElection Candidates (r:1 w:1) - // Storage: PhragmenElection Members (r:1 w:0) - // Storage: PhragmenElection RunnersUp (r:1 w:0) + /// Storage: PhragmenElection Candidates (r:1 w:1) + /// Proof Skipped: PhragmenElection Candidates (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Members (r:1 w:0) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection RunnersUp (r:1 w:0) + /// Proof Skipped: PhragmenElection RunnersUp (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `c` is `[1, 1000]`. fn submit_candidacy(c: u32, ) -> Weight { - // Minimum execution time: 36_936 nanoseconds. - Weight::from_ref_time(28_854_430) - // Standard Error: 1_036 - .saturating_add(Weight::from_ref_time(92_014).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `2712 + c * (48 ±0)` + // Estimated: `12585 + c * (144 ±0)` + // Minimum execution time: 32_163_000 picoseconds. + Weight::from_parts(24_757_419, 0) + .saturating_add(Weight::from_parts(0, 12585)) + // Standard Error: 902 + .saturating_add(Weight::from_parts(79_765, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 144).saturating_mul(c.into())) } - // Storage: PhragmenElection Candidates (r:1 w:1) + /// Storage: PhragmenElection Candidates (r:1 w:1) + /// Proof Skipped: PhragmenElection Candidates (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `c` is `[1, 1000]`. fn renounce_candidacy_candidate(c: u32, ) -> Weight { - // Minimum execution time: 32_665 nanoseconds. - Weight::from_ref_time(24_381_480) - // Standard Error: 1_038 - .saturating_add(Weight::from_ref_time(72_251).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `284 + c * (48 ±0)` + // Estimated: `1756 + c * (48 ±0)` + // Minimum execution time: 24_805_000 picoseconds. + Weight::from_parts(17_940_635, 0) + .saturating_add(Weight::from_parts(0, 1756)) + // Standard Error: 888 + .saturating_add(Weight::from_parts(59_369, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 48).saturating_mul(c.into())) } - // Storage: PhragmenElection Members (r:1 w:1) - // Storage: PhragmenElection RunnersUp (r:1 w:1) - // Storage: Council Prime (r:1 w:1) - // Storage: Council Proposals (r:1 w:0) - // Storage: Council Members (r:0 w:1) + /// Storage: PhragmenElection Members (r:1 w:1) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection RunnersUp (r:1 w:1) + /// Proof Skipped: PhragmenElection RunnersUp (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Prime (r:1 w:1) + /// Proof Skipped: Council Prime (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Proposals (r:1 w:0) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Members (r:0 w:1) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) fn renounce_candidacy_members() -> Weight { - // Minimum execution time: 45_774 nanoseconds. - Weight::from_ref_time(47_677_000) + // Proof Size summary in bytes: + // Measured: `2986` + // Estimated: `20870` + // Minimum execution time: 42_908_000 picoseconds. + Weight::from_parts(43_409_000, 0) + .saturating_add(Weight::from_parts(0, 20870)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: PhragmenElection RunnersUp (r:1 w:1) + /// Storage: PhragmenElection RunnersUp (r:1 w:1) + /// Proof Skipped: PhragmenElection RunnersUp (max_values: Some(1), max_size: None, mode: Measured) fn renounce_candidacy_runners_up() -> Weight { - // Minimum execution time: 35_341 nanoseconds. - Weight::from_ref_time(36_021_000) + // Proof Size summary in bytes: + // Measured: `1681` + // Estimated: `3166` + // Minimum execution time: 27_419_000 picoseconds. + Weight::from_parts(27_912_000, 0) + .saturating_add(Weight::from_parts(0, 3166)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Benchmark Override (r:0 w:0) + /// Storage: Benchmark Override (r:0 w:0) + /// Proof Skipped: Benchmark Override (max_values: None, max_size: None, mode: Measured) fn remove_member_without_replacement() -> Weight { - // Minimum execution time: 2_000_000_000 nanoseconds. - Weight::from_ref_time(2_000_000_000_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_000_000_000_000 picoseconds. + Weight::from_parts(2_000_000_000_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } - // Storage: PhragmenElection Members (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: PhragmenElection RunnersUp (r:1 w:1) - // Storage: Council Prime (r:1 w:1) - // Storage: Council Proposals (r:1 w:0) - // Storage: Council Members (r:0 w:1) + /// Storage: PhragmenElection Members (r:1 w:1) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: PhragmenElection RunnersUp (r:1 w:1) + /// Proof Skipped: PhragmenElection RunnersUp (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Prime (r:1 w:1) + /// Proof Skipped: Council Prime (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Proposals (r:1 w:0) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Members (r:0 w:1) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) fn remove_member_with_replacement() -> Weight { - // Minimum execution time: 59_963 nanoseconds. - Weight::from_ref_time(61_133_000) + // Proof Size summary in bytes: + // Measured: `2986` + // Estimated: `24463` + // Minimum execution time: 57_465_000 picoseconds. + Weight::from_parts(58_107_000, 0) + .saturating_add(Weight::from_parts(0, 24463)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: PhragmenElection Voting (r:5001 w:5000) - // Storage: PhragmenElection Members (r:1 w:0) - // Storage: PhragmenElection RunnersUp (r:1 w:0) - // Storage: PhragmenElection Candidates (r:1 w:0) - // Storage: Balances Locks (r:5000 w:5000) - // Storage: System Account (r:5000 w:5000) + /// Storage: PhragmenElection Voting (r:10001 w:10000) + /// Proof Skipped: PhragmenElection Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: PhragmenElection Members (r:1 w:0) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection RunnersUp (r:1 w:0) + /// Proof Skipped: PhragmenElection RunnersUp (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Candidates (r:1 w:0) + /// Proof Skipped: PhragmenElection Candidates (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Balances Locks (r:10000 w:10000) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:10000 w:10000) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `v` is `[5000, 10000]`. /// The range of component `d` is `[0, 5000]`. fn clean_defunct_voters(v: u32, _d: u32, ) -> Weight { - // Minimum execution time: 286_333_718 nanoseconds. - Weight::from_ref_time(286_839_378_000) - // Standard Error: 247_683 - .saturating_add(Weight::from_ref_time(35_671_313).saturating_mul(v.into())) + // Proof Size summary in bytes: + // Measured: `35989 + v * (808 ±0)` + // Estimated: `154956 + v * (12084 ±0)` + // Minimum execution time: 319_677_473_000 picoseconds. + Weight::from_parts(320_382_361_000, 0) + .saturating_add(Weight::from_parts(0, 154956)) + // Standard Error: 270_292 + .saturating_add(Weight::from_parts(38_671_603, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(v.into()))) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(v.into()))) + .saturating_add(Weight::from_parts(0, 12084).saturating_mul(v.into())) } - // Storage: PhragmenElection Candidates (r:1 w:1) - // Storage: PhragmenElection Members (r:1 w:1) - // Storage: PhragmenElection RunnersUp (r:1 w:1) - // Storage: PhragmenElection Voting (r:10001 w:0) - // Storage: Council Proposals (r:1 w:0) - // Storage: PhragmenElection ElectionRounds (r:1 w:1) - // Storage: Council Members (r:0 w:1) - // Storage: Council Prime (r:0 w:1) - // Storage: System Account (r:3 w:3) + /// Storage: PhragmenElection Candidates (r:1 w:1) + /// Proof Skipped: PhragmenElection Candidates (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Members (r:1 w:1) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection RunnersUp (r:1 w:1) + /// Proof Skipped: PhragmenElection RunnersUp (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Voting (r:10001 w:0) + /// Proof Skipped: PhragmenElection Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Council Proposals (r:1 w:0) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System Account (r:962 w:962) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: PhragmenElection ElectionRounds (r:1 w:1) + /// Proof Skipped: PhragmenElection ElectionRounds (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Members (r:0 w:1) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Prime (r:0 w:1) + /// Proof Skipped: Council Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `c` is `[1, 1000]`. /// The range of component `v` is `[1, 10000]`. /// The range of component `e` is `[10000, 160000]`. fn election_phragmen(c: u32, v: u32, e: u32, ) -> Weight { - // Minimum execution time: 29_154_342 nanoseconds. - Weight::from_ref_time(29_360_734_000) - // Standard Error: 541_981 - .saturating_add(Weight::from_ref_time(45_981_042).saturating_mul(v.into())) - // Standard Error: 34_781 - .saturating_add(Weight::from_ref_time(2_353_500).saturating_mul(e.into())) + // Proof Size summary in bytes: + // Measured: `0 + v * (607 ±0) + e * (28 ±0)` + // Estimated: `4839313 + v * (5481 ±4) + e * (123 ±0) + c * (2560 ±0)` + // Minimum execution time: 30_795_431_000 picoseconds. + Weight::from_parts(30_861_700_000, 0) + .saturating_add(Weight::from_parts(0, 4839313)) + // Standard Error: 482_348 + .saturating_add(Weight::from_parts(37_626_560, 0).saturating_mul(v.into())) + // Standard Error: 30_954 + .saturating_add(Weight::from_parts(2_016_889, 0).saturating_mul(e.into())) .saturating_add(T::DbWeight::get().reads(265)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(c.into()))) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(v.into()))) .saturating_add(T::DbWeight::get().writes(6)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(c.into()))) + .saturating_add(Weight::from_parts(0, 5481).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(0, 123).saturating_mul(e.into())) + .saturating_add(Weight::from_parts(0, 2560).saturating_mul(c.into())) } } diff --git a/runtime/kusama/src/weights/pallet_fast_unstake.rs b/runtime/kusama/src/weights/pallet_fast_unstake.rs index 7704562359e5..733a7138d666 100644 --- a/runtime/kusama/src/weights/pallet_fast_unstake.rs +++ b/runtime/kusama/src/weights/pallet_fast_unstake.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_fast_unstake` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,78 +45,150 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_fast_unstake`. pub struct WeightInfo(PhantomData); impl pallet_fast_unstake::WeightInfo for WeightInfo { - // Storage: FastUnstake ErasToCheckPerBlock (r:1 w:0) - // Storage: Staking ValidatorCount (r:1 w:0) - // Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) - // Storage: FastUnstake Head (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Staking SlashingSpans (r:64 w:0) - // Storage: Staking Bonded (r:64 w:64) - // Storage: Staking Validators (r:64 w:0) - // Storage: Staking Nominators (r:64 w:0) - // Storage: System Account (r:64 w:64) - // Storage: Balances Locks (r:64 w:64) - // Storage: Staking Ledger (r:0 w:64) - // Storage: Staking Payee (r:0 w:64) - fn on_idle_unstake() -> Weight { - // Minimum execution time: 2_333_815 nanoseconds. - Weight::from_ref_time(2_345_273_000) - .saturating_add(T::DbWeight::get().reads(389)) - .saturating_add(T::DbWeight::get().writes(321)) + /// Storage: FastUnstake ErasToCheckPerBlock (r:1 w:0) + /// Proof: FastUnstake ErasToCheckPerBlock (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ValidatorCount (r:1 w:0) + /// Proof: Staking ValidatorCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: FastUnstake Head (r:1 w:1) + /// Proof: FastUnstake Head (max_values: Some(1), max_size: Some(3191), added: 3686, mode: MaxEncodedLen) + /// Storage: FastUnstake CounterForQueue (r:1 w:0) + /// Proof: FastUnstake CounterForQueue (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking SlashingSpans (r:64 w:0) + /// Proof Skipped: Staking SlashingSpans (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking Bonded (r:64 w:64) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:64 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:64 w:0) + /// Proof: Staking Nominators (max_values: None, max_size: Some(814), added: 3289, mode: MaxEncodedLen) + /// Storage: System Account (r:64 w:64) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:64 w:64) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:0 w:64) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:0 w:64) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + /// The range of component `b` is `[1, 64]`. + fn on_idle_unstake(b: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1316 + b * (343 ±0)` + // Estimated: `20621 + b * (17898 ±0)` + // Minimum execution time: 76_169_000 picoseconds. + Weight::from_parts(42_721_141, 0) + .saturating_add(Weight::from_parts(0, 20621)) + // Standard Error: 49_311 + .saturating_add(Weight::from_parts(41_420_931, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().reads((6_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((5_u64).saturating_mul(b.into()))) + .saturating_add(Weight::from_parts(0, 17898).saturating_mul(b.into())) } - // Storage: FastUnstake ErasToCheckPerBlock (r:1 w:0) - // Storage: Staking ValidatorCount (r:1 w:0) - // Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) - // Storage: FastUnstake Head (r:1 w:1) - // Storage: FastUnstake Queue (r:65 w:64) - // Storage: FastUnstake CounterForQueue (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Staking ErasStakers (r:56 w:0) - /// The range of component `x` is `[28, 3584]`. - fn on_idle_check(x: u32, ) -> Weight { - // Minimum execution time: 22_277_324 nanoseconds. - Weight::from_ref_time(22_625_767_000) - // Standard Error: 479_422 - .saturating_add(Weight::from_ref_time(628_500_181).saturating_mul(x.into())) - .saturating_add(T::DbWeight::get().reads(85)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(x.into()))) - .saturating_add(T::DbWeight::get().writes(66)) + /// Storage: FastUnstake ErasToCheckPerBlock (r:1 w:0) + /// Proof: FastUnstake ErasToCheckPerBlock (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ValidatorCount (r:1 w:0) + /// Proof: Staking ValidatorCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: FastUnstake Head (r:1 w:1) + /// Proof: FastUnstake Head (max_values: Some(1), max_size: Some(3191), added: 3686, mode: MaxEncodedLen) + /// Storage: FastUnstake CounterForQueue (r:1 w:0) + /// Proof: FastUnstake CounterForQueue (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ErasStakers (r:257 w:0) + /// Proof Skipped: Staking ErasStakers (max_values: None, max_size: None, mode: Measured) + /// The range of component `v` is `[1, 256]`. + /// The range of component `b` is `[1, 64]`. + fn on_idle_check(v: u32, b: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1484 + v * (18487 ±0) + b * (48 ±0)` + // Estimated: `18256 + v * (39451 ±0) + b * (98 ±0)` + // Minimum execution time: 1_663_692_000 picoseconds. + Weight::from_parts(1_670_772_000, 0) + .saturating_add(Weight::from_parts(0, 18256)) + // Standard Error: 15_299_028 + .saturating_add(Weight::from_parts(489_545_566, 0).saturating_mul(v.into())) + // Standard Error: 61_213_154 + .saturating_add(Weight::from_parts(1_926_696_821, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(7)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(v.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 39451).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(0, 98).saturating_mul(b.into())) } - // Storage: FastUnstake ErasToCheckPerBlock (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: FastUnstake Queue (r:1 w:1) - // Storage: FastUnstake Head (r:1 w:0) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Validators (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) - // Storage: Staking CounterForNominators (r:1 w:1) - // Storage: VoterList ListNodes (r:2 w:2) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) - // Storage: FastUnstake CounterForQueue (r:1 w:1) + /// Storage: FastUnstake ErasToCheckPerBlock (r:1 w:0) + /// Proof: FastUnstake ErasToCheckPerBlock (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: FastUnstake Queue (r:1 w:1) + /// Proof: FastUnstake Queue (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) + /// Storage: FastUnstake Head (r:1 w:0) + /// Proof: FastUnstake Head (max_values: Some(1), max_size: Some(3191), added: 3686, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:1 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:1) + /// Proof: Staking Nominators (max_values: None, max_size: Some(814), added: 3289, mode: MaxEncodedLen) + /// Storage: Staking CounterForNominators (r:1 w:1) + /// Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:1 w:1) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: FastUnstake CounterForQueue (r:1 w:1) + /// Proof: FastUnstake CounterForQueue (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn register_fast_unstake() -> Weight { - // Minimum execution time: 131_140 nanoseconds. - Weight::from_ref_time(133_608_000) - .saturating_add(T::DbWeight::get().reads(15)) - .saturating_add(T::DbWeight::get().writes(10)) + // Proof Size summary in bytes: + // Measured: `1898` + // Estimated: `43454` + // Minimum execution time: 111_662_000 picoseconds. + Weight::from_parts(112_581_000, 0) + .saturating_add(Weight::from_parts(0, 43454)) + .saturating_add(T::DbWeight::get().reads(14)) + .saturating_add(T::DbWeight::get().writes(9)) } - // Storage: FastUnstake ErasToCheckPerBlock (r:1 w:0) - // Storage: Staking Ledger (r:1 w:0) - // Storage: FastUnstake Queue (r:1 w:1) - // Storage: FastUnstake Head (r:1 w:0) - // Storage: FastUnstake CounterForQueue (r:1 w:1) + /// Storage: FastUnstake ErasToCheckPerBlock (r:1 w:0) + /// Proof: FastUnstake ErasToCheckPerBlock (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: FastUnstake Queue (r:1 w:1) + /// Proof: FastUnstake Queue (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) + /// Storage: FastUnstake Head (r:1 w:0) + /// Proof: FastUnstake Head (max_values: Some(1), max_size: Some(3191), added: 3686, mode: MaxEncodedLen) + /// Storage: FastUnstake CounterForQueue (r:1 w:1) + /// Proof: FastUnstake CounterForQueue (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn deregister() -> Weight { - // Minimum execution time: 52_243 nanoseconds. - Weight::from_ref_time(53_351_000) + // Proof Size summary in bytes: + // Measured: `1156` + // Estimated: `15731` + // Minimum execution time: 40_644_000 picoseconds. + Weight::from_parts(41_516_000, 0) + .saturating_add(Weight::from_parts(0, 15731)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: FastUnstake ErasToCheckPerBlock (r:0 w:1) + /// Storage: FastUnstake ErasToCheckPerBlock (r:0 w:1) + /// Proof: FastUnstake ErasToCheckPerBlock (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn control() -> Weight { - // Minimum execution time: 4_267 nanoseconds. - Weight::from_ref_time(4_458_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_901_000 picoseconds. + Weight::from_parts(3_026_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/runtime/kusama/src/weights/pallet_identity.rs b/runtime/kusama/src/weights/pallet_identity.rs index 2a565fb81a3c..ba3bf22f16a5 100644 --- a/runtime/kusama/src/weights/pallet_identity.rs +++ b/runtime/kusama/src/weights/pallet_identity.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_identity` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,209 +45,307 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_identity`. pub struct WeightInfo(PhantomData); impl pallet_identity::WeightInfo for WeightInfo { - // Storage: Identity Registrars (r:1 w:1) + /// Storage: Identity Registrars (r:1 w:1) + /// Proof: Identity Registrars (max_values: Some(1), max_size: Some(1141), added: 1636, mode: MaxEncodedLen) /// The range of component `r` is `[1, 19]`. fn add_registrar(r: u32, ) -> Weight { - // Minimum execution time: 17_074 nanoseconds. - Weight::from_ref_time(18_488_690) - // Standard Error: 2_915 - .saturating_add(Weight::from_ref_time(140_389).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `32 + r * (57 ±0)` + // Estimated: `2626` + // Minimum execution time: 11_971_000 picoseconds. + Weight::from_parts(12_647_916, 0) + .saturating_add(Weight::from_parts(0, 2626)) + // Standard Error: 1_923 + .saturating_add(Weight::from_parts(117_079, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity IdentityOf (r:1 w:1) + /// Storage: Identity IdentityOf (r:1 w:1) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) /// The range of component `r` is `[1, 20]`. /// The range of component `x` is `[0, 100]`. fn set_identity(r: u32, x: u32, ) -> Weight { - // Minimum execution time: 36_384 nanoseconds. - Weight::from_ref_time(35_515_499) - // Standard Error: 3_576 - .saturating_add(Weight::from_ref_time(101_933).saturating_mul(r.into())) - // Standard Error: 697 - .saturating_add(Weight::from_ref_time(341_160).saturating_mul(x.into())) + // Proof Size summary in bytes: + // Measured: `442 + r * (5 ±0)` + // Estimated: `11003` + // Minimum execution time: 29_280_000 picoseconds. + Weight::from_parts(30_187_924, 0) + .saturating_add(Weight::from_parts(0, 11003)) + // Standard Error: 4_084 + .saturating_add(Weight::from_parts(6_401, 0).saturating_mul(r.into())) + // Standard Error: 796 + .saturating_add(Weight::from_parts(440_407, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity IdentityOf (r:1 w:0) - // Storage: Identity SubsOf (r:1 w:1) - // Storage: Identity SuperOf (r:2 w:2) + /// Storage: Identity IdentityOf (r:1 w:0) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) + /// Storage: Identity SubsOf (r:1 w:1) + /// Proof: Identity SubsOf (max_values: None, max_size: Some(3258), added: 5733, mode: MaxEncodedLen) + /// Storage: Identity SuperOf (r:100 w:100) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) /// The range of component `s` is `[0, 100]`. fn set_subs_new(s: u32, ) -> Weight { - // Minimum execution time: 10_422 nanoseconds. - Weight::from_ref_time(29_301_371) - // Standard Error: 5_174 - .saturating_add(Weight::from_ref_time(2_238_423).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `101` + // Estimated: `18716 + s * (2589 ±0)` + // Minimum execution time: 9_217_000 picoseconds. + Weight::from_parts(22_366_407, 0) + .saturating_add(Weight::from_parts(0, 18716)) + // Standard Error: 5_217 + .saturating_add(Weight::from_parts(2_681_153, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(s.into()))) .saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) + .saturating_add(Weight::from_parts(0, 2589).saturating_mul(s.into())) } - // Storage: Identity IdentityOf (r:1 w:0) - // Storage: Identity SubsOf (r:1 w:1) - // Storage: Identity SuperOf (r:0 w:2) + /// Storage: Identity IdentityOf (r:1 w:0) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) + /// Storage: Identity SubsOf (r:1 w:1) + /// Proof: Identity SubsOf (max_values: None, max_size: Some(3258), added: 5733, mode: MaxEncodedLen) + /// Storage: Identity SuperOf (r:0 w:100) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) /// The range of component `p` is `[0, 100]`. fn set_subs_old(p: u32, ) -> Weight { - // Minimum execution time: 10_547 nanoseconds. - Weight::from_ref_time(29_481_225) - // Standard Error: 4_445 - .saturating_add(Weight::from_ref_time(965_691).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `194 + p * (32 ±0)` + // Estimated: `17726` + // Minimum execution time: 9_562_000 picoseconds. + Weight::from_parts(22_267_810, 0) + .saturating_add(Weight::from_parts(0, 17726)) + // Standard Error: 3_161 + .saturating_add(Weight::from_parts(1_068_419, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) } - // Storage: Identity SubsOf (r:1 w:1) - // Storage: Identity IdentityOf (r:1 w:1) - // Storage: Identity SuperOf (r:0 w:100) + /// Storage: Identity SubsOf (r:1 w:1) + /// Proof: Identity SubsOf (max_values: None, max_size: Some(3258), added: 5733, mode: MaxEncodedLen) + /// Storage: Identity IdentityOf (r:1 w:1) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) + /// Storage: Identity SuperOf (r:0 w:100) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) /// The range of component `r` is `[1, 20]`. /// The range of component `s` is `[0, 100]`. /// The range of component `x` is `[0, 100]`. fn clear_identity(r: u32, s: u32, x: u32, ) -> Weight { - // Minimum execution time: 52_976 nanoseconds. - Weight::from_ref_time(36_889_254) - // Standard Error: 6_751 - .saturating_add(Weight::from_ref_time(118_432).saturating_mul(r.into())) - // Standard Error: 1_318 - .saturating_add(Weight::from_ref_time(936_998).saturating_mul(s.into())) - // Standard Error: 1_318 - .saturating_add(Weight::from_ref_time(173_470).saturating_mul(x.into())) + // Proof Size summary in bytes: + // Measured: `469 + r * (5 ±0) + s * (32 ±0) + x * (66 ±0)` + // Estimated: `17726` + // Minimum execution time: 49_724_000 picoseconds. + Weight::from_parts(28_433_827, 0) + .saturating_add(Weight::from_parts(0, 17726)) + // Standard Error: 7_197 + .saturating_add(Weight::from_parts(45_635, 0).saturating_mul(r.into())) + // Standard Error: 1_405 + .saturating_add(Weight::from_parts(1_055_850, 0).saturating_mul(s.into())) + // Standard Error: 1_405 + .saturating_add(Weight::from_parts(236_616, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) } - // Storage: Identity Registrars (r:1 w:0) - // Storage: Identity IdentityOf (r:1 w:1) + /// Storage: Identity Registrars (r:1 w:0) + /// Proof: Identity Registrars (max_values: Some(1), max_size: Some(1141), added: 1636, mode: MaxEncodedLen) + /// Storage: Identity IdentityOf (r:1 w:1) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) /// The range of component `r` is `[1, 20]`. /// The range of component `x` is `[0, 100]`. fn request_judgement(r: u32, x: u32, ) -> Weight { - // Minimum execution time: 38_371 nanoseconds. - Weight::from_ref_time(37_795_137) - // Standard Error: 6_070 - .saturating_add(Weight::from_ref_time(102_441).saturating_mul(r.into())) - // Standard Error: 1_184 - .saturating_add(Weight::from_ref_time(356_618).saturating_mul(x.into())) + // Proof Size summary in bytes: + // Measured: `367 + r * (57 ±0) + x * (66 ±0)` + // Estimated: `13629` + // Minimum execution time: 30_181_000 picoseconds. + Weight::from_parts(30_036_356, 0) + .saturating_add(Weight::from_parts(0, 13629)) + // Standard Error: 3_733 + .saturating_add(Weight::from_parts(61_015, 0).saturating_mul(r.into())) + // Standard Error: 728 + .saturating_add(Weight::from_parts(464_610, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity IdentityOf (r:1 w:1) + /// Storage: Identity IdentityOf (r:1 w:1) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) /// The range of component `r` is `[1, 20]`. /// The range of component `x` is `[0, 100]`. fn cancel_request(r: u32, x: u32, ) -> Weight { - // Minimum execution time: 34_732 nanoseconds. - Weight::from_ref_time(34_398_160) - // Standard Error: 4_045 - .saturating_add(Weight::from_ref_time(85_223).saturating_mul(r.into())) - // Standard Error: 789 - .saturating_add(Weight::from_ref_time(356_362).saturating_mul(x.into())) + // Proof Size summary in bytes: + // Measured: `398 + x * (66 ±0)` + // Estimated: `11003` + // Minimum execution time: 27_256_000 picoseconds. + Weight::from_parts(27_361_959, 0) + .saturating_add(Weight::from_parts(0, 11003)) + // Standard Error: 4_547 + .saturating_add(Weight::from_parts(40_254, 0).saturating_mul(r.into())) + // Standard Error: 887 + .saturating_add(Weight::from_parts(464_938, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity Registrars (r:1 w:1) + /// Storage: Identity Registrars (r:1 w:1) + /// Proof: Identity Registrars (max_values: Some(1), max_size: Some(1141), added: 1636, mode: MaxEncodedLen) /// The range of component `r` is `[1, 19]`. fn set_fee(r: u32, ) -> Weight { - // Minimum execution time: 8_878 nanoseconds. - Weight::from_ref_time(9_820_687) - // Standard Error: 2_298 - .saturating_add(Weight::from_ref_time(121_287).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `89 + r * (57 ±0)` + // Estimated: `2626` + // Minimum execution time: 7_479_000 picoseconds. + Weight::from_parts(7_959_876, 0) + .saturating_add(Weight::from_parts(0, 2626)) + // Standard Error: 1_565 + .saturating_add(Weight::from_parts(91_853, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity Registrars (r:1 w:1) + /// Storage: Identity Registrars (r:1 w:1) + /// Proof: Identity Registrars (max_values: Some(1), max_size: Some(1141), added: 1636, mode: MaxEncodedLen) /// The range of component `r` is `[1, 19]`. fn set_account_id(r: u32, ) -> Weight { - // Minimum execution time: 9_286 nanoseconds. - Weight::from_ref_time(10_231_571) - // Standard Error: 2_053 - .saturating_add(Weight::from_ref_time(113_611).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `89 + r * (57 ±0)` + // Estimated: `2626` + // Minimum execution time: 7_750_000 picoseconds. + Weight::from_parts(8_097_434, 0) + .saturating_add(Weight::from_parts(0, 2626)) + // Standard Error: 1_227 + .saturating_add(Weight::from_parts(88_314, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity Registrars (r:1 w:1) + /// Storage: Identity Registrars (r:1 w:1) + /// Proof: Identity Registrars (max_values: Some(1), max_size: Some(1141), added: 1636, mode: MaxEncodedLen) /// The range of component `r` is `[1, 19]`. fn set_fields(r: u32, ) -> Weight { - // Minimum execution time: 9_198 nanoseconds. - Weight::from_ref_time(10_003_435) - // Standard Error: 1_729 - .saturating_add(Weight::from_ref_time(119_368).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `89 + r * (57 ±0)` + // Estimated: `2626` + // Minimum execution time: 7_686_000 picoseconds. + Weight::from_parts(8_176_717, 0) + .saturating_add(Weight::from_parts(0, 2626)) + // Standard Error: 1_152 + .saturating_add(Weight::from_parts(80_559, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity Registrars (r:1 w:0) - // Storage: Identity IdentityOf (r:1 w:1) + /// Storage: Identity Registrars (r:1 w:0) + /// Proof: Identity Registrars (max_values: Some(1), max_size: Some(1141), added: 1636, mode: MaxEncodedLen) + /// Storage: Identity IdentityOf (r:1 w:1) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) /// The range of component `r` is `[1, 19]`. /// The range of component `x` is `[0, 100]`. fn provide_judgement(r: u32, x: u32, ) -> Weight { - // Minimum execution time: 28_302 nanoseconds. - Weight::from_ref_time(27_949_716) - // Standard Error: 4_917 - .saturating_add(Weight::from_ref_time(111_693).saturating_mul(r.into())) - // Standard Error: 909 - .saturating_add(Weight::from_ref_time(598_410).saturating_mul(x.into())) + // Proof Size summary in bytes: + // Measured: `445 + r * (57 ±0) + x * (66 ±0)` + // Estimated: `13629` + // Minimum execution time: 22_923_000 picoseconds. + Weight::from_parts(22_446_926, 0) + .saturating_add(Weight::from_parts(0, 13629)) + // Standard Error: 6_242 + .saturating_add(Weight::from_parts(93_223, 0).saturating_mul(r.into())) + // Standard Error: 1_155 + .saturating_add(Weight::from_parts(734_993, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity SubsOf (r:1 w:1) - // Storage: Identity IdentityOf (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: Identity SuperOf (r:0 w:100) + /// Storage: Identity SubsOf (r:1 w:1) + /// Proof: Identity SubsOf (max_values: None, max_size: Some(3258), added: 5733, mode: MaxEncodedLen) + /// Storage: Identity IdentityOf (r:1 w:1) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Identity SuperOf (r:0 w:100) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) /// The range of component `r` is `[1, 20]`. /// The range of component `s` is `[0, 100]`. /// The range of component `x` is `[0, 100]`. fn kill_identity(r: u32, s: u32, x: u32, ) -> Weight { - // Minimum execution time: 64_861 nanoseconds. - Weight::from_ref_time(47_985_084) - // Standard Error: 6_854 - .saturating_add(Weight::from_ref_time(133_243).saturating_mul(r.into())) - // Standard Error: 1_338 - .saturating_add(Weight::from_ref_time(949_016).saturating_mul(s.into())) - // Standard Error: 1_338 - .saturating_add(Weight::from_ref_time(173_824).saturating_mul(x.into())) + // Proof Size summary in bytes: + // Measured: `676 + r * (5 ±0) + s * (32 ±0) + x * (66 ±0)` + // Estimated: `21319` + // Minimum execution time: 63_424_000 picoseconds. + Weight::from_parts(43_509_592, 0) + .saturating_add(Weight::from_parts(0, 21319)) + // Standard Error: 6_118 + .saturating_add(Weight::from_parts(34_163, 0).saturating_mul(r.into())) + // Standard Error: 1_194 + .saturating_add(Weight::from_parts(1_058_669, 0).saturating_mul(s.into())) + // Standard Error: 1_194 + .saturating_add(Weight::from_parts(226_324, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) } - // Storage: Identity IdentityOf (r:1 w:0) - // Storage: Identity SuperOf (r:1 w:1) - // Storage: Identity SubsOf (r:1 w:1) + /// Storage: Identity IdentityOf (r:1 w:0) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) + /// Storage: Identity SuperOf (r:1 w:1) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) + /// Storage: Identity SubsOf (r:1 w:1) + /// Proof: Identity SubsOf (max_values: None, max_size: Some(3258), added: 5733, mode: MaxEncodedLen) /// The range of component `s` is `[0, 99]`. fn add_sub(s: u32, ) -> Weight { - // Minimum execution time: 32_615 nanoseconds. - Weight::from_ref_time(38_659_172) - // Standard Error: 1_793 - .saturating_add(Weight::from_ref_time(75_038).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `475 + s * (36 ±0)` + // Estimated: `21305` + // Minimum execution time: 27_057_000 picoseconds. + Weight::from_parts(31_676_569, 0) + .saturating_add(Weight::from_parts(0, 21305)) + // Standard Error: 1_426 + .saturating_add(Weight::from_parts(59_355, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Identity IdentityOf (r:1 w:0) - // Storage: Identity SuperOf (r:1 w:1) + /// Storage: Identity IdentityOf (r:1 w:0) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) + /// Storage: Identity SuperOf (r:1 w:1) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) /// The range of component `s` is `[1, 100]`. fn rename_sub(s: u32, ) -> Weight { - // Minimum execution time: 14_187 nanoseconds. - Weight::from_ref_time(16_680_582) - // Standard Error: 725 - .saturating_add(Weight::from_ref_time(27_134).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `591 + s * (3 ±0)` + // Estimated: `14582` + // Minimum execution time: 12_795_000 picoseconds. + Weight::from_parts(15_135_109, 0) + .saturating_add(Weight::from_parts(0, 14582)) + // Standard Error: 629 + .saturating_add(Weight::from_parts(16_556, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity IdentityOf (r:1 w:0) - // Storage: Identity SuperOf (r:1 w:1) - // Storage: Identity SubsOf (r:1 w:1) + /// Storage: Identity IdentityOf (r:1 w:0) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) + /// Storage: Identity SuperOf (r:1 w:1) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) + /// Storage: Identity SubsOf (r:1 w:1) + /// Proof: Identity SubsOf (max_values: None, max_size: Some(3258), added: 5733, mode: MaxEncodedLen) /// The range of component `s` is `[1, 100]`. fn remove_sub(s: u32, ) -> Weight { - // Minimum execution time: 36_709 nanoseconds. - Weight::from_ref_time(40_268_669) - // Standard Error: 1_323 - .saturating_add(Weight::from_ref_time(64_240).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `638 + s * (35 ±0)` + // Estimated: `21305` + // Minimum execution time: 30_174_000 picoseconds. + Weight::from_parts(36_094_454, 0) + .saturating_add(Weight::from_parts(0, 21305)) + // Standard Error: 1_570 + .saturating_add(Weight::from_parts(50_442, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Identity SuperOf (r:1 w:1) - // Storage: Identity SubsOf (r:1 w:1) + /// Storage: Identity SuperOf (r:1 w:1) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) + /// Storage: Identity SubsOf (r:1 w:1) + /// Proof: Identity SubsOf (max_values: None, max_size: Some(3258), added: 5733, mode: MaxEncodedLen) /// The range of component `s` is `[0, 99]`. fn quit_sub(s: u32, ) -> Weight { - // Minimum execution time: 25_833 nanoseconds. - Weight::from_ref_time(29_844_159) - // Standard Error: 1_243 - .saturating_add(Weight::from_ref_time(65_945).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `564 + s * (37 ±0)` + // Estimated: `10302` + // Minimum execution time: 19_729_000 picoseconds. + Weight::from_parts(22_325_410, 0) + .saturating_add(Weight::from_parts(0, 10302)) + // Standard Error: 975 + .saturating_add(Weight::from_parts(52_068, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } diff --git a/runtime/kusama/src/weights/pallet_im_online.rs b/runtime/kusama/src/weights/pallet_im_online.rs index 24a91f168128..99740b15876f 100644 --- a/runtime/kusama/src/weights/pallet_im_online.rs +++ b/runtime/kusama/src/weights/pallet_im_online.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_im_online` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,21 +45,32 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_im_online`. pub struct WeightInfo(PhantomData); impl pallet_im_online::WeightInfo for WeightInfo { - // Storage: Session Validators (r:1 w:0) - // Storage: Session CurrentIndex (r:1 w:0) - // Storage: ImOnline ReceivedHeartbeats (r:1 w:1) - // Storage: ImOnline AuthoredBlocks (r:1 w:0) - // Storage: ImOnline Keys (r:1 w:0) + /// Storage: Session Validators (r:1 w:0) + /// Proof Skipped: Session Validators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Session CurrentIndex (r:1 w:0) + /// Proof Skipped: Session CurrentIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ImOnline Keys (r:1 w:0) + /// Proof: ImOnline Keys (max_values: Some(1), max_size: Some(320002), added: 320497, mode: MaxEncodedLen) + /// Storage: ImOnline ReceivedHeartbeats (r:1 w:1) + /// Proof: ImOnline ReceivedHeartbeats (max_values: None, max_size: Some(10021032), added: 10023507, mode: MaxEncodedLen) + /// Storage: ImOnline AuthoredBlocks (r:1 w:0) + /// Proof: ImOnline AuthoredBlocks (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) /// The range of component `k` is `[1, 1000]`. /// The range of component `e` is `[1, 100]`. fn validate_unsigned_and_then_heartbeat(k: u32, e: u32, ) -> Weight { - // Minimum execution time: 98_650 nanoseconds. - Weight::from_ref_time(80_236_257) - // Standard Error: 407 - .saturating_add(Weight::from_ref_time(24_048).saturating_mul(k.into())) - // Standard Error: 4_101 - .saturating_add(Weight::from_ref_time(313_664).saturating_mul(e.into())) + // Proof Size summary in bytes: + // Measured: `361 + k * (32 ±0)` + // Estimated: `10349676 + e * (35 ±0) + k * (64 ±0)` + // Minimum execution time: 91_159_000 picoseconds. + Weight::from_parts(74_157_856, 0) + .saturating_add(Weight::from_parts(0, 10349676)) + // Standard Error: 275 + .saturating_add(Weight::from_parts(20_308, 0).saturating_mul(k.into())) + // Standard Error: 2_777 + .saturating_add(Weight::from_parts(387_445, 0).saturating_mul(e.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 35).saturating_mul(e.into())) + .saturating_add(Weight::from_parts(0, 64).saturating_mul(k.into())) } } diff --git a/runtime/kusama/src/weights/pallet_indices.rs b/runtime/kusama/src/weights/pallet_indices.rs index 6715857e03e1..ab055603f0bf 100644 --- a/runtime/kusama/src/weights/pallet_indices.rs +++ b/runtime/kusama/src/weights/pallet_indices.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_indices` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,40 +45,67 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_indices`. pub struct WeightInfo(PhantomData); impl pallet_indices::WeightInfo for WeightInfo { - // Storage: Indices Accounts (r:1 w:1) + /// Storage: Indices Accounts (r:1 w:1) + /// Proof: Indices Accounts (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) fn claim() -> Weight { - // Minimum execution time: 26_291 nanoseconds. - Weight::from_ref_time(26_869_000) + // Proof Size summary in bytes: + // Measured: `142` + // Estimated: `3534` + // Minimum execution time: 19_717_000 picoseconds. + Weight::from_parts(19_973_000, 0) + .saturating_add(Weight::from_parts(0, 3534)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Indices Accounts (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Indices Accounts (r:1 w:1) + /// Proof: Indices Accounts (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn transfer() -> Weight { - // Minimum execution time: 33_709 nanoseconds. - Weight::from_ref_time(34_356_000) + // Proof Size summary in bytes: + // Measured: `341` + // Estimated: `7127` + // Minimum execution time: 25_883_000 picoseconds. + Weight::from_parts(26_341_000, 0) + .saturating_add(Weight::from_parts(0, 7127)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Indices Accounts (r:1 w:1) + /// Storage: Indices Accounts (r:1 w:1) + /// Proof: Indices Accounts (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) fn free() -> Weight { - // Minimum execution time: 27_719 nanoseconds. - Weight::from_ref_time(28_586_000) + // Proof Size summary in bytes: + // Measured: `238` + // Estimated: `3534` + // Minimum execution time: 20_994_000 picoseconds. + Weight::from_parts(21_545_000, 0) + .saturating_add(Weight::from_parts(0, 3534)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Indices Accounts (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Indices Accounts (r:1 w:1) + /// Proof: Indices Accounts (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn force_transfer() -> Weight { - // Minimum execution time: 28_184 nanoseconds. - Weight::from_ref_time(28_751_000) + // Proof Size summary in bytes: + // Measured: `341` + // Estimated: `7127` + // Minimum execution time: 23_512_000 picoseconds. + Weight::from_parts(23_892_000, 0) + .saturating_add(Weight::from_parts(0, 7127)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Indices Accounts (r:1 w:1) + /// Storage: Indices Accounts (r:1 w:1) + /// Proof: Indices Accounts (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) fn freeze() -> Weight { - // Minimum execution time: 32_935 nanoseconds. - Weight::from_ref_time(33_696_000) + // Proof Size summary in bytes: + // Measured: `238` + // Estimated: `3534` + // Minimum execution time: 23_144_000 picoseconds. + Weight::from_parts(23_511_000, 0) + .saturating_add(Weight::from_parts(0, 3534)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/kusama/src/weights/pallet_membership.rs b/runtime/kusama/src/weights/pallet_membership.rs index 22be890c04a4..8d141aa72a75 100644 --- a/runtime/kusama/src/weights/pallet_membership.rs +++ b/runtime/kusama/src/weights/pallet_membership.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_membership` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,95 +45,158 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_membership`. pub struct WeightInfo(PhantomData); impl pallet_membership::WeightInfo for WeightInfo { - // Storage: TechnicalMembership Members (r:1 w:1) - // Storage: TechnicalCommittee Proposals (r:1 w:0) - // Storage: TechnicalCommittee Members (r:0 w:1) - // Storage: TechnicalCommittee Prime (r:0 w:1) + /// Storage: TechnicalMembership Members (r:1 w:1) + /// Proof: TechnicalMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Proposals (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Members (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Prime (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[1, 99]`. fn add_member(m: u32, ) -> Weight { - // Minimum execution time: 21_152 nanoseconds. - Weight::from_ref_time(21_826_964) - // Standard Error: 463 - .saturating_add(Weight::from_ref_time(34_810).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `208 + m * (64 ±0)` + // Estimated: `6793 + m * (192 ±0)` + // Minimum execution time: 15_847_000 picoseconds. + Weight::from_parts(16_597_325, 0) + .saturating_add(Weight::from_parts(0, 6793)) + // Standard Error: 411 + .saturating_add(Weight::from_parts(35_801, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 192).saturating_mul(m.into())) } - // Storage: TechnicalMembership Members (r:1 w:1) - // Storage: TechnicalCommittee Proposals (r:1 w:0) - // Storage: TechnicalMembership Prime (r:1 w:0) - // Storage: TechnicalCommittee Members (r:0 w:1) - // Storage: TechnicalCommittee Prime (r:0 w:1) + /// Storage: TechnicalMembership Members (r:1 w:1) + /// Proof: TechnicalMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Proposals (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalMembership Prime (r:1 w:0) + /// Proof: TechnicalMembership Prime (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Members (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Prime (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[2, 100]`. fn remove_member(m: u32, ) -> Weight { - // Minimum execution time: 23_324 nanoseconds. - Weight::from_ref_time(24_070_746) - // Standard Error: 545 - .saturating_add(Weight::from_ref_time(33_705).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `312 + m * (64 ±0)` + // Estimated: `8622 + m * (192 ±0)` + // Minimum execution time: 18_412_000 picoseconds. + Weight::from_parts(19_251_698, 0) + .saturating_add(Weight::from_parts(0, 8622)) + // Standard Error: 474 + .saturating_add(Weight::from_parts(32_206, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 192).saturating_mul(m.into())) } - // Storage: TechnicalMembership Members (r:1 w:1) - // Storage: TechnicalCommittee Proposals (r:1 w:0) - // Storage: TechnicalMembership Prime (r:1 w:0) - // Storage: TechnicalCommittee Members (r:0 w:1) - // Storage: TechnicalCommittee Prime (r:0 w:1) + /// Storage: TechnicalMembership Members (r:1 w:1) + /// Proof: TechnicalMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Proposals (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalMembership Prime (r:1 w:0) + /// Proof: TechnicalMembership Prime (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Members (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Prime (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[2, 100]`. fn swap_member(m: u32, ) -> Weight { - // Minimum execution time: 23_348 nanoseconds. - Weight::from_ref_time(24_328_892) - // Standard Error: 550 - .saturating_add(Weight::from_ref_time(45_824).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `312 + m * (64 ±0)` + // Estimated: `8622 + m * (192 ±0)` + // Minimum execution time: 18_502_000 picoseconds. + Weight::from_parts(19_583_888, 0) + .saturating_add(Weight::from_parts(0, 8622)) + // Standard Error: 619 + .saturating_add(Weight::from_parts(44_408, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 192).saturating_mul(m.into())) } - // Storage: TechnicalMembership Members (r:1 w:1) - // Storage: TechnicalCommittee Proposals (r:1 w:0) - // Storage: TechnicalMembership Prime (r:1 w:0) - // Storage: TechnicalCommittee Members (r:0 w:1) - // Storage: TechnicalCommittee Prime (r:0 w:1) + /// Storage: TechnicalMembership Members (r:1 w:1) + /// Proof: TechnicalMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Proposals (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalMembership Prime (r:1 w:0) + /// Proof: TechnicalMembership Prime (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Members (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Prime (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[1, 100]`. fn reset_member(m: u32, ) -> Weight { - // Minimum execution time: 22_834 nanoseconds. - Weight::from_ref_time(24_182_319) - // Standard Error: 812 - .saturating_add(Weight::from_ref_time(156_755).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `312 + m * (64 ±0)` + // Estimated: `8622 + m * (192 ±0)` + // Minimum execution time: 18_088_000 picoseconds. + Weight::from_parts(19_292_324, 0) + .saturating_add(Weight::from_parts(0, 8622)) + // Standard Error: 759 + .saturating_add(Weight::from_parts(162_348, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 192).saturating_mul(m.into())) } - // Storage: TechnicalMembership Members (r:1 w:1) - // Storage: TechnicalCommittee Proposals (r:1 w:0) - // Storage: TechnicalMembership Prime (r:1 w:1) - // Storage: TechnicalCommittee Members (r:0 w:1) - // Storage: TechnicalCommittee Prime (r:0 w:1) + /// Storage: TechnicalMembership Members (r:1 w:1) + /// Proof: TechnicalMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Proposals (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalMembership Prime (r:1 w:1) + /// Proof: TechnicalMembership Prime (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Members (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Prime (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[1, 100]`. fn change_key(m: u32, ) -> Weight { - // Minimum execution time: 23_840 nanoseconds. - Weight::from_ref_time(25_086_525) - // Standard Error: 567 - .saturating_add(Weight::from_ref_time(44_882).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `312 + m * (64 ±0)` + // Estimated: `8622 + m * (192 ±0)` + // Minimum execution time: 19_134_000 picoseconds. + Weight::from_parts(20_242_466, 0) + .saturating_add(Weight::from_parts(0, 8622)) + // Standard Error: 962 + .saturating_add(Weight::from_parts(47_779, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(4)) + .saturating_add(Weight::from_parts(0, 192).saturating_mul(m.into())) } - // Storage: TechnicalMembership Members (r:1 w:0) - // Storage: TechnicalMembership Prime (r:0 w:1) - // Storage: TechnicalCommittee Prime (r:0 w:1) + /// Storage: TechnicalMembership Members (r:1 w:0) + /// Proof: TechnicalMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) + /// Storage: TechnicalMembership Prime (r:0 w:1) + /// Proof: TechnicalMembership Prime (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Prime (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[1, 100]`. fn set_prime(m: u32, ) -> Weight { - // Minimum execution time: 8_200 nanoseconds. - Weight::from_ref_time(8_771_310) - // Standard Error: 235 - .saturating_add(Weight::from_ref_time(10_536).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `32 + m * (32 ±0)` + // Estimated: `4719 + m * (32 ±0)` + // Minimum execution time: 6_726_000 picoseconds. + Weight::from_parts(6_966_055, 0) + .saturating_add(Weight::from_parts(0, 4719)) + // Standard Error: 255 + .saturating_add(Weight::from_parts(13_950, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) } - // Storage: TechnicalMembership Prime (r:0 w:1) - // Storage: TechnicalCommittee Prime (r:0 w:1) + /// Storage: TechnicalMembership Prime (r:0 w:1) + /// Proof: TechnicalMembership Prime (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Prime (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[1, 100]`. fn clear_prime(m: u32, ) -> Weight { - // Minimum execution time: 4_759 nanoseconds. - Weight::from_ref_time(5_065_982) - // Standard Error: 129 - .saturating_add(Weight::from_ref_time(250).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_010_000 picoseconds. + Weight::from_parts(3_196_429, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 78 + .saturating_add(Weight::from_parts(471, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().writes(2)) } } diff --git a/runtime/kusama/src/weights/pallet_multisig.rs b/runtime/kusama/src/weights/pallet_multisig.rs index 6bb31f41bae6..beeca8d260da 100644 --- a/runtime/kusama/src/weights/pallet_multisig.rs +++ b/runtime/kusama/src/weights/pallet_multisig.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_multisig` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -46,80 +47,113 @@ pub struct WeightInfo(PhantomData); impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `z` is `[0, 10000]`. fn as_multi_threshold_1(z: u32, ) -> Weight { - // Minimum execution time: 14_686 nanoseconds. - Weight::from_ref_time(15_171_154) - // Standard Error: 7 - .saturating_add(Weight::from_ref_time(546).saturating_mul(z.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 11_823_000 picoseconds. + Weight::from_parts(12_266_007, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 2 + .saturating_add(Weight::from_parts(498, 0).saturating_mul(z.into())) } - // Storage: Multisig Multisigs (r:1 w:1) - // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) + /// Storage: Multisig Multisigs (r:1 w:1) + /// Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create(s: u32, z: u32, ) -> Weight { - // Minimum execution time: 45_066 nanoseconds. - Weight::from_ref_time(37_346_773) - // Standard Error: 847 - .saturating_add(Weight::from_ref_time(89_091).saturating_mul(s.into())) - // Standard Error: 8 - .saturating_add(Weight::from_ref_time(1_534).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(2)) + // Proof Size summary in bytes: + // Measured: `301 + s * (2 ±0)` + // Estimated: `6811` + // Minimum execution time: 36_427_000 picoseconds. + Weight::from_parts(31_400_908, 0) + .saturating_add(Weight::from_parts(0, 6811)) + // Standard Error: 650 + .saturating_add(Weight::from_parts(54_330, 0).saturating_mul(s.into())) + // Standard Error: 6 + .saturating_add(Weight::from_parts(1_198, 0).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Multisig Multisigs (r:1 w:1) + /// Storage: Multisig Multisigs (r:1 w:1) + /// Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve(s: u32, z: u32, ) -> Weight { - // Minimum execution time: 34_578 nanoseconds. - Weight::from_ref_time(26_735_629) - // Standard Error: 745 - .saturating_add(Weight::from_ref_time(83_969).saturating_mul(s.into())) - // Standard Error: 7 - .saturating_add(Weight::from_ref_time(1_569).saturating_mul(z.into())) + // Proof Size summary in bytes: + // Measured: `320` + // Estimated: `6811` + // Minimum execution time: 26_513_000 picoseconds. + Weight::from_parts(21_729_726, 0) + .saturating_add(Weight::from_parts(0, 6811)) + // Standard Error: 412 + .saturating_add(Weight::from_parts(54_766, 0).saturating_mul(s.into())) + // Standard Error: 4 + .saturating_add(Weight::from_parts(1_190, 0).saturating_mul(z.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Multisig Multisigs (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Multisig Multisigs (r:1 w:1) + /// Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_complete(s: u32, z: u32, ) -> Weight { - // Minimum execution time: 49_448 nanoseconds. - Weight::from_ref_time(39_931_812) - // Standard Error: 556 - .saturating_add(Weight::from_ref_time(108_692).saturating_mul(s.into())) - // Standard Error: 5 - .saturating_add(Weight::from_ref_time(1_554).saturating_mul(z.into())) + // Proof Size summary in bytes: + // Measured: `426 + s * (33 ±0)` + // Estimated: `10404` + // Minimum execution time: 44_380_000 picoseconds. + Weight::from_parts(35_396_612, 0) + .saturating_add(Weight::from_parts(0, 10404)) + // Standard Error: 1_363 + .saturating_add(Weight::from_parts(95_216, 0).saturating_mul(s.into())) + // Standard Error: 13 + .saturating_add(Weight::from_parts(1_264, 0).saturating_mul(z.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Multisig Multisigs (r:1 w:1) - // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) + /// Storage: Multisig Multisigs (r:1 w:1) + /// Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_create(s: u32, ) -> Weight { - // Minimum execution time: 33_550 nanoseconds. - Weight::from_ref_time(36_004_994) - // Standard Error: 1_074 - .saturating_add(Weight::from_ref_time(89_359).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(2)) + // Proof Size summary in bytes: + // Measured: `301 + s * (2 ±0)` + // Estimated: `6811` + // Minimum execution time: 27_881_000 picoseconds. + Weight::from_parts(29_392_537, 0) + .saturating_add(Weight::from_parts(0, 6811)) + // Standard Error: 647 + .saturating_add(Weight::from_parts(63_287, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Multisig Multisigs (r:1 w:1) + /// Storage: Multisig Multisigs (r:1 w:1) + /// Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_approve(s: u32, ) -> Weight { - // Minimum execution time: 23_854 nanoseconds. - Weight::from_ref_time(25_907_514) - // Standard Error: 727 - .saturating_add(Weight::from_ref_time(80_801).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `320` + // Estimated: `6811` + // Minimum execution time: 18_831_000 picoseconds. + Weight::from_parts(20_022_948, 0) + .saturating_add(Weight::from_parts(0, 6811)) + // Standard Error: 709 + .saturating_add(Weight::from_parts(57_318, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Multisig Multisigs (r:1 w:1) + /// Storage: Multisig Multisigs (r:1 w:1) + /// Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) /// The range of component `s` is `[2, 100]`. fn cancel_as_multi(s: u32, ) -> Weight { - // Minimum execution time: 34_205 nanoseconds. - Weight::from_ref_time(36_711_168) - // Standard Error: 938 - .saturating_add(Weight::from_ref_time(83_514).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `492 + s * (1 ±0)` + // Estimated: `6811` + // Minimum execution time: 29_105_000 picoseconds. + Weight::from_parts(30_739_462, 0) + .saturating_add(Weight::from_parts(0, 6811)) + // Standard Error: 1_473 + .saturating_add(Weight::from_parts(90_499, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/kusama/src/weights/pallet_nis.rs b/runtime/kusama/src/weights/pallet_nis.rs index 2c8d14990c46..700e681f0399 100644 --- a/runtime/kusama/src/weights/pallet_nis.rs +++ b/runtime/kusama/src/weights/pallet_nis.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_nis` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,77 +45,193 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_nis`. pub struct WeightInfo(PhantomData); impl pallet_nis::WeightInfo for WeightInfo { - // Storage: Nis Queues (r:1 w:1) - // Storage: Nis QueueTotals (r:1 w:1) + /// Storage: Nis Queues (r:1 w:1) + /// Proof: Nis Queues (max_values: None, max_size: Some(48022), added: 50497, mode: MaxEncodedLen) + /// Storage: Balances Reserves (r:1 w:1) + /// Proof: Balances Reserves (max_values: None, max_size: Some(1249), added: 3724, mode: MaxEncodedLen) + /// Storage: Nis QueueTotals (r:1 w:1) + /// Proof: Nis QueueTotals (max_values: Some(1), max_size: Some(10002), added: 10497, mode: MaxEncodedLen) /// The range of component `l` is `[0, 999]`. fn place_bid(l: u32, ) -> Weight { - // Minimum execution time: 34_088 nanoseconds. - Weight::from_ref_time(36_343_273) - // Standard Error: 733 - .saturating_add(Weight::from_ref_time(72_985).saturating_mul(l.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) + // Proof Size summary in bytes: + // Measured: `10216 + l * (48 ±0)` + // Estimated: `67688` + // Minimum execution time: 29_879_000 picoseconds. + Weight::from_parts(32_953_670, 0) + .saturating_add(Weight::from_parts(0, 67688)) + // Standard Error: 715 + .saturating_add(Weight::from_parts(71_838, 0).saturating_mul(l.into())) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Nis Queues (r:1 w:1) - // Storage: Nis QueueTotals (r:1 w:1) + /// Storage: Nis Queues (r:1 w:1) + /// Proof: Nis Queues (max_values: None, max_size: Some(48022), added: 50497, mode: MaxEncodedLen) + /// Storage: Balances Reserves (r:1 w:1) + /// Proof: Balances Reserves (max_values: None, max_size: Some(1249), added: 3724, mode: MaxEncodedLen) + /// Storage: Nis QueueTotals (r:1 w:1) + /// Proof: Nis QueueTotals (max_values: Some(1), max_size: Some(10002), added: 10497, mode: MaxEncodedLen) fn place_bid_max() -> Weight { - // Minimum execution time: 105_579 nanoseconds. - Weight::from_ref_time(107_541_000) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) + // Proof Size summary in bytes: + // Measured: `58218` + // Estimated: `67688` + // Minimum execution time: 107_169_000 picoseconds. + Weight::from_parts(108_661_000, 0) + .saturating_add(Weight::from_parts(0, 67688)) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Nis Queues (r:1 w:1) - // Storage: Nis QueueTotals (r:1 w:1) + /// Storage: Nis Queues (r:1 w:1) + /// Proof: Nis Queues (max_values: None, max_size: Some(48022), added: 50497, mode: MaxEncodedLen) + /// Storage: Nis QueueTotals (r:1 w:1) + /// Proof: Nis QueueTotals (max_values: Some(1), max_size: Some(10002), added: 10497, mode: MaxEncodedLen) + /// Storage: Balances Reserves (r:1 w:1) + /// Proof: Balances Reserves (max_values: None, max_size: Some(1249), added: 3724, mode: MaxEncodedLen) /// The range of component `l` is `[1, 1000]`. fn retract_bid(l: u32, ) -> Weight { - // Minimum execution time: 42_023 nanoseconds. - Weight::from_ref_time(37_884_296) - // Standard Error: 707 - .saturating_add(Weight::from_ref_time(61_455).saturating_mul(l.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) + // Proof Size summary in bytes: + // Measured: `10216 + l * (48 ±0)` + // Estimated: `67688` + // Minimum execution time: 37_765_000 picoseconds. + Weight::from_parts(34_128_234, 0) + .saturating_add(Weight::from_parts(0, 67688)) + // Standard Error: 714 + .saturating_add(Weight::from_parts(59_820, 0).saturating_mul(l.into())) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Nis Summary (r:1 w:0) - // Storage: System Account (r:1 w:1) + /// Storage: Nis Summary (r:1 w:0) + /// Proof: Nis Summary (max_values: Some(1), max_size: Some(40), added: 535, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn fund_deficit() -> Weight { - // Minimum execution time: 41_848 nanoseconds. - Weight::from_ref_time(42_431_000) + // Proof Size summary in bytes: + // Measured: `225` + // Estimated: `5118` + // Minimum execution time: 34_474_000 picoseconds. + Weight::from_parts(35_247_000, 0) + .saturating_add(Weight::from_parts(0, 5118)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Nis Receipts (r:1 w:1) - // Storage: Nis Summary (r:1 w:1) - // Storage: NisCounterpartBalances Account (r:1 w:1) - // Storage: NisCounterpartBalances TotalIssuance (r:1 w:1) - // Storage: System Account (r:1 w:1) - fn thaw() -> Weight { - // Minimum execution time: 63_268 nanoseconds. - Weight::from_ref_time(64_073_000) + /// Storage: Nis Receipts (r:1 w:1) + /// Proof: Nis Receipts (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + /// Storage: Nis Summary (r:1 w:1) + /// Proof: Nis Summary (max_values: Some(1), max_size: Some(40), added: 535, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:0) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Reserves (r:1 w:1) + /// Proof: Balances Reserves (max_values: None, max_size: Some(1249), added: 3724, mode: MaxEncodedLen) + fn thaw_private() -> Weight { + // Proof Size summary in bytes: + // Measured: `394` + // Estimated: `13378` + // Minimum execution time: 50_476_000 picoseconds. + Weight::from_parts(51_300_000, 0) + .saturating_add(Weight::from_parts(0, 13378)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(3)) + } + /// Storage: Nis Receipts (r:1 w:1) + /// Proof: Nis Receipts (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + /// Storage: Nis Summary (r:1 w:1) + /// Proof: Nis Summary (max_values: Some(1), max_size: Some(40), added: 535, mode: MaxEncodedLen) + /// Storage: NisCounterpartBalances Account (r:1 w:1) + /// Proof: NisCounterpartBalances Account (max_values: None, max_size: Some(112), added: 2587, mode: MaxEncodedLen) + /// Storage: NisCounterpartBalances TotalIssuance (r:1 w:1) + /// Proof: NisCounterpartBalances TotalIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + fn thaw_communal() -> Weight { + // Proof Size summary in bytes: + // Measured: `604` + // Estimated: `13742` + // Minimum execution time: 63_964_000 picoseconds. + Weight::from_parts(64_804_000, 0) + .saturating_add(Weight::from_parts(0, 13742)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: Nis Summary (r:1 w:1) - // Storage: System Account (r:1 w:0) - // Storage: Nis QueueTotals (r:1 w:1) + /// Storage: Nis Receipts (r:1 w:1) + /// Proof: Nis Receipts (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + /// Storage: Nis Summary (r:1 w:1) + /// Proof: Nis Summary (max_values: Some(1), max_size: Some(40), added: 535, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: NisCounterpartBalances Account (r:1 w:1) + /// Proof: NisCounterpartBalances Account (max_values: None, max_size: Some(112), added: 2587, mode: MaxEncodedLen) + /// Storage: NisCounterpartBalances TotalIssuance (r:1 w:1) + /// Proof: NisCounterpartBalances TotalIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Balances Reserves (r:1 w:1) + /// Proof: Balances Reserves (max_values: None, max_size: Some(1249), added: 3724, mode: MaxEncodedLen) + fn privatize() -> Weight { + // Proof Size summary in bytes: + // Measured: `666` + // Estimated: `18456` + // Minimum execution time: 74_135_000 picoseconds. + Weight::from_parts(74_896_000, 0) + .saturating_add(Weight::from_parts(0, 18456)) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().writes(6)) + } + /// Storage: Nis Receipts (r:1 w:1) + /// Proof: Nis Receipts (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + /// Storage: Balances Reserves (r:1 w:1) + /// Proof: Balances Reserves (max_values: None, max_size: Some(1249), added: 3724, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Nis Summary (r:1 w:1) + /// Proof: Nis Summary (max_values: Some(1), max_size: Some(40), added: 535, mode: MaxEncodedLen) + /// Storage: NisCounterpartBalances Account (r:1 w:1) + /// Proof: NisCounterpartBalances Account (max_values: None, max_size: Some(112), added: 2587, mode: MaxEncodedLen) + /// Storage: NisCounterpartBalances TotalIssuance (r:1 w:1) + /// Proof: NisCounterpartBalances TotalIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + fn communify() -> Weight { + // Proof Size summary in bytes: + // Measured: `476` + // Estimated: `18456` + // Minimum execution time: 68_354_000 picoseconds. + Weight::from_parts(68_984_000, 0) + .saturating_add(Weight::from_parts(0, 18456)) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().writes(6)) + } + /// Storage: Nis Summary (r:1 w:1) + /// Proof: Nis Summary (max_values: Some(1), max_size: Some(40), added: 535, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:0) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Nis QueueTotals (r:1 w:1) + /// Proof: Nis QueueTotals (max_values: Some(1), max_size: Some(10002), added: 10497, mode: MaxEncodedLen) fn process_queues() -> Weight { - // Minimum execution time: 36_969 nanoseconds. - Weight::from_ref_time(38_199_000) + // Proof Size summary in bytes: + // Measured: `10658` + // Estimated: `16605` + // Minimum execution time: 24_500_000 picoseconds. + Weight::from_parts(24_920_000, 0) + .saturating_add(Weight::from_parts(0, 16605)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Nis Queues (r:1 w:1) + /// Storage: Nis Queues (r:1 w:1) + /// Proof: Nis Queues (max_values: None, max_size: Some(48022), added: 50497, mode: MaxEncodedLen) fn process_queue() -> Weight { - // Minimum execution time: 4_219 nanoseconds. - Weight::from_ref_time(4_402_000) + // Proof Size summary in bytes: + // Measured: `76` + // Estimated: `51487` + // Minimum execution time: 4_089_000 picoseconds. + Weight::from_parts(4_222_000, 0) + .saturating_add(Weight::from_parts(0, 51487)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: System Account (r:1 w:0) - // Storage: Nis Receipts (r:0 w:1) + /// Storage: Nis Receipts (r:0 w:1) + /// Proof: Nis Receipts (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) fn process_bid() -> Weight { - // Minimum execution time: 13_211 nanoseconds. - Weight::from_ref_time(13_655_000) - .saturating_add(T::DbWeight::get().reads(1)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_020_000 picoseconds. + Weight::from_parts(7_177_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/runtime/kusama/src/weights/pallet_nomination_pools.rs b/runtime/kusama/src/weights/pallet_nomination_pools.rs index 23a5a0a0fe51..5465ec8517fd 100644 --- a/runtime/kusama/src/weights/pallet_nomination_pools.rs +++ b/runtime/kusama/src/weights/pallet_nomination_pools.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_nomination_pools` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,246 +45,538 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_nomination_pools`. pub struct WeightInfo(PhantomData); impl pallet_nomination_pools::WeightInfo for WeightInfo { - // Storage: NominationPools MinJoinBond (r:1 w:0) - // Storage: NominationPools PoolMembers (r:1 w:1) - // Storage: NominationPools BondedPools (r:1 w:1) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: NominationPools RewardPools (r:1 w:1) - // Storage: System Account (r:2 w:1) - // Storage: NominationPools MaxPoolMembersPerPool (r:1 w:0) - // Storage: NominationPools MaxPoolMembers (r:1 w:0) - // Storage: NominationPools CounterForPoolMembers (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: VoterList ListNodes (r:3 w:3) - // Storage: VoterList ListBags (r:2 w:2) + /// Storage: NominationPools MinJoinBond (r:1 w:0) + /// Proof: NominationPools MinJoinBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: NominationPools PoolMembers (r:1 w:1) + /// Proof: NominationPools PoolMembers (max_values: None, max_size: Some(717), added: 3192, mode: MaxEncodedLen) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: NominationPools RewardPools (r:1 w:1) + /// Proof: NominationPools RewardPools (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen) + /// Storage: NominationPools GlobalMaxCommission (r:1 w:0) + /// Proof: NominationPools GlobalMaxCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:2 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: NominationPools MaxPoolMembersPerPool (r:1 w:0) + /// Proof: NominationPools MaxPoolMembersPerPool (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools MaxPoolMembers (r:1 w:0) + /// Proof: NominationPools MaxPoolMembers (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForPoolMembers (r:1 w:1) + /// Proof: NominationPools CounterForPoolMembers (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:3 w:3) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:2 w:2) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn join() -> Weight { - // Minimum execution time: 143_547 nanoseconds. - Weight::from_ref_time(145_024_000) - .saturating_add(T::DbWeight::get().reads(17)) + // Proof Size summary in bytes: + // Measured: `3229` + // Estimated: `52915` + // Minimum execution time: 151_704_000 picoseconds. + Weight::from_parts(152_600_000, 0) + .saturating_add(Weight::from_parts(0, 52915)) + .saturating_add(T::DbWeight::get().reads(18)) .saturating_add(T::DbWeight::get().writes(12)) } - // Storage: NominationPools PoolMembers (r:1 w:1) - // Storage: NominationPools BondedPools (r:1 w:1) - // Storage: NominationPools RewardPools (r:1 w:1) - // Storage: System Account (r:3 w:2) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: VoterList ListNodes (r:3 w:3) - // Storage: VoterList ListBags (r:2 w:2) + /// Storage: NominationPools PoolMembers (r:1 w:1) + /// Proof: NominationPools PoolMembers (max_values: None, max_size: Some(717), added: 3192, mode: MaxEncodedLen) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: NominationPools RewardPools (r:1 w:1) + /// Proof: NominationPools RewardPools (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen) + /// Storage: NominationPools GlobalMaxCommission (r:1 w:0) + /// Proof: NominationPools GlobalMaxCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:3 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:3 w:3) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:2 w:2) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn bond_extra_transfer() -> Weight { - // Minimum execution time: 142_015 nanoseconds. - Weight::from_ref_time(143_485_000) - .saturating_add(T::DbWeight::get().reads(14)) + // Proof Size summary in bytes: + // Measured: `3239` + // Estimated: `49550` + // Minimum execution time: 148_678_000 picoseconds. + Weight::from_parts(149_465_000, 0) + .saturating_add(Weight::from_parts(0, 49550)) + .saturating_add(T::DbWeight::get().reads(15)) .saturating_add(T::DbWeight::get().writes(12)) } - // Storage: NominationPools PoolMembers (r:1 w:1) - // Storage: NominationPools BondedPools (r:1 w:1) - // Storage: NominationPools RewardPools (r:1 w:1) - // Storage: System Account (r:3 w:3) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: VoterList ListNodes (r:2 w:2) - // Storage: VoterList ListBags (r:2 w:2) - fn bond_extra_reward() -> Weight { - // Minimum execution time: 144_390 nanoseconds. - Weight::from_ref_time(145_612_000) - .saturating_add(T::DbWeight::get().reads(13)) - .saturating_add(T::DbWeight::get().writes(12)) + /// Storage: NominationPools ClaimPermissions (r:1 w:0) + /// Proof: NominationPools ClaimPermissions (max_values: None, max_size: Some(41), added: 2516, mode: MaxEncodedLen) + /// Storage: NominationPools PoolMembers (r:1 w:1) + /// Proof: NominationPools PoolMembers (max_values: None, max_size: Some(717), added: 3192, mode: MaxEncodedLen) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: NominationPools RewardPools (r:1 w:1) + /// Proof: NominationPools RewardPools (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen) + /// Storage: NominationPools GlobalMaxCommission (r:1 w:0) + /// Proof: NominationPools GlobalMaxCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:3 w:3) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:3 w:3) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:2 w:2) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + fn bond_extra_other() -> Weight { + // Proof Size summary in bytes: + // Measured: `3304` + // Estimated: `53056` + // Minimum execution time: 167_308_000 picoseconds. + Weight::from_parts(168_397_000, 0) + .saturating_add(Weight::from_parts(0, 53056)) + .saturating_add(T::DbWeight::get().reads(16)) + .saturating_add(T::DbWeight::get().writes(13)) } - // Storage: NominationPools PoolMembers (r:1 w:1) - // Storage: NominationPools BondedPools (r:1 w:1) - // Storage: NominationPools RewardPools (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: NominationPools ClaimPermissions (r:1 w:0) + /// Proof: NominationPools ClaimPermissions (max_values: None, max_size: Some(41), added: 2516, mode: MaxEncodedLen) + /// Storage: NominationPools PoolMembers (r:1 w:1) + /// Proof: NominationPools PoolMembers (max_values: None, max_size: Some(717), added: 3192, mode: MaxEncodedLen) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: NominationPools RewardPools (r:1 w:1) + /// Proof: NominationPools RewardPools (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen) + /// Storage: NominationPools GlobalMaxCommission (r:1 w:0) + /// Proof: NominationPools GlobalMaxCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn claim_payout() -> Weight { - // Minimum execution time: 56_638 nanoseconds. - Weight::from_ref_time(57_158_000) - .saturating_add(T::DbWeight::get().reads(4)) + // Proof Size summary in bytes: + // Measured: `1171` + // Estimated: `20012` + // Minimum execution time: 59_323_000 picoseconds. + Weight::from_parts(60_079_000, 0) + .saturating_add(Weight::from_parts(0, 20012)) + .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: NominationPools PoolMembers (r:1 w:1) - // Storage: NominationPools BondedPools (r:1 w:1) - // Storage: NominationPools RewardPools (r:1 w:1) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: System Account (r:2 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Staking Nominators (r:1 w:0) - // Storage: Staking MinNominatorBond (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) - // Storage: VoterList ListNodes (r:3 w:3) - // Storage: VoterList ListBags (r:2 w:2) - // Storage: NominationPools SubPoolsStorage (r:1 w:1) - // Storage: NominationPools CounterForSubPoolsStorage (r:1 w:1) + /// Storage: NominationPools PoolMembers (r:1 w:1) + /// Proof: NominationPools PoolMembers (max_values: None, max_size: Some(717), added: 3192, mode: MaxEncodedLen) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: NominationPools RewardPools (r:1 w:1) + /// Proof: NominationPools RewardPools (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: NominationPools GlobalMaxCommission (r:1 w:0) + /// Proof: NominationPools GlobalMaxCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:2 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:0) + /// Proof: Staking Nominators (max_values: None, max_size: Some(814), added: 3289, mode: MaxEncodedLen) + /// Storage: Staking MinNominatorBond (r:1 w:0) + /// Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:3 w:3) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:2 w:2) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: NominationPools SubPoolsStorage (r:1 w:1) + /// Proof: NominationPools SubPoolsStorage (max_values: None, max_size: Some(1197), added: 3672, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForSubPoolsStorage (r:1 w:1) + /// Proof: NominationPools CounterForSubPoolsStorage (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn unbond() -> Weight { - // Minimum execution time: 147_898 nanoseconds. - Weight::from_ref_time(148_831_000) - .saturating_add(T::DbWeight::get().reads(18)) + // Proof Size summary in bytes: + // Measured: `3506` + // Estimated: `60367` + // Minimum execution time: 154_517_000 picoseconds. + Weight::from_parts(155_646_000, 0) + .saturating_add(Weight::from_parts(0, 60367)) + .saturating_add(T::DbWeight::get().reads(19)) .saturating_add(T::DbWeight::get().writes(13)) } - // Storage: NominationPools BondedPools (r:1 w:0) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) + /// Storage: NominationPools BondedPools (r:1 w:0) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `s` is `[0, 100]`. fn pool_withdraw_unbonded(s: u32, ) -> Weight { - // Minimum execution time: 57_587 nanoseconds. - Weight::from_ref_time(59_622_292) - // Standard Error: 1_367 - .saturating_add(Weight::from_ref_time(10_795).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `1608` + // Estimated: `18031` + // Minimum execution time: 51_685_000 picoseconds. + Weight::from_parts(53_213_550, 0) + .saturating_add(Weight::from_parts(0, 18031)) + // Standard Error: 701 + .saturating_add(Weight::from_parts(4_700, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: NominationPools PoolMembers (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: NominationPools BondedPools (r:1 w:1) - // Storage: NominationPools SubPoolsStorage (r:1 w:1) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: NominationPools CounterForPoolMembers (r:1 w:1) + /// Storage: NominationPools PoolMembers (r:1 w:1) + /// Proof: NominationPools PoolMembers (max_values: None, max_size: Some(717), added: 3192, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: NominationPools SubPoolsStorage (r:1 w:1) + /// Proof: NominationPools SubPoolsStorage (max_values: None, max_size: Some(1197), added: 3672, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForPoolMembers (r:1 w:1) + /// Proof: NominationPools CounterForPoolMembers (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools ClaimPermissions (r:0 w:1) + /// Proof: NominationPools ClaimPermissions (max_values: None, max_size: Some(41), added: 2516, mode: MaxEncodedLen) /// The range of component `s` is `[0, 100]`. fn withdraw_unbonded_update(s: u32, ) -> Weight { - // Minimum execution time: 98_065 nanoseconds. - Weight::from_ref_time(99_968_288) - // Standard Error: 1_683 - .saturating_add(Weight::from_ref_time(34_131).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `2036` + // Estimated: `31957` + // Minimum execution time: 100_044_000 picoseconds. + Weight::from_parts(101_993_618, 0) + .saturating_add(Weight::from_parts(0, 31957)) + // Standard Error: 1_667 + .saturating_add(Weight::from_parts(9_469, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(9)) - .saturating_add(T::DbWeight::get().writes(7)) + .saturating_add(T::DbWeight::get().writes(8)) } - // Storage: NominationPools PoolMembers (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: NominationPools BondedPools (r:1 w:1) - // Storage: NominationPools SubPoolsStorage (r:1 w:1) - // Storage: Staking Bonded (r:1 w:1) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking SlashingSpans (r:1 w:0) - // Storage: Staking Validators (r:1 w:0) - // Storage: Staking Nominators (r:1 w:0) - // Storage: System Account (r:2 w:2) - // Storage: Balances Locks (r:1 w:1) - // Storage: NominationPools CounterForPoolMembers (r:1 w:1) - // Storage: NominationPools ReversePoolIdLookup (r:1 w:1) - // Storage: NominationPools CounterForReversePoolIdLookup (r:1 w:1) - // Storage: NominationPools RewardPools (r:1 w:1) - // Storage: NominationPools CounterForRewardPools (r:1 w:1) - // Storage: NominationPools CounterForSubPoolsStorage (r:1 w:1) - // Storage: NominationPools Metadata (r:1 w:1) - // Storage: NominationPools CounterForBondedPools (r:1 w:1) - // Storage: Staking Payee (r:0 w:1) + /// Storage: NominationPools PoolMembers (r:1 w:1) + /// Proof: NominationPools PoolMembers (max_values: None, max_size: Some(717), added: 3192, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: NominationPools SubPoolsStorage (r:1 w:1) + /// Proof: NominationPools SubPoolsStorage (max_values: None, max_size: Some(1197), added: 3672, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:1) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking SlashingSpans (r:1 w:0) + /// Proof Skipped: Staking SlashingSpans (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking Validators (r:1 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:0) + /// Proof: Staking Nominators (max_values: None, max_size: Some(814), added: 3289, mode: MaxEncodedLen) + /// Storage: System Account (r:2 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForPoolMembers (r:1 w:1) + /// Proof: NominationPools CounterForPoolMembers (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools ReversePoolIdLookup (r:1 w:1) + /// Proof: NominationPools ReversePoolIdLookup (max_values: None, max_size: Some(44), added: 2519, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForReversePoolIdLookup (r:1 w:1) + /// Proof: NominationPools CounterForReversePoolIdLookup (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools RewardPools (r:1 w:1) + /// Proof: NominationPools RewardPools (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForRewardPools (r:1 w:1) + /// Proof: NominationPools CounterForRewardPools (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForSubPoolsStorage (r:1 w:1) + /// Proof: NominationPools CounterForSubPoolsStorage (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools Metadata (r:1 w:1) + /// Proof: NominationPools Metadata (max_values: None, max_size: Some(270), added: 2745, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForBondedPools (r:1 w:1) + /// Proof: NominationPools CounterForBondedPools (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:0 w:1) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + /// Storage: NominationPools ClaimPermissions (r:0 w:1) + /// Proof: NominationPools ClaimPermissions (max_values: None, max_size: Some(41), added: 2516, mode: MaxEncodedLen) /// The range of component `s` is `[0, 100]`. fn withdraw_unbonded_kill(s: u32, ) -> Weight { - // Minimum execution time: 147_965 nanoseconds. - Weight::from_ref_time(150_852_299) - // Standard Error: 2_753 - .saturating_add(Weight::from_ref_time(3_913).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `2394` + // Estimated: `64965` + // Minimum execution time: 156_926_000 picoseconds. + Weight::from_parts(160_051_616, 0) + .saturating_add(Weight::from_parts(0, 64965)) + // Standard Error: 2_567 + .saturating_add(Weight::from_parts(2_730, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(20)) - .saturating_add(T::DbWeight::get().writes(17)) + .saturating_add(T::DbWeight::get().writes(18)) } - // Storage: NominationPools LastPoolId (r:1 w:1) - // Storage: Staking MinNominatorBond (r:1 w:0) - // Storage: NominationPools MinCreateBond (r:1 w:0) - // Storage: NominationPools MinJoinBond (r:1 w:0) - // Storage: NominationPools MaxPools (r:1 w:0) - // Storage: NominationPools CounterForBondedPools (r:1 w:1) - // Storage: NominationPools PoolMembers (r:1 w:1) - // Storage: NominationPools MaxPoolMembersPerPool (r:1 w:0) - // Storage: NominationPools MaxPoolMembers (r:1 w:0) - // Storage: NominationPools CounterForPoolMembers (r:1 w:1) - // Storage: System Account (r:2 w:2) - // Storage: Staking Bonded (r:1 w:1) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) - // Storage: NominationPools RewardPools (r:1 w:1) - // Storage: NominationPools CounterForRewardPools (r:1 w:1) - // Storage: NominationPools ReversePoolIdLookup (r:1 w:1) - // Storage: NominationPools CounterForReversePoolIdLookup (r:1 w:1) - // Storage: NominationPools BondedPools (r:1 w:1) - // Storage: Staking Payee (r:0 w:1) + /// Storage: NominationPools LastPoolId (r:1 w:1) + /// Proof: NominationPools LastPoolId (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking MinNominatorBond (r:1 w:0) + /// Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: NominationPools MinCreateBond (r:1 w:0) + /// Proof: NominationPools MinCreateBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: NominationPools MinJoinBond (r:1 w:0) + /// Proof: NominationPools MinJoinBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: NominationPools MaxPools (r:1 w:0) + /// Proof: NominationPools MaxPools (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForBondedPools (r:1 w:1) + /// Proof: NominationPools CounterForBondedPools (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools PoolMembers (r:1 w:1) + /// Proof: NominationPools PoolMembers (max_values: None, max_size: Some(717), added: 3192, mode: MaxEncodedLen) + /// Storage: NominationPools MaxPoolMembersPerPool (r:1 w:0) + /// Proof: NominationPools MaxPoolMembersPerPool (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools MaxPoolMembers (r:1 w:0) + /// Proof: NominationPools MaxPoolMembers (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForPoolMembers (r:1 w:1) + /// Proof: NominationPools CounterForPoolMembers (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:2 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:1) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: NominationPools RewardPools (r:1 w:1) + /// Proof: NominationPools RewardPools (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForRewardPools (r:1 w:1) + /// Proof: NominationPools CounterForRewardPools (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools ReversePoolIdLookup (r:1 w:1) + /// Proof: NominationPools ReversePoolIdLookup (max_values: None, max_size: Some(44), added: 2519, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForReversePoolIdLookup (r:1 w:1) + /// Proof: NominationPools CounterForReversePoolIdLookup (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:0 w:1) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) fn create() -> Weight { - // Minimum execution time: 132_292 nanoseconds. - Weight::from_ref_time(133_042_000) + // Proof Size summary in bytes: + // Measured: `1222` + // Estimated: `51890` + // Minimum execution time: 141_512_000 picoseconds. + Weight::from_parts(144_032_000, 0) + .saturating_add(Weight::from_parts(0, 51890)) .saturating_add(T::DbWeight::get().reads(21)) .saturating_add(T::DbWeight::get().writes(15)) } - // Storage: NominationPools BondedPools (r:1 w:0) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:0) - // Storage: Staking MinNominatorBond (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) - // Storage: Staking MaxNominatorsCount (r:1 w:0) - // Storage: Staking Validators (r:2 w:0) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: VoterList ListNodes (r:1 w:1) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) - // Storage: Staking CounterForNominators (r:1 w:1) + /// Storage: NominationPools BondedPools (r:1 w:0) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking MinNominatorBond (r:1 w:0) + /// Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:1) + /// Proof: Staking Nominators (max_values: None, max_size: Some(814), added: 3289, mode: MaxEncodedLen) + /// Storage: Staking MaxNominatorsCount (r:1 w:0) + /// Proof: Staking MaxNominatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:25 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:1 w:1) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking CounterForNominators (r:1 w:1) + /// Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) /// The range of component `n` is `[1, 24]`. fn nominate(n: u32, ) -> Weight { - // Minimum execution time: 64_126 nanoseconds. - Weight::from_ref_time(63_915_647) - // Standard Error: 5_090 - .saturating_add(Weight::from_ref_time(1_101_848).saturating_mul(n.into())) + // Proof Size summary in bytes: + // Measured: `1774` + // Estimated: `34190 + n * (2520 ±0)` + // Minimum execution time: 64_626_000 picoseconds. + Weight::from_parts(65_512_036, 0) + .saturating_add(Weight::from_parts(0, 34190)) + // Standard Error: 5_786 + .saturating_add(Weight::from_parts(1_267_907, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(12)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(5)) + .saturating_add(Weight::from_parts(0, 2520).saturating_mul(n.into())) } - // Storage: NominationPools BondedPools (r:1 w:1) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:0) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) fn set_state() -> Weight { - // Minimum execution time: 39_910 nanoseconds. - Weight::from_ref_time(40_322_000) + // Proof Size summary in bytes: + // Measured: `1363` + // Estimated: `11778` + // Minimum execution time: 35_798_000 picoseconds. + Weight::from_parts(36_332_000, 0) + .saturating_add(Weight::from_parts(0, 11778)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: NominationPools BondedPools (r:1 w:0) - // Storage: NominationPools Metadata (r:1 w:1) - // Storage: NominationPools CounterForMetadata (r:1 w:1) + /// Storage: NominationPools BondedPools (r:1 w:0) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: NominationPools Metadata (r:1 w:1) + /// Proof: NominationPools Metadata (max_values: None, max_size: Some(270), added: 2745, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForMetadata (r:1 w:1) + /// Proof: NominationPools CounterForMetadata (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) /// The range of component `n` is `[1, 256]`. fn set_metadata(n: u32, ) -> Weight { - // Minimum execution time: 15_767 nanoseconds. - Weight::from_ref_time(16_412_468) - // Standard Error: 137 - .saturating_add(Weight::from_ref_time(2_002).saturating_mul(n.into())) + // Proof Size summary in bytes: + // Measured: `531` + // Estimated: `8909` + // Minimum execution time: 14_231_000 picoseconds. + Weight::from_parts(14_847_059, 0) + .saturating_add(Weight::from_parts(0, 8909)) + // Standard Error: 119 + .saturating_add(Weight::from_parts(821, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: NominationPools MinJoinBond (r:0 w:1) - // Storage: NominationPools MaxPoolMembers (r:0 w:1) - // Storage: NominationPools MaxPoolMembersPerPool (r:0 w:1) - // Storage: NominationPools MinCreateBond (r:0 w:1) - // Storage: NominationPools MaxPools (r:0 w:1) + /// Storage: NominationPools MinJoinBond (r:0 w:1) + /// Proof: NominationPools MinJoinBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: NominationPools MaxPoolMembers (r:0 w:1) + /// Proof: NominationPools MaxPoolMembers (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools MaxPoolMembersPerPool (r:0 w:1) + /// Proof: NominationPools MaxPoolMembersPerPool (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools MinCreateBond (r:0 w:1) + /// Proof: NominationPools MinCreateBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: NominationPools GlobalMaxCommission (r:0 w:1) + /// Proof: NominationPools GlobalMaxCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools MaxPools (r:0 w:1) + /// Proof: NominationPools MaxPools (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn set_configs() -> Weight { - // Minimum execution time: 6_483 nanoseconds. - Weight::from_ref_time(6_886_000) - .saturating_add(T::DbWeight::get().writes(5)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 6_309_000 picoseconds. + Weight::from_parts(6_500_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: NominationPools BondedPools (r:1 w:1) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) fn update_roles() -> Weight { - // Minimum execution time: 25_553 nanoseconds. - Weight::from_ref_time(26_137_000) + // Proof Size summary in bytes: + // Measured: `531` + // Estimated: `3685` + // Minimum execution time: 19_545_000 picoseconds. + Weight::from_parts(19_873_000, 0) + .saturating_add(Weight::from_parts(0, 3685)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: NominationPools BondedPools (r:1 w:0) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:0) - // Storage: Staking Validators (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) - // Storage: Staking CounterForNominators (r:1 w:1) - // Storage: VoterList ListNodes (r:1 w:1) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) + /// Storage: NominationPools BondedPools (r:1 w:0) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:1 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:1) + /// Proof: Staking Nominators (max_values: None, max_size: Some(814), added: 3289, mode: MaxEncodedLen) + /// Storage: Staking CounterForNominators (r:1 w:1) + /// Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:1 w:1) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn chill() -> Weight { - // Minimum execution time: 65_005 nanoseconds. - Weight::from_ref_time(65_854_000) + // Proof Size summary in bytes: + // Measured: `1937` + // Estimated: `29711` + // Minimum execution time: 63_108_000 picoseconds. + Weight::from_parts(63_740_000, 0) + .saturating_add(Weight::from_parts(0, 29711)) .saturating_add(T::DbWeight::get().reads(9)) .saturating_add(T::DbWeight::get().writes(5)) } + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: NominationPools RewardPools (r:1 w:1) + /// Proof: NominationPools RewardPools (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen) + /// Storage: NominationPools GlobalMaxCommission (r:1 w:0) + /// Proof: NominationPools GlobalMaxCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:0) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + fn set_commission() -> Weight { + // Proof Size summary in bytes: + // Measured: `770` + // Estimated: `12324` + // Minimum execution time: 31_534_000 picoseconds. + Weight::from_parts(31_923_000, 0) + .saturating_add(Weight::from_parts(0, 12324)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(2)) + } + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + fn set_commission_max() -> Weight { + // Proof Size summary in bytes: + // Measured: `571` + // Estimated: `3685` + // Minimum execution time: 18_914_000 picoseconds. + Weight::from_parts(19_482_000, 0) + .saturating_add(Weight::from_parts(0, 3685)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + fn set_commission_change_rate() -> Weight { + // Proof Size summary in bytes: + // Measured: `531` + // Estimated: `3685` + // Minimum execution time: 19_606_000 picoseconds. + Weight::from_parts(20_215_000, 0) + .saturating_add(Weight::from_parts(0, 3685)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: NominationPools PoolMembers (r:1 w:0) + /// Proof: NominationPools PoolMembers (max_values: None, max_size: Some(717), added: 3192, mode: MaxEncodedLen) + /// Storage: NominationPools ClaimPermissions (r:1 w:1) + /// Proof: NominationPools ClaimPermissions (max_values: None, max_size: Some(41), added: 2516, mode: MaxEncodedLen) + fn set_claim_permission() -> Weight { + // Proof Size summary in bytes: + // Measured: `542` + // Estimated: `7688` + // Minimum execution time: 14_577_000 picoseconds. + Weight::from_parts(15_134_000, 0) + .saturating_add(Weight::from_parts(0, 7688)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: NominationPools BondedPools (r:1 w:0) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: NominationPools RewardPools (r:1 w:1) + /// Proof: NominationPools RewardPools (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen) + /// Storage: NominationPools GlobalMaxCommission (r:1 w:0) + /// Proof: NominationPools GlobalMaxCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + fn claim_commission() -> Weight { + // Proof Size summary in bytes: + // Measured: `968` + // Estimated: `12324` + // Minimum execution time: 46_208_000 picoseconds. + Weight::from_parts(47_514_000, 0) + .saturating_add(Weight::from_parts(0, 12324)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(2)) + } } diff --git a/runtime/kusama/src/weights/pallet_preimage.rs b/runtime/kusama/src/weights/pallet_preimage.rs index 5e60b6b837a9..c7b72da38301 100644 --- a/runtime/kusama/src/weights/pallet_preimage.rs +++ b/runtime/kusama/src/weights/pallet_preimage.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_preimage` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,102 +45,168 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_preimage`. pub struct WeightInfo(PhantomData); impl pallet_preimage::WeightInfo for WeightInfo { - // Storage: Preimage StatusFor (r:1 w:1) - // Storage: Preimage PreimageFor (r:0 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Preimage PreimageFor (r:0 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) /// The range of component `s` is `[0, 4194304]`. fn note_preimage(s: u32, ) -> Weight { - // Minimum execution time: 29_673 nanoseconds. - Weight::from_ref_time(29_855_000) + // Proof Size summary in bytes: + // Measured: `143` + // Estimated: `3556` + // Minimum execution time: 24_877_000 picoseconds. + Weight::from_parts(25_117_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(2_331).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(1_971, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Preimage StatusFor (r:1 w:1) - // Storage: Preimage PreimageFor (r:0 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Preimage PreimageFor (r:0 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) /// The range of component `s` is `[0, 4194304]`. fn note_requested_preimage(s: u32, ) -> Weight { - // Minimum execution time: 20_825 nanoseconds. - Weight::from_ref_time(21_118_000) + // Proof Size summary in bytes: + // Measured: `106` + // Estimated: `3556` + // Minimum execution time: 15_956_000 picoseconds. + Weight::from_parts(16_228_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(2_331).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(1_971, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Preimage StatusFor (r:1 w:1) - // Storage: Preimage PreimageFor (r:0 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Preimage PreimageFor (r:0 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) /// The range of component `s` is `[0, 4194304]`. fn note_no_deposit_preimage(s: u32, ) -> Weight { - // Minimum execution time: 19_288 nanoseconds. - Weight::from_ref_time(19_588_000) + // Proof Size summary in bytes: + // Measured: `106` + // Estimated: `3556` + // Minimum execution time: 15_423_000 picoseconds. + Weight::from_parts(15_623_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(2_328).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(1_971, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Preimage StatusFor (r:1 w:1) - // Storage: Preimage PreimageFor (r:0 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Preimage PreimageFor (r:0 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) fn unnote_preimage() -> Weight { - // Minimum execution time: 40_537 nanoseconds. - Weight::from_ref_time(42_873_000) + // Proof Size summary in bytes: + // Measured: `289` + // Estimated: `3556` + // Minimum execution time: 32_025_000 picoseconds. + Weight::from_parts(33_010_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Preimage StatusFor (r:1 w:1) - // Storage: Preimage PreimageFor (r:0 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Preimage PreimageFor (r:0 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) fn unnote_no_deposit_preimage() -> Weight { - // Minimum execution time: 29_369 nanoseconds. - Weight::from_ref_time(30_548_000) + // Proof Size summary in bytes: + // Measured: `144` + // Estimated: `3556` + // Minimum execution time: 20_745_000 picoseconds. + Weight::from_parts(22_025_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn request_preimage() -> Weight { - // Minimum execution time: 28_536 nanoseconds. - Weight::from_ref_time(29_659_000) + // Proof Size summary in bytes: + // Measured: `188` + // Estimated: `3556` + // Minimum execution time: 18_566_000 picoseconds. + Weight::from_parts(19_645_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn request_no_deposit_preimage() -> Weight { - // Minimum execution time: 15_553 nanoseconds. - Weight::from_ref_time(16_115_000) + // Proof Size summary in bytes: + // Measured: `144` + // Estimated: `3556` + // Minimum execution time: 11_425_000 picoseconds. + Weight::from_parts(11_921_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn request_unnoted_preimage() -> Weight { - // Minimum execution time: 18_213 nanoseconds. - Weight::from_ref_time(18_899_000) + // Proof Size summary in bytes: + // Measured: `42` + // Estimated: `3556` + // Minimum execution time: 12_917_000 picoseconds. + Weight::from_parts(13_742_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn request_requested_preimage() -> Weight { - // Minimum execution time: 8_660 nanoseconds. - Weight::from_ref_time(9_003_000) + // Proof Size summary in bytes: + // Measured: `106` + // Estimated: `3556` + // Minimum execution time: 7_930_000 picoseconds. + Weight::from_parts(8_153_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Preimage StatusFor (r:1 w:1) - // Storage: Preimage PreimageFor (r:0 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Preimage PreimageFor (r:0 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) fn unrequest_preimage() -> Weight { - // Minimum execution time: 28_711 nanoseconds. - Weight::from_ref_time(29_498_000) + // Proof Size summary in bytes: + // Measured: `144` + // Estimated: `3556` + // Minimum execution time: 19_533_000 picoseconds. + Weight::from_parts(20_256_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn unrequest_unnoted_preimage() -> Weight { - // Minimum execution time: 8_514 nanoseconds. - Weight::from_ref_time(9_156_000) + // Proof Size summary in bytes: + // Measured: `106` + // Estimated: `3556` + // Minimum execution time: 7_840_000 picoseconds. + Weight::from_parts(8_014_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn unrequest_multi_referenced_preimage() -> Weight { - // Minimum execution time: 8_710 nanoseconds. - Weight::from_ref_time(8_882_000) + // Proof Size summary in bytes: + // Measured: `106` + // Estimated: `3556` + // Minimum execution time: 7_650_000 picoseconds. + Weight::from_parts(8_032_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/kusama/src/weights/pallet_proxy.rs b/runtime/kusama/src/weights/pallet_proxy.rs index 98c2bc9790e6..82021d6afa87 100644 --- a/runtime/kusama/src/weights/pallet_proxy.rs +++ b/runtime/kusama/src/weights/pallet_proxy.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_proxy` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,119 +45,174 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_proxy`. pub struct WeightInfo(PhantomData); impl pallet_proxy::WeightInfo for WeightInfo { - // Storage: Proxy Proxies (r:1 w:0) + /// Storage: Proxy Proxies (r:1 w:0) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) /// The range of component `p` is `[1, 31]`. fn proxy(p: u32, ) -> Weight { - // Minimum execution time: 20_875 nanoseconds. - Weight::from_ref_time(21_838_757) - // Standard Error: 1_752 - .saturating_add(Weight::from_ref_time(53_895).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `227 + p * (37 ±0)` + // Estimated: `4706` + // Minimum execution time: 15_572_000 picoseconds. + Weight::from_parts(16_351_854, 0) + .saturating_add(Weight::from_parts(0, 4706)) + // Standard Error: 1_347 + .saturating_add(Weight::from_parts(32_817, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) } - // Storage: Proxy Proxies (r:1 w:0) - // Storage: Proxy Announcements (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Proxy Proxies (r:1 w:0) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) + /// Storage: Proxy Announcements (r:1 w:1) + /// Proof: Proxy Announcements (max_values: None, max_size: Some(2233), added: 4708, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn proxy_announced(a: u32, p: u32, ) -> Weight { - // Minimum execution time: 38_838 nanoseconds. - Weight::from_ref_time(39_611_649) - // Standard Error: 3_025 - .saturating_add(Weight::from_ref_time(121_515).saturating_mul(a.into())) - // Standard Error: 3_125 - .saturating_add(Weight::from_ref_time(36_334).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `554 + a * (68 ±0) + p * (37 ±0)` + // Estimated: `13997` + // Minimum execution time: 37_457_000 picoseconds. + Weight::from_parts(38_031_782, 0) + .saturating_add(Weight::from_parts(0, 13997)) + // Standard Error: 2_230 + .saturating_add(Weight::from_parts(131_439, 0).saturating_mul(a.into())) + // Standard Error: 2_304 + .saturating_add(Weight::from_parts(13_344, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Proxy Announcements (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Proxy Announcements (r:1 w:1) + /// Proof: Proxy Announcements (max_values: None, max_size: Some(2233), added: 4708, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. - fn remove_announcement(a: u32, _p: u32, ) -> Weight { - // Minimum execution time: 27_406 nanoseconds. - Weight::from_ref_time(28_708_194) - // Standard Error: 1_921 - .saturating_add(Weight::from_ref_time(111_792).saturating_mul(a.into())) + fn remove_announcement(a: u32, p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `469 + a * (68 ±0)` + // Estimated: `9291` + // Minimum execution time: 20_991_000 picoseconds. + Weight::from_parts(22_051_333, 0) + .saturating_add(Weight::from_parts(0, 9291)) + // Standard Error: 1_299 + .saturating_add(Weight::from_parts(167_423, 0).saturating_mul(a.into())) + // Standard Error: 1_342 + .saturating_add(Weight::from_parts(2_821, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Proxy Announcements (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Proxy Announcements (r:1 w:1) + /// Proof: Proxy Announcements (max_values: None, max_size: Some(2233), added: 4708, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. - fn reject_announcement(a: u32, p: u32, ) -> Weight { - // Minimum execution time: 27_062 nanoseconds. - Weight::from_ref_time(28_563_015) - // Standard Error: 1_659 - .saturating_add(Weight::from_ref_time(113_351).saturating_mul(a.into())) - // Standard Error: 1_714 - .saturating_add(Weight::from_ref_time(1_980).saturating_mul(p.into())) + fn reject_announcement(a: u32, _p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `469 + a * (68 ±0)` + // Estimated: `9291` + // Minimum execution time: 21_151_000 picoseconds. + Weight::from_parts(22_318_114, 0) + .saturating_add(Weight::from_parts(0, 9291)) + // Standard Error: 1_227 + .saturating_add(Weight::from_parts(141_706, 0).saturating_mul(a.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Proxy Proxies (r:1 w:0) - // Storage: Proxy Announcements (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Proxy Proxies (r:1 w:0) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) + /// Storage: Proxy Announcements (r:1 w:1) + /// Proof: Proxy Announcements (max_values: None, max_size: Some(2233), added: 4708, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn announce(a: u32, p: u32, ) -> Weight { - // Minimum execution time: 35_157 nanoseconds. - Weight::from_ref_time(36_604_315) - // Standard Error: 1_726 - .saturating_add(Weight::from_ref_time(116_828).saturating_mul(a.into())) - // Standard Error: 1_784 - .saturating_add(Weight::from_ref_time(20_900).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `486 + a * (68 ±0) + p * (37 ±0)` + // Estimated: `13997` + // Minimum execution time: 29_255_000 picoseconds. + Weight::from_parts(32_863_289, 0) + .saturating_add(Weight::from_parts(0, 13997)) + // Standard Error: 2_687 + .saturating_add(Weight::from_parts(151_159, 0).saturating_mul(a.into())) + // Standard Error: 2_776 + .saturating_add(Weight::from_parts(24_689, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Proxy Proxies (r:1 w:1) + /// Storage: Proxy Proxies (r:1 w:1) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) /// The range of component `p` is `[1, 31]`. fn add_proxy(p: u32, ) -> Weight { - // Minimum execution time: 29_002 nanoseconds. - Weight::from_ref_time(30_575_852) - // Standard Error: 3_808 - .saturating_add(Weight::from_ref_time(72_738).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `227 + p * (37 ±0)` + // Estimated: `4706` + // Minimum execution time: 22_317_000 picoseconds. + Weight::from_parts(23_302_699, 0) + .saturating_add(Weight::from_parts(0, 4706)) + // Standard Error: 1_487 + .saturating_add(Weight::from_parts(44_269, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Proxy Proxies (r:1 w:1) + /// Storage: Proxy Proxies (r:1 w:1) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) /// The range of component `p` is `[1, 31]`. fn remove_proxy(p: u32, ) -> Weight { - // Minimum execution time: 28_573 nanoseconds. - Weight::from_ref_time(30_518_220) - // Standard Error: 2_094 - .saturating_add(Weight::from_ref_time(82_748).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `227 + p * (37 ±0)` + // Estimated: `4706` + // Minimum execution time: 21_653_000 picoseconds. + Weight::from_parts(23_148_802, 0) + .saturating_add(Weight::from_parts(0, 4706)) + // Standard Error: 2_032 + .saturating_add(Weight::from_parts(62_340, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Proxy Proxies (r:1 w:1) + /// Storage: Proxy Proxies (r:1 w:1) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) /// The range of component `p` is `[1, 31]`. fn remove_proxies(p: u32, ) -> Weight { - // Minimum execution time: 24_806 nanoseconds. - Weight::from_ref_time(26_467_137) - // Standard Error: 1_847 - .saturating_add(Weight::from_ref_time(50_597).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `227 + p * (37 ±0)` + // Estimated: `4706` + // Minimum execution time: 17_749_000 picoseconds. + Weight::from_parts(18_674_923, 0) + .saturating_add(Weight::from_parts(0, 4706)) + // Standard Error: 2_450 + .saturating_add(Weight::from_parts(26_630, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) - // Storage: Proxy Proxies (r:1 w:1) + /// Storage: Proxy Proxies (r:1 w:1) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) /// The range of component `p` is `[1, 31]`. fn create_pure(p: u32, ) -> Weight { - // Minimum execution time: 32_043 nanoseconds. - Weight::from_ref_time(33_493_950) - // Standard Error: 1_834 - .saturating_add(Weight::from_ref_time(28_149).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(2)) + // Proof Size summary in bytes: + // Measured: `239` + // Estimated: `4706` + // Minimum execution time: 24_229_000 picoseconds. + Weight::from_parts(25_116_004, 0) + .saturating_add(Weight::from_parts(0, 4706)) + // Standard Error: 1_528 + .saturating_add(Weight::from_parts(8_119, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Proxy Proxies (r:1 w:1) + /// Storage: Proxy Proxies (r:1 w:1) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) /// The range of component `p` is `[0, 30]`. fn kill_pure(p: u32, ) -> Weight { - // Minimum execution time: 26_446 nanoseconds. - Weight::from_ref_time(27_736_383) - // Standard Error: 1_891 - .saturating_add(Weight::from_ref_time(47_499).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `264 + p * (37 ±0)` + // Estimated: `4706` + // Minimum execution time: 18_787_000 picoseconds. + Weight::from_parts(19_605_766, 0) + .saturating_add(Weight::from_parts(0, 4706)) + // Standard Error: 1_159 + .saturating_add(Weight::from_parts(30_136, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/kusama/src/weights/pallet_ranked_collective.rs b/runtime/kusama/src/weights/pallet_ranked_collective.rs index 6ba001f2b4c5..875457dd9ec0 100644 --- a/runtime/kusama/src/weights/pallet_ranked_collective.rs +++ b/runtime/kusama/src/weights/pallet_ranked_collective.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_ranked_collective` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,77 +45,127 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_ranked_collective`. pub struct WeightInfo(PhantomData); impl pallet_ranked_collective::WeightInfo for WeightInfo { - // Storage: FellowshipCollective Members (r:1 w:1) - // Storage: FellowshipCollective MemberCount (r:1 w:1) - // Storage: FellowshipCollective IndexToId (r:0 w:1) - // Storage: FellowshipCollective IdToIndex (r:0 w:1) + /// Storage: FellowshipCollective Members (r:1 w:1) + /// Proof: FellowshipCollective Members (max_values: None, max_size: Some(42), added: 2517, mode: MaxEncodedLen) + /// Storage: FellowshipCollective MemberCount (r:1 w:1) + /// Proof: FellowshipCollective MemberCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: FellowshipCollective IndexToId (r:0 w:1) + /// Proof: FellowshipCollective IndexToId (max_values: None, max_size: Some(54), added: 2529, mode: MaxEncodedLen) + /// Storage: FellowshipCollective IdToIndex (r:0 w:1) + /// Proof: FellowshipCollective IdToIndex (max_values: None, max_size: Some(54), added: 2529, mode: MaxEncodedLen) fn add_member() -> Weight { - // Minimum execution time: 20_783 nanoseconds. - Weight::from_ref_time(21_534_000) + // Proof Size summary in bytes: + // Measured: `76` + // Estimated: `6986` + // Minimum execution time: 17_330_000 picoseconds. + Weight::from_parts(18_056_000, 0) + .saturating_add(Weight::from_parts(0, 6986)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: FellowshipCollective Members (r:1 w:1) - // Storage: FellowshipCollective MemberCount (r:1 w:1) - // Storage: FellowshipCollective IdToIndex (r:1 w:1) - // Storage: FellowshipCollective IndexToId (r:1 w:1) + /// Storage: FellowshipCollective Members (r:1 w:1) + /// Proof: FellowshipCollective Members (max_values: None, max_size: Some(42), added: 2517, mode: MaxEncodedLen) + /// Storage: FellowshipCollective MemberCount (r:11 w:11) + /// Proof: FellowshipCollective MemberCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: FellowshipCollective IdToIndex (r:11 w:11) + /// Proof: FellowshipCollective IdToIndex (max_values: None, max_size: Some(54), added: 2529, mode: MaxEncodedLen) + /// Storage: FellowshipCollective IndexToId (r:11 w:11) + /// Proof: FellowshipCollective IndexToId (max_values: None, max_size: Some(54), added: 2529, mode: MaxEncodedLen) /// The range of component `r` is `[0, 10]`. fn remove_member(r: u32, ) -> Weight { - // Minimum execution time: 32_177 nanoseconds. - Weight::from_ref_time(34_744_578) - // Standard Error: 21_214 - .saturating_add(Weight::from_ref_time(10_025_635).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `550 + r * (281 ±0)` + // Estimated: `14024 + r * (7547 ±0)` + // Minimum execution time: 27_803_000 picoseconds. + Weight::from_parts(32_948_051, 0) + .saturating_add(Weight::from_parts(0, 14024)) + // Standard Error: 34_857 + .saturating_add(Weight::from_parts(11_563_940, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(r.into()))) .saturating_add(T::DbWeight::get().writes(4)) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(r.into()))) + .saturating_add(Weight::from_parts(0, 7547).saturating_mul(r.into())) } - // Storage: FellowshipCollective Members (r:1 w:1) - // Storage: FellowshipCollective MemberCount (r:1 w:1) - // Storage: FellowshipCollective IndexToId (r:0 w:1) - // Storage: FellowshipCollective IdToIndex (r:0 w:1) + /// Storage: FellowshipCollective Members (r:1 w:1) + /// Proof: FellowshipCollective Members (max_values: None, max_size: Some(42), added: 2517, mode: MaxEncodedLen) + /// Storage: FellowshipCollective MemberCount (r:1 w:1) + /// Proof: FellowshipCollective MemberCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: FellowshipCollective IndexToId (r:0 w:1) + /// Proof: FellowshipCollective IndexToId (max_values: None, max_size: Some(54), added: 2529, mode: MaxEncodedLen) + /// Storage: FellowshipCollective IdToIndex (r:0 w:1) + /// Proof: FellowshipCollective IdToIndex (max_values: None, max_size: Some(54), added: 2529, mode: MaxEncodedLen) /// The range of component `r` is `[0, 10]`. fn promote_member(r: u32, ) -> Weight { - // Minimum execution time: 23_280 nanoseconds. - Weight::from_ref_time(24_473_719) - // Standard Error: 5_281 - .saturating_add(Weight::from_ref_time(464_452).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `248 + r * (17 ±0)` + // Estimated: `6986` + // Minimum execution time: 19_310_000 picoseconds. + Weight::from_parts(20_134_066, 0) + .saturating_add(Weight::from_parts(0, 6986)) + // Standard Error: 3_943 + .saturating_add(Weight::from_parts(316_477, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: FellowshipCollective Members (r:1 w:1) - // Storage: FellowshipCollective MemberCount (r:1 w:1) - // Storage: FellowshipCollective IdToIndex (r:1 w:1) - // Storage: FellowshipCollective IndexToId (r:1 w:1) + /// Storage: FellowshipCollective Members (r:1 w:1) + /// Proof: FellowshipCollective Members (max_values: None, max_size: Some(42), added: 2517, mode: MaxEncodedLen) + /// Storage: FellowshipCollective MemberCount (r:1 w:1) + /// Proof: FellowshipCollective MemberCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: FellowshipCollective IdToIndex (r:1 w:1) + /// Proof: FellowshipCollective IdToIndex (max_values: None, max_size: Some(54), added: 2529, mode: MaxEncodedLen) + /// Storage: FellowshipCollective IndexToId (r:1 w:1) + /// Proof: FellowshipCollective IndexToId (max_values: None, max_size: Some(54), added: 2529, mode: MaxEncodedLen) /// The range of component `r` is `[0, 10]`. fn demote_member(r: u32, ) -> Weight { - // Minimum execution time: 32_351 nanoseconds. - Weight::from_ref_time(34_734_099) - // Standard Error: 15_729 - .saturating_add(Weight::from_ref_time(644_092).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `566 + r * (72 ±0)` + // Estimated: `14024` + // Minimum execution time: 27_232_000 picoseconds. + Weight::from_parts(31_561_050, 0) + .saturating_add(Weight::from_parts(0, 14024)) + // Standard Error: 26_545 + .saturating_add(Weight::from_parts(771_800, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: FellowshipCollective Members (r:1 w:0) - // Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) - // Storage: FellowshipCollective Voting (r:1 w:1) - // Storage: Scheduler Agenda (r:2 w:2) + /// Storage: FellowshipCollective Members (r:1 w:0) + /// Proof: FellowshipCollective Members (max_values: None, max_size: Some(42), added: 2517, mode: MaxEncodedLen) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) + /// Storage: FellowshipCollective Voting (r:1 w:1) + /// Proof: FellowshipCollective Voting (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:2 w:2) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn vote() -> Weight { - // Minimum execution time: 47_216 nanoseconds. - Weight::from_ref_time(47_698_000) + // Proof Size summary in bytes: + // Measured: `672` + // Estimated: `95268` + // Minimum execution time: 51_056_000 picoseconds. + Weight::from_parts(51_866_000, 0) + .saturating_add(Weight::from_parts(0, 95268)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:0) - // Storage: FellowshipCollective VotingCleanup (r:1 w:0) - // Storage: FellowshipCollective Voting (r:0 w:2) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:0) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) + /// Storage: FellowshipCollective VotingCleanup (r:1 w:0) + /// Proof: FellowshipCollective VotingCleanup (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) + /// Storage: FellowshipCollective Voting (r:100 w:100) + /// Proof: FellowshipCollective Voting (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) /// The range of component `n` is `[0, 100]`. fn cleanup_poll(n: u32, ) -> Weight { - // Minimum execution time: 15_139 nanoseconds. - Weight::from_ref_time(19_621_273) - // Standard Error: 2_430 - .saturating_add(Weight::from_ref_time(906_348).saturating_mul(n.into())) + // Proof Size summary in bytes: + // Measured: `468 + n * (50 ±0)` + // Estimated: `8934 + n * (2540 ±0)` + // Minimum execution time: 14_635_000 picoseconds. + Weight::from_parts(18_272_905, 0) + .saturating_add(Weight::from_parts(0, 8934)) + // Standard Error: 1_276 + .saturating_add(Weight::from_parts(935_824, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into()))) + .saturating_add(Weight::from_parts(0, 2540).saturating_mul(n.into())) } } diff --git a/runtime/kusama/src/weights/pallet_referenda_fellowship_referenda.rs b/runtime/kusama/src/weights/pallet_referenda_fellowship_referenda.rs index 82ae8e450520..afffafaa3598 100644 --- a/runtime/kusama/src/weights/pallet_referenda_fellowship_referenda.rs +++ b/runtime/kusama/src/weights/pallet_referenda_fellowship_referenda.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_referenda` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,253 +45,478 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_referenda`. pub struct WeightInfo(PhantomData); impl pallet_referenda::WeightInfo for WeightInfo { - // Storage: FellowshipCollective Members (r:1 w:0) - // Storage: FellowshipReferenda ReferendumCount (r:1 w:1) - // Storage: Scheduler Agenda (r:1 w:1) - // Storage: FellowshipReferenda ReferendumInfoFor (r:0 w:1) + /// Storage: FellowshipCollective Members (r:1 w:0) + /// Proof: FellowshipCollective Members (max_values: None, max_size: Some(42), added: 2517, mode: MaxEncodedLen) + /// Storage: FellowshipReferenda ReferendumCount (r:1 w:1) + /// Proof: FellowshipReferenda ReferendumCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:0 w:1) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) fn submit() -> Weight { - // Minimum execution time: 32_920 nanoseconds. - Weight::from_ref_time(33_284_000) + // Proof Size summary in bytes: + // Measured: `361` + // Estimated: `47424` + // Minimum execution time: 30_081_000 picoseconds. + Weight::from_parts(30_508_000, 0) + .saturating_add(Weight::from_parts(0, 47424)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) - // Storage: Scheduler Agenda (r:2 w:2) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:2 w:2) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn place_decision_deposit_preparing() -> Weight { - // Minimum execution time: 49_609 nanoseconds. - Weight::from_ref_time(50_258_000) + // Proof Size summary in bytes: + // Measured: `438` + // Estimated: `88231` + // Minimum execution time: 49_779_000 picoseconds. + Weight::from_parts(50_298_000, 0) + .saturating_add(Weight::from_parts(0, 88231)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) - // Storage: FellowshipReferenda DecidingCount (r:1 w:0) - // Storage: FellowshipReferenda TrackQueue (r:1 w:1) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) + /// Storage: FellowshipReferenda DecidingCount (r:1 w:0) + /// Proof: FellowshipReferenda DecidingCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: FellowshipReferenda TrackQueue (r:1 w:1) + /// Proof: FellowshipReferenda TrackQueue (max_values: None, max_size: Some(812), added: 3287, mode: MaxEncodedLen) fn place_decision_deposit_queued() -> Weight { - // Minimum execution time: 86_531 nanoseconds. - Weight::from_ref_time(89_289_000) + // Proof Size summary in bytes: + // Measured: `1879` + // Estimated: `12121` + // Minimum execution time: 64_167_000 picoseconds. + Weight::from_parts(66_457_000, 0) + .saturating_add(Weight::from_parts(0, 12121)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) - // Storage: FellowshipReferenda DecidingCount (r:1 w:0) - // Storage: FellowshipReferenda TrackQueue (r:1 w:1) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) + /// Storage: FellowshipReferenda DecidingCount (r:1 w:0) + /// Proof: FellowshipReferenda DecidingCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: FellowshipReferenda TrackQueue (r:1 w:1) + /// Proof: FellowshipReferenda TrackQueue (max_values: None, max_size: Some(812), added: 3287, mode: MaxEncodedLen) fn place_decision_deposit_not_queued() -> Weight { - // Minimum execution time: 84_542 nanoseconds. - Weight::from_ref_time(88_503_000) + // Proof Size summary in bytes: + // Measured: `1920` + // Estimated: `12121` + // Minimum execution time: 64_004_000 picoseconds. + Weight::from_parts(66_024_000, 0) + .saturating_add(Weight::from_parts(0, 12121)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) - // Storage: FellowshipReferenda DecidingCount (r:1 w:1) - // Storage: FellowshipCollective MemberCount (r:1 w:0) - // Storage: Scheduler Agenda (r:2 w:2) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) + /// Storage: FellowshipReferenda DecidingCount (r:1 w:1) + /// Proof: FellowshipReferenda DecidingCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: FellowshipCollective MemberCount (r:1 w:0) + /// Proof: FellowshipCollective MemberCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:2 w:2) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn place_decision_deposit_passing() -> Weight { - // Minimum execution time: 187_769 nanoseconds. - Weight::from_ref_time(197_368_000) + // Proof Size summary in bytes: + // Measured: `808` + // Estimated: `95189` + // Minimum execution time: 121_186_000 picoseconds. + Weight::from_parts(128_218_000, 0) + .saturating_add(Weight::from_parts(0, 95189)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) - // Storage: FellowshipReferenda DecidingCount (r:1 w:1) - // Storage: FellowshipCollective MemberCount (r:1 w:0) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) + /// Storage: FellowshipReferenda DecidingCount (r:1 w:1) + /// Proof: FellowshipReferenda DecidingCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: FellowshipCollective MemberCount (r:1 w:0) + /// Proof: FellowshipCollective MemberCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) fn place_decision_deposit_failing() -> Weight { - // Minimum execution time: 44_940 nanoseconds. - Weight::from_ref_time(45_509_000) + // Proof Size summary in bytes: + // Measured: `580` + // Estimated: `11323` + // Minimum execution time: 41_770_000 picoseconds. + Weight::from_parts(42_309_000, 0) + .saturating_add(Weight::from_parts(0, 11323)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) fn refund_decision_deposit() -> Weight { - // Minimum execution time: 32_474 nanoseconds. - Weight::from_ref_time(33_307_000) + // Proof Size summary in bytes: + // Measured: `351` + // Estimated: `4365` + // Minimum execution time: 26_740_000 picoseconds. + Weight::from_parts(27_508_000, 0) + .saturating_add(Weight::from_parts(0, 4365)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) fn refund_submission_deposit() -> Weight { - // Minimum execution time: 21_301 nanoseconds. - Weight::from_ref_time(21_708_000) + // Proof Size summary in bytes: + // Measured: `201` + // Estimated: `4365` + // Minimum execution time: 15_428_000 picoseconds. + Weight::from_parts(15_672_000, 0) + .saturating_add(Weight::from_parts(0, 4365)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) - // Storage: Scheduler Agenda (r:2 w:2) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:2 w:2) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn cancel() -> Weight { - // Minimum execution time: 39_139 nanoseconds. - Weight::from_ref_time(39_763_000) + // Proof Size summary in bytes: + // Measured: `383` + // Estimated: `88231` + // Minimum execution time: 38_278_000 picoseconds. + Weight::from_parts(38_779_000, 0) + .saturating_add(Weight::from_parts(0, 88231)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) - // Storage: Scheduler Agenda (r:2 w:2) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:2 w:2) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) + /// Storage: FellowshipReferenda MetadataOf (r:1 w:0) + /// Proof: FellowshipReferenda MetadataOf (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) fn kill() -> Weight { - // Minimum execution time: 69_562 nanoseconds. - Weight::from_ref_time(70_414_000) - .saturating_add(T::DbWeight::get().reads(3)) + // Proof Size summary in bytes: + // Measured: `484` + // Estimated: `91748` + // Minimum execution time: 70_052_000 picoseconds. + Weight::from_parts(71_709_000, 0) + .saturating_add(Weight::from_parts(0, 91748)) + .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: FellowshipReferenda TrackQueue (r:1 w:0) - // Storage: FellowshipReferenda DecidingCount (r:1 w:1) + /// Storage: FellowshipReferenda TrackQueue (r:1 w:0) + /// Proof: FellowshipReferenda TrackQueue (max_values: None, max_size: Some(812), added: 3287, mode: MaxEncodedLen) + /// Storage: FellowshipReferenda DecidingCount (r:1 w:1) + /// Proof: FellowshipReferenda DecidingCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) fn one_fewer_deciding_queue_empty() -> Weight { - // Minimum execution time: 11_930 nanoseconds. - Weight::from_ref_time(12_215_000) + // Proof Size summary in bytes: + // Measured: `174` + // Estimated: `7756` + // Minimum execution time: 10_103_000 picoseconds. + Weight::from_parts(10_288_000, 0) + .saturating_add(Weight::from_parts(0, 7756)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: FellowshipReferenda TrackQueue (r:1 w:1) - // Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) - // Storage: FellowshipCollective MemberCount (r:1 w:0) - // Storage: Scheduler Agenda (r:2 w:2) + /// Storage: FellowshipReferenda TrackQueue (r:1 w:1) + /// Proof: FellowshipReferenda TrackQueue (max_values: None, max_size: Some(812), added: 3287, mode: MaxEncodedLen) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) + /// Storage: FellowshipCollective MemberCount (r:1 w:0) + /// Proof: FellowshipCollective MemberCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:2 w:2) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn one_fewer_deciding_failing() -> Weight { - // Minimum execution time: 119_239 nanoseconds. - Weight::from_ref_time(122_514_000) + // Proof Size summary in bytes: + // Measured: `3052` + // Estimated: `95987` + // Minimum execution time: 134_978_000 picoseconds. + Weight::from_parts(137_992_000, 0) + .saturating_add(Weight::from_parts(0, 95987)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: FellowshipReferenda TrackQueue (r:1 w:1) - // Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) - // Storage: FellowshipCollective MemberCount (r:1 w:0) - // Storage: Scheduler Agenda (r:2 w:2) + /// Storage: FellowshipReferenda TrackQueue (r:1 w:1) + /// Proof: FellowshipReferenda TrackQueue (max_values: None, max_size: Some(812), added: 3287, mode: MaxEncodedLen) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) + /// Storage: FellowshipCollective MemberCount (r:1 w:0) + /// Proof: FellowshipCollective MemberCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:2 w:2) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn one_fewer_deciding_passing() -> Weight { - // Minimum execution time: 121_229 nanoseconds. - Weight::from_ref_time(124_603_000) + // Proof Size summary in bytes: + // Measured: `3052` + // Estimated: `95987` + // Minimum execution time: 136_814_000 picoseconds. + Weight::from_parts(139_254_000, 0) + .saturating_add(Weight::from_parts(0, 95987)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) - // Storage: FellowshipReferenda TrackQueue (r:1 w:1) - // Storage: Scheduler Agenda (r:1 w:0) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) + /// Storage: FellowshipReferenda TrackQueue (r:1 w:1) + /// Proof: FellowshipReferenda TrackQueue (max_values: None, max_size: Some(812), added: 3287, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:0) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn nudge_referendum_requeued_insertion() -> Weight { - // Minimum execution time: 85_568 nanoseconds. - Weight::from_ref_time(89_360_000) + // Proof Size summary in bytes: + // Measured: `2695` + // Estimated: `51070` + // Minimum execution time: 72_954_000 picoseconds. + Weight::from_parts(75_645_000, 0) + .saturating_add(Weight::from_parts(0, 51070)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) - // Storage: FellowshipReferenda TrackQueue (r:1 w:1) - // Storage: Scheduler Agenda (r:1 w:0) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) + /// Storage: FellowshipReferenda TrackQueue (r:1 w:1) + /// Proof: FellowshipReferenda TrackQueue (max_values: None, max_size: Some(812), added: 3287, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:0) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn nudge_referendum_requeued_slide() -> Weight { - // Minimum execution time: 85_888 nanoseconds. - Weight::from_ref_time(88_278_000) + // Proof Size summary in bytes: + // Measured: `2662` + // Estimated: `51070` + // Minimum execution time: 72_505_000 picoseconds. + Weight::from_parts(74_867_000, 0) + .saturating_add(Weight::from_parts(0, 51070)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) - // Storage: FellowshipReferenda DecidingCount (r:1 w:0) - // Storage: FellowshipReferenda TrackQueue (r:1 w:1) - // Storage: Scheduler Agenda (r:1 w:0) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) + /// Storage: FellowshipReferenda DecidingCount (r:1 w:0) + /// Proof: FellowshipReferenda DecidingCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: FellowshipReferenda TrackQueue (r:1 w:1) + /// Proof: FellowshipReferenda TrackQueue (max_values: None, max_size: Some(812), added: 3287, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:0) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn nudge_referendum_queued() -> Weight { - // Minimum execution time: 87_650 nanoseconds. - Weight::from_ref_time(91_112_000) + // Proof Size summary in bytes: + // Measured: `2678` + // Estimated: `54549` + // Minimum execution time: 76_277_000 picoseconds. + Weight::from_parts(77_687_000, 0) + .saturating_add(Weight::from_parts(0, 54549)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) - // Storage: FellowshipReferenda DecidingCount (r:1 w:0) - // Storage: FellowshipReferenda TrackQueue (r:1 w:1) - // Storage: Scheduler Agenda (r:1 w:0) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) + /// Storage: FellowshipReferenda DecidingCount (r:1 w:0) + /// Proof: FellowshipReferenda DecidingCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: FellowshipReferenda TrackQueue (r:1 w:1) + /// Proof: FellowshipReferenda TrackQueue (max_values: None, max_size: Some(812), added: 3287, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:0) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn nudge_referendum_not_queued() -> Weight { - // Minimum execution time: 88_830 nanoseconds. - Weight::from_ref_time(91_640_000) + // Proof Size summary in bytes: + // Measured: `2719` + // Estimated: `54549` + // Minimum execution time: 76_078_000 picoseconds. + Weight::from_parts(78_067_000, 0) + .saturating_add(Weight::from_parts(0, 54549)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn nudge_referendum_no_deposit() -> Weight { - // Minimum execution time: 29_867 nanoseconds. - Weight::from_ref_time(30_807_000) + // Proof Size summary in bytes: + // Measured: `335` + // Estimated: `46793` + // Minimum execution time: 26_265_000 picoseconds. + Weight::from_parts(26_673_000, 0) + .saturating_add(Weight::from_parts(0, 46793)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn nudge_referendum_preparing() -> Weight { - // Minimum execution time: 31_137 nanoseconds. - Weight::from_ref_time(31_567_000) + // Proof Size summary in bytes: + // Measured: `383` + // Estimated: `46793` + // Minimum execution time: 26_405_000 picoseconds. + Weight::from_parts(26_889_000, 0) + .saturating_add(Weight::from_parts(0, 46793)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) fn nudge_referendum_timed_out() -> Weight { - // Minimum execution time: 23_001 nanoseconds. - Weight::from_ref_time(23_825_000) + // Proof Size summary in bytes: + // Measured: `242` + // Estimated: `4365` + // Minimum execution time: 17_372_000 picoseconds. + Weight::from_parts(17_889_000, 0) + .saturating_add(Weight::from_parts(0, 4365)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) - // Storage: FellowshipReferenda DecidingCount (r:1 w:1) - // Storage: FellowshipCollective MemberCount (r:1 w:0) - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) + /// Storage: FellowshipReferenda DecidingCount (r:1 w:1) + /// Proof: FellowshipReferenda DecidingCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: FellowshipCollective MemberCount (r:1 w:0) + /// Proof: FellowshipCollective MemberCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn nudge_referendum_begin_deciding_failing() -> Weight { - // Minimum execution time: 42_509 nanoseconds. - Weight::from_ref_time(42_964_000) + // Proof Size summary in bytes: + // Measured: `618` + // Estimated: `53751` + // Minimum execution time: 38_271_000 picoseconds. + Weight::from_parts(38_831_000, 0) + .saturating_add(Weight::from_parts(0, 53751)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) - // Storage: FellowshipReferenda DecidingCount (r:1 w:1) - // Storage: FellowshipCollective MemberCount (r:1 w:0) - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) + /// Storage: FellowshipReferenda DecidingCount (r:1 w:1) + /// Proof: FellowshipReferenda DecidingCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: FellowshipCollective MemberCount (r:1 w:0) + /// Proof: FellowshipCollective MemberCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn nudge_referendum_begin_deciding_passing() -> Weight { - // Minimum execution time: 86_839 nanoseconds. - Weight::from_ref_time(89_589_000) + // Proof Size summary in bytes: + // Measured: `753` + // Estimated: `53751` + // Minimum execution time: 64_433_000 picoseconds. + Weight::from_parts(66_200_000, 0) + .saturating_add(Weight::from_parts(0, 53751)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) - // Storage: FellowshipCollective MemberCount (r:1 w:0) - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) + /// Storage: FellowshipCollective MemberCount (r:1 w:0) + /// Proof: FellowshipCollective MemberCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn nudge_referendum_begin_confirming() -> Weight { - // Minimum execution time: 153_039 nanoseconds. - Weight::from_ref_time(167_549_000) + // Proof Size summary in bytes: + // Measured: `804` + // Estimated: `50272` + // Minimum execution time: 88_210_000 picoseconds. + Weight::from_parts(92_275_000, 0) + .saturating_add(Weight::from_parts(0, 50272)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) - // Storage: FellowshipCollective MemberCount (r:1 w:0) - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) + /// Storage: FellowshipCollective MemberCount (r:1 w:0) + /// Proof: FellowshipCollective MemberCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn nudge_referendum_end_confirming() -> Weight { - // Minimum execution time: 150_316 nanoseconds. - Weight::from_ref_time(169_539_000) + // Proof Size summary in bytes: + // Measured: `789` + // Estimated: `50272` + // Minimum execution time: 89_249_000 picoseconds. + Weight::from_parts(93_124_000, 0) + .saturating_add(Weight::from_parts(0, 50272)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) - // Storage: FellowshipCollective MemberCount (r:1 w:0) - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) + /// Storage: FellowshipCollective MemberCount (r:1 w:0) + /// Proof: FellowshipCollective MemberCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn nudge_referendum_continue_not_confirming() -> Weight { - // Minimum execution time: 159_327 nanoseconds. - Weight::from_ref_time(165_221_000) + // Proof Size summary in bytes: + // Measured: `804` + // Estimated: `50272` + // Minimum execution time: 83_355_000 picoseconds. + Weight::from_parts(89_702_000, 0) + .saturating_add(Weight::from_parts(0, 50272)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) - // Storage: FellowshipCollective MemberCount (r:1 w:0) - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) + /// Storage: FellowshipCollective MemberCount (r:1 w:0) + /// Proof: FellowshipCollective MemberCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn nudge_referendum_continue_confirming() -> Weight { - // Minimum execution time: 80_839 nanoseconds. - Weight::from_ref_time(84_645_000) + // Proof Size summary in bytes: + // Measured: `810` + // Estimated: `50272` + // Minimum execution time: 58_227_000 picoseconds. + Weight::from_parts(59_994_000, 0) + .saturating_add(Weight::from_parts(0, 50272)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) - // Storage: FellowshipCollective MemberCount (r:1 w:0) - // Storage: Scheduler Agenda (r:2 w:2) - // Storage: Scheduler Lookup (r:1 w:1) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) + /// Storage: FellowshipCollective MemberCount (r:1 w:0) + /// Proof: FellowshipCollective MemberCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:2 w:2) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) + /// Storage: Scheduler Lookup (r:1 w:1) + /// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) fn nudge_referendum_approved() -> Weight { - // Minimum execution time: 159_227 nanoseconds. - Weight::from_ref_time(181_444_000) + // Proof Size summary in bytes: + // Measured: `810` + // Estimated: `95223` + // Minimum execution time: 104_526_000 picoseconds. + Weight::from_parts(110_892_000, 0) + .saturating_add(Weight::from_parts(0, 95223)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) - // Storage: FellowshipCollective MemberCount (r:1 w:0) - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:1) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) + /// Storage: FellowshipCollective MemberCount (r:1 w:0) + /// Proof: FellowshipCollective MemberCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn nudge_referendum_rejected() -> Weight { - // Minimum execution time: 163_023 nanoseconds. - Weight::from_ref_time(171_393_000) + // Proof Size summary in bytes: + // Measured: `806` + // Estimated: `50272` + // Minimum execution time: 75_050_000 picoseconds. + Weight::from_parts(91_115_000, 0) + .saturating_add(Weight::from_parts(0, 50272)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:0) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) + /// Storage: Preimage StatusFor (r:1 w:0) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: FellowshipReferenda MetadataOf (r:0 w:1) + /// Proof: FellowshipReferenda MetadataOf (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) + fn set_some_metadata() -> Weight { + // Proof Size summary in bytes: + // Measured: `386` + // Estimated: `7921` + // Minimum execution time: 20_846_000 picoseconds. + Weight::from_parts(21_275_000, 0) + .saturating_add(Weight::from_parts(0, 7921)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: FellowshipReferenda ReferendumInfoFor (r:1 w:0) + /// Proof: FellowshipReferenda ReferendumInfoFor (max_values: None, max_size: Some(900), added: 3375, mode: MaxEncodedLen) + /// Storage: FellowshipReferenda MetadataOf (r:1 w:1) + /// Proof: FellowshipReferenda MetadataOf (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) + fn clear_metadata() -> Weight { + // Proof Size summary in bytes: + // Measured: `319` + // Estimated: `7882` + // Minimum execution time: 18_521_000 picoseconds. + Weight::from_parts(18_978_000, 0) + .saturating_add(Weight::from_parts(0, 7882)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } } diff --git a/runtime/kusama/src/weights/pallet_referenda_referenda.rs b/runtime/kusama/src/weights/pallet_referenda_referenda.rs index 6020ba33e057..01d221d0b3f8 100644 --- a/runtime/kusama/src/weights/pallet_referenda_referenda.rs +++ b/runtime/kusama/src/weights/pallet_referenda_referenda.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_referenda` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,252 +45,476 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_referenda`. pub struct WeightInfo(PhantomData); impl pallet_referenda::WeightInfo for WeightInfo { - // Storage: Referenda ReferendumCount (r:1 w:1) - // Storage: Scheduler Agenda (r:1 w:1) - // Storage: Referenda ReferendumInfoFor (r:0 w:1) + /// Storage: Referenda ReferendumCount (r:1 w:1) + /// Proof: Referenda ReferendumCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) + /// Storage: Referenda ReferendumInfoFor (r:0 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) fn submit() -> Weight { - // Minimum execution time: 37_755 nanoseconds. - Weight::from_ref_time(38_346_000) + // Proof Size summary in bytes: + // Measured: `185` + // Estimated: `43917` + // Minimum execution time: 35_637_000 picoseconds. + Weight::from_parts(36_388_000, 0) + .saturating_add(Weight::from_parts(0, 43917)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Referenda ReferendumInfoFor (r:1 w:1) - // Storage: Scheduler Agenda (r:2 w:2) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:2 w:2) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn place_decision_deposit_preparing() -> Weight { - // Minimum execution time: 48_492 nanoseconds. - Weight::from_ref_time(49_586_000) + // Proof Size summary in bytes: + // Measured: `438` + // Estimated: `88267` + // Minimum execution time: 49_103_000 picoseconds. + Weight::from_parts(50_573_000, 0) + .saturating_add(Weight::from_parts(0, 88267)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Referenda ReferendumInfoFor (r:1 w:1) - // Storage: Referenda DecidingCount (r:1 w:0) - // Storage: Referenda TrackQueue (r:1 w:1) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: Referenda DecidingCount (r:1 w:0) + /// Proof: Referenda DecidingCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: Referenda TrackQueue (r:1 w:1) + /// Proof: Referenda TrackQueue (max_values: None, max_size: Some(2012), added: 4487, mode: MaxEncodedLen) fn place_decision_deposit_queued() -> Weight { - // Minimum execution time: 50_416 nanoseconds. - Weight::from_ref_time(51_153_000) + // Proof Size summary in bytes: + // Measured: `3034` + // Estimated: `13357` + // Minimum execution time: 44_797_000 picoseconds. + Weight::from_parts(45_606_000, 0) + .saturating_add(Weight::from_parts(0, 13357)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Referenda ReferendumInfoFor (r:1 w:1) - // Storage: Referenda DecidingCount (r:1 w:0) - // Storage: Referenda TrackQueue (r:1 w:1) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: Referenda DecidingCount (r:1 w:0) + /// Proof: Referenda DecidingCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: Referenda TrackQueue (r:1 w:1) + /// Proof: Referenda TrackQueue (max_values: None, max_size: Some(2012), added: 4487, mode: MaxEncodedLen) fn place_decision_deposit_not_queued() -> Weight { - // Minimum execution time: 49_940 nanoseconds. - Weight::from_ref_time(50_664_000) + // Proof Size summary in bytes: + // Measured: `3054` + // Estimated: `13357` + // Minimum execution time: 44_300_000 picoseconds. + Weight::from_parts(45_215_000, 0) + .saturating_add(Weight::from_parts(0, 13357)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Referenda ReferendumInfoFor (r:1 w:1) - // Storage: Referenda DecidingCount (r:1 w:1) - // Storage: Balances InactiveIssuance (r:1 w:0) - // Storage: Scheduler Agenda (r:2 w:2) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: Referenda DecidingCount (r:1 w:1) + /// Proof: Referenda DecidingCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: Balances InactiveIssuance (r:1 w:0) + /// Proof: Balances InactiveIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:2 w:2) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn place_decision_deposit_passing() -> Weight { - // Minimum execution time: 63_167 nanoseconds. - Weight::from_ref_time(64_982_000) + // Proof Size summary in bytes: + // Measured: `438` + // Estimated: `93247` + // Minimum execution time: 64_058_000 picoseconds. + Weight::from_parts(66_457_000, 0) + .saturating_add(Weight::from_parts(0, 93247)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Referenda ReferendumInfoFor (r:1 w:1) - // Storage: Referenda DecidingCount (r:1 w:1) - // Storage: Balances InactiveIssuance (r:1 w:0) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: Referenda DecidingCount (r:1 w:1) + /// Proof: Referenda DecidingCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: Balances InactiveIssuance (r:1 w:0) + /// Proof: Balances InactiveIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn place_decision_deposit_failing() -> Weight { - // Minimum execution time: 44_569 nanoseconds. - Weight::from_ref_time(46_163_000) + // Proof Size summary in bytes: + // Measured: `345` + // Estimated: `9381` + // Minimum execution time: 39_214_000 picoseconds. + Weight::from_parts(40_199_000, 0) + .saturating_add(Weight::from_parts(0, 9381)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) fn refund_decision_deposit() -> Weight { - // Minimum execution time: 31_451 nanoseconds. - Weight::from_ref_time(32_309_000) + // Proof Size summary in bytes: + // Measured: `278` + // Estimated: `4401` + // Minimum execution time: 25_633_000 picoseconds. + Weight::from_parts(26_200_000, 0) + .saturating_add(Weight::from_parts(0, 4401)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) fn refund_submission_deposit() -> Weight { - // Minimum execution time: 30_259 nanoseconds. - Weight::from_ref_time(30_856_000) + // Proof Size summary in bytes: + // Measured: `268` + // Estimated: `4401` + // Minimum execution time: 25_887_000 picoseconds. + Weight::from_parts(26_428_000, 0) + .saturating_add(Weight::from_parts(0, 4401)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Referenda ReferendumInfoFor (r:1 w:1) - // Storage: Scheduler Agenda (r:2 w:2) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:2 w:2) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn cancel() -> Weight { - // Minimum execution time: 38_179 nanoseconds. - Weight::from_ref_time(39_326_000) + // Proof Size summary in bytes: + // Measured: `346` + // Estimated: `88267` + // Minimum execution time: 37_627_000 picoseconds. + Weight::from_parts(38_185_000, 0) + .saturating_add(Weight::from_parts(0, 88267)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Referenda ReferendumInfoFor (r:1 w:1) - // Storage: Scheduler Agenda (r:2 w:2) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:2 w:2) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) + /// Storage: Referenda MetadataOf (r:1 w:0) + /// Proof: Referenda MetadataOf (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) fn kill() -> Weight { - // Minimum execution time: 79_978 nanoseconds. - Weight::from_ref_time(80_846_000) - .saturating_add(T::DbWeight::get().reads(3)) + // Proof Size summary in bytes: + // Measured: `587` + // Estimated: `91784` + // Minimum execution time: 92_363_000 picoseconds. + Weight::from_parts(93_288_000, 0) + .saturating_add(Weight::from_parts(0, 91784)) + .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Referenda TrackQueue (r:1 w:0) - // Storage: Referenda DecidingCount (r:1 w:1) + /// Storage: Referenda TrackQueue (r:1 w:0) + /// Proof: Referenda TrackQueue (max_values: None, max_size: Some(2012), added: 4487, mode: MaxEncodedLen) + /// Storage: Referenda DecidingCount (r:1 w:1) + /// Proof: Referenda DecidingCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) fn one_fewer_deciding_queue_empty() -> Weight { - // Minimum execution time: 11_591 nanoseconds. - Weight::from_ref_time(12_103_000) + // Proof Size summary in bytes: + // Measured: `101` + // Estimated: `8956` + // Minimum execution time: 9_171_000 picoseconds. + Weight::from_parts(9_545_000, 0) + .saturating_add(Weight::from_parts(0, 8956)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Referenda TrackQueue (r:1 w:1) - // Storage: Referenda ReferendumInfoFor (r:1 w:1) - // Storage: Balances InactiveIssuance (r:1 w:0) - // Storage: Scheduler Agenda (r:2 w:2) + /// Storage: Referenda TrackQueue (r:1 w:1) + /// Proof: Referenda TrackQueue (max_values: None, max_size: Some(2012), added: 4487, mode: MaxEncodedLen) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: Balances InactiveIssuance (r:1 w:0) + /// Proof: Balances InactiveIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:2 w:2) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn one_fewer_deciding_failing() -> Weight { - // Minimum execution time: 78_771 nanoseconds. - Weight::from_ref_time(79_849_000) + // Proof Size summary in bytes: + // Measured: `3804` + // Estimated: `95245` + // Minimum execution time: 107_076_000 picoseconds. + Weight::from_parts(107_863_000, 0) + .saturating_add(Weight::from_parts(0, 95245)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Referenda TrackQueue (r:1 w:1) - // Storage: Referenda ReferendumInfoFor (r:1 w:1) - // Storage: Balances InactiveIssuance (r:1 w:0) - // Storage: Scheduler Agenda (r:2 w:2) + /// Storage: Referenda TrackQueue (r:1 w:1) + /// Proof: Referenda TrackQueue (max_values: None, max_size: Some(2012), added: 4487, mode: MaxEncodedLen) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: Balances InactiveIssuance (r:1 w:0) + /// Proof: Balances InactiveIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:2 w:2) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn one_fewer_deciding_passing() -> Weight { - // Minimum execution time: 80_373 nanoseconds. - Weight::from_ref_time(81_121_000) + // Proof Size summary in bytes: + // Measured: `3804` + // Estimated: `95245` + // Minimum execution time: 108_656_000 picoseconds. + Weight::from_parts(109_588_000, 0) + .saturating_add(Weight::from_parts(0, 95245)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Referenda ReferendumInfoFor (r:1 w:1) - // Storage: Referenda TrackQueue (r:1 w:1) - // Storage: Scheduler Agenda (r:1 w:0) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: Referenda TrackQueue (r:1 w:1) + /// Proof: Referenda TrackQueue (max_values: None, max_size: Some(2012), added: 4487, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:0) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn nudge_referendum_requeued_insertion() -> Weight { - // Minimum execution time: 53_641 nanoseconds. - Weight::from_ref_time(54_278_000) + // Proof Size summary in bytes: + // Measured: `3822` + // Estimated: `52306` + // Minimum execution time: 56_686_000 picoseconds. + Weight::from_parts(57_215_000, 0) + .saturating_add(Weight::from_parts(0, 52306)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Referenda ReferendumInfoFor (r:1 w:1) - // Storage: Referenda TrackQueue (r:1 w:1) - // Storage: Scheduler Agenda (r:1 w:0) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: Referenda TrackQueue (r:1 w:1) + /// Proof: Referenda TrackQueue (max_values: None, max_size: Some(2012), added: 4487, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:0) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn nudge_referendum_requeued_slide() -> Weight { - // Minimum execution time: 53_505 nanoseconds. - Weight::from_ref_time(53_954_000) + // Proof Size summary in bytes: + // Measured: `3822` + // Estimated: `52306` + // Minimum execution time: 56_533_000 picoseconds. + Weight::from_parts(57_130_000, 0) + .saturating_add(Weight::from_parts(0, 52306)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Referenda ReferendumInfoFor (r:1 w:1) - // Storage: Referenda DecidingCount (r:1 w:0) - // Storage: Referenda TrackQueue (r:1 w:1) - // Storage: Scheduler Agenda (r:1 w:0) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: Referenda DecidingCount (r:1 w:0) + /// Proof: Referenda DecidingCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: Referenda TrackQueue (r:1 w:1) + /// Proof: Referenda TrackQueue (max_values: None, max_size: Some(2012), added: 4487, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:0) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn nudge_referendum_queued() -> Weight { - // Minimum execution time: 55_473 nanoseconds. - Weight::from_ref_time(56_134_000) + // Proof Size summary in bytes: + // Measured: `3796` + // Estimated: `55785` + // Minimum execution time: 58_599_000 picoseconds. + Weight::from_parts(59_180_000, 0) + .saturating_add(Weight::from_parts(0, 55785)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Referenda ReferendumInfoFor (r:1 w:1) - // Storage: Referenda DecidingCount (r:1 w:0) - // Storage: Referenda TrackQueue (r:1 w:1) - // Storage: Scheduler Agenda (r:1 w:0) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: Referenda DecidingCount (r:1 w:0) + /// Proof: Referenda DecidingCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: Referenda TrackQueue (r:1 w:1) + /// Proof: Referenda TrackQueue (max_values: None, max_size: Some(2012), added: 4487, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:0) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn nudge_referendum_not_queued() -> Weight { - // Minimum execution time: 55_330 nanoseconds. - Weight::from_ref_time(56_137_000) + // Proof Size summary in bytes: + // Measured: `3816` + // Estimated: `55785` + // Minimum execution time: 58_664_000 picoseconds. + Weight::from_parts(59_215_000, 0) + .saturating_add(Weight::from_parts(0, 55785)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Referenda ReferendumInfoFor (r:1 w:1) - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn nudge_referendum_no_deposit() -> Weight { - // Minimum execution time: 29_234 nanoseconds. - Weight::from_ref_time(30_016_000) + // Proof Size summary in bytes: + // Measured: `298` + // Estimated: `46829` + // Minimum execution time: 25_040_000 picoseconds. + Weight::from_parts(25_512_000, 0) + .saturating_add(Weight::from_parts(0, 46829)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Referenda ReferendumInfoFor (r:1 w:1) - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn nudge_referendum_preparing() -> Weight { - // Minimum execution time: 30_320 nanoseconds. - Weight::from_ref_time(31_207_000) + // Proof Size summary in bytes: + // Measured: `346` + // Estimated: `46829` + // Minimum execution time: 25_143_000 picoseconds. + Weight::from_parts(26_027_000, 0) + .saturating_add(Weight::from_parts(0, 46829)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) fn nudge_referendum_timed_out() -> Weight { - // Minimum execution time: 22_278 nanoseconds. - Weight::from_ref_time(22_963_000) + // Proof Size summary in bytes: + // Measured: `205` + // Estimated: `4401` + // Minimum execution time: 16_580_000 picoseconds. + Weight::from_parts(17_305_000, 0) + .saturating_add(Weight::from_parts(0, 4401)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Referenda ReferendumInfoFor (r:1 w:1) - // Storage: Referenda DecidingCount (r:1 w:1) - // Storage: Balances InactiveIssuance (r:1 w:0) - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: Referenda DecidingCount (r:1 w:1) + /// Proof: Referenda DecidingCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: Balances InactiveIssuance (r:1 w:0) + /// Proof: Balances InactiveIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn nudge_referendum_begin_deciding_failing() -> Weight { - // Minimum execution time: 42_438 nanoseconds. - Weight::from_ref_time(43_206_000) + // Proof Size summary in bytes: + // Measured: `346` + // Estimated: `51809` + // Minimum execution time: 35_384_000 picoseconds. + Weight::from_parts(35_850_000, 0) + .saturating_add(Weight::from_parts(0, 51809)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Referenda ReferendumInfoFor (r:1 w:1) - // Storage: Referenda DecidingCount (r:1 w:1) - // Storage: Balances InactiveIssuance (r:1 w:0) - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: Referenda DecidingCount (r:1 w:1) + /// Proof: Referenda DecidingCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen) + /// Storage: Balances InactiveIssuance (r:1 w:0) + /// Proof: Balances InactiveIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn nudge_referendum_begin_deciding_passing() -> Weight { - // Minimum execution time: 44_071 nanoseconds. - Weight::from_ref_time(44_793_000) + // Proof Size summary in bytes: + // Measured: `346` + // Estimated: `51809` + // Minimum execution time: 37_799_000 picoseconds. + Weight::from_parts(38_672_000, 0) + .saturating_add(Weight::from_parts(0, 51809)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Referenda ReferendumInfoFor (r:1 w:1) - // Storage: Balances InactiveIssuance (r:1 w:0) - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: Balances InactiveIssuance (r:1 w:0) + /// Proof: Balances InactiveIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn nudge_referendum_begin_confirming() -> Weight { - // Minimum execution time: 40_206 nanoseconds. - Weight::from_ref_time(41_719_000) + // Proof Size summary in bytes: + // Measured: `399` + // Estimated: `48330` + // Minimum execution time: 31_282_000 picoseconds. + Weight::from_parts(31_812_000, 0) + .saturating_add(Weight::from_parts(0, 48330)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Referenda ReferendumInfoFor (r:1 w:1) - // Storage: Balances InactiveIssuance (r:1 w:0) - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: Balances InactiveIssuance (r:1 w:0) + /// Proof: Balances InactiveIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn nudge_referendum_end_confirming() -> Weight { - // Minimum execution time: 41_848 nanoseconds. - Weight::from_ref_time(42_645_000) + // Proof Size summary in bytes: + // Measured: `382` + // Estimated: `48330` + // Minimum execution time: 32_692_000 picoseconds. + Weight::from_parts(33_118_000, 0) + .saturating_add(Weight::from_parts(0, 48330)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Referenda ReferendumInfoFor (r:1 w:1) - // Storage: Balances InactiveIssuance (r:1 w:0) - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: Balances InactiveIssuance (r:1 w:0) + /// Proof: Balances InactiveIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn nudge_referendum_continue_not_confirming() -> Weight { - // Minimum execution time: 38_801 nanoseconds. - Weight::from_ref_time(39_701_000) + // Proof Size summary in bytes: + // Measured: `399` + // Estimated: `48330` + // Minimum execution time: 29_825_000 picoseconds. + Weight::from_parts(30_210_000, 0) + .saturating_add(Weight::from_parts(0, 48330)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Referenda ReferendumInfoFor (r:1 w:1) - // Storage: Balances InactiveIssuance (r:1 w:0) - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: Balances InactiveIssuance (r:1 w:0) + /// Proof: Balances InactiveIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn nudge_referendum_continue_confirming() -> Weight { - // Minimum execution time: 37_936 nanoseconds. - Weight::from_ref_time(38_758_000) + // Proof Size summary in bytes: + // Measured: `403` + // Estimated: `48330` + // Minimum execution time: 28_156_000 picoseconds. + Weight::from_parts(28_686_000, 0) + .saturating_add(Weight::from_parts(0, 48330)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Referenda ReferendumInfoFor (r:1 w:1) - // Storage: Balances InactiveIssuance (r:1 w:0) - // Storage: Scheduler Agenda (r:2 w:2) - // Storage: Scheduler Lookup (r:1 w:1) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: Balances InactiveIssuance (r:1 w:0) + /// Proof: Balances InactiveIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:2 w:2) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) + /// Storage: Scheduler Lookup (r:1 w:1) + /// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) fn nudge_referendum_approved() -> Weight { - // Minimum execution time: 50_402 nanoseconds. - Weight::from_ref_time(51_317_000) + // Proof Size summary in bytes: + // Measured: `403` + // Estimated: `93281` + // Minimum execution time: 44_274_000 picoseconds. + Weight::from_parts(44_748_000, 0) + .saturating_add(Weight::from_parts(0, 93281)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Referenda ReferendumInfoFor (r:1 w:1) - // Storage: Balances InactiveIssuance (r:1 w:0) - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: Referenda ReferendumInfoFor (r:1 w:1) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: Balances InactiveIssuance (r:1 w:0) + /// Proof: Balances InactiveIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) fn nudge_referendum_rejected() -> Weight { - // Minimum execution time: 40_386 nanoseconds. - Weight::from_ref_time(41_208_000) + // Proof Size summary in bytes: + // Measured: `399` + // Estimated: `48330` + // Minimum execution time: 31_654_000 picoseconds. + Weight::from_parts(32_198_000, 0) + .saturating_add(Weight::from_parts(0, 48330)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } + /// Storage: Referenda ReferendumInfoFor (r:1 w:0) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: Preimage StatusFor (r:1 w:0) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Referenda MetadataOf (r:0 w:1) + /// Proof: Referenda MetadataOf (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) + fn set_some_metadata() -> Weight { + // Proof Size summary in bytes: + // Measured: `349` + // Estimated: `7957` + // Minimum execution time: 20_050_000 picoseconds. + Weight::from_parts(20_684_000, 0) + .saturating_add(Weight::from_parts(0, 7957)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: Referenda ReferendumInfoFor (r:1 w:0) + /// Proof: Referenda ReferendumInfoFor (max_values: None, max_size: Some(936), added: 3411, mode: MaxEncodedLen) + /// Storage: Referenda MetadataOf (r:1 w:1) + /// Proof: Referenda MetadataOf (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) + fn clear_metadata() -> Weight { + // Proof Size summary in bytes: + // Measured: `282` + // Estimated: `7918` + // Minimum execution time: 17_427_000 picoseconds. + Weight::from_parts(17_920_000, 0) + .saturating_add(Weight::from_parts(0, 7918)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } } diff --git a/runtime/kusama/src/weights/pallet_scheduler.rs b/runtime/kusama/src/weights/pallet_scheduler.rs index 996812108490..7f053c36d997 100644 --- a/runtime/kusama/src/weights/pallet_scheduler.rs +++ b/runtime/kusama/src/weights/pallet_scheduler.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_scheduler` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,96 +45,157 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_scheduler`. pub struct WeightInfo(PhantomData); impl pallet_scheduler::WeightInfo for WeightInfo { - // Storage: Scheduler IncompleteSince (r:1 w:1) + /// Storage: Scheduler IncompleteSince (r:1 w:1) + /// Proof: Scheduler IncompleteSince (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn service_agendas_base() -> Weight { - // Minimum execution time: 5_209 nanoseconds. - Weight::from_ref_time(5_314_000) + // Proof Size summary in bytes: + // Measured: `69` + // Estimated: `1489` + // Minimum execution time: 3_952_000 picoseconds. + Weight::from_parts(4_041_000, 0) + .saturating_add(Weight::from_parts(0, 1489)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) /// The range of component `s` is `[0, 50]`. fn service_agenda_base(s: u32, ) -> Weight { - // Minimum execution time: 4_422 nanoseconds. - Weight::from_ref_time(7_634_599) - // Standard Error: 1_898 - .saturating_add(Weight::from_ref_time(568_946).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `116 + s * (177 ±0)` + // Estimated: `42428` + // Minimum execution time: 3_546_000 picoseconds. + Weight::from_parts(6_896_089, 0) + .saturating_add(Weight::from_parts(0, 42428)) + // Standard Error: 2_110 + .saturating_add(Weight::from_parts(751_504, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } fn service_task_base() -> Weight { - // Minimum execution time: 10_347 nanoseconds. - Weight::from_ref_time(10_527_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 5_524_000 picoseconds. + Weight::from_parts(5_697_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } - // Storage: Preimage PreimageFor (r:1 w:1) - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Preimage PreimageFor (r:1 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: Measured) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) /// The range of component `s` is `[128, 4194304]`. fn service_task_fetched(s: u32, ) -> Weight { - // Minimum execution time: 22_214 nanoseconds. - Weight::from_ref_time(22_467_000) + // Proof Size summary in bytes: + // Measured: `179 + s * (1 ±0)` + // Estimated: `7200 + s * (1 ±0)` + // Minimum execution time: 18_739_000 picoseconds. + Weight::from_parts(18_916_000, 0) + .saturating_add(Weight::from_parts(0, 7200)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(1_249).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(1_168, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 1).saturating_mul(s.into())) } - // Storage: Scheduler Lookup (r:0 w:1) + /// Storage: Scheduler Lookup (r:0 w:1) + /// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) fn service_task_named() -> Weight { - // Minimum execution time: 11_917 nanoseconds. - Weight::from_ref_time(12_096_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_343_000 picoseconds. + Weight::from_parts(7_519_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } fn service_task_periodic() -> Weight { - // Minimum execution time: 10_323 nanoseconds. - Weight::from_ref_time(10_483_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 5_531_000 picoseconds. + Weight::from_parts(5_699_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } fn execute_dispatch_signed() -> Weight { - // Minimum execution time: 4_174 nanoseconds. - Weight::from_ref_time(4_223_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_918_000 picoseconds. + Weight::from_parts(3_037_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } fn execute_dispatch_unsigned() -> Weight { - // Minimum execution time: 4_299 nanoseconds. - Weight::from_ref_time(4_409_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_941_000 picoseconds. + Weight::from_parts(3_034_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) /// The range of component `s` is `[0, 49]`. fn schedule(s: u32, ) -> Weight { - // Minimum execution time: 18_532 nanoseconds. - Weight::from_ref_time(22_723_245) - // Standard Error: 3_361 - .saturating_add(Weight::from_ref_time(587_560).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `116 + s * (177 ±0)` + // Estimated: `42428` + // Minimum execution time: 14_269_000 picoseconds. + Weight::from_parts(17_390_869, 0) + .saturating_add(Weight::from_parts(0, 42428)) + // Standard Error: 2_065 + .saturating_add(Weight::from_parts(738_805, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Scheduler Agenda (r:1 w:1) - // Storage: Scheduler Lookup (r:0 w:1) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) + /// Storage: Scheduler Lookup (r:0 w:1) + /// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) /// The range of component `s` is `[1, 50]`. fn cancel(s: u32, ) -> Weight { - // Minimum execution time: 21_473 nanoseconds. - Weight::from_ref_time(23_228_996) - // Standard Error: 1_918 - .saturating_add(Weight::from_ref_time(571_552).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `116 + s * (177 ±0)` + // Estimated: `42428` + // Minimum execution time: 18_261_000 picoseconds. + Weight::from_parts(17_908_720, 0) + .saturating_add(Weight::from_parts(0, 42428)) + // Standard Error: 2_214 + .saturating_add(Weight::from_parts(1_318_747, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Scheduler Lookup (r:1 w:1) - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: Scheduler Lookup (r:1 w:1) + /// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) /// The range of component `s` is `[0, 49]`. fn schedule_named(s: u32, ) -> Weight { - // Minimum execution time: 21_893 nanoseconds. - Weight::from_ref_time(26_544_205) - // Standard Error: 3_088 - .saturating_add(Weight::from_ref_time(606_697).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `293 + s * (185 ±0)` + // Estimated: `45941` + // Minimum execution time: 16_924_000 picoseconds. + Weight::from_parts(21_290_922, 0) + .saturating_add(Weight::from_parts(0, 45941)) + // Standard Error: 3_117 + .saturating_add(Weight::from_parts(771_166, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Scheduler Lookup (r:1 w:1) - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: Scheduler Lookup (r:1 w:1) + /// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) /// The range of component `s` is `[1, 50]`. fn cancel_named(s: u32, ) -> Weight { - // Minimum execution time: 22_972 nanoseconds. - Weight::from_ref_time(24_967_033) - // Standard Error: 1_912 - .saturating_add(Weight::from_ref_time(592_873).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `319 + s * (185 ±0)` + // Estimated: `45941` + // Minimum execution time: 19_236_000 picoseconds. + Weight::from_parts(19_949_783, 0) + .saturating_add(Weight::from_parts(0, 45941)) + // Standard Error: 2_288 + .saturating_add(Weight::from_parts(1_338_921, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } diff --git a/runtime/kusama/src/weights/pallet_session.rs b/runtime/kusama/src/weights/pallet_session.rs index c01e624f7bb9..07ccac674c6a 100644 --- a/runtime/kusama/src/weights/pallet_session.rs +++ b/runtime/kusama/src/weights/pallet_session.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_session` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,21 +45,35 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_session`. pub struct WeightInfo(PhantomData); impl pallet_session::WeightInfo for WeightInfo { - // Storage: Staking Ledger (r:1 w:0) - // Storage: Session NextKeys (r:1 w:1) - // Storage: Session KeyOwner (r:6 w:6) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Session NextKeys (r:1 w:1) + /// Proof Skipped: Session NextKeys (max_values: None, max_size: None, mode: Measured) + /// Storage: Session KeyOwner (r:6 w:6) + /// Proof Skipped: Session KeyOwner (max_values: None, max_size: None, mode: Measured) fn set_keys() -> Weight { - // Minimum execution time: 52_734 nanoseconds. - Weight::from_ref_time(55_029_000) + // Proof Size summary in bytes: + // Measured: `2083` + // Estimated: `28027` + // Minimum execution time: 51_544_000 picoseconds. + Weight::from_parts(52_127_000, 0) + .saturating_add(Weight::from_parts(0, 28027)) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(7)) } - // Storage: Staking Ledger (r:1 w:0) - // Storage: Session NextKeys (r:1 w:1) - // Storage: Session KeyOwner (r:0 w:6) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Session NextKeys (r:1 w:1) + /// Proof Skipped: Session NextKeys (max_values: None, max_size: None, mode: Measured) + /// Storage: Session KeyOwner (r:0 w:6) + /// Proof Skipped: Session KeyOwner (max_values: None, max_size: None, mode: Measured) fn purge_keys() -> Weight { - // Minimum execution time: 40_087 nanoseconds. - Weight::from_ref_time(41_190_000) + // Proof Size summary in bytes: + // Measured: `1947` + // Estimated: `11915` + // Minimum execution time: 37_019_000 picoseconds. + Weight::from_parts(37_594_000, 0) + .saturating_add(Weight::from_parts(0, 11915)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(7)) } diff --git a/runtime/kusama/src/weights/pallet_staking.rs b/runtime/kusama/src/weights/pallet_staking.rs index 8159b08e794d..e55261b68bfc 100644 --- a/runtime/kusama/src/weights/pallet_staking.rs +++ b/runtime/kusama/src/weights/pallet_staking.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_staking` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,417 +45,739 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_staking`. pub struct WeightInfo(PhantomData); impl pallet_staking::WeightInfo for WeightInfo { - // Storage: Staking Bonded (r:1 w:1) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) - // Storage: Staking Payee (r:0 w:1) + /// Storage: Staking Bonded (r:1 w:1) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:0 w:1) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) fn bond() -> Weight { - // Minimum execution time: 48_252 nanoseconds. - Weight::from_ref_time(48_821_000) + // Proof Size summary in bytes: + // Measured: `980` + // Estimated: `14346` + // Minimum execution time: 44_042_000 picoseconds. + Weight::from_parts(44_821_000, 0) + .saturating_add(Weight::from_parts(0, 14346)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: VoterList ListNodes (r:3 w:3) - // Storage: VoterList ListBags (r:2 w:2) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:3 w:3) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:2 w:2) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn bond_extra() -> Weight { - // Minimum execution time: 85_499 nanoseconds. - Weight::from_ref_time(86_732_000) + // Proof Size summary in bytes: + // Measured: `1955` + // Estimated: `27838` + // Minimum execution time: 81_755_000 picoseconds. + Weight::from_parts(83_690_000, 0) + .saturating_add(Weight::from_parts(0, 27838)) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(7)) } - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking Nominators (r:1 w:0) - // Storage: Staking MinNominatorBond (r:1 w:0) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: VoterList ListNodes (r:3 w:3) - // Storage: Staking Bonded (r:1 w:0) - // Storage: VoterList ListBags (r:2 w:2) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:0) + /// Proof: Staking Nominators (max_values: None, max_size: Some(814), added: 3289, mode: MaxEncodedLen) + /// Storage: Staking MinNominatorBond (r:1 w:0) + /// Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:3 w:3) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:2 w:2) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn unbond() -> Weight { - // Minimum execution time: 92_417 nanoseconds. - Weight::from_ref_time(95_427_000) + // Proof Size summary in bytes: + // Measured: `2166` + // Estimated: `38700` + // Minimum execution time: 90_019_000 picoseconds. + Weight::from_parts(90_803_000, 0) + .saturating_add(Weight::from_parts(0, 38700)) .saturating_add(T::DbWeight::get().reads(12)) .saturating_add(T::DbWeight::get().writes(8)) } - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `s` is `[0, 100]`. fn withdraw_unbonded_update(s: u32, ) -> Weight { - // Minimum execution time: 41_289 nanoseconds. - Weight::from_ref_time(42_612_758) - // Standard Error: 799 - .saturating_add(Weight::from_ref_time(16_044).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `944` + // Estimated: `14402` + // Minimum execution time: 35_822_000 picoseconds. + Weight::from_parts(37_107_548, 0) + .saturating_add(Weight::from_parts(0, 14402)) + // Standard Error: 688 + .saturating_add(Weight::from_parts(9_909, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Staking Bonded (r:1 w:1) - // Storage: Staking SlashingSpans (r:1 w:0) - // Storage: Staking Validators (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) - // Storage: Staking CounterForNominators (r:1 w:1) - // Storage: VoterList ListNodes (r:2 w:2) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: Staking Payee (r:0 w:1) - // Storage: Staking SpanSlash (r:0 w:2) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:1) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking SlashingSpans (r:1 w:1) + /// Proof Skipped: Staking SlashingSpans (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking Validators (r:1 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:1) + /// Proof: Staking Nominators (max_values: None, max_size: Some(814), added: 3289, mode: MaxEncodedLen) + /// Storage: Staking CounterForNominators (r:1 w:1) + /// Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:2 w:2) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:0 w:1) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + /// Storage: Staking SpanSlash (r:0 w:100) + /// Proof: Staking SpanSlash (max_values: None, max_size: Some(76), added: 2551, mode: MaxEncodedLen) /// The range of component `s` is `[0, 100]`. fn withdraw_unbonded_kill(s: u32, ) -> Weight { - // Minimum execution time: 80_967 nanoseconds. - Weight::from_ref_time(85_727_324) - // Standard Error: 3_358 - .saturating_add(Weight::from_ref_time(942_386).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `2217 + s * (4 ±0)` + // Estimated: `44178 + s * (4 ±0)` + // Minimum execution time: 77_649_000 picoseconds. + Weight::from_parts(82_955_230, 0) + .saturating_add(Weight::from_parts(0, 44178)) + // Standard Error: 3_559 + .saturating_add(Weight::from_parts(1_141_606, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(13)) .saturating_add(T::DbWeight::get().writes(12)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) + .saturating_add(Weight::from_parts(0, 4).saturating_mul(s.into())) } - // Storage: Staking Ledger (r:1 w:0) - // Storage: Staking MinValidatorBond (r:1 w:0) - // Storage: Staking MinCommission (r:1 w:0) - // Storage: Staking Validators (r:1 w:1) - // Storage: Staking MaxValidatorsCount (r:1 w:0) - // Storage: Staking Nominators (r:1 w:0) - // Storage: Staking Bonded (r:1 w:0) - // Storage: VoterList ListNodes (r:1 w:1) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) - // Storage: Staking CounterForValidators (r:1 w:1) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking MinValidatorBond (r:1 w:0) + /// Proof: Staking MinValidatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Staking MinCommission (r:1 w:0) + /// Proof: Staking MinCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:1 w:1) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking MaxValidatorsCount (r:1 w:0) + /// Proof: Staking MaxValidatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:0) + /// Proof: Staking Nominators (max_values: None, max_size: Some(814), added: 3289, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:1 w:1) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking CounterForValidators (r:1 w:1) + /// Proof: Staking CounterForValidators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn validate() -> Weight { - // Minimum execution time: 63_528 nanoseconds. - Weight::from_ref_time(63_877_000) + // Proof Size summary in bytes: + // Measured: `1341` + // Estimated: `30505` + // Minimum execution time: 54_722_000 picoseconds. + Weight::from_parts(55_742_000, 0) + .saturating_add(Weight::from_parts(0, 30505)) .saturating_add(T::DbWeight::get().reads(11)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: Staking Ledger (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:128 w:128) + /// Proof: Staking Nominators (max_values: None, max_size: Some(814), added: 3289, mode: MaxEncodedLen) /// The range of component `k` is `[1, 128]`. fn kick(k: u32, ) -> Weight { - // Minimum execution time: 35_580 nanoseconds. - Weight::from_ref_time(30_905_568) - // Standard Error: 11_627 - .saturating_add(Weight::from_ref_time(6_865_919).saturating_mul(k.into())) + // Proof Size summary in bytes: + // Measured: `1306 + k * (823 ±0)` + // Estimated: `5546 + k * (3289 ±0)` + // Minimum execution time: 29_931_000 picoseconds. + Weight::from_parts(25_215_408, 0) + .saturating_add(Weight::from_parts(0, 5546)) + // Standard Error: 10_792 + .saturating_add(Weight::from_parts(8_187_563, 0).saturating_mul(k.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(k.into()))) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(k.into()))) + .saturating_add(Weight::from_parts(0, 3289).saturating_mul(k.into())) } - // Storage: Staking Ledger (r:1 w:0) - // Storage: Staking MinNominatorBond (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) - // Storage: Staking MaxNominatorsCount (r:1 w:0) - // Storage: Staking Validators (r:2 w:0) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Staking Bonded (r:1 w:0) - // Storage: VoterList ListNodes (r:2 w:2) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) - // Storage: Staking CounterForNominators (r:1 w:1) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking MinNominatorBond (r:1 w:0) + /// Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:1) + /// Proof: Staking Nominators (max_values: None, max_size: Some(814), added: 3289, mode: MaxEncodedLen) + /// Storage: Staking MaxNominatorsCount (r:1 w:0) + /// Proof: Staking MaxNominatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:25 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:2 w:2) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking CounterForNominators (r:1 w:1) + /// Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) /// The range of component `n` is `[1, 24]`. fn nominate(n: u32, ) -> Weight { - // Minimum execution time: 65_776 nanoseconds. - Weight::from_ref_time(64_676_849) - // Standard Error: 9_041 - .saturating_add(Weight::from_ref_time(2_639_322).saturating_mul(n.into())) + // Proof Size summary in bytes: + // Measured: `1907 + n * (89 ±0)` + // Estimated: `33134 + n * (2520 ±0)` + // Minimum execution time: 63_671_000 picoseconds. + Weight::from_parts(64_987_721, 0) + .saturating_add(Weight::from_parts(0, 33134)) + // Standard Error: 14_470 + .saturating_add(Weight::from_parts(2_913_561, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(12)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(6)) + .saturating_add(Weight::from_parts(0, 2520).saturating_mul(n.into())) } - // Storage: Staking Ledger (r:1 w:0) - // Storage: Staking Validators (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) - // Storage: Staking CounterForNominators (r:1 w:1) - // Storage: VoterList ListNodes (r:2 w:2) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:1 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:1) + /// Proof: Staking Nominators (max_values: None, max_size: Some(814), added: 3289, mode: MaxEncodedLen) + /// Storage: Staking CounterForNominators (r:1 w:1) + /// Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:2 w:2) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn chill() -> Weight { - // Minimum execution time: 61_209 nanoseconds. - Weight::from_ref_time(61_822_000) + // Proof Size summary in bytes: + // Measured: `1671` + // Estimated: `25118` + // Minimum execution time: 56_988_000 picoseconds. + Weight::from_parts(57_495_000, 0) + .saturating_add(Weight::from_parts(0, 25118)) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: Staking Ledger (r:1 w:0) - // Storage: Staking Payee (r:0 w:1) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:0 w:1) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) fn set_payee() -> Weight { - // Minimum execution time: 16_015 nanoseconds. - Weight::from_ref_time(16_273_000) + // Proof Size summary in bytes: + // Measured: `735` + // Estimated: `4556` + // Minimum execution time: 13_932_000 picoseconds. + Weight::from_parts(14_197_000, 0) + .saturating_add(Weight::from_parts(0, 4556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Staking Bonded (r:1 w:1) - // Storage: Staking Ledger (r:2 w:2) + /// Storage: Staking Bonded (r:1 w:1) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:2 w:2) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) fn set_controller() -> Weight { - // Minimum execution time: 23_786 nanoseconds. - Weight::from_ref_time(24_182_000) + // Proof Size summary in bytes: + // Measured: `834` + // Estimated: `11659` + // Minimum execution time: 21_186_000 picoseconds. + Weight::from_parts(21_542_000, 0) + .saturating_add(Weight::from_parts(0, 11659)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Staking ValidatorCount (r:0 w:1) + /// Storage: Staking ValidatorCount (r:0 w:1) + /// Proof: Staking ValidatorCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn set_validator_count() -> Weight { - // Minimum execution time: 4_270 nanoseconds. - Weight::from_ref_time(4_433_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_260_000 picoseconds. + Weight::from_parts(3_420_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Staking ForceEra (r:0 w:1) + /// Storage: Staking ForceEra (r:0 w:1) + /// Proof: Staking ForceEra (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn force_no_eras() -> Weight { - // Minimum execution time: 4_510 nanoseconds. - Weight::from_ref_time(4_667_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 11_605_000 picoseconds. + Weight::from_parts(11_826_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Staking ForceEra (r:0 w:1) + /// Storage: Staking ForceEra (r:0 w:1) + /// Proof: Staking ForceEra (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn force_new_era() -> Weight { - // Minimum execution time: 4_505 nanoseconds. - Weight::from_ref_time(4_702_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 11_310_000 picoseconds. + Weight::from_parts(11_876_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Staking ForceEra (r:0 w:1) + /// Storage: Staking ForceEra (r:0 w:1) + /// Proof: Staking ForceEra (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn force_new_era_always() -> Weight { - // Minimum execution time: 4_513 nanoseconds. - Weight::from_ref_time(4_669_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 11_317_000 picoseconds. + Weight::from_parts(11_715_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Staking Invulnerables (r:0 w:1) + /// Storage: Staking Invulnerables (r:0 w:1) + /// Proof Skipped: Staking Invulnerables (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `v` is `[0, 1000]`. fn set_invulnerables(v: u32, ) -> Weight { - // Minimum execution time: 4_598 nanoseconds. - Weight::from_ref_time(5_133_518) - // Standard Error: 33 - .saturating_add(Weight::from_ref_time(10_439).saturating_mul(v.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_408_000 picoseconds. + Weight::from_parts(3_727_318, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 26 + .saturating_add(Weight::from_parts(10_437, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Staking Bonded (r:1 w:1) - // Storage: Staking SlashingSpans (r:1 w:0) - // Storage: Staking Validators (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) - // Storage: Staking CounterForNominators (r:1 w:1) - // Storage: VoterList ListNodes (r:2 w:2) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: Staking Ledger (r:0 w:1) - // Storage: Staking Payee (r:0 w:1) - // Storage: Staking SpanSlash (r:0 w:2) + /// Storage: Staking Bonded (r:1 w:1) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking SlashingSpans (r:1 w:1) + /// Proof Skipped: Staking SlashingSpans (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking Validators (r:1 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:1) + /// Proof: Staking Nominators (max_values: None, max_size: Some(814), added: 3289, mode: MaxEncodedLen) + /// Storage: Staking CounterForNominators (r:1 w:1) + /// Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:2 w:2) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:0 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:0 w:1) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + /// Storage: Staking SpanSlash (r:0 w:100) + /// Proof: Staking SpanSlash (max_values: None, max_size: Some(76), added: 2551, mode: MaxEncodedLen) /// The range of component `s` is `[0, 100]`. fn force_unstake(s: u32, ) -> Weight { - // Minimum execution time: 74_643 nanoseconds. - Weight::from_ref_time(79_489_383) - // Standard Error: 2_208 - .saturating_add(Weight::from_ref_time(930_546).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `1947 + s * (4 ±0)` + // Estimated: `37863 + s * (4 ±0)` + // Minimum execution time: 72_106_000 picoseconds. + Weight::from_parts(75_001_032, 0) + .saturating_add(Weight::from_parts(0, 37863)) + // Standard Error: 2_494 + .saturating_add(Weight::from_parts(1_173_131, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(11)) .saturating_add(T::DbWeight::get().writes(12)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) + .saturating_add(Weight::from_parts(0, 4).saturating_mul(s.into())) } - // Storage: Staking UnappliedSlashes (r:1 w:1) + /// Storage: Staking UnappliedSlashes (r:1 w:1) + /// Proof Skipped: Staking UnappliedSlashes (max_values: None, max_size: None, mode: Measured) /// The range of component `s` is `[1, 1000]`. fn cancel_deferred_slash(s: u32, ) -> Weight { - // Minimum execution time: 120_224 nanoseconds. - Weight::from_ref_time(1_322_684_147) - // Standard Error: 86_380 - .saturating_add(Weight::from_ref_time(7_464_294).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `66572` + // Estimated: `70037` + // Minimum execution time: 115_672_000 picoseconds. + Weight::from_parts(926_225_061, 0) + .saturating_add(Weight::from_parts(0, 70037)) + // Standard Error: 58_775 + .saturating_add(Weight::from_parts(4_947_596, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Staking ErasValidatorReward (r:1 w:0) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking ErasStakersClipped (r:1 w:0) - // Storage: Staking ErasRewardPoints (r:1 w:0) - // Storage: Staking ErasValidatorPrefs (r:1 w:0) - // Storage: Staking Payee (r:1 w:0) - // Storage: System Account (r:1 w:1) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ErasValidatorReward (r:1 w:0) + /// Proof: Staking ErasValidatorReward (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:513 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking ErasStakersClipped (r:1 w:0) + /// Proof Skipped: Staking ErasStakersClipped (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking ErasRewardPoints (r:1 w:0) + /// Proof Skipped: Staking ErasRewardPoints (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking ErasValidatorPrefs (r:1 w:0) + /// Proof: Staking ErasValidatorPrefs (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:513 w:0) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + /// Storage: System Account (r:513 w:513) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `n` is `[0, 512]`. fn payout_stakers_dead_controller(n: u32, ) -> Weight { - // Minimum execution time: 111_668 nanoseconds. - Weight::from_ref_time(225_472_933) - // Standard Error: 16_133 - .saturating_add(Weight::from_ref_time(21_946_787).saturating_mul(n.into())) + // Proof Size summary in bytes: + // Measured: `34175 + n * (149 ±0)` + // Estimated: `88502 + n * (8024 ±0)` + // Minimum execution time: 86_392_000 picoseconds. + Weight::from_parts(78_682_975, 0) + .saturating_add(Weight::from_parts(0, 88502)) + // Standard Error: 14_557 + .saturating_add(Weight::from_parts(27_491_494, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(9)) .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(2)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into()))) + .saturating_add(Weight::from_parts(0, 8024).saturating_mul(n.into())) } - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Staking ErasValidatorReward (r:1 w:0) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking ErasStakersClipped (r:1 w:0) - // Storage: Staking ErasRewardPoints (r:1 w:0) - // Storage: Staking ErasValidatorPrefs (r:1 w:0) - // Storage: Staking Payee (r:1 w:0) - // Storage: System Account (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ErasValidatorReward (r:1 w:0) + /// Proof: Staking ErasValidatorReward (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:513 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:513 w:513) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking ErasStakersClipped (r:1 w:0) + /// Proof Skipped: Staking ErasStakersClipped (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking ErasRewardPoints (r:1 w:0) + /// Proof Skipped: Staking ErasRewardPoints (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking ErasValidatorPrefs (r:1 w:0) + /// Proof: Staking ErasValidatorPrefs (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:513 w:0) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + /// Storage: System Account (r:513 w:513) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:513 w:513) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `n` is `[0, 512]`. fn payout_stakers_alive_staked(n: u32, ) -> Weight { - // Minimum execution time: 129_291 nanoseconds. - Weight::from_ref_time(76_271_315) - // Standard Error: 103_238 - .saturating_add(Weight::from_ref_time(32_669_236).saturating_mul(n.into())) + // Proof Size summary in bytes: + // Measured: `61914 + n * (410 ±0)` + // Estimated: `140702 + n * (15906 ±3)` + // Minimum execution time: 103_991_000 picoseconds. + Weight::from_parts(80_018_960, 0) + .saturating_add(Weight::from_parts(0, 140702)) + // Standard Error: 20_611 + .saturating_add(Weight::from_parts(39_332_370, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(10)) .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(3)) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(n.into()))) + .saturating_add(Weight::from_parts(0, 15906).saturating_mul(n.into())) } - // Storage: Staking Ledger (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: VoterList ListNodes (r:3 w:3) - // Storage: Staking Bonded (r:1 w:0) - // Storage: VoterList ListBags (r:2 w:2) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:3 w:3) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:2 w:2) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) /// The range of component `l` is `[1, 32]`. fn rebond(l: u32, ) -> Weight { - // Minimum execution time: 85_340 nanoseconds. - Weight::from_ref_time(87_202_743) - // Standard Error: 4_832 - .saturating_add(Weight::from_ref_time(47_309).saturating_mul(l.into())) + // Proof Size summary in bytes: + // Measured: `1956 + l * (5 ±0)` + // Estimated: `31431` + // Minimum execution time: 80_158_000 picoseconds. + Weight::from_parts(82_003_260, 0) + .saturating_add(Weight::from_parts(0, 31431)) + // Standard Error: 3_750 + .saturating_add(Weight::from_parts(38_417, 0).saturating_mul(l.into())) .saturating_add(T::DbWeight::get().reads(9)) .saturating_add(T::DbWeight::get().writes(8)) } - // Storage: System Account (r:1 w:1) - // Storage: Staking Bonded (r:1 w:1) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking SlashingSpans (r:1 w:1) - // Storage: Staking Validators (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) - // Storage: Staking CounterForNominators (r:1 w:1) - // Storage: VoterList ListNodes (r:2 w:2) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: Staking Payee (r:0 w:1) - // Storage: Staking SpanSlash (r:0 w:1) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:1) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking SlashingSpans (r:1 w:1) + /// Proof Skipped: Staking SlashingSpans (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking Validators (r:1 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:1) + /// Proof: Staking Nominators (max_values: None, max_size: Some(814), added: 3289, mode: MaxEncodedLen) + /// Storage: Staking CounterForNominators (r:1 w:1) + /// Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:2 w:2) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:0 w:1) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + /// Storage: Staking SpanSlash (r:0 w:100) + /// Proof: Staking SpanSlash (max_values: None, max_size: Some(76), added: 2551, mode: MaxEncodedLen) /// The range of component `s` is `[1, 100]`. fn reap_stash(s: u32, ) -> Weight { - // Minimum execution time: 85_440 nanoseconds. - Weight::from_ref_time(87_846_380) - // Standard Error: 2_098 - .saturating_add(Weight::from_ref_time(914_598).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `2217 + s * (4 ±0)` + // Estimated: `42694 + s * (4 ±0)` + // Minimum execution time: 83_082_000 picoseconds. + Weight::from_parts(84_388_993, 0) + .saturating_add(Weight::from_parts(0, 42694)) + // Standard Error: 1_929 + .saturating_add(Weight::from_parts(1_134_719, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(12)) .saturating_add(T::DbWeight::get().writes(12)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) + .saturating_add(Weight::from_parts(0, 4).saturating_mul(s.into())) } - // Storage: VoterList CounterForListNodes (r:1 w:0) - // Storage: VoterList ListBags (r:166 w:0) - // Storage: VoterList ListNodes (r:101 w:0) - // Storage: Staking Nominators (r:101 w:0) - // Storage: Staking Validators (r:2 w:0) - // Storage: Staking Bonded (r:101 w:0) - // Storage: Staking Ledger (r:101 w:0) - // Storage: System BlockWeight (r:1 w:1) - // Storage: Staking CounterForValidators (r:1 w:0) - // Storage: Staking ValidatorCount (r:1 w:0) - // Storage: Staking MinimumValidatorCount (r:1 w:0) - // Storage: Staking CurrentEra (r:1 w:1) - // Storage: Staking ErasStakersClipped (r:0 w:1) - // Storage: Staking ErasValidatorPrefs (r:0 w:1) - // Storage: Staking ErasStakers (r:0 w:1) - // Storage: Staking ErasTotalStake (r:0 w:1) - // Storage: Staking ErasStartSessionIndex (r:0 w:1) - // Storage: Staking MinimumActiveStake (r:0 w:1) + /// Storage: VoterList CounterForListNodes (r:1 w:0) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:166 w:0) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:110 w:0) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:110 w:0) + /// Proof: Staking Nominators (max_values: None, max_size: Some(814), added: 3289, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:11 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:110 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:110 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: System BlockWeight (r:1 w:1) + /// Proof: System BlockWeight (max_values: Some(1), max_size: Some(48), added: 543, mode: MaxEncodedLen) + /// Storage: Staking CounterForValidators (r:1 w:0) + /// Proof: Staking CounterForValidators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ValidatorCount (r:1 w:0) + /// Proof: Staking ValidatorCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking MinimumValidatorCount (r:1 w:0) + /// Proof: Staking MinimumValidatorCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:1) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ErasStakersClipped (r:0 w:10) + /// Proof Skipped: Staking ErasStakersClipped (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking ErasValidatorPrefs (r:0 w:10) + /// Proof: Staking ErasValidatorPrefs (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Staking ErasStakers (r:0 w:10) + /// Proof Skipped: Staking ErasStakers (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking ErasTotalStake (r:0 w:1) + /// Proof: Staking ErasTotalStake (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) + /// Storage: Staking ErasStartSessionIndex (r:0 w:1) + /// Proof: Staking ErasStartSessionIndex (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Staking MinimumActiveStake (r:0 w:1) + /// Proof: Staking MinimumActiveStake (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) /// The range of component `v` is `[1, 10]`. /// The range of component `n` is `[0, 100]`. fn new_era(v: u32, n: u32, ) -> Weight { - // Minimum execution time: 442_830 nanoseconds. - Weight::from_ref_time(444_568_000) - // Standard Error: 1_789_238 - .saturating_add(Weight::from_ref_time(58_626_494).saturating_mul(v.into())) - // Standard Error: 178_287 - .saturating_add(Weight::from_ref_time(13_398_253).saturating_mul(n.into())) + // Proof Size summary in bytes: + // Measured: `0 + v * (3592 ±0) + n * (714 ±0)` + // Estimated: `452092 + v * (16951 ±0) + n * (13007 ±0)` + // Minimum execution time: 472_916_000 picoseconds. + Weight::from_parts(475_850_000, 0) + .saturating_add(Weight::from_parts(0, 452092)) + // Standard Error: 1_827_919 + .saturating_add(Weight::from_parts(59_004_651, 0).saturating_mul(v.into())) + // Standard Error: 182_142 + .saturating_add(Weight::from_parts(16_220_659, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(173)) .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(v.into()))) .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(5)) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(v.into()))) + .saturating_add(Weight::from_parts(0, 16951).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(0, 13007).saturating_mul(n.into())) } - // Storage: VoterList CounterForListNodes (r:1 w:0) - // Storage: VoterList ListBags (r:166 w:0) - // Storage: VoterList ListNodes (r:1500 w:0) - // Storage: Staking Nominators (r:1500 w:0) - // Storage: Staking Validators (r:500 w:0) - // Storage: Staking Bonded (r:1500 w:0) - // Storage: Staking Ledger (r:1500 w:0) - // Storage: System BlockWeight (r:1 w:1) - // Storage: Staking MinimumActiveStake (r:0 w:1) + /// Storage: VoterList CounterForListNodes (r:1 w:0) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:166 w:0) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:2000 w:0) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:2000 w:0) + /// Proof: Staking Nominators (max_values: None, max_size: Some(814), added: 3289, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:1000 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:2000 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:2000 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: System BlockWeight (r:1 w:1) + /// Proof: System BlockWeight (max_values: Some(1), max_size: Some(48), added: 543, mode: MaxEncodedLen) + /// Storage: Staking MinimumActiveStake (r:0 w:1) + /// Proof: Staking MinimumActiveStake (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) /// The range of component `v` is `[500, 1000]`. /// The range of component `n` is `[500, 1000]`. fn get_npos_voters(v: u32, n: u32, ) -> Weight { - // Minimum execution time: 26_020_599 nanoseconds. - Weight::from_ref_time(26_116_645_000) - // Standard Error: 592_800 - .saturating_add(Weight::from_ref_time(5_010_057).saturating_mul(v.into())) - // Standard Error: 592_800 - .saturating_add(Weight::from_ref_time(5_293_778).saturating_mul(n.into())) + // Proof Size summary in bytes: + // Measured: `3069 + v * (389 ±0) + n * (1161 ±0)` + // Estimated: `433424 + v * (14551 ±0) + n * (12031 ±0)` + // Minimum execution time: 31_166_092_000 picoseconds. + Weight::from_parts(31_458_183_000, 0) + .saturating_add(Weight::from_parts(0, 433424)) + // Standard Error: 343_946 + .saturating_add(Weight::from_parts(4_656_629, 0).saturating_mul(v.into())) + // Standard Error: 343_946 + .saturating_add(Weight::from_parts(3_128_879, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(168)) .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(v.into()))) .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 14551).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(0, 12031).saturating_mul(n.into())) } - // Storage: Staking CounterForValidators (r:1 w:0) - // Storage: Staking Validators (r:501 w:0) - // Storage: System BlockWeight (r:1 w:1) + /// Storage: Staking CounterForValidators (r:1 w:0) + /// Proof: Staking CounterForValidators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:1001 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: System BlockWeight (r:1 w:1) + /// Proof: System BlockWeight (max_values: Some(1), max_size: Some(48), added: 543, mode: MaxEncodedLen) /// The range of component `v` is `[500, 1000]`. fn get_npos_targets(v: u32, ) -> Weight { - // Minimum execution time: 3_671_302 nanoseconds. - Weight::from_ref_time(22_270_134) - // Standard Error: 31_742 - .saturating_add(Weight::from_ref_time(7_565_964).saturating_mul(v.into())) + // Proof Size summary in bytes: + // Measured: `917 + v * (50 ±0)` + // Estimated: `6532 + v * (2520 ±0)` + // Minimum execution time: 2_231_177_000 picoseconds. + Weight::from_parts(61_363_363, 0) + .saturating_add(Weight::from_parts(0, 6532)) + // Standard Error: 10_349 + .saturating_add(Weight::from_parts(4_459_825, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(v.into()))) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 2520).saturating_mul(v.into())) } - // Storage: Staking MinCommission (r:0 w:1) - // Storage: Staking MinValidatorBond (r:0 w:1) - // Storage: Staking MaxValidatorsCount (r:0 w:1) - // Storage: Staking ChillThreshold (r:0 w:1) - // Storage: Staking MaxNominatorsCount (r:0 w:1) - // Storage: Staking MinNominatorBond (r:0 w:1) + /// Storage: Staking MinCommission (r:0 w:1) + /// Proof: Staking MinCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking MinValidatorBond (r:0 w:1) + /// Proof: Staking MinValidatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Staking MaxValidatorsCount (r:0 w:1) + /// Proof: Staking MaxValidatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ChillThreshold (r:0 w:1) + /// Proof: Staking ChillThreshold (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) + /// Storage: Staking MaxNominatorsCount (r:0 w:1) + /// Proof: Staking MaxNominatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking MinNominatorBond (r:0 w:1) + /// Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn set_staking_configs_all_set() -> Weight { - // Minimum execution time: 7_726 nanoseconds. - Weight::from_ref_time(8_054_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 6_719_000 picoseconds. + Weight::from_parts(6_905_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: Staking MinCommission (r:0 w:1) - // Storage: Staking MinValidatorBond (r:0 w:1) - // Storage: Staking MaxValidatorsCount (r:0 w:1) - // Storage: Staking ChillThreshold (r:0 w:1) - // Storage: Staking MaxNominatorsCount (r:0 w:1) - // Storage: Staking MinNominatorBond (r:0 w:1) + /// Storage: Staking MinCommission (r:0 w:1) + /// Proof: Staking MinCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking MinValidatorBond (r:0 w:1) + /// Proof: Staking MinValidatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Staking MaxValidatorsCount (r:0 w:1) + /// Proof: Staking MaxValidatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ChillThreshold (r:0 w:1) + /// Proof: Staking ChillThreshold (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) + /// Storage: Staking MaxNominatorsCount (r:0 w:1) + /// Proof: Staking MaxNominatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking MinNominatorBond (r:0 w:1) + /// Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn set_staking_configs_all_remove() -> Weight { - // Minimum execution time: 7_325 nanoseconds. - Weight::from_ref_time(7_532_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 6_100_000 picoseconds. + Weight::from_parts(6_295_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: Staking Ledger (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) - // Storage: Staking ChillThreshold (r:1 w:0) - // Storage: Staking MaxNominatorsCount (r:1 w:0) - // Storage: Staking CounterForNominators (r:1 w:1) - // Storage: Staking MinNominatorBond (r:1 w:0) - // Storage: Staking Validators (r:1 w:0) - // Storage: VoterList ListNodes (r:2 w:2) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:1) + /// Proof: Staking Nominators (max_values: None, max_size: Some(814), added: 3289, mode: MaxEncodedLen) + /// Storage: Staking ChillThreshold (r:1 w:0) + /// Proof: Staking ChillThreshold (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) + /// Storage: Staking MaxNominatorsCount (r:1 w:0) + /// Proof: Staking MaxNominatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking CounterForNominators (r:1 w:1) + /// Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking MinNominatorBond (r:1 w:0) + /// Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:1 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:2 w:2) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn chill_other() -> Weight { - // Minimum execution time: 71_895 nanoseconds. - Weight::from_ref_time(73_682_000) + // Proof Size summary in bytes: + // Measured: `1794` + // Estimated: `29594` + // Minimum execution time: 69_172_000 picoseconds. + Weight::from_parts(69_612_000, 0) + .saturating_add(Weight::from_parts(0, 29594)) .saturating_add(T::DbWeight::get().reads(11)) .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: Staking MinCommission (r:1 w:0) - // Storage: Staking Validators (r:1 w:1) + /// Storage: Staking MinCommission (r:1 w:0) + /// Proof: Staking MinCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:1 w:1) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) fn force_apply_min_commission() -> Weight { - // Minimum execution time: 15_463 nanoseconds. - Weight::from_ref_time(15_679_000) + // Proof Size summary in bytes: + // Measured: `627` + // Estimated: `4999` + // Minimum execution time: 12_861_000 picoseconds. + Weight::from_parts(13_158_000, 0) + .saturating_add(Weight::from_parts(0, 4999)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } + /// Storage: Staking MinCommission (r:0 w:1) + /// Proof: Staking MinCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + fn set_min_commission() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_483_000 picoseconds. + Weight::from_parts(3_619_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(1)) + } } diff --git a/runtime/kusama/src/weights/pallet_timestamp.rs b/runtime/kusama/src/weights/pallet_timestamp.rs index 1b4f7ff3e11c..6700eb6e0434 100644 --- a/runtime/kusama/src/weights/pallet_timestamp.rs +++ b/runtime/kusama/src/weights/pallet_timestamp.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_timestamp` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,16 +45,26 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_timestamp`. pub struct WeightInfo(PhantomData); impl pallet_timestamp::WeightInfo for WeightInfo { - // Storage: Timestamp Now (r:1 w:1) - // Storage: Babe CurrentSlot (r:1 w:0) + /// Storage: Timestamp Now (r:1 w:1) + /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Babe CurrentSlot (r:1 w:0) + /// Proof: Babe CurrentSlot (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn set() -> Weight { - // Minimum execution time: 10_039 nanoseconds. - Weight::from_ref_time(10_371_000) + // Proof Size summary in bytes: + // Measured: `345` + // Estimated: `2986` + // Minimum execution time: 9_159_000 picoseconds. + Weight::from_parts(9_663_000, 0) + .saturating_add(Weight::from_parts(0, 2986)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } fn on_finalize() -> Weight { - // Minimum execution time: 4_231 nanoseconds. - Weight::from_ref_time(4_282_000) + // Proof Size summary in bytes: + // Measured: `128` + // Estimated: `0` + // Minimum execution time: 3_803_000 picoseconds. + Weight::from_parts(4_007_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } } diff --git a/runtime/kusama/src/weights/pallet_tips.rs b/runtime/kusama/src/weights/pallet_tips.rs index 64f1eed842f6..09c965970c6b 100644 --- a/runtime/kusama/src/weights/pallet_tips.rs +++ b/runtime/kusama/src/weights/pallet_tips.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_tips` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,72 +45,114 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_tips`. pub struct WeightInfo(PhantomData); impl pallet_tips::WeightInfo for WeightInfo { - // Storage: Tips Reasons (r:1 w:1) - // Storage: Tips Tips (r:1 w:1) + /// Storage: Tips Reasons (r:1 w:1) + /// Proof Skipped: Tips Reasons (max_values: None, max_size: None, mode: Measured) + /// Storage: Tips Tips (r:1 w:1) + /// Proof Skipped: Tips Tips (max_values: None, max_size: None, mode: Measured) /// The range of component `r` is `[0, 16384]`. fn report_awesome(r: u32, ) -> Weight { - // Minimum execution time: 31_356 nanoseconds. - Weight::from_ref_time(32_173_893) + // Proof Size summary in bytes: + // Measured: `4` + // Estimated: `6938` + // Minimum execution time: 23_689_000 picoseconds. + Weight::from_parts(24_837_709, 0) + .saturating_add(Weight::from_parts(0, 6938)) // Standard Error: 6 - .saturating_add(Weight::from_ref_time(1_836).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(1_449, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Tips Tips (r:1 w:1) - // Storage: Tips Reasons (r:0 w:1) + /// Storage: Tips Tips (r:1 w:1) + /// Proof Skipped: Tips Tips (max_values: None, max_size: None, mode: Measured) + /// Storage: Tips Reasons (r:0 w:1) + /// Proof Skipped: Tips Reasons (max_values: None, max_size: None, mode: Measured) fn retract_tip() -> Weight { - // Minimum execution time: 29_649 nanoseconds. - Weight::from_ref_time(30_195_000) + // Proof Size summary in bytes: + // Measured: `221` + // Estimated: `3907` + // Minimum execution time: 23_163_000 picoseconds. + Weight::from_parts(23_386_000, 0) + .saturating_add(Weight::from_parts(0, 3907)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: PhragmenElection Members (r:1 w:0) - // Storage: Tips Reasons (r:1 w:1) - // Storage: Tips Tips (r:0 w:1) + /// Storage: PhragmenElection Members (r:1 w:0) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Tips Reasons (r:1 w:1) + /// Proof Skipped: Tips Reasons (max_values: None, max_size: None, mode: Measured) + /// Storage: Tips Tips (r:0 w:1) + /// Proof Skipped: Tips Tips (max_values: None, max_size: None, mode: Measured) /// The range of component `r` is `[0, 16384]`. /// The range of component `t` is `[1, 19]`. fn tip_new(r: u32, t: u32, ) -> Weight { - // Minimum execution time: 23_780 nanoseconds. - Weight::from_ref_time(21_934_867) - // Standard Error: 8 - .saturating_add(Weight::from_ref_time(1_698).saturating_mul(r.into())) - // Standard Error: 7_264 - .saturating_add(Weight::from_ref_time(202_703).saturating_mul(t.into())) + // Proof Size summary in bytes: + // Measured: `108 + t * (64 ±0)` + // Estimated: `5274 + t * (192 ±0)` + // Minimum execution time: 18_945_000 picoseconds. + Weight::from_parts(17_578_665, 0) + .saturating_add(Weight::from_parts(0, 5274)) + // Standard Error: 6 + .saturating_add(Weight::from_parts(1_320, 0).saturating_mul(r.into())) + // Standard Error: 5_480 + .saturating_add(Weight::from_parts(154_765, 0).saturating_mul(t.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 192).saturating_mul(t.into())) } - // Storage: PhragmenElection Members (r:1 w:0) - // Storage: Tips Tips (r:1 w:1) + /// Storage: PhragmenElection Members (r:1 w:0) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Tips Tips (r:1 w:1) + /// Proof Skipped: Tips Tips (max_values: None, max_size: None, mode: Measured) /// The range of component `t` is `[1, 19]`. fn tip(t: u32, ) -> Weight { - // Minimum execution time: 15_512 nanoseconds. - Weight::from_ref_time(16_156_911) - // Standard Error: 1_681 - .saturating_add(Weight::from_ref_time(152_863).saturating_mul(t.into())) + // Proof Size summary in bytes: + // Measured: `329 + t * (112 ±0)` + // Estimated: `5608 + t * (224 ±0)` + // Minimum execution time: 14_212_000 picoseconds. + Weight::from_parts(14_717_871, 0) + .saturating_add(Weight::from_parts(0, 5608)) + // Standard Error: 1_305 + .saturating_add(Weight::from_parts(135_786, 0).saturating_mul(t.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 224).saturating_mul(t.into())) } - // Storage: Tips Tips (r:1 w:1) - // Storage: PhragmenElection Members (r:1 w:0) - // Storage: System Account (r:1 w:1) - // Storage: Tips Reasons (r:0 w:1) + /// Storage: Tips Tips (r:1 w:1) + /// Proof Skipped: Tips Tips (max_values: None, max_size: None, mode: Measured) + /// Storage: PhragmenElection Members (r:1 w:0) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Tips Reasons (r:0 w:1) + /// Proof Skipped: Tips Reasons (max_values: None, max_size: None, mode: Measured) /// The range of component `t` is `[1, 19]`. fn close_tip(t: u32, ) -> Weight { - // Minimum execution time: 46_967 nanoseconds. - Weight::from_ref_time(48_723_449) - // Standard Error: 5_023 - .saturating_add(Weight::from_ref_time(141_125).saturating_mul(t.into())) + // Proof Size summary in bytes: + // Measured: `368 + t * (112 ±0)` + // Estimated: `9620 + t * (336 ±0)` + // Minimum execution time: 41_550_000 picoseconds. + Weight::from_parts(43_011_989, 0) + .saturating_add(Weight::from_parts(0, 9620)) + // Standard Error: 5_482 + .saturating_add(Weight::from_parts(120_085, 0).saturating_mul(t.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 336).saturating_mul(t.into())) } - // Storage: Tips Tips (r:1 w:1) - // Storage: Tips Reasons (r:0 w:1) + /// Storage: Tips Tips (r:1 w:1) + /// Proof Skipped: Tips Tips (max_values: None, max_size: None, mode: Measured) + /// Storage: Tips Reasons (r:0 w:1) + /// Proof Skipped: Tips Reasons (max_values: None, max_size: None, mode: Measured) /// The range of component `t` is `[1, 19]`. fn slash_tip(t: u32, ) -> Weight { - // Minimum execution time: 19_819 nanoseconds. - Weight::from_ref_time(20_688_146) - // Standard Error: 1_508 - .saturating_add(Weight::from_ref_time(37_815).saturating_mul(t.into())) + // Proof Size summary in bytes: + // Measured: `269` + // Estimated: `4003` + // Minimum execution time: 13_897_000 picoseconds. + Weight::from_parts(14_435_129, 0) + .saturating_add(Weight::from_parts(0, 4003)) + // Standard Error: 1_409 + .saturating_add(Weight::from_parts(9_959, 0).saturating_mul(t.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } diff --git a/runtime/kusama/src/weights/pallet_treasury.rs b/runtime/kusama/src/weights/pallet_treasury.rs index 643bd4caa6bf..fce1d9dfca21 100644 --- a/runtime/kusama/src/weights/pallet_treasury.rs +++ b/runtime/kusama/src/weights/pallet_treasury.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_treasury` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,64 +45,105 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_treasury`. pub struct WeightInfo(PhantomData); impl pallet_treasury::WeightInfo for WeightInfo { - // Storage: Treasury ProposalCount (r:1 w:1) - // Storage: Treasury Approvals (r:1 w:1) - // Storage: Treasury Proposals (r:0 w:1) + /// Storage: Treasury ProposalCount (r:1 w:1) + /// Proof: Treasury ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Treasury Approvals (r:1 w:1) + /// Proof: Treasury Approvals (max_values: Some(1), max_size: Some(402), added: 897, mode: MaxEncodedLen) + /// Storage: Treasury Proposals (r:0 w:1) + /// Proof: Treasury Proposals (max_values: None, max_size: Some(108), added: 2583, mode: MaxEncodedLen) fn spend() -> Weight { - // Minimum execution time: 18_940 nanoseconds. - Weight::from_ref_time(19_320_000) + // Proof Size summary in bytes: + // Measured: `6` + // Estimated: `3376` + // Minimum execution time: 14_516_000 picoseconds. + Weight::from_parts(14_898_000, 0) + .saturating_add(Weight::from_parts(0, 3376)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Treasury ProposalCount (r:1 w:1) - // Storage: Treasury Proposals (r:0 w:1) + /// Storage: Treasury ProposalCount (r:1 w:1) + /// Proof: Treasury ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Treasury Proposals (r:0 w:1) + /// Proof: Treasury Proposals (max_values: None, max_size: Some(108), added: 2583, mode: MaxEncodedLen) fn propose_spend() -> Weight { - // Minimum execution time: 27_243 nanoseconds. - Weight::from_ref_time(27_811_000) + // Proof Size summary in bytes: + // Measured: `107` + // Estimated: `1489` + // Minimum execution time: 21_971_000 picoseconds. + Weight::from_parts(22_591_000, 0) + .saturating_add(Weight::from_parts(0, 1489)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Treasury Proposals (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Treasury Proposals (r:1 w:1) + /// Proof: Treasury Proposals (max_values: None, max_size: Some(108), added: 2583, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn reject_proposal() -> Weight { - // Minimum execution time: 40_424 nanoseconds. - Weight::from_ref_time(41_008_000) + // Proof Size summary in bytes: + // Measured: `265` + // Estimated: `7166` + // Minimum execution time: 34_087_000 picoseconds. + Weight::from_parts(34_367_000, 0) + .saturating_add(Weight::from_parts(0, 7166)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Treasury Proposals (r:1 w:0) - // Storage: Treasury Approvals (r:1 w:1) + /// Storage: Treasury Proposals (r:1 w:0) + /// Proof: Treasury Proposals (max_values: None, max_size: Some(108), added: 2583, mode: MaxEncodedLen) + /// Storage: Treasury Approvals (r:1 w:1) + /// Proof: Treasury Approvals (max_values: Some(1), max_size: Some(402), added: 897, mode: MaxEncodedLen) /// The range of component `p` is `[0, 99]`. fn approve_proposal(p: u32, ) -> Weight { - // Minimum execution time: 10_590 nanoseconds. - Weight::from_ref_time(13_920_232) - // Standard Error: 1_091 - .saturating_add(Weight::from_ref_time(48_304).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `433 + p * (8 ±0)` + // Estimated: `5460` + // Minimum execution time: 9_511_000 picoseconds. + Weight::from_parts(12_247_904, 0) + .saturating_add(Weight::from_parts(0, 5460)) + // Standard Error: 903 + .saturating_add(Weight::from_parts(28_147, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Treasury Approvals (r:1 w:1) + /// Storage: Treasury Approvals (r:1 w:1) + /// Proof: Treasury Approvals (max_values: Some(1), max_size: Some(402), added: 897, mode: MaxEncodedLen) fn remove_approval() -> Weight { - // Minimum execution time: 8_481 nanoseconds. - Weight::from_ref_time(8_677_000) + // Proof Size summary in bytes: + // Measured: `90` + // Estimated: `1887` + // Minimum execution time: 6_948_000 picoseconds. + Weight::from_parts(7_162_000, 0) + .saturating_add(Weight::from_parts(0, 1887)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Treasury Inactive (r:1 w:1) - // Storage: Balances InactiveIssuance (r:1 w:1) - // Storage: Treasury Approvals (r:1 w:1) - // Storage: Bounties BountyApprovals (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: Treasury Proposals (r:2 w:2) + /// Storage: Treasury Deactivated (r:1 w:1) + /// Proof: Treasury Deactivated (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Balances InactiveIssuance (r:1 w:1) + /// Proof: Balances InactiveIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Treasury Approvals (r:1 w:1) + /// Proof: Treasury Approvals (max_values: Some(1), max_size: Some(402), added: 897, mode: MaxEncodedLen) + /// Storage: Treasury Proposals (r:100 w:100) + /// Proof: Treasury Proposals (max_values: None, max_size: Some(108), added: 2583, mode: MaxEncodedLen) + /// Storage: System Account (r:201 w:201) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Bounties BountyApprovals (r:1 w:1) + /// Proof: Bounties BountyApprovals (max_values: Some(1), max_size: Some(402), added: 897, mode: MaxEncodedLen) /// The range of component `p` is `[0, 100]`. fn on_initialize_proposals(p: u32, ) -> Weight { - // Minimum execution time: 54_749 nanoseconds. - Weight::from_ref_time(66_521_982) - // Standard Error: 46_495 - .saturating_add(Weight::from_ref_time(25_094_728).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `297 + p * (251 ±0)` + // Estimated: `11359 + p * (7789 ±0)` + // Minimum execution time: 57_179_000 picoseconds. + Weight::from_parts(61_547_634, 0) + .saturating_add(Weight::from_parts(0, 11359)) + // Standard Error: 30_382 + .saturating_add(Weight::from_parts(32_012_031, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(p.into()))) .saturating_add(T::DbWeight::get().writes(5)) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(p.into()))) + .saturating_add(Weight::from_parts(0, 7789).saturating_mul(p.into())) } } diff --git a/runtime/kusama/src/weights/pallet_utility.rs b/runtime/kusama/src/weights/pallet_utility.rs index de35d4d41b06..bb05a8990de6 100644 --- a/runtime/kusama/src/weights/pallet_utility.rs +++ b/runtime/kusama/src/weights/pallet_utility.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_utility` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -46,31 +47,51 @@ pub struct WeightInfo(PhantomData); impl pallet_utility::WeightInfo for WeightInfo { /// The range of component `c` is `[0, 1000]`. fn batch(c: u32, ) -> Weight { - // Minimum execution time: 11_828 nanoseconds. - Weight::from_ref_time(13_760_762) - // Standard Error: 2_491 - .saturating_add(Weight::from_ref_time(3_519_460).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_159_000 picoseconds. + Weight::from_parts(13_044_055, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 2_765 + .saturating_add(Weight::from_parts(4_553_907, 0).saturating_mul(c.into())) } fn as_derivative() -> Weight { - // Minimum execution time: 5_883 nanoseconds. - Weight::from_ref_time(6_003_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 5_562_000 picoseconds. + Weight::from_parts(5_752_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } /// The range of component `c` is `[0, 1000]`. fn batch_all(c: u32, ) -> Weight { - // Minimum execution time: 11_699 nanoseconds. - Weight::from_ref_time(18_867_729) - // Standard Error: 2_787 - .saturating_add(Weight::from_ref_time(3_685_749).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 6_939_000 picoseconds. + Weight::from_parts(16_867_349, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 3_809 + .saturating_add(Weight::from_parts(4_848_850, 0).saturating_mul(c.into())) } fn dispatch_as() -> Weight { - // Minimum execution time: 13_869 nanoseconds. - Weight::from_ref_time(14_444_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 9_243_000 picoseconds. + Weight::from_parts(9_507_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } /// The range of component `c` is `[0, 1000]`. fn force_batch(c: u32, ) -> Weight { - // Minimum execution time: 12_089 nanoseconds. - Weight::from_ref_time(14_362_564) - // Standard Error: 2_587 - .saturating_add(Weight::from_ref_time(3_511_549).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 6_958_000 picoseconds. + Weight::from_parts(14_931_896, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 3_015 + .saturating_add(Weight::from_parts(4_565_357, 0).saturating_mul(c.into())) } } diff --git a/runtime/kusama/src/weights/pallet_vesting.rs b/runtime/kusama/src/weights/pallet_vesting.rs index b1973ae560f3..5fab7491f1f4 100644 --- a/runtime/kusama/src/weights/pallet_vesting.rs +++ b/runtime/kusama/src/weights/pallet_vesting.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_vesting` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,121 +45,175 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_vesting`. pub struct WeightInfo(PhantomData); impl pallet_vesting::WeightInfo for WeightInfo { - // Storage: Vesting Vesting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[1, 28]`. fn vest_locked(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 39_622 nanoseconds. - Weight::from_ref_time(38_665_613) - // Standard Error: 1_455 - .saturating_add(Weight::from_ref_time(51_628).saturating_mul(l.into())) - // Standard Error: 2_589 - .saturating_add(Weight::from_ref_time(69_995).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `314 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `9286` + // Minimum execution time: 29_916_000 picoseconds. + Weight::from_parts(29_339_698, 0) + .saturating_add(Weight::from_parts(0, 9286)) + // Standard Error: 908 + .saturating_add(Weight::from_parts(42_085, 0).saturating_mul(l.into())) + // Standard Error: 1_617 + .saturating_add(Weight::from_parts(59_635, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Vesting Vesting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[1, 28]`. fn vest_unlocked(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 39_308 nanoseconds. - Weight::from_ref_time(39_048_399) - // Standard Error: 1_505 - .saturating_add(Weight::from_ref_time(40_782).saturating_mul(l.into())) - // Standard Error: 2_678 - .saturating_add(Weight::from_ref_time(49_990).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `314 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `9286` + // Minimum execution time: 28_994_000 picoseconds. + Weight::from_parts(28_920_073, 0) + .saturating_add(Weight::from_parts(0, 9286)) + // Standard Error: 945 + .saturating_add(Weight::from_parts(36_459, 0).saturating_mul(l.into())) + // Standard Error: 1_682 + .saturating_add(Weight::from_parts(47_574, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Vesting Vesting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[1, 28]`. fn vest_other_locked(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 39_694 nanoseconds. - Weight::from_ref_time(39_083_772) - // Standard Error: 1_067 - .saturating_add(Weight::from_ref_time(42_411).saturating_mul(l.into())) - // Standard Error: 1_898 - .saturating_add(Weight::from_ref_time(62_435).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `417 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `12879` + // Minimum execution time: 31_776_000 picoseconds. + Weight::from_parts(31_051_512, 0) + .saturating_add(Weight::from_parts(0, 12879)) + // Standard Error: 1_014 + .saturating_add(Weight::from_parts(45_683, 0).saturating_mul(l.into())) + // Standard Error: 1_805 + .saturating_add(Weight::from_parts(68_567, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Vesting Vesting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[1, 28]`. fn vest_other_unlocked(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 39_075 nanoseconds. - Weight::from_ref_time(38_768_631) - // Standard Error: 1_472 - .saturating_add(Weight::from_ref_time(43_764).saturating_mul(l.into())) - // Standard Error: 2_620 - .saturating_add(Weight::from_ref_time(48_362).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `417 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `12879` + // Minimum execution time: 31_198_000 picoseconds. + Weight::from_parts(30_371_234, 0) + .saturating_add(Weight::from_parts(0, 12879)) + // Standard Error: 1_053 + .saturating_add(Weight::from_parts(46_897, 0).saturating_mul(l.into())) + // Standard Error: 1_874 + .saturating_add(Weight::from_parts(56_085, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Vesting Vesting (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[0, 27]`. fn vested_transfer(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 54_424 nanoseconds. - Weight::from_ref_time(54_994_619) - // Standard Error: 2_205 - .saturating_add(Weight::from_ref_time(28_932).saturating_mul(l.into())) - // Standard Error: 3_923 - .saturating_add(Weight::from_ref_time(26_321).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `488 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `12879` + // Minimum execution time: 50_336_000 picoseconds. + Weight::from_parts(50_095_582, 0) + .saturating_add(Weight::from_parts(0, 12879)) + // Standard Error: 1_723 + .saturating_add(Weight::from_parts(36_719, 0).saturating_mul(l.into())) + // Standard Error: 3_065 + .saturating_add(Weight::from_parts(53_956, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Vesting Vesting (r:1 w:1) - // Storage: System Account (r:2 w:2) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: System Account (r:2 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[0, 27]`. fn force_vested_transfer(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 52_823 nanoseconds. - Weight::from_ref_time(53_657_670) - // Standard Error: 2_072 - .saturating_add(Weight::from_ref_time(41_992).saturating_mul(l.into())) - // Standard Error: 3_687 - .saturating_add(Weight::from_ref_time(29_368).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `591 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `15482` + // Minimum execution time: 51_785_000 picoseconds. + Weight::from_parts(51_785_937, 0) + .saturating_add(Weight::from_parts(0, 15482)) + // Standard Error: 1_668 + .saturating_add(Weight::from_parts(37_557, 0).saturating_mul(l.into())) + // Standard Error: 2_968 + .saturating_add(Weight::from_parts(56_009, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Vesting Vesting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[2, 28]`. fn not_unlocking_merge_schedules(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 40_578 nanoseconds. - Weight::from_ref_time(40_035_118) - // Standard Error: 1_209 - .saturating_add(Weight::from_ref_time(47_771).saturating_mul(l.into())) - // Standard Error: 2_233 - .saturating_add(Weight::from_ref_time(71_486).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `415 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `12879` + // Minimum execution time: 32_591_000 picoseconds. + Weight::from_parts(32_031_830, 0) + .saturating_add(Weight::from_parts(0, 12879)) + // Standard Error: 873 + .saturating_add(Weight::from_parts(42_198, 0).saturating_mul(l.into())) + // Standard Error: 1_613 + .saturating_add(Weight::from_parts(61_400, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Vesting Vesting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[2, 28]`. fn unlocking_merge_schedules(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 40_822 nanoseconds. - Weight::from_ref_time(40_597_541) - // Standard Error: 1_111 - .saturating_add(Weight::from_ref_time(36_472).saturating_mul(l.into())) - // Standard Error: 2_053 - .saturating_add(Weight::from_ref_time(61_580).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `415 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `12879` + // Minimum execution time: 32_180_000 picoseconds. + Weight::from_parts(32_258_692, 0) + .saturating_add(Weight::from_parts(0, 12879)) + // Standard Error: 940 + .saturating_add(Weight::from_parts(38_939, 0).saturating_mul(l.into())) + // Standard Error: 1_736 + .saturating_add(Weight::from_parts(58_252, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } diff --git a/runtime/kusama/src/weights/pallet_whitelist.rs b/runtime/kusama/src/weights/pallet_whitelist.rs index 44720fea7011..f6826d521d00 100644 --- a/runtime/kusama/src/weights/pallet_whitelist.rs +++ b/runtime/kusama/src/weights/pallet_whitelist.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_whitelist` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,42 +45,68 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_whitelist`. pub struct WeightInfo(PhantomData); impl pallet_whitelist::WeightInfo for WeightInfo { - // Storage: Whitelist WhitelistedCall (r:1 w:1) - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Whitelist WhitelistedCall (r:1 w:1) + /// Proof: Whitelist WhitelistedCall (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn whitelist_call() -> Weight { - // Minimum execution time: 23_640 nanoseconds. - Weight::from_ref_time(24_012_000) + // Proof Size summary in bytes: + // Measured: `151` + // Estimated: `7061` + // Minimum execution time: 19_424_000 picoseconds. + Weight::from_parts(19_701_000, 0) + .saturating_add(Weight::from_parts(0, 7061)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Whitelist WhitelistedCall (r:1 w:1) - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Whitelist WhitelistedCall (r:1 w:1) + /// Proof: Whitelist WhitelistedCall (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn remove_whitelisted_call() -> Weight { - // Minimum execution time: 22_267 nanoseconds. - Weight::from_ref_time(22_799_000) + // Proof Size summary in bytes: + // Measured: `280` + // Estimated: `7061` + // Minimum execution time: 17_225_000 picoseconds. + Weight::from_parts(18_022_000, 0) + .saturating_add(Weight::from_parts(0, 7061)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Whitelist WhitelistedCall (r:1 w:1) - // Storage: Preimage PreimageFor (r:1 w:1) - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Whitelist WhitelistedCall (r:1 w:1) + /// Proof: Whitelist WhitelistedCall (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Preimage PreimageFor (r:1 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: Measured) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) /// The range of component `n` is `[1, 4194294]`. fn dispatch_whitelisted_call(n: u32, ) -> Weight { - // Minimum execution time: 33_179 nanoseconds. - Weight::from_ref_time(33_518_000) - // Standard Error: 3 - .saturating_add(Weight::from_ref_time(1_269).saturating_mul(n.into())) + // Proof Size summary in bytes: + // Measured: `356 + n * (1 ±0)` + // Estimated: `10881 + n * (1 ±0)` + // Minimum execution time: 29_224_000 picoseconds. + Weight::from_parts(29_514_000, 0) + .saturating_add(Weight::from_parts(0, 10881)) + // Standard Error: 4 + .saturating_add(Weight::from_parts(1_195, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into())) } - // Storage: Whitelist WhitelistedCall (r:1 w:1) - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Whitelist WhitelistedCall (r:1 w:1) + /// Proof: Whitelist WhitelistedCall (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) /// The range of component `n` is `[1, 10000]`. fn dispatch_whitelisted_call_with_preimage(n: u32, ) -> Weight { - // Minimum execution time: 25_924 nanoseconds. - Weight::from_ref_time(26_902_307) - // Standard Error: 5 - .saturating_add(Weight::from_ref_time(1_597).saturating_mul(n.into())) + // Proof Size summary in bytes: + // Measured: `280` + // Estimated: `7061` + // Minimum execution time: 21_796_000 picoseconds. + Weight::from_parts(22_483_999, 0) + .saturating_add(Weight::from_parts(0, 7061)) + // Standard Error: 4 + .saturating_add(Weight::from_parts(1_227, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } diff --git a/runtime/kusama/src/weights/pallet_xcm.rs b/runtime/kusama/src/weights/pallet_xcm.rs new file mode 100644 index 000000000000..0f2eb1eb4731 --- /dev/null +++ b/runtime/kusama/src/weights/pallet_xcm.rs @@ -0,0 +1,266 @@ +// Copyright 2017-2022 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . +//! Autogenerated weights for `pallet_xcm` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 + +// Executed Command: +// ./target/production/polkadot +// benchmark +// pallet +// --chain=kusama-dev +// --steps=50 +// --repeat=20 +// --pallet=pallet_xcm +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --header=./file_header.txt +// --output=./runtime/kusama/src/weights/ + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weight functions for `pallet_xcm`. +pub struct WeightInfo(PhantomData); +impl pallet_xcm::WeightInfo for WeightInfo { + /// Storage: XcmPallet SupportedVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SupportedVersion (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) + /// Proof Skipped: XcmPallet VersionDiscoveryQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SafeXcmVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) + fn send() -> Weight { + // Proof Size summary in bytes: + // Measured: `211` + // Estimated: `14420` + // Minimum execution time: 32_211_000 picoseconds. + Weight::from_parts(32_864_000, 0) + .saturating_add(Weight::from_parts(0, 14420)) + .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().writes(3)) + } + fn teleport_assets() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 21_186_000 picoseconds. + Weight::from_parts(21_501_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + } + fn reserve_transfer_assets() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 20_009_000 picoseconds. + Weight::from_parts(20_431_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + } + fn execute() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 10_031_000 picoseconds. + Weight::from_parts(10_350_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + } + /// Storage: XcmPallet SupportedVersion (r:0 w:1) + /// Proof Skipped: XcmPallet SupportedVersion (max_values: None, max_size: None, mode: Measured) + fn force_xcm_version() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 10_202_000 picoseconds. + Weight::from_parts(10_401_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: XcmPallet SafeXcmVersion (r:0 w:1) + /// Proof Skipped: XcmPallet SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) + fn force_default_xcm_version() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_042_000 picoseconds. + Weight::from_parts(3_161_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: XcmPallet VersionNotifiers (r:1 w:1) + /// Proof Skipped: XcmPallet VersionNotifiers (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet QueryCounter (r:1 w:1) + /// Proof Skipped: XcmPallet QueryCounter (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SupportedVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SupportedVersion (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) + /// Proof Skipped: XcmPallet VersionDiscoveryQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SafeXcmVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet Queries (r:0 w:1) + /// Proof Skipped: XcmPallet Queries (max_values: None, max_size: None, mode: Measured) + fn force_subscribe_version_notify() -> Weight { + // Proof Size summary in bytes: + // Measured: `211` + // Estimated: `20003` + // Minimum execution time: 37_152_000 picoseconds. + Weight::from_parts(37_637_000, 0) + .saturating_add(Weight::from_parts(0, 20003)) + .saturating_add(T::DbWeight::get().reads(7)) + .saturating_add(T::DbWeight::get().writes(6)) + } + /// Storage: XcmPallet VersionNotifiers (r:1 w:1) + /// Proof Skipped: XcmPallet VersionNotifiers (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet SupportedVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SupportedVersion (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) + /// Proof Skipped: XcmPallet VersionDiscoveryQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SafeXcmVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet Queries (r:0 w:1) + /// Proof Skipped: XcmPallet Queries (max_values: None, max_size: None, mode: Measured) + fn force_unsubscribe_version_notify() -> Weight { + // Proof Size summary in bytes: + // Measured: `483` + // Estimated: `20211` + // Minimum execution time: 40_068_000 picoseconds. + Weight::from_parts(40_408_000, 0) + .saturating_add(Weight::from_parts(0, 20211)) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().writes(5)) + } + /// Storage: XcmPallet SupportedVersion (r:4 w:2) + /// Proof Skipped: XcmPallet SupportedVersion (max_values: None, max_size: None, mode: Measured) + fn migrate_supported_version() -> Weight { + // Proof Size summary in bytes: + // Measured: `229` + // Estimated: `11119` + // Minimum execution time: 16_679_000 picoseconds. + Weight::from_parts(17_372_000, 0) + .saturating_add(Weight::from_parts(0, 11119)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(2)) + } + /// Storage: XcmPallet VersionNotifiers (r:4 w:2) + /// Proof Skipped: XcmPallet VersionNotifiers (max_values: None, max_size: None, mode: Measured) + fn migrate_version_notifiers() -> Weight { + // Proof Size summary in bytes: + // Measured: `233` + // Estimated: `11123` + // Minimum execution time: 17_113_000 picoseconds. + Weight::from_parts(17_539_000, 0) + .saturating_add(Weight::from_parts(0, 11123)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(2)) + } + /// Storage: XcmPallet VersionNotifyTargets (r:5 w:0) + /// Proof Skipped: XcmPallet VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) + fn already_notified_target() -> Weight { + // Proof Size summary in bytes: + // Measured: `243` + // Estimated: `13608` + // Minimum execution time: 17_831_000 picoseconds. + Weight::from_parts(18_222_000, 0) + .saturating_add(Weight::from_parts(0, 13608)) + .saturating_add(T::DbWeight::get().reads(5)) + } + /// Storage: XcmPallet VersionNotifyTargets (r:2 w:1) + /// Proof Skipped: XcmPallet VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet SupportedVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SupportedVersion (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) + /// Proof Skipped: XcmPallet VersionDiscoveryQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SafeXcmVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) + fn notify_current_targets() -> Weight { + // Proof Size summary in bytes: + // Measured: `281` + // Estimated: `20991` + // Minimum execution time: 34_239_000 picoseconds. + Weight::from_parts(34_714_000, 0) + .saturating_add(Weight::from_parts(0, 20991)) + .saturating_add(T::DbWeight::get().reads(7)) + .saturating_add(T::DbWeight::get().writes(4)) + } + /// Storage: XcmPallet VersionNotifyTargets (r:3 w:0) + /// Proof Skipped: XcmPallet VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) + fn notify_target_migration_fail() -> Weight { + // Proof Size summary in bytes: + // Measured: `272` + // Estimated: `8687` + // Minimum execution time: 9_813_000 picoseconds. + Weight::from_parts(10_050_000, 0) + .saturating_add(Weight::from_parts(0, 8687)) + .saturating_add(T::DbWeight::get().reads(3)) + } + /// Storage: XcmPallet VersionNotifyTargets (r:4 w:2) + /// Proof Skipped: XcmPallet VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) + fn migrate_version_notify_targets() -> Weight { + // Proof Size summary in bytes: + // Measured: `240` + // Estimated: `11130` + // Minimum execution time: 17_449_000 picoseconds. + Weight::from_parts(17_898_000, 0) + .saturating_add(Weight::from_parts(0, 11130)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(2)) + } + /// Storage: XcmPallet VersionNotifyTargets (r:4 w:2) + /// Proof Skipped: XcmPallet VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet SupportedVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SupportedVersion (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) + /// Proof Skipped: XcmPallet VersionDiscoveryQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SafeXcmVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) + fn migrate_and_notify_old_targets() -> Weight { + // Proof Size summary in bytes: + // Measured: `285` + // Estimated: `25965` + // Minimum execution time: 41_651_000 picoseconds. + Weight::from_parts(42_184_000, 0) + .saturating_add(Weight::from_parts(0, 25965)) + .saturating_add(T::DbWeight::get().reads(9)) + .saturating_add(T::DbWeight::get().writes(5)) + } +} diff --git a/runtime/kusama/src/weights/runtime_common_auctions.rs b/runtime/kusama/src/weights/runtime_common_auctions.rs index 5c3b62956fa5..95c4e4c18d80 100644 --- a/runtime/kusama/src/weights/runtime_common_auctions.rs +++ b/runtime/kusama/src/weights/runtime_common_auctions.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_common::auctions` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,53 +45,94 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_common::auctions`. pub struct WeightInfo(PhantomData); impl runtime_common::auctions::WeightInfo for WeightInfo { - // Storage: Auctions AuctionInfo (r:1 w:1) - // Storage: Auctions AuctionCounter (r:1 w:1) + /// Storage: Auctions AuctionInfo (r:1 w:1) + /// Proof: Auctions AuctionInfo (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Auctions AuctionCounter (r:1 w:1) + /// Proof: Auctions AuctionCounter (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn new_auction() -> Weight { - // Minimum execution time: 17_615 nanoseconds. - Weight::from_ref_time(18_245_000) + // Proof Size summary in bytes: + // Measured: `4` + // Estimated: `2982` + // Minimum execution time: 11_993_000 picoseconds. + Weight::from_parts(12_236_000, 0) + .saturating_add(Weight::from_parts(0, 2982)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Paras ParaLifecycles (r:1 w:0) - // Storage: Auctions AuctionCounter (r:1 w:0) - // Storage: Auctions AuctionInfo (r:1 w:0) - // Storage: Slots Leases (r:1 w:0) - // Storage: Auctions Winning (r:1 w:1) - // Storage: Auctions ReservedAmounts (r:2 w:2) - // Storage: System Account (r:1 w:1) + /// Storage: Paras ParaLifecycles (r:1 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Auctions AuctionCounter (r:1 w:0) + /// Proof: Auctions AuctionCounter (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Auctions AuctionInfo (r:1 w:0) + /// Proof: Auctions AuctionInfo (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Slots Leases (r:1 w:0) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: Auctions Winning (r:1 w:1) + /// Proof: Auctions Winning (max_values: None, max_size: Some(1920), added: 4395, mode: MaxEncodedLen) + /// Storage: Auctions ReservedAmounts (r:2 w:2) + /// Proof: Auctions ReservedAmounts (max_values: None, max_size: Some(60), added: 2535, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn bid() -> Weight { - // Minimum execution time: 74_152 nanoseconds. - Weight::from_ref_time(76_170_000) + // Proof Size summary in bytes: + // Measured: `661` + // Estimated: `26272` + // Minimum execution time: 67_297_000 picoseconds. + Weight::from_parts(69_648_000, 0) + .saturating_add(Weight::from_parts(0, 26272)) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Auctions AuctionInfo (r:1 w:1) - // Storage: Babe NextRandomness (r:1 w:0) - // Storage: Babe EpochStart (r:1 w:0) - // Storage: Auctions AuctionCounter (r:1 w:0) - // Storage: Auctions Winning (r:3600 w:3600) - // Storage: Auctions ReservedAmounts (r:37 w:36) - // Storage: System Account (r:36 w:36) - // Storage: Slots Leases (r:7 w:7) - // Storage: Paras ParaLifecycles (r:1 w:1) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) - // Storage: Registrar Paras (r:1 w:1) + /// Storage: Auctions AuctionInfo (r:1 w:1) + /// Proof: Auctions AuctionInfo (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Babe NextRandomness (r:1 w:0) + /// Proof: Babe NextRandomness (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: Babe EpochStart (r:1 w:0) + /// Proof: Babe EpochStart (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Auctions AuctionCounter (r:1 w:0) + /// Proof: Auctions AuctionCounter (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Auctions Winning (r:3600 w:3600) + /// Proof: Auctions Winning (max_values: None, max_size: Some(1920), added: 4395, mode: MaxEncodedLen) + /// Storage: Auctions ReservedAmounts (r:37 w:36) + /// Proof: Auctions ReservedAmounts (max_values: None, max_size: Some(60), added: 2535, mode: MaxEncodedLen) + /// Storage: System Account (r:36 w:36) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Slots Leases (r:7 w:7) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:1) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) + /// Storage: Registrar Paras (r:1 w:1) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) fn on_initialize() -> Weight { - // Minimum execution time: 16_174_592 nanoseconds. - Weight::from_ref_time(16_598_727_000) + // Proof Size summary in bytes: + // Measured: `6947662` + // Estimated: `50786970` + // Minimum execution time: 6_214_250_000 picoseconds. + Weight::from_parts(6_357_890_000, 0) + .saturating_add(Weight::from_parts(0, 50786970)) .saturating_add(T::DbWeight::get().reads(3688)) .saturating_add(T::DbWeight::get().writes(3683)) } - // Storage: Auctions ReservedAmounts (r:37 w:36) - // Storage: System Account (r:36 w:36) - // Storage: Auctions Winning (r:0 w:3600) - // Storage: Auctions AuctionInfo (r:0 w:1) + /// Storage: Auctions ReservedAmounts (r:37 w:36) + /// Proof: Auctions ReservedAmounts (max_values: None, max_size: Some(60), added: 2535, mode: MaxEncodedLen) + /// Storage: System Account (r:36 w:36) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Auctions Winning (r:3600 w:3600) + /// Proof: Auctions Winning (max_values: None, max_size: Some(1920), added: 4395, mode: MaxEncodedLen) + /// Storage: Auctions AuctionInfo (r:0 w:1) + /// Proof: Auctions AuctionInfo (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn cancel_auction() -> Weight { - // Minimum execution time: 4_612_473 nanoseconds. - Weight::from_ref_time(4_676_417_000) - .saturating_add(T::DbWeight::get().reads(73)) + // Proof Size summary in bytes: + // Measured: `177732` + // Estimated: `16012473` + // Minimum execution time: 4_808_798_000 picoseconds. + Weight::from_parts(4_914_429_000, 0) + .saturating_add(Weight::from_parts(0, 16012473)) + .saturating_add(T::DbWeight::get().reads(3673)) .saturating_add(T::DbWeight::get().writes(3673)) } } diff --git a/runtime/kusama/src/weights/runtime_common_claims.rs b/runtime/kusama/src/weights/runtime_common_claims.rs index a0b15fa6edbf..f0a29f3bd639 100644 --- a/runtime/kusama/src/weights/runtime_common_claims.rs +++ b/runtime/kusama/src/weights/runtime_common_claims.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_common::claims` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,63 +45,113 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_common::claims`. pub struct WeightInfo(PhantomData); impl runtime_common::claims::WeightInfo for WeightInfo { - // Storage: Claims Claims (r:1 w:1) - // Storage: Claims Signing (r:1 w:1) - // Storage: Claims Total (r:1 w:1) - // Storage: Claims Vesting (r:1 w:1) - // Storage: Vesting Vesting (r:1 w:1) - // Storage: System Account (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Claims Claims (r:1 w:1) + /// Proof Skipped: Claims Claims (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Signing (r:1 w:1) + /// Proof Skipped: Claims Signing (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Total (r:1 w:1) + /// Proof Skipped: Claims Total (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Claims Vesting (r:1 w:1) + /// Proof Skipped: Claims Vesting (max_values: None, max_size: None, mode: Measured) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:0) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) fn claim() -> Weight { - // Minimum execution time: 145_439 nanoseconds. - Weight::from_ref_time(149_015_000) + // Proof Size summary in bytes: + // Measured: `620` + // Estimated: `27239` + // Minimum execution time: 145_654_000 picoseconds. + Weight::from_parts(148_989_000, 0) + .saturating_add(Weight::from_parts(0, 27239)) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: Claims Total (r:1 w:1) - // Storage: Claims Vesting (r:0 w:1) - // Storage: Claims Claims (r:0 w:1) - // Storage: Claims Signing (r:0 w:1) + /// Storage: Claims Total (r:1 w:1) + /// Proof Skipped: Claims Total (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Claims Vesting (r:0 w:1) + /// Proof Skipped: Claims Vesting (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Claims (r:0 w:1) + /// Proof Skipped: Claims Claims (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Signing (r:0 w:1) + /// Proof Skipped: Claims Signing (max_values: None, max_size: None, mode: Measured) fn mint_claim() -> Weight { - // Minimum execution time: 11_829 nanoseconds. - Weight::from_ref_time(12_387_000) + // Proof Size summary in bytes: + // Measured: `216` + // Estimated: `2349` + // Minimum execution time: 10_889_000 picoseconds. + Weight::from_parts(11_366_000, 0) + .saturating_add(Weight::from_parts(0, 2349)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Claims Claims (r:1 w:1) - // Storage: Claims Signing (r:1 w:1) - // Storage: Claims Total (r:1 w:1) - // Storage: Claims Vesting (r:1 w:1) - // Storage: Vesting Vesting (r:1 w:1) - // Storage: System Account (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Claims Claims (r:1 w:1) + /// Proof Skipped: Claims Claims (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Signing (r:1 w:1) + /// Proof Skipped: Claims Signing (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Total (r:1 w:1) + /// Proof Skipped: Claims Total (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Claims Vesting (r:1 w:1) + /// Proof Skipped: Claims Vesting (max_values: None, max_size: None, mode: Measured) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:0) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) fn claim_attest() -> Weight { - // Minimum execution time: 147_923 nanoseconds. - Weight::from_ref_time(150_511_000) + // Proof Size summary in bytes: + // Measured: `620` + // Estimated: `27239` + // Minimum execution time: 149_604_000 picoseconds. + Weight::from_parts(157_491_000, 0) + .saturating_add(Weight::from_parts(0, 27239)) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: Claims Preclaims (r:1 w:1) - // Storage: Claims Signing (r:1 w:1) - // Storage: Claims Claims (r:1 w:1) - // Storage: Claims Total (r:1 w:1) - // Storage: Claims Vesting (r:1 w:1) - // Storage: Vesting Vesting (r:1 w:1) - // Storage: System Account (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Claims Preclaims (r:1 w:1) + /// Proof Skipped: Claims Preclaims (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Signing (r:1 w:1) + /// Proof Skipped: Claims Signing (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Claims (r:1 w:1) + /// Proof Skipped: Claims Claims (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Total (r:1 w:1) + /// Proof Skipped: Claims Total (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Claims Vesting (r:1 w:1) + /// Proof Skipped: Claims Vesting (max_values: None, max_size: None, mode: Measured) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:0) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) fn attest() -> Weight { - // Minimum execution time: 68_794 nanoseconds. - Weight::from_ref_time(70_811_000) + // Proof Size summary in bytes: + // Measured: `694` + // Estimated: `31694` + // Minimum execution time: 69_342_000 picoseconds. + Weight::from_parts(75_572_000, 0) + .saturating_add(Weight::from_parts(0, 31694)) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(7)) } - // Storage: Claims Claims (r:1 w:2) - // Storage: Claims Vesting (r:1 w:2) - // Storage: Claims Signing (r:1 w:2) - // Storage: Claims Preclaims (r:1 w:1) + /// Storage: Claims Claims (r:1 w:2) + /// Proof Skipped: Claims Claims (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Vesting (r:1 w:2) + /// Proof Skipped: Claims Vesting (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Signing (r:1 w:2) + /// Proof Skipped: Claims Signing (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Preclaims (r:1 w:1) + /// Proof Skipped: Claims Preclaims (max_values: None, max_size: None, mode: Measured) fn move_claim() -> Weight { - // Minimum execution time: 21_916 nanoseconds. - Weight::from_ref_time(22_574_000) + // Proof Size summary in bytes: + // Measured: `440` + // Estimated: `15620` + // Minimum execution time: 21_552_000 picoseconds. + Weight::from_parts(21_994_000, 0) + .saturating_add(Weight::from_parts(0, 15620)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(7)) } diff --git a/runtime/kusama/src/weights/runtime_common_crowdloan.rs b/runtime/kusama/src/weights/runtime_common_crowdloan.rs index ea807f176b95..63a83902b2d8 100644 --- a/runtime/kusama/src/weights/runtime_common_crowdloan.rs +++ b/runtime/kusama/src/weights/runtime_common_crowdloan.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_common::crowdloan` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,102 +45,174 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_common::crowdloan`. pub struct WeightInfo(PhantomData); impl runtime_common::crowdloan::WeightInfo for WeightInfo { - // Storage: Crowdloan Funds (r:1 w:1) - // Storage: Registrar Paras (r:1 w:1) - // Storage: Paras ParaLifecycles (r:1 w:0) - // Storage: Crowdloan NextFundIndex (r:1 w:1) + /// Storage: Crowdloan Funds (r:1 w:1) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: Registrar Paras (r:1 w:1) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Crowdloan NextFundIndex (r:1 w:1) + /// Proof Skipped: Crowdloan NextFundIndex (max_values: Some(1), max_size: None, mode: Measured) fn create() -> Weight { - // Minimum execution time: 50_146 nanoseconds. - Weight::from_ref_time(50_861_000) + // Proof Size summary in bytes: + // Measured: `363` + // Estimated: `13332` + // Minimum execution time: 38_745_000 picoseconds. + Weight::from_parts(39_628_000, 0) + .saturating_add(Weight::from_parts(0, 13332)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Crowdloan Funds (r:1 w:1) - // Storage: Slots Leases (r:1 w:0) - // Storage: Auctions AuctionInfo (r:1 w:0) - // Storage: System Account (r:1 w:1) - // Storage: Balances InactiveIssuance (r:1 w:1) - // Storage: Crowdloan EndingsCount (r:1 w:0) - // Storage: Crowdloan NewRaise (r:1 w:1) - // Storage: unknown [0xd861ea1ebf4800d4b89f4ff787ad79ee96d9a708c85b57da7eb8f9ddeda61291] (r:1 w:1) + /// Storage: Crowdloan Funds (r:1 w:1) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: Slots Leases (r:1 w:0) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: Auctions AuctionInfo (r:1 w:0) + /// Proof: Auctions AuctionInfo (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances InactiveIssuance (r:1 w:1) + /// Proof: Balances InactiveIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Crowdloan EndingsCount (r:1 w:0) + /// Proof Skipped: Crowdloan EndingsCount (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Crowdloan NewRaise (r:1 w:1) + /// Proof Skipped: Crowdloan NewRaise (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: unknown `0xd861ea1ebf4800d4b89f4ff787ad79ee96d9a708c85b57da7eb8f9ddeda61291` (r:1 w:1) + /// Proof Skipped: unknown `0xd861ea1ebf4800d4b89f4ff787ad79ee96d9a708c85b57da7eb8f9ddeda61291` (r:1 w:1) fn contribute() -> Weight { - // Minimum execution time: 122_214 nanoseconds. - Weight::from_ref_time(123_819_000) + // Proof Size summary in bytes: + // Measured: `375` + // Estimated: `21827` + // Minimum execution time: 116_800_000 picoseconds. + Weight::from_parts(118_160_000, 0) + .saturating_add(Weight::from_parts(0, 21827)) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: Crowdloan Funds (r:1 w:1) - // Storage: System Account (r:2 w:2) - // Storage: Balances InactiveIssuance (r:1 w:1) - // Storage: unknown [0xc85982571aa615c788ef9b2c16f54f25773fd439e8ee1ed2aa3ae43d48e880f0] (r:1 w:1) + /// Storage: Crowdloan Funds (r:1 w:1) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: System Account (r:2 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances InactiveIssuance (r:1 w:1) + /// Proof: Balances InactiveIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: unknown `0xc85982571aa615c788ef9b2c16f54f25773fd439e8ee1ed2aa3ae43d48e880f0` (r:1 w:1) + /// Proof Skipped: unknown `0xc85982571aa615c788ef9b2c16f54f25773fd439e8ee1ed2aa3ae43d48e880f0` (r:1 w:1) fn withdraw() -> Weight { - // Minimum execution time: 61_345 nanoseconds. - Weight::from_ref_time(62_912_000) + // Proof Size summary in bytes: + // Measured: `690` + // Estimated: `16007` + // Minimum execution time: 56_476_000 picoseconds. + Weight::from_parts(57_072_000, 0) + .saturating_add(Weight::from_parts(0, 16007)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: Skipped Metadata (r:0 w:0) + /// Storage: Skipped Metadata (r:0 w:0) + /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) /// The range of component `k` is `[0, 1000]`. fn refund(k: u32, ) -> Weight { - // Minimum execution time: 49_330 nanoseconds. - Weight::from_ref_time(63_972_000) - // Standard Error: 13_381 - .saturating_add(Weight::from_ref_time(19_330_640).saturating_mul(k.into())) + // Proof Size summary in bytes: + // Measured: `127 + k * (189 ±0)` + // Estimated: `134 + k * (189 ±0)` + // Minimum execution time: 41_098_000 picoseconds. + Weight::from_parts(54_551_000, 0) + .saturating_add(Weight::from_parts(0, 134)) + // Standard Error: 14_010 + .saturating_add(Weight::from_parts(22_470_363, 0).saturating_mul(k.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(k.into()))) .saturating_add(T::DbWeight::get().writes(3)) .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(k.into()))) + .saturating_add(Weight::from_parts(0, 189).saturating_mul(k.into())) } - // Storage: Crowdloan Funds (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Crowdloan Funds (r:1 w:1) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn dissolve() -> Weight { - // Minimum execution time: 38_711 nanoseconds. - Weight::from_ref_time(39_968_000) + // Proof Size summary in bytes: + // Measured: `375` + // Estimated: `7433` + // Minimum execution time: 29_931_000 picoseconds. + Weight::from_parts(31_008_000, 0) + .saturating_add(Weight::from_parts(0, 7433)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Crowdloan Funds (r:1 w:1) + /// Storage: Crowdloan Funds (r:1 w:1) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) fn edit() -> Weight { - // Minimum execution time: 27_042 nanoseconds. - Weight::from_ref_time(28_113_000) + // Proof Size summary in bytes: + // Measured: `235` + // Estimated: `3700` + // Minimum execution time: 18_038_000 picoseconds. + Weight::from_parts(18_767_000, 0) + .saturating_add(Weight::from_parts(0, 3700)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Crowdloan Funds (r:1 w:0) - // Storage: unknown [0xd861ea1ebf4800d4b89f4ff787ad79ee96d9a708c85b57da7eb8f9ddeda61291] (r:1 w:1) + /// Storage: Crowdloan Funds (r:1 w:0) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: unknown `0xd861ea1ebf4800d4b89f4ff787ad79ee96d9a708c85b57da7eb8f9ddeda61291` (r:1 w:1) + /// Proof Skipped: unknown `0xd861ea1ebf4800d4b89f4ff787ad79ee96d9a708c85b57da7eb8f9ddeda61291` (r:1 w:1) fn add_memo() -> Weight { - // Minimum execution time: 35_084 nanoseconds. - Weight::from_ref_time(36_107_000) + // Proof Size summary in bytes: + // Measured: `412` + // Estimated: `7754` + // Minimum execution time: 24_982_000 picoseconds. + Weight::from_parts(25_704_000, 0) + .saturating_add(Weight::from_parts(0, 7754)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Crowdloan Funds (r:1 w:0) - // Storage: Crowdloan NewRaise (r:1 w:1) + /// Storage: Crowdloan Funds (r:1 w:0) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: Crowdloan NewRaise (r:1 w:1) + /// Proof Skipped: Crowdloan NewRaise (max_values: Some(1), max_size: None, mode: Measured) fn poke() -> Weight { - // Minimum execution time: 27_126 nanoseconds. - Weight::from_ref_time(28_344_000) + // Proof Size summary in bytes: + // Measured: `239` + // Estimated: `5428` + // Minimum execution time: 17_226_000 picoseconds. + Weight::from_parts(17_899_000, 0) + .saturating_add(Weight::from_parts(0, 5428)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Auctions AuctionInfo (r:1 w:0) - // Storage: Crowdloan EndingsCount (r:1 w:1) - // Storage: Crowdloan NewRaise (r:1 w:1) - // Storage: Crowdloan Funds (r:2 w:0) - // Storage: Auctions AuctionCounter (r:1 w:0) - // Storage: Paras ParaLifecycles (r:2 w:0) - // Storage: Slots Leases (r:2 w:0) - // Storage: Auctions Winning (r:1 w:1) - // Storage: Auctions ReservedAmounts (r:2 w:2) - // Storage: System Account (r:2 w:2) + /// Storage: Auctions AuctionInfo (r:1 w:0) + /// Proof: Auctions AuctionInfo (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Crowdloan EndingsCount (r:1 w:1) + /// Proof Skipped: Crowdloan EndingsCount (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Crowdloan NewRaise (r:1 w:1) + /// Proof Skipped: Crowdloan NewRaise (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Crowdloan Funds (r:100 w:0) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: Auctions AuctionCounter (r:1 w:0) + /// Proof: Auctions AuctionCounter (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Paras ParaLifecycles (r:100 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Slots Leases (r:100 w:0) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: Auctions Winning (r:1 w:1) + /// Proof: Auctions Winning (max_values: None, max_size: Some(1920), added: 4395, mode: MaxEncodedLen) + /// Storage: Auctions ReservedAmounts (r:100 w:100) + /// Proof: Auctions ReservedAmounts (max_values: None, max_size: Some(60), added: 2535, mode: MaxEncodedLen) + /// Storage: System Account (r:100 w:100) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `n` is `[2, 100]`. fn on_initialize(n: u32, ) -> Weight { - // Minimum execution time: 106_838 nanoseconds. - Weight::from_ref_time(13_240_511) - // Standard Error: 45_032 - .saturating_add(Weight::from_ref_time(41_814_335).saturating_mul(n.into())) + // Proof Size summary in bytes: + // Measured: `130 + n * (356 ±0)` + // Estimated: `16917 + n * (14348 ±0)` + // Minimum execution time: 108_411_000 picoseconds. + Weight::from_parts(109_758_000, 0) + .saturating_add(Weight::from_parts(0, 16917)) + // Standard Error: 51_868 + .saturating_add(Weight::from_parts(48_608_412, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(3)) .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(n.into()))) + .saturating_add(Weight::from_parts(0, 14348).saturating_mul(n.into())) } } diff --git a/runtime/kusama/src/weights/runtime_common_paras_registrar.rs b/runtime/kusama/src/weights/runtime_common_paras_registrar.rs index 34256714809f..19ee348b8468 100644 --- a/runtime/kusama/src/weights/runtime_common_paras_registrar.rs +++ b/runtime/kusama/src/weights/runtime_common_paras_registrar.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_common::paras_registrar` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,96 +45,169 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_common::paras_registrar`. pub struct WeightInfo(PhantomData); impl runtime_common::paras_registrar::WeightInfo for WeightInfo { - // Storage: Registrar NextFreeParaId (r:1 w:1) - // Storage: Registrar Paras (r:1 w:1) - // Storage: Paras ParaLifecycles (r:1 w:0) + /// Storage: Registrar NextFreeParaId (r:1 w:1) + /// Proof Skipped: Registrar NextFreeParaId (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Registrar Paras (r:1 w:1) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) fn reserve() -> Weight { - // Minimum execution time: 32_645 nanoseconds. - Weight::from_ref_time(33_252_000) + // Proof Size summary in bytes: + // Measured: `70` + // Estimated: `8625` + // Minimum execution time: 24_916_000 picoseconds. + Weight::from_parts(25_518_000, 0) + .saturating_add(Weight::from_parts(0, 8625)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Registrar Paras (r:1 w:1) - // Storage: Paras ParaLifecycles (r:1 w:1) - // Storage: Paras PvfActiveVoteMap (r:1 w:0) - // Storage: Paras CodeByHash (r:1 w:1) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) - // Storage: Paras CodeByHashRefs (r:1 w:1) - // Storage: Paras CurrentCodeHash (r:0 w:1) - // Storage: Paras UpcomingParasGenesis (r:0 w:1) + /// Storage: Registrar Paras (r:1 w:1) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:1) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:0) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHash (r:1 w:1) + /// Proof Skipped: Paras CodeByHash (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHashRefs (r:1 w:1) + /// Proof Skipped: Paras CodeByHashRefs (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CurrentCodeHash (r:0 w:1) + /// Proof Skipped: Paras CurrentCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpcomingParasGenesis (r:0 w:1) + /// Proof Skipped: Paras UpcomingParasGenesis (max_values: None, max_size: None, mode: Measured) fn register() -> Weight { - // Minimum execution time: 7_441_785 nanoseconds. - Weight::from_ref_time(7_538_553_000) + // Proof Size summary in bytes: + // Measured: `270` + // Estimated: `24705` + // Minimum execution time: 6_318_888_000 picoseconds. + Weight::from_parts(6_402_988_000, 0) + .saturating_add(Weight::from_parts(0, 24705)) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(7)) } - // Storage: Registrar Paras (r:1 w:1) - // Storage: Paras ParaLifecycles (r:1 w:1) - // Storage: Paras PvfActiveVoteMap (r:1 w:0) - // Storage: Paras CodeByHash (r:1 w:1) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) - // Storage: Paras CodeByHashRefs (r:1 w:1) - // Storage: Paras CurrentCodeHash (r:0 w:1) - // Storage: Paras UpcomingParasGenesis (r:0 w:1) + /// Storage: Registrar Paras (r:1 w:1) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:1) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:0) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHash (r:1 w:1) + /// Proof Skipped: Paras CodeByHash (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHashRefs (r:1 w:1) + /// Proof Skipped: Paras CodeByHashRefs (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CurrentCodeHash (r:0 w:1) + /// Proof Skipped: Paras CurrentCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpcomingParasGenesis (r:0 w:1) + /// Proof Skipped: Paras UpcomingParasGenesis (max_values: None, max_size: None, mode: Measured) fn force_register() -> Weight { - // Minimum execution time: 7_402_898 nanoseconds. - Weight::from_ref_time(7_542_285_000) + // Proof Size summary in bytes: + // Measured: `160` + // Estimated: `23715` + // Minimum execution time: 6_283_567_000 picoseconds. + Weight::from_parts(6_439_879_000, 0) + .saturating_add(Weight::from_parts(0, 23715)) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(7)) } - // Storage: Registrar Paras (r:1 w:1) - // Storage: Paras ParaLifecycles (r:1 w:1) - // Storage: Paras FutureCodeHash (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) - // Storage: Registrar PendingSwap (r:0 w:1) + /// Storage: Registrar Paras (r:1 w:1) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:1) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras FutureCodeHash (r:1 w:0) + /// Proof Skipped: Paras FutureCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) + /// Storage: Registrar PendingSwap (r:0 w:1) + /// Proof Skipped: Registrar PendingSwap (max_values: None, max_size: None, mode: Measured) fn deregister() -> Weight { - // Minimum execution time: 50_977 nanoseconds. - Weight::from_ref_time(52_477_000) + // Proof Size summary in bytes: + // Measured: `435` + // Estimated: `17955` + // Minimum execution time: 40_641_000 picoseconds. + Weight::from_parts(41_347_000, 0) + .saturating_add(Weight::from_parts(0, 17955)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Registrar Paras (r:1 w:0) - // Storage: Paras ParaLifecycles (r:2 w:2) - // Storage: Registrar PendingSwap (r:1 w:1) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) - // Storage: Crowdloan Funds (r:2 w:2) - // Storage: Slots Leases (r:2 w:2) + /// Storage: Registrar Paras (r:1 w:0) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:2 w:2) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Registrar PendingSwap (r:1 w:1) + /// Proof Skipped: Registrar PendingSwap (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) + /// Storage: Crowdloan Funds (r:2 w:2) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: Slots Leases (r:2 w:2) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) fn swap() -> Weight { - // Minimum execution time: 46_017 nanoseconds. - Weight::from_ref_time(47_627_000) + // Proof Size summary in bytes: + // Measured: `676` + // Estimated: `34432` + // Minimum execution time: 46_671_000 picoseconds. + Weight::from_parts(47_756_000, 0) + .saturating_add(Weight::from_parts(0, 34432)) .saturating_add(T::DbWeight::get().reads(10)) .saturating_add(T::DbWeight::get().writes(8)) } - // Storage: Paras FutureCodeHash (r:1 w:1) - // Storage: Paras UpgradeRestrictionSignal (r:1 w:1) - // Storage: Paras CurrentCodeHash (r:1 w:0) - // Storage: Paras UpgradeCooldowns (r:1 w:1) - // Storage: Paras PvfActiveVoteMap (r:1 w:0) - // Storage: Paras CodeByHash (r:1 w:1) - // Storage: Paras UpcomingUpgrades (r:1 w:1) - // Storage: System Digest (r:1 w:1) - // Storage: Paras CodeByHashRefs (r:1 w:1) - // Storage: Paras FutureCodeUpgrades (r:0 w:1) + /// Storage: Paras FutureCodeHash (r:1 w:1) + /// Proof Skipped: Paras FutureCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeRestrictionSignal (r:1 w:1) + /// Proof Skipped: Paras UpgradeRestrictionSignal (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CurrentCodeHash (r:1 w:0) + /// Proof Skipped: Paras CurrentCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeCooldowns (r:1 w:1) + /// Proof Skipped: Paras UpgradeCooldowns (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:0) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHash (r:1 w:1) + /// Proof Skipped: Paras CodeByHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpcomingUpgrades (r:1 w:1) + /// Proof Skipped: Paras UpcomingUpgrades (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System Digest (r:1 w:1) + /// Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras CodeByHashRefs (r:1 w:1) + /// Proof Skipped: Paras CodeByHashRefs (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras FutureCodeUpgrades (r:0 w:1) + /// Proof Skipped: Paras FutureCodeUpgrades (max_values: None, max_size: None, mode: Measured) /// The range of component `b` is `[1, 3145728]`. fn schedule_code_upgrade(b: u32, ) -> Weight { - // Minimum execution time: 43_949 nanoseconds. - Weight::from_ref_time(44_227_000) + // Proof Size summary in bytes: + // Measured: `28` + // Estimated: `25525` + // Minimum execution time: 38_256_000 picoseconds. + Weight::from_parts(38_387_000, 0) + .saturating_add(Weight::from_parts(0, 25525)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(2_326).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(1_973, 0).saturating_mul(b.into())) .saturating_add(T::DbWeight::get().reads(9)) .saturating_add(T::DbWeight::get().writes(8)) } - // Storage: Paras Heads (r:0 w:1) + /// Storage: Paras Heads (r:0 w:1) + /// Proof Skipped: Paras Heads (max_values: None, max_size: None, mode: Measured) /// The range of component `b` is `[1, 1048576]`. fn set_current_head(b: u32, ) -> Weight { - // Minimum execution time: 13_993 nanoseconds. - Weight::from_ref_time(14_190_000) - // Standard Error: 2 - .saturating_add(Weight::from_ref_time(909).saturating_mul(b.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 9_081_000 picoseconds. + Weight::from_parts(9_232_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 1 + .saturating_add(Weight::from_parts(870, 0).saturating_mul(b.into())) .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/runtime/kusama/src/weights/runtime_common_slots.rs b/runtime/kusama/src/weights/runtime_common_slots.rs index d751d6387039..99670e0d6d9c 100644 --- a/runtime/kusama/src/weights/runtime_common_slots.rs +++ b/runtime/kusama/src/weights/runtime_common_slots.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_common::slots` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,52 +45,85 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_common::slots`. pub struct WeightInfo(PhantomData); impl runtime_common::slots::WeightInfo for WeightInfo { - // Storage: Slots Leases (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Slots Leases (r:1 w:1) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn force_lease() -> Weight { - // Minimum execution time: 33_382 nanoseconds. - Weight::from_ref_time(33_715_000) + // Proof Size summary in bytes: + // Measured: `220` + // Estimated: `7278` + // Minimum execution time: 25_623_000 picoseconds. + Weight::from_parts(26_120_000, 0) + .saturating_add(Weight::from_parts(0, 7278)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Paras Parachains (r:1 w:0) - // Storage: Slots Leases (r:101 w:100) - // Storage: Paras ParaLifecycles (r:100 w:100) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) - // Storage: Registrar Paras (r:100 w:100) + /// Storage: Paras Parachains (r:1 w:0) + /// Proof Skipped: Paras Parachains (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Slots Leases (r:101 w:100) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:200 w:200) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) + /// Storage: Registrar Paras (r:100 w:100) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[0, 100]`. /// The range of component `t` is `[0, 100]`. fn manage_lease_period_start(c: u32, t: u32, ) -> Weight { - // Minimum execution time: 557_126 nanoseconds. - Weight::from_ref_time(563_537_000) - // Standard Error: 70_430 - .saturating_add(Weight::from_ref_time(2_305_346).saturating_mul(c.into())) - // Standard Error: 70_430 - .saturating_add(Weight::from_ref_time(12_575_762).saturating_mul(t.into())) + // Proof Size summary in bytes: + // Measured: `9 + c * (47 ±0) + t * (308 ±0)` + // Estimated: `7999 + c * (2781 ±0) + t * (9308 ±0)` + // Minimum execution time: 630_879_000 picoseconds. + Weight::from_parts(638_193_000, 0) + .saturating_add(Weight::from_parts(0, 7999)) + // Standard Error: 81_763 + .saturating_add(Weight::from_parts(2_702_321, 0).saturating_mul(c.into())) + // Standard Error: 81_763 + .saturating_add(Weight::from_parts(11_634_633, 0).saturating_mul(t.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(c.into()))) .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(t.into()))) .saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(c.into()))) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(t.into()))) + .saturating_add(Weight::from_parts(0, 2781).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(0, 9308).saturating_mul(t.into())) } - // Storage: Slots Leases (r:1 w:1) - // Storage: System Account (r:8 w:8) + /// Storage: Slots Leases (r:1 w:1) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: System Account (r:8 w:8) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn clear_all_leases() -> Weight { - // Minimum execution time: 96_232 nanoseconds. - Weight::from_ref_time(98_424_000) + // Proof Size summary in bytes: + // Measured: `2692` + // Estimated: `27971` + // Minimum execution time: 96_214_000 picoseconds. + Weight::from_parts(97_599_000, 0) + .saturating_add(Weight::from_parts(0, 27971)) .saturating_add(T::DbWeight::get().reads(9)) .saturating_add(T::DbWeight::get().writes(9)) } - // Storage: Slots Leases (r:1 w:0) - // Storage: Paras ParaLifecycles (r:1 w:1) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) - // Storage: Registrar Paras (r:1 w:1) + /// Storage: Slots Leases (r:1 w:0) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:1) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) + /// Storage: Registrar Paras (r:1 w:1) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) fn trigger_onboard() -> Weight { - // Minimum execution time: 29_782 nanoseconds. - Weight::from_ref_time(30_661_000) + // Proof Size summary in bytes: + // Measured: `580` + // Estimated: `18245` + // Minimum execution time: 29_910_000 picoseconds. + Weight::from_parts(30_542_000, 0) + .saturating_add(Weight::from_parts(0, 18245)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(3)) } diff --git a/runtime/kusama/src/weights/runtime_parachains_configuration.rs b/runtime/kusama/src/weights/runtime_parachains_configuration.rs index 078bd76a26f9..8b2aa12d2d20 100644 --- a/runtime/kusama/src/weights/runtime_parachains_configuration.rs +++ b/runtime/kusama/src/weights/runtime_parachains_configuration.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_parachains::configuration` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,53 +45,93 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_parachains::configuration`. pub struct WeightInfo(PhantomData); impl runtime_parachains::configuration::WeightInfo for WeightInfo { - // Storage: Configuration PendingConfigs (r:1 w:1) - // Storage: Configuration BypassConsistencyCheck (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Storage: Configuration PendingConfigs (r:1 w:1) + /// Proof Skipped: Configuration PendingConfigs (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration BypassConsistencyCheck (r:1 w:0) + /// Proof Skipped: Configuration BypassConsistencyCheck (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) fn set_config_with_block_number() -> Weight { - // Minimum execution time: 12_345 nanoseconds. - Weight::from_ref_time(12_862_000) + // Proof Size summary in bytes: + // Measured: `90` + // Estimated: `4725` + // Minimum execution time: 8_970_000 picoseconds. + Weight::from_parts(9_143_000, 0) + .saturating_add(Weight::from_parts(0, 4725)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Configuration PendingConfigs (r:1 w:1) - // Storage: Configuration BypassConsistencyCheck (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Storage: Configuration PendingConfigs (r:1 w:1) + /// Proof Skipped: Configuration PendingConfigs (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration BypassConsistencyCheck (r:1 w:0) + /// Proof Skipped: Configuration BypassConsistencyCheck (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) fn set_config_with_u32() -> Weight { - // Minimum execution time: 12_744 nanoseconds. - Weight::from_ref_time(13_172_000) + // Proof Size summary in bytes: + // Measured: `90` + // Estimated: `4725` + // Minimum execution time: 9_192_000 picoseconds. + Weight::from_parts(9_475_000, 0) + .saturating_add(Weight::from_parts(0, 4725)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Configuration PendingConfigs (r:1 w:1) - // Storage: Configuration BypassConsistencyCheck (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Storage: Configuration PendingConfigs (r:1 w:1) + /// Proof Skipped: Configuration PendingConfigs (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration BypassConsistencyCheck (r:1 w:0) + /// Proof Skipped: Configuration BypassConsistencyCheck (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) fn set_config_with_option_u32() -> Weight { - // Minimum execution time: 12_398 nanoseconds. - Weight::from_ref_time(12_888_000) + // Proof Size summary in bytes: + // Measured: `90` + // Estimated: `4725` + // Minimum execution time: 9_259_000 picoseconds. + Weight::from_parts(9_499_000, 0) + .saturating_add(Weight::from_parts(0, 4725)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Configuration PendingConfigs (r:1 w:1) - // Storage: Configuration BypassConsistencyCheck (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Storage: Configuration PendingConfigs (r:1 w:1) + /// Proof Skipped: Configuration PendingConfigs (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration BypassConsistencyCheck (r:1 w:0) + /// Proof Skipped: Configuration BypassConsistencyCheck (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) fn set_config_with_weight() -> Weight { - // Minimum execution time: 12_592 nanoseconds. - Weight::from_ref_time(13_133_000) + // Proof Size summary in bytes: + // Measured: `90` + // Estimated: `4725` + // Minimum execution time: 9_323_000 picoseconds. + Weight::from_parts(9_697_000, 0) + .saturating_add(Weight::from_parts(0, 4725)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Benchmark Override (r:0 w:0) + /// Storage: Benchmark Override (r:0 w:0) + /// Proof Skipped: Benchmark Override (max_values: None, max_size: None, mode: Measured) fn set_hrmp_open_request_ttl() -> Weight { - // Minimum execution time: 2_000_000_000 nanoseconds. - Weight::from_ref_time(2_000_000_000_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_000_000_000_000 picoseconds. + Weight::from_parts(2_000_000_000_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } - // Storage: Configuration PendingConfigs (r:1 w:1) - // Storage: Configuration BypassConsistencyCheck (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Storage: Configuration PendingConfigs (r:1 w:1) + /// Proof Skipped: Configuration PendingConfigs (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration BypassConsistencyCheck (r:1 w:0) + /// Proof Skipped: Configuration BypassConsistencyCheck (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) fn set_config_with_balance() -> Weight { - // Minimum execution time: 12_434 nanoseconds. - Weight::from_ref_time(12_838_000) + // Proof Size summary in bytes: + // Measured: `90` + // Estimated: `4725` + // Minimum execution time: 9_270_000 picoseconds. + Weight::from_parts(9_527_000, 0) + .saturating_add(Weight::from_parts(0, 4725)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/kusama/src/weights/runtime_parachains_disputes.rs b/runtime/kusama/src/weights/runtime_parachains_disputes.rs index 98f985407e8b..a0b34263b63b 100644 --- a/runtime/kusama/src/weights/runtime_parachains_disputes.rs +++ b/runtime/kusama/src/weights/runtime_parachains_disputes.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_parachains::disputes` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,10 +45,15 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_parachains::disputes`. pub struct WeightInfo(PhantomData); impl runtime_parachains::disputes::WeightInfo for WeightInfo { - // Storage: ParasDisputes Frozen (r:0 w:1) + /// Storage: ParasDisputes Frozen (r:0 w:1) + /// Proof Skipped: ParasDisputes Frozen (max_values: Some(1), max_size: None, mode: Measured) fn force_unfreeze() -> Weight { - // Minimum execution time: 4_165 nanoseconds. - Weight::from_ref_time(4_356_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_908_000 picoseconds. + Weight::from_parts(3_045_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/runtime/kusama/src/weights/runtime_parachains_hrmp.rs b/runtime/kusama/src/weights/runtime_parachains_hrmp.rs index b3258788b827..3d47da0d913e 100644 --- a/runtime/kusama/src/weights/runtime_parachains_hrmp.rs +++ b/runtime/kusama/src/weights/runtime_parachains_hrmp.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_parachains::hrmp` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,139 +45,235 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_parachains::hrmp`. pub struct WeightInfo(PhantomData); impl runtime_parachains::hrmp::WeightInfo for WeightInfo { - // Storage: Paras ParaLifecycles (r:2 w:0) - // Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) - // Storage: Hrmp HrmpChannels (r:1 w:0) - // Storage: Hrmp HrmpEgressChannelsIndex (r:1 w:0) - // Storage: Hrmp HrmpOpenChannelRequestCount (r:1 w:1) - // Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) - // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) - // Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Storage: Paras ParaLifecycles (r:2 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequests (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannels (r:1 w:0) + /// Proof Skipped: Hrmp HrmpChannels (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpEgressChannelsIndex (r:1 w:0) + /// Proof Skipped: Hrmp HrmpEgressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestCount (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestCount (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestsList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) fn hrmp_init_open_channel() -> Weight { - // Minimum execution time: 42_143 nanoseconds. - Weight::from_ref_time(42_725_000) + // Proof Size summary in bytes: + // Measured: `350` + // Estimated: `31015` + // Minimum execution time: 36_600_000 picoseconds. + Weight::from_parts(37_059_000, 0) + .saturating_add(Weight::from_parts(0, 31015)) .saturating_add(T::DbWeight::get().reads(9)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) - // Storage: Paras ParaLifecycles (r:1 w:0) - // Storage: Hrmp HrmpIngressChannelsIndex (r:1 w:0) - // Storage: Hrmp HrmpAcceptedChannelRequestCount (r:1 w:1) - // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) - // Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequests (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpIngressChannelsIndex (r:1 w:0) + /// Proof Skipped: Hrmp HrmpIngressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpAcceptedChannelRequestCount (r:1 w:1) + /// Proof Skipped: Hrmp HrmpAcceptedChannelRequestCount (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) fn hrmp_accept_open_channel() -> Weight { - // Minimum execution time: 42_718 nanoseconds. - Weight::from_ref_time(43_252_000) + // Proof Size summary in bytes: + // Measured: `582` + // Estimated: `24282` + // Minimum execution time: 39_338_000 picoseconds. + Weight::from_parts(39_683_000, 0) + .saturating_add(Weight::from_parts(0, 24282)) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Hrmp HrmpChannels (r:1 w:0) - // Storage: Hrmp HrmpCloseChannelRequests (r:1 w:1) - // Storage: Hrmp HrmpCloseChannelRequestsList (r:1 w:1) - // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) - // Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Storage: Hrmp HrmpChannels (r:1 w:0) + /// Proof Skipped: Hrmp HrmpChannels (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpCloseChannelRequests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpCloseChannelRequests (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpCloseChannelRequestsList (r:1 w:1) + /// Proof Skipped: Hrmp HrmpCloseChannelRequestsList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) fn hrmp_close_channel() -> Weight { - // Minimum execution time: 37_998 nanoseconds. - Weight::from_ref_time(38_684_000) + // Proof Size summary in bytes: + // Measured: `453` + // Estimated: `17610` + // Minimum execution time: 33_003_000 picoseconds. + Weight::from_parts(33_497_000, 0) + .saturating_add(Weight::from_parts(0, 17610)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Hrmp HrmpIngressChannelsIndex (r:128 w:127) - // Storage: Hrmp HrmpEgressChannelsIndex (r:1 w:1) - // Storage: Hrmp HrmpChannels (r:127 w:127) - // Storage: Hrmp HrmpAcceptedChannelRequestCount (r:0 w:1) - // Storage: Hrmp HrmpChannelContents (r:0 w:127) - // Storage: Hrmp HrmpOpenChannelRequestCount (r:0 w:1) + /// Storage: Hrmp HrmpIngressChannelsIndex (r:128 w:128) + /// Proof Skipped: Hrmp HrmpIngressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpEgressChannelsIndex (r:128 w:128) + /// Proof Skipped: Hrmp HrmpEgressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannels (r:254 w:254) + /// Proof Skipped: Hrmp HrmpChannels (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpAcceptedChannelRequestCount (r:0 w:1) + /// Proof Skipped: Hrmp HrmpAcceptedChannelRequestCount (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannelContents (r:0 w:254) + /// Proof Skipped: Hrmp HrmpChannelContents (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestCount (r:0 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestCount (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[0, 127]`. /// The range of component `e` is `[0, 127]`. fn force_clean_hrmp(i: u32, e: u32, ) -> Weight { - // Minimum execution time: 909_321 nanoseconds. - Weight::from_ref_time(915_087_000) - // Standard Error: 83_426 - .saturating_add(Weight::from_ref_time(2_776_230).saturating_mul(i.into())) - // Standard Error: 83_426 - .saturating_add(Weight::from_ref_time(2_860_951).saturating_mul(e.into())) + // Proof Size summary in bytes: + // Measured: `197 + i * (100 ±0) + e * (100 ±0)` + // Estimated: `9084 + i * (5550 ±0) + e * (5550 ±0)` + // Minimum execution time: 1_069_168_000 picoseconds. + Weight::from_parts(1_080_360_000, 0) + .saturating_add(Weight::from_parts(0, 9084)) + // Standard Error: 96_878 + .saturating_add(Weight::from_parts(3_125_436, 0).saturating_mul(i.into())) + // Standard Error: 96_878 + .saturating_add(Weight::from_parts(3_120_319, 0).saturating_mul(e.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(i.into()))) .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(e.into()))) .saturating_add(T::DbWeight::get().writes(4)) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(i.into()))) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(e.into()))) + .saturating_add(Weight::from_parts(0, 5550).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(0, 5550).saturating_mul(e.into())) } - // Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:0) - // Storage: Hrmp HrmpOpenChannelRequests (r:2 w:2) - // Storage: Paras ParaLifecycles (r:4 w:0) - // Storage: Hrmp HrmpIngressChannelsIndex (r:2 w:2) - // Storage: Hrmp HrmpEgressChannelsIndex (r:2 w:2) - // Storage: Hrmp HrmpOpenChannelRequestCount (r:2 w:2) - // Storage: Hrmp HrmpAcceptedChannelRequestCount (r:2 w:2) - // Storage: Hrmp HrmpChannels (r:0 w:2) + /// Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestsList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequests (r:128 w:128) + /// Proof Skipped: Hrmp HrmpOpenChannelRequests (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:256 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpIngressChannelsIndex (r:128 w:128) + /// Proof Skipped: Hrmp HrmpIngressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpEgressChannelsIndex (r:128 w:128) + /// Proof Skipped: Hrmp HrmpEgressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestCount (r:128 w:128) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestCount (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpAcceptedChannelRequestCount (r:128 w:128) + /// Proof Skipped: Hrmp HrmpAcceptedChannelRequestCount (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannels (r:0 w:128) + /// Proof Skipped: Hrmp HrmpChannels (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[0, 128]`. fn force_process_hrmp_open(c: u32, ) -> Weight { - // Minimum execution time: 9_996 nanoseconds. - Weight::from_ref_time(10_102_000) - // Standard Error: 12_007 - .saturating_add(Weight::from_ref_time(16_486_194).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `425 + c * (136 ±0)` + // Estimated: `10753 + c * (18413 ±0)` + // Minimum execution time: 7_019_000 picoseconds. + Weight::from_parts(3_329_027, 0) + .saturating_add(Weight::from_parts(0, 10753)) + // Standard Error: 19_293 + .saturating_add(Weight::from_parts(18_922_500, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().reads((7_u64).saturating_mul(c.into()))) .saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes((6_u64).saturating_mul(c.into()))) + .saturating_add(Weight::from_parts(0, 18413).saturating_mul(c.into())) } - // Storage: Hrmp HrmpCloseChannelRequestsList (r:1 w:0) - // Storage: Hrmp HrmpChannels (r:2 w:2) - // Storage: Hrmp HrmpEgressChannelsIndex (r:2 w:2) - // Storage: Hrmp HrmpIngressChannelsIndex (r:2 w:2) - // Storage: Hrmp HrmpCloseChannelRequests (r:0 w:2) - // Storage: Hrmp HrmpChannelContents (r:0 w:2) + /// Storage: Hrmp HrmpCloseChannelRequestsList (r:1 w:1) + /// Proof Skipped: Hrmp HrmpCloseChannelRequestsList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannels (r:128 w:128) + /// Proof Skipped: Hrmp HrmpChannels (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpEgressChannelsIndex (r:128 w:128) + /// Proof Skipped: Hrmp HrmpEgressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpIngressChannelsIndex (r:128 w:128) + /// Proof Skipped: Hrmp HrmpIngressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpCloseChannelRequests (r:0 w:128) + /// Proof Skipped: Hrmp HrmpCloseChannelRequests (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannelContents (r:0 w:128) + /// Proof Skipped: Hrmp HrmpChannelContents (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[0, 128]`. fn force_process_hrmp_close(c: u32, ) -> Weight { - // Minimum execution time: 6_544 nanoseconds. - Weight::from_ref_time(281_356) - // Standard Error: 14_533 - .saturating_add(Weight::from_ref_time(10_078_230).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `268 + c * (124 ±0)` + // Estimated: `5973 + c * (8175 ±0)` + // Minimum execution time: 5_563_000 picoseconds. + Weight::from_parts(3_789_883, 0) + .saturating_add(Weight::from_parts(0, 5973)) + // Standard Error: 14_257 + .saturating_add(Weight::from_parts(11_414_412, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(c.into()))) .saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes((5_u64).saturating_mul(c.into()))) + .saturating_add(Weight::from_parts(0, 8175).saturating_mul(c.into())) } - // Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) - // Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) - // Storage: Hrmp HrmpOpenChannelRequestCount (r:1 w:1) + /// Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestsList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequests (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestCount (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestCount (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[0, 128]`. fn hrmp_cancel_open_request(c: u32, ) -> Weight { - // Minimum execution time: 26_209 nanoseconds. - Weight::from_ref_time(32_345_013) - // Standard Error: 1_395 - .saturating_add(Weight::from_ref_time(94_298).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `959 + c * (13 ±0)` + // Estimated: `10704 + c * (45 ±0)` + // Minimum execution time: 20_994_000 picoseconds. + Weight::from_parts(25_773_807, 0) + .saturating_add(Weight::from_parts(0, 10704)) + // Standard Error: 1_554 + .saturating_add(Weight::from_parts(79_758, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 45).saturating_mul(c.into())) } - // Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) - // Storage: Hrmp HrmpOpenChannelRequests (r:2 w:2) + /// Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestsList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequests (r:128 w:128) + /// Proof Skipped: Hrmp HrmpOpenChannelRequests (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[0, 128]`. fn clean_open_channel_requests(c: u32, ) -> Weight { - // Minimum execution time: 4_814 nanoseconds. - Weight::from_ref_time(3_057_523) - // Standard Error: 5_053 - .saturating_add(Weight::from_ref_time(2_736_286).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `176 + c * (63 ±0)` + // Estimated: `2821 + c * (2602 ±0)` + // Minimum execution time: 4_414_000 picoseconds. + Weight::from_parts(4_215_377, 0) + .saturating_add(Weight::from_parts(0, 2821)) + // Standard Error: 3_931 + .saturating_add(Weight::from_parts(3_107_864, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(c.into()))) .saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(c.into()))) + .saturating_add(Weight::from_parts(0, 2602).saturating_mul(c.into())) } - // Storage: Paras ParaLifecycles (r:2 w:0) - // Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) - // Storage: Hrmp HrmpChannels (r:1 w:0) - // Storage: Hrmp HrmpEgressChannelsIndex (r:1 w:0) - // Storage: Hrmp HrmpOpenChannelRequestCount (r:1 w:1) - // Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) - // Storage: Dmp DownwardMessageQueueHeads (r:2 w:2) - // Storage: Dmp DownwardMessageQueues (r:2 w:2) - // Storage: Hrmp HrmpIngressChannelsIndex (r:1 w:0) - // Storage: Hrmp HrmpAcceptedChannelRequestCount (r:1 w:1) + /// Storage: Paras ParaLifecycles (r:2 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequests (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannels (r:1 w:0) + /// Proof Skipped: Hrmp HrmpChannels (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpEgressChannelsIndex (r:1 w:0) + /// Proof Skipped: Hrmp HrmpEgressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestCount (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestCount (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestsList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:2 w:2) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:2 w:2) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpIngressChannelsIndex (r:1 w:0) + /// Proof Skipped: Hrmp HrmpIngressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpAcceptedChannelRequestCount (r:1 w:1) + /// Proof Skipped: Hrmp HrmpAcceptedChannelRequestCount (max_values: None, max_size: None, mode: Measured) fn force_open_hrmp_channel() -> Weight { - // Minimum execution time: 53_933 nanoseconds. - Weight::from_ref_time(55_942_000) + // Proof Size summary in bytes: + // Measured: `350` + // Estimated: `43595` + // Minimum execution time: 51_336_000 picoseconds. + Weight::from_parts(51_833_000, 0) + .saturating_add(Weight::from_parts(0, 43595)) .saturating_add(T::DbWeight::get().reads(13)) .saturating_add(T::DbWeight::get().writes(8)) } diff --git a/runtime/kusama/src/weights/runtime_parachains_initializer.rs b/runtime/kusama/src/weights/runtime_parachains_initializer.rs index a88e4e76b92e..c49364c816fc 100644 --- a/runtime/kusama/src/weights/runtime_parachains_initializer.rs +++ b/runtime/kusama/src/weights/runtime_parachains_initializer.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_parachains::initializer` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,14 +45,20 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_parachains::initializer`. pub struct WeightInfo(PhantomData); impl runtime_parachains::initializer::WeightInfo for WeightInfo { - // Storage: System Digest (r:1 w:1) + /// Storage: System Digest (r:1 w:1) + /// Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `d` is `[0, 65536]`. fn force_approve(d: u32, ) -> Weight { - // Minimum execution time: 7_959 nanoseconds. - Weight::from_ref_time(10_697_366) - // Standard Error: 6 - .saturating_add(Weight::from_ref_time(1_327).saturating_mul(d.into())) + // Proof Size summary in bytes: + // Measured: `0 + d * (11 ±0)` + // Estimated: `1480 + d * (11 ±0)` + // Minimum execution time: 3_910_000 picoseconds. + Weight::from_parts(6_817_637, 0) + .saturating_add(Weight::from_parts(0, 1480)) + // Standard Error: 4 + .saturating_add(Weight::from_parts(1_287, 0).saturating_mul(d.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 11).saturating_mul(d.into())) } } diff --git a/runtime/kusama/src/weights/runtime_parachains_paras.rs b/runtime/kusama/src/weights/runtime_parachains_paras.rs index 559555f6f8c5..48ee66b8f4f4 100644 --- a/runtime/kusama/src/weights/runtime_parachains_paras.rs +++ b/runtime/kusama/src/weights/runtime_parachains_paras.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_parachains::paras` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,148 +45,232 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_parachains::paras`. pub struct WeightInfo(PhantomData); impl runtime_parachains::paras::WeightInfo for WeightInfo { - // Storage: Paras CurrentCodeHash (r:1 w:1) - // Storage: Paras CodeByHashRefs (r:1 w:1) - // Storage: Paras PastCodeMeta (r:1 w:1) - // Storage: Paras PastCodePruning (r:1 w:1) - // Storage: Paras PastCodeHash (r:0 w:1) - // Storage: Paras CodeByHash (r:0 w:1) + /// Storage: Paras CurrentCodeHash (r:1 w:1) + /// Proof Skipped: Paras CurrentCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHashRefs (r:1 w:1) + /// Proof Skipped: Paras CodeByHashRefs (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras PastCodeMeta (r:1 w:1) + /// Proof Skipped: Paras PastCodeMeta (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras PastCodePruning (r:1 w:1) + /// Proof Skipped: Paras PastCodePruning (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PastCodeHash (r:0 w:1) + /// Proof Skipped: Paras PastCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHash (r:0 w:1) + /// Proof Skipped: Paras CodeByHash (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[1, 3145728]`. fn force_set_current_code(c: u32, ) -> Weight { - // Minimum execution time: 35_426 nanoseconds. - Weight::from_ref_time(35_644_000) + // Proof Size summary in bytes: + // Measured: `8309` + // Estimated: `61734` + // Minimum execution time: 31_689_000 picoseconds. + Weight::from_parts(32_304_000, 0) + .saturating_add(Weight::from_parts(0, 61734)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(2_312).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(1_953, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: Paras Heads (r:0 w:1) + /// Storage: Paras Heads (r:0 w:1) + /// Proof Skipped: Paras Heads (max_values: None, max_size: None, mode: Measured) /// The range of component `s` is `[1, 1048576]`. fn force_set_current_head(s: u32, ) -> Weight { - // Minimum execution time: 13_105 nanoseconds. - Weight::from_ref_time(13_469_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 8_257_000 picoseconds. + Weight::from_parts(8_433_000, 0) + .saturating_add(Weight::from_parts(0, 0)) // Standard Error: 2 - .saturating_add(Weight::from_ref_time(907).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(868, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Paras FutureCodeHash (r:1 w:1) - // Storage: Paras CurrentCodeHash (r:1 w:0) - // Storage: Paras UpgradeCooldowns (r:1 w:1) - // Storage: Paras PvfActiveVoteMap (r:1 w:0) - // Storage: Paras CodeByHash (r:1 w:1) - // Storage: Paras UpcomingUpgrades (r:1 w:1) - // Storage: System Digest (r:1 w:1) - // Storage: Paras CodeByHashRefs (r:1 w:1) - // Storage: Paras FutureCodeUpgrades (r:0 w:1) - // Storage: Paras UpgradeRestrictionSignal (r:0 w:1) + /// Storage: Paras FutureCodeHash (r:1 w:1) + /// Proof Skipped: Paras FutureCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CurrentCodeHash (r:1 w:0) + /// Proof Skipped: Paras CurrentCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeCooldowns (r:1 w:1) + /// Proof Skipped: Paras UpgradeCooldowns (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:0) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHash (r:1 w:1) + /// Proof Skipped: Paras CodeByHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpcomingUpgrades (r:1 w:1) + /// Proof Skipped: Paras UpcomingUpgrades (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System Digest (r:1 w:1) + /// Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras CodeByHashRefs (r:1 w:1) + /// Proof Skipped: Paras CodeByHashRefs (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras FutureCodeUpgrades (r:0 w:1) + /// Proof Skipped: Paras FutureCodeUpgrades (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeRestrictionSignal (r:0 w:1) + /// Proof Skipped: Paras UpgradeRestrictionSignal (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[1, 3145728]`. fn force_schedule_code_upgrade(c: u32, ) -> Weight { - // Minimum execution time: 59_910 nanoseconds. - Weight::from_ref_time(60_418_000) + // Proof Size summary in bytes: + // Measured: `16462` + // Estimated: `186400` + // Minimum execution time: 56_247_000 picoseconds. + Weight::from_parts(56_549_000, 0) + .saturating_add(Weight::from_parts(0, 186400)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(2_339).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(1_984, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(8)) } - // Storage: Paras FutureCodeUpgrades (r:1 w:0) - // Storage: Paras Heads (r:0 w:1) - // Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Storage: Paras FutureCodeUpgrades (r:1 w:0) + /// Proof Skipped: Paras FutureCodeUpgrades (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras Heads (r:0 w:1) + /// Proof Skipped: Paras Heads (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Proof Skipped: Paras UpgradeGoAheadSignal (max_values: None, max_size: None, mode: Measured) /// The range of component `s` is `[1, 1048576]`. fn force_note_new_head(s: u32, ) -> Weight { - // Minimum execution time: 19_218 nanoseconds. - Weight::from_ref_time(19_527_000) - // Standard Error: 2 - .saturating_add(Weight::from_ref_time(909).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `95` + // Estimated: `3750` + // Minimum execution time: 13_546_000 picoseconds. + Weight::from_parts(13_706_000, 0) + .saturating_add(Weight::from_parts(0, 3750)) + // Standard Error: 1 + .saturating_add(Weight::from_parts(860, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) fn force_queue_action() -> Weight { - // Minimum execution time: 23_698 nanoseconds. - Weight::from_ref_time(24_173_000) + // Proof Size summary in bytes: + // Measured: `4251` + // Estimated: `13452` + // Minimum execution time: 18_545_000 picoseconds. + Weight::from_parts(19_736_000, 0) + .saturating_add(Weight::from_parts(0, 13452)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Paras PvfActiveVoteMap (r:1 w:0) - // Storage: Paras CodeByHash (r:1 w:1) + /// Storage: Paras PvfActiveVoteMap (r:1 w:0) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHash (r:1 w:1) + /// Proof Skipped: Paras CodeByHash (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[1, 3145728]`. fn add_trusted_validation_code(c: u32, ) -> Weight { - // Minimum execution time: 8_621 nanoseconds. - Weight::from_ref_time(8_888_000) + // Proof Size summary in bytes: + // Measured: `28` + // Estimated: `6986` + // Minimum execution time: 7_917_000 picoseconds. + Weight::from_parts(8_117_000, 0) + .saturating_add(Weight::from_parts(0, 6986)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(2_322).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(1_970, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Paras CodeByHashRefs (r:1 w:0) - // Storage: Paras CodeByHash (r:0 w:1) + /// Storage: Paras CodeByHashRefs (r:1 w:0) + /// Proof Skipped: Paras CodeByHashRefs (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHash (r:0 w:1) + /// Proof Skipped: Paras CodeByHash (max_values: None, max_size: None, mode: Measured) fn poke_unused_validation_code() -> Weight { - // Minimum execution time: 7_096 nanoseconds. - Weight::from_ref_time(7_275_000) + // Proof Size summary in bytes: + // Measured: `28` + // Estimated: `3521` + // Minimum execution time: 5_680_000 picoseconds. + Weight::from_parts(5_933_000, 0) + .saturating_add(Weight::from_parts(0, 3521)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras PvfActiveVoteMap (r:1 w:1) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:1) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) fn include_pvf_check_statement() -> Weight { - // Minimum execution time: 92_359 nanoseconds. - Weight::from_ref_time(95_978_000) + // Proof Size summary in bytes: + // Measured: `26645` + // Estimated: `86370` + // Minimum execution time: 88_543_000 picoseconds. + Weight::from_parts(90_632_000, 0) + .saturating_add(Weight::from_parts(0, 86370)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras PvfActiveVoteMap (r:1 w:1) - // Storage: Paras PvfActiveVoteList (r:1 w:1) - // Storage: Paras UpcomingUpgrades (r:1 w:1) - // Storage: System Digest (r:1 w:1) - // Storage: Paras FutureCodeUpgrades (r:0 w:100) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:1) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteList (r:1 w:1) + /// Proof Skipped: Paras PvfActiveVoteList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras UpcomingUpgrades (r:1 w:1) + /// Proof Skipped: Paras UpcomingUpgrades (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System Digest (r:1 w:1) + /// Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras FutureCodeUpgrades (r:0 w:100) + /// Proof Skipped: Paras FutureCodeUpgrades (max_values: None, max_size: None, mode: Measured) fn include_pvf_check_statement_finalize_upgrade_accept() -> Weight { - // Minimum execution time: 658_136 nanoseconds. - Weight::from_ref_time(664_717_000) + // Proof Size summary in bytes: + // Measured: `27199` + // Estimated: `201283` + // Minimum execution time: 766_572_000 picoseconds. + Weight::from_parts(775_372_000, 0) + .saturating_add(Weight::from_parts(0, 201283)) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(104)) } - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras PvfActiveVoteMap (r:1 w:1) - // Storage: Paras PvfActiveVoteList (r:1 w:1) - // Storage: Paras CodeByHashRefs (r:1 w:1) - // Storage: Paras CodeByHash (r:0 w:1) - // Storage: Paras UpgradeGoAheadSignal (r:0 w:100) - // Storage: Paras FutureCodeHash (r:0 w:100) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:1) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) fn include_pvf_check_statement_finalize_upgrade_reject() -> Weight { - // Minimum execution time: 622_504 nanoseconds. - Weight::from_ref_time(635_371_000) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(204)) + // Proof Size summary in bytes: + // Measured: `27177` + // Estimated: `87966` + // Minimum execution time: 87_380_000 picoseconds. + Weight::from_parts(88_804_000, 0) + .saturating_add(Weight::from_parts(0, 87966)) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras PvfActiveVoteMap (r:1 w:1) - // Storage: Paras PvfActiveVoteList (r:1 w:1) - // Storage: Paras ActionsQueue (r:1 w:1) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:1) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteList (r:1 w:1) + /// Proof Skipped: Paras PvfActiveVoteList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) fn include_pvf_check_statement_finalize_onboarding_accept() -> Weight { - // Minimum execution time: 508_515 nanoseconds. - Weight::from_ref_time(512_280_000) + // Proof Size summary in bytes: + // Measured: `26667` + // Estimated: `144720` + // Minimum execution time: 599_249_000 picoseconds. + Weight::from_parts(607_707_000, 0) + .saturating_add(Weight::from_parts(0, 144720)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras PvfActiveVoteMap (r:1 w:1) - // Storage: Paras PvfActiveVoteList (r:1 w:1) - // Storage: Paras CodeByHashRefs (r:1 w:1) - // Storage: Paras ParaLifecycles (r:0 w:100) - // Storage: Paras CodeByHash (r:0 w:1) - // Storage: Paras CurrentCodeHash (r:0 w:100) - // Storage: Paras UpcomingParasGenesis (r:0 w:100) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:1) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) fn include_pvf_check_statement_finalize_onboarding_reject() -> Weight { - // Minimum execution time: 693_143 nanoseconds. - Weight::from_ref_time(706_638_000) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(304)) + // Proof Size summary in bytes: + // Measured: `26645` + // Estimated: `86370` + // Minimum execution time: 87_013_000 picoseconds. + Weight::from_parts(88_543_000, 0) + .saturating_add(Weight::from_parts(0, 86370)) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/runtime/kusama/src/weights/runtime_parachains_paras_inherent.rs b/runtime/kusama/src/weights/runtime_parachains_paras_inherent.rs index 51ce0bb2da3b..c4742da4e5cb 100644 --- a/runtime/kusama/src/weights/runtime_parachains_paras_inherent.rs +++ b/runtime/kusama/src/weights/runtime_parachains_paras_inherent.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_parachains::paras_inherent` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -44,158 +45,300 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_parachains::paras_inherent`. pub struct WeightInfo(PhantomData); impl runtime_parachains::paras_inherent::WeightInfo for WeightInfo { - // Storage: ParaInherent Included (r:1 w:1) - // Storage: System ParentHash (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Babe AuthorVrfRandomness (r:1 w:0) - // Storage: ParaSessionInfo Sessions (r:1 w:0) - // Storage: ParasDisputes Disputes (r:1 w:1) - // Storage: ParasDisputes Included (r:1 w:1) - // Storage: ParasDisputes SpamSlots (r:1 w:1) - // Storage: ParaScheduler AvailabilityCores (r:1 w:1) - // Storage: ParaSessionInfo AccountKeys (r:1 w:0) - // Storage: Session Validators (r:1 w:0) - // Storage: Staking ActiveEra (r:1 w:0) - // Storage: Staking ErasRewardPoints (r:1 w:1) - // Storage: ParasDisputes Frozen (r:1 w:0) - // Storage: ParaInclusion PendingAvailability (r:2 w:1) - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: Paras Parachains (r:1 w:0) - // Storage: ParaInclusion PendingAvailabilityCommitments (r:1 w:1) - // Storage: Dmp DownwardMessageQueues (r:1 w:1) - // Storage: Hrmp HrmpChannelDigests (r:1 w:1) - // Storage: Paras FutureCodeUpgrades (r:1 w:0) - // Storage: ParaInherent OnChainVotes (r:1 w:1) - // Storage: ParaScheduler SessionStartBlock (r:1 w:0) - // Storage: ParaScheduler ParathreadQueue (r:1 w:1) - // Storage: ParaScheduler Scheduled (r:1 w:1) - // Storage: ParaScheduler ValidatorGroups (r:1 w:0) - // Storage: Ump NeedsDispatch (r:1 w:1) - // Storage: Ump NextDispatchRoundStartWith (r:1 w:1) - // Storage: Hrmp HrmpWatermarks (r:0 w:1) - // Storage: Paras Heads (r:0 w:1) - // Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Storage: ParaInherent Included (r:1 w:1) + /// Proof Skipped: ParaInherent Included (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System ParentHash (r:1 w:0) + /// Proof: System ParentHash (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Babe AuthorVrfRandomness (r:1 w:0) + /// Proof: Babe AuthorVrfRandomness (max_values: Some(1), max_size: Some(33), added: 528, mode: MaxEncodedLen) + /// Storage: ParaSessionInfo Sessions (r:1 w:0) + /// Proof Skipped: ParaSessionInfo Sessions (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasDisputes Disputes (r:1 w:1) + /// Proof Skipped: ParasDisputes Disputes (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasDisputes BackersOnDisputes (r:1 w:1) + /// Proof Skipped: ParasDisputes BackersOnDisputes (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaScheduler AvailabilityCores (r:1 w:1) + /// Proof Skipped: ParaScheduler AvailabilityCores (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasDisputes Included (r:1 w:1) + /// Proof Skipped: ParasDisputes Included (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaSessionInfo AccountKeys (r:1 w:0) + /// Proof Skipped: ParaSessionInfo AccountKeys (max_values: None, max_size: None, mode: Measured) + /// Storage: Session Validators (r:1 w:0) + /// Proof Skipped: Session Validators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Staking ActiveEra (r:1 w:0) + /// Proof: Staking ActiveEra (max_values: Some(1), max_size: Some(13), added: 508, mode: MaxEncodedLen) + /// Storage: Staking ErasRewardPoints (r:1 w:1) + /// Proof Skipped: Staking ErasRewardPoints (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasDisputes Frozen (r:1 w:0) + /// Proof Skipped: ParasDisputes Frozen (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaInclusion PendingAvailability (r:2 w:1) + /// Proof Skipped: ParaInclusion PendingAvailability (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras Parachains (r:1 w:0) + /// Proof Skipped: Paras Parachains (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaInclusion PendingAvailabilityCommitments (r:1 w:1) + /// Proof Skipped: ParaInclusion PendingAvailabilityCommitments (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannelDigests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpChannelDigests (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras FutureCodeUpgrades (r:1 w:0) + /// Proof Skipped: Paras FutureCodeUpgrades (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaInherent OnChainVotes (r:1 w:1) + /// Proof Skipped: ParaInherent OnChainVotes (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler SessionStartBlock (r:1 w:0) + /// Proof Skipped: ParaScheduler SessionStartBlock (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler ParathreadQueue (r:1 w:1) + /// Proof Skipped: ParaScheduler ParathreadQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler Scheduled (r:1 w:1) + /// Proof Skipped: ParaScheduler Scheduled (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler ValidatorGroups (r:1 w:0) + /// Proof Skipped: ParaScheduler ValidatorGroups (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Ump NeedsDispatch (r:1 w:1) + /// Proof Skipped: Ump NeedsDispatch (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Ump NextDispatchRoundStartWith (r:1 w:1) + /// Proof Skipped: Ump NextDispatchRoundStartWith (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Hrmp HrmpWatermarks (r:0 w:1) + /// Proof Skipped: Hrmp HrmpWatermarks (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras Heads (r:0 w:1) + /// Proof Skipped: Paras Heads (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Proof Skipped: Paras UpgradeGoAheadSignal (max_values: None, max_size: None, mode: Measured) /// The range of component `v` is `[10, 200]`. fn enter_variable_disputes(v: u32, ) -> Weight { - // Minimum execution time: 817_374 nanoseconds. - Weight::from_ref_time(355_653_989) - // Standard Error: 26_635 - .saturating_add(Weight::from_ref_time(48_169_665).saturating_mul(v.into())) - .saturating_add(T::DbWeight::get().reads(29)) - .saturating_add(T::DbWeight::get().writes(18)) + // Proof Size summary in bytes: + // Measured: `50748` + // Estimated: `1483464 + v * (23 ±0)` + // Minimum execution time: 769_729_000 picoseconds. + Weight::from_parts(297_815_591, 0) + .saturating_add(Weight::from_parts(0, 1483464)) + // Standard Error: 29_486 + .saturating_add(Weight::from_parts(48_796_195, 0).saturating_mul(v.into())) + .saturating_add(T::DbWeight::get().reads(28)) + .saturating_add(T::DbWeight::get().writes(16)) + .saturating_add(Weight::from_parts(0, 23).saturating_mul(v.into())) } - // Storage: ParaInherent Included (r:1 w:1) - // Storage: System ParentHash (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Babe AuthorVrfRandomness (r:1 w:0) - // Storage: ParaScheduler AvailabilityCores (r:1 w:1) - // Storage: ParasDisputes Frozen (r:1 w:0) - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: Paras Parachains (r:1 w:0) - // Storage: ParaInclusion PendingAvailability (r:2 w:1) - // Storage: ParaInclusion PendingAvailabilityCommitments (r:1 w:1) - // Storage: ParaSessionInfo AccountKeys (r:1 w:0) - // Storage: Session Validators (r:1 w:0) - // Storage: Staking ActiveEra (r:1 w:0) - // Storage: Staking ErasRewardPoints (r:1 w:1) - // Storage: Dmp DownwardMessageQueues (r:1 w:1) - // Storage: Hrmp HrmpChannelDigests (r:1 w:1) - // Storage: Paras FutureCodeUpgrades (r:1 w:0) - // Storage: ParaInherent OnChainVotes (r:1 w:1) - // Storage: ParasDisputes Disputes (r:1 w:0) - // Storage: ParaScheduler SessionStartBlock (r:1 w:0) - // Storage: ParaScheduler ParathreadQueue (r:1 w:1) - // Storage: ParaScheduler Scheduled (r:1 w:1) - // Storage: ParaScheduler ValidatorGroups (r:1 w:0) - // Storage: Ump NeedsDispatch (r:1 w:1) - // Storage: Ump NextDispatchRoundStartWith (r:1 w:1) - // Storage: ParaInclusion AvailabilityBitfields (r:0 w:1) - // Storage: ParasDisputes Included (r:0 w:1) - // Storage: Hrmp HrmpWatermarks (r:0 w:1) - // Storage: Paras Heads (r:0 w:1) - // Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Storage: ParaInherent Included (r:1 w:1) + /// Proof Skipped: ParaInherent Included (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System ParentHash (r:1 w:0) + /// Proof: System ParentHash (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Babe AuthorVrfRandomness (r:1 w:0) + /// Proof: Babe AuthorVrfRandomness (max_values: Some(1), max_size: Some(33), added: 528, mode: MaxEncodedLen) + /// Storage: ParaScheduler AvailabilityCores (r:1 w:1) + /// Proof Skipped: ParaScheduler AvailabilityCores (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasDisputes Frozen (r:1 w:0) + /// Proof Skipped: ParasDisputes Frozen (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras Parachains (r:1 w:0) + /// Proof Skipped: Paras Parachains (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaInclusion PendingAvailability (r:2 w:1) + /// Proof Skipped: ParaInclusion PendingAvailability (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaInclusion PendingAvailabilityCommitments (r:1 w:1) + /// Proof Skipped: ParaInclusion PendingAvailabilityCommitments (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaSessionInfo AccountKeys (r:1 w:0) + /// Proof Skipped: ParaSessionInfo AccountKeys (max_values: None, max_size: None, mode: Measured) + /// Storage: Session Validators (r:1 w:0) + /// Proof Skipped: Session Validators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Staking ActiveEra (r:1 w:0) + /// Proof: Staking ActiveEra (max_values: Some(1), max_size: Some(13), added: 508, mode: MaxEncodedLen) + /// Storage: Staking ErasRewardPoints (r:1 w:1) + /// Proof Skipped: Staking ErasRewardPoints (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannelDigests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpChannelDigests (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras FutureCodeUpgrades (r:1 w:0) + /// Proof Skipped: Paras FutureCodeUpgrades (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaInherent OnChainVotes (r:1 w:1) + /// Proof Skipped: ParaInherent OnChainVotes (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasDisputes Disputes (r:1 w:0) + /// Proof Skipped: ParasDisputes Disputes (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaScheduler SessionStartBlock (r:1 w:0) + /// Proof Skipped: ParaScheduler SessionStartBlock (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler ParathreadQueue (r:1 w:1) + /// Proof Skipped: ParaScheduler ParathreadQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler Scheduled (r:1 w:1) + /// Proof Skipped: ParaScheduler Scheduled (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler ValidatorGroups (r:1 w:0) + /// Proof Skipped: ParaScheduler ValidatorGroups (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Ump NeedsDispatch (r:1 w:1) + /// Proof Skipped: Ump NeedsDispatch (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Ump NextDispatchRoundStartWith (r:1 w:1) + /// Proof Skipped: Ump NextDispatchRoundStartWith (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaInclusion AvailabilityBitfields (r:0 w:1) + /// Proof Skipped: ParaInclusion AvailabilityBitfields (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasDisputes Included (r:0 w:1) + /// Proof Skipped: ParasDisputes Included (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpWatermarks (r:0 w:1) + /// Proof Skipped: Hrmp HrmpWatermarks (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras Heads (r:0 w:1) + /// Proof Skipped: Paras Heads (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Proof Skipped: Paras UpgradeGoAheadSignal (max_values: None, max_size: None, mode: Measured) fn enter_bitfields() -> Weight { - // Minimum execution time: 333_179 nanoseconds. - Weight::from_ref_time(342_407_000) + // Proof Size summary in bytes: + // Measured: `42582` + // Estimated: `1205232` + // Minimum execution time: 328_321_000 picoseconds. + Weight::from_parts(342_358_000, 0) + .saturating_add(Weight::from_parts(0, 1205232)) .saturating_add(T::DbWeight::get().reads(26)) .saturating_add(T::DbWeight::get().writes(17)) } - // Storage: ParaInherent Included (r:1 w:1) - // Storage: System ParentHash (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Babe AuthorVrfRandomness (r:1 w:0) - // Storage: ParaScheduler AvailabilityCores (r:1 w:1) - // Storage: ParasDisputes Frozen (r:1 w:0) - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: Paras Parachains (r:1 w:0) - // Storage: ParaInclusion PendingAvailability (r:2 w:1) - // Storage: ParaInclusion PendingAvailabilityCommitments (r:1 w:1) - // Storage: ParaSessionInfo AccountKeys (r:1 w:0) - // Storage: Session Validators (r:1 w:0) - // Storage: Staking ActiveEra (r:1 w:0) - // Storage: Staking ErasRewardPoints (r:1 w:1) - // Storage: Dmp DownwardMessageQueues (r:1 w:1) - // Storage: Hrmp HrmpChannelDigests (r:1 w:1) - // Storage: Paras FutureCodeUpgrades (r:1 w:0) - // Storage: ParaInherent OnChainVotes (r:1 w:1) - // Storage: ParasDisputes Disputes (r:2 w:0) - // Storage: ParaScheduler SessionStartBlock (r:1 w:0) - // Storage: ParaScheduler ParathreadQueue (r:1 w:1) - // Storage: ParaScheduler Scheduled (r:1 w:1) - // Storage: ParaScheduler ValidatorGroups (r:1 w:0) - // Storage: Paras CurrentCodeHash (r:1 w:0) - // Storage: Ump RelayDispatchQueueSize (r:1 w:0) - // Storage: Ump NeedsDispatch (r:1 w:1) - // Storage: Ump NextDispatchRoundStartWith (r:1 w:1) - // Storage: ParasDisputes Included (r:0 w:1) - // Storage: Hrmp HrmpWatermarks (r:0 w:1) - // Storage: Paras Heads (r:0 w:1) - // Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Storage: ParaInherent Included (r:1 w:1) + /// Proof Skipped: ParaInherent Included (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System ParentHash (r:1 w:0) + /// Proof: System ParentHash (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Babe AuthorVrfRandomness (r:1 w:0) + /// Proof: Babe AuthorVrfRandomness (max_values: Some(1), max_size: Some(33), added: 528, mode: MaxEncodedLen) + /// Storage: ParaScheduler AvailabilityCores (r:1 w:1) + /// Proof Skipped: ParaScheduler AvailabilityCores (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasDisputes Frozen (r:1 w:0) + /// Proof Skipped: ParasDisputes Frozen (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras Parachains (r:1 w:0) + /// Proof Skipped: Paras Parachains (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaInclusion PendingAvailability (r:2 w:1) + /// Proof Skipped: ParaInclusion PendingAvailability (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaInclusion PendingAvailabilityCommitments (r:1 w:1) + /// Proof Skipped: ParaInclusion PendingAvailabilityCommitments (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaSessionInfo AccountKeys (r:1 w:0) + /// Proof Skipped: ParaSessionInfo AccountKeys (max_values: None, max_size: None, mode: Measured) + /// Storage: Session Validators (r:1 w:0) + /// Proof Skipped: Session Validators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Staking ActiveEra (r:1 w:0) + /// Proof: Staking ActiveEra (max_values: Some(1), max_size: Some(13), added: 508, mode: MaxEncodedLen) + /// Storage: Staking ErasRewardPoints (r:1 w:1) + /// Proof Skipped: Staking ErasRewardPoints (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannelDigests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpChannelDigests (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras FutureCodeUpgrades (r:1 w:0) + /// Proof Skipped: Paras FutureCodeUpgrades (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaInherent OnChainVotes (r:1 w:1) + /// Proof Skipped: ParaInherent OnChainVotes (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasDisputes Disputes (r:2 w:0) + /// Proof Skipped: ParasDisputes Disputes (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaScheduler SessionStartBlock (r:1 w:0) + /// Proof Skipped: ParaScheduler SessionStartBlock (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler ParathreadQueue (r:1 w:1) + /// Proof Skipped: ParaScheduler ParathreadQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler Scheduled (r:1 w:1) + /// Proof Skipped: ParaScheduler Scheduled (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler ValidatorGroups (r:1 w:0) + /// Proof Skipped: ParaScheduler ValidatorGroups (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras CurrentCodeHash (r:1 w:0) + /// Proof Skipped: Paras CurrentCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Ump RelayDispatchQueueSize (r:1 w:0) + /// Proof Skipped: Ump RelayDispatchQueueSize (max_values: None, max_size: None, mode: Measured) + /// Storage: Ump NeedsDispatch (r:1 w:1) + /// Proof Skipped: Ump NeedsDispatch (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Ump NextDispatchRoundStartWith (r:1 w:1) + /// Proof Skipped: Ump NextDispatchRoundStartWith (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasDisputes Included (r:0 w:1) + /// Proof Skipped: ParasDisputes Included (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpWatermarks (r:0 w:1) + /// Proof Skipped: Hrmp HrmpWatermarks (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras Heads (r:0 w:1) + /// Proof Skipped: Paras Heads (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Proof Skipped: Paras UpgradeGoAheadSignal (max_values: None, max_size: None, mode: Measured) /// The range of component `v` is `[101, 200]`. fn enter_backed_candidates_variable(v: u32, ) -> Weight { - // Minimum execution time: 5_626_906 nanoseconds. - Weight::from_ref_time(912_552_914) - // Standard Error: 47_749 - .saturating_add(Weight::from_ref_time(47_636_493).saturating_mul(v.into())) + // Proof Size summary in bytes: + // Measured: `42613` + // Estimated: `1258087` + // Minimum execution time: 5_578_743_000 picoseconds. + Weight::from_parts(810_980_132, 0) + .saturating_add(Weight::from_parts(0, 1258087)) + // Standard Error: 53_608 + .saturating_add(Weight::from_parts(48_048_855, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().reads(29)) .saturating_add(T::DbWeight::get().writes(16)) } - // Storage: ParaInherent Included (r:1 w:1) - // Storage: System ParentHash (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Babe AuthorVrfRandomness (r:1 w:0) - // Storage: ParaScheduler AvailabilityCores (r:1 w:1) - // Storage: ParasDisputes Frozen (r:1 w:0) - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: Paras Parachains (r:1 w:0) - // Storage: ParaInclusion PendingAvailability (r:2 w:1) - // Storage: ParaInclusion PendingAvailabilityCommitments (r:1 w:1) - // Storage: ParaSessionInfo AccountKeys (r:1 w:0) - // Storage: Session Validators (r:1 w:0) - // Storage: Staking ActiveEra (r:1 w:0) - // Storage: Staking ErasRewardPoints (r:1 w:1) - // Storage: Dmp DownwardMessageQueues (r:1 w:1) - // Storage: Hrmp HrmpChannelDigests (r:1 w:1) - // Storage: Paras FutureCodeUpgrades (r:1 w:0) - // Storage: ParaInherent OnChainVotes (r:1 w:1) - // Storage: ParasDisputes Disputes (r:2 w:0) - // Storage: ParaScheduler SessionStartBlock (r:1 w:0) - // Storage: ParaScheduler ParathreadQueue (r:1 w:1) - // Storage: ParaScheduler Scheduled (r:1 w:1) - // Storage: ParaScheduler ValidatorGroups (r:1 w:0) - // Storage: Paras CurrentCodeHash (r:1 w:0) - // Storage: Paras FutureCodeHash (r:1 w:0) - // Storage: Paras UpgradeRestrictionSignal (r:1 w:0) - // Storage: Ump RelayDispatchQueueSize (r:1 w:0) - // Storage: Ump NeedsDispatch (r:1 w:1) - // Storage: Ump NextDispatchRoundStartWith (r:1 w:1) - // Storage: ParasDisputes Included (r:0 w:1) - // Storage: Hrmp HrmpWatermarks (r:0 w:1) - // Storage: Paras Heads (r:0 w:1) - // Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Storage: ParaInherent Included (r:1 w:1) + /// Proof Skipped: ParaInherent Included (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System ParentHash (r:1 w:0) + /// Proof: System ParentHash (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Babe AuthorVrfRandomness (r:1 w:0) + /// Proof: Babe AuthorVrfRandomness (max_values: Some(1), max_size: Some(33), added: 528, mode: MaxEncodedLen) + /// Storage: ParaScheduler AvailabilityCores (r:1 w:1) + /// Proof Skipped: ParaScheduler AvailabilityCores (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasDisputes Frozen (r:1 w:0) + /// Proof Skipped: ParasDisputes Frozen (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras Parachains (r:1 w:0) + /// Proof Skipped: Paras Parachains (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaInclusion PendingAvailability (r:2 w:1) + /// Proof Skipped: ParaInclusion PendingAvailability (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaInclusion PendingAvailabilityCommitments (r:1 w:1) + /// Proof Skipped: ParaInclusion PendingAvailabilityCommitments (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaSessionInfo AccountKeys (r:1 w:0) + /// Proof Skipped: ParaSessionInfo AccountKeys (max_values: None, max_size: None, mode: Measured) + /// Storage: Session Validators (r:1 w:0) + /// Proof Skipped: Session Validators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Staking ActiveEra (r:1 w:0) + /// Proof: Staking ActiveEra (max_values: Some(1), max_size: Some(13), added: 508, mode: MaxEncodedLen) + /// Storage: Staking ErasRewardPoints (r:1 w:1) + /// Proof Skipped: Staking ErasRewardPoints (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannelDigests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpChannelDigests (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras FutureCodeUpgrades (r:1 w:0) + /// Proof Skipped: Paras FutureCodeUpgrades (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaInherent OnChainVotes (r:1 w:1) + /// Proof Skipped: ParaInherent OnChainVotes (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasDisputes Disputes (r:2 w:0) + /// Proof Skipped: ParasDisputes Disputes (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaScheduler SessionStartBlock (r:1 w:0) + /// Proof Skipped: ParaScheduler SessionStartBlock (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler ParathreadQueue (r:1 w:1) + /// Proof Skipped: ParaScheduler ParathreadQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler Scheduled (r:1 w:1) + /// Proof Skipped: ParaScheduler Scheduled (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler ValidatorGroups (r:1 w:0) + /// Proof Skipped: ParaScheduler ValidatorGroups (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras CurrentCodeHash (r:1 w:0) + /// Proof Skipped: Paras CurrentCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras FutureCodeHash (r:1 w:0) + /// Proof Skipped: Paras FutureCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeRestrictionSignal (r:1 w:0) + /// Proof Skipped: Paras UpgradeRestrictionSignal (max_values: None, max_size: None, mode: Measured) + /// Storage: Ump RelayDispatchQueueSize (r:1 w:0) + /// Proof Skipped: Ump RelayDispatchQueueSize (max_values: None, max_size: None, mode: Measured) + /// Storage: Ump NeedsDispatch (r:1 w:1) + /// Proof Skipped: Ump NeedsDispatch (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Ump NextDispatchRoundStartWith (r:1 w:1) + /// Proof Skipped: Ump NextDispatchRoundStartWith (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasDisputes Included (r:0 w:1) + /// Proof Skipped: ParasDisputes Included (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpWatermarks (r:0 w:1) + /// Proof Skipped: Hrmp HrmpWatermarks (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras Heads (r:0 w:1) + /// Proof Skipped: Paras Heads (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Proof Skipped: Paras UpgradeGoAheadSignal (max_values: None, max_size: None, mode: Measured) fn enter_backed_candidate_code_upgrade() -> Weight { - // Minimum execution time: 38_549_462 nanoseconds. - Weight::from_ref_time(38_702_468_000) + // Proof Size summary in bytes: + // Measured: `42640` + // Estimated: `1351053` + // Minimum execution time: 32_728_672_000 picoseconds. + Weight::from_parts(32_934_819_000, 0) + .saturating_add(Weight::from_parts(0, 1351053)) .saturating_add(T::DbWeight::get().reads(31)) .saturating_add(T::DbWeight::get().writes(16)) } diff --git a/runtime/kusama/src/weights/runtime_parachains_ump.rs b/runtime/kusama/src/weights/runtime_parachains_ump.rs index b2849d37ebb9..fe9baf7e3a43 100644 --- a/runtime/kusama/src/weights/runtime_parachains_ump.rs +++ b/runtime/kusama/src/weights/runtime_parachains_ump.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_parachains::ump` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: @@ -46,26 +47,45 @@ pub struct WeightInfo(PhantomData); impl runtime_parachains::ump::WeightInfo for WeightInfo { /// The range of component `s` is `[0, 51200]`. fn process_upward_message(s: u32, ) -> Weight { - // Minimum execution time: 10_991 nanoseconds. - Weight::from_ref_time(5_407_947) - // Standard Error: 13 - .saturating_add(Weight::from_ref_time(1_937).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 5_924_000 picoseconds. + Weight::from_parts(6_060_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 8 + .saturating_add(Weight::from_parts(1_396, 0).saturating_mul(s.into())) } - // Storage: Ump NeedsDispatch (r:1 w:1) - // Storage: Ump NextDispatchRoundStartWith (r:1 w:1) - // Storage: Ump RelayDispatchQueues (r:0 w:1) - // Storage: Ump RelayDispatchQueueSize (r:0 w:1) + /// Storage: Ump NeedsDispatch (r:1 w:1) + /// Proof Skipped: Ump NeedsDispatch (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Ump NextDispatchRoundStartWith (r:1 w:1) + /// Proof Skipped: Ump NextDispatchRoundStartWith (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Ump RelayDispatchQueues (r:0 w:1) + /// Proof Skipped: Ump RelayDispatchQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Ump RelayDispatchQueueSize (r:0 w:1) + /// Proof Skipped: Ump RelayDispatchQueueSize (max_values: None, max_size: None, mode: Measured) fn clean_ump_after_outgoing() -> Weight { - // Minimum execution time: 10_134 nanoseconds. - Weight::from_ref_time(10_487_000) + // Proof Size summary in bytes: + // Measured: `240` + // Estimated: `3930` + // Minimum execution time: 9_662_000 picoseconds. + Weight::from_parts(9_886_000, 0) + .saturating_add(Weight::from_parts(0, 3930)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Ump Overweight (r:1 w:1) + /// Storage: Ump Overweight (r:1 w:1) + /// Proof Skipped: Ump Overweight (max_values: None, max_size: None, mode: Measured) + /// Storage: Ump CounterForOverweight (r:1 w:1) + /// Proof: Ump CounterForOverweight (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn service_overweight() -> Weight { - // Minimum execution time: 27_101 nanoseconds. - Weight::from_ref_time(27_760_000) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) + // Proof Size summary in bytes: + // Measured: `257` + // Estimated: `5211` + // Minimum execution time: 23_481_000 picoseconds. + Weight::from_parts(23_896_000, 0) + .saturating_add(Weight::from_parts(0, 5211)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } } diff --git a/runtime/kusama/src/weights/xcm/mod.rs b/runtime/kusama/src/weights/xcm/mod.rs index f03904b799a4..1a3630ac243e 100644 --- a/runtime/kusama/src/weights/xcm/mod.rs +++ b/runtime/kusama/src/weights/xcm/mod.rs @@ -1,13 +1,26 @@ +// Copyright 2017-2023 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + mod pallet_xcm_benchmarks_fungible; mod pallet_xcm_benchmarks_generic; use crate::Runtime; use frame_support::weights::Weight; use sp_std::prelude::*; -use xcm::{ - latest::{prelude::*, Weight as XCMWeight}, - DoubleEncoded, -}; +use xcm::{latest::prelude::*, DoubleEncoded}; use pallet_xcm_benchmarks_fungible::WeightInfo as XcmBalancesWeight; use pallet_xcm_benchmarks_generic::WeightInfo as XcmGeneric; @@ -31,15 +44,15 @@ impl From<&MultiAsset> for AssetTypes { } trait WeighMultiAssets { - fn weigh_multi_assets(&self, balances_weight: Weight) -> XCMWeight; + fn weigh_multi_assets(&self, balances_weight: Weight) -> Weight; } // Kusama only knows about one asset, the balances pallet. -const MAX_ASSETS: u32 = 1; +const MAX_ASSETS: u64 = 1; impl WeighMultiAssets for MultiAssetFilter { - fn weigh_multi_assets(&self, balances_weight: Weight) -> XCMWeight { - let weight = match self { + fn weigh_multi_assets(&self, balances_weight: Weight) -> Weight { + match self { Self::Definite(assets) => assets .inner() .into_iter() @@ -49,155 +62,227 @@ impl WeighMultiAssets for MultiAssetFilter { AssetTypes::Unknown => Weight::MAX, }) .fold(Weight::zero(), |acc, x| acc.saturating_add(x)), - Self::Wild(_) => balances_weight.saturating_mul(MAX_ASSETS as u64), - }; - - weight.ref_time() + // We don't support any NFTs on Kusama, so these two variants will always match + // only 1 kind of fungible asset. + Self::Wild(AllOf { .. } | AllOfCounted { .. }) => balances_weight, + Self::Wild(AllCounted(count)) => + balances_weight.saturating_mul(MAX_ASSETS.min(*count as u64)), + Self::Wild(All) => balances_weight.saturating_mul(MAX_ASSETS), + } } } impl WeighMultiAssets for MultiAssets { - fn weigh_multi_assets(&self, balances_weight: Weight) -> XCMWeight { - let weight = self - .inner() + fn weigh_multi_assets(&self, balances_weight: Weight) -> Weight { + self.inner() .into_iter() .map(|m| >::from(m)) .map(|t| match t { AssetTypes::Balances => balances_weight, AssetTypes::Unknown => Weight::MAX, }) - .fold(Weight::zero(), |acc, x| acc.saturating_add(x)); - - weight.ref_time() + .fold(Weight::zero(), |acc, x| acc.saturating_add(x)) } } pub struct KusamaXcmWeight(core::marker::PhantomData); impl XcmWeightInfo for KusamaXcmWeight { - fn withdraw_asset(assets: &MultiAssets) -> XCMWeight { + fn withdraw_asset(assets: &MultiAssets) -> Weight { assets.weigh_multi_assets(XcmBalancesWeight::::withdraw_asset()) } - fn reserve_asset_deposited(assets: &MultiAssets) -> XCMWeight { + fn reserve_asset_deposited(assets: &MultiAssets) -> Weight { assets.weigh_multi_assets(XcmBalancesWeight::::reserve_asset_deposited()) } - fn receive_teleported_asset(assets: &MultiAssets) -> XCMWeight { + fn receive_teleported_asset(assets: &MultiAssets) -> Weight { assets.weigh_multi_assets(XcmBalancesWeight::::receive_teleported_asset()) } - fn query_response(_query_id: &u64, _response: &Response, _max_weight: &u64) -> XCMWeight { - XcmGeneric::::query_response().ref_time() + fn query_response( + _query_id: &u64, + _response: &Response, + _max_weight: &Weight, + _querier: &Option, + ) -> Weight { + XcmGeneric::::query_response() } - fn transfer_asset(assets: &MultiAssets, _dest: &MultiLocation) -> XCMWeight { + fn transfer_asset(assets: &MultiAssets, _dest: &MultiLocation) -> Weight { assets.weigh_multi_assets(XcmBalancesWeight::::transfer_asset()) } fn transfer_reserve_asset( assets: &MultiAssets, _dest: &MultiLocation, _xcm: &Xcm<()>, - ) -> XCMWeight { + ) -> Weight { assets.weigh_multi_assets(XcmBalancesWeight::::transfer_reserve_asset()) } fn transact( - _origin_type: &OriginKind, - _require_weight_at_most: &u64, + _origin_kind: &OriginKind, + _require_weight_at_most: &Weight, _call: &DoubleEncoded, - ) -> XCMWeight { - XcmGeneric::::transact().ref_time() + ) -> Weight { + XcmGeneric::::transact() } fn hrmp_new_channel_open_request( _sender: &u32, _max_message_size: &u32, _max_capacity: &u32, - ) -> XCMWeight { + ) -> Weight { // XCM Executor does not currently support HRMP channel operations - Weight::MAX.ref_time() + Weight::MAX } - fn hrmp_channel_accepted(_recipient: &u32) -> XCMWeight { + fn hrmp_channel_accepted(_recipient: &u32) -> Weight { // XCM Executor does not currently support HRMP channel operations - Weight::MAX.ref_time() + Weight::MAX } - fn hrmp_channel_closing(_initiator: &u32, _sender: &u32, _recipient: &u32) -> XCMWeight { + fn hrmp_channel_closing(_initiator: &u32, _sender: &u32, _recipient: &u32) -> Weight { // XCM Executor does not currently support HRMP channel operations - Weight::MAX.ref_time() + Weight::MAX } - fn clear_origin() -> XCMWeight { - XcmGeneric::::clear_origin().ref_time() + fn clear_origin() -> Weight { + XcmGeneric::::clear_origin() } - fn descend_origin(_who: &InteriorMultiLocation) -> XCMWeight { - XcmGeneric::::descend_origin().ref_time() + fn descend_origin(_who: &InteriorMultiLocation) -> Weight { + XcmGeneric::::descend_origin() } - fn report_error( - _query_id: &QueryId, - _dest: &MultiLocation, - _max_response_weight: &u64, - ) -> XCMWeight { - XcmGeneric::::report_error().ref_time() + fn report_error(_query_response_info: &QueryResponseInfo) -> Weight { + XcmGeneric::::report_error() } - fn deposit_asset( - assets: &MultiAssetFilter, - _max_assets: &u32, // TODO use max assets? - _dest: &MultiLocation, - ) -> XCMWeight { + fn deposit_asset(assets: &MultiAssetFilter, _dest: &MultiLocation) -> Weight { assets.weigh_multi_assets(XcmBalancesWeight::::deposit_asset()) } fn deposit_reserve_asset( assets: &MultiAssetFilter, - _max_assets: &u32, // TODO use max assets? _dest: &MultiLocation, _xcm: &Xcm<()>, - ) -> XCMWeight { + ) -> Weight { assets.weigh_multi_assets(XcmBalancesWeight::::deposit_reserve_asset()) } - fn exchange_asset(_give: &MultiAssetFilter, _receive: &MultiAssets) -> XCMWeight { - Weight::MAX.ref_time() // todo fix + fn exchange_asset(_give: &MultiAssetFilter, _receive: &MultiAssets, _maximal: &bool) -> Weight { + // Kusama does not currently support exchange asset operations + Weight::MAX } fn initiate_reserve_withdraw( assets: &MultiAssetFilter, _reserve: &MultiLocation, _xcm: &Xcm<()>, - ) -> XCMWeight { + ) -> Weight { assets.weigh_multi_assets(XcmGeneric::::initiate_reserve_withdraw()) } fn initiate_teleport( assets: &MultiAssetFilter, _dest: &MultiLocation, _xcm: &Xcm<()>, - ) -> XCMWeight { + ) -> Weight { assets.weigh_multi_assets(XcmBalancesWeight::::initiate_teleport()) } - fn query_holding( - _query_id: &u64, - _dest: &MultiLocation, - _assets: &MultiAssetFilter, - _max_response_weight: &u64, - ) -> XCMWeight { - XcmGeneric::::query_holding().ref_time() + fn report_holding(_response_info: &QueryResponseInfo, _assets: &MultiAssetFilter) -> Weight { + XcmGeneric::::report_holding() + } + fn buy_execution(_fees: &MultiAsset, _weight_limit: &WeightLimit) -> Weight { + XcmGeneric::::buy_execution() + } + fn refund_surplus() -> Weight { + XcmGeneric::::refund_surplus() + } + fn set_error_handler(_xcm: &Xcm) -> Weight { + XcmGeneric::::set_error_handler() + } + fn set_appendix(_xcm: &Xcm) -> Weight { + XcmGeneric::::set_appendix() + } + fn clear_error() -> Weight { + XcmGeneric::::clear_error() } - fn buy_execution(_fees: &MultiAsset, _weight_limit: &WeightLimit) -> XCMWeight { - XcmGeneric::::buy_execution().ref_time() + fn claim_asset(_assets: &MultiAssets, _ticket: &MultiLocation) -> Weight { + XcmGeneric::::claim_asset() } - fn refund_surplus() -> XCMWeight { - XcmGeneric::::refund_surplus().ref_time() + fn trap(_code: &u64) -> Weight { + XcmGeneric::::trap() } - fn set_error_handler(_xcm: &Xcm) -> XCMWeight { - XcmGeneric::::set_error_handler().ref_time() + fn subscribe_version(_query_id: &QueryId, _max_response_weight: &Weight) -> Weight { + XcmGeneric::::subscribe_version() } - fn set_appendix(_xcm: &Xcm) -> XCMWeight { - XcmGeneric::::set_appendix().ref_time() + fn unsubscribe_version() -> Weight { + XcmGeneric::::unsubscribe_version() } - fn clear_error() -> XCMWeight { - XcmGeneric::::clear_error().ref_time() + fn burn_asset(assets: &MultiAssets) -> Weight { + assets.weigh_multi_assets(XcmGeneric::::burn_asset()) } - fn claim_asset(_assets: &MultiAssets, _ticket: &MultiLocation) -> XCMWeight { - XcmGeneric::::claim_asset().ref_time() + fn expect_asset(assets: &MultiAssets) -> Weight { + assets.weigh_multi_assets(XcmGeneric::::expect_asset()) } - fn trap(_code: &u64) -> XCMWeight { - XcmGeneric::::trap().ref_time() + fn expect_origin(_origin: &Option) -> Weight { + XcmGeneric::::expect_origin() } - fn subscribe_version(_query_id: &QueryId, _max_response_weight: &u64) -> XCMWeight { - XcmGeneric::::subscribe_version().ref_time() + fn expect_error(_error: &Option<(u32, XcmError)>) -> Weight { + XcmGeneric::::expect_error() } - fn unsubscribe_version() -> XCMWeight { - XcmGeneric::::unsubscribe_version().ref_time() + fn expect_transact_status(_transact_status: &MaybeErrorCode) -> Weight { + XcmGeneric::::expect_transact_status() } + fn query_pallet(_module_name: &Vec, _response_info: &QueryResponseInfo) -> Weight { + XcmGeneric::::query_pallet() + } + fn expect_pallet( + _index: &u32, + _name: &Vec, + _module_name: &Vec, + _crate_major: &u32, + _min_crate_minor: &u32, + ) -> Weight { + XcmGeneric::::expect_pallet() + } + fn report_transact_status(_response_info: &QueryResponseInfo) -> Weight { + XcmGeneric::::report_transact_status() + } + fn clear_transact_status() -> Weight { + XcmGeneric::::clear_transact_status() + } + fn universal_origin(_: &Junction) -> Weight { + // Kusama does not currently support universal origin operations + Weight::MAX + } + fn export_message(_: &NetworkId, _: &Junctions, _: &Xcm<()>) -> Weight { + Weight::MAX // todo fix + } + fn lock_asset(_: &MultiAsset, _: &MultiLocation) -> Weight { + // Kusama does not currently support asset locking operations + Weight::MAX + } + fn unlock_asset(_: &MultiAsset, _: &MultiLocation) -> Weight { + // Kusama does not currently support asset locking operations + Weight::MAX + } + fn note_unlockable(_: &MultiAsset, _: &MultiLocation) -> Weight { + // Kusama does not currently support asset locking operations + Weight::MAX + } + fn request_unlock(_: &MultiAsset, _: &MultiLocation) -> Weight { + // Kusama does not currently support asset locking operations + Weight::MAX + } + fn set_fees_mode(_: &bool) -> Weight { + XcmGeneric::::set_fees_mode() + } + fn set_topic(_topic: &[u8; 32]) -> Weight { + XcmGeneric::::set_topic() + } + fn clear_topic() -> Weight { + XcmGeneric::::clear_topic() + } + fn alias_origin(_: &MultiLocation) -> Weight { + // XCM Executor does not currently support alias origin operations + Weight::MAX + } + fn unpaid_execution(_: &WeightLimit, _: &Option) -> Weight { + XcmGeneric::::unpaid_execution() + } +} + +#[test] +fn all_counted_has_a_sane_weight_upper_limit() { + let assets = MultiAssetFilter::Wild(AllCounted(4294967295)); + let weight = Weight::from_parts(1000, 1000); + + assert_eq!(assets.weigh_multi_assets(weight), weight * MAX_ASSETS); } diff --git a/runtime/kusama/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs b/runtime/kusama/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs index a9907a70a250..5cece107f44d 100644 --- a/runtime/kusama/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs +++ b/runtime/kusama/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs @@ -47,13 +47,13 @@ pub struct WeightInfo(PhantomData); impl WeightInfo { // Storage: System Account (r:1 w:1) pub(crate) fn withdraw_asset() -> Weight { - Weight::from_ref_time(20_385_000 as u64) + Weight::from_parts(20_385_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:2 w:2) pub(crate) fn transfer_asset() -> Weight { - Weight::from_ref_time(32_756_000 as u64) + Weight::from_parts(32_756_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -65,23 +65,23 @@ impl WeightInfo { // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) // Storage: Dmp DownwardMessageQueues (r:1 w:1) pub(crate) fn transfer_reserve_asset() -> Weight { - Weight::from_ref_time(50_645_000 as u64) + Weight::from_parts(50_645_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(8 as u64)) .saturating_add(T::DbWeight::get().writes(5 as u64)) } // Storage: Benchmark Override (r:0 w:0) pub(crate) fn reserve_asset_deposited() -> Weight { - Weight::from_ref_time(2_000_000_000_000 as u64) + Weight::from_parts(2_000_000_000_000 as u64, 0) } // Storage: System Account (r:1 w:1) pub(crate) fn receive_teleported_asset() -> Weight { - Weight::from_ref_time(19_595_000 as u64) + Weight::from_parts(19_595_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) pub(crate) fn deposit_asset() -> Weight { - Weight::from_ref_time(21_763_000 as u64) + Weight::from_parts(21_763_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -93,7 +93,7 @@ impl WeightInfo { // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) // Storage: Dmp DownwardMessageQueues (r:1 w:1) pub(crate) fn deposit_reserve_asset() -> Weight { - Weight::from_ref_time(40_930_000 as u64) + Weight::from_parts(40_930_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(7 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } @@ -105,7 +105,7 @@ impl WeightInfo { // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) // Storage: Dmp DownwardMessageQueues (r:1 w:1) pub(crate) fn initiate_teleport() -> Weight { - Weight::from_ref_time(40_788_000 as u64) + Weight::from_parts(40_788_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(7 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } diff --git a/runtime/kusama/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/runtime/kusama/src/weights/xcm/pallet_xcm_benchmarks_generic.rs index 36f9c602f566..f92e513ff88d 100644 --- a/runtime/kusama/src/weights/xcm/pallet_xcm_benchmarks_generic.rs +++ b/runtime/kusama/src/weights/xcm/pallet_xcm_benchmarks_generic.rs @@ -17,12 +17,13 @@ //! Autogenerated weights for `pallet_xcm_benchmarks::generic` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-03-08, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-04-18, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 1024 // Executed Command: // target/production/polkadot // benchmark +// pallet // --chain=kusama-dev // --steps=50 // --repeat=20 @@ -48,89 +49,138 @@ impl WeightInfo { // Storage: XcmPallet SupportedVersion (r:1 w:0) // Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) // Storage: XcmPallet SafeXcmVersion (r:1 w:0) - // Storage: Configuration ActiveConfig (r:1 w:0) // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) // Storage: Dmp DownwardMessageQueues (r:1 w:1) - pub(crate) fn query_holding() -> Weight { - Weight::from_ref_time(21_822_000 as u64) - .saturating_add(T::DbWeight::get().reads(6 as u64)) + pub(crate) fn report_holding() -> Weight { + Weight::from_parts(25_878_000 as u64, 0) + .saturating_add(T::DbWeight::get().reads(5 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } pub(crate) fn buy_execution() -> Weight { - Weight::from_ref_time(3_109_000 as u64) + Weight::from_parts(3_697_000 as u64, 0) } // Storage: XcmPallet Queries (r:1 w:0) pub(crate) fn query_response() -> Weight { - Weight::from_ref_time(12_087_000 as u64) + Weight::from_parts(13_458_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(1 as u64)) } pub(crate) fn transact() -> Weight { - Weight::from_ref_time(12_398_000 as u64) + Weight::from_parts(13_597_000 as u64, 0) } pub(crate) fn refund_surplus() -> Weight { - Weight::from_ref_time(3_247_000 as u64) + Weight::from_parts(3_839_000 as u64, 0) } pub(crate) fn set_error_handler() -> Weight { - Weight::from_ref_time(3_086_000 as u64) + Weight::from_parts(3_657_000 as u64, 0) } pub(crate) fn set_appendix() -> Weight { - Weight::from_ref_time(3_112_000 as u64) + Weight::from_parts(3_757_000 as u64, 0) } pub(crate) fn clear_error() -> Weight { - Weight::from_ref_time(3_118_000 as u64) + Weight::from_parts(3_651_000 as u64, 0) } pub(crate) fn descend_origin() -> Weight { - Weight::from_ref_time(4_054_000 as u64) + Weight::from_parts(4_589_000 as u64, 0) } pub(crate) fn clear_origin() -> Weight { - Weight::from_ref_time(3_111_000 as u64) + Weight::from_parts(3_661_000 as u64, 0) } // Storage: XcmPallet SupportedVersion (r:1 w:0) // Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) // Storage: XcmPallet SafeXcmVersion (r:1 w:0) - // Storage: Configuration ActiveConfig (r:1 w:0) // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) // Storage: Dmp DownwardMessageQueues (r:1 w:1) pub(crate) fn report_error() -> Weight { - Weight::from_ref_time(18_425_000 as u64) - .saturating_add(T::DbWeight::get().reads(6 as u64)) + Weight::from_parts(21_351_000 as u64, 0) + .saturating_add(T::DbWeight::get().reads(5 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: XcmPallet AssetTraps (r:1 w:1) pub(crate) fn claim_asset() -> Weight { - Weight::from_ref_time(7_144_000 as u64) + Weight::from_parts(7_674_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } pub(crate) fn trap() -> Weight { - Weight::from_ref_time(3_060_000 as u64) + Weight::from_parts(3_606_000 as u64, 0) } // Storage: XcmPallet VersionNotifyTargets (r:1 w:1) // Storage: XcmPallet SupportedVersion (r:1 w:0) // Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) // Storage: XcmPallet SafeXcmVersion (r:1 w:0) - // Storage: Configuration ActiveConfig (r:1 w:0) // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) // Storage: Dmp DownwardMessageQueues (r:1 w:1) pub(crate) fn subscribe_version() -> Weight { - Weight::from_ref_time(21_642_000 as u64) - .saturating_add(T::DbWeight::get().reads(7 as u64)) + Weight::from_parts(30_453_000 as u64, 0) + .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: XcmPallet VersionNotifyTargets (r:0 w:1) pub(crate) fn unsubscribe_version() -> Weight { - Weight::from_ref_time(4_873_000 as u64) + Weight::from_parts(5_543_000 as u64, 0) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: XcmPallet SupportedVersion (r:1 w:0) // Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) // Storage: XcmPallet SafeXcmVersion (r:1 w:0) - // Storage: Configuration ActiveConfig (r:1 w:0) // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) // Storage: Dmp DownwardMessageQueues (r:1 w:1) pub(crate) fn initiate_reserve_withdraw() -> Weight { - Weight::from_ref_time(22_809_000 as u64) - .saturating_add(T::DbWeight::get().reads(6 as u64)) + Weight::from_parts(25_464_000 as u64, 0) + .saturating_add(T::DbWeight::get().reads(5 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } + pub(crate) fn burn_asset() -> Weight { + Weight::from_parts(5_194_000 as u64, 0) + } + pub(crate) fn expect_asset() -> Weight { + Weight::from_parts(3_698_000 as u64, 0) + } + pub(crate) fn expect_origin() -> Weight { + Weight::from_parts(3_786_000 as u64, 0) + } + pub(crate) fn expect_error() -> Weight { + Weight::from_parts(3_645_000 as u64, 0) + } + pub(crate) fn expect_transact_status() -> Weight { + Weight::from_parts(3_645_000 as u64, 0) + } + // Storage: XcmPallet SupportedVersion (r:1 w:0) + // Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) + // Storage: XcmPallet SafeXcmVersion (r:1 w:0) + // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + // Storage: Dmp DownwardMessageQueues (r:1 w:1) + pub(crate) fn query_pallet() -> Weight { + Weight::from_parts(22_993_000 as u64, 0) + .saturating_add(T::DbWeight::get().reads(5 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) + } + pub(crate) fn expect_pallet() -> Weight { + Weight::from_parts(4_043_000 as u64, 0) + } + // Storage: XcmPallet SupportedVersion (r:1 w:0) + // Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) + // Storage: XcmPallet SafeXcmVersion (r:1 w:0) + // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + // Storage: Dmp DownwardMessageQueues (r:1 w:1) + pub(crate) fn report_transact_status() -> Weight { + Weight::from_parts(21_668_000 as u64, 0) + .saturating_add(T::DbWeight::get().reads(5 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) + } + pub(crate) fn clear_transact_status() -> Weight { + Weight::from_parts(3_673_000 as u64, 0) + } + pub(crate) fn set_topic() -> Weight { + Weight::from_parts(3_661_000 as u64, 0) + } + pub(crate) fn clear_topic() -> Weight { + Weight::from_parts(3_647_000 as u64, 0) + } + pub(crate) fn set_fees_mode() -> Weight { + Weight::from_parts(3_599_000 as u64, 0) + } + pub(crate) fn unpaid_execution() -> Weight { + Weight::from_parts(3_111_000 as u64, 0) + } } diff --git a/runtime/kusama/src/xcm_config.rs b/runtime/kusama/src/xcm_config.rs index 17310dd5ead1..33ca3a810aea 100644 --- a/runtime/kusama/src/xcm_config.rs +++ b/runtime/kusama/src/xcm_config.rs @@ -17,33 +17,44 @@ //! XCM configurations for the Kusama runtime. use super::{ - parachains_origin, AccountId, Balances, CouncilCollective, ParaId, Runtime, RuntimeCall, - RuntimeEvent, RuntimeOrigin, WeightToFee, XcmPallet, + parachains_origin, AccountId, AllPalletsWithSystem, Balances, CouncilCollective, Fellows, + ParaId, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, StakingAdmin, WeightToFee, + XcmPallet, }; -use frame_support::{match_types, parameter_types, traits::Everything}; -use runtime_common::{xcm_sender, ToAuthor}; +use frame_support::{ + match_types, parameter_types, + traits::{Contains, Everything, Nothing}, + weights::Weight, +}; +use runtime_common::{paras_registrar, xcm_sender, ToAuthor}; +use sp_core::ConstU32; use xcm::latest::prelude::*; use xcm_builder::{ - AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, - AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, BackingToPlurality, + AccountId32Aliases, AllowExplicitUnpaidExecutionFrom, AllowKnownQueryResponses, + AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, BackingToPlurality, ChildParachainAsNative, ChildParachainConvertsVia, ChildSystemParachainAsSuperuser, CurrencyAdapter as XcmCurrencyAdapter, FixedWeightBounds, IsChildSystemParachain, IsConcrete, - LocationInverter, SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, - TakeWeightCredit, UsingComponents, WeightInfoBounds, + MintLocation, OriginToPluralityVoice, SignedAccountId32AsNative, SignedToAccountId32, + SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, WeightInfoBounds, + WithComputedOrigin, }; +use xcm_executor::traits::WithOriginFilter; parameter_types! { /// The location of the KSM token, from the context of this chain. Since this token is native to this /// chain, we make it synonymous with it and thus it is the `Here` location, which means "equivalent to /// the context". - pub const KsmLocation: MultiLocation = Here.into(); + pub const TokenLocation: MultiLocation = Here.into_location(); /// The Kusama network ID. This is named. - pub const KusamaNetwork: NetworkId = NetworkId::Kusama; - /// Our XCM location ancestry - i.e. what, if anything, `Parent` means evaluated in our context. Since - /// Kusama is a top-level relay-chain, there is no ancestry. - pub const Ancestry: MultiLocation = Here.into(); + pub const ThisNetwork: NetworkId = Kusama; + /// Our XCM location ancestry - i.e. our location within the Consensus Universe. + /// + /// Since Kusama is a top-level relay-chain with its own consensus, it's just our network ID. + pub UniversalLocation: InteriorMultiLocation = ThisNetwork::get().into(); /// The check account, which holds any native assets that have been teleported out and not back in (yet). pub CheckAccount: AccountId = XcmPallet::check_account(); + /// The check account that is allowed to mint assets locally. + pub LocalCheckAccount: (AccountId, MintLocation) = (CheckAccount::get(), MintLocation::Local); } /// The canonical means of converting a `MultiLocation` into an `AccountId`, used when we want to determine @@ -52,41 +63,41 @@ pub type SovereignAccountOf = ( // We can convert a child parachain using the standard `AccountId` conversion. ChildParachainConvertsVia, // We can directly alias an `AccountId32` into a local account. - AccountId32Aliases, + AccountId32Aliases, ); /// Our asset transactor. This is what allows us to interest with the runtime facilities from the point of /// view of XCM-only concepts like `MultiLocation` and `MultiAsset`. /// -/// Ours is only aware of the Balances pallet, which is mapped to `KsmLocation`. +/// Ours is only aware of the Balances pallet, which is mapped to `TokenLocation`. pub type LocalAssetTransactor = XcmCurrencyAdapter< // Use this currency: Balances, // Use this currency when it is a fungible asset matching the given location or name: - IsConcrete, + IsConcrete, // We can convert the MultiLocations with our converter above: SovereignAccountOf, // Our chain's account ID type (we can't get away without mentioning it explicitly): AccountId, // We track our teleports in/out to keep total issuance correct. - CheckAccount, + LocalCheckAccount, >; -/// The means that we convert an the XCM message origin location into a local dispatch origin. +/// The means that we convert the XCM message origin location into a local dispatch origin. type LocalOriginConverter = ( // A `Signed` origin of the sovereign account that the original location controls. SovereignSignedViaLocation, // A child parachain, natively expressed, has the `Parachain` origin. ChildParachainAsNative, // The AccountId32 location type can be expressed natively as a `Signed` origin. - SignedAccountId32AsNative, + SignedAccountId32AsNative, // A system child parachain, expressed as a Superuser, converts to the `Root` origin. ChildSystemParachainAsSuperuser, ); parameter_types! { /// The amount of weight an XCM operation takes. This is a safe overestimate. - pub const BaseXcmWeight: u64 = 1_000_000_000; + pub const BaseXcmWeight: Weight = Weight::from_parts(1_000_000_000, 64 * 1024); /// Maximum number of instructions in a single XCM fragment. A sanity check against weight /// calculations getting too crazy. pub const MaxInstructions: u32 = 100; @@ -96,18 +107,19 @@ parameter_types! { /// individual routers. pub type XcmRouter = ( // Only one router so far - use DMP to communicate with child parachains. - xcm_sender::ChildParachainRouter, + xcm_sender::ChildParachainRouter, ); parameter_types! { - pub const Kusama: MultiAssetFilter = Wild(AllOf { fun: WildFungible, id: Concrete(KsmLocation::get()) }); - pub const Statemine: MultiLocation = Parachain(1000).into(); - pub const Encointer: MultiLocation = Parachain(1001).into(); - pub const KusamaForStatemine: (MultiAssetFilter, MultiLocation) = (Kusama::get(), Statemine::get()); - pub const KusamaForEncointer: (MultiAssetFilter, MultiLocation) = (Kusama::get(), Encointer::get()); + pub const Ksm: MultiAssetFilter = Wild(AllOf { fun: WildFungible, id: Concrete(TokenLocation::get()) }); + pub const Statemine: MultiLocation = Parachain(1000).into_location(); + pub const Encointer: MultiLocation = Parachain(1001).into_location(); + pub const KsmForStatemine: (MultiAssetFilter, MultiLocation) = (Ksm::get(), Statemine::get()); + pub const KsmForEncointer: (MultiAssetFilter, MultiLocation) = (Ksm::get(), Encointer::get()); + pub const MaxAssetsIntoHolding: u32 = 64; } pub type TrustedTeleporters = - (xcm_builder::Case, xcm_builder::Case); + (xcm_builder::Case, xcm_builder::Case); match_types! { pub type OnlyParachains: impl Contains = { @@ -119,16 +131,217 @@ match_types! { pub type Barrier = ( // Weight that is paid for may be consumed. TakeWeightCredit, - // If the message is one that immediately attemps to pay for execution, then allow it. - AllowTopLevelPaidExecutionFrom, - // Messages coming from system parachains need not pay for execution. - AllowUnpaidExecutionFrom>, // Expected responses are OK. AllowKnownQueryResponses, - // Subscriptions for version tracking are OK. - AllowSubscriptionsFrom, + WithComputedOrigin< + ( + // If the message is one that immediately attempts to pay for execution, then allow it. + AllowTopLevelPaidExecutionFrom, + // Messages coming from system parachains need not pay for execution. + AllowExplicitUnpaidExecutionFrom>, + // Subscriptions for version tracking are OK. + AllowSubscriptionsFrom, + ), + UniversalLocation, + ConstU32<8>, + >, ); +/// A call filter for the XCM Transact instruction. This is a temporary measure until we properly +/// account for proof size weights. +/// +/// Calls that are allowed through this filter must: +/// 1. Have a fixed weight; +/// 2. Cannot lead to another call being made; +/// 3. Have a defined proof size weight, e.g. no unbounded vecs in call parameters. +pub struct SafeCallFilter; +impl Contains for SafeCallFilter { + fn contains(call: &RuntimeCall) -> bool { + #[cfg(feature = "runtime-benchmarks")] + { + if matches!(call, RuntimeCall::System(frame_system::Call::remark_with_event { .. })) { + return true + } + } + + match call { + RuntimeCall::System( + frame_system::Call::kill_prefix { .. } | frame_system::Call::set_heap_pages { .. }, + ) | + RuntimeCall::Babe(..) | + RuntimeCall::Timestamp(..) | + RuntimeCall::Indices(..) | + RuntimeCall::Balances(..) | + RuntimeCall::Staking( + pallet_staking::Call::bond { .. } | + pallet_staking::Call::bond_extra { .. } | + pallet_staking::Call::unbond { .. } | + pallet_staking::Call::withdraw_unbonded { .. } | + pallet_staking::Call::validate { .. } | + pallet_staking::Call::nominate { .. } | + pallet_staking::Call::chill { .. } | + pallet_staking::Call::set_payee { .. } | + pallet_staking::Call::set_controller { .. } | + pallet_staking::Call::set_validator_count { .. } | + pallet_staking::Call::increase_validator_count { .. } | + pallet_staking::Call::scale_validator_count { .. } | + pallet_staking::Call::force_no_eras { .. } | + pallet_staking::Call::force_new_era { .. } | + pallet_staking::Call::set_invulnerables { .. } | + pallet_staking::Call::force_unstake { .. } | + pallet_staking::Call::force_new_era_always { .. } | + pallet_staking::Call::payout_stakers { .. } | + pallet_staking::Call::rebond { .. } | + pallet_staking::Call::reap_stash { .. } | + pallet_staking::Call::set_staking_configs { .. } | + pallet_staking::Call::chill_other { .. } | + pallet_staking::Call::force_apply_min_commission { .. }, + ) | + RuntimeCall::Session(pallet_session::Call::purge_keys { .. }) | + RuntimeCall::Grandpa(..) | + RuntimeCall::ImOnline(..) | + RuntimeCall::Democracy( + pallet_democracy::Call::second { .. } | + pallet_democracy::Call::vote { .. } | + pallet_democracy::Call::emergency_cancel { .. } | + pallet_democracy::Call::fast_track { .. } | + pallet_democracy::Call::veto_external { .. } | + pallet_democracy::Call::cancel_referendum { .. } | + pallet_democracy::Call::delegate { .. } | + pallet_democracy::Call::undelegate { .. } | + pallet_democracy::Call::clear_public_proposals { .. } | + pallet_democracy::Call::unlock { .. } | + pallet_democracy::Call::remove_vote { .. } | + pallet_democracy::Call::remove_other_vote { .. } | + pallet_democracy::Call::blacklist { .. } | + pallet_democracy::Call::cancel_proposal { .. }, + ) | + RuntimeCall::Council( + pallet_collective::Call::vote { .. } | + pallet_collective::Call::close_old_weight { .. } | + pallet_collective::Call::disapprove_proposal { .. } | + pallet_collective::Call::close { .. }, + ) | + RuntimeCall::TechnicalCommittee( + pallet_collective::Call::vote { .. } | + pallet_collective::Call::close_old_weight { .. } | + pallet_collective::Call::disapprove_proposal { .. } | + pallet_collective::Call::close { .. }, + ) | + RuntimeCall::PhragmenElection( + pallet_elections_phragmen::Call::remove_voter { .. } | + pallet_elections_phragmen::Call::submit_candidacy { .. } | + pallet_elections_phragmen::Call::renounce_candidacy { .. } | + pallet_elections_phragmen::Call::remove_member { .. } | + pallet_elections_phragmen::Call::clean_defunct_voters { .. }, + ) | + RuntimeCall::TechnicalMembership( + pallet_membership::Call::add_member { .. } | + pallet_membership::Call::remove_member { .. } | + pallet_membership::Call::swap_member { .. } | + pallet_membership::Call::change_key { .. } | + pallet_membership::Call::set_prime { .. } | + pallet_membership::Call::clear_prime { .. }, + ) | + RuntimeCall::Treasury(..) | + RuntimeCall::ConvictionVoting(..) | + RuntimeCall::Referenda( + pallet_referenda::Call::place_decision_deposit { .. } | + pallet_referenda::Call::refund_decision_deposit { .. } | + pallet_referenda::Call::cancel { .. } | + pallet_referenda::Call::kill { .. } | + pallet_referenda::Call::nudge_referendum { .. } | + pallet_referenda::Call::one_fewer_deciding { .. }, + ) | + RuntimeCall::FellowshipCollective(..) | + RuntimeCall::FellowshipReferenda( + pallet_referenda::Call::place_decision_deposit { .. } | + pallet_referenda::Call::refund_decision_deposit { .. } | + pallet_referenda::Call::cancel { .. } | + pallet_referenda::Call::kill { .. } | + pallet_referenda::Call::nudge_referendum { .. } | + pallet_referenda::Call::one_fewer_deciding { .. }, + ) | + RuntimeCall::Claims( + super::claims::Call::claim { .. } | + super::claims::Call::mint_claim { .. } | + super::claims::Call::move_claim { .. }, + ) | + RuntimeCall::Utility(pallet_utility::Call::as_derivative { .. }) | + RuntimeCall::Identity( + pallet_identity::Call::add_registrar { .. } | + pallet_identity::Call::set_identity { .. } | + pallet_identity::Call::clear_identity { .. } | + pallet_identity::Call::request_judgement { .. } | + pallet_identity::Call::cancel_request { .. } | + pallet_identity::Call::set_fee { .. } | + pallet_identity::Call::set_account_id { .. } | + pallet_identity::Call::set_fields { .. } | + pallet_identity::Call::provide_judgement { .. } | + pallet_identity::Call::kill_identity { .. } | + pallet_identity::Call::add_sub { .. } | + pallet_identity::Call::rename_sub { .. } | + pallet_identity::Call::remove_sub { .. } | + pallet_identity::Call::quit_sub { .. }, + ) | + RuntimeCall::Society( + pallet_society::Call::bid { .. } | + pallet_society::Call::unbid { .. } | + pallet_society::Call::vouch { .. } | + pallet_society::Call::unvouch { .. } | + pallet_society::Call::vote { .. } | + pallet_society::Call::defender_vote { .. } | + pallet_society::Call::payout { .. } | + pallet_society::Call::unfound { .. } | + pallet_society::Call::judge_suspended_member { .. } | + pallet_society::Call::judge_suspended_candidate { .. } | + pallet_society::Call::set_max_members { .. }, + ) | + RuntimeCall::Recovery(..) | + RuntimeCall::Vesting(..) | + RuntimeCall::Bounties( + pallet_bounties::Call::propose_bounty { .. } | + pallet_bounties::Call::approve_bounty { .. } | + pallet_bounties::Call::propose_curator { .. } | + pallet_bounties::Call::unassign_curator { .. } | + pallet_bounties::Call::accept_curator { .. } | + pallet_bounties::Call::award_bounty { .. } | + pallet_bounties::Call::claim_bounty { .. } | + pallet_bounties::Call::close_bounty { .. }, + ) | + RuntimeCall::ChildBounties(..) | + RuntimeCall::ElectionProviderMultiPhase(..) | + RuntimeCall::VoterList(..) | + RuntimeCall::NominationPools( + pallet_nomination_pools::Call::join { .. } | + pallet_nomination_pools::Call::bond_extra { .. } | + pallet_nomination_pools::Call::claim_payout { .. } | + pallet_nomination_pools::Call::unbond { .. } | + pallet_nomination_pools::Call::pool_withdraw_unbonded { .. } | + pallet_nomination_pools::Call::withdraw_unbonded { .. } | + pallet_nomination_pools::Call::create { .. } | + pallet_nomination_pools::Call::create_with_pool_id { .. } | + pallet_nomination_pools::Call::set_state { .. } | + pallet_nomination_pools::Call::set_configs { .. } | + pallet_nomination_pools::Call::update_roles { .. } | + pallet_nomination_pools::Call::chill { .. }, + ) | + RuntimeCall::Hrmp(..) | + RuntimeCall::Registrar( + paras_registrar::Call::deregister { .. } | + paras_registrar::Call::swap { .. } | + paras_registrar::Call::remove_lock { .. } | + paras_registrar::Call::reserve { .. } | + paras_registrar::Call::add_lock { .. }, + ) | + RuntimeCall::XcmPallet(pallet_xcm::Call::limited_reserve_transfer_assets { + .. + }) => true, + _ => false, + } + } +} + pub struct XcmConfig; impl xcm_executor::Config for XcmConfig { type RuntimeCall = RuntimeCall; @@ -137,7 +350,7 @@ impl xcm_executor::Config for XcmConfig { type OriginConverter = LocalOriginConverter; type IsReserve = (); type IsTeleporter = TrustedTeleporters; - type LocationInverter = LocationInverter; + type UniversalLocation = UniversalLocation; type Barrier = Barrier; type Weigher = WeightInfoBounds< crate::weights::xcm::KusamaXcmWeight, @@ -145,15 +358,35 @@ impl xcm_executor::Config for XcmConfig { MaxInstructions, >; // The weight trader piggybacks on the existing transaction-fee conversion logic. - type Trader = UsingComponents>; + type Trader = + UsingComponents>; type ResponseHandler = XcmPallet; type AssetTrap = XcmPallet; + type AssetLocker = (); + type AssetExchanger = (); type AssetClaims = XcmPallet; type SubscriptionService = XcmPallet; + type PalletInstancesInfo = AllPalletsWithSystem; + type MaxAssetsIntoHolding = MaxAssetsIntoHolding; + type FeeManager = (); + // No bridges yet... + type MessageExporter = (); + type UniversalAliases = Nothing; + type CallDispatcher = WithOriginFilter; + type SafeCallFilter = SafeCallFilter; } parameter_types! { pub const CouncilBodyId: BodyId = BodyId::Executive; + // StakingAdmin pluralistic body. + pub const StakingAdminBodyId: BodyId = BodyId::Defense; + // Fellows pluralistic body. + pub const FellowsBodyId: BodyId = BodyId::Technical; +} + +#[cfg(feature = "runtime-benchmarks")] +parameter_types! { + pub ReachableDest: Option = Some(Parachain(1000).into()); } /// Type to convert the council origin to a Plurality `MultiLocation` value. @@ -170,15 +403,35 @@ pub type LocalOriginToLocation = ( // `Unit` body. CouncilToPlurality, // And a usual Signed origin to be used in XCM as a corresponding AccountId32 - SignedToAccountId32, + SignedToAccountId32, ); + +/// Type to convert the `StakingAdmin` origin to a Plurality `MultiLocation` value. +pub type StakingAdminToPlurality = + OriginToPluralityVoice; + +/// Type to convert the Fellows origin to a Plurality `MultiLocation` value. +pub type FellowsToPlurality = OriginToPluralityVoice; + +/// Type to convert a pallet `Origin` type value into a `MultiLocation` value which represents an interior location +/// of this chain for a destination chain. +pub type LocalPalletOriginToLocation = ( + // We allow an origin from the Collective pallet to be used in XCM as a corresponding Plurality of the + // `Unit` body. + CouncilToPlurality, + // StakingAdmin origin to be used in XCM as a corresponding Plurality `MultiLocation` value. + StakingAdminToPlurality, + // Fellows origin to be used in XCM as a corresponding Plurality `MultiLocation` value. + FellowsToPlurality, +); + impl pallet_xcm::Config for Runtime { type RuntimeEvent = RuntimeEvent; - // We only allow the council to send messages. This is basically safe to enable for everyone - // (safe the possibility of someone spamming the parachain if they're willing to pay the KSM to - // send from the Relay-chain), but it's useless until we bring in XCM v3 which will make - // `DescendOrigin` a bit more useful. - type SendXcmOrigin = xcm_builder::EnsureXcmOrigin; + // We only allow the root, the council, fellows and the staking admin to send messages. + // This is basically safe to enable for everyone (safe the possibility of someone spamming the parachain + // if they're willing to pay the KSM to send from the Relay-chain), but it's useless until we bring in XCM v3 + // which will make `DescendOrigin` a bit more useful. + type SendXcmOrigin = xcm_builder::EnsureXcmOrigin; type XcmRouter = XcmRouter; // Anyone can execute XCM messages locally. type ExecuteXcmOrigin = xcm_builder::EnsureXcmOrigin; @@ -190,9 +443,33 @@ impl pallet_xcm::Config for Runtime { // transfer. type XcmReserveTransferFilter = Everything; type Weigher = FixedWeightBounds; - type LocationInverter = LocationInverter; + type UniversalLocation = UniversalLocation; type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; + type Currency = Balances; + type CurrencyMatcher = (); + type TrustedLockers = (); + type SovereignAccountOf = SovereignAccountOf; + type MaxLockers = ConstU32<8>; + type WeightInfo = crate::weights::pallet_xcm::WeightInfo; + #[cfg(feature = "runtime-benchmarks")] + type ReachableDest = ReachableDest; +} + +#[test] +fn karura_liquid_staking_xcm_has_sane_weight_upper_limt() { + use parity_scale_codec::Decode; + use xcm::VersionedXcm; + use xcm_executor::traits::WeightBounds; + let blob = hex_literal::hex!("02140004000000000700e40b540213000000000700e40b54020006010700c817a804341801000006010b00c490bf4302140d010003ffffffff000100411f"); + let Ok(VersionedXcm::V2(old_xcm)) = + VersionedXcm::::decode(&mut &blob[..]) else { panic!("can't decode XCM blob") }; + let mut xcm: Xcm = + old_xcm.try_into().expect("conversion from v2 to v3 failed"); + let weight = ::Weigher::weight(&mut xcm) + .expect("weighing XCM failed"); + + assert_eq!(weight, Weight::from_parts(20_313_281_000, 65536)); } diff --git a/runtime/metrics/Cargo.toml b/runtime/metrics/Cargo.toml index e00a9401da8a..5a029cbda60d 100644 --- a/runtime/metrics/Cargo.toml +++ b/runtime/metrics/Cargo.toml @@ -5,9 +5,9 @@ authors.workspace = true edition.workspace = true [dependencies] -sp-std = { package = "sp-std", git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } -sp-tracing = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -parity-scale-codec = { version = "3.1.5", default-features = false } +sp-std = { package = "sp-std", git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.40" } +sp-tracing = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +parity-scale-codec = { version = "3.3.0", default-features = false } primitives = { package = "polkadot-primitives", path = "../../primitives", default-features = false } bs58 = { version = "0.4.0", default-features = false, features = ["alloc"] } diff --git a/runtime/metrics/src/with_runtime_metrics.rs b/runtime/metrics/src/with_runtime_metrics.rs index 439b0f3801a2..ae641a512e47 100644 --- a/runtime/metrics/src/with_runtime_metrics.rs +++ b/runtime/metrics/src/with_runtime_metrics.rs @@ -23,7 +23,7 @@ const TRACING_TARGET: &'static str = "metrics"; use parity_scale_codec::Encode; -use primitives::v2::{ +use primitives::{ metric_definitions::{CounterDefinition, CounterVecDefinition}, RuntimeMetricLabelValues, RuntimeMetricOp, RuntimeMetricUpdate, }; diff --git a/runtime/metrics/src/without_runtime_metrics.rs b/runtime/metrics/src/without_runtime_metrics.rs index 27381a0a2aa1..4ee2c865b7ce 100644 --- a/runtime/metrics/src/without_runtime_metrics.rs +++ b/runtime/metrics/src/without_runtime_metrics.rs @@ -18,7 +18,7 @@ //! provide a dummy implementation for the native runtime to avoid cluttering the runtime code //! with `#[cfg(feature = "runtime-metrics")]`. -use primitives::v2::metric_definitions::{CounterDefinition, CounterVecDefinition}; +use primitives::metric_definitions::{CounterDefinition, CounterVecDefinition}; /// A dummy `Counter`. pub struct Counter; diff --git a/runtime/parachains/Cargo.toml b/runtime/parachains/Cargo.toml index 18f0dae73668..0b16ac49fe5e 100644 --- a/runtime/parachains/Cargo.toml +++ b/runtime/parachains/Cargo.toml @@ -6,37 +6,37 @@ edition.workspace = true [dependencies] bitvec = { version = "1.0.0", default-features = false, features = ["alloc"] } -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["derive", "max-encoded-len"] } +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["derive", "max-encoded-len"] } log = { version = "0.4.17", default-features = false } rustc-hex = { version = "2.1.0", default-features = false } scale-info = { version = "2.1.2", default-features = false, features = ["derive"] } -serde = { version = "1.0.137", features = [ "derive" ], optional = true } +serde = { version = "1.0.139", features = [ "derive" ], optional = true } derive_more = "0.99.17" bitflags = "1.3.2" -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-std = { package = "sp-std", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-keystore = { git = "https://github.com/paritytech/substrate", optional = true , branch = "polkadot-v0.9.36" } -sp-application-crypto = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } -sp-tracing = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-std = { package = "sp-std", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-keystore = { git = "https://github.com/paritytech/substrate", optional = true , branch = "polkadot-v0.9.40" } +sp-application-crypto = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } +sp-tracing = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } -pallet-authority-discovery = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-babe = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-vesting = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +pallet-authority-discovery = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-babe = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-vesting = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } xcm = { package = "xcm", path = "../../xcm", default-features = false } xcm-executor = { package = "xcm-executor", path = "../../xcm/xcm-executor", default-features = false } @@ -45,16 +45,17 @@ primitives = { package = "polkadot-primitives", path = "../../primitives", defau rand = { version = "0.8.5", default-features = false } rand_chacha = { version = "0.3.1", default-features = false } static_assertions = { version = "1.1.0", optional = true } +polkadot-parachain = { path = "../../parachain", default-features = false } polkadot-runtime-metrics = { path = "../metrics", default-features = false} [dev-dependencies] futures = "0.3.21" hex-literal = "0.3.4" -keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -frame-support-test = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +frame-support-test = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } test-helpers = { package = "polkadot-primitives-test-helpers", path = "../../primitives/test-helpers"} -sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } thousands = "0.2.0" assert_matches = "1" serde_json = "1.0.85" diff --git a/runtime/parachains/src/builder.rs b/runtime/parachains/src/builder.rs index 9a1c16e6aa1d..97be7681e4ef 100644 --- a/runtime/parachains/src/builder.rs +++ b/runtime/parachains/src/builder.rs @@ -22,7 +22,7 @@ use crate::{ }; use bitvec::{order::Lsb0 as BitOrderLsb0, vec::BitVec}; use frame_support::pallet_prelude::*; -use primitives::v2::{ +use primitives::{ collator_signature_payload, AvailabilityBitfield, BackedCandidate, CandidateCommitments, CandidateDescriptor, CandidateHash, CollatorId, CollatorSignature, CommittedCandidateReceipt, CompactStatement, CoreIndex, CoreOccupied, DisputeStatement, DisputeStatementSet, GroupIndex, @@ -292,8 +292,8 @@ impl BenchBuilder { availability_votes, ); let commitments = CandidateCommitments:: { - upward_messages: vec![], - horizontal_messages: vec![], + upward_messages: Default::default(), + horizontal_messages: Default::default(), new_validation_code: None, head_data: Self::mock_head_data(), processed_downward_messages: 0, @@ -535,8 +535,8 @@ impl BenchBuilder { validation_code_hash, }, commitments: CandidateCommitments:: { - upward_messages: Vec::new(), - horizontal_messages: Vec::new(), + upward_messages: Default::default(), + horizontal_messages: Default::default(), new_validation_code: includes_code_upgrade .map(|v| ValidationCode(vec![42u8; v as usize])), head_data, @@ -575,7 +575,7 @@ impl BenchBuilder { /// Fill cores `start..last` with dispute statement sets. The statement sets will have 3/4th of /// votes be valid, and 1/4th of votes be invalid. - fn create_disputes_with_no_spam( + fn create_disputes( &self, start: u32, last: u32, @@ -595,6 +595,7 @@ impl BenchBuilder { let (para_id, core_idx, group_idx) = self.create_indexes(seed); let candidate_hash = CandidateHash(H256::from(byte32_slice_from(seed))); + let relay_parent = H256::from(byte32_slice_from(seed)); Self::add_availability( para_id, @@ -614,9 +615,12 @@ impl BenchBuilder { // so we make sure that we have a super majority with valid statements. let dispute_statement = if validator_index % 4 == 0 { DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit) + } else if validator_index < 3 { + // Set two votes as backing for the dispute set to be accepted + DisputeStatement::Valid( + ValidDisputeStatementKind::BackingValid(relay_parent) + ) } else { - // Note that in the future we could use some availability votes as an - // implicit valid kind. DisputeStatement::Valid(ValidDisputeStatementKind::Explicit) }; let data = dispute_statement.payload_data(candidate_hash.clone(), session); @@ -664,7 +668,7 @@ impl BenchBuilder { let backed_candidates = builder .create_backed_candidates(&builder.backed_and_concluding_cores, builder.code_upgrade); - let disputes = builder.create_disputes_with_no_spam( + let disputes = builder.create_disputes( builder.backed_and_concluding_cores.len() as u32, used_cores, builder.dispute_sessions.as_slice(), diff --git a/runtime/parachains/src/configuration.rs b/runtime/parachains/src/configuration.rs index 113fad1d7a57..14926c726b48 100644 --- a/runtime/parachains/src/configuration.rs +++ b/runtime/parachains/src/configuration.rs @@ -22,7 +22,8 @@ use crate::shared; use frame_support::{pallet_prelude::*, weights::constants::WEIGHT_REF_TIME_PER_MILLIS}; use frame_system::pallet_prelude::*; use parity_scale_codec::{Decode, Encode}; -use primitives::v2::{Balance, SessionIndex, MAX_CODE_SIZE, MAX_HEAD_DATA_SIZE, MAX_POV_SIZE}; +use polkadot_parachain::primitives::{MAX_HORIZONTAL_MESSAGE_NUM, MAX_UPWARD_MESSAGE_NUM}; +use primitives::{Balance, SessionIndex, MAX_CODE_SIZE, MAX_HEAD_DATA_SIZE, MAX_POV_SIZE}; use sp_runtime::traits::Zero; use sp_std::prelude::*; @@ -192,8 +193,6 @@ pub struct HostConfiguration { pub dispute_period: SessionIndex, /// How long after dispute conclusion to accept statements. pub dispute_post_conclusion_acceptance_period: BlockNumber, - /// The maximum number of dispute spam slots - pub dispute_max_spam_slots: u32, /// How long it takes for a dispute to conclude by time-out, if no supermajority is reached. pub dispute_conclusion_by_time_out_period: BlockNumber, /// The amount of consensus slots that must pass between submitting an assignment and @@ -263,7 +262,6 @@ impl> Default for HostConfiguration { }, /// `validation_upgrade_delay` is less than or equal 1. ValidationUpgradeDelayIsTooLow { validation_upgrade_delay: BlockNumber }, - /// Maximum UMP message size (`MAX_UPWARD_MESSAGE_SIZE_BOUND`) exceeded. + /// Maximum UMP message size ([`MAX_UPWARD_MESSAGE_SIZE_BOUND`]) exceeded. MaxUpwardMessageSizeExceeded { max_message_size: u32 }, + /// Maximum HRMP message num ([`MAX_HORIZONTAL_MESSAGE_NUM`]) exceeded. + MaxHorizontalMessageNumExceeded { max_message_num: u32 }, + /// Maximum UMP message num ([`MAX_UPWARD_MESSAGE_NUM`]) exceeded. + MaxUpwardMessageNumExceeded { max_message_num: u32 }, /// Maximum number of HRMP outbound channels exceeded. MaxHrmpOutboundChannelsExceeded, /// Maximum number of HRMP inbound channels exceeded. @@ -399,6 +401,18 @@ where }) } + if self.hrmp_max_message_num_per_candidate > MAX_HORIZONTAL_MESSAGE_NUM { + return Err(MaxHorizontalMessageNumExceeded { + max_message_num: self.hrmp_max_message_num_per_candidate, + }) + } + + if self.max_upward_message_num_per_candidate > MAX_UPWARD_MESSAGE_NUM { + return Err(MaxUpwardMessageNumExceeded { + max_message_num: self.max_upward_message_num_per_candidate, + }) + } + if self.hrmp_max_parachain_outbound_channels > crate::hrmp::HRMP_MAX_OUTBOUND_CHANNELS_BOUND { return Err(MaxHrmpOutboundChannelsExceeded) @@ -459,7 +473,6 @@ pub mod pallet { use super::*; #[pallet::pallet] - #[pallet::generate_store(pub(super) trait Store)] #[pallet::storage_version(migration::STORAGE_VERSION)] #[pallet::without_storage_info] pub struct Pallet(_); @@ -521,6 +534,7 @@ pub mod pallet { #[pallet::call] impl Pallet { /// Set the validation upgrade cooldown. + #[pallet::call_index(0)] #[pallet::weight(( T::WeightInfo::set_config_with_block_number(), DispatchClass::Operational, @@ -536,6 +550,7 @@ pub mod pallet { } /// Set the validation upgrade delay. + #[pallet::call_index(1)] #[pallet::weight(( T::WeightInfo::set_config_with_block_number(), DispatchClass::Operational, @@ -551,6 +566,7 @@ pub mod pallet { } /// Set the acceptance period for an included candidate. + #[pallet::call_index(2)] #[pallet::weight(( T::WeightInfo::set_config_with_block_number(), DispatchClass::Operational, @@ -566,6 +582,7 @@ pub mod pallet { } /// Set the max validation code size for incoming upgrades. + #[pallet::call_index(3)] #[pallet::weight(( T::WeightInfo::set_config_with_u32(), DispatchClass::Operational, @@ -578,6 +595,7 @@ pub mod pallet { } /// Set the max POV block size for incoming upgrades. + #[pallet::call_index(4)] #[pallet::weight(( T::WeightInfo::set_config_with_u32(), DispatchClass::Operational, @@ -590,6 +608,7 @@ pub mod pallet { } /// Set the max head data size for paras. + #[pallet::call_index(5)] #[pallet::weight(( T::WeightInfo::set_config_with_u32(), DispatchClass::Operational, @@ -602,6 +621,7 @@ pub mod pallet { } /// Set the number of parathread execution cores. + #[pallet::call_index(6)] #[pallet::weight(( T::WeightInfo::set_config_with_u32(), DispatchClass::Operational, @@ -614,6 +634,7 @@ pub mod pallet { } /// Set the number of retries for a particular parathread. + #[pallet::call_index(7)] #[pallet::weight(( T::WeightInfo::set_config_with_u32(), DispatchClass::Operational, @@ -626,6 +647,7 @@ pub mod pallet { } /// Set the parachain validator-group rotation frequency + #[pallet::call_index(8)] #[pallet::weight(( T::WeightInfo::set_config_with_block_number(), DispatchClass::Operational, @@ -641,6 +663,7 @@ pub mod pallet { } /// Set the availability period for parachains. + #[pallet::call_index(9)] #[pallet::weight(( T::WeightInfo::set_config_with_block_number(), DispatchClass::Operational, @@ -656,6 +679,7 @@ pub mod pallet { } /// Set the availability period for parathreads. + #[pallet::call_index(10)] #[pallet::weight(( T::WeightInfo::set_config_with_block_number(), DispatchClass::Operational, @@ -671,6 +695,7 @@ pub mod pallet { } /// Set the scheduling lookahead, in expected number of blocks at peak throughput. + #[pallet::call_index(11)] #[pallet::weight(( T::WeightInfo::set_config_with_u32(), DispatchClass::Operational, @@ -683,6 +708,7 @@ pub mod pallet { } /// Set the maximum number of validators to assign to any core. + #[pallet::call_index(12)] #[pallet::weight(( T::WeightInfo::set_config_with_option_u32(), DispatchClass::Operational, @@ -698,6 +724,7 @@ pub mod pallet { } /// Set the maximum number of validators to use in parachain consensus. + #[pallet::call_index(13)] #[pallet::weight(( T::WeightInfo::set_config_with_option_u32(), DispatchClass::Operational, @@ -710,6 +737,7 @@ pub mod pallet { } /// Set the dispute period, in number of sessions to keep for disputes. + #[pallet::call_index(14)] #[pallet::weight(( T::WeightInfo::set_config_with_u32(), DispatchClass::Operational, @@ -722,6 +750,7 @@ pub mod pallet { } /// Set the dispute post conclusion acceptance period. + #[pallet::call_index(15)] #[pallet::weight(( T::WeightInfo::set_config_with_block_number(), DispatchClass::Operational, @@ -736,19 +765,8 @@ pub mod pallet { }) } - /// Set the maximum number of dispute spam slots. - #[pallet::weight(( - T::WeightInfo::set_config_with_u32(), - DispatchClass::Operational, - ))] - pub fn set_dispute_max_spam_slots(origin: OriginFor, new: u32) -> DispatchResult { - ensure_root(origin)?; - Self::schedule_config_update(|config| { - config.dispute_max_spam_slots = new; - }) - } - /// Set the dispute conclusion by time out period. + #[pallet::call_index(17)] #[pallet::weight(( T::WeightInfo::set_config_with_block_number(), DispatchClass::Operational, @@ -765,6 +783,7 @@ pub mod pallet { /// Set the no show slots, in number of number of consensus slots. /// Must be at least 1. + #[pallet::call_index(18)] #[pallet::weight(( T::WeightInfo::set_config_with_u32(), DispatchClass::Operational, @@ -777,6 +796,7 @@ pub mod pallet { } /// Set the total number of delay tranches. + #[pallet::call_index(19)] #[pallet::weight(( T::WeightInfo::set_config_with_u32(), DispatchClass::Operational, @@ -789,6 +809,7 @@ pub mod pallet { } /// Set the zeroth delay tranche width. + #[pallet::call_index(20)] #[pallet::weight(( T::WeightInfo::set_config_with_u32(), DispatchClass::Operational, @@ -801,6 +822,7 @@ pub mod pallet { } /// Set the number of validators needed to approve a block. + #[pallet::call_index(21)] #[pallet::weight(( T::WeightInfo::set_config_with_u32(), DispatchClass::Operational, @@ -813,6 +835,7 @@ pub mod pallet { } /// Set the number of samples to do of the `RelayVRFModulo` approval assignment criterion. + #[pallet::call_index(22)] #[pallet::weight(( T::WeightInfo::set_config_with_u32(), DispatchClass::Operational, @@ -825,6 +848,7 @@ pub mod pallet { } /// Sets the maximum items that can present in a upward dispatch queue at once. + #[pallet::call_index(23)] #[pallet::weight(( T::WeightInfo::set_config_with_u32(), DispatchClass::Operational, @@ -837,6 +861,7 @@ pub mod pallet { } /// Sets the maximum total size of items that can present in a upward dispatch queue at once. + #[pallet::call_index(24)] #[pallet::weight(( T::WeightInfo::set_config_with_u32(), DispatchClass::Operational, @@ -849,6 +874,7 @@ pub mod pallet { } /// Set the critical downward message size. + #[pallet::call_index(25)] #[pallet::weight(( T::WeightInfo::set_config_with_u32(), DispatchClass::Operational, @@ -861,6 +887,7 @@ pub mod pallet { } /// Sets the soft limit for the phase of dispatching dispatchable upward messages. + #[pallet::call_index(26)] #[pallet::weight(( T::WeightInfo::set_config_with_weight(), DispatchClass::Operational, @@ -873,6 +900,7 @@ pub mod pallet { } /// Sets the maximum size of an upward message that can be sent by a candidate. + #[pallet::call_index(27)] #[pallet::weight(( T::WeightInfo::set_config_with_u32(), DispatchClass::Operational, @@ -885,6 +913,7 @@ pub mod pallet { } /// Sets the maximum number of messages that a candidate can contain. + #[pallet::call_index(28)] #[pallet::weight(( T::WeightInfo::set_config_with_u32(), DispatchClass::Operational, @@ -900,6 +929,7 @@ pub mod pallet { } /// Sets the number of sessions after which an HRMP open channel request expires. + #[pallet::call_index(29)] #[pallet::weight(( T::WeightInfo::set_hrmp_open_request_ttl(), DispatchClass::Operational, @@ -911,6 +941,7 @@ pub mod pallet { } /// Sets the amount of funds that the sender should provide for opening an HRMP channel. + #[pallet::call_index(30)] #[pallet::weight(( T::WeightInfo::set_config_with_balance(), DispatchClass::Operational, @@ -924,6 +955,7 @@ pub mod pallet { /// Sets the amount of funds that the recipient should provide for accepting opening an HRMP /// channel. + #[pallet::call_index(31)] #[pallet::weight(( T::WeightInfo::set_config_with_balance(), DispatchClass::Operational, @@ -936,6 +968,7 @@ pub mod pallet { } /// Sets the maximum number of messages allowed in an HRMP channel at once. + #[pallet::call_index(32)] #[pallet::weight(( T::WeightInfo::set_config_with_u32(), DispatchClass::Operational, @@ -948,6 +981,7 @@ pub mod pallet { } /// Sets the maximum total size of messages in bytes allowed in an HRMP channel at once. + #[pallet::call_index(33)] #[pallet::weight(( T::WeightInfo::set_config_with_u32(), DispatchClass::Operational, @@ -960,6 +994,7 @@ pub mod pallet { } /// Sets the maximum number of inbound HRMP channels a parachain is allowed to accept. + #[pallet::call_index(34)] #[pallet::weight(( T::WeightInfo::set_config_with_u32(), DispatchClass::Operational, @@ -975,6 +1010,7 @@ pub mod pallet { } /// Sets the maximum number of inbound HRMP channels a parathread is allowed to accept. + #[pallet::call_index(35)] #[pallet::weight(( T::WeightInfo::set_config_with_u32(), DispatchClass::Operational, @@ -990,6 +1026,7 @@ pub mod pallet { } /// Sets the maximum size of a message that could ever be put into an HRMP channel. + #[pallet::call_index(36)] #[pallet::weight(( T::WeightInfo::set_config_with_u32(), DispatchClass::Operational, @@ -1002,6 +1039,7 @@ pub mod pallet { } /// Sets the maximum number of outbound HRMP channels a parachain is allowed to open. + #[pallet::call_index(37)] #[pallet::weight(( T::WeightInfo::set_config_with_u32(), DispatchClass::Operational, @@ -1017,6 +1055,7 @@ pub mod pallet { } /// Sets the maximum number of outbound HRMP channels a parathread is allowed to open. + #[pallet::call_index(38)] #[pallet::weight(( T::WeightInfo::set_config_with_u32(), DispatchClass::Operational, @@ -1032,6 +1071,7 @@ pub mod pallet { } /// Sets the maximum number of outbound HRMP messages can be sent by a candidate. + #[pallet::call_index(39)] #[pallet::weight(( T::WeightInfo::set_config_with_u32(), DispatchClass::Operational, @@ -1047,6 +1087,7 @@ pub mod pallet { } /// Sets the maximum amount of weight any individual upward message may consume. + #[pallet::call_index(40)] #[pallet::weight(( T::WeightInfo::set_config_with_weight(), DispatchClass::Operational, @@ -1059,6 +1100,7 @@ pub mod pallet { } /// Enable or disable PVF pre-checking. Consult the field documentation prior executing. + #[pallet::call_index(41)] #[pallet::weight(( // Using u32 here is a little bit of cheating, but that should be fine. T::WeightInfo::set_config_with_u32(), @@ -1072,6 +1114,7 @@ pub mod pallet { } /// Set the number of session changes after which a PVF pre-checking voting is rejected. + #[pallet::call_index(42)] #[pallet::weight(( T::WeightInfo::set_config_with_u32(), DispatchClass::Operational, @@ -1087,6 +1130,7 @@ pub mod pallet { /// upgrade taking place. /// /// See the field documentation for information and constraints for the new value. + #[pallet::call_index(43)] #[pallet::weight(( T::WeightInfo::set_config_with_block_number(), DispatchClass::Operational, @@ -1103,13 +1147,14 @@ pub mod pallet { /// Setting this to true will disable consistency checks for the configuration setters. /// Use with caution. + #[pallet::call_index(44)] #[pallet::weight(( T::DbWeight::get().writes(1), DispatchClass::Operational, ))] pub fn set_bypass_consistency_check(origin: OriginFor, new: bool) -> DispatchResult { ensure_root(origin)?; - ::BypassConsistencyCheck::put(new); + BypassConsistencyCheck::::put(new); Ok(()) } } @@ -1119,7 +1164,7 @@ pub mod pallet { fn integrity_test() { assert_eq!( &ActiveConfig::::hashed_key(), - primitives::v2::well_known_keys::ACTIVE_CONFIG, + primitives::well_known_keys::ACTIVE_CONFIG, "`well_known_keys::ACTIVE_CONFIG` doesn't match key of `ActiveConfig`! Make sure that the name of the\ configuration pallet is `Configuration` in the runtime!", ); @@ -1154,7 +1199,7 @@ impl Pallet { session_index: &SessionIndex, ) -> SessionChangeOutcome { let pending_configs = >::get(); - let prev_config = ::ActiveConfig::get(); + let prev_config = ActiveConfig::::get(); // No pending configuration changes, so we're done. if pending_configs.is_empty() { @@ -1177,7 +1222,7 @@ impl Pallet { let new_config = past_and_present.pop().map(|(_, config)| config); if let Some(ref new_config) = new_config { // Apply the new configuration. - ::ActiveConfig::put(new_config); + ActiveConfig::::put(new_config); } >::put(future); @@ -1194,7 +1239,7 @@ impl Pallet { /// only when enabling parachains runtime pallets for the first time on a chain which has /// been running without them. pub fn force_set_active_config(config: HostConfiguration) { - ::ActiveConfig::set(config); + ActiveConfig::::set(config); } /// This function should be used to update members of the configuration. @@ -1256,7 +1301,7 @@ impl Pallet { updater(&mut base_config); let new_config = base_config; - if ::BypassConsistencyCheck::get() { + if BypassConsistencyCheck::::get() { // This will emit a warning each configuration update if the consistency check is // bypassed. This is an attempt to make sure the bypass is not accidentally left on. log::warn!( diff --git a/runtime/parachains/src/configuration/benchmarking.rs b/runtime/parachains/src/configuration/benchmarking.rs index 71e0c03e696b..77333383e9a3 100644 --- a/runtime/parachains/src/configuration/benchmarking.rs +++ b/runtime/parachains/src/configuration/benchmarking.rs @@ -26,7 +26,7 @@ benchmarks! { set_config_with_option_u32 {}: set_max_validators(RawOrigin::Root, Some(10)) - set_config_with_weight {}: set_ump_service_total_weight(RawOrigin::Root, Weight::from_ref_time(3_000_000)) + set_config_with_weight {}: set_ump_service_total_weight(RawOrigin::Root, Weight::from_parts(3_000_000, 0)) set_hrmp_open_request_ttl {}: { Err(BenchmarkError::Override( diff --git a/runtime/parachains/src/configuration/migration.rs b/runtime/parachains/src/configuration/migration.rs index 2b754f155966..7b2092cfc2c1 100644 --- a/runtime/parachains/src/configuration/migration.rs +++ b/runtime/parachains/src/configuration/migration.rs @@ -16,12 +16,8 @@ //! A module that is responsible for migration of storage. -use crate::configuration::{self, Config, Pallet, Store, MAX_POV_SIZE}; -use frame_support::{ - pallet_prelude::*, - traits::StorageVersion, - weights::{OldWeight, Weight}, -}; +use crate::configuration::{self, ActiveConfig, Config, Pallet, MAX_POV_SIZE}; +use frame_support::{pallet_prelude::*, traits::StorageVersion, weights::Weight}; use frame_system::pallet_prelude::BlockNumberFor; /// The current storage version. @@ -29,12 +25,15 @@ use frame_system::pallet_prelude::BlockNumberFor; /// v0-v1: /// v1-v2: /// v2-v3: -pub const STORAGE_VERSION: StorageVersion = StorageVersion::new(3); +/// v3-v4: +pub const STORAGE_VERSION: StorageVersion = StorageVersion::new(4); -pub mod v3 { +pub mod v4 { use super::*; - use frame_support::traits::OnRuntimeUpgrade; - use primitives::v2::{Balance, SessionIndex}; + use frame_support::{traits::OnRuntimeUpgrade, weights::constants::WEIGHT_REF_TIME_PER_MILLIS}; + use primitives::{Balance, SessionIndex}; + #[cfg(feature = "try-runtime")] + use sp_std::prelude::*; // Copied over from configuration.rs @ de9e147695b9f1be8bd44e07861a31e483c8343a and removed // all the comments, and changed the Weight struct to OldWeight @@ -51,7 +50,7 @@ pub mod v3 { pub validation_upgrade_delay: BlockNumber, pub max_pov_size: u32, pub max_downward_message_size: u32, - pub ump_service_total_weight: OldWeight, + pub ump_service_total_weight: Weight, pub hrmp_max_parachain_outbound_channels: u32, pub hrmp_max_parathread_outbound_channels: u32, pub hrmp_sender_deposit: Balance, @@ -79,7 +78,7 @@ pub mod v3 { pub zeroth_delay_tranche_width: u32, pub needed_approvals: u32, pub relay_vrf_modulo_samples: u32, - pub ump_max_individual_weight: OldWeight, + pub ump_max_individual_weight: Weight, pub pvf_checking_enabled: bool, pub pvf_voting_ttl: SessionIndex, pub minimum_validation_upgrade_delay: BlockNumber, @@ -114,7 +113,7 @@ pub mod v3 { max_upward_queue_count: Default::default(), max_upward_queue_size: Default::default(), max_downward_message_size: Default::default(), - ump_service_total_weight: OldWeight(Default::default()), + ump_service_total_weight: Default::default(), max_upward_message_size: Default::default(), max_upward_message_num_per_candidate: Default::default(), hrmp_sender_deposit: Default::default(), @@ -127,8 +126,9 @@ pub mod v3 { hrmp_max_parachain_outbound_channels: Default::default(), hrmp_max_parathread_outbound_channels: Default::default(), hrmp_max_message_num_per_candidate: Default::default(), - ump_max_individual_weight: OldWeight( - frame_support::weights::constants::WEIGHT_REF_TIME_PER_MILLIS * 20, + ump_max_individual_weight: Weight::from_parts( + 20u64 * WEIGHT_REF_TIME_PER_MILLIS, + MAX_POV_SIZE as u64, ), pvf_checking_enabled: false, pvf_voting_ttl: 2u32.into(), @@ -137,32 +137,51 @@ pub mod v3 { } } - pub struct MigrateToV3(sp_std::marker::PhantomData); - impl OnRuntimeUpgrade for MigrateToV3 { + pub struct MigrateToV4(sp_std::marker::PhantomData); + impl OnRuntimeUpgrade for MigrateToV4 { + #[cfg(feature = "try-runtime")] + fn pre_upgrade() -> Result, &'static str> { + log::trace!(target: crate::configuration::LOG_TARGET, "Running pre_upgrade()"); + + ensure!(StorageVersion::get::>() == 3, "The migration requires version 3"); + Ok(Vec::new()) + } + fn on_runtime_upgrade() -> Weight { - if StorageVersion::get::>() == 2 { - let weight_consumed = migrate_to_v3::(); + if StorageVersion::get::>() == 3 { + let weight_consumed = migrate_to_v4::(); - log::info!(target: configuration::LOG_TARGET, "MigrateToV3 executed successfully"); + log::info!(target: configuration::LOG_TARGET, "MigrateToV4 executed successfully"); STORAGE_VERSION.put::>(); weight_consumed } else { - log::warn!(target: configuration::LOG_TARGET, "MigrateToV3 should be removed."); + log::warn!(target: configuration::LOG_TARGET, "MigrateToV4 should be removed."); T::DbWeight::get().reads(1) } } + + #[cfg(feature = "try-runtime")] + fn post_upgrade(_state: Vec) -> Result<(), &'static str> { + log::trace!(target: crate::configuration::LOG_TARGET, "Running post_upgrade()"); + ensure!( + StorageVersion::get::>() == STORAGE_VERSION, + "Storage version should be 4 after the migration" + ); + + Ok(()) + } } } -fn migrate_to_v3() -> Weight { +fn migrate_to_v4() -> Weight { // Unusual formatting is justified: // - make it easier to verify that fields assign what they supposed to assign. // - this code is transient and will be removed after all migrations are done. // - this code is important enough to optimize for legibility sacrificing consistency. #[rustfmt::skip] let translate = - |pre: v3::OldHostConfiguration>| -> + |pre: v4::OldHostConfiguration>| -> configuration::HostConfiguration> { super::HostConfiguration { @@ -177,6 +196,7 @@ validation_upgrade_cooldown : pre.validation_upgrade_cooldown, validation_upgrade_delay : pre.validation_upgrade_delay, max_pov_size : pre.max_pov_size, max_downward_message_size : pre.max_downward_message_size, +ump_service_total_weight : pre.ump_service_total_weight, hrmp_max_parachain_outbound_channels : pre.hrmp_max_parachain_outbound_channels, hrmp_max_parathread_outbound_channels : pre.hrmp_max_parathread_outbound_channels, hrmp_sender_deposit : pre.hrmp_sender_deposit, @@ -197,23 +217,20 @@ max_validators_per_core : pre.max_validators_per_core, max_validators : pre.max_validators, dispute_period : pre.dispute_period, dispute_post_conclusion_acceptance_period: pre.dispute_post_conclusion_acceptance_period, -dispute_max_spam_slots : pre.dispute_max_spam_slots, dispute_conclusion_by_time_out_period : pre.dispute_conclusion_by_time_out_period, no_show_slots : pre.no_show_slots, n_delay_tranches : pre.n_delay_tranches, zeroth_delay_tranche_width : pre.zeroth_delay_tranche_width, needed_approvals : pre.needed_approvals, relay_vrf_modulo_samples : pre.relay_vrf_modulo_samples, +ump_max_individual_weight : pre.ump_max_individual_weight, pvf_checking_enabled : pre.pvf_checking_enabled, pvf_voting_ttl : pre.pvf_voting_ttl, minimum_validation_upgrade_delay : pre.minimum_validation_upgrade_delay, - -ump_service_total_weight: Weight::from_ref_time(pre.ump_service_total_weight.0).set_proof_size(MAX_POV_SIZE as u64), -ump_max_individual_weight: Weight::from_ref_time(pre.ump_max_individual_weight.0).set_proof_size(MAX_POV_SIZE as u64), } }; - if let Err(_) = as Store>::ActiveConfig::translate(|pre| pre.map(translate)) { + if let Err(_) = ActiveConfig::::translate(|pre| pre.map(translate)) { // `Err` is returned when the pre-migration type cannot be deserialized. This // cannot happen if the migration runs correctly, i.e. against the expected version. // @@ -221,7 +238,7 @@ ump_max_individual_weight: Weight::from_ref_time(pre.ump_max_individual_weight.0 // to be unlikely to be caused by this. So we just log. Maybe it'll work out still? log::error!( target: configuration::LOG_TARGET, - "unexpected error when performing translation of the configuration type during storage upgrade to v2." + "unexpected error when performing translation of the configuration type during storage upgrade to v4." ); } @@ -234,31 +251,42 @@ mod tests { use crate::mock::{new_test_ext, Test}; #[test] - fn v2_deserialized_from_actual_data() { - // Fetched at Kusama 14,703,780 (0x3b2c305d01bd4adf1973d32a2d55ca1260a55eea8dfb3168e317c57f2841fdf1) + fn v3_deserialized_from_actual_data() { + // Example how to get new `raw_config`: + // We'll obtain the raw_config hes for block + // 15,772,152 (0xf89d3ab5312c5f70d396dc59612f0aa65806c798346f9db4b35278baed2e0e53) on Kusama. + // Steps: + // 1. Go to Polkadot.js -> Developer -> Chain state -> Storage: https://polkadot.js.org/apps/#/chainstate + // 2. Set these parameters: + // 2.1. selected state query: configuration; activeConfig(): PolkadotRuntimeParachainsConfigurationHostConfiguration + // 2.2. blockhash to query at: 0xf89d3ab5312c5f70d396dc59612f0aa65806c798346f9db4b35278baed2e0e53 (the hash of the block) + // 2.3. Note the value of encoded storage key -> 0x06de3d8a54d27e44a9d5ce189618f22db4b49d95320d9021994c850f25b8e385 for the referenced block. + // 2.4. You'll also need the decoded values to update the test. + // 3. Go to Polkadot.js -> Developer -> Chain state -> Raw storage + // 3.1 Enter the encoded storage key and you get the raw config. + + // Fetched at Kusama 15,772,152 (0xf89d3ab5312c5f70d396dc59612f0aa65806c798346f9db4b35278baed2e0e53) // // This exceeds the maximal line width length, but that's fine, since this is not code and // doesn't need to be read and also leaving it as one line allows to easily copy it. - let raw_config = hex_literal::hex!["0000a000005000000a00000000c8000000c800000a0000000a000000100e0000580200000000500000c8000000e87648170000001e00000000000000005039278c0400000000000000000000005039278c0400000000000000000000e8030000009001001e00000000000000009001008070000000000000000000000a0000000a0000000a00000001000000010500000001c8000000060000005802000002000000580200000200000059000000000000001e0000002800000000c817a804000000000200000014000000"]; + let raw_config = hex_literal::hex!["0000a000005000000a00000000c8000000c800000a0000000a000000100e0000580200000000500000c800000700e8764817020040011e00000000000000005039278c0400000000000000000000005039278c0400000000000000000000e8030000009001001e00000000000000009001008070000000000000000000000a0000000a0000000a00000001000000010500000001c8000000060000005802000002000000580200000200000059000000000000001e000000280000000700c817a80402004001000200000014000000"]; - let v2 = - v3::OldHostConfiguration::::decode(&mut &raw_config[..]) - .unwrap(); + let v3 = v4::OldHostConfiguration::::decode(&mut &raw_config[..]) + .unwrap(); // We check only a sample of the values here. If we missed any fields or messed up data types // that would skew all the fields coming after. - assert_eq!(v2.max_code_size, 10_485_760); - assert_eq!(v2.validation_upgrade_cooldown, 3600); - assert_eq!(v2.max_pov_size, 5_242_880); - assert_eq!(v2.hrmp_channel_max_message_size, 102_400); - assert_eq!(v2.dispute_max_spam_slots, 2); - assert_eq!(v2.n_delay_tranches, 89); - assert_eq!(v2.ump_max_individual_weight, OldWeight(20_000_000_000)); - assert_eq!(v2.minimum_validation_upgrade_delay, 20); + assert_eq!(v3.max_code_size, 10_485_760); + assert_eq!(v3.validation_upgrade_cooldown, 3600); + assert_eq!(v3.max_pov_size, 5_242_880); + assert_eq!(v3.hrmp_channel_max_message_size, 102_400); + assert_eq!(v3.n_delay_tranches, 89); + assert_eq!(v3.ump_max_individual_weight, Weight::from_parts(20_000_000_000, 5_242_880)); + assert_eq!(v3.minimum_validation_upgrade_delay, 20); } #[test] - fn test_migrate_to_v3() { + fn test_migrate_to_v4() { // Host configuration has lots of fields. However, in this migration we add only a couple of // fields. The most important part to check are a couple of the last fields. We also pick // extra fields to check arbitrarily, e.g. depending on their position (i.e. the middle) and @@ -267,8 +295,8 @@ mod tests { // We specify only the picked fields and the rest should be provided by the `Default` // implementation. That implementation is copied over between the two types and should work // fine. - let v2 = v3::OldHostConfiguration:: { - ump_max_individual_weight: OldWeight(0x71616e6f6e0au64), + let v3 = v4::OldHostConfiguration:: { + ump_max_individual_weight: Weight::from_parts(0x71616e6f6e0au64, 0x71616e6f6e0au64), needed_approvals: 69, thread_availability_period: 55, hrmp_recipient_deposit: 1337, @@ -279,64 +307,61 @@ mod tests { }; new_test_ext(Default::default()).execute_with(|| { - // Implant the v2 version in the state. + // Implant the v3 version in the state. frame_support::storage::unhashed::put_raw( &configuration::ActiveConfig::::hashed_key(), - &v2.encode(), + &v3.encode(), ); - migrate_to_v3::(); + migrate_to_v4::(); - let v3 = configuration::ActiveConfig::::get(); + let v4 = configuration::ActiveConfig::::get(); #[rustfmt::skip] { - assert_eq!(v2.max_code_size , v3.max_code_size); - assert_eq!(v2.max_head_data_size , v3.max_head_data_size); - assert_eq!(v2.max_upward_queue_count , v3.max_upward_queue_count); - assert_eq!(v2.max_upward_queue_size , v3.max_upward_queue_size); - assert_eq!(v2.max_upward_message_size , v3.max_upward_message_size); - assert_eq!(v2.max_upward_message_num_per_candidate , v3.max_upward_message_num_per_candidate); - assert_eq!(v2.hrmp_max_message_num_per_candidate , v3.hrmp_max_message_num_per_candidate); - assert_eq!(v2.validation_upgrade_cooldown , v3.validation_upgrade_cooldown); - assert_eq!(v2.validation_upgrade_delay , v3.validation_upgrade_delay); - assert_eq!(v2.max_pov_size , v3.max_pov_size); - assert_eq!(v2.max_downward_message_size , v3.max_downward_message_size); - assert_eq!(v2.hrmp_max_parachain_outbound_channels , v3.hrmp_max_parachain_outbound_channels); - assert_eq!(v2.hrmp_max_parathread_outbound_channels , v3.hrmp_max_parathread_outbound_channels); - assert_eq!(v2.hrmp_sender_deposit , v3.hrmp_sender_deposit); - assert_eq!(v2.hrmp_recipient_deposit , v3.hrmp_recipient_deposit); - assert_eq!(v2.hrmp_channel_max_capacity , v3.hrmp_channel_max_capacity); - assert_eq!(v2.hrmp_channel_max_total_size , v3.hrmp_channel_max_total_size); - assert_eq!(v2.hrmp_max_parachain_inbound_channels , v3.hrmp_max_parachain_inbound_channels); - assert_eq!(v2.hrmp_max_parathread_inbound_channels , v3.hrmp_max_parathread_inbound_channels); - assert_eq!(v2.hrmp_channel_max_message_size , v3.hrmp_channel_max_message_size); - assert_eq!(v2.code_retention_period , v3.code_retention_period); - assert_eq!(v2.parathread_cores , v3.parathread_cores); - assert_eq!(v2.parathread_retries , v3.parathread_retries); - assert_eq!(v2.group_rotation_frequency , v3.group_rotation_frequency); - assert_eq!(v2.chain_availability_period , v3.chain_availability_period); - assert_eq!(v2.thread_availability_period , v3.thread_availability_period); - assert_eq!(v2.scheduling_lookahead , v3.scheduling_lookahead); - assert_eq!(v2.max_validators_per_core , v3.max_validators_per_core); - assert_eq!(v2.max_validators , v3.max_validators); - assert_eq!(v2.dispute_period , v3.dispute_period); - assert_eq!(v2.dispute_post_conclusion_acceptance_period, v3.dispute_post_conclusion_acceptance_period); - assert_eq!(v2.dispute_max_spam_slots , v3.dispute_max_spam_slots); - assert_eq!(v2.dispute_conclusion_by_time_out_period , v3.dispute_conclusion_by_time_out_period); - assert_eq!(v2.no_show_slots , v3.no_show_slots); - assert_eq!(v2.n_delay_tranches , v3.n_delay_tranches); - assert_eq!(v2.zeroth_delay_tranche_width , v3.zeroth_delay_tranche_width); - assert_eq!(v2.needed_approvals , v3.needed_approvals); - assert_eq!(v2.relay_vrf_modulo_samples , v3.relay_vrf_modulo_samples); - assert_eq!(v2.pvf_checking_enabled , v3.pvf_checking_enabled); - assert_eq!(v2.pvf_voting_ttl , v3.pvf_voting_ttl); - assert_eq!(v2.minimum_validation_upgrade_delay , v3.minimum_validation_upgrade_delay); + assert_eq!(v3.max_code_size , v4.max_code_size); + assert_eq!(v3.max_head_data_size , v4.max_head_data_size); + assert_eq!(v3.max_upward_queue_count , v4.max_upward_queue_count); + assert_eq!(v3.max_upward_queue_size , v4.max_upward_queue_size); + assert_eq!(v3.max_upward_message_size , v4.max_upward_message_size); + assert_eq!(v3.max_upward_message_num_per_candidate , v4.max_upward_message_num_per_candidate); + assert_eq!(v3.hrmp_max_message_num_per_candidate , v4.hrmp_max_message_num_per_candidate); + assert_eq!(v3.validation_upgrade_cooldown , v4.validation_upgrade_cooldown); + assert_eq!(v3.validation_upgrade_delay , v4.validation_upgrade_delay); + assert_eq!(v3.max_pov_size , v4.max_pov_size); + assert_eq!(v3.max_downward_message_size , v4.max_downward_message_size); + assert_eq!(v3.ump_service_total_weight , v4.ump_service_total_weight); + assert_eq!(v3.hrmp_max_parachain_outbound_channels , v4.hrmp_max_parachain_outbound_channels); + assert_eq!(v3.hrmp_max_parathread_outbound_channels , v4.hrmp_max_parathread_outbound_channels); + assert_eq!(v3.hrmp_sender_deposit , v4.hrmp_sender_deposit); + assert_eq!(v3.hrmp_recipient_deposit , v4.hrmp_recipient_deposit); + assert_eq!(v3.hrmp_channel_max_capacity , v4.hrmp_channel_max_capacity); + assert_eq!(v3.hrmp_channel_max_total_size , v4.hrmp_channel_max_total_size); + assert_eq!(v3.hrmp_max_parachain_inbound_channels , v4.hrmp_max_parachain_inbound_channels); + assert_eq!(v3.hrmp_max_parathread_inbound_channels , v4.hrmp_max_parathread_inbound_channels); + assert_eq!(v3.hrmp_channel_max_message_size , v4.hrmp_channel_max_message_size); + assert_eq!(v3.code_retention_period , v4.code_retention_period); + assert_eq!(v3.parathread_cores , v4.parathread_cores); + assert_eq!(v3.parathread_retries , v4.parathread_retries); + assert_eq!(v3.group_rotation_frequency , v4.group_rotation_frequency); + assert_eq!(v3.chain_availability_period , v4.chain_availability_period); + assert_eq!(v3.thread_availability_period , v4.thread_availability_period); + assert_eq!(v3.scheduling_lookahead , v4.scheduling_lookahead); + assert_eq!(v3.max_validators_per_core , v4.max_validators_per_core); + assert_eq!(v3.max_validators , v4.max_validators); + assert_eq!(v3.dispute_period , v4.dispute_period); + assert_eq!(v3.dispute_post_conclusion_acceptance_period, v4.dispute_post_conclusion_acceptance_period); + assert_eq!(v3.dispute_conclusion_by_time_out_period , v4.dispute_conclusion_by_time_out_period); + assert_eq!(v3.no_show_slots , v4.no_show_slots); + assert_eq!(v3.n_delay_tranches , v4.n_delay_tranches); + assert_eq!(v3.zeroth_delay_tranche_width , v4.zeroth_delay_tranche_width); + assert_eq!(v3.needed_approvals , v4.needed_approvals); + assert_eq!(v3.relay_vrf_modulo_samples , v4.relay_vrf_modulo_samples); + assert_eq!(v3.ump_max_individual_weight , v4.ump_max_individual_weight); + assert_eq!(v3.pvf_checking_enabled , v4.pvf_checking_enabled); + assert_eq!(v3.pvf_voting_ttl , v4.pvf_voting_ttl); + assert_eq!(v3.minimum_validation_upgrade_delay , v4.minimum_validation_upgrade_delay); - assert_eq!(v2.ump_service_total_weight, OldWeight(v3.ump_service_total_weight.ref_time())); - assert_eq!(v2.ump_max_individual_weight, OldWeight(v3.ump_max_individual_weight.ref_time())); - assert_eq!(v3.ump_service_total_weight.proof_size(), MAX_POV_SIZE as u64); - assert_eq!(v3.ump_max_individual_weight.proof_size(), MAX_POV_SIZE as u64); }; // ; makes this a statement. `rustfmt::skip` cannot be put on an expression. }); } diff --git a/runtime/parachains/src/configuration/tests.rs b/runtime/parachains/src/configuration/tests.rs index 6f2faf6cb204..2d89aebc19d3 100644 --- a/runtime/parachains/src/configuration/tests.rs +++ b/runtime/parachains/src/configuration/tests.rs @@ -72,18 +72,18 @@ fn config_changes_after_2_session_boundary() { // Verify that the current configuration has not changed and that there is a scheduled // change for the SESSION_DELAY sessions in advance. assert_eq!(Configuration::config(), old_config); - assert_eq!(::PendingConfigs::get(), vec![(2, config.clone())]); + assert_eq!(PendingConfigs::::get(), vec![(2, config.clone())]); on_new_session(1); // One session has passed, we should be still waiting for the pending configuration. assert_eq!(Configuration::config(), old_config); - assert_eq!(::PendingConfigs::get(), vec![(2, config.clone())]); + assert_eq!(PendingConfigs::::get(), vec![(2, config.clone())]); on_new_session(2); assert_eq!(Configuration::config(), config); - assert_eq!(::PendingConfigs::get(), vec![]); + assert_eq!(PendingConfigs::::get(), vec![]); }) } @@ -99,17 +99,17 @@ fn consecutive_changes_within_one_session() { assert_ok!(Configuration::set_validation_upgrade_delay(RuntimeOrigin::root(), 100)); assert_ok!(Configuration::set_validation_upgrade_cooldown(RuntimeOrigin::root(), 100)); assert_eq!(Configuration::config(), old_config); - assert_eq!(::PendingConfigs::get(), vec![(2, config.clone())]); + assert_eq!(PendingConfigs::::get(), vec![(2, config.clone())]); on_new_session(1); assert_eq!(Configuration::config(), old_config); - assert_eq!(::PendingConfigs::get(), vec![(2, config.clone())]); + assert_eq!(PendingConfigs::::get(), vec![(2, config.clone())]); on_new_session(2); assert_eq!(Configuration::config(), config); - assert_eq!(::PendingConfigs::get(), vec![]); + assert_eq!(PendingConfigs::::get(), vec![]); }); } @@ -127,10 +127,7 @@ fn pending_next_session_but_we_upgrade_once_more() { assert_ok!(Configuration::set_validation_upgrade_delay(RuntimeOrigin::root(), 100)); assert_eq!(Configuration::config(), initial_config); - assert_eq!( - ::PendingConfigs::get(), - vec![(2, intermediate_config.clone())] - ); + assert_eq!(PendingConfigs::::get(), vec![(2, intermediate_config.clone())]); on_new_session(1); @@ -141,22 +138,19 @@ fn pending_next_session_but_we_upgrade_once_more() { // This should result in yet another configiguration change scheduled. assert_eq!(Configuration::config(), initial_config); assert_eq!( - ::PendingConfigs::get(), + PendingConfigs::::get(), vec![(2, intermediate_config.clone()), (3, final_config.clone())] ); on_new_session(2); assert_eq!(Configuration::config(), intermediate_config); - assert_eq!( - ::PendingConfigs::get(), - vec![(3, final_config.clone())] - ); + assert_eq!(PendingConfigs::::get(), vec![(3, final_config.clone())]); on_new_session(3); assert_eq!(Configuration::config(), final_config); - assert_eq!(::PendingConfigs::get(), vec![]); + assert_eq!(PendingConfigs::::get(), vec![]); }); } @@ -175,10 +169,7 @@ fn scheduled_session_config_update_while_next_session_pending() { assert_ok!(Configuration::set_validation_upgrade_delay(RuntimeOrigin::root(), 100)); assert_eq!(Configuration::config(), initial_config); - assert_eq!( - ::PendingConfigs::get(), - vec![(2, intermediate_config.clone())] - ); + assert_eq!(PendingConfigs::::get(), vec![(2, intermediate_config.clone())]); on_new_session(1); @@ -190,22 +181,19 @@ fn scheduled_session_config_update_while_next_session_pending() { // This should result in yet another configiguration change scheduled. assert_eq!(Configuration::config(), initial_config); assert_eq!( - ::PendingConfigs::get(), + PendingConfigs::::get(), vec![(2, intermediate_config.clone()), (3, final_config.clone())] ); on_new_session(2); assert_eq!(Configuration::config(), intermediate_config); - assert_eq!( - ::PendingConfigs::get(), - vec![(3, final_config.clone())] - ); + assert_eq!(PendingConfigs::::get(), vec![(3, final_config.clone())]); on_new_session(3); assert_eq!(Configuration::config(), final_config); - assert_eq!(::PendingConfigs::get(), vec![]); + assert_eq!(PendingConfigs::::get(), vec![]); }); } @@ -240,7 +228,7 @@ fn invariants() { Error::::InvalidNewValue ); - ::ActiveConfig::put(HostConfiguration { + ActiveConfig::::put(HostConfiguration { chain_availability_period: 10, thread_availability_period: 8, minimum_validation_upgrade_delay: 11, @@ -309,7 +297,6 @@ fn setting_pending_config_members() { max_validators: None, dispute_period: 239, dispute_post_conclusion_acceptance_period: 10, - dispute_max_spam_slots: 2, dispute_conclusion_by_time_out_period: 512, no_show_slots: 240, n_delay_tranches: 241, @@ -319,7 +306,7 @@ fn setting_pending_config_members() { max_upward_queue_count: 1337, max_upward_queue_size: 228, max_downward_message_size: 2048, - ump_service_total_weight: Weight::from_ref_time(20000), + ump_service_total_weight: Weight::from_parts(20000, 20000), max_upward_message_size: 448, max_upward_message_num_per_candidate: 5, hrmp_sender_deposit: 22, @@ -332,7 +319,7 @@ fn setting_pending_config_members() { hrmp_max_parachain_outbound_channels: 10, hrmp_max_parathread_outbound_channels: 20, hrmp_max_message_num_per_candidate: 20, - ump_max_individual_weight: Weight::from_ref_time(909), + ump_max_individual_weight: Weight::from_parts(909, 909), pvf_checking_enabled: true, pvf_voting_ttl: 3, minimum_validation_upgrade_delay: 20, @@ -402,11 +389,6 @@ fn setting_pending_config_members() { new_config.dispute_post_conclusion_acceptance_period, ) .unwrap(); - Configuration::set_dispute_max_spam_slots( - RuntimeOrigin::root(), - new_config.dispute_max_spam_slots, - ) - .unwrap(); Configuration::set_dispute_conclusion_by_time_out_period( RuntimeOrigin::root(), new_config.dispute_conclusion_by_time_out_period, @@ -520,10 +502,7 @@ fn setting_pending_config_members() { Configuration::set_pvf_voting_ttl(RuntimeOrigin::root(), new_config.pvf_voting_ttl) .unwrap(); - assert_eq!( - ::PendingConfigs::get(), - vec![(shared::SESSION_DELAY, new_config)], - ); + assert_eq!(PendingConfigs::::get(), vec![(shared::SESSION_DELAY, new_config)],); }) } @@ -539,13 +518,13 @@ fn verify_externally_accessible() { // This test verifies that the value can be accessed through the well known keys and the // host configuration decodes into the abridged version. - use primitives::v2::{well_known_keys, AbridgedHostConfiguration}; + use primitives::{well_known_keys, AbridgedHostConfiguration}; new_test_ext(Default::default()).execute_with(|| { let ground_truth = HostConfiguration::default(); // Make sure that the configuration is stored in the storage. - ::ActiveConfig::put(ground_truth.clone()); + ActiveConfig::::put(ground_truth.clone()); // Extract the active config via the well known key. let raw_active_config = sp_io::storage::get(well_known_keys::ACTIVE_CONFIG) diff --git a/runtime/parachains/src/disputes.rs b/runtime/parachains/src/disputes.rs index b5e9d2540045..bf918c61724f 100644 --- a/runtime/parachains/src/disputes.rs +++ b/runtime/parachains/src/disputes.rs @@ -21,7 +21,7 @@ use bitvec::{bitvec, order::Lsb0 as BitOrderLsb0}; use frame_support::{ensure, traits::Get, weights::Weight}; use frame_system::pallet_prelude::*; use parity_scale_codec::{Decode, Encode}; -use primitives::v2::{ +use primitives::{ byzantine_threshold, supermajority_threshold, ApprovalVote, CandidateHash, CheckedDisputeStatementSet, CheckedMultiDisputeStatementSet, CompactStatement, ConsensusLog, DisputeState, DisputeStatement, DisputeStatementSet, ExplicitDisputeStatement, @@ -33,7 +33,7 @@ use sp_runtime::{ traits::{AppVerify, One, Saturating, Zero}, DispatchError, RuntimeDebug, SaturatedConversion, }; -use sp_std::{cmp::Ordering, prelude::*}; +use sp_std::{cmp::Ordering, collections::btree_set::BTreeSet, prelude::*}; #[cfg(test)] #[allow(unused_imports)] @@ -46,6 +46,10 @@ mod tests; #[cfg(feature = "runtime-benchmarks")] mod benchmarking; +pub mod migration; + +const LOG_TARGET: &str = "runtime::disputes"; + /// Whether the dispute is local or remote. #[derive(Encode, Decode, Clone, PartialEq, Eq, RuntimeDebug, TypeInfo)] pub enum DisputeLocation { @@ -81,6 +85,7 @@ pub trait SlashingHandler { session: SessionIndex, candidate_hash: CandidateHash, losers: impl IntoIterator, + backers: impl IntoIterator, ); /// Punish a series of validators who were against a valid parablock. This @@ -89,6 +94,7 @@ pub trait SlashingHandler { session: SessionIndex, candidate_hash: CandidateHash, losers: impl IntoIterator, + backers: impl IntoIterator, ); /// Called by the initializer to initialize the slashing pallet. @@ -106,6 +112,7 @@ impl SlashingHandler for () { _: SessionIndex, _: CandidateHash, _: impl IntoIterator, + _: impl IntoIterator, ) { } @@ -113,6 +120,7 @@ impl SlashingHandler for () { _: SessionIndex, _: CandidateHash, _: impl IntoIterator, + _: impl IntoIterator, ) { } @@ -262,7 +270,6 @@ pub trait DisputesHandler { /// accounting for maximum block weight. fn filter_dispute_data( statement_set: DisputeStatementSet, - max_spam_slots: u32, post_conclusion_acceptance_period: BlockNumber, verify_sigs: VerifyDisputeSignatures, ) -> Option; @@ -311,7 +318,6 @@ impl DisputesHandler for () { fn filter_dispute_data( _set: DisputeStatementSet, - _max_spam_slots: u32, _post_conclusion_acceptance_period: BlockNumber, _verify_sigs: VerifyDisputeSignatures, ) -> Option { @@ -361,14 +367,12 @@ where fn filter_dispute_data( set: DisputeStatementSet, - max_spam_slots: u32, post_conclusion_acceptance_period: T::BlockNumber, verify_sigs: VerifyDisputeSignatures, ) -> Option { pallet::Pallet::::filter_dispute_data( &set, post_conclusion_acceptance_period, - max_spam_slots, verify_sigs, ) .filter_statement_set(set) @@ -459,6 +463,18 @@ pub mod pallet { DisputeState, >; + /// Backing votes stored for each dispute. + /// This storage is used for slashing. + #[pallet::storage] + pub(super) type BackersOnDisputes = StorageDoubleMap< + _, + Twox64Concat, + SessionIndex, + Blake2_128Concat, + CandidateHash, + BTreeSet, + >; + /// All included blocks on the chain, as well as the block number in this chain that /// should be reverted back to if the candidate is disputed and determined to be invalid. #[pallet::storage] @@ -471,14 +487,6 @@ pub mod pallet { T::BlockNumber, >; - /// Maps session indices to a vector indicating the number of potentially-spam disputes - /// each validator is participating in. Potentially-spam disputes are remote disputes which have - /// fewer than `byzantine_threshold + 1` validators. - /// - /// The i'th entry of the vector corresponds to the i'th validator in the session. - #[pallet::storage] - pub(super) type SpamSlots = StorageMap<_, Twox64Concat, SessionIndex, Vec>; - /// Whether the chain is frozen. Starts as `None`. When this is `Some`, /// the chain will not accept any new parachain blocks for backing or inclusion, /// and its value indicates the last valid block number in the chain. @@ -517,14 +525,19 @@ pub mod pallet { InvalidSignature, /// Validator vote submitted more than once to dispute. DuplicateStatement, - /// Too many spam slots used by some specific validator. - PotentialSpam, /// A dispute where there are only votes on one side. SingleSidedDispute, + /// A dispute vote from a malicious backer. + MaliciousBacker, + /// No backing votes were provides along dispute statements. + MissingBackingVotes, + /// Unconfirmed dispute statement sets provided. + UnconfirmedDispute, } #[pallet::call] impl Pallet { + #[pallet::call_index(0)] #[pallet::weight(::WeightInfo::force_unfreeze())] pub fn force_unfreeze(origin: OriginFor) -> DispatchResult { ensure_root(origin)?; @@ -573,19 +586,11 @@ impl DisputeStateFlags { } } -#[derive(PartialEq, RuntimeDebug)] -enum SpamSlotChange { - /// Add a `+1` to the spam slot for a particular validator index in this session. - Inc, - /// Subtract `-1` ... - Dec, -} - struct ImportSummary { /// The new state, with all votes imported. state: DisputeState, - /// Changes to spam slots. Validator index paired with directional change. - spam_slot_changes: Vec<(ValidatorIndex, SpamSlotChange)>, + /// List of validators who backed the candidate being disputed. + backers: BTreeSet, /// Validators to slash for being (wrongly) on the AGAINST side. slash_against: Vec, /// Validators to slash for being (wrongly) on the FOR side. @@ -602,6 +607,48 @@ enum VoteImportError { ValidatorIndexOutOfBounds, /// Found a duplicate statement in the dispute statement set. DuplicateStatement, + /// Found an explicit valid statement after backing statement. + /// Backers should not participate in explicit voting so this is + /// only possible on malicious backers. + MaliciousBacker, +} + +#[derive(RuntimeDebug, Copy, Clone, PartialEq, Eq)] +enum VoteKind { + /// A backing vote that is counted as "for" vote in dispute resolution. + Backing, + /// Either an approval vote or and explicit dispute "for" vote. + ExplicitValid, + /// An explicit dispute "against" vote. + Invalid, +} + +impl From<&DisputeStatement> for VoteKind { + fn from(statement: &DisputeStatement) -> Self { + if statement.is_backing() { + Self::Backing + } else if statement.indicates_validity() { + Self::ExplicitValid + } else { + Self::Invalid + } + } +} + +impl VoteKind { + fn is_valid(&self) -> bool { + match self { + Self::Backing | Self::ExplicitValid => true, + Self::Invalid => false, + } + } + + fn is_backing(&self) -> bool { + match self { + Self::Backing => true, + Self::Invalid | Self::ExplicitValid => false, + } + } } impl From for Error { @@ -609,6 +656,7 @@ impl From for Error { match e { VoteImportError::ValidatorIndexOutOfBounds => Error::::ValidatorIndexOutOfBounds, VoteImportError::DuplicateStatement => Error::::DuplicateStatement, + VoteImportError::MaliciousBacker => Error::::MaliciousBacker, } } } @@ -618,8 +666,8 @@ impl From for Error { struct ImportUndo { /// The validator index to which to associate the statement import. validator_index: ValidatorIndex, - /// The direction of the vote, for block validity (`true`) or invalidity (`false`). - valid: bool, + /// The kind and direction of the vote. + vote_kind: VoteKind, /// Has the validator participated before, i.e. in backing or /// with an opposing vote. new_participant: bool, @@ -627,25 +675,53 @@ struct ImportUndo { struct DisputeStateImporter { state: DisputeState, + backers: BTreeSet, now: BlockNumber, new_participants: bitvec::vec::BitVec, pre_flags: DisputeStateFlags, + pre_state: DisputeState, + // The list of backing votes before importing the batch of votes. This field should be + // initialized as empty on the first import of the dispute votes and should remain non-empty + // afterwards. + // + // If a dispute has concluded and the candidate was found invalid, we may want to slash as many + // backers as possible. This list allows us to slash these backers once their votes have been + // imported post dispute conclusion. + pre_backers: BTreeSet, } impl DisputeStateImporter { - fn new(state: DisputeState, now: BlockNumber) -> Self { + fn new( + state: DisputeState, + backers: BTreeSet, + now: BlockNumber, + ) -> Self { let pre_flags = DisputeStateFlags::from_state(&state); let new_participants = bitvec::bitvec![u8, BitOrderLsb0; 0; state.validators_for.len()]; - - DisputeStateImporter { state, now, new_participants, pre_flags } + // consistency checks + for i in backers.iter() { + debug_assert_eq!(state.validators_for.get(i.0 as usize).map(|b| *b), Some(true)); + } + let pre_state = state.clone(); + let pre_backers = backers.clone(); + + DisputeStateImporter { + state, + backers, + now, + new_participants, + pre_flags, + pre_state, + pre_backers, + } } fn import( &mut self, validator: ValidatorIndex, - valid: bool, + kind: VoteKind, ) -> Result { - let (bits, other_bits) = if valid { + let (bits, other_bits) = if kind.is_valid() { (&mut self.state.validators_for, &mut self.state.validators_against) } else { (&mut self.state.validators_against, &mut self.state.validators_for) @@ -654,18 +730,31 @@ impl DisputeStateImporter { // out of bounds or already participated match bits.get(validator.0 as usize).map(|b| *b) { None => return Err(VoteImportError::ValidatorIndexOutOfBounds), - Some(true) => return Err(VoteImportError::DuplicateStatement), + Some(true) => { + // We allow backing statements to be imported after an + // explicit "for" vote, but not the other way around. + match (kind.is_backing(), self.backers.contains(&validator)) { + (true, true) | (false, false) => + return Err(VoteImportError::DuplicateStatement), + (false, true) => return Err(VoteImportError::MaliciousBacker), + (true, false) => {}, + } + }, Some(false) => {}, } - // inefficient, and just for extra sanity. - if validator.0 as usize >= self.new_participants.len() { - return Err(VoteImportError::ValidatorIndexOutOfBounds) - } + // consistency check + debug_assert!((validator.0 as usize) < self.new_participants.len()); - let mut undo = ImportUndo { validator_index: validator, valid, new_participant: false }; + let mut undo = + ImportUndo { validator_index: validator, vote_kind: kind, new_participant: false }; bits.set(validator.0 as usize, true); + if kind.is_backing() { + let is_new = self.backers.insert(validator); + // invariant check + debug_assert!(is_new); + } // New participants tracks those validators by index, which didn't appear on either // side of the dispute until now (so they make a first appearance). @@ -680,12 +769,16 @@ impl DisputeStateImporter { /// Revert a done transaction. fn undo(&mut self, undo: ImportUndo) { - if undo.valid { + if undo.vote_kind.is_valid() { self.state.validators_for.set(undo.validator_index.0 as usize, false); } else { self.state.validators_against.set(undo.validator_index.0 as usize, false); } + if undo.vote_kind.is_backing() { + self.backers.remove(&undo.validator_index); + } + if undo.new_participant { self.new_participants.set(undo.validator_index.0 as usize, false); } @@ -698,69 +791,72 @@ impl DisputeStateImporter { let pre_post_contains = |flags| (pre_flags.contains(flags), post_flags.contains(flags)); - // 1. Act on confirmed flag state to inform spam slots changes. - let spam_slot_changes: Vec<_> = match pre_post_contains(DisputeStateFlags::CONFIRMED) { - (false, false) => { - // increment spam slots for all new participants. - self.new_participants + // 1. Check for FOR supermajority. + let slash_against = match pre_post_contains(DisputeStateFlags::FOR_SUPERMAJORITY) { + (false, true) => { + if self.state.concluded_at.is_none() { + self.state.concluded_at = Some(self.now.clone()); + } + + // provide AGAINST voters to slash. + self.state + .validators_against .iter_ones() - .map(|i| (ValidatorIndex(i as _), SpamSlotChange::Inc)) + .map(|i| ValidatorIndex(i as _)) .collect() }, - (false, true) => { - // all participants, which are not new participants - let prev_participants = (self.state.validators_for.clone() | - self.state.validators_against.clone()) & - !self.new_participants.clone(); - - prev_participants + (true, true) => { + // provide new AGAINST voters to slash. + self.state + .validators_against .iter_ones() - .map(|i| (ValidatorIndex(i as _), SpamSlotChange::Dec)) + .filter(|i| self.pre_state.validators_against.get(*i).map_or(false, |b| !*b)) + .map(|i| ValidatorIndex(i as _)) .collect() }, (true, false) => { log::error!("Dispute statements are never removed. This is a bug"); Vec::new() }, - (true, true) => { - // No change, nothing to do. - Vec::new() - }, + (false, false) => Vec::new(), }; - // 2. Check for fresh FOR supermajority. Only if not already concluded. - let slash_against = - if let (false, true) = pre_post_contains(DisputeStateFlags::FOR_SUPERMAJORITY) { + // 2. Check for AGAINST supermajority. + let slash_for = match pre_post_contains(DisputeStateFlags::AGAINST_SUPERMAJORITY) { + (false, true) => { if self.state.concluded_at.is_none() { self.state.concluded_at = Some(self.now.clone()); } - // provide AGAINST voters to slash. + // provide FOR voters to slash. + self.state.validators_for.iter_ones().map(|i| ValidatorIndex(i as _)).collect() + }, + (true, true) => { + // provide new FOR voters to slash including new backers + // who might have voted FOR before + let new_backing_vote = |i: &ValidatorIndex| -> bool { + !self.pre_backers.contains(i) && self.backers.contains(i) + }; self.state - .validators_against + .validators_for .iter_ones() + .filter(|i| { + self.pre_state.validators_for.get(*i).map_or(false, |b| !*b) || + new_backing_vote(&ValidatorIndex(*i as _)) + }) .map(|i| ValidatorIndex(i as _)) .collect() - } else { - Vec::new() - }; - - // 3. Check for fresh AGAINST supermajority. - let slash_for = - if let (false, true) = pre_post_contains(DisputeStateFlags::AGAINST_SUPERMAJORITY) { - if self.state.concluded_at.is_none() { - self.state.concluded_at = Some(self.now.clone()); - } - - // provide FOR voters to slash. - self.state.validators_for.iter_ones().map(|i| ValidatorIndex(i as _)).collect() - } else { + }, + (true, false) => { + log::error!("Dispute statements are never removed. This is a bug"); Vec::new() - }; + }, + (false, false) => Vec::new(), + }; ImportSummary { state: self.state, - spam_slot_changes, + backers: self.backers, slash_against, slash_for, new_participants: self.new_participants, @@ -830,32 +926,7 @@ impl Pallet { dispute.concluded_at = Some(now); >::insert(session_index, candidate_hash, &dispute); - if >::contains_key(&session_index, &candidate_hash) { - // Local disputes don't count towards spam. - - weight += T::DbWeight::get().reads_writes(1, 1); - continue - } - - // mildly punish all validators involved. they've failed to make - // data available to others, so this is most likely spam. - SpamSlots::::mutate(session_index, |spam_slots| { - let spam_slots = match spam_slots { - Some(ref mut s) => s, - None => return, - }; - - // also reduce spam slots for all validators involved, if the dispute was unconfirmed. - // this does open us up to more spam, but only for validators who are willing - // to be punished more. - // - // it would be unexpected for any change here to occur when the dispute has not concluded - // in time, as a dispute guaranteed to have at least one honest participant should - // conclude quickly. - let _participating = decrement_spam(spam_slots, &dispute); - }); - - weight += T::DbWeight::get().reads_writes(2, 2); + weight += T::DbWeight::get().writes(1); } } @@ -888,12 +959,13 @@ impl Pallet { // This should be small, as disputes are rare, so `None` is fine. #[allow(deprecated)] >::remove_prefix(to_prune, None); + #[allow(deprecated)] + >::remove_prefix(to_prune, None); // This is larger, and will be extracted to the `shared` pallet for more proper pruning. // TODO: https://github.com/paritytech/polkadot/issues/3469 #[allow(deprecated)] >::remove_prefix(to_prune, None); - SpamSlots::::remove(to_prune); } *last_pruned = Some(pruning_target); @@ -937,10 +1009,10 @@ impl Pallet { // // Votes which are duplicate or already known by the chain are filtered out. // The entire set is removed if the dispute is both, ancient and concluded. + // Disputes without enough votes to get confirmed are also filtered out. fn filter_dispute_data( set: &DisputeStatementSet, post_conclusion_acceptance_period: ::BlockNumber, - max_spam_slots: u32, verify_sigs: VerifyDisputeSignatures, ) -> StatementSetFilter { let mut filter = StatementSetFilter::RemoveIndices(Vec::new()); @@ -959,32 +1031,33 @@ impl Pallet { let n_validators = session_info.validators.len(); // Check for ancient. - let (first_votes, dispute_state) = { + let dispute_state = { if let Some(dispute_state) = >::get(&set.session, &set.candidate_hash) { if dispute_state.concluded_at.as_ref().map_or(false, |c| c < &oldest_accepted) { return StatementSetFilter::RemoveAll } - (false, dispute_state) + dispute_state } else { // No state in storage, this indicates it's the first dispute statement set as well. - ( - true, - DisputeState { - validators_for: bitvec![u8, BitOrderLsb0; 0; n_validators], - validators_against: bitvec![u8, BitOrderLsb0; 0; n_validators], - start: now, - concluded_at: None, - }, - ) + DisputeState { + validators_for: bitvec![u8, BitOrderLsb0; 0; n_validators], + validators_against: bitvec![u8, BitOrderLsb0; 0; n_validators], + start: now, + concluded_at: None, + } } }; + let backers = + >::get(&set.session, &set.candidate_hash).unwrap_or_default(); + // Check and import all votes. - let mut summary = { - let mut importer = DisputeStateImporter::new(dispute_state, now); + let summary = { + let mut importer = DisputeStateImporter::new(dispute_state, backers, now); for (i, (statement, validator_index, signature)) in set.statements.iter().enumerate() { - // assure the validator index and is present in the session info + // ensure the validator index is present in the session info + // and the signature is valid let validator_public = match session_info.validators.get(*validator_index) { None => { filter.remove_index(i); @@ -993,9 +1066,9 @@ impl Pallet { Some(v) => v, }; - let valid = statement.indicates_validity(); + let kind = VoteKind::from(statement); - let undo = match importer.import(*validator_index, valid) { + let undo = match importer.import(*validator_index, kind) { Ok(u) => u, Err(_) => { filter.remove_index(i); @@ -1038,99 +1111,11 @@ impl Pallet { return StatementSetFilter::RemoveAll } - // Apply spam slot changes. Bail early if too many occupied. - let is_local = >::contains_key(&set.session, &set.candidate_hash); - if !is_local { - let mut spam_slots: Vec = - SpamSlots::::get(&set.session).unwrap_or_else(|| vec![0; n_validators]); - let mut spam_filter_struck = false; - for (validator_index, spam_slot_change) in summary.spam_slot_changes { - let spam_slot = spam_slots - .get_mut(validator_index.0 as usize) - .expect("index is in-bounds, as checked above; qed"); - - if let SpamSlotChange::Inc = spam_slot_change { - if *spam_slot >= max_spam_slots { - spam_filter_struck = true; - - // Find the vote by this validator and filter it out. - let first_index_in_set = set - .statements - .iter() - .position(|(_statement, v_i, _signature)| &validator_index == v_i) - .expect( - "spam slots are only incremented when a new statement \ - from a validator is included; qed", - ); - - // Note that there may be many votes by the validator in the statement - // set. There are not supposed to be, but the purpose of this function - // is to filter out invalid submissions, after all. - // - // This is fine - we only need to handle the first one, because all - // subsequent votes' indices have been added to the filter already - // by the duplicate checks above. It's only the first one which - // may not already have been filtered out. - filter.remove_index(first_index_in_set); - - // Removing individual statments can cause the dispute to become onesided. - // Checking that (again) is done after the loop. Remove the bit indices. - summary.new_participants.set(validator_index.0 as _, false); - } - - // It's also worth noting that the `DisputeStateImporter` - // which produces these spam slot updates only produces - // one spam slot update per validator because it rejects - // duplicate votes. - // - // So we don't need to worry about spam slots being - // updated incorrectly after receiving duplicates. - *spam_slot += 1; - } else { - *spam_slot = spam_slot.saturating_sub(1); - } - } - - // We write the spam slots here because sequential calls to - // `filter_dispute_data` have a dependency on each other. - // - // For example, if a validator V occupies 1 spam slot and - // max is 2, then 2 sequential calls incrementing spam slot - // cannot be allowed. - // - // However, 3 sequential calls, where the first increments, - // the second decrements, and the third increments would be allowed. - SpamSlots::::insert(&set.session, spam_slots); - - // This is only relevant in cases where it's the first vote and the state - // would hence hold a onesided dispute. If a onesided dispute can never be - // started, by induction, we can never enter a state of a one sided dispute. - if spam_filter_struck && first_votes { - let mut vote_for_count = 0_u64; - let mut vote_against_count = 0_u64; - // Since this is the first set of statements for the dispute, - // it's sufficient to count the votes in the statement set after they - set.statements.iter().for_each(|(statement, v_i, _signature)| { - if Some(true) == - summary.new_participants.get(v_i.0 as usize).map(|b| *b.as_ref()) - { - match statement { - // `summary.new_flags` contains the spam free votes. - // Note that this does not distinguish between pro or con votes, - // since allowing both of them, even if the spam threshold would be reached - // is a good thing. - // Overflow of the counters is no concern, disputes are limited by weight. - DisputeStatement::Valid(_) => vote_for_count += 1, - DisputeStatement::Invalid(_) => vote_against_count += 1, - } - } - }); - if vote_for_count.is_zero() || vote_against_count.is_zero() { - // It wasn't one-sided before the spam filters, but now it is, - // so we need to be thorough and not import that dispute. - return StatementSetFilter::RemoveAll - } - } + // Reject disputes containing less votes than needed for confirmation. + if (summary.state.validators_for.clone() | &summary.state.validators_against).count_ones() <= + byzantine_threshold(summary.state.validators_for.len()) + { + return StatementSetFilter::RemoveAll } filter @@ -1138,7 +1123,7 @@ impl Pallet { /// Handle a set of dispute statements corresponding to a single candidate. /// - /// Fails if the dispute data is invalid. Returns a boolean indicating whether the + /// Fails if the dispute data is invalid. Returns a Boolean indicating whether the /// dispute is fresh. fn process_checked_dispute_data( set: CheckedDisputeStatementSet, @@ -1181,13 +1166,16 @@ impl Pallet { } }; + let backers = + >::get(&set.session, &set.candidate_hash).unwrap_or_default(); + // Import all votes. They were pre-checked. let summary = { - let mut importer = DisputeStateImporter::new(dispute_state, now); + let mut importer = DisputeStateImporter::new(dispute_state, backers, now); for (statement, validator_index, _signature) in &set.statements { - let valid = statement.indicates_validity(); + let kind = VoteKind::from(statement); - importer.import(*validator_index, valid).map_err(Error::::from)?; + importer.import(*validator_index, kind).map_err(Error::::from)?; } importer.finish() @@ -1200,13 +1188,22 @@ impl Pallet { Error::::SingleSidedDispute, ); + // Reject disputes containing less votes than needed for confirmation. + ensure!( + (summary.state.validators_for.clone() | &summary.state.validators_against).count_ones() > + byzantine_threshold(summary.state.validators_for.len()), + Error::::UnconfirmedDispute, + ); + let backers = summary.backers; + // Reject statements with no accompanying backing votes. + ensure!(!backers.is_empty(), Error::::MissingBackingVotes); + >::insert(&set.session, &set.candidate_hash, backers.clone()); + // AUDIT: from now on, no error should be returned. + let DisputeStatementSet { ref session, ref candidate_hash, .. } = set; let session = *session; let candidate_hash = *candidate_hash; - // we can omit spam slot checks, `fn filter_disputes_data` is - // always called before calling this `fn`. - if fresh { let is_local = >::contains_key(&session, &candidate_hash); @@ -1246,10 +1243,16 @@ impl Pallet { session, candidate_hash, summary.slash_against, + backers.clone(), ); // an invalid candidate, according to 2/3. Punish those on the 'for' side. - T::SlashingHandler::punish_for_invalid(session, candidate_hash, summary.slash_for); + T::SlashingHandler::punish_for_invalid( + session, + candidate_hash, + summary.slash_for, + backers, + ); } >::insert(&session, &candidate_hash, &summary.state); @@ -1282,15 +1285,7 @@ impl Pallet { >::insert(&session, &candidate_hash, revert_to); - // If we just included a block locally which has a live dispute, decrement spam slots - // for any involved validators, if the dispute is not already confirmed by f + 1. if let Some(state) = >::get(&session, candidate_hash) { - SpamSlots::::mutate(&session, |spam_slots| { - if let Some(ref mut spam_slots) = *spam_slots { - decrement_spam(spam_slots, &state); - } - }); - if has_supermajority_against(&state) { Self::revert_and_freeze(revert_to); } @@ -1336,29 +1331,6 @@ fn has_supermajority_against(dispute: &DisputeState) - dispute.validators_against.count_ones() >= supermajority_threshold } -// If the dispute had not enough validators to confirm, decrement spam slots for all the participating -// validators. -// -// Returns the set of participating validators as a bitvec. -fn decrement_spam( - spam_slots: &mut [u32], - dispute: &DisputeState, -) -> bitvec::vec::BitVec { - let byzantine_threshold = byzantine_threshold(spam_slots.len()); - - let participating = dispute.validators_for.clone() | dispute.validators_against.clone(); - let decrement_spam = participating.count_ones() <= byzantine_threshold; - for validator_index in participating.iter_ones() { - if decrement_spam { - if let Some(occupied) = spam_slots.get_mut(validator_index as usize) { - *occupied = occupied.saturating_sub(1); - } - } - } - - participating -} - fn check_signature( validator_public: &ValidatorId, candidate_hash: CandidateHash, diff --git a/runtime/parachains/src/disputes/migration.rs b/runtime/parachains/src/disputes/migration.rs new file mode 100644 index 000000000000..1aa340622432 --- /dev/null +++ b/runtime/parachains/src/disputes/migration.rs @@ -0,0 +1,98 @@ +// Copyright 2017-2022 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +//! Storage migration(s) related to disputes pallet + +use frame_support::traits::StorageVersion; + +/// The current storage version. +const STORAGE_VERSION: StorageVersion = StorageVersion::new(1); + +pub mod v1 { + use super::*; + use crate::disputes::{Config, Pallet}; + use frame_support::{ + pallet_prelude::*, storage_alias, traits::OnRuntimeUpgrade, weights::Weight, + }; + use primitives::SessionIndex; + use sp_std::prelude::*; + + #[storage_alias] + type SpamSlots = StorageMap, Twox64Concat, SessionIndex, Vec>; + + pub struct MigrateToV1(sp_std::marker::PhantomData); + impl OnRuntimeUpgrade for MigrateToV1 { + fn on_runtime_upgrade() -> Weight { + let mut weight: Weight = Weight::zero(); + + if StorageVersion::get::>() < STORAGE_VERSION { + log::info!(target: crate::disputes::LOG_TARGET, "Migrating disputes storage to v1"); + weight += migrate_to_v1::(); + STORAGE_VERSION.put::>(); + weight = weight.saturating_add(T::DbWeight::get().reads_writes(1, 1)); + } else { + log::info!( + target: crate::disputes::LOG_TARGET, + "Disputes storage up to date - no need for migration" + ); + } + + weight + } + + #[cfg(feature = "try-runtime")] + fn pre_upgrade() -> Result, &'static str> { + log::trace!( + target: crate::disputes::LOG_TARGET, + "SpamSlots before migration: {}", + SpamSlots::::iter().count() + ); + ensure!( + StorageVersion::get::>() == 0, + "Storage version should be less than `1` before the migration", + ); + Ok(Vec::new()) + } + + #[cfg(feature = "try-runtime")] + fn post_upgrade(_state: Vec) -> Result<(), &'static str> { + log::trace!(target: crate::disputes::LOG_TARGET, "Running post_upgrade()"); + ensure!( + StorageVersion::get::>() == STORAGE_VERSION, + "Storage version should be `1` after the migration" + ); + ensure!( + SpamSlots::::iter().count() == 0, + "SpamSlots should be empty after the migration" + ); + Ok(()) + } + } + + /// Migrates the pallet storage to the most recent version, checking and setting the `StorageVersion`. + pub fn migrate_to_v1() -> Weight { + let mut weight: Weight = Weight::zero(); + + // SpamSlots should not contain too many keys so removing everything at once should be safe + let res = SpamSlots::::clear(u32::MAX, None); + // `loops` is the number of iterations => used to calculate read weights + // `backend` is the number of keys removed from the backend => used to calculate write weights + weight = weight + .saturating_add(T::DbWeight::get().reads_writes(res.loops as u64, res.backend as u64)); + + weight + } +} diff --git a/runtime/parachains/src/disputes/slashing.rs b/runtime/parachains/src/disputes/slashing.rs index 2dfdc87c4b4e..fd127d7f0789 100644 --- a/runtime/parachains/src/disputes/slashing.rs +++ b/runtime/parachains/src/disputes/slashing.rs @@ -16,32 +16,31 @@ //! Dispute slashing pallet. //! -//! Once a dispute is concluded, we want to slash validators -//! who were on the wrong side of the dispute. The slashing amount -//! depends on whether the candidate was valid (small) or invalid (big). -//! In addition to that, we might want to kick out the validators from the -//! active set. +//! Once a dispute is concluded, we want to slash validators who were on the +//! wrong side of the dispute. The slashing amount depends on whether the +//! candidate was valid (none at the moment) or invalid (big). In addition to +//! that, we might want to kick out the validators from the active set. +//! Currently, we limit slashing to the backing group for invalid disputes. //! //! The `offences` pallet from Substrate provides us with a way to do both. -//! Currently, the interface expects us to provide staking information -//! including nominator exposure in order to submit an offence. +//! Currently, the interface expects us to provide staking information including +//! nominator exposure in order to submit an offence. //! //! Normally, we'd able to fetch this information from the runtime as soon as //! the dispute is concluded. This is also what `im-online` pallet does. //! However, since a dispute can conclude several sessions after the candidate //! was backed (see `dispute_period` in `HostConfiguration`), we can't rely on -//! this information be available in the context of the current block. The -//! `babe` and `grandpa` equivocation handlers also have to deal -//! with this problem. +//! this information being available in the context of the current block. The +//! `babe` and `grandpa` equivocation handlers also have to deal with this +//! problem. //! //! Our implementation looks like a hybrid of `im-online` and `grandpa` //! equivocation handlers. Meaning, we submit an `offence` for the concluded -//! disputes about the current session candidate directly from the runtime. -//! If, however, the dispute is about a past session, we record unapplied -//! slashes on chain, without `FullIdentification` of the offenders. -//! Later on, a block producer can submit an unsigned transaction with -//! `KeyOwnershipProof` of an offender and submit it to the runtime -//! to produce an offence. +//! disputes about the current session candidate directly from the runtime. If, +//! however, the dispute is about a past session, we record unapplied slashes on +//! chain, without `FullIdentification` of the offenders. Later on, a block +//! producer can submit an unsigned transaction with `KeyOwnershipProof` of an +//! offender and submit it to the runtime to produce an offence. use crate::{disputes, initializer::ValidatorSetCount, session_info::IdentificationTuple}; use frame_support::{ @@ -51,7 +50,7 @@ use frame_support::{ }; use parity_scale_codec::{Decode, Encode}; -use primitives::v2::{CandidateHash, SessionIndex, ValidatorId, ValidatorIndex}; +use primitives::{CandidateHash, SessionIndex, ValidatorId, ValidatorIndex}; use scale_info::TypeInfo; use sp_runtime::{ traits::Convert, @@ -64,7 +63,10 @@ use sp_runtime::{ use sp_session::{GetSessionNumber, GetValidatorCount}; use sp_staking::offence::{DisableStrategy, Kind, Offence, OffenceError, ReportOffence}; use sp_std::{ - collections::btree_map::{BTreeMap, Entry}, + collections::{ + btree_map::{BTreeMap, Entry}, + btree_set::BTreeSet, + }, prelude::*, }; @@ -73,7 +75,7 @@ const LOG_TARGET: &str = "runtime::parachains::slashing"; // These are constants, but we want to make them configurable // via `HostConfiguration` in the future. const SLASH_FOR_INVALID: Perbill = Perbill::from_percent(100); -const SLASH_AGAINST_VALID: Perbill = Perbill::from_perthousand(1); +const SLASH_AGAINST_VALID: Perbill = Perbill::zero(); const DEFENSIVE_PROOF: &'static str = "disputes module should bail on old session"; #[cfg(feature = "runtime-benchmarks")] @@ -228,18 +230,30 @@ where candidate_hash: CandidateHash, kind: SlashingOffenceKind, losers: impl IntoIterator, + backers: impl IntoIterator, ) { - let losers: Vec = losers.into_iter().collect(); + // sanity check for the current implementation + if kind == SlashingOffenceKind::AgainstValid { + debug_assert!(false, "should only slash ForInvalid disputes"); + return + } + let losers: BTreeSet<_> = losers.into_iter().collect(); if losers.is_empty() { - // Nothing to do return } + let backers: BTreeSet<_> = backers.into_iter().collect(); + let to_punish: Vec = losers.intersection(&backers).cloned().collect(); + if to_punish.is_empty() { + return + } + let session_info = crate::session_info::Pallet::::session_info(session_index); let session_info = match session_info.defensive_proof(DEFENSIVE_PROOF) { Some(info) => info, None => return, }; - let maybe = Self::maybe_identify_validators(session_index, losers.iter().cloned()); + + let maybe = Self::maybe_identify_validators(session_index, to_punish.iter().cloned()); if let Some(offenders) = maybe { let validator_set_count = session_info.discovery_keys.len() as ValidatorSetCount; let offence = SlashingOffence::new( @@ -255,12 +269,20 @@ where return } - let keys = losers + let keys = to_punish .into_iter() .filter_map(|i| session_info.validators.get(i).cloned().map(|id| (i, id))) .collect(); let unapplied = PendingSlashes { keys, kind }; - >::insert(session_index, candidate_hash, unapplied); + + let append = |old: &mut Option| { + let old = old + .get_or_insert(PendingSlashes { keys: Default::default(), kind: unapplied.kind }); + debug_assert_eq!(old.kind, unapplied.kind); + + old.keys.extend(unapplied.keys) + }; + >::mutate(session_index, candidate_hash, append); } } @@ -272,18 +294,20 @@ where session_index: SessionIndex, candidate_hash: CandidateHash, losers: impl IntoIterator, + backers: impl IntoIterator, ) { let kind = SlashingOffenceKind::ForInvalid; - Self::do_punish(session_index, candidate_hash, kind, losers); + Self::do_punish(session_index, candidate_hash, kind, losers, backers); } fn punish_against_valid( - session_index: SessionIndex, - candidate_hash: CandidateHash, - losers: impl IntoIterator, + _session_index: SessionIndex, + _candidate_hash: CandidateHash, + _losers: impl IntoIterator, + _backers: impl IntoIterator, ) { - let kind = SlashingOffenceKind::AgainstValid; - Self::do_punish(session_index, candidate_hash, kind, losers); + // do nothing for now + // NOTE: changing that requires modifying `do_punish` implementation } fn initializer_initialize(now: T::BlockNumber) -> Weight { @@ -475,6 +499,7 @@ pub mod pallet { #[pallet::call] impl Pallet { + #[pallet::call_index(0)] #[pallet::weight(::WeightInfo::report_dispute_lost( key_owner_proof.validator_count() ))] @@ -487,7 +512,7 @@ pub mod pallet { ensure_none(origin)?; // check the membership proof to extract the offender's id - let key = (primitives::v2::PARACHAIN_KEY_TYPE_ID, dispute_proof.validator_id.clone()); + let key = (primitives::PARACHAIN_KEY_TYPE_ID, dispute_proof.validator_id.clone()); let offender = T::KeyOwnerProofSystem::check_proof(key, key_owner_proof) .ok_or(Error::::InvalidKeyOwnershipProof)?; @@ -639,7 +664,7 @@ fn is_known_offence( key_owner_proof: &T::KeyOwnerProof, ) -> Result<(), TransactionValidityError> { // check the membership proof to extract the offender's id - let key = (primitives::v2::PARACHAIN_KEY_TYPE_ID, dispute_proof.validator_id.clone()); + let key = (primitives::PARACHAIN_KEY_TYPE_ID, dispute_proof.validator_id.clone()); let offender = T::KeyOwnerProofSystem::check_proof(key, key_owner_proof.clone()) .ok_or(InvalidTransaction::BadProof)?; diff --git a/runtime/parachains/src/disputes/slashing/benchmarking.rs b/runtime/parachains/src/disputes/slashing/benchmarking.rs index 552172dc1901..0b328e3e5797 100644 --- a/runtime/parachains/src/disputes/slashing/benchmarking.rs +++ b/runtime/parachains/src/disputes/slashing/benchmarking.rs @@ -21,7 +21,7 @@ use frame_benchmarking::{benchmarks, whitelist_account}; use frame_support::traits::{OnFinalize, OnInitialize}; use frame_system::RawOrigin; use pallet_staking::testing_utils::create_validators; -use primitives::v2::{Hash, PARACHAIN_KEY_TYPE_ID}; +use primitives::{Hash, PARACHAIN_KEY_TYPE_ID}; use sp_runtime::traits::{One, StaticLookup}; use sp_session::MembershipProof; @@ -109,8 +109,9 @@ where let validator_index = ValidatorIndex(0); let losers = [validator_index].into_iter(); + let backers = losers.clone(); - T::SlashingHandler::punish_against_valid(session_index, CANDIDATE_HASH, losers); + T::SlashingHandler::punish_for_invalid(session_index, CANDIDATE_HASH, losers, backers); let unapplied = >::get(session_index, CANDIDATE_HASH); assert_eq!(unapplied.unwrap().keys.len(), 1); @@ -123,7 +124,7 @@ fn dispute_proof( validator_id: ValidatorId, validator_index: ValidatorIndex, ) -> DisputeProof { - let kind = SlashingOffenceKind::AgainstValid; + let kind = SlashingOffenceKind::ForInvalid; let time_slot = DisputesTimeSlot::new(session_index, CANDIDATE_HASH); DisputeProof { time_slot, kind, validator_index, validator_id } @@ -134,7 +135,7 @@ benchmarks! { where T: Config, } - // in this setup we have a single `AgainstValid` dispute + // in this setup we have a single `ForInvalid` dispute // submitted for a past session report_dispute_lost { let n in 4..<::BenchmarkingConfig as BenchmarkingConfiguration>::MAX_VALIDATORS; diff --git a/runtime/parachains/src/disputes/tests.rs b/runtime/parachains/src/disputes/tests.rs index 4d8ac714cb7b..8e9e0097f703 100644 --- a/runtime/parachains/src/disputes/tests.rs +++ b/runtime/parachains/src/disputes/tests.rs @@ -20,31 +20,31 @@ use crate::{ disputes::DisputesHandler, mock::{ new_test_ext, AccountId, AllPalletsWithSystem, Initializer, MockGenesisConfig, System, - Test, PUNISH_VALIDATORS_AGAINST, PUNISH_VALIDATORS_FOR, REWARD_VALIDATORS, + Test, PUNISH_BACKERS_FOR, PUNISH_VALIDATORS_AGAINST, PUNISH_VALIDATORS_FOR, + REWARD_VALIDATORS, }, }; -use assert_matches::assert_matches; use frame_support::{ assert_err, assert_noop, assert_ok, traits::{OnFinalize, OnInitialize}, }; -use primitives::v2::BlockNumber; +use primitives::BlockNumber; use sp_core::{crypto::CryptoType, Pair}; -/// Filtering updates the spam slots, as such update them. -fn update_spam_slots(stmts: MultiDisputeStatementSet) -> CheckedMultiDisputeStatementSet { +const VOTE_FOR: VoteKind = VoteKind::ExplicitValid; +const VOTE_AGAINST: VoteKind = VoteKind::Invalid; +const VOTE_BACKING: VoteKind = VoteKind::Backing; + +fn filter_dispute_set(stmts: MultiDisputeStatementSet) -> CheckedMultiDisputeStatementSet { let config = >::config(); - let max_spam_slots = config.dispute_max_spam_slots; let post_conclusion_acceptance_period = config.dispute_post_conclusion_acceptance_period; stmts .into_iter() .filter_map(|set| { - // updates spam slots implicitly let filter = Pallet::::filter_dispute_data( &set, post_conclusion_acceptance_period, - max_spam_slots, VerifyDisputeSignatures::Skip, ); filter.filter_statement_set(set) @@ -135,7 +135,7 @@ fn test_dispute_state_flag_from_state() { } #[test] -fn test_import_new_participant_spam_inc() { +fn test_import_new_participant() { let mut importer = DisputeStateImporter::new( DisputeState { validators_for: bitvec![u8, BitOrderLsb0; 1, 0, 0, 0, 0, 0, 0, 0], @@ -143,22 +143,26 @@ fn test_import_new_participant_spam_inc() { start: 0, concluded_at: None, }, + BTreeSet::new(), 0, ); assert_err!( - importer.import(ValidatorIndex(9), true), + importer.import(ValidatorIndex(9), VOTE_FOR), VoteImportError::ValidatorIndexOutOfBounds, ); - assert_err!(importer.import(ValidatorIndex(0), true), VoteImportError::DuplicateStatement); - assert_ok!(importer.import(ValidatorIndex(0), false)); + assert_err!(importer.import(ValidatorIndex(0), VOTE_FOR), VoteImportError::DuplicateStatement); + assert_ok!(importer.import(ValidatorIndex(0), VOTE_AGAINST)); - assert_ok!(importer.import(ValidatorIndex(2), true)); - assert_err!(importer.import(ValidatorIndex(2), true), VoteImportError::DuplicateStatement); + assert_ok!(importer.import(ValidatorIndex(2), VOTE_FOR)); + assert_err!(importer.import(ValidatorIndex(2), VOTE_FOR), VoteImportError::DuplicateStatement); - assert_ok!(importer.import(ValidatorIndex(2), false)); - assert_err!(importer.import(ValidatorIndex(2), false), VoteImportError::DuplicateStatement); + assert_ok!(importer.import(ValidatorIndex(2), VOTE_AGAINST)); + assert_err!( + importer.import(ValidatorIndex(2), VOTE_AGAINST), + VoteImportError::DuplicateStatement + ); let summary = importer.finish(); assert_eq!(summary.new_flags, DisputeStateFlags::default()); @@ -171,14 +175,13 @@ fn test_import_new_participant_spam_inc() { concluded_at: None, }, ); - assert_eq!(summary.spam_slot_changes, vec![(ValidatorIndex(2), SpamSlotChange::Inc)]); assert!(summary.slash_for.is_empty()); assert!(summary.slash_against.is_empty()); assert_eq!(summary.new_participants, bitvec![u8, BitOrderLsb0; 0, 0, 1, 0, 0, 0, 0, 0]); } #[test] -fn test_import_prev_participant_spam_dec_confirmed() { +fn test_import_prev_participant_confirmed() { let mut importer = DisputeStateImporter::new( DisputeState { validators_for: bitvec![u8, BitOrderLsb0; 1, 0, 0, 0, 0, 0, 0, 0], @@ -186,10 +189,11 @@ fn test_import_prev_participant_spam_dec_confirmed() { start: 0, concluded_at: None, }, + BTreeSet::new(), 0, ); - assert_ok!(importer.import(ValidatorIndex(2), true)); + assert_ok!(importer.import(ValidatorIndex(2), VOTE_FOR)); let summary = importer.finish(); assert_eq!( @@ -201,10 +205,7 @@ fn test_import_prev_participant_spam_dec_confirmed() { concluded_at: None, }, ); - assert_eq!( - summary.spam_slot_changes, - vec![(ValidatorIndex(0), SpamSlotChange::Dec), (ValidatorIndex(1), SpamSlotChange::Dec),], - ); + assert!(summary.slash_for.is_empty()); assert!(summary.slash_against.is_empty()); assert_eq!(summary.new_participants, bitvec![u8, BitOrderLsb0; 0, 0, 1, 0, 0, 0, 0, 0]); @@ -212,7 +213,7 @@ fn test_import_prev_participant_spam_dec_confirmed() { } #[test] -fn test_import_prev_participant_spam_dec_confirmed_slash_for() { +fn test_import_prev_participant_confirmed_slash_for() { let mut importer = DisputeStateImporter::new( DisputeState { validators_for: bitvec![u8, BitOrderLsb0; 1, 0, 0, 0, 0, 0, 0, 0], @@ -220,15 +221,16 @@ fn test_import_prev_participant_spam_dec_confirmed_slash_for() { start: 0, concluded_at: None, }, + BTreeSet::new(), 0, ); - assert_ok!(importer.import(ValidatorIndex(2), true)); - assert_ok!(importer.import(ValidatorIndex(2), false)); - assert_ok!(importer.import(ValidatorIndex(3), false)); - assert_ok!(importer.import(ValidatorIndex(4), false)); - assert_ok!(importer.import(ValidatorIndex(5), false)); - assert_ok!(importer.import(ValidatorIndex(6), false)); + assert_ok!(importer.import(ValidatorIndex(2), VOTE_FOR)); + assert_ok!(importer.import(ValidatorIndex(2), VOTE_AGAINST)); + assert_ok!(importer.import(ValidatorIndex(3), VOTE_AGAINST)); + assert_ok!(importer.import(ValidatorIndex(4), VOTE_AGAINST)); + assert_ok!(importer.import(ValidatorIndex(5), VOTE_AGAINST)); + assert_ok!(importer.import(ValidatorIndex(6), VOTE_AGAINST)); let summary = importer.finish(); assert_eq!( @@ -240,10 +242,7 @@ fn test_import_prev_participant_spam_dec_confirmed_slash_for() { concluded_at: Some(0), }, ); - assert_eq!( - summary.spam_slot_changes, - vec![(ValidatorIndex(0), SpamSlotChange::Dec), (ValidatorIndex(1), SpamSlotChange::Dec),], - ); + assert_eq!(summary.slash_for, vec![ValidatorIndex(0), ValidatorIndex(2)]); assert!(summary.slash_against.is_empty()); assert_eq!(summary.new_participants, bitvec![u8, BitOrderLsb0; 0, 0, 1, 1, 1, 1, 1, 0]); @@ -262,14 +261,15 @@ fn test_import_slash_against() { start: 0, concluded_at: None, }, + BTreeSet::new(), 0, ); - assert_ok!(importer.import(ValidatorIndex(3), true)); - assert_ok!(importer.import(ValidatorIndex(4), true)); - assert_ok!(importer.import(ValidatorIndex(5), false)); - assert_ok!(importer.import(ValidatorIndex(6), true)); - assert_ok!(importer.import(ValidatorIndex(7), true)); + assert_ok!(importer.import(ValidatorIndex(3), VOTE_FOR)); + assert_ok!(importer.import(ValidatorIndex(4), VOTE_FOR)); + assert_ok!(importer.import(ValidatorIndex(5), VOTE_AGAINST)); + assert_ok!(importer.import(ValidatorIndex(6), VOTE_FOR)); + assert_ok!(importer.import(ValidatorIndex(7), VOTE_FOR)); let summary = importer.finish(); assert_eq!( @@ -281,222 +281,52 @@ fn test_import_slash_against() { concluded_at: Some(0), }, ); - assert!(summary.spam_slot_changes.is_empty()); assert!(summary.slash_for.is_empty()); assert_eq!(summary.slash_against, vec![ValidatorIndex(1), ValidatorIndex(5)]); assert_eq!(summary.new_participants, bitvec![u8, BitOrderLsb0; 0, 0, 0, 1, 1, 1, 1, 1]); assert_eq!(summary.new_flags, DisputeStateFlags::FOR_SUPERMAJORITY); } -fn generate_dispute_statement_set_entry( - session: u32, - candidate_hash: CandidateHash, - statement: DisputeStatement, - validator: &::Pair, -) -> (DisputeStatement, ValidatorSignature) { - let valid = match &statement { - DisputeStatement::Valid(_) => true, - _ => false, - }; - let signature_bytes = validator - .sign(&ExplicitDisputeStatement { valid, candidate_hash, session }.signing_payload()); - let signature = ValidatorSignature::try_from(signature_bytes).unwrap(); - (statement, signature) -} - -fn generate_dispute_statement_set( - session: SessionIndex, - candidate_hash: CandidateHash, - validators: &[::Pair], - vidxs: Vec<(usize, DisputeStatement)>, -) -> DisputeStatementSet { - let statements = vidxs - .into_iter() - .map(|(v_i, statement)| { - let validator_index = ValidatorIndex(v_i as u32); - let (statement, signature) = generate_dispute_statement_set_entry( - session, - candidate_hash.clone(), - statement, - &validators[v_i], - ); - (statement, validator_index, signature) - }) - .collect::>(); - DisputeStatementSet { candidate_hash: candidate_hash.clone(), session, statements } -} - #[test] -fn dispute_statement_becoming_onesided_due_to_spamslots_is_accepted() { - let dispute_conclusion_by_time_out_period = 3; - let start = 10; - let session = start - 1; - let dispute_max_spam_slots = 2; - let post_conclusion_acceptance_period = 3; - - let mock_genesis_config = MockGenesisConfig { - configuration: crate::configuration::GenesisConfig { - config: HostConfiguration { - dispute_conclusion_by_time_out_period, - dispute_max_spam_slots, - ..Default::default() - }, - ..Default::default() +fn test_import_backing_votes() { + let mut importer = DisputeStateImporter::new( + DisputeState { + validators_for: bitvec![u8, BitOrderLsb0; 1, 0, 1, 0, 0, 0, 0, 0], + validators_against: bitvec![u8, BitOrderLsb0; 0, 1, 0, 0, 0, 0, 0, 0], + start: 0, + concluded_at: None, }, - ..Default::default() - }; - - new_test_ext(mock_genesis_config).execute_with(|| { - // We need 6 validators for the byzantine threshold to be 2 - static ACCOUNT_IDS: &[AccountId] = &[0, 1, 2, 3, 4, 5, 6, 7]; - let validators = std::iter::repeat(()) - .take(7) - .map(|_| ::Pair::generate().0) - .collect::>(); - let validators = &validators; - - // a new session at each block, but always the same validators - let session_change_callback = |block_number: u32| -> Option> { - let session_validators = - Vec::from_iter(ACCOUNT_IDS.iter().zip(validators.iter().map(|pair| pair.public()))); - Some((true, block_number, session_validators.clone(), Some(session_validators))) - }; - - run_to_block(start, session_change_callback); - - // Must be _foreign_ parachain candidate - // otherwise slots do not trigger. - let candidate_hash_a = CandidateHash(sp_core::H256::repeat_byte(0xA)); - let candidate_hash_b = CandidateHash(sp_core::H256::repeat_byte(0xB)); - let candidate_hash_c = CandidateHash(sp_core::H256::repeat_byte(0xC)); - let candidate_hash_d = CandidateHash(sp_core::H256::repeat_byte(0xD)); - - let stmts = vec![ - // a - generate_dispute_statement_set( - session, - candidate_hash_a, - validators, - vec![ - (3, DisputeStatement::Valid(ValidDisputeStatementKind::Explicit)), - (6, DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit)), - ], - ), - // b - generate_dispute_statement_set( - session, - candidate_hash_b, - validators, - vec![ - (1, DisputeStatement::Valid(ValidDisputeStatementKind::Explicit)), - (6, DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit)), - ], - ), - // c - generate_dispute_statement_set( - session, - candidate_hash_c, - validators, - vec![ - (2, DisputeStatement::Valid(ValidDisputeStatementKind::Explicit)), - (6, DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit)), - ], - ), - // d - generate_dispute_statement_set( - session, - candidate_hash_d, - validators, - vec![ - (4, DisputeStatement::Valid(ValidDisputeStatementKind::Explicit)), - (5, DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit)), - ], - ), - generate_dispute_statement_set( - session, - candidate_hash_d, - validators, - vec![(6, DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit))], - ), - ]; - - // no filtering happens, host config for `dispute_max_spam_slots: 2` is the default - // updates spam slots implicitly - let set = stmts[0].clone(); - let filter = Pallet::::filter_dispute_data( - &set, - post_conclusion_acceptance_period, - dispute_max_spam_slots, - VerifyDisputeSignatures::Skip, - ); - assert_matches!(&filter, StatementSetFilter::RemoveIndices(v) if v.is_empty()); - assert_matches!(filter.filter_statement_set(set.clone()), Some(modified) => { - assert_eq!(&set, modified.as_ref()); - }); - assert_eq!(SpamSlots::::get(session), Some(vec![0, 0, 0, 1, 0, 0, 1])); - - // <-----> - - // 2nd, still ok? Should be - let set = stmts[1].clone(); - let filter = Pallet::::filter_dispute_data( - &set, - post_conclusion_acceptance_period, - dispute_max_spam_slots, - VerifyDisputeSignatures::Skip, - ); - assert_matches!(&filter, StatementSetFilter::RemoveIndices(v) if v.is_empty()); - assert_matches!(filter.filter_statement_set(set.clone()), Some(modified) => { - assert_eq!(&set, modified.as_ref()); - }); - assert_eq!(SpamSlots::::get(session), Some(vec![0, 1, 0, 1, 0, 0, 2])); - - // <-----> - - // now this is the third spammy participation of validator 6 and hence - let set = stmts[2].clone(); - let filter = Pallet::::filter_dispute_data( - &set, - post_conclusion_acceptance_period, - dispute_max_spam_slots, - VerifyDisputeSignatures::Skip, - ); - assert_matches!(&filter, StatementSetFilter::RemoveAll); - // no need to apply the filter, - // we don't do anything with the result, and spam slots were updated already - - // <-----> - - // now there is no pariticipation in this dispute being initiated - // only validator 4 and 5 are part of it - // with 3 validators it's not a an unconfirmed dispute anymore - // so validator 6, while being considered spammy should work again - let set = stmts[3].clone(); - let filter = Pallet::::filter_dispute_data( - &set, - post_conclusion_acceptance_period, - dispute_max_spam_slots, - VerifyDisputeSignatures::Skip, - ); - assert_matches!(&filter, StatementSetFilter::RemoveIndices(v) if v.is_empty()); - // no need to apply the filter, - // we don't do anything with the result, and spam slots were updated already - - // <-----> + BTreeSet::from_iter([ValidatorIndex(0)]), + 0, + ); - // it's a spammy participant, so a new dispute will not be accepted being initiated by a spammer - let set = stmts[4].clone(); - let filter = Pallet::::filter_dispute_data( - &set, - post_conclusion_acceptance_period, - dispute_max_spam_slots, - VerifyDisputeSignatures::Skip, - ); - assert_matches!(&filter, StatementSetFilter::RemoveAll); - assert_matches!(filter.filter_statement_set(set.clone()), None); + assert_ok!(importer.import(ValidatorIndex(3), VOTE_FOR)); + assert_ok!(importer.import(ValidatorIndex(3), VOTE_BACKING)); + assert_ok!(importer.import(ValidatorIndex(3), VOTE_AGAINST)); + assert_ok!(importer.import(ValidatorIndex(6), VOTE_FOR)); + assert_ok!(importer.import(ValidatorIndex(7), VOTE_BACKING)); + // Don't import backing vote twice + assert_err!( + importer.import(ValidatorIndex(0), VOTE_BACKING), + VoteImportError::DuplicateStatement, + ); + // Don't import explicit votes after backing + assert_err!(importer.import(ValidatorIndex(7), VOTE_FOR), VoteImportError::MaliciousBacker,); - assert_eq!(SpamSlots::::get(session), Some(vec![0, 1, 1, 1, 1, 1, 3])); - }); + let summary = importer.finish(); + assert_eq!( + summary.state, + DisputeState { + validators_for: bitvec![u8, BitOrderLsb0; 1, 0, 1, 1, 0, 0, 1, 1], + validators_against: bitvec![u8, BitOrderLsb0; 0, 1, 0, 1, 0, 0, 0, 0], + start: 0, + concluded_at: None, + }, + ); + assert_eq!( + summary.backers, + BTreeSet::from_iter([ValidatorIndex(0), ValidatorIndex(3), ValidatorIndex(7),]), + ); } // Test that dispute timeout is handled correctly. @@ -517,7 +347,7 @@ fn test_dispute_timeout() { }; new_test_ext(mock_genesis_config).execute_with(|| { - // We need 6 validators for the byzantine threshold to be 2 + // We need 7 validators for the byzantine threshold to be 2 let v0 = ::Pair::generate().0; let v1 = ::Pair::generate().0; let v2 = ::Pair::generate().0; @@ -553,16 +383,28 @@ fn test_dispute_timeout() { }); let candidate_hash = CandidateHash(sp_core::H256::repeat_byte(1)); + let inclusion_parent = sp_core::H256::repeat_byte(0xff); - // v0 votes for 3, v6 against. + // v0 and v1 vote for 3, v2 against. We need f+1 votes (3) so that the dispute is + // confirmed. Otherwise It will be filtered out. + let session = start - 1; let stmts = vec![DisputeStatementSet { candidate_hash: candidate_hash.clone(), - session: start - 1, + session, statements: vec![ ( - DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), + DisputeStatement::Valid(ValidDisputeStatementKind::BackingValid( + inclusion_parent, + )), ValidatorIndex(0), - v0.sign( + v0.sign(&CompactStatement::Valid(candidate_hash).signing_payload( + &SigningContext { session_index: start - 1, parent_hash: inclusion_parent }, + )), + ), + ( + DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), + ValidatorIndex(1), + v1.sign( &ExplicitDisputeStatement { valid: true, candidate_hash: candidate_hash.clone(), @@ -586,8 +428,7 @@ fn test_dispute_timeout() { ], }]; - let stmts = update_spam_slots(stmts); - assert_eq!(SpamSlots::::get(start - 1), Some(vec![1, 0, 0, 0, 0, 0, 1])); + let stmts = filter_dispute_set(stmts); assert_ok!( Pallet::::process_checked_multi_dispute_data(stmts), @@ -596,11 +437,20 @@ fn test_dispute_timeout() { // Run to timeout period run_to_block(start + dispute_conclusion_by_time_out_period, |_| None); - assert_eq!(SpamSlots::::get(start - 1), Some(vec![1, 0, 0, 0, 0, 0, 1])); + assert!(>::get(&session, &candidate_hash) + .expect("dispute should exist") + .concluded_at + .is_none()); // Run to timeout + 1 in order to executive on_finalize(timeout) run_to_block(start + dispute_conclusion_by_time_out_period + 1, |_| None); - assert_eq!(SpamSlots::::get(start - 1), Some(vec![0, 0, 0, 0, 0, 0, 0])); + assert_eq!( + >::get(&session, &candidate_hash) + .expect("dispute should exist") + .concluded_at + .expect("dispute should have concluded"), + start + dispute_conclusion_by_time_out_period + 1 + ); }); } @@ -697,21 +547,20 @@ fn test_provide_multi_dispute_is_providing() { }); let candidate_hash = CandidateHash(sp_core::H256::repeat_byte(1)); + let inclusion_parent = sp_core::H256::repeat_byte(0xff); + let session = 1; let stmts = vec![DisputeStatementSet { candidate_hash: candidate_hash.clone(), - session: 1, + session, statements: vec![ ( - DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), + DisputeStatement::Valid(ValidDisputeStatementKind::BackingValid( + inclusion_parent, + )), ValidatorIndex(0), - v0.sign( - &ExplicitDisputeStatement { - valid: true, - candidate_hash: candidate_hash.clone(), - session: 1, - } - .signing_payload(), - ), + v0.sign(&CompactStatement::Valid(candidate_hash).signing_payload( + &SigningContext { session_index: session, parent_hash: inclusion_parent }, + )), ), ( DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), @@ -720,7 +569,7 @@ fn test_provide_multi_dispute_is_providing() { &ExplicitDisputeStatement { valid: false, candidate_hash: candidate_hash.clone(), - session: 1, + session, } .signing_payload(), ), @@ -740,6 +589,70 @@ fn test_provide_multi_dispute_is_providing() { }) } +#[test] +fn test_disputes_with_missing_backing_votes_are_rejected() { + new_test_ext(Default::default()).execute_with(|| { + let v0 = ::Pair::generate().0; + let v1 = ::Pair::generate().0; + + run_to_block(3, |b| { + // a new session at each block + if b == 1 { + Some(( + true, + b, + vec![(&0, v0.public()), (&1, v1.public())], + Some(vec![(&0, v0.public()), (&1, v1.public())]), + )) + } else { + Some((true, b, vec![(&1, v1.public())], Some(vec![(&1, v1.public())]))) + } + }); + + let candidate_hash = CandidateHash(sp_core::H256::repeat_byte(1)); + let session = 1; + + let stmts = vec![DisputeStatementSet { + candidate_hash: candidate_hash.clone(), + session, + statements: vec![ + ( + DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), + ValidatorIndex(0), + v0.sign( + &ExplicitDisputeStatement { + valid: true, + candidate_hash: candidate_hash.clone(), + session, + } + .signing_payload(), + ), + ), + ( + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(1), + v1.sign( + &ExplicitDisputeStatement { + valid: false, + candidate_hash: candidate_hash.clone(), + session, + } + .signing_payload(), + ), + ), + ], + }]; + + assert!(Pallet::::process_checked_multi_dispute_data( + stmts + .into_iter() + .map(CheckedDisputeStatementSet::unchecked_from_unchecked) + .collect() + ) + .is_err(),); + }) +} + #[test] fn test_freeze_on_note_included() { new_test_ext(Default::default()).execute_with(|| { @@ -757,6 +670,8 @@ fn test_freeze_on_note_included() { }); let candidate_hash = CandidateHash(sp_core::H256::repeat_byte(1)); + let inclusion_parent = sp_core::H256::repeat_byte(0xff); + let session = 3; // v0 votes for 3 let stmts = vec![DisputeStatementSet { @@ -788,16 +703,13 @@ fn test_freeze_on_note_included() { ), ), ( - DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), + DisputeStatement::Valid(ValidDisputeStatementKind::BackingValid( + inclusion_parent, + )), ValidatorIndex(1), - v1.sign( - &ExplicitDisputeStatement { - valid: true, - candidate_hash: candidate_hash.clone(), - session: 3, - } - .signing_payload(), - ), + v0.sign(&CompactStatement::Valid(candidate_hash).signing_payload( + &SigningContext { session_index: session, parent_hash: inclusion_parent }, + )), ), ], }]; @@ -831,11 +743,13 @@ fn test_freeze_provided_against_supermajority_for_included() { }); let candidate_hash = CandidateHash(sp_core::H256::repeat_byte(1)); + let inclusion_parent = sp_core::H256::repeat_byte(0xff); + let session = 3; // v0 votes for 3 let stmts = vec![DisputeStatementSet { candidate_hash: candidate_hash.clone(), - session: 3, + session, statements: vec![ ( DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), @@ -844,7 +758,7 @@ fn test_freeze_provided_against_supermajority_for_included() { &ExplicitDisputeStatement { valid: false, candidate_hash: candidate_hash.clone(), - session: 3, + session, } .signing_payload(), ), @@ -856,22 +770,19 @@ fn test_freeze_provided_against_supermajority_for_included() { &ExplicitDisputeStatement { valid: false, candidate_hash: candidate_hash.clone(), - session: 3, + session, } .signing_payload(), ), ), ( - DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), + DisputeStatement::Valid(ValidDisputeStatementKind::BackingValid( + inclusion_parent, + )), ValidatorIndex(1), - v1.sign( - &ExplicitDisputeStatement { - valid: true, - candidate_hash: candidate_hash.clone(), - session: 3, - } - .signing_payload(), - ), + v0.sign(&CompactStatement::Valid(candidate_hash).signing_payload( + &SigningContext { session_index: session, parent_hash: inclusion_parent }, + )), ), ], }]; @@ -888,16 +799,13 @@ fn test_freeze_provided_against_supermajority_for_included() { }); } -// tests for: -// * provide_multi_dispute: with success scenario -// * disputes: correctness of datas -// * could_be_invalid: correctness of datas -// * note_included: decrement spam correctly -// * spam slots: correctly incremented and decremented -// * ensure rewards and punishment are correctly called. -#[test] -fn test_provide_multi_dispute_success_and_other() { - new_test_ext(Default::default()).execute_with(|| { +mod unconfirmed_disputes { + use super::*; + use assert_matches::assert_matches; + use sp_runtime::ModuleError; + + // Shared initialization code between `test_unconfirmed_are_ignored` and `test_unconfirmed_disputes_cause_block_import_error` + fn generate_dispute_statement_set_and_run_to_block() -> DisputeStatementSet { // 7 validators needed for byzantine threshold of 2. let v0 = ::Pair::generate().0; let v1 = ::Pair::generate().0; @@ -907,6 +815,7 @@ fn test_provide_multi_dispute_success_and_other() { let v5 = ::Pair::generate().0; let v6 = ::Pair::generate().0; + // Mapping between key pair and `ValidatorIndex` // v0 -> 0 // v1 -> 3 // v2 -> 6 @@ -943,10 +852,10 @@ fn test_provide_multi_dispute_success_and_other() { let candidate_hash = CandidateHash(sp_core::H256::repeat_byte(1)); - // v0 votes for 3, v6 votes against - let stmts = vec![DisputeStatementSet { + // v0 votes for 4, v1 votes against 4. + DisputeStatementSet { candidate_hash: candidate_hash.clone(), - session: 3, + session: 4, statements: vec![ ( DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), @@ -955,70 +864,136 @@ fn test_provide_multi_dispute_success_and_other() { &ExplicitDisputeStatement { valid: true, candidate_hash: candidate_hash.clone(), - session: 3, + session: 4, } .signing_payload(), ), ), ( DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), - ValidatorIndex(2), - v6.sign( + ValidatorIndex(3), + v1.sign( &ExplicitDisputeStatement { valid: false, candidate_hash: candidate_hash.clone(), - session: 3, + session: 4, } .signing_payload(), ), ), ], - }]; + } + } + #[test] + fn test_unconfirmed_are_ignored() { + new_test_ext(Default::default()).execute_with(|| { + let stmts = vec![generate_dispute_statement_set_and_run_to_block()]; + let stmts = filter_dispute_set(stmts); + + // Not confirmed => should be filtered out + assert_ok!(Pallet::::process_checked_multi_dispute_data(stmts), vec![],); + }); + } - let stmts = update_spam_slots(stmts); - assert_eq!(SpamSlots::::get(3), Some(vec![1, 0, 1, 0, 0, 0, 0])); + #[test] + fn test_unconfirmed_disputes_cause_block_import_error() { + new_test_ext(Default::default()).execute_with(|| { - assert_ok!( + let stmts = generate_dispute_statement_set_and_run_to_block(); + let stmts = vec![CheckedDisputeStatementSet::unchecked_from_unchecked(stmts)]; + + assert_matches!( Pallet::::process_checked_multi_dispute_data(stmts), - vec![(3, candidate_hash.clone())], + Err(DispatchError::Module(ModuleError{index: _, error: _, message})) => assert_eq!(message, Some("UnconfirmedDispute")) ); - // v1 votes for 4 and for 3, v6 votes against 4. - let stmts = vec![ - DisputeStatementSet { - candidate_hash: candidate_hash.clone(), - session: 4, - statements: vec![ - ( - DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), - ValidatorIndex(3), - v1.sign( - &ExplicitDisputeStatement { - valid: true, - candidate_hash: candidate_hash.clone(), - session: 4, - } - .signing_payload(), - ), - ), - ( - DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), - ValidatorIndex(2), - v6.sign( - &ExplicitDisputeStatement { - valid: false, - candidate_hash: candidate_hash.clone(), - session: 4, - } - .signing_payload(), - ), - ), + }); + } +} + +// tests for: +// * provide_multi_dispute: with success scenario +// * disputes: correctness of datas +// * could_be_invalid: correctness of datas +// * ensure rewards and punishment are correctly called. +#[test] +fn test_provide_multi_dispute_success_and_other() { + new_test_ext(Default::default()).execute_with(|| { + // 7 validators needed for byzantine threshold of 2. + let v0 = ::Pair::generate().0; + let v1 = ::Pair::generate().0; + let v2 = ::Pair::generate().0; + let v3 = ::Pair::generate().0; + let v4 = ::Pair::generate().0; + let v5 = ::Pair::generate().0; + let v6 = ::Pair::generate().0; + + // Mapping between key pair and `ValidatorIndex` + // v0 -> 0 + // v1 -> 3 + // v2 -> 6 + // v3 -> 5 + // v4 -> 1 + // v5 -> 4 + // v6 -> 2 + + run_to_block(6, |b| { + // a new session at each block + Some(( + true, + b, + vec![ + (&0, v0.public()), + (&1, v1.public()), + (&2, v2.public()), + (&3, v3.public()), + (&4, v4.public()), + (&5, v5.public()), + (&6, v6.public()), ], - }, - DisputeStatementSet { - candidate_hash: candidate_hash.clone(), - session: 3, - statements: vec![( + Some(vec![ + (&0, v0.public()), + (&1, v1.public()), + (&2, v2.public()), + (&3, v3.public()), + (&4, v4.public()), + (&5, v5.public()), + (&6, v6.public()), + ]), + )) + }); + + let candidate_hash = CandidateHash(sp_core::H256::repeat_byte(1)); + let inclusion_parent = sp_core::H256::repeat_byte(0xff); + let session = 3; + + // v0 and v1 vote for 3, v6 votes against + let stmts = vec![DisputeStatementSet { + candidate_hash: candidate_hash.clone(), + session, + statements: vec![ + ( + DisputeStatement::Valid(ValidDisputeStatementKind::BackingValid( + inclusion_parent, + )), + ValidatorIndex(0), + v0.sign(&CompactStatement::Valid(candidate_hash).signing_payload( + &SigningContext { session_index: session, parent_hash: inclusion_parent }, + )), + ), + ( + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(2), + v6.sign( + &ExplicitDisputeStatement { + valid: false, + candidate_hash: candidate_hash.clone(), + session, + } + .signing_payload(), + ), + ), + ( DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), ValidatorIndex(3), v1.sign( @@ -1029,20 +1004,18 @@ fn test_provide_multi_dispute_success_and_other() { } .signing_payload(), ), - )], - }, - ]; + ), + ], + }]; - let stmts = update_spam_slots(stmts); + let stmts = filter_dispute_set(stmts); assert_ok!( Pallet::::process_checked_multi_dispute_data(stmts), - vec![(4, candidate_hash.clone())], + vec![(3, candidate_hash.clone())], ); - assert_eq!(SpamSlots::::get(3), Some(vec![0, 0, 0, 0, 0, 0, 0])); // Confirmed as no longer spam - assert_eq!(SpamSlots::::get(4), Some(vec![0, 0, 1, 1, 0, 0, 0])); - // v3 votes against 3 and for 5, v6 votes against 5. + // v3 votes against 3 and for 5, v2 and v6 vote against 5. let stmts = vec![ DisputeStatementSet { candidate_hash: candidate_hash.clone(), @@ -1065,11 +1038,20 @@ fn test_provide_multi_dispute_success_and_other() { session: 5, statements: vec![ ( - DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), + DisputeStatement::Valid(ValidDisputeStatementKind::BackingValid( + inclusion_parent, + )), ValidatorIndex(5), - v3.sign( + v3.sign(&CompactStatement::Valid(candidate_hash).signing_payload( + &SigningContext { session_index: 5, parent_hash: inclusion_parent }, + )), + ), + ( + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(6), + v2.sign( &ExplicitDisputeStatement { - valid: true, + valid: false, candidate_hash: candidate_hash.clone(), session: 5, } @@ -1092,55 +1074,31 @@ fn test_provide_multi_dispute_success_and_other() { }, ]; - let stmts = update_spam_slots(stmts); + let stmts = filter_dispute_set(stmts); assert_ok!( Pallet::::process_checked_multi_dispute_data(stmts), vec![(5, candidate_hash.clone())], ); - assert_eq!(SpamSlots::::get(3), Some(vec![0, 0, 0, 0, 0, 0, 0])); - assert_eq!(SpamSlots::::get(4), Some(vec![0, 0, 1, 1, 0, 0, 0])); - assert_eq!(SpamSlots::::get(5), Some(vec![0, 0, 1, 0, 0, 1, 0])); - // v2 votes for 3 and against 5 - let stmts = vec![ - DisputeStatementSet { - candidate_hash: candidate_hash.clone(), - session: 3, - statements: vec![( - DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), - ValidatorIndex(6), - v2.sign( - &ExplicitDisputeStatement { - valid: true, - candidate_hash: candidate_hash.clone(), - session: 3, - } - .signing_payload(), - ), - )], - }, - DisputeStatementSet { - candidate_hash: candidate_hash.clone(), - session: 5, - statements: vec![( - DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), - ValidatorIndex(6), - v2.sign( - &ExplicitDisputeStatement { - valid: false, - candidate_hash: candidate_hash.clone(), - session: 5, - } - .signing_payload(), - ), - )], - }, - ]; - let stmts = update_spam_slots(stmts); + // v2 votes for 3 + let stmts = vec![DisputeStatementSet { + candidate_hash: candidate_hash.clone(), + session: 3, + statements: vec![( + DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), + ValidatorIndex(6), + v2.sign( + &ExplicitDisputeStatement { + valid: true, + candidate_hash: candidate_hash.clone(), + session: 3, + } + .signing_payload(), + ), + )], + }]; + let stmts = filter_dispute_set(stmts); assert_ok!(Pallet::::process_checked_multi_dispute_data(stmts), vec![]); - assert_eq!(SpamSlots::::get(3), Some(vec![0, 0, 0, 0, 0, 0, 0])); - assert_eq!(SpamSlots::::get(4), Some(vec![0, 0, 1, 1, 0, 0, 0])); - assert_eq!(SpamSlots::::get(5), Some(vec![0, 0, 0, 0, 0, 0, 0])); let stmts = vec![ // 0, 4, and 5 vote against 5 @@ -1215,103 +1173,284 @@ fn test_provide_multi_dispute_success_and_other() { .signing_payload(), ), ), - ], - }, - ]; - let stmts = update_spam_slots(stmts); - assert_ok!(Pallet::::process_checked_multi_dispute_data(stmts), vec![]); - - assert_eq!( - Pallet::::disputes(), - vec![ + ], + }, + ]; + let stmts = filter_dispute_set(stmts); + assert_ok!(Pallet::::process_checked_multi_dispute_data(stmts), vec![]); + + assert_eq!( + Pallet::::disputes(), + vec![ + ( + 5, + candidate_hash.clone(), + DisputeState { + validators_for: bitvec![u8, BitOrderLsb0; 0, 0, 0, 0, 0, 1, 0], + validators_against: bitvec![u8, BitOrderLsb0; 1, 1, 1, 0, 1, 0, 1], + start: 6, + concluded_at: Some(6), // 5 vote against + } + ), + ( + 3, + candidate_hash.clone(), + DisputeState { + validators_for: bitvec![u8, BitOrderLsb0; 1, 1, 0, 1, 1, 0, 1], + validators_against: bitvec![u8, BitOrderLsb0; 0, 0, 1, 0, 0, 1, 0], + start: 6, + concluded_at: Some(6), // 5 vote for + } + ), + ] + ); + + assert!(!Pallet::::concluded_invalid(3, candidate_hash.clone())); + assert!(!Pallet::::concluded_invalid(4, candidate_hash.clone())); + assert!(Pallet::::concluded_invalid(5, candidate_hash.clone())); + + // Ensure the `reward_validator` function was correctly called + assert_eq!( + REWARD_VALIDATORS.with(|r| r.borrow().clone()), + vec![ + (3, vec![ValidatorIndex(0), ValidatorIndex(2), ValidatorIndex(3)]), + (3, vec![ValidatorIndex(5)]), + (5, vec![ValidatorIndex(2), ValidatorIndex(5), ValidatorIndex(6)]), + (3, vec![ValidatorIndex(6)]), + (5, vec![ValidatorIndex(0), ValidatorIndex(1), ValidatorIndex(4)]), + (3, vec![ValidatorIndex(1), ValidatorIndex(4)]), + ], + ); + + // Ensure punishment against is called + assert_eq!( + PUNISH_VALIDATORS_AGAINST.with(|r| r.borrow().clone()), + vec![ + (3, vec![]), + (3, vec![]), + (5, vec![]), + (3, vec![]), + (5, vec![]), + (3, vec![ValidatorIndex(2), ValidatorIndex(5)]), + ], + ); + + // Ensure punishment for is called + assert_eq!( + PUNISH_VALIDATORS_FOR.with(|r| r.borrow().clone()), + vec![ + (3, vec![]), + (3, vec![]), + (5, vec![]), + (3, vec![]), + (5, vec![ValidatorIndex(5)]), + (3, vec![]), + ], + ); + }) +} + +/// In this setup we have only one dispute concluding AGAINST. +/// There are some votes imported post dispute conclusion. +/// We make sure these votes are accounted for in punishment. +#[test] +fn test_punish_post_conclusion() { + new_test_ext(Default::default()).execute_with(|| { + // supermajority threshold is 5 + let v0 = ::Pair::generate().0; + let v1 = ::Pair::generate().0; + let v2 = ::Pair::generate().0; + let v3 = ::Pair::generate().0; + let v4 = ::Pair::generate().0; + let v5 = ::Pair::generate().0; + let v6 = ::Pair::generate().0; + // Mapping between key pair and `ValidatorIndex` + // v0 -> 0 + // v1 -> 3 + // v2 -> 6 + // v3 -> 5 + // v4 -> 1 + // v5 -> 4 + // v6 -> 2 + + run_to_block(6, |b| { + // a new session at each block + Some(( + true, + b, + vec![ + (&0, v0.public()), + (&1, v1.public()), + (&2, v2.public()), + (&3, v3.public()), + (&4, v4.public()), + (&5, v5.public()), + (&6, v6.public()), + ], + Some(vec![ + (&0, v0.public()), + (&1, v1.public()), + (&2, v2.public()), + (&3, v3.public()), + (&4, v4.public()), + (&5, v5.public()), + (&6, v6.public()), + ]), + )) + }); + + let candidate_hash = CandidateHash(sp_core::H256::repeat_byte(1)); + let inclusion_parent = sp_core::H256::repeat_byte(0xff); + let session = 3; + + let stmts = vec![DisputeStatementSet { + candidate_hash: candidate_hash.clone(), + session, + statements: vec![ + ( + DisputeStatement::Valid(ValidDisputeStatementKind::BackingValid( + inclusion_parent, + )), + ValidatorIndex(0), + v0.sign(&CompactStatement::Valid(candidate_hash).signing_payload( + &SigningContext { session_index: session, parent_hash: inclusion_parent }, + )), + ), + ( + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(1), + v4.sign( + &ExplicitDisputeStatement { + valid: false, + candidate_hash: candidate_hash.clone(), + session, + } + .signing_payload(), + ), + ), + ( + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(2), + v6.sign( + &ExplicitDisputeStatement { + valid: false, + candidate_hash: candidate_hash.clone(), + session, + } + .signing_payload(), + ), + ), ( - 5, - candidate_hash.clone(), - DisputeState { - validators_for: bitvec![u8, BitOrderLsb0; 0, 0, 0, 0, 0, 1, 0], - validators_against: bitvec![u8, BitOrderLsb0; 1, 1, 1, 0, 1, 0, 1], - start: 6, - concluded_at: Some(6), // 5 vote against - } + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(6), + v2.sign( + &ExplicitDisputeStatement { + valid: false, + candidate_hash: candidate_hash.clone(), + session, + } + .signing_payload(), + ), ), ( - 3, - candidate_hash.clone(), - DisputeState { - validators_for: bitvec![u8, BitOrderLsb0; 1, 1, 0, 1, 1, 0, 1], - validators_against: bitvec![u8, BitOrderLsb0; 0, 0, 1, 0, 0, 1, 0], - start: 6, - concluded_at: Some(6), // 5 vote for - } + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(4), + v5.sign( + &ExplicitDisputeStatement { + valid: false, + candidate_hash: candidate_hash.clone(), + session, + } + .signing_payload(), + ), ), ( - 4, - candidate_hash.clone(), - DisputeState { - validators_for: bitvec![u8, BitOrderLsb0; 0, 0, 0, 1, 0, 0, 0], - validators_against: bitvec![u8, BitOrderLsb0; 0, 0, 1, 0, 0, 0, 0], - start: 6, - concluded_at: None, - } + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(5), + v3.sign( + &ExplicitDisputeStatement { + valid: false, + candidate_hash: candidate_hash.clone(), + session, + } + .signing_payload(), + ), ), - ] + ( + DisputeStatement::Valid(ValidDisputeStatementKind::ApprovalChecking), + ValidatorIndex(3), + v1.sign(&ApprovalVote(candidate_hash).signing_payload(session)), + ), + ], + }]; + + let stmts = filter_dispute_set(stmts); + assert_ok!( + Pallet::::process_checked_multi_dispute_data(stmts), + vec![(session, candidate_hash)], ); - assert!(!Pallet::::concluded_invalid(3, candidate_hash.clone())); - assert!(!Pallet::::concluded_invalid(4, candidate_hash.clone())); - assert!(Pallet::::concluded_invalid(5, candidate_hash.clone())); + assert_eq!( + PUNISH_VALIDATORS_FOR.with(|r| r.borrow().clone()), + vec![(session, vec![ValidatorIndex(0), ValidatorIndex(3)]),], + ); + assert_eq!( + PUNISH_BACKERS_FOR.with(|r| r.borrow().clone()), + vec![(session, vec![ValidatorIndex(0)]),], + ); - // Ensure inclusion removes spam slots - assert_eq!(SpamSlots::::get(4), Some(vec![0, 0, 1, 1, 0, 0, 0])); - Pallet::::note_included(4, candidate_hash.clone(), 4); - assert_eq!(SpamSlots::::get(4), Some(vec![0, 0, 0, 0, 0, 0, 0])); + // someone reveals 3 backing vote, 6 votes against + let stmts = vec![DisputeStatementSet { + candidate_hash: candidate_hash.clone(), + session, + statements: vec![ + ( + DisputeStatement::Valid(ValidDisputeStatementKind::BackingValid( + inclusion_parent, + )), + ValidatorIndex(3), + v1.sign(&CompactStatement::Valid(candidate_hash).signing_payload( + &SigningContext { session_index: session, parent_hash: inclusion_parent }, + )), + ), + ( + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(6), + v2.sign( + &ExplicitDisputeStatement { + valid: false, + candidate_hash: candidate_hash.clone(), + session, + } + .signing_payload(), + ), + ), + ], + }]; - // Ensure the `reward_validator` function was correctly called + let stmts = filter_dispute_set(stmts); + assert_ok!(Pallet::::process_checked_multi_dispute_data(stmts), vec![],); + + // Ensure punishment for is called assert_eq!( - REWARD_VALIDATORS.with(|r| r.borrow().clone()), + PUNISH_VALIDATORS_FOR.with(|r| r.borrow().clone()), vec![ - (3, vec![ValidatorIndex(0), ValidatorIndex(2)]), - (4, vec![ValidatorIndex(2), ValidatorIndex(3)]), - (3, vec![ValidatorIndex(3)]), - (3, vec![ValidatorIndex(5)]), - (5, vec![ValidatorIndex(2), ValidatorIndex(5)]), - (3, vec![ValidatorIndex(6)]), - (5, vec![ValidatorIndex(6)]), - (5, vec![ValidatorIndex(0), ValidatorIndex(1), ValidatorIndex(4)]), - (3, vec![ValidatorIndex(1), ValidatorIndex(4)]), + (session, vec![ValidatorIndex(0), ValidatorIndex(3)]), + (session, vec![ValidatorIndex(3)]), ], ); - // Ensure punishment against is called assert_eq!( - PUNISH_VALIDATORS_AGAINST.with(|r| r.borrow().clone()), + PUNISH_BACKERS_FOR.with(|r| r.borrow().clone()), vec![ - (3, vec![]), - (4, vec![]), - (3, vec![]), - (3, vec![]), - (5, vec![]), - (3, vec![]), - (5, vec![]), - (5, vec![]), - (3, vec![ValidatorIndex(2), ValidatorIndex(5)]), + (session, vec![ValidatorIndex(0)]), + (session, vec![ValidatorIndex(0), ValidatorIndex(3)]) ], ); - // Ensure punishment for is called assert_eq!( - PUNISH_VALIDATORS_FOR.with(|r| r.borrow().clone()), - vec![ - (3, vec![]), - (4, vec![]), - (3, vec![]), - (3, vec![]), - (5, vec![]), - (3, vec![]), - (5, vec![]), - (5, vec![ValidatorIndex(5)]), - (3, vec![]), - ], + PUNISH_VALIDATORS_AGAINST.with(|r| r.borrow().clone()), + vec![(session, vec![]), (session, vec![]),], ); }) } @@ -1380,44 +1519,6 @@ fn test_has_supermajority_against() { ); } -#[test] -fn test_decrement_spam() { - let original_spam_slots = vec![0, 1, 2, 3, 4, 5, 6, 7]; - - // Test confirm is no-op - let mut spam_slots = original_spam_slots.clone(); - let dispute_state_confirm = DisputeState { - validators_for: bitvec![u8, BitOrderLsb0; 1, 1, 0, 0, 0, 0, 0, 0], - validators_against: bitvec![u8, BitOrderLsb0; 1, 0, 1, 0, 0, 0, 0, 0], - start: 0, - concluded_at: None, - }; - assert_eq!(DisputeStateFlags::from_state(&dispute_state_confirm), DisputeStateFlags::CONFIRMED); - assert_eq!( - decrement_spam(spam_slots.as_mut(), &dispute_state_confirm), - bitvec![u8, BitOrderLsb0; 1, 1, 1, 0, 0, 0, 0, 0], - ); - assert_eq!(spam_slots, original_spam_slots); - - // Test not confirm is decreasing spam - let mut spam_slots = original_spam_slots.clone(); - let dispute_state_no_confirm = DisputeState { - validators_for: bitvec![u8, BitOrderLsb0; 1, 0, 0, 0, 0, 0, 0, 0], - validators_against: bitvec![u8, BitOrderLsb0; 1, 0, 1, 0, 0, 0, 0, 0], - start: 0, - concluded_at: None, - }; - assert_eq!( - DisputeStateFlags::from_state(&dispute_state_no_confirm), - DisputeStateFlags::default() - ); - assert_eq!( - decrement_spam(spam_slots.as_mut(), &dispute_state_no_confirm), - bitvec![u8, BitOrderLsb0; 1, 0, 1, 0, 0, 0, 0, 0], - ); - assert_eq!(spam_slots, vec![0, 1, 1, 3, 4, 5, 6, 7]); -} - #[test] fn test_check_signature() { let validator_id = ::Pair::generate().0; @@ -1912,14 +2013,12 @@ fn apply_filter_all>( sets: I, ) -> Vec { let config = >::config(); - let max_spam_slots = config.dispute_max_spam_slots; let post_conclusion_acceptance_period = config.dispute_post_conclusion_acceptance_period; let mut acc = Vec::::new(); for dispute_statement in sets { if let Some(checked) = as DisputesHandler<::BlockNumber>>::filter_dispute_data( dispute_statement, - max_spam_slots, post_conclusion_acceptance_period, VerifyDisputeSignatures::Yes, ) { @@ -1993,13 +2092,11 @@ fn filter_removes_duplicates_within_set() { ], }; - let max_spam_slots = 10; let post_conclusion_acceptance_period = 10; let statements = as DisputesHandler< ::BlockNumber, >>::filter_dispute_data( statements, - max_spam_slots, post_conclusion_acceptance_period, VerifyDisputeSignatures::Yes, ); @@ -2085,151 +2182,6 @@ fn filter_bad_signatures_correctly_detects_single_sided() { }) } -#[test] -fn filter_correctly_accounts_spam_slots() { - let dispute_max_spam_slots = 2; - - let mock_genesis_config = MockGenesisConfig { - configuration: crate::configuration::GenesisConfig { - config: HostConfiguration { dispute_max_spam_slots, ..Default::default() }, - ..Default::default() - }, - ..Default::default() - }; - - new_test_ext(mock_genesis_config).execute_with(|| { - // We need 7 validators for the byzantine threshold to be 2 - let v0 = ::Pair::generate().0; - let v1 = ::Pair::generate().0; - let v2 = ::Pair::generate().0; - let v3 = ::Pair::generate().0; - let v4 = ::Pair::generate().0; - let v5 = ::Pair::generate().0; - let v6 = ::Pair::generate().0; - - run_to_block(3, |b| { - // a new session at each block - Some(( - true, - b, - vec![ - (&0, v0.public()), - (&1, v1.public()), - (&2, v2.public()), - (&3, v3.public()), - (&4, v4.public()), - (&5, v5.public()), - (&6, v6.public()), - ], - Some(vec![ - (&0, v0.public()), - (&1, v1.public()), - (&2, v2.public()), - (&3, v3.public()), - (&4, v4.public()), - (&5, v5.public()), - (&6, v6.public()), - ]), - )) - }); - - let candidate_hash_a = CandidateHash(sp_core::H256::repeat_byte(1)); - let candidate_hash_b = CandidateHash(sp_core::H256::repeat_byte(2)); - let candidate_hash_c = CandidateHash(sp_core::H256::repeat_byte(3)); - - let payload = |c_hash: &CandidateHash, valid| { - ExplicitDisputeStatement { valid, candidate_hash: c_hash.clone(), session: 1 } - .signing_payload() - }; - - let payload_a = payload(&candidate_hash_a, true); - let payload_b = payload(&candidate_hash_b, true); - let payload_c = payload(&candidate_hash_c, true); - - let payload_a_bad = payload(&candidate_hash_a, false); - let payload_b_bad = payload(&candidate_hash_b, false); - let payload_c_bad = payload(&candidate_hash_c, false); - - let sig_0a = v0.sign(&payload_a); - let sig_0b = v0.sign(&payload_b); - let sig_0c = v0.sign(&payload_c); - - let sig_1b = v1.sign(&payload_b); - - let sig_2a = v2.sign(&payload_a_bad); - let sig_2b = v2.sign(&payload_b_bad); - let sig_2c = v2.sign(&payload_c_bad); - - let statements = vec![ - // validators 0 and 2 get 1 spam slot from this. - DisputeStatementSet { - candidate_hash: candidate_hash_a.clone(), - session: 1, - statements: vec![ - ( - DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), - ValidatorIndex(0), - sig_0a.clone(), - ), - ( - DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), - ValidatorIndex(6), - sig_2a.clone(), - ), - ], - }, - // Validators 0, 2, and 3 get no spam slots for this - DisputeStatementSet { - candidate_hash: candidate_hash_b.clone(), - session: 1, - statements: vec![ - ( - DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), - ValidatorIndex(0), - sig_0b.clone(), - ), - ( - DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), - ValidatorIndex(3), - sig_1b.clone(), - ), - ( - DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), - ValidatorIndex(6), - sig_2b.clone(), - ), - ], - }, - // Validators 0 and 2 get an extra spam slot for this. - DisputeStatementSet { - candidate_hash: candidate_hash_c.clone(), - session: 1, - statements: vec![ - ( - DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), - ValidatorIndex(0), - sig_0c.clone(), - ), - ( - DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), - ValidatorIndex(6), - sig_2c.clone(), - ), - ], - }, - ]; - - let old_statements = statements - .clone() - .into_iter() - .map(CheckedDisputeStatementSet::unchecked_from_unchecked) - .collect::>(); - let statements = apply_filter_all::(statements); - - assert_eq!(statements, old_statements); - }) -} - #[test] fn filter_removes_session_out_of_bounds() { new_test_ext(Default::default()).execute_with(|| { diff --git a/runtime/parachains/src/dmp.rs b/runtime/parachains/src/dmp.rs index ed64624f9f33..03a767eb428f 100644 --- a/runtime/parachains/src/dmp.rs +++ b/runtime/parachains/src/dmp.rs @@ -19,7 +19,7 @@ use crate::{ initializer, }; use frame_support::pallet_prelude::*; -use primitives::v2::{DownwardMessage, Hash, Id as ParaId, InboundDownwardMessage}; +use primitives::{DownwardMessage, Hash, Id as ParaId, InboundDownwardMessage}; use sp_runtime::traits::{BlakeTwo256, Hash as HashT, SaturatedConversion}; use sp_std::{fmt, prelude::*}; use xcm::latest::SendError; @@ -29,6 +29,8 @@ pub use pallet::*; #[cfg(test)] mod tests; +pub const MAX_MESSAGE_QUEUE_SIZE: usize = 1024; + /// An error sending a downward message. #[cfg_attr(test, derive(Debug))] pub enum QueueDownwardMessageError { @@ -73,7 +75,6 @@ pub mod pallet { use super::*; #[pallet::pallet] - #[pallet::generate_store(pub(super) trait Store)] #[pallet::without_storage_info] pub struct Pallet(_); @@ -133,8 +134,28 @@ impl Pallet { /// Remove all relevant storage items for an outgoing parachain. fn clean_dmp_after_outgoing(outgoing_para: &ParaId) { - ::DownwardMessageQueues::remove(outgoing_para); - ::DownwardMessageQueueHeads::remove(outgoing_para); + DownwardMessageQueues::::remove(outgoing_para); + DownwardMessageQueueHeads::::remove(outgoing_para); + } + + /// Determine whether enqueuing a downward message to a specific recipient para would result + /// in an error. If this returns `Ok(())` the caller can be certain that a call to + /// `queue_downward_message` with the same parameters will be successful. + pub fn can_queue_downward_message( + config: &HostConfiguration, + para: &ParaId, + msg: &DownwardMessage, + ) -> Result<(), QueueDownwardMessageError> { + let serialized_len = msg.len() as u32; + if serialized_len > config.max_downward_message_size { + return Err(QueueDownwardMessageError::ExceedsMaxMessageSize) + } + + if DownwardMessageQueues::::decode_len(para).unwrap_or(0) > MAX_MESSAGE_QUEUE_SIZE { + return Err(QueueDownwardMessageError::ExceedsMaxMessageSize) + } + + Ok(()) } /// Enqueue a downward message to a specific recipient para. @@ -155,17 +176,21 @@ impl Pallet { return Err(QueueDownwardMessageError::ExceedsMaxMessageSize) } + if DownwardMessageQueues::::decode_len(para).unwrap_or(0) > MAX_MESSAGE_QUEUE_SIZE { + return Err(QueueDownwardMessageError::ExceedsMaxMessageSize) + } + let inbound = InboundDownwardMessage { msg, sent_at: >::block_number() }; // obtain the new link in the MQC and update the head. - ::DownwardMessageQueueHeads::mutate(para, |head| { + DownwardMessageQueueHeads::::mutate(para, |head| { let new_head = BlakeTwo256::hash_of(&(*head, inbound.sent_at, T::Hashing::hash_of(&inbound.msg))); *head = new_head; }); - ::DownwardMessageQueues::mutate(para, |v| { + DownwardMessageQueues::::mutate(para, |v| { v.push(inbound); }); @@ -194,7 +219,7 @@ impl Pallet { /// Prunes the specified number of messages from the downward message queue of the given para. pub(crate) fn prune_dmq(para: ParaId, processed_downward_messages: u32) -> Weight { - ::DownwardMessageQueues::mutate(para, |q| { + DownwardMessageQueues::::mutate(para, |q| { let processed_downward_messages = processed_downward_messages as usize; if processed_downward_messages > q.len() { // reaching this branch is unexpected due to the constraint established by @@ -211,14 +236,14 @@ impl Pallet { /// associated with it. #[cfg(test)] fn dmq_mqc_head(para: ParaId) -> Hash { - ::DownwardMessageQueueHeads::get(¶) + DownwardMessageQueueHeads::::get(¶) } /// Returns the number of pending downward messages addressed to the given para. /// /// Returns 0 if the para doesn't have an associated downward message queue. pub(crate) fn dmq_length(para: ParaId) -> u32 { - ::DownwardMessageQueues::decode_len(¶) + DownwardMessageQueues::::decode_len(¶) .unwrap_or(0) .saturated_into::() } @@ -227,6 +252,6 @@ impl Pallet { /// /// The most recent messages are the latest in the vector. pub(crate) fn dmq_contents(recipient: ParaId) -> Vec> { - ::DownwardMessageQueues::get(&recipient) + DownwardMessageQueues::::get(&recipient) } } diff --git a/runtime/parachains/src/dmp/tests.rs b/runtime/parachains/src/dmp/tests.rs index af2ec1d6a98f..a3d9b6e3ac85 100644 --- a/runtime/parachains/src/dmp/tests.rs +++ b/runtime/parachains/src/dmp/tests.rs @@ -15,10 +15,10 @@ // along with Polkadot. If not, see . use super::*; -use crate::mock::{new_test_ext, Configuration, Dmp, MockGenesisConfig, Paras, System}; +use crate::mock::{new_test_ext, Configuration, Dmp, MockGenesisConfig, Paras, System, Test}; use hex_literal::hex; use parity_scale_codec::Encode; -use primitives::v2::BlockNumber; +use primitives::BlockNumber; pub(crate) fn run_to_block(to: BlockNumber, new_session: Option>) { while System::block_number() < to { @@ -73,9 +73,9 @@ fn clean_dmp_works() { let outgoing_paras = vec![a, b]; Dmp::initializer_on_new_session(¬ification, &outgoing_paras); - assert!(::DownwardMessageQueues::get(&a).is_empty()); - assert!(::DownwardMessageQueues::get(&b).is_empty()); - assert!(!::DownwardMessageQueues::get(&c).is_empty()); + assert!(DownwardMessageQueues::::get(&a).is_empty()); + assert!(DownwardMessageQueues::::get(&b).is_empty()); + assert!(!DownwardMessageQueues::::get(&c).is_empty()); }); } @@ -184,7 +184,7 @@ fn queue_downward_message_critical() { #[test] fn verify_dmq_mqc_head_is_externally_accessible() { use hex_literal::hex; - use primitives::v2::well_known_keys; + use primitives::well_known_keys; let a = ParaId::from(2020); diff --git a/runtime/parachains/src/hrmp.rs b/runtime/parachains/src/hrmp.rs index ed8e554bc498..fe87f85db757 100644 --- a/runtime/parachains/src/hrmp.rs +++ b/runtime/parachains/src/hrmp.rs @@ -21,7 +21,8 @@ use crate::{ use frame_support::{pallet_prelude::*, traits::ReservableCurrency}; use frame_system::pallet_prelude::*; use parity_scale_codec::{Decode, Encode}; -use primitives::v2::{ +use polkadot_parachain::primitives::HorizontalMessages; +use primitives::{ Balance, Hash, HrmpChannelId, Id as ParaId, InboundHrmpMessage, OutboundHrmpMessage, SessionIndex, }; @@ -234,7 +235,6 @@ pub mod pallet { use super::*; #[pallet::pallet] - #[pallet::generate_store(pub(super) trait Store)] #[pallet::without_storage_info] pub struct Pallet(_); @@ -465,6 +465,7 @@ pub mod pallet { /// /// The channel can be opened only after the recipient confirms it and only on a session /// change. + #[pallet::call_index(0)] #[pallet::weight(::WeightInfo::hrmp_init_open_channel())] pub fn hrmp_init_open_channel( origin: OriginFor, @@ -491,6 +492,7 @@ pub mod pallet { /// Accept a pending open channel request from the given sender. /// /// The channel will be opened only on the next session boundary. + #[pallet::call_index(1)] #[pallet::weight(::WeightInfo::hrmp_accept_open_channel())] pub fn hrmp_accept_open_channel(origin: OriginFor, sender: ParaId) -> DispatchResult { let origin = ensure_parachain(::RuntimeOrigin::from(origin))?; @@ -503,6 +505,7 @@ pub mod pallet { /// recipient in the channel being closed. /// /// The closure can only happen on a session change. + #[pallet::call_index(2)] #[pallet::weight(::WeightInfo::hrmp_close_channel())] pub fn hrmp_close_channel( origin: OriginFor, @@ -521,6 +524,7 @@ pub mod pallet { /// Origin must be Root. /// /// Number of inbound and outbound channels for `para` must be provided as witness data of weighing. + #[pallet::call_index(3)] #[pallet::weight(::WeightInfo::force_clean_hrmp(*_inbound, *_outbound))] pub fn force_clean_hrmp( origin: OriginFor, @@ -539,6 +543,7 @@ pub mod pallet { /// function process all of those requests immediately. /// /// Total number of opening channels must be provided as witness data of weighing. + #[pallet::call_index(4)] #[pallet::weight(::WeightInfo::force_process_hrmp_open(*_channels))] pub fn force_process_hrmp_open(origin: OriginFor, _channels: u32) -> DispatchResult { ensure_root(origin)?; @@ -553,6 +558,7 @@ pub mod pallet { /// function process all of those requests immediately. /// /// Total number of closing channels must be provided as witness data of weighing. + #[pallet::call_index(5)] #[pallet::weight(::WeightInfo::force_process_hrmp_close(*_channels))] pub fn force_process_hrmp_close(origin: OriginFor, _channels: u32) -> DispatchResult { ensure_root(origin)?; @@ -568,6 +574,7 @@ pub mod pallet { /// /// Total number of open requests (i.e. `HrmpOpenChannelRequestsList`) must be provided as /// witness data. + #[pallet::call_index(6)] #[pallet::weight(::WeightInfo::hrmp_cancel_open_request(*open_requests))] pub fn hrmp_cancel_open_request( origin: OriginFor, @@ -576,8 +583,8 @@ pub mod pallet { ) -> DispatchResult { let origin = ensure_parachain(::RuntimeOrigin::from(origin))?; ensure!( - ::HrmpOpenChannelRequestsList::decode_len().unwrap_or_default() - as u32 <= open_requests, + HrmpOpenChannelRequestsList::::decode_len().unwrap_or_default() as u32 <= + open_requests, Error::::WrongWitness ); Self::cancel_open_request(origin, channel_id.clone())?; @@ -591,6 +598,7 @@ pub mod pallet { /// /// Expected use is when one of the `ParaId`s involved in the channel is governed by the /// Relay Chain, e.g. a common good parachain. + #[pallet::call_index(7)] #[pallet::weight(::WeightInfo::force_open_hrmp_channel())] pub fn force_open_hrmp_channel( origin: OriginFor, @@ -676,10 +684,10 @@ impl Pallet { // we need a few extra bits of data to weigh this -- all of this is read internally // anyways, so no overhead. - let ingress_count = ::HrmpIngressChannelsIndex::decode_len(outgoing_para) - .unwrap_or_default() as u32; - let egress_count = ::HrmpEgressChannelsIndex::decode_len(outgoing_para) - .unwrap_or_default() as u32; + let ingress_count = + HrmpIngressChannelsIndex::::decode_len(outgoing_para).unwrap_or_default() as u32; + let egress_count = + HrmpEgressChannelsIndex::::decode_len(outgoing_para).unwrap_or_default() as u32; w = w.saturating_add(::WeightInfo::force_clean_hrmp( ingress_count, egress_count, @@ -700,16 +708,16 @@ impl Pallet { // // Both the open channel request list and outgoing list are expected to be small enough. // In the most common case there will be only single outgoing para. - let open_channel_reqs = ::HrmpOpenChannelRequestsList::get(); + let open_channel_reqs = HrmpOpenChannelRequestsList::::get(); let (go, stay): (Vec, Vec) = open_channel_reqs .into_iter() .partition(|req_id| outgoing.iter().any(|id| req_id.is_participant(*id))); - ::HrmpOpenChannelRequestsList::put(stay); + HrmpOpenChannelRequestsList::::put(stay); // Then iterate over all open requests to be removed, pull them out of the set and perform // the refunds if applicable. for req_id in go { - let req_data = match ::HrmpOpenChannelRequests::take(&req_id) { + let req_data = match HrmpOpenChannelRequests::::take(&req_id) { Some(req_data) => req_data, None => { // Can't normally happen but no need to panic. @@ -746,13 +754,13 @@ impl Pallet { /// Remove all storage entries associated with the given para. fn clean_hrmp_after_outgoing(outgoing_para: &ParaId) { - ::HrmpOpenChannelRequestCount::remove(outgoing_para); - ::HrmpAcceptedChannelRequestCount::remove(outgoing_para); + HrmpOpenChannelRequestCount::::remove(outgoing_para); + HrmpAcceptedChannelRequestCount::::remove(outgoing_para); - let ingress = ::HrmpIngressChannelsIndex::take(outgoing_para) + let ingress = HrmpIngressChannelsIndex::::take(outgoing_para) .into_iter() .map(|sender| HrmpChannelId { sender, recipient: *outgoing_para }); - let egress = ::HrmpEgressChannelsIndex::take(outgoing_para) + let egress = HrmpEgressChannelsIndex::::take(outgoing_para) .into_iter() .map(|recipient| HrmpChannelId { sender: *outgoing_para, recipient }); let mut to_close = ingress.chain(egress).collect::>(); @@ -769,7 +777,7 @@ impl Pallet { /// - prune the stale requests /// - enact the confirmed requests fn process_hrmp_open_channel_requests(config: &HostConfiguration) { - let mut open_req_channels = ::HrmpOpenChannelRequestsList::get(); + let mut open_req_channels = HrmpOpenChannelRequestsList::::get(); if open_req_channels.is_empty() { return } @@ -785,7 +793,7 @@ impl Pallet { idx -= 1; let channel_id = open_req_channels[idx].clone(); - let request = ::HrmpOpenChannelRequests::get(&channel_id).expect( + let request = HrmpOpenChannelRequests::::get(&channel_id).expect( "can't be `None` due to the invariant that the list contains the same items as the set; qed", ); @@ -793,7 +801,7 @@ impl Pallet { if >::is_valid_para(channel_id.sender) && >::is_valid_para(channel_id.recipient) { - ::HrmpChannels::insert( + HrmpChannels::::insert( &channel_id, HrmpChannel { sender_deposit: request.sender_deposit, @@ -807,12 +815,12 @@ impl Pallet { }, ); - ::HrmpIngressChannelsIndex::mutate(&channel_id.recipient, |v| { + HrmpIngressChannelsIndex::::mutate(&channel_id.recipient, |v| { if let Err(i) = v.binary_search(&channel_id.sender) { v.insert(i, channel_id.sender); } }); - ::HrmpEgressChannelsIndex::mutate(&channel_id.sender, |v| { + HrmpEgressChannelsIndex::::mutate(&channel_id.sender, |v| { if let Err(i) = v.binary_search(&channel_id.recipient) { v.insert(i, channel_id.recipient); } @@ -823,18 +831,18 @@ impl Pallet { Self::decrease_accepted_channel_request_count(channel_id.recipient); let _ = open_req_channels.swap_remove(idx); - ::HrmpOpenChannelRequests::remove(&channel_id); + HrmpOpenChannelRequests::::remove(&channel_id); } } - ::HrmpOpenChannelRequestsList::put(open_req_channels); + HrmpOpenChannelRequestsList::::put(open_req_channels); } /// Iterate over all close channel requests unconditionally closing the channels. fn process_hrmp_close_channel_requests() { - let close_reqs = ::HrmpCloseChannelRequestsList::take(); + let close_reqs = HrmpCloseChannelRequestsList::::take(); for condemned_ch_id in close_reqs { - ::HrmpCloseChannelRequests::remove(&condemned_ch_id); + HrmpCloseChannelRequests::::remove(&condemned_ch_id); Self::close_hrmp_channel(&condemned_ch_id); } } @@ -847,7 +855,7 @@ impl Pallet { /// effect (i.e. it won't return the deposits twice). fn close_hrmp_channel(channel_id: &HrmpChannelId) { if let Some(HrmpChannel { sender_deposit, recipient_deposit, .. }) = - ::HrmpChannels::take(channel_id) + HrmpChannels::::take(channel_id) { T::Currency::unreserve( &channel_id.sender.into_account_truncating(), @@ -859,14 +867,14 @@ impl Pallet { ); } - ::HrmpChannelContents::remove(channel_id); + HrmpChannelContents::::remove(channel_id); - ::HrmpEgressChannelsIndex::mutate(&channel_id.sender, |v| { + HrmpEgressChannelsIndex::::mutate(&channel_id.sender, |v| { if let Ok(i) = v.binary_search(&channel_id.recipient) { v.remove(i); } }); - ::HrmpIngressChannelsIndex::mutate(&channel_id.recipient, |v| { + HrmpIngressChannelsIndex::::mutate(&channel_id.recipient, |v| { if let Ok(i) = v.binary_search(&channel_id.sender) { v.remove(i); } @@ -886,7 +894,7 @@ impl Pallet { // // (b) However, a parachain cannot read into "the future", therefore the watermark should // not be greater than the relay-chain context block which the parablock refers to. - if let Some(last_watermark) = ::HrmpWatermarks::get(&recipient) { + if let Some(last_watermark) = HrmpWatermarks::::get(&recipient) { if new_hrmp_watermark <= last_watermark { return Err(HrmpWatermarkAcceptanceErr::AdvancementRule { new_watermark: new_hrmp_watermark, @@ -908,7 +916,7 @@ impl Pallet { if new_hrmp_watermark == relay_chain_parent_number { Ok(()) } else { - let digest = ::HrmpChannelDigests::get(&recipient); + let digest = HrmpChannelDigests::::get(&recipient); if !digest .binary_search_by_key(&new_hrmp_watermark, |(block_no, _)| *block_no) .is_ok() @@ -949,7 +957,7 @@ impl Pallet { let channel_id = HrmpChannelId { sender, recipient: out_msg.recipient }; - let channel = match ::HrmpChannels::get(&channel_id) { + let channel = match HrmpChannels::::get(&channel_id) { Some(channel) => channel, None => return Err(OutboundHrmpAcceptanceErr::NoSuchChannel { channel_id, idx }), }; @@ -990,7 +998,7 @@ impl Pallet { // sift through the incoming messages digest to collect the paras that sent at least one // message to this parachain between the old and new watermarks. - let senders = ::HrmpChannelDigests::mutate(&recipient, |digest| { + let senders = HrmpChannelDigests::::mutate(&recipient, |digest| { let mut senders = BTreeSet::new(); let mut leftover = Vec::with_capacity(digest.len()); for (block_no, paras_sent_msg) in mem::replace(digest, Vec::new()) { @@ -1013,7 +1021,7 @@ impl Pallet { // and what is the total byte size of them. let (mut pruned_cnt, mut pruned_size) = (0, 0); - let contents = ::HrmpChannelContents::get(&channel_id); + let contents = HrmpChannelContents::::get(&channel_id); let mut leftover = Vec::with_capacity(contents.len()); for msg in contents { if msg.sent_at <= new_hrmp_watermark { @@ -1024,13 +1032,13 @@ impl Pallet { } } if !leftover.is_empty() { - ::HrmpChannelContents::insert(&channel_id, leftover); + HrmpChannelContents::::insert(&channel_id, leftover); } else { - ::HrmpChannelContents::remove(&channel_id); + HrmpChannelContents::::remove(&channel_id); } // update the channel metadata. - ::HrmpChannels::mutate(&channel_id, |channel| { + HrmpChannels::::mutate(&channel_id, |channel| { if let Some(ref mut channel) = channel { channel.msg_count -= pruned_cnt as u32; channel.total_size -= pruned_size as u32; @@ -1040,7 +1048,7 @@ impl Pallet { weight += T::DbWeight::get().reads_writes(2, 2); } - ::HrmpWatermarks::insert(&recipient, new_hrmp_watermark); + HrmpWatermarks::::insert(&recipient, new_hrmp_watermark); weight += T::DbWeight::get().reads_writes(0, 1); weight @@ -1049,17 +1057,14 @@ impl Pallet { /// Process the outbound HRMP messages by putting them into the appropriate recipient queues. /// /// Returns the amount of weight consumed. - pub(crate) fn queue_outbound_hrmp( - sender: ParaId, - out_hrmp_msgs: Vec>, - ) -> Weight { + pub(crate) fn queue_outbound_hrmp(sender: ParaId, out_hrmp_msgs: HorizontalMessages) -> Weight { let mut weight = Weight::zero(); let now = >::block_number(); for out_msg in out_hrmp_msgs { let channel_id = HrmpChannelId { sender, recipient: out_msg.recipient }; - let mut channel = match ::HrmpChannels::get(&channel_id) { + let mut channel = match HrmpChannels::::get(&channel_id) { Some(channel) => channel, None => { // apparently, that since acceptance of this candidate the recipient was @@ -1083,8 +1088,8 @@ impl Pallet { )); channel.mqc_head = Some(new_head); - ::HrmpChannels::insert(&channel_id, channel); - ::HrmpChannelContents::append(&channel_id, inbound); + HrmpChannels::::insert(&channel_id, channel); + HrmpChannelContents::::append(&channel_id, inbound); // The digests are sorted in ascending by block number order. Assuming absence of // contextual execution, there are only two possible scenarios here: @@ -1098,8 +1103,7 @@ impl Pallet { // // Note that having the latest entry greater than the current block number is a logical // error. - let mut recipient_digest = - ::HrmpChannelDigests::get(&channel_id.recipient); + let mut recipient_digest = HrmpChannelDigests::::get(&channel_id.recipient); if let Some(cur_block_digest) = recipient_digest .last_mut() .filter(|(block_no, _)| *block_no == now) @@ -1109,7 +1113,7 @@ impl Pallet { } else { recipient_digest.push((now, vec![sender])); } - ::HrmpChannelDigests::insert(&channel_id.recipient, recipient_digest); + HrmpChannelDigests::::insert(&channel_id.recipient, recipient_digest); weight += T::DbWeight::get().reads_writes(2, 2); } @@ -1148,17 +1152,16 @@ impl Pallet { let channel_id = HrmpChannelId { sender: origin, recipient }; ensure!( - ::HrmpOpenChannelRequests::get(&channel_id).is_none(), + HrmpOpenChannelRequests::::get(&channel_id).is_none(), Error::::OpenHrmpChannelAlreadyRequested, ); ensure!( - ::HrmpChannels::get(&channel_id).is_none(), + HrmpChannels::::get(&channel_id).is_none(), Error::::OpenHrmpChannelAlreadyExists, ); - let egress_cnt = - ::HrmpEgressChannelsIndex::decode_len(&origin).unwrap_or(0) as u32; - let open_req_cnt = ::HrmpOpenChannelRequestCount::get(&origin); + let egress_cnt = HrmpEgressChannelsIndex::::decode_len(&origin).unwrap_or(0) as u32; + let open_req_cnt = HrmpOpenChannelRequestCount::::get(&origin); let channel_num_limit = if >::is_parathread(origin) { config.hrmp_max_parathread_outbound_channels } else { @@ -1176,8 +1179,8 @@ impl Pallet { // mutating storage directly now -- shall not bail henceforth. - ::HrmpOpenChannelRequestCount::insert(&origin, open_req_cnt + 1); - ::HrmpOpenChannelRequests::insert( + HrmpOpenChannelRequestCount::::insert(&origin, open_req_cnt + 1); + HrmpOpenChannelRequests::::insert( &channel_id, HrmpOpenChannelRequest { confirmed: false, @@ -1188,7 +1191,7 @@ impl Pallet { max_total_size: config.hrmp_channel_max_total_size, }, ); - ::HrmpOpenChannelRequestsList::append(channel_id); + HrmpOpenChannelRequestsList::::append(channel_id); let notification_bytes = { use parity_scale_codec::Encode as _; @@ -1222,7 +1225,7 @@ impl Pallet { /// intended for calling directly from other pallets rather than dispatched. pub fn accept_open_channel(origin: ParaId, sender: ParaId) -> DispatchResult { let channel_id = HrmpChannelId { sender, recipient: origin }; - let mut channel_req = ::HrmpOpenChannelRequests::get(&channel_id) + let mut channel_req = HrmpOpenChannelRequests::::get(&channel_id) .ok_or(Error::::AcceptHrmpChannelDoesntExist)?; ensure!(!channel_req.confirmed, Error::::AcceptHrmpChannelAlreadyConfirmed); @@ -1234,9 +1237,8 @@ impl Pallet { } else { config.hrmp_max_parachain_inbound_channels }; - let ingress_cnt = - ::HrmpIngressChannelsIndex::decode_len(&origin).unwrap_or(0) as u32; - let accepted_cnt = ::HrmpAcceptedChannelRequestCount::get(&origin); + let ingress_cnt = HrmpIngressChannelsIndex::::decode_len(&origin).unwrap_or(0) as u32; + let accepted_cnt = HrmpAcceptedChannelRequestCount::::get(&origin); ensure!( ingress_cnt + accepted_cnt < channel_num_limit, Error::::AcceptHrmpChannelLimitExceeded, @@ -1250,8 +1252,8 @@ impl Pallet { // persist the updated open channel request and then increment the number of accepted // channels. channel_req.confirmed = true; - ::HrmpOpenChannelRequests::insert(&channel_id, channel_req); - ::HrmpAcceptedChannelRequestCount::insert(&origin, accepted_cnt + 1); + HrmpOpenChannelRequests::::insert(&channel_id, channel_req); + HrmpAcceptedChannelRequestCount::::insert(&origin, accepted_cnt + 1); let notification_bytes = { use parity_scale_codec::Encode as _; @@ -1278,13 +1280,13 @@ impl Pallet { // check if the origin is allowed to close the channel. ensure!(channel_id.is_participant(origin), Error::::CancelHrmpOpenChannelUnauthorized); - let open_channel_req = ::HrmpOpenChannelRequests::get(&channel_id) + let open_channel_req = HrmpOpenChannelRequests::::get(&channel_id) .ok_or(Error::::OpenHrmpChannelDoesntExist)?; ensure!(!open_channel_req.confirmed, Error::::OpenHrmpChannelAlreadyConfirmed); // Remove the request by the channel id and sync the accompanying list with the set. - ::HrmpOpenChannelRequests::remove(&channel_id); - ::HrmpOpenChannelRequestsList::mutate(|open_req_channels| { + HrmpOpenChannelRequests::::remove(&channel_id); + HrmpOpenChannelRequestsList::::mutate(|open_req_channels| { if let Some(pos) = open_req_channels.iter().position(|x| x == &channel_id) { open_req_channels.swap_remove(pos); } @@ -1310,18 +1312,18 @@ impl Pallet { // check if the channel requested to close does exist. ensure!( - ::HrmpChannels::get(&channel_id).is_some(), + HrmpChannels::::get(&channel_id).is_some(), Error::::CloseHrmpChannelDoesntExist, ); // check that there is no outstanding close request for this channel ensure!( - ::HrmpCloseChannelRequests::get(&channel_id).is_none(), + HrmpCloseChannelRequests::::get(&channel_id).is_none(), Error::::CloseHrmpChannelAlreadyUnderway, ); - ::HrmpCloseChannelRequests::insert(&channel_id, ()); - ::HrmpCloseChannelRequestsList::append(channel_id.clone()); + HrmpCloseChannelRequests::::insert(&channel_id, ()); + HrmpCloseChannelRequestsList::::append(channel_id.clone()); let config = >::config(); let notification_bytes = { @@ -1357,13 +1359,12 @@ impl Pallet { /// multiple entries with the same sender. #[cfg(test)] fn hrmp_mqc_heads(recipient: ParaId) -> Vec<(ParaId, Hash)> { - let sender_set = ::HrmpIngressChannelsIndex::get(&recipient); + let sender_set = HrmpIngressChannelsIndex::::get(&recipient); // The ingress channels vector is sorted, thus `mqc_heads` is sorted as well. let mut mqc_heads = Vec::with_capacity(sender_set.len()); for sender in sender_set { - let channel_metadata = - ::HrmpChannels::get(&HrmpChannelId { sender, recipient }); + let channel_metadata = HrmpChannels::::get(&HrmpChannelId { sender, recipient }); let mqc_head = channel_metadata .and_then(|metadata| metadata.mqc_head) .unwrap_or(Hash::default()); @@ -1378,12 +1379,12 @@ impl Pallet { pub(crate) fn inbound_hrmp_channels_contents( recipient: ParaId, ) -> BTreeMap>> { - let sender_set = ::HrmpIngressChannelsIndex::get(&recipient); + let sender_set = HrmpIngressChannelsIndex::::get(&recipient); let mut inbound_hrmp_channels_contents = BTreeMap::new(); for sender in sender_set { let channel_contents = - ::HrmpChannelContents::get(&HrmpChannelId { sender, recipient }); + HrmpChannelContents::::get(&HrmpChannelId { sender, recipient }); inbound_hrmp_channels_contents.insert(sender, channel_contents); } @@ -1395,7 +1396,7 @@ impl Pallet { /// Decreases the open channel request count for the given sender. If the value reaches zero /// it is removed completely. fn decrease_open_channel_request_count(sender: ParaId) { - ::HrmpOpenChannelRequestCount::mutate_exists(&sender, |opt_rc| { + HrmpOpenChannelRequestCount::::mutate_exists(&sender, |opt_rc| { *opt_rc = opt_rc.and_then(|rc| match rc.saturating_sub(1) { 0 => None, n => Some(n), @@ -1406,7 +1407,7 @@ impl Pallet { /// Decreases the accepted channel request count for the given sender. If the value reaches /// zero it is removed completely. fn decrease_accepted_channel_request_count(recipient: ParaId) { - ::HrmpAcceptedChannelRequestCount::mutate_exists(&recipient, |opt_rc| { + HrmpAcceptedChannelRequestCount::::mutate_exists(&recipient, |opt_rc| { *opt_rc = opt_rc.and_then(|rc| match rc.saturating_sub(1) { 0 => None, n => Some(n), @@ -1432,12 +1433,8 @@ impl Pallet { }; assert_eq!( - ::HrmpOpenChannelRequests::iter() - .map(|(k, _)| k) - .collect::>(), - ::HrmpOpenChannelRequestsList::get() - .into_iter() - .collect::>(), + HrmpOpenChannelRequests::::iter().map(|(k, _)| k).collect::>(), + HrmpOpenChannelRequestsList::::get().into_iter().collect::>(), ); // verify that the set of keys in `HrmpOpenChannelRequestCount` corresponds to the set @@ -1445,17 +1442,15 @@ impl Pallet { // // having ensured that, we can go ahead and go over all counts and verify that they match. assert_eq!( - ::HrmpOpenChannelRequestCount::iter() + HrmpOpenChannelRequestCount::::iter() .map(|(k, _)| k) .collect::>(), - ::HrmpOpenChannelRequests::iter() + HrmpOpenChannelRequests::::iter() .map(|(k, _)| k.sender) .collect::>(), ); - for (open_channel_initiator, expected_num) in - ::HrmpOpenChannelRequestCount::iter() - { - let actual_num = ::HrmpOpenChannelRequests::iter() + for (open_channel_initiator, expected_num) in HrmpOpenChannelRequestCount::::iter() { + let actual_num = HrmpOpenChannelRequests::::iter() .filter(|(ch, _)| ch.sender == open_channel_initiator) .count() as u32; assert_eq!(expected_num, actual_num); @@ -1464,43 +1459,37 @@ impl Pallet { // The same as above, but for accepted channel request count. Note that we are interested // only in confirmed open requests. assert_eq!( - ::HrmpAcceptedChannelRequestCount::iter() + HrmpAcceptedChannelRequestCount::::iter() .map(|(k, _)| k) .collect::>(), - ::HrmpOpenChannelRequests::iter() + HrmpOpenChannelRequests::::iter() .filter(|(_, v)| v.confirmed) .map(|(k, _)| k.recipient) .collect::>(), ); - for (channel_recipient, expected_num) in - ::HrmpAcceptedChannelRequestCount::iter() - { - let actual_num = ::HrmpOpenChannelRequests::iter() + for (channel_recipient, expected_num) in HrmpAcceptedChannelRequestCount::::iter() { + let actual_num = HrmpOpenChannelRequests::::iter() .filter(|(ch, v)| ch.recipient == channel_recipient && v.confirmed) .count() as u32; assert_eq!(expected_num, actual_num); } assert_eq!( - ::HrmpCloseChannelRequests::iter() - .map(|(k, _)| k) - .collect::>(), - ::HrmpCloseChannelRequestsList::get() - .into_iter() - .collect::>(), + HrmpCloseChannelRequests::::iter().map(|(k, _)| k).collect::>(), + HrmpCloseChannelRequestsList::::get().into_iter().collect::>(), ); // A HRMP watermark can be None for an onboarded parachain. However, an offboarded parachain // cannot have an HRMP watermark: it should've been cleanup. assert_contains_only_onboarded( - ::HrmpWatermarks::iter().map(|(k, _)| k).collect::>(), + HrmpWatermarks::::iter().map(|(k, _)| k).collect::>(), "HRMP watermarks should contain only onboarded paras", ); // An entry in `HrmpChannels` indicates that the channel is open. Only open channels can // have contents. - for (non_empty_channel, contents) in ::HrmpChannelContents::iter() { - assert!(::HrmpChannels::contains_key(&non_empty_channel)); + for (non_empty_channel, contents) in HrmpChannelContents::::iter() { + assert!(HrmpChannels::::contains_key(&non_empty_channel)); // pedantic check: there should be no empty vectors in storage, those should be modeled // by a removed kv pair. @@ -1510,7 +1499,7 @@ impl Pallet { // Senders and recipients must be onboarded. Otherwise, all channels associated with them // are removed. assert_contains_only_onboarded( - ::HrmpChannels::iter() + HrmpChannels::::iter() .flat_map(|(k, _)| vec![k.sender, k.recipient]) .collect::>(), "senders and recipients in all channels should be onboarded", @@ -1535,30 +1524,30 @@ impl Pallet { // (b, z) (b, z) // // and then that we compare that to the channel list in the `HrmpChannels`. - let channel_set_derived_from_ingress = ::HrmpIngressChannelsIndex::iter() + let channel_set_derived_from_ingress = HrmpIngressChannelsIndex::::iter() .flat_map(|(p, v)| v.into_iter().map(|i| (i, p)).collect::>()) .collect::>(); - let channel_set_derived_from_egress = ::HrmpEgressChannelsIndex::iter() + let channel_set_derived_from_egress = HrmpEgressChannelsIndex::::iter() .flat_map(|(p, v)| v.into_iter().map(|e| (p, e)).collect::>()) .collect::>(); - let channel_set_ground_truth = ::HrmpChannels::iter() + let channel_set_ground_truth = HrmpChannels::::iter() .map(|(k, _)| (k.sender, k.recipient)) .collect::>(); assert_eq!(channel_set_derived_from_ingress, channel_set_derived_from_egress); assert_eq!(channel_set_derived_from_egress, channel_set_ground_truth); - ::HrmpIngressChannelsIndex::iter() + HrmpIngressChannelsIndex::::iter() .map(|(_, v)| v) .for_each(|v| assert_is_sorted(&v, "HrmpIngressChannelsIndex")); - ::HrmpEgressChannelsIndex::iter() + HrmpEgressChannelsIndex::::iter() .map(|(_, v)| v) .for_each(|v| assert_is_sorted(&v, "HrmpIngressChannelsIndex")); assert_contains_only_onboarded( - ::HrmpChannelDigests::iter().map(|(k, _)| k).collect::>(), + HrmpChannelDigests::::iter().map(|(k, _)| k).collect::>(), "HRMP channel digests should contain only onboarded paras", ); - for (_digest_for_para, digest) in ::HrmpChannelDigests::iter() { + for (_digest_for_para, digest) in HrmpChannelDigests::::iter() { // Assert that items are in **strictly** ascending order. The strictness also implies // there are no duplicates. assert!(digest.windows(2).all(|xs| xs[0].0 < xs[1].0)); diff --git a/runtime/parachains/src/hrmp/tests.rs b/runtime/parachains/src/hrmp/tests.rs index 85cdc459ffb9..33737126dbf5 100644 --- a/runtime/parachains/src/hrmp/tests.rs +++ b/runtime/parachains/src/hrmp/tests.rs @@ -23,7 +23,7 @@ use crate::{ paras::ParaKind, }; use frame_support::{assert_noop, assert_ok, traits::Currency as _}; -use primitives::v2::BlockNumber; +use primitives::BlockNumber; use std::collections::BTreeMap; fn run_to_block(to: BlockNumber, new_session: Option>) { @@ -150,7 +150,7 @@ fn deregister_parachain(id: ParaId) { } fn channel_exists(sender: ParaId, recipient: ParaId) -> bool { - ::HrmpChannels::get(&HrmpChannelId { sender, recipient }).is_some() + HrmpChannels::::get(&HrmpChannelId { sender, recipient }).is_some() } #[test] @@ -278,8 +278,10 @@ fn send_recv_messages() { // A sends a message to B run_to_block(6, Some(vec![6])); assert!(channel_exists(para_a, para_b)); - let msgs = - vec![OutboundHrmpMessage { recipient: para_b, data: b"this is an emergency".to_vec() }]; + let msgs: HorizontalMessages = + vec![OutboundHrmpMessage { recipient: para_b, data: b"this is an emergency".to_vec() }] + .try_into() + .unwrap(); let config = Configuration::config(); assert!(Hrmp::check_outbound_hrmp(&config, para_a, &msgs).is_ok()); let _ = Hrmp::queue_outbound_hrmp(para_a, msgs); @@ -313,13 +315,17 @@ fn hrmp_mqc_head_fixture() { run_to_block(3, Some(vec![3])); let _ = Hrmp::queue_outbound_hrmp( para_a, - vec![OutboundHrmpMessage { recipient: para_b, data: vec![1, 2, 3] }], + vec![OutboundHrmpMessage { recipient: para_b, data: vec![1, 2, 3] }] + .try_into() + .unwrap(), ); run_to_block(4, None); let _ = Hrmp::queue_outbound_hrmp( para_a, - vec![OutboundHrmpMessage { recipient: para_b, data: vec![4, 5, 6] }], + vec![OutboundHrmpMessage { recipient: para_b, data: vec![4, 5, 6] }] + .try_into() + .unwrap(), ); assert_eq!( @@ -381,7 +387,10 @@ fn check_sent_messages() { run_to_block(6, Some(vec![6])); assert!(Paras::is_valid_para(para_a)); - let msgs = vec![OutboundHrmpMessage { recipient: para_b, data: b"knock".to_vec() }]; + let msgs: HorizontalMessages = + vec![OutboundHrmpMessage { recipient: para_b, data: b"knock".to_vec() }] + .try_into() + .unwrap(); let config = Configuration::config(); assert!(Hrmp::check_outbound_hrmp(&config, para_a, &msgs).is_ok()); let _ = Hrmp::queue_outbound_hrmp(para_a, msgs.clone()); @@ -418,7 +427,7 @@ fn check_sent_messages() { #[test] fn verify_externally_accessible() { - use primitives::v2::{well_known_keys, AbridgedHrmpChannel}; + use primitives::{well_known_keys, AbridgedHrmpChannel}; let para_a = 20.into(); let para_b = 21.into(); diff --git a/runtime/parachains/src/inclusion/mod.rs b/runtime/parachains/src/inclusion/mod.rs index 1df6c141e9df..d73dac903128 100644 --- a/runtime/parachains/src/inclusion/mod.rs +++ b/runtime/parachains/src/inclusion/mod.rs @@ -27,7 +27,7 @@ use crate::{ use bitvec::{order::Lsb0 as BitOrderLsb0, vec::BitVec}; use frame_support::pallet_prelude::*; use parity_scale_codec::{Decode, Encode}; -use primitives::v2::{ +use primitives::{ AvailabilityBitfield, BackedCandidate, CandidateCommitments, CandidateDescriptor, CandidateHash, CandidateReceipt, CommittedCandidateReceipt, CoreIndex, GroupIndex, Hash, HeadData, Id as ParaId, SigningContext, UncheckedSignedAvailabilityBitfields, ValidatorId, @@ -184,7 +184,6 @@ pub mod pallet { use super::*; #[pallet::pallet] - #[pallet::generate_store(pub(super) trait Store)] #[pallet::without_storage_info] pub struct Pallet(_); @@ -574,7 +573,7 @@ impl Pallet { // check the signatures in the backing and that it is a majority. { - let maybe_amount_validated = primitives::v2::check_candidate_backing( + let maybe_amount_validated = primitives::check_candidate_backing( &backed_candidate, &signing_context, group_vals.len(), @@ -691,7 +690,7 @@ impl Pallet { /// Run the acceptance criteria checks on the given candidate commitments. pub(crate) fn check_validation_outputs_for_runtime_api( para_id: ParaId, - validation_outputs: primitives::v2::CandidateCommitments, + validation_outputs: primitives::CandidateCommitments, ) -> bool { // This function is meant to be called from the runtime APIs against the relay-parent, hence // `relay_parent_number` is equal to `now`. @@ -1037,11 +1036,11 @@ impl CandidateCheckContext { &self, para_id: ParaId, head_data: &HeadData, - new_validation_code: &Option, + new_validation_code: &Option, processed_downward_messages: u32, - upward_messages: &[primitives::v2::UpwardMessage], + upward_messages: &[primitives::UpwardMessage], hrmp_watermark: T::BlockNumber, - horizontal_messages: &[primitives::v2::OutboundHrmpMessage], + horizontal_messages: &[primitives::OutboundHrmpMessage], ) -> Result<(), AcceptanceCheckErr> { ensure!( head_data.0.len() <= self.config.max_head_data_size as _, diff --git a/runtime/parachains/src/inclusion/tests.rs b/runtime/parachains/src/inclusion/tests.rs index 00369fb67e75..818058d460f8 100644 --- a/runtime/parachains/src/inclusion/tests.rs +++ b/runtime/parachains/src/inclusion/tests.rs @@ -30,7 +30,7 @@ use assert_matches::assert_matches; use frame_support::assert_noop; use futures::executor::block_on; use keyring::Sr25519Keyring; -use primitives::v2::{ +use primitives::{ BlockNumber, CandidateCommitments, CandidateDescriptor, CollatorId, CompactStatement as Statement, Hash, SignedAvailabilityBitfield, SignedStatement, UncheckedSignedAvailabilityBitfield, ValidationCode, ValidatorId, ValidityAttestation, @@ -91,7 +91,7 @@ pub(crate) fn collator_sign_candidate( ) { candidate.descriptor.collator = collator.public().into(); - let payload = primitives::v2::collator_signature_payload( + let payload = primitives::collator_signature_payload( &candidate.descriptor.relay_parent, &candidate.descriptor.para_id, &candidate.descriptor.persisted_validation_data_hash, @@ -146,7 +146,7 @@ pub(crate) async fn back_candidate( let backed = BackedCandidate { candidate, validity_votes, validator_indices }; let successfully_backed = - primitives::v2::check_candidate_backing(&backed, signing_context, group.len(), |i| { + primitives::check_candidate_backing(&backed, signing_context, group.len(), |i| { Some(validators[group[i].0 as usize].public().into()) }) .ok() diff --git a/runtime/parachains/src/initializer.rs b/runtime/parachains/src/initializer.rs index ef00e5b884cc..8f59b687d97f 100644 --- a/runtime/parachains/src/initializer.rs +++ b/runtime/parachains/src/initializer.rs @@ -30,7 +30,7 @@ use frame_support::{ }; use frame_system::limits::BlockWeights; use parity_scale_codec::{Decode, Encode}; -use primitives::v2::{BlockNumber, ConsensusLog, SessionIndex, ValidatorId}; +use primitives::{BlockNumber, ConsensusLog, SessionIndex, ValidatorId}; use scale_info::TypeInfo; use sp_std::prelude::*; @@ -99,7 +99,6 @@ pub mod pallet { use frame_system::pallet_prelude::*; #[pallet::pallet] - #[pallet::generate_store(pub(super) trait Store)] #[pallet::without_storage_info] pub struct Pallet(_); @@ -210,6 +209,7 @@ pub mod pallet { /// Issue a signal to the consensus engine to forcibly act as though all parachain /// blocks in all relay chain blocks up to and including the given number in the current /// chain are valid and should be finalized. + #[pallet::call_index(0)] #[pallet::weight(( ::WeightInfo::force_approve( frame_system::Pallet::::digest().logs.len() as u32, diff --git a/runtime/parachains/src/initializer/benchmarking.rs b/runtime/parachains/src/initializer/benchmarking.rs index 7c6a633790c2..ff9667e603d6 100644 --- a/runtime/parachains/src/initializer/benchmarking.rs +++ b/runtime/parachains/src/initializer/benchmarking.rs @@ -17,7 +17,7 @@ use super::*; use frame_benchmarking::benchmarks; use frame_system::RawOrigin; -use primitives::v2::ConsensusLog; +use primitives::ConsensusLog; use sp_runtime::DigestItem; // Random large number for the digest diff --git a/runtime/parachains/src/initializer/tests.rs b/runtime/parachains/src/initializer/tests.rs index d1d884200527..9b5b38446e54 100644 --- a/runtime/parachains/src/initializer/tests.rs +++ b/runtime/parachains/src/initializer/tests.rs @@ -17,8 +17,9 @@ use super::*; use crate::mock::{ new_test_ext, Configuration, Dmp, Initializer, MockGenesisConfig, Paras, SessionInfo, System, + Test, }; -use primitives::v2::{HeadData, Id as ParaId}; +use primitives::{HeadData, Id as ParaId}; use test_helpers::dummy_validation_code; use crate::paras::ParaKind; @@ -32,7 +33,7 @@ fn session_0_is_instantly_applied() { new_test_ext(Default::default()).execute_with(|| { Initializer::on_new_session(false, 0, Vec::new().into_iter(), Some(Vec::new().into_iter())); - let v = ::BufferedSessionChanges::get(); + let v = BufferedSessionChanges::::get(); assert!(v.is_empty()); assert_eq!(SessionInfo::earliest_stored_session(), 0); @@ -48,7 +49,7 @@ fn session_change_before_initialize_is_still_buffered_after() { let now = System::block_number(); Initializer::on_initialize(now); - let v = ::BufferedSessionChanges::get(); + let v = BufferedSessionChanges::::get(); assert_eq!(v.len(), 1); }); } @@ -61,7 +62,7 @@ fn session_change_applied_on_finalize() { Initializer::on_finalize(1); - assert!(::BufferedSessionChanges::get().is_empty()); + assert!(BufferedSessionChanges::::get().is_empty()); }); } @@ -70,7 +71,7 @@ fn sets_flag_on_initialize() { new_test_ext(Default::default()).execute_with(|| { Initializer::on_initialize(1); - assert!(::HasInitialized::get().is_some()); + assert!(HasInitialized::::get().is_some()); }) } @@ -80,7 +81,7 @@ fn clears_flag_on_finalize() { Initializer::on_initialize(1); Initializer::on_finalize(1); - assert!(::HasInitialized::get().is_none()); + assert!(HasInitialized::::get().is_none()); }) } diff --git a/runtime/parachains/src/lib.rs b/runtime/parachains/src/lib.rs index 3d73a4049ed4..c45f0d446015 100644 --- a/runtime/parachains/src/lib.rs +++ b/runtime/parachains/src/lib.rs @@ -50,7 +50,7 @@ mod mock; pub use origin::{ensure_parachain, Origin}; pub use paras::ParaLifecycle; -use primitives::v2::{HeadData, Id as ParaId, ValidationCode}; +use primitives::{HeadData, Id as ParaId, ValidationCode}; use sp_runtime::DispatchResult; /// Schedule a para to be initialized at the start of the next session with the given genesis data. @@ -66,7 +66,7 @@ pub fn schedule_para_initialize( /// Schedule a para to be cleaned up at the start of the next session. /// /// See [`paras::Pallet::schedule_para_cleanup`] for more details. -pub fn schedule_para_cleanup(id: primitives::v2::Id) -> Result<(), ()> { +pub fn schedule_para_cleanup(id: primitives::Id) -> Result<(), ()> { >::schedule_para_cleanup(id).map_err(|_| ()) } diff --git a/runtime/parachains/src/metrics.rs b/runtime/parachains/src/metrics.rs index 1368bdbfbbf4..66fde11b8513 100644 --- a/runtime/parachains/src/metrics.rs +++ b/runtime/parachains/src/metrics.rs @@ -17,7 +17,7 @@ //! Runtime declaration of the parachain metrics. use polkadot_runtime_metrics::{Counter, CounterVec}; -use primitives::v2::metric_definitions::{ +use primitives::metric_definitions::{ PARACHAIN_CREATE_INHERENT_BITFIELDS_SIGNATURE_CHECKS, PARACHAIN_INHERENT_DATA_BITFIELDS_PROCESSED, PARACHAIN_INHERENT_DATA_CANDIDATES_PROCESSED, PARACHAIN_INHERENT_DATA_DISPUTE_SETS_INCLUDED, PARACHAIN_INHERENT_DATA_DISPUTE_SETS_PROCESSED, diff --git a/runtime/parachains/src/mock.rs b/runtime/parachains/src/mock.rs index 3e6ed79a77c2..501e8b1a3079 100644 --- a/runtime/parachains/src/mock.rs +++ b/runtime/parachains/src/mock.rs @@ -25,12 +25,12 @@ use crate::{ use frame_support::{ parameter_types, - traits::{GenesisBuild, KeyOwnerProofSystem, ValidatorSet, ValidatorSetWithIdentification}, + traits::{GenesisBuild, ValidatorSet, ValidatorSetWithIdentification}, weights::Weight, }; use frame_support_test::TestRandomness; use parity_scale_codec::Decode; -use primitives::v2::{ +use primitives::{ AuthorityDiscoveryId, Balance, BlockNumber, CandidateHash, Header, Moment, SessionIndex, UpwardMessage, ValidatorIndex, }; @@ -39,7 +39,7 @@ use sp_io::TestExternalities; use sp_runtime::{ traits::{BlakeTwo256, IdentityLookup}, transaction_validity::TransactionPriority, - KeyTypeId, Permill, + Permill, }; use std::{cell::RefCell, collections::HashMap}; @@ -83,7 +83,7 @@ parameter_types! { pub const BlockHashCount: u32 = 250; pub BlockWeights: frame_system::limits::BlockWeights = frame_system::limits::BlockWeights::simple_max( - Weight::from_ref_time(4 * 1024 * 1024).set_proof_size(u64::MAX), + Weight::from_parts(4 * 1024 * 1024, u64::MAX), ); } @@ -148,23 +148,13 @@ impl pallet_babe::Config for Test { type DisabledValidators = (); - type KeyOwnerProof = >::Proof; - - type KeyOwnerIdentification = >::IdentificationTuple; - - type KeyOwnerProofSystem = (); - - type HandleEquivocation = (); - type WeightInfo = (); type MaxAuthorities = MaxAuthorities; + + type KeyOwnerProof = sp_core::Void; + + type EquivocationReportSystem = (); } parameter_types! { @@ -253,6 +243,7 @@ thread_local! { pub static REWARD_VALIDATORS: RefCell)>> = RefCell::new(Vec::new()); pub static PUNISH_VALIDATORS_FOR: RefCell)>> = RefCell::new(Vec::new()); pub static PUNISH_VALIDATORS_AGAINST: RefCell)>> = RefCell::new(Vec::new()); + pub static PUNISH_BACKERS_FOR: RefCell)>> = RefCell::new(Vec::new()); } impl crate::disputes::RewardValidators for Test { @@ -269,14 +260,18 @@ impl crate::disputes::SlashingHandler for Test { session: SessionIndex, _: CandidateHash, losers: impl IntoIterator, + backers: impl IntoIterator, ) { - PUNISH_VALIDATORS_FOR.with(|r| r.borrow_mut().push((session, losers.into_iter().collect()))) + PUNISH_VALIDATORS_FOR + .with(|r| r.borrow_mut().push((session, losers.into_iter().collect()))); + PUNISH_BACKERS_FOR.with(|r| r.borrow_mut().push((session, backers.into_iter().collect()))); } fn punish_against_valid( session: SessionIndex, _: CandidateHash, losers: impl IntoIterator, + _backers: impl IntoIterator, ) { PUNISH_VALIDATORS_AGAINST .with(|r| r.borrow_mut().push((session, losers.into_iter().collect()))) @@ -394,7 +389,7 @@ impl UmpSink for TestUmpSink { max_weight: Weight, ) -> Result { let weight = match u32::decode(&mut &actual_msg[..]) { - Ok(w) => Weight::from_ref_time(w as u64), + Ok(w) => Weight::from_parts(w as u64, w as u64), Err(_) => return Ok(Weight::zero()), // same as the real `UmpSink` }; if weight.any_gt(max_weight) { diff --git a/runtime/parachains/src/origin.rs b/runtime/parachains/src/origin.rs index 282afca6aef0..cbb662c6eef3 100644 --- a/runtime/parachains/src/origin.rs +++ b/runtime/parachains/src/origin.rs @@ -16,7 +16,7 @@ //! Declaration of the parachain specific origin and a pallet that hosts it. -use primitives::v2::Id as ParaId; +use primitives::Id as ParaId; use sp_runtime::traits::BadOrigin; use sp_std::result; @@ -46,7 +46,6 @@ pub mod pallet { use frame_support::pallet_prelude::*; #[pallet::pallet] - #[pallet::generate_store(pub(super) trait Store)] pub struct Pallet(_); #[pallet::config] diff --git a/runtime/parachains/src/paras/benchmarking.rs b/runtime/parachains/src/paras/benchmarking.rs index 9970937f4558..0d961c94bfff 100644 --- a/runtime/parachains/src/paras/benchmarking.rs +++ b/runtime/parachains/src/paras/benchmarking.rs @@ -18,7 +18,7 @@ use super::*; use crate::configuration::HostConfiguration; use frame_benchmarking::benchmarks; use frame_system::RawOrigin; -use primitives::v2::{HeadData, Id as ParaId, ValidationCode, MAX_CODE_SIZE, MAX_HEAD_DATA_SIZE}; +use primitives::{HeadData, Id as ParaId, ValidationCode, MAX_CODE_SIZE, MAX_HEAD_DATA_SIZE}; use sp_runtime::traits::{One, Saturating}; mod pvf_check; @@ -48,7 +48,7 @@ fn generate_disordered_pruning() { needs_pruning.push((id, block_number)); } - as Store>::PastCodePruning::put(needs_pruning); + PastCodePruning::::put(needs_pruning); } pub(crate) fn generate_disordered_upgrades() { @@ -62,8 +62,8 @@ pub(crate) fn generate_disordered_upgrades() { cooldowns.push((id, block_number)); } - as Store>::UpcomingUpgrades::put(upgrades); - as Store>::UpgradeCooldowns::put(cooldowns); + UpcomingUpgrades::::put(upgrades); + UpgradeCooldowns::::put(cooldowns); } fn generate_disordered_actions_queue() { @@ -75,7 +75,7 @@ fn generate_disordered_actions_queue() { queue.push(id); } - as Store>::ActionsQueue::mutate(next_session, |v| { + ActionsQueue::::mutate(next_session, |v| { *v = queue; }); } @@ -85,7 +85,7 @@ benchmarks! { let c in 1 .. MAX_CODE_SIZE; let new_code = ValidationCode(vec![0; c as usize]); let para_id = ParaId::from(c as u32); - as Store>::CurrentCodeHash::insert(¶_id, new_code.hash()); + CurrentCodeHash::::insert(¶_id, new_code.hash()); generate_disordered_pruning::(); }: _(RawOrigin::Root, para_id, new_code) verify { @@ -114,7 +114,7 @@ benchmarks! { let para_id = ParaId::from(1000); let new_head = HeadData(vec![0; s as usize]); let old_code_hash = ValidationCode(vec![0]).hash(); - as Store>::CurrentCodeHash::insert(¶_id, old_code_hash); + CurrentCodeHash::::insert(¶_id, old_code_hash); // schedule an expired code upgrade for this `para_id` so that force_note_new_head would use // the worst possible code path let expired = frame_system::Pallet::::block_number().saturating_sub(One::one()); diff --git a/runtime/parachains/src/paras/benchmarking/pvf_check.rs b/runtime/parachains/src/paras/benchmarking/pvf_check.rs index e1400ac4297d..a16c016531ee 100644 --- a/runtime/parachains/src/paras/benchmarking/pvf_check.rs +++ b/runtime/parachains/src/paras/benchmarking/pvf_check.rs @@ -18,7 +18,7 @@ use crate::{configuration, paras::*, shared::Pallet as ParasShared}; use frame_system::RawOrigin; -use primitives::v2::{HeadData, Id as ParaId, ValidationCode, ValidatorId, ValidatorIndex}; +use primitives::{HeadData, Id as ParaId, ValidationCode, ValidatorId, ValidatorIndex}; use sp_application_crypto::RuntimeAppPublic; // Constants for the benchmarking @@ -170,7 +170,8 @@ where } /// Generates a list of votes combined with signatures for the active validator set. The number of -/// votes is equal to the minimum number of votes required to reach the supermajority. +/// votes is equal to the minimum number of votes required to reach the threshold for either accept +/// or reject. fn generate_statements( vote_outcome: VoteOutcome, ) -> impl Iterator @@ -179,7 +180,11 @@ where { let validators = ParasShared::::active_validator_keys(); - let required_votes = primitives::v2::supermajority_threshold(validators.len()); + let accept_threshold = primitives::supermajority_threshold(validators.len()); + let required_votes = match vote_outcome { + VoteOutcome::Accept => accept_threshold, + VoteOutcome::Reject => validators.len() - accept_threshold, + }; (0..required_votes).map(move |validator_index| { let stmt = PvfCheckStatement { accept: vote_outcome == VoteOutcome::Accept, diff --git a/runtime/parachains/src/paras/mod.rs b/runtime/parachains/src/paras/mod.rs index c4fadcf5642b..420ed3e6409e 100644 --- a/runtime/parachains/src/paras/mod.rs +++ b/runtime/parachains/src/paras/mod.rs @@ -73,13 +73,14 @@ //! //! # PVF Pre-checking //! -//! As was mentioned above, a brand new validation code should go through a process of approval. -//! As part of this process, validators from the active set will take the validation code and -//! check if it is malicious. Once they did that and have their judgement, either accept or reject, -//! they issue a statement in a form of an unsigned extrinsic. This extrinsic is processed by this -//! pallet. Once supermajority is gained for accept, then the process that initiated the check -//! is resumed (as mentioned before this can be either upgrading of validation code or onboarding). -//! If supermajority is gained for reject, then the process is canceled. +//! As was mentioned above, a brand new validation code should go through a process of approval. As +//! part of this process, validators from the active set will take the validation code and check if +//! it is malicious. Once they did that and have their judgement, either accept or reject, they +//! issue a statement in a form of an unsigned extrinsic. This extrinsic is processed by this +//! pallet. Once supermajority is gained for accept, then the process that initiated the check is +//! resumed (as mentioned before this can be either upgrading of validation code or onboarding). If +//! getting a supermajority becomes impossible (>1/3 of validators have already voted against), then +//! we reject. //! //! Below is a state diagram that depicts states of a single PVF pre-checking vote. //! @@ -92,8 +93,8 @@ //! │ │ │ //! │ ┌───────┐ //! │ │ │ -//! └─▶│ init │────supermajority ┌──────────┐ -//! │ │ against │ │ +//! └─▶│ init │──── >1/3 against ┌──────────┐ +//! │ │ │ │ │ //! └───────┘ └──────────▶│ rejected │ //! ▲ │ │ │ //! │ │ session └──────────┘ @@ -111,7 +112,7 @@ use bitvec::{order::Lsb0 as BitOrderLsb0, vec::BitVec}; use frame_support::{pallet_prelude::*, traits::EstimateNextSessionRotation}; use frame_system::pallet_prelude::*; use parity_scale_codec::{Decode, Encode}; -use primitives::v2::{ +use primitives::{ ConsensusLog, HeadData, Id as ParaId, PvfCheckStatement, SessionIndex, UpgradeGoAhead, UpgradeRestriction, ValidationCode, ValidationCodeHash, ValidatorSignature, }; @@ -121,7 +122,7 @@ use sp_runtime::{ traits::{AppVerify, One, Saturating}, DispatchResult, SaturatedConversion, }; -use sp_std::{cmp, mem, prelude::*}; +use sp_std::{cmp, collections::btree_set::BTreeSet, mem, prelude::*}; #[cfg(feature = "std")] use serde::{Deserialize, Serialize}; @@ -158,7 +159,7 @@ pub struct ReplacementTimes { #[cfg_attr(test, derive(Debug, Clone, PartialEq))] pub struct ParaPastCodeMeta { /// Block numbers where the code was expected to be replaced and where the code - /// was actually replaced, respectively. The first is used to do accurate lookups + /// was actually replaced, respectively. The first is used to do accurate look-ups /// of historic code in historic contexts, whereas the second is used to do /// pruning on an accurate timeframe. These can be used as indices /// into the `PastCodeHash` map along with the `ParaId` to fetch the code itself. @@ -452,12 +453,14 @@ impl PvfCheckActiveVoteState { /// Returns `None` if the quorum is not reached, or the direction of the decision. fn quorum(&self, n_validators: usize) -> Option { - let q_threshold = primitives::v2::supermajority_threshold(n_validators); - // NOTE: counting the reject votes is deliberately placed first. This is to err on the safe. - if self.votes_reject.count_ones() >= q_threshold { - Some(PvfCheckOutcome::Rejected) - } else if self.votes_accept.count_ones() >= q_threshold { + let accept_threshold = primitives::supermajority_threshold(n_validators); + // At this threshold, a supermajority is no longer possible, so we reject. + let reject_threshold = n_validators - accept_threshold; + + if self.votes_accept.count_ones() >= accept_threshold { Some(PvfCheckOutcome::Accepted) + } else if self.votes_reject.count_ones() > reject_threshold { + Some(PvfCheckOutcome::Rejected) } else { None } @@ -517,7 +520,7 @@ impl WeightInfo for TestWeightInfo { } fn include_pvf_check_statement() -> Weight { // This special value is to distinguish from the finalizing variants above in tests. - Weight::MAX - Weight::from_ref_time(1) + Weight::MAX - Weight::from_parts(1, 1) } } @@ -530,7 +533,6 @@ pub mod pallet { }; #[pallet::pallet] - #[pallet::generate_store(pub(super) trait Store)] #[pallet::without_storage_info] pub struct Pallet(_); @@ -788,6 +790,7 @@ pub mod pallet { #[pallet::call] impl Pallet { /// Set the storage for the parachain validation code immediately. + #[pallet::call_index(0)] #[pallet::weight(::WeightInfo::force_set_current_code(new_code.0.len() as u32))] pub fn force_set_current_code( origin: OriginFor, @@ -795,10 +798,10 @@ pub mod pallet { new_code: ValidationCode, ) -> DispatchResult { ensure_root(origin)?; - let maybe_prior_code_hash = ::CurrentCodeHash::get(¶); + let maybe_prior_code_hash = CurrentCodeHash::::get(¶); let new_code_hash = new_code.hash(); Self::increase_code_ref(&new_code_hash, &new_code); - ::CurrentCodeHash::insert(¶, new_code_hash); + CurrentCodeHash::::insert(¶, new_code_hash); let now = frame_system::Pallet::::block_number(); if let Some(prior_code_hash) = maybe_prior_code_hash { @@ -815,6 +818,7 @@ pub mod pallet { } /// Set the storage for the current parachain head data immediately. + #[pallet::call_index(1)] #[pallet::weight(::WeightInfo::force_set_current_head(new_head.0.len() as u32))] pub fn force_set_current_head( origin: OriginFor, @@ -827,6 +831,7 @@ pub mod pallet { } /// Schedule an upgrade as if it was scheduled in the given relay parent block. + #[pallet::call_index(2)] #[pallet::weight(::WeightInfo::force_schedule_code_upgrade(new_code.0.len() as u32))] pub fn force_schedule_code_upgrade( origin: OriginFor, @@ -842,6 +847,7 @@ pub mod pallet { } /// Note a new block head for para within the context of the current block. + #[pallet::call_index(3)] #[pallet::weight(::WeightInfo::force_note_new_head(new_head.0.len() as u32))] pub fn force_note_new_head( origin: OriginFor, @@ -858,6 +864,7 @@ pub mod pallet { /// Put a parachain directly into the next session's action queue. /// We can't queue it any sooner than this without going into the /// initializer... + #[pallet::call_index(4)] #[pallet::weight(::WeightInfo::force_queue_action())] pub fn force_queue_action(origin: OriginFor, para: ParaId) -> DispatchResult { ensure_root(origin)?; @@ -884,6 +891,7 @@ pub mod pallet { /// /// This function is mainly meant to be used for upgrading parachains that do not follow /// the go-ahead signal while the PVF pre-checking feature is enabled. + #[pallet::call_index(5)] #[pallet::weight(::WeightInfo::add_trusted_validation_code(validation_code.0.len() as u32))] pub fn add_trusted_validation_code( origin: OriginFor, @@ -892,7 +900,7 @@ pub mod pallet { ensure_root(origin)?; let code_hash = validation_code.hash(); - if let Some(vote) = ::PvfActiveVoteMap::get(&code_hash) { + if let Some(vote) = PvfActiveVoteMap::::get(&code_hash) { // Remove the existing vote. PvfActiveVoteMap::::remove(&code_hash); PvfActiveVoteList::::mutate(|l| { @@ -912,7 +920,7 @@ pub mod pallet { return Ok(()) } - if ::CodeByHash::contains_key(&code_hash) { + if CodeByHash::::contains_key(&code_hash) { // There is no vote, but the code exists. Nothing to do here. return Ok(()) } @@ -922,7 +930,7 @@ pub mod pallet { // // NOTE That we do not use `increase_code_ref` here, because the code is not yet used // by any parachain. - ::CodeByHash::insert(code_hash, &validation_code); + CodeByHash::::insert(code_hash, &validation_code); Ok(()) } @@ -932,20 +940,22 @@ pub mod pallet { /// This is better than removing the storage directly, because it will not remove the code /// that was suddenly got used by some parachain while this dispatchable was pending /// dispatching. + #[pallet::call_index(6)] #[pallet::weight(::WeightInfo::poke_unused_validation_code())] pub fn poke_unused_validation_code( origin: OriginFor, validation_code_hash: ValidationCodeHash, ) -> DispatchResult { ensure_root(origin)?; - if ::CodeByHashRefs::get(&validation_code_hash) == 0 { - ::CodeByHash::remove(&validation_code_hash); + if CodeByHashRefs::::get(&validation_code_hash) == 0 { + CodeByHash::::remove(&validation_code_hash); } Ok(()) } /// Includes a statement for a PVF pre-checking vote. Potentially, finalizes the vote and /// enacts the results if that was the last vote before achieving the supermajority. + #[pallet::call_index(7)] #[pallet::weight( ::WeightInfo::include_pvf_check_statement_finalize_upgrade_accept() .max(::WeightInfo::include_pvf_check_statement_finalize_upgrade_reject()) @@ -1003,7 +1013,7 @@ pub mod pallet { } if let Some(outcome) = active_vote.quorum(validators.len()) { - // The supermajority quorum has been achieved. + // The quorum has been achieved. // // Remove the PVF vote from the active map and finalize the PVF checking according // to the outcome. @@ -1140,7 +1150,7 @@ impl Pallet { /// Set the current head of a parachain. pub(crate) fn set_current_head(para: ParaId, new_head: HeadData) { - ::Heads::insert(¶, new_head); + Heads::::insert(¶, new_head); Self::deposit_event(Event::CurrentHeadUpdated(para)); } @@ -1201,7 +1211,7 @@ impl Pallet { None | Some(ParaLifecycle::Parathread) | Some(ParaLifecycle::Parachain) => { /* Nothing to do... */ }, Some(ParaLifecycle::Onboarding) => { - if let Some(genesis_data) = ::UpcomingParasGenesis::take(¶) { + if let Some(genesis_data) = UpcomingParasGenesis::::take(¶) { Self::initialize_para_now(&mut parachains, para, &genesis_data); } }, @@ -1220,17 +1230,17 @@ impl Pallet { Some(ParaLifecycle::OffboardingParathread) => { parachains.remove(para); - ::Heads::remove(¶); - ::FutureCodeUpgrades::remove(¶); - ::UpgradeGoAheadSignal::remove(¶); - ::UpgradeRestrictionSignal::remove(¶); + Heads::::remove(¶); + FutureCodeUpgrades::::remove(¶); + UpgradeGoAheadSignal::::remove(¶); + UpgradeRestrictionSignal::::remove(¶); ParaLifecycles::::remove(¶); - let removed_future_code_hash = ::FutureCodeHash::take(¶); + let removed_future_code_hash = FutureCodeHash::::take(¶); if let Some(removed_future_code_hash) = removed_future_code_hash { Self::decrease_code_ref(&removed_future_code_hash); } - let removed_code_hash = ::CurrentCodeHash::take(¶); + let removed_code_hash = CurrentCodeHash::::take(¶); if let Some(removed_code_hash) = removed_code_hash { Self::note_past_code(para, now, now, removed_code_hash); } @@ -1247,13 +1257,13 @@ impl Pallet { // // NOTE both of those iterates over the list and the outgoing. We do not expect either // of these to be large. Thus should be fine. - ::UpcomingUpgrades::mutate(|upcoming_upgrades| { + UpcomingUpgrades::::mutate(|upcoming_upgrades| { *upcoming_upgrades = mem::take(upcoming_upgrades) .into_iter() .filter(|&(ref para, _)| !outgoing.contains(para)) .collect(); }); - ::UpgradeCooldowns::mutate(|upgrade_cooldowns| { + UpgradeCooldowns::::mutate(|upgrade_cooldowns| { *upgrade_cooldowns = mem::take(upgrade_cooldowns) .into_iter() .filter(|&(ref para, _)| !outgoing.contains(para)) @@ -1279,15 +1289,15 @@ impl Pallet { now: T::BlockNumber, old_code_hash: ValidationCodeHash, ) -> Weight { - ::PastCodeMeta::mutate(&id, |past_meta| { + PastCodeMeta::::mutate(&id, |past_meta| { past_meta.note_replacement(at, now); }); - ::PastCodeHash::insert(&(id, at), old_code_hash); + PastCodeHash::::insert(&(id, at), old_code_hash); // Schedule pruning for this past-code to be removed as soon as it // exits the slashing window. - ::PastCodePruning::mutate(|pruning| { + PastCodePruning::::mutate(|pruning| { let insert_idx = pruning.binary_search_by_key(&now, |&(_, b)| b).unwrap_or_else(|idx| idx); pruning.insert(insert_idx, (id, now)); @@ -1309,8 +1319,8 @@ impl Pallet { // The height of any changes we no longer should keep around. let pruning_height = now - (code_retention_period + One::one()); - let pruning_tasks_done = ::PastCodePruning::mutate( - |pruning_tasks: &mut Vec<(_, T::BlockNumber)>| { + let pruning_tasks_done = + PastCodePruning::::mutate(|pruning_tasks: &mut Vec<(_, T::BlockNumber)>| { let (pruning_tasks_done, pruning_tasks_to_do) = { // find all past code that has just exited the pruning window. let up_to_idx = @@ -1319,10 +1329,10 @@ impl Pallet { }; for (para_id, _) in pruning_tasks_to_do { - let full_deactivate = ::PastCodeMeta::mutate(¶_id, |meta| { + let full_deactivate = PastCodeMeta::::mutate(¶_id, |meta| { for pruned_repl_at in meta.prune_up_to(pruning_height) { let removed_code_hash = - ::PastCodeHash::take(&(para_id, pruned_repl_at)); + PastCodeHash::::take(&(para_id, pruned_repl_at)); if let Some(removed_code_hash) = removed_code_hash { Self::decrease_code_ref(&removed_code_hash); @@ -1341,13 +1351,12 @@ impl Pallet { // This parachain has been removed and now the vestigial code // has been removed from the state. clean up meta as well. if full_deactivate { - ::PastCodeMeta::remove(¶_id); + PastCodeMeta::::remove(¶_id); } } pruning_tasks_done as u64 - }, - ); + }); // 1 read for the meta for each pruning task, 1 read for the config // 2 writes: updating the meta and pruning the code @@ -1362,11 +1371,11 @@ impl Pallet { fn process_scheduled_upgrade_changes(now: T::BlockNumber) -> Weight { // account weight for `UpcomingUpgrades::mutate`. let mut weight = T::DbWeight::get().reads_writes(1, 1); - let upgrades_signaled = ::UpcomingUpgrades::mutate( + let upgrades_signaled = UpcomingUpgrades::::mutate( |upcoming_upgrades: &mut Vec<(ParaId, T::BlockNumber)>| { let num = upcoming_upgrades.iter().take_while(|&(_, at)| at <= &now).count(); for (para, _) in upcoming_upgrades.drain(..num) { - ::UpgradeGoAheadSignal::insert(¶, UpgradeGoAhead::GoAhead); + UpgradeGoAheadSignal::::insert(¶, UpgradeGoAhead::GoAhead); } num }, @@ -1375,10 +1384,8 @@ impl Pallet { // account weight for `UpgradeCooldowns::get`. weight += T::DbWeight::get().reads(1); - let cooldowns_expired = ::UpgradeCooldowns::get() - .iter() - .take_while(|&(_, at)| at <= &now) - .count(); + let cooldowns_expired = + UpgradeCooldowns::::get().iter().take_while(|&(_, at)| at <= &now).count(); // reserve weight for `initializer_finalize`: // - 1 read and 1 write for `UpgradeCooldowns::mutate`. @@ -1393,13 +1400,11 @@ impl Pallet { /// /// See `process_scheduled_upgrade_changes` for more details. fn process_scheduled_upgrade_cooldowns(now: T::BlockNumber) { - ::UpgradeCooldowns::mutate( - |upgrade_cooldowns: &mut Vec<(ParaId, T::BlockNumber)>| { - for &(para, _) in upgrade_cooldowns.iter().take_while(|&(_, at)| at <= &now) { - ::UpgradeRestrictionSignal::remove(¶); - } - }, - ); + UpgradeCooldowns::::mutate(|upgrade_cooldowns: &mut Vec<(ParaId, T::BlockNumber)>| { + for &(para, _) in upgrade_cooldowns.iter().take_while(|&(_, at)| at <= &now) { + UpgradeRestrictionSignal::::remove(¶); + } + }); } /// Goes over all PVF votes in progress, reinitializes ballots, increments ages and prunes the @@ -1528,7 +1533,7 @@ impl Pallet { weight += T::DbWeight::get().reads_writes(1, 4); FutureCodeUpgrades::::insert(&id, expected_at); - ::UpcomingUpgrades::mutate(|upcoming_upgrades| { + UpcomingUpgrades::::mutate(|upcoming_upgrades| { let insert_idx = upcoming_upgrades .binary_search_by_key(&expected_at, |&(_, b)| b) .unwrap_or_else(|idx| idx); @@ -1642,7 +1647,7 @@ impl Pallet { mem::replace(&mut genesis_data.validation_code, ValidationCode(Vec::new())); UpcomingParasGenesis::::insert(&id, genesis_data); let validation_code_hash = validation_code.hash(); - ::CurrentCodeHash::insert(&id, validation_code_hash); + CurrentCodeHash::::insert(&id, validation_code_hash); let cfg = configuration::Pallet::::config(); Self::kick_off_pvf_check( @@ -1803,7 +1808,7 @@ impl Pallet { weight += T::DbWeight::get().reads_writes(1, 1); let next_possible_upgrade_at = relay_parent_number + cfg.validation_upgrade_cooldown; - ::UpgradeCooldowns::mutate(|upgrade_cooldowns| { + UpgradeCooldowns::::mutate(|upgrade_cooldowns| { let insert_idx = upgrade_cooldowns .binary_search_by_key(&next_possible_upgrade_at, |&(_, b)| b) .unwrap_or_else(|idx| idx); @@ -1915,10 +1920,10 @@ impl Pallet { ) -> Weight { Heads::::insert(&id, new_head); - if let Some(expected_at) = ::FutureCodeUpgrades::get(&id) { + if let Some(expected_at) = FutureCodeUpgrades::::get(&id) { if expected_at <= execution_context { - ::FutureCodeUpgrades::remove(&id); - ::UpgradeGoAheadSignal::remove(&id); + FutureCodeUpgrades::::remove(&id); + UpgradeGoAheadSignal::::remove(&id); // Both should always be `Some` in this case, since a code upgrade is scheduled. let new_code_hash = if let Some(new_code_hash) = FutureCodeHash::::take(&id) { @@ -2037,10 +2042,10 @@ impl Pallet { /// Returns the weight consumed. fn increase_code_ref(code_hash: &ValidationCodeHash, code: &ValidationCode) -> Weight { let mut weight = T::DbWeight::get().reads_writes(1, 1); - ::CodeByHashRefs::mutate(code_hash, |refs| { + CodeByHashRefs::::mutate(code_hash, |refs| { if *refs == 0 { weight += T::DbWeight::get().writes(1); - ::CodeByHash::insert(code_hash, code); + CodeByHash::::insert(code_hash, code); } *refs += 1; }); @@ -2053,18 +2058,18 @@ impl Pallet { /// Returns the weight consumed. fn decrease_code_ref(code_hash: &ValidationCodeHash) -> Weight { let mut weight = T::DbWeight::get().reads(1); - let refs = ::CodeByHashRefs::get(code_hash); + let refs = CodeByHashRefs::::get(code_hash); if refs == 0 { log::error!(target: LOG_TARGET, "Code refs is already zero for {:?}", code_hash); return weight } if refs <= 1 { weight += T::DbWeight::get().writes(2); - ::CodeByHash::remove(code_hash); - ::CodeByHashRefs::remove(code_hash); + CodeByHash::::remove(code_hash); + CodeByHashRefs::::remove(code_hash); } else { weight += T::DbWeight::get().writes(1); - ::CodeByHashRefs::insert(code_hash, refs - 1); + CodeByHashRefs::::insert(code_hash, refs - 1); } weight } @@ -2116,7 +2121,7 @@ impl Pallet { /// or removing parachains in bulk. pub(crate) struct ParachainsCache { // `None` here means the parachains list has not been accessed yet, nevermind modified. - parachains: Option>, + parachains: Option>, _config: PhantomData, } @@ -2125,32 +2130,29 @@ impl ParachainsCache { Self { parachains: None, _config: PhantomData } } - fn ensure_initialized(&mut self) -> &mut Vec { - self.parachains.get_or_insert_with(|| Parachains::::get()) + fn ensure_initialized(&mut self) -> &mut BTreeSet { + self.parachains + .get_or_insert_with(|| Parachains::::get().into_iter().collect()) } /// Adds the given para id to the list. pub fn add(&mut self, id: ParaId) { let parachains = self.ensure_initialized(); - if let Err(i) = parachains.binary_search(&id) { - parachains.insert(i, id); - } + parachains.insert(id); } /// Removes the given para id from the list of parachains. Does nothing if the id is not in the /// list. pub fn remove(&mut self, id: ParaId) { let parachains = self.ensure_initialized(); - if let Ok(i) = parachains.binary_search(&id) { - parachains.remove(i); - } + parachains.remove(&id); } } impl Drop for ParachainsCache { fn drop(&mut self) { if let Some(parachains) = self.parachains.take() { - Parachains::::put(¶chains); + Parachains::::put(parachains.into_iter().collect::>()); } } } diff --git a/runtime/parachains/src/paras/tests.rs b/runtime/parachains/src/paras/tests.rs index f110e2a0d38a..89acfc9bc9b9 100644 --- a/runtime/parachains/src/paras/tests.rs +++ b/runtime/parachains/src/paras/tests.rs @@ -17,7 +17,7 @@ use super::*; use frame_support::{assert_err, assert_ok, assert_storage_noop}; use keyring::Sr25519Keyring; -use primitives::v2::{BlockNumber, ValidatorId, PARACHAIN_KEY_TYPE_ID}; +use primitives::{BlockNumber, ValidatorId, PARACHAIN_KEY_TYPE_ID}; use sc_keystore::LocalKeystore; use sp_keystore::{SyncCryptoStore, SyncCryptoStorePtr}; use std::sync::Arc; @@ -102,22 +102,19 @@ fn upgrade_at( } fn check_code_is_stored(validation_code: &ValidationCode) { - assert!(::CodeByHashRefs::get(validation_code.hash()) != 0); - assert!(::CodeByHash::contains_key(validation_code.hash())); + assert!(CodeByHashRefs::::get(validation_code.hash()) != 0); + assert!(CodeByHash::::contains_key(validation_code.hash())); } fn check_code_is_not_stored(validation_code: &ValidationCode) { - assert!(!::CodeByHashRefs::contains_key(validation_code.hash())); - assert!(!::CodeByHash::contains_key(validation_code.hash())); + assert!(!CodeByHashRefs::::contains_key(validation_code.hash())); + assert!(!CodeByHash::::contains_key(validation_code.hash())); } /// An utility for checking that certain events were deposited. struct EventValidator { events: Vec< - frame_system::EventRecord< - ::RuntimeEvent, - primitives::v2::Hash, - >, + frame_system::EventRecord<::RuntimeEvent, primitives::Hash>, >, } @@ -279,32 +276,26 @@ fn para_past_code_pruning_in_initialize() { let validation_code = ValidationCode(vec![4, 5, 6]); Paras::increase_code_ref(&validation_code.hash(), &validation_code); - ::PastCodeHash::insert(&(id, at_block), &validation_code.hash()); - ::PastCodePruning::put(&vec![(id, included_block)]); + PastCodeHash::::insert(&(id, at_block), &validation_code.hash()); + PastCodePruning::::put(&vec![(id, included_block)]); { let mut code_meta = Paras::past_code_meta(&id); code_meta.note_replacement(at_block, included_block); - ::PastCodeMeta::insert(&id, &code_meta); + PastCodeMeta::::insert(&id, &code_meta); } let pruned_at: BlockNumber = included_block + code_retention_period + 1; - assert_eq!( - ::PastCodeHash::get(&(id, at_block)), - Some(validation_code.hash()) - ); + assert_eq!(PastCodeHash::::get(&(id, at_block)), Some(validation_code.hash())); check_code_is_stored(&validation_code); run_to_block(pruned_at - 1, None); - assert_eq!( - ::PastCodeHash::get(&(id, at_block)), - Some(validation_code.hash()) - ); + assert_eq!(PastCodeHash::::get(&(id, at_block)), Some(validation_code.hash())); assert_eq!(Paras::past_code_meta(&id).most_recent_change(), Some(at_block)); check_code_is_stored(&validation_code); run_to_block(pruned_at, None); - assert!(::PastCodeHash::get(&(id, at_block)).is_none()); + assert!(PastCodeHash::::get(&(id, at_block)).is_none()); assert!(Paras::past_code_meta(&id).most_recent_change().is_none()); check_code_is_not_stored(&validation_code); }); @@ -380,7 +371,7 @@ fn note_past_code_sets_up_pruning_correctly() { Paras::note_past_code(id_a, 10, 12, ValidationCode(vec![1, 2, 3]).hash()); Paras::note_past_code(id_b, 20, 23, ValidationCode(vec![4, 5, 6]).hash()); - assert_eq!(::PastCodePruning::get(), vec![(id_a, 12), (id_b, 23)]); + assert_eq!(PastCodePruning::::get(), vec![(id_a, 12), (id_b, 23)]); assert_eq!( Paras::past_code_meta(&id_a), ParaPastCodeMeta { upgrade_times: vec![upgrade_at(10, 12)], last_pruned: None } @@ -440,13 +431,10 @@ fn code_upgrade_applied_after_delay() { Paras::note_new_head(para_id, Default::default(), 1); assert!(Paras::past_code_meta(¶_id).most_recent_change().is_none()); - assert_eq!(::FutureCodeUpgrades::get(¶_id), Some(expected_at)); - assert_eq!(::FutureCodeHash::get(¶_id), Some(new_code.hash())); - assert_eq!(::UpcomingUpgrades::get(), vec![(para_id, expected_at)]); - assert_eq!( - ::UpgradeCooldowns::get(), - vec![(para_id, next_possible_upgrade_at)] - ); + assert_eq!(FutureCodeUpgrades::::get(¶_id), Some(expected_at)); + assert_eq!(FutureCodeHash::::get(¶_id), Some(new_code.hash())); + assert_eq!(UpcomingUpgrades::::get(), vec![(para_id, expected_at)]); + assert_eq!(UpgradeCooldowns::::get(), vec![(para_id, next_possible_upgrade_at)]); assert_eq!(Paras::current_code(¶_id), Some(original_code.clone())); check_code_is_stored(&original_code); check_code_is_stored(&new_code); @@ -462,12 +450,9 @@ fn code_upgrade_applied_after_delay() { Paras::note_new_head(para_id, Default::default(), expected_at - 1); assert!(Paras::past_code_meta(¶_id).most_recent_change().is_none()); - assert_eq!(::FutureCodeUpgrades::get(¶_id), Some(expected_at)); - assert_eq!(::FutureCodeHash::get(¶_id), Some(new_code.hash())); - assert_eq!( - ::UpgradeGoAheadSignal::get(¶_id), - Some(UpgradeGoAhead::GoAhead) - ); + assert_eq!(FutureCodeUpgrades::::get(¶_id), Some(expected_at)); + assert_eq!(FutureCodeHash::::get(¶_id), Some(new_code.hash())); + assert_eq!(UpgradeGoAheadSignal::::get(¶_id), Some(UpgradeGoAhead::GoAhead)); assert_eq!(Paras::current_code(¶_id), Some(original_code.clone())); check_code_is_stored(&original_code); check_code_is_stored(&new_code); @@ -482,12 +467,12 @@ fn code_upgrade_applied_after_delay() { assert_eq!(Paras::past_code_meta(¶_id).most_recent_change(), Some(expected_at)); assert_eq!( - ::PastCodeHash::get(&(para_id, expected_at)), + PastCodeHash::::get(&(para_id, expected_at)), Some(original_code.hash()), ); - assert!(::FutureCodeUpgrades::get(¶_id).is_none()); - assert!(::FutureCodeHash::get(¶_id).is_none()); - assert!(::UpgradeGoAheadSignal::get(¶_id).is_none()); + assert!(FutureCodeUpgrades::::get(¶_id).is_none()); + assert!(FutureCodeHash::::get(¶_id).is_none()); + assert!(UpgradeGoAheadSignal::::get(¶_id).is_none()); assert_eq!(Paras::current_code(¶_id), Some(new_code.clone())); check_code_is_stored(&original_code); check_code_is_stored(&new_code); @@ -541,14 +526,11 @@ fn code_upgrade_applied_after_delay_even_when_late() { Paras::note_new_head(para_id, Default::default(), 1); assert!(Paras::past_code_meta(¶_id).most_recent_change().is_none()); - assert_eq!(::FutureCodeUpgrades::get(¶_id), Some(expected_at)); - assert_eq!(::FutureCodeHash::get(¶_id), Some(new_code.hash())); - assert_eq!(::UpcomingUpgrades::get(), vec![(para_id, expected_at)]); - assert_eq!( - ::UpgradeCooldowns::get(), - vec![(para_id, next_possible_upgrade_at)] - ); - assert!(::UpgradeGoAheadSignal::get(¶_id).is_none()); + assert_eq!(FutureCodeUpgrades::::get(¶_id), Some(expected_at)); + assert_eq!(FutureCodeHash::::get(¶_id), Some(new_code.hash())); + assert_eq!(UpcomingUpgrades::::get(), vec![(para_id, expected_at)]); + assert_eq!(UpgradeCooldowns::::get(), vec![(para_id, next_possible_upgrade_at)]); + assert!(UpgradeGoAheadSignal::::get(¶_id).is_none()); assert_eq!(Paras::current_code(¶_id), Some(original_code.clone())); expected_at @@ -560,22 +542,19 @@ fn code_upgrade_applied_after_delay_even_when_late() { // the upgrade. { // The signal should be set to go-ahead until the new head is actually processed. - assert_eq!( - ::UpgradeGoAheadSignal::get(¶_id), - Some(UpgradeGoAhead::GoAhead), - ); + assert_eq!(UpgradeGoAheadSignal::::get(¶_id), Some(UpgradeGoAhead::GoAhead),); Paras::note_new_head(para_id, Default::default(), expected_at + 4); assert_eq!(Paras::past_code_meta(¶_id).most_recent_change(), Some(expected_at)); assert_eq!( - ::PastCodeHash::get(&(para_id, expected_at)), + PastCodeHash::::get(&(para_id, expected_at)), Some(original_code.hash()), ); - assert!(::FutureCodeUpgrades::get(¶_id).is_none()); - assert!(::FutureCodeHash::get(¶_id).is_none()); - assert!(::UpgradeGoAheadSignal::get(¶_id).is_none()); + assert!(FutureCodeUpgrades::::get(¶_id).is_none()); + assert!(FutureCodeHash::::get(¶_id).is_none()); + assert!(UpgradeGoAheadSignal::::get(¶_id).is_none()); assert_eq!(Paras::current_code(¶_id), Some(new_code.clone())); } }); @@ -618,11 +597,8 @@ fn submit_code_change_when_not_allowed_is_err() { run_to_block(1, None); Paras::schedule_code_upgrade(para_id, new_code.clone(), 1, &Configuration::config()); - assert_eq!( - ::FutureCodeUpgrades::get(¶_id), - Some(1 + validation_upgrade_delay) - ); - assert_eq!(::FutureCodeHash::get(¶_id), Some(new_code.hash())); + assert_eq!(FutureCodeUpgrades::::get(¶_id), Some(1 + validation_upgrade_delay)); + assert_eq!(FutureCodeHash::::get(¶_id), Some(new_code.hash())); check_code_is_stored(&new_code); // We expect that if an upgrade is signalled while there is already one pending we just @@ -631,10 +607,10 @@ fn submit_code_change_when_not_allowed_is_err() { assert!(!Paras::can_upgrade_validation_code(para_id)); Paras::schedule_code_upgrade(para_id, newer_code.clone(), 2, &Configuration::config()); assert_eq!( - ::FutureCodeUpgrades::get(¶_id), + FutureCodeUpgrades::::get(¶_id), Some(1 + validation_upgrade_delay), // did not change since the same assertion from the last time. ); - assert_eq!(::FutureCodeHash::get(¶_id), Some(new_code.hash())); + assert_eq!(FutureCodeHash::::get(¶_id), Some(new_code.hash())); check_code_is_not_stored(&newer_code); }); } @@ -688,27 +664,21 @@ fn upgrade_restriction_elapsed_doesnt_mean_can_upgrade() { Paras::schedule_code_upgrade(para_id, new_code.clone(), 0, &Configuration::config()); Paras::note_new_head(para_id, dummy_head_data(), 0); assert_eq!( - ::UpgradeRestrictionSignal::get(¶_id), + UpgradeRestrictionSignal::::get(¶_id), Some(UpgradeRestriction::Present), ); - assert_eq!( - ::FutureCodeUpgrades::get(¶_id), - Some(0 + validation_upgrade_delay) - ); + assert_eq!(FutureCodeUpgrades::::get(¶_id), Some(0 + validation_upgrade_delay)); assert!(!Paras::can_upgrade_validation_code(para_id)); run_to_block(31, None); - assert!(::UpgradeRestrictionSignal::get(¶_id).is_none()); + assert!(UpgradeRestrictionSignal::::get(¶_id).is_none()); // Note the para still cannot upgrade the validation code. assert!(!Paras::can_upgrade_validation_code(para_id)); // And scheduling another upgrade does not do anything. `expected_at` is still the same. Paras::schedule_code_upgrade(para_id, newer_code.clone(), 30, &Configuration::config()); - assert_eq!( - ::FutureCodeUpgrades::get(¶_id), - Some(0 + validation_upgrade_delay) - ); + assert_eq!(FutureCodeUpgrades::::get(¶_id), Some(0 + validation_upgrade_delay)); }); } @@ -763,8 +733,8 @@ fn full_parachain_cleanup_storage() { Paras::note_new_head(para_id, Default::default(), 1); assert!(Paras::past_code_meta(¶_id).most_recent_change().is_none()); - assert_eq!(::FutureCodeUpgrades::get(¶_id), Some(expected_at)); - assert_eq!(::FutureCodeHash::get(¶_id), Some(new_code.hash())); + assert_eq!(FutureCodeUpgrades::::get(¶_id), Some(expected_at)); + assert_eq!(FutureCodeHash::::get(¶_id), Some(new_code.hash())); assert_eq!(Paras::current_code(¶_id), Some(original_code.clone())); check_code_is_stored(&original_code); check_code_is_stored(&new_code); @@ -792,15 +762,15 @@ fn full_parachain_cleanup_storage() { // Why 7 and 8? See above, the clean up scheduled above was processed at the block 8. // The initial upgrade was enacted at the block 7. assert_eq!(Paras::past_code_meta(¶_id).most_recent_change(), Some(8)); - assert_eq!(::PastCodeHash::get(&(para_id, 8)), Some(new_code.hash())); - assert_eq!(::PastCodePruning::get(), vec![(para_id, 7), (para_id, 8)]); + assert_eq!(PastCodeHash::::get(&(para_id, 8)), Some(new_code.hash())); + assert_eq!(PastCodePruning::::get(), vec![(para_id, 7), (para_id, 8)]); check_code_is_stored(&original_code); check_code_is_stored(&new_code); // any future upgrades haven't been used to validate yet, so those // are cleaned up immediately. - assert!(::FutureCodeUpgrades::get(¶_id).is_none()); - assert!(::FutureCodeHash::get(¶_id).is_none()); + assert!(FutureCodeUpgrades::::get(¶_id).is_none()); + assert!(FutureCodeHash::::get(¶_id).is_none()); assert!(Paras::current_code(¶_id).is_none()); // run to do the final cleanup @@ -809,9 +779,9 @@ fn full_parachain_cleanup_storage() { // now the final cleanup: last past code cleaned up, and this triggers meta cleanup. assert_eq!(Paras::past_code_meta(¶_id), Default::default()); - assert!(::PastCodeHash::get(&(para_id, 7)).is_none()); - assert!(::PastCodeHash::get(&(para_id, 8)).is_none()); - assert!(::PastCodePruning::get().is_empty()); + assert!(PastCodeHash::::get(&(para_id, 7)).is_none()); + assert!(PastCodeHash::::get(&(para_id, 8)).is_none()); + assert!(PastCodePruning::::get().is_empty()); check_code_is_not_stored(&original_code); check_code_is_not_stored(&new_code); }); @@ -951,34 +921,34 @@ fn para_incoming_at_session() { }) .for_each(sign_and_include_pvf_check_statement); - assert_eq!(::ActionsQueue::get(Paras::scheduled_session()), vec![c, b, a],); + assert_eq!(ActionsQueue::::get(Paras::scheduled_session()), vec![c, b, a],); // Lifecycle is tracked correctly - assert_eq!(::ParaLifecycles::get(&a), Some(ParaLifecycle::Onboarding)); - assert_eq!(::ParaLifecycles::get(&b), Some(ParaLifecycle::Onboarding)); - assert_eq!(::ParaLifecycles::get(&c), Some(ParaLifecycle::Onboarding)); + assert_eq!(ParaLifecycles::::get(&a), Some(ParaLifecycle::Onboarding)); + assert_eq!(ParaLifecycles::::get(&b), Some(ParaLifecycle::Onboarding)); + assert_eq!(ParaLifecycles::::get(&c), Some(ParaLifecycle::Onboarding)); // run to block without session change. run_to_block(2, None); assert_eq!(Paras::parachains(), Vec::new()); - assert_eq!(::ActionsQueue::get(Paras::scheduled_session()), vec![c, b, a],); + assert_eq!(ActionsQueue::::get(Paras::scheduled_session()), vec![c, b, a],); // Lifecycle is tracked correctly - assert_eq!(::ParaLifecycles::get(&a), Some(ParaLifecycle::Onboarding)); - assert_eq!(::ParaLifecycles::get(&b), Some(ParaLifecycle::Onboarding)); - assert_eq!(::ParaLifecycles::get(&c), Some(ParaLifecycle::Onboarding)); + assert_eq!(ParaLifecycles::::get(&a), Some(ParaLifecycle::Onboarding)); + assert_eq!(ParaLifecycles::::get(&b), Some(ParaLifecycle::Onboarding)); + assert_eq!(ParaLifecycles::::get(&c), Some(ParaLifecycle::Onboarding)); // Two sessions pass, so action queue is triggered run_to_block(4, Some(vec![3, 4])); assert_eq!(Paras::parachains(), vec![c, b]); - assert_eq!(::ActionsQueue::get(Paras::scheduled_session()), Vec::new()); + assert_eq!(ActionsQueue::::get(Paras::scheduled_session()), Vec::new()); // Lifecycle is tracked correctly - assert_eq!(::ParaLifecycles::get(&a), Some(ParaLifecycle::Parathread)); - assert_eq!(::ParaLifecycles::get(&b), Some(ParaLifecycle::Parachain)); - assert_eq!(::ParaLifecycles::get(&c), Some(ParaLifecycle::Parachain)); + assert_eq!(ParaLifecycles::::get(&a), Some(ParaLifecycle::Parathread)); + assert_eq!(ParaLifecycles::::get(&b), Some(ParaLifecycle::Parachain)); + assert_eq!(ParaLifecycles::::get(&c), Some(ParaLifecycle::Parachain)); assert_eq!(Paras::current_code(&a), Some(vec![2].into())); assert_eq!(Paras::current_code(&b), Some(vec![1].into())); @@ -1057,18 +1027,18 @@ fn code_ref_is_cleaned_correctly() { Paras::increase_code_ref(&code.hash(), &code); Paras::increase_code_ref(&code.hash(), &code); - assert!(::CodeByHash::contains_key(code.hash())); - assert_eq!(::CodeByHashRefs::get(code.hash()), 2); + assert!(CodeByHash::::contains_key(code.hash())); + assert_eq!(CodeByHashRefs::::get(code.hash()), 2); Paras::decrease_code_ref(&code.hash()); - assert!(::CodeByHash::contains_key(code.hash())); - assert_eq!(::CodeByHashRefs::get(code.hash()), 1); + assert!(CodeByHash::::contains_key(code.hash())); + assert_eq!(CodeByHashRefs::::get(code.hash()), 1); Paras::decrease_code_ref(&code.hash()); - assert!(!::CodeByHash::contains_key(code.hash())); - assert!(!::CodeByHashRefs::contains_key(code.hash())); + assert!(!CodeByHash::::contains_key(code.hash())); + assert!(!CodeByHashRefs::::contains_key(code.hash())); }); } @@ -1143,11 +1113,11 @@ fn pvf_check_coalescing_onboarding_and_upgrade() { .for_each(sign_and_include_pvf_check_statement); // Check that `b` actually onboards. - assert_eq!(::ActionsQueue::get(EXPECTED_SESSION + 2), vec![b]); + assert_eq!(ActionsQueue::::get(EXPECTED_SESSION + 2), vec![b]); // Check that the upgrade got scheduled. assert_eq!( - ::FutureCodeUpgrades::get(&a), + FutureCodeUpgrades::::get(&a), Some(RELAY_PARENT + validation_upgrade_delay), ); @@ -1193,7 +1163,7 @@ fn pvf_check_onboarding_reject_on_expiry() { // Make sure that we kicked off the PVF vote for this validation code and that the // validation code is stored. - assert!(::PvfActiveVoteMap::get(&validation_code.hash()).is_some()); + assert!(PvfActiveVoteMap::::get(&validation_code.hash()).is_some()); check_code_is_stored(&validation_code); // Skip 2 sessions (i.e. `pvf_voting_ttl`) verifying that the code is still stored in @@ -1207,7 +1177,7 @@ fn pvf_check_onboarding_reject_on_expiry() { // Verify that the PVF is no longer stored and there is no active PVF vote. check_code_is_not_stored(&validation_code); - assert!(::PvfActiveVoteMap::get(&validation_code.hash()).is_none()); + assert!(PvfActiveVoteMap::::get(&validation_code.hash()).is_none()); assert!(Paras::pvfs_require_precheck().is_empty()); // Verify that at this point we can again try to initialize the same para. @@ -1252,22 +1222,31 @@ fn pvf_check_upgrade_reject() { Paras::schedule_code_upgrade(a, new_code.clone(), RELAY_PARENT, &Configuration::config()); check_code_is_stored(&new_code); - // Supermajority of validators vote against `new_code`. PVF should be rejected. - IntoIterator::into_iter([0, 1, 2, 3]) - .map(|i| PvfCheckStatement { - accept: false, - subject: new_code.hash(), - session_index: EXPECTED_SESSION, - validator_index: i.into(), - }) - .for_each(sign_and_include_pvf_check_statement); + // 1/3 of validators vote against `new_code`. PVF should not be rejected yet. + sign_and_include_pvf_check_statement(PvfCheckStatement { + accept: false, + subject: new_code.hash(), + session_index: EXPECTED_SESSION, + validator_index: 0.into(), + }); + + // Verify that the new code is not yet discarded. + check_code_is_stored(&new_code); + + // >1/3 of validators vote against `new_code`. PVF should be rejected. + sign_and_include_pvf_check_statement(PvfCheckStatement { + accept: false, + subject: new_code.hash(), + session_index: EXPECTED_SESSION, + validator_index: 1.into(), + }); // Verify that the new code is discarded. check_code_is_not_stored(&new_code); - assert!(::PvfActiveVoteMap::get(&new_code.hash()).is_none()); + assert!(PvfActiveVoteMap::::get(&new_code.hash()).is_none()); assert!(Paras::pvfs_require_precheck().is_empty()); - assert!(::FutureCodeHash::get(&a).is_none()); + assert!(FutureCodeHash::::get(&a).is_none()); // Verify that the required events were emitted. EventValidator::new().started(&new_code, a).rejected(&new_code, a).check(); @@ -1510,7 +1489,7 @@ fn add_trusted_validation_code_inserts_with_no_users() { RuntimeOrigin::root(), validation_code.clone() )); - assert_eq!(::CodeByHashRefs::get(&validation_code.hash()), 0,); + assert_eq!(CodeByHashRefs::::get(&validation_code.hash()), 0,); }); } @@ -1548,8 +1527,8 @@ fn poke_unused_validation_code_removes_code_cleanly() { validation_code.hash() )); - assert_eq!(::CodeByHashRefs::get(&validation_code.hash()), 0); - assert!(!::CodeByHash::contains_key(&validation_code.hash())); + assert_eq!(CodeByHashRefs::::get(&validation_code.hash()), 0); + assert!(!CodeByHash::::contains_key(&validation_code.hash())); }); } @@ -1592,15 +1571,15 @@ fn increase_code_ref_doesnt_have_allergy_on_add_trusted_validation_code() { assert_ok!(Paras::add_trusted_validation_code(RuntimeOrigin::root(), code.clone())); Paras::increase_code_ref(&code.hash(), &code); Paras::increase_code_ref(&code.hash(), &code); - assert!(::CodeByHash::contains_key(code.hash())); - assert_eq!(::CodeByHashRefs::get(code.hash()), 2); + assert!(CodeByHash::::contains_key(code.hash())); + assert_eq!(CodeByHashRefs::::get(code.hash()), 2); }); new_test_ext(Default::default()).execute_with(|| { assert_ok!(Paras::add_trusted_validation_code(RuntimeOrigin::root(), code.clone())); Paras::decrease_code_ref(&code.hash()); - assert!(::CodeByHash::contains_key(code.hash())); - assert_eq!(::CodeByHashRefs::get(code.hash()), 0); + assert!(CodeByHash::::contains_key(code.hash())); + assert_eq!(CodeByHashRefs::::get(code.hash()), 0); }); } @@ -1637,10 +1616,7 @@ fn add_trusted_validation_code_insta_approval() { // Verify that the code upgrade has `expected_at` set to `26`. This is the behavior // equal to that of `pvf_checking_enabled: false`. - assert_eq!( - ::FutureCodeUpgrades::get(¶_id), - Some(1 + validation_upgrade_delay) - ); + assert_eq!(FutureCodeUpgrades::::get(¶_id), Some(1 + validation_upgrade_delay)); // Verify that the required events were emitted. EventValidator::new() @@ -1679,28 +1655,28 @@ fn add_trusted_validation_code_enacts_existing_pvf_vote() { // No upgrade should be scheduled at this point. PVF pre-checking vote should run for // that PVF. - assert!(::FutureCodeUpgrades::get(¶_id).is_none()); - assert!(::PvfActiveVoteMap::contains_key(&validation_code.hash())); + assert!(FutureCodeUpgrades::::get(¶_id).is_none()); + assert!(PvfActiveVoteMap::::contains_key(&validation_code.hash())); // Then we add a trusted validation code. That should conclude the vote. assert_ok!(Paras::add_trusted_validation_code( RuntimeOrigin::root(), validation_code.clone() )); - assert!(::FutureCodeUpgrades::get(¶_id).is_some()); - assert!(!::PvfActiveVoteMap::contains_key(&validation_code.hash())); + assert!(FutureCodeUpgrades::::get(¶_id).is_some()); + assert!(!PvfActiveVoteMap::::contains_key(&validation_code.hash())); }); } #[test] fn verify_upgrade_go_ahead_signal_is_externally_accessible() { - use primitives::v2::well_known_keys; + use primitives::well_known_keys; let a = ParaId::from(2020); new_test_ext(Default::default()).execute_with(|| { assert!(sp_io::storage::get(&well_known_keys::upgrade_go_ahead_signal(a)).is_none()); - ::UpgradeGoAheadSignal::insert(&a, UpgradeGoAhead::GoAhead); + UpgradeGoAheadSignal::::insert(&a, UpgradeGoAhead::GoAhead); assert_eq!( sp_io::storage::get(&well_known_keys::upgrade_go_ahead_signal(a)).unwrap(), vec![1u8], @@ -1710,13 +1686,13 @@ fn verify_upgrade_go_ahead_signal_is_externally_accessible() { #[test] fn verify_upgrade_restriction_signal_is_externally_accessible() { - use primitives::v2::well_known_keys; + use primitives::well_known_keys; let a = ParaId::from(2020); new_test_ext(Default::default()).execute_with(|| { assert!(sp_io::storage::get(&well_known_keys::upgrade_restriction_signal(a)).is_none()); - ::UpgradeRestrictionSignal::insert(&a, UpgradeRestriction::Present); + UpgradeRestrictionSignal::::insert(&a, UpgradeRestriction::Present); assert_eq!( sp_io::storage::get(&well_known_keys::upgrade_restriction_signal(a)).unwrap(), vec![0], @@ -1761,3 +1737,77 @@ fn parakind_encodes_decodes_to_bool_serde() { let ser_false = serde_json::to_string(&false).unwrap(); assert_eq!(ser_false, ser_thread); } + +#[test] +fn parachains_cache_is_set() { + new_test_ext(MockGenesisConfig::default()).execute_with(|| { + let a = ParaId::from(111); + + let mut parachains_cache: ParachainsCache = ParachainsCache::new(); + + // Add element twice + parachains_cache.add(a); + parachains_cache.add(a); + + // Flush cache to storage + drop(parachains_cache); + + // In order after addition + assert_eq!(Parachains::::get(), vec![a]); + + let mut parachains_cache: ParachainsCache = ParachainsCache::new(); + + // Remove element twice + parachains_cache.remove(a); + parachains_cache.remove(a); + + // Flush cache to storage + drop(parachains_cache); + + // In order after removal + assert_eq!(Parachains::::get(), vec![]); + + let mut parachains_cache: ParachainsCache = ParachainsCache::new(); + + // Remove nonexisting element + parachains_cache.remove(a); + assert_storage_noop!(drop(parachains_cache)); + assert_eq!(Parachains::::get(), vec![]); + }); +} + +#[test] +fn parachains_cache_preserves_order() { + new_test_ext(MockGenesisConfig::default()).execute_with(|| { + let a = ParaId::from(111); + let b = ParaId::from(222); + let c = ParaId::from(333); + let d = ParaId::from(444); + + let mut parachains_cache: ParachainsCache = ParachainsCache::new(); + + // Add in mixed order + parachains_cache.add(b); + parachains_cache.add(c); + parachains_cache.add(a); + parachains_cache.add(d); + + // Flush cache to storage + drop(parachains_cache); + + // In order after addition + assert_eq!(Parachains::::get(), vec![a, b, c, d]); + + let mut parachains_cache: ParachainsCache = ParachainsCache::new(); + + // Remove 2 elements + parachains_cache.remove(b); + parachains_cache.remove(d); + + // Flush cache to storage + drop(parachains_cache); + + // In order after removal + assert_eq!(Parachains::::get(), vec![a, c]); + }); +} diff --git a/runtime/parachains/src/paras_inherent/mod.rs b/runtime/parachains/src/paras_inherent/mod.rs index a053e3dbfaf9..db9caca49d1b 100644 --- a/runtime/parachains/src/paras_inherent/mod.rs +++ b/runtime/parachains/src/paras_inherent/mod.rs @@ -39,7 +39,7 @@ use frame_support::{ }; use frame_system::pallet_prelude::*; use pallet_babe::{self, ParentBlockRandomness}; -use primitives::v2::{ +use primitives::{ BackedCandidate, CandidateHash, CandidateReceipt, CheckedDisputeStatementSet, CheckedMultiDisputeStatementSet, CoreIndex, DisputeStatementSet, InherentData as ParachainsInherentData, MultiDisputeStatementSet, ScrapedOnChainVotes, @@ -104,7 +104,6 @@ pub mod pallet { use super::*; #[pallet::pallet] - #[pallet::generate_store(pub(super) trait Store)] #[pallet::without_storage_info] pub struct Pallet(_); @@ -277,6 +276,7 @@ pub mod pallet { #[pallet::call] impl Pallet { /// Enter the paras inherent. This will process bitfields and backed candidates. + #[pallet::call_index(0)] #[pallet::weight(( paras_inherent_total_weight::( data.backed_candidates.as_slice(), @@ -348,7 +348,6 @@ impl Pallet { let (checked_disputes, total_consumed_weight) = { // Obtain config params.. let config = >::config(); - let max_spam_slots = config.dispute_max_spam_slots; let post_conclusion_acceptance_period = config.dispute_post_conclusion_acceptance_period; @@ -362,7 +361,6 @@ impl Pallet { let dispute_set_validity_check = move |set| { T::DisputesHandler::filter_dispute_data( set, - max_spam_slots, post_conclusion_acceptance_period, verify_dispute_sigs, ) @@ -594,7 +592,6 @@ impl Pallet { } let config = >::config(); - let max_spam_slots = config.dispute_max_spam_slots; let post_conclusion_acceptance_period = config.dispute_post_conclusion_acceptance_period; // TODO: Better if we can convert this to `with_transactional` and handle an error if @@ -608,7 +605,6 @@ impl Pallet { let dispute_statement_set_valid = move |set: DisputeStatementSet| { T::DisputesHandler::filter_dispute_data( set, - max_spam_slots, post_conclusion_acceptance_period, // `DisputeCoordinator` on the node side only forwards // valid dispute statement sets and hence this does not diff --git a/runtime/parachains/src/paras_inherent/tests.rs b/runtime/parachains/src/paras_inherent/tests.rs index 86d2f1c10537..fb7fd571b004 100644 --- a/runtime/parachains/src/paras_inherent/tests.rs +++ b/runtime/parachains/src/paras_inherent/tests.rs @@ -139,7 +139,7 @@ mod enter { #[test] fn test_session_is_tracked_in_on_chain_scraping() { use crate::disputes::run_to_block; - use primitives::v2::{ + use primitives::{ DisputeStatement, DisputeStatementSet, ExplicitDisputeStatement, InvalidDisputeStatementKind, ValidDisputeStatementKind, }; @@ -859,8 +859,8 @@ mod enter { } } -fn default_header() -> primitives::v2::Header { - primitives::v2::Header { +fn default_header() -> primitives::Header { + primitives::Header { parent_hash: Default::default(), number: 0, state_root: Default::default(), @@ -876,7 +876,7 @@ mod sanitizers { back_candidate, collator_sign_candidate, BackingKind, TestCandidateBuilder, }; use bitvec::order::Lsb0; - use primitives::v2::{ + use primitives::{ AvailabilityBitfield, GroupIndex, Hash, Id as ParaId, SignedAvailabilityBitfield, ValidatorIndex, }; @@ -885,7 +885,7 @@ mod sanitizers { use crate::mock::Test; use futures::executor::block_on; use keyring::Sr25519Keyring; - use primitives::v2::PARACHAIN_KEY_TYPE_ID; + use primitives::PARACHAIN_KEY_TYPE_ID; use sc_keystore::LocalKeystore; use sp_keystore::{SyncCryptoStore, SyncCryptoStorePtr}; use std::sync::Arc; diff --git a/runtime/parachains/src/paras_inherent/weights.rs b/runtime/parachains/src/paras_inherent/weights.rs index c1680659dc54..4d5fdc27d9c6 100644 --- a/runtime/parachains/src/paras_inherent/weights.rs +++ b/runtime/parachains/src/paras_inherent/weights.rs @@ -37,15 +37,15 @@ pub struct TestWeightInfo; impl WeightInfo for TestWeightInfo { fn enter_variable_disputes(v: u32) -> Weight { // MAX Block Weight should fit 4 disputes - Weight::from_ref_time(80_000 * v as u64 + 80_000) + Weight::from_parts(80_000 * v as u64 + 80_000, 0) } fn enter_bitfields() -> Weight { // MAX Block Weight should fit 4 backed candidates - Weight::from_ref_time(40_000u64) + Weight::from_parts(40_000u64, 0) } fn enter_backed_candidates_variable(v: u32) -> Weight { // MAX Block Weight should fit 4 backed candidates - Weight::from_ref_time(40_000 * v as u64 + 40_000) + Weight::from_parts(40_000 * v as u64 + 40_000, 0) } fn enter_backed_candidate_code_upgrade() -> Weight { Weight::zero() diff --git a/runtime/parachains/src/reward_points.rs b/runtime/parachains/src/reward_points.rs index 1d1d8748f1c2..e3945558f26c 100644 --- a/runtime/parachains/src/reward_points.rs +++ b/runtime/parachains/src/reward_points.rs @@ -23,7 +23,7 @@ use crate::{session_info, shared}; use frame_support::traits::{Defensive, ValidatorSet}; -use primitives::v2::{SessionIndex, ValidatorIndex}; +use primitives::{SessionIndex, ValidatorIndex}; use sp_std::collections::btree_set::BTreeSet; /// The amount of era points given by backing a candidate that is included. diff --git a/runtime/parachains/src/runtime_api_impl/v2.rs b/runtime/parachains/src/runtime_api_impl/v2.rs index 57345a819de0..15b91d57d923 100644 --- a/runtime/parachains/src/runtime_api_impl/v2.rs +++ b/runtime/parachains/src/runtime_api_impl/v2.rs @@ -21,7 +21,7 @@ use crate::{ configuration, dmp, hrmp, inclusion, initializer, paras, paras_inherent, scheduler, session_info, shared, }; -use primitives::v2::{ +use primitives::{ AuthorityDiscoveryId, CandidateEvent, CommittedCandidateReceipt, CoreIndex, CoreOccupied, CoreState, GroupIndex, GroupRotationInfo, Hash, Id as ParaId, InboundDownwardMessage, InboundHrmpMessage, OccupiedCore, OccupiedCoreAssumption, PersistedValidationData, @@ -256,7 +256,7 @@ pub fn assumed_validation_data( /// Implementation for the `check_validation_outputs` function of the runtime API. pub fn check_validation_outputs( para_id: ParaId, - outputs: primitives::v2::CandidateCommitments, + outputs: primitives::CandidateCommitments, ) -> bool { >::check_validation_outputs_for_runtime_api(para_id, outputs) } diff --git a/runtime/parachains/src/runtime_api_impl/vstaging.rs b/runtime/parachains/src/runtime_api_impl/vstaging.rs index 7ae235c8133a..f96323ce5043 100644 --- a/runtime/parachains/src/runtime_api_impl/vstaging.rs +++ b/runtime/parachains/src/runtime_api_impl/vstaging.rs @@ -16,8 +16,8 @@ //! Put implementations of functions from staging APIs here. -use crate::disputes; -use primitives::v2::{CandidateHash, DisputeState, SessionIndex}; +use crate::{disputes, session_info}; +use primitives::{vstaging::ExecutorParams, CandidateHash, DisputeState, SessionIndex}; use sp_std::prelude::*; /// Implementation for `get_session_disputes` function from the runtime API @@ -25,3 +25,18 @@ pub fn get_session_disputes( ) -> Vec<(SessionIndex, CandidateHash, DisputeState)> { >::disputes() } + +/// Get session executor parameter set +pub fn session_executor_params( + session_index: SessionIndex, +) -> Option { + // This is to bootstrap the storage working around the runtime migration issue: + // https://github.com/paritytech/substrate/issues/9997 + // After the bootstrap is complete (no less than 7 session passed with the runtime) + // this code should be replaced with a pure + // >::session_executor_params(session_index) call. + match >::session_executor_params(session_index) { + Some(ep) => Some(ep), + None => Some(ExecutorParams::default()), + } +} diff --git a/runtime/parachains/src/scheduler.rs b/runtime/parachains/src/scheduler.rs index 6eb1b732705f..58509350a3a6 100644 --- a/runtime/parachains/src/scheduler.rs +++ b/runtime/parachains/src/scheduler.rs @@ -36,7 +36,7 @@ //! over time. use frame_support::pallet_prelude::*; -use primitives::v2::{ +use primitives::{ CollatorId, CoreIndex, CoreOccupied, GroupIndex, GroupRotationInfo, Id as ParaId, ParathreadClaim, ParathreadEntry, ScheduledCore, ValidatorIndex, }; @@ -158,7 +158,6 @@ pub mod pallet { use super::*; #[pallet::pallet] - #[pallet::generate_store(pub(super) trait Store)] #[pallet::without_storage_info] pub struct Pallet(_); diff --git a/runtime/parachains/src/scheduler/tests.rs b/runtime/parachains/src/scheduler/tests.rs index 40ff9db82871..76bdc563d827 100644 --- a/runtime/parachains/src/scheduler/tests.rs +++ b/runtime/parachains/src/scheduler/tests.rs @@ -18,7 +18,7 @@ use super::*; use frame_support::assert_ok; use keyring::Sr25519Keyring; -use primitives::v2::{BlockNumber, CollatorId, SessionIndex, ValidatorId}; +use primitives::{BlockNumber, CollatorId, SessionIndex, ValidatorId}; use crate::{ configuration::HostConfiguration, @@ -865,7 +865,7 @@ fn schedule_rotates_groups() { _ => None, }); - let session_start_block = ::SessionStartBlock::get(); + let session_start_block = SessionStartBlock::::get(); assert_eq!(session_start_block, 1); Scheduler::add_parathread_claim(ParathreadClaim(thread_a, collator.clone())); diff --git a/runtime/parachains/src/session_info.rs b/runtime/parachains/src/session_info.rs index cbd67a200a16..11d430d1ef72 100644 --- a/runtime/parachains/src/session_info.rs +++ b/runtime/parachains/src/session_info.rs @@ -27,7 +27,10 @@ use frame_support::{ pallet_prelude::*, traits::{OneSessionHandler, ValidatorSet, ValidatorSetWithIdentification}, }; -use primitives::v2::{AssignmentId, AuthorityDiscoveryId, SessionIndex, SessionInfo}; +use primitives::{ + vstaging::{ExecutorParam, ExecutorParams}, + AssignmentId, AuthorityDiscoveryId, SessionIndex, SessionInfo, +}; use sp_std::vec::Vec; pub use pallet::*; @@ -37,6 +40,10 @@ pub mod migration; #[cfg(test)] mod tests; +// The order of parameters should be deterministic, that is, one should not reorder them when +// changing the array contents to avoid creating excessive pressure to PVF execution subsys. +const EXECUTOR_PARAMS: [ExecutorParam; 0] = []; + /// A type for representing the validator account id in a session. pub type AccountId = <::ValidatorSet as ValidatorSet< ::AccountId, @@ -56,7 +63,6 @@ pub mod pallet { use super::*; #[pallet::pallet] - #[pallet::generate_store(pub(super) trait Store)] #[pallet::storage_version(migration::STORAGE_VERSION)] #[pallet::without_storage_info] pub struct Pallet(_); @@ -102,6 +108,12 @@ pub mod pallet { #[pallet::getter(fn account_keys)] pub(crate) type AccountKeys = StorageMap<_, Identity, SessionIndex, Vec>>; + + /// Executor parameter set for a given session index + #[pallet::storage] + #[pallet::getter(fn session_executor_params)] + pub(crate) type SessionExecutorParams = + StorageMap<_, Identity, SessionIndex, ExecutorParams>; } /// An abstraction for the authority discovery pallet @@ -153,6 +165,7 @@ impl Pallet { // Idx will be missing for a few sessions after the runtime upgrade. // But it shouldn'be be a problem. AccountKeys::::remove(&idx); + SessionExecutorParams::::remove(&idx); } // update `EarliestStoredSession` based on `config.dispute_period` EarliestStoredSession::::set(new_earliest_stored_session); @@ -184,6 +197,10 @@ impl Pallet { dispute_period, }; Sessions::::insert(&new_session_index, &new_session_info); + SessionExecutorParams::::insert( + &new_session_index, + ExecutorParams::from(&EXECUTOR_PARAMS[..]), + ); } /// Called by the initializer to initialize the session info pallet. diff --git a/runtime/parachains/src/session_info/tests.rs b/runtime/parachains/src/session_info/tests.rs index 7bf68736b572..b3e14340dbcb 100644 --- a/runtime/parachains/src/session_info/tests.rs +++ b/runtime/parachains/src/session_info/tests.rs @@ -25,7 +25,7 @@ use crate::{ util::take_active_subset, }; use keyring::Sr25519Keyring; -use primitives::v2::{BlockNumber, ValidatorId, ValidatorIndex}; +use primitives::{BlockNumber, ValidatorId, ValidatorIndex}; fn run_to_block( to: BlockNumber, diff --git a/runtime/parachains/src/shared.rs b/runtime/parachains/src/shared.rs index 5f5d44509ed2..3cc59c32878d 100644 --- a/runtime/parachains/src/shared.rs +++ b/runtime/parachains/src/shared.rs @@ -20,7 +20,7 @@ //! dependent on any of the other pallets. use frame_support::pallet_prelude::*; -use primitives::v2::{SessionIndex, ValidatorId, ValidatorIndex}; +use primitives::{SessionIndex, ValidatorId, ValidatorIndex}; use sp_std::vec::Vec; use rand::{seq::SliceRandom, SeedableRng}; @@ -43,7 +43,6 @@ pub mod pallet { use super::*; #[pallet::pallet] - #[pallet::generate_store(pub(super) trait Store)] #[pallet::without_storage_info] pub struct Pallet(_); diff --git a/runtime/parachains/src/ump.rs b/runtime/parachains/src/ump.rs index 8d734acb3464..0a6fc06db9b4 100644 --- a/runtime/parachains/src/ump.rs +++ b/runtime/parachains/src/ump.rs @@ -20,7 +20,8 @@ use crate::{ }; use frame_support::{pallet_prelude::*, traits::EnsureOrigin}; use frame_system::pallet_prelude::*; -use primitives::v2::{Id as ParaId, UpwardMessage}; +use polkadot_parachain::primitives::UpwardMessages; +use primitives::{Id as ParaId, UpwardMessage}; use sp_std::{collections::btree_map::BTreeMap, fmt, marker::PhantomData, mem, prelude::*}; use xcm::latest::Outcome; @@ -28,12 +29,15 @@ pub use pallet::*; /// Maximum value that `config.max_upward_message_size` can be set to /// -/// This is used for benchmarking sanely bounding relevant storate items. It is expected from the `configurations` +/// This is used for benchmarking sanely bounding relevant storage items. It is expected from the `configurations` /// pallet to check these values before setting. pub const MAX_UPWARD_MESSAGE_SIZE_BOUND: u32 = 50 * 1024; +/// Maximum amount of overweight messages that can exist in the queue at any given time. +pub const MAX_OVERWEIGHT_MESSAGES: u32 = 1000; #[cfg(feature = "runtime-benchmarks")] mod benchmarking; +pub mod migration; #[cfg(test)] pub(crate) mod tests; @@ -133,13 +137,11 @@ impl, C: Config> UmpSink }, Ok((Ok(xcm_message), weight_used)) => { let xcm_junction = Junction::Parachain(origin.into()); - let outcome = - XcmExecutor::execute_xcm(xcm_junction, xcm_message, max_weight.ref_time()); + let outcome = XcmExecutor::execute_xcm(xcm_junction, xcm_message, id, max_weight); match outcome { - Outcome::Error(XcmError::WeightLimitReached(required)) => - Err((id, Weight::from_ref_time(required))), + Outcome::Error(XcmError::WeightLimitReached(required)) => Err((id, required)), outcome => { - let outcome_weight = Weight::from_ref_time(outcome.weight_used()); + let outcome_weight = outcome.weight_used(); Pallet::::deposit_event(Event::ExecutedUpward(id, outcome)); Ok(weight_used.saturating_add(outcome_weight)) }, @@ -213,8 +215,8 @@ pub mod pallet { use super::*; #[pallet::pallet] - #[pallet::generate_store(pub(super) trait Store)] #[pallet::without_storage_info] + #[pallet::storage_version(migration::STORAGE_VERSION)] pub struct Pallet(_); #[pallet::config] @@ -328,7 +330,7 @@ pub mod pallet { /// These messages stay there until manually dispatched. #[pallet::storage] pub type Overweight = - StorageMap<_, Twox64Concat, OverweightIndex, (ParaId, Vec), OptionQuery>; + CountedStorageMap<_, Twox64Concat, OverweightIndex, (ParaId, Vec), OptionQuery>; /// The number of overweight messages ever recorded in `Overweight` (and thus the lowest free /// index). @@ -349,6 +351,7 @@ pub mod pallet { /// /// Events: /// - `OverweightServiced`: On success. + #[pallet::call_index(0)] #[pallet::weight(weight_limit.saturating_add(::WeightInfo::service_overweight()))] pub fn service_overweight( origin: OriginFor, @@ -398,22 +401,20 @@ impl Pallet { /// Remove all relevant storage items for an outgoing parachain. pub(crate) fn clean_ump_after_outgoing(outgoing_para: &ParaId) -> Weight { - ::RelayDispatchQueueSize::remove(outgoing_para); - ::RelayDispatchQueues::remove(outgoing_para); + RelayDispatchQueueSize::::remove(outgoing_para); + RelayDispatchQueues::::remove(outgoing_para); // Remove the outgoing para from the `NeedsDispatch` list and from // `NextDispatchRoundStartWith`. // // That's needed for maintaining invariant that `NextDispatchRoundStartWith` points to an // existing item in `NeedsDispatch`. - ::NeedsDispatch::mutate(|v| { + NeedsDispatch::::mutate(|v| { if let Ok(i) = v.binary_search(outgoing_para) { v.remove(i); } }); - ::NextDispatchRoundStartWith::mutate(|v| { - *v = v.filter(|p| p == outgoing_para) - }); + NextDispatchRoundStartWith::::mutate(|v| *v = v.filter(|p| p == outgoing_para)); ::WeightInfo::clean_ump_after_outgoing() } @@ -432,8 +433,7 @@ impl Pallet { }) } - let (mut para_queue_count, mut para_queue_size) = - ::RelayDispatchQueueSize::get(¶); + let (mut para_queue_count, mut para_queue_size) = RelayDispatchQueueSize::::get(¶); for (idx, msg) in upward_messages.into_iter().enumerate() { let msg_size = msg.len() as u32; @@ -467,10 +467,7 @@ impl Pallet { } /// Enqueues `upward_messages` from a `para`'s accepted candidate block. - pub(crate) fn receive_upward_messages( - para: ParaId, - upward_messages: Vec, - ) -> Weight { + pub(crate) fn receive_upward_messages(para: ParaId, upward_messages: UpwardMessages) -> Weight { let mut weight = Weight::zero(); if !upward_messages.is_empty() { @@ -478,19 +475,14 @@ impl Pallet { .iter() .fold((0, 0), |(cnt, size), d| (cnt + 1, size + d.len() as u32)); - ::RelayDispatchQueues::mutate(¶, |v| { - v.extend(upward_messages.into_iter()) - }); + RelayDispatchQueues::::mutate(¶, |v| v.extend(upward_messages.into_iter())); - ::RelayDispatchQueueSize::mutate( - ¶, - |(ref mut cnt, ref mut size)| { - *cnt += extra_count; - *size += extra_size; - }, - ); + RelayDispatchQueueSize::::mutate(¶, |(ref mut cnt, ref mut size)| { + *cnt += extra_count; + *size += extra_size; + }); - ::NeedsDispatch::mutate(|v| { + NeedsDispatch::::mutate(|v| { if let Err(i) = v.binary_search(¶) { v.insert(i, para); } @@ -507,6 +499,8 @@ impl Pallet { /// Devote some time into dispatching pending upward messages. pub(crate) fn process_pending_upward_messages() -> Weight { + const MAX_MESSAGES_PER_BLOCK: u8 = 10; + let mut messages_processed = 0; let mut weight_used = Weight::zero(); let config = >::config(); @@ -514,7 +508,12 @@ impl Pallet { let mut queue_cache = QueueCache::new(); while let Some(dispatchee) = cursor.peek() { - if weight_used.any_gte(config.ump_service_total_weight) { + if weight_used.any_gte(config.ump_service_total_weight) || + messages_processed >= MAX_MESSAGES_PER_BLOCK + { + // Temporarily allow for processing of a max of 10 messages per block, until we + // properly account for proof size weights. + // // Then check whether we've reached or overshoot the // preferred weight for the dispatching stage. // @@ -536,13 +535,16 @@ impl Pallet { // our remaining weight limit, then consume it. let maybe_next = queue_cache.peek_front::(dispatchee); if let Some(upward_message) = maybe_next { + messages_processed += 1; match T::UmpSink::process_upward_message(dispatchee, upward_message, max_weight) { Ok(used) => { weight_used += used; let _ = queue_cache.consume_front::(dispatchee); }, Err((id, required)) => { - if required.any_gt(config.ump_max_individual_weight) { + let is_under_limit = Overweight::::count() < MAX_OVERWEIGHT_MESSAGES; + weight_used.saturating_accrue(T::DbWeight::get().reads(1)); + if required.any_gt(config.ump_max_individual_weight) && is_under_limit { // overweight - add to overweight queue and continue with message // execution consuming the message. let upward_message = queue_cache.consume_front::(dispatchee).expect( @@ -581,13 +583,13 @@ impl Pallet { /// Puts a given upward message into the list of overweight messages allowing it to be executed /// later. fn stash_overweight(sender: ParaId, upward_message: Vec) -> OverweightIndex { - let index = ::OverweightCount::mutate(|count| { + let index = OverweightCount::::mutate(|count| { let index = *count; *count += 1; index }); - ::Overweight::insert(index, (sender, upward_message)); + Overweight::::insert(index, (sender, upward_message)); index } } @@ -703,8 +705,8 @@ struct NeedsDispatchCursor { impl NeedsDispatchCursor { fn new() -> Self { - let needs_dispatch: Vec = as Store>::NeedsDispatch::get(); - let start_with = as Store>::NextDispatchRoundStartWith::get(); + let needs_dispatch: Vec = NeedsDispatch::::get(); + let start_with = NextDispatchRoundStartWith::::get(); let initial_index = match start_with { Some(para) => match needs_dispatch.binary_search(¶) { @@ -755,7 +757,7 @@ impl NeedsDispatchCursor { /// Flushes the dispatcher state into the persistent storage. fn flush(self) { let next_one = self.peek(); - as Store>::NextDispatchRoundStartWith::set(next_one); - as Store>::NeedsDispatch::put(self.needs_dispatch); + NextDispatchRoundStartWith::::set(next_one); + NeedsDispatch::::put(self.needs_dispatch); } } diff --git a/runtime/parachains/src/ump/benchmarking.rs b/runtime/parachains/src/ump/benchmarking.rs index a257da79b373..22860d2abbfc 100644 --- a/runtime/parachains/src/ump/benchmarking.rs +++ b/runtime/parachains/src/ump/benchmarking.rs @@ -32,7 +32,7 @@ fn queue_upward_msg( msg: UpwardMessage, ) { let len = msg.len() as u32; - let msgs = vec![msg]; + let msgs: UpwardMessages = vec![msg].try_into().unwrap(); Ump::::check_upward_messages(host_conf, para, &msgs).unwrap(); let _ = Ump::::receive_upward_messages(para, msgs); assert_last_event_type::(Event::UpwardMessagesReceived(para, 1, len).into()); @@ -42,8 +42,8 @@ fn queue_upward_msg( fn create_message_min_size(size: u32) -> Vec { // Create a message with an empty remark call to determine the encoding overhead let msg_size_empty_transact = VersionedXcm::::from(Xcm::(vec![Transact { - origin_type: OriginKind::SovereignAccount, - require_weight_at_most: Weight::MAX.ref_time(), + origin_kind: OriginKind::SovereignAccount, + require_weight_at_most: Weight::MAX, call: frame_system::Call::::remark_with_event { remark: vec![] }.encode().into(), }])) .encode() @@ -54,8 +54,8 @@ fn create_message_min_size(size: u32) -> Vec { let mut remark = Vec::new(); remark.resize(size, 0u8); let msg = VersionedXcm::::from(Xcm::(vec![Transact { - origin_type: OriginKind::SovereignAccount, - require_weight_at_most: Weight::MAX.ref_time(), + origin_kind: OriginKind::SovereignAccount, + require_weight_at_most: Weight::MAX, call: frame_system::Call::::remark_with_event { remark }.encode().into(), }])) .encode(); @@ -65,12 +65,11 @@ fn create_message_min_size(size: u32) -> Vec { } fn create_message_overweight() -> Vec { - let max_block_weight = T::BlockWeights::get().max_block; // We use a `set_code` Call because it let call = frame_system::Call::::set_code { code: vec![] }; VersionedXcm::::from(Xcm::(vec![Transact { - origin_type: OriginKind::Superuser, - require_weight_at_most: max_block_weight.ref_time(), + origin_kind: OriginKind::Superuser, + require_weight_at_most: Weight::MAX / 2, call: call.encode().into(), }])) .encode() @@ -107,7 +106,6 @@ frame_benchmarking::benchmarks! { service_overweight { let host_conf = configuration::ActiveConfig::::get(); - let weight = host_conf.ump_max_individual_weight + host_conf.ump_max_individual_weight + Weight::from_ref_time(1000000); let para = ParaId::from(1978); // The message's weight does not really matter here, as we add service_overweight's // max_weight parameter to the extrinsic's weight in the weight calculation. @@ -117,7 +115,7 @@ frame_benchmarking::benchmarks! { let msg = create_message_overweight::(); // This just makes sure that 0 is not a valid index and we can use it later on. - let _ = Ump::::service_overweight(RawOrigin::Root.into(), 0, Weight::from_ref_time(1000).set_proof_size(u64::MAX)); + let _ = Ump::::service_overweight(RawOrigin::Root.into(), 0, Weight::from_parts(1000, 1000)); // Start with the block number 1. This is needed because should an event be // emitted during the genesis block they will be implicitly wiped. frame_system::Pallet::::set_block_number(1u32.into()); diff --git a/runtime/parachains/src/ump/migration.rs b/runtime/parachains/src/ump/migration.rs new file mode 100644 index 000000000000..666d224b4b06 --- /dev/null +++ b/runtime/parachains/src/ump/migration.rs @@ -0,0 +1,49 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +use crate::ump::{Config, Overweight, Pallet}; +use frame_support::{ + pallet_prelude::*, + traits::{OnRuntimeUpgrade, StorageVersion}, + weights::Weight, +}; + +pub const STORAGE_VERSION: StorageVersion = StorageVersion::new(1); + +pub mod v1 { + use super::*; + + pub struct MigrateToV1(sp_std::marker::PhantomData); + impl OnRuntimeUpgrade for MigrateToV1 { + fn on_runtime_upgrade() -> Weight { + if StorageVersion::get::>() == 0 { + let mut weight = T::DbWeight::get().reads(1); + + let overweight_messages = Overweight::::initialize_counter() as u64; + log::info!("Initialized Overweight to {}", overweight_messages); + + weight.saturating_accrue(T::DbWeight::get().reads_writes(overweight_messages, 1)); + + StorageVersion::new(1).put::>(); + + weight.saturating_add(T::DbWeight::get().writes(1)) + } else { + log::warn!("skipping v1, should be removed"); + T::DbWeight::get().reads(1) + } + } + } +} diff --git a/runtime/parachains/src/ump/tests.rs b/runtime/parachains/src/ump/tests.rs index 23c5159eab0f..60cc02ff0ff7 100644 --- a/runtime/parachains/src/ump/tests.rs +++ b/runtime/parachains/src/ump/tests.rs @@ -34,12 +34,12 @@ pub(super) struct GenesisConfigBuilder { impl Default for GenesisConfigBuilder { fn default() -> Self { Self { - max_upward_message_size: 16, + max_upward_message_size: 32, max_upward_message_num_per_candidate: 2, max_upward_queue_count: 4, max_upward_queue_size: 64, - ump_service_total_weight: Weight::from_ref_time(1000).set_proof_size(1000), - ump_max_individual_weight: Weight::from_ref_time(100).set_proof_size(100), + ump_service_total_weight: Weight::from_parts(1000, 1000), + ump_max_individual_weight: Weight::from_parts(100, 100), } } } @@ -72,20 +72,20 @@ fn default_genesis_config() -> MockGenesisConfig { } fn queue_upward_msg(para: ParaId, msg: UpwardMessage) { - let msgs = vec![msg]; + let msgs: UpwardMessages = vec![msg].try_into().unwrap(); assert!(Ump::check_upward_messages(&Configuration::config(), para, &msgs).is_ok()); let _ = Ump::receive_upward_messages(para, msgs); } fn assert_storage_consistency_exhaustive() { // check that empty queues don't clutter the storage. - for (_para, queue) in ::RelayDispatchQueues::iter() { + for (_para, queue) in RelayDispatchQueues::::iter() { assert!(!queue.is_empty()); } // actually count the counts and sizes in queues and compare them to the bookkept version. - for (para, queue) in ::RelayDispatchQueues::iter() { - let (expected_count, expected_size) = ::RelayDispatchQueueSize::get(para); + for (para, queue) in RelayDispatchQueues::::iter() { + let (expected_count, expected_size) = RelayDispatchQueueSize::::get(para); let (actual_count, actual_size) = queue .into_iter() .fold((0, 0), |(acc_count, acc_size), x| (acc_count + 1, acc_size + x.len() as u32)); @@ -96,24 +96,22 @@ fn assert_storage_consistency_exhaustive() { // since we wipe the empty queues the sets of paras in queue contents, queue sizes and // need dispatch set should all be equal. - let queue_contents_set = ::RelayDispatchQueues::iter() + let queue_contents_set = + RelayDispatchQueues::::iter().map(|(k, _)| k).collect::>(); + let queue_sizes_set = RelayDispatchQueueSize::::iter() .map(|(k, _)| k) .collect::>(); - let queue_sizes_set = ::RelayDispatchQueueSize::iter() - .map(|(k, _)| k) - .collect::>(); - let needs_dispatch_set = - ::NeedsDispatch::get().into_iter().collect::>(); + let needs_dispatch_set = NeedsDispatch::::get().into_iter().collect::>(); assert_eq!(queue_contents_set, queue_sizes_set); assert_eq!(queue_contents_set, needs_dispatch_set); // `NextDispatchRoundStartWith` should point into a para that is tracked. - if let Some(para) = ::NextDispatchRoundStartWith::get() { + if let Some(para) = NextDispatchRoundStartWith::::get() { assert!(queue_contents_set.contains(¶)); } // `NeedsDispatch` is always sorted. - assert!(::NeedsDispatch::get().windows(2).all(|xs| xs[0] <= xs[1])); + assert!(NeedsDispatch::::get().windows(2).all(|xs| xs[0] <= xs[1])); } #[test] @@ -156,7 +154,7 @@ fn dispatch_resume_after_exceeding_dispatch_stage_weight() { new_test_ext( GenesisConfigBuilder { - ump_service_total_weight: Weight::from_ref_time(500).set_proof_size(500), + ump_service_total_weight: Weight::from_parts(500, 500), ..Default::default() } .build(), @@ -203,8 +201,8 @@ fn dispatch_keeps_message_after_weight_exhausted() { new_test_ext( GenesisConfigBuilder { - ump_service_total_weight: Weight::from_ref_time(500).set_proof_size(500), - ump_max_individual_weight: Weight::from_ref_time(300).set_proof_size(300), + ump_service_total_weight: Weight::from_parts(500, 500), + ump_max_individual_weight: Weight::from_parts(300, 300), ..Default::default() } .build(), @@ -243,7 +241,7 @@ fn dispatch_correctly_handle_remove_of_latest() { new_test_ext( GenesisConfigBuilder { - ump_service_total_weight: Weight::from_ref_time(900).set_proof_size(900), + ump_service_total_weight: Weight::from_parts(900, 900), ..Default::default() } .build(), @@ -269,7 +267,7 @@ fn verify_relay_dispatch_queue_size_is_externally_accessible() { // keys and is decodable into a (u32, u32). use parity_scale_codec::Decode as _; - use primitives::v2::well_known_keys; + use primitives::well_known_keys; let a = ParaId::from(228); let msg = vec![1, 2, 3]; @@ -296,7 +294,7 @@ fn service_overweight_unknown() { // the next test. new_test_ext(GenesisConfigBuilder::default().build()).execute_with(|| { assert_noop!( - Ump::service_overweight(RuntimeOrigin::root(), 0, Weight::from_ref_time(1000)), + Ump::service_overweight(RuntimeOrigin::root(), 0, Weight::from_parts(1000, 1000)), Error::::UnknownMessageIndex ); }); @@ -312,8 +310,8 @@ fn overweight_queue_works() { new_test_ext( GenesisConfigBuilder { - ump_service_total_weight: Weight::from_ref_time(900).set_proof_size(900), - ump_max_individual_weight: Weight::from_ref_time(300).set_proof_size(300), + ump_service_total_weight: Weight::from_parts(900, 900), + ump_max_individual_weight: Weight::from_parts(300, 300), ..Default::default() } .build(), @@ -338,7 +336,7 @@ fn overweight_queue_works() { para_a, upward_message_id(&a_msg_3[..]), 0, - Weight::from_ref_time(500), + Weight::from_parts(500, 500), ) .into(), ); @@ -346,18 +344,18 @@ fn overweight_queue_works() { // Now verify that if we wanted to service this overweight message with less than enough // weight it will fail. assert_noop!( - Ump::service_overweight(RuntimeOrigin::root(), 0, Weight::from_ref_time(499)), + Ump::service_overweight(RuntimeOrigin::root(), 0, Weight::from_parts(499, 499)), Error::::WeightOverLimit ); // ... and if we try to service it with just enough weight it will succeed as well. - assert_ok!(Ump::service_overweight(RuntimeOrigin::root(), 0, Weight::from_ref_time(500))); - assert_last_event(Event::OverweightServiced(0, Weight::from_ref_time(500)).into()); + assert_ok!(Ump::service_overweight(RuntimeOrigin::root(), 0, Weight::from_parts(500, 500))); + assert_last_event(Event::OverweightServiced(0, Weight::from_parts(500, 500)).into()); // ... and if we try to service a message with index that doesn't exist it will error // out. assert_noop!( - Ump::service_overweight(RuntimeOrigin::root(), 1, Weight::from_ref_time(1000)), + Ump::service_overweight(RuntimeOrigin::root(), 1, Weight::from_parts(1000, 1000)), Error::::UnknownMessageIndex ); }); diff --git a/runtime/parachains/src/util.rs b/runtime/parachains/src/util.rs index e4c538ed2c66..b4e552d4c9b6 100644 --- a/runtime/parachains/src/util.rs +++ b/runtime/parachains/src/util.rs @@ -17,7 +17,7 @@ //! Utilities that don't belong to any particular module but may draw //! on all modules. -use primitives::v2::{Id as ParaId, PersistedValidationData, ValidatorIndex}; +use primitives::{Id as ParaId, PersistedValidationData, ValidatorIndex}; use sp_std::{collections::btree_set::BTreeSet, vec::Vec}; use crate::{configuration, hrmp, paras}; @@ -103,7 +103,7 @@ mod tests { use sp_std::vec::Vec; use crate::util::{split_active_subset, take_active_subset}; - use primitives::v2::ValidatorIndex; + use primitives::ValidatorIndex; #[test] fn take_active_subset_is_compatible_with_split_active_subset() { diff --git a/runtime/polkadot/Cargo.toml b/runtime/polkadot/Cargo.toml index 3c40ae7f1e4b..dc8c6d57d715 100644 --- a/runtime/polkadot/Cargo.toml +++ b/runtime/polkadot/Cargo.toml @@ -7,82 +7,83 @@ edition.workspace = true [dependencies] bitvec = { version = "1.0.0", default-features = false, features = ["alloc"] } -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["derive", "max-encoded-len"] } +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["derive", "max-encoded-len"] } scale-info = { version = "2.1.2", default-features = false, features = ["derive"] } log = { version = "0.4.17", default-features = false } rustc-hex = { version = "2.1.0", default-features = false } -serde = { version = "1.0.137", default-features = false } +serde = { version = "1.0.139", default-features = false } serde_derive = { version = "1.0.117", optional = true } static_assertions = "1.1.0" smallvec = "1.8.0" -authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -beefy-primitives = { git = "https://github.com/paritytech/substrate", default-features = false, package = "sp-beefy" , branch = "polkadot-v0.9.36" } -block-builder-api = { package = "sp-block-builder", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -offchain-primitives = { package = "sp-offchain", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -tx-pool-api = { package = "sp-transaction-pool", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-mmr-primitives = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-npos-elections = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +beefy-primitives = { package = "sp-consensus-beefy", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +block-builder-api = { package = "sp-block-builder", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +offchain-primitives = { package = "sp-offchain", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +tx-pool-api = { package = "sp-transaction-pool", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-mmr-primitives = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-npos-elections = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } -pallet-authority-discovery = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-babe = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-bags-list = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-bounties = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-child-bounties = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-collective = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-democracy = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-elections-phragmen = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-election-provider-multi-phase = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-fast-unstake = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-grandpa = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-identity = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-im-online = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-indices = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-membership = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-nomination-pools = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-nomination-pools-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-offences = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-preimage = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-proxy = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-scheduler = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-staking-reward-curve = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -frame-system = {git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +pallet-authority-discovery = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-babe = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-bags-list = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-bounties = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-child-bounties = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-collective = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-democracy = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-elections-phragmen = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-election-provider-multi-phase = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-fast-unstake = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-grandpa = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-identity = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-im-online = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-indices = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-membership = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-nomination-pools = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-nomination-pools-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-offences = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-preimage = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-proxy = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-scheduler = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-staking-reward-curve = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +pallet-staking-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-system = {git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } polkadot-runtime-constants = { package = "polkadot-runtime-constants", path = "./constants", default-features = false } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-tips = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-treasury = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-vesting = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-election-provider-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-tips = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-treasury = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-vesting = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-election-provider-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } pallet-xcm = { path = "../../xcm/pallet-xcm", default-features = false } -frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } -frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } -frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } -pallet-election-provider-support-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } -pallet-offences-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } -pallet-session-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } -pallet-nomination-pools-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } +frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } +frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } +pallet-election-provider-support-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } +pallet-offences-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } +pallet-session-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } +pallet-nomination-pools-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } hex-literal = { version = "0.3.4", optional = true } runtime-common = { package = "polkadot-runtime-common", path = "../common", default-features = false } @@ -96,16 +97,16 @@ xcm-builder = { package = "xcm-builder", path = "../../xcm/xcm-builder", default [dev-dependencies] hex-literal = "0.3.4" tiny-keccak = { version = "2.0.2", features = ["keccak"] } -keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-trie = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-trie = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } serde_json = "1.0.81" separator = "0.4.1" -remote-externalities = { git = "https://github.com/paritytech/substrate", package = "frame-remote-externalities" , branch = "polkadot-v0.9.36" } -tokio = { version = "1.22.0", features = ["macros"] } -sp-tracing = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +remote-externalities = { git = "https://github.com/paritytech/substrate", package = "frame-remote-externalities" , branch = "polkadot-v0.9.40" } +tokio = { version = "1.24.2", features = ["macros"] } +sp-tracing = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } [features] default = ["std"] @@ -155,6 +156,7 @@ std = [ "pallet-scheduler/std", "pallet-session/std", "pallet-staking/std", + "pallet-staking-runtime-api/std", "pallet-timestamp/std", "pallet-treasury/std", "pallet-tips/std", diff --git a/runtime/polkadot/constants/Cargo.toml b/runtime/polkadot/constants/Cargo.toml index e2780e13cc60..6cef9cb2235d 100644 --- a/runtime/polkadot/constants/Cargo.toml +++ b/runtime/polkadot/constants/Cargo.toml @@ -7,16 +7,19 @@ edition.workspace = true [dependencies] smallvec = "1.8.0" -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } primitives = { package = "polkadot-primitives", path = "../../../primitives", default-features = false } runtime-common = { package = "polkadot-runtime-common", path = "../../common", default-features = false } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-weights = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-weights = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } [features] default = ["std"] std = [ + "frame-support/std", + "primitives/std", + "runtime-common/std", "sp-core/std", "sp-runtime/std", "sp-weights/std" diff --git a/runtime/polkadot/constants/src/lib.rs b/runtime/polkadot/constants/src/lib.rs index be37482968a8..c205415acb6b 100644 --- a/runtime/polkadot/constants/src/lib.rs +++ b/runtime/polkadot/constants/src/lib.rs @@ -22,7 +22,7 @@ pub use self::currency::DOLLARS; /// Money matters. pub mod currency { - use primitives::v2::Balance; + use primitives::Balance; /// The existential deposit. pub const EXISTENTIAL_DEPOSIT: Balance = 100 * CENTS; @@ -39,7 +39,7 @@ pub mod currency { /// Time and blocks. pub mod time { - use primitives::v2::{BlockNumber, Moment}; + use primitives::{BlockNumber, Moment}; use runtime_common::prod_or_fast; pub const MILLISECS_PER_BLOCK: Moment = 6000; pub const SLOT_DURATION: Moment = MILLISECS_PER_BLOCK; @@ -64,7 +64,7 @@ pub mod fee { use frame_support::weights::{ WeightToFeeCoefficient, WeightToFeeCoefficients, WeightToFeePolynomial, }; - use primitives::v2::Balance; + use primitives::Balance; use smallvec::smallvec; pub use sp_runtime::Perbill; @@ -98,6 +98,18 @@ pub mod fee { } } +/// XCM protocol related constants. +pub mod xcm { + /// Pluralistic bodies existing within the consensus. + pub mod body { + // Preallocated for the Root body. + #[allow(dead_code)] + const ROOT_INDEX: u32 = 0; + // The bodies corresponding to the Polkadot OpenGov Origins. + pub const FELLOWSHIP_ADMIN_INDEX: u32 = 1; + } +} + #[cfg(test)] mod tests { use super::{ diff --git a/runtime/polkadot/constants/src/weights/block_weights.rs b/runtime/polkadot/constants/src/weights/block_weights.rs index f9231434cdaf..e7cfbc093b31 100644 --- a/runtime/polkadot/constants/src/weights/block_weights.rs +++ b/runtime/polkadot/constants/src/weights/block_weights.rs @@ -14,8 +14,8 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16 (Y/M/D) -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16 (Y/M/D) +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! //! SHORT-NAME: `block`, LONG-NAME: `BlockExecution`, RUNTIME: `Development` //! WARMUPS: `10`, REPEAT: `100` @@ -42,17 +42,17 @@ parameter_types! { /// Calculated by multiplying the *Average* with `1.0` and adding `0`. /// /// Stats nanoseconds: - /// Min, Max: 5_985_342, 6_305_787 - /// Average: 6_062_818 - /// Median: 6_038_168 - /// Std-Dev: 73457.12 + /// Min, Max: 5_934_436, 6_171_262 + /// Average: 6_010_063 + /// Median: 6_003_352 + /// Std-Dev: 49111.71 /// /// Percentiles nanoseconds: - /// 99th: 6_284_621 - /// 95th: 6_214_705 - /// 75th: 6_089_252 + /// 99th: 6_158_194 + /// 95th: 6_093_234 + /// 75th: 6_031_680 pub const BlockExecutionWeight: Weight = - Weight::from_ref_time(WEIGHT_REF_TIME_PER_NANOS.saturating_mul(6_062_818)); + Weight::from_parts(WEIGHT_REF_TIME_PER_NANOS.saturating_mul(6_010_063), 0); } #[cfg(test)] diff --git a/runtime/polkadot/constants/src/weights/extrinsic_weights.rs b/runtime/polkadot/constants/src/weights/extrinsic_weights.rs index 67ddbec26837..a9b401433e16 100644 --- a/runtime/polkadot/constants/src/weights/extrinsic_weights.rs +++ b/runtime/polkadot/constants/src/weights/extrinsic_weights.rs @@ -14,8 +14,8 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16 (Y/M/D) -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16 (Y/M/D) +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! //! SHORT-NAME: `extrinsic`, LONG-NAME: `ExtrinsicBase`, RUNTIME: `Development` //! WARMUPS: `10`, REPEAT: `100` @@ -42,17 +42,17 @@ parameter_types! { /// Calculated by multiplying the *Average* with `1.0` and adding `0`. /// /// Stats nanoseconds: - /// Min, Max: 97_487, 99_047 - /// Average: 97_884 - /// Median: 97_809 - /// Std-Dev: 317.39 + /// Min, Max: 103_764, 105_485 + /// Average: 104_371 + /// Median: 104_324 + /// Std-Dev: 336.27 /// /// Percentiles nanoseconds: - /// 99th: 98_875 - /// 95th: 98_689 - /// 75th: 97_943 + /// 99th: 105_475 + /// 95th: 105_028 + /// 75th: 104_509 pub const ExtrinsicBaseWeight: Weight = - Weight::from_ref_time(WEIGHT_REF_TIME_PER_NANOS.saturating_mul(97_884)); + Weight::from_parts(WEIGHT_REF_TIME_PER_NANOS.saturating_mul(104_371), 0); } #[cfg(test)] diff --git a/runtime/polkadot/src/lib.rs b/runtime/polkadot/src/lib.rs index 24f65a37d2a3..36bbb3176890 100644 --- a/runtime/polkadot/src/lib.rs +++ b/runtime/polkadot/src/lib.rs @@ -36,24 +36,24 @@ use runtime_parachains::{ }; use authority_discovery_primitives::AuthorityId as AuthorityDiscoveryId; -use beefy_primitives::crypto::AuthorityId as BeefyId; +use beefy_primitives::crypto::{AuthorityId as BeefyId, Signature as BeefySignature}; use frame_election_provider_support::{generate_solution_type, onchain, SequentialPhragmen}; use frame_support::{ construct_runtime, parameter_types, traits::{ - ConstU32, EitherOfDiverse, InstanceFilter, KeyOwnerProofSystem, LockIdentifier, + ConstU32, EitherOf, EitherOfDiverse, InstanceFilter, KeyOwnerProofSystem, LockIdentifier, PrivilegeCmp, WithdrawReasons, }, weights::ConstantMultiplier, PalletId, RuntimeDebug, }; -use frame_system::EnsureRoot; +use frame_system::{EnsureRoot, EnsureWithSuccess}; use pallet_grandpa::{fg_primitives, AuthorityId as GrandpaId}; use pallet_im_online::sr25519::AuthorityId as ImOnlineId; use pallet_session::historical as session_historical; use pallet_transaction_payment::{FeeDetails, RuntimeDispatchInfo}; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; -use primitives::v2::{ +use primitives::{ AccountId, AccountIndex, Balance, BlockNumber, CandidateEvent, CommittedCandidateReceipt, CoreState, GroupRotationInfo, Hash, Id as ParaId, InboundDownwardMessage, InboundHrmpMessage, Moment, Nonce, OccupiedCoreAssumption, PersistedValidationData, ScrapedOnChainVotes, @@ -114,13 +114,13 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("polkadot"), impl_name: create_runtime_str!("parity-polkadot"), authoring_version: 0, - spec_version: 9360, + spec_version: 9400, impl_version: 0, #[cfg(not(feature = "disable-runtime-api"))] apis: RUNTIME_API_VERSIONS, #[cfg(feature = "disable-runtime-api")] apis: sp_version::create_apis_vec![[]], - transaction_version: 19, + transaction_version: 22, state_version: 0, }; @@ -257,24 +257,15 @@ impl pallet_babe::Config for Runtime { type DisabledValidators = Session; - type KeyOwnerProofSystem = Historical; - - type KeyOwnerProof = >::Proof; - - type KeyOwnerIdentification = >::IdentificationTuple; - - type HandleEquivocation = - pallet_babe::EquivocationHandler; - type WeightInfo = (); type MaxAuthorities = MaxAuthorities; + + type KeyOwnerProof = + >::Proof; + + type EquivocationReportSystem = + pallet_babe::EquivocationReportSystem; } parameter_types! { @@ -333,15 +324,8 @@ impl pallet_timestamp::Config for Runtime { type WeightInfo = weights::pallet_timestamp::WeightInfo; } -parameter_types! { - pub const UncleGenerations: u32 = 0; -} - -// TODO: substrate#2986 implement this properly impl pallet_authorship::Config for Runtime { type FindAuthor = pallet_session::FindAccountFromAuthorIndex; - type UncleGenerations = UncleGenerations; - type FilterUncle = (); type EventHandler = (Staking, ImOnline); } @@ -442,6 +426,7 @@ impl pallet_election_provider_multi_phase::MinerConfig for Runtime { as frame_election_provider_support::ElectionDataProvider >::MaxVotesPerVoter; + type MaxWinners = MaxActiveValidators; // The unsigned submissions have to respect the weight of the submit_unsigned call, thus their // weight estimate function is wired to this call's weight. @@ -553,7 +538,7 @@ parameter_types! { pub const MaxNominations: u32 = ::LIMIT as u32; } -type SlashCancelOrigin = EitherOfDiverse< +type StakingAdminOrigin = EitherOfDiverse< EnsureRoot, pallet_collective::EnsureProportionAtLeast, >; @@ -599,8 +584,7 @@ impl pallet_staking::Config for Runtime { type SessionsPerEra = SessionsPerEra; type BondingDuration = BondingDuration; type SlashDeferDuration = SlashDeferDuration; - // A super-majority of the council can cancel the slash. - type SlashCancelOrigin = SlashCancelOrigin; + type AdminOrigin = StakingAdminOrigin; type SessionInterface = Self; type EraPayout = EraPayout; type MaxNominatorRewardedPerValidator = MaxNominatorRewardedPerValidator; @@ -620,14 +604,17 @@ impl pallet_staking::Config for Runtime { impl pallet_fast_unstake::Config for Runtime { type RuntimeEvent = RuntimeEvent; type Currency = Balances; - type BatchSize = frame_support::traits::ConstU32<64>; + type BatchSize = frame_support::traits::ConstU32<16>; type Deposit = frame_support::traits::ConstU128<{ UNITS }>; type ControlOrigin = EitherOfDiverse< EnsureRoot, pallet_collective::EnsureProportionAtLeast, >; - type WeightInfo = weights::pallet_fast_unstake::WeightInfo; type Staking = Staking; + type MaxErasToCheckPerBlock = ConstU32<1>; + #[cfg(feature = "runtime-benchmarks")] + type MaxBackersPerValidator = MaxNominatorRewardedPerValidator; + type WeightInfo = weights::pallet_fast_unstake::WeightInfo; } parameter_types! { @@ -675,6 +662,7 @@ impl pallet_democracy::Config for Runtime { type LaunchPeriod = LaunchPeriod; type VotingPeriod = VotingPeriod; type MinimumDeposit = MinimumDeposit; + type SubmitOrigin = frame_system::EnsureSigned; /// A straight majority of the council can decide what their next motion is. type ExternalOrigin = EitherOfDiverse< pallet_collective::EnsureProportionAtLeast, @@ -745,6 +733,7 @@ impl pallet_collective::Config for Runtime { type MaxProposals = CouncilMaxProposals; type MaxMembers = CouncilMaxMembers; type DefaultVote = pallet_collective::PrimeDefaultVote; + type SetMembersOrigin = EnsureRoot; type WeightInfo = weights::pallet_collective_council::WeightInfo; } @@ -760,6 +749,7 @@ parameter_types! { pub const DesiredMembers: u32 = 13; pub const DesiredRunnersUp: u32 = 20; pub const MaxVoters: u32 = 10 * 1000; + pub const MaxVotesPerVoter: u32 = 16; pub const MaxCandidates: u32 = 1000; pub const PhragmenElectionPalletId: LockIdentifier = *b"phrelect"; } @@ -782,6 +772,7 @@ impl pallet_elections_phragmen::Config for Runtime { type DesiredRunnersUp = DesiredRunnersUp; type TermDuration = TermDuration; type MaxVoters = MaxVoters; + type MaxVotesPerVoter = MaxVotesPerVoter; type MaxCandidates = MaxCandidates; type WeightInfo = weights::pallet_elections_phragmen::WeightInfo; } @@ -801,6 +792,7 @@ impl pallet_collective::Config for Runtime { type MaxProposals = TechnicalMaxProposals; type MaxMembers = TechnicalMaxMembers; type DefaultVote = pallet_collective::PrimeDefaultVote; + type SetMembersOrigin = EnsureRoot; type WeightInfo = weights::pallet_collective_technical_committee::WeightInfo; } @@ -834,6 +826,8 @@ parameter_types! { pub const MaxKeys: u32 = 10_000; pub const MaxPeerInHeartbeats: u32 = 10_000; pub const MaxPeerDataEncodingSize: u32 = 1_000; + pub const RootSpendOriginMaxAmount: Balance = Balance::MAX; + pub const CouncilSpendOriginMaxAmount: Balance = Balance::MAX; } type ApproveOrigin = EitherOfDiverse< @@ -857,7 +851,14 @@ impl pallet_treasury::Config for Runtime { type SpendFunds = Bounties; type MaxApprovals = MaxApprovals; type WeightInfo = weights::pallet_treasury::WeightInfo; - type SpendOrigin = frame_support::traits::NeverEnsureOrigin; + type SpendOrigin = EitherOf< + frame_system::EnsureRootWithSuccess, + EnsureWithSuccess< + pallet_collective::EnsureProportionAtLeast, + AccountId, + CouncilSpendOriginMaxAmount, + >, + >; } parameter_types! { @@ -938,27 +939,21 @@ impl pallet_im_online::Config for Runtime { type MaxPeerDataEncodingSize = MaxPeerDataEncodingSize; } +parameter_types! { + pub MaxSetIdSessionEntries: u32 = BondingDuration::get() * SessionsPerEra::get(); +} + impl pallet_grandpa::Config for Runtime { type RuntimeEvent = RuntimeEvent; - type KeyOwnerProof = - >::Proof; - - type KeyOwnerIdentification = >::IdentificationTuple; - - type KeyOwnerProofSystem = Historical; - - type HandleEquivocation = pallet_grandpa::EquivocationHandler< - Self::KeyOwnerIdentification, - Offences, - ReportLongevity, - >; - type WeightInfo = (); type MaxAuthorities = MaxAuthorities; + type MaxSetIdSessionEntries = MaxSetIdSessionEntries; + + type KeyOwnerProof = >::Proof; + + type EquivocationReportSystem = + pallet_grandpa::EquivocationReportSystem; } /// Submits a transaction with the node's public and signature type. Adheres to the signed extension @@ -1170,7 +1165,6 @@ impl InstanceFilter for ProxyType { RuntimeCall::Indices(pallet_indices::Call::freeze{..}) | // Specifically omitting Indices `transfer`, `force_transfer` // Specifically omitting the entire Balances pallet - RuntimeCall::Authorship(..) | RuntimeCall::Staking(..) | RuntimeCall::Session(..) | RuntimeCall::Grandpa(..) | @@ -1304,7 +1298,7 @@ impl parachains_ump::Config for Runtime { crate::parachains_ump::XcmSink, Runtime>; type FirstMessageFactorPercent = FirstMessageFactorPercent; type ExecuteOverweightOrigin = EnsureRoot; - type WeightInfo = parachains_ump::TestWeightInfo; + type WeightInfo = weights::runtime_parachains_ump::WeightInfo; } impl parachains_dmp::Config for Runtime {} @@ -1470,7 +1464,7 @@ impl frame_support::traits::OnRuntimeUpgrade for InitiateNominationPools { construct_runtime! { pub enum Runtime where Block = Block, - NodeBlock = primitives::v2::Block, + NodeBlock = primitives::Block, UncheckedExtrinsic = UncheckedExtrinsic { // Basic stuff; balances is uncallable initially. @@ -1489,7 +1483,7 @@ construct_runtime! { // Consensus support. // Authorship must be before session in order to note author in the correct session and era // for im-online and staking. - Authorship: pallet_authorship::{Pallet, Call, Storage} = 6, + Authorship: pallet_authorship::{Pallet, Storage} = 6, Staking: pallet_staking::{Pallet, Call, Storage, Config, Event} = 7, Offences: pallet_offences::{Pallet, Storage, Event} = 8, Historical: session_historical::{Pallet} = 33, @@ -1591,14 +1585,22 @@ pub type SignedExtra = ( claims::PrevalidateAttests, ); -pub struct StakingMigrationV11OldPallet; -impl Get<&'static str> for StakingMigrationV11OldPallet { - fn get() -> &'static str { - "VoterList" +pub struct NominationPoolsMigrationV4OldPallet; +impl Get for NominationPoolsMigrationV4OldPallet { + fn get() -> Perbill { + Perbill::zero() } } -pub type Migrations = (); +/// All migrations that will run on the next runtime upgrade. +/// +/// Should be cleared after every release. +pub type Migrations = ( + pallet_nomination_pools::migration::v4::MigrateToV4< + Runtime, + NominationPoolsMigrationV4OldPallet, + >, +); /// Unchecked extrinsic type as expected by this runtime. pub type UncheckedExtrinsic = @@ -1669,6 +1671,8 @@ mod benches { [pallet_treasury, Treasury] [pallet_utility, Utility] [pallet_vesting, Vesting] + // XCM + [pallet_xcm, XcmPallet] ); } @@ -1721,7 +1725,21 @@ sp_api::impl_runtime_apis! { Balance, > for Runtime { fn pending_rewards(member: AccountId) -> Balance { - NominationPools::pending_rewards(member).unwrap_or_default() + NominationPools::api_pending_rewards(member).unwrap_or_default() + } + + fn points_to_balance(pool_id: pallet_nomination_pools::PoolId, points: Balance) -> Balance { + NominationPools::api_points_to_balance(pool_id, points) + } + + fn balance_to_points(pool_id: pallet_nomination_pools::PoolId, new_funds: Balance) -> Balance { + NominationPools::api_balance_to_points(pool_id, new_funds) + } + } + + impl pallet_staking_runtime_api::StakingApi for Runtime { + fn nominations_quota(balance: Balance) -> u32 { + Staking::api_nominations_quota(balance) } } @@ -1771,7 +1789,7 @@ sp_api::impl_runtime_apis! { fn check_validation_outputs( para_id: ParaId, - outputs: primitives::v2::CandidateCommitments, + outputs: primitives::CandidateCommitments, ) -> bool { parachains_runtime_api_impl::check_validation_outputs::(para_id, outputs) } @@ -1823,8 +1841,8 @@ sp_api::impl_runtime_apis! { } fn submit_pvf_check_statement( - stmt: primitives::v2::PvfCheckStatement, - signature: primitives::v2::ValidatorSignature, + stmt: primitives::PvfCheckStatement, + signature: primitives::ValidatorSignature, ) { parachains_runtime_api_impl::submit_pvf_check_statement::(stmt, signature) } @@ -1841,10 +1859,33 @@ sp_api::impl_runtime_apis! { } impl beefy_primitives::BeefyApi for Runtime { + fn beefy_genesis() -> Option { + // dummy implementation due to lack of BEEFY pallet. + None + } + fn validator_set() -> Option> { // dummy implementation due to lack of BEEFY pallet. None } + + fn submit_report_equivocation_unsigned_extrinsic( + _equivocation_proof: beefy_primitives::EquivocationProof< + BlockNumber, + BeefyId, + BeefySignature, + >, + _key_owner_proof: beefy_primitives::OpaqueKeyOwnershipProof, + ) -> Option<()> { + None + } + + fn generate_key_ownership_proof( + _set_id: beefy_primitives::ValidatorSetId, + _authority_id: BeefyId, + ) -> Option { + None + } } impl mmr::MmrApi for Runtime { @@ -1997,6 +2038,12 @@ sp_api::impl_runtime_apis! { fn query_fee_details(uxt: ::Extrinsic, len: u32) -> FeeDetails { TransactionPayment::query_fee_details(uxt, len) } + fn query_weight_to_fee(weight: Weight) -> Balance { + TransactionPayment::weight_to_fee(weight) + } + fn query_length_to_fee(length: u32) -> Balance { + TransactionPayment::length_to_fee(length) + } } impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi @@ -2008,11 +2055,17 @@ sp_api::impl_runtime_apis! { fn query_call_fee_details(call: RuntimeCall, len: u32) -> FeeDetails { TransactionPayment::query_call_fee_details(call, len) } + fn query_weight_to_fee(weight: Weight) -> Balance { + TransactionPayment::weight_to_fee(weight) + } + fn query_length_to_fee(length: u32) -> Balance { + TransactionPayment::length_to_fee(length) + } } #[cfg(feature = "try-runtime")] impl frame_try_runtime::TryRuntime for Runtime { - fn on_runtime_upgrade(checks: bool) -> (Weight, Weight) { + fn on_runtime_upgrade(checks: frame_try_runtime::UpgradeCheckSelect) -> (Weight, Weight) { log::info!("try-runtime::on_runtime_upgrade polkadot."); let weight = Executive::try_runtime_upgrade(checks).unwrap(); (weight, BlockWeights::get().max_block) @@ -2326,6 +2379,19 @@ mod multiplier_tests { }) } + #[test] + fn fast_unstake_estimate() { + use pallet_fast_unstake::WeightInfo; + let block_time = BlockWeights::get().max_block.ref_time() as f32; + let on_idle = weights::pallet_fast_unstake::WeightInfo::::on_idle_check( + 300, + ::BatchSize::get(), + ) + .ref_time() as f32; + println!("ratio of block weight for full batch fast-unstake {}", on_idle / block_time); + assert!(on_idle / block_time <= 0.5f32) + } + #[test] #[ignore] fn multiplier_growth_simulator() { @@ -2410,7 +2476,7 @@ mod multiplier_tests { #[cfg(all(test, feature = "try-runtime"))] mod remote_tests { use super::*; - use frame_try_runtime::runtime_decl_for_TryRuntime::TryRuntime; + use frame_try_runtime::{runtime_decl_for_try_runtime::TryRuntime, UpgradeCheckSelect}; use remote_externalities::{ Builder, Mode, OfflineConfig, OnlineConfig, SnapshotConfig, Transport, }; @@ -2418,6 +2484,10 @@ mod remote_tests { #[tokio::test] async fn run_migrations() { + if var("RUN_MIGRATION_TESTS").is_err() { + return + } + sp_tracing::try_init_simple(); let transport: Transport = var("WS").unwrap_or("wss://rpc.polkadot.io:443".to_string()).into(); @@ -2438,6 +2508,35 @@ mod remote_tests { .build() .await .unwrap(); - ext.execute_with(|| Runtime::on_runtime_upgrade(true)); + ext.execute_with(|| Runtime::on_runtime_upgrade(UpgradeCheckSelect::PreAndPost)); + } + + #[tokio::test] + #[ignore = "this test is meant to be executed manually"] + async fn try_fast_unstake_all() { + sp_tracing::try_init_simple(); + let transport: Transport = + var("WS").unwrap_or("wss://rpc.polkadot.io:443".to_string()).into(); + let maybe_state_snapshot: Option = var("SNAP").map(|s| s.into()).ok(); + let mut ext = Builder::::default() + .mode(if let Some(state_snapshot) = maybe_state_snapshot { + Mode::OfflineOrElseOnline( + OfflineConfig { state_snapshot: state_snapshot.clone() }, + OnlineConfig { + transport, + state_snapshot: Some(state_snapshot), + ..Default::default() + }, + ) + } else { + Mode::Online(OnlineConfig { transport, ..Default::default() }) + }) + .build() + .await + .unwrap(); + ext.execute_with(|| { + pallet_fast_unstake::ErasToCheckPerBlock::::put(1); + runtime_common::try_runtime::migrate_all_inactive_nominators::() + }); } } diff --git a/runtime/polkadot/src/weights/frame_benchmarking_baseline.rs b/runtime/polkadot/src/weights/frame_benchmarking_baseline.rs index eb6fb793f33c..36907c2f5131 100644 --- a/runtime/polkadot/src/weights/frame_benchmarking_baseline.rs +++ b/runtime/polkadot/src/weights/frame_benchmarking_baseline.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `frame_benchmarking::baseline` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -46,52 +47,57 @@ pub struct WeightInfo(PhantomData); impl frame_benchmarking::baseline::WeightInfo for WeightInfo { /// The range of component `i` is `[0, 1000000]`. fn addition(_i: u32, ) -> Weight { - // Minimum execution time: 127 nanoseconds. - Weight::from_ref_time(161_011) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 158_000 picoseconds. + Weight::from_parts(190_632, 0) + .saturating_add(Weight::from_parts(0, 0)) } /// The range of component `i` is `[0, 1000000]`. fn subtraction(_i: u32, ) -> Weight { - // Minimum execution time: 125 nanoseconds. - Weight::from_ref_time(166_605) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 149_000 picoseconds. + Weight::from_parts(183_147, 0) + .saturating_add(Weight::from_parts(0, 0)) } /// The range of component `i` is `[0, 1000000]`. fn multiplication(_i: u32, ) -> Weight { - // Minimum execution time: 121 nanoseconds. - Weight::from_ref_time(156_392) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 155_000 picoseconds. + Weight::from_parts(184_117, 0) + .saturating_add(Weight::from_parts(0, 0)) } /// The range of component `i` is `[0, 1000000]`. fn division(_i: u32, ) -> Weight { - // Minimum execution time: 115 nanoseconds. - Weight::from_ref_time(158_966) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 147_000 picoseconds. + Weight::from_parts(184_827, 0) + .saturating_add(Weight::from_parts(0, 0)) } - /// The range of component `i` is `[0, 100]`. - fn hashing(_i: u32, ) -> Weight { - // Minimum execution time: 20_174_737 nanoseconds. - Weight::from_ref_time(20_470_069_016) + fn hashing() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 19_094_522_000 picoseconds. + Weight::from_parts(19_201_969_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } /// The range of component `i` is `[0, 100]`. fn sr25519_verification(i: u32, ) -> Weight { - // Minimum execution time: 152 nanoseconds. - Weight::from_ref_time(186_000) - // Standard Error: 10_605 - .saturating_add(Weight::from_ref_time(47_088_039).saturating_mul(i.into())) - } - // Storage: Skipped Metadata (r:0 w:0) - /// The range of component `i` is `[0, 1000]`. - fn storage_read(i: u32, ) -> Weight { - // Minimum execution time: 138 nanoseconds. - Weight::from_ref_time(155_000) - // Standard Error: 4_456 - .saturating_add(Weight::from_ref_time(1_940_845).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) - } - // Storage: Skipped Metadata (r:0 w:0) - /// The range of component `i` is `[0, 1000]`. - fn storage_write(i: u32, ) -> Weight { - // Minimum execution time: 156 nanoseconds. - Weight::from_ref_time(166_000) - // Standard Error: 822 - .saturating_add(Weight::from_ref_time(343_137).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 183_000 picoseconds. + Weight::from_parts(208_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 15_974 + .saturating_add(Weight::from_parts(47_488_580, 0).saturating_mul(i.into())) } } diff --git a/runtime/polkadot/src/weights/frame_election_provider_support.rs b/runtime/polkadot/src/weights/frame_election_provider_support.rs index b8e82d973295..7b1fff037087 100644 --- a/runtime/polkadot/src/weights/frame_election_provider_support.rs +++ b/runtime/polkadot/src/weights/frame_election_provider_support.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `frame_election_provider_support` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -48,22 +49,30 @@ impl frame_election_provider_support::WeightInfo for We /// The range of component `t` is `[500, 1000]`. /// The range of component `d` is `[5, 16]`. fn phragmen(v: u32, _t: u32, d: u32, ) -> Weight { - // Minimum execution time: 5_779_497 nanoseconds. - Weight::from_ref_time(5_840_231_000) - // Standard Error: 137_577 - .saturating_add(Weight::from_ref_time(5_645_822).saturating_mul(v.into())) - // Standard Error: 14_065_464 - .saturating_add(Weight::from_ref_time(1_531_225_802).saturating_mul(d.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 6_461_495_000 picoseconds. + Weight::from_parts(6_559_532_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 142_541 + .saturating_add(Weight::from_parts(6_026_166, 0).saturating_mul(v.into())) + // Standard Error: 14_572_924 + .saturating_add(Weight::from_parts(1_559_650_434, 0).saturating_mul(d.into())) } /// The range of component `v` is `[1000, 2000]`. /// The range of component `t` is `[500, 1000]`. /// The range of component `d` is `[5, 16]`. fn phragmms(v: u32, _t: u32, d: u32, ) -> Weight { - // Minimum execution time: 4_463_683 nanoseconds. - Weight::from_ref_time(4_491_123_000) - // Standard Error: 145_041 - .saturating_add(Weight::from_ref_time(5_493_161).saturating_mul(v.into())) - // Standard Error: 14_828_496 - .saturating_add(Weight::from_ref_time(1_744_510_977).saturating_mul(d.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 4_996_008_000 picoseconds. + Weight::from_parts(5_104_368_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 152_240 + .saturating_add(Weight::from_parts(5_826_469, 0).saturating_mul(v.into())) + // Standard Error: 15_564_500 + .saturating_add(Weight::from_parts(1_803_039_187, 0).saturating_mul(d.into())) } } diff --git a/runtime/polkadot/src/weights/frame_system.rs b/runtime/polkadot/src/weights/frame_system.rs index 01716c75602e..4468743c437b 100644 --- a/runtime/polkadot/src/weights/frame_system.rs +++ b/runtime/polkadot/src/weights/frame_system.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `frame_system` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -46,51 +47,82 @@ pub struct WeightInfo(PhantomData); impl frame_system::WeightInfo for WeightInfo { /// The range of component `b` is `[0, 3932160]`. fn remark(b: u32, ) -> Weight { - // Minimum execution time: 3_586 nanoseconds. - Weight::from_ref_time(13_110_218) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_225_000 picoseconds. + Weight::from_parts(2_343_000, 0) + .saturating_add(Weight::from_parts(0, 0)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(406).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(370, 0).saturating_mul(b.into())) } /// The range of component `b` is `[0, 3932160]`. fn remark_with_event(b: u32, ) -> Weight { - // Minimum execution time: 12_595 nanoseconds. - Weight::from_ref_time(12_730_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_417_000 picoseconds. + Weight::from_parts(7_525_000, 0) + .saturating_add(Weight::from_parts(0, 0)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_758).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(1_411, 0).saturating_mul(b.into())) } - // Storage: System Digest (r:1 w:1) - // Storage: unknown [0x3a686561707061676573] (r:0 w:1) + /// Storage: System Digest (r:1 w:1) + /// Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: unknown `0x3a686561707061676573` (r:0 w:1) + /// Proof Skipped: unknown `0x3a686561707061676573` (r:0 w:1) fn set_heap_pages() -> Weight { - // Minimum execution time: 8_399 nanoseconds. - Weight::from_ref_time(8_641_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `1485` + // Minimum execution time: 4_238_000 picoseconds. + Weight::from_parts(4_478_000, 0) + .saturating_add(Weight::from_parts(0, 1485)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Skipped Metadata (r:0 w:0) + /// Storage: Skipped Metadata (r:0 w:0) + /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[0, 1000]`. fn set_storage(i: u32, ) -> Weight { - // Minimum execution time: 3_517 nanoseconds. - Weight::from_ref_time(3_591_000) - // Standard Error: 2_238 - .saturating_add(Weight::from_ref_time(629_071).saturating_mul(i.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_260_000 picoseconds. + Weight::from_parts(2_344_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 2_023 + .saturating_add(Weight::from_parts(676_025, 0).saturating_mul(i.into())) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } - // Storage: Skipped Metadata (r:0 w:0) + /// Storage: Skipped Metadata (r:0 w:0) + /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[0, 1000]`. fn kill_storage(i: u32, ) -> Weight { - // Minimum execution time: 3_574 nanoseconds. - Weight::from_ref_time(3_709_000) - // Standard Error: 907 - .saturating_add(Weight::from_ref_time(448_713).saturating_mul(i.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_290_000 picoseconds. + Weight::from_parts(2_373_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 810 + .saturating_add(Weight::from_parts(483_622, 0).saturating_mul(i.into())) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } - // Storage: Skipped Metadata (r:0 w:0) + /// Storage: Skipped Metadata (r:0 w:0) + /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) /// The range of component `p` is `[0, 1000]`. fn kill_prefix(p: u32, ) -> Weight { - // Minimum execution time: 5_308 nanoseconds. - Weight::from_ref_time(5_374_000) - // Standard Error: 1_138 - .saturating_add(Weight::from_ref_time(964_567).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `131 + p * (69 ±0)` + // Estimated: `117 + p * (70 ±0)` + // Minimum execution time: 4_077_000 picoseconds. + Weight::from_parts(4_180_000, 0) + .saturating_add(Weight::from_parts(0, 117)) + // Standard Error: 1_286 + .saturating_add(Weight::from_parts(1_029_769, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) + .saturating_add(Weight::from_parts(0, 70).saturating_mul(p.into())) } } diff --git a/runtime/polkadot/src/weights/mod.rs b/runtime/polkadot/src/weights/mod.rs index cef1ce83bd11..cef8d5d00aa0 100644 --- a/runtime/polkadot/src/weights/mod.rs +++ b/runtime/polkadot/src/weights/mod.rs @@ -43,6 +43,7 @@ pub mod pallet_tips; pub mod pallet_treasury; pub mod pallet_utility; pub mod pallet_vesting; +pub mod pallet_xcm; pub mod runtime_common_auctions; pub mod runtime_common_claims; pub mod runtime_common_crowdloan; @@ -54,3 +55,4 @@ pub mod runtime_parachains_hrmp; pub mod runtime_parachains_initializer; pub mod runtime_parachains_paras; pub mod runtime_parachains_paras_inherent; +pub mod runtime_parachains_ump; diff --git a/runtime/polkadot/src/weights/pallet_bags_list.rs b/runtime/polkadot/src/weights/pallet_bags_list.rs index 8d797ee07a58..d158aded4a1d 100644 --- a/runtime/polkadot/src/weights/pallet_bags_list.rs +++ b/runtime/polkadot/src/weights/pallet_bags_list.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_bags_list` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,34 +45,59 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_bags_list`. pub struct WeightInfo(PhantomData); impl pallet_bags_list::WeightInfo for WeightInfo { - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:0) - // Storage: VoterList ListNodes (r:4 w:4) - // Storage: VoterList ListBags (r:1 w:1) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:4 w:4) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn rebag_non_terminal() -> Weight { - // Minimum execution time: 64_110 nanoseconds. - Weight::from_ref_time(64_658_000) + // Proof Size summary in bytes: + // Measured: `1622` + // Estimated: `23146` + // Minimum execution time: 60_552_000 picoseconds. + Weight::from_parts(61_264_000, 0) + .saturating_add(Weight::from_parts(0, 23146)) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:0) - // Storage: VoterList ListNodes (r:3 w:3) - // Storage: VoterList ListBags (r:2 w:2) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:3 w:3) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:2 w:2) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn rebag_terminal() -> Weight { - // Minimum execution time: 63_175 nanoseconds. - Weight::from_ref_time(64_129_000) + // Proof Size summary in bytes: + // Measured: `1516` + // Estimated: `23074` + // Minimum execution time: 58_936_000 picoseconds. + Weight::from_parts(59_923_000, 0) + .saturating_add(Weight::from_parts(0, 23074)) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: VoterList ListNodes (r:4 w:4) - // Storage: Staking Bonded (r:2 w:0) - // Storage: Staking Ledger (r:2 w:0) - // Storage: VoterList CounterForListNodes (r:1 w:1) - // Storage: VoterList ListBags (r:1 w:1) + /// Storage: VoterList ListNodes (r:4 w:4) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:2 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:2 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn put_in_front_of() -> Weight { - // Minimum execution time: 61_345 nanoseconds. - Weight::from_ref_time(62_203_000) + // Proof Size summary in bytes: + // Measured: `1827` + // Estimated: `30748` + // Minimum execution time: 65_307_000 picoseconds. + Weight::from_parts(66_157_000, 0) + .saturating_add(Weight::from_parts(0, 30748)) .saturating_add(T::DbWeight::get().reads(10)) .saturating_add(T::DbWeight::get().writes(6)) } diff --git a/runtime/polkadot/src/weights/pallet_balances.rs b/runtime/polkadot/src/weights/pallet_balances.rs index 732069468749..7b4d22eb0da4 100644 --- a/runtime/polkadot/src/weights/pallet_balances.rs +++ b/runtime/polkadot/src/weights/pallet_balances.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_balances` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,52 +45,87 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_balances`. pub struct WeightInfo(PhantomData); impl pallet_balances::WeightInfo for WeightInfo { - // Storage: System Account (r:1 w:1) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn transfer() -> Weight { - // Minimum execution time: 41_890 nanoseconds. - Weight::from_ref_time(42_503_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `3593` + // Minimum execution time: 34_794_000 picoseconds. + Weight::from_parts(35_502_000, 0) + .saturating_add(Weight::from_parts(0, 3593)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: System Account (r:1 w:1) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn transfer_keep_alive() -> Weight { - // Minimum execution time: 31_707 nanoseconds. - Weight::from_ref_time(32_868_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `3593` + // Minimum execution time: 25_963_000 picoseconds. + Weight::from_parts(26_389_000, 0) + .saturating_add(Weight::from_parts(0, 3593)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: System Account (r:1 w:1) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn set_balance_creating() -> Weight { - // Minimum execution time: 24_009 nanoseconds. - Weight::from_ref_time(24_304_000) + // Proof Size summary in bytes: + // Measured: `174` + // Estimated: `3593` + // Minimum execution time: 17_005_000 picoseconds. + Weight::from_parts(17_328_000, 0) + .saturating_add(Weight::from_parts(0, 3593)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: System Account (r:1 w:1) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn set_balance_killing() -> Weight { - // Minimum execution time: 26_784 nanoseconds. - Weight::from_ref_time(27_316_000) + // Proof Size summary in bytes: + // Measured: `174` + // Estimated: `3593` + // Minimum execution time: 19_965_000 picoseconds. + Weight::from_parts(20_298_000, 0) + .saturating_add(Weight::from_parts(0, 3593)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: System Account (r:2 w:2) + /// Storage: System Account (r:2 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn force_transfer() -> Weight { - // Minimum execution time: 42_356 nanoseconds. - Weight::from_ref_time(43_112_000) + // Proof Size summary in bytes: + // Measured: `103` + // Estimated: `6196` + // Minimum execution time: 37_765_000 picoseconds. + Weight::from_parts(38_304_000, 0) + .saturating_add(Weight::from_parts(0, 6196)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: System Account (r:1 w:1) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn transfer_all() -> Weight { - // Minimum execution time: 37_615 nanoseconds. - Weight::from_ref_time(38_059_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `3593` + // Minimum execution time: 32_096_000 picoseconds. + Weight::from_parts(32_499_000, 0) + .saturating_add(Weight::from_parts(0, 3593)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: System Account (r:1 w:1) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn force_unreserve() -> Weight { - // Minimum execution time: 21_319 nanoseconds. - Weight::from_ref_time(21_831_000) + // Proof Size summary in bytes: + // Measured: `174` + // Estimated: `3593` + // Minimum execution time: 16_592_000 picoseconds. + Weight::from_parts(16_882_000, 0) + .saturating_add(Weight::from_parts(0, 3593)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/polkadot/src/weights/pallet_bounties.rs b/runtime/polkadot/src/weights/pallet_bounties.rs index a43d75ec2823..367038fee79d 100644 --- a/runtime/polkadot/src/weights/pallet_bounties.rs +++ b/runtime/polkadot/src/weights/pallet_bounties.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_bounties` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,65 +45,181 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_bounties`. pub struct WeightInfo(PhantomData); impl pallet_bounties::WeightInfo for WeightInfo { - // Storage: Bounties BountyCount (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: Bounties BountyDescriptions (r:0 w:1) - // Storage: Bounties Bounties (r:0 w:1) + /// Storage: Bounties BountyCount (r:1 w:1) + /// Proof: Bounties BountyCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Bounties BountyDescriptions (r:0 w:1) + /// Proof: Bounties BountyDescriptions (max_values: None, max_size: Some(16400), added: 18875, mode: MaxEncodedLen) + /// Storage: Bounties Bounties (r:0 w:1) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) /// The range of component `d` is `[0, 16384]`. fn propose_bounty(d: u32, ) -> Weight { - // Minimum execution time: 29_384 nanoseconds. - Weight::from_ref_time(31_061_881) - // Standard Error: 7 - .saturating_add(Weight::from_ref_time(819).saturating_mul(d.into())) + // Proof Size summary in bytes: + // Measured: `143` + // Estimated: `5082` + // Minimum execution time: 25_262_000 picoseconds. + Weight::from_parts(26_509_529, 0) + .saturating_add(Weight::from_parts(0, 5082)) + // Standard Error: 9 + .saturating_add(Weight::from_parts(742, 0).saturating_mul(d.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(4)) } + /// Storage: Bounties Bounties (r:1 w:1) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: Bounties BountyApprovals (r:1 w:1) + /// Proof: Bounties BountyApprovals (max_values: Some(1), max_size: Some(402), added: 897, mode: MaxEncodedLen) fn approve_bounty() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `235` + // Estimated: `5529` + // Minimum execution time: 12_338_000 picoseconds. + Weight::from_parts(12_658_000, 0) + .saturating_add(Weight::from_parts(0, 5529)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } + /// Storage: Bounties Bounties (r:1 w:1) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) fn propose_curator() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `255` + // Estimated: `3642` + // Minimum execution time: 10_929_000 picoseconds. + Weight::from_parts(11_084_000, 0) + .saturating_add(Weight::from_parts(0, 3642)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } + /// Storage: Bounties Bounties (r:1 w:1) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn unassign_curator() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `431` + // Estimated: `7235` + // Minimum execution time: 34_597_000 picoseconds. + Weight::from_parts(35_211_000, 0) + .saturating_add(Weight::from_parts(0, 7235)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } + /// Storage: Bounties Bounties (r:1 w:1) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn accept_curator() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `427` + // Estimated: `7235` + // Minimum execution time: 23_681_000 picoseconds. + Weight::from_parts(23_957_000, 0) + .saturating_add(Weight::from_parts(0, 7235)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } + /// Storage: Bounties Bounties (r:1 w:1) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: ChildBounties ParentChildBounties (r:1 w:0) + /// Proof: ChildBounties ParentChildBounties (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) fn award_bounty() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `405` + // Estimated: `7123` + // Minimum execution time: 20_088_000 picoseconds. + Weight::from_parts(20_361_000, 0) + .saturating_add(Weight::from_parts(0, 7123)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } + /// Storage: Bounties Bounties (r:1 w:1) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: System Account (r:3 w:3) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildrenCuratorFees (r:1 w:1) + /// Proof: ChildBounties ChildrenCuratorFees (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) + /// Storage: Bounties BountyDescriptions (r:0 w:1) + /// Proof: Bounties BountyDescriptions (max_values: None, max_size: Some(16400), added: 18875, mode: MaxEncodedLen) fn claim_bounty() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `769` + // Estimated: `15934` + // Minimum execution time: 73_246_000 picoseconds. + Weight::from_parts(73_967_000, 0) + .saturating_add(Weight::from_parts(0, 15934)) + .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: Bounties Bounties (r:1 w:1) - // Storage: ChildBounties ParentChildBounties (r:1 w:0) - // Storage: System Account (r:1 w:1) - // Storage: Bounties BountyDescriptions (r:0 w:1) + /// Storage: Bounties Bounties (r:1 w:1) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: ChildBounties ParentChildBounties (r:1 w:0) + /// Proof: ChildBounties ParentChildBounties (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Bounties BountyDescriptions (r:0 w:1) + /// Proof: Bounties BountyDescriptions (max_values: None, max_size: Some(16400), added: 18875, mode: MaxEncodedLen) fn close_bounty_proposed() -> Weight { - // Minimum execution time: 45_583 nanoseconds. - Weight::from_ref_time(46_179_000) + // Proof Size summary in bytes: + // Measured: `449` + // Estimated: `10716` + // Minimum execution time: 40_039_000 picoseconds. + Weight::from_parts(40_570_000, 0) + .saturating_add(Weight::from_parts(0, 10716)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } + /// Storage: Bounties Bounties (r:1 w:1) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: ChildBounties ParentChildBounties (r:1 w:0) + /// Proof: ChildBounties ParentChildBounties (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: System Account (r:2 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Bounties BountyDescriptions (r:0 w:1) + /// Proof: Bounties BountyDescriptions (max_values: None, max_size: Some(16400), added: 18875, mode: MaxEncodedLen) fn close_bounty_active() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `685` + // Estimated: `13319` + // Minimum execution time: 50_308_000 picoseconds. + Weight::from_parts(50_840_000, 0) + .saturating_add(Weight::from_parts(0, 13319)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(4)) } + /// Storage: Bounties Bounties (r:1 w:1) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) fn extend_bounty_expiry() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `291` + // Estimated: `3642` + // Minimum execution time: 16_032_000 picoseconds. + Weight::from_parts(16_338_000, 0) + .saturating_add(Weight::from_parts(0, 3642)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Bounties BountyApprovals (r:1 w:1) + /// Storage: Bounties BountyApprovals (r:1 w:1) + /// Proof: Bounties BountyApprovals (max_values: Some(1), max_size: Some(402), added: 897, mode: MaxEncodedLen) + /// Storage: Bounties Bounties (r:100 w:100) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: System Account (r:200 w:200) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `b` is `[0, 100]`. - fn spend_funds(_b: u32, ) -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(3_372_666) + fn spend_funds(b: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0 + b * (297 ±0)` + // Estimated: `3867 + b * (7858 ±0)` + // Minimum execution time: 5_108_000 picoseconds. + Weight::from_parts(3_020_045, 0) + .saturating_add(Weight::from_parts(0, 3867)) + // Standard Error: 25_988 + .saturating_add(Weight::from_parts(32_112_772, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(b.into()))) + .saturating_add(Weight::from_parts(0, 7858).saturating_mul(b.into())) } } diff --git a/runtime/polkadot/src/weights/pallet_child_bounties.rs b/runtime/polkadot/src/weights/pallet_child_bounties.rs index be0058e1f9d2..0d3478f05e05 100644 --- a/runtime/polkadot/src/weights/pallet_child_bounties.rs +++ b/runtime/polkadot/src/weights/pallet_child_bounties.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_child_bounties` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,37 +45,153 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_child_bounties`. pub struct WeightInfo(PhantomData); impl pallet_child_bounties::WeightInfo for WeightInfo { + /// Storage: ChildBounties ParentChildBounties (r:1 w:1) + /// Proof: ChildBounties ParentChildBounties (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Bounties Bounties (r:1 w:0) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: System Account (r:2 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildBountyCount (r:1 w:1) + /// Proof: ChildBounties ChildBountyCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildBountyDescriptions (r:0 w:1) + /// Proof: ChildBounties ChildBountyDescriptions (max_values: None, max_size: Some(16400), added: 18875, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildBounties (r:0 w:1) + /// Proof: ChildBounties ChildBounties (max_values: None, max_size: Some(145), added: 2620, mode: MaxEncodedLen) /// The range of component `d` is `[0, 16384]`. - fn add_child_bounty(_d: u32, ) -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + fn add_child_bounty(d: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `545` + // Estimated: `14808` + // Minimum execution time: 52_447_000 picoseconds. + Weight::from_parts(53_492_922, 0) + .saturating_add(Weight::from_parts(0, 14808)) + // Standard Error: 6 + .saturating_add(Weight::from_parts(779, 0).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().writes(6)) } + /// Storage: Bounties Bounties (r:1 w:0) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildBounties (r:1 w:1) + /// Proof: ChildBounties ChildBounties (max_values: None, max_size: Some(145), added: 2620, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildrenCuratorFees (r:1 w:1) + /// Proof: ChildBounties ChildrenCuratorFees (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) fn propose_curator() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `599` + // Estimated: `10745` + // Minimum execution time: 19_504_000 picoseconds. + Weight::from_parts(19_910_000, 0) + .saturating_add(Weight::from_parts(0, 10745)) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(2)) } + /// Storage: Bounties Bounties (r:1 w:0) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildBounties (r:1 w:1) + /// Proof: ChildBounties ChildBounties (max_values: None, max_size: Some(145), added: 2620, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn accept_curator() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `745` + // Estimated: `10845` + // Minimum execution time: 29_052_000 picoseconds. + Weight::from_parts(29_973_000, 0) + .saturating_add(Weight::from_parts(0, 10845)) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(2)) } + /// Storage: ChildBounties ChildBounties (r:1 w:1) + /// Proof: ChildBounties ChildBounties (max_values: None, max_size: Some(145), added: 2620, mode: MaxEncodedLen) + /// Storage: Bounties Bounties (r:1 w:0) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn unassign_curator() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `745` + // Estimated: `10845` + // Minimum execution time: 42_227_000 picoseconds. + Weight::from_parts(42_694_000, 0) + .saturating_add(Weight::from_parts(0, 10845)) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(2)) } + /// Storage: Bounties Bounties (r:1 w:0) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildBounties (r:1 w:1) + /// Proof: ChildBounties ChildBounties (max_values: None, max_size: Some(145), added: 2620, mode: MaxEncodedLen) fn award_child_bounty() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `642` + // Estimated: `7252` + // Minimum execution time: 23_566_000 picoseconds. + Weight::from_parts(23_897_000, 0) + .saturating_add(Weight::from_parts(0, 7252)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) } + /// Storage: ChildBounties ChildBounties (r:1 w:1) + /// Proof: ChildBounties ChildBounties (max_values: None, max_size: Some(145), added: 2620, mode: MaxEncodedLen) + /// Storage: System Account (r:3 w:3) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: ChildBounties ParentChildBounties (r:1 w:1) + /// Proof: ChildBounties ParentChildBounties (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildBountyDescriptions (r:0 w:1) + /// Proof: ChildBounties ChildBountyDescriptions (max_values: None, max_size: Some(16400), added: 18875, mode: MaxEncodedLen) fn claim_child_bounty() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `648` + // Estimated: `15890` + // Minimum execution time: 72_733_000 picoseconds. + Weight::from_parts(73_416_000, 0) + .saturating_add(Weight::from_parts(0, 15890)) + .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().writes(6)) } + /// Storage: Bounties Bounties (r:1 w:0) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildBounties (r:1 w:1) + /// Proof: ChildBounties ChildBounties (max_values: None, max_size: Some(145), added: 2620, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildrenCuratorFees (r:1 w:1) + /// Proof: ChildBounties ChildrenCuratorFees (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) + /// Storage: ChildBounties ParentChildBounties (r:1 w:1) + /// Proof: ChildBounties ParentChildBounties (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: System Account (r:2 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildBountyDescriptions (r:0 w:1) + /// Proof: ChildBounties ChildBountyDescriptions (max_values: None, max_size: Some(16400), added: 18875, mode: MaxEncodedLen) fn close_child_bounty_added() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `845` + // Estimated: `20422` + // Minimum execution time: 54_864_000 picoseconds. + Weight::from_parts(55_882_000, 0) + .saturating_add(Weight::from_parts(0, 20422)) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().writes(6)) } + /// Storage: Bounties Bounties (r:1 w:0) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildBounties (r:1 w:1) + /// Proof: ChildBounties ChildBounties (max_values: None, max_size: Some(145), added: 2620, mode: MaxEncodedLen) + /// Storage: System Account (r:3 w:3) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildrenCuratorFees (r:1 w:1) + /// Proof: ChildBounties ChildrenCuratorFees (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) + /// Storage: ChildBounties ParentChildBounties (r:1 w:1) + /// Proof: ChildBounties ParentChildBounties (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: ChildBounties ChildBountyDescriptions (r:0 w:1) + /// Proof: ChildBounties ChildBountyDescriptions (max_values: None, max_size: Some(16400), added: 18875, mode: MaxEncodedLen) fn close_child_bounty_active() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `1032` + // Estimated: `23025` + // Minimum execution time: 67_151_000 picoseconds. + Weight::from_parts(69_136_000, 0) + .saturating_add(Weight::from_parts(0, 23025)) + .saturating_add(T::DbWeight::get().reads(7)) + .saturating_add(T::DbWeight::get().writes(7)) } } diff --git a/runtime/polkadot/src/weights/pallet_collective_council.rs b/runtime/polkadot/src/weights/pallet_collective_council.rs index 5f9b20fd819c..ef197afccdb8 100644 --- a/runtime/polkadot/src/weights/pallet_collective_council.rs +++ b/runtime/polkadot/src/weights/pallet_collective_council.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_collective` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,10 +45,14 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_collective`. pub struct WeightInfo(PhantomData); impl pallet_collective::WeightInfo for WeightInfo { - // Storage: Council Members (r:1 w:1) - // Storage: Council Proposals (r:1 w:0) - // Storage: Council Prime (r:0 w:1) - // Storage: Council Voting (r:100 w:100) + /// Storage: Council Members (r:1 w:1) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Proposals (r:1 w:0) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Voting (r:100 w:100) + /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Council Prime (r:0 w:1) + /// Proof Skipped: Council Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[0, 100]`. /// The range of component `n` is `[0, 100]`. /// The range of component `p` is `[0, 100]`. @@ -55,51 +60,75 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `n` is `[0, 100]`. /// The range of component `p` is `[0, 100]`. fn set_members(m: u32, _n: u32, p: u32, ) -> Weight { - // Minimum execution time: 17_297 nanoseconds. - Weight::from_ref_time(17_458_000) - // Standard Error: 46_157 - .saturating_add(Weight::from_ref_time(5_270_521).saturating_mul(m.into())) - // Standard Error: 46_157 - .saturating_add(Weight::from_ref_time(7_355_366).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `0 + m * (3232 ±0) + p * (3190 ±0)` + // Estimated: `18896 + m * (7799 ±16) + p * (10110 ±16)` + // Minimum execution time: 17_820_000 picoseconds. + Weight::from_parts(18_219_000, 0) + .saturating_add(Weight::from_parts(0, 18896)) + // Standard Error: 48_401 + .saturating_add(Weight::from_parts(5_493_956, 0).saturating_mul(m.into())) + // Standard Error: 48_401 + .saturating_add(Weight::from_parts(8_150_853, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) .saturating_add(T::DbWeight::get().writes(2)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) + .saturating_add(Weight::from_parts(0, 7799).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 10110).saturating_mul(p.into())) } - // Storage: Council Members (r:1 w:0) + /// Storage: Council Members (r:1 w:0) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[1, 100]`. /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[1, 100]`. fn execute(b: u32, m: u32, ) -> Weight { - // Minimum execution time: 20_456 nanoseconds. - Weight::from_ref_time(19_967_863) - // Standard Error: 52 - .saturating_add(Weight::from_ref_time(1_865).saturating_mul(b.into())) - // Standard Error: 540 - .saturating_add(Weight::from_ref_time(14_260).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `69 + m * (32 ±0)` + // Estimated: `1555 + m * (32 ±0)` + // Minimum execution time: 17_042_000 picoseconds. + Weight::from_parts(16_520_155, 0) + .saturating_add(Weight::from_parts(0, 1555)) + // Standard Error: 21 + .saturating_add(Weight::from_parts(1_202, 0).saturating_mul(b.into())) + // Standard Error: 216 + .saturating_add(Weight::from_parts(12_870, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) } - // Storage: Council Members (r:1 w:0) - // Storage: Council ProposalOf (r:1 w:0) + /// Storage: Council Members (r:1 w:0) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council ProposalOf (r:1 w:0) + /// Proof Skipped: Council ProposalOf (max_values: None, max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[1, 100]`. /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[1, 100]`. fn propose_execute(b: u32, m: u32, ) -> Weight { - // Minimum execution time: 22_889 nanoseconds. - Weight::from_ref_time(21_861_521) - // Standard Error: 27 - .saturating_add(Weight::from_ref_time(1_773).saturating_mul(b.into())) - // Standard Error: 285 - .saturating_add(Weight::from_ref_time(24_222).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `69 + m * (32 ±0)` + // Estimated: `5090 + m * (64 ±0)` + // Minimum execution time: 19_125_000 picoseconds. + Weight::from_parts(18_749_458, 0) + .saturating_add(Weight::from_parts(0, 5090)) + // Standard Error: 25 + .saturating_add(Weight::from_parts(1_302, 0).saturating_mul(b.into())) + // Standard Error: 263 + .saturating_add(Weight::from_parts(24_311, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(Weight::from_parts(0, 64).saturating_mul(m.into())) } - // Storage: Council Members (r:1 w:0) - // Storage: Council ProposalOf (r:1 w:1) - // Storage: Council Proposals (r:1 w:1) - // Storage: Council ProposalCount (r:1 w:1) - // Storage: Council Voting (r:0 w:1) + /// Storage: Council Members (r:1 w:0) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council ProposalOf (r:1 w:1) + /// Proof Skipped: Council ProposalOf (max_values: None, max_size: None, mode: Measured) + /// Storage: Council Proposals (r:1 w:1) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council ProposalCount (r:1 w:1) + /// Proof Skipped: Council ProposalCount (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Voting (r:0 w:1) + /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[2, 100]`. /// The range of component `p` is `[1, 100]`. @@ -107,51 +136,78 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `m` is `[2, 100]`. /// The range of component `p` is `[1, 100]`. fn propose_proposed(b: u32, m: u32, p: u32, ) -> Weight { - // Minimum execution time: 28_612 nanoseconds. - Weight::from_ref_time(29_675_084) - // Standard Error: 69 - .saturating_add(Weight::from_ref_time(2_993).saturating_mul(b.into())) - // Standard Error: 730 - .saturating_add(Weight::from_ref_time(21_054).saturating_mul(m.into())) - // Standard Error: 720 - .saturating_add(Weight::from_ref_time(111_187).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `359 + m * (32 ±0) + p * (36 ±0)` + // Estimated: `9350 + m * (165 ±0) + p * (180 ±0)` + // Minimum execution time: 25_157_000 picoseconds. + Weight::from_parts(26_028_507, 0) + .saturating_add(Weight::from_parts(0, 9350)) + // Standard Error: 67 + .saturating_add(Weight::from_parts(2_641, 0).saturating_mul(b.into())) + // Standard Error: 702 + .saturating_add(Weight::from_parts(22_874, 0).saturating_mul(m.into())) + // Standard Error: 693 + .saturating_add(Weight::from_parts(123_906, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) + .saturating_add(Weight::from_parts(0, 165).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 180).saturating_mul(p.into())) } - // Storage: Council Members (r:1 w:0) - // Storage: Council Voting (r:1 w:1) + /// Storage: Council Members (r:1 w:0) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Voting (r:1 w:1) + /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) /// The range of component `m` is `[5, 100]`. /// The range of component `m` is `[5, 100]`. fn vote(m: u32, ) -> Weight { - // Minimum execution time: 29_110 nanoseconds. - Weight::from_ref_time(30_372_451) - // Standard Error: 550 - .saturating_add(Weight::from_ref_time(38_411).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `808 + m * (64 ±0)` + // Estimated: `6564 + m * (128 ±0)` + // Minimum execution time: 23_052_000 picoseconds. + Weight::from_parts(23_596_517, 0) + .saturating_add(Weight::from_parts(0, 6564)) + // Standard Error: 250 + .saturating_add(Weight::from_parts(42_598, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 128).saturating_mul(m.into())) } - // Storage: Council Voting (r:1 w:1) - // Storage: Council Members (r:1 w:0) - // Storage: Council Proposals (r:1 w:1) - // Storage: Council ProposalOf (r:0 w:1) + /// Storage: Council Voting (r:1 w:1) + /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Council Members (r:1 w:0) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Proposals (r:1 w:1) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council ProposalOf (r:0 w:1) + /// Proof Skipped: Council ProposalOf (max_values: None, max_size: None, mode: Measured) /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. fn close_early_disapproved(m: u32, p: u32, ) -> Weight { - // Minimum execution time: 31_156 nanoseconds. - Weight::from_ref_time(33_782_137) - // Standard Error: 553 - .saturating_add(Weight::from_ref_time(19_185).saturating_mul(m.into())) - // Standard Error: 539 - .saturating_add(Weight::from_ref_time(93_950).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `397 + m * (64 ±0) + p * (36 ±0)` + // Estimated: `7943 + m * (260 ±0) + p * (144 ±0)` + // Minimum execution time: 27_491_000 picoseconds. + Weight::from_parts(28_878_451, 0) + .saturating_add(Weight::from_parts(0, 7943)) + // Standard Error: 447 + .saturating_add(Weight::from_parts(21_894, 0).saturating_mul(m.into())) + // Standard Error: 436 + .saturating_add(Weight::from_parts(118_300, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 260).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 144).saturating_mul(p.into())) } - // Storage: Council Voting (r:1 w:1) - // Storage: Council Members (r:1 w:0) - // Storage: Council ProposalOf (r:1 w:1) - // Storage: Council Proposals (r:1 w:1) + /// Storage: Council Voting (r:1 w:1) + /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Council Members (r:1 w:0) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council ProposalOf (r:1 w:1) + /// Proof Skipped: Council ProposalOf (max_values: None, max_size: None, mode: Measured) + /// Storage: Council Proposals (r:1 w:1) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. @@ -159,41 +215,62 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. fn close_early_approved(b: u32, m: u32, p: u32, ) -> Weight { - // Minimum execution time: 41_889 nanoseconds. - Weight::from_ref_time(42_988_858) - // Standard Error: 60 - .saturating_add(Weight::from_ref_time(2_041).saturating_mul(b.into())) - // Standard Error: 642 - .saturating_add(Weight::from_ref_time(13_836).saturating_mul(m.into())) - // Standard Error: 625 - .saturating_add(Weight::from_ref_time(114_168).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `699 + b * (1 ±0) + m * (64 ±0) + p * (40 ±0)` + // Estimated: `12104 + b * (4 ±0) + m * (264 ±0) + p * (160 ±0)` + // Minimum execution time: 39_287_000 picoseconds. + Weight::from_parts(41_543_082, 0) + .saturating_add(Weight::from_parts(0, 12104)) + // Standard Error: 124 + .saturating_add(Weight::from_parts(1_923, 0).saturating_mul(b.into())) + // Standard Error: 1_284 + .saturating_add(Weight::from_parts(150_705, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 4).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(0, 264).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 160).saturating_mul(p.into())) } - // Storage: Council Voting (r:1 w:1) - // Storage: Council Members (r:1 w:0) - // Storage: Council Prime (r:1 w:0) - // Storage: Council Proposals (r:1 w:1) - // Storage: Council ProposalOf (r:0 w:1) + /// Storage: Council Voting (r:1 w:1) + /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Council Members (r:1 w:0) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Prime (r:1 w:0) + /// Proof Skipped: Council Prime (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Proposals (r:1 w:1) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council ProposalOf (r:0 w:1) + /// Proof Skipped: Council ProposalOf (max_values: None, max_size: None, mode: Measured) /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. fn close_disapproved(m: u32, p: u32, ) -> Weight { - // Minimum execution time: 34_461 nanoseconds. - Weight::from_ref_time(35_613_879) - // Standard Error: 486 - .saturating_add(Weight::from_ref_time(24_091).saturating_mul(m.into())) - // Standard Error: 474 - .saturating_add(Weight::from_ref_time(98_392).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `417 + m * (64 ±0) + p * (36 ±0)` + // Estimated: `9905 + m * (325 ±0) + p * (180 ±0)` + // Minimum execution time: 30_432_000 picoseconds. + Weight::from_parts(31_244_588, 0) + .saturating_add(Weight::from_parts(0, 9905)) + // Standard Error: 475 + .saturating_add(Weight::from_parts(26_841, 0).saturating_mul(m.into())) + // Standard Error: 463 + .saturating_add(Weight::from_parts(120_485, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 325).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 180).saturating_mul(p.into())) } - // Storage: Council Voting (r:1 w:1) - // Storage: Council Members (r:1 w:0) - // Storage: Council Prime (r:1 w:0) - // Storage: Council ProposalOf (r:1 w:1) - // Storage: Council Proposals (r:1 w:1) + /// Storage: Council Voting (r:1 w:1) + /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Council Members (r:1 w:0) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Prime (r:1 w:0) + /// Proof Skipped: Council Prime (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council ProposalOf (r:1 w:1) + /// Proof Skipped: Council ProposalOf (max_values: None, max_size: None, mode: Measured) + /// Storage: Council Proposals (r:1 w:1) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. @@ -201,28 +278,43 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. fn close_approved(b: u32, m: u32, p: u32, ) -> Weight { - // Minimum execution time: 43_673 nanoseconds. - Weight::from_ref_time(45_542_514) - // Standard Error: 63 - .saturating_add(Weight::from_ref_time(1_823).saturating_mul(b.into())) - // Standard Error: 673 - .saturating_add(Weight::from_ref_time(12_516).saturating_mul(m.into())) - // Standard Error: 656 - .saturating_add(Weight::from_ref_time(114_430).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `719 + b * (1 ±0) + m * (64 ±0) + p * (40 ±0)` + // Estimated: `14240 + b * (5 ±0) + m * (330 ±0) + p * (200 ±0)` + // Minimum execution time: 41_584_000 picoseconds. + Weight::from_parts(43_042_536, 0) + .saturating_add(Weight::from_parts(0, 14240)) + // Standard Error: 119 + .saturating_add(Weight::from_parts(2_545, 0).saturating_mul(b.into())) + // Standard Error: 1_258 + .saturating_add(Weight::from_parts(19_845, 0).saturating_mul(m.into())) + // Standard Error: 1_226 + .saturating_add(Weight::from_parts(147_526, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 5).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(0, 330).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 200).saturating_mul(p.into())) } - // Storage: Council Proposals (r:1 w:1) - // Storage: Council Voting (r:0 w:1) - // Storage: Council ProposalOf (r:0 w:1) + /// Storage: Council Proposals (r:1 w:1) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Voting (r:0 w:1) + /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Council ProposalOf (r:0 w:1) + /// Proof Skipped: Council ProposalOf (max_values: None, max_size: None, mode: Measured) /// The range of component `p` is `[1, 100]`. /// The range of component `p` is `[1, 100]`. fn disapprove_proposal(p: u32, ) -> Weight { - // Minimum execution time: 19_493 nanoseconds. - Weight::from_ref_time(22_951_493) - // Standard Error: 699 - .saturating_add(Weight::from_ref_time(98_481).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `226 + p * (32 ±0)` + // Estimated: `2163 + p * (96 ±0)` + // Minimum execution time: 15_659_000 picoseconds. + Weight::from_parts(17_913_587, 0) + .saturating_add(Weight::from_parts(0, 2163)) + // Standard Error: 479 + .saturating_add(Weight::from_parts(114_567, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 96).saturating_mul(p.into())) } } diff --git a/runtime/polkadot/src/weights/pallet_collective_technical_committee.rs b/runtime/polkadot/src/weights/pallet_collective_technical_committee.rs index 8739f1ea3eca..e63dd15e44c3 100644 --- a/runtime/polkadot/src/weights/pallet_collective_technical_committee.rs +++ b/runtime/polkadot/src/weights/pallet_collective_technical_committee.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_collective` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,10 +45,14 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_collective`. pub struct WeightInfo(PhantomData); impl pallet_collective::WeightInfo for WeightInfo { - // Storage: TechnicalCommittee Members (r:1 w:1) - // Storage: TechnicalCommittee Proposals (r:1 w:0) - // Storage: TechnicalCommittee Prime (r:0 w:1) - // Storage: TechnicalCommittee Voting (r:100 w:100) + /// Storage: TechnicalCommittee Members (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Proposals (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Voting (r:100 w:100) + /// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Prime (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[0, 100]`. /// The range of component `n` is `[0, 100]`. /// The range of component `p` is `[0, 100]`. @@ -55,51 +60,75 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `n` is `[0, 100]`. /// The range of component `p` is `[0, 100]`. fn set_members(m: u32, _n: u32, p: u32, ) -> Weight { - // Minimum execution time: 17_842 nanoseconds. - Weight::from_ref_time(18_147_000) - // Standard Error: 44_575 - .saturating_add(Weight::from_ref_time(5_076_503).saturating_mul(m.into())) - // Standard Error: 44_575 - .saturating_add(Weight::from_ref_time(7_287_051).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `0 + m * (3232 ±0) + p * (3190 ±0)` + // Estimated: `19184 + m * (7799 ±17) + p * (10110 ±17)` + // Minimum execution time: 18_644_000 picoseconds. + Weight::from_parts(19_096_000, 0) + .saturating_add(Weight::from_parts(0, 19184)) + // Standard Error: 48_031 + .saturating_add(Weight::from_parts(5_411_514, 0).saturating_mul(m.into())) + // Standard Error: 48_031 + .saturating_add(Weight::from_parts(8_184_551, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) .saturating_add(T::DbWeight::get().writes(2)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) + .saturating_add(Weight::from_parts(0, 7799).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 10110).saturating_mul(p.into())) } - // Storage: TechnicalCommittee Members (r:1 w:0) + /// Storage: TechnicalCommittee Members (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[1, 100]`. /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[1, 100]`. fn execute(b: u32, m: u32, ) -> Weight { - // Minimum execution time: 21_266 nanoseconds. - Weight::from_ref_time(20_575_000) - // Standard Error: 71 - .saturating_add(Weight::from_ref_time(1_862).saturating_mul(b.into())) - // Standard Error: 739 - .saturating_add(Weight::from_ref_time(13_889).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `141 + m * (32 ±0)` + // Estimated: `1627 + m * (32 ±0)` + // Minimum execution time: 17_826_000 picoseconds. + Weight::from_parts(17_349_193, 0) + .saturating_add(Weight::from_parts(0, 1627)) + // Standard Error: 19 + .saturating_add(Weight::from_parts(1_183, 0).saturating_mul(b.into())) + // Standard Error: 198 + .saturating_add(Weight::from_parts(11_554, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) } - // Storage: TechnicalCommittee Members (r:1 w:0) - // Storage: TechnicalCommittee ProposalOf (r:1 w:0) + /// Storage: TechnicalCommittee Members (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee ProposalOf (r:1 w:0) + /// Proof Skipped: TechnicalCommittee ProposalOf (max_values: None, max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[1, 100]`. /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[1, 100]`. fn propose_execute(b: u32, m: u32, ) -> Weight { - // Minimum execution time: 23_594 nanoseconds. - Weight::from_ref_time(22_443_580) - // Standard Error: 25 - .saturating_add(Weight::from_ref_time(1_886).saturating_mul(b.into())) - // Standard Error: 258 - .saturating_add(Weight::from_ref_time(22_696).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `141 + m * (32 ±0)` + // Estimated: `5234 + m * (64 ±0)` + // Minimum execution time: 19_874_000 picoseconds. + Weight::from_parts(19_367_499, 0) + .saturating_add(Weight::from_parts(0, 5234)) + // Standard Error: 20 + .saturating_add(Weight::from_parts(1_340, 0).saturating_mul(b.into())) + // Standard Error: 215 + .saturating_add(Weight::from_parts(24_272, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(Weight::from_parts(0, 64).saturating_mul(m.into())) } - // Storage: TechnicalCommittee Members (r:1 w:0) - // Storage: TechnicalCommittee ProposalOf (r:1 w:1) - // Storage: TechnicalCommittee Proposals (r:1 w:1) - // Storage: TechnicalCommittee ProposalCount (r:1 w:1) - // Storage: TechnicalCommittee Voting (r:0 w:1) + /// Storage: TechnicalCommittee Members (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee ProposalOf (r:1 w:1) + /// Proof Skipped: TechnicalCommittee ProposalOf (max_values: None, max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Proposals (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee ProposalCount (r:1 w:1) + /// Proof Skipped: TechnicalCommittee ProposalCount (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Voting (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[2, 100]`. /// The range of component `p` is `[1, 100]`. @@ -107,51 +136,78 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `m` is `[2, 100]`. /// The range of component `p` is `[1, 100]`. fn propose_proposed(b: u32, m: u32, p: u32, ) -> Weight { - // Minimum execution time: 29_664 nanoseconds. - Weight::from_ref_time(30_590_145) - // Standard Error: 62 - .saturating_add(Weight::from_ref_time(3_330).saturating_mul(b.into())) - // Standard Error: 656 - .saturating_add(Weight::from_ref_time(19_122).saturating_mul(m.into())) - // Standard Error: 648 - .saturating_add(Weight::from_ref_time(117_965).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `431 + m * (32 ±0) + p * (36 ±0)` + // Estimated: `9710 + m * (165 ±0) + p * (180 ±0)` + // Minimum execution time: 25_910_000 picoseconds. + Weight::from_parts(27_064_580, 0) + .saturating_add(Weight::from_parts(0, 9710)) + // Standard Error: 69 + .saturating_add(Weight::from_parts(2_555, 0).saturating_mul(b.into())) + // Standard Error: 724 + .saturating_add(Weight::from_parts(22_302, 0).saturating_mul(m.into())) + // Standard Error: 715 + .saturating_add(Weight::from_parts(123_419, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) + .saturating_add(Weight::from_parts(0, 165).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 180).saturating_mul(p.into())) } - // Storage: TechnicalCommittee Members (r:1 w:0) - // Storage: TechnicalCommittee Voting (r:1 w:1) + /// Storage: TechnicalCommittee Members (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Voting (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured) /// The range of component `m` is `[5, 100]`. /// The range of component `m` is `[5, 100]`. fn vote(m: u32, ) -> Weight { - // Minimum execution time: 29_790 nanoseconds. - Weight::from_ref_time(31_060_640) - // Standard Error: 478 - .saturating_add(Weight::from_ref_time(40_001).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `880 + m * (64 ±0)` + // Estimated: `6708 + m * (128 ±0)` + // Minimum execution time: 23_818_000 picoseconds. + Weight::from_parts(24_388_603, 0) + .saturating_add(Weight::from_parts(0, 6708)) + // Standard Error: 242 + .saturating_add(Weight::from_parts(42_675, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 128).saturating_mul(m.into())) } - // Storage: TechnicalCommittee Voting (r:1 w:1) - // Storage: TechnicalCommittee Members (r:1 w:0) - // Storage: TechnicalCommittee Proposals (r:1 w:1) - // Storage: TechnicalCommittee ProposalOf (r:0 w:1) + /// Storage: TechnicalCommittee Voting (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Members (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Proposals (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee ProposalOf (r:0 w:1) + /// Proof Skipped: TechnicalCommittee ProposalOf (max_values: None, max_size: None, mode: Measured) /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. fn close_early_disapproved(m: u32, p: u32, ) -> Weight { - // Minimum execution time: 32_701 nanoseconds. - Weight::from_ref_time(34_343_347) - // Standard Error: 450 - .saturating_add(Weight::from_ref_time(19_598).saturating_mul(m.into())) - // Standard Error: 438 - .saturating_add(Weight::from_ref_time(94_021).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `469 + m * (64 ±0) + p * (36 ±0)` + // Estimated: `8231 + m * (260 ±0) + p * (144 ±0)` + // Minimum execution time: 28_872_000 picoseconds. + Weight::from_parts(29_893_129, 0) + .saturating_add(Weight::from_parts(0, 8231)) + // Standard Error: 400 + .saturating_add(Weight::from_parts(19_918, 0).saturating_mul(m.into())) + // Standard Error: 390 + .saturating_add(Weight::from_parts(117_102, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 260).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 144).saturating_mul(p.into())) } - // Storage: TechnicalCommittee Voting (r:1 w:1) - // Storage: TechnicalCommittee Members (r:1 w:0) - // Storage: TechnicalCommittee ProposalOf (r:1 w:1) - // Storage: TechnicalCommittee Proposals (r:1 w:1) + /// Storage: TechnicalCommittee Voting (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Members (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee ProposalOf (r:1 w:1) + /// Proof Skipped: TechnicalCommittee ProposalOf (max_values: None, max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Proposals (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. @@ -159,41 +215,64 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. fn close_early_approved(b: u32, m: u32, p: u32, ) -> Weight { - // Minimum execution time: 42_819 nanoseconds. - Weight::from_ref_time(43_537_489) - // Standard Error: 57 - .saturating_add(Weight::from_ref_time(1_956).saturating_mul(b.into())) - // Standard Error: 605 - .saturating_add(Weight::from_ref_time(16_062).saturating_mul(m.into())) - // Standard Error: 589 - .saturating_add(Weight::from_ref_time(113_768).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `771 + b * (1 ±0) + m * (64 ±0) + p * (40 ±0)` + // Estimated: `12392 + b * (4 ±0) + m * (264 ±0) + p * (160 ±0)` + // Minimum execution time: 40_305_000 picoseconds. + Weight::from_parts(41_411_443, 0) + .saturating_add(Weight::from_parts(0, 12392)) + // Standard Error: 82 + .saturating_add(Weight::from_parts(2_252, 0).saturating_mul(b.into())) + // Standard Error: 873 + .saturating_add(Weight::from_parts(22_533, 0).saturating_mul(m.into())) + // Standard Error: 851 + .saturating_add(Weight::from_parts(146_263, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 4).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(0, 264).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 160).saturating_mul(p.into())) } - // Storage: TechnicalCommittee Voting (r:1 w:1) - // Storage: TechnicalCommittee Members (r:1 w:0) - // Storage: TechnicalCommittee Prime (r:1 w:0) - // Storage: TechnicalCommittee Proposals (r:1 w:1) - // Storage: TechnicalCommittee ProposalOf (r:0 w:1) + /// Storage: TechnicalCommittee Voting (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Members (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Prime (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Proposals (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee ProposalOf (r:0 w:1) + /// Proof Skipped: TechnicalCommittee ProposalOf (max_values: None, max_size: None, mode: Measured) /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. fn close_disapproved(m: u32, p: u32, ) -> Weight { - // Minimum execution time: 35_308 nanoseconds. - Weight::from_ref_time(36_407_551) - // Standard Error: 442 - .saturating_add(Weight::from_ref_time(23_551).saturating_mul(m.into())) - // Standard Error: 431 - .saturating_add(Weight::from_ref_time(96_416).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `489 + m * (64 ±0) + p * (36 ±0)` + // Estimated: `10265 + m * (325 ±0) + p * (180 ±0)` + // Minimum execution time: 31_636_000 picoseconds. + Weight::from_parts(32_125_817, 0) + .saturating_add(Weight::from_parts(0, 10265)) + // Standard Error: 411 + .saturating_add(Weight::from_parts(26_426, 0).saturating_mul(m.into())) + // Standard Error: 401 + .saturating_add(Weight::from_parts(119_480, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 325).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 180).saturating_mul(p.into())) } - // Storage: TechnicalCommittee Voting (r:1 w:1) - // Storage: TechnicalCommittee Members (r:1 w:0) - // Storage: TechnicalCommittee Prime (r:1 w:0) - // Storage: TechnicalCommittee ProposalOf (r:1 w:1) - // Storage: TechnicalCommittee Proposals (r:1 w:1) + /// Storage: TechnicalCommittee Voting (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Members (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Prime (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee ProposalOf (r:1 w:1) + /// Proof Skipped: TechnicalCommittee ProposalOf (max_values: None, max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Proposals (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. @@ -201,28 +280,43 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. fn close_approved(b: u32, m: u32, p: u32, ) -> Weight { - // Minimum execution time: 44_569 nanoseconds. - Weight::from_ref_time(45_689_468) - // Standard Error: 57 - .saturating_add(Weight::from_ref_time(1_998).saturating_mul(b.into())) - // Standard Error: 605 - .saturating_add(Weight::from_ref_time(15_421).saturating_mul(m.into())) - // Standard Error: 590 - .saturating_add(Weight::from_ref_time(115_962).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `791 + b * (1 ±0) + m * (64 ±0) + p * (40 ±0)` + // Estimated: `14600 + b * (5 ±0) + m * (330 ±0) + p * (200 ±0)` + // Minimum execution time: 42_654_000 picoseconds. + Weight::from_parts(44_062_315, 0) + .saturating_add(Weight::from_parts(0, 14600)) + // Standard Error: 88 + .saturating_add(Weight::from_parts(2_419, 0).saturating_mul(b.into())) + // Standard Error: 937 + .saturating_add(Weight::from_parts(22_044, 0).saturating_mul(m.into())) + // Standard Error: 914 + .saturating_add(Weight::from_parts(147_245, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 5).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(0, 330).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 200).saturating_mul(p.into())) } - // Storage: TechnicalCommittee Proposals (r:1 w:1) - // Storage: TechnicalCommittee Voting (r:0 w:1) - // Storage: TechnicalCommittee ProposalOf (r:0 w:1) + /// Storage: TechnicalCommittee Proposals (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Voting (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: TechnicalCommittee ProposalOf (r:0 w:1) + /// Proof Skipped: TechnicalCommittee ProposalOf (max_values: None, max_size: None, mode: Measured) /// The range of component `p` is `[1, 100]`. /// The range of component `p` is `[1, 100]`. fn disapprove_proposal(p: u32, ) -> Weight { - // Minimum execution time: 20_107 nanoseconds. - Weight::from_ref_time(23_313_947) - // Standard Error: 654 - .saturating_add(Weight::from_ref_time(102_256).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `298 + p * (32 ±0)` + // Estimated: `2379 + p * (96 ±0)` + // Minimum execution time: 16_475_000 picoseconds. + Weight::from_parts(18_514_104, 0) + .saturating_add(Weight::from_parts(0, 2379)) + // Standard Error: 444 + .saturating_add(Weight::from_parts(113_460, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 96).saturating_mul(p.into())) } } diff --git a/runtime/polkadot/src/weights/pallet_democracy.rs b/runtime/polkadot/src/weights/pallet_democracy.rs index 9f5b50e646be..0f43cfbc6e1e 100644 --- a/runtime/polkadot/src/weights/pallet_democracy.rs +++ b/runtime/polkadot/src/weights/pallet_democracy.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_democracy` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,219 +45,469 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_democracy`. pub struct WeightInfo(PhantomData); impl pallet_democracy::WeightInfo for WeightInfo { - // Storage: Democracy PublicPropCount (r:1 w:1) - // Storage: Democracy PublicProps (r:1 w:1) - // Storage: Democracy Blacklist (r:1 w:0) - // Storage: Democracy DepositOf (r:0 w:1) + /// Storage: Democracy PublicPropCount (r:1 w:1) + /// Proof: Democracy PublicPropCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Democracy PublicProps (r:1 w:1) + /// Proof: Democracy PublicProps (max_values: Some(1), max_size: Some(16702), added: 17197, mode: MaxEncodedLen) + /// Storage: Democracy Blacklist (r:1 w:0) + /// Proof: Democracy Blacklist (max_values: None, max_size: Some(3238), added: 5713, mode: MaxEncodedLen) + /// Storage: Democracy DepositOf (r:0 w:1) + /// Proof: Democracy DepositOf (max_values: None, max_size: Some(3230), added: 5705, mode: MaxEncodedLen) fn propose() -> Weight { - // Minimum execution time: 44_610 nanoseconds. - Weight::from_ref_time(45_204_000) + // Proof Size summary in bytes: + // Measured: `4768` + // Estimated: `26379` + // Minimum execution time: 35_995_000 picoseconds. + Weight::from_parts(36_596_000, 0) + .saturating_add(Weight::from_parts(0, 26379)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Democracy DepositOf (r:1 w:1) + /// Storage: Democracy DepositOf (r:1 w:1) + /// Proof: Democracy DepositOf (max_values: None, max_size: Some(3230), added: 5705, mode: MaxEncodedLen) fn second() -> Weight { - // Minimum execution time: 40_153 nanoseconds. - Weight::from_ref_time(41_771_000) + // Proof Size summary in bytes: + // Measured: `3523` + // Estimated: `6695` + // Minimum execution time: 32_995_000 picoseconds. + Weight::from_parts(33_410_000, 0) + .saturating_add(Weight::from_parts(0, 6695)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Democracy ReferendumInfoOf (r:1 w:1) - // Storage: Democracy VotingOf (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Democracy ReferendumInfoOf (r:1 w:1) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) + /// Storage: Democracy VotingOf (r:1 w:1) + /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3795), added: 6270, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) fn vote_new() -> Weight { - // Minimum execution time: 51_249 nanoseconds. - Weight::from_ref_time(51_813_000) + // Proof Size summary in bytes: + // Measured: `3437` + // Estimated: `15690` + // Minimum execution time: 45_737_000 picoseconds. + Weight::from_parts(46_407_000, 0) + .saturating_add(Weight::from_parts(0, 15690)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Democracy ReferendumInfoOf (r:1 w:1) - // Storage: Democracy VotingOf (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Democracy ReferendumInfoOf (r:1 w:1) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) + /// Storage: Democracy VotingOf (r:1 w:1) + /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3795), added: 6270, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) fn vote_existing() -> Weight { - // Minimum execution time: 51_758 nanoseconds. - Weight::from_ref_time(52_106_000) + // Proof Size summary in bytes: + // Measured: `3459` + // Estimated: `15690` + // Minimum execution time: 45_778_000 picoseconds. + Weight::from_parts(46_562_000, 0) + .saturating_add(Weight::from_parts(0, 15690)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Democracy ReferendumInfoOf (r:1 w:1) - // Storage: Democracy Cancellations (r:1 w:1) + /// Storage: Democracy ReferendumInfoOf (r:1 w:1) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) + /// Storage: Democracy Cancellations (r:1 w:1) + /// Proof: Democracy Cancellations (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:1 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) fn emergency_cancel() -> Weight { - // Minimum execution time: 21_407 nanoseconds. - Weight::from_ref_time(21_908_000) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) + // Proof Size summary in bytes: + // Measured: `333` + // Estimated: `10682` + // Minimum execution time: 26_843_000 picoseconds. + Weight::from_parts(27_340_000, 0) + .saturating_add(Weight::from_parts(0, 10682)) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Democracy PublicProps (r:1 w:1) - // Storage: Democracy DepositOf (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: Democracy NextExternal (r:1 w:1) - // Storage: Democracy ReferendumInfoOf (r:1 w:1) - // Storage: Democracy Blacklist (r:0 w:1) + /// Storage: Democracy PublicProps (r:1 w:1) + /// Proof: Democracy PublicProps (max_values: Some(1), max_size: Some(16702), added: 17197, mode: MaxEncodedLen) + /// Storage: Democracy DepositOf (r:1 w:1) + /// Proof: Democracy DepositOf (max_values: None, max_size: Some(3230), added: 5705, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:3 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + /// Storage: Democracy NextExternal (r:1 w:1) + /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumInfoOf (r:1 w:1) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) + /// Storage: Democracy Blacklist (r:0 w:1) + /// Proof: Democracy Blacklist (max_values: None, max_size: Some(3238), added: 5713, mode: MaxEncodedLen) fn blacklist() -> Weight { - // Minimum execution time: 80_197 nanoseconds. - Weight::from_ref_time(81_497_000) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(6)) + // Proof Size summary in bytes: + // Measured: `5877` + // Estimated: `42332` + // Minimum execution time: 91_058_000 picoseconds. + Weight::from_parts(92_054_000, 0) + .saturating_add(Weight::from_parts(0, 42332)) + .saturating_add(T::DbWeight::get().reads(8)) + .saturating_add(T::DbWeight::get().writes(7)) } - // Storage: Democracy NextExternal (r:1 w:1) - // Storage: Democracy Blacklist (r:1 w:0) + /// Storage: Democracy NextExternal (r:1 w:1) + /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) + /// Storage: Democracy Blacklist (r:1 w:0) + /// Proof: Democracy Blacklist (max_values: None, max_size: Some(3238), added: 5713, mode: MaxEncodedLen) fn external_propose() -> Weight { - // Minimum execution time: 16_835 nanoseconds. - Weight::from_ref_time(17_357_000) + // Proof Size summary in bytes: + // Measured: `3383` + // Estimated: `8320` + // Minimum execution time: 14_510_000 picoseconds. + Weight::from_parts(14_851_000, 0) + .saturating_add(Weight::from_parts(0, 8320)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Democracy NextExternal (r:0 w:1) + /// Storage: Democracy NextExternal (r:0 w:1) + /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) fn external_propose_majority() -> Weight { - // Minimum execution time: 4_757 nanoseconds. - Weight::from_ref_time(5_025_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_821_000 picoseconds. + Weight::from_parts(3_953_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Democracy NextExternal (r:0 w:1) + /// Storage: Democracy NextExternal (r:0 w:1) + /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) fn external_propose_default() -> Weight { - // Minimum execution time: 4_719 nanoseconds. - Weight::from_ref_time(5_036_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_810_000 picoseconds. + Weight::from_parts(4_000_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Democracy NextExternal (r:1 w:1) - // Storage: Democracy ReferendumCount (r:1 w:1) - // Storage: Democracy ReferendumInfoOf (r:0 w:1) + /// Storage: Democracy NextExternal (r:1 w:1) + /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumCount (r:1 w:1) + /// Proof: Democracy ReferendumCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:1 w:2) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumInfoOf (r:0 w:1) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) fn fast_track() -> Weight { - // Minimum execution time: 20_986 nanoseconds. - Weight::from_ref_time(21_256_000) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(3)) + // Proof Size summary in bytes: + // Measured: `253` + // Estimated: `6624` + // Minimum execution time: 28_588_000 picoseconds. + Weight::from_parts(28_898_000, 0) + .saturating_add(Weight::from_parts(0, 6624)) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: Democracy NextExternal (r:1 w:1) - // Storage: Democracy Blacklist (r:1 w:1) + /// Storage: Democracy NextExternal (r:1 w:1) + /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) + /// Storage: Democracy Blacklist (r:1 w:1) + /// Proof: Democracy Blacklist (max_values: None, max_size: Some(3238), added: 5713, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:1 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) fn veto_external() -> Weight { - // Minimum execution time: 26_708 nanoseconds. - Weight::from_ref_time(27_404_000) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - // Storage: Democracy PublicProps (r:1 w:1) - // Storage: Democracy DepositOf (r:1 w:1) - // Storage: System Account (r:1 w:1) - fn cancel_proposal() -> Weight { - // Minimum execution time: 67_797 nanoseconds. - Weight::from_ref_time(69_032_000) + // Proof Size summary in bytes: + // Measured: `3486` + // Estimated: `11838` + // Minimum execution time: 32_436_000 picoseconds. + Weight::from_parts(33_152_000, 0) + .saturating_add(Weight::from_parts(0, 11838)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Democracy ReferendumInfoOf (r:0 w:1) + /// Storage: Democracy PublicProps (r:1 w:1) + /// Proof: Democracy PublicProps (max_values: Some(1), max_size: Some(16702), added: 17197, mode: MaxEncodedLen) + /// Storage: Democracy DepositOf (r:1 w:1) + /// Proof: Democracy DepositOf (max_values: None, max_size: Some(3230), added: 5705, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:1 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + fn cancel_proposal() -> Weight { + // Proof Size summary in bytes: + // Measured: `5788` + // Estimated: `31993` + // Minimum execution time: 74_058_000 picoseconds. + Weight::from_parts(74_899_000, 0) + .saturating_add(Weight::from_parts(0, 31993)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(4)) + } + /// Storage: Democracy MetadataOf (r:1 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumInfoOf (r:0 w:1) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) fn cancel_referendum() -> Weight { - // Minimum execution time: 14_179 nanoseconds. - Weight::from_ref_time(14_456_000) - .saturating_add(T::DbWeight::get().writes(1)) + // Proof Size summary in bytes: + // Measured: `238` + // Estimated: `3518` + // Minimum execution time: 20_941_000 picoseconds. + Weight::from_parts(21_170_000, 0) + .saturating_add(Weight::from_parts(0, 3518)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Democracy LowestUnbaked (r:1 w:1) - // Storage: Democracy ReferendumCount (r:1 w:0) - // Storage: Democracy ReferendumInfoOf (r:2 w:0) + /// Storage: Democracy LowestUnbaked (r:1 w:1) + /// Proof: Democracy LowestUnbaked (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumCount (r:1 w:0) + /// Proof: Democracy ReferendumCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumInfoOf (r:99 w:0) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) /// The range of component `r` is `[0, 99]`. fn on_initialize_base(r: u32, ) -> Weight { - // Minimum execution time: 6_410 nanoseconds. - Weight::from_ref_time(9_082_378) - // Standard Error: 4_425 - .saturating_add(Weight::from_ref_time(2_094_526).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `211 + r * (86 ±0)` + // Estimated: `3968 + r * (2676 ±0)` + // Minimum execution time: 7_576_000 picoseconds. + Weight::from_parts(10_905_204, 0) + .saturating_add(Weight::from_parts(0, 3968)) + // Standard Error: 5_941 + .saturating_add(Weight::from_parts(2_777_934, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 2676).saturating_mul(r.into())) } - // Storage: Democracy LowestUnbaked (r:1 w:1) - // Storage: Democracy ReferendumCount (r:1 w:0) - // Storage: Democracy LastTabledWasExternal (r:1 w:0) - // Storage: Democracy NextExternal (r:1 w:0) - // Storage: Democracy PublicProps (r:1 w:0) - // Storage: Democracy ReferendumInfoOf (r:2 w:0) + /// Storage: Democracy LowestUnbaked (r:1 w:1) + /// Proof: Democracy LowestUnbaked (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumCount (r:1 w:0) + /// Proof: Democracy ReferendumCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Democracy LastTabledWasExternal (r:1 w:0) + /// Proof: Democracy LastTabledWasExternal (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) + /// Storage: Democracy NextExternal (r:1 w:0) + /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) + /// Storage: Democracy PublicProps (r:1 w:0) + /// Proof: Democracy PublicProps (max_values: Some(1), max_size: Some(16702), added: 17197, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumInfoOf (r:99 w:0) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) /// The range of component `r` is `[0, 99]`. fn on_initialize_base_with_launch_period(r: u32, ) -> Weight { - // Minimum execution time: 8_539 nanoseconds. - Weight::from_ref_time(11_763_633) - // Standard Error: 3_731 - .saturating_add(Weight::from_ref_time(2_106_290).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `211 + r * (86 ±0)` + // Estimated: `25258 + r * (2676 ±0)` + // Minimum execution time: 10_210_000 picoseconds. + Weight::from_parts(13_910_729, 0) + .saturating_add(Weight::from_parts(0, 25258)) + // Standard Error: 6_423 + .saturating_add(Weight::from_parts(2_761_401, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 2676).saturating_mul(r.into())) } - // Storage: Democracy VotingOf (r:3 w:3) - // Storage: Balances Locks (r:1 w:1) - // Storage: Democracy ReferendumInfoOf (r:2 w:2) + /// Storage: Democracy VotingOf (r:3 w:3) + /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3795), added: 6270, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumInfoOf (r:99 w:99) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `r` is `[0, 99]`. fn delegate(r: u32, ) -> Weight { - // Minimum execution time: 43_180 nanoseconds. - Weight::from_ref_time(49_863_426) - // Standard Error: 6_336 - .saturating_add(Weight::from_ref_time(3_028_333).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `797 + r * (108 ±0)` + // Estimated: `25554 + r * (2676 ±0)` + // Minimum execution time: 37_937_000 picoseconds. + Weight::from_parts(44_274_336, 0) + .saturating_add(Weight::from_parts(0, 25554)) + // Standard Error: 8_387 + .saturating_add(Weight::from_parts(3_862_699, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) .saturating_add(T::DbWeight::get().writes(4)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(r.into()))) + .saturating_add(Weight::from_parts(0, 2676).saturating_mul(r.into())) } - // Storage: Democracy VotingOf (r:2 w:2) - // Storage: Democracy ReferendumInfoOf (r:2 w:2) + /// Storage: Democracy VotingOf (r:2 w:2) + /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3795), added: 6270, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumInfoOf (r:99 w:99) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) /// The range of component `r` is `[0, 99]`. fn undelegate(r: u32, ) -> Weight { - // Minimum execution time: 25_751 nanoseconds. - Weight::from_ref_time(31_624_681) - // Standard Error: 6_537 - .saturating_add(Weight::from_ref_time(2_990_370).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `460 + r * (108 ±0)` + // Estimated: `14520 + r * (2676 ±0)` + // Minimum execution time: 22_361_000 picoseconds. + Weight::from_parts(24_134_202, 0) + .saturating_add(Weight::from_parts(0, 14520)) + // Standard Error: 6_969 + .saturating_add(Weight::from_parts(3_846_011, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) .saturating_add(T::DbWeight::get().writes(2)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(r.into()))) + .saturating_add(Weight::from_parts(0, 2676).saturating_mul(r.into())) } - // Storage: Democracy PublicProps (r:0 w:1) + /// Storage: Democracy PublicProps (r:0 w:1) + /// Proof: Democracy PublicProps (max_values: Some(1), max_size: Some(16702), added: 17197, mode: MaxEncodedLen) fn clear_public_proposals() -> Weight { - // Minimum execution time: 5_296 nanoseconds. - Weight::from_ref_time(5_492_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_782_000 picoseconds. + Weight::from_parts(3_868_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Democracy VotingOf (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Democracy VotingOf (r:1 w:1) + /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3795), added: 6270, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `r` is `[0, 99]`. fn unlock_remove(r: u32, ) -> Weight { - // Minimum execution time: 25_452 nanoseconds. - Weight::from_ref_time(32_353_825) - // Standard Error: 1_521 - .saturating_add(Weight::from_ref_time(34_816).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `530` + // Estimated: `15617` + // Minimum execution time: 21_323_000 picoseconds. + Weight::from_parts(27_548_550, 0) + .saturating_add(Weight::from_parts(0, 15617)) + // Standard Error: 1_419 + .saturating_add(Weight::from_parts(24_395, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Democracy VotingOf (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Democracy VotingOf (r:1 w:1) + /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3795), added: 6270, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `r` is `[0, 99]`. fn unlock_set(r: u32, ) -> Weight { - // Minimum execution time: 31_115 nanoseconds. - Weight::from_ref_time(32_198_924) - // Standard Error: 557 - .saturating_add(Weight::from_ref_time(70_842).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `531 + r * (22 ±0)` + // Estimated: `15617` + // Minimum execution time: 26_187_000 picoseconds. + Weight::from_parts(27_578_108, 0) + .saturating_add(Weight::from_parts(0, 15617)) + // Standard Error: 870 + .saturating_add(Weight::from_parts(58_838, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Democracy ReferendumInfoOf (r:1 w:1) - // Storage: Democracy VotingOf (r:1 w:1) + /// Storage: Democracy ReferendumInfoOf (r:1 w:1) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) + /// Storage: Democracy VotingOf (r:1 w:1) + /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3795), added: 6270, mode: MaxEncodedLen) /// The range of component `r` is `[1, 100]`. fn remove_vote(r: u32, ) -> Weight { - // Minimum execution time: 16_292 nanoseconds. - Weight::from_ref_time(18_794_631) - // Standard Error: 899 - .saturating_add(Weight::from_ref_time(76_463).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `695 + r * (26 ±0)` + // Estimated: `10926` + // Minimum execution time: 16_831_000 picoseconds. + Weight::from_parts(19_565_991, 0) + .saturating_add(Weight::from_parts(0, 10926)) + // Standard Error: 965 + .saturating_add(Weight::from_parts(72_692, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Democracy ReferendumInfoOf (r:1 w:1) - // Storage: Democracy VotingOf (r:1 w:1) + /// Storage: Democracy ReferendumInfoOf (r:1 w:1) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) + /// Storage: Democracy VotingOf (r:1 w:1) + /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3795), added: 6270, mode: MaxEncodedLen) /// The range of component `r` is `[1, 100]`. fn remove_other_vote(r: u32, ) -> Weight { - // Minimum execution time: 16_173 nanoseconds. - Weight::from_ref_time(18_822_303) - // Standard Error: 943 - .saturating_add(Weight::from_ref_time(75_909).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `695 + r * (26 ±0)` + // Estimated: `10926` + // Minimum execution time: 16_944_000 picoseconds. + Weight::from_parts(19_671_811, 0) + .saturating_add(Weight::from_parts(0, 10926)) + // Standard Error: 1_115 + .saturating_add(Weight::from_parts(72_729, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } + /// Storage: Democracy NextExternal (r:1 w:0) + /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) + /// Storage: Preimage StatusFor (r:1 w:0) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:0 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + fn set_external_metadata() -> Weight { + // Proof Size summary in bytes: + // Measured: `323` + // Estimated: `5173` + // Minimum execution time: 18_995_000 picoseconds. + Weight::from_parts(19_232_000, 0) + .saturating_add(Weight::from_parts(0, 5173)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: Democracy NextExternal (r:1 w:0) + /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:1 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + fn clear_external_metadata() -> Weight { + // Proof Size summary in bytes: + // Measured: `253` + // Estimated: `5135` + // Minimum execution time: 17_966_000 picoseconds. + Weight::from_parts(18_263_000, 0) + .saturating_add(Weight::from_parts(0, 5135)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: Democracy PublicProps (r:1 w:0) + /// Proof: Democracy PublicProps (max_values: Some(1), max_size: Some(16702), added: 17197, mode: MaxEncodedLen) + /// Storage: Preimage StatusFor (r:1 w:0) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:0 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + fn set_proposal_metadata() -> Weight { + // Proof Size summary in bytes: + // Measured: `4855` + // Estimated: `21743` + // Minimum execution time: 33_659_000 picoseconds. + Weight::from_parts(34_589_000, 0) + .saturating_add(Weight::from_parts(0, 21743)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: Democracy PublicProps (r:1 w:0) + /// Proof: Democracy PublicProps (max_values: Some(1), max_size: Some(16702), added: 17197, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:1 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + fn clear_proposal_metadata() -> Weight { + // Proof Size summary in bytes: + // Measured: `4789` + // Estimated: `21705` + // Minimum execution time: 31_710_000 picoseconds. + Weight::from_parts(32_122_000, 0) + .saturating_add(Weight::from_parts(0, 21705)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: Preimage StatusFor (r:1 w:0) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:0 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + fn set_referendum_metadata() -> Weight { + // Proof Size summary in bytes: + // Measured: `144` + // Estimated: `3556` + // Minimum execution time: 15_214_000 picoseconds. + Weight::from_parts(15_612_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: Democracy ReferendumInfoOf (r:1 w:0) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:1 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + fn clear_referendum_metadata() -> Weight { + // Proof Size summary in bytes: + // Measured: `269` + // Estimated: `7184` + // Minimum execution time: 19_174_000 picoseconds. + Weight::from_parts(19_496_000, 0) + .saturating_add(Weight::from_parts(0, 7184)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } } diff --git a/runtime/polkadot/src/weights/pallet_election_provider_multi_phase.rs b/runtime/polkadot/src/weights/pallet_election_provider_multi_phase.rs index 885309efc063..cbb8a0a4d241 100644 --- a/runtime/polkadot/src/weights/pallet_election_provider_multi_phase.rs +++ b/runtime/polkadot/src/weights/pallet_election_provider_multi_phase.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_election_provider_multi_phase` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,132 +45,223 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_election_provider_multi_phase`. pub struct WeightInfo(PhantomData); impl pallet_election_provider_multi_phase::WeightInfo for WeightInfo { - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Staking CurrentPlannedSession (r:1 w:0) - // Storage: Staking ErasStartSessionIndex (r:1 w:0) - // Storage: Babe EpochIndex (r:1 w:0) - // Storage: Babe GenesisSlot (r:1 w:0) - // Storage: Babe CurrentSlot (r:1 w:0) - // Storage: Staking ForceEra (r:1 w:0) - // Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking CurrentPlannedSession (r:1 w:0) + /// Proof: Staking CurrentPlannedSession (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ErasStartSessionIndex (r:1 w:0) + /// Proof: Staking ErasStartSessionIndex (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Babe EpochIndex (r:1 w:0) + /// Proof: Babe EpochIndex (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Babe GenesisSlot (r:1 w:0) + /// Proof: Babe GenesisSlot (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Babe CurrentSlot (r:1 w:0) + /// Proof: Babe CurrentSlot (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Staking ForceEra (r:1 w:0) + /// Proof: Staking ForceEra (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) + /// Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) fn on_initialize_nothing() -> Weight { - // Minimum execution time: 16_694 nanoseconds. - Weight::from_ref_time(17_237_000) + // Proof Size summary in bytes: + // Measured: `993` + // Estimated: `14902` + // Minimum execution time: 19_024_000 picoseconds. + Weight::from_parts(19_546_000, 0) + .saturating_add(Weight::from_parts(0, 14902)) .saturating_add(T::DbWeight::get().reads(8)) } - // Storage: ElectionProviderMultiPhase Round (r:1 w:0) - // Storage: ElectionProviderMultiPhase CurrentPhase (r:0 w:1) + /// Storage: ElectionProviderMultiPhase Round (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase Round (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) fn on_initialize_open_signed() -> Weight { - // Minimum execution time: 15_381 nanoseconds. - Weight::from_ref_time(15_825_000) - .saturating_add(T::DbWeight::get().reads(1)) + // Proof Size summary in bytes: + // Measured: `114` + // Estimated: `3198` + // Minimum execution time: 13_699_000 picoseconds. + Weight::from_parts(14_176_000, 0) + .saturating_add(Weight::from_parts(0, 3198)) + .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: ElectionProviderMultiPhase Round (r:1 w:0) - // Storage: ElectionProviderMultiPhase CurrentPhase (r:0 w:1) + /// Storage: ElectionProviderMultiPhase Round (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase Round (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) fn on_initialize_open_unsigned() -> Weight { - // Minimum execution time: 15_126 nanoseconds. - Weight::from_ref_time(15_398_000) - .saturating_add(T::DbWeight::get().reads(1)) + // Proof Size summary in bytes: + // Measured: `114` + // Estimated: `3198` + // Minimum execution time: 14_996_000 picoseconds. + Weight::from_parts(15_624_000, 0) + .saturating_add(Weight::from_parts(0, 3198)) + .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: System Account (r:1 w:1) - // Storage: ElectionProviderMultiPhase QueuedSolution (r:0 w:1) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: ElectionProviderMultiPhase QueuedSolution (r:0 w:1) + /// Proof Skipped: ElectionProviderMultiPhase QueuedSolution (max_values: Some(1), max_size: None, mode: Measured) fn finalize_signed_phase_accept_solution() -> Weight { - // Minimum execution time: 30_260 nanoseconds. - Weight::from_ref_time(30_782_000) + // Proof Size summary in bytes: + // Measured: `174` + // Estimated: `3767` + // Minimum execution time: 25_910_000 picoseconds. + Weight::from_parts(26_289_000, 0) + .saturating_add(Weight::from_parts(0, 3767)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: System Account (r:1 w:1) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn finalize_signed_phase_reject_solution() -> Weight { - // Minimum execution time: 23_469 nanoseconds. - Weight::from_ref_time(23_820_000) + // Proof Size summary in bytes: + // Measured: `174` + // Estimated: `3593` + // Minimum execution time: 18_278_000 picoseconds. + Weight::from_parts(18_696_000, 0) + .saturating_add(Weight::from_parts(0, 3593)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: ElectionProviderMultiPhase SnapshotMetadata (r:0 w:1) - // Storage: ElectionProviderMultiPhase DesiredTargets (r:0 w:1) - // Storage: ElectionProviderMultiPhase Snapshot (r:0 w:1) + /// Storage: ElectionProviderMultiPhase SnapshotMetadata (r:0 w:1) + /// Proof Skipped: ElectionProviderMultiPhase SnapshotMetadata (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase DesiredTargets (r:0 w:1) + /// Proof Skipped: ElectionProviderMultiPhase DesiredTargets (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase Snapshot (r:0 w:1) + /// Proof Skipped: ElectionProviderMultiPhase Snapshot (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `v` is `[1000, 2000]`. /// The range of component `t` is `[500, 1000]`. fn create_snapshot_internal(v: u32, _t: u32, ) -> Weight { - // Minimum execution time: 443_964 nanoseconds. - Weight::from_ref_time(449_824_000) - // Standard Error: 2_433 - .saturating_add(Weight::from_ref_time(265_620).saturating_mul(v.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 455_749_000 picoseconds. + Weight::from_parts(466_785_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 2_640 + .saturating_add(Weight::from_parts(275_187, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: ElectionProviderMultiPhase SignedSubmissionIndices (r:1 w:1) - // Storage: ElectionProviderMultiPhase SignedSubmissionNextIndex (r:1 w:1) - // Storage: ElectionProviderMultiPhase SnapshotMetadata (r:1 w:1) - // Storage: ElectionProviderMultiPhase SignedSubmissionsMap (r:1 w:0) - // Storage: System BlockWeight (r:1 w:1) - // Storage: ElectionProviderMultiPhase QueuedSolution (r:1 w:1) - // Storage: ElectionProviderMultiPhase Round (r:1 w:1) - // Storage: ElectionProviderMultiPhase DesiredTargets (r:0 w:1) - // Storage: ElectionProviderMultiPhase Snapshot (r:0 w:1) - // Storage: ElectionProviderMultiPhase CurrentPhase (r:0 w:1) + /// Storage: ElectionProviderMultiPhase SignedSubmissionIndices (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase SignedSubmissionIndices (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase SignedSubmissionNextIndex (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase SignedSubmissionNextIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase SnapshotMetadata (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase SnapshotMetadata (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase SignedSubmissionsMap (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase SignedSubmissionsMap (max_values: None, max_size: None, mode: Measured) + /// Storage: System BlockWeight (r:1 w:1) + /// Proof: System BlockWeight (max_values: Some(1), max_size: Some(48), added: 543, mode: MaxEncodedLen) + /// Storage: ElectionProviderMultiPhase QueuedSolution (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase QueuedSolution (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase Round (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase Round (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase DesiredTargets (r:0 w:1) + /// Proof Skipped: ElectionProviderMultiPhase DesiredTargets (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase Snapshot (r:0 w:1) + /// Proof Skipped: ElectionProviderMultiPhase Snapshot (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `a` is `[500, 800]`. /// The range of component `d` is `[200, 400]`. fn elect_queued(a: u32, d: u32, ) -> Weight { - // Minimum execution time: 282_209 nanoseconds. - Weight::from_ref_time(71_228_270) - // Standard Error: 6_321 - .saturating_add(Weight::from_ref_time(392_244).saturating_mul(a.into())) - // Standard Error: 9_475 - .saturating_add(Weight::from_ref_time(80_543).saturating_mul(d.into())) - .saturating_add(T::DbWeight::get().reads(7)) + // Proof Size summary in bytes: + // Measured: `338 + a * (768 ±0) + d * (48 ±0)` + // Estimated: `17733 + a * (6912 ±0) + d * (441 ±0)` + // Minimum execution time: 280_203_000 picoseconds. + Weight::from_parts(61_749_844, 0) + .saturating_add(Weight::from_parts(0, 17733)) + // Standard Error: 3_480 + .saturating_add(Weight::from_parts(338_220, 0).saturating_mul(a.into())) + // Standard Error: 5_217 + .saturating_add(Weight::from_parts(183_924, 0).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(9)) + .saturating_add(Weight::from_parts(0, 6912).saturating_mul(a.into())) + .saturating_add(Weight::from_parts(0, 441).saturating_mul(d.into())) } - // Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) - // Storage: ElectionProviderMultiPhase SnapshotMetadata (r:1 w:0) - // Storage: TransactionPayment NextFeeMultiplier (r:1 w:0) - // Storage: ElectionProviderMultiPhase SignedSubmissionIndices (r:1 w:1) - // Storage: ElectionProviderMultiPhase SignedSubmissionNextIndex (r:1 w:1) - // Storage: ElectionProviderMultiPhase SignedSubmissionsMap (r:0 w:1) + /// Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase SnapshotMetadata (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase SnapshotMetadata (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TransactionPayment NextFeeMultiplier (r:1 w:0) + /// Proof: TransactionPayment NextFeeMultiplier (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: ElectionProviderMultiPhase SignedSubmissionIndices (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase SignedSubmissionIndices (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase SignedSubmissionNextIndex (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase SignedSubmissionNextIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase SignedSubmissionsMap (r:0 w:1) + /// Proof Skipped: ElectionProviderMultiPhase SignedSubmissionsMap (max_values: None, max_size: None, mode: Measured) fn submit() -> Weight { - // Minimum execution time: 51_153 nanoseconds. - Weight::from_ref_time(51_487_000) + // Proof Size summary in bytes: + // Measured: `1204` + // Estimated: `13461` + // Minimum execution time: 43_181_000 picoseconds. + Weight::from_parts(43_965_000, 0) + .saturating_add(Weight::from_parts(0, 13461)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) - // Storage: ElectionProviderMultiPhase Round (r:1 w:0) - // Storage: ElectionProviderMultiPhase DesiredTargets (r:1 w:0) - // Storage: ElectionProviderMultiPhase QueuedSolution (r:1 w:1) - // Storage: ElectionProviderMultiPhase SnapshotMetadata (r:1 w:0) - // Storage: ElectionProviderMultiPhase MinimumUntrustedScore (r:1 w:0) - // Storage: ElectionProviderMultiPhase Snapshot (r:1 w:0) + /// Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase Round (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase Round (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase DesiredTargets (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase DesiredTargets (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase QueuedSolution (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase QueuedSolution (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase SnapshotMetadata (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase SnapshotMetadata (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase Snapshot (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase Snapshot (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase MinimumUntrustedScore (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase MinimumUntrustedScore (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `v` is `[1000, 2000]`. /// The range of component `t` is `[500, 1000]`. /// The range of component `a` is `[500, 800]`. /// The range of component `d` is `[200, 400]`. - fn submit_unsigned(v: u32, _t: u32, a: u32, _d: u32, ) -> Weight { - // Minimum execution time: 4_769_127 nanoseconds. - Weight::from_ref_time(4_783_174_000) - // Standard Error: 14_696 - .saturating_add(Weight::from_ref_time(97_722).saturating_mul(v.into())) - // Standard Error: 43_551 - .saturating_add(Weight::from_ref_time(4_438_823).saturating_mul(a.into())) + fn submit_unsigned(v: u32, t: u32, a: u32, _d: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `219 + v * (553 ±0) + t * (32 ±0)` + // Estimated: `11928 + v * (3871 ±0) + t * (224 ±0)` + // Minimum execution time: 4_961_255_000 picoseconds. + Weight::from_parts(5_003_449_000, 0) + .saturating_add(Weight::from_parts(0, 11928)) + // Standard Error: 15_941 + .saturating_add(Weight::from_parts(133_470, 0).saturating_mul(v.into())) + // Standard Error: 47_240 + .saturating_add(Weight::from_parts(4_540_957, 0).saturating_mul(a.into())) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 3871).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(0, 224).saturating_mul(t.into())) } - // Storage: ElectionProviderMultiPhase Round (r:1 w:0) - // Storage: ElectionProviderMultiPhase DesiredTargets (r:1 w:0) - // Storage: ElectionProviderMultiPhase MinimumUntrustedScore (r:1 w:0) - // Storage: ElectionProviderMultiPhase Snapshot (r:1 w:0) + /// Storage: ElectionProviderMultiPhase DesiredTargets (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase DesiredTargets (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase Snapshot (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase Snapshot (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase Round (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase Round (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase MinimumUntrustedScore (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase MinimumUntrustedScore (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `v` is `[1000, 2000]`. /// The range of component `t` is `[500, 1000]`. /// The range of component `a` is `[500, 800]`. /// The range of component `d` is `[200, 400]`. - fn feasibility_check(v: u32, _t: u32, a: u32, _d: u32, ) -> Weight { - // Minimum execution time: 3_948_376 nanoseconds. - Weight::from_ref_time(4_006_077_000) - // Standard Error: 13_237 - .saturating_add(Weight::from_ref_time(216_796).saturating_mul(v.into())) - // Standard Error: 39_228 - .saturating_add(Weight::from_ref_time(3_191_792).saturating_mul(a.into())) + fn feasibility_check(v: u32, t: u32, a: u32, _d: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `194 + v * (553 ±0) + t * (32 ±0)` + // Estimated: `6716 + v * (2212 ±0) + t * (128 ±0)` + // Minimum execution time: 4_175_951_000 picoseconds. + Weight::from_parts(4_226_821_000, 0) + .saturating_add(Weight::from_parts(0, 6716)) + // Standard Error: 14_164 + .saturating_add(Weight::from_parts(215_721, 0).saturating_mul(v.into())) + // Standard Error: 41_974 + .saturating_add(Weight::from_parts(3_398_124, 0).saturating_mul(a.into())) .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(Weight::from_parts(0, 2212).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(0, 128).saturating_mul(t.into())) } } diff --git a/runtime/polkadot/src/weights/pallet_elections_phragmen.rs b/runtime/polkadot/src/weights/pallet_elections_phragmen.rs index e3dd0773bab4..72b6ec066f43 100644 --- a/runtime/polkadot/src/weights/pallet_elections_phragmen.rs +++ b/runtime/polkadot/src/weights/pallet_elections_phragmen.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_elections_phragmen` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,153 +45,259 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_elections_phragmen`. pub struct WeightInfo(PhantomData); impl pallet_elections_phragmen::WeightInfo for WeightInfo { - // Storage: PhragmenElection Candidates (r:1 w:0) - // Storage: PhragmenElection Members (r:1 w:0) - // Storage: PhragmenElection RunnersUp (r:1 w:0) - // Storage: PhragmenElection Voting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: PhragmenElection Candidates (r:1 w:0) + /// Proof Skipped: PhragmenElection Candidates (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Members (r:1 w:0) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection RunnersUp (r:1 w:0) + /// Proof Skipped: PhragmenElection RunnersUp (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Voting (r:1 w:1) + /// Proof Skipped: PhragmenElection Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `v` is `[1, 16]`. fn vote_equal(v: u32, ) -> Weight { - // Minimum execution time: 32_024 nanoseconds. - Weight::from_ref_time(33_854_765) - // Standard Error: 5_505 - .saturating_add(Weight::from_ref_time(140_083).saturating_mul(v.into())) + // Proof Size summary in bytes: + // Measured: `369 + v * (80 ±0)` + // Estimated: `14156 + v * (320 ±0)` + // Minimum execution time: 27_615_000 picoseconds. + Weight::from_parts(28_827_632, 0) + .saturating_add(Weight::from_parts(0, 14156)) + // Standard Error: 3_451 + .saturating_add(Weight::from_parts(107_080, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 320).saturating_mul(v.into())) } - // Storage: PhragmenElection Candidates (r:1 w:0) - // Storage: PhragmenElection Members (r:1 w:0) - // Storage: PhragmenElection RunnersUp (r:1 w:0) - // Storage: PhragmenElection Voting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: PhragmenElection Candidates (r:1 w:0) + /// Proof Skipped: PhragmenElection Candidates (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Members (r:1 w:0) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection RunnersUp (r:1 w:0) + /// Proof Skipped: PhragmenElection RunnersUp (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Voting (r:1 w:1) + /// Proof Skipped: PhragmenElection Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `v` is `[2, 16]`. fn vote_more(v: u32, ) -> Weight { - // Minimum execution time: 42_295 nanoseconds. - Weight::from_ref_time(43_940_673) - // Standard Error: 5_953 - .saturating_add(Weight::from_ref_time(124_400).saturating_mul(v.into())) + // Proof Size summary in bytes: + // Measured: `337 + v * (80 ±0)` + // Estimated: `14028 + v * (320 ±0)` + // Minimum execution time: 37_710_000 picoseconds. + Weight::from_parts(38_651_629, 0) + .saturating_add(Weight::from_parts(0, 14028)) + // Standard Error: 4_935 + .saturating_add(Weight::from_parts(113_765, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 320).saturating_mul(v.into())) } - // Storage: PhragmenElection Candidates (r:1 w:0) - // Storage: PhragmenElection Members (r:1 w:0) - // Storage: PhragmenElection RunnersUp (r:1 w:0) - // Storage: PhragmenElection Voting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: PhragmenElection Candidates (r:1 w:0) + /// Proof Skipped: PhragmenElection Candidates (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Members (r:1 w:0) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection RunnersUp (r:1 w:0) + /// Proof Skipped: PhragmenElection RunnersUp (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Voting (r:1 w:1) + /// Proof Skipped: PhragmenElection Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `v` is `[2, 16]`. fn vote_less(v: u32, ) -> Weight { - // Minimum execution time: 42_918 nanoseconds. - Weight::from_ref_time(43_662_086) - // Standard Error: 4_747 - .saturating_add(Weight::from_ref_time(152_167).saturating_mul(v.into())) + // Proof Size summary in bytes: + // Measured: `369 + v * (80 ±0)` + // Estimated: `14156 + v * (320 ±0)` + // Minimum execution time: 37_662_000 picoseconds. + Weight::from_parts(38_662_833, 0) + .saturating_add(Weight::from_parts(0, 14156)) + // Standard Error: 8_944 + .saturating_add(Weight::from_parts(139_712, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 320).saturating_mul(v.into())) } - // Storage: PhragmenElection Voting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: PhragmenElection Voting (r:1 w:1) + /// Proof Skipped: PhragmenElection Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) fn remove_voter() -> Weight { - // Minimum execution time: 41_331 nanoseconds. - Weight::from_ref_time(41_867_000) + // Proof Size summary in bytes: + // Measured: `891` + // Estimated: `9120` + // Minimum execution time: 33_356_000 picoseconds. + Weight::from_parts(33_639_000, 0) + .saturating_add(Weight::from_parts(0, 9120)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: PhragmenElection Candidates (r:1 w:1) - // Storage: PhragmenElection Members (r:1 w:0) - // Storage: PhragmenElection RunnersUp (r:1 w:0) + /// Storage: PhragmenElection Candidates (r:1 w:1) + /// Proof Skipped: PhragmenElection Candidates (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Members (r:1 w:0) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection RunnersUp (r:1 w:0) + /// Proof Skipped: PhragmenElection RunnersUp (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `c` is `[1, 1000]`. fn submit_candidacy(c: u32, ) -> Weight { - // Minimum execution time: 37_059 nanoseconds. - Weight::from_ref_time(28_850_455) - // Standard Error: 1_018 - .saturating_add(Weight::from_ref_time(95_719).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `2358 + c * (48 ±0)` + // Estimated: `11523 + c * (144 ±0)` + // Minimum execution time: 29_250_000 picoseconds. + Weight::from_parts(22_589_367, 0) + .saturating_add(Weight::from_parts(0, 11523)) + // Standard Error: 847 + .saturating_add(Weight::from_parts(82_413, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 144).saturating_mul(c.into())) } - // Storage: PhragmenElection Candidates (r:1 w:1) + /// Storage: PhragmenElection Candidates (r:1 w:1) + /// Proof Skipped: PhragmenElection Candidates (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `c` is `[1, 1000]`. fn renounce_candidacy_candidate(c: u32, ) -> Weight { - // Minimum execution time: 32_348 nanoseconds. - Weight::from_ref_time(24_213_078) - // Standard Error: 1_011 - .saturating_add(Weight::from_ref_time(71_484).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `250 + c * (48 ±0)` + // Estimated: `1722 + c * (48 ±0)` + // Minimum execution time: 25_177_000 picoseconds. + Weight::from_parts(18_210_201, 0) + .saturating_add(Weight::from_parts(0, 1722)) + // Standard Error: 859 + .saturating_add(Weight::from_parts(58_205, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 48).saturating_mul(c.into())) } - // Storage: PhragmenElection Members (r:1 w:1) - // Storage: PhragmenElection RunnersUp (r:1 w:1) - // Storage: Council Prime (r:1 w:1) - // Storage: Council Proposals (r:1 w:0) - // Storage: Council Members (r:0 w:1) + /// Storage: PhragmenElection Members (r:1 w:1) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection RunnersUp (r:1 w:1) + /// Proof Skipped: PhragmenElection RunnersUp (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Prime (r:1 w:1) + /// Proof Skipped: Council Prime (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Proposals (r:1 w:0) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Members (r:0 w:1) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) fn renounce_candidacy_members() -> Weight { - // Minimum execution time: 45_843 nanoseconds. - Weight::from_ref_time(46_822_000) + // Proof Size summary in bytes: + // Measured: `2565` + // Estimated: `18765` + // Minimum execution time: 42_428_000 picoseconds. + Weight::from_parts(42_849_000, 0) + .saturating_add(Weight::from_parts(0, 18765)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: PhragmenElection RunnersUp (r:1 w:1) + /// Storage: PhragmenElection RunnersUp (r:1 w:1) + /// Proof Skipped: PhragmenElection RunnersUp (max_values: Some(1), max_size: None, mode: Measured) fn renounce_candidacy_runners_up() -> Weight { - // Minimum execution time: 34_751 nanoseconds. - Weight::from_ref_time(35_934_000) + // Proof Size summary in bytes: + // Measured: `1711` + // Estimated: `3196` + // Minimum execution time: 27_668_000 picoseconds. + Weight::from_parts(27_980_000, 0) + .saturating_add(Weight::from_parts(0, 3196)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Benchmark Override (r:0 w:0) + /// Storage: Benchmark Override (r:0 w:0) + /// Proof Skipped: Benchmark Override (max_values: None, max_size: None, mode: Measured) fn remove_member_without_replacement() -> Weight { - // Minimum execution time: 2_000_000_000 nanoseconds. - Weight::from_ref_time(2_000_000_000_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_000_000_000_000 picoseconds. + Weight::from_parts(2_000_000_000_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } - // Storage: PhragmenElection Members (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: PhragmenElection RunnersUp (r:1 w:1) - // Storage: Council Prime (r:1 w:1) - // Storage: Council Proposals (r:1 w:0) - // Storage: Council Members (r:0 w:1) + /// Storage: PhragmenElection Members (r:1 w:1) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: PhragmenElection RunnersUp (r:1 w:1) + /// Proof Skipped: PhragmenElection RunnersUp (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Prime (r:1 w:1) + /// Proof Skipped: Council Prime (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Proposals (r:1 w:0) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Members (r:0 w:1) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) fn remove_member_with_replacement() -> Weight { - // Minimum execution time: 60_526 nanoseconds. - Weight::from_ref_time(62_010_000) + // Proof Size summary in bytes: + // Measured: `2565` + // Estimated: `22358` + // Minimum execution time: 57_202_000 picoseconds. + Weight::from_parts(57_795_000, 0) + .saturating_add(Weight::from_parts(0, 22358)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: PhragmenElection Voting (r:5001 w:5000) - // Storage: PhragmenElection Members (r:1 w:0) - // Storage: PhragmenElection RunnersUp (r:1 w:0) - // Storage: PhragmenElection Candidates (r:1 w:0) - // Storage: Balances Locks (r:5000 w:5000) - // Storage: System Account (r:5000 w:5000) + /// Storage: PhragmenElection Voting (r:10001 w:10000) + /// Proof Skipped: PhragmenElection Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: PhragmenElection Members (r:1 w:0) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection RunnersUp (r:1 w:0) + /// Proof Skipped: PhragmenElection RunnersUp (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Candidates (r:1 w:0) + /// Proof Skipped: PhragmenElection Candidates (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Balances Locks (r:10000 w:10000) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:10000 w:10000) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `v` is `[5000, 10000]`. /// The range of component `d` is `[0, 5000]`. fn clean_defunct_voters(v: u32, _d: u32, ) -> Weight { - // Minimum execution time: 285_304_906 nanoseconds. - Weight::from_ref_time(285_891_493_000) - // Standard Error: 248_503 - .saturating_add(Weight::from_ref_time(35_426_073).saturating_mul(v.into())) + // Proof Size summary in bytes: + // Measured: `36028 + v * (808 ±0)` + // Estimated: `155112 + v * (12084 ±0)` + // Minimum execution time: 319_698_615_000 picoseconds. + Weight::from_parts(320_299_987_000, 0) + .saturating_add(Weight::from_parts(0, 155112)) + // Standard Error: 274_596 + .saturating_add(Weight::from_parts(39_406_540, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(v.into()))) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(v.into()))) + .saturating_add(Weight::from_parts(0, 12084).saturating_mul(v.into())) } - // Storage: PhragmenElection Candidates (r:1 w:1) - // Storage: PhragmenElection Members (r:1 w:1) - // Storage: PhragmenElection RunnersUp (r:1 w:1) - // Storage: PhragmenElection Voting (r:10001 w:0) - // Storage: Council Proposals (r:1 w:0) - // Storage: PhragmenElection ElectionRounds (r:1 w:1) - // Storage: Council Members (r:0 w:1) - // Storage: Council Prime (r:0 w:1) - // Storage: System Account (r:8 w:8) + /// Storage: PhragmenElection Candidates (r:1 w:1) + /// Proof Skipped: PhragmenElection Candidates (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Members (r:1 w:1) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection RunnersUp (r:1 w:1) + /// Proof Skipped: PhragmenElection RunnersUp (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Voting (r:10001 w:0) + /// Proof Skipped: PhragmenElection Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Council Proposals (r:1 w:0) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System Account (r:967 w:967) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: PhragmenElection ElectionRounds (r:1 w:1) + /// Proof Skipped: PhragmenElection ElectionRounds (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Members (r:0 w:1) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Prime (r:0 w:1) + /// Proof Skipped: Council Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `c` is `[1, 1000]`. /// The range of component `v` is `[1, 10000]`. /// The range of component `e` is `[10000, 160000]`. fn election_phragmen(c: u32, v: u32, e: u32, ) -> Weight { - // Minimum execution time: 29_105_971 nanoseconds. - Weight::from_ref_time(29_380_349_000) - // Standard Error: 463_867 - .saturating_add(Weight::from_ref_time(40_872_900).saturating_mul(v.into())) - // Standard Error: 29_768 - .saturating_add(Weight::from_ref_time(2_025_413).saturating_mul(e.into())) + // Proof Size summary in bytes: + // Measured: `0 + v * (607 ±0) + e * (28 ±0)` + // Estimated: `4855584 + c * (2560 ±0) + v * (5481 ±4) + e * (123 ±0)` + // Minimum execution time: 30_930_541_000 picoseconds. + Weight::from_parts(31_074_438_000, 0) + .saturating_add(Weight::from_parts(0, 4855584)) + // Standard Error: 416_181 + .saturating_add(Weight::from_parts(34_309_870, 0).saturating_mul(v.into())) + // Standard Error: 26_707 + .saturating_add(Weight::from_parts(1_798_568, 0).saturating_mul(e.into())) .saturating_add(T::DbWeight::get().reads(269)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(c.into()))) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(v.into()))) .saturating_add(T::DbWeight::get().writes(6)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(c.into()))) + .saturating_add(Weight::from_parts(0, 2560).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(0, 5481).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(0, 123).saturating_mul(e.into())) } } diff --git a/runtime/polkadot/src/weights/pallet_fast_unstake.rs b/runtime/polkadot/src/weights/pallet_fast_unstake.rs index f89008944e96..6f6da08f72e2 100644 --- a/runtime/polkadot/src/weights/pallet_fast_unstake.rs +++ b/runtime/polkadot/src/weights/pallet_fast_unstake.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_fast_unstake` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,77 +45,150 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_fast_unstake`. pub struct WeightInfo(PhantomData); impl pallet_fast_unstake::WeightInfo for WeightInfo { - // Storage: FastUnstake ErasToCheckPerBlock (r:1 w:0) - // Storage: Staking ValidatorCount (r:1 w:0) - // Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) - // Storage: FastUnstake Head (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Staking SlashingSpans (r:64 w:0) - // Storage: Staking Bonded (r:64 w:64) - // Storage: Staking Validators (r:64 w:0) - // Storage: Staking Nominators (r:64 w:0) - // Storage: System Account (r:64 w:64) - // Storage: Balances Locks (r:64 w:64) - // Storage: Staking Ledger (r:0 w:64) - // Storage: Staking Payee (r:0 w:64) - fn on_idle_unstake() -> Weight { - // Minimum execution time: 2_251_333 nanoseconds. - Weight::from_ref_time(2_317_242_000) - .saturating_add(T::DbWeight::get().reads(389)) - .saturating_add(T::DbWeight::get().writes(321)) + /// Storage: FastUnstake ErasToCheckPerBlock (r:1 w:0) + /// Proof: FastUnstake ErasToCheckPerBlock (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ValidatorCount (r:1 w:0) + /// Proof: Staking ValidatorCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: FastUnstake Head (r:1 w:1) + /// Proof: FastUnstake Head (max_values: Some(1), max_size: Some(886), added: 1381, mode: MaxEncodedLen) + /// Storage: FastUnstake CounterForQueue (r:1 w:0) + /// Proof: FastUnstake CounterForQueue (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking SlashingSpans (r:16 w:0) + /// Proof Skipped: Staking SlashingSpans (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking Bonded (r:16 w:16) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:16 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:16 w:0) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: System Account (r:16 w:16) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:16 w:16) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:0 w:16) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:0 w:16) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + /// The range of component `b` is `[1, 16]`. + fn on_idle_unstake(b: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1095 + b * (359 ±0)` + // Estimated: `17942 + b * (17672 ±0)` + // Minimum execution time: 80_046_000 picoseconds. + Weight::from_parts(43_037_656, 0) + .saturating_add(Weight::from_parts(0, 17942)) + // Standard Error: 49_179 + .saturating_add(Weight::from_parts(41_341_471, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().reads((6_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((5_u64).saturating_mul(b.into()))) + .saturating_add(Weight::from_parts(0, 17672).saturating_mul(b.into())) } - // Storage: FastUnstake ErasToCheckPerBlock (r:1 w:0) - // Storage: Staking ValidatorCount (r:1 w:0) - // Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) - // Storage: FastUnstake Head (r:1 w:1) - // Storage: FastUnstake Queue (r:65 w:64) - // Storage: FastUnstake CounterForQueue (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Staking ErasStakers (r:56 w:0) - /// The range of component `x` is `[28, 3584]`. - fn on_idle_check(x: u32, ) -> Weight { - // Minimum execution time: 28_201_563 nanoseconds. - Weight::from_ref_time(28_421_841_000) - // Standard Error: 608_431 - .saturating_add(Weight::from_ref_time(842_395_651).saturating_mul(x.into())) - .saturating_add(T::DbWeight::get().reads(85)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(x.into()))) - .saturating_add(T::DbWeight::get().writes(66)) + /// Storage: FastUnstake ErasToCheckPerBlock (r:1 w:0) + /// Proof: FastUnstake ErasToCheckPerBlock (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ValidatorCount (r:1 w:0) + /// Proof: Staking ValidatorCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: FastUnstake Head (r:1 w:1) + /// Proof: FastUnstake Head (max_values: Some(1), max_size: Some(886), added: 1381, mode: MaxEncodedLen) + /// Storage: FastUnstake CounterForQueue (r:1 w:0) + /// Proof: FastUnstake CounterForQueue (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ErasStakers (r:257 w:0) + /// Proof Skipped: Staking ErasStakers (max_values: None, max_size: None, mode: Measured) + /// The range of component `v` is `[1, 256]`. + /// The range of component `b` is `[1, 16]`. + fn on_idle_check(v: u32, b: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1449 + v * (19511 ±0) + b * (48 ±0)` + // Estimated: `15875 + v * (41499 ±0) + b * (104 ±0)` + // Minimum execution time: 648_541_000 picoseconds. + Weight::from_parts(652_000_000, 0) + .saturating_add(Weight::from_parts(0, 15875)) + // Standard Error: 6_037_607 + .saturating_add(Weight::from_parts(201_709_996, 0).saturating_mul(v.into())) + // Standard Error: 96_885_464 + .saturating_add(Weight::from_parts(3_028_782_383, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(7)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(v.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 41499).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(0, 104).saturating_mul(b.into())) } - // Storage: FastUnstake ErasToCheckPerBlock (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: FastUnstake Queue (r:1 w:1) - // Storage: FastUnstake Head (r:1 w:0) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Validators (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) - // Storage: Staking CounterForNominators (r:1 w:1) - // Storage: VoterList ListNodes (r:3 w:3) - // Storage: VoterList CounterForListNodes (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) - // Storage: FastUnstake CounterForQueue (r:1 w:1) + /// Storage: FastUnstake ErasToCheckPerBlock (r:1 w:0) + /// Proof: FastUnstake ErasToCheckPerBlock (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: FastUnstake Queue (r:1 w:1) + /// Proof: FastUnstake Queue (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) + /// Storage: FastUnstake Head (r:1 w:0) + /// Proof: FastUnstake Head (max_values: Some(1), max_size: Some(886), added: 1381, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:1 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:1) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: Staking CounterForNominators (r:1 w:1) + /// Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:2 w:2) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: FastUnstake CounterForQueue (r:1 w:1) + /// Proof: FastUnstake CounterForQueue (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn register_fast_unstake() -> Weight { - // Minimum execution time: 129_440 nanoseconds. - Weight::from_ref_time(131_391_000) + // Proof Size summary in bytes: + // Measured: `1957` + // Estimated: `43522` + // Minimum execution time: 121_666_000 picoseconds. + Weight::from_parts(123_110_000, 0) + .saturating_add(Weight::from_parts(0, 43522)) .saturating_add(T::DbWeight::get().reads(15)) .saturating_add(T::DbWeight::get().writes(10)) } - // Storage: FastUnstake ErasToCheckPerBlock (r:1 w:0) - // Storage: Staking Ledger (r:1 w:0) - // Storage: FastUnstake Queue (r:1 w:1) - // Storage: FastUnstake Head (r:1 w:0) - // Storage: FastUnstake CounterForQueue (r:1 w:1) + /// Storage: FastUnstake ErasToCheckPerBlock (r:1 w:0) + /// Proof: FastUnstake ErasToCheckPerBlock (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: FastUnstake Queue (r:1 w:1) + /// Proof: FastUnstake Queue (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) + /// Storage: FastUnstake Head (r:1 w:0) + /// Proof: FastUnstake Head (max_values: Some(1), max_size: Some(886), added: 1381, mode: MaxEncodedLen) + /// Storage: FastUnstake CounterForQueue (r:1 w:1) + /// Proof: FastUnstake CounterForQueue (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn deregister() -> Weight { - // Minimum execution time: 51_373 nanoseconds. - Weight::from_ref_time(52_351_000) + // Proof Size summary in bytes: + // Measured: `1156` + // Estimated: `13426` + // Minimum execution time: 41_996_000 picoseconds. + Weight::from_parts(42_645_000, 0) + .saturating_add(Weight::from_parts(0, 13426)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: FastUnstake ErasToCheckPerBlock (r:0 w:1) + /// Storage: FastUnstake ErasToCheckPerBlock (r:0 w:1) + /// Proof: FastUnstake ErasToCheckPerBlock (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn control() -> Weight { - // Minimum execution time: 4_138 nanoseconds. - Weight::from_ref_time(4_245_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_921_000 picoseconds. + Weight::from_parts(3_077_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/runtime/polkadot/src/weights/pallet_identity.rs b/runtime/polkadot/src/weights/pallet_identity.rs index 6c48341a6b91..5ce738a57ade 100644 --- a/runtime/polkadot/src/weights/pallet_identity.rs +++ b/runtime/polkadot/src/weights/pallet_identity.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_identity` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,209 +45,305 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_identity`. pub struct WeightInfo(PhantomData); impl pallet_identity::WeightInfo for WeightInfo { - // Storage: Identity Registrars (r:1 w:1) + /// Storage: Identity Registrars (r:1 w:1) + /// Proof: Identity Registrars (max_values: Some(1), max_size: Some(1141), added: 1636, mode: MaxEncodedLen) /// The range of component `r` is `[1, 19]`. fn add_registrar(r: u32, ) -> Weight { - // Minimum execution time: 17_230 nanoseconds. - Weight::from_ref_time(18_831_768) - // Standard Error: 3_060 - .saturating_add(Weight::from_ref_time(158_012).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `32 + r * (57 ±0)` + // Estimated: `2626` + // Minimum execution time: 12_470_000 picoseconds. + Weight::from_parts(13_063_945, 0) + .saturating_add(Weight::from_parts(0, 2626)) + // Standard Error: 1_718 + .saturating_add(Weight::from_parts(95_484, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity IdentityOf (r:1 w:1) + /// Storage: Identity IdentityOf (r:1 w:1) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) /// The range of component `r` is `[1, 20]`. /// The range of component `x` is `[0, 100]`. fn set_identity(r: u32, x: u32, ) -> Weight { - // Minimum execution time: 36_890 nanoseconds. - Weight::from_ref_time(36_334_451) - // Standard Error: 4_153 - .saturating_add(Weight::from_ref_time(83_699).saturating_mul(r.into())) - // Standard Error: 810 - .saturating_add(Weight::from_ref_time(357_545).saturating_mul(x.into())) + // Proof Size summary in bytes: + // Measured: `442 + r * (5 ±0)` + // Estimated: `11003` + // Minimum execution time: 28_961_000 picoseconds. + Weight::from_parts(29_773_203, 0) + .saturating_add(Weight::from_parts(0, 11003)) + // Standard Error: 4_460 + .saturating_add(Weight::from_parts(25_994, 0).saturating_mul(r.into())) + // Standard Error: 870 + .saturating_add(Weight::from_parts(437_384, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity IdentityOf (r:1 w:0) - // Storage: Identity SubsOf (r:1 w:1) - // Storage: Identity SuperOf (r:2 w:2) + /// Storage: Identity IdentityOf (r:1 w:0) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) + /// Storage: Identity SubsOf (r:1 w:1) + /// Proof: Identity SubsOf (max_values: None, max_size: Some(3258), added: 5733, mode: MaxEncodedLen) + /// Storage: Identity SuperOf (r:100 w:100) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) /// The range of component `s` is `[0, 100]`. fn set_subs_new(s: u32, ) -> Weight { - // Minimum execution time: 10_500 nanoseconds. - Weight::from_ref_time(28_652_188) - // Standard Error: 4_756 - .saturating_add(Weight::from_ref_time(2_254_536).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `101` + // Estimated: `18716 + s * (2589 ±0)` + // Minimum execution time: 9_352_000 picoseconds. + Weight::from_parts(22_292_854, 0) + .saturating_add(Weight::from_parts(0, 18716)) + // Standard Error: 4_294 + .saturating_add(Weight::from_parts(2_670_872, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(s.into()))) .saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) + .saturating_add(Weight::from_parts(0, 2589).saturating_mul(s.into())) } - // Storage: Identity IdentityOf (r:1 w:0) - // Storage: Identity SubsOf (r:1 w:1) - // Storage: Identity SuperOf (r:0 w:2) + /// Storage: Identity IdentityOf (r:1 w:0) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) + /// Storage: Identity SubsOf (r:1 w:1) + /// Proof: Identity SubsOf (max_values: None, max_size: Some(3258), added: 5733, mode: MaxEncodedLen) + /// Storage: Identity SuperOf (r:0 w:100) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) /// The range of component `p` is `[0, 100]`. fn set_subs_old(p: u32, ) -> Weight { - // Minimum execution time: 10_684 nanoseconds. - Weight::from_ref_time(29_135_170) - // Standard Error: 4_325 - .saturating_add(Weight::from_ref_time(971_628).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `194 + p * (32 ±0)` + // Estimated: `17726` + // Minimum execution time: 9_254_000 picoseconds. + Weight::from_parts(20_870_949, 0) + .saturating_add(Weight::from_parts(0, 17726)) + // Standard Error: 5_192 + .saturating_add(Weight::from_parts(1_121_454, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) } - // Storage: Identity SubsOf (r:1 w:1) - // Storage: Identity IdentityOf (r:1 w:1) - // Storage: Identity SuperOf (r:0 w:100) + /// Storage: Identity SubsOf (r:1 w:1) + /// Proof: Identity SubsOf (max_values: None, max_size: Some(3258), added: 5733, mode: MaxEncodedLen) + /// Storage: Identity IdentityOf (r:1 w:1) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) + /// Storage: Identity SuperOf (r:0 w:100) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) /// The range of component `r` is `[1, 20]`. /// The range of component `s` is `[0, 100]`. /// The range of component `x` is `[0, 100]`. - fn clear_identity(r: u32, s: u32, x: u32, ) -> Weight { - // Minimum execution time: 53_646 nanoseconds. - Weight::from_ref_time(35_490_280) - // Standard Error: 11_049 - .saturating_add(Weight::from_ref_time(172_227).saturating_mul(r.into())) - // Standard Error: 2_157 - .saturating_add(Weight::from_ref_time(951_835).saturating_mul(s.into())) - // Standard Error: 2_157 - .saturating_add(Weight::from_ref_time(179_431).saturating_mul(x.into())) + fn clear_identity(_r: u32, s: u32, x: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `469 + r * (5 ±0) + s * (32 ±0) + x * (66 ±0)` + // Estimated: `17726` + // Minimum execution time: 48_861_000 picoseconds. + Weight::from_parts(32_332_715, 0) + .saturating_add(Weight::from_parts(0, 17726)) + // Standard Error: 1_421 + .saturating_add(Weight::from_parts(1_064_012, 0).saturating_mul(s.into())) + // Standard Error: 1_421 + .saturating_add(Weight::from_parts(220_265, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) } - // Storage: Identity Registrars (r:1 w:0) - // Storage: Identity IdentityOf (r:1 w:1) + /// Storage: Identity Registrars (r:1 w:0) + /// Proof: Identity Registrars (max_values: Some(1), max_size: Some(1141), added: 1636, mode: MaxEncodedLen) + /// Storage: Identity IdentityOf (r:1 w:1) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) /// The range of component `r` is `[1, 20]`. /// The range of component `x` is `[0, 100]`. fn request_judgement(r: u32, x: u32, ) -> Weight { - // Minimum execution time: 38_625 nanoseconds. - Weight::from_ref_time(36_724_341) - // Standard Error: 5_302 - .saturating_add(Weight::from_ref_time(148_687).saturating_mul(r.into())) - // Standard Error: 1_034 - .saturating_add(Weight::from_ref_time(386_218).saturating_mul(x.into())) + // Proof Size summary in bytes: + // Measured: `367 + r * (57 ±0) + x * (66 ±0)` + // Estimated: `13629` + // Minimum execution time: 29_801_000 picoseconds. + Weight::from_parts(29_358_951, 0) + .saturating_add(Weight::from_parts(0, 13629)) + // Standard Error: 6_124 + .saturating_add(Weight::from_parts(86_133, 0).saturating_mul(r.into())) + // Standard Error: 1_195 + .saturating_add(Weight::from_parts(462_787, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity IdentityOf (r:1 w:1) + /// Storage: Identity IdentityOf (r:1 w:1) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) /// The range of component `r` is `[1, 20]`. /// The range of component `x` is `[0, 100]`. fn cancel_request(r: u32, x: u32, ) -> Weight { - // Minimum execution time: 35_653 nanoseconds. - Weight::from_ref_time(33_533_408) - // Standard Error: 3_998 - .saturating_add(Weight::from_ref_time(123_268).saturating_mul(r.into())) - // Standard Error: 780 - .saturating_add(Weight::from_ref_time(375_639).saturating_mul(x.into())) + // Proof Size summary in bytes: + // Measured: `398 + x * (66 ±0)` + // Estimated: `11003` + // Minimum execution time: 26_938_000 picoseconds. + Weight::from_parts(26_481_062, 0) + .saturating_add(Weight::from_parts(0, 11003)) + // Standard Error: 4_040 + .saturating_add(Weight::from_parts(74_333, 0).saturating_mul(r.into())) + // Standard Error: 788 + .saturating_add(Weight::from_parts(455_392, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity Registrars (r:1 w:1) + /// Storage: Identity Registrars (r:1 w:1) + /// Proof: Identity Registrars (max_values: Some(1), max_size: Some(1141), added: 1636, mode: MaxEncodedLen) /// The range of component `r` is `[1, 19]`. fn set_fee(r: u32, ) -> Weight { - // Minimum execution time: 8_966 nanoseconds. - Weight::from_ref_time(9_880_313) - // Standard Error: 2_446 - .saturating_add(Weight::from_ref_time(137_813).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `89 + r * (57 ±0)` + // Estimated: `2626` + // Minimum execution time: 8_173_000 picoseconds. + Weight::from_parts(8_620_743, 0) + .saturating_add(Weight::from_parts(0, 2626)) + // Standard Error: 2_076 + .saturating_add(Weight::from_parts(66_988, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity Registrars (r:1 w:1) + /// Storage: Identity Registrars (r:1 w:1) + /// Proof: Identity Registrars (max_values: Some(1), max_size: Some(1141), added: 1636, mode: MaxEncodedLen) /// The range of component `r` is `[1, 19]`. fn set_account_id(r: u32, ) -> Weight { - // Minimum execution time: 9_282 nanoseconds. - Weight::from_ref_time(10_192_241) - // Standard Error: 2_215 - .saturating_add(Weight::from_ref_time(131_233).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `89 + r * (57 ±0)` + // Estimated: `2626` + // Minimum execution time: 7_708_000 picoseconds. + Weight::from_parts(8_371_148, 0) + .saturating_add(Weight::from_parts(0, 2626)) + // Standard Error: 1_487 + .saturating_add(Weight::from_parts(85_715, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity Registrars (r:1 w:1) + /// Storage: Identity Registrars (r:1 w:1) + /// Proof: Identity Registrars (max_values: Some(1), max_size: Some(1141), added: 1636, mode: MaxEncodedLen) /// The range of component `r` is `[1, 19]`. fn set_fields(r: u32, ) -> Weight { - // Minimum execution time: 9_070 nanoseconds. - Weight::from_ref_time(10_027_272) - // Standard Error: 2_433 - .saturating_add(Weight::from_ref_time(125_053).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `89 + r * (57 ±0)` + // Estimated: `2626` + // Minimum execution time: 7_461_000 picoseconds. + Weight::from_parts(8_095_682, 0) + .saturating_add(Weight::from_parts(0, 2626)) + // Standard Error: 1_224 + .saturating_add(Weight::from_parts(91_512, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity Registrars (r:1 w:0) - // Storage: Identity IdentityOf (r:1 w:1) + /// Storage: Identity Registrars (r:1 w:0) + /// Proof: Identity Registrars (max_values: Some(1), max_size: Some(1141), added: 1636, mode: MaxEncodedLen) + /// Storage: Identity IdentityOf (r:1 w:1) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) /// The range of component `r` is `[1, 19]`. /// The range of component `x` is `[0, 100]`. fn provide_judgement(r: u32, x: u32, ) -> Weight { - // Minimum execution time: 29_147 nanoseconds. - Weight::from_ref_time(28_340_347) - // Standard Error: 4_876 - .saturating_add(Weight::from_ref_time(100_619).saturating_mul(r.into())) - // Standard Error: 902 - .saturating_add(Weight::from_ref_time(636_099).saturating_mul(x.into())) + // Proof Size summary in bytes: + // Measured: `445 + r * (57 ±0) + x * (66 ±0)` + // Estimated: `13629` + // Minimum execution time: 23_237_000 picoseconds. + Weight::from_parts(23_148_356, 0) + .saturating_add(Weight::from_parts(0, 13629)) + // Standard Error: 7_034 + .saturating_add(Weight::from_parts(60_384, 0).saturating_mul(r.into())) + // Standard Error: 1_301 + .saturating_add(Weight::from_parts(729_280, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity SubsOf (r:1 w:1) - // Storage: Identity IdentityOf (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: Identity SuperOf (r:0 w:100) + /// Storage: Identity SubsOf (r:1 w:1) + /// Proof: Identity SubsOf (max_values: None, max_size: Some(3258), added: 5733, mode: MaxEncodedLen) + /// Storage: Identity IdentityOf (r:1 w:1) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Identity SuperOf (r:0 w:100) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) /// The range of component `r` is `[1, 20]`. /// The range of component `s` is `[0, 100]`. /// The range of component `x` is `[0, 100]`. fn kill_identity(r: u32, s: u32, x: u32, ) -> Weight { - // Minimum execution time: 66_106 nanoseconds. - Weight::from_ref_time(48_177_759) - // Standard Error: 4_574 - .saturating_add(Weight::from_ref_time(140_713).saturating_mul(r.into())) - // Standard Error: 893 - .saturating_add(Weight::from_ref_time(947_959).saturating_mul(s.into())) - // Standard Error: 893 - .saturating_add(Weight::from_ref_time(179_678).saturating_mul(x.into())) + // Proof Size summary in bytes: + // Measured: `676 + r * (5 ±0) + s * (32 ±0) + x * (66 ±0)` + // Estimated: `21319` + // Minimum execution time: 62_305_000 picoseconds. + Weight::from_parts(43_824_574, 0) + .saturating_add(Weight::from_parts(0, 21319)) + // Standard Error: 6_762 + .saturating_add(Weight::from_parts(7_783, 0).saturating_mul(r.into())) + // Standard Error: 1_320 + .saturating_add(Weight::from_parts(1_084_810, 0).saturating_mul(s.into())) + // Standard Error: 1_320 + .saturating_add(Weight::from_parts(220_283, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) } - // Storage: Identity IdentityOf (r:1 w:0) - // Storage: Identity SuperOf (r:1 w:1) - // Storage: Identity SubsOf (r:1 w:1) + /// Storage: Identity IdentityOf (r:1 w:0) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) + /// Storage: Identity SuperOf (r:1 w:1) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) + /// Storage: Identity SubsOf (r:1 w:1) + /// Proof: Identity SubsOf (max_values: None, max_size: Some(3258), added: 5733, mode: MaxEncodedLen) /// The range of component `s` is `[0, 99]`. fn add_sub(s: u32, ) -> Weight { - // Minimum execution time: 32_596 nanoseconds. - Weight::from_ref_time(38_644_808) - // Standard Error: 1_736 - .saturating_add(Weight::from_ref_time(80_372).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `475 + s * (36 ±0)` + // Estimated: `21305` + // Minimum execution time: 26_054_000 picoseconds. + Weight::from_parts(31_294_326, 0) + .saturating_add(Weight::from_parts(0, 21305)) + // Standard Error: 1_490 + .saturating_add(Weight::from_parts(63_859, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Identity IdentityOf (r:1 w:0) - // Storage: Identity SuperOf (r:1 w:1) + /// Storage: Identity IdentityOf (r:1 w:0) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) + /// Storage: Identity SuperOf (r:1 w:1) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) /// The range of component `s` is `[1, 100]`. fn rename_sub(s: u32, ) -> Weight { - // Minimum execution time: 14_796 nanoseconds. - Weight::from_ref_time(16_788_043) - // Standard Error: 624 - .saturating_add(Weight::from_ref_time(28_891).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `591 + s * (3 ±0)` + // Estimated: `14582` + // Minimum execution time: 13_124_000 picoseconds. + Weight::from_parts(14_998_347, 0) + .saturating_add(Weight::from_parts(0, 14582)) + // Standard Error: 662 + .saturating_add(Weight::from_parts(18_822, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity IdentityOf (r:1 w:0) - // Storage: Identity SuperOf (r:1 w:1) - // Storage: Identity SubsOf (r:1 w:1) + /// Storage: Identity IdentityOf (r:1 w:0) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) + /// Storage: Identity SuperOf (r:1 w:1) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) + /// Storage: Identity SubsOf (r:1 w:1) + /// Proof: Identity SubsOf (max_values: None, max_size: Some(3258), added: 5733, mode: MaxEncodedLen) /// The range of component `s` is `[1, 100]`. fn remove_sub(s: u32, ) -> Weight { - // Minimum execution time: 37_696 nanoseconds. - Weight::from_ref_time(40_868_069) - // Standard Error: 1_210 - .saturating_add(Weight::from_ref_time(62_113).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `638 + s * (35 ±0)` + // Estimated: `21305` + // Minimum execution time: 29_801_000 picoseconds. + Weight::from_parts(33_494_677, 0) + .saturating_add(Weight::from_parts(0, 21305)) + // Standard Error: 1_121 + .saturating_add(Weight::from_parts(48_657, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Identity SuperOf (r:1 w:1) - // Storage: Identity SubsOf (r:1 w:1) + /// Storage: Identity SuperOf (r:1 w:1) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) + /// Storage: Identity SubsOf (r:1 w:1) + /// Proof: Identity SubsOf (max_values: None, max_size: Some(3258), added: 5733, mode: MaxEncodedLen) /// The range of component `s` is `[0, 99]`. fn quit_sub(s: u32, ) -> Weight { - // Minimum execution time: 25_674 nanoseconds. - Weight::from_ref_time(29_744_176) - // Standard Error: 1_203 - .saturating_add(Weight::from_ref_time(67_072).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `564 + s * (37 ±0)` + // Estimated: `10302` + // Minimum execution time: 20_091_000 picoseconds. + Weight::from_parts(22_990_717, 0) + .saturating_add(Weight::from_parts(0, 10302)) + // Standard Error: 1_053 + .saturating_add(Weight::from_parts(53_947, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } diff --git a/runtime/polkadot/src/weights/pallet_im_online.rs b/runtime/polkadot/src/weights/pallet_im_online.rs index 1d4fbaa4c0c3..f152c52b25e7 100644 --- a/runtime/polkadot/src/weights/pallet_im_online.rs +++ b/runtime/polkadot/src/weights/pallet_im_online.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_im_online` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,21 +45,32 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_im_online`. pub struct WeightInfo(PhantomData); impl pallet_im_online::WeightInfo for WeightInfo { - // Storage: Session Validators (r:1 w:0) - // Storage: Session CurrentIndex (r:1 w:0) - // Storage: ImOnline ReceivedHeartbeats (r:1 w:1) - // Storage: ImOnline AuthoredBlocks (r:1 w:0) - // Storage: ImOnline Keys (r:1 w:0) + /// Storage: Session Validators (r:1 w:0) + /// Proof Skipped: Session Validators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Session CurrentIndex (r:1 w:0) + /// Proof Skipped: Session CurrentIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ImOnline Keys (r:1 w:0) + /// Proof: ImOnline Keys (max_values: Some(1), max_size: Some(320002), added: 320497, mode: MaxEncodedLen) + /// Storage: ImOnline ReceivedHeartbeats (r:1 w:1) + /// Proof: ImOnline ReceivedHeartbeats (max_values: None, max_size: Some(10021032), added: 10023507, mode: MaxEncodedLen) + /// Storage: ImOnline AuthoredBlocks (r:1 w:0) + /// Proof: ImOnline AuthoredBlocks (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) /// The range of component `k` is `[1, 1000]`. /// The range of component `e` is `[1, 100]`. fn validate_unsigned_and_then_heartbeat(k: u32, e: u32, ) -> Weight { - // Minimum execution time: 96_694 nanoseconds. - Weight::from_ref_time(78_587_764) - // Standard Error: 304 - .saturating_add(Weight::from_ref_time(23_623).saturating_mul(k.into())) - // Standard Error: 3_072 - .saturating_add(Weight::from_ref_time(331_036).saturating_mul(e.into())) + // Proof Size summary in bytes: + // Measured: `361 + k * (32 ±0)` + // Estimated: `10349676 + e * (35 ±0) + k * (64 ±0)` + // Minimum execution time: 93_081_000 picoseconds. + Weight::from_parts(73_987_584, 0) + .saturating_add(Weight::from_parts(0, 10349676)) + // Standard Error: 265 + .saturating_add(Weight::from_parts(23_186, 0).saturating_mul(k.into())) + // Standard Error: 2_677 + .saturating_add(Weight::from_parts(385_390, 0).saturating_mul(e.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 35).saturating_mul(e.into())) + .saturating_add(Weight::from_parts(0, 64).saturating_mul(k.into())) } } diff --git a/runtime/polkadot/src/weights/pallet_indices.rs b/runtime/polkadot/src/weights/pallet_indices.rs index 05b4d6441313..6ddf36fb55b5 100644 --- a/runtime/polkadot/src/weights/pallet_indices.rs +++ b/runtime/polkadot/src/weights/pallet_indices.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_indices` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,40 +45,67 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_indices`. pub struct WeightInfo(PhantomData); impl pallet_indices::WeightInfo for WeightInfo { - // Storage: Indices Accounts (r:1 w:1) + /// Storage: Indices Accounts (r:1 w:1) + /// Proof: Indices Accounts (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) fn claim() -> Weight { - // Minimum execution time: 27_438 nanoseconds. - Weight::from_ref_time(27_968_000) + // Proof Size summary in bytes: + // Measured: `142` + // Estimated: `3534` + // Minimum execution time: 19_803_000 picoseconds. + Weight::from_parts(20_268_000, 0) + .saturating_add(Weight::from_parts(0, 3534)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Indices Accounts (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Indices Accounts (r:1 w:1) + /// Proof: Indices Accounts (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn transfer() -> Weight { - // Minimum execution time: 33_878 nanoseconds. - Weight::from_ref_time(34_231_000) + // Proof Size summary in bytes: + // Measured: `341` + // Estimated: `7127` + // Minimum execution time: 25_909_000 picoseconds. + Weight::from_parts(26_506_000, 0) + .saturating_add(Weight::from_parts(0, 7127)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Indices Accounts (r:1 w:1) + /// Storage: Indices Accounts (r:1 w:1) + /// Proof: Indices Accounts (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) fn free() -> Weight { - // Minimum execution time: 28_102 nanoseconds. - Weight::from_ref_time(28_607_000) + // Proof Size summary in bytes: + // Measured: `238` + // Estimated: `3534` + // Minimum execution time: 21_587_000 picoseconds. + Weight::from_parts(21_867_000, 0) + .saturating_add(Weight::from_parts(0, 3534)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Indices Accounts (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Indices Accounts (r:1 w:1) + /// Proof: Indices Accounts (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn force_transfer() -> Weight { - // Minimum execution time: 28_602 nanoseconds. - Weight::from_ref_time(28_983_000) + // Proof Size summary in bytes: + // Measured: `341` + // Estimated: `7127` + // Minimum execution time: 24_681_000 picoseconds. + Weight::from_parts(25_015_000, 0) + .saturating_add(Weight::from_parts(0, 7127)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Indices Accounts (r:1 w:1) + /// Storage: Indices Accounts (r:1 w:1) + /// Proof: Indices Accounts (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) fn freeze() -> Weight { - // Minimum execution time: 33_679 nanoseconds. - Weight::from_ref_time(34_218_000) + // Proof Size summary in bytes: + // Measured: `238` + // Estimated: `3534` + // Minimum execution time: 23_779_000 picoseconds. + Weight::from_parts(24_063_000, 0) + .saturating_add(Weight::from_parts(0, 3534)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/polkadot/src/weights/pallet_membership.rs b/runtime/polkadot/src/weights/pallet_membership.rs index c4556454ffbe..5385930dcf01 100644 --- a/runtime/polkadot/src/weights/pallet_membership.rs +++ b/runtime/polkadot/src/weights/pallet_membership.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_membership` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,95 +45,158 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_membership`. pub struct WeightInfo(PhantomData); impl pallet_membership::WeightInfo for WeightInfo { - // Storage: TechnicalMembership Members (r:1 w:1) - // Storage: TechnicalCommittee Proposals (r:1 w:0) - // Storage: TechnicalCommittee Members (r:0 w:1) - // Storage: TechnicalCommittee Prime (r:0 w:1) + /// Storage: TechnicalMembership Members (r:1 w:1) + /// Proof: TechnicalMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Proposals (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Members (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Prime (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[1, 99]`. fn add_member(m: u32, ) -> Weight { - // Minimum execution time: 21_960 nanoseconds. - Weight::from_ref_time(22_853_152) - // Standard Error: 546 - .saturating_add(Weight::from_ref_time(41_435).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `174 + m * (64 ±0)` + // Estimated: `6691 + m * (192 ±0)` + // Minimum execution time: 17_359_000 picoseconds. + Weight::from_parts(18_173_677, 0) + .saturating_add(Weight::from_parts(0, 6691)) + // Standard Error: 389 + .saturating_add(Weight::from_parts(35_085, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 192).saturating_mul(m.into())) } - // Storage: TechnicalMembership Members (r:1 w:1) - // Storage: TechnicalCommittee Proposals (r:1 w:0) - // Storage: TechnicalMembership Prime (r:1 w:0) - // Storage: TechnicalCommittee Members (r:0 w:1) - // Storage: TechnicalCommittee Prime (r:0 w:1) + /// Storage: TechnicalMembership Members (r:1 w:1) + /// Proof: TechnicalMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Proposals (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalMembership Prime (r:1 w:0) + /// Proof: TechnicalMembership Prime (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Members (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Prime (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[2, 100]`. fn remove_member(m: u32, ) -> Weight { - // Minimum execution time: 23_713 nanoseconds. - Weight::from_ref_time(25_201_268) - // Standard Error: 521 - .saturating_add(Weight::from_ref_time(36_459).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `278 + m * (64 ±0)` + // Estimated: `8520 + m * (192 ±0)` + // Minimum execution time: 19_931_000 picoseconds. + Weight::from_parts(20_950_239, 0) + .saturating_add(Weight::from_parts(0, 8520)) + // Standard Error: 514 + .saturating_add(Weight::from_parts(31_071, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 192).saturating_mul(m.into())) } - // Storage: TechnicalMembership Members (r:1 w:1) - // Storage: TechnicalCommittee Proposals (r:1 w:0) - // Storage: TechnicalMembership Prime (r:1 w:0) - // Storage: TechnicalCommittee Members (r:0 w:1) - // Storage: TechnicalCommittee Prime (r:0 w:1) + /// Storage: TechnicalMembership Members (r:1 w:1) + /// Proof: TechnicalMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Proposals (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalMembership Prime (r:1 w:0) + /// Proof: TechnicalMembership Prime (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Members (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Prime (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[2, 100]`. fn swap_member(m: u32, ) -> Weight { - // Minimum execution time: 24_740 nanoseconds. - Weight::from_ref_time(25_232_209) - // Standard Error: 508 - .saturating_add(Weight::from_ref_time(51_435).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `278 + m * (64 ±0)` + // Estimated: `8520 + m * (192 ±0)` + // Minimum execution time: 20_103_000 picoseconds. + Weight::from_parts(21_060_772, 0) + .saturating_add(Weight::from_parts(0, 8520)) + // Standard Error: 683 + .saturating_add(Weight::from_parts(49_542, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 192).saturating_mul(m.into())) } - // Storage: TechnicalMembership Members (r:1 w:1) - // Storage: TechnicalCommittee Proposals (r:1 w:0) - // Storage: TechnicalMembership Prime (r:1 w:0) - // Storage: TechnicalCommittee Members (r:0 w:1) - // Storage: TechnicalCommittee Prime (r:0 w:1) + /// Storage: TechnicalMembership Members (r:1 w:1) + /// Proof: TechnicalMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Proposals (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalMembership Prime (r:1 w:0) + /// Proof: TechnicalMembership Prime (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Members (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Prime (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[1, 100]`. fn reset_member(m: u32, ) -> Weight { - // Minimum execution time: 23_896 nanoseconds. - Weight::from_ref_time(25_910_024) - // Standard Error: 2_537 - .saturating_add(Weight::from_ref_time(157_048).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `278 + m * (64 ±0)` + // Estimated: `8520 + m * (192 ±0)` + // Minimum execution time: 19_104_000 picoseconds. + Weight::from_parts(21_237_054, 0) + .saturating_add(Weight::from_parts(0, 8520)) + // Standard Error: 767 + .saturating_add(Weight::from_parts(159_890, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 192).saturating_mul(m.into())) } - // Storage: TechnicalMembership Members (r:1 w:1) - // Storage: TechnicalCommittee Proposals (r:1 w:0) - // Storage: TechnicalMembership Prime (r:1 w:1) - // Storage: TechnicalCommittee Members (r:0 w:1) - // Storage: TechnicalCommittee Prime (r:0 w:1) + /// Storage: TechnicalMembership Members (r:1 w:1) + /// Proof: TechnicalMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Proposals (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalMembership Prime (r:1 w:1) + /// Proof: TechnicalMembership Prime (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Members (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Prime (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[1, 100]`. fn change_key(m: u32, ) -> Weight { - // Minimum execution time: 24_513 nanoseconds. - Weight::from_ref_time(25_845_559) - // Standard Error: 696 - .saturating_add(Weight::from_ref_time(50_292).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `278 + m * (64 ±0)` + // Estimated: `8520 + m * (192 ±0)` + // Minimum execution time: 20_430_000 picoseconds. + Weight::from_parts(21_468_055, 0) + .saturating_add(Weight::from_parts(0, 8520)) + // Standard Error: 509 + .saturating_add(Weight::from_parts(45_843, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(4)) + .saturating_add(Weight::from_parts(0, 192).saturating_mul(m.into())) } - // Storage: TechnicalMembership Members (r:1 w:0) - // Storage: TechnicalMembership Prime (r:0 w:1) - // Storage: TechnicalCommittee Prime (r:0 w:1) + /// Storage: TechnicalMembership Members (r:1 w:0) + /// Proof: TechnicalMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) + /// Storage: TechnicalMembership Prime (r:0 w:1) + /// Proof: TechnicalMembership Prime (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Prime (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[1, 100]`. fn set_prime(m: u32, ) -> Weight { - // Minimum execution time: 8_975 nanoseconds. - Weight::from_ref_time(9_329_864) - // Standard Error: 198 - .saturating_add(Weight::from_ref_time(9_927).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `32 + m * (32 ±0)` + // Estimated: `4719 + m * (32 ±0)` + // Minimum execution time: 8_082_000 picoseconds. + Weight::from_parts(8_670_672, 0) + .saturating_add(Weight::from_parts(0, 4719)) + // Standard Error: 370 + .saturating_add(Weight::from_parts(8_577, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) } - // Storage: TechnicalMembership Prime (r:0 w:1) - // Storage: TechnicalCommittee Prime (r:0 w:1) + /// Storage: TechnicalMembership Prime (r:0 w:1) + /// Proof: TechnicalMembership Prime (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Prime (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[1, 100]`. fn clear_prime(m: u32, ) -> Weight { - // Minimum execution time: 5_083 nanoseconds. - Weight::from_ref_time(5_442_895) - // Standard Error: 142 - .saturating_add(Weight::from_ref_time(1_435).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_331_000 picoseconds. + Weight::from_parts(3_547_187, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 84 + .saturating_add(Weight::from_parts(714, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().writes(2)) } } diff --git a/runtime/polkadot/src/weights/pallet_multisig.rs b/runtime/polkadot/src/weights/pallet_multisig.rs index b9305b0a4c58..71f0925c0184 100644 --- a/runtime/polkadot/src/weights/pallet_multisig.rs +++ b/runtime/polkadot/src/weights/pallet_multisig.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_multisig` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -46,80 +47,113 @@ pub struct WeightInfo(PhantomData); impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `z` is `[0, 10000]`. fn as_multi_threshold_1(z: u32, ) -> Weight { - // Minimum execution time: 15_141 nanoseconds. - Weight::from_ref_time(15_659_829) - // Standard Error: 3 - .saturating_add(Weight::from_ref_time(602).saturating_mul(z.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 11_763_000 picoseconds. + Weight::from_parts(12_332_905, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 2 + .saturating_add(Weight::from_parts(494, 0).saturating_mul(z.into())) } - // Storage: Multisig Multisigs (r:1 w:1) - // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) + /// Storage: Multisig Multisigs (r:1 w:1) + /// Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create(s: u32, z: u32, ) -> Weight { - // Minimum execution time: 44_874 nanoseconds. - Weight::from_ref_time(37_757_867) - // Standard Error: 1_278 - .saturating_add(Weight::from_ref_time(80_504).saturating_mul(s.into())) - // Standard Error: 12 - .saturating_add(Weight::from_ref_time(1_609).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(2)) + // Proof Size summary in bytes: + // Measured: `267 + s * (2 ±0)` + // Estimated: `6811` + // Minimum execution time: 36_295_000 picoseconds. + Weight::from_parts(32_052_492, 0) + .saturating_add(Weight::from_parts(0, 6811)) + // Standard Error: 1_348 + .saturating_add(Weight::from_parts(49_904, 0).saturating_mul(s.into())) + // Standard Error: 13 + .saturating_add(Weight::from_parts(1_181, 0).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Multisig Multisigs (r:1 w:1) + /// Storage: Multisig Multisigs (r:1 w:1) + /// Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve(s: u32, z: u32, ) -> Weight { - // Minimum execution time: 34_339 nanoseconds. - Weight::from_ref_time(27_565_615) - // Standard Error: 600 - .saturating_add(Weight::from_ref_time(78_419).saturating_mul(s.into())) - // Standard Error: 5 - .saturating_add(Weight::from_ref_time(1_586).saturating_mul(z.into())) + // Proof Size summary in bytes: + // Measured: `286` + // Estimated: `6811` + // Minimum execution time: 27_416_000 picoseconds. + Weight::from_parts(21_742_435, 0) + .saturating_add(Weight::from_parts(0, 6811)) + // Standard Error: 394 + .saturating_add(Weight::from_parts(59_934, 0).saturating_mul(s.into())) + // Standard Error: 3 + .saturating_add(Weight::from_parts(1_148, 0).saturating_mul(z.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Multisig Multisigs (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Multisig Multisigs (r:1 w:1) + /// Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_complete(s: u32, z: u32, ) -> Weight { - // Minimum execution time: 49_252 nanoseconds. - Weight::from_ref_time(39_821_299) - // Standard Error: 964 - .saturating_add(Weight::from_ref_time(108_976).saturating_mul(s.into())) - // Standard Error: 9 - .saturating_add(Weight::from_ref_time(1_637).saturating_mul(z.into())) + // Proof Size summary in bytes: + // Measured: `392 + s * (33 ±0)` + // Estimated: `10404` + // Minimum execution time: 41_621_000 picoseconds. + Weight::from_parts(34_915_089, 0) + .saturating_add(Weight::from_parts(0, 10404)) + // Standard Error: 485 + .saturating_add(Weight::from_parts(73_141, 0).saturating_mul(s.into())) + // Standard Error: 4 + .saturating_add(Weight::from_parts(1_217, 0).saturating_mul(z.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Multisig Multisigs (r:1 w:1) - // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) + /// Storage: Multisig Multisigs (r:1 w:1) + /// Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_create(s: u32, ) -> Weight { - // Minimum execution time: 33_110 nanoseconds. - Weight::from_ref_time(35_715_434) - // Standard Error: 963 - .saturating_add(Weight::from_ref_time(90_748).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(2)) + // Proof Size summary in bytes: + // Measured: `267 + s * (2 ±0)` + // Estimated: `6811` + // Minimum execution time: 28_725_000 picoseconds. + Weight::from_parts(29_326_994, 0) + .saturating_add(Weight::from_parts(0, 6811)) + // Standard Error: 661 + .saturating_add(Weight::from_parts(65_599, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Multisig Multisigs (r:1 w:1) + /// Storage: Multisig Multisigs (r:1 w:1) + /// Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_approve(s: u32, ) -> Weight { - // Minimum execution time: 24_600 nanoseconds. - Weight::from_ref_time(25_608_310) - // Standard Error: 601 - .saturating_add(Weight::from_ref_time(84_721).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `286` + // Estimated: `6811` + // Minimum execution time: 19_208_000 picoseconds. + Weight::from_parts(20_086_797, 0) + .saturating_add(Weight::from_parts(0, 6811)) + // Standard Error: 699 + .saturating_add(Weight::from_parts(54_418, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Multisig Multisigs (r:1 w:1) + /// Storage: Multisig Multisigs (r:1 w:1) + /// Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) /// The range of component `s` is `[2, 100]`. fn cancel_as_multi(s: u32, ) -> Weight { - // Minimum execution time: 34_071 nanoseconds. - Weight::from_ref_time(36_806_655) - // Standard Error: 1_417 - .saturating_add(Weight::from_ref_time(81_468).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `458 + s * (1 ±0)` + // Estimated: `6811` + // Minimum execution time: 29_217_000 picoseconds. + Weight::from_parts(30_489_686, 0) + .saturating_add(Weight::from_parts(0, 6811)) + // Standard Error: 641 + .saturating_add(Weight::from_parts(60_784, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/polkadot/src/weights/pallet_nomination_pools.rs b/runtime/polkadot/src/weights/pallet_nomination_pools.rs index 83822fe96acf..0d5e9a8da2b4 100644 --- a/runtime/polkadot/src/weights/pallet_nomination_pools.rs +++ b/runtime/polkadot/src/weights/pallet_nomination_pools.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_nomination_pools` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,246 +45,536 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_nomination_pools`. pub struct WeightInfo(PhantomData); impl pallet_nomination_pools::WeightInfo for WeightInfo { - // Storage: NominationPools MinJoinBond (r:1 w:0) - // Storage: NominationPools PoolMembers (r:1 w:1) - // Storage: NominationPools BondedPools (r:1 w:1) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: NominationPools RewardPools (r:1 w:1) - // Storage: System Account (r:2 w:1) - // Storage: NominationPools MaxPoolMembersPerPool (r:1 w:0) - // Storage: NominationPools MaxPoolMembers (r:1 w:0) - // Storage: NominationPools CounterForPoolMembers (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: VoterList ListNodes (r:3 w:3) - // Storage: VoterList ListBags (r:2 w:2) + /// Storage: NominationPools MinJoinBond (r:1 w:0) + /// Proof: NominationPools MinJoinBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: NominationPools PoolMembers (r:1 w:1) + /// Proof: NominationPools PoolMembers (max_values: None, max_size: Some(717), added: 3192, mode: MaxEncodedLen) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: NominationPools RewardPools (r:1 w:1) + /// Proof: NominationPools RewardPools (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen) + /// Storage: NominationPools GlobalMaxCommission (r:1 w:0) + /// Proof: NominationPools GlobalMaxCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:2 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: NominationPools MaxPoolMembersPerPool (r:1 w:0) + /// Proof: NominationPools MaxPoolMembersPerPool (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools MaxPoolMembers (r:1 w:0) + /// Proof: NominationPools MaxPoolMembers (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForPoolMembers (r:1 w:1) + /// Proof: NominationPools CounterForPoolMembers (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:3 w:3) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:2 w:2) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn join() -> Weight { - // Minimum execution time: 143_103 nanoseconds. - Weight::from_ref_time(146_231_000) - .saturating_add(T::DbWeight::get().reads(17)) + // Proof Size summary in bytes: + // Measured: `3195` + // Estimated: `52915` + // Minimum execution time: 153_317_000 picoseconds. + Weight::from_parts(155_205_000, 0) + .saturating_add(Weight::from_parts(0, 52915)) + .saturating_add(T::DbWeight::get().reads(18)) .saturating_add(T::DbWeight::get().writes(12)) } - // Storage: NominationPools PoolMembers (r:1 w:1) - // Storage: NominationPools BondedPools (r:1 w:1) - // Storage: NominationPools RewardPools (r:1 w:1) - // Storage: System Account (r:3 w:2) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: VoterList ListNodes (r:3 w:3) - // Storage: VoterList ListBags (r:2 w:2) + /// Storage: NominationPools PoolMembers (r:1 w:1) + /// Proof: NominationPools PoolMembers (max_values: None, max_size: Some(717), added: 3192, mode: MaxEncodedLen) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: NominationPools RewardPools (r:1 w:1) + /// Proof: NominationPools RewardPools (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen) + /// Storage: NominationPools GlobalMaxCommission (r:1 w:0) + /// Proof: NominationPools GlobalMaxCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:3 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:3 w:3) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:2 w:2) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn bond_extra_transfer() -> Weight { - // Minimum execution time: 140_240 nanoseconds. - Weight::from_ref_time(141_483_000) - .saturating_add(T::DbWeight::get().reads(14)) + // Proof Size summary in bytes: + // Measured: `3205` + // Estimated: `49550` + // Minimum execution time: 152_349_000 picoseconds. + Weight::from_parts(153_577_000, 0) + .saturating_add(Weight::from_parts(0, 49550)) + .saturating_add(T::DbWeight::get().reads(15)) .saturating_add(T::DbWeight::get().writes(12)) } - // Storage: NominationPools PoolMembers (r:1 w:1) - // Storage: NominationPools BondedPools (r:1 w:1) - // Storage: NominationPools RewardPools (r:1 w:1) - // Storage: System Account (r:3 w:3) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: VoterList ListNodes (r:2 w:2) - // Storage: VoterList ListBags (r:2 w:2) - fn bond_extra_reward() -> Weight { - // Minimum execution time: 144_939 nanoseconds. - Weight::from_ref_time(146_128_000) - .saturating_add(T::DbWeight::get().reads(13)) + /// Storage: NominationPools ClaimPermissions (r:1 w:0) + /// Proof: NominationPools ClaimPermissions (max_values: None, max_size: Some(41), added: 2516, mode: MaxEncodedLen) + /// Storage: NominationPools PoolMembers (r:1 w:1) + /// Proof: NominationPools PoolMembers (max_values: None, max_size: Some(717), added: 3192, mode: MaxEncodedLen) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: NominationPools RewardPools (r:1 w:1) + /// Proof: NominationPools RewardPools (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen) + /// Storage: NominationPools GlobalMaxCommission (r:1 w:0) + /// Proof: NominationPools GlobalMaxCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:3 w:3) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:2 w:2) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:2 w:2) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + fn bond_extra_other() -> Weight { + // Proof Size summary in bytes: + // Measured: `3152` + // Estimated: `50427` + // Minimum execution time: 163_676_000 picoseconds. + Weight::from_parts(164_543_000, 0) + .saturating_add(Weight::from_parts(0, 50427)) + .saturating_add(T::DbWeight::get().reads(15)) .saturating_add(T::DbWeight::get().writes(12)) } - // Storage: NominationPools PoolMembers (r:1 w:1) - // Storage: NominationPools BondedPools (r:1 w:1) - // Storage: NominationPools RewardPools (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: NominationPools ClaimPermissions (r:1 w:0) + /// Proof: NominationPools ClaimPermissions (max_values: None, max_size: Some(41), added: 2516, mode: MaxEncodedLen) + /// Storage: NominationPools PoolMembers (r:1 w:1) + /// Proof: NominationPools PoolMembers (max_values: None, max_size: Some(717), added: 3192, mode: MaxEncodedLen) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: NominationPools RewardPools (r:1 w:1) + /// Proof: NominationPools RewardPools (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen) + /// Storage: NominationPools GlobalMaxCommission (r:1 w:0) + /// Proof: NominationPools GlobalMaxCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn claim_payout() -> Weight { - // Minimum execution time: 54_769 nanoseconds. - Weight::from_ref_time(55_454_000) - .saturating_add(T::DbWeight::get().reads(4)) + // Proof Size summary in bytes: + // Measured: `1137` + // Estimated: `20012` + // Minimum execution time: 60_510_000 picoseconds. + Weight::from_parts(60_899_000, 0) + .saturating_add(Weight::from_parts(0, 20012)) + .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: NominationPools PoolMembers (r:1 w:1) - // Storage: NominationPools BondedPools (r:1 w:1) - // Storage: NominationPools RewardPools (r:1 w:1) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: System Account (r:2 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Staking Nominators (r:1 w:0) - // Storage: Staking MinNominatorBond (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) - // Storage: VoterList ListNodes (r:3 w:3) - // Storage: VoterList ListBags (r:2 w:2) - // Storage: NominationPools SubPoolsStorage (r:1 w:1) - // Storage: NominationPools CounterForSubPoolsStorage (r:1 w:1) + /// Storage: NominationPools PoolMembers (r:1 w:1) + /// Proof: NominationPools PoolMembers (max_values: None, max_size: Some(717), added: 3192, mode: MaxEncodedLen) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: NominationPools RewardPools (r:1 w:1) + /// Proof: NominationPools RewardPools (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: NominationPools GlobalMaxCommission (r:1 w:0) + /// Proof: NominationPools GlobalMaxCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:2 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:0) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: Staking MinNominatorBond (r:1 w:0) + /// Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:3 w:3) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:2 w:2) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: NominationPools SubPoolsStorage (r:1 w:1) + /// Proof: NominationPools SubPoolsStorage (max_values: None, max_size: Some(1197), added: 3672, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForSubPoolsStorage (r:1 w:1) + /// Proof: NominationPools CounterForSubPoolsStorage (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn unbond() -> Weight { - // Minimum execution time: 145_690 nanoseconds. - Weight::from_ref_time(146_966_000) - .saturating_add(T::DbWeight::get().reads(18)) + // Proof Size summary in bytes: + // Measured: `3475` + // Estimated: `60111` + // Minimum execution time: 160_499_000 picoseconds. + Weight::from_parts(165_823_000, 0) + .saturating_add(Weight::from_parts(0, 60111)) + .saturating_add(T::DbWeight::get().reads(19)) .saturating_add(T::DbWeight::get().writes(13)) } - // Storage: NominationPools BondedPools (r:1 w:0) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) + /// Storage: NominationPools BondedPools (r:1 w:0) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `s` is `[0, 100]`. fn pool_withdraw_unbonded(s: u32, ) -> Weight { - // Minimum execution time: 57_909 nanoseconds. - Weight::from_ref_time(59_529_561) - // Standard Error: 897 - .saturating_add(Weight::from_ref_time(14_204).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `1580` + // Estimated: `18031` + // Minimum execution time: 54_267_000 picoseconds. + Weight::from_parts(55_820_843, 0) + .saturating_add(Weight::from_parts(0, 18031)) + // Standard Error: 986 + .saturating_add(Weight::from_parts(3_879, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: NominationPools PoolMembers (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: NominationPools BondedPools (r:1 w:1) - // Storage: NominationPools SubPoolsStorage (r:1 w:1) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: NominationPools CounterForPoolMembers (r:1 w:1) + /// Storage: NominationPools PoolMembers (r:1 w:1) + /// Proof: NominationPools PoolMembers (max_values: None, max_size: Some(717), added: 3192, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: NominationPools SubPoolsStorage (r:1 w:1) + /// Proof: NominationPools SubPoolsStorage (max_values: None, max_size: Some(1197), added: 3672, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForPoolMembers (r:1 w:1) + /// Proof: NominationPools CounterForPoolMembers (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools ClaimPermissions (r:0 w:1) + /// Proof: NominationPools ClaimPermissions (max_values: None, max_size: Some(41), added: 2516, mode: MaxEncodedLen) /// The range of component `s` is `[0, 100]`. fn withdraw_unbonded_update(s: u32, ) -> Weight { - // Minimum execution time: 98_716 nanoseconds. - Weight::from_ref_time(100_649_362) - // Standard Error: 1_785 - .saturating_add(Weight::from_ref_time(16_983).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `2008` + // Estimated: `31957` + // Minimum execution time: 103_090_000 picoseconds. + Weight::from_parts(104_931_057, 0) + .saturating_add(Weight::from_parts(0, 31957)) + // Standard Error: 1_513 + .saturating_add(Weight::from_parts(19_309, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(9)) - .saturating_add(T::DbWeight::get().writes(7)) + .saturating_add(T::DbWeight::get().writes(8)) } - // Storage: NominationPools PoolMembers (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: NominationPools BondedPools (r:1 w:1) - // Storage: NominationPools SubPoolsStorage (r:1 w:1) - // Storage: Staking Bonded (r:1 w:1) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking SlashingSpans (r:1 w:0) - // Storage: Staking Validators (r:1 w:0) - // Storage: Staking Nominators (r:1 w:0) - // Storage: System Account (r:2 w:2) - // Storage: Balances Locks (r:1 w:1) - // Storage: NominationPools CounterForPoolMembers (r:1 w:1) - // Storage: NominationPools ReversePoolIdLookup (r:1 w:1) - // Storage: NominationPools CounterForReversePoolIdLookup (r:1 w:1) - // Storage: NominationPools RewardPools (r:1 w:1) - // Storage: NominationPools CounterForRewardPools (r:1 w:1) - // Storage: NominationPools CounterForSubPoolsStorage (r:1 w:1) - // Storage: NominationPools Metadata (r:1 w:1) - // Storage: NominationPools CounterForBondedPools (r:1 w:1) - // Storage: Staking Payee (r:0 w:1) + /// Storage: NominationPools PoolMembers (r:1 w:1) + /// Proof: NominationPools PoolMembers (max_values: None, max_size: Some(717), added: 3192, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: NominationPools SubPoolsStorage (r:1 w:1) + /// Proof: NominationPools SubPoolsStorage (max_values: None, max_size: Some(1197), added: 3672, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:1) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking SlashingSpans (r:1 w:0) + /// Proof Skipped: Staking SlashingSpans (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking Validators (r:1 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:0) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: System Account (r:2 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForPoolMembers (r:1 w:1) + /// Proof: NominationPools CounterForPoolMembers (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools ReversePoolIdLookup (r:1 w:1) + /// Proof: NominationPools ReversePoolIdLookup (max_values: None, max_size: Some(44), added: 2519, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForReversePoolIdLookup (r:1 w:1) + /// Proof: NominationPools CounterForReversePoolIdLookup (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools RewardPools (r:1 w:1) + /// Proof: NominationPools RewardPools (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForRewardPools (r:1 w:1) + /// Proof: NominationPools CounterForRewardPools (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForSubPoolsStorage (r:1 w:1) + /// Proof: NominationPools CounterForSubPoolsStorage (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools Metadata (r:1 w:1) + /// Proof: NominationPools Metadata (max_values: None, max_size: Some(270), added: 2745, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForBondedPools (r:1 w:1) + /// Proof: NominationPools CounterForBondedPools (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:0 w:1) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + /// Storage: NominationPools ClaimPermissions (r:0 w:1) + /// Proof: NominationPools ClaimPermissions (max_values: None, max_size: Some(41), added: 2516, mode: MaxEncodedLen) /// The range of component `s` is `[0, 100]`. - fn withdraw_unbonded_kill(s: u32, ) -> Weight { - // Minimum execution time: 148_300 nanoseconds. - Weight::from_ref_time(151_339_484) - // Standard Error: 2_554 - .saturating_add(Weight::from_ref_time(3_671).saturating_mul(s.into())) + fn withdraw_unbonded_kill(_s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `2364` + // Estimated: `64679` + // Minimum execution time: 162_339_000 picoseconds. + Weight::from_parts(165_469_959, 0) + .saturating_add(Weight::from_parts(0, 64679)) .saturating_add(T::DbWeight::get().reads(20)) - .saturating_add(T::DbWeight::get().writes(17)) + .saturating_add(T::DbWeight::get().writes(18)) } - // Storage: NominationPools LastPoolId (r:1 w:1) - // Storage: Staking MinNominatorBond (r:1 w:0) - // Storage: NominationPools MinCreateBond (r:1 w:0) - // Storage: NominationPools MinJoinBond (r:1 w:0) - // Storage: NominationPools MaxPools (r:1 w:0) - // Storage: NominationPools CounterForBondedPools (r:1 w:1) - // Storage: NominationPools PoolMembers (r:1 w:1) - // Storage: NominationPools MaxPoolMembersPerPool (r:1 w:0) - // Storage: NominationPools MaxPoolMembers (r:1 w:0) - // Storage: NominationPools CounterForPoolMembers (r:1 w:1) - // Storage: System Account (r:2 w:2) - // Storage: Staking Bonded (r:1 w:1) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) - // Storage: NominationPools RewardPools (r:1 w:1) - // Storage: NominationPools CounterForRewardPools (r:1 w:1) - // Storage: NominationPools ReversePoolIdLookup (r:1 w:1) - // Storage: NominationPools CounterForReversePoolIdLookup (r:1 w:1) - // Storage: NominationPools BondedPools (r:1 w:1) - // Storage: Staking Payee (r:0 w:1) + /// Storage: NominationPools LastPoolId (r:1 w:1) + /// Proof: NominationPools LastPoolId (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking MinNominatorBond (r:1 w:0) + /// Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: NominationPools MinCreateBond (r:1 w:0) + /// Proof: NominationPools MinCreateBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: NominationPools MinJoinBond (r:1 w:0) + /// Proof: NominationPools MinJoinBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: NominationPools MaxPools (r:1 w:0) + /// Proof: NominationPools MaxPools (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForBondedPools (r:1 w:1) + /// Proof: NominationPools CounterForBondedPools (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools PoolMembers (r:1 w:1) + /// Proof: NominationPools PoolMembers (max_values: None, max_size: Some(717), added: 3192, mode: MaxEncodedLen) + /// Storage: NominationPools MaxPoolMembersPerPool (r:1 w:0) + /// Proof: NominationPools MaxPoolMembersPerPool (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools MaxPoolMembers (r:1 w:0) + /// Proof: NominationPools MaxPoolMembers (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForPoolMembers (r:1 w:1) + /// Proof: NominationPools CounterForPoolMembers (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:2 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:1) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: NominationPools RewardPools (r:1 w:1) + /// Proof: NominationPools RewardPools (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForRewardPools (r:1 w:1) + /// Proof: NominationPools CounterForRewardPools (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools ReversePoolIdLookup (r:1 w:1) + /// Proof: NominationPools ReversePoolIdLookup (max_values: None, max_size: Some(44), added: 2519, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForReversePoolIdLookup (r:1 w:1) + /// Proof: NominationPools CounterForReversePoolIdLookup (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:0 w:1) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) fn create() -> Weight { - // Minimum execution time: 131_110 nanoseconds. - Weight::from_ref_time(134_810_000) + // Proof Size summary in bytes: + // Measured: `1188` + // Estimated: `51890` + // Minimum execution time: 142_161_000 picoseconds. + Weight::from_parts(144_156_000, 0) + .saturating_add(Weight::from_parts(0, 51890)) .saturating_add(T::DbWeight::get().reads(21)) .saturating_add(T::DbWeight::get().writes(15)) } - // Storage: NominationPools BondedPools (r:1 w:0) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:0) - // Storage: Staking MinNominatorBond (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) - // Storage: Staking MaxNominatorsCount (r:1 w:0) - // Storage: Staking Validators (r:2 w:0) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: VoterList ListNodes (r:1 w:1) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) - // Storage: Staking CounterForNominators (r:1 w:1) + /// Storage: NominationPools BondedPools (r:1 w:0) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking MinNominatorBond (r:1 w:0) + /// Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:1) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: Staking MaxNominatorsCount (r:1 w:0) + /// Proof: Staking MaxNominatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:17 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:1 w:1) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking CounterForNominators (r:1 w:1) + /// Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) /// The range of component `n` is `[1, 16]`. fn nominate(n: u32, ) -> Weight { - // Minimum execution time: 64_081 nanoseconds. - Weight::from_ref_time(65_357_718) - // Standard Error: 7_191 - .saturating_add(Weight::from_ref_time(1_010_507).saturating_mul(n.into())) + // Proof Size summary in bytes: + // Measured: `1745` + // Estimated: `33934 + n * (2520 ±0)` + // Minimum execution time: 66_947_000 picoseconds. + Weight::from_parts(67_531_417, 0) + .saturating_add(Weight::from_parts(0, 33934)) + // Standard Error: 7_943 + .saturating_add(Weight::from_parts(1_375_518, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(12)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(5)) + .saturating_add(Weight::from_parts(0, 2520).saturating_mul(n.into())) } - // Storage: NominationPools BondedPools (r:1 w:1) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:0) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) fn set_state() -> Weight { - // Minimum execution time: 38_828 nanoseconds. - Weight::from_ref_time(39_794_000) + // Proof Size summary in bytes: + // Measured: `1333` + // Estimated: `11778` + // Minimum execution time: 34_254_000 picoseconds. + Weight::from_parts(34_690_000, 0) + .saturating_add(Weight::from_parts(0, 11778)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: NominationPools BondedPools (r:1 w:0) - // Storage: NominationPools Metadata (r:1 w:1) - // Storage: NominationPools CounterForMetadata (r:1 w:1) + /// Storage: NominationPools BondedPools (r:1 w:0) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: NominationPools Metadata (r:1 w:1) + /// Proof: NominationPools Metadata (max_values: None, max_size: Some(270), added: 2745, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForMetadata (r:1 w:1) + /// Proof: NominationPools CounterForMetadata (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) /// The range of component `n` is `[1, 256]`. fn set_metadata(n: u32, ) -> Weight { - // Minimum execution time: 15_439 nanoseconds. - Weight::from_ref_time(16_039_093) - // Standard Error: 122 - .saturating_add(Weight::from_ref_time(1_612).saturating_mul(n.into())) + // Proof Size summary in bytes: + // Measured: `497` + // Estimated: `8909` + // Minimum execution time: 15_060_000 picoseconds. + Weight::from_parts(15_636_930, 0) + .saturating_add(Weight::from_parts(0, 8909)) + // Standard Error: 239 + .saturating_add(Weight::from_parts(2_097, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: NominationPools MinJoinBond (r:0 w:1) - // Storage: NominationPools MaxPoolMembers (r:0 w:1) - // Storage: NominationPools MaxPoolMembersPerPool (r:0 w:1) - // Storage: NominationPools MinCreateBond (r:0 w:1) - // Storage: NominationPools MaxPools (r:0 w:1) + /// Storage: NominationPools MinJoinBond (r:0 w:1) + /// Proof: NominationPools MinJoinBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: NominationPools MaxPoolMembers (r:0 w:1) + /// Proof: NominationPools MaxPoolMembers (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools MaxPoolMembersPerPool (r:0 w:1) + /// Proof: NominationPools MaxPoolMembersPerPool (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools MinCreateBond (r:0 w:1) + /// Proof: NominationPools MinCreateBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: NominationPools GlobalMaxCommission (r:0 w:1) + /// Proof: NominationPools GlobalMaxCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools MaxPools (r:0 w:1) + /// Proof: NominationPools MaxPools (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn set_configs() -> Weight { - // Minimum execution time: 6_258 nanoseconds. - Weight::from_ref_time(6_417_000) - .saturating_add(T::DbWeight::get().writes(5)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 6_224_000 picoseconds. + Weight::from_parts(6_449_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: NominationPools BondedPools (r:1 w:1) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) fn update_roles() -> Weight { - // Minimum execution time: 25_465 nanoseconds. - Weight::from_ref_time(25_862_000) + // Proof Size summary in bytes: + // Measured: `497` + // Estimated: `3685` + // Minimum execution time: 20_975_000 picoseconds. + Weight::from_parts(21_379_000, 0) + .saturating_add(Weight::from_parts(0, 3685)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: NominationPools BondedPools (r:1 w:0) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:0) - // Storage: Staking Validators (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) - // Storage: Staking CounterForNominators (r:1 w:1) - // Storage: VoterList ListNodes (r:1 w:1) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) + /// Storage: NominationPools BondedPools (r:1 w:0) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:1 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:1) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: Staking CounterForNominators (r:1 w:1) + /// Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:1 w:1) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn chill() -> Weight { - // Minimum execution time: 66_354 nanoseconds. - Weight::from_ref_time(67_067_000) + // Proof Size summary in bytes: + // Measured: `1908` + // Estimated: `29455` + // Minimum execution time: 66_803_000 picoseconds. + Weight::from_parts(67_694_000, 0) + .saturating_add(Weight::from_parts(0, 29455)) .saturating_add(T::DbWeight::get().reads(9)) .saturating_add(T::DbWeight::get().writes(5)) } + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: NominationPools RewardPools (r:1 w:1) + /// Proof: NominationPools RewardPools (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen) + /// Storage: NominationPools GlobalMaxCommission (r:1 w:0) + /// Proof: NominationPools GlobalMaxCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:0) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + fn set_commission() -> Weight { + // Proof Size summary in bytes: + // Measured: `736` + // Estimated: `12324` + // Minimum execution time: 33_778_000 picoseconds. + Weight::from_parts(34_088_000, 0) + .saturating_add(Weight::from_parts(0, 12324)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(2)) + } + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + fn set_commission_max() -> Weight { + // Proof Size summary in bytes: + // Measured: `537` + // Estimated: `3685` + // Minimum execution time: 19_949_000 picoseconds. + Weight::from_parts(20_153_000, 0) + .saturating_add(Weight::from_parts(0, 3685)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + fn set_commission_change_rate() -> Weight { + // Proof Size summary in bytes: + // Measured: `497` + // Estimated: `3685` + // Minimum execution time: 20_431_000 picoseconds. + Weight::from_parts(20_881_000, 0) + .saturating_add(Weight::from_parts(0, 3685)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: NominationPools PoolMembers (r:1 w:0) + /// Proof: NominationPools PoolMembers (max_values: None, max_size: Some(717), added: 3192, mode: MaxEncodedLen) + /// Storage: NominationPools ClaimPermissions (r:1 w:1) + /// Proof: NominationPools ClaimPermissions (max_values: None, max_size: Some(41), added: 2516, mode: MaxEncodedLen) + fn set_claim_permission() -> Weight { + // Proof Size summary in bytes: + // Measured: `508` + // Estimated: `7688` + // Minimum execution time: 15_214_000 picoseconds. + Weight::from_parts(15_524_000, 0) + .saturating_add(Weight::from_parts(0, 7688)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: NominationPools BondedPools (r:1 w:0) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: NominationPools RewardPools (r:1 w:1) + /// Proof: NominationPools RewardPools (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen) + /// Storage: NominationPools GlobalMaxCommission (r:1 w:0) + /// Proof: NominationPools GlobalMaxCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + fn claim_commission() -> Weight { + // Proof Size summary in bytes: + // Measured: `934` + // Estimated: `12324` + // Minimum execution time: 45_053_000 picoseconds. + Weight::from_parts(45_573_000, 0) + .saturating_add(Weight::from_parts(0, 12324)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(2)) + } } diff --git a/runtime/polkadot/src/weights/pallet_preimage.rs b/runtime/polkadot/src/weights/pallet_preimage.rs index 3e00fe90a37c..05804b3acf3c 100644 --- a/runtime/polkadot/src/weights/pallet_preimage.rs +++ b/runtime/polkadot/src/weights/pallet_preimage.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_preimage` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,102 +45,168 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_preimage`. pub struct WeightInfo(PhantomData); impl pallet_preimage::WeightInfo for WeightInfo { - // Storage: Preimage StatusFor (r:1 w:1) - // Storage: Preimage PreimageFor (r:0 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Preimage PreimageFor (r:0 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) /// The range of component `s` is `[0, 4194304]`. fn note_preimage(s: u32, ) -> Weight { - // Minimum execution time: 30_811 nanoseconds. - Weight::from_ref_time(31_480_000) + // Proof Size summary in bytes: + // Measured: `143` + // Estimated: `3556` + // Minimum execution time: 26_903_000 picoseconds. + Weight::from_parts(27_190_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(2_369).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(1_973, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Preimage StatusFor (r:1 w:1) - // Storage: Preimage PreimageFor (r:0 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Preimage PreimageFor (r:0 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) /// The range of component `s` is `[0, 4194304]`. fn note_requested_preimage(s: u32, ) -> Weight { - // Minimum execution time: 21_142 nanoseconds. - Weight::from_ref_time(21_458_000) + // Proof Size summary in bytes: + // Measured: `106` + // Estimated: `3556` + // Minimum execution time: 17_548_000 picoseconds. + Weight::from_parts(17_666_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(2_368).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(1_967, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Preimage StatusFor (r:1 w:1) - // Storage: Preimage PreimageFor (r:0 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Preimage PreimageFor (r:0 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) /// The range of component `s` is `[0, 4194304]`. fn note_no_deposit_preimage(s: u32, ) -> Weight { - // Minimum execution time: 19_472 nanoseconds. - Weight::from_ref_time(19_721_000) + // Proof Size summary in bytes: + // Measured: `106` + // Estimated: `3556` + // Minimum execution time: 15_790_000 picoseconds. + Weight::from_parts(16_099_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(2_369).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(1_969, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Preimage StatusFor (r:1 w:1) - // Storage: Preimage PreimageFor (r:0 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Preimage PreimageFor (r:0 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) fn unnote_preimage() -> Weight { - // Minimum execution time: 41_810 nanoseconds. - Weight::from_ref_time(43_330_000) + // Proof Size summary in bytes: + // Measured: `289` + // Estimated: `3556` + // Minimum execution time: 33_266_000 picoseconds. + Weight::from_parts(34_064_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Preimage StatusFor (r:1 w:1) - // Storage: Preimage PreimageFor (r:0 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Preimage PreimageFor (r:0 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) fn unnote_no_deposit_preimage() -> Weight { - // Minimum execution time: 30_394 nanoseconds. - Weight::from_ref_time(31_752_000) + // Proof Size summary in bytes: + // Measured: `144` + // Estimated: `3556` + // Minimum execution time: 22_796_000 picoseconds. + Weight::from_parts(23_386_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn request_preimage() -> Weight { - // Minimum execution time: 26_415 nanoseconds. - Weight::from_ref_time(27_561_000) + // Proof Size summary in bytes: + // Measured: `188` + // Estimated: `3556` + // Minimum execution time: 19_426_000 picoseconds. + Weight::from_parts(20_293_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn request_no_deposit_preimage() -> Weight { - // Minimum execution time: 13_855 nanoseconds. - Weight::from_ref_time(14_614_000) + // Proof Size summary in bytes: + // Measured: `144` + // Estimated: `3556` + // Minimum execution time: 12_514_000 picoseconds. + Weight::from_parts(13_218_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn request_unnoted_preimage() -> Weight { - // Minimum execution time: 18_789 nanoseconds. - Weight::from_ref_time(19_438_000) + // Proof Size summary in bytes: + // Measured: `42` + // Estimated: `3556` + // Minimum execution time: 13_987_000 picoseconds. + Weight::from_parts(14_548_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn request_requested_preimage() -> Weight { - // Minimum execution time: 8_786 nanoseconds. - Weight::from_ref_time(9_201_000) + // Proof Size summary in bytes: + // Measured: `106` + // Estimated: `3556` + // Minimum execution time: 8_946_000 picoseconds. + Weight::from_parts(9_307_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Preimage StatusFor (r:1 w:1) - // Storage: Preimage PreimageFor (r:0 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Preimage PreimageFor (r:0 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) fn unrequest_preimage() -> Weight { - // Minimum execution time: 26_958 nanoseconds. - Weight::from_ref_time(27_848_000) + // Proof Size summary in bytes: + // Measured: `144` + // Estimated: `3556` + // Minimum execution time: 21_083_000 picoseconds. + Weight::from_parts(21_862_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn unrequest_unnoted_preimage() -> Weight { - // Minimum execution time: 8_899 nanoseconds. - Weight::from_ref_time(9_226_000) + // Proof Size summary in bytes: + // Measured: `106` + // Estimated: `3556` + // Minimum execution time: 8_890_000 picoseconds. + Weight::from_parts(9_259_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn unrequest_multi_referenced_preimage() -> Weight { - // Minimum execution time: 8_887 nanoseconds. - Weight::from_ref_time(9_215_000) + // Proof Size summary in bytes: + // Measured: `106` + // Estimated: `3556` + // Minimum execution time: 8_792_000 picoseconds. + Weight::from_parts(9_369_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/polkadot/src/weights/pallet_proxy.rs b/runtime/polkadot/src/weights/pallet_proxy.rs index f926a7feb06b..b4bb0cbc1f64 100644 --- a/runtime/polkadot/src/weights/pallet_proxy.rs +++ b/runtime/polkadot/src/weights/pallet_proxy.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_proxy` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,121 +45,170 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_proxy`. pub struct WeightInfo(PhantomData); impl pallet_proxy::WeightInfo for WeightInfo { - // Storage: Proxy Proxies (r:1 w:0) + /// Storage: Proxy Proxies (r:1 w:0) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) /// The range of component `p` is `[1, 31]`. fn proxy(p: u32, ) -> Weight { - // Minimum execution time: 21_329 nanoseconds. - Weight::from_ref_time(23_204_129) - // Standard Error: 4_778 - .saturating_add(Weight::from_ref_time(7_081).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `227 + p * (37 ±0)` + // Estimated: `4706` + // Minimum execution time: 15_240_000 picoseconds. + Weight::from_parts(16_156_554, 0) + .saturating_add(Weight::from_parts(0, 4706)) + // Standard Error: 1_183 + .saturating_add(Weight::from_parts(31_488, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) } - // Storage: Proxy Proxies (r:1 w:0) - // Storage: Proxy Announcements (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Proxy Proxies (r:1 w:0) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) + /// Storage: Proxy Announcements (r:1 w:1) + /// Proof: Proxy Announcements (max_values: None, max_size: Some(2233), added: 4708, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn proxy_announced(a: u32, p: u32, ) -> Weight { - // Minimum execution time: 40_046 nanoseconds. - Weight::from_ref_time(39_926_546) - // Standard Error: 1_973 - .saturating_add(Weight::from_ref_time(134_587).saturating_mul(a.into())) - // Standard Error: 2_039 - .saturating_add(Weight::from_ref_time(41_747).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `554 + a * (68 ±0) + p * (37 ±0)` + // Estimated: `13997` + // Minimum execution time: 33_768_000 picoseconds. + Weight::from_parts(34_423_100, 0) + .saturating_add(Weight::from_parts(0, 13997)) + // Standard Error: 1_930 + .saturating_add(Weight::from_parts(146_962, 0).saturating_mul(a.into())) + // Standard Error: 1_994 + .saturating_add(Weight::from_parts(30_433, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Proxy Announcements (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Proxy Announcements (r:1 w:1) + /// Proof: Proxy Announcements (max_values: None, max_size: Some(2233), added: 4708, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. - fn remove_announcement(a: u32, p: u32, ) -> Weight { - // Minimum execution time: 27_653 nanoseconds. - Weight::from_ref_time(28_516_149) - // Standard Error: 1_454 - .saturating_add(Weight::from_ref_time(135_988).saturating_mul(a.into())) - // Standard Error: 1_502 - .saturating_add(Weight::from_ref_time(5_439).saturating_mul(p.into())) + fn remove_announcement(a: u32, _p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `469 + a * (68 ±0)` + // Estimated: `9291` + // Minimum execution time: 21_123_000 picoseconds. + Weight::from_parts(22_386_093, 0) + .saturating_add(Weight::from_parts(0, 9291)) + // Standard Error: 1_359 + .saturating_add(Weight::from_parts(145_403, 0).saturating_mul(a.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Proxy Announcements (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Proxy Announcements (r:1 w:1) + /// Proof: Proxy Announcements (max_values: None, max_size: Some(2233), added: 4708, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. - fn reject_announcement(a: u32, p: u32, ) -> Weight { - // Minimum execution time: 27_549 nanoseconds. - Weight::from_ref_time(28_723_806) - // Standard Error: 1_606 - .saturating_add(Weight::from_ref_time(128_854).saturating_mul(a.into())) - // Standard Error: 1_659 - .saturating_add(Weight::from_ref_time(3_709).saturating_mul(p.into())) + fn reject_announcement(a: u32, _p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `469 + a * (68 ±0)` + // Estimated: `9291` + // Minimum execution time: 21_494_000 picoseconds. + Weight::from_parts(22_643_298, 0) + .saturating_add(Weight::from_parts(0, 9291)) + // Standard Error: 1_356 + .saturating_add(Weight::from_parts(139_061, 0).saturating_mul(a.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Proxy Proxies (r:1 w:0) - // Storage: Proxy Announcements (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Proxy Proxies (r:1 w:0) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) + /// Storage: Proxy Announcements (r:1 w:1) + /// Proof: Proxy Announcements (max_values: None, max_size: Some(2233), added: 4708, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn announce(a: u32, p: u32, ) -> Weight { - // Minimum execution time: 35_861 nanoseconds. - Weight::from_ref_time(37_444_836) - // Standard Error: 2_432 - .saturating_add(Weight::from_ref_time(114_339).saturating_mul(a.into())) - // Standard Error: 2_513 - .saturating_add(Weight::from_ref_time(30_891).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `486 + a * (68 ±0) + p * (37 ±0)` + // Estimated: `13997` + // Minimum execution time: 29_471_000 picoseconds. + Weight::from_parts(31_139_616, 0) + .saturating_add(Weight::from_parts(0, 13997)) + // Standard Error: 2_327 + .saturating_add(Weight::from_parts(134_479, 0).saturating_mul(a.into())) + // Standard Error: 2_404 + .saturating_add(Weight::from_parts(27_990, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Proxy Proxies (r:1 w:1) + /// Storage: Proxy Proxies (r:1 w:1) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) /// The range of component `p` is `[1, 31]`. fn add_proxy(p: u32, ) -> Weight { - // Minimum execution time: 29_594 nanoseconds. - Weight::from_ref_time(30_718_568) - // Standard Error: 1_883 - .saturating_add(Weight::from_ref_time(76_814).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `227 + p * (37 ±0)` + // Estimated: `4706` + // Minimum execution time: 22_663_000 picoseconds. + Weight::from_parts(23_437_086, 0) + .saturating_add(Weight::from_parts(0, 4706)) + // Standard Error: 1_534 + .saturating_add(Weight::from_parts(51_713, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Proxy Proxies (r:1 w:1) + /// Storage: Proxy Proxies (r:1 w:1) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) /// The range of component `p` is `[1, 31]`. fn remove_proxy(p: u32, ) -> Weight { - // Minimum execution time: 29_044 nanoseconds. - Weight::from_ref_time(30_776_120) - // Standard Error: 2_244 - .saturating_add(Weight::from_ref_time(95_302).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `227 + p * (37 ±0)` + // Estimated: `4706` + // Minimum execution time: 22_175_000 picoseconds. + Weight::from_parts(23_236_442, 0) + .saturating_add(Weight::from_parts(0, 4706)) + // Standard Error: 1_888 + .saturating_add(Weight::from_parts(63_413, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Proxy Proxies (r:1 w:1) + /// Storage: Proxy Proxies (r:1 w:1) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) /// The range of component `p` is `[1, 31]`. fn remove_proxies(p: u32, ) -> Weight { - // Minimum execution time: 25_496 nanoseconds. - Weight::from_ref_time(26_827_913) - // Standard Error: 1_766 - .saturating_add(Weight::from_ref_time(48_173).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `227 + p * (37 ±0)` + // Estimated: `4706` + // Minimum execution time: 17_652_000 picoseconds. + Weight::from_parts(18_389_443, 0) + .saturating_add(Weight::from_parts(0, 4706)) + // Standard Error: 1_218 + .saturating_add(Weight::from_parts(34_491, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) - // Storage: Proxy Proxies (r:1 w:1) + /// Storage: Proxy Proxies (r:1 w:1) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) /// The range of component `p` is `[1, 31]`. - fn create_pure(p: u32, ) -> Weight { - // Minimum execution time: 32_980 nanoseconds. - Weight::from_ref_time(34_087_853) - // Standard Error: 2_002 - .saturating_add(Weight::from_ref_time(27_277).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(2)) + fn create_pure(_p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `239` + // Estimated: `4706` + // Minimum execution time: 24_392_000 picoseconds. + Weight::from_parts(25_664_761, 0) + .saturating_add(Weight::from_parts(0, 4706)) + .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Proxy Proxies (r:1 w:1) + /// Storage: Proxy Proxies (r:1 w:1) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) /// The range of component `p` is `[0, 30]`. fn kill_pure(p: u32, ) -> Weight { - // Minimum execution time: 27_148 nanoseconds. - Weight::from_ref_time(28_301_699) - // Standard Error: 1_605 - .saturating_add(Weight::from_ref_time(40_708).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `264 + p * (37 ±0)` + // Estimated: `4706` + // Minimum execution time: 18_839_000 picoseconds. + Weight::from_parts(19_781_900, 0) + .saturating_add(Weight::from_parts(0, 4706)) + // Standard Error: 1_148 + .saturating_add(Weight::from_parts(26_532, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/polkadot/src/weights/pallet_scheduler.rs b/runtime/polkadot/src/weights/pallet_scheduler.rs index de5d5aea83fb..a74b3d386a38 100644 --- a/runtime/polkadot/src/weights/pallet_scheduler.rs +++ b/runtime/polkadot/src/weights/pallet_scheduler.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_scheduler` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,96 +45,157 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_scheduler`. pub struct WeightInfo(PhantomData); impl pallet_scheduler::WeightInfo for WeightInfo { - // Storage: Scheduler IncompleteSince (r:1 w:1) + /// Storage: Scheduler IncompleteSince (r:1 w:1) + /// Proof: Scheduler IncompleteSince (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn service_agendas_base() -> Weight { - // Minimum execution time: 4_882 nanoseconds. - Weight::from_ref_time(4_988_000) + // Proof Size summary in bytes: + // Measured: `69` + // Estimated: `1489` + // Minimum execution time: 4_858_000 picoseconds. + Weight::from_parts(5_072_000, 0) + .saturating_add(Weight::from_parts(0, 1489)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) /// The range of component `s` is `[0, 50]`. fn service_agenda_base(s: u32, ) -> Weight { - // Minimum execution time: 4_300 nanoseconds. - Weight::from_ref_time(7_468_138) - // Standard Error: 1_864 - .saturating_add(Weight::from_ref_time(673_619).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `116 + s * (177 ±0)` + // Estimated: `42428` + // Minimum execution time: 4_519_000 picoseconds. + Weight::from_parts(7_811_863, 0) + .saturating_add(Weight::from_parts(0, 42428)) + // Standard Error: 2_079 + .saturating_add(Weight::from_parts(766_213, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } fn service_task_base() -> Weight { - // Minimum execution time: 9_989 nanoseconds. - Weight::from_ref_time(10_282_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 5_627_000 picoseconds. + Weight::from_parts(5_756_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } - // Storage: Preimage PreimageFor (r:1 w:1) - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Preimage PreimageFor (r:1 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: Measured) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) /// The range of component `s` is `[128, 4194304]`. fn service_task_fetched(s: u32, ) -> Weight { - // Minimum execution time: 22_100 nanoseconds. - Weight::from_ref_time(22_392_000) + // Proof Size summary in bytes: + // Measured: `179 + s * (1 ±0)` + // Estimated: `7200 + s * (1 ±0)` + // Minimum execution time: 19_882_000 picoseconds. + Weight::from_parts(20_080_000, 0) + .saturating_add(Weight::from_parts(0, 7200)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(1_246).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(1_169, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 1).saturating_mul(s.into())) } - // Storage: Scheduler Lookup (r:0 w:1) + /// Storage: Scheduler Lookup (r:0 w:1) + /// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) fn service_task_named() -> Weight { - // Minimum execution time: 11_262 nanoseconds. - Weight::from_ref_time(11_618_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_189_000 picoseconds. + Weight::from_parts(7_300_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } fn service_task_periodic() -> Weight { - // Minimum execution time: 9_703 nanoseconds. - Weight::from_ref_time(10_061_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 5_591_000 picoseconds. + Weight::from_parts(5_846_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } fn execute_dispatch_signed() -> Weight { - // Minimum execution time: 4_326 nanoseconds. - Weight::from_ref_time(4_452_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_829_000 picoseconds. + Weight::from_parts(2_934_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } fn execute_dispatch_unsigned() -> Weight { - // Minimum execution time: 4_301 nanoseconds. - Weight::from_ref_time(4_414_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_882_000 picoseconds. + Weight::from_parts(3_011_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) /// The range of component `s` is `[0, 49]`. fn schedule(s: u32, ) -> Weight { - // Minimum execution time: 17_902 nanoseconds. - Weight::from_ref_time(22_354_786) - // Standard Error: 2_469 - .saturating_add(Weight::from_ref_time(692_078).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `116 + s * (177 ±0)` + // Estimated: `42428` + // Minimum execution time: 14_713_000 picoseconds. + Weight::from_parts(17_974_480, 0) + .saturating_add(Weight::from_parts(0, 42428)) + // Standard Error: 2_070 + .saturating_add(Weight::from_parts(764_707, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Scheduler Agenda (r:1 w:1) - // Storage: Scheduler Lookup (r:0 w:1) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) + /// Storage: Scheduler Lookup (r:0 w:1) + /// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) /// The range of component `s` is `[1, 50]`. fn cancel(s: u32, ) -> Weight { - // Minimum execution time: 20_924 nanoseconds. - Weight::from_ref_time(22_194_832) - // Standard Error: 1_827 - .saturating_add(Weight::from_ref_time(688_433).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `116 + s * (177 ±0)` + // Estimated: `42428` + // Minimum execution time: 18_767_000 picoseconds. + Weight::from_parts(18_850_698, 0) + .saturating_add(Weight::from_parts(0, 42428)) + // Standard Error: 2_413 + .saturating_add(Weight::from_parts(1_357_448, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Scheduler Lookup (r:1 w:1) - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: Scheduler Lookup (r:1 w:1) + /// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) /// The range of component `s` is `[0, 49]`. fn schedule_named(s: u32, ) -> Weight { - // Minimum execution time: 20_649 nanoseconds. - Weight::from_ref_time(25_859_620) - // Standard Error: 3_439 - .saturating_add(Weight::from_ref_time(716_369).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `293 + s * (185 ±0)` + // Estimated: `45941` + // Minimum execution time: 17_916_000 picoseconds. + Weight::from_parts(22_059_321, 0) + .saturating_add(Weight::from_parts(0, 45941)) + // Standard Error: 2_824 + .saturating_add(Weight::from_parts(799_039, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Scheduler Lookup (r:1 w:1) - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: Scheduler Lookup (r:1 w:1) + /// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) /// The range of component `s` is `[1, 50]`. fn cancel_named(s: u32, ) -> Weight { - // Minimum execution time: 21_347 nanoseconds. - Weight::from_ref_time(23_894_279) - // Standard Error: 2_268 - .saturating_add(Weight::from_ref_time(709_491).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `319 + s * (185 ±0)` + // Estimated: `45941` + // Minimum execution time: 20_119_000 picoseconds. + Weight::from_parts(20_649_613, 0) + .saturating_add(Weight::from_parts(0, 45941)) + // Standard Error: 2_688 + .saturating_add(Weight::from_parts(1_382_906, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } diff --git a/runtime/polkadot/src/weights/pallet_session.rs b/runtime/polkadot/src/weights/pallet_session.rs index d779eb021067..20f15e4847b4 100644 --- a/runtime/polkadot/src/weights/pallet_session.rs +++ b/runtime/polkadot/src/weights/pallet_session.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_session` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,21 +45,35 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_session`. pub struct WeightInfo(PhantomData); impl pallet_session::WeightInfo for WeightInfo { - // Storage: Staking Ledger (r:1 w:0) - // Storage: Session NextKeys (r:1 w:1) - // Storage: Session KeyOwner (r:6 w:6) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Session NextKeys (r:1 w:1) + /// Proof Skipped: Session NextKeys (max_values: None, max_size: None, mode: Measured) + /// Storage: Session KeyOwner (r:6 w:6) + /// Proof Skipped: Session KeyOwner (max_values: None, max_size: None, mode: Measured) fn set_keys() -> Weight { - // Minimum execution time: 52_041 nanoseconds. - Weight::from_ref_time(54_043_000) + // Proof Size summary in bytes: + // Measured: `1887` + // Estimated: `27635` + // Minimum execution time: 52_350_000 picoseconds. + Weight::from_parts(53_422_000, 0) + .saturating_add(Weight::from_parts(0, 27635)) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(7)) } - // Storage: Staking Ledger (r:1 w:0) - // Storage: Session NextKeys (r:1 w:1) - // Storage: Session KeyOwner (r:0 w:6) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Session NextKeys (r:1 w:1) + /// Proof Skipped: Session NextKeys (max_values: None, max_size: None, mode: Measured) + /// Storage: Session KeyOwner (r:0 w:6) + /// Proof Skipped: Session KeyOwner (max_values: None, max_size: None, mode: Measured) fn purge_keys() -> Weight { - // Minimum execution time: 39_425 nanoseconds. - Weight::from_ref_time(41_088_000) + // Proof Size summary in bytes: + // Measured: `1751` + // Estimated: `11523` + // Minimum execution time: 36_833_000 picoseconds. + Weight::from_parts(37_834_000, 0) + .saturating_add(Weight::from_parts(0, 11523)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(7)) } diff --git a/runtime/polkadot/src/weights/pallet_staking.rs b/runtime/polkadot/src/weights/pallet_staking.rs index 6520c5551f5b..dfb559fe1f69 100644 --- a/runtime/polkadot/src/weights/pallet_staking.rs +++ b/runtime/polkadot/src/weights/pallet_staking.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_staking` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,417 +45,739 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_staking`. pub struct WeightInfo(PhantomData); impl pallet_staking::WeightInfo for WeightInfo { - // Storage: Staking Bonded (r:1 w:1) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) - // Storage: Staking Payee (r:0 w:1) + /// Storage: Staking Bonded (r:1 w:1) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:0 w:1) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) fn bond() -> Weight { - // Minimum execution time: 47_622 nanoseconds. - Weight::from_ref_time(48_195_000) + // Proof Size summary in bytes: + // Measured: `980` + // Estimated: `14346` + // Minimum execution time: 42_906_000 picoseconds. + Weight::from_parts(43_417_000, 0) + .saturating_add(Weight::from_parts(0, 14346)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: VoterList ListNodes (r:3 w:3) - // Storage: VoterList ListBags (r:2 w:2) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:3 w:3) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:2 w:2) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn bond_extra() -> Weight { - // Minimum execution time: 86_546 nanoseconds. - Weight::from_ref_time(87_502_000) + // Proof Size summary in bytes: + // Measured: `1925` + // Estimated: `27838` + // Minimum execution time: 81_967_000 picoseconds. + Weight::from_parts(84_380_000, 0) + .saturating_add(Weight::from_parts(0, 27838)) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(7)) } - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking Nominators (r:1 w:0) - // Storage: Staking MinNominatorBond (r:1 w:0) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: VoterList ListNodes (r:3 w:3) - // Storage: Staking Bonded (r:1 w:0) - // Storage: VoterList ListBags (r:2 w:2) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:0) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: Staking MinNominatorBond (r:1 w:0) + /// Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:3 w:3) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:2 w:2) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn unbond() -> Weight { - // Minimum execution time: 91_301 nanoseconds. - Weight::from_ref_time(91_901_000) + // Proof Size summary in bytes: + // Measured: `2132` + // Estimated: `38444` + // Minimum execution time: 89_783_000 picoseconds. + Weight::from_parts(91_329_000, 0) + .saturating_add(Weight::from_parts(0, 38444)) .saturating_add(T::DbWeight::get().reads(12)) .saturating_add(T::DbWeight::get().writes(8)) } - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `s` is `[0, 100]`. fn withdraw_unbonded_update(s: u32, ) -> Weight { - // Minimum execution time: 40_122 nanoseconds. - Weight::from_ref_time(42_062_628) - // Standard Error: 1_675 - .saturating_add(Weight::from_ref_time(29_165).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `947` + // Estimated: `14402` + // Minimum execution time: 34_307_000 picoseconds. + Weight::from_parts(35_346_256, 0) + .saturating_add(Weight::from_parts(0, 14402)) + // Standard Error: 663 + .saturating_add(Weight::from_parts(12_943, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Staking Bonded (r:1 w:1) - // Storage: Staking SlashingSpans (r:1 w:0) - // Storage: Staking Validators (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) - // Storage: Staking CounterForNominators (r:1 w:1) - // Storage: VoterList ListNodes (r:2 w:2) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: Staking Payee (r:0 w:1) - // Storage: Staking SpanSlash (r:0 w:2) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:1) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking SlashingSpans (r:1 w:1) + /// Proof Skipped: Staking SlashingSpans (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking Validators (r:1 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:1) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: Staking CounterForNominators (r:1 w:1) + /// Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:2 w:2) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:0 w:1) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + /// Storage: Staking SpanSlash (r:0 w:100) + /// Proof: Staking SpanSlash (max_values: None, max_size: Some(76), added: 2551, mode: MaxEncodedLen) /// The range of component `s` is `[0, 100]`. fn withdraw_unbonded_kill(s: u32, ) -> Weight { - // Minimum execution time: 80_989 nanoseconds. - Weight::from_ref_time(83_605_753) - // Standard Error: 1_971 - .saturating_add(Weight::from_ref_time(942_989).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `2185 + s * (4 ±0)` + // Estimated: `43890 + s * (4 ±0)` + // Minimum execution time: 77_464_000 picoseconds. + Weight::from_parts(83_471_705, 0) + .saturating_add(Weight::from_parts(0, 43890)) + // Standard Error: 2_332 + .saturating_add(Weight::from_parts(1_136_738, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(13)) .saturating_add(T::DbWeight::get().writes(12)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) + .saturating_add(Weight::from_parts(0, 4).saturating_mul(s.into())) } - // Storage: Staking Ledger (r:1 w:0) - // Storage: Staking MinValidatorBond (r:1 w:0) - // Storage: Staking MinCommission (r:1 w:0) - // Storage: Staking Validators (r:1 w:1) - // Storage: Staking MaxValidatorsCount (r:1 w:0) - // Storage: Staking Nominators (r:1 w:0) - // Storage: Staking Bonded (r:1 w:0) - // Storage: VoterList ListNodes (r:1 w:1) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) - // Storage: Staking CounterForValidators (r:1 w:1) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking MinValidatorBond (r:1 w:0) + /// Proof: Staking MinValidatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Staking MinCommission (r:1 w:0) + /// Proof: Staking MinCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:1 w:1) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking MaxValidatorsCount (r:1 w:0) + /// Proof: Staking MaxValidatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:0) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:1 w:1) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking CounterForValidators (r:1 w:1) + /// Proof: Staking CounterForValidators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn validate() -> Weight { - // Minimum execution time: 60_885 nanoseconds. - Weight::from_ref_time(61_554_000) + // Proof Size summary in bytes: + // Measured: `1309` + // Estimated: `30249` + // Minimum execution time: 57_370_000 picoseconds. + Weight::from_parts(59_075_000, 0) + .saturating_add(Weight::from_parts(0, 30249)) .saturating_add(T::DbWeight::get().reads(11)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: Staking Ledger (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:128 w:128) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) /// The range of component `k` is `[1, 128]`. fn kick(k: u32, ) -> Weight { - // Minimum execution time: 33_903 nanoseconds. - Weight::from_ref_time(31_778_505) - // Standard Error: 6_146 - .saturating_add(Weight::from_ref_time(6_752_740).saturating_mul(k.into())) + // Proof Size summary in bytes: + // Measured: `1189 + k * (569 ±0)` + // Estimated: `5546 + k * (3033 ±0)` + // Minimum execution time: 27_075_000 picoseconds. + Weight::from_parts(27_059_752, 0) + .saturating_add(Weight::from_parts(0, 5546)) + // Standard Error: 9_837 + .saturating_add(Weight::from_parts(8_031_836, 0).saturating_mul(k.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(k.into()))) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(k.into()))) + .saturating_add(Weight::from_parts(0, 3033).saturating_mul(k.into())) } - // Storage: Staking Ledger (r:1 w:0) - // Storage: Staking MinNominatorBond (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) - // Storage: Staking MaxNominatorsCount (r:1 w:0) - // Storage: Staking Validators (r:2 w:0) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Staking Bonded (r:1 w:0) - // Storage: VoterList ListNodes (r:2 w:2) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) - // Storage: Staking CounterForNominators (r:1 w:1) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking MinNominatorBond (r:1 w:0) + /// Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:1) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: Staking MaxNominatorsCount (r:1 w:0) + /// Proof: Staking MaxNominatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:17 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:2 w:2) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking CounterForNominators (r:1 w:1) + /// Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) /// The range of component `n` is `[1, 16]`. fn nominate(n: u32, ) -> Weight { - // Minimum execution time: 64_705 nanoseconds. - Weight::from_ref_time(64_102_064) - // Standard Error: 6_766 - .saturating_add(Weight::from_ref_time(2_431_890).saturating_mul(n.into())) + // Proof Size summary in bytes: + // Measured: `1785 + n * (105 ±0)` + // Estimated: `32878 + n * (2520 ±0)` + // Minimum execution time: 65_046_000 picoseconds. + Weight::from_parts(62_579_946, 0) + .saturating_add(Weight::from_parts(0, 32878)) + // Standard Error: 14_378 + .saturating_add(Weight::from_parts(3_238_044, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(12)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(6)) + .saturating_add(Weight::from_parts(0, 2520).saturating_mul(n.into())) } - // Storage: Staking Ledger (r:1 w:0) - // Storage: Staking Validators (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) - // Storage: Staking CounterForNominators (r:1 w:1) - // Storage: VoterList ListNodes (r:2 w:2) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:1 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:1) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: Staking CounterForNominators (r:1 w:1) + /// Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:2 w:2) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn chill() -> Weight { - // Minimum execution time: 59_174 nanoseconds. - Weight::from_ref_time(59_942_000) + // Proof Size summary in bytes: + // Measured: `1639` + // Estimated: `24862` + // Minimum execution time: 57_369_000 picoseconds. + Weight::from_parts(58_001_000, 0) + .saturating_add(Weight::from_parts(0, 24862)) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: Staking Ledger (r:1 w:0) - // Storage: Staking Payee (r:0 w:1) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:0 w:1) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) fn set_payee() -> Weight { - // Minimum execution time: 15_898 nanoseconds. - Weight::from_ref_time(16_056_000) + // Proof Size summary in bytes: + // Measured: `737` + // Estimated: `4556` + // Minimum execution time: 15_599_000 picoseconds. + Weight::from_parts(15_980_000, 0) + .saturating_add(Weight::from_parts(0, 4556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Staking Bonded (r:1 w:1) - // Storage: Staking Ledger (r:2 w:2) + /// Storage: Staking Bonded (r:1 w:1) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:2 w:2) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) fn set_controller() -> Weight { - // Minimum execution time: 23_253 nanoseconds. - Weight::from_ref_time(23_642_000) + // Proof Size summary in bytes: + // Measured: `836` + // Estimated: `11659` + // Minimum execution time: 23_206_000 picoseconds. + Weight::from_parts(23_467_000, 0) + .saturating_add(Weight::from_parts(0, 11659)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Staking ValidatorCount (r:0 w:1) + /// Storage: Staking ValidatorCount (r:0 w:1) + /// Proof: Staking ValidatorCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn set_validator_count() -> Weight { - // Minimum execution time: 4_258 nanoseconds. - Weight::from_ref_time(4_437_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_319_000 picoseconds. + Weight::from_parts(3_463_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Staking ForceEra (r:0 w:1) + /// Storage: Staking ForceEra (r:0 w:1) + /// Proof: Staking ForceEra (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn force_no_eras() -> Weight { - // Minimum execution time: 4_583 nanoseconds. - Weight::from_ref_time(4_788_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 11_434_000 picoseconds. + Weight::from_parts(11_970_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Staking ForceEra (r:0 w:1) + /// Storage: Staking ForceEra (r:0 w:1) + /// Proof: Staking ForceEra (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn force_new_era() -> Weight { - // Minimum execution time: 4_526 nanoseconds. - Weight::from_ref_time(4_789_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 11_568_000 picoseconds. + Weight::from_parts(11_897_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Staking ForceEra (r:0 w:1) + /// Storage: Staking ForceEra (r:0 w:1) + /// Proof: Staking ForceEra (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn force_new_era_always() -> Weight { - // Minimum execution time: 4_560 nanoseconds. - Weight::from_ref_time(4_746_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 11_578_000 picoseconds. + Weight::from_parts(11_838_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Staking Invulnerables (r:0 w:1) + /// Storage: Staking Invulnerables (r:0 w:1) + /// Proof Skipped: Staking Invulnerables (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `v` is `[0, 1000]`. fn set_invulnerables(v: u32, ) -> Weight { - // Minimum execution time: 4_597 nanoseconds. - Weight::from_ref_time(4_979_598) - // Standard Error: 33 - .saturating_add(Weight::from_ref_time(13_875).saturating_mul(v.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_340_000 picoseconds. + Weight::from_parts(3_848_551, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 28 + .saturating_add(Weight::from_parts(13_524, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Staking Bonded (r:1 w:1) - // Storage: Staking SlashingSpans (r:1 w:0) - // Storage: Staking Validators (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) - // Storage: Staking CounterForNominators (r:1 w:1) - // Storage: VoterList ListNodes (r:2 w:2) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: Staking Ledger (r:0 w:1) - // Storage: Staking Payee (r:0 w:1) - // Storage: Staking SpanSlash (r:0 w:2) + /// Storage: Staking Bonded (r:1 w:1) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking SlashingSpans (r:1 w:1) + /// Proof Skipped: Staking SlashingSpans (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking Validators (r:1 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:1) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: Staking CounterForNominators (r:1 w:1) + /// Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:2 w:2) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:0 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:0 w:1) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + /// Storage: Staking SpanSlash (r:0 w:100) + /// Proof: Staking SpanSlash (max_values: None, max_size: Some(76), added: 2551, mode: MaxEncodedLen) /// The range of component `s` is `[0, 100]`. fn force_unstake(s: u32, ) -> Weight { - // Minimum execution time: 72_639 nanoseconds. - Weight::from_ref_time(78_014_035) - // Standard Error: 1_977 - .saturating_add(Weight::from_ref_time(935_656).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `1911 + s * (4 ±0)` + // Estimated: `37571 + s * (4 ±0)` + // Minimum execution time: 70_716_000 picoseconds. + Weight::from_parts(76_662_337, 0) + .saturating_add(Weight::from_parts(0, 37571)) + // Standard Error: 2_349 + .saturating_add(Weight::from_parts(1_137_254, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(11)) .saturating_add(T::DbWeight::get().writes(12)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) + .saturating_add(Weight::from_parts(0, 4).saturating_mul(s.into())) } - // Storage: Staking UnappliedSlashes (r:1 w:1) + /// Storage: Staking UnappliedSlashes (r:1 w:1) + /// Proof Skipped: Staking UnappliedSlashes (max_values: None, max_size: None, mode: Measured) /// The range of component `s` is `[1, 1000]`. fn cancel_deferred_slash(s: u32, ) -> Weight { - // Minimum execution time: 122_368 nanoseconds. - Weight::from_ref_time(933_473_588) - // Standard Error: 59_092 - .saturating_add(Weight::from_ref_time(4_912_457).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `66572` + // Estimated: `70037` + // Minimum execution time: 116_549_000 picoseconds. + Weight::from_parts(825_878_569, 0) + .saturating_add(Weight::from_parts(0, 70037)) + // Standard Error: 51_942 + .saturating_add(Weight::from_parts(4_322_536, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Staking ErasValidatorReward (r:1 w:0) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking ErasStakersClipped (r:1 w:0) - // Storage: Staking ErasRewardPoints (r:1 w:0) - // Storage: Staking ErasValidatorPrefs (r:1 w:0) - // Storage: Staking Payee (r:1 w:0) - // Storage: System Account (r:1 w:1) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ErasValidatorReward (r:1 w:0) + /// Proof: Staking ErasValidatorReward (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:513 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking ErasStakersClipped (r:1 w:0) + /// Proof Skipped: Staking ErasStakersClipped (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking ErasRewardPoints (r:1 w:0) + /// Proof Skipped: Staking ErasRewardPoints (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking ErasValidatorPrefs (r:1 w:0) + /// Proof: Staking ErasValidatorPrefs (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:513 w:0) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + /// Storage: System Account (r:513 w:513) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `n` is `[0, 512]`. fn payout_stakers_dead_controller(n: u32, ) -> Weight { - // Minimum execution time: 111_492 nanoseconds. - Weight::from_ref_time(207_619_402) - // Standard Error: 17_422 - .saturating_add(Weight::from_ref_time(22_319_804).saturating_mul(n.into())) + // Proof Size summary in bytes: + // Measured: `34179 + n * (150 ±0)` + // Estimated: `88510 + n * (8026 ±0)` + // Minimum execution time: 86_537_000 picoseconds. + Weight::from_parts(88_458_531, 0) + .saturating_add(Weight::from_parts(0, 88510)) + // Standard Error: 13_365 + .saturating_add(Weight::from_parts(27_608_568, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(9)) .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(2)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into()))) + .saturating_add(Weight::from_parts(0, 8026).saturating_mul(n.into())) } - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Staking ErasValidatorReward (r:1 w:0) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking ErasStakersClipped (r:1 w:0) - // Storage: Staking ErasRewardPoints (r:1 w:0) - // Storage: Staking ErasValidatorPrefs (r:1 w:0) - // Storage: Staking Payee (r:1 w:0) - // Storage: System Account (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ErasValidatorReward (r:1 w:0) + /// Proof: Staking ErasValidatorReward (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:513 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:513 w:513) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking ErasStakersClipped (r:1 w:0) + /// Proof Skipped: Staking ErasStakersClipped (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking ErasRewardPoints (r:1 w:0) + /// Proof Skipped: Staking ErasRewardPoints (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking ErasValidatorPrefs (r:1 w:0) + /// Proof: Staking ErasValidatorPrefs (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:513 w:0) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + /// Storage: System Account (r:513 w:513) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:513 w:513) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `n` is `[0, 512]`. fn payout_stakers_alive_staked(n: u32, ) -> Weight { - // Minimum execution time: 128_057 nanoseconds. - Weight::from_ref_time(192_218_503) - // Standard Error: 29_376 - .saturating_add(Weight::from_ref_time(31_711_307).saturating_mul(n.into())) + // Proof Size summary in bytes: + // Measured: `61918 + n * (413 ±0)` + // Estimated: `140710 + n * (15912 ±0)` + // Minimum execution time: 106_300_000 picoseconds. + Weight::from_parts(86_093_472, 0) + .saturating_add(Weight::from_parts(0, 140710)) + // Standard Error: 16_775 + .saturating_add(Weight::from_parts(39_353_577, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(10)) .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(3)) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(n.into()))) + .saturating_add(Weight::from_parts(0, 15912).saturating_mul(n.into())) } - // Storage: Staking Ledger (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: VoterList ListNodes (r:3 w:3) - // Storage: Staking Bonded (r:1 w:0) - // Storage: VoterList ListBags (r:2 w:2) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:3 w:3) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:2 w:2) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) /// The range of component `l` is `[1, 32]`. fn rebond(l: u32, ) -> Weight { - // Minimum execution time: 83_691 nanoseconds. - Weight::from_ref_time(85_457_544) - // Standard Error: 4_130 - .saturating_add(Weight::from_ref_time(32_449).saturating_mul(l.into())) + // Proof Size summary in bytes: + // Measured: `1926 + l * (5 ±0)` + // Estimated: `31431` + // Minimum execution time: 81_405_000 picoseconds. + Weight::from_parts(82_997_301, 0) + .saturating_add(Weight::from_parts(0, 31431)) + // Standard Error: 3_690 + .saturating_add(Weight::from_parts(40_475, 0).saturating_mul(l.into())) .saturating_add(T::DbWeight::get().reads(9)) .saturating_add(T::DbWeight::get().writes(8)) } - // Storage: System Account (r:1 w:1) - // Storage: Staking Bonded (r:1 w:1) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking SlashingSpans (r:1 w:1) - // Storage: Staking Validators (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) - // Storage: Staking CounterForNominators (r:1 w:1) - // Storage: VoterList ListNodes (r:2 w:2) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: Staking Payee (r:0 w:1) - // Storage: Staking SpanSlash (r:0 w:1) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:1) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking SlashingSpans (r:1 w:1) + /// Proof Skipped: Staking SlashingSpans (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking Validators (r:1 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:1) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: Staking CounterForNominators (r:1 w:1) + /// Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:2 w:2) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:0 w:1) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + /// Storage: Staking SpanSlash (r:0 w:100) + /// Proof: Staking SpanSlash (max_values: None, max_size: Some(76), added: 2551, mode: MaxEncodedLen) /// The range of component `s` is `[1, 100]`. fn reap_stash(s: u32, ) -> Weight { - // Minimum execution time: 85_395 nanoseconds. - Weight::from_ref_time(84_844_648) - // Standard Error: 1_950 - .saturating_add(Weight::from_ref_time(953_435).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `2185 + s * (4 ±0)` + // Estimated: `42406 + s * (4 ±0)` + // Minimum execution time: 83_834_000 picoseconds. + Weight::from_parts(84_803_154, 0) + .saturating_add(Weight::from_parts(0, 42406)) + // Standard Error: 2_324 + .saturating_add(Weight::from_parts(1_139_950, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(12)) .saturating_add(T::DbWeight::get().writes(12)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) + .saturating_add(Weight::from_parts(0, 4).saturating_mul(s.into())) } - // Storage: VoterList CounterForListNodes (r:1 w:0) - // Storage: VoterList ListBags (r:178 w:0) - // Storage: VoterList ListNodes (r:101 w:0) - // Storage: Staking Nominators (r:101 w:0) - // Storage: Staking Validators (r:2 w:0) - // Storage: Staking Bonded (r:101 w:0) - // Storage: Staking Ledger (r:101 w:0) - // Storage: System BlockWeight (r:1 w:1) - // Storage: Staking CounterForValidators (r:1 w:0) - // Storage: Staking ValidatorCount (r:1 w:0) - // Storage: Staking MinimumValidatorCount (r:1 w:0) - // Storage: Staking CurrentEra (r:1 w:1) - // Storage: Staking ErasStakersClipped (r:0 w:1) - // Storage: Staking ErasValidatorPrefs (r:0 w:1) - // Storage: Staking ErasStakers (r:0 w:1) - // Storage: Staking ErasTotalStake (r:0 w:1) - // Storage: Staking ErasStartSessionIndex (r:0 w:1) - // Storage: Staking MinimumActiveStake (r:0 w:1) + /// Storage: VoterList CounterForListNodes (r:1 w:0) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:178 w:0) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:110 w:0) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:110 w:0) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:11 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:110 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:110 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: System BlockWeight (r:1 w:1) + /// Proof: System BlockWeight (max_values: Some(1), max_size: Some(48), added: 543, mode: MaxEncodedLen) + /// Storage: Staking CounterForValidators (r:1 w:0) + /// Proof: Staking CounterForValidators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ValidatorCount (r:1 w:0) + /// Proof: Staking ValidatorCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking MinimumValidatorCount (r:1 w:0) + /// Proof: Staking MinimumValidatorCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:1) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ErasStakersClipped (r:0 w:10) + /// Proof Skipped: Staking ErasStakersClipped (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking ErasValidatorPrefs (r:0 w:10) + /// Proof: Staking ErasValidatorPrefs (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Staking ErasStakers (r:0 w:10) + /// Proof Skipped: Staking ErasStakers (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking ErasTotalStake (r:0 w:1) + /// Proof: Staking ErasTotalStake (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) + /// Storage: Staking ErasStartSessionIndex (r:0 w:1) + /// Proof: Staking ErasStartSessionIndex (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Staking MinimumActiveStake (r:0 w:1) + /// Proof: Staking MinimumActiveStake (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) /// The range of component `v` is `[1, 10]`. /// The range of component `n` is `[0, 100]`. fn new_era(v: u32, n: u32, ) -> Weight { - // Minimum execution time: 444_682 nanoseconds. - Weight::from_ref_time(445_632_000) - // Standard Error: 1_859_878 - .saturating_add(Weight::from_ref_time(60_717_370).saturating_mul(v.into())) - // Standard Error: 185_326 - .saturating_add(Weight::from_ref_time(13_355_900).saturating_mul(n.into())) + // Proof Size summary in bytes: + // Measured: `0 + v * (3594 ±0) + n * (716 ±0)` + // Estimated: `482748 + v * (16697 ±39) + n * (12755 ±3)` + // Minimum execution time: 492_458_000 picoseconds. + Weight::from_parts(493_752_000, 0) + .saturating_add(Weight::from_parts(0, 482748)) + // Standard Error: 1_839_928 + .saturating_add(Weight::from_parts(59_163_891, 0).saturating_mul(v.into())) + // Standard Error: 183_338 + .saturating_add(Weight::from_parts(16_441_530, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(185)) .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(v.into()))) .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(5)) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(v.into()))) + .saturating_add(Weight::from_parts(0, 16697).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(0, 12755).saturating_mul(n.into())) } - // Storage: VoterList CounterForListNodes (r:1 w:0) - // Storage: VoterList ListBags (r:178 w:0) - // Storage: VoterList ListNodes (r:1500 w:0) - // Storage: Staking Nominators (r:1500 w:0) - // Storage: Staking Validators (r:500 w:0) - // Storage: Staking Bonded (r:1500 w:0) - // Storage: Staking Ledger (r:1500 w:0) - // Storage: System BlockWeight (r:1 w:1) - // Storage: Staking MinimumActiveStake (r:0 w:1) + /// Storage: VoterList CounterForListNodes (r:1 w:0) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:178 w:0) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:2000 w:0) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:2000 w:0) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:1000 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:2000 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:2000 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: System BlockWeight (r:1 w:1) + /// Proof: System BlockWeight (max_values: Some(1), max_size: Some(48), added: 543, mode: MaxEncodedLen) + /// Storage: Staking MinimumActiveStake (r:0 w:1) + /// Proof: Staking MinimumActiveStake (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) /// The range of component `v` is `[500, 1000]`. /// The range of component `n` is `[500, 1000]`. fn get_npos_voters(v: u32, n: u32, ) -> Weight { - // Minimum execution time: 25_614_188 nanoseconds. - Weight::from_ref_time(25_803_581_000) - // Standard Error: 629_632 - .saturating_add(Weight::from_ref_time(6_922_005).saturating_mul(v.into())) - // Standard Error: 629_632 - .saturating_add(Weight::from_ref_time(2_982_329).saturating_mul(n.into())) + // Proof Size summary in bytes: + // Measured: `3035 + v * (391 ±0) + n * (907 ±0)` + // Estimated: `464108 + v * (14295 ±0) + n * (11775 ±0)` + // Minimum execution time: 30_932_661_000 picoseconds. + Weight::from_parts(31_175_947_000, 0) + .saturating_add(Weight::from_parts(0, 464108)) + // Standard Error: 341_632 + .saturating_add(Weight::from_parts(4_746_588, 0).saturating_mul(v.into())) + // Standard Error: 341_632 + .saturating_add(Weight::from_parts(3_133_772, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(180)) .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(v.into()))) .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 14295).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(0, 11775).saturating_mul(n.into())) } - // Storage: Staking CounterForValidators (r:1 w:0) - // Storage: Staking Validators (r:501 w:0) - // Storage: System BlockWeight (r:1 w:1) + /// Storage: Staking CounterForValidators (r:1 w:0) + /// Proof: Staking CounterForValidators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:1001 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: System BlockWeight (r:1 w:1) + /// Proof: System BlockWeight (max_values: Some(1), max_size: Some(48), added: 543, mode: MaxEncodedLen) /// The range of component `v` is `[500, 1000]`. fn get_npos_targets(v: u32, ) -> Weight { - // Minimum execution time: 3_650_499 nanoseconds. - Weight::from_ref_time(151_682_372) - // Standard Error: 39_270 - .saturating_add(Weight::from_ref_time(7_318_595).saturating_mul(v.into())) + // Proof Size summary in bytes: + // Measured: `917 + v * (50 ±0)` + // Estimated: `6532 + v * (2520 ±0)` + // Minimum execution time: 2_181_946_000 picoseconds. + Weight::from_parts(66_709_848, 0) + .saturating_add(Weight::from_parts(0, 6532)) + // Standard Error: 8_593 + .saturating_add(Weight::from_parts(4_315_430, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(v.into()))) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 2520).saturating_mul(v.into())) } - // Storage: Staking MinCommission (r:0 w:1) - // Storage: Staking MinValidatorBond (r:0 w:1) - // Storage: Staking MaxValidatorsCount (r:0 w:1) - // Storage: Staking ChillThreshold (r:0 w:1) - // Storage: Staking MaxNominatorsCount (r:0 w:1) - // Storage: Staking MinNominatorBond (r:0 w:1) + /// Storage: Staking MinCommission (r:0 w:1) + /// Proof: Staking MinCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking MinValidatorBond (r:0 w:1) + /// Proof: Staking MinValidatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Staking MaxValidatorsCount (r:0 w:1) + /// Proof: Staking MaxValidatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ChillThreshold (r:0 w:1) + /// Proof: Staking ChillThreshold (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) + /// Storage: Staking MaxNominatorsCount (r:0 w:1) + /// Proof: Staking MaxNominatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking MinNominatorBond (r:0 w:1) + /// Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn set_staking_configs_all_set() -> Weight { - // Minimum execution time: 7_658 nanoseconds. - Weight::from_ref_time(7_982_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 6_781_000 picoseconds. + Weight::from_parts(7_035_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: Staking MinCommission (r:0 w:1) - // Storage: Staking MinValidatorBond (r:0 w:1) - // Storage: Staking MaxValidatorsCount (r:0 w:1) - // Storage: Staking ChillThreshold (r:0 w:1) - // Storage: Staking MaxNominatorsCount (r:0 w:1) - // Storage: Staking MinNominatorBond (r:0 w:1) + /// Storage: Staking MinCommission (r:0 w:1) + /// Proof: Staking MinCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking MinValidatorBond (r:0 w:1) + /// Proof: Staking MinValidatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Staking MaxValidatorsCount (r:0 w:1) + /// Proof: Staking MaxValidatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ChillThreshold (r:0 w:1) + /// Proof: Staking ChillThreshold (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) + /// Storage: Staking MaxNominatorsCount (r:0 w:1) + /// Proof: Staking MaxNominatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking MinNominatorBond (r:0 w:1) + /// Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn set_staking_configs_all_remove() -> Weight { - // Minimum execution time: 7_103 nanoseconds. - Weight::from_ref_time(7_388_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 6_038_000 picoseconds. + Weight::from_parts(6_447_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: Staking Ledger (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) - // Storage: Staking ChillThreshold (r:1 w:0) - // Storage: Staking MaxNominatorsCount (r:1 w:0) - // Storage: Staking CounterForNominators (r:1 w:1) - // Storage: Staking MinNominatorBond (r:1 w:0) - // Storage: Staking Validators (r:1 w:0) - // Storage: VoterList ListNodes (r:2 w:2) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:1) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: Staking ChillThreshold (r:1 w:0) + /// Proof: Staking ChillThreshold (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) + /// Storage: Staking MaxNominatorsCount (r:1 w:0) + /// Proof: Staking MaxNominatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking CounterForNominators (r:1 w:1) + /// Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking MinNominatorBond (r:1 w:0) + /// Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:1 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:2 w:2) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn chill_other() -> Weight { - // Minimum execution time: 70_308 nanoseconds. - Weight::from_ref_time(71_053_000) + // Proof Size summary in bytes: + // Measured: `1762` + // Estimated: `29338` + // Minimum execution time: 69_632_000 picoseconds. + Weight::from_parts(70_254_000, 0) + .saturating_add(Weight::from_parts(0, 29338)) .saturating_add(T::DbWeight::get().reads(11)) .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: Staking MinCommission (r:1 w:0) - // Storage: Staking Validators (r:1 w:1) + /// Storage: Staking MinCommission (r:1 w:0) + /// Proof: Staking MinCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:1 w:1) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) fn force_apply_min_commission() -> Weight { - // Minimum execution time: 15_231 nanoseconds. - Weight::from_ref_time(15_756_000) + // Proof Size summary in bytes: + // Measured: `627` + // Estimated: `4999` + // Minimum execution time: 14_263_000 picoseconds. + Weight::from_parts(14_515_000, 0) + .saturating_add(Weight::from_parts(0, 4999)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } + /// Storage: Staking MinCommission (r:0 w:1) + /// Proof: Staking MinCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + fn set_min_commission() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_517_000 picoseconds. + Weight::from_parts(3_660_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(1)) + } } diff --git a/runtime/polkadot/src/weights/pallet_timestamp.rs b/runtime/polkadot/src/weights/pallet_timestamp.rs index 0ae225f14d59..9b71a87c6d4f 100644 --- a/runtime/polkadot/src/weights/pallet_timestamp.rs +++ b/runtime/polkadot/src/weights/pallet_timestamp.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_timestamp` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,16 +45,26 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_timestamp`. pub struct WeightInfo(PhantomData); impl pallet_timestamp::WeightInfo for WeightInfo { - // Storage: Timestamp Now (r:1 w:1) - // Storage: Babe CurrentSlot (r:1 w:0) + /// Storage: Timestamp Now (r:1 w:1) + /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Babe CurrentSlot (r:1 w:0) + /// Proof: Babe CurrentSlot (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn set() -> Weight { - // Minimum execution time: 10_277 nanoseconds. - Weight::from_ref_time(10_689_000) + // Proof Size summary in bytes: + // Measured: `345` + // Estimated: `2986` + // Minimum execution time: 10_109_000 picoseconds. + Weight::from_parts(10_625_000, 0) + .saturating_add(Weight::from_parts(0, 2986)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } fn on_finalize() -> Weight { - // Minimum execution time: 4_656 nanoseconds. - Weight::from_ref_time(4_753_000) + // Proof Size summary in bytes: + // Measured: `128` + // Estimated: `0` + // Minimum execution time: 4_598_000 picoseconds. + Weight::from_parts(4_780_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } } diff --git a/runtime/polkadot/src/weights/pallet_tips.rs b/runtime/polkadot/src/weights/pallet_tips.rs index 219071603e84..f358f3878e82 100644 --- a/runtime/polkadot/src/weights/pallet_tips.rs +++ b/runtime/polkadot/src/weights/pallet_tips.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_tips` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,72 +45,114 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_tips`. pub struct WeightInfo(PhantomData); impl pallet_tips::WeightInfo for WeightInfo { - // Storage: Tips Reasons (r:1 w:1) - // Storage: Tips Tips (r:1 w:1) + /// Storage: Tips Reasons (r:1 w:1) + /// Proof Skipped: Tips Reasons (max_values: None, max_size: None, mode: Measured) + /// Storage: Tips Tips (r:1 w:1) + /// Proof Skipped: Tips Tips (max_values: None, max_size: None, mode: Measured) /// The range of component `r` is `[0, 16384]`. fn report_awesome(r: u32, ) -> Weight { - // Minimum execution time: 31_224 nanoseconds. - Weight::from_ref_time(32_186_925) - // Standard Error: 5 - .saturating_add(Weight::from_ref_time(1_855).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `4` + // Estimated: `6938` + // Minimum execution time: 24_457_000 picoseconds. + Weight::from_parts(25_195_829, 0) + .saturating_add(Weight::from_parts(0, 6938)) + // Standard Error: 4 + .saturating_add(Weight::from_parts(1_460, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Tips Tips (r:1 w:1) - // Storage: Tips Reasons (r:0 w:1) + /// Storage: Tips Tips (r:1 w:1) + /// Proof Skipped: Tips Tips (max_values: None, max_size: None, mode: Measured) + /// Storage: Tips Reasons (r:0 w:1) + /// Proof Skipped: Tips Reasons (max_values: None, max_size: None, mode: Measured) fn retract_tip() -> Weight { - // Minimum execution time: 30_391 nanoseconds. - Weight::from_ref_time(30_904_000) + // Proof Size summary in bytes: + // Measured: `221` + // Estimated: `3907` + // Minimum execution time: 23_750_000 picoseconds. + Weight::from_parts(24_215_000, 0) + .saturating_add(Weight::from_parts(0, 3907)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: PhragmenElection Members (r:1 w:0) - // Storage: Tips Reasons (r:1 w:1) - // Storage: Tips Tips (r:0 w:1) + /// Storage: PhragmenElection Members (r:1 w:0) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Tips Reasons (r:1 w:1) + /// Proof Skipped: Tips Reasons (max_values: None, max_size: None, mode: Measured) + /// Storage: Tips Tips (r:0 w:1) + /// Proof Skipped: Tips Tips (max_values: None, max_size: None, mode: Measured) /// The range of component `r` is `[0, 16384]`. /// The range of component `t` is `[1, 13]`. fn tip_new(r: u32, t: u32, ) -> Weight { - // Minimum execution time: 23_918 nanoseconds. - Weight::from_ref_time(22_564_851) - // Standard Error: 5 - .saturating_add(Weight::from_ref_time(1_725).saturating_mul(r.into())) - // Standard Error: 7_486 - .saturating_add(Weight::from_ref_time(202_675).saturating_mul(t.into())) + // Proof Size summary in bytes: + // Measured: `74 + t * (64 ±0)` + // Estimated: `5172 + t * (192 ±0)` + // Minimum execution time: 20_274_000 picoseconds. + Weight::from_parts(19_039_261, 0) + .saturating_add(Weight::from_parts(0, 5172)) + // Standard Error: 6 + .saturating_add(Weight::from_parts(1_329, 0).saturating_mul(r.into())) + // Standard Error: 8_124 + .saturating_add(Weight::from_parts(192_163, 0).saturating_mul(t.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 192).saturating_mul(t.into())) } - // Storage: PhragmenElection Members (r:1 w:0) - // Storage: Tips Tips (r:1 w:1) + /// Storage: PhragmenElection Members (r:1 w:0) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Tips Tips (r:1 w:1) + /// Proof Skipped: Tips Tips (max_values: None, max_size: None, mode: Measured) /// The range of component `t` is `[1, 13]`. fn tip(t: u32, ) -> Weight { - // Minimum execution time: 15_366 nanoseconds. - Weight::from_ref_time(15_767_349) - // Standard Error: 1_953 - .saturating_add(Weight::from_ref_time(171_831).saturating_mul(t.into())) + // Proof Size summary in bytes: + // Measured: `295 + t * (112 ±0)` + // Estimated: `5540 + t * (224 ±0)` + // Minimum execution time: 15_870_000 picoseconds. + Weight::from_parts(16_128_677, 0) + .saturating_add(Weight::from_parts(0, 5540)) + // Standard Error: 2_074 + .saturating_add(Weight::from_parts(132_492, 0).saturating_mul(t.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 224).saturating_mul(t.into())) } - // Storage: Tips Tips (r:1 w:1) - // Storage: PhragmenElection Members (r:1 w:0) - // Storage: System Account (r:1 w:1) - // Storage: Tips Reasons (r:0 w:1) + /// Storage: Tips Tips (r:1 w:1) + /// Proof Skipped: Tips Tips (max_values: None, max_size: None, mode: Measured) + /// Storage: PhragmenElection Members (r:1 w:0) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Tips Reasons (r:0 w:1) + /// Proof Skipped: Tips Reasons (max_values: None, max_size: None, mode: Measured) /// The range of component `t` is `[1, 13]`. fn close_tip(t: u32, ) -> Weight { - // Minimum execution time: 46_608 nanoseconds. - Weight::from_ref_time(48_091_893) - // Standard Error: 8_341 - .saturating_add(Weight::from_ref_time(163_813).saturating_mul(t.into())) + // Proof Size summary in bytes: + // Measured: `334 + t * (112 ±0)` + // Estimated: `9518 + t * (336 ±0)` + // Minimum execution time: 44_136_000 picoseconds. + Weight::from_parts(45_509_299, 0) + .saturating_add(Weight::from_parts(0, 9518)) + // Standard Error: 8_240 + .saturating_add(Weight::from_parts(98_797, 0).saturating_mul(t.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 336).saturating_mul(t.into())) } - // Storage: Tips Tips (r:1 w:1) - // Storage: Tips Reasons (r:0 w:1) + /// Storage: Tips Tips (r:1 w:1) + /// Proof Skipped: Tips Tips (max_values: None, max_size: None, mode: Measured) + /// Storage: Tips Reasons (r:0 w:1) + /// Proof Skipped: Tips Reasons (max_values: None, max_size: None, mode: Measured) /// The range of component `t` is `[1, 13]`. fn slash_tip(t: u32, ) -> Weight { - // Minimum execution time: 19_869 nanoseconds. - Weight::from_ref_time(20_421_606) - // Standard Error: 6_113 - .saturating_add(Weight::from_ref_time(101_120).saturating_mul(t.into())) + // Proof Size summary in bytes: + // Measured: `269` + // Estimated: `4003` + // Minimum execution time: 15_381_000 picoseconds. + Weight::from_parts(16_083_020, 0) + .saturating_add(Weight::from_parts(0, 4003)) + // Standard Error: 1_234 + .saturating_add(Weight::from_parts(8_350, 0).saturating_mul(t.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } diff --git a/runtime/polkadot/src/weights/pallet_treasury.rs b/runtime/polkadot/src/weights/pallet_treasury.rs index c07ce930ba23..2eb4fd078357 100644 --- a/runtime/polkadot/src/weights/pallet_treasury.rs +++ b/runtime/polkadot/src/weights/pallet_treasury.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_treasury` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,59 +45,105 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_treasury`. pub struct WeightInfo(PhantomData); impl pallet_treasury::WeightInfo for WeightInfo { + /// Storage: Treasury ProposalCount (r:1 w:1) + /// Proof: Treasury ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Treasury Approvals (r:1 w:1) + /// Proof: Treasury Approvals (max_values: Some(1), max_size: Some(402), added: 897, mode: MaxEncodedLen) + /// Storage: Treasury Proposals (r:0 w:1) + /// Proof: Treasury Proposals (max_values: None, max_size: Some(108), added: 2583, mode: MaxEncodedLen) fn spend() -> Weight { - // Minimum execution time: 140 nanoseconds. - Weight::from_ref_time(188_000) + // Proof Size summary in bytes: + // Measured: `6` + // Estimated: `3376` + // Minimum execution time: 15_818_000 picoseconds. + Weight::from_parts(16_068_000, 0) + .saturating_add(Weight::from_parts(0, 3376)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Treasury ProposalCount (r:1 w:1) - // Storage: Treasury Proposals (r:0 w:1) + /// Storage: Treasury ProposalCount (r:1 w:1) + /// Proof: Treasury ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Treasury Proposals (r:0 w:1) + /// Proof: Treasury Proposals (max_values: None, max_size: Some(108), added: 2583, mode: MaxEncodedLen) fn propose_spend() -> Weight { - // Minimum execution time: 28_393 nanoseconds. - Weight::from_ref_time(29_088_000) + // Proof Size summary in bytes: + // Measured: `107` + // Estimated: `1489` + // Minimum execution time: 24_148_000 picoseconds. + Weight::from_parts(24_591_000, 0) + .saturating_add(Weight::from_parts(0, 1489)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Treasury Proposals (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Treasury Proposals (r:1 w:1) + /// Proof: Treasury Proposals (max_values: None, max_size: Some(108), added: 2583, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn reject_proposal() -> Weight { - // Minimum execution time: 39_863 nanoseconds. - Weight::from_ref_time(40_525_000) + // Proof Size summary in bytes: + // Measured: `265` + // Estimated: `7166` + // Minimum execution time: 35_683_000 picoseconds. + Weight::from_parts(36_012_000, 0) + .saturating_add(Weight::from_parts(0, 7166)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Treasury Proposals (r:1 w:0) - // Storage: Treasury Approvals (r:1 w:1) + /// Storage: Treasury Proposals (r:1 w:0) + /// Proof: Treasury Proposals (max_values: None, max_size: Some(108), added: 2583, mode: MaxEncodedLen) + /// Storage: Treasury Approvals (r:1 w:1) + /// Proof: Treasury Approvals (max_values: Some(1), max_size: Some(402), added: 897, mode: MaxEncodedLen) /// The range of component `p` is `[0, 99]`. fn approve_proposal(p: u32, ) -> Weight { - // Minimum execution time: 10_069 nanoseconds. - Weight::from_ref_time(13_628_936) - // Standard Error: 1_126 - .saturating_add(Weight::from_ref_time(51_043).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `433 + p * (8 ±0)` + // Estimated: `5460` + // Minimum execution time: 10_345_000 picoseconds. + Weight::from_parts(12_391_108, 0) + .saturating_add(Weight::from_parts(0, 5460)) + // Standard Error: 811 + .saturating_add(Weight::from_parts(27_830, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Treasury Approvals (r:1 w:1) + /// Storage: Treasury Approvals (r:1 w:1) + /// Proof: Treasury Approvals (max_values: Some(1), max_size: Some(402), added: 897, mode: MaxEncodedLen) fn remove_approval() -> Weight { - // Minimum execution time: 8_527 nanoseconds. - Weight::from_ref_time(8_735_000) + // Proof Size summary in bytes: + // Measured: `90` + // Estimated: `1887` + // Minimum execution time: 7_743_000 picoseconds. + Weight::from_parts(8_156_000, 0) + .saturating_add(Weight::from_parts(0, 1887)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Treasury Inactive (r:1 w:1) - // Storage: Balances InactiveIssuance (r:1 w:1) - // Storage: Treasury Approvals (r:1 w:1) - // Storage: Bounties BountyApprovals (r:1 w:1) - // Storage: Treasury Proposals (r:2 w:2) - // Storage: System Account (r:4 w:4) + /// Storage: Treasury Deactivated (r:1 w:1) + /// Proof: Treasury Deactivated (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Balances InactiveIssuance (r:1 w:1) + /// Proof: Balances InactiveIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Treasury Approvals (r:1 w:1) + /// Proof: Treasury Approvals (max_values: Some(1), max_size: Some(402), added: 897, mode: MaxEncodedLen) + /// Storage: Treasury Proposals (r:100 w:100) + /// Proof: Treasury Proposals (max_values: None, max_size: Some(108), added: 2583, mode: MaxEncodedLen) + /// Storage: System Account (r:200 w:200) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Bounties BountyApprovals (r:1 w:1) + /// Proof: Bounties BountyApprovals (max_values: Some(1), max_size: Some(402), added: 897, mode: MaxEncodedLen) /// The range of component `p` is `[0, 100]`. fn on_initialize_proposals(p: u32, ) -> Weight { - // Minimum execution time: 41_280 nanoseconds. - Weight::from_ref_time(52_285_861) - // Standard Error: 22_867 - .saturating_add(Weight::from_ref_time(26_361_552).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `217 + p * (251 ±0)` + // Estimated: `8756 + p * (7789 ±0)` + // Minimum execution time: 39_348_000 picoseconds. + Weight::from_parts(46_076_895, 0) + .saturating_add(Weight::from_parts(0, 8756)) + // Standard Error: 26_068 + .saturating_add(Weight::from_parts(31_896_041, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(p.into()))) .saturating_add(T::DbWeight::get().writes(4)) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(p.into()))) + .saturating_add(Weight::from_parts(0, 7789).saturating_mul(p.into())) } } diff --git a/runtime/polkadot/src/weights/pallet_utility.rs b/runtime/polkadot/src/weights/pallet_utility.rs index e9dc695d48c8..0e4c8c912ea4 100644 --- a/runtime/polkadot/src/weights/pallet_utility.rs +++ b/runtime/polkadot/src/weights/pallet_utility.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_utility` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -46,31 +47,51 @@ pub struct WeightInfo(PhantomData); impl pallet_utility::WeightInfo for WeightInfo { /// The range of component `c` is `[0, 1000]`. fn batch(c: u32, ) -> Weight { - // Minimum execution time: 12_269 nanoseconds. - Weight::from_ref_time(17_639_994) - // Standard Error: 2_151 - .saturating_add(Weight::from_ref_time(3_706_537).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_134_000 picoseconds. + Weight::from_parts(22_552_692, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 3_662 + .saturating_add(Weight::from_parts(4_648_268, 0).saturating_mul(c.into())) } fn as_derivative() -> Weight { - // Minimum execution time: 6_070 nanoseconds. - Weight::from_ref_time(6_170_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 5_404_000 picoseconds. + Weight::from_parts(5_506_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } /// The range of component `c` is `[0, 1000]`. fn batch_all(c: u32, ) -> Weight { - // Minimum execution time: 12_056 nanoseconds. - Weight::from_ref_time(17_407_117) - // Standard Error: 2_200 - .saturating_add(Weight::from_ref_time(3_896_277).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_161_000 picoseconds. + Weight::from_parts(14_587_560, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 3_086 + .saturating_add(Weight::from_parts(4_925_001, 0).saturating_mul(c.into())) } fn dispatch_as() -> Weight { - // Minimum execution time: 14_262 nanoseconds. - Weight::from_ref_time(14_706_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 9_630_000 picoseconds. + Weight::from_parts(9_859_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } /// The range of component `c` is `[0, 1000]`. fn force_batch(c: u32, ) -> Weight { - // Minimum execution time: 12_345 nanoseconds. - Weight::from_ref_time(20_371_184) - // Standard Error: 2_353 - .saturating_add(Weight::from_ref_time(3_699_362).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_026_000 picoseconds. + Weight::from_parts(16_123_279, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 2_907 + .saturating_add(Weight::from_parts(4_659_455, 0).saturating_mul(c.into())) } } diff --git a/runtime/polkadot/src/weights/pallet_vesting.rs b/runtime/polkadot/src/weights/pallet_vesting.rs index 441a3d73d73d..aef37c862bc4 100644 --- a/runtime/polkadot/src/weights/pallet_vesting.rs +++ b/runtime/polkadot/src/weights/pallet_vesting.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_vesting` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,121 +45,175 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_vesting`. pub struct WeightInfo(PhantomData); impl pallet_vesting::WeightInfo for WeightInfo { - // Storage: Vesting Vesting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[1, 28]`. fn vest_locked(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 40_107 nanoseconds. - Weight::from_ref_time(38_996_290) - // Standard Error: 1_136 - .saturating_add(Weight::from_ref_time(49_548).saturating_mul(l.into())) - // Standard Error: 2_021 - .saturating_add(Weight::from_ref_time(80_920).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `314 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `9286` + // Minimum execution time: 29_735_000 picoseconds. + Weight::from_parts(29_350_786, 0) + .saturating_add(Weight::from_parts(0, 9286)) + // Standard Error: 888 + .saturating_add(Weight::from_parts(40_156, 0).saturating_mul(l.into())) + // Standard Error: 1_581 + .saturating_add(Weight::from_parts(55_768, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Vesting Vesting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[1, 28]`. fn vest_unlocked(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 39_803 nanoseconds. - Weight::from_ref_time(39_377_592) - // Standard Error: 1_339 - .saturating_add(Weight::from_ref_time(40_145).saturating_mul(l.into())) - // Standard Error: 2_382 - .saturating_add(Weight::from_ref_time(58_525).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `314 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `9286` + // Minimum execution time: 29_102_000 picoseconds. + Weight::from_parts(28_696_847, 0) + .saturating_add(Weight::from_parts(0, 9286)) + // Standard Error: 1_165 + .saturating_add(Weight::from_parts(36_922, 0).saturating_mul(l.into())) + // Standard Error: 2_074 + .saturating_add(Weight::from_parts(50_524, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Vesting Vesting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[1, 28]`. fn vest_other_locked(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 39_745 nanoseconds. - Weight::from_ref_time(39_336_547) - // Standard Error: 1_617 - .saturating_add(Weight::from_ref_time(48_929).saturating_mul(l.into())) - // Standard Error: 2_877 - .saturating_add(Weight::from_ref_time(63_817).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `417 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `12879` + // Minimum execution time: 32_127_000 picoseconds. + Weight::from_parts(31_695_261, 0) + .saturating_add(Weight::from_parts(0, 12879)) + // Standard Error: 971 + .saturating_add(Weight::from_parts(47_944, 0).saturating_mul(l.into())) + // Standard Error: 1_728 + .saturating_add(Weight::from_parts(71_111, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Vesting Vesting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[1, 28]`. fn vest_other_unlocked(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 39_623 nanoseconds. - Weight::from_ref_time(39_268_057) - // Standard Error: 1_169 - .saturating_add(Weight::from_ref_time(41_495).saturating_mul(l.into())) - // Standard Error: 2_079 - .saturating_add(Weight::from_ref_time(43_554).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `417 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `12879` + // Minimum execution time: 31_726_000 picoseconds. + Weight::from_parts(31_786_813, 0) + .saturating_add(Weight::from_parts(0, 12879)) + // Standard Error: 958 + .saturating_add(Weight::from_parts(39_300, 0).saturating_mul(l.into())) + // Standard Error: 1_704 + .saturating_add(Weight::from_parts(35_548, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Vesting Vesting (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[0, 27]`. fn vested_transfer(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 54_568 nanoseconds. - Weight::from_ref_time(54_738_664) - // Standard Error: 1_909 - .saturating_add(Weight::from_ref_time(40_930).saturating_mul(l.into())) - // Standard Error: 3_396 - .saturating_add(Weight::from_ref_time(48_403).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `488 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `12879` + // Minimum execution time: 47_066_000 picoseconds. + Weight::from_parts(47_550_442, 0) + .saturating_add(Weight::from_parts(0, 12879)) + // Standard Error: 2_033 + .saturating_add(Weight::from_parts(38_126, 0).saturating_mul(l.into())) + // Standard Error: 3_618 + .saturating_add(Weight::from_parts(26_976, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Vesting Vesting (r:1 w:1) - // Storage: System Account (r:2 w:2) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: System Account (r:2 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[0, 27]`. fn force_vested_transfer(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 53_651 nanoseconds. - Weight::from_ref_time(54_347_387) - // Standard Error: 1_974 - .saturating_add(Weight::from_ref_time(41_715).saturating_mul(l.into())) - // Standard Error: 3_512 - .saturating_add(Weight::from_ref_time(39_330).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `591 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `15482` + // Minimum execution time: 49_143_000 picoseconds. + Weight::from_parts(49_823_544, 0) + .saturating_add(Weight::from_parts(0, 15482)) + // Standard Error: 1_972 + .saturating_add(Weight::from_parts(42_115, 0).saturating_mul(l.into())) + // Standard Error: 3_509 + .saturating_add(Weight::from_parts(25_174, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Vesting Vesting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[2, 28]`. fn not_unlocking_merge_schedules(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 41_189 nanoseconds. - Weight::from_ref_time(40_478_905) - // Standard Error: 1_471 - .saturating_add(Weight::from_ref_time(39_575).saturating_mul(l.into())) - // Standard Error: 2_716 - .saturating_add(Weight::from_ref_time(82_798).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `415 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `12879` + // Minimum execution time: 33_466_000 picoseconds. + Weight::from_parts(33_699_400, 0) + .saturating_add(Weight::from_parts(0, 12879)) + // Standard Error: 1_045 + .saturating_add(Weight::from_parts(37_781, 0).saturating_mul(l.into())) + // Standard Error: 1_930 + .saturating_add(Weight::from_parts(39_860, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Vesting Vesting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[2, 28]`. fn unlocking_merge_schedules(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 40_880 nanoseconds. - Weight::from_ref_time(40_413_529) - // Standard Error: 1_052 - .saturating_add(Weight::from_ref_time(46_699).saturating_mul(l.into())) - // Standard Error: 1_943 - .saturating_add(Weight::from_ref_time(68_118).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `415 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `12879` + // Minimum execution time: 33_521_000 picoseconds. + Weight::from_parts(33_278_453, 0) + .saturating_add(Weight::from_parts(0, 12879)) + // Standard Error: 899 + .saturating_add(Weight::from_parts(38_924, 0).saturating_mul(l.into())) + // Standard Error: 1_661 + .saturating_add(Weight::from_parts(51_806, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } diff --git a/runtime/polkadot/src/weights/pallet_xcm.rs b/runtime/polkadot/src/weights/pallet_xcm.rs new file mode 100644 index 000000000000..a2a7d1861d58 --- /dev/null +++ b/runtime/polkadot/src/weights/pallet_xcm.rs @@ -0,0 +1,278 @@ +// Copyright 2017-2022 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . +//! Autogenerated weights for `pallet_xcm` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 + +// Executed Command: +// ./target/production/polkadot +// benchmark +// pallet +// --chain=polkadot-dev +// --steps=50 +// --repeat=20 +// --pallet=pallet_xcm +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --header=./file_header.txt +// --output=./runtime/polkadot/src/weights/ + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weight functions for `pallet_xcm`. +pub struct WeightInfo(PhantomData); +impl pallet_xcm::WeightInfo for WeightInfo { + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SupportedVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SupportedVersion (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) + /// Proof Skipped: XcmPallet VersionDiscoveryQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SafeXcmVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) + fn send() -> Weight { + // Proof Size summary in bytes: + // Measured: `438` + // Estimated: `17478` + // Minimum execution time: 34_675_000 picoseconds. + Weight::from_parts(35_527_000, 0) + .saturating_add(Weight::from_parts(0, 17478)) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().writes(3)) + } + fn teleport_assets() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 22_653_000 picoseconds. + Weight::from_parts(23_050_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + } + fn reserve_transfer_assets() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 21_214_000 picoseconds. + Weight::from_parts(21_604_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + } + /// Storage: Benchmark Override (r:0 w:0) + /// Proof Skipped: Benchmark Override (max_values: None, max_size: None, mode: Measured) + fn execute() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 18_446_744_073_709_551_000 picoseconds. + Weight::from_parts(18_446_744_073_709_551_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + } + /// Storage: XcmPallet SupportedVersion (r:0 w:1) + /// Proof Skipped: XcmPallet SupportedVersion (max_values: None, max_size: None, mode: Measured) + fn force_xcm_version() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 10_275_000 picoseconds. + Weight::from_parts(10_563_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: XcmPallet SafeXcmVersion (r:0 w:1) + /// Proof Skipped: XcmPallet SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) + fn force_default_xcm_version() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_001_000 picoseconds. + Weight::from_parts(3_085_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: XcmPallet VersionNotifiers (r:1 w:1) + /// Proof Skipped: XcmPallet VersionNotifiers (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet QueryCounter (r:1 w:1) + /// Proof Skipped: XcmPallet QueryCounter (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SupportedVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SupportedVersion (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) + /// Proof Skipped: XcmPallet VersionDiscoveryQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SafeXcmVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet Queries (r:0 w:1) + /// Proof Skipped: XcmPallet Queries (max_values: None, max_size: None, mode: Measured) + fn force_subscribe_version_notify() -> Weight { + // Proof Size summary in bytes: + // Measured: `438` + // Estimated: `23742` + // Minimum execution time: 39_910_000 picoseconds. + Weight::from_parts(40_847_000, 0) + .saturating_add(Weight::from_parts(0, 23742)) + .saturating_add(T::DbWeight::get().reads(8)) + .saturating_add(T::DbWeight::get().writes(6)) + } + /// Storage: XcmPallet VersionNotifiers (r:1 w:1) + /// Proof Skipped: XcmPallet VersionNotifiers (max_values: None, max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SupportedVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SupportedVersion (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) + /// Proof Skipped: XcmPallet VersionDiscoveryQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SafeXcmVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet Queries (r:0 w:1) + /// Proof Skipped: XcmPallet Queries (max_values: None, max_size: None, mode: Measured) + fn force_unsubscribe_version_notify() -> Weight { + // Proof Size summary in bytes: + // Measured: `710` + // Estimated: `23995` + // Minimum execution time: 43_293_000 picoseconds. + Weight::from_parts(43_774_000, 0) + .saturating_add(Weight::from_parts(0, 23995)) + .saturating_add(T::DbWeight::get().reads(7)) + .saturating_add(T::DbWeight::get().writes(5)) + } + /// Storage: XcmPallet SupportedVersion (r:4 w:2) + /// Proof Skipped: XcmPallet SupportedVersion (max_values: None, max_size: None, mode: Measured) + fn migrate_supported_version() -> Weight { + // Proof Size summary in bytes: + // Measured: `229` + // Estimated: `11119` + // Minimum execution time: 17_985_000 picoseconds. + Weight::from_parts(18_376_000, 0) + .saturating_add(Weight::from_parts(0, 11119)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(2)) + } + /// Storage: XcmPallet VersionNotifiers (r:4 w:2) + /// Proof Skipped: XcmPallet VersionNotifiers (max_values: None, max_size: None, mode: Measured) + fn migrate_version_notifiers() -> Weight { + // Proof Size summary in bytes: + // Measured: `233` + // Estimated: `11123` + // Minimum execution time: 18_007_000 picoseconds. + Weight::from_parts(18_507_000, 0) + .saturating_add(Weight::from_parts(0, 11123)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(2)) + } + /// Storage: XcmPallet VersionNotifyTargets (r:5 w:0) + /// Proof Skipped: XcmPallet VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) + fn already_notified_target() -> Weight { + // Proof Size summary in bytes: + // Measured: `243` + // Estimated: `13608` + // Minimum execution time: 18_954_000 picoseconds. + Weight::from_parts(19_612_000, 0) + .saturating_add(Weight::from_parts(0, 13608)) + .saturating_add(T::DbWeight::get().reads(5)) + } + /// Storage: XcmPallet VersionNotifyTargets (r:2 w:1) + /// Proof Skipped: XcmPallet VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SupportedVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SupportedVersion (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) + /// Proof Skipped: XcmPallet VersionDiscoveryQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SafeXcmVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) + fn notify_current_targets() -> Weight { + // Proof Size summary in bytes: + // Measured: `508` + // Estimated: `24346` + // Minimum execution time: 38_137_000 picoseconds. + Weight::from_parts(38_547_000, 0) + .saturating_add(Weight::from_parts(0, 24346)) + .saturating_add(T::DbWeight::get().reads(8)) + .saturating_add(T::DbWeight::get().writes(4)) + } + /// Storage: XcmPallet VersionNotifyTargets (r:3 w:0) + /// Proof Skipped: XcmPallet VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) + fn notify_target_migration_fail() -> Weight { + // Proof Size summary in bytes: + // Measured: `272` + // Estimated: `8687` + // Minimum execution time: 9_454_000 picoseconds. + Weight::from_parts(9_729_000, 0) + .saturating_add(Weight::from_parts(0, 8687)) + .saturating_add(T::DbWeight::get().reads(3)) + } + /// Storage: XcmPallet VersionNotifyTargets (r:4 w:2) + /// Proof Skipped: XcmPallet VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) + fn migrate_version_notify_targets() -> Weight { + // Proof Size summary in bytes: + // Measured: `240` + // Estimated: `11130` + // Minimum execution time: 17_957_000 picoseconds. + Weight::from_parts(18_748_000, 0) + .saturating_add(Weight::from_parts(0, 11130)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(2)) + } + /// Storage: XcmPallet VersionNotifyTargets (r:4 w:2) + /// Proof Skipped: XcmPallet VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SupportedVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SupportedVersion (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) + /// Proof Skipped: XcmPallet VersionDiscoveryQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SafeXcmVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) + fn migrate_and_notify_old_targets() -> Weight { + // Proof Size summary in bytes: + // Measured: `512` + // Estimated: `29324` + // Minimum execution time: 44_805_000 picoseconds. + Weight::from_parts(45_461_000, 0) + .saturating_add(Weight::from_parts(0, 29324)) + .saturating_add(T::DbWeight::get().reads(10)) + .saturating_add(T::DbWeight::get().writes(5)) + } +} diff --git a/runtime/polkadot/src/weights/runtime_common_auctions.rs b/runtime/polkadot/src/weights/runtime_common_auctions.rs index b5d384a15ce3..fe87665a0645 100644 --- a/runtime/polkadot/src/weights/runtime_common_auctions.rs +++ b/runtime/polkadot/src/weights/runtime_common_auctions.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_common::auctions` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,53 +45,94 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_common::auctions`. pub struct WeightInfo(PhantomData); impl runtime_common::auctions::WeightInfo for WeightInfo { - // Storage: Auctions AuctionInfo (r:1 w:1) - // Storage: Auctions AuctionCounter (r:1 w:1) + /// Storage: Auctions AuctionInfo (r:1 w:1) + /// Proof: Auctions AuctionInfo (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Auctions AuctionCounter (r:1 w:1) + /// Proof: Auctions AuctionCounter (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn new_auction() -> Weight { - // Minimum execution time: 17_700 nanoseconds. - Weight::from_ref_time(18_419_000) + // Proof Size summary in bytes: + // Measured: `4` + // Estimated: `2982` + // Minimum execution time: 13_577_000 picoseconds. + Weight::from_parts(13_988_000, 0) + .saturating_add(Weight::from_parts(0, 2982)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Paras ParaLifecycles (r:1 w:0) - // Storage: Auctions AuctionCounter (r:1 w:0) - // Storage: Auctions AuctionInfo (r:1 w:0) - // Storage: Slots Leases (r:1 w:0) - // Storage: Auctions Winning (r:1 w:1) - // Storage: Auctions ReservedAmounts (r:2 w:2) - // Storage: System Account (r:1 w:1) + /// Storage: Paras ParaLifecycles (r:1 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Auctions AuctionCounter (r:1 w:0) + /// Proof: Auctions AuctionCounter (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Auctions AuctionInfo (r:1 w:0) + /// Proof: Auctions AuctionInfo (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Slots Leases (r:1 w:0) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: Auctions Winning (r:1 w:1) + /// Proof: Auctions Winning (max_values: None, max_size: Some(1920), added: 4395, mode: MaxEncodedLen) + /// Storage: Auctions ReservedAmounts (r:2 w:2) + /// Proof: Auctions ReservedAmounts (max_values: None, max_size: Some(60), added: 2535, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn bid() -> Weight { - // Minimum execution time: 74_745 nanoseconds. - Weight::from_ref_time(76_728_000) + // Proof Size summary in bytes: + // Measured: `661` + // Estimated: `26272` + // Minimum execution time: 69_204_000 picoseconds. + Weight::from_parts(70_457_000, 0) + .saturating_add(Weight::from_parts(0, 26272)) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Auctions AuctionInfo (r:1 w:1) - // Storage: Babe NextRandomness (r:1 w:0) - // Storage: Babe EpochStart (r:1 w:0) - // Storage: Auctions AuctionCounter (r:1 w:0) - // Storage: Auctions Winning (r:3600 w:3600) - // Storage: Auctions ReservedAmounts (r:37 w:36) - // Storage: System Account (r:36 w:36) - // Storage: Slots Leases (r:7 w:7) - // Storage: Paras ParaLifecycles (r:1 w:1) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) - // Storage: Registrar Paras (r:1 w:1) + /// Storage: Auctions AuctionInfo (r:1 w:1) + /// Proof: Auctions AuctionInfo (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Babe NextRandomness (r:1 w:0) + /// Proof: Babe NextRandomness (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: Babe EpochStart (r:1 w:0) + /// Proof: Babe EpochStart (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Auctions AuctionCounter (r:1 w:0) + /// Proof: Auctions AuctionCounter (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Auctions Winning (r:3600 w:3600) + /// Proof: Auctions Winning (max_values: None, max_size: Some(1920), added: 4395, mode: MaxEncodedLen) + /// Storage: Auctions ReservedAmounts (r:37 w:36) + /// Proof: Auctions ReservedAmounts (max_values: None, max_size: Some(60), added: 2535, mode: MaxEncodedLen) + /// Storage: System Account (r:36 w:36) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Slots Leases (r:7 w:7) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:1) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) + /// Storage: Registrar Paras (r:1 w:1) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) fn on_initialize() -> Weight { - // Minimum execution time: 15_485_064 nanoseconds. - Weight::from_ref_time(15_690_665_000) + // Proof Size summary in bytes: + // Measured: `6947662` + // Estimated: `50786970` + // Minimum execution time: 6_222_318_000 picoseconds. + Weight::from_parts(6_411_378_000, 0) + .saturating_add(Weight::from_parts(0, 50786970)) .saturating_add(T::DbWeight::get().reads(3688)) .saturating_add(T::DbWeight::get().writes(3683)) } - // Storage: Auctions ReservedAmounts (r:37 w:36) - // Storage: System Account (r:36 w:36) - // Storage: Auctions Winning (r:0 w:3600) - // Storage: Auctions AuctionInfo (r:0 w:1) + /// Storage: Auctions ReservedAmounts (r:37 w:36) + /// Proof: Auctions ReservedAmounts (max_values: None, max_size: Some(60), added: 2535, mode: MaxEncodedLen) + /// Storage: System Account (r:36 w:36) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Auctions Winning (r:3600 w:3600) + /// Proof: Auctions Winning (max_values: None, max_size: Some(1920), added: 4395, mode: MaxEncodedLen) + /// Storage: Auctions AuctionInfo (r:0 w:1) + /// Proof: Auctions AuctionInfo (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn cancel_auction() -> Weight { - // Minimum execution time: 4_592_305 nanoseconds. - Weight::from_ref_time(4_646_078_000) - .saturating_add(T::DbWeight::get().reads(73)) + // Proof Size summary in bytes: + // Measured: `177732` + // Estimated: `16012473` + // Minimum execution time: 4_796_112_000 picoseconds. + Weight::from_parts(4_912_250_000, 0) + .saturating_add(Weight::from_parts(0, 16012473)) + .saturating_add(T::DbWeight::get().reads(3673)) .saturating_add(T::DbWeight::get().writes(3673)) } } diff --git a/runtime/polkadot/src/weights/runtime_common_claims.rs b/runtime/polkadot/src/weights/runtime_common_claims.rs index 4b459266db6e..87d1cd5c1dd2 100644 --- a/runtime/polkadot/src/weights/runtime_common_claims.rs +++ b/runtime/polkadot/src/weights/runtime_common_claims.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_common::claims` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,63 +45,113 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_common::claims`. pub struct WeightInfo(PhantomData); impl runtime_common::claims::WeightInfo for WeightInfo { - // Storage: Claims Claims (r:1 w:1) - // Storage: Claims Signing (r:1 w:1) - // Storage: Claims Total (r:1 w:1) - // Storage: Claims Vesting (r:1 w:1) - // Storage: Vesting Vesting (r:1 w:1) - // Storage: System Account (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Claims Claims (r:1 w:1) + /// Proof Skipped: Claims Claims (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Signing (r:1 w:1) + /// Proof Skipped: Claims Signing (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Total (r:1 w:1) + /// Proof Skipped: Claims Total (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Claims Vesting (r:1 w:1) + /// Proof Skipped: Claims Vesting (max_values: None, max_size: None, mode: Measured) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:0) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) fn claim() -> Weight { - // Minimum execution time: 148_318 nanoseconds. - Weight::from_ref_time(150_804_000) + // Proof Size summary in bytes: + // Measured: `586` + // Estimated: `27103` + // Minimum execution time: 143_662_000 picoseconds. + Weight::from_parts(146_007_000, 0) + .saturating_add(Weight::from_parts(0, 27103)) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: Claims Total (r:1 w:1) - // Storage: Claims Vesting (r:0 w:1) - // Storage: Claims Claims (r:0 w:1) - // Storage: Claims Signing (r:0 w:1) + /// Storage: Claims Total (r:1 w:1) + /// Proof Skipped: Claims Total (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Claims Vesting (r:0 w:1) + /// Proof Skipped: Claims Vesting (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Claims (r:0 w:1) + /// Proof Skipped: Claims Claims (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Signing (r:0 w:1) + /// Proof Skipped: Claims Signing (max_values: None, max_size: None, mode: Measured) fn mint_claim() -> Weight { - // Minimum execution time: 12_261 nanoseconds. - Weight::from_ref_time(13_055_000) + // Proof Size summary in bytes: + // Measured: `182` + // Estimated: `2213` + // Minimum execution time: 11_437_000 picoseconds. + Weight::from_parts(11_834_000, 0) + .saturating_add(Weight::from_parts(0, 2213)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Claims Claims (r:1 w:1) - // Storage: Claims Signing (r:1 w:1) - // Storage: Claims Total (r:1 w:1) - // Storage: Claims Vesting (r:1 w:1) - // Storage: Vesting Vesting (r:1 w:1) - // Storage: System Account (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Claims Claims (r:1 w:1) + /// Proof Skipped: Claims Claims (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Signing (r:1 w:1) + /// Proof Skipped: Claims Signing (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Total (r:1 w:1) + /// Proof Skipped: Claims Total (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Claims Vesting (r:1 w:1) + /// Proof Skipped: Claims Vesting (max_values: None, max_size: None, mode: Measured) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:0) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) fn claim_attest() -> Weight { - // Minimum execution time: 149_322 nanoseconds. - Weight::from_ref_time(152_156_000) + // Proof Size summary in bytes: + // Measured: `586` + // Estimated: `27103` + // Minimum execution time: 145_789_000 picoseconds. + Weight::from_parts(148_264_000, 0) + .saturating_add(Weight::from_parts(0, 27103)) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: Claims Preclaims (r:1 w:1) - // Storage: Claims Signing (r:1 w:1) - // Storage: Claims Claims (r:1 w:1) - // Storage: Claims Total (r:1 w:1) - // Storage: Claims Vesting (r:1 w:1) - // Storage: Vesting Vesting (r:1 w:1) - // Storage: System Account (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Claims Preclaims (r:1 w:1) + /// Proof Skipped: Claims Preclaims (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Signing (r:1 w:1) + /// Proof Skipped: Claims Signing (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Claims (r:1 w:1) + /// Proof Skipped: Claims Claims (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Total (r:1 w:1) + /// Proof Skipped: Claims Total (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Claims Vesting (r:1 w:1) + /// Proof Skipped: Claims Vesting (max_values: None, max_size: None, mode: Measured) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:0) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) fn attest() -> Weight { - // Minimum execution time: 71_396 nanoseconds. - Weight::from_ref_time(73_484_000) + // Proof Size summary in bytes: + // Measured: `660` + // Estimated: `31524` + // Minimum execution time: 69_066_000 picoseconds. + Weight::from_parts(81_192_000, 0) + .saturating_add(Weight::from_parts(0, 31524)) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(7)) } - // Storage: Claims Claims (r:1 w:2) - // Storage: Claims Vesting (r:1 w:2) - // Storage: Claims Signing (r:1 w:2) - // Storage: Claims Preclaims (r:1 w:1) + /// Storage: Claims Claims (r:1 w:2) + /// Proof Skipped: Claims Claims (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Vesting (r:1 w:2) + /// Proof Skipped: Claims Vesting (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Signing (r:1 w:2) + /// Proof Skipped: Claims Signing (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Preclaims (r:1 w:1) + /// Proof Skipped: Claims Preclaims (max_values: None, max_size: None, mode: Measured) fn move_claim() -> Weight { - // Minimum execution time: 23_164 nanoseconds. - Weight::from_ref_time(24_074_000) + // Proof Size summary in bytes: + // Measured: `406` + // Estimated: `15484` + // Minimum execution time: 22_426_000 picoseconds. + Weight::from_parts(22_735_000, 0) + .saturating_add(Weight::from_parts(0, 15484)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(7)) } diff --git a/runtime/polkadot/src/weights/runtime_common_crowdloan.rs b/runtime/polkadot/src/weights/runtime_common_crowdloan.rs index bd64d4e5dcc5..78ca3d18cd4f 100644 --- a/runtime/polkadot/src/weights/runtime_common_crowdloan.rs +++ b/runtime/polkadot/src/weights/runtime_common_crowdloan.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_common::crowdloan` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,102 +45,174 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_common::crowdloan`. pub struct WeightInfo(PhantomData); impl runtime_common::crowdloan::WeightInfo for WeightInfo { - // Storage: Crowdloan Funds (r:1 w:1) - // Storage: Registrar Paras (r:1 w:1) - // Storage: Paras ParaLifecycles (r:1 w:0) - // Storage: Crowdloan NextFundIndex (r:1 w:1) + /// Storage: Crowdloan Funds (r:1 w:1) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: Registrar Paras (r:1 w:1) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Crowdloan NextFundIndex (r:1 w:1) + /// Proof Skipped: Crowdloan NextFundIndex (max_values: Some(1), max_size: None, mode: Measured) fn create() -> Weight { - // Minimum execution time: 48_503 nanoseconds. - Weight::from_ref_time(50_033_000) + // Proof Size summary in bytes: + // Measured: `363` + // Estimated: `13332` + // Minimum execution time: 39_416_000 picoseconds. + Weight::from_parts(40_242_000, 0) + .saturating_add(Weight::from_parts(0, 13332)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Crowdloan Funds (r:1 w:1) - // Storage: Slots Leases (r:1 w:0) - // Storage: Auctions AuctionInfo (r:1 w:0) - // Storage: System Account (r:1 w:1) - // Storage: Balances InactiveIssuance (r:1 w:1) - // Storage: Crowdloan EndingsCount (r:1 w:0) - // Storage: Crowdloan NewRaise (r:1 w:1) - // Storage: unknown [0xd861ea1ebf4800d4b89f4ff787ad79ee96d9a708c85b57da7eb8f9ddeda61291] (r:1 w:1) + /// Storage: Crowdloan Funds (r:1 w:1) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: Slots Leases (r:1 w:0) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: Auctions AuctionInfo (r:1 w:0) + /// Proof: Auctions AuctionInfo (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances InactiveIssuance (r:1 w:1) + /// Proof: Balances InactiveIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Crowdloan EndingsCount (r:1 w:0) + /// Proof Skipped: Crowdloan EndingsCount (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Crowdloan NewRaise (r:1 w:1) + /// Proof Skipped: Crowdloan NewRaise (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: unknown `0xd861ea1ebf4800d4b89f4ff787ad79ee96d9a708c85b57da7eb8f9ddeda61291` (r:1 w:1) + /// Proof Skipped: unknown `0xd861ea1ebf4800d4b89f4ff787ad79ee96d9a708c85b57da7eb8f9ddeda61291` (r:1 w:1) fn contribute() -> Weight { - // Minimum execution time: 121_844 nanoseconds. - Weight::from_ref_time(124_019_000) + // Proof Size summary in bytes: + // Measured: `375` + // Estimated: `21827` + // Minimum execution time: 114_856_000 picoseconds. + Weight::from_parts(116_564_000, 0) + .saturating_add(Weight::from_parts(0, 21827)) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: Crowdloan Funds (r:1 w:1) - // Storage: System Account (r:2 w:2) - // Storage: Balances InactiveIssuance (r:1 w:1) - // Storage: unknown [0xc85982571aa615c788ef9b2c16f54f25773fd439e8ee1ed2aa3ae43d48e880f0] (r:1 w:1) + /// Storage: Crowdloan Funds (r:1 w:1) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: System Account (r:2 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances InactiveIssuance (r:1 w:1) + /// Proof: Balances InactiveIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: unknown `0xc85982571aa615c788ef9b2c16f54f25773fd439e8ee1ed2aa3ae43d48e880f0` (r:1 w:1) + /// Proof Skipped: unknown `0xc85982571aa615c788ef9b2c16f54f25773fd439e8ee1ed2aa3ae43d48e880f0` (r:1 w:1) fn withdraw() -> Weight { - // Minimum execution time: 62_426 nanoseconds. - Weight::from_ref_time(63_506_000) + // Proof Size summary in bytes: + // Measured: `690` + // Estimated: `16007` + // Minimum execution time: 56_412_000 picoseconds. + Weight::from_parts(57_660_000, 0) + .saturating_add(Weight::from_parts(0, 16007)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: Skipped Metadata (r:0 w:0) + /// Storage: Skipped Metadata (r:0 w:0) + /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) /// The range of component `k` is `[0, 1000]`. fn refund(k: u32, ) -> Weight { - // Minimum execution time: 64_742 nanoseconds. - Weight::from_ref_time(64_919_000) - // Standard Error: 13_378 - .saturating_add(Weight::from_ref_time(19_461_805).saturating_mul(k.into())) + // Proof Size summary in bytes: + // Measured: `127 + k * (189 ±0)` + // Estimated: `134 + k * (189 ±0)` + // Minimum execution time: 42_566_000 picoseconds. + Weight::from_parts(43_592_000, 0) + .saturating_add(Weight::from_parts(0, 134)) + // Standard Error: 14_813 + .saturating_add(Weight::from_parts(23_173_639, 0).saturating_mul(k.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(k.into()))) .saturating_add(T::DbWeight::get().writes(3)) .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(k.into()))) + .saturating_add(Weight::from_parts(0, 189).saturating_mul(k.into())) } - // Storage: Crowdloan Funds (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Crowdloan Funds (r:1 w:1) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn dissolve() -> Weight { - // Minimum execution time: 38_185 nanoseconds. - Weight::from_ref_time(39_279_000) + // Proof Size summary in bytes: + // Measured: `375` + // Estimated: `7433` + // Minimum execution time: 29_599_000 picoseconds. + Weight::from_parts(30_422_000, 0) + .saturating_add(Weight::from_parts(0, 7433)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Crowdloan Funds (r:1 w:1) + /// Storage: Crowdloan Funds (r:1 w:1) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) fn edit() -> Weight { - // Minimum execution time: 25_099 nanoseconds. - Weight::from_ref_time(26_117_000) + // Proof Size summary in bytes: + // Measured: `235` + // Estimated: `3700` + // Minimum execution time: 18_465_000 picoseconds. + Weight::from_parts(19_170_000, 0) + .saturating_add(Weight::from_parts(0, 3700)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Crowdloan Funds (r:1 w:0) - // Storage: unknown [0xd861ea1ebf4800d4b89f4ff787ad79ee96d9a708c85b57da7eb8f9ddeda61291] (r:1 w:1) + /// Storage: Crowdloan Funds (r:1 w:0) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: unknown `0xd861ea1ebf4800d4b89f4ff787ad79ee96d9a708c85b57da7eb8f9ddeda61291` (r:1 w:1) + /// Proof Skipped: unknown `0xd861ea1ebf4800d4b89f4ff787ad79ee96d9a708c85b57da7eb8f9ddeda61291` (r:1 w:1) fn add_memo() -> Weight { - // Minimum execution time: 35_901 nanoseconds. - Weight::from_ref_time(36_621_000) + // Proof Size summary in bytes: + // Measured: `412` + // Estimated: `7754` + // Minimum execution time: 25_211_000 picoseconds. + Weight::from_parts(25_882_000, 0) + .saturating_add(Weight::from_parts(0, 7754)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Crowdloan Funds (r:1 w:0) - // Storage: Crowdloan NewRaise (r:1 w:1) + /// Storage: Crowdloan Funds (r:1 w:0) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: Crowdloan NewRaise (r:1 w:1) + /// Proof Skipped: Crowdloan NewRaise (max_values: Some(1), max_size: None, mode: Measured) fn poke() -> Weight { - // Minimum execution time: 26_963 nanoseconds. - Weight::from_ref_time(27_564_000) + // Proof Size summary in bytes: + // Measured: `239` + // Estimated: `5428` + // Minimum execution time: 17_799_000 picoseconds. + Weight::from_parts(18_462_000, 0) + .saturating_add(Weight::from_parts(0, 5428)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Auctions AuctionInfo (r:1 w:0) - // Storage: Crowdloan EndingsCount (r:1 w:1) - // Storage: Crowdloan NewRaise (r:1 w:1) - // Storage: Crowdloan Funds (r:2 w:0) - // Storage: Auctions AuctionCounter (r:1 w:0) - // Storage: Paras ParaLifecycles (r:2 w:0) - // Storage: Slots Leases (r:2 w:0) - // Storage: Auctions Winning (r:1 w:1) - // Storage: Auctions ReservedAmounts (r:2 w:2) - // Storage: System Account (r:2 w:2) + /// Storage: Auctions AuctionInfo (r:1 w:0) + /// Proof: Auctions AuctionInfo (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Crowdloan EndingsCount (r:1 w:1) + /// Proof Skipped: Crowdloan EndingsCount (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Crowdloan NewRaise (r:1 w:1) + /// Proof Skipped: Crowdloan NewRaise (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Crowdloan Funds (r:100 w:0) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: Auctions AuctionCounter (r:1 w:0) + /// Proof: Auctions AuctionCounter (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Paras ParaLifecycles (r:100 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Slots Leases (r:100 w:0) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: Auctions Winning (r:1 w:1) + /// Proof: Auctions Winning (max_values: None, max_size: Some(1920), added: 4395, mode: MaxEncodedLen) + /// Storage: Auctions ReservedAmounts (r:100 w:100) + /// Proof: Auctions ReservedAmounts (max_values: None, max_size: Some(60), added: 2535, mode: MaxEncodedLen) + /// Storage: System Account (r:100 w:100) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `n` is `[2, 100]`. fn on_initialize(n: u32, ) -> Weight { - // Minimum execution time: 108_703 nanoseconds. - Weight::from_ref_time(13_096_416) - // Standard Error: 31_917 - .saturating_add(Weight::from_ref_time(42_551_929).saturating_mul(n.into())) + // Proof Size summary in bytes: + // Measured: `130 + n * (356 ±0)` + // Estimated: `16917 + n * (14348 ±0)` + // Minimum execution time: 110_468_000 picoseconds. + Weight::from_parts(112_026_000, 0) + .saturating_add(Weight::from_parts(0, 16917)) + // Standard Error: 50_282 + .saturating_add(Weight::from_parts(49_513_270, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(3)) .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(n.into()))) + .saturating_add(Weight::from_parts(0, 14348).saturating_mul(n.into())) } } diff --git a/runtime/polkadot/src/weights/runtime_common_paras_registrar.rs b/runtime/polkadot/src/weights/runtime_common_paras_registrar.rs index ab2732d87a96..4208f7c022d8 100644 --- a/runtime/polkadot/src/weights/runtime_common_paras_registrar.rs +++ b/runtime/polkadot/src/weights/runtime_common_paras_registrar.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_common::paras_registrar` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,99 +45,175 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_common::paras_registrar`. pub struct WeightInfo(PhantomData); impl runtime_common::paras_registrar::WeightInfo for WeightInfo { - // Storage: Registrar NextFreeParaId (r:1 w:1) - // Storage: Registrar Paras (r:1 w:1) - // Storage: Paras ParaLifecycles (r:1 w:0) + /// Storage: Registrar NextFreeParaId (r:1 w:1) + /// Proof Skipped: Registrar NextFreeParaId (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Registrar Paras (r:1 w:1) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) fn reserve() -> Weight { - // Minimum execution time: 33_118 nanoseconds. - Weight::from_ref_time(33_824_000) + // Proof Size summary in bytes: + // Measured: `70` + // Estimated: `8625` + // Minimum execution time: 25_255_000 picoseconds. + Weight::from_parts(25_919_000, 0) + .saturating_add(Weight::from_parts(0, 8625)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Registrar Paras (r:1 w:1) - // Storage: Paras ParaLifecycles (r:1 w:1) - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Paras PvfActiveVoteMap (r:1 w:0) - // Storage: Paras CodeByHash (r:1 w:1) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) - // Storage: Paras CodeByHashRefs (r:1 w:1) - // Storage: Paras CurrentCodeHash (r:0 w:1) - // Storage: Paras UpcomingParasGenesis (r:0 w:1) + /// Storage: Registrar Paras (r:1 w:1) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:1) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:0) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHash (r:1 w:1) + /// Proof Skipped: Paras CodeByHash (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHashRefs (r:1 w:1) + /// Proof Skipped: Paras CodeByHashRefs (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CurrentCodeHash (r:0 w:1) + /// Proof Skipped: Paras CurrentCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpcomingParasGenesis (r:0 w:1) + /// Proof Skipped: Paras UpcomingParasGenesis (max_values: None, max_size: None, mode: Measured) fn register() -> Weight { - // Minimum execution time: 7_505_264 nanoseconds. - Weight::from_ref_time(7_578_949_000) + // Proof Size summary in bytes: + // Measured: `497` + // Estimated: `28730` + // Minimum execution time: 6_233_224_000 picoseconds. + Weight::from_parts(6_345_016_000, 0) + .saturating_add(Weight::from_parts(0, 28730)) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(7)) } - // Storage: Registrar Paras (r:1 w:1) - // Storage: Paras ParaLifecycles (r:1 w:1) - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Paras PvfActiveVoteMap (r:1 w:0) - // Storage: Paras CodeByHash (r:1 w:1) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) - // Storage: Paras CodeByHashRefs (r:1 w:1) - // Storage: Paras CurrentCodeHash (r:0 w:1) - // Storage: Paras UpcomingParasGenesis (r:0 w:1) + /// Storage: Registrar Paras (r:1 w:1) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:1) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:0) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHash (r:1 w:1) + /// Proof Skipped: Paras CodeByHash (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHashRefs (r:1 w:1) + /// Proof Skipped: Paras CodeByHashRefs (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CurrentCodeHash (r:0 w:1) + /// Proof Skipped: Paras CurrentCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpcomingParasGenesis (r:0 w:1) + /// Proof Skipped: Paras UpcomingParasGenesis (max_values: None, max_size: None, mode: Measured) fn force_register() -> Weight { - // Minimum execution time: 7_519_946 nanoseconds. - Weight::from_ref_time(7_580_737_000) + // Proof Size summary in bytes: + // Measured: `387` + // Estimated: `27630` + // Minimum execution time: 6_218_676_000 picoseconds. + Weight::from_parts(6_340_775_000, 0) + .saturating_add(Weight::from_parts(0, 27630)) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(7)) } - // Storage: Registrar Paras (r:1 w:1) - // Storage: Paras ParaLifecycles (r:1 w:1) - // Storage: Paras FutureCodeHash (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) - // Storage: Registrar PendingSwap (r:0 w:1) + /// Storage: Registrar Paras (r:1 w:1) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:1) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras FutureCodeHash (r:1 w:0) + /// Proof Skipped: Paras FutureCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) + /// Storage: Registrar PendingSwap (r:0 w:1) + /// Proof Skipped: Registrar PendingSwap (max_values: None, max_size: None, mode: Measured) fn deregister() -> Weight { - // Minimum execution time: 50_019 nanoseconds. - Weight::from_ref_time(51_477_000) + // Proof Size summary in bytes: + // Measured: `435` + // Estimated: `17955` + // Minimum execution time: 41_094_000 picoseconds. + Weight::from_parts(42_246_000, 0) + .saturating_add(Weight::from_parts(0, 17955)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Registrar Paras (r:1 w:0) - // Storage: Paras ParaLifecycles (r:2 w:2) - // Storage: Registrar PendingSwap (r:1 w:1) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) - // Storage: Crowdloan Funds (r:2 w:2) - // Storage: Slots Leases (r:2 w:2) + /// Storage: Registrar Paras (r:1 w:0) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:2 w:2) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Registrar PendingSwap (r:1 w:1) + /// Proof Skipped: Registrar PendingSwap (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) + /// Storage: Crowdloan Funds (r:2 w:2) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: Slots Leases (r:2 w:2) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) fn swap() -> Weight { - // Minimum execution time: 45_054 nanoseconds. - Weight::from_ref_time(45_920_000) + // Proof Size summary in bytes: + // Measured: `676` + // Estimated: `34432` + // Minimum execution time: 47_336_000 picoseconds. + Weight::from_parts(51_371_000, 0) + .saturating_add(Weight::from_parts(0, 34432)) .saturating_add(T::DbWeight::get().reads(10)) .saturating_add(T::DbWeight::get().writes(8)) } - // Storage: Paras FutureCodeHash (r:1 w:1) - // Storage: Paras UpgradeRestrictionSignal (r:1 w:1) - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Paras CurrentCodeHash (r:1 w:0) - // Storage: Paras UpgradeCooldowns (r:1 w:1) - // Storage: Paras PvfActiveVoteMap (r:1 w:0) - // Storage: Paras CodeByHash (r:1 w:1) - // Storage: Paras UpcomingUpgrades (r:1 w:1) - // Storage: System Digest (r:1 w:1) - // Storage: Paras CodeByHashRefs (r:1 w:1) - // Storage: Paras FutureCodeUpgrades (r:0 w:1) + /// Storage: Paras FutureCodeHash (r:1 w:1) + /// Proof Skipped: Paras FutureCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeRestrictionSignal (r:1 w:1) + /// Proof Skipped: Paras UpgradeRestrictionSignal (max_values: None, max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras CurrentCodeHash (r:1 w:0) + /// Proof Skipped: Paras CurrentCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeCooldowns (r:1 w:1) + /// Proof Skipped: Paras UpgradeCooldowns (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:0) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHash (r:1 w:1) + /// Proof Skipped: Paras CodeByHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpcomingUpgrades (r:1 w:1) + /// Proof Skipped: Paras UpcomingUpgrades (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System Digest (r:1 w:1) + /// Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras CodeByHashRefs (r:1 w:1) + /// Proof Skipped: Paras CodeByHashRefs (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras FutureCodeUpgrades (r:0 w:1) + /// Proof Skipped: Paras FutureCodeUpgrades (max_values: None, max_size: None, mode: Measured) /// The range of component `b` is `[1, 3145728]`. fn schedule_code_upgrade(b: u32, ) -> Weight { - // Minimum execution time: 43_970 nanoseconds. - Weight::from_ref_time(44_368_000) + // Proof Size summary in bytes: + // Measured: `255` + // Estimated: `29535` + // Minimum execution time: 44_303_000 picoseconds. + Weight::from_parts(44_808_000, 0) + .saturating_add(Weight::from_parts(0, 29535)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(2_368).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(1_970, 0).saturating_mul(b.into())) .saturating_add(T::DbWeight::get().reads(10)) .saturating_add(T::DbWeight::get().writes(8)) } - // Storage: Paras Heads (r:0 w:1) + /// Storage: Paras Heads (r:0 w:1) + /// Proof Skipped: Paras Heads (max_values: None, max_size: None, mode: Measured) /// The range of component `b` is `[1, 1048576]`. fn set_current_head(b: u32, ) -> Weight { - // Minimum execution time: 14_192 nanoseconds. - Weight::from_ref_time(14_474_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 8_760_000 picoseconds. + Weight::from_parts(8_946_000, 0) + .saturating_add(Weight::from_parts(0, 0)) // Standard Error: 2 - .saturating_add(Weight::from_ref_time(966).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(867, 0).saturating_mul(b.into())) .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/runtime/polkadot/src/weights/runtime_common_slots.rs b/runtime/polkadot/src/weights/runtime_common_slots.rs index 3b8eb672abfd..e11b22b6d7a5 100644 --- a/runtime/polkadot/src/weights/runtime_common_slots.rs +++ b/runtime/polkadot/src/weights/runtime_common_slots.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_common::slots` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,52 +45,85 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_common::slots`. pub struct WeightInfo(PhantomData); impl runtime_common::slots::WeightInfo for WeightInfo { - // Storage: Slots Leases (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Slots Leases (r:1 w:1) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn force_lease() -> Weight { - // Minimum execution time: 32_610 nanoseconds. - Weight::from_ref_time(33_161_000) + // Proof Size summary in bytes: + // Measured: `220` + // Estimated: `7278` + // Minimum execution time: 26_260_000 picoseconds. + Weight::from_parts(26_932_000, 0) + .saturating_add(Weight::from_parts(0, 7278)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Paras Parachains (r:1 w:0) - // Storage: Slots Leases (r:101 w:100) - // Storage: Paras ParaLifecycles (r:100 w:100) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) - // Storage: Registrar Paras (r:100 w:100) + /// Storage: Paras Parachains (r:1 w:0) + /// Proof Skipped: Paras Parachains (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Slots Leases (r:101 w:100) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:200 w:200) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) + /// Storage: Registrar Paras (r:100 w:100) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[0, 100]`. /// The range of component `t` is `[0, 100]`. fn manage_lease_period_start(c: u32, t: u32, ) -> Weight { - // Minimum execution time: 565_673 nanoseconds. - Weight::from_ref_time(568_063_000) - // Standard Error: 71_388 - .saturating_add(Weight::from_ref_time(2_363_534).saturating_mul(c.into())) - // Standard Error: 71_388 - .saturating_add(Weight::from_ref_time(12_473_232).saturating_mul(t.into())) + // Proof Size summary in bytes: + // Measured: `0 + c * (47 ±0) + t * (308 ±0)` + // Estimated: `7790 + c * (2781 ±0) + t * (9308 ±0)` + // Minimum execution time: 630_131_000 picoseconds. + Weight::from_parts(635_877_000, 0) + .saturating_add(Weight::from_parts(0, 7790)) + // Standard Error: 79_816 + .saturating_add(Weight::from_parts(2_652_439, 0).saturating_mul(c.into())) + // Standard Error: 79_816 + .saturating_add(Weight::from_parts(11_669_914, 0).saturating_mul(t.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(c.into()))) .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(t.into()))) .saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(c.into()))) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(t.into()))) + .saturating_add(Weight::from_parts(0, 2781).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(0, 9308).saturating_mul(t.into())) } - // Storage: Slots Leases (r:1 w:1) - // Storage: System Account (r:8 w:8) + /// Storage: Slots Leases (r:1 w:1) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: System Account (r:8 w:8) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn clear_all_leases() -> Weight { - // Minimum execution time: 96_528 nanoseconds. - Weight::from_ref_time(97_910_000) + // Proof Size summary in bytes: + // Measured: `2692` + // Estimated: `27971` + // Minimum execution time: 97_202_000 picoseconds. + Weight::from_parts(98_557_000, 0) + .saturating_add(Weight::from_parts(0, 27971)) .saturating_add(T::DbWeight::get().reads(9)) .saturating_add(T::DbWeight::get().writes(9)) } - // Storage: Slots Leases (r:1 w:0) - // Storage: Paras ParaLifecycles (r:1 w:1) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) - // Storage: Registrar Paras (r:1 w:1) + /// Storage: Slots Leases (r:1 w:0) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:1) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) + /// Storage: Registrar Paras (r:1 w:1) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) fn trigger_onboard() -> Weight { - // Minimum execution time: 29_991 nanoseconds. - Weight::from_ref_time(31_232_000) + // Proof Size summary in bytes: + // Measured: `580` + // Estimated: `18245` + // Minimum execution time: 27_982_000 picoseconds. + Weight::from_parts(28_586_000, 0) + .saturating_add(Weight::from_parts(0, 18245)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(3)) } diff --git a/runtime/polkadot/src/weights/runtime_parachains_configuration.rs b/runtime/polkadot/src/weights/runtime_parachains_configuration.rs index 7008c0233f10..c60b354f4456 100644 --- a/runtime/polkadot/src/weights/runtime_parachains_configuration.rs +++ b/runtime/polkadot/src/weights/runtime_parachains_configuration.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_parachains::configuration` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,58 +45,103 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_parachains::configuration`. pub struct WeightInfo(PhantomData); impl runtime_parachains::configuration::WeightInfo for WeightInfo { - // Storage: Configuration PendingConfigs (r:1 w:1) - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Configuration BypassConsistencyCheck (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Storage: Configuration PendingConfigs (r:1 w:1) + /// Proof Skipped: Configuration PendingConfigs (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration BypassConsistencyCheck (r:1 w:0) + /// Proof Skipped: Configuration BypassConsistencyCheck (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) fn set_config_with_block_number() -> Weight { - // Minimum execution time: 11_758 nanoseconds. - Weight::from_ref_time(12_127_000) + // Proof Size summary in bytes: + // Measured: `317` + // Estimated: `7208` + // Minimum execution time: 12_097_000 picoseconds. + Weight::from_parts(12_745_000, 0) + .saturating_add(Weight::from_parts(0, 7208)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Configuration PendingConfigs (r:1 w:1) - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Configuration BypassConsistencyCheck (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Storage: Configuration PendingConfigs (r:1 w:1) + /// Proof Skipped: Configuration PendingConfigs (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration BypassConsistencyCheck (r:1 w:0) + /// Proof Skipped: Configuration BypassConsistencyCheck (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) fn set_config_with_u32() -> Weight { - // Minimum execution time: 11_695 nanoseconds. - Weight::from_ref_time(12_118_000) + // Proof Size summary in bytes: + // Measured: `317` + // Estimated: `7208` + // Minimum execution time: 12_691_000 picoseconds. + Weight::from_parts(13_006_000, 0) + .saturating_add(Weight::from_parts(0, 7208)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Configuration PendingConfigs (r:1 w:1) - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Configuration BypassConsistencyCheck (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Storage: Configuration PendingConfigs (r:1 w:1) + /// Proof Skipped: Configuration PendingConfigs (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration BypassConsistencyCheck (r:1 w:0) + /// Proof Skipped: Configuration BypassConsistencyCheck (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) fn set_config_with_option_u32() -> Weight { - // Minimum execution time: 11_542 nanoseconds. - Weight::from_ref_time(12_035_000) + // Proof Size summary in bytes: + // Measured: `317` + // Estimated: `7208` + // Minimum execution time: 12_533_000 picoseconds. + Weight::from_parts(13_126_000, 0) + .saturating_add(Weight::from_parts(0, 7208)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Configuration PendingConfigs (r:1 w:1) - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Configuration BypassConsistencyCheck (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Storage: Configuration PendingConfigs (r:1 w:1) + /// Proof Skipped: Configuration PendingConfigs (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration BypassConsistencyCheck (r:1 w:0) + /// Proof Skipped: Configuration BypassConsistencyCheck (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) fn set_config_with_weight() -> Weight { - // Minimum execution time: 11_899 nanoseconds. - Weight::from_ref_time(12_349_000) + // Proof Size summary in bytes: + // Measured: `317` + // Estimated: `7208` + // Minimum execution time: 12_511_000 picoseconds. + Weight::from_parts(12_858_000, 0) + .saturating_add(Weight::from_parts(0, 7208)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Benchmark Override (r:0 w:0) + /// Storage: Benchmark Override (r:0 w:0) + /// Proof Skipped: Benchmark Override (max_values: None, max_size: None, mode: Measured) fn set_hrmp_open_request_ttl() -> Weight { - // Minimum execution time: 2_000_000_000 nanoseconds. - Weight::from_ref_time(2_000_000_000_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_000_000_000_000 picoseconds. + Weight::from_parts(2_000_000_000_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } - // Storage: Configuration PendingConfigs (r:1 w:1) - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Configuration BypassConsistencyCheck (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Storage: Configuration PendingConfigs (r:1 w:1) + /// Proof Skipped: Configuration PendingConfigs (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration BypassConsistencyCheck (r:1 w:0) + /// Proof Skipped: Configuration BypassConsistencyCheck (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) fn set_config_with_balance() -> Weight { - // Minimum execution time: 11_749 nanoseconds. - Weight::from_ref_time(12_199_000) + // Proof Size summary in bytes: + // Measured: `317` + // Estimated: `7208` + // Minimum execution time: 12_525_000 picoseconds. + Weight::from_parts(13_130_000, 0) + .saturating_add(Weight::from_parts(0, 7208)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/polkadot/src/weights/runtime_parachains_disputes.rs b/runtime/polkadot/src/weights/runtime_parachains_disputes.rs index d77c97d8e161..dde80600f060 100644 --- a/runtime/polkadot/src/weights/runtime_parachains_disputes.rs +++ b/runtime/polkadot/src/weights/runtime_parachains_disputes.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_parachains::disputes` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,10 +45,15 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_parachains::disputes`. pub struct WeightInfo(PhantomData); impl runtime_parachains::disputes::WeightInfo for WeightInfo { - // Storage: ParasDisputes Frozen (r:0 w:1) + /// Storage: ParasDisputes Frozen (r:0 w:1) + /// Proof Skipped: ParasDisputes Frozen (max_values: Some(1), max_size: None, mode: Measured) fn force_unfreeze() -> Weight { - // Minimum execution time: 4_427 nanoseconds. - Weight::from_ref_time(4_596_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_970_000 picoseconds. + Weight::from_parts(3_188_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/runtime/polkadot/src/weights/runtime_parachains_hrmp.rs b/runtime/polkadot/src/weights/runtime_parachains_hrmp.rs index f8abbd7b79c7..e6b675809302 100644 --- a/runtime/polkadot/src/weights/runtime_parachains_hrmp.rs +++ b/runtime/polkadot/src/weights/runtime_parachains_hrmp.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_parachains::hrmp` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,144 +45,245 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_parachains::hrmp`. pub struct WeightInfo(PhantomData); impl runtime_parachains::hrmp::WeightInfo for WeightInfo { - // Storage: Paras ParaLifecycles (r:2 w:0) - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) - // Storage: Hrmp HrmpChannels (r:1 w:0) - // Storage: Hrmp HrmpEgressChannelsIndex (r:1 w:0) - // Storage: Hrmp HrmpOpenChannelRequestCount (r:1 w:1) - // Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) - // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) - // Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Storage: Paras ParaLifecycles (r:2 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequests (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannels (r:1 w:0) + /// Proof Skipped: Hrmp HrmpChannels (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpEgressChannelsIndex (r:1 w:0) + /// Proof Skipped: Hrmp HrmpEgressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestCount (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestCount (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestsList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) fn hrmp_init_open_channel() -> Weight { - // Minimum execution time: 42_160 nanoseconds. - Weight::from_ref_time(42_643_000) + // Proof Size summary in bytes: + // Measured: `577` + // Estimated: `34893` + // Minimum execution time: 39_502_000 picoseconds. + Weight::from_parts(39_981_000, 0) + .saturating_add(Weight::from_parts(0, 34893)) .saturating_add(T::DbWeight::get().reads(10)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Paras ParaLifecycles (r:1 w:0) - // Storage: Hrmp HrmpIngressChannelsIndex (r:1 w:0) - // Storage: Hrmp HrmpAcceptedChannelRequestCount (r:1 w:1) - // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) - // Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequests (max_values: None, max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpIngressChannelsIndex (r:1 w:0) + /// Proof Skipped: Hrmp HrmpIngressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpAcceptedChannelRequestCount (r:1 w:1) + /// Proof Skipped: Hrmp HrmpAcceptedChannelRequestCount (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) fn hrmp_accept_open_channel() -> Weight { - // Minimum execution time: 41_408 nanoseconds. - Weight::from_ref_time(41_827_000) + // Proof Size summary in bytes: + // Measured: `809` + // Estimated: `27938` + // Minimum execution time: 40_489_000 picoseconds. + Weight::from_parts(41_076_000, 0) + .saturating_add(Weight::from_parts(0, 27938)) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Hrmp HrmpChannels (r:1 w:0) - // Storage: Hrmp HrmpCloseChannelRequests (r:1 w:1) - // Storage: Hrmp HrmpCloseChannelRequestsList (r:1 w:1) - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) - // Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Storage: Hrmp HrmpChannels (r:1 w:0) + /// Proof Skipped: Hrmp HrmpChannels (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpCloseChannelRequests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpCloseChannelRequests (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpCloseChannelRequestsList (r:1 w:1) + /// Proof Skipped: Hrmp HrmpCloseChannelRequestsList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) fn hrmp_close_channel() -> Weight { - // Minimum execution time: 37_916 nanoseconds. - Weight::from_ref_time(38_381_000) + // Proof Size summary in bytes: + // Measured: `680` + // Estimated: `20910` + // Minimum execution time: 36_361_000 picoseconds. + Weight::from_parts(37_148_000, 0) + .saturating_add(Weight::from_parts(0, 20910)) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Hrmp HrmpIngressChannelsIndex (r:128 w:127) - // Storage: Hrmp HrmpEgressChannelsIndex (r:1 w:1) - // Storage: Hrmp HrmpChannels (r:127 w:127) - // Storage: Hrmp HrmpAcceptedChannelRequestCount (r:0 w:1) - // Storage: Hrmp HrmpChannelContents (r:0 w:127) - // Storage: Hrmp HrmpOpenChannelRequestCount (r:0 w:1) + /// Storage: Hrmp HrmpIngressChannelsIndex (r:128 w:128) + /// Proof Skipped: Hrmp HrmpIngressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpEgressChannelsIndex (r:128 w:128) + /// Proof Skipped: Hrmp HrmpEgressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannels (r:254 w:254) + /// Proof Skipped: Hrmp HrmpChannels (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpAcceptedChannelRequestCount (r:0 w:1) + /// Proof Skipped: Hrmp HrmpAcceptedChannelRequestCount (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannelContents (r:0 w:254) + /// Proof Skipped: Hrmp HrmpChannelContents (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestCount (r:0 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestCount (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[0, 127]`. /// The range of component `e` is `[0, 127]`. fn force_clean_hrmp(i: u32, e: u32, ) -> Weight { - // Minimum execution time: 912_589 nanoseconds. - Weight::from_ref_time(920_486_000) - // Standard Error: 83_269 - .saturating_add(Weight::from_ref_time(2_815_102).saturating_mul(i.into())) - // Standard Error: 83_269 - .saturating_add(Weight::from_ref_time(2_944_576).saturating_mul(e.into())) + // Proof Size summary in bytes: + // Measured: `197 + i * (100 ±0) + e * (100 ±0)` + // Estimated: `9084 + i * (5550 ±0) + e * (5550 ±0)` + // Minimum execution time: 1_074_045_000 picoseconds. + Weight::from_parts(1_079_931_000, 0) + .saturating_add(Weight::from_parts(0, 9084)) + // Standard Error: 96_252 + .saturating_add(Weight::from_parts(3_082_744, 0).saturating_mul(i.into())) + // Standard Error: 96_252 + .saturating_add(Weight::from_parts(3_118_809, 0).saturating_mul(e.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(i.into()))) .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(e.into()))) .saturating_add(T::DbWeight::get().writes(4)) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(i.into()))) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(e.into()))) + .saturating_add(Weight::from_parts(0, 5550).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(0, 5550).saturating_mul(e.into())) } - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:0) - // Storage: Hrmp HrmpOpenChannelRequests (r:2 w:2) - // Storage: Paras ParaLifecycles (r:4 w:0) - // Storage: Hrmp HrmpIngressChannelsIndex (r:2 w:2) - // Storage: Hrmp HrmpEgressChannelsIndex (r:2 w:2) - // Storage: Hrmp HrmpOpenChannelRequestCount (r:2 w:2) - // Storage: Hrmp HrmpAcceptedChannelRequestCount (r:2 w:2) - // Storage: Hrmp HrmpChannels (r:0 w:2) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestsList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequests (r:128 w:128) + /// Proof Skipped: Hrmp HrmpOpenChannelRequests (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:256 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpIngressChannelsIndex (r:128 w:128) + /// Proof Skipped: Hrmp HrmpIngressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpEgressChannelsIndex (r:128 w:128) + /// Proof Skipped: Hrmp HrmpEgressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestCount (r:128 w:128) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestCount (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpAcceptedChannelRequestCount (r:128 w:128) + /// Proof Skipped: Hrmp HrmpAcceptedChannelRequestCount (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannels (r:0 w:128) + /// Proof Skipped: Hrmp HrmpChannels (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[0, 128]`. fn force_process_hrmp_open(c: u32, ) -> Weight { - // Minimum execution time: 9_715 nanoseconds. - Weight::from_ref_time(9_806_000) - // Standard Error: 9_212 - .saturating_add(Weight::from_ref_time(16_505_526).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `652 + c * (136 ±0)` + // Estimated: `14676 + c * (18549 ±0)` + // Minimum execution time: 9_678_000 picoseconds. + Weight::from_parts(6_837_820, 0) + .saturating_add(Weight::from_parts(0, 14676)) + // Standard Error: 20_096 + .saturating_add(Weight::from_parts(18_573_440, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().reads((7_u64).saturating_mul(c.into()))) .saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes((6_u64).saturating_mul(c.into()))) + .saturating_add(Weight::from_parts(0, 18549).saturating_mul(c.into())) } - // Storage: Hrmp HrmpCloseChannelRequestsList (r:1 w:0) - // Storage: Hrmp HrmpChannels (r:2 w:2) - // Storage: Hrmp HrmpEgressChannelsIndex (r:2 w:2) - // Storage: Hrmp HrmpIngressChannelsIndex (r:2 w:2) - // Storage: Hrmp HrmpCloseChannelRequests (r:0 w:2) - // Storage: Hrmp HrmpChannelContents (r:0 w:2) + /// Storage: Hrmp HrmpCloseChannelRequestsList (r:1 w:1) + /// Proof Skipped: Hrmp HrmpCloseChannelRequestsList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannels (r:128 w:128) + /// Proof Skipped: Hrmp HrmpChannels (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpEgressChannelsIndex (r:128 w:128) + /// Proof Skipped: Hrmp HrmpEgressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpIngressChannelsIndex (r:128 w:128) + /// Proof Skipped: Hrmp HrmpIngressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpCloseChannelRequests (r:0 w:128) + /// Proof Skipped: Hrmp HrmpCloseChannelRequests (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannelContents (r:0 w:128) + /// Proof Skipped: Hrmp HrmpChannelContents (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[0, 128]`. fn force_process_hrmp_close(c: u32, ) -> Weight { - // Minimum execution time: 6_624 nanoseconds. - Weight::from_ref_time(6_791_000) - // Standard Error: 6_263 - .saturating_add(Weight::from_ref_time(10_201_172).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `268 + c * (124 ±0)` + // Estimated: `5973 + c * (8175 ±0)` + // Minimum execution time: 6_545_000 picoseconds. + Weight::from_parts(3_839_847, 0) + .saturating_add(Weight::from_parts(0, 5973)) + // Standard Error: 13_189 + .saturating_add(Weight::from_parts(11_397_155, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(c.into()))) .saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes((5_u64).saturating_mul(c.into()))) + .saturating_add(Weight::from_parts(0, 8175).saturating_mul(c.into())) } - // Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) - // Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) - // Storage: Hrmp HrmpOpenChannelRequestCount (r:1 w:1) + /// Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestsList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequests (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestCount (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestCount (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[0, 128]`. fn hrmp_cancel_open_request(c: u32, ) -> Weight { - // Minimum execution time: 26_466 nanoseconds. - Weight::from_ref_time(32_211_795) - // Standard Error: 1_271 - .saturating_add(Weight::from_ref_time(95_619).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `959 + c * (13 ±0)` + // Estimated: `10704 + c * (45 ±0)` + // Minimum execution time: 22_478_000 picoseconds. + Weight::from_parts(27_026_265, 0) + .saturating_add(Weight::from_parts(0, 10704)) + // Standard Error: 1_040 + .saturating_add(Weight::from_parts(53_928, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 45).saturating_mul(c.into())) } - // Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) - // Storage: Hrmp HrmpOpenChannelRequests (r:2 w:2) + /// Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestsList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequests (r:128 w:128) + /// Proof Skipped: Hrmp HrmpOpenChannelRequests (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[0, 128]`. fn clean_open_channel_requests(c: u32, ) -> Weight { - // Minimum execution time: 4_860 nanoseconds. - Weight::from_ref_time(3_362_442) - // Standard Error: 3_610 - .saturating_add(Weight::from_ref_time(2_656_647).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `176 + c * (63 ±0)` + // Estimated: `2821 + c * (2602 ±0)` + // Minimum execution time: 5_297_000 picoseconds. + Weight::from_parts(3_420_027, 0) + .saturating_add(Weight::from_parts(0, 2821)) + // Standard Error: 4_062 + .saturating_add(Weight::from_parts(3_203_130, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(c.into()))) .saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(c.into()))) + .saturating_add(Weight::from_parts(0, 2602).saturating_mul(c.into())) } - // Storage: Paras ParaLifecycles (r:2 w:0) - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) - // Storage: Hrmp HrmpChannels (r:1 w:0) - // Storage: Hrmp HrmpEgressChannelsIndex (r:1 w:0) - // Storage: Hrmp HrmpOpenChannelRequestCount (r:1 w:1) - // Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) - // Storage: Dmp DownwardMessageQueueHeads (r:2 w:2) - // Storage: Dmp DownwardMessageQueues (r:2 w:2) - // Storage: Hrmp HrmpIngressChannelsIndex (r:1 w:0) - // Storage: Hrmp HrmpAcceptedChannelRequestCount (r:1 w:1) + /// Storage: Paras ParaLifecycles (r:2 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequests (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannels (r:1 w:0) + /// Proof Skipped: Hrmp HrmpChannels (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpEgressChannelsIndex (r:1 w:0) + /// Proof Skipped: Hrmp HrmpEgressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestCount (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestCount (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestsList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:2 w:2) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:2 w:2) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpIngressChannelsIndex (r:1 w:0) + /// Proof Skipped: Hrmp HrmpIngressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpAcceptedChannelRequestCount (r:1 w:1) + /// Proof Skipped: Hrmp HrmpAcceptedChannelRequestCount (max_values: None, max_size: None, mode: Measured) fn force_open_hrmp_channel() -> Weight { - // Minimum execution time: 53_717 nanoseconds. - Weight::from_ref_time(54_396_000) + // Proof Size summary in bytes: + // Measured: `577` + // Estimated: `47927` + // Minimum execution time: 53_734_000 picoseconds. + Weight::from_parts(54_206_000, 0) + .saturating_add(Weight::from_parts(0, 47927)) .saturating_add(T::DbWeight::get().reads(14)) .saturating_add(T::DbWeight::get().writes(8)) } diff --git a/runtime/polkadot/src/weights/runtime_parachains_initializer.rs b/runtime/polkadot/src/weights/runtime_parachains_initializer.rs index 97e149aca3e1..d4f7ca2b3a36 100644 --- a/runtime/polkadot/src/weights/runtime_parachains_initializer.rs +++ b/runtime/polkadot/src/weights/runtime_parachains_initializer.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_parachains::initializer` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,14 +45,20 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_parachains::initializer`. pub struct WeightInfo(PhantomData); impl runtime_parachains::initializer::WeightInfo for WeightInfo { - // Storage: System Digest (r:1 w:1) + /// Storage: System Digest (r:1 w:1) + /// Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `d` is `[0, 65536]`. fn force_approve(d: u32, ) -> Weight { - // Minimum execution time: 8_317 nanoseconds. - Weight::from_ref_time(11_009_964) - // Standard Error: 5 - .saturating_add(Weight::from_ref_time(1_314).saturating_mul(d.into())) + // Proof Size summary in bytes: + // Measured: `0 + d * (11 ±0)` + // Estimated: `1480 + d * (11 ±0)` + // Minimum execution time: 3_887_000 picoseconds. + Weight::from_parts(7_244_651, 0) + .saturating_add(Weight::from_parts(0, 1480)) + // Standard Error: 6 + .saturating_add(Weight::from_parts(1_319, 0).saturating_mul(d.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 11).saturating_mul(d.into())) } } diff --git a/runtime/polkadot/src/weights/runtime_parachains_paras.rs b/runtime/polkadot/src/weights/runtime_parachains_paras.rs index f44e3fda2e9b..9307c2c77be2 100644 --- a/runtime/polkadot/src/weights/runtime_parachains_paras.rs +++ b/runtime/polkadot/src/weights/runtime_parachains_paras.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_parachains::paras` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,154 +45,244 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_parachains::paras`. pub struct WeightInfo(PhantomData); impl runtime_parachains::paras::WeightInfo for WeightInfo { - // Storage: Paras CurrentCodeHash (r:1 w:1) - // Storage: Paras CodeByHashRefs (r:1 w:1) - // Storage: Paras PastCodeMeta (r:1 w:1) - // Storage: Paras PastCodePruning (r:1 w:1) - // Storage: Paras PastCodeHash (r:0 w:1) - // Storage: Paras CodeByHash (r:0 w:1) + /// Storage: Paras CurrentCodeHash (r:1 w:1) + /// Proof Skipped: Paras CurrentCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHashRefs (r:1 w:1) + /// Proof Skipped: Paras CodeByHashRefs (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras PastCodeMeta (r:1 w:1) + /// Proof Skipped: Paras PastCodeMeta (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras PastCodePruning (r:1 w:1) + /// Proof Skipped: Paras PastCodePruning (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PastCodeHash (r:0 w:1) + /// Proof Skipped: Paras PastCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHash (r:0 w:1) + /// Proof Skipped: Paras CodeByHash (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[1, 3145728]`. fn force_set_current_code(c: u32, ) -> Weight { - // Minimum execution time: 36_730 nanoseconds. - Weight::from_ref_time(37_121_000) + // Proof Size summary in bytes: + // Measured: `8309` + // Estimated: `61734` + // Minimum execution time: 33_514_000 picoseconds. + Weight::from_parts(33_804_000, 0) + .saturating_add(Weight::from_parts(0, 61734)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(2_354).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(1_953, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: Paras Heads (r:0 w:1) + /// Storage: Paras Heads (r:0 w:1) + /// Proof Skipped: Paras Heads (max_values: None, max_size: None, mode: Measured) /// The range of component `s` is `[1, 1048576]`. fn force_set_current_head(s: u32, ) -> Weight { - // Minimum execution time: 13_657 nanoseconds. - Weight::from_ref_time(13_898_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 8_575_000 picoseconds. + Weight::from_parts(8_757_000, 0) + .saturating_add(Weight::from_parts(0, 0)) // Standard Error: 2 - .saturating_add(Weight::from_ref_time(959).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(866, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Paras FutureCodeHash (r:1 w:1) - // Storage: Paras CurrentCodeHash (r:1 w:0) - // Storage: Paras UpgradeCooldowns (r:1 w:1) - // Storage: Paras PvfActiveVoteMap (r:1 w:0) - // Storage: Paras CodeByHash (r:1 w:1) - // Storage: Paras UpcomingUpgrades (r:1 w:1) - // Storage: System Digest (r:1 w:1) - // Storage: Paras CodeByHashRefs (r:1 w:1) - // Storage: Paras FutureCodeUpgrades (r:0 w:1) - // Storage: Paras UpgradeRestrictionSignal (r:0 w:1) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras FutureCodeHash (r:1 w:1) + /// Proof Skipped: Paras FutureCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CurrentCodeHash (r:1 w:0) + /// Proof Skipped: Paras CurrentCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeCooldowns (r:1 w:1) + /// Proof Skipped: Paras UpgradeCooldowns (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:0) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHash (r:1 w:1) + /// Proof Skipped: Paras CodeByHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpcomingUpgrades (r:1 w:1) + /// Proof Skipped: Paras UpcomingUpgrades (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System Digest (r:1 w:1) + /// Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras CodeByHashRefs (r:1 w:1) + /// Proof Skipped: Paras CodeByHashRefs (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras FutureCodeUpgrades (r:0 w:1) + /// Proof Skipped: Paras FutureCodeUpgrades (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeRestrictionSignal (r:0 w:1) + /// Proof Skipped: Paras UpgradeRestrictionSignal (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[1, 3145728]`. fn force_schedule_code_upgrade(c: u32, ) -> Weight { - // Minimum execution time: 62_202 nanoseconds. - Weight::from_ref_time(62_741_000) + // Proof Size summary in bytes: + // Measured: `16689` + // Estimated: `206844` + // Minimum execution time: 59_763_000 picoseconds. + Weight::from_parts(60_188_000, 0) + .saturating_add(Weight::from_parts(0, 206844)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(2_374).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(1_979, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(9)) .saturating_add(T::DbWeight::get().writes(8)) } - // Storage: Paras FutureCodeUpgrades (r:1 w:0) - // Storage: Paras Heads (r:0 w:1) - // Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Storage: Paras FutureCodeUpgrades (r:1 w:0) + /// Proof Skipped: Paras FutureCodeUpgrades (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras Heads (r:0 w:1) + /// Proof Skipped: Paras Heads (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Proof Skipped: Paras UpgradeGoAheadSignal (max_values: None, max_size: None, mode: Measured) /// The range of component `s` is `[1, 1048576]`. fn force_note_new_head(s: u32, ) -> Weight { - // Minimum execution time: 19_306 nanoseconds. - Weight::from_ref_time(19_573_000) + // Proof Size summary in bytes: + // Measured: `95` + // Estimated: `3750` + // Minimum execution time: 14_463_000 picoseconds. + Weight::from_parts(14_800_000, 0) + .saturating_add(Weight::from_parts(0, 3750)) // Standard Error: 2 - .saturating_add(Weight::from_ref_time(961).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(869, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) fn force_queue_action() -> Weight { - // Minimum execution time: 24_330 nanoseconds. - Weight::from_ref_time(24_697_000) + // Proof Size summary in bytes: + // Measured: `4251` + // Estimated: `13452` + // Minimum execution time: 20_457_000 picoseconds. + Weight::from_parts(21_033_000, 0) + .saturating_add(Weight::from_parts(0, 13452)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Paras PvfActiveVoteMap (r:1 w:0) - // Storage: Paras CodeByHash (r:1 w:1) + /// Storage: Paras PvfActiveVoteMap (r:1 w:0) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHash (r:1 w:1) + /// Proof Skipped: Paras CodeByHash (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[1, 3145728]`. fn add_trusted_validation_code(c: u32, ) -> Weight { - // Minimum execution time: 9_281 nanoseconds. - Weight::from_ref_time(9_463_000) + // Proof Size summary in bytes: + // Measured: `28` + // Estimated: `6986` + // Minimum execution time: 8_834_000 picoseconds. + Weight::from_parts(8_989_000, 0) + .saturating_add(Weight::from_parts(0, 6986)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(2_359).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(1_961, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Paras CodeByHashRefs (r:1 w:0) - // Storage: Paras CodeByHash (r:0 w:1) + /// Storage: Paras CodeByHashRefs (r:1 w:0) + /// Proof Skipped: Paras CodeByHashRefs (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHash (r:0 w:1) + /// Proof Skipped: Paras CodeByHash (max_values: None, max_size: None, mode: Measured) fn poke_unused_validation_code() -> Weight { - // Minimum execution time: 7_078 nanoseconds. - Weight::from_ref_time(7_538_000) + // Proof Size summary in bytes: + // Measured: `28` + // Estimated: `3521` + // Minimum execution time: 6_731_000 picoseconds. + Weight::from_parts(7_003_000, 0) + .saturating_add(Weight::from_parts(0, 3521)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras PvfActiveVoteMap (r:1 w:1) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:1) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) fn include_pvf_check_statement() -> Weight { - // Minimum execution time: 93_834 nanoseconds. - Weight::from_ref_time(97_594_000) + // Proof Size summary in bytes: + // Measured: `26872` + // Estimated: `115408` + // Minimum execution time: 91_664_000 picoseconds. + Weight::from_parts(93_856_000, 0) + .saturating_add(Weight::from_parts(0, 115408)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras PvfActiveVoteMap (r:1 w:1) - // Storage: Paras PvfActiveVoteList (r:1 w:1) - // Storage: Paras UpcomingUpgrades (r:1 w:1) - // Storage: System Digest (r:1 w:1) - // Storage: Paras FutureCodeUpgrades (r:0 w:100) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:1) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteList (r:1 w:1) + /// Proof Skipped: Paras PvfActiveVoteList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras UpcomingUpgrades (r:1 w:1) + /// Proof Skipped: Paras UpcomingUpgrades (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System Digest (r:1 w:1) + /// Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras FutureCodeUpgrades (r:0 w:100) + /// Proof Skipped: Paras FutureCodeUpgrades (max_values: None, max_size: None, mode: Measured) fn include_pvf_check_statement_finalize_upgrade_accept() -> Weight { - // Minimum execution time: 668_112 nanoseconds. - Weight::from_ref_time(678_124_000) + // Proof Size summary in bytes: + // Measured: `27426` + // Estimated: `231783` + // Minimum execution time: 778_654_000 picoseconds. + Weight::from_parts(789_010_000, 0) + .saturating_add(Weight::from_parts(0, 231783)) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(104)) } - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras PvfActiveVoteMap (r:1 w:1) - // Storage: Paras PvfActiveVoteList (r:1 w:1) - // Storage: Paras CodeByHashRefs (r:1 w:1) - // Storage: Paras CodeByHash (r:0 w:1) - // Storage: Paras UpgradeGoAheadSignal (r:0 w:100) - // Storage: Paras FutureCodeHash (r:0 w:100) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:1) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) fn include_pvf_check_statement_finalize_upgrade_reject() -> Weight { - // Minimum execution time: 624_859 nanoseconds. - Weight::from_ref_time(634_113_000) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(204)) + // Proof Size summary in bytes: + // Measured: `27404` + // Estimated: `117536` + // Minimum execution time: 91_553_000 picoseconds. + Weight::from_parts(93_179_000, 0) + .saturating_add(Weight::from_parts(0, 117536)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras PvfActiveVoteMap (r:1 w:1) - // Storage: Paras PvfActiveVoteList (r:1 w:1) - // Storage: Paras ActionsQueue (r:1 w:1) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:1) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteList (r:1 w:1) + /// Proof Skipped: Paras PvfActiveVoteList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) fn include_pvf_check_statement_finalize_onboarding_accept() -> Weight { - // Minimum execution time: 521_765 nanoseconds. - Weight::from_ref_time(527_269_000) + // Proof Size summary in bytes: + // Measured: `26894` + // Estimated: `174234` + // Minimum execution time: 617_068_000 picoseconds. + Weight::from_parts(625_676_000, 0) + .saturating_add(Weight::from_parts(0, 174234)) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras PvfActiveVoteMap (r:1 w:1) - // Storage: Paras PvfActiveVoteList (r:1 w:1) - // Storage: Paras CodeByHashRefs (r:1 w:1) - // Storage: Paras ParaLifecycles (r:0 w:100) - // Storage: Paras CodeByHash (r:0 w:1) - // Storage: Paras CurrentCodeHash (r:0 w:100) - // Storage: Paras UpcomingParasGenesis (r:0 w:100) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:1) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) fn include_pvf_check_statement_finalize_onboarding_reject() -> Weight { - // Minimum execution time: 699_263 nanoseconds. - Weight::from_ref_time(705_929_000) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(304)) + // Proof Size summary in bytes: + // Measured: `26872` + // Estimated: `115408` + // Minimum execution time: 90_504_000 picoseconds. + Weight::from_parts(92_274_000, 0) + .saturating_add(Weight::from_parts(0, 115408)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/runtime/polkadot/src/weights/runtime_parachains_paras_inherent.rs b/runtime/polkadot/src/weights/runtime_parachains_paras_inherent.rs index ada45c6efe75..397e40473960 100644 --- a/runtime/polkadot/src/weights/runtime_parachains_paras_inherent.rs +++ b/runtime/polkadot/src/weights/runtime_parachains_paras_inherent.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_parachains::paras_inherent` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 // Executed Command: @@ -44,162 +45,308 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_parachains::paras_inherent`. pub struct WeightInfo(PhantomData); impl runtime_parachains::paras_inherent::WeightInfo for WeightInfo { - // Storage: ParaInherent Included (r:1 w:1) - // Storage: System ParentHash (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Babe AuthorVrfRandomness (r:1 w:0) - // Storage: ParaSessionInfo Sessions (r:1 w:0) - // Storage: ParasDisputes Disputes (r:1 w:1) - // Storage: ParasDisputes Included (r:1 w:1) - // Storage: ParasDisputes SpamSlots (r:1 w:1) - // Storage: ParaScheduler AvailabilityCores (r:1 w:1) - // Storage: ParasDisputes Frozen (r:1 w:0) - // Storage: ParaInclusion PendingAvailability (r:2 w:1) - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: Paras Parachains (r:1 w:0) - // Storage: ParaInclusion PendingAvailabilityCommitments (r:1 w:1) - // Storage: ParaSessionInfo AccountKeys (r:1 w:0) - // Storage: Session Validators (r:1 w:0) - // Storage: Staking ActiveEra (r:1 w:0) - // Storage: Staking ErasRewardPoints (r:1 w:1) - // Storage: Dmp DownwardMessageQueues (r:1 w:1) - // Storage: Hrmp HrmpChannelDigests (r:1 w:1) - // Storage: Paras FutureCodeUpgrades (r:1 w:0) - // Storage: ParaInherent OnChainVotes (r:1 w:1) - // Storage: ParaScheduler SessionStartBlock (r:1 w:0) - // Storage: ParaScheduler ParathreadQueue (r:1 w:1) - // Storage: ParaScheduler Scheduled (r:1 w:1) - // Storage: ParaScheduler ValidatorGroups (r:1 w:0) - // Storage: Ump NeedsDispatch (r:1 w:1) - // Storage: Ump NextDispatchRoundStartWith (r:1 w:1) - // Storage: Hrmp HrmpWatermarks (r:0 w:1) - // Storage: Paras Heads (r:0 w:1) - // Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Storage: ParaInherent Included (r:1 w:1) + /// Proof Skipped: ParaInherent Included (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System ParentHash (r:1 w:0) + /// Proof: System ParentHash (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Babe AuthorVrfRandomness (r:1 w:0) + /// Proof: Babe AuthorVrfRandomness (max_values: Some(1), max_size: Some(33), added: 528, mode: MaxEncodedLen) + /// Storage: ParaSessionInfo Sessions (r:1 w:0) + /// Proof Skipped: ParaSessionInfo Sessions (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasDisputes Disputes (r:1 w:1) + /// Proof Skipped: ParasDisputes Disputes (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasDisputes BackersOnDisputes (r:1 w:1) + /// Proof Skipped: ParasDisputes BackersOnDisputes (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaScheduler AvailabilityCores (r:1 w:1) + /// Proof Skipped: ParaScheduler AvailabilityCores (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasDisputes Included (r:1 w:1) + /// Proof Skipped: ParasDisputes Included (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasDisputes Frozen (r:1 w:0) + /// Proof Skipped: ParasDisputes Frozen (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaInclusion PendingAvailability (r:2 w:1) + /// Proof Skipped: ParaInclusion PendingAvailability (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras Parachains (r:1 w:0) + /// Proof Skipped: Paras Parachains (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaInclusion PendingAvailabilityCommitments (r:1 w:1) + /// Proof Skipped: ParaInclusion PendingAvailabilityCommitments (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaSessionInfo AccountKeys (r:1 w:0) + /// Proof Skipped: ParaSessionInfo AccountKeys (max_values: None, max_size: None, mode: Measured) + /// Storage: Session Validators (r:1 w:0) + /// Proof Skipped: Session Validators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Staking ActiveEra (r:1 w:0) + /// Proof: Staking ActiveEra (max_values: Some(1), max_size: Some(13), added: 508, mode: MaxEncodedLen) + /// Storage: Staking ErasRewardPoints (r:1 w:1) + /// Proof Skipped: Staking ErasRewardPoints (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannelDigests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpChannelDigests (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras FutureCodeUpgrades (r:1 w:0) + /// Proof Skipped: Paras FutureCodeUpgrades (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaInherent OnChainVotes (r:1 w:1) + /// Proof Skipped: ParaInherent OnChainVotes (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler SessionStartBlock (r:1 w:0) + /// Proof Skipped: ParaScheduler SessionStartBlock (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler ParathreadQueue (r:1 w:1) + /// Proof Skipped: ParaScheduler ParathreadQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler Scheduled (r:1 w:1) + /// Proof Skipped: ParaScheduler Scheduled (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler ValidatorGroups (r:1 w:0) + /// Proof Skipped: ParaScheduler ValidatorGroups (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Ump NeedsDispatch (r:1 w:1) + /// Proof Skipped: Ump NeedsDispatch (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Ump NextDispatchRoundStartWith (r:1 w:1) + /// Proof Skipped: Ump NextDispatchRoundStartWith (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Hrmp HrmpWatermarks (r:0 w:1) + /// Proof Skipped: Hrmp HrmpWatermarks (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras Heads (r:0 w:1) + /// Proof Skipped: Paras Heads (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Proof Skipped: Paras UpgradeGoAheadSignal (max_values: None, max_size: None, mode: Measured) /// The range of component `v` is `[10, 200]`. fn enter_variable_disputes(v: u32, ) -> Weight { - // Minimum execution time: 819_257 nanoseconds. - Weight::from_ref_time(370_630_260) - // Standard Error: 21_227 - .saturating_add(Weight::from_ref_time(47_673_829).saturating_mul(v.into())) - .saturating_add(T::DbWeight::get().reads(30)) - .saturating_add(T::DbWeight::get().writes(18)) + // Proof Size summary in bytes: + // Measured: `50870` + // Estimated: `1539235 + v * (23 ±0)` + // Minimum execution time: 776_077_000 picoseconds. + Weight::from_parts(298_478_078, 0) + .saturating_add(Weight::from_parts(0, 1539235)) + // Standard Error: 25_937 + .saturating_add(Weight::from_parts(48_728_687, 0).saturating_mul(v.into())) + .saturating_add(T::DbWeight::get().reads(29)) + .saturating_add(T::DbWeight::get().writes(16)) + .saturating_add(Weight::from_parts(0, 23).saturating_mul(v.into())) } - // Storage: ParaInherent Included (r:1 w:1) - // Storage: System ParentHash (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Babe AuthorVrfRandomness (r:1 w:0) - // Storage: ParaScheduler AvailabilityCores (r:1 w:1) - // Storage: ParasDisputes Frozen (r:1 w:0) - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: Paras Parachains (r:1 w:0) - // Storage: ParaInclusion PendingAvailability (r:2 w:1) - // Storage: ParaInclusion PendingAvailabilityCommitments (r:1 w:1) - // Storage: ParaSessionInfo AccountKeys (r:1 w:0) - // Storage: Session Validators (r:1 w:0) - // Storage: Staking ActiveEra (r:1 w:0) - // Storage: Staking ErasRewardPoints (r:1 w:1) - // Storage: Dmp DownwardMessageQueues (r:1 w:1) - // Storage: Hrmp HrmpChannelDigests (r:1 w:1) - // Storage: Paras FutureCodeUpgrades (r:1 w:0) - // Storage: ParaInherent OnChainVotes (r:1 w:1) - // Storage: ParasDisputes Disputes (r:1 w:0) - // Storage: ParaScheduler SessionStartBlock (r:1 w:0) - // Storage: ParaScheduler ParathreadQueue (r:1 w:1) - // Storage: ParaScheduler Scheduled (r:1 w:1) - // Storage: ParaScheduler ValidatorGroups (r:1 w:0) - // Storage: Ump NeedsDispatch (r:1 w:1) - // Storage: Ump NextDispatchRoundStartWith (r:1 w:1) - // Storage: ParaInclusion AvailabilityBitfields (r:0 w:1) - // Storage: ParasDisputes Included (r:0 w:1) - // Storage: Hrmp HrmpWatermarks (r:0 w:1) - // Storage: Paras Heads (r:0 w:1) - // Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Storage: ParaInherent Included (r:1 w:1) + /// Proof Skipped: ParaInherent Included (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System ParentHash (r:1 w:0) + /// Proof: System ParentHash (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Babe AuthorVrfRandomness (r:1 w:0) + /// Proof: Babe AuthorVrfRandomness (max_values: Some(1), max_size: Some(33), added: 528, mode: MaxEncodedLen) + /// Storage: ParaScheduler AvailabilityCores (r:1 w:1) + /// Proof Skipped: ParaScheduler AvailabilityCores (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasDisputes Frozen (r:1 w:0) + /// Proof Skipped: ParasDisputes Frozen (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras Parachains (r:1 w:0) + /// Proof Skipped: Paras Parachains (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaInclusion PendingAvailability (r:2 w:1) + /// Proof Skipped: ParaInclusion PendingAvailability (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaInclusion PendingAvailabilityCommitments (r:1 w:1) + /// Proof Skipped: ParaInclusion PendingAvailabilityCommitments (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaSessionInfo AccountKeys (r:1 w:0) + /// Proof Skipped: ParaSessionInfo AccountKeys (max_values: None, max_size: None, mode: Measured) + /// Storage: Session Validators (r:1 w:0) + /// Proof Skipped: Session Validators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Staking ActiveEra (r:1 w:0) + /// Proof: Staking ActiveEra (max_values: Some(1), max_size: Some(13), added: 508, mode: MaxEncodedLen) + /// Storage: Staking ErasRewardPoints (r:1 w:1) + /// Proof Skipped: Staking ErasRewardPoints (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannelDigests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpChannelDigests (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras FutureCodeUpgrades (r:1 w:0) + /// Proof Skipped: Paras FutureCodeUpgrades (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaInherent OnChainVotes (r:1 w:1) + /// Proof Skipped: ParaInherent OnChainVotes (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasDisputes Disputes (r:1 w:0) + /// Proof Skipped: ParasDisputes Disputes (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaScheduler SessionStartBlock (r:1 w:0) + /// Proof Skipped: ParaScheduler SessionStartBlock (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler ParathreadQueue (r:1 w:1) + /// Proof Skipped: ParaScheduler ParathreadQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler Scheduled (r:1 w:1) + /// Proof Skipped: ParaScheduler Scheduled (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler ValidatorGroups (r:1 w:0) + /// Proof Skipped: ParaScheduler ValidatorGroups (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Ump NeedsDispatch (r:1 w:1) + /// Proof Skipped: Ump NeedsDispatch (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Ump NextDispatchRoundStartWith (r:1 w:1) + /// Proof Skipped: Ump NextDispatchRoundStartWith (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaInclusion AvailabilityBitfields (r:0 w:1) + /// Proof Skipped: ParaInclusion AvailabilityBitfields (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasDisputes Included (r:0 w:1) + /// Proof Skipped: ParasDisputes Included (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpWatermarks (r:0 w:1) + /// Proof Skipped: Hrmp HrmpWatermarks (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras Heads (r:0 w:1) + /// Proof Skipped: Paras Heads (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Proof Skipped: Paras UpgradeGoAheadSignal (max_values: None, max_size: None, mode: Measured) fn enter_bitfields() -> Weight { - // Minimum execution time: 342_960 nanoseconds. - Weight::from_ref_time(351_793_000) + // Proof Size summary in bytes: + // Measured: `42703` + // Estimated: `1252687` + // Minimum execution time: 333_634_000 picoseconds. + Weight::from_parts(347_247_000, 0) + .saturating_add(Weight::from_parts(0, 1252687)) .saturating_add(T::DbWeight::get().reads(27)) .saturating_add(T::DbWeight::get().writes(17)) } - // Storage: ParaInherent Included (r:1 w:1) - // Storage: System ParentHash (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Babe AuthorVrfRandomness (r:1 w:0) - // Storage: ParaScheduler AvailabilityCores (r:1 w:1) - // Storage: ParasDisputes Frozen (r:1 w:0) - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: Paras Parachains (r:1 w:0) - // Storage: ParaInclusion PendingAvailability (r:2 w:1) - // Storage: ParaInclusion PendingAvailabilityCommitments (r:1 w:1) - // Storage: ParaSessionInfo AccountKeys (r:1 w:0) - // Storage: Session Validators (r:1 w:0) - // Storage: Staking ActiveEra (r:1 w:0) - // Storage: Staking ErasRewardPoints (r:1 w:1) - // Storage: Dmp DownwardMessageQueues (r:1 w:1) - // Storage: Hrmp HrmpChannelDigests (r:1 w:1) - // Storage: Paras FutureCodeUpgrades (r:1 w:0) - // Storage: ParaInherent OnChainVotes (r:1 w:1) - // Storage: ParasDisputes Disputes (r:2 w:0) - // Storage: ParaScheduler SessionStartBlock (r:1 w:0) - // Storage: ParaScheduler ParathreadQueue (r:1 w:1) - // Storage: ParaScheduler Scheduled (r:1 w:1) - // Storage: ParaScheduler ValidatorGroups (r:1 w:0) - // Storage: Paras CurrentCodeHash (r:1 w:0) - // Storage: Ump RelayDispatchQueueSize (r:1 w:0) - // Storage: Ump NeedsDispatch (r:1 w:1) - // Storage: Ump NextDispatchRoundStartWith (r:1 w:1) - // Storage: ParasDisputes Included (r:0 w:1) - // Storage: Hrmp HrmpWatermarks (r:0 w:1) - // Storage: Paras Heads (r:0 w:1) - // Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Storage: ParaInherent Included (r:1 w:1) + /// Proof Skipped: ParaInherent Included (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System ParentHash (r:1 w:0) + /// Proof: System ParentHash (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Babe AuthorVrfRandomness (r:1 w:0) + /// Proof: Babe AuthorVrfRandomness (max_values: Some(1), max_size: Some(33), added: 528, mode: MaxEncodedLen) + /// Storage: ParaScheduler AvailabilityCores (r:1 w:1) + /// Proof Skipped: ParaScheduler AvailabilityCores (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasDisputes Frozen (r:1 w:0) + /// Proof Skipped: ParasDisputes Frozen (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras Parachains (r:1 w:0) + /// Proof Skipped: Paras Parachains (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaInclusion PendingAvailability (r:2 w:1) + /// Proof Skipped: ParaInclusion PendingAvailability (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaInclusion PendingAvailabilityCommitments (r:1 w:1) + /// Proof Skipped: ParaInclusion PendingAvailabilityCommitments (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaSessionInfo AccountKeys (r:1 w:0) + /// Proof Skipped: ParaSessionInfo AccountKeys (max_values: None, max_size: None, mode: Measured) + /// Storage: Session Validators (r:1 w:0) + /// Proof Skipped: Session Validators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Staking ActiveEra (r:1 w:0) + /// Proof: Staking ActiveEra (max_values: Some(1), max_size: Some(13), added: 508, mode: MaxEncodedLen) + /// Storage: Staking ErasRewardPoints (r:1 w:1) + /// Proof Skipped: Staking ErasRewardPoints (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannelDigests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpChannelDigests (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras FutureCodeUpgrades (r:1 w:0) + /// Proof Skipped: Paras FutureCodeUpgrades (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaInherent OnChainVotes (r:1 w:1) + /// Proof Skipped: ParaInherent OnChainVotes (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasDisputes Disputes (r:2 w:0) + /// Proof Skipped: ParasDisputes Disputes (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaScheduler SessionStartBlock (r:1 w:0) + /// Proof Skipped: ParaScheduler SessionStartBlock (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler ParathreadQueue (r:1 w:1) + /// Proof Skipped: ParaScheduler ParathreadQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler Scheduled (r:1 w:1) + /// Proof Skipped: ParaScheduler Scheduled (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler ValidatorGroups (r:1 w:0) + /// Proof Skipped: ParaScheduler ValidatorGroups (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras CurrentCodeHash (r:1 w:0) + /// Proof Skipped: Paras CurrentCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Ump RelayDispatchQueueSize (r:1 w:0) + /// Proof Skipped: Ump RelayDispatchQueueSize (max_values: None, max_size: None, mode: Measured) + /// Storage: Ump NeedsDispatch (r:1 w:1) + /// Proof Skipped: Ump NeedsDispatch (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Ump NextDispatchRoundStartWith (r:1 w:1) + /// Proof Skipped: Ump NextDispatchRoundStartWith (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasDisputes Included (r:0 w:1) + /// Proof Skipped: ParasDisputes Included (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpWatermarks (r:0 w:1) + /// Proof Skipped: Hrmp HrmpWatermarks (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras Heads (r:0 w:1) + /// Proof Skipped: Paras Heads (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Proof Skipped: Paras UpgradeGoAheadSignal (max_values: None, max_size: None, mode: Measured) /// The range of component `v` is `[101, 200]`. fn enter_backed_candidates_variable(v: u32, ) -> Weight { - // Minimum execution time: 5_654_868 nanoseconds. - Weight::from_ref_time(888_144_567) - // Standard Error: 44_714 - .saturating_add(Weight::from_ref_time(47_610_457).saturating_mul(v.into())) + // Proof Size summary in bytes: + // Measured: `42735` + // Estimated: `1305723` + // Minimum execution time: 5_585_712_000 picoseconds. + Weight::from_parts(817_055_988, 0) + .saturating_add(Weight::from_parts(0, 1305723)) + // Standard Error: 47_975 + .saturating_add(Weight::from_parts(48_146_281, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().reads(30)) .saturating_add(T::DbWeight::get().writes(16)) } - // Storage: ParaInherent Included (r:1 w:1) - // Storage: System ParentHash (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Babe AuthorVrfRandomness (r:1 w:0) - // Storage: ParaScheduler AvailabilityCores (r:1 w:1) - // Storage: ParasDisputes Frozen (r:1 w:0) - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: Paras Parachains (r:1 w:0) - // Storage: ParaInclusion PendingAvailability (r:2 w:1) - // Storage: ParaInclusion PendingAvailabilityCommitments (r:1 w:1) - // Storage: ParaSessionInfo AccountKeys (r:1 w:0) - // Storage: Session Validators (r:1 w:0) - // Storage: Staking ActiveEra (r:1 w:0) - // Storage: Staking ErasRewardPoints (r:1 w:1) - // Storage: Dmp DownwardMessageQueues (r:1 w:1) - // Storage: Hrmp HrmpChannelDigests (r:1 w:1) - // Storage: Paras FutureCodeUpgrades (r:1 w:0) - // Storage: ParaInherent OnChainVotes (r:1 w:1) - // Storage: ParasDisputes Disputes (r:2 w:0) - // Storage: ParaScheduler SessionStartBlock (r:1 w:0) - // Storage: ParaScheduler ParathreadQueue (r:1 w:1) - // Storage: ParaScheduler Scheduled (r:1 w:1) - // Storage: ParaScheduler ValidatorGroups (r:1 w:0) - // Storage: Paras CurrentCodeHash (r:1 w:0) - // Storage: Paras FutureCodeHash (r:1 w:0) - // Storage: Paras UpgradeRestrictionSignal (r:1 w:0) - // Storage: Ump RelayDispatchQueueSize (r:1 w:0) - // Storage: Ump NeedsDispatch (r:1 w:1) - // Storage: Ump NextDispatchRoundStartWith (r:1 w:1) - // Storage: ParasDisputes Included (r:0 w:1) - // Storage: Hrmp HrmpWatermarks (r:0 w:1) - // Storage: Paras Heads (r:0 w:1) - // Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Storage: ParaInherent Included (r:1 w:1) + /// Proof Skipped: ParaInherent Included (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System ParentHash (r:1 w:0) + /// Proof: System ParentHash (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Babe AuthorVrfRandomness (r:1 w:0) + /// Proof: Babe AuthorVrfRandomness (max_values: Some(1), max_size: Some(33), added: 528, mode: MaxEncodedLen) + /// Storage: ParaScheduler AvailabilityCores (r:1 w:1) + /// Proof Skipped: ParaScheduler AvailabilityCores (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasDisputes Frozen (r:1 w:0) + /// Proof Skipped: ParasDisputes Frozen (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras Parachains (r:1 w:0) + /// Proof Skipped: Paras Parachains (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaInclusion PendingAvailability (r:2 w:1) + /// Proof Skipped: ParaInclusion PendingAvailability (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaInclusion PendingAvailabilityCommitments (r:1 w:1) + /// Proof Skipped: ParaInclusion PendingAvailabilityCommitments (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaSessionInfo AccountKeys (r:1 w:0) + /// Proof Skipped: ParaSessionInfo AccountKeys (max_values: None, max_size: None, mode: Measured) + /// Storage: Session Validators (r:1 w:0) + /// Proof Skipped: Session Validators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Staking ActiveEra (r:1 w:0) + /// Proof: Staking ActiveEra (max_values: Some(1), max_size: Some(13), added: 508, mode: MaxEncodedLen) + /// Storage: Staking ErasRewardPoints (r:1 w:1) + /// Proof Skipped: Staking ErasRewardPoints (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannelDigests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpChannelDigests (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras FutureCodeUpgrades (r:1 w:0) + /// Proof Skipped: Paras FutureCodeUpgrades (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaInherent OnChainVotes (r:1 w:1) + /// Proof Skipped: ParaInherent OnChainVotes (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasDisputes Disputes (r:2 w:0) + /// Proof Skipped: ParasDisputes Disputes (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaScheduler SessionStartBlock (r:1 w:0) + /// Proof Skipped: ParaScheduler SessionStartBlock (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler ParathreadQueue (r:1 w:1) + /// Proof Skipped: ParaScheduler ParathreadQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler Scheduled (r:1 w:1) + /// Proof Skipped: ParaScheduler Scheduled (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler ValidatorGroups (r:1 w:0) + /// Proof Skipped: ParaScheduler ValidatorGroups (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras CurrentCodeHash (r:1 w:0) + /// Proof Skipped: Paras CurrentCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras FutureCodeHash (r:1 w:0) + /// Proof Skipped: Paras FutureCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeRestrictionSignal (r:1 w:0) + /// Proof Skipped: Paras UpgradeRestrictionSignal (max_values: None, max_size: None, mode: Measured) + /// Storage: Ump RelayDispatchQueueSize (r:1 w:0) + /// Proof Skipped: Ump RelayDispatchQueueSize (max_values: None, max_size: None, mode: Measured) + /// Storage: Ump NeedsDispatch (r:1 w:1) + /// Proof Skipped: Ump NeedsDispatch (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Ump NextDispatchRoundStartWith (r:1 w:1) + /// Proof Skipped: Ump NextDispatchRoundStartWith (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasDisputes Included (r:0 w:1) + /// Proof Skipped: ParasDisputes Included (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpWatermarks (r:0 w:1) + /// Proof Skipped: Hrmp HrmpWatermarks (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras Heads (r:0 w:1) + /// Proof Skipped: Paras Heads (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Proof Skipped: Paras UpgradeGoAheadSignal (max_values: None, max_size: None, mode: Measured) fn enter_backed_candidate_code_upgrade() -> Weight { - // Minimum execution time: 39_513_215 nanoseconds. - Weight::from_ref_time(39_820_619_000) + // Proof Size summary in bytes: + // Measured: `42762` + // Estimated: `1398960` + // Minimum execution time: 32_705_265_000 picoseconds. + Weight::from_parts(32_937_507_000, 0) + .saturating_add(Weight::from_parts(0, 1398960)) .saturating_add(T::DbWeight::get().reads(32)) .saturating_add(T::DbWeight::get().writes(16)) } diff --git a/runtime/polkadot/src/weights/runtime_parachains_ump.rs b/runtime/polkadot/src/weights/runtime_parachains_ump.rs new file mode 100644 index 000000000000..2d67909a2fc4 --- /dev/null +++ b/runtime/polkadot/src/weights/runtime_parachains_ump.rs @@ -0,0 +1,91 @@ +// Copyright 2017-2022 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . +//! Autogenerated weights for `runtime_parachains::ump` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm4`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024 + +// Executed Command: +// ./target/production/polkadot +// benchmark +// pallet +// --chain=polkadot-dev +// --steps=50 +// --repeat=20 +// --pallet=runtime_parachains::ump +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --header=./file_header.txt +// --output=./runtime/polkadot/src/weights/runtime_parachains_ump.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weight functions for `runtime_parachains::ump`. +pub struct WeightInfo(PhantomData); +impl runtime_parachains::ump::WeightInfo for WeightInfo { + /// The range of component `s` is `[0, 51200]`. + fn process_upward_message(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 5_965_000 picoseconds. + Weight::from_parts(6_067_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 8 + .saturating_add(Weight::from_parts(1_388, 0).saturating_mul(s.into())) + } + /// Storage: Ump NeedsDispatch (r:1 w:1) + /// Proof Skipped: Ump NeedsDispatch (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Ump NextDispatchRoundStartWith (r:1 w:1) + /// Proof Skipped: Ump NextDispatchRoundStartWith (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Ump RelayDispatchQueues (r:0 w:1) + /// Proof Skipped: Ump RelayDispatchQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Ump RelayDispatchQueueSize (r:0 w:1) + /// Proof Skipped: Ump RelayDispatchQueueSize (max_values: None, max_size: None, mode: Measured) + fn clean_ump_after_outgoing() -> Weight { + // Proof Size summary in bytes: + // Measured: `240` + // Estimated: `3930` + // Minimum execution time: 9_595_000 picoseconds. + Weight::from_parts(9_908_000, 0) + .saturating_add(Weight::from_parts(0, 3930)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(4)) + } + /// Storage: Ump Overweight (r:1 w:1) + /// Proof Skipped: Ump Overweight (max_values: None, max_size: None, mode: Measured) + /// Storage: Ump CounterForOverweight (r:1 w:1) + /// Proof: Ump CounterForOverweight (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + fn service_overweight() -> Weight { + // Proof Size summary in bytes: + // Measured: `257` + // Estimated: `5211` + // Minimum execution time: 23_348_000 picoseconds. + Weight::from_parts(23_785_000, 0) + .saturating_add(Weight::from_parts(0, 5211)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) + } +} diff --git a/runtime/polkadot/src/xcm_config.rs b/runtime/polkadot/src/xcm_config.rs index 39f7a337479a..4f817093703a 100644 --- a/runtime/polkadot/src/xcm_config.rs +++ b/runtime/polkadot/src/xcm_config.rs @@ -17,35 +17,39 @@ //! XCM configuration for Polkadot. use super::{ - parachains_origin, AccountId, Balances, CouncilCollective, ParaId, Runtime, RuntimeCall, - RuntimeEvent, RuntimeOrigin, WeightToFee, XcmPallet, + parachains_origin, AccountId, AllPalletsWithSystem, Balances, CouncilCollective, ParaId, + Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, WeightToFee, XcmPallet, }; use frame_support::{ match_types, parameter_types, - traits::{Everything, Nothing}, + traits::{Contains, Everything, Nothing}, + weights::Weight, }; -use runtime_common::{xcm_sender, ToAuthor}; +use runtime_common::{paras_registrar, xcm_sender, ToAuthor}; +use sp_core::ConstU32; use xcm::latest::prelude::*; use xcm_builder::{ AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, BackingToPlurality, ChildParachainAsNative, ChildParachainConvertsVia, CurrencyAdapter as XcmCurrencyAdapter, FixedWeightBounds, - IsConcrete, LocationInverter, SignedAccountId32AsNative, SignedToAccountId32, - SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, + IsConcrete, MintLocation, SignedAccountId32AsNative, SignedToAccountId32, + SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, WithComputedOrigin, }; +use xcm_executor::traits::WithOriginFilter; parameter_types! { /// The location of the DOT token, from the context of this chain. Since this token is native to this /// chain, we make it synonymous with it and thus it is the `Here` location, which means "equivalent to /// the context". - pub const DotLocation: MultiLocation = Here.into(); + pub const TokenLocation: MultiLocation = Here.into_location(); /// The Polkadot network ID. This is named. - pub const PolkadotNetwork: NetworkId = NetworkId::Polkadot; - /// Our XCM location ancestry - i.e. what, if anything, `Parent` means evaluated in our context. Since - /// Polkadot is a top-level relay-chain, there is no ancestry. - pub const Ancestry: MultiLocation = Here.into(); - /// The check account, which holds any native assets that have been teleported out and not back in (yet). + pub const ThisNetwork: NetworkId = NetworkId::Polkadot; + /// Our location in the universe of consensus systems. + pub const UniversalLocation: InteriorMultiLocation = X1(GlobalConsensus(ThisNetwork::get())); + /// The Checking Account, which holds any native assets that have been teleported out and not back in (yet). pub CheckAccount: AccountId = XcmPallet::check_account(); + /// The Checking Account along with the indication that the local chain is able to mint tokens. + pub LocalCheckAccount: (AccountId, MintLocation) = (CheckAccount::get(), MintLocation::Local); } /// The canonical means of converting a `MultiLocation` into an `AccountId`, used when we want to determine @@ -54,24 +58,24 @@ pub type SovereignAccountOf = ( // We can convert a child parachain using the standard `AccountId` conversion. ChildParachainConvertsVia, // We can directly alias an `AccountId32` into a local account. - AccountId32Aliases, + AccountId32Aliases, ); /// Our asset transactor. This is what allows us to interact with the runtime assets from the point of /// view of XCM-only concepts like `MultiLocation` and `MultiAsset`. /// -/// Ours is only aware of the Balances pallet, which is mapped to `DotLocation`. +/// Ours is only aware of the Balances pallet, which is mapped to `TokenLocation`. pub type LocalAssetTransactor = XcmCurrencyAdapter< // Use this currency: Balances, // Use this currency when it is a fungible asset matching the given location or name: - IsConcrete, + IsConcrete, // We can convert the MultiLocations with our converter above: SovereignAccountOf, // Our chain's account ID type (we can't get away without mentioning it explicitly): AccountId, // We track our teleports in/out to keep total issuance correct. - CheckAccount, + LocalCheckAccount, >; /// The means that we convert an XCM origin `MultiLocation` into the runtime's `Origin` type for @@ -86,12 +90,12 @@ type LocalOriginConverter = ( ChildParachainAsNative, // If the origin kind is `Native` and the XCM origin is the `AccountId32` location, then it can // be expressed using the `Signed` origin variant. - SignedAccountId32AsNative, + SignedAccountId32AsNative, ); parameter_types! { /// The amount of weight an XCM operation takes. This is a safe overestimate. - pub const BaseXcmWeight: u64 = 1_000_000_000; + pub const BaseXcmWeight: Weight = Weight::from_parts(1_000_000_000, 64 * 1024); /// Maximum number of instructions in a single XCM fragment. A sanity check against weight /// calculations getting too crazy. pub const MaxInstructions: u32 = 100; @@ -101,18 +105,19 @@ parameter_types! { /// individual routers. pub type XcmRouter = ( // Only one router so far - use DMP to communicate with child parachains. - xcm_sender::ChildParachainRouter, + xcm_sender::ChildParachainRouter, ); parameter_types! { - pub const Polkadot: MultiAssetFilter = Wild(AllOf { fun: WildFungible, id: Concrete(DotLocation::get()) }); - pub const PolkadotForStatemint: (MultiAssetFilter, MultiLocation) = (Polkadot::get(), Parachain(1000).into()); - pub const PolkadotForCollectives: (MultiAssetFilter, MultiLocation) = (Polkadot::get(), Parachain(1001).into()); + pub const Dot: MultiAssetFilter = Wild(AllOf { fun: WildFungible, id: Concrete(TokenLocation::get()) }); + pub const DotForStatemint: (MultiAssetFilter, MultiLocation) = (Dot::get(), Parachain(1000).into_location()); + pub const DotForCollectives: (MultiAssetFilter, MultiLocation) = (Dot::get(), Parachain(1001).into_location()); + pub const MaxAssetsIntoHolding: u32 = 64; } -/// Polkadot Relay recognizes/respects System parachains as teleporters. +/// Polkadot Relay recognizes/respects the Statemint chain as a teleporter. pub type TrustedTeleporters = - (xcm_builder::Case, xcm_builder::Case); + (xcm_builder::Case, xcm_builder::Case); match_types! { pub type OnlyParachains: impl Contains = { @@ -124,14 +129,183 @@ match_types! { pub type Barrier = ( // Weight that is paid for may be consumed. TakeWeightCredit, - // If the message is one that immediately attemps to pay for execution, then allow it. - AllowTopLevelPaidExecutionFrom, // Expected responses are OK. AllowKnownQueryResponses, - // Subscriptions for version tracking are OK. - AllowSubscriptionsFrom, + WithComputedOrigin< + ( + // If the message is one that immediately attemps to pay for execution, then allow it. + AllowTopLevelPaidExecutionFrom, + // Subscriptions for version tracking are OK. + AllowSubscriptionsFrom, + ), + UniversalLocation, + ConstU32<8>, + >, ); +/// A call filter for the XCM Transact instruction. This is a temporary measure until we +/// properly account for proof size weights. +/// +/// Calls that are allowed through this filter must: +/// 1. Have a fixed weight; +/// 2. Cannot lead to another call being made; +/// 3. Have a defined proof size weight, e.g. no unbounded vecs in call parameters. +pub struct SafeCallFilter; +impl Contains for SafeCallFilter { + fn contains(call: &RuntimeCall) -> bool { + #[cfg(feature = "runtime-benchmarks")] + { + if matches!(call, RuntimeCall::System(frame_system::Call::remark_with_event { .. })) { + return true + } + } + + match call { + RuntimeCall::System( + frame_system::Call::kill_prefix { .. } | frame_system::Call::set_heap_pages { .. }, + ) | + RuntimeCall::Babe(..) | + RuntimeCall::Timestamp(..) | + RuntimeCall::Indices(..) | + RuntimeCall::Balances(..) | + RuntimeCall::Staking( + pallet_staking::Call::bond { .. } | + pallet_staking::Call::bond_extra { .. } | + pallet_staking::Call::unbond { .. } | + pallet_staking::Call::withdraw_unbonded { .. } | + pallet_staking::Call::validate { .. } | + pallet_staking::Call::nominate { .. } | + pallet_staking::Call::chill { .. } | + pallet_staking::Call::set_payee { .. } | + pallet_staking::Call::set_controller { .. } | + pallet_staking::Call::set_validator_count { .. } | + pallet_staking::Call::increase_validator_count { .. } | + pallet_staking::Call::scale_validator_count { .. } | + pallet_staking::Call::force_no_eras { .. } | + pallet_staking::Call::force_new_era { .. } | + pallet_staking::Call::set_invulnerables { .. } | + pallet_staking::Call::force_unstake { .. } | + pallet_staking::Call::force_new_era_always { .. } | + pallet_staking::Call::payout_stakers { .. } | + pallet_staking::Call::rebond { .. } | + pallet_staking::Call::reap_stash { .. } | + pallet_staking::Call::set_staking_configs { .. } | + pallet_staking::Call::chill_other { .. } | + pallet_staking::Call::force_apply_min_commission { .. }, + ) | + RuntimeCall::Session(pallet_session::Call::purge_keys { .. }) | + RuntimeCall::Grandpa(..) | + RuntimeCall::ImOnline(..) | + RuntimeCall::Democracy( + pallet_democracy::Call::second { .. } | + pallet_democracy::Call::vote { .. } | + pallet_democracy::Call::emergency_cancel { .. } | + pallet_democracy::Call::fast_track { .. } | + pallet_democracy::Call::veto_external { .. } | + pallet_democracy::Call::cancel_referendum { .. } | + pallet_democracy::Call::delegate { .. } | + pallet_democracy::Call::undelegate { .. } | + pallet_democracy::Call::clear_public_proposals { .. } | + pallet_democracy::Call::unlock { .. } | + pallet_democracy::Call::remove_vote { .. } | + pallet_democracy::Call::remove_other_vote { .. } | + pallet_democracy::Call::blacklist { .. } | + pallet_democracy::Call::cancel_proposal { .. }, + ) | + RuntimeCall::Council( + pallet_collective::Call::vote { .. } | + pallet_collective::Call::close_old_weight { .. } | + pallet_collective::Call::disapprove_proposal { .. } | + pallet_collective::Call::close { .. }, + ) | + RuntimeCall::TechnicalCommittee( + pallet_collective::Call::vote { .. } | + pallet_collective::Call::close_old_weight { .. } | + pallet_collective::Call::disapprove_proposal { .. } | + pallet_collective::Call::close { .. }, + ) | + RuntimeCall::PhragmenElection( + pallet_elections_phragmen::Call::remove_voter { .. } | + pallet_elections_phragmen::Call::submit_candidacy { .. } | + pallet_elections_phragmen::Call::renounce_candidacy { .. } | + pallet_elections_phragmen::Call::remove_member { .. } | + pallet_elections_phragmen::Call::clean_defunct_voters { .. }, + ) | + RuntimeCall::TechnicalMembership( + pallet_membership::Call::add_member { .. } | + pallet_membership::Call::remove_member { .. } | + pallet_membership::Call::swap_member { .. } | + pallet_membership::Call::change_key { .. } | + pallet_membership::Call::set_prime { .. } | + pallet_membership::Call::clear_prime { .. }, + ) | + RuntimeCall::Treasury(..) | + RuntimeCall::Claims( + super::claims::Call::claim { .. } | + super::claims::Call::mint_claim { .. } | + super::claims::Call::move_claim { .. }, + ) | + RuntimeCall::Utility(pallet_utility::Call::as_derivative { .. }) | + RuntimeCall::Identity( + pallet_identity::Call::add_registrar { .. } | + pallet_identity::Call::set_identity { .. } | + pallet_identity::Call::clear_identity { .. } | + pallet_identity::Call::request_judgement { .. } | + pallet_identity::Call::cancel_request { .. } | + pallet_identity::Call::set_fee { .. } | + pallet_identity::Call::set_account_id { .. } | + pallet_identity::Call::set_fields { .. } | + pallet_identity::Call::provide_judgement { .. } | + pallet_identity::Call::kill_identity { .. } | + pallet_identity::Call::add_sub { .. } | + pallet_identity::Call::rename_sub { .. } | + pallet_identity::Call::remove_sub { .. } | + pallet_identity::Call::quit_sub { .. }, + ) | + RuntimeCall::Vesting(..) | + RuntimeCall::Bounties( + pallet_bounties::Call::propose_bounty { .. } | + pallet_bounties::Call::approve_bounty { .. } | + pallet_bounties::Call::propose_curator { .. } | + pallet_bounties::Call::unassign_curator { .. } | + pallet_bounties::Call::accept_curator { .. } | + pallet_bounties::Call::award_bounty { .. } | + pallet_bounties::Call::claim_bounty { .. } | + pallet_bounties::Call::close_bounty { .. }, + ) | + RuntimeCall::ChildBounties(..) | + RuntimeCall::ElectionProviderMultiPhase(..) | + RuntimeCall::VoterList(..) | + RuntimeCall::NominationPools( + pallet_nomination_pools::Call::join { .. } | + pallet_nomination_pools::Call::bond_extra { .. } | + pallet_nomination_pools::Call::claim_payout { .. } | + pallet_nomination_pools::Call::unbond { .. } | + pallet_nomination_pools::Call::pool_withdraw_unbonded { .. } | + pallet_nomination_pools::Call::withdraw_unbonded { .. } | + pallet_nomination_pools::Call::create { .. } | + pallet_nomination_pools::Call::create_with_pool_id { .. } | + pallet_nomination_pools::Call::set_state { .. } | + pallet_nomination_pools::Call::set_configs { .. } | + pallet_nomination_pools::Call::update_roles { .. } | + pallet_nomination_pools::Call::chill { .. }, + ) | + RuntimeCall::Hrmp(..) | + RuntimeCall::Registrar( + paras_registrar::Call::deregister { .. } | + paras_registrar::Call::swap { .. } | + paras_registrar::Call::remove_lock { .. } | + paras_registrar::Call::reserve { .. } | + paras_registrar::Call::add_lock { .. }, + ) | + RuntimeCall::XcmPallet(pallet_xcm::Call::limited_reserve_transfer_assets { + .. + }) => true, + _ => false, + } + } +} + pub struct XcmConfig; impl xcm_executor::Config for XcmConfig { type RuntimeCall = RuntimeCall; @@ -141,21 +315,35 @@ impl xcm_executor::Config for XcmConfig { // Polkadot Relay recognises no chains which act as reserves. type IsReserve = (); type IsTeleporter = TrustedTeleporters; - type LocationInverter = LocationInverter; + type UniversalLocation = UniversalLocation; type Barrier = Barrier; type Weigher = FixedWeightBounds; // The weight trader piggybacks on the existing transaction-fee conversion logic. - type Trader = UsingComponents>; + type Trader = + UsingComponents>; type ResponseHandler = XcmPallet; type AssetTrap = XcmPallet; + type AssetLocker = (); + type AssetExchanger = (); type AssetClaims = XcmPallet; type SubscriptionService = XcmPallet; + type PalletInstancesInfo = AllPalletsWithSystem; + type MaxAssetsIntoHolding = MaxAssetsIntoHolding; + type FeeManager = (); + // No bridges yet... + type MessageExporter = (); + type UniversalAliases = Nothing; + type CallDispatcher = WithOriginFilter; + type SafeCallFilter = SafeCallFilter; } parameter_types! { pub const CouncilBodyId: BodyId = BodyId::Executive; - // We are conservative with the XCM version we advertize. - pub const AdvertisedXcmVersion: u32 = 2; +} + +#[cfg(feature = "runtime-benchmarks")] +parameter_types! { + pub ReachableDest: Option = Some(Parachain(1000).into()); } /// Type to convert a council origin to a Plurality `MultiLocation` value. @@ -172,7 +360,7 @@ pub type LocalOriginToLocation = ( // `Unit` body. CouncilToPlurality, // And a usual Signed origin to be used in XCM as a corresponding AccountId32 - SignedToAccountId32, + SignedToAccountId32, ); impl pallet_xcm::Config for Runtime { @@ -188,9 +376,17 @@ impl pallet_xcm::Config for Runtime { type XcmTeleportFilter = Everything; // == Allow All type XcmReserveTransferFilter = Everything; // == Allow All type Weigher = FixedWeightBounds; - type LocationInverter = LocationInverter; + type UniversalLocation = UniversalLocation; type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; - type AdvertisedXcmVersion = AdvertisedXcmVersion; + type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; + type Currency = Balances; + type CurrencyMatcher = (); + type TrustedLockers = (); + type SovereignAccountOf = SovereignAccountOf; + type MaxLockers = ConstU32<8>; + type WeightInfo = crate::weights::pallet_xcm::WeightInfo; + #[cfg(feature = "runtime-benchmarks")] + type ReachableDest = ReachableDest; } diff --git a/runtime/rococo/Cargo.toml b/runtime/rococo/Cargo.toml index 7f3245528c42..208729a96c52 100644 --- a/runtime/rococo/Cargo.toml +++ b/runtime/rococo/Cargo.toml @@ -6,78 +6,79 @@ authors.workspace = true edition.workspace = true [dependencies] -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["derive", "max-encoded-len"] } +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["derive", "max-encoded-len"] } scale-info = { version = "2.1.2", default-features = false, features = ["derive"] } log = { version = "0.4.17", default-features = false } -serde = { version = "1.0.137", default-features = false } +serde = { version = "1.0.139", default-features = false } serde_derive = { version = "1.0.117", optional = true } static_assertions = "1.1.0" smallvec = "1.8.0" -authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -beefy-primitives = { git = "https://github.com/paritytech/substrate", default-features = false, package = "sp-beefy" , branch = "polkadot-v0.9.36" } -beefy-merkle-tree = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +beefy-primitives = { package = "sp-consensus-beefy", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +binary-merkle-tree = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } rococo-runtime-constants = { package = "rococo-runtime-constants", path = "./constants", default-features = false } -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -offchain-primitives = { package = "sp-offchain", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-std = { package = "sp-std", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-mmr-primitives = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -tx-pool-api = { package = "sp-transaction-pool", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -block-builder-api = { package = "sp-block-builder", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +offchain-primitives = { package = "sp-offchain", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-std = { package = "sp-std", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-mmr-primitives = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +tx-pool-api = { package = "sp-transaction-pool", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +block-builder-api = { package = "sp-block-builder", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } -pallet-authority-discovery = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-babe = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-beefy = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-beefy-mmr = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-bounties = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-child-bounties = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-state-trie-migration = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-collective = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-democracy = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-elections-phragmen = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-grandpa = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-identity = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-im-online = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-indices = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-membership = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-mmr = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-nis = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-offences = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-preimage = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-proxy = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-recovery = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-scheduler = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-society = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-system = {git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-tips = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-treasury = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-vesting = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +pallet-authority-discovery = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-babe = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-beefy = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-beefy-mmr = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-bounties = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-child-bounties = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-state-trie-migration = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-collective = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-democracy = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-elections-phragmen = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-grandpa = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-identity = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-im-online = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-indices = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-membership = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-mmr = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-nis = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-offences = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-preimage = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-proxy = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-recovery = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-scheduler = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-society = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-system = {git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-tips = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-treasury = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-vesting = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } pallet-xcm = { path = "../../xcm/pallet-xcm", default-features = false } pallet-xcm-benchmarks = { path = "../../xcm/pallet-xcm-benchmarks", default-features = false, optional = true } -frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } -frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } +frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } +frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } hex-literal = { version = "0.3.4" } runtime-common = { package = "polkadot-runtime-common", path = "../common", default-features = false } @@ -91,13 +92,16 @@ xcm-builder = { package = "xcm-builder", path = "../../xcm/xcm-builder", default [dev-dependencies] tiny-keccak = { version = "2.0.2", features = ["keccak"] } -keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-trie = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +remote-externalities = { git = "https://github.com/paritytech/substrate", package = "frame-remote-externalities" , branch = "polkadot-v0.9.40" } +sp-trie = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } separator = "0.4.1" serde_json = "1.0.81" +sp-tracing = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +tokio = { version = "1.24.2", features = ["macros"] } [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } [features] default = ["std"] @@ -168,6 +172,7 @@ std = [ "sp-session/std", "runtime-common/std", "runtime-parachains/std", + "frame-try-runtime/std", "beefy-primitives/std", "rococo-runtime-constants/std", "xcm/std", @@ -214,10 +219,14 @@ runtime-benchmarks = [ ] try-runtime = [ "frame-executive/try-runtime", + "frame-try-runtime", "frame-system/try-runtime", "pallet-authority-discovery/try-runtime", "pallet-authorship/try-runtime", "pallet-balances/try-runtime", + "pallet-babe/try-runtime", + "pallet-beefy/try-runtime", + "pallet-beefy-mmr/try-runtime", "pallet-bounties/try-runtime", "pallet-child-bounties/try-runtime", "pallet-transaction-payment/try-runtime", @@ -229,7 +238,9 @@ try-runtime = [ "pallet-im-online/try-runtime", "pallet-indices/try-runtime", "pallet-membership/try-runtime", + "pallet-mmr/try-runtime", "pallet-multisig/try-runtime", + "pallet-nis/try-runtime", "pallet-offences/try-runtime", "pallet-preimage/try-runtime", "pallet-proxy/try-runtime", @@ -239,13 +250,15 @@ try-runtime = [ "pallet-society/try-runtime", "pallet-sudo/try-runtime", "pallet-staking/try-runtime", + "pallet-state-trie-migration/try-runtime", "pallet-timestamp/try-runtime", "pallet-tips/try-runtime", "pallet-treasury/try-runtime", "pallet-utility/try-runtime", "pallet-vesting/try-runtime", - "pallet-babe/try-runtime", + "pallet-xcm/try-runtime", "runtime-common/try-runtime", + "runtime-parachains/try-runtime", ] # When enabled, the runtime API will not be build. # diff --git a/runtime/rococo/constants/Cargo.toml b/runtime/rococo/constants/Cargo.toml index b2c71830bc32..2ab46e78c7c8 100644 --- a/runtime/rococo/constants/Cargo.toml +++ b/runtime/rococo/constants/Cargo.toml @@ -7,16 +7,19 @@ edition.workspace = true [dependencies] smallvec = "1.8.0" -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } primitives = { package = "polkadot-primitives", path = "../../../primitives", default-features = false } runtime-common = { package = "polkadot-runtime-common", path = "../../common", default-features = false } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-weights = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-weights = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } [features] default = ["std"] std = [ + "frame-support/std", + "primitives/std", + "runtime-common/std", "sp-core/std", "sp-runtime/std", "sp-weights/std" diff --git a/runtime/rococo/constants/src/lib.rs b/runtime/rococo/constants/src/lib.rs index 7893cada961d..0683bc377e13 100644 --- a/runtime/rococo/constants/src/lib.rs +++ b/runtime/rococo/constants/src/lib.rs @@ -20,7 +20,7 @@ pub mod weights; /// Money matters. pub mod currency { - use primitives::v2::Balance; + use primitives::Balance; /// The existential deposit. pub const EXISTENTIAL_DEPOSIT: Balance = 1 * CENTS; @@ -37,7 +37,7 @@ pub mod currency { /// Time and blocks. pub mod time { - use primitives::v2::{BlockNumber, Moment}; + use primitives::{BlockNumber, Moment}; use runtime_common::prod_or_fast; pub const MILLISECS_PER_BLOCK: Moment = 6000; pub const SLOT_DURATION: Moment = MILLISECS_PER_BLOCK; @@ -65,7 +65,7 @@ pub mod fee { use frame_support::weights::{ WeightToFeeCoefficient, WeightToFeeCoefficients, WeightToFeePolynomial, }; - use primitives::v2::Balance; + use primitives::Balance; use smallvec::smallvec; pub use sp_runtime::Perbill; diff --git a/runtime/rococo/constants/src/weights/block_weights.rs b/runtime/rococo/constants/src/weights/block_weights.rs index d16f4082da13..2e82609143ba 100644 --- a/runtime/rococo/constants/src/weights/block_weights.rs +++ b/runtime/rococo/constants/src/weights/block_weights.rs @@ -14,8 +14,8 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16 (Y/M/D) -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16 (Y/M/D) +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! //! SHORT-NAME: `block`, LONG-NAME: `BlockExecution`, RUNTIME: `Development` //! WARMUPS: `10`, REPEAT: `100` @@ -42,17 +42,17 @@ parameter_types! { /// Calculated by multiplying the *Average* with `1.0` and adding `0`. /// /// Stats nanoseconds: - /// Min, Max: 448_169, 501_847 - /// Average: 458_063 - /// Median: 451_532 - /// Std-Dev: 12761.42 + /// Min, Max: 482_781, 561_231 + /// Average: 488_493 + /// Median: 485_598 + /// Std-Dev: 10611.98 /// /// Percentiles nanoseconds: - /// 99th: 492_121 - /// 95th: 482_566 - /// 75th: 457_121 + /// 99th: 524_803 + /// 95th: 514_096 + /// 75th: 487_488 pub const BlockExecutionWeight: Weight = - Weight::from_ref_time(WEIGHT_REF_TIME_PER_NANOS.saturating_mul(458_063)); + Weight::from_parts(WEIGHT_REF_TIME_PER_NANOS.saturating_mul(488_493), 0); } #[cfg(test)] diff --git a/runtime/rococo/constants/src/weights/extrinsic_weights.rs b/runtime/rococo/constants/src/weights/extrinsic_weights.rs index 632404657fdf..ed41c0bbf583 100644 --- a/runtime/rococo/constants/src/weights/extrinsic_weights.rs +++ b/runtime/rococo/constants/src/weights/extrinsic_weights.rs @@ -14,8 +14,8 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16 (Y/M/D) -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16 (Y/M/D) +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! //! SHORT-NAME: `extrinsic`, LONG-NAME: `ExtrinsicBase`, RUNTIME: `Development` //! WARMUPS: `10`, REPEAT: `100` @@ -42,17 +42,17 @@ parameter_types! { /// Calculated by multiplying the *Average* with `1.0` and adding `0`. /// /// Stats nanoseconds: - /// Min, Max: 88_825, 91_178 - /// Average: 89_399 - /// Median: 89_384 - /// Std-Dev: 376.08 + /// Min, Max: 96_243, 101_429 + /// Average: 96_710 + /// Median: 96_549 + /// Std-Dev: 641.99 /// /// Percentiles nanoseconds: - /// 99th: 90_800 - /// 95th: 90_033 - /// 75th: 89_476 + /// 99th: 99_714 + /// 95th: 97_508 + /// 75th: 96_663 pub const ExtrinsicBaseWeight: Weight = - Weight::from_ref_time(WEIGHT_REF_TIME_PER_NANOS.saturating_mul(89_399)); + Weight::from_parts(WEIGHT_REF_TIME_PER_NANOS.saturating_mul(96_710), 0); } #[cfg(test)] diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index 6100ae0c9fac..705e2f348c13 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -22,12 +22,12 @@ use pallet_nis::WithMaximumOf; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; -use primitives::v2::{ - AccountId, AccountIndex, Balance, BlockNumber, CandidateEvent, CandidateHash, - CommittedCandidateReceipt, CoreState, DisputeState, GroupRotationInfo, Hash, Id as ParaId, - InboundDownwardMessage, InboundHrmpMessage, Moment, Nonce, OccupiedCoreAssumption, - PersistedValidationData, ScrapedOnChainVotes, SessionInfo, Signature, ValidationCode, - ValidationCodeHash, ValidatorId, ValidatorIndex, +use primitives::{ + vstaging::ExecutorParams, AccountId, AccountIndex, Balance, BlockNumber, CandidateEvent, + CandidateHash, CommittedCandidateReceipt, CoreState, DisputeState, GroupRotationInfo, Hash, + Id as ParaId, InboundDownwardMessage, InboundHrmpMessage, Moment, Nonce, + OccupiedCoreAssumption, PersistedValidationData, ScrapedOnChainVotes, SessionInfo, Signature, + ValidationCode, ValidationCodeHash, ValidatorId, ValidatorIndex, }; use runtime_common::{ assigned_slots, auctions, claims, crowdloan, impl_runtime_weights, impls::ToAuthor, @@ -38,17 +38,20 @@ use sp_std::{cmp::Ordering, collections::btree_map::BTreeMap, prelude::*}; use runtime_parachains::{ configuration as parachains_configuration, disputes as parachains_disputes, - disputes::slashing as parachains_slashing, dmp as parachains_dmp, hrmp as parachains_hrmp, - inclusion as parachains_inclusion, initializer as parachains_initializer, - origin as parachains_origin, paras as parachains_paras, + disputes::slashing as parachains_slashing, + dmp as parachains_dmp, hrmp as parachains_hrmp, inclusion as parachains_inclusion, + initializer as parachains_initializer, origin as parachains_origin, paras as parachains_paras, paras_inherent as parachains_paras_inherent, - runtime_api_impl::v2 as parachains_runtime_api_impl, scheduler as parachains_scheduler, - session_info as parachains_session_info, shared as parachains_shared, ump as parachains_ump, + runtime_api_impl::{ + v2 as parachains_runtime_api_impl, vstaging as parachains_runtime_api_impl_staging, + }, + scheduler as parachains_scheduler, session_info as parachains_session_info, + shared as parachains_shared, ump as parachains_ump, }; use authority_discovery_primitives::AuthorityId as AuthorityDiscoveryId; use beefy_primitives::{ - crypto::AuthorityId as BeefyId, + crypto::{AuthorityId as BeefyId, Signature as BeefySignature}, mmr::{BeefyDataProvider, MmrLeafVersion}, }; @@ -109,13 +112,13 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("rococo"), impl_name: create_runtime_str!("parity-rococo-v2.0"), authoring_version: 0, - spec_version: 9360, + spec_version: 9400, impl_version: 0, #[cfg(not(feature = "disable-runtime-api"))] apis: RUNTIME_API_VERSIONS, #[cfg(feature = "disable-runtime-api")] apis: sp_version::create_apis_vec![[]], - transaction_version: 17, + transaction_version: 20, state_version: 1, }; @@ -242,30 +245,15 @@ parameter_types! { impl pallet_babe::Config for Runtime { type EpochDuration = EpochDurationInBlocks; type ExpectedBlockTime = ExpectedBlockTime; - // session module is the trigger type EpochChangeTrigger = pallet_babe::ExternalTrigger; - type DisabledValidators = Session; - - type KeyOwnerProof = >::Proof; - - type KeyOwnerIdentification = >::IdentificationTuple; - - type KeyOwnerProofSystem = Historical; - - type HandleEquivocation = - pallet_babe::EquivocationHandler; - type WeightInfo = (); - type MaxAuthorities = MaxAuthorities; + type KeyOwnerProof = + >::Proof; + type EquivocationReportSystem = + pallet_babe::EquivocationReportSystem; } parameter_types! { @@ -324,14 +312,8 @@ impl pallet_timestamp::Config for Runtime { type WeightInfo = weights::pallet_timestamp::WeightInfo; } -parameter_types! { - pub const UncleGenerations: u32 = 0; -} - impl pallet_authorship::Config for Runtime { type FindAuthor = pallet_session::FindAccountFromAuthorIndex; - type UncleGenerations = UncleGenerations; - type FilterUncle = (); type EventHandler = ImOnline; } @@ -404,6 +386,7 @@ impl pallet_democracy::Config for Runtime { type LaunchPeriod = LaunchPeriod; type VotingPeriod = VotingPeriod; type MinimumDeposit = MinimumDeposit; + type SubmitOrigin = frame_system::EnsureSigned; /// A straight majority of the council can decide what their next motion is. type ExternalOrigin = pallet_collective::EnsureProportionAtLeast; @@ -464,6 +447,7 @@ impl pallet_collective::Config for Runtime { type MaxProposals = CouncilMaxProposals; type MaxMembers = CouncilMaxMembers; type DefaultVote = pallet_collective::PrimeDefaultVote; + type SetMembersOrigin = EnsureRoot; type WeightInfo = weights::pallet_collective_council::WeightInfo; } @@ -478,6 +462,7 @@ parameter_types! { pub const DesiredMembers: u32 = 19; pub const DesiredRunnersUp: u32 = 19; pub const MaxVoters: u32 = 10 * 1000; + pub const MaxVotesPerVoter: u32 = 16; pub const MaxCandidates: u32 = 1000; pub const PhragmenElectionPalletId: LockIdentifier = *b"phrelect"; } @@ -500,6 +485,7 @@ impl pallet_elections_phragmen::Config for Runtime { type DesiredRunnersUp = DesiredRunnersUp; type TermDuration = TermDuration; type MaxVoters = MaxVoters; + type MaxVotesPerVoter = MaxVotesPerVoter; type MaxCandidates = MaxCandidates; type PalletId = PhragmenElectionPalletId; type WeightInfo = weights::pallet_elections_phragmen::WeightInfo; @@ -520,6 +506,7 @@ impl pallet_collective::Config for Runtime { type MaxProposals = TechnicalMaxProposals; type MaxMembers = TechnicalMaxMembers; type DefaultVote = pallet_collective::PrimeDefaultVote; + type SetMembersOrigin = EnsureRoot; type WeightInfo = weights::pallet_collective_technical_committee::WeightInfo; } @@ -660,27 +647,18 @@ impl pallet_im_online::Config for Runtime { type MaxPeerDataEncodingSize = MaxPeerDataEncodingSize; } +parameter_types! { + pub const MaxSetIdSessionEntries: u32 = BondingDuration::get() * SessionsPerEra::get(); +} + impl pallet_grandpa::Config for Runtime { type RuntimeEvent = RuntimeEvent; - - type KeyOwnerProof = - >::Proof; - - type KeyOwnerIdentification = >::IdentificationTuple; - - type KeyOwnerProofSystem = Historical; - - type HandleEquivocation = pallet_grandpa::EquivocationHandler< - Self::KeyOwnerIdentification, - Offences, - ReportLongevity, - >; - type WeightInfo = (); type MaxAuthorities = MaxAuthorities; + type MaxSetIdSessionEntries = MaxSetIdSessionEntries; + type KeyOwnerProof = >::Proof; + type EquivocationReportSystem = + pallet_grandpa::EquivocationReportSystem; } /// Submits a transaction with the node's public and signature type. Adheres to the signed extension @@ -925,7 +903,6 @@ impl InstanceFilter for ProxyType { RuntimeCall::Indices(pallet_indices::Call::freeze {..}) | // Specifically omitting Indices `transfer`, `force_transfer` // Specifically omitting the entire Balances pallet - RuntimeCall::Authorship(..) | RuntimeCall::Session(..) | RuntimeCall::Grandpa(..) | RuntimeCall::ImOnline(..) | @@ -1215,6 +1192,7 @@ parameter_types! { pub const ThawThrottle: (Perquintill, BlockNumber) = (Perquintill::from_percent(25), 5); pub storage NisTarget: Perquintill = Perquintill::zero(); pub const NisPalletId: PalletId = PalletId(*b"py/nis "); + pub const NisReserveId: [u8; 8] = *b"py/nis "; } impl pallet_nis::Config for Runtime { @@ -1238,12 +1216,22 @@ impl pallet_nis::Config for Runtime { type IntakePeriod = IntakePeriod; type MaxIntakeWeight = MaxIntakeWeight; type ThawThrottle = ThawThrottle; + type ReserveId = NisReserveId; +} + +parameter_types! { + pub const BeefySetIdSessionEntries: u32 = BondingDuration::get() * SessionsPerEra::get(); } impl pallet_beefy::Config for Runtime { type BeefyId = BeefyId; type MaxAuthorities = MaxAuthorities; + type MaxSetIdSessionEntries = BeefySetIdSessionEntries; type OnNewValidatorSet = MmrLeaf; + type WeightInfo = (); + type KeyOwnerProof = >::Proof; + type EquivocationReportSystem = + pallet_beefy::EquivocationReportSystem; } type MmrHash = ::Output; @@ -1282,7 +1270,7 @@ impl BeefyDataProvider for ParasProvider { .filter_map(|id| Paras::para_head(&id).map(|head| (id.into(), head.0))) .collect(); para_heads.sort(); - beefy_merkle_tree::merkle_root::<::Hashing, _>( + binary_merkle_tree::merkle_root::<::Hashing, _>( para_heads.into_iter().map(|pair| pair.encode()), ) .into() @@ -1330,7 +1318,7 @@ impl pallet_sudo::Config for Runtime { construct_runtime! { pub enum Runtime where Block = Block, - NodeBlock = primitives::v2::Block, + NodeBlock = primitives::Block, UncheckedExtrinsic = UncheckedExtrinsic { // Basic stuff; balances is uncallable initially. @@ -1347,9 +1335,12 @@ construct_runtime! { // Consensus support. // Authorship must be before session in order to note author in the correct session and era // for im-online. - Authorship: pallet_authorship::{Pallet, Call, Storage} = 5, + Authorship: pallet_authorship::{Pallet, Storage} = 5, Offences: pallet_offences::{Pallet, Storage, Event} = 7, Historical: session_historical::{Pallet} = 34, + // MMR leaf construction must be before session in order to have leaf contents + // refer to block consistently. see substrate issue #11797 for details. + Mmr: pallet_mmr::{Pallet, Storage} = 241, Session: pallet_session::{Pallet, Call, Storage, Event, Config} = 8, Grandpa: pallet_grandpa::{Pallet, Call, Storage, Config, Event, ValidateUnsigned} = 10, ImOnline: pallet_im_online::{Pallet, Call, Storage, Event, ValidateUnsigned, Config} = 11, @@ -1433,8 +1424,7 @@ construct_runtime! { // Rococo specific pallets (not included in Kusama). Start indices at 240 // // BEEFY Bridges support. - Beefy: pallet_beefy::{Pallet, Storage, Config} = 240, - Mmr: pallet_mmr::{Pallet, Storage} = 241, + Beefy: pallet_beefy::{Pallet, Call, Storage, Config, ValidateUnsigned} = 240, MmrLeaf: pallet_beefy_mmr::{Pallet, Storage} = 242, ParasSudoWrapper: paras_sudo_wrapper::{Pallet, Call} = 250, @@ -1477,6 +1467,9 @@ pub type SignedExtra = ( pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; +/// All migrations that will run on the next runtime upgrade. +/// +/// Should be cleared after every release. pub type Migrations = (); /// Executive: handles dispatch to the various modules. @@ -1565,6 +1558,7 @@ mod benches { [pallet_utility, Utility] [pallet_vesting, Vesting] // XCM + [pallet_xcm, XcmPallet] [pallet_xcm_benchmarks::fungible, pallet_xcm_benchmarks::fungible::Pallet::] [pallet_xcm_benchmarks::generic, pallet_xcm_benchmarks::generic::Pallet::] ); @@ -1631,7 +1625,7 @@ sp_api::impl_runtime_apis! { } } - #[api_version(3)] + #[api_version(4)] impl primitives::runtime_api::ParachainHost for Runtime { fn validators() -> Vec { parachains_runtime_api_impl::validators::() @@ -1662,7 +1656,7 @@ sp_api::impl_runtime_apis! { fn check_validation_outputs( para_id: ParaId, - outputs: primitives::v2::CandidateCommitments, + outputs: primitives::CandidateCommitments, ) -> bool { parachains_runtime_api_impl::check_validation_outputs::(para_id, outputs) } @@ -1695,6 +1689,10 @@ sp_api::impl_runtime_apis! { parachains_runtime_api_impl::session_info::(index) } + fn session_executor_params(session_index: SessionIndex) -> Option { + parachains_runtime_api_impl_staging::session_executor_params::(session_index) + } + fn dmq_contents(recipient: ParaId) -> Vec> { parachains_runtime_api_impl::dmq_contents::(recipient) } @@ -1714,8 +1712,8 @@ sp_api::impl_runtime_apis! { } fn submit_pvf_check_statement( - stmt: primitives::v2::PvfCheckStatement, - signature: primitives::v2::ValidatorSignature + stmt: primitives::PvfCheckStatement, + signature: primitives::ValidatorSignature ) { parachains_runtime_api_impl::submit_pvf_check_statement::(stmt, signature) } @@ -1735,12 +1733,45 @@ sp_api::impl_runtime_apis! { } } + #[api_version(2)] impl beefy_primitives::BeefyApi for Runtime { + fn beefy_genesis() -> Option { + Beefy::genesis_block() + } + fn validator_set() -> Option> { Beefy::validator_set() } + + fn submit_report_equivocation_unsigned_extrinsic( + equivocation_proof: beefy_primitives::EquivocationProof< + BlockNumber, + BeefyId, + BeefySignature, + >, + key_owner_proof: beefy_primitives::OpaqueKeyOwnershipProof, + ) -> Option<()> { + let key_owner_proof = key_owner_proof.decode()?; + + Beefy::submit_unsigned_equivocation_report( + equivocation_proof, + key_owner_proof, + ) + } + + fn generate_key_ownership_proof( + _set_id: beefy_primitives::ValidatorSetId, + authority_id: BeefyId, + ) -> Option { + use parity_scale_codec::Encode; + + Historical::prove((beefy_primitives::KEY_TYPE, authority_id)) + .map(|p| p.encode()) + .map(beefy_primitives::OpaqueKeyOwnershipProof::new) + } } + #[api_version(2)] impl mmr::MmrApi for Runtime { fn mmr_root() -> Result { Ok(Mmr::mmr_root()) @@ -1907,9 +1938,15 @@ sp_api::impl_runtime_apis! { fn query_fee_details(uxt: ::Extrinsic, len: u32) -> FeeDetails { TransactionPayment::query_fee_details(uxt, len) } + fn query_weight_to_fee(weight: Weight) -> Balance { + TransactionPayment::weight_to_fee(weight) + } + fn query_length_to_fee(length: u32) -> Balance { + TransactionPayment::length_to_fee(length) + } } - impl beefy_merkle_tree::BeefyMmrApi for RuntimeApi { + impl pallet_beefy_mmr::BeefyMmrApi for RuntimeApi { fn authority_set_proof() -> beefy_primitives::mmr::BeefyAuthoritySet { MmrLeaf::authority_set_proof() } @@ -1919,6 +1956,26 @@ sp_api::impl_runtime_apis! { } } + #[cfg(feature = "try-runtime")] + impl frame_try_runtime::TryRuntime for Runtime { + fn on_runtime_upgrade(checks: frame_try_runtime::UpgradeCheckSelect) -> (Weight, Weight) { + log::info!("try-runtime::on_runtime_upgrade rococo."); + let weight = Executive::try_runtime_upgrade(checks).unwrap(); + (weight, BlockWeights::get().max_block) + } + + fn execute_block( + block: Block, + state_root_check: bool, + signature_check: bool, + select: frame_try_runtime::TryStateSelect, + ) -> Weight { + // NOTE: intentional unwrap: we don't want to propagate the error backwards, and want to + // have a backtrace here. + Executive::try_execute_block(block, state_root_check, signature_check, select).unwrap() + } + } + #[cfg(feature = "runtime-benchmarks")] impl frame_benchmarking::Benchmark for Runtime { fn benchmark_metadata(extra: bool) -> ( @@ -1948,20 +2005,22 @@ sp_api::impl_runtime_apis! { use frame_system_benchmarking::Pallet as SystemBench; use frame_benchmarking::baseline::Pallet as Baseline; use xcm::latest::prelude::*; - use xcm_config::{CheckAccount, RocLocation, SovereignAccountOf, Statemine, XcmConfig}; + use xcm_config::{ + LocalCheckAccount, LocationConverter, Statemine, TokenLocation, XcmConfig, + }; impl frame_system_benchmarking::Config for Runtime {} impl frame_benchmarking::baseline::Config for Runtime {} impl pallet_xcm_benchmarks::Config for Runtime { type XcmConfig = XcmConfig; - type AccountIdConverter = SovereignAccountOf; + type AccountIdConverter = LocationConverter; fn valid_destination() -> Result { Ok(Statemine::get()) } - fn worst_case_holding() -> MultiAssets { + fn worst_case_holding(_depositable_count: u32) -> MultiAssets { // Rococo only knows about ROC vec![MultiAsset{ - id: Concrete(RocLocation::get()), + id: Concrete(TokenLocation::get()), fun: Fungible(1_000_000 * UNITS), }].into() } @@ -1970,24 +2029,23 @@ sp_api::impl_runtime_apis! { parameter_types! { pub const TrustedTeleporter: Option<(MultiLocation, MultiAsset)> = Some(( Statemine::get(), - MultiAsset { fun: Fungible(1 * UNITS), id: Concrete(RocLocation::get()) }, + MultiAsset { fun: Fungible(1 * UNITS), id: Concrete(TokenLocation::get()) }, )); pub const TrustedReserve: Option<(MultiLocation, MultiAsset)> = Some(( Statemine::get(), - MultiAsset { fun: Fungible(1 * UNITS), id: Concrete(RocLocation::get()) }, + MultiAsset { fun: Fungible(1 * UNITS), id: Concrete(TokenLocation::get()) }, )); } impl pallet_xcm_benchmarks::fungible::Config for Runtime { type TransactAsset = Balances; - type CheckedAccount = CheckAccount; + type CheckedAccount = LocalCheckAccount; type TrustedTeleporter = TrustedTeleporter; - type TrustedReserve = TrustedReserve; fn get_multi_asset() -> MultiAsset { MultiAsset { - id: Concrete(RocLocation::get()), + id: Concrete(TokenLocation::get()), fun: Fungible(1 * UNITS), } } @@ -2000,8 +2058,18 @@ sp_api::impl_runtime_apis! { (0u64, Response::Version(Default::default())) } - fn transact_origin() -> Result { - Ok(Statemine::get()) + fn worst_case_asset_exchange() -> Result<(MultiAssets, MultiAssets), BenchmarkError> { + // Rococo doesn't support asset exchanges + Err(BenchmarkError::Skip) + } + + fn universal_alias() -> Result { + // The XCM executor of Rococo doesn't have a configured `UniversalAliases` + Err(BenchmarkError::Skip) + } + + fn transact_origin_and_runtime_call() -> Result<(MultiLocation, RuntimeCall), BenchmarkError> { + Ok((Statemine::get(), frame_system::Call::remark_with_event { remark: vec![] }.into())) } fn subscribe_origin() -> Result { @@ -2010,10 +2078,15 @@ sp_api::impl_runtime_apis! { fn claimable_asset() -> Result<(MultiLocation, MultiLocation, MultiAssets), BenchmarkError> { let origin = Statemine::get(); - let assets: MultiAssets = (Concrete(RocLocation::get()), 1_000 * UNITS).into(); + let assets: MultiAssets = (Concrete(TokenLocation::get()), 1_000 * UNITS).into(); let ticket = MultiLocation { parents: 0, interior: Here }; Ok((origin, ticket, assets)) } + + fn unlockable_asset() -> Result<(MultiLocation, MultiLocation, MultiAsset), BenchmarkError> { + // Rococo doesn't support asset locking + Err(BenchmarkError::Skip) + } } let whitelist: Vec = vec![ @@ -2040,3 +2113,42 @@ sp_api::impl_runtime_apis! { } } } + +#[cfg(all(test, feature = "try-runtime"))] +mod remote_tests { + use super::*; + use frame_try_runtime::{runtime_decl_for_try_runtime::TryRuntime, UpgradeCheckSelect}; + use remote_externalities::{ + Builder, Mode, OfflineConfig, OnlineConfig, SnapshotConfig, Transport, + }; + use std::env::var; + + #[tokio::test] + async fn run_migrations() { + if var("RUN_MIGRATION_TESTS").is_err() { + return + } + + sp_tracing::try_init_simple(); + let transport: Transport = + var("WS").unwrap_or("wss://rococo-rpc.polkadot.io:443".to_string()).into(); + let maybe_state_snapshot: Option = var("SNAP").map(|s| s.into()).ok(); + let mut ext = Builder::::default() + .mode(if let Some(state_snapshot) = maybe_state_snapshot { + Mode::OfflineOrElseOnline( + OfflineConfig { state_snapshot: state_snapshot.clone() }, + OnlineConfig { + transport, + state_snapshot: Some(state_snapshot), + ..Default::default() + }, + ) + } else { + Mode::Online(OnlineConfig { transport, ..Default::default() }) + }) + .build() + .await + .unwrap(); + ext.execute_with(|| Runtime::on_runtime_upgrade(UpgradeCheckSelect::PreAndPost)); + } +} diff --git a/runtime/rococo/src/validator_manager.rs b/runtime/rococo/src/validator_manager.rs index bb13bc823ca4..55b1878cbc7f 100644 --- a/runtime/rococo/src/validator_manager.rs +++ b/runtime/rococo/src/validator_manager.rs @@ -66,6 +66,7 @@ pub mod pallet { /// Add new validators to the set. /// /// The new validators will be active from current session + 2. + #[pallet::call_index(0)] #[pallet::weight(100_000)] pub fn register_validators( origin: OriginFor, @@ -82,6 +83,7 @@ pub mod pallet { /// Remove validators from the set. /// /// The removed validators will be deactivated from current session + 2. + #[pallet::call_index(1)] #[pallet::weight(100_000)] pub fn deregister_validators( origin: OriginFor, diff --git a/runtime/rococo/src/weights/frame_benchmarking_baseline.rs b/runtime/rococo/src/weights/frame_benchmarking_baseline.rs index 31f2ca75f591..71f75c7da3fc 100644 --- a/runtime/rococo/src/weights/frame_benchmarking_baseline.rs +++ b/runtime/rococo/src/weights/frame_benchmarking_baseline.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `frame_benchmarking::baseline` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -46,54 +47,57 @@ pub struct WeightInfo(PhantomData); impl frame_benchmarking::baseline::WeightInfo for WeightInfo { /// The range of component `i` is `[0, 1000000]`. fn addition(_i: u32, ) -> Weight { - // Minimum execution time: 108 nanoseconds. - Weight::from_ref_time(121_479) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 157_000 picoseconds. + Weight::from_parts(214_152, 0) + .saturating_add(Weight::from_parts(0, 0)) } /// The range of component `i` is `[0, 1000000]`. fn subtraction(_i: u32, ) -> Weight { - // Minimum execution time: 117 nanoseconds. - Weight::from_ref_time(210_102) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 161_000 picoseconds. + Weight::from_parts(212_456, 0) + .saturating_add(Weight::from_parts(0, 0)) } /// The range of component `i` is `[0, 1000000]`. fn multiplication(_i: u32, ) -> Weight { - // Minimum execution time: 109 nanoseconds. - Weight::from_ref_time(128_603) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 159_000 picoseconds. + Weight::from_parts(213_431, 0) + .saturating_add(Weight::from_parts(0, 0)) } /// The range of component `i` is `[0, 1000000]`. fn division(_i: u32, ) -> Weight { - // Minimum execution time: 108 nanoseconds. - Weight::from_ref_time(123_815) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 154_000 picoseconds. + Weight::from_parts(204_754, 0) + .saturating_add(Weight::from_parts(0, 0)) } - /// The range of component `i` is `[0, 100]`. - fn hashing(i: u32, ) -> Weight { - // Minimum execution time: 20_366_715 nanoseconds. - Weight::from_ref_time(20_558_729_024) - // Standard Error: 191_692 - .saturating_add(Weight::from_ref_time(1_124_523).saturating_mul(i.into())) + fn hashing() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 19_585_925_000 picoseconds. + Weight::from_parts(19_753_046_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } /// The range of component `i` is `[0, 100]`. fn sr25519_verification(i: u32, ) -> Weight { - // Minimum execution time: 132 nanoseconds. - Weight::from_ref_time(193_000) - // Standard Error: 18_227 - .saturating_add(Weight::from_ref_time(47_399_966).saturating_mul(i.into())) - } - // Storage: Skipped Metadata (r:0 w:0) - /// The range of component `i` is `[0, 1000]`. - fn storage_read(i: u32, ) -> Weight { - // Minimum execution time: 120 nanoseconds. - Weight::from_ref_time(124_000) - // Standard Error: 4_672 - .saturating_add(Weight::from_ref_time(1_966_212).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) - } - // Storage: Skipped Metadata (r:0 w:0) - /// The range of component `i` is `[0, 1000]`. - fn storage_write(i: u32, ) -> Weight { - // Minimum execution time: 125 nanoseconds. - Weight::from_ref_time(132_000) - // Standard Error: 861 - .saturating_add(Weight::from_ref_time(335_750).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 214_000 picoseconds. + Weight::from_parts(233_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 8_934 + .saturating_add(Weight::from_parts(47_206_964, 0).saturating_mul(i.into())) } } diff --git a/runtime/rococo/src/weights/frame_system.rs b/runtime/rococo/src/weights/frame_system.rs index 7f36c0d2300f..15403b93d07e 100644 --- a/runtime/rococo/src/weights/frame_system.rs +++ b/runtime/rococo/src/weights/frame_system.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `frame_system` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -46,51 +47,82 @@ pub struct WeightInfo(PhantomData); impl frame_system::WeightInfo for WeightInfo { /// The range of component `b` is `[0, 3932160]`. fn remark(b: u32, ) -> Weight { - // Minimum execution time: 3_972 nanoseconds. - Weight::from_ref_time(1_046_371) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_292_000 picoseconds. + Weight::from_parts(2_342_000, 0) + .saturating_add(Weight::from_parts(0, 0)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(414).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(368, 0).saturating_mul(b.into())) } /// The range of component `b` is `[0, 3932160]`. fn remark_with_event(b: u32, ) -> Weight { - // Minimum execution time: 12_202 nanoseconds. - Weight::from_ref_time(12_397_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_815_000 picoseconds. + Weight::from_parts(8_108_000, 0) + .saturating_add(Weight::from_parts(0, 0)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_771).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(1_408, 0).saturating_mul(b.into())) } - // Storage: System Digest (r:1 w:1) - // Storage: unknown [0x3a686561707061676573] (r:0 w:1) + /// Storage: System Digest (r:1 w:1) + /// Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: unknown `0x3a686561707061676573` (r:0 w:1) + /// Proof Skipped: unknown `0x3a686561707061676573` (r:0 w:1) fn set_heap_pages() -> Weight { - // Minimum execution time: 8_086 nanoseconds. - Weight::from_ref_time(8_345_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `1485` + // Minimum execution time: 4_368_000 picoseconds. + Weight::from_parts(4_621_000, 0) + .saturating_add(Weight::from_parts(0, 1485)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Skipped Metadata (r:0 w:0) + /// Storage: Skipped Metadata (r:0 w:0) + /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[0, 1000]`. fn set_storage(i: u32, ) -> Weight { - // Minimum execution time: 3_891 nanoseconds. - Weight::from_ref_time(3_984_000) - // Standard Error: 2_058 - .saturating_add(Weight::from_ref_time(626_682).saturating_mul(i.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_288_000 picoseconds. + Weight::from_parts(2_376_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 1_708 + .saturating_add(Weight::from_parts(661_748, 0).saturating_mul(i.into())) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } - // Storage: Skipped Metadata (r:0 w:0) + /// Storage: Skipped Metadata (r:0 w:0) + /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[0, 1000]`. fn kill_storage(i: u32, ) -> Weight { - // Minimum execution time: 3_961 nanoseconds. - Weight::from_ref_time(4_055_000) - // Standard Error: 918 - .saturating_add(Weight::from_ref_time(446_433).saturating_mul(i.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_286_000 picoseconds. + Weight::from_parts(2_349_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 783 + .saturating_add(Weight::from_parts(479_594, 0).saturating_mul(i.into())) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } - // Storage: Skipped Metadata (r:0 w:0) + /// Storage: Skipped Metadata (r:0 w:0) + /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) /// The range of component `p` is `[0, 1000]`. fn kill_prefix(p: u32, ) -> Weight { - // Minimum execution time: 5_698 nanoseconds. - Weight::from_ref_time(5_831_000) - // Standard Error: 1_373 - .saturating_add(Weight::from_ref_time(971_252).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `131 + p * (69 ±0)` + // Estimated: `126 + p * (70 ±0)` + // Minimum execution time: 4_282_000 picoseconds. + Weight::from_parts(4_376_000, 0) + .saturating_add(Weight::from_parts(0, 126)) + // Standard Error: 914 + .saturating_add(Weight::from_parts(1_020_664, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) + .saturating_add(Weight::from_parts(0, 70).saturating_mul(p.into())) } } diff --git a/runtime/rococo/src/weights/mod.rs b/runtime/rococo/src/weights/mod.rs index f1657f95aa19..e6b345c37b84 100644 --- a/runtime/rococo/src/weights/mod.rs +++ b/runtime/rococo/src/weights/mod.rs @@ -39,6 +39,7 @@ pub mod pallet_tips; pub mod pallet_treasury; pub mod pallet_utility; pub mod pallet_vesting; +pub mod pallet_xcm; pub mod runtime_common_auctions; pub mod runtime_common_claims; pub mod runtime_common_crowdloan; diff --git a/runtime/rococo/src/weights/pallet_balances.rs b/runtime/rococo/src/weights/pallet_balances.rs index 9e6af9772680..94599ca312df 100644 --- a/runtime/rococo/src/weights/pallet_balances.rs +++ b/runtime/rococo/src/weights/pallet_balances.rs @@ -47,49 +47,49 @@ impl pallet_balances::WeightInfo for WeightInfo { // Storage: System Account (r:1 w:1) fn transfer() -> Weight { // Minimum execution time: 40_106 nanoseconds. - Weight::from_ref_time(40_750_000 as u64) + Weight::from_parts(40_750_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { // Minimum execution time: 30_737 nanoseconds. - Weight::from_ref_time(31_295_000 as u64) + Weight::from_parts(31_295_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn set_balance_creating() -> Weight { // Minimum execution time: 23_902 nanoseconds. - Weight::from_ref_time(24_338_000 as u64) + Weight::from_parts(24_338_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn set_balance_killing() -> Weight { // Minimum execution time: 26_492 nanoseconds. - Weight::from_ref_time(26_866_000 as u64) + Weight::from_parts(26_866_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:2 w:2) fn force_transfer() -> Weight { // Minimum execution time: 40_384 nanoseconds. - Weight::from_ref_time(41_000_000 as u64) + Weight::from_parts(41_000_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: System Account (r:1 w:1) fn transfer_all() -> Weight { // Minimum execution time: 35_115 nanoseconds. - Weight::from_ref_time(35_696_000 as u64) + Weight::from_parts(35_696_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn force_unreserve() -> Weight { // Minimum execution time: 20_274 nanoseconds. - Weight::from_ref_time(20_885_000 as u64) + Weight::from_parts(20_885_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } diff --git a/runtime/rococo/src/weights/pallet_balances_nis_counterpart_balances.rs b/runtime/rococo/src/weights/pallet_balances_nis_counterpart_balances.rs index 0e914a1d1a69..3f6c52e8140c 100644 --- a/runtime/rococo/src/weights/pallet_balances_nis_counterpart_balances.rs +++ b/runtime/rococo/src/weights/pallet_balances_nis_counterpart_balances.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_balances` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -44,61 +45,105 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_balances`. pub struct WeightInfo(PhantomData); impl pallet_balances::WeightInfo for WeightInfo { - // Storage: NisCounterpartBalances Account (r:2 w:2) - // Storage: System Account (r:1 w:1) - // Storage: NisCounterpartBalances TotalIssuance (r:1 w:1) + /// Storage: NisCounterpartBalances Account (r:2 w:2) + /// Proof: NisCounterpartBalances Account (max_values: None, max_size: Some(112), added: 2587, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: NisCounterpartBalances TotalIssuance (r:1 w:1) + /// Proof: NisCounterpartBalances TotalIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn transfer() -> Weight { - // Minimum execution time: 45_274 nanoseconds. - Weight::from_ref_time(46_391_000) + // Proof Size summary in bytes: + // Measured: `219` + // Estimated: `11258` + // Minimum execution time: 40_394_000 picoseconds. + Weight::from_parts(41_033_000, 0) + .saturating_add(Weight::from_parts(0, 11258)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: NisCounterpartBalances Account (r:2 w:2) - // Storage: System Account (r:1 w:1) + /// Storage: NisCounterpartBalances Account (r:2 w:2) + /// Proof: NisCounterpartBalances Account (max_values: None, max_size: Some(112), added: 2587, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn transfer_keep_alive() -> Weight { - // Minimum execution time: 31_960 nanoseconds. - Weight::from_ref_time(32_954_000) + // Proof Size summary in bytes: + // Measured: `217` + // Estimated: `9757` + // Minimum execution time: 28_198_000 picoseconds. + Weight::from_parts(28_706_000, 0) + .saturating_add(Weight::from_parts(0, 9757)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: NisCounterpartBalances Account (r:1 w:1) - // Storage: NisCounterpartBalances TotalIssuance (r:1 w:1) + /// Storage: NisCounterpartBalances Account (r:1 w:1) + /// Proof: NisCounterpartBalances Account (max_values: None, max_size: Some(112), added: 2587, mode: MaxEncodedLen) + /// Storage: NisCounterpartBalances TotalIssuance (r:1 w:1) + /// Proof: NisCounterpartBalances TotalIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn set_balance_creating() -> Weight { - // Minimum execution time: 21_467 nanoseconds. - Weight::from_ref_time(22_401_000) + // Proof Size summary in bytes: + // Measured: `219` + // Estimated: `5078` + // Minimum execution time: 17_898_000 picoseconds. + Weight::from_parts(18_319_000, 0) + .saturating_add(Weight::from_parts(0, 5078)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: NisCounterpartBalances Account (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: NisCounterpartBalances TotalIssuance (r:1 w:1) + /// Storage: NisCounterpartBalances Account (r:1 w:1) + /// Proof: NisCounterpartBalances Account (max_values: None, max_size: Some(112), added: 2587, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: NisCounterpartBalances TotalIssuance (r:1 w:1) + /// Proof: NisCounterpartBalances TotalIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn set_balance_killing() -> Weight { - // Minimum execution time: 30_013 nanoseconds. - Weight::from_ref_time(31_045_000) + // Proof Size summary in bytes: + // Measured: `393` + // Estimated: `8671` + // Minimum execution time: 26_373_000 picoseconds. + Weight::from_parts(26_990_000, 0) + .saturating_add(Weight::from_parts(0, 8671)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: NisCounterpartBalances Account (r:2 w:2) - // Storage: System Account (r:2 w:2) - // Storage: NisCounterpartBalances TotalIssuance (r:1 w:1) + /// Storage: NisCounterpartBalances Account (r:2 w:2) + /// Proof: NisCounterpartBalances Account (max_values: None, max_size: Some(112), added: 2587, mode: MaxEncodedLen) + /// Storage: System Account (r:2 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: NisCounterpartBalances TotalIssuance (r:1 w:1) + /// Proof: NisCounterpartBalances TotalIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn force_transfer() -> Weight { - // Minimum execution time: 43_705 nanoseconds. - Weight::from_ref_time(44_612_000) + // Proof Size summary in bytes: + // Measured: `322` + // Estimated: `13861` + // Minimum execution time: 43_479_000 picoseconds. + Weight::from_parts(44_602_000, 0) + .saturating_add(Weight::from_parts(0, 13861)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: NisCounterpartBalances Account (r:2 w:2) - // Storage: System Account (r:1 w:1) + /// Storage: NisCounterpartBalances Account (r:2 w:2) + /// Proof: NisCounterpartBalances Account (max_values: None, max_size: Some(112), added: 2587, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn transfer_all() -> Weight { - // Minimum execution time: 40_854 nanoseconds. - Weight::from_ref_time(42_010_000) + // Proof Size summary in bytes: + // Measured: `217` + // Estimated: `9757` + // Minimum execution time: 36_097_000 picoseconds. + Weight::from_parts(37_238_000, 0) + .saturating_add(Weight::from_parts(0, 9757)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: NisCounterpartBalances Account (r:1 w:1) + /// Storage: NisCounterpartBalances Account (r:1 w:1) + /// Proof: NisCounterpartBalances Account (max_values: None, max_size: Some(112), added: 2587, mode: MaxEncodedLen) fn force_unreserve() -> Weight { - // Minimum execution time: 20_620 nanoseconds. - Weight::from_ref_time(21_028_000) + // Proof Size summary in bytes: + // Measured: `217` + // Estimated: `3577` + // Minimum execution time: 16_048_000 picoseconds. + Weight::from_parts(16_434_000, 0) + .saturating_add(Weight::from_parts(0, 3577)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/rococo/src/weights/pallet_bounties.rs b/runtime/rococo/src/weights/pallet_bounties.rs index c0453039034c..98a402e9db13 100644 --- a/runtime/rococo/src/weights/pallet_bounties.rs +++ b/runtime/rococo/src/weights/pallet_bounties.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_bounties` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -44,65 +45,118 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_bounties`. pub struct WeightInfo(PhantomData); impl pallet_bounties::WeightInfo for WeightInfo { - // Storage: Bounties BountyCount (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: Bounties BountyDescriptions (r:0 w:1) - // Storage: Bounties Bounties (r:0 w:1) + /// Storage: Bounties BountyCount (r:1 w:1) + /// Proof: Bounties BountyCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Bounties BountyDescriptions (r:0 w:1) + /// Proof: Bounties BountyDescriptions (max_values: None, max_size: Some(16400), added: 18875, mode: MaxEncodedLen) + /// Storage: Bounties Bounties (r:0 w:1) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) /// The range of component `d` is `[0, 16384]`. fn propose_bounty(d: u32, ) -> Weight { - // Minimum execution time: 29_657 nanoseconds. - Weight::from_ref_time(31_673_110) - // Standard Error: 5 - .saturating_add(Weight::from_ref_time(834).saturating_mul(d.into())) + // Proof Size summary in bytes: + // Measured: `210` + // Estimated: `5082` + // Minimum execution time: 26_001_000 picoseconds. + Weight::from_parts(27_607_145, 0) + .saturating_add(Weight::from_parts(0, 5082)) + // Standard Error: 6 + .saturating_add(Weight::from_parts(696, 0).saturating_mul(d.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(4)) } fn approve_bounty() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 0_000 picoseconds. + Weight::from_parts(0, 0) + .saturating_add(Weight::from_parts(0, 0)) } fn propose_curator() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 0_000 picoseconds. + Weight::from_parts(0, 0) + .saturating_add(Weight::from_parts(0, 0)) } fn unassign_curator() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 0_000 picoseconds. + Weight::from_parts(0, 0) + .saturating_add(Weight::from_parts(0, 0)) } fn accept_curator() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 0_000 picoseconds. + Weight::from_parts(0, 0) + .saturating_add(Weight::from_parts(0, 0)) } fn award_bounty() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 0_000 picoseconds. + Weight::from_parts(0, 0) + .saturating_add(Weight::from_parts(0, 0)) } fn claim_bounty() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 0_000 picoseconds. + Weight::from_parts(0, 0) + .saturating_add(Weight::from_parts(0, 0)) } - // Storage: Bounties Bounties (r:1 w:1) - // Storage: ChildBounties ParentChildBounties (r:1 w:0) - // Storage: System Account (r:1 w:1) - // Storage: Bounties BountyDescriptions (r:0 w:1) + /// Storage: Bounties Bounties (r:1 w:1) + /// Proof: Bounties Bounties (max_values: None, max_size: Some(177), added: 2652, mode: MaxEncodedLen) + /// Storage: ChildBounties ParentChildBounties (r:1 w:0) + /// Proof: ChildBounties ParentChildBounties (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Bounties BountyDescriptions (r:0 w:1) + /// Proof: Bounties BountyDescriptions (max_values: None, max_size: Some(16400), added: 18875, mode: MaxEncodedLen) fn close_bounty_proposed() -> Weight { - // Minimum execution time: 47_373 nanoseconds. - Weight::from_ref_time(48_026_000) + // Proof Size summary in bytes: + // Measured: `482` + // Estimated: `10716` + // Minimum execution time: 42_088_000 picoseconds. + Weight::from_parts(42_604_000, 0) + .saturating_add(Weight::from_parts(0, 10716)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } fn close_bounty_active() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 0_000 picoseconds. + Weight::from_parts(0, 0) + .saturating_add(Weight::from_parts(0, 0)) } fn extend_bounty_expiry() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 0_000 picoseconds. + Weight::from_parts(0, 0) + .saturating_add(Weight::from_parts(0, 0)) } - // Storage: Bounties BountyApprovals (r:1 w:1) + /// Storage: Bounties BountyApprovals (r:1 w:1) + /// Proof: Bounties BountyApprovals (max_values: Some(1), max_size: Some(402), added: 897, mode: MaxEncodedLen) /// The range of component `b` is `[0, 100]`. fn spend_funds(_b: u32, ) -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(3_372_484) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `1887` + // Minimum execution time: 0_000 picoseconds. + Weight::from_parts(2_530_136, 0) + .saturating_add(Weight::from_parts(0, 1887)) } } diff --git a/runtime/rococo/src/weights/pallet_child_bounties.rs b/runtime/rococo/src/weights/pallet_child_bounties.rs index f54ac22c98bf..1f606778841e 100644 --- a/runtime/rococo/src/weights/pallet_child_bounties.rs +++ b/runtime/rococo/src/weights/pallet_child_bounties.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_child_bounties` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -46,35 +47,67 @@ pub struct WeightInfo(PhantomData); impl pallet_child_bounties::WeightInfo for WeightInfo { /// The range of component `d` is `[0, 16384]`. fn add_child_bounty(_d: u32, ) -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 0_000 picoseconds. + Weight::from_parts(0, 0) + .saturating_add(Weight::from_parts(0, 0)) } fn propose_curator() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 0_000 picoseconds. + Weight::from_parts(0, 0) + .saturating_add(Weight::from_parts(0, 0)) } fn accept_curator() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 0_000 picoseconds. + Weight::from_parts(0, 0) + .saturating_add(Weight::from_parts(0, 0)) } fn unassign_curator() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 0_000 picoseconds. + Weight::from_parts(0, 0) + .saturating_add(Weight::from_parts(0, 0)) } fn award_child_bounty() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 0_000 picoseconds. + Weight::from_parts(0, 0) + .saturating_add(Weight::from_parts(0, 0)) } fn claim_child_bounty() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 0_000 picoseconds. + Weight::from_parts(0, 0) + .saturating_add(Weight::from_parts(0, 0)) } fn close_child_bounty_added() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 0_000 picoseconds. + Weight::from_parts(0, 0) + .saturating_add(Weight::from_parts(0, 0)) } fn close_child_bounty_active() -> Weight { - // Minimum execution time: 0 nanoseconds. - Weight::from_ref_time(0) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 0_000 picoseconds. + Weight::from_parts(0, 0) + .saturating_add(Weight::from_parts(0, 0)) } } diff --git a/runtime/rococo/src/weights/pallet_collective.rs b/runtime/rococo/src/weights/pallet_collective.rs index 345c48607532..610f9160494d 100644 --- a/runtime/rococo/src/weights/pallet_collective.rs +++ b/runtime/rococo/src/weights/pallet_collective.rs @@ -52,11 +52,11 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `n` is `[1, 100]`. /// The range of component `p` is `[1, 100]`. fn set_members(m: u32, _n: u32, p: u32, ) -> Weight { - Weight::from_ref_time(0 as u64) + Weight::from_parts(0 as u64, 0) // Standard Error: 15_000 - .saturating_add(Weight::from_ref_time(10_832_000 as u64).saturating_mul(m as u64)) + .saturating_add(Weight::from_parts(10_832_000 as u64, 0).saturating_mul(m as u64)) // Standard Error: 15_000 - .saturating_add(Weight::from_ref_time(12_894_000 as u64).saturating_mul(p as u64)) + .saturating_add(Weight::from_parts(12_894_000 as u64, 0).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(p as u64))) .saturating_add(T::DbWeight::get().writes(2 as u64)) @@ -66,11 +66,11 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `b` is `[1, 1024]`. /// The range of component `m` is `[1, 100]`. fn execute(b: u32, m: u32, ) -> Weight { - Weight::from_ref_time(19_069_000 as u64) + Weight::from_parts(19_069_000 as u64, 0) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(b as u64)) + .saturating_add(Weight::from_parts(2_000 as u64, 0).saturating_mul(b as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(13_000 as u64).saturating_mul(m as u64)) + .saturating_add(Weight::from_parts(13_000 as u64, 0).saturating_mul(m as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) } // Storage: Collective Members (r:1 w:0) @@ -78,11 +78,11 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `b` is `[1, 1024]`. /// The range of component `m` is `[1, 100]`. fn propose_execute(b: u32, m: u32, ) -> Weight { - Weight::from_ref_time(20_794_000 as u64) + Weight::from_parts(20_794_000 as u64, 0) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(b as u64)) + .saturating_add(Weight::from_parts(2_000 as u64, 0).saturating_mul(b as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(22_000 as u64).saturating_mul(m as u64)) + .saturating_add(Weight::from_parts(22_000 as u64, 0).saturating_mul(m as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) } // Storage: Collective Members (r:1 w:0) @@ -94,13 +94,13 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `m` is `[2, 100]`. /// The range of component `p` is `[1, 100]`. fn propose_proposed(b: u32, m: u32, p: u32, ) -> Weight { - Weight::from_ref_time(27_870_000 as u64) + Weight::from_parts(27_870_000 as u64, 0) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(3_000 as u64).saturating_mul(b as u64)) + .saturating_add(Weight::from_parts(3_000 as u64, 0).saturating_mul(b as u64)) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(22_000 as u64).saturating_mul(m as u64)) + .saturating_add(Weight::from_parts(22_000 as u64, 0).saturating_mul(m as u64)) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(94_000 as u64).saturating_mul(p as u64)) + .saturating_add(Weight::from_parts(94_000 as u64, 0).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(4 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } @@ -108,9 +108,9 @@ impl pallet_collective::WeightInfo for WeightInfo { // Storage: Collective Voting (r:1 w:1) /// The range of component `m` is `[5, 100]`. fn vote(m: u32, ) -> Weight { - Weight::from_ref_time(27_249_000 as u64) + Weight::from_parts(27_249_000 as u64, 0) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(35_000 as u64).saturating_mul(m as u64)) + .saturating_add(Weight::from_parts(35_000 as u64, 0).saturating_mul(m as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -121,11 +121,11 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. fn close_early_disapproved(m: u32, p: u32, ) -> Weight { - Weight::from_ref_time(30_754_000 as u64) + Weight::from_parts(30_754_000 as u64, 0) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(28_000 as u64).saturating_mul(m as u64)) + .saturating_add(Weight::from_parts(28_000 as u64, 0).saturating_mul(m as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(81_000 as u64).saturating_mul(p as u64)) + .saturating_add(Weight::from_parts(81_000 as u64, 0).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(3 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } @@ -137,13 +137,13 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. fn close_early_approved(b: u32, m: u32, p: u32, ) -> Weight { - Weight::from_ref_time(39_508_000 as u64) + Weight::from_parts(39_508_000 as u64, 0) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(b as u64)) + .saturating_add(Weight::from_parts(1_000 as u64, 0).saturating_mul(b as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(29_000 as u64).saturating_mul(m as u64)) + .saturating_add(Weight::from_parts(29_000 as u64, 0).saturating_mul(m as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(90_000 as u64).saturating_mul(p as u64)) + .saturating_add(Weight::from_parts(90_000 as u64, 0).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(4 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } @@ -155,11 +155,11 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. fn close_disapproved(m: u32, p: u32, ) -> Weight { - Weight::from_ref_time(32_769_000 as u64) + Weight::from_parts(32_769_000 as u64, 0) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(31_000 as u64).saturating_mul(m as u64)) + .saturating_add(Weight::from_parts(31_000 as u64, 0).saturating_mul(m as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(83_000 as u64).saturating_mul(p as u64)) + .saturating_add(Weight::from_parts(83_000 as u64, 0).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(4 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } @@ -172,13 +172,13 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. fn close_approved(b: u32, m: u32, p: u32, ) -> Weight { - Weight::from_ref_time(41_704_000 as u64) + Weight::from_parts(41_704_000 as u64, 0) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(b as u64)) + .saturating_add(Weight::from_parts(1_000 as u64, 0).saturating_mul(b as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(28_000 as u64).saturating_mul(m as u64)) + .saturating_add(Weight::from_parts(28_000 as u64, 0).saturating_mul(m as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(92_000 as u64).saturating_mul(p as u64)) + .saturating_add(Weight::from_parts(92_000 as u64, 0).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(5 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } @@ -187,9 +187,9 @@ impl pallet_collective::WeightInfo for WeightInfo { // Storage: Collective ProposalOf (r:0 w:1) /// The range of component `p` is `[1, 100]`. fn disapprove_proposal(p: u32, ) -> Weight { - Weight::from_ref_time(22_720_000 as u64) + Weight::from_parts(22_720_000 as u64, 0) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(74_000 as u64).saturating_mul(p as u64)) + .saturating_add(Weight::from_parts(74_000 as u64, 0).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } diff --git a/runtime/rococo/src/weights/pallet_collective_council.rs b/runtime/rococo/src/weights/pallet_collective_council.rs index 9b27cbc4471b..c3b2e64d7480 100644 --- a/runtime/rococo/src/weights/pallet_collective_council.rs +++ b/runtime/rococo/src/weights/pallet_collective_council.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_collective` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -44,10 +45,14 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_collective`. pub struct WeightInfo(PhantomData); impl pallet_collective::WeightInfo for WeightInfo { - // Storage: Council Members (r:1 w:1) - // Storage: Council Proposals (r:1 w:0) - // Storage: Council Prime (r:0 w:1) - // Storage: Council Voting (r:100 w:100) + /// Storage: Council Members (r:1 w:1) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Proposals (r:1 w:0) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Voting (r:100 w:100) + /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Council Prime (r:0 w:1) + /// Proof Skipped: Council Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[0, 100]`. /// The range of component `n` is `[0, 100]`. /// The range of component `p` is `[0, 100]`. @@ -55,51 +60,75 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `n` is `[0, 100]`. /// The range of component `p` is `[0, 100]`. fn set_members(m: u32, _n: u32, p: u32, ) -> Weight { - // Minimum execution time: 18_113 nanoseconds. - Weight::from_ref_time(18_345_000) - // Standard Error: 44_428 - .saturating_add(Weight::from_ref_time(5_019_922).saturating_mul(m.into())) - // Standard Error: 44_428 - .saturating_add(Weight::from_ref_time(7_234_332).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `0 + m * (3232 ±0) + p * (3190 ±0)` + // Estimated: `19164 + m * (7799 ±16) + p * (10110 ±16)` + // Minimum execution time: 18_409_000 picoseconds. + Weight::from_parts(18_665_000, 0) + .saturating_add(Weight::from_parts(0, 19164)) + // Standard Error: 53_593 + .saturating_add(Weight::from_parts(6_095_379, 0).saturating_mul(m.into())) + // Standard Error: 53_593 + .saturating_add(Weight::from_parts(8_689_578, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) .saturating_add(T::DbWeight::get().writes(2)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) + .saturating_add(Weight::from_parts(0, 7799).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 10110).saturating_mul(p.into())) } - // Storage: Council Members (r:1 w:0) + /// Storage: Council Members (r:1 w:0) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[1, 100]`. /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[1, 100]`. fn execute(b: u32, m: u32, ) -> Weight { - // Minimum execution time: 20_515 nanoseconds. - Weight::from_ref_time(20_113_963) - // Standard Error: 36 - .saturating_add(Weight::from_ref_time(2_039).saturating_mul(b.into())) - // Standard Error: 377 - .saturating_add(Weight::from_ref_time(12_442).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `136 + m * (32 ±0)` + // Estimated: `1622 + m * (32 ±0)` + // Minimum execution time: 17_403_000 picoseconds. + Weight::from_parts(17_138_700, 0) + .saturating_add(Weight::from_parts(0, 1622)) + // Standard Error: 24 + .saturating_add(Weight::from_parts(1_245, 0).saturating_mul(b.into())) + // Standard Error: 255 + .saturating_add(Weight::from_parts(13_615, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) } - // Storage: Council Members (r:1 w:0) - // Storage: Council ProposalOf (r:1 w:0) + /// Storage: Council Members (r:1 w:0) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council ProposalOf (r:1 w:0) + /// Proof Skipped: Council ProposalOf (max_values: None, max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[1, 100]`. /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[1, 100]`. fn propose_execute(b: u32, m: u32, ) -> Weight { - // Minimum execution time: 23_139 nanoseconds. - Weight::from_ref_time(22_040_575) - // Standard Error: 43 - .saturating_add(Weight::from_ref_time(2_014).saturating_mul(b.into())) - // Standard Error: 447 - .saturating_add(Weight::from_ref_time(20_546).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `136 + m * (32 ±0)` + // Estimated: `5224 + m * (64 ±0)` + // Minimum execution time: 19_516_000 picoseconds. + Weight::from_parts(19_262_478, 0) + .saturating_add(Weight::from_parts(0, 5224)) + // Standard Error: 45 + .saturating_add(Weight::from_parts(990, 0).saturating_mul(b.into())) + // Standard Error: 471 + .saturating_add(Weight::from_parts(26_260, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(Weight::from_parts(0, 64).saturating_mul(m.into())) } - // Storage: Council Members (r:1 w:0) - // Storage: Council ProposalOf (r:1 w:1) - // Storage: Council Proposals (r:1 w:1) - // Storage: Council ProposalCount (r:1 w:1) - // Storage: Council Voting (r:0 w:1) + /// Storage: Council Members (r:1 w:0) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council ProposalOf (r:1 w:1) + /// Proof Skipped: Council ProposalOf (max_values: None, max_size: None, mode: Measured) + /// Storage: Council Proposals (r:1 w:1) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council ProposalCount (r:1 w:1) + /// Proof Skipped: Council ProposalCount (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Voting (r:0 w:1) + /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[2, 100]`. /// The range of component `p` is `[1, 100]`. @@ -107,51 +136,78 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `m` is `[2, 100]`. /// The range of component `p` is `[1, 100]`. fn propose_proposed(b: u32, m: u32, p: u32, ) -> Weight { - // Minimum execution time: 28_499 nanoseconds. - Weight::from_ref_time(29_820_960) - // Standard Error: 68 - .saturating_add(Weight::from_ref_time(2_874).saturating_mul(b.into())) - // Standard Error: 714 - .saturating_add(Weight::from_ref_time(20_234).saturating_mul(m.into())) - // Standard Error: 705 - .saturating_add(Weight::from_ref_time(112_423).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `426 + m * (32 ±0) + p * (36 ±0)` + // Estimated: `9685 + m * (165 ±0) + p * (180 ±0)` + // Minimum execution time: 25_377_000 picoseconds. + Weight::from_parts(26_097_770, 0) + .saturating_add(Weight::from_parts(0, 9685)) + // Standard Error: 55 + .saturating_add(Weight::from_parts(2_402, 0).saturating_mul(b.into())) + // Standard Error: 574 + .saturating_add(Weight::from_parts(19_460, 0).saturating_mul(m.into())) + // Standard Error: 567 + .saturating_add(Weight::from_parts(127_156, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) + .saturating_add(Weight::from_parts(0, 165).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 180).saturating_mul(p.into())) } - // Storage: Council Members (r:1 w:0) - // Storage: Council Voting (r:1 w:1) + /// Storage: Council Members (r:1 w:0) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Voting (r:1 w:1) + /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) /// The range of component `m` is `[5, 100]`. /// The range of component `m` is `[5, 100]`. fn vote(m: u32, ) -> Weight { - // Minimum execution time: 29_401 nanoseconds. - Weight::from_ref_time(30_711_957) - // Standard Error: 558 - .saturating_add(Weight::from_ref_time(38_689).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `875 + m * (64 ±0)` + // Estimated: `6698 + m * (128 ±0)` + // Minimum execution time: 23_095_000 picoseconds. + Weight::from_parts(23_734_450, 0) + .saturating_add(Weight::from_parts(0, 6698)) + // Standard Error: 321 + .saturating_add(Weight::from_parts(46_415, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 128).saturating_mul(m.into())) } - // Storage: Council Voting (r:1 w:1) - // Storage: Council Members (r:1 w:0) - // Storage: Council Proposals (r:1 w:1) - // Storage: Council ProposalOf (r:0 w:1) + /// Storage: Council Voting (r:1 w:1) + /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Council Members (r:1 w:0) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Proposals (r:1 w:1) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council ProposalOf (r:0 w:1) + /// Proof Skipped: Council ProposalOf (max_values: None, max_size: None, mode: Measured) /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. fn close_early_disapproved(m: u32, p: u32, ) -> Weight { - // Minimum execution time: 31_116 nanoseconds. - Weight::from_ref_time(33_590_647) - // Standard Error: 507 - .saturating_add(Weight::from_ref_time(17_735).saturating_mul(m.into())) - // Standard Error: 494 - .saturating_add(Weight::from_ref_time(97_606).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `464 + m * (64 ±0) + p * (36 ±0)` + // Estimated: `8211 + m * (260 ±0) + p * (144 ±0)` + // Minimum execution time: 28_018_000 picoseconds. + Weight::from_parts(29_056_435, 0) + .saturating_add(Weight::from_parts(0, 8211)) + // Standard Error: 435 + .saturating_add(Weight::from_parts(23_077, 0).saturating_mul(m.into())) + // Standard Error: 424 + .saturating_add(Weight::from_parts(118_080, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 260).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 144).saturating_mul(p.into())) } - // Storage: Council Voting (r:1 w:1) - // Storage: Council Members (r:1 w:0) - // Storage: Council ProposalOf (r:1 w:1) - // Storage: Council Proposals (r:1 w:1) + /// Storage: Council Voting (r:1 w:1) + /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Council Members (r:1 w:0) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council ProposalOf (r:1 w:1) + /// Proof Skipped: Council ProposalOf (max_values: None, max_size: None, mode: Measured) + /// Storage: Council Proposals (r:1 w:1) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. @@ -159,41 +215,62 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. fn close_early_approved(b: u32, m: u32, p: u32, ) -> Weight { - // Minimum execution time: 41_266 nanoseconds. - Weight::from_ref_time(42_416_248) - // Standard Error: 62 - .saturating_add(Weight::from_ref_time(2_225).saturating_mul(b.into())) - // Standard Error: 661 - .saturating_add(Weight::from_ref_time(15_161).saturating_mul(m.into())) - // Standard Error: 644 - .saturating_add(Weight::from_ref_time(116_981).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `766 + b * (1 ±0) + m * (64 ±0) + p * (40 ±0)` + // Estimated: `12372 + b * (4 ±0) + m * (264 ±0) + p * (160 ±0)` + // Minimum execution time: 39_949_000 picoseconds. + Weight::from_parts(42_155_581, 0) + .saturating_add(Weight::from_parts(0, 12372)) + // Standard Error: 126 + .saturating_add(Weight::from_parts(2_168, 0).saturating_mul(b.into())) + // Standard Error: 1_306 + .saturating_add(Weight::from_parts(153_515, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 4).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(0, 264).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 160).saturating_mul(p.into())) } - // Storage: Council Voting (r:1 w:1) - // Storage: Council Members (r:1 w:0) - // Storage: Council Prime (r:1 w:0) - // Storage: Council Proposals (r:1 w:1) - // Storage: Council ProposalOf (r:0 w:1) + /// Storage: Council Voting (r:1 w:1) + /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Council Members (r:1 w:0) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Prime (r:1 w:0) + /// Proof Skipped: Council Prime (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Proposals (r:1 w:1) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council ProposalOf (r:0 w:1) + /// Proof Skipped: Council ProposalOf (max_values: None, max_size: None, mode: Measured) /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. fn close_disapproved(m: u32, p: u32, ) -> Weight { - // Minimum execution time: 34_391 nanoseconds. - Weight::from_ref_time(35_671_180) - // Standard Error: 455 - .saturating_add(Weight::from_ref_time(23_178).saturating_mul(m.into())) - // Standard Error: 444 - .saturating_add(Weight::from_ref_time(96_114).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `484 + m * (64 ±0) + p * (36 ±0)` + // Estimated: `10240 + m * (325 ±0) + p * (180 ±0)` + // Minimum execution time: 30_831_000 picoseconds. + Weight::from_parts(31_829_276, 0) + .saturating_add(Weight::from_parts(0, 10240)) + // Standard Error: 448 + .saturating_add(Weight::from_parts(23_861, 0).saturating_mul(m.into())) + // Standard Error: 437 + .saturating_add(Weight::from_parts(117_488, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 325).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 180).saturating_mul(p.into())) } - // Storage: Council Voting (r:1 w:1) - // Storage: Council Members (r:1 w:0) - // Storage: Council Prime (r:1 w:0) - // Storage: Council ProposalOf (r:1 w:1) - // Storage: Council Proposals (r:1 w:1) + /// Storage: Council Voting (r:1 w:1) + /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Council Members (r:1 w:0) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Prime (r:1 w:0) + /// Proof Skipped: Council Prime (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council ProposalOf (r:1 w:1) + /// Proof Skipped: Council ProposalOf (max_values: None, max_size: None, mode: Measured) + /// Storage: Council Proposals (r:1 w:1) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. @@ -201,28 +278,43 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. fn close_approved(b: u32, m: u32, p: u32, ) -> Weight { - // Minimum execution time: 43_531 nanoseconds. - Weight::from_ref_time(45_311_272) - // Standard Error: 86 - .saturating_add(Weight::from_ref_time(2_224).saturating_mul(b.into())) - // Standard Error: 910 - .saturating_add(Weight::from_ref_time(7_970).saturating_mul(m.into())) - // Standard Error: 887 - .saturating_add(Weight::from_ref_time(118_368).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `786 + b * (1 ±0) + m * (64 ±0) + p * (40 ±0)` + // Estimated: `14575 + b * (5 ±0) + m * (330 ±0) + p * (200 ±0)` + // Minimum execution time: 42_428_000 picoseconds. + Weight::from_parts(43_525_724, 0) + .saturating_add(Weight::from_parts(0, 14575)) + // Standard Error: 88 + .saturating_add(Weight::from_parts(2_466, 0).saturating_mul(b.into())) + // Standard Error: 932 + .saturating_add(Weight::from_parts(24_008, 0).saturating_mul(m.into())) + // Standard Error: 909 + .saturating_add(Weight::from_parts(151_137, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 5).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(0, 330).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 200).saturating_mul(p.into())) } - // Storage: Council Proposals (r:1 w:1) - // Storage: Council Voting (r:0 w:1) - // Storage: Council ProposalOf (r:0 w:1) + /// Storage: Council Proposals (r:1 w:1) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Voting (r:0 w:1) + /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Council ProposalOf (r:0 w:1) + /// Proof Skipped: Council ProposalOf (max_values: None, max_size: None, mode: Measured) /// The range of component `p` is `[1, 100]`. /// The range of component `p` is `[1, 100]`. fn disapprove_proposal(p: u32, ) -> Weight { - // Minimum execution time: 19_674 nanoseconds. - Weight::from_ref_time(23_018_532) - // Standard Error: 767 - .saturating_add(Weight::from_ref_time(102_556).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `293 + p * (32 ±0)` + // Estimated: `2364 + p * (96 ±0)` + // Minimum execution time: 15_842_000 picoseconds. + Weight::from_parts(18_220_251, 0) + .saturating_add(Weight::from_parts(0, 2364)) + // Standard Error: 525 + .saturating_add(Weight::from_parts(114_682, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 96).saturating_mul(p.into())) } } diff --git a/runtime/rococo/src/weights/pallet_collective_technical_committee.rs b/runtime/rococo/src/weights/pallet_collective_technical_committee.rs index 67ef57379f50..e6fa162f0310 100644 --- a/runtime/rococo/src/weights/pallet_collective_technical_committee.rs +++ b/runtime/rococo/src/weights/pallet_collective_technical_committee.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_collective` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -44,10 +45,14 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_collective`. pub struct WeightInfo(PhantomData); impl pallet_collective::WeightInfo for WeightInfo { - // Storage: TechnicalCommittee Members (r:1 w:1) - // Storage: TechnicalCommittee Proposals (r:1 w:0) - // Storage: TechnicalCommittee Prime (r:0 w:1) - // Storage: TechnicalCommittee Voting (r:100 w:100) + /// Storage: TechnicalCommittee Members (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Proposals (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Voting (r:100 w:100) + /// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Prime (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[0, 100]`. /// The range of component `n` is `[0, 100]`. /// The range of component `p` is `[0, 100]`. @@ -55,51 +60,75 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `n` is `[0, 100]`. /// The range of component `p` is `[0, 100]`. fn set_members(m: u32, _n: u32, p: u32, ) -> Weight { - // Minimum execution time: 18_296 nanoseconds. - Weight::from_ref_time(18_626_000) - // Standard Error: 45_137 - .saturating_add(Weight::from_ref_time(5_133_683).saturating_mul(m.into())) - // Standard Error: 45_137 - .saturating_add(Weight::from_ref_time(7_349_526).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `0 + m * (3232 ±0) + p * (3190 ±0)` + // Estimated: `19048 + m * (7799 ±16) + p * (10110 ±16)` + // Minimum execution time: 18_999_000 picoseconds. + Weight::from_parts(19_317_000, 0) + .saturating_add(Weight::from_parts(0, 19048)) + // Standard Error: 53_772 + .saturating_add(Weight::from_parts(6_158_487, 0).saturating_mul(m.into())) + // Standard Error: 53_772 + .saturating_add(Weight::from_parts(8_829_842, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) .saturating_add(T::DbWeight::get().writes(2)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) + .saturating_add(Weight::from_parts(0, 7799).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 10110).saturating_mul(p.into())) } - // Storage: TechnicalCommittee Members (r:1 w:0) + /// Storage: TechnicalCommittee Members (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[1, 100]`. /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[1, 100]`. fn execute(b: u32, m: u32, ) -> Weight { - // Minimum execution time: 20_975 nanoseconds. - Weight::from_ref_time(20_296_697) - // Standard Error: 36 - .saturating_add(Weight::from_ref_time(1_955).saturating_mul(b.into())) - // Standard Error: 380 - .saturating_add(Weight::from_ref_time(12_823).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `107 + m * (32 ±0)` + // Estimated: `1593 + m * (32 ±0)` + // Minimum execution time: 18_150_000 picoseconds. + Weight::from_parts(17_661_983, 0) + .saturating_add(Weight::from_parts(0, 1593)) + // Standard Error: 22 + .saturating_add(Weight::from_parts(1_218, 0).saturating_mul(b.into())) + // Standard Error: 231 + .saturating_add(Weight::from_parts(11_314, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) } - // Storage: TechnicalCommittee Members (r:1 w:0) - // Storage: TechnicalCommittee ProposalOf (r:1 w:0) + /// Storage: TechnicalCommittee Members (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee ProposalOf (r:1 w:0) + /// Proof Skipped: TechnicalCommittee ProposalOf (max_values: None, max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[1, 100]`. /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[1, 100]`. fn propose_execute(b: u32, m: u32, ) -> Weight { - // Minimum execution time: 23_422 nanoseconds. - Weight::from_ref_time(22_146_912) - // Standard Error: 42 - .saturating_add(Weight::from_ref_time(1_970).saturating_mul(b.into())) - // Standard Error: 438 - .saturating_add(Weight::from_ref_time(21_239).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `107 + m * (32 ±0)` + // Estimated: `5166 + m * (64 ±0)` + // Minimum execution time: 20_213_000 picoseconds. + Weight::from_parts(19_820_630, 0) + .saturating_add(Weight::from_parts(0, 5166)) + // Standard Error: 45 + .saturating_add(Weight::from_parts(1_027, 0).saturating_mul(b.into())) + // Standard Error: 468 + .saturating_add(Weight::from_parts(25_038, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(Weight::from_parts(0, 64).saturating_mul(m.into())) } - // Storage: TechnicalCommittee Members (r:1 w:0) - // Storage: TechnicalCommittee ProposalOf (r:1 w:1) - // Storage: TechnicalCommittee Proposals (r:1 w:1) - // Storage: TechnicalCommittee ProposalCount (r:1 w:1) - // Storage: TechnicalCommittee Voting (r:0 w:1) + /// Storage: TechnicalCommittee Members (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee ProposalOf (r:1 w:1) + /// Proof Skipped: TechnicalCommittee ProposalOf (max_values: None, max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Proposals (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee ProposalCount (r:1 w:1) + /// Proof Skipped: TechnicalCommittee ProposalCount (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Voting (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[2, 100]`. /// The range of component `p` is `[1, 100]`. @@ -107,51 +136,78 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `m` is `[2, 100]`. /// The range of component `p` is `[1, 100]`. fn propose_proposed(b: u32, m: u32, p: u32, ) -> Weight { - // Minimum execution time: 29_001 nanoseconds. - Weight::from_ref_time(30_369_164) - // Standard Error: 66 - .saturating_add(Weight::from_ref_time(3_373).saturating_mul(b.into())) - // Standard Error: 696 - .saturating_add(Weight::from_ref_time(17_814).saturating_mul(m.into())) - // Standard Error: 687 - .saturating_add(Weight::from_ref_time(119_793).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `397 + m * (32 ±0) + p * (36 ±0)` + // Estimated: `9540 + m * (165 ±0) + p * (180 ±0)` + // Minimum execution time: 26_035_000 picoseconds. + Weight::from_parts(26_958_892, 0) + .saturating_add(Weight::from_parts(0, 9540)) + // Standard Error: 53 + .saturating_add(Weight::from_parts(2_417, 0).saturating_mul(b.into())) + // Standard Error: 553 + .saturating_add(Weight::from_parts(19_098, 0).saturating_mul(m.into())) + // Standard Error: 546 + .saturating_add(Weight::from_parts(127_780, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) + .saturating_add(Weight::from_parts(0, 165).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 180).saturating_mul(p.into())) } - // Storage: TechnicalCommittee Members (r:1 w:0) - // Storage: TechnicalCommittee Voting (r:1 w:1) + /// Storage: TechnicalCommittee Members (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Voting (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured) /// The range of component `m` is `[5, 100]`. /// The range of component `m` is `[5, 100]`. fn vote(m: u32, ) -> Weight { - // Minimum execution time: 29_990 nanoseconds. - Weight::from_ref_time(31_263_891) - // Standard Error: 484 - .saturating_add(Weight::from_ref_time(39_455).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `846 + m * (64 ±0)` + // Estimated: `6640 + m * (128 ±0)` + // Minimum execution time: 23_930_000 picoseconds. + Weight::from_parts(24_532_203, 0) + .saturating_add(Weight::from_parts(0, 6640)) + // Standard Error: 289 + .saturating_add(Weight::from_parts(45_327, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 128).saturating_mul(m.into())) } - // Storage: TechnicalCommittee Voting (r:1 w:1) - // Storage: TechnicalCommittee Members (r:1 w:0) - // Storage: TechnicalCommittee Proposals (r:1 w:1) - // Storage: TechnicalCommittee ProposalOf (r:0 w:1) + /// Storage: TechnicalCommittee Voting (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Members (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Proposals (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee ProposalOf (r:0 w:1) + /// Proof Skipped: TechnicalCommittee ProposalOf (max_values: None, max_size: None, mode: Measured) /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. fn close_early_disapproved(m: u32, p: u32, ) -> Weight { - // Minimum execution time: 32_528 nanoseconds. - Weight::from_ref_time(33_990_709) - // Standard Error: 445 - .saturating_add(Weight::from_ref_time(20_655).saturating_mul(m.into())) - // Standard Error: 434 - .saturating_add(Weight::from_ref_time(98_367).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `435 + m * (64 ±0) + p * (36 ±0)` + // Estimated: `8095 + m * (260 ±0) + p * (144 ±0)` + // Minimum execution time: 28_607_000 picoseconds. + Weight::from_parts(29_697_878, 0) + .saturating_add(Weight::from_parts(0, 8095)) + // Standard Error: 404 + .saturating_add(Weight::from_parts(23_038, 0).saturating_mul(m.into())) + // Standard Error: 394 + .saturating_add(Weight::from_parts(119_861, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 260).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 144).saturating_mul(p.into())) } - // Storage: TechnicalCommittee Voting (r:1 w:1) - // Storage: TechnicalCommittee Members (r:1 w:0) - // Storage: TechnicalCommittee ProposalOf (r:1 w:1) - // Storage: TechnicalCommittee Proposals (r:1 w:1) + /// Storage: TechnicalCommittee Voting (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Members (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee ProposalOf (r:1 w:1) + /// Proof Skipped: TechnicalCommittee ProposalOf (max_values: None, max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Proposals (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. @@ -159,41 +215,64 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. fn close_early_approved(b: u32, m: u32, p: u32, ) -> Weight { - // Minimum execution time: 42_010 nanoseconds. - Weight::from_ref_time(43_128_498) - // Standard Error: 58 - .saturating_add(Weight::from_ref_time(2_045).saturating_mul(b.into())) - // Standard Error: 618 - .saturating_add(Weight::from_ref_time(16_423).saturating_mul(m.into())) - // Standard Error: 603 - .saturating_add(Weight::from_ref_time(117_415).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `737 + b * (1 ±0) + m * (64 ±0) + p * (40 ±0)` + // Estimated: `12256 + b * (4 ±0) + m * (264 ±0) + p * (160 ±0)` + // Minimum execution time: 40_627_000 picoseconds. + Weight::from_parts(42_069_683, 0) + .saturating_add(Weight::from_parts(0, 12256)) + // Standard Error: 85 + .saturating_add(Weight::from_parts(2_262, 0).saturating_mul(b.into())) + // Standard Error: 903 + .saturating_add(Weight::from_parts(21_911, 0).saturating_mul(m.into())) + // Standard Error: 880 + .saturating_add(Weight::from_parts(148_298, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 4).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(0, 264).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 160).saturating_mul(p.into())) } - // Storage: TechnicalCommittee Voting (r:1 w:1) - // Storage: TechnicalCommittee Members (r:1 w:0) - // Storage: TechnicalCommittee Prime (r:1 w:0) - // Storage: TechnicalCommittee Proposals (r:1 w:1) - // Storage: TechnicalCommittee ProposalOf (r:0 w:1) + /// Storage: TechnicalCommittee Voting (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Members (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Prime (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Proposals (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee ProposalOf (r:0 w:1) + /// Proof Skipped: TechnicalCommittee ProposalOf (max_values: None, max_size: None, mode: Measured) /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. fn close_disapproved(m: u32, p: u32, ) -> Weight { - // Minimum execution time: 34_919 nanoseconds. - Weight::from_ref_time(36_142_161) - // Standard Error: 465 - .saturating_add(Weight::from_ref_time(24_375).saturating_mul(m.into())) - // Standard Error: 453 - .saturating_add(Weight::from_ref_time(97_836).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `455 + m * (64 ±0) + p * (36 ±0)` + // Estimated: `10095 + m * (325 ±0) + p * (180 ±0)` + // Minimum execution time: 31_316_000 picoseconds. + Weight::from_parts(32_415_386, 0) + .saturating_add(Weight::from_parts(0, 10095)) + // Standard Error: 418 + .saturating_add(Weight::from_parts(24_815, 0).saturating_mul(m.into())) + // Standard Error: 408 + .saturating_add(Weight::from_parts(118_520, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 325).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 180).saturating_mul(p.into())) } - // Storage: TechnicalCommittee Voting (r:1 w:1) - // Storage: TechnicalCommittee Members (r:1 w:0) - // Storage: TechnicalCommittee Prime (r:1 w:0) - // Storage: TechnicalCommittee ProposalOf (r:1 w:1) - // Storage: TechnicalCommittee Proposals (r:1 w:1) + /// Storage: TechnicalCommittee Voting (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Members (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Prime (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee ProposalOf (r:1 w:1) + /// Proof Skipped: TechnicalCommittee ProposalOf (max_values: None, max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Proposals (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. @@ -201,28 +280,43 @@ impl pallet_collective::WeightInfo for WeightInfo { /// The range of component `m` is `[4, 100]`. /// The range of component `p` is `[1, 100]`. fn close_approved(b: u32, m: u32, p: u32, ) -> Weight { - // Minimum execution time: 44_517 nanoseconds. - Weight::from_ref_time(45_699_139) - // Standard Error: 71 - .saturating_add(Weight::from_ref_time(2_183).saturating_mul(b.into())) - // Standard Error: 750 - .saturating_add(Weight::from_ref_time(12_186).saturating_mul(m.into())) - // Standard Error: 731 - .saturating_add(Weight::from_ref_time(119_123).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `757 + b * (1 ±0) + m * (64 ±0) + p * (40 ±0)` + // Estimated: `14430 + b * (5 ±0) + m * (330 ±0) + p * (200 ±0)` + // Minimum execution time: 42_902_000 picoseconds. + Weight::from_parts(44_509_967, 0) + .saturating_add(Weight::from_parts(0, 14430)) + // Standard Error: 83 + .saturating_add(Weight::from_parts(2_224, 0).saturating_mul(b.into())) + // Standard Error: 879 + .saturating_add(Weight::from_parts(24_140, 0).saturating_mul(m.into())) + // Standard Error: 857 + .saturating_add(Weight::from_parts(151_097, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 5).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(0, 330).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 200).saturating_mul(p.into())) } - // Storage: TechnicalCommittee Proposals (r:1 w:1) - // Storage: TechnicalCommittee Voting (r:0 w:1) - // Storage: TechnicalCommittee ProposalOf (r:0 w:1) + /// Storage: TechnicalCommittee Proposals (r:1 w:1) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Voting (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: TechnicalCommittee ProposalOf (r:0 w:1) + /// Proof Skipped: TechnicalCommittee ProposalOf (max_values: None, max_size: None, mode: Measured) /// The range of component `p` is `[1, 100]`. /// The range of component `p` is `[1, 100]`. fn disapprove_proposal(p: u32, ) -> Weight { - // Minimum execution time: 20_155 nanoseconds. - Weight::from_ref_time(23_331_853) - // Standard Error: 708 - .saturating_add(Weight::from_ref_time(105_166).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `264 + p * (32 ±0)` + // Estimated: `2277 + p * (96 ±0)` + // Minimum execution time: 16_736_000 picoseconds. + Weight::from_parts(18_556_980, 0) + .saturating_add(Weight::from_parts(0, 2277)) + // Standard Error: 453 + .saturating_add(Weight::from_parts(116_561, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 96).saturating_mul(p.into())) } } diff --git a/runtime/rococo/src/weights/pallet_democracy.rs b/runtime/rococo/src/weights/pallet_democracy.rs index 7af6a2586d26..777c26fc1e2c 100644 --- a/runtime/rococo/src/weights/pallet_democracy.rs +++ b/runtime/rococo/src/weights/pallet_democracy.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_democracy` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -44,219 +45,469 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_democracy`. pub struct WeightInfo(PhantomData); impl pallet_democracy::WeightInfo for WeightInfo { - // Storage: Democracy PublicPropCount (r:1 w:1) - // Storage: Democracy PublicProps (r:1 w:1) - // Storage: Democracy Blacklist (r:1 w:0) - // Storage: Democracy DepositOf (r:0 w:1) + /// Storage: Democracy PublicPropCount (r:1 w:1) + /// Proof: Democracy PublicPropCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Democracy PublicProps (r:1 w:1) + /// Proof: Democracy PublicProps (max_values: Some(1), max_size: Some(16702), added: 17197, mode: MaxEncodedLen) + /// Storage: Democracy Blacklist (r:1 w:0) + /// Proof: Democracy Blacklist (max_values: None, max_size: Some(3238), added: 5713, mode: MaxEncodedLen) + /// Storage: Democracy DepositOf (r:0 w:1) + /// Proof: Democracy DepositOf (max_values: None, max_size: Some(3230), added: 5705, mode: MaxEncodedLen) fn propose() -> Weight { - // Minimum execution time: 45_102 nanoseconds. - Weight::from_ref_time(46_100_000) + // Proof Size summary in bytes: + // Measured: `4768` + // Estimated: `26379` + // Minimum execution time: 36_024_000 picoseconds. + Weight::from_parts(36_432_000, 0) + .saturating_add(Weight::from_parts(0, 26379)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Democracy DepositOf (r:1 w:1) + /// Storage: Democracy DepositOf (r:1 w:1) + /// Proof: Democracy DepositOf (max_values: None, max_size: Some(3230), added: 5705, mode: MaxEncodedLen) fn second() -> Weight { - // Minimum execution time: 42_173 nanoseconds. - Weight::from_ref_time(43_692_000) + // Proof Size summary in bytes: + // Measured: `3523` + // Estimated: `6695` + // Minimum execution time: 33_659_000 picoseconds. + Weight::from_parts(33_991_000, 0) + .saturating_add(Weight::from_parts(0, 6695)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Democracy ReferendumInfoOf (r:1 w:1) - // Storage: Democracy VotingOf (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Democracy ReferendumInfoOf (r:1 w:1) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) + /// Storage: Democracy VotingOf (r:1 w:1) + /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3795), added: 6270, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) fn vote_new() -> Weight { - // Minimum execution time: 52_656 nanoseconds. - Weight::from_ref_time(53_732_000) + // Proof Size summary in bytes: + // Measured: `3399` + // Estimated: `15690` + // Minimum execution time: 45_431_000 picoseconds. + Weight::from_parts(46_035_000, 0) + .saturating_add(Weight::from_parts(0, 15690)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Democracy ReferendumInfoOf (r:1 w:1) - // Storage: Democracy VotingOf (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Democracy ReferendumInfoOf (r:1 w:1) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) + /// Storage: Democracy VotingOf (r:1 w:1) + /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3795), added: 6270, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) fn vote_existing() -> Weight { - // Minimum execution time: 52_725 nanoseconds. - Weight::from_ref_time(53_241_000) + // Proof Size summary in bytes: + // Measured: `3421` + // Estimated: `15690` + // Minimum execution time: 45_080_000 picoseconds. + Weight::from_parts(46_071_000, 0) + .saturating_add(Weight::from_parts(0, 15690)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Democracy ReferendumInfoOf (r:1 w:1) - // Storage: Democracy Cancellations (r:1 w:1) + /// Storage: Democracy ReferendumInfoOf (r:1 w:1) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) + /// Storage: Democracy Cancellations (r:1 w:1) + /// Proof: Democracy Cancellations (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:1 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) fn emergency_cancel() -> Weight { - // Minimum execution time: 22_228 nanoseconds. - Weight::from_ref_time(22_952_000) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) + // Proof Size summary in bytes: + // Measured: `333` + // Estimated: `10682` + // Minimum execution time: 26_871_000 picoseconds. + Weight::from_parts(27_465_000, 0) + .saturating_add(Weight::from_parts(0, 10682)) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Democracy PublicProps (r:1 w:1) - // Storage: Democracy DepositOf (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: Democracy NextExternal (r:1 w:1) - // Storage: Democracy ReferendumInfoOf (r:1 w:1) - // Storage: Democracy Blacklist (r:0 w:1) + /// Storage: Democracy PublicProps (r:1 w:1) + /// Proof: Democracy PublicProps (max_values: Some(1), max_size: Some(16702), added: 17197, mode: MaxEncodedLen) + /// Storage: Democracy DepositOf (r:1 w:1) + /// Proof: Democracy DepositOf (max_values: None, max_size: Some(3230), added: 5705, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:3 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + /// Storage: Democracy NextExternal (r:1 w:1) + /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumInfoOf (r:1 w:1) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) + /// Storage: Democracy Blacklist (r:0 w:1) + /// Proof: Democracy Blacklist (max_values: None, max_size: Some(3238), added: 5713, mode: MaxEncodedLen) fn blacklist() -> Weight { - // Minimum execution time: 82_061 nanoseconds. - Weight::from_ref_time(83_519_000) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(6)) + // Proof Size summary in bytes: + // Measured: `5877` + // Estimated: `42332` + // Minimum execution time: 92_414_000 picoseconds. + Weight::from_parts(93_526_000, 0) + .saturating_add(Weight::from_parts(0, 42332)) + .saturating_add(T::DbWeight::get().reads(8)) + .saturating_add(T::DbWeight::get().writes(7)) } - // Storage: Democracy NextExternal (r:1 w:1) - // Storage: Democracy Blacklist (r:1 w:0) + /// Storage: Democracy NextExternal (r:1 w:1) + /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) + /// Storage: Democracy Blacklist (r:1 w:0) + /// Proof: Democracy Blacklist (max_values: None, max_size: Some(3238), added: 5713, mode: MaxEncodedLen) fn external_propose() -> Weight { - // Minimum execution time: 17_824 nanoseconds. - Weight::from_ref_time(18_278_000) + // Proof Size summary in bytes: + // Measured: `3383` + // Estimated: `8320` + // Minimum execution time: 14_050_000 picoseconds. + Weight::from_parts(14_406_000, 0) + .saturating_add(Weight::from_parts(0, 8320)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Democracy NextExternal (r:0 w:1) + /// Storage: Democracy NextExternal (r:0 w:1) + /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) fn external_propose_majority() -> Weight { - // Minimum execution time: 5_362 nanoseconds. - Weight::from_ref_time(5_542_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_771_000 picoseconds. + Weight::from_parts(3_945_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Democracy NextExternal (r:0 w:1) + /// Storage: Democracy NextExternal (r:0 w:1) + /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) fn external_propose_default() -> Weight { - // Minimum execution time: 5_350 nanoseconds. - Weight::from_ref_time(5_616_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_803_000 picoseconds. + Weight::from_parts(3_970_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Democracy NextExternal (r:1 w:1) - // Storage: Democracy ReferendumCount (r:1 w:1) - // Storage: Democracy ReferendumInfoOf (r:0 w:1) + /// Storage: Democracy NextExternal (r:1 w:1) + /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumCount (r:1 w:1) + /// Proof: Democracy ReferendumCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:1 w:2) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumInfoOf (r:0 w:1) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) fn fast_track() -> Weight { - // Minimum execution time: 21_582 nanoseconds. - Weight::from_ref_time(21_928_000) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(3)) + // Proof Size summary in bytes: + // Measured: `253` + // Estimated: `6624` + // Minimum execution time: 27_895_000 picoseconds. + Weight::from_parts(28_544_000, 0) + .saturating_add(Weight::from_parts(0, 6624)) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: Democracy NextExternal (r:1 w:1) - // Storage: Democracy Blacklist (r:1 w:1) + /// Storage: Democracy NextExternal (r:1 w:1) + /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) + /// Storage: Democracy Blacklist (r:1 w:1) + /// Proof: Democracy Blacklist (max_values: None, max_size: Some(3238), added: 5713, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:1 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) fn veto_external() -> Weight { - // Minimum execution time: 27_966 nanoseconds. - Weight::from_ref_time(28_300_000) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - // Storage: Democracy PublicProps (r:1 w:1) - // Storage: Democracy DepositOf (r:1 w:1) - // Storage: System Account (r:1 w:1) - fn cancel_proposal() -> Weight { - // Minimum execution time: 69_747 nanoseconds. - Weight::from_ref_time(70_803_000) + // Proof Size summary in bytes: + // Measured: `3486` + // Estimated: `11838` + // Minimum execution time: 32_879_000 picoseconds. + Weight::from_parts(33_543_000, 0) + .saturating_add(Weight::from_parts(0, 11838)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Democracy ReferendumInfoOf (r:0 w:1) + /// Storage: Democracy PublicProps (r:1 w:1) + /// Proof: Democracy PublicProps (max_values: Some(1), max_size: Some(16702), added: 17197, mode: MaxEncodedLen) + /// Storage: Democracy DepositOf (r:1 w:1) + /// Proof: Democracy DepositOf (max_values: None, max_size: Some(3230), added: 5705, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:1 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + fn cancel_proposal() -> Weight { + // Proof Size summary in bytes: + // Measured: `5788` + // Estimated: `31993` + // Minimum execution time: 75_590_000 picoseconds. + Weight::from_parts(77_747_000, 0) + .saturating_add(Weight::from_parts(0, 31993)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(4)) + } + /// Storage: Democracy MetadataOf (r:1 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumInfoOf (r:0 w:1) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) fn cancel_referendum() -> Weight { - // Minimum execution time: 14_208 nanoseconds. - Weight::from_ref_time(14_786_000) - .saturating_add(T::DbWeight::get().writes(1)) + // Proof Size summary in bytes: + // Measured: `238` + // Estimated: `3518` + // Minimum execution time: 20_253_000 picoseconds. + Weight::from_parts(20_741_000, 0) + .saturating_add(Weight::from_parts(0, 3518)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Democracy LowestUnbaked (r:1 w:1) - // Storage: Democracy ReferendumCount (r:1 w:0) - // Storage: Democracy ReferendumInfoOf (r:2 w:0) + /// Storage: Democracy LowestUnbaked (r:1 w:1) + /// Proof: Democracy LowestUnbaked (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumCount (r:1 w:0) + /// Proof: Democracy ReferendumCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumInfoOf (r:99 w:0) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) /// The range of component `r` is `[0, 99]`. fn on_initialize_base(r: u32, ) -> Weight { - // Minimum execution time: 6_447 nanoseconds. - Weight::from_ref_time(9_495_812) - // Standard Error: 4_275 - .saturating_add(Weight::from_ref_time(2_150_879).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `211 + r * (86 ±0)` + // Estimated: `3968 + r * (2676 ±0)` + // Minimum execution time: 7_320_000 picoseconds. + Weight::from_parts(10_040_486, 0) + .saturating_add(Weight::from_parts(0, 3968)) + // Standard Error: 5_552 + .saturating_add(Weight::from_parts(2_743_794, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 2676).saturating_mul(r.into())) } - // Storage: Democracy LowestUnbaked (r:1 w:1) - // Storage: Democracy ReferendumCount (r:1 w:0) - // Storage: Democracy LastTabledWasExternal (r:1 w:0) - // Storage: Democracy NextExternal (r:1 w:0) - // Storage: Democracy PublicProps (r:1 w:0) - // Storage: Democracy ReferendumInfoOf (r:2 w:0) + /// Storage: Democracy LowestUnbaked (r:1 w:1) + /// Proof: Democracy LowestUnbaked (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumCount (r:1 w:0) + /// Proof: Democracy ReferendumCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Democracy LastTabledWasExternal (r:1 w:0) + /// Proof: Democracy LastTabledWasExternal (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) + /// Storage: Democracy NextExternal (r:1 w:0) + /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) + /// Storage: Democracy PublicProps (r:1 w:0) + /// Proof: Democracy PublicProps (max_values: Some(1), max_size: Some(16702), added: 17197, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumInfoOf (r:99 w:0) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) /// The range of component `r` is `[0, 99]`. fn on_initialize_base_with_launch_period(r: u32, ) -> Weight { - // Minimum execution time: 8_728 nanoseconds. - Weight::from_ref_time(12_024_568) - // Standard Error: 5_204 - .saturating_add(Weight::from_ref_time(2_158_987).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `211 + r * (86 ±0)` + // Estimated: `25258 + r * (2676 ±0)` + // Minimum execution time: 9_844_000 picoseconds. + Weight::from_parts(13_450_509, 0) + .saturating_add(Weight::from_parts(0, 25258)) + // Standard Error: 9_321 + .saturating_add(Weight::from_parts(2_747_536, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 2676).saturating_mul(r.into())) } - // Storage: Democracy VotingOf (r:3 w:3) - // Storage: Balances Locks (r:1 w:1) - // Storage: Democracy ReferendumInfoOf (r:2 w:2) + /// Storage: Democracy VotingOf (r:3 w:3) + /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3795), added: 6270, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumInfoOf (r:99 w:99) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `r` is `[0, 99]`. fn delegate(r: u32, ) -> Weight { - // Minimum execution time: 43_730 nanoseconds. - Weight::from_ref_time(50_825_189) - // Standard Error: 5_823 - .saturating_add(Weight::from_ref_time(3_149_863).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `763 + r * (108 ±0)` + // Estimated: `25554 + r * (2676 ±0)` + // Minimum execution time: 37_313_000 picoseconds. + Weight::from_parts(43_491_459, 0) + .saturating_add(Weight::from_parts(0, 25554)) + // Standard Error: 7_336 + .saturating_add(Weight::from_parts(3_874_754, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) .saturating_add(T::DbWeight::get().writes(4)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(r.into()))) + .saturating_add(Weight::from_parts(0, 2676).saturating_mul(r.into())) } - // Storage: Democracy VotingOf (r:2 w:2) - // Storage: Democracy ReferendumInfoOf (r:2 w:2) + /// Storage: Democracy VotingOf (r:2 w:2) + /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3795), added: 6270, mode: MaxEncodedLen) + /// Storage: Democracy ReferendumInfoOf (r:99 w:99) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) /// The range of component `r` is `[0, 99]`. fn undelegate(r: u32, ) -> Weight { - // Minimum execution time: 26_463 nanoseconds. - Weight::from_ref_time(29_431_700) - // Standard Error: 5_066 - .saturating_add(Weight::from_ref_time(3_107_920).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `460 + r * (108 ±0)` + // Estimated: `14520 + r * (2676 ±0)` + // Minimum execution time: 21_688_000 picoseconds. + Weight::from_parts(24_058_987, 0) + .saturating_add(Weight::from_parts(0, 14520)) + // Standard Error: 6_136 + .saturating_add(Weight::from_parts(3_860_950, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) .saturating_add(T::DbWeight::get().writes(2)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(r.into()))) + .saturating_add(Weight::from_parts(0, 2676).saturating_mul(r.into())) } - // Storage: Democracy PublicProps (r:0 w:1) + /// Storage: Democracy PublicProps (r:0 w:1) + /// Proof: Democracy PublicProps (max_values: Some(1), max_size: Some(16702), added: 17197, mode: MaxEncodedLen) fn clear_public_proposals() -> Weight { - // Minimum execution time: 5_893 nanoseconds. - Weight::from_ref_time(6_106_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_656_000 picoseconds. + Weight::from_parts(3_768_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Democracy VotingOf (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Democracy VotingOf (r:1 w:1) + /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3795), added: 6270, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `r` is `[0, 99]`. fn unlock_remove(r: u32, ) -> Weight { - // Minimum execution time: 25_613 nanoseconds. - Weight::from_ref_time(33_093_793) - // Standard Error: 1_669 - .saturating_add(Weight::from_ref_time(33_084).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `492` + // Estimated: `15617` + // Minimum execution time: 20_433_000 picoseconds. + Weight::from_parts(26_581_801, 0) + .saturating_add(Weight::from_parts(0, 15617)) + // Standard Error: 1_371 + .saturating_add(Weight::from_parts(22_526, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Democracy VotingOf (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Democracy VotingOf (r:1 w:1) + /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3795), added: 6270, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `r` is `[0, 99]`. fn unlock_set(r: u32, ) -> Weight { - // Minimum execution time: 31_597 nanoseconds. - Weight::from_ref_time(32_687_724) - // Standard Error: 636 - .saturating_add(Weight::from_ref_time(75_534).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `493 + r * (22 ±0)` + // Estimated: `15617` + // Minimum execution time: 24_978_000 picoseconds. + Weight::from_parts(25_966_543, 0) + .saturating_add(Weight::from_parts(0, 15617)) + // Standard Error: 525 + .saturating_add(Weight::from_parts(67_492, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Democracy ReferendumInfoOf (r:1 w:1) - // Storage: Democracy VotingOf (r:1 w:1) + /// Storage: Democracy ReferendumInfoOf (r:1 w:1) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) + /// Storage: Democracy VotingOf (r:1 w:1) + /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3795), added: 6270, mode: MaxEncodedLen) /// The range of component `r` is `[1, 100]`. fn remove_vote(r: u32, ) -> Weight { - // Minimum execution time: 17_420 nanoseconds. - Weight::from_ref_time(19_826_791) - // Standard Error: 876 - .saturating_add(Weight::from_ref_time(76_078).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `695 + r * (26 ±0)` + // Estimated: `10926` + // Minimum execution time: 16_687_000 picoseconds. + Weight::from_parts(19_772_474, 0) + .saturating_add(Weight::from_parts(0, 10926)) + // Standard Error: 1_001 + .saturating_add(Weight::from_parts(77_557, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Democracy ReferendumInfoOf (r:1 w:1) - // Storage: Democracy VotingOf (r:1 w:1) + /// Storage: Democracy ReferendumInfoOf (r:1 w:1) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) + /// Storage: Democracy VotingOf (r:1 w:1) + /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3795), added: 6270, mode: MaxEncodedLen) /// The range of component `r` is `[1, 100]`. fn remove_other_vote(r: u32, ) -> Weight { - // Minimum execution time: 17_285 nanoseconds. - Weight::from_ref_time(19_747_323) - // Standard Error: 941 - .saturating_add(Weight::from_ref_time(77_698).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `695 + r * (26 ±0)` + // Estimated: `10926` + // Minimum execution time: 17_400_000 picoseconds. + Weight::from_parts(19_727_700, 0) + .saturating_add(Weight::from_parts(0, 10926)) + // Standard Error: 1_085 + .saturating_add(Weight::from_parts(78_547, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } + /// Storage: Democracy NextExternal (r:1 w:0) + /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) + /// Storage: Preimage StatusFor (r:1 w:0) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:0 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + fn set_external_metadata() -> Weight { + // Proof Size summary in bytes: + // Measured: `395` + // Estimated: `5173` + // Minimum execution time: 19_330_000 picoseconds. + Weight::from_parts(19_835_000, 0) + .saturating_add(Weight::from_parts(0, 5173)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: Democracy NextExternal (r:1 w:0) + /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:1 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + fn clear_external_metadata() -> Weight { + // Proof Size summary in bytes: + // Measured: `253` + // Estimated: `5135` + // Minimum execution time: 17_530_000 picoseconds. + Weight::from_parts(17_904_000, 0) + .saturating_add(Weight::from_parts(0, 5135)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: Democracy PublicProps (r:1 w:0) + /// Proof: Democracy PublicProps (max_values: Some(1), max_size: Some(16702), added: 17197, mode: MaxEncodedLen) + /// Storage: Preimage StatusFor (r:1 w:0) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:0 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + fn set_proposal_metadata() -> Weight { + // Proof Size summary in bytes: + // Measured: `4927` + // Estimated: `21743` + // Minimum execution time: 34_800_000 picoseconds. + Weight::from_parts(35_384_000, 0) + .saturating_add(Weight::from_parts(0, 21743)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: Democracy PublicProps (r:1 w:0) + /// Proof: Democracy PublicProps (max_values: Some(1), max_size: Some(16702), added: 17197, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:1 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + fn clear_proposal_metadata() -> Weight { + // Proof Size summary in bytes: + // Measured: `4789` + // Estimated: `21705` + // Minimum execution time: 31_767_000 picoseconds. + Weight::from_parts(32_234_000, 0) + .saturating_add(Weight::from_parts(0, 21705)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: Preimage StatusFor (r:1 w:0) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:0 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + fn set_referendum_metadata() -> Weight { + // Proof Size summary in bytes: + // Measured: `216` + // Estimated: `3556` + // Minimum execution time: 16_538_000 picoseconds. + Weight::from_parts(16_936_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: Democracy ReferendumInfoOf (r:1 w:0) + /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(201), added: 2676, mode: MaxEncodedLen) + /// Storage: Democracy MetadataOf (r:1 w:1) + /// Proof: Democracy MetadataOf (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + fn clear_referendum_metadata() -> Weight { + // Proof Size summary in bytes: + // Measured: `269` + // Estimated: `7184` + // Minimum execution time: 19_593_000 picoseconds. + Weight::from_parts(20_167_000, 0) + .saturating_add(Weight::from_parts(0, 7184)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } } diff --git a/runtime/rococo/src/weights/pallet_elections_phragmen.rs b/runtime/rococo/src/weights/pallet_elections_phragmen.rs index 6472acacb811..730e8c1a7bb1 100644 --- a/runtime/rococo/src/weights/pallet_elections_phragmen.rs +++ b/runtime/rococo/src/weights/pallet_elections_phragmen.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_elections_phragmen` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -44,151 +45,257 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_elections_phragmen`. pub struct WeightInfo(PhantomData); impl pallet_elections_phragmen::WeightInfo for WeightInfo { - // Storage: PhragmenElection Candidates (r:1 w:0) - // Storage: PhragmenElection Members (r:1 w:0) - // Storage: PhragmenElection RunnersUp (r:1 w:0) - // Storage: PhragmenElection Voting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: PhragmenElection Candidates (r:1 w:0) + /// Proof Skipped: PhragmenElection Candidates (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Members (r:1 w:0) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection RunnersUp (r:1 w:0) + /// Proof Skipped: PhragmenElection RunnersUp (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Voting (r:1 w:1) + /// Proof Skipped: PhragmenElection Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `v` is `[1, 16]`. - fn vote_equal(_v: u32, ) -> Weight { - // Minimum execution time: 32_371 nanoseconds. - Weight::from_ref_time(36_279_856) + fn vote_equal(v: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `331 + v * (80 ±0)` + // Estimated: `14004 + v * (320 ±0)` + // Minimum execution time: 27_802_000 picoseconds. + Weight::from_parts(30_649_218, 0) + .saturating_add(Weight::from_parts(0, 14004)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 320).saturating_mul(v.into())) } - // Storage: PhragmenElection Candidates (r:1 w:0) - // Storage: PhragmenElection Members (r:1 w:0) - // Storage: PhragmenElection RunnersUp (r:1 w:0) - // Storage: PhragmenElection Voting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: PhragmenElection Candidates (r:1 w:0) + /// Proof Skipped: PhragmenElection Candidates (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Members (r:1 w:0) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection RunnersUp (r:1 w:0) + /// Proof Skipped: PhragmenElection RunnersUp (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Voting (r:1 w:1) + /// Proof Skipped: PhragmenElection Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `v` is `[2, 16]`. fn vote_more(v: u32, ) -> Weight { - // Minimum execution time: 43_151 nanoseconds. - Weight::from_ref_time(44_063_579) - // Standard Error: 5_084 - .saturating_add(Weight::from_ref_time(130_645).saturating_mul(v.into())) + // Proof Size summary in bytes: + // Measured: `299 + v * (80 ±0)` + // Estimated: `13876 + v * (320 ±0)` + // Minimum execution time: 37_035_000 picoseconds. + Weight::from_parts(37_964_172, 0) + .saturating_add(Weight::from_parts(0, 13876)) + // Standard Error: 4_680 + .saturating_add(Weight::from_parts(142_164, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 320).saturating_mul(v.into())) } - // Storage: PhragmenElection Candidates (r:1 w:0) - // Storage: PhragmenElection Members (r:1 w:0) - // Storage: PhragmenElection RunnersUp (r:1 w:0) - // Storage: PhragmenElection Voting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: PhragmenElection Candidates (r:1 w:0) + /// Proof Skipped: PhragmenElection Candidates (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Members (r:1 w:0) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection RunnersUp (r:1 w:0) + /// Proof Skipped: PhragmenElection RunnersUp (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Voting (r:1 w:1) + /// Proof Skipped: PhragmenElection Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `v` is `[2, 16]`. fn vote_less(v: u32, ) -> Weight { - // Minimum execution time: 42_148 nanoseconds. - Weight::from_ref_time(43_777_573) - // Standard Error: 6_625 - .saturating_add(Weight::from_ref_time(160_293).saturating_mul(v.into())) + // Proof Size summary in bytes: + // Measured: `331 + v * (80 ±0)` + // Estimated: `14004 + v * (320 ±0)` + // Minimum execution time: 37_024_000 picoseconds. + Weight::from_parts(38_474_516, 0) + .saturating_add(Weight::from_parts(0, 14004)) + // Standard Error: 4_740 + .saturating_add(Weight::from_parts(83_564, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 320).saturating_mul(v.into())) } - // Storage: PhragmenElection Voting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: PhragmenElection Voting (r:1 w:1) + /// Proof Skipped: PhragmenElection Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) fn remove_voter() -> Weight { - // Minimum execution time: 41_190 nanoseconds. - Weight::from_ref_time(41_621_000) + // Proof Size summary in bytes: + // Measured: `853` + // Estimated: `9082` + // Minimum execution time: 32_730_000 picoseconds. + Weight::from_parts(33_443_000, 0) + .saturating_add(Weight::from_parts(0, 9082)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: PhragmenElection Candidates (r:1 w:1) - // Storage: PhragmenElection Members (r:1 w:0) - // Storage: PhragmenElection RunnersUp (r:1 w:0) + /// Storage: PhragmenElection Candidates (r:1 w:1) + /// Proof Skipped: PhragmenElection Candidates (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Members (r:1 w:0) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection RunnersUp (r:1 w:0) + /// Proof Skipped: PhragmenElection RunnersUp (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `c` is `[1, 1000]`. fn submit_candidacy(c: u32, ) -> Weight { - // Minimum execution time: 37_427 nanoseconds. - Weight::from_ref_time(29_293_841) - // Standard Error: 1_053 - .saturating_add(Weight::from_ref_time(97_420).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `2678 + c * (48 ±0)` + // Estimated: `12483 + c * (144 ±0)` + // Minimum execution time: 29_721_000 picoseconds. + Weight::from_parts(22_278_307, 0) + .saturating_add(Weight::from_parts(0, 12483)) + // Standard Error: 933 + .saturating_add(Weight::from_parts(89_517, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 144).saturating_mul(c.into())) } - // Storage: PhragmenElection Candidates (r:1 w:1) + /// Storage: PhragmenElection Candidates (r:1 w:1) + /// Proof Skipped: PhragmenElection Candidates (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `c` is `[1, 1000]`. fn renounce_candidacy_candidate(c: u32, ) -> Weight { - // Minimum execution time: 33_012 nanoseconds. - Weight::from_ref_time(24_872_179) - // Standard Error: 1_044 - .saturating_add(Weight::from_ref_time(72_609).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `250 + c * (48 ±0)` + // Estimated: `1722 + c * (48 ±0)` + // Minimum execution time: 25_720_000 picoseconds. + Weight::from_parts(18_426_476, 0) + .saturating_add(Weight::from_parts(0, 1722)) + // Standard Error: 916 + .saturating_add(Weight::from_parts(59_445, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 48).saturating_mul(c.into())) } - // Storage: PhragmenElection Members (r:1 w:1) - // Storage: PhragmenElection RunnersUp (r:1 w:1) - // Storage: Council Prime (r:1 w:1) - // Storage: Council Proposals (r:1 w:0) - // Storage: Council Members (r:0 w:1) + /// Storage: PhragmenElection Members (r:1 w:1) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection RunnersUp (r:1 w:1) + /// Proof Skipped: PhragmenElection RunnersUp (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Prime (r:1 w:1) + /// Proof Skipped: Council Prime (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Proposals (r:1 w:0) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Members (r:0 w:1) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) fn renounce_candidacy_members() -> Weight { - // Minimum execution time: 46_468 nanoseconds. - Weight::from_ref_time(47_505_000) + // Proof Size summary in bytes: + // Measured: `2952` + // Estimated: `20700` + // Minimum execution time: 43_167_000 picoseconds. + Weight::from_parts(43_835_000, 0) + .saturating_add(Weight::from_parts(0, 20700)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: PhragmenElection RunnersUp (r:1 w:1) + /// Storage: PhragmenElection RunnersUp (r:1 w:1) + /// Proof Skipped: PhragmenElection RunnersUp (max_values: Some(1), max_size: None, mode: Measured) fn renounce_candidacy_runners_up() -> Weight { - // Minimum execution time: 35_632 nanoseconds. - Weight::from_ref_time(36_854_000) + // Proof Size summary in bytes: + // Measured: `1647` + // Estimated: `3132` + // Minimum execution time: 28_044_000 picoseconds. + Weight::from_parts(28_654_000, 0) + .saturating_add(Weight::from_parts(0, 3132)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Benchmark Override (r:0 w:0) + /// Storage: Benchmark Override (r:0 w:0) + /// Proof Skipped: Benchmark Override (max_values: None, max_size: None, mode: Measured) fn remove_member_without_replacement() -> Weight { - // Minimum execution time: 2_000_000_000 nanoseconds. - Weight::from_ref_time(2_000_000_000_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_000_000_000_000 picoseconds. + Weight::from_parts(2_000_000_000_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } - // Storage: PhragmenElection Members (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: PhragmenElection RunnersUp (r:1 w:1) - // Storage: Council Prime (r:1 w:1) - // Storage: Council Proposals (r:1 w:0) - // Storage: Council Members (r:0 w:1) + /// Storage: PhragmenElection Members (r:1 w:1) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: PhragmenElection RunnersUp (r:1 w:1) + /// Proof Skipped: PhragmenElection RunnersUp (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Prime (r:1 w:1) + /// Proof Skipped: Council Prime (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Proposals (r:1 w:0) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Members (r:0 w:1) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) fn remove_member_with_replacement() -> Weight { - // Minimum execution time: 60_998 nanoseconds. - Weight::from_ref_time(62_539_000) + // Proof Size summary in bytes: + // Measured: `2952` + // Estimated: `24293` + // Minimum execution time: 58_827_000 picoseconds. + Weight::from_parts(59_647_000, 0) + .saturating_add(Weight::from_parts(0, 24293)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: PhragmenElection Voting (r:5001 w:5000) - // Storage: PhragmenElection Members (r:1 w:0) - // Storage: PhragmenElection RunnersUp (r:1 w:0) - // Storage: PhragmenElection Candidates (r:1 w:0) - // Storage: Balances Locks (r:5000 w:5000) - // Storage: System Account (r:5000 w:5000) + /// Storage: PhragmenElection Voting (r:10001 w:10000) + /// Proof Skipped: PhragmenElection Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: PhragmenElection Members (r:1 w:0) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection RunnersUp (r:1 w:0) + /// Proof Skipped: PhragmenElection RunnersUp (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Candidates (r:1 w:0) + /// Proof Skipped: PhragmenElection Candidates (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Balances Locks (r:10000 w:10000) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:10000 w:10000) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `v` is `[5000, 10000]`. /// The range of component `d` is `[0, 5000]`. fn clean_defunct_voters(v: u32, _d: u32, ) -> Weight { - // Minimum execution time: 285_403_894 nanoseconds. - Weight::from_ref_time(285_860_459_000) - // Standard Error: 248_756 - .saturating_add(Weight::from_ref_time(35_708_872).saturating_mul(v.into())) + // Proof Size summary in bytes: + // Measured: `35961 + v * (808 ±0)` + // Estimated: `154848 + v * (12084 ±0)` + // Minimum execution time: 319_115_915_000 picoseconds. + Weight::from_parts(319_715_901_000, 0) + .saturating_add(Weight::from_parts(0, 154848)) + // Standard Error: 270_753 + .saturating_add(Weight::from_parts(38_691_641, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(v.into()))) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(v.into()))) + .saturating_add(Weight::from_parts(0, 12084).saturating_mul(v.into())) } - // Storage: PhragmenElection Candidates (r:1 w:1) - // Storage: PhragmenElection Members (r:1 w:1) - // Storage: PhragmenElection RunnersUp (r:1 w:1) - // Storage: PhragmenElection Voting (r:10001 w:0) - // Storage: Council Proposals (r:1 w:0) - // Storage: PhragmenElection ElectionRounds (r:1 w:1) - // Storage: Council Members (r:0 w:1) - // Storage: Council Prime (r:0 w:1) - // Storage: System Account (r:3 w:3) + /// Storage: PhragmenElection Candidates (r:1 w:1) + /// Proof Skipped: PhragmenElection Candidates (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Members (r:1 w:1) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection RunnersUp (r:1 w:1) + /// Proof Skipped: PhragmenElection RunnersUp (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PhragmenElection Voting (r:10001 w:0) + /// Proof Skipped: PhragmenElection Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: Council Proposals (r:1 w:0) + /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System Account (r:962 w:962) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: PhragmenElection ElectionRounds (r:1 w:1) + /// Proof Skipped: PhragmenElection ElectionRounds (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Members (r:0 w:1) + /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Council Prime (r:0 w:1) + /// Proof Skipped: Council Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `c` is `[1, 1000]`. /// The range of component `v` is `[1, 10000]`. /// The range of component `e` is `[10000, 160000]`. fn election_phragmen(c: u32, v: u32, e: u32, ) -> Weight { - // Minimum execution time: 29_683_290 nanoseconds. - Weight::from_ref_time(29_810_601_000) - // Standard Error: 548_695 - .saturating_add(Weight::from_ref_time(46_375_520).saturating_mul(v.into())) - // Standard Error: 35_211 - .saturating_add(Weight::from_ref_time(2_381_861).saturating_mul(e.into())) + // Proof Size summary in bytes: + // Measured: `0 + v * (607 ±0) + e * (28 ±0)` + // Estimated: `4839041 + v * (5481 ±4) + e * (123 ±0) + c * (2560 ±0)` + // Minimum execution time: 32_136_857_000 picoseconds. + Weight::from_parts(32_218_284_000, 0) + .saturating_add(Weight::from_parts(0, 4839041)) + // Standard Error: 544_904 + .saturating_add(Weight::from_parts(42_452_598, 0).saturating_mul(v.into())) + // Standard Error: 34_968 + .saturating_add(Weight::from_parts(2_365_653, 0).saturating_mul(e.into())) .saturating_add(T::DbWeight::get().reads(265)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(c.into()))) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(v.into()))) .saturating_add(T::DbWeight::get().writes(6)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(c.into()))) + .saturating_add(Weight::from_parts(0, 5481).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(0, 123).saturating_mul(e.into())) + .saturating_add(Weight::from_parts(0, 2560).saturating_mul(c.into())) } } diff --git a/runtime/rococo/src/weights/pallet_identity.rs b/runtime/rococo/src/weights/pallet_identity.rs index 17a411e09668..1b648b103e92 100644 --- a/runtime/rococo/src/weights/pallet_identity.rs +++ b/runtime/rococo/src/weights/pallet_identity.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_identity` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -44,209 +45,303 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_identity`. pub struct WeightInfo(PhantomData); impl pallet_identity::WeightInfo for WeightInfo { - // Storage: Identity Registrars (r:1 w:1) + /// Storage: Identity Registrars (r:1 w:1) + /// Proof: Identity Registrars (max_values: Some(1), max_size: Some(1141), added: 1636, mode: MaxEncodedLen) /// The range of component `r` is `[1, 19]`. fn add_registrar(r: u32, ) -> Weight { - // Minimum execution time: 17_581 nanoseconds. - Weight::from_ref_time(19_890_660) - // Standard Error: 8_046 - .saturating_add(Weight::from_ref_time(132_069).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `32 + r * (57 ±0)` + // Estimated: `2626` + // Minimum execution time: 13_192_000 picoseconds. + Weight::from_parts(13_653_242, 0) + .saturating_add(Weight::from_parts(0, 2626)) + // Standard Error: 1_766 + .saturating_add(Weight::from_parts(103_771, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity IdentityOf (r:1 w:1) + /// Storage: Identity IdentityOf (r:1 w:1) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) /// The range of component `r` is `[1, 20]`. /// The range of component `x` is `[0, 100]`. fn set_identity(r: u32, x: u32, ) -> Weight { - // Minimum execution time: 37_972 nanoseconds. - Weight::from_ref_time(37_428_271) - // Standard Error: 4_326 - .saturating_add(Weight::from_ref_time(84_736).saturating_mul(r.into())) - // Standard Error: 844 - .saturating_add(Weight::from_ref_time(359_416).saturating_mul(x.into())) + // Proof Size summary in bytes: + // Measured: `442 + r * (5 ±0)` + // Estimated: `11003` + // Minimum execution time: 30_262_000 picoseconds. + Weight::from_parts(30_801_461, 0) + .saturating_add(Weight::from_parts(0, 11003)) + // Standard Error: 3_458 + .saturating_add(Weight::from_parts(26_704, 0).saturating_mul(r.into())) + // Standard Error: 674 + .saturating_add(Weight::from_parts(447_877, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity IdentityOf (r:1 w:0) - // Storage: Identity SubsOf (r:1 w:1) - // Storage: Identity SuperOf (r:2 w:2) + /// Storage: Identity IdentityOf (r:1 w:0) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) + /// Storage: Identity SubsOf (r:1 w:1) + /// Proof: Identity SubsOf (max_values: None, max_size: Some(3258), added: 5733, mode: MaxEncodedLen) + /// Storage: Identity SuperOf (r:100 w:100) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) /// The range of component `s` is `[0, 100]`. fn set_subs_new(s: u32, ) -> Weight { - // Minimum execution time: 11_434 nanoseconds. - Weight::from_ref_time(30_956_114) - // Standard Error: 5_671 - .saturating_add(Weight::from_ref_time(2_281_000).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `101` + // Estimated: `18716 + s * (2589 ±0)` + // Minimum execution time: 9_694_000 picoseconds. + Weight::from_parts(22_982_420, 0) + .saturating_add(Weight::from_parts(0, 18716)) + // Standard Error: 5_658 + .saturating_add(Weight::from_parts(2_695_187, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(s.into()))) .saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) + .saturating_add(Weight::from_parts(0, 2589).saturating_mul(s.into())) } - // Storage: Identity IdentityOf (r:1 w:0) - // Storage: Identity SubsOf (r:1 w:1) - // Storage: Identity SuperOf (r:0 w:2) + /// Storage: Identity IdentityOf (r:1 w:0) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) + /// Storage: Identity SubsOf (r:1 w:1) + /// Proof: Identity SubsOf (max_values: None, max_size: Some(3258), added: 5733, mode: MaxEncodedLen) + /// Storage: Identity SuperOf (r:0 w:100) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) /// The range of component `p` is `[0, 100]`. fn set_subs_old(p: u32, ) -> Weight { - // Minimum execution time: 11_486 nanoseconds. - Weight::from_ref_time(30_108_725) - // Standard Error: 4_786 - .saturating_add(Weight::from_ref_time(1_002_668).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `194 + p * (32 ±0)` + // Estimated: `17726` + // Minimum execution time: 9_357_000 picoseconds. + Weight::from_parts(22_219_542, 0) + .saturating_add(Weight::from_parts(0, 17726)) + // Standard Error: 3_167 + .saturating_add(Weight::from_parts(1_080_258, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) } - // Storage: Identity SubsOf (r:1 w:1) - // Storage: Identity IdentityOf (r:1 w:1) - // Storage: Identity SuperOf (r:0 w:100) + /// Storage: Identity SubsOf (r:1 w:1) + /// Proof: Identity SubsOf (max_values: None, max_size: Some(3258), added: 5733, mode: MaxEncodedLen) + /// Storage: Identity IdentityOf (r:1 w:1) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) + /// Storage: Identity SuperOf (r:0 w:100) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) /// The range of component `r` is `[1, 20]`. /// The range of component `s` is `[0, 100]`. /// The range of component `x` is `[0, 100]`. fn clear_identity(r: u32, s: u32, x: u32, ) -> Weight { - // Minimum execution time: 54_704 nanoseconds. - Weight::from_ref_time(40_527_327) - // Standard Error: 5_343 - .saturating_add(Weight::from_ref_time(11_312).saturating_mul(r.into())) - // Standard Error: 1_043 - .saturating_add(Weight::from_ref_time(946_143).saturating_mul(s.into())) - // Standard Error: 1_043 - .saturating_add(Weight::from_ref_time(179_728).saturating_mul(x.into())) + // Proof Size summary in bytes: + // Measured: `469 + r * (5 ±0) + s * (32 ±0) + x * (66 ±0)` + // Estimated: `17726` + // Minimum execution time: 51_103_000 picoseconds. + Weight::from_parts(29_467_633, 0) + .saturating_add(Weight::from_parts(0, 17726)) + // Standard Error: 5_548 + .saturating_add(Weight::from_parts(58_749, 0).saturating_mul(r.into())) + // Standard Error: 1_083 + .saturating_add(Weight::from_parts(1_075_209, 0).saturating_mul(s.into())) + // Standard Error: 1_083 + .saturating_add(Weight::from_parts(237_825, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) } - // Storage: Identity Registrars (r:1 w:0) - // Storage: Identity IdentityOf (r:1 w:1) + /// Storage: Identity Registrars (r:1 w:0) + /// Proof: Identity Registrars (max_values: Some(1), max_size: Some(1141), added: 1636, mode: MaxEncodedLen) + /// Storage: Identity IdentityOf (r:1 w:1) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) /// The range of component `r` is `[1, 20]`. /// The range of component `x` is `[0, 100]`. fn request_judgement(r: u32, x: u32, ) -> Weight { - // Minimum execution time: 39_551 nanoseconds. - Weight::from_ref_time(37_659_487) - // Standard Error: 4_624 - .saturating_add(Weight::from_ref_time(128_213).saturating_mul(r.into())) - // Standard Error: 902 - .saturating_add(Weight::from_ref_time(389_168).saturating_mul(x.into())) + // Proof Size summary in bytes: + // Measured: `367 + r * (57 ±0) + x * (66 ±0)` + // Estimated: `13629` + // Minimum execution time: 31_611_000 picoseconds. + Weight::from_parts(30_743_359, 0) + .saturating_add(Weight::from_parts(0, 13629)) + // Standard Error: 4_043 + .saturating_add(Weight::from_parts(77_567, 0).saturating_mul(r.into())) + // Standard Error: 788 + .saturating_add(Weight::from_parts(469_091, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity IdentityOf (r:1 w:1) + /// Storage: Identity IdentityOf (r:1 w:1) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) /// The range of component `r` is `[1, 20]`. /// The range of component `x` is `[0, 100]`. - fn cancel_request(r: u32, x: u32, ) -> Weight { - // Minimum execution time: 36_041 nanoseconds. - Weight::from_ref_time(36_214_401) - // Standard Error: 3_914 - .saturating_add(Weight::from_ref_time(38_342).saturating_mul(r.into())) - // Standard Error: 763 - .saturating_add(Weight::from_ref_time(377_992).saturating_mul(x.into())) + fn cancel_request(_r: u32, x: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `398 + x * (66 ±0)` + // Estimated: `11003` + // Minimum execution time: 28_126_000 picoseconds. + Weight::from_parts(29_459_368, 0) + .saturating_add(Weight::from_parts(0, 11003)) + // Standard Error: 1_597 + .saturating_add(Weight::from_parts(479_424, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity Registrars (r:1 w:1) + /// Storage: Identity Registrars (r:1 w:1) + /// Proof: Identity Registrars (max_values: Some(1), max_size: Some(1141), added: 1636, mode: MaxEncodedLen) /// The range of component `r` is `[1, 19]`. fn set_fee(r: u32, ) -> Weight { - // Minimum execution time: 10_144 nanoseconds. - Weight::from_ref_time(10_854_119) - // Standard Error: 1_971 - .saturating_add(Weight::from_ref_time(142_648).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `89 + r * (57 ±0)` + // Estimated: `2626` + // Minimum execution time: 8_177_000 picoseconds. + Weight::from_parts(8_618_386, 0) + .saturating_add(Weight::from_parts(0, 2626)) + // Standard Error: 1_462 + .saturating_add(Weight::from_parts(84_495, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity Registrars (r:1 w:1) + /// Storage: Identity Registrars (r:1 w:1) + /// Proof: Identity Registrars (max_values: Some(1), max_size: Some(1141), added: 1636, mode: MaxEncodedLen) /// The range of component `r` is `[1, 19]`. fn set_account_id(r: u32, ) -> Weight { - // Minimum execution time: 10_128 nanoseconds. - Weight::from_ref_time(11_440_965) - // Standard Error: 3_587 - .saturating_add(Weight::from_ref_time(101_559).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `89 + r * (57 ±0)` + // Estimated: `2626` + // Minimum execution time: 8_035_000 picoseconds. + Weight::from_parts(8_549_839, 0) + .saturating_add(Weight::from_parts(0, 2626)) + // Standard Error: 1_225 + .saturating_add(Weight::from_parts(86_358, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity Registrars (r:1 w:1) + /// Storage: Identity Registrars (r:1 w:1) + /// Proof: Identity Registrars (max_values: Some(1), max_size: Some(1141), added: 1636, mode: MaxEncodedLen) /// The range of component `r` is `[1, 19]`. fn set_fields(r: u32, ) -> Weight { - // Minimum execution time: 9_953 nanoseconds. - Weight::from_ref_time(10_934_038) - // Standard Error: 2_412 - .saturating_add(Weight::from_ref_time(132_052).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `89 + r * (57 ±0)` + // Estimated: `2626` + // Minimum execution time: 7_931_000 picoseconds. + Weight::from_parts(8_519_329, 0) + .saturating_add(Weight::from_parts(0, 2626)) + // Standard Error: 1_169 + .saturating_add(Weight::from_parts(98_094, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity Registrars (r:1 w:0) - // Storage: Identity IdentityOf (r:1 w:1) + /// Storage: Identity Registrars (r:1 w:0) + /// Proof: Identity Registrars (max_values: Some(1), max_size: Some(1141), added: 1636, mode: MaxEncodedLen) + /// Storage: Identity IdentityOf (r:1 w:1) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) /// The range of component `r` is `[1, 19]`. /// The range of component `x` is `[0, 100]`. fn provide_judgement(r: u32, x: u32, ) -> Weight { - // Minimum execution time: 29_702 nanoseconds. - Weight::from_ref_time(30_298_846) - // Standard Error: 5_501 - .saturating_add(Weight::from_ref_time(58_613).saturating_mul(r.into())) - // Standard Error: 1_017 - .saturating_add(Weight::from_ref_time(636_435).saturating_mul(x.into())) + // Proof Size summary in bytes: + // Measured: `445 + r * (57 ±0) + x * (66 ±0)` + // Estimated: `13629` + // Minimum execution time: 24_273_000 picoseconds. + Weight::from_parts(24_510_686, 0) + .saturating_add(Weight::from_parts(0, 13629)) + // Standard Error: 4_826 + .saturating_add(Weight::from_parts(49_682, 0).saturating_mul(r.into())) + // Standard Error: 892 + .saturating_add(Weight::from_parts(736_058, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity SubsOf (r:1 w:1) - // Storage: Identity IdentityOf (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: Identity SuperOf (r:0 w:100) + /// Storage: Identity SubsOf (r:1 w:1) + /// Proof: Identity SubsOf (max_values: None, max_size: Some(3258), added: 5733, mode: MaxEncodedLen) + /// Storage: Identity IdentityOf (r:1 w:1) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Identity SuperOf (r:0 w:100) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) /// The range of component `r` is `[1, 20]`. /// The range of component `s` is `[0, 100]`. /// The range of component `x` is `[0, 100]`. - fn kill_identity(r: u32, s: u32, x: u32, ) -> Weight { - // Minimum execution time: 67_284 nanoseconds. - Weight::from_ref_time(50_824_327) - // Standard Error: 4_969 - .saturating_add(Weight::from_ref_time(92_429).saturating_mul(r.into())) - // Standard Error: 970 - .saturating_add(Weight::from_ref_time(955_284).saturating_mul(s.into())) - // Standard Error: 970 - .saturating_add(Weight::from_ref_time(180_077).saturating_mul(x.into())) + fn kill_identity(_r: u32, s: u32, x: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `676 + r * (5 ±0) + s * (32 ±0) + x * (66 ±0)` + // Estimated: `21319` + // Minimum execution time: 64_938_000 picoseconds. + Weight::from_parts(45_726_556, 0) + .saturating_add(Weight::from_parts(0, 21319)) + // Standard Error: 1_031 + .saturating_add(Weight::from_parts(1_078_479, 0).saturating_mul(s.into())) + // Standard Error: 1_031 + .saturating_add(Weight::from_parts(226_148, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) } - // Storage: Identity IdentityOf (r:1 w:0) - // Storage: Identity SuperOf (r:1 w:1) - // Storage: Identity SubsOf (r:1 w:1) + /// Storage: Identity IdentityOf (r:1 w:0) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) + /// Storage: Identity SuperOf (r:1 w:1) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) + /// Storage: Identity SubsOf (r:1 w:1) + /// Proof: Identity SubsOf (max_values: None, max_size: Some(3258), added: 5733, mode: MaxEncodedLen) /// The range of component `s` is `[0, 99]`. fn add_sub(s: u32, ) -> Weight { - // Minimum execution time: 33_868 nanoseconds. - Weight::from_ref_time(39_975_173) - // Standard Error: 1_674 - .saturating_add(Weight::from_ref_time(82_318).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `475 + s * (36 ±0)` + // Estimated: `21305` + // Minimum execution time: 27_585_000 picoseconds. + Weight::from_parts(32_218_612, 0) + .saturating_add(Weight::from_parts(0, 21305)) + // Standard Error: 1_399 + .saturating_add(Weight::from_parts(64_056, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Identity IdentityOf (r:1 w:0) - // Storage: Identity SuperOf (r:1 w:1) + /// Storage: Identity IdentityOf (r:1 w:0) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) + /// Storage: Identity SuperOf (r:1 w:1) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) /// The range of component `s` is `[1, 100]`. fn rename_sub(s: u32, ) -> Weight { - // Minimum execution time: 15_257 nanoseconds. - Weight::from_ref_time(18_187_947) - // Standard Error: 1_023 - .saturating_add(Weight::from_ref_time(26_257).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `591 + s * (3 ±0)` + // Estimated: `14582` + // Minimum execution time: 13_351_000 picoseconds. + Weight::from_parts(15_336_119, 0) + .saturating_add(Weight::from_parts(0, 14582)) + // Standard Error: 585 + .saturating_add(Weight::from_parts(17_732, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity IdentityOf (r:1 w:0) - // Storage: Identity SuperOf (r:1 w:1) - // Storage: Identity SubsOf (r:1 w:1) + /// Storage: Identity IdentityOf (r:1 w:0) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) + /// Storage: Identity SuperOf (r:1 w:1) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) + /// Storage: Identity SubsOf (r:1 w:1) + /// Proof: Identity SubsOf (max_values: None, max_size: Some(3258), added: 5733, mode: MaxEncodedLen) /// The range of component `s` is `[1, 100]`. fn remove_sub(s: u32, ) -> Weight { - // Minimum execution time: 37_982 nanoseconds. - Weight::from_ref_time(42_035_528) - // Standard Error: 1_448 - .saturating_add(Weight::from_ref_time(62_243).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `638 + s * (35 ±0)` + // Estimated: `21305` + // Minimum execution time: 31_334_000 picoseconds. + Weight::from_parts(35_743_451, 0) + .saturating_add(Weight::from_parts(0, 21305)) + // Standard Error: 1_802 + .saturating_add(Weight::from_parts(30_575, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Identity SuperOf (r:1 w:1) - // Storage: Identity SubsOf (r:1 w:1) + /// Storage: Identity SuperOf (r:1 w:1) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) + /// Storage: Identity SubsOf (r:1 w:1) + /// Proof: Identity SubsOf (max_values: None, max_size: Some(3258), added: 5733, mode: MaxEncodedLen) /// The range of component `s` is `[0, 99]`. fn quit_sub(s: u32, ) -> Weight { - // Minimum execution time: 26_843 nanoseconds. - Weight::from_ref_time(30_988_644) - // Standard Error: 2_122 - .saturating_add(Weight::from_ref_time(65_305).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `564 + s * (37 ±0)` + // Estimated: `10302` + // Minimum execution time: 20_828_000 picoseconds. + Weight::from_parts(23_493_504, 0) + .saturating_add(Weight::from_parts(0, 10302)) + // Standard Error: 1_011 + .saturating_add(Weight::from_parts(57_939, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } diff --git a/runtime/rococo/src/weights/pallet_im_online.rs b/runtime/rococo/src/weights/pallet_im_online.rs index 73ca83deed21..40721bfff195 100644 --- a/runtime/rococo/src/weights/pallet_im_online.rs +++ b/runtime/rococo/src/weights/pallet_im_online.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_im_online` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -44,22 +45,34 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_im_online`. pub struct WeightInfo(PhantomData); impl pallet_im_online::WeightInfo for WeightInfo { - // Storage: Session Validators (r:1 w:0) - // Storage: Session CurrentIndex (r:1 w:0) - // Storage: ImOnline ReceivedHeartbeats (r:1 w:1) - // Storage: ImOnline AuthoredBlocks (r:1 w:0) - // Storage: ImOnline Keys (r:1 w:0) - // Storage: unknown [0x39e295d143ed41353167609a3d816584] (r:1 w:0) + /// Storage: Session Validators (r:1 w:0) + /// Proof Skipped: Session Validators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Session CurrentIndex (r:1 w:0) + /// Proof Skipped: Session CurrentIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ImOnline Keys (r:1 w:0) + /// Proof: ImOnline Keys (max_values: Some(1), max_size: Some(320002), added: 320497, mode: MaxEncodedLen) + /// Storage: unknown `0x39e295d143ed41353167609a3d816584` (r:1 w:0) + /// Proof Skipped: unknown `0x39e295d143ed41353167609a3d816584` (r:1 w:0) + /// Storage: ImOnline ReceivedHeartbeats (r:1 w:1) + /// Proof: ImOnline ReceivedHeartbeats (max_values: None, max_size: Some(10021032), added: 10023507, mode: MaxEncodedLen) + /// Storage: ImOnline AuthoredBlocks (r:1 w:0) + /// Proof: ImOnline AuthoredBlocks (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) /// The range of component `k` is `[1, 1000]`. /// The range of component `e` is `[1, 100]`. fn validate_unsigned_and_then_heartbeat(k: u32, e: u32, ) -> Weight { - // Minimum execution time: 99_004 nanoseconds. - Weight::from_ref_time(78_439_877) - // Standard Error: 317 - .saturating_add(Weight::from_ref_time(26_717).saturating_mul(k.into())) - // Standard Error: 3_195 - .saturating_add(Weight::from_ref_time(335_732).saturating_mul(e.into())) + // Proof Size summary in bytes: + // Measured: `394 + k * (32 ±0)` + // Estimated: `10353601 + k * (96 ±0) + e * (35 ±0)` + // Minimum execution time: 93_434_000 picoseconds. + Weight::from_parts(74_361_477, 0) + .saturating_add(Weight::from_parts(0, 10353601)) + // Standard Error: 254 + .saturating_add(Weight::from_parts(22_539, 0).saturating_mul(k.into())) + // Standard Error: 2_560 + .saturating_add(Weight::from_parts(412_356, 0).saturating_mul(e.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 96).saturating_mul(k.into())) + .saturating_add(Weight::from_parts(0, 35).saturating_mul(e.into())) } } diff --git a/runtime/rococo/src/weights/pallet_indices.rs b/runtime/rococo/src/weights/pallet_indices.rs index 0240362a3ece..2cccda816973 100644 --- a/runtime/rococo/src/weights/pallet_indices.rs +++ b/runtime/rococo/src/weights/pallet_indices.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_indices` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -44,40 +45,67 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_indices`. pub struct WeightInfo(PhantomData); impl pallet_indices::WeightInfo for WeightInfo { - // Storage: Indices Accounts (r:1 w:1) + /// Storage: Indices Accounts (r:1 w:1) + /// Proof: Indices Accounts (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) fn claim() -> Weight { - // Minimum execution time: 26_751 nanoseconds. - Weight::from_ref_time(27_231_000) + // Proof Size summary in bytes: + // Measured: `142` + // Estimated: `3534` + // Minimum execution time: 20_507_000 picoseconds. + Weight::from_parts(20_863_000, 0) + .saturating_add(Weight::from_parts(0, 3534)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Indices Accounts (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Indices Accounts (r:1 w:1) + /// Proof: Indices Accounts (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn transfer() -> Weight { - // Minimum execution time: 34_082 nanoseconds. - Weight::from_ref_time(34_626_000) + // Proof Size summary in bytes: + // Measured: `341` + // Estimated: `7127` + // Minimum execution time: 26_495_000 picoseconds. + Weight::from_parts(26_757_000, 0) + .saturating_add(Weight::from_parts(0, 7127)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Indices Accounts (r:1 w:1) + /// Storage: Indices Accounts (r:1 w:1) + /// Proof: Indices Accounts (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) fn free() -> Weight { - // Minimum execution time: 28_172 nanoseconds. - Weight::from_ref_time(28_514_000) + // Proof Size summary in bytes: + // Measured: `238` + // Estimated: `3534` + // Minimum execution time: 22_166_000 picoseconds. + Weight::from_parts(22_505_000, 0) + .saturating_add(Weight::from_parts(0, 3534)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Indices Accounts (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Indices Accounts (r:1 w:1) + /// Proof: Indices Accounts (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn force_transfer() -> Weight { - // Minimum execution time: 28_352 nanoseconds. - Weight::from_ref_time(28_863_000) + // Proof Size summary in bytes: + // Measured: `341` + // Estimated: `7127` + // Minimum execution time: 25_184_000 picoseconds. + Weight::from_parts(25_714_000, 0) + .saturating_add(Weight::from_parts(0, 7127)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Indices Accounts (r:1 w:1) + /// Storage: Indices Accounts (r:1 w:1) + /// Proof: Indices Accounts (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) fn freeze() -> Weight { - // Minimum execution time: 33_221 nanoseconds. - Weight::from_ref_time(34_119_000) + // Proof Size summary in bytes: + // Measured: `238` + // Estimated: `3534` + // Minimum execution time: 24_138_000 picoseconds. + Weight::from_parts(24_531_000, 0) + .saturating_add(Weight::from_parts(0, 3534)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/rococo/src/weights/pallet_membership.rs b/runtime/rococo/src/weights/pallet_membership.rs index 8bfbcdceee08..8fa5b12331ca 100644 --- a/runtime/rococo/src/weights/pallet_membership.rs +++ b/runtime/rococo/src/weights/pallet_membership.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_membership` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -44,95 +45,158 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_membership`. pub struct WeightInfo(PhantomData); impl pallet_membership::WeightInfo for WeightInfo { - // Storage: TechnicalMembership Members (r:1 w:1) - // Storage: TechnicalCommittee Proposals (r:1 w:0) - // Storage: TechnicalCommittee Members (r:0 w:1) - // Storage: TechnicalCommittee Prime (r:0 w:1) + /// Storage: TechnicalMembership Members (r:1 w:1) + /// Proof: TechnicalMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Proposals (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Members (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Prime (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[1, 99]`. fn add_member(m: u32, ) -> Weight { - // Minimum execution time: 21_136 nanoseconds. - Weight::from_ref_time(22_199_184) - // Standard Error: 775 - .saturating_add(Weight::from_ref_time(37_798).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `140 + m * (64 ±0)` + // Estimated: `6589 + m * (192 ±0)` + // Minimum execution time: 16_897_000 picoseconds. + Weight::from_parts(18_148_525, 0) + .saturating_add(Weight::from_parts(0, 6589)) + // Standard Error: 502 + .saturating_add(Weight::from_parts(36_489, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 192).saturating_mul(m.into())) } - // Storage: TechnicalMembership Members (r:1 w:1) - // Storage: TechnicalCommittee Proposals (r:1 w:0) - // Storage: TechnicalMembership Prime (r:1 w:0) - // Storage: TechnicalCommittee Members (r:0 w:1) - // Storage: TechnicalCommittee Prime (r:0 w:1) + /// Storage: TechnicalMembership Members (r:1 w:1) + /// Proof: TechnicalMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Proposals (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalMembership Prime (r:1 w:0) + /// Proof: TechnicalMembership Prime (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Members (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Prime (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[2, 100]`. fn remove_member(m: u32, ) -> Weight { - // Minimum execution time: 23_685 nanoseconds. - Weight::from_ref_time(24_466_367) - // Standard Error: 472 - .saturating_add(Weight::from_ref_time(34_991).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `244 + m * (64 ±0)` + // Estimated: `8418 + m * (192 ±0)` + // Minimum execution time: 20_059_000 picoseconds. + Weight::from_parts(20_896_387, 0) + .saturating_add(Weight::from_parts(0, 8418)) + // Standard Error: 597 + .saturating_add(Weight::from_parts(32_133, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 192).saturating_mul(m.into())) } - // Storage: TechnicalMembership Members (r:1 w:1) - // Storage: TechnicalCommittee Proposals (r:1 w:0) - // Storage: TechnicalMembership Prime (r:1 w:0) - // Storage: TechnicalCommittee Members (r:0 w:1) - // Storage: TechnicalCommittee Prime (r:0 w:1) + /// Storage: TechnicalMembership Members (r:1 w:1) + /// Proof: TechnicalMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Proposals (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalMembership Prime (r:1 w:0) + /// Proof: TechnicalMembership Prime (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Members (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Prime (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[2, 100]`. fn swap_member(m: u32, ) -> Weight { - // Minimum execution time: 23_333 nanoseconds. - Weight::from_ref_time(24_424_170) - // Standard Error: 560 - .saturating_add(Weight::from_ref_time(51_782).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `244 + m * (64 ±0)` + // Estimated: `8418 + m * (192 ±0)` + // Minimum execution time: 19_908_000 picoseconds. + Weight::from_parts(20_863_443, 0) + .saturating_add(Weight::from_parts(0, 8418)) + // Standard Error: 568 + .saturating_add(Weight::from_parts(54_564, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 192).saturating_mul(m.into())) } - // Storage: TechnicalMembership Members (r:1 w:1) - // Storage: TechnicalCommittee Proposals (r:1 w:0) - // Storage: TechnicalMembership Prime (r:1 w:0) - // Storage: TechnicalCommittee Members (r:0 w:1) - // Storage: TechnicalCommittee Prime (r:0 w:1) + /// Storage: TechnicalMembership Members (r:1 w:1) + /// Proof: TechnicalMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Proposals (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalMembership Prime (r:1 w:0) + /// Proof: TechnicalMembership Prime (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Members (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Prime (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[1, 100]`. fn reset_member(m: u32, ) -> Weight { - // Minimum execution time: 23_020 nanoseconds. - Weight::from_ref_time(24_181_199) - // Standard Error: 704 - .saturating_add(Weight::from_ref_time(167_335).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `244 + m * (64 ±0)` + // Estimated: `8418 + m * (192 ±0)` + // Minimum execution time: 21_131_000 picoseconds. + Weight::from_parts(21_440_585, 0) + .saturating_add(Weight::from_parts(0, 8418)) + // Standard Error: 758 + .saturating_add(Weight::from_parts(161_783, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 192).saturating_mul(m.into())) } - // Storage: TechnicalMembership Members (r:1 w:1) - // Storage: TechnicalCommittee Proposals (r:1 w:0) - // Storage: TechnicalMembership Prime (r:1 w:1) - // Storage: TechnicalCommittee Members (r:0 w:1) - // Storage: TechnicalCommittee Prime (r:0 w:1) + /// Storage: TechnicalMembership Members (r:1 w:1) + /// Proof: TechnicalMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Proposals (r:1 w:0) + /// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalMembership Prime (r:1 w:1) + /// Proof: TechnicalMembership Prime (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Members (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TechnicalCommittee Prime (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[1, 100]`. fn change_key(m: u32, ) -> Weight { - // Minimum execution time: 24_297 nanoseconds. - Weight::from_ref_time(25_086_241) - // Standard Error: 538 - .saturating_add(Weight::from_ref_time(50_159).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `244 + m * (64 ±0)` + // Estimated: `8418 + m * (192 ±0)` + // Minimum execution time: 20_061_000 picoseconds. + Weight::from_parts(21_594_276, 0) + .saturating_add(Weight::from_parts(0, 8418)) + // Standard Error: 774 + .saturating_add(Weight::from_parts(48_882, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(4)) + .saturating_add(Weight::from_parts(0, 192).saturating_mul(m.into())) } - // Storage: TechnicalMembership Members (r:1 w:0) - // Storage: TechnicalMembership Prime (r:0 w:1) - // Storage: TechnicalCommittee Prime (r:0 w:1) + /// Storage: TechnicalMembership Members (r:1 w:0) + /// Proof: TechnicalMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) + /// Storage: TechnicalMembership Prime (r:0 w:1) + /// Proof: TechnicalMembership Prime (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Prime (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[1, 100]`. fn set_prime(m: u32, ) -> Weight { - // Minimum execution time: 8_962 nanoseconds. - Weight::from_ref_time(9_315_767) - // Standard Error: 206 - .saturating_add(Weight::from_ref_time(10_404).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `32 + m * (32 ±0)` + // Estimated: `4719 + m * (32 ±0)` + // Minimum execution time: 7_835_000 picoseconds. + Weight::from_parts(8_386_160, 0) + .saturating_add(Weight::from_parts(0, 4719)) + // Standard Error: 210 + .saturating_add(Weight::from_parts(10_190, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) } - // Storage: TechnicalMembership Prime (r:0 w:1) - // Storage: TechnicalCommittee Prime (r:0 w:1) + /// Storage: TechnicalMembership Prime (r:0 w:1) + /// Proof: TechnicalMembership Prime (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: TechnicalCommittee Prime (r:0 w:1) + /// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[1, 100]`. fn clear_prime(m: u32, ) -> Weight { - // Minimum execution time: 5_438 nanoseconds. - Weight::from_ref_time(5_757_911) - // Standard Error: 157 - .saturating_add(Weight::from_ref_time(605).saturating_mul(m.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_217_000 picoseconds. + Weight::from_parts(3_462_254, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 91 + .saturating_add(Weight::from_parts(716, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().writes(2)) } } diff --git a/runtime/rococo/src/weights/pallet_multisig.rs b/runtime/rococo/src/weights/pallet_multisig.rs index dae6c75886b4..2ee8a9e12911 100644 --- a/runtime/rococo/src/weights/pallet_multisig.rs +++ b/runtime/rococo/src/weights/pallet_multisig.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_multisig` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -46,80 +47,113 @@ pub struct WeightInfo(PhantomData); impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `z` is `[0, 10000]`. fn as_multi_threshold_1(z: u32, ) -> Weight { - // Minimum execution time: 15_772 nanoseconds. - Weight::from_ref_time(16_255_218) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 12_359_000 picoseconds. + Weight::from_parts(12_845_448, 0) + .saturating_add(Weight::from_parts(0, 0)) // Standard Error: 2 - .saturating_add(Weight::from_ref_time(597).saturating_mul(z.into())) + .saturating_add(Weight::from_parts(559, 0).saturating_mul(z.into())) } - // Storage: Multisig Multisigs (r:1 w:1) - // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) + /// Storage: Multisig Multisigs (r:1 w:1) + /// Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create(s: u32, z: u32, ) -> Weight { - // Minimum execution time: 45_441 nanoseconds. - Weight::from_ref_time(37_064_110) - // Standard Error: 910 - .saturating_add(Weight::from_ref_time(95_519).saturating_mul(s.into())) - // Standard Error: 8 - .saturating_add(Weight::from_ref_time(1_540).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(2)) + // Proof Size summary in bytes: + // Measured: `193 + s * (2 ±0)` + // Estimated: `6811` + // Minimum execution time: 36_126_000 picoseconds. + Weight::from_parts(30_610_509, 0) + .saturating_add(Weight::from_parts(0, 6811)) + // Standard Error: 470 + .saturating_add(Weight::from_parts(61_528, 0).saturating_mul(s.into())) + // Standard Error: 4 + .saturating_add(Weight::from_parts(1_254, 0).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Multisig Multisigs (r:1 w:1) + /// Storage: Multisig Multisigs (r:1 w:1) + /// Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve(s: u32, z: u32, ) -> Weight { - // Minimum execution time: 35_187 nanoseconds. - Weight::from_ref_time(27_053_340) - // Standard Error: 605 - .saturating_add(Weight::from_ref_time(88_646).saturating_mul(s.into())) - // Standard Error: 5 - .saturating_add(Weight::from_ref_time(1_551).saturating_mul(z.into())) + // Proof Size summary in bytes: + // Measured: `211` + // Estimated: `6811` + // Minimum execution time: 26_590_000 picoseconds. + Weight::from_parts(21_327_591, 0) + .saturating_add(Weight::from_parts(0, 6811)) + // Standard Error: 481 + .saturating_add(Weight::from_parts(61_150, 0).saturating_mul(s.into())) + // Standard Error: 4 + .saturating_add(Weight::from_parts(1_203, 0).saturating_mul(z.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Multisig Multisigs (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Multisig Multisigs (r:1 w:1) + /// Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_complete(s: u32, z: u32, ) -> Weight { - // Minimum execution time: 47_483 nanoseconds. - Weight::from_ref_time(37_293_379) - // Standard Error: 796 - .saturating_add(Weight::from_ref_time(118_230).saturating_mul(s.into())) - // Standard Error: 7 - .saturating_add(Weight::from_ref_time(1_692).saturating_mul(z.into())) + // Proof Size summary in bytes: + // Measured: `317 + s * (33 ±0)` + // Estimated: `10404` + // Minimum execution time: 41_559_000 picoseconds. + Weight::from_parts(34_753_310, 0) + .saturating_add(Weight::from_parts(0, 10404)) + // Standard Error: 556 + .saturating_add(Weight::from_parts(74_587, 0).saturating_mul(s.into())) + // Standard Error: 5 + .saturating_add(Weight::from_parts(1_276, 0).saturating_mul(z.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Multisig Multisigs (r:1 w:1) - // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) + /// Storage: Multisig Multisigs (r:1 w:1) + /// Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_create(s: u32, ) -> Weight { - // Minimum execution time: 32_427 nanoseconds. - Weight::from_ref_time(35_007_792) - // Standard Error: 1_114 - .saturating_add(Weight::from_ref_time(93_830).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(2)) + // Proof Size summary in bytes: + // Measured: `193 + s * (2 ±0)` + // Estimated: `6811` + // Minimum execution time: 28_267_000 picoseconds. + Weight::from_parts(28_937_222, 0) + .saturating_add(Weight::from_parts(0, 6811)) + // Standard Error: 964 + .saturating_add(Weight::from_parts(63_128, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Multisig Multisigs (r:1 w:1) + /// Storage: Multisig Multisigs (r:1 w:1) + /// Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_approve(s: u32, ) -> Weight { - // Minimum execution time: 22_891 nanoseconds. - Weight::from_ref_time(24_948_736) - // Standard Error: 731 - .saturating_add(Weight::from_ref_time(86_594).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `211` + // Estimated: `6811` + // Minimum execution time: 18_299_000 picoseconds. + Weight::from_parts(18_957_858, 0) + .saturating_add(Weight::from_parts(0, 6811)) + // Standard Error: 437 + .saturating_add(Weight::from_parts(62_021, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Multisig Multisigs (r:1 w:1) + /// Storage: Multisig Multisigs (r:1 w:1) + /// Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) /// The range of component `s` is `[2, 100]`. fn cancel_as_multi(s: u32, ) -> Weight { - // Minimum execution time: 32_571 nanoseconds. - Weight::from_ref_time(34_813_263) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(89_038).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `383 + s * (1 ±0)` + // Estimated: `6811` + // Minimum execution time: 28_898_000 picoseconds. + Weight::from_parts(29_713_104, 0) + .saturating_add(Weight::from_parts(0, 6811)) + // Standard Error: 689 + .saturating_add(Weight::from_parts(64_650, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/rococo/src/weights/pallet_nis.rs b/runtime/rococo/src/weights/pallet_nis.rs index 290ff03b5cee..7d0599b2799c 100644 --- a/runtime/rococo/src/weights/pallet_nis.rs +++ b/runtime/rococo/src/weights/pallet_nis.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_nis` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -44,77 +45,193 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_nis`. pub struct WeightInfo(PhantomData); impl pallet_nis::WeightInfo for WeightInfo { - // Storage: Nis Queues (r:1 w:1) - // Storage: Nis QueueTotals (r:1 w:1) + /// Storage: Nis Queues (r:1 w:1) + /// Proof: Nis Queues (max_values: None, max_size: Some(48022), added: 50497, mode: MaxEncodedLen) + /// Storage: Balances Reserves (r:1 w:1) + /// Proof: Balances Reserves (max_values: None, max_size: Some(1249), added: 3724, mode: MaxEncodedLen) + /// Storage: Nis QueueTotals (r:1 w:1) + /// Proof: Nis QueueTotals (max_values: Some(1), max_size: Some(6002), added: 6497, mode: MaxEncodedLen) /// The range of component `l` is `[0, 999]`. fn place_bid(l: u32, ) -> Weight { - // Minimum execution time: 34_707 nanoseconds. - Weight::from_ref_time(35_880_660) - // Standard Error: 725 - .saturating_add(Weight::from_ref_time(81_374).saturating_mul(l.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) + // Proof Size summary in bytes: + // Measured: `6215 + l * (48 ±0)` + // Estimated: `63688` + // Minimum execution time: 29_707_000 picoseconds. + Weight::from_parts(31_916_600, 0) + .saturating_add(Weight::from_parts(0, 63688)) + // Standard Error: 702 + .saturating_add(Weight::from_parts(82_339, 0).saturating_mul(l.into())) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Nis Queues (r:1 w:1) - // Storage: Nis QueueTotals (r:1 w:1) + /// Storage: Nis Queues (r:1 w:1) + /// Proof: Nis Queues (max_values: None, max_size: Some(48022), added: 50497, mode: MaxEncodedLen) + /// Storage: Balances Reserves (r:1 w:1) + /// Proof: Balances Reserves (max_values: None, max_size: Some(1249), added: 3724, mode: MaxEncodedLen) + /// Storage: Nis QueueTotals (r:1 w:1) + /// Proof: Nis QueueTotals (max_values: Some(1), max_size: Some(6002), added: 6497, mode: MaxEncodedLen) fn place_bid_max() -> Weight { - // Minimum execution time: 108_496 nanoseconds. - Weight::from_ref_time(110_211_000) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) + // Proof Size summary in bytes: + // Measured: `54217` + // Estimated: `63688` + // Minimum execution time: 109_920_000 picoseconds. + Weight::from_parts(111_246_000, 0) + .saturating_add(Weight::from_parts(0, 63688)) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Nis Queues (r:1 w:1) - // Storage: Nis QueueTotals (r:1 w:1) + /// Storage: Nis Queues (r:1 w:1) + /// Proof: Nis Queues (max_values: None, max_size: Some(48022), added: 50497, mode: MaxEncodedLen) + /// Storage: Nis QueueTotals (r:1 w:1) + /// Proof: Nis QueueTotals (max_values: Some(1), max_size: Some(6002), added: 6497, mode: MaxEncodedLen) + /// Storage: Balances Reserves (r:1 w:1) + /// Proof: Balances Reserves (max_values: None, max_size: Some(1249), added: 3724, mode: MaxEncodedLen) /// The range of component `l` is `[1, 1000]`. fn retract_bid(l: u32, ) -> Weight { - // Minimum execution time: 40_864 nanoseconds. - Weight::from_ref_time(36_898_403) - // Standard Error: 674 - .saturating_add(Weight::from_ref_time(61_925).saturating_mul(l.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) + // Proof Size summary in bytes: + // Measured: `6215 + l * (48 ±0)` + // Estimated: `63688` + // Minimum execution time: 36_866_000 picoseconds. + Weight::from_parts(32_744_780, 0) + .saturating_add(Weight::from_parts(0, 63688)) + // Standard Error: 707 + .saturating_add(Weight::from_parts(62_880, 0).saturating_mul(l.into())) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Nis Summary (r:1 w:0) - // Storage: System Account (r:1 w:1) + /// Storage: Nis Summary (r:1 w:0) + /// Proof: Nis Summary (max_values: Some(1), max_size: Some(40), added: 535, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn fund_deficit() -> Weight { - // Minimum execution time: 42_435 nanoseconds. - Weight::from_ref_time(43_079_000) + // Proof Size summary in bytes: + // Measured: `225` + // Estimated: `5118` + // Minimum execution time: 34_779_000 picoseconds. + Weight::from_parts(35_137_000, 0) + .saturating_add(Weight::from_parts(0, 5118)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Nis Receipts (r:1 w:1) - // Storage: Nis Summary (r:1 w:1) - // Storage: NisCounterpartBalances Account (r:1 w:1) - // Storage: NisCounterpartBalances TotalIssuance (r:1 w:1) - // Storage: System Account (r:1 w:1) - fn thaw() -> Weight { - // Minimum execution time: 62_105 nanoseconds. - Weight::from_ref_time(62_865_000) + /// Storage: Nis Receipts (r:1 w:1) + /// Proof: Nis Receipts (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + /// Storage: Nis Summary (r:1 w:1) + /// Proof: Nis Summary (max_values: Some(1), max_size: Some(40), added: 535, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:0) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Reserves (r:1 w:1) + /// Proof: Balances Reserves (max_values: None, max_size: Some(1249), added: 3724, mode: MaxEncodedLen) + fn thaw_private() -> Weight { + // Proof Size summary in bytes: + // Measured: `393` + // Estimated: `13378` + // Minimum execution time: 48_234_000 picoseconds. + Weight::from_parts(49_272_000, 0) + .saturating_add(Weight::from_parts(0, 13378)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(3)) + } + /// Storage: Nis Receipts (r:1 w:1) + /// Proof: Nis Receipts (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + /// Storage: Nis Summary (r:1 w:1) + /// Proof: Nis Summary (max_values: Some(1), max_size: Some(40), added: 535, mode: MaxEncodedLen) + /// Storage: NisCounterpartBalances Account (r:1 w:1) + /// Proof: NisCounterpartBalances Account (max_values: None, max_size: Some(112), added: 2587, mode: MaxEncodedLen) + /// Storage: NisCounterpartBalances TotalIssuance (r:1 w:1) + /// Proof: NisCounterpartBalances TotalIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + fn thaw_communal() -> Weight { + // Proof Size summary in bytes: + // Measured: `604` + // Estimated: `13742` + // Minimum execution time: 66_693_000 picoseconds. + Weight::from_parts(67_112_000, 0) + .saturating_add(Weight::from_parts(0, 13742)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: Nis Summary (r:1 w:1) - // Storage: System Account (r:1 w:0) - // Storage: Nis QueueTotals (r:1 w:1) + /// Storage: Nis Receipts (r:1 w:1) + /// Proof: Nis Receipts (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + /// Storage: Nis Summary (r:1 w:1) + /// Proof: Nis Summary (max_values: Some(1), max_size: Some(40), added: 535, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: NisCounterpartBalances Account (r:1 w:1) + /// Proof: NisCounterpartBalances Account (max_values: None, max_size: Some(112), added: 2587, mode: MaxEncodedLen) + /// Storage: NisCounterpartBalances TotalIssuance (r:1 w:1) + /// Proof: NisCounterpartBalances TotalIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Balances Reserves (r:1 w:1) + /// Proof: Balances Reserves (max_values: None, max_size: Some(1249), added: 3724, mode: MaxEncodedLen) + fn privatize() -> Weight { + // Proof Size summary in bytes: + // Measured: `665` + // Estimated: `18456` + // Minimum execution time: 74_119_000 picoseconds. + Weight::from_parts(75_081_000, 0) + .saturating_add(Weight::from_parts(0, 18456)) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().writes(6)) + } + /// Storage: Nis Receipts (r:1 w:1) + /// Proof: Nis Receipts (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + /// Storage: Balances Reserves (r:1 w:1) + /// Proof: Balances Reserves (max_values: None, max_size: Some(1249), added: 3724, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Nis Summary (r:1 w:1) + /// Proof: Nis Summary (max_values: Some(1), max_size: Some(40), added: 535, mode: MaxEncodedLen) + /// Storage: NisCounterpartBalances Account (r:1 w:1) + /// Proof: NisCounterpartBalances Account (max_values: None, max_size: Some(112), added: 2587, mode: MaxEncodedLen) + /// Storage: NisCounterpartBalances TotalIssuance (r:1 w:1) + /// Proof: NisCounterpartBalances TotalIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + fn communify() -> Weight { + // Proof Size summary in bytes: + // Measured: `475` + // Estimated: `18456` + // Minimum execution time: 67_267_000 picoseconds. + Weight::from_parts(68_227_000, 0) + .saturating_add(Weight::from_parts(0, 18456)) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().writes(6)) + } + /// Storage: Nis Summary (r:1 w:1) + /// Proof: Nis Summary (max_values: Some(1), max_size: Some(40), added: 535, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:0) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Nis QueueTotals (r:1 w:1) + /// Proof: Nis QueueTotals (max_values: Some(1), max_size: Some(6002), added: 6497, mode: MaxEncodedLen) fn process_queues() -> Weight { - // Minimum execution time: 33_732 nanoseconds. - Weight::from_ref_time(34_695_000) + // Proof Size summary in bytes: + // Measured: `6658` + // Estimated: `12605` + // Minimum execution time: 22_764_000 picoseconds. + Weight::from_parts(23_339_000, 0) + .saturating_add(Weight::from_parts(0, 12605)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Nis Queues (r:1 w:1) + /// Storage: Nis Queues (r:1 w:1) + /// Proof: Nis Queues (max_values: None, max_size: Some(48022), added: 50497, mode: MaxEncodedLen) fn process_queue() -> Weight { - // Minimum execution time: 4_335 nanoseconds. - Weight::from_ref_time(4_532_000) + // Proof Size summary in bytes: + // Measured: `76` + // Estimated: `51487` + // Minimum execution time: 4_887_000 picoseconds. + Weight::from_parts(5_108_000, 0) + .saturating_add(Weight::from_parts(0, 51487)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: System Account (r:1 w:0) - // Storage: Nis Receipts (r:0 w:1) + /// Storage: Nis Receipts (r:0 w:1) + /// Proof: Nis Receipts (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) fn process_bid() -> Weight { - // Minimum execution time: 13_095 nanoseconds. - Weight::from_ref_time(13_222_000) - .saturating_add(T::DbWeight::get().reads(1)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_009_000 picoseconds. + Weight::from_parts(7_259_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/runtime/rococo/src/weights/pallet_preimage.rs b/runtime/rococo/src/weights/pallet_preimage.rs index b3ed4df82dcd..e4df10caf44d 100644 --- a/runtime/rococo/src/weights/pallet_preimage.rs +++ b/runtime/rococo/src/weights/pallet_preimage.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_preimage` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -44,102 +45,168 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_preimage`. pub struct WeightInfo(PhantomData); impl pallet_preimage::WeightInfo for WeightInfo { - // Storage: Preimage StatusFor (r:1 w:1) - // Storage: Preimage PreimageFor (r:0 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Preimage PreimageFor (r:0 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) /// The range of component `s` is `[0, 4194304]`. fn note_preimage(s: u32, ) -> Weight { - // Minimum execution time: 30_655 nanoseconds. - Weight::from_ref_time(30_996_000) + // Proof Size summary in bytes: + // Measured: `215` + // Estimated: `3556` + // Minimum execution time: 26_864_000 picoseconds. + Weight::from_parts(27_136_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(2_385).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(2_015, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Preimage StatusFor (r:1 w:1) - // Storage: Preimage PreimageFor (r:0 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Preimage PreimageFor (r:0 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) /// The range of component `s` is `[0, 4194304]`. fn note_requested_preimage(s: u32, ) -> Weight { - // Minimum execution time: 21_708 nanoseconds. - Weight::from_ref_time(22_146_000) + // Proof Size summary in bytes: + // Measured: `178` + // Estimated: `3556` + // Minimum execution time: 17_853_000 picoseconds. + Weight::from_parts(18_013_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(2_383).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(2_013, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Preimage StatusFor (r:1 w:1) - // Storage: Preimage PreimageFor (r:0 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Preimage PreimageFor (r:0 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) /// The range of component `s` is `[0, 4194304]`. fn note_no_deposit_preimage(s: u32, ) -> Weight { - // Minimum execution time: 19_870 nanoseconds. - Weight::from_ref_time(20_144_000) + // Proof Size summary in bytes: + // Measured: `178` + // Estimated: `3556` + // Minimum execution time: 16_781_000 picoseconds. + Weight::from_parts(16_936_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(2_380).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(2_017, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Preimage StatusFor (r:1 w:1) - // Storage: Preimage PreimageFor (r:0 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Preimage PreimageFor (r:0 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) fn unnote_preimage() -> Weight { - // Minimum execution time: 40_859 nanoseconds. - Weight::from_ref_time(42_636_000) + // Proof Size summary in bytes: + // Measured: `361` + // Estimated: `3556` + // Minimum execution time: 34_343_000 picoseconds. + Weight::from_parts(34_983_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Preimage StatusFor (r:1 w:1) - // Storage: Preimage PreimageFor (r:0 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Preimage PreimageFor (r:0 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) fn unnote_no_deposit_preimage() -> Weight { - // Minimum execution time: 28_404 nanoseconds. - Weight::from_ref_time(29_652_000) + // Proof Size summary in bytes: + // Measured: `216` + // Estimated: `3556` + // Minimum execution time: 23_306_000 picoseconds. + Weight::from_parts(24_627_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn request_preimage() -> Weight { - // Minimum execution time: 27_624 nanoseconds. - Weight::from_ref_time(28_698_000) + // Proof Size summary in bytes: + // Measured: `260` + // Estimated: `3556` + // Minimum execution time: 20_611_000 picoseconds. + Weight::from_parts(21_516_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn request_no_deposit_preimage() -> Weight { - // Minimum execution time: 14_331 nanoseconds. - Weight::from_ref_time(15_652_000) + // Proof Size summary in bytes: + // Measured: `216` + // Estimated: `3556` + // Minimum execution time: 12_950_000 picoseconds. + Weight::from_parts(13_795_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn request_unnoted_preimage() -> Weight { - // Minimum execution time: 19_440 nanoseconds. - Weight::from_ref_time(20_277_000) + // Proof Size summary in bytes: + // Measured: `114` + // Estimated: `3556` + // Minimum execution time: 14_408_000 picoseconds. + Weight::from_parts(14_913_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn request_requested_preimage() -> Weight { - // Minimum execution time: 9_846 nanoseconds. - Weight::from_ref_time(10_010_000) + // Proof Size summary in bytes: + // Measured: `178` + // Estimated: `3556` + // Minimum execution time: 9_545_000 picoseconds. + Weight::from_parts(9_985_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Preimage StatusFor (r:1 w:1) - // Storage: Preimage PreimageFor (r:0 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Preimage PreimageFor (r:0 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) fn unrequest_preimage() -> Weight { - // Minimum execution time: 26_185 nanoseconds. - Weight::from_ref_time(28_297_000) + // Proof Size summary in bytes: + // Measured: `216` + // Estimated: `3556` + // Minimum execution time: 21_503_000 picoseconds. + Weight::from_parts(22_522_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn unrequest_unnoted_preimage() -> Weight { - // Minimum execution time: 9_670 nanoseconds. - Weight::from_ref_time(9_793_000) + // Proof Size summary in bytes: + // Measured: `178` + // Estimated: `3556` + // Minimum execution time: 9_423_000 picoseconds. + Weight::from_parts(9_638_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn unrequest_multi_referenced_preimage() -> Weight { - // Minimum execution time: 9_641 nanoseconds. - Weight::from_ref_time(10_028_000) + // Proof Size summary in bytes: + // Measured: `178` + // Estimated: `3556` + // Minimum execution time: 9_531_000 picoseconds. + Weight::from_parts(9_830_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/rococo/src/weights/pallet_proxy.rs b/runtime/rococo/src/weights/pallet_proxy.rs index 28c4d505b440..4324ea090b44 100644 --- a/runtime/rococo/src/weights/pallet_proxy.rs +++ b/runtime/rococo/src/weights/pallet_proxy.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_proxy` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -44,119 +45,172 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_proxy`. pub struct WeightInfo(PhantomData); impl pallet_proxy::WeightInfo for WeightInfo { - // Storage: Proxy Proxies (r:1 w:0) + /// Storage: Proxy Proxies (r:1 w:0) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) /// The range of component `p` is `[1, 31]`. fn proxy(p: u32, ) -> Weight { - // Minimum execution time: 20_810 nanoseconds. - Weight::from_ref_time(22_058_995) - // Standard Error: 1_314 - .saturating_add(Weight::from_ref_time(49_758).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `227 + p * (37 ±0)` + // Estimated: `4706` + // Minimum execution time: 16_792_000 picoseconds. + Weight::from_parts(17_791_507, 0) + .saturating_add(Weight::from_parts(0, 4706)) + // Standard Error: 2_286 + .saturating_add(Weight::from_parts(7_086, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) } - // Storage: Proxy Proxies (r:1 w:0) - // Storage: Proxy Announcements (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Proxy Proxies (r:1 w:0) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) + /// Storage: Proxy Announcements (r:1 w:1) + /// Proof: Proxy Announcements (max_values: None, max_size: Some(2233), added: 4708, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn proxy_announced(a: u32, p: u32, ) -> Weight { - // Minimum execution time: 40_095 nanoseconds. - Weight::from_ref_time(40_760_444) - // Standard Error: 1_902 - .saturating_add(Weight::from_ref_time(121_726).saturating_mul(a.into())) - // Standard Error: 1_965 - .saturating_add(Weight::from_ref_time(27_217).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `554 + a * (68 ±0) + p * (37 ±0)` + // Estimated: `13997` + // Minimum execution time: 34_850_000 picoseconds. + Weight::from_parts(36_061_122, 0) + .saturating_add(Weight::from_parts(0, 13997)) + // Standard Error: 1_943 + .saturating_add(Weight::from_parts(161_417, 0).saturating_mul(a.into())) + // Standard Error: 2_007 + .saturating_add(Weight::from_parts(18_605, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Proxy Announcements (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Proxy Announcements (r:1 w:1) + /// Proof: Proxy Announcements (max_values: None, max_size: Some(2233), added: 4708, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. - fn remove_announcement(a: u32, p: u32, ) -> Weight { - // Minimum execution time: 28_171 nanoseconds. - Weight::from_ref_time(28_841_253) - // Standard Error: 1_874 - .saturating_add(Weight::from_ref_time(125_781).saturating_mul(a.into())) - // Standard Error: 1_936 - .saturating_add(Weight::from_ref_time(2_670).saturating_mul(p.into())) + fn remove_announcement(a: u32, _p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `469 + a * (68 ±0)` + // Estimated: `9291` + // Minimum execution time: 21_487_000 picoseconds. + Weight::from_parts(23_124_848, 0) + .saturating_add(Weight::from_parts(0, 9291)) + // Standard Error: 1_579 + .saturating_add(Weight::from_parts(156_959, 0).saturating_mul(a.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Proxy Announcements (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Proxy Announcements (r:1 w:1) + /// Proof: Proxy Announcements (max_values: None, max_size: Some(2233), added: 4708, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn reject_announcement(a: u32, _p: u32, ) -> Weight { - // Minimum execution time: 27_468 nanoseconds. - Weight::from_ref_time(28_942_120) - // Standard Error: 1_947 - .saturating_add(Weight::from_ref_time(123_103).saturating_mul(a.into())) + // Proof Size summary in bytes: + // Measured: `469 + a * (68 ±0)` + // Estimated: `9291` + // Minimum execution time: 21_438_000 picoseconds. + Weight::from_parts(23_160_789, 0) + .saturating_add(Weight::from_parts(0, 9291)) + // Standard Error: 1_598 + .saturating_add(Weight::from_parts(156_098, 0).saturating_mul(a.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Proxy Proxies (r:1 w:0) - // Storage: Proxy Announcements (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Proxy Proxies (r:1 w:0) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) + /// Storage: Proxy Announcements (r:1 w:1) + /// Proof: Proxy Announcements (max_values: None, max_size: Some(2233), added: 4708, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn announce(a: u32, p: u32, ) -> Weight { - // Minimum execution time: 35_976 nanoseconds. - Weight::from_ref_time(37_563_863) - // Standard Error: 2_117 - .saturating_add(Weight::from_ref_time(119_149).saturating_mul(a.into())) - // Standard Error: 2_187 - .saturating_add(Weight::from_ref_time(25_508).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `486 + a * (68 ±0) + p * (37 ±0)` + // Estimated: `13997` + // Minimum execution time: 30_218_000 picoseconds. + Weight::from_parts(31_825_043, 0) + .saturating_add(Weight::from_parts(0, 13997)) + // Standard Error: 1_875 + .saturating_add(Weight::from_parts(157_006, 0).saturating_mul(a.into())) + // Standard Error: 1_938 + .saturating_add(Weight::from_parts(20_623, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Proxy Proxies (r:1 w:1) + /// Storage: Proxy Proxies (r:1 w:1) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) /// The range of component `p` is `[1, 31]`. fn add_proxy(p: u32, ) -> Weight { - // Minimum execution time: 29_491 nanoseconds. - Weight::from_ref_time(30_669_205) - // Standard Error: 7_827 - .saturating_add(Weight::from_ref_time(107_910).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `227 + p * (37 ±0)` + // Estimated: `4706` + // Minimum execution time: 23_261_000 picoseconds. + Weight::from_parts(24_156_673, 0) + .saturating_add(Weight::from_parts(0, 4706)) + // Standard Error: 1_526 + .saturating_add(Weight::from_parts(48_329, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Proxy Proxies (r:1 w:1) + /// Storage: Proxy Proxies (r:1 w:1) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) /// The range of component `p` is `[1, 31]`. fn remove_proxy(p: u32, ) -> Weight { - // Minimum execution time: 28_540 nanoseconds. - Weight::from_ref_time(30_427_231) - // Standard Error: 2_132 - .saturating_add(Weight::from_ref_time(99_091).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `227 + p * (37 ±0)` + // Estimated: `4706` + // Minimum execution time: 23_301_000 picoseconds. + Weight::from_parts(24_016_174, 0) + .saturating_add(Weight::from_parts(0, 4706)) + // Standard Error: 1_532 + .saturating_add(Weight::from_parts(67_521, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Proxy Proxies (r:1 w:1) + /// Storage: Proxy Proxies (r:1 w:1) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) /// The range of component `p` is `[1, 31]`. fn remove_proxies(p: u32, ) -> Weight { - // Minimum execution time: 25_048 nanoseconds. - Weight::from_ref_time(26_473_067) - // Standard Error: 1_843 - .saturating_add(Weight::from_ref_time(49_189).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `227 + p * (37 ±0)` + // Estimated: `4706` + // Minimum execution time: 18_071_000 picoseconds. + Weight::from_parts(18_952_655, 0) + .saturating_add(Weight::from_parts(0, 4706)) + // Standard Error: 1_384 + .saturating_add(Weight::from_parts(36_493, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) - // Storage: Proxy Proxies (r:1 w:1) + /// Storage: Proxy Proxies (r:1 w:1) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) /// The range of component `p` is `[1, 31]`. fn create_pure(p: u32, ) -> Weight { - // Minimum execution time: 32_211 nanoseconds. - Weight::from_ref_time(33_648_748) - // Standard Error: 1_805 - .saturating_add(Weight::from_ref_time(33_839).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(2)) + // Proof Size summary in bytes: + // Measured: `239` + // Estimated: `4706` + // Minimum execution time: 24_924_000 picoseconds. + Weight::from_parts(26_006_506, 0) + .saturating_add(Weight::from_parts(0, 4706)) + // Standard Error: 1_444 + .saturating_add(Weight::from_parts(584, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Proxy Proxies (r:1 w:1) + /// Storage: Proxy Proxies (r:1 w:1) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) /// The range of component `p` is `[0, 30]`. fn kill_pure(p: u32, ) -> Weight { - // Minimum execution time: 26_953 nanoseconds. - Weight::from_ref_time(28_094_465) - // Standard Error: 1_745 - .saturating_add(Weight::from_ref_time(50_255).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `264 + p * (37 ±0)` + // Estimated: `4706` + // Minimum execution time: 19_012_000 picoseconds. + Weight::from_parts(19_845_857, 0) + .saturating_add(Weight::from_parts(0, 4706)) + // Standard Error: 1_382 + .saturating_add(Weight::from_parts(35_446, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/rococo/src/weights/pallet_scheduler.rs b/runtime/rococo/src/weights/pallet_scheduler.rs index 1db3bad4fe24..2e66c8ceab7d 100644 --- a/runtime/rococo/src/weights/pallet_scheduler.rs +++ b/runtime/rococo/src/weights/pallet_scheduler.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_scheduler` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -44,96 +45,157 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_scheduler`. pub struct WeightInfo(PhantomData); impl pallet_scheduler::WeightInfo for WeightInfo { - // Storage: Scheduler IncompleteSince (r:1 w:1) + /// Storage: Scheduler IncompleteSince (r:1 w:1) + /// Proof: Scheduler IncompleteSince (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn service_agendas_base() -> Weight { - // Minimum execution time: 5_043 nanoseconds. - Weight::from_ref_time(5_244_000) + // Proof Size summary in bytes: + // Measured: `69` + // Estimated: `1489` + // Minimum execution time: 4_960_000 picoseconds. + Weight::from_parts(5_149_000, 0) + .saturating_add(Weight::from_parts(0, 1489)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) /// The range of component `s` is `[0, 50]`. fn service_agenda_base(s: u32, ) -> Weight { - // Minimum execution time: 4_639 nanoseconds. - Weight::from_ref_time(8_090_010) - // Standard Error: 2_457 - .saturating_add(Weight::from_ref_time(676_184).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `116 + s * (177 ±0)` + // Estimated: `42428` + // Minimum execution time: 4_653_000 picoseconds. + Weight::from_parts(7_734_868, 0) + .saturating_add(Weight::from_parts(0, 42428)) + // Standard Error: 2_115 + .saturating_add(Weight::from_parts(944_709, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } fn service_task_base() -> Weight { - // Minimum execution time: 9_929 nanoseconds. - Weight::from_ref_time(10_183_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 5_887_000 picoseconds. + Weight::from_parts(6_120_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } - // Storage: Preimage PreimageFor (r:1 w:1) - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Preimage PreimageFor (r:1 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: Measured) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) /// The range of component `s` is `[128, 4194304]`. fn service_task_fetched(s: u32, ) -> Weight { - // Minimum execution time: 22_509 nanoseconds. - Weight::from_ref_time(22_860_000) - // Standard Error: 11 - .saturating_add(Weight::from_ref_time(1_421).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `251 + s * (1 ±0)` + // Estimated: `7272 + s * (1 ±0)` + // Minimum execution time: 20_952_000 picoseconds. + Weight::from_parts(21_209_000, 0) + .saturating_add(Weight::from_parts(0, 7272)) + // Standard Error: 5 + .saturating_add(Weight::from_parts(1_193, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 1).saturating_mul(s.into())) } - // Storage: Scheduler Lookup (r:0 w:1) + /// Storage: Scheduler Lookup (r:0 w:1) + /// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) fn service_task_named() -> Weight { - // Minimum execution time: 11_173 nanoseconds. - Weight::from_ref_time(11_521_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_541_000 picoseconds. + Weight::from_parts(7_811_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } fn service_task_periodic() -> Weight { - // Minimum execution time: 10_076 nanoseconds. - Weight::from_ref_time(10_417_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 5_925_000 picoseconds. + Weight::from_parts(6_053_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } fn execute_dispatch_signed() -> Weight { - // Minimum execution time: 4_690 nanoseconds. - Weight::from_ref_time(4_867_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_178_000 picoseconds. + Weight::from_parts(3_277_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } fn execute_dispatch_unsigned() -> Weight { - // Minimum execution time: 4_643 nanoseconds. - Weight::from_ref_time(4_842_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_206_000 picoseconds. + Weight::from_parts(3_295_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) /// The range of component `s` is `[0, 49]`. fn schedule(s: u32, ) -> Weight { - // Minimum execution time: 18_329 nanoseconds. - Weight::from_ref_time(22_414_395) - // Standard Error: 2_786 - .saturating_add(Weight::from_ref_time(704_728).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `116 + s * (177 ±0)` + // Estimated: `42428` + // Minimum execution time: 15_345_000 picoseconds. + Weight::from_parts(18_725_551, 0) + .saturating_add(Weight::from_parts(0, 42428)) + // Standard Error: 2_098 + .saturating_add(Weight::from_parts(927_752, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Scheduler Agenda (r:1 w:1) - // Storage: Scheduler Lookup (r:0 w:1) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) + /// Storage: Scheduler Lookup (r:0 w:1) + /// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) /// The range of component `s` is `[1, 50]`. fn cancel(s: u32, ) -> Weight { - // Minimum execution time: 21_231 nanoseconds. - Weight::from_ref_time(22_817_349) - // Standard Error: 2_170 - .saturating_add(Weight::from_ref_time(686_531).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `116 + s * (177 ±0)` + // Estimated: `42428` + // Minimum execution time: 19_638_000 picoseconds. + Weight::from_parts(18_170_833, 0) + .saturating_add(Weight::from_parts(0, 42428)) + // Standard Error: 12_752 + .saturating_add(Weight::from_parts(1_764_746, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Scheduler Lookup (r:1 w:1) - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: Scheduler Lookup (r:1 w:1) + /// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) /// The range of component `s` is `[0, 49]`. fn schedule_named(s: u32, ) -> Weight { - // Minimum execution time: 21_425 nanoseconds. - Weight::from_ref_time(26_109_642) - // Standard Error: 3_160 - .saturating_add(Weight::from_ref_time(722_106).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `293 + s * (185 ±0)` + // Estimated: `45941` + // Minimum execution time: 18_247_000 picoseconds. + Weight::from_parts(26_440_491, 0) + .saturating_add(Weight::from_parts(0, 45941)) + // Standard Error: 13_283 + .saturating_add(Weight::from_parts(884_870, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Scheduler Lookup (r:1 w:1) - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: Scheduler Lookup (r:1 w:1) + /// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) /// The range of component `s` is `[1, 50]`. fn cancel_named(s: u32, ) -> Weight { - // Minimum execution time: 21_601 nanoseconds. - Weight::from_ref_time(24_205_883) - // Standard Error: 2_248 - .saturating_add(Weight::from_ref_time(712_003).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `319 + s * (185 ±0)` + // Estimated: `45941` + // Minimum execution time: 20_584_000 picoseconds. + Weight::from_parts(20_984_461, 0) + .saturating_add(Weight::from_parts(0, 45941)) + // Standard Error: 2_852 + .saturating_add(Weight::from_parts(1_712_589, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } diff --git a/runtime/rococo/src/weights/pallet_session.rs b/runtime/rococo/src/weights/pallet_session.rs index e2ee85f0bba0..518e323be17e 100644 --- a/runtime/rococo/src/weights/pallet_session.rs +++ b/runtime/rococo/src/weights/pallet_session.rs @@ -47,7 +47,7 @@ impl pallet_session::WeightInfo for WeightInfo { // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:6 w:6) fn set_keys() -> Weight { - Weight::from_ref_time(36_115_000 as u64) + Weight::from_parts(36_115_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(8 as u64)) .saturating_add(T::DbWeight::get().writes(7 as u64)) } @@ -55,7 +55,7 @@ impl pallet_session::WeightInfo for WeightInfo { // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:0 w:6) fn purge_keys() -> Weight { - Weight::from_ref_time(21_459_000 as u64) + Weight::from_parts(21_459_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(7 as u64)) } diff --git a/runtime/rococo/src/weights/pallet_timestamp.rs b/runtime/rococo/src/weights/pallet_timestamp.rs index 51dea5b319dc..9fe54ab74bfb 100644 --- a/runtime/rococo/src/weights/pallet_timestamp.rs +++ b/runtime/rococo/src/weights/pallet_timestamp.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_timestamp` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -44,16 +45,26 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_timestamp`. pub struct WeightInfo(PhantomData); impl pallet_timestamp::WeightInfo for WeightInfo { - // Storage: Timestamp Now (r:1 w:1) - // Storage: Babe CurrentSlot (r:1 w:0) + /// Storage: Timestamp Now (r:1 w:1) + /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Babe CurrentSlot (r:1 w:0) + /// Proof: Babe CurrentSlot (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn set() -> Weight { - // Minimum execution time: 10_501 nanoseconds. - Weight::from_ref_time(10_880_000) + // Proof Size summary in bytes: + // Measured: `345` + // Estimated: `2986` + // Minimum execution time: 10_394_000 picoseconds. + Weight::from_parts(10_863_000, 0) + .saturating_add(Weight::from_parts(0, 2986)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } fn on_finalize() -> Weight { - // Minimum execution time: 4_388 nanoseconds. - Weight::from_ref_time(4_540_000) + // Proof Size summary in bytes: + // Measured: `128` + // Estimated: `0` + // Minimum execution time: 4_624_000 picoseconds. + Weight::from_parts(4_825_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } } diff --git a/runtime/rococo/src/weights/pallet_tips.rs b/runtime/rococo/src/weights/pallet_tips.rs index 89fa89fc5511..8b6e8752336b 100644 --- a/runtime/rococo/src/weights/pallet_tips.rs +++ b/runtime/rococo/src/weights/pallet_tips.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_tips` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -44,72 +45,114 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_tips`. pub struct WeightInfo(PhantomData); impl pallet_tips::WeightInfo for WeightInfo { - // Storage: Tips Reasons (r:1 w:1) - // Storage: Tips Tips (r:1 w:1) + /// Storage: Tips Reasons (r:1 w:1) + /// Proof Skipped: Tips Reasons (max_values: None, max_size: None, mode: Measured) + /// Storage: Tips Tips (r:1 w:1) + /// Proof Skipped: Tips Tips (max_values: None, max_size: None, mode: Measured) /// The range of component `r` is `[0, 16384]`. fn report_awesome(r: u32, ) -> Weight { - // Minimum execution time: 31_819 nanoseconds. - Weight::from_ref_time(37_509_130) - // Standard Error: 32 - .saturating_add(Weight::from_ref_time(1_498).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `4` + // Estimated: `6938` + // Minimum execution time: 24_022_000 picoseconds. + Weight::from_parts(25_364_207, 0) + .saturating_add(Weight::from_parts(0, 6938)) + // Standard Error: 4 + .saturating_add(Weight::from_parts(1_452, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Tips Tips (r:1 w:1) - // Storage: Tips Reasons (r:0 w:1) + /// Storage: Tips Tips (r:1 w:1) + /// Proof Skipped: Tips Tips (max_values: None, max_size: None, mode: Measured) + /// Storage: Tips Reasons (r:0 w:1) + /// Proof Skipped: Tips Reasons (max_values: None, max_size: None, mode: Measured) fn retract_tip() -> Weight { - // Minimum execution time: 30_639 nanoseconds. - Weight::from_ref_time(31_311_000) + // Proof Size summary in bytes: + // Measured: `221` + // Estimated: `3907` + // Minimum execution time: 23_466_000 picoseconds. + Weight::from_parts(24_140_000, 0) + .saturating_add(Weight::from_parts(0, 3907)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: PhragmenElection Members (r:1 w:0) - // Storage: Tips Reasons (r:1 w:1) - // Storage: Tips Tips (r:0 w:1) + /// Storage: PhragmenElection Members (r:1 w:0) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Tips Reasons (r:1 w:1) + /// Proof Skipped: Tips Reasons (max_values: None, max_size: None, mode: Measured) + /// Storage: Tips Tips (r:0 w:1) + /// Proof Skipped: Tips Tips (max_values: None, max_size: None, mode: Measured) /// The range of component `r` is `[0, 16384]`. /// The range of component `t` is `[1, 19]`. fn tip_new(r: u32, t: u32, ) -> Weight { - // Minimum execution time: 24_210 nanoseconds. - Weight::from_ref_time(22_697_785) - // Standard Error: 6 - .saturating_add(Weight::from_ref_time(1_735).saturating_mul(r.into())) - // Standard Error: 5_408 - .saturating_add(Weight::from_ref_time(160_994).saturating_mul(t.into())) + // Proof Size summary in bytes: + // Measured: `74 + t * (64 ±0)` + // Estimated: `5172 + t * (192 ±0)` + // Minimum execution time: 20_641_000 picoseconds. + Weight::from_parts(19_791_240, 0) + .saturating_add(Weight::from_parts(0, 5172)) + // Standard Error: 4 + .saturating_add(Weight::from_parts(1_350, 0).saturating_mul(r.into())) + // Standard Error: 3_912 + .saturating_add(Weight::from_parts(100_927, 0).saturating_mul(t.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 192).saturating_mul(t.into())) } - // Storage: PhragmenElection Members (r:1 w:0) - // Storage: Tips Tips (r:1 w:1) + /// Storage: PhragmenElection Members (r:1 w:0) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Tips Tips (r:1 w:1) + /// Proof Skipped: Tips Tips (max_values: None, max_size: None, mode: Measured) /// The range of component `t` is `[1, 19]`. fn tip(t: u32, ) -> Weight { - // Minimum execution time: 16_280 nanoseconds. - Weight::from_ref_time(16_568_900) - // Standard Error: 1_763 - .saturating_add(Weight::from_ref_time(147_225).saturating_mul(t.into())) + // Proof Size summary in bytes: + // Measured: `295 + t * (112 ±0)` + // Estimated: `5540 + t * (224 ±0)` + // Minimum execution time: 15_584_000 picoseconds. + Weight::from_parts(16_035_427, 0) + .saturating_add(Weight::from_parts(0, 5540)) + // Standard Error: 1_322 + .saturating_add(Weight::from_parts(125_286, 0).saturating_mul(t.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 224).saturating_mul(t.into())) } - // Storage: Tips Tips (r:1 w:1) - // Storage: PhragmenElection Members (r:1 w:0) - // Storage: System Account (r:1 w:1) - // Storage: Tips Reasons (r:0 w:1) + /// Storage: Tips Tips (r:1 w:1) + /// Proof Skipped: Tips Tips (max_values: None, max_size: None, mode: Measured) + /// Storage: PhragmenElection Members (r:1 w:0) + /// Proof Skipped: PhragmenElection Members (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Tips Reasons (r:0 w:1) + /// Proof Skipped: Tips Reasons (max_values: None, max_size: None, mode: Measured) /// The range of component `t` is `[1, 19]`. fn close_tip(t: u32, ) -> Weight { - // Minimum execution time: 47_536 nanoseconds. - Weight::from_ref_time(49_081_421) - // Standard Error: 5_332 - .saturating_add(Weight::from_ref_time(157_457).saturating_mul(t.into())) + // Proof Size summary in bytes: + // Measured: `334 + t * (112 ±0)` + // Estimated: `9518 + t * (336 ±0)` + // Minimum execution time: 44_254_000 picoseconds. + Weight::from_parts(45_672_147, 0) + .saturating_add(Weight::from_parts(0, 9518)) + // Standard Error: 5_369 + .saturating_add(Weight::from_parts(94_136, 0).saturating_mul(t.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 336).saturating_mul(t.into())) } - // Storage: Tips Tips (r:1 w:1) - // Storage: Tips Reasons (r:0 w:1) + /// Storage: Tips Tips (r:1 w:1) + /// Proof Skipped: Tips Tips (max_values: None, max_size: None, mode: Measured) + /// Storage: Tips Reasons (r:0 w:1) + /// Proof Skipped: Tips Reasons (max_values: None, max_size: None, mode: Measured) /// The range of component `t` is `[1, 19]`. fn slash_tip(t: u32, ) -> Weight { - // Minimum execution time: 20_372 nanoseconds. - Weight::from_ref_time(21_245_012) - // Standard Error: 1_586 - .saturating_add(Weight::from_ref_time(28_121).saturating_mul(t.into())) + // Proof Size summary in bytes: + // Measured: `269` + // Estimated: `4003` + // Minimum execution time: 15_527_000 picoseconds. + Weight::from_parts(16_239_861, 0) + .saturating_add(Weight::from_parts(0, 4003)) + // Standard Error: 1_272 + .saturating_add(Weight::from_parts(11_596, 0).saturating_mul(t.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } diff --git a/runtime/rococo/src/weights/pallet_treasury.rs b/runtime/rococo/src/weights/pallet_treasury.rs index 7d21f7370818..d37d0add95ce 100644 --- a/runtime/rococo/src/weights/pallet_treasury.rs +++ b/runtime/rococo/src/weights/pallet_treasury.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_treasury` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -45,58 +46,96 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_treasury::WeightInfo for WeightInfo { fn spend() -> Weight { - // Minimum execution time: 175 nanoseconds. - Weight::from_ref_time(187_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 253_000 picoseconds. + Weight::from_parts(273_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } - // Storage: Treasury ProposalCount (r:1 w:1) - // Storage: Treasury Proposals (r:0 w:1) + /// Storage: Treasury ProposalCount (r:1 w:1) + /// Proof: Treasury ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Treasury Proposals (r:0 w:1) + /// Proof: Treasury Proposals (max_values: None, max_size: Some(108), added: 2583, mode: MaxEncodedLen) fn propose_spend() -> Weight { - // Minimum execution time: 28_393 nanoseconds. - Weight::from_ref_time(28_748_000) + // Proof Size summary in bytes: + // Measured: `107` + // Estimated: `1489` + // Minimum execution time: 24_220_000 picoseconds. + Weight::from_parts(24_606_000, 0) + .saturating_add(Weight::from_parts(0, 1489)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Treasury Proposals (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Treasury Proposals (r:1 w:1) + /// Proof: Treasury Proposals (max_values: None, max_size: Some(108), added: 2583, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn reject_proposal() -> Weight { - // Minimum execution time: 40_725 nanoseconds. - Weight::from_ref_time(41_358_000) + // Proof Size summary in bytes: + // Measured: `265` + // Estimated: `7166` + // Minimum execution time: 36_680_000 picoseconds. + Weight::from_parts(37_054_000, 0) + .saturating_add(Weight::from_parts(0, 7166)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Treasury Proposals (r:1 w:0) - // Storage: Treasury Approvals (r:1 w:1) + /// Storage: Treasury Proposals (r:1 w:0) + /// Proof: Treasury Proposals (max_values: None, max_size: Some(108), added: 2583, mode: MaxEncodedLen) + /// Storage: Treasury Approvals (r:1 w:1) + /// Proof: Treasury Approvals (max_values: Some(1), max_size: Some(402), added: 897, mode: MaxEncodedLen) /// The range of component `p` is `[0, 99]`. fn approve_proposal(p: u32, ) -> Weight { - // Minimum execution time: 10_469 nanoseconds. - Weight::from_ref_time(14_262_283) - // Standard Error: 1_154 - .saturating_add(Weight::from_ref_time(49_923).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `433 + p * (8 ±0)` + // Estimated: `5460` + // Minimum execution time: 10_740_000 picoseconds. + Weight::from_parts(12_792_989, 0) + .saturating_add(Weight::from_parts(0, 5460)) + // Standard Error: 767 + .saturating_add(Weight::from_parts(25_743, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Treasury Approvals (r:1 w:1) + /// Storage: Treasury Approvals (r:1 w:1) + /// Proof: Treasury Approvals (max_values: Some(1), max_size: Some(402), added: 897, mode: MaxEncodedLen) fn remove_approval() -> Weight { - // Minimum execution time: 8_639 nanoseconds. - Weight::from_ref_time(8_938_000) + // Proof Size summary in bytes: + // Measured: `90` + // Estimated: `1887` + // Minimum execution time: 8_277_000 picoseconds. + Weight::from_parts(8_615_000, 0) + .saturating_add(Weight::from_parts(0, 1887)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Treasury Inactive (r:1 w:1) - // Storage: Balances InactiveIssuance (r:1 w:1) - // Storage: Treasury Approvals (r:1 w:1) - // Storage: Bounties BountyApprovals (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: Treasury Proposals (r:2 w:2) + /// Storage: Treasury Deactivated (r:1 w:1) + /// Proof: Treasury Deactivated (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Balances InactiveIssuance (r:1 w:1) + /// Proof: Balances InactiveIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Treasury Approvals (r:1 w:1) + /// Proof: Treasury Approvals (max_values: Some(1), max_size: Some(402), added: 897, mode: MaxEncodedLen) + /// Storage: Treasury Proposals (r:100 w:100) + /// Proof: Treasury Proposals (max_values: None, max_size: Some(108), added: 2583, mode: MaxEncodedLen) + /// Storage: System Account (r:201 w:201) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Bounties BountyApprovals (r:1 w:1) + /// Proof: Bounties BountyApprovals (max_values: Some(1), max_size: Some(402), added: 897, mode: MaxEncodedLen) /// The range of component `p` is `[0, 100]`. fn on_initialize_proposals(p: u32, ) -> Weight { - // Minimum execution time: 54_923 nanoseconds. - Weight::from_ref_time(62_244_976) - // Standard Error: 22_558 - .saturating_add(Weight::from_ref_time(26_414_045).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `296 + p * (251 ±0)` + // Estimated: `11359 + p * (7789 ±0)` + // Minimum execution time: 60_192_000 picoseconds. + Weight::from_parts(59_512_799, 0) + .saturating_add(Weight::from_parts(0, 11359)) + // Standard Error: 25_794 + .saturating_add(Weight::from_parts(32_571_537, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(p.into()))) .saturating_add(T::DbWeight::get().writes(5)) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(p.into()))) + .saturating_add(Weight::from_parts(0, 7789).saturating_mul(p.into())) } } diff --git a/runtime/rococo/src/weights/pallet_utility.rs b/runtime/rococo/src/weights/pallet_utility.rs index cebae4e74290..d7b1f0905367 100644 --- a/runtime/rococo/src/weights/pallet_utility.rs +++ b/runtime/rococo/src/weights/pallet_utility.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_utility` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -46,31 +47,51 @@ pub struct WeightInfo(PhantomData); impl pallet_utility::WeightInfo for WeightInfo { /// The range of component `c` is `[0, 1000]`. fn batch(c: u32, ) -> Weight { - // Minimum execution time: 12_481 nanoseconds. - Weight::from_ref_time(44_659_278) - // Standard Error: 6_160 - .saturating_add(Weight::from_ref_time(3_901_051).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_287_000 picoseconds. + Weight::from_parts(15_925_600, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 3_941 + .saturating_add(Weight::from_parts(5_269_434, 0).saturating_mul(c.into())) } fn as_derivative() -> Weight { - // Minimum execution time: 6_619 nanoseconds. - Weight::from_ref_time(6_850_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 5_696_000 picoseconds. + Weight::from_parts(5_886_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } /// The range of component `c` is `[0, 1000]`. fn batch_all(c: u32, ) -> Weight { - // Minimum execution time: 12_117 nanoseconds. - Weight::from_ref_time(16_304_194) - // Standard Error: 3_446 - .saturating_add(Weight::from_ref_time(4_140_565).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_207_000 picoseconds. + Weight::from_parts(14_475_102, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 2_756 + .saturating_add(Weight::from_parts(5_604_049, 0).saturating_mul(c.into())) } fn dispatch_as() -> Weight { - // Minimum execution time: 14_338 nanoseconds. - Weight::from_ref_time(14_549_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 10_142_000 picoseconds. + Weight::from_parts(10_440_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } /// The range of component `c` is `[0, 1000]`. fn force_batch(c: u32, ) -> Weight { - // Minimum execution time: 12_239 nanoseconds. - Weight::from_ref_time(33_393_732) - // Standard Error: 5_754 - .saturating_add(Weight::from_ref_time(3_959_277).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_199_000 picoseconds. + Weight::from_parts(9_603_621, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 2_779 + .saturating_add(Weight::from_parts(5_313_188, 0).saturating_mul(c.into())) } } diff --git a/runtime/rococo/src/weights/pallet_vesting.rs b/runtime/rococo/src/weights/pallet_vesting.rs index 63f4c7fc1aac..419b67a4db31 100644 --- a/runtime/rococo/src/weights/pallet_vesting.rs +++ b/runtime/rococo/src/weights/pallet_vesting.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_vesting` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -44,121 +45,175 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_vesting`. pub struct WeightInfo(PhantomData); impl pallet_vesting::WeightInfo for WeightInfo { - // Storage: Vesting Vesting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[1, 28]`. fn vest_locked(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 39_572 nanoseconds. - Weight::from_ref_time(38_862_769) - // Standard Error: 1_216 - .saturating_add(Weight::from_ref_time(49_034).saturating_mul(l.into())) - // Standard Error: 2_164 - .saturating_add(Weight::from_ref_time(62_799).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `277 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `9286` + // Minimum execution time: 29_804_000 picoseconds. + Weight::from_parts(28_492_791, 0) + .saturating_add(Weight::from_parts(0, 9286)) + // Standard Error: 708 + .saturating_add(Weight::from_parts(45_742, 0).saturating_mul(l.into())) + // Standard Error: 1_259 + .saturating_add(Weight::from_parts(74_559, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Vesting Vesting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[1, 28]`. fn vest_unlocked(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 38_591 nanoseconds. - Weight::from_ref_time(38_329_101) - // Standard Error: 1_137 - .saturating_add(Weight::from_ref_time(38_643).saturating_mul(l.into())) - // Standard Error: 2_024 - .saturating_add(Weight::from_ref_time(59_770).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `277 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `9286` + // Minimum execution time: 28_958_000 picoseconds. + Weight::from_parts(28_222_499, 0) + .saturating_add(Weight::from_parts(0, 9286)) + // Standard Error: 781 + .saturating_add(Weight::from_parts(39_564, 0).saturating_mul(l.into())) + // Standard Error: 1_390 + .saturating_add(Weight::from_parts(52_601, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Vesting Vesting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[1, 28]`. fn vest_other_locked(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 38_082 nanoseconds. - Weight::from_ref_time(38_067_162) - // Standard Error: 1_151 - .saturating_add(Weight::from_ref_time(50_199).saturating_mul(l.into())) - // Standard Error: 2_048 - .saturating_add(Weight::from_ref_time(62_862).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `380 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `12879` + // Minimum execution time: 32_177_000 picoseconds. + Weight::from_parts(30_830_499, 0) + .saturating_add(Weight::from_parts(0, 12879)) + // Standard Error: 902 + .saturating_add(Weight::from_parts(54_639, 0).saturating_mul(l.into())) + // Standard Error: 1_605 + .saturating_add(Weight::from_parts(80_501, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Vesting Vesting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[1, 28]`. fn vest_other_unlocked(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 38_296 nanoseconds. - Weight::from_ref_time(37_609_579) - // Standard Error: 1_132 - .saturating_add(Weight::from_ref_time(46_533).saturating_mul(l.into())) - // Standard Error: 2_014 - .saturating_add(Weight::from_ref_time(62_393).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `380 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `12879` + // Minimum execution time: 31_501_000 picoseconds. + Weight::from_parts(31_090_475, 0) + .saturating_add(Weight::from_parts(0, 12879)) + // Standard Error: 904 + .saturating_add(Weight::from_parts(38_566, 0).saturating_mul(l.into())) + // Standard Error: 1_609 + .saturating_add(Weight::from_parts(52_847, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Vesting Vesting (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[0, 27]`. fn vested_transfer(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 53_587 nanoseconds. - Weight::from_ref_time(53_678_770) - // Standard Error: 2_100 - .saturating_add(Weight::from_ref_time(46_947).saturating_mul(l.into())) - // Standard Error: 3_737 - .saturating_add(Weight::from_ref_time(51_077).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `451 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `12879` + // Minimum execution time: 46_158_000 picoseconds. + Weight::from_parts(46_663_007, 0) + .saturating_add(Weight::from_parts(0, 12879)) + // Standard Error: 2_069 + .saturating_add(Weight::from_parts(41_267, 0).saturating_mul(l.into())) + // Standard Error: 3_682 + .saturating_add(Weight::from_parts(41_418, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Vesting Vesting (r:1 w:1) - // Storage: System Account (r:2 w:2) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: System Account (r:2 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[0, 27]`. fn force_vested_transfer(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 52_700 nanoseconds. - Weight::from_ref_time(52_908_933) - // Standard Error: 2_210 - .saturating_add(Weight::from_ref_time(49_102).saturating_mul(l.into())) - // Standard Error: 3_932 - .saturating_add(Weight::from_ref_time(58_885).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `554 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `15482` + // Minimum execution time: 48_789_000 picoseconds. + Weight::from_parts(49_232_832, 0) + .saturating_add(Weight::from_parts(0, 15482)) + // Standard Error: 2_268 + .saturating_add(Weight::from_parts(42_419, 0).saturating_mul(l.into())) + // Standard Error: 4_036 + .saturating_add(Weight::from_parts(41_139, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Vesting Vesting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[2, 28]`. fn not_unlocking_merge_schedules(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 40_442 nanoseconds. - Weight::from_ref_time(41_740_321) - // Standard Error: 5_138 - .saturating_add(Weight::from_ref_time(11_529).saturating_mul(l.into())) - // Standard Error: 9_489 - .saturating_add(Weight::from_ref_time(51_842).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `378 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `12879` + // Minimum execution time: 33_106_000 picoseconds. + Weight::from_parts(32_473_382, 0) + .saturating_add(Weight::from_parts(0, 12879)) + // Standard Error: 699 + .saturating_add(Weight::from_parts(47_907, 0).saturating_mul(l.into())) + // Standard Error: 1_291 + .saturating_add(Weight::from_parts(63_744, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Vesting Vesting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[2, 28]`. fn unlocking_merge_schedules(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 40_106 nanoseconds. - Weight::from_ref_time(39_544_780) - // Standard Error: 1_192 - .saturating_add(Weight::from_ref_time(54_551).saturating_mul(l.into())) - // Standard Error: 2_202 - .saturating_add(Weight::from_ref_time(69_561).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `378 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `12879` + // Minimum execution time: 33_016_000 picoseconds. + Weight::from_parts(32_857_987, 0) + .saturating_add(Weight::from_parts(0, 12879)) + // Standard Error: 808 + .saturating_add(Weight::from_parts(39_423, 0).saturating_mul(l.into())) + // Standard Error: 1_493 + .saturating_add(Weight::from_parts(60_468, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } diff --git a/runtime/rococo/src/weights/pallet_xcm.rs b/runtime/rococo/src/weights/pallet_xcm.rs new file mode 100644 index 000000000000..71123a15208a --- /dev/null +++ b/runtime/rococo/src/weights/pallet_xcm.rs @@ -0,0 +1,276 @@ +// Copyright 2017-2022 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . +//! Autogenerated weights for `pallet_xcm` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 + +// Executed Command: +// ./target/production/polkadot +// benchmark +// pallet +// --chain=rococo-dev +// --steps=50 +// --repeat=20 +// --pallet=pallet_xcm +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --header=./file_header.txt +// --output=./runtime/rococo/src/weights/ + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weight functions for `pallet_xcm`. +pub struct WeightInfo(PhantomData); +impl pallet_xcm::WeightInfo for WeightInfo { + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SupportedVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SupportedVersion (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) + /// Proof Skipped: XcmPallet VersionDiscoveryQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SafeXcmVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) + fn send() -> Weight { + // Proof Size summary in bytes: + // Measured: `580` + // Estimated: `18330` + // Minimum execution time: 36_658_000 picoseconds. + Weight::from_parts(37_475_000, 0) + .saturating_add(Weight::from_parts(0, 18330)) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().writes(3)) + } + fn teleport_assets() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 23_580_000 picoseconds. + Weight::from_parts(23_929_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + } + fn reserve_transfer_assets() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 22_900_000 picoseconds. + Weight::from_parts(23_356_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + } + fn execute() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 10_655_000 picoseconds. + Weight::from_parts(10_827_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + } + /// Storage: XcmPallet SupportedVersion (r:0 w:1) + /// Proof Skipped: XcmPallet SupportedVersion (max_values: None, max_size: None, mode: Measured) + fn force_xcm_version() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 10_442_000 picoseconds. + Weight::from_parts(10_716_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: XcmPallet SafeXcmVersion (r:0 w:1) + /// Proof Skipped: XcmPallet SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) + fn force_default_xcm_version() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_056_000 picoseconds. + Weight::from_parts(3_246_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: XcmPallet VersionNotifiers (r:1 w:1) + /// Proof Skipped: XcmPallet VersionNotifiers (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet QueryCounter (r:1 w:1) + /// Proof Skipped: XcmPallet QueryCounter (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SupportedVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SupportedVersion (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) + /// Proof Skipped: XcmPallet VersionDiscoveryQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SafeXcmVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet Queries (r:0 w:1) + /// Proof Skipped: XcmPallet Queries (max_values: None, max_size: None, mode: Measured) + fn force_subscribe_version_notify() -> Weight { + // Proof Size summary in bytes: + // Measured: `580` + // Estimated: `25020` + // Minimum execution time: 42_106_000 picoseconds. + Weight::from_parts(42_782_000, 0) + .saturating_add(Weight::from_parts(0, 25020)) + .saturating_add(T::DbWeight::get().reads(8)) + .saturating_add(T::DbWeight::get().writes(6)) + } + /// Storage: XcmPallet VersionNotifiers (r:1 w:1) + /// Proof Skipped: XcmPallet VersionNotifiers (max_values: None, max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SupportedVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SupportedVersion (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) + /// Proof Skipped: XcmPallet VersionDiscoveryQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SafeXcmVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet Queries (r:0 w:1) + /// Proof Skipped: XcmPallet Queries (max_values: None, max_size: None, mode: Measured) + fn force_unsubscribe_version_notify() -> Weight { + // Proof Size summary in bytes: + // Measured: `852` + // Estimated: `25131` + // Minimum execution time: 45_010_000 picoseconds. + Weight::from_parts(45_326_000, 0) + .saturating_add(Weight::from_parts(0, 25131)) + .saturating_add(T::DbWeight::get().reads(7)) + .saturating_add(T::DbWeight::get().writes(5)) + } + /// Storage: XcmPallet SupportedVersion (r:4 w:2) + /// Proof Skipped: XcmPallet SupportedVersion (max_values: None, max_size: None, mode: Measured) + fn migrate_supported_version() -> Weight { + // Proof Size summary in bytes: + // Measured: `229` + // Estimated: `11119` + // Minimum execution time: 17_856_000 picoseconds. + Weight::from_parts(18_388_000, 0) + .saturating_add(Weight::from_parts(0, 11119)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(2)) + } + /// Storage: XcmPallet VersionNotifiers (r:4 w:2) + /// Proof Skipped: XcmPallet VersionNotifiers (max_values: None, max_size: None, mode: Measured) + fn migrate_version_notifiers() -> Weight { + // Proof Size summary in bytes: + // Measured: `233` + // Estimated: `11123` + // Minimum execution time: 19_236_000 picoseconds. + Weight::from_parts(20_053_000, 0) + .saturating_add(Weight::from_parts(0, 11123)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(2)) + } + /// Storage: XcmPallet VersionNotifyTargets (r:5 w:0) + /// Proof Skipped: XcmPallet VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) + fn already_notified_target() -> Weight { + // Proof Size summary in bytes: + // Measured: `243` + // Estimated: `13608` + // Minimum execution time: 21_784_000 picoseconds. + Weight::from_parts(22_509_000, 0) + .saturating_add(Weight::from_parts(0, 13608)) + .saturating_add(T::DbWeight::get().reads(5)) + } + /// Storage: XcmPallet VersionNotifyTargets (r:2 w:1) + /// Proof Skipped: XcmPallet VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SupportedVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SupportedVersion (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) + /// Proof Skipped: XcmPallet VersionDiscoveryQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SafeXcmVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) + fn notify_current_targets() -> Weight { + // Proof Size summary in bytes: + // Measured: `650` + // Estimated: `25340` + // Minimum execution time: 44_384_000 picoseconds. + Weight::from_parts(45_288_000, 0) + .saturating_add(Weight::from_parts(0, 25340)) + .saturating_add(T::DbWeight::get().reads(8)) + .saturating_add(T::DbWeight::get().writes(4)) + } + /// Storage: XcmPallet VersionNotifyTargets (r:3 w:0) + /// Proof Skipped: XcmPallet VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) + fn notify_target_migration_fail() -> Weight { + // Proof Size summary in bytes: + // Measured: `272` + // Estimated: `8687` + // Minimum execution time: 10_704_000 picoseconds. + Weight::from_parts(11_054_000, 0) + .saturating_add(Weight::from_parts(0, 8687)) + .saturating_add(T::DbWeight::get().reads(3)) + } + /// Storage: XcmPallet VersionNotifyTargets (r:4 w:2) + /// Proof Skipped: XcmPallet VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) + fn migrate_version_notify_targets() -> Weight { + // Proof Size summary in bytes: + // Measured: `240` + // Estimated: `11130` + // Minimum execution time: 21_567_000 picoseconds. + Weight::from_parts(22_017_000, 0) + .saturating_add(Weight::from_parts(0, 11130)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(2)) + } + /// Storage: XcmPallet VersionNotifyTargets (r:4 w:2) + /// Proof Skipped: XcmPallet VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SupportedVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SupportedVersion (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) + /// Proof Skipped: XcmPallet VersionDiscoveryQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SafeXcmVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) + fn migrate_and_notify_old_targets() -> Weight { + // Proof Size summary in bytes: + // Measured: `654` + // Estimated: `30318` + // Minimum execution time: 54_062_000 picoseconds. + Weight::from_parts(54_891_000, 0) + .saturating_add(Weight::from_parts(0, 30318)) + .saturating_add(T::DbWeight::get().reads(10)) + .saturating_add(T::DbWeight::get().writes(5)) + } +} diff --git a/runtime/rococo/src/weights/runtime_common_auctions.rs b/runtime/rococo/src/weights/runtime_common_auctions.rs index e94dfc8ab1f2..c3131639a985 100644 --- a/runtime/rococo/src/weights/runtime_common_auctions.rs +++ b/runtime/rococo/src/weights/runtime_common_auctions.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_common::auctions` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -44,53 +45,94 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_common::auctions`. pub struct WeightInfo(PhantomData); impl runtime_common::auctions::WeightInfo for WeightInfo { - // Storage: Auctions AuctionInfo (r:1 w:1) - // Storage: Auctions AuctionCounter (r:1 w:1) + /// Storage: Auctions AuctionInfo (r:1 w:1) + /// Proof: Auctions AuctionInfo (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Auctions AuctionCounter (r:1 w:1) + /// Proof: Auctions AuctionCounter (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn new_auction() -> Weight { - // Minimum execution time: 17_463 nanoseconds. - Weight::from_ref_time(18_023_000) + // Proof Size summary in bytes: + // Measured: `4` + // Estimated: `2982` + // Minimum execution time: 13_822_000 picoseconds. + Weight::from_parts(14_373_000, 0) + .saturating_add(Weight::from_parts(0, 2982)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Paras ParaLifecycles (r:1 w:0) - // Storage: Auctions AuctionCounter (r:1 w:0) - // Storage: Auctions AuctionInfo (r:1 w:0) - // Storage: Slots Leases (r:1 w:0) - // Storage: Auctions Winning (r:1 w:1) - // Storage: Auctions ReservedAmounts (r:2 w:2) - // Storage: System Account (r:1 w:1) + /// Storage: Paras ParaLifecycles (r:1 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Auctions AuctionCounter (r:1 w:0) + /// Proof: Auctions AuctionCounter (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Auctions AuctionInfo (r:1 w:0) + /// Proof: Auctions AuctionInfo (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Slots Leases (r:1 w:0) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: Auctions Winning (r:1 w:1) + /// Proof: Auctions Winning (max_values: None, max_size: Some(1920), added: 4395, mode: MaxEncodedLen) + /// Storage: Auctions ReservedAmounts (r:2 w:2) + /// Proof: Auctions ReservedAmounts (max_values: None, max_size: Some(60), added: 2535, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn bid() -> Weight { - // Minimum execution time: 76_507 nanoseconds. - Weight::from_ref_time(77_937_000) + // Proof Size summary in bytes: + // Measured: `728` + // Estimated: `26406` + // Minimum execution time: 70_913_000 picoseconds. + Weight::from_parts(74_639_000, 0) + .saturating_add(Weight::from_parts(0, 26406)) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Auctions AuctionInfo (r:1 w:1) - // Storage: Babe NextRandomness (r:1 w:0) - // Storage: Babe EpochStart (r:1 w:0) - // Storage: Auctions AuctionCounter (r:1 w:0) - // Storage: Auctions Winning (r:3600 w:3600) - // Storage: Auctions ReservedAmounts (r:37 w:36) - // Storage: System Account (r:36 w:36) - // Storage: Slots Leases (r:2 w:2) - // Storage: Paras ParaLifecycles (r:1 w:1) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) - // Storage: Registrar Paras (r:1 w:1) + /// Storage: Auctions AuctionInfo (r:1 w:1) + /// Proof: Auctions AuctionInfo (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Babe NextRandomness (r:1 w:0) + /// Proof: Babe NextRandomness (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: Babe EpochStart (r:1 w:0) + /// Proof: Babe EpochStart (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Auctions AuctionCounter (r:1 w:0) + /// Proof: Auctions AuctionCounter (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Auctions Winning (r:3600 w:3600) + /// Proof: Auctions Winning (max_values: None, max_size: Some(1920), added: 4395, mode: MaxEncodedLen) + /// Storage: Auctions ReservedAmounts (r:37 w:36) + /// Proof: Auctions ReservedAmounts (max_values: None, max_size: Some(60), added: 2535, mode: MaxEncodedLen) + /// Storage: System Account (r:36 w:36) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Slots Leases (r:2 w:2) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:1) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) + /// Storage: Registrar Paras (r:1 w:1) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) fn on_initialize() -> Weight { - // Minimum execution time: 15_416_976 nanoseconds. - Weight::from_ref_time(15_799_478_000) + // Proof Size summary in bytes: + // Measured: `6947752` + // Estimated: `50775045` + // Minimum execution time: 6_166_967_000 picoseconds. + Weight::from_parts(6_228_243_000, 0) + .saturating_add(Weight::from_parts(0, 50775045)) .saturating_add(T::DbWeight::get().reads(3683)) .saturating_add(T::DbWeight::get().writes(3678)) } - // Storage: Auctions ReservedAmounts (r:37 w:36) - // Storage: System Account (r:36 w:36) - // Storage: Auctions Winning (r:0 w:3600) - // Storage: Auctions AuctionInfo (r:0 w:1) + /// Storage: Auctions ReservedAmounts (r:37 w:36) + /// Proof: Auctions ReservedAmounts (max_values: None, max_size: Some(60), added: 2535, mode: MaxEncodedLen) + /// Storage: System Account (r:36 w:36) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Auctions Winning (r:3600 w:3600) + /// Proof: Auctions Winning (max_values: None, max_size: Some(1920), added: 4395, mode: MaxEncodedLen) + /// Storage: Auctions AuctionInfo (r:0 w:1) + /// Proof: Auctions AuctionInfo (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn cancel_auction() -> Weight { - // Minimum execution time: 4_666_160 nanoseconds. - Weight::from_ref_time(4_785_047_000) - .saturating_add(T::DbWeight::get().reads(73)) + // Proof Size summary in bytes: + // Measured: `177732` + // Estimated: `16012473` + // Minimum execution time: 4_885_891_000 picoseconds. + Weight::from_parts(4_923_797_000, 0) + .saturating_add(Weight::from_parts(0, 16012473)) + .saturating_add(T::DbWeight::get().reads(3673)) .saturating_add(T::DbWeight::get().writes(3673)) } } diff --git a/runtime/rococo/src/weights/runtime_common_claims.rs b/runtime/rococo/src/weights/runtime_common_claims.rs index f9a06d110eb8..2d338fc1b824 100644 --- a/runtime/rococo/src/weights/runtime_common_claims.rs +++ b/runtime/rococo/src/weights/runtime_common_claims.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_common::claims` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -44,63 +45,113 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_common::claims`. pub struct WeightInfo(PhantomData); impl runtime_common::claims::WeightInfo for WeightInfo { - // Storage: Claims Claims (r:1 w:1) - // Storage: Claims Signing (r:1 w:1) - // Storage: Claims Total (r:1 w:1) - // Storage: Claims Vesting (r:1 w:1) - // Storage: Vesting Vesting (r:1 w:1) - // Storage: System Account (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Claims Claims (r:1 w:1) + /// Proof Skipped: Claims Claims (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Signing (r:1 w:1) + /// Proof Skipped: Claims Signing (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Total (r:1 w:1) + /// Proof Skipped: Claims Total (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Claims Vesting (r:1 w:1) + /// Proof Skipped: Claims Vesting (max_values: None, max_size: None, mode: Measured) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:0) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) fn claim() -> Weight { - // Minimum execution time: 143_827 nanoseconds. - Weight::from_ref_time(145_893_000) + // Proof Size summary in bytes: + // Measured: `558` + // Estimated: `26991` + // Minimum execution time: 141_620_000 picoseconds. + Weight::from_parts(143_668_000, 0) + .saturating_add(Weight::from_parts(0, 26991)) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: Claims Total (r:1 w:1) - // Storage: Claims Vesting (r:0 w:1) - // Storage: Claims Claims (r:0 w:1) - // Storage: Claims Signing (r:0 w:1) + /// Storage: Claims Total (r:1 w:1) + /// Proof Skipped: Claims Total (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Claims Vesting (r:0 w:1) + /// Proof Skipped: Claims Vesting (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Claims (r:0 w:1) + /// Proof Skipped: Claims Claims (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Signing (r:0 w:1) + /// Proof Skipped: Claims Signing (max_values: None, max_size: None, mode: Measured) fn mint_claim() -> Weight { - // Minimum execution time: 12_242 nanoseconds. - Weight::from_ref_time(12_658_000) + // Proof Size summary in bytes: + // Measured: `216` + // Estimated: `2349` + // Minimum execution time: 11_817_000 picoseconds. + Weight::from_parts(12_193_000, 0) + .saturating_add(Weight::from_parts(0, 2349)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Claims Claims (r:1 w:1) - // Storage: Claims Signing (r:1 w:1) - // Storage: Claims Total (r:1 w:1) - // Storage: Claims Vesting (r:1 w:1) - // Storage: Vesting Vesting (r:1 w:1) - // Storage: System Account (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Claims Claims (r:1 w:1) + /// Proof Skipped: Claims Claims (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Signing (r:1 w:1) + /// Proof Skipped: Claims Signing (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Total (r:1 w:1) + /// Proof Skipped: Claims Total (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Claims Vesting (r:1 w:1) + /// Proof Skipped: Claims Vesting (max_values: None, max_size: None, mode: Measured) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:0) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) fn claim_attest() -> Weight { - // Minimum execution time: 147_744 nanoseconds. - Weight::from_ref_time(154_711_000) + // Proof Size summary in bytes: + // Measured: `558` + // Estimated: `26991` + // Minimum execution time: 145_745_000 picoseconds. + Weight::from_parts(148_207_000, 0) + .saturating_add(Weight::from_parts(0, 26991)) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: Claims Preclaims (r:1 w:1) - // Storage: Claims Signing (r:1 w:1) - // Storage: Claims Claims (r:1 w:1) - // Storage: Claims Total (r:1 w:1) - // Storage: Claims Vesting (r:1 w:1) - // Storage: Vesting Vesting (r:1 w:1) - // Storage: System Account (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Claims Preclaims (r:1 w:1) + /// Proof Skipped: Claims Preclaims (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Signing (r:1 w:1) + /// Proof Skipped: Claims Signing (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Claims (r:1 w:1) + /// Proof Skipped: Claims Claims (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Total (r:1 w:1) + /// Proof Skipped: Claims Total (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Claims Vesting (r:1 w:1) + /// Proof Skipped: Claims Vesting (max_values: None, max_size: None, mode: Measured) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:0) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) fn attest() -> Weight { - // Minimum execution time: 68_784 nanoseconds. - Weight::from_ref_time(71_659_000) + // Proof Size summary in bytes: + // Measured: `632` + // Estimated: `31384` + // Minimum execution time: 65_979_000 picoseconds. + Weight::from_parts(68_333_000, 0) + .saturating_add(Weight::from_parts(0, 31384)) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(7)) } - // Storage: Claims Claims (r:1 w:2) - // Storage: Claims Vesting (r:1 w:2) - // Storage: Claims Signing (r:1 w:2) - // Storage: Claims Preclaims (r:1 w:1) + /// Storage: Claims Claims (r:1 w:2) + /// Proof Skipped: Claims Claims (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Vesting (r:1 w:2) + /// Proof Skipped: Claims Vesting (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Signing (r:1 w:2) + /// Proof Skipped: Claims Signing (max_values: None, max_size: None, mode: Measured) + /// Storage: Claims Preclaims (r:1 w:1) + /// Proof Skipped: Claims Preclaims (max_values: None, max_size: None, mode: Measured) fn move_claim() -> Weight { - // Minimum execution time: 22_829 nanoseconds. - Weight::from_ref_time(23_350_000) + // Proof Size summary in bytes: + // Measured: `440` + // Estimated: `15620` + // Minimum execution time: 22_694_000 picoseconds. + Weight::from_parts(23_022_000, 0) + .saturating_add(Weight::from_parts(0, 15620)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(7)) } diff --git a/runtime/rococo/src/weights/runtime_common_crowdloan.rs b/runtime/rococo/src/weights/runtime_common_crowdloan.rs index d41b25458373..4935bc50ab8e 100644 --- a/runtime/rococo/src/weights/runtime_common_crowdloan.rs +++ b/runtime/rococo/src/weights/runtime_common_crowdloan.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_common::crowdloan` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -44,102 +45,174 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_common::crowdloan`. pub struct WeightInfo(PhantomData); impl runtime_common::crowdloan::WeightInfo for WeightInfo { - // Storage: Crowdloan Funds (r:1 w:1) - // Storage: Registrar Paras (r:1 w:1) - // Storage: Paras ParaLifecycles (r:1 w:0) - // Storage: Crowdloan NextFundIndex (r:1 w:1) + /// Storage: Crowdloan Funds (r:1 w:1) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: Registrar Paras (r:1 w:1) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Crowdloan NextFundIndex (r:1 w:1) + /// Proof Skipped: Crowdloan NextFundIndex (max_values: Some(1), max_size: None, mode: Measured) fn create() -> Weight { - // Minimum execution time: 51_117 nanoseconds. - Weight::from_ref_time(51_954_000) + // Proof Size summary in bytes: + // Measured: `386` + // Estimated: `13424` + // Minimum execution time: 39_858_000 picoseconds. + Weight::from_parts(40_865_000, 0) + .saturating_add(Weight::from_parts(0, 13424)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Crowdloan Funds (r:1 w:1) - // Storage: Slots Leases (r:1 w:0) - // Storage: Auctions AuctionInfo (r:1 w:0) - // Storage: System Account (r:1 w:1) - // Storage: Balances InactiveIssuance (r:1 w:1) - // Storage: Crowdloan EndingsCount (r:1 w:0) - // Storage: Crowdloan NewRaise (r:1 w:1) - // Storage: unknown [0xd861ea1ebf4800d4b89f4ff787ad79ee96d9a708c85b57da7eb8f9ddeda61291] (r:1 w:1) + /// Storage: Crowdloan Funds (r:1 w:1) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: Slots Leases (r:1 w:0) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: Auctions AuctionInfo (r:1 w:0) + /// Proof: Auctions AuctionInfo (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances InactiveIssuance (r:1 w:1) + /// Proof: Balances InactiveIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Crowdloan EndingsCount (r:1 w:0) + /// Proof Skipped: Crowdloan EndingsCount (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Crowdloan NewRaise (r:1 w:1) + /// Proof Skipped: Crowdloan NewRaise (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: unknown `0xd861ea1ebf4800d4b89f4ff787ad79ee96d9a708c85b57da7eb8f9ddeda61291` (r:1 w:1) + /// Proof Skipped: unknown `0xd861ea1ebf4800d4b89f4ff787ad79ee96d9a708c85b57da7eb8f9ddeda61291` (r:1 w:1) fn contribute() -> Weight { - // Minimum execution time: 123_151 nanoseconds. - Weight::from_ref_time(124_227_000) + // Proof Size summary in bytes: + // Measured: `442` + // Estimated: `22162` + // Minimum execution time: 111_819_000 picoseconds. + Weight::from_parts(113_743_000, 0) + .saturating_add(Weight::from_parts(0, 22162)) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: Crowdloan Funds (r:1 w:1) - // Storage: System Account (r:2 w:2) - // Storage: Balances InactiveIssuance (r:1 w:1) - // Storage: unknown [0xc85982571aa615c788ef9b2c16f54f25773fd439e8ee1ed2aa3ae43d48e880f0] (r:1 w:1) + /// Storage: Crowdloan Funds (r:1 w:1) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: System Account (r:2 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances InactiveIssuance (r:1 w:1) + /// Proof: Balances InactiveIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: unknown `0xc85982571aa615c788ef9b2c16f54f25773fd439e8ee1ed2aa3ae43d48e880f0` (r:1 w:1) + /// Proof Skipped: unknown `0xc85982571aa615c788ef9b2c16f54f25773fd439e8ee1ed2aa3ae43d48e880f0` (r:1 w:1) fn withdraw() -> Weight { - // Minimum execution time: 62_415 nanoseconds. - Weight::from_ref_time(63_853_000) + // Proof Size summary in bytes: + // Measured: `689` + // Estimated: `16005` + // Minimum execution time: 56_947_000 picoseconds. + Weight::from_parts(57_907_000, 0) + .saturating_add(Weight::from_parts(0, 16005)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: Skipped Metadata (r:0 w:0) + /// Storage: Skipped Metadata (r:0 w:0) + /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) /// The range of component `k` is `[0, 1000]`. fn refund(k: u32, ) -> Weight { - // Minimum execution time: 65_038 nanoseconds. - Weight::from_ref_time(65_747_000) - // Standard Error: 13_393 - .saturating_add(Weight::from_ref_time(19_554_571).saturating_mul(k.into())) + // Proof Size summary in bytes: + // Measured: `126 + k * (189 ±0)` + // Estimated: `133 + k * (189 ±0)` + // Minimum execution time: 41_762_000 picoseconds. + Weight::from_parts(56_829_000, 0) + .saturating_add(Weight::from_parts(0, 133)) + // Standard Error: 12_926 + .saturating_add(Weight::from_parts(22_800_725, 0).saturating_mul(k.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(k.into()))) .saturating_add(T::DbWeight::get().writes(3)) .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(k.into()))) + .saturating_add(Weight::from_parts(0, 189).saturating_mul(k.into())) } - // Storage: Crowdloan Funds (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Crowdloan Funds (r:1 w:1) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn dissolve() -> Weight { - // Minimum execution time: 38_105 nanoseconds. - Weight::from_ref_time(38_974_000) + // Proof Size summary in bytes: + // Measured: `375` + // Estimated: `7433` + // Minimum execution time: 31_961_000 picoseconds. + Weight::from_parts(32_603_000, 0) + .saturating_add(Weight::from_parts(0, 7433)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Crowdloan Funds (r:1 w:1) + /// Storage: Crowdloan Funds (r:1 w:1) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) fn edit() -> Weight { - // Minimum execution time: 26_626 nanoseconds. - Weight::from_ref_time(27_630_000) + // Proof Size summary in bytes: + // Measured: `235` + // Estimated: `3700` + // Minimum execution time: 18_130_000 picoseconds. + Weight::from_parts(18_785_000, 0) + .saturating_add(Weight::from_parts(0, 3700)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Crowdloan Funds (r:1 w:0) - // Storage: unknown [0xd861ea1ebf4800d4b89f4ff787ad79ee96d9a708c85b57da7eb8f9ddeda61291] (r:1 w:1) + /// Storage: Crowdloan Funds (r:1 w:0) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: unknown `0xd861ea1ebf4800d4b89f4ff787ad79ee96d9a708c85b57da7eb8f9ddeda61291` (r:1 w:1) + /// Proof Skipped: unknown `0xd861ea1ebf4800d4b89f4ff787ad79ee96d9a708c85b57da7eb8f9ddeda61291` (r:1 w:1) fn add_memo() -> Weight { - // Minimum execution time: 34_371 nanoseconds. - Weight::from_ref_time(35_698_000) + // Proof Size summary in bytes: + // Measured: `412` + // Estimated: `7754` + // Minimum execution time: 25_730_000 picoseconds. + Weight::from_parts(26_469_000, 0) + .saturating_add(Weight::from_parts(0, 7754)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Crowdloan Funds (r:1 w:0) - // Storage: Crowdloan NewRaise (r:1 w:1) + /// Storage: Crowdloan Funds (r:1 w:0) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: Crowdloan NewRaise (r:1 w:1) + /// Proof Skipped: Crowdloan NewRaise (max_values: Some(1), max_size: None, mode: Measured) fn poke() -> Weight { - // Minimum execution time: 26_758 nanoseconds. - Weight::from_ref_time(27_782_000) + // Proof Size summary in bytes: + // Measured: `239` + // Estimated: `5428` + // Minimum execution time: 18_419_000 picoseconds. + Weight::from_parts(18_959_000, 0) + .saturating_add(Weight::from_parts(0, 5428)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Auctions AuctionInfo (r:1 w:0) - // Storage: Crowdloan EndingsCount (r:1 w:1) - // Storage: Crowdloan NewRaise (r:1 w:1) - // Storage: Crowdloan Funds (r:2 w:0) - // Storage: Auctions AuctionCounter (r:1 w:0) - // Storage: Paras ParaLifecycles (r:2 w:0) - // Storage: Slots Leases (r:2 w:0) - // Storage: Auctions Winning (r:1 w:1) - // Storage: Auctions ReservedAmounts (r:2 w:2) - // Storage: System Account (r:2 w:2) + /// Storage: Auctions AuctionInfo (r:1 w:0) + /// Proof: Auctions AuctionInfo (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Crowdloan EndingsCount (r:1 w:1) + /// Proof Skipped: Crowdloan EndingsCount (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Crowdloan NewRaise (r:1 w:1) + /// Proof Skipped: Crowdloan NewRaise (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Crowdloan Funds (r:100 w:0) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: Auctions AuctionCounter (r:1 w:0) + /// Proof: Auctions AuctionCounter (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Paras ParaLifecycles (r:100 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Slots Leases (r:100 w:0) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: Auctions Winning (r:1 w:1) + /// Proof: Auctions Winning (max_values: None, max_size: Some(1920), added: 4395, mode: MaxEncodedLen) + /// Storage: Auctions ReservedAmounts (r:100 w:100) + /// Proof: Auctions ReservedAmounts (max_values: None, max_size: Some(60), added: 2535, mode: MaxEncodedLen) + /// Storage: System Account (r:100 w:100) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `n` is `[2, 100]`. fn on_initialize(n: u32, ) -> Weight { - // Minimum execution time: 108_054 nanoseconds. - Weight::from_ref_time(10_648_303) - // Standard Error: 41_245 - .saturating_add(Weight::from_ref_time(43_476_264).saturating_mul(n.into())) + // Proof Size summary in bytes: + // Measured: `197 + n * (356 ±0)` + // Estimated: `17252 + n * (14348 ±0)` + // Minimum execution time: 114_684_000 picoseconds. + Weight::from_parts(116_266_000, 0) + .saturating_add(Weight::from_parts(0, 17252)) + // Standard Error: 49_215 + .saturating_add(Weight::from_parts(50_041_529, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(3)) .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(n.into()))) + .saturating_add(Weight::from_parts(0, 14348).saturating_mul(n.into())) } } diff --git a/runtime/rococo/src/weights/runtime_common_paras_registrar.rs b/runtime/rococo/src/weights/runtime_common_paras_registrar.rs index 644e1c09d11c..25c8a1b3cdf9 100644 --- a/runtime/rococo/src/weights/runtime_common_paras_registrar.rs +++ b/runtime/rococo/src/weights/runtime_common_paras_registrar.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_common::paras_registrar` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -44,99 +45,175 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_common::paras_registrar`. pub struct WeightInfo(PhantomData); impl runtime_common::paras_registrar::WeightInfo for WeightInfo { - // Storage: Registrar NextFreeParaId (r:1 w:1) - // Storage: Registrar Paras (r:1 w:1) - // Storage: Paras ParaLifecycles (r:1 w:0) + /// Storage: Registrar NextFreeParaId (r:1 w:1) + /// Proof Skipped: Registrar NextFreeParaId (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Registrar Paras (r:1 w:1) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) fn reserve() -> Weight { - // Minimum execution time: 32_942 nanoseconds. - Weight::from_ref_time(33_595_000) + // Proof Size summary in bytes: + // Measured: `97` + // Estimated: `8706` + // Minimum execution time: 27_294_000 picoseconds. + Weight::from_parts(27_595_000, 0) + .saturating_add(Weight::from_parts(0, 8706)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Registrar Paras (r:1 w:1) - // Storage: Paras ParaLifecycles (r:1 w:1) - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Paras PvfActiveVoteMap (r:1 w:0) - // Storage: Paras CodeByHash (r:1 w:1) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) - // Storage: Paras CodeByHashRefs (r:1 w:1) - // Storage: Paras CurrentCodeHash (r:0 w:1) - // Storage: Paras UpcomingParasGenesis (r:0 w:1) + /// Storage: Registrar Paras (r:1 w:1) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:1) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:0) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHash (r:1 w:1) + /// Proof Skipped: Paras CodeByHash (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHashRefs (r:1 w:1) + /// Proof Skipped: Paras CodeByHashRefs (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CurrentCodeHash (r:0 w:1) + /// Proof Skipped: Paras CurrentCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpcomingParasGenesis (r:0 w:1) + /// Proof Skipped: Paras UpcomingParasGenesis (max_values: None, max_size: None, mode: Measured) fn register() -> Weight { - // Minimum execution time: 7_484_592 nanoseconds. - Weight::from_ref_time(7_658_902_000) + // Proof Size summary in bytes: + // Measured: `572` + // Estimated: `29480` + // Minimum execution time: 6_434_075_000 picoseconds. + Weight::from_parts(6_507_768_000, 0) + .saturating_add(Weight::from_parts(0, 29480)) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(7)) } - // Storage: Registrar Paras (r:1 w:1) - // Storage: Paras ParaLifecycles (r:1 w:1) - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Paras PvfActiveVoteMap (r:1 w:0) - // Storage: Paras CodeByHash (r:1 w:1) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) - // Storage: Paras CodeByHashRefs (r:1 w:1) - // Storage: Paras CurrentCodeHash (r:0 w:1) - // Storage: Paras UpcomingParasGenesis (r:0 w:1) + /// Storage: Registrar Paras (r:1 w:1) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:1) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:0) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHash (r:1 w:1) + /// Proof Skipped: Paras CodeByHash (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHashRefs (r:1 w:1) + /// Proof Skipped: Paras CodeByHashRefs (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CurrentCodeHash (r:0 w:1) + /// Proof Skipped: Paras CurrentCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpcomingParasGenesis (r:0 w:1) + /// Proof Skipped: Paras UpcomingParasGenesis (max_values: None, max_size: None, mode: Measured) fn force_register() -> Weight { - // Minimum execution time: 7_515_645 nanoseconds. - Weight::from_ref_time(7_643_087_000) + // Proof Size summary in bytes: + // Measured: `489` + // Estimated: `28650` + // Minimum execution time: 6_391_182_000 picoseconds. + Weight::from_parts(6_485_890_000, 0) + .saturating_add(Weight::from_parts(0, 28650)) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(7)) } - // Storage: Registrar Paras (r:1 w:1) - // Storage: Paras ParaLifecycles (r:1 w:1) - // Storage: Paras FutureCodeHash (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) - // Storage: Registrar PendingSwap (r:0 w:1) + /// Storage: Registrar Paras (r:1 w:1) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:1) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras FutureCodeHash (r:1 w:0) + /// Proof Skipped: Paras FutureCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) + /// Storage: Registrar PendingSwap (r:0 w:1) + /// Proof Skipped: Registrar PendingSwap (max_values: None, max_size: None, mode: Measured) fn deregister() -> Weight { - // Minimum execution time: 49_790 nanoseconds. - Weight::from_ref_time(51_587_000) + // Proof Size summary in bytes: + // Measured: `435` + // Estimated: `17955` + // Minimum execution time: 41_497_000 picoseconds. + Weight::from_parts(42_731_000, 0) + .saturating_add(Weight::from_parts(0, 17955)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Registrar Paras (r:1 w:0) - // Storage: Paras ParaLifecycles (r:2 w:2) - // Storage: Registrar PendingSwap (r:1 w:1) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) - // Storage: Crowdloan Funds (r:2 w:2) - // Storage: Slots Leases (r:2 w:2) + /// Storage: Registrar Paras (r:1 w:0) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:2 w:2) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Registrar PendingSwap (r:1 w:1) + /// Proof Skipped: Registrar PendingSwap (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) + /// Storage: Crowdloan Funds (r:2 w:2) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: Slots Leases (r:2 w:2) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) fn swap() -> Weight { - // Minimum execution time: 45_310 nanoseconds. - Weight::from_ref_time(46_276_000) + // Proof Size summary in bytes: + // Measured: `743` + // Estimated: `34901` + // Minimum execution time: 48_650_000 picoseconds. + Weight::from_parts(51_891_000, 0) + .saturating_add(Weight::from_parts(0, 34901)) .saturating_add(T::DbWeight::get().reads(10)) .saturating_add(T::DbWeight::get().writes(8)) } - // Storage: Paras FutureCodeHash (r:1 w:1) - // Storage: Paras UpgradeRestrictionSignal (r:1 w:1) - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Paras CurrentCodeHash (r:1 w:0) - // Storage: Paras UpgradeCooldowns (r:1 w:1) - // Storage: Paras PvfActiveVoteMap (r:1 w:0) - // Storage: Paras CodeByHash (r:1 w:1) - // Storage: Paras UpcomingUpgrades (r:1 w:1) - // Storage: System Digest (r:1 w:1) - // Storage: Paras CodeByHashRefs (r:1 w:1) - // Storage: Paras FutureCodeUpgrades (r:0 w:1) + /// Storage: Paras FutureCodeHash (r:1 w:1) + /// Proof Skipped: Paras FutureCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeRestrictionSignal (r:1 w:1) + /// Proof Skipped: Paras UpgradeRestrictionSignal (max_values: None, max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras CurrentCodeHash (r:1 w:0) + /// Proof Skipped: Paras CurrentCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeCooldowns (r:1 w:1) + /// Proof Skipped: Paras UpgradeCooldowns (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:0) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHash (r:1 w:1) + /// Proof Skipped: Paras CodeByHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpcomingUpgrades (r:1 w:1) + /// Proof Skipped: Paras UpcomingUpgrades (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System Digest (r:1 w:1) + /// Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras CodeByHashRefs (r:1 w:1) + /// Proof Skipped: Paras CodeByHashRefs (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras FutureCodeUpgrades (r:0 w:1) + /// Proof Skipped: Paras FutureCodeUpgrades (max_values: None, max_size: None, mode: Measured) /// The range of component `b` is `[1, 3145728]`. fn schedule_code_upgrade(b: u32, ) -> Weight { - // Minimum execution time: 43_237 nanoseconds. - Weight::from_ref_time(43_868_000) + // Proof Size summary in bytes: + // Measured: `330` + // Estimated: `30360` + // Minimum execution time: 44_644_000 picoseconds. + Weight::from_parts(44_838_000, 0) + .saturating_add(Weight::from_parts(0, 30360)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(2_384).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(2_017, 0).saturating_mul(b.into())) .saturating_add(T::DbWeight::get().reads(10)) .saturating_add(T::DbWeight::get().writes(8)) } - // Storage: Paras Heads (r:0 w:1) + /// Storage: Paras Heads (r:0 w:1) + /// Proof Skipped: Paras Heads (max_values: None, max_size: None, mode: Measured) /// The range of component `b` is `[1, 1048576]`. fn set_current_head(b: u32, ) -> Weight { - // Minimum execution time: 14_259 nanoseconds. - Weight::from_ref_time(14_493_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 9_589_000 picoseconds. + Weight::from_parts(9_930_000, 0) + .saturating_add(Weight::from_parts(0, 0)) // Standard Error: 2 - .saturating_add(Weight::from_ref_time(972).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(919, 0).saturating_mul(b.into())) .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/runtime/rococo/src/weights/runtime_common_slots.rs b/runtime/rococo/src/weights/runtime_common_slots.rs index 70d81e737670..6671b7450657 100644 --- a/runtime/rococo/src/weights/runtime_common_slots.rs +++ b/runtime/rococo/src/weights/runtime_common_slots.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_common::slots` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -44,52 +45,85 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_common::slots`. pub struct WeightInfo(PhantomData); impl runtime_common::slots::WeightInfo for WeightInfo { - // Storage: Slots Leases (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Slots Leases (r:1 w:1) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn force_lease() -> Weight { - // Minimum execution time: 33_212 nanoseconds. - Weight::from_ref_time(34_350_000) + // Proof Size summary in bytes: + // Measured: `287` + // Estimated: `7345` + // Minimum execution time: 27_240_000 picoseconds. + Weight::from_parts(27_617_000, 0) + .saturating_add(Weight::from_parts(0, 7345)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Paras Parachains (r:1 w:0) - // Storage: Slots Leases (r:101 w:100) - // Storage: Paras ParaLifecycles (r:100 w:100) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) - // Storage: Registrar Paras (r:100 w:100) + /// Storage: Paras Parachains (r:1 w:0) + /// Proof Skipped: Paras Parachains (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Slots Leases (r:101 w:100) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:200 w:200) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) + /// Storage: Registrar Paras (r:100 w:100) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[0, 100]`. /// The range of component `t` is `[0, 100]`. fn manage_lease_period_start(c: u32, t: u32, ) -> Weight { - // Minimum execution time: 559_683 nanoseconds. - Weight::from_ref_time(560_979_000) - // Standard Error: 71_232 - .saturating_add(Weight::from_ref_time(2_390_966).saturating_mul(c.into())) - // Standard Error: 71_232 - .saturating_add(Weight::from_ref_time(12_651_498).saturating_mul(t.into())) + // Proof Size summary in bytes: + // Measured: `0 + c * (47 ±0) + t * (308 ±0)` + // Estimated: `7864 + c * (2781 ±0) + t * (9308 ±0)` + // Minimum execution time: 640_467_000 picoseconds. + Weight::from_parts(646_026_000, 0) + .saturating_add(Weight::from_parts(0, 7864)) + // Standard Error: 81_769 + .saturating_add(Weight::from_parts(2_764_386, 0).saturating_mul(c.into())) + // Standard Error: 81_769 + .saturating_add(Weight::from_parts(11_816_053, 0).saturating_mul(t.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(c.into()))) .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(t.into()))) .saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(c.into()))) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(t.into()))) + .saturating_add(Weight::from_parts(0, 2781).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(0, 9308).saturating_mul(t.into())) } - // Storage: Slots Leases (r:1 w:1) - // Storage: System Account (r:8 w:8) + /// Storage: Slots Leases (r:1 w:1) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: System Account (r:8 w:8) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn clear_all_leases() -> Weight { - // Minimum execution time: 96_740 nanoseconds. - Weight::from_ref_time(98_440_000) + // Proof Size summary in bytes: + // Measured: `2759` + // Estimated: `28038` + // Minimum execution time: 100_595_000 picoseconds. + Weight::from_parts(102_289_000, 0) + .saturating_add(Weight::from_parts(0, 28038)) .saturating_add(T::DbWeight::get().reads(9)) .saturating_add(T::DbWeight::get().writes(9)) } - // Storage: Slots Leases (r:1 w:0) - // Storage: Paras ParaLifecycles (r:1 w:1) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) - // Storage: Registrar Paras (r:1 w:1) + /// Storage: Slots Leases (r:1 w:0) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:1) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) + /// Storage: Registrar Paras (r:1 w:1) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) fn trigger_onboard() -> Weight { - // Minimum execution time: 30_791 nanoseconds. - Weight::from_ref_time(31_508_000) + // Proof Size summary in bytes: + // Measured: `670` + // Estimated: `18695` + // Minimum execution time: 28_883_000 picoseconds. + Weight::from_parts(29_921_000, 0) + .saturating_add(Weight::from_parts(0, 18695)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(3)) } diff --git a/runtime/rococo/src/weights/runtime_parachains_configuration.rs b/runtime/rococo/src/weights/runtime_parachains_configuration.rs index 9c76afd9c431..11b5ba9c438d 100644 --- a/runtime/rococo/src/weights/runtime_parachains_configuration.rs +++ b/runtime/rococo/src/weights/runtime_parachains_configuration.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_parachains::configuration` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -44,58 +45,103 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_parachains::configuration`. pub struct WeightInfo(PhantomData); impl runtime_parachains::configuration::WeightInfo for WeightInfo { - // Storage: Configuration PendingConfigs (r:1 w:1) - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Configuration BypassConsistencyCheck (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Storage: Configuration PendingConfigs (r:1 w:1) + /// Proof Skipped: Configuration PendingConfigs (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration BypassConsistencyCheck (r:1 w:0) + /// Proof Skipped: Configuration BypassConsistencyCheck (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) fn set_config_with_block_number() -> Weight { - // Minimum execution time: 12_720 nanoseconds. - Weight::from_ref_time(13_192_000) + // Proof Size summary in bytes: + // Measured: `392` + // Estimated: `7508` + // Minimum execution time: 12_943_000 picoseconds. + Weight::from_parts(13_396_000, 0) + .saturating_add(Weight::from_parts(0, 7508)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Configuration PendingConfigs (r:1 w:1) - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Configuration BypassConsistencyCheck (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Storage: Configuration PendingConfigs (r:1 w:1) + /// Proof Skipped: Configuration PendingConfigs (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration BypassConsistencyCheck (r:1 w:0) + /// Proof Skipped: Configuration BypassConsistencyCheck (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) fn set_config_with_u32() -> Weight { - // Minimum execution time: 12_770 nanoseconds. - Weight::from_ref_time(13_095_000) + // Proof Size summary in bytes: + // Measured: `392` + // Estimated: `7508` + // Minimum execution time: 13_054_000 picoseconds. + Weight::from_parts(13_391_000, 0) + .saturating_add(Weight::from_parts(0, 7508)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Configuration PendingConfigs (r:1 w:1) - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Configuration BypassConsistencyCheck (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Storage: Configuration PendingConfigs (r:1 w:1) + /// Proof Skipped: Configuration PendingConfigs (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration BypassConsistencyCheck (r:1 w:0) + /// Proof Skipped: Configuration BypassConsistencyCheck (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) fn set_config_with_option_u32() -> Weight { - // Minimum execution time: 12_384 nanoseconds. - Weight::from_ref_time(12_755_000) + // Proof Size summary in bytes: + // Measured: `392` + // Estimated: `7508` + // Minimum execution time: 13_012_000 picoseconds. + Weight::from_parts(13_464_000, 0) + .saturating_add(Weight::from_parts(0, 7508)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Configuration PendingConfigs (r:1 w:1) - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Configuration BypassConsistencyCheck (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Storage: Configuration PendingConfigs (r:1 w:1) + /// Proof Skipped: Configuration PendingConfigs (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration BypassConsistencyCheck (r:1 w:0) + /// Proof Skipped: Configuration BypassConsistencyCheck (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) fn set_config_with_weight() -> Weight { - // Minimum execution time: 12_763 nanoseconds. - Weight::from_ref_time(13_109_000) + // Proof Size summary in bytes: + // Measured: `392` + // Estimated: `7508` + // Minimum execution time: 12_998_000 picoseconds. + Weight::from_parts(13_458_000, 0) + .saturating_add(Weight::from_parts(0, 7508)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Benchmark Override (r:0 w:0) + /// Storage: Benchmark Override (r:0 w:0) + /// Proof Skipped: Benchmark Override (max_values: None, max_size: None, mode: Measured) fn set_hrmp_open_request_ttl() -> Weight { - // Minimum execution time: 2_000_000_000 nanoseconds. - Weight::from_ref_time(2_000_000_000_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_000_000_000_000 picoseconds. + Weight::from_parts(2_000_000_000_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } - // Storage: Configuration PendingConfigs (r:1 w:1) - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Configuration BypassConsistencyCheck (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Storage: Configuration PendingConfigs (r:1 w:1) + /// Proof Skipped: Configuration PendingConfigs (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration BypassConsistencyCheck (r:1 w:0) + /// Proof Skipped: Configuration BypassConsistencyCheck (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) fn set_config_with_balance() -> Weight { - // Minimum execution time: 12_449 nanoseconds. - Weight::from_ref_time(12_818_000) + // Proof Size summary in bytes: + // Measured: `392` + // Estimated: `7508` + // Minimum execution time: 12_815_000 picoseconds. + Weight::from_parts(13_368_000, 0) + .saturating_add(Weight::from_parts(0, 7508)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/rococo/src/weights/runtime_parachains_disputes.rs b/runtime/rococo/src/weights/runtime_parachains_disputes.rs index 69c6944e8458..21270cbb672f 100644 --- a/runtime/rococo/src/weights/runtime_parachains_disputes.rs +++ b/runtime/rococo/src/weights/runtime_parachains_disputes.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_parachains::disputes` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -44,10 +45,15 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_parachains::disputes`. pub struct WeightInfo(PhantomData); impl runtime_parachains::disputes::WeightInfo for WeightInfo { - // Storage: ParasDisputes Frozen (r:0 w:1) + /// Storage: ParasDisputes Frozen (r:0 w:1) + /// Proof Skipped: ParasDisputes Frozen (max_values: Some(1), max_size: None, mode: Measured) fn force_unfreeze() -> Weight { - // Minimum execution time: 5_029 nanoseconds. - Weight::from_ref_time(5_281_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_037_000 picoseconds. + Weight::from_parts(3_164_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/runtime/rococo/src/weights/runtime_parachains_hrmp.rs b/runtime/rococo/src/weights/runtime_parachains_hrmp.rs index 2eaad96c03f9..f217f151baf6 100644 --- a/runtime/rococo/src/weights/runtime_parachains_hrmp.rs +++ b/runtime/rococo/src/weights/runtime_parachains_hrmp.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_parachains::hrmp` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -44,144 +45,245 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_parachains::hrmp`. pub struct WeightInfo(PhantomData); impl runtime_parachains::hrmp::WeightInfo for WeightInfo { - // Storage: Paras ParaLifecycles (r:2 w:0) - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) - // Storage: Hrmp HrmpChannels (r:1 w:0) - // Storage: Hrmp HrmpEgressChannelsIndex (r:1 w:0) - // Storage: Hrmp HrmpOpenChannelRequestCount (r:1 w:1) - // Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) - // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) - // Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Storage: Paras ParaLifecycles (r:2 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequests (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannels (r:1 w:0) + /// Proof Skipped: Hrmp HrmpChannels (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpEgressChannelsIndex (r:1 w:0) + /// Proof Skipped: Hrmp HrmpEgressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestCount (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestCount (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestsList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) fn hrmp_init_open_channel() -> Weight { - // Minimum execution time: 43_497 nanoseconds. - Weight::from_ref_time(44_266_000) + // Proof Size summary in bytes: + // Measured: `719` + // Estimated: `36171` + // Minimum execution time: 40_335_000 picoseconds. + Weight::from_parts(40_824_000, 0) + .saturating_add(Weight::from_parts(0, 36171)) .saturating_add(T::DbWeight::get().reads(10)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Paras ParaLifecycles (r:1 w:0) - // Storage: Hrmp HrmpIngressChannelsIndex (r:1 w:0) - // Storage: Hrmp HrmpAcceptedChannelRequestCount (r:1 w:1) - // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) - // Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequests (max_values: None, max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpIngressChannelsIndex (r:1 w:0) + /// Proof Skipped: Hrmp HrmpIngressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpAcceptedChannelRequestCount (r:1 w:1) + /// Proof Skipped: Hrmp HrmpAcceptedChannelRequestCount (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) fn hrmp_accept_open_channel() -> Weight { - // Minimum execution time: 43_104 nanoseconds. - Weight::from_ref_time(43_527_000) + // Proof Size summary in bytes: + // Measured: `951` + // Estimated: `28932` + // Minimum execution time: 43_130_000 picoseconds. + Weight::from_parts(43_826_000, 0) + .saturating_add(Weight::from_parts(0, 28932)) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Hrmp HrmpChannels (r:1 w:0) - // Storage: Hrmp HrmpCloseChannelRequests (r:1 w:1) - // Storage: Hrmp HrmpCloseChannelRequestsList (r:1 w:1) - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) - // Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Storage: Hrmp HrmpChannels (r:1 w:0) + /// Proof Skipped: Hrmp HrmpChannels (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpCloseChannelRequests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpCloseChannelRequests (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpCloseChannelRequestsList (r:1 w:1) + /// Proof Skipped: Hrmp HrmpCloseChannelRequestsList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) fn hrmp_close_channel() -> Weight { - // Minimum execution time: 39_460 nanoseconds. - Weight::from_ref_time(39_694_000) + // Proof Size summary in bytes: + // Measured: `822` + // Estimated: `21762` + // Minimum execution time: 36_371_000 picoseconds. + Weight::from_parts(36_901_000, 0) + .saturating_add(Weight::from_parts(0, 21762)) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Hrmp HrmpIngressChannelsIndex (r:128 w:127) - // Storage: Hrmp HrmpEgressChannelsIndex (r:1 w:1) - // Storage: Hrmp HrmpChannels (r:127 w:127) - // Storage: Hrmp HrmpAcceptedChannelRequestCount (r:0 w:1) - // Storage: Hrmp HrmpChannelContents (r:0 w:127) - // Storage: Hrmp HrmpOpenChannelRequestCount (r:0 w:1) + /// Storage: Hrmp HrmpIngressChannelsIndex (r:128 w:128) + /// Proof Skipped: Hrmp HrmpIngressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpEgressChannelsIndex (r:128 w:128) + /// Proof Skipped: Hrmp HrmpEgressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannels (r:254 w:254) + /// Proof Skipped: Hrmp HrmpChannels (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpAcceptedChannelRequestCount (r:0 w:1) + /// Proof Skipped: Hrmp HrmpAcceptedChannelRequestCount (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannelContents (r:0 w:254) + /// Proof Skipped: Hrmp HrmpChannelContents (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestCount (r:0 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestCount (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[0, 127]`. /// The range of component `e` is `[0, 127]`. fn force_clean_hrmp(i: u32, e: u32, ) -> Weight { - // Minimum execution time: 897_190 nanoseconds. - Weight::from_ref_time(904_507_000) - // Standard Error: 81_636 - .saturating_add(Weight::from_ref_time(2_799_978).saturating_mul(i.into())) - // Standard Error: 81_636 - .saturating_add(Weight::from_ref_time(2_802_101).saturating_mul(e.into())) + // Proof Size summary in bytes: + // Measured: `264 + i * (100 ±0) + e * (100 ±0)` + // Estimated: `9486 + i * (5550 ±0) + e * (5550 ±0)` + // Minimum execution time: 1_067_875_000 picoseconds. + Weight::from_parts(1_073_769_000, 0) + .saturating_add(Weight::from_parts(0, 9486)) + // Standard Error: 95_826 + .saturating_add(Weight::from_parts(3_089_576, 0).saturating_mul(i.into())) + // Standard Error: 95_826 + .saturating_add(Weight::from_parts(3_125_375, 0).saturating_mul(e.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(i.into()))) .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(e.into()))) .saturating_add(T::DbWeight::get().writes(4)) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(i.into()))) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(e.into()))) + .saturating_add(Weight::from_parts(0, 5550).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(0, 5550).saturating_mul(e.into())) } - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:0) - // Storage: Hrmp HrmpOpenChannelRequests (r:2 w:2) - // Storage: Paras ParaLifecycles (r:4 w:0) - // Storage: Hrmp HrmpIngressChannelsIndex (r:2 w:2) - // Storage: Hrmp HrmpEgressChannelsIndex (r:2 w:2) - // Storage: Hrmp HrmpOpenChannelRequestCount (r:2 w:2) - // Storage: Hrmp HrmpAcceptedChannelRequestCount (r:2 w:2) - // Storage: Hrmp HrmpChannels (r:0 w:2) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestsList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequests (r:128 w:128) + /// Proof Skipped: Hrmp HrmpOpenChannelRequests (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:256 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpIngressChannelsIndex (r:128 w:128) + /// Proof Skipped: Hrmp HrmpIngressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpEgressChannelsIndex (r:128 w:128) + /// Proof Skipped: Hrmp HrmpEgressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestCount (r:128 w:128) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestCount (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpAcceptedChannelRequestCount (r:128 w:128) + /// Proof Skipped: Hrmp HrmpAcceptedChannelRequestCount (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannels (r:0 w:128) + /// Proof Skipped: Hrmp HrmpChannels (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[0, 128]`. fn force_process_hrmp_open(c: u32, ) -> Weight { - // Minimum execution time: 10_531 nanoseconds. - Weight::from_ref_time(1_324_155) - // Standard Error: 21_195 - .saturating_add(Weight::from_ref_time(16_379_005).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `794 + c * (136 ±0)` + // Estimated: `15954 + c * (18549 ±0)` + // Minimum execution time: 10_514_000 picoseconds. + Weight::from_parts(5_697_794, 0) + .saturating_add(Weight::from_parts(0, 15954)) + // Standard Error: 16_431 + .saturating_add(Weight::from_parts(18_685_009, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().reads((7_u64).saturating_mul(c.into()))) .saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes((6_u64).saturating_mul(c.into()))) + .saturating_add(Weight::from_parts(0, 18549).saturating_mul(c.into())) } - // Storage: Hrmp HrmpCloseChannelRequestsList (r:1 w:0) - // Storage: Hrmp HrmpChannels (r:2 w:2) - // Storage: Hrmp HrmpEgressChannelsIndex (r:2 w:2) - // Storage: Hrmp HrmpIngressChannelsIndex (r:2 w:2) - // Storage: Hrmp HrmpCloseChannelRequests (r:0 w:2) - // Storage: Hrmp HrmpChannelContents (r:0 w:2) + /// Storage: Hrmp HrmpCloseChannelRequestsList (r:1 w:1) + /// Proof Skipped: Hrmp HrmpCloseChannelRequestsList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannels (r:128 w:128) + /// Proof Skipped: Hrmp HrmpChannels (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpEgressChannelsIndex (r:128 w:128) + /// Proof Skipped: Hrmp HrmpEgressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpIngressChannelsIndex (r:128 w:128) + /// Proof Skipped: Hrmp HrmpIngressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpCloseChannelRequests (r:0 w:128) + /// Proof Skipped: Hrmp HrmpCloseChannelRequests (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannelContents (r:0 w:128) + /// Proof Skipped: Hrmp HrmpChannelContents (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[0, 128]`. fn force_process_hrmp_close(c: u32, ) -> Weight { - // Minimum execution time: 6_977 nanoseconds. - Weight::from_ref_time(7_120_000) - // Standard Error: 8_117 - .saturating_add(Weight::from_ref_time(9_994_010).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `335 + c * (124 ±0)` + // Estimated: `6375 + c * (8175 ±0)` + // Minimum execution time: 6_912_000 picoseconds. + Weight::from_parts(5_970_987, 0) + .saturating_add(Weight::from_parts(0, 6375)) + // Standard Error: 9_971 + .saturating_add(Weight::from_parts(11_348_517, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(c.into()))) .saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes((5_u64).saturating_mul(c.into()))) + .saturating_add(Weight::from_parts(0, 8175).saturating_mul(c.into())) } - // Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) - // Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) - // Storage: Hrmp HrmpOpenChannelRequestCount (r:1 w:1) + /// Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestsList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequests (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestCount (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestCount (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[0, 128]`. fn hrmp_cancel_open_request(c: u32, ) -> Weight { - // Minimum execution time: 26_652 nanoseconds. - Weight::from_ref_time(32_863_125) - // Standard Error: 1_412 - .saturating_add(Weight::from_ref_time(94_403).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `1026 + c * (13 ±0)` + // Estimated: `10905 + c * (45 ±0)` + // Minimum execution time: 22_649_000 picoseconds. + Weight::from_parts(27_439_954, 0) + .saturating_add(Weight::from_parts(0, 10905)) + // Standard Error: 1_101 + .saturating_add(Weight::from_parts(54_107, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 45).saturating_mul(c.into())) } - // Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) - // Storage: Hrmp HrmpOpenChannelRequests (r:2 w:2) + /// Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestsList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequests (r:128 w:128) + /// Proof Skipped: Hrmp HrmpOpenChannelRequests (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[0, 128]`. fn clean_open_channel_requests(c: u32, ) -> Weight { - // Minimum execution time: 4_939 nanoseconds. - Weight::from_ref_time(3_454_397) - // Standard Error: 3_850 - .saturating_add(Weight::from_ref_time(2_648_173).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `243 + c * (63 ±0)` + // Estimated: `2955 + c * (2602 ±0)` + // Minimum execution time: 5_030_000 picoseconds. + Weight::from_parts(4_932_487, 0) + .saturating_add(Weight::from_parts(0, 2955)) + // Standard Error: 2_697 + .saturating_add(Weight::from_parts(3_108_379, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(c.into()))) .saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(c.into()))) + .saturating_add(Weight::from_parts(0, 2602).saturating_mul(c.into())) } - // Storage: Paras ParaLifecycles (r:2 w:0) - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) - // Storage: Hrmp HrmpChannels (r:1 w:0) - // Storage: Hrmp HrmpEgressChannelsIndex (r:1 w:0) - // Storage: Hrmp HrmpOpenChannelRequestCount (r:1 w:1) - // Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) - // Storage: Dmp DownwardMessageQueueHeads (r:2 w:2) - // Storage: Dmp DownwardMessageQueues (r:2 w:2) - // Storage: Hrmp HrmpIngressChannelsIndex (r:1 w:0) - // Storage: Hrmp HrmpAcceptedChannelRequestCount (r:1 w:1) + /// Storage: Paras ParaLifecycles (r:2 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequests (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannels (r:1 w:0) + /// Proof Skipped: Hrmp HrmpChannels (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpEgressChannelsIndex (r:1 w:0) + /// Proof Skipped: Hrmp HrmpEgressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestCount (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestCount (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestsList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:2 w:2) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:2 w:2) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpIngressChannelsIndex (r:1 w:0) + /// Proof Skipped: Hrmp HrmpIngressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpAcceptedChannelRequestCount (r:1 w:1) + /// Proof Skipped: Hrmp HrmpAcceptedChannelRequestCount (max_values: None, max_size: None, mode: Measured) fn force_open_hrmp_channel() -> Weight { - // Minimum execution time: 54_190 nanoseconds. - Weight::from_ref_time(54_773_000) + // Proof Size summary in bytes: + // Measured: `719` + // Estimated: `49489` + // Minimum execution time: 54_530_000 picoseconds. + Weight::from_parts(55_259_000, 0) + .saturating_add(Weight::from_parts(0, 49489)) .saturating_add(T::DbWeight::get().reads(14)) .saturating_add(T::DbWeight::get().writes(8)) } diff --git a/runtime/rococo/src/weights/runtime_parachains_initializer.rs b/runtime/rococo/src/weights/runtime_parachains_initializer.rs index 12d3c96055f0..6172b9a90237 100644 --- a/runtime/rococo/src/weights/runtime_parachains_initializer.rs +++ b/runtime/rococo/src/weights/runtime_parachains_initializer.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_parachains::initializer` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -44,14 +45,20 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_parachains::initializer`. pub struct WeightInfo(PhantomData); impl runtime_parachains::initializer::WeightInfo for WeightInfo { - // Storage: System Digest (r:1 w:1) + /// Storage: System Digest (r:1 w:1) + /// Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `d` is `[0, 65536]`. fn force_approve(d: u32, ) -> Weight { - // Minimum execution time: 8_271 nanoseconds. - Weight::from_ref_time(11_209_011) - // Standard Error: 4 - .saturating_add(Weight::from_ref_time(1_311).saturating_mul(d.into())) + // Proof Size summary in bytes: + // Measured: `0 + d * (11 ±0)` + // Estimated: `1480 + d * (11 ±0)` + // Minimum execution time: 4_142_000 picoseconds. + Weight::from_parts(7_747_144, 0) + .saturating_add(Weight::from_parts(0, 1480)) + // Standard Error: 5 + .saturating_add(Weight::from_parts(1_309, 0).saturating_mul(d.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 11).saturating_mul(d.into())) } } diff --git a/runtime/rococo/src/weights/runtime_parachains_paras.rs b/runtime/rococo/src/weights/runtime_parachains_paras.rs index c2e295779191..e7618336e99b 100644 --- a/runtime/rococo/src/weights/runtime_parachains_paras.rs +++ b/runtime/rococo/src/weights/runtime_parachains_paras.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_parachains::paras` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -44,154 +45,244 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_parachains::paras`. pub struct WeightInfo(PhantomData); impl runtime_parachains::paras::WeightInfo for WeightInfo { - // Storage: Paras CurrentCodeHash (r:1 w:1) - // Storage: Paras CodeByHashRefs (r:1 w:1) - // Storage: Paras PastCodeMeta (r:1 w:1) - // Storage: Paras PastCodePruning (r:1 w:1) - // Storage: Paras PastCodeHash (r:0 w:1) - // Storage: Paras CodeByHash (r:0 w:1) + /// Storage: Paras CurrentCodeHash (r:1 w:1) + /// Proof Skipped: Paras CurrentCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHashRefs (r:1 w:1) + /// Proof Skipped: Paras CodeByHashRefs (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras PastCodeMeta (r:1 w:1) + /// Proof Skipped: Paras PastCodeMeta (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras PastCodePruning (r:1 w:1) + /// Proof Skipped: Paras PastCodePruning (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PastCodeHash (r:0 w:1) + /// Proof Skipped: Paras PastCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHash (r:0 w:1) + /// Proof Skipped: Paras CodeByHash (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[1, 3145728]`. fn force_set_current_code(c: u32, ) -> Weight { - // Minimum execution time: 37_151 nanoseconds. - Weight::from_ref_time(37_533_000) + // Proof Size summary in bytes: + // Measured: `8309` + // Estimated: `61734` + // Minimum execution time: 34_331_000 picoseconds. + Weight::from_parts(34_533_000, 0) + .saturating_add(Weight::from_parts(0, 61734)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(2_366).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(1_999, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: Paras Heads (r:0 w:1) + /// Storage: Paras Heads (r:0 w:1) + /// Proof Skipped: Paras Heads (max_values: None, max_size: None, mode: Measured) /// The range of component `s` is `[1, 1048576]`. fn force_set_current_head(s: u32, ) -> Weight { - // Minimum execution time: 13_523 nanoseconds. - Weight::from_ref_time(13_824_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 8_832_000 picoseconds. + Weight::from_parts(8_992_000, 0) + .saturating_add(Weight::from_parts(0, 0)) // Standard Error: 2 - .saturating_add(Weight::from_ref_time(964).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(918, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: Paras FutureCodeHash (r:1 w:1) - // Storage: Paras CurrentCodeHash (r:1 w:0) - // Storage: Paras UpgradeCooldowns (r:1 w:1) - // Storage: Paras PvfActiveVoteMap (r:1 w:0) - // Storage: Paras CodeByHash (r:1 w:1) - // Storage: Paras UpcomingUpgrades (r:1 w:1) - // Storage: System Digest (r:1 w:1) - // Storage: Paras CodeByHashRefs (r:1 w:1) - // Storage: Paras FutureCodeUpgrades (r:0 w:1) - // Storage: Paras UpgradeRestrictionSignal (r:0 w:1) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras FutureCodeHash (r:1 w:1) + /// Proof Skipped: Paras FutureCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CurrentCodeHash (r:1 w:0) + /// Proof Skipped: Paras CurrentCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeCooldowns (r:1 w:1) + /// Proof Skipped: Paras UpgradeCooldowns (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:0) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHash (r:1 w:1) + /// Proof Skipped: Paras CodeByHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpcomingUpgrades (r:1 w:1) + /// Proof Skipped: Paras UpcomingUpgrades (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System Digest (r:1 w:1) + /// Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras CodeByHashRefs (r:1 w:1) + /// Proof Skipped: Paras CodeByHashRefs (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras FutureCodeUpgrades (r:0 w:1) + /// Proof Skipped: Paras FutureCodeUpgrades (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeRestrictionSignal (r:0 w:1) + /// Proof Skipped: Paras UpgradeRestrictionSignal (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[1, 3145728]`. fn force_schedule_code_upgrade(c: u32, ) -> Weight { - // Minimum execution time: 62_772 nanoseconds. - Weight::from_ref_time(63_277_000) + // Proof Size summary in bytes: + // Measured: `16764` + // Estimated: `207669` + // Minimum execution time: 62_536_000 picoseconds. + Weight::from_parts(62_832_000, 0) + .saturating_add(Weight::from_parts(0, 207669)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(2_390).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(2_024, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(9)) .saturating_add(T::DbWeight::get().writes(8)) } - // Storage: Paras FutureCodeUpgrades (r:1 w:0) - // Storage: Paras Heads (r:0 w:1) - // Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Storage: Paras FutureCodeUpgrades (r:1 w:0) + /// Proof Skipped: Paras FutureCodeUpgrades (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras Heads (r:0 w:1) + /// Proof Skipped: Paras Heads (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Proof Skipped: Paras UpgradeGoAheadSignal (max_values: None, max_size: None, mode: Measured) /// The range of component `s` is `[1, 1048576]`. fn force_note_new_head(s: u32, ) -> Weight { - // Minimum execution time: 19_830 nanoseconds. - Weight::from_ref_time(20_085_000) + // Proof Size summary in bytes: + // Measured: `95` + // Estimated: `3750` + // Minimum execution time: 14_769_000 picoseconds. + Weight::from_parts(15_014_000, 0) + .saturating_add(Weight::from_parts(0, 3750)) // Standard Error: 2 - .saturating_add(Weight::from_ref_time(966).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(923, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) fn force_queue_action() -> Weight { - // Minimum execution time: 24_757 nanoseconds. - Weight::from_ref_time(25_099_000) + // Proof Size summary in bytes: + // Measured: `4251` + // Estimated: `13452` + // Minimum execution time: 20_839_000 picoseconds. + Weight::from_parts(21_284_000, 0) + .saturating_add(Weight::from_parts(0, 13452)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Paras PvfActiveVoteMap (r:1 w:0) - // Storage: Paras CodeByHash (r:1 w:1) + /// Storage: Paras PvfActiveVoteMap (r:1 w:0) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHash (r:1 w:1) + /// Proof Skipped: Paras CodeByHash (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[1, 3145728]`. fn add_trusted_validation_code(c: u32, ) -> Weight { - // Minimum execution time: 9_151 nanoseconds. - Weight::from_ref_time(9_282_000) + // Proof Size summary in bytes: + // Measured: `28` + // Estimated: `6986` + // Minimum execution time: 9_121_000 picoseconds. + Weight::from_parts(9_282_000, 0) + .saturating_add(Weight::from_parts(0, 6986)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(2_374).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(2_007, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Paras CodeByHashRefs (r:1 w:0) - // Storage: Paras CodeByHash (r:0 w:1) + /// Storage: Paras CodeByHashRefs (r:1 w:0) + /// Proof Skipped: Paras CodeByHashRefs (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHash (r:0 w:1) + /// Proof Skipped: Paras CodeByHash (max_values: None, max_size: None, mode: Measured) fn poke_unused_validation_code() -> Weight { - // Minimum execution time: 7_359 nanoseconds. - Weight::from_ref_time(7_540_000) + // Proof Size summary in bytes: + // Measured: `28` + // Estimated: `3521` + // Minimum execution time: 6_931_000 picoseconds. + Weight::from_parts(7_138_000, 0) + .saturating_add(Weight::from_parts(0, 3521)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras PvfActiveVoteMap (r:1 w:1) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:1) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) fn include_pvf_check_statement() -> Weight { - // Minimum execution time: 95_056 nanoseconds. - Weight::from_ref_time(96_608_000) + // Proof Size summary in bytes: + // Measured: `26947` + // Estimated: `115708` + // Minimum execution time: 93_627_000 picoseconds. + Weight::from_parts(96_617_000, 0) + .saturating_add(Weight::from_parts(0, 115708)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras PvfActiveVoteMap (r:1 w:1) - // Storage: Paras PvfActiveVoteList (r:1 w:1) - // Storage: Paras UpcomingUpgrades (r:1 w:1) - // Storage: System Digest (r:1 w:1) - // Storage: Paras FutureCodeUpgrades (r:0 w:100) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:1) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteList (r:1 w:1) + /// Proof Skipped: Paras PvfActiveVoteList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras UpcomingUpgrades (r:1 w:1) + /// Proof Skipped: Paras UpcomingUpgrades (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System Digest (r:1 w:1) + /// Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras FutureCodeUpgrades (r:0 w:100) + /// Proof Skipped: Paras FutureCodeUpgrades (max_values: None, max_size: None, mode: Measured) fn include_pvf_check_statement_finalize_upgrade_accept() -> Weight { - // Minimum execution time: 669_650 nanoseconds. - Weight::from_ref_time(676_168_000) + // Proof Size summary in bytes: + // Measured: `27501` + // Estimated: `232383` + // Minimum execution time: 814_663_000 picoseconds. + Weight::from_parts(820_066_000, 0) + .saturating_add(Weight::from_parts(0, 232383)) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(104)) } - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras PvfActiveVoteMap (r:1 w:1) - // Storage: Paras PvfActiveVoteList (r:1 w:1) - // Storage: Paras CodeByHashRefs (r:1 w:1) - // Storage: Paras CodeByHash (r:0 w:1) - // Storage: Paras UpgradeGoAheadSignal (r:0 w:100) - // Storage: Paras FutureCodeHash (r:0 w:100) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:1) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) fn include_pvf_check_statement_finalize_upgrade_reject() -> Weight { - // Minimum execution time: 630_406 nanoseconds. - Weight::from_ref_time(637_880_000) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(204)) + // Proof Size summary in bytes: + // Measured: `27479` + // Estimated: `117836` + // Minimum execution time: 92_155_000 picoseconds. + Weight::from_parts(93_771_000, 0) + .saturating_add(Weight::from_parts(0, 117836)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras PvfActiveVoteMap (r:1 w:1) - // Storage: Paras PvfActiveVoteList (r:1 w:1) - // Storage: Paras ActionsQueue (r:1 w:1) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:1) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteList (r:1 w:1) + /// Proof Skipped: Paras PvfActiveVoteList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) fn include_pvf_check_statement_finalize_onboarding_accept() -> Weight { - // Minimum execution time: 520_712 nanoseconds. - Weight::from_ref_time(526_679_000) + // Proof Size summary in bytes: + // Measured: `26969` + // Estimated: `174684` + // Minimum execution time: 660_101_000 picoseconds. + Weight::from_parts(666_641_000, 0) + .saturating_add(Weight::from_parts(0, 174684)) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Configuration ActiveConfig (r:1 w:0) - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras PvfActiveVoteMap (r:1 w:1) - // Storage: Paras PvfActiveVoteList (r:1 w:1) - // Storage: Paras CodeByHashRefs (r:1 w:1) - // Storage: Paras ParaLifecycles (r:0 w:100) - // Storage: Paras CodeByHash (r:0 w:1) - // Storage: Paras CurrentCodeHash (r:0 w:100) - // Storage: Paras UpcomingParasGenesis (r:0 w:100) + /// Storage: Configuration ActiveConfig (r:1 w:0) + /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:1) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) fn include_pvf_check_statement_finalize_onboarding_reject() -> Weight { - // Minimum execution time: 708_950 nanoseconds. - Weight::from_ref_time(714_709_000) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(304)) + // Proof Size summary in bytes: + // Measured: `26947` + // Estimated: `115708` + // Minimum execution time: 91_525_000 picoseconds. + Weight::from_parts(92_594_000, 0) + .saturating_add(Weight::from_parts(0, 115708)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/runtime/rococo/src/weights/runtime_parachains_paras_inherent.rs b/runtime/rococo/src/weights/runtime_parachains_paras_inherent.rs index 9f2a741c57e2..7df9411d24a7 100644 --- a/runtime/rococo/src/weights/runtime_parachains_paras_inherent.rs +++ b/runtime/rococo/src/weights/runtime_parachains_paras_inherent.rs @@ -70,9 +70,9 @@ impl runtime_parachains::paras_inherent::WeightInfo for // Storage: Hrmp HrmpWatermarks (r:0 w:1) // Storage: Paras Heads (r:0 w:1) fn enter_variable_disputes(v: u32, ) -> Weight { - Weight::from_ref_time(352_590_000 as u64) + Weight::from_parts(352_590_000 as u64, 0) // Standard Error: 13_000 - .saturating_add(Weight::from_ref_time(49_254_000 as u64).saturating_mul(v as u64)) + .saturating_add(Weight::from_parts(49_254_000 as u64, 0).saturating_mul(v as u64)) .saturating_add(T::DbWeight::get().reads(24 as u64)) .saturating_add(T::DbWeight::get().writes(16 as u64)) } @@ -102,7 +102,7 @@ impl runtime_parachains::paras_inherent::WeightInfo for // Storage: Hrmp HrmpWatermarks (r:0 w:1) // Storage: Paras Heads (r:0 w:1) fn enter_bitfields() -> Weight { - Weight::from_ref_time(299_878_000 as u64) + Weight::from_parts(299_878_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(21 as u64)) .saturating_add(T::DbWeight::get().writes(15 as u64)) } @@ -134,7 +134,7 @@ impl runtime_parachains::paras_inherent::WeightInfo for // Storage: Hrmp HrmpWatermarks (r:0 w:1) // Storage: Paras Heads (r:0 w:1) fn enter_backed_candidates_variable(_v: u32) -> Weight { - Weight::from_ref_time(442_472_000 as u64) + Weight::from_parts(442_472_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(25 as u64)) .saturating_add(T::DbWeight::get().writes(14 as u64)) } @@ -166,7 +166,7 @@ impl runtime_parachains::paras_inherent::WeightInfo for // Storage: Hrmp HrmpWatermarks (r:0 w:1) // Storage: Paras Heads (r:0 w:1) fn enter_backed_candidate_code_upgrade() -> Weight { - Weight::from_ref_time(36_903_411_000 as u64) + Weight::from_parts(36_903_411_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(25 as u64)) .saturating_add(T::DbWeight::get().writes(14 as u64)) } diff --git a/runtime/rococo/src/weights/runtime_parachains_ump.rs b/runtime/rococo/src/weights/runtime_parachains_ump.rs index d8bcb418aef4..74ee02f74660 100644 --- a/runtime/rococo/src/weights/runtime_parachains_ump.rs +++ b/runtime/rococo/src/weights/runtime_parachains_ump.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_parachains::ump` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024 // Executed Command: @@ -46,26 +47,45 @@ pub struct WeightInfo(PhantomData); impl runtime_parachains::ump::WeightInfo for WeightInfo { /// The range of component `s` is `[0, 51200]`. fn process_upward_message(s: u32, ) -> Weight { - // Minimum execution time: 11_047 nanoseconds. - Weight::from_ref_time(8_068_271) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 6_394_000 picoseconds. + Weight::from_parts(119_419, 0) + .saturating_add(Weight::from_parts(0, 0)) // Standard Error: 12 - .saturating_add(Weight::from_ref_time(1_983).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(1_574, 0).saturating_mul(s.into())) } - // Storage: Ump NeedsDispatch (r:1 w:1) - // Storage: Ump NextDispatchRoundStartWith (r:1 w:1) - // Storage: Ump RelayDispatchQueues (r:0 w:1) - // Storage: Ump RelayDispatchQueueSize (r:0 w:1) + /// Storage: Ump NeedsDispatch (r:1 w:1) + /// Proof Skipped: Ump NeedsDispatch (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Ump NextDispatchRoundStartWith (r:1 w:1) + /// Proof Skipped: Ump NextDispatchRoundStartWith (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Ump RelayDispatchQueues (r:0 w:1) + /// Proof Skipped: Ump RelayDispatchQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Ump RelayDispatchQueueSize (r:0 w:1) + /// Proof Skipped: Ump RelayDispatchQueueSize (max_values: None, max_size: None, mode: Measured) fn clean_ump_after_outgoing() -> Weight { - // Minimum execution time: 9_837 nanoseconds. - Weight::from_ref_time(10_134_000) + // Proof Size summary in bytes: + // Measured: `202` + // Estimated: `3778` + // Minimum execution time: 8_934_000 picoseconds. + Weight::from_parts(9_220_000, 0) + .saturating_add(Weight::from_parts(0, 3778)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Ump Overweight (r:1 w:1) + /// Storage: Ump Overweight (r:1 w:1) + /// Proof Skipped: Ump Overweight (max_values: None, max_size: None, mode: Measured) + /// Storage: Ump CounterForOverweight (r:1 w:1) + /// Proof: Ump CounterForOverweight (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn service_overweight() -> Weight { - // Minimum execution time: 26_666 nanoseconds. - Weight::from_ref_time(27_499_000) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) + // Proof Size summary in bytes: + // Measured: `219` + // Estimated: `5173` + // Minimum execution time: 23_618_000 picoseconds. + Weight::from_parts(23_992_000, 0) + .saturating_add(Weight::from_parts(0, 5173)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } } diff --git a/runtime/rococo/src/weights/xcm/mod.rs b/runtime/rococo/src/weights/xcm/mod.rs index 2c5d4d6f05f9..fc430805b5b8 100644 --- a/runtime/rococo/src/weights/xcm/mod.rs +++ b/runtime/rococo/src/weights/xcm/mod.rs @@ -1,13 +1,26 @@ +// Copyright 2017-2023 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + mod pallet_xcm_benchmarks_fungible; mod pallet_xcm_benchmarks_generic; use crate::Runtime; use frame_support::weights::Weight; use sp_std::prelude::*; -use xcm::{ - latest::{prelude::*, Weight as XCMWeight}, - DoubleEncoded, -}; +use xcm::{latest::prelude::*, DoubleEncoded}; use pallet_xcm_benchmarks_fungible::WeightInfo as XcmBalancesWeight; use pallet_xcm_benchmarks_generic::WeightInfo as XcmGeneric; @@ -31,15 +44,15 @@ impl From<&MultiAsset> for AssetTypes { } trait WeighMultiAssets { - fn weigh_multi_assets(&self, balances_weight: Weight) -> XCMWeight; + fn weigh_multi_assets(&self, balances_weight: Weight) -> Weight; } // Rococo only knows about one asset, the balances pallet. -const MAX_ASSETS: u32 = 1; +const MAX_ASSETS: u64 = 1; impl WeighMultiAssets for MultiAssetFilter { - fn weigh_multi_assets(&self, balances_weight: Weight) -> XCMWeight { - let weight = match self { + fn weigh_multi_assets(&self, balances_weight: Weight) -> Weight { + match self { Self::Definite(assets) => assets .inner() .into_iter() @@ -49,155 +62,227 @@ impl WeighMultiAssets for MultiAssetFilter { AssetTypes::Unknown => Weight::MAX, }) .fold(Weight::zero(), |acc, x| acc.saturating_add(x)), - Self::Wild(_) => balances_weight.saturating_mul(MAX_ASSETS as u64), - }; - - weight.ref_time() + // We don't support any NFTs on Rococo, so these two variants will always match + // only 1 kind of fungible asset. + Self::Wild(AllOf { .. } | AllOfCounted { .. }) => balances_weight, + Self::Wild(AllCounted(count)) => + balances_weight.saturating_mul(MAX_ASSETS.min(*count as u64)), + Self::Wild(All) => balances_weight.saturating_mul(MAX_ASSETS), + } } } impl WeighMultiAssets for MultiAssets { - fn weigh_multi_assets(&self, balances_weight: Weight) -> XCMWeight { - let weight = self - .inner() + fn weigh_multi_assets(&self, balances_weight: Weight) -> Weight { + self.inner() .into_iter() .map(|m| >::from(m)) .map(|t| match t { AssetTypes::Balances => balances_weight, AssetTypes::Unknown => Weight::MAX, }) - .fold(Weight::zero(), |acc, x| acc.saturating_add(x)); - - weight.ref_time() + .fold(Weight::zero(), |acc, x| acc.saturating_add(x)) } } -pub struct RococoXcmWeight(core::marker::PhantomData); -impl XcmWeightInfo for RococoXcmWeight { - fn withdraw_asset(assets: &MultiAssets) -> XCMWeight { +pub struct RococoXcmWeight(core::marker::PhantomData); +impl XcmWeightInfo for RococoXcmWeight { + fn withdraw_asset(assets: &MultiAssets) -> Weight { assets.weigh_multi_assets(XcmBalancesWeight::::withdraw_asset()) } - fn reserve_asset_deposited(assets: &MultiAssets) -> XCMWeight { + fn reserve_asset_deposited(assets: &MultiAssets) -> Weight { assets.weigh_multi_assets(XcmBalancesWeight::::reserve_asset_deposited()) } - fn receive_teleported_asset(assets: &MultiAssets) -> XCMWeight { + fn receive_teleported_asset(assets: &MultiAssets) -> Weight { assets.weigh_multi_assets(XcmBalancesWeight::::receive_teleported_asset()) } - fn query_response(_query_id: &u64, _response: &Response, _max_weight: &u64) -> XCMWeight { - XcmGeneric::::query_response().ref_time() + fn query_response( + _query_id: &u64, + _response: &Response, + _max_weight: &Weight, + _querier: &Option, + ) -> Weight { + XcmGeneric::::query_response() } - fn transfer_asset(assets: &MultiAssets, _dest: &MultiLocation) -> XCMWeight { + fn transfer_asset(assets: &MultiAssets, _dest: &MultiLocation) -> Weight { assets.weigh_multi_assets(XcmBalancesWeight::::transfer_asset()) } fn transfer_reserve_asset( assets: &MultiAssets, _dest: &MultiLocation, _xcm: &Xcm<()>, - ) -> XCMWeight { + ) -> Weight { assets.weigh_multi_assets(XcmBalancesWeight::::transfer_reserve_asset()) } fn transact( - _origin_type: &OriginKind, - _require_weight_at_most: &u64, - _call: &DoubleEncoded, - ) -> XCMWeight { - XcmGeneric::::transact().ref_time() + _origin_kind: &OriginKind, + _require_weight_at_most: &Weight, + _call: &DoubleEncoded, + ) -> Weight { + XcmGeneric::::transact() } fn hrmp_new_channel_open_request( _sender: &u32, _max_message_size: &u32, _max_capacity: &u32, - ) -> XCMWeight { + ) -> Weight { // XCM Executor does not currently support HRMP channel operations - Weight::MAX.ref_time() + Weight::MAX } - fn hrmp_channel_accepted(_recipient: &u32) -> XCMWeight { + fn hrmp_channel_accepted(_recipient: &u32) -> Weight { // XCM Executor does not currently support HRMP channel operations - Weight::MAX.ref_time() + Weight::MAX } - fn hrmp_channel_closing(_initiator: &u32, _sender: &u32, _recipient: &u32) -> XCMWeight { + fn hrmp_channel_closing(_initiator: &u32, _sender: &u32, _recipient: &u32) -> Weight { // XCM Executor does not currently support HRMP channel operations - Weight::MAX.ref_time() + Weight::MAX } - fn clear_origin() -> XCMWeight { - XcmGeneric::::clear_origin().ref_time() + fn clear_origin() -> Weight { + XcmGeneric::::clear_origin() } - fn descend_origin(_who: &InteriorMultiLocation) -> XCMWeight { - XcmGeneric::::descend_origin().ref_time() + fn descend_origin(_who: &InteriorMultiLocation) -> Weight { + XcmGeneric::::descend_origin() } - fn report_error( - _query_id: &QueryId, - _dest: &MultiLocation, - _max_response_weight: &u64, - ) -> XCMWeight { - XcmGeneric::::report_error().ref_time() + fn report_error(_query_response_info: &QueryResponseInfo) -> Weight { + XcmGeneric::::report_error() } - fn deposit_asset( - assets: &MultiAssetFilter, - _max_assets: &u32, // TODO use max assets? - _dest: &MultiLocation, - ) -> XCMWeight { + fn deposit_asset(assets: &MultiAssetFilter, _dest: &MultiLocation) -> Weight { assets.weigh_multi_assets(XcmBalancesWeight::::deposit_asset()) } fn deposit_reserve_asset( assets: &MultiAssetFilter, - _max_assets: &u32, // TODO use max assets? _dest: &MultiLocation, _xcm: &Xcm<()>, - ) -> XCMWeight { + ) -> Weight { assets.weigh_multi_assets(XcmBalancesWeight::::deposit_reserve_asset()) } - fn exchange_asset(_give: &MultiAssetFilter, _receive: &MultiAssets) -> XCMWeight { - Weight::MAX.ref_time() // todo fix + fn exchange_asset(_give: &MultiAssetFilter, _receive: &MultiAssets, _maximal: &bool) -> Weight { + // Rococo does not currently support exchange asset operations + Weight::MAX } fn initiate_reserve_withdraw( assets: &MultiAssetFilter, _reserve: &MultiLocation, _xcm: &Xcm<()>, - ) -> XCMWeight { + ) -> Weight { assets.weigh_multi_assets(XcmGeneric::::initiate_reserve_withdraw()) } fn initiate_teleport( assets: &MultiAssetFilter, _dest: &MultiLocation, _xcm: &Xcm<()>, - ) -> XCMWeight { + ) -> Weight { assets.weigh_multi_assets(XcmBalancesWeight::::initiate_teleport()) } - fn query_holding( - _query_id: &u64, - _dest: &MultiLocation, - _assets: &MultiAssetFilter, - _max_response_weight: &u64, - ) -> XCMWeight { - XcmGeneric::::query_holding().ref_time() + fn report_holding(_response_info: &QueryResponseInfo, _assets: &MultiAssetFilter) -> Weight { + XcmGeneric::::report_holding() + } + fn buy_execution(_fees: &MultiAsset, _weight_limit: &WeightLimit) -> Weight { + XcmGeneric::::buy_execution() + } + fn refund_surplus() -> Weight { + XcmGeneric::::refund_surplus() + } + fn set_error_handler(_xcm: &Xcm) -> Weight { + XcmGeneric::::set_error_handler() + } + fn set_appendix(_xcm: &Xcm) -> Weight { + XcmGeneric::::set_appendix() + } + fn clear_error() -> Weight { + XcmGeneric::::clear_error() } - fn buy_execution(_fees: &MultiAsset, _weight_limit: &WeightLimit) -> XCMWeight { - XcmGeneric::::buy_execution().ref_time() + fn claim_asset(_assets: &MultiAssets, _ticket: &MultiLocation) -> Weight { + XcmGeneric::::claim_asset() } - fn refund_surplus() -> XCMWeight { - XcmGeneric::::refund_surplus().ref_time() + fn trap(_code: &u64) -> Weight { + XcmGeneric::::trap() } - fn set_error_handler(_xcm: &Xcm) -> XCMWeight { - XcmGeneric::::set_error_handler().ref_time() + fn subscribe_version(_query_id: &QueryId, _max_response_weight: &Weight) -> Weight { + XcmGeneric::::subscribe_version() } - fn set_appendix(_xcm: &Xcm) -> XCMWeight { - XcmGeneric::::set_appendix().ref_time() + fn unsubscribe_version() -> Weight { + XcmGeneric::::unsubscribe_version() } - fn clear_error() -> XCMWeight { - XcmGeneric::::clear_error().ref_time() + fn burn_asset(assets: &MultiAssets) -> Weight { + assets.weigh_multi_assets(XcmGeneric::::burn_asset()) } - fn claim_asset(_assets: &MultiAssets, _ticket: &MultiLocation) -> XCMWeight { - XcmGeneric::::claim_asset().ref_time() + fn expect_asset(assets: &MultiAssets) -> Weight { + assets.weigh_multi_assets(XcmGeneric::::expect_asset()) } - fn trap(_code: &u64) -> XCMWeight { - XcmGeneric::::trap().ref_time() + fn expect_origin(_origin: &Option) -> Weight { + XcmGeneric::::expect_origin() } - fn subscribe_version(_query_id: &QueryId, _max_response_weight: &u64) -> XCMWeight { - XcmGeneric::::subscribe_version().ref_time() + fn expect_error(_error: &Option<(u32, XcmError)>) -> Weight { + XcmGeneric::::expect_error() } - fn unsubscribe_version() -> XCMWeight { - XcmGeneric::::unsubscribe_version().ref_time() + fn expect_transact_status(_transact_status: &MaybeErrorCode) -> Weight { + XcmGeneric::::expect_transact_status() } + fn query_pallet(_module_name: &Vec, _response_info: &QueryResponseInfo) -> Weight { + XcmGeneric::::query_pallet() + } + fn expect_pallet( + _index: &u32, + _name: &Vec, + _module_name: &Vec, + _crate_major: &u32, + _min_crate_minor: &u32, + ) -> Weight { + XcmGeneric::::expect_pallet() + } + fn report_transact_status(_response_info: &QueryResponseInfo) -> Weight { + XcmGeneric::::report_transact_status() + } + fn clear_transact_status() -> Weight { + XcmGeneric::::clear_transact_status() + } + fn universal_origin(_: &Junction) -> Weight { + // Rococo does not currently support universal origin operations + Weight::MAX + } + fn export_message(_: &NetworkId, _: &Junctions, _: &Xcm<()>) -> Weight { + Weight::MAX // todo fix + } + fn lock_asset(_: &MultiAsset, _: &MultiLocation) -> Weight { + // Rococo does not currently support asset locking operations + Weight::MAX + } + fn unlock_asset(_: &MultiAsset, _: &MultiLocation) -> Weight { + // Rococo does not currently support asset locking operations + Weight::MAX + } + fn note_unlockable(_: &MultiAsset, _: &MultiLocation) -> Weight { + // Rococo does not currently support asset locking operations + Weight::MAX + } + fn request_unlock(_: &MultiAsset, _: &MultiLocation) -> Weight { + // Rococo does not currently support asset locking operations + Weight::MAX + } + fn set_fees_mode(_: &bool) -> Weight { + XcmGeneric::::set_fees_mode() + } + fn set_topic(_topic: &[u8; 32]) -> Weight { + XcmGeneric::::set_topic() + } + fn clear_topic() -> Weight { + XcmGeneric::::clear_topic() + } + fn alias_origin(_: &MultiLocation) -> Weight { + // XCM Executor does not currently support alias origin operations + Weight::MAX + } + fn unpaid_execution(_: &WeightLimit, _: &Option) -> Weight { + XcmGeneric::::unpaid_execution() + } +} + +#[test] +fn all_counted_has_a_sane_weight_upper_limit() { + let assets = MultiAssetFilter::Wild(AllCounted(4294967295)); + let weight = Weight::from_parts(1000, 1000); + + assert_eq!(assets.weigh_multi_assets(weight), weight * MAX_ASSETS); } diff --git a/runtime/rococo/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs b/runtime/rococo/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs index 99eee16135ba..22f088b8eebc 100644 --- a/runtime/rococo/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs +++ b/runtime/rococo/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs @@ -47,13 +47,13 @@ pub struct WeightInfo(PhantomData); impl WeightInfo { // Storage: System Account (r:1 w:1) pub(crate) fn withdraw_asset() -> Weight { - Weight::from_ref_time(20_385_000 as u64) + Weight::from_parts(20_385_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:2 w:2) pub(crate) fn transfer_asset() -> Weight { - Weight::from_ref_time(32_756_000 as u64) + Weight::from_parts(32_756_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -65,23 +65,23 @@ impl WeightInfo { // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) // Storage: Dmp DownwardMessageQueues (r:1 w:1) pub(crate) fn transfer_reserve_asset() -> Weight { - Weight::from_ref_time(50_645_000 as u64) + Weight::from_parts(50_645_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(8 as u64)) .saturating_add(T::DbWeight::get().writes(5 as u64)) } // Storage: Benchmark Override (r:0 w:0) pub(crate) fn reserve_asset_deposited() -> Weight { - Weight::from_ref_time(2_000_000_000_000 as u64) + Weight::from_parts(2_000_000_000_000 as u64, 0) } // Storage: System Account (r:1 w:1) pub(crate) fn receive_teleported_asset() -> Weight { - Weight::from_ref_time(19_595_000 as u64) + Weight::from_parts(19_595_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) pub(crate) fn deposit_asset() -> Weight { - Weight::from_ref_time(21_763_000 as u64) + Weight::from_parts(21_763_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -93,7 +93,7 @@ impl WeightInfo { // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) // Storage: Dmp DownwardMessageQueues (r:1 w:1) pub(crate) fn deposit_reserve_asset() -> Weight { - Weight::from_ref_time(40_930_000 as u64) + Weight::from_parts(40_930_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(7 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } @@ -105,7 +105,7 @@ impl WeightInfo { // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) // Storage: Dmp DownwardMessageQueues (r:1 w:1) pub(crate) fn initiate_teleport() -> Weight { - Weight::from_ref_time(40_788_000 as u64) + Weight::from_parts(40_788_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(7 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } diff --git a/runtime/rococo/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/runtime/rococo/src/weights/xcm/pallet_xcm_benchmarks_generic.rs index 551ddc5903be..7c9a8ea0f37f 100644 --- a/runtime/rococo/src/weights/xcm/pallet_xcm_benchmarks_generic.rs +++ b/runtime/rococo/src/weights/xcm/pallet_xcm_benchmarks_generic.rs @@ -51,39 +51,39 @@ impl WeightInfo { // Storage: Configuration ActiveConfig (r:1 w:0) // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) // Storage: Dmp DownwardMessageQueues (r:1 w:1) - pub(crate) fn query_holding() -> Weight { - Weight::from_ref_time(21_822_000 as u64) + pub(crate) fn report_holding() -> Weight { + Weight::from_parts(21_822_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } pub(crate) fn buy_execution() -> Weight { - Weight::from_ref_time(3_109_000 as u64) + Weight::from_parts(3_109_000 as u64, 0) } // Storage: XcmPallet Queries (r:1 w:0) pub(crate) fn query_response() -> Weight { - Weight::from_ref_time(12_087_000 as u64) + Weight::from_parts(12_087_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(1 as u64)) } pub(crate) fn transact() -> Weight { - Weight::from_ref_time(12_398_000 as u64) + Weight::from_parts(12_398_000 as u64, 0) } pub(crate) fn refund_surplus() -> Weight { - Weight::from_ref_time(3_247_000 as u64) + Weight::from_parts(3_247_000 as u64, 0) } pub(crate) fn set_error_handler() -> Weight { - Weight::from_ref_time(3_086_000 as u64) + Weight::from_parts(3_086_000 as u64, 0) } pub(crate) fn set_appendix() -> Weight { - Weight::from_ref_time(3_112_000 as u64) + Weight::from_parts(3_112_000 as u64, 0) } pub(crate) fn clear_error() -> Weight { - Weight::from_ref_time(3_118_000 as u64) + Weight::from_parts(3_118_000 as u64, 0) } pub(crate) fn descend_origin() -> Weight { - Weight::from_ref_time(4_054_000 as u64) + Weight::from_parts(4_054_000 as u64, 0) } pub(crate) fn clear_origin() -> Weight { - Weight::from_ref_time(3_111_000 as u64) + Weight::from_parts(3_111_000 as u64, 0) } // Storage: XcmPallet SupportedVersion (r:1 w:0) // Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) @@ -92,18 +92,18 @@ impl WeightInfo { // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) // Storage: Dmp DownwardMessageQueues (r:1 w:1) pub(crate) fn report_error() -> Weight { - Weight::from_ref_time(18_425_000 as u64) + Weight::from_parts(18_425_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: XcmPallet AssetTraps (r:1 w:1) pub(crate) fn claim_asset() -> Weight { - Weight::from_ref_time(7_144_000 as u64) + Weight::from_parts(7_144_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } pub(crate) fn trap() -> Weight { - Weight::from_ref_time(3_060_000 as u64) + Weight::from_parts(3_060_000 as u64, 0) } // Storage: XcmPallet VersionNotifyTargets (r:1 w:1) // Storage: XcmPallet SupportedVersion (r:1 w:0) @@ -113,13 +113,13 @@ impl WeightInfo { // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) // Storage: Dmp DownwardMessageQueues (r:1 w:1) pub(crate) fn subscribe_version() -> Weight { - Weight::from_ref_time(21_642_000 as u64) + Weight::from_parts(21_642_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(7 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: XcmPallet VersionNotifyTargets (r:0 w:1) pub(crate) fn unsubscribe_version() -> Weight { - Weight::from_ref_time(4_873_000 as u64) + Weight::from_parts(4_873_000 as u64, 0) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: XcmPallet SupportedVersion (r:1 w:0) @@ -129,8 +129,61 @@ impl WeightInfo { // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) // Storage: Dmp DownwardMessageQueues (r:1 w:1) pub(crate) fn initiate_reserve_withdraw() -> Weight { - Weight::from_ref_time(22_809_000 as u64) + Weight::from_parts(22_809_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } + pub(crate) fn burn_asset() -> Weight { + Weight::from_parts(5_259_000 as u64, 0) + } + pub(crate) fn expect_asset() -> Weight { + Weight::from_parts(3_745_000 as u64, 0) + } + pub(crate) fn expect_origin() -> Weight { + Weight::from_parts(3_847_000 as u64, 0) + } + pub(crate) fn expect_error() -> Weight { + Weight::from_parts(3_633_000 as u64, 0) + } + pub(crate) fn expect_transact_status() -> Weight { + Weight::from_parts(3_633_000 as u64, 0) + } + // Storage: XcmPallet SupportedVersion (r:1 w:0) + // Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) + // Storage: XcmPallet SafeXcmVersion (r:1 w:0) + // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + // Storage: Dmp DownwardMessageQueues (r:1 w:1) + pub(crate) fn query_pallet() -> Weight { + Weight::from_parts(21_645_000 as u64, 0) + .saturating_add(T::DbWeight::get().reads(5 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) + } + pub(crate) fn expect_pallet() -> Weight { + Weight::from_parts(4_017_000 as u64, 0) + } + // Storage: XcmPallet SupportedVersion (r:1 w:0) + // Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) + // Storage: XcmPallet SafeXcmVersion (r:1 w:0) + // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + // Storage: Dmp DownwardMessageQueues (r:1 w:1) + pub(crate) fn report_transact_status() -> Weight { + Weight::from_parts(20_465_000 as u64, 0) + .saturating_add(T::DbWeight::get().reads(5 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) + } + pub(crate) fn clear_transact_status() -> Weight { + Weight::from_parts(3_723_000 as u64, 0) + } + pub(crate) fn set_topic() -> Weight { + Weight::from_parts(3_687_000 as u64, 0) + } + pub(crate) fn clear_topic() -> Weight { + Weight::from_parts(3_654_000 as u64, 0) + } + pub(crate) fn set_fees_mode() -> Weight { + Weight::from_parts(3_721_000 as u64, 0) + } + pub(crate) fn unpaid_execution() -> Weight { + Weight::from_parts(3_111_000 as u64, 0) + } } diff --git a/runtime/rococo/src/xcm_config.rs b/runtime/rococo/src/xcm_config.rs index 26a380dfcd20..229df3a5df95 100644 --- a/runtime/rococo/src/xcm_config.rs +++ b/runtime/rococo/src/xcm_config.rs @@ -17,44 +17,37 @@ //! XCM configuration for Rococo. use super::{ - parachains_origin, AccountId, Balances, CouncilCollective, ParaId, Runtime, RuntimeCall, - RuntimeEvent, RuntimeOrigin, WeightToFee, XcmPallet, + parachains_origin, AccountId, AllPalletsWithSystem, Balances, CouncilCollective, ParaId, + Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, WeightToFee, XcmPallet, }; -use frame_support::{match_types, parameter_types, traits::Everything}; -use runtime_common::{xcm_sender, ToAuthor}; +use frame_support::{ + match_types, parameter_types, + traits::{Contains, Everything, Nothing}, + weights::Weight, +}; +use runtime_common::{paras_registrar, xcm_sender, ToAuthor}; +use sp_core::ConstU32; use xcm::latest::prelude::*; use xcm_builder::{ - AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, - AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, BackingToPlurality, + AccountId32Aliases, AllowExplicitUnpaidExecutionFrom, AllowKnownQueryResponses, + AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, BackingToPlurality, ChildParachainAsNative, ChildParachainConvertsVia, ChildSystemParachainAsSuperuser, CurrencyAdapter as XcmCurrencyAdapter, FixedWeightBounds, IsChildSystemParachain, IsConcrete, - LocationInverter, SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, - TakeWeightCredit, UsingComponents, WeightInfoBounds, + MintLocation, SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, + TakeWeightCredit, UsingComponents, WeightInfoBounds, WithComputedOrigin, }; +use xcm_executor::{traits::WithOriginFilter, XcmExecutor}; parameter_types! { - /// The location of the ROC token, from the context of this chain. Since this token is native to this - /// chain, we make it synonymous with it and thus it is the `Here` location, which means "equivalent to - /// the context". - pub const RocLocation: MultiLocation = Here.into(); - /// The Rococo network ID. This is named. - pub RococoNetwork: NetworkId = - NetworkId::Named(b"Rococo".to_vec().try_into().expect("shorter than length limit; qed")); - /// Our XCM location ancestry - i.e. what, if anything, `Parent` means evaluated in our context. Since - /// Rococo is a top-level relay-chain, there is no ancestry. - pub const Ancestry: MultiLocation = Here.into(); - /// The check account, which holds any native assets that have been teleported out and not back in (yet). + pub const TokenLocation: MultiLocation = Here.into_location(); + pub const ThisNetwork: NetworkId = NetworkId::Rococo; + pub UniversalLocation: InteriorMultiLocation = ThisNetwork::get().into(); pub CheckAccount: AccountId = XcmPallet::check_account(); + pub LocalCheckAccount: (AccountId, MintLocation) = (CheckAccount::get(), MintLocation::Local); } -/// The canonical means of converting a `MultiLocation` into an `AccountId`, used when we want to determine -/// the sovereign account controlled by a location. -pub type SovereignAccountOf = ( - // We can convert a child parachain using the standard `AccountId` conversion. - ChildParachainConvertsVia, - // We can directly alias an `AccountId32` into a local account. - AccountId32Aliases, -); +pub type LocationConverter = + (ChildParachainConvertsVia, AccountId32Aliases); /// Our asset transactor. This is what allows us to interest with the runtime facilities from the point of /// view of XCM-only concepts like `MultiLocation` and `MultiAsset`. @@ -64,63 +57,62 @@ pub type LocalAssetTransactor = XcmCurrencyAdapter< // Use this currency: Balances, // Use this currency when it is a fungible asset matching the given location or name: - IsConcrete, + IsConcrete, // We can convert the MultiLocations with our converter above: - SovereignAccountOf, + LocationConverter, // Our chain's account ID type (we can't get away without mentioning it explicitly): AccountId, // We track our teleports in/out to keep total issuance correct. - CheckAccount, + LocalCheckAccount, >; /// The means that we convert an the XCM message origin location into a local dispatch origin. type LocalOriginConverter = ( // A `Signed` origin of the sovereign account that the original location controls. - SovereignSignedViaLocation, + SovereignSignedViaLocation, // A child parachain, natively expressed, has the `Parachain` origin. ChildParachainAsNative, // The AccountId32 location type can be expressed natively as a `Signed` origin. - SignedAccountId32AsNative, + SignedAccountId32AsNative, // A system child parachain, expressed as a Superuser, converts to the `Root` origin. ChildSystemParachainAsSuperuser, ); parameter_types! { /// The amount of weight an XCM operation takes. This is a safe overestimate. - pub const BaseXcmWeight: u64 = 1_000_000_000; - /// Maximum number of instructions in a single XCM fragment. A sanity check against weight - /// calculations getting too crazy. - pub const MaxInstructions: u32 = 100; + pub const BaseXcmWeight: Weight = Weight::from_parts(1_000_000_000, 64 * 1024); } /// The XCM router. When we want to send an XCM message, we use this type. It amalgamates all of our /// individual routers. pub type XcmRouter = ( // Only one router so far - use DMP to communicate with child parachains. - xcm_sender::ChildParachainRouter, + xcm_sender::ChildParachainRouter, ); parameter_types! { - pub const Rococo: MultiAssetFilter = Wild(AllOf { fun: WildFungible, id: Concrete(RocLocation::get()) }); - pub const Statemine: MultiLocation = Parachain(1000).into(); - pub const Contracts: MultiLocation = Parachain(1002).into(); - pub const Encointer: MultiLocation = Parachain(1003).into(); - pub const Tick: MultiLocation = Parachain(100).into(); - pub const Trick: MultiLocation = Parachain(110).into(); - pub const Track: MultiLocation = Parachain(120).into(); - pub const RococoForTick: (MultiAssetFilter, MultiLocation) = (Rococo::get(), Tick::get()); - pub const RococoForTrick: (MultiAssetFilter, MultiLocation) = (Rococo::get(), Trick::get()); - pub const RococoForTrack: (MultiAssetFilter, MultiLocation) = (Rococo::get(), Track::get()); - pub const RococoForStatemine: (MultiAssetFilter, MultiLocation) = (Rococo::get(), Statemine::get()); - pub const RococoForContracts: (MultiAssetFilter, MultiLocation) = (Rococo::get(), Contracts::get()); - pub const RococoForEncointer: (MultiAssetFilter, MultiLocation) = (Rococo::get(), Encointer::get()); + pub const Roc: MultiAssetFilter = Wild(AllOf { fun: WildFungible, id: Concrete(TokenLocation::get()) }); + pub const Statemine: MultiLocation = Parachain(1000).into_location(); + pub const Contracts: MultiLocation = Parachain(1002).into_location(); + pub const Encointer: MultiLocation = Parachain(1003).into_location(); + pub const Tick: MultiLocation = Parachain(100).into_location(); + pub const Trick: MultiLocation = Parachain(110).into_location(); + pub const Track: MultiLocation = Parachain(120).into_location(); + pub const RocForTick: (MultiAssetFilter, MultiLocation) = (Roc::get(), Tick::get()); + pub const RocForTrick: (MultiAssetFilter, MultiLocation) = (Roc::get(), Trick::get()); + pub const RocForTrack: (MultiAssetFilter, MultiLocation) = (Roc::get(), Track::get()); + pub const RocForStatemine: (MultiAssetFilter, MultiLocation) = (Roc::get(), Statemine::get()); + pub const RocForContracts: (MultiAssetFilter, MultiLocation) = (Roc::get(), Contracts::get()); + pub const RocForEncointer: (MultiAssetFilter, MultiLocation) = (Roc::get(), Encointer::get()); + pub const MaxInstructions: u32 = 100; + pub const MaxAssetsIntoHolding: u32 = 64; } pub type TrustedTeleporters = ( - xcm_builder::Case, - xcm_builder::Case, - xcm_builder::Case, - xcm_builder::Case, - xcm_builder::Case, - xcm_builder::Case, + xcm_builder::Case, + xcm_builder::Case, + xcm_builder::Case, + xcm_builder::Case, + xcm_builder::Case, + xcm_builder::Case, ); match_types! { @@ -133,16 +125,158 @@ match_types! { pub type Barrier = ( // Weight that is paid for may be consumed. TakeWeightCredit, - // If the message is one that immediately attemps to pay for execution, then allow it. - AllowTopLevelPaidExecutionFrom, - // Messages coming from system parachains need not pay for execution. - AllowUnpaidExecutionFrom>, // Expected responses are OK. AllowKnownQueryResponses, - // Subscriptions for version tracking are OK. - AllowSubscriptionsFrom, + WithComputedOrigin< + ( + // If the message is one that immediately attemps to pay for execution, then allow it. + AllowTopLevelPaidExecutionFrom, + // Messages coming from system parachains need not pay for execution. + AllowExplicitUnpaidExecutionFrom>, + // Subscriptions for version tracking are OK. + AllowSubscriptionsFrom, + ), + UniversalLocation, + ConstU32<8>, + >, ); +/// A call filter for the XCM Transact instruction. This is a temporary measure until we +/// properly account for proof size weights. +/// +/// Calls that are allowed through this filter must: +/// 1. Have a fixed weight; +/// 2. Cannot lead to another call being made; +/// 3. Have a defined proof size weight, e.g. no unbounded vecs in call parameters. +pub struct SafeCallFilter; +impl Contains for SafeCallFilter { + fn contains(call: &RuntimeCall) -> bool { + #[cfg(feature = "runtime-benchmarks")] + { + if matches!(call, RuntimeCall::System(frame_system::Call::remark_with_event { .. })) { + return true + } + } + + match call { + RuntimeCall::System( + frame_system::Call::kill_prefix { .. } | frame_system::Call::set_heap_pages { .. }, + ) | + RuntimeCall::Babe(..) | + RuntimeCall::Timestamp(..) | + RuntimeCall::Indices(..) | + RuntimeCall::Balances(..) | + RuntimeCall::Session(pallet_session::Call::purge_keys { .. }) | + RuntimeCall::Grandpa(..) | + RuntimeCall::ImOnline(..) | + RuntimeCall::Democracy( + pallet_democracy::Call::second { .. } | + pallet_democracy::Call::vote { .. } | + pallet_democracy::Call::emergency_cancel { .. } | + pallet_democracy::Call::fast_track { .. } | + pallet_democracy::Call::veto_external { .. } | + pallet_democracy::Call::cancel_referendum { .. } | + pallet_democracy::Call::delegate { .. } | + pallet_democracy::Call::undelegate { .. } | + pallet_democracy::Call::clear_public_proposals { .. } | + pallet_democracy::Call::unlock { .. } | + pallet_democracy::Call::remove_vote { .. } | + pallet_democracy::Call::remove_other_vote { .. } | + pallet_democracy::Call::blacklist { .. } | + pallet_democracy::Call::cancel_proposal { .. }, + ) | + RuntimeCall::Council( + pallet_collective::Call::vote { .. } | + pallet_collective::Call::close_old_weight { .. } | + pallet_collective::Call::disapprove_proposal { .. } | + pallet_collective::Call::close { .. }, + ) | + RuntimeCall::TechnicalCommittee( + pallet_collective::Call::vote { .. } | + pallet_collective::Call::close_old_weight { .. } | + pallet_collective::Call::disapprove_proposal { .. } | + pallet_collective::Call::close { .. }, + ) | + RuntimeCall::PhragmenElection( + pallet_elections_phragmen::Call::remove_voter { .. } | + pallet_elections_phragmen::Call::submit_candidacy { .. } | + pallet_elections_phragmen::Call::renounce_candidacy { .. } | + pallet_elections_phragmen::Call::remove_member { .. } | + pallet_elections_phragmen::Call::clean_defunct_voters { .. }, + ) | + RuntimeCall::TechnicalMembership( + pallet_membership::Call::add_member { .. } | + pallet_membership::Call::remove_member { .. } | + pallet_membership::Call::swap_member { .. } | + pallet_membership::Call::change_key { .. } | + pallet_membership::Call::set_prime { .. } | + pallet_membership::Call::clear_prime { .. }, + ) | + RuntimeCall::Treasury(..) | + RuntimeCall::Claims( + super::claims::Call::claim { .. } | + super::claims::Call::mint_claim { .. } | + super::claims::Call::move_claim { .. }, + ) | + RuntimeCall::Utility(pallet_utility::Call::as_derivative { .. }) | + RuntimeCall::Identity( + pallet_identity::Call::add_registrar { .. } | + pallet_identity::Call::set_identity { .. } | + pallet_identity::Call::clear_identity { .. } | + pallet_identity::Call::request_judgement { .. } | + pallet_identity::Call::cancel_request { .. } | + pallet_identity::Call::set_fee { .. } | + pallet_identity::Call::set_account_id { .. } | + pallet_identity::Call::set_fields { .. } | + pallet_identity::Call::provide_judgement { .. } | + pallet_identity::Call::kill_identity { .. } | + pallet_identity::Call::add_sub { .. } | + pallet_identity::Call::rename_sub { .. } | + pallet_identity::Call::remove_sub { .. } | + pallet_identity::Call::quit_sub { .. }, + ) | + RuntimeCall::Society( + pallet_society::Call::bid { .. } | + pallet_society::Call::unbid { .. } | + pallet_society::Call::vouch { .. } | + pallet_society::Call::unvouch { .. } | + pallet_society::Call::vote { .. } | + pallet_society::Call::defender_vote { .. } | + pallet_society::Call::payout { .. } | + pallet_society::Call::unfound { .. } | + pallet_society::Call::judge_suspended_member { .. } | + pallet_society::Call::judge_suspended_candidate { .. } | + pallet_society::Call::set_max_members { .. }, + ) | + RuntimeCall::Recovery(..) | + RuntimeCall::Vesting(..) | + RuntimeCall::Bounties( + pallet_bounties::Call::propose_bounty { .. } | + pallet_bounties::Call::approve_bounty { .. } | + pallet_bounties::Call::propose_curator { .. } | + pallet_bounties::Call::unassign_curator { .. } | + pallet_bounties::Call::accept_curator { .. } | + pallet_bounties::Call::award_bounty { .. } | + pallet_bounties::Call::claim_bounty { .. } | + pallet_bounties::Call::close_bounty { .. }, + ) | + RuntimeCall::ChildBounties(..) | + RuntimeCall::Hrmp(..) | + RuntimeCall::Registrar( + paras_registrar::Call::deregister { .. } | + paras_registrar::Call::swap { .. } | + paras_registrar::Call::remove_lock { .. } | + paras_registrar::Call::reserve { .. } | + paras_registrar::Call::add_lock { .. }, + ) | + RuntimeCall::XcmPallet(pallet_xcm::Call::limited_reserve_transfer_assets { + .. + }) => true, + _ => false, + } + } +} + pub struct XcmConfig; impl xcm_executor::Config for XcmConfig { type RuntimeCall = RuntimeCall; @@ -151,19 +285,28 @@ impl xcm_executor::Config for XcmConfig { type OriginConverter = LocalOriginConverter; type IsReserve = (); type IsTeleporter = TrustedTeleporters; - type LocationInverter = LocationInverter; + type UniversalLocation = UniversalLocation; type Barrier = Barrier; type Weigher = WeightInfoBounds< crate::weights::xcm::RococoXcmWeight, RuntimeCall, MaxInstructions, >; - // The weight trader piggybacks on the existing transaction-fee conversion logic. - type Trader = UsingComponents>; + type Trader = + UsingComponents>; type ResponseHandler = XcmPallet; type AssetTrap = XcmPallet; + type AssetLocker = (); + type AssetExchanger = (); type AssetClaims = XcmPallet; type SubscriptionService = XcmPallet; + type PalletInstancesInfo = AllPalletsWithSystem; + type MaxAssetsIntoHolding = MaxAssetsIntoHolding; + type FeeManager = (); + type MessageExporter = (); + type UniversalAliases = Nothing; + type CallDispatcher = WithOriginFilter; + type SafeCallFilter = SafeCallFilter; } parameter_types! { @@ -174,6 +317,11 @@ parameter_types! { pub const CouncilBodyId: BodyId = BodyId::Executive; } +#[cfg(feature = "runtime-benchmarks")] +parameter_types! { + pub ReachableDest: Option = Some(Parachain(1000).into()); +} + /// Type to convert the council origin to a Plurality `MultiLocation` value. pub type CouncilToPlurality = BackingToPlurality< RuntimeOrigin, @@ -188,7 +336,7 @@ pub type LocalOriginToLocation = ( // `Unit` body. CouncilToPlurality, // And a usual Signed origin to be used in XCM as a corresponding AccountId32 - SignedToAccountId32, + SignedToAccountId32, ); impl pallet_xcm::Config for Runtime { type RuntimeEvent = RuntimeEvent; @@ -197,16 +345,23 @@ impl pallet_xcm::Config for Runtime { // Anyone can execute XCM messages locally. type ExecuteXcmOrigin = xcm_builder::EnsureXcmOrigin; type XcmExecuteFilter = Everything; - type XcmExecutor = xcm_executor::XcmExecutor; - // Anyone is able to use teleportation regardless of who they are and what they want to teleport. + type XcmExecutor = XcmExecutor; type XcmTeleportFilter = Everything; // Anyone is able to use reserve transfers regardless of who they are and what they want to // transfer. type XcmReserveTransferFilter = Everything; type Weigher = FixedWeightBounds; - type LocationInverter = LocationInverter; + type UniversalLocation = UniversalLocation; type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; + type Currency = Balances; + type CurrencyMatcher = IsConcrete; + type TrustedLockers = (); + type SovereignAccountOf = LocationConverter; + type MaxLockers = ConstU32<8>; + type WeightInfo = crate::weights::pallet_xcm::WeightInfo; + #[cfg(feature = "runtime-benchmarks")] + type ReachableDest = ReachableDest; } diff --git a/runtime/test-runtime/Cargo.toml b/runtime/test-runtime/Cargo.toml index b1a003647c48..17c50e3d54f4 100644 --- a/runtime/test-runtime/Cargo.toml +++ b/runtime/test-runtime/Cargo.toml @@ -7,52 +7,52 @@ edition.workspace = true [dependencies] bitvec = { version = "1.0.0", default-features = false, features = ["alloc"] } -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["derive"] } log = { version = "0.4.17", default-features = false } rustc-hex = { version = "2.1.0", default-features = false } scale-info = { version = "2.1.2", default-features = false, features = ["derive"] } -serde = { version = "1.0.137", default-features = false } +serde = { version = "1.0.139", default-features = false } serde_derive = { version = "1.0.117", optional = true } smallvec = "1.8.0" -authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -beefy-primitives = { git = "https://github.com/paritytech/substrate", default-features = false, package = "sp-beefy" , branch = "polkadot-v0.9.36" } -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -offchain-primitives = { package = "sp-offchain", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-mmr-primitives = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-election-provider-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -tx-pool-api = { package = "sp-transaction-pool", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -block-builder-api = { package = "sp-block-builder", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +beefy-primitives = { package = "sp-consensus-beefy", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +offchain-primitives = { package = "sp-offchain", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-mmr-primitives = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-election-provider-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +tx-pool-api = { package = "sp-transaction-pool", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +block-builder-api = { package = "sp-block-builder", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } -pallet-authority-discovery = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-babe = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-grandpa = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-indices = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-offences = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-staking-reward-curve = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -frame-system = {git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +pallet-authority-discovery = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-babe = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-grandpa = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-indices = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-offences = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-staking-reward-curve = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +frame-system = {git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } test-runtime-constants = { package = "test-runtime-constants", path = "./constants", default-features = false } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-vesting = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-vesting = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } runtime-common = { package = "polkadot-runtime-common", path = "../common", default-features = false } primitives = { package = "polkadot-primitives", path = "../../primitives", default-features = false } @@ -66,12 +66,12 @@ xcm = { path = "../../xcm", default-features = false } [dev-dependencies] hex-literal = "0.3.4" tiny-keccak = { version = "2.0.2", features = ["keccak"] } -keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-trie = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-trie = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } serde_json = "1.0.81" [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } [features] default = ["std"] @@ -129,3 +129,8 @@ std = [ "frame-election-provider-support/std", "pallet-sudo/std", ] + +runtime-benchmarks = [ + "pallet-xcm/runtime-benchmarks", + "xcm-builder/runtime-benchmarks", +] diff --git a/runtime/test-runtime/constants/Cargo.toml b/runtime/test-runtime/constants/Cargo.toml index bdc58b6ab32f..0ea388480692 100644 --- a/runtime/test-runtime/constants/Cargo.toml +++ b/runtime/test-runtime/constants/Cargo.toml @@ -7,12 +7,12 @@ edition.workspace = true [dependencies] smallvec = "1.8.0" -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } primitives = { package = "polkadot-primitives", path = "../../../primitives", default-features = false } runtime-common = { package = "polkadot-runtime-common", path = "../../common", default-features = false } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-weights = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-weights = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } [features] default = ["std"] diff --git a/runtime/test-runtime/constants/src/lib.rs b/runtime/test-runtime/constants/src/lib.rs index 0594062b4ddc..ca329accec88 100644 --- a/runtime/test-runtime/constants/src/lib.rs +++ b/runtime/test-runtime/constants/src/lib.rs @@ -20,7 +20,7 @@ pub mod weights; /// Money matters. pub mod currency { - use primitives::v2::Balance; + use primitives::Balance; pub const DOTS: Balance = 1_000_000_000_000; pub const DOLLARS: Balance = DOTS; @@ -30,7 +30,7 @@ pub mod currency { /// Time and blocks. pub mod time { - use primitives::v2::{BlockNumber, Moment}; + use primitives::{BlockNumber, Moment}; // Testnet pub const MILLISECS_PER_BLOCK: Moment = 6000; pub const SLOT_DURATION: Moment = MILLISECS_PER_BLOCK; @@ -55,7 +55,7 @@ pub mod fee { use frame_support::weights::{ WeightToFeeCoefficient, WeightToFeeCoefficients, WeightToFeePolynomial, }; - use primitives::v2::Balance; + use primitives::Balance; use smallvec::smallvec; pub use sp_runtime::Perbill; diff --git a/runtime/test-runtime/constants/src/weights/block_weights.rs b/runtime/test-runtime/constants/src/weights/block_weights.rs index ea8a341b58bb..b2092d875c83 100644 --- a/runtime/test-runtime/constants/src/weights/block_weights.rs +++ b/runtime/test-runtime/constants/src/weights/block_weights.rs @@ -24,7 +24,7 @@ pub mod constants { parameter_types! { /// Importing a block with 0 Extrinsics. pub const BlockExecutionWeight: Weight = - Weight::from_ref_time(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(5_000_000)); + Weight::from_parts(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(5_000_000), 0); } #[cfg(test)] diff --git a/runtime/test-runtime/constants/src/weights/extrinsic_weights.rs b/runtime/test-runtime/constants/src/weights/extrinsic_weights.rs index 0512efb60e2a..332c3b324bb9 100644 --- a/runtime/test-runtime/constants/src/weights/extrinsic_weights.rs +++ b/runtime/test-runtime/constants/src/weights/extrinsic_weights.rs @@ -24,7 +24,7 @@ pub mod constants { parameter_types! { /// Executing a NO-OP `System::remarks` Extrinsic. pub const ExtrinsicBaseWeight: Weight = - Weight::from_ref_time(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(125_000)); + Weight::from_parts(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(125_000), 0); } #[cfg(test)] diff --git a/runtime/test-runtime/src/lib.rs b/runtime/test-runtime/src/lib.rs index a30d4d350715..2fdaa60513d3 100644 --- a/runtime/test-runtime/src/lib.rs +++ b/runtime/test-runtime/src/lib.rs @@ -34,17 +34,17 @@ use polkadot_runtime_parachains::{ }; use authority_discovery_primitives::AuthorityId as AuthorityDiscoveryId; -use beefy_primitives::crypto::AuthorityId as BeefyId; +use beefy_primitives::crypto::{AuthorityId as BeefyId, Signature as BeefySignature}; use frame_election_provider_support::{onchain, SequentialPhragmen}; use frame_support::{ construct_runtime, parameter_types, - traits::{Everything, KeyOwnerProofSystem, WithdrawReasons}, + traits::{Everything, WithdrawReasons}, }; use pallet_grandpa::{fg_primitives, AuthorityId as GrandpaId}; use pallet_session::historical as session_historical; use pallet_transaction_payment::{FeeDetails, RuntimeDispatchInfo}; use polkadot_runtime_parachains::reward_points::RewardValidatorsWithEraPoints; -use primitives::v2::{ +use primitives::{ AccountId, AccountIndex, Balance, BlockNumber, CandidateEvent, CommittedCandidateReceipt, CoreState, GroupRotationInfo, Hash as HashT, Id as ParaId, InboundDownwardMessage, InboundHrmpMessage, Moment, Nonce, OccupiedCoreAssumption, PersistedValidationData, @@ -66,7 +66,7 @@ use sp_runtime::{ SaturatedConversion, StaticLookup, Verify, }, transaction_validity::{TransactionPriority, TransactionSource, TransactionValidity}, - ApplyExtrinsicResult, KeyTypeId, Perbill, + ApplyExtrinsicResult, Perbill, }; use sp_staking::SessionIndex; #[cfg(any(feature = "std", test))] @@ -131,7 +131,7 @@ parameter_types! { } impl frame_system::Config for Runtime { - type BaseCallFilter = frame_support::traits::Everything; + type BaseCallFilter = Everything; type BlockWeights = BlockWeights; type BlockLength = BlockLength; type DbWeight = (); @@ -179,22 +179,13 @@ impl pallet_babe::Config for Runtime { type DisabledValidators = (); - type KeyOwnerProofSystem = (); - - type KeyOwnerProof = >::Proof; + type WeightInfo = (); - type KeyOwnerIdentification = >::IdentificationTuple; + type MaxAuthorities = MaxAuthorities; - type HandleEquivocation = (); + type KeyOwnerProof = sp_core::Void; - type WeightInfo = (); - type MaxAuthorities = MaxAuthorities; + type EquivocationReportSystem = (); } parameter_types! { @@ -254,14 +245,8 @@ impl pallet_timestamp::Config for Runtime { type WeightInfo = (); } -parameter_types! { - pub storage UncleGenerations: u32 = 0; -} - impl pallet_authorship::Config for Runtime { type FindAuthor = pallet_session::FindAccountFromAuthorIndex; - type UncleGenerations = UncleGenerations; - type FilterUncle = (); type EventHandler = Staking; } @@ -348,8 +333,7 @@ impl pallet_staking::Config for Runtime { type SessionsPerEra = SessionsPerEra; type BondingDuration = BondingDuration; type SlashDeferDuration = SlashDeferDuration; - // A majority of the council can cancel the slash. - type SlashCancelOrigin = frame_system::EnsureNever<()>; + type AdminOrigin = frame_system::EnsureNever<()>; type SessionInterface = Self; type EraPayout = pallet_staking::ConvertCurve; type MaxNominatorRewardedPerValidator = MaxNominatorRewardedPerValidator; @@ -368,23 +352,19 @@ impl pallet_staking::Config for Runtime { type WeightInfo = (); } +parameter_types! { + pub MaxSetIdSessionEntries: u32 = BondingDuration::get() * SessionsPerEra::get(); +} + impl pallet_grandpa::Config for Runtime { type RuntimeEvent = RuntimeEvent; - type KeyOwnerProofSystem = (); - - type KeyOwnerProof = - >::Proof; - - type KeyOwnerIdentification = >::IdentificationTuple; - - type HandleEquivocation = (); - type WeightInfo = (); type MaxAuthorities = MaxAuthorities; + type MaxSetIdSessionEntries = MaxSetIdSessionEntries; + + type KeyOwnerProof = sp_core::Void; + type EquivocationReportSystem = (); } impl frame_system::offchain::CreateSignedTransaction for Runtime @@ -538,34 +518,6 @@ impl parachains_ump::Config for Runtime { type WeightInfo = parachains_ump::TestWeightInfo; } -parameter_types! { - pub const BaseXcmWeight: xcm::latest::Weight = 1_000; - pub const AnyNetwork: xcm::latest::NetworkId = xcm::latest::NetworkId::Any; - pub const MaxInstructions: u32 = 100; -} - -pub type LocalOriginToLocation = - xcm_builder::SignedToAccountId32; - -impl pallet_xcm::Config for Runtime { - // The config types here are entirely configurable, since the only one that is sorely needed - // is `XcmExecutor`, which will be used in unit tests located in xcm-executor. - type RuntimeEvent = RuntimeEvent; - type ExecuteXcmOrigin = xcm_builder::EnsureXcmOrigin; - type LocationInverter = xcm_config::InvertNothing; - type SendXcmOrigin = xcm_builder::EnsureXcmOrigin; - type Weigher = xcm_builder::FixedWeightBounds; - type XcmRouter = xcm_config::DoNothingRouter; - type XcmExecuteFilter = Everything; - type XcmExecutor = xcm_executor::XcmExecutor; - type XcmTeleportFilter = Everything; - type XcmReserveTransferFilter = Everything; - type RuntimeOrigin = RuntimeOrigin; - type RuntimeCall = RuntimeCall; - const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; - type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; -} - impl parachains_hrmp::Config for Runtime { type RuntimeOrigin = RuntimeOrigin; type RuntimeEvent = RuntimeEvent; @@ -594,7 +546,6 @@ pub mod pallet_test_notifier { use xcm::latest::prelude::*; #[pallet::pallet] - #[pallet::generate_store(pub(super) trait Store)] pub struct Pallet(_); #[pallet::config] @@ -621,6 +572,7 @@ pub mod pallet_test_notifier { #[pallet::call] impl Pallet { + #[pallet::call_index(0)] #[pallet::weight(1_000_000)] pub fn prepare_new_query(origin: OriginFor) -> DispatchResult { let who = ensure_signed(origin)?; @@ -628,13 +580,15 @@ pub mod pallet_test_notifier { .using_encoded(|mut d| <[u8; 32]>::decode(&mut d)) .map_err(|_| Error::::BadAccountFormat)?; let qid = pallet_xcm::Pallet::::new_query( - Junction::AccountId32 { network: Any, id }.into(), + Junction::AccountId32 { network: None, id }, 100u32.into(), + Here, ); Self::deposit_event(Event::::QueryPrepared(qid)); Ok(()) } + #[pallet::call_index(1)] #[pallet::weight(1_000_000)] pub fn prepare_new_notify_query(origin: OriginFor) -> DispatchResult { let who = ensure_signed(origin)?; @@ -644,14 +598,16 @@ pub mod pallet_test_notifier { let call = Call::::notification_received { query_id: 0, response: Default::default() }; let qid = pallet_xcm::Pallet::::new_notify_query( - Junction::AccountId32 { network: Any, id }.into(), + Junction::AccountId32 { network: None, id }, ::RuntimeCall::from(call), 100u32.into(), + Here, ); Self::deposit_event(Event::::NotifyQueryPrepared(qid)); Ok(()) } + #[pallet::call_index(2)] #[pallet::weight(1_000_000)] pub fn notification_received( origin: OriginFor, @@ -668,7 +624,7 @@ pub mod pallet_test_notifier { construct_runtime! { pub enum Runtime where Block = Block, - NodeBlock = primitives::v2::Block, + NodeBlock = primitives::Block, UncheckedExtrinsic = UncheckedExtrinsic { // Basic stuff; balances is uncallable initially. @@ -683,7 +639,7 @@ construct_runtime! { TransactionPayment: pallet_transaction_payment::{Pallet, Storage, Event}, // Consensus support. - Authorship: pallet_authorship::{Pallet, Call, Storage}, + Authorship: pallet_authorship::{Pallet, Storage}, Staking: pallet_staking::{Pallet, Call, Storage, Config, Event}, Offences: pallet_offences::{Pallet, Storage, Event}, Historical: session_historical::{Pallet}, @@ -854,7 +810,7 @@ sp_api::impl_runtime_apis! { fn check_validation_outputs( para_id: ParaId, - outputs: primitives::v2::CandidateCommitments, + outputs: primitives::CandidateCommitments, ) -> bool { runtime_impl::check_validation_outputs::(para_id, outputs) } @@ -902,8 +858,8 @@ sp_api::impl_runtime_apis! { } fn submit_pvf_check_statement( - stmt: primitives::v2::PvfCheckStatement, - signature: primitives::v2::ValidatorSignature, + stmt: primitives::PvfCheckStatement, + signature: primitives::ValidatorSignature, ) { runtime_impl::submit_pvf_check_statement::(stmt, signature) } @@ -920,10 +876,33 @@ sp_api::impl_runtime_apis! { } impl beefy_primitives::BeefyApi for Runtime { + fn beefy_genesis() -> Option { + // dummy implementation due to lack of BEEFY pallet. + None + } + fn validator_set() -> Option> { // dummy implementation due to lack of BEEFY pallet. None } + + fn submit_report_equivocation_unsigned_extrinsic( + _equivocation_proof: beefy_primitives::EquivocationProof< + BlockNumber, + BeefyId, + BeefySignature, + >, + _key_owner_proof: beefy_primitives::OpaqueKeyOwnershipProof, + ) -> Option<()> { + None + } + + fn generate_key_ownership_proof( + _set_id: beefy_primitives::ValidatorSetId, + _authority_id: BeefyId, + ) -> Option { + None + } } impl mmr::MmrApi for Runtime { @@ -1052,6 +1031,12 @@ sp_api::impl_runtime_apis! { fn query_fee_details(uxt: ::Extrinsic, len: u32) -> FeeDetails { TransactionPayment::query_fee_details(uxt, len) } + fn query_weight_to_fee(weight: Weight) -> Balance { + TransactionPayment::weight_to_fee(weight) + } + fn query_length_to_fee(length: u32) -> Balance { + TransactionPayment::length_to_fee(length) + } } impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi @@ -1063,6 +1048,12 @@ sp_api::impl_runtime_apis! { fn query_call_fee_details(call: RuntimeCall, len: u32) -> FeeDetails { TransactionPayment::query_call_fee_details(call, len) } + fn query_weight_to_fee(weight: Weight) -> Balance { + TransactionPayment::weight_to_fee(weight) + } + fn query_length_to_fee(length: u32) -> Balance { + TransactionPayment::length_to_fee(length) + } } impl crate::GetLastTimestamp for Runtime { diff --git a/runtime/test-runtime/src/xcm_config.rs b/runtime/test-runtime/src/xcm_config.rs index 217995f31fe4..bfe9c6ad1ad8 100644 --- a/runtime/test-runtime/src/xcm_config.rs +++ b/runtime/test-runtime/src/xcm_config.rs @@ -14,30 +14,44 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use frame_support::{parameter_types, traits::Everything}; -use xcm::latest::{prelude::*, Weight as XCMWeight}; -use xcm_builder::{AllowUnpaidExecutionFrom, FixedWeightBounds, SignedToAccountId32}; +use frame_support::{ + parameter_types, + traits::{Everything, Nothing}, + weights::Weight, +}; +use xcm::latest::prelude::*; +use xcm_builder::{ + AllowUnpaidExecutionFrom, EnsureXcmOrigin, FixedWeightBounds, SignedAccountId32AsNative, + SignedToAccountId32, +}; use xcm_executor::{ - traits::{InvertLocation, TransactAsset, WeightTrader}, + traits::{TransactAsset, WeightTrader}, Assets, }; parameter_types! { - pub const OurNetwork: NetworkId = NetworkId::Polkadot; + pub const BaseXcmWeight: xcm::latest::Weight = Weight::from_parts(1_000, 1_000); + pub const AnyNetwork: Option = None; pub const MaxInstructions: u32 = 100; + pub const MaxAssetsIntoHolding: u32 = 16; + pub const UniversalLocation: xcm::latest::InteriorMultiLocation = xcm::latest::Junctions::Here; } /// Type to convert an `Origin` type value into a `MultiLocation` value which represents an interior location /// of this chain. pub type LocalOriginToLocation = ( // And a usual Signed origin to be used in XCM as a corresponding AccountId32 - SignedToAccountId32, + SignedToAccountId32, ); pub struct DoNothingRouter; impl SendXcm for DoNothingRouter { - fn send_xcm(_dest: impl Into, _msg: Xcm<()>) -> SendResult { - Ok(()) + type Ticket = (); + fn validate(_dest: &mut Option, _msg: &mut Option>) -> SendResult<()> { + Ok(((), MultiAssets::new())) + } + fn deliver(_: ()) -> Result { + Ok([0; 32]) } } @@ -45,11 +59,15 @@ pub type Barrier = AllowUnpaidExecutionFrom; pub struct DummyAssetTransactor; impl TransactAsset for DummyAssetTransactor { - fn deposit_asset(_what: &MultiAsset, _who: &MultiLocation) -> XcmResult { + fn deposit_asset(_what: &MultiAsset, _who: &MultiLocation, _context: &XcmContext) -> XcmResult { Ok(()) } - fn withdraw_asset(_what: &MultiAsset, _who: &MultiLocation) -> Result { + fn withdraw_asset( + _what: &MultiAsset, + _who: &MultiLocation, + _maybe_context: Option<&XcmContext>, + ) -> Result { let asset: MultiAsset = (Parent, 100_000).into(); Ok(asset.into()) } @@ -61,35 +79,71 @@ impl WeightTrader for DummyWeightTrader { DummyWeightTrader } - fn buy_weight(&mut self, _weight: XCMWeight, _payment: Assets) -> Result { + fn buy_weight(&mut self, _weight: Weight, _payment: Assets) -> Result { Ok(Assets::default()) } } -pub struct InvertNothing; -impl InvertLocation for InvertNothing { - fn invert_location(_: &MultiLocation) -> sp_std::result::Result { - Ok(Here.into()) - } - fn ancestry() -> MultiLocation { - Here.into() - } -} +type OriginConverter = ( + pallet_xcm::XcmPassthrough, + SignedAccountId32AsNative, +); pub struct XcmConfig; impl xcm_executor::Config for XcmConfig { type RuntimeCall = super::RuntimeCall; type XcmSender = DoNothingRouter; type AssetTransactor = DummyAssetTransactor; - type OriginConverter = pallet_xcm::XcmPassthrough; + type OriginConverter = OriginConverter; type IsReserve = (); type IsTeleporter = (); - type LocationInverter = InvertNothing; + type UniversalLocation = UniversalLocation; type Barrier = Barrier; - type Weigher = FixedWeightBounds; + type Weigher = FixedWeightBounds; type Trader = DummyWeightTrader; type ResponseHandler = super::Xcm; type AssetTrap = super::Xcm; + type AssetLocker = (); + type AssetExchanger = (); type AssetClaims = super::Xcm; type SubscriptionService = super::Xcm; + type PalletInstancesInfo = (); + type MaxAssetsIntoHolding = MaxAssetsIntoHolding; + type FeeManager = (); + type MessageExporter = (); + type UniversalAliases = Nothing; + type CallDispatcher = super::RuntimeCall; + type SafeCallFilter = Everything; +} + +#[cfg(feature = "runtime-benchmarks")] +parameter_types! { + pub ReachableDest: Option = Some(xcm::latest::Junctions::Here.into()); +} + +impl pallet_xcm::Config for crate::Runtime { + // The config types here are entirely configurable, since the only one that is sorely needed + // is `XcmExecutor`, which will be used in unit tests located in xcm-executor. + type RuntimeEvent = crate::RuntimeEvent; + type ExecuteXcmOrigin = EnsureXcmOrigin; + type UniversalLocation = UniversalLocation; + type SendXcmOrigin = EnsureXcmOrigin; + type Weigher = FixedWeightBounds; + type XcmRouter = DoNothingRouter; + type XcmExecuteFilter = Everything; + type XcmExecutor = xcm_executor::XcmExecutor; + type XcmTeleportFilter = Everything; + type XcmReserveTransferFilter = Everything; + type RuntimeOrigin = crate::RuntimeOrigin; + type RuntimeCall = crate::RuntimeCall; + const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; + type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; + type Currency = crate::Balances; + type CurrencyMatcher = (); + type TrustedLockers = (); + type SovereignAccountOf = (); + type MaxLockers = frame_support::traits::ConstU32<8>; + type WeightInfo = pallet_xcm::TestWeightInfo; + #[cfg(feature = "runtime-benchmarks")] + type ReachableDest = ReachableDest; } diff --git a/runtime/westend/Cargo.toml b/runtime/westend/Cargo.toml index d803c992b12f..57d075d227fc 100644 --- a/runtime/westend/Cargo.toml +++ b/runtime/westend/Cargo.toml @@ -7,82 +7,84 @@ edition.workspace = true [dependencies] bitvec = { version = "1.0.0", default-features = false, features = ["alloc"] } -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["derive", "max-encoded-len"] } +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["derive", "max-encoded-len"] } scale-info = { version = "2.1.2", default-features = false, features = ["derive"] } log = { version = "0.4.17", default-features = false } rustc-hex = { version = "2.1.0", default-features = false } -serde = { version = "1.0.137", default-features = false } +serde = { version = "1.0.139", default-features = false } serde_derive = { version = "1.0.117", optional = true } smallvec = "1.8.0" -authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -beefy-primitives = { git = "https://github.com/paritytech/substrate", default-features = false, package = "sp-beefy" , branch = "polkadot-v0.9.36" } -inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -offchain-primitives = { package = "sp-offchain", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-std = { package = "sp-std", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-mmr-primitives = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -tx-pool-api = { package = "sp-transaction-pool", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -block-builder-api = { package = "sp-block-builder", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-npos-elections = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +beefy-primitives = { package = "sp-consensus-beefy", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +offchain-primitives = { package = "sp-offchain", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-std = { package = "sp-std", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-mmr-primitives = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +tx-pool-api = { package = "sp-transaction-pool", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +block-builder-api = { package = "sp-block-builder", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-npos-elections = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } -frame-election-provider-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +frame-election-provider-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } westend-runtime-constants = { package = "westend-runtime-constants", path = "./constants", default-features = false } -pallet-authority-discovery = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-babe = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-bags-list = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-collective = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-democracy = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-elections-phragmen = { package = "pallet-elections-phragmen", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-election-provider-multi-phase = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-fast-unstake = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-grandpa = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-identity = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-im-online = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-indices = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-membership = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-nomination-pools = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-offences = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-preimage = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-proxy = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-recovery = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-scheduler = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-society = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-staking-reward-curve = { package = "pallet-staking-reward-curve", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-nomination-pools-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-treasury = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-vesting = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +pallet-authority-discovery = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-babe = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-bags-list = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-collective = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-democracy = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-elections-phragmen = { package = "pallet-elections-phragmen", git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-election-provider-multi-phase = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-fast-unstake = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-grandpa = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-identity = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-im-online = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-indices = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-membership = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-nomination-pools = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-offences = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-preimage = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-proxy = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-recovery = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-scheduler = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-society = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-staking = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-staking-reward-curve = { package = "pallet-staking-reward-curve", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +pallet-staking-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-state-trie-migration = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-nomination-pools-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-treasury = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-vesting = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } pallet-xcm = { path = "../../xcm/pallet-xcm", default-features = false } pallet-xcm-benchmarks = { path = "../../xcm/pallet-xcm-benchmarks", default-features = false, optional = true } -frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } -frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } -frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } -pallet-election-provider-support-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } -pallet-nomination-pools-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } -pallet-offences-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } -pallet-session-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } +frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } +frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } +pallet-election-provider-support-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } +pallet-nomination-pools-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } +pallet-offences-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } +pallet-session-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } hex-literal = { version = "0.3.4", optional = true } runtime-common = { package = "polkadot-runtime-common", path = "../common", default-features = false } @@ -97,15 +99,14 @@ xcm-builder = { package = "xcm-builder", path = "../../xcm/xcm-builder", default [dev-dependencies] hex-literal = "0.3.4" tiny-keccak = { version = "2.0.2", features = ["keccak"] } -keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-trie = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } serde_json = "1.0.81" -remote-externalities = { git = "https://github.com/paritytech/substrate", package = "frame-remote-externalities" , branch = "polkadot-v0.9.36" } -tokio = { version = "1.22.0", features = ["macros"] } -sp-tracing = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +remote-externalities = { git = "https://github.com/paritytech/substrate", package = "frame-remote-externalities" , branch = "polkadot-v0.9.40" } +tokio = { version = "1.24.2", features = ["macros"] } +sp-tracing = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } [features] default = ["std"] @@ -155,6 +156,8 @@ std = [ "pallet-session/std", "pallet-society/std", "pallet-staking/std", + "pallet-staking-runtime-api/std", + "pallet-state-trie-migration/std", "pallet-sudo/std", "pallet-timestamp/std", "pallet-treasury/std", @@ -255,6 +258,7 @@ try-runtime = [ "pallet-session/try-runtime", "pallet-society/try-runtime", "pallet-staking/try-runtime", + "pallet-state-trie-migration/try-runtime", "pallet-sudo/try-runtime", "pallet-timestamp/try-runtime", "pallet-treasury/try-runtime", diff --git a/runtime/westend/constants/Cargo.toml b/runtime/westend/constants/Cargo.toml index 7ea496ef10f9..59389f89d197 100644 --- a/runtime/westend/constants/Cargo.toml +++ b/runtime/westend/constants/Cargo.toml @@ -7,16 +7,19 @@ edition.workspace = true [dependencies] smallvec = "1.8.0" -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } primitives = { package = "polkadot-primitives", path = "../../../primitives", default-features = false } runtime-common = { package = "polkadot-runtime-common", path = "../../common", default-features = false } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-weights = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-weights = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } [features] default = ["std"] std = [ + "frame-support/std", + "primitives/std", + "runtime-common/std", "sp-core/std", "sp-runtime/std", "sp-weights/std" diff --git a/runtime/westend/constants/src/lib.rs b/runtime/westend/constants/src/lib.rs index d3fa1c501c3e..e7d1a627713f 100644 --- a/runtime/westend/constants/src/lib.rs +++ b/runtime/westend/constants/src/lib.rs @@ -20,7 +20,7 @@ pub mod weights; /// Money matters. pub mod currency { - use primitives::v2::Balance; + use primitives::Balance; /// The existential deposit. pub const EXISTENTIAL_DEPOSIT: Balance = 1 * CENTS; @@ -37,7 +37,7 @@ pub mod currency { /// Time and blocks. pub mod time { - use primitives::v2::{BlockNumber, Moment}; + use primitives::{BlockNumber, Moment}; use runtime_common::prod_or_fast; pub const MILLISECS_PER_BLOCK: Moment = 6000; @@ -62,7 +62,7 @@ pub mod fee { use frame_support::weights::{ WeightToFeeCoefficient, WeightToFeeCoefficients, WeightToFeePolynomial, }; - use primitives::v2::Balance; + use primitives::Balance; use smallvec::smallvec; pub use sp_runtime::Perbill; diff --git a/runtime/westend/constants/src/weights/block_weights.rs b/runtime/westend/constants/src/weights/block_weights.rs index 0aa67d7586bd..56ef3b25fb1f 100644 --- a/runtime/westend/constants/src/weights/block_weights.rs +++ b/runtime/westend/constants/src/weights/block_weights.rs @@ -14,8 +14,8 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15 (Y/M/D) -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15 (Y/M/D) +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! //! SHORT-NAME: `block`, LONG-NAME: `BlockExecution`, RUNTIME: `Development` //! WARMUPS: `10`, REPEAT: `100` @@ -42,17 +42,17 @@ parameter_types! { /// Calculated by multiplying the *Average* with `1.0` and adding `0`. /// /// Stats nanoseconds: - /// Min, Max: 5_099_998, 5_275_118 - /// Average: 5_172_036 - /// Median: 5_172_275 - /// Std-Dev: 50998.86 + /// Min, Max: 436_897, 566_277 + /// Average: 445_228 + /// Median: 441_051 + /// Std-Dev: 15792.88 /// /// Percentiles nanoseconds: - /// 99th: 5_273_226 - /// 95th: 5_253_153 - /// 75th: 5_209_228 + /// 99th: 494_890 + /// 95th: 471_702 + /// 75th: 443_378 pub const BlockExecutionWeight: Weight = - Weight::from_ref_time(WEIGHT_REF_TIME_PER_NANOS.saturating_mul(5_172_036)); + Weight::from_parts(WEIGHT_REF_TIME_PER_NANOS.saturating_mul(445_228), 0); } #[cfg(test)] diff --git a/runtime/westend/constants/src/weights/extrinsic_weights.rs b/runtime/westend/constants/src/weights/extrinsic_weights.rs index 598c30a689d1..f240fc4154f0 100644 --- a/runtime/westend/constants/src/weights/extrinsic_weights.rs +++ b/runtime/westend/constants/src/weights/extrinsic_weights.rs @@ -14,8 +14,8 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15 (Y/M/D) -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15 (Y/M/D) +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! //! SHORT-NAME: `extrinsic`, LONG-NAME: `ExtrinsicBase`, RUNTIME: `Development` //! WARMUPS: `10`, REPEAT: `100` @@ -42,17 +42,17 @@ parameter_types! { /// Calculated by multiplying the *Average* with `1.0` and adding `0`. /// /// Stats nanoseconds: - /// Min, Max: 89_128, 91_461 - /// Average: 89_646 - /// Median: 89_595 - /// Std-Dev: 356.22 + /// Min, Max: 93_487, 94_937 + /// Average: 93_839 + /// Median: 93_736 + /// Std-Dev: 302.5 /// /// Percentiles nanoseconds: - /// 99th: 91_146 - /// 95th: 90_284 - /// 75th: 89_668 + /// 99th: 94_824 + /// 95th: 94_659 + /// 75th: 93_881 pub const ExtrinsicBaseWeight: Weight = - Weight::from_ref_time(WEIGHT_REF_TIME_PER_NANOS.saturating_mul(89_646)); + Weight::from_parts(WEIGHT_REF_TIME_PER_NANOS.saturating_mul(93_839), 0); } #[cfg(test)] diff --git a/runtime/westend/src/lib.rs b/runtime/westend/src/lib.rs index a56a01f45704..7d1c9952ddf5 100644 --- a/runtime/westend/src/lib.rs +++ b/runtime/westend/src/lib.rs @@ -21,7 +21,7 @@ #![recursion_limit = "256"] use authority_discovery_primitives::AuthorityId as AuthorityDiscoveryId; -use beefy_primitives::crypto::AuthorityId as BeefyId; +use beefy_primitives::crypto::{AuthorityId as BeefyId, Signature as BeefySignature}; use frame_election_provider_support::{onchain, SequentialPhragmen}; use frame_support::{ construct_runtime, parameter_types, @@ -35,12 +35,13 @@ use pallet_im_online::sr25519::AuthorityId as ImOnlineId; use pallet_session::historical as session_historical; use pallet_transaction_payment::{CurrencyAdapter, FeeDetails, RuntimeDispatchInfo}; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; -use primitives::v2::{ - AccountId, AccountIndex, Balance, BlockNumber, CandidateEvent, CandidateHash, - CommittedCandidateReceipt, CoreState, DisputeState, GroupRotationInfo, Hash, Id as ParaId, - InboundDownwardMessage, InboundHrmpMessage, Moment, Nonce, OccupiedCoreAssumption, - PersistedValidationData, PvfCheckStatement, ScrapedOnChainVotes, SessionInfo, Signature, - ValidationCode, ValidationCodeHash, ValidatorId, ValidatorIndex, ValidatorSignature, +use primitives::{ + vstaging::ExecutorParams, AccountId, AccountIndex, Balance, BlockNumber, CandidateEvent, + CandidateHash, CommittedCandidateReceipt, CoreState, DisputeState, GroupRotationInfo, Hash, + Id as ParaId, InboundDownwardMessage, InboundHrmpMessage, Moment, Nonce, + OccupiedCoreAssumption, PersistedValidationData, PvfCheckStatement, ScrapedOnChainVotes, + SessionInfo, Signature, ValidationCode, ValidationCodeHash, ValidatorId, ValidatorIndex, + ValidatorSignature, }; use runtime_common::{ assigned_slots, auctions, crowdloan, elections::OnChainAccuracy, impl_runtime_weights, @@ -49,12 +50,15 @@ use runtime_common::{ }; use runtime_parachains::{ configuration as parachains_configuration, disputes as parachains_disputes, - disputes::slashing as parachains_slashing, dmp as parachains_dmp, hrmp as parachains_hrmp, - inclusion as parachains_inclusion, initializer as parachains_initializer, - origin as parachains_origin, paras as parachains_paras, + disputes::slashing as parachains_slashing, + dmp as parachains_dmp, hrmp as parachains_hrmp, inclusion as parachains_inclusion, + initializer as parachains_initializer, origin as parachains_origin, paras as parachains_paras, paras_inherent as parachains_paras_inherent, reward_points as parachains_reward_points, - runtime_api_impl::v2 as parachains_runtime_api_impl, scheduler as parachains_scheduler, - session_info as parachains_session_info, shared as parachains_shared, ump as parachains_ump, + runtime_api_impl::{ + v2 as parachains_runtime_api_impl, vstaging as parachains_runtime_api_impl_staging, + }, + scheduler as parachains_scheduler, session_info as parachains_session_info, + shared as parachains_shared, ump as parachains_ump, }; use scale_info::TypeInfo; use sp_core::{OpaqueMetadata, RuntimeDebug}; @@ -109,14 +113,14 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("westend"), impl_name: create_runtime_str!("parity-westend"), authoring_version: 2, - spec_version: 9360, + spec_version: 9400, impl_version: 0, #[cfg(not(feature = "disable-runtime-api"))] apis: RUNTIME_API_VERSIONS, #[cfg(feature = "disable-runtime-api")] apis: sp_version::create_apis_vec![[]], - transaction_version: 17, - state_version: 0, + transaction_version: 20, + state_version: 1, }; /// The BABE epoch configuration at genesis. @@ -218,24 +222,15 @@ impl pallet_babe::Config for Runtime { type DisabledValidators = Session; - type KeyOwnerProofSystem = Historical; - - type KeyOwnerProof = >::Proof; - - type KeyOwnerIdentification = >::IdentificationTuple; - - type HandleEquivocation = - pallet_babe::EquivocationHandler; - type WeightInfo = (); type MaxAuthorities = MaxAuthorities; + + type KeyOwnerProof = + >::Proof; + + type EquivocationReportSystem = + pallet_babe::EquivocationReportSystem; } parameter_types! { @@ -294,14 +289,8 @@ impl pallet_timestamp::Config for Runtime { type WeightInfo = weights::pallet_timestamp::WeightInfo; } -parameter_types! { - pub const UncleGenerations: u32 = 0; -} - impl pallet_authorship::Config for Runtime { type FindAuthor = pallet_session::FindAccountFromAuthorIndex; - type UncleGenerations = UncleGenerations; - type FilterUncle = (); type EventHandler = (Staking, ImOnline); } @@ -402,6 +391,7 @@ impl pallet_election_provider_multi_phase::MinerConfig for Runtime { as frame_election_provider_support::ElectionDataProvider >::MaxVotesPerVoter; + type MaxWinners = MaxActiveValidators; // The unsigned submissions have to respect the weight of the submit_unsigned call, thus their // weight estimate function is wired to this call's weight. @@ -509,8 +499,7 @@ impl pallet_staking::Config for Runtime { type SessionsPerEra = SessionsPerEra; type BondingDuration = BondingDuration; type SlashDeferDuration = SlashDeferDuration; - // A majority of the council can cancel the slash. - type SlashCancelOrigin = EnsureRoot; + type AdminOrigin = EnsureRoot; type SessionInterface = Self; type EraPayout = pallet_staking::ConvertCurve; type MaxNominatorRewardedPerValidator = MaxNominatorRewardedPerValidator; @@ -533,8 +522,11 @@ impl pallet_fast_unstake::Config for Runtime { type BatchSize = frame_support::traits::ConstU32<64>; type Deposit = frame_support::traits::ConstU128<{ UNITS }>; type ControlOrigin = EnsureRoot; - type WeightInfo = weights::pallet_fast_unstake::WeightInfo; type Staking = Staking; + type MaxErasToCheckPerBlock = ConstU32<1>; + #[cfg(feature = "runtime-benchmarks")] + type MaxBackersPerValidator = MaxNominatorRewardedPerValidator; + type WeightInfo = weights::pallet_fast_unstake::WeightInfo; } parameter_types! { @@ -572,27 +564,21 @@ impl pallet_im_online::Config for Runtime { type MaxPeerDataEncodingSize = MaxPeerDataEncodingSize; } +parameter_types! { + pub const MaxSetIdSessionEntries: u32 = BondingDuration::get() * SessionsPerEra::get(); +} + impl pallet_grandpa::Config for Runtime { type RuntimeEvent = RuntimeEvent; - type KeyOwnerProofSystem = Historical; - - type KeyOwnerProof = - >::Proof; - - type KeyOwnerIdentification = >::IdentificationTuple; - - type HandleEquivocation = pallet_grandpa::EquivocationHandler< - Self::KeyOwnerIdentification, - Offences, - ReportLongevity, - >; - type WeightInfo = (); type MaxAuthorities = MaxAuthorities; + type MaxSetIdSessionEntries = MaxSetIdSessionEntries; + + type KeyOwnerProof = >::Proof; + + type EquivocationReportSystem = + pallet_grandpa::EquivocationReportSystem; } /// Submits a transaction with the node's public and signature type. Adheres to the signed extension @@ -798,7 +784,6 @@ impl InstanceFilter for ProxyType { RuntimeCall::Indices(pallet_indices::Call::freeze{..}) | // Specifically omitting Indices `transfer`, `force_transfer` // Specifically omitting the entire Balances pallet - RuntimeCall::Authorship(..) | RuntimeCall::Staking(..) | RuntimeCall::Session(..) | RuntimeCall::Grandpa(..) | @@ -1086,10 +1071,17 @@ impl pallet_nomination_pools::Config for Runtime { type MaxPointsToBalance = MaxPointsToBalance; } +parameter_types! { + // The deposit configuration for the singed migration. Specially if you want to allow any signed account to do the migration (see `SignedFilter`, these deposits should be high) + pub const MigrationSignedDepositPerItem: Balance = 1 * CENTS; + pub const MigrationSignedDepositBase: Balance = 20 * CENTS * 100; + pub const MigrationMaxKeyLen: u32 = 512; +} + construct_runtime! { pub enum Runtime where Block = Block, - NodeBlock = primitives::v2::Block, + NodeBlock = primitives::Block, UncheckedExtrinsic = UncheckedExtrinsic { // Basic stuff; balances is uncallable initially. @@ -1106,7 +1098,7 @@ construct_runtime! { // Consensus support. // Authorship must be before session in order to note author in the correct session and era // for im-online and staking. - Authorship: pallet_authorship::{Pallet, Call, Storage} = 5, + Authorship: pallet_authorship::{Pallet, Storage} = 5, Staking: pallet_staking::{Pallet, Call, Storage, Config, Event} = 6, Offences: pallet_offences::{Pallet, Storage, Event} = 7, Historical: session_historical::{Pallet} = 27, @@ -1205,14 +1197,22 @@ pub type SignedExtra = ( pallet_transaction_payment::ChargeTransactionPayment, ); -pub struct StakingMigrationV11OldPallet; -impl Get<&'static str> for StakingMigrationV11OldPallet { - fn get() -> &'static str { - "VoterList" +pub struct NominationPoolsMigrationV4OldPallet; +impl Get for NominationPoolsMigrationV4OldPallet { + fn get() -> Perbill { + Perbill::from_percent(100) } } -pub type Migrations = (); +/// All migrations that will run on the next runtime upgrade. +/// +/// Should be cleared after every release. +pub type Migrations = ( + pallet_nomination_pools::migration::v4::MigrateToV4< + Runtime, + NominationPoolsMigrationV4OldPallet, + >, +); /// Unchecked extrinsic type as expected by this runtime. pub type UncheckedExtrinsic = @@ -1274,6 +1274,7 @@ mod benches { [pallet_utility, Utility] [pallet_vesting, Vesting] // XCM + [pallet_xcm, XcmPallet] // NOTE: Make sure you point to the individual modules below. [pallet_xcm_benchmarks::fungible, XcmBalances] [pallet_xcm_benchmarks::generic, XcmGeneric] @@ -1339,7 +1340,7 @@ sp_api::impl_runtime_apis! { } } - #[api_version(3)] + #[api_version(4)] impl primitives::runtime_api::ParachainHost for Runtime { fn validators() -> Vec { parachains_runtime_api_impl::validators::() @@ -1370,7 +1371,7 @@ sp_api::impl_runtime_apis! { fn check_validation_outputs( para_id: ParaId, - outputs: primitives::v2::CandidateCommitments, + outputs: primitives::CandidateCommitments, ) -> bool { parachains_runtime_api_impl::check_validation_outputs::(para_id, outputs) } @@ -1403,6 +1404,10 @@ sp_api::impl_runtime_apis! { parachains_runtime_api_impl::session_info::(index) } + fn session_executor_params(session_index: SessionIndex) -> Option { + parachains_runtime_api_impl_staging::session_executor_params::(session_index) + } + fn dmq_contents(recipient: ParaId) -> Vec> { parachains_runtime_api_impl::dmq_contents::(recipient) } @@ -1444,10 +1449,33 @@ sp_api::impl_runtime_apis! { } impl beefy_primitives::BeefyApi for Runtime { + fn beefy_genesis() -> Option { + // dummy implementation due to lack of BEEFY pallet. + None + } + fn validator_set() -> Option> { // dummy implementation due to lack of BEEFY pallet. None } + + fn submit_report_equivocation_unsigned_extrinsic( + _equivocation_proof: beefy_primitives::EquivocationProof< + BlockNumber, + BeefyId, + BeefySignature, + >, + _key_owner_proof: beefy_primitives::OpaqueKeyOwnershipProof, + ) -> Option<()> { + None + } + + fn generate_key_ownership_proof( + _set_id: beefy_primitives::ValidatorSetId, + _authority_id: BeefyId, + ) -> Option { + None + } } impl mmr::MmrApi for Runtime { @@ -1602,6 +1630,12 @@ sp_api::impl_runtime_apis! { fn query_fee_details(uxt: ::Extrinsic, len: u32) -> FeeDetails { TransactionPayment::query_fee_details(uxt, len) } + fn query_weight_to_fee(weight: Weight) -> Balance { + TransactionPayment::weight_to_fee(weight) + } + fn query_length_to_fee(length: u32) -> Balance { + TransactionPayment::length_to_fee(length) + } } impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi @@ -1613,6 +1647,12 @@ sp_api::impl_runtime_apis! { fn query_call_fee_details(call: RuntimeCall, len: u32) -> FeeDetails { TransactionPayment::query_call_fee_details(call, len) } + fn query_weight_to_fee(weight: Weight) -> Balance { + TransactionPayment::weight_to_fee(weight) + } + fn query_length_to_fee(length: u32) -> Balance { + TransactionPayment::length_to_fee(length) + } } impl pallet_nomination_pools_runtime_api::NominationPoolsApi< @@ -1621,13 +1661,27 @@ sp_api::impl_runtime_apis! { Balance, > for Runtime { fn pending_rewards(member: AccountId) -> Balance { - NominationPools::pending_rewards(member).unwrap_or_default() + NominationPools::api_pending_rewards(member).unwrap_or_default() + } + + fn points_to_balance(pool_id: pallet_nomination_pools::PoolId, points: Balance) -> Balance { + NominationPools::api_points_to_balance(pool_id, points) + } + + fn balance_to_points(pool_id: pallet_nomination_pools::PoolId, new_funds: Balance) -> Balance { + NominationPools::api_balance_to_points(pool_id, new_funds) + } + } + + impl pallet_staking_runtime_api::StakingApi for Runtime { + fn nominations_quota(balance: Balance) -> u32 { + Staking::api_nominations_quota(balance) } } #[cfg(feature = "try-runtime")] impl frame_try_runtime::TryRuntime for Runtime { - fn on_runtime_upgrade(checks: bool) -> (Weight, Weight) { + fn on_runtime_upgrade(checks: frame_try_runtime::UpgradeCheckSelect) -> (Weight, Weight) { log::info!("try-runtime::on_runtime_upgrade westend."); let weight = Executive::try_runtime_upgrade(checks).unwrap(); (weight, BlockWeights::get().max_block) @@ -1693,10 +1747,10 @@ sp_api::impl_runtime_apis! { impl runtime_parachains::disputes::slashing::benchmarking::Config for Runtime {} use xcm::latest::{ - AssetId::*, Fungibility::*, Junctions::*, MultiAsset, MultiAssets, MultiLocation, - Response, + AssetId::*, Fungibility::*, Junction, Junctions::*, MultiAsset, MultiAssets, + MultiLocation, Response, }; - use xcm_config::{Westmint, WndLocation}; + use xcm_config::{Westmint, TokenLocation}; impl pallet_xcm_benchmarks::Config for Runtime { type XcmConfig = xcm_config::XcmConfig; @@ -1704,10 +1758,10 @@ sp_api::impl_runtime_apis! { fn valid_destination() -> Result { Ok(Westmint::get()) } - fn worst_case_holding() -> MultiAssets { + fn worst_case_holding(_depositable_count: u32) -> MultiAssets { // Westend only knows about WND. vec![MultiAsset{ - id: Concrete(WndLocation::get()), + id: Concrete(TokenLocation::get()), fun: Fungible(1_000_000 * UNITS), }].into() } @@ -1716,24 +1770,19 @@ sp_api::impl_runtime_apis! { parameter_types! { pub const TrustedTeleporter: Option<(MultiLocation, MultiAsset)> = Some(( Westmint::get(), - MultiAsset { fun: Fungible(1 * UNITS), id: Concrete(WndLocation::get()) }, - )); - pub const TrustedReserve: Option<(MultiLocation, MultiAsset)> = Some(( - Westmint::get(), - MultiAsset { fun: Fungible(1 * UNITS), id: Concrete(WndLocation::get()) }, + MultiAsset { fun: Fungible(1 * UNITS), id: Concrete(TokenLocation::get()) }, )); } impl pallet_xcm_benchmarks::fungible::Config for Runtime { type TransactAsset = Balances; - type CheckedAccount = xcm_config::CheckAccount; + type CheckedAccount = xcm_config::LocalCheckAccount; type TrustedTeleporter = TrustedTeleporter; - type TrustedReserve = TrustedReserve; fn get_multi_asset() -> MultiAsset { MultiAsset { - id: Concrete(WndLocation::get()), + id: Concrete(TokenLocation::get()), fun: Fungible(1 * UNITS), } } @@ -1746,8 +1795,18 @@ sp_api::impl_runtime_apis! { (0u64, Response::Version(Default::default())) } - fn transact_origin() -> Result { - Ok(Westmint::get()) + fn worst_case_asset_exchange() -> Result<(MultiAssets, MultiAssets), BenchmarkError> { + // Westend doesn't support asset exchanges + Err(BenchmarkError::Skip) + } + + fn universal_alias() -> Result { + // The XCM executor of Westend doesn't have a configured `UniversalAliases` + Err(BenchmarkError::Skip) + } + + fn transact_origin_and_runtime_call() -> Result<(MultiLocation, RuntimeCall), BenchmarkError> { + Ok((Westmint::get(), frame_system::Call::remark_with_event { remark: vec![] }.into())) } fn subscribe_origin() -> Result { @@ -1756,10 +1815,15 @@ sp_api::impl_runtime_apis! { fn claimable_asset() -> Result<(MultiLocation, MultiLocation, MultiAssets), BenchmarkError> { let origin = Westmint::get(); - let assets: MultiAssets = (Concrete(WndLocation::get()), 1_000 * UNITS).into(); + let assets: MultiAssets = (Concrete(TokenLocation::get()), 1_000 * UNITS).into(); let ticket = MultiLocation { parents: 0, interior: Here }; Ok((origin, ticket, assets)) } + + fn unlockable_asset() -> Result<(MultiLocation, MultiLocation, MultiAsset), BenchmarkError> { + // Westend doesn't support asset locking + Err(BenchmarkError::Skip) + } } type XcmBalances = pallet_xcm_benchmarks::fungible::Pallet::; @@ -1801,7 +1865,7 @@ sp_api::impl_runtime_apis! { #[cfg(all(test, feature = "try-runtime"))] mod remote_tests { use super::*; - use frame_try_runtime::runtime_decl_for_TryRuntime::TryRuntime; + use frame_try_runtime::{runtime_decl_for_try_runtime::TryRuntime, UpgradeCheckSelect}; use remote_externalities::{ Builder, Mode, OfflineConfig, OnlineConfig, SnapshotConfig, Transport, }; @@ -1809,6 +1873,10 @@ mod remote_tests { #[tokio::test] async fn run_migrations() { + if var("RUN_MIGRATION_TESTS").is_err() { + return + } + sp_tracing::try_init_simple(); let transport: Transport = var("WS").unwrap_or("wss://westend-rpc.polkadot.io:443".to_string()).into(); @@ -1829,6 +1897,53 @@ mod remote_tests { .build() .await .unwrap(); - ext.execute_with(|| Runtime::on_runtime_upgrade(true)); + ext.execute_with(|| Runtime::on_runtime_upgrade(UpgradeCheckSelect::PreAndPost)); + } +} + +mod clean_state_migration { + use super::Runtime; + use frame_support::{pallet_prelude::*, storage_alias, traits::OnRuntimeUpgrade}; + use pallet_state_trie_migration::MigrationLimits; + + #[cfg(not(feature = "std"))] + use sp_std::prelude::*; + + #[storage_alias] + type AutoLimits = StorageValue, ValueQuery>; + + // Actual type of value is `MigrationTask`, putting a dummy + // one to avoid the trait constraint on T. + // Since we only use `kill` it is fine. + #[storage_alias] + type MigrationProcess = StorageValue; + + #[storage_alias] + type SignedMigrationMaxLimits = StorageValue; + + /// Initialize an automatic migration process. + pub struct CleanMigrate; + + impl OnRuntimeUpgrade for CleanMigrate { + #[cfg(feature = "try-runtime")] + fn pre_upgrade() -> Result, &'static str> { + Ok(Default::default()) + } + + fn on_runtime_upgrade() -> frame_support::weights::Weight { + MigrationProcess::kill(); + AutoLimits::kill(); + SignedMigrationMaxLimits::kill(); + ::DbWeight::get().writes(3) + } + + #[cfg(feature = "try-runtime")] + fn post_upgrade(_state: Vec) -> Result<(), &'static str> { + frame_support::ensure!( + !AutoLimits::exists() && !SignedMigrationMaxLimits::exists(), + "State migration clean.", + ); + Ok(()) + } } } diff --git a/runtime/westend/src/tests.rs b/runtime/westend/src/tests.rs index 385bf55caaa6..401b575255a8 100644 --- a/runtime/westend/src/tests.rs +++ b/runtime/westend/src/tests.rs @@ -17,7 +17,7 @@ //! Tests for the Westend Runtime Configuration use crate::*; -use xcm::latest::{AssetId::*, Fungibility::*, MultiLocation}; +use xcm::latest::prelude::*; #[test] fn remove_keys_weight_is_sensible() { @@ -57,9 +57,9 @@ fn sanity_check_teleport_assets_weight() { // so this test will certainly ensure that this problem does not occur. use frame_support::dispatch::GetDispatchInfo; let weight = pallet_xcm::Call::::teleport_assets { - dest: Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::here())), - beneficiary: Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::here())), - assets: Box::new((Concrete(MultiLocation::here()), Fungible(200_000)).into()), + dest: Box::new(Here.into()), + beneficiary: Box::new(Here.into()), + assets: Box::new((Here, 200_000).into()), fee_asset_item: 0, } .get_dispatch_info() diff --git a/runtime/westend/src/weights/frame_election_provider_support.rs b/runtime/westend/src/weights/frame_election_provider_support.rs index 686f0110530e..4c31ae2d29f7 100644 --- a/runtime/westend/src/weights/frame_election_provider_support.rs +++ b/runtime/westend/src/weights/frame_election_provider_support.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `frame_election_provider_support` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -48,22 +49,30 @@ impl frame_election_provider_support::WeightInfo for We /// The range of component `t` is `[500, 1000]`. /// The range of component `d` is `[5, 16]`. fn phragmen(v: u32, _t: u32, d: u32, ) -> Weight { - // Minimum execution time: 5_723_844 nanoseconds. - Weight::from_ref_time(5_782_575_000) - // Standard Error: 136_881 - .saturating_add(Weight::from_ref_time(5_669_281).saturating_mul(v.into())) - // Standard Error: 13_994_291 - .saturating_add(Weight::from_ref_time(1_533_934_753).saturating_mul(d.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 6_252_445_000 picoseconds. + Weight::from_parts(6_285_591_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 140_763 + .saturating_add(Weight::from_parts(5_867_639, 0).saturating_mul(v.into())) + // Standard Error: 14_391_126 + .saturating_add(Weight::from_parts(1_533_449_212, 0).saturating_mul(d.into())) } /// The range of component `v` is `[1000, 2000]`. /// The range of component `t` is `[500, 1000]`. /// The range of component `d` is `[5, 16]`. fn phragmms(v: u32, _t: u32, d: u32, ) -> Weight { - // Minimum execution time: 4_415_498 nanoseconds. - Weight::from_ref_time(4_453_849_000) - // Standard Error: 145_262 - .saturating_add(Weight::from_ref_time(5_507_786).saturating_mul(v.into())) - // Standard Error: 14_851_158 - .saturating_add(Weight::from_ref_time(1_750_852_788).saturating_mul(d.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 4_792_106_000 picoseconds. + Weight::from_parts(4_828_210_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 148_454 + .saturating_add(Weight::from_parts(5_671_403, 0).saturating_mul(v.into())) + // Standard Error: 15_177_501 + .saturating_add(Weight::from_parts(1_768_408_399, 0).saturating_mul(d.into())) } } diff --git a/runtime/westend/src/weights/frame_system.rs b/runtime/westend/src/weights/frame_system.rs index 1214bc3e5f37..f4ecb24a4316 100644 --- a/runtime/westend/src/weights/frame_system.rs +++ b/runtime/westend/src/weights/frame_system.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `frame_system` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -46,51 +47,82 @@ pub struct WeightInfo(PhantomData); impl frame_system::WeightInfo for WeightInfo { /// The range of component `b` is `[0, 3932160]`. fn remark(b: u32, ) -> Weight { - // Minimum execution time: 3_840 nanoseconds. - Weight::from_ref_time(3_901_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_117_000 picoseconds. + Weight::from_parts(2_150_000, 0) + .saturating_add(Weight::from_parts(0, 0)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(512).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(369, 0).saturating_mul(b.into())) } /// The range of component `b` is `[0, 3932160]`. fn remark_with_event(b: u32, ) -> Weight { - // Minimum execution time: 13_591 nanoseconds. - Weight::from_ref_time(13_785_000) - // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_871).saturating_mul(b.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_554_000 picoseconds. + Weight::from_parts(7_723_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 2 + .saturating_add(Weight::from_parts(1_426, 0).saturating_mul(b.into())) } - // Storage: System Digest (r:1 w:1) - // Storage: unknown [0x3a686561707061676573] (r:0 w:1) + /// Storage: System Digest (r:1 w:1) + /// Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: unknown `0x3a686561707061676573` (r:0 w:1) + /// Proof Skipped: unknown `0x3a686561707061676573` (r:0 w:1) fn set_heap_pages() -> Weight { - // Minimum execution time: 8_638 nanoseconds. - Weight::from_ref_time(8_960_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `1485` + // Minimum execution time: 4_120_000 picoseconds. + Weight::from_parts(4_351_000, 0) + .saturating_add(Weight::from_parts(0, 1485)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Skipped Metadata (r:0 w:0) + /// Storage: Skipped Metadata (r:0 w:0) + /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[0, 1000]`. fn set_storage(i: u32, ) -> Weight { - // Minimum execution time: 4_118 nanoseconds. - Weight::from_ref_time(4_192_000) - // Standard Error: 2_176 - .saturating_add(Weight::from_ref_time(630_389).saturating_mul(i.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_191_000 picoseconds. + Weight::from_parts(2_264_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 1_798 + .saturating_add(Weight::from_parts(677_191, 0).saturating_mul(i.into())) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } - // Storage: Skipped Metadata (r:0 w:0) + /// Storage: Skipped Metadata (r:0 w:0) + /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[0, 1000]`. fn kill_storage(i: u32, ) -> Weight { - // Minimum execution time: 4_220 nanoseconds. - Weight::from_ref_time(4_278_000) - // Standard Error: 962 - .saturating_add(Weight::from_ref_time(451_817).saturating_mul(i.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_198_000 picoseconds. + Weight::from_parts(2_287_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 784 + .saturating_add(Weight::from_parts(492_885, 0).saturating_mul(i.into())) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } - // Storage: Skipped Metadata (r:0 w:0) + /// Storage: Skipped Metadata (r:0 w:0) + /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) /// The range of component `p` is `[0, 1000]`. fn kill_prefix(p: u32, ) -> Weight { - // Minimum execution time: 6_118 nanoseconds. - Weight::from_ref_time(6_226_000) - // Standard Error: 1_231 - .saturating_add(Weight::from_ref_time(969_516).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `132 + p * (69 ±0)` + // Estimated: `105 + p * (70 ±0)` + // Minimum execution time: 4_176_000 picoseconds. + Weight::from_parts(4_323_000, 0) + .saturating_add(Weight::from_parts(0, 105)) + // Standard Error: 1_043 + .saturating_add(Weight::from_parts(1_028_349, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) + .saturating_add(Weight::from_parts(0, 70).saturating_mul(p.into())) } } diff --git a/runtime/westend/src/weights/mod.rs b/runtime/westend/src/weights/mod.rs index 216b3dcdf4ec..5ca093c618d5 100644 --- a/runtime/westend/src/weights/mod.rs +++ b/runtime/westend/src/weights/mod.rs @@ -34,6 +34,7 @@ pub mod pallet_staking; pub mod pallet_timestamp; pub mod pallet_utility; pub mod pallet_vesting; +pub mod pallet_xcm; pub mod runtime_common_auctions; pub mod runtime_common_crowdloan; pub mod runtime_common_paras_registrar; diff --git a/runtime/westend/src/weights/pallet_bags_list.rs b/runtime/westend/src/weights/pallet_bags_list.rs index 4c8a63ad0701..911397783c69 100644 --- a/runtime/westend/src/weights/pallet_bags_list.rs +++ b/runtime/westend/src/weights/pallet_bags_list.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_bags_list` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -44,34 +45,59 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_bags_list`. pub struct WeightInfo(PhantomData); impl pallet_bags_list::WeightInfo for WeightInfo { - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:0) - // Storage: VoterList ListNodes (r:4 w:4) - // Storage: VoterList ListBags (r:1 w:1) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:4 w:4) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn rebag_non_terminal() -> Weight { - // Minimum execution time: 63_995 nanoseconds. - Weight::from_ref_time(64_733_000) + // Proof Size summary in bytes: + // Measured: `1656` + // Estimated: `23146` + // Minimum execution time: 59_562_000 picoseconds. + Weight::from_parts(60_185_000, 0) + .saturating_add(Weight::from_parts(0, 23146)) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:0) - // Storage: VoterList ListNodes (r:3 w:3) - // Storage: VoterList ListBags (r:2 w:2) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:3 w:3) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:2 w:2) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn rebag_terminal() -> Weight { - // Minimum execution time: 63_061 nanoseconds. - Weight::from_ref_time(63_853_000) + // Proof Size summary in bytes: + // Measured: `1550` + // Estimated: `23074` + // Minimum execution time: 57_846_000 picoseconds. + Weight::from_parts(58_716_000, 0) + .saturating_add(Weight::from_parts(0, 23074)) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: VoterList ListNodes (r:4 w:4) - // Storage: Staking Bonded (r:2 w:0) - // Storage: Staking Ledger (r:2 w:0) - // Storage: VoterList CounterForListNodes (r:1 w:1) - // Storage: VoterList ListBags (r:1 w:1) + /// Storage: VoterList ListNodes (r:4 w:4) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:2 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:2 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn put_in_front_of() -> Weight { - // Minimum execution time: 62_678 nanoseconds. - Weight::from_ref_time(63_288_000) + // Proof Size summary in bytes: + // Measured: `1861` + // Estimated: `30748` + // Minimum execution time: 64_489_000 picoseconds. + Weight::from_parts(65_101_000, 0) + .saturating_add(Weight::from_parts(0, 30748)) .saturating_add(T::DbWeight::get().reads(10)) .saturating_add(T::DbWeight::get().writes(6)) } diff --git a/runtime/westend/src/weights/pallet_balances.rs b/runtime/westend/src/weights/pallet_balances.rs index e3174bdf7820..10582a691dce 100644 --- a/runtime/westend/src/weights/pallet_balances.rs +++ b/runtime/westend/src/weights/pallet_balances.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_balances` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -44,52 +45,87 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_balances`. pub struct WeightInfo(PhantomData); impl pallet_balances::WeightInfo for WeightInfo { - // Storage: System Account (r:1 w:1) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn transfer() -> Weight { - // Minimum execution time: 41_367 nanoseconds. - Weight::from_ref_time(41_776_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `3593` + // Minimum execution time: 33_929_000 picoseconds. + Weight::from_parts(34_323_000, 0) + .saturating_add(Weight::from_parts(0, 3593)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: System Account (r:1 w:1) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn transfer_keep_alive() -> Weight { - // Minimum execution time: 31_378 nanoseconds. - Weight::from_ref_time(31_781_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `3593` + // Minimum execution time: 25_773_000 picoseconds. + Weight::from_parts(26_215_000, 0) + .saturating_add(Weight::from_parts(0, 3593)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: System Account (r:1 w:1) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn set_balance_creating() -> Weight { - // Minimum execution time: 24_022 nanoseconds. - Weight::from_ref_time(24_762_000) + // Proof Size summary in bytes: + // Measured: `174` + // Estimated: `3593` + // Minimum execution time: 16_040_000 picoseconds. + Weight::from_parts(16_350_000, 0) + .saturating_add(Weight::from_parts(0, 3593)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: System Account (r:1 w:1) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn set_balance_killing() -> Weight { - // Minimum execution time: 26_478 nanoseconds. - Weight::from_ref_time(27_064_000) + // Proof Size summary in bytes: + // Measured: `174` + // Estimated: `3593` + // Minimum execution time: 19_096_000 picoseconds. + Weight::from_parts(19_568_000, 0) + .saturating_add(Weight::from_parts(0, 3593)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: System Account (r:2 w:2) + /// Storage: System Account (r:2 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn force_transfer() -> Weight { - // Minimum execution time: 41_384 nanoseconds. - Weight::from_ref_time(42_178_000) + // Proof Size summary in bytes: + // Measured: `103` + // Estimated: `6196` + // Minimum execution time: 35_297_000 picoseconds. + Weight::from_parts(36_474_000, 0) + .saturating_add(Weight::from_parts(0, 6196)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: System Account (r:1 w:1) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn transfer_all() -> Weight { - // Minimum execution time: 36_952 nanoseconds. - Weight::from_ref_time(37_568_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `3593` + // Minimum execution time: 31_735_000 picoseconds. + Weight::from_parts(32_471_000, 0) + .saturating_add(Weight::from_parts(0, 3593)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: System Account (r:1 w:1) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn force_unreserve() -> Weight { - // Minimum execution time: 21_210 nanoseconds. - Weight::from_ref_time(21_647_000) + // Proof Size summary in bytes: + // Measured: `174` + // Estimated: `3593` + // Minimum execution time: 14_774_000 picoseconds. + Weight::from_parts(14_971_000, 0) + .saturating_add(Weight::from_parts(0, 3593)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/westend/src/weights/pallet_election_provider_multi_phase.rs b/runtime/westend/src/weights/pallet_election_provider_multi_phase.rs index 3564cd600b41..fbb825068b36 100644 --- a/runtime/westend/src/weights/pallet_election_provider_multi_phase.rs +++ b/runtime/westend/src/weights/pallet_election_provider_multi_phase.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_election_provider_multi_phase` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -44,132 +45,223 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_election_provider_multi_phase`. pub struct WeightInfo(PhantomData); impl pallet_election_provider_multi_phase::WeightInfo for WeightInfo { - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Staking CurrentPlannedSession (r:1 w:0) - // Storage: Staking ErasStartSessionIndex (r:1 w:0) - // Storage: Babe EpochIndex (r:1 w:0) - // Storage: Babe GenesisSlot (r:1 w:0) - // Storage: Babe CurrentSlot (r:1 w:0) - // Storage: Staking ForceEra (r:1 w:0) - // Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking CurrentPlannedSession (r:1 w:0) + /// Proof: Staking CurrentPlannedSession (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ErasStartSessionIndex (r:1 w:0) + /// Proof: Staking ErasStartSessionIndex (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Babe EpochIndex (r:1 w:0) + /// Proof: Babe EpochIndex (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Babe GenesisSlot (r:1 w:0) + /// Proof: Babe GenesisSlot (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Babe CurrentSlot (r:1 w:0) + /// Proof: Babe CurrentSlot (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Staking ForceEra (r:1 w:0) + /// Proof: Staking ForceEra (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) + /// Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) fn on_initialize_nothing() -> Weight { - // Minimum execution time: 16_349 nanoseconds. - Weight::from_ref_time(16_709_000) + // Proof Size summary in bytes: + // Measured: `919` + // Estimated: `14828` + // Minimum execution time: 16_662_000 picoseconds. + Weight::from_parts(17_483_000, 0) + .saturating_add(Weight::from_parts(0, 14828)) .saturating_add(T::DbWeight::get().reads(8)) } - // Storage: ElectionProviderMultiPhase Round (r:1 w:0) - // Storage: ElectionProviderMultiPhase CurrentPhase (r:0 w:1) + /// Storage: ElectionProviderMultiPhase Round (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase Round (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) fn on_initialize_open_signed() -> Weight { - // Minimum execution time: 14_031 nanoseconds. - Weight::from_ref_time(14_452_000) - .saturating_add(T::DbWeight::get().reads(1)) + // Proof Size summary in bytes: + // Measured: `6` + // Estimated: `2982` + // Minimum execution time: 11_256_000 picoseconds. + Weight::from_parts(11_601_000, 0) + .saturating_add(Weight::from_parts(0, 2982)) + .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: ElectionProviderMultiPhase Round (r:1 w:0) - // Storage: ElectionProviderMultiPhase CurrentPhase (r:0 w:1) + /// Storage: ElectionProviderMultiPhase Round (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase Round (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) fn on_initialize_open_unsigned() -> Weight { - // Minimum execution time: 13_861 nanoseconds. - Weight::from_ref_time(14_243_000) - .saturating_add(T::DbWeight::get().reads(1)) + // Proof Size summary in bytes: + // Measured: `6` + // Estimated: `2982` + // Minimum execution time: 12_467_000 picoseconds. + Weight::from_parts(12_655_000, 0) + .saturating_add(Weight::from_parts(0, 2982)) + .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: System Account (r:1 w:1) - // Storage: ElectionProviderMultiPhase QueuedSolution (r:0 w:1) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: ElectionProviderMultiPhase QueuedSolution (r:0 w:1) + /// Proof Skipped: ElectionProviderMultiPhase QueuedSolution (max_values: Some(1), max_size: None, mode: Measured) fn finalize_signed_phase_accept_solution() -> Weight { - // Minimum execution time: 30_255 nanoseconds. - Weight::from_ref_time(30_929_000) + // Proof Size summary in bytes: + // Measured: `174` + // Estimated: `3767` + // Minimum execution time: 24_052_000 picoseconds. + Weight::from_parts(24_490_000, 0) + .saturating_add(Weight::from_parts(0, 3767)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: System Account (r:1 w:1) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn finalize_signed_phase_reject_solution() -> Weight { - // Minimum execution time: 23_759 nanoseconds. - Weight::from_ref_time(24_256_000) + // Proof Size summary in bytes: + // Measured: `174` + // Estimated: `3593` + // Minimum execution time: 16_659_000 picoseconds. + Weight::from_parts(17_066_000, 0) + .saturating_add(Weight::from_parts(0, 3593)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: ElectionProviderMultiPhase SnapshotMetadata (r:0 w:1) - // Storage: ElectionProviderMultiPhase DesiredTargets (r:0 w:1) - // Storage: ElectionProviderMultiPhase Snapshot (r:0 w:1) + /// Storage: ElectionProviderMultiPhase SnapshotMetadata (r:0 w:1) + /// Proof Skipped: ElectionProviderMultiPhase SnapshotMetadata (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase DesiredTargets (r:0 w:1) + /// Proof Skipped: ElectionProviderMultiPhase DesiredTargets (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase Snapshot (r:0 w:1) + /// Proof Skipped: ElectionProviderMultiPhase Snapshot (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `v` is `[1000, 2000]`. /// The range of component `t` is `[500, 1000]`. fn create_snapshot_internal(v: u32, _t: u32, ) -> Weight { - // Minimum execution time: 435_167 nanoseconds. - Weight::from_ref_time(444_470_000) - // Standard Error: 2_460 - .saturating_add(Weight::from_ref_time(266_808).saturating_mul(v.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 461_097_000 picoseconds. + Weight::from_parts(475_784_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 2_575 + .saturating_add(Weight::from_parts(276_685, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: ElectionProviderMultiPhase SignedSubmissionIndices (r:1 w:1) - // Storage: ElectionProviderMultiPhase SignedSubmissionNextIndex (r:1 w:1) - // Storage: ElectionProviderMultiPhase SnapshotMetadata (r:1 w:1) - // Storage: ElectionProviderMultiPhase SignedSubmissionsMap (r:1 w:0) - // Storage: System BlockWeight (r:1 w:1) - // Storage: ElectionProviderMultiPhase QueuedSolution (r:1 w:1) - // Storage: ElectionProviderMultiPhase Round (r:1 w:1) - // Storage: ElectionProviderMultiPhase DesiredTargets (r:0 w:1) - // Storage: ElectionProviderMultiPhase Snapshot (r:0 w:1) - // Storage: ElectionProviderMultiPhase CurrentPhase (r:0 w:1) + /// Storage: ElectionProviderMultiPhase SignedSubmissionIndices (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase SignedSubmissionIndices (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase SignedSubmissionNextIndex (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase SignedSubmissionNextIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase SnapshotMetadata (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase SnapshotMetadata (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase SignedSubmissionsMap (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase SignedSubmissionsMap (max_values: None, max_size: None, mode: Measured) + /// Storage: System BlockWeight (r:1 w:1) + /// Proof: System BlockWeight (max_values: Some(1), max_size: Some(48), added: 543, mode: MaxEncodedLen) + /// Storage: ElectionProviderMultiPhase QueuedSolution (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase QueuedSolution (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase Round (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase Round (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase DesiredTargets (r:0 w:1) + /// Proof Skipped: ElectionProviderMultiPhase DesiredTargets (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase Snapshot (r:0 w:1) + /// Proof Skipped: ElectionProviderMultiPhase Snapshot (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `a` is `[500, 800]`. /// The range of component `d` is `[200, 400]`. fn elect_queued(a: u32, d: u32, ) -> Weight { - // Minimum execution time: 280_515 nanoseconds. - Weight::from_ref_time(100_927_078) - // Standard Error: 5_359 - .saturating_add(Weight::from_ref_time(332_802).saturating_mul(a.into())) - // Standard Error: 8_033 - .saturating_add(Weight::from_ref_time(77_533).saturating_mul(d.into())) - .saturating_add(T::DbWeight::get().reads(7)) + // Proof Size summary in bytes: + // Measured: `229 + a * (768 ±0) + d * (48 ±0)` + // Estimated: `16752 + a * (6912 ±0) + d * (441 ±0)` + // Minimum execution time: 286_512_000 picoseconds. + Weight::from_parts(66_659_098, 0) + .saturating_add(Weight::from_parts(0, 16752)) + // Standard Error: 3_982 + .saturating_add(Weight::from_parts(353_694, 0).saturating_mul(a.into())) + // Standard Error: 5_969 + .saturating_add(Weight::from_parts(143_530, 0).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(9)) + .saturating_add(Weight::from_parts(0, 6912).saturating_mul(a.into())) + .saturating_add(Weight::from_parts(0, 441).saturating_mul(d.into())) } - // Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) - // Storage: ElectionProviderMultiPhase SnapshotMetadata (r:1 w:0) - // Storage: TransactionPayment NextFeeMultiplier (r:1 w:0) - // Storage: ElectionProviderMultiPhase SignedSubmissionIndices (r:1 w:1) - // Storage: ElectionProviderMultiPhase SignedSubmissionNextIndex (r:1 w:1) - // Storage: ElectionProviderMultiPhase SignedSubmissionsMap (r:0 w:1) + /// Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase SnapshotMetadata (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase SnapshotMetadata (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: TransactionPayment NextFeeMultiplier (r:1 w:0) + /// Proof: TransactionPayment NextFeeMultiplier (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: ElectionProviderMultiPhase SignedSubmissionIndices (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase SignedSubmissionIndices (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase SignedSubmissionNextIndex (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase SignedSubmissionNextIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase SignedSubmissionsMap (r:0 w:1) + /// Proof Skipped: ElectionProviderMultiPhase SignedSubmissionsMap (max_values: None, max_size: None, mode: Measured) fn submit() -> Weight { - // Minimum execution time: 59_634 nanoseconds. - Weight::from_ref_time(60_784_000) + // Proof Size summary in bytes: + // Measured: `7368` + // Estimated: `44281` + // Minimum execution time: 49_335_000 picoseconds. + Weight::from_parts(50_017_000, 0) + .saturating_add(Weight::from_parts(0, 44281)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) - // Storage: ElectionProviderMultiPhase Round (r:1 w:0) - // Storage: ElectionProviderMultiPhase DesiredTargets (r:1 w:0) - // Storage: ElectionProviderMultiPhase QueuedSolution (r:1 w:1) - // Storage: ElectionProviderMultiPhase SnapshotMetadata (r:1 w:0) - // Storage: ElectionProviderMultiPhase MinimumUntrustedScore (r:1 w:0) - // Storage: ElectionProviderMultiPhase Snapshot (r:1 w:0) + /// Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase Round (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase Round (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase DesiredTargets (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase DesiredTargets (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase QueuedSolution (r:1 w:1) + /// Proof Skipped: ElectionProviderMultiPhase QueuedSolution (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase SnapshotMetadata (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase SnapshotMetadata (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase Snapshot (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase Snapshot (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase MinimumUntrustedScore (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase MinimumUntrustedScore (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `v` is `[1000, 2000]`. /// The range of component `t` is `[500, 1000]`. /// The range of component `a` is `[500, 800]`. /// The range of component `d` is `[200, 400]`. - fn submit_unsigned(v: u32, _t: u32, a: u32, _d: u32, ) -> Weight { - // Minimum execution time: 4_773_587 nanoseconds. - Weight::from_ref_time(4_806_306_000) - // Standard Error: 14_744 - .saturating_add(Weight::from_ref_time(103_020).saturating_mul(v.into())) - // Standard Error: 43_694 - .saturating_add(Weight::from_ref_time(4_578_179).saturating_mul(a.into())) + fn submit_unsigned(v: u32, t: u32, a: u32, _d: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `110 + v * (553 ±0) + t * (32 ±0)` + // Estimated: `11165 + v * (3871 ±0) + t * (224 ±0)` + // Minimum execution time: 4_986_312_000 picoseconds. + Weight::from_parts(5_030_772_000, 0) + .saturating_add(Weight::from_parts(0, 11165)) + // Standard Error: 17_457 + .saturating_add(Weight::from_parts(162_292, 0).saturating_mul(v.into())) + // Standard Error: 51_732 + .saturating_add(Weight::from_parts(4_505_524, 0).saturating_mul(a.into())) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 3871).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(0, 224).saturating_mul(t.into())) } - // Storage: ElectionProviderMultiPhase Round (r:1 w:0) - // Storage: ElectionProviderMultiPhase DesiredTargets (r:1 w:0) - // Storage: ElectionProviderMultiPhase MinimumUntrustedScore (r:1 w:0) - // Storage: ElectionProviderMultiPhase Snapshot (r:1 w:0) + /// Storage: ElectionProviderMultiPhase DesiredTargets (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase DesiredTargets (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase Snapshot (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase Snapshot (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase Round (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase Round (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ElectionProviderMultiPhase MinimumUntrustedScore (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase MinimumUntrustedScore (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `v` is `[1000, 2000]`. /// The range of component `t` is `[500, 1000]`. /// The range of component `a` is `[500, 800]`. /// The range of component `d` is `[200, 400]`. - fn feasibility_check(v: u32, _t: u32, a: u32, _d: u32, ) -> Weight { - // Minimum execution time: 3_967_297 nanoseconds. - Weight::from_ref_time(3_982_750_000) - // Standard Error: 12_214 - .saturating_add(Weight::from_ref_time(204_637).saturating_mul(v.into())) - // Standard Error: 36_195 - .saturating_add(Weight::from_ref_time(3_307_742).saturating_mul(a.into())) + fn feasibility_check(v: u32, t: u32, a: u32, _d: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `85 + v * (553 ±0) + t * (32 ±0)` + // Estimated: `6280 + v * (2212 ±0) + t * (128 ±0)` + // Minimum execution time: 4_200_429_000 picoseconds. + Weight::from_parts(4_225_730_000, 0) + .saturating_add(Weight::from_parts(0, 6280)) + // Standard Error: 13_976 + .saturating_add(Weight::from_parts(232_217, 0).saturating_mul(v.into())) + // Standard Error: 41_417 + .saturating_add(Weight::from_parts(3_352_123, 0).saturating_mul(a.into())) .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(Weight::from_parts(0, 2212).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(0, 128).saturating_mul(t.into())) } } diff --git a/runtime/westend/src/weights/pallet_fast_unstake.rs b/runtime/westend/src/weights/pallet_fast_unstake.rs index fe7818b0144b..87aa31fd0095 100644 --- a/runtime/westend/src/weights/pallet_fast_unstake.rs +++ b/runtime/westend/src/weights/pallet_fast_unstake.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_fast_unstake` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -44,78 +45,150 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_fast_unstake`. pub struct WeightInfo(PhantomData); impl pallet_fast_unstake::WeightInfo for WeightInfo { - // Storage: FastUnstake ErasToCheckPerBlock (r:1 w:0) - // Storage: Staking ValidatorCount (r:1 w:0) - // Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) - // Storage: FastUnstake Head (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Staking SlashingSpans (r:64 w:0) - // Storage: Staking Bonded (r:64 w:64) - // Storage: Staking Validators (r:64 w:0) - // Storage: Staking Nominators (r:64 w:0) - // Storage: System Account (r:64 w:64) - // Storage: Balances Locks (r:64 w:64) - // Storage: Staking Ledger (r:0 w:64) - // Storage: Staking Payee (r:0 w:64) - fn on_idle_unstake() -> Weight { - // Minimum execution time: 2_253_744 nanoseconds. - Weight::from_ref_time(2_294_283_000) - .saturating_add(T::DbWeight::get().reads(389)) - .saturating_add(T::DbWeight::get().writes(321)) + /// Storage: FastUnstake ErasToCheckPerBlock (r:1 w:0) + /// Proof: FastUnstake ErasToCheckPerBlock (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ValidatorCount (r:1 w:0) + /// Proof: Staking ValidatorCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: FastUnstake Head (r:1 w:1) + /// Proof: FastUnstake Head (max_values: Some(1), max_size: Some(3087), added: 3582, mode: MaxEncodedLen) + /// Storage: FastUnstake CounterForQueue (r:1 w:0) + /// Proof: FastUnstake CounterForQueue (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking SlashingSpans (r:64 w:0) + /// Proof Skipped: Staking SlashingSpans (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking Bonded (r:64 w:64) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:64 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:64 w:0) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: System Account (r:64 w:64) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:64 w:64) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:0 w:64) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:0 w:64) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + /// The range of component `b` is `[1, 64]`. + fn on_idle_unstake(b: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1128 + b * (344 ±0)` + // Estimated: `20161 + b * (17642 ±0)` + // Minimum execution time: 74_865_000 picoseconds. + Weight::from_parts(35_147_910, 0) + .saturating_add(Weight::from_parts(0, 20161)) + // Standard Error: 30_715 + .saturating_add(Weight::from_parts(41_160_559, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().reads((6_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((5_u64).saturating_mul(b.into()))) + .saturating_add(Weight::from_parts(0, 17642).saturating_mul(b.into())) } - // Storage: FastUnstake ErasToCheckPerBlock (r:1 w:0) - // Storage: Staking ValidatorCount (r:1 w:0) - // Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) - // Storage: FastUnstake Head (r:1 w:1) - // Storage: FastUnstake Queue (r:65 w:64) - // Storage: FastUnstake CounterForQueue (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Staking ErasStakers (r:4 w:0) - /// The range of component `x` is `[2, 256]`. - fn on_idle_check(x: u32, ) -> Weight { - // Minimum execution time: 2_379_016 nanoseconds. - Weight::from_ref_time(2_432_780_000) - // Standard Error: 886_744 - .saturating_add(Weight::from_ref_time(832_238_992).saturating_mul(x.into())) - .saturating_add(T::DbWeight::get().reads(72)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(x.into()))) - .saturating_add(T::DbWeight::get().writes(66)) + /// Storage: FastUnstake ErasToCheckPerBlock (r:1 w:0) + /// Proof: FastUnstake ErasToCheckPerBlock (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ValidatorCount (r:1 w:0) + /// Proof: Staking ValidatorCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: FastUnstake Head (r:1 w:1) + /// Proof: FastUnstake Head (max_values: Some(1), max_size: Some(3087), added: 3582, mode: MaxEncodedLen) + /// Storage: FastUnstake CounterForQueue (r:1 w:0) + /// Proof: FastUnstake CounterForQueue (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) + /// Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ErasStakers (r:257 w:0) + /// Proof Skipped: Staking ErasStakers (max_values: None, max_size: None, mode: Measured) + /// The range of component `v` is `[1, 256]`. + /// The range of component `b` is `[1, 64]`. + fn on_idle_check(v: u32, b: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1342 + v * (2485 ±0) + b * (48 ±0)` + // Estimated: `17868 + v * (7447 ±0) + b * (98 ±0)` + // Minimum execution time: 665_513_000 picoseconds. + Weight::from_parts(670_182_000, 0) + .saturating_add(Weight::from_parts(0, 17868)) + // Standard Error: 4_191_615 + .saturating_add(Weight::from_parts(134_997_267, 0).saturating_mul(v.into())) + // Standard Error: 16_771_129 + .saturating_add(Weight::from_parts(527_468_579, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(7)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(v.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 7447).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(0, 98).saturating_mul(b.into())) } - // Storage: FastUnstake ErasToCheckPerBlock (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: FastUnstake Queue (r:1 w:1) - // Storage: FastUnstake Head (r:1 w:0) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Validators (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) - // Storage: Staking CounterForNominators (r:1 w:1) - // Storage: VoterList ListNodes (r:2 w:2) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) - // Storage: FastUnstake CounterForQueue (r:1 w:1) + /// Storage: FastUnstake ErasToCheckPerBlock (r:1 w:0) + /// Proof: FastUnstake ErasToCheckPerBlock (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: FastUnstake Queue (r:1 w:1) + /// Proof: FastUnstake Queue (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) + /// Storage: FastUnstake Head (r:1 w:0) + /// Proof: FastUnstake Head (max_values: Some(1), max_size: Some(3087), added: 3582, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:1 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:1) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: Staking CounterForNominators (r:1 w:1) + /// Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:1 w:1) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: FastUnstake CounterForQueue (r:1 w:1) + /// Proof: FastUnstake CounterForQueue (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn register_fast_unstake() -> Weight { - // Minimum execution time: 129_141 nanoseconds. - Weight::from_ref_time(132_182_000) - .saturating_add(T::DbWeight::get().reads(15)) - .saturating_add(T::DbWeight::get().writes(10)) + // Proof Size summary in bytes: + // Measured: `1864` + // Estimated: `43094` + // Minimum execution time: 109_031_000 picoseconds. + Weight::from_parts(110_490_000, 0) + .saturating_add(Weight::from_parts(0, 43094)) + .saturating_add(T::DbWeight::get().reads(14)) + .saturating_add(T::DbWeight::get().writes(9)) } - // Storage: FastUnstake ErasToCheckPerBlock (r:1 w:0) - // Storage: Staking Ledger (r:1 w:0) - // Storage: FastUnstake Queue (r:1 w:1) - // Storage: FastUnstake Head (r:1 w:0) - // Storage: FastUnstake CounterForQueue (r:1 w:1) + /// Storage: FastUnstake ErasToCheckPerBlock (r:1 w:0) + /// Proof: FastUnstake ErasToCheckPerBlock (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: FastUnstake Queue (r:1 w:1) + /// Proof: FastUnstake Queue (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) + /// Storage: FastUnstake Head (r:1 w:0) + /// Proof: FastUnstake Head (max_values: Some(1), max_size: Some(3087), added: 3582, mode: MaxEncodedLen) + /// Storage: FastUnstake CounterForQueue (r:1 w:1) + /// Proof: FastUnstake CounterForQueue (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn deregister() -> Weight { - // Minimum execution time: 50_908 nanoseconds. - Weight::from_ref_time(52_386_000) + // Proof Size summary in bytes: + // Measured: `1156` + // Estimated: `15627` + // Minimum execution time: 40_614_000 picoseconds. + Weight::from_parts(41_064_000, 0) + .saturating_add(Weight::from_parts(0, 15627)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: FastUnstake ErasToCheckPerBlock (r:0 w:1) + /// Storage: FastUnstake ErasToCheckPerBlock (r:0 w:1) + /// Proof: FastUnstake ErasToCheckPerBlock (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn control() -> Weight { - // Minimum execution time: 4_653 nanoseconds. - Weight::from_ref_time(4_811_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_782_000 picoseconds. + Weight::from_parts(2_872_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/runtime/westend/src/weights/pallet_identity.rs b/runtime/westend/src/weights/pallet_identity.rs index 9711f8000b3c..c3d24a95d297 100644 --- a/runtime/westend/src/weights/pallet_identity.rs +++ b/runtime/westend/src/weights/pallet_identity.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_identity` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -44,209 +45,307 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_identity`. pub struct WeightInfo(PhantomData); impl pallet_identity::WeightInfo for WeightInfo { - // Storage: Identity Registrars (r:1 w:1) + /// Storage: Identity Registrars (r:1 w:1) + /// Proof: Identity Registrars (max_values: Some(1), max_size: Some(1141), added: 1636, mode: MaxEncodedLen) /// The range of component `r` is `[1, 19]`. fn add_registrar(r: u32, ) -> Weight { - // Minimum execution time: 18_131 nanoseconds. - Weight::from_ref_time(19_355_815) - // Standard Error: 3_541 - .saturating_add(Weight::from_ref_time(155_675).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `32 + r * (57 ±0)` + // Estimated: `2626` + // Minimum execution time: 11_853_000 picoseconds. + Weight::from_parts(12_624_097, 0) + .saturating_add(Weight::from_parts(0, 2626)) + // Standard Error: 2_065 + .saturating_add(Weight::from_parts(100_367, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity IdentityOf (r:1 w:1) + /// Storage: Identity IdentityOf (r:1 w:1) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) /// The range of component `r` is `[1, 20]`. /// The range of component `x` is `[0, 100]`. fn set_identity(r: u32, x: u32, ) -> Weight { - // Minimum execution time: 38_599 nanoseconds. - Weight::from_ref_time(36_106_804) - // Standard Error: 6_572 - .saturating_add(Weight::from_ref_time(157_847).saturating_mul(r.into())) - // Standard Error: 1_282 - .saturating_add(Weight::from_ref_time(407_972).saturating_mul(x.into())) + // Proof Size summary in bytes: + // Measured: `442 + r * (5 ±0)` + // Estimated: `11003` + // Minimum execution time: 29_553_000 picoseconds. + Weight::from_parts(29_405_525, 0) + .saturating_add(Weight::from_parts(0, 11003)) + // Standard Error: 3_326 + .saturating_add(Weight::from_parts(44_863, 0).saturating_mul(r.into())) + // Standard Error: 649 + .saturating_add(Weight::from_parts(445_097, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity IdentityOf (r:1 w:0) - // Storage: Identity SubsOf (r:1 w:1) - // Storage: Identity SuperOf (r:2 w:2) + /// Storage: Identity IdentityOf (r:1 w:0) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) + /// Storage: Identity SubsOf (r:1 w:1) + /// Proof: Identity SubsOf (max_values: None, max_size: Some(3258), added: 5733, mode: MaxEncodedLen) + /// Storage: Identity SuperOf (r:100 w:100) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) /// The range of component `s` is `[0, 100]`. fn set_subs_new(s: u32, ) -> Weight { - // Minimum execution time: 11_145 nanoseconds. - Weight::from_ref_time(30_821_849) - // Standard Error: 5_171 - .saturating_add(Weight::from_ref_time(2_318_309).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `101` + // Estimated: `18716 + s * (2589 ±0)` + // Minimum execution time: 9_172_000 picoseconds. + Weight::from_parts(20_099_144, 0) + .saturating_add(Weight::from_parts(0, 18716)) + // Standard Error: 9_266 + .saturating_add(Weight::from_parts(2_790_589, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(s.into()))) .saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) + .saturating_add(Weight::from_parts(0, 2589).saturating_mul(s.into())) } - // Storage: Identity IdentityOf (r:1 w:0) - // Storage: Identity SubsOf (r:1 w:1) - // Storage: Identity SuperOf (r:0 w:2) + /// Storage: Identity IdentityOf (r:1 w:0) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) + /// Storage: Identity SubsOf (r:1 w:1) + /// Proof: Identity SubsOf (max_values: None, max_size: Some(3258), added: 5733, mode: MaxEncodedLen) + /// Storage: Identity SuperOf (r:0 w:100) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) /// The range of component `p` is `[0, 100]`. fn set_subs_old(p: u32, ) -> Weight { - // Minimum execution time: 11_023 nanoseconds. - Weight::from_ref_time(30_672_202) - // Standard Error: 4_655 - .saturating_add(Weight::from_ref_time(971_190).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `194 + p * (32 ±0)` + // Estimated: `17726` + // Minimum execution time: 9_445_000 picoseconds. + Weight::from_parts(22_087_455, 0) + .saturating_add(Weight::from_parts(0, 17726)) + // Standard Error: 3_133 + .saturating_add(Weight::from_parts(1_071_467, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) } - // Storage: Identity SubsOf (r:1 w:1) - // Storage: Identity IdentityOf (r:1 w:1) - // Storage: Identity SuperOf (r:0 w:100) + /// Storage: Identity SubsOf (r:1 w:1) + /// Proof: Identity SubsOf (max_values: None, max_size: Some(3258), added: 5733, mode: MaxEncodedLen) + /// Storage: Identity IdentityOf (r:1 w:1) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) + /// Storage: Identity SuperOf (r:0 w:100) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) /// The range of component `r` is `[1, 20]`. /// The range of component `s` is `[0, 100]`. /// The range of component `x` is `[0, 100]`. fn clear_identity(r: u32, s: u32, x: u32, ) -> Weight { - // Minimum execution time: 54_602 nanoseconds. - Weight::from_ref_time(38_688_311) - // Standard Error: 4_577 - .saturating_add(Weight::from_ref_time(100_423).saturating_mul(r.into())) - // Standard Error: 893 - .saturating_add(Weight::from_ref_time(937_982).saturating_mul(s.into())) - // Standard Error: 893 - .saturating_add(Weight::from_ref_time(183_903).saturating_mul(x.into())) + // Proof Size summary in bytes: + // Measured: `469 + r * (5 ±0) + s * (32 ±0) + x * (66 ±0)` + // Estimated: `17726` + // Minimum execution time: 51_155_000 picoseconds. + Weight::from_parts(28_947_629, 0) + .saturating_add(Weight::from_parts(0, 17726)) + // Standard Error: 5_808 + .saturating_add(Weight::from_parts(29_448, 0).saturating_mul(r.into())) + // Standard Error: 1_134 + .saturating_add(Weight::from_parts(1_073_890, 0).saturating_mul(s.into())) + // Standard Error: 1_134 + .saturating_add(Weight::from_parts(248_483, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) } - // Storage: Identity Registrars (r:1 w:0) - // Storage: Identity IdentityOf (r:1 w:1) + /// Storage: Identity Registrars (r:1 w:0) + /// Proof: Identity Registrars (max_values: Some(1), max_size: Some(1141), added: 1636, mode: MaxEncodedLen) + /// Storage: Identity IdentityOf (r:1 w:1) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) /// The range of component `r` is `[1, 20]`. /// The range of component `x` is `[0, 100]`. fn request_judgement(r: u32, x: u32, ) -> Weight { - // Minimum execution time: 39_987 nanoseconds. - Weight::from_ref_time(39_648_106) - // Standard Error: 11_011 - .saturating_add(Weight::from_ref_time(130_117).saturating_mul(r.into())) - // Standard Error: 2_148 - .saturating_add(Weight::from_ref_time(401_847).saturating_mul(x.into())) + // Proof Size summary in bytes: + // Measured: `367 + r * (57 ±0) + x * (66 ±0)` + // Estimated: `13629` + // Minimum execution time: 30_053_000 picoseconds. + Weight::from_parts(30_566_049, 0) + .saturating_add(Weight::from_parts(0, 13629)) + // Standard Error: 22_362 + .saturating_add(Weight::from_parts(27_897, 0).saturating_mul(r.into())) + // Standard Error: 4_363 + .saturating_add(Weight::from_parts(473_323, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity IdentityOf (r:1 w:1) + /// Storage: Identity IdentityOf (r:1 w:1) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) /// The range of component `r` is `[1, 20]`. /// The range of component `x` is `[0, 100]`. fn cancel_request(r: u32, x: u32, ) -> Weight { - // Minimum execution time: 36_290 nanoseconds. - Weight::from_ref_time(35_437_506) - // Standard Error: 4_581 - .saturating_add(Weight::from_ref_time(86_490).saturating_mul(r.into())) - // Standard Error: 893 - .saturating_add(Weight::from_ref_time(416_099).saturating_mul(x.into())) + // Proof Size summary in bytes: + // Measured: `398 + x * (66 ±0)` + // Estimated: `11003` + // Minimum execution time: 27_006_000 picoseconds. + Weight::from_parts(27_888_979, 0) + .saturating_add(Weight::from_parts(0, 11003)) + // Standard Error: 5_569 + .saturating_add(Weight::from_parts(44_118, 0).saturating_mul(r.into())) + // Standard Error: 1_086 + .saturating_add(Weight::from_parts(461_409, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity Registrars (r:1 w:1) + /// Storage: Identity Registrars (r:1 w:1) + /// Proof: Identity Registrars (max_values: Some(1), max_size: Some(1141), added: 1636, mode: MaxEncodedLen) /// The range of component `r` is `[1, 19]`. fn set_fee(r: u32, ) -> Weight { - // Minimum execution time: 9_434 nanoseconds. - Weight::from_ref_time(10_522_329) - // Standard Error: 3_124 - .saturating_add(Weight::from_ref_time(143_872).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `89 + r * (57 ±0)` + // Estimated: `2626` + // Minimum execution time: 7_438_000 picoseconds. + Weight::from_parts(7_964_226, 0) + .saturating_add(Weight::from_parts(0, 2626)) + // Standard Error: 1_334 + .saturating_add(Weight::from_parts(104_852, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity Registrars (r:1 w:1) + /// Storage: Identity Registrars (r:1 w:1) + /// Proof: Identity Registrars (max_values: Some(1), max_size: Some(1141), added: 1636, mode: MaxEncodedLen) /// The range of component `r` is `[1, 19]`. fn set_account_id(r: u32, ) -> Weight { - // Minimum execution time: 9_963 nanoseconds. - Weight::from_ref_time(10_676_629) - // Standard Error: 2_604 - .saturating_add(Weight::from_ref_time(150_719).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `89 + r * (57 ±0)` + // Estimated: `2626` + // Minimum execution time: 7_590_000 picoseconds. + Weight::from_parts(8_044_244, 0) + .saturating_add(Weight::from_parts(0, 2626)) + // Standard Error: 1_371 + .saturating_add(Weight::from_parts(96_091, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity Registrars (r:1 w:1) + /// Storage: Identity Registrars (r:1 w:1) + /// Proof: Identity Registrars (max_values: Some(1), max_size: Some(1141), added: 1636, mode: MaxEncodedLen) /// The range of component `r` is `[1, 19]`. fn set_fields(r: u32, ) -> Weight { - // Minimum execution time: 9_743 nanoseconds. - Weight::from_ref_time(10_550_737) - // Standard Error: 2_567 - .saturating_add(Weight::from_ref_time(147_953).saturating_mul(r.into())) + // Proof Size summary in bytes: + // Measured: `89 + r * (57 ±0)` + // Estimated: `2626` + // Minimum execution time: 7_539_000 picoseconds. + Weight::from_parts(7_976_798, 0) + .saturating_add(Weight::from_parts(0, 2626)) + // Standard Error: 1_330 + .saturating_add(Weight::from_parts(104_027, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity Registrars (r:1 w:0) - // Storage: Identity IdentityOf (r:1 w:1) + /// Storage: Identity Registrars (r:1 w:0) + /// Proof: Identity Registrars (max_values: Some(1), max_size: Some(1141), added: 1636, mode: MaxEncodedLen) + /// Storage: Identity IdentityOf (r:1 w:1) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) /// The range of component `r` is `[1, 19]`. /// The range of component `x` is `[0, 100]`. fn provide_judgement(r: u32, x: u32, ) -> Weight { - // Minimum execution time: 30_156 nanoseconds. - Weight::from_ref_time(29_200_426) - // Standard Error: 7_041 - .saturating_add(Weight::from_ref_time(108_906).saturating_mul(r.into())) - // Standard Error: 1_302 - .saturating_add(Weight::from_ref_time(709_623).saturating_mul(x.into())) + // Proof Size summary in bytes: + // Measured: `445 + r * (57 ±0) + x * (66 ±0)` + // Estimated: `13629` + // Minimum execution time: 23_243_000 picoseconds. + Weight::from_parts(23_272_605, 0) + .saturating_add(Weight::from_parts(0, 13629)) + // Standard Error: 5_108 + .saturating_add(Weight::from_parts(60_698, 0).saturating_mul(r.into())) + // Standard Error: 945 + .saturating_add(Weight::from_parts(752_163, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity SubsOf (r:1 w:1) - // Storage: Identity IdentityOf (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: Identity SuperOf (r:0 w:100) + /// Storage: Identity SubsOf (r:1 w:1) + /// Proof: Identity SubsOf (max_values: None, max_size: Some(3258), added: 5733, mode: MaxEncodedLen) + /// Storage: Identity IdentityOf (r:1 w:1) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Identity SuperOf (r:0 w:100) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) /// The range of component `r` is `[1, 20]`. /// The range of component `s` is `[0, 100]`. /// The range of component `x` is `[0, 100]`. fn kill_identity(r: u32, s: u32, x: u32, ) -> Weight { - // Minimum execution time: 59_119 nanoseconds. - Weight::from_ref_time(44_039_884) - // Standard Error: 7_474 - .saturating_add(Weight::from_ref_time(50_982).saturating_mul(r.into())) - // Standard Error: 1_459 - .saturating_add(Weight::from_ref_time(946_900).saturating_mul(s.into())) - // Standard Error: 1_459 - .saturating_add(Weight::from_ref_time(180_851).saturating_mul(x.into())) + // Proof Size summary in bytes: + // Measured: `676 + r * (5 ±0) + s * (32 ±0) + x * (66 ±0)` + // Estimated: `21319` + // Minimum execution time: 54_234_000 picoseconds. + Weight::from_parts(33_805_119, 0) + .saturating_add(Weight::from_parts(0, 21319)) + // Standard Error: 4_990 + .saturating_add(Weight::from_parts(30_172, 0).saturating_mul(r.into())) + // Standard Error: 974 + .saturating_add(Weight::from_parts(1_089_293, 0).saturating_mul(s.into())) + // Standard Error: 974 + .saturating_add(Weight::from_parts(227_585, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) } - // Storage: Identity IdentityOf (r:1 w:0) - // Storage: Identity SuperOf (r:1 w:1) - // Storage: Identity SubsOf (r:1 w:1) + /// Storage: Identity IdentityOf (r:1 w:0) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) + /// Storage: Identity SuperOf (r:1 w:1) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) + /// Storage: Identity SubsOf (r:1 w:1) + /// Proof: Identity SubsOf (max_values: None, max_size: Some(3258), added: 5733, mode: MaxEncodedLen) /// The range of component `s` is `[0, 99]`. fn add_sub(s: u32, ) -> Weight { - // Minimum execution time: 33_731 nanoseconds. - Weight::from_ref_time(40_625_172) - // Standard Error: 2_022 - .saturating_add(Weight::from_ref_time(80_037).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `475 + s * (36 ±0)` + // Estimated: `21305` + // Minimum execution time: 26_742_000 picoseconds. + Weight::from_parts(31_886_701, 0) + .saturating_add(Weight::from_parts(0, 21305)) + // Standard Error: 1_475 + .saturating_add(Weight::from_parts(62_995, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Identity IdentityOf (r:1 w:0) - // Storage: Identity SuperOf (r:1 w:1) + /// Storage: Identity IdentityOf (r:1 w:0) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) + /// Storage: Identity SuperOf (r:1 w:1) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) /// The range of component `s` is `[1, 100]`. fn rename_sub(s: u32, ) -> Weight { - // Minimum execution time: 14_742 nanoseconds. - Weight::from_ref_time(17_467_279) - // Standard Error: 820 - .saturating_add(Weight::from_ref_time(26_321).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `591 + s * (3 ±0)` + // Estimated: `14582` + // Minimum execution time: 13_510_000 picoseconds. + Weight::from_parts(15_408_702, 0) + .saturating_add(Weight::from_parts(0, 14582)) + // Standard Error: 588 + .saturating_add(Weight::from_parts(17_385, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Identity IdentityOf (r:1 w:0) - // Storage: Identity SuperOf (r:1 w:1) - // Storage: Identity SubsOf (r:1 w:1) + /// Storage: Identity IdentityOf (r:1 w:0) + /// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen) + /// Storage: Identity SuperOf (r:1 w:1) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) + /// Storage: Identity SubsOf (r:1 w:1) + /// Proof: Identity SubsOf (max_values: None, max_size: Some(3258), added: 5733, mode: MaxEncodedLen) /// The range of component `s` is `[1, 100]`. fn remove_sub(s: u32, ) -> Weight { - // Minimum execution time: 37_703 nanoseconds. - Weight::from_ref_time(41_704_866) - // Standard Error: 1_199 - .saturating_add(Weight::from_ref_time(69_966).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `638 + s * (35 ±0)` + // Estimated: `21305` + // Minimum execution time: 30_105_000 picoseconds. + Weight::from_parts(33_643_244, 0) + .saturating_add(Weight::from_parts(0, 21305)) + // Standard Error: 1_076 + .saturating_add(Weight::from_parts(52_521, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Identity SuperOf (r:1 w:1) - // Storage: Identity SubsOf (r:1 w:1) + /// Storage: Identity SuperOf (r:1 w:1) + /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) + /// Storage: Identity SubsOf (r:1 w:1) + /// Proof: Identity SubsOf (max_values: None, max_size: Some(3258), added: 5733, mode: MaxEncodedLen) /// The range of component `s` is `[0, 99]`. fn quit_sub(s: u32, ) -> Weight { - // Minimum execution time: 27_376 nanoseconds. - Weight::from_ref_time(30_933_613) - // Standard Error: 1_271 - .saturating_add(Weight::from_ref_time(67_357).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `564 + s * (37 ±0)` + // Estimated: `10302` + // Minimum execution time: 19_617_000 picoseconds. + Weight::from_parts(21_943_800, 0) + .saturating_add(Weight::from_parts(0, 10302)) + // Standard Error: 959 + .saturating_add(Weight::from_parts(57_187, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } diff --git a/runtime/westend/src/weights/pallet_im_online.rs b/runtime/westend/src/weights/pallet_im_online.rs index d46f8b875e6e..580eaded1aa0 100644 --- a/runtime/westend/src/weights/pallet_im_online.rs +++ b/runtime/westend/src/weights/pallet_im_online.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_im_online` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -44,21 +45,32 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_im_online`. pub struct WeightInfo(PhantomData); impl pallet_im_online::WeightInfo for WeightInfo { - // Storage: Session Validators (r:1 w:0) - // Storage: Session CurrentIndex (r:1 w:0) - // Storage: ImOnline ReceivedHeartbeats (r:1 w:1) - // Storage: ImOnline AuthoredBlocks (r:1 w:0) - // Storage: ImOnline Keys (r:1 w:0) + /// Storage: Session Validators (r:1 w:0) + /// Proof Skipped: Session Validators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Session CurrentIndex (r:1 w:0) + /// Proof Skipped: Session CurrentIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ImOnline Keys (r:1 w:0) + /// Proof: ImOnline Keys (max_values: Some(1), max_size: Some(320002), added: 320497, mode: MaxEncodedLen) + /// Storage: ImOnline ReceivedHeartbeats (r:1 w:1) + /// Proof: ImOnline ReceivedHeartbeats (max_values: None, max_size: Some(10021032), added: 10023507, mode: MaxEncodedLen) + /// Storage: ImOnline AuthoredBlocks (r:1 w:0) + /// Proof: ImOnline AuthoredBlocks (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) /// The range of component `k` is `[1, 1000]`. /// The range of component `e` is `[1, 100]`. fn validate_unsigned_and_then_heartbeat(k: u32, e: u32, ) -> Weight { - // Minimum execution time: 98_091 nanoseconds. - Weight::from_ref_time(77_799_094) - // Standard Error: 361 - .saturating_add(Weight::from_ref_time(26_154).saturating_mul(k.into())) - // Standard Error: 3_639 - .saturating_add(Weight::from_ref_time(336_844).saturating_mul(e.into())) + // Proof Size summary in bytes: + // Measured: `361 + k * (32 ±0)` + // Estimated: `10349676 + k * (64 ±0) + e * (35 ±0)` + // Minimum execution time: 91_179_000 picoseconds. + Weight::from_parts(72_437_018, 0) + .saturating_add(Weight::from_parts(0, 10349676)) + // Standard Error: 280 + .saturating_add(Weight::from_parts(23_055, 0).saturating_mul(k.into())) + // Standard Error: 2_822 + .saturating_add(Weight::from_parts(398_944, 0).saturating_mul(e.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 64).saturating_mul(k.into())) + .saturating_add(Weight::from_parts(0, 35).saturating_mul(e.into())) } } diff --git a/runtime/westend/src/weights/pallet_indices.rs b/runtime/westend/src/weights/pallet_indices.rs index dab3f7a0f414..f108b7d90d28 100644 --- a/runtime/westend/src/weights/pallet_indices.rs +++ b/runtime/westend/src/weights/pallet_indices.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_indices` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -44,40 +45,67 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_indices`. pub struct WeightInfo(PhantomData); impl pallet_indices::WeightInfo for WeightInfo { - // Storage: Indices Accounts (r:1 w:1) + /// Storage: Indices Accounts (r:1 w:1) + /// Proof: Indices Accounts (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) fn claim() -> Weight { - // Minimum execution time: 27_689 nanoseconds. - Weight::from_ref_time(27_938_000) + // Proof Size summary in bytes: + // Measured: `142` + // Estimated: `3534` + // Minimum execution time: 20_790_000 picoseconds. + Weight::from_parts(21_183_000, 0) + .saturating_add(Weight::from_parts(0, 3534)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Indices Accounts (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Indices Accounts (r:1 w:1) + /// Proof: Indices Accounts (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn transfer() -> Weight { - // Minimum execution time: 34_150 nanoseconds. - Weight::from_ref_time(34_750_000) + // Proof Size summary in bytes: + // Measured: `341` + // Estimated: `7127` + // Minimum execution time: 27_029_000 picoseconds. + Weight::from_parts(27_302_000, 0) + .saturating_add(Weight::from_parts(0, 7127)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Indices Accounts (r:1 w:1) + /// Storage: Indices Accounts (r:1 w:1) + /// Proof: Indices Accounts (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) fn free() -> Weight { - // Minimum execution time: 28_404 nanoseconds. - Weight::from_ref_time(28_873_000) + // Proof Size summary in bytes: + // Measured: `238` + // Estimated: `3534` + // Minimum execution time: 21_830_000 picoseconds. + Weight::from_parts(22_172_000, 0) + .saturating_add(Weight::from_parts(0, 3534)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Indices Accounts (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Indices Accounts (r:1 w:1) + /// Proof: Indices Accounts (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn force_transfer() -> Weight { - // Minimum execution time: 28_767 nanoseconds. - Weight::from_ref_time(29_455_000) + // Proof Size summary in bytes: + // Measured: `341` + // Estimated: `7127` + // Minimum execution time: 24_068_000 picoseconds. + Weight::from_parts(24_485_000, 0) + .saturating_add(Weight::from_parts(0, 7127)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Indices Accounts (r:1 w:1) + /// Storage: Indices Accounts (r:1 w:1) + /// Proof: Indices Accounts (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) fn freeze() -> Weight { - // Minimum execution time: 33_923 nanoseconds. - Weight::from_ref_time(34_377_000) + // Proof Size summary in bytes: + // Measured: `238` + // Estimated: `3534` + // Minimum execution time: 24_057_000 picoseconds. + Weight::from_parts(24_556_000, 0) + .saturating_add(Weight::from_parts(0, 3534)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/westend/src/weights/pallet_multisig.rs b/runtime/westend/src/weights/pallet_multisig.rs index 6c1b22e4002f..41fd4cd31551 100644 --- a/runtime/westend/src/weights/pallet_multisig.rs +++ b/runtime/westend/src/weights/pallet_multisig.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_multisig` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -46,80 +47,113 @@ pub struct WeightInfo(PhantomData); impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `z` is `[0, 10000]`. fn as_multi_threshold_1(z: u32, ) -> Weight { - // Minimum execution time: 15_729 nanoseconds. - Weight::from_ref_time(16_089_045) - // Standard Error: 3 - .saturating_add(Weight::from_ref_time(706).saturating_mul(z.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 11_946_000 picoseconds. + Weight::from_parts(12_175_340, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 6 + .saturating_add(Weight::from_parts(468, 0).saturating_mul(z.into())) } - // Storage: Multisig Multisigs (r:1 w:1) - // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) + /// Storage: Multisig Multisigs (r:1 w:1) + /// Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create(s: u32, z: u32, ) -> Weight { - // Minimum execution time: 44_361 nanoseconds. - Weight::from_ref_time(36_207_202) - // Standard Error: 1_031 - .saturating_add(Weight::from_ref_time(91_962).saturating_mul(s.into())) - // Standard Error: 10 - .saturating_add(Weight::from_ref_time(1_751).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(2)) + // Proof Size summary in bytes: + // Measured: `309 + s * (2 ±0)` + // Estimated: `6811` + // Minimum execution time: 35_861_000 picoseconds. + Weight::from_parts(30_580_950, 0) + .saturating_add(Weight::from_parts(0, 6811)) + // Standard Error: 637 + .saturating_add(Weight::from_parts(62_156, 0).saturating_mul(s.into())) + // Standard Error: 6 + .saturating_add(Weight::from_parts(1_208, 0).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Multisig Multisigs (r:1 w:1) + /// Storage: Multisig Multisigs (r:1 w:1) + /// Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve(s: u32, z: u32, ) -> Weight { - // Minimum execution time: 35_346 nanoseconds. - Weight::from_ref_time(28_197_613) - // Standard Error: 640 - .saturating_add(Weight::from_ref_time(84_279).saturating_mul(s.into())) - // Standard Error: 6 - .saturating_add(Weight::from_ref_time(1_675).saturating_mul(z.into())) + // Proof Size summary in bytes: + // Measured: `286` + // Estimated: `6811` + // Minimum execution time: 26_907_000 picoseconds. + Weight::from_parts(21_329_833, 0) + .saturating_add(Weight::from_parts(0, 6811)) + // Standard Error: 416 + .saturating_add(Weight::from_parts(61_251, 0).saturating_mul(s.into())) + // Standard Error: 4 + .saturating_add(Weight::from_parts(1_161, 0).saturating_mul(z.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Multisig Multisigs (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Multisig Multisigs (r:1 w:1) + /// Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_complete(s: u32, z: u32, ) -> Weight { - // Minimum execution time: 49_935 nanoseconds. - Weight::from_ref_time(40_256_343) - // Standard Error: 990 - .saturating_add(Weight::from_ref_time(111_995).saturating_mul(s.into())) - // Standard Error: 9 - .saturating_add(Weight::from_ref_time(1_718).saturating_mul(z.into())) + // Proof Size summary in bytes: + // Measured: `392 + s * (33 ±0)` + // Estimated: `10404` + // Minimum execution time: 41_090_000 picoseconds. + Weight::from_parts(34_147_317, 0) + .saturating_add(Weight::from_parts(0, 10404)) + // Standard Error: 502 + .saturating_add(Weight::from_parts(72_808, 0).saturating_mul(s.into())) + // Standard Error: 4 + .saturating_add(Weight::from_parts(1_216, 0).saturating_mul(z.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Multisig Multisigs (r:1 w:1) - // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) + /// Storage: Multisig Multisigs (r:1 w:1) + /// Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_create(s: u32, ) -> Weight { - // Minimum execution time: 31_975 nanoseconds. - Weight::from_ref_time(34_916_069) - // Standard Error: 1_145 - .saturating_add(Weight::from_ref_time(96_587).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(2)) + // Proof Size summary in bytes: + // Measured: `314 + s * (2 ±0)` + // Estimated: `6811` + // Minimum execution time: 28_261_000 picoseconds. + Weight::from_parts(29_118_127, 0) + .saturating_add(Weight::from_parts(0, 6811)) + // Standard Error: 651 + .saturating_add(Weight::from_parts(65_508, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Multisig Multisigs (r:1 w:1) + /// Storage: Multisig Multisigs (r:1 w:1) + /// Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_approve(s: u32, ) -> Weight { - // Minimum execution time: 24_180 nanoseconds. - Weight::from_ref_time(25_785_712) - // Standard Error: 698 - .saturating_add(Weight::from_ref_time(91_940).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `286` + // Estimated: `6811` + // Minimum execution time: 18_462_000 picoseconds. + Weight::from_parts(19_616_897, 0) + .saturating_add(Weight::from_parts(0, 6811)) + // Standard Error: 486 + .saturating_add(Weight::from_parts(61_566, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Multisig Multisigs (r:1 w:1) + /// Storage: Multisig Multisigs (r:1 w:1) + /// Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) /// The range of component `s` is `[2, 100]`. fn cancel_as_multi(s: u32, ) -> Weight { - // Minimum execution time: 34_417 nanoseconds. - Weight::from_ref_time(36_684_842) - // Standard Error: 914 - .saturating_add(Weight::from_ref_time(89_800).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `458 + s * (1 ±0)` + // Estimated: `6811` + // Minimum execution time: 28_788_000 picoseconds. + Weight::from_parts(30_108_689, 0) + .saturating_add(Weight::from_parts(0, 6811)) + // Standard Error: 700 + .saturating_add(Weight::from_parts(67_165, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/westend/src/weights/pallet_nomination_pools.rs b/runtime/westend/src/weights/pallet_nomination_pools.rs index c205531c6e2d..dfe4d5af1897 100644 --- a/runtime/westend/src/weights/pallet_nomination_pools.rs +++ b/runtime/westend/src/weights/pallet_nomination_pools.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_nomination_pools` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -44,246 +45,538 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_nomination_pools`. pub struct WeightInfo(PhantomData); impl pallet_nomination_pools::WeightInfo for WeightInfo { - // Storage: NominationPools MinJoinBond (r:1 w:0) - // Storage: NominationPools PoolMembers (r:1 w:1) - // Storage: NominationPools BondedPools (r:1 w:1) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: NominationPools RewardPools (r:1 w:1) - // Storage: System Account (r:2 w:1) - // Storage: NominationPools MaxPoolMembersPerPool (r:1 w:0) - // Storage: NominationPools MaxPoolMembers (r:1 w:0) - // Storage: NominationPools CounterForPoolMembers (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: VoterList ListNodes (r:3 w:3) - // Storage: VoterList ListBags (r:2 w:2) + /// Storage: NominationPools MinJoinBond (r:1 w:0) + /// Proof: NominationPools MinJoinBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: NominationPools PoolMembers (r:1 w:1) + /// Proof: NominationPools PoolMembers (max_values: None, max_size: Some(717), added: 3192, mode: MaxEncodedLen) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: NominationPools RewardPools (r:1 w:1) + /// Proof: NominationPools RewardPools (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen) + /// Storage: NominationPools GlobalMaxCommission (r:1 w:0) + /// Proof: NominationPools GlobalMaxCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:2 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: NominationPools MaxPoolMembersPerPool (r:1 w:0) + /// Proof: NominationPools MaxPoolMembersPerPool (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools MaxPoolMembers (r:1 w:0) + /// Proof: NominationPools MaxPoolMembers (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForPoolMembers (r:1 w:1) + /// Proof: NominationPools CounterForPoolMembers (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:3 w:3) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:2 w:2) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn join() -> Weight { - // Minimum execution time: 146_592 nanoseconds. - Weight::from_ref_time(147_983_000) - .saturating_add(T::DbWeight::get().reads(17)) + // Proof Size summary in bytes: + // Measured: `3281` + // Estimated: `52915` + // Minimum execution time: 154_312_000 picoseconds. + Weight::from_parts(156_224_000, 0) + .saturating_add(Weight::from_parts(0, 52915)) + .saturating_add(T::DbWeight::get().reads(18)) .saturating_add(T::DbWeight::get().writes(12)) } - // Storage: NominationPools PoolMembers (r:1 w:1) - // Storage: NominationPools BondedPools (r:1 w:1) - // Storage: NominationPools RewardPools (r:1 w:1) - // Storage: System Account (r:3 w:2) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: VoterList ListNodes (r:3 w:3) - // Storage: VoterList ListBags (r:2 w:2) + /// Storage: NominationPools PoolMembers (r:1 w:1) + /// Proof: NominationPools PoolMembers (max_values: None, max_size: Some(717), added: 3192, mode: MaxEncodedLen) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: NominationPools RewardPools (r:1 w:1) + /// Proof: NominationPools RewardPools (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen) + /// Storage: NominationPools GlobalMaxCommission (r:1 w:0) + /// Proof: NominationPools GlobalMaxCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:3 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:3 w:3) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:2 w:2) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn bond_extra_transfer() -> Weight { - // Minimum execution time: 144_377 nanoseconds. - Weight::from_ref_time(145_658_000) - .saturating_add(T::DbWeight::get().reads(14)) + // Proof Size summary in bytes: + // Measured: `3291` + // Estimated: `49550` + // Minimum execution time: 152_354_000 picoseconds. + Weight::from_parts(153_461_000, 0) + .saturating_add(Weight::from_parts(0, 49550)) + .saturating_add(T::DbWeight::get().reads(15)) .saturating_add(T::DbWeight::get().writes(12)) } - // Storage: NominationPools PoolMembers (r:1 w:1) - // Storage: NominationPools BondedPools (r:1 w:1) - // Storage: NominationPools RewardPools (r:1 w:1) - // Storage: System Account (r:3 w:3) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: VoterList ListNodes (r:2 w:2) - // Storage: VoterList ListBags (r:2 w:2) - fn bond_extra_reward() -> Weight { - // Minimum execution time: 148_710 nanoseconds. - Weight::from_ref_time(151_603_000) - .saturating_add(T::DbWeight::get().reads(13)) + /// Storage: NominationPools ClaimPermissions (r:1 w:0) + /// Proof: NominationPools ClaimPermissions (max_values: None, max_size: Some(41), added: 2516, mode: MaxEncodedLen) + /// Storage: NominationPools PoolMembers (r:1 w:1) + /// Proof: NominationPools PoolMembers (max_values: None, max_size: Some(717), added: 3192, mode: MaxEncodedLen) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: NominationPools RewardPools (r:1 w:1) + /// Proof: NominationPools RewardPools (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen) + /// Storage: NominationPools GlobalMaxCommission (r:1 w:0) + /// Proof: NominationPools GlobalMaxCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:3 w:3) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:2 w:2) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:2 w:2) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + fn bond_extra_other() -> Weight { + // Proof Size summary in bytes: + // Measured: `3186` + // Estimated: `50427` + // Minimum execution time: 163_952_000 picoseconds. + Weight::from_parts(164_854_000, 0) + .saturating_add(Weight::from_parts(0, 50427)) + .saturating_add(T::DbWeight::get().reads(15)) .saturating_add(T::DbWeight::get().writes(12)) } - // Storage: NominationPools PoolMembers (r:1 w:1) - // Storage: NominationPools BondedPools (r:1 w:1) - // Storage: NominationPools RewardPools (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: NominationPools ClaimPermissions (r:1 w:0) + /// Proof: NominationPools ClaimPermissions (max_values: None, max_size: Some(41), added: 2516, mode: MaxEncodedLen) + /// Storage: NominationPools PoolMembers (r:1 w:1) + /// Proof: NominationPools PoolMembers (max_values: None, max_size: Some(717), added: 3192, mode: MaxEncodedLen) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: NominationPools RewardPools (r:1 w:1) + /// Proof: NominationPools RewardPools (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen) + /// Storage: NominationPools GlobalMaxCommission (r:1 w:0) + /// Proof: NominationPools GlobalMaxCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn claim_payout() -> Weight { - // Minimum execution time: 57_128 nanoseconds. - Weight::from_ref_time(58_023_000) - .saturating_add(T::DbWeight::get().reads(4)) + // Proof Size summary in bytes: + // Measured: `1137` + // Estimated: `20012` + // Minimum execution time: 58_997_000 picoseconds. + Weight::from_parts(60_025_000, 0) + .saturating_add(Weight::from_parts(0, 20012)) + .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: NominationPools PoolMembers (r:1 w:1) - // Storage: NominationPools BondedPools (r:1 w:1) - // Storage: NominationPools RewardPools (r:1 w:1) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: System Account (r:2 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Staking Nominators (r:1 w:0) - // Storage: Staking MinNominatorBond (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) - // Storage: VoterList ListNodes (r:3 w:3) - // Storage: VoterList ListBags (r:2 w:2) - // Storage: NominationPools SubPoolsStorage (r:1 w:1) - // Storage: NominationPools CounterForSubPoolsStorage (r:1 w:1) + /// Storage: NominationPools PoolMembers (r:1 w:1) + /// Proof: NominationPools PoolMembers (max_values: None, max_size: Some(717), added: 3192, mode: MaxEncodedLen) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: NominationPools RewardPools (r:1 w:1) + /// Proof: NominationPools RewardPools (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: NominationPools GlobalMaxCommission (r:1 w:0) + /// Proof: NominationPools GlobalMaxCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:2 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:0) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: Staking MinNominatorBond (r:1 w:0) + /// Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:3 w:3) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:2 w:2) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: NominationPools SubPoolsStorage (r:1 w:1) + /// Proof: NominationPools SubPoolsStorage (max_values: None, max_size: Some(261), added: 2736, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForSubPoolsStorage (r:1 w:1) + /// Proof: NominationPools CounterForSubPoolsStorage (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn unbond() -> Weight { - // Minimum execution time: 147_189 nanoseconds. - Weight::from_ref_time(148_361_000) - .saturating_add(T::DbWeight::get().reads(18)) + // Proof Size summary in bytes: + // Measured: `3560` + // Estimated: `59175` + // Minimum execution time: 157_363_000 picoseconds. + Weight::from_parts(158_903_000, 0) + .saturating_add(Weight::from_parts(0, 59175)) + .saturating_add(T::DbWeight::get().reads(19)) .saturating_add(T::DbWeight::get().writes(13)) } - // Storage: NominationPools BondedPools (r:1 w:0) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) + /// Storage: NominationPools BondedPools (r:1 w:0) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `s` is `[0, 100]`. fn pool_withdraw_unbonded(s: u32, ) -> Weight { - // Minimum execution time: 58_826 nanoseconds. - Weight::from_ref_time(60_311_353) - // Standard Error: 1_105 - .saturating_add(Weight::from_ref_time(18_024).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `1614` + // Estimated: `18031` + // Minimum execution time: 52_740_000 picoseconds. + Weight::from_parts(54_643_573, 0) + .saturating_add(Weight::from_parts(0, 18031)) + // Standard Error: 1_401 + .saturating_add(Weight::from_parts(3_342, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: NominationPools PoolMembers (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: NominationPools BondedPools (r:1 w:1) - // Storage: NominationPools SubPoolsStorage (r:1 w:1) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: NominationPools CounterForPoolMembers (r:1 w:1) + /// Storage: NominationPools PoolMembers (r:1 w:1) + /// Proof: NominationPools PoolMembers (max_values: None, max_size: Some(717), added: 3192, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: NominationPools SubPoolsStorage (r:1 w:1) + /// Proof: NominationPools SubPoolsStorage (max_values: None, max_size: Some(261), added: 2736, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForPoolMembers (r:1 w:1) + /// Proof: NominationPools CounterForPoolMembers (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools ClaimPermissions (r:0 w:1) + /// Proof: NominationPools ClaimPermissions (max_values: None, max_size: Some(41), added: 2516, mode: MaxEncodedLen) /// The range of component `s` is `[0, 100]`. fn withdraw_unbonded_update(s: u32, ) -> Weight { - // Minimum execution time: 101_092 nanoseconds. - Weight::from_ref_time(102_915_910) - // Standard Error: 1_355 - .saturating_add(Weight::from_ref_time(12_954).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `2042` + // Estimated: `31021` + // Minimum execution time: 101_534_000 picoseconds. + Weight::from_parts(103_720_636, 0) + .saturating_add(Weight::from_parts(0, 31021)) + // Standard Error: 1_467 + .saturating_add(Weight::from_parts(24_504, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(9)) - .saturating_add(T::DbWeight::get().writes(7)) + .saturating_add(T::DbWeight::get().writes(8)) } - // Storage: NominationPools PoolMembers (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: NominationPools BondedPools (r:1 w:1) - // Storage: NominationPools SubPoolsStorage (r:1 w:1) - // Storage: Staking Bonded (r:1 w:1) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking SlashingSpans (r:1 w:0) - // Storage: Staking Validators (r:1 w:0) - // Storage: Staking Nominators (r:1 w:0) - // Storage: System Account (r:2 w:2) - // Storage: Balances Locks (r:1 w:1) - // Storage: NominationPools CounterForPoolMembers (r:1 w:1) - // Storage: NominationPools ReversePoolIdLookup (r:1 w:1) - // Storage: NominationPools CounterForReversePoolIdLookup (r:1 w:1) - // Storage: NominationPools RewardPools (r:1 w:1) - // Storage: NominationPools CounterForRewardPools (r:1 w:1) - // Storage: NominationPools CounterForSubPoolsStorage (r:1 w:1) - // Storage: NominationPools Metadata (r:1 w:1) - // Storage: NominationPools CounterForBondedPools (r:1 w:1) - // Storage: Staking Payee (r:0 w:1) + /// Storage: NominationPools PoolMembers (r:1 w:1) + /// Proof: NominationPools PoolMembers (max_values: None, max_size: Some(717), added: 3192, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: NominationPools SubPoolsStorage (r:1 w:1) + /// Proof: NominationPools SubPoolsStorage (max_values: None, max_size: Some(261), added: 2736, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:1) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking SlashingSpans (r:1 w:0) + /// Proof Skipped: Staking SlashingSpans (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking Validators (r:1 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:0) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: System Account (r:2 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForPoolMembers (r:1 w:1) + /// Proof: NominationPools CounterForPoolMembers (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools ReversePoolIdLookup (r:1 w:1) + /// Proof: NominationPools ReversePoolIdLookup (max_values: None, max_size: Some(44), added: 2519, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForReversePoolIdLookup (r:1 w:1) + /// Proof: NominationPools CounterForReversePoolIdLookup (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools RewardPools (r:1 w:1) + /// Proof: NominationPools RewardPools (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForRewardPools (r:1 w:1) + /// Proof: NominationPools CounterForRewardPools (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForSubPoolsStorage (r:1 w:1) + /// Proof: NominationPools CounterForSubPoolsStorage (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools Metadata (r:1 w:1) + /// Proof: NominationPools Metadata (max_values: None, max_size: Some(270), added: 2745, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForBondedPools (r:1 w:1) + /// Proof: NominationPools CounterForBondedPools (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:0 w:1) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + /// Storage: NominationPools ClaimPermissions (r:0 w:1) + /// Proof: NominationPools ClaimPermissions (max_values: None, max_size: Some(41), added: 2516, mode: MaxEncodedLen) /// The range of component `s` is `[0, 100]`. fn withdraw_unbonded_kill(s: u32, ) -> Weight { - // Minimum execution time: 150_986 nanoseconds. - Weight::from_ref_time(152_731_576) - // Standard Error: 3_598 - .saturating_add(Weight::from_ref_time(25_042).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `2398` + // Estimated: `63777` + // Minimum execution time: 160_704_000 picoseconds. + Weight::from_parts(163_586_296, 0) + .saturating_add(Weight::from_parts(0, 63777)) + // Standard Error: 2_517 + .saturating_add(Weight::from_parts(1_718, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(20)) - .saturating_add(T::DbWeight::get().writes(17)) + .saturating_add(T::DbWeight::get().writes(18)) } - // Storage: NominationPools LastPoolId (r:1 w:1) - // Storage: Staking MinNominatorBond (r:1 w:0) - // Storage: NominationPools MinCreateBond (r:1 w:0) - // Storage: NominationPools MinJoinBond (r:1 w:0) - // Storage: NominationPools MaxPools (r:1 w:0) - // Storage: NominationPools CounterForBondedPools (r:1 w:1) - // Storage: NominationPools PoolMembers (r:1 w:1) - // Storage: NominationPools MaxPoolMembersPerPool (r:1 w:0) - // Storage: NominationPools MaxPoolMembers (r:1 w:0) - // Storage: NominationPools CounterForPoolMembers (r:1 w:1) - // Storage: System Account (r:2 w:2) - // Storage: Staking Bonded (r:1 w:1) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) - // Storage: NominationPools RewardPools (r:1 w:1) - // Storage: NominationPools CounterForRewardPools (r:1 w:1) - // Storage: NominationPools ReversePoolIdLookup (r:1 w:1) - // Storage: NominationPools CounterForReversePoolIdLookup (r:1 w:1) - // Storage: NominationPools BondedPools (r:1 w:1) - // Storage: Staking Payee (r:0 w:1) + /// Storage: NominationPools LastPoolId (r:1 w:1) + /// Proof: NominationPools LastPoolId (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking MinNominatorBond (r:1 w:0) + /// Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: NominationPools MinCreateBond (r:1 w:0) + /// Proof: NominationPools MinCreateBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: NominationPools MinJoinBond (r:1 w:0) + /// Proof: NominationPools MinJoinBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: NominationPools MaxPools (r:1 w:0) + /// Proof: NominationPools MaxPools (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForBondedPools (r:1 w:1) + /// Proof: NominationPools CounterForBondedPools (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools PoolMembers (r:1 w:1) + /// Proof: NominationPools PoolMembers (max_values: None, max_size: Some(717), added: 3192, mode: MaxEncodedLen) + /// Storage: NominationPools MaxPoolMembersPerPool (r:1 w:0) + /// Proof: NominationPools MaxPoolMembersPerPool (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools MaxPoolMembers (r:1 w:0) + /// Proof: NominationPools MaxPoolMembers (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForPoolMembers (r:1 w:1) + /// Proof: NominationPools CounterForPoolMembers (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:2 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:1) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: NominationPools RewardPools (r:1 w:1) + /// Proof: NominationPools RewardPools (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForRewardPools (r:1 w:1) + /// Proof: NominationPools CounterForRewardPools (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools ReversePoolIdLookup (r:1 w:1) + /// Proof: NominationPools ReversePoolIdLookup (max_values: None, max_size: Some(44), added: 2519, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForReversePoolIdLookup (r:1 w:1) + /// Proof: NominationPools CounterForReversePoolIdLookup (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:0 w:1) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) fn create() -> Weight { - // Minimum execution time: 132_988 nanoseconds. - Weight::from_ref_time(135_480_000) + // Proof Size summary in bytes: + // Measured: `1222` + // Estimated: `51890` + // Minimum execution time: 140_215_000 picoseconds. + Weight::from_parts(141_417_000, 0) + .saturating_add(Weight::from_parts(0, 51890)) .saturating_add(T::DbWeight::get().reads(21)) .saturating_add(T::DbWeight::get().writes(15)) } - // Storage: NominationPools BondedPools (r:1 w:0) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:0) - // Storage: Staking MinNominatorBond (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) - // Storage: Staking MaxNominatorsCount (r:1 w:0) - // Storage: Staking Validators (r:2 w:0) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: VoterList ListNodes (r:1 w:1) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) - // Storage: Staking CounterForNominators (r:1 w:1) + /// Storage: NominationPools BondedPools (r:1 w:0) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking MinNominatorBond (r:1 w:0) + /// Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:1) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: Staking MaxNominatorsCount (r:1 w:0) + /// Proof: Staking MaxNominatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:17 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:1 w:1) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking CounterForNominators (r:1 w:1) + /// Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) /// The range of component `n` is `[1, 16]`. fn nominate(n: u32, ) -> Weight { - // Minimum execution time: 65_850 nanoseconds. - Weight::from_ref_time(66_406_389) - // Standard Error: 7_339 - .saturating_add(Weight::from_ref_time(1_099_535).saturating_mul(n.into())) + // Proof Size summary in bytes: + // Measured: `1779` + // Estimated: `33934 + n * (2520 ±0)` + // Minimum execution time: 65_371_000 picoseconds. + Weight::from_parts(65_488_837, 0) + .saturating_add(Weight::from_parts(0, 33934)) + // Standard Error: 8_064 + .saturating_add(Weight::from_parts(1_355_723, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(12)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(5)) + .saturating_add(Weight::from_parts(0, 2520).saturating_mul(n.into())) } - // Storage: NominationPools BondedPools (r:1 w:1) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:0) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) fn set_state() -> Weight { - // Minimum execution time: 40_888 nanoseconds. - Weight::from_ref_time(41_373_000) + // Proof Size summary in bytes: + // Measured: `1367` + // Estimated: `11778` + // Minimum execution time: 36_303_000 picoseconds. + Weight::from_parts(36_810_000, 0) + .saturating_add(Weight::from_parts(0, 11778)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: NominationPools BondedPools (r:1 w:0) - // Storage: NominationPools Metadata (r:1 w:1) - // Storage: NominationPools CounterForMetadata (r:1 w:1) + /// Storage: NominationPools BondedPools (r:1 w:0) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: NominationPools Metadata (r:1 w:1) + /// Proof: NominationPools Metadata (max_values: None, max_size: Some(270), added: 2745, mode: MaxEncodedLen) + /// Storage: NominationPools CounterForMetadata (r:1 w:1) + /// Proof: NominationPools CounterForMetadata (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) /// The range of component `n` is `[1, 256]`. fn set_metadata(n: u32, ) -> Weight { - // Minimum execution time: 16_147 nanoseconds. - Weight::from_ref_time(16_753_550) - // Standard Error: 124 - .saturating_add(Weight::from_ref_time(1_891).saturating_mul(n.into())) + // Proof Size summary in bytes: + // Measured: `497` + // Estimated: `8909` + // Minimum execution time: 14_287_000 picoseconds. + Weight::from_parts(14_970_241, 0) + .saturating_add(Weight::from_parts(0, 8909)) + // Standard Error: 123 + .saturating_add(Weight::from_parts(806, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: NominationPools MinJoinBond (r:0 w:1) - // Storage: NominationPools MaxPoolMembers (r:0 w:1) - // Storage: NominationPools MaxPoolMembersPerPool (r:0 w:1) - // Storage: NominationPools MinCreateBond (r:0 w:1) - // Storage: NominationPools MaxPools (r:0 w:1) + /// Storage: NominationPools MinJoinBond (r:0 w:1) + /// Proof: NominationPools MinJoinBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: NominationPools MaxPoolMembers (r:0 w:1) + /// Proof: NominationPools MaxPoolMembers (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools MaxPoolMembersPerPool (r:0 w:1) + /// Proof: NominationPools MaxPoolMembersPerPool (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools MinCreateBond (r:0 w:1) + /// Proof: NominationPools MinCreateBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: NominationPools GlobalMaxCommission (r:0 w:1) + /// Proof: NominationPools GlobalMaxCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: NominationPools MaxPools (r:0 w:1) + /// Proof: NominationPools MaxPools (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn set_configs() -> Weight { - // Minimum execution time: 6_720 nanoseconds. - Weight::from_ref_time(7_070_000) - .saturating_add(T::DbWeight::get().writes(5)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 6_120_000 picoseconds. + Weight::from_parts(6_585_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: NominationPools BondedPools (r:1 w:1) + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) fn update_roles() -> Weight { - // Minimum execution time: 26_867 nanoseconds. - Weight::from_ref_time(27_243_000) + // Proof Size summary in bytes: + // Measured: `497` + // Estimated: `3685` + // Minimum execution time: 20_088_000 picoseconds. + Weight::from_parts(20_451_000, 0) + .saturating_add(Weight::from_parts(0, 3685)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: NominationPools BondedPools (r:1 w:0) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:0) - // Storage: Staking Validators (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) - // Storage: Staking CounterForNominators (r:1 w:1) - // Storage: VoterList ListNodes (r:1 w:1) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) + /// Storage: NominationPools BondedPools (r:1 w:0) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:1 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:1) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: Staking CounterForNominators (r:1 w:1) + /// Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:1 w:1) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn chill() -> Weight { - // Minimum execution time: 65_683 nanoseconds. - Weight::from_ref_time(66_860_000) + // Proof Size summary in bytes: + // Measured: `1942` + // Estimated: `29455` + // Minimum execution time: 63_514_000 picoseconds. + Weight::from_parts(64_160_000, 0) + .saturating_add(Weight::from_parts(0, 29455)) .saturating_add(T::DbWeight::get().reads(9)) .saturating_add(T::DbWeight::get().writes(5)) } + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: NominationPools RewardPools (r:1 w:1) + /// Proof: NominationPools RewardPools (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen) + /// Storage: NominationPools GlobalMaxCommission (r:1 w:0) + /// Proof: NominationPools GlobalMaxCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:0) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + fn set_commission() -> Weight { + // Proof Size summary in bytes: + // Measured: `736` + // Estimated: `12324` + // Minimum execution time: 33_264_000 picoseconds. + Weight::from_parts(33_633_000, 0) + .saturating_add(Weight::from_parts(0, 12324)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(2)) + } + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + fn set_commission_max() -> Weight { + // Proof Size summary in bytes: + // Measured: `537` + // Estimated: `3685` + // Minimum execution time: 19_288_000 picoseconds. + Weight::from_parts(19_539_000, 0) + .saturating_add(Weight::from_parts(0, 3685)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: NominationPools BondedPools (r:1 w:1) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + fn set_commission_change_rate() -> Weight { + // Proof Size summary in bytes: + // Measured: `497` + // Estimated: `3685` + // Minimum execution time: 20_076_000 picoseconds. + Weight::from_parts(20_436_000, 0) + .saturating_add(Weight::from_parts(0, 3685)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: NominationPools PoolMembers (r:1 w:0) + /// Proof: NominationPools PoolMembers (max_values: None, max_size: Some(717), added: 3192, mode: MaxEncodedLen) + /// Storage: NominationPools ClaimPermissions (r:1 w:1) + /// Proof: NominationPools ClaimPermissions (max_values: None, max_size: Some(41), added: 2516, mode: MaxEncodedLen) + fn set_claim_permission() -> Weight { + // Proof Size summary in bytes: + // Measured: `508` + // Estimated: `7688` + // Minimum execution time: 14_763_000 picoseconds. + Weight::from_parts(14_964_000, 0) + .saturating_add(Weight::from_parts(0, 7688)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: NominationPools BondedPools (r:1 w:0) + /// Proof: NominationPools BondedPools (max_values: None, max_size: Some(220), added: 2695, mode: MaxEncodedLen) + /// Storage: NominationPools RewardPools (r:1 w:1) + /// Proof: NominationPools RewardPools (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen) + /// Storage: NominationPools GlobalMaxCommission (r:1 w:0) + /// Proof: NominationPools GlobalMaxCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + fn claim_commission() -> Weight { + // Proof Size summary in bytes: + // Measured: `934` + // Estimated: `12324` + // Minimum execution time: 46_959_000 picoseconds. + Weight::from_parts(48_242_000, 0) + .saturating_add(Weight::from_parts(0, 12324)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(2)) + } } diff --git a/runtime/westend/src/weights/pallet_preimage.rs b/runtime/westend/src/weights/pallet_preimage.rs index cbb9b5364399..8179ab43fcef 100644 --- a/runtime/westend/src/weights/pallet_preimage.rs +++ b/runtime/westend/src/weights/pallet_preimage.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_preimage` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -44,102 +45,168 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_preimage`. pub struct WeightInfo(PhantomData); impl pallet_preimage::WeightInfo for WeightInfo { - // Storage: Preimage StatusFor (r:1 w:1) - // Storage: Preimage PreimageFor (r:0 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Preimage PreimageFor (r:0 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) /// The range of component `s` is `[0, 4194304]`. fn note_preimage(s: u32, ) -> Weight { - // Minimum execution time: 31_504 nanoseconds. - Weight::from_ref_time(31_935_000) + // Proof Size summary in bytes: + // Measured: `181` + // Estimated: `3556` + // Minimum execution time: 25_709_000 picoseconds. + Weight::from_parts(25_961_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(2_485).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(1_965, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Preimage StatusFor (r:1 w:1) - // Storage: Preimage PreimageFor (r:0 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Preimage PreimageFor (r:0 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) /// The range of component `s` is `[0, 4194304]`. fn note_requested_preimage(s: u32, ) -> Weight { - // Minimum execution time: 22_593 nanoseconds. - Weight::from_ref_time(23_018_000) + // Proof Size summary in bytes: + // Measured: `144` + // Estimated: `3556` + // Minimum execution time: 16_760_000 picoseconds. + Weight::from_parts(16_864_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(2_483).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(1_964, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Preimage StatusFor (r:1 w:1) - // Storage: Preimage PreimageFor (r:0 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Preimage PreimageFor (r:0 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) /// The range of component `s` is `[0, 4194304]`. fn note_no_deposit_preimage(s: u32, ) -> Weight { - // Minimum execution time: 20_815 nanoseconds. - Weight::from_ref_time(21_064_000) + // Proof Size summary in bytes: + // Measured: `144` + // Estimated: `3556` + // Minimum execution time: 15_781_000 picoseconds. + Weight::from_parts(16_028_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(2_482).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(1_963, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Preimage StatusFor (r:1 w:1) - // Storage: Preimage PreimageFor (r:0 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Preimage PreimageFor (r:0 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) fn unnote_preimage() -> Weight { - // Minimum execution time: 41_697 nanoseconds. - Weight::from_ref_time(43_334_000) + // Proof Size summary in bytes: + // Measured: `327` + // Estimated: `3556` + // Minimum execution time: 33_179_000 picoseconds. + Weight::from_parts(34_017_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Preimage StatusFor (r:1 w:1) - // Storage: Preimage PreimageFor (r:0 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Preimage PreimageFor (r:0 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) fn unnote_no_deposit_preimage() -> Weight { - // Minimum execution time: 27_784 nanoseconds. - Weight::from_ref_time(29_673_000) + // Proof Size summary in bytes: + // Measured: `182` + // Estimated: `3556` + // Minimum execution time: 21_656_000 picoseconds. + Weight::from_parts(23_099_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn request_preimage() -> Weight { - // Minimum execution time: 28_498 nanoseconds. - Weight::from_ref_time(37_154_000) + // Proof Size summary in bytes: + // Measured: `226` + // Estimated: `3556` + // Minimum execution time: 19_328_000 picoseconds. + Weight::from_parts(20_463_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn request_no_deposit_preimage() -> Weight { - // Minimum execution time: 18_137 nanoseconds. - Weight::from_ref_time(23_421_000) + // Proof Size summary in bytes: + // Measured: `182` + // Estimated: `3556` + // Minimum execution time: 12_354_000 picoseconds. + Weight::from_parts(13_294_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn request_unnoted_preimage() -> Weight { - // Minimum execution time: 22_082 nanoseconds. - Weight::from_ref_time(24_619_000) + // Proof Size summary in bytes: + // Measured: `80` + // Estimated: `3556` + // Minimum execution time: 13_608_000 picoseconds. + Weight::from_parts(14_055_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn request_requested_preimage() -> Weight { - // Minimum execution time: 10_382 nanoseconds. - Weight::from_ref_time(10_809_000) + // Proof Size summary in bytes: + // Measured: `144` + // Estimated: `3556` + // Minimum execution time: 8_665_000 picoseconds. + Weight::from_parts(9_081_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Preimage StatusFor (r:1 w:1) - // Storage: Preimage PreimageFor (r:0 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Preimage PreimageFor (r:0 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) fn unrequest_preimage() -> Weight { - // Minimum execution time: 32_096 nanoseconds. - Weight::from_ref_time(37_249_000) + // Proof Size summary in bytes: + // Measured: `182` + // Estimated: `3556` + // Minimum execution time: 19_930_000 picoseconds. + Weight::from_parts(20_442_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn unrequest_unnoted_preimage() -> Weight { - // Minimum execution time: 10_427 nanoseconds. - Weight::from_ref_time(11_181_000) + // Proof Size summary in bytes: + // Measured: `144` + // Estimated: `3556` + // Minimum execution time: 8_668_000 picoseconds. + Weight::from_parts(8_889_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn unrequest_multi_referenced_preimage() -> Weight { - // Minimum execution time: 9_917 nanoseconds. - Weight::from_ref_time(10_538_000) + // Proof Size summary in bytes: + // Measured: `144` + // Estimated: `3556` + // Minimum execution time: 8_461_000 picoseconds. + Weight::from_parts(8_830_000, 0) + .saturating_add(Weight::from_parts(0, 3556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/westend/src/weights/pallet_proxy.rs b/runtime/westend/src/weights/pallet_proxy.rs index b48ceec5f560..007b3988bc52 100644 --- a/runtime/westend/src/weights/pallet_proxy.rs +++ b/runtime/westend/src/weights/pallet_proxy.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_proxy` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -44,121 +45,172 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_proxy`. pub struct WeightInfo(PhantomData); impl pallet_proxy::WeightInfo for WeightInfo { - // Storage: Proxy Proxies (r:1 w:0) + /// Storage: Proxy Proxies (r:1 w:0) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) /// The range of component `p` is `[1, 31]`. fn proxy(p: u32, ) -> Weight { - // Minimum execution time: 21_399 nanoseconds. - Weight::from_ref_time(22_441_170) - // Standard Error: 1_457 - .saturating_add(Weight::from_ref_time(46_573).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `227 + p * (37 ±0)` + // Estimated: `4706` + // Minimum execution time: 15_306_000 picoseconds. + Weight::from_parts(15_970_517, 0) + .saturating_add(Weight::from_parts(0, 4706)) + // Standard Error: 1_200 + .saturating_add(Weight::from_parts(35_584, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) } - // Storage: Proxy Proxies (r:1 w:0) - // Storage: Proxy Announcements (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Proxy Proxies (r:1 w:0) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) + /// Storage: Proxy Announcements (r:1 w:1) + /// Proof: Proxy Announcements (max_values: None, max_size: Some(2233), added: 4708, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn proxy_announced(a: u32, p: u32, ) -> Weight { - // Minimum execution time: 39_895 nanoseconds. - Weight::from_ref_time(40_556_198) - // Standard Error: 2_058 - .saturating_add(Weight::from_ref_time(125_126).saturating_mul(a.into())) - // Standard Error: 2_126 - .saturating_add(Weight::from_ref_time(34_236).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `554 + a * (68 ±0) + p * (37 ±0)` + // Estimated: `13997` + // Minimum execution time: 36_735_000 picoseconds. + Weight::from_parts(38_433_418, 0) + .saturating_add(Weight::from_parts(0, 13997)) + // Standard Error: 4_494 + .saturating_add(Weight::from_parts(112_943, 0).saturating_mul(a.into())) + // Standard Error: 4_643 + .saturating_add(Weight::from_parts(12_633, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Proxy Announcements (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Proxy Announcements (r:1 w:1) + /// Proof: Proxy Announcements (max_values: None, max_size: Some(2233), added: 4708, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. - fn remove_announcement(a: u32, p: u32, ) -> Weight { - // Minimum execution time: 27_567 nanoseconds. - Weight::from_ref_time(28_835_169) - // Standard Error: 1_771 - .saturating_add(Weight::from_ref_time(128_829).saturating_mul(a.into())) - // Standard Error: 1_830 - .saturating_add(Weight::from_ref_time(5_270).saturating_mul(p.into())) + fn remove_announcement(a: u32, _p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `469 + a * (68 ±0)` + // Estimated: `9291` + // Minimum execution time: 21_549_000 picoseconds. + Weight::from_parts(22_450_104, 0) + .saturating_add(Weight::from_parts(0, 9291)) + // Standard Error: 1_348 + .saturating_add(Weight::from_parts(140_391, 0).saturating_mul(a.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Proxy Announcements (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Proxy Announcements (r:1 w:1) + /// Proof: Proxy Announcements (max_values: None, max_size: Some(2233), added: 4708, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. - fn reject_announcement(a: u32, p: u32, ) -> Weight { - // Minimum execution time: 27_682 nanoseconds. - Weight::from_ref_time(28_886_650) - // Standard Error: 1_745 - .saturating_add(Weight::from_ref_time(130_446).saturating_mul(a.into())) - // Standard Error: 1_803 - .saturating_add(Weight::from_ref_time(4_083).saturating_mul(p.into())) + fn reject_announcement(a: u32, _p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `469 + a * (68 ±0)` + // Estimated: `9291` + // Minimum execution time: 21_050_000 picoseconds. + Weight::from_parts(22_414_628, 0) + .saturating_add(Weight::from_parts(0, 9291)) + // Standard Error: 1_435 + .saturating_add(Weight::from_parts(143_522, 0).saturating_mul(a.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Proxy Proxies (r:1 w:0) - // Storage: Proxy Announcements (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Proxy Proxies (r:1 w:0) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) + /// Storage: Proxy Announcements (r:1 w:1) + /// Proof: Proxy Announcements (max_values: None, max_size: Some(2233), added: 4708, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn announce(a: u32, p: u32, ) -> Weight { - // Minimum execution time: 36_109 nanoseconds. - Weight::from_ref_time(37_592_683) - // Standard Error: 2_089 - .saturating_add(Weight::from_ref_time(115_406).saturating_mul(a.into())) - // Standard Error: 2_158 - .saturating_add(Weight::from_ref_time(24_877).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `486 + a * (68 ±0) + p * (37 ±0)` + // Estimated: `13997` + // Minimum execution time: 29_626_000 picoseconds. + Weight::from_parts(33_655_611, 0) + .saturating_add(Weight::from_parts(0, 13997)) + // Standard Error: 4_445 + .saturating_add(Weight::from_parts(132_160, 0).saturating_mul(a.into())) + // Standard Error: 4_593 + .saturating_add(Weight::from_parts(25_266, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Proxy Proxies (r:1 w:1) + /// Storage: Proxy Proxies (r:1 w:1) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) /// The range of component `p` is `[1, 31]`. fn add_proxy(p: u32, ) -> Weight { - // Minimum execution time: 29_354 nanoseconds. - Weight::from_ref_time(30_580_225) - // Standard Error: 1_939 - .saturating_add(Weight::from_ref_time(72_670).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `227 + p * (37 ±0)` + // Estimated: `4706` + // Minimum execution time: 22_666_000 picoseconds. + Weight::from_parts(23_370_832, 0) + .saturating_add(Weight::from_parts(0, 4706)) + // Standard Error: 4_012 + .saturating_add(Weight::from_parts(60_931, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Proxy Proxies (r:1 w:1) + /// Storage: Proxy Proxies (r:1 w:1) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) /// The range of component `p` is `[1, 31]`. fn remove_proxy(p: u32, ) -> Weight { - // Minimum execution time: 29_405 nanoseconds. - Weight::from_ref_time(30_855_077) - // Standard Error: 2_387 - .saturating_add(Weight::from_ref_time(82_949).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `227 + p * (37 ±0)` + // Estimated: `4706` + // Minimum execution time: 21_903_000 picoseconds. + Weight::from_parts(23_684_579, 0) + .saturating_add(Weight::from_parts(0, 4706)) + // Standard Error: 3_512 + .saturating_add(Weight::from_parts(40_111, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Proxy Proxies (r:1 w:1) + /// Storage: Proxy Proxies (r:1 w:1) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) /// The range of component `p` is `[1, 31]`. fn remove_proxies(p: u32, ) -> Weight { - // Minimum execution time: 25_164 nanoseconds. - Weight::from_ref_time(26_549_207) - // Standard Error: 1_846 - .saturating_add(Weight::from_ref_time(56_112).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `227 + p * (37 ±0)` + // Estimated: `4706` + // Minimum execution time: 18_131_000 picoseconds. + Weight::from_parts(18_751_108, 0) + .saturating_add(Weight::from_parts(0, 4706)) + // Standard Error: 1_194 + .saturating_add(Weight::from_parts(22_234, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) - // Storage: Proxy Proxies (r:1 w:1) + /// Storage: Proxy Proxies (r:1 w:1) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) /// The range of component `p` is `[1, 31]`. fn create_pure(p: u32, ) -> Weight { - // Minimum execution time: 31_612 nanoseconds. - Weight::from_ref_time(32_862_431) - // Standard Error: 1_549 - .saturating_add(Weight::from_ref_time(32_604).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(2)) + // Proof Size summary in bytes: + // Measured: `239` + // Estimated: `4706` + // Minimum execution time: 24_091_000 picoseconds. + Weight::from_parts(24_920_852, 0) + .saturating_add(Weight::from_parts(0, 4706)) + // Standard Error: 1_419 + .saturating_add(Weight::from_parts(10_596, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Proxy Proxies (r:1 w:1) + /// Storage: Proxy Proxies (r:1 w:1) + /// Proof: Proxy Proxies (max_values: None, max_size: Some(1241), added: 3716, mode: MaxEncodedLen) /// The range of component `p` is `[0, 30]`. fn kill_pure(p: u32, ) -> Weight { - // Minimum execution time: 26_741 nanoseconds. - Weight::from_ref_time(28_127_722) - // Standard Error: 1_387 - .saturating_add(Weight::from_ref_time(52_518).saturating_mul(p.into())) + // Proof Size summary in bytes: + // Measured: `264 + p * (37 ±0)` + // Estimated: `4706` + // Minimum execution time: 18_969_000 picoseconds. + Weight::from_parts(19_639_040, 0) + .saturating_add(Weight::from_parts(0, 4706)) + // Standard Error: 1_197 + .saturating_add(Weight::from_parts(21_107, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/westend/src/weights/pallet_scheduler.rs b/runtime/westend/src/weights/pallet_scheduler.rs index 09d5dff7d238..6e0a9fca8443 100644 --- a/runtime/westend/src/weights/pallet_scheduler.rs +++ b/runtime/westend/src/weights/pallet_scheduler.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_scheduler` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -44,96 +45,157 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_scheduler`. pub struct WeightInfo(PhantomData); impl pallet_scheduler::WeightInfo for WeightInfo { - // Storage: Scheduler IncompleteSince (r:1 w:1) + /// Storage: Scheduler IncompleteSince (r:1 w:1) + /// Proof: Scheduler IncompleteSince (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn service_agendas_base() -> Weight { - // Minimum execution time: 4_853 nanoseconds. - Weight::from_ref_time(4_987_000) + // Proof Size summary in bytes: + // Measured: `69` + // Estimated: `1489` + // Minimum execution time: 3_930_000 picoseconds. + Weight::from_parts(4_064_000, 0) + .saturating_add(Weight::from_parts(0, 1489)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) /// The range of component `s` is `[0, 50]`. fn service_agenda_base(s: u32, ) -> Weight { - // Minimum execution time: 4_088 nanoseconds. - Weight::from_ref_time(7_576_495) - // Standard Error: 2_156 - .saturating_add(Weight::from_ref_time(682_589).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `116 + s * (177 ±0)` + // Estimated: `42428` + // Minimum execution time: 3_683_000 picoseconds. + Weight::from_parts(6_979_951, 0) + .saturating_add(Weight::from_parts(0, 42428)) + // Standard Error: 2_002 + .saturating_add(Weight::from_parts(741_311, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } fn service_task_base() -> Weight { - // Minimum execution time: 9_943 nanoseconds. - Weight::from_ref_time(10_099_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 5_650_000 picoseconds. + Weight::from_parts(5_828_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } - // Storage: Preimage PreimageFor (r:1 w:1) - // Storage: Preimage StatusFor (r:1 w:1) + /// Storage: Preimage PreimageFor (r:1 w:1) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: Measured) + /// Storage: Preimage StatusFor (r:1 w:1) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) /// The range of component `s` is `[128, 4194304]`. fn service_task_fetched(s: u32, ) -> Weight { - // Minimum execution time: 23_143 nanoseconds. - Weight::from_ref_time(23_294_000) + // Proof Size summary in bytes: + // Measured: `217 + s * (1 ±0)` + // Estimated: `7238 + s * (1 ±0)` + // Minimum execution time: 19_615_000 picoseconds. + Weight::from_parts(19_866_000, 0) + .saturating_add(Weight::from_parts(0, 7238)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(1_452).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(1_170, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 1).saturating_mul(s.into())) } - // Storage: Scheduler Lookup (r:0 w:1) + /// Storage: Scheduler Lookup (r:0 w:1) + /// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) fn service_task_named() -> Weight { - // Minimum execution time: 11_359 nanoseconds. - Weight::from_ref_time(11_578_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_074_000 picoseconds. + Weight::from_parts(7_208_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } fn service_task_periodic() -> Weight { - // Minimum execution time: 10_300 nanoseconds. - Weight::from_ref_time(10_636_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 5_610_000 picoseconds. + Weight::from_parts(5_747_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } fn execute_dispatch_signed() -> Weight { - // Minimum execution time: 4_505 nanoseconds. - Weight::from_ref_time(4_602_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_678_000 picoseconds. + Weight::from_parts(2_731_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } fn execute_dispatch_unsigned() -> Weight { - // Minimum execution time: 4_555 nanoseconds. - Weight::from_ref_time(4_663_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_607_000 picoseconds. + Weight::from_parts(2_729_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) /// The range of component `s` is `[0, 49]`. fn schedule(s: u32, ) -> Weight { - // Minimum execution time: 18_425 nanoseconds. - Weight::from_ref_time(22_633_918) - // Standard Error: 2_496 - .saturating_add(Weight::from_ref_time(703_880).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `116 + s * (177 ±0)` + // Estimated: `42428` + // Minimum execution time: 13_285_000 picoseconds. + Weight::from_parts(16_498_417, 0) + .saturating_add(Weight::from_parts(0, 42428)) + // Standard Error: 2_115 + .saturating_add(Weight::from_parts(748_025, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Scheduler Agenda (r:1 w:1) - // Storage: Scheduler Lookup (r:0 w:1) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) + /// Storage: Scheduler Lookup (r:0 w:1) + /// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) /// The range of component `s` is `[1, 50]`. fn cancel(s: u32, ) -> Weight { - // Minimum execution time: 21_138 nanoseconds. - Weight::from_ref_time(23_083_032) - // Standard Error: 2_037 - .saturating_add(Weight::from_ref_time(694_640).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `116 + s * (177 ±0)` + // Estimated: `42428` + // Minimum execution time: 17_406_000 picoseconds. + Weight::from_parts(17_326_158, 0) + .saturating_add(Weight::from_parts(0, 42428)) + // Standard Error: 2_389 + .saturating_add(Weight::from_parts(1_302_661, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Scheduler Lookup (r:1 w:1) - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: Scheduler Lookup (r:1 w:1) + /// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) /// The range of component `s` is `[0, 49]`. fn schedule_named(s: u32, ) -> Weight { - // Minimum execution time: 21_140 nanoseconds. - Weight::from_ref_time(26_422_364) - // Standard Error: 3_390 - .saturating_add(Weight::from_ref_time(725_818).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `293 + s * (185 ±0)` + // Estimated: `45941` + // Minimum execution time: 16_343_000 picoseconds. + Weight::from_parts(20_629_176, 0) + .saturating_add(Weight::from_parts(0, 45941)) + // Standard Error: 2_969 + .saturating_add(Weight::from_parts(777_170, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Scheduler Lookup (r:1 w:1) - // Storage: Scheduler Agenda (r:1 w:1) + /// Storage: Scheduler Lookup (r:1 w:1) + /// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) + /// Storage: Scheduler Agenda (r:1 w:1) + /// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen) /// The range of component `s` is `[1, 50]`. fn cancel_named(s: u32, ) -> Weight { - // Minimum execution time: 22_159 nanoseconds. - Weight::from_ref_time(24_970_672) - // Standard Error: 2_367 - .saturating_add(Weight::from_ref_time(706_983).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `319 + s * (185 ±0)` + // Estimated: `45941` + // Minimum execution time: 19_160_000 picoseconds. + Weight::from_parts(19_697_985, 0) + .saturating_add(Weight::from_parts(0, 45941)) + // Standard Error: 2_666 + .saturating_add(Weight::from_parts(1_319_035, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } diff --git a/runtime/westend/src/weights/pallet_session.rs b/runtime/westend/src/weights/pallet_session.rs index 20d751fc3279..46049c5ea649 100644 --- a/runtime/westend/src/weights/pallet_session.rs +++ b/runtime/westend/src/weights/pallet_session.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_session` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -44,21 +45,35 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_session`. pub struct WeightInfo(PhantomData); impl pallet_session::WeightInfo for WeightInfo { - // Storage: Staking Ledger (r:1 w:0) - // Storage: Session NextKeys (r:1 w:1) - // Storage: Session KeyOwner (r:6 w:6) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Session NextKeys (r:1 w:1) + /// Proof Skipped: Session NextKeys (max_values: None, max_size: None, mode: Measured) + /// Storage: Session KeyOwner (r:6 w:6) + /// Proof Skipped: Session KeyOwner (max_values: None, max_size: None, mode: Measured) fn set_keys() -> Weight { - // Minimum execution time: 52_642 nanoseconds. - Weight::from_ref_time(54_045_000) + // Proof Size summary in bytes: + // Measured: `1921` + // Estimated: `27703` + // Minimum execution time: 51_536_000 picoseconds. + Weight::from_parts(51_997_000, 0) + .saturating_add(Weight::from_parts(0, 27703)) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(7)) } - // Storage: Staking Ledger (r:1 w:0) - // Storage: Session NextKeys (r:1 w:1) - // Storage: Session KeyOwner (r:0 w:6) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Session NextKeys (r:1 w:1) + /// Proof Skipped: Session NextKeys (max_values: None, max_size: None, mode: Measured) + /// Storage: Session KeyOwner (r:0 w:6) + /// Proof Skipped: Session KeyOwner (max_values: None, max_size: None, mode: Measured) fn purge_keys() -> Weight { - // Minimum execution time: 39_810 nanoseconds. - Weight::from_ref_time(41_128_000) + // Proof Size summary in bytes: + // Measured: `1785` + // Estimated: `11591` + // Minimum execution time: 37_181_000 picoseconds. + Weight::from_parts(38_051_000, 0) + .saturating_add(Weight::from_parts(0, 11591)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(7)) } diff --git a/runtime/westend/src/weights/pallet_staking.rs b/runtime/westend/src/weights/pallet_staking.rs index eea1a93d112a..cdc69dde781e 100644 --- a/runtime/westend/src/weights/pallet_staking.rs +++ b/runtime/westend/src/weights/pallet_staking.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_staking` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -44,417 +45,739 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_staking`. pub struct WeightInfo(PhantomData); impl pallet_staking::WeightInfo for WeightInfo { - // Storage: Staking Bonded (r:1 w:1) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) - // Storage: Staking Payee (r:0 w:1) + /// Storage: Staking Bonded (r:1 w:1) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:0 w:1) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) fn bond() -> Weight { - // Minimum execution time: 48_229 nanoseconds. - Weight::from_ref_time(48_858_000) + // Proof Size summary in bytes: + // Measured: `1014` + // Estimated: `14346` + // Minimum execution time: 41_121_000 picoseconds. + Weight::from_parts(41_849_000, 0) + .saturating_add(Weight::from_parts(0, 14346)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: VoterList ListNodes (r:3 w:3) - // Storage: VoterList ListBags (r:2 w:2) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:3 w:3) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:2 w:2) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn bond_extra() -> Weight { - // Minimum execution time: 85_680 nanoseconds. - Weight::from_ref_time(87_091_000) + // Proof Size summary in bytes: + // Measured: `1959` + // Estimated: `27838` + // Minimum execution time: 81_412_000 picoseconds. + Weight::from_parts(82_152_000, 0) + .saturating_add(Weight::from_parts(0, 27838)) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(7)) } - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking Nominators (r:1 w:0) - // Storage: Staking MinNominatorBond (r:1 w:0) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: VoterList ListNodes (r:3 w:3) - // Storage: Staking Bonded (r:1 w:0) - // Storage: VoterList ListBags (r:2 w:2) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:0) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: Staking MinNominatorBond (r:1 w:0) + /// Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:3 w:3) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:2 w:2) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn unbond() -> Weight { - // Minimum execution time: 94_521 nanoseconds. - Weight::from_ref_time(95_544_000) + // Proof Size summary in bytes: + // Measured: `2166` + // Estimated: `38444` + // Minimum execution time: 88_844_000 picoseconds. + Weight::from_parts(89_714_000, 0) + .saturating_add(Weight::from_parts(0, 38444)) .saturating_add(T::DbWeight::get().reads(12)) .saturating_add(T::DbWeight::get().writes(8)) } - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `s` is `[0, 100]`. fn withdraw_unbonded_update(s: u32, ) -> Weight { - // Minimum execution time: 41_030 nanoseconds. - Weight::from_ref_time(42_947_403) - // Standard Error: 2_438 - .saturating_add(Weight::from_ref_time(30_194).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `981` + // Estimated: `14402` + // Minimum execution time: 35_637_000 picoseconds. + Weight::from_parts(37_493_225, 0) + .saturating_add(Weight::from_parts(0, 14402)) + // Standard Error: 792 + .saturating_add(Weight::from_parts(11_820, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Staking Bonded (r:1 w:1) - // Storage: Staking SlashingSpans (r:1 w:0) - // Storage: Staking Validators (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) - // Storage: Staking CounterForNominators (r:1 w:1) - // Storage: VoterList ListNodes (r:2 w:2) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: Staking Payee (r:0 w:1) - // Storage: Staking SpanSlash (r:0 w:2) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:1) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking SlashingSpans (r:1 w:1) + /// Proof Skipped: Staking SlashingSpans (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking Validators (r:1 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:1) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: Staking CounterForNominators (r:1 w:1) + /// Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:2 w:2) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:0 w:1) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + /// Storage: Staking SpanSlash (r:0 w:100) + /// Proof: Staking SpanSlash (max_values: None, max_size: Some(76), added: 2551, mode: MaxEncodedLen) /// The range of component `s` is `[0, 100]`. fn withdraw_unbonded_kill(s: u32, ) -> Weight { - // Minimum execution time: 83_163 nanoseconds. - Weight::from_ref_time(86_233_015) - // Standard Error: 2_393 - .saturating_add(Weight::from_ref_time(928_106).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `2221 + s * (4 ±0)` + // Estimated: `43926 + s * (4 ±0)` + // Minimum execution time: 77_766_000 picoseconds. + Weight::from_parts(82_537_686, 0) + .saturating_add(Weight::from_parts(0, 43926)) + // Standard Error: 1_742 + .saturating_add(Weight::from_parts(1_142_781, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(13)) .saturating_add(T::DbWeight::get().writes(12)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) + .saturating_add(Weight::from_parts(0, 4).saturating_mul(s.into())) } - // Storage: Staking Ledger (r:1 w:0) - // Storage: Staking MinValidatorBond (r:1 w:0) - // Storage: Staking MinCommission (r:1 w:0) - // Storage: Staking Validators (r:1 w:1) - // Storage: Staking MaxValidatorsCount (r:1 w:0) - // Storage: Staking Nominators (r:1 w:0) - // Storage: Staking Bonded (r:1 w:0) - // Storage: VoterList ListNodes (r:1 w:1) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) - // Storage: Staking CounterForValidators (r:1 w:1) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking MinValidatorBond (r:1 w:0) + /// Proof: Staking MinValidatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Staking MinCommission (r:1 w:0) + /// Proof: Staking MinCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:1 w:1) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking MaxValidatorsCount (r:1 w:0) + /// Proof: Staking MaxValidatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:0) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:1 w:1) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking CounterForValidators (r:1 w:1) + /// Proof: Staking CounterForValidators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn validate() -> Weight { - // Minimum execution time: 62_008 nanoseconds. - Weight::from_ref_time(63_087_000) + // Proof Size summary in bytes: + // Measured: `1343` + // Estimated: `30249` + // Minimum execution time: 56_478_000 picoseconds. + Weight::from_parts(57_836_000, 0) + .saturating_add(Weight::from_parts(0, 30249)) .saturating_add(T::DbWeight::get().reads(11)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: Staking Ledger (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:128 w:128) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) /// The range of component `k` is `[1, 128]`. fn kick(k: u32, ) -> Weight { - // Minimum execution time: 34_929 nanoseconds. - Weight::from_ref_time(31_879_035) - // Standard Error: 10_923 - .saturating_add(Weight::from_ref_time(6_688_720).saturating_mul(k.into())) + // Proof Size summary in bytes: + // Measured: `1223 + k * (569 ±0)` + // Estimated: `5546 + k * (3033 ±0)` + // Minimum execution time: 29_151_000 picoseconds. + Weight::from_parts(28_354_989, 0) + .saturating_add(Weight::from_parts(0, 5546)) + // Standard Error: 7_649 + .saturating_add(Weight::from_parts(7_790_372, 0).saturating_mul(k.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(k.into()))) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(k.into()))) + .saturating_add(Weight::from_parts(0, 3033).saturating_mul(k.into())) } - // Storage: Staking Ledger (r:1 w:0) - // Storage: Staking MinNominatorBond (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) - // Storage: Staking MaxNominatorsCount (r:1 w:0) - // Storage: Staking Validators (r:2 w:0) - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Staking Bonded (r:1 w:0) - // Storage: VoterList ListNodes (r:2 w:2) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) - // Storage: Staking CounterForNominators (r:1 w:1) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking MinNominatorBond (r:1 w:0) + /// Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:1) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: Staking MaxNominatorsCount (r:1 w:0) + /// Proof: Staking MaxNominatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:17 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:2 w:2) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking CounterForNominators (r:1 w:1) + /// Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) /// The range of component `n` is `[1, 16]`. fn nominate(n: u32, ) -> Weight { - // Minimum execution time: 66_268 nanoseconds. - Weight::from_ref_time(65_653_232) - // Standard Error: 5_918 - .saturating_add(Weight::from_ref_time(2_488_204).saturating_mul(n.into())) + // Proof Size summary in bytes: + // Measured: `1819 + n * (105 ±0)` + // Estimated: `32878 + n * (2520 ±0)` + // Minimum execution time: 64_251_000 picoseconds. + Weight::from_parts(61_920_029, 0) + .saturating_add(Weight::from_parts(0, 32878)) + // Standard Error: 14_227 + .saturating_add(Weight::from_parts(3_262_288, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(12)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(6)) + .saturating_add(Weight::from_parts(0, 2520).saturating_mul(n.into())) } - // Storage: Staking Ledger (r:1 w:0) - // Storage: Staking Validators (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) - // Storage: Staking CounterForNominators (r:1 w:1) - // Storage: VoterList ListNodes (r:2 w:2) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:1 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:1) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: Staking CounterForNominators (r:1 w:1) + /// Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:2 w:2) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn chill() -> Weight { - // Minimum execution time: 61_090 nanoseconds. - Weight::from_ref_time(61_782_000) + // Proof Size summary in bytes: + // Measured: `1675` + // Estimated: `24862` + // Minimum execution time: 57_179_000 picoseconds. + Weight::from_parts(57_487_000, 0) + .saturating_add(Weight::from_parts(0, 24862)) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: Staking Ledger (r:1 w:0) - // Storage: Staking Payee (r:0 w:1) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:0 w:1) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) fn set_payee() -> Weight { - // Minimum execution time: 17_559 nanoseconds. - Weight::from_ref_time(17_868_000) + // Proof Size summary in bytes: + // Measured: `771` + // Estimated: `4556` + // Minimum execution time: 14_249_000 picoseconds. + Weight::from_parts(14_529_000, 0) + .saturating_add(Weight::from_parts(0, 4556)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Staking Bonded (r:1 w:1) - // Storage: Staking Ledger (r:2 w:2) + /// Storage: Staking Bonded (r:1 w:1) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:2 w:2) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) fn set_controller() -> Weight { - // Minimum execution time: 24_679 nanoseconds. - Weight::from_ref_time(25_329_000) + // Proof Size summary in bytes: + // Measured: `870` + // Estimated: `11659` + // Minimum execution time: 22_705_000 picoseconds. + Weight::from_parts(22_908_000, 0) + .saturating_add(Weight::from_parts(0, 11659)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Staking ValidatorCount (r:0 w:1) + /// Storage: Staking ValidatorCount (r:0 w:1) + /// Proof: Staking ValidatorCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn set_validator_count() -> Weight { - // Minimum execution time: 5_017 nanoseconds. - Weight::from_ref_time(5_112_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_204_000 picoseconds. + Weight::from_parts(3_390_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Staking ForceEra (r:0 w:1) + /// Storage: Staking ForceEra (r:0 w:1) + /// Proof: Staking ForceEra (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn force_no_eras() -> Weight { - // Minimum execution time: 5_055 nanoseconds. - Weight::from_ref_time(5_308_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 11_653_000 picoseconds. + Weight::from_parts(11_918_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Staking ForceEra (r:0 w:1) + /// Storage: Staking ForceEra (r:0 w:1) + /// Proof: Staking ForceEra (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn force_new_era() -> Weight { - // Minimum execution time: 5_131 nanoseconds. - Weight::from_ref_time(5_263_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 11_610_000 picoseconds. + Weight::from_parts(11_795_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Staking ForceEra (r:0 w:1) + /// Storage: Staking ForceEra (r:0 w:1) + /// Proof: Staking ForceEra (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn force_new_era_always() -> Weight { - // Minimum execution time: 5_157 nanoseconds. - Weight::from_ref_time(5_389_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 11_507_000 picoseconds. + Weight::from_parts(11_885_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Staking Invulnerables (r:0 w:1) + /// Storage: Staking Invulnerables (r:0 w:1) + /// Proof Skipped: Staking Invulnerables (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `v` is `[0, 1000]`. fn set_invulnerables(v: u32, ) -> Weight { - // Minimum execution time: 5_189 nanoseconds. - Weight::from_ref_time(5_738_244) - // Standard Error: 32 - .saturating_add(Weight::from_ref_time(13_575).saturating_mul(v.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_482_000 picoseconds. + Weight::from_parts(3_702_653, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 29 + .saturating_add(Weight::from_parts(11_927, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Staking Bonded (r:1 w:1) - // Storage: Staking SlashingSpans (r:1 w:0) - // Storage: Staking Validators (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) - // Storage: Staking CounterForNominators (r:1 w:1) - // Storage: VoterList ListNodes (r:2 w:2) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: Staking Ledger (r:0 w:1) - // Storage: Staking Payee (r:0 w:1) - // Storage: Staking SpanSlash (r:0 w:2) + /// Storage: Staking Bonded (r:1 w:1) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking SlashingSpans (r:1 w:1) + /// Proof Skipped: Staking SlashingSpans (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking Validators (r:1 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:1) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: Staking CounterForNominators (r:1 w:1) + /// Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:2 w:2) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:0 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:0 w:1) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + /// Storage: Staking SpanSlash (r:0 w:100) + /// Proof: Staking SpanSlash (max_values: None, max_size: Some(76), added: 2551, mode: MaxEncodedLen) /// The range of component `s` is `[0, 100]`. fn force_unstake(s: u32, ) -> Weight { - // Minimum execution time: 74_401 nanoseconds. - Weight::from_ref_time(78_982_441) - // Standard Error: 2_215 - .saturating_add(Weight::from_ref_time(935_788).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `1947 + s * (4 ±0)` + // Estimated: `37607 + s * (4 ±0)` + // Minimum execution time: 69_974_000 picoseconds. + Weight::from_parts(75_615_421, 0) + .saturating_add(Weight::from_parts(0, 37607)) + // Standard Error: 1_940 + .saturating_add(Weight::from_parts(1_131_655, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(11)) .saturating_add(T::DbWeight::get().writes(12)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) + .saturating_add(Weight::from_parts(0, 4).saturating_mul(s.into())) } - // Storage: Staking UnappliedSlashes (r:1 w:1) + /// Storage: Staking UnappliedSlashes (r:1 w:1) + /// Proof Skipped: Staking UnappliedSlashes (max_values: None, max_size: None, mode: Measured) /// The range of component `s` is `[1, 1000]`. fn cancel_deferred_slash(s: u32, ) -> Weight { - // Minimum execution time: 117_983 nanoseconds. - Weight::from_ref_time(942_878_048) - // Standard Error: 59_395 - .saturating_add(Weight::from_ref_time(4_934_238).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `66606` + // Estimated: `70071` + // Minimum execution time: 114_444_000 picoseconds. + Weight::from_parts(820_259_020, 0) + .saturating_add(Weight::from_parts(0, 70071)) + // Standard Error: 51_225 + .saturating_add(Weight::from_parts(4_292_664, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Staking ErasValidatorReward (r:1 w:0) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking ErasStakersClipped (r:1 w:0) - // Storage: Staking ErasRewardPoints (r:1 w:0) - // Storage: Staking ErasValidatorPrefs (r:1 w:0) - // Storage: Staking Payee (r:1 w:0) - // Storage: System Account (r:1 w:1) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ErasValidatorReward (r:1 w:0) + /// Proof: Staking ErasValidatorReward (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:65 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking ErasStakersClipped (r:1 w:0) + /// Proof Skipped: Staking ErasStakersClipped (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking ErasRewardPoints (r:1 w:0) + /// Proof Skipped: Staking ErasRewardPoints (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking ErasValidatorPrefs (r:1 w:0) + /// Proof: Staking ErasValidatorPrefs (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:65 w:0) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + /// Storage: System Account (r:65 w:65) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `n` is `[0, 64]`. fn payout_stakers_dead_controller(n: u32, ) -> Weight { - // Minimum execution time: 79_618 nanoseconds. - Weight::from_ref_time(97_391_462) - // Standard Error: 27_066 - .saturating_add(Weight::from_ref_time(20_709_371).saturating_mul(n.into())) + // Proof Size summary in bytes: + // Measured: `5773 + n * (151 ±0)` + // Estimated: `40886 + n * (8030 ±1)` + // Minimum execution time: 70_311_000 picoseconds. + Weight::from_parts(90_196_758, 0) + .saturating_add(Weight::from_parts(0, 40886)) + // Standard Error: 23_128 + .saturating_add(Weight::from_parts(24_730_184, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(9)) .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(2)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into()))) + .saturating_add(Weight::from_parts(0, 8030).saturating_mul(n.into())) } - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Staking ErasValidatorReward (r:1 w:0) - // Storage: Staking Bonded (r:1 w:0) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking ErasStakersClipped (r:1 w:0) - // Storage: Staking ErasRewardPoints (r:1 w:0) - // Storage: Staking ErasValidatorPrefs (r:1 w:0) - // Storage: Staking Payee (r:1 w:0) - // Storage: System Account (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Staking CurrentEra (r:1 w:0) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ErasValidatorReward (r:1 w:0) + /// Proof: Staking ErasValidatorReward (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:65 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:65 w:65) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking ErasStakersClipped (r:1 w:0) + /// Proof Skipped: Staking ErasStakersClipped (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking ErasRewardPoints (r:1 w:0) + /// Proof Skipped: Staking ErasRewardPoints (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking ErasValidatorPrefs (r:1 w:0) + /// Proof: Staking ErasValidatorPrefs (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:65 w:0) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + /// Storage: System Account (r:65 w:65) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:65 w:65) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `n` is `[0, 64]`. fn payout_stakers_alive_staked(n: u32, ) -> Weight { - // Minimum execution time: 93_560 nanoseconds. - Weight::from_ref_time(122_070_975) - // Standard Error: 39_617 - .saturating_add(Weight::from_ref_time(27_759_630).saturating_mul(n.into())) + // Proof Size summary in bytes: + // Measured: `9389 + n * (403 ±0)` + // Estimated: `51408 + n * (15910 ±0)` + // Minimum execution time: 86_241_000 picoseconds. + Weight::from_parts(113_571_222, 0) + .saturating_add(Weight::from_parts(0, 51408)) + // Standard Error: 31_864 + .saturating_add(Weight::from_parts(32_379_137, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(10)) .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(3)) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(n.into()))) + .saturating_add(Weight::from_parts(0, 15910).saturating_mul(n.into())) } - // Storage: Staking Ledger (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: VoterList ListNodes (r:3 w:3) - // Storage: Staking Bonded (r:1 w:0) - // Storage: VoterList ListBags (r:2 w:2) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:3 w:3) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:2 w:2) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) /// The range of component `l` is `[1, 32]`. fn rebond(l: u32, ) -> Weight { - // Minimum execution time: 85_541 nanoseconds. - Weight::from_ref_time(87_582_465) - // Standard Error: 4_756 - .saturating_add(Weight::from_ref_time(22_919).saturating_mul(l.into())) + // Proof Size summary in bytes: + // Measured: `1960 + l * (5 ±0)` + // Estimated: `31431` + // Minimum execution time: 80_570_000 picoseconds. + Weight::from_parts(82_037_546, 0) + .saturating_add(Weight::from_parts(0, 31431)) + // Standard Error: 3_888 + .saturating_add(Weight::from_parts(44_507, 0).saturating_mul(l.into())) .saturating_add(T::DbWeight::get().reads(9)) .saturating_add(T::DbWeight::get().writes(8)) } - // Storage: System Account (r:1 w:1) - // Storage: Staking Bonded (r:1 w:1) - // Storage: Staking Ledger (r:1 w:1) - // Storage: Staking SlashingSpans (r:1 w:1) - // Storage: Staking Validators (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) - // Storage: Staking CounterForNominators (r:1 w:1) - // Storage: VoterList ListNodes (r:2 w:2) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: Staking Payee (r:0 w:1) - // Storage: Staking SpanSlash (r:0 w:1) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:1 w:1) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:1 w:1) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking SlashingSpans (r:1 w:1) + /// Proof Skipped: Staking SlashingSpans (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking Validators (r:1 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:1) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: Staking CounterForNominators (r:1 w:1) + /// Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:2 w:2) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: Staking Payee (r:0 w:1) + /// Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + /// Storage: Staking SpanSlash (r:0 w:100) + /// Proof: Staking SpanSlash (max_values: None, max_size: Some(76), added: 2551, mode: MaxEncodedLen) /// The range of component `s` is `[1, 100]`. fn reap_stash(s: u32, ) -> Weight { - // Minimum execution time: 84_676 nanoseconds. - Weight::from_ref_time(86_956_205) - // Standard Error: 2_062 - .saturating_add(Weight::from_ref_time(932_163).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `2221 + s * (4 ±0)` + // Estimated: `42442 + s * (4 ±0)` + // Minimum execution time: 82_153_000 picoseconds. + Weight::from_parts(84_335_737, 0) + .saturating_add(Weight::from_parts(0, 42442)) + // Standard Error: 2_900 + .saturating_add(Weight::from_parts(1_142_433, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(12)) .saturating_add(T::DbWeight::get().writes(12)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) + .saturating_add(Weight::from_parts(0, 4).saturating_mul(s.into())) } - // Storage: VoterList CounterForListNodes (r:1 w:0) - // Storage: VoterList ListBags (r:178 w:0) - // Storage: VoterList ListNodes (r:101 w:0) - // Storage: Staking Nominators (r:101 w:0) - // Storage: Staking Validators (r:2 w:0) - // Storage: Staking Bonded (r:101 w:0) - // Storage: Staking Ledger (r:101 w:0) - // Storage: System BlockWeight (r:1 w:1) - // Storage: Staking CounterForValidators (r:1 w:0) - // Storage: Staking ValidatorCount (r:1 w:0) - // Storage: Staking MinimumValidatorCount (r:1 w:0) - // Storage: Staking CurrentEra (r:1 w:1) - // Storage: Staking ErasStakersClipped (r:0 w:1) - // Storage: Staking ErasValidatorPrefs (r:0 w:1) - // Storage: Staking ErasStakers (r:0 w:1) - // Storage: Staking ErasTotalStake (r:0 w:1) - // Storage: Staking ErasStartSessionIndex (r:0 w:1) - // Storage: Staking MinimumActiveStake (r:0 w:1) + /// Storage: VoterList CounterForListNodes (r:1 w:0) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:178 w:0) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:110 w:0) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:110 w:0) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:11 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:110 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:110 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: System BlockWeight (r:1 w:1) + /// Proof: System BlockWeight (max_values: Some(1), max_size: Some(48), added: 543, mode: MaxEncodedLen) + /// Storage: Staking CounterForValidators (r:1 w:0) + /// Proof: Staking CounterForValidators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ValidatorCount (r:1 w:0) + /// Proof: Staking ValidatorCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking MinimumValidatorCount (r:1 w:0) + /// Proof: Staking MinimumValidatorCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking CurrentEra (r:1 w:1) + /// Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ErasStakersClipped (r:0 w:10) + /// Proof Skipped: Staking ErasStakersClipped (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking ErasValidatorPrefs (r:0 w:10) + /// Proof: Staking ErasValidatorPrefs (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Staking ErasStakers (r:0 w:10) + /// Proof Skipped: Staking ErasStakers (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking ErasTotalStake (r:0 w:1) + /// Proof: Staking ErasTotalStake (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) + /// Storage: Staking ErasStartSessionIndex (r:0 w:1) + /// Proof: Staking ErasStartSessionIndex (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Staking MinimumActiveStake (r:0 w:1) + /// Proof: Staking MinimumActiveStake (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) /// The range of component `v` is `[1, 10]`. /// The range of component `n` is `[0, 100]`. fn new_era(v: u32, n: u32, ) -> Weight { - // Minimum execution time: 447_775 nanoseconds. - Weight::from_ref_time(449_912_000) - // Standard Error: 1_875_211 - .saturating_add(Weight::from_ref_time(61_748_001).saturating_mul(v.into())) - // Standard Error: 186_854 - .saturating_add(Weight::from_ref_time(13_671_156).saturating_mul(n.into())) + // Proof Size summary in bytes: + // Measured: `0 + v * (3594 ±0) + n * (716 ±0)` + // Estimated: `482816 + v * (16697 ±0) + n * (12755 ±0)` + // Minimum execution time: 487_856_000 picoseconds. + Weight::from_parts(489_075_000, 0) + .saturating_add(Weight::from_parts(0, 482816)) + // Standard Error: 1_844_556 + .saturating_add(Weight::from_parts(59_330_541, 0).saturating_mul(v.into())) + // Standard Error: 183_799 + .saturating_add(Weight::from_parts(16_158_393, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(185)) .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(v.into()))) .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(5)) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(v.into()))) + .saturating_add(Weight::from_parts(0, 16697).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(0, 12755).saturating_mul(n.into())) } - // Storage: VoterList CounterForListNodes (r:1 w:0) - // Storage: VoterList ListBags (r:178 w:0) - // Storage: VoterList ListNodes (r:1500 w:0) - // Storage: Staking Nominators (r:1500 w:0) - // Storage: Staking Validators (r:500 w:0) - // Storage: Staking Bonded (r:1500 w:0) - // Storage: Staking Ledger (r:1500 w:0) - // Storage: System BlockWeight (r:1 w:1) - // Storage: Staking MinimumActiveStake (r:0 w:1) + /// Storage: VoterList CounterForListNodes (r:1 w:0) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:178 w:0) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:2000 w:0) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:2000 w:0) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:1000 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: Staking Bonded (r:2000 w:0) + /// Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking Ledger (r:2000 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: System BlockWeight (r:1 w:1) + /// Proof: System BlockWeight (max_values: Some(1), max_size: Some(48), added: 543, mode: MaxEncodedLen) + /// Storage: Staking MinimumActiveStake (r:0 w:1) + /// Proof: Staking MinimumActiveStake (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) /// The range of component `v` is `[500, 1000]`. /// The range of component `n` is `[500, 1000]`. fn get_npos_voters(v: u32, n: u32, ) -> Weight { - // Minimum execution time: 25_749_836 nanoseconds. - Weight::from_ref_time(25_911_941_000) - // Standard Error: 598_364 - .saturating_add(Weight::from_ref_time(5_189_738).saturating_mul(v.into())) - // Standard Error: 598_364 - .saturating_add(Weight::from_ref_time(5_161_223).saturating_mul(n.into())) + // Proof Size summary in bytes: + // Measured: `3069 + v * (391 ±0) + n * (907 ±0)` + // Estimated: `464108 + v * (14295 ±0) + n * (11775 ±0)` + // Minimum execution time: 31_319_166_000 picoseconds. + Weight::from_parts(31_475_122_000, 0) + .saturating_add(Weight::from_parts(0, 464108)) + // Standard Error: 345_453 + .saturating_add(Weight::from_parts(4_673_087, 0).saturating_mul(v.into())) + // Standard Error: 345_453 + .saturating_add(Weight::from_parts(3_110_380, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(180)) .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(v.into()))) .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 14295).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(0, 11775).saturating_mul(n.into())) } - // Storage: Staking CounterForValidators (r:1 w:0) - // Storage: Staking Validators (r:501 w:0) - // Storage: System BlockWeight (r:1 w:1) + /// Storage: Staking CounterForValidators (r:1 w:0) + /// Proof: Staking CounterForValidators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:1001 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: System BlockWeight (r:1 w:1) + /// Proof: System BlockWeight (max_values: Some(1), max_size: Some(48), added: 543, mode: MaxEncodedLen) /// The range of component `v` is `[500, 1000]`. fn get_npos_targets(v: u32, ) -> Weight { - // Minimum execution time: 3_683_939 nanoseconds. - Weight::from_ref_time(3_768_534_000) - // Standard Error: 43_790 - .saturating_add(Weight::from_ref_time(2_923_468).saturating_mul(v.into())) + // Proof Size summary in bytes: + // Measured: `951 + v * (50 ±0)` + // Estimated: `6532 + v * (2520 ±0)` + // Minimum execution time: 2_195_670_000 picoseconds. + Weight::from_parts(60_901_976, 0) + .saturating_add(Weight::from_parts(0, 6532)) + // Standard Error: 6_790 + .saturating_add(Weight::from_parts(4_356_511, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(v.into()))) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 2520).saturating_mul(v.into())) } - // Storage: Staking MinCommission (r:0 w:1) - // Storage: Staking MinValidatorBond (r:0 w:1) - // Storage: Staking MaxValidatorsCount (r:0 w:1) - // Storage: Staking ChillThreshold (r:0 w:1) - // Storage: Staking MaxNominatorsCount (r:0 w:1) - // Storage: Staking MinNominatorBond (r:0 w:1) + /// Storage: Staking MinCommission (r:0 w:1) + /// Proof: Staking MinCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking MinValidatorBond (r:0 w:1) + /// Proof: Staking MinValidatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Staking MaxValidatorsCount (r:0 w:1) + /// Proof: Staking MaxValidatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ChillThreshold (r:0 w:1) + /// Proof: Staking ChillThreshold (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) + /// Storage: Staking MaxNominatorsCount (r:0 w:1) + /// Proof: Staking MaxNominatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking MinNominatorBond (r:0 w:1) + /// Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn set_staking_configs_all_set() -> Weight { - // Minimum execution time: 9_167 nanoseconds. - Weight::from_ref_time(14_979_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 6_935_000 picoseconds. + Weight::from_parts(7_208_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: Staking MinCommission (r:0 w:1) - // Storage: Staking MinValidatorBond (r:0 w:1) - // Storage: Staking MaxValidatorsCount (r:0 w:1) - // Storage: Staking ChillThreshold (r:0 w:1) - // Storage: Staking MaxNominatorsCount (r:0 w:1) - // Storage: Staking MinNominatorBond (r:0 w:1) + /// Storage: Staking MinCommission (r:0 w:1) + /// Proof: Staking MinCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking MinValidatorBond (r:0 w:1) + /// Proof: Staking MinValidatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Staking MaxValidatorsCount (r:0 w:1) + /// Proof: Staking MaxValidatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ChillThreshold (r:0 w:1) + /// Proof: Staking ChillThreshold (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) + /// Storage: Staking MaxNominatorsCount (r:0 w:1) + /// Proof: Staking MaxNominatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking MinNominatorBond (r:0 w:1) + /// Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn set_staking_configs_all_remove() -> Weight { - // Minimum execution time: 7_552 nanoseconds. - Weight::from_ref_time(7_922_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 6_090_000 picoseconds. + Weight::from_parts(6_399_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: Staking Ledger (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) - // Storage: Staking ChillThreshold (r:1 w:0) - // Storage: Staking MaxNominatorsCount (r:1 w:0) - // Storage: Staking CounterForNominators (r:1 w:1) - // Storage: Staking MinNominatorBond (r:1 w:0) - // Storage: Staking Validators (r:1 w:0) - // Storage: VoterList ListNodes (r:2 w:2) - // Storage: VoterList ListBags (r:1 w:1) - // Storage: VoterList CounterForListNodes (r:1 w:1) + /// Storage: Staking Ledger (r:1 w:0) + /// Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + /// Storage: Staking Nominators (r:1 w:1) + /// Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// Storage: Staking ChillThreshold (r:1 w:0) + /// Proof: Staking ChillThreshold (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) + /// Storage: Staking MaxNominatorsCount (r:1 w:0) + /// Proof: Staking MaxNominatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking CounterForNominators (r:1 w:1) + /// Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking MinNominatorBond (r:1 w:0) + /// Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:1 w:0) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// Storage: VoterList ListNodes (r:2 w:2) + /// Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + /// Storage: VoterList ListBags (r:1 w:1) + /// Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// Storage: VoterList CounterForListNodes (r:1 w:1) + /// Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn chill_other() -> Weight { - // Minimum execution time: 71_662 nanoseconds. - Weight::from_ref_time(72_346_000) + // Proof Size summary in bytes: + // Measured: `1798` + // Estimated: `29338` + // Minimum execution time: 68_728_000 picoseconds. + Weight::from_parts(69_629_000, 0) + .saturating_add(Weight::from_parts(0, 29338)) .saturating_add(T::DbWeight::get().reads(11)) .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: Staking MinCommission (r:1 w:0) - // Storage: Staking Validators (r:1 w:1) + /// Storage: Staking MinCommission (r:1 w:0) + /// Proof: Staking MinCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking Validators (r:1 w:1) + /// Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) fn force_apply_min_commission() -> Weight { - // Minimum execution time: 15_807 nanoseconds. - Weight::from_ref_time(16_049_000) + // Proof Size summary in bytes: + // Measured: `661` + // Estimated: `4999` + // Minimum execution time: 13_166_000 picoseconds. + Weight::from_parts(13_376_000, 0) + .saturating_add(Weight::from_parts(0, 4999)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } + /// Storage: Staking MinCommission (r:0 w:1) + /// Proof: Staking MinCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + fn set_min_commission() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_336_000 picoseconds. + Weight::from_parts(3_500_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(1)) + } } diff --git a/runtime/westend/src/weights/pallet_timestamp.rs b/runtime/westend/src/weights/pallet_timestamp.rs index 2e506a4fea81..9bc842491340 100644 --- a/runtime/westend/src/weights/pallet_timestamp.rs +++ b/runtime/westend/src/weights/pallet_timestamp.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_timestamp` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -44,16 +45,26 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_timestamp`. pub struct WeightInfo(PhantomData); impl pallet_timestamp::WeightInfo for WeightInfo { - // Storage: Timestamp Now (r:1 w:1) - // Storage: Babe CurrentSlot (r:1 w:0) + /// Storage: Timestamp Now (r:1 w:1) + /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Babe CurrentSlot (r:1 w:0) + /// Proof: Babe CurrentSlot (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn set() -> Weight { - // Minimum execution time: 9_955 nanoseconds. - Weight::from_ref_time(10_423_000) + // Proof Size summary in bytes: + // Measured: `311` + // Estimated: `2986` + // Minimum execution time: 9_501_000 picoseconds. + Weight::from_parts(9_786_000, 0) + .saturating_add(Weight::from_parts(0, 2986)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } fn on_finalize() -> Weight { - // Minimum execution time: 4_237 nanoseconds. - Weight::from_ref_time(4_391_000) + // Proof Size summary in bytes: + // Measured: `94` + // Estimated: `0` + // Minimum execution time: 3_680_000 picoseconds. + Weight::from_parts(3_804_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } } diff --git a/runtime/westend/src/weights/pallet_utility.rs b/runtime/westend/src/weights/pallet_utility.rs index 646f1498cd8e..646b9db9c307 100644 --- a/runtime/westend/src/weights/pallet_utility.rs +++ b/runtime/westend/src/weights/pallet_utility.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_utility` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -46,31 +47,51 @@ pub struct WeightInfo(PhantomData); impl pallet_utility::WeightInfo for WeightInfo { /// The range of component `c` is `[0, 1000]`. fn batch(c: u32, ) -> Weight { - // Minimum execution time: 12_703 nanoseconds. - Weight::from_ref_time(15_425_383) - // Standard Error: 2_789 - .saturating_add(Weight::from_ref_time(3_670_420).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 6_959_000 picoseconds. + Weight::from_parts(16_236_243, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 2_438 + .saturating_add(Weight::from_parts(4_490_092, 0).saturating_mul(c.into())) } fn as_derivative() -> Weight { - // Minimum execution time: 6_362 nanoseconds. - Weight::from_ref_time(6_480_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 5_146_000 picoseconds. + Weight::from_parts(5_237_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } /// The range of component `c` is `[0, 1000]`. fn batch_all(c: u32, ) -> Weight { - // Minimum execution time: 13_246 nanoseconds. - Weight::from_ref_time(18_237_502) - // Standard Error: 2_863 - .saturating_add(Weight::from_ref_time(3_867_822).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_100_000 picoseconds. + Weight::from_parts(14_356_170, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 3_089 + .saturating_add(Weight::from_parts(4_737_322, 0).saturating_mul(c.into())) } fn dispatch_as() -> Weight { - // Minimum execution time: 14_913 nanoseconds. - Weight::from_ref_time(15_296_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 9_396_000 picoseconds. + Weight::from_parts(9_598_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } /// The range of component `c` is `[0, 1000]`. fn force_batch(c: u32, ) -> Weight { - // Minimum execution time: 12_629 nanoseconds. - Weight::from_ref_time(16_700_925) - // Standard Error: 2_728 - .saturating_add(Weight::from_ref_time(3_679_666).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 6_964_000 picoseconds. + Weight::from_parts(17_114_993, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 2_275 + .saturating_add(Weight::from_parts(4_471_678, 0).saturating_mul(c.into())) } } diff --git a/runtime/westend/src/weights/pallet_vesting.rs b/runtime/westend/src/weights/pallet_vesting.rs index 7c96f96106b6..3263eb03a9a3 100644 --- a/runtime/westend/src/weights/pallet_vesting.rs +++ b/runtime/westend/src/weights/pallet_vesting.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `pallet_vesting` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -44,121 +45,175 @@ use sp_std::marker::PhantomData; /// Weight functions for `pallet_vesting`. pub struct WeightInfo(PhantomData); impl pallet_vesting::WeightInfo for WeightInfo { - // Storage: Vesting Vesting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[1, 28]`. fn vest_locked(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 40_380 nanoseconds. - Weight::from_ref_time(39_367_952) - // Standard Error: 1_385 - .saturating_add(Weight::from_ref_time(51_428).saturating_mul(l.into())) - // Standard Error: 2_465 - .saturating_add(Weight::from_ref_time(79_669).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `348 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `9286` + // Minimum execution time: 30_368_000 picoseconds. + Weight::from_parts(29_145_666, 0) + .saturating_add(Weight::from_parts(0, 9286)) + // Standard Error: 789 + .saturating_add(Weight::from_parts(42_369, 0).saturating_mul(l.into())) + // Standard Error: 1_403 + .saturating_add(Weight::from_parts(70_130, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Vesting Vesting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[1, 28]`. fn vest_unlocked(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 39_567 nanoseconds. - Weight::from_ref_time(38_893_789) - // Standard Error: 1_215 - .saturating_add(Weight::from_ref_time(48_517).saturating_mul(l.into())) - // Standard Error: 2_162 - .saturating_add(Weight::from_ref_time(70_277).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `348 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `9286` + // Minimum execution time: 29_229_000 picoseconds. + Weight::from_parts(29_138_693, 0) + .saturating_add(Weight::from_parts(0, 9286)) + // Standard Error: 807 + .saturating_add(Weight::from_parts(29_412, 0).saturating_mul(l.into())) + // Standard Error: 1_437 + .saturating_add(Weight::from_parts(39_790, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Vesting Vesting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[1, 28]`. fn vest_other_locked(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 40_234 nanoseconds. - Weight::from_ref_time(38_730_793) - // Standard Error: 1_240 - .saturating_add(Weight::from_ref_time(55_041).saturating_mul(l.into())) - // Standard Error: 2_207 - .saturating_add(Weight::from_ref_time(95_472).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `451 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `12879` + // Minimum execution time: 32_573_000 picoseconds. + Weight::from_parts(31_521_704, 0) + .saturating_add(Weight::from_parts(0, 12879)) + // Standard Error: 825 + .saturating_add(Weight::from_parts(43_262, 0).saturating_mul(l.into())) + // Standard Error: 1_468 + .saturating_add(Weight::from_parts(71_428, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Vesting Vesting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[1, 28]`. fn vest_other_unlocked(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 39_705 nanoseconds. - Weight::from_ref_time(39_246_321) - // Standard Error: 1_381 - .saturating_add(Weight::from_ref_time(45_703).saturating_mul(l.into())) - // Standard Error: 2_457 - .saturating_add(Weight::from_ref_time(55_853).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `451 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `12879` + // Minimum execution time: 31_541_000 picoseconds. + Weight::from_parts(30_842_897, 0) + .saturating_add(Weight::from_parts(0, 12879)) + // Standard Error: 817 + .saturating_add(Weight::from_parts(40_383, 0).saturating_mul(l.into())) + // Standard Error: 1_455 + .saturating_add(Weight::from_parts(54_874, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Vesting Vesting (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[0, 27]`. fn vested_transfer(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 54_821 nanoseconds. - Weight::from_ref_time(55_267_572) - // Standard Error: 1_793 - .saturating_add(Weight::from_ref_time(42_698).saturating_mul(l.into())) - // Standard Error: 3_191 - .saturating_add(Weight::from_ref_time(43_262).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `522 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `12879` + // Minimum execution time: 49_661_000 picoseconds. + Weight::from_parts(50_641_511, 0) + .saturating_add(Weight::from_parts(0, 12879)) + // Standard Error: 2_384 + .saturating_add(Weight::from_parts(37_527, 0).saturating_mul(l.into())) + // Standard Error: 4_242 + .saturating_add(Weight::from_parts(38_395, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Vesting Vesting (r:1 w:1) - // Storage: System Account (r:2 w:2) - // Storage: Balances Locks (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: System Account (r:2 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[0, 27]`. fn force_vested_transfer(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 54_411 nanoseconds. - Weight::from_ref_time(55_014_023) - // Standard Error: 2_225 - .saturating_add(Weight::from_ref_time(39_475).saturating_mul(l.into())) - // Standard Error: 3_959 - .saturating_add(Weight::from_ref_time(37_900).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `625 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `15482` + // Minimum execution time: 51_480_000 picoseconds. + Weight::from_parts(51_569_723, 0) + .saturating_add(Weight::from_parts(0, 15482)) + // Standard Error: 1_407 + .saturating_add(Weight::from_parts(43_371, 0).saturating_mul(l.into())) + // Standard Error: 2_503 + .saturating_add(Weight::from_parts(61_175, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Vesting Vesting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[2, 28]`. fn not_unlocking_merge_schedules(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 41_139 nanoseconds. - Weight::from_ref_time(40_433_577) - // Standard Error: 1_263 - .saturating_add(Weight::from_ref_time(48_108).saturating_mul(l.into())) - // Standard Error: 2_333 - .saturating_add(Weight::from_ref_time(79_141).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `449 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `12879` + // Minimum execution time: 33_171_000 picoseconds. + Weight::from_parts(32_468_081, 0) + .saturating_add(Weight::from_parts(0, 12879)) + // Standard Error: 700 + .saturating_add(Weight::from_parts(40_970, 0).saturating_mul(l.into())) + // Standard Error: 1_294 + .saturating_add(Weight::from_parts(62_430, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Vesting Vesting (r:1 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Vesting Vesting (r:1 w:1) + /// Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) + /// Storage: Balances Locks (r:1 w:1) + /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[2, 28]`. fn unlocking_merge_schedules(l: u32, s: u32, ) -> Weight { - // Minimum execution time: 41_563 nanoseconds. - Weight::from_ref_time(40_428_260) - // Standard Error: 1_304 - .saturating_add(Weight::from_ref_time(49_855).saturating_mul(l.into())) - // Standard Error: 2_408 - .saturating_add(Weight::from_ref_time(82_149).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `449 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `12879` + // Minimum execution time: 32_956_000 picoseconds. + Weight::from_parts(32_197_623, 0) + .saturating_add(Weight::from_parts(0, 12879)) + // Standard Error: 826 + .saturating_add(Weight::from_parts(46_160, 0).saturating_mul(l.into())) + // Standard Error: 1_526 + .saturating_add(Weight::from_parts(69_938, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } diff --git a/runtime/westend/src/weights/pallet_xcm.rs b/runtime/westend/src/weights/pallet_xcm.rs new file mode 100644 index 000000000000..2282c6df48f2 --- /dev/null +++ b/runtime/westend/src/weights/pallet_xcm.rs @@ -0,0 +1,268 @@ +// Copyright 2017-2022 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . +//! Autogenerated weights for `pallet_xcm` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 + +// Executed Command: +// ./target/production/polkadot +// benchmark +// pallet +// --chain=westend-dev +// --steps=50 +// --repeat=20 +// --pallet=pallet_xcm +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --header=./file_header.txt +// --output=./runtime/westend/src/weights/ + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weight functions for `pallet_xcm`. +pub struct WeightInfo(PhantomData); +impl pallet_xcm::WeightInfo for WeightInfo { + /// Storage: XcmPallet SupportedVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SupportedVersion (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) + /// Proof Skipped: XcmPallet VersionDiscoveryQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SafeXcmVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) + fn send() -> Weight { + // Proof Size summary in bytes: + // Measured: `169` + // Estimated: `14210` + // Minimum execution time: 30_377_000 picoseconds. + Weight::from_parts(30_906_000, 0) + .saturating_add(Weight::from_parts(0, 14210)) + .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().writes(3)) + } + fn teleport_assets() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 20_605_000 picoseconds. + Weight::from_parts(20_951_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + } + fn reserve_transfer_assets() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 20_055_000 picoseconds. + Weight::from_parts(20_427_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + } + /// Storage: Benchmark Override (r:0 w:0) + /// Proof Skipped: Benchmark Override (max_values: None, max_size: None, mode: Measured) + fn execute() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 18_446_744_073_709_551_000 picoseconds. + Weight::from_parts(18_446_744_073_709_551_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + } + /// Storage: XcmPallet SupportedVersion (r:0 w:1) + /// Proof Skipped: XcmPallet SupportedVersion (max_values: None, max_size: None, mode: Measured) + fn force_xcm_version() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 9_682_000 picoseconds. + Weight::from_parts(10_137_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: XcmPallet SafeXcmVersion (r:0 w:1) + /// Proof Skipped: XcmPallet SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) + fn force_default_xcm_version() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_064_000 picoseconds. + Weight::from_parts(3_201_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: XcmPallet VersionNotifiers (r:1 w:1) + /// Proof Skipped: XcmPallet VersionNotifiers (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet QueryCounter (r:1 w:1) + /// Proof Skipped: XcmPallet QueryCounter (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SupportedVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SupportedVersion (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) + /// Proof Skipped: XcmPallet VersionDiscoveryQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SafeXcmVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet Queries (r:0 w:1) + /// Proof Skipped: XcmPallet Queries (max_values: None, max_size: None, mode: Measured) + fn force_subscribe_version_notify() -> Weight { + // Proof Size summary in bytes: + // Measured: `169` + // Estimated: `19667` + // Minimum execution time: 35_049_000 picoseconds. + Weight::from_parts(35_549_000, 0) + .saturating_add(Weight::from_parts(0, 19667)) + .saturating_add(T::DbWeight::get().reads(7)) + .saturating_add(T::DbWeight::get().writes(6)) + } + /// Storage: XcmPallet VersionNotifiers (r:1 w:1) + /// Proof Skipped: XcmPallet VersionNotifiers (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet SupportedVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SupportedVersion (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) + /// Proof Skipped: XcmPallet VersionDiscoveryQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SafeXcmVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet Queries (r:0 w:1) + /// Proof Skipped: XcmPallet Queries (max_values: None, max_size: None, mode: Measured) + fn force_unsubscribe_version_notify() -> Weight { + // Proof Size summary in bytes: + // Measured: `326` + // Estimated: `19112` + // Minimum execution time: 35_083_000 picoseconds. + Weight::from_parts(35_580_000, 0) + .saturating_add(Weight::from_parts(0, 19112)) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().writes(5)) + } + /// Storage: XcmPallet SupportedVersion (r:4 w:2) + /// Proof Skipped: XcmPallet SupportedVersion (max_values: None, max_size: None, mode: Measured) + fn migrate_supported_version() -> Weight { + // Proof Size summary in bytes: + // Measured: `229` + // Estimated: `11119` + // Minimum execution time: 16_113_000 picoseconds. + Weight::from_parts(16_592_000, 0) + .saturating_add(Weight::from_parts(0, 11119)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(2)) + } + /// Storage: XcmPallet VersionNotifiers (r:4 w:2) + /// Proof Skipped: XcmPallet VersionNotifiers (max_values: None, max_size: None, mode: Measured) + fn migrate_version_notifiers() -> Weight { + // Proof Size summary in bytes: + // Measured: `233` + // Estimated: `11123` + // Minimum execution time: 18_071_000 picoseconds. + Weight::from_parts(18_527_000, 0) + .saturating_add(Weight::from_parts(0, 11123)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(2)) + } + /// Storage: XcmPallet VersionNotifyTargets (r:5 w:0) + /// Proof Skipped: XcmPallet VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) + fn already_notified_target() -> Weight { + // Proof Size summary in bytes: + // Measured: `243` + // Estimated: `13608` + // Minimum execution time: 18_498_000 picoseconds. + Weight::from_parts(19_091_000, 0) + .saturating_add(Weight::from_parts(0, 13608)) + .saturating_add(T::DbWeight::get().reads(5)) + } + /// Storage: XcmPallet VersionNotifyTargets (r:2 w:1) + /// Proof Skipped: XcmPallet VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet SupportedVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SupportedVersion (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) + /// Proof Skipped: XcmPallet VersionDiscoveryQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SafeXcmVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) + fn notify_current_targets() -> Weight { + // Proof Size summary in bytes: + // Measured: `239` + // Estimated: `20739` + // Minimum execution time: 31_568_000 picoseconds. + Weight::from_parts(32_163_000, 0) + .saturating_add(Weight::from_parts(0, 20739)) + .saturating_add(T::DbWeight::get().reads(7)) + .saturating_add(T::DbWeight::get().writes(4)) + } + /// Storage: XcmPallet VersionNotifyTargets (r:3 w:0) + /// Proof Skipped: XcmPallet VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) + fn notify_target_migration_fail() -> Weight { + // Proof Size summary in bytes: + // Measured: `272` + // Estimated: `8687` + // Minimum execution time: 9_139_000 picoseconds. + Weight::from_parts(9_619_000, 0) + .saturating_add(Weight::from_parts(0, 8687)) + .saturating_add(T::DbWeight::get().reads(3)) + } + /// Storage: XcmPallet VersionNotifyTargets (r:4 w:2) + /// Proof Skipped: XcmPallet VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) + fn migrate_version_notify_targets() -> Weight { + // Proof Size summary in bytes: + // Measured: `240` + // Estimated: `11130` + // Minimum execution time: 16_944_000 picoseconds. + Weight::from_parts(17_505_000, 0) + .saturating_add(Weight::from_parts(0, 11130)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(2)) + } + /// Storage: XcmPallet VersionNotifyTargets (r:4 w:2) + /// Proof Skipped: XcmPallet VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet SupportedVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SupportedVersion (max_values: None, max_size: None, mode: Measured) + /// Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) + /// Proof Skipped: XcmPallet VersionDiscoveryQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: XcmPallet SafeXcmVersion (r:1 w:0) + /// Proof Skipped: XcmPallet SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) + fn migrate_and_notify_old_targets() -> Weight { + // Proof Size summary in bytes: + // Measured: `243` + // Estimated: `25713` + // Minimum execution time: 38_715_000 picoseconds. + Weight::from_parts(39_473_000, 0) + .saturating_add(Weight::from_parts(0, 25713)) + .saturating_add(T::DbWeight::get().reads(9)) + .saturating_add(T::DbWeight::get().writes(5)) + } +} diff --git a/runtime/westend/src/weights/runtime_common_auctions.rs b/runtime/westend/src/weights/runtime_common_auctions.rs index e0bb8b4569fc..8a3159b0f229 100644 --- a/runtime/westend/src/weights/runtime_common_auctions.rs +++ b/runtime/westend/src/weights/runtime_common_auctions.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_common::auctions` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -44,53 +45,94 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_common::auctions`. pub struct WeightInfo(PhantomData); impl runtime_common::auctions::WeightInfo for WeightInfo { - // Storage: Auctions AuctionInfo (r:1 w:1) - // Storage: Auctions AuctionCounter (r:1 w:1) + /// Storage: Auctions AuctionInfo (r:1 w:1) + /// Proof: Auctions AuctionInfo (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Auctions AuctionCounter (r:1 w:1) + /// Proof: Auctions AuctionCounter (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn new_auction() -> Weight { - // Minimum execution time: 17_789 nanoseconds. - Weight::from_ref_time(18_219_000) + // Proof Size summary in bytes: + // Measured: `4` + // Estimated: `2982` + // Minimum execution time: 12_293_000 picoseconds. + Weight::from_parts(12_518_000, 0) + .saturating_add(Weight::from_parts(0, 2982)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Paras ParaLifecycles (r:1 w:0) - // Storage: Auctions AuctionCounter (r:1 w:0) - // Storage: Auctions AuctionInfo (r:1 w:0) - // Storage: Slots Leases (r:1 w:0) - // Storage: Auctions Winning (r:1 w:1) - // Storage: Auctions ReservedAmounts (r:2 w:2) - // Storage: System Account (r:1 w:1) + /// Storage: Paras ParaLifecycles (r:1 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Auctions AuctionCounter (r:1 w:0) + /// Proof: Auctions AuctionCounter (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Auctions AuctionInfo (r:1 w:0) + /// Proof: Auctions AuctionInfo (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Slots Leases (r:1 w:0) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: Auctions Winning (r:1 w:1) + /// Proof: Auctions Winning (max_values: None, max_size: Some(1920), added: 4395, mode: MaxEncodedLen) + /// Storage: Auctions ReservedAmounts (r:2 w:2) + /// Proof: Auctions ReservedAmounts (max_values: None, max_size: Some(60), added: 2535, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn bid() -> Weight { - // Minimum execution time: 74_919 nanoseconds. - Weight::from_ref_time(76_318_000) + // Proof Size summary in bytes: + // Measured: `571` + // Estimated: `26092` + // Minimum execution time: 67_794_000 picoseconds. + Weight::from_parts(70_851_000, 0) + .saturating_add(Weight::from_parts(0, 26092)) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Auctions AuctionInfo (r:1 w:1) - // Storage: Babe NextRandomness (r:1 w:0) - // Storage: Babe EpochStart (r:1 w:0) - // Storage: Auctions AuctionCounter (r:1 w:0) - // Storage: Auctions Winning (r:3600 w:3600) - // Storage: Auctions ReservedAmounts (r:37 w:36) - // Storage: System Account (r:36 w:36) - // Storage: Slots Leases (r:7 w:7) - // Storage: Paras ParaLifecycles (r:1 w:1) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) - // Storage: Registrar Paras (r:1 w:1) + /// Storage: Auctions AuctionInfo (r:1 w:1) + /// Proof: Auctions AuctionInfo (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Babe NextRandomness (r:1 w:0) + /// Proof: Babe NextRandomness (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: Babe EpochStart (r:1 w:0) + /// Proof: Babe EpochStart (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Auctions AuctionCounter (r:1 w:0) + /// Proof: Auctions AuctionCounter (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Auctions Winning (r:3600 w:3600) + /// Proof: Auctions Winning (max_values: None, max_size: Some(1920), added: 4395, mode: MaxEncodedLen) + /// Storage: Auctions ReservedAmounts (r:37 w:36) + /// Proof: Auctions ReservedAmounts (max_values: None, max_size: Some(60), added: 2535, mode: MaxEncodedLen) + /// Storage: System Account (r:36 w:36) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Slots Leases (r:7 w:7) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:1) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) + /// Storage: Registrar Paras (r:1 w:1) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) fn on_initialize() -> Weight { - // Minimum execution time: 15_538_306 nanoseconds. - Weight::from_ref_time(15_841_046_000) + // Proof Size summary in bytes: + // Measured: `6947646` + // Estimated: `50786890` + // Minimum execution time: 6_233_411_000 picoseconds. + Weight::from_parts(6_331_552_000, 0) + .saturating_add(Weight::from_parts(0, 50786890)) .saturating_add(T::DbWeight::get().reads(3688)) .saturating_add(T::DbWeight::get().writes(3683)) } - // Storage: Auctions ReservedAmounts (r:37 w:36) - // Storage: System Account (r:36 w:36) - // Storage: Auctions Winning (r:0 w:3600) - // Storage: Auctions AuctionInfo (r:0 w:1) + /// Storage: Auctions ReservedAmounts (r:37 w:36) + /// Proof: Auctions ReservedAmounts (max_values: None, max_size: Some(60), added: 2535, mode: MaxEncodedLen) + /// Storage: System Account (r:36 w:36) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Auctions Winning (r:3600 w:3600) + /// Proof: Auctions Winning (max_values: None, max_size: Some(1920), added: 4395, mode: MaxEncodedLen) + /// Storage: Auctions AuctionInfo (r:0 w:1) + /// Proof: Auctions AuctionInfo (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn cancel_auction() -> Weight { - // Minimum execution time: 4_599_501 nanoseconds. - Weight::from_ref_time(4_720_502_000) - .saturating_add(T::DbWeight::get().reads(73)) + // Proof Size summary in bytes: + // Measured: `177732` + // Estimated: `16012473` + // Minimum execution time: 4_778_301_000 picoseconds. + Weight::from_parts(4_852_188_000, 0) + .saturating_add(Weight::from_parts(0, 16012473)) + .saturating_add(T::DbWeight::get().reads(3673)) .saturating_add(T::DbWeight::get().writes(3673)) } } diff --git a/runtime/westend/src/weights/runtime_common_crowdloan.rs b/runtime/westend/src/weights/runtime_common_crowdloan.rs index 91a2694aa020..c26f25245d24 100644 --- a/runtime/westend/src/weights/runtime_common_crowdloan.rs +++ b/runtime/westend/src/weights/runtime_common_crowdloan.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_common::crowdloan` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -44,102 +45,174 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_common::crowdloan`. pub struct WeightInfo(PhantomData); impl runtime_common::crowdloan::WeightInfo for WeightInfo { - // Storage: Crowdloan Funds (r:1 w:1) - // Storage: Registrar Paras (r:1 w:1) - // Storage: Paras ParaLifecycles (r:1 w:0) - // Storage: Crowdloan NextFundIndex (r:1 w:1) + /// Storage: Crowdloan Funds (r:1 w:1) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: Registrar Paras (r:1 w:1) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Crowdloan NextFundIndex (r:1 w:1) + /// Proof Skipped: Crowdloan NextFundIndex (max_values: Some(1), max_size: None, mode: Measured) fn create() -> Weight { - // Minimum execution time: 49_682 nanoseconds. - Weight::from_ref_time(50_541_000) + // Proof Size summary in bytes: + // Measured: `386` + // Estimated: `13424` + // Minimum execution time: 40_035_000 picoseconds. + Weight::from_parts(40_864_000, 0) + .saturating_add(Weight::from_parts(0, 13424)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: Crowdloan Funds (r:1 w:1) - // Storage: Slots Leases (r:1 w:0) - // Storage: Auctions AuctionInfo (r:1 w:0) - // Storage: System Account (r:1 w:1) - // Storage: Balances InactiveIssuance (r:1 w:1) - // Storage: Crowdloan EndingsCount (r:1 w:0) - // Storage: Crowdloan NewRaise (r:1 w:1) - // Storage: unknown [0xd861ea1ebf4800d4b89f4ff787ad79ee96d9a708c85b57da7eb8f9ddeda61291] (r:1 w:1) + /// Storage: Crowdloan Funds (r:1 w:1) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: Slots Leases (r:1 w:0) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: Auctions AuctionInfo (r:1 w:0) + /// Proof: Auctions AuctionInfo (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances InactiveIssuance (r:1 w:1) + /// Proof: Balances InactiveIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: Crowdloan EndingsCount (r:1 w:0) + /// Proof Skipped: Crowdloan EndingsCount (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Crowdloan NewRaise (r:1 w:1) + /// Proof Skipped: Crowdloan NewRaise (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: unknown `0xd861ea1ebf4800d4b89f4ff787ad79ee96d9a708c85b57da7eb8f9ddeda61291` (r:1 w:1) + /// Proof Skipped: unknown `0xd861ea1ebf4800d4b89f4ff787ad79ee96d9a708c85b57da7eb8f9ddeda61291` (r:1 w:1) fn contribute() -> Weight { - // Minimum execution time: 120_926 nanoseconds. - Weight::from_ref_time(122_594_000) + // Proof Size summary in bytes: + // Measured: `336` + // Estimated: `21632` + // Minimum execution time: 109_869_000 picoseconds. + Weight::from_parts(112_585_000, 0) + .saturating_add(Weight::from_parts(0, 21632)) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: Crowdloan Funds (r:1 w:1) - // Storage: System Account (r:2 w:2) - // Storage: Balances InactiveIssuance (r:1 w:1) - // Storage: unknown [0xc85982571aa615c788ef9b2c16f54f25773fd439e8ee1ed2aa3ae43d48e880f0] (r:1 w:1) + /// Storage: Crowdloan Funds (r:1 w:1) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: System Account (r:2 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Balances InactiveIssuance (r:1 w:1) + /// Proof: Balances InactiveIssuance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// Storage: unknown `0xc85982571aa615c788ef9b2c16f54f25773fd439e8ee1ed2aa3ae43d48e880f0` (r:1 w:1) + /// Proof Skipped: unknown `0xc85982571aa615c788ef9b2c16f54f25773fd439e8ee1ed2aa3ae43d48e880f0` (r:1 w:1) fn withdraw() -> Weight { - // Minimum execution time: 60_197 nanoseconds. - Weight::from_ref_time(61_179_000) + // Proof Size summary in bytes: + // Measured: `690` + // Estimated: `16007` + // Minimum execution time: 56_448_000 picoseconds. + Weight::from_parts(57_679_000, 0) + .saturating_add(Weight::from_parts(0, 16007)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: Skipped Metadata (r:0 w:0) + /// Storage: Skipped Metadata (r:0 w:0) + /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) /// The range of component `k` is `[0, 500]`. fn refund(k: u32, ) -> Weight { - // Minimum execution time: 53_020 nanoseconds. - Weight::from_ref_time(18_744_226) - // Standard Error: 13_787 - .saturating_add(Weight::from_ref_time(18_958_635).saturating_mul(k.into())) + // Proof Size summary in bytes: + // Measured: `173 + k * (188 ±0)` + // Estimated: `194 + k * (189 ±0)` + // Minimum execution time: 40_060_000 picoseconds. + Weight::from_parts(54_541_000, 0) + .saturating_add(Weight::from_parts(0, 194)) + // Standard Error: 10_543 + .saturating_add(Weight::from_parts(21_926_735, 0).saturating_mul(k.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(k.into()))) .saturating_add(T::DbWeight::get().writes(3)) .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(k.into()))) + .saturating_add(Weight::from_parts(0, 189).saturating_mul(k.into())) } - // Storage: Crowdloan Funds (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Crowdloan Funds (r:1 w:1) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn dissolve() -> Weight { - // Minimum execution time: 36_923 nanoseconds. - Weight::from_ref_time(38_140_000) + // Proof Size summary in bytes: + // Measured: `375` + // Estimated: `7433` + // Minimum execution time: 29_891_000 picoseconds. + Weight::from_parts(30_447_000, 0) + .saturating_add(Weight::from_parts(0, 7433)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Crowdloan Funds (r:1 w:1) + /// Storage: Crowdloan Funds (r:1 w:1) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) fn edit() -> Weight { - // Minimum execution time: 25_850 nanoseconds. - Weight::from_ref_time(26_610_000) + // Proof Size summary in bytes: + // Measured: `235` + // Estimated: `3700` + // Minimum execution time: 18_393_000 picoseconds. + Weight::from_parts(19_004_000, 0) + .saturating_add(Weight::from_parts(0, 3700)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Crowdloan Funds (r:1 w:0) - // Storage: unknown [0xd861ea1ebf4800d4b89f4ff787ad79ee96d9a708c85b57da7eb8f9ddeda61291] (r:1 w:1) + /// Storage: Crowdloan Funds (r:1 w:0) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: unknown `0xd861ea1ebf4800d4b89f4ff787ad79ee96d9a708c85b57da7eb8f9ddeda61291` (r:1 w:1) + /// Proof Skipped: unknown `0xd861ea1ebf4800d4b89f4ff787ad79ee96d9a708c85b57da7eb8f9ddeda61291` (r:1 w:1) fn add_memo() -> Weight { - // Minimum execution time: 33_319 nanoseconds. - Weight::from_ref_time(33_959_000) + // Proof Size summary in bytes: + // Measured: `412` + // Estimated: `7754` + // Minimum execution time: 25_423_000 picoseconds. + Weight::from_parts(25_924_000, 0) + .saturating_add(Weight::from_parts(0, 7754)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Crowdloan Funds (r:1 w:0) - // Storage: Crowdloan NewRaise (r:1 w:1) + /// Storage: Crowdloan Funds (r:1 w:0) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: Crowdloan NewRaise (r:1 w:1) + /// Proof Skipped: Crowdloan NewRaise (max_values: Some(1), max_size: None, mode: Measured) fn poke() -> Weight { - // Minimum execution time: 26_264 nanoseconds. - Weight::from_ref_time(27_181_000) + // Proof Size summary in bytes: + // Measured: `239` + // Estimated: `5428` + // Minimum execution time: 17_399_000 picoseconds. + Weight::from_parts(18_040_000, 0) + .saturating_add(Weight::from_parts(0, 5428)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Auctions AuctionInfo (r:1 w:0) - // Storage: Crowdloan EndingsCount (r:1 w:1) - // Storage: Crowdloan NewRaise (r:1 w:1) - // Storage: Crowdloan Funds (r:2 w:0) - // Storage: Auctions AuctionCounter (r:1 w:0) - // Storage: Paras ParaLifecycles (r:2 w:0) - // Storage: Slots Leases (r:2 w:0) - // Storage: Auctions Winning (r:1 w:1) - // Storage: Auctions ReservedAmounts (r:2 w:2) - // Storage: System Account (r:2 w:2) + /// Storage: Auctions AuctionInfo (r:1 w:0) + /// Proof: Auctions AuctionInfo (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Crowdloan EndingsCount (r:1 w:1) + /// Proof Skipped: Crowdloan EndingsCount (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Crowdloan NewRaise (r:1 w:1) + /// Proof Skipped: Crowdloan NewRaise (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Crowdloan Funds (r:100 w:0) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: Auctions AuctionCounter (r:1 w:0) + /// Proof: Auctions AuctionCounter (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Paras ParaLifecycles (r:100 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Slots Leases (r:100 w:0) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: Auctions Winning (r:1 w:1) + /// Proof: Auctions Winning (max_values: None, max_size: Some(1920), added: 4395, mode: MaxEncodedLen) + /// Storage: Auctions ReservedAmounts (r:100 w:100) + /// Proof: Auctions ReservedAmounts (max_values: None, max_size: Some(60), added: 2535, mode: MaxEncodedLen) + /// Storage: System Account (r:100 w:100) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `n` is `[2, 100]`. fn on_initialize(n: u32, ) -> Weight { - // Minimum execution time: 106_204 nanoseconds. - Weight::from_ref_time(13_571_340) - // Standard Error: 39_246 - .saturating_add(Weight::from_ref_time(42_499_164).saturating_mul(n.into())) + // Proof Size summary in bytes: + // Measured: `91 + n * (356 ±0)` + // Estimated: `16722 + n * (14348 ±0)` + // Minimum execution time: 109_715_000 picoseconds. + Weight::from_parts(110_192_000, 0) + .saturating_add(Weight::from_parts(0, 16722)) + // Standard Error: 47_032 + .saturating_add(Weight::from_parts(48_388_752, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(3)) .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(n.into()))) + .saturating_add(Weight::from_parts(0, 14348).saturating_mul(n.into())) } } diff --git a/runtime/westend/src/weights/runtime_common_paras_registrar.rs b/runtime/westend/src/weights/runtime_common_paras_registrar.rs index 7d0b7fee59a7..c9ff7ff062cb 100644 --- a/runtime/westend/src/weights/runtime_common_paras_registrar.rs +++ b/runtime/westend/src/weights/runtime_common_paras_registrar.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_common::paras_registrar` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -44,96 +45,169 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_common::paras_registrar`. pub struct WeightInfo(PhantomData); impl runtime_common::paras_registrar::WeightInfo for WeightInfo { - // Storage: Registrar NextFreeParaId (r:1 w:1) - // Storage: Registrar Paras (r:1 w:1) - // Storage: Paras ParaLifecycles (r:1 w:0) + /// Storage: Registrar NextFreeParaId (r:1 w:1) + /// Proof Skipped: Registrar NextFreeParaId (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Registrar Paras (r:1 w:1) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) fn reserve() -> Weight { - // Minimum execution time: 33_634 nanoseconds. - Weight::from_ref_time(34_233_000) + // Proof Size summary in bytes: + // Measured: `97` + // Estimated: `8706` + // Minimum execution time: 26_530_000 picoseconds. + Weight::from_parts(26_950_000, 0) + .saturating_add(Weight::from_parts(0, 8706)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Registrar Paras (r:1 w:1) - // Storage: Paras ParaLifecycles (r:1 w:1) - // Storage: Paras PvfActiveVoteMap (r:1 w:0) - // Storage: Paras CodeByHash (r:1 w:1) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) - // Storage: Paras CodeByHashRefs (r:1 w:1) - // Storage: Paras CurrentCodeHash (r:0 w:1) - // Storage: Paras UpcomingParasGenesis (r:0 w:1) + /// Storage: Registrar Paras (r:1 w:1) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:1) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:0) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHash (r:1 w:1) + /// Proof Skipped: Paras CodeByHash (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHashRefs (r:1 w:1) + /// Proof Skipped: Paras CodeByHashRefs (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CurrentCodeHash (r:0 w:1) + /// Proof Skipped: Paras CurrentCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpcomingParasGenesis (r:0 w:1) + /// Proof Skipped: Paras UpcomingParasGenesis (max_values: None, max_size: None, mode: Measured) fn register() -> Weight { - // Minimum execution time: 7_889_233 nanoseconds. - Weight::from_ref_time(7_969_248_000) + // Proof Size summary in bytes: + // Measured: `270` + // Estimated: `24705` + // Minimum execution time: 6_262_720_000 picoseconds. + Weight::from_parts(6_331_923_000, 0) + .saturating_add(Weight::from_parts(0, 24705)) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(7)) } - // Storage: Registrar Paras (r:1 w:1) - // Storage: Paras ParaLifecycles (r:1 w:1) - // Storage: Paras PvfActiveVoteMap (r:1 w:0) - // Storage: Paras CodeByHash (r:1 w:1) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) - // Storage: Paras CodeByHashRefs (r:1 w:1) - // Storage: Paras CurrentCodeHash (r:0 w:1) - // Storage: Paras UpcomingParasGenesis (r:0 w:1) + /// Storage: Registrar Paras (r:1 w:1) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:1) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:0) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHash (r:1 w:1) + /// Proof Skipped: Paras CodeByHash (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHashRefs (r:1 w:1) + /// Proof Skipped: Paras CodeByHashRefs (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CurrentCodeHash (r:0 w:1) + /// Proof Skipped: Paras CurrentCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpcomingParasGenesis (r:0 w:1) + /// Proof Skipped: Paras UpcomingParasGenesis (max_values: None, max_size: None, mode: Measured) fn force_register() -> Weight { - // Minimum execution time: 7_817_133 nanoseconds. - Weight::from_ref_time(7_954_858_000) + // Proof Size summary in bytes: + // Measured: `187` + // Estimated: `23958` + // Minimum execution time: 6_268_211_000 picoseconds. + Weight::from_parts(6_331_892_000, 0) + .saturating_add(Weight::from_parts(0, 23958)) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(7)) } - // Storage: Registrar Paras (r:1 w:1) - // Storage: Paras ParaLifecycles (r:1 w:1) - // Storage: Paras FutureCodeHash (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) - // Storage: Registrar PendingSwap (r:0 w:1) + /// Storage: Registrar Paras (r:1 w:1) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:1) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras FutureCodeHash (r:1 w:0) + /// Proof Skipped: Paras FutureCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) + /// Storage: Registrar PendingSwap (r:0 w:1) + /// Proof Skipped: Registrar PendingSwap (max_values: None, max_size: None, mode: Measured) fn deregister() -> Weight { - // Minimum execution time: 51_071 nanoseconds. - Weight::from_ref_time(51_758_000) + // Proof Size summary in bytes: + // Measured: `435` + // Estimated: `17955` + // Minimum execution time: 40_534_000 picoseconds. + Weight::from_parts(41_596_000, 0) + .saturating_add(Weight::from_parts(0, 17955)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Registrar Paras (r:1 w:0) - // Storage: Paras ParaLifecycles (r:2 w:2) - // Storage: Registrar PendingSwap (r:1 w:1) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) - // Storage: Crowdloan Funds (r:2 w:2) - // Storage: Slots Leases (r:2 w:2) + /// Storage: Registrar Paras (r:1 w:0) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:2 w:2) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Registrar PendingSwap (r:1 w:1) + /// Proof Skipped: Registrar PendingSwap (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) + /// Storage: Crowdloan Funds (r:2 w:2) + /// Proof Skipped: Crowdloan Funds (max_values: None, max_size: None, mode: Measured) + /// Storage: Slots Leases (r:2 w:2) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) fn swap() -> Weight { - // Minimum execution time: 45_428 nanoseconds. - Weight::from_ref_time(46_493_000) + // Proof Size summary in bytes: + // Measured: `637` + // Estimated: `34159` + // Minimum execution time: 46_421_000 picoseconds. + Weight::from_parts(47_968_000, 0) + .saturating_add(Weight::from_parts(0, 34159)) .saturating_add(T::DbWeight::get().reads(10)) .saturating_add(T::DbWeight::get().writes(8)) } - // Storage: Paras FutureCodeHash (r:1 w:1) - // Storage: Paras UpgradeRestrictionSignal (r:1 w:1) - // Storage: Paras CurrentCodeHash (r:1 w:0) - // Storage: Paras UpgradeCooldowns (r:1 w:1) - // Storage: Paras PvfActiveVoteMap (r:1 w:0) - // Storage: Paras CodeByHash (r:1 w:1) - // Storage: Paras UpcomingUpgrades (r:1 w:1) - // Storage: System Digest (r:1 w:1) - // Storage: Paras CodeByHashRefs (r:1 w:1) - // Storage: Paras FutureCodeUpgrades (r:0 w:1) + /// Storage: Paras FutureCodeHash (r:1 w:1) + /// Proof Skipped: Paras FutureCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeRestrictionSignal (r:1 w:1) + /// Proof Skipped: Paras UpgradeRestrictionSignal (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CurrentCodeHash (r:1 w:0) + /// Proof Skipped: Paras CurrentCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeCooldowns (r:1 w:1) + /// Proof Skipped: Paras UpgradeCooldowns (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:0) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHash (r:1 w:1) + /// Proof Skipped: Paras CodeByHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpcomingUpgrades (r:1 w:1) + /// Proof Skipped: Paras UpcomingUpgrades (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System Digest (r:1 w:1) + /// Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras CodeByHashRefs (r:1 w:1) + /// Proof Skipped: Paras CodeByHashRefs (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras FutureCodeUpgrades (r:0 w:1) + /// Proof Skipped: Paras FutureCodeUpgrades (max_values: None, max_size: None, mode: Measured) /// The range of component `b` is `[1, 3145728]`. fn schedule_code_upgrade(b: u32, ) -> Weight { - // Minimum execution time: 45_002 nanoseconds. - Weight::from_ref_time(45_518_000) + // Proof Size summary in bytes: + // Measured: `28` + // Estimated: `25525` + // Minimum execution time: 40_176_000 picoseconds. + Weight::from_parts(40_282_000, 0) + .saturating_add(Weight::from_parts(0, 25525)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(2_487).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(1_964, 0).saturating_mul(b.into())) .saturating_add(T::DbWeight::get().reads(9)) .saturating_add(T::DbWeight::get().writes(8)) } - // Storage: Paras Heads (r:0 w:1) + /// Storage: Paras Heads (r:0 w:1) + /// Proof Skipped: Paras Heads (max_values: None, max_size: None, mode: Measured) /// The range of component `b` is `[1, 1048576]`. fn set_current_head(b: u32, ) -> Weight { - // Minimum execution time: 14_792 nanoseconds. - Weight::from_ref_time(14_975_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 8_876_000 picoseconds. + Weight::from_parts(9_068_000, 0) + .saturating_add(Weight::from_parts(0, 0)) // Standard Error: 2 - .saturating_add(Weight::from_ref_time(1_070).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(864, 0).saturating_mul(b.into())) .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/runtime/westend/src/weights/runtime_common_slots.rs b/runtime/westend/src/weights/runtime_common_slots.rs index 54f465342c86..6aa098f609cb 100644 --- a/runtime/westend/src/weights/runtime_common_slots.rs +++ b/runtime/westend/src/weights/runtime_common_slots.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_common::slots` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -44,52 +45,85 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_common::slots`. pub struct WeightInfo(PhantomData); impl runtime_common::slots::WeightInfo for WeightInfo { - // Storage: Slots Leases (r:1 w:1) - // Storage: System Account (r:1 w:1) + /// Storage: Slots Leases (r:1 w:1) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn force_lease() -> Weight { - // Minimum execution time: 34_409 nanoseconds. - Weight::from_ref_time(34_895_000) + // Proof Size summary in bytes: + // Measured: `181` + // Estimated: `7239` + // Minimum execution time: 25_272_000 picoseconds. + Weight::from_parts(25_634_000, 0) + .saturating_add(Weight::from_parts(0, 7239)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: Paras Parachains (r:1 w:0) - // Storage: Slots Leases (r:101 w:100) - // Storage: Paras ParaLifecycles (r:100 w:100) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) - // Storage: Registrar Paras (r:100 w:100) + /// Storage: Paras Parachains (r:1 w:0) + /// Proof Skipped: Paras Parachains (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Slots Leases (r:101 w:100) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:200 w:200) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) + /// Storage: Registrar Paras (r:100 w:100) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[0, 100]`. /// The range of component `t` is `[0, 100]`. fn manage_lease_period_start(c: u32, t: u32, ) -> Weight { - // Minimum execution time: 552_213 nanoseconds. - Weight::from_ref_time(558_639_000) - // Standard Error: 69_329 - .saturating_add(Weight::from_ref_time(2_323_517).saturating_mul(c.into())) - // Standard Error: 69_329 - .saturating_add(Weight::from_ref_time(12_591_535).saturating_mul(t.into())) + // Proof Size summary in bytes: + // Measured: `0 + c * (47 ±0) + t * (308 ±0)` + // Estimated: `7228 + c * (2781 ±0) + t * (9308 ±0)` + // Minimum execution time: 631_951_000 picoseconds. + Weight::from_parts(645_205_000, 0) + .saturating_add(Weight::from_parts(0, 7228)) + // Standard Error: 83_112 + .saturating_add(Weight::from_parts(2_677_718, 0).saturating_mul(c.into())) + // Standard Error: 83_112 + .saturating_add(Weight::from_parts(11_541_814, 0).saturating_mul(t.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(c.into()))) .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(t.into()))) .saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(c.into()))) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(t.into()))) + .saturating_add(Weight::from_parts(0, 2781).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(0, 9308).saturating_mul(t.into())) } - // Storage: Slots Leases (r:1 w:1) - // Storage: System Account (r:8 w:8) + /// Storage: Slots Leases (r:1 w:1) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: System Account (r:8 w:8) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn clear_all_leases() -> Weight { - // Minimum execution time: 102_709 nanoseconds. - Weight::from_ref_time(117_734_000) + // Proof Size summary in bytes: + // Measured: `2653` + // Estimated: `27932` + // Minimum execution time: 97_503_000 picoseconds. + Weight::from_parts(99_104_000, 0) + .saturating_add(Weight::from_parts(0, 27932)) .saturating_add(T::DbWeight::get().reads(9)) .saturating_add(T::DbWeight::get().writes(9)) } - // Storage: Slots Leases (r:1 w:0) - // Storage: Paras ParaLifecycles (r:1 w:1) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) - // Storage: Registrar Paras (r:1 w:1) + /// Storage: Slots Leases (r:1 w:0) + /// Proof Skipped: Slots Leases (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:1) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) + /// Storage: Registrar Paras (r:1 w:1) + /// Proof Skipped: Registrar Paras (max_values: None, max_size: None, mode: Measured) fn trigger_onboard() -> Weight { - // Minimum execution time: 33_393 nanoseconds. - Weight::from_ref_time(35_738_000) + // Proof Size summary in bytes: + // Measured: `564` + // Estimated: `18165` + // Minimum execution time: 27_263_000 picoseconds. + Weight::from_parts(28_512_000, 0) + .saturating_add(Weight::from_parts(0, 18165)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(3)) } diff --git a/runtime/westend/src/weights/runtime_parachains_configuration.rs b/runtime/westend/src/weights/runtime_parachains_configuration.rs index 70bdbfbc9cff..309d4357ebdc 100644 --- a/runtime/westend/src/weights/runtime_parachains_configuration.rs +++ b/runtime/westend/src/weights/runtime_parachains_configuration.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_parachains::configuration` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -44,53 +45,93 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_parachains::configuration`. pub struct WeightInfo(PhantomData); impl runtime_parachains::configuration::WeightInfo for WeightInfo { - // Storage: Configuration PendingConfigs (r:1 w:1) - // Storage: Configuration BypassConsistencyCheck (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Storage: Configuration PendingConfigs (r:1 w:1) + /// Proof Skipped: Configuration PendingConfigs (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration BypassConsistencyCheck (r:1 w:0) + /// Proof Skipped: Configuration BypassConsistencyCheck (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) fn set_config_with_block_number() -> Weight { - // Minimum execution time: 13_223 nanoseconds. - Weight::from_ref_time(13_661_000) + // Proof Size summary in bytes: + // Measured: `90` + // Estimated: `4725` + // Minimum execution time: 9_426_000 picoseconds. + Weight::from_parts(9_764_000, 0) + .saturating_add(Weight::from_parts(0, 4725)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Configuration PendingConfigs (r:1 w:1) - // Storage: Configuration BypassConsistencyCheck (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Storage: Configuration PendingConfigs (r:1 w:1) + /// Proof Skipped: Configuration PendingConfigs (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration BypassConsistencyCheck (r:1 w:0) + /// Proof Skipped: Configuration BypassConsistencyCheck (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) fn set_config_with_u32() -> Weight { - // Minimum execution time: 13_033 nanoseconds. - Weight::from_ref_time(13_422_000) + // Proof Size summary in bytes: + // Measured: `90` + // Estimated: `4725` + // Minimum execution time: 9_836_000 picoseconds. + Weight::from_parts(10_178_000, 0) + .saturating_add(Weight::from_parts(0, 4725)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Configuration PendingConfigs (r:1 w:1) - // Storage: Configuration BypassConsistencyCheck (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Storage: Configuration PendingConfigs (r:1 w:1) + /// Proof Skipped: Configuration PendingConfigs (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration BypassConsistencyCheck (r:1 w:0) + /// Proof Skipped: Configuration BypassConsistencyCheck (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) fn set_config_with_option_u32() -> Weight { - // Minimum execution time: 13_233 nanoseconds. - Weight::from_ref_time(13_459_000) + // Proof Size summary in bytes: + // Measured: `90` + // Estimated: `4725` + // Minimum execution time: 9_515_000 picoseconds. + Weight::from_parts(9_857_000, 0) + .saturating_add(Weight::from_parts(0, 4725)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Configuration PendingConfigs (r:1 w:1) - // Storage: Configuration BypassConsistencyCheck (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Storage: Configuration PendingConfigs (r:1 w:1) + /// Proof Skipped: Configuration PendingConfigs (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration BypassConsistencyCheck (r:1 w:0) + /// Proof Skipped: Configuration BypassConsistencyCheck (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) fn set_config_with_weight() -> Weight { - // Minimum execution time: 13_238 nanoseconds. - Weight::from_ref_time(13_908_000) + // Proof Size summary in bytes: + // Measured: `90` + // Estimated: `4725` + // Minimum execution time: 9_432_000 picoseconds. + Weight::from_parts(9_864_000, 0) + .saturating_add(Weight::from_parts(0, 4725)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Benchmark Override (r:0 w:0) + /// Storage: Benchmark Override (r:0 w:0) + /// Proof Skipped: Benchmark Override (max_values: None, max_size: None, mode: Measured) fn set_hrmp_open_request_ttl() -> Weight { - // Minimum execution time: 2_000_000_000 nanoseconds. - Weight::from_ref_time(2_000_000_000_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_000_000_000_000 picoseconds. + Weight::from_parts(2_000_000_000_000, 0) + .saturating_add(Weight::from_parts(0, 0)) } - // Storage: Configuration PendingConfigs (r:1 w:1) - // Storage: Configuration BypassConsistencyCheck (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Storage: Configuration PendingConfigs (r:1 w:1) + /// Proof Skipped: Configuration PendingConfigs (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Configuration BypassConsistencyCheck (r:1 w:0) + /// Proof Skipped: Configuration BypassConsistencyCheck (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) fn set_config_with_balance() -> Weight { - // Minimum execution time: 12_976 nanoseconds. - Weight::from_ref_time(13_433_000) + // Proof Size summary in bytes: + // Measured: `90` + // Estimated: `4725` + // Minimum execution time: 9_655_000 picoseconds. + Weight::from_parts(9_975_000, 0) + .saturating_add(Weight::from_parts(0, 4725)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/westend/src/weights/runtime_parachains_disputes.rs b/runtime/westend/src/weights/runtime_parachains_disputes.rs index 13b5af7baea9..b8474366409a 100644 --- a/runtime/westend/src/weights/runtime_parachains_disputes.rs +++ b/runtime/westend/src/weights/runtime_parachains_disputes.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_parachains::disputes` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -44,10 +45,15 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_parachains::disputes`. pub struct WeightInfo(PhantomData); impl runtime_parachains::disputes::WeightInfo for WeightInfo { - // Storage: ParasDisputes Frozen (r:0 w:1) + /// Storage: ParasDisputes Frozen (r:0 w:1) + /// Proof Skipped: ParasDisputes Frozen (max_values: Some(1), max_size: None, mode: Measured) fn force_unfreeze() -> Weight { - // Minimum execution time: 4_522 nanoseconds. - Weight::from_ref_time(4_719_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_950_000 picoseconds. + Weight::from_parts(3_089_000, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/runtime/westend/src/weights/runtime_parachains_disputes_slashing.rs b/runtime/westend/src/weights/runtime_parachains_disputes_slashing.rs index 5946f0f9ae1e..2db9804f6856 100644 --- a/runtime/westend/src/weights/runtime_parachains_disputes_slashing.rs +++ b/runtime/westend/src/weights/runtime_parachains_disputes_slashing.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_parachains::disputes::slashing` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -44,25 +45,56 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_parachains::disputes::slashing`. pub struct WeightInfo(PhantomData); impl runtime_parachains::disputes::slashing::WeightInfo for WeightInfo { - // Storage: Session CurrentIndex (r:1 w:0) - // Storage: Historical HistoricalSessions (r:1 w:0) - // Storage: ParaSessionInfo Sessions (r:1 w:0) - // Storage: ParasSlashing UnappliedSlashes (r:1 w:1) - // Storage: Offences ReportsByKindIndex (r:1 w:1) - // Storage: Offences ConcurrentReportsIndex (r:1 w:1) - // Storage: Offences Reports (r:1 w:1) - // Storage: Staking SlashRewardFraction (r:1 w:0) - // Storage: Staking ActiveEra (r:1 w:0) - // Storage: Staking ErasStartSessionIndex (r:1 w:0) - // Storage: Staking Invulnerables (r:1 w:0) - // Storage: Staking ValidatorSlashInEra (r:1 w:0) + /// Storage: Session CurrentIndex (r:1 w:0) + /// Proof Skipped: Session CurrentIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Historical HistoricalSessions (r:1 w:0) + /// Proof: Historical HistoricalSessions (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) + /// Storage: ParaSessionInfo Sessions (r:1 w:0) + /// Proof Skipped: ParaSessionInfo Sessions (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasSlashing UnappliedSlashes (r:1 w:1) + /// Proof Skipped: ParasSlashing UnappliedSlashes (max_values: None, max_size: None, mode: Measured) + /// Storage: Offences ReportsByKindIndex (r:1 w:1) + /// Proof Skipped: Offences ReportsByKindIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Offences ConcurrentReportsIndex (r:1 w:1) + /// Proof Skipped: Offences ConcurrentReportsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Offences Reports (r:1 w:1) + /// Proof Skipped: Offences Reports (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking SlashRewardFraction (r:1 w:0) + /// Proof: Staking SlashRewardFraction (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Staking ActiveEra (r:1 w:0) + /// Proof: Staking ActiveEra (max_values: Some(1), max_size: Some(13), added: 508, mode: MaxEncodedLen) + /// Storage: Staking ErasStartSessionIndex (r:1 w:0) + /// Proof: Staking ErasStartSessionIndex (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Staking Invulnerables (r:1 w:0) + /// Proof Skipped: Staking Invulnerables (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Staking ValidatorSlashInEra (r:1 w:1) + /// Proof: Staking ValidatorSlashInEra (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + /// Storage: Staking SlashingSpans (r:1 w:1) + /// Proof Skipped: Staking SlashingSpans (max_values: None, max_size: None, mode: Measured) + /// Storage: Staking SpanSlash (r:1 w:1) + /// Proof: Staking SpanSlash (max_values: None, max_size: Some(76), added: 2551, mode: MaxEncodedLen) + /// Storage: Staking OffendingValidators (r:1 w:1) + /// Proof Skipped: Staking OffendingValidators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Session Validators (r:1 w:0) + /// Proof Skipped: Session Validators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Session DisabledValidators (r:1 w:1) + /// Proof Skipped: Session DisabledValidators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System Digest (r:1 w:1) + /// Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Staking UnappliedSlashes (r:1 w:1) + /// Proof Skipped: Staking UnappliedSlashes (max_values: None, max_size: None, mode: Measured) /// The range of component `n` is `[4, 300]`. fn report_dispute_lost(n: u32, ) -> Weight { - // Minimum execution time: 92_781 nanoseconds. - Weight::from_ref_time(106_750_804) - // Standard Error: 3_003 - .saturating_add(Weight::from_ref_time(234_660).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(12)) - .saturating_add(T::DbWeight::get().writes(4)) + // Proof Size summary in bytes: + // Measured: `4893 + n * (289 ±0)` + // Estimated: `109178 + n * (3784 ±0)` + // Minimum execution time: 83_746_000 picoseconds. + Weight::from_parts(127_246_143, 0) + .saturating_add(Weight::from_parts(0, 109178)) + // Standard Error: 4_051 + .saturating_add(Weight::from_parts(390_162, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(18)) + .saturating_add(T::DbWeight::get().writes(10)) + .saturating_add(Weight::from_parts(0, 3784).saturating_mul(n.into())) } } diff --git a/runtime/westend/src/weights/runtime_parachains_hrmp.rs b/runtime/westend/src/weights/runtime_parachains_hrmp.rs index f8e9518d9f52..f764543e1b2e 100644 --- a/runtime/westend/src/weights/runtime_parachains_hrmp.rs +++ b/runtime/westend/src/weights/runtime_parachains_hrmp.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_parachains::hrmp` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -44,139 +45,235 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_parachains::hrmp`. pub struct WeightInfo(PhantomData); impl runtime_parachains::hrmp::WeightInfo for WeightInfo { - // Storage: Paras ParaLifecycles (r:2 w:0) - // Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) - // Storage: Hrmp HrmpChannels (r:1 w:0) - // Storage: Hrmp HrmpEgressChannelsIndex (r:1 w:0) - // Storage: Hrmp HrmpOpenChannelRequestCount (r:1 w:1) - // Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) - // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) - // Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Storage: Paras ParaLifecycles (r:2 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequests (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannels (r:1 w:0) + /// Proof Skipped: Hrmp HrmpChannels (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpEgressChannelsIndex (r:1 w:0) + /// Proof Skipped: Hrmp HrmpEgressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestCount (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestCount (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestsList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) fn hrmp_init_open_channel() -> Weight { - // Minimum execution time: 43_917 nanoseconds. - Weight::from_ref_time(44_362_000) + // Proof Size summary in bytes: + // Measured: `307` + // Estimated: `30671` + // Minimum execution time: 35_433_000 picoseconds. + Weight::from_parts(35_919_000, 0) + .saturating_add(Weight::from_parts(0, 30671)) .saturating_add(T::DbWeight::get().reads(9)) .saturating_add(T::DbWeight::get().writes(5)) } - // Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) - // Storage: Paras ParaLifecycles (r:1 w:0) - // Storage: Hrmp HrmpIngressChannelsIndex (r:1 w:0) - // Storage: Hrmp HrmpAcceptedChannelRequestCount (r:1 w:1) - // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) - // Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequests (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:1 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpIngressChannelsIndex (r:1 w:0) + /// Proof Skipped: Hrmp HrmpIngressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpAcceptedChannelRequestCount (r:1 w:1) + /// Proof Skipped: Hrmp HrmpAcceptedChannelRequestCount (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) fn hrmp_accept_open_channel() -> Weight { - // Minimum execution time: 42_369 nanoseconds. - Weight::from_ref_time(43_251_000) + // Proof Size summary in bytes: + // Measured: `421` + // Estimated: `23316` + // Minimum execution time: 32_866_000 picoseconds. + Weight::from_parts(33_161_000, 0) + .saturating_add(Weight::from_parts(0, 23316)) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Hrmp HrmpChannels (r:1 w:0) - // Storage: Hrmp HrmpCloseChannelRequests (r:1 w:1) - // Storage: Hrmp HrmpCloseChannelRequestsList (r:1 w:1) - // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) - // Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Storage: Hrmp HrmpChannels (r:1 w:0) + /// Proof Skipped: Hrmp HrmpChannels (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpCloseChannelRequests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpCloseChannelRequests (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpCloseChannelRequestsList (r:1 w:1) + /// Proof Skipped: Hrmp HrmpCloseChannelRequestsList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) fn hrmp_close_channel() -> Weight { - // Minimum execution time: 38_591 nanoseconds. - Weight::from_ref_time(39_570_000) + // Proof Size summary in bytes: + // Measured: `238` + // Estimated: `16535` + // Minimum execution time: 28_318_000 picoseconds. + Weight::from_parts(28_693_000, 0) + .saturating_add(Weight::from_parts(0, 16535)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Hrmp HrmpIngressChannelsIndex (r:128 w:127) - // Storage: Hrmp HrmpEgressChannelsIndex (r:1 w:1) - // Storage: Hrmp HrmpChannels (r:127 w:127) - // Storage: Hrmp HrmpAcceptedChannelRequestCount (r:0 w:1) - // Storage: Hrmp HrmpChannelContents (r:0 w:127) - // Storage: Hrmp HrmpOpenChannelRequestCount (r:0 w:1) + /// Storage: Hrmp HrmpIngressChannelsIndex (r:128 w:128) + /// Proof Skipped: Hrmp HrmpIngressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpEgressChannelsIndex (r:128 w:128) + /// Proof Skipped: Hrmp HrmpEgressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannels (r:254 w:254) + /// Proof Skipped: Hrmp HrmpChannels (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpAcceptedChannelRequestCount (r:0 w:1) + /// Proof Skipped: Hrmp HrmpAcceptedChannelRequestCount (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannelContents (r:0 w:254) + /// Proof Skipped: Hrmp HrmpChannelContents (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestCount (r:0 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestCount (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[0, 127]`. /// The range of component `e` is `[0, 127]`. fn force_clean_hrmp(i: u32, e: u32, ) -> Weight { - // Minimum execution time: 897_819 nanoseconds. - Weight::from_ref_time(902_600_000) - // Standard Error: 82_324 - .saturating_add(Weight::from_ref_time(2_829_565).saturating_mul(i.into())) - // Standard Error: 82_324 - .saturating_add(Weight::from_ref_time(2_838_434).saturating_mul(e.into())) + // Proof Size summary in bytes: + // Measured: `158 + i * (100 ±0) + e * (100 ±0)` + // Estimated: `8850 + i * (5550 ±0) + e * (5550 ±0)` + // Minimum execution time: 1_092_332_000 picoseconds. + Weight::from_parts(1_097_373_000, 0) + .saturating_add(Weight::from_parts(0, 8850)) + // Standard Error: 97_518 + .saturating_add(Weight::from_parts(3_170_650, 0).saturating_mul(i.into())) + // Standard Error: 97_518 + .saturating_add(Weight::from_parts(3_304_346, 0).saturating_mul(e.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(i.into()))) .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(e.into()))) .saturating_add(T::DbWeight::get().writes(4)) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(i.into()))) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(e.into()))) + .saturating_add(Weight::from_parts(0, 5550).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(0, 5550).saturating_mul(e.into())) } - // Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:0) - // Storage: Hrmp HrmpOpenChannelRequests (r:2 w:2) - // Storage: Paras ParaLifecycles (r:4 w:0) - // Storage: Hrmp HrmpIngressChannelsIndex (r:2 w:2) - // Storage: Hrmp HrmpEgressChannelsIndex (r:2 w:2) - // Storage: Hrmp HrmpOpenChannelRequestCount (r:2 w:2) - // Storage: Hrmp HrmpAcceptedChannelRequestCount (r:2 w:2) - // Storage: Hrmp HrmpChannels (r:0 w:2) + /// Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestsList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequests (r:128 w:128) + /// Proof Skipped: Hrmp HrmpOpenChannelRequests (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras ParaLifecycles (r:256 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpIngressChannelsIndex (r:128 w:128) + /// Proof Skipped: Hrmp HrmpIngressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpEgressChannelsIndex (r:128 w:128) + /// Proof Skipped: Hrmp HrmpEgressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestCount (r:128 w:128) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestCount (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpAcceptedChannelRequestCount (r:128 w:128) + /// Proof Skipped: Hrmp HrmpAcceptedChannelRequestCount (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannels (r:0 w:128) + /// Proof Skipped: Hrmp HrmpChannels (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[0, 128]`. fn force_process_hrmp_open(c: u32, ) -> Weight { - // Minimum execution time: 10_578 nanoseconds. - Weight::from_ref_time(1_653_589) - // Standard Error: 18_210 - .saturating_add(Weight::from_ref_time(16_416_142).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `386 + c * (136 ±0)` + // Estimated: `10441 + c * (18413 ±0)` + // Minimum execution time: 6_543_000 picoseconds. + Weight::from_parts(4_530_781, 0) + .saturating_add(Weight::from_parts(0, 10441)) + // Standard Error: 15_086 + .saturating_add(Weight::from_parts(19_196_371, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().reads((7_u64).saturating_mul(c.into()))) .saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes((6_u64).saturating_mul(c.into()))) + .saturating_add(Weight::from_parts(0, 18413).saturating_mul(c.into())) } - // Storage: Hrmp HrmpCloseChannelRequestsList (r:1 w:0) - // Storage: Hrmp HrmpChannels (r:2 w:2) - // Storage: Hrmp HrmpEgressChannelsIndex (r:2 w:2) - // Storage: Hrmp HrmpIngressChannelsIndex (r:2 w:2) - // Storage: Hrmp HrmpCloseChannelRequests (r:0 w:2) - // Storage: Hrmp HrmpChannelContents (r:0 w:2) + /// Storage: Hrmp HrmpCloseChannelRequestsList (r:1 w:1) + /// Proof Skipped: Hrmp HrmpCloseChannelRequestsList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannels (r:128 w:128) + /// Proof Skipped: Hrmp HrmpChannels (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpEgressChannelsIndex (r:128 w:128) + /// Proof Skipped: Hrmp HrmpEgressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpIngressChannelsIndex (r:128 w:128) + /// Proof Skipped: Hrmp HrmpIngressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpCloseChannelRequests (r:0 w:128) + /// Proof Skipped: Hrmp HrmpCloseChannelRequests (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannelContents (r:0 w:128) + /// Proof Skipped: Hrmp HrmpChannelContents (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[0, 128]`. fn force_process_hrmp_close(c: u32, ) -> Weight { - // Minimum execution time: 7_168 nanoseconds. - Weight::from_ref_time(7_254_000) - // Standard Error: 7_374 - .saturating_add(Weight::from_ref_time(9_950_496).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `229 + c * (124 ±0)` + // Estimated: `5739 + c * (8175 ±0)` + // Minimum execution time: 5_011_000 picoseconds. + Weight::from_parts(3_071_714, 0) + .saturating_add(Weight::from_parts(0, 5739)) + // Standard Error: 11_400 + .saturating_add(Weight::from_parts(11_626_470, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(c.into()))) .saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes((5_u64).saturating_mul(c.into()))) + .saturating_add(Weight::from_parts(0, 8175).saturating_mul(c.into())) } - // Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) - // Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) - // Storage: Hrmp HrmpOpenChannelRequestCount (r:1 w:1) + /// Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestsList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequests (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestCount (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestCount (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[0, 128]`. fn hrmp_cancel_open_request(c: u32, ) -> Weight { - // Minimum execution time: 26_546 nanoseconds. - Weight::from_ref_time(32_577_364) - // Standard Error: 1_362 - .saturating_add(Weight::from_ref_time(98_626).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `920 + c * (13 ±0)` + // Estimated: `10587 + c * (45 ±0)` + // Minimum execution time: 21_329_000 picoseconds. + Weight::from_parts(26_928_511, 0) + .saturating_add(Weight::from_parts(0, 10587)) + // Standard Error: 1_543 + .saturating_add(Weight::from_parts(76_029, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 45).saturating_mul(c.into())) } - // Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) - // Storage: Hrmp HrmpOpenChannelRequests (r:2 w:2) + /// Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestsList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequests (r:128 w:128) + /// Proof Skipped: Hrmp HrmpOpenChannelRequests (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[0, 128]`. fn clean_open_channel_requests(c: u32, ) -> Weight { - // Minimum execution time: 4_742 nanoseconds. - Weight::from_ref_time(3_317_809) - // Standard Error: 3_693 - .saturating_add(Weight::from_ref_time(2_619_705).saturating_mul(c.into())) + // Proof Size summary in bytes: + // Measured: `137 + c * (63 ±0)` + // Estimated: `2743 + c * (2602 ±0)` + // Minimum execution time: 3_993_000 picoseconds. + Weight::from_parts(5_777_300, 0) + .saturating_add(Weight::from_parts(0, 2743)) + // Standard Error: 2_430 + .saturating_add(Weight::from_parts(3_128_607, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(c.into()))) .saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(c.into()))) + .saturating_add(Weight::from_parts(0, 2602).saturating_mul(c.into())) } - // Storage: Paras ParaLifecycles (r:2 w:0) - // Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) - // Storage: Hrmp HrmpChannels (r:1 w:0) - // Storage: Hrmp HrmpEgressChannelsIndex (r:1 w:0) - // Storage: Hrmp HrmpOpenChannelRequestCount (r:1 w:1) - // Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) - // Storage: Dmp DownwardMessageQueueHeads (r:2 w:2) - // Storage: Dmp DownwardMessageQueues (r:2 w:2) - // Storage: Hrmp HrmpIngressChannelsIndex (r:1 w:0) - // Storage: Hrmp HrmpAcceptedChannelRequestCount (r:1 w:1) + /// Storage: Paras ParaLifecycles (r:2 w:0) + /// Proof Skipped: Paras ParaLifecycles (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequests (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannels (r:1 w:0) + /// Proof Skipped: Hrmp HrmpChannels (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpEgressChannelsIndex (r:1 w:0) + /// Proof Skipped: Hrmp HrmpEgressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestCount (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestCount (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpOpenChannelRequestsList (r:1 w:1) + /// Proof Skipped: Hrmp HrmpOpenChannelRequestsList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:2 w:2) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueueHeads (r:2 w:2) + /// Proof Skipped: Dmp DownwardMessageQueueHeads (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpIngressChannelsIndex (r:1 w:0) + /// Proof Skipped: Hrmp HrmpIngressChannelsIndex (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpAcceptedChannelRequestCount (r:1 w:1) + /// Proof Skipped: Hrmp HrmpAcceptedChannelRequestCount (max_values: None, max_size: None, mode: Measured) fn force_open_hrmp_channel() -> Weight { - // Minimum execution time: 54_456 nanoseconds. - Weight::from_ref_time(55_129_000) + // Proof Size summary in bytes: + // Measured: `307` + // Estimated: `43165` + // Minimum execution time: 49_553_000 picoseconds. + Weight::from_parts(50_044_000, 0) + .saturating_add(Weight::from_parts(0, 43165)) .saturating_add(T::DbWeight::get().reads(13)) .saturating_add(T::DbWeight::get().writes(8)) } diff --git a/runtime/westend/src/weights/runtime_parachains_initializer.rs b/runtime/westend/src/weights/runtime_parachains_initializer.rs index c63df05cd27e..2de6260397d4 100644 --- a/runtime/westend/src/weights/runtime_parachains_initializer.rs +++ b/runtime/westend/src/weights/runtime_parachains_initializer.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_parachains::initializer` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -44,14 +45,20 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_parachains::initializer`. pub struct WeightInfo(PhantomData); impl runtime_parachains::initializer::WeightInfo for WeightInfo { - // Storage: System Digest (r:1 w:1) + /// Storage: System Digest (r:1 w:1) + /// Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `d` is `[0, 65536]`. fn force_approve(d: u32, ) -> Weight { - // Minimum execution time: 8_245 nanoseconds. - Weight::from_ref_time(11_065_500) - // Standard Error: 7 - .saturating_add(Weight::from_ref_time(1_321).saturating_mul(d.into())) + // Proof Size summary in bytes: + // Measured: `0 + d * (11 ±0)` + // Estimated: `1480 + d * (11 ±0)` + // Minimum execution time: 3_941_000 picoseconds. + Weight::from_parts(5_787_276, 0) + .saturating_add(Weight::from_parts(0, 1480)) + // Standard Error: 9 + .saturating_add(Weight::from_parts(1_348, 0).saturating_mul(d.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 11).saturating_mul(d.into())) } } diff --git a/runtime/westend/src/weights/runtime_parachains_paras.rs b/runtime/westend/src/weights/runtime_parachains_paras.rs index 9994a9df747c..73da0547187e 100644 --- a/runtime/westend/src/weights/runtime_parachains_paras.rs +++ b/runtime/westend/src/weights/runtime_parachains_paras.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_parachains::paras` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -44,148 +45,232 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_parachains::paras`. pub struct WeightInfo(PhantomData); impl runtime_parachains::paras::WeightInfo for WeightInfo { - // Storage: Paras CurrentCodeHash (r:1 w:1) - // Storage: Paras CodeByHashRefs (r:1 w:1) - // Storage: Paras PastCodeMeta (r:1 w:1) - // Storage: Paras PastCodePruning (r:1 w:1) - // Storage: Paras PastCodeHash (r:0 w:1) - // Storage: Paras CodeByHash (r:0 w:1) + /// Storage: Paras CurrentCodeHash (r:1 w:1) + /// Proof Skipped: Paras CurrentCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHashRefs (r:1 w:1) + /// Proof Skipped: Paras CodeByHashRefs (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras PastCodeMeta (r:1 w:1) + /// Proof Skipped: Paras PastCodeMeta (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras PastCodePruning (r:1 w:1) + /// Proof Skipped: Paras PastCodePruning (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PastCodeHash (r:0 w:1) + /// Proof Skipped: Paras PastCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHash (r:0 w:1) + /// Proof Skipped: Paras CodeByHash (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[1, 3145728]`. fn force_set_current_code(c: u32, ) -> Weight { - // Minimum execution time: 38_597 nanoseconds. - Weight::from_ref_time(39_125_000) + // Proof Size summary in bytes: + // Measured: `8309` + // Estimated: `61734` + // Minimum execution time: 33_122_000 picoseconds. + Weight::from_parts(33_355_000, 0) + .saturating_add(Weight::from_parts(0, 61734)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(2_472).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(1_946, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(6)) } - // Storage: Paras Heads (r:0 w:1) + /// Storage: Paras Heads (r:0 w:1) + /// Proof Skipped: Paras Heads (max_values: None, max_size: None, mode: Measured) /// The range of component `s` is `[1, 1048576]`. fn force_set_current_head(s: u32, ) -> Weight { - // Minimum execution time: 13_713 nanoseconds. - Weight::from_ref_time(13_856_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 8_359_000 picoseconds. + Weight::from_parts(8_431_000, 0) + .saturating_add(Weight::from_parts(0, 0)) // Standard Error: 2 - .saturating_add(Weight::from_ref_time(1_069).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(863, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Paras FutureCodeHash (r:1 w:1) - // Storage: Paras CurrentCodeHash (r:1 w:0) - // Storage: Paras UpgradeCooldowns (r:1 w:1) - // Storage: Paras PvfActiveVoteMap (r:1 w:0) - // Storage: Paras CodeByHash (r:1 w:1) - // Storage: Paras UpcomingUpgrades (r:1 w:1) - // Storage: System Digest (r:1 w:1) - // Storage: Paras CodeByHashRefs (r:1 w:1) - // Storage: Paras FutureCodeUpgrades (r:0 w:1) - // Storage: Paras UpgradeRestrictionSignal (r:0 w:1) + /// Storage: Paras FutureCodeHash (r:1 w:1) + /// Proof Skipped: Paras FutureCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CurrentCodeHash (r:1 w:0) + /// Proof Skipped: Paras CurrentCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeCooldowns (r:1 w:1) + /// Proof Skipped: Paras UpgradeCooldowns (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:0) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHash (r:1 w:1) + /// Proof Skipped: Paras CodeByHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpcomingUpgrades (r:1 w:1) + /// Proof Skipped: Paras UpcomingUpgrades (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System Digest (r:1 w:1) + /// Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras CodeByHashRefs (r:1 w:1) + /// Proof Skipped: Paras CodeByHashRefs (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras FutureCodeUpgrades (r:0 w:1) + /// Proof Skipped: Paras FutureCodeUpgrades (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeRestrictionSignal (r:0 w:1) + /// Proof Skipped: Paras UpgradeRestrictionSignal (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[1, 3145728]`. fn force_schedule_code_upgrade(c: u32, ) -> Weight { - // Minimum execution time: 65_408 nanoseconds. - Weight::from_ref_time(65_781_000) + // Proof Size summary in bytes: + // Measured: `16462` + // Estimated: `186400` + // Minimum execution time: 56_932_000 picoseconds. + Weight::from_parts(57_430_000, 0) + .saturating_add(Weight::from_parts(0, 186400)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(2_492).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(1_970, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(8)) } - // Storage: Paras FutureCodeUpgrades (r:1 w:0) - // Storage: Paras Heads (r:0 w:1) - // Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Storage: Paras FutureCodeUpgrades (r:1 w:0) + /// Proof Skipped: Paras FutureCodeUpgrades (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras Heads (r:0 w:1) + /// Proof Skipped: Paras Heads (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Proof Skipped: Paras UpgradeGoAheadSignal (max_values: None, max_size: None, mode: Measured) /// The range of component `s` is `[1, 1048576]`. fn force_note_new_head(s: u32, ) -> Weight { - // Minimum execution time: 19_951 nanoseconds. - Weight::from_ref_time(20_237_000) + // Proof Size summary in bytes: + // Measured: `95` + // Estimated: `3750` + // Minimum execution time: 13_727_000 picoseconds. + Weight::from_parts(13_878_000, 0) + .saturating_add(Weight::from_parts(0, 3750)) // Standard Error: 2 - .saturating_add(Weight::from_ref_time(1_067).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(866, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras ActionsQueue (r:1 w:1) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) fn force_queue_action() -> Weight { - // Minimum execution time: 25_010 nanoseconds. - Weight::from_ref_time(25_535_000) + // Proof Size summary in bytes: + // Measured: `4251` + // Estimated: `13452` + // Minimum execution time: 19_034_000 picoseconds. + Weight::from_parts(20_025_000, 0) + .saturating_add(Weight::from_parts(0, 13452)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Paras PvfActiveVoteMap (r:1 w:0) - // Storage: Paras CodeByHash (r:1 w:1) + /// Storage: Paras PvfActiveVoteMap (r:1 w:0) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHash (r:1 w:1) + /// Proof Skipped: Paras CodeByHash (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[1, 3145728]`. fn add_trusted_validation_code(c: u32, ) -> Weight { - // Minimum execution time: 9_464 nanoseconds. - Weight::from_ref_time(9_696_000) + // Proof Size summary in bytes: + // Measured: `28` + // Estimated: `6986` + // Minimum execution time: 7_959_000 picoseconds. + Weight::from_parts(8_157_000, 0) + .saturating_add(Weight::from_parts(0, 6986)) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(2_478).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(1_956, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: Paras CodeByHashRefs (r:1 w:0) - // Storage: Paras CodeByHash (r:0 w:1) + /// Storage: Paras CodeByHashRefs (r:1 w:0) + /// Proof Skipped: Paras CodeByHashRefs (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras CodeByHash (r:0 w:1) + /// Proof Skipped: Paras CodeByHash (max_values: None, max_size: None, mode: Measured) fn poke_unused_validation_code() -> Weight { - // Minimum execution time: 7_497 nanoseconds. - Weight::from_ref_time(7_566_000) + // Proof Size summary in bytes: + // Measured: `28` + // Estimated: `3521` + // Minimum execution time: 5_960_000 picoseconds. + Weight::from_parts(6_182_000, 0) + .saturating_add(Weight::from_parts(0, 3521)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras PvfActiveVoteMap (r:1 w:1) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:1) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) fn include_pvf_check_statement() -> Weight { - // Minimum execution time: 93_014 nanoseconds. - Weight::from_ref_time(95_787_000) + // Proof Size summary in bytes: + // Measured: `26645` + // Estimated: `86370` + // Minimum execution time: 87_957_000 picoseconds. + Weight::from_parts(89_200_000, 0) + .saturating_add(Weight::from_parts(0, 86370)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras PvfActiveVoteMap (r:1 w:1) - // Storage: Paras PvfActiveVoteList (r:1 w:1) - // Storage: Paras UpcomingUpgrades (r:1 w:1) - // Storage: System Digest (r:1 w:1) - // Storage: Paras FutureCodeUpgrades (r:0 w:100) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:1) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteList (r:1 w:1) + /// Proof Skipped: Paras PvfActiveVoteList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras UpcomingUpgrades (r:1 w:1) + /// Proof Skipped: Paras UpcomingUpgrades (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System Digest (r:1 w:1) + /// Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras FutureCodeUpgrades (r:0 w:100) + /// Proof Skipped: Paras FutureCodeUpgrades (max_values: None, max_size: None, mode: Measured) fn include_pvf_check_statement_finalize_upgrade_accept() -> Weight { - // Minimum execution time: 665_749 nanoseconds. - Weight::from_ref_time(673_167_000) + // Proof Size summary in bytes: + // Measured: `27199` + // Estimated: `201283` + // Minimum execution time: 784_285_000 picoseconds. + Weight::from_parts(790_260_000, 0) + .saturating_add(Weight::from_parts(0, 201283)) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(104)) } - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras PvfActiveVoteMap (r:1 w:1) - // Storage: Paras PvfActiveVoteList (r:1 w:1) - // Storage: Paras CodeByHashRefs (r:1 w:1) - // Storage: Paras CodeByHash (r:0 w:1) - // Storage: Paras UpgradeGoAheadSignal (r:0 w:100) - // Storage: Paras FutureCodeHash (r:0 w:100) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:1) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) fn include_pvf_check_statement_finalize_upgrade_reject() -> Weight { - // Minimum execution time: 629_664 nanoseconds. - Weight::from_ref_time(637_935_000) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(204)) + // Proof Size summary in bytes: + // Measured: `27177` + // Estimated: `87966` + // Minimum execution time: 86_970_000 picoseconds. + Weight::from_parts(87_886_000, 0) + .saturating_add(Weight::from_parts(0, 87966)) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(1)) } - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras PvfActiveVoteMap (r:1 w:1) - // Storage: Paras PvfActiveVoteList (r:1 w:1) - // Storage: Paras ActionsQueue (r:1 w:1) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:1) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteList (r:1 w:1) + /// Proof Skipped: Paras PvfActiveVoteList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras ActionsQueue (r:1 w:1) + /// Proof Skipped: Paras ActionsQueue (max_values: None, max_size: None, mode: Measured) fn include_pvf_check_statement_finalize_onboarding_accept() -> Weight { - // Minimum execution time: 517_474 nanoseconds. - Weight::from_ref_time(521_580_000) + // Proof Size summary in bytes: + // Measured: `26667` + // Estimated: `144720` + // Minimum execution time: 621_464_000 picoseconds. + Weight::from_parts(627_840_000, 0) + .saturating_add(Weight::from_parts(0, 144720)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(3)) } - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Paras PvfActiveVoteMap (r:1 w:1) - // Storage: Paras PvfActiveVoteList (r:1 w:1) - // Storage: Paras CodeByHashRefs (r:1 w:1) - // Storage: Paras ParaLifecycles (r:0 w:100) - // Storage: Paras CodeByHash (r:0 w:1) - // Storage: Paras CurrentCodeHash (r:0 w:100) - // Storage: Paras UpcomingParasGenesis (r:0 w:100) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras PvfActiveVoteMap (r:1 w:1) + /// Proof Skipped: Paras PvfActiveVoteMap (max_values: None, max_size: None, mode: Measured) fn include_pvf_check_statement_finalize_onboarding_reject() -> Weight { - // Minimum execution time: 699_356 nanoseconds. - Weight::from_ref_time(719_508_000) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(304)) + // Proof Size summary in bytes: + // Measured: `26645` + // Estimated: `86370` + // Minimum execution time: 86_876_000 picoseconds. + Weight::from_parts(87_789_000, 0) + .saturating_add(Weight::from_parts(0, 86370)) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/runtime/westend/src/weights/runtime_parachains_paras_inherent.rs b/runtime/westend/src/weights/runtime_parachains_paras_inherent.rs index 520901a706af..349e2f062b5f 100644 --- a/runtime/westend/src/weights/runtime_parachains_paras_inherent.rs +++ b/runtime/westend/src/weights/runtime_parachains_paras_inherent.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_parachains::paras_inherent` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -44,160 +45,300 @@ use sp_std::marker::PhantomData; /// Weight functions for `runtime_parachains::paras_inherent`. pub struct WeightInfo(PhantomData); impl runtime_parachains::paras_inherent::WeightInfo for WeightInfo { - // Storage: ParaInherent Included (r:1 w:1) - // Storage: System ParentHash (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Babe AuthorVrfRandomness (r:1 w:0) - // Storage: ParaSessionInfo Sessions (r:1 w:0) - // Storage: ParasDisputes Disputes (r:1 w:1) - // Storage: ParasDisputes Included (r:1 w:1) - // Storage: ParasDisputes SpamSlots (r:1 w:1) - // Storage: ParaScheduler AvailabilityCores (r:1 w:1) - // Storage: ParaSessionInfo AccountKeys (r:1 w:0) - // Storage: Session Validators (r:1 w:0) - // Storage: Staking ActiveEra (r:1 w:0) - // Storage: Staking ErasRewardPoints (r:1 w:1) - // Storage: ParasDisputes Frozen (r:1 w:0) - // Storage: ParaInclusion PendingAvailability (r:2 w:1) - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: Paras Parachains (r:1 w:0) - // Storage: ParaInclusion PendingAvailabilityCommitments (r:1 w:1) - // Storage: Dmp DownwardMessageQueues (r:1 w:1) - // Storage: Hrmp HrmpChannelDigests (r:1 w:1) - // Storage: Paras FutureCodeUpgrades (r:1 w:0) - // Storage: ParaInherent OnChainVotes (r:1 w:1) - // Storage: ParaScheduler SessionStartBlock (r:1 w:0) - // Storage: ParaScheduler ParathreadQueue (r:1 w:1) - // Storage: ParaScheduler Scheduled (r:1 w:1) - // Storage: ParaScheduler ValidatorGroups (r:1 w:0) - // Storage: Ump NeedsDispatch (r:1 w:1) - // Storage: Ump NextDispatchRoundStartWith (r:1 w:1) - // Storage: Hrmp HrmpWatermarks (r:0 w:1) - // Storage: Paras Heads (r:0 w:1) - // Storage: Paras UpgradeGoAheadSignal (r:0 w:1) - // Storage: Session CurrentIndex (r:1 w:0) - // Storage: ParasSlashing UnappliedSlashes (r:0 w:1) + /// Storage: ParaInherent Included (r:1 w:1) + /// Proof Skipped: ParaInherent Included (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System ParentHash (r:1 w:0) + /// Proof: System ParentHash (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Babe AuthorVrfRandomness (r:1 w:0) + /// Proof: Babe AuthorVrfRandomness (max_values: Some(1), max_size: Some(33), added: 528, mode: MaxEncodedLen) + /// Storage: ParaSessionInfo Sessions (r:1 w:0) + /// Proof Skipped: ParaSessionInfo Sessions (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasDisputes Disputes (r:1 w:1) + /// Proof Skipped: ParasDisputes Disputes (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasDisputes BackersOnDisputes (r:1 w:1) + /// Proof Skipped: ParasDisputes BackersOnDisputes (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaScheduler AvailabilityCores (r:1 w:1) + /// Proof Skipped: ParaScheduler AvailabilityCores (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasDisputes Included (r:1 w:1) + /// Proof Skipped: ParasDisputes Included (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaSessionInfo AccountKeys (r:1 w:0) + /// Proof Skipped: ParaSessionInfo AccountKeys (max_values: None, max_size: None, mode: Measured) + /// Storage: Session Validators (r:1 w:0) + /// Proof Skipped: Session Validators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Staking ActiveEra (r:1 w:0) + /// Proof: Staking ActiveEra (max_values: Some(1), max_size: Some(13), added: 508, mode: MaxEncodedLen) + /// Storage: Staking ErasRewardPoints (r:1 w:1) + /// Proof Skipped: Staking ErasRewardPoints (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasDisputes Frozen (r:1 w:0) + /// Proof Skipped: ParasDisputes Frozen (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaInclusion PendingAvailability (r:2 w:1) + /// Proof Skipped: ParaInclusion PendingAvailability (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras Parachains (r:1 w:0) + /// Proof Skipped: Paras Parachains (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaInclusion PendingAvailabilityCommitments (r:1 w:1) + /// Proof Skipped: ParaInclusion PendingAvailabilityCommitments (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannelDigests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpChannelDigests (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras FutureCodeUpgrades (r:1 w:0) + /// Proof Skipped: Paras FutureCodeUpgrades (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaInherent OnChainVotes (r:1 w:1) + /// Proof Skipped: ParaInherent OnChainVotes (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler SessionStartBlock (r:1 w:0) + /// Proof Skipped: ParaScheduler SessionStartBlock (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler ParathreadQueue (r:1 w:1) + /// Proof Skipped: ParaScheduler ParathreadQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler Scheduled (r:1 w:1) + /// Proof Skipped: ParaScheduler Scheduled (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler ValidatorGroups (r:1 w:0) + /// Proof Skipped: ParaScheduler ValidatorGroups (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Ump NeedsDispatch (r:1 w:1) + /// Proof Skipped: Ump NeedsDispatch (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Ump NextDispatchRoundStartWith (r:1 w:1) + /// Proof Skipped: Ump NextDispatchRoundStartWith (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Hrmp HrmpWatermarks (r:0 w:1) + /// Proof Skipped: Hrmp HrmpWatermarks (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras Heads (r:0 w:1) + /// Proof Skipped: Paras Heads (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Proof Skipped: Paras UpgradeGoAheadSignal (max_values: None, max_size: None, mode: Measured) /// The range of component `v` is `[10, 200]`. fn enter_variable_disputes(v: u32, ) -> Weight { - // Minimum execution time: 834_898 nanoseconds. - Weight::from_ref_time(372_495_289) - // Standard Error: 26_994 - .saturating_add(Weight::from_ref_time(48_296_040).saturating_mul(v.into())) - .saturating_add(T::DbWeight::get().reads(29)) - .saturating_add(T::DbWeight::get().writes(18)) + // Proof Size summary in bytes: + // Measured: `50561` + // Estimated: `1478228 + v * (23 ±0)` + // Minimum execution time: 768_115_000 picoseconds. + Weight::from_parts(294_738_363, 0) + .saturating_add(Weight::from_parts(0, 1478228)) + // Standard Error: 18_829 + .saturating_add(Weight::from_parts(48_431_584, 0).saturating_mul(v.into())) + .saturating_add(T::DbWeight::get().reads(28)) + .saturating_add(T::DbWeight::get().writes(16)) + .saturating_add(Weight::from_parts(0, 23).saturating_mul(v.into())) } - // Storage: ParaInherent Included (r:1 w:1) - // Storage: System ParentHash (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Babe AuthorVrfRandomness (r:1 w:0) - // Storage: ParaScheduler AvailabilityCores (r:1 w:1) - // Storage: ParasDisputes Frozen (r:1 w:0) - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: Paras Parachains (r:1 w:0) - // Storage: ParaInclusion PendingAvailability (r:2 w:1) - // Storage: ParaInclusion PendingAvailabilityCommitments (r:1 w:1) - // Storage: ParaSessionInfo AccountKeys (r:1 w:0) - // Storage: Session Validators (r:1 w:0) - // Storage: Staking ActiveEra (r:1 w:0) - // Storage: Staking ErasRewardPoints (r:1 w:1) - // Storage: Dmp DownwardMessageQueues (r:1 w:1) - // Storage: Hrmp HrmpChannelDigests (r:1 w:1) - // Storage: Paras FutureCodeUpgrades (r:1 w:0) - // Storage: ParaInherent OnChainVotes (r:1 w:1) - // Storage: ParasDisputes Disputes (r:1 w:0) - // Storage: ParaScheduler SessionStartBlock (r:1 w:0) - // Storage: ParaScheduler ParathreadQueue (r:1 w:1) - // Storage: ParaScheduler Scheduled (r:1 w:1) - // Storage: ParaScheduler ValidatorGroups (r:1 w:0) - // Storage: Ump NeedsDispatch (r:1 w:1) - // Storage: Ump NextDispatchRoundStartWith (r:1 w:1) - // Storage: ParaInclusion AvailabilityBitfields (r:0 w:1) - // Storage: ParasDisputes Included (r:0 w:1) - // Storage: Hrmp HrmpWatermarks (r:0 w:1) - // Storage: Paras Heads (r:0 w:1) - // Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Storage: ParaInherent Included (r:1 w:1) + /// Proof Skipped: ParaInherent Included (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System ParentHash (r:1 w:0) + /// Proof: System ParentHash (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Babe AuthorVrfRandomness (r:1 w:0) + /// Proof: Babe AuthorVrfRandomness (max_values: Some(1), max_size: Some(33), added: 528, mode: MaxEncodedLen) + /// Storage: ParaScheduler AvailabilityCores (r:1 w:1) + /// Proof Skipped: ParaScheduler AvailabilityCores (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasDisputes Frozen (r:1 w:0) + /// Proof Skipped: ParasDisputes Frozen (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras Parachains (r:1 w:0) + /// Proof Skipped: Paras Parachains (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaInclusion PendingAvailability (r:2 w:1) + /// Proof Skipped: ParaInclusion PendingAvailability (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaInclusion PendingAvailabilityCommitments (r:1 w:1) + /// Proof Skipped: ParaInclusion PendingAvailabilityCommitments (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaSessionInfo AccountKeys (r:1 w:0) + /// Proof Skipped: ParaSessionInfo AccountKeys (max_values: None, max_size: None, mode: Measured) + /// Storage: Session Validators (r:1 w:0) + /// Proof Skipped: Session Validators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Staking ActiveEra (r:1 w:0) + /// Proof: Staking ActiveEra (max_values: Some(1), max_size: Some(13), added: 508, mode: MaxEncodedLen) + /// Storage: Staking ErasRewardPoints (r:1 w:1) + /// Proof Skipped: Staking ErasRewardPoints (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannelDigests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpChannelDigests (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras FutureCodeUpgrades (r:1 w:0) + /// Proof Skipped: Paras FutureCodeUpgrades (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaInherent OnChainVotes (r:1 w:1) + /// Proof Skipped: ParaInherent OnChainVotes (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasDisputes Disputes (r:1 w:0) + /// Proof Skipped: ParasDisputes Disputes (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaScheduler SessionStartBlock (r:1 w:0) + /// Proof Skipped: ParaScheduler SessionStartBlock (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler ParathreadQueue (r:1 w:1) + /// Proof Skipped: ParaScheduler ParathreadQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler Scheduled (r:1 w:1) + /// Proof Skipped: ParaScheduler Scheduled (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler ValidatorGroups (r:1 w:0) + /// Proof Skipped: ParaScheduler ValidatorGroups (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Ump NeedsDispatch (r:1 w:1) + /// Proof Skipped: Ump NeedsDispatch (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Ump NextDispatchRoundStartWith (r:1 w:1) + /// Proof Skipped: Ump NextDispatchRoundStartWith (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaInclusion AvailabilityBitfields (r:0 w:1) + /// Proof Skipped: ParaInclusion AvailabilityBitfields (max_values: None, max_size: None, mode: Measured) + /// Storage: ParasDisputes Included (r:0 w:1) + /// Proof Skipped: ParasDisputes Included (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpWatermarks (r:0 w:1) + /// Proof Skipped: Hrmp HrmpWatermarks (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras Heads (r:0 w:1) + /// Proof Skipped: Paras Heads (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Proof Skipped: Paras UpgradeGoAheadSignal (max_values: None, max_size: None, mode: Measured) fn enter_bitfields() -> Weight { - // Minimum execution time: 346_792 nanoseconds. - Weight::from_ref_time(354_173_000) + // Proof Size summary in bytes: + // Measured: `42395` + // Estimated: `1200183` + // Minimum execution time: 322_846_000 picoseconds. + Weight::from_parts(333_533_000, 0) + .saturating_add(Weight::from_parts(0, 1200183)) .saturating_add(T::DbWeight::get().reads(26)) .saturating_add(T::DbWeight::get().writes(17)) } - // Storage: ParaInherent Included (r:1 w:1) - // Storage: System ParentHash (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Babe AuthorVrfRandomness (r:1 w:0) - // Storage: ParaScheduler AvailabilityCores (r:1 w:1) - // Storage: ParasDisputes Frozen (r:1 w:0) - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: Paras Parachains (r:1 w:0) - // Storage: ParaInclusion PendingAvailability (r:2 w:1) - // Storage: ParaInclusion PendingAvailabilityCommitments (r:1 w:1) - // Storage: ParaSessionInfo AccountKeys (r:1 w:0) - // Storage: Session Validators (r:1 w:0) - // Storage: Staking ActiveEra (r:1 w:0) - // Storage: Staking ErasRewardPoints (r:1 w:1) - // Storage: Dmp DownwardMessageQueues (r:1 w:1) - // Storage: Hrmp HrmpChannelDigests (r:1 w:1) - // Storage: Paras FutureCodeUpgrades (r:1 w:0) - // Storage: ParaInherent OnChainVotes (r:1 w:1) - // Storage: ParasDisputes Disputes (r:2 w:0) - // Storage: ParaScheduler SessionStartBlock (r:1 w:0) - // Storage: ParaScheduler ParathreadQueue (r:1 w:1) - // Storage: ParaScheduler Scheduled (r:1 w:1) - // Storage: ParaScheduler ValidatorGroups (r:1 w:0) - // Storage: Paras CurrentCodeHash (r:1 w:0) - // Storage: Ump RelayDispatchQueueSize (r:1 w:0) - // Storage: Ump NeedsDispatch (r:1 w:1) - // Storage: Ump NextDispatchRoundStartWith (r:1 w:1) - // Storage: ParasDisputes Included (r:0 w:1) - // Storage: Hrmp HrmpWatermarks (r:0 w:1) - // Storage: Paras Heads (r:0 w:1) - // Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Storage: ParaInherent Included (r:1 w:1) + /// Proof Skipped: ParaInherent Included (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System ParentHash (r:1 w:0) + /// Proof: System ParentHash (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Babe AuthorVrfRandomness (r:1 w:0) + /// Proof: Babe AuthorVrfRandomness (max_values: Some(1), max_size: Some(33), added: 528, mode: MaxEncodedLen) + /// Storage: ParaScheduler AvailabilityCores (r:1 w:1) + /// Proof Skipped: ParaScheduler AvailabilityCores (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasDisputes Frozen (r:1 w:0) + /// Proof Skipped: ParasDisputes Frozen (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras Parachains (r:1 w:0) + /// Proof Skipped: Paras Parachains (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaInclusion PendingAvailability (r:2 w:1) + /// Proof Skipped: ParaInclusion PendingAvailability (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaInclusion PendingAvailabilityCommitments (r:1 w:1) + /// Proof Skipped: ParaInclusion PendingAvailabilityCommitments (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaSessionInfo AccountKeys (r:1 w:0) + /// Proof Skipped: ParaSessionInfo AccountKeys (max_values: None, max_size: None, mode: Measured) + /// Storage: Session Validators (r:1 w:0) + /// Proof Skipped: Session Validators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Staking ActiveEra (r:1 w:0) + /// Proof: Staking ActiveEra (max_values: Some(1), max_size: Some(13), added: 508, mode: MaxEncodedLen) + /// Storage: Staking ErasRewardPoints (r:1 w:1) + /// Proof Skipped: Staking ErasRewardPoints (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannelDigests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpChannelDigests (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras FutureCodeUpgrades (r:1 w:0) + /// Proof Skipped: Paras FutureCodeUpgrades (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaInherent OnChainVotes (r:1 w:1) + /// Proof Skipped: ParaInherent OnChainVotes (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasDisputes Disputes (r:2 w:0) + /// Proof Skipped: ParasDisputes Disputes (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaScheduler SessionStartBlock (r:1 w:0) + /// Proof Skipped: ParaScheduler SessionStartBlock (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler ParathreadQueue (r:1 w:1) + /// Proof Skipped: ParaScheduler ParathreadQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler Scheduled (r:1 w:1) + /// Proof Skipped: ParaScheduler Scheduled (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler ValidatorGroups (r:1 w:0) + /// Proof Skipped: ParaScheduler ValidatorGroups (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras CurrentCodeHash (r:1 w:0) + /// Proof Skipped: Paras CurrentCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Ump RelayDispatchQueueSize (r:1 w:0) + /// Proof Skipped: Ump RelayDispatchQueueSize (max_values: None, max_size: None, mode: Measured) + /// Storage: Ump NeedsDispatch (r:1 w:1) + /// Proof Skipped: Ump NeedsDispatch (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Ump NextDispatchRoundStartWith (r:1 w:1) + /// Proof Skipped: Ump NextDispatchRoundStartWith (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasDisputes Included (r:0 w:1) + /// Proof Skipped: ParasDisputes Included (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpWatermarks (r:0 w:1) + /// Proof Skipped: Hrmp HrmpWatermarks (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras Heads (r:0 w:1) + /// Proof Skipped: Paras Heads (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Proof Skipped: Paras UpgradeGoAheadSignal (max_values: None, max_size: None, mode: Measured) /// The range of component `v` is `[101, 200]`. fn enter_backed_candidates_variable(v: u32, ) -> Weight { - // Minimum execution time: 5_715_617 nanoseconds. - Weight::from_ref_time(982_972_842) - // Standard Error: 48_959 - .saturating_add(Weight::from_ref_time(47_653_655).saturating_mul(v.into())) + // Proof Size summary in bytes: + // Measured: `42426` + // Estimated: `1252851` + // Minimum execution time: 5_562_919_000 picoseconds. + Weight::from_parts(788_126_549, 0) + .saturating_add(Weight::from_parts(0, 1252851)) + // Standard Error: 40_209 + .saturating_add(Weight::from_parts(47_710_957, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().reads(29)) .saturating_add(T::DbWeight::get().writes(16)) } - // Storage: ParaInherent Included (r:1 w:1) - // Storage: System ParentHash (r:1 w:0) - // Storage: ParasShared CurrentSessionIndex (r:1 w:0) - // Storage: Babe AuthorVrfRandomness (r:1 w:0) - // Storage: ParaScheduler AvailabilityCores (r:1 w:1) - // Storage: ParasDisputes Frozen (r:1 w:0) - // Storage: ParasShared ActiveValidatorKeys (r:1 w:0) - // Storage: Paras Parachains (r:1 w:0) - // Storage: ParaInclusion PendingAvailability (r:2 w:1) - // Storage: ParaInclusion PendingAvailabilityCommitments (r:1 w:1) - // Storage: ParaSessionInfo AccountKeys (r:1 w:0) - // Storage: Session Validators (r:1 w:0) - // Storage: Staking ActiveEra (r:1 w:0) - // Storage: Staking ErasRewardPoints (r:1 w:1) - // Storage: Dmp DownwardMessageQueues (r:1 w:1) - // Storage: Hrmp HrmpChannelDigests (r:1 w:1) - // Storage: Paras FutureCodeUpgrades (r:1 w:0) - // Storage: ParaInherent OnChainVotes (r:1 w:1) - // Storage: ParasDisputes Disputes (r:2 w:0) - // Storage: ParaScheduler SessionStartBlock (r:1 w:0) - // Storage: ParaScheduler ParathreadQueue (r:1 w:1) - // Storage: ParaScheduler Scheduled (r:1 w:1) - // Storage: ParaScheduler ValidatorGroups (r:1 w:0) - // Storage: Paras CurrentCodeHash (r:1 w:0) - // Storage: Paras FutureCodeHash (r:1 w:0) - // Storage: Paras UpgradeRestrictionSignal (r:1 w:0) - // Storage: Ump RelayDispatchQueueSize (r:1 w:0) - // Storage: Ump NeedsDispatch (r:1 w:1) - // Storage: Ump NextDispatchRoundStartWith (r:1 w:1) - // Storage: ParasDisputes Included (r:0 w:1) - // Storage: Hrmp HrmpWatermarks (r:0 w:1) - // Storage: Paras Heads (r:0 w:1) - // Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Storage: ParaInherent Included (r:1 w:1) + /// Proof Skipped: ParaInherent Included (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: System ParentHash (r:1 w:0) + /// Proof: System ParentHash (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// Storage: ParasShared CurrentSessionIndex (r:1 w:0) + /// Proof Skipped: ParasShared CurrentSessionIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Babe AuthorVrfRandomness (r:1 w:0) + /// Proof: Babe AuthorVrfRandomness (max_values: Some(1), max_size: Some(33), added: 528, mode: MaxEncodedLen) + /// Storage: ParaScheduler AvailabilityCores (r:1 w:1) + /// Proof Skipped: ParaScheduler AvailabilityCores (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasDisputes Frozen (r:1 w:0) + /// Proof Skipped: ParasDisputes Frozen (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasShared ActiveValidatorKeys (r:1 w:0) + /// Proof Skipped: ParasShared ActiveValidatorKeys (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras Parachains (r:1 w:0) + /// Proof Skipped: Paras Parachains (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaInclusion PendingAvailability (r:2 w:1) + /// Proof Skipped: ParaInclusion PendingAvailability (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaInclusion PendingAvailabilityCommitments (r:1 w:1) + /// Proof Skipped: ParaInclusion PendingAvailabilityCommitments (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaSessionInfo AccountKeys (r:1 w:0) + /// Proof Skipped: ParaSessionInfo AccountKeys (max_values: None, max_size: None, mode: Measured) + /// Storage: Session Validators (r:1 w:0) + /// Proof Skipped: Session Validators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Staking ActiveEra (r:1 w:0) + /// Proof: Staking ActiveEra (max_values: Some(1), max_size: Some(13), added: 508, mode: MaxEncodedLen) + /// Storage: Staking ErasRewardPoints (r:1 w:1) + /// Proof Skipped: Staking ErasRewardPoints (max_values: None, max_size: None, mode: Measured) + /// Storage: Dmp DownwardMessageQueues (r:1 w:1) + /// Proof Skipped: Dmp DownwardMessageQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpChannelDigests (r:1 w:1) + /// Proof Skipped: Hrmp HrmpChannelDigests (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras FutureCodeUpgrades (r:1 w:0) + /// Proof Skipped: Paras FutureCodeUpgrades (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaInherent OnChainVotes (r:1 w:1) + /// Proof Skipped: ParaInherent OnChainVotes (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasDisputes Disputes (r:2 w:0) + /// Proof Skipped: ParasDisputes Disputes (max_values: None, max_size: None, mode: Measured) + /// Storage: ParaScheduler SessionStartBlock (r:1 w:0) + /// Proof Skipped: ParaScheduler SessionStartBlock (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler ParathreadQueue (r:1 w:1) + /// Proof Skipped: ParaScheduler ParathreadQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler Scheduled (r:1 w:1) + /// Proof Skipped: ParaScheduler Scheduled (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParaScheduler ValidatorGroups (r:1 w:0) + /// Proof Skipped: ParaScheduler ValidatorGroups (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Paras CurrentCodeHash (r:1 w:0) + /// Proof Skipped: Paras CurrentCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras FutureCodeHash (r:1 w:0) + /// Proof Skipped: Paras FutureCodeHash (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeRestrictionSignal (r:1 w:0) + /// Proof Skipped: Paras UpgradeRestrictionSignal (max_values: None, max_size: None, mode: Measured) + /// Storage: Ump RelayDispatchQueueSize (r:1 w:0) + /// Proof Skipped: Ump RelayDispatchQueueSize (max_values: None, max_size: None, mode: Measured) + /// Storage: Ump NeedsDispatch (r:1 w:1) + /// Proof Skipped: Ump NeedsDispatch (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Ump NextDispatchRoundStartWith (r:1 w:1) + /// Proof Skipped: Ump NextDispatchRoundStartWith (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParasDisputes Included (r:0 w:1) + /// Proof Skipped: ParasDisputes Included (max_values: None, max_size: None, mode: Measured) + /// Storage: Hrmp HrmpWatermarks (r:0 w:1) + /// Proof Skipped: Hrmp HrmpWatermarks (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras Heads (r:0 w:1) + /// Proof Skipped: Paras Heads (max_values: None, max_size: None, mode: Measured) + /// Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + /// Proof Skipped: Paras UpgradeGoAheadSignal (max_values: None, max_size: None, mode: Measured) fn enter_backed_candidate_code_upgrade() -> Weight { - // Minimum execution time: 41_119_951 nanoseconds. - Weight::from_ref_time(41_358_203_000) + // Proof Size summary in bytes: + // Measured: `42453` + // Estimated: `1345443` + // Minimum execution time: 32_601_053_000 picoseconds. + Weight::from_parts(32_810_866_000, 0) + .saturating_add(Weight::from_parts(0, 1345443)) .saturating_add(T::DbWeight::get().reads(31)) .saturating_add(T::DbWeight::get().writes(16)) } diff --git a/runtime/westend/src/weights/runtime_parachains_ump.rs b/runtime/westend/src/weights/runtime_parachains_ump.rs index ee03c139428f..dcea49b19f89 100644 --- a/runtime/westend/src/weights/runtime_parachains_ump.rs +++ b/runtime/westend/src/weights/runtime_parachains_ump.rs @@ -16,8 +16,9 @@ //! Autogenerated weights for `runtime_parachains::ump` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2023-03-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: @@ -46,26 +47,45 @@ pub struct WeightInfo(PhantomData); impl runtime_parachains::ump::WeightInfo for WeightInfo { /// The range of component `s` is `[0, 51200]`. fn process_upward_message(s: u32, ) -> Weight { - // Minimum execution time: 11_067 nanoseconds. - Weight::from_ref_time(5_521_928) - // Standard Error: 13 - .saturating_add(Weight::from_ref_time(2_043).saturating_mul(s.into())) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 5_964_000 picoseconds. + Weight::from_parts(6_084_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 8 + .saturating_add(Weight::from_parts(1_395, 0).saturating_mul(s.into())) } - // Storage: Ump NeedsDispatch (r:1 w:1) - // Storage: Ump NextDispatchRoundStartWith (r:1 w:1) - // Storage: Ump RelayDispatchQueues (r:0 w:1) - // Storage: Ump RelayDispatchQueueSize (r:0 w:1) + /// Storage: Ump NeedsDispatch (r:1 w:1) + /// Proof Skipped: Ump NeedsDispatch (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Ump NextDispatchRoundStartWith (r:1 w:1) + /// Proof Skipped: Ump NextDispatchRoundStartWith (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Ump RelayDispatchQueues (r:0 w:1) + /// Proof Skipped: Ump RelayDispatchQueues (max_values: None, max_size: None, mode: Measured) + /// Storage: Ump RelayDispatchQueueSize (r:0 w:1) + /// Proof Skipped: Ump RelayDispatchQueueSize (max_values: None, max_size: None, mode: Measured) fn clean_ump_after_outgoing() -> Weight { - // Minimum execution time: 10_126 nanoseconds. - Weight::from_ref_time(10_329_000) + // Proof Size summary in bytes: + // Measured: `206` + // Estimated: `3794` + // Minimum execution time: 9_744_000 picoseconds. + Weight::from_parts(10_070_000, 0) + .saturating_add(Weight::from_parts(0, 3794)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(4)) } - // Storage: Ump Overweight (r:1 w:1) + /// Storage: Ump Overweight (r:1 w:1) + /// Proof Skipped: Ump Overweight (max_values: None, max_size: None, mode: Measured) + /// Storage: Ump CounterForOverweight (r:1 w:1) + /// Proof: Ump CounterForOverweight (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn service_overweight() -> Weight { - // Minimum execution time: 27_891 nanoseconds. - Weight::from_ref_time(28_092_000) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) + // Proof Size summary in bytes: + // Measured: `223` + // Estimated: `5177` + // Minimum execution time: 24_463_000 picoseconds. + Weight::from_parts(24_903_000, 0) + .saturating_add(Weight::from_parts(0, 5177)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) } } diff --git a/runtime/westend/src/weights/xcm/mod.rs b/runtime/westend/src/weights/xcm/mod.rs index 81a657fc2ff7..8b8c5339702d 100644 --- a/runtime/westend/src/weights/xcm/mod.rs +++ b/runtime/westend/src/weights/xcm/mod.rs @@ -1,3 +1,19 @@ +// Copyright 2017-2023 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + mod pallet_xcm_benchmarks_fungible; mod pallet_xcm_benchmarks_generic; @@ -5,7 +21,7 @@ use crate::Runtime; use frame_support::weights::Weight; use sp_std::prelude::*; use xcm::{ - latest::{prelude::*, Weight as XCMWeight}, + latest::{prelude::*, QueryResponseInfo}, DoubleEncoded, }; @@ -31,15 +47,15 @@ impl From<&MultiAsset> for AssetTypes { } trait WeighMultiAssets { - fn weigh_multi_assets(&self, balances_weight: Weight) -> XCMWeight; + fn weigh_multi_assets(&self, balances_weight: Weight) -> Weight; } // Westend only knows about one asset, the balances pallet. -const MAX_ASSETS: u32 = 1; +const MAX_ASSETS: u64 = 1; impl WeighMultiAssets for MultiAssetFilter { - fn weigh_multi_assets(&self, balances_weight: Weight) -> XCMWeight { - let weight = match self { + fn weigh_multi_assets(&self, balances_weight: Weight) -> Weight { + match self { Self::Definite(assets) => assets .inner() .into_iter() @@ -49,155 +65,228 @@ impl WeighMultiAssets for MultiAssetFilter { AssetTypes::Unknown => Weight::MAX, }) .fold(Weight::zero(), |acc, x| acc.saturating_add(x)), - Self::Wild(_) => balances_weight.saturating_mul(MAX_ASSETS as u64), - }; - - weight.ref_time() + // We don't support any NFTs on Westend, so these two variants will always match + // only 1 kind of fungible asset. + Self::Wild(AllOf { .. } | AllOfCounted { .. }) => balances_weight, + Self::Wild(AllCounted(count)) => + balances_weight.saturating_mul(MAX_ASSETS.min(*count as u64)), + Self::Wild(All) => balances_weight.saturating_mul(MAX_ASSETS), + } } } impl WeighMultiAssets for MultiAssets { - fn weigh_multi_assets(&self, balances_weight: Weight) -> XCMWeight { - let weight = self - .inner() + fn weigh_multi_assets(&self, balances_weight: Weight) -> Weight { + self.inner() .into_iter() .map(|m| >::from(m)) .map(|t| match t { AssetTypes::Balances => balances_weight, AssetTypes::Unknown => Weight::MAX, }) - .fold(Weight::zero(), |acc, x| acc.saturating_add(x)); - - weight.ref_time() + .fold(Weight::zero(), |acc, x| acc.saturating_add(x)) } } pub struct WestendXcmWeight(core::marker::PhantomData); impl XcmWeightInfo for WestendXcmWeight { - fn withdraw_asset(assets: &MultiAssets) -> XCMWeight { + fn withdraw_asset(assets: &MultiAssets) -> Weight { assets.weigh_multi_assets(XcmBalancesWeight::::withdraw_asset()) } - fn reserve_asset_deposited(assets: &MultiAssets) -> XCMWeight { + fn reserve_asset_deposited(assets: &MultiAssets) -> Weight { assets.weigh_multi_assets(XcmBalancesWeight::::reserve_asset_deposited()) } - fn receive_teleported_asset(assets: &MultiAssets) -> XCMWeight { + fn receive_teleported_asset(assets: &MultiAssets) -> Weight { assets.weigh_multi_assets(XcmBalancesWeight::::receive_teleported_asset()) } - fn query_response(_query_id: &u64, _response: &Response, _max_weight: &u64) -> XCMWeight { - XcmGeneric::::query_response().ref_time() + fn query_response( + _query_id: &u64, + _response: &Response, + _max_weight: &Weight, + _querier: &Option, + ) -> Weight { + XcmGeneric::::query_response() } - fn transfer_asset(assets: &MultiAssets, _dest: &MultiLocation) -> XCMWeight { + fn transfer_asset(assets: &MultiAssets, _dest: &MultiLocation) -> Weight { assets.weigh_multi_assets(XcmBalancesWeight::::transfer_asset()) } fn transfer_reserve_asset( assets: &MultiAssets, _dest: &MultiLocation, _xcm: &Xcm<()>, - ) -> XCMWeight { + ) -> Weight { assets.weigh_multi_assets(XcmBalancesWeight::::transfer_reserve_asset()) } fn transact( - _origin_type: &OriginKind, - _require_weight_at_most: &u64, + _origin_kind: &OriginKind, + _require_weight_at_most: &Weight, _call: &DoubleEncoded, - ) -> XCMWeight { - XcmGeneric::::transact().ref_time() + ) -> Weight { + XcmGeneric::::transact() } fn hrmp_new_channel_open_request( _sender: &u32, _max_message_size: &u32, _max_capacity: &u32, - ) -> XCMWeight { + ) -> Weight { // XCM Executor does not currently support HRMP channel operations - Weight::MAX.ref_time() + Weight::MAX } - fn hrmp_channel_accepted(_recipient: &u32) -> XCMWeight { + fn hrmp_channel_accepted(_recipient: &u32) -> Weight { // XCM Executor does not currently support HRMP channel operations - Weight::MAX.ref_time() + Weight::MAX } - fn hrmp_channel_closing(_initiator: &u32, _sender: &u32, _recipient: &u32) -> XCMWeight { + fn hrmp_channel_closing(_initiator: &u32, _sender: &u32, _recipient: &u32) -> Weight { // XCM Executor does not currently support HRMP channel operations - Weight::MAX.ref_time() + Weight::MAX } - fn clear_origin() -> XCMWeight { - XcmGeneric::::clear_origin().ref_time() + fn clear_origin() -> Weight { + XcmGeneric::::clear_origin() } - fn descend_origin(_who: &InteriorMultiLocation) -> XCMWeight { - XcmGeneric::::descend_origin().ref_time() + fn descend_origin(_who: &InteriorMultiLocation) -> Weight { + XcmGeneric::::descend_origin() } - fn report_error( - _query_id: &QueryId, - _dest: &MultiLocation, - _max_response_weight: &u64, - ) -> XCMWeight { - XcmGeneric::::report_error().ref_time() + fn report_error(_query_repsonse_info: &QueryResponseInfo) -> Weight { + XcmGeneric::::report_error() } - fn deposit_asset( - assets: &MultiAssetFilter, - _max_assets: &u32, // TODO use max assets? - _dest: &MultiLocation, - ) -> XCMWeight { + fn deposit_asset(assets: &MultiAssetFilter, _dest: &MultiLocation) -> Weight { assets.weigh_multi_assets(XcmBalancesWeight::::deposit_asset()) } fn deposit_reserve_asset( assets: &MultiAssetFilter, - _max_assets: &u32, // TODO use max assets? _dest: &MultiLocation, _xcm: &Xcm<()>, - ) -> XCMWeight { + ) -> Weight { assets.weigh_multi_assets(XcmBalancesWeight::::deposit_reserve_asset()) } - fn exchange_asset(_give: &MultiAssetFilter, _receive: &MultiAssets) -> XCMWeight { - Weight::MAX.ref_time() // todo fix + fn exchange_asset(_give: &MultiAssetFilter, _receive: &MultiAssets, _maximal: &bool) -> Weight { + // Westend does not currently support exchange asset operations + Weight::MAX } fn initiate_reserve_withdraw( assets: &MultiAssetFilter, _reserve: &MultiLocation, _xcm: &Xcm<()>, - ) -> XCMWeight { + ) -> Weight { assets.weigh_multi_assets(XcmGeneric::::initiate_reserve_withdraw()) } fn initiate_teleport( assets: &MultiAssetFilter, _dest: &MultiLocation, _xcm: &Xcm<()>, - ) -> XCMWeight { + ) -> Weight { assets.weigh_multi_assets(XcmBalancesWeight::::initiate_teleport()) } - fn query_holding( - _query_id: &u64, - _dest: &MultiLocation, - _assets: &MultiAssetFilter, - _max_response_weight: &u64, - ) -> XCMWeight { - XcmGeneric::::query_holding().ref_time() + fn report_holding(_response_info: &QueryResponseInfo, _assets: &MultiAssetFilter) -> Weight { + XcmGeneric::::report_holding() + } + fn buy_execution(_fees: &MultiAsset, _weight_limit: &WeightLimit) -> Weight { + XcmGeneric::::buy_execution() + } + fn refund_surplus() -> Weight { + XcmGeneric::::refund_surplus() + } + fn set_error_handler(_xcm: &Xcm) -> Weight { + XcmGeneric::::set_error_handler() + } + fn set_appendix(_xcm: &Xcm) -> Weight { + XcmGeneric::::set_appendix() + } + fn clear_error() -> Weight { + XcmGeneric::::clear_error() } - fn buy_execution(_fees: &MultiAsset, _weight_limit: &WeightLimit) -> XCMWeight { - XcmGeneric::::buy_execution().ref_time() + fn claim_asset(_assets: &MultiAssets, _ticket: &MultiLocation) -> Weight { + XcmGeneric::::claim_asset() } - fn refund_surplus() -> XCMWeight { - XcmGeneric::::refund_surplus().ref_time() + fn trap(_code: &u64) -> Weight { + XcmGeneric::::trap() } - fn set_error_handler(_xcm: &Xcm) -> XCMWeight { - XcmGeneric::::set_error_handler().ref_time() + fn subscribe_version(_query_id: &QueryId, _max_response_weight: &Weight) -> Weight { + XcmGeneric::::subscribe_version() } - fn set_appendix(_xcm: &Xcm) -> XCMWeight { - XcmGeneric::::set_appendix().ref_time() + fn unsubscribe_version() -> Weight { + XcmGeneric::::unsubscribe_version() } - fn clear_error() -> XCMWeight { - XcmGeneric::::clear_error().ref_time() + fn burn_asset(assets: &MultiAssets) -> Weight { + assets.weigh_multi_assets(XcmGeneric::::burn_asset()) } - fn claim_asset(_assets: &MultiAssets, _ticket: &MultiLocation) -> XCMWeight { - XcmGeneric::::claim_asset().ref_time() + fn expect_asset(assets: &MultiAssets) -> Weight { + assets.weigh_multi_assets(XcmGeneric::::expect_asset()) } - fn trap(_code: &u64) -> XCMWeight { - XcmGeneric::::trap().ref_time() + fn expect_origin(_origin: &Option) -> Weight { + XcmGeneric::::expect_origin() } - fn subscribe_version(_query_id: &QueryId, _max_response_weight: &u64) -> XCMWeight { - XcmGeneric::::subscribe_version().ref_time() + fn expect_error(_error: &Option<(u32, XcmError)>) -> Weight { + XcmGeneric::::expect_error() } - fn unsubscribe_version() -> XCMWeight { - XcmGeneric::::unsubscribe_version().ref_time() + fn expect_transact_status(_transact_status: &MaybeErrorCode) -> Weight { + XcmGeneric::::expect_transact_status() } + fn query_pallet(_module_name: &Vec, _response_info: &QueryResponseInfo) -> Weight { + XcmGeneric::::query_pallet() + } + fn expect_pallet( + _index: &u32, + _name: &Vec, + _module_name: &Vec, + _crate_major: &u32, + _min_crate_minor: &u32, + ) -> Weight { + XcmGeneric::::expect_pallet() + } + fn report_transact_status(_response_info: &QueryResponseInfo) -> Weight { + XcmGeneric::::report_transact_status() + } + fn clear_transact_status() -> Weight { + XcmGeneric::::clear_transact_status() + } + fn universal_origin(_: &Junction) -> Weight { + // Westend does not currently support universal origin operations + Weight::MAX + } + fn export_message(_: &NetworkId, _: &Junctions, _: &Xcm<()>) -> Weight { + // Westend does not currently support export message operations + Weight::MAX + } + fn lock_asset(_: &MultiAsset, _: &MultiLocation) -> Weight { + // Westend does not currently support asset locking operations + Weight::MAX + } + fn unlock_asset(_: &MultiAsset, _: &MultiLocation) -> Weight { + // Westend does not currently support asset locking operations + Weight::MAX + } + fn note_unlockable(_: &MultiAsset, _: &MultiLocation) -> Weight { + // Westend does not currently support asset locking operations + Weight::MAX + } + fn request_unlock(_: &MultiAsset, _: &MultiLocation) -> Weight { + // Westend does not currently support asset locking operations + Weight::MAX + } + fn set_fees_mode(_: &bool) -> Weight { + XcmGeneric::::set_fees_mode() + } + fn set_topic(_topic: &[u8; 32]) -> Weight { + XcmGeneric::::set_topic() + } + fn clear_topic() -> Weight { + XcmGeneric::::clear_topic() + } + fn alias_origin(_: &MultiLocation) -> Weight { + // XCM Executor does not currently support alias origin operations + Weight::MAX + } + fn unpaid_execution(_: &WeightLimit, _: &Option) -> Weight { + XcmGeneric::::unpaid_execution() + } +} + +#[test] +fn all_counted_has_a_sane_weight_upper_limit() { + let assets = MultiAssetFilter::Wild(AllCounted(4294967295)); + let weight = Weight::from_parts(1000, 1000); + + assert_eq!(assets.weigh_multi_assets(weight), weight * MAX_ASSETS); } diff --git a/runtime/westend/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs b/runtime/westend/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs index 5a5426efd57f..8d44819907b8 100644 --- a/runtime/westend/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs +++ b/runtime/westend/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs @@ -47,13 +47,13 @@ pub struct WeightInfo(PhantomData); impl WeightInfo { // Storage: System Account (r:1 w:1) pub(crate) fn withdraw_asset() -> Weight { - Weight::from_ref_time(20_308_000 as u64) + Weight::from_parts(20_308_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:2 w:2) pub(crate) fn transfer_asset() -> Weight { - Weight::from_ref_time(32_193_000 as u64) + Weight::from_parts(32_193_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -64,23 +64,23 @@ impl WeightInfo { // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) // Storage: Dmp DownwardMessageQueues (r:1 w:1) pub(crate) fn transfer_reserve_asset() -> Weight { - Weight::from_ref_time(50_731_000 as u64) + Weight::from_parts(50_731_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(7 as u64)) .saturating_add(T::DbWeight::get().writes(5 as u64)) } // Storage: Benchmark Override (r:0 w:0) pub(crate) fn reserve_asset_deposited() -> Weight { - Weight::from_ref_time(2_000_000_000_000 as u64) + Weight::from_parts(2_000_000_000_000 as u64, 0) } // Storage: System Account (r:1 w:1) pub(crate) fn receive_teleported_asset() -> Weight { - Weight::from_ref_time(19_622_000 as u64) + Weight::from_parts(19_622_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) pub(crate) fn deposit_asset() -> Weight { - Weight::from_ref_time(22_433_000 as u64) + Weight::from_parts(22_433_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -91,7 +91,7 @@ impl WeightInfo { // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) // Storage: Dmp DownwardMessageQueues (r:1 w:1) pub(crate) fn deposit_reserve_asset() -> Weight { - Weight::from_ref_time(41_765_000 as u64) + Weight::from_parts(41_765_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } @@ -102,7 +102,7 @@ impl WeightInfo { // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) // Storage: Dmp DownwardMessageQueues (r:1 w:1) pub(crate) fn initiate_teleport() -> Weight { - Weight::from_ref_time(41_204_000 as u64) + Weight::from_parts(41_204_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } diff --git a/runtime/westend/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/runtime/westend/src/weights/xcm/pallet_xcm_benchmarks_generic.rs index 319a772e9785..119b8b4bc7e9 100644 --- a/runtime/westend/src/weights/xcm/pallet_xcm_benchmarks_generic.rs +++ b/runtime/westend/src/weights/xcm/pallet_xcm_benchmarks_generic.rs @@ -1,4 +1,4 @@ -// Copyright 2017-2021 Parity Technologies (UK) Ltd. +// Copyright 2021 Parity Technologies (UK) Ltd. // This file is part of Polkadot. // Polkadot is free software: you can redistribute it and/or modify @@ -17,23 +17,25 @@ //! Autogenerated weights for `pallet_xcm_benchmarks::generic` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2021-12-01, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 128 +//! DATE: 2022-12-12, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024 // Executed Command: -// target/release/polkadot +// /home/benchbot/cargo_target_dir/production/polkadot // benchmark -// --chain=westend-dev +// pallet // --steps=50 // --repeat=20 -// --pallet=pallet_xcm_benchmarks::generic // --extrinsic=* // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 +// --json-file=/var/lib/gitlab-runner/builds/zyw4fam_/0/parity/mirrors/polkadot/.git/.artifacts/bench.json +// --pallet=pallet_xcm_benchmarks::generic +// --chain=westend-dev // --header=./file_header.txt // --template=./xcm/pallet-xcm-benchmarks/template.hbs -// --output=./runtime/westend/src/weights/xcm/pallet_xcm_benchmarks_generic.rs +// --output=./runtime/westend/src/weights/xcm/ #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -48,85 +50,138 @@ impl WeightInfo { // Storage: XcmPallet SupportedVersion (r:1 w:0) // Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) // Storage: XcmPallet SafeXcmVersion (r:1 w:0) - // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) // Storage: Dmp DownwardMessageQueues (r:1 w:1) - pub(crate) fn query_holding() -> Weight { - Weight::from_ref_time(39_278_000 as u64) + // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + pub(crate) fn report_holding() -> Weight { + Weight::from_parts(34_089_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(5 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } pub(crate) fn buy_execution() -> Weight { - Weight::from_ref_time(5_922_000 as u64) + Weight::from_parts(5_751_000 as u64, 0) } // Storage: XcmPallet Queries (r:1 w:0) pub(crate) fn query_response() -> Weight { - Weight::from_ref_time(20_625_000 as u64) + Weight::from_parts(17_938_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(1 as u64)) } pub(crate) fn transact() -> Weight { - Weight::from_ref_time(22_198_000 as u64) + Weight::from_parts(20_699_000 as u64, 0) } pub(crate) fn refund_surplus() -> Weight { - Weight::from_ref_time(6_122_000 as u64) + Weight::from_parts(6_077_000 as u64, 0) } pub(crate) fn set_error_handler() -> Weight { - Weight::from_ref_time(5_758_000 as u64) + Weight::from_parts(5_747_000 as u64, 0) } pub(crate) fn set_appendix() -> Weight { - Weight::from_ref_time(5_764_000 as u64) + Weight::from_parts(5_837_000 as u64, 0) } pub(crate) fn clear_error() -> Weight { - Weight::from_ref_time(5_679_000 as u64) + Weight::from_parts(5_712_000 as u64, 0) } pub(crate) fn descend_origin() -> Weight { - Weight::from_ref_time(7_206_000 as u64) + Weight::from_parts(6_471_000 as u64, 0) } pub(crate) fn clear_origin() -> Weight { - Weight::from_ref_time(5_738_000 as u64) + Weight::from_parts(5_725_000 as u64, 0) } // Storage: XcmPallet SupportedVersion (r:1 w:0) // Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) // Storage: XcmPallet SafeXcmVersion (r:1 w:0) - // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) // Storage: Dmp DownwardMessageQueues (r:1 w:1) + // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) pub(crate) fn report_error() -> Weight { - Weight::from_ref_time(31_512_000 as u64) + Weight::from_parts(29_975_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(5 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: XcmPallet AssetTraps (r:1 w:1) pub(crate) fn claim_asset() -> Weight { - Weight::from_ref_time(13_594_000 as u64) + Weight::from_parts(21_598_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } pub(crate) fn trap() -> Weight { - Weight::from_ref_time(5_745_000 as u64) + Weight::from_parts(5_665_000 as u64, 0) } // Storage: XcmPallet VersionNotifyTargets (r:1 w:1) // Storage: XcmPallet SupportedVersion (r:1 w:0) // Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) // Storage: XcmPallet SafeXcmVersion (r:1 w:0) - // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) // Storage: Dmp DownwardMessageQueues (r:1 w:1) + // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) pub(crate) fn subscribe_version() -> Weight { - Weight::from_ref_time(38_138_000 as u64) + Weight::from_parts(38_343_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: XcmPallet VersionNotifyTargets (r:0 w:1) pub(crate) fn unsubscribe_version() -> Weight { - Weight::from_ref_time(9_127_000 as u64) + Weight::from_parts(8_353_000 as u64, 0) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: XcmPallet SupportedVersion (r:1 w:0) // Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) // Storage: XcmPallet SafeXcmVersion (r:1 w:0) - // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) // Storage: Dmp DownwardMessageQueues (r:1 w:1) + // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) pub(crate) fn initiate_reserve_withdraw() -> Weight { - Weight::from_ref_time(41_443_000 as u64) + Weight::from_parts(33_100_000 as u64, 0) .saturating_add(T::DbWeight::get().reads(5 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } + pub(crate) fn burn_asset() -> Weight { + Weight::from_parts(7_259_000 as u64, 0) + } + pub(crate) fn expect_asset() -> Weight { + Weight::from_parts(5_848_000 as u64, 0) + } + pub(crate) fn expect_origin() -> Weight { + Weight::from_parts(5_787_000 as u64, 0) + } + pub(crate) fn expect_error() -> Weight { + Weight::from_parts(5_775_000 as u64, 0) + } + pub(crate) fn expect_transact_status() -> Weight { + Weight::from_parts(5_775_000 as u64, 0) + } + // Storage: XcmPallet SupportedVersion (r:1 w:0) + // Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) + // Storage: XcmPallet SafeXcmVersion (r:1 w:0) + // Storage: Dmp DownwardMessageQueues (r:1 w:1) + // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + pub(crate) fn query_pallet() -> Weight { + Weight::from_parts(34_846_000 as u64, 0) + .saturating_add(T::DbWeight::get().reads(5 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) + } + pub(crate) fn expect_pallet() -> Weight { + Weight::from_parts(8_844_000 as u64, 0) + } + // Storage: XcmPallet SupportedVersion (r:1 w:0) + // Storage: XcmPallet VersionDiscoveryQueue (r:1 w:1) + // Storage: XcmPallet SafeXcmVersion (r:1 w:0) + // Storage: Dmp DownwardMessageQueues (r:1 w:1) + // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + pub(crate) fn report_transact_status() -> Weight { + Weight::from_parts(50_256_000 as u64, 0) + .saturating_add(T::DbWeight::get().reads(5 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) + } + pub(crate) fn clear_transact_status() -> Weight { + Weight::from_parts(9_959_000 as u64, 0) + } + pub(crate) fn set_topic() -> Weight { + Weight::from_parts(10_007_000 as u64, 0) + } + pub(crate) fn clear_topic() -> Weight { + Weight::from_parts(8_289_000 as u64, 0) + } + pub(crate) fn set_fees_mode() -> Weight { + Weight::from_parts(5_764_000 as u64, 0) + } + pub(crate) fn unpaid_execution() -> Weight { + Weight::from_parts(5_924_000 as u64, 0) + } } diff --git a/runtime/westend/src/xcm_config.rs b/runtime/westend/src/xcm_config.rs index a1e108eb3be0..ef38ca5d2970 100644 --- a/runtime/westend/src/xcm_config.rs +++ b/runtime/westend/src/xcm_config.rs @@ -17,52 +17,54 @@ //! XCM configurations for Westend. use super::{ - parachains_origin, weights, AccountId, Balances, ParaId, Runtime, RuntimeCall, RuntimeEvent, - RuntimeOrigin, WeightToFee, XcmPallet, + parachains_origin, weights, AccountId, AllPalletsWithSystem, Balances, ParaId, Runtime, + RuntimeCall, RuntimeEvent, RuntimeOrigin, WeightToFee, XcmPallet, }; use frame_support::{ parameter_types, - traits::{Everything, Nothing}, + traits::{Contains, Everything, Nothing}, }; -use runtime_common::{xcm_sender, ToAuthor}; +use runtime_common::{paras_registrar, xcm_sender, ToAuthor}; +use sp_core::ConstU32; use xcm::latest::prelude::*; use xcm_builder::{ - AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, - AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, ChildParachainAsNative, + AccountId32Aliases, AllowExplicitUnpaidExecutionFrom, AllowKnownQueryResponses, + AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, ChildParachainAsNative, ChildParachainConvertsVia, ChildSystemParachainAsSuperuser, - CurrencyAdapter as XcmCurrencyAdapter, IsChildSystemParachain, IsConcrete, LocationInverter, + CurrencyAdapter as XcmCurrencyAdapter, IsChildSystemParachain, IsConcrete, MintLocation, SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, - UsingComponents, WeightInfoBounds, + UsingComponents, WeightInfoBounds, WithComputedOrigin, }; +use xcm_executor::{traits::WithOriginFilter, XcmExecutor}; parameter_types! { - pub const WndLocation: MultiLocation = Here.into(); - pub const Ancestry: MultiLocation = Here.into(); - pub WestendNetwork: NetworkId = - NetworkId::Named(b"Westend".to_vec().try_into().expect("shorter than length limit; qed")); + pub const TokenLocation: MultiLocation = Here.into_location(); + pub const ThisNetwork: NetworkId = Westend; + pub UniversalLocation: InteriorMultiLocation = ThisNetwork::get().into(); pub CheckAccount: AccountId = XcmPallet::check_account(); + pub LocalCheckAccount: (AccountId, MintLocation) = (CheckAccount::get(), MintLocation::Local); } pub type LocationConverter = - (ChildParachainConvertsVia, AccountId32Aliases); + (ChildParachainConvertsVia, AccountId32Aliases); pub type LocalAssetTransactor = XcmCurrencyAdapter< // Use this currency: Balances, // Use this currency when it is a fungible asset matching the given location or name: - IsConcrete, + IsConcrete, // We can convert the MultiLocations with our converter above: LocationConverter, // Our chain's account ID type (we can't get away without mentioning it explicitly): AccountId, // It's a native asset so we keep track of the teleports to maintain total issuance. - CheckAccount, + LocalCheckAccount, >; type LocalOriginConverter = ( SovereignSignedViaLocation, ChildParachainAsNative, - SignedAccountId32AsNative, + SignedAccountId32AsNative, ChildSystemParachainAsSuperuser, ); @@ -70,35 +72,151 @@ type LocalOriginConverter = ( /// individual routers. pub type XcmRouter = ( // Only one router so far - use DMP to communicate with child parachains. - xcm_sender::ChildParachainRouter, + xcm_sender::ChildParachainRouter, ); parameter_types! { - pub const Westmint: MultiLocation = Parachain(1000).into(); - pub const Collectives: MultiLocation = Parachain(1001).into(); - pub const WestendForWestmint: (MultiAssetFilter, MultiLocation) = - (Wild(AllOf { fun: WildFungible, id: Concrete(WndLocation::get()) }), Westmint::get()); - pub const WestendForCollectives: (MultiAssetFilter, MultiLocation) = - (Wild(AllOf { fun: WildFungible, id: Concrete(WndLocation::get()) }), Collectives::get()); + pub const Westmint: MultiLocation = Parachain(1000).into_location(); + pub const Collectives: MultiLocation = Parachain(1001).into_location(); + pub const Wnd: MultiAssetFilter = Wild(AllOf { fun: WildFungible, id: Concrete(TokenLocation::get()) }); + pub const WndForWestmint: (MultiAssetFilter, MultiLocation) = (Wnd::get(), Westmint::get()); + pub const WndForCollectives: (MultiAssetFilter, MultiLocation) = (Wnd::get(), Collectives::get()); pub const MaxInstructions: u32 = 100; + pub const MaxAssetsIntoHolding: u32 = 64; } + +#[cfg(feature = "runtime-benchmarks")] +parameter_types! { + pub ReachableDest: Option = Some(Parachain(1000).into()); +} + pub type TrustedTeleporters = - (xcm_builder::Case, xcm_builder::Case); + (xcm_builder::Case, xcm_builder::Case); /// The barriers one of which must be passed for an XCM message to be executed. pub type Barrier = ( // Weight that is paid for may be consumed. TakeWeightCredit, - // If the message is one that immediately attemps to pay for execution, then allow it. - AllowTopLevelPaidExecutionFrom, - // Messages coming from system parachains need not pay for execution. - AllowUnpaidExecutionFrom>, // Expected responses are OK. AllowKnownQueryResponses, - // Subscriptions for version tracking are OK. - AllowSubscriptionsFrom, + WithComputedOrigin< + ( + // If the message is one that immediately attemps to pay for execution, then allow it. + AllowTopLevelPaidExecutionFrom, + // Messages coming from system parachains need not pay for execution. + AllowExplicitUnpaidExecutionFrom>, + // Subscriptions for version tracking are OK. + AllowSubscriptionsFrom, + ), + UniversalLocation, + ConstU32<8>, + >, ); +/// A call filter for the XCM Transact instruction. This is a temporary measure until we +/// properly account for proof size weights. +/// +/// Calls that are allowed through this filter must: +/// 1. Have a fixed weight; +/// 2. Cannot lead to another call being made; +/// 3. Have a defined proof size weight, e.g. no unbounded vecs in call parameters. +pub struct SafeCallFilter; +impl Contains for SafeCallFilter { + fn contains(call: &RuntimeCall) -> bool { + #[cfg(feature = "runtime-benchmarks")] + { + if matches!(call, RuntimeCall::System(frame_system::Call::remark_with_event { .. })) { + return true + } + } + + match call { + RuntimeCall::System( + frame_system::Call::kill_prefix { .. } | frame_system::Call::set_heap_pages { .. }, + ) | + RuntimeCall::Babe(..) | + RuntimeCall::Timestamp(..) | + RuntimeCall::Indices(..) | + RuntimeCall::Balances(..) | + RuntimeCall::Staking( + pallet_staking::Call::bond { .. } | + pallet_staking::Call::bond_extra { .. } | + pallet_staking::Call::unbond { .. } | + pallet_staking::Call::withdraw_unbonded { .. } | + pallet_staking::Call::validate { .. } | + pallet_staking::Call::nominate { .. } | + pallet_staking::Call::chill { .. } | + pallet_staking::Call::set_payee { .. } | + pallet_staking::Call::set_controller { .. } | + pallet_staking::Call::set_validator_count { .. } | + pallet_staking::Call::increase_validator_count { .. } | + pallet_staking::Call::scale_validator_count { .. } | + pallet_staking::Call::force_no_eras { .. } | + pallet_staking::Call::force_new_era { .. } | + pallet_staking::Call::set_invulnerables { .. } | + pallet_staking::Call::force_unstake { .. } | + pallet_staking::Call::force_new_era_always { .. } | + pallet_staking::Call::payout_stakers { .. } | + pallet_staking::Call::rebond { .. } | + pallet_staking::Call::reap_stash { .. } | + pallet_staking::Call::set_staking_configs { .. } | + pallet_staking::Call::chill_other { .. } | + pallet_staking::Call::force_apply_min_commission { .. }, + ) | + RuntimeCall::Session(pallet_session::Call::purge_keys { .. }) | + RuntimeCall::Grandpa(..) | + RuntimeCall::ImOnline(..) | + RuntimeCall::Utility(pallet_utility::Call::as_derivative { .. }) | + RuntimeCall::Identity( + pallet_identity::Call::add_registrar { .. } | + pallet_identity::Call::set_identity { .. } | + pallet_identity::Call::clear_identity { .. } | + pallet_identity::Call::request_judgement { .. } | + pallet_identity::Call::cancel_request { .. } | + pallet_identity::Call::set_fee { .. } | + pallet_identity::Call::set_account_id { .. } | + pallet_identity::Call::set_fields { .. } | + pallet_identity::Call::provide_judgement { .. } | + pallet_identity::Call::kill_identity { .. } | + pallet_identity::Call::add_sub { .. } | + pallet_identity::Call::rename_sub { .. } | + pallet_identity::Call::remove_sub { .. } | + pallet_identity::Call::quit_sub { .. }, + ) | + RuntimeCall::Recovery(..) | + RuntimeCall::Vesting(..) | + RuntimeCall::ElectionProviderMultiPhase(..) | + RuntimeCall::VoterList(..) | + RuntimeCall::NominationPools( + pallet_nomination_pools::Call::join { .. } | + pallet_nomination_pools::Call::bond_extra { .. } | + pallet_nomination_pools::Call::claim_payout { .. } | + pallet_nomination_pools::Call::unbond { .. } | + pallet_nomination_pools::Call::pool_withdraw_unbonded { .. } | + pallet_nomination_pools::Call::withdraw_unbonded { .. } | + pallet_nomination_pools::Call::create { .. } | + pallet_nomination_pools::Call::create_with_pool_id { .. } | + pallet_nomination_pools::Call::set_state { .. } | + pallet_nomination_pools::Call::set_configs { .. } | + pallet_nomination_pools::Call::update_roles { .. } | + pallet_nomination_pools::Call::chill { .. }, + ) | + RuntimeCall::Hrmp(..) | + RuntimeCall::Registrar( + paras_registrar::Call::deregister { .. } | + paras_registrar::Call::swap { .. } | + paras_registrar::Call::remove_lock { .. } | + paras_registrar::Call::reserve { .. } | + paras_registrar::Call::add_lock { .. }, + ) | + RuntimeCall::XcmPallet(pallet_xcm::Call::limited_reserve_transfer_assets { + .. + }) => true, + _ => false, + } + } +} + pub struct XcmConfig; impl xcm_executor::Config for XcmConfig { type RuntimeCall = RuntimeCall; @@ -107,22 +225,32 @@ impl xcm_executor::Config for XcmConfig { type OriginConverter = LocalOriginConverter; type IsReserve = (); type IsTeleporter = TrustedTeleporters; - type LocationInverter = LocationInverter; + type UniversalLocation = UniversalLocation; type Barrier = Barrier; type Weigher = WeightInfoBounds, RuntimeCall, MaxInstructions>; - type Trader = UsingComponents>; + type Trader = + UsingComponents>; type ResponseHandler = XcmPallet; type AssetTrap = XcmPallet; + type AssetLocker = (); + type AssetExchanger = (); type AssetClaims = XcmPallet; type SubscriptionService = XcmPallet; + type PalletInstancesInfo = AllPalletsWithSystem; + type MaxAssetsIntoHolding = MaxAssetsIntoHolding; + type FeeManager = (); + type MessageExporter = (); + type UniversalAliases = Nothing; + type CallDispatcher = WithOriginFilter; + type SafeCallFilter = SafeCallFilter; } /// Type to convert an `Origin` type value into a `MultiLocation` value which represents an interior location /// of this chain. pub type LocalOriginToLocation = ( // And a usual Signed origin to be used in XCM as a corresponding AccountId32 - SignedToAccountId32, + SignedToAccountId32, ); impl pallet_xcm::Config for Runtime { @@ -133,14 +261,22 @@ impl pallet_xcm::Config for Runtime { type ExecuteXcmOrigin = xcm_builder::EnsureXcmOrigin; // ...but they must match our filter, which rejects everything. type XcmExecuteFilter = Nothing; - type XcmExecutor = xcm_executor::XcmExecutor; + type XcmExecutor = XcmExecutor; type XcmTeleportFilter = Everything; type XcmReserveTransferFilter = Everything; type Weigher = WeightInfoBounds, RuntimeCall, MaxInstructions>; - type LocationInverter = LocationInverter; + type UniversalLocation = UniversalLocation; type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; + type Currency = Balances; + type CurrencyMatcher = IsConcrete; + type TrustedLockers = (); + type SovereignAccountOf = LocationConverter; + type MaxLockers = ConstU32<8>; + type WeightInfo = crate::weights::pallet_xcm::WeightInfo; + #[cfg(feature = "runtime-benchmarks")] + type ReachableDest = ReachableDest; } diff --git a/scripts/ci/changelog/Gemfile b/scripts/ci/changelog/Gemfile index f2d7c3bd7168..46b058e3c500 100644 --- a/scripts/ci/changelog/Gemfile +++ b/scripts/ci/changelog/Gemfile @@ -16,6 +16,8 @@ gem 'optparse', '~> 0.1.1' gem 'logger', '~> 1.4' +gem 'changelogerator', '0.10.1' + gem 'test-unit', group: :dev gem 'rubocop', group: :dev, require: false diff --git a/scripts/ci/changelog/Gemfile.lock b/scripts/ci/changelog/Gemfile.lock index 855d7f91a541..422aa3a8844b 100644 --- a/scripts/ci/changelog/Gemfile.lock +++ b/scripts/ci/changelog/Gemfile.lock @@ -4,6 +4,9 @@ GEM addressable (2.8.0) public_suffix (>= 2.0.2, < 5.0) ast (2.4.2) + changelogerator (0.10.1) + git_diff_parser (~> 3) + octokit (~> 4) faraday (1.8.0) faraday-em_http (~> 1.0) faraday-em_synchrony (~> 1.0) @@ -64,8 +67,10 @@ GEM PLATFORMS x86_64-darwin-20 + x86_64-darwin-22 DEPENDENCIES + changelogerator (= 0.10.1) git_diff_parser (~> 3) logger (~> 1.4) octokit (~> 4) @@ -76,4 +81,4 @@ DEPENDENCIES toml (~> 0.3.0) BUNDLED WITH - 2.2.22 + 2.4.6 diff --git a/scripts/ci/changelog/README.md b/scripts/ci/changelog/README.md index 2386f7c1b523..ab3c1fd214ee 100644 --- a/scripts/ci/changelog/README.md +++ b/scripts/ci/changelog/README.md @@ -44,10 +44,9 @@ Currently, the considered labels are: - E4 => new host function - E2 => database migration - B0 => silent, not showing up -- B1-releasenotes (misc unless other labels) -- B5-client (client changes) -- B7-runtimenoteworthy (runtime changes) -- T6-XCM +- B1 => noteworthy +- T0 => node +- T1 => runtime Note that labels with the same letter are mutually exclusive. A PR should not have both `B0` and `B5`, or both `C1` and `C9`. In case of conflicts, the template will @@ -67,3 +66,15 @@ By default, if the changelog data from Github is already present, the calls to t and the local version of the data will be used. This is much faster. If you know that some labels have changed in Github, you will want to refresh the data. You can then either delete manually the `.json` file or `export NO_CACHE=1` to force refreshing the data. + +## Full PR list + +At times, it may be useful to get a raw full PR list. +In order to produce this list, you first need to fetch the the latest `context.json` from the `release-notes-context` artifacts you can find [here](https://github.com/paritytech/polkadot/actions/workflows/release-30_publish-draft-release.yml). You may store this `context.json` under `scripts/ci/changelog`. + +Using the `full_pr_list.md.tera` template, you can generate the `raw` list of changes: + +``` +cd scripts/ci/changelog +tera --env --env-key env --template templates/full_pr_list.md.tera context.json +``` diff --git a/scripts/ci/changelog/bin/changelog b/scripts/ci/changelog/bin/changelog index 6627502b25be..e642a4489043 100755 --- a/scripts/ci/changelog/bin/changelog +++ b/scripts/ci/changelog/bin/changelog @@ -19,6 +19,9 @@ logger = Logger.new($stdout) logger.level = Logger::DEBUG logger.debug('Starting') +changelogerator_version = `changelogerator --version` +logger.debug(changelogerator_version) + owner = 'paritytech' repo = 'polkadot' diff --git a/scripts/ci/changelog/templates/change.md.tera b/scripts/ci/changelog/templates/change.md.tera index 432b93eb687d..cfde3be6e85f 100644 --- a/scripts/ci/changelog/templates/change.md.tera +++ b/scripts/ci/changelog/templates/change.md.tera @@ -1,11 +1,11 @@ {# This macro shows ONE change #} {%- macro change(c, cml="[C]", dot="[P]", sub="[S]") -%} -{%- if c.meta.C and c.meta.C.value >= 7 -%} +{%- if c.meta.C and c.meta.C.agg.max >= 7 -%} {%- set prio = " ‼️ HIGH" -%} -{%- elif c.meta.C and c.meta.C.value >= 3 -%} +{%- elif c.meta.C and c.meta.C.agg.max >= 3 -%} {%- set prio = " ❗️ Medium" -%} -{%- elif c.meta.C and c.meta.C.value < 3 -%} +{%- elif c.meta.C and c.meta.C.agg.max < 3 -%} {%- set prio = " Low" -%} {%- else -%} {%- set prio = "" -%} @@ -13,13 +13,13 @@ {%- set audit = "" -%} -{%- if c.meta.D and c.meta.D.value == 1 -%} +{%- if c.meta.D and c.meta.D.D1 -%} {%- set audit = "✅ audited " -%} -{%- elif c.meta.D and c.meta.D.value == 2 -%} +{%- elif c.meta.D and c.meta.D.D2 -%} {%- set audit = "✅ trivial " -%} -{%- elif c.meta.D and c.meta.D.value == 3 -%} +{%- elif c.meta.D and c.meta.D.D3 -%} {%- set audit = "✅ trivial " -%} -{%- elif c.meta.D and c.meta.D.value == 5 -%} +{%- elif c.meta.D and c.meta.D.D5 -%} {%- set audit = "⏳ pending non-critical audit " -%} {%- else -%} {%- set audit = "" -%} @@ -33,10 +33,11 @@ {%- set repo = " " -%} {%- endif -%} -{%- if c.meta.T and c.meta.T.value == 6 -%} +{%- if c.meta.T and c.meta.T.T6 -%} {%- set xcm = " [✉️ XCM]" -%} {%- else -%} {%- set xcm = "" -%} {%- endif -%} + {{- repo }} {{ audit }}[`#{{c.number}}`]({{c.html_url}}) {{- prio }} - {{ c.title | capitalize | truncate(length=120, end="…") }}{{xcm }} {%- endmacro change -%} diff --git a/scripts/ci/changelog/templates/changes.md.tera b/scripts/ci/changelog/templates/changes.md.tera index 67124430ea65..f598b2fe83f7 100644 --- a/scripts/ci/changelog/templates/changes.md.tera +++ b/scripts/ci/changelog/templates/changes.md.tera @@ -10,4 +10,6 @@ {% include "changes_runtime.md.tera" %} +{% include "changes_api.md.tera" %} + {% include "changes_misc.md.tera" %} diff --git a/scripts/ci/changelog/templates/changes_api.md.tera b/scripts/ci/changelog/templates/changes_api.md.tera new file mode 100644 index 000000000000..29e08b8cd382 --- /dev/null +++ b/scripts/ci/changelog/templates/changes_api.md.tera @@ -0,0 +1,17 @@ +{% import "change.md.tera" as m_c -%} +### API + +{#- The changes are sorted by merge date #} +{%- for pr in changes | sort(attribute="merged_at") %} + +{%- if pr.meta.B %} + {%- if pr.meta.B.B0 %} + {#- We skip silent ones -#} + {%- else -%} + + {%- if pr.meta.T and pr.meta.T.T2 and not pr.title is containing("ompanion") %} +- {{ m_c::change(c=pr) }} + {%- endif -%} + {% endif -%} + {% endif -%} +{% endfor %} diff --git a/scripts/ci/changelog/templates/changes_client.md.tera b/scripts/ci/changelog/templates/changes_client.md.tera index 36fb6b9de686..6d31961c3650 100644 --- a/scripts/ci/changelog/templates/changes_client.md.tera +++ b/scripts/ci/changelog/templates/changes_client.md.tera @@ -5,11 +5,11 @@ {%- for pr in changes | sort(attribute="merged_at") %} {%- if pr.meta.B %} - {%- if pr.meta.B.value == 0 %} + {%- if pr.meta.B.B0 %} {#- We skip silent ones -#} {%- else -%} - {%- if pr.meta.B.value == 5 and not pr.title is containing("ompanion") %} + {%- if pr.meta.T and pr.meta.T.T0 and not pr.title is containing("ompanion") %} - {{ m_c::change(c=pr) }} {%- endif -%} {% endif -%} diff --git a/scripts/ci/changelog/templates/changes_misc.md.tera b/scripts/ci/changelog/templates/changes_misc.md.tera index 3ad1e1d222b7..725b03081eb3 100644 --- a/scripts/ci/changelog/templates/changes_misc.md.tera +++ b/scripts/ci/changelog/templates/changes_misc.md.tera @@ -4,16 +4,18 @@ {#- First pass to count #} {%- for pr in changes -%} {%- if pr.meta.B %} - {%- if pr.meta.B.value == 0 -%} + {%- if pr.meta.B.B0 -%} {#- We skip silent ones -#} {%- else -%} - {%- if pr.meta.B and pr.meta.B.value != 5 and pr.meta.B.value != 7 or pr.meta.C or not pr.meta.B %} + {%- if pr.meta.T and pr.meta.T.agg.max > 2 %} {%- set_global misc_count = misc_count + 1 -%} {%- endif -%} {% endif -%} {% endif -%} {% endfor -%} + +{%- if misc_count > 0 %} ### Misc {% if misc_count > 10 %} @@ -24,10 +26,10 @@ There are other misc. changes. You can expand the list below to view them all. {#- The changes are sorted by merge date #} {%- for pr in changes | sort(attribute="merged_at") %} {%- if pr.meta.B and not pr.title is containing("ompanion") %} - {%- if pr.meta.B.value == 0 %} + {%- if pr.meta.B.B0 %} {#- We skip silent ones -#} {%- else -%} - {%- if pr.meta.B and pr.meta.B.value != 5 and pr.meta.B.value != 7 or pr.meta.C or not pr.meta.B %} + {%- if pr.meta.T and pr.meta.T.agg.max > 2 %} - {{ m_c::change(c=pr) }} {%- endif -%} {% endif -%} @@ -37,3 +39,4 @@ There are other misc. changes. You can expand the list below to view them all. {% if misc_count > 10 %} {% endif -%} +{% endif -%} diff --git a/scripts/ci/changelog/templates/changes_runtime.md.tera b/scripts/ci/changelog/templates/changes_runtime.md.tera index 67da1ebbc394..bd126c0628c4 100644 --- a/scripts/ci/changelog/templates/changes_runtime.md.tera +++ b/scripts/ci/changelog/templates/changes_runtime.md.tera @@ -6,11 +6,11 @@ {% for pr in changes | sort(attribute="merged_at") -%} {%- if pr.meta.B -%} -{%- if pr.meta.B.value == 0 -%} +{%- if pr.meta.B.B0 -%} {#- We skip silent ones -#} {%- else -%} -{%- if pr.meta.B.value == 7 and not pr.title is containing("ompanion") %} +{%- if pr.meta.T and pr.meta.T.T1 and not pr.title is containing("ompanion") %} - {{ m_c::change(c=pr) }} {%- endif -%} {%- endif -%} diff --git a/scripts/ci/changelog/templates/debug.md.tera b/scripts/ci/changelog/templates/debug.md.tera index 41f3702d7c01..8c829b09ffe2 100644 --- a/scripts/ci/changelog/templates/debug.md.tera +++ b/scripts/ci/changelog/templates/debug.md.tera @@ -1,4 +1,4 @@ -{%- set to_ignore = changes | filter(attribute="meta.B.value", value=0) %} +{%- set to_ignore = changes | filter(attribute="meta.B.B0") %} + +{%- if upgrade_first != 0 %} +## Node upgrade required +⚠️ There is a runtime change that will require nodes to be upgraded BEFORE the runtime upgrade. + +⚠️ It is critical that you update your client before the chain switches to the new runtime. +{%- endif %} + ## Host functions -{%- if host_fn_count == 0 %} +{% if host_fn_count == 0 %} ℹ️ This release does not contain any new host functions. {% elif host_fn_count == 1 -%} {# ---- #} -⚠️ The runtimes in this release contain one new **host function**. - -⚠️ It is critical that you update your client before the chain switches to the new runtime. +ℹ️ The runtimes in this release contain one new **host function**. {%- else -%} -⚠️ The runtimes in this release contain {{ host_fn_count }} new **host function{{ host_fn_count | pluralize }}**. - -⚠️ It is critical that you update your client before the chain switches to the new runtime. +ℹ️ The runtimes in this release contain {{ host_fn_count }} new **host function{{ host_fn_count | pluralize }}**. {%- endif %} diff --git a/scripts/ci/changelog/templates/migrations-db.md.tera b/scripts/ci/changelog/templates/migrations-db.md.tera index 917073b2f262..130a61a12cb2 100644 --- a/scripts/ci/changelog/templates/migrations-db.md.tera +++ b/scripts/ci/changelog/templates/migrations-db.md.tera @@ -1,9 +1,9 @@ {% import "change.md.tera" as m_c %} {%- set_global db_migration_count = 0 -%} {%- for pr in changes -%} - {%- if pr.meta.B and pr.meta.B.value == 0 %} + {%- if pr.meta.B and pr.meta.B.B0 %} {#- We skip silent ones -#} - {%- elif pr.meta.E and pr.meta.E.value == 2 -%} + {%- elif pr.meta.E and pr.meta.E.E1 -%} {%- set_global db_migration_count = db_migration_count + 1 -%} {%- endif -%} {%- endfor %} @@ -22,9 +22,9 @@ Some migrations may break compatibility, making a backup of your database is hig {%- endif %} {% for pr in changes | sort(attribute="merged_at") -%} -{%- if pr.meta.B and pr.meta.B.value == 0 %} +{%- if pr.meta.B and pr.meta.B.B0 %} {#- We skip silent ones -#} -{%- elif pr.meta.E and pr.meta.E.value == 2 -%} +{%- elif pr.meta.E and pr.meta.E.E1 -%} - {{ m_c::change(c=pr) }} {% endif -%} {% endfor -%} diff --git a/scripts/ci/changelog/templates/migrations-runtime.md.tera b/scripts/ci/changelog/templates/migrations-runtime.md.tera index fda22d30b6ea..25517a142eb3 100644 --- a/scripts/ci/changelog/templates/migrations-runtime.md.tera +++ b/scripts/ci/changelog/templates/migrations-runtime.md.tera @@ -1,9 +1,9 @@ {%- import "change.md.tera" as m_c %} {%- set_global runtime_migration_count = 0 -%} {%- for pr in changes -%} - {%- if pr.meta.B and pr.meta.B.value == 0 %} + {%- if pr.meta.B and pr.meta.B.B0 %} {#- We skip silent ones -#} - {%- elif pr.meta.E and pr.meta.E.value == 1 -%} + {%- elif pr.meta.E and pr.meta.E.E0 -%} {%- set_global runtime_migration_count = runtime_migration_count + 1 -%} {%- endif -%} {%- endfor %} @@ -21,9 +21,9 @@ Runtime migrations are operations running once during a runtime upgrade. {%- endif %} {% for pr in changes | sort(attribute="merged_at") -%} -{%- if pr.meta.B and pr.meta.B.value == 0 %} +{%- if pr.meta.B and pr.meta.B.B0 %} {#- We skip silent ones -#} -{%- elif pr.meta.E and pr.meta.E.value == 1 -%} +{%- elif pr.meta.E and pr.meta.E.E0 -%} - {{ m_c::change(c=pr) }} {% endif -%} {% endfor -%} diff --git a/scripts/ci/gitlab/lingua.dic b/scripts/ci/gitlab/lingua.dic index a2f64af1cbd6..d9dad4540277 100644 --- a/scripts/ci/gitlab/lingua.dic +++ b/scripts/ci/gitlab/lingua.dic @@ -163,6 +163,7 @@ MQC/SM msg multisig/S multivalidator/SM +mutators mutex natively NFA @@ -220,6 +221,7 @@ proxy/G proxying PRs PVF/S +querier README/MS redhat/M register/CD @@ -254,6 +256,7 @@ SS58 SSL startup/MS stateful +Statemine str struct/MS subcommand/SM @@ -291,6 +294,7 @@ UI unapplied unassign unconcluded +unexpectable unfinalize/B unfinalized union/MSG diff --git a/scripts/ci/gitlab/pipeline/build.yml b/scripts/ci/gitlab/pipeline/build.yml index c1ec964e96b2..201b76afe79b 100644 --- a/scripts/ci/gitlab/pipeline/build.yml +++ b/scripts/ci/gitlab/pipeline/build.yml @@ -2,12 +2,12 @@ # Here are all jobs that are executed during "build" stage build-linux-stable: - stage: build + stage: build # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs # the job can be found in check.yml needs: - - job: job-starter - artifacts: false + - job: job-starter + artifacts: false extends: - .docker-env - .common-refs @@ -39,33 +39,13 @@ build-linux-stable: - echo -n "v${RELEASE_VERSION}" > ./artifacts/BUILD_RELEASE_VERSION - cp -r scripts/* ./artifacts -check-transaction-versions: - stage: build - extends: - - .docker-env - - .test-refs - image: node:15 - needs: - - job: build-linux-stable - artifacts: true - before_script: - - apt-get -y update; apt-get -y install jq lsof - - npm install --ignore-scripts -g @polkadot/metadata-cmp - # Set git config - - git config remote.origin.url "https://github.com/paritytech/polkadot.git" - # - git fetch origin release - script: - - ./scripts/ci/gitlab/check_extrinsics_ordering.sh - # TODO: fixme, more info https://github.com/paritytech/polkadot/issues/6422 - allow_failure: true - build-test-collators: - stage: build + stage: build # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs # the job can be found in check.yml needs: - - job: job-starter - artifacts: false + - job: job-starter + artifacts: false extends: - .docker-env - .common-refs @@ -85,12 +65,12 @@ build-test-collators: - cp -r ./scripts/* ./artifacts build-malus: - stage: build + stage: build # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs # the job can be found in check.yml needs: - - job: job-starter - artifacts: false + - job: job-starter + artifacts: false extends: - .docker-env - .common-refs @@ -107,12 +87,12 @@ build-malus: - cp -r ./scripts/* ./artifacts build-staking-miner: - stage: build + stage: build # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs # the job can be found in check.yml needs: - - job: job-starter - artifacts: false + - job: job-starter + artifacts: false extends: - .docker-env - .common-refs @@ -129,23 +109,23 @@ build-staking-miner: - cp -r ./scripts/* ./artifacts build-rustdoc: - stage: build + stage: build # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs # the job can be found in test.yml needs: - - job: test-deterministic-wasm - artifacts: false + - job: test-deterministic-wasm + artifacts: false extends: - .docker-env - .test-refs variables: - SKIP_WASM_BUILD: 1 + SKIP_WASM_BUILD: 1 artifacts: - name: "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}-doc" - when: on_success - expire_in: 1 days + name: "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}-doc" + when: on_success + expire_in: 1 days paths: - - ./crate-docs/ + - ./crate-docs/ script: # FIXME: it fails with `RUSTDOCFLAGS="-Dwarnings"` and `--all-features` # FIXME: return to stable when https://github.com/rust-lang/rust/issues/96937 gets into stable @@ -157,33 +137,33 @@ build-rustdoc: - echo "" > ./crate-docs/index.html build-implementers-guide: - stage: build + stage: build # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs # the job can be found in test.yml needs: - - job: test-deterministic-wasm - artifacts: false + - job: test-deterministic-wasm + artifacts: false extends: - .kubernetes-env - .test-refs - .collect-artifacts-short # git depth is set on purpose: https://github.com/paritytech/polkadot/issues/6284 variables: - GIT_STRATEGY: clone - GIT_DEPTH: 0 - CI_IMAGE: paritytech/mdbook-utils:e14aae4a-20221123 + GIT_STRATEGY: clone + GIT_DEPTH: 0 + CI_IMAGE: paritytech/mdbook-utils:e14aae4a-20221123 script: - mdbook build ./roadmap/implementers-guide - mkdir -p artifacts - mv roadmap/implementers-guide/book artifacts/ build-short-benchmark: - stage: build + stage: build # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs # the job can be found in check.yml needs: - - job: job-starter - artifacts: false + - job: job-starter + artifacts: false extends: - .docker-env - .test-refs diff --git a/scripts/ci/gitlab/pipeline/check.yml b/scripts/ci/gitlab/pipeline/check.yml index f443e76d6779..66338ba21c84 100644 --- a/scripts/ci/gitlab/pipeline/check.yml +++ b/scripts/ci/gitlab/pipeline/check.yml @@ -2,31 +2,31 @@ # Here are all jobs that are executed during "check" stage check-runtime: - stage: check - image: paritytech/tools:latest + stage: check + image: paritytech/tools:latest extends: - .kubernetes-env rules: - - if: $CI_COMMIT_REF_NAME =~ /^release-v[0-9]+\.[0-9]+.*$/ # i.e. release-v0.9.27 + - if: $CI_COMMIT_REF_NAME =~ /^release-v[0-9]+\.[0-9]+.*$/ # i.e. release-v0.9.27 variables: - GITLAB_API: "https://gitlab.parity.io/api/v4" - GITHUB_API_PROJECT: "parity%2Finfrastructure%2Fgithub-api" + GITLAB_API: "https://gitlab.parity.io/api/v4" + GITHUB_API_PROJECT: "parity%2Finfrastructure%2Fgithub-api" script: - ./scripts/ci/gitlab/check_runtime.sh - allow_failure: true + allow_failure: true cargo-fmt: - stage: check + stage: check extends: - .docker-env - .test-refs script: - cargo +nightly --version - cargo +nightly fmt --all -- --check - allow_failure: true + allow_failure: true spellcheck: - stage: check + stage: check extends: - .docker-env - .test-refs @@ -37,11 +37,11 @@ spellcheck: - echo "___Spellcheck is going to check your diff___" - cargo spellcheck list-files -vvv $(git diff --diff-filter=AM --name-only $(git merge-base ${CI_COMMIT_SHA} ${CI_DEFAULT_BRANCH} -- :^bridges)) - time cargo spellcheck check -vvv --cfg=scripts/ci/gitlab/spellcheck.toml --checkers hunspell --code 1 - $(git diff --diff-filter=AM --name-only $(git merge-base ${CI_COMMIT_SHA} ${CI_DEFAULT_BRANCH} -- :^bridges)) - allow_failure: true + $(git diff --diff-filter=AM --name-only $(git merge-base ${CI_COMMIT_SHA} ${CI_DEFAULT_BRANCH} -- :^bridges)) + allow_failure: true check-try-runtime: - stage: check + stage: check extends: - .docker-env - .test-refs @@ -53,7 +53,7 @@ check-try-runtime: # More info can be found here: https://github.com/paritytech/polkadot/pull/5865 # Works only in PRs with E1 label .check-runtime-migration: - stage: check + stage: check extends: - .docker-env - .test-pr-refs @@ -62,51 +62,56 @@ check-try-runtime: - | export has_runtimemigration_label=$(curl -sS -H "Accept: application/vnd.github+json" \ -H "Authorization: token $GITHUB_PR_TOKEN" \ - https://api.github.com/repos/paritytech/polkadot/issues/$CI_COMMIT_REF_NAME/labels | grep "E1" | wc -l) + https://api.github.com/repos/paritytech/polkadot/issues/$CI_COMMIT_REF_NAME/labels | grep "E0-runtime_migration" | wc -l) - | if [[ $has_runtimemigration_label != 0 ]]; then - echo "Found label runtimemigration. Running tests" + echo "Found label runtime_migration. Running tests" export RUST_LOG=remote-ext=debug,runtime=debug echo "---------- Running try-runtime for ${NETWORK} ----------" - time cargo run --release --features=try-runtime try-runtime --chain=${NETWORK}-dev --execution=Wasm --no-spec-check-panic on-runtime-upgrade live --uri wss://${NETWORK}-try-runtime-node.parity-chains.parity.io:443 + time cargo build --release -p "$NETWORK"-runtime + time cargo run --release --features try-runtime try-runtime \ + --runtime ./target/release/wbuild/"$NETWORK"-runtime/target/wasm32-unknown-unknown/release/"$NETWORK"_runtime.wasm \ + -lruntime=debug \ + --chain=${NETWORK}-dev \ + on-runtime-upgrade live --uri wss://${NETWORK}-try-runtime-node.parity-chains.parity.io:443 else - echo "runtimemigration label not found. Skipping" + echo "runtime_migration label not found. Skipping" fi check-runtime-migration-polkadot: - stage: check + stage: check extends: - .docker-env - .test-pr-refs - .compiler-info - .check-runtime-migration variables: - NETWORK: "polkadot" + NETWORK: "polkadot" check-runtime-migration-kusama: - stage: check + stage: check extends: - .docker-env - .test-pr-refs - .compiler-info - .check-runtime-migration variables: - NETWORK: "kusama" + NETWORK: "kusama" check-runtime-migration-westend: - stage: check + stage: check extends: - .docker-env - .test-pr-refs - .compiler-info - .check-runtime-migration variables: - NETWORK: "westend" - allow_failure: true + NETWORK: "westend" + allow_failure: true # is broken, need to fix check-no-default-features: - stage: check + stage: check extends: - .docker-env - .test-refs @@ -119,8 +124,8 @@ check-no-default-features: # this is artificial job to run some build and tests using DAG job-starter: - stage: check - image: paritytech/tools:latest + stage: check + image: paritytech/tools:latest extends: - .kubernetes-env - .common-refs diff --git a/scripts/ci/gitlab/pipeline/publish.yml b/scripts/ci/gitlab/pipeline/publish.yml index 3484fcae336e..27fb51c7a197 100644 --- a/scripts/ci/gitlab/pipeline/publish.yml +++ b/scripts/ci/gitlab/pipeline/publish.yml @@ -5,7 +5,7 @@ # Release image is handled by the Github Action here: # .github/workflows/publish-docker-release.yml publish-polkadot-debug-image: - stage: publish + stage: publish extends: - .kubernetes-env - .build-push-image @@ -16,19 +16,19 @@ publish-polkadot-debug-image: - if: $CI_PIPELINE_SOURCE == "web" - if: $CI_PIPELINE_SOURCE == "schedule" - if: $CI_COMMIT_REF_NAME == "master" - - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs - - if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1 + - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs + - if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1 variables: - CI_IMAGE: ${BUILDAH_IMAGE} - GIT_STRATEGY: none - DOCKER_USER: ${PARITYPR_USER} - DOCKER_PASS: ${PARITYPR_PASS} + CI_IMAGE: ${BUILDAH_IMAGE} + GIT_STRATEGY: none + DOCKER_USER: ${PARITYPR_USER} + DOCKER_PASS: ${PARITYPR_PASS} # scripts/ci/dockerfiles/polkadot_injected_debug.Dockerfile - DOCKERFILE: ci/dockerfiles/polkadot_injected_debug.Dockerfile - IMAGE_NAME: docker.io/paritypr/polkadot-debug + DOCKERFILE: ci/dockerfiles/polkadot_injected_debug.Dockerfile + IMAGE_NAME: docker.io/paritypr/polkadot-debug needs: - - job: build-linux-stable - artifacts: true + - job: build-linux-stable + artifacts: true after_script: # pass artifacts to the zombienet-tests job # https://docs.gitlab.com/ee/ci/multi_project_pipelines.html#with-variable-inheritance @@ -38,26 +38,26 @@ publish-polkadot-debug-image: reports: # this artifact is used in zombienet-tests job dotenv: ./artifacts/parachains.env - expire_in: 1 days + expire_in: 1 days publish-test-collators-image: # service image for Simnet - stage: publish + stage: publish extends: - .kubernetes-env - .build-push-image - .zombienet-refs variables: - CI_IMAGE: ${BUILDAH_IMAGE} - GIT_STRATEGY: none - DOCKER_USER: ${PARITYPR_USER} - DOCKER_PASS: ${PARITYPR_PASS} + CI_IMAGE: ${BUILDAH_IMAGE} + GIT_STRATEGY: none + DOCKER_USER: ${PARITYPR_USER} + DOCKER_PASS: ${PARITYPR_PASS} # scripts/ci/dockerfiles/collator_injected.Dockerfile - DOCKERFILE: ci/dockerfiles/collator_injected.Dockerfile - IMAGE_NAME: docker.io/paritypr/colander + DOCKERFILE: ci/dockerfiles/collator_injected.Dockerfile + IMAGE_NAME: docker.io/paritypr/colander needs: - - job: build-test-collators - artifacts: true + - job: build-test-collators + artifacts: true after_script: - buildah logout --all # pass artifacts to the zombienet-tests job @@ -70,22 +70,22 @@ publish-test-collators-image: publish-malus-image: # service image for Simnet - stage: publish + stage: publish extends: - .kubernetes-env - .build-push-image - .zombienet-refs variables: - CI_IMAGE: ${BUILDAH_IMAGE} - GIT_STRATEGY: none - DOCKER_USER: ${PARITYPR_USER} - DOCKER_PASS: ${PARITYPR_PASS} + CI_IMAGE: ${BUILDAH_IMAGE} + GIT_STRATEGY: none + DOCKER_USER: ${PARITYPR_USER} + DOCKER_PASS: ${PARITYPR_PASS} # scripts/ci/dockerfiles/malus_injected.Dockerfile - DOCKERFILE: ci/dockerfiles/malus_injected.Dockerfile - IMAGE_NAME: docker.io/paritypr/malus + DOCKERFILE: ci/dockerfiles/malus_injected.Dockerfile + IMAGE_NAME: docker.io/paritypr/malus needs: - - job: build-malus - artifacts: true + - job: build-malus + artifacts: true after_script: - buildah logout "$IMAGE_NAME" # pass artifacts to the zombienet-tests job @@ -97,35 +97,34 @@ publish-malus-image: dotenv: ./artifacts/malus.env publish-staking-miner-image: - stage: publish + stage: publish extends: - .kubernetes-env - .build-push-image - .publish-refs variables: - CI_IMAGE: ${BUILDAH_IMAGE} + CI_IMAGE: ${BUILDAH_IMAGE} # scripts/ci/dockerfiles/staking-miner/staking-miner_injected.Dockerfile - DOCKERFILE: ci/dockerfiles/staking-miner/staking-miner_injected.Dockerfile - IMAGE_NAME: docker.io/paritytech/staking-miner - GIT_STRATEGY: none - DOCKER_USER: ${Docker_Hub_User_Parity} - DOCKER_PASS: ${Docker_Hub_Pass_Parity} + DOCKERFILE: ci/dockerfiles/staking-miner/staking-miner_injected.Dockerfile + IMAGE_NAME: docker.io/paritytech/staking-miner + GIT_STRATEGY: none + DOCKER_USER: ${Docker_Hub_User_Parity} + DOCKER_PASS: ${Docker_Hub_Pass_Parity} needs: - - job: build-staking-miner - artifacts: true - + - job: build-staking-miner + artifacts: true publish-s3-release: - stage: publish + stage: publish extends: - .kubernetes-env needs: - - job: build-linux-stable - artifacts: true + - job: build-linux-stable + artifacts: true variables: - CI_IMAGE: paritytech/awscli:latest - GIT_STRATEGY: none - PREFIX: "builds/polkadot/${ARCH}-${DOCKER_OS}" + CI_IMAGE: paritytech/awscli:latest + GIT_STRATEGY: none + PREFIX: "builds/polkadot/${ARCH}-${DOCKER_OS}" rules: - if: $CI_PIPELINE_SOURCE == "pipeline" when: never @@ -138,10 +137,10 @@ publish-s3-release: - aws s3 sync --acl public-read ./artifacts/ s3://${AWS_BUCKET}/${PREFIX}/${VERSION}/ - echo "update objects at https://releases.parity.io/${PREFIX}/${EXTRATAG}" - find ./artifacts -type f | while read file; do - name="${file#./artifacts/}"; - aws s3api copy-object - --copy-source ${AWS_BUCKET}/${PREFIX}/${VERSION}/${name} - --bucket ${AWS_BUCKET} --key ${PREFIX}/${EXTRATAG}/${name}; + name="${file#./artifacts/}"; + aws s3api copy-object + --copy-source ${AWS_BUCKET}/${PREFIX}/${VERSION}/${name} + --bucket ${AWS_BUCKET} --key ${PREFIX}/${EXTRATAG}/${name}; done - | cat <<-EOM @@ -154,14 +153,14 @@ publish-s3-release: EOM after_script: - aws s3 ls s3://${AWS_BUCKET}/${PREFIX}/${EXTRATAG}/ - --recursive --human-readable --summarize + --recursive --human-readable --summarize publish-rustdoc: - stage: publish + stage: publish extends: - .kubernetes-env variables: - CI_IMAGE: paritytech/tools:latest + CI_IMAGE: paritytech/tools:latest rules: - if: $CI_PIPELINE_SOURCE == "pipeline" when: never @@ -170,10 +169,10 @@ publish-rustdoc: # `needs:` can be removed after CI image gets nonroot. In this case `needs:` stops other # artifacts from being dowloaded by this job. needs: - - job: build-rustdoc - artifacts: true - - job: build-implementers-guide - artifacts: true + - job: build-rustdoc + artifacts: true + - job: build-implementers-guide + artifacts: true script: # Save README and docs - cp -r ./crate-docs/ /tmp/doc/ @@ -209,8 +208,45 @@ publish-rustdoc: # We don't want to mark the entire job failed if there's nothing to # publish though, hence the `|| true`. - git commit -m "Updated docs for ${CI_COMMIT_REF_NAME}" || - echo "___Nothing to commit___" + echo "___Nothing to commit___" - git push origin gh-pages --force - echo "___Rustdoc was successfully published to https://paritytech.github.io/polkadot/___" after_script: - rm -rf .git/ ./* + +.update-substrate-template-repository: + stage: publish + extends: .kubernetes-env + variables: + GIT_STRATEGY: none + rules: + # The template is only updated for FINAL releases + # i.e. the rule should not cover RC or patch releases + - if: $CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+$/ # e.g. v1.0 + - if: $CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+\.[0-9]+$/ # e.g. v1.0.0 + script: + - git clone --depth=1 --branch="$PIPELINE_SCRIPTS_TAG" https://github.com/paritytech/pipeline-scripts + - export POLKADOT_BRANCH="polkadot-$CI_COMMIT_TAG" + - git clone --depth=1 --branch="$POLKADOT_BRANCH" https://github.com/paritytech/"$TEMPLATE_SOURCE" + - cd "$TEMPLATE_SOURCE" + - ../pipeline-scripts/update_substrate_template.sh + --repo-name "$TARGET_REPOSITORY" + --template-path "$TEMPLATE_PATH" + --github-api-token "$GITHUB_TOKEN" + --polkadot-branch "$POLKADOT_BRANCH" + +# Ref: https://github.com/paritytech/opstooling/issues/111 +update-node-template: + extends: .update-substrate-template-repository + variables: + TARGET_REPOSITORY: substrate-node-template + TEMPLATE_SOURCE: substrate + TEMPLATE_PATH: bin/node-template + +# Ref: https://github.com/paritytech/opstooling/issues/111 +update-parachain-template: + extends: .update-substrate-template-repository + variables: + TARGET_REPOSITORY: substrate-parachain-template + TEMPLATE_SOURCE: cumulus + TEMPLATE_PATH: parachain-template diff --git a/scripts/ci/gitlab/pipeline/short-benchmarks.yml b/scripts/ci/gitlab/pipeline/short-benchmarks.yml index 52a4074470f0..89e137cf379b 100644 --- a/scripts/ci/gitlab/pipeline/short-benchmarks.yml +++ b/scripts/ci/gitlab/pipeline/short-benchmarks.yml @@ -2,26 +2,26 @@ # Here are all jobs that are executed during "short-benchmarks" stage # Run all pallet benchmarks only once to check if there are any errors -short-benchmark-polkadot: &short-bench - stage: short-benchmarks +short-benchmark-polkadot: &short-bench + stage: short-benchmarks extends: - .test-pr-refs - .docker-env # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs needs: - - job: build-short-benchmark - artifacts: true + - job: build-short-benchmark + artifacts: true variables: - RUNTIME: polkadot + RUNTIME: polkadot script: - ./artifacts/polkadot benchmark pallet --execution wasm --wasm-execution compiled --chain $RUNTIME-dev --pallet "*" --extrinsic "*" --steps 2 --repeat 1 short-benchmark-kusama: - <<: *short-bench + <<: *short-bench variables: - RUNTIME: kusama + RUNTIME: kusama short-benchmark-westend: - <<: *short-bench + <<: *short-bench variables: - RUNTIME: westend + RUNTIME: westend diff --git a/scripts/ci/gitlab/pipeline/test.yml b/scripts/ci/gitlab/pipeline/test.yml index 3a21a77d90f2..3c94fe31b46f 100644 --- a/scripts/ci/gitlab/pipeline/test.yml +++ b/scripts/ci/gitlab/pipeline/test.yml @@ -1,13 +1,33 @@ # This file is part of .gitlab-ci.yml # Here are all jobs that are executed during "test" stage +# It's more like a check and it belongs to the previous stage, but we want to run this job with real tests in parallel +find-fail-ci-phrase: + stage: test + variables: + CI_IMAGE: "paritytech/tools:latest" + ASSERT_REGEX: "FAIL-CI" + GIT_DEPTH: 1 + extends: + - .kubernetes-env + script: + - set +e + - rg --line-number --hidden --type rust --glob '!{.git,target}' "$ASSERT_REGEX" .; exit_status=$? + - if [ $exit_status -eq 0 ]; then + echo "$ASSERT_REGEX was found, exiting with 1"; + exit 1; + else + echo "No $ASSERT_REGEX was found, exiting with 0"; + exit 0; + fi + test-linux-stable: - stage: test + stage: test # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs # the job can be found in check.yml needs: - - job: job-starter - artifacts: false + - job: job-starter + artifacts: false extends: - .docker-env - .common-refs @@ -22,24 +42,24 @@ test-linux-stable: # but still want to have debug assertions. RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings" script: - - time cargo test --workspace --profile testnet --verbose --locked --features=runtime-benchmarks,runtime-metrics + - time cargo test --workspace --profile testnet --verbose --locked --features=runtime-benchmarks,runtime-metrics,try-runtime -.check-dependent-project: &check-dependent-project - stage: test +.check-dependent-project: &check-dependent-project + stage: test extends: - .docker-env - .test-pr-refs script: - git clone - --depth=1 - "--branch=$PIPELINE_SCRIPTS_TAG" - https://github.com/paritytech/pipeline-scripts + --depth=1 + "--branch=$PIPELINE_SCRIPTS_TAG" + https://github.com/paritytech/pipeline-scripts - ./pipeline-scripts/check_dependent_project.sh - --org paritytech - --dependent-repo "$DEPENDENT_REPO" - --github-api-token "$GITHUB_PR_TOKEN" - --extra-dependencies "$EXTRA_DEPENDENCIES" - --companion-overrides "$COMPANION_OVERRIDES" + --org paritytech + --dependent-repo "$DEPENDENT_REPO" + --github-api-token "$GITHUB_PR_TOKEN" + --extra-dependencies "$EXTRA_DEPENDENCIES" + --companion-overrides "$COMPANION_OVERRIDES" check-dependent-cumulus: <<: *check-dependent-project @@ -51,7 +71,7 @@ check-dependent-cumulus: cumulus: polkadot-v* test-node-metrics: - stage: test + stage: test extends: - .docker-env - .test-refs @@ -65,7 +85,7 @@ test-node-metrics: - time cargo test --profile testnet --verbose --locked --features=runtime-metrics -p polkadot-node-metrics test-deterministic-wasm: - stage: test + stage: test extends: - .docker-env - .test-refs @@ -74,12 +94,12 @@ test-deterministic-wasm: - ./scripts/ci/gitlab/test_deterministic_wasm.sh cargo-clippy: - stage: test + stage: test # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs # the job can be found in check.yml needs: - - job: job-starter - artifacts: false + - job: job-starter + artifacts: false variables: RUSTY_CACHIER_TOOLCHAIN: nightly extends: diff --git a/scripts/ci/gitlab/pipeline/weights.yml b/scripts/ci/gitlab/pipeline/weights.yml index 38b223ce57ab..edca9e769b43 100644 --- a/scripts/ci/gitlab/pipeline/weights.yml +++ b/scripts/ci/gitlab/pipeline/weights.yml @@ -1,12 +1,18 @@ # This file is part of .gitlab-ci.yml # Here are all jobs that are executed during "weights" stage -update_polkadot_weights: &update-weights - stage: weights - timeout: 1d - when: manual +update_polkadot_weights: &update-weights + # The update-weights pipeline defaults to `interruptible: false` so that we'll be able to + # reach and run the benchmarking jobs despite the "Auto-cancel redundant pipelines" CI setting. + # The setting is relevant because future pipelines (e.g. created for new commits or other schedules) + # might otherwise cancel the benchmark jobs early. + interruptible: false + stage: weights + timeout: 1d + when: manual + image: $CI_IMAGE variables: - RUNTIME: polkadot + RUNTIME: polkadot artifacts: paths: - ${RUNTIME}_weights_${CI_COMMIT_SHORT_SHA}.patch @@ -18,16 +24,16 @@ update_polkadot_weights: &update-weights - weights update_kusama_weights: - <<: *update-weights + <<: *update-weights variables: - RUNTIME: kusama + RUNTIME: kusama update_westend_weights: - <<: *update-weights + <<: *update-weights variables: - RUNTIME: westend + RUNTIME: westend update_rococo_weights: - <<: *update-weights + <<: *update-weights variables: - RUNTIME: rococo + RUNTIME: rococo diff --git a/scripts/ci/gitlab/pipeline/zombienet.yml b/scripts/ci/gitlab/pipeline/zombienet.yml index b088f20c55ff..be61502eb8a8 100644 --- a/scripts/ci/gitlab/pipeline/zombienet.yml +++ b/scripts/ci/gitlab/pipeline/zombienet.yml @@ -2,17 +2,17 @@ # Here are all jobs that are executed during "zombienet" stage zombienet-tests-parachains-smoke-test: - stage: zombienet - image: "${ZOMBIENET_IMAGE}" + stage: zombienet + image: "${ZOMBIENET_IMAGE}" extends: - .kubernetes-env - .zombienet-refs needs: - - job: publish-polkadot-debug-image - - job: publish-malus-image - - job: publish-test-collators-image + - job: publish-polkadot-debug-image + - job: publish-malus-image + - job: publish-test-collators-image variables: - GH_DIR: "https://github.com/paritytech/polkadot/tree/${CI_COMMIT_SHORT_SHA}/zombienet_tests/smoke" + GH_DIR: "https://github.com/paritytech/polkadot/tree/${CI_COMMIT_SHORT_SHA}/zombienet_tests/smoke" before_script: - echo "Zombie-net Tests Config" - echo "${ZOMBIENET_IMAGE}" @@ -25,24 +25,24 @@ zombienet-tests-parachains-smoke-test: - export COL_IMAGE="docker.io/paritypr/colander:4519" # The collator image is fixed script: - /home/nonroot/zombie-net/scripts/ci/run-test-env-manager.sh - --github-remote-dir="${GH_DIR}" - --test="0001-parachains-smoke-test.zndsl" - allow_failure: false + --github-remote-dir="${GH_DIR}" + --test="0001-parachains-smoke-test.zndsl" + allow_failure: false retry: 2 tags: - zombienet-polkadot-integration-test zombienet-tests-parachains-pvf: - stage: zombienet - image: "${ZOMBIENET_IMAGE}" + stage: zombienet + image: "${ZOMBIENET_IMAGE}" extends: - .kubernetes-env - .zombienet-refs needs: - - job: publish-polkadot-debug-image - - job: publish-test-collators-image + - job: publish-polkadot-debug-image + - job: publish-test-collators-image variables: - GH_DIR: "https://github.com/paritytech/polkadot/tree/${CI_COMMIT_SHORT_SHA}/zombienet_tests/functional" + GH_DIR: "https://github.com/paritytech/polkadot/tree/${CI_COMMIT_SHORT_SHA}/zombienet_tests/functional" before_script: - echo "Zombie-net Tests Config" - echo "${ZOMBIENET_IMAGE}" @@ -55,25 +55,25 @@ zombienet-tests-parachains-pvf: - export COL_IMAGE=${COLLATOR_IMAGE_NAME}:${COLLATOR_IMAGE_TAG} script: - /home/nonroot/zombie-net/scripts/ci/run-test-env-manager.sh - --github-remote-dir="${GH_DIR}" - --test="0001-parachains-pvf.zndsl" - allow_failure: false + --github-remote-dir="${GH_DIR}" + --test="0001-parachains-pvf.zndsl" + allow_failure: false retry: 2 tags: - zombienet-polkadot-integration-test zombienet-tests-parachains-disputes: - stage: zombienet - image: "${ZOMBIENET_IMAGE}" + stage: zombienet + image: "${ZOMBIENET_IMAGE}" extends: - .kubernetes-env - .zombienet-refs needs: - - job: publish-polkadot-debug-image - - job: publish-test-collators-image - - job: publish-malus-image + - job: publish-polkadot-debug-image + - job: publish-test-collators-image + - job: publish-malus-image variables: - GH_DIR: "https://github.com/paritytech/polkadot/tree/${CI_COMMIT_SHORT_SHA}/zombienet_tests/functional" + GH_DIR: "https://github.com/paritytech/polkadot/tree/${CI_COMMIT_SHORT_SHA}/zombienet_tests/functional" before_script: - echo "Zombie-net Tests Config" - echo "${ZOMBIENET_IMAGE_NAME}" @@ -86,25 +86,25 @@ zombienet-tests-parachains-disputes: - export COL_IMAGE=${COLLATOR_IMAGE_NAME}:${COLLATOR_IMAGE_TAG} script: - /home/nonroot/zombie-net/scripts/ci/run-test-env-manager.sh - --github-remote-dir="${GH_DIR}" - --test="0002-parachains-disputes.zndsl" - allow_failure: false + --github-remote-dir="${GH_DIR}" + --test="0002-parachains-disputes.zndsl" + allow_failure: false retry: 2 tags: - zombienet-polkadot-integration-test zombienet-tests-parachains-disputes-garbage-candidate: - stage: zombienet - image: "${ZOMBIENET_IMAGE}" + stage: zombienet + image: "${ZOMBIENET_IMAGE}" extends: - .kubernetes-env - .zombienet-refs needs: - - job: publish-polkadot-debug-image - - job: publish-test-collators-image - - job: publish-malus-image + - job: publish-polkadot-debug-image + - job: publish-test-collators-image + - job: publish-malus-image variables: - GH_DIR: "https://github.com/paritytech/polkadot/tree/${CI_COMMIT_SHORT_SHA}/zombienet_tests/functional" + GH_DIR: "https://github.com/paritytech/polkadot/tree/${CI_COMMIT_SHORT_SHA}/zombienet_tests/functional" before_script: - echo "Zombie-net Tests Config" - echo "${ZOMBIENET_IMAGE_NAME}" @@ -117,25 +117,25 @@ zombienet-tests-parachains-disputes-garbage-candidate: - export COL_IMAGE=${COLLATOR_IMAGE_NAME}:${COLLATOR_IMAGE_TAG} script: - /home/nonroot/zombie-net/scripts/ci/run-test-env-manager.sh - --github-remote-dir="${GH_DIR}" - --test="0003-parachains-garbage-candidate.zndsl" - allow_failure: false + --github-remote-dir="${GH_DIR}" + --test="0003-parachains-garbage-candidate.zndsl" + allow_failure: false retry: 2 tags: - zombienet-polkadot-integration-test zombienet-test-parachains-upgrade-smoke-test: - stage: zombienet - image: "${ZOMBIENET_IMAGE}" + stage: zombienet + image: "${ZOMBIENET_IMAGE}" extends: - .kubernetes-env - .zombienet-refs needs: - - job: publish-polkadot-debug-image - - job: publish-malus-image - - job: publish-test-collators-image + - job: publish-polkadot-debug-image + - job: publish-malus-image + - job: publish-test-collators-image variables: - GH_DIR: 'https://github.com/paritytech/polkadot/tree/${CI_COMMIT_SHORT_SHA}/zombienet_tests/smoke' + GH_DIR: "https://github.com/paritytech/polkadot/tree/${CI_COMMIT_SHORT_SHA}/zombienet_tests/smoke" before_script: - echo "ZombieNet Tests Config" - echo "${PARACHAINS_IMAGE_NAME}:${PARACHAINS_IMAGE_TAG}" @@ -147,25 +147,25 @@ zombienet-test-parachains-upgrade-smoke-test: - export COL_IMAGE="docker.io/parity/polkadot-collator:latest" # Use cumulus lastest image script: - /home/nonroot/zombie-net/scripts/ci/run-test-env-manager.sh - --github-remote-dir="${GH_DIR}" - --test="0002-parachains-upgrade-smoke-test.zndsl" - allow_failure: true + --github-remote-dir="${GH_DIR}" + --test="0002-parachains-upgrade-smoke-test.zndsl" + allow_failure: true retry: 2 tags: - zombienet-polkadot-integration-test zombienet-tests-misc-paritydb: - stage: zombienet - image: "${ZOMBIENET_IMAGE}" + stage: zombienet + image: "${ZOMBIENET_IMAGE}" extends: - .kubernetes-env - .zombienet-refs needs: - - job: publish-polkadot-debug-image - - job: publish-test-collators-image - artifacts: true + - job: publish-polkadot-debug-image + - job: publish-test-collators-image + artifacts: true variables: - GH_DIR: "https://github.com/paritytech/polkadot/tree/${CI_COMMIT_SHORT_SHA}/zombienet_tests/misc" + GH_DIR: "https://github.com/paritytech/polkadot/tree/${CI_COMMIT_SHORT_SHA}/zombienet_tests/misc" before_script: - echo "Zombie-net Tests Config" - echo "${ZOMBIENET_IMAGE_NAME}" @@ -176,26 +176,26 @@ zombienet-tests-misc-paritydb: - export COL_IMAGE=${COLLATOR_IMAGE_NAME}:${COLLATOR_IMAGE_TAG} script: - /home/nonroot/zombie-net/scripts/ci/run-test-env-manager.sh - --github-remote-dir="${GH_DIR}" - --test="0001-paritydb.zndsl" - allow_failure: false + --github-remote-dir="${GH_DIR}" + --test="0001-paritydb.zndsl" + allow_failure: false retry: 2 tags: - zombienet-polkadot-integration-test zombienet-tests-misc-upgrade-node: - stage: zombienet - image: "${ZOMBIENET_IMAGE}" + stage: zombienet + image: "${ZOMBIENET_IMAGE}" extends: - .kubernetes-env - .zombienet-refs needs: - - job: publish-polkadot-debug-image - - job: publish-test-collators-image - - job: build-linux-stable - artifacts: true + - job: publish-polkadot-debug-image + - job: publish-test-collators-image + - job: build-linux-stable + artifacts: true variables: - GH_DIR: "https://github.com/paritytech/polkadot/tree/${CI_COMMIT_SHORT_SHA}/zombienet_tests/misc" + GH_DIR: "https://github.com/paritytech/polkadot/tree/${CI_COMMIT_SHORT_SHA}/zombienet_tests/misc" before_script: - echo "Zombie-net Tests Config" - echo "${ZOMBIENET_IMAGE_NAME}" @@ -208,25 +208,25 @@ zombienet-tests-misc-upgrade-node: - export POLKADOT_PR_BIN_URL="https://gitlab.parity.io/parity/mirrors/polkadot/-/jobs/${BUILD_LINUX_JOB_ID}/artifacts/raw/artifacts/polkadot" script: - /home/nonroot/zombie-net/scripts/ci/run-test-env-manager.sh - --github-remote-dir="${GH_DIR}" - --test="0002-upgrade-node.zndsl" - allow_failure: false + --github-remote-dir="${GH_DIR}" + --test="0002-upgrade-node.zndsl" + allow_failure: false retry: 2 tags: - zombienet-polkadot-integration-test zombienet-tests-malus-dispute-valid: - stage: zombienet - image: "${ZOMBIENET_IMAGE}" + stage: zombienet + image: "${ZOMBIENET_IMAGE}" extends: - .kubernetes-env - .zombienet-refs needs: - - job: publish-polkadot-debug-image - - job: publish-malus-image - - job: publish-test-collators-image + - job: publish-polkadot-debug-image + - job: publish-malus-image + - job: publish-test-collators-image variables: - GH_DIR: "https://github.com/paritytech/polkadot/tree/${CI_COMMIT_SHORT_SHA}/node/malus/integrationtests" + GH_DIR: "https://github.com/paritytech/polkadot/tree/${CI_COMMIT_SHORT_SHA}/node/malus/integrationtests" before_script: - echo "Zombie-net Tests Config" - echo "${ZOMBIENET_IMAGE_NAME}" @@ -239,24 +239,24 @@ zombienet-tests-malus-dispute-valid: - export COL_IMAGE=${COLLATOR_IMAGE_NAME}:${COLLATOR_IMAGE_TAG} script: - /home/nonroot/zombie-net/scripts/ci/run-test-env-manager.sh - --github-remote-dir="${GH_DIR}" - --test="0001-dispute-valid-block.zndsl" - allow_failure: false + --github-remote-dir="${GH_DIR}" + --test="0001-dispute-valid-block.zndsl" + allow_failure: false retry: 2 tags: - zombienet-polkadot-integration-test zombienet-tests-deregister-register-validator: - stage: zombienet - image: "${ZOMBIENET_IMAGE}" + stage: zombienet + image: "${ZOMBIENET_IMAGE}" extends: - .kubernetes-env - .zombienet-refs needs: - - job: publish-polkadot-debug-image - artifacts: true + - job: publish-polkadot-debug-image + artifacts: true variables: - GH_DIR: "https://github.com/paritytech/polkadot/tree/${CI_COMMIT_SHORT_SHA}/zombienet_tests/smoke" + GH_DIR: "https://github.com/paritytech/polkadot/tree/${CI_COMMIT_SHORT_SHA}/zombienet_tests/smoke" before_script: - echo "Zombie-net Tests Config" - echo "${ZOMBIENET_IMAGE_NAME}" @@ -267,23 +267,23 @@ zombienet-tests-deregister-register-validator: - export MALUS_IMAGE=${MALUS_IMAGE_NAME}:${MALUS_IMAGE_TAG} script: - /home/nonroot/zombie-net/scripts/ci/run-test-env-manager.sh - --github-remote-dir="${GH_DIR}" - --test="0003-deregister-register-validator-smoke.zndsl" - allow_failure: false + --github-remote-dir="${GH_DIR}" + --test="0003-deregister-register-validator-smoke.zndsl" + allow_failure: false retry: 2 tags: - zombienet-polkadot-integration-test zombienet-tests-beefy-and-mmr: - stage: zombienet - image: "${ZOMBIENET_IMAGE}" + stage: zombienet + image: "${ZOMBIENET_IMAGE}" extends: - .kubernetes-env - .zombienet-refs needs: - - job: publish-polkadot-debug-image + - job: publish-polkadot-debug-image variables: - GH_DIR: "https://github.com/paritytech/polkadot/tree/${CI_COMMIT_SHORT_SHA}/zombienet_tests/functional" + GH_DIR: "https://github.com/paritytech/polkadot/tree/${CI_COMMIT_SHORT_SHA}/zombienet_tests/functional" before_script: - echo "Zombie-net Tests Config" - echo "${ZOMBIENET_IMAGE_NAME}" @@ -295,7 +295,7 @@ zombienet-tests-beefy-and-mmr: - /home/nonroot/zombie-net/scripts/ci/run-test-env-manager.sh --github-remote-dir="${GH_DIR}" --test="0003-beefy-and-mmr.zndsl" - allow_failure: true + allow_failure: true retry: 2 tags: - zombienet-polkadot-integration-test diff --git a/scripts/ci/gitlab/prettier.sh b/scripts/ci/gitlab/prettier.sh new file mode 100755 index 000000000000..299bbee179dc --- /dev/null +++ b/scripts/ci/gitlab/prettier.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +# meant to be installed via +# git config filter.ci-prettier.clean "scripts/ci/gitlab/prettier.sh" + +prettier --parser yaml diff --git a/src/main.rs b/src/main.rs index 13c17df851f1..2deb198ec773 100644 --- a/src/main.rs +++ b/src/main.rs @@ -22,6 +22,7 @@ use color_eyre::eyre; /// Global allocator. Changing it to another allocator will require changing /// `memory_stats::MemoryAllocationTracker`. +#[cfg(any(target_os = "linux", feature = "jemalloc-allocator"))] #[global_allocator] pub static ALLOC: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc; diff --git a/statement-table/Cargo.toml b/statement-table/Cargo.toml index 464cabb49650..4658d7b1c999 100644 --- a/statement-table/Cargo.toml +++ b/statement-table/Cargo.toml @@ -5,6 +5,6 @@ authors.workspace = true edition.workspace = true [dependencies] -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["derive"] } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["derive"] } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } primitives = { package = "polkadot-primitives", path = "../primitives" } diff --git a/statement-table/src/generic.rs b/statement-table/src/generic.rs index d899c54d1d53..c33151d5c156 100644 --- a/statement-table/src/generic.rs +++ b/statement-table/src/generic.rs @@ -30,7 +30,7 @@ use std::{ hash::Hash, }; -use primitives::v2::{ValidatorSignature, ValidityAttestation as PrimitiveValidityAttestation}; +use primitives::{ValidatorSignature, ValidityAttestation as PrimitiveValidityAttestation}; use parity_scale_codec::{Decode, Encode}; diff --git a/statement-table/src/lib.rs b/statement-table/src/lib.rs index a3fbbb1fdaaa..4eb5ff3cd017 100644 --- a/statement-table/src/lib.rs +++ b/statement-table/src/lib.rs @@ -1,3 +1,16 @@ +// Copyright 2017-2023 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . @@ -21,7 +34,7 @@ pub use generic::{Context, Table}; /// Concrete instantiations suitable for v2 primitives. pub mod v2 { use crate::generic; - use primitives::v2::{ + use primitives::{ CandidateHash, CommittedCandidateReceipt, CompactStatement as PrimitiveStatement, Id, ValidatorIndex, ValidatorSignature, }; diff --git a/utils/generate-bags/Cargo.toml b/utils/generate-bags/Cargo.toml index 8eb6c81f2306..5bc78549c983 100644 --- a/utils/generate-bags/Cargo.toml +++ b/utils/generate-bags/Cargo.toml @@ -7,8 +7,8 @@ edition.workspace = true [dependencies] clap = { version = "4.0.9", features = ["derive"] } -generate-bags = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +generate-bags = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } westend-runtime = { path = "../../runtime/westend" } kusama-runtime = { path = "../../runtime/kusama" } diff --git a/utils/remote-ext-tests/bags-list/Cargo.toml b/utils/remote-ext-tests/bags-list/Cargo.toml index a7c76bd9b511..c727658b59dd 100644 --- a/utils/remote-ext-tests/bags-list/Cargo.toml +++ b/utils/remote-ext-tests/bags-list/Cargo.toml @@ -12,11 +12,11 @@ polkadot-runtime-constants = { path = "../../../runtime/polkadot/constants" } kusama-runtime-constants = { path = "../../../runtime/kusama/constants" } westend-runtime-constants = { path = "../../../runtime/westend/constants" } -pallet-bags-list-remote-tests = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +pallet-bags-list-remote-tests = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } clap = { version = "4.0.9", features = ["derive"] } log = "0.4.17" -tokio = { version = "1.22.0", features = ["macros"] } +tokio = { version = "1.24.2", features = ["macros"] } diff --git a/utils/staking-miner/Cargo.lock b/utils/staking-miner/Cargo.lock deleted file mode 100644 index b966feddb58f..000000000000 --- a/utils/staking-miner/Cargo.lock +++ /dev/null @@ -1,4484 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "Inflector" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" -dependencies = [ - "lazy_static", - "regex", -] - -[[package]] -name = "addr2line" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "ahash" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" -dependencies = [ - "getrandom 0.2.6", - "once_cell", - "version_check", -] - -[[package]] -name = "aho-corasick" -version = "0.7.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" -dependencies = [ - "memchr", -] - -[[package]] -name = "ansi_term" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi", -] - -[[package]] -name = "anyhow" -version = "1.0.57" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc" - -[[package]] -name = "approx" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" -dependencies = [ - "num-traits", -] - -[[package]] -name = "arrayref" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" - -[[package]] -name = "arrayvec" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" -dependencies = [ - "nodrop", -] - -[[package]] -name = "arrayvec" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" - -[[package]] -name = "arrayvec" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" - -[[package]] -name = "assert_cmd" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93ae1ddd39efd67689deb1979d80bad3bf7f2b09c6e6117c8d1f2443b5e2f83e" -dependencies = [ - "bstr", - "doc-comment", - "predicates", - "predicates-core", - "predicates-tree", - "wait-timeout", -] - -[[package]] -name = "async-trait" -version = "0.1.53" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed6aa3524a2dfcf9fe180c51eae2b58738348d819517ceadf95789c51fff7600" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi", - "libc", - "winapi", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "backtrace" -version = "0.3.65" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11a17d453482a265fd5f8479f2a3f405566e6ca627837aaddb85af8b1ab8ef61" -dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - -[[package]] -name = "base16ct" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" - -[[package]] -name = "base58" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581" - -[[package]] -name = "base64" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" - -[[package]] -name = "beef" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bed554bd50246729a1ec158d08aa3235d1b69d94ad120ebe187e28894787e736" -dependencies = [ - "serde", -] - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitvec" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1489fcb93a5bb47da0462ca93ad252ad6af2145cce58d10d46a83931ba9f016b" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - -[[package]] -name = "blake2" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9cf849ee05b2ee5fba5e36f97ff8ec2533916700fc0758d40d92136a42f3388" -dependencies = [ - "digest 0.10.3", -] - -[[package]] -name = "blake2-rfc" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" -dependencies = [ - "arrayvec 0.4.12", - "constant_time_eq", -] - -[[package]] -name = "block-buffer" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" -dependencies = [ - "block-padding", - "byte-tools", - "byteorder", - "generic-array 0.12.4", -] - -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array 0.14.5", -] - -[[package]] -name = "block-buffer" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" -dependencies = [ - "generic-array 0.14.5", -] - -[[package]] -name = "block-padding" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" -dependencies = [ - "byte-tools", -] - -[[package]] -name = "bstr" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" -dependencies = [ - "lazy_static", - "memchr", - "regex-automata", -] - -[[package]] -name = "bumpalo" -version = "3.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" - -[[package]] -name = "byte-slice-cast" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87c5fdd0166095e1d463fc6cc01aa8ce547ad77a4e84d42eb6762b084e28067e" - -[[package]] -name = "byte-tools" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "bytes" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" - -[[package]] -name = "cc" -version = "1.0.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "chrono" -version = "0.4.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" -dependencies = [ - "libc", - "num-integer", - "num-traits", - "winapi", -] - -[[package]] -name = "clap" -version = "3.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85a35a599b11c089a7f49105658d089b8f2cf0882993c17daf6de15285c2c35d" -dependencies = [ - "atty", - "bitflags", - "clap_derive", - "clap_lex", - "indexmap", - "lazy_static", - "strsim", - "termcolor", - "textwrap", -] - -[[package]] -name = "clap_derive" -version = "3.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3aab4734e083b809aaf5794e14e756d1c798d2c69c7f7de7a09a2f5214993c1" -dependencies = [ - "heck 0.4.0", - "proc-macro-error", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "clap_lex" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a37c35f1112dad5e6e0b1adaff798507497a18fceeb30cceb3bae7d1427b9213" -dependencies = [ - "os_str_bytes", -] - -[[package]] -name = "const-oid" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4c78c047431fee22c1a7bb92e00ad095a02a983affe4d8a72e2a2c62c1b94f3" - -[[package]] -name = "constant_time_eq" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" - -[[package]] -name = "core-foundation" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" - -[[package]] -name = "cpufeatures" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" -dependencies = [ - "libc", -] - -[[package]] -name = "crunchy" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" - -[[package]] -name = "crypto-bigint" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c6a1d5fa1de37e071642dfa44ec552ca5b299adb128fab16138e24b548fd21" -dependencies = [ - "generic-array 0.14.5", - "rand_core 0.6.3", - "subtle", - "zeroize", -] - -[[package]] -name = "crypto-common" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" -dependencies = [ - "generic-array 0.14.5", - "typenum", -] - -[[package]] -name = "crypto-mac" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" -dependencies = [ - "generic-array 0.14.5", - "subtle", -] - -[[package]] -name = "crypto-mac" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" -dependencies = [ - "generic-array 0.14.5", - "subtle", -] - -[[package]] -name = "curve25519-dalek" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9b85542f99a2dfa2a1b8e192662741c9859a846b296bef1c92ef9b58b5a216" -dependencies = [ - "byteorder", - "digest 0.8.1", - "rand_core 0.5.1", - "subtle", - "zeroize", -] - -[[package]] -name = "curve25519-dalek" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" -dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.5.1", - "subtle", - "zeroize", -] - -[[package]] -name = "darling" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4529658bdda7fd6769b8614be250cdcfc3aeb0ee72fe66f9e41e5e5eb73eac02" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "649c91bc01e8b1eac09fb91e8dbc7d517684ca6be8ebc75bb9cafc894f9fdb6f" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn", -] - -[[package]] -name = "darling_macro" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddfc69c5bfcbd2fc09a0f38451d2daf0e372e367986a83906d1b0dbc88134fb5" -dependencies = [ - "darling_core", - "quote", - "syn", -] - -[[package]] -name = "der" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6919815d73839e7ad218de758883aae3a257ba6759ce7a9992501efbb53d705c" -dependencies = [ - "const-oid", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "derive_more" -version = "0.99.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "difflib" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" - -[[package]] -name = "digest" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" -dependencies = [ - "generic-array 0.12.4", -] - -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array 0.14.5", -] - -[[package]] -name = "digest" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" -dependencies = [ - "block-buffer 0.10.2", - "crypto-common", - "subtle", -] - -[[package]] -name = "doc-comment" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" - -[[package]] -name = "downcast-rs" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" - -[[package]] -name = "dyn-clonable" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e9232f0e607a262ceb9bd5141a3dfb3e4db6994b31989bbfd845878cba59fd4" -dependencies = [ - "dyn-clonable-impl", - "dyn-clone", -] - -[[package]] -name = "dyn-clonable-impl" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "dyn-clone" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e50f3adc76d6a43f5ed73b698a87d0760ca74617f60f7c3b879003536fdd28" - -[[package]] -name = "ecdsa" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0d69ae62e0ce582d56380743515fefaf1a8c70cec685d9677636d7e30ae9dc9" -dependencies = [ - "der", - "elliptic-curve", - "rfc6979", - "signature", -] - -[[package]] -name = "ed25519" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d5c4b5e5959dc2c2b89918d8e2cc40fcdd623cef026ed09d2f0ee05199dc8e4" -dependencies = [ - "signature", -] - -[[package]] -name = "ed25519-dalek" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" -dependencies = [ - "curve25519-dalek 3.2.0", - "ed25519", - "rand 0.7.3", - "serde", - "sha2 0.9.9", - "zeroize", -] - -[[package]] -name = "either" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" - -[[package]] -name = "elliptic-curve" -version = "0.11.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25b477563c2bfed38a3b7a60964c49e058b2510ad3f12ba3483fd8f62c2306d6" -dependencies = [ - "base16ct", - "crypto-bigint", - "der", - "ff", - "generic-array 0.14.5", - "group", - "rand_core 0.6.3", - "sec1", - "subtle", - "zeroize", -] - -[[package]] -name = "env_logger" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3" -dependencies = [ - "atty", - "humantime", - "log", - "regex", - "termcolor", -] - -[[package]] -name = "environmental" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b91989ae21441195d7d9b9993a2f9295c7e1a8c96255d8b729accddc124797" - -[[package]] -name = "fake-simd" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" - -[[package]] -name = "ff" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2958d04124b9f27f175eaeb9a9f383d026098aa837eadd8ba22c11f13a05b9e" -dependencies = [ - "rand_core 0.6.3", - "subtle", -] - -[[package]] -name = "fixed-hash" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c" -dependencies = [ - "byteorder", - "rand 0.8.5", - "rustc-hex", - "static_assertions", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "frame-benchmarking" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "frame-support", - "frame-system", - "linregress", - "log", - "parity-scale-codec", - "paste", - "scale-info", - "serde", - "sp-api", - "sp-application-crypto 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-io 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-runtime-interface 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-storage 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", -] - -[[package]] -name = "frame-election-provider-solution-type" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "frame-election-provider-support" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "frame-election-provider-solution-type", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-arithmetic 5.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-npos-elections", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", -] - -[[package]] -name = "frame-metadata" -version = "15.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df6bb8542ef006ef0de09a5c4420787d79823c0ed7924225822362fd2bf2ff2d" -dependencies = [ - "cfg-if", - "parity-scale-codec", - "scale-info", - "serde", -] - -[[package]] -name = "frame-support" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "bitflags", - "frame-metadata", - "frame-support-procedural", - "impl-trait-for-tuples", - "k256", - "log", - "once_cell", - "parity-scale-codec", - "paste", - "scale-info", - "serde", - "smallvec", - "sp-arithmetic 5.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-core-hashing-proc-macro", - "sp-inherents", - "sp-io 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-staking", - "sp-state-machine 0.12.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-tracing 5.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "tt-call", -] - -[[package]] -name = "frame-support-procedural" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "Inflector", - "frame-support-procedural-tools", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "frame-support-procedural-tools" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "frame-support-procedural-tools-derive", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "frame-support-procedural-tools-derive" -version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "frame-system" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "frame-support", - "log", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-io 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-version", -] - -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - -[[package]] -name = "futures" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" - -[[package]] -name = "futures-executor" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", - "num_cpus", -] - -[[package]] -name = "futures-io" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" - -[[package]] -name = "futures-macro" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "futures-sink" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" - -[[package]] -name = "futures-task" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" - -[[package]] -name = "futures-timer" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" - -[[package]] -name = "futures-util" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "generic-array" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" -dependencies = [ - "typenum", -] - -[[package]] -name = "generic-array" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", - "wasm-bindgen", -] - -[[package]] -name = "getrandom" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.10.2+wasi-snapshot-preview1", -] - -[[package]] -name = "gimli" -version = "0.26.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" - -[[package]] -name = "group" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5ac374b108929de78460075f3dc439fa66df9d8fc77e8f12caa5165fcf0c89" -dependencies = [ - "ff", - "rand_core 0.6.3", - "subtle", -] - -[[package]] -name = "hash-db" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d23bd4e7b5eda0d0f3a307e8b381fdc8ba9000f26fbe912250c0a4cc3956364a" - -[[package]] -name = "hash256-std-hasher" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92c171d55b98633f4ed3860808f004099b36c1cc29c42cfc53aa8591b21efcf2" -dependencies = [ - "crunchy", -] - -[[package]] -name = "hashbrown" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" -dependencies = [ - "ahash", -] - -[[package]] -name = "hashbrown" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3" -dependencies = [ - "ahash", -] - -[[package]] -name = "heck" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "heck" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hmac" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" -dependencies = [ - "crypto-mac 0.8.0", - "digest 0.9.0", -] - -[[package]] -name = "hmac" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" -dependencies = [ - "crypto-mac 0.11.1", - "digest 0.9.0", -] - -[[package]] -name = "hmac-drbg" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" -dependencies = [ - "digest 0.9.0", - "generic-array 0.14.5", - "hmac 0.8.1", -] - -[[package]] -name = "http" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff8670570af52249509a86f5e3e18a08c60b177071826898fde8997cf5f6bfbb" -dependencies = [ - "bytes", - "fnv", - "itoa 1.0.1", -] - -[[package]] -name = "http-body" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c" - -[[package]] -name = "httpdate" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" - -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - -[[package]] -name = "hyper" -version = "0.14.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b26ae0a80afebe130861d90abf98e3814a4f28a4c6ffeb5ab8ebb2be311e0ef2" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "http", - "http-body", - "httparse", - "httpdate", - "itoa 1.0.1", - "pin-project-lite", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "impl-codec" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" -dependencies = [ - "parity-scale-codec", -] - -[[package]] -name = "impl-serde" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4551f042f3438e64dbd6226b20527fc84a6e1fe65688b58746a2f53623f25f5c" -dependencies = [ - "serde", -] - -[[package]] -name = "impl-trait-for-tuples" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "indexmap" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f647032dfaa1f8b6dc29bd3edb7bbef4861b8b8007ebb118d6db284fd59f6ee" -dependencies = [ - "autocfg", - "hashbrown 0.11.2", -] - -[[package]] -name = "integer-sqrt" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" -dependencies = [ - "num-traits", -] - -[[package]] -name = "itertools" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - -[[package]] -name = "itoa" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" - -[[package]] -name = "js-sys" -version = "0.3.57" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "jsonrpsee" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91dc760c341fa81173f9a434931aaf32baad5552b0230cc6c93e8fb7eaad4c19" -dependencies = [ - "jsonrpsee-client-transport", - "jsonrpsee-core", - "jsonrpsee-proc-macros", - "jsonrpsee-types", - "jsonrpsee-ws-client", -] - -[[package]] -name = "jsonrpsee-client-transport" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "765f7a36d5087f74e3b3b47805c2188fef8eb54afcb587b078d9f8ebfe9c7220" -dependencies = [ - "futures", - "http", - "jsonrpsee-core", - "jsonrpsee-types", - "pin-project", - "rustls-native-certs", - "soketto", - "thiserror", - "tokio", - "tokio-rustls", - "tokio-util", - "tracing", - "webpki-roots", -] - -[[package]] -name = "jsonrpsee-core" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82ef77ecd20c2254d54f5da8c0738eacca61e6b6511268a8f2753e3148c6c706" -dependencies = [ - "anyhow", - "arrayvec 0.7.2", - "async-trait", - "beef", - "futures-channel", - "futures-util", - "hyper", - "jsonrpsee-types", - "rustc-hash", - "serde", - "serde_json", - "soketto", - "thiserror", - "tokio", - "tracing", -] - -[[package]] -name = "jsonrpsee-proc-macros" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7291c72805bc7d413b457e50d8ef3e87aa554da65ecbbc278abb7dfc283e7f0" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "jsonrpsee-types" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b6aa52f322cbf20c762407629b8300f39bcc0cf0619840d9252a2f65fd2dd9" -dependencies = [ - "anyhow", - "beef", - "serde", - "serde_json", - "thiserror", - "tracing", -] - -[[package]] -name = "jsonrpsee-ws-client" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd66d18bab78d956df24dd0d2e41e4c00afbb818fda94a98264bdd12ce8506ac" -dependencies = [ - "jsonrpsee-client-transport", - "jsonrpsee-core", - "jsonrpsee-types", -] - -[[package]] -name = "k256" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19c3a5e0a0b8450278feda242592512e09f61c72e018b8cd5c859482802daf2d" -dependencies = [ - "cfg-if", - "ecdsa", - "elliptic-curve", - "sec1", -] - -[[package]] -name = "keccak" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" - -[[package]] -name = "kvdb" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a301d8ecb7989d4a6e2c57a49baca77d353bdbf879909debe3f375fe25d61f86" -dependencies = [ - "parity-util-mem", - "smallvec", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.125" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5916d2ae698f6de9bfb891ad7a8d65c09d232dc58cc4ac433c7da3b2fd84bc2b" - -[[package]] -name = "libm" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33a33a362ce288760ec6a508b94caaec573ae7d3bbbd91b87aa0bad4456839db" - -[[package]] -name = "libsecp256k1" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0452aac8bab02242429380e9b2f94ea20cea2b37e2c1777a1358799bbe97f37" -dependencies = [ - "arrayref", - "base64", - "digest 0.9.0", - "hmac-drbg", - "libsecp256k1-core", - "libsecp256k1-gen-ecmult", - "libsecp256k1-gen-genmult", - "rand 0.8.5", - "serde", - "sha2 0.9.9", - "typenum", -] - -[[package]] -name = "libsecp256k1-core" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" -dependencies = [ - "crunchy", - "digest 0.9.0", - "subtle", -] - -[[package]] -name = "libsecp256k1-gen-ecmult" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" -dependencies = [ - "libsecp256k1-core", -] - -[[package]] -name = "libsecp256k1-gen-genmult" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" -dependencies = [ - "libsecp256k1-core", -] - -[[package]] -name = "linregress" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6c601a85f5ecd1aba625247bca0031585fb1c446461b142878a16f8245ddeb8" -dependencies = [ - "nalgebra", - "statrs", -] - -[[package]] -name = "lock_api" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "lru" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32613e41de4c47ab04970c348ca7ae7382cf116625755af070b008a15516a889" -dependencies = [ - "hashbrown 0.11.2", -] - -[[package]] -name = "matchers" -version = "0.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "matrixmultiply" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "add85d4dd35074e6fedc608f8c8f513a3548619a9024b751949ef0e8e45a4d84" -dependencies = [ - "rawpointer", -] - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "memory-db" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6566c70c1016f525ced45d7b7f97730a2bafb037c788211d0c186ef5b2189f0a" -dependencies = [ - "hash-db", - "hashbrown 0.12.1", - "parity-util-mem", -] - -[[package]] -name = "memory_units" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d96e3f3c0b6325d8ccd83c33b28acb183edcb6c67938ba104ec546854b0882" - -[[package]] -name = "merlin" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e261cf0f8b3c42ded9f7d2bb59dea03aa52bc8a1cbc7482f9fc3fd1229d3b42" -dependencies = [ - "byteorder", - "keccak", - "rand_core 0.5.1", - "zeroize", -] - -[[package]] -name = "miniz_oxide" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b29bd4bc3f33391105ebee3589c19197c4271e3e5a9ec9bfe8127eeff8f082" -dependencies = [ - "adler", -] - -[[package]] -name = "mio" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52da4364ffb0e4fe33a9841a98a3f3014fb964045ce4f7a45a398243c8d6b0c9" -dependencies = [ - "libc", - "log", - "miow", - "ntapi", - "wasi 0.11.0+wasi-snapshot-preview1", - "winapi", -] - -[[package]] -name = "miow" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" -dependencies = [ - "winapi", -] - -[[package]] -name = "nalgebra" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "462fffe4002f4f2e1f6a9dcf12cc1a6fc0e15989014efc02a941d3e0f5dc2120" -dependencies = [ - "approx", - "matrixmultiply", - "nalgebra-macros", - "num-complex", - "num-rational 0.4.0", - "num-traits", - "rand 0.8.5", - "rand_distr", - "simba", - "typenum", -] - -[[package]] -name = "nalgebra-macros" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01fcc0b8149b4632adc89ac3b7b31a12fb6099a0317a4eb2ebff574ef7de7218" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "nodrop" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" - -[[package]] -name = "ntapi" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f" -dependencies = [ - "winapi", -] - -[[package]] -name = "num-bigint" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-complex" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fbc387afefefd5e9e39493299f3069e14a140dd34dc19b4c1c1a8fddb6a790" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-format" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bafe4179722c2894288ee77a9f044f02811c86af699344c498b0840c698a2465" -dependencies = [ - "arrayvec 0.4.12", - "itoa 0.4.8", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" -dependencies = [ - "autocfg", - "num-bigint", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" -dependencies = [ - "autocfg", - "libm", -] - -[[package]] -name = "num_cpus" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "object" -version = "0.28.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40bec70ba014595f99f7aa110b84331ffe1ee9aece7fe6f387cc7e3ecda4d456" -dependencies = [ - "memchr", -] - -[[package]] -name = "once_cell" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" - -[[package]] -name = "opaque-debug" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" - -[[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" - -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "os_str_bytes" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64" - -[[package]] -name = "pallet-election-provider-multi-phase" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "rand 0.7.3", - "scale-info", - "sp-arithmetic 5.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-io 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-npos-elections", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "static_assertions", - "strum", -] - -[[package]] -name = "pallet-transaction-payment" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "serde", - "smallvec", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-io 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", -] - -[[package]] -name = "parity-scale-codec" -version = "3.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8b44461635bbb1a0300f100a841e571e7d919c81c73075ef5d152ffdb521066" -dependencies = [ - "arrayvec 0.7.2", - "bitvec", - "byte-slice-cast", - "impl-trait-for-tuples", - "parity-scale-codec-derive", - "serde", -] - -[[package]] -name = "parity-scale-codec-derive" -version = "3.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c45ed1f39709f5a89338fab50e59816b2e8815f5bb58276e7ddf9afd495f73f8" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "parity-util-mem" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c32561d248d352148124f036cac253a644685a21dc9fea383eb4907d7bd35a8f" -dependencies = [ - "cfg-if", - "hashbrown 0.12.1", - "impl-trait-for-tuples", - "parity-util-mem-derive", - "parking_lot", - "primitive-types", - "winapi", -] - -[[package]] -name = "parity-util-mem-derive" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f557c32c6d268a07c921471619c0295f5efad3a0e76d4f97a05c091a51d110b2" -dependencies = [ - "proc-macro2", - "syn", - "synstructure", -] - -[[package]] -name = "parity-wasm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be5e13c266502aadf83426d87d81a0f5d1ef45b8027f5a471c360abfe4bfae92" - -[[package]] -name = "parking_lot" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-sys", -] - -[[package]] -name = "paste" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c520e05135d6e763148b6426a837e239041653ba7becd2e538c076c738025fc" - -[[package]] -name = "pbkdf2" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216eaa586a190f0a738f2f918511eecfa90f13295abec0e457cdebcceda80cbd" -dependencies = [ - "crypto-mac 0.8.0", -] - -[[package]] -name = "pbkdf2" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa" -dependencies = [ - "crypto-mac 0.11.1", -] - -[[package]] -name = "pin-project" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "polkadot-core-primitives" -version = "0.9.25" -dependencies = [ - "parity-scale-codec", - "parity-util-mem", - "scale-info", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=master)", -] - -[[package]] -name = "ppv-lite86" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" - -[[package]] -name = "predicates" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5aab5be6e4732b473071984b3164dbbfb7a3674d30ea5ff44410b6bcd960c3c" -dependencies = [ - "difflib", - "itertools", - "predicates-core", -] - -[[package]] -name = "predicates-core" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da1c2388b1513e1b605fcec39a95e0a9e8ef088f71443ef37099fa9ae6673fcb" - -[[package]] -name = "predicates-tree" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d86de6de25020a36c6d3643a86d9a6a9f552107c0559c60ea03551b5e16c032" -dependencies = [ - "predicates-core", - "termtree", -] - -[[package]] -name = "primitive-types" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28720988bff275df1f51b171e1b2a18c30d194c4d2b61defdacecd625a5d94a" -dependencies = [ - "fixed-hash", - "impl-codec", - "impl-serde", - "scale-info", - "uint", -] - -[[package]] -name = "proc-macro-crate" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" -dependencies = [ - "thiserror", - "toml", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro2" -version = "1.0.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec757218438d5fda206afc041538b2f6d889286160d649a86a24d37e1235afd1" -dependencies = [ - "unicode-xid", -] - -[[package]] -name = "quote" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", - "rand_pcg", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.3", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - -[[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 0.6.3", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] - -[[package]] -name = "rand_core" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" -dependencies = [ - "getrandom 0.2.6", -] - -[[package]] -name = "rand_distr" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" -dependencies = [ - "num-traits", - "rand 0.8.5", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "rand_pcg" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "rawpointer" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" - -[[package]] -name = "redox_syscall" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" -dependencies = [ - "bitflags", -] - -[[package]] -name = "ref-cast" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "685d58625b6c2b83e4cc88a27c4bf65adb7b6b16dbdc413e515c9405b47432ab" -dependencies = [ - "ref-cast-impl", -] - -[[package]] -name = "ref-cast-impl" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a043824e29c94169374ac5183ac0ed43f5724dc4556b19568007486bd840fa1f" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "regex" -version = "1.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.6.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" - -[[package]] -name = "remote-externalities" -version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "env_logger", - "jsonrpsee", - "log", - "parity-scale-codec", - "serde", - "serde_json", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-io 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-version", -] - -[[package]] -name = "rfc6979" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96ef608575f6392792f9ecf7890c00086591d29a83910939d430753f7c050525" -dependencies = [ - "crypto-bigint", - "hmac 0.11.0", - "zeroize", -] - -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin", - "untrusted", - "web-sys", - "winapi", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" - -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - -[[package]] -name = "rustc-hex" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" - -[[package]] -name = "rustls" -version = "0.20.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fbfeb8d0ddb84706bc597a5574ab8912817c52a397f819e5b614e2265206921" -dependencies = [ - "log", - "ring", - "sct", - "webpki", -] - -[[package]] -name = "rustls-native-certs" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" -dependencies = [ - "openssl-probe", - "rustls-pemfile", - "schannel", - "security-framework", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7522c9de787ff061458fe9a829dc790a3f5b22dc571694fc5883f448b94d9a9" -dependencies = [ - "base64", -] - -[[package]] -name = "rustversion" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f" - -[[package]] -name = "ryu" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" - -[[package]] -name = "sc-transaction-pool-api" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "futures", - "log", - "serde", - "sp-blockchain", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "thiserror", -] - -[[package]] -name = "scale-info" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8980cafbe98a7ee7a9cc16b32ebce542c77883f512d83fbf2ddc8f6a85ea74c9" -dependencies = [ - "bitvec", - "cfg-if", - "derive_more", - "parity-scale-codec", - "scale-info-derive", - "serde", -] - -[[package]] -name = "scale-info-derive" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4260c630e8a8a33429d1688eff2f163f24c65a4e1b1578ef6b565061336e4b6f" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "schannel" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" -dependencies = [ - "lazy_static", - "winapi", -] - -[[package]] -name = "schnorrkel" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "021b403afe70d81eea68f6ea12f6b3c9588e5d536a94c3bf80f15e7faa267862" -dependencies = [ - "arrayref", - "arrayvec 0.5.2", - "curve25519-dalek 2.1.3", - "getrandom 0.1.16", - "merlin", - "rand 0.7.3", - "rand_core 0.5.1", - "sha2 0.8.2", - "subtle", - "zeroize", -] - -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "sct" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "sec1" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08da66b8b0965a5555b6bd6639e68ccba85e1e2506f5fbb089e93f8a04e1a2d1" -dependencies = [ - "der", - "generic-array 0.14.5", - "subtle", - "zeroize", -] - -[[package]] -name = "secp256k1" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c42e6f1735c5f00f51e43e28d6634141f2bcad10931b2609ddd74a86d751260" -dependencies = [ - "secp256k1-sys", -] - -[[package]] -name = "secp256k1-sys" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957da2573cde917463ece3570eab4a0b3f19de6f1646cde62e6fd3868f566036" -dependencies = [ - "cc", -] - -[[package]] -name = "secrecy" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" -dependencies = [ - "zeroize", -] - -[[package]] -name = "security-framework" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc" -dependencies = [ - "bitflags", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "separator" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f97841a747eef040fcd2e7b3b9a220a7205926e60488e673d9e4926d27772ce5" - -[[package]] -name = "serde" -version = "1.0.137" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.137" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.81" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c" -dependencies = [ - "itoa 1.0.1", - "ryu", - "serde", -] - -[[package]] -name = "sha-1" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug 0.3.0", -] - -[[package]] -name = "sha2" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69" -dependencies = [ - "block-buffer 0.7.3", - "digest 0.8.1", - "fake-simd", - "opaque-debug 0.2.3", -] - -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug 0.3.0", -] - -[[package]] -name = "sha2" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.3", -] - -[[package]] -name = "sha3" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881bf8156c87b6301fc5ca6b27f11eeb2761224c7081e69b409d5a1951a70c86" -dependencies = [ - "digest 0.10.3", - "keccak", -] - -[[package]] -name = "sharded-slab" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "signature" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02658e48d89f2bec991f9a78e69cfa4c316f8d6a6c4ec12fae1aeb263d486788" -dependencies = [ - "digest 0.9.0", - "rand_core 0.6.3", -] - -[[package]] -name = "simba" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e82063457853d00243beda9952e910b82593e4b07ae9f721b9278a99a0d3d5c" -dependencies = [ - "approx", - "num-complex", - "num-traits", - "paste", -] - -[[package]] -name = "slab" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" - -[[package]] -name = "smallvec" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" - -[[package]] -name = "socket2" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "soketto" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" -dependencies = [ - "base64", - "bytes", - "futures", - "httparse", - "log", - "rand 0.8.5", - "sha-1", -] - -[[package]] -name = "sp-api" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "hash-db", - "log", - "parity-scale-codec", - "sp-api-proc-macro", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-state-machine 0.12.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-version", - "thiserror", -] - -[[package]] -name = "sp-api-proc-macro" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "blake2", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sp-application-crypto" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acb4490364cb3b097a6755343e552495b0013778152300714be4647d107e9a2e" -dependencies = [ - "parity-scale-codec", - "scale-info", - "serde", - "sp-core 6.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-io 6.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "sp-application-crypto" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "parity-scale-codec", - "scale-info", - "serde", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-io 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", -] - -[[package]] -name = "sp-application-crypto" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#c2fc4b3ca0d7a15cc3f9cb1e5f441d99ec8d6e0b" -dependencies = [ - "parity-scale-codec", - "scale-info", - "serde", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-io 6.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=master)", -] - -[[package]] -name = "sp-arithmetic" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31ef21f82cc10f75ed046b65e2f8048080ee76e59f1b8aed55c7150daebfd35b" -dependencies = [ - "integer-sqrt", - "num-traits", - "parity-scale-codec", - "scale-info", - "serde", - "sp-debug-derive 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "static_assertions", -] - -[[package]] -name = "sp-arithmetic" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "integer-sqrt", - "num-traits", - "parity-scale-codec", - "scale-info", - "serde", - "sp-debug-derive 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "static_assertions", -] - -[[package]] -name = "sp-arithmetic" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#c2fc4b3ca0d7a15cc3f9cb1e5f441d99ec8d6e0b" -dependencies = [ - "integer-sqrt", - "num-traits", - "parity-scale-codec", - "scale-info", - "serde", - "sp-debug-derive 4.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "static_assertions", -] - -[[package]] -name = "sp-blockchain" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "futures", - "log", - "lru", - "parity-scale-codec", - "parking_lot", - "sp-api", - "sp-consensus", - "sp-database", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-state-machine 0.12.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "thiserror", -] - -[[package]] -name = "sp-consensus" -version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "async-trait", - "futures", - "futures-timer", - "log", - "parity-scale-codec", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-inherents", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-state-machine 0.12.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-version", - "thiserror", -] - -[[package]] -name = "sp-core" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77963e2aa8fadb589118c3aede2e78b6c4bcf1c01d588fbf33e915b390825fbd" -dependencies = [ - "base58", - "bitflags", - "blake2-rfc", - "byteorder", - "dyn-clonable", - "ed25519-dalek", - "futures", - "hash-db", - "hash256-std-hasher", - "hex", - "impl-serde", - "lazy_static", - "libsecp256k1", - "log", - "merlin", - "num-traits", - "parity-scale-codec", - "parity-util-mem", - "parking_lot", - "primitive-types", - "rand 0.7.3", - "regex", - "scale-info", - "schnorrkel", - "secp256k1", - "secrecy", - "serde", - "sp-core-hashing 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-debug-derive 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-externalities 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-runtime-interface 6.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-storage 6.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ss58-registry", - "substrate-bip39", - "thiserror", - "tiny-bip39", - "wasmi", - "zeroize", -] - -[[package]] -name = "sp-core" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "base58", - "bitflags", - "blake2-rfc", - "byteorder", - "dyn-clonable", - "ed25519-dalek", - "futures", - "hash-db", - "hash256-std-hasher", - "hex", - "impl-serde", - "lazy_static", - "libsecp256k1", - "log", - "merlin", - "num-traits", - "parity-scale-codec", - "parity-util-mem", - "parking_lot", - "primitive-types", - "rand 0.7.3", - "regex", - "scale-info", - "schnorrkel", - "secp256k1", - "secrecy", - "serde", - "sp-core-hashing 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-debug-derive 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-externalities 0.12.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-runtime-interface 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-storage 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "ss58-registry", - "substrate-bip39", - "thiserror", - "tiny-bip39", - "wasmi", - "zeroize", -] - -[[package]] -name = "sp-core" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#c2fc4b3ca0d7a15cc3f9cb1e5f441d99ec8d6e0b" -dependencies = [ - "base58", - "bitflags", - "blake2-rfc", - "byteorder", - "dyn-clonable", - "ed25519-dalek", - "futures", - "hash-db", - "hash256-std-hasher", - "hex", - "impl-serde", - "lazy_static", - "libsecp256k1", - "log", - "merlin", - "num-traits", - "parity-scale-codec", - "parity-util-mem", - "parking_lot", - "primitive-types", - "rand 0.7.3", - "regex", - "scale-info", - "schnorrkel", - "secp256k1", - "secrecy", - "serde", - "sp-core-hashing 4.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-debug-derive 4.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-externalities 0.12.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-runtime-interface 6.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-storage 6.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "ss58-registry", - "substrate-bip39", - "thiserror", - "tiny-bip39", - "wasmi", - "zeroize", -] - -[[package]] -name = "sp-core-hashing" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec864a6a67249f0c8dd3d5acab43623a61677e85ff4f2f9b04b802d2fe780e83" -dependencies = [ - "blake2-rfc", - "byteorder", - "sha2 0.9.9", - "sp-std 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tiny-keccak", - "twox-hash", -] - -[[package]] -name = "sp-core-hashing" -version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "blake2", - "byteorder", - "digest 0.10.3", - "sha2 0.10.2", - "sha3", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "twox-hash", -] - -[[package]] -name = "sp-core-hashing" -version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#c2fc4b3ca0d7a15cc3f9cb1e5f441d99ec8d6e0b" -dependencies = [ - "blake2", - "byteorder", - "digest 0.10.3", - "sha2 0.10.2", - "sha3", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "twox-hash", -] - -[[package]] -name = "sp-core-hashing-proc-macro" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "proc-macro2", - "quote", - "sp-core-hashing 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "syn", -] - -[[package]] -name = "sp-database" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "kvdb", - "parking_lot", -] - -[[package]] -name = "sp-debug-derive" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d676664972e22a0796176e81e7bec41df461d1edf52090955cdab55f2c956ff2" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sp-debug-derive" -version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sp-debug-derive" -version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#c2fc4b3ca0d7a15cc3f9cb1e5f441d99ec8d6e0b" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sp-externalities" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcfd91f92a2a59224230a77c4a5d6f51709620c0aab4e51f108ccece6adc56f" -dependencies = [ - "environmental", - "parity-scale-codec", - "sp-std 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-storage 6.0.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "sp-externalities" -version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "environmental", - "parity-scale-codec", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-storage 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", -] - -[[package]] -name = "sp-externalities" -version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#c2fc4b3ca0d7a15cc3f9cb1e5f441d99ec8d6e0b" -dependencies = [ - "environmental", - "parity-scale-codec", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-storage 6.0.0 (git+https://github.com/paritytech/substrate?branch=master)", -] - -[[package]] -name = "sp-inherents" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "async-trait", - "impl-trait-for-tuples", - "parity-scale-codec", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "thiserror", -] - -[[package]] -name = "sp-io" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "935fd3c71bad6811a7984cabb74d323b8ca3107024024c3eabb610e0182ba8d3" -dependencies = [ - "futures", - "hash-db", - "libsecp256k1", - "log", - "parity-scale-codec", - "parking_lot", - "secp256k1", - "sp-core 6.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-externalities 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-keystore 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-runtime-interface 6.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-state-machine 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-tracing 5.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-trie 6.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-wasm-interface 6.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tracing", - "tracing-core", -] - -[[package]] -name = "sp-io" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "futures", - "hash-db", - "libsecp256k1", - "log", - "parity-scale-codec", - "parking_lot", - "secp256k1", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-externalities 0.12.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-keystore 0.12.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-runtime-interface 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-state-machine 0.12.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-tracing 5.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-trie 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-wasm-interface 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "tracing", - "tracing-core", -] - -[[package]] -name = "sp-io" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#c2fc4b3ca0d7a15cc3f9cb1e5f441d99ec8d6e0b" -dependencies = [ - "futures", - "hash-db", - "libsecp256k1", - "log", - "parity-scale-codec", - "parking_lot", - "secp256k1", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-externalities 0.12.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-keystore 0.12.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-runtime-interface 6.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-state-machine 0.12.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-tracing 5.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-trie 6.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-wasm-interface 6.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "tracing", - "tracing-core", -] - -[[package]] -name = "sp-keystore" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3261eddca8c8926e3e1de136a7980cb3afc3455247d9d6f3119d9b292f73aaee" -dependencies = [ - "async-trait", - "futures", - "merlin", - "parity-scale-codec", - "parking_lot", - "schnorrkel", - "sp-core 6.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-externalities 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "thiserror", -] - -[[package]] -name = "sp-keystore" -version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "async-trait", - "futures", - "merlin", - "parity-scale-codec", - "parking_lot", - "schnorrkel", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-externalities 0.12.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "thiserror", -] - -[[package]] -name = "sp-keystore" -version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#c2fc4b3ca0d7a15cc3f9cb1e5f441d99ec8d6e0b" -dependencies = [ - "async-trait", - "futures", - "merlin", - "parity-scale-codec", - "parking_lot", - "schnorrkel", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-externalities 0.12.0 (git+https://github.com/paritytech/substrate?branch=master)", - "thiserror", -] - -[[package]] -name = "sp-npos-elections" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "parity-scale-codec", - "scale-info", - "serde", - "sp-arithmetic 5.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", -] - -[[package]] -name = "sp-panic-handler" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2101f3c555fceafcfcfb0e61c55ea9ed80dc60bd77d54d9f25b369edb029e9a4" -dependencies = [ - "backtrace", - "lazy_static", - "regex", -] - -[[package]] -name = "sp-panic-handler" -version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "backtrace", - "lazy_static", - "regex", -] - -[[package]] -name = "sp-panic-handler" -version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#c2fc4b3ca0d7a15cc3f9cb1e5f441d99ec8d6e0b" -dependencies = [ - "backtrace", - "lazy_static", - "regex", -] - -[[package]] -name = "sp-runtime" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb7d8a8d5ab5d349c6cf9300af1721b7b6446ba63401dbb11c10a1d65197aa5f" -dependencies = [ - "either", - "hash256-std-hasher", - "impl-trait-for-tuples", - "log", - "parity-scale-codec", - "parity-util-mem", - "paste", - "rand 0.7.3", - "scale-info", - "serde", - "sp-application-crypto 6.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-arithmetic 5.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-core 6.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-io 6.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "sp-runtime" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "either", - "hash256-std-hasher", - "impl-trait-for-tuples", - "log", - "parity-scale-codec", - "parity-util-mem", - "paste", - "rand 0.7.3", - "scale-info", - "serde", - "sp-application-crypto 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-arithmetic 5.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-io 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", -] - -[[package]] -name = "sp-runtime" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#c2fc4b3ca0d7a15cc3f9cb1e5f441d99ec8d6e0b" -dependencies = [ - "either", - "hash256-std-hasher", - "impl-trait-for-tuples", - "log", - "parity-scale-codec", - "parity-util-mem", - "paste", - "rand 0.7.3", - "scale-info", - "serde", - "sp-application-crypto 6.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-arithmetic 5.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-io 6.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=master)", -] - -[[package]] -name = "sp-runtime-interface" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "158bf0305c75a50fc0e334b889568f519a126e32b87900c3f4251202dece7b4b" -dependencies = [ - "impl-trait-for-tuples", - "parity-scale-codec", - "primitive-types", - "sp-externalities 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-runtime-interface-proc-macro 5.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-storage 6.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-tracing 5.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-wasm-interface 6.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "static_assertions", -] - -[[package]] -name = "sp-runtime-interface" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "impl-trait-for-tuples", - "parity-scale-codec", - "primitive-types", - "sp-externalities 0.12.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-runtime-interface-proc-macro 5.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-storage 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-tracing 5.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-wasm-interface 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "static_assertions", -] - -[[package]] -name = "sp-runtime-interface" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#c2fc4b3ca0d7a15cc3f9cb1e5f441d99ec8d6e0b" -dependencies = [ - "impl-trait-for-tuples", - "parity-scale-codec", - "primitive-types", - "sp-externalities 0.12.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-runtime-interface-proc-macro 5.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-storage 6.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-tracing 5.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-wasm-interface 6.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "static_assertions", -] - -[[package]] -name = "sp-runtime-interface-proc-macro" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ecb916b9664ed9f90abef0ff5a3e61454c1efea5861b2997e03f39b59b955f" -dependencies = [ - "Inflector", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sp-runtime-interface-proc-macro" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "Inflector", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sp-runtime-interface-proc-macro" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#c2fc4b3ca0d7a15cc3f9cb1e5f441d99ec8d6e0b" -dependencies = [ - "Inflector", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sp-staking" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "parity-scale-codec", - "scale-info", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", -] - -[[package]] -name = "sp-state-machine" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecee3b33eb78c99997676a571656bcc35db6886abecfddd13e76a73b5871c6c1" -dependencies = [ - "hash-db", - "log", - "num-traits", - "parity-scale-codec", - "parking_lot", - "rand 0.7.3", - "smallvec", - "sp-core 6.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-externalities 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-panic-handler 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-trie 6.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "thiserror", - "tracing", - "trie-db", - "trie-root", -] - -[[package]] -name = "sp-state-machine" -version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "hash-db", - "log", - "num-traits", - "parity-scale-codec", - "parking_lot", - "rand 0.7.3", - "smallvec", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-externalities 0.12.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-panic-handler 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-trie 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "thiserror", - "tracing", - "trie-root", -] - -[[package]] -name = "sp-state-machine" -version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#c2fc4b3ca0d7a15cc3f9cb1e5f441d99ec8d6e0b" -dependencies = [ - "hash-db", - "log", - "num-traits", - "parity-scale-codec", - "parking_lot", - "rand 0.7.3", - "smallvec", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-externalities 0.12.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-panic-handler 4.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-trie 6.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "thiserror", - "tracing", - "trie-root", -] - -[[package]] -name = "sp-std" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14804d6069ee7a388240b665f17908d98386ffb0b5d39f89a4099fc7a2a4c03f" - -[[package]] -name = "sp-std" -version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" - -[[package]] -name = "sp-std" -version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#c2fc4b3ca0d7a15cc3f9cb1e5f441d99ec8d6e0b" - -[[package]] -name = "sp-storage" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dab53af846068e3e0716d3ccc70ea0db44035c79b2ed5821aaa6635039efa37" -dependencies = [ - "impl-serde", - "parity-scale-codec", - "ref-cast", - "serde", - "sp-debug-derive 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "sp-storage" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "impl-serde", - "parity-scale-codec", - "ref-cast", - "serde", - "sp-debug-derive 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", -] - -[[package]] -name = "sp-storage" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#c2fc4b3ca0d7a15cc3f9cb1e5f441d99ec8d6e0b" -dependencies = [ - "impl-serde", - "parity-scale-codec", - "ref-cast", - "serde", - "sp-debug-derive 4.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=master)", -] - -[[package]] -name = "sp-tracing" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69a67e555d171c4238bd223393cda747dd20ec7d4f5fe5c042c056cb7fde9eda" -dependencies = [ - "parity-scale-codec", - "sp-std 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tracing", - "tracing-core", - "tracing-subscriber 0.2.25", -] - -[[package]] -name = "sp-tracing" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "parity-scale-codec", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "tracing", - "tracing-core", - "tracing-subscriber 0.2.25", -] - -[[package]] -name = "sp-tracing" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#c2fc4b3ca0d7a15cc3f9cb1e5f441d99ec8d6e0b" -dependencies = [ - "parity-scale-codec", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "tracing", - "tracing-core", - "tracing-subscriber 0.2.25", -] - -[[package]] -name = "sp-trie" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6fc34f4f291886914733e083b62708d829f3e6b8d7a7ca7fa8a55a3d7640b0b" -dependencies = [ - "hash-db", - "memory-db", - "parity-scale-codec", - "scale-info", - "sp-core 6.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "trie-db", - "trie-root", -] - -[[package]] -name = "sp-trie" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "hash-db", - "memory-db", - "parity-scale-codec", - "scale-info", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "thiserror", - "trie-db", - "trie-root", -] - -[[package]] -name = "sp-trie" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#c2fc4b3ca0d7a15cc3f9cb1e5f441d99ec8d6e0b" -dependencies = [ - "hash-db", - "memory-db", - "parity-scale-codec", - "scale-info", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "thiserror", - "trie-db", - "trie-root", -] - -[[package]] -name = "sp-version" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "impl-serde", - "parity-scale-codec", - "parity-wasm", - "scale-info", - "serde", - "sp-core-hashing-proc-macro", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-version-proc-macro", - "thiserror", -] - -[[package]] -name = "sp-version-proc-macro" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "parity-scale-codec", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sp-wasm-interface" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10d88debe690c2b24eaa9536a150334fcef2ae184c21a0e5b3e80135407a7d52" -dependencies = [ - "impl-trait-for-tuples", - "log", - "parity-scale-codec", - "sp-std 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "wasmi", -] - -[[package]] -name = "sp-wasm-interface" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait#7227aa3df1b765dc850eb1dd4feb05e01805d9e0" -dependencies = [ - "impl-trait-for-tuples", - "log", - "parity-scale-codec", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "wasmi", -] - -[[package]] -name = "sp-wasm-interface" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#c2fc4b3ca0d7a15cc3f9cb1e5f441d99ec8d6e0b" -dependencies = [ - "impl-trait-for-tuples", - "log", - "parity-scale-codec", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=master)", - "wasmi", -] - -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - -[[package]] -name = "ss58-registry" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b84a70894df7a73666e0694f44b41a9571625e9546fb58a0818a565d2c7e084" -dependencies = [ - "Inflector", - "num-format", - "proc-macro2", - "quote", - "serde", - "serde_json", - "unicode-xid", -] - -[[package]] -name = "staking-miner" -version = "0.9.25" -dependencies = [ - "anyhow", - "assert_cmd", - "clap", - "frame-election-provider-support", - "frame-support", - "frame-system", - "jsonrpsee", - "log", - "pallet-election-provider-multi-phase", - "pallet-transaction-payment", - "parity-scale-codec", - "paste", - "polkadot-core-primitives", - "remote-externalities", - "sc-transaction-pool-api", - "scale-info", - "serde", - "serde_json", - "sp-io 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-npos-elections", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=kiz-staking-miner-new-trait)", - "sp-version", - "sub-tokens", - "subxt", - "thiserror", - "tokio", - "tracing-subscriber 0.3.11", -] - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "statrs" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05bdbb8e4e78216a85785a85d3ec3183144f98d0097b9281802c019bb07a6f05" -dependencies = [ - "approx", - "lazy_static", - "nalgebra", - "num-traits", - "rand 0.8.5", -] - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "strum" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cae14b91c7d11c9a851d3fbc80a963198998c2a64eec840477fa92d8ce9b70bb" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bb0dc7ee9c15cea6199cde9a127fa16a4c5819af85395457ad72d68edc85a38" -dependencies = [ - "heck 0.3.3", - "proc-macro2", - "quote", - "rustversion", - "syn", -] - -[[package]] -name = "sub-tokens" -version = "0.1.0" -source = "git+https://github.com/paritytech/substrate-debug-kit?branch=master#e12503ab781e913735dc389865a3b8b4a6c6399d" -dependencies = [ - "separator", -] - -[[package]] -name = "substrate-bip39" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49eee6965196b32f882dd2ee85a92b1dbead41b04e53907f269de3b0dc04733c" -dependencies = [ - "hmac 0.11.0", - "pbkdf2 0.8.0", - "schnorrkel", - "sha2 0.9.9", - "zeroize", -] - -[[package]] -name = "subtle" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" - -[[package]] -name = "subxt" -version = "0.21.0" -source = "git+https://github.com/paritytech/subxt#6d73172560b4c722aeac19695c96c618799d50a2" -dependencies = [ - "bitvec", - "derivative", - "frame-metadata", - "futures", - "hex", - "jsonrpsee", - "log", - "parity-scale-codec", - "parking_lot", - "scale-info", - "serde", - "serde_json", - "sp-core 6.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-runtime 6.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "subxt-macro", - "subxt-metadata", - "thiserror", -] - -[[package]] -name = "subxt-codegen" -version = "0.21.0" -source = "git+https://github.com/paritytech/subxt#6d73172560b4c722aeac19695c96c618799d50a2" -dependencies = [ - "darling", - "frame-metadata", - "heck 0.4.0", - "parity-scale-codec", - "proc-macro-error", - "proc-macro2", - "quote", - "scale-info", - "subxt-metadata", - "syn", -] - -[[package]] -name = "subxt-macro" -version = "0.21.0" -source = "git+https://github.com/paritytech/subxt#6d73172560b4c722aeac19695c96c618799d50a2" -dependencies = [ - "darling", - "proc-macro-error", - "subxt-codegen", - "syn", -] - -[[package]] -name = "subxt-metadata" -version = "0.21.0" -source = "git+https://github.com/paritytech/subxt#6d73172560b4c722aeac19695c96c618799d50a2" -dependencies = [ - "frame-metadata", - "parity-scale-codec", - "scale-info", - "sp-core 6.0.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "syn" -version = "1.0.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ff7c592601f11445996a06f8ad0c27f094a58857c2f89e97974ab9235b92c52" -dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", -] - -[[package]] -name = "synstructure" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "unicode-xid", -] - -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "termcolor" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "termtree" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507e9898683b6c43a9aa55b64259b721b52ba226e0f3779137e50ad114a4c90b" - -[[package]] -name = "textwrap" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb" - -[[package]] -name = "thiserror" -version = "1.0.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "thread_local" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" -dependencies = [ - "once_cell", -] - -[[package]] -name = "tiny-bip39" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc59cb9dfc85bb312c3a78fd6aa8a8582e310b0fa885d5bb877f6dcc601839d" -dependencies = [ - "anyhow", - "hmac 0.8.1", - "once_cell", - "pbkdf2 0.4.0", - "rand 0.7.3", - "rustc-hash", - "sha2 0.9.9", - "thiserror", - "unicode-normalization", - "wasm-bindgen", - "zeroize", -] - -[[package]] -name = "tiny-keccak" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" -dependencies = [ - "crunchy", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" - -[[package]] -name = "tokio" -version = "1.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce653fb475565de9f6fb0614b28bca8df2c430c0cf84bcd9c843f15de5414cc" -dependencies = [ - "libc", - "mio", - "num_cpus", - "once_cell", - "pin-project-lite", - "socket2", - "tokio-macros", - "winapi", -] - -[[package]] -name = "tokio-macros" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tokio-rustls" -version = "0.23.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4151fda0cf2798550ad0b34bcfc9b9dcc2a9d2471c895c68f3a8818e54f2389e" -dependencies = [ - "rustls", - "tokio", - "webpki", -] - -[[package]] -name = "tokio-util" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0edfdeb067411dba2044da6d1cb2df793dd35add7888d73c16e3381ded401764" -dependencies = [ - "bytes", - "futures-core", - "futures-io", - "futures-sink", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "toml" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" -dependencies = [ - "serde", -] - -[[package]] -name = "tower-service" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" - -[[package]] -name = "tracing" -version = "0.1.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0ecdcb44a79f0fe9844f0c4f33a342cbcbb5117de8001e6ba0dc2351327d09" -dependencies = [ - "cfg-if", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc6b8ad3567499f98a1db7a752b07a7c8c7c7c34c332ec00effb2b0027974b7c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tracing-core" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f54c8ca710e81886d498c2fd3331b56c93aa248d49de2222ad2742247c60072f" -dependencies = [ - "lazy_static", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" -dependencies = [ - "lazy_static", - "log", - "tracing-core", -] - -[[package]] -name = "tracing-serde" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" -dependencies = [ - "serde", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" -dependencies = [ - "ansi_term", - "chrono", - "lazy_static", - "matchers 0.0.1", - "regex", - "serde", - "serde_json", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", - "tracing-serde", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bc28f93baff38037f64e6f43d34cfa1605f27a49c34e8a04c5e78b0babf2596" -dependencies = [ - "ansi_term", - "lazy_static", - "matchers 0.1.0", - "regex", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "trie-db" -version = "0.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32d034c0d3db64b43c31de38e945f15b40cd4ca6d2dcfc26d4798ce8de4ab83" -dependencies = [ - "hash-db", - "hashbrown 0.12.1", - "log", - "rustc-hex", - "smallvec", -] - -[[package]] -name = "trie-root" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a36c5ca3911ed3c9a5416ee6c679042064b93fc637ded67e25f92e68d783891" -dependencies = [ - "hash-db", -] - -[[package]] -name = "try-lock" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" - -[[package]] -name = "tt-call" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e66dcbec4290c69dd03c57e76c2469ea5c7ce109c6dd4351c13055cf71ea055" - -[[package]] -name = "twox-hash" -version = "1.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee73e6e4924fe940354b8d4d98cad5231175d615cd855b758adc658c0aac6a0" -dependencies = [ - "cfg-if", - "digest 0.10.3", - "rand 0.8.5", - "static_assertions", -] - -[[package]] -name = "typenum" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" - -[[package]] -name = "uint" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f03af7ccf01dd611cc450a0d10dbc9b745770d096473e2faf0ca6e2d66d1e0" -dependencies = [ - "byteorder", - "crunchy", - "hex", - "static_assertions", -] - -[[package]] -name = "unicode-normalization" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-segmentation" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" - -[[package]] -name = "unicode-xid" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" - -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "wait-timeout" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" -dependencies = [ - "libc", -] - -[[package]] -name = "want" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -dependencies = [ - "log", - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - -[[package]] -name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.80" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.80" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4" -dependencies = [ - "bumpalo", - "lazy_static", - "log", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.80" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.80" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.80" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744" - -[[package]] -name = "wasmi" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca00c5147c319a8ec91ec1a0edbec31e566ce2c9cc93b3f9bb86a9efd0eb795d" -dependencies = [ - "downcast-rs", - "libc", - "memory_units", - "num-rational 0.2.4", - "num-traits", - "parity-wasm", - "wasmi-validation", -] - -[[package]] -name = "wasmi-validation" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "165343ecd6c018fc09ebcae280752702c9a2ef3e6f8d02f1cfcbdb53ef6d7937" -dependencies = [ - "parity-wasm", -] - -[[package]] -name = "web-sys" -version = "0.3.57" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webpki" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "webpki-roots" -version = "0.22.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d8de8415c823c8abd270ad483c6feeac771fad964890779f9a8cb24fbbc1bf" -dependencies = [ - "webpki", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows-sys" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" -dependencies = [ - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" - -[[package]] -name = "windows_i686_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" - -[[package]] -name = "windows_i686_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" - -[[package]] -name = "wyz" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b31594f29d27036c383b53b59ed3476874d518f0efb151b27a4c275141390e" -dependencies = [ - "tap", -] - -[[package]] -name = "zeroize" -version = "1.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94693807d016b2f2d2e14420eb3bfcca689311ff775dcf113d74ea624b7cdf07" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f8f187641dad4f680d25c4bfc4225b418165984179f26ca76ec4fb6441d3a17" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] diff --git a/utils/staking-miner/Cargo.toml b/utils/staking-miner/Cargo.toml index aa4c2aef5299..1a92d44f9616 100644 --- a/utils/staking-miner/Cargo.toml +++ b/utils/staking-miner/Cargo.toml @@ -5,7 +5,7 @@ authors.workspace = true edition.workspace = true [dependencies] -codec = { package = "parity-scale-codec", version = "3.0.0" } +codec = { package = "parity-scale-codec", version = "3.3.0" } clap = { version = "4.0.9", features = ["derive", "env"] } tracing-subscriber = { version = "0.3.11", features = ["env-filter"] } jsonrpsee = { version = "0.16.2", features = ["ws-client", "macros"] } @@ -14,23 +14,23 @@ paste = "1.0.7" serde = "1.0.137" serde_json = "1.0" thiserror = "1.0.31" -tokio = { version = "1.22.0", features = ["macros", "rt-multi-thread", "sync"] } -remote-externalities = { git = "https://github.com/paritytech/substrate", package = "frame-remote-externalities" , branch = "polkadot-v0.9.36" } +tokio = { version = "1.24.2", features = ["macros", "rt-multi-thread", "sync"] } +remote-externalities = { git = "https://github.com/paritytech/substrate", package = "frame-remote-externalities" , branch = "polkadot-v0.9.40" } signal-hook-tokio = { version = "0.3", features = ["futures-v0_3"] } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-version = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-npos-elections = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sc-transaction-pool-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-version = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-npos-elections = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sc-transaction-pool-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } -frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -frame-election-provider-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -pallet-election-provider-multi-phase = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -pallet-staking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +frame-election-provider-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +pallet-election-provider-multi-phase = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +pallet-staking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } core-primitives = { package = "polkadot-core-primitives", path = "../../core-primitives" } diff --git a/utils/staking-miner/tests/cli.rs b/utils/staking-miner/tests/cli.rs index ebd5380f047b..fc26da98abe1 100644 --- a/utils/staking-miner/tests/cli.rs +++ b/utils/staking-miner/tests/cli.rs @@ -1,3 +1,19 @@ +// Copyright 2017-2023 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + use assert_cmd::{cargo::cargo_bin, Command}; use serde_json::{Result, Value}; diff --git a/xcm/Cargo.toml b/xcm/Cargo.toml index e58e1bb7c701..dd306da0d437 100644 --- a/xcm/Cargo.toml +++ b/xcm/Cargo.toml @@ -6,22 +6,28 @@ authors.workspace = true edition.workspace = true [dependencies] +bounded-collections = { version = "0.1.5", default-features = false } +derivative = { version = "2.2.0", default-features = false, features = [ "use_core" ] } impl-trait-for-tuples = "0.2.2" -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["derive", "max-encoded-len"] } -scale-info = { version = "2.1.2", default-features = false, features = ["derive"] } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -derivative = {version = "2.2.0", default-features = false, features = [ "use_core" ] } log = { version = "0.4.17", default-features = false } +parity-scale-codec = { version = "3.3.0", default-features = false, features = [ "derive", "max-encoded-len" ] } +scale-info = { version = "2.1.2", default-features = false, features = ["derive"] } +sp-weights = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +serde = { version = "1.0.136", optional = true, features = ["derive"] } xcm-procedural = { path = "procedural" } +[dev-dependencies] +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +hex = "0.4.3" +hex-literal = "0.3.4" + [features] default = ["std"] wasm-api = [] -runtime-benchmarks = [ - "sp-runtime/runtime-benchmarks", -] std = [ + "bounded-collections/std", "parity-scale-codec/std", "scale-info/std", - "sp-runtime/std", + "serde", + "sp-weights/std", ] diff --git a/xcm/pallet-xcm-benchmarks/Cargo.toml b/xcm/pallet-xcm-benchmarks/Cargo.toml index dd5f343a8f88..c29bc11cb095 100644 --- a/xcm/pallet-xcm-benchmarks/Cargo.toml +++ b/xcm/pallet-xcm-benchmarks/Cargo.toml @@ -8,24 +8,24 @@ version.workspace = true targets = ["x86_64-unknown-linux-gnu"] [dependencies] -codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false } +codec = { package = "parity-scale-codec", version = "3.3.0", default-features = false } scale-info = { version = "2.1.2", default-features = false, features = ["derive"] } -frame-support = { default-features = false, git = "https://github.com/paritytech/substrate" , branch = "polkadot-v0.9.36" } -frame-system = { default-features = false, git = "https://github.com/paritytech/substrate" , branch = "polkadot-v0.9.36" } -sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate" , branch = "polkadot-v0.9.36" } -sp-std = { default-features = false, git = "https://github.com/paritytech/substrate" , branch = "polkadot-v0.9.36" } +frame-support = { default-features = false, git = "https://github.com/paritytech/substrate" , branch = "polkadot-v0.9.40" } +frame-system = { default-features = false, git = "https://github.com/paritytech/substrate" , branch = "polkadot-v0.9.40" } +sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate" , branch = "polkadot-v0.9.40" } +sp-std = { default-features = false, git = "https://github.com/paritytech/substrate" , branch = "polkadot-v0.9.40" } +sp-io = { default-features = false, git = "https://github.com/paritytech/substrate" , branch = "polkadot-v0.9.40" } xcm-executor = { path = "../xcm-executor", default-features = false } -frame-benchmarking = { default-features = false, git = "https://github.com/paritytech/substrate" , branch = "polkadot-v0.9.36" } +frame-benchmarking = { default-features = false, git = "https://github.com/paritytech/substrate" , branch = "polkadot-v0.9.40" } xcm = { path = "..", default-features = false } +xcm-builder = { path = "../xcm-builder", default-features = false } log = "0.4.17" [dev-dependencies] -pallet-balances = { git = "https://github.com/paritytech/substrate" , branch = "polkadot-v0.9.36" } -pallet-assets = { git = "https://github.com/paritytech/substrate" , branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate" , branch = "polkadot-v0.9.36" } -sp-io = { git = "https://github.com/paritytech/substrate" , branch = "polkadot-v0.9.36" } -sp-tracing = { git = "https://github.com/paritytech/substrate" , branch = "polkadot-v0.9.36" } -xcm-builder = { path = "../xcm-builder" } +pallet-balances = { git = "https://github.com/paritytech/substrate" , branch = "polkadot-v0.9.40" } +pallet-assets = { git = "https://github.com/paritytech/substrate" , branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate" , branch = "polkadot-v0.9.40" } +sp-tracing = { git = "https://github.com/paritytech/substrate" , branch = "polkadot-v0.9.40" } xcm = { path = ".." } # temp pallet-xcm = { path = "../pallet-xcm" } @@ -40,11 +40,14 @@ std = [ "frame-benchmarking/std", "frame-support/std", "frame-system/std", + "sp-io/std", "sp-runtime/std", - "sp-std/std" + "sp-std/std", + "xcm-builder/std", + "xcm-executor/std" ] runtime-benchmarks = [ - "xcm/runtime-benchmarks", + "xcm-builder/runtime-benchmarks", "xcm-executor/runtime-benchmarks", "frame-benchmarking/runtime-benchmarks", "frame-support/runtime-benchmarks", diff --git a/xcm/pallet-xcm-benchmarks/src/fungible/benchmarking.rs b/xcm/pallet-xcm-benchmarks/src/fungible/benchmarking.rs index d97ac34b2651..fade0d4869b3 100644 --- a/xcm/pallet-xcm-benchmarks/src/fungible/benchmarking.rs +++ b/xcm/pallet-xcm-benchmarks/src/fungible/benchmarking.rs @@ -41,23 +41,31 @@ benchmarks_instance_pallet! { withdraw_asset { let (sender_account, sender_location) = account_and_location::(1); - let worst_case_holding = T::worst_case_holding(); + let worst_case_holding = T::worst_case_holding(0); let asset = T::get_multi_asset(); - >::deposit_asset(&asset, &sender_location).unwrap(); + >::deposit_asset( + &asset, + &sender_location, + &XcmContext { + origin: Some(sender_location.clone()), + message_hash: [0; 32], + topic: None, + }, + ).unwrap(); // check the assets of origin. assert!(!T::TransactAsset::balance(&sender_account).is_zero()); let mut executor = new_executor::(sender_location); - executor.holding = worst_case_holding.into(); + executor.set_holding(worst_case_holding.into()); let instruction = Instruction::>::WithdrawAsset(vec![asset.clone()].into()); let xcm = Xcm(vec![instruction]); }: { - executor.execute(xcm)?; + executor.bench_process(xcm)?; } verify { // check one of the assets of origin. assert!(T::TransactAsset::balance(&sender_account).is_zero()); - assert!(executor.holding.ensure_contains(&vec![asset].into()).is_ok()); + assert!(executor.holding().ensure_contains(&vec![asset].into()).is_ok()); } transfer_asset { @@ -69,14 +77,22 @@ benchmarks_instance_pallet! { let dest_location = T::valid_destination()?; let dest_account = T::AccountIdConverter::convert(dest_location.clone()).unwrap(); - >::deposit_asset(&asset, &sender_location).unwrap(); + >::deposit_asset( + &asset, + &sender_location, + &XcmContext { + origin: Some(sender_location.clone()), + message_hash: [0; 32], + topic: None, + }, + ).unwrap(); assert!(T::TransactAsset::balance(&dest_account).is_zero()); let mut executor = new_executor::(sender_location); let instruction = Instruction::TransferAsset { assets, beneficiary: dest_location }; let xcm = Xcm(vec![instruction]); }: { - executor.execute(xcm)?; + executor.bench_process(xcm)?; } verify { assert!(T::TransactAsset::balance(&sender_account).is_zero()); assert!(!T::TransactAsset::balance(&dest_account).is_zero()); @@ -88,7 +104,15 @@ benchmarks_instance_pallet! { let dest_account = T::AccountIdConverter::convert(dest_location.clone()).unwrap(); let asset = T::get_multi_asset(); - >::deposit_asset(&asset, &sender_location).unwrap(); + >::deposit_asset( + &asset, + &sender_location, + &XcmContext { + origin: Some(sender_location.clone()), + message_hash: [0; 32], + topic: None, + }, + ).unwrap(); let assets: MultiAssets = vec![ asset ].into(); assert!(T::TransactAsset::balance(&dest_account).is_zero()); @@ -100,38 +124,19 @@ benchmarks_instance_pallet! { }; let xcm = Xcm(vec![instruction]); }: { - executor.execute(xcm)?; + executor.bench_process(xcm)?; } verify { assert!(T::TransactAsset::balance(&sender_account).is_zero()); assert!(!T::TransactAsset::balance(&dest_account).is_zero()); // TODO: Check sender queue is not empty. #4426 } - reserve_asset_deposited { - let (trusted_reserve, transferable_reserve_asset) = T::TrustedReserve::get() - .ok_or(BenchmarkError::Skip)?; - - let assets: MultiAssets = vec![ transferable_reserve_asset ].into(); - - let mut executor = new_executor::(trusted_reserve); - let instruction = Instruction::ReserveAssetDeposited(assets.clone()); - let xcm = Xcm(vec![instruction]); - }: { - executor.execute(xcm).map_err(|_| { - BenchmarkError::Override( - BenchmarkResult::from_weight(T::BlockWeights::get().max_block) - ) - })?; - } verify { - assert!(executor.holding.ensure_contains(&assets).is_ok()); - } - receive_teleported_asset { // If there is no trusted teleporter, then we skip this benchmark. let (trusted_teleporter, teleportable_asset) = T::TrustedTeleporter::get() .ok_or(BenchmarkError::Skip)?; - if let Some(checked_account) = T::CheckedAccount::get() { + if let Some((checked_account, _)) = T::CheckedAccount::get() { T::TransactAsset::mint_into( &checked_account, < @@ -148,18 +153,18 @@ benchmarks_instance_pallet! { let instruction = Instruction::ReceiveTeleportedAsset(assets.clone()); let xcm = Xcm(vec![instruction]); }: { - executor.execute(xcm).map_err(|_| { + executor.bench_process(xcm).map_err(|_| { BenchmarkError::Override( BenchmarkResult::from_weight(T::BlockWeights::get().max_block) ) })?; } verify { - assert!(executor.holding.ensure_contains(&assets).is_ok()); + assert!(executor.holding().ensure_contains(&assets).is_ok()); } deposit_asset { let asset = T::get_multi_asset(); - let mut holding = T::worst_case_holding(); + let mut holding = T::worst_case_holding(1); // Add our asset to the holding. holding.push(asset.clone()); @@ -170,15 +175,14 @@ benchmarks_instance_pallet! { assert!(T::TransactAsset::balance(&dest_account).is_zero()); let mut executor = new_executor::(Default::default()); - executor.holding = holding.into(); + executor.set_holding(holding.into()); let instruction = Instruction::>::DepositAsset { assets: asset.into(), - max_assets: 1, beneficiary: dest_location, }; let xcm = Xcm(vec![instruction]); }: { - executor.execute(xcm)?; + executor.bench_process(xcm)?; } verify { // dest should have received some asset. assert!(!T::TransactAsset::balance(&dest_account).is_zero()) @@ -186,7 +190,7 @@ benchmarks_instance_pallet! { deposit_reserve_asset { let asset = T::get_multi_asset(); - let mut holding = T::worst_case_holding(); + let mut holding = T::worst_case_holding(1); // Add our asset to the holding. holding.push(asset.clone()); @@ -197,16 +201,15 @@ benchmarks_instance_pallet! { assert!(T::TransactAsset::balance(&dest_account).is_zero()); let mut executor = new_executor::(Default::default()); - executor.holding = holding.into(); + executor.set_holding(holding.into()); let instruction = Instruction::>::DepositReserveAsset { assets: asset.into(), - max_assets: 1, dest: dest_location, xcm: Xcm::new(), }; let xcm = Xcm(vec![instruction]); }: { - executor.execute(xcm)?; + executor.bench_process(xcm)?; } verify { // dest should have received some asset. assert!(!T::TransactAsset::balance(&dest_account).is_zero()) @@ -214,16 +217,16 @@ benchmarks_instance_pallet! { initiate_teleport { let asset = T::get_multi_asset(); - let mut holding = T::worst_case_holding(); + let mut holding = T::worst_case_holding(0); // Add our asset to the holding. holding.push(asset.clone()); // Checked account starts at zero - assert!(T::CheckedAccount::get().map_or(true, |c| T::TransactAsset::balance(&c).is_zero())); + assert!(T::CheckedAccount::get().map_or(true, |(c, _)| T::TransactAsset::balance(&c).is_zero())); let mut executor = new_executor::(Default::default()); - executor.holding = holding.into(); + executor.set_holding(holding.into()); let instruction = Instruction::>::InitiateTeleport { assets: asset.into(), dest: T::valid_destination()?, @@ -231,9 +234,9 @@ benchmarks_instance_pallet! { }; let xcm = Xcm(vec![instruction]); }: { - executor.execute(xcm)?; + executor.bench_process(xcm)?; } verify { - if let Some(checked_account) = T::CheckedAccount::get() { + if let Some((checked_account, _)) = T::CheckedAccount::get() { // teleport checked account should have received some asset. assert!(!T::TransactAsset::balance(&checked_account).is_zero()); } diff --git a/xcm/pallet-xcm-benchmarks/src/fungible/mock.rs b/xcm/pallet-xcm-benchmarks/src/fungible/mock.rs index 3722c7602a84..e3a02a9bcf94 100644 --- a/xcm/pallet-xcm-benchmarks/src/fungible/mock.rs +++ b/xcm/pallet-xcm-benchmarks/src/fungible/mock.rs @@ -18,7 +18,11 @@ use crate::{fungible as xcm_balances_benchmark, mock::*}; use frame_benchmarking::BenchmarkError; -use frame_support::{parameter_types, traits::Everything, weights::Weight}; +use frame_support::{ + parameter_types, + traits::{Everything, Nothing}, + weights::Weight, +}; use sp_core::H256; use sp_runtime::{ testing::Header, @@ -26,7 +30,7 @@ use sp_runtime::{ BuildStorage, }; use xcm::latest::prelude::*; -use xcm_builder::AllowUnpaidExecutionFrom; +use xcm_builder::{AllowUnpaidExecutionFrom, MintLocation}; type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic; type Block = frame_system::mocking::MockBlock; @@ -47,9 +51,7 @@ frame_support::construct_runtime!( parameter_types! { pub const BlockHashCount: u64 = 250; pub BlockWeights: frame_system::limits::BlockWeights = - frame_system::limits::BlockWeights::simple_max( - Weight::from_ref_time(1024).set_proof_size(u64::MAX), - ); + frame_system::limits::BlockWeights::simple_max(Weight::from_parts(1024, u64::MAX)); } impl frame_system::Config for Test { type BaseCallFilter = Everything; @@ -119,13 +121,14 @@ pub type AssetTransactor = xcm_builder::CurrencyAdapter< MatchAnyFungible, AccountIdConverter, u64, - CheckedAccount, + CheckingAccount, >; parameter_types! { /// Maximum number of instructions in a single XCM fragment. A sanity check against weight /// calculations getting too crazy. pub const MaxInstructions: u32 = 100; + pub const MaxAssetsIntoHolding: u32 = 64; } pub struct XcmConfig; @@ -134,16 +137,25 @@ impl xcm_executor::Config for XcmConfig { type XcmSender = DevNull; type AssetTransactor = AssetTransactor; type OriginConverter = (); - type IsReserve = TrustedReserves; + type IsReserve = (); type IsTeleporter = TrustedTeleporters; - type LocationInverter = xcm_builder::LocationInverter; + type UniversalLocation = UniversalLocation; type Barrier = AllowUnpaidExecutionFrom; type Weigher = xcm_builder::FixedWeightBounds; type Trader = xcm_builder::FixedRateOfFungible; type ResponseHandler = DevNull; type AssetTrap = (); + type AssetLocker = (); + type AssetExchanger = (); type AssetClaims = (); type SubscriptionService = (); + type PalletInstancesInfo = AllPalletsWithSystem; + type MaxAssetsIntoHolding = MaxAssetsIntoHolding; + type FeeManager = (); + type MessageExporter = (); + type UniversalAliases = Nothing; + type CallDispatcher = RuntimeCall; + type SafeCallFilter = Everything; } impl crate::Config for Test { @@ -151,40 +163,37 @@ impl crate::Config for Test { type AccountIdConverter = AccountIdConverter; fn valid_destination() -> Result { let valid_destination: MultiLocation = - X1(AccountId32 { network: NetworkId::Any, id: [0u8; 32] }).into(); + X1(AccountId32 { network: None, id: [0u8; 32] }).into(); Ok(valid_destination) } - fn worst_case_holding() -> MultiAssets { - crate::mock_worst_case_holding() + fn worst_case_holding(depositable_count: u32) -> MultiAssets { + crate::mock_worst_case_holding( + depositable_count, + ::MaxAssetsIntoHolding::get(), + ) } } -pub type TrustedTeleporters = (xcm_builder::Case,); -pub type TrustedReserves = (xcm_builder::Case,); +pub type TrustedTeleporters = (xcm_builder::Case,); parameter_types! { - pub const CheckedAccount: Option = Some(100); - pub const ChildTeleporter: MultiLocation = Parachain(1000).into(); + pub const CheckingAccount: Option<(u64, MintLocation)> = Some((100, MintLocation::Local)); + pub const ChildTeleporter: MultiLocation = Parachain(1000).into_location(); pub const TrustedTeleporter: Option<(MultiLocation, MultiAsset)> = Some(( ChildTeleporter::get(), - MultiAsset { id: Concrete(Here.into()), fun: Fungible(100) }, - )); - pub const TrustedReserve: Option<(MultiLocation, MultiAsset)> = Some(( - ChildTeleporter::get(), - MultiAsset { id: Concrete(Here.into()), fun: Fungible(100) }, + MultiAsset { id: Concrete(Here.into_location()), fun: Fungible(100) }, )); - pub const TeleConcreteFung: (MultiAssetFilter, MultiLocation) = - (Wild(AllOf { fun: WildFungible, id: Concrete(Here.into()) }), ChildTeleporter::get()); - pub const RsrvConcreteFung: (MultiAssetFilter, MultiLocation) = - (Wild(AllOf { fun: WildFungible, id: Concrete(Here.into()) }), ChildTeleporter::get()); + pub const TeleportConcreteFungible: (MultiAssetFilter, MultiLocation) = + (Wild(AllOf { fun: WildFungible, id: Concrete(Here.into_location()) }), ChildTeleporter::get()); + pub const ReserveConcreteFungible: (MultiAssetFilter, MultiLocation) = + (Wild(AllOf { fun: WildFungible, id: Concrete(Here.into_location()) }), ChildTeleporter::get()); } impl xcm_balances_benchmark::Config for Test { type TransactAsset = Balances; - type CheckedAccount = CheckedAccount; + type CheckedAccount = CheckingAccount; type TrustedTeleporter = TrustedTeleporter; - type TrustedReserve = TrustedReserve; fn get_multi_asset() -> MultiAsset { let amount = diff --git a/xcm/pallet-xcm-benchmarks/src/fungible/mod.rs b/xcm/pallet-xcm-benchmarks/src/fungible/mod.rs index a7fd0e99fd8e..011e84a0e42e 100644 --- a/xcm/pallet-xcm-benchmarks/src/fungible/mod.rs +++ b/xcm/pallet-xcm-benchmarks/src/fungible/mod.rs @@ -34,15 +34,11 @@ pub mod pallet { type TransactAsset: frame_support::traits::fungible::Mutate; /// The account used to check assets being teleported. - type CheckedAccount: Get>; + type CheckedAccount: Get>; /// A trusted location which we allow teleports from, and the asset we allow to teleport. type TrustedTeleporter: Get>; - /// A trusted location where reserve assets are stored, and the asset we allow to be - /// reserves. - type TrustedReserve: Get>; - /// Give me a fungible asset that your asset transactor is going to accept. fn get_multi_asset() -> xcm::latest::MultiAsset; } diff --git a/xcm/pallet-xcm-benchmarks/src/generic/benchmarking.rs b/xcm/pallet-xcm-benchmarks/src/generic/benchmarking.rs index aed6140b3a4b..3976c482eb8d 100644 --- a/xcm/pallet-xcm-benchmarks/src/generic/benchmarking.rs +++ b/xcm/pallet-xcm-benchmarks/src/generic/benchmarking.rs @@ -20,27 +20,33 @@ use codec::Encode; use frame_benchmarking::{benchmarks, BenchmarkError}; use frame_support::dispatch::GetDispatchInfo; use sp_std::vec; -use xcm::{latest::prelude::*, DoubleEncoded}; +use xcm::{ + latest::{prelude::*, MaxDispatchErrorLen, MaybeErrorCode, Weight}, + DoubleEncoded, +}; +use xcm_executor::{ExecutorError, FeesMode}; benchmarks! { - query_holding { - let holding = T::worst_case_holding(); + report_holding { + let holding = T::worst_case_holding(0); let mut executor = new_executor::(Default::default()); - executor.holding = holding.clone().into(); + executor.set_holding(holding.clone().into()); - let instruction = Instruction::>::QueryHolding { - query_id: Default::default(), - dest: T::valid_destination()?, + let instruction = Instruction::>::ReportHolding { + response_info: QueryResponseInfo { + destination: T::valid_destination()?, + query_id: Default::default(), + max_weight: Weight::MAX, + }, // Worst case is looking through all holdings for every asset explicitly. assets: Definite(holding), - max_response_weight: u64::MAX, }; let xcm = Xcm(vec![instruction]); } : { - executor.execute(xcm)?; + executor.bench_process(xcm)?; } verify { // The completion of execution above is enough to validate this is completed. } @@ -48,21 +54,21 @@ benchmarks! { // This benchmark does not use any additional orders or instructions. This should be managed // by the `deep` and `shallow` implementation. buy_execution { - let holding = T::worst_case_holding().into(); + let holding = T::worst_case_holding(0).into(); let mut executor = new_executor::(Default::default()); - executor.holding = holding; + executor.set_holding(holding); let fee_asset = Concrete(Here.into()); let instruction = Instruction::>::BuyExecution { - fees: (fee_asset, 100_000_000).into(), // should be something inside of holding + fees: (fee_asset, 100_000_000u128).into(), // should be something inside of holding weight_limit: WeightLimit::Unlimited, }; let xcm = Xcm(vec![instruction]); } : { - executor.execute(xcm)?; + executor.bench_process(xcm)?; } verify { } @@ -70,11 +76,12 @@ benchmarks! { query_response { let mut executor = new_executor::(Default::default()); let (query_id, response) = T::worst_case_response(); - let max_weight = u64::MAX; - let instruction = Instruction::QueryResponse { query_id, response, max_weight }; + let max_weight = Weight::MAX; + let querier: Option = Some(Here.into()); + let instruction = Instruction::QueryResponse { query_id, response, max_weight, querier }; let xcm = Xcm(vec![instruction]); }: { - executor.execute(xcm)?; + executor.bench_process(xcm)?; } verify { // The assert above is enough to show this XCM succeeded } @@ -83,43 +90,36 @@ benchmarks! { // and included in the final weight calculation. So this is just the overhead of submitting // a noop call. transact { - let origin = T::transact_origin()?; + let (origin, noop_call) = T::transact_origin_and_runtime_call()?; let mut executor = new_executor::(origin); - let noop_call: ::RuntimeCall = frame_system::Call::remark_with_event { - remark: Default::default() - }.into(); let double_encoded_noop_call: DoubleEncoded<_> = noop_call.encode().into(); let instruction = Instruction::Transact { - origin_type: OriginKind::SovereignAccount, - require_weight_at_most: noop_call.get_dispatch_info().weight.ref_time(), + origin_kind: OriginKind::SovereignAccount, + require_weight_at_most: noop_call.get_dispatch_info().weight, call: double_encoded_noop_call, }; let xcm = Xcm(vec![instruction]); - - let num_events = frame_system::Pallet::::events().len(); }: { - executor.execute(xcm)?; + executor.bench_process(xcm)?; } verify { - // TODO make better assertion? #4426 - let num_events2 = frame_system::Pallet::::events().len(); - assert_eq!(num_events + 1, num_events2); + // TODO Make the assertion configurable? } refund_surplus { - let holding = T::worst_case_holding().into(); + let holding = T::worst_case_holding(0).into(); let mut executor = new_executor::(Default::default()); - executor.holding = holding; - executor.total_surplus = 1337; - executor.total_refunded = 0; + executor.set_holding(holding); + executor.set_total_surplus(Weight::from_parts(1337, 1337)); + executor.set_total_refunded(Weight::zero()); let instruction = Instruction::>::RefundSurplus; let xcm = Xcm(vec![instruction]); } : { - let result = executor.execute(xcm)?; + let result = executor.bench_process(xcm)?; } verify { - assert_eq!(executor.total_surplus, 1337); - assert_eq!(executor.total_refunded, 1337); + assert_eq!(executor.total_surplus(), &Weight::from_parts(1337, 1337)); + assert_eq!(executor.total_refunded(), &Weight::from_parts(1337, 1337)); } set_error_handler { @@ -127,9 +127,9 @@ benchmarks! { let instruction = Instruction::>::SetErrorHandler(Xcm(vec![])); let xcm = Xcm(vec![instruction]); } : { - executor.execute(xcm)?; + executor.bench_process(xcm)?; } verify { - assert_eq!(executor.error_handler, Xcm(vec![])); + assert_eq!(executor.error_handler(), &Xcm(vec![])); } set_appendix { @@ -138,20 +138,20 @@ benchmarks! { let instruction = Instruction::>::SetAppendix(appendix); let xcm = Xcm(vec![instruction]); } : { - executor.execute(xcm)?; + executor.bench_process(xcm)?; } verify { - assert_eq!(executor.appendix, Xcm(vec![])); + assert_eq!(executor.appendix(), &Xcm(vec![])); } clear_error { let mut executor = new_executor::(Default::default()); - executor.error = Some((5u32, XcmError::Overflow)); + executor.set_error(Some((5u32, XcmError::Overflow))); let instruction = Instruction::>::ClearError; let xcm = Xcm(vec![instruction]); } : { - executor.execute(xcm)?; + executor.bench_process(xcm)?; } verify { - assert!(executor.error.is_none()) + assert!(executor.error().is_none()) } descend_origin { @@ -160,11 +160,11 @@ benchmarks! { let instruction = Instruction::DescendOrigin(who.clone()); let xcm = Xcm(vec![instruction]); } : { - executor.execute(xcm)?; + executor.bench_process(xcm)?; } verify { assert_eq!( - executor.origin, - Some(MultiLocation { + executor.origin(), + &Some(MultiLocation { parents: 0, interior: who, }), @@ -176,22 +176,24 @@ benchmarks! { let instruction = Instruction::ClearOrigin; let xcm = Xcm(vec![instruction]); } : { - executor.execute(xcm)?; + executor.bench_process(xcm)?; } verify { - assert_eq!(executor.origin, None); + assert_eq!(executor.origin(), &None); } report_error { let mut executor = new_executor::(Default::default()); - executor.error = Some((0u32, XcmError::Unimplemented)); + executor.set_error(Some((0u32, XcmError::Unimplemented))); let query_id = Default::default(); - let dest = T::valid_destination().map_err(|_| BenchmarkError::Skip)?; - let max_response_weight = Default::default(); + let destination = T::valid_destination().map_err(|_| BenchmarkError::Skip)?; + let max_weight = Default::default(); - let instruction = Instruction::ReportError { query_id, dest, max_response_weight }; + let instruction = Instruction::ReportError(QueryResponseInfo { + query_id, destination, max_weight + }); let xcm = Xcm(vec![instruction]); }: { - executor.execute(xcm)?; + executor.bench_process(xcm)?; } verify { // the execution succeeding is all we need to verify this xcm was successful } @@ -205,6 +207,11 @@ benchmarks! { ::AssetTrap::drop_assets( &origin, assets.clone().into(), + &XcmContext { + origin: Some(origin.clone()), + message_hash: [0; 32], + topic: None, + }, ); // Assets should be in the trap now. @@ -213,9 +220,9 @@ benchmarks! { let instruction = Instruction::ClaimAsset { assets: assets.clone(), ticket }; let xcm = Xcm(vec![instruction]); } :{ - executor.execute(xcm)?; + executor.bench_process(xcm)?; } verify { - assert!(executor.holding.ensure_contains(&assets).is_ok()); + assert!(executor.holding().ensure_contains(&assets).is_ok()); } trap { @@ -225,14 +232,12 @@ benchmarks! { // In order to access result in the verification below, it needs to be defined here. let mut _result = Ok(()); } : { - _result = executor.execute(xcm); + _result = executor.bench_process(xcm); } verify { - match _result { - Err(error) if error.xcm_error == XcmError::Trap(10) => { - // This is the success condition - }, - _ => Err("xcm trap did not return the expected error")? - }; + assert!(matches!(_result, Err(ExecutorError { + xcm_error: XcmError::Trap(10), + .. + }))); } subscribe_version { @@ -244,7 +249,7 @@ benchmarks! { let instruction = Instruction::SubscribeVersion { query_id, max_response_weight }; let xcm = Xcm(vec![instruction]); } : { - executor.execute(xcm)?; + executor.bench_process(xcm)?; } verify { assert!(::SubscriptionService::is_subscribed(&origin)); } @@ -252,13 +257,18 @@ benchmarks! { unsubscribe_version { use xcm_executor::traits::VersionChangeNotifier; // First we need to subscribe to notifications. - let origin = T::transact_origin()?; + let (origin, _) = T::transact_origin_and_runtime_call()?; let query_id = Default::default(); let max_response_weight = Default::default(); ::SubscriptionService::start( &origin, query_id, - max_response_weight + max_response_weight, + &XcmContext { + origin: Some(origin.clone()), + message_hash: [0; 32], + topic: None, + }, ).map_err(|_| "Could not start subscription")?; assert!(::SubscriptionService::is_subscribed(&origin)); @@ -266,30 +276,346 @@ benchmarks! { let instruction = Instruction::UnsubscribeVersion; let xcm = Xcm(vec![instruction]); } : { - executor.execute(xcm)?; + executor.bench_process(xcm)?; } verify { assert!(!::SubscriptionService::is_subscribed(&origin)); } initiate_reserve_withdraw { - let holding = T::worst_case_holding(); + let holding = T::worst_case_holding(1); let assets_filter = MultiAssetFilter::Definite(holding.clone()); let reserve = T::valid_destination().map_err(|_| BenchmarkError::Skip)?; let mut executor = new_executor::(Default::default()); - executor.holding = holding.into(); + executor.set_holding(holding.into()); let instruction = Instruction::InitiateReserveWithdraw { assets: assets_filter, reserve, xcm: Xcm(vec![]) }; let xcm = Xcm(vec![instruction]); - }:{ - executor.execute(xcm)?; + }: { + executor.bench_process(xcm)?; } verify { // The execute completing successfully is as good as we can check. // TODO: Potentially add new trait to XcmSender to detect a queued outgoing message. #4426 } + burn_asset { + let holding = T::worst_case_holding(0); + let assets = holding.clone(); + + let mut executor = new_executor::(Default::default()); + executor.set_holding(holding.into()); + + let instruction = Instruction::BurnAsset(assets.into()); + let xcm = Xcm(vec![instruction]); + }: { + executor.bench_process(xcm)?; + } verify { + assert!(executor.holding().is_empty()); + } + + expect_asset { + let holding = T::worst_case_holding(0); + let assets = holding.clone(); + + let mut executor = new_executor::(Default::default()); + executor.set_holding(holding.into()); + + let instruction = Instruction::ExpectAsset(assets.into()); + let xcm = Xcm(vec![instruction]); + }: { + executor.bench_process(xcm)?; + } verify { + // `execute` completing successfully is as good as we can check. + } + + expect_origin { + let expected_origin = Parent.into(); + let mut executor = new_executor::(Default::default()); + + let instruction = Instruction::ExpectOrigin(Some(expected_origin)); + let xcm = Xcm(vec![instruction]); + let mut _result = Ok(()); + }: { + _result = executor.bench_process(xcm); + } verify { + assert!(matches!(_result, Err(ExecutorError { + xcm_error: XcmError::ExpectationFalse, + .. + }))); + } + + expect_error { + let mut executor = new_executor::(Default::default()); + executor.set_error(Some((3u32, XcmError::Overflow))); + + let instruction = Instruction::ExpectError(None); + let xcm = Xcm(vec![instruction]); + let mut _result = Ok(()); + }: { + _result = executor.bench_process(xcm); + } verify { + assert!(matches!(_result, Err(ExecutorError { + xcm_error: XcmError::ExpectationFalse, + .. + }))); + } + + expect_transact_status { + let mut executor = new_executor::(Default::default()); + let worst_error = || -> MaybeErrorCode { + vec![0; MaxDispatchErrorLen::get() as usize].into() + }; + executor.set_transact_status(worst_error()); + + let instruction = Instruction::ExpectTransactStatus(worst_error()); + let xcm = Xcm(vec![instruction]); + let mut _result = Ok(()); + }: { + _result = executor.bench_process(xcm); + } verify { + assert!(matches!(_result, Ok(..))); + } + + query_pallet { + let query_id = Default::default(); + let destination = T::valid_destination().map_err(|_| BenchmarkError::Skip)?; + let max_weight = Default::default(); + let mut executor = new_executor::(Default::default()); + + let instruction = Instruction::QueryPallet { + module_name: b"frame_system".to_vec(), + response_info: QueryResponseInfo { destination, query_id, max_weight }, + }; + let xcm = Xcm(vec![instruction]); + }: { + executor.bench_process(xcm)?; + } verify { + // TODO: Potentially add new trait to XcmSender to detect a queued outgoing message. #4426 + } + + expect_pallet { + let mut executor = new_executor::(Default::default()); + + let instruction = Instruction::ExpectPallet { + index: 0, + name: b"System".to_vec(), + module_name: b"frame_system".to_vec(), + crate_major: 4, + min_crate_minor: 0, + }; + let xcm = Xcm(vec![instruction]); + }: { + executor.bench_process(xcm)?; + } verify { + // the execution succeeding is all we need to verify this xcm was successful + } + + report_transact_status { + let query_id = Default::default(); + let destination = T::valid_destination().map_err(|_| BenchmarkError::Skip)?; + let max_weight = Default::default(); + + let mut executor = new_executor::(Default::default()); + executor.set_transact_status(b"MyError".to_vec().into()); + + let instruction = Instruction::ReportTransactStatus(QueryResponseInfo { + query_id, + destination, + max_weight, + }); + let xcm = Xcm(vec![instruction]); + }: { + executor.bench_process(xcm)?; + } verify { + // TODO: Potentially add new trait to XcmSender to detect a queued outgoing message. #4426 + } + + clear_transact_status { + let mut executor = new_executor::(Default::default()); + executor.set_transact_status(b"MyError".to_vec().into()); + + let instruction = Instruction::ClearTransactStatus; + let xcm = Xcm(vec![instruction]); + }: { + executor.bench_process(xcm)?; + } verify { + assert_eq!(executor.transact_status(), &MaybeErrorCode::Success); + } + + set_topic { + let mut executor = new_executor::(Default::default()); + + let instruction = Instruction::SetTopic([1; 32]); + let xcm = Xcm(vec![instruction]); + }: { + executor.bench_process(xcm)?; + } verify { + assert_eq!(executor.topic(), &Some([1; 32])); + } + + clear_topic { + let mut executor = new_executor::(Default::default()); + executor.set_topic(Some([2; 32])); + + let instruction = Instruction::ClearTopic; + let xcm = Xcm(vec![instruction]); + }: { + executor.bench_process(xcm)?; + } verify { + assert_eq!(executor.topic(), &None); + } + + exchange_asset { + let (give, want) = T::worst_case_asset_exchange().map_err(|_| BenchmarkError::Skip)?; + let assets = give.clone(); + + let mut executor = new_executor::(Default::default()); + executor.set_holding(give.into()); + let instruction = Instruction::ExchangeAsset { + give: assets.into(), + want: want.clone(), + maximal: true, + }; + let xcm = Xcm(vec![instruction]); + }: { + executor.bench_process(xcm)?; + } verify { + assert_eq!(executor.holding(), &want.into()); + } + + universal_origin { + let alias = T::universal_alias().map_err(|_| BenchmarkError::Skip)?; + + let mut executor = new_executor::(Here.into_location()); + + let instruction = Instruction::UniversalOrigin(alias.clone()); + let xcm = Xcm(vec![instruction]); + }: { + executor.bench_process(xcm)?; + } verify { + use frame_support::traits::Get; + let universal_location = ::UniversalLocation::get(); + assert_eq!(executor.origin(), &Some(X1(alias).relative_to(&universal_location))); + } + + set_fees_mode { + let mut executor = new_executor::(Default::default()); + executor.set_fees_mode(FeesMode { jit_withdraw: false }); + + let instruction = Instruction::SetFeesMode { jit_withdraw: true }; + let xcm = Xcm(vec![instruction]); + }: { + executor.bench_process(xcm)?; + } verify { + assert_eq!(executor.fees_mode(), &FeesMode { jit_withdraw: true }); + } + + lock_asset { + let (unlocker, owner, asset) = T::unlockable_asset()?; + + let mut executor = new_executor::(owner); + executor.set_holding(asset.clone().into()); + + let instruction = Instruction::LockAsset { asset, unlocker }; + let xcm = Xcm(vec![instruction]); + }: { + executor.bench_process(xcm)?; + } verify { + // TODO: Potentially add new trait to XcmSender to detect a queued outgoing message. #4426 + } + + unlock_asset { + use xcm_executor::traits::{AssetLock, Enact}; + + let (unlocker, owner, asset) = T::unlockable_asset()?; + + let mut executor = new_executor::(unlocker.clone()); + + // We first place the asset in lock first... + ::AssetLocker::prepare_lock( + unlocker, + asset.clone(), + owner.clone(), + ) + .map_err(|_| BenchmarkError::Skip)? + .enact() + .map_err(|_| BenchmarkError::Skip)?; + + // ... then unlock them with the UnlockAsset instruction. + let instruction = Instruction::UnlockAsset { asset, target: owner }; + let xcm = Xcm(vec![instruction]); + }: { + executor.bench_process(xcm)?; + } verify { + + } + + note_unlockable { + use xcm_executor::traits::{AssetLock, Enact}; + + let (unlocker, owner, asset) = T::unlockable_asset()?; + + let mut executor = new_executor::(unlocker.clone()); + + // We first place the asset in lock first... + ::AssetLocker::prepare_lock( + unlocker, + asset.clone(), + owner.clone(), + ) + .map_err(|_| BenchmarkError::Skip)? + .enact() + .map_err(|_| BenchmarkError::Skip)?; + + // ... then note them as unlockable with the NoteUnlockable instruction. + let instruction = Instruction::NoteUnlockable { asset, owner }; + let xcm = Xcm(vec![instruction]); + }: { + executor.bench_process(xcm)?; + } verify { + + } + + request_unlock { + use xcm_executor::traits::{AssetLock, Enact}; + + let (locker, owner, asset) = T::unlockable_asset()?; + + // We first place the asset in lock first... + ::AssetLocker::prepare_lock( + locker.clone(), + asset.clone(), + owner.clone(), + ) + .map_err(|_| BenchmarkError::Skip)? + .enact() + .map_err(|_| BenchmarkError::Skip)?; + + // ... then request for an unlock with the RequestUnlock instruction. + let mut executor = new_executor::(owner); + let instruction = Instruction::RequestUnlock { asset, locker }; + let xcm = Xcm(vec![instruction]); + }: { + executor.bench_process(xcm)?; + } verify { + // TODO: Potentially add new trait to XcmSender to detect a queued outgoing message. #4426 + } + + unpaid_execution { + let mut executor = new_executor::(Default::default()); + executor.set_origin(Some(Here.into())); + + let instruction = Instruction::>::UnpaidExecution { + weight_limit: WeightLimit::Unlimited, + check_origin: Some(Here.into()), + }; + + let xcm = Xcm(vec![instruction]); + }: { + executor.bench_process(xcm)?; + } + impl_benchmark_test_suite!( Pallet, crate::generic::mock::new_test_ext(), crate::generic::mock::Test ); - } diff --git a/xcm/pallet-xcm-benchmarks/src/generic/mock.rs b/xcm/pallet-xcm-benchmarks/src/generic/mock.rs index 1aeec6c317fe..79f9f28e32f5 100644 --- a/xcm/pallet-xcm-benchmarks/src/generic/mock.rs +++ b/xcm/pallet-xcm-benchmarks/src/generic/mock.rs @@ -30,7 +30,10 @@ use sp_runtime::{ BuildStorage, }; use xcm_builder::{ - test_utils::{Assets, TestAssetTrap, TestSubscriptionService}, + test_utils::{ + Assets, TestAssetExchanger, TestAssetLocker, TestAssetTrap, TestSubscriptionService, + TestUniversalAliases, + }, AllowUnpaidExecutionFrom, }; use xcm_executor::traits::ConvertOrigin; @@ -52,9 +55,7 @@ frame_support::construct_runtime!( parameter_types! { pub const BlockHashCount: u64 = 250; pub BlockWeights: frame_system::limits::BlockWeights = - frame_system::limits::BlockWeights::simple_max( - Weight::from_ref_time(1024).set_proof_size(u64::MAX), - ); + frame_system::limits::BlockWeights::simple_max(Weight::from_parts(1024, u64::MAX)); } impl frame_system::Config for Test { @@ -87,17 +88,22 @@ impl frame_system::Config for Test { /// The benchmarks in this pallet should never need an asset transactor to begin with. pub struct NoAssetTransactor; impl xcm_executor::traits::TransactAsset for NoAssetTransactor { - fn deposit_asset(_: &MultiAsset, _: &MultiLocation) -> Result<(), XcmError> { + fn deposit_asset(_: &MultiAsset, _: &MultiLocation, _: &XcmContext) -> Result<(), XcmError> { unreachable!(); } - fn withdraw_asset(_: &MultiAsset, _: &MultiLocation) -> Result { + fn withdraw_asset( + _: &MultiAsset, + _: &MultiLocation, + _: Option<&XcmContext>, + ) -> Result { unreachable!(); } } parameter_types! { pub const MaxInstructions: u32 = 100; + pub const MaxAssetsIntoHolding: u32 = 64; } pub struct XcmConfig; @@ -108,14 +114,24 @@ impl xcm_executor::Config for XcmConfig { type OriginConverter = AlwaysSignedByDefault; type IsReserve = AllAssetLocationsPass; type IsTeleporter = (); - type LocationInverter = xcm_builder::LocationInverter; + type UniversalLocation = UniversalLocation; type Barrier = AllowUnpaidExecutionFrom; type Weigher = xcm_builder::FixedWeightBounds; type Trader = xcm_builder::FixedRateOfFungible; type ResponseHandler = DevNull; type AssetTrap = TestAssetTrap; + type AssetLocker = TestAssetLocker; + type AssetExchanger = TestAssetExchanger; type AssetClaims = TestAssetTrap; type SubscriptionService = TestSubscriptionService; + type PalletInstancesInfo = AllPalletsWithSystem; + type MaxAssetsIntoHolding = MaxAssetsIntoHolding; + type FeeManager = (); + // No bridges yet... + type MessageExporter = (); + type UniversalAliases = TestUniversalAliases; + type CallDispatcher = RuntimeCall; + type SafeCallFilter = Everything; } impl crate::Config for Test { @@ -123,12 +139,15 @@ impl crate::Config for Test { type AccountIdConverter = AccountIdConverter; fn valid_destination() -> Result { let valid_destination: MultiLocation = - Junction::AccountId32 { network: NetworkId::Any, id: [0u8; 32] }.into(); + Junction::AccountId32 { network: None, id: [0u8; 32] }.into(); Ok(valid_destination) } - fn worst_case_holding() -> MultiAssets { - crate::mock_worst_case_holding() + fn worst_case_holding(depositable_count: u32) -> MultiAssets { + crate::mock_worst_case_holding( + depositable_count, + ::MaxAssetsIntoHolding::get(), + ) } } @@ -140,10 +159,19 @@ impl generic::Config for Test { (0, Response::Assets(assets)) } - fn transact_origin() -> Result { + fn worst_case_asset_exchange() -> Result<(MultiAssets, MultiAssets), BenchmarkError> { Ok(Default::default()) } + fn universal_alias() -> Result { + Ok(GlobalConsensus(ByGenesis([0; 32]))) + } + + fn transact_origin_and_runtime_call( + ) -> Result<(MultiLocation, ::RuntimeCall), BenchmarkError> { + Ok((Default::default(), frame_system::Call::remark_with_event { remark: vec![] }.into())) + } + fn subscribe_origin() -> Result { Ok(Default::default()) } @@ -153,6 +181,11 @@ impl generic::Config for Test { let ticket = MultiLocation { parents: 0, interior: X1(GeneralIndex(0)) }; Ok((Default::default(), ticket, assets)) } + + fn unlockable_asset() -> Result<(MultiLocation, MultiLocation, MultiAsset), BenchmarkError> { + let assets: MultiAsset = (Concrete(Here.into()), 100).into(); + Ok((Default::default(), Default::default(), assets)) + } } pub fn new_test_ext() -> sp_io::TestExternalities { diff --git a/xcm/pallet-xcm-benchmarks/src/generic/mod.rs b/xcm/pallet-xcm-benchmarks/src/generic/mod.rs index de347a537be2..8fee41142fa8 100644 --- a/xcm/pallet-xcm-benchmarks/src/generic/mod.rs +++ b/xcm/pallet-xcm-benchmarks/src/generic/mod.rs @@ -1,3 +1,19 @@ +// Copyright 2017-2023 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + pub use pallet::*; #[cfg(feature = "runtime-benchmarks")] @@ -12,7 +28,7 @@ pub mod pallet { dispatch::{Dispatchable, GetDispatchInfo}, pallet_prelude::Encode, }; - use xcm::latest::{MultiAssets, MultiLocation, Response}; + use xcm::latest::{Junction, MultiAsset, MultiAssets, MultiLocation, Response}; #[pallet::config] pub trait Config: frame_system::Config + crate::Config { @@ -24,18 +40,37 @@ pub mod pallet { /// The response which causes the most runtime weight. fn worst_case_response() -> (u64, Response); - /// The `MultiLocation` used for successful transaction XCMs. + /// The pair of asset collections which causes the most runtime weight if demanded to be + /// exchanged. + /// + /// The first element in the returned tuple represents the assets that are being exchanged + /// from, whereas the second element represents the assets that are being exchanged to. + /// + /// If set to `Err`, benchmarks which rely on an `exchange_asset` will be skipped. + fn worst_case_asset_exchange() -> Result<(MultiAssets, MultiAssets), BenchmarkError>; + + /// A `Junction` that is one of the `UniversalAliases` configured by the XCM executor. /// - /// If set to `None`, benchmarks which rely on a `transact_origin` will be skipped. - fn transact_origin() -> Result; + /// If set to `Err`, benchmarks which rely on a universal alias will be skipped. + fn universal_alias() -> Result; + + /// The `MultiLocation` and `RuntimeCall` used for successful transaction XCMs. + /// + /// If set to `Err`, benchmarks which rely on a `transact_origin_and_runtime_call` will be + /// skipped. + fn transact_origin_and_runtime_call( + ) -> Result<(MultiLocation, >::RuntimeCall), BenchmarkError>; /// A valid `MultiLocation` we can successfully subscribe to. /// - /// If set to `None`, benchmarks which rely on a `subscribe_origin` will be skipped. + /// If set to `Err`, benchmarks which rely on a `subscribe_origin` will be skipped. fn subscribe_origin() -> Result; /// Return an origin, ticket, and assets that can be trapped and claimed. fn claimable_asset() -> Result<(MultiLocation, MultiLocation, MultiAssets), BenchmarkError>; + + /// Return an unlocker, owner and assets that can be locked and unlocked. + fn unlockable_asset() -> Result<(MultiLocation, MultiLocation, MultiAsset), BenchmarkError>; } #[pallet::pallet] diff --git a/xcm/pallet-xcm-benchmarks/src/lib.rs b/xcm/pallet-xcm-benchmarks/src/lib.rs index 352f7376ef46..c2bb093b1d1a 100644 --- a/xcm/pallet-xcm-benchmarks/src/lib.rs +++ b/xcm/pallet-xcm-benchmarks/src/lib.rs @@ -22,7 +22,7 @@ use codec::Encode; use frame_benchmarking::{account, BenchmarkError}; use sp_std::prelude::*; use xcm::latest::prelude::*; -use xcm_executor::traits::Convert; +use xcm_executor::{traits::Convert, Config as XcmConfig}; pub mod fungible; pub mod generic; @@ -36,7 +36,7 @@ pub trait Config: frame_system::Config { /// /// These might affect the execution of XCM messages, such as defining how the /// `TransactAsset` is implemented. - type XcmConfig: xcm_executor::Config; + type XcmConfig: XcmConfig; /// A converter between a multi-location to a sovereign account. type AccountIdConverter: Convert; @@ -46,7 +46,7 @@ pub trait Config: frame_system::Config { fn valid_destination() -> Result; /// Worst case scenario for a holding account in this runtime. - fn worst_case_holding() -> MultiAssets; + fn worst_case_holding(depositable_count: u32) -> MultiAssets; } const SEED: u32 = 0; @@ -56,15 +56,15 @@ pub type ExecutorOf = xcm_executor::XcmExecutor<::XcmConfig>; /// The overarching call type. pub type OverArchingCallOf = ::RuntimeCall; /// The asset transactor of our executor -pub type AssetTransactorOf = <::XcmConfig as xcm_executor::Config>::AssetTransactor; +pub type AssetTransactorOf = <::XcmConfig as XcmConfig>::AssetTransactor; /// The call type of executor's config. Should eventually resolve to the same overarching call type. -pub type XcmCallOf = <::XcmConfig as xcm_executor::Config>::RuntimeCall; +pub type XcmCallOf = <::XcmConfig as XcmConfig>::RuntimeCall; -pub fn mock_worst_case_holding() -> MultiAssets { - const HOLDING_FUNGIBLES: u32 = 99; - const HOLDING_NON_FUNGIBLES: u32 = 99; +pub fn mock_worst_case_holding(depositable_count: u32, max_assets: u32) -> MultiAssets { let fungibles_amount: u128 = 100; - (0..HOLDING_FUNGIBLES) + let holding_fungibles = max_assets / 2 - depositable_count; + let holding_non_fungibles = holding_fungibles; + (0..holding_fungibles) .map(|i| { MultiAsset { id: Concrete(GeneralIndex(i as u128).into()), @@ -73,7 +73,7 @@ pub fn mock_worst_case_holding() -> MultiAssets { .into() }) .chain(core::iter::once(MultiAsset { id: Concrete(Here.into()), fun: Fungible(u128::MAX) })) - .chain((0..HOLDING_NON_FUNGIBLES).map(|i| MultiAsset { + .chain((0..holding_non_fungibles).map(|i| MultiAsset { id: Concrete(GeneralIndex(i as u128).into()), fun: NonFungible(asset_instance_from(i)), })) @@ -89,7 +89,7 @@ pub fn asset_instance_from(x: u32) -> AssetInstance { } pub fn new_executor(origin: MultiLocation) -> ExecutorOf { - ExecutorOf::::new(origin) + ExecutorOf::::new(origin, [0; 32]) } /// Build a multi-location from an account id. @@ -99,7 +99,7 @@ fn account_id_junction(index: u32) -> Junction { encoded.resize(32, 0u8); let mut id = [0u8; 32]; id.copy_from_slice(&encoded); - Junction::AccountId32 { network: NetworkId::Any, id } + Junction::AccountId32 { network: None, id } } pub fn account_and_location(index: u32) -> (T::AccountId, MultiLocation) { diff --git a/xcm/pallet-xcm-benchmarks/src/mock.rs b/xcm/pallet-xcm-benchmarks/src/mock.rs index 9503f0756381..905a9af36fc4 100644 --- a/xcm/pallet-xcm-benchmarks/src/mock.rs +++ b/xcm/pallet-xcm-benchmarks/src/mock.rs @@ -15,24 +15,34 @@ // along with Polkadot. If not, see . use crate::*; -use frame_support::parameter_types; -use xcm::latest::Weight as XCMWeight; -use xcm_executor::traits::FilterAssetLocation; +use frame_support::{parameter_types, traits::ContainsPair}; +use xcm::latest::Weight; // An xcm sender/receiver akin to > /dev/null pub struct DevNull; impl xcm::opaque::latest::SendXcm for DevNull { - fn send_xcm(_: impl Into, _: Xcm<()>) -> SendResult { - Ok(()) + type Ticket = (); + fn validate(_: &mut Option, _: &mut Option>) -> SendResult<()> { + Ok(((), MultiAssets::new())) + } + fn deliver(_: ()) -> Result { + Ok([0; 32]) } } impl xcm_executor::traits::OnResponse for DevNull { - fn expecting_response(_: &MultiLocation, _: u64) -> bool { + fn expecting_response(_: &MultiLocation, _: u64, _: Option<&MultiLocation>) -> bool { false } - fn on_response(_: &MultiLocation, _: u64, _: Response, _: XCMWeight) -> XCMWeight { - 0 + fn on_response( + _: &MultiLocation, + _: u64, + _: Option<&MultiLocation>, + _: Response, + _: Weight, + _: &XcmContext, + ) -> Weight { + Weight::zero() } } @@ -52,14 +62,14 @@ impl xcm_executor::traits::Convert for AccountIdConverter { } parameter_types! { - pub Ancestry: MultiLocation = Junction::Parachain(101).into(); - pub UnitWeightCost: u64 = 10; - pub WeightPrice: (AssetId, u128) = (Concrete(Here.into()), 1_000_000); + pub UniversalLocation: InteriorMultiLocation = Junction::Parachain(101).into(); + pub UnitWeightCost: Weight = Weight::from_parts(10, 10); + pub WeightPrice: (AssetId, u128, u128) = (Concrete(Here.into()), 1_000_000, 1024); } pub struct AllAssetLocationsPass; -impl FilterAssetLocation for AllAssetLocationsPass { - fn filter_asset_location(_: &MultiAsset, _: &MultiLocation) -> bool { +impl ContainsPair for AllAssetLocationsPass { + fn contains(_: &MultiAsset, _: &MultiLocation) -> bool { true } } diff --git a/xcm/pallet-xcm/Cargo.toml b/xcm/pallet-xcm/Cargo.toml index 54fd4ef30214..b2f0dd91768c 100644 --- a/xcm/pallet-xcm/Cargo.toml +++ b/xcm/pallet-xcm/Cargo.toml @@ -6,42 +6,50 @@ version.workspace = true [dependencies] -codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } +bounded-collections = { version = "0.1.5", default-features = false } +codec = { package = "parity-scale-codec", version = "3.3.0", default-features = false, features = ["derive"] } scale-info = { version = "2.1.2", default-features = false, features = ["derive"] } serde = { version = "1.0.137", optional = true, features = ["derive"] } log = { version = "0.4.17", default-features = false } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.36" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.40" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.40" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.40" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.40" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.40" } xcm = { path = "..", default-features = false } xcm-executor = { path = "../xcm-executor", default-features = false } [dev-dependencies] -pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } polkadot-runtime-parachains = { path = "../../runtime/parachains" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -xcm-builder = { path = "../xcm-builder" } polkadot-parachain = { path = "../../parachain" } +xcm-builder = { path = "../xcm-builder" } [features] default = ["std"] std = [ + "bounded-collections/std", "codec/std", "scale-info/std", "serde", "sp-std/std", "sp-core/std", + "sp-io/std", "sp-runtime/std", + "frame-benchmarking?/std", "frame-support/std", "frame-system/std", "xcm/std", "xcm-executor/std", ] runtime-benchmarks = [ - "frame-system/runtime-benchmarks" + "frame-benchmarking/runtime-benchmarks", + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "xcm-builder/runtime-benchmarks", ] try-runtime = ["frame-support/try-runtime"] diff --git a/xcm/pallet-xcm/src/benchmarking.rs b/xcm/pallet-xcm/src/benchmarking.rs new file mode 100644 index 000000000000..bb0fe930199a --- /dev/null +++ b/xcm/pallet-xcm/src/benchmarking.rs @@ -0,0 +1,196 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +use super::*; +use bounded_collections::{ConstU32, WeakBoundedVec}; +use frame_benchmarking::{benchmarks, BenchmarkError, BenchmarkResult}; +use frame_support::weights::Weight; +use frame_system::RawOrigin; +use sp_std::prelude::*; +use xcm::{latest::prelude::*, v2}; + +type RuntimeOrigin = ::RuntimeOrigin; + +benchmarks! { + send { + let send_origin = + T::SendXcmOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?; + if T::SendXcmOrigin::try_origin(send_origin.clone()).is_err() { + return Err(BenchmarkError::Override(BenchmarkResult::from_weight(Weight::MAX))) + } + let msg = Xcm(vec![ClearOrigin]); + let versioned_dest: VersionedMultiLocation = T::ReachableDest::get().ok_or( + BenchmarkError::Override(BenchmarkResult::from_weight(Weight::MAX)), + )? + .into(); + let versioned_msg = VersionedXcm::from(msg); + }: _>(send_origin, Box::new(versioned_dest), Box::new(versioned_msg)) + + teleport_assets { + let asset: MultiAsset = (Here, 10).into(); + let send_origin = + T::ExecuteXcmOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?; + let origin_location = T::ExecuteXcmOrigin::try_origin(send_origin.clone()) + .map_err(|_| BenchmarkError::Override(BenchmarkResult::from_weight(Weight::MAX)))?; + if !T::XcmTeleportFilter::contains(&(origin_location, vec![asset.clone()])) { + return Err(BenchmarkError::Override(BenchmarkResult::from_weight(Weight::MAX))) + } + + let recipient = [0u8; 32]; + let versioned_dest: VersionedMultiLocation = T::ReachableDest::get().ok_or( + BenchmarkError::Override(BenchmarkResult::from_weight(Weight::MAX)), + )? + .into(); + let versioned_beneficiary: VersionedMultiLocation = + AccountId32 { network: None, id: recipient.into() }.into(); + let versioned_assets: VersionedMultiAssets = asset.into(); + }: _>(send_origin, Box::new(versioned_dest), Box::new(versioned_beneficiary), Box::new(versioned_assets), 0) + + reserve_transfer_assets { + let asset: MultiAsset = (Here, 10).into(); + let send_origin = + T::ExecuteXcmOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?; + let origin_location = T::ExecuteXcmOrigin::try_origin(send_origin.clone()) + .map_err(|_| BenchmarkError::Override(BenchmarkResult::from_weight(Weight::MAX)))?; + if !T::XcmReserveTransferFilter::contains(&(origin_location, vec![asset.clone()])) { + return Err(BenchmarkError::Override(BenchmarkResult::from_weight(Weight::MAX))) + } + + let recipient = [0u8; 32]; + let versioned_dest: VersionedMultiLocation = T::ReachableDest::get().ok_or( + BenchmarkError::Override(BenchmarkResult::from_weight(Weight::MAX)), + )? + .into(); + let versioned_beneficiary: VersionedMultiLocation = + AccountId32 { network: None, id: recipient.into() }.into(); + let versioned_assets: VersionedMultiAssets = asset.into(); + }: _>(send_origin, Box::new(versioned_dest), Box::new(versioned_beneficiary), Box::new(versioned_assets), 0) + + execute { + let execute_origin = + T::ExecuteXcmOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?; + let origin_location = T::ExecuteXcmOrigin::try_origin(execute_origin.clone()) + .map_err(|_| BenchmarkError::Override(BenchmarkResult::from_weight(Weight::MAX)))?; + let msg = Xcm(vec![ClearOrigin]); + if !T::XcmExecuteFilter::contains(&(origin_location, msg.clone())) { + return Err(BenchmarkError::Override(BenchmarkResult::from_weight(Weight::MAX))) + } + let versioned_msg = VersionedXcm::from(msg); + }: _>(execute_origin, Box::new(versioned_msg), Weight::zero()) + + force_xcm_version { + let loc = T::ReachableDest::get().ok_or( + BenchmarkError::Override(BenchmarkResult::from_weight(Weight::MAX)), + )?; + let xcm_version = 2; + }: _(RawOrigin::Root, Box::new(loc), xcm_version) + + force_default_xcm_version {}: _(RawOrigin::Root, Some(2)) + + force_subscribe_version_notify { + let versioned_loc: VersionedMultiLocation = T::ReachableDest::get().ok_or( + BenchmarkError::Override(BenchmarkResult::from_weight(Weight::MAX)), + )? + .into(); + }: _(RawOrigin::Root, Box::new(versioned_loc)) + + force_unsubscribe_version_notify { + let loc = T::ReachableDest::get().ok_or( + BenchmarkError::Override(BenchmarkResult::from_weight(Weight::MAX)), + )?; + let versioned_loc: VersionedMultiLocation = loc.into(); + let _ = Pallet::::request_version_notify(loc); + }: _(RawOrigin::Root, Box::new(versioned_loc)) + + migrate_supported_version { + let old_version = XCM_VERSION - 1; + let loc = VersionedMultiLocation::from(MultiLocation::from(Parent)); + SupportedVersion::::insert(old_version, loc, old_version); + }: { + Pallet::::check_xcm_version_change(VersionMigrationStage::MigrateSupportedVersion, Weight::zero()); + } + + migrate_version_notifiers { + let old_version = XCM_VERSION - 1; + let loc = VersionedMultiLocation::from(MultiLocation::from(Parent)); + VersionNotifiers::::insert(old_version, loc, 0); + }: { + Pallet::::check_xcm_version_change(VersionMigrationStage::MigrateVersionNotifiers, Weight::zero()); + } + + already_notified_target { + let loc = T::ReachableDest::get().ok_or( + BenchmarkError::Override(BenchmarkResult::from_weight(T::DbWeight::get().reads(1))), + )?; + let loc = VersionedMultiLocation::from(loc); + let current_version = T::AdvertisedXcmVersion::get(); + VersionNotifyTargets::::insert(current_version, loc, (0, Weight::zero(), current_version)); + }: { + Pallet::::check_xcm_version_change(VersionMigrationStage::NotifyCurrentTargets(None), Weight::zero()); + } + + notify_current_targets { + let loc = T::ReachableDest::get().ok_or( + BenchmarkError::Override(BenchmarkResult::from_weight(T::DbWeight::get().reads_writes(1, 3))), + )?; + let loc = VersionedMultiLocation::from(loc); + let current_version = T::AdvertisedXcmVersion::get(); + let old_version = current_version - 1; + VersionNotifyTargets::::insert(current_version, loc, (0, Weight::zero(), old_version)); + }: { + Pallet::::check_xcm_version_change(VersionMigrationStage::NotifyCurrentTargets(None), Weight::zero()); + } + + notify_target_migration_fail { + let bad_loc: v2::MultiLocation = v2::Junction::Plurality { + id: v2::BodyId::Named(WeakBoundedVec::>::try_from(vec![0; 32]) + .expect("vec has a length of 32 bits; qed")), + part: v2::BodyPart::Voice, + } + .into(); + let bad_loc = VersionedMultiLocation::from(bad_loc); + let current_version = T::AdvertisedXcmVersion::get(); + VersionNotifyTargets::::insert(current_version, bad_loc, (0, Weight::zero(), current_version)); + }: { + Pallet::::check_xcm_version_change(VersionMigrationStage::MigrateAndNotifyOldTargets, Weight::zero()); + } + + migrate_version_notify_targets { + let current_version = T::AdvertisedXcmVersion::get(); + let old_version = current_version - 1; + let loc = VersionedMultiLocation::from(MultiLocation::from(Parent)); + VersionNotifyTargets::::insert(old_version, loc, (0, Weight::zero(), current_version)); + }: { + Pallet::::check_xcm_version_change(VersionMigrationStage::MigrateAndNotifyOldTargets, Weight::zero()); + } + + migrate_and_notify_old_targets { + let loc = T::ReachableDest::get().ok_or( + BenchmarkError::Override(BenchmarkResult::from_weight(T::DbWeight::get().reads_writes(1, 3))), + )?; + let loc = VersionedMultiLocation::from(loc); + let old_version = T::AdvertisedXcmVersion::get() - 1; + VersionNotifyTargets::::insert(old_version, loc, (0, Weight::zero(), old_version)); + }: { + Pallet::::check_xcm_version_change(VersionMigrationStage::MigrateAndNotifyOldTargets, Weight::zero()); + } + + impl_benchmark_test_suite!( + Pallet, + crate::mock::new_test_ext_with_balances(Vec::new()), + crate::mock::Test + ); +} diff --git a/xcm/pallet-xcm/src/lib.rs b/xcm/pallet-xcm/src/lib.rs index 78dc5087d960..47a9d7d75d0a 100644 --- a/xcm/pallet-xcm/src/lib.rs +++ b/xcm/pallet-xcm/src/lib.rs @@ -18,43 +18,137 @@ #![cfg_attr(not(feature = "std"), no_std)] +#[cfg(feature = "runtime-benchmarks")] +mod benchmarking; #[cfg(test)] mod mock; #[cfg(test)] mod tests; +pub mod migration; + use codec::{Decode, Encode, EncodeLike, MaxEncodedLen}; -use frame_support::traits::{Contains, EnsureOrigin, Get, OriginTrait}; +use frame_support::traits::{ + Contains, ContainsPair, Currency, Defensive, EnsureOrigin, Get, LockableCurrency, OriginTrait, +}; use scale_info::TypeInfo; use sp_runtime::{ - traits::{BadOrigin, Saturating}, + traits::{ + AccountIdConversion, BadOrigin, BlakeTwo256, BlockNumberProvider, Hash, Saturating, Zero, + }, RuntimeDebug, }; use sp_std::{boxed::Box, marker::PhantomData, prelude::*, result::Result, vec}; -use xcm::{latest::Weight as XcmWeight, prelude::*}; -use xcm_executor::traits::ConvertOrigin; - -use frame_support::PalletId; +use xcm::{latest::QueryResponseInfo, prelude::*}; +use xcm_executor::traits::{Convert, ConvertOrigin}; + +use frame_support::{ + dispatch::{Dispatchable, GetDispatchInfo}, + pallet_prelude::*, + traits::WithdrawReasons, + PalletId, +}; +use frame_system::pallet_prelude::*; pub use pallet::*; +use xcm_executor::{ + traits::{ + ClaimAssets, DropAssets, MatchesFungible, OnResponse, VersionChangeNotifier, WeightBounds, + }, + Assets, +}; + +pub trait WeightInfo { + fn send() -> Weight; + fn teleport_assets() -> Weight; + fn reserve_transfer_assets() -> Weight; + fn execute() -> Weight; + fn force_xcm_version() -> Weight; + fn force_default_xcm_version() -> Weight; + fn force_subscribe_version_notify() -> Weight; + fn force_unsubscribe_version_notify() -> Weight; + fn migrate_supported_version() -> Weight; + fn migrate_version_notifiers() -> Weight; + fn already_notified_target() -> Weight; + fn notify_current_targets() -> Weight; + fn notify_target_migration_fail() -> Weight; + fn migrate_version_notify_targets() -> Weight; + fn migrate_and_notify_old_targets() -> Weight; +} + +/// fallback implementation +pub struct TestWeightInfo; +impl WeightInfo for TestWeightInfo { + fn send() -> Weight { + Weight::from_parts(100_000_000, 0) + } + + fn teleport_assets() -> Weight { + Weight::from_parts(100_000_000, 0) + } + + fn reserve_transfer_assets() -> Weight { + Weight::from_parts(100_000_000, 0) + } + + fn execute() -> Weight { + Weight::from_parts(100_000_000, 0) + } + + fn force_xcm_version() -> Weight { + Weight::from_parts(100_000_000, 0) + } + + fn force_default_xcm_version() -> Weight { + Weight::from_parts(100_000_000, 0) + } + + fn force_subscribe_version_notify() -> Weight { + Weight::from_parts(100_000_000, 0) + } + + fn force_unsubscribe_version_notify() -> Weight { + Weight::from_parts(100_000_000, 0) + } + + fn migrate_supported_version() -> Weight { + Weight::from_parts(100_000_000, 0) + } + + fn migrate_version_notifiers() -> Weight { + Weight::from_parts(100_000_000, 0) + } + + fn already_notified_target() -> Weight { + Weight::from_parts(100_000_000, 0) + } + + fn notify_current_targets() -> Weight { + Weight::from_parts(100_000_000, 0) + } + + fn notify_target_migration_fail() -> Weight { + Weight::from_parts(100_000_000, 0) + } + + fn migrate_version_notify_targets() -> Weight { + Weight::from_parts(100_000_000, 0) + } + + fn migrate_and_notify_old_targets() -> Weight { + Weight::from_parts(100_000_000, 0) + } +} #[frame_support::pallet] pub mod pallet { use super::*; use frame_support::{ dispatch::{Dispatchable, GetDispatchInfo, PostDispatchInfo}, - pallet_prelude::*, parameter_types, }; - use frame_system::{pallet_prelude::*, Config as SysConfig}; + use frame_system::Config as SysConfig; use sp_core::H256; - use sp_runtime::traits::{AccountIdConversion, BlakeTwo256, BlockNumberProvider, Hash}; - use xcm_executor::{ - traits::{ - ClaimAssets, DropAssets, InvertLocation, OnResponse, VersionChangeNotifier, - WeightBounds, - }, - Assets, - }; + use xcm_executor::traits::{MatchesFungible, WeightBounds}; parameter_types! { /// An implementation of `Get` which just returns the latest XCM version which we can @@ -63,16 +157,26 @@ pub mod pallet { } #[pallet::pallet] - #[pallet::generate_store(pub(super) trait Store)] + #[pallet::storage_version(migration::STORAGE_VERSION)] #[pallet::without_storage_info] pub struct Pallet(_); + pub type BalanceOf = + <::Currency as Currency<::AccountId>>::Balance; + #[pallet::config] /// The module configuration trait. pub trait Config: frame_system::Config { /// The overarching event type. type RuntimeEvent: From> + IsType<::RuntimeEvent>; + /// A lockable currency. + // TODO: We should really use a trait which can handle multiple currencies. + type Currency: LockableCurrency; + + /// The `MultiAsset` matcher for `Currency`. + type CurrencyMatcher: MatchesFungible>; + /// Required origin for sending XCM messages. If successful, it resolves to `MultiLocation` /// which exists as an interior location within this chain's XCM context. type SendXcmOrigin: EnsureOrigin< @@ -106,13 +210,13 @@ pub mod pallet { /// Means of measuring the weight consumed by an XCM message locally. type Weigher: WeightBounds<::RuntimeCall>; - /// Means of inverting a location. - type LocationInverter: InvertLocation; + /// This chain's Universal Location. + type UniversalLocation: Get; - /// The outer `Origin` type. + /// The runtime `Origin` type. type RuntimeOrigin: From + From<::RuntimeOrigin>; - /// The outer `Call` type. + /// The runtime `Call` type. type RuntimeCall: Parameter + GetDispatchInfo + IsType<::RuntimeCall> @@ -126,10 +230,26 @@ pub mod pallet { /// The latest supported version that we advertise. Generally just set it to /// `pallet_xcm::CurrentXcmVersion`. type AdvertisedXcmVersion: Get; - } - /// The maximum number of distinct assets allowed to be transferred in a single helper extrinsic. - const MAX_ASSETS_FOR_TRANSFER: usize = 2; + /// The assets which we consider a given origin is trusted if they claim to have placed a + /// lock. + type TrustedLockers: ContainsPair; + + /// How to get an `AccountId` value from a `MultiLocation`, useful for handling asset locks. + type SovereignAccountOf: Convert; + + /// The maximum number of local XCM locks that a single account may have. + type MaxLockers: Get; + + /// Weight information for extrinsics in this pallet. + type WeightInfo: WeightInfo; + + /// A `MultiLocation` that can be reached via `XcmRouter`. Used only in benchmarks. + /// + /// If `None`, the benchmarks that depend on a reachable destination will be skipped. + #[cfg(feature = "runtime-benchmarks")] + type ReachableDest: Get>; + } #[pallet::event] #[pallet::generate_deposit(pub(super) fn deposit_event)] @@ -201,8 +321,10 @@ pub mod pallet { AssetsTrapped(H256, MultiLocation, VersionedMultiAssets), /// An XCM version change notification message has been attempted to be sent. /// - /// \[ destination, result \] - VersionChangeNotified(MultiLocation, XcmVersion), + /// The cost of sending it (borne by the chain) is included. + /// + /// \[ destination, result, cost \] + VersionChangeNotified(MultiLocation, XcmVersion, MultiAssets), /// The supported version of a location has been changed. This might be through an /// automatic notification or a manual intervention. /// @@ -218,6 +340,39 @@ pub mod pallet { /// /// \[ location, query ID \] NotifyTargetMigrationFail(VersionedMultiLocation, QueryId), + /// Expected query response has been received but the expected querier location placed in + /// storage by this runtime previously cannot be decoded. The query remains registered. + /// + /// This is unexpected (since a location placed in storage in a previously executing + /// runtime should be readable prior to query timeout) and dangerous since the possibly + /// valid response will be dropped. Manual governance intervention is probably going to be + /// needed. + /// + /// \[ origin location, id \] + InvalidQuerierVersion(MultiLocation, QueryId), + /// Expected query response has been received but the querier location of the response does + /// not match the expected. The query remains registered for a later, valid, response to + /// be received and acted upon. + /// + /// \[ origin location, id, expected querier, maybe actual querier \] + InvalidQuerier(MultiLocation, QueryId, MultiLocation, Option), + /// A remote has requested XCM version change notification from us and we have honored it. + /// A version information message is sent to them and its cost is included. + /// + /// \[ destination location, cost \] + VersionNotifyStarted(MultiLocation, MultiAssets), + /// We have requested that a remote chain sends us XCM version change notifications. + /// + /// \[ destination location, cost \] + VersionNotifyRequested(MultiLocation, MultiAssets), + /// We have requested that a remote chain stops sending us XCM version change notifications. + /// + /// \[ destination location, cost \] + VersionNotifyUnrequested(MultiLocation, MultiAssets), + /// Fees were paid from a location for an operation (often for using `SendXcm`). + /// + /// \[ paying location, fees \] + FeesPaid(MultiLocation, MultiAssets), /// Some assets have been claimed from an asset trap /// /// \[ hash, origin, assets \] @@ -269,6 +424,30 @@ pub mod pallet { NoSubscription, /// The location is invalid since it already has a subscription from us. AlreadySubscribed, + /// Invalid asset for the operation. + InvalidAsset, + /// The owner does not own (all) of the asset that they wish to do the operation on. + LowBalance, + /// The asset owner has too many locks on the asset. + TooManyLocks, + /// The given account is not an identifiable sovereign account for any location. + AccountNotSovereign, + /// The operation required fees to be paid which the initiator could not meet. + FeesNotMet, + /// A remote lock with the corresponding data could not be found. + LockNotFound, + /// The unlock operation cannot succeed because there are still users of the lock. + InUse, + } + + impl From for Error { + fn from(e: SendError) -> Self { + match e { + SendError::Fees => Error::::FeesNotMet, + SendError::NotApplicable => Error::::Unreachable, + _ => Error::::SendFailure, + } + } } /// The status of a query. @@ -276,7 +455,12 @@ pub mod pallet { pub enum QueryStatus { /// The query was sent but no response has yet been received. Pending { + /// The `QueryResponse` XCM must have this origin to be considered a reply for this + /// query. responder: VersionedMultiLocation, + /// The `QueryResponse` XCM must have this value as the `querier` field to be + /// considered a reply for this query. If `None` then the querier is ignored. + maybe_match_querier: Option, maybe_notify: Option<(u8, u8)>, timeout: BlockNumber, }, @@ -368,7 +552,7 @@ pub mod pallet { XcmVersion, Blake2_128Concat, VersionedMultiLocation, - (QueryId, u64, XcmVersion), + (QueryId, Weight, XcmVersion), OptionQuery, >; @@ -394,6 +578,37 @@ pub mod pallet { pub(super) type CurrentMigration = StorageValue<_, VersionMigrationStage, OptionQuery>; + #[derive(Clone, Encode, Decode, Eq, PartialEq, Ord, PartialOrd, TypeInfo, MaxEncodedLen)] + pub struct RemoteLockedFungibleRecord { + pub amount: u128, + pub owner: VersionedMultiLocation, + pub locker: VersionedMultiLocation, + pub users: u32, + } + + /// Fungible assets which we know are locked on a remote chain. + #[pallet::storage] + pub(super) type RemoteLockedFungibles = StorageNMap< + _, + ( + NMapKey, + NMapKey, + NMapKey, + ), + RemoteLockedFungibleRecord, + OptionQuery, + >; + + /// Fungible assets which we know are locked on this chain. + #[pallet::storage] + pub(super) type LockedFungibles = StorageMap< + _, + Blake2_128Concat, + T::AccountId, + BoundedVec<(BalanceOf, VersionedMultiLocation), T::MaxLockers>, + OptionQuery, + >; + #[pallet::genesis_config] pub struct GenesisConfig { /// The default version to encode outgoing XCM messages with. @@ -456,9 +671,90 @@ pub mod pallet { } } + pub mod migrations { + use super::*; + use frame_support::traits::{PalletInfoAccess, StorageVersion}; + + #[derive(Clone, Eq, PartialEq, Encode, Decode, RuntimeDebug, TypeInfo)] + enum QueryStatusV0 { + Pending { + responder: VersionedMultiLocation, + maybe_notify: Option<(u8, u8)>, + timeout: BlockNumber, + }, + VersionNotifier { + origin: VersionedMultiLocation, + is_active: bool, + }, + Ready { + response: VersionedResponse, + at: BlockNumber, + }, + } + impl From> for QueryStatus { + fn from(old: QueryStatusV0) -> Self { + use QueryStatusV0::*; + match old { + Pending { responder, maybe_notify, timeout } => QueryStatus::Pending { + responder, + maybe_notify, + timeout, + maybe_match_querier: Some(MultiLocation::here().into()), + }, + VersionNotifier { origin, is_active } => + QueryStatus::VersionNotifier { origin, is_active }, + Ready { response, at } => QueryStatus::Ready { response, at }, + } + } + } + + pub fn migrate_to_v1( + ) -> frame_support::weights::Weight { + let on_chain_storage_version =

::on_chain_storage_version(); + log::info!( + target: "runtime::xcm", + "Running migration storage v1 for xcm with storage version {:?}", + on_chain_storage_version, + ); + + if on_chain_storage_version < 1 { + let mut count = 0; + Queries::::translate::, _>(|_key, value| { + count += 1; + Some(value.into()) + }); + StorageVersion::new(1).put::

(); + log::info!( + target: "runtime::xcm", + "Running migration storage v1 for xcm with storage version {:?} was complete", + on_chain_storage_version, + ); + // calculate and return migration weights + T::DbWeight::get().reads_writes(count as u64 + 1, count as u64 + 1) + } else { + log::warn!( + target: "runtime::xcm", + "Attempted to apply migration to v1 but failed because storage version is {:?}", + on_chain_storage_version, + ); + T::DbWeight::get().reads(1) + } + } + } + #[pallet::call] impl Pallet { - #[pallet::weight(100_000_000)] + #[pallet::call_index(0)] + #[pallet::weight({ + let maybe_msg: Result, ()> = (*message.clone()).try_into(); + match maybe_msg { + Ok(msg) => { + T::Weigher::weight(&mut msg.into()) + .map_or(Weight::MAX, |w| T::WeightInfo::send().saturating_add(w)) + } + _ => Weight::MAX, + } + })] pub fn send( origin: OriginFor, dest: Box, @@ -466,14 +762,11 @@ pub mod pallet { ) -> DispatchResult { let origin_location = T::SendXcmOrigin::ensure_origin(origin)?; let interior: Junctions = - origin_location.clone().try_into().map_err(|_| Error::::InvalidOrigin)?; + origin_location.try_into().map_err(|_| Error::::InvalidOrigin)?; let dest = MultiLocation::try_from(*dest).map_err(|()| Error::::BadVersion)?; let message: Xcm<()> = (*message).try_into().map_err(|()| Error::::BadVersion)?; - Self::send_xcm(interior, dest.clone(), message.clone()).map_err(|e| match e { - SendError::CannotReachDestination(..) => Error::::Unreachable, - _ => Error::::SendFailure, - })?; + Self::send_xcm(interior, dest, message.clone()).map_err(Error::::from)?; Self::deposit_event(Event::Sent(origin_location, dest, message)); Ok(()) } @@ -493,18 +786,24 @@ pub mod pallet { /// `dest` side. May not be empty. /// - `fee_asset_item`: The index into `assets` of the item which should be used to pay /// fees. + #[pallet::call_index(1)] #[pallet::weight({ let maybe_assets: Result = (*assets.clone()).try_into(); let maybe_dest: Result = (*dest.clone()).try_into(); match (maybe_assets, maybe_dest) { (Ok(assets), Ok(dest)) => { use sp_std::vec; + let count = assets.len() as u32; let mut message = Xcm(vec![ WithdrawAsset(assets), - InitiateTeleport { assets: Wild(All), dest, xcm: Xcm(vec![]) }, + InitiateTeleport { + assets: Wild(AllCounted(count)), + dest, + xcm: Xcm(vec![]), + }, ]); - T::Weigher::weight(&mut message).map_or(Weight::MAX, |w| Weight::from_ref_time(100_000_000.saturating_add(w))) - }, + T::Weigher::weight(&mut message).map_or(Weight::MAX, |w| T::WeightInfo::teleport_assets().saturating_add(w)) + } _ => Weight::MAX, } })] @@ -534,15 +833,18 @@ pub mod pallet { /// `dest` side. /// - `fee_asset_item`: The index into `assets` of the item which should be used to pay /// fees. + #[pallet::call_index(2)] #[pallet::weight({ - match ((*assets.clone()).try_into(), (*dest.clone()).try_into()) { + let maybe_assets: Result = (*assets.clone()).try_into(); + let maybe_dest: Result = (*dest.clone()).try_into(); + match (maybe_assets, maybe_dest) { (Ok(assets), Ok(dest)) => { use sp_std::vec; let mut message = Xcm(vec![ TransferReserveAsset { assets, dest, xcm: Xcm(vec![]) } ]); - T::Weigher::weight(&mut message).map_or(Weight::MAX, |w| Weight::from_ref_time(100_000_000.saturating_add(w))) - }, + T::Weigher::weight(&mut message).map_or(Weight::MAX, |w| T::WeightInfo::reserve_transfer_assets().saturating_add(w)) + } _ => Weight::MAX, } })] @@ -574,13 +876,15 @@ pub mod pallet { /// /// NOTE: A successful return to this does *not* imply that the `msg` was executed successfully /// to completion; only that *some* of it was executed. - #[pallet::weight(Weight::from_ref_time(max_weight.saturating_add(100_000_000u64)))] + #[pallet::call_index(3)] + #[pallet::weight(max_weight.saturating_add(T::WeightInfo::execute()))] pub fn execute( origin: OriginFor, message: Box::RuntimeCall>>, - max_weight: XcmWeight, + max_weight: Weight, ) -> DispatchResultWithPostInfo { let origin_location = T::ExecuteXcmOrigin::ensure_origin(origin)?; + let hash = message.using_encoded(sp_io::hashing::blake2_256); let message = (*message).try_into().map_err(|()| Error::::BadVersion)?; let value = (origin_location, message); ensure!(T::XcmExecuteFilter::contains(&value), Error::::Filtered); @@ -588,10 +892,12 @@ pub mod pallet { let outcome = T::XcmExecutor::execute_xcm_in_credit( origin_location, message, + hash, max_weight, max_weight, ); - let result = Ok(Some(outcome.weight_used().saturating_add(100_000_000)).into()); + let result = + Ok(Some(outcome.weight_used().saturating_add(T::WeightInfo::execute())).into()); Self::deposit_event(Event::Attempted(outcome)); result } @@ -602,7 +908,8 @@ pub mod pallet { /// - `origin`: Must be Root. /// - `location`: The destination that is being described. /// - `xcm_version`: The latest version of XCM that `location` supports. - #[pallet::weight(100_000_000u64)] + #[pallet::call_index(4)] + #[pallet::weight(T::WeightInfo::force_xcm_version())] pub fn force_xcm_version( origin: OriginFor, location: Box, @@ -624,7 +931,8 @@ pub mod pallet { /// /// - `origin`: Must be Root. /// - `maybe_xcm_version`: The default XCM encoding version, or `None` to disable. - #[pallet::weight(100_000_000u64)] + #[pallet::call_index(5)] + #[pallet::weight(T::WeightInfo::force_default_xcm_version())] pub fn force_default_xcm_version( origin: OriginFor, maybe_xcm_version: Option, @@ -638,7 +946,8 @@ pub mod pallet { /// /// - `origin`: Must be Root. /// - `location`: The location to which we should subscribe for XCM version notifications. - #[pallet::weight(100_000_000u64)] + #[pallet::call_index(6)] + #[pallet::weight(T::WeightInfo::force_subscribe_version_notify())] pub fn force_subscribe_version_notify( origin: OriginFor, location: Box, @@ -661,7 +970,8 @@ pub mod pallet { /// - `origin`: Must be Root. /// - `location`: The location to which we are currently subscribed for XCM version /// notifications which we no longer desire. - #[pallet::weight(100_000_000u64)] + #[pallet::call_index(7)] + #[pallet::weight(T::WeightInfo::force_unsubscribe_version_notify())] pub fn force_unsubscribe_version_notify( origin: OriginFor, location: Box, @@ -696,15 +1006,18 @@ pub mod pallet { /// - `fee_asset_item`: The index into `assets` of the item which should be used to pay /// fees. /// - `weight_limit`: The remote-side weight limit, if any, for the XCM fee purchase. + #[pallet::call_index(8)] #[pallet::weight({ - match ((*assets.clone()).try_into(), (*dest.clone()).try_into()) { + let maybe_assets: Result = (*assets.clone()).try_into(); + let maybe_dest: Result = (*dest.clone()).try_into(); + match (maybe_assets, maybe_dest) { (Ok(assets), Ok(dest)) => { use sp_std::vec; let mut message = Xcm(vec![ TransferReserveAsset { assets, dest, xcm: Xcm(vec![]) } ]); - T::Weigher::weight(&mut message).map_or(Weight::MAX, |w| Weight::from_ref_time(100_000_000.saturating_add(w))) - }, + T::Weigher::weight(&mut message).map_or(Weight::MAX, |w| T::WeightInfo::reserve_transfer_assets().saturating_add(w)) + } _ => Weight::MAX, } })] @@ -743,6 +1056,7 @@ pub mod pallet { /// - `fee_asset_item`: The index into `assets` of the item which should be used to pay /// fees. /// - `weight_limit`: The remote-side weight limit, if any, for the XCM fee purchase. + #[pallet::call_index(9)] #[pallet::weight({ let maybe_assets: Result = (*assets.clone()).try_into(); let maybe_dest: Result = (*dest.clone()).try_into(); @@ -753,8 +1067,8 @@ pub mod pallet { WithdrawAsset(assets), InitiateTeleport { assets: Wild(All), dest, xcm: Xcm(vec![]) }, ]); - T::Weigher::weight(&mut message).map_or(Weight::MAX, |w| Weight::from_ref_time(100_000_000.saturating_add(w))) - }, + T::Weigher::weight(&mut message).map_or(Weight::MAX, |w| T::WeightInfo::teleport_assets().saturating_add(w)) + } _ => Weight::MAX, } })] @@ -776,703 +1090,947 @@ pub mod pallet { ) } } +} - impl Pallet { - fn do_reserve_transfer_assets( - origin: OriginFor, - dest: Box, - beneficiary: Box, - assets: Box, - fee_asset_item: u32, - maybe_weight_limit: Option, - ) -> DispatchResult { - let origin_location = T::ExecuteXcmOrigin::ensure_origin(origin)?; - let dest = (*dest).try_into().map_err(|()| Error::::BadVersion)?; - let beneficiary: MultiLocation = - (*beneficiary).try_into().map_err(|()| Error::::BadVersion)?; - let assets: MultiAssets = (*assets).try_into().map_err(|()| Error::::BadVersion)?; - - ensure!(assets.len() <= MAX_ASSETS_FOR_TRANSFER, Error::::TooManyAssets); - let value = (origin_location, assets.drain()); - ensure!(T::XcmReserveTransferFilter::contains(&value), Error::::Filtered); - let (origin_location, assets) = value; - let ancestry = T::LocationInverter::ancestry(); - let fees = assets - .get(fee_asset_item as usize) - .ok_or(Error::::Empty)? - .clone() - .reanchored(&dest, &ancestry) - .map_err(|_| Error::::CannotReanchor)?; - let max_assets = assets.len() as u32; - let assets: MultiAssets = assets.into(); - let weight_limit = match maybe_weight_limit { - Some(weight_limit) => weight_limit, - None => { - let beneficiary = beneficiary.clone(); - let fees = fees.clone(); - let mut remote_message = Xcm(vec![ - ReserveAssetDeposited(assets.clone()), - ClearOrigin, - BuyExecution { fees, weight_limit: Limited(0) }, - DepositAsset { assets: Wild(All), max_assets, beneficiary }, - ]); - // use local weight for remote message and hope for the best. - let remote_weight = T::Weigher::weight(&mut remote_message) - .map_err(|()| Error::::UnweighableMessage)?; - Limited(remote_weight) - }, - }; - let xcm = Xcm(vec![ - BuyExecution { fees, weight_limit }, - DepositAsset { assets: Wild(All), max_assets, beneficiary }, - ]); - let mut message = Xcm(vec![TransferReserveAsset { assets, dest, xcm }]); - let weight = - T::Weigher::weight(&mut message).map_err(|()| Error::::UnweighableMessage)?; - let outcome = - T::XcmExecutor::execute_xcm_in_credit(origin_location, message, weight, weight); - Self::deposit_event(Event::Attempted(outcome)); - Ok(()) - } - - fn do_teleport_assets( - origin: OriginFor, - dest: Box, - beneficiary: Box, - assets: Box, - fee_asset_item: u32, - maybe_weight_limit: Option, - ) -> DispatchResult { - let origin_location = T::ExecuteXcmOrigin::ensure_origin(origin)?; - let dest = (*dest).try_into().map_err(|()| Error::::BadVersion)?; - let beneficiary: MultiLocation = - (*beneficiary).try_into().map_err(|()| Error::::BadVersion)?; - let assets: MultiAssets = (*assets).try_into().map_err(|()| Error::::BadVersion)?; - - ensure!(assets.len() <= MAX_ASSETS_FOR_TRANSFER, Error::::TooManyAssets); - let value = (origin_location, assets.drain()); - ensure!(T::XcmTeleportFilter::contains(&value), Error::::Filtered); - let (origin_location, assets) = value; - let ancestry = T::LocationInverter::ancestry(); - let fees = assets - .get(fee_asset_item as usize) - .ok_or(Error::::Empty)? - .clone() - .reanchored(&dest, &ancestry) - .map_err(|_| Error::::CannotReanchor)?; - let max_assets = assets.len() as u32; - let assets: MultiAssets = assets.into(); - let weight_limit = match maybe_weight_limit { - Some(weight_limit) => weight_limit, - None => { - let beneficiary = beneficiary.clone(); - let fees = fees.clone(); - let mut remote_message = Xcm(vec![ - ReceiveTeleportedAsset(assets.clone()), - ClearOrigin, - BuyExecution { fees, weight_limit: Limited(0) }, - DepositAsset { assets: Wild(All), max_assets, beneficiary }, - ]); - // use local weight for remote message and hope for the best. - let remote_weight = T::Weigher::weight(&mut remote_message) - .map_err(|()| Error::::UnweighableMessage)?; - Limited(remote_weight) - }, - }; - let xcm = Xcm(vec![ - BuyExecution { fees, weight_limit }, - DepositAsset { assets: Wild(All), max_assets, beneficiary }, - ]); - let mut message = - Xcm(vec![WithdrawAsset(assets), InitiateTeleport { assets: Wild(All), dest, xcm }]); - let weight = - T::Weigher::weight(&mut message).map_err(|()| Error::::UnweighableMessage)?; - let outcome = - T::XcmExecutor::execute_xcm_in_credit(origin_location, message, weight, weight); - Self::deposit_event(Event::Attempted(outcome)); - Ok(()) - } +/// The maximum number of distinct assets allowed to be transferred in a single helper extrinsic. +const MAX_ASSETS_FOR_TRANSFER: usize = 2; + +impl Pallet { + fn do_reserve_transfer_assets( + origin: OriginFor, + dest: Box, + beneficiary: Box, + assets: Box, + fee_asset_item: u32, + maybe_weight_limit: Option, + ) -> DispatchResult { + let origin_location = T::ExecuteXcmOrigin::ensure_origin(origin)?; + let dest = (*dest).try_into().map_err(|()| Error::::BadVersion)?; + let beneficiary: MultiLocation = + (*beneficiary).try_into().map_err(|()| Error::::BadVersion)?; + let assets: MultiAssets = (*assets).try_into().map_err(|()| Error::::BadVersion)?; + + ensure!(assets.len() <= MAX_ASSETS_FOR_TRANSFER, Error::::TooManyAssets); + let value = (origin_location, assets.into_inner()); + ensure!(T::XcmReserveTransferFilter::contains(&value), Error::::Filtered); + let (origin_location, assets) = value; + let context = T::UniversalLocation::get(); + let fees = assets + .get(fee_asset_item as usize) + .ok_or(Error::::Empty)? + .clone() + .reanchored(&dest, context) + .map_err(|_| Error::::CannotReanchor)?; + let max_assets = assets.len() as u32; + let assets: MultiAssets = assets.into(); + let weight_limit = match maybe_weight_limit { + Some(weight_limit) => weight_limit, + None => { + let fees = fees.clone(); + let mut remote_message = Xcm(vec![ + ReserveAssetDeposited(assets.clone()), + ClearOrigin, + BuyExecution { fees, weight_limit: Limited(Weight::zero()) }, + DepositAsset { assets: Wild(AllCounted(max_assets)), beneficiary }, + ]); + // use local weight for remote message and hope for the best. + let remote_weight = T::Weigher::weight(&mut remote_message) + .map_err(|()| Error::::UnweighableMessage)?; + Limited(remote_weight) + }, + }; + let xcm = Xcm(vec![ + BuyExecution { fees, weight_limit }, + DepositAsset { assets: Wild(AllCounted(max_assets)), beneficiary }, + ]); + let mut message = Xcm(vec![TransferReserveAsset { assets, dest, xcm }]); + let weight = + T::Weigher::weight(&mut message).map_err(|()| Error::::UnweighableMessage)?; + let hash = message.using_encoded(sp_io::hashing::blake2_256); + let outcome = + T::XcmExecutor::execute_xcm_in_credit(origin_location, message, hash, weight, weight); + Self::deposit_event(Event::Attempted(outcome)); + Ok(()) + } - /// Will always make progress, and will do its best not to use much more than `weight_cutoff` - /// in doing so. - pub(crate) fn check_xcm_version_change( - mut stage: VersionMigrationStage, - weight_cutoff: Weight, - ) -> (Weight, Option) { - let mut weight_used = Weight::zero(); + fn do_teleport_assets( + origin: OriginFor, + dest: Box, + beneficiary: Box, + assets: Box, + fee_asset_item: u32, + maybe_weight_limit: Option, + ) -> DispatchResult { + let origin_location = T::ExecuteXcmOrigin::ensure_origin(origin)?; + let dest = (*dest).try_into().map_err(|()| Error::::BadVersion)?; + let beneficiary: MultiLocation = + (*beneficiary).try_into().map_err(|()| Error::::BadVersion)?; + let assets: MultiAssets = (*assets).try_into().map_err(|()| Error::::BadVersion)?; + + ensure!(assets.len() <= MAX_ASSETS_FOR_TRANSFER, Error::::TooManyAssets); + let value = (origin_location, assets.into_inner()); + ensure!(T::XcmTeleportFilter::contains(&value), Error::::Filtered); + let (origin_location, assets) = value; + let context = T::UniversalLocation::get(); + let fees = assets + .get(fee_asset_item as usize) + .ok_or(Error::::Empty)? + .clone() + .reanchored(&dest, context) + .map_err(|_| Error::::CannotReanchor)?; + let max_assets = assets.len() as u32; + let assets: MultiAssets = assets.into(); + let weight_limit = match maybe_weight_limit { + Some(weight_limit) => weight_limit, + None => { + let fees = fees.clone(); + let mut remote_message = Xcm(vec![ + ReceiveTeleportedAsset(assets.clone()), + ClearOrigin, + BuyExecution { fees, weight_limit: Limited(Weight::zero()) }, + DepositAsset { assets: Wild(AllCounted(max_assets)), beneficiary }, + ]); + // use local weight for remote message and hope for the best. + let remote_weight = T::Weigher::weight(&mut remote_message) + .map_err(|()| Error::::UnweighableMessage)?; + Limited(remote_weight) + }, + }; + let xcm = Xcm(vec![ + BuyExecution { fees, weight_limit }, + DepositAsset { assets: Wild(AllCounted(max_assets)), beneficiary }, + ]); + let mut message = + Xcm(vec![WithdrawAsset(assets), InitiateTeleport { assets: Wild(All), dest, xcm }]); + let weight = + T::Weigher::weight(&mut message).map_err(|()| Error::::UnweighableMessage)?; + let hash = message.using_encoded(sp_io::hashing::blake2_256); + let outcome = + T::XcmExecutor::execute_xcm_in_credit(origin_location, message, hash, weight, weight); + Self::deposit_event(Event::Attempted(outcome)); + Ok(()) + } - // TODO: Correct weights for the components of this: - let todo_sv_migrate_weight: Weight = T::DbWeight::get().reads_writes(1, 1); - let todo_vn_migrate_weight: Weight = T::DbWeight::get().reads_writes(1, 1); - let todo_vnt_already_notified_weight: Weight = T::DbWeight::get().reads(1); - let todo_vnt_notify_weight: Weight = T::DbWeight::get().reads_writes(1, 3); - let todo_vnt_migrate_weight: Weight = T::DbWeight::get().reads_writes(1, 1); - let todo_vnt_migrate_fail_weight: Weight = T::DbWeight::get().reads_writes(1, 1); - let todo_vnt_notify_migrate_weight: Weight = T::DbWeight::get().reads_writes(1, 3); - - use VersionMigrationStage::*; - - if stage == MigrateSupportedVersion { - // We assume that supported XCM version only ever increases, so just cycle through lower - // XCM versioned from the current. - for v in 0..XCM_VERSION { - for (old_key, value) in SupportedVersion::::drain_prefix(v) { - if let Ok(new_key) = old_key.into_latest() { - SupportedVersion::::insert(XCM_VERSION, new_key, value); - } - weight_used.saturating_accrue(todo_sv_migrate_weight); - if weight_used.any_gte(weight_cutoff) { - return (weight_used, Some(stage)) - } + /// Will always make progress, and will do its best not to use much more than `weight_cutoff` + /// in doing so. + pub(crate) fn check_xcm_version_change( + mut stage: VersionMigrationStage, + weight_cutoff: Weight, + ) -> (Weight, Option) { + let mut weight_used = Weight::zero(); + + let sv_migrate_weight = T::WeightInfo::migrate_supported_version(); + let vn_migrate_weight = T::WeightInfo::migrate_version_notifiers(); + let vnt_already_notified_weight = T::WeightInfo::already_notified_target(); + let vnt_notify_weight = T::WeightInfo::notify_current_targets(); + let vnt_migrate_weight = T::WeightInfo::migrate_version_notify_targets(); + let vnt_migrate_fail_weight = T::WeightInfo::notify_target_migration_fail(); + let vnt_notify_migrate_weight = T::WeightInfo::migrate_and_notify_old_targets(); + + use VersionMigrationStage::*; + + if stage == MigrateSupportedVersion { + // We assume that supported XCM version only ever increases, so just cycle through lower + // XCM versioned from the current. + for v in 0..XCM_VERSION { + for (old_key, value) in SupportedVersion::::drain_prefix(v) { + if let Ok(new_key) = old_key.into_latest() { + SupportedVersion::::insert(XCM_VERSION, new_key, value); + } + weight_used.saturating_accrue(sv_migrate_weight); + if weight_used.any_gte(weight_cutoff) { + return (weight_used, Some(stage)) } } - stage = MigrateVersionNotifiers; } - if stage == MigrateVersionNotifiers { - for v in 0..XCM_VERSION { - for (old_key, value) in VersionNotifiers::::drain_prefix(v) { - if let Ok(new_key) = old_key.into_latest() { - VersionNotifiers::::insert(XCM_VERSION, new_key, value); - } - weight_used.saturating_accrue(todo_vn_migrate_weight); - if weight_used.any_gte(weight_cutoff) { - return (weight_used, Some(stage)) - } + stage = MigrateVersionNotifiers; + } + if stage == MigrateVersionNotifiers { + for v in 0..XCM_VERSION { + for (old_key, value) in VersionNotifiers::::drain_prefix(v) { + if let Ok(new_key) = old_key.into_latest() { + VersionNotifiers::::insert(XCM_VERSION, new_key, value); + } + weight_used.saturating_accrue(vn_migrate_weight); + if weight_used.any_gte(weight_cutoff) { + return (weight_used, Some(stage)) } } - stage = NotifyCurrentTargets(None); } + stage = NotifyCurrentTargets(None); + } - let xcm_version = T::AdvertisedXcmVersion::get(); + let xcm_version = T::AdvertisedXcmVersion::get(); - if let NotifyCurrentTargets(maybe_last_raw_key) = stage { - let mut iter = match maybe_last_raw_key { - Some(k) => VersionNotifyTargets::::iter_prefix_from(XCM_VERSION, k), - None => VersionNotifyTargets::::iter_prefix(XCM_VERSION), + if let NotifyCurrentTargets(maybe_last_raw_key) = stage { + let mut iter = match maybe_last_raw_key { + Some(k) => VersionNotifyTargets::::iter_prefix_from(XCM_VERSION, k), + None => VersionNotifyTargets::::iter_prefix(XCM_VERSION), + }; + while let Some((key, value)) = iter.next() { + let (query_id, max_weight, target_xcm_version) = value; + let new_key: MultiLocation = match key.clone().try_into() { + Ok(k) if target_xcm_version != xcm_version => k, + _ => { + // We don't early return here since we need to be certain that we + // make some progress. + weight_used.saturating_accrue(vnt_already_notified_weight); + continue + }, }; - while let Some((key, value)) = iter.next() { + let response = Response::Version(xcm_version); + let message = + Xcm(vec![QueryResponse { query_id, response, max_weight, querier: None }]); + let event = match send_xcm::(new_key, message) { + Ok((_hash, cost)) => { + let value = (query_id, max_weight, xcm_version); + VersionNotifyTargets::::insert(XCM_VERSION, key, value); + Event::VersionChangeNotified(new_key, xcm_version, cost) + }, + Err(e) => { + VersionNotifyTargets::::remove(XCM_VERSION, key); + Event::NotifyTargetSendFail(new_key, query_id, e.into()) + }, + }; + Self::deposit_event(event); + weight_used.saturating_accrue(vnt_notify_weight); + if weight_used.any_gte(weight_cutoff) { + let last = Some(iter.last_raw_key().into()); + return (weight_used, Some(NotifyCurrentTargets(last))) + } + } + stage = MigrateAndNotifyOldTargets; + } + if stage == MigrateAndNotifyOldTargets { + for v in 0..XCM_VERSION { + for (old_key, value) in VersionNotifyTargets::::drain_prefix(v) { let (query_id, max_weight, target_xcm_version) = value; - let new_key: MultiLocation = match key.clone().try_into() { - Ok(k) if target_xcm_version != xcm_version => k, - _ => { - // We don't early return here since we need to be certain that we - // make some progress. - weight_used.saturating_accrue(todo_vnt_already_notified_weight); + let new_key = match MultiLocation::try_from(old_key.clone()) { + Ok(k) => k, + Err(()) => { + Self::deposit_event(Event::NotifyTargetMigrationFail(old_key, value.0)); + weight_used.saturating_accrue(vnt_migrate_fail_weight); + if weight_used.any_gte(weight_cutoff) { + return (weight_used, Some(stage)) + } continue }, }; - let response = Response::Version(xcm_version); - let message = Xcm(vec![QueryResponse { query_id, response, max_weight }]); - let event = match T::XcmRouter::send_xcm(new_key.clone(), message) { - Ok(()) => { - let value = (query_id, max_weight, xcm_version); - VersionNotifyTargets::::insert(XCM_VERSION, key, value); - Event::VersionChangeNotified(new_key, xcm_version) - }, - Err(e) => { - VersionNotifyTargets::::remove(XCM_VERSION, key); - Event::NotifyTargetSendFail(new_key, query_id, e.into()) - }, - }; - Self::deposit_event(event); - weight_used.saturating_accrue(todo_vnt_notify_weight); - if weight_used.any_gte(weight_cutoff) { - let last = Some(iter.last_raw_key().into()); - return (weight_used, Some(NotifyCurrentTargets(last))) - } - } - stage = MigrateAndNotifyOldTargets; - } - if stage == MigrateAndNotifyOldTargets { - for v in 0..XCM_VERSION { - for (old_key, value) in VersionNotifyTargets::::drain_prefix(v) { - let (query_id, max_weight, target_xcm_version) = value; - let new_key = match MultiLocation::try_from(old_key.clone()) { - Ok(k) => k, - Err(()) => { - Self::deposit_event(Event::NotifyTargetMigrationFail( - old_key, value.0, - )); - weight_used.saturating_accrue(todo_vnt_migrate_fail_weight); - if weight_used.any_gte(weight_cutoff) { - return (weight_used, Some(stage)) - } - continue + + let versioned_key = LatestVersionedMultiLocation(&new_key); + if target_xcm_version == xcm_version { + VersionNotifyTargets::::insert(XCM_VERSION, versioned_key, value); + weight_used.saturating_accrue(vnt_migrate_weight); + } else { + // Need to notify target. + let response = Response::Version(xcm_version); + let message = Xcm(vec![QueryResponse { + query_id, + response, + max_weight, + querier: None, + }]); + let event = match send_xcm::(new_key, message) { + Ok((_hash, cost)) => { + VersionNotifyTargets::::insert( + XCM_VERSION, + versioned_key, + (query_id, max_weight, xcm_version), + ); + Event::VersionChangeNotified(new_key, xcm_version, cost) }, + Err(e) => Event::NotifyTargetSendFail(new_key, query_id, e.into()), }; - - let versioned_key = LatestVersionedMultiLocation(&new_key); - if target_xcm_version == xcm_version { - VersionNotifyTargets::::insert(XCM_VERSION, versioned_key, value); - weight_used.saturating_accrue(todo_vnt_migrate_weight); - } else { - // Need to notify target. - let response = Response::Version(xcm_version); - let message = - Xcm(vec![QueryResponse { query_id, response, max_weight }]); - let event = match T::XcmRouter::send_xcm(new_key.clone(), message) { - Ok(()) => { - VersionNotifyTargets::::insert( - XCM_VERSION, - versioned_key, - (query_id, max_weight, xcm_version), - ); - Event::VersionChangeNotified(new_key, xcm_version) - }, - Err(e) => Event::NotifyTargetSendFail(new_key, query_id, e.into()), - }; - Self::deposit_event(event); - weight_used.saturating_accrue(todo_vnt_notify_migrate_weight); - } - if weight_used.any_gte(weight_cutoff) { - return (weight_used, Some(stage)) - } + Self::deposit_event(event); + weight_used.saturating_accrue(vnt_notify_migrate_weight); + } + if weight_used.any_gte(weight_cutoff) { + return (weight_used, Some(stage)) } } } - (weight_used, None) } + (weight_used, None) + } - /// Request that `dest` informs us of its version. - pub fn request_version_notify(dest: impl Into) -> XcmResult { - let dest = dest.into(); - let versioned_dest = VersionedMultiLocation::from(dest.clone()); - let already = VersionNotifiers::::contains_key(XCM_VERSION, &versioned_dest); - ensure!(!already, XcmError::InvalidLocation); - let query_id = QueryCounter::::mutate(|q| { - let r = *q; - q.saturating_inc(); - r - }); - // TODO #3735: Correct weight. - let instruction = SubscribeVersion { query_id, max_response_weight: 0 }; - T::XcmRouter::send_xcm(dest, Xcm(vec![instruction]))?; - VersionNotifiers::::insert(XCM_VERSION, &versioned_dest, query_id); - let query_status = - QueryStatus::VersionNotifier { origin: versioned_dest, is_active: false }; - Queries::::insert(query_id, query_status); - Ok(()) - } + /// Request that `dest` informs us of its version. + pub fn request_version_notify(dest: impl Into) -> XcmResult { + let dest = dest.into(); + let versioned_dest = VersionedMultiLocation::from(dest); + let already = VersionNotifiers::::contains_key(XCM_VERSION, &versioned_dest); + ensure!(!already, XcmError::InvalidLocation); + let query_id = QueryCounter::::mutate(|q| { + let r = *q; + q.saturating_inc(); + r + }); + // TODO #3735: Correct weight. + let instruction = SubscribeVersion { query_id, max_response_weight: Weight::zero() }; + let (_hash, cost) = send_xcm::(dest, Xcm(vec![instruction]))?; + Self::deposit_event(Event::VersionNotifyRequested(dest, cost)); + VersionNotifiers::::insert(XCM_VERSION, &versioned_dest, query_id); + let query_status = + QueryStatus::VersionNotifier { origin: versioned_dest, is_active: false }; + Queries::::insert(query_id, query_status); + Ok(()) + } - /// Request that `dest` ceases informing us of its version. - pub fn unrequest_version_notify(dest: impl Into) -> XcmResult { - let dest = dest.into(); - let versioned_dest = LatestVersionedMultiLocation(&dest); - let query_id = VersionNotifiers::::take(XCM_VERSION, versioned_dest) - .ok_or(XcmError::InvalidLocation)?; - T::XcmRouter::send_xcm(dest.clone(), Xcm(vec![UnsubscribeVersion]))?; - Queries::::remove(query_id); - Ok(()) - } + /// Request that `dest` ceases informing us of its version. + pub fn unrequest_version_notify(dest: impl Into) -> XcmResult { + let dest = dest.into(); + let versioned_dest = LatestVersionedMultiLocation(&dest); + let query_id = VersionNotifiers::::take(XCM_VERSION, versioned_dest) + .ok_or(XcmError::InvalidLocation)?; + let (_hash, cost) = send_xcm::(dest, Xcm(vec![UnsubscribeVersion]))?; + Self::deposit_event(Event::VersionNotifyUnrequested(dest, cost)); + Queries::::remove(query_id); + Ok(()) + } - /// Relay an XCM `message` from a given `interior` location in this context to a given `dest` - /// location. A null `dest` is not handled. - pub fn send_xcm( - interior: impl Into, - dest: impl Into, - mut message: Xcm<()>, - ) -> Result<(), SendError> { - let interior = interior.into(); - let dest = dest.into(); - if interior != Junctions::Here { - message.0.insert(0, DescendOrigin(interior)) - }; - log::trace!(target: "xcm::send_xcm", "dest: {:?}, message: {:?}", &dest, &message); - T::XcmRouter::send_xcm(dest, message) + /// Relay an XCM `message` from a given `interior` location in this context to a given `dest` + /// location. The `fee_payer` is charged for the delivery unless `None` in which case fees + /// are not charged (and instead borne by the chain). + pub fn send_xcm( + interior: impl Into, + dest: impl Into, + mut message: Xcm<()>, + ) -> Result { + let interior = interior.into(); + let dest = dest.into(); + let maybe_fee_payer = if interior != Junctions::Here { + message.0.insert(0, DescendOrigin(interior)); + Some(interior.into()) + } else { + None + }; + log::debug!(target: "xcm::send_xcm", "dest: {:?}, message: {:?}", &dest, &message); + let (ticket, price) = validate_send::(dest, message)?; + if let Some(fee_payer) = maybe_fee_payer { + Self::charge_fees(fee_payer, price).map_err(|_| SendError::Fees)?; } + T::XcmRouter::deliver(ticket) + } - pub fn check_account() -> T::AccountId { - const ID: PalletId = PalletId(*b"py/xcmch"); - AccountIdConversion::::into_account_truncating(&ID) - } + pub fn check_account() -> T::AccountId { + const ID: PalletId = PalletId(*b"py/xcmch"); + AccountIdConversion::::into_account_truncating(&ID) + } - fn do_new_query( - responder: impl Into, - maybe_notify: Option<(u8, u8)>, - timeout: T::BlockNumber, - ) -> u64 { - QueryCounter::::mutate(|q| { - let r = *q; - q.saturating_inc(); - Queries::::insert( - r, - QueryStatus::Pending { - responder: responder.into().into(), - maybe_notify, - timeout, - }, - ); - r - }) - } + /// Create a new expectation of a query response with the querier being here. + fn do_new_query( + responder: impl Into, + maybe_notify: Option<(u8, u8)>, + timeout: T::BlockNumber, + match_querier: impl Into, + ) -> u64 { + QueryCounter::::mutate(|q| { + let r = *q; + q.saturating_inc(); + Queries::::insert( + r, + QueryStatus::Pending { + responder: responder.into().into(), + maybe_match_querier: Some(match_querier.into().into()), + maybe_notify, + timeout, + }, + ); + r + }) + } - /// Consume `message` and return another which is equivalent to it except that it reports - /// back the outcome. - /// - /// - `message`: The message whose outcome should be reported. - /// - `responder`: The origin from which a response should be expected. - /// - `timeout`: The block number after which it is permissible for `notify` not to be - /// called even if a response is received. - /// - /// `report_outcome` may return an error if the `responder` is not invertible. - /// - /// To check the status of the query, use `fn query()` passing the resultant `QueryId` - /// value. - pub fn report_outcome( - message: &mut Xcm<()>, - responder: impl Into, - timeout: T::BlockNumber, - ) -> Result { - let responder = responder.into(); - let dest = T::LocationInverter::invert_location(&responder) - .map_err(|()| XcmError::MultiLocationNotInvertible)?; - let query_id = Self::new_query(responder, timeout); - let report_error = Xcm(vec![ReportError { dest, query_id, max_response_weight: 0 }]); - message.0.insert(0, SetAppendix(report_error)); - Ok(query_id) - } + /// Consume `message` and return another which is equivalent to it except that it reports + /// back the outcome. + /// + /// - `message`: The message whose outcome should be reported. + /// - `responder`: The origin from which a response should be expected. + /// - `timeout`: The block number after which it is permissible for `notify` not to be + /// called even if a response is received. + /// + /// `report_outcome` may return an error if the `responder` is not invertible. + /// + /// It is assumed that the querier of the response will be `Here`. + /// + /// To check the status of the query, use `fn query()` passing the resultant `QueryId` + /// value. + pub fn report_outcome( + message: &mut Xcm<()>, + responder: impl Into, + timeout: T::BlockNumber, + ) -> Result { + let responder = responder.into(); + let destination = T::UniversalLocation::get() + .invert_target(&responder) + .map_err(|()| XcmError::LocationNotInvertible)?; + let query_id = Self::new_query(responder, timeout, Here); + let response_info = QueryResponseInfo { destination, query_id, max_weight: Weight::zero() }; + let report_error = Xcm(vec![ReportError(response_info)]); + message.0.insert(0, SetAppendix(report_error)); + Ok(query_id) + } - /// Consume `message` and return another which is equivalent to it except that it reports - /// back the outcome and dispatches `notify` on this chain. - /// - /// - `message`: The message whose outcome should be reported. - /// - `responder`: The origin from which a response should be expected. - /// - `notify`: A dispatchable function which will be called once the outcome of `message` - /// is known. It may be a dispatchable in any pallet of the local chain, but other than - /// the usual origin, it must accept exactly two arguments: `query_id: QueryId` and - /// `outcome: Response`, and in that order. It should expect that the origin is - /// `Origin::Response` and will contain the responder's location. - /// - `timeout`: The block number after which it is permissible for `notify` not to be - /// called even if a response is received. - /// - /// `report_outcome_notify` may return an error if the `responder` is not invertible. - /// - /// NOTE: `notify` gets called as part of handling an incoming message, so it should be - /// lightweight. Its weight is estimated during this function and stored ready for - /// weighing `ReportOutcome` on the way back. If it turns out to be heavier once it returns - /// then reporting the outcome will fail. Futhermore if the estimate is too high, then it - /// may be put in the overweight queue and need to be manually executed. - pub fn report_outcome_notify( - message: &mut Xcm<()>, - responder: impl Into, - notify: impl Into<::RuntimeCall>, - timeout: T::BlockNumber, - ) -> Result<(), XcmError> { - let responder = responder.into(); - let dest = T::LocationInverter::invert_location(&responder) - .map_err(|()| XcmError::MultiLocationNotInvertible)?; - let notify: ::RuntimeCall = notify.into(); - let max_response_weight = notify.get_dispatch_info().weight; - let query_id = Self::new_notify_query(responder, notify, timeout); - let report_error = Xcm(vec![ReportError { - dest, - query_id, - max_response_weight: max_response_weight.ref_time(), - }]); - message.0.insert(0, SetAppendix(report_error)); - Ok(()) - } + /// Consume `message` and return another which is equivalent to it except that it reports + /// back the outcome and dispatches `notify` on this chain. + /// + /// - `message`: The message whose outcome should be reported. + /// - `responder`: The origin from which a response should be expected. + /// - `notify`: A dispatchable function which will be called once the outcome of `message` + /// is known. It may be a dispatchable in any pallet of the local chain, but other than + /// the usual origin, it must accept exactly two arguments: `query_id: QueryId` and + /// `outcome: Response`, and in that order. It should expect that the origin is + /// `Origin::Response` and will contain the responder's location. + /// - `timeout`: The block number after which it is permissible for `notify` not to be + /// called even if a response is received. + /// + /// `report_outcome_notify` may return an error if the `responder` is not invertible. + /// + /// It is assumed that the querier of the response will be `Here`. + /// + /// NOTE: `notify` gets called as part of handling an incoming message, so it should be + /// lightweight. Its weight is estimated during this function and stored ready for + /// weighing `ReportOutcome` on the way back. If it turns out to be heavier once it returns + /// then reporting the outcome will fail. Futhermore if the estimate is too high, then it + /// may be put in the overweight queue and need to be manually executed. + pub fn report_outcome_notify( + message: &mut Xcm<()>, + responder: impl Into, + notify: impl Into<::RuntimeCall>, + timeout: T::BlockNumber, + ) -> Result<(), XcmError> { + let responder = responder.into(); + let destination = T::UniversalLocation::get() + .invert_target(&responder) + .map_err(|()| XcmError::LocationNotInvertible)?; + let notify: ::RuntimeCall = notify.into(); + let max_weight = notify.get_dispatch_info().weight; + let query_id = Self::new_notify_query(responder, notify, timeout, Here); + let response_info = QueryResponseInfo { destination, query_id, max_weight }; + let report_error = Xcm(vec![ReportError(response_info)]); + message.0.insert(0, SetAppendix(report_error)); + Ok(()) + } - /// Attempt to create a new query ID and register it as a query that is yet to respond. - pub fn new_query(responder: impl Into, timeout: T::BlockNumber) -> u64 { - Self::do_new_query(responder, None, timeout) - } + /// Attempt to create a new query ID and register it as a query that is yet to respond. + pub fn new_query( + responder: impl Into, + timeout: T::BlockNumber, + match_querier: impl Into, + ) -> u64 { + Self::do_new_query(responder, None, timeout, match_querier) + } - /// Attempt to create a new query ID and register it as a query that is yet to respond, and - /// which will call a dispatchable when a response happens. - pub fn new_notify_query( - responder: impl Into, - notify: impl Into<::RuntimeCall>, - timeout: T::BlockNumber, - ) -> u64 { - let notify = - notify.into().using_encoded(|mut bytes| Decode::decode(&mut bytes)).expect( - "decode input is output of Call encode; Call guaranteed to have two enums; qed", - ); - Self::do_new_query(responder, Some(notify), timeout) + /// Attempt to create a new query ID and register it as a query that is yet to respond, and + /// which will call a dispatchable when a response happens. + pub fn new_notify_query( + responder: impl Into, + notify: impl Into<::RuntimeCall>, + timeout: T::BlockNumber, + match_querier: impl Into, + ) -> u64 { + let notify = notify.into().using_encoded(|mut bytes| Decode::decode(&mut bytes)).expect( + "decode input is output of Call encode; Call guaranteed to have two enums; qed", + ); + Self::do_new_query(responder, Some(notify), timeout, match_querier) + } + + /// Attempt to remove and return the response of query with ID `query_id`. + /// + /// Returns `None` if the response is not (yet) available. + pub fn take_response(query_id: QueryId) -> Option<(Response, T::BlockNumber)> { + if let Some(QueryStatus::Ready { response, at }) = Queries::::get(query_id) { + let response = response.try_into().ok()?; + Queries::::remove(query_id); + Self::deposit_event(Event::ResponseTaken(query_id)); + Some((response, at)) + } else { + None } + } - /// Attempt to remove and return the response of query with ID `query_id`. - /// - /// Returns `None` if the response is not (yet) available. - pub fn take_response(query_id: QueryId) -> Option<(Response, T::BlockNumber)> { - if let Some(QueryStatus::Ready { response, at }) = Queries::::get(query_id) { - let response = response.try_into().ok()?; - Queries::::remove(query_id); - Self::deposit_event(Event::ResponseTaken(query_id)); - Some((response, at)) + /// Note that a particular destination to whom we would like to send a message is unknown + /// and queue it for version discovery. + fn note_unknown_version(dest: &MultiLocation) { + log::trace!( + target: "xcm::pallet_xcm::note_unknown_version", + "XCM version is unknown for destination: {:?}", + dest, + ); + let versioned_dest = VersionedMultiLocation::from(*dest); + VersionDiscoveryQueue::::mutate(|q| { + if let Some(index) = q.iter().position(|i| &i.0 == &versioned_dest) { + // exists - just bump the count. + q[index].1.saturating_inc(); } else { - None + let _ = q.try_push((versioned_dest, 1)); } + }); + } + + /// Withdraw given `assets` from the given `location` and pay as XCM fees. + /// + /// Fails if: + /// - the `assets` are not known on this chain; + /// - the `assets` cannot be withdrawn with that location as the Origin. + fn charge_fees(location: MultiLocation, assets: MultiAssets) -> DispatchResult { + T::XcmExecutor::charge_fees(location, assets.clone()) + .map_err(|_| Error::::FeesNotMet)?; + Self::deposit_event(Event::FeesPaid(location, assets)); + Ok(()) + } +} + +pub struct LockTicket { + sovereign_account: T::AccountId, + amount: BalanceOf, + unlocker: MultiLocation, + item_index: Option, +} + +impl xcm_executor::traits::Enact for LockTicket { + fn enact(self) -> Result<(), xcm_executor::traits::LockError> { + use xcm_executor::traits::LockError::UnexpectedState; + let mut locks = LockedFungibles::::get(&self.sovereign_account).unwrap_or_default(); + match self.item_index { + Some(index) => { + ensure!(locks.len() > index, UnexpectedState); + ensure!(locks[index].1.try_as::<_>() == Ok(&self.unlocker), UnexpectedState); + locks[index].0 = locks[index].0.max(self.amount); + }, + None => { + locks + .try_push((self.amount, self.unlocker.into())) + .map_err(|(_balance, _location)| UnexpectedState)?; + }, } + LockedFungibles::::insert(&self.sovereign_account, locks); + T::Currency::extend_lock( + *b"py/xcmlk", + &self.sovereign_account, + self.amount, + WithdrawReasons::all(), + ); + Ok(()) + } +} - /// Note that a particular destination to whom we would like to send a message is unknown - /// and queue it for version discovery. - fn note_unknown_version(dest: &MultiLocation) { - log::trace!( - target: "xcm::pallet_xcm::note_unknown_version", - "XCM version is unknown for destination: {:?}", - dest, - ); - let versioned_dest = VersionedMultiLocation::from(dest.clone()); - VersionDiscoveryQueue::::mutate(|q| { - if let Some(index) = q.iter().position(|i| &i.0 == &versioned_dest) { - // exists - just bump the count. - q[index].1.saturating_inc(); - } else { - let _ = q.try_push((versioned_dest, 1)); +pub struct UnlockTicket { + sovereign_account: T::AccountId, + amount: BalanceOf, + unlocker: MultiLocation, +} + +impl xcm_executor::traits::Enact for UnlockTicket { + fn enact(self) -> Result<(), xcm_executor::traits::LockError> { + use xcm_executor::traits::LockError::UnexpectedState; + let mut locks = + LockedFungibles::::get(&self.sovereign_account).ok_or(UnexpectedState)?; + let mut maybe_remove_index = None; + let mut locked = BalanceOf::::zero(); + let mut found = false; + // We could just as well do with with an into_iter, filter_map and collect, however this way + // avoids making an allocation. + for (i, x) in locks.iter_mut().enumerate() { + if x.1.try_as::<_>().defensive() == Ok(&self.unlocker) { + x.0 = x.0.saturating_sub(self.amount); + if x.0.is_zero() { + maybe_remove_index = Some(i); } - }); + found = true; + } + locked = locked.max(x.0); + } + ensure!(found, UnexpectedState); + if let Some(remove_index) = maybe_remove_index { + locks.swap_remove(remove_index); } + LockedFungibles::::insert(&self.sovereign_account, locks); + let reasons = WithdrawReasons::all(); + T::Currency::set_lock(*b"py/xcmlk", &self.sovereign_account, locked, reasons); + Ok(()) } +} - impl WrapVersion for Pallet { - fn wrap_version( - dest: &MultiLocation, - xcm: impl Into>, - ) -> Result, ()> { - SupportedVersion::::get(XCM_VERSION, LatestVersionedMultiLocation(dest)) - .or_else(|| { - Self::note_unknown_version(dest); - SafeXcmVersion::::get() - }) - .ok_or_else(|| { - log::trace!( - target: "xcm::pallet_xcm::wrap_version", - "Could not determine a version to wrap XCM for destination: {:?}", - dest, - ); - () - }) - .and_then(|v| xcm.into().into_version(v.min(XCM_VERSION))) +pub struct ReduceTicket { + key: (u32, T::AccountId, VersionedAssetId), + amount: u128, + locker: VersionedMultiLocation, + owner: VersionedMultiLocation, +} + +impl xcm_executor::traits::Enact for ReduceTicket { + fn enact(self) -> Result<(), xcm_executor::traits::LockError> { + use xcm_executor::traits::LockError::UnexpectedState; + let mut record = RemoteLockedFungibles::::get(&self.key).ok_or(UnexpectedState)?; + ensure!(self.locker == record.locker && self.owner == record.owner, UnexpectedState); + ensure!(record.users == 0, UnexpectedState); + record.amount = record.amount.checked_sub(self.amount).ok_or(UnexpectedState)?; + if record.amount == 0 { + RemoteLockedFungibles::::remove(&self.key); + } else { + RemoteLockedFungibles::::insert(&self.key, &record); } + Ok(()) } +} - impl VersionChangeNotifier for Pallet { - /// Start notifying `location` should the XCM version of this chain change. - /// - /// When it does, this type should ensure a `QueryResponse` message is sent with the given - /// `query_id` & `max_weight` and with a `response` of `Repsonse::Version`. This should happen - /// until/unless `stop` is called with the correct `query_id`. - /// - /// If the `location` has an ongoing notification and when this function is called, then an - /// error should be returned. - fn start(dest: &MultiLocation, query_id: QueryId, max_weight: u64) -> XcmResult { - let versioned_dest = LatestVersionedMultiLocation(dest); - let already = VersionNotifyTargets::::contains_key(XCM_VERSION, versioned_dest); - ensure!(!already, XcmError::InvalidLocation); - - let xcm_version = T::AdvertisedXcmVersion::get(); - let response = Response::Version(xcm_version); - let instruction = QueryResponse { query_id, response, max_weight }; - T::XcmRouter::send_xcm(dest.clone(), Xcm(vec![instruction]))?; - - let value = (query_id, max_weight, xcm_version); - VersionNotifyTargets::::insert(XCM_VERSION, versioned_dest, value); - Ok(()) - } +impl xcm_executor::traits::AssetLock for Pallet { + type LockTicket = LockTicket; + type UnlockTicket = UnlockTicket; + type ReduceTicket = ReduceTicket; + + fn prepare_lock( + unlocker: MultiLocation, + asset: MultiAsset, + owner: MultiLocation, + ) -> Result, xcm_executor::traits::LockError> { + use xcm_executor::traits::LockError::*; + let sovereign_account = T::SovereignAccountOf::convert_ref(&owner).map_err(|_| BadOwner)?; + let amount = T::CurrencyMatcher::matches_fungible(&asset).ok_or(UnknownAsset)?; + ensure!(T::Currency::free_balance(&sovereign_account) >= amount, AssetNotOwned); + let locks = LockedFungibles::::get(&sovereign_account).unwrap_or_default(); + let item_index = locks.iter().position(|x| x.1.try_as::<_>() == Ok(&unlocker)); + ensure!(item_index.is_some() || locks.len() < T::MaxLockers::get() as usize, NoResources); + Ok(LockTicket { sovereign_account, amount, unlocker, item_index }) + } - /// Stop notifying `location` should the XCM change. This is a no-op if there was never a - /// subscription. - fn stop(dest: &MultiLocation) -> XcmResult { - VersionNotifyTargets::::remove(XCM_VERSION, LatestVersionedMultiLocation(dest)); - Ok(()) - } + fn prepare_unlock( + unlocker: MultiLocation, + asset: MultiAsset, + owner: MultiLocation, + ) -> Result, xcm_executor::traits::LockError> { + use xcm_executor::traits::LockError::*; + let sovereign_account = T::SovereignAccountOf::convert_ref(&owner).map_err(|_| BadOwner)?; + let amount = T::CurrencyMatcher::matches_fungible(&asset).ok_or(UnknownAsset)?; + ensure!(T::Currency::free_balance(&sovereign_account) >= amount, AssetNotOwned); + let locks = LockedFungibles::::get(&sovereign_account).unwrap_or_default(); + let item_index = + locks.iter().position(|x| x.1.try_as::<_>() == Ok(&unlocker)).ok_or(NotLocked)?; + ensure!(locks[item_index].0 >= amount, NotLocked); + Ok(UnlockTicket { sovereign_account, amount, unlocker }) + } - /// Return true if a location is subscribed to XCM version changes. - fn is_subscribed(dest: &MultiLocation) -> bool { - let versioned_dest = LatestVersionedMultiLocation(dest); - VersionNotifyTargets::::contains_key(XCM_VERSION, versioned_dest) + fn note_unlockable( + locker: MultiLocation, + asset: MultiAsset, + mut owner: MultiLocation, + ) -> Result<(), xcm_executor::traits::LockError> { + use xcm_executor::traits::LockError::*; + ensure!(T::TrustedLockers::contains(&locker, &asset), NotTrusted); + let amount = match asset.fun { + Fungible(a) => a, + NonFungible(_) => return Err(Unimplemented), + }; + owner.remove_network_id(); + let account = T::SovereignAccountOf::convert_ref(&owner).map_err(|_| BadOwner)?; + let locker = locker.into(); + let owner = owner.into(); + let id: VersionedAssetId = asset.id.into(); + let key = (XCM_VERSION, account, id); + let mut record = RemoteLockedFungibleRecord { amount, owner, locker, users: 0 }; + if let Some(old) = RemoteLockedFungibles::::get(&key) { + // Make sure that the new record wouldn't clobber any old data. + ensure!(old.locker == record.locker && old.owner == record.owner, WouldClobber); + record.users = old.users; + record.amount = record.amount.max(old.amount); } + RemoteLockedFungibles::::insert(&key, record); + Ok(()) } - impl DropAssets for Pallet { - fn drop_assets(origin: &MultiLocation, assets: Assets) -> u64 { - if assets.is_empty() { - return 0 - } - let versioned = VersionedMultiAssets::from(MultiAssets::from(assets)); - let hash = BlakeTwo256::hash_of(&(&origin, &versioned)); - AssetTraps::::mutate(hash, |n| *n += 1); - Self::deposit_event(Event::AssetsTrapped(hash, origin.clone(), versioned)); - // TODO #3735: Put the real weight in there. - 0 + fn prepare_reduce_unlockable( + locker: MultiLocation, + asset: MultiAsset, + mut owner: MultiLocation, + ) -> Result { + use xcm_executor::traits::LockError::*; + let amount = match asset.fun { + Fungible(a) => a, + NonFungible(_) => return Err(Unimplemented), + }; + owner.remove_network_id(); + let sovereign_account = T::SovereignAccountOf::convert_ref(&owner).map_err(|_| BadOwner)?; + let locker = locker.into(); + let owner = owner.into(); + let id: VersionedAssetId = asset.id.into(); + let key = (XCM_VERSION, sovereign_account, id); + + let record = RemoteLockedFungibles::::get(&key).ok_or(NotLocked)?; + // Make sure that the record contains what we expect and there's enough to unlock. + ensure!(locker == record.locker && owner == record.owner, WouldClobber); + ensure!(record.users == 0, InUse); + ensure!(record.amount >= amount, NotEnoughLocked); + Ok(ReduceTicket { key, amount, locker, owner }) + } +} + +impl WrapVersion for Pallet { + fn wrap_version( + dest: &MultiLocation, + xcm: impl Into>, + ) -> Result, ()> { + SupportedVersion::::get(XCM_VERSION, LatestVersionedMultiLocation(dest)) + .or_else(|| { + Self::note_unknown_version(dest); + SafeXcmVersion::::get() + }) + .ok_or_else(|| { + log::trace!( + target: "xcm::pallet_xcm::wrap_version", + "Could not determine a version to wrap XCM for destination: {:?}", + dest, + ); + () + }) + .and_then(|v| xcm.into().into_version(v.min(XCM_VERSION))) + } +} + +impl VersionChangeNotifier for Pallet { + /// Start notifying `location` should the XCM version of this chain change. + /// + /// When it does, this type should ensure a `QueryResponse` message is sent with the given + /// `query_id` & `max_weight` and with a `response` of `Response::Version`. This should happen + /// until/unless `stop` is called with the correct `query_id`. + /// + /// If the `location` has an ongoing notification and when this function is called, then an + /// error should be returned. + fn start( + dest: &MultiLocation, + query_id: QueryId, + max_weight: Weight, + _context: &XcmContext, + ) -> XcmResult { + let versioned_dest = LatestVersionedMultiLocation(dest); + let already = VersionNotifyTargets::::contains_key(XCM_VERSION, versioned_dest); + ensure!(!already, XcmError::InvalidLocation); + + let xcm_version = T::AdvertisedXcmVersion::get(); + let response = Response::Version(xcm_version); + let instruction = QueryResponse { query_id, response, max_weight, querier: None }; + let (_hash, cost) = send_xcm::(*dest, Xcm(vec![instruction]))?; + Self::deposit_event(Event::::VersionNotifyStarted(*dest, cost)); + + let value = (query_id, max_weight, xcm_version); + VersionNotifyTargets::::insert(XCM_VERSION, versioned_dest, value); + Ok(()) + } + + /// Stop notifying `location` should the XCM change. This is a no-op if there was never a + /// subscription. + fn stop(dest: &MultiLocation, _context: &XcmContext) -> XcmResult { + VersionNotifyTargets::::remove(XCM_VERSION, LatestVersionedMultiLocation(dest)); + Ok(()) + } + + /// Return true if a location is subscribed to XCM version changes. + fn is_subscribed(dest: &MultiLocation) -> bool { + let versioned_dest = LatestVersionedMultiLocation(dest); + VersionNotifyTargets::::contains_key(XCM_VERSION, versioned_dest) + } +} + +impl DropAssets for Pallet { + fn drop_assets(origin: &MultiLocation, assets: Assets, _context: &XcmContext) -> Weight { + if assets.is_empty() { + return Weight::zero() } + let versioned = VersionedMultiAssets::from(MultiAssets::from(assets)); + let hash = BlakeTwo256::hash_of(&(&origin, &versioned)); + AssetTraps::::mutate(hash, |n| *n += 1); + Self::deposit_event(Event::AssetsTrapped(hash, *origin, versioned)); + // TODO #3735: Put the real weight in there. + Weight::zero() } +} - impl ClaimAssets for Pallet { - fn claim_assets( - origin: &MultiLocation, - ticket: &MultiLocation, - assets: &MultiAssets, - ) -> bool { - let mut versioned = VersionedMultiAssets::from(assets.clone()); - match (ticket.parents, &ticket.interior) { - (0, X1(GeneralIndex(i))) => - versioned = match versioned.into_version(*i as u32) { - Ok(v) => v, - Err(()) => return false, - }, - (0, Here) => (), - _ => return false, - }; - let hash = BlakeTwo256::hash_of(&(origin, versioned.clone())); - match AssetTraps::::get(hash) { - 0 => return false, - 1 => AssetTraps::::remove(hash), - n => AssetTraps::::insert(hash, n - 1), - } - Self::deposit_event(Event::AssetsClaimed(hash, origin.clone(), versioned)); - return true +impl ClaimAssets for Pallet { + fn claim_assets( + origin: &MultiLocation, + ticket: &MultiLocation, + assets: &MultiAssets, + _context: &XcmContext, + ) -> bool { + let mut versioned = VersionedMultiAssets::from(assets.clone()); + match (ticket.parents, &ticket.interior) { + (0, X1(GeneralIndex(i))) => + versioned = match versioned.into_version(*i as u32) { + Ok(v) => v, + Err(()) => return false, + }, + (0, Here) => (), + _ => return false, + }; + let hash = BlakeTwo256::hash_of(&(origin, versioned.clone())); + match AssetTraps::::get(hash) { + 0 => return false, + 1 => AssetTraps::::remove(hash), + n => AssetTraps::::insert(hash, n - 1), } + Self::deposit_event(Event::AssetsClaimed(hash, *origin, versioned)); + return true } +} - impl OnResponse for Pallet { - fn expecting_response(origin: &MultiLocation, query_id: QueryId) -> bool { - match Queries::::get(query_id) { - Some(QueryStatus::Pending { responder, .. }) => - MultiLocation::try_from(responder).map_or(false, |r| origin == &r), - Some(QueryStatus::VersionNotifier { origin: r, .. }) => - MultiLocation::try_from(r).map_or(false, |r| origin == &r), - _ => false, - } +impl OnResponse for Pallet { + fn expecting_response( + origin: &MultiLocation, + query_id: QueryId, + querier: Option<&MultiLocation>, + ) -> bool { + match Queries::::get(query_id) { + Some(QueryStatus::Pending { responder, maybe_match_querier, .. }) => + MultiLocation::try_from(responder).map_or(false, |r| origin == &r) && + maybe_match_querier.map_or(true, |match_querier| { + MultiLocation::try_from(match_querier).map_or(false, |match_querier| { + querier.map_or(false, |q| q == &match_querier) + }) + }), + Some(QueryStatus::VersionNotifier { origin: r, .. }) => + MultiLocation::try_from(r).map_or(false, |r| origin == &r), + _ => false, } + } - fn on_response( - origin: &MultiLocation, - query_id: QueryId, - response: Response, - max_weight: u64, - ) -> u64 { - match (response, Queries::::get(query_id)) { - ( - Response::Version(v), - Some(QueryStatus::VersionNotifier { origin: expected_origin, is_active }), - ) => { - let origin: MultiLocation = match expected_origin.try_into() { - Ok(o) if &o == origin => o, - Ok(o) => { - Self::deposit_event(Event::InvalidResponder( - origin.clone(), - query_id, - Some(o), - )); - return 0 - }, - _ => { - Self::deposit_event(Event::InvalidResponder( - origin.clone(), - query_id, - None, - )); - // TODO #3735: Correct weight for this. - return 0 - }, - }; - // TODO #3735: Check max_weight is correct. - if !is_active { - Queries::::insert( - query_id, - QueryStatus::VersionNotifier { - origin: origin.clone().into(), - is_active: true, - }, - ); - } - // We're being notified of a version change. - SupportedVersion::::insert( - XCM_VERSION, - LatestVersionedMultiLocation(&origin), - v, + fn on_response( + origin: &MultiLocation, + query_id: QueryId, + querier: Option<&MultiLocation>, + response: Response, + max_weight: Weight, + _context: &XcmContext, + ) -> Weight { + match (response, Queries::::get(query_id)) { + ( + Response::Version(v), + Some(QueryStatus::VersionNotifier { origin: expected_origin, is_active }), + ) => { + let origin: MultiLocation = match expected_origin.try_into() { + Ok(o) if &o == origin => o, + Ok(o) => { + Self::deposit_event(Event::InvalidResponder(*origin, query_id, Some(o))); + return Weight::zero() + }, + _ => { + Self::deposit_event(Event::InvalidResponder(*origin, query_id, None)); + // TODO #3735: Correct weight for this. + return Weight::zero() + }, + }; + // TODO #3735: Check max_weight is correct. + if !is_active { + Queries::::insert( + query_id, + QueryStatus::VersionNotifier { origin: origin.into(), is_active: true }, ); - Self::deposit_event(Event::SupportedVersionChanged(origin, v)); - 0 - }, - (response, Some(QueryStatus::Pending { responder, maybe_notify, .. })) => { - let responder = match MultiLocation::try_from(responder) { - Ok(r) => r, + } + // We're being notified of a version change. + SupportedVersion::::insert( + XCM_VERSION, + LatestVersionedMultiLocation(&origin), + v, + ); + Self::deposit_event(Event::SupportedVersionChanged(origin, v)); + Weight::zero() + }, + ( + response, + Some(QueryStatus::Pending { responder, maybe_notify, maybe_match_querier, .. }), + ) => { + if let Some(match_querier) = maybe_match_querier { + let match_querier = match MultiLocation::try_from(match_querier) { + Ok(mq) => mq, Err(_) => { - Self::deposit_event(Event::InvalidResponderVersion( - origin.clone(), - query_id, - )); - return 0 + Self::deposit_event(Event::InvalidQuerierVersion(*origin, query_id)); + return Weight::zero() }, }; - if origin != &responder { - Self::deposit_event(Event::InvalidResponder( - origin.clone(), + if querier.map_or(true, |q| q != &match_querier) { + Self::deposit_event(Event::InvalidQuerier( + *origin, query_id, - Some(responder), + match_querier, + querier.cloned(), )); - return 0 + return Weight::zero() } - return match maybe_notify { - Some((pallet_index, call_index)) => { - // This is a bit horrible, but we happen to know that the `Call` will - // be built by `(pallet_index: u8, call_index: u8, QueryId, Response)`. - // So we just encode that and then re-encode to a real Call. - let bare = (pallet_index, call_index, query_id, response); - if let Ok(call) = bare.using_encoded(|mut bytes| { - ::RuntimeCall::decode(&mut bytes) - }) { - Queries::::remove(query_id); - let weight = call.get_dispatch_info().weight; - let max_weight = Weight::from_ref_time(max_weight); - if weight.any_gt(max_weight) { - let e = Event::NotifyOverweight( + } + let responder = match MultiLocation::try_from(responder) { + Ok(r) => r, + Err(_) => { + Self::deposit_event(Event::InvalidResponderVersion(*origin, query_id)); + return Weight::zero() + }, + }; + if origin != &responder { + Self::deposit_event(Event::InvalidResponder( + *origin, + query_id, + Some(responder), + )); + return Weight::zero() + } + return match maybe_notify { + Some((pallet_index, call_index)) => { + // This is a bit horrible, but we happen to know that the `Call` will + // be built by `(pallet_index: u8, call_index: u8, QueryId, Response)`. + // So we just encode that and then re-encode to a real Call. + let bare = (pallet_index, call_index, query_id, response); + if let Ok(call) = bare.using_encoded(|mut bytes| { + ::RuntimeCall::decode(&mut bytes) + }) { + Queries::::remove(query_id); + let weight = call.get_dispatch_info().weight; + if weight.any_gt(max_weight) { + let e = Event::NotifyOverweight( + query_id, + pallet_index, + call_index, + weight, + max_weight, + ); + Self::deposit_event(e); + return Weight::zero() + } + let dispatch_origin = Origin::Response(*origin).into(); + match call.dispatch(dispatch_origin) { + Ok(post_info) => { + let e = Event::Notified(query_id, pallet_index, call_index); + Self::deposit_event(e); + post_info.actual_weight + }, + Err(error_and_info) => { + let e = Event::NotifyDispatchError( query_id, pallet_index, call_index, - weight, - max_weight, ); Self::deposit_event(e); - return 0 - } - let dispatch_origin = Origin::Response(origin.clone()).into(); - match call.dispatch(dispatch_origin) { - Ok(post_info) => { - let e = Event::Notified(query_id, pallet_index, call_index); - Self::deposit_event(e); - post_info.actual_weight - }, - Err(error_and_info) => { - let e = Event::NotifyDispatchError( - query_id, - pallet_index, - call_index, - ); - Self::deposit_event(e); - // Not much to do with the result as it is. It's up to the parachain to ensure that the - // message makes sense. - error_and_info.post_info.actual_weight - }, - } - .unwrap_or(weight) - .ref_time() - } else { - let e = - Event::NotifyDecodeFailed(query_id, pallet_index, call_index); - Self::deposit_event(e); - 0 + // Not much to do with the result as it is. It's up to the parachain to ensure that the + // message makes sense. + error_and_info.post_info.actual_weight + }, } - }, - None => { - let e = Event::ResponseReady(query_id, response.clone()); + .unwrap_or(weight) + } else { + let e = Event::NotifyDecodeFailed(query_id, pallet_index, call_index); Self::deposit_event(e); - let at = frame_system::Pallet::::current_block_number(); - let response = response.into(); - Queries::::insert(query_id, QueryStatus::Ready { response, at }); - 0 - }, - } - }, - _ => { - Self::deposit_event(Event::UnexpectedResponse(origin.clone(), query_id)); - return 0 - }, - } + Weight::zero() + } + }, + None => { + let e = Event::ResponseReady(query_id, response.clone()); + Self::deposit_event(e); + let at = frame_system::Pallet::::current_block_number(); + let response = response.into(); + Queries::::insert(query_id, QueryStatus::Ready { response, at }); + Weight::zero() + }, + } + }, + _ => { + Self::deposit_event(Event::UnexpectedResponse(*origin, query_id)); + Weight::zero() + }, } } } @@ -1517,6 +2075,19 @@ impl, Body: Get> Contains } } +/// Filter for `MultiLocation` to find those which represent a voice of an identified plurality. +/// +/// May reasonably be used with `EnsureXcm`. +pub struct IsVoiceOfBody(PhantomData<(Prefix, Body)>); +impl, Body: Get> Contains + for IsVoiceOfBody +{ + fn contains(l: &MultiLocation) -> bool { + let maybe_suffix = l.match_and_split(&Prefix::get()); + matches!(maybe_suffix, Some(Plurality { id, part }) if id == &Body::get() && part == &BodyPart::Voice) + } +} + /// `EnsureOrigin` implementation succeeding with a `MultiLocation` value to recognize and filter the /// `Origin::Xcm` item. pub struct EnsureXcm(PhantomData); diff --git a/xcm/pallet-xcm/src/migration.rs b/xcm/pallet-xcm/src/migration.rs new file mode 100644 index 000000000000..247b9f8adaca --- /dev/null +++ b/xcm/pallet-xcm/src/migration.rs @@ -0,0 +1,63 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +use crate::{Config, Pallet, VersionNotifyTargets}; +use frame_support::{ + pallet_prelude::*, + traits::{OnRuntimeUpgrade, StorageVersion}, + weights::Weight, +}; + +pub const STORAGE_VERSION: StorageVersion = StorageVersion::new(1); + +const DEFAULT_PROOF_SIZE: u64 = 64 * 1024; + +pub mod v1 { + use super::*; + + pub struct MigrateToV1(sp_std::marker::PhantomData); + impl OnRuntimeUpgrade for MigrateToV1 { + #[cfg(feature = "try-runtime")] + fn pre_upgrade() -> Result, &'static str> { + ensure!(StorageVersion::get::>() == 0, "must upgrade linearly"); + + Ok(sp_std::vec::Vec::new()) + } + + fn on_runtime_upgrade() -> Weight { + if StorageVersion::get::>() == 0 { + let mut weight = T::DbWeight::get().reads(1); + + let translate = |pre: (u64, u64, u32)| -> Option<(u64, Weight, u32)> { + weight = weight.saturating_add(T::DbWeight::get().reads_writes(1, 1)); + let translated = (pre.0, Weight::from_parts(pre.1, DEFAULT_PROOF_SIZE), pre.2); + log::info!("Migrated VersionNotifyTarget {:?} to {:?}", pre, translated); + Some(translated) + }; + + VersionNotifyTargets::::translate_values(translate); + + log::info!("v1 applied successfully"); + STORAGE_VERSION.put::>(); + + weight.saturating_add(T::DbWeight::get().writes(1)) + } else { + log::warn!("skipping v1, should be removed"); + T::DbWeight::get().reads(1) + } + } + } +} diff --git a/xcm/pallet-xcm/src/mock.rs b/xcm/pallet-xcm/src/mock.rs index 7652a395b47b..74e69c55b31c 100644 --- a/xcm/pallet-xcm/src/mock.rs +++ b/xcm/pallet-xcm/src/mock.rs @@ -14,23 +14,28 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use frame_support::{construct_runtime, parameter_types, traits::Everything}; +use codec::Encode; +use frame_support::{ + construct_runtime, parameter_types, + traits::{Everything, Nothing}, + weights::Weight, +}; use polkadot_parachain::primitives::Id as ParaId; use polkadot_runtime_parachains::origin; use sp_core::H256; use sp_runtime::{testing::Header, traits::IdentityLookup, AccountId32}; pub use sp_std::{cell::RefCell, fmt::Debug, marker::PhantomData}; -use xcm::latest::prelude::*; +use xcm::prelude::*; use xcm_builder::{ AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, Case, ChildParachainAsNative, ChildParachainConvertsVia, ChildSystemParachainAsSuperuser, CurrencyAdapter as XcmCurrencyAdapter, FixedRateOfFungible, - FixedWeightBounds, IsConcrete, LocationInverter, SignedAccountId32AsNative, - SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, + FixedWeightBounds, IsConcrete, SignedAccountId32AsNative, SignedToAccountId32, + SovereignSignedViaLocation, TakeWeightCredit, }; use xcm_executor::XcmExecutor; -use crate as pallet_xcm; +use crate::{self as pallet_xcm, TestWeightInfo}; pub type AccountId = AccountId32; pub type Balance = u128; @@ -46,7 +51,6 @@ pub mod pallet_test_notifier { use xcm::latest::prelude::*; #[pallet::pallet] - #[pallet::generate_store(pub(super) trait Store)] pub struct Pallet(_); #[pallet::config] @@ -73,22 +77,28 @@ pub mod pallet_test_notifier { #[pallet::call] impl Pallet { - #[pallet::weight(1_000_000)] - pub fn prepare_new_query(origin: OriginFor) -> DispatchResult { + #[pallet::call_index(0)] + #[pallet::weight(Weight::from_parts(1_000_000, 1_000_000))] + pub fn prepare_new_query(origin: OriginFor, querier: MultiLocation) -> DispatchResult { let who = ensure_signed(origin)?; let id = who .using_encoded(|mut d| <[u8; 32]>::decode(&mut d)) .map_err(|_| Error::::BadAccountFormat)?; let qid = crate::Pallet::::new_query( - Junction::AccountId32 { network: Any, id }.into(), + Junction::AccountId32 { network: None, id }, 100u32.into(), + querier, ); Self::deposit_event(Event::::QueryPrepared(qid)); Ok(()) } - #[pallet::weight(1_000_000)] - pub fn prepare_new_notify_query(origin: OriginFor) -> DispatchResult { + #[pallet::call_index(1)] + #[pallet::weight(Weight::from_parts(1_000_000, 1_000_000))] + pub fn prepare_new_notify_query( + origin: OriginFor, + querier: MultiLocation, + ) -> DispatchResult { let who = ensure_signed(origin)?; let id = who .using_encoded(|mut d| <[u8; 32]>::decode(&mut d)) @@ -96,15 +106,17 @@ pub mod pallet_test_notifier { let call = Call::::notification_received { query_id: 0, response: Default::default() }; let qid = crate::Pallet::::new_notify_query( - Junction::AccountId32 { network: Any, id }.into(), + Junction::AccountId32 { network: None, id }, ::RuntimeCall::from(call), 100u32.into(), + querier, ); Self::deposit_event(Event::::NotifyQueryPrepared(qid)); Ok(()) } - #[pallet::weight(1_000_000)] + #[pallet::call_index(2)] + #[pallet::weight(Weight::from_parts(1_000_000, 1_000_000))] pub fn notification_received( origin: OriginFor, query_id: QueryId, @@ -147,23 +159,40 @@ pub(crate) fn take_sent_xcm() -> Vec<(MultiLocation, Xcm<()>)> { /// Sender that never returns error, always sends pub struct TestSendXcm; impl SendXcm for TestSendXcm { - fn send_xcm(dest: impl Into, msg: Xcm<()>) -> SendResult { - SENT_XCM.with(|q| q.borrow_mut().push((dest.into(), msg))); - Ok(()) + type Ticket = (MultiLocation, Xcm<()>); + fn validate( + dest: &mut Option, + msg: &mut Option>, + ) -> SendResult<(MultiLocation, Xcm<()>)> { + let pair = (dest.take().unwrap(), msg.take().unwrap()); + Ok((pair, MultiAssets::new())) + } + fn deliver(pair: (MultiLocation, Xcm<()>)) -> Result { + let hash = fake_message_hash(&pair.1); + SENT_XCM.with(|q| q.borrow_mut().push(pair)); + Ok(hash) } } /// Sender that returns error if `X8` junction and stops routing pub struct TestSendXcmErrX8; impl SendXcm for TestSendXcmErrX8 { - fn send_xcm(dest: impl Into, msg: Xcm<()>) -> SendResult { - let dest = dest.into(); + type Ticket = (MultiLocation, Xcm<()>); + fn validate( + dest: &mut Option, + msg: &mut Option>, + ) -> SendResult<(MultiLocation, Xcm<()>)> { + let (dest, msg) = (dest.take().unwrap(), msg.take().unwrap()); if dest.len() == 8 { Err(SendError::Transport("Destination location full")) } else { - SENT_XCM.with(|q| q.borrow_mut().push((dest, msg))); - Ok(()) + Ok(((dest, msg), MultiAssets::new())) } } + fn deliver(pair: (MultiLocation, Xcm<()>)) -> Result { + let hash = fake_message_hash(&pair.1); + SENT_XCM.with(|q| q.borrow_mut().push(pair)); + Ok(hash) + } } parameter_types! { @@ -216,9 +245,9 @@ impl pallet_balances::Config for Test { } parameter_types! { - pub const RelayLocation: MultiLocation = Here.into(); - pub const AnyNetwork: NetworkId = NetworkId::Any; - pub Ancestry: MultiLocation = Here.into(); + pub const RelayLocation: MultiLocation = Here.into_location(); + pub const AnyNetwork: Option = None; + pub UniversalLocation: InteriorMultiLocation = Here; pub UnitWeightCost: u64 = 1_000; } @@ -236,10 +265,11 @@ type LocalOriginConverter = ( ); parameter_types! { - pub const BaseXcmWeight: u64 = 1_000; - pub CurrencyPerSecond: (AssetId, u128) = (Concrete(RelayLocation::get()), 1); + pub const BaseXcmWeight: Weight = Weight::from_parts(1_000, 1_000); + pub CurrencyPerSecondPerByte: (AssetId, u128, u128) = (Concrete(RelayLocation::get()), 1, 1); pub TrustedAssets: (MultiAssetFilter, MultiLocation) = (All.into(), Here.into()); pub const MaxInstructions: u32 = 100; + pub const MaxAssetsIntoHolding: u32 = 64; } pub type Barrier = ( @@ -257,20 +287,34 @@ impl xcm_executor::Config for XcmConfig { type OriginConverter = LocalOriginConverter; type IsReserve = (); type IsTeleporter = Case; - type LocationInverter = LocationInverter; + type UniversalLocation = UniversalLocation; type Barrier = Barrier; type Weigher = FixedWeightBounds; - type Trader = FixedRateOfFungible; + type Trader = FixedRateOfFungible; type ResponseHandler = XcmPallet; type AssetTrap = XcmPallet; + type AssetLocker = (); + type AssetExchanger = (); type AssetClaims = XcmPallet; type SubscriptionService = XcmPallet; + type PalletInstancesInfo = AllPalletsWithSystem; + type MaxAssetsIntoHolding = MaxAssetsIntoHolding; + type FeeManager = (); + type MessageExporter = (); + type UniversalAliases = Nothing; + type CallDispatcher = RuntimeCall; + type SafeCallFilter = Everything; } pub type LocalOriginToLocation = SignedToAccountId32; parameter_types! { - pub static AdvertisedXcmVersion: pallet_xcm::XcmVersion = 2; + pub static AdvertisedXcmVersion: pallet_xcm::XcmVersion = 3; +} + +#[cfg(feature = "runtime-benchmarks")] +parameter_types! { + pub ReachableDest: Option = Some(Parachain(1000).into()); } impl pallet_xcm::Config for Test { @@ -283,11 +327,19 @@ impl pallet_xcm::Config for Test { type XcmTeleportFilter = Everything; type XcmReserveTransferFilter = Everything; type Weigher = FixedWeightBounds; - type LocationInverter = LocationInverter; + type UniversalLocation = UniversalLocation; type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; type AdvertisedXcmVersion = AdvertisedXcmVersion; + type TrustedLockers = (); + type SovereignAccountOf = AccountId32Aliases<(), AccountId32>; + type Currency = Balances; + type CurrencyMatcher = IsConcrete; + type MaxLockers = frame_support::traits::ConstU32<8>; + type WeightInfo = TestWeightInfo; + #[cfg(feature = "runtime-benchmarks")] + type ReachableDest = ReachableDest; } impl origin::Config for Test {} @@ -311,7 +363,10 @@ pub(crate) fn buy_execution(fees: impl Into) -> Instruction { BuyExecution { fees: fees.into(), weight_limit: Unlimited } } -pub(crate) fn buy_limited_execution(fees: impl Into, weight: u64) -> Instruction { +pub(crate) fn buy_limited_execution( + fees: impl Into, + weight: Weight, +) -> Instruction { use xcm::latest::prelude::*; BuyExecution { fees: fees.into(), weight_limit: Limited(weight) } } @@ -335,3 +390,7 @@ pub(crate) fn new_test_ext_with_balances( ext.execute_with(|| System::set_block_number(1)); ext } + +pub(crate) fn fake_message_hash(message: &Xcm) -> XcmHash { + message.using_encoded(sp_io::hashing::blake2_256) +} diff --git a/xcm/pallet-xcm/src/tests.rs b/xcm/pallet-xcm/src/tests.rs index 6da02cf10cf6..2700124976f1 100644 --- a/xcm/pallet-xcm/src/tests.rs +++ b/xcm/pallet-xcm/src/tests.rs @@ -25,7 +25,7 @@ use frame_support::{ }; use polkadot_parachain::primitives::Id as ParaId; use sp_runtime::traits::{AccountIdConversion, BlakeTwo256, Hash}; -use xcm::prelude::*; +use xcm::{latest::QueryResponseInfo, prelude::*}; use xcm_builder::AllowKnownQueryResponses; use xcm_executor::{traits::ShouldExecute, XcmExecutor}; @@ -41,7 +41,7 @@ fn report_outcome_notify_works() { (ALICE, INITIAL_BALANCE), (ParaId::from(PARA_ID).into_account_truncating(), INITIAL_BALANCE), ]; - let sender = AccountId32 { network: AnyNetwork::get(), id: ALICE.into() }.into(); + let sender: MultiLocation = AccountId32 { network: None, id: ALICE.into() }.into(); let mut message = Xcm(vec![TransferAsset { assets: (Here, SEND_AMOUNT).into(), beneficiary: sender.clone(), @@ -52,36 +52,47 @@ fn report_outcome_notify_works() { }; let notify = RuntimeCall::TestNotifier(call); new_test_ext_with_balances(balances).execute_with(|| { - XcmPallet::report_outcome_notify(&mut message, Parachain(PARA_ID).into(), notify, 100) - .unwrap(); + XcmPallet::report_outcome_notify( + &mut message, + Parachain(PARA_ID).into_location(), + notify, + 100, + ) + .unwrap(); assert_eq!( message, Xcm(vec![ - SetAppendix(Xcm(vec![ReportError { + SetAppendix(Xcm(vec![ReportError(QueryResponseInfo { + destination: Parent.into(), query_id: 0, - dest: Parent.into(), - max_response_weight: 1_000_000 - },])), + max_weight: Weight::from_parts(1_000_000, 1_000_000), + })])), TransferAsset { assets: (Here, SEND_AMOUNT).into(), beneficiary: sender.clone() }, ]) ); + let querier: MultiLocation = Here.into(); let status = QueryStatus::Pending { responder: MultiLocation::from(Parachain(PARA_ID)).into(), maybe_notify: Some((4, 2)), timeout: 100, + maybe_match_querier: Some(querier.clone().into()), }; assert_eq!(crate::Queries::::iter().collect::>(), vec![(0, status)]); + let message = Xcm(vec![QueryResponse { + query_id: 0, + response: Response::ExecutionResult(None), + max_weight: Weight::from_parts(1_000_000, 1_000_000), + querier: Some(querier), + }]); + let hash = fake_message_hash(&message); let r = XcmExecutor::::execute_xcm( - Parachain(PARA_ID).into(), - Xcm(vec![QueryResponse { - query_id: 0, - response: Response::ExecutionResult(None), - max_weight: 1_000_000, - }]), - 1_000_000_000, + Parachain(PARA_ID), + message, + hash, + Weight::from_parts(1_000_000_000, 1_000_000_000), ); - assert_eq!(r, Outcome::Complete(1_000)); + assert_eq!(r, Outcome::Complete(Weight::from_parts(1_000, 1_000))); assert_eq!( last_events(2), vec![ @@ -103,41 +114,147 @@ fn report_outcome_works() { (ALICE, INITIAL_BALANCE), (ParaId::from(PARA_ID).into_account_truncating(), INITIAL_BALANCE), ]; - let sender = AccountId32 { network: AnyNetwork::get(), id: ALICE.into() }.into(); + let sender: MultiLocation = AccountId32 { network: None, id: ALICE.into() }.into(); let mut message = Xcm(vec![TransferAsset { assets: (Here, SEND_AMOUNT).into(), beneficiary: sender.clone(), }]); new_test_ext_with_balances(balances).execute_with(|| { - XcmPallet::report_outcome(&mut message, Parachain(PARA_ID).into(), 100).unwrap(); + XcmPallet::report_outcome(&mut message, Parachain(PARA_ID).into_location(), 100).unwrap(); assert_eq!( message, Xcm(vec![ - SetAppendix(Xcm(vec![ReportError { + SetAppendix(Xcm(vec![ReportError(QueryResponseInfo { + destination: Parent.into(), query_id: 0, - dest: Parent.into(), - max_response_weight: 0 - },])), + max_weight: Weight::zero(), + })])), TransferAsset { assets: (Here, SEND_AMOUNT).into(), beneficiary: sender.clone() }, ]) ); + let querier: MultiLocation = Here.into(); let status = QueryStatus::Pending { responder: MultiLocation::from(Parachain(PARA_ID)).into(), maybe_notify: None, timeout: 100, + maybe_match_querier: Some(querier.clone().into()), }; assert_eq!(crate::Queries::::iter().collect::>(), vec![(0, status)]); + let message = Xcm(vec![QueryResponse { + query_id: 0, + response: Response::ExecutionResult(None), + max_weight: Weight::zero(), + querier: Some(querier), + }]); + let hash = fake_message_hash(&message); let r = XcmExecutor::::execute_xcm( - Parachain(PARA_ID).into(), - Xcm(vec![QueryResponse { - query_id: 0, - response: Response::ExecutionResult(None), - max_weight: 0, - }]), - 1_000_000_000, + Parachain(PARA_ID), + message, + hash, + Weight::from_parts(1_000_000_000, 1_000_000_000), ); - assert_eq!(r, Outcome::Complete(1_000)); + assert_eq!(r, Outcome::Complete(Weight::from_parts(1_000, 1_000))); + assert_eq!( + last_event(), + RuntimeEvent::XcmPallet(crate::Event::ResponseReady( + 0, + Response::ExecutionResult(None), + )) + ); + + let response = Some((Response::ExecutionResult(None), 1)); + assert_eq!(XcmPallet::take_response(0), response); + }); +} + +#[test] +fn custom_querier_works() { + let balances = vec![ + (ALICE, INITIAL_BALANCE), + (ParaId::from(PARA_ID).into_account_truncating(), INITIAL_BALANCE), + ]; + new_test_ext_with_balances(balances).execute_with(|| { + let querier: MultiLocation = + (Parent, AccountId32 { network: None, id: ALICE.into() }).into(); + + let r = TestNotifier::prepare_new_query(RuntimeOrigin::signed(ALICE), querier.clone()); + assert_eq!(r, Ok(())); + let status = QueryStatus::Pending { + responder: MultiLocation::from(AccountId32 { network: None, id: ALICE.into() }).into(), + maybe_notify: None, + timeout: 100, + maybe_match_querier: Some(querier.clone().into()), + }; + assert_eq!(crate::Queries::::iter().collect::>(), vec![(0, status)]); + + // Supplying no querier when one is expected will fail + let message = Xcm(vec![QueryResponse { + query_id: 0, + response: Response::ExecutionResult(None), + max_weight: Weight::zero(), + querier: None, + }]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm_in_credit( + AccountId32 { network: None, id: ALICE.into() }, + message, + hash, + Weight::from_parts(1_000_000_000, 1_000_000_000), + Weight::from_parts(1_000, 1_000), + ); + assert_eq!(r, Outcome::Complete(Weight::from_parts(1_000, 1_000))); + assert_eq!( + last_event(), + RuntimeEvent::XcmPallet(crate::Event::InvalidQuerier( + AccountId32 { network: None, id: ALICE.into() }.into(), + 0, + querier.clone(), + None, + )), + ); + + // Supplying the wrong querier will also fail + let message = Xcm(vec![QueryResponse { + query_id: 0, + response: Response::ExecutionResult(None), + max_weight: Weight::zero(), + querier: Some(MultiLocation::here()), + }]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm_in_credit( + AccountId32 { network: None, id: ALICE.into() }, + message, + hash, + Weight::from_parts(1_000_000_000, 1_000_000_000), + Weight::from_parts(1_000, 1_000), + ); + assert_eq!(r, Outcome::Complete(Weight::from_parts(1_000, 1_000))); + assert_eq!( + last_event(), + RuntimeEvent::XcmPallet(crate::Event::InvalidQuerier( + AccountId32 { network: None, id: ALICE.into() }.into(), + 0, + querier.clone(), + Some(MultiLocation::here()), + )), + ); + + // Multiple failures should not have changed the query state + let message = Xcm(vec![QueryResponse { + query_id: 0, + response: Response::ExecutionResult(None), + max_weight: Weight::zero(), + querier: Some(querier), + }]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + AccountId32 { network: None, id: ALICE.into() }, + message, + hash, + Weight::from_parts(1_000_000_000, 1_000_000_000), + ); + assert_eq!(r, Outcome::Complete(Weight::from_parts(1_000, 1_000))); assert_eq!( last_event(), RuntimeEvent::XcmPallet(crate::Event::ResponseReady( @@ -161,13 +278,12 @@ fn send_works() { (ParaId::from(PARA_ID).into_account_truncating(), INITIAL_BALANCE), ]; new_test_ext_with_balances(balances).execute_with(|| { - let sender: MultiLocation = - AccountId32 { network: AnyNetwork::get(), id: ALICE.into() }.into(); + let sender: MultiLocation = AccountId32 { network: None, id: ALICE.into() }.into(); let message = Xcm(vec![ ReserveAssetDeposited((Parent, SEND_AMOUNT).into()), ClearOrigin, buy_execution((Parent, SEND_AMOUNT)), - DepositAsset { assets: All.into(), max_assets: 1, beneficiary: sender.clone() }, + DepositAsset { assets: AllCounted(1).into(), beneficiary: sender.clone() }, ]); let versioned_dest = Box::new(RelayLocation::get().into()); let versioned_message = Box::new(VersionedXcm::from(message.clone())); @@ -205,11 +321,11 @@ fn send_fails_when_xcm_router_blocks() { ]; new_test_ext_with_balances(balances).execute_with(|| { let sender: MultiLocation = - Junction::AccountId32 { network: AnyNetwork::get(), id: ALICE.into() }.into(); + Junction::AccountId32 { network: None, id: ALICE.into() }.into(); let message = Xcm(vec![ ReserveAssetDeposited((Parent, SEND_AMOUNT).into()), buy_execution((Parent, SEND_AMOUNT)), - DepositAsset { assets: All.into(), max_assets: 1, beneficiary: sender.clone() }, + DepositAsset { assets: AllCounted(1).into(), beneficiary: sender.clone() }, ]); assert_noop!( XcmPallet::send( @@ -233,9 +349,9 @@ fn teleport_assets_works() { (ParaId::from(PARA_ID).into_account_truncating(), INITIAL_BALANCE), ]; new_test_ext_with_balances(balances).execute_with(|| { - let weight = 2 * BaseXcmWeight::get(); + let weight = BaseXcmWeight::get() * 2; assert_eq!(Balances::total_balance(&ALICE), INITIAL_BALANCE); - let dest: MultiLocation = AccountId32 { network: Any, id: BOB.into() }.into(); + let dest: MultiLocation = AccountId32 { network: None, id: BOB.into() }.into(); assert_ok!(XcmPallet::teleport_assets( RuntimeOrigin::signed(ALICE), Box::new(RelayLocation::get().into()), @@ -251,13 +367,13 @@ fn teleport_assets_works() { Xcm(vec![ ReceiveTeleportedAsset((Here, SEND_AMOUNT).into()), ClearOrigin, - buy_limited_execution((Here, SEND_AMOUNT), 4000), - DepositAsset { assets: All.into(), max_assets: 1, beneficiary: dest }, + buy_limited_execution((Here, SEND_AMOUNT), Weight::from_parts(4000, 4000)), + DepositAsset { assets: AllCounted(1).into(), beneficiary: dest }, ]), )] ); let versioned_sent = VersionedXcm::from(sent_xcm().into_iter().next().unwrap().1); - let _check_v0_ok: xcm::v0::Xcm<()> = versioned_sent.try_into().unwrap(); + let _check_v2_ok: xcm::v2::Xcm<()> = versioned_sent.try_into().unwrap(); assert_eq!( last_event(), RuntimeEvent::XcmPallet(crate::Event::Attempted(Outcome::Complete(weight))) @@ -276,16 +392,16 @@ fn limited_teleport_assets_works() { (ParaId::from(PARA_ID).into_account_truncating(), INITIAL_BALANCE), ]; new_test_ext_with_balances(balances).execute_with(|| { - let weight = 2 * BaseXcmWeight::get(); + let weight = BaseXcmWeight::get() * 2; assert_eq!(Balances::total_balance(&ALICE), INITIAL_BALANCE); - let dest: MultiLocation = AccountId32 { network: Any, id: BOB.into() }.into(); + let dest: MultiLocation = AccountId32 { network: None, id: BOB.into() }.into(); assert_ok!(XcmPallet::limited_teleport_assets( RuntimeOrigin::signed(ALICE), Box::new(RelayLocation::get().into()), Box::new(dest.clone().into()), Box::new((Here, SEND_AMOUNT).into()), 0, - WeightLimit::Limited(5000), + WeightLimit::Limited(Weight::from_parts(5000, 5000)), )); assert_eq!(Balances::total_balance(&ALICE), INITIAL_BALANCE - SEND_AMOUNT); assert_eq!( @@ -295,13 +411,13 @@ fn limited_teleport_assets_works() { Xcm(vec![ ReceiveTeleportedAsset((Here, SEND_AMOUNT).into()), ClearOrigin, - buy_limited_execution((Here, SEND_AMOUNT), 5000), - DepositAsset { assets: All.into(), max_assets: 1, beneficiary: dest }, + buy_limited_execution((Here, SEND_AMOUNT), Weight::from_parts(5000, 5000)), + DepositAsset { assets: AllCounted(1).into(), beneficiary: dest }, ]), )] ); let versioned_sent = VersionedXcm::from(sent_xcm().into_iter().next().unwrap().1); - let _check_v0_ok: xcm::v0::Xcm<()> = versioned_sent.try_into().unwrap(); + let _check_v2_ok: xcm::v2::Xcm<()> = versioned_sent.try_into().unwrap(); assert_eq!( last_event(), RuntimeEvent::XcmPallet(crate::Event::Attempted(Outcome::Complete(weight))) @@ -320,9 +436,9 @@ fn unlimited_teleport_assets_works() { (ParaId::from(PARA_ID).into_account_truncating(), INITIAL_BALANCE), ]; new_test_ext_with_balances(balances).execute_with(|| { - let weight = 2 * BaseXcmWeight::get(); + let weight = BaseXcmWeight::get() * 2; assert_eq!(Balances::total_balance(&ALICE), INITIAL_BALANCE); - let dest: MultiLocation = AccountId32 { network: Any, id: BOB.into() }.into(); + let dest: MultiLocation = AccountId32 { network: None, id: BOB.into() }.into(); assert_ok!(XcmPallet::limited_teleport_assets( RuntimeOrigin::signed(ALICE), Box::new(RelayLocation::get().into()), @@ -340,7 +456,7 @@ fn unlimited_teleport_assets_works() { ReceiveTeleportedAsset((Here, SEND_AMOUNT).into()), ClearOrigin, buy_execution((Here, SEND_AMOUNT)), - DepositAsset { assets: All.into(), max_assets: 1, beneficiary: dest }, + DepositAsset { assets: AllCounted(1).into(), beneficiary: dest }, ]), )] ); @@ -363,12 +479,11 @@ fn reserve_transfer_assets_works() { ]; new_test_ext_with_balances(balances).execute_with(|| { let weight = BaseXcmWeight::get(); - let dest: MultiLocation = - Junction::AccountId32 { network: NetworkId::Any, id: ALICE.into() }.into(); + let dest: MultiLocation = Junction::AccountId32 { network: None, id: ALICE.into() }.into(); assert_eq!(Balances::total_balance(&ALICE), INITIAL_BALANCE); assert_ok!(XcmPallet::reserve_transfer_assets( RuntimeOrigin::signed(ALICE), - Box::new(Parachain(PARA_ID).into().into()), + Box::new(Parachain(PARA_ID).into()), Box::new(dest.clone().into()), Box::new((Here, SEND_AMOUNT).into()), 0, @@ -385,13 +500,13 @@ fn reserve_transfer_assets_works() { Xcm(vec![ ReserveAssetDeposited((Parent, SEND_AMOUNT).into()), ClearOrigin, - buy_limited_execution((Parent, SEND_AMOUNT), 4000), - DepositAsset { assets: All.into(), max_assets: 1, beneficiary: dest }, + buy_limited_execution((Parent, SEND_AMOUNT), Weight::from_parts(4000, 4000)), + DepositAsset { assets: AllCounted(1).into(), beneficiary: dest }, ]), )] ); let versioned_sent = VersionedXcm::from(sent_xcm().into_iter().next().unwrap().1); - let _check_v0_ok: xcm::v0::Xcm<()> = versioned_sent.try_into().unwrap(); + let _check_v2_ok: xcm::v2::Xcm<()> = versioned_sent.try_into().unwrap(); assert_eq!( last_event(), RuntimeEvent::XcmPallet(crate::Event::Attempted(Outcome::Complete(weight))) @@ -411,16 +526,15 @@ fn limited_reserve_transfer_assets_works() { ]; new_test_ext_with_balances(balances).execute_with(|| { let weight = BaseXcmWeight::get(); - let dest: MultiLocation = - Junction::AccountId32 { network: NetworkId::Any, id: ALICE.into() }.into(); + let dest: MultiLocation = Junction::AccountId32 { network: None, id: ALICE.into() }.into(); assert_eq!(Balances::total_balance(&ALICE), INITIAL_BALANCE); assert_ok!(XcmPallet::limited_reserve_transfer_assets( RuntimeOrigin::signed(ALICE), - Box::new(Parachain(PARA_ID).into().into()), + Box::new(Parachain(PARA_ID).into()), Box::new(dest.clone().into()), Box::new((Here, SEND_AMOUNT).into()), 0, - WeightLimit::Limited(5000), + WeightLimit::Limited(Weight::from_parts(5000, 5000)), )); // Alice spent amount assert_eq!(Balances::free_balance(ALICE), INITIAL_BALANCE - SEND_AMOUNT); @@ -434,13 +548,13 @@ fn limited_reserve_transfer_assets_works() { Xcm(vec![ ReserveAssetDeposited((Parent, SEND_AMOUNT).into()), ClearOrigin, - buy_limited_execution((Parent, SEND_AMOUNT), 5000), - DepositAsset { assets: All.into(), max_assets: 1, beneficiary: dest }, + buy_limited_execution((Parent, SEND_AMOUNT), Weight::from_parts(5000, 5000)), + DepositAsset { assets: AllCounted(1).into(), beneficiary: dest }, ]), )] ); let versioned_sent = VersionedXcm::from(sent_xcm().into_iter().next().unwrap().1); - let _check_v0_ok: xcm::v0::Xcm<()> = versioned_sent.try_into().unwrap(); + let _check_v2_ok: xcm::v2::Xcm<()> = versioned_sent.try_into().unwrap(); assert_eq!( last_event(), RuntimeEvent::XcmPallet(crate::Event::Attempted(Outcome::Complete(weight))) @@ -460,12 +574,11 @@ fn unlimited_reserve_transfer_assets_works() { ]; new_test_ext_with_balances(balances).execute_with(|| { let weight = BaseXcmWeight::get(); - let dest: MultiLocation = - Junction::AccountId32 { network: NetworkId::Any, id: ALICE.into() }.into(); + let dest: MultiLocation = Junction::AccountId32 { network: None, id: ALICE.into() }.into(); assert_eq!(Balances::total_balance(&ALICE), INITIAL_BALANCE); assert_ok!(XcmPallet::limited_reserve_transfer_assets( RuntimeOrigin::signed(ALICE), - Box::new(Parachain(PARA_ID).into().into()), + Box::new(Parachain(PARA_ID).into()), Box::new(dest.clone().into()), Box::new((Here, SEND_AMOUNT).into()), 0, @@ -484,7 +597,7 @@ fn unlimited_reserve_transfer_assets_works() { ReserveAssetDeposited((Parent, SEND_AMOUNT).into()), ClearOrigin, buy_execution((Parent, SEND_AMOUNT)), - DepositAsset { assets: All.into(), max_assets: 1, beneficiary: dest }, + DepositAsset { assets: AllCounted(1).into(), beneficiary: dest }, ]), )] ); @@ -506,16 +619,15 @@ fn execute_withdraw_to_deposit_works() { (ParaId::from(PARA_ID).into_account_truncating(), INITIAL_BALANCE), ]; new_test_ext_with_balances(balances).execute_with(|| { - let weight = 3 * BaseXcmWeight::get(); - let dest: MultiLocation = - Junction::AccountId32 { network: NetworkId::Any, id: BOB.into() }.into(); + let weight = BaseXcmWeight::get() * 3; + let dest: MultiLocation = Junction::AccountId32 { network: None, id: BOB.into() }.into(); assert_eq!(Balances::total_balance(&ALICE), INITIAL_BALANCE); assert_ok!(XcmPallet::execute( RuntimeOrigin::signed(ALICE), Box::new(VersionedXcm::from(Xcm(vec![ WithdrawAsset((Here, SEND_AMOUNT).into()), buy_execution((Here, SEND_AMOUNT)), - DepositAsset { assets: All.into(), max_assets: 1, beneficiary: dest }, + DepositAsset { assets: AllCounted(1).into(), beneficiary: dest }, ]))), weight )); @@ -533,9 +645,8 @@ fn execute_withdraw_to_deposit_works() { fn trapped_assets_can_be_claimed() { let balances = vec![(ALICE, INITIAL_BALANCE), (BOB, INITIAL_BALANCE)]; new_test_ext_with_balances(balances).execute_with(|| { - let weight = 6 * BaseXcmWeight::get(); - let dest: MultiLocation = - Junction::AccountId32 { network: NetworkId::Any, id: BOB.into() }.into(); + let weight = BaseXcmWeight::get() * 6; + let dest: MultiLocation = Junction::AccountId32 { network: None, id: BOB.into() }.into(); assert_ok!(XcmPallet::execute( RuntimeOrigin::signed(ALICE), @@ -547,12 +658,12 @@ fn trapped_assets_can_be_claimed() { // This will make an error. Trap(0), // This would succeed, but we never get to it. - DepositAsset { assets: All.into(), max_assets: 1, beneficiary: dest.clone() }, + DepositAsset { assets: AllCounted(1).into(), beneficiary: dest.clone() }, ]))), weight )); let source: MultiLocation = - Junction::AccountId32 { network: NetworkId::Any, id: ALICE.into() }.into(); + Junction::AccountId32 { network: None, id: ALICE.into() }.into(); let trapped = AssetTraps::::iter().collect::>(); let vma = VersionedMultiAssets::from(MultiAssets::from((Here, SEND_AMOUNT))); let hash = BlakeTwo256::hash_of(&(source.clone(), vma.clone())); @@ -561,7 +672,7 @@ fn trapped_assets_can_be_claimed() { vec![ RuntimeEvent::XcmPallet(crate::Event::AssetsTrapped(hash.clone(), source, vma)), RuntimeEvent::XcmPallet(crate::Event::Attempted(Outcome::Complete( - 5 * BaseXcmWeight::get() + BaseXcmWeight::get() * 5 ))) ] ); @@ -571,13 +682,13 @@ fn trapped_assets_can_be_claimed() { let expected = vec![(hash, 1u32)]; assert_eq!(trapped, expected); - let weight = 3 * BaseXcmWeight::get(); + let weight = BaseXcmWeight::get() * 3; assert_ok!(XcmPallet::execute( RuntimeOrigin::signed(ALICE), Box::new(VersionedXcm::from(Xcm(vec![ ClaimAsset { assets: (Here, SEND_AMOUNT).into(), ticket: Here.into() }, buy_execution((Here, SEND_AMOUNT)), - DepositAsset { assets: All.into(), max_assets: 1, beneficiary: dest.clone() }, + DepositAsset { assets: AllCounted(1).into(), beneficiary: dest.clone() }, ]))), weight )); @@ -586,13 +697,13 @@ fn trapped_assets_can_be_claimed() { assert_eq!(Balances::total_balance(&BOB), INITIAL_BALANCE + SEND_AMOUNT); assert_eq!(AssetTraps::::iter().collect::>(), vec![]); - let weight = 3 * BaseXcmWeight::get(); + let weight = BaseXcmWeight::get() * 3; assert_ok!(XcmPallet::execute( RuntimeOrigin::signed(ALICE), Box::new(VersionedXcm::from(Xcm(vec![ ClaimAsset { assets: (Here, SEND_AMOUNT).into(), ticket: Here.into() }, buy_execution((Here, SEND_AMOUNT)), - DepositAsset { assets: All.into(), max_assets: 1, beneficiary: dest }, + DepositAsset { assets: AllCounted(1).into(), beneficiary: dest }, ]))), weight )); @@ -609,15 +720,15 @@ fn trapped_assets_can_be_claimed() { #[test] fn fake_latest_versioned_multilocation_works() { use codec::Encode; - let remote = Parachain(1000).into(); + let remote: MultiLocation = Parachain(1000).into(); let versioned_remote = LatestVersionedMultiLocation(&remote); - assert_eq!(versioned_remote.encode(), VersionedMultiLocation::from(remote.clone()).encode()); + assert_eq!(versioned_remote.encode(), remote.into_versioned().encode()); } #[test] fn basic_subscription_works() { new_test_ext_with_balances(vec![]).execute_with(|| { - let remote = Parachain(1000).into(); + let remote: MultiLocation = Parachain(1000).into(); assert_ok!(XcmPallet::force_subscribe_version_notify( RuntimeOrigin::root(), Box::new(remote.clone().into()), @@ -632,27 +743,32 @@ fn basic_subscription_works() { ); assert_eq!( VersionNotifiers::::iter().collect::>(), - vec![(2, remote.clone().into(), 0)] + vec![(XCM_VERSION, remote.clone().into(), 0)] ); assert_eq!( take_sent_xcm(), vec![( remote.clone(), - Xcm(vec![SubscribeVersion { query_id: 0, max_response_weight: 0 }]), + Xcm(vec![SubscribeVersion { query_id: 0, max_response_weight: Weight::zero() }]), ),] ); let weight = BaseXcmWeight::get(); let mut message = Xcm::<()>(vec![ - // Remote supports XCM v1 - QueryResponse { query_id: 0, max_weight: 0, response: Response::Version(1) }, + // Remote supports XCM v2 + QueryResponse { + query_id: 0, + max_weight: Weight::zero(), + response: Response::Version(1), + querier: None, + }, ]); assert_ok!(AllowKnownQueryResponses::::should_execute( &remote, - &mut message, + message.inner_mut(), weight, - &mut 0 + &mut Weight::zero(), )); }); } @@ -660,13 +776,13 @@ fn basic_subscription_works() { #[test] fn subscriptions_increment_id() { new_test_ext_with_balances(vec![]).execute_with(|| { - let remote = Parachain(1000).into(); + let remote: MultiLocation = Parachain(1000).into(); assert_ok!(XcmPallet::force_subscribe_version_notify( RuntimeOrigin::root(), Box::new(remote.clone().into()), )); - let remote2 = Parachain(1001).into(); + let remote2: MultiLocation = Parachain(1001).into(); assert_ok!(XcmPallet::force_subscribe_version_notify( RuntimeOrigin::root(), Box::new(remote2.clone().into()), @@ -677,11 +793,17 @@ fn subscriptions_increment_id() { vec![ ( remote.clone(), - Xcm(vec![SubscribeVersion { query_id: 0, max_response_weight: 0 }]), + Xcm(vec![SubscribeVersion { + query_id: 0, + max_response_weight: Weight::zero() + }]), ), ( remote2.clone(), - Xcm(vec![SubscribeVersion { query_id: 1, max_response_weight: 0 }]), + Xcm(vec![SubscribeVersion { + query_id: 1, + max_response_weight: Weight::zero() + }]), ), ] ); @@ -691,7 +813,7 @@ fn subscriptions_increment_id() { #[test] fn double_subscription_fails() { new_test_ext_with_balances(vec![]).execute_with(|| { - let remote = Parachain(1000).into(); + let remote: MultiLocation = Parachain(1000).into(); assert_ok!(XcmPallet::force_subscribe_version_notify( RuntimeOrigin::root(), Box::new(remote.clone().into()), @@ -709,7 +831,7 @@ fn double_subscription_fails() { #[test] fn unsubscribe_works() { new_test_ext_with_balances(vec![]).execute_with(|| { - let remote = Parachain(1000).into(); + let remote: MultiLocation = Parachain(1000).into(); assert_ok!(XcmPallet::force_subscribe_version_notify( RuntimeOrigin::root(), Box::new(remote.clone().into()), @@ -731,7 +853,10 @@ fn unsubscribe_works() { vec![ ( remote.clone(), - Xcm(vec![SubscribeVersion { query_id: 0, max_response_weight: 0 }]), + Xcm(vec![SubscribeVersion { + query_id: 0, + max_response_weight: Weight::zero() + }]), ), (remote.clone(), Xcm(vec![UnsubscribeVersion]),), ] @@ -745,13 +870,20 @@ fn subscription_side_works() { new_test_ext_with_balances(vec![]).execute_with(|| { AdvertisedXcmVersion::set(1); - let remote = Parachain(1000).into(); + let remote: MultiLocation = Parachain(1000).into(); let weight = BaseXcmWeight::get(); - let message = Xcm(vec![SubscribeVersion { query_id: 0, max_response_weight: 0 }]); - let r = XcmExecutor::::execute_xcm(remote.clone(), message, weight); + let message = + Xcm(vec![SubscribeVersion { query_id: 0, max_response_weight: Weight::zero() }]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm(remote.clone(), message, hash, weight); assert_eq!(r, Outcome::Complete(weight)); - let instr = QueryResponse { query_id: 0, max_weight: 0, response: Response::Version(1) }; + let instr = QueryResponse { + query_id: 0, + max_weight: Weight::zero(), + response: Response::Version(1), + querier: None, + }; assert_eq!(take_sent_xcm(), vec![(remote.clone(), Xcm(vec![instr]))]); // A runtime upgrade which doesn't alter the version sends no notifications. @@ -765,7 +897,12 @@ fn subscription_side_works() { // A runtime upgrade which alters the version does send notifications. XcmPallet::on_runtime_upgrade(); XcmPallet::on_initialize(2); - let instr = QueryResponse { query_id: 0, max_weight: 0, response: Response::Version(2) }; + let instr = QueryResponse { + query_id: 0, + max_weight: Weight::zero(), + response: Response::Version(2), + querier: None, + }; assert_eq!(take_sent_xcm(), vec![(remote.clone(), Xcm(vec![instr]))]); }); } @@ -775,25 +912,31 @@ fn subscription_side_upgrades_work_with_notify() { new_test_ext_with_balances(vec![]).execute_with(|| { AdvertisedXcmVersion::set(1); - // An entry from a previous runtime with v0 XCM. - let v0_location = xcm::v0::MultiLocation::X1(xcm::v0::Junction::Parachain(1000)); - let v0_location = VersionedMultiLocation::from(v0_location); - VersionNotifyTargets::::insert(0, v0_location, (69, 0, 1)); - let v1_location = Parachain(1001).into().versioned(); - VersionNotifyTargets::::insert(1, v1_location, (70, 0, 1)); - let v2_location = Parachain(1002).into().versioned(); - VersionNotifyTargets::::insert(2, v2_location, (71, 0, 1)); + // An entry from a previous runtime with v2 XCM. + let v2_location = VersionedMultiLocation::V2(xcm::v2::Junction::Parachain(1001).into()); + VersionNotifyTargets::::insert(1, v2_location, (70, Weight::zero(), 2)); + let v3_location = Parachain(1003).into_versioned(); + VersionNotifyTargets::::insert(3, v3_location, (72, Weight::zero(), 2)); // New version. - AdvertisedXcmVersion::set(2); + AdvertisedXcmVersion::set(3); // A runtime upgrade which alters the version does send notifications. XcmPallet::on_runtime_upgrade(); XcmPallet::on_initialize(1); - let instr0 = QueryResponse { query_id: 69, max_weight: 0, response: Response::Version(2) }; - let instr1 = QueryResponse { query_id: 70, max_weight: 0, response: Response::Version(2) }; - let instr2 = QueryResponse { query_id: 71, max_weight: 0, response: Response::Version(2) }; + let instr1 = QueryResponse { + query_id: 70, + max_weight: Weight::zero(), + response: Response::Version(3), + querier: None, + }; + let instr3 = QueryResponse { + query_id: 72, + max_weight: Weight::zero(), + response: Response::Version(3), + querier: None, + }; let mut sent = take_sent_xcm(); sent.sort_by_key(|k| match (k.1).0[0] { QueryResponse { query_id: q, .. } => q, @@ -802,20 +945,18 @@ fn subscription_side_upgrades_work_with_notify() { assert_eq!( sent, vec![ - (Parachain(1000).into(), Xcm(vec![instr0])), (Parachain(1001).into(), Xcm(vec![instr1])), - (Parachain(1002).into(), Xcm(vec![instr2])), + (Parachain(1003).into(), Xcm(vec![instr3])), ] ); let mut contents = VersionNotifyTargets::::iter().collect::>(); - contents.sort_by_key(|k| k.2); + contents.sort_by_key(|k| k.2 .0); assert_eq!( contents, vec![ - (2, Parachain(1000).into().versioned(), (69, 0, 2)), - (2, Parachain(1001).into().versioned(), (70, 0, 2)), - (2, Parachain(1002).into().versioned(), (71, 0, 2)), + (XCM_VERSION, Parachain(1001).into_versioned(), (70, Weight::zero(), 3)), + (XCM_VERSION, Parachain(1003).into_versioned(), (72, Weight::zero(), 3)), ] ); }); @@ -824,27 +965,23 @@ fn subscription_side_upgrades_work_with_notify() { #[test] fn subscription_side_upgrades_work_without_notify() { new_test_ext_with_balances(vec![]).execute_with(|| { - // An entry from a previous runtime with v0 XCM. - let v0_location = xcm::v0::MultiLocation::X1(xcm::v0::Junction::Parachain(1000)); - let v0_location = VersionedMultiLocation::from(v0_location); - VersionNotifyTargets::::insert(0, v0_location, (69, 0, 2)); - let v1_location = Parachain(1001).into().versioned(); - VersionNotifyTargets::::insert(1, v1_location, (70, 0, 2)); - let v2_location = Parachain(1002).into().versioned(); - VersionNotifyTargets::::insert(2, v2_location, (71, 0, 2)); + // An entry from a previous runtime with v2 XCM. + let v2_location = VersionedMultiLocation::V2(xcm::v2::Junction::Parachain(1001).into()); + VersionNotifyTargets::::insert(1, v2_location, (70, Weight::zero(), 2)); + let v3_location = Parachain(1003).into_versioned(); + VersionNotifyTargets::::insert(3, v3_location, (72, Weight::zero(), 2)); // A runtime upgrade which alters the version does send notifications. XcmPallet::on_runtime_upgrade(); XcmPallet::on_initialize(1); let mut contents = VersionNotifyTargets::::iter().collect::>(); - contents.sort_by_key(|k| k.2); + contents.sort_by_key(|k| k.2 .0); assert_eq!( contents, vec![ - (2, Parachain(1000).into().versioned(), (69, 0, 2)), - (2, Parachain(1001).into().versioned(), (70, 0, 2)), - (2, Parachain(1002).into().versioned(), (71, 0, 2)), + (XCM_VERSION, Parachain(1001).into_versioned(), (70, Weight::zero(), 3)), + (XCM_VERSION, Parachain(1003).into_versioned(), (72, Weight::zero(), 3)), ] ); }); @@ -853,7 +990,7 @@ fn subscription_side_upgrades_work_without_notify() { #[test] fn subscriber_side_subscription_works() { new_test_ext_with_balances(vec![]).execute_with(|| { - let remote = Parachain(1000).into(); + let remote: MultiLocation = Parachain(1000).into(); assert_ok!(XcmPallet::force_subscribe_version_notify( RuntimeOrigin::root(), Box::new(remote.clone().into()), @@ -864,22 +1001,34 @@ fn subscriber_side_subscription_works() { let weight = BaseXcmWeight::get(); let message = Xcm(vec![ - // Remote supports XCM v1 - QueryResponse { query_id: 0, max_weight: 0, response: Response::Version(1) }, + // Remote supports XCM v2 + QueryResponse { + query_id: 0, + max_weight: Weight::zero(), + response: Response::Version(1), + querier: None, + }, ]); - let r = XcmExecutor::::execute_xcm(remote.clone(), message, weight); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm(remote.clone(), message, hash, weight); assert_eq!(r, Outcome::Complete(weight)); assert_eq!(take_sent_xcm(), vec![]); - // This message cannot be sent to a v1 remote. - let v2_msg = Xcm::<()>(vec![Trap(0)]); + // This message cannot be sent to a v2 remote. + let v2_msg = xcm::v2::Xcm::<()>(vec![xcm::v2::Instruction::Trap(0)]); assert_eq!(XcmPallet::wrap_version(&remote, v2_msg.clone()), Err(())); let message = Xcm(vec![ // Remote upgraded to XCM v2 - QueryResponse { query_id: 0, max_weight: 0, response: Response::Version(2) }, + QueryResponse { + query_id: 0, + max_weight: Weight::zero(), + response: Response::Version(2), + querier: None, + }, ]); - let r = XcmExecutor::::execute_xcm(remote.clone(), message, weight); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm(remote.clone(), message, hash, weight); assert_eq!(r, Outcome::Complete(weight)); // This message can now be sent to remote as it's v2. @@ -894,77 +1043,99 @@ fn subscriber_side_subscription_works() { #[test] fn auto_subscription_works() { new_test_ext_with_balances(vec![]).execute_with(|| { - let remote0 = Parachain(1000).into(); - let remote1 = Parachain(1001).into(); + let remote_v2: MultiLocation = Parachain(1000).into(); + let remote_v3: MultiLocation = Parachain(1001).into(); - assert_ok!(XcmPallet::force_default_xcm_version(RuntimeOrigin::root(), Some(1))); + assert_ok!(XcmPallet::force_default_xcm_version(RuntimeOrigin::root(), Some(2))); // Wrapping a version for a destination we don't know elicits a subscription. - let v1_msg = xcm::v1::Xcm::<()>::QueryResponse { - query_id: 1, - response: xcm::v1::Response::Assets(vec![].into()), - }; - let v2_msg = Xcm::<()>(vec![Trap(0)]); + let msg_v2 = xcm::v2::Xcm::<()>(vec![xcm::v2::Instruction::Trap(0)]); + let msg_v3 = xcm::v3::Xcm::<()>(vec![xcm::v3::Instruction::ClearTopic]); assert_eq!( - XcmPallet::wrap_version(&remote0, v1_msg.clone()), - Ok(VersionedXcm::from(v1_msg.clone())), + XcmPallet::wrap_version(&remote_v2, msg_v2.clone()), + Ok(VersionedXcm::from(msg_v2.clone())), ); - assert_eq!(XcmPallet::wrap_version(&remote0, v2_msg.clone()), Err(())); - let expected = vec![(remote0.clone().into(), 2)]; + assert_eq!(XcmPallet::wrap_version(&remote_v2, msg_v3.clone()), Err(())); + + let expected = vec![(remote_v2.clone().into(), 2)]; assert_eq!(VersionDiscoveryQueue::::get().into_inner(), expected); - assert_eq!(XcmPallet::wrap_version(&remote0, v2_msg.clone()), Err(())); - assert_eq!(XcmPallet::wrap_version(&remote1, v2_msg.clone()), Err(())); - let expected = vec![(remote0.clone().into(), 3), (remote1.clone().into(), 1)]; + assert_eq!( + XcmPallet::wrap_version(&remote_v3, msg_v2.clone()), + Ok(VersionedXcm::from(msg_v2.clone())), + ); + assert_eq!(XcmPallet::wrap_version(&remote_v3, msg_v3.clone()), Err(())); + + let expected = vec![(remote_v2.clone().into(), 2), (remote_v3.clone().into(), 2)]; assert_eq!(VersionDiscoveryQueue::::get().into_inner(), expected); XcmPallet::on_initialize(1); assert_eq!( take_sent_xcm(), vec![( - remote0.clone(), - Xcm(vec![SubscribeVersion { query_id: 0, max_response_weight: 0 }]), + remote_v3.clone(), + Xcm(vec![SubscribeVersion { query_id: 0, max_response_weight: Weight::zero() }]), )] ); - // Assume remote0 is working ok and XCM version 2. + // Assume remote_v3 is working ok and XCM version 3. let weight = BaseXcmWeight::get(); let message = Xcm(vec![ - // Remote supports XCM v2 - QueryResponse { query_id: 0, max_weight: 0, response: Response::Version(2) }, + // Remote supports XCM v3 + QueryResponse { + query_id: 0, + max_weight: Weight::zero(), + response: Response::Version(3), + querier: None, + }, ]); - let r = XcmExecutor::::execute_xcm(remote0.clone(), message, weight); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm(remote_v3.clone(), message, hash, weight); assert_eq!(r, Outcome::Complete(weight)); - // This message can now be sent to remote0 as it's v2. + // V2 messages can be sent to remote_v3 under XCM v3. assert_eq!( - XcmPallet::wrap_version(&remote0, v2_msg.clone()), - Ok(VersionedXcm::from(v2_msg.clone())) + XcmPallet::wrap_version(&remote_v3, msg_v2.clone()), + Ok(VersionedXcm::from(msg_v2.clone()).into_version(3).unwrap()), + ); + // This message can now be sent to remote_v3 as it's v3. + assert_eq!( + XcmPallet::wrap_version(&remote_v3, msg_v3.clone()), + Ok(VersionedXcm::from(msg_v3.clone())) ); XcmPallet::on_initialize(2); assert_eq!( take_sent_xcm(), vec![( - remote1.clone(), - Xcm(vec![SubscribeVersion { query_id: 1, max_response_weight: 0 }]), + remote_v2.clone(), + Xcm(vec![SubscribeVersion { query_id: 1, max_response_weight: Weight::zero() }]), )] ); - // Assume remote1 is working ok and XCM version 1. + // Assume remote_v2 is working ok and XCM version 2. let weight = BaseXcmWeight::get(); let message = Xcm(vec![ - // Remote supports XCM v1 - QueryResponse { query_id: 1, max_weight: 0, response: Response::Version(1) }, + // Remote supports XCM v2 + QueryResponse { + query_id: 1, + max_weight: Weight::zero(), + response: Response::Version(2), + querier: None, + }, ]); - let r = XcmExecutor::::execute_xcm(remote1.clone(), message, weight); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm(remote_v2.clone(), message, hash, weight); assert_eq!(r, Outcome::Complete(weight)); - // v2 messages cannot be sent to remote1... - assert_eq!(XcmPallet::wrap_version(&remote1, v1_msg.clone()), Ok(VersionedXcm::V1(v1_msg))); - assert_eq!(XcmPallet::wrap_version(&remote1, v2_msg.clone()), Err(())); + // v3 messages cannot be sent to remote_v2... + assert_eq!( + XcmPallet::wrap_version(&remote_v2, msg_v2.clone()), + Ok(VersionedXcm::V2(msg_v2)) + ); + assert_eq!(XcmPallet::wrap_version(&remote_v2, msg_v3.clone()), Err(())); }) } @@ -974,16 +1145,15 @@ fn subscription_side_upgrades_work_with_multistage_notify() { AdvertisedXcmVersion::set(1); // An entry from a previous runtime with v0 XCM. - let v0_location = xcm::v0::MultiLocation::X1(xcm::v0::Junction::Parachain(1000)); - let v0_location = VersionedMultiLocation::from(v0_location); - VersionNotifyTargets::::insert(0, v0_location, (69, 0, 1)); - let v1_location = Parachain(1001).into().versioned(); - VersionNotifyTargets::::insert(1, v1_location, (70, 0, 1)); - let v2_location = Parachain(1002).into().versioned(); - VersionNotifyTargets::::insert(2, v2_location, (71, 0, 1)); + let v2_location = VersionedMultiLocation::V2(xcm::v2::Junction::Parachain(1001).into()); + VersionNotifyTargets::::insert(1, v2_location, (70, Weight::zero(), 1)); + let v2_location = VersionedMultiLocation::V2(xcm::v2::Junction::Parachain(1002).into()); + VersionNotifyTargets::::insert(2, v2_location, (71, Weight::zero(), 1)); + let v3_location = Parachain(1003).into_versioned(); + VersionNotifyTargets::::insert(3, v3_location, (72, Weight::zero(), 1)); // New version. - AdvertisedXcmVersion::set(2); + AdvertisedXcmVersion::set(3); // A runtime upgrade which alters the version does send notifications. XcmPallet::on_runtime_upgrade(); @@ -996,9 +1166,24 @@ fn subscription_side_upgrades_work_with_multistage_notify() { } assert_eq!(counter, 4); - let instr0 = QueryResponse { query_id: 69, max_weight: 0, response: Response::Version(2) }; - let instr1 = QueryResponse { query_id: 70, max_weight: 0, response: Response::Version(2) }; - let instr2 = QueryResponse { query_id: 71, max_weight: 0, response: Response::Version(2) }; + let instr1 = QueryResponse { + query_id: 70, + max_weight: Weight::zero(), + response: Response::Version(3), + querier: None, + }; + let instr2 = QueryResponse { + query_id: 71, + max_weight: Weight::zero(), + response: Response::Version(3), + querier: None, + }; + let instr3 = QueryResponse { + query_id: 72, + max_weight: Weight::zero(), + response: Response::Version(3), + querier: None, + }; let mut sent = take_sent_xcm(); sent.sort_by_key(|k| match (k.1).0[0] { QueryResponse { query_id: q, .. } => q, @@ -1007,20 +1192,20 @@ fn subscription_side_upgrades_work_with_multistage_notify() { assert_eq!( sent, vec![ - (Parachain(1000).into(), Xcm(vec![instr0])), (Parachain(1001).into(), Xcm(vec![instr1])), (Parachain(1002).into(), Xcm(vec![instr2])), + (Parachain(1003).into(), Xcm(vec![instr3])), ] ); let mut contents = VersionNotifyTargets::::iter().collect::>(); - contents.sort_by_key(|k| k.2); + contents.sort_by_key(|k| k.2 .0); assert_eq!( contents, vec![ - (2, Parachain(1000).into().versioned(), (69, 0, 2)), - (2, Parachain(1001).into().versioned(), (70, 0, 2)), - (2, Parachain(1002).into().versioned(), (71, 0, 2)), + (XCM_VERSION, Parachain(1001).into_versioned(), (70, Weight::zero(), 3)), + (XCM_VERSION, Parachain(1002).into_versioned(), (71, Weight::zero(), 3)), + (XCM_VERSION, Parachain(1003).into_versioned(), (72, Weight::zero(), 3)), ] ); }); diff --git a/xcm/procedural/src/lib.rs b/xcm/procedural/src/lib.rs index 8e43569b64d7..36181ccbd1fb 100644 --- a/xcm/procedural/src/lib.rs +++ b/xcm/procedural/src/lib.rs @@ -18,25 +18,32 @@ use proc_macro::TokenStream; -mod v0; -mod v1; +mod v2; +mod v3; mod weight_info; #[proc_macro] -pub fn impl_conversion_functions_for_multilocation_v0(input: TokenStream) -> TokenStream { - v0::multilocation::generate_conversion_functions(input) +pub fn impl_conversion_functions_for_multilocation_v2(input: TokenStream) -> TokenStream { + v2::multilocation::generate_conversion_functions(input) .unwrap_or_else(syn::Error::into_compile_error) .into() } +#[proc_macro_derive(XcmWeightInfoTrait)] +pub fn derive_xcm_weight_info(item: TokenStream) -> TokenStream { + weight_info::derive(item) +} + #[proc_macro] -pub fn impl_conversion_functions_for_multilocation_v1(input: TokenStream) -> TokenStream { - v1::multilocation::generate_conversion_functions(input) +pub fn impl_conversion_functions_for_multilocation_v3(input: TokenStream) -> TokenStream { + v3::multilocation::generate_conversion_functions(input) .unwrap_or_else(syn::Error::into_compile_error) .into() } -#[proc_macro_derive(XcmWeightInfoTrait)] -pub fn derive_xcm_weight_info(item: TokenStream) -> TokenStream { - weight_info::derive(item) +#[proc_macro] +pub fn impl_conversion_functions_for_junctions_v3(input: TokenStream) -> TokenStream { + v3::junctions::generate_conversion_functions(input) + .unwrap_or_else(syn::Error::into_compile_error) + .into() } diff --git a/xcm/procedural/src/v0.rs b/xcm/procedural/src/v0.rs deleted file mode 100644 index 7774df4e9f8f..000000000000 --- a/xcm/procedural/src/v0.rs +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2021 Parity Technologies (UK) Ltd. -// This file is part of Polkadot. - -// Polkadot is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Polkadot 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 Polkadot. If not, see . - -pub mod multilocation; diff --git a/xcm/procedural/src/v0/multilocation.rs b/xcm/procedural/src/v0/multilocation.rs deleted file mode 100644 index 82db5cce4ee5..000000000000 --- a/xcm/procedural/src/v0/multilocation.rs +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright 2021 Parity Technologies (UK) Ltd. -// This file is part of Polkadot. - -// Polkadot is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Polkadot 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 Polkadot. If not, see . - -use proc_macro2::{Span, TokenStream}; -use quote::{format_ident, quote}; - -pub fn generate_conversion_functions(input: proc_macro::TokenStream) -> syn::Result { - if !input.is_empty() { - return Err(syn::Error::new(Span::call_site(), "No arguments expected")) - } - - let from_tuples = generate_conversion_from_tuples(); - let from_v1 = generate_conversion_from_v1(); - - Ok(quote! { - #from_tuples - #from_v1 - }) -} - -fn generate_conversion_from_tuples() -> TokenStream { - let from_tuples = (0..8usize) - .map(|num_junctions| { - let junctions = - (0..=num_junctions).map(|_| format_ident!("Junction")).collect::>(); - let idents = (0..=num_junctions).map(|i| format_ident!("j{}", i)).collect::>(); - let variant = &format_ident!("X{}", num_junctions + 1); - let array_size = num_junctions + 1; - - quote! { - impl From<( #(#junctions,)* )> for MultiLocation { - fn from( ( #(#idents,)* ): ( #(#junctions,)* ) ) -> Self { - MultiLocation::#variant( #(#idents),* ) - } - } - - impl From<[Junction; #array_size]> for MultiLocation { - fn from(j: [Junction; #array_size]) -> Self { - let [#(#idents),*] = j; - MultiLocation::#variant( #(#idents),* ) - } - } - } - }) - .collect::(); - - quote! { - impl From<()> for MultiLocation { - fn from(_: ()) -> Self { - MultiLocation::Null - } - } - - impl From for MultiLocation { - fn from(x: Junction) -> Self { - MultiLocation::X1(x) - } - } - - impl From<[Junction; 0]> for MultiLocation { - fn from(_: [Junction; 0]) -> Self { - MultiLocation::Null - } - } - - #from_tuples - } -} - -fn generate_conversion_from_v1() -> TokenStream { - let match_variants = (0..8u8) - .map(|cur_num| { - let variant = format_ident!("X{}", cur_num + 1); - let idents = (1..=cur_num).map(|i| format_ident!("j{}", i)).collect::>(); - - quote! { - crate::v1::Junctions::#variant( j0 #(, #idents)* ) => res - .pushed_with(Junction::from(j0)) - #( .and_then(|res| res.pushed_with(Junction::from(#idents))) )* - .map_err(|_| ()), - } - }) - .collect::(); - - quote! { - impl TryFrom for MultiLocation { - type Error = (); - fn try_from(v1: crate::v1::MultiLocation) -> core::result::Result { - let mut res = MultiLocation::Null; - - for _ in 0..v1.parents { - res.push(Junction::Parent)?; - } - - match v1.interior { - crate::v1::Junctions::Here => Ok(res), - #match_variants - } - } - } - } -} diff --git a/xcm/procedural/src/v1/multilocation.rs b/xcm/procedural/src/v1/multilocation.rs deleted file mode 100644 index 0d8ab5452b2e..000000000000 --- a/xcm/procedural/src/v1/multilocation.rs +++ /dev/null @@ -1,206 +0,0 @@ -// Copyright 2021 Parity Technologies (UK) Ltd. -// This file is part of Polkadot. - -// Polkadot is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Polkadot 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 Polkadot. If not, see . - -use proc_macro2::{Span, TokenStream}; -use quote::{format_ident, quote}; -use syn::{Result, Token}; - -pub fn generate_conversion_functions(input: proc_macro::TokenStream) -> Result { - if !input.is_empty() { - return Err(syn::Error::new(Span::call_site(), "No arguments expected")) - } - - // Support up to 8 Parents in a tuple, assuming that most use cases don't go past 8 parents. - let from_tuples = generate_conversion_from_tuples(8); - let from_v0 = generate_conversion_from_v0(); - - Ok(quote! { - #from_tuples - #from_v0 - }) -} - -fn generate_conversion_from_tuples(max_parents: u8) -> TokenStream { - let mut from_tuples = (0..8usize) - .map(|num_junctions| { - let junctions = - (0..=num_junctions).map(|_| format_ident!("Junction")).collect::>(); - let idents = (0..=num_junctions).map(|i| format_ident!("j{}", i)).collect::>(); - let variant = &format_ident!("X{}", num_junctions + 1); - let array_size = num_junctions + 1; - - let mut from_tuple = quote! { - impl From<( #(#junctions,)* )> for MultiLocation { - fn from( ( #(#idents,)* ): ( #(#junctions,)* ) ) -> Self { - MultiLocation { parents: 0, interior: Junctions::#variant( #(#idents),* ) } - } - } - - impl From<(u8, #(#junctions),*)> for MultiLocation { - fn from( ( parents, #(#idents),* ): (u8, #(#junctions),* ) ) -> Self { - MultiLocation { parents, interior: Junctions::#variant( #(#idents),* ) } - } - } - - impl From<(Ancestor, #(#junctions),*)> for MultiLocation { - fn from( ( Ancestor(parents), #(#idents),* ): (Ancestor, #(#junctions),* ) ) -> Self { - MultiLocation { parents, interior: Junctions::#variant( #(#idents),* ) } - } - } - - impl From<[Junction; #array_size]> for MultiLocation { - fn from(j: [Junction; #array_size]) -> Self { - let [#(#idents),*] = j; - MultiLocation { parents: 0, interior: Junctions::#variant( #(#idents),* ) } - } - } - }; - - let from_parent_tuples = (1..=max_parents).map(|cur_parents| { - let parents = (0..cur_parents).map(|_| format_ident!("Parent")).collect::>(); - let underscores = - (0..cur_parents).map(|_| Token![_](Span::call_site())).collect::>(); - - quote! { - impl From<( #(#parents,)* #(#junctions),* )> for MultiLocation { - fn from( (#(#underscores,)* #(#idents),*): ( #(#parents,)* #(#junctions),* ) ) -> Self { - MultiLocation { parents: #cur_parents, interior: Junctions::#variant( #(#idents),* ) } - } - } - } - }); - - from_tuple.extend(from_parent_tuples); - from_tuple - }) - .collect::(); - - let from_parent_junctions_tuples = (1..=max_parents).map(|cur_parents| { - let parents = (0..cur_parents).map(|_| format_ident!("Parent")).collect::>(); - let underscores = - (0..cur_parents).map(|_| Token![_](Span::call_site())).collect::>(); - - quote! { - impl From<( #(#parents,)* Junctions )> for MultiLocation { - fn from( (#(#underscores,)* junctions): ( #(#parents,)* Junctions ) ) -> Self { - MultiLocation { parents: #cur_parents, interior: junctions } - } - } - } - }); - from_tuples.extend(from_parent_junctions_tuples); - - quote! { - impl From for MultiLocation { - fn from(junctions: Junctions) -> Self { - MultiLocation { parents: 0, interior: junctions } - } - } - - impl From<(u8, Junctions)> for MultiLocation { - fn from((parents, interior): (u8, Junctions)) -> Self { - MultiLocation { parents, interior } - } - } - - impl From<(Ancestor, Junctions)> for MultiLocation { - fn from((Ancestor(parents), interior): (Ancestor, Junctions)) -> Self { - MultiLocation { parents, interior } - } - } - - impl From<()> for MultiLocation { - fn from(_: ()) -> Self { - MultiLocation { parents: 0, interior: Junctions::Here } - } - } - - impl From<(u8,)> for MultiLocation { - fn from((parents,): (u8,)) -> Self { - MultiLocation { parents, interior: Junctions::Here } - } - } - - impl From for MultiLocation { - fn from(x: Junction) -> Self { - MultiLocation { parents: 0, interior: Junctions::X1(x) } - } - } - - impl From<[Junction; 0]> for MultiLocation { - fn from(_: [Junction; 0]) -> Self { - MultiLocation { parents: 0, interior: Junctions::Here } - } - } - - #from_tuples - } -} - -fn generate_conversion_from_v0() -> TokenStream { - let match_variants = (0..8u8) - .map(|cur_num| { - let num_ancestors = cur_num + 1; - let variant = format_ident!("X{}", num_ancestors); - let idents = (0..=cur_num).map(|i| format_ident!("j{}", i)).collect::>(); - - let intermediate_match_arms = (1..num_ancestors) - .rev() - .map(|parent_count| { - let parent_idents = - (0..parent_count).map(|j| format_ident!("j{}", j)).collect::>(); - let junction_idents = (parent_count..num_ancestors) - .map(|j| format_ident!("j{}", j)) - .collect::>(); - let junction_variant = format_ident!("X{}", num_ancestors - parent_count); - - quote! { - crate::v0::MultiLocation::#variant( #(#idents),* ) - if #( #parent_idents.is_parent() )&&* => - Ok(MultiLocation { - parents: #parent_count, - interior: #junction_variant( #( TryInto::try_into(#junction_idents)? ),* ), - }), - } - }) - .collect::(); - - quote! { - crate::v0::MultiLocation::#variant( #(#idents),* ) - if #( #idents.is_parent() )&&* => - Ok(MultiLocation::ancestor(#num_ancestors)), - #intermediate_match_arms - crate::v0::MultiLocation::#variant( #(#idents),* ) => - Ok( #variant( #( TryInto::try_into(#idents)? ),* ).into() ), - } - }) - .collect::(); - - quote! { - impl core::convert::TryFrom for MultiLocation { - type Error = (); - fn try_from(mut v0: crate::v0::MultiLocation) -> core::result::Result { - use Junctions::*; - - v0.canonicalize(); - match v0 { - crate::v0::MultiLocation::Null => Ok(Here.into()), - #match_variants - } - } - } - } -} diff --git a/xcm/procedural/src/v2.rs b/xcm/procedural/src/v2.rs new file mode 100644 index 000000000000..6fbeeefeb128 --- /dev/null +++ b/xcm/procedural/src/v2.rs @@ -0,0 +1,183 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +pub mod multilocation { + use proc_macro2::{Span, TokenStream}; + use quote::{format_ident, quote}; + use syn::{Result, Token}; + + pub fn generate_conversion_functions(input: proc_macro::TokenStream) -> Result { + if !input.is_empty() { + return Err(syn::Error::new(Span::call_site(), "No arguments expected")) + } + + // Support up to 8 Parents in a tuple, assuming that most use cases don't go past 8 parents. + let from_tuples = generate_conversion_from_tuples(8); + let from_v3 = generate_conversion_from_v3(); + + Ok(quote! { + #from_tuples + #from_v3 + }) + } + + fn generate_conversion_from_tuples(max_parents: u8) -> TokenStream { + let mut from_tuples = (0..8usize) + .map(|num_junctions| { + let junctions = + (0..=num_junctions).map(|_| format_ident!("Junction")).collect::>(); + let idents = + (0..=num_junctions).map(|i| format_ident!("j{}", i)).collect::>(); + let variant = &format_ident!("X{}", num_junctions + 1); + let array_size = num_junctions + 1; + + let mut from_tuple = quote! { + impl From<( #(#junctions,)* )> for MultiLocation { + fn from( ( #(#idents,)* ): ( #(#junctions,)* ) ) -> Self { + MultiLocation { parents: 0, interior: Junctions::#variant( #(#idents),* ) } + } + } + + impl From<(u8, #(#junctions),*)> for MultiLocation { + fn from( ( parents, #(#idents),* ): (u8, #(#junctions),* ) ) -> Self { + MultiLocation { parents, interior: Junctions::#variant( #(#idents),* ) } + } + } + + impl From<(Ancestor, #(#junctions),*)> for MultiLocation { + fn from( ( Ancestor(parents), #(#idents),* ): (Ancestor, #(#junctions),* ) ) -> Self { + MultiLocation { parents, interior: Junctions::#variant( #(#idents),* ) } + } + } + + impl From<[Junction; #array_size]> for MultiLocation { + fn from(j: [Junction; #array_size]) -> Self { + let [#(#idents),*] = j; + MultiLocation { parents: 0, interior: Junctions::#variant( #(#idents),* ) } + } + } + }; + + let from_parent_tuples = (1..=max_parents).map(|cur_parents| { + let parents = + (0..cur_parents).map(|_| format_ident!("Parent")).collect::>(); + let underscores = + (0..cur_parents).map(|_| Token![_](Span::call_site())).collect::>(); + + quote! { + impl From<( #(#parents,)* #(#junctions),* )> for MultiLocation { + fn from( (#(#underscores,)* #(#idents),*): ( #(#parents,)* #(#junctions),* ) ) -> Self { + MultiLocation { parents: #cur_parents, interior: Junctions::#variant( #(#idents),* ) } + } + } + } + }); + + from_tuple.extend(from_parent_tuples); + from_tuple + }) + .collect::(); + + let from_parent_junctions_tuples = (1..=max_parents).map(|cur_parents| { + let parents = (0..cur_parents).map(|_| format_ident!("Parent")).collect::>(); + let underscores = + (0..cur_parents).map(|_| Token![_](Span::call_site())).collect::>(); + + quote! { + impl From<( #(#parents,)* Junctions )> for MultiLocation { + fn from( (#(#underscores,)* junctions): ( #(#parents,)* Junctions ) ) -> Self { + MultiLocation { parents: #cur_parents, interior: junctions } + } + } + } + }); + from_tuples.extend(from_parent_junctions_tuples); + + quote! { + impl From for MultiLocation { + fn from(junctions: Junctions) -> Self { + MultiLocation { parents: 0, interior: junctions } + } + } + + impl From<(u8, Junctions)> for MultiLocation { + fn from((parents, interior): (u8, Junctions)) -> Self { + MultiLocation { parents, interior } + } + } + + impl From<(Ancestor, Junctions)> for MultiLocation { + fn from((Ancestor(parents), interior): (Ancestor, Junctions)) -> Self { + MultiLocation { parents, interior } + } + } + + impl From<()> for MultiLocation { + fn from(_: ()) -> Self { + MultiLocation { parents: 0, interior: Junctions::Here } + } + } + + impl From<(u8,)> for MultiLocation { + fn from((parents,): (u8,)) -> Self { + MultiLocation { parents, interior: Junctions::Here } + } + } + + impl From for MultiLocation { + fn from(x: Junction) -> Self { + MultiLocation { parents: 0, interior: Junctions::X1(x) } + } + } + + impl From<[Junction; 0]> for MultiLocation { + fn from(_: [Junction; 0]) -> Self { + MultiLocation { parents: 0, interior: Junctions::Here } + } + } + + #from_tuples + } + } + + fn generate_conversion_from_v3() -> TokenStream { + let match_variants = (0..8u8) + .map(|cur_num| { + let num_ancestors = cur_num + 1; + let variant = format_ident!("X{}", num_ancestors); + let idents = (0..=cur_num).map(|i| format_ident!("j{}", i)).collect::>(); + + quote! { + crate::v3::Junctions::#variant( #(#idents),* ) => + #variant( #( core::convert::TryInto::try_into(#idents)? ),* ), + } + }) + .collect::(); + + quote! { + impl core::convert::TryFrom for Junctions { + type Error = (); + fn try_from(mut new: crate::v3::Junctions) -> core::result::Result { + use Junctions::*; + Ok(match new { + crate::v3::Junctions::Here => Here, + #match_variants + }) + } + } + } + } +} diff --git a/xcm/procedural/src/v3.rs b/xcm/procedural/src/v3.rs new file mode 100644 index 000000000000..0897481d0949 --- /dev/null +++ b/xcm/procedural/src/v3.rs @@ -0,0 +1,186 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +use proc_macro2::{Span, TokenStream}; +use quote::{format_ident, quote}; +use syn::{Result, Token}; + +const MAX_JUNCTIONS: usize = 8; + +pub mod multilocation { + use super::*; + + pub fn generate_conversion_functions(input: proc_macro::TokenStream) -> Result { + if !input.is_empty() { + return Err(syn::Error::new(Span::call_site(), "No arguments expected")) + } + + let from_tuples = generate_conversion_from_tuples(8, 8); + + Ok(quote! { + #from_tuples + }) + } + + fn generate_conversion_from_tuples(max_junctions: usize, max_parents: usize) -> TokenStream { + let mut from_tuples = (0..=max_junctions) + .map(|num_junctions| { + let types = (0..num_junctions).map(|i| format_ident!("J{}", i)).collect::>(); + let idents = + (0..num_junctions).map(|i| format_ident!("j{}", i)).collect::>(); + let array_size = num_junctions; + let interior = if num_junctions == 0 { + quote!(Junctions::Here) + } else { + let variant = format_ident!("X{}", num_junctions); + quote! { + Junctions::#variant( #(#idents .into()),* ) + } + }; + + let mut from_tuple = quote! { + impl< #(#types : Into,)* > From<( Ancestor, #( #types ),* )> for MultiLocation { + fn from( ( Ancestor(parents), #(#idents),* ): ( Ancestor, #( #types ),* ) ) -> Self { + MultiLocation { parents, interior: #interior } + } + } + + impl From<[Junction; #array_size]> for MultiLocation { + fn from(j: [Junction; #array_size]) -> Self { + let [#(#idents),*] = j; + MultiLocation { parents: 0, interior: #interior } + } + } + }; + + let from_parent_tuples = (0..=max_parents).map(|cur_parents| { + let parents = + (0..cur_parents).map(|_| format_ident!("Parent")).collect::>(); + let underscores = + (0..cur_parents).map(|_| Token![_](Span::call_site())).collect::>(); + + quote! { + impl< #(#types : Into,)* > From<( #( #parents , )* #( #types , )* )> for MultiLocation { + fn from( ( #(#underscores,)* #(#idents,)* ): ( #(#parents,)* #(#types,)* ) ) -> Self { + Self { parents: #cur_parents as u8, interior: #interior } + } + } + } + }); + + from_tuple.extend(from_parent_tuples); + from_tuple + }) + .collect::(); + + let from_parent_junctions_tuples = (0..=max_parents).map(|cur_parents| { + let parents = (0..cur_parents).map(|_| format_ident!("Parent")).collect::>(); + let underscores = + (0..cur_parents).map(|_| Token![_](Span::call_site())).collect::>(); + + quote! { + impl From<( #(#parents,)* Junctions )> for MultiLocation { + fn from( (#(#underscores,)* junctions): ( #(#parents,)* Junctions ) ) -> Self { + MultiLocation { parents: #cur_parents as u8, interior: junctions } + } + } + } + }); + from_tuples.extend(from_parent_junctions_tuples); + + quote! { + impl From<(Ancestor, Junctions)> for MultiLocation { + fn from((Ancestor(parents), interior): (Ancestor, Junctions)) -> Self { + MultiLocation { parents, interior } + } + } + + impl From for MultiLocation { + fn from(x: Junction) -> Self { + MultiLocation { parents: 0, interior: Junctions::X1(x) } + } + } + + #from_tuples + } + } +} + +pub mod junctions { + use super::*; + + pub fn generate_conversion_functions(input: proc_macro::TokenStream) -> Result { + if !input.is_empty() { + return Err(syn::Error::new(Span::call_site(), "No arguments expected")) + } + + // Support up to 8 Parents in a tuple, assuming that most use cases don't go past 8 parents. + let from_v2 = generate_conversion_from_v2(MAX_JUNCTIONS); + let from_tuples = generate_conversion_from_tuples(MAX_JUNCTIONS); + + Ok(quote! { + #from_v2 + #from_tuples + }) + } + + fn generate_conversion_from_tuples(max_junctions: usize) -> TokenStream { + (1..=max_junctions) + .map(|num_junctions| { + let idents = + (0..num_junctions).map(|i| format_ident!("j{}", i)).collect::>(); + let types = (0..num_junctions).map(|i| format_ident!("J{}", i)).collect::>(); + let variant = &format_ident!("X{}", num_junctions); + + quote! { + impl<#(#types : Into,)*> From<( #(#types,)* )> for Junctions { + fn from( ( #(#idents,)* ): ( #(#types,)* ) ) -> Self { + Self::#variant( #(#idents .into()),* ) + } + } + } + }) + .collect() + } + + fn generate_conversion_from_v2(max_junctions: usize) -> TokenStream { + let match_variants = (0..max_junctions) + .map(|cur_num| { + let num_ancestors = cur_num + 1; + let variant = format_ident!("X{}", num_ancestors); + let idents = (0..=cur_num).map(|i| format_ident!("j{}", i)).collect::>(); + + quote! { + crate::v2::Junctions::#variant( #(#idents),* ) => + #variant( #( core::convert::TryInto::try_into(#idents)? ),* ), + } + }) + .collect::(); + + quote! { + impl core::convert::TryFrom for Junctions { + type Error = (); + fn try_from(mut old: crate::v2::Junctions) -> core::result::Result { + use Junctions::*; + Ok(match old { + crate::v2::Junctions::Here => Here, + #match_variants + }) + } + } + } + } +} diff --git a/xcm/src/lib.rs b/xcm/src/lib.rs index 6396f2228e33..0f919b892179 100644 --- a/xcm/src/lib.rs +++ b/xcm/src/lib.rs @@ -23,28 +23,117 @@ #![no_std] extern crate alloc; -use alloc::vec::Vec; +use core::ops::ControlFlow; use derivative::Derivative; -use parity_scale_codec::{Decode, Encode, Error as CodecError, Input}; +use parity_scale_codec::{Decode, Encode, Error as CodecError, Input, MaxEncodedLen}; use scale_info::TypeInfo; -pub mod v0; -pub mod v1; pub mod v2; +pub mod v3; + +pub mod lts { + pub use super::v3::*; +} pub mod latest { - pub use super::v2::*; + pub use super::v3::*; } mod double_encoded; pub use double_encoded::DoubleEncoded; +#[cfg(test)] +mod tests; + /// Maximum nesting level for XCM decoding. pub const MAX_XCM_DECODE_DEPTH: u32 = 8; /// A version of XCM. pub type Version = u32; +/// Creates an instruction matcher from an XCM. Since XCM versions differ, we need to make a trait +/// here to unify the interfaces among them. +pub trait CreateMatcher { + /// The concrete matcher type. + type Matcher; + + /// Method that creates and returns the matcher type from `Self`. + fn matcher(self) -> Self::Matcher; +} + +/// API that allows to pattern-match against anything that is contained within an XCM. +/// +/// The intended usage of the matcher API is to enable the ability to chain successive methods of +/// this trait together, along with the ? operator for the purpose of facilitating the writing, +/// maintenance and auditability of XCM barriers. +/// +/// Example: +/// ```rust +/// use xcm::{ +/// v3::{Instruction, Matcher}, +/// CreateMatcher, MatchXcm, +/// }; +/// +/// let mut msg = [Instruction::<()>::ClearOrigin]; +/// let res = msg +/// .matcher() +/// .assert_remaining_insts(1)? +/// .match_next_inst(|inst| match inst { +/// Instruction::<()>::ClearOrigin => Ok(()), +/// _ => Err(()), +/// }); +/// assert!(res.is_ok()); +/// +/// Ok::<(), ()>(()) +/// ``` +pub trait MatchXcm { + /// The concrete instruction type. Necessary to specify as it changes between XCM versions. + type Inst; + /// The `MultiLocation` type. Necessary to specify as it changes between XCM versions. + type Loc; + /// The error type to throw when errors happen during matching. + type Error; + + /// Returns success if the number of instructions that still have not been iterated over + /// equals `n`, otherwise returns an error. + fn assert_remaining_insts(self, n: usize) -> Result + where + Self: Sized; + + /// Accepts a closure `f` that contains an argument signifying the next instruction to be + /// iterated over. The closure can then be used to check whether the instruction matches a + /// given condition, and can also be used to mutate the fields of an instruction. + /// + /// The closure `f` returns success when the instruction passes the condition, otherwise it + /// returns an error, which will ultimately be returned by this function. + fn match_next_inst(self, f: F) -> Result + where + Self: Sized, + F: FnMut(&mut Self::Inst) -> Result<(), Self::Error>; + + /// Attempts to continuously iterate through the instructions while applying `f` to each of + /// them, until either the last instruction or `cond` returns false. + /// + /// If `f` returns an error, then iteration halts and the function returns that error. + /// Otherwise, `f` returns a `ControlFlow` which signifies whether the iteration breaks or + /// continues. + fn match_next_inst_while(self, cond: C, f: F) -> Result + where + Self: Sized, + C: Fn(&Self::Inst) -> bool, + F: FnMut(&mut Self::Inst) -> Result, Self::Error>; + + /// Iterate instructions forward until `cond` returns false. When there are no more instructions + /// to be read, an error is returned. + fn skip_inst_while(self, cond: C) -> Result + where + Self: Sized, + C: Fn(&Self::Inst) -> bool, + { + Self::match_next_inst_while(self, cond, |_| Ok(ControlFlow::Continue(()))) + } +} + #[derive(Clone, Eq, PartialEq, Debug)] pub enum Unsupported {} impl Encode for Unsupported {} @@ -65,241 +154,216 @@ pub trait IntoVersion: Sized { } } -/// A single `MultiLocation` value, together with its version code. -#[derive(Derivative, Encode, Decode, TypeInfo)] -#[derivative(Clone(bound = ""), Eq(bound = ""), PartialEq(bound = ""), Debug(bound = ""))] -#[codec(encode_bound())] -#[codec(decode_bound())] -pub enum VersionedMultiLocation { - V0(v0::MultiLocation), - V1(v1::MultiLocation), -} - -impl IntoVersion for VersionedMultiLocation { - fn into_version(self, n: Version) -> Result { - Ok(match n { - 0 => Self::V0(self.try_into()?), - 1 | 2 => Self::V1(self.try_into()?), - _ => return Err(()), - }) - } -} - -impl From for VersionedMultiLocation { - fn from(x: v0::MultiLocation) -> Self { - VersionedMultiLocation::V0(x) - } -} - -impl> From for VersionedMultiLocation { - fn from(x: T) -> Self { - VersionedMultiLocation::V1(x.into()) - } -} - -impl TryFrom for v0::MultiLocation { - type Error = (); - fn try_from(x: VersionedMultiLocation) -> Result { - use VersionedMultiLocation::*; - match x { - V0(x) => Ok(x), - V1(x) => x.try_into(), +pub trait TryAs { + fn try_as(&self) -> Result<&T, ()>; +} + +macro_rules! versioned_type { + ($(#[$attr:meta])* pub enum $n:ident { + $(#[$index3:meta])+ + V3($v3:ty), + }) => { + #[derive(Derivative, Encode, Decode, TypeInfo)] + #[derivative( + Clone(bound = ""), + Eq(bound = ""), + PartialEq(bound = ""), + Debug(bound = "") + )] + #[codec(encode_bound())] + #[codec(decode_bound())] + $(#[$attr])* + pub enum $n { + $(#[$index3])* + V3($v3), } - } -} - -impl TryFrom for v1::MultiLocation { - type Error = (); - fn try_from(x: VersionedMultiLocation) -> Result { - use VersionedMultiLocation::*; - match x { - V0(x) => x.try_into(), - V1(x) => Ok(x), + impl $n { + pub fn try_as(&self) -> Result<&T, ()> where Self: TryAs { + >::try_as(&self) + } } - } -} - -/// A single `Response` value, together with its version code. -#[derive(Derivative, Encode, Decode, TypeInfo)] -#[derivative(Clone(bound = ""), Eq(bound = ""), PartialEq(bound = ""), Debug(bound = ""))] -#[codec(encode_bound())] -#[codec(decode_bound())] -pub enum VersionedResponse { - V0(v0::Response), - V1(v1::Response), - V2(v2::Response), -} - -impl IntoVersion for VersionedResponse { - fn into_version(self, n: Version) -> Result { - Ok(match n { - 0 => Self::V0(self.try_into()?), - 1 => Self::V1(self.try_into()?), - 2 => Self::V2(self.try_into()?), - _ => return Err(()), - }) - } -} - -impl From for VersionedResponse { - fn from(x: v0::Response) -> Self { - VersionedResponse::V0(x) - } -} - -impl From for VersionedResponse { - fn from(x: v1::Response) -> Self { - VersionedResponse::V1(x) - } -} - -impl> From for VersionedResponse { - fn from(x: T) -> Self { - VersionedResponse::V2(x.into()) - } -} - -impl TryFrom for v0::Response { - type Error = (); - fn try_from(x: VersionedResponse) -> Result { - use VersionedResponse::*; - match x { - V0(x) => Ok(x), - V1(x) => x.try_into(), - V2(x) => VersionedResponse::V1(x.try_into()?).try_into(), + impl TryAs<$v3> for $n { + fn try_as(&self) -> Result<&$v3, ()> { + match &self { + Self::V3(ref x) => Ok(x), + } + } } - } -} - -impl TryFrom for v1::Response { - type Error = (); - fn try_from(x: VersionedResponse) -> Result { - use VersionedResponse::*; - match x { - V0(x) => x.try_into(), - V1(x) => Ok(x), - V2(x) => x.try_into(), + impl IntoVersion for $n { + fn into_version(self, n: Version) -> Result { + Ok(match n { + 3 => Self::V3(self.try_into()?), + _ => return Err(()), + }) + } } - } -} - -impl TryFrom for v2::Response { - type Error = (); - fn try_from(x: VersionedResponse) -> Result { - use VersionedResponse::*; - match x { - V0(x) => VersionedResponse::V1(x.try_into()?).try_into(), - V1(x) => x.try_into(), - V2(x) => Ok(x), + impl> From for $n { + fn from(x: T) -> Self { + $n::V3(x.into()) + } } - } -} - -/// A single `MultiAsset` value, together with its version code. -#[derive(Derivative, Encode, Decode, TypeInfo)] -#[derivative(Clone(bound = ""), Eq(bound = ""), PartialEq(bound = ""), Debug(bound = ""))] -#[codec(encode_bound())] -#[codec(decode_bound())] -pub enum VersionedMultiAsset { - V0(v0::MultiAsset), - V1(v1::MultiAsset), -} - -impl IntoVersion for VersionedMultiAsset { - fn into_version(self, n: Version) -> Result { - Ok(match n { - 0 => Self::V0(self.try_into()?), - 1 | 2 => Self::V1(self.try_into()?), - _ => return Err(()), - }) - } -} - -impl From for VersionedMultiAsset { - fn from(x: v0::MultiAsset) -> Self { - VersionedMultiAsset::V0(x) - } -} - -impl> From for VersionedMultiAsset { - fn from(x: T) -> Self { - VersionedMultiAsset::V1(x.into()) - } -} - -impl TryFrom for v0::MultiAsset { - type Error = (); - fn try_from(x: VersionedMultiAsset) -> Result { - use VersionedMultiAsset::*; - match x { - V0(x) => Ok(x), - V1(x) => x.try_into(), + impl TryFrom<$n> for $v3 { + type Error = (); + fn try_from(x: $n) -> Result { + use $n::*; + match x { + V3(x) => Ok(x), + } + } } - } -} + impl MaxEncodedLen for $n { + fn max_encoded_len() -> usize { + <$v3>::max_encoded_len() + } + } + }; -impl TryFrom for v1::MultiAsset { - type Error = (); - fn try_from(x: VersionedMultiAsset) -> Result { - use VersionedMultiAsset::*; - match x { - V0(x) => x.try_into(), - V1(x) => Ok(x), + ($(#[$attr:meta])* pub enum $n:ident { + $(#[$index2:meta])+ + V2($v2:ty), + $(#[$index3:meta])+ + V3($v3:ty), + }) => { + #[derive(Derivative, Encode, Decode, TypeInfo)] + #[derivative( + Clone(bound = ""), + Eq(bound = ""), + PartialEq(bound = ""), + Debug(bound = "") + )] + #[codec(encode_bound())] + #[codec(decode_bound())] + $(#[$attr])* + pub enum $n { + $(#[$index2])* + V2($v2), + $(#[$index3])* + V3($v3), } - } + impl $n { + pub fn try_as(&self) -> Result<&T, ()> where Self: TryAs { + >::try_as(&self) + } + } + impl TryAs<$v2> for $n { + fn try_as(&self) -> Result<&$v2, ()> { + match &self { + Self::V2(ref x) => Ok(x), + _ => Err(()), + } + } + } + impl TryAs<$v3> for $n { + fn try_as(&self) -> Result<&$v3, ()> { + match &self { + Self::V3(ref x) => Ok(x), + _ => Err(()), + } + } + } + impl IntoVersion for $n { + fn into_version(self, n: Version) -> Result { + Ok(match n { + 1 | 2 => Self::V2(self.try_into()?), + 3 => Self::V3(self.try_into()?), + _ => return Err(()), + }) + } + } + impl From<$v2> for $n { + fn from(x: $v2) -> Self { + $n::V2(x) + } + } + impl> From for $n { + fn from(x: T) -> Self { + $n::V3(x.into()) + } + } + impl TryFrom<$n> for $v2 { + type Error = (); + fn try_from(x: $n) -> Result { + use $n::*; + match x { + V2(x) => Ok(x), + V3(x) => x.try_into(), + } + } + } + impl TryFrom<$n> for $v3 { + type Error = (); + fn try_from(x: $n) -> Result { + use $n::*; + match x { + V2(x) => x.try_into(), + V3(x) => Ok(x), + } + } + } + impl MaxEncodedLen for $n { + fn max_encoded_len() -> usize { + <$v3>::max_encoded_len() + } + } + }; } -/// A single `MultiAssets` value, together with its version code. -#[derive(Derivative, Encode, Decode, TypeInfo)] -#[derivative(Clone(bound = ""), Eq(bound = ""), PartialEq(bound = ""), Debug(bound = ""))] -#[codec(encode_bound())] -#[codec(decode_bound())] -pub enum VersionedMultiAssets { - V0(Vec), - V1(v1::MultiAssets), +versioned_type! { + /// A single version's `Response` value, together with its version code. + pub enum VersionedAssetId { + #[codec(index = 3)] + V3(v3::AssetId), + } } -impl IntoVersion for VersionedMultiAssets { - fn into_version(self, n: Version) -> Result { - Ok(match n { - 0 => Self::V0(self.try_into()?), - 1 | 2 => Self::V1(self.try_into()?), - _ => return Err(()), - }) +versioned_type! { + /// A single version's `Response` value, together with its version code. + pub enum VersionedResponse { + #[codec(index = 2)] + V2(v2::Response), + #[codec(index = 3)] + V3(v3::Response), } } -impl From> for VersionedMultiAssets { - fn from(x: Vec) -> Self { - VersionedMultiAssets::V0(x) +versioned_type! { + /// A single `MultiLocation` value, together with its version code. + #[derive(Ord, PartialOrd)] + pub enum VersionedMultiLocation { + #[codec(index = 1)] // v2 is same as v1 and therefore re-using the v1 index + V2(v2::MultiLocation), + #[codec(index = 3)] + V3(v3::MultiLocation), } } -impl> From for VersionedMultiAssets { - fn from(x: T) -> Self { - VersionedMultiAssets::V1(x.into()) +versioned_type! { + /// A single `InteriorMultiLocation` value, together with its version code. + pub enum VersionedInteriorMultiLocation { + #[codec(index = 2)] // while this is same as v1::Junctions, VersionedInteriorMultiLocation is introduced in v3 + V2(v2::InteriorMultiLocation), + #[codec(index = 3)] + V3(v3::InteriorMultiLocation), } } -impl TryFrom for Vec { - type Error = (); - fn try_from(x: VersionedMultiAssets) -> Result { - use VersionedMultiAssets::*; - match x { - V0(x) => Ok(x), - V1(x) => x.try_into(), - } +versioned_type! { + /// A single `MultiAsset` value, together with its version code. + pub enum VersionedMultiAsset { + #[codec(index = 1)] // v2 is same as v1 and therefore re-using the v1 index + V2(v2::MultiAsset), + #[codec(index = 3)] + V3(v3::MultiAsset), } } -impl TryFrom for v1::MultiAssets { - type Error = (); - fn try_from(x: VersionedMultiAssets) -> Result { - use VersionedMultiAssets::*; - match x { - V0(x) => x.try_into(), - V1(x) => Ok(x), - } +versioned_type! { + /// A single `MultiAssets` value, together with its version code. + pub enum VersionedMultiAssets { + #[codec(index = 1)] // v2 is same as v1 and therefore re-using the v1 index + V2(v2::MultiAssets), + #[codec(index = 3)] + V3(v3::MultiAssets), } } @@ -310,72 +374,52 @@ impl TryFrom for v1::MultiAssets { #[codec(decode_bound())] #[scale_info(bounds(), skip_type_params(RuntimeCall))] pub enum VersionedXcm { - V0(v0::Xcm), - V1(v1::Xcm), + #[codec(index = 2)] V2(v2::Xcm), + #[codec(index = 3)] + V3(v3::Xcm), } impl IntoVersion for VersionedXcm { fn into_version(self, n: Version) -> Result { Ok(match n { - 0 => Self::V0(self.try_into()?), - 1 => Self::V1(self.try_into()?), 2 => Self::V2(self.try_into()?), + 3 => Self::V3(self.try_into()?), _ => return Err(()), }) } } -impl From> for VersionedXcm { - fn from(x: v0::Xcm) -> Self { - VersionedXcm::V0(x) - } -} - -impl From> for VersionedXcm { - fn from(x: v1::Xcm) -> Self { - VersionedXcm::V1(x) - } -} - impl From> for VersionedXcm { fn from(x: v2::Xcm) -> Self { VersionedXcm::V2(x) } } -impl TryFrom> for v0::Xcm { - type Error = (); - fn try_from(x: VersionedXcm) -> Result { - use VersionedXcm::*; - match x { - V0(x) => Ok(x), - V1(x) => x.try_into(), - V2(x) => V1(x.try_into()?).try_into(), - } +impl From> for VersionedXcm { + fn from(x: v3::Xcm) -> Self { + VersionedXcm::V3(x) } } -impl TryFrom> for v1::Xcm { +impl TryFrom> for v2::Xcm { type Error = (); fn try_from(x: VersionedXcm) -> Result { use VersionedXcm::*; match x { - V0(x) => x.try_into(), - V1(x) => Ok(x), - V2(x) => x.try_into(), + V2(x) => Ok(x), + V3(x) => x.try_into(), } } } -impl TryFrom> for v2::Xcm { +impl TryFrom> for v3::Xcm { type Error = (); - fn try_from(x: VersionedXcm) -> Result { + fn try_from(x: VersionedXcm) -> Result { use VersionedXcm::*; match x { - V0(x) => V1(x.try_into()?).try_into(), - V1(x) => x.try_into(), - V2(x) => Ok(x), + V2(x) => x.try_into(), + V3(x) => Ok(x), } } } @@ -398,28 +442,6 @@ impl WrapVersion for () { } } -/// `WrapVersion` implementation which attempts to always convert the XCM to version 0 before wrapping it. -pub struct AlwaysV0; -impl WrapVersion for AlwaysV0 { - fn wrap_version( - _: &latest::MultiLocation, - xcm: impl Into>, - ) -> Result, ()> { - Ok(VersionedXcm::::V0(xcm.into().try_into()?)) - } -} - -/// `WrapVersion` implementation which attempts to always convert the XCM to version 1 before wrapping it. -pub struct AlwaysV1; -impl WrapVersion for AlwaysV1 { - fn wrap_version( - _: &latest::MultiLocation, - xcm: impl Into>, - ) -> Result, ()> { - Ok(VersionedXcm::::V1(xcm.into().try_into()?)) - } -} - /// `WrapVersion` implementation which attempts to always convert the XCM to version 2 before wrapping it. pub struct AlwaysV2; impl WrapVersion for AlwaysV2 { @@ -431,42 +453,54 @@ impl WrapVersion for AlwaysV2 { } } -/// `WrapVersion` implementation which attempts to always convert the XCM to the latest version before wrapping it. -pub type AlwaysLatest = AlwaysV1; +/// `WrapVersion` implementation which attempts to always convert the XCM to version 3 before wrapping it. +pub struct AlwaysV3; +impl WrapVersion for AlwaysV3 { + fn wrap_version( + _: &latest::MultiLocation, + xcm: impl Into>, + ) -> Result, ()> { + Ok(VersionedXcm::::V3(xcm.into().try_into()?)) + } +} + +/// `WrapVersion` implementation which attempts to always convert the XCM to the latest version +/// before wrapping it. +pub type AlwaysLatest = AlwaysV3; -/// `WrapVersion` implementation which attempts to always convert the XCM to the release version before wrapping it. -pub type AlwaysRelease = AlwaysV0; +/// `WrapVersion` implementation which attempts to always convert the XCM to the most recent Long- +/// Term-Support version before wrapping it. +pub type AlwaysLts = AlwaysV3; pub mod prelude { pub use super::{ - latest::prelude::*, AlwaysLatest, AlwaysRelease, AlwaysV0, AlwaysV1, AlwaysV2, IntoVersion, - Unsupported, Version as XcmVersion, VersionedMultiAsset, VersionedMultiAssets, - VersionedMultiLocation, VersionedResponse, VersionedXcm, WrapVersion, + latest::prelude::*, AlwaysLatest, AlwaysLts, AlwaysV2, AlwaysV3, IntoVersion, Unsupported, + Version as XcmVersion, VersionedAssetId, VersionedInteriorMultiLocation, + VersionedMultiAsset, VersionedMultiAssets, VersionedMultiLocation, VersionedResponse, + VersionedXcm, WrapVersion, }; } pub mod opaque { - pub mod v0 { - // Everything from v0 - pub use crate::v0::*; - // Then override with the opaque types in v0 - pub use crate::v0::opaque::{Order, Xcm}; - } - pub mod v1 { - // Everything from v1 - pub use crate::v1::*; - // Then override with the opaque types in v1 - pub use crate::v1::opaque::{Order, Xcm}; - } pub mod v2 { - // Everything from v1 + // Everything from v2 pub use crate::v2::*; // Then override with the opaque types in v2 pub use crate::v2::opaque::{Instruction, Xcm}; } + pub mod v3 { + // Everything from v3 + pub use crate::v3::*; + // Then override with the opaque types in v3 + pub use crate::v3::opaque::{Instruction, Xcm}; + } pub mod latest { - pub use super::v2::*; + pub use super::v3::*; + } + + pub mod lts { + pub use super::v3::*; } /// The basic `VersionedXcm` type which just uses the `Vec` as an encoded call. @@ -477,3 +511,9 @@ pub mod opaque { pub trait GetWeight { fn weight(&self) -> latest::Weight; } + +#[test] +fn conversion_works() { + use latest::prelude::*; + let _: VersionedMultiAssets = (Here, 1u128).into(); +} diff --git a/xcm/src/tests.rs b/xcm/src/tests.rs new file mode 100644 index 000000000000..32326cab0333 --- /dev/null +++ b/xcm/src/tests.rs @@ -0,0 +1,183 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +use crate::*; +use alloc::vec; + +#[test] +fn encode_decode_versioned_asset_id_v3() { + let asset_id = VersionedAssetId::V3(v3::AssetId::Abstract([1; 32])); + let encoded = asset_id.encode(); + + assert_eq!( + encoded, + hex_literal::hex!("03010101010101010101010101010101010101010101010101010101010101010101"), + "encode format changed" + ); + assert_eq!(encoded[0], 3, "bad version number"); + + let decoded = VersionedAssetId::decode(&mut &encoded[..]).unwrap(); + assert_eq!(asset_id, decoded); +} + +#[test] +fn encode_decode_versioned_response_v2() { + let response = VersionedResponse::V2(v2::Response::Null); + let encoded = response.encode(); + + assert_eq!(encoded, hex_literal::hex!("0200"), "encode format changed"); + assert_eq!(encoded[0], 2, "bad version number"); + + let decoded = VersionedResponse::decode(&mut &encoded[..]).unwrap(); + assert_eq!(response, decoded); +} + +#[test] +fn encode_decode_versioned_response_v3() { + let response = VersionedResponse::V3(v3::Response::Null); + let encoded = response.encode(); + + assert_eq!(encoded, hex_literal::hex!("0300"), "encode format changed"); + assert_eq!(encoded[0], 3, "bad version number"); + + let decoded = VersionedResponse::decode(&mut &encoded[..]).unwrap(); + assert_eq!(response, decoded); +} + +#[test] +fn encode_decode_versioned_multi_location_v2() { + let location = VersionedMultiLocation::V2(v2::MultiLocation::new(0, v2::Junctions::Here)); + let encoded = location.encode(); + + assert_eq!(encoded, hex_literal::hex!("010000"), "encode format changed"); + assert_eq!(encoded[0], 1, "bad version number"); // this is introduced in v1 + + let decoded = VersionedMultiLocation::decode(&mut &encoded[..]).unwrap(); + assert_eq!(location, decoded); +} + +#[test] +fn encode_decode_versioned_multi_location_v3() { + let location = VersionedMultiLocation::V3(v3::MultiLocation::new(0, v3::Junctions::Here)); + let encoded = location.encode(); + + assert_eq!(encoded, hex_literal::hex!("030000"), "encode format changed"); + assert_eq!(encoded[0], 3, "bad version number"); + + let decoded = VersionedMultiLocation::decode(&mut &encoded[..]).unwrap(); + assert_eq!(location, decoded); +} + +#[test] +fn encode_decode_versioned_interior_multi_location_v2() { + let location = VersionedInteriorMultiLocation::V2(v2::InteriorMultiLocation::Here); + let encoded = location.encode(); + + assert_eq!(encoded, hex_literal::hex!("0200"), "encode format changed"); + assert_eq!(encoded[0], 2, "bad version number"); + + let decoded = VersionedInteriorMultiLocation::decode(&mut &encoded[..]).unwrap(); + assert_eq!(location, decoded); +} + +#[test] +fn encode_decode_versioned_interior_multi_location_v3() { + let location = VersionedInteriorMultiLocation::V3(v3::InteriorMultiLocation::Here); + let encoded = location.encode(); + + assert_eq!(encoded, hex_literal::hex!("0300"), "encode format changed"); + assert_eq!(encoded[0], 3, "bad version number"); + + let decoded = VersionedInteriorMultiLocation::decode(&mut &encoded[..]).unwrap(); + assert_eq!(location, decoded); +} + +#[test] +fn encode_decode_versioned_multi_asset_v2() { + let asset = VersionedMultiAsset::V2(v2::MultiAsset::from(((0, v2::Junctions::Here), 1))); + let encoded = asset.encode(); + + assert_eq!(encoded, hex_literal::hex!("010000000004"), "encode format changed"); + assert_eq!(encoded[0], 1, "bad version number"); + + let decoded = VersionedMultiAsset::decode(&mut &encoded[..]).unwrap(); + assert_eq!(asset, decoded); +} + +#[test] +fn encode_decode_versioned_multi_asset_v3() { + let asset = VersionedMultiAsset::V3(v3::MultiAsset::from((v3::MultiLocation::default(), 1))); + let encoded = asset.encode(); + + assert_eq!(encoded, hex_literal::hex!("030000000004"), "encode format changed"); + assert_eq!(encoded[0], 3, "bad version number"); + + let decoded = VersionedMultiAsset::decode(&mut &encoded[..]).unwrap(); + assert_eq!(asset, decoded); +} + +#[test] +fn encode_decode_versioned_multi_assets_v2() { + let assets = VersionedMultiAssets::V2(v2::MultiAssets::from(vec![v2::MultiAsset::from(( + (0, v2::Junctions::Here), + 1, + ))])); + let encoded = assets.encode(); + + assert_eq!(encoded, hex_literal::hex!("01040000000004"), "encode format changed"); + assert_eq!(encoded[0], 1, "bad version number"); + + let decoded = VersionedMultiAssets::decode(&mut &encoded[..]).unwrap(); + assert_eq!(assets, decoded); +} + +#[test] +fn encode_decode_versioned_multi_assets_v3() { + let assets = VersionedMultiAssets::V3(v3::MultiAssets::from(vec![ + (v3::MultiAsset::from((v3::MultiLocation::default(), 1))), + ])); + let encoded = assets.encode(); + + assert_eq!(encoded, hex_literal::hex!("03040000000004"), "encode format changed"); + assert_eq!(encoded[0], 3, "bad version number"); + + let decoded = VersionedMultiAssets::decode(&mut &encoded[..]).unwrap(); + assert_eq!(assets, decoded); +} + +#[test] +fn encode_decode_versioned_xcm_v2() { + let xcm = VersionedXcm::V2(v2::Xcm::<()>::new()); + let encoded = xcm.encode(); + + assert_eq!(encoded, hex_literal::hex!("0200"), "encode format changed"); + assert_eq!(encoded[0], 2, "bad version number"); + + let decoded = VersionedXcm::decode(&mut &encoded[..]).unwrap(); + assert_eq!(xcm, decoded); +} + +#[test] +fn encode_decode_versioned_xcm_v3() { + let xcm = VersionedXcm::V3(v3::Xcm::<()>::new()); + let encoded = xcm.encode(); + + assert_eq!(encoded, hex_literal::hex!("0300"), "encode format changed"); + assert_eq!(encoded[0], 3, "bad version number"); + + let decoded = VersionedXcm::decode(&mut &encoded[..]).unwrap(); + assert_eq!(xcm, decoded); +} diff --git a/xcm/src/v0/junction.rs b/xcm/src/v0/junction.rs deleted file mode 100644 index 67f17f464a37..000000000000 --- a/xcm/src/v0/junction.rs +++ /dev/null @@ -1,205 +0,0 @@ -// Copyright 2020 Parity Technologies (UK) Ltd. -// This file is part of Polkadot. - -// Polkadot is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Polkadot 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 Polkadot. If not, see . - -//! Support data structures for `MultiLocation`, primarily the `Junction` datatype. - -use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; -use scale_info::TypeInfo; -use sp_runtime::{traits::ConstU32, WeakBoundedVec}; - -/// A global identifier of an account-bearing consensus system. -#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, Debug, TypeInfo, MaxEncodedLen)] -pub enum NetworkId { - /// Unidentified/any. - Any, - /// Some named network. - Named(WeakBoundedVec>), - /// The Polkadot Relay chain - Polkadot, - /// Kusama. - Kusama, -} - -/// An identifier of a pluralistic body. -#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, Debug, TypeInfo, MaxEncodedLen)] -pub enum BodyId { - /// The only body in its context. - Unit, - /// A named body. - Named(WeakBoundedVec>), - /// An indexed body. - Index(#[codec(compact)] u32), - /// The unambiguous executive body (for Polkadot, this would be the Polkadot council). - Executive, - /// The unambiguous technical body (for Polkadot, this would be the Technical Committee). - Technical, - /// The unambiguous legislative body (for Polkadot, this could be considered the opinion of a majority of - /// lock-voters). - Legislative, - /// The unambiguous judicial body (this doesn't exist on Polkadot, but if it were to get a "grand oracle", it - /// may be considered as that). - Judicial, -} - -/// A part of a pluralistic body. -#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, Debug, TypeInfo, MaxEncodedLen)] -pub enum BodyPart { - /// The body's declaration, under whatever means it decides. - Voice, - /// A given number of members of the body. - Members { - #[codec(compact)] - count: u32, - }, - /// A given number of members of the body, out of some larger caucus. - Fraction { - #[codec(compact)] - nom: u32, - #[codec(compact)] - denom: u32, - }, - /// No less than the given proportion of members of the body. - AtLeastProportion { - #[codec(compact)] - nom: u32, - #[codec(compact)] - denom: u32, - }, - /// More than than the given proportion of members of the body. - MoreThanProportion { - #[codec(compact)] - nom: u32, - #[codec(compact)] - denom: u32, - }, -} - -impl BodyPart { - /// Returns `true` if the part represents a strict majority (> 50%) of the body in question. - pub fn is_majority(&self) -> bool { - match self { - BodyPart::Fraction { nom, denom } if *nom * 2 > *denom => true, - BodyPart::AtLeastProportion { nom, denom } if *nom * 2 > *denom => true, - BodyPart::MoreThanProportion { nom, denom } if *nom * 2 >= *denom => true, - _ => false, - } - } -} - -/// A single item in a path to describe the relative location of a consensus system. -/// -/// Each item assumes a pre-existing location as its context and is defined in terms of it. -#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, Debug, TypeInfo, MaxEncodedLen)] -pub enum Junction { - /// The consensus system of which the context is a member and state-wise super-set. - /// - /// NOTE: This item is *not* a sub-consensus item: a consensus system may not identify itself trustlessly as - /// a location that includes this junction. - Parent, - /// An indexed parachain belonging to and operated by the context. - /// - /// Generally used when the context is a Polkadot Relay-chain. - Parachain(#[codec(compact)] u32), - /// A 32-byte identifier for an account of a specific network that is respected as a sovereign endpoint within - /// the context. - /// - /// Generally used when the context is a Substrate-based chain. - AccountId32 { network: NetworkId, id: [u8; 32] }, - /// An 8-byte index for an account of a specific network that is respected as a sovereign endpoint within - /// the context. - /// - /// May be used when the context is a Frame-based chain and includes e.g. an indices pallet. - AccountIndex64 { - network: NetworkId, - #[codec(compact)] - index: u64, - }, - /// A 20-byte identifier for an account of a specific network that is respected as a sovereign endpoint within - /// the context. - /// - /// May be used when the context is an Ethereum or Bitcoin chain or smart-contract. - AccountKey20 { network: NetworkId, key: [u8; 20] }, - /// An instanced, indexed pallet that forms a constituent part of the context. - /// - /// Generally used when the context is a Frame-based chain. - PalletInstance(u8), - /// A non-descript index within the context location. - /// - /// Usage will vary widely owing to its generality. - /// - /// NOTE: Try to avoid using this and instead use a more specific item. - GeneralIndex(#[codec(compact)] u128), - /// A nondescript datum acting as a key within the context location. - /// - /// Usage will vary widely owing to its generality. - /// - /// NOTE: Try to avoid using this and instead use a more specific item. - GeneralKey(WeakBoundedVec>), - /// The unambiguous child. - /// - /// Not currently used except as a fallback when deriving ancestry. - OnlyChild, - /// A pluralistic body existing within consensus. - /// - /// Typical to be used to represent a governance origin of a chain, but could in principle be used to represent - /// things such as multisigs also. - Plurality { id: BodyId, part: BodyPart }, -} - -impl From for Junction { - fn from(v1: crate::v1::Junction) -> Junction { - use crate::v1::Junction::*; - match v1 { - Parachain(id) => Self::Parachain(id), - AccountId32 { network, id } => Self::AccountId32 { network, id }, - AccountIndex64 { network, index } => Self::AccountIndex64 { network, index }, - AccountKey20 { network, key } => Self::AccountKey20 { network, key }, - PalletInstance(index) => Self::PalletInstance(index), - GeneralIndex(index) => Self::GeneralIndex(index), - GeneralKey(key) => Self::GeneralKey(key), - OnlyChild => Self::OnlyChild, - Plurality { id, part } => Self::Plurality { id, part }, - } - } -} - -impl Junction { - /// Returns true if this junction is a `Parent` item. - pub fn is_parent(&self) -> bool { - match self { - Junction::Parent => true, - _ => false, - } - } - - /// Returns true if this junction can be considered an interior part of its context. This is generally `true`, - /// except for the `Parent` item. - pub fn is_interior(&self) -> bool { - match self { - Junction::Parent => false, - - Junction::Parachain(..) | - Junction::AccountId32 { .. } | - Junction::AccountIndex64 { .. } | - Junction::AccountKey20 { .. } | - Junction::PalletInstance { .. } | - Junction::GeneralIndex { .. } | - Junction::GeneralKey(..) | - Junction::OnlyChild | - Junction::Plurality { .. } => true, - } - } -} diff --git a/xcm/src/v0/mod.rs b/xcm/src/v0/mod.rs deleted file mode 100644 index 2a7bd3625bb0..000000000000 --- a/xcm/src/v0/mod.rs +++ /dev/null @@ -1,389 +0,0 @@ -// Copyright 2020 Parity Technologies (UK) Ltd. -// This file is part of Polkadot. - -// Polkadot is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Polkadot 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 Polkadot. If not, see . - -//! Version 0 of the Cross-Consensus Message format data structures. - -use crate::DoubleEncoded; -use alloc::vec::Vec; -use core::result; -use derivative::Derivative; -use parity_scale_codec::{self, Decode, Encode}; -use scale_info::TypeInfo; - -mod junction; -mod multi_asset; -mod multi_location; -mod order; -mod traits; -use super::v1::{MultiLocation as MultiLocation1, Response as Response1, Xcm as Xcm1}; -pub use junction::{BodyId, BodyPart, Junction, NetworkId}; -pub use multi_asset::{AssetInstance, MultiAsset}; -pub use multi_location::MultiLocation::{self, *}; -pub use order::Order; -pub use traits::{Error, ExecuteXcm, Outcome, Result, SendXcm}; - -/// A prelude for importing all types typically used when interacting with XCM messages. -pub mod prelude { - pub use super::{ - junction::{BodyId, Junction::*}, - multi_asset::{ - AssetInstance::{self, *}, - MultiAsset::{self, *}, - }, - multi_location::MultiLocation::{self, *}, - order::Order::{self, *}, - traits::{Error as XcmError, ExecuteXcm, Outcome, Result as XcmResult, SendXcm}, - Junction::*, - OriginKind, - Xcm::{self, *}, - }; -} - -// TODO: #2841 #XCMENCODE Efficient encodings for MultiAssets, Vec, using initial byte values 128+ to encode -// the number of items in the vector. - -/// Basically just the XCM (more general) version of `ParachainDispatchOrigin`. -#[derive(Copy, Clone, Eq, PartialEq, Encode, Decode, Debug, TypeInfo)] -pub enum OriginKind { - /// Origin should just be the native dispatch origin representation for the sender in the - /// local runtime framework. For Cumulus/Frame chains this is the `Parachain` or `Relay` origin - /// if coming from a chain, though there may be others if the `MultiLocation` XCM origin has a - /// primary/native dispatch origin form. - Native, - - /// Origin should just be the standard account-based origin with the sovereign account of - /// the sender. For Cumulus/Frame chains, this is the `Signed` origin. - SovereignAccount, - - /// Origin should be the super-user. For Cumulus/Frame chains, this is the `Root` origin. - /// This will not usually be an available option. - Superuser, - - /// Origin should be interpreted as an XCM native origin and the `MultiLocation` should be - /// encoded directly in the dispatch origin unchanged. For Cumulus/Frame chains, this will be - /// the `pallet_xcm::Origin::Xcm` type. - Xcm, -} - -/// Response data to a query. -#[derive(Clone, Eq, PartialEq, Encode, Decode, Debug, TypeInfo)] -pub enum Response { - /// Some assets. - Assets(Vec), -} - -/// Cross-Consensus Message: A message from one consensus system to another. -/// -/// Consensus systems that may send and receive messages include blockchains and smart contracts. -/// -/// All messages are delivered from a known *origin*, expressed as a `MultiLocation`. -/// -/// This is the inner XCM format and is version-sensitive. Messages are typically passed using the outer -/// XCM format, known as `VersionedXcm`. -#[derive(Derivative, Encode, Decode, TypeInfo)] -#[derivative(Clone(bound = ""), Eq(bound = ""), PartialEq(bound = ""), Debug(bound = ""))] -#[codec(encode_bound())] -#[codec(decode_bound())] -#[scale_info(bounds(), skip_type_params(RuntimeCall))] -pub enum Xcm { - /// Withdraw asset(s) (`assets`) from the ownership of `origin` and place them into `holding`. Execute the - /// orders (`effects`). - /// - /// - `assets`: The asset(s) to be withdrawn into holding. - /// - `effects`: The order(s) to execute on the holding account. - /// - /// Kind: *Instruction*. - /// - /// Errors: - #[codec(index = 0)] - WithdrawAsset { assets: Vec, effects: Vec> }, - - /// Asset(s) (`assets`) have been received into the ownership of this system on the `origin` system. - /// - /// Some orders are given (`effects`) which should be executed once the corresponding derivative assets have - /// been placed into `holding`. - /// - /// - `assets`: The asset(s) that are minted into holding. - /// - `effects`: The order(s) to execute on the holding account. - /// - /// Safety: `origin` must be trusted to have received and be storing `assets` such that they may later be - /// withdrawn should this system send a corresponding message. - /// - /// Kind: *Trusted Indication*. - /// - /// Errors: - #[codec(index = 1)] - ReserveAssetDeposit { assets: Vec, effects: Vec> }, - - /// Asset(s) (`assets`) have been destroyed on the `origin` system and equivalent assets should be - /// created on this system. - /// - /// Some orders are given (`effects`) which should be executed once the corresponding derivative assets have - /// been placed into `holding`. - /// - /// - `assets`: The asset(s) that are minted into holding. - /// - `effects`: The order(s) to execute on the holding account. - /// - /// Safety: `origin` must be trusted to have irrevocably destroyed the `assets` prior as a consequence of - /// sending this message. - /// - /// Kind: *Trusted Indication*. - /// - /// Errors: - #[codec(index = 2)] - TeleportAsset { assets: Vec, effects: Vec> }, - - /// Indication of the contents of the holding account corresponding to the `QueryHolding` order of `query_id`. - /// - /// - `query_id`: The identifier of the query that resulted in this message being sent. - /// - `assets`: The message content. - /// - /// Safety: No concerns. - /// - /// Kind: *Information*. - /// - /// Errors: - #[codec(index = 3)] - QueryResponse { - #[codec(compact)] - query_id: u64, - response: Response, - }, - - /// Withdraw asset(s) (`assets`) from the ownership of `origin` and place equivalent assets under the - /// ownership of `dest` within this consensus system. - /// - /// - `assets`: The asset(s) to be withdrawn. - /// - `dest`: The new owner for the assets. - /// - /// Safety: No concerns. - /// - /// Kind: *Instruction*. - /// - /// Errors: - #[codec(index = 4)] - TransferAsset { assets: Vec, dest: MultiLocation }, - - /// Withdraw asset(s) (`assets`) from the ownership of `origin` and place equivalent assets under the - /// ownership of `dest` within this consensus system. - /// - /// Send an onward XCM message to `dest` of `ReserveAssetDeposit` with the given `effects`. - /// - /// - `assets`: The asset(s) to be withdrawn. - /// - `dest`: The new owner for the assets. - /// - `effects`: The orders that should be contained in the `ReserveAssetDeposit` which is sent onwards to - /// `dest`. - /// - /// Safety: No concerns. - /// - /// Kind: *Instruction*. - /// - /// Errors: - #[codec(index = 5)] - TransferReserveAsset { assets: Vec, dest: MultiLocation, effects: Vec> }, - - /// Apply the encoded transaction `call`, whose dispatch-origin should be `origin` as expressed by the kind - /// of origin `origin_type`. - /// - /// - `origin_type`: The means of expressing the message origin as a dispatch origin. - /// - `max_weight`: The weight of `call`; this should be at least the chain's calculated weight and will - /// be used in the weight determination arithmetic. - /// - `call`: The encoded transaction to be applied. - /// - /// Safety: No concerns. - /// - /// Kind: *Instruction*. - /// - /// Errors: - #[codec(index = 6)] - Transact { - origin_type: OriginKind, - require_weight_at_most: u64, - call: DoubleEncoded, - }, - - /// A message to notify about a new incoming HRMP channel. This message is meant to be sent by the - /// relay-chain to a para. - /// - /// - `sender`: The sender in the to-be opened channel. Also, the initiator of the channel opening. - /// - `max_message_size`: The maximum size of a message proposed by the sender. - /// - `max_capacity`: The maximum number of messages that can be queued in the channel. - /// - /// Safety: The message should originate directly from the relay-chain. - /// - /// Kind: *System Notification* - #[codec(index = 7)] - HrmpNewChannelOpenRequest { - #[codec(compact)] - sender: u32, - #[codec(compact)] - max_message_size: u32, - #[codec(compact)] - max_capacity: u32, - }, - - /// A message to notify about that a previously sent open channel request has been accepted by - /// the recipient. That means that the channel will be opened during the next relay-chain session - /// change. This message is meant to be sent by the relay-chain to a para. - /// - /// Safety: The message should originate directly from the relay-chain. - /// - /// Kind: *System Notification* - /// - /// Errors: - #[codec(index = 8)] - HrmpChannelAccepted { - #[codec(compact)] - recipient: u32, - }, - - /// A message to notify that the other party in an open channel decided to close it. In particular, - /// `initiator` is going to close the channel opened from `sender` to the `recipient`. The close - /// will be enacted at the next relay-chain session change. This message is meant to be sent by - /// the relay-chain to a para. - /// - /// Safety: The message should originate directly from the relay-chain. - /// - /// Kind: *System Notification* - /// - /// Errors: - #[codec(index = 9)] - HrmpChannelClosing { - #[codec(compact)] - initiator: u32, - #[codec(compact)] - sender: u32, - #[codec(compact)] - recipient: u32, - }, - - /// A message to indicate that the embedded XCM is actually arriving on behalf of some consensus - /// location within the origin. - /// - /// Safety: `who` must be an interior location of the context. This basically means that no `Parent` - /// junctions are allowed in it. This should be verified at the time of XCM execution. - /// - /// Kind: *Instruction* - /// - /// Errors: - #[codec(index = 10)] - RelayedFrom { who: MultiLocation, message: alloc::boxed::Box> }, -} - -impl Xcm { - pub fn into(self) -> Xcm { - Xcm::from(self) - } - pub fn from(xcm: Xcm) -> Self { - use Xcm::*; - match xcm { - WithdrawAsset { assets, effects } => - WithdrawAsset { assets, effects: effects.into_iter().map(Order::into).collect() }, - ReserveAssetDeposit { assets, effects } => ReserveAssetDeposit { - assets, - effects: effects.into_iter().map(Order::into).collect(), - }, - TeleportAsset { assets, effects } => - TeleportAsset { assets, effects: effects.into_iter().map(Order::into).collect() }, - QueryResponse { query_id, response } => QueryResponse { query_id, response }, - TransferAsset { assets, dest } => TransferAsset { assets, dest }, - TransferReserveAsset { assets, dest, effects } => - TransferReserveAsset { assets, dest, effects }, - HrmpNewChannelOpenRequest { sender, max_message_size, max_capacity } => - HrmpNewChannelOpenRequest { sender, max_message_size, max_capacity }, - HrmpChannelAccepted { recipient } => HrmpChannelAccepted { recipient }, - HrmpChannelClosing { initiator, sender, recipient } => - HrmpChannelClosing { initiator, sender, recipient }, - Transact { origin_type, require_weight_at_most, call } => - Transact { origin_type, require_weight_at_most, call: call.into() }, - RelayedFrom { who, message } => - RelayedFrom { who, message: alloc::boxed::Box::new((*message).into()) }, - } - } -} - -pub mod opaque { - /// The basic concrete type of `generic::Xcm`, which doesn't make any assumptions about the format of a - /// call other than it is pre-encoded. - pub type Xcm = super::Xcm<()>; - - pub use super::order::opaque::*; -} - -// Convert from a v1 response to a v0 response -impl TryFrom for Response { - type Error = (); - fn try_from(new_response: Response1) -> result::Result { - Ok(match new_response { - Response1::Assets(assets) => Self::Assets(assets.try_into()?), - Response1::Version(..) => return Err(()), - }) - } -} - -impl TryFrom> for Xcm { - type Error = (); - fn try_from(x: Xcm1) -> result::Result, ()> { - use Xcm::*; - Ok(match x { - Xcm1::WithdrawAsset { assets, effects } => WithdrawAsset { - assets: assets.try_into()?, - effects: effects - .into_iter() - .map(Order::try_from) - .collect::>()?, - }, - Xcm1::ReserveAssetDeposited { assets, effects } => ReserveAssetDeposit { - assets: assets.try_into()?, - effects: effects - .into_iter() - .map(Order::try_from) - .collect::>()?, - }, - Xcm1::ReceiveTeleportedAsset { assets, effects } => TeleportAsset { - assets: assets.try_into()?, - effects: effects - .into_iter() - .map(Order::try_from) - .collect::>()?, - }, - Xcm1::QueryResponse { query_id, response } => - QueryResponse { query_id, response: response.try_into()? }, - Xcm1::TransferAsset { assets, beneficiary } => - TransferAsset { assets: assets.try_into()?, dest: beneficiary.try_into()? }, - Xcm1::TransferReserveAsset { assets, dest, effects } => TransferReserveAsset { - assets: assets.try_into()?, - dest: dest.try_into()?, - effects: effects - .into_iter() - .map(Order::try_from) - .collect::>()?, - }, - Xcm1::HrmpNewChannelOpenRequest { sender, max_message_size, max_capacity } => - HrmpNewChannelOpenRequest { sender, max_message_size, max_capacity }, - Xcm1::HrmpChannelAccepted { recipient } => HrmpChannelAccepted { recipient }, - Xcm1::HrmpChannelClosing { initiator, sender, recipient } => - HrmpChannelClosing { initiator, sender, recipient }, - Xcm1::Transact { origin_type, require_weight_at_most, call } => - Transact { origin_type, require_weight_at_most, call: call.into() }, - Xcm1::RelayedFrom { who, message } => RelayedFrom { - who: MultiLocation1 { interior: who, parents: 0 }.try_into()?, - message: alloc::boxed::Box::new((*message).try_into()?), - }, - Xcm1::SubscribeVersion { .. } | Xcm1::UnsubscribeVersion => return Err(()), - }) - } -} diff --git a/xcm/src/v0/multi_asset.rs b/xcm/src/v0/multi_asset.rs deleted file mode 100644 index d8ad4ab8c2c9..000000000000 --- a/xcm/src/v0/multi_asset.rs +++ /dev/null @@ -1,407 +0,0 @@ -// Copyright 2020 Parity Technologies (UK) Ltd. -// This file is part of Polkadot. - -// Polkadot is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Polkadot 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 Polkadot. If not, see . - -//! Cross-Consensus Message format data structures. - -use super::MultiLocation; -use crate::v1::{MultiAssetFilter, MultiAssets, WildMultiAsset}; -use alloc::{vec, vec::Vec}; -use core::result; -use parity_scale_codec::{self, Decode, Encode}; -use scale_info::TypeInfo; - -pub use crate::v1::AssetInstance; - -/// A single general identifier for an asset. -/// -/// Represents both fungible and non-fungible assets. May only be used to represent a single asset class. -/// -/// Wildcards may or may not be allowed by the interpreting context. -/// -/// Assets classes may be identified in one of two ways: either an abstract identifier or a concrete identifier. -/// Implementations may support only one of these. A single asset may be referenced from multiple asset identifiers, -/// though will tend to have only a single *preferred* identifier. -/// -/// ### Abstract identifiers -/// -/// Abstract identifiers are absolute identifiers that represent a notional asset which can exist within multiple -/// consensus systems. These tend to be simpler to deal with since their broad meaning is unchanged regardless stay of -/// the consensus system in which it is interpreted. -/// -/// However, in the attempt to provide uniformity across consensus systems, they may conflate different instantiations -/// of some notional asset (e.g. the reserve asset and a local reserve-backed derivative of it) under the same name, -/// leading to confusion. It also implies that one notional asset is accounted for locally in only one way. This may not -/// be the case, e.g. where there are multiple bridge instances each providing a bridged "BTC" token yet none being -/// fungible between the others. -/// -/// Since they are meant to be absolute and universal, a global registry is needed to ensure that name collisions do not -/// occur. -/// -/// An abstract identifier is represented as a simple variable-size byte string. As of writing, no global registry -/// exists and no proposals have been put forth for asset labeling. -/// -/// ### Concrete identifiers -/// -/// Concrete identifiers are *relative identifiers* that specifically identify a single asset through its location in a -/// consensus system relative to the context interpreting. Use of a `MultiLocation` ensures that similar but non -/// fungible variants of the same underlying asset can be properly distinguished, and obviates the need for any kind of -/// central registry. -/// -/// The limitation is that the asset identifier cannot be trivially copied between consensus systems and must instead be -/// "re-anchored" whenever being moved to a new consensus system, using the two systems' relative paths. -/// -/// Throughout XCM, messages are authored such that *when interpreted from the receiver's point of view* they will have -/// the desired meaning/effect. This means that relative paths should always by constructed to be read from the point of -/// view of the receiving system, *which may be have a completely different meaning in the authoring system*. -/// -/// Concrete identifiers are the preferred way of identifying an asset since they are entirely unambiguous. -/// -/// A concrete identifier is represented by a `MultiLocation`. If a system has an unambiguous primary asset (such as -/// Bitcoin with BTC or Ethereum with ETH), then it will conventionally be identified as the chain itself. Alternative -/// and more specific ways of referring to an asset within a system include: -/// -/// - `/PalletInstance()` for a Frame chain with a single-asset pallet instance (such as an instance of the -/// Balances pallet). -/// - `/PalletInstance()/GeneralIndex()` for a Frame chain with an indexed multi-asset pallet instance -/// (such as an instance of the Assets pallet). -/// - `/AccountId32` for an ERC-20-style single-asset smart-contract on a Frame-based contracts chain. -/// - `/AccountKey20` for an ERC-20-style single-asset smart-contract on an Ethereum-like chain. -/// -#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, Debug, TypeInfo)] -pub enum MultiAsset { - /// No assets. Rarely used. - None, - - /// All assets. Typically used for the subset of assets to be used for an `Order`, and in that context means - /// "all assets currently in holding". - All, - - /// All fungible assets. Typically used for the subset of assets to be used for an `Order`, and in that context - /// means "all fungible assets currently in holding". - AllFungible, - - /// All non-fungible assets. Typically used for the subset of assets to be used for an `Order`, and in that - /// context means "all non-fungible assets currently in holding". - AllNonFungible, - - /// All fungible assets of a given abstract asset `id`entifier. - AllAbstractFungible { id: Vec }, - - /// All non-fungible assets of a given abstract asset `class`. - AllAbstractNonFungible { class: Vec }, - - /// All fungible assets of a given concrete asset `id`entifier. - AllConcreteFungible { id: MultiLocation }, - - /// All non-fungible assets of a given concrete asset `class`. - AllConcreteNonFungible { class: MultiLocation }, - - /// Some specific `amount` of the fungible asset identified by an abstract `id`. - AbstractFungible { - id: Vec, - #[codec(compact)] - amount: u128, - }, - - /// Some specific `instance` of the non-fungible asset whose `class` is identified abstractly. - AbstractNonFungible { class: Vec, instance: AssetInstance }, - - /// Some specific `amount` of the fungible asset identified by an concrete `id`. - ConcreteFungible { - id: MultiLocation, - #[codec(compact)] - amount: u128, - }, - - /// Some specific `instance` of the non-fungible asset whose `class` is identified concretely. - ConcreteNonFungible { class: MultiLocation, instance: AssetInstance }, -} - -impl MultiAsset { - /// Returns `true` if the `MultiAsset` is a wildcard and can refer to classes of assets, instead of just one. - /// - /// Typically can also be inferred by the name starting with `All`. - pub fn is_wildcard(&self) -> bool { - match self { - MultiAsset::None | - MultiAsset::AbstractFungible { .. } | - MultiAsset::AbstractNonFungible { .. } | - MultiAsset::ConcreteFungible { .. } | - MultiAsset::ConcreteNonFungible { .. } => false, - - MultiAsset::All | - MultiAsset::AllFungible | - MultiAsset::AllNonFungible | - MultiAsset::AllAbstractFungible { .. } | - MultiAsset::AllConcreteFungible { .. } | - MultiAsset::AllAbstractNonFungible { .. } | - MultiAsset::AllConcreteNonFungible { .. } => true, - } - } - - fn is_none(&self) -> bool { - match self { - MultiAsset::None | - MultiAsset::AbstractFungible { amount: 0, .. } | - MultiAsset::ConcreteFungible { amount: 0, .. } => true, - - _ => false, - } - } - - fn is_fungible(&self) -> bool { - match self { - MultiAsset::All | - MultiAsset::AllFungible | - MultiAsset::AllAbstractFungible { .. } | - MultiAsset::AllConcreteFungible { .. } | - MultiAsset::AbstractFungible { .. } | - MultiAsset::ConcreteFungible { .. } => true, - - _ => false, - } - } - - fn is_non_fungible(&self) -> bool { - match self { - MultiAsset::All | - MultiAsset::AllNonFungible | - MultiAsset::AllAbstractNonFungible { .. } | - MultiAsset::AllConcreteNonFungible { .. } | - MultiAsset::AbstractNonFungible { .. } | - MultiAsset::ConcreteNonFungible { .. } => true, - - _ => false, - } - } - - fn is_concrete_fungible(&self, id: &MultiLocation) -> bool { - match self { - MultiAsset::AllFungible => true, - MultiAsset::AllConcreteFungible { id: i } | - MultiAsset::ConcreteFungible { id: i, .. } => i == id, - - _ => false, - } - } - - fn is_abstract_fungible(&self, id: &[u8]) -> bool { - match self { - MultiAsset::AllFungible => true, - MultiAsset::AllAbstractFungible { id: i } | - MultiAsset::AbstractFungible { id: i, .. } => i == id, - _ => false, - } - } - - fn is_concrete_non_fungible(&self, class: &MultiLocation) -> bool { - match self { - MultiAsset::AllNonFungible => true, - MultiAsset::AllConcreteNonFungible { class: i } | - MultiAsset::ConcreteNonFungible { class: i, .. } => i == class, - _ => false, - } - } - - fn is_abstract_non_fungible(&self, class: &[u8]) -> bool { - match self { - MultiAsset::AllNonFungible => true, - MultiAsset::AllAbstractNonFungible { class: i } | - MultiAsset::AbstractNonFungible { class: i, .. } => i == class, - _ => false, - } - } - - fn is_all(&self) -> bool { - matches!(self, MultiAsset::All) - } - - /// Returns true if `self` is a super-set of the given `inner`. - /// - /// Typically, any wildcard is never contained in anything else, and a wildcard can contain any other non-wildcard. - /// For more details, see the implementation and tests. - pub fn contains(&self, inner: &MultiAsset) -> bool { - use MultiAsset::*; - - // Inner cannot be wild - if inner.is_wildcard() { - return false - } - // Everything contains nothing. - if inner.is_none() { - return true - } - - // Everything contains anything. - if self.is_all() { - return true - } - // Nothing contains nothing. - if self.is_none() { - return false - } - - match self { - // Anything fungible contains "all fungibles" - AllFungible => inner.is_fungible(), - // Anything non-fungible contains "all non-fungibles" - AllNonFungible => inner.is_non_fungible(), - - AllConcreteFungible { id } => inner.is_concrete_fungible(id), - AllAbstractFungible { id } => inner.is_abstract_fungible(id), - AllConcreteNonFungible { class } => inner.is_concrete_non_fungible(class), - AllAbstractNonFungible { class } => inner.is_abstract_non_fungible(class), - - ConcreteFungible { id, amount } => matches!( - inner, - ConcreteFungible { id: inner_id , amount: inner_amount } if inner_id == id && amount >= inner_amount - ), - AbstractFungible { id, amount } => matches!( - inner, - AbstractFungible { id: inner_id , amount: inner_amount } if inner_id == id && amount >= inner_amount - ), - ConcreteNonFungible { .. } => self == inner, - AbstractNonFungible { .. } => self == inner, - _ => false, - } - } - - pub fn reanchor(&mut self, prepend: &MultiLocation) -> Result<(), ()> { - use MultiAsset::*; - match self { - AllConcreteFungible { ref mut id } | - AllConcreteNonFungible { class: ref mut id } | - ConcreteFungible { ref mut id, .. } | - ConcreteNonFungible { class: ref mut id, .. } => - id.prepend_with(prepend.clone()).map_err(|_| ()), - _ => Ok(()), - } - } -} - -impl TryFrom for MultiAsset { - type Error = (); - - fn try_from(m: crate::v1::MultiAsset) -> result::Result { - use crate::v1::{AssetId::*, Fungibility::*}; - use MultiAsset::*; - Ok(match (m.id, m.fun) { - (Concrete(id), Fungible(amount)) => ConcreteFungible { id: id.try_into()?, amount }, - (Concrete(class), NonFungible(instance)) => - ConcreteNonFungible { class: class.try_into()?, instance }, - (Abstract(id), Fungible(amount)) => AbstractFungible { id, amount }, - (Abstract(class), NonFungible(instance)) => AbstractNonFungible { class, instance }, - }) - } -} - -impl TryFrom for Vec { - type Error = (); - - fn try_from(m: MultiAssets) -> result::Result, ()> { - m.drain().into_iter().map(MultiAsset::try_from).collect() - } -} - -impl TryFrom for MultiAsset { - type Error = (); - - fn try_from(m: WildMultiAsset) -> result::Result { - use crate::v1::{AssetId::*, WildFungibility::*}; - use MultiAsset::*; - Ok(match m { - WildMultiAsset::All => All, - WildMultiAsset::AllOf { id, fun } => match (id, fun) { - (Concrete(id), Fungible) => AllConcreteFungible { id: id.try_into()? }, - (Concrete(class), NonFungible) => - AllConcreteNonFungible { class: class.try_into()? }, - (Abstract(id), Fungible) => AllAbstractFungible { id }, - (Abstract(class), NonFungible) => AllAbstractNonFungible { class }, - }, - }) - } -} - -impl TryFrom for Vec { - type Error = (); - - fn try_from(m: WildMultiAsset) -> result::Result, ()> { - Ok(vec![m.try_into()?]) - } -} - -impl TryFrom for Vec { - type Error = (); - - fn try_from(m: MultiAssetFilter) -> result::Result, ()> { - match m { - MultiAssetFilter::Definite(assets) => assets.try_into(), - MultiAssetFilter::Wild(wildcard) => wildcard.try_into(), - } - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn contains_works() { - use alloc::vec; - use MultiAsset::*; - // trivial case: all contains any non-wildcard. - assert!(All.contains(&None)); - assert!(All.contains(&AbstractFungible { id: alloc::vec![99u8], amount: 1 })); - - // trivial case: none contains nothing, except itself. - assert!(None.contains(&None)); - assert!(!None.contains(&AllFungible)); - assert!(!None.contains(&All)); - - // A bit more sneaky: Nothing can contain wildcard, even All ir the thing itself. - assert!(!All.contains(&All)); - assert!(!All.contains(&AllFungible)); - assert!(!AllFungible.contains(&AllFungible)); - assert!(!AllNonFungible.contains(&AllNonFungible)); - - // For fungibles, containing is basically equality, or equal id with higher amount. - assert!(!AbstractFungible { id: vec![99u8], amount: 99 } - .contains(&AbstractFungible { id: vec![1u8], amount: 99 })); - assert!(AbstractFungible { id: vec![99u8], amount: 99 } - .contains(&AbstractFungible { id: vec![99u8], amount: 99 })); - assert!(AbstractFungible { id: vec![99u8], amount: 99 } - .contains(&AbstractFungible { id: vec![99u8], amount: 9 })); - assert!(!AbstractFungible { id: vec![99u8], amount: 99 } - .contains(&AbstractFungible { id: vec![99u8], amount: 100 })); - - // For non-fungibles, containing is equality. - assert!(!AbstractNonFungible { class: vec![99u8], instance: AssetInstance::Index(9) } - .contains(&AbstractNonFungible { - class: vec![98u8], - instance: AssetInstance::Index(9) - })); - assert!(!AbstractNonFungible { class: vec![99u8], instance: AssetInstance::Index(8) } - .contains(&AbstractNonFungible { - class: vec![99u8], - instance: AssetInstance::Index(9) - })); - assert!(AbstractNonFungible { class: vec![99u8], instance: AssetInstance::Index(9) } - .contains(&AbstractNonFungible { - class: vec![99u8], - instance: AssetInstance::Index(9) - })); - } -} diff --git a/xcm/src/v0/order.rs b/xcm/src/v0/order.rs deleted file mode 100644 index 306610c28c9c..000000000000 --- a/xcm/src/v0/order.rs +++ /dev/null @@ -1,204 +0,0 @@ -// Copyright 2020 Parity Technologies (UK) Ltd. -// This file is part of Polkadot. - -// Polkadot is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Polkadot 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 Polkadot. If not, see . - -//! Version 0 of the Cross-Consensus Message format data structures. - -use super::{super::v1::Order as Order1, MultiAsset, MultiLocation, Xcm}; -use alloc::vec::Vec; -use core::result; -use derivative::Derivative; -use parity_scale_codec::{self, Decode, Encode}; - -/// An instruction to be executed on some or all of the assets in holding, used by asset-related XCM messages. -#[derive(Derivative, Encode, Decode, scale_info::TypeInfo)] -#[derivative(Clone(bound = ""), Eq(bound = ""), PartialEq(bound = ""), Debug(bound = ""))] -#[codec(encode_bound())] -#[codec(decode_bound())] -#[scale_info(bounds(), skip_type_params(RuntimeCall))] -pub enum Order { - /// Do nothing. Not generally used. - #[codec(index = 0)] - Null, - - /// Remove the asset(s) (`assets`) from holding and place equivalent assets under the ownership of `dest` within - /// this consensus system. - /// - /// - `assets`: The asset(s) to remove from holding. - /// - `dest`: The new owner for the assets. - /// - /// Errors: - #[codec(index = 1)] - DepositAsset { assets: Vec, dest: MultiLocation }, - - /// Remove the asset(s) (`assets`) from holding and place equivalent assets under the ownership of `dest` within - /// this consensus system. - /// - /// Send an onward XCM message to `dest` of `ReserveAssetDeposit` with the given `effects`. - /// - /// - `assets`: The asset(s) to remove from holding. - /// - `dest`: The new owner for the assets. - /// - `effects`: The orders that should be contained in the `ReserveAssetDeposit` which is sent onwards to - /// `dest`. - /// - /// Errors: - #[codec(index = 2)] - DepositReserveAsset { assets: Vec, dest: MultiLocation, effects: Vec> }, - - /// Remove the asset(s) (`give`) from holding and replace them with alternative assets. - /// - /// The minimum amount of assets to be received into holding for the order not to fail may be stated. - /// - /// - `give`: The asset(s) to remove from holding. - /// - `receive`: The minimum amount of assets(s) which `give` should be exchanged for. The meaning of wildcards - /// is undefined and they should be not be used. - /// - /// Errors: - #[codec(index = 3)] - ExchangeAsset { give: Vec, receive: Vec }, - - /// Remove the asset(s) (`assets`) from holding and send a `WithdrawAsset` XCM message to a reserve location. - /// - /// - `assets`: The asset(s) to remove from holding. - /// - `reserve`: A valid location that acts as a reserve for all asset(s) in `assets`. The sovereign account - /// of this consensus system *on the reserve location* will have appropriate assets withdrawn and `effects` will - /// be executed on them. There will typically be only one valid location on any given asset/chain combination. - /// - `effects`: The orders to execute on the assets once withdrawn *on the reserve location*. - /// - /// Errors: - #[codec(index = 4)] - InitiateReserveWithdraw { - assets: Vec, - reserve: MultiLocation, - effects: Vec>, - }, - - /// Remove the asset(s) (`assets`) from holding and send a `TeleportAsset` XCM message to a destination location. - /// - /// - `assets`: The asset(s) to remove from holding. - /// - `destination`: A valid location that has a bi-lateral teleportation arrangement. - /// - `effects`: The orders to execute on the assets once arrived *on the destination location*. - /// - /// Errors: - #[codec(index = 5)] - InitiateTeleport { assets: Vec, dest: MultiLocation, effects: Vec> }, - - /// Send a `Balances` XCM message with the `assets` value equal to the holding contents, or a portion thereof. - /// - /// - `query_id`: An identifier that will be replicated into the returned XCM message. - /// - `dest`: A valid destination for the returned XCM message. This may be limited to the current origin. - /// - `assets`: A filter for the assets that should be reported back. The assets reported back will be, asset- - /// wise, *the lesser of this value and the holding account*. No wildcards will be used when reporting assets - /// back. - /// - /// Errors: - #[codec(index = 6)] - QueryHolding { - #[codec(compact)] - query_id: u64, - dest: MultiLocation, - assets: Vec, - }, - - /// Pay for the execution of some XCM with up to `weight` picoseconds of execution time, paying for this with - /// up to `fees` from the holding account. - /// - /// Errors: - #[codec(index = 7)] - BuyExecution { - fees: MultiAsset, - weight: u64, - debt: u64, - halt_on_error: bool, - xcm: Vec>, - }, -} - -pub mod opaque { - pub type Order = super::Order<()>; -} - -impl Order { - pub fn into(self) -> Order { - Order::from(self) - } - pub fn from(order: Order) -> Self { - use Order::*; - match order { - Null => Null, - DepositAsset { assets, dest } => DepositAsset { assets, dest }, - DepositReserveAsset { assets, dest, effects } => - DepositReserveAsset { assets, dest, effects }, - ExchangeAsset { give, receive } => ExchangeAsset { give, receive }, - InitiateReserveWithdraw { assets, reserve, effects } => - InitiateReserveWithdraw { assets, reserve, effects }, - InitiateTeleport { assets, dest, effects } => - InitiateTeleport { assets, dest, effects }, - QueryHolding { query_id, dest, assets } => QueryHolding { query_id, dest, assets }, - BuyExecution { fees, weight, debt, halt_on_error, xcm } => { - let xcm = xcm.into_iter().map(Xcm::from).collect(); - BuyExecution { fees, weight, debt, halt_on_error, xcm } - }, - } - } -} - -impl TryFrom> for Order { - type Error = (); - fn try_from(old: Order1) -> result::Result, ()> { - use Order::*; - Ok(match old { - Order1::Noop => Null, - Order1::DepositAsset { assets, beneficiary, .. } => - DepositAsset { assets: assets.try_into()?, dest: beneficiary.try_into()? }, - Order1::DepositReserveAsset { assets, dest, effects, .. } => DepositReserveAsset { - assets: assets.try_into()?, - dest: dest.try_into()?, - effects: effects - .into_iter() - .map(Order::<()>::try_from) - .collect::>()?, - }, - Order1::ExchangeAsset { give, receive } => - ExchangeAsset { give: give.try_into()?, receive: receive.try_into()? }, - Order1::InitiateReserveWithdraw { assets, reserve, effects } => - InitiateReserveWithdraw { - assets: assets.try_into()?, - reserve: reserve.try_into()?, - effects: effects - .into_iter() - .map(Order::<()>::try_from) - .collect::>()?, - }, - Order1::InitiateTeleport { assets, dest, effects } => InitiateTeleport { - assets: assets.try_into()?, - dest: dest.try_into()?, - effects: effects - .into_iter() - .map(Order::<()>::try_from) - .collect::>()?, - }, - Order1::QueryHolding { query_id, dest, assets } => - QueryHolding { query_id, dest: dest.try_into()?, assets: assets.try_into()? }, - Order1::BuyExecution { fees, weight, debt, halt_on_error, instructions } => { - let xcm = instructions - .into_iter() - .map(Xcm::::try_from) - .collect::>()?; - BuyExecution { fees: fees.try_into()?, weight, debt, halt_on_error, xcm } - }, - }) - } -} diff --git a/xcm/src/v0/traits.rs b/xcm/src/v0/traits.rs deleted file mode 100644 index ace93ef64ff5..000000000000 --- a/xcm/src/v0/traits.rs +++ /dev/null @@ -1,267 +0,0 @@ -// Copyright 2020 Parity Technologies (UK) Ltd. -// This file is part of Polkadot. - -// Polkadot is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Polkadot 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 Polkadot. If not, see . - -//! Cross-Consensus Message format data structures. - -use core::result; -use parity_scale_codec::{Decode, Encode}; - -use super::{MultiLocation, Xcm}; - -#[derive(Clone, Encode, Decode, Eq, PartialEq, Debug, scale_info::TypeInfo)] -pub enum Error { - Undefined, - /// An arithmetic overflow happened. - Overflow, - /// The operation is intentionally unsupported. - Unimplemented, - UnhandledXcmVersion, - /// The implementation does not handle a given XCM. - UnhandledXcmMessage, - /// The implementation does not handle an effect present in an XCM. - UnhandledEffect, - EscalationOfPrivilege, - UntrustedReserveLocation, - UntrustedTeleportLocation, - DestinationBufferOverflow, - /// The message and destination was recognized as being reachable but the operation could not be completed. - /// A human-readable explanation of the specific issue is provided. - SendFailed(#[codec(skip)] &'static str), - /// The message and destination combination was not recognized as being reachable. - CannotReachDestination(MultiLocation, Xcm<()>), - MultiLocationFull, - FailedToDecode, - BadOrigin, - ExceedsMaxMessageSize, - /// An asset transaction (like withdraw or deposit) failed. - /// See implementers of the `TransactAsset` trait for sources. - /// Causes can include type conversion failures between id or balance types. - FailedToTransactAsset(#[codec(skip)] &'static str), - /// Execution of the XCM would potentially result in a greater weight used than the pre-specified - /// weight limit. The amount that is potentially required is the parameter. - WeightLimitReached(Weight), - /// An asset wildcard was passed where it was not expected (e.g. as the asset to withdraw in a - /// `WithdrawAsset` XCM). - Wildcard, - /// The case where an XCM message has specified a weight limit on an interior call and this - /// limit is too low. - /// - /// Used by: - /// - `Transact` - MaxWeightInvalid, - /// The fees specified by the XCM message were not found in the holding account. - /// - /// Used by: - /// - `BuyExecution` - NotHoldingFees, - /// The weight of an XCM message is not computable ahead of execution. This generally means at least part - /// of the message is invalid, which could be due to it containing overly nested structures or an invalid - /// nested data segment (e.g. for the call in `Transact`). - WeightNotComputable, - /// The XCM did not pass the barrier condition for execution. The barrier condition differs on different - /// chains and in different circumstances, but generally it means that the conditions surrounding the message - /// were not such that the chain considers the message worth spending time executing. Since most chains - /// lift the barrier to execution on appropriate payment, presentation of an NFT voucher, or based on the - /// message origin, it means that none of those were the case. - Barrier, - /// Indicates that it is not possible for a location to have an asset be withdrawn or transferred from its - /// ownership. This probably means it doesn't own (enough of) it, but may also indicate that it is under a - /// lock, hold, freeze or is otherwise unavailable. - NotWithdrawable, - /// Indicates that the consensus system cannot deposit an asset under the ownership of a particular location. - LocationCannotHold, - /// The assets given to purchase weight is are insufficient for the weight desired. - TooExpensive, - /// The given asset is not handled. - AssetNotFound, - /// `execute_xcm` has been called too many times recursively. - RecursionLimitReached, -} - -impl From<()> for Error { - fn from(_: ()) -> Self { - Self::Undefined - } -} - -pub type Result = result::Result<(), Error>; - -/// Local weight type; execution time in picoseconds. -pub type Weight = u64; - -/// Outcome of an XCM execution. -#[derive(Clone, Encode, Decode, Eq, PartialEq, Debug, scale_info::TypeInfo)] -pub enum Outcome { - /// Execution completed successfully; given weight was used. - Complete(Weight), - /// Execution started, but did not complete successfully due to the given error; given weight was used. - Incomplete(Weight, Error), - /// Execution did not start due to the given error. - Error(Error), -} - -impl Outcome { - pub fn ensure_complete(self) -> Result { - match self { - Outcome::Complete(_) => Ok(()), - Outcome::Incomplete(_, e) => Err(e), - Outcome::Error(e) => Err(e), - } - } - pub fn ensure_execution(self) -> result::Result { - match self { - Outcome::Complete(w) => Ok(w), - Outcome::Incomplete(w, _) => Ok(w), - Outcome::Error(e) => Err(e), - } - } - /// How much weight was used by the XCM execution attempt. - pub fn weight_used(&self) -> Weight { - match self { - Outcome::Complete(w) => *w, - Outcome::Incomplete(w, _) => *w, - Outcome::Error(_) => 0, - } - } -} - -/// Type of XCM message executor. -pub trait ExecuteXcm { - /// Execute some XCM `message` from `origin` using no more than `weight_limit` weight. The weight limit is - /// a basic hard-limit and the implementation may place further restrictions or requirements on weight and - /// other aspects. - fn execute_xcm( - origin: MultiLocation, - message: Xcm, - weight_limit: Weight, - ) -> Outcome { - log::debug!( - target: "xcm::execute_xcm", - "origin: {:?}, message: {:?}, weight_limit: {:?}", - origin, - message, - weight_limit, - ); - Self::execute_xcm_in_credit(origin, message, weight_limit, 0) - } - - /// Execute some XCM `message` from `origin` using no more than `weight_limit` weight. - /// - /// Some amount of `weight_credit` may be provided which, depending on the implementation, may allow - /// execution without associated payment. - fn execute_xcm_in_credit( - origin: MultiLocation, - message: Xcm, - weight_limit: Weight, - weight_credit: Weight, - ) -> Outcome; -} - -impl ExecuteXcm for () { - fn execute_xcm_in_credit( - _origin: MultiLocation, - _message: Xcm, - _weight_limit: Weight, - _weight_credit: Weight, - ) -> Outcome { - Outcome::Error(Error::Unimplemented) - } -} - -/// Utility for sending an XCM message. -/// -/// These can be amalgamated in tuples to form sophisticated routing systems. In tuple format, each router might return -/// `CannotReachDestination` to pass the execution to the next sender item. Note that each `CannotReachDestination` -/// might alter the destination and the XCM message for to the next router. -/// -/// -/// # Example -/// ```rust -/// # use xcm::v0::{MultiLocation, Xcm, Junction, Error, OriginKind, SendXcm, Result}; -/// # use parity_scale_codec::Encode; -/// -/// /// A sender that only passes the message through and does nothing. -/// struct Sender1; -/// impl SendXcm for Sender1 { -/// fn send_xcm(destination: MultiLocation, message: Xcm<()>) -> Result { -/// return Err(Error::CannotReachDestination(destination, message)) -/// } -/// } -/// -/// /// A sender that accepts a message that has an X2 junction, otherwise stops the routing. -/// struct Sender2; -/// impl SendXcm for Sender2 { -/// fn send_xcm(destination: MultiLocation, message: Xcm<()>) -> Result { -/// if let MultiLocation::X2(j1, j2) = destination { -/// Ok(()) -/// } else { -/// Err(Error::Undefined) -/// } -/// } -/// } -/// -/// /// A sender that accepts a message from an X1 parent junction, passing through otherwise. -/// struct Sender3; -/// impl SendXcm for Sender3 { -/// fn send_xcm(destination: MultiLocation, message: Xcm<()>) -> Result { -/// match destination { -/// MultiLocation::X1(j) if j == Junction::Parent => Ok(()), -/// _ => Err(Error::CannotReachDestination(destination, message)), -/// } -/// } -/// } -/// -/// // A call to send via XCM. We don't really care about this. -/// # fn main() { -/// let call: Vec = ().encode(); -/// let message = Xcm::Transact { origin_type: OriginKind::Superuser, require_weight_at_most: 0, call: call.into() }; -/// let destination = MultiLocation::X1(Junction::Parent); -/// -/// assert!( -/// // Sender2 will block this. -/// <(Sender1, Sender2, Sender3) as SendXcm>::send_xcm(destination.clone(), message.clone()) -/// .is_err() -/// ); -/// -/// assert!( -/// // Sender3 will catch this. -/// <(Sender1, Sender3) as SendXcm>::send_xcm(destination.clone(), message.clone()) -/// .is_ok() -/// ); -/// # } -/// ``` -pub trait SendXcm { - /// Send an XCM `message` to a given `destination`. - /// - /// If it is not a destination which can be reached with this type but possibly could by others, then it *MUST* - /// return `CannotReachDestination`. Any other error will cause the tuple implementation to exit early without - /// trying other type fields. - fn send_xcm(destination: MultiLocation, message: Xcm<()>) -> Result; -} - -#[impl_trait_for_tuples::impl_for_tuples(30)] -impl SendXcm for Tuple { - fn send_xcm(destination: MultiLocation, message: Xcm<()>) -> Result { - for_tuples!( #( - // we shadow `destination` and `message` in each expansion for the next one. - let (destination, message) = match Tuple::send_xcm(destination, message) { - Err(Error::CannotReachDestination(d, m)) => (d, m), - o @ _ => return o, - }; - )* ); - Err(Error::CannotReachDestination(destination, message)) - } -} diff --git a/xcm/src/v1/mod.rs b/xcm/src/v1/mod.rs deleted file mode 100644 index 7703425149a4..000000000000 --- a/xcm/src/v1/mod.rs +++ /dev/null @@ -1,518 +0,0 @@ -// Copyright 2020 Parity Technologies (UK) Ltd. -// This file is part of Polkadot. - -// Polkadot is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Polkadot 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 Polkadot. If not, see . - -//! # XCM Version 1 -//! Version 1 of the Cross-Consensus Message format data structures. The comprehensive list of -//! changes can be found in -//! [this PR description](https://github.com/paritytech/polkadot/pull/2815#issue-608567900). -//! -//! ## Changes to be aware of -//! Most changes should automatically be resolved via the conversion traits (i.e. `TryFrom` and -//! `From`). The list here is mostly for incompatible changes that result in an `Err(())` when -//! attempting to convert XCM objects from v0. -//! -//! ### Junction -//! - `v0::Junction::Parent` cannot be converted to v1, because the way we represent parents in v1 -//! has changed - instead of being a property of the junction, v1 `MultiLocation`s now have an -//! extra field representing the number of parents that the `MultiLocation` contains. -//! -//! ### `MultiLocation` -//! - The `try_from` conversion method will always canonicalize the v0 `MultiLocation` before -//! attempting to do the proper conversion. Since canonicalization is not a fallible operation, -//! we do not expect v0 `MultiLocation` to ever fail to be upgraded to v1. -//! -//! ### `MultiAsset` -//! - Stronger typing to differentiate between a single class of `MultiAsset` and several classes -//! of `MultiAssets` is introduced. As the name suggests, a `Vec` that is used on all -//! APIs will instead be using a new type called `MultiAssets` (note the `s`). -//! - All `MultiAsset` variants whose name contains "All" in it, namely `v0::MultiAsset::All`, -//! `v0::MultiAsset::AllFungible`, `v0::MultiAsset::AllNonFungible`, -//! `v0::MultiAsset::AllAbstractFungible`, `v0::MultiAsset::AllAbstractNonFungible`, -//! `v0::MultiAsset::AllConcreteFungible` and `v0::MultiAsset::AllConcreteNonFungible`, will fail -//! to convert to v1 `MultiAsset`, since v1 does not contain these variants. -//! - Similarly, all `MultiAsset` variants whose name contains "All" in it can be converted into a -//! `WildMultiAsset`. -//! - `v0::MultiAsset::None` is not represented at all in v1. -//! -//! ### XCM -//! - No special attention necessary -//! -//! ### Order -//! - `v1::Order::DepositAsset` and `v1::Order::DepositReserveAsset` both introduced a new -//! `max_asset` field that limits the maximum classes of assets that can be deposited. During -//! conversion from v0, the `max_asset` field defaults to 1. -//! - v1 Orders that contain `MultiAsset` as argument(s) will need to explicitly specify the amount -//! and details of assets. This is to prevent accidental misuse of `All` to possibly transfer, -//! spend or otherwise perform unintended operations on `All` assets. -//! - v1 Orders that do allow the notion of `All` to be used as wildcards, will instead use a new -//! type called `MultiAssetFilter`. - -use super::{ - v0::{Response as OldResponse, Xcm as OldXcm}, - v2::{Instruction, Response as NewResponse, Xcm as NewXcm}, -}; -use crate::DoubleEncoded; -use alloc::vec::Vec; -use core::{fmt::Debug, result}; -use derivative::Derivative; -use parity_scale_codec::{self, Decode, Encode}; -use scale_info::TypeInfo; - -mod junction; -mod multiasset; -mod multilocation; -mod order; -mod traits; // the new multiasset. - -pub use junction::Junction; -pub use multiasset::{ - AssetId, AssetInstance, Fungibility, MultiAsset, MultiAssetFilter, MultiAssets, - WildFungibility, WildMultiAsset, -}; -pub use multilocation::{ - Ancestor, AncestorThen, InteriorMultiLocation, Junctions, MultiLocation, Parent, ParentThen, -}; -pub use order::Order; -pub use traits::{Error, ExecuteXcm, Outcome, Result, SendXcm}; - -// These parts of XCM v0 have been unchanged in XCM v1, and are re-imported here. -pub use super::v0::{BodyId, BodyPart, NetworkId, OriginKind}; - -/// A prelude for importing all types typically used when interacting with XCM messages. -pub mod prelude { - pub use super::{ - junction::Junction::{self, *}, - opaque, - order::Order::{self, *}, - Ancestor, AncestorThen, - AssetId::{self, *}, - AssetInstance::{self, *}, - BodyId, BodyPart, Error as XcmError, ExecuteXcm, - Fungibility::{self, *}, - InteriorMultiLocation, - Junctions::{self, *}, - MultiAsset, - MultiAssetFilter::{self, *}, - MultiAssets, MultiLocation, - NetworkId::{self, *}, - OriginKind, Outcome, Parent, ParentThen, Response, Result as XcmResult, SendXcm, - WildFungibility::{self, Fungible as WildFungible, NonFungible as WildNonFungible}, - WildMultiAsset::{self, *}, - Xcm::{self, *}, - }; -} - -/// Response data to a query. -#[derive(Clone, Eq, PartialEq, Encode, Decode, Debug, TypeInfo)] -pub enum Response { - /// Some assets. - Assets(MultiAssets), - /// An XCM version. - Version(super::Version), -} - -/// Cross-Consensus Message: A message from one consensus system to another. -/// -/// Consensus systems that may send and receive messages include blockchains and smart contracts. -/// -/// All messages are delivered from a known *origin*, expressed as a `MultiLocation`. -/// -/// This is the inner XCM format and is version-sensitive. Messages are typically passed using the outer -/// XCM format, known as `VersionedXcm`. -#[derive(Derivative, Encode, Decode, TypeInfo)] -#[derivative(Clone(bound = ""), Eq(bound = ""), PartialEq(bound = ""), Debug(bound = ""))] -#[codec(encode_bound())] -#[codec(decode_bound())] -#[scale_info(bounds(), skip_type_params(RuntimeCall))] -pub enum Xcm { - /// Withdraw asset(s) (`assets`) from the ownership of `origin` and place them into `holding`. Execute the - /// orders (`effects`). - /// - /// - `assets`: The asset(s) to be withdrawn into holding. - /// - `effects`: The order(s) to execute on the holding register. - /// - /// Kind: *Instruction*. - /// - /// Errors: - #[codec(index = 0)] - WithdrawAsset { assets: MultiAssets, effects: Vec> }, - - /// Asset(s) (`assets`) have been received into the ownership of this system on the `origin` system. - /// - /// Some orders are given (`effects`) which should be executed once the corresponding derivative assets have - /// been placed into `holding`. - /// - /// - `assets`: The asset(s) that are minted into holding. - /// - `effects`: The order(s) to execute on the holding register. - /// - /// Safety: `origin` must be trusted to have received and be storing `assets` such that they may later be - /// withdrawn should this system send a corresponding message. - /// - /// Kind: *Trusted Indication*. - /// - /// Errors: - #[codec(index = 1)] - ReserveAssetDeposited { assets: MultiAssets, effects: Vec> }, - - /// Asset(s) (`assets`) have been destroyed on the `origin` system and equivalent assets should be - /// created on this system. - /// - /// Some orders are given (`effects`) which should be executed once the corresponding derivative assets have - /// been placed into the Holding Register. - /// - /// - `assets`: The asset(s) that are minted into the Holding Register. - /// - `effects`: The order(s) to execute on the Holding Register. - /// - /// Safety: `origin` must be trusted to have irrevocably destroyed the corresponding `assets` prior as a consequence - /// of sending this message. - /// - /// Kind: *Trusted Indication*. - /// - /// Errors: - #[codec(index = 2)] - ReceiveTeleportedAsset { assets: MultiAssets, effects: Vec> }, - - /// Indication of the contents of the holding register corresponding to the `QueryHolding` order of `query_id`. - /// - /// - `query_id`: The identifier of the query that resulted in this message being sent. - /// - `assets`: The message content. - /// - /// Safety: No concerns. - /// - /// Kind: *Information*. - /// - /// Errors: - #[codec(index = 3)] - QueryResponse { - #[codec(compact)] - query_id: u64, - response: Response, - }, - - /// Withdraw asset(s) (`assets`) from the ownership of `origin` and place equivalent assets under the - /// ownership of `beneficiary`. - /// - /// - `assets`: The asset(s) to be withdrawn. - /// - `beneficiary`: The new owner for the assets. - /// - /// Safety: No concerns. - /// - /// Kind: *Instruction*. - /// - /// Errors: - #[codec(index = 4)] - TransferAsset { assets: MultiAssets, beneficiary: MultiLocation }, - - /// Withdraw asset(s) (`assets`) from the ownership of `origin` and place equivalent assets under the - /// ownership of `dest` within this consensus system (i.e. its sovereign account). - /// - /// Send an onward XCM message to `dest` of `ReserveAssetDeposited` with the given `effects`. - /// - /// - `assets`: The asset(s) to be withdrawn. - /// - `dest`: The location whose sovereign account will own the assets and thus the effective beneficiary for the - /// assets and the notification target for the reserve asset deposit message. - /// - `effects`: The orders that should be contained in the `ReserveAssetDeposited` which is sent onwards to - /// `dest`. - /// - /// Safety: No concerns. - /// - /// Kind: *Instruction*. - /// - /// Errors: - #[codec(index = 5)] - TransferReserveAsset { assets: MultiAssets, dest: MultiLocation, effects: Vec> }, - - /// Apply the encoded transaction `call`, whose dispatch-origin should be `origin` as expressed by the kind - /// of origin `origin_type`. - /// - /// - `origin_type`: The means of expressing the message origin as a dispatch origin. - /// - `max_weight`: The weight of `call`; this should be at least the chain's calculated weight and will - /// be used in the weight determination arithmetic. - /// - `call`: The encoded transaction to be applied. - /// - /// Safety: No concerns. - /// - /// Kind: *Instruction*. - /// - /// Errors: - #[codec(index = 6)] - Transact { - origin_type: OriginKind, - require_weight_at_most: u64, - call: DoubleEncoded, - }, - - /// A message to notify about a new incoming HRMP channel. This message is meant to be sent by the - /// relay-chain to a para. - /// - /// - `sender`: The sender in the to-be opened channel. Also, the initiator of the channel opening. - /// - `max_message_size`: The maximum size of a message proposed by the sender. - /// - `max_capacity`: The maximum number of messages that can be queued in the channel. - /// - /// Safety: The message should originate directly from the relay-chain. - /// - /// Kind: *System Notification* - #[codec(index = 7)] - HrmpNewChannelOpenRequest { - #[codec(compact)] - sender: u32, - #[codec(compact)] - max_message_size: u32, - #[codec(compact)] - max_capacity: u32, - }, - - /// A message to notify about that a previously sent open channel request has been accepted by - /// the recipient. That means that the channel will be opened during the next relay-chain session - /// change. This message is meant to be sent by the relay-chain to a para. - /// - /// Safety: The message should originate directly from the relay-chain. - /// - /// Kind: *System Notification* - /// - /// Errors: - #[codec(index = 8)] - HrmpChannelAccepted { - #[codec(compact)] - recipient: u32, - }, - - /// A message to notify that the other party in an open channel decided to close it. In particular, - /// `initiator` is going to close the channel opened from `sender` to the `recipient`. The close - /// will be enacted at the next relay-chain session change. This message is meant to be sent by - /// the relay-chain to a para. - /// - /// Safety: The message should originate directly from the relay-chain. - /// - /// Kind: *System Notification* - /// - /// Errors: - #[codec(index = 9)] - HrmpChannelClosing { - #[codec(compact)] - initiator: u32, - #[codec(compact)] - sender: u32, - #[codec(compact)] - recipient: u32, - }, - - /// A message to indicate that the embedded XCM is actually arriving on behalf of some consensus - /// location within the origin. - /// - /// Kind: *Instruction* - /// - /// Errors: - #[codec(index = 10)] - RelayedFrom { who: InteriorMultiLocation, message: alloc::boxed::Box> }, - - /// Ask the destination system to respond with the most recent version of XCM that they - /// support in a `QueryResponse` instruction. Any changes to this should also elicit similar - /// responses when they happen. - /// - /// Kind: *Instruction* - #[codec(index = 11)] - SubscribeVersion { - #[codec(compact)] - query_id: u64, - #[codec(compact)] - max_response_weight: u64, - }, - - /// Cancel the effect of a previous `SubscribeVersion` instruction. - /// - /// Kind: *Instruction* - #[codec(index = 12)] - UnsubscribeVersion, -} - -impl Xcm { - pub fn into(self) -> Xcm { - Xcm::from(self) - } - pub fn from(xcm: Xcm) -> Self { - use Xcm::*; - match xcm { - WithdrawAsset { assets, effects } => - WithdrawAsset { assets, effects: effects.into_iter().map(Order::into).collect() }, - ReserveAssetDeposited { assets, effects } => ReserveAssetDeposited { - assets, - effects: effects.into_iter().map(Order::into).collect(), - }, - ReceiveTeleportedAsset { assets, effects } => ReceiveTeleportedAsset { - assets, - effects: effects.into_iter().map(Order::into).collect(), - }, - QueryResponse { query_id, response } => QueryResponse { query_id, response }, - TransferAsset { assets, beneficiary } => TransferAsset { assets, beneficiary }, - TransferReserveAsset { assets, dest, effects } => - TransferReserveAsset { assets, dest, effects }, - HrmpNewChannelOpenRequest { sender, max_message_size, max_capacity } => - HrmpNewChannelOpenRequest { sender, max_message_size, max_capacity }, - HrmpChannelAccepted { recipient } => HrmpChannelAccepted { recipient }, - HrmpChannelClosing { initiator, sender, recipient } => - HrmpChannelClosing { initiator, sender, recipient }, - Transact { origin_type, require_weight_at_most, call } => - Transact { origin_type, require_weight_at_most, call: call.into() }, - RelayedFrom { who, message } => - RelayedFrom { who, message: alloc::boxed::Box::new((*message).into()) }, - SubscribeVersion { query_id, max_response_weight } => - SubscribeVersion { query_id, max_response_weight }, - UnsubscribeVersion => UnsubscribeVersion, - } - } -} - -pub mod opaque { - /// The basic concrete type of `generic::Xcm`, which doesn't make any assumptions about the format of a - /// call other than it is pre-encoded. - pub type Xcm = super::Xcm<()>; - - pub use super::order::opaque::*; -} - -// Convert from a v0 response to a v1 response -impl TryFrom for Response { - type Error = (); - fn try_from(old_response: OldResponse) -> result::Result { - match old_response { - OldResponse::Assets(assets) => Ok(Self::Assets(assets.try_into()?)), - } - } -} - -impl TryFrom> for Xcm { - type Error = (); - fn try_from(old: OldXcm) -> result::Result, ()> { - use Xcm::*; - Ok(match old { - OldXcm::WithdrawAsset { assets, effects } => WithdrawAsset { - assets: assets.try_into()?, - effects: effects - .into_iter() - .map(Order::try_from) - .collect::>()?, - }, - OldXcm::ReserveAssetDeposit { assets, effects } => ReserveAssetDeposited { - assets: assets.try_into()?, - effects: effects - .into_iter() - .map(Order::try_from) - .collect::>()?, - }, - OldXcm::TeleportAsset { assets, effects } => ReceiveTeleportedAsset { - assets: assets.try_into()?, - effects: effects - .into_iter() - .map(Order::try_from) - .collect::>()?, - }, - OldXcm::QueryResponse { query_id, response } => - QueryResponse { query_id, response: response.try_into()? }, - OldXcm::TransferAsset { assets, dest } => - TransferAsset { assets: assets.try_into()?, beneficiary: dest.try_into()? }, - OldXcm::TransferReserveAsset { assets, dest, effects } => TransferReserveAsset { - assets: assets.try_into()?, - dest: dest.try_into()?, - effects: effects - .into_iter() - .map(Order::try_from) - .collect::>()?, - }, - OldXcm::HrmpNewChannelOpenRequest { sender, max_message_size, max_capacity } => - HrmpNewChannelOpenRequest { sender, max_message_size, max_capacity }, - OldXcm::HrmpChannelAccepted { recipient } => HrmpChannelAccepted { recipient }, - OldXcm::HrmpChannelClosing { initiator, sender, recipient } => - HrmpChannelClosing { initiator, sender, recipient }, - OldXcm::Transact { origin_type, require_weight_at_most, call } => - Transact { origin_type, require_weight_at_most, call: call.into() }, - OldXcm::RelayedFrom { who, message } => RelayedFrom { - who: MultiLocation::try_from(who)?.try_into()?, - message: alloc::boxed::Box::new((*message).try_into()?), - }, - }) - } -} - -impl TryFrom> for Xcm { - type Error = (); - fn try_from(old: NewXcm) -> result::Result, ()> { - use Xcm::*; - let mut iter = old.0.into_iter(); - let instruction = iter.next().ok_or(())?; - Ok(match instruction { - Instruction::WithdrawAsset(assets) => { - let effects = iter.map(Order::try_from).collect::>()?; - WithdrawAsset { assets, effects } - }, - Instruction::ReserveAssetDeposited(assets) => { - if !matches!(iter.next(), Some(Instruction::ClearOrigin)) { - return Err(()) - } - let effects = iter.map(Order::try_from).collect::>()?; - ReserveAssetDeposited { assets, effects } - }, - Instruction::ReceiveTeleportedAsset(assets) => { - if !matches!(iter.next(), Some(Instruction::ClearOrigin)) { - return Err(()) - } - let effects = iter.map(Order::try_from).collect::>()?; - ReceiveTeleportedAsset { assets, effects } - }, - Instruction::QueryResponse { query_id, response, max_weight } => { - // Cannot handle special response weights. - if max_weight > 0 { - return Err(()) - } - QueryResponse { query_id, response: response.try_into()? } - }, - Instruction::TransferAsset { assets, beneficiary } => - TransferAsset { assets, beneficiary }, - Instruction::TransferReserveAsset { assets, dest, xcm } => TransferReserveAsset { - assets, - dest, - effects: xcm - .0 - .into_iter() - .map(Order::try_from) - .collect::>()?, - }, - Instruction::HrmpNewChannelOpenRequest { sender, max_message_size, max_capacity } => - HrmpNewChannelOpenRequest { sender, max_message_size, max_capacity }, - Instruction::HrmpChannelAccepted { recipient } => HrmpChannelAccepted { recipient }, - Instruction::HrmpChannelClosing { initiator, sender, recipient } => - HrmpChannelClosing { initiator, sender, recipient }, - Instruction::Transact { origin_type, require_weight_at_most, call } => - Transact { origin_type, require_weight_at_most, call }, - Instruction::SubscribeVersion { query_id, max_response_weight } => - SubscribeVersion { query_id, max_response_weight }, - Instruction::UnsubscribeVersion => UnsubscribeVersion, - _ => return Err(()), - }) - } -} - -// Convert from a v1 response to a v2 response -impl TryFrom for Response { - type Error = (); - fn try_from(response: NewResponse) -> result::Result { - match response { - NewResponse::Assets(assets) => Ok(Self::Assets(assets)), - NewResponse::Version(version) => Ok(Self::Version(version)), - _ => Err(()), - } - } -} diff --git a/xcm/src/v1/order.rs b/xcm/src/v1/order.rs deleted file mode 100644 index 3076e2d43c36..000000000000 --- a/xcm/src/v1/order.rs +++ /dev/null @@ -1,292 +0,0 @@ -// Copyright 2020 Parity Technologies (UK) Ltd. -// This file is part of Polkadot. - -// Polkadot is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Polkadot 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 Polkadot. If not, see . - -//! Version 1 of the Cross-Consensus Message format data structures. - -use super::{MultiAsset, MultiAssetFilter, MultiAssets, MultiLocation, Xcm}; -use crate::{v0::Order as OldOrder, v2::Instruction}; -use alloc::{vec, vec::Vec}; -use core::result; -use derivative::Derivative; -use parity_scale_codec::{self, Decode, Encode}; -use scale_info::TypeInfo; - -/// An instruction to be executed on some or all of the assets in holding, used by asset-related XCM messages. -#[derive(Derivative, Encode, Decode, TypeInfo)] -#[derivative(Clone(bound = ""), Eq(bound = ""), PartialEq(bound = ""), Debug(bound = ""))] -#[codec(encode_bound())] -#[codec(decode_bound())] -#[scale_info(bounds(), skip_type_params(RuntimeCall))] -pub enum Order { - /// Do nothing. Not generally used. - #[codec(index = 0)] - Noop, - - /// Remove the asset(s) (`assets`) from holding and place equivalent assets under the ownership of `beneficiary` - /// within this consensus system. - /// - /// - `assets`: The asset(s) to remove from holding. - /// - `max_assets`: The maximum number of unique assets/asset instances to remove from holding. Only the first - /// `max_assets` assets/instances of those matched by `assets` will be removed, prioritized under standard asset - /// ordering. Any others will remain in holding. - /// - `beneficiary`: The new owner for the assets. - /// - /// Errors: - #[codec(index = 1)] - DepositAsset { assets: MultiAssetFilter, max_assets: u32, beneficiary: MultiLocation }, - - /// Remove the asset(s) (`assets`) from holding and place equivalent assets under the ownership of `dest` within - /// this consensus system (i.e. its sovereign account). - /// - /// Send an onward XCM message to `dest` of `ReserveAssetDeposited` with the given `effects`. - /// - /// - `assets`: The asset(s) to remove from holding. - /// - `max_assets`: The maximum number of unique assets/asset instances to remove from holding. Only the first - /// `max_assets` assets/instances of those matched by `assets` will be removed, prioritized under standard asset - /// ordering. Any others will remain in holding. - /// - `dest`: The location whose sovereign account will own the assets and thus the effective beneficiary for the - /// assets and the notification target for the reserve asset deposit message. - /// - `effects`: The orders that should be contained in the `ReserveAssetDeposited` which is sent onwards to - /// `dest`. - /// - /// Errors: - #[codec(index = 2)] - DepositReserveAsset { - assets: MultiAssetFilter, - max_assets: u32, - dest: MultiLocation, - effects: Vec>, - }, - - /// Remove the asset(s) (`give`) from holding and replace them with alternative assets. - /// - /// The minimum amount of assets to be received into holding for the order not to fail may be stated. - /// - /// - `give`: The asset(s) to remove from holding. - /// - `receive`: The minimum amount of assets(s) which `give` should be exchanged for. - /// - /// Errors: - #[codec(index = 3)] - ExchangeAsset { give: MultiAssetFilter, receive: MultiAssets }, - - /// Remove the asset(s) (`assets`) from holding and send a `WithdrawAsset` XCM message to a reserve location. - /// - /// - `assets`: The asset(s) to remove from holding. - /// - `reserve`: A valid location that acts as a reserve for all asset(s) in `assets`. The sovereign account - /// of this consensus system *on the reserve location* will have appropriate assets withdrawn and `effects` will - /// be executed on them. There will typically be only one valid location on any given asset/chain combination. - /// - `effects`: The orders to execute on the assets once withdrawn *on the reserve location*. - /// - /// Errors: - #[codec(index = 4)] - InitiateReserveWithdraw { - assets: MultiAssetFilter, - reserve: MultiLocation, - effects: Vec>, - }, - - /// Remove the asset(s) (`assets`) from holding and send a `ReceiveTeleportedAsset` XCM message to a `destination` - /// location. - /// - /// - `assets`: The asset(s) to remove from holding. - /// - `destination`: A valid location that has a bi-lateral teleportation arrangement. - /// - `effects`: The orders to execute on the assets once arrived *on the destination location*. - /// - /// NOTE: The `destination` location *MUST* respect this origin as a valid teleportation origin for all `assets`. - /// If it does not, then the assets may be lost. - /// - /// Errors: - #[codec(index = 5)] - InitiateTeleport { assets: MultiAssetFilter, dest: MultiLocation, effects: Vec> }, - - /// Send a `Balances` XCM message with the `assets` value equal to the holding contents, or a portion thereof. - /// - /// - `query_id`: An identifier that will be replicated into the returned XCM message. - /// - `dest`: A valid destination for the returned XCM message. This may be limited to the current origin. - /// - `assets`: A filter for the assets that should be reported back. The assets reported back will be, asset- - /// wise, *the lesser of this value and the holding register*. No wildcards will be used when reporting assets - /// back. - /// - /// Errors: - #[codec(index = 6)] - QueryHolding { - #[codec(compact)] - query_id: u64, - dest: MultiLocation, - assets: MultiAssetFilter, - }, - - /// Pay for the execution of some XCM `instructions` and `orders` with up to `weight` picoseconds of execution time, - /// paying for this with up to `fees` from the Holding Register. - /// - /// - `fees`: The asset(s) to remove from holding to pay for fees. - /// - `weight`: The amount of weight to purchase; this should be at least the shallow weight of `effects` and `xcm`. - /// - `debt`: The amount of weight-debt already incurred to be paid off; this should be equal to the unpaid weight of - /// any surrounding operations/orders. - /// - `halt_on_error`: If `true`, the execution of the `orders` and `operations` will halt on the first failure. If - /// `false`, then execution will continue regardless. - /// - `instructions`: XCM instructions to be executed outside of the context of the current Holding Register; - /// execution of these instructions happens AFTER the execution of the `orders`. The (shallow) weight for these - /// must be paid for with the `weight` purchased. - /// Errors: - #[codec(index = 7)] - BuyExecution { - fees: MultiAsset, - weight: u64, - debt: u64, - halt_on_error: bool, - instructions: Vec>, - }, -} - -pub mod opaque { - pub type Order = super::Order<()>; -} - -impl Order { - pub fn into(self) -> Order { - Order::from(self) - } - pub fn from(order: Order) -> Self { - use Order::*; - match order { - Noop => Noop, - DepositAsset { assets, max_assets, beneficiary } => - DepositAsset { assets, max_assets, beneficiary }, - DepositReserveAsset { assets, max_assets, dest, effects } => - DepositReserveAsset { assets, max_assets, dest, effects }, - ExchangeAsset { give, receive } => ExchangeAsset { give, receive }, - InitiateReserveWithdraw { assets, reserve, effects } => - InitiateReserveWithdraw { assets, reserve, effects }, - InitiateTeleport { assets, dest, effects } => - InitiateTeleport { assets, dest, effects }, - QueryHolding { query_id, dest, assets } => QueryHolding { query_id, dest, assets }, - BuyExecution { fees, weight, debt, halt_on_error, instructions } => { - let instructions = instructions.into_iter().map(Xcm::from).collect(); - BuyExecution { fees, weight, debt, halt_on_error, instructions } - }, - } - } -} - -impl TryFrom> for Order { - type Error = (); - fn try_from(old: OldOrder) -> result::Result, ()> { - use Order::*; - Ok(match old { - OldOrder::Null => Noop, - OldOrder::DepositAsset { assets, dest } => DepositAsset { - assets: assets.try_into()?, - max_assets: 1, - beneficiary: dest.try_into()?, - }, - OldOrder::DepositReserveAsset { assets, dest, effects } => DepositReserveAsset { - assets: assets.try_into()?, - max_assets: 1, - dest: dest.try_into()?, - effects: effects - .into_iter() - .map(Order::<()>::try_from) - .collect::>()?, - }, - OldOrder::ExchangeAsset { give, receive } => - ExchangeAsset { give: give.try_into()?, receive: receive.try_into()? }, - OldOrder::InitiateReserveWithdraw { assets, reserve, effects } => - InitiateReserveWithdraw { - assets: assets.try_into()?, - reserve: reserve.try_into()?, - effects: effects - .into_iter() - .map(Order::<()>::try_from) - .collect::>()?, - }, - OldOrder::InitiateTeleport { assets, dest, effects } => InitiateTeleport { - assets: assets.try_into()?, - dest: dest.try_into()?, - effects: effects - .into_iter() - .map(Order::<()>::try_from) - .collect::>()?, - }, - OldOrder::QueryHolding { query_id, dest, assets } => - QueryHolding { query_id, dest: dest.try_into()?, assets: assets.try_into()? }, - OldOrder::BuyExecution { fees, weight, debt, halt_on_error, xcm } => { - let instructions = xcm - .into_iter() - .map(Xcm::::try_from) - .collect::>()?; - BuyExecution { fees: fees.try_into()?, weight, debt, halt_on_error, instructions } - }, - }) - } -} - -impl TryFrom> for Order { - type Error = (); - fn try_from(old: Instruction) -> result::Result, ()> { - use Order::*; - Ok(match old { - Instruction::DepositAsset { assets, max_assets, beneficiary } => - DepositAsset { assets, max_assets, beneficiary }, - Instruction::DepositReserveAsset { assets, max_assets, dest, xcm } => - DepositReserveAsset { - assets, - max_assets, - dest, - effects: xcm - .0 - .into_iter() - .map(Order::<()>::try_from) - .collect::>()?, - }, - Instruction::ExchangeAsset { give, receive } => ExchangeAsset { give, receive }, - Instruction::InitiateReserveWithdraw { assets, reserve, xcm } => - InitiateReserveWithdraw { - assets, - reserve, - effects: xcm - .0 - .into_iter() - .map(Order::<()>::try_from) - .collect::>()?, - }, - Instruction::InitiateTeleport { assets, dest, xcm } => InitiateTeleport { - assets, - dest, - effects: xcm - .0 - .into_iter() - .map(Order::<()>::try_from) - .collect::>()?, - }, - Instruction::QueryHolding { query_id, dest, assets, max_response_weight } => { - // Cannot handle special response weights. - if max_response_weight > 0 { - return Err(()) - } - QueryHolding { query_id, dest, assets } - }, - Instruction::BuyExecution { fees, weight_limit } => { - let instructions = vec![]; - let halt_on_error = true; - let weight = 0; - let debt = Option::::from(weight_limit).ok_or(())?; - BuyExecution { fees, weight, debt, halt_on_error, instructions } - }, - _ => return Err(()), - }) - } -} diff --git a/xcm/src/v1/traits.rs b/xcm/src/v1/traits.rs deleted file mode 100644 index e4b3542d41a4..000000000000 --- a/xcm/src/v1/traits.rs +++ /dev/null @@ -1,277 +0,0 @@ -// Copyright 2020 Parity Technologies (UK) Ltd. -// This file is part of Polkadot. - -// Polkadot is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Polkadot 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 Polkadot. If not, see . - -//! Cross-Consensus Message format data structures. - -use core::result; -use parity_scale_codec::{Decode, Encode}; -use scale_info::TypeInfo; - -use super::{MultiLocation, Xcm}; - -#[derive(Clone, Encode, Decode, Eq, PartialEq, Debug, TypeInfo)] -pub enum Error { - Undefined, - /// An arithmetic overflow happened. - Overflow, - /// The operation is intentionally unsupported. - Unimplemented, - UnhandledXcmVersion, - /// The implementation does not handle a given XCM. - UnhandledXcmMessage, - /// The implementation does not handle an effect present in an XCM. - UnhandledEffect, - EscalationOfPrivilege, - UntrustedReserveLocation, - UntrustedTeleportLocation, - DestinationBufferOverflow, - /// The message and destination was recognized as being reachable but the operation could not be completed. - /// A human-readable explanation of the specific issue is provided. - SendFailed(#[codec(skip)] &'static str), - /// The message and destination combination was not recognized as being reachable. - CannotReachDestination(MultiLocation, Xcm<()>), - MultiLocationFull, - FailedToDecode, - BadOrigin, - ExceedsMaxMessageSize, - /// An asset transaction (like withdraw or deposit) failed. - /// See implementers of the `TransactAsset` trait for sources. - /// Causes can include type conversion failures between id or balance types. - FailedToTransactAsset(#[codec(skip)] &'static str), - /// Execution of the XCM would potentially result in a greater weight used than the pre-specified - /// weight limit. The amount that is potentially required is the parameter. - WeightLimitReached(Weight), - /// An asset wildcard was passed where it was not expected (e.g. as the asset to withdraw in a - /// `WithdrawAsset` XCM). - Wildcard, - /// The case where an XCM message has specified a weight limit on an interior call and this - /// limit is too low. - /// - /// Used by: - /// - `Transact` - MaxWeightInvalid, - /// The fees specified by the XCM message were not found in the holding register. - /// - /// Used by: - /// - `BuyExecution` - NotHoldingFees, - /// The weight of an XCM message is not computable ahead of execution. This generally means at least part - /// of the message is invalid, which could be due to it containing overly nested structures or an invalid - /// nested data segment (e.g. for the call in `Transact`). - WeightNotComputable, - /// The XCM did not pass the barrier condition for execution. The barrier condition differs on different - /// chains and in different circumstances, but generally it means that the conditions surrounding the message - /// were not such that the chain considers the message worth spending time executing. Since most chains - /// lift the barrier to execution on appropriate payment, presentation of an NFT voucher, or based on the - /// message origin, it means that none of those were the case. - Barrier, - /// Indicates that it is not possible for a location to have an asset be withdrawn or transferred from its - /// ownership. This probably means it doesn't own (enough of) it, but may also indicate that it is under a - /// lock, hold, freeze or is otherwise unavailable. - NotWithdrawable, - /// Indicates that the consensus system cannot deposit an asset under the ownership of a particular location. - LocationCannotHold, - /// The assets given to purchase weight is are insufficient for the weight desired. - TooExpensive, - /// The given asset is not handled. - AssetNotFound, - /// The given message cannot be translated into a format that the destination can be expected to interpret. - DestinationUnsupported, - /// `execute_xcm` has been called too many times recursively. - RecursionLimitReached, -} - -impl From<()> for Error { - fn from(_: ()) -> Self { - Self::Undefined - } -} - -pub type Result = result::Result<(), Error>; - -/// Local weight type; execution time in picoseconds. -pub type Weight = u64; - -/// Outcome of an XCM execution. -#[derive(Clone, Encode, Decode, Eq, PartialEq, Debug, TypeInfo)] -pub enum Outcome { - /// Execution completed successfully; given weight was used. - Complete(Weight), - /// Execution started, but did not complete successfully due to the given error; given weight was used. - Incomplete(Weight, Error), - /// Execution did not start due to the given error. - Error(Error), -} - -impl Outcome { - pub fn ensure_complete(self) -> Result { - match self { - Outcome::Complete(_) => Ok(()), - Outcome::Incomplete(_, e) => Err(e), - Outcome::Error(e) => Err(e), - } - } - pub fn ensure_execution(self) -> result::Result { - match self { - Outcome::Complete(w) => Ok(w), - Outcome::Incomplete(w, _) => Ok(w), - Outcome::Error(e) => Err(e), - } - } - /// How much weight was used by the XCM execution attempt. - pub fn weight_used(&self) -> Weight { - match self { - Outcome::Complete(w) => *w, - Outcome::Incomplete(w, _) => *w, - Outcome::Error(_) => 0, - } - } -} - -/// Type of XCM message executor. -pub trait ExecuteXcm { - /// Execute some XCM `message` from `origin` using no more than `weight_limit` weight. The weight limit is - /// a basic hard-limit and the implementation may place further restrictions or requirements on weight and - /// other aspects. - fn execute_xcm( - origin: impl Into, - message: Xcm, - weight_limit: Weight, - ) -> Outcome { - let origin = origin.into(); - log::debug!( - target: "xcm::execute_xcm", - "origin: {:?}, message: {:?}, weight_limit: {:?}", - origin, - message, - weight_limit, - ); - Self::execute_xcm_in_credit(origin, message, weight_limit, 0) - } - - /// Execute some XCM `message` from `origin` using no more than `weight_limit` weight. - /// - /// Some amount of `weight_credit` may be provided which, depending on the implementation, may allow - /// execution without associated payment. - fn execute_xcm_in_credit( - origin: impl Into, - message: Xcm, - weight_limit: Weight, - weight_credit: Weight, - ) -> Outcome; -} - -impl ExecuteXcm for () { - fn execute_xcm_in_credit( - _origin: impl Into, - _message: Xcm, - _weight_limit: Weight, - _weight_credit: Weight, - ) -> Outcome { - Outcome::Error(Error::Unimplemented) - } -} - -/// Utility for sending an XCM message. -/// -/// These can be amalgamated in tuples to form sophisticated routing systems. In tuple format, each router might return -/// `CannotReachDestination` to pass the execution to the next sender item. Note that each `CannotReachDestination` -/// might alter the destination and the XCM message for to the next router. -/// -/// -/// # Example -/// ```rust -/// # use xcm::v1::{MultiLocation, Xcm, Junction, Junctions, Error, OriginKind, SendXcm, Result, Parent}; -/// # use parity_scale_codec::Encode; -/// -/// /// A sender that only passes the message through and does nothing. -/// struct Sender1; -/// impl SendXcm for Sender1 { -/// fn send_xcm(destination: impl Into, message: Xcm<()>) -> Result { -/// return Err(Error::CannotReachDestination(destination.into(), message)) -/// } -/// } -/// -/// /// A sender that accepts a message that has an X2 junction, otherwise stops the routing. -/// struct Sender2; -/// impl SendXcm for Sender2 { -/// fn send_xcm(destination: impl Into, message: Xcm<()>) -> Result { -/// let destination = destination.into(); -/// if matches!(destination.interior(), Junctions::X2(j1, j2)) -/// && destination.parent_count() == 0 -/// { -/// Ok(()) -/// } else { -/// Err(Error::Undefined) -/// } -/// } -/// } -/// -/// /// A sender that accepts a message from an X1 parent junction, passing through otherwise. -/// struct Sender3; -/// impl SendXcm for Sender3 { -/// fn send_xcm(destination: impl Into, message: Xcm<()>) -> Result { -/// let destination = destination.into(); -/// if matches!(destination.interior(), Junctions::Here) -/// && destination.parent_count() == 1 -/// { -/// Ok(()) -/// } else { -/// Err(Error::CannotReachDestination(destination, message)) -/// } -/// } -/// } -/// -/// // A call to send via XCM. We don't really care about this. -/// # fn main() { -/// let call: Vec = ().encode(); -/// let message = Xcm::Transact { origin_type: OriginKind::Superuser, require_weight_at_most: 0, call: call.into() }; -/// -/// assert!( -/// // Sender2 will block this. -/// <(Sender1, Sender2, Sender3) as SendXcm>::send_xcm(Parent, message.clone()) -/// .is_err() -/// ); -/// -/// assert!( -/// // Sender3 will catch this. -/// <(Sender1, Sender3) as SendXcm>::send_xcm(Parent, message.clone()) -/// .is_ok() -/// ); -/// # } -/// ``` -pub trait SendXcm { - /// Send an XCM `message` to a given `destination`. - /// - /// If it is not a destination which can be reached with this type but possibly could by others, then it *MUST* - /// return `CannotReachDestination`. Any other error will cause the tuple implementation to exit early without - /// trying other type fields. - fn send_xcm(destination: impl Into, message: Xcm<()>) -> Result; -} - -#[impl_trait_for_tuples::impl_for_tuples(30)] -impl SendXcm for Tuple { - fn send_xcm(destination: impl Into, message: Xcm<()>) -> Result { - for_tuples!( #( - // we shadow `destination` and `message` in each expansion for the next one. - let (destination, message) = match Tuple::send_xcm(destination, message) { - Err(Error::CannotReachDestination(d, m)) => (d, m), - o @ _ => return o, - }; - )* ); - Err(Error::CannotReachDestination(destination.into(), message)) - } -} diff --git a/xcm/src/v1/junction.rs b/xcm/src/v2/junction.rs similarity index 77% rename from xcm/src/v1/junction.rs rename to xcm/src/v2/junction.rs index 4ab485beca9f..87fe6d8ff20e 100644 --- a/xcm/src/v1/junction.rs +++ b/xcm/src/v2/junction.rs @@ -17,15 +17,16 @@ //! Support data structures for `MultiLocation`, primarily the `Junction` datatype. use super::{BodyId, BodyPart, Junctions, MultiLocation, NetworkId}; -use crate::v0::Junction as Junction0; +use crate::v3::Junction as NewJunction; +use bounded_collections::{ConstU32, WeakBoundedVec}; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; -use sp_runtime::{traits::ConstU32, WeakBoundedVec}; /// A single item in a path to describe the relative location of a consensus system. /// /// Each item assumes a pre-existing location as its context and is defined in terms of it. #[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, Debug, TypeInfo, MaxEncodedLen)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] pub enum Junction { /// An indexed parachain belonging to and operated by the context. /// @@ -77,23 +78,30 @@ pub enum Junction { Plurality { id: BodyId, part: BodyPart }, } -impl TryFrom for Junction { +impl TryFrom for Junction { type Error = (); - fn try_from(value: Junction0) -> Result { - match value { - Junction0::Parent => Err(()), - Junction0::Parachain(id) => Ok(Self::Parachain(id)), - Junction0::AccountId32 { network, id } => Ok(Self::AccountId32 { network, id }), - Junction0::AccountIndex64 { network, index } => - Ok(Self::AccountIndex64 { network, index }), - Junction0::AccountKey20 { network, key } => Ok(Self::AccountKey20 { network, key }), - Junction0::PalletInstance(index) => Ok(Self::PalletInstance(index)), - Junction0::GeneralIndex(id) => Ok(Self::GeneralIndex(id)), - Junction0::GeneralKey(key) => Ok(Self::GeneralKey(key)), - Junction0::OnlyChild => Ok(Self::OnlyChild), - Junction0::Plurality { id, part } => Ok(Self::Plurality { id: id.into(), part }), - } + fn try_from(value: NewJunction) -> Result { + use NewJunction::*; + Ok(match value { + Parachain(id) => Self::Parachain(id), + AccountId32 { network, id } => Self::AccountId32 { network: network.try_into()?, id }, + AccountIndex64 { network, index } => + Self::AccountIndex64 { network: network.try_into()?, index }, + AccountKey20 { network, key } => + Self::AccountKey20 { network: network.try_into()?, key }, + PalletInstance(index) => Self::PalletInstance(index), + GeneralIndex(id) => Self::GeneralIndex(id), + GeneralKey { length, data } => Self::GeneralKey( + data[0..data.len().min(length as usize)] + .to_vec() + .try_into() + .expect("key is bounded to 32 and so will never be out of bounds; qed"), + ), + OnlyChild => Self::OnlyChild, + Plurality { id, part } => Self::Plurality { id: id.into(), part: part.into() }, + _ => return Err(()), + }) } } diff --git a/xcm/src/v2/mod.rs b/xcm/src/v2/mod.rs index 50f15689fc2c..57b851bd62a9 100644 --- a/xcm/src/v2/mod.rs +++ b/xcm/src/v2/mod.rs @@ -50,23 +50,198 @@ //! `DepositAsset` instructions. Failing that, dispatch calls to `teleport_assets` and //! `reserve_transfer_assets` will fail with `UnweighableMessage`. -use super::v1::{Order as OldOrder, Response as OldResponse, Xcm as OldXcm}; -use crate::{DoubleEncoded, GetWeight}; +use super::{ + v3::{ + BodyId as NewBodyId, BodyPart as NewBodyPart, Instruction as NewInstruction, + NetworkId as NewNetworkId, Response as NewResponse, WeightLimit as NewWeightLimit, + Xcm as NewXcm, + }, + DoubleEncoded, GetWeight, +}; use alloc::{vec, vec::Vec}; +use bounded_collections::{ConstU32, WeakBoundedVec}; use core::{fmt::Debug, result}; use derivative::Derivative; -use parity_scale_codec::{self, Decode, Encode}; +use parity_scale_codec::{self, Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; +mod junction; +mod multiasset; +mod multilocation; mod traits; -pub use traits::{Error, ExecuteXcm, Outcome, Result, SendError, SendResult, SendXcm}; -// These parts of XCM v1 have been unchanged in XCM v2, and are re-imported here. -pub use super::v1::{ - Ancestor, AncestorThen, AssetId, AssetInstance, BodyId, BodyPart, Fungibility, - InteriorMultiLocation, Junction, Junctions, MultiAsset, MultiAssetFilter, MultiAssets, - MultiLocation, NetworkId, OriginKind, Parent, ParentThen, WildFungibility, WildMultiAsset, +pub use junction::Junction; +pub use multiasset::{ + AssetId, AssetInstance, Fungibility, MultiAsset, MultiAssetFilter, MultiAssets, + WildFungibility, WildMultiAsset, +}; +pub use multilocation::{ + Ancestor, AncestorThen, InteriorMultiLocation, Junctions, MultiLocation, Parent, ParentThen, }; +pub use traits::{Error, ExecuteXcm, Outcome, Result, SendError, SendResult, SendXcm}; + +/// Basically just the XCM (more general) version of `ParachainDispatchOrigin`. +#[derive(Copy, Clone, Eq, PartialEq, Encode, Decode, Debug, TypeInfo)] +pub enum OriginKind { + /// Origin should just be the native dispatch origin representation for the sender in the + /// local runtime framework. For Cumulus/Frame chains this is the `Parachain` or `Relay` origin + /// if coming from a chain, though there may be others if the `MultiLocation` XCM origin has a + /// primary/native dispatch origin form. + Native, + + /// Origin should just be the standard account-based origin with the sovereign account of + /// the sender. For Cumulus/Frame chains, this is the `Signed` origin. + SovereignAccount, + + /// Origin should be the super-user. For Cumulus/Frame chains, this is the `Root` origin. + /// This will not usually be an available option. + Superuser, + + /// Origin should be interpreted as an XCM native origin and the `MultiLocation` should be + /// encoded directly in the dispatch origin unchanged. For Cumulus/Frame chains, this will be + /// the `pallet_xcm::Origin::Xcm` type. + Xcm, +} + +/// A global identifier of an account-bearing consensus system. +#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, Debug, TypeInfo, MaxEncodedLen)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] +pub enum NetworkId { + /// Unidentified/any. + Any, + /// Some named network. + Named(WeakBoundedVec>), + /// The Polkadot Relay chain + Polkadot, + /// Kusama. + Kusama, +} + +impl TryInto for Option { + type Error = (); + fn try_into(self) -> result::Result { + use NewNetworkId::*; + Ok(match self { + None => NetworkId::Any, + Some(Polkadot) => NetworkId::Polkadot, + Some(Kusama) => NetworkId::Kusama, + _ => return Err(()), + }) + } +} + +/// An identifier of a pluralistic body. +#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, Debug, TypeInfo, MaxEncodedLen)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] +pub enum BodyId { + /// The only body in its context. + Unit, + /// A named body. + Named(WeakBoundedVec>), + /// An indexed body. + Index(#[codec(compact)] u32), + /// The unambiguous executive body (for Polkadot, this would be the Polkadot council). + Executive, + /// The unambiguous technical body (for Polkadot, this would be the Technical Committee). + Technical, + /// The unambiguous legislative body (for Polkadot, this could be considered the opinion of a majority of + /// lock-voters). + Legislative, + /// The unambiguous judicial body (this doesn't exist on Polkadot, but if it were to get a "grand oracle", it + /// may be considered as that). + Judicial, + /// The unambiguous defense body (for Polkadot, an opinion on the topic given via a public referendum + /// on the `staking_admin` track). + Defense, + /// The unambiguous administration body (for Polkadot, an opinion on the topic given via a public referendum + /// on the `general_admin` track). + Administration, + /// The unambiguous treasury body (for Polkadot, an opinion on the topic given via a public referendum + /// on the `treasurer` track). + Treasury, +} + +impl From for BodyId { + fn from(n: NewBodyId) -> Self { + use NewBodyId::*; + match n { + Unit => Self::Unit, + Moniker(n) => Self::Named( + n[..] + .to_vec() + .try_into() + .expect("array size is 4 and so will never be out of bounds; qed"), + ), + Index(n) => Self::Index(n), + Executive => Self::Executive, + Technical => Self::Technical, + Legislative => Self::Legislative, + Judicial => Self::Judicial, + Defense => Self::Defense, + Administration => Self::Administration, + Treasury => Self::Treasury, + } + } +} + +/// A part of a pluralistic body. +#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, Debug, TypeInfo, MaxEncodedLen)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] +pub enum BodyPart { + /// The body's declaration, under whatever means it decides. + Voice, + /// A given number of members of the body. + Members { + #[codec(compact)] + count: u32, + }, + /// A given number of members of the body, out of some larger caucus. + Fraction { + #[codec(compact)] + nom: u32, + #[codec(compact)] + denom: u32, + }, + /// No less than the given proportion of members of the body. + AtLeastProportion { + #[codec(compact)] + nom: u32, + #[codec(compact)] + denom: u32, + }, + /// More than than the given proportion of members of the body. + MoreThanProportion { + #[codec(compact)] + nom: u32, + #[codec(compact)] + denom: u32, + }, +} + +impl BodyPart { + /// Returns `true` if the part represents a strict majority (> 50%) of the body in question. + pub fn is_majority(&self) -> bool { + match self { + BodyPart::Fraction { nom, denom } if *nom * 2 > *denom => true, + BodyPart::AtLeastProportion { nom, denom } if *nom * 2 > *denom => true, + BodyPart::MoreThanProportion { nom, denom } if *nom * 2 >= *denom => true, + _ => false, + } + } +} + +impl From for BodyPart { + fn from(n: NewBodyPart) -> Self { + use NewBodyPart::*; + match n { + Voice => Self::Voice, + Members { count } => Self::Members { count }, + Fraction { nom, denom } => Self::Fraction { nom, denom }, + AtLeastProportion { nom, denom } => Self::AtLeastProportion { nom, denom }, + MoreThanProportion { nom, denom } => Self::MoreThanProportion { nom, denom }, + } + } +} /// This module's XCM version. pub const VERSION: super::Version = 2; @@ -218,6 +393,17 @@ impl From for Option { } } +impl TryFrom for WeightLimit { + type Error = (); + fn try_from(x: NewWeightLimit) -> result::Result { + use NewWeightLimit::*; + match x { + Limited(w) => Ok(Self::Limited(w.ref_time())), + Unlimited => Ok(Self::Unlimited), + } + } +} + /// Local weight type; execution time in picoseconds. pub type Weight = u64; @@ -422,6 +608,12 @@ pub enum Instruction { /// A `QueryResponse` message of type `ExecutionOutcome` is sent to `dest` with the given /// `query_id` and the outcome of the XCM. /// + /// - `query_id`: An identifier that will be replicated into the returned XCM message. + /// - `dest`: A valid destination for the returned XCM message. + /// - `max_response_weight`: The maximum amount of weight that the `QueryResponse` item which + /// is sent as a reply may take to execute. NOTE: If this is unexpectedly large then the + /// response may not execute at all. + /// /// Kind: *Instruction* /// /// Errors: @@ -633,7 +825,14 @@ pub enum Instruction { /// support in a `QueryResponse` instruction. Any changes to this should also elicit similar /// responses when they happen. /// + /// - `query_id`: An identifier that will be replicated into the returned XCM message. + /// - `max_response_weight`: The maximum amount of weight that the `QueryResponse` item which + /// is sent as a reply may take to execute. NOTE: If this is unexpectedly large then the + /// response may not execute at all. + /// /// Kind: *Instruction* + /// + /// Errors: *Fallible* SubscribeVersion { #[codec(compact)] query_id: QueryId, @@ -644,6 +843,8 @@ pub enum Instruction { /// Cancel the effect of a previous `SubscribeVersion` instruction. /// /// Kind: *Instruction* + /// + /// Errors: *Fallible* UnsubscribeVersion, } @@ -708,48 +909,76 @@ impl Instruction { // TODO: Automate Generation impl> GetWeight for Instruction { - fn weight(&self) -> Weight { + fn weight(&self) -> sp_weights::Weight { use Instruction::*; match self { - WithdrawAsset(assets) => W::withdraw_asset(assets), - ReserveAssetDeposited(assets) => W::reserve_asset_deposited(assets), - ReceiveTeleportedAsset(assets) => W::receive_teleported_asset(assets), + WithdrawAsset(assets) => sp_weights::Weight::from_parts(W::withdraw_asset(assets), 0), + ReserveAssetDeposited(assets) => + sp_weights::Weight::from_parts(W::reserve_asset_deposited(assets), 0), + ReceiveTeleportedAsset(assets) => + sp_weights::Weight::from_parts(W::receive_teleported_asset(assets), 0), QueryResponse { query_id, response, max_weight } => - W::query_response(query_id, response, max_weight), - TransferAsset { assets, beneficiary } => W::transfer_asset(assets, beneficiary), + sp_weights::Weight::from_parts(W::query_response(query_id, response, max_weight), 0), + TransferAsset { assets, beneficiary } => + sp_weights::Weight::from_parts(W::transfer_asset(assets, beneficiary), 0), TransferReserveAsset { assets, dest, xcm } => - W::transfer_reserve_asset(&assets, dest, xcm), + sp_weights::Weight::from_parts(W::transfer_reserve_asset(&assets, dest, xcm), 0), Transact { origin_type, require_weight_at_most, call } => - W::transact(origin_type, require_weight_at_most, call), + sp_weights::Weight::from_parts( + W::transact(origin_type, require_weight_at_most, call), + 0, + ), HrmpNewChannelOpenRequest { sender, max_message_size, max_capacity } => - W::hrmp_new_channel_open_request(sender, max_message_size, max_capacity), - HrmpChannelAccepted { recipient } => W::hrmp_channel_accepted(recipient), - HrmpChannelClosing { initiator, sender, recipient } => + sp_weights::Weight::from_parts( + W::hrmp_new_channel_open_request(sender, max_message_size, max_capacity), + 0, + ), + HrmpChannelAccepted { recipient } => + sp_weights::Weight::from_parts(W::hrmp_channel_accepted(recipient), 0), + HrmpChannelClosing { initiator, sender, recipient } => sp_weights::Weight::from_parts( W::hrmp_channel_closing(initiator, sender, recipient), - ClearOrigin => W::clear_origin(), - DescendOrigin(who) => W::descend_origin(who), - ReportError { query_id, dest, max_response_weight } => + 0, + ), + ClearOrigin => sp_weights::Weight::from_parts(W::clear_origin(), 0), + DescendOrigin(who) => sp_weights::Weight::from_parts(W::descend_origin(who), 0), + ReportError { query_id, dest, max_response_weight } => sp_weights::Weight::from_parts( W::report_error(query_id, dest, max_response_weight), + 0, + ), DepositAsset { assets, max_assets, beneficiary } => - W::deposit_asset(assets, max_assets, beneficiary), + sp_weights::Weight::from_parts(W::deposit_asset(assets, max_assets, beneficiary), 0), DepositReserveAsset { assets, max_assets, dest, xcm } => - W::deposit_reserve_asset(assets, max_assets, dest, xcm), - ExchangeAsset { give, receive } => W::exchange_asset(give, receive), - InitiateReserveWithdraw { assets, reserve, xcm } => + sp_weights::Weight::from_parts( + W::deposit_reserve_asset(assets, max_assets, dest, xcm), + 0, + ), + ExchangeAsset { give, receive } => + sp_weights::Weight::from_parts(W::exchange_asset(give, receive), 0), + InitiateReserveWithdraw { assets, reserve, xcm } => sp_weights::Weight::from_parts( W::initiate_reserve_withdraw(assets, reserve, xcm), - InitiateTeleport { assets, dest, xcm } => W::initiate_teleport(assets, dest, xcm), + 0, + ), + InitiateTeleport { assets, dest, xcm } => + sp_weights::Weight::from_parts(W::initiate_teleport(assets, dest, xcm), 0), QueryHolding { query_id, dest, assets, max_response_weight } => - W::query_holding(query_id, dest, assets, max_response_weight), - BuyExecution { fees, weight_limit } => W::buy_execution(fees, weight_limit), - RefundSurplus => W::refund_surplus(), - SetErrorHandler(xcm) => W::set_error_handler(xcm), - SetAppendix(xcm) => W::set_appendix(xcm), - ClearError => W::clear_error(), - ClaimAsset { assets, ticket } => W::claim_asset(assets, ticket), - Trap(code) => W::trap(code), - SubscribeVersion { query_id, max_response_weight } => + sp_weights::Weight::from_parts( + W::query_holding(query_id, dest, assets, max_response_weight), + 0, + ), + BuyExecution { fees, weight_limit } => + sp_weights::Weight::from_parts(W::buy_execution(fees, weight_limit), 0), + RefundSurplus => sp_weights::Weight::from_parts(W::refund_surplus(), 0), + SetErrorHandler(xcm) => sp_weights::Weight::from_parts(W::set_error_handler(xcm), 0), + SetAppendix(xcm) => sp_weights::Weight::from_parts(W::set_appendix(xcm), 0), + ClearError => sp_weights::Weight::from_parts(W::clear_error(), 0), + ClaimAsset { assets, ticket } => + sp_weights::Weight::from_parts(W::claim_asset(assets, ticket), 0), + Trap(code) => sp_weights::Weight::from_parts(W::trap(code), 0), + SubscribeVersion { query_id, max_response_weight } => sp_weights::Weight::from_parts( W::subscribe_version(query_id, max_response_weight), - UnsubscribeVersion => W::unsubscribe_version(), + 0, + ), + UnsubscribeVersion => sp_weights::Weight::from_parts(W::unsubscribe_version(), 0), } } } @@ -764,180 +993,130 @@ pub mod opaque { pub type Instruction = super::Instruction<()>; } -// Convert from a v1 response to a v2 response -impl TryFrom for Response { +// Convert from a v3 response to a v2 response +impl TryFrom for Response { type Error = (); - fn try_from(old_response: OldResponse) -> result::Result { - match old_response { - OldResponse::Assets(assets) => Ok(Self::Assets(assets)), - OldResponse::Version(version) => Ok(Self::Version(version)), - } + fn try_from(response: NewResponse) -> result::Result { + Ok(match response { + NewResponse::Assets(assets) => Self::Assets(assets.try_into()?), + NewResponse::Version(version) => Self::Version(version), + NewResponse::ExecutionResult(error) => Self::ExecutionResult(match error { + Some((i, e)) => Some((i, e.try_into()?)), + None => None, + }), + NewResponse::Null => Self::Null, + _ => return Err(()), + }) } } -impl TryFrom> for Xcm { +// Convert from a v3 XCM to a v2 XCM. +impl TryFrom> for Xcm { type Error = (); - fn try_from(old: OldXcm) -> result::Result, ()> { - use Instruction::*; - Ok(Xcm(match old { - OldXcm::WithdrawAsset { assets, effects } => Some(Ok(WithdrawAsset(assets))) - .into_iter() - .chain(effects.into_iter().map(Instruction::try_from)) - .collect::, _>>()?, - OldXcm::ReserveAssetDeposited { assets, effects } => - Some(Ok(ReserveAssetDeposited(assets))) - .into_iter() - .chain(Some(Ok(ClearOrigin)).into_iter()) - .chain(effects.into_iter().map(Instruction::try_from)) - .collect::, _>>()?, - OldXcm::ReceiveTeleportedAsset { assets, effects } => - Some(Ok(ReceiveTeleportedAsset(assets))) - .into_iter() - .chain(Some(Ok(ClearOrigin)).into_iter()) - .chain(effects.into_iter().map(Instruction::try_from)) - .collect::, _>>()?, - OldXcm::QueryResponse { query_id, response } => vec![QueryResponse { - query_id, - response: response.try_into()?, - max_weight: 50_000_000, - }], - OldXcm::TransferAsset { assets, beneficiary } => - vec![TransferAsset { assets, beneficiary }], - OldXcm::TransferReserveAsset { assets, dest, effects } => vec![TransferReserveAsset { - assets, - dest, - xcm: Xcm(effects - .into_iter() - .map(Instruction::<()>::try_from) - .collect::>()?), - }], - OldXcm::HrmpNewChannelOpenRequest { sender, max_message_size, max_capacity } => - vec![HrmpNewChannelOpenRequest { sender, max_message_size, max_capacity }], - OldXcm::HrmpChannelAccepted { recipient } => vec![HrmpChannelAccepted { recipient }], - OldXcm::HrmpChannelClosing { initiator, sender, recipient } => - vec![HrmpChannelClosing { initiator, sender, recipient }], - OldXcm::Transact { origin_type, require_weight_at_most, call } => - vec![Transact { origin_type, require_weight_at_most, call }], - // We don't handle this one at all due to nested XCM. - OldXcm::RelayedFrom { .. } => return Err(()), - OldXcm::SubscribeVersion { query_id, max_response_weight } => - vec![SubscribeVersion { query_id, max_response_weight }], - OldXcm::UnsubscribeVersion => vec![UnsubscribeVersion], - })) + fn try_from(new_xcm: NewXcm) -> result::Result { + Ok(Xcm(new_xcm.0.into_iter().map(TryInto::try_into).collect::>()?)) } } -impl TryFrom> for Instruction { +// Convert from a v3 instruction to a v2 instruction +impl TryFrom> for Instruction { type Error = (); - fn try_from(old: OldOrder) -> result::Result, ()> { - use Instruction::*; - Ok(match old { - OldOrder::Noop => return Err(()), - OldOrder::DepositAsset { assets, max_assets, beneficiary } => - DepositAsset { assets, max_assets, beneficiary }, - OldOrder::DepositReserveAsset { assets, max_assets, dest, effects } => - DepositReserveAsset { - assets, - max_assets, - dest, - xcm: Xcm(effects - .into_iter() - .map(Instruction::<()>::try_from) - .collect::>()?), - }, - OldOrder::ExchangeAsset { give, receive } => ExchangeAsset { give, receive }, - OldOrder::InitiateReserveWithdraw { assets, reserve, effects } => - InitiateReserveWithdraw { - assets, - reserve, - xcm: Xcm(effects - .into_iter() - .map(Instruction::<()>::try_from) - .collect::>()?), - }, - OldOrder::InitiateTeleport { assets, dest, effects } => InitiateTeleport { - assets, - dest, - xcm: Xcm(effects - .into_iter() - .map(Instruction::<()>::try_from) - .collect::>()?), + fn try_from(instruction: NewInstruction) -> result::Result { + use NewInstruction::*; + Ok(match instruction { + WithdrawAsset(assets) => Self::WithdrawAsset(assets.try_into()?), + ReserveAssetDeposited(assets) => Self::ReserveAssetDeposited(assets.try_into()?), + ReceiveTeleportedAsset(assets) => Self::ReceiveTeleportedAsset(assets.try_into()?), + QueryResponse { query_id, response, max_weight, .. } => Self::QueryResponse { + query_id, + response: response.try_into()?, + max_weight: max_weight.ref_time(), }, - OldOrder::QueryHolding { query_id, dest, assets } => - QueryHolding { query_id, dest, assets, max_response_weight: 0 }, - OldOrder::BuyExecution { fees, debt, instructions, .. } => { - // We don't handle nested XCM. - if !instructions.is_empty() { - return Err(()) - } - BuyExecution { fees, weight_limit: WeightLimit::Limited(debt) } + TransferAsset { assets, beneficiary } => Self::TransferAsset { + assets: assets.try_into()?, + beneficiary: beneficiary.try_into()?, }, + TransferReserveAsset { assets, dest, xcm } => Self::TransferReserveAsset { + assets: assets.try_into()?, + dest: dest.try_into()?, + xcm: xcm.try_into()?, + }, + HrmpNewChannelOpenRequest { sender, max_message_size, max_capacity } => + Self::HrmpNewChannelOpenRequest { sender, max_message_size, max_capacity }, + HrmpChannelAccepted { recipient } => Self::HrmpChannelAccepted { recipient }, + HrmpChannelClosing { initiator, sender, recipient } => + Self::HrmpChannelClosing { initiator, sender, recipient }, + Transact { origin_kind, require_weight_at_most, call } => Self::Transact { + origin_type: origin_kind, + require_weight_at_most: require_weight_at_most.ref_time(), + call: call.into(), + }, + ReportError(response_info) => Self::ReportError { + query_id: response_info.query_id, + dest: response_info.destination.try_into()?, + max_response_weight: response_info.max_weight.ref_time(), + }, + DepositAsset { assets, beneficiary } => { + let max_assets = assets.count().ok_or(())?; + let beneficiary = beneficiary.try_into()?; + let assets = assets.try_into()?; + Self::DepositAsset { assets, max_assets, beneficiary } + }, + DepositReserveAsset { assets, dest, xcm } => { + let max_assets = assets.count().ok_or(())?; + let dest = dest.try_into()?; + let xcm = xcm.try_into()?; + let assets = assets.try_into()?; + Self::DepositReserveAsset { assets, max_assets, dest, xcm } + }, + ExchangeAsset { give, want, .. } => { + let give = give.try_into()?; + let receive = want.try_into()?; + Self::ExchangeAsset { give, receive } + }, + InitiateReserveWithdraw { assets, reserve, xcm } => { + // No `max_assets` here, so if there's a connt, then we cannot translate. + let assets = assets.try_into()?; + let reserve = reserve.try_into()?; + let xcm = xcm.try_into()?; + Self::InitiateReserveWithdraw { assets, reserve, xcm } + }, + InitiateTeleport { assets, dest, xcm } => { + // No `max_assets` here, so if there's a connt, then we cannot translate. + let assets = assets.try_into()?; + let dest = dest.try_into()?; + let xcm = xcm.try_into()?; + Self::InitiateTeleport { assets, dest, xcm } + }, + ReportHolding { response_info, assets } => Self::QueryHolding { + query_id: response_info.query_id, + dest: response_info.destination.try_into()?, + assets: assets.try_into()?, + max_response_weight: response_info.max_weight.ref_time(), + }, + BuyExecution { fees, weight_limit } => { + let fees = fees.try_into()?; + let weight_limit = weight_limit.try_into()?; + Self::BuyExecution { fees, weight_limit } + }, + ClearOrigin => Self::ClearOrigin, + DescendOrigin(who) => Self::DescendOrigin(who.try_into()?), + RefundSurplus => Self::RefundSurplus, + SetErrorHandler(xcm) => Self::SetErrorHandler(xcm.try_into()?), + SetAppendix(xcm) => Self::SetAppendix(xcm.try_into()?), + ClearError => Self::ClearError, + ClaimAsset { assets, ticket } => { + let assets = assets.try_into()?; + let ticket = ticket.try_into()?; + Self::ClaimAsset { assets, ticket } + }, + Trap(code) => Self::Trap(code), + SubscribeVersion { query_id, max_response_weight } => Self::SubscribeVersion { + query_id, + max_response_weight: max_response_weight.ref_time(), + }, + UnsubscribeVersion => Self::UnsubscribeVersion, + _ => return Err(()), }) } } - -#[cfg(test)] -mod tests { - use super::{prelude::*, *}; - - #[test] - fn basic_roundtrip_works() { - let xcm = - Xcm::<()>(vec![TransferAsset { assets: (Here, 1).into(), beneficiary: Here.into() }]); - let old_xcm = - OldXcm::<()>::TransferAsset { assets: (Here, 1).into(), beneficiary: Here.into() }; - assert_eq!(old_xcm, OldXcm::<()>::try_from(xcm.clone()).unwrap()); - let new_xcm: Xcm<()> = old_xcm.try_into().unwrap(); - assert_eq!(new_xcm, xcm); - } - - #[test] - fn teleport_roundtrip_works() { - let xcm = Xcm::<()>(vec![ - ReceiveTeleportedAsset((Here, 1).into()), - ClearOrigin, - DepositAsset { assets: Wild(All), max_assets: 1, beneficiary: Here.into() }, - ]); - let old_xcm: OldXcm<()> = OldXcm::<()>::ReceiveTeleportedAsset { - assets: (Here, 1).into(), - effects: vec![OldOrder::DepositAsset { - assets: Wild(All), - max_assets: 1, - beneficiary: Here.into(), - }], - }; - assert_eq!(old_xcm, OldXcm::<()>::try_from(xcm.clone()).unwrap()); - let new_xcm: Xcm<()> = old_xcm.try_into().unwrap(); - assert_eq!(new_xcm, xcm); - } - - #[test] - fn reserve_deposit_roundtrip_works() { - let xcm = Xcm::<()>(vec![ - ReserveAssetDeposited((Here, 1).into()), - ClearOrigin, - BuyExecution { fees: (Here, 1).into(), weight_limit: Some(1).into() }, - DepositAsset { assets: Wild(All), max_assets: 1, beneficiary: Here.into() }, - ]); - let old_xcm: OldXcm<()> = OldXcm::<()>::ReserveAssetDeposited { - assets: (Here, 1).into(), - effects: vec![ - OldOrder::BuyExecution { - fees: (Here, 1).into(), - debt: 1, - weight: 0, - instructions: vec![], - halt_on_error: true, - }, - OldOrder::DepositAsset { - assets: Wild(All), - max_assets: 1, - beneficiary: Here.into(), - }, - ], - }; - assert_eq!(old_xcm, OldXcm::<()>::try_from(xcm.clone()).unwrap()); - let new_xcm: Xcm<()> = old_xcm.try_into().unwrap(); - assert_eq!(new_xcm, xcm); - } -} diff --git a/xcm/src/v1/multiasset.rs b/xcm/src/v2/multiasset.rs similarity index 81% rename from xcm/src/v1/multiasset.rs rename to xcm/src/v2/multiasset.rs index 10e49af8d2df..6493b7c1afbe 100644 --- a/xcm/src/v1/multiasset.rs +++ b/xcm/src/v2/multiasset.rs @@ -24,13 +24,20 @@ //! account. use super::MultiLocation; +use crate::v3::{ + AssetId as NewAssetId, AssetInstance as NewAssetInstance, Fungibility as NewFungibility, + MultiAsset as NewMultiAsset, MultiAssetFilter as NewMultiAssetFilter, + MultiAssets as NewMultiAssets, WildFungibility as NewWildFungibility, + WildMultiAsset as NewWildMultiAsset, +}; use alloc::{vec, vec::Vec}; -use core::{cmp::Ordering, result}; +use core::cmp::Ordering; use parity_scale_codec::{self as codec, Decode, Encode}; use scale_info::TypeInfo; /// A general identifier for an instance of a non-fungible asset class. #[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, Debug, TypeInfo)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] pub enum AssetInstance { /// Undefined - used if the non-fungible asset class has only one instance. Undefined, @@ -91,8 +98,24 @@ impl From> for AssetInstance { } } +impl TryFrom for AssetInstance { + type Error = (); + fn try_from(value: NewAssetInstance) -> Result { + use NewAssetInstance::*; + Ok(match value { + Undefined => Self::Undefined, + Index(n) => Self::Index(n), + Array4(n) => Self::Array4(n), + Array8(n) => Self::Array8(n), + Array16(n) => Self::Array16(n), + Array32(n) => Self::Array32(n), + }) + } +} + /// Classification of an asset being concrete or abstract. #[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Debug, Encode, Decode, TypeInfo)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] pub enum AssetId { Concrete(MultiLocation), Abstract(Vec), @@ -110,6 +133,20 @@ impl From> for AssetId { } } +impl TryFrom for AssetId { + type Error = (); + fn try_from(old: NewAssetId) -> Result { + use NewAssetId::*; + Ok(match old { + Concrete(l) => Self::Concrete(l.try_into()?), + Abstract(v) => { + let zeroes = v.iter().rev().position(|n| *n != 0).unwrap_or(v.len()); + Self::Abstract(v[0..(32 - zeroes)].to_vec()) + }, + }) + } +} + impl AssetId { /// Prepend a `MultiLocation` to a concrete asset, giving it a new root location. pub fn prepend_with(&mut self, prepend: &MultiLocation) -> Result<(), ()> { @@ -142,6 +179,7 @@ impl AssetId { /// Classification of whether an asset is fungible or not, along with a mandatory amount or instance. #[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Debug, Encode, Decode, TypeInfo)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] pub enum Fungibility { Fungible(#[codec(compact)] u128), NonFungible(AssetInstance), @@ -168,7 +206,19 @@ impl> From for Fungibility { } } +impl TryFrom for Fungibility { + type Error = (); + fn try_from(value: NewFungibility) -> Result { + use NewFungibility::*; + Ok(match value { + Fungible(n) => Self::Fungible(n), + NonFungible(i) => Self::NonFungible(i.try_into()?), + }) + } +} + #[derive(Clone, Eq, PartialEq, Debug, Encode, Decode, TypeInfo)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] pub struct MultiAsset { pub id: AssetId, pub fun: Fungibility, @@ -243,47 +293,16 @@ impl MultiAsset { } } -impl TryFrom for MultiAsset { +impl TryFrom for MultiAsset { type Error = (); - fn try_from(old: super::super::v0::MultiAsset) -> result::Result { - use super::super::v0::MultiAsset as V0; - use AssetId::*; - use Fungibility::*; - let (id, fun) = match old { - V0::ConcreteFungible { id, amount } => (Concrete(id.try_into()?), Fungible(amount)), - V0::ConcreteNonFungible { class, instance } => - (Concrete(class.try_into()?), NonFungible(instance)), - V0::AbstractFungible { id, amount } => (Abstract(id), Fungible(amount)), - V0::AbstractNonFungible { class, instance } => (Abstract(class), NonFungible(instance)), - _ => return Err(()), - }; - Ok(MultiAsset { id, fun }) - } -} - -impl TryFrom for Option { - type Error = (); - fn try_from(old: super::super::v0::MultiAsset) -> result::Result, ()> { - match old { - super::super::v0::MultiAsset::None => return Ok(None), - x => return Ok(Some(x.try_into()?)), - } - } -} - -impl TryFrom> for MultiAsset { - type Error = (); - fn try_from(mut old: Vec) -> result::Result { - if old.len() == 1 { - old.remove(0).try_into() - } else { - Err(()) - } + fn try_from(new: NewMultiAsset) -> Result { + Ok(Self { id: new.id.try_into()?, fun: new.fun.try_into()? }) } } /// A `Vec` of `MultiAsset`s. There may be no duplicate fungible items in here and when decoding, they must be sorted. #[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Debug, Encode, TypeInfo)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] pub struct MultiAssets(Vec); impl Decode for MultiAssets { @@ -293,15 +312,15 @@ impl Decode for MultiAssets { } } -impl TryFrom> for MultiAssets { +impl TryFrom for MultiAssets { type Error = (); - fn try_from(old: Vec) -> result::Result { - let v = old + fn try_from(new: NewMultiAssets) -> Result { + let v = new + .into_inner() .into_iter() - .map(Option::::try_from) - .filter_map(|x| x.transpose()) - .collect::, ()>>()?; - Ok(v.into()) + .map(MultiAsset::try_from) + .collect::, ()>>()?; + Ok(MultiAssets(v)) } } @@ -435,7 +454,8 @@ impl MultiAssets { self.0.iter_mut().try_for_each(|i| i.prepend_with(prefix)) } - /// Prepend a `MultiLocation` to any concrete asset items, giving it a new root location. + /// Mutate the location of the asset identifier if concrete, giving it the same location + /// relative to a `target` context. The local context is provided as `ancestry`. pub fn reanchor(&mut self, target: &MultiLocation, ancestry: &MultiLocation) -> Result<(), ()> { self.0.iter_mut().try_for_each(|i| i.reanchor(target, ancestry)) } @@ -445,15 +465,29 @@ impl MultiAssets { self.0.get(index) } } + /// Classification of whether an asset is fungible or not. #[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Debug, Encode, Decode, TypeInfo)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] pub enum WildFungibility { Fungible, NonFungible, } +impl TryFrom for WildFungibility { + type Error = (); + fn try_from(value: NewWildFungibility) -> Result { + use NewWildFungibility::*; + Ok(match value { + Fungible => Self::Fungible, + NonFungible => Self::NonFungible, + }) + } +} + /// A wildcard representing a set of assets. #[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Debug, Encode, Decode, TypeInfo)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] pub enum WildMultiAsset { /// All assets in the holding register, up to `usize` individual assets (different instances of non-fungibles could /// be separate assets). @@ -463,35 +497,6 @@ pub enum WildMultiAsset { AllOf { id: AssetId, fun: WildFungibility }, } -impl TryFrom for WildMultiAsset { - type Error = (); - fn try_from(old: super::super::v0::MultiAsset) -> result::Result { - use super::super::v0::MultiAsset as V0; - use AssetId::*; - use WildFungibility::*; - let (id, fun) = match old { - V0::All => return Ok(WildMultiAsset::All), - V0::AllConcreteFungible { id } => (Concrete(id.try_into()?), Fungible), - V0::AllConcreteNonFungible { class } => (Concrete(class.try_into()?), NonFungible), - V0::AllAbstractFungible { id } => (Abstract(id), Fungible), - V0::AllAbstractNonFungible { class } => (Abstract(class), NonFungible), - _ => return Err(()), - }; - Ok(WildMultiAsset::AllOf { id, fun }) - } -} - -impl TryFrom> for WildMultiAsset { - type Error = (); - fn try_from(mut old: Vec) -> result::Result { - if old.len() == 1 { - old.remove(0).try_into() - } else { - Err(()) - } - } -} - impl WildMultiAsset { /// Returns true if `self` is a super-set of the given `inner`. /// @@ -505,7 +510,8 @@ impl WildMultiAsset { } } - /// Prepend a `MultiLocation` to any concrete asset components, giving it a new root location. + /// Mutate the location of the asset identifier if concrete, giving it the same location + /// relative to a `target` context. The local context is provided as `ancestry`. pub fn reanchor(&mut self, target: &MultiLocation, ancestry: &MultiLocation) -> Result<(), ()> { use WildMultiAsset::*; match self { @@ -526,6 +532,7 @@ impl, B: Into> From<(A, B)> for WildMultiAsset /// Note: Vectors of wildcards whose encoding is supported in XCM v0 are unsupported /// in this implementation and will result in a decode error. #[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Debug, Encode, Decode, TypeInfo)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] pub enum MultiAssetFilter { Definite(MultiAssets), Wild(WildMultiAsset), @@ -567,7 +574,8 @@ impl MultiAssetFilter { } } - /// Prepend a `MultiLocation` to any concrete asset components, giving it a new root location. + /// Mutate the location of the asset identifier if concrete, giving it the same location + /// relative to a `target` context. The local context is provided as `ancestry`. pub fn reanchor(&mut self, target: &MultiLocation, ancestry: &MultiLocation) -> Result<(), ()> { match self { MultiAssetFilter::Definite(ref mut assets) => assets.reanchor(target, ancestry), @@ -576,15 +584,25 @@ impl MultiAssetFilter { } } -impl TryFrom> for MultiAssetFilter { +impl TryFrom for WildMultiAsset { type Error = (); - fn try_from( - mut old: Vec, - ) -> result::Result { - if old.len() == 1 && old[0].is_wildcard() { - Ok(MultiAssetFilter::Wild(old.remove(0).try_into()?)) - } else { - Ok(MultiAssetFilter::Definite(old.try_into()?)) - } + fn try_from(new: NewWildMultiAsset) -> Result { + use NewWildMultiAsset::*; + Ok(match new { + AllOf { id, fun } | AllOfCounted { id, fun, .. } => + Self::AllOf { id: id.try_into()?, fun: fun.try_into()? }, + All | AllCounted(_) => Self::All, + }) + } +} + +impl TryFrom for MultiAssetFilter { + type Error = (); + fn try_from(old: NewMultiAssetFilter) -> Result { + use NewMultiAssetFilter::*; + Ok(match old { + Definite(x) => Self::Definite(x.try_into()?), + Wild(x) => Self::Wild(x.try_into()?), + }) } } diff --git a/xcm/src/v1/multilocation.rs b/xcm/src/v2/multilocation.rs similarity index 95% rename from xcm/src/v1/multilocation.rs rename to xcm/src/v2/multilocation.rs index 83cf0095c3b8..4abdc1daf7a6 100644 --- a/xcm/src/v1/multilocation.rs +++ b/xcm/src/v2/multilocation.rs @@ -17,6 +17,7 @@ //! Cross-Consensus Message format data structures. use super::Junction; +use crate::v3::MultiLocation as NewMultiLocation; use core::{mem, result}; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; @@ -48,6 +49,7 @@ use scale_info::TypeInfo; /// /// The `MultiLocation` value of `Null` simply refers to the interpreting consensus system. #[derive(Clone, Decode, Encode, Eq, PartialEq, Ord, PartialOrd, Debug, TypeInfo, MaxEncodedLen)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] pub struct MultiLocation { /// The number of parent junctions at the beginning of this `MultiLocation`. pub parents: u8, @@ -236,7 +238,7 @@ impl MultiLocation { /// /// # Example /// ```rust - /// # use xcm::v1::{Junctions::*, Junction::*, MultiLocation}; + /// # use xcm::v2::{Junctions::*, Junction::*, MultiLocation}; /// # fn main() { /// let mut m = MultiLocation::new(1, X2(PalletInstance(3), OnlyChild)); /// assert_eq!( @@ -258,7 +260,7 @@ impl MultiLocation { /// /// # Example /// ```rust - /// # use xcm::v1::{Junctions::*, Junction::*, MultiLocation}; + /// # use xcm::v2::{Junctions::*, Junction::*, MultiLocation}; /// let m = MultiLocation::new(1, X3(PalletInstance(3), OnlyChild, OnlyChild)); /// assert!(m.starts_with(&MultiLocation::new(1, X1(PalletInstance(3))))); /// assert!(!m.starts_with(&MultiLocation::new(1, X1(GeneralIndex(99))))); @@ -277,7 +279,7 @@ impl MultiLocation { /// /// # Example /// ```rust - /// # use xcm::v1::{Junctions::*, Junction::*, MultiLocation}; + /// # use xcm::v2::{Junctions::*, Junction::*, MultiLocation}; /// # fn main() { /// let mut m = MultiLocation::new(1, X1(Parachain(21))); /// assert_eq!(m.append_with(X1(PalletInstance(3))), Ok(())); @@ -300,7 +302,7 @@ impl MultiLocation { /// /// # Example /// ```rust - /// # use xcm::v1::{Junctions::*, Junction::*, MultiLocation}; + /// # use xcm::v2::{Junctions::*, Junction::*, MultiLocation}; /// # fn main() { /// let mut m = MultiLocation::new(2, X1(PalletInstance(3))); /// assert_eq!(m.prepend_with(MultiLocation::new(1, X2(Parachain(21), OnlyChild))), Ok(())); @@ -342,6 +344,21 @@ impl MultiLocation { Ok(()) } + /// Consume `self` and return the value representing the same location from the point of view + /// of `target`. The context of `self` is provided as `ancestry`. + /// + /// Returns an `Err` with the unmodified `self` in the case of error. + pub fn reanchored( + mut self, + target: &MultiLocation, + ancestry: &MultiLocation, + ) -> Result { + match self.reanchor(target, ancestry) { + Ok(()) => Ok(self), + Err(()) => Err(self), + } + } + /// Mutate `self` so that it represents the same location from the point of view of `target`. /// The context of `self` is provided as `ancestry`. /// @@ -397,6 +414,13 @@ impl MultiLocation { } } +impl TryFrom for MultiLocation { + type Error = (); + fn try_from(x: NewMultiLocation) -> result::Result { + Ok(MultiLocation { parents: x.parents, interior: x.interior.try_into()? }) + } +} + /// A unit struct which can be converted into a `MultiLocation` of `parents` value 1. #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug)] pub struct Parent; @@ -408,7 +432,7 @@ impl From for MultiLocation { /// A tuple struct which can be converted into a `MultiLocation` of `parents` value 1 with the inner interior. #[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Debug)] -pub struct ParentThen(Junctions); +pub struct ParentThen(pub Junctions); impl From for MultiLocation { fn from(ParentThen(interior): ParentThen) -> Self { MultiLocation { parents: 1, interior } @@ -417,7 +441,7 @@ impl From for MultiLocation { /// A unit struct which can be converted into a `MultiLocation` of the inner `parents` value. #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug)] -pub struct Ancestor(u8); +pub struct Ancestor(pub u8); impl From for MultiLocation { fn from(Ancestor(parents): Ancestor) -> Self { MultiLocation { parents, interior: Junctions::Here } @@ -426,14 +450,14 @@ impl From for MultiLocation { /// A unit struct which can be converted into a `MultiLocation` of the inner `parents` value and the inner interior. #[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Debug)] -pub struct AncestorThen(u8, Junctions); -impl From for MultiLocation { - fn from(AncestorThen(parents, interior): AncestorThen) -> Self { - MultiLocation { parents, interior } +pub struct AncestorThen(pub u8, pub Interior); +impl> From> for MultiLocation { + fn from(AncestorThen(parents, interior): AncestorThen) -> Self { + MultiLocation { parents, interior: interior.into() } } } -xcm_procedural::impl_conversion_functions_for_multilocation_v1!(); +xcm_procedural::impl_conversion_functions_for_multilocation_v2!(); /// Maximum number of `Junction`s that a `Junctions` can contain. const MAX_JUNCTIONS: usize = 8; @@ -444,6 +468,7 @@ const MAX_JUNCTIONS: usize = 8; /// Parent junctions cannot be constructed with this type. Refer to `MultiLocation` for /// instructions on constructing parent junctions. #[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, Debug, TypeInfo, MaxEncodedLen)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] pub enum Junctions { /// The interpreting consensus system. Here, @@ -811,7 +836,7 @@ impl Junctions { /// /// # Example /// ```rust - /// # use xcm::v1::{Junctions::*, Junction::*}; + /// # use xcm::v2::{Junctions::*, Junction::*}; /// # fn main() { /// let mut m = X3(Parachain(2), PalletInstance(3), OnlyChild); /// assert_eq!(m.match_and_split(&X2(Parachain(2), PalletInstance(3))), Some(&OnlyChild)); @@ -829,7 +854,7 @@ impl Junctions { /// /// # Example /// ```rust - /// # use xcm::v1::{Junctions::*, Junction::*}; + /// # use xcm::v2::{Junctions::*, Junction::*}; /// let mut j = X3(Parachain(2), PalletInstance(3), OnlyChild); /// assert!(j.starts_with(&X2(Parachain(2), PalletInstance(3)))); /// assert!(j.starts_with(&j)); @@ -859,7 +884,7 @@ impl TryFrom for Junctions { #[cfg(test)] mod tests { use super::{Ancestor, AncestorThen, Junctions::*, MultiLocation, Parent, ParentThen}; - use crate::opaque::v1::{Junction::*, NetworkId::*}; + use crate::opaque::v2::{Junction::*, NetworkId::*}; use parity_scale_codec::{Decode, Encode}; #[test] @@ -1062,7 +1087,6 @@ mod tests { #[test] fn conversion_from_other_types_works() { - use crate::v0; fn takes_multilocation>(_arg: Arg) {} takes_multilocation(Parent); @@ -1079,27 +1103,5 @@ mod tests { takes_multilocation((Parent, Here)); takes_multilocation(ParentThen(X1(Parachain(75)))); takes_multilocation([Parachain(100), PalletInstance(3)]); - - assert_eq!(v0::MultiLocation::Null.try_into(), Ok(MultiLocation::here())); - assert_eq!( - v0::MultiLocation::X1(v0::Junction::Parent).try_into(), - Ok(MultiLocation::parent()) - ); - assert_eq!( - v0::MultiLocation::X2(v0::Junction::Parachain(88), v0::Junction::Parent).try_into(), - Ok(MultiLocation::here()), - ); - assert_eq!( - v0::MultiLocation::X3( - v0::Junction::Parent, - v0::Junction::Parent, - v0::Junction::GeneralKey(b"foo".to_vec().try_into().unwrap()), - ) - .try_into(), - Ok(MultiLocation { - parents: 2, - interior: X1(GeneralKey(b"foo".to_vec().try_into().unwrap())) - }), - ); } } diff --git a/xcm/src/v2/traits.rs b/xcm/src/v2/traits.rs index 94d48034fc36..77900e514c4b 100644 --- a/xcm/src/v2/traits.rs +++ b/xcm/src/v2/traits.rs @@ -16,6 +16,7 @@ //! Cross-Consensus Message format data structures. +use crate::v3::Error as NewError; use core::result; use parity_scale_codec::{Decode, Encode}; use scale_info::TypeInfo; @@ -110,10 +111,42 @@ pub enum Error { WeightNotComputable, } +impl TryFrom for Error { + type Error = (); + fn try_from(new_error: NewError) -> result::Result { + use NewError::*; + Ok(match new_error { + Overflow => Self::Overflow, + Unimplemented => Self::Unimplemented, + UntrustedReserveLocation => Self::UntrustedReserveLocation, + UntrustedTeleportLocation => Self::UntrustedTeleportLocation, + LocationFull => Self::MultiLocationFull, + LocationNotInvertible => Self::MultiLocationNotInvertible, + BadOrigin => Self::BadOrigin, + InvalidLocation => Self::InvalidLocation, + AssetNotFound => Self::AssetNotFound, + FailedToTransactAsset(s) => Self::FailedToTransactAsset(s), + NotWithdrawable => Self::NotWithdrawable, + LocationCannotHold => Self::LocationCannotHold, + ExceedsMaxMessageSize => Self::ExceedsMaxMessageSize, + DestinationUnsupported => Self::DestinationUnsupported, + Transport(s) => Self::Transport(s), + Unroutable => Self::Unroutable, + UnknownClaim => Self::UnknownClaim, + FailedToDecode => Self::FailedToDecode, + MaxWeightInvalid => Self::MaxWeightInvalid, + NotHoldingFees => Self::NotHoldingFees, + TooExpensive => Self::TooExpensive, + Trap(i) => Self::Trap(i), + _ => return Err(()), + }) + } +} + impl From for Error { fn from(e: SendError) -> Self { match e { - SendError::CannotReachDestination(..) | SendError::Unroutable => Error::Unroutable, + SendError::NotApplicable(..) | SendError::Unroutable => Error::Unroutable, SendError::Transport(s) => Error::Transport(s), SendError::DestinationUnsupported => Error::DestinationUnsupported, SendError::ExceedsMaxMessageSize => Error::ExceedsMaxMessageSize, @@ -210,7 +243,7 @@ pub enum SendError { /// /// This is not considered fatal: if there are alternative transport routes available, then /// they may be attempted. For this reason, the destination and message are contained. - CannotReachDestination(MultiLocation, Xcm<()>), + NotApplicable(MultiLocation, Xcm<()>), /// Destination is routable, but there is some issue with the transport mechanism. This is /// considered fatal. /// A human-readable explanation of the specific issue is provided. @@ -231,7 +264,7 @@ pub type SendResult = result::Result<(), SendError>; /// Utility for sending an XCM message. /// /// These can be amalgamated in tuples to form sophisticated routing systems. In tuple format, each router might return -/// `CannotReachDestination` to pass the execution to the next sender item. Note that each `CannotReachDestination` +/// `NotApplicable` to pass the execution to the next sender item. Note that each `NotApplicable` /// might alter the destination and the XCM message for to the next router. /// /// @@ -244,7 +277,7 @@ pub type SendResult = result::Result<(), SendError>; /// struct Sender1; /// impl SendXcm for Sender1 { /// fn send_xcm(destination: impl Into, message: Xcm<()>) -> SendResult { -/// return Err(SendError::CannotReachDestination(destination.into(), message)) +/// return Err(SendError::NotApplicable(destination.into(), message)) /// } /// } /// @@ -267,7 +300,7 @@ pub type SendResult = result::Result<(), SendError>; /// let destination = destination.into(); /// match destination { /// MultiLocation { parents: 1, interior: Here } => Ok(()), -/// _ => Err(SendError::CannotReachDestination(destination, message)), +/// _ => Err(SendError::NotApplicable(destination, message)), /// } /// } /// } @@ -298,7 +331,7 @@ pub trait SendXcm { /// Send an XCM `message` to a given `destination`. /// /// If it is not a destination which can be reached with this type but possibly could by others, then it *MUST* - /// return `CannotReachDestination`. Any other error will cause the tuple implementation to exit early without + /// return `NotApplicable`. Any other error will cause the tuple implementation to exit early without /// trying other type fields. fn send_xcm(destination: impl Into, message: Xcm<()>) -> SendResult; } @@ -309,10 +342,10 @@ impl SendXcm for Tuple { for_tuples!( #( // we shadow `destination` and `message` in each expansion for the next one. let (destination, message) = match Tuple::send_xcm(destination, message) { - Err(SendError::CannotReachDestination(d, m)) => (d, m), + Err(SendError::NotApplicable(d, m)) => (d, m), o @ _ => return o, }; )* ); - Err(SendError::CannotReachDestination(destination.into(), message)) + Err(SendError::NotApplicable(destination.into(), message)) } } diff --git a/xcm/src/v3/junction.rs b/xcm/src/v3/junction.rs new file mode 100644 index 000000000000..57877f95450c --- /dev/null +++ b/xcm/src/v3/junction.rs @@ -0,0 +1,408 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +//! Support data structures for `MultiLocation`, primarily the `Junction` datatype. + +use super::{Junctions, MultiLocation}; +use crate::{ + v2::{ + BodyId as OldBodyId, BodyPart as OldBodyPart, Junction as OldJunction, + NetworkId as OldNetworkId, + }, + VersionedMultiLocation, +}; +use bounded_collections::{BoundedSlice, BoundedVec, ConstU32}; +use core::convert::{TryFrom, TryInto}; +use parity_scale_codec::{self, Decode, Encode, MaxEncodedLen}; +use scale_info::TypeInfo; + +/// A global identifier of a data structure existing within consensus. +/// +/// Maintenance note: Networks with global consensus and which are practically bridgeable within the +/// Polkadot ecosystem are given preference over explicit naming in this enumeration. +#[derive( + Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, Debug, TypeInfo, MaxEncodedLen, +)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] +pub enum NetworkId { + /// Network specified by the first 32 bytes of its genesis block. + ByGenesis([u8; 32]), + /// Network defined by the first 32-bytes of the hash and number of some block it contains. + ByFork { block_number: u64, block_hash: [u8; 32] }, + /// The Polkadot mainnet Relay-chain. + Polkadot, + /// The Kusama canary-net Relay-chain. + Kusama, + /// The Westend testnet Relay-chain. + Westend, + /// The Rococo testnet Relay-chain. + Rococo, + /// The Wococo testnet Relay-chain. + Wococo, + /// An Ethereum network specified by its chain ID. + Ethereum { + /// The EIP-155 chain ID. + #[codec(compact)] + chain_id: u64, + }, + /// The Bitcoin network, including hard-forks supported by Bitcoin Core development team. + BitcoinCore, + /// The Bitcoin network, including hard-forks supported by Bitcoin Cash developers. + BitcoinCash, +} + +impl From for Option { + fn from(old: OldNetworkId) -> Option { + use OldNetworkId::*; + match old { + Any => None, + Named(_) => None, + Polkadot => Some(NetworkId::Polkadot), + Kusama => Some(NetworkId::Kusama), + } + } +} + +/// An identifier of a pluralistic body. +#[derive( + Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, Debug, TypeInfo, MaxEncodedLen, +)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] +pub enum BodyId { + /// The only body in its context. + Unit, + /// A named body. + Moniker([u8; 4]), + /// An indexed body. + Index(#[codec(compact)] u32), + /// The unambiguous executive body (for Polkadot, this would be the Polkadot council). + Executive, + /// The unambiguous technical body (for Polkadot, this would be the Technical Committee). + Technical, + /// The unambiguous legislative body (for Polkadot, this could be considered the opinion of a majority of + /// lock-voters). + Legislative, + /// The unambiguous judicial body (this doesn't exist on Polkadot, but if it were to get a "grand oracle", it + /// may be considered as that). + Judicial, + /// The unambiguous defense body (for Polkadot, an opinion on the topic given via a public referendum + /// on the `staking_admin` track). + Defense, + /// The unambiguous administration body (for Polkadot, an opinion on the topic given via a public referendum + /// on the `general_admin` track). + Administration, + /// The unambiguous treasury body (for Polkadot, an opinion on the topic given via a public referendum + /// on the `treasurer` track). + Treasury, +} + +impl TryFrom for BodyId { + type Error = (); + fn try_from(value: OldBodyId) -> Result { + use OldBodyId::*; + Ok(match value { + Unit => Self::Unit, + Named(n) => + if n.len() == 4 { + let mut r = [0u8; 4]; + r.copy_from_slice(&n[..]); + Self::Moniker(r) + } else { + return Err(()) + }, + Index(n) => Self::Index(n), + Executive => Self::Executive, + Technical => Self::Technical, + Legislative => Self::Legislative, + Judicial => Self::Judicial, + Defense => Self::Defense, + Administration => Self::Administration, + Treasury => Self::Treasury, + }) + } +} + +/// A part of a pluralistic body. +#[derive( + Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, Debug, TypeInfo, MaxEncodedLen, +)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] +pub enum BodyPart { + /// The body's declaration, under whatever means it decides. + Voice, + /// A given number of members of the body. + Members { + #[codec(compact)] + count: u32, + }, + /// A given number of members of the body, out of some larger caucus. + Fraction { + #[codec(compact)] + nom: u32, + #[codec(compact)] + denom: u32, + }, + /// No less than the given proportion of members of the body. + AtLeastProportion { + #[codec(compact)] + nom: u32, + #[codec(compact)] + denom: u32, + }, + /// More than than the given proportion of members of the body. + MoreThanProportion { + #[codec(compact)] + nom: u32, + #[codec(compact)] + denom: u32, + }, +} + +impl BodyPart { + /// Returns `true` if the part represents a strict majority (> 50%) of the body in question. + pub fn is_majority(&self) -> bool { + match self { + BodyPart::Fraction { nom, denom } if *nom * 2 > *denom => true, + BodyPart::AtLeastProportion { nom, denom } if *nom * 2 > *denom => true, + BodyPart::MoreThanProportion { nom, denom } if *nom * 2 >= *denom => true, + _ => false, + } + } +} + +impl TryFrom for BodyPart { + type Error = (); + fn try_from(value: OldBodyPart) -> Result { + use OldBodyPart::*; + Ok(match value { + Voice => Self::Voice, + Members { count } => Self::Members { count }, + Fraction { nom, denom } => Self::Fraction { nom, denom }, + AtLeastProportion { nom, denom } => Self::AtLeastProportion { nom, denom }, + MoreThanProportion { nom, denom } => Self::MoreThanProportion { nom, denom }, + }) + } +} + +/// A single item in a path to describe the relative location of a consensus system. +/// +/// Each item assumes a pre-existing location as its context and is defined in terms of it. +#[derive( + Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, Debug, TypeInfo, MaxEncodedLen, +)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] +pub enum Junction { + /// An indexed parachain belonging to and operated by the context. + /// + /// Generally used when the context is a Polkadot Relay-chain. + Parachain(#[codec(compact)] u32), + /// A 32-byte identifier for an account of a specific network that is respected as a sovereign endpoint within + /// the context. + /// + /// Generally used when the context is a Substrate-based chain. + AccountId32 { network: Option, id: [u8; 32] }, + /// An 8-byte index for an account of a specific network that is respected as a sovereign endpoint within + /// the context. + /// + /// May be used when the context is a Frame-based chain and includes e.g. an indices pallet. + AccountIndex64 { + network: Option, + #[codec(compact)] + index: u64, + }, + /// A 20-byte identifier for an account of a specific network that is respected as a sovereign endpoint within + /// the context. + /// + /// May be used when the context is an Ethereum or Bitcoin chain or smart-contract. + AccountKey20 { network: Option, key: [u8; 20] }, + /// An instanced, indexed pallet that forms a constituent part of the context. + /// + /// Generally used when the context is a Frame-based chain. + PalletInstance(u8), + /// A non-descript index within the context location. + /// + /// Usage will vary widely owing to its generality. + /// + /// NOTE: Try to avoid using this and instead use a more specific item. + GeneralIndex(#[codec(compact)] u128), + /// A nondescript array datum, 32 bytes, acting as a key within the context + /// location. + /// + /// Usage will vary widely owing to its generality. + /// + /// NOTE: Try to avoid using this and instead use a more specific item. + // Note this is implemented as an array with a length rather than using `BoundedVec` owing to + // the bound for `Copy`. + GeneralKey { length: u8, data: [u8; 32] }, + /// The unambiguous child. + /// + /// Not currently used except as a fallback when deriving context. + OnlyChild, + /// A pluralistic body existing within consensus. + /// + /// Typical to be used to represent a governance origin of a chain, but could in principle be used to represent + /// things such as multisigs also. + Plurality { id: BodyId, part: BodyPart }, + /// A global network capable of externalizing its own consensus. This is not generally + /// meaningful outside of the universal level. + GlobalConsensus(NetworkId), +} + +impl From for Junction { + fn from(n: NetworkId) -> Self { + Self::GlobalConsensus(n) + } +} + +impl From<[u8; 32]> for Junction { + fn from(id: [u8; 32]) -> Self { + Self::AccountId32 { network: None, id } + } +} + +impl From>> for Junction { + fn from(key: BoundedVec>) -> Self { + key.as_bounded_slice().into() + } +} + +impl<'a> From>> for Junction { + fn from(key: BoundedSlice<'a, u8, ConstU32<32>>) -> Self { + let mut data = [0u8; 32]; + data[..key.len()].copy_from_slice(&key[..]); + Self::GeneralKey { length: key.len() as u8, data } + } +} + +impl<'a> TryFrom<&'a Junction> for BoundedSlice<'a, u8, ConstU32<32>> { + type Error = (); + fn try_from(key: &'a Junction) -> Result { + match key { + Junction::GeneralKey { length, data } => + BoundedSlice::try_from(&data[..data.len().min(*length as usize)]).map_err(|_| ()), + _ => Err(()), + } + } +} + +impl From<[u8; 20]> for Junction { + fn from(key: [u8; 20]) -> Self { + Self::AccountKey20 { network: None, key } + } +} + +impl From for Junction { + fn from(index: u64) -> Self { + Self::AccountIndex64 { network: None, index } + } +} + +impl From for Junction { + fn from(id: u128) -> Self { + Self::GeneralIndex(id) + } +} + +impl TryFrom for Junction { + type Error = (); + fn try_from(value: OldJunction) -> Result { + use OldJunction::*; + Ok(match value { + Parachain(id) => Self::Parachain(id), + AccountId32 { network, id } => Self::AccountId32 { network: network.into(), id }, + AccountIndex64 { network, index } => + Self::AccountIndex64 { network: network.into(), index }, + AccountKey20 { network, key } => Self::AccountKey20 { network: network.into(), key }, + PalletInstance(index) => Self::PalletInstance(index), + GeneralIndex(id) => Self::GeneralIndex(id), + GeneralKey(key) => match key.len() { + len @ 0..=32 => Self::GeneralKey { + length: len as u8, + data: { + let mut data = [0u8; 32]; + data[..len].copy_from_slice(&key[..]); + data + }, + }, + _ => return Err(()), + }, + OnlyChild => Self::OnlyChild, + Plurality { id, part } => + Self::Plurality { id: id.try_into()?, part: part.try_into()? }, + }) + } +} + +impl Junction { + /// Convert `self` into a `MultiLocation` containing 0 parents. + /// + /// Similar to `Into::into`, except that this method can be used in a const evaluation context. + pub const fn into_location(self) -> MultiLocation { + MultiLocation { parents: 0, interior: Junctions::X1(self) } + } + + /// Convert `self` into a `MultiLocation` containing `n` parents. + /// + /// Similar to `Self::into_location`, with the added ability to specify the number of parent junctions. + pub const fn into_exterior(self, n: u8) -> MultiLocation { + MultiLocation { parents: n, interior: Junctions::X1(self) } + } + + /// Convert `self` into a `VersionedMultiLocation` containing 0 parents. + /// + /// Similar to `Into::into`, except that this method can be used in a const evaluation context. + pub const fn into_versioned(self) -> VersionedMultiLocation { + self.into_location().into_versioned() + } + + /// Remove the `NetworkId` value. + pub fn remove_network_id(&mut self) { + use Junction::*; + match self { + AccountId32 { ref mut network, .. } | + AccountIndex64 { ref mut network, .. } | + AccountKey20 { ref mut network, .. } => *network = None, + _ => {}, + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use alloc::vec; + + #[test] + fn junction_round_trip_works() { + let j = Junction::GeneralKey { length: 32, data: [1u8; 32] }; + let k = Junction::try_from(OldJunction::try_from(j).unwrap()).unwrap(); + assert_eq!(j, k); + + let j = OldJunction::GeneralKey(vec![1u8; 32].try_into().unwrap()); + let k = OldJunction::try_from(Junction::try_from(j.clone()).unwrap()).unwrap(); + assert_eq!(j, k); + + let j = Junction::from(BoundedVec::try_from(vec![1u8, 2, 3, 4]).unwrap()); + let k = Junction::try_from(OldJunction::try_from(j).unwrap()).unwrap(); + assert_eq!(j, k); + let s: BoundedSlice<_, _> = (&k).try_into().unwrap(); + assert_eq!(s, &[1u8, 2, 3, 4][..]); + + let j = OldJunction::GeneralKey(vec![1u8, 2, 3, 4].try_into().unwrap()); + let k = OldJunction::try_from(Junction::try_from(j.clone()).unwrap()).unwrap(); + assert_eq!(j, k); + } +} diff --git a/xcm/src/v3/junctions.rs b/xcm/src/v3/junctions.rs new file mode 100644 index 000000000000..d596489b209e --- /dev/null +++ b/xcm/src/v3/junctions.rs @@ -0,0 +1,708 @@ +// Copyright 2020-2021 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +//! XCM `Junctions`/`InteriorMultiLocation` datatype. + +use super::{Junction, MultiLocation, NetworkId}; +use core::{convert::TryFrom, mem, result}; +use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; +use scale_info::TypeInfo; + +/// Maximum number of `Junction`s that a `Junctions` can contain. +pub(crate) const MAX_JUNCTIONS: usize = 8; + +/// Non-parent junctions that can be constructed, up to the length of 8. This specific `Junctions` +/// implementation uses a Rust `enum` in order to make pattern matching easier. +/// +/// Parent junctions cannot be constructed with this type. Refer to `MultiLocation` for +/// instructions on constructing parent junctions. +#[derive( + Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, Debug, TypeInfo, MaxEncodedLen, +)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] +pub enum Junctions { + /// The interpreting consensus system. + Here, + /// A relative path comprising 1 junction. + X1(Junction), + /// A relative path comprising 2 junctions. + X2(Junction, Junction), + /// A relative path comprising 3 junctions. + X3(Junction, Junction, Junction), + /// A relative path comprising 4 junctions. + X4(Junction, Junction, Junction, Junction), + /// A relative path comprising 5 junctions. + X5(Junction, Junction, Junction, Junction, Junction), + /// A relative path comprising 6 junctions. + X6(Junction, Junction, Junction, Junction, Junction, Junction), + /// A relative path comprising 7 junctions. + X7(Junction, Junction, Junction, Junction, Junction, Junction, Junction), + /// A relative path comprising 8 junctions. + X8(Junction, Junction, Junction, Junction, Junction, Junction, Junction, Junction), +} + +pub struct JunctionsIterator(Junctions); +impl Iterator for JunctionsIterator { + type Item = Junction; + fn next(&mut self) -> Option { + self.0.take_first() + } +} + +impl DoubleEndedIterator for JunctionsIterator { + fn next_back(&mut self) -> Option { + self.0.take_last() + } +} + +pub struct JunctionsRefIterator<'a> { + junctions: &'a Junctions, + next: usize, + back: usize, +} + +impl<'a> Iterator for JunctionsRefIterator<'a> { + type Item = &'a Junction; + fn next(&mut self) -> Option<&'a Junction> { + if self.next.saturating_add(self.back) >= self.junctions.len() { + return None + } + + let result = self.junctions.at(self.next); + self.next += 1; + result + } +} + +impl<'a> DoubleEndedIterator for JunctionsRefIterator<'a> { + fn next_back(&mut self) -> Option<&'a Junction> { + let next_back = self.back.saturating_add(1); + // checked_sub here, because if the result is less than 0, we end iteration + let index = self.junctions.len().checked_sub(next_back)?; + if self.next > index { + return None + } + self.back = next_back; + + self.junctions.at(index) + } +} +impl<'a> IntoIterator for &'a Junctions { + type Item = &'a Junction; + type IntoIter = JunctionsRefIterator<'a>; + fn into_iter(self) -> Self::IntoIter { + JunctionsRefIterator { junctions: self, next: 0, back: 0 } + } +} + +impl IntoIterator for Junctions { + type Item = Junction; + type IntoIter = JunctionsIterator; + fn into_iter(self) -> Self::IntoIter { + JunctionsIterator(self) + } +} + +impl Junctions { + /// Convert `self` into a `MultiLocation` containing 0 parents. + /// + /// Similar to `Into::into`, except that this method can be used in a const evaluation context. + pub const fn into_location(self) -> MultiLocation { + MultiLocation { parents: 0, interior: self } + } + + /// Convert `self` into a `MultiLocation` containing `n` parents. + /// + /// Similar to `Self::into_location`, with the added ability to specify the number of parent junctions. + pub const fn into_exterior(self, n: u8) -> MultiLocation { + MultiLocation { parents: n, interior: self } + } + + /// Remove the `NetworkId` value in any `Junction`s. + pub fn remove_network_id(&mut self) { + self.for_each_mut(Junction::remove_network_id); + } + + /// Treating `self` as the universal context, return the location of the local consensus system + /// from the point of view of the given `target`. + pub fn invert_target(mut self, target: &MultiLocation) -> Result { + let mut junctions = Self::Here; + for _ in 0..target.parent_count() { + junctions = junctions + .pushed_front_with(self.take_last().unwrap_or(Junction::OnlyChild)) + .map_err(|_| ())?; + } + let parents = target.interior().len() as u8; + Ok(MultiLocation::new(parents, junctions)) + } + + /// Execute a function `f` on every junction. We use this since we cannot implement a mutable + /// `Iterator` without unsafe code. + pub fn for_each_mut(&mut self, mut x: impl FnMut(&mut Junction)) { + match self { + Junctions::Here => {}, + Junctions::X1(a) => { + x(a); + }, + Junctions::X2(a, b) => { + x(a); + x(b); + }, + Junctions::X3(a, b, c) => { + x(a); + x(b); + x(c); + }, + Junctions::X4(a, b, c, d) => { + x(a); + x(b); + x(c); + x(d); + }, + Junctions::X5(a, b, c, d, e) => { + x(a); + x(b); + x(c); + x(d); + x(e); + }, + Junctions::X6(a, b, c, d, e, f) => { + x(a); + x(b); + x(c); + x(d); + x(e); + x(f); + }, + Junctions::X7(a, b, c, d, e, f, g) => { + x(a); + x(b); + x(c); + x(d); + x(e); + x(f); + x(g); + }, + Junctions::X8(a, b, c, d, e, f, g, h) => { + x(a); + x(b); + x(c); + x(d); + x(e); + x(f); + x(g); + x(h); + }, + } + } + + /// Extract the network ID treating this value as a universal location. + /// + /// This will return an `Err` if the first item is not a `GlobalConsensus`, which would indicate + /// that this value is not a universal location. + pub fn global_consensus(&self) -> Result { + if let Some(Junction::GlobalConsensus(network)) = self.first() { + Ok(*network) + } else { + Err(()) + } + } + + /// Extract the network ID and the interior consensus location, treating this value as a + /// universal location. + /// + /// This will return an `Err` if the first item is not a `GlobalConsensus`, which would indicate + /// that this value is not a universal location. + pub fn split_global(self) -> Result<(NetworkId, Junctions), ()> { + match self.split_first() { + (location, Some(Junction::GlobalConsensus(network))) => Ok((network, location)), + _ => return Err(()), + } + } + + /// Treat `self` as a universal location and the context of `relative`, returning the universal + /// location of relative. + /// + /// This will return an error if `relative` has as many (or more) parents than there are + /// junctions in `self`, implying that relative refers into a different global consensus. + pub fn within_global(mut self, relative: MultiLocation) -> Result { + if self.len() <= relative.parents as usize { + return Err(()) + } + for _ in 0..relative.parents { + self.take_last(); + } + for j in relative.interior { + self.push(j).map_err(|_| ())?; + } + Ok(self) + } + + /// Consumes `self` and returns how `viewer` would address it locally. + pub fn relative_to(mut self, viewer: &Junctions) -> MultiLocation { + let mut i = 0; + while match (self.first(), viewer.at(i)) { + (Some(x), Some(y)) => x == y, + _ => false, + } { + self = self.split_first().0; + // NOTE: Cannot overflow as loop can only iterate at most `MAX_JUNCTIONS` times. + i += 1; + } + // AUDIT NOTES: + // - above loop ensures that `i <= viewer.len()`. + // - `viewer.len()` is at most `MAX_JUNCTIONS`, so won't overflow a `u8`. + MultiLocation { parents: (viewer.len() - i) as u8, interior: self } + } + + /// Returns first junction, or `None` if the location is empty. + pub fn first(&self) -> Option<&Junction> { + match &self { + Junctions::Here => None, + Junctions::X1(ref a) => Some(a), + Junctions::X2(ref a, ..) => Some(a), + Junctions::X3(ref a, ..) => Some(a), + Junctions::X4(ref a, ..) => Some(a), + Junctions::X5(ref a, ..) => Some(a), + Junctions::X6(ref a, ..) => Some(a), + Junctions::X7(ref a, ..) => Some(a), + Junctions::X8(ref a, ..) => Some(a), + } + } + + /// Returns last junction, or `None` if the location is empty. + pub fn last(&self) -> Option<&Junction> { + match &self { + Junctions::Here => None, + Junctions::X1(ref a) => Some(a), + Junctions::X2(.., ref a) => Some(a), + Junctions::X3(.., ref a) => Some(a), + Junctions::X4(.., ref a) => Some(a), + Junctions::X5(.., ref a) => Some(a), + Junctions::X6(.., ref a) => Some(a), + Junctions::X7(.., ref a) => Some(a), + Junctions::X8(.., ref a) => Some(a), + } + } + + /// Splits off the first junction, returning the remaining suffix (first item in tuple) and the first element + /// (second item in tuple) or `None` if it was empty. + pub fn split_first(self) -> (Junctions, Option) { + match self { + Junctions::Here => (Junctions::Here, None), + Junctions::X1(a) => (Junctions::Here, Some(a)), + Junctions::X2(a, b) => (Junctions::X1(b), Some(a)), + Junctions::X3(a, b, c) => (Junctions::X2(b, c), Some(a)), + Junctions::X4(a, b, c, d) => (Junctions::X3(b, c, d), Some(a)), + Junctions::X5(a, b, c, d, e) => (Junctions::X4(b, c, d, e), Some(a)), + Junctions::X6(a, b, c, d, e, f) => (Junctions::X5(b, c, d, e, f), Some(a)), + Junctions::X7(a, b, c, d, e, f, g) => (Junctions::X6(b, c, d, e, f, g), Some(a)), + Junctions::X8(a, b, c, d, e, f, g, h) => (Junctions::X7(b, c, d, e, f, g, h), Some(a)), + } + } + + /// Splits off the last junction, returning the remaining prefix (first item in tuple) and the last element + /// (second item in tuple) or `None` if it was empty. + pub fn split_last(self) -> (Junctions, Option) { + match self { + Junctions::Here => (Junctions::Here, None), + Junctions::X1(a) => (Junctions::Here, Some(a)), + Junctions::X2(a, b) => (Junctions::X1(a), Some(b)), + Junctions::X3(a, b, c) => (Junctions::X2(a, b), Some(c)), + Junctions::X4(a, b, c, d) => (Junctions::X3(a, b, c), Some(d)), + Junctions::X5(a, b, c, d, e) => (Junctions::X4(a, b, c, d), Some(e)), + Junctions::X6(a, b, c, d, e, f) => (Junctions::X5(a, b, c, d, e), Some(f)), + Junctions::X7(a, b, c, d, e, f, g) => (Junctions::X6(a, b, c, d, e, f), Some(g)), + Junctions::X8(a, b, c, d, e, f, g, h) => (Junctions::X7(a, b, c, d, e, f, g), Some(h)), + } + } + + /// Removes the first element from `self`, returning it (or `None` if it was empty). + pub fn take_first(&mut self) -> Option { + let mut d = Junctions::Here; + mem::swap(&mut *self, &mut d); + let (tail, head) = d.split_first(); + *self = tail; + head + } + + /// Removes the last element from `self`, returning it (or `None` if it was empty). + pub fn take_last(&mut self) -> Option { + let mut d = Junctions::Here; + mem::swap(&mut *self, &mut d); + let (head, tail) = d.split_last(); + *self = head; + tail + } + + /// Mutates `self` to be appended with `new` or returns an `Err` with `new` if would overflow. + pub fn push(&mut self, new: impl Into) -> result::Result<(), Junction> { + let new = new.into(); + let mut dummy = Junctions::Here; + mem::swap(self, &mut dummy); + match dummy.pushed_with(new) { + Ok(s) => { + *self = s; + Ok(()) + }, + Err((s, j)) => { + *self = s; + Err(j) + }, + } + } + + /// Mutates `self` to be prepended with `new` or returns an `Err` with `new` if would overflow. + pub fn push_front(&mut self, new: impl Into) -> result::Result<(), Junction> { + let new = new.into(); + let mut dummy = Junctions::Here; + mem::swap(self, &mut dummy); + match dummy.pushed_front_with(new) { + Ok(s) => { + *self = s; + Ok(()) + }, + Err((s, j)) => { + *self = s; + Err(j) + }, + } + } + + /// Consumes `self` and returns a `Junctions` suffixed with `new`, or an `Err` with the + /// original value of `self` and `new` in case of overflow. + pub fn pushed_with(self, new: impl Into) -> result::Result { + let new = new.into(); + Ok(match self { + Junctions::Here => Junctions::X1(new), + Junctions::X1(a) => Junctions::X2(a, new), + Junctions::X2(a, b) => Junctions::X3(a, b, new), + Junctions::X3(a, b, c) => Junctions::X4(a, b, c, new), + Junctions::X4(a, b, c, d) => Junctions::X5(a, b, c, d, new), + Junctions::X5(a, b, c, d, e) => Junctions::X6(a, b, c, d, e, new), + Junctions::X6(a, b, c, d, e, f) => Junctions::X7(a, b, c, d, e, f, new), + Junctions::X7(a, b, c, d, e, f, g) => Junctions::X8(a, b, c, d, e, f, g, new), + s => Err((s, new))?, + }) + } + + /// Consumes `self` and returns a `Junctions` prefixed with `new`, or an `Err` with the + /// original value of `self` and `new` in case of overflow. + pub fn pushed_front_with( + self, + new: impl Into, + ) -> result::Result { + let new = new.into(); + Ok(match self { + Junctions::Here => Junctions::X1(new), + Junctions::X1(a) => Junctions::X2(new, a), + Junctions::X2(a, b) => Junctions::X3(new, a, b), + Junctions::X3(a, b, c) => Junctions::X4(new, a, b, c), + Junctions::X4(a, b, c, d) => Junctions::X5(new, a, b, c, d), + Junctions::X5(a, b, c, d, e) => Junctions::X6(new, a, b, c, d, e), + Junctions::X6(a, b, c, d, e, f) => Junctions::X7(new, a, b, c, d, e, f), + Junctions::X7(a, b, c, d, e, f, g) => Junctions::X8(new, a, b, c, d, e, f, g), + s => Err((s, new))?, + }) + } + + /// Mutate `self` so that it is suffixed with `suffix`. + /// + /// Does not modify `self` and returns `Err` with `suffix` in case of overflow. + /// + /// # Example + /// ```rust + /// # use xcm::v3::{Junctions::*, Junction::*, MultiLocation}; + /// # fn main() { + /// let mut m = X1(Parachain(21)); + /// assert_eq!(m.append_with(X1(PalletInstance(3))), Ok(())); + /// assert_eq!(m, X2(Parachain(21), PalletInstance(3))); + /// # } + /// ``` + pub fn append_with(&mut self, suffix: impl Into) -> Result<(), Junctions> { + let suffix = suffix.into(); + if self.len().saturating_add(suffix.len()) > MAX_JUNCTIONS { + return Err(suffix) + } + for j in suffix.into_iter() { + self.push(j).expect("Already checked the sum of the len()s; qed") + } + Ok(()) + } + + /// Returns the number of junctions in `self`. + pub const fn len(&self) -> usize { + match &self { + Junctions::Here => 0, + Junctions::X1(..) => 1, + Junctions::X2(..) => 2, + Junctions::X3(..) => 3, + Junctions::X4(..) => 4, + Junctions::X5(..) => 5, + Junctions::X6(..) => 6, + Junctions::X7(..) => 7, + Junctions::X8(..) => 8, + } + } + + /// Returns the junction at index `i`, or `None` if the location doesn't contain that many elements. + pub fn at(&self, i: usize) -> Option<&Junction> { + Some(match (i, self) { + (0, Junctions::X1(ref a)) => a, + (0, Junctions::X2(ref a, ..)) => a, + (0, Junctions::X3(ref a, ..)) => a, + (0, Junctions::X4(ref a, ..)) => a, + (0, Junctions::X5(ref a, ..)) => a, + (0, Junctions::X6(ref a, ..)) => a, + (0, Junctions::X7(ref a, ..)) => a, + (0, Junctions::X8(ref a, ..)) => a, + (1, Junctions::X2(_, ref a)) => a, + (1, Junctions::X3(_, ref a, ..)) => a, + (1, Junctions::X4(_, ref a, ..)) => a, + (1, Junctions::X5(_, ref a, ..)) => a, + (1, Junctions::X6(_, ref a, ..)) => a, + (1, Junctions::X7(_, ref a, ..)) => a, + (1, Junctions::X8(_, ref a, ..)) => a, + (2, Junctions::X3(_, _, ref a)) => a, + (2, Junctions::X4(_, _, ref a, ..)) => a, + (2, Junctions::X5(_, _, ref a, ..)) => a, + (2, Junctions::X6(_, _, ref a, ..)) => a, + (2, Junctions::X7(_, _, ref a, ..)) => a, + (2, Junctions::X8(_, _, ref a, ..)) => a, + (3, Junctions::X4(_, _, _, ref a)) => a, + (3, Junctions::X5(_, _, _, ref a, ..)) => a, + (3, Junctions::X6(_, _, _, ref a, ..)) => a, + (3, Junctions::X7(_, _, _, ref a, ..)) => a, + (3, Junctions::X8(_, _, _, ref a, ..)) => a, + (4, Junctions::X5(_, _, _, _, ref a)) => a, + (4, Junctions::X6(_, _, _, _, ref a, ..)) => a, + (4, Junctions::X7(_, _, _, _, ref a, ..)) => a, + (4, Junctions::X8(_, _, _, _, ref a, ..)) => a, + (5, Junctions::X6(_, _, _, _, _, ref a)) => a, + (5, Junctions::X7(_, _, _, _, _, ref a, ..)) => a, + (5, Junctions::X8(_, _, _, _, _, ref a, ..)) => a, + (6, Junctions::X7(_, _, _, _, _, _, ref a)) => a, + (6, Junctions::X8(_, _, _, _, _, _, ref a, ..)) => a, + (7, Junctions::X8(_, _, _, _, _, _, _, ref a)) => a, + _ => return None, + }) + } + + /// Returns a mutable reference to the junction at index `i`, or `None` if the location doesn't contain that many + /// elements. + pub fn at_mut(&mut self, i: usize) -> Option<&mut Junction> { + Some(match (i, self) { + (0, Junctions::X1(ref mut a)) => a, + (0, Junctions::X2(ref mut a, ..)) => a, + (0, Junctions::X3(ref mut a, ..)) => a, + (0, Junctions::X4(ref mut a, ..)) => a, + (0, Junctions::X5(ref mut a, ..)) => a, + (0, Junctions::X6(ref mut a, ..)) => a, + (0, Junctions::X7(ref mut a, ..)) => a, + (0, Junctions::X8(ref mut a, ..)) => a, + (1, Junctions::X2(_, ref mut a)) => a, + (1, Junctions::X3(_, ref mut a, ..)) => a, + (1, Junctions::X4(_, ref mut a, ..)) => a, + (1, Junctions::X5(_, ref mut a, ..)) => a, + (1, Junctions::X6(_, ref mut a, ..)) => a, + (1, Junctions::X7(_, ref mut a, ..)) => a, + (1, Junctions::X8(_, ref mut a, ..)) => a, + (2, Junctions::X3(_, _, ref mut a)) => a, + (2, Junctions::X4(_, _, ref mut a, ..)) => a, + (2, Junctions::X5(_, _, ref mut a, ..)) => a, + (2, Junctions::X6(_, _, ref mut a, ..)) => a, + (2, Junctions::X7(_, _, ref mut a, ..)) => a, + (2, Junctions::X8(_, _, ref mut a, ..)) => a, + (3, Junctions::X4(_, _, _, ref mut a)) => a, + (3, Junctions::X5(_, _, _, ref mut a, ..)) => a, + (3, Junctions::X6(_, _, _, ref mut a, ..)) => a, + (3, Junctions::X7(_, _, _, ref mut a, ..)) => a, + (3, Junctions::X8(_, _, _, ref mut a, ..)) => a, + (4, Junctions::X5(_, _, _, _, ref mut a)) => a, + (4, Junctions::X6(_, _, _, _, ref mut a, ..)) => a, + (4, Junctions::X7(_, _, _, _, ref mut a, ..)) => a, + (4, Junctions::X8(_, _, _, _, ref mut a, ..)) => a, + (5, Junctions::X6(_, _, _, _, _, ref mut a)) => a, + (5, Junctions::X7(_, _, _, _, _, ref mut a, ..)) => a, + (5, Junctions::X8(_, _, _, _, _, ref mut a, ..)) => a, + (6, Junctions::X7(_, _, _, _, _, _, ref mut a)) => a, + (6, Junctions::X8(_, _, _, _, _, _, ref mut a, ..)) => a, + (7, Junctions::X8(_, _, _, _, _, _, _, ref mut a)) => a, + _ => return None, + }) + } + + /// Returns a reference iterator over the junctions. + pub fn iter(&self) -> JunctionsRefIterator { + JunctionsRefIterator { junctions: self, next: 0, back: 0 } + } + + /// Ensures that self begins with `prefix` and that it has a single `Junction` item following. + /// If so, returns a reference to this `Junction` item. + /// + /// # Example + /// ```rust + /// # use xcm::v3::{Junctions::*, Junction::*}; + /// # fn main() { + /// let mut m = X3(Parachain(2), PalletInstance(3), OnlyChild); + /// assert_eq!(m.match_and_split(&X2(Parachain(2), PalletInstance(3))), Some(&OnlyChild)); + /// assert_eq!(m.match_and_split(&X1(Parachain(2))), None); + /// # } + /// ``` + pub fn match_and_split(&self, prefix: &Junctions) -> Option<&Junction> { + if prefix.len() + 1 != self.len() { + return None + } + for i in 0..prefix.len() { + if prefix.at(i) != self.at(i) { + return None + } + } + return self.at(prefix.len()) + } + + pub fn starts_with(&self, prefix: &Junctions) -> bool { + prefix.len() <= self.len() && prefix.iter().zip(self.iter()).all(|(x, y)| x == y) + } +} + +impl TryFrom for Junctions { + type Error = MultiLocation; + fn try_from(x: MultiLocation) -> result::Result { + if x.parents > 0 { + Err(x) + } else { + Ok(x.interior) + } + } +} + +impl> From for Junctions { + fn from(x: T) -> Self { + Self::X1(x.into()) + } +} + +impl From<[Junction; 0]> for Junctions { + fn from(_: [Junction; 0]) -> Self { + Self::Here + } +} + +impl From<()> for Junctions { + fn from(_: ()) -> Self { + Self::Here + } +} + +xcm_procedural::impl_conversion_functions_for_junctions_v3!(); + +#[cfg(test)] +mod tests { + use super::{super::prelude::*, *}; + + #[test] + fn inverting_works() { + let context: InteriorMultiLocation = (Parachain(1000), PalletInstance(42)).into(); + let target = (Parent, PalletInstance(69)).into(); + let expected = (Parent, PalletInstance(42)).into(); + let inverted = context.invert_target(&target).unwrap(); + assert_eq!(inverted, expected); + + let context: InteriorMultiLocation = + (Parachain(1000), PalletInstance(42), GeneralIndex(1)).into(); + let target = (Parent, Parent, PalletInstance(69), GeneralIndex(2)).into(); + let expected = (Parent, Parent, PalletInstance(42), GeneralIndex(1)).into(); + let inverted = context.invert_target(&target).unwrap(); + assert_eq!(inverted, expected); + } + + #[test] + fn relative_to_works() { + use Junctions::*; + use NetworkId::*; + assert_eq!(X1(Polkadot.into()).relative_to(&X1(Kusama.into())), (Parent, Polkadot).into()); + let base = X3(Kusama.into(), Parachain(1), PalletInstance(1)); + + // Ancestors. + assert_eq!(Here.relative_to(&base), (Parent, Parent, Parent).into()); + assert_eq!(X1(Kusama.into()).relative_to(&base), (Parent, Parent).into()); + assert_eq!(X2(Kusama.into(), Parachain(1)).relative_to(&base), (Parent,).into()); + assert_eq!( + X3(Kusama.into(), Parachain(1), PalletInstance(1)).relative_to(&base), + Here.into() + ); + + // Ancestors with one child. + assert_eq!( + X1(Polkadot.into()).relative_to(&base), + (Parent, Parent, Parent, Polkadot).into() + ); + assert_eq!( + X2(Kusama.into(), Parachain(2)).relative_to(&base), + (Parent, Parent, Parachain(2)).into() + ); + assert_eq!( + X3(Kusama.into(), Parachain(1), PalletInstance(2)).relative_to(&base), + (Parent, PalletInstance(2)).into() + ); + assert_eq!( + X4(Kusama.into(), Parachain(1), PalletInstance(1), [1u8; 32].into()).relative_to(&base), + ([1u8; 32],).into() + ); + + // Ancestors with grandchildren. + assert_eq!( + X2(Polkadot.into(), Parachain(1)).relative_to(&base), + (Parent, Parent, Parent, Polkadot, Parachain(1)).into() + ); + assert_eq!( + X3(Kusama.into(), Parachain(2), PalletInstance(1)).relative_to(&base), + (Parent, Parent, Parachain(2), PalletInstance(1)).into() + ); + assert_eq!( + X4(Kusama.into(), Parachain(1), PalletInstance(2), [1u8; 32].into()).relative_to(&base), + (Parent, PalletInstance(2), [1u8; 32]).into() + ); + assert_eq!( + X5(Kusama.into(), Parachain(1), PalletInstance(1), [1u8; 32].into(), 1u128.into()) + .relative_to(&base), + ([1u8; 32], 1u128).into() + ); + } + + #[test] + fn global_consensus_works() { + use Junctions::*; + use NetworkId::*; + assert_eq!(X1(Polkadot.into()).global_consensus(), Ok(Polkadot)); + assert_eq!(X2(Kusama.into(), 1u64.into()).global_consensus(), Ok(Kusama)); + assert_eq!(Here.global_consensus(), Err(())); + assert_eq!(X1(1u64.into()).global_consensus(), Err(())); + assert_eq!(X2(1u64.into(), Kusama.into()).global_consensus(), Err(())); + } + + #[test] + fn test_conversion() { + use super::{Junction::*, Junctions::*, NetworkId::*}; + let x: Junctions = GlobalConsensus(Polkadot).into(); + assert_eq!(x, X1(GlobalConsensus(Polkadot))); + let x: Junctions = Polkadot.into(); + assert_eq!(x, X1(GlobalConsensus(Polkadot))); + let x: Junctions = (Polkadot, Kusama).into(); + assert_eq!(x, X2(GlobalConsensus(Polkadot), GlobalConsensus(Kusama))); + } +} diff --git a/xcm/src/v3/matcher.rs b/xcm/src/v3/matcher.rs new file mode 100644 index 000000000000..de390338e3f5 --- /dev/null +++ b/xcm/src/v3/matcher.rs @@ -0,0 +1,109 @@ +// Copyright 2023 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate 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 Polkadot. If not, see . + +//! XCM matcher API, used primarily for writing barrier conditions. + +use super::{Instruction, MultiLocation}; +use crate::{CreateMatcher, MatchXcm}; +use core::ops::ControlFlow; + +impl<'a, Call> CreateMatcher for &'a mut [Instruction] { + type Matcher = Matcher<'a, Call>; + + fn matcher(self) -> Self::Matcher { + let total_inst = self.len(); + + Matcher { xcm: self, current_idx: 0, total_inst } + } +} + +/// Struct created from calling `fn matcher()` on a mutable slice of `Instruction`s. +/// +/// Implements `MatchXcm` to allow an iterator-like API to match against each `Instruction` +/// contained within the slice, which facilitates the building of XCM barriers. +pub struct Matcher<'a, Call> { + pub(crate) xcm: &'a mut [Instruction], + pub(crate) current_idx: usize, + pub(crate) total_inst: usize, +} + +impl<'a, Call> MatchXcm for Matcher<'a, Call> { + type Error = (); + type Inst = Instruction; + type Loc = MultiLocation; + + fn assert_remaining_insts(self, n: usize) -> Result + where + Self: Sized, + { + if self.total_inst - self.current_idx != n { + return Err(()) + } + + Ok(self) + } + + fn match_next_inst(mut self, mut f: F) -> Result + where + Self: Sized, + F: FnMut(&mut Self::Inst) -> Result<(), Self::Error>, + { + if self.current_idx < self.total_inst { + f(&mut self.xcm[self.current_idx])?; + self.current_idx += 1; + Ok(self) + } else { + Err(()) + } + } + + fn match_next_inst_while(mut self, cond: C, mut f: F) -> Result + where + Self: Sized, + C: Fn(&Self::Inst) -> bool, + F: FnMut(&mut Self::Inst) -> Result, Self::Error>, + { + if self.current_idx >= self.total_inst { + return Err(()) + } + + while self.current_idx < self.total_inst && cond(&self.xcm[self.current_idx]) { + if let ControlFlow::Break(()) = f(&mut self.xcm[self.current_idx])? { + break + } + self.current_idx += 1; + } + + Ok(self) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::v3::prelude::*; + use alloc::{vec, vec::Vec}; + + #[test] + fn match_next_inst_while_works() { + let mut xcm: Vec> = vec![ClearOrigin]; + + let _ = xcm + .matcher() + .match_next_inst_while(|_| true, |_| Ok(ControlFlow::Continue(()))) + .unwrap(); + } +} diff --git a/xcm/src/v3/mod.rs b/xcm/src/v3/mod.rs new file mode 100644 index 000000000000..45a960f28ffe --- /dev/null +++ b/xcm/src/v3/mod.rs @@ -0,0 +1,1413 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate 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 Polkadot. If not, see . + +//! Version 3 of the Cross-Consensus Message format data structures. + +use super::v2::{ + Instruction as OldInstruction, Response as OldResponse, WeightLimit as OldWeightLimit, + Xcm as OldXcm, +}; +use crate::{DoubleEncoded, GetWeight}; +use alloc::{vec, vec::Vec}; +use bounded_collections::{parameter_types, BoundedVec}; +use core::{ + convert::{TryFrom, TryInto}, + fmt::Debug, + result, +}; +use derivative::Derivative; +use parity_scale_codec::{self, Decode, Encode, MaxEncodedLen}; +use scale_info::TypeInfo; + +mod junction; +pub(crate) mod junctions; +mod matcher; +mod multiasset; +mod multilocation; +mod traits; + +pub use junction::{BodyId, BodyPart, Junction, NetworkId}; +pub use junctions::Junctions; +pub use matcher::Matcher; +pub use multiasset::{ + AssetId, AssetInstance, Fungibility, MultiAsset, MultiAssetFilter, MultiAssets, + WildFungibility, WildMultiAsset, +}; +pub use multilocation::{ + Ancestor, AncestorThen, InteriorMultiLocation, MultiLocation, Parent, ParentThen, +}; +pub use traits::{ + send_xcm, validate_send, Error, ExecuteXcm, Outcome, PreparedMessage, Result, SendError, + SendResult, SendXcm, Unwrappable, Weight, XcmHash, +}; +// These parts of XCM v2 are unchanged in XCM v3, and are re-imported here. +pub use super::v2::OriginKind; + +/// This module's XCM version. +pub const VERSION: super::Version = 3; + +/// An identifier for a query. +pub type QueryId = u64; + +#[derive(Derivative, Default, Encode, Decode, TypeInfo)] +#[derivative(Clone(bound = ""), Eq(bound = ""), PartialEq(bound = ""), Debug(bound = ""))] +#[codec(encode_bound())] +#[codec(decode_bound())] +#[scale_info(bounds(), skip_type_params(Call))] +pub struct Xcm(pub Vec>); + +impl Xcm { + /// Create an empty instance. + pub fn new() -> Self { + Self(vec![]) + } + + /// Return `true` if no instructions are held in `self`. + pub fn is_empty(&self) -> bool { + self.0.is_empty() + } + + /// Return the number of instructions held in `self`. + pub fn len(&self) -> usize { + self.0.len() + } + + /// Return a reference to the inner value. + pub fn inner(&self) -> &[Instruction] { + &self.0 + } + + /// Return a mutable reference to the inner value. + pub fn inner_mut(&mut self) -> &mut Vec> { + &mut self.0 + } + + /// Consume and return the inner value. + pub fn into_inner(self) -> Vec> { + self.0 + } + + /// Return an iterator over references to the items. + pub fn iter(&self) -> impl Iterator> { + self.0.iter() + } + + /// Return an iterator over mutable references to the items. + pub fn iter_mut(&mut self) -> impl Iterator> { + self.0.iter_mut() + } + + /// Consume and return an iterator over the items. + pub fn into_iter(self) -> impl Iterator> { + self.0.into_iter() + } + + /// Consume and either return `self` if it contains some instructions, or if it's empty, then + /// instead return the result of `f`. + pub fn or_else(self, f: impl FnOnce() -> Self) -> Self { + if self.0.is_empty() { + f() + } else { + self + } + } + + /// Return the first instruction, if any. + pub fn first(&self) -> Option<&Instruction> { + self.0.first() + } + + /// Return the last instruction, if any. + pub fn last(&self) -> Option<&Instruction> { + self.0.last() + } + + /// Return the only instruction, contained in `Self`, iff only one exists (`None` otherwise). + pub fn only(&self) -> Option<&Instruction> { + if self.0.len() == 1 { + self.0.first() + } else { + None + } + } + + /// Return the only instruction, contained in `Self`, iff only one exists (returns `self` + /// otherwise). + pub fn into_only(mut self) -> core::result::Result, Self> { + if self.0.len() == 1 { + self.0.pop().ok_or(self) + } else { + Err(self) + } + } +} + +impl From>> for Xcm { + fn from(c: Vec>) -> Self { + Self(c) + } +} + +impl From> for Vec> { + fn from(c: Xcm) -> Self { + c.0 + } +} + +/// A prelude for importing all types typically used when interacting with XCM messages. +pub mod prelude { + mod contents { + pub use super::super::{ + send_xcm, validate_send, Ancestor, AncestorThen, + AssetId::{self, *}, + AssetInstance::{self, *}, + BodyId, BodyPart, Error as XcmError, ExecuteXcm, + Fungibility::{self, *}, + Instruction::*, + InteriorMultiLocation, + Junction::{self, *}, + Junctions::{self, *}, + MaybeErrorCode, MultiAsset, + MultiAssetFilter::{self, *}, + MultiAssets, MultiLocation, + NetworkId::{self, *}, + OriginKind, Outcome, PalletInfo, Parent, ParentThen, PreparedMessage, QueryId, + QueryResponseInfo, Response, Result as XcmResult, SendError, SendResult, SendXcm, + Unwrappable, + WeightLimit::{self, *}, + WildFungibility::{self, Fungible as WildFungible, NonFungible as WildNonFungible}, + WildMultiAsset::{self, *}, + XcmContext, XcmHash, XcmWeightInfo, VERSION as XCM_VERSION, + }; + } + pub use super::{Instruction, Xcm}; + pub use contents::*; + pub mod opaque { + pub use super::{ + super::opaque::{Instruction, Xcm}, + contents::*, + }; + } +} + +parameter_types! { + pub MaxPalletNameLen: u32 = 48; + /// Maximum size of the encoded error code coming from a `Dispatch` result, used for + /// `MaybeErrorCode`. This is not (yet) enforced, so it's just an indication of expectation. + pub MaxDispatchErrorLen: u32 = 128; + pub MaxPalletsInfo: u32 = 64; +} + +#[derive(Clone, Eq, PartialEq, Encode, Decode, Debug, TypeInfo, MaxEncodedLen)] +pub struct PalletInfo { + #[codec(compact)] + index: u32, + name: BoundedVec, + module_name: BoundedVec, + #[codec(compact)] + major: u32, + #[codec(compact)] + minor: u32, + #[codec(compact)] + patch: u32, +} + +impl PalletInfo { + pub fn new( + index: u32, + name: Vec, + module_name: Vec, + major: u32, + minor: u32, + patch: u32, + ) -> result::Result { + let name = BoundedVec::try_from(name).map_err(|_| Error::Overflow)?; + let module_name = BoundedVec::try_from(module_name).map_err(|_| Error::Overflow)?; + + Ok(Self { index, name, module_name, major, minor, patch }) + } +} + +#[derive(Clone, Eq, PartialEq, Encode, Decode, Debug, TypeInfo, MaxEncodedLen)] +pub enum MaybeErrorCode { + Success, + Error(BoundedVec), + TruncatedError(BoundedVec), +} + +impl From> for MaybeErrorCode { + fn from(v: Vec) -> Self { + match BoundedVec::try_from(v) { + Ok(error) => MaybeErrorCode::Error(error), + Err(error) => MaybeErrorCode::TruncatedError(BoundedVec::truncate_from(error)), + } + } +} + +impl Default for MaybeErrorCode { + fn default() -> MaybeErrorCode { + MaybeErrorCode::Success + } +} + +/// Response data to a query. +#[derive(Clone, Eq, PartialEq, Encode, Decode, Debug, TypeInfo, MaxEncodedLen)] +pub enum Response { + /// No response. Serves as a neutral default. + Null, + /// Some assets. + Assets(MultiAssets), + /// The outcome of an XCM instruction. + ExecutionResult(Option<(u32, Error)>), + /// An XCM version. + Version(super::Version), + /// The index, instance name, pallet name and version of some pallets. + PalletsInfo(BoundedVec), + /// The status of a dispatch attempt using `Transact`. + DispatchResult(MaybeErrorCode), +} + +impl Default for Response { + fn default() -> Self { + Self::Null + } +} + +/// Information regarding the composition of a query response. +#[derive(Clone, Eq, PartialEq, Encode, Decode, Debug, TypeInfo)] +pub struct QueryResponseInfo { + /// The destination to which the query response message should be send. + pub destination: MultiLocation, + /// The `query_id` field of the `QueryResponse` message. + #[codec(compact)] + pub query_id: QueryId, + /// The `max_weight` field of the `QueryResponse` message. + pub max_weight: Weight, +} + +/// An optional weight limit. +#[derive(Clone, Eq, PartialEq, Encode, Decode, Debug, TypeInfo)] +pub enum WeightLimit { + /// No weight limit imposed. + Unlimited, + /// Weight limit imposed of the inner value. + Limited(Weight), +} + +impl From> for WeightLimit { + fn from(x: Option) -> Self { + match x { + Some(w) => WeightLimit::Limited(w), + None => WeightLimit::Unlimited, + } + } +} + +impl From for Option { + fn from(x: WeightLimit) -> Self { + match x { + WeightLimit::Limited(w) => Some(w), + WeightLimit::Unlimited => None, + } + } +} + +impl TryFrom for WeightLimit { + type Error = (); + fn try_from(x: OldWeightLimit) -> result::Result { + use OldWeightLimit::*; + match x { + Limited(w) => Ok(Self::Limited(Weight::from_parts(w, DEFAULT_PROOF_SIZE))), + Unlimited => Ok(Self::Unlimited), + } + } +} + +/// Contextual data pertaining to a specific list of XCM instructions. +#[derive(Clone, Eq, PartialEq, Encode, Decode, Debug)] +pub struct XcmContext { + /// The `MultiLocation` origin of the corresponding XCM. + pub origin: Option, + /// The hash of the XCM. + pub message_hash: XcmHash, + /// The topic of the XCM. + pub topic: Option<[u8; 32]>, +} + +impl XcmContext { + /// Constructor which sets the message hash to the supplied parameter and leaves the origin and + /// topic unset. + pub fn with_message_hash(message_hash: XcmHash) -> XcmContext { + XcmContext { origin: None, message_hash, topic: None } + } +} + +/// Cross-Consensus Message: A message from one consensus system to another. +/// +/// Consensus systems that may send and receive messages include blockchains and smart contracts. +/// +/// All messages are delivered from a known *origin*, expressed as a `MultiLocation`. +/// +/// This is the inner XCM format and is version-sensitive. Messages are typically passed using the outer +/// XCM format, known as `VersionedXcm`. +#[derive(Derivative, Encode, Decode, TypeInfo, xcm_procedural::XcmWeightInfoTrait)] +#[derivative(Clone(bound = ""), Eq(bound = ""), PartialEq(bound = ""), Debug(bound = ""))] +#[codec(encode_bound())] +#[codec(decode_bound())] +#[scale_info(bounds(), skip_type_params(Call))] +pub enum Instruction { + /// Withdraw asset(s) (`assets`) from the ownership of `origin` and place them into the Holding + /// Register. + /// + /// - `assets`: The asset(s) to be withdrawn into holding. + /// + /// Kind: *Instruction*. + /// + /// Errors: + WithdrawAsset(MultiAssets), + + /// Asset(s) (`assets`) have been received into the ownership of this system on the `origin` + /// system and equivalent derivatives should be placed into the Holding Register. + /// + /// - `assets`: The asset(s) that are minted into holding. + /// + /// Safety: `origin` must be trusted to have received and be storing `assets` such that they + /// may later be withdrawn should this system send a corresponding message. + /// + /// Kind: *Trusted Indication*. + /// + /// Errors: + ReserveAssetDeposited(MultiAssets), + + /// Asset(s) (`assets`) have been destroyed on the `origin` system and equivalent assets should + /// be created and placed into the Holding Register. + /// + /// - `assets`: The asset(s) that are minted into the Holding Register. + /// + /// Safety: `origin` must be trusted to have irrevocably destroyed the corresponding `assets` + /// prior as a consequence of sending this message. + /// + /// Kind: *Trusted Indication*. + /// + /// Errors: + ReceiveTeleportedAsset(MultiAssets), + + /// Respond with information that the local system is expecting. + /// + /// - `query_id`: The identifier of the query that resulted in this message being sent. + /// - `response`: The message content. + /// - `max_weight`: The maximum weight that handling this response should take. + /// - `querier`: The location responsible for the initiation of the response, if there is one. + /// In general this will tend to be the same location as the receiver of this message. + /// NOTE: As usual, this is interpreted from the perspective of the receiving consensus + /// system. + /// + /// Safety: Since this is information only, there are no immediate concerns. However, it should + /// be remembered that even if the Origin behaves reasonably, it can always be asked to make + /// a response to a third-party chain who may or may not be expecting the response. Therefore + /// the `querier` should be checked to match the expected value. + /// + /// Kind: *Information*. + /// + /// Errors: + QueryResponse { + #[codec(compact)] + query_id: QueryId, + response: Response, + max_weight: Weight, + querier: Option, + }, + + /// Withdraw asset(s) (`assets`) from the ownership of `origin` and place equivalent assets + /// under the ownership of `beneficiary`. + /// + /// - `assets`: The asset(s) to be withdrawn. + /// - `beneficiary`: The new owner for the assets. + /// + /// Safety: No concerns. + /// + /// Kind: *Instruction*. + /// + /// Errors: + TransferAsset { assets: MultiAssets, beneficiary: MultiLocation }, + + /// Withdraw asset(s) (`assets`) from the ownership of `origin` and place equivalent assets + /// under the ownership of `dest` within this consensus system (i.e. its sovereign account). + /// + /// Send an onward XCM message to `dest` of `ReserveAssetDeposited` with the given + /// `xcm`. + /// + /// - `assets`: The asset(s) to be withdrawn. + /// - `dest`: The location whose sovereign account will own the assets and thus the effective + /// beneficiary for the assets and the notification target for the reserve asset deposit + /// message. + /// - `xcm`: The instructions that should follow the `ReserveAssetDeposited` + /// instruction, which is sent onwards to `dest`. + /// + /// Safety: No concerns. + /// + /// Kind: *Instruction*. + /// + /// Errors: + TransferReserveAsset { assets: MultiAssets, dest: MultiLocation, xcm: Xcm<()> }, + + /// Apply the encoded transaction `call`, whose dispatch-origin should be `origin` as expressed + /// by the kind of origin `origin_kind`. + /// + /// The Transact Status Register is set according to the result of dispatching the call. + /// + /// - `origin_kind`: The means of expressing the message origin as a dispatch origin. + /// - `require_weight_at_most`: The weight of `call`; this should be at least the chain's + /// calculated weight and will be used in the weight determination arithmetic. + /// - `call`: The encoded transaction to be applied. + /// + /// Safety: No concerns. + /// + /// Kind: *Instruction*. + /// + /// Errors: + Transact { origin_kind: OriginKind, require_weight_at_most: Weight, call: DoubleEncoded }, + + /// A message to notify about a new incoming HRMP channel. This message is meant to be sent by the + /// relay-chain to a para. + /// + /// - `sender`: The sender in the to-be opened channel. Also, the initiator of the channel opening. + /// - `max_message_size`: The maximum size of a message proposed by the sender. + /// - `max_capacity`: The maximum number of messages that can be queued in the channel. + /// + /// Safety: The message should originate directly from the relay-chain. + /// + /// Kind: *System Notification* + HrmpNewChannelOpenRequest { + #[codec(compact)] + sender: u32, + #[codec(compact)] + max_message_size: u32, + #[codec(compact)] + max_capacity: u32, + }, + + /// A message to notify about that a previously sent open channel request has been accepted by + /// the recipient. That means that the channel will be opened during the next relay-chain session + /// change. This message is meant to be sent by the relay-chain to a para. + /// + /// Safety: The message should originate directly from the relay-chain. + /// + /// Kind: *System Notification* + /// + /// Errors: + HrmpChannelAccepted { + // NOTE: We keep this as a structured item to a) keep it consistent with the other Hrmp + // items; and b) because the field's meaning is not obvious/mentioned from the item name. + #[codec(compact)] + recipient: u32, + }, + + /// A message to notify that the other party in an open channel decided to close it. In particular, + /// `initiator` is going to close the channel opened from `sender` to the `recipient`. The close + /// will be enacted at the next relay-chain session change. This message is meant to be sent by + /// the relay-chain to a para. + /// + /// Safety: The message should originate directly from the relay-chain. + /// + /// Kind: *System Notification* + /// + /// Errors: + HrmpChannelClosing { + #[codec(compact)] + initiator: u32, + #[codec(compact)] + sender: u32, + #[codec(compact)] + recipient: u32, + }, + + /// Clear the origin. + /// + /// This may be used by the XCM author to ensure that later instructions cannot command the + /// authority of the origin (e.g. if they are being relayed from an untrusted source, as often + /// the case with `ReserveAssetDeposited`). + /// + /// Safety: No concerns. + /// + /// Kind: *Instruction*. + /// + /// Errors: + ClearOrigin, + + /// Mutate the origin to some interior location. + /// + /// Kind: *Instruction* + /// + /// Errors: + DescendOrigin(InteriorMultiLocation), + + /// Immediately report the contents of the Error Register to the given destination via XCM. + /// + /// A `QueryResponse` message of type `ExecutionOutcome` is sent to the described destination. + /// + /// - `response_info`: Information for making the response. + /// + /// Kind: *Instruction* + /// + /// Errors: + ReportError(QueryResponseInfo), + + /// Remove the asset(s) (`assets`) from the Holding Register and place equivalent assets under + /// the ownership of `beneficiary` within this consensus system. + /// + /// - `assets`: The asset(s) to remove from holding. + /// - `beneficiary`: The new owner for the assets. + /// + /// Kind: *Instruction* + /// + /// Errors: + DepositAsset { assets: MultiAssetFilter, beneficiary: MultiLocation }, + + /// Remove the asset(s) (`assets`) from the Holding Register and place equivalent assets under + /// the ownership of `dest` within this consensus system (i.e. deposit them into its sovereign + /// account). + /// + /// Send an onward XCM message to `dest` of `ReserveAssetDeposited` with the given `effects`. + /// + /// - `assets`: The asset(s) to remove from holding. + /// - `dest`: The location whose sovereign account will own the assets and thus the effective + /// beneficiary for the assets and the notification target for the reserve asset deposit + /// message. + /// - `xcm`: The orders that should follow the `ReserveAssetDeposited` instruction + /// which is sent onwards to `dest`. + /// + /// Kind: *Instruction* + /// + /// Errors: + DepositReserveAsset { assets: MultiAssetFilter, dest: MultiLocation, xcm: Xcm<()> }, + + /// Remove the asset(s) (`want`) from the Holding Register and replace them with alternative + /// assets. + /// + /// The minimum amount of assets to be received into the Holding Register for the order not to + /// fail may be stated. + /// + /// - `give`: The maximum amount of assets to remove from holding. + /// - `want`: The minimum amount of assets which `give` should be exchanged for. + /// - `maximal`: If `true`, then prefer to give as much as possible up to the limit of `give` + /// and receive accordingly more. If `false`, then prefer to give as little as possible in + /// order to receive as little as possible while receiving at least `want`. + /// + /// Kind: *Instruction* + /// + /// Errors: + ExchangeAsset { give: MultiAssetFilter, want: MultiAssets, maximal: bool }, + + /// Remove the asset(s) (`assets`) from holding and send a `WithdrawAsset` XCM message to a + /// reserve location. + /// + /// - `assets`: The asset(s) to remove from holding. + /// - `reserve`: A valid location that acts as a reserve for all asset(s) in `assets`. The + /// sovereign account of this consensus system *on the reserve location* will have appropriate + /// assets withdrawn and `effects` will be executed on them. There will typically be only one + /// valid location on any given asset/chain combination. + /// - `xcm`: The instructions to execute on the assets once withdrawn *on the reserve + /// location*. + /// + /// Kind: *Instruction* + /// + /// Errors: + InitiateReserveWithdraw { assets: MultiAssetFilter, reserve: MultiLocation, xcm: Xcm<()> }, + + /// Remove the asset(s) (`assets`) from holding and send a `ReceiveTeleportedAsset` XCM message + /// to a `dest` location. + /// + /// - `assets`: The asset(s) to remove from holding. + /// - `dest`: A valid location that respects teleports coming from this location. + /// - `xcm`: The instructions to execute on the assets once arrived *on the destination + /// location*. + /// + /// NOTE: The `dest` location *MUST* respect this origin as a valid teleportation origin for all + /// `assets`. If it does not, then the assets may be lost. + /// + /// Kind: *Instruction* + /// + /// Errors: + InitiateTeleport { assets: MultiAssetFilter, dest: MultiLocation, xcm: Xcm<()> }, + + /// Report to a given destination the contents of the Holding Register. + /// + /// A `QueryResponse` message of type `Assets` is sent to the described destination. + /// + /// - `response_info`: Information for making the response. + /// - `assets`: A filter for the assets that should be reported back. The assets reported back + /// will be, asset-wise, *the lesser of this value and the holding register*. No wildcards + /// will be used when reporting assets back. + /// + /// Kind: *Instruction* + /// + /// Errors: + ReportHolding { response_info: QueryResponseInfo, assets: MultiAssetFilter }, + + /// Pay for the execution of some XCM `xcm` and `orders` with up to `weight` + /// picoseconds of execution time, paying for this with up to `fees` from the Holding Register. + /// + /// - `fees`: The asset(s) to remove from the Holding Register to pay for fees. + /// - `weight_limit`: The maximum amount of weight to purchase; this must be at least the + /// expected maximum weight of the total XCM to be executed for the + /// `AllowTopLevelPaidExecutionFrom` barrier to allow the XCM be executed. + /// + /// Kind: *Instruction* + /// + /// Errors: + BuyExecution { fees: MultiAsset, weight_limit: WeightLimit }, + + /// Refund any surplus weight previously bought with `BuyExecution`. + /// + /// Kind: *Instruction* + /// + /// Errors: None. + RefundSurplus, + + /// Set the Error Handler Register. This is code that should be called in the case of an error + /// happening. + /// + /// An error occurring within execution of this code will _NOT_ result in the error register + /// being set, nor will an error handler be called due to it. The error handler and appendix + /// may each still be set. + /// + /// The apparent weight of this instruction is inclusive of the inner `Xcm`; the executing + /// weight however includes only the difference between the previous handler and the new + /// handler, which can reasonably be negative, which would result in a surplus. + /// + /// Kind: *Instruction* + /// + /// Errors: None. + SetErrorHandler(Xcm), + + /// Set the Appendix Register. This is code that should be called after code execution + /// (including the error handler if any) is finished. This will be called regardless of whether + /// an error occurred. + /// + /// Any error occurring due to execution of this code will result in the error register being + /// set, and the error handler (if set) firing. + /// + /// The apparent weight of this instruction is inclusive of the inner `Xcm`; the executing + /// weight however includes only the difference between the previous appendix and the new + /// appendix, which can reasonably be negative, which would result in a surplus. + /// + /// Kind: *Instruction* + /// + /// Errors: None. + SetAppendix(Xcm), + + /// Clear the Error Register. + /// + /// Kind: *Instruction* + /// + /// Errors: None. + ClearError, + + /// Create some assets which are being held on behalf of the origin. + /// + /// - `assets`: The assets which are to be claimed. This must match exactly with the assets + /// claimable by the origin of the ticket. + /// - `ticket`: The ticket of the asset; this is an abstract identifier to help locate the + /// asset. + /// + /// Kind: *Instruction* + /// + /// Errors: + ClaimAsset { assets: MultiAssets, ticket: MultiLocation }, + + /// Always throws an error of type `Trap`. + /// + /// Kind: *Instruction* + /// + /// Errors: + /// - `Trap`: All circumstances, whose inner value is the same as this item's inner value. + Trap(#[codec(compact)] u64), + + /// Ask the destination system to respond with the most recent version of XCM that they + /// support in a `QueryResponse` instruction. Any changes to this should also elicit similar + /// responses when they happen. + /// + /// - `query_id`: An identifier that will be replicated into the returned XCM message. + /// - `max_response_weight`: The maximum amount of weight that the `QueryResponse` item which + /// is sent as a reply may take to execute. NOTE: If this is unexpectedly large then the + /// response may not execute at all. + /// + /// Kind: *Instruction* + /// + /// Errors: *Fallible* + SubscribeVersion { + #[codec(compact)] + query_id: QueryId, + max_response_weight: Weight, + }, + + /// Cancel the effect of a previous `SubscribeVersion` instruction. + /// + /// Kind: *Instruction* + /// + /// Errors: *Fallible* + UnsubscribeVersion, + + /// Reduce Holding by up to the given assets. + /// + /// Holding is reduced by as much as possible up to the assets in the parameter. It is not an + /// error if the Holding does not contain the assets (to make this an error, use `ExpectAsset` + /// prior). + /// + /// Kind: *Instruction* + /// + /// Errors: *Infallible* + BurnAsset(MultiAssets), + + /// Throw an error if Holding does not contain at least the given assets. + /// + /// Kind: *Instruction* + /// + /// Errors: + /// - `ExpectationFalse`: If Holding Register does not contain the assets in the parameter. + ExpectAsset(MultiAssets), + + /// Ensure that the Origin Register equals some given value and throw an error if not. + /// + /// Kind: *Instruction* + /// + /// Errors: + /// - `ExpectationFalse`: If Origin Register is not equal to the parameter. + ExpectOrigin(Option), + + /// Ensure that the Error Register equals some given value and throw an error if not. + /// + /// Kind: *Instruction* + /// + /// Errors: + /// - `ExpectationFalse`: If the value of the Error Register is not equal to the parameter. + ExpectError(Option<(u32, Error)>), + + /// Ensure that the Transact Status Register equals some given value and throw an error if + /// not. + /// + /// Kind: *Instruction* + /// + /// Errors: + /// - `ExpectationFalse`: If the value of the Transact Status Register is not equal to the parameter. + ExpectTransactStatus(MaybeErrorCode), + + /// Query the existence of a particular pallet type. + /// + /// - `module_name`: The module name of the pallet to query. + /// - `response_info`: Information for making the response. + /// + /// Sends a `QueryResponse` to Origin whose data field `PalletsInfo` containing the information + /// of all pallets on the local chain whose name is equal to `name`. This is empty in the case + /// that the local chain is not based on Substrate Frame. + /// + /// Safety: No concerns. + /// + /// Kind: *Instruction* + /// + /// Errors: *Fallible*. + QueryPallet { module_name: Vec, response_info: QueryResponseInfo }, + + /// Ensure that a particular pallet with a particular version exists. + /// + /// - `index: Compact`: The index which identifies the pallet. An error if no pallet exists at this index. + /// - `name: Vec`: Name which must be equal to the name of the pallet. + /// - `module_name: Vec`: Module name which must be equal to the name of the module in which the pallet exists. + /// - `crate_major: Compact`: Version number which must be equal to the major version of the crate which implements the pallet. + /// - `min_crate_minor: Compact`: Version number which must be at most the minor version of the crate which implements the pallet. + /// + /// Safety: No concerns. + /// + /// Kind: *Instruction* + /// + /// Errors: + /// - `ExpectationFalse`: In case any of the expectations are broken. + ExpectPallet { + #[codec(compact)] + index: u32, + name: Vec, + module_name: Vec, + #[codec(compact)] + crate_major: u32, + #[codec(compact)] + min_crate_minor: u32, + }, + + /// Send a `QueryResponse` message containing the value of the Transact Status Register to some + /// destination. + /// + /// - `query_response_info`: The information needed for constructing and sending the + /// `QueryResponse` message. + /// + /// Safety: No concerns. + /// + /// Kind: *Instruction* + /// + /// Errors: *Fallible*. + ReportTransactStatus(QueryResponseInfo), + + /// Set the Transact Status Register to its default, cleared, value. + /// + /// Safety: No concerns. + /// + /// Kind: *Instruction* + /// + /// Errors: *Infallible*. + ClearTransactStatus, + + /// Set the Origin Register to be some child of the Universal Ancestor. + /// + /// Safety: Should only be usable if the Origin is trusted to represent the Universal Ancestor + /// child in general. In general, no Origin should be able to represent the Universal Ancestor + /// child which is the root of the local consensus system since it would by extension + /// allow it to act as any location within the local consensus. + /// + /// The `Junction` parameter should generally be a `GlobalConsensus` variant since it is only + /// these which are children of the Universal Ancestor. + /// + /// Kind: *Instruction* + /// + /// Errors: *Fallible*. + UniversalOrigin(Junction), + + /// Send a message on to Non-Local Consensus system. + /// + /// This will tend to utilize some extra-consensus mechanism, the obvious one being a bridge. + /// A fee may be charged; this may be determined based on the contents of `xcm`. It will be + /// taken from the Holding register. + /// + /// - `network`: The remote consensus system to which the message should be exported. + /// - `destination`: The location relative to the remote consensus system to which the message + /// should be sent on arrival. + /// - `xcm`: The message to be exported. + /// + /// As an example, to export a message for execution on Statemine (parachain #1000 in the + /// Kusama network), you would call with `network: NetworkId::Kusama` and + /// `destination: X1(Parachain(1000))`. Alternatively, to export a message for execution on + /// Polkadot, you would call with `network: NetworkId:: Polkadot` and `destination: Here`. + /// + /// Kind: *Instruction* + /// + /// Errors: *Fallible*. + ExportMessage { network: NetworkId, destination: InteriorMultiLocation, xcm: Xcm<()> }, + + /// Lock the locally held asset and prevent further transfer or withdrawal. + /// + /// This restriction may be removed by the `UnlockAsset` instruction being called with an + /// Origin of `unlocker` and a `target` equal to the current `Origin`. + /// + /// If the locking is successful, then a `NoteUnlockable` instruction is sent to `unlocker`. + /// + /// - `asset`: The asset(s) which should be locked. + /// - `unlocker`: The value which the Origin must be for a corresponding `UnlockAsset` + /// instruction to work. + /// + /// Kind: *Instruction*. + /// + /// Errors: + LockAsset { asset: MultiAsset, unlocker: MultiLocation }, + + /// Remove the lock over `asset` on this chain and (if nothing else is preventing it) allow the + /// asset to be transferred. + /// + /// - `asset`: The asset to be unlocked. + /// - `owner`: The owner of the asset on the local chain. + /// + /// Safety: No concerns. + /// + /// Kind: *Instruction*. + /// + /// Errors: + UnlockAsset { asset: MultiAsset, target: MultiLocation }, + + /// Asset (`asset`) has been locked on the `origin` system and may not be transferred. It may + /// only be unlocked with the receipt of the `UnlockAsset` instruction from this chain. + /// + /// - `asset`: The asset(s) which are now unlockable from this origin. + /// - `owner`: The owner of the asset on the chain in which it was locked. This may be a + /// location specific to the origin network. + /// + /// Safety: `origin` must be trusted to have locked the corresponding `asset` + /// prior as a consequence of sending this message. + /// + /// Kind: *Trusted Indication*. + /// + /// Errors: + NoteUnlockable { asset: MultiAsset, owner: MultiLocation }, + + /// Send an `UnlockAsset` instruction to the `locker` for the given `asset`. + /// + /// This may fail if the local system is making use of the fact that the asset is locked or, + /// of course, if there is no record that the asset actually is locked. + /// + /// - `asset`: The asset(s) to be unlocked. + /// - `locker`: The location from which a previous `NoteUnlockable` was sent and to which + /// an `UnlockAsset` should be sent. + /// + /// Kind: *Instruction*. + /// + /// Errors: + RequestUnlock { asset: MultiAsset, locker: MultiLocation }, + + /// Sets the Fees Mode Register. + /// + /// - `jit_withdraw`: The fees mode item; if set to `true` then fees for any instructions + /// are withdrawn as needed using the same mechanism as `WithdrawAssets`. + /// + /// Kind: *Instruction*. + /// + /// Errors: + SetFeesMode { jit_withdraw: bool }, + + /// Set the Topic Register. + /// + /// Safety: No concerns. + /// + /// Kind: *Instruction* + /// + /// Errors: + SetTopic([u8; 32]), + + /// Clear the Topic Register. + /// + /// Kind: *Instruction* + /// + /// Errors: None. + ClearTopic, + + /// Alter the current Origin to another given origin. + /// + /// Kind: *Instruction* + /// + /// Errors: If the existing state would not allow such a change. + AliasOrigin(MultiLocation), + + /// A directive to indicate that the origin expects free execution of the message. + /// + /// At execution time, this instruction just does a check on the Origin register. + /// However, at the barrier stage messages starting with this instruction can be disregarded if + /// the origin is not acceptable for free execution or the `weight_limit` is `Limited` and + /// insufficient. + /// + /// Kind: *Indication* + /// + /// Errors: If the given origin is `Some` and not equal to the current Origin register. + UnpaidExecution { weight_limit: WeightLimit, check_origin: Option }, +} + +impl Xcm { + pub fn into(self) -> Xcm { + Xcm::from(self) + } + pub fn from(xcm: Xcm) -> Self { + Self(xcm.0.into_iter().map(Instruction::::from).collect()) + } +} + +impl Instruction { + pub fn into(self) -> Instruction { + Instruction::from(self) + } + pub fn from(xcm: Instruction) -> Self { + use Instruction::*; + match xcm { + WithdrawAsset(assets) => WithdrawAsset(assets), + ReserveAssetDeposited(assets) => ReserveAssetDeposited(assets), + ReceiveTeleportedAsset(assets) => ReceiveTeleportedAsset(assets), + QueryResponse { query_id, response, max_weight, querier } => + QueryResponse { query_id, response, max_weight, querier }, + TransferAsset { assets, beneficiary } => TransferAsset { assets, beneficiary }, + TransferReserveAsset { assets, dest, xcm } => + TransferReserveAsset { assets, dest, xcm }, + HrmpNewChannelOpenRequest { sender, max_message_size, max_capacity } => + HrmpNewChannelOpenRequest { sender, max_message_size, max_capacity }, + HrmpChannelAccepted { recipient } => HrmpChannelAccepted { recipient }, + HrmpChannelClosing { initiator, sender, recipient } => + HrmpChannelClosing { initiator, sender, recipient }, + Transact { origin_kind, require_weight_at_most, call } => + Transact { origin_kind, require_weight_at_most, call: call.into() }, + ReportError(response_info) => ReportError(response_info), + DepositAsset { assets, beneficiary } => DepositAsset { assets, beneficiary }, + DepositReserveAsset { assets, dest, xcm } => DepositReserveAsset { assets, dest, xcm }, + ExchangeAsset { give, want, maximal } => ExchangeAsset { give, want, maximal }, + InitiateReserveWithdraw { assets, reserve, xcm } => + InitiateReserveWithdraw { assets, reserve, xcm }, + InitiateTeleport { assets, dest, xcm } => InitiateTeleport { assets, dest, xcm }, + ReportHolding { response_info, assets } => ReportHolding { response_info, assets }, + BuyExecution { fees, weight_limit } => BuyExecution { fees, weight_limit }, + ClearOrigin => ClearOrigin, + DescendOrigin(who) => DescendOrigin(who), + RefundSurplus => RefundSurplus, + SetErrorHandler(xcm) => SetErrorHandler(xcm.into()), + SetAppendix(xcm) => SetAppendix(xcm.into()), + ClearError => ClearError, + ClaimAsset { assets, ticket } => ClaimAsset { assets, ticket }, + Trap(code) => Trap(code), + SubscribeVersion { query_id, max_response_weight } => + SubscribeVersion { query_id, max_response_weight }, + UnsubscribeVersion => UnsubscribeVersion, + BurnAsset(assets) => BurnAsset(assets), + ExpectAsset(assets) => ExpectAsset(assets), + ExpectOrigin(origin) => ExpectOrigin(origin), + ExpectError(error) => ExpectError(error), + ExpectTransactStatus(transact_status) => ExpectTransactStatus(transact_status), + QueryPallet { module_name, response_info } => + QueryPallet { module_name, response_info }, + ExpectPallet { index, name, module_name, crate_major, min_crate_minor } => + ExpectPallet { index, name, module_name, crate_major, min_crate_minor }, + ReportTransactStatus(response_info) => ReportTransactStatus(response_info), + ClearTransactStatus => ClearTransactStatus, + UniversalOrigin(j) => UniversalOrigin(j), + ExportMessage { network, destination, xcm } => + ExportMessage { network, destination, xcm }, + LockAsset { asset, unlocker } => LockAsset { asset, unlocker }, + UnlockAsset { asset, target } => UnlockAsset { asset, target }, + NoteUnlockable { asset, owner } => NoteUnlockable { asset, owner }, + RequestUnlock { asset, locker } => RequestUnlock { asset, locker }, + SetFeesMode { jit_withdraw } => SetFeesMode { jit_withdraw }, + SetTopic(topic) => SetTopic(topic), + ClearTopic => ClearTopic, + AliasOrigin(location) => AliasOrigin(location), + UnpaidExecution { weight_limit, check_origin } => + UnpaidExecution { weight_limit, check_origin }, + } + } +} + +// TODO: Automate Generation +impl> GetWeight for Instruction { + fn weight(&self) -> Weight { + use Instruction::*; + match self { + WithdrawAsset(assets) => W::withdraw_asset(assets), + ReserveAssetDeposited(assets) => W::reserve_asset_deposited(assets), + ReceiveTeleportedAsset(assets) => W::receive_teleported_asset(assets), + QueryResponse { query_id, response, max_weight, querier } => + W::query_response(query_id, response, max_weight, querier), + TransferAsset { assets, beneficiary } => W::transfer_asset(assets, beneficiary), + TransferReserveAsset { assets, dest, xcm } => + W::transfer_reserve_asset(&assets, dest, xcm), + Transact { origin_kind, require_weight_at_most, call } => + W::transact(origin_kind, require_weight_at_most, call), + HrmpNewChannelOpenRequest { sender, max_message_size, max_capacity } => + W::hrmp_new_channel_open_request(sender, max_message_size, max_capacity), + HrmpChannelAccepted { recipient } => W::hrmp_channel_accepted(recipient), + HrmpChannelClosing { initiator, sender, recipient } => + W::hrmp_channel_closing(initiator, sender, recipient), + ClearOrigin => W::clear_origin(), + DescendOrigin(who) => W::descend_origin(who), + ReportError(response_info) => W::report_error(&response_info), + DepositAsset { assets, beneficiary } => W::deposit_asset(assets, beneficiary), + DepositReserveAsset { assets, dest, xcm } => + W::deposit_reserve_asset(assets, dest, xcm), + ExchangeAsset { give, want, maximal } => W::exchange_asset(give, want, maximal), + InitiateReserveWithdraw { assets, reserve, xcm } => + W::initiate_reserve_withdraw(assets, reserve, xcm), + InitiateTeleport { assets, dest, xcm } => W::initiate_teleport(assets, dest, xcm), + ReportHolding { response_info, assets } => W::report_holding(&response_info, &assets), + BuyExecution { fees, weight_limit } => W::buy_execution(fees, weight_limit), + RefundSurplus => W::refund_surplus(), + SetErrorHandler(xcm) => W::set_error_handler(xcm), + SetAppendix(xcm) => W::set_appendix(xcm), + ClearError => W::clear_error(), + ClaimAsset { assets, ticket } => W::claim_asset(assets, ticket), + Trap(code) => W::trap(code), + SubscribeVersion { query_id, max_response_weight } => + W::subscribe_version(query_id, max_response_weight), + UnsubscribeVersion => W::unsubscribe_version(), + BurnAsset(assets) => W::burn_asset(assets), + ExpectAsset(assets) => W::expect_asset(assets), + ExpectOrigin(origin) => W::expect_origin(origin), + ExpectError(error) => W::expect_error(error), + ExpectTransactStatus(transact_status) => W::expect_transact_status(transact_status), + QueryPallet { module_name, response_info } => + W::query_pallet(module_name, response_info), + ExpectPallet { index, name, module_name, crate_major, min_crate_minor } => + W::expect_pallet(index, name, module_name, crate_major, min_crate_minor), + ReportTransactStatus(response_info) => W::report_transact_status(response_info), + ClearTransactStatus => W::clear_transact_status(), + UniversalOrigin(j) => W::universal_origin(j), + ExportMessage { network, destination, xcm } => + W::export_message(network, destination, xcm), + LockAsset { asset, unlocker } => W::lock_asset(asset, unlocker), + UnlockAsset { asset, target } => W::unlock_asset(asset, target), + NoteUnlockable { asset, owner } => W::note_unlockable(asset, owner), + RequestUnlock { asset, locker } => W::request_unlock(asset, locker), + SetFeesMode { jit_withdraw } => W::set_fees_mode(jit_withdraw), + SetTopic(topic) => W::set_topic(topic), + ClearTopic => W::clear_topic(), + AliasOrigin(location) => W::alias_origin(location), + UnpaidExecution { weight_limit, check_origin } => + W::unpaid_execution(weight_limit, check_origin), + } + } +} + +pub mod opaque { + /// The basic concrete type of `Xcm`, which doesn't make any assumptions about the + /// format of a call other than it is pre-encoded. + pub type Xcm = super::Xcm<()>; + + /// The basic concrete type of `Instruction`, which doesn't make any assumptions about the + /// format of a call other than it is pre-encoded. + pub type Instruction = super::Instruction<()>; +} + +// Convert from a v2 response to a v3 response. +impl TryFrom for Response { + type Error = (); + fn try_from(old_response: OldResponse) -> result::Result { + match old_response { + OldResponse::Assets(assets) => Ok(Self::Assets(assets.try_into()?)), + OldResponse::Version(version) => Ok(Self::Version(version)), + OldResponse::ExecutionResult(error) => Ok(Self::ExecutionResult(match error { + Some((i, e)) => Some((i, e.try_into()?)), + None => None, + })), + OldResponse::Null => Ok(Self::Null), + } + } +} + +// Convert from a v2 XCM to a v3 XCM. +impl TryFrom> for Xcm { + type Error = (); + fn try_from(old_xcm: OldXcm) -> result::Result { + Ok(Xcm(old_xcm.0.into_iter().map(TryInto::try_into).collect::>()?)) + } +} + +/// Default value for the proof size weight component. Set at 64 KB. +const DEFAULT_PROOF_SIZE: u64 = 64 * 1024; + +// Convert from a v2 instruction to a v3 instruction. +impl TryFrom> for Instruction { + type Error = (); + fn try_from(old_instruction: OldInstruction) -> result::Result { + use OldInstruction::*; + Ok(match old_instruction { + WithdrawAsset(assets) => Self::WithdrawAsset(assets.try_into()?), + ReserveAssetDeposited(assets) => Self::ReserveAssetDeposited(assets.try_into()?), + ReceiveTeleportedAsset(assets) => Self::ReceiveTeleportedAsset(assets.try_into()?), + QueryResponse { query_id, response, max_weight } => Self::QueryResponse { + query_id, + response: response.try_into()?, + max_weight: Weight::from_parts(max_weight, DEFAULT_PROOF_SIZE), + querier: None, + }, + TransferAsset { assets, beneficiary } => Self::TransferAsset { + assets: assets.try_into()?, + beneficiary: beneficiary.try_into()?, + }, + TransferReserveAsset { assets, dest, xcm } => Self::TransferReserveAsset { + assets: assets.try_into()?, + dest: dest.try_into()?, + xcm: xcm.try_into()?, + }, + HrmpNewChannelOpenRequest { sender, max_message_size, max_capacity } => + Self::HrmpNewChannelOpenRequest { sender, max_message_size, max_capacity }, + HrmpChannelAccepted { recipient } => Self::HrmpChannelAccepted { recipient }, + HrmpChannelClosing { initiator, sender, recipient } => + Self::HrmpChannelClosing { initiator, sender, recipient }, + Transact { origin_type, require_weight_at_most, call } => Self::Transact { + origin_kind: origin_type, + require_weight_at_most: Weight::from_parts( + require_weight_at_most, + DEFAULT_PROOF_SIZE, + ), + call: call.into(), + }, + ReportError { query_id, dest, max_response_weight } => { + let response_info = QueryResponseInfo { + destination: dest.try_into()?, + query_id, + max_weight: Weight::from_parts(max_response_weight, DEFAULT_PROOF_SIZE), + }; + Self::ReportError(response_info) + }, + DepositAsset { assets, max_assets, beneficiary } => Self::DepositAsset { + assets: (assets, max_assets).try_into()?, + beneficiary: beneficiary.try_into()?, + }, + DepositReserveAsset { assets, max_assets, dest, xcm } => { + let assets = (assets, max_assets).try_into()?; + Self::DepositReserveAsset { assets, dest: dest.try_into()?, xcm: xcm.try_into()? } + }, + ExchangeAsset { give, receive } => { + let give = give.try_into()?; + let want = receive.try_into()?; + Self::ExchangeAsset { give, want, maximal: true } + }, + InitiateReserveWithdraw { assets, reserve, xcm } => Self::InitiateReserveWithdraw { + assets: assets.try_into()?, + reserve: reserve.try_into()?, + xcm: xcm.try_into()?, + }, + InitiateTeleport { assets, dest, xcm } => Self::InitiateTeleport { + assets: assets.try_into()?, + dest: dest.try_into()?, + xcm: xcm.try_into()?, + }, + QueryHolding { query_id, dest, assets, max_response_weight } => { + let response_info = QueryResponseInfo { + destination: dest.try_into()?, + query_id, + max_weight: Weight::from_parts(max_response_weight, DEFAULT_PROOF_SIZE), + }; + Self::ReportHolding { response_info, assets: assets.try_into()? } + }, + BuyExecution { fees, weight_limit } => Self::BuyExecution { + fees: fees.try_into()?, + weight_limit: weight_limit.try_into()?, + }, + ClearOrigin => Self::ClearOrigin, + DescendOrigin(who) => Self::DescendOrigin(who.try_into()?), + RefundSurplus => Self::RefundSurplus, + SetErrorHandler(xcm) => Self::SetErrorHandler(xcm.try_into()?), + SetAppendix(xcm) => Self::SetAppendix(xcm.try_into()?), + ClearError => Self::ClearError, + ClaimAsset { assets, ticket } => { + let assets = assets.try_into()?; + let ticket = ticket.try_into()?; + Self::ClaimAsset { assets, ticket } + }, + Trap(code) => Self::Trap(code), + SubscribeVersion { query_id, max_response_weight } => Self::SubscribeVersion { + query_id, + max_response_weight: Weight::from_parts(max_response_weight, DEFAULT_PROOF_SIZE), + }, + UnsubscribeVersion => Self::UnsubscribeVersion, + }) + } +} + +#[cfg(test)] +mod tests { + use super::{prelude::*, *}; + use crate::v2::{ + Junctions::Here as OldHere, MultiAssetFilter as OldMultiAssetFilter, + WildMultiAsset as OldWildMultiAsset, + }; + + #[test] + fn basic_roundtrip_works() { + let xcm = Xcm::<()>(vec![TransferAsset { + assets: (Here, 1u128).into(), + beneficiary: Here.into(), + }]); + let old_xcm = OldXcm::<()>(vec![OldInstruction::TransferAsset { + assets: (OldHere, 1).into(), + beneficiary: OldHere.into(), + }]); + assert_eq!(old_xcm, OldXcm::<()>::try_from(xcm.clone()).unwrap()); + let new_xcm: Xcm<()> = old_xcm.try_into().unwrap(); + assert_eq!(new_xcm, xcm); + } + + #[test] + fn teleport_roundtrip_works() { + let xcm = Xcm::<()>(vec![ + ReceiveTeleportedAsset((Here, 1u128).into()), + ClearOrigin, + DepositAsset { assets: Wild(AllCounted(1)), beneficiary: Here.into() }, + ]); + let old_xcm: OldXcm<()> = OldXcm::<()>(vec![ + OldInstruction::ReceiveTeleportedAsset((OldHere, 1).into()), + OldInstruction::ClearOrigin, + OldInstruction::DepositAsset { + assets: crate::v2::MultiAssetFilter::Wild(crate::v2::WildMultiAsset::All), + max_assets: 1, + beneficiary: OldHere.into(), + }, + ]); + assert_eq!(old_xcm, OldXcm::<()>::try_from(xcm.clone()).unwrap()); + let new_xcm: Xcm<()> = old_xcm.try_into().unwrap(); + assert_eq!(new_xcm, xcm); + } + + #[test] + fn reserve_deposit_roundtrip_works() { + let xcm = Xcm::<()>(vec![ + ReserveAssetDeposited((Here, 1u128).into()), + ClearOrigin, + BuyExecution { + fees: (Here, 1u128).into(), + weight_limit: Some(Weight::from_parts(1, DEFAULT_PROOF_SIZE)).into(), + }, + DepositAsset { assets: Wild(AllCounted(1)), beneficiary: Here.into() }, + ]); + let old_xcm = OldXcm::<()>(vec![ + OldInstruction::ReserveAssetDeposited((OldHere, 1).into()), + OldInstruction::ClearOrigin, + OldInstruction::BuyExecution { + fees: (OldHere, 1).into(), + weight_limit: Some(1).into(), + }, + OldInstruction::DepositAsset { + assets: crate::v2::MultiAssetFilter::Wild(crate::v2::WildMultiAsset::All), + max_assets: 1, + beneficiary: OldHere.into(), + }, + ]); + assert_eq!(old_xcm, OldXcm::<()>::try_from(xcm.clone()).unwrap()); + let new_xcm: Xcm<()> = old_xcm.try_into().unwrap(); + assert_eq!(new_xcm, xcm); + } + + #[test] + fn deposit_asset_roundtrip_works() { + let xcm = Xcm::<()>(vec![ + WithdrawAsset((Here, 1u128).into()), + DepositAsset { assets: Wild(AllCounted(1)), beneficiary: Here.into() }, + ]); + let old_xcm = OldXcm::<()>(vec![ + OldInstruction::WithdrawAsset((OldHere, 1).into()), + OldInstruction::DepositAsset { + assets: OldMultiAssetFilter::Wild(OldWildMultiAsset::All), + max_assets: 1, + beneficiary: OldHere.into(), + }, + ]); + assert_eq!(old_xcm, OldXcm::<()>::try_from(xcm.clone()).unwrap()); + let new_xcm: Xcm<()> = old_xcm.try_into().unwrap(); + assert_eq!(new_xcm, xcm); + } + + #[test] + fn deposit_reserve_asset_roundtrip_works() { + let xcm = Xcm::<()>(vec![ + WithdrawAsset((Here, 1u128).into()), + DepositReserveAsset { + assets: Wild(AllCounted(1)), + dest: Here.into(), + xcm: Xcm::<()>(vec![]), + }, + ]); + let old_xcm = OldXcm::<()>(vec![ + OldInstruction::WithdrawAsset((OldHere, 1).into()), + OldInstruction::DepositReserveAsset { + assets: OldMultiAssetFilter::Wild(OldWildMultiAsset::All), + max_assets: 1, + dest: OldHere.into(), + xcm: OldXcm::<()>(vec![]), + }, + ]); + assert_eq!(old_xcm, OldXcm::<()>::try_from(xcm.clone()).unwrap()); + let new_xcm: Xcm<()> = old_xcm.try_into().unwrap(); + assert_eq!(new_xcm, xcm); + } +} diff --git a/xcm/src/v3/multiasset.rs b/xcm/src/v3/multiasset.rs new file mode 100644 index 000000000000..602c9722f753 --- /dev/null +++ b/xcm/src/v3/multiasset.rs @@ -0,0 +1,968 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate 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 Polkadot. If not, see . + +//! Cross-Consensus Message format asset data structures. +//! +//! This encompasses four types for representing assets: +//! - `MultiAsset`: A description of a single asset, either an instance of a non-fungible or some amount of a fungible. +//! - `MultiAssets`: A collection of `MultiAsset`s. These are stored in a `Vec` and sorted with fungibles first. +//! - `Wild`: A single asset wildcard, this can either be "all" assets, or all assets of a specific kind. +//! - `MultiAssetFilter`: A combination of `Wild` and `MultiAssets` designed for efficiently filtering an XCM holding +//! account. + +use super::{InteriorMultiLocation, MultiLocation}; +use crate::v2::{ + AssetId as OldAssetId, AssetInstance as OldAssetInstance, Fungibility as OldFungibility, + MultiAsset as OldMultiAsset, MultiAssetFilter as OldMultiAssetFilter, + MultiAssets as OldMultiAssets, WildFungibility as OldWildFungibility, + WildMultiAsset as OldWildMultiAsset, +}; +use alloc::{vec, vec::Vec}; +use core::{ + cmp::Ordering, + convert::{TryFrom, TryInto}, +}; +use parity_scale_codec::{self as codec, Decode, Encode, MaxEncodedLen}; +use scale_info::TypeInfo; + +/// A general identifier for an instance of a non-fungible asset class. +#[derive( + Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, Debug, TypeInfo, MaxEncodedLen, +)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] +pub enum AssetInstance { + /// Undefined - used if the non-fungible asset class has only one instance. + Undefined, + + /// A compact index. Technically this could be greater than `u128`, but this implementation supports only + /// values up to `2**128 - 1`. + Index(#[codec(compact)] u128), + + /// A 4-byte fixed-length datum. + Array4([u8; 4]), + + /// An 8-byte fixed-length datum. + Array8([u8; 8]), + + /// A 16-byte fixed-length datum. + Array16([u8; 16]), + + /// A 32-byte fixed-length datum. + Array32([u8; 32]), +} + +impl TryFrom for AssetInstance { + type Error = (); + fn try_from(value: OldAssetInstance) -> Result { + use OldAssetInstance::*; + Ok(match value { + Undefined => Self::Undefined, + Index(n) => Self::Index(n), + Array4(n) => Self::Array4(n), + Array8(n) => Self::Array8(n), + Array16(n) => Self::Array16(n), + Array32(n) => Self::Array32(n), + Blob(_) => return Err(()), + }) + } +} + +impl From<()> for AssetInstance { + fn from(_: ()) -> Self { + Self::Undefined + } +} + +impl From<[u8; 4]> for AssetInstance { + fn from(x: [u8; 4]) -> Self { + Self::Array4(x) + } +} + +impl From<[u8; 8]> for AssetInstance { + fn from(x: [u8; 8]) -> Self { + Self::Array8(x) + } +} + +impl From<[u8; 16]> for AssetInstance { + fn from(x: [u8; 16]) -> Self { + Self::Array16(x) + } +} + +impl From<[u8; 32]> for AssetInstance { + fn from(x: [u8; 32]) -> Self { + Self::Array32(x) + } +} + +impl From for AssetInstance { + fn from(x: u8) -> Self { + Self::Index(x as u128) + } +} + +impl From for AssetInstance { + fn from(x: u16) -> Self { + Self::Index(x as u128) + } +} + +impl From for AssetInstance { + fn from(x: u32) -> Self { + Self::Index(x as u128) + } +} + +impl From for AssetInstance { + fn from(x: u64) -> Self { + Self::Index(x as u128) + } +} + +impl TryFrom for () { + type Error = (); + fn try_from(x: AssetInstance) -> Result { + match x { + AssetInstance::Undefined => Ok(()), + _ => Err(()), + } + } +} + +impl TryFrom for [u8; 4] { + type Error = (); + fn try_from(x: AssetInstance) -> Result { + match x { + AssetInstance::Array4(x) => Ok(x), + _ => Err(()), + } + } +} + +impl TryFrom for [u8; 8] { + type Error = (); + fn try_from(x: AssetInstance) -> Result { + match x { + AssetInstance::Array8(x) => Ok(x), + _ => Err(()), + } + } +} + +impl TryFrom for [u8; 16] { + type Error = (); + fn try_from(x: AssetInstance) -> Result { + match x { + AssetInstance::Array16(x) => Ok(x), + _ => Err(()), + } + } +} + +impl TryFrom for [u8; 32] { + type Error = (); + fn try_from(x: AssetInstance) -> Result { + match x { + AssetInstance::Array32(x) => Ok(x), + _ => Err(()), + } + } +} + +impl TryFrom for u8 { + type Error = (); + fn try_from(x: AssetInstance) -> Result { + match x { + AssetInstance::Index(x) => x.try_into().map_err(|_| ()), + _ => Err(()), + } + } +} + +impl TryFrom for u16 { + type Error = (); + fn try_from(x: AssetInstance) -> Result { + match x { + AssetInstance::Index(x) => x.try_into().map_err(|_| ()), + _ => Err(()), + } + } +} + +impl TryFrom for u32 { + type Error = (); + fn try_from(x: AssetInstance) -> Result { + match x { + AssetInstance::Index(x) => x.try_into().map_err(|_| ()), + _ => Err(()), + } + } +} + +impl TryFrom for u64 { + type Error = (); + fn try_from(x: AssetInstance) -> Result { + match x { + AssetInstance::Index(x) => x.try_into().map_err(|_| ()), + _ => Err(()), + } + } +} + +impl TryFrom for u128 { + type Error = (); + fn try_from(x: AssetInstance) -> Result { + match x { + AssetInstance::Index(x) => Ok(x), + _ => Err(()), + } + } +} + +/// Classification of whether an asset is fungible or not, along with a mandatory amount or instance. +#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Debug, Encode, TypeInfo, MaxEncodedLen)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] +pub enum Fungibility { + /// A fungible asset; we record a number of units, as a `u128` in the inner item. + Fungible(#[codec(compact)] u128), + /// A non-fungible asset. We record the instance identifier in the inner item. Only one asset + /// of each instance identifier may ever be in existence at once. + NonFungible(AssetInstance), +} + +#[derive(Decode)] +enum UncheckedFungibility { + Fungible(#[codec(compact)] u128), + NonFungible(AssetInstance), +} + +impl Decode for Fungibility { + fn decode(input: &mut I) -> Result { + match UncheckedFungibility::decode(input)? { + UncheckedFungibility::Fungible(a) if a != 0 => Ok(Self::Fungible(a)), + UncheckedFungibility::NonFungible(i) => Ok(Self::NonFungible(i)), + UncheckedFungibility::Fungible(_) => + Err("Fungible asset of zero amount is not allowed".into()), + } + } +} + +impl Fungibility { + pub fn is_kind(&self, w: WildFungibility) -> bool { + use Fungibility::*; + use WildFungibility::{Fungible as WildFungible, NonFungible as WildNonFungible}; + matches!((self, w), (Fungible(_), WildFungible) | (NonFungible(_), WildNonFungible)) + } +} + +impl From for Fungibility { + fn from(amount: i32) -> Fungibility { + debug_assert_ne!(amount, 0); + Fungibility::Fungible(amount as u128) + } +} + +impl From for Fungibility { + fn from(amount: u128) -> Fungibility { + debug_assert_ne!(amount, 0); + Fungibility::Fungible(amount) + } +} + +impl> From for Fungibility { + fn from(instance: T) -> Fungibility { + Fungibility::NonFungible(instance.into()) + } +} + +impl TryFrom for Fungibility { + type Error = (); + fn try_from(value: OldFungibility) -> Result { + use OldFungibility::*; + Ok(match value { + Fungible(n) => Self::Fungible(n), + NonFungible(i) => Self::NonFungible(i.try_into()?), + }) + } +} + +/// Classification of whether an asset is fungible or not. +#[derive( + Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Debug, Encode, Decode, TypeInfo, MaxEncodedLen, +)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] +pub enum WildFungibility { + /// The asset is fungible. + Fungible, + /// The asset is not fungible. + NonFungible, +} + +impl TryFrom for WildFungibility { + type Error = (); + fn try_from(value: OldWildFungibility) -> Result { + use OldWildFungibility::*; + Ok(match value { + Fungible => Self::Fungible, + NonFungible => Self::NonFungible, + }) + } +} + +/// Classification of an asset being concrete or abstract. +#[derive( + Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Debug, Encode, Decode, TypeInfo, MaxEncodedLen, +)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] +pub enum AssetId { + /// A specific location identifying an asset. + Concrete(MultiLocation), + /// An abstract location; this is a name which may mean different specific locations on + /// different chains at different times. + Abstract([u8; 32]), +} + +impl> From for AssetId { + fn from(x: T) -> Self { + Self::Concrete(x.into()) + } +} + +impl From<[u8; 32]> for AssetId { + fn from(x: [u8; 32]) -> Self { + Self::Abstract(x) + } +} + +impl TryFrom for AssetId { + type Error = (); + fn try_from(old: OldAssetId) -> Result { + use OldAssetId::*; + Ok(match old { + Concrete(l) => Self::Concrete(l.try_into()?), + Abstract(v) if v.len() <= 32 => { + let mut r = [0u8; 32]; + r[..v.len()].copy_from_slice(&v[..]); + Self::Abstract(r) + }, + _ => return Err(()), + }) + } +} + +impl AssetId { + /// Prepend a `MultiLocation` to a concrete asset, giving it a new root location. + pub fn prepend_with(&mut self, prepend: &MultiLocation) -> Result<(), ()> { + if let AssetId::Concrete(ref mut l) = self { + l.prepend_with(*prepend).map_err(|_| ())?; + } + Ok(()) + } + + /// Mutate the asset to represent the same value from the perspective of a new `target` + /// location. The local chain's location is provided in `context`. + pub fn reanchor( + &mut self, + target: &MultiLocation, + context: InteriorMultiLocation, + ) -> Result<(), ()> { + if let AssetId::Concrete(ref mut l) = self { + l.reanchor(target, context)?; + } + Ok(()) + } + + /// Use the value of `self` along with a `fun` fungibility specifier to create the corresponding `MultiAsset` value. + pub fn into_multiasset(self, fun: Fungibility) -> MultiAsset { + MultiAsset { fun, id: self } + } + + /// Use the value of `self` along with a `fun` fungibility specifier to create the corresponding `WildMultiAsset` + /// wildcard (`AllOf`) value. + pub fn into_wild(self, fun: WildFungibility) -> WildMultiAsset { + WildMultiAsset::AllOf { fun, id: self } + } +} + +/// Either an amount of a single fungible asset, or a single well-identified non-fungible asset. +#[derive(Clone, Eq, PartialEq, Debug, Encode, Decode, TypeInfo, MaxEncodedLen)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] +pub struct MultiAsset { + /// The overall asset identity (aka *class*, in the case of a non-fungible). + pub id: AssetId, + /// The fungibility of the asset, which contains either the amount (in the case of a fungible + /// asset) or the *insance ID`, the secondary asset identifier. + pub fun: Fungibility, +} + +impl PartialOrd for MultiAsset { + fn partial_cmp(&self, other: &Self) -> Option { + Some(self.cmp(other)) + } +} + +impl Ord for MultiAsset { + fn cmp(&self, other: &Self) -> Ordering { + match (&self.fun, &other.fun) { + (Fungibility::Fungible(..), Fungibility::NonFungible(..)) => Ordering::Less, + (Fungibility::NonFungible(..), Fungibility::Fungible(..)) => Ordering::Greater, + _ => (&self.id, &self.fun).cmp(&(&other.id, &other.fun)), + } + } +} + +impl, B: Into> From<(A, B)> for MultiAsset { + fn from((id, fun): (A, B)) -> MultiAsset { + MultiAsset { fun: fun.into(), id: id.into() } + } +} + +impl MultiAsset { + pub fn is_fungible(&self, maybe_id: Option) -> bool { + use Fungibility::*; + matches!(self.fun, Fungible(..)) && maybe_id.map_or(true, |i| i == self.id) + } + + pub fn is_non_fungible(&self, maybe_id: Option) -> bool { + use Fungibility::*; + matches!(self.fun, NonFungible(..)) && maybe_id.map_or(true, |i| i == self.id) + } + + /// Prepend a `MultiLocation` to a concrete asset, giving it a new root location. + pub fn prepend_with(&mut self, prepend: &MultiLocation) -> Result<(), ()> { + self.id.prepend_with(prepend) + } + + /// Mutate the location of the asset identifier if concrete, giving it the same location + /// relative to a `target` context. The local context is provided as `context`. + pub fn reanchor( + &mut self, + target: &MultiLocation, + context: InteriorMultiLocation, + ) -> Result<(), ()> { + self.id.reanchor(target, context) + } + + /// Mutate the location of the asset identifier if concrete, giving it the same location + /// relative to a `target` context. The local context is provided as `context`. + pub fn reanchored( + mut self, + target: &MultiLocation, + context: InteriorMultiLocation, + ) -> Result { + self.id.reanchor(target, context)?; + Ok(self) + } + + /// Returns true if `self` is a super-set of the given `inner` asset. + pub fn contains(&self, inner: &MultiAsset) -> bool { + use Fungibility::*; + if self.id == inner.id { + match (&self.fun, &inner.fun) { + (Fungible(a), Fungible(i)) if a >= i => return true, + (NonFungible(a), NonFungible(i)) if a == i => return true, + _ => (), + } + } + false + } +} + +impl TryFrom for MultiAsset { + type Error = (); + fn try_from(old: OldMultiAsset) -> Result { + Ok(Self { id: old.id.try_into()?, fun: old.fun.try_into()? }) + } +} + +/// A `Vec` of `MultiAsset`s. +/// +/// There are a number of invariants which the construction and mutation functions must ensure are +/// maintained: +/// - It may contain no items of duplicate asset class; +/// - All items must be ordered; +/// - The number of items should grow no larger than `MAX_ITEMS_IN_MULTIASSETS`. +#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Debug, Encode, TypeInfo, Default)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] +pub struct MultiAssets(Vec); + +/// Maximum number of items we expect in a single `MultiAssets` value. Note this is not (yet) +/// enforced, and just serves to provide a sensible `max_encoded_len` for `MultiAssets`. +const MAX_ITEMS_IN_MULTIASSETS: usize = 20; + +impl MaxEncodedLen for MultiAssets { + fn max_encoded_len() -> usize { + MultiAsset::max_encoded_len() * MAX_ITEMS_IN_MULTIASSETS + } +} + +impl Decode for MultiAssets { + fn decode(input: &mut I) -> Result { + Self::from_sorted_and_deduplicated(Vec::::decode(input)?) + .map_err(|()| "Out of order".into()) + } +} + +impl TryFrom for MultiAssets { + type Error = (); + fn try_from(old: OldMultiAssets) -> Result { + let v = old + .drain() + .into_iter() + .map(MultiAsset::try_from) + .collect::, ()>>()?; + Ok(MultiAssets(v)) + } +} + +impl From> for MultiAssets { + fn from(mut assets: Vec) -> Self { + let mut res = Vec::with_capacity(assets.len()); + if !assets.is_empty() { + assets.sort(); + let mut iter = assets.into_iter(); + if let Some(first) = iter.next() { + let last = iter.fold(first, |a, b| -> MultiAsset { + match (a, b) { + ( + MultiAsset { fun: Fungibility::Fungible(a_amount), id: a_id }, + MultiAsset { fun: Fungibility::Fungible(b_amount), id: b_id }, + ) if a_id == b_id => MultiAsset { + id: a_id, + fun: Fungibility::Fungible(a_amount.saturating_add(b_amount)), + }, + ( + MultiAsset { fun: Fungibility::NonFungible(a_instance), id: a_id }, + MultiAsset { fun: Fungibility::NonFungible(b_instance), id: b_id }, + ) if a_id == b_id && a_instance == b_instance => + MultiAsset { fun: Fungibility::NonFungible(a_instance), id: a_id }, + (to_push, to_remember) => { + res.push(to_push); + to_remember + }, + } + }); + res.push(last); + } + } + Self(res) + } +} + +impl> From for MultiAssets { + fn from(x: T) -> Self { + Self(vec![x.into()]) + } +} + +impl MultiAssets { + /// A new (empty) value. + pub fn new() -> Self { + Self(Vec::new()) + } + + /// Create a new instance of `MultiAssets` from a `Vec` whose contents are sorted and + /// which contain no duplicates. + /// + /// Returns `Ok` if the operation succeeds and `Err` if `r` is out of order or had duplicates. If you can't + /// guarantee that `r` is sorted and deduplicated, then use `From::>::from` which is infallible. + pub fn from_sorted_and_deduplicated(r: Vec) -> Result { + if r.is_empty() { + return Ok(Self(Vec::new())) + } + r.iter().skip(1).try_fold(&r[0], |a, b| -> Result<&MultiAsset, ()> { + if a.id < b.id || a < b && (a.is_non_fungible(None) || b.is_non_fungible(None)) { + Ok(b) + } else { + Err(()) + } + })?; + Ok(Self(r)) + } + + /// Create a new instance of `MultiAssets` from a `Vec` whose contents are sorted and + /// which contain no duplicates. + /// + /// In release mode, this skips any checks to ensure that `r` is correct, making it a negligible-cost operation. + /// Generally though you should avoid using it unless you have a strict proof that `r` is valid. + #[cfg(test)] + pub fn from_sorted_and_deduplicated_skip_checks(r: Vec) -> Self { + Self::from_sorted_and_deduplicated(r).expect("Invalid input r is not sorted/deduped") + } + /// Create a new instance of `MultiAssets` from a `Vec` whose contents are sorted and + /// which contain no duplicates. + /// + /// In release mode, this skips any checks to ensure that `r` is correct, making it a negligible-cost operation. + /// Generally though you should avoid using it unless you have a strict proof that `r` is valid. + /// + /// In test mode, this checks anyway and panics on fail. + #[cfg(not(test))] + pub fn from_sorted_and_deduplicated_skip_checks(r: Vec) -> Self { + Self(r) + } + + /// Add some asset onto the list, saturating. This is quite a laborious operation since it maintains the ordering. + pub fn push(&mut self, a: MultiAsset) { + for asset in self.0.iter_mut().filter(|x| x.id == a.id) { + match (&a.fun, &mut asset.fun) { + (Fungibility::Fungible(amount), Fungibility::Fungible(balance)) => { + *balance = balance.saturating_add(*amount); + return + }, + (Fungibility::NonFungible(inst1), Fungibility::NonFungible(inst2)) + if inst1 == inst2 => + return, + _ => (), + } + } + self.0.push(a); + self.0.sort(); + } + + /// Returns `true` if this definitely represents no asset. + pub fn is_none(&self) -> bool { + self.0.is_empty() + } + + /// Returns true if `self` is a super-set of the given `inner` asset. + pub fn contains(&self, inner: &MultiAsset) -> bool { + self.0.iter().any(|i| i.contains(inner)) + } + + /// Consume `self` and return the inner vec. + #[deprecated = "Use `into_inner()` instead"] + pub fn drain(self) -> Vec { + self.0 + } + + /// Consume `self` and return the inner vec. + pub fn into_inner(self) -> Vec { + self.0 + } + + /// Return a reference to the inner vec. + pub fn inner(&self) -> &Vec { + &self.0 + } + + /// Return the number of distinct asset instances contained. + pub fn len(&self) -> usize { + self.0.len() + } + + /// Prepend a `MultiLocation` to any concrete asset items, giving it a new root location. + pub fn prepend_with(&mut self, prefix: &MultiLocation) -> Result<(), ()> { + self.0.iter_mut().try_for_each(|i| i.prepend_with(prefix)) + } + + /// Mutate the location of the asset identifier if concrete, giving it the same location + /// relative to a `target` context. The local context is provided as `context`. + pub fn reanchor( + &mut self, + target: &MultiLocation, + context: InteriorMultiLocation, + ) -> Result<(), ()> { + self.0.iter_mut().try_for_each(|i| i.reanchor(target, context)) + } + + /// Return a reference to an item at a specific index or `None` if it doesn't exist. + pub fn get(&self, index: usize) -> Option<&MultiAsset> { + self.0.get(index) + } +} + +/// A wildcard representing a set of assets. +#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Debug, Encode, Decode, TypeInfo, MaxEncodedLen)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] +pub enum WildMultiAsset { + /// All assets in Holding. + All, + /// All assets in Holding of a given fungibility and ID. + AllOf { id: AssetId, fun: WildFungibility }, + /// All assets in Holding, up to `u32` individual assets (different instances of non-fungibles + /// are separate assets). + AllCounted(#[codec(compact)] u32), + /// All assets in Holding of a given fungibility and ID up to `count` individual assets + /// (different instances of non-fungibles are separate assets). + AllOfCounted { + id: AssetId, + fun: WildFungibility, + #[codec(compact)] + count: u32, + }, +} + +impl TryFrom for WildMultiAsset { + type Error = (); + fn try_from(old: OldWildMultiAsset) -> Result { + use OldWildMultiAsset::*; + Ok(match old { + AllOf { id, fun } => Self::AllOf { id: id.try_into()?, fun: fun.try_into()? }, + All => Self::All, + }) + } +} + +impl TryFrom<(OldWildMultiAsset, u32)> for WildMultiAsset { + type Error = (); + fn try_from(old: (OldWildMultiAsset, u32)) -> Result { + use OldWildMultiAsset::*; + let count = old.1; + Ok(match old.0 { + AllOf { id, fun } => + Self::AllOfCounted { id: id.try_into()?, fun: fun.try_into()?, count }, + All => Self::AllCounted(count), + }) + } +} + +impl WildMultiAsset { + /// Returns true if `self` is a super-set of the given `inner` asset. + pub fn contains(&self, inner: &MultiAsset) -> bool { + use WildMultiAsset::*; + match self { + AllOfCounted { count: 0, .. } | AllCounted(0) => false, + AllOf { fun, id } | AllOfCounted { id, fun, .. } => + inner.fun.is_kind(*fun) && &inner.id == id, + All | AllCounted(_) => true, + } + } + + /// Returns true if the wild element of `self` matches `inner`. + /// + /// Note that for `Counted` variants of wildcards, then it will disregard the count except for + /// always returning `false` when equal to 0. + #[deprecated = "Use `contains` instead"] + pub fn matches(&self, inner: &MultiAsset) -> bool { + self.contains(inner) + } + + /// Mutate the asset to represent the same value from the perspective of a new `target` + /// location. The local chain's location is provided in `context`. + pub fn reanchor( + &mut self, + target: &MultiLocation, + context: InteriorMultiLocation, + ) -> Result<(), ()> { + use WildMultiAsset::*; + match self { + AllOf { ref mut id, .. } | AllOfCounted { ref mut id, .. } => + id.reanchor(target, context), + All | AllCounted(_) => Ok(()), + } + } + + /// Maximum count of assets allowed to match, if any. + pub fn count(&self) -> Option { + use WildMultiAsset::*; + match self { + AllOfCounted { count, .. } | AllCounted(count) => Some(*count), + All | AllOf { .. } => None, + } + } + + /// Explicit limit on number of assets allowed to match, if any. + pub fn limit(&self) -> Option { + self.count() + } + + /// Consume self and return the equivalent version but counted and with the `count` set to the + /// given parameter. + pub fn counted(self, count: u32) -> Self { + use WildMultiAsset::*; + match self { + AllOfCounted { fun, id, .. } | AllOf { fun, id } => AllOfCounted { fun, id, count }, + All | AllCounted(_) => AllCounted(count), + } + } +} + +impl, B: Into> From<(A, B)> for WildMultiAsset { + fn from((id, fun): (A, B)) -> WildMultiAsset { + WildMultiAsset::AllOf { fun: fun.into(), id: id.into() } + } +} + +/// `MultiAsset` collection, defined either by a number of `MultiAssets` or a single wildcard. +#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Debug, Encode, Decode, TypeInfo, MaxEncodedLen)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] +pub enum MultiAssetFilter { + /// Specify the filter as being everything contained by the given `MultiAssets` inner. + Definite(MultiAssets), + /// Specify the filter as the given `WildMultiAsset` wildcard. + Wild(WildMultiAsset), +} + +impl> From for MultiAssetFilter { + fn from(x: T) -> Self { + Self::Wild(x.into()) + } +} + +impl From for MultiAssetFilter { + fn from(x: MultiAsset) -> Self { + Self::Definite(vec![x].into()) + } +} + +impl From> for MultiAssetFilter { + fn from(x: Vec) -> Self { + Self::Definite(x.into()) + } +} + +impl From for MultiAssetFilter { + fn from(x: MultiAssets) -> Self { + Self::Definite(x) + } +} + +impl MultiAssetFilter { + /// Returns true if `inner` would be matched by `self`. + /// + /// Note that for `Counted` variants of wildcards, then it will disregard the count except for + /// always returning `false` when equal to 0. + pub fn matches(&self, inner: &MultiAsset) -> bool { + match self { + MultiAssetFilter::Definite(ref assets) => assets.contains(inner), + MultiAssetFilter::Wild(ref wild) => wild.contains(inner), + } + } + + /// Mutate the location of the asset identifier if concrete, giving it the same location + /// relative to a `target` context. The local context is provided as `context`. + pub fn reanchor( + &mut self, + target: &MultiLocation, + context: InteriorMultiLocation, + ) -> Result<(), ()> { + match self { + MultiAssetFilter::Definite(ref mut assets) => assets.reanchor(target, context), + MultiAssetFilter::Wild(ref mut wild) => wild.reanchor(target, context), + } + } + + /// Maximum count of assets it is possible to match, if known. + pub fn count(&self) -> Option { + use MultiAssetFilter::*; + match self { + Definite(x) => Some(x.len() as u32), + Wild(x) => x.count(), + } + } + + /// Explicit limit placed on the number of items, if any. + pub fn limit(&self) -> Option { + use MultiAssetFilter::*; + match self { + Definite(_) => None, + Wild(x) => x.limit(), + } + } +} + +impl TryFrom for MultiAssetFilter { + type Error = (); + fn try_from(old: OldMultiAssetFilter) -> Result { + Ok(match old { + OldMultiAssetFilter::Definite(x) => Self::Definite(x.try_into()?), + OldMultiAssetFilter::Wild(x) => Self::Wild(x.try_into()?), + }) + } +} + +impl TryFrom<(OldMultiAssetFilter, u32)> for MultiAssetFilter { + type Error = (); + fn try_from(old: (OldMultiAssetFilter, u32)) -> Result { + let count = old.1; + Ok(match old.0 { + OldMultiAssetFilter::Definite(x) if count >= x.len() as u32 => + Self::Definite(x.try_into()?), + OldMultiAssetFilter::Wild(x) => Self::Wild((x, count).try_into()?), + _ => return Err(()), + }) + } +} + +#[cfg(test)] +mod tests { + use super::super::prelude::*; + + #[test] + fn conversion_works() { + let _: MultiAssets = (Here, 1u128).into(); + } + + #[test] + fn from_sorted_and_deduplicated_works() { + use super::*; + use alloc::vec; + + let empty = vec![]; + let r = MultiAssets::from_sorted_and_deduplicated(empty); + assert_eq!(r, Ok(MultiAssets(vec![]))); + + let dup_fun = vec![(Here, 100).into(), (Here, 10).into()]; + let r = MultiAssets::from_sorted_and_deduplicated(dup_fun); + assert!(r.is_err()); + + let dup_nft = vec![(Here, *b"notgood!").into(), (Here, *b"notgood!").into()]; + let r = MultiAssets::from_sorted_and_deduplicated(dup_nft); + assert!(r.is_err()); + + let good_fun = vec![(Here, 10).into(), (Parent, 10).into()]; + let r = MultiAssets::from_sorted_and_deduplicated(good_fun.clone()); + assert_eq!(r, Ok(MultiAssets(good_fun))); + + let bad_fun = vec![(Parent, 10).into(), (Here, 10).into()]; + let r = MultiAssets::from_sorted_and_deduplicated(bad_fun); + assert!(r.is_err()); + + let good_abstract_fun = vec![(Here, 100).into(), ([0u8; 32], 10).into()]; + let r = MultiAssets::from_sorted_and_deduplicated(good_abstract_fun.clone()); + assert_eq!(r, Ok(MultiAssets(good_abstract_fun))); + + let bad_abstract_fun = vec![([0u8; 32], 10).into(), (Here, 10).into()]; + let r = MultiAssets::from_sorted_and_deduplicated(bad_abstract_fun); + assert!(r.is_err()); + + let good_nft = vec![(Here, ()).into(), (Here, *b"good").into()]; + let r = MultiAssets::from_sorted_and_deduplicated(good_nft.clone()); + assert_eq!(r, Ok(MultiAssets(good_nft))); + + let bad_nft = vec![(Here, *b"bad!").into(), (Here, ()).into()]; + let r = MultiAssets::from_sorted_and_deduplicated(bad_nft); + assert!(r.is_err()); + + let good_abstract_nft = vec![(Here, ()).into(), ([0u8; 32], ()).into()]; + let r = MultiAssets::from_sorted_and_deduplicated(good_abstract_nft.clone()); + assert_eq!(r, Ok(MultiAssets(good_abstract_nft))); + + let bad_abstract_nft = vec![([0u8; 32], ()).into(), (Here, ()).into()]; + let r = MultiAssets::from_sorted_and_deduplicated(bad_abstract_nft); + assert!(r.is_err()); + + let mixed_good = vec![(Here, 10).into(), (Here, *b"good").into()]; + let r = MultiAssets::from_sorted_and_deduplicated(mixed_good.clone()); + assert_eq!(r, Ok(MultiAssets(mixed_good))); + + let mixed_bad = vec![(Here, *b"bad!").into(), (Here, 10).into()]; + let r = MultiAssets::from_sorted_and_deduplicated(mixed_bad); + assert!(r.is_err()); + } +} diff --git a/xcm/src/v3/multilocation.rs b/xcm/src/v3/multilocation.rs new file mode 100644 index 000000000000..698276627afa --- /dev/null +++ b/xcm/src/v3/multilocation.rs @@ -0,0 +1,710 @@ +// Copyright 2020-2021 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +//! XCM `MultiLocation` datatype. + +use super::{Junction, Junctions}; +use crate::{v2::MultiLocation as OldMultiLocation, VersionedMultiLocation}; +use core::{ + convert::{TryFrom, TryInto}, + result, +}; +use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; +use scale_info::TypeInfo; + +/// A relative path between state-bearing consensus systems. +/// +/// A location in a consensus system is defined as an *isolatable state machine* held within global +/// consensus. The location in question need not have a sophisticated consensus algorithm of its +/// own; a single account within Ethereum, for example, could be considered a location. +/// +/// A very-much non-exhaustive list of types of location include: +/// - A (normal, layer-1) block chain, e.g. the Bitcoin mainnet or a parachain. +/// - A layer-0 super-chain, e.g. the Polkadot Relay chain. +/// - A layer-2 smart contract, e.g. an ERC-20 on Ethereum. +/// - A logical functional component of a chain, e.g. a single instance of a pallet on a Frame-based +/// Substrate chain. +/// - An account. +/// +/// A `MultiLocation` is a *relative identifier*, meaning that it can only be used to define the +/// relative path between two locations, and cannot generally be used to refer to a location +/// universally. It is comprised of an integer number of parents specifying the number of times to +/// "escape" upwards into the containing consensus system and then a number of *junctions*, each +/// diving down and specifying some interior portion of state (which may be considered a +/// "sub-consensus" system). +/// +/// This specific `MultiLocation` implementation uses a `Junctions` datatype which is a Rust `enum` +/// in order to make pattern matching easier. There are occasions where it is important to ensure +/// that a value is strictly an interior location, in those cases, `Junctions` may be used. +/// +/// The `MultiLocation` value of `Null` simply refers to the interpreting consensus system. +#[derive( + Copy, Clone, Decode, Encode, Eq, PartialEq, Ord, PartialOrd, Debug, TypeInfo, MaxEncodedLen, +)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] +pub struct MultiLocation { + /// The number of parent junctions at the beginning of this `MultiLocation`. + pub parents: u8, + /// The interior (i.e. non-parent) junctions that this `MultiLocation` contains. + pub interior: Junctions, +} + +impl Default for MultiLocation { + fn default() -> Self { + Self { parents: 0, interior: Junctions::Here } + } +} + +/// A relative location which is constrained to be an interior location of the context. +/// +/// See also `MultiLocation`. +pub type InteriorMultiLocation = Junctions; + +impl MultiLocation { + /// Creates a new `MultiLocation` with the given number of parents and interior junctions. + pub fn new(parents: u8, interior: impl Into) -> MultiLocation { + MultiLocation { parents, interior: interior.into() } + } + + /// Consume `self` and return the equivalent `VersionedMultiLocation` value. + pub const fn into_versioned(self) -> VersionedMultiLocation { + VersionedMultiLocation::V3(self) + } + + /// Creates a new `MultiLocation` with 0 parents and a `Here` interior. + /// + /// The resulting `MultiLocation` can be interpreted as the "current consensus system". + pub const fn here() -> MultiLocation { + MultiLocation { parents: 0, interior: Junctions::Here } + } + + /// Creates a new `MultiLocation` which evaluates to the parent context. + pub const fn parent() -> MultiLocation { + MultiLocation { parents: 1, interior: Junctions::Here } + } + + /// Creates a new `MultiLocation` which evaluates to the grand parent context. + pub const fn grandparent() -> MultiLocation { + MultiLocation { parents: 2, interior: Junctions::Here } + } + + /// Creates a new `MultiLocation` with `parents` and an empty (`Here`) interior. + pub const fn ancestor(parents: u8) -> MultiLocation { + MultiLocation { parents, interior: Junctions::Here } + } + + /// Whether the `MultiLocation` has no parents and has a `Here` interior. + pub const fn is_here(&self) -> bool { + self.parents == 0 && self.interior.len() == 0 + } + + /// Remove the `NetworkId` value in any interior `Junction`s. + pub fn remove_network_id(&mut self) { + self.interior.remove_network_id(); + } + + /// Return a reference to the interior field. + pub fn interior(&self) -> &Junctions { + &self.interior + } + + /// Return a mutable reference to the interior field. + pub fn interior_mut(&mut self) -> &mut Junctions { + &mut self.interior + } + + /// Returns the number of `Parent` junctions at the beginning of `self`. + pub const fn parent_count(&self) -> u8 { + self.parents + } + + /// Returns boolean indicating whether `self` contains only the specified amount of + /// parents and no interior junctions. + pub const fn contains_parents_only(&self, count: u8) -> bool { + matches!(self.interior, Junctions::Here) && self.parents == count + } + + /// Returns the number of parents and junctions in `self`. + pub const fn len(&self) -> usize { + self.parent_count() as usize + self.interior.len() + } + + /// Returns the first interior junction, or `None` if the location is empty or contains only + /// parents. + pub fn first_interior(&self) -> Option<&Junction> { + self.interior.first() + } + + /// Returns last junction, or `None` if the location is empty or contains only parents. + pub fn last(&self) -> Option<&Junction> { + self.interior.last() + } + + /// Splits off the first interior junction, returning the remaining suffix (first item in tuple) + /// and the first element (second item in tuple) or `None` if it was empty. + pub fn split_first_interior(self) -> (MultiLocation, Option) { + let MultiLocation { parents, interior: junctions } = self; + let (suffix, first) = junctions.split_first(); + let multilocation = MultiLocation { parents, interior: suffix }; + (multilocation, first) + } + + /// Splits off the last interior junction, returning the remaining prefix (first item in tuple) + /// and the last element (second item in tuple) or `None` if it was empty or if `self` only + /// contains parents. + pub fn split_last_interior(self) -> (MultiLocation, Option) { + let MultiLocation { parents, interior: junctions } = self; + let (prefix, last) = junctions.split_last(); + let multilocation = MultiLocation { parents, interior: prefix }; + (multilocation, last) + } + + /// Mutates `self`, suffixing its interior junctions with `new`. Returns `Err` with `new` in + /// case of overflow. + pub fn push_interior(&mut self, new: impl Into) -> result::Result<(), Junction> { + self.interior.push(new) + } + + /// Mutates `self`, prefixing its interior junctions with `new`. Returns `Err` with `new` in + /// case of overflow. + pub fn push_front_interior( + &mut self, + new: impl Into, + ) -> result::Result<(), Junction> { + self.interior.push_front(new) + } + + /// Consumes `self` and returns a `MultiLocation` suffixed with `new`, or an `Err` with theoriginal value of + /// `self` in case of overflow. + pub fn pushed_with_interior( + self, + new: impl Into, + ) -> result::Result { + match self.interior.pushed_with(new) { + Ok(i) => Ok(MultiLocation { interior: i, parents: self.parents }), + Err((i, j)) => Err((MultiLocation { interior: i, parents: self.parents }, j)), + } + } + + /// Consumes `self` and returns a `MultiLocation` prefixed with `new`, or an `Err` with the original value of + /// `self` in case of overflow. + pub fn pushed_front_with_interior( + self, + new: impl Into, + ) -> result::Result { + match self.interior.pushed_front_with(new) { + Ok(i) => Ok(MultiLocation { interior: i, parents: self.parents }), + Err((i, j)) => Err((MultiLocation { interior: i, parents: self.parents }, j)), + } + } + + /// Returns the junction at index `i`, or `None` if the location is a parent or if the location + /// does not contain that many elements. + pub fn at(&self, i: usize) -> Option<&Junction> { + let num_parents = self.parents as usize; + if i < num_parents { + return None + } + self.interior.at(i - num_parents) + } + + /// Returns a mutable reference to the junction at index `i`, or `None` if the location is a + /// parent or if it doesn't contain that many elements. + pub fn at_mut(&mut self, i: usize) -> Option<&mut Junction> { + let num_parents = self.parents as usize; + if i < num_parents { + return None + } + self.interior.at_mut(i - num_parents) + } + + /// Decrements the parent count by 1. + pub fn dec_parent(&mut self) { + self.parents = self.parents.saturating_sub(1); + } + + /// Removes the first interior junction from `self`, returning it + /// (or `None` if it was empty or if `self` contains only parents). + pub fn take_first_interior(&mut self) -> Option { + self.interior.take_first() + } + + /// Removes the last element from `interior`, returning it (or `None` if it was empty or if + /// `self` only contains parents). + pub fn take_last(&mut self) -> Option { + self.interior.take_last() + } + + /// Ensures that `self` has the same number of parents as `prefix`, its junctions begins with + /// the junctions of `prefix` and that it has a single `Junction` item following. + /// If so, returns a reference to this `Junction` item. + /// + /// # Example + /// ```rust + /// # use xcm::v3::{Junctions::*, Junction::*, MultiLocation}; + /// # fn main() { + /// let mut m = MultiLocation::new(1, X2(PalletInstance(3), OnlyChild)); + /// assert_eq!( + /// m.match_and_split(&MultiLocation::new(1, X1(PalletInstance(3)))), + /// Some(&OnlyChild), + /// ); + /// assert_eq!(m.match_and_split(&MultiLocation::new(1, Here)), None); + /// # } + /// ``` + pub fn match_and_split(&self, prefix: &MultiLocation) -> Option<&Junction> { + if self.parents != prefix.parents { + return None + } + self.interior.match_and_split(&prefix.interior) + } + + pub fn starts_with(&self, prefix: &MultiLocation) -> bool { + self.parents == prefix.parents && self.interior.starts_with(&prefix.interior) + } + + /// Mutate `self` so that it is suffixed with `suffix`. + /// + /// Does not modify `self` and returns `Err` with `suffix` in case of overflow. + /// + /// # Example + /// ```rust + /// # use xcm::v3::{Junctions::*, Junction::*, MultiLocation, Parent}; + /// # fn main() { + /// let mut m: MultiLocation = (Parent, Parachain(21), 69u64).into(); + /// assert_eq!(m.append_with((Parent, PalletInstance(3))), Ok(())); + /// assert_eq!(m, MultiLocation::new(1, X2(Parachain(21), PalletInstance(3)))); + /// # } + /// ``` + pub fn append_with(&mut self, suffix: impl Into) -> Result<(), Self> { + let prefix = core::mem::replace(self, suffix.into()); + match self.prepend_with(prefix) { + Ok(()) => Ok(()), + Err(prefix) => Err(core::mem::replace(self, prefix)), + } + } + + /// Consume `self` and return its value suffixed with `suffix`. + /// + /// Returns `Err` with the original value of `self` and `suffix` in case of overflow. + /// + /// # Example + /// ```rust + /// # use xcm::v3::{Junctions::*, Junction::*, MultiLocation, Parent}; + /// # fn main() { + /// let mut m: MultiLocation = (Parent, Parachain(21), 69u64).into(); + /// let r = m.appended_with((Parent, PalletInstance(3))).unwrap(); + /// assert_eq!(r, MultiLocation::new(1, X2(Parachain(21), PalletInstance(3)))); + /// # } + /// ``` + pub fn appended_with(mut self, suffix: impl Into) -> Result { + match self.append_with(suffix) { + Ok(()) => Ok(self), + Err(suffix) => Err((self, suffix)), + } + } + + /// Mutate `self` so that it is prefixed with `prefix`. + /// + /// Does not modify `self` and returns `Err` with `prefix` in case of overflow. + /// + /// # Example + /// ```rust + /// # use xcm::v3::{Junctions::*, Junction::*, MultiLocation, Parent}; + /// # fn main() { + /// let mut m: MultiLocation = (Parent, Parent, PalletInstance(3)).into(); + /// assert_eq!(m.prepend_with((Parent, Parachain(21), OnlyChild)), Ok(())); + /// assert_eq!(m, MultiLocation::new(1, X1(PalletInstance(3)))); + /// # } + /// ``` + pub fn prepend_with(&mut self, prefix: impl Into) -> Result<(), Self> { + // prefix self (suffix) + // P .. P I .. I p .. p i .. i + let mut prefix = prefix.into(); + let prepend_interior = prefix.interior.len().saturating_sub(self.parents as usize); + let final_interior = self.interior.len().saturating_add(prepend_interior); + if final_interior > super::junctions::MAX_JUNCTIONS { + return Err(prefix) + } + let suffix_parents = (self.parents as usize).saturating_sub(prefix.interior.len()); + let final_parents = (prefix.parents as usize).saturating_add(suffix_parents); + if final_parents > 255 { + return Err(prefix) + } + + // cancel out the final item on the prefix interior for one of the suffix's parents. + while self.parents > 0 && prefix.take_last().is_some() { + self.dec_parent(); + } + + // now we have either removed all suffix's parents or prefix interior. + // this means we can combine the prefix's and suffix's remaining parents/interior since + // we know that with at least one empty, the overall order will be respected: + // prefix self (suffix) + // P .. P (I) p .. p i .. i => P + p .. (no I) i + // -- or -- + // P .. P I .. I (p) i .. i => P (no p) .. I + i + + self.parents = self.parents.saturating_add(prefix.parents); + for j in prefix.interior.into_iter().rev() { + self.push_front_interior(j) + .expect("final_interior no greater than MAX_JUNCTIONS; qed"); + } + Ok(()) + } + + /// Consume `self` and return its value prefixed with `prefix`. + /// + /// Returns `Err` with the original value of `self` and `prefix` in case of overflow. + /// + /// # Example + /// ```rust + /// # use xcm::v3::{Junctions::*, Junction::*, MultiLocation, Parent}; + /// # fn main() { + /// let m: MultiLocation = (Parent, Parent, PalletInstance(3)).into(); + /// let r = m.prepended_with((Parent, Parachain(21), OnlyChild)).unwrap(); + /// assert_eq!(r, MultiLocation::new(1, X1(PalletInstance(3)))); + /// # } + /// ``` + pub fn prepended_with(mut self, prefix: impl Into) -> Result { + match self.prepend_with(prefix) { + Ok(()) => Ok(self), + Err(prefix) => Err((self, prefix)), + } + } + + /// Mutate `self` so that it represents the same location from the point of view of `target`. + /// The context of `self` is provided as `context`. + /// + /// Does not modify `self` in case of overflow. + pub fn reanchor( + &mut self, + target: &MultiLocation, + context: InteriorMultiLocation, + ) -> Result<(), ()> { + // TODO: https://github.com/paritytech/polkadot/issues/4489 Optimize this. + + // 1. Use our `context` to figure out how the `target` would address us. + let inverted_target = context.invert_target(target)?; + + // 2. Prepend `inverted_target` to `self` to get self's location from the perspective of + // `target`. + self.prepend_with(inverted_target).map_err(|_| ())?; + + // 3. Given that we know some of `target` context, ensure that any parents in `self` are + // strictly needed. + self.simplify(target.interior()); + + Ok(()) + } + + /// Consume `self` and return a new value representing the same location from the point of view + /// of `target`. The context of `self` is provided as `context`. + /// + /// Returns the original `self` in case of overflow. + pub fn reanchored( + mut self, + target: &MultiLocation, + context: InteriorMultiLocation, + ) -> Result { + match self.reanchor(target, context) { + Ok(()) => Ok(self), + Err(()) => Err(self), + } + } + + /// Remove any unneeded parents/junctions in `self` based on the given context it will be + /// interpreted in. + pub fn simplify(&mut self, context: &Junctions) { + if context.len() < self.parents as usize { + // Not enough context + return + } + while self.parents > 0 { + let maybe = context.at(context.len() - (self.parents as usize)); + match (self.interior.first(), maybe) { + (Some(i), Some(j)) if i == j => { + self.interior.take_first(); + self.parents -= 1; + }, + _ => break, + } + } + } +} + +impl TryFrom for MultiLocation { + type Error = (); + fn try_from(x: OldMultiLocation) -> result::Result { + Ok(MultiLocation { parents: x.parents, interior: x.interior.try_into()? }) + } +} + +/// A unit struct which can be converted into a `MultiLocation` of `parents` value 1. +#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug)] +pub struct Parent; +impl From for MultiLocation { + fn from(_: Parent) -> Self { + MultiLocation { parents: 1, interior: Junctions::Here } + } +} + +/// A tuple struct which can be converted into a `MultiLocation` of `parents` value 1 with the inner interior. +#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Debug)] +pub struct ParentThen(pub Junctions); +impl From for MultiLocation { + fn from(ParentThen(interior): ParentThen) -> Self { + MultiLocation { parents: 1, interior } + } +} + +/// A unit struct which can be converted into a `MultiLocation` of the inner `parents` value. +#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug)] +pub struct Ancestor(pub u8); +impl From for MultiLocation { + fn from(Ancestor(parents): Ancestor) -> Self { + MultiLocation { parents, interior: Junctions::Here } + } +} + +/// A unit struct which can be converted into a `MultiLocation` of the inner `parents` value and the inner interior. +#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Debug)] +pub struct AncestorThen(pub u8, pub Interior); +impl> From> for MultiLocation { + fn from(AncestorThen(parents, interior): AncestorThen) -> Self { + MultiLocation { parents, interior: interior.into() } + } +} + +xcm_procedural::impl_conversion_functions_for_multilocation_v3!(); + +#[cfg(test)] +mod tests { + use crate::v3::prelude::*; + use parity_scale_codec::{Decode, Encode}; + + #[test] + fn conversion_works() { + let x: MultiLocation = Parent.into(); + assert_eq!(x, MultiLocation { parents: 1, interior: Here }); + // let x: MultiLocation = (Parent,).into(); + // assert_eq!(x, MultiLocation { parents: 1, interior: Here }); + // let x: MultiLocation = (Parent, Parent).into(); + // assert_eq!(x, MultiLocation { parents: 2, interior: Here }); + let x: MultiLocation = (Parent, Parent, OnlyChild).into(); + assert_eq!(x, MultiLocation { parents: 2, interior: OnlyChild.into() }); + let x: MultiLocation = OnlyChild.into(); + assert_eq!(x, MultiLocation { parents: 0, interior: OnlyChild.into() }); + let x: MultiLocation = (OnlyChild,).into(); + assert_eq!(x, MultiLocation { parents: 0, interior: OnlyChild.into() }); + } + + #[test] + fn simplify_basic_works() { + let mut location: MultiLocation = + (Parent, Parent, Parachain(1000), PalletInstance(42), GeneralIndex(69)).into(); + let context = X2(Parachain(1000), PalletInstance(42)); + let expected = GeneralIndex(69).into(); + location.simplify(&context); + assert_eq!(location, expected); + + let mut location: MultiLocation = (Parent, PalletInstance(42), GeneralIndex(69)).into(); + let context = X1(PalletInstance(42)); + let expected = GeneralIndex(69).into(); + location.simplify(&context); + assert_eq!(location, expected); + + let mut location: MultiLocation = (Parent, PalletInstance(42), GeneralIndex(69)).into(); + let context = X2(Parachain(1000), PalletInstance(42)); + let expected = GeneralIndex(69).into(); + location.simplify(&context); + assert_eq!(location, expected); + + let mut location: MultiLocation = + (Parent, Parent, Parachain(1000), PalletInstance(42), GeneralIndex(69)).into(); + let context = X3(OnlyChild, Parachain(1000), PalletInstance(42)); + let expected = GeneralIndex(69).into(); + location.simplify(&context); + assert_eq!(location, expected); + } + + #[test] + fn simplify_incompatible_location_fails() { + let mut location: MultiLocation = + (Parent, Parent, Parachain(1000), PalletInstance(42), GeneralIndex(69)).into(); + let context = X3(Parachain(1000), PalletInstance(42), GeneralIndex(42)); + let expected = + (Parent, Parent, Parachain(1000), PalletInstance(42), GeneralIndex(69)).into(); + location.simplify(&context); + assert_eq!(location, expected); + + let mut location: MultiLocation = + (Parent, Parent, Parachain(1000), PalletInstance(42), GeneralIndex(69)).into(); + let context = X1(Parachain(1000)); + let expected = + (Parent, Parent, Parachain(1000), PalletInstance(42), GeneralIndex(69)).into(); + location.simplify(&context); + assert_eq!(location, expected); + } + + #[test] + fn reanchor_works() { + let mut id: MultiLocation = (Parent, Parachain(1000), GeneralIndex(42)).into(); + let context = Parachain(2000).into(); + let target = (Parent, Parachain(1000)).into(); + let expected = GeneralIndex(42).into(); + id.reanchor(&target, context).unwrap(); + assert_eq!(id, expected); + } + + #[test] + fn encode_and_decode_works() { + let m = MultiLocation { + parents: 1, + interior: X2(Parachain(42), AccountIndex64 { network: None, index: 23 }), + }; + let encoded = m.encode(); + assert_eq!(encoded, [1, 2, 0, 168, 2, 0, 92].to_vec()); + let decoded = MultiLocation::decode(&mut &encoded[..]); + assert_eq!(decoded, Ok(m)); + } + + #[test] + fn match_and_split_works() { + let m = MultiLocation { + parents: 1, + interior: X2(Parachain(42), AccountIndex64 { network: None, index: 23 }), + }; + assert_eq!(m.match_and_split(&MultiLocation { parents: 1, interior: Here }), None); + assert_eq!( + m.match_and_split(&MultiLocation { parents: 1, interior: X1(Parachain(42)) }), + Some(&AccountIndex64 { network: None, index: 23 }) + ); + assert_eq!(m.match_and_split(&m), None); + } + + #[test] + fn append_with_works() { + let acc = AccountIndex64 { network: None, index: 23 }; + let mut m = MultiLocation { parents: 1, interior: X1(Parachain(42)) }; + assert_eq!(m.append_with(X2(PalletInstance(3), acc.clone())), Ok(())); + assert_eq!( + m, + MultiLocation { + parents: 1, + interior: X3(Parachain(42), PalletInstance(3), acc.clone()) + } + ); + + // cannot append to create overly long multilocation + let acc = AccountIndex64 { network: None, index: 23 }; + let m = MultiLocation { + parents: 254, + interior: X5(Parachain(42), OnlyChild, OnlyChild, OnlyChild, OnlyChild), + }; + let suffix: MultiLocation = (PalletInstance(3), acc.clone(), OnlyChild, OnlyChild).into(); + assert_eq!(m.clone().append_with(suffix.clone()), Err(suffix)); + } + + #[test] + fn prepend_with_works() { + let mut m = MultiLocation { + parents: 1, + interior: X2(Parachain(42), AccountIndex64 { network: None, index: 23 }), + }; + assert_eq!(m.prepend_with(MultiLocation { parents: 1, interior: X1(OnlyChild) }), Ok(())); + assert_eq!( + m, + MultiLocation { + parents: 1, + interior: X2(Parachain(42), AccountIndex64 { network: None, index: 23 }) + } + ); + + // cannot prepend to create overly long multilocation + let mut m = MultiLocation { parents: 254, interior: X1(Parachain(42)) }; + let prefix = MultiLocation { parents: 2, interior: Here }; + assert_eq!(m.prepend_with(prefix.clone()), Err(prefix)); + + let prefix = MultiLocation { parents: 1, interior: Here }; + assert_eq!(m.prepend_with(prefix), Ok(())); + assert_eq!(m, MultiLocation { parents: 255, interior: X1(Parachain(42)) }); + } + + #[test] + fn double_ended_ref_iteration_works() { + let m = X3(Parachain(1000), Parachain(3), PalletInstance(5)); + let mut iter = m.iter(); + + let first = iter.next().unwrap(); + assert_eq!(first, &Parachain(1000)); + let third = iter.next_back().unwrap(); + assert_eq!(third, &PalletInstance(5)); + let second = iter.next_back().unwrap(); + assert_eq!(iter.next(), None); + assert_eq!(iter.next_back(), None); + assert_eq!(second, &Parachain(3)); + + let res = Here + .pushed_with(first.clone()) + .unwrap() + .pushed_with(second.clone()) + .unwrap() + .pushed_with(third.clone()) + .unwrap(); + assert_eq!(m, res); + + // make sure there's no funny business with the 0 indexing + let m = Here; + let mut iter = m.iter(); + + assert_eq!(iter.next(), None); + assert_eq!(iter.next_back(), None); + } + + #[test] + fn conversion_from_other_types_works() { + use crate::v2; + use core::convert::TryInto; + + fn takes_multilocation>(_arg: Arg) {} + + takes_multilocation(Parent); + takes_multilocation(Here); + takes_multilocation(X1(Parachain(42))); + takes_multilocation((Ancestor(255), PalletInstance(8))); + takes_multilocation((Ancestor(5), Parachain(1), PalletInstance(3))); + takes_multilocation((Ancestor(2), Here)); + takes_multilocation(AncestorThen( + 3, + X2(Parachain(43), AccountIndex64 { network: None, index: 155 }), + )); + takes_multilocation((Parent, AccountId32 { network: None, id: [0; 32] })); + takes_multilocation((Parent, Here)); + takes_multilocation(ParentThen(X1(Parachain(75)))); + takes_multilocation([Parachain(100), PalletInstance(3)]); + + assert_eq!( + v2::MultiLocation::from(v2::Junctions::Here).try_into(), + Ok(MultiLocation::here()) + ); + assert_eq!(v2::MultiLocation::from(v2::Parent).try_into(), Ok(MultiLocation::parent())); + assert_eq!( + v2::MultiLocation::from((v2::Parent, v2::Parent, v2::Junction::GeneralIndex(42u128),)) + .try_into(), + Ok(MultiLocation { parents: 2, interior: X1(GeneralIndex(42u128)) }), + ); + } +} diff --git a/xcm/src/v3/traits.rs b/xcm/src/v3/traits.rs new file mode 100644 index 000000000000..74ca60cd6631 --- /dev/null +++ b/xcm/src/v3/traits.rs @@ -0,0 +1,541 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate 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 Polkadot. If not, see . + +//! Cross-Consensus Message format data structures. + +use crate::v2::Error as OldError; +use core::result; +use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; +use scale_info::TypeInfo; + +pub use sp_weights::Weight; + +use super::*; + +/// Error codes used in XCM. The first errors codes have explicit indices and are part of the XCM +/// format. Those trailing are merely part of the XCM implementation; there is no expectation that +/// they will retain the same index over time. +#[derive(Copy, Clone, Encode, Decode, Eq, PartialEq, Debug, TypeInfo)] +pub enum Error { + // Errors that happen due to instructions being executed. These alone are defined in the + // XCM specification. + /// An arithmetic overflow happened. + #[codec(index = 0)] + Overflow, + /// The instruction is intentionally unsupported. + #[codec(index = 1)] + Unimplemented, + /// Origin Register does not contain a value value for a reserve transfer notification. + #[codec(index = 2)] + UntrustedReserveLocation, + /// Origin Register does not contain a value value for a teleport notification. + #[codec(index = 3)] + UntrustedTeleportLocation, + /// `MultiLocation` value too large to descend further. + #[codec(index = 4)] + LocationFull, + /// `MultiLocation` value ascend more parents than known ancestors of local location. + #[codec(index = 5)] + LocationNotInvertible, + /// The Origin Register does not contain a valid value for instruction. + #[codec(index = 6)] + BadOrigin, + /// The location parameter is not a valid value for the instruction. + #[codec(index = 7)] + InvalidLocation, + /// The given asset is not handled. + #[codec(index = 8)] + AssetNotFound, + /// An asset transaction (like withdraw or deposit) failed (typically due to type conversions). + #[codec(index = 9)] + FailedToTransactAsset(#[codec(skip)] &'static str), + /// An asset cannot be withdrawn, potentially due to lack of ownership, availability or rights. + #[codec(index = 10)] + NotWithdrawable, + /// An asset cannot be deposited under the ownership of a particular location. + #[codec(index = 11)] + LocationCannotHold, + /// Attempt to send a message greater than the maximum supported by the transport protocol. + #[codec(index = 12)] + ExceedsMaxMessageSize, + /// The given message cannot be translated into a format supported by the destination. + #[codec(index = 13)] + DestinationUnsupported, + /// Destination is routable, but there is some issue with the transport mechanism. + #[codec(index = 14)] + Transport(#[codec(skip)] &'static str), + /// Destination is known to be unroutable. + #[codec(index = 15)] + Unroutable, + /// Used by `ClaimAsset` when the given claim could not be recognized/found. + #[codec(index = 16)] + UnknownClaim, + /// Used by `Transact` when the functor cannot be decoded. + #[codec(index = 17)] + FailedToDecode, + /// Used by `Transact` to indicate that the given weight limit could be breached by the functor. + #[codec(index = 18)] + MaxWeightInvalid, + /// Used by `BuyExecution` when the Holding Register does not contain payable fees. + #[codec(index = 19)] + NotHoldingFees, + /// Used by `BuyExecution` when the fees declared to purchase weight are insufficient. + #[codec(index = 20)] + TooExpensive, + /// Used by the `Trap` instruction to force an error intentionally. Its code is included. + #[codec(index = 21)] + Trap(u64), + /// Used by `ExpectAsset`, `ExpectError` and `ExpectOrigin` when the expectation was not true. + #[codec(index = 22)] + ExpectationFalse, + /// The provided pallet index was not found. + #[codec(index = 23)] + PalletNotFound, + /// The given pallet's name is different to that expected. + #[codec(index = 24)] + NameMismatch, + /// The given pallet's version has an incompatible version to that expected. + #[codec(index = 25)] + VersionIncompatible, + /// The given operation would lead to an overflow of the Holding Register. + #[codec(index = 26)] + HoldingWouldOverflow, + /// The message was unable to be exported. + #[codec(index = 27)] + ExportError, + /// `MultiLocation` value failed to be reanchored. + #[codec(index = 28)] + ReanchorFailed, + /// No deal is possible under the given constraints. + #[codec(index = 29)] + NoDeal, + /// Fees were required which the origin could not pay. + #[codec(index = 30)] + FeesNotMet, + /// Some other error with locking. + #[codec(index = 31)] + LockError, + /// The state was not in a condition where the operation was valid to make. + #[codec(index = 32)] + NoPermission, + /// The universal location of the local consensus is improper. + #[codec(index = 33)] + Unanchored, + /// An asset cannot be deposited, probably because (too much of) it already exists. + #[codec(index = 34)] + NotDepositable, + + // Errors that happen prior to instructions being executed. These fall outside of the XCM spec. + /// XCM version not able to be handled. + UnhandledXcmVersion, + /// Execution of the XCM would potentially result in a greater weight used than weight limit. + WeightLimitReached(Weight), + /// The XCM did not pass the barrier condition for execution. + /// + /// The barrier condition differs on different chains and in different circumstances, but + /// generally it means that the conditions surrounding the message were not such that the chain + /// considers the message worth spending time executing. Since most chains lift the barrier to + /// execution on appropriate payment, presentation of an NFT voucher, or based on the message + /// origin, it means that none of those were the case. + Barrier, + /// The weight of an XCM message is not computable ahead of execution. + WeightNotComputable, + /// Recursion stack limit reached + ExceedsStackLimit, +} + +impl MaxEncodedLen for Error { + fn max_encoded_len() -> usize { + // TODO: max_encoded_len doesn't quite work here as it tries to take notice of the fields + // marked `codec(skip)`. We can hard-code it with the right answer for now. + 1 + } +} + +impl TryFrom for Error { + type Error = (); + fn try_from(old_error: OldError) -> result::Result { + use OldError::*; + Ok(match old_error { + Overflow => Self::Overflow, + Unimplemented => Self::Unimplemented, + UntrustedReserveLocation => Self::UntrustedReserveLocation, + UntrustedTeleportLocation => Self::UntrustedTeleportLocation, + MultiLocationFull => Self::LocationFull, + MultiLocationNotInvertible => Self::LocationNotInvertible, + BadOrigin => Self::BadOrigin, + InvalidLocation => Self::InvalidLocation, + AssetNotFound => Self::AssetNotFound, + FailedToTransactAsset(s) => Self::FailedToTransactAsset(s), + NotWithdrawable => Self::NotWithdrawable, + LocationCannotHold => Self::LocationCannotHold, + ExceedsMaxMessageSize => Self::ExceedsMaxMessageSize, + DestinationUnsupported => Self::DestinationUnsupported, + Transport(s) => Self::Transport(s), + Unroutable => Self::Unroutable, + UnknownClaim => Self::UnknownClaim, + FailedToDecode => Self::FailedToDecode, + MaxWeightInvalid => Self::MaxWeightInvalid, + NotHoldingFees => Self::NotHoldingFees, + TooExpensive => Self::TooExpensive, + Trap(i) => Self::Trap(i), + _ => return Err(()), + }) + } +} + +impl From for Error { + fn from(e: SendError) -> Self { + match e { + SendError::NotApplicable | SendError::Unroutable | SendError::MissingArgument => + Error::Unroutable, + SendError::Transport(s) => Error::Transport(s), + SendError::DestinationUnsupported => Error::DestinationUnsupported, + SendError::ExceedsMaxMessageSize => Error::ExceedsMaxMessageSize, + SendError::Fees => Error::FeesNotMet, + } + } +} + +pub type Result = result::Result<(), Error>; + +/// Outcome of an XCM execution. +#[derive(Clone, Encode, Decode, Eq, PartialEq, Debug, TypeInfo)] +pub enum Outcome { + /// Execution completed successfully; given weight was used. + Complete(Weight), + /// Execution started, but did not complete successfully due to the given error; given weight was used. + Incomplete(Weight, Error), + /// Execution did not start due to the given error. + Error(Error), +} + +impl Outcome { + pub fn ensure_complete(self) -> Result { + match self { + Outcome::Complete(_) => Ok(()), + Outcome::Incomplete(_, e) => Err(e), + Outcome::Error(e) => Err(e), + } + } + pub fn ensure_execution(self) -> result::Result { + match self { + Outcome::Complete(w) => Ok(w), + Outcome::Incomplete(w, _) => Ok(w), + Outcome::Error(e) => Err(e), + } + } + /// How much weight was used by the XCM execution attempt. + pub fn weight_used(&self) -> Weight { + match self { + Outcome::Complete(w) => *w, + Outcome::Incomplete(w, _) => *w, + Outcome::Error(_) => Weight::zero(), + } + } +} + +pub trait PreparedMessage { + fn weight_of(&self) -> Weight; +} + +/// Type of XCM message executor. +pub trait ExecuteXcm { + type Prepared: PreparedMessage; + fn prepare(message: Xcm) -> result::Result>; + fn execute( + origin: impl Into, + pre: Self::Prepared, + hash: XcmHash, + weight_credit: Weight, + ) -> Outcome; + + /// Execute some XCM `message` with the message `hash` from `origin` using no more than `weight_limit` weight. + /// The weight limit is a basic hard-limit and the implementation may place further restrictions or requirements + /// on weight and other aspects. + fn execute_xcm( + origin: impl Into, + message: Xcm, + hash: XcmHash, + weight_limit: Weight, + ) -> Outcome { + let origin = origin.into(); + log::debug!( + target: "xcm::execute_xcm", + "origin: {:?}, message: {:?}, weight_limit: {:?}", + origin, + message, + weight_limit, + ); + Self::execute_xcm_in_credit(origin, message, hash, weight_limit, Weight::zero()) + } + + /// Execute some XCM `message` with the message `hash` from `origin` using no more than `weight_limit` weight. + /// + /// Some amount of `weight_credit` may be provided which, depending on the implementation, may allow + /// execution without associated payment. + fn execute_xcm_in_credit( + origin: impl Into, + message: Xcm, + hash: XcmHash, + weight_limit: Weight, + weight_credit: Weight, + ) -> Outcome { + let pre = match Self::prepare(message) { + Ok(x) => x, + Err(_) => return Outcome::Error(Error::WeightNotComputable), + }; + let xcm_weight = pre.weight_of(); + if xcm_weight.any_gt(weight_limit) { + return Outcome::Error(Error::WeightLimitReached(xcm_weight)) + } + Self::execute(origin, pre, hash, weight_credit) + } + + /// Deduct some `fees` to the sovereign account of the given `location` and place them as per + /// the convention for fees. + fn charge_fees(location: impl Into, fees: MultiAssets) -> Result; +} + +pub enum Weightless {} +impl PreparedMessage for Weightless { + fn weight_of(&self) -> Weight { + unreachable!() + } +} + +impl ExecuteXcm for () { + type Prepared = Weightless; + fn prepare(message: Xcm) -> result::Result> { + Err(message) + } + fn execute(_: impl Into, _: Self::Prepared, _: XcmHash, _: Weight) -> Outcome { + unreachable!() + } + fn charge_fees(_location: impl Into, _fees: MultiAssets) -> Result { + Err(Error::Unimplemented) + } +} + +/// Error result value when attempting to send an XCM message. +#[derive(Clone, Encode, Decode, Eq, PartialEq, Debug, scale_info::TypeInfo)] +pub enum SendError { + /// The message and destination combination was not recognized as being reachable. + /// + /// This is not considered fatal: if there are alternative transport routes available, then + /// they may be attempted. + NotApplicable, + /// Destination is routable, but there is some issue with the transport mechanism. This is + /// considered fatal. + /// A human-readable explanation of the specific issue is provided. + Transport(#[codec(skip)] &'static str), + /// Destination is known to be unroutable. This is considered fatal. + Unroutable, + /// The given message cannot be translated into a format that the destination can be expected + /// to interpret. + DestinationUnsupported, + /// Message could not be sent due to its size exceeding the maximum allowed by the transport + /// layer. + ExceedsMaxMessageSize, + /// A needed argument is `None` when it should be `Some`. + MissingArgument, + /// Fees needed to be paid in order to send the message and they were unavailable. + Fees, +} + +/// A hash type for identifying messages. +pub type XcmHash = [u8; 32]; + +/// Result value when attempting to send an XCM message. +pub type SendResult = result::Result<(T, MultiAssets), SendError>; + +pub trait Unwrappable { + type Inner; + fn none() -> Self; + fn some(i: Self::Inner) -> Self; + fn take(self) -> Option; +} + +impl Unwrappable for Option { + type Inner = T; + fn none() -> Self { + None + } + fn some(i: Self::Inner) -> Self { + Some(i) + } + fn take(self) -> Option { + self + } +} + +/// Utility for sending an XCM message to a given location. +/// +/// These can be amalgamated in tuples to form sophisticated routing systems. In tuple format, each +/// router might return `NotApplicable` to pass the execution to the next sender item. Note that +/// each `NotApplicable` might alter the destination and the XCM message for to the next router. +/// +/// # Example +/// ```rust +/// # use parity_scale_codec::Encode; +/// # use xcm::v3::{prelude::*, Weight}; +/// # use xcm::VersionedXcm; +/// # use std::convert::Infallible; +/// +/// /// A sender that only passes the message through and does nothing. +/// struct Sender1; +/// impl SendXcm for Sender1 { +/// type Ticket = Infallible; +/// fn validate(_: &mut Option, _: &mut Option>) -> SendResult { +/// Err(SendError::NotApplicable) +/// } +/// fn deliver(_: Infallible) -> Result { +/// unreachable!() +/// } +/// } +/// +/// /// A sender that accepts a message that has an X2 junction, otherwise stops the routing. +/// struct Sender2; +/// impl SendXcm for Sender2 { +/// type Ticket = (); +/// fn validate(destination: &mut Option, message: &mut Option>) -> SendResult<()> { +/// match destination.as_ref().ok_or(SendError::MissingArgument)? { +/// MultiLocation { parents: 0, interior: X2(j1, j2) } => Ok(((), MultiAssets::new())), +/// _ => Err(SendError::Unroutable), +/// } +/// } +/// fn deliver(_: ()) -> Result { +/// Ok([0; 32]) +/// } +/// } +/// +/// /// A sender that accepts a message from a parent, passing through otherwise. +/// struct Sender3; +/// impl SendXcm for Sender3 { +/// type Ticket = (); +/// fn validate(destination: &mut Option, message: &mut Option>) -> SendResult<()> { +/// match destination.as_ref().ok_or(SendError::MissingArgument)? { +/// MultiLocation { parents: 1, interior: Here } => Ok(((), MultiAssets::new())), +/// _ => Err(SendError::NotApplicable), +/// } +/// } +/// fn deliver(_: ()) -> Result { +/// Ok([0; 32]) +/// } +/// } +/// +/// // A call to send via XCM. We don't really care about this. +/// # fn main() { +/// let call: Vec = ().encode(); +/// let message = Xcm(vec![Instruction::Transact { +/// origin_kind: OriginKind::Superuser, +/// require_weight_at_most: Weight::zero(), +/// call: call.into(), +/// }]); +/// let message_hash = message.using_encoded(sp_io::hashing::blake2_256); +/// +/// // Sender2 will block this. +/// assert!(send_xcm::<(Sender1, Sender2, Sender3)>(Parent.into(), message.clone()).is_err()); +/// +/// // Sender3 will catch this. +/// assert!(send_xcm::<(Sender1, Sender3)>(Parent.into(), message.clone()).is_ok()); +/// # } +/// ``` +pub trait SendXcm { + /// Intermediate value which connects the two phaases of the send operation. + type Ticket; + + /// Check whether the given `_message` is deliverable to the given `_destination` and if so + /// determine the cost which will be paid by this chain to do so, returning a `Validated` token + /// which can be used to enact delivery. + /// + /// The `destination` and `message` must be `Some` (or else an error will be returned) and they + /// may only be consumed if the `Err` is not `NotApplicable`. + /// + /// If it is not a destination which can be reached with this type but possibly could by others, + /// then this *MUST* return `NotApplicable`. Any other error will cause the tuple + /// implementation to exit early without trying other type fields. + fn validate( + destination: &mut Option, + message: &mut Option>, + ) -> SendResult; + + /// Actually carry out the delivery operation for a previously validated message sending. + fn deliver(ticket: Self::Ticket) -> result::Result; +} + +#[impl_trait_for_tuples::impl_for_tuples(30)] +impl SendXcm for Tuple { + for_tuples! { type Ticket = (#( Option ),* ); } + + fn validate( + destination: &mut Option, + message: &mut Option>, + ) -> SendResult { + let mut maybe_cost: Option = None; + let one_ticket: Self::Ticket = (for_tuples! { #( + if maybe_cost.is_some() { + None + } else { + match Tuple::validate(destination, message) { + Err(SendError::NotApplicable) => None, + Err(e) => { return Err(e) }, + Ok((v, c)) => { + maybe_cost = Some(c); + Some(v) + }, + } + } + ),* }); + if let Some(cost) = maybe_cost { + Ok((one_ticket, cost)) + } else { + Err(SendError::NotApplicable) + } + } + + fn deliver(one_ticket: Self::Ticket) -> result::Result { + for_tuples!( #( + if let Some(validated) = one_ticket.Tuple { + return Tuple::deliver(validated); + } + )* ); + Err(SendError::Unroutable) + } +} + +/// Convenience function for using a `SendXcm` implementation. Just interprets the `dest` and wraps +/// both in `Some` before passing them as as mutable references into `T::send_xcm`. +pub fn validate_send(dest: MultiLocation, msg: Xcm<()>) -> SendResult { + T::validate(&mut Some(dest), &mut Some(msg)) +} + +/// Convenience function for using a `SendXcm` implementation. Just interprets the `dest` and wraps +/// both in `Some` before passing them as as mutable references into `T::send_xcm`. +/// +/// Returns either `Ok` with the price of the delivery, or `Err` with the reason why the message +/// could not be sent. +/// +/// Generally you'll want to validate and get the price first to ensure that the sender can pay it +/// before actually doing the delivery. +pub fn send_xcm( + dest: MultiLocation, + msg: Xcm<()>, +) -> result::Result<(XcmHash, MultiAssets), SendError> { + let (ticket, price) = T::validate(&mut Some(dest), &mut Some(msg))?; + let hash = T::deliver(ticket)?; + Ok((hash, price)) +} diff --git a/xcm/xcm-builder/Cargo.toml b/xcm/xcm-builder/Cargo.toml index a1e7b272933c..e29987bb95ae 100644 --- a/xcm/xcm-builder/Cargo.toml +++ b/xcm/xcm-builder/Cargo.toml @@ -6,27 +6,30 @@ edition.workspace = true version.workspace = true [dependencies] -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["derive"] } +impl-trait-for-tuples = "0.2.1" +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["derive"] } scale-info = { version = "2.1.2", default-features = false, features = ["derive"] } xcm = { path = "..", default-features = false } xcm-executor = { path = "../xcm-executor", default-features = false } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-arithmetic = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-arithmetic = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } log = { version = "0.4.17", default-features = false } # Polkadot dependencies polkadot-parachain = { path = "../../parachain", default-features = false } [dev-dependencies] -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +primitive-types = "0.12.1" +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } pallet-xcm = { path = "../pallet-xcm" } polkadot-runtime-parachains = { path = "../../runtime/parachains" } +assert_matches = "1.5.0" + [features] default = ["std"] runtime-benchmarks = [ @@ -44,6 +47,7 @@ std = [ "sp-io/std", "sp-runtime/std", "frame-support/std", + "frame-system/std", "polkadot-parachain/std", "pallet-transaction-payment/std", ] diff --git a/xcm/xcm-builder/src/asset_conversion.rs b/xcm/xcm-builder/src/asset_conversion.rs new file mode 100644 index 000000000000..cadbb8381cfa --- /dev/null +++ b/xcm/xcm-builder/src/asset_conversion.rs @@ -0,0 +1,350 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +//! Adapters to work with `frame_support::traits::tokens::fungibles` through XCM. + +use frame_support::traits::{Contains, Get}; +use sp_std::{borrow::Borrow, marker::PhantomData, prelude::*, result}; +use xcm::latest::prelude::*; +use xcm_executor::traits::{Convert, Error as MatchError, MatchesFungibles, MatchesNonFungibles}; + +/// Converter struct implementing `AssetIdConversion` converting a numeric asset ID (must be `TryFrom/TryInto`) into +/// a `GeneralIndex` junction, prefixed by some `MultiLocation` value. The `MultiLocation` value will typically be a +/// `PalletInstance` junction. +pub struct AsPrefixedGeneralIndex( + PhantomData<(Prefix, AssetId, ConvertAssetId)>, +); +impl, AssetId: Clone, ConvertAssetId: Convert> + Convert for AsPrefixedGeneralIndex +{ + fn convert_ref(id: impl Borrow) -> result::Result { + let prefix = Prefix::get(); + let id = id.borrow(); + if prefix.parent_count() != id.parent_count() || + prefix + .interior() + .iter() + .enumerate() + .any(|(index, junction)| id.interior().at(index) != Some(junction)) + { + return Err(()) + } + match id.interior().at(prefix.interior().len()) { + Some(Junction::GeneralIndex(id)) => ConvertAssetId::convert_ref(id), + _ => Err(()), + } + } + fn reverse_ref(what: impl Borrow) -> result::Result { + let mut location = Prefix::get(); + let id = ConvertAssetId::reverse_ref(what)?; + location.push_interior(Junction::GeneralIndex(id)).map_err(|_| ())?; + Ok(location) + } +} + +pub struct ConvertedConcreteId( + PhantomData<(AssetId, Balance, ConvertAssetId, ConvertOther)>, +); +impl< + AssetId: Clone, + Balance: Clone, + ConvertAssetId: Convert, + ConvertBalance: Convert, + > MatchesFungibles + for ConvertedConcreteId +{ + fn matches_fungibles(a: &MultiAsset) -> result::Result<(AssetId, Balance), MatchError> { + let (amount, id) = match (&a.fun, &a.id) { + (Fungible(ref amount), Concrete(ref id)) => (amount, id), + _ => return Err(MatchError::AssetNotHandled), + }; + let what = + ConvertAssetId::convert_ref(id).map_err(|_| MatchError::AssetIdConversionFailed)?; + let amount = ConvertBalance::convert_ref(amount) + .map_err(|_| MatchError::AmountToBalanceConversionFailed)?; + Ok((what, amount)) + } +} +impl< + ClassId: Clone, + InstanceId: Clone, + ConvertClassId: Convert, + ConvertInstanceId: Convert, + > MatchesNonFungibles + for ConvertedConcreteId +{ + fn matches_nonfungibles(a: &MultiAsset) -> result::Result<(ClassId, InstanceId), MatchError> { + let (instance, class) = match (&a.fun, &a.id) { + (NonFungible(ref instance), Concrete(ref class)) => (instance, class), + _ => return Err(MatchError::AssetNotHandled), + }; + let what = + ConvertClassId::convert_ref(class).map_err(|_| MatchError::AssetIdConversionFailed)?; + let instance = ConvertInstanceId::convert_ref(instance) + .map_err(|_| MatchError::InstanceConversionFailed)?; + Ok((what, instance)) + } +} + +pub struct ConvertedAbstractId( + PhantomData<(AssetId, Balance, ConvertAssetId, ConvertOther)>, +); +impl< + AssetId: Clone, + Balance: Clone, + ConvertAssetId: Convert<[u8; 32], AssetId>, + ConvertBalance: Convert, + > MatchesFungibles + for ConvertedAbstractId +{ + fn matches_fungibles(a: &MultiAsset) -> result::Result<(AssetId, Balance), MatchError> { + let (amount, id) = match (&a.fun, &a.id) { + (Fungible(ref amount), Abstract(ref id)) => (amount, id), + _ => return Err(MatchError::AssetNotHandled), + }; + let what = + ConvertAssetId::convert_ref(id).map_err(|_| MatchError::AssetIdConversionFailed)?; + let amount = ConvertBalance::convert_ref(amount) + .map_err(|_| MatchError::AmountToBalanceConversionFailed)?; + Ok((what, amount)) + } +} +impl< + ClassId: Clone, + InstanceId: Clone, + ConvertClassId: Convert<[u8; 32], ClassId>, + ConvertInstanceId: Convert, + > MatchesNonFungibles + for ConvertedAbstractId +{ + fn matches_nonfungibles(a: &MultiAsset) -> result::Result<(ClassId, InstanceId), MatchError> { + let (instance, class) = match (&a.fun, &a.id) { + (NonFungible(ref instance), Abstract(ref class)) => (instance, class), + _ => return Err(MatchError::AssetNotHandled), + }; + let what = + ConvertClassId::convert_ref(class).map_err(|_| MatchError::AssetIdConversionFailed)?; + let instance = ConvertInstanceId::convert_ref(instance) + .map_err(|_| MatchError::InstanceConversionFailed)?; + Ok((what, instance)) + } +} + +#[deprecated = "Use `ConvertedConcreteId` instead"] +pub type ConvertedConcreteAssetId = ConvertedConcreteId; +#[deprecated = "Use `ConvertedAbstractId` instead"] +pub type ConvertedAbstractAssetId = ConvertedAbstractId; + +pub struct MatchedConvertedConcreteId( + PhantomData<(AssetId, Balance, MatchAssetId, ConvertAssetId, ConvertOther)>, +); +impl< + AssetId: Clone, + Balance: Clone, + MatchAssetId: Contains, + ConvertAssetId: Convert, + ConvertBalance: Convert, + > MatchesFungibles + for MatchedConvertedConcreteId +{ + fn matches_fungibles(a: &MultiAsset) -> result::Result<(AssetId, Balance), MatchError> { + let (amount, id) = match (&a.fun, &a.id) { + (Fungible(ref amount), Concrete(ref id)) if MatchAssetId::contains(id) => (amount, id), + _ => return Err(MatchError::AssetNotHandled), + }; + let what = + ConvertAssetId::convert_ref(id).map_err(|_| MatchError::AssetIdConversionFailed)?; + let amount = ConvertBalance::convert_ref(amount) + .map_err(|_| MatchError::AmountToBalanceConversionFailed)?; + Ok((what, amount)) + } +} +impl< + ClassId: Clone, + InstanceId: Clone, + MatchClassId: Contains, + ConvertClassId: Convert, + ConvertInstanceId: Convert, + > MatchesNonFungibles + for MatchedConvertedConcreteId +{ + fn matches_nonfungibles(a: &MultiAsset) -> result::Result<(ClassId, InstanceId), MatchError> { + let (instance, class) = match (&a.fun, &a.id) { + (NonFungible(ref instance), Concrete(ref class)) if MatchClassId::contains(class) => + (instance, class), + _ => return Err(MatchError::AssetNotHandled), + }; + let what = + ConvertClassId::convert_ref(class).map_err(|_| MatchError::AssetIdConversionFailed)?; + let instance = ConvertInstanceId::convert_ref(instance) + .map_err(|_| MatchError::InstanceConversionFailed)?; + Ok((what, instance)) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + use xcm_executor::traits::JustTry; + + struct OnlyParentZero; + impl Contains for OnlyParentZero { + fn contains(a: &MultiLocation) -> bool { + match a { + MultiLocation { parents: 0, .. } => true, + _ => false, + } + } + } + + #[test] + fn matched_converted_concrete_id_for_fungibles_works() { + type AssetIdForTrustBackedAssets = u32; + type Balance = u128; + frame_support::parameter_types! { + pub TrustBackedAssetsPalletLocation: MultiLocation = PalletInstance(50).into(); + } + + // ConvertedConcreteId cfg + type Converter = MatchedConvertedConcreteId< + AssetIdForTrustBackedAssets, + Balance, + OnlyParentZero, + AsPrefixedGeneralIndex< + TrustBackedAssetsPalletLocation, + AssetIdForTrustBackedAssets, + JustTry, + >, + JustTry, + >; + assert_eq!( + TrustBackedAssetsPalletLocation::get(), + MultiLocation { parents: 0, interior: X1(PalletInstance(50)) } + ); + + // err - does not match + assert_eq!( + Converter::matches_fungibles(&MultiAsset { + id: Concrete(MultiLocation::new(1, X2(PalletInstance(50), GeneralIndex(1)))), + fun: Fungible(12345), + }), + Err(MatchError::AssetNotHandled) + ); + + // err - matches, but convert fails + assert_eq!( + Converter::matches_fungibles(&MultiAsset { + id: Concrete(MultiLocation::new( + 0, + X2(PalletInstance(50), GeneralKey { length: 1, data: [1; 32] }) + )), + fun: Fungible(12345), + }), + Err(MatchError::AssetIdConversionFailed) + ); + + // err - matches, but NonFungible + assert_eq!( + Converter::matches_fungibles(&MultiAsset { + id: Concrete(MultiLocation::new(0, X2(PalletInstance(50), GeneralIndex(1)))), + fun: NonFungible(Index(54321)), + }), + Err(MatchError::AssetNotHandled) + ); + + // ok + assert_eq!( + Converter::matches_fungibles(&MultiAsset { + id: Concrete(MultiLocation::new(0, X2(PalletInstance(50), GeneralIndex(1)))), + fun: Fungible(12345), + }), + Ok((1, 12345)) + ); + } + + #[test] + fn matched_converted_concrete_id_for_nonfungibles_works() { + type ClassId = u32; + type ClassInstanceId = u64; + frame_support::parameter_types! { + pub TrustBackedAssetsPalletLocation: MultiLocation = PalletInstance(50).into(); + } + + // ConvertedConcreteId cfg + struct ClassInstanceIdConverter; + impl Convert for ClassInstanceIdConverter { + fn convert_ref(value: impl Borrow) -> Result { + value.borrow().clone().try_into().map_err(|_| ()) + } + + fn reverse_ref(value: impl Borrow) -> Result { + Ok(AssetInstance::from(value.borrow().clone())) + } + } + + type Converter = MatchedConvertedConcreteId< + ClassId, + ClassInstanceId, + OnlyParentZero, + AsPrefixedGeneralIndex, + ClassInstanceIdConverter, + >; + assert_eq!( + TrustBackedAssetsPalletLocation::get(), + MultiLocation { parents: 0, interior: X1(PalletInstance(50)) } + ); + + // err - does not match + assert_eq!( + Converter::matches_nonfungibles(&MultiAsset { + id: Concrete(MultiLocation::new(1, X2(PalletInstance(50), GeneralIndex(1)))), + fun: NonFungible(Index(54321)), + }), + Err(MatchError::AssetNotHandled) + ); + + // err - matches, but convert fails + assert_eq!( + Converter::matches_nonfungibles(&MultiAsset { + id: Concrete(MultiLocation::new( + 0, + X2(PalletInstance(50), GeneralKey { length: 1, data: [1; 32] }) + )), + fun: NonFungible(Index(54321)), + }), + Err(MatchError::AssetIdConversionFailed) + ); + + // err - matches, but Fungible vs NonFungible + assert_eq!( + Converter::matches_nonfungibles(&MultiAsset { + id: Concrete(MultiLocation::new(0, X2(PalletInstance(50), GeneralIndex(1)))), + fun: Fungible(12345), + }), + Err(MatchError::AssetNotHandled) + ); + + // ok + assert_eq!( + Converter::matches_nonfungibles(&MultiAsset { + id: Concrete(MultiLocation::new(0, X2(PalletInstance(50), GeneralIndex(1)))), + fun: NonFungible(Index(54321)), + }), + Ok((1, 54321)) + ); + } +} diff --git a/xcm/xcm-builder/src/barriers.rs b/xcm/xcm-builder/src/barriers.rs index ce830554f3b5..02de36caeb6f 100644 --- a/xcm/xcm-builder/src/barriers.rs +++ b/xcm/xcm-builder/src/barriers.rs @@ -16,11 +16,21 @@ //! Various implementations for `ShouldExecute`. -use frame_support::{ensure, traits::Contains}; +use frame_support::{ + ensure, + traits::{Contains, Get}, +}; use polkadot_parachain::primitives::IsSystem; -use sp_std::{marker::PhantomData, result::Result}; -use xcm::latest::{ - Instruction::*, Junction, Junctions, MultiLocation, Weight, WeightLimit::*, Xcm, +use sp_std::{cell::Cell, marker::PhantomData, ops::ControlFlow, result::Result}; +use xcm::{ + latest::{ + Instruction::{self, *}, + InteriorMultiLocation, Junction, Junctions, + Junctions::X1, + MultiLocation, Weight, + WeightLimit::*, + }, + CreateMatcher, MatchXcm, }; use xcm_executor::traits::{OnResponse, ShouldExecute}; @@ -33,16 +43,16 @@ pub struct TakeWeightCredit; impl ShouldExecute for TakeWeightCredit { fn should_execute( _origin: &MultiLocation, - _message: &mut Xcm, + _instructions: &mut [Instruction], max_weight: Weight, weight_credit: &mut Weight, ) -> Result<(), ()> { log::trace!( target: "xcm::barriers", - "TakeWeightCredit origin: {:?}, message: {:?}, max_weight: {:?}, weight_credit: {:?}", - _origin, _message, max_weight, weight_credit, + "TakeWeightCredit origin: {:?}, instructions: {:?}, max_weight: {:?}, weight_credit: {:?}", + _origin, _instructions, max_weight, weight_credit, ); - *weight_credit = weight_credit.checked_sub(max_weight).ok_or(())?; + *weight_credit = weight_credit.checked_sub(&max_weight).ok_or(())?; Ok(()) } } @@ -56,63 +66,197 @@ pub struct AllowTopLevelPaidExecutionFrom(PhantomData); impl> ShouldExecute for AllowTopLevelPaidExecutionFrom { fn should_execute( origin: &MultiLocation, - message: &mut Xcm, + instructions: &mut [Instruction], max_weight: Weight, _weight_credit: &mut Weight, ) -> Result<(), ()> { log::trace!( target: "xcm::barriers", - "AllowTopLevelPaidExecutionFrom origin: {:?}, message: {:?}, max_weight: {:?}, weight_credit: {:?}", - origin, message, max_weight, _weight_credit, + "AllowTopLevelPaidExecutionFrom origin: {:?}, instructions: {:?}, max_weight: {:?}, weight_credit: {:?}", + origin, instructions, max_weight, _weight_credit, ); + ensure!(T::contains(origin), ()); - let mut iter = message.0.iter_mut(); - let i = iter.next().ok_or(())?; - match i { - ReceiveTeleportedAsset(..) | - WithdrawAsset(..) | - ReserveAssetDeposited(..) | - ClaimAsset { .. } => (), - _ => return Err(()), - } - let mut i = iter.next().ok_or(())?; - while let ClearOrigin = i { - i = iter.next().ok_or(())?; - } - match i { - BuyExecution { weight_limit: Limited(ref mut weight), .. } if *weight >= max_weight => { - *weight = max_weight; - Ok(()) - }, - BuyExecution { ref mut weight_limit, .. } if weight_limit == &Unlimited => { - *weight_limit = Limited(max_weight); - Ok(()) + // We will read up to 5 instructions. This allows up to 3 `ClearOrigin` instructions. We + // allow for more than one since anything beyond the first is a no-op and it's conceivable + // that composition of operations might result in more than one being appended. + let end = instructions.len().min(5); + instructions[..end] + .matcher() + .match_next_inst(|inst| match inst { + ReceiveTeleportedAsset(..) | + WithdrawAsset(..) | + ReserveAssetDeposited(..) | + ClaimAsset { .. } => Ok(()), + _ => Err(()), + })? + .skip_inst_while(|inst| matches!(inst, ClearOrigin))? + .match_next_inst(|inst| match inst { + BuyExecution { weight_limit: Limited(ref mut weight), .. } + if weight.all_gte(max_weight) => + { + *weight = max_weight; + Ok(()) + }, + BuyExecution { ref mut weight_limit, .. } if weight_limit == &Unlimited => { + *weight_limit = Limited(max_weight); + Ok(()) + }, + _ => Err(()), + })?; + Ok(()) + } +} + +/// A derivative barrier, which scans the first `MaxPrefixes` instructions for origin-alterers and +/// then evaluates `should_execute` of the `InnerBarrier` based on the remaining instructions and +/// the newly computed origin. +/// +/// This effectively allows for the possibility of distinguishing an origin which is acting as a +/// router for its derivative locations (or as a bridge for a remote location) and an origin which +/// is actually trying to send a message for itself. In the former case, the message will be +/// prefixed with origin-mutating instructions. +/// +/// Any barriers which should be interpreted based on the computed origin rather than the original +/// message origin should be subject to this. This is the case for most barriers since the +/// effective origin is generally more important than the routing origin. Any other barriers, and +/// especially those which should be interpreted only the routing origin should not be subject to +/// this. +/// +/// E.g. +/// ```nocompile +/// type MyBarrier = ( +/// TakeWeightCredit, +/// AllowTopLevelPaidExecutionFrom, +/// WithComputedOrigin<( +/// AllowTopLevelPaidExecutionFrom, +/// AllowUnpaidExecutionFrom, +/// AllowSubscriptionsFrom, +/// AllowKnownQueryResponses, +/// )>, +/// ); +/// ``` +/// +/// In the above example, `AllowUnpaidExecutionFrom` appears once underneath +/// `WithComputedOrigin`. This is in order to distinguish between messages which are notionally +/// from a derivative location of `ParentLocation` but that just happened to be sent via +/// `ParentLocaction` rather than messages that were sent by the parent. +/// +/// Similarly `AllowTopLevelPaidExecutionFrom` appears twice: once inside of `WithComputedOrigin` +/// where we provide the list of origins which are derivative origins, and then secondly outside +/// of `WithComputedOrigin` where we provide the list of locations which are direct origins. It's +/// reasonable for these lists to be merged into one and that used both inside and out. +/// +/// Finally, we see `AllowSubscriptionsFrom` and `AllowKnownQueryResponses` are both inside of +/// `WithComputedOrigin`. This means that if a message begins with origin-mutating instructions, +/// then it must be the finally computed origin which we accept subscriptions or expect a query +/// response from. For example, even if an origin appeared in the `AllowedSubscribers` list, we +/// would ignore this rule if it began with origin mutators and they changed the origin to something +/// which was not on the list. +pub struct WithComputedOrigin( + PhantomData<(InnerBarrier, LocalUniversal, MaxPrefixes)>, +); +impl< + InnerBarrier: ShouldExecute, + LocalUniversal: Get, + MaxPrefixes: Get, + > ShouldExecute for WithComputedOrigin +{ + fn should_execute( + origin: &MultiLocation, + instructions: &mut [Instruction], + max_weight: Weight, + weight_credit: &mut Weight, + ) -> Result<(), ()> { + log::trace!( + target: "xcm::barriers", + "WithComputedOrigin origin: {:?}, instructions: {:?}, max_weight: {:?}, weight_credit: {:?}", + origin, instructions, max_weight, weight_credit, + ); + let mut actual_origin = *origin; + let skipped = Cell::new(0usize); + // NOTE: We do not check the validity of `UniversalOrigin` here, meaning that a malicious + // origin could place a `UniversalOrigin` in order to spoof some location which gets free + // execution. This technical could get it past the barrier condition, but the execution + // would instantly fail since the first instruction would cause an error with the + // invalid UniversalOrigin. + instructions.matcher().match_next_inst_while( + |_| skipped.get() < MaxPrefixes::get() as usize, + |inst| { + match inst { + UniversalOrigin(new_global) => { + // Note the origin is *relative to local consensus*! So we need to escape + // local consensus with the `parents` before diving in into the + // `universal_location`. + actual_origin = X1(*new_global).relative_to(&LocalUniversal::get()); + }, + DescendOrigin(j) => { + let Ok(_) = actual_origin.append_with(*j) else { return Err(()) }; + }, + _ => return Ok(ControlFlow::Break(())), + }; + skipped.set(skipped.get() + 1); + Ok(ControlFlow::Continue(())) }, - _ => Err(()), - } + )?; + InnerBarrier::should_execute( + &actual_origin, + &mut instructions[skipped.get()..], + max_weight, + weight_credit, + ) } } -/// Allows execution from any origin that is contained in `T` (i.e. `T::Contains(origin)`) without any payments. -/// Use only for executions from trusted origin groups. +/// Allows execution from any origin that is contained in `T` (i.e. `T::Contains(origin)`). +/// +/// Use only for executions from completely trusted origins, from which no unpermissioned messages +/// can be sent. pub struct AllowUnpaidExecutionFrom(PhantomData); impl> ShouldExecute for AllowUnpaidExecutionFrom { fn should_execute( origin: &MultiLocation, - _message: &mut Xcm, + instructions: &mut [Instruction], _max_weight: Weight, _weight_credit: &mut Weight, ) -> Result<(), ()> { log::trace!( target: "xcm::barriers", - "AllowUnpaidExecutionFrom origin: {:?}, message: {:?}, max_weight: {:?}, weight_credit: {:?}", - origin, _message, _max_weight, _weight_credit, + "AllowUnpaidExecutionFrom origin: {:?}, instructions: {:?}, max_weight: {:?}, weight_credit: {:?}", + origin, instructions, _max_weight, _weight_credit, ); ensure!(T::contains(origin), ()); Ok(()) } } +/// Allows execution from any origin that is contained in `T` (i.e. `T::Contains(origin)`) if the +/// message begins with the instruction `UnpaidExecution`. +/// +/// Use only for executions from trusted origin groups. +pub struct AllowExplicitUnpaidExecutionFrom(PhantomData); +impl> ShouldExecute for AllowExplicitUnpaidExecutionFrom { + fn should_execute( + origin: &MultiLocation, + instructions: &mut [Instruction], + max_weight: Weight, + _weight_credit: &mut Weight, + ) -> Result<(), ()> { + log::trace!( + target: "xcm::barriers", + "AllowExplicitUnpaidExecutionFrom origin: {:?}, instructions: {:?}, max_weight: {:?}, weight_credit: {:?}", + origin, instructions, max_weight, _weight_credit, + ); + ensure!(T::contains(origin), ()); + instructions.matcher().match_next_inst(|inst| match inst { + UnpaidExecution { weight_limit: Limited(m), .. } if m.all_gte(max_weight) => Ok(()), + UnpaidExecution { weight_limit: Unlimited, .. } => Ok(()), + _ => Err(()), + })?; + Ok(()) + } +} + /// Allows a message only if it is from a system-level child parachain. pub struct IsChildSystemParachain(PhantomData); impl> Contains for IsChildSystemParachain { @@ -130,43 +274,51 @@ pub struct AllowKnownQueryResponses(PhantomData ShouldExecute for AllowKnownQueryResponses { fn should_execute( origin: &MultiLocation, - message: &mut Xcm, + instructions: &mut [Instruction], _max_weight: Weight, _weight_credit: &mut Weight, ) -> Result<(), ()> { log::trace!( target: "xcm::barriers", - "AllowKnownQueryResponses origin: {:?}, message: {:?}, max_weight: {:?}, weight_credit: {:?}", - origin, message, _max_weight, _weight_credit, + "AllowKnownQueryResponses origin: {:?}, instructions: {:?}, max_weight: {:?}, weight_credit: {:?}", + origin, instructions, _max_weight, _weight_credit, ); - match message.0.first() { - Some(QueryResponse { query_id, .. }) - if ResponseHandler::expecting_response(origin, *query_id) => - Ok(()), - _ => Err(()), - } + instructions + .matcher() + .assert_remaining_insts(1)? + .match_next_inst(|inst| match inst { + QueryResponse { query_id, querier, .. } + if ResponseHandler::expecting_response(origin, *query_id, querier.as_ref()) => + Ok(()), + _ => Err(()), + })?; + Ok(()) } } -/// Allows execution from `origin` if it is just a straight `SubscribeVerison` or +/// Allows execution from `origin` if it is just a straight `SubscribeVersion` or /// `UnsubscribeVersion` instruction. pub struct AllowSubscriptionsFrom(PhantomData); impl> ShouldExecute for AllowSubscriptionsFrom { fn should_execute( origin: &MultiLocation, - message: &mut Xcm, + instructions: &mut [Instruction], _max_weight: Weight, _weight_credit: &mut Weight, ) -> Result<(), ()> { log::trace!( target: "xcm::barriers", - "AllowSubscriptionsFrom origin: {:?}, message: {:?}, max_weight: {:?}, weight_credit: {:?}", - origin, message, _max_weight, _weight_credit, + "AllowSubscriptionsFrom origin: {:?}, instructions: {:?}, max_weight: {:?}, weight_credit: {:?}", + origin, instructions, _max_weight, _weight_credit, ); ensure!(T::contains(origin), ()); - match (message.0.len(), message.0.first()) { - (1, Some(SubscribeVersion { .. })) | (1, Some(UnsubscribeVersion)) => Ok(()), - _ => Err(()), - } + instructions + .matcher() + .assert_remaining_insts(1)? + .match_next_inst(|inst| match inst { + SubscribeVersion { .. } | UnsubscribeVersion => Ok(()), + _ => Err(()), + })?; + Ok(()) } } diff --git a/xcm/xcm-builder/src/currency_adapter.rs b/xcm/xcm-builder/src/currency_adapter.rs index f231bf1094b4..bb7ac7a648da 100644 --- a/xcm/xcm-builder/src/currency_adapter.rs +++ b/xcm/xcm-builder/src/currency_adapter.rs @@ -16,10 +16,11 @@ //! Adapters to work with `frame_support::traits::Currency` through XCM. +use super::MintLocation; use frame_support::traits::{ExistenceRequirement::AllowDeath, Get, WithdrawReasons}; use sp_runtime::traits::CheckedSub; use sp_std::{marker::PhantomData, result}; -use xcm::latest::{Error as XcmError, MultiAsset, MultiLocation, Result}; +use xcm::latest::{Error as XcmError, MultiAsset, MultiLocation, Result, XcmContext}; use xcm_executor::{ traits::{Convert, MatchesFungible, TransactAsset}, Assets, @@ -27,8 +28,8 @@ use xcm_executor::{ /// Asset transaction errors. enum Error { - /// Asset not found. - AssetNotFound, + /// The given asset is not handled. (According to [`XcmError::AssetNotFound`]) + AssetNotHandled, /// `MultiLocation` to `AccountId` conversion failed. AccountIdConversionFailed, } @@ -37,7 +38,7 @@ impl From for XcmError { fn from(e: Error) -> Self { use XcmError::FailedToTransactAsset; match e { - Error::AssetNotFound => XcmError::AssetNotFound, + Error::AssetNotHandled => XcmError::AssetNotFound, Error::AccountIdConversionFailed => FailedToTransactAsset("AccountIdConversionFailed"), } } @@ -67,10 +68,13 @@ impl From for XcmError { /// /// messages from the parent (relay chain). /// pub type LocationConverter = (ParentIsPreset); /// +/// /// Just a dummy implementation of `Currency`. Normally this would be `Balances`. +/// pub type CurrencyImpl = (); +/// /// /// Final currency adapter. This can be used in `xcm::Config` to specify how asset related transactions happen. /// pub type AssetTransactor = CurrencyAdapter< -/// // Use this balance type: -/// u128, +/// // Use this `Currency` impl instance: +/// CurrencyImpl, /// // The matcher: use the currency when the asset is a concrete asset in our relay chain. /// IsConcrete, /// // The local converter: default account of the parent relay chain. @@ -86,80 +90,125 @@ pub struct CurrencyAdapter, Matcher: MatchesFungible, AccountIdConverter: Convert, + AccountId: Clone, // can't get away without it since Currency is generic over it. + CheckedAccount: Get>, + > CurrencyAdapter +{ + fn can_accrue_checked(_checked_account: AccountId, _amount: Currency::Balance) -> Result { + Ok(()) + } + fn can_reduce_checked(checked_account: AccountId, amount: Currency::Balance) -> Result { + let new_balance = Currency::free_balance(&checked_account) + .checked_sub(&amount) + .ok_or(XcmError::NotWithdrawable)?; + Currency::ensure_can_withdraw( + &checked_account, + amount, + WithdrawReasons::TRANSFER, + new_balance, + ) + .map_err(|_| XcmError::NotWithdrawable) + } + fn accrue_checked(checked_account: AccountId, amount: Currency::Balance) { + Currency::deposit_creating(&checked_account, amount); + Currency::deactivate(amount); + } + fn reduce_checked(checked_account: AccountId, amount: Currency::Balance) { + let ok = + Currency::withdraw(&checked_account, amount, WithdrawReasons::TRANSFER, AllowDeath) + .is_ok(); + if ok { + Currency::reactivate(amount); + } else { + frame_support::defensive!( + "`can_check_in` must have returned `true` immediately prior; qed" + ); + } + } +} + +impl< Currency: frame_support::traits::Currency, + Matcher: MatchesFungible, + AccountIdConverter: Convert, AccountId: Clone, // can't get away without it since Currency is generic over it. - CheckedAccount: Get>, + CheckedAccount: Get>, > TransactAsset for CurrencyAdapter { - fn can_check_in(_origin: &MultiLocation, what: &MultiAsset) -> Result { + fn can_check_in(_origin: &MultiLocation, what: &MultiAsset, _context: &XcmContext) -> Result { log::trace!(target: "xcm::currency_adapter", "can_check_in origin: {:?}, what: {:?}", _origin, what); // Check we handle this asset. let amount: Currency::Balance = - Matcher::matches_fungible(what).ok_or(Error::AssetNotFound)?; - if let Some(checked_account) = CheckedAccount::get() { - let new_balance = Currency::free_balance(&checked_account) - .checked_sub(&amount) - .ok_or(XcmError::NotWithdrawable)?; - Currency::ensure_can_withdraw( - &checked_account, - amount, - WithdrawReasons::TRANSFER, - new_balance, - ) - .map_err(|_| XcmError::NotWithdrawable)?; + Matcher::matches_fungible(what).ok_or(Error::AssetNotHandled)?; + match CheckedAccount::get() { + Some((checked_account, MintLocation::Local)) => + Self::can_reduce_checked(checked_account, amount), + Some((checked_account, MintLocation::NonLocal)) => + Self::can_accrue_checked(checked_account, amount), + None => Ok(()), } - Ok(()) } - fn check_in(_origin: &MultiLocation, what: &MultiAsset) { + fn check_in(_origin: &MultiLocation, what: &MultiAsset, _context: &XcmContext) { log::trace!(target: "xcm::currency_adapter", "check_in origin: {:?}, what: {:?}", _origin, what); if let Some(amount) = Matcher::matches_fungible(what) { - if let Some(checked_account) = CheckedAccount::get() { - let ok = Currency::withdraw( - &checked_account, - amount, - WithdrawReasons::TRANSFER, - AllowDeath, - ) - .is_ok(); - if ok { - Currency::reactivate(amount); - } - debug_assert!( - ok, - "`can_check_in` must have returned `true` immediately prior; qed" - ); + match CheckedAccount::get() { + Some((checked_account, MintLocation::Local)) => + Self::reduce_checked(checked_account, amount), + Some((checked_account, MintLocation::NonLocal)) => + Self::accrue_checked(checked_account, amount), + None => (), } } } - fn check_out(_dest: &MultiLocation, what: &MultiAsset) { + fn can_check_out(_dest: &MultiLocation, what: &MultiAsset, _context: &XcmContext) -> Result { + log::trace!(target: "xcm::currency_adapter", "check_out dest: {:?}, what: {:?}", _dest, what); + let amount = Matcher::matches_fungible(what).ok_or(Error::AssetNotHandled)?; + match CheckedAccount::get() { + Some((checked_account, MintLocation::Local)) => + Self::can_accrue_checked(checked_account, amount), + Some((checked_account, MintLocation::NonLocal)) => + Self::can_reduce_checked(checked_account, amount), + None => Ok(()), + } + } + + fn check_out(_dest: &MultiLocation, what: &MultiAsset, _context: &XcmContext) { log::trace!(target: "xcm::currency_adapter", "check_out dest: {:?}, what: {:?}", _dest, what); if let Some(amount) = Matcher::matches_fungible(what) { - if let Some(checked_account) = CheckedAccount::get() { - Currency::deposit_creating(&checked_account, amount); - Currency::deactivate(amount); + match CheckedAccount::get() { + Some((checked_account, MintLocation::Local)) => + Self::accrue_checked(checked_account, amount), + Some((checked_account, MintLocation::NonLocal)) => + Self::reduce_checked(checked_account, amount), + None => (), } } } - fn deposit_asset(what: &MultiAsset, who: &MultiLocation) -> Result { + fn deposit_asset(what: &MultiAsset, who: &MultiLocation, _context: &XcmContext) -> Result { log::trace!(target: "xcm::currency_adapter", "deposit_asset what: {:?}, who: {:?}", what, who); // Check we handle this asset. - let amount = Matcher::matches_fungible(&what).ok_or(Error::AssetNotFound)?; + let amount = Matcher::matches_fungible(&what).ok_or(Error::AssetNotHandled)?; let who = AccountIdConverter::convert_ref(who).map_err(|()| Error::AccountIdConversionFailed)?; let _imbalance = Currency::deposit_creating(&who, amount); Ok(()) } - fn withdraw_asset(what: &MultiAsset, who: &MultiLocation) -> result::Result { + fn withdraw_asset( + what: &MultiAsset, + who: &MultiLocation, + _maybe_context: Option<&XcmContext>, + ) -> result::Result { log::trace!(target: "xcm::currency_adapter", "withdraw_asset what: {:?}, who: {:?}", what, who); // Check we handle this asset. - let amount = Matcher::matches_fungible(what).ok_or(Error::AssetNotFound)?; + let amount = Matcher::matches_fungible(what).ok_or(Error::AssetNotHandled)?; let who = AccountIdConverter::convert_ref(who).map_err(|()| Error::AccountIdConversionFailed)?; Currency::withdraw(&who, amount, WithdrawReasons::TRANSFER, AllowDeath) @@ -171,9 +220,10 @@ impl< asset: &MultiAsset, from: &MultiLocation, to: &MultiLocation, + _context: &XcmContext, ) -> result::Result { log::trace!(target: "xcm::currency_adapter", "internal_transfer_asset asset: {:?}, from: {:?}, to: {:?}", asset, from, to); - let amount = Matcher::matches_fungible(asset).ok_or(Error::AssetNotFound)?; + let amount = Matcher::matches_fungible(asset).ok_or(Error::AssetNotHandled)?; let from = AccountIdConverter::convert_ref(from).map_err(|()| Error::AccountIdConversionFailed)?; let to = diff --git a/xcm/xcm-builder/src/filter_asset_location.rs b/xcm/xcm-builder/src/filter_asset_location.rs index a1e1763d0e40..1701988d624b 100644 --- a/xcm/xcm-builder/src/filter_asset_location.rs +++ b/xcm/xcm-builder/src/filter_asset_location.rs @@ -14,28 +14,29 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Various implementations of `FilterAssetLocation`. +//! Various implementations of `ContainsPair`. -use frame_support::traits::Get; +use frame_support::traits::{ContainsPair, Get}; use sp_std::marker::PhantomData; use xcm::latest::{AssetId::Concrete, MultiAsset, MultiAssetFilter, MultiLocation}; -use xcm_executor::traits::FilterAssetLocation; /// Accepts an asset iff it is a native asset. pub struct NativeAsset; -impl FilterAssetLocation for NativeAsset { - fn filter_asset_location(asset: &MultiAsset, origin: &MultiLocation) -> bool { - log::trace!(target: "xcm::filter_asset_location", "NativeAsset asset: {:?}, origin: {:?}", asset, origin); +impl ContainsPair for NativeAsset { + fn contains(asset: &MultiAsset, origin: &MultiLocation) -> bool { + log::trace!(target: "xcm::contains", "NativeAsset asset: {:?}, origin: {:?}", asset, origin); matches!(asset.id, Concrete(ref id) if id == origin) } } /// Accepts an asset if it is contained in the given `T`'s `Get` implementation. pub struct Case(PhantomData); -impl> FilterAssetLocation for Case { - fn filter_asset_location(asset: &MultiAsset, origin: &MultiLocation) -> bool { - log::trace!(target: "xcm::filter_asset_location", "Case asset: {:?}, origin: {:?}", asset, origin); +impl> ContainsPair + for Case +{ + fn contains(asset: &MultiAsset, origin: &MultiLocation) -> bool { + log::trace!(target: "xcm::contains", "Case asset: {:?}, origin: {:?}", asset, origin); let (a, o) = T::get(); - a.contains(asset) && &o == origin + a.matches(asset) && &o == origin } } diff --git a/xcm/xcm-builder/src/fungibles_adapter.rs b/xcm/xcm-builder/src/fungibles_adapter.rs index d06f92d97db9..c20fc9926712 100644 --- a/xcm/xcm-builder/src/fungibles_adapter.rs +++ b/xcm/xcm-builder/src/fungibles_adapter.rs @@ -17,97 +17,11 @@ //! Adapters to work with `frame_support::traits::tokens::fungibles` through XCM. use frame_support::traits::{tokens::fungibles, Contains, Get}; -use sp_std::{borrow::Borrow, marker::PhantomData, prelude::*, result}; -use xcm::latest::{ - AssetId::{Abstract, Concrete}, - Error as XcmError, - Fungibility::Fungible, - Junction, MultiAsset, MultiLocation, Result, -}; +use sp_std::{marker::PhantomData, prelude::*, result}; +use xcm::latest::prelude::*; use xcm_executor::traits::{Convert, Error as MatchError, MatchesFungibles, TransactAsset}; -/// Converter struct implementing `AssetIdConversion` converting a numeric asset ID (must be `TryFrom/TryInto`) into -/// a `GeneralIndex` junction, prefixed by some `MultiLocation` value. The `MultiLocation` value will typically be a -/// `PalletInstance` junction. -pub struct AsPrefixedGeneralIndex( - PhantomData<(Prefix, AssetId, ConvertAssetId)>, -); -impl, AssetId: Clone, ConvertAssetId: Convert> - Convert for AsPrefixedGeneralIndex -{ - fn convert_ref(id: impl Borrow) -> result::Result { - let prefix = Prefix::get(); - let id = id.borrow(); - if prefix.parent_count() != id.parent_count() || - prefix - .interior() - .iter() - .enumerate() - .any(|(index, junction)| id.interior().at(index) != Some(junction)) - { - return Err(()) - } - match id.interior().at(prefix.interior().len()) { - Some(Junction::GeneralIndex(id)) => ConvertAssetId::convert_ref(id), - _ => Err(()), - } - } - fn reverse_ref(what: impl Borrow) -> result::Result { - let mut location = Prefix::get(); - let id = ConvertAssetId::reverse_ref(what)?; - location.push_interior(Junction::GeneralIndex(id)).map_err(|_| ())?; - Ok(location) - } -} - -pub struct ConvertedConcreteAssetId( - PhantomData<(AssetId, Balance, ConvertAssetId, ConvertBalance)>, -); -impl< - AssetId: Clone, - Balance: Clone, - ConvertAssetId: Convert, - ConvertBalance: Convert, - > MatchesFungibles - for ConvertedConcreteAssetId -{ - fn matches_fungibles(a: &MultiAsset) -> result::Result<(AssetId, Balance), MatchError> { - let (amount, id) = match (&a.fun, &a.id) { - (Fungible(ref amount), Concrete(ref id)) => (amount, id), - _ => return Err(MatchError::AssetNotFound), - }; - let what = - ConvertAssetId::convert_ref(id).map_err(|_| MatchError::AssetIdConversionFailed)?; - let amount = ConvertBalance::convert_ref(amount) - .map_err(|_| MatchError::AmountToBalanceConversionFailed)?; - Ok((what, amount)) - } -} - -pub struct ConvertedAbstractAssetId( - PhantomData<(AssetId, Balance, ConvertAssetId, ConvertBalance)>, -); -impl< - AssetId: Clone, - Balance: Clone, - ConvertAssetId: Convert, AssetId>, - ConvertBalance: Convert, - > MatchesFungibles - for ConvertedAbstractAssetId -{ - fn matches_fungibles(a: &MultiAsset) -> result::Result<(AssetId, Balance), MatchError> { - let (amount, id) = match (&a.fun, &a.id) { - (Fungible(ref amount), Abstract(ref id)) => (amount, id), - _ => return Err(MatchError::AssetNotFound), - }; - let what = - ConvertAssetId::convert_ref(id).map_err(|_| MatchError::AssetIdConversionFailed)?; - let amount = ConvertBalance::convert_ref(amount) - .map_err(|_| MatchError::AmountToBalanceConversionFailed)?; - Ok((what, amount)) - } -} - +/// `TransactAsset` implementation to convert a `fungibles` implementation to become usable in XCM. pub struct FungiblesTransferAdapter( PhantomData<(Assets, Matcher, AccountIdConverter, AccountId)>, ); @@ -122,6 +36,7 @@ impl< what: &MultiAsset, from: &MultiLocation, to: &MultiLocation, + _context: &XcmContext, ) -> result::Result { log::trace!( target: "xcm::fungibles_adapter", @@ -140,6 +55,83 @@ impl< } } +/// The location which is allowed to mint a particular asset. +#[derive(Copy, Clone, Eq, PartialEq)] +pub enum MintLocation { + /// This chain is allowed to mint the asset. When we track teleports of the asset we ensure that + /// no more of the asset returns back to the chain than has been sent out. + Local, + /// This chain is not allowed to mint the asset. When we track teleports of the asset we ensure + /// that no more of the asset is sent out from the chain than has been previously received. + NonLocal, +} + +/// Simple trait to indicate whether an asset is subject to having its teleportation into and out of +/// this chain recorded and if so in what `MintLocation`. +/// +/// The overall purpose of asset-checking is to ensure either no more assets are teleported into a +/// chain than the outstanding balance of assets which were previously teleported out (as in the +/// case of locally-minted assets); or that no more assets are teleported out of a chain than the +/// outstanding balance of assets which have previously been teleported in (as in the case of chains +/// where the `asset` is not minted locally). +pub trait AssetChecking { + /// Return the teleportation asset-checking policy for the given `asset`. `None` implies no + /// checking. Otherwise the policy detailed by the inner `MintLocation` should be respected by + /// teleportation. + fn asset_checking(asset: &AssetId) -> Option; +} + +/// Implementation of `AssetChecking` which subjects no assets to having their teleportations +/// recorded. +pub struct NoChecking; +impl AssetChecking for NoChecking { + fn asset_checking(_: &AssetId) -> Option { + None + } +} + +/// Implementation of `AssetChecking` which subjects a given set of assets `T` to having their +/// teleportations recorded with a `MintLocation::Local`. +pub struct LocalMint(sp_std::marker::PhantomData); +impl> AssetChecking for LocalMint { + fn asset_checking(asset: &AssetId) -> Option { + match T::contains(asset) { + true => Some(MintLocation::Local), + false => None, + } + } +} + +/// Implementation of `AssetChecking` which subjects a given set of assets `T` to having their +/// teleportations recorded with a `MintLocation::NonLocal`. +pub struct NonLocalMint(sp_std::marker::PhantomData); +impl> AssetChecking for NonLocalMint { + fn asset_checking(asset: &AssetId) -> Option { + match T::contains(asset) { + true => Some(MintLocation::NonLocal), + false => None, + } + } +} + +/// Implementation of `AssetChecking` which subjects a given set of assets `L` to having their +/// teleportations recorded with a `MintLocation::Local` and a second set of assets `R` to having +/// their teleportations recorded with a `MintLocation::NonLocal`. +pub struct DualMint(sp_std::marker::PhantomData<(L, R)>); +impl, R: Contains> AssetChecking + for DualMint +{ + fn asset_checking(asset: &AssetId) -> Option { + if L::contains(asset) { + Some(MintLocation::Local) + } else if R::contains(asset) { + Some(MintLocation::NonLocal) + } else { + None + } + } +} + pub struct FungiblesMutateAdapter< Assets, Matcher, @@ -148,12 +140,48 @@ pub struct FungiblesMutateAdapter< CheckAsset, CheckingAccount, >(PhantomData<(Assets, Matcher, AccountIdConverter, AccountId, CheckAsset, CheckingAccount)>); + impl< Assets: fungibles::Mutate, Matcher: MatchesFungibles, AccountIdConverter: Convert, AccountId: Clone, // can't get away without it since Currency is generic over it. - CheckAsset: Contains, + CheckAsset: AssetChecking, + CheckingAccount: Get, + > + FungiblesMutateAdapter +{ + fn can_accrue_checked(asset_id: Assets::AssetId, amount: Assets::Balance) -> XcmResult { + let checking_account = CheckingAccount::get(); + Assets::can_deposit(asset_id, &checking_account, amount, true) + .into_result() + .map_err(|_| XcmError::NotDepositable) + } + fn can_reduce_checked(asset_id: Assets::AssetId, amount: Assets::Balance) -> XcmResult { + let checking_account = CheckingAccount::get(); + Assets::can_withdraw(asset_id, &checking_account, amount) + .into_result() + .map_err(|_| XcmError::NotWithdrawable) + .map(|_| ()) + } + fn accrue_checked(asset_id: Assets::AssetId, amount: Assets::Balance) { + let checking_account = CheckingAccount::get(); + let ok = Assets::mint_into(asset_id, &checking_account, amount).is_ok(); + debug_assert!(ok, "`can_accrue_checked` must have returned `true` immediately prior; qed"); + } + fn reduce_checked(asset_id: Assets::AssetId, amount: Assets::Balance) { + let checking_account = CheckingAccount::get(); + let ok = Assets::burn_from(asset_id, &checking_account, amount).is_ok(); + debug_assert!(ok, "`can_reduce_checked` must have returned `true` immediately prior; qed"); + } +} + +impl< + Assets: fungibles::Mutate, + Matcher: MatchesFungibles, + AccountIdConverter: Convert, + AccountId: Clone, // can't get away without it since Currency is generic over it. + CheckAsset: AssetChecking, CheckingAccount: Get, > TransactAsset for FungiblesMutateAdapter< @@ -165,7 +193,11 @@ impl< CheckingAccount, > { - fn can_check_in(_origin: &MultiLocation, what: &MultiAsset) -> Result { + fn can_check_in( + _origin: &MultiLocation, + what: &MultiAsset, + _context: &XcmContext, + ) -> XcmResult { log::trace!( target: "xcm::fungibles_adapter", "can_check_in origin: {:?}, what: {:?}", @@ -173,50 +205,71 @@ impl< ); // Check we handle this asset. let (asset_id, amount) = Matcher::matches_fungibles(what)?; - if CheckAsset::contains(&asset_id) { - // This is an asset whose teleports we track. - let checking_account = CheckingAccount::get(); - Assets::can_withdraw(asset_id, &checking_account, amount) - .into_result() - .map_err(|_| XcmError::NotWithdrawable)?; + match CheckAsset::asset_checking(&asset_id) { + // We track this asset's teleports to ensure no more come in than have gone out. + Some(MintLocation::Local) => Self::can_reduce_checked(asset_id, amount), + // We track this asset's teleports to ensure no more go out than have come in. + Some(MintLocation::NonLocal) => Self::can_accrue_checked(asset_id, amount), + _ => Ok(()), } - Ok(()) } - fn check_in(_origin: &MultiLocation, what: &MultiAsset) { + fn check_in(_origin: &MultiLocation, what: &MultiAsset, _context: &XcmContext) { log::trace!( target: "xcm::fungibles_adapter", "check_in origin: {:?}, what: {:?}", _origin, what ); if let Ok((asset_id, amount)) = Matcher::matches_fungibles(what) { - if CheckAsset::contains(&asset_id) { - let checking_account = CheckingAccount::get(); - let ok = Assets::burn_from(asset_id, &checking_account, amount).is_ok(); - debug_assert!( - ok, - "`can_check_in` must have returned `true` immediately prior; qed" - ); + match CheckAsset::asset_checking(&asset_id) { + // We track this asset's teleports to ensure no more come in than have gone out. + Some(MintLocation::Local) => Self::reduce_checked(asset_id, amount), + // We track this asset's teleports to ensure no more go out than have come in. + Some(MintLocation::NonLocal) => Self::accrue_checked(asset_id, amount), + _ => (), } } } - fn check_out(_dest: &MultiLocation, what: &MultiAsset) { + fn can_check_out( + _origin: &MultiLocation, + what: &MultiAsset, + _context: &XcmContext, + ) -> XcmResult { + log::trace!( + target: "xcm::fungibles_adapter", + "can_check_in origin: {:?}, what: {:?}", + _origin, what + ); + // Check we handle this asset. + let (asset_id, amount) = Matcher::matches_fungibles(what)?; + match CheckAsset::asset_checking(&asset_id) { + // We track this asset's teleports to ensure no more come in than have gone out. + Some(MintLocation::Local) => Self::can_accrue_checked(asset_id, amount), + // We track this asset's teleports to ensure no more go out than have come in. + Some(MintLocation::NonLocal) => Self::can_reduce_checked(asset_id, amount), + _ => Ok(()), + } + } + + fn check_out(_dest: &MultiLocation, what: &MultiAsset, _context: &XcmContext) { log::trace!( target: "xcm::fungibles_adapter", "check_out dest: {:?}, what: {:?}", _dest, what ); if let Ok((asset_id, amount)) = Matcher::matches_fungibles(what) { - if CheckAsset::contains(&asset_id) { - let checking_account = CheckingAccount::get(); - let ok = Assets::mint_into(asset_id, &checking_account, amount).is_ok(); - debug_assert!(ok, "`mint_into` cannot generally fail; qed"); + match CheckAsset::asset_checking(&asset_id) { + // We track this asset's teleports to ensure no more come in than have gone out. + Some(MintLocation::Local) => Self::accrue_checked(asset_id, amount), + // We track this asset's teleports to ensure no more go out than have come in. + Some(MintLocation::NonLocal) => Self::reduce_checked(asset_id, amount), + _ => (), } } } - fn deposit_asset(what: &MultiAsset, who: &MultiLocation) -> Result { + fn deposit_asset(what: &MultiAsset, who: &MultiLocation, _context: &XcmContext) -> XcmResult { log::trace!( target: "xcm::fungibles_adapter", "deposit_asset what: {:?}, who: {:?}", @@ -233,6 +286,7 @@ impl< fn withdraw_asset( what: &MultiAsset, who: &MultiLocation, + _maybe_context: Option<&XcmContext>, ) -> result::Result { log::trace!( target: "xcm::fungibles_adapter", @@ -262,12 +316,23 @@ impl< Matcher: MatchesFungibles, AccountIdConverter: Convert, AccountId: Clone, // can't get away without it since Currency is generic over it. - CheckAsset: Contains, + CheckAsset: AssetChecking, CheckingAccount: Get, > TransactAsset for FungiblesAdapter { - fn can_check_in(origin: &MultiLocation, what: &MultiAsset) -> Result { + fn can_check_in(origin: &MultiLocation, what: &MultiAsset, context: &XcmContext) -> XcmResult { + FungiblesMutateAdapter::< + Assets, + Matcher, + AccountIdConverter, + AccountId, + CheckAsset, + CheckingAccount, + >::can_check_in(origin, what, context) + } + + fn check_in(origin: &MultiLocation, what: &MultiAsset, context: &XcmContext) { FungiblesMutateAdapter::< Assets, Matcher, @@ -275,10 +340,10 @@ impl< AccountId, CheckAsset, CheckingAccount, - >::can_check_in(origin, what) + >::check_in(origin, what, context) } - fn check_in(origin: &MultiLocation, what: &MultiAsset) { + fn can_check_out(dest: &MultiLocation, what: &MultiAsset, context: &XcmContext) -> XcmResult { FungiblesMutateAdapter::< Assets, Matcher, @@ -286,10 +351,10 @@ impl< AccountId, CheckAsset, CheckingAccount, - >::check_in(origin, what) + >::can_check_out(dest, what, context) } - fn check_out(dest: &MultiLocation, what: &MultiAsset) { + fn check_out(dest: &MultiLocation, what: &MultiAsset, context: &XcmContext) { FungiblesMutateAdapter::< Assets, Matcher, @@ -297,10 +362,10 @@ impl< AccountId, CheckAsset, CheckingAccount, - >::check_out(dest, what) + >::check_out(dest, what, context) } - fn deposit_asset(what: &MultiAsset, who: &MultiLocation) -> Result { + fn deposit_asset(what: &MultiAsset, who: &MultiLocation, context: &XcmContext) -> XcmResult { FungiblesMutateAdapter::< Assets, Matcher, @@ -308,12 +373,13 @@ impl< AccountId, CheckAsset, CheckingAccount, - >::deposit_asset(what, who) + >::deposit_asset(what, who, context) } fn withdraw_asset( what: &MultiAsset, who: &MultiLocation, + maybe_context: Option<&XcmContext>, ) -> result::Result { FungiblesMutateAdapter::< Assets, @@ -322,16 +388,17 @@ impl< AccountId, CheckAsset, CheckingAccount, - >::withdraw_asset(what, who) + >::withdraw_asset(what, who, maybe_context) } fn internal_transfer_asset( what: &MultiAsset, from: &MultiLocation, to: &MultiLocation, + context: &XcmContext, ) -> result::Result { FungiblesTransferAdapter::::internal_transfer_asset( - what, from, to, + what, from, to, context ) } } diff --git a/xcm/xcm-builder/src/lib.rs b/xcm/xcm-builder/src/lib.rs index e3473d55d5eb..2379297010a1 100644 --- a/xcm/xcm-builder/src/lib.rs +++ b/xcm/xcm-builder/src/lib.rs @@ -20,8 +20,6 @@ #![cfg_attr(not(feature = "std"), no_std)] -#[cfg(test)] -mod mock; #[cfg(test)] mod tests; @@ -31,21 +29,29 @@ pub mod test_utils; mod location_conversion; pub use location_conversion::{ Account32Hash, AccountId32Aliases, AccountKey20Aliases, ChildParachainConvertsVia, - LocationInverter, ParentIsPreset, SiblingParachainConvertsVia, + ParentIsPreset, SiblingParachainConvertsVia, }; mod origin_conversion; pub use origin_conversion::{ BackingToPlurality, ChildParachainAsNative, ChildSystemParachainAsSuperuser, EnsureXcmOrigin, - ParentAsSuperuser, RelayChainAsNative, SiblingParachainAsNative, + OriginToPluralityVoice, ParentAsSuperuser, RelayChainAsNative, SiblingParachainAsNative, SiblingSystemParachainAsSuperuser, SignedAccountId32AsNative, SignedAccountKey20AsNative, SignedToAccountId32, SovereignSignedViaLocation, }; +mod asset_conversion; +pub use asset_conversion::{ + AsPrefixedGeneralIndex, ConvertedAbstractId, ConvertedConcreteId, MatchedConvertedConcreteId, +}; +#[allow(deprecated)] +pub use asset_conversion::{ConvertedAbstractAssetId, ConvertedConcreteAssetId}; + mod barriers; pub use barriers::{ - AllowKnownQueryResponses, AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, - AllowUnpaidExecutionFrom, IsChildSystemParachain, TakeWeightCredit, + AllowExplicitUnpaidExecutionFrom, AllowKnownQueryResponses, AllowSubscriptionsFrom, + AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, IsChildSystemParachain, + TakeWeightCredit, WithComputedOrigin, }; mod currency_adapter; @@ -53,19 +59,29 @@ pub use currency_adapter::CurrencyAdapter; mod fungibles_adapter; pub use fungibles_adapter::{ - AsPrefixedGeneralIndex, ConvertedAbstractAssetId, ConvertedConcreteAssetId, FungiblesAdapter, - FungiblesMutateAdapter, FungiblesTransferAdapter, + AssetChecking, DualMint, FungiblesAdapter, FungiblesMutateAdapter, FungiblesTransferAdapter, + LocalMint, MintLocation, NoChecking, NonLocalMint, +}; + +mod nonfungibles_adapter; +pub use nonfungibles_adapter::{ + NonFungiblesAdapter, NonFungiblesMutateAdapter, NonFungiblesTransferAdapter, }; mod weight; -#[allow(deprecated)] -pub use weight::FixedRateOfConcreteFungible; pub use weight::{ FixedRateOfFungible, FixedWeightBounds, TakeRevenue, UsingComponents, WeightInfoBounds, }; -mod matches_fungible; -pub use matches_fungible::{IsAbstract, IsConcrete}; +mod matches_token; +pub use matches_token::{IsAbstract, IsConcrete}; mod filter_asset_location; pub use filter_asset_location::{Case, NativeAsset}; + +mod universal_exports; +pub use universal_exports::{ + BridgeBlobDispatcher, BridgeMessage, DispatchBlob, DispatchBlobError, ExporterFor, HaulBlob, + HaulBlobError, HaulBlobExporter, NetworkExportTable, SovereignPaidRemoteExporter, + UnpaidLocalExporter, UnpaidRemoteExporter, +}; diff --git a/xcm/xcm-builder/src/location_conversion.rs b/xcm/xcm-builder/src/location_conversion.rs index ef41d697433f..a3ced7ba6d90 100644 --- a/xcm/xcm-builder/src/location_conversion.rs +++ b/xcm/xcm-builder/src/location_conversion.rs @@ -19,11 +19,11 @@ use parity_scale_codec::{Decode, Encode}; use sp_io::hashing::blake2_256; use sp_runtime::traits::{AccountIdConversion, TrailingZeroInput}; use sp_std::{borrow::Borrow, marker::PhantomData}; -use xcm::latest::{Junction::*, Junctions::*, MultiLocation, NetworkId, Parent}; -use xcm_executor::traits::{Convert, InvertLocation}; +use xcm::latest::prelude::*; +use xcm_executor::traits::Convert; pub struct Account32Hash(PhantomData<(Network, AccountId)>); -impl, AccountId: From<[u8; 32]> + Into<[u8; 32]> + Clone> +impl>, AccountId: From<[u8; 32]> + Into<[u8; 32]> + Clone> Convert for Account32Hash { fn convert_ref(location: impl Borrow) -> Result { @@ -107,15 +107,12 @@ impl + Into + AccountIdConversion, AccountId: /// Extracts the `AccountId32` from the passed `location` if the network matches. pub struct AccountId32Aliases(PhantomData<(Network, AccountId)>); -impl, AccountId: From<[u8; 32]> + Into<[u8; 32]> + Clone> +impl>, AccountId: From<[u8; 32]> + Into<[u8; 32]> + Clone> Convert for AccountId32Aliases { fn convert(location: MultiLocation) -> Result { let id = match location { - MultiLocation { - parents: 0, - interior: X1(AccountId32 { id, network: NetworkId::Any }), - } => id, + MultiLocation { parents: 0, interior: X1(AccountId32 { id, network: None }) } => id, MultiLocation { parents: 0, interior: X1(AccountId32 { id, network }) } if network == Network::get() => id, @@ -130,15 +127,12 @@ impl, AccountId: From<[u8; 32]> + Into<[u8; 32]> + Clone } pub struct AccountKey20Aliases(PhantomData<(Network, AccountId)>); -impl, AccountId: From<[u8; 20]> + Into<[u8; 20]> + Clone> +impl>, AccountId: From<[u8; 20]> + Into<[u8; 20]> + Clone> Convert for AccountKey20Aliases { fn convert(location: MultiLocation) -> Result { let key = match location { - MultiLocation { - parents: 0, - interior: X1(AccountKey20 { key, network: NetworkId::Any }), - } => key, + MultiLocation { parents: 0, interior: X1(AccountKey20 { key, network: None }) } => key, MultiLocation { parents: 0, interior: X1(AccountKey20 { key, network }) } if network == Network::get() => key, @@ -153,69 +147,19 @@ impl, AccountId: From<[u8; 20]> + Into<[u8; 20]> + Clone } } -/// Simple location inverter; give it this location's ancestry and it'll figure out the inverted -/// location. -/// -/// # Example -/// ## Network Topology -/// ```txt -/// v Source -/// Relay -> Para 1 -> Account20 -/// -> Para 2 -> Account32 -/// ^ Target -/// ``` -/// ```rust -/// # use frame_support::parameter_types; -/// # use xcm::latest::{MultiLocation, Junction::*, Junctions::{self, *}, NetworkId::Any}; -/// # use xcm_builder::LocationInverter; -/// # use xcm_executor::traits::InvertLocation; -/// # fn main() { -/// parameter_types!{ -/// pub Ancestry: MultiLocation = X2( -/// Parachain(1), -/// AccountKey20 { network: Any, key: Default::default() }, -/// ).into(); -/// } -/// -/// let input = MultiLocation::new(2, X2(Parachain(2), AccountId32 { network: Any, id: Default::default() })); -/// let inverted = LocationInverter::::invert_location(&input); -/// assert_eq!(inverted, Ok(MultiLocation::new( -/// 2, -/// X2(Parachain(1), AccountKey20 { network: Any, key: Default::default() }), -/// ))); -/// # } -/// ``` -pub struct LocationInverter(PhantomData); -impl> InvertLocation for LocationInverter { - fn ancestry() -> MultiLocation { - Ancestry::get() - } - fn invert_location(location: &MultiLocation) -> Result { - let mut ancestry = Ancestry::get(); - let mut junctions = Here; - for _ in 0..location.parent_count() { - junctions = junctions - .pushed_with(ancestry.take_first_interior().unwrap_or(OnlyChild)) - .map_err(|_| ())?; - } - let parents = location.interior().len() as u8; - Ok(MultiLocation::new(parents, junctions)) - } -} - #[cfg(test)] mod tests { use super::*; use frame_support::parameter_types; - use xcm::latest::{Junction, NetworkId::Any}; + use xcm::latest::Junction; fn account20() -> Junction { - AccountKey20 { network: Any, key: Default::default() } + AccountKey20 { network: None, key: Default::default() } } fn account32() -> Junction { - AccountId32 { network: Any, id: Default::default() } + AccountId32 { network: None, id: Default::default() } } // Network Topology @@ -227,17 +171,17 @@ mod tests { // Inputs and outputs written as file paths: // // input location (source to target): ../../../para_2/account32_default - // ancestry (root to source): para_1/account20_default/account20_default + // context (root to source): para_1/account20_default/account20_default // => // output (target to source): ../../para_1/account20_default/account20_default #[test] fn inverter_works_in_tree() { parameter_types! { - pub Ancestry: MultiLocation = X3(Parachain(1), account20(), account20()).into(); + pub UniversalLocation: InteriorMultiLocation = X3(Parachain(1), account20(), account20()); } let input = MultiLocation::new(3, X2(Parachain(2), account32())); - let inverted = LocationInverter::::invert_location(&input).unwrap(); + let inverted = UniversalLocation::get().invert_target(&input).unwrap(); assert_eq!(inverted, MultiLocation::new(2, X3(Parachain(1), account20(), account20()))); } @@ -246,13 +190,13 @@ mod tests { // Relay -> Para 1 -> SmartContract -> Account // ^ Target #[test] - fn inverter_uses_ancestry_as_inverted_location() { + fn inverter_uses_context_as_inverted_location() { parameter_types! { - pub Ancestry: MultiLocation = X2(account20(), account20()).into(); + pub UniversalLocation: InteriorMultiLocation = X2(account20(), account20()); } let input = MultiLocation::grandparent(); - let inverted = LocationInverter::::invert_location(&input).unwrap(); + let inverted = UniversalLocation::get().invert_target(&input).unwrap(); assert_eq!(inverted, X2(account20(), account20()).into()); } @@ -261,24 +205,24 @@ mod tests { // Relay -> Para 1 -> CollectivePallet -> Plurality // ^ Target #[test] - fn inverter_uses_only_child_on_missing_ancestry() { + fn inverter_uses_only_child_on_missing_context() { parameter_types! { - pub Ancestry: MultiLocation = X1(PalletInstance(5)).into(); + pub UniversalLocation: InteriorMultiLocation = PalletInstance(5).into(); } let input = MultiLocation::grandparent(); - let inverted = LocationInverter::::invert_location(&input).unwrap(); - assert_eq!(inverted, X2(PalletInstance(5), OnlyChild).into()); + let inverted = UniversalLocation::get().invert_target(&input).unwrap(); + assert_eq!(inverted, (OnlyChild, PalletInstance(5)).into()); } #[test] fn inverter_errors_when_location_is_too_large() { parameter_types! { - pub Ancestry: MultiLocation = Here.into(); + pub UniversalLocation: InteriorMultiLocation = Here; } let input = MultiLocation { parents: 99, interior: X1(Parachain(88)) }; - let inverted = LocationInverter::::invert_location(&input); + let inverted = UniversalLocation::get().invert_target(&input); assert_eq!(inverted, Err(())); } } diff --git a/xcm/xcm-builder/src/matches_fungible.rs b/xcm/xcm-builder/src/matches_token.rs similarity index 65% rename from xcm/xcm-builder/src/matches_fungible.rs rename to xcm/xcm-builder/src/matches_token.rs index e4092500be02..53b844c75764 100644 --- a/xcm/xcm-builder/src/matches_fungible.rs +++ b/xcm/xcm-builder/src/matches_token.rs @@ -17,14 +17,14 @@ //! Various implementations for the `MatchesFungible` trait. use frame_support::traits::Get; -use sp_runtime::traits::CheckedConversion; use sp_std::marker::PhantomData; use xcm::latest::{ AssetId::{Abstract, Concrete}, - Fungibility::Fungible, + AssetInstance, + Fungibility::{Fungible, NonFungible}, MultiAsset, MultiLocation, }; -use xcm_executor::traits::MatchesFungible; +use xcm_executor::traits::{MatchesFungible, MatchesNonFungible}; /// Converts a `MultiAsset` into balance `B` if it is a concrete fungible with an id equal to that /// given by `T`'s `Get`. @@ -51,7 +51,15 @@ impl, B: TryFrom> MatchesFungible for IsConcrete< fn matches_fungible(a: &MultiAsset) -> Option { match (&a.id, &a.fun) { (Concrete(ref id), Fungible(ref amount)) if id == &T::get() => - CheckedConversion::checked_from(*amount), + (*amount).try_into().ok(), + _ => None, + } + } +} +impl, I: TryFrom> MatchesNonFungible for IsConcrete { + fn matches_nonfungible(a: &MultiAsset) -> Option { + match (&a.id, &a.fun) { + (Concrete(id), NonFungible(instance)) if id == &T::get() => (*instance).try_into().ok(), _ => None, } } @@ -64,24 +72,37 @@ impl, B: TryFrom> MatchesFungible for IsConcrete< /// ``` /// use xcm::latest::prelude::*; /// use xcm_builder::IsAbstract; -/// use xcm_executor::traits::MatchesFungible; +/// use xcm_executor::traits::{MatchesFungible, MatchesNonFungible}; /// /// frame_support::parameter_types! { -/// pub TargetLocation: &'static [u8] = &[7u8]; +/// pub TargetLocation: [u8; 32] = [7u8; 32]; /// } /// /// # fn main() { -/// let asset = (vec![7u8], 999).into(); -/// // match `asset` if it is a concrete asset in `TargetLocation`. +/// let asset = ([7u8; 32], 999u128).into(); +/// // match `asset` if it is an abstract asset in `TargetLocation`. /// assert_eq!( as MatchesFungible>::matches_fungible(&asset), Some(999)); +/// let nft = ([7u8; 32], [42u8; 4]).into(); +/// assert_eq!( +/// as MatchesNonFungible<[u8; 4]>>::matches_nonfungible(&nft), +/// Some([42u8; 4]) +/// ); /// # } /// ``` pub struct IsAbstract(PhantomData); -impl, B: TryFrom> MatchesFungible for IsAbstract { +impl, B: TryFrom> MatchesFungible for IsAbstract { fn matches_fungible(a: &MultiAsset) -> Option { match (&a.id, &a.fun) { (Abstract(ref id), Fungible(ref amount)) if id == &T::get() => - CheckedConversion::checked_from(*amount), + (*amount).try_into().ok(), + _ => None, + } + } +} +impl, B: TryFrom> MatchesNonFungible for IsAbstract { + fn matches_nonfungible(a: &MultiAsset) -> Option { + match (&a.id, &a.fun) { + (Abstract(id), NonFungible(instance)) if id == &T::get() => (*instance).try_into().ok(), _ => None, } } diff --git a/xcm/xcm-builder/src/mock.rs b/xcm/xcm-builder/src/mock.rs deleted file mode 100644 index e085f22f4127..000000000000 --- a/xcm/xcm-builder/src/mock.rs +++ /dev/null @@ -1,296 +0,0 @@ -// Copyright 2020 Parity Technologies (UK) Ltd. -// This file is part of Polkadot. - -// Polkadot is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Polkadot 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 Polkadot. If not, see . - -use crate::{barriers::AllowSubscriptionsFrom, test_utils::*}; -pub use crate::{ - AllowKnownQueryResponses, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, - FixedRateOfFungible, FixedWeightBounds, LocationInverter, TakeWeightCredit, -}; -pub use frame_support::{ - dispatch::{ - DispatchError, DispatchInfo, DispatchResultWithPostInfo, Dispatchable, GetDispatchInfo, - Parameter, PostDispatchInfo, - }, - ensure, parameter_types, - sp_runtime::DispatchErrorWithPostInfo, - traits::{Contains, Get, IsInVec}, -}; -pub use parity_scale_codec::{Decode, Encode}; -pub use sp_std::{ - cell::RefCell, - collections::{btree_map::BTreeMap, btree_set::BTreeSet}, - fmt::Debug, - marker::PhantomData, -}; -pub use xcm::latest::{prelude::*, Weight}; -pub use xcm_executor::{ - traits::{ConvertOrigin, FilterAssetLocation, InvertLocation, OnResponse, TransactAsset}, - Assets, Config, -}; - -pub enum TestOrigin { - Root, - Relay, - Signed(u64), - Parachain(u32), -} - -/// A dummy call. -/// -/// Each item contains the amount of weight that it *wants* to consume as the first item, and the actual amount (if -/// different from the former) in the second option. -#[derive(Debug, Encode, Decode, Eq, PartialEq, Clone, Copy, scale_info::TypeInfo)] -pub enum TestCall { - OnlyRoot(Weight, Option), - OnlyParachain(Weight, Option, Option), - OnlySigned(Weight, Option, Option), - Any(Weight, Option), -} -impl Dispatchable for TestCall { - type RuntimeOrigin = TestOrigin; - type Config = (); - type Info = (); - type PostInfo = PostDispatchInfo; - fn dispatch(self, origin: Self::RuntimeOrigin) -> DispatchResultWithPostInfo { - let mut post_info = PostDispatchInfo::default(); - let maybe_actual = match self { - TestCall::OnlyRoot(_, maybe_actual) | - TestCall::OnlySigned(_, maybe_actual, _) | - TestCall::OnlyParachain(_, maybe_actual, _) | - TestCall::Any(_, maybe_actual) => maybe_actual, - }; - post_info.actual_weight = - maybe_actual.map(|x| frame_support::weights::Weight::from_ref_time(x)); - if match (&origin, &self) { - (TestOrigin::Parachain(i), TestCall::OnlyParachain(_, _, Some(j))) => i == j, - (TestOrigin::Signed(i), TestCall::OnlySigned(_, _, Some(j))) => i == j, - (TestOrigin::Root, TestCall::OnlyRoot(..)) | - (TestOrigin::Parachain(_), TestCall::OnlyParachain(_, _, None)) | - (TestOrigin::Signed(_), TestCall::OnlySigned(_, _, None)) | - (_, TestCall::Any(..)) => true, - _ => false, - } { - Ok(post_info) - } else { - Err(DispatchErrorWithPostInfo { error: DispatchError::BadOrigin, post_info }) - } - } -} - -impl GetDispatchInfo for TestCall { - fn get_dispatch_info(&self) -> DispatchInfo { - let weight = *match self { - TestCall::OnlyRoot(estimate, ..) | - TestCall::OnlyParachain(estimate, ..) | - TestCall::OnlySigned(estimate, ..) | - TestCall::Any(estimate, ..) => estimate, - }; - DispatchInfo { - weight: frame_support::weights::Weight::from_ref_time(weight), - ..Default::default() - } - } -} - -thread_local! { - pub static SENT_XCM: RefCell> = RefCell::new(Vec::new()); -} -pub fn sent_xcm() -> Vec<(MultiLocation, opaque::Xcm)> { - SENT_XCM.with(|q| (*q.borrow()).clone()) -} -pub struct TestSendXcm; -impl SendXcm for TestSendXcm { - fn send_xcm(dest: impl Into, msg: opaque::Xcm) -> SendResult { - SENT_XCM.with(|q| q.borrow_mut().push((dest.into(), msg))); - Ok(()) - } -} - -thread_local! { - pub static ASSETS: RefCell> = RefCell::new(BTreeMap::new()); -} -pub fn assets(who: u64) -> Vec { - ASSETS.with(|a| a.borrow().get(&who).map_or(vec![], |a| a.clone().into())) -} -pub fn add_asset>(who: u64, what: AssetArg) { - ASSETS.with(|a| a.borrow_mut().entry(who).or_insert(Assets::new()).subsume(what.into())); -} - -pub struct TestAssetTransactor; -impl TransactAsset for TestAssetTransactor { - fn deposit_asset(what: &MultiAsset, who: &MultiLocation) -> Result<(), XcmError> { - let who = to_account(who.clone()).map_err(|_| XcmError::LocationCannotHold)?; - add_asset(who, what.clone()); - Ok(()) - } - - fn withdraw_asset(what: &MultiAsset, who: &MultiLocation) -> Result { - let who = to_account(who.clone()).map_err(|_| XcmError::LocationCannotHold)?; - ASSETS.with(|a| { - a.borrow_mut() - .get_mut(&who) - .ok_or(XcmError::NotWithdrawable)? - .try_take(what.clone().into()) - .map_err(|_| XcmError::NotWithdrawable) - }) - } -} - -pub fn to_account(l: MultiLocation) -> Result { - Ok(match l { - // Siblings at 2000+id - MultiLocation { parents: 1, interior: X1(Parachain(id)) } => 2000 + id as u64, - // Accounts are their number - MultiLocation { parents: 0, interior: X1(AccountIndex64 { index, .. }) } => index, - // Children at 1000+id - MultiLocation { parents: 0, interior: X1(Parachain(id)) } => 1000 + id as u64, - // Self at 3000 - MultiLocation { parents: 0, interior: Here } => 3000, - // Parent at 3001 - MultiLocation { parents: 1, interior: Here } => 3001, - _ => return Err(l), - }) -} - -pub struct TestOriginConverter; -impl ConvertOrigin for TestOriginConverter { - fn convert_origin( - origin: impl Into, - kind: OriginKind, - ) -> Result { - use OriginKind::*; - match (kind, origin.into()) { - (Superuser, _) => Ok(TestOrigin::Root), - (SovereignAccount, l) => Ok(TestOrigin::Signed(to_account(l)?)), - (Native, MultiLocation { parents: 0, interior: X1(Parachain(id)) }) => - Ok(TestOrigin::Parachain(id)), - (Native, MultiLocation { parents: 1, interior: Here }) => Ok(TestOrigin::Relay), - (Native, MultiLocation { parents: 0, interior: X1(AccountIndex64 { index, .. }) }) => - Ok(TestOrigin::Signed(index)), - (_, origin) => Err(origin), - } - } -} - -thread_local! { - pub static IS_RESERVE: RefCell>> = RefCell::new(BTreeMap::new()); - pub static IS_TELEPORTER: RefCell>> = RefCell::new(BTreeMap::new()); -} -pub fn add_reserve(from: MultiLocation, asset: MultiAssetFilter) { - IS_RESERVE.with(|r| r.borrow_mut().entry(from).or_default().push(asset)); -} -#[allow(dead_code)] -pub fn add_teleporter(from: MultiLocation, asset: MultiAssetFilter) { - IS_TELEPORTER.with(|r| r.borrow_mut().entry(from).or_default().push(asset)); -} -pub struct TestIsReserve; -impl FilterAssetLocation for TestIsReserve { - fn filter_asset_location(asset: &MultiAsset, origin: &MultiLocation) -> bool { - IS_RESERVE - .with(|r| r.borrow().get(origin).map_or(false, |v| v.iter().any(|a| a.contains(asset)))) - } -} -pub struct TestIsTeleporter; -impl FilterAssetLocation for TestIsTeleporter { - fn filter_asset_location(asset: &MultiAsset, origin: &MultiLocation) -> bool { - IS_TELEPORTER - .with(|r| r.borrow().get(origin).map_or(false, |v| v.iter().any(|a| a.contains(asset)))) - } -} - -use xcm::latest::Response; -pub enum ResponseSlot { - Expecting(MultiLocation), - Received(Response), -} -thread_local! { - pub static QUERIES: RefCell> = RefCell::new(BTreeMap::new()); -} -pub struct TestResponseHandler; -impl OnResponse for TestResponseHandler { - fn expecting_response(origin: &MultiLocation, query_id: u64) -> bool { - QUERIES.with(|q| match q.borrow().get(&query_id) { - Some(ResponseSlot::Expecting(ref l)) => l == origin, - _ => false, - }) - } - fn on_response( - _origin: &MultiLocation, - query_id: u64, - response: xcm::latest::Response, - _max_weight: Weight, - ) -> Weight { - QUERIES.with(|q| { - q.borrow_mut().entry(query_id).and_modify(|v| { - if matches!(*v, ResponseSlot::Expecting(..)) { - *v = ResponseSlot::Received(response); - } - }); - }); - 10 - } -} -pub fn expect_response(query_id: u64, from: MultiLocation) { - QUERIES.with(|q| q.borrow_mut().insert(query_id, ResponseSlot::Expecting(from))); -} -pub fn response(query_id: u64) -> Option { - QUERIES.with(|q| { - q.borrow().get(&query_id).and_then(|v| match v { - ResponseSlot::Received(r) => Some(r.clone()), - _ => None, - }) - }) -} - -parameter_types! { - pub TestAncestry: MultiLocation = X1(Parachain(42)).into(); - pub UnitWeightCost: u64 = 10; -} -parameter_types! { - // Nothing is allowed to be paid/unpaid by default. - pub static AllowUnpaidFrom: Vec = vec![]; - pub static AllowPaidFrom: Vec = vec![]; - pub static AllowSubsFrom: Vec = vec![]; - // 1_000_000_000_000 => 1 unit of asset for 1 unit of Weight. - pub static WeightPrice: (AssetId, u128) = (From::from(Here), 1_000_000_000_000); - pub static MaxInstructions: u32 = 100; -} - -pub type TestBarrier = ( - TakeWeightCredit, - AllowKnownQueryResponses, - AllowTopLevelPaidExecutionFrom>, - AllowUnpaidExecutionFrom>, - AllowSubscriptionsFrom>, -); - -pub struct TestConfig; -impl Config for TestConfig { - type RuntimeCall = TestCall; - type XcmSender = TestSendXcm; - type AssetTransactor = TestAssetTransactor; - type OriginConverter = TestOriginConverter; - type IsReserve = TestIsReserve; - type IsTeleporter = TestIsTeleporter; - type LocationInverter = LocationInverter; - type Barrier = TestBarrier; - type Weigher = FixedWeightBounds; - type Trader = FixedRateOfFungible; - type ResponseHandler = TestResponseHandler; - type AssetTrap = TestAssetTrap; - type AssetClaims = TestAssetTrap; - type SubscriptionService = TestSubscriptionService; -} diff --git a/xcm/xcm-builder/src/nonfungibles_adapter.rs b/xcm/xcm-builder/src/nonfungibles_adapter.rs new file mode 100644 index 000000000000..2735a03ab6f3 --- /dev/null +++ b/xcm/xcm-builder/src/nonfungibles_adapter.rs @@ -0,0 +1,327 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +//! Adapters to work with `frame_support::traits::tokens::fungibles` through XCM. + +use crate::{AssetChecking, MintLocation}; +use frame_support::{ + ensure, + traits::{tokens::nonfungibles, Get}, +}; +use sp_std::{marker::PhantomData, prelude::*, result}; +use xcm::latest::prelude::*; +use xcm_executor::traits::{Convert, Error as MatchError, MatchesNonFungibles, TransactAsset}; + +pub struct NonFungiblesTransferAdapter( + PhantomData<(Assets, Matcher, AccountIdConverter, AccountId)>, +); +impl< + Assets: nonfungibles::Transfer, + Matcher: MatchesNonFungibles, + AccountIdConverter: Convert, + AccountId: Clone, // can't get away without it since Currency is generic over it. + > TransactAsset for NonFungiblesTransferAdapter +{ + fn transfer_asset( + what: &MultiAsset, + from: &MultiLocation, + to: &MultiLocation, + context: &XcmContext, + ) -> result::Result { + log::trace!( + target: "xcm::non_fungibles_adapter", + "transfer_asset what: {:?}, from: {:?}, to: {:?}, context: {:?}", + what, from, to, context, + ); + // Check we handle this asset. + let (class, instance) = Matcher::matches_nonfungibles(what)?; + let destination = AccountIdConverter::convert_ref(to) + .map_err(|()| MatchError::AccountIdConversionFailed)?; + Assets::transfer(&class, &instance, &destination) + .map_err(|e| XcmError::FailedToTransactAsset(e.into()))?; + Ok(what.clone().into()) + } +} + +pub struct NonFungiblesMutateAdapter< + Assets, + Matcher, + AccountIdConverter, + AccountId, + CheckAsset, + CheckingAccount, +>(PhantomData<(Assets, Matcher, AccountIdConverter, AccountId, CheckAsset, CheckingAccount)>); + +impl< + Assets: nonfungibles::Mutate, + Matcher: MatchesNonFungibles, + AccountIdConverter: Convert, + AccountId: Clone + Eq, // can't get away without it since Currency is generic over it. + CheckAsset: AssetChecking, + CheckingAccount: Get>, + > + NonFungiblesMutateAdapter< + Assets, + Matcher, + AccountIdConverter, + AccountId, + CheckAsset, + CheckingAccount, + > +{ + fn can_accrue_checked(class: Assets::CollectionId, instance: Assets::ItemId) -> XcmResult { + ensure!(Assets::owner(&class, &instance).is_none(), XcmError::NotDepositable); + Ok(()) + } + fn can_reduce_checked(class: Assets::CollectionId, instance: Assets::ItemId) -> XcmResult { + if let Some(checking_account) = CheckingAccount::get() { + // This is an asset whose teleports we track. + let owner = Assets::owner(&class, &instance); + ensure!(owner == Some(checking_account), XcmError::NotWithdrawable); + ensure!(Assets::can_transfer(&class, &instance), XcmError::NotWithdrawable); + } + Ok(()) + } + fn accrue_checked(class: Assets::CollectionId, instance: Assets::ItemId) { + if let Some(checking_account) = CheckingAccount::get() { + let ok = Assets::mint_into(&class, &instance, &checking_account).is_ok(); + debug_assert!(ok, "`mint_into` cannot generally fail; qed"); + } + } + fn reduce_checked(class: Assets::CollectionId, instance: Assets::ItemId) { + let ok = Assets::burn(&class, &instance, None).is_ok(); + debug_assert!(ok, "`can_check_in` must have returned `true` immediately prior; qed"); + } +} + +impl< + Assets: nonfungibles::Mutate, + Matcher: MatchesNonFungibles, + AccountIdConverter: Convert, + AccountId: Clone + Eq, // can't get away without it since Currency is generic over it. + CheckAsset: AssetChecking, + CheckingAccount: Get>, + > TransactAsset + for NonFungiblesMutateAdapter< + Assets, + Matcher, + AccountIdConverter, + AccountId, + CheckAsset, + CheckingAccount, + > +{ + fn can_check_in(_origin: &MultiLocation, what: &MultiAsset, context: &XcmContext) -> XcmResult { + log::trace!( + target: "xcm::fungibles_adapter", + "can_check_in origin: {:?}, what: {:?}, context: {:?}", + _origin, what, context, + ); + // Check we handle this asset. + let (class, instance) = Matcher::matches_nonfungibles(what)?; + match CheckAsset::asset_checking(&class) { + // We track this asset's teleports to ensure no more come in than have gone out. + Some(MintLocation::Local) => Self::can_reduce_checked(class, instance), + // We track this asset's teleports to ensure no more go out than have come in. + Some(MintLocation::NonLocal) => Self::can_accrue_checked(class, instance), + _ => Ok(()), + } + } + + fn check_in(_origin: &MultiLocation, what: &MultiAsset, context: &XcmContext) { + log::trace!( + target: "xcm::fungibles_adapter", + "check_in origin: {:?}, what: {:?}, context: {:?}", + _origin, what, context, + ); + if let Ok((class, instance)) = Matcher::matches_nonfungibles(what) { + match CheckAsset::asset_checking(&class) { + // We track this asset's teleports to ensure no more come in than have gone out. + Some(MintLocation::Local) => Self::reduce_checked(class, instance), + // We track this asset's teleports to ensure no more go out than have come in. + Some(MintLocation::NonLocal) => Self::accrue_checked(class, instance), + _ => (), + } + } + } + + fn can_check_out(_dest: &MultiLocation, what: &MultiAsset, context: &XcmContext) -> XcmResult { + log::trace!( + target: "xcm::fungibles_adapter", + "can_check_out dest: {:?}, what: {:?}, context: {:?}", + _dest, what, context, + ); + // Check we handle this asset. + let (class, instance) = Matcher::matches_nonfungibles(what)?; + match CheckAsset::asset_checking(&class) { + // We track this asset's teleports to ensure no more come in than have gone out. + Some(MintLocation::Local) => Self::can_accrue_checked(class, instance), + // We track this asset's teleports to ensure no more go out than have come in. + Some(MintLocation::NonLocal) => Self::can_reduce_checked(class, instance), + _ => Ok(()), + } + } + + fn check_out(_dest: &MultiLocation, what: &MultiAsset, context: &XcmContext) { + log::trace!( + target: "xcm::fungibles_adapter", + "check_out dest: {:?}, what: {:?}, context: {:?}", + _dest, what, context, + ); + if let Ok((class, instance)) = Matcher::matches_nonfungibles(what) { + match CheckAsset::asset_checking(&class) { + // We track this asset's teleports to ensure no more come in than have gone out. + Some(MintLocation::Local) => Self::accrue_checked(class, instance), + // We track this asset's teleports to ensure no more go out than have come in. + Some(MintLocation::NonLocal) => Self::reduce_checked(class, instance), + _ => (), + } + } + } + + fn deposit_asset(what: &MultiAsset, who: &MultiLocation, context: &XcmContext) -> XcmResult { + log::trace!( + target: "xcm::fungibles_adapter", + "deposit_asset what: {:?}, who: {:?}, context: {:?}", + what, who, context, + ); + // Check we handle this asset. + let (class, instance) = Matcher::matches_nonfungibles(what)?; + let who = AccountIdConverter::convert_ref(who) + .map_err(|()| MatchError::AccountIdConversionFailed)?; + Assets::mint_into(&class, &instance, &who) + .map_err(|e| XcmError::FailedToTransactAsset(e.into())) + } + + fn withdraw_asset( + what: &MultiAsset, + who: &MultiLocation, + maybe_context: Option<&XcmContext>, + ) -> result::Result { + log::trace!( + target: "xcm::fungibles_adapter", + "withdraw_asset what: {:?}, who: {:?}, maybe_context: {:?}", + what, who, maybe_context, + ); + // Check we handle this asset. + let who = AccountIdConverter::convert_ref(who) + .map_err(|()| MatchError::AccountIdConversionFailed)?; + let (class, instance) = Matcher::matches_nonfungibles(what)?; + Assets::burn(&class, &instance, Some(&who)) + .map_err(|e| XcmError::FailedToTransactAsset(e.into()))?; + Ok(what.clone().into()) + } +} + +pub struct NonFungiblesAdapter< + Assets, + Matcher, + AccountIdConverter, + AccountId, + CheckAsset, + CheckingAccount, +>(PhantomData<(Assets, Matcher, AccountIdConverter, AccountId, CheckAsset, CheckingAccount)>); +impl< + Assets: nonfungibles::Mutate + nonfungibles::Transfer, + Matcher: MatchesNonFungibles, + AccountIdConverter: Convert, + AccountId: Clone + Eq, // can't get away without it since Currency is generic over it. + CheckAsset: AssetChecking, + CheckingAccount: Get>, + > TransactAsset + for NonFungiblesAdapter +{ + fn can_check_in(origin: &MultiLocation, what: &MultiAsset, context: &XcmContext) -> XcmResult { + NonFungiblesMutateAdapter::< + Assets, + Matcher, + AccountIdConverter, + AccountId, + CheckAsset, + CheckingAccount, + >::can_check_in(origin, what, context) + } + + fn check_in(origin: &MultiLocation, what: &MultiAsset, context: &XcmContext) { + NonFungiblesMutateAdapter::< + Assets, + Matcher, + AccountIdConverter, + AccountId, + CheckAsset, + CheckingAccount, + >::check_in(origin, what, context) + } + + fn can_check_out(dest: &MultiLocation, what: &MultiAsset, context: &XcmContext) -> XcmResult { + NonFungiblesMutateAdapter::< + Assets, + Matcher, + AccountIdConverter, + AccountId, + CheckAsset, + CheckingAccount, + >::can_check_out(dest, what, context) + } + + fn check_out(dest: &MultiLocation, what: &MultiAsset, context: &XcmContext) { + NonFungiblesMutateAdapter::< + Assets, + Matcher, + AccountIdConverter, + AccountId, + CheckAsset, + CheckingAccount, + >::check_out(dest, what, context) + } + + fn deposit_asset(what: &MultiAsset, who: &MultiLocation, context: &XcmContext) -> XcmResult { + NonFungiblesMutateAdapter::< + Assets, + Matcher, + AccountIdConverter, + AccountId, + CheckAsset, + CheckingAccount, + >::deposit_asset(what, who, context) + } + + fn withdraw_asset( + what: &MultiAsset, + who: &MultiLocation, + maybe_context: Option<&XcmContext>, + ) -> result::Result { + NonFungiblesMutateAdapter::< + Assets, + Matcher, + AccountIdConverter, + AccountId, + CheckAsset, + CheckingAccount, + >::withdraw_asset(what, who, maybe_context) + } + + fn transfer_asset( + what: &MultiAsset, + from: &MultiLocation, + to: &MultiLocation, + context: &XcmContext, + ) -> result::Result { + NonFungiblesTransferAdapter::::transfer_asset( + what, from, to, context, + ) + } +} diff --git a/xcm/xcm-builder/src/origin_conversion.rs b/xcm/xcm-builder/src/origin_conversion.rs index 9fe50eaf9c3f..ddeec5dd0b31 100644 --- a/xcm/xcm-builder/src/origin_conversion.rs +++ b/xcm/xcm-builder/src/origin_conversion.rs @@ -187,7 +187,7 @@ impl, RuntimeOrigin> ConvertOrigin(PhantomData<(Network, RuntimeOrigin)>); -impl, RuntimeOrigin: OriginTrait> ConvertOrigin +impl>, RuntimeOrigin: OriginTrait> ConvertOrigin for SignedAccountId32AsNative where RuntimeOrigin::AccountId: From<[u8; 32]>, @@ -206,7 +206,7 @@ where ( OriginKind::Native, MultiLocation { parents: 0, interior: X1(Junction::AccountId32 { id, network }) }, - ) if matches!(network, NetworkId::Any) || network == Network::get() => + ) if matches!(network, None) || network == Network::get() => Ok(RuntimeOrigin::signed(id.into())), (_, origin) => Err(origin), } @@ -216,7 +216,7 @@ where pub struct SignedAccountKey20AsNative( PhantomData<(Network, RuntimeOrigin)>, ); -impl, RuntimeOrigin: OriginTrait> ConvertOrigin +impl>, RuntimeOrigin: OriginTrait> ConvertOrigin for SignedAccountKey20AsNative where RuntimeOrigin::AccountId: From<[u8; 20]>, @@ -235,7 +235,7 @@ where ( OriginKind::Native, MultiLocation { parents: 0, interior: X1(Junction::AccountKey20 { key, network }) }, - ) if (matches!(network, NetworkId::Any) || network == Network::get()) => + ) if (matches!(network, None) || network == Network::get()) => Ok(RuntimeOrigin::signed(key.into())), (_, origin) => Err(origin), } @@ -277,8 +277,11 @@ where pub struct SignedToAccountId32( PhantomData<(RuntimeOrigin, AccountId, Network)>, ); -impl, Network: Get> - Convert for SignedToAccountId32 +impl< + RuntimeOrigin: OriginTrait + Clone, + AccountId: Into<[u8; 32]>, + Network: Get>, + > Convert for SignedToAccountId32 where RuntimeOrigin::PalletsOrigin: From> + TryInto, Error = RuntimeOrigin::PalletsOrigin>, @@ -321,3 +324,20 @@ where }) } } + +/// `Convert` implementation to convert from an origin which passes the check of an `EnsureOrigin` +/// into a voice of a given pluralistic `Body`. +pub struct OriginToPluralityVoice( + PhantomData<(RuntimeOrigin, EnsureBodyOrigin, Body)>, +); +impl, Body: Get> + Convert + for OriginToPluralityVoice +{ + fn convert(o: RuntimeOrigin) -> Result { + match EnsureBodyOrigin::try_origin(o) { + Ok(_) => Ok(Junction::Plurality { id: Body::get(), part: BodyPart::Voice }.into()), + Err(o) => Err(o), + } + } +} diff --git a/xcm/xcm-builder/src/test_utils.rs b/xcm/xcm-builder/src/test_utils.rs index e233390beccd..958d6a8a4a3a 100644 --- a/xcm/xcm-builder/src/test_utils.rs +++ b/xcm/xcm-builder/src/test_utils.rs @@ -16,32 +16,43 @@ // Shared test utilities and implementations for the XCM Builder. -use frame_support::parameter_types; +use frame_support::{ + parameter_types, + traits::{Contains, CrateVersion, PalletInfoData, PalletsInfoAccess}, +}; use sp_std::vec::Vec; pub use xcm::latest::{prelude::*, Weight}; use xcm_executor::traits::{ClaimAssets, DropAssets, VersionChangeNotifier}; pub use xcm_executor::{ - traits::{ConvertOrigin, FilterAssetLocation, InvertLocation, OnResponse, TransactAsset}, + traits::{ + AssetExchange, AssetLock, ConvertOrigin, Enact, LockError, OnResponse, TransactAsset, + }, Assets, Config, }; parameter_types! { - pub static SubscriptionRequests: Vec<(MultiLocation, Option<(QueryId, u64)>)> = vec![]; + pub static SubscriptionRequests: Vec<(MultiLocation, Option<(QueryId, Weight)>)> = vec![]; + pub static MaxAssetsIntoHolding: u32 = 4; } pub struct TestSubscriptionService; impl VersionChangeNotifier for TestSubscriptionService { - fn start(location: &MultiLocation, query_id: QueryId, max_weight: u64) -> XcmResult { + fn start( + location: &MultiLocation, + query_id: QueryId, + max_weight: Weight, + _context: &XcmContext, + ) -> XcmResult { let mut r = SubscriptionRequests::get(); - r.push((location.clone(), Some((query_id, max_weight)))); + r.push((*location, Some((query_id, max_weight)))); SubscriptionRequests::set(r); Ok(()) } - fn stop(location: &MultiLocation) -> XcmResult { + fn stop(location: &MultiLocation, _context: &XcmContext) -> XcmResult { let mut r = SubscriptionRequests::get(); r.retain(|(l, _q)| l != location); - r.push((location.clone(), None)); + r.push((*location, None)); SubscriptionRequests::set(r); Ok(()) } @@ -58,16 +69,21 @@ parameter_types! { pub struct TestAssetTrap; impl DropAssets for TestAssetTrap { - fn drop_assets(origin: &MultiLocation, assets: Assets) -> Weight { + fn drop_assets(origin: &MultiLocation, assets: Assets, _context: &XcmContext) -> Weight { let mut t: Vec<(MultiLocation, MultiAssets)> = TrappedAssets::get(); - t.push((origin.clone(), assets.into())); + t.push((*origin, assets.into())); TrappedAssets::set(t); - 5 + Weight::from_parts(5, 5) } } impl ClaimAssets for TestAssetTrap { - fn claim_assets(origin: &MultiLocation, ticket: &MultiLocation, what: &MultiAssets) -> bool { + fn claim_assets( + origin: &MultiLocation, + ticket: &MultiLocation, + what: &MultiAssets, + _context: &XcmContext, + ) -> bool { let mut t: Vec<(MultiLocation, MultiAssets)> = TrappedAssets::get(); if let (0, X1(GeneralIndex(i))) = (ticket.parents, &ticket.interior) { if let Some((l, a)) = t.get(*i as usize) { @@ -81,3 +97,120 @@ impl ClaimAssets for TestAssetTrap { false } } + +pub struct TestAssetExchanger; + +impl AssetExchange for TestAssetExchanger { + fn exchange_asset( + _origin: Option<&MultiLocation>, + _give: Assets, + want: &MultiAssets, + _maximal: bool, + ) -> Result { + Ok(want.clone().into()) + } +} + +pub struct TestPalletsInfo; +impl PalletsInfoAccess for TestPalletsInfo { + fn count() -> usize { + 2 + } + fn infos() -> Vec { + vec![ + PalletInfoData { + index: 0, + name: "System", + module_name: "pallet_system", + crate_version: CrateVersion { major: 1, minor: 10, patch: 1 }, + }, + PalletInfoData { + index: 1, + name: "Balances", + module_name: "pallet_balances", + crate_version: CrateVersion { major: 1, minor: 42, patch: 69 }, + }, + ] + } +} + +pub struct TestUniversalAliases; +impl Contains<(MultiLocation, Junction)> for TestUniversalAliases { + fn contains(aliases: &(MultiLocation, Junction)) -> bool { + &aliases.0 == &Here.into_location() && &aliases.1 == &GlobalConsensus(ByGenesis([0; 32])) + } +} + +parameter_types! { + pub static LockedAssets: Vec<(MultiLocation, MultiAsset)> = vec![]; +} + +pub struct TestLockTicket(MultiLocation, MultiAsset); +impl Enact for TestLockTicket { + fn enact(self) -> Result<(), LockError> { + let mut locked_assets = LockedAssets::get(); + locked_assets.push((self.0, self.1)); + LockedAssets::set(locked_assets); + Ok(()) + } +} +pub struct TestUnlockTicket(MultiLocation, MultiAsset); +impl Enact for TestUnlockTicket { + fn enact(self) -> Result<(), LockError> { + let mut locked_assets = LockedAssets::get(); + if let Some((idx, _)) = locked_assets + .iter() + .enumerate() + .find(|(_, (origin, asset))| origin == &self.0 && asset == &self.1) + { + locked_assets.remove(idx); + } + LockedAssets::set(locked_assets); + Ok(()) + } +} +pub struct TestReduceTicket; +impl Enact for TestReduceTicket { + fn enact(self) -> Result<(), LockError> { + Ok(()) + } +} + +pub struct TestAssetLocker; +impl AssetLock for TestAssetLocker { + type LockTicket = TestLockTicket; + type UnlockTicket = TestUnlockTicket; + type ReduceTicket = TestReduceTicket; + + fn prepare_lock( + unlocker: MultiLocation, + asset: MultiAsset, + _owner: MultiLocation, + ) -> Result { + Ok(TestLockTicket(unlocker, asset)) + } + + fn prepare_unlock( + unlocker: MultiLocation, + asset: MultiAsset, + _owner: MultiLocation, + ) -> Result { + Ok(TestUnlockTicket(unlocker, asset)) + } + + fn note_unlockable( + _locker: MultiLocation, + _asset: MultiAsset, + _owner: MultiLocation, + ) -> Result<(), LockError> { + Ok(()) + } + + fn prepare_reduce_unlockable( + _locker: MultiLocation, + _asset: MultiAsset, + _owner: MultiLocation, + ) -> Result { + Ok(TestReduceTicket) + } +} diff --git a/xcm/xcm-builder/src/tests/assets.rs b/xcm/xcm-builder/src/tests/assets.rs new file mode 100644 index 000000000000..57eacf00183b --- /dev/null +++ b/xcm/xcm-builder/src/tests/assets.rs @@ -0,0 +1,469 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +use super::*; + +#[test] +fn exchange_asset_should_work() { + AllowUnpaidFrom::set(vec![Parent.into()]); + add_asset(Parent, (Parent, 1000u128)); + set_exchange_assets(vec![(Here, 100u128).into()]); + let message = Xcm(vec![ + WithdrawAsset((Parent, 100u128).into()), + SetAppendix( + vec![DepositAsset { assets: AllCounted(2).into(), beneficiary: Parent.into() }].into(), + ), + ExchangeAsset { + give: Definite((Parent, 50u128).into()), + want: (Here, 50u128).into(), + maximal: true, + }, + ]); + let hash = fake_message_hash(&message); + let r = + XcmExecutor::::execute_xcm(Parent, message, hash, Weight::from_parts(50, 50)); + assert_eq!(r, Outcome::Complete(Weight::from_parts(40, 40))); + assert_eq!(asset_list(Parent), vec![(Here, 100u128).into(), (Parent, 950u128).into()]); + assert_eq!(exchange_assets(), vec![(Parent, 50u128).into()].into()); +} + +#[test] +fn exchange_asset_without_maximal_should_work() { + AllowUnpaidFrom::set(vec![Parent.into()]); + add_asset(Parent, (Parent, 1000u128)); + set_exchange_assets(vec![(Here, 100u128).into()]); + let message = Xcm(vec![ + WithdrawAsset((Parent, 100u128).into()), + SetAppendix( + vec![DepositAsset { assets: AllCounted(2).into(), beneficiary: Parent.into() }].into(), + ), + ExchangeAsset { + give: Definite((Parent, 50).into()), + want: (Here, 50u128).into(), + maximal: false, + }, + ]); + let hash = fake_message_hash(&message); + let r = + XcmExecutor::::execute_xcm(Parent, message, hash, Weight::from_parts(50, 50)); + assert_eq!(r, Outcome::Complete(Weight::from_parts(40, 40))); + assert_eq!(asset_list(Parent), vec![(Here, 50u128).into(), (Parent, 950u128).into()]); + assert_eq!(exchange_assets(), vec![(Here, 50u128).into(), (Parent, 50u128).into()].into()); +} + +#[test] +fn exchange_asset_should_fail_when_no_deal_possible() { + AllowUnpaidFrom::set(vec![Parent.into()]); + add_asset(Parent, (Parent, 1000u128)); + set_exchange_assets(vec![(Here, 100u128).into()]); + let message = Xcm(vec![ + WithdrawAsset((Parent, 150u128).into()), + SetAppendix( + vec![DepositAsset { assets: AllCounted(2).into(), beneficiary: Parent.into() }].into(), + ), + ExchangeAsset { + give: Definite((Parent, 150u128).into()), + want: (Here, 150u128).into(), + maximal: false, + }, + ]); + let hash = fake_message_hash(&message); + let r = + XcmExecutor::::execute_xcm(Parent, message, hash, Weight::from_parts(50, 50)); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(40, 40), XcmError::NoDeal)); + assert_eq!(asset_list(Parent), vec![(Parent, 1000u128).into()]); + assert_eq!(exchange_assets(), vec![(Here, 100u128).into()].into()); +} + +#[test] +fn paying_reserve_deposit_should_work() { + AllowPaidFrom::set(vec![Parent.into()]); + add_reserve(Parent.into(), (Parent, WildFungible).into()); + WeightPrice::set((Parent.into(), 1_000_000_000_000, 1024 * 1024)); + + let fees = (Parent, 60u128).into(); + let message = Xcm(vec![ + ReserveAssetDeposited((Parent, 100u128).into()), + BuyExecution { fees, weight_limit: Limited(Weight::from_parts(30, 30)) }, + DepositAsset { assets: AllCounted(1).into(), beneficiary: Here.into() }, + ]); + let hash = fake_message_hash(&message); + let weight_limit = Weight::from_parts(50, 50); + let r = XcmExecutor::::execute_xcm(Parent, message, hash, weight_limit); + assert_eq!(r, Outcome::Complete(Weight::from_parts(30, 30))); + assert_eq!(asset_list(Here), vec![(Parent, 40u128).into()]); +} + +#[test] +fn transfer_should_work() { + // we'll let them have message execution for free. + AllowUnpaidFrom::set(vec![X1(Parachain(1)).into()]); + // Child parachain #1 owns 1000 tokens held by us in reserve. + add_asset(Parachain(1), (Here, 1000)); + // They want to transfer 100 of them to their sibling parachain #2 + let message = Xcm(vec![TransferAsset { + assets: (Here, 100u128).into(), + beneficiary: X1(AccountIndex64 { index: 3, network: None }).into(), + }]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(50, 50), + ); + assert_eq!(r, Outcome::Complete(Weight::from_parts(10, 10))); + assert_eq!( + asset_list(AccountIndex64 { index: 3, network: None }), + vec![(Here, 100u128).into()] + ); + assert_eq!(asset_list(Parachain(1)), vec![(Here, 900u128).into()]); + assert_eq!(sent_xcm(), vec![]); +} + +#[test] +fn reserve_transfer_should_work() { + AllowUnpaidFrom::set(vec![X1(Parachain(1)).into()]); + // Child parachain #1 owns 1000 tokens held by us in reserve. + add_asset(Parachain(1), (Here, 1000)); + // The remote account owned by gav. + let three: MultiLocation = X1(AccountIndex64 { index: 3, network: None }).into(); + + // They want to transfer 100 of our native asset from sovereign account of parachain #1 into #2 + // and let them know to hand it to account #3. + let message = Xcm(vec![TransferReserveAsset { + assets: (Here, 100u128).into(), + dest: Parachain(2).into(), + xcm: Xcm::<()>(vec![DepositAsset { + assets: AllCounted(1).into(), + beneficiary: three.clone(), + }]), + }]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(50, 50), + ); + assert_eq!(r, Outcome::Complete(Weight::from_parts(10, 10))); + + let expected_msg = Xcm::<()>(vec![ + ReserveAssetDeposited((Parent, 100u128).into()), + ClearOrigin, + DepositAsset { assets: AllCounted(1).into(), beneficiary: three }, + ]); + let expected_hash = fake_message_hash(&expected_msg); + assert_eq!(asset_list(Parachain(2)), vec![(Here, 100).into()]); + assert_eq!(sent_xcm(), vec![(Parachain(2).into(), expected_msg, expected_hash)]); +} + +#[test] +fn burn_should_work() { + // we'll let them have message execution for free. + AllowUnpaidFrom::set(vec![X1(Parachain(1)).into()]); + // Child parachain #1 owns 1000 tokens held by us in reserve. + add_asset(Parachain(1), (Here, 1000)); + // They want to burn 100 of them + let message = Xcm(vec![ + WithdrawAsset((Here, 1000u128).into()), + BurnAsset((Here, 100u128).into()), + DepositAsset { assets: Wild(AllCounted(1)), beneficiary: Parachain(1).into() }, + ]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(50, 50), + ); + assert_eq!(r, Outcome::Complete(Weight::from_parts(30, 30))); + assert_eq!(asset_list(Parachain(1)), vec![(Here, 900u128).into()]); + assert_eq!(sent_xcm(), vec![]); + + // Now they want to burn 1000 of them, which will actually only burn 900. + let message = Xcm(vec![ + WithdrawAsset((Here, 900u128).into()), + BurnAsset((Here, 1000u128).into()), + DepositAsset { assets: Wild(AllCounted(1)), beneficiary: Parachain(1).into() }, + ]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(50, 50), + ); + assert_eq!(r, Outcome::Complete(Weight::from_parts(30, 30))); + assert_eq!(asset_list(Parachain(1)), vec![]); + assert_eq!(sent_xcm(), vec![]); +} + +#[test] +fn basic_asset_trap_should_work() { + // we'll let them have message execution for free. + AllowUnpaidFrom::set(vec![X1(Parachain(1)).into(), X1(Parachain(2)).into()]); + + // Child parachain #1 owns 1000 tokens held by us in reserve. + add_asset(Parachain(1), (Here, 1000)); + // They want to transfer 100 of them to their sibling parachain #2 but have a problem + let message = Xcm(vec![ + WithdrawAsset((Here, 100u128).into()), + DepositAsset { + assets: Wild(AllCounted(0)), // <<< 0 is an error. + beneficiary: AccountIndex64 { index: 3, network: None }.into(), + }, + ]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(20, 20), + ); + assert_eq!(r, Outcome::Complete(Weight::from_parts(25, 25))); + assert_eq!(asset_list(Parachain(1)), vec![(Here, 900u128).into()]); + assert_eq!(asset_list(AccountIndex64 { index: 3, network: None }), vec![]); + + // Incorrect ticket doesn't work. + let message = Xcm(vec![ + ClaimAsset { assets: (Here, 100u128).into(), ticket: GeneralIndex(1).into() }, + DepositAsset { + assets: Wild(AllCounted(1)), + beneficiary: AccountIndex64 { index: 3, network: None }.into(), + }, + ]); + let hash = fake_message_hash(&message); + let old_trapped_assets = TrappedAssets::get(); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(20, 20), + ); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(10, 10), XcmError::UnknownClaim)); + assert_eq!(asset_list(Parachain(1)), vec![(Here, 900u128).into()]); + assert_eq!(asset_list(AccountIndex64 { index: 3, network: None }), vec![]); + assert_eq!(old_trapped_assets, TrappedAssets::get()); + + // Incorrect origin doesn't work. + let message = Xcm(vec![ + ClaimAsset { assets: (Here, 100u128).into(), ticket: GeneralIndex(0).into() }, + DepositAsset { + assets: Wild(AllCounted(1)), + beneficiary: AccountIndex64 { index: 3, network: None }.into(), + }, + ]); + let hash = fake_message_hash(&message); + let old_trapped_assets = TrappedAssets::get(); + let r = XcmExecutor::::execute_xcm( + Parachain(2), + message, + hash, + Weight::from_parts(20, 20), + ); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(10, 10), XcmError::UnknownClaim)); + assert_eq!(asset_list(Parachain(1)), vec![(Here, 900u128).into()]); + assert_eq!(asset_list(AccountIndex64 { index: 3, network: None }), vec![]); + assert_eq!(old_trapped_assets, TrappedAssets::get()); + + // Incorrect assets doesn't work. + let message = Xcm(vec![ + ClaimAsset { assets: (Here, 101u128).into(), ticket: GeneralIndex(0).into() }, + DepositAsset { + assets: Wild(AllCounted(1)), + beneficiary: AccountIndex64 { index: 3, network: None }.into(), + }, + ]); + let hash = fake_message_hash(&message); + let old_trapped_assets = TrappedAssets::get(); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(20, 20), + ); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(10, 10), XcmError::UnknownClaim)); + assert_eq!(asset_list(Parachain(1)), vec![(Here, 900u128).into()]); + assert_eq!(asset_list(AccountIndex64 { index: 3, network: None }), vec![]); + assert_eq!(old_trapped_assets, TrappedAssets::get()); + + let message = Xcm(vec![ + ClaimAsset { assets: (Here, 100u128).into(), ticket: GeneralIndex(0).into() }, + DepositAsset { + assets: Wild(AllCounted(1)), + beneficiary: AccountIndex64 { index: 3, network: None }.into(), + }, + ]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(20, 20), + ); + assert_eq!(r, Outcome::Complete(Weight::from_parts(20, 20))); + assert_eq!(asset_list(Parachain(1)), vec![(Here, 900u128).into()]); + assert_eq!( + asset_list(AccountIndex64 { index: 3, network: None }), + vec![(Here, 100u128).into()] + ); + + // Same again doesn't work :-) + let message = Xcm(vec![ + ClaimAsset { assets: (Here, 100u128).into(), ticket: GeneralIndex(0).into() }, + DepositAsset { + assets: Wild(AllCounted(1)), + beneficiary: AccountIndex64 { index: 3, network: None }.into(), + }, + ]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(20, 20), + ); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(10, 10), XcmError::UnknownClaim)); +} + +#[test] +fn max_assets_limit_should_work() { + // we'll let them have message execution for free. + AllowUnpaidFrom::set(vec![X1(Parachain(1)).into()]); + // Child parachain #1 owns 1000 tokens held by us in reserve. + add_asset(Parachain(1), ([1u8; 32], 1000u128)); + add_asset(Parachain(1), ([2u8; 32], 1000u128)); + add_asset(Parachain(1), ([3u8; 32], 1000u128)); + add_asset(Parachain(1), ([4u8; 32], 1000u128)); + add_asset(Parachain(1), ([5u8; 32], 1000u128)); + add_asset(Parachain(1), ([6u8; 32], 1000u128)); + add_asset(Parachain(1), ([7u8; 32], 1000u128)); + add_asset(Parachain(1), ([8u8; 32], 1000u128)); + add_asset(Parachain(1), ([9u8; 32], 1000u128)); + + // Attempt to withdraw 8 (=2x4)different assets. This will succeed. + let message = Xcm(vec![ + WithdrawAsset(([1u8; 32], 100u128).into()), + WithdrawAsset(([2u8; 32], 100u128).into()), + WithdrawAsset(([3u8; 32], 100u128).into()), + WithdrawAsset(([4u8; 32], 100u128).into()), + WithdrawAsset(([5u8; 32], 100u128).into()), + WithdrawAsset(([6u8; 32], 100u128).into()), + WithdrawAsset(([7u8; 32], 100u128).into()), + WithdrawAsset(([8u8; 32], 100u128).into()), + ]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(100, 100), + ); + assert_eq!(r, Outcome::Complete(Weight::from_parts(85, 85))); + + // Attempt to withdraw 9 different assets will fail. + let message = Xcm(vec![ + WithdrawAsset(([1u8; 32], 100u128).into()), + WithdrawAsset(([2u8; 32], 100u128).into()), + WithdrawAsset(([3u8; 32], 100u128).into()), + WithdrawAsset(([4u8; 32], 100u128).into()), + WithdrawAsset(([5u8; 32], 100u128).into()), + WithdrawAsset(([6u8; 32], 100u128).into()), + WithdrawAsset(([7u8; 32], 100u128).into()), + WithdrawAsset(([8u8; 32], 100u128).into()), + WithdrawAsset(([9u8; 32], 100u128).into()), + ]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(100, 100), + ); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(95, 95), XcmError::HoldingWouldOverflow)); + + // Attempt to withdraw 4 different assets and then the same 4 and then a different 4 will succeed. + let message = Xcm(vec![ + WithdrawAsset(([1u8; 32], 100u128).into()), + WithdrawAsset(([2u8; 32], 100u128).into()), + WithdrawAsset(([3u8; 32], 100u128).into()), + WithdrawAsset(([4u8; 32], 100u128).into()), + WithdrawAsset(([1u8; 32], 100u128).into()), + WithdrawAsset(([2u8; 32], 100u128).into()), + WithdrawAsset(([3u8; 32], 100u128).into()), + WithdrawAsset(([4u8; 32], 100u128).into()), + WithdrawAsset(([5u8; 32], 100u128).into()), + WithdrawAsset(([6u8; 32], 100u128).into()), + WithdrawAsset(([7u8; 32], 100u128).into()), + WithdrawAsset(([8u8; 32], 100u128).into()), + ]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(200, 200), + ); + assert_eq!(r, Outcome::Complete(Weight::from_parts(125, 125))); + + // Attempt to withdraw 4 different assets and then a different 4 and then the same 4 will fail. + let message = Xcm(vec![ + WithdrawAsset(([1u8; 32], 100u128).into()), + WithdrawAsset(([2u8; 32], 100u128).into()), + WithdrawAsset(([3u8; 32], 100u128).into()), + WithdrawAsset(([4u8; 32], 100u128).into()), + WithdrawAsset(([5u8; 32], 100u128).into()), + WithdrawAsset(([6u8; 32], 100u128).into()), + WithdrawAsset(([7u8; 32], 100u128).into()), + WithdrawAsset(([8u8; 32], 100u128).into()), + WithdrawAsset(([1u8; 32], 100u128).into()), + WithdrawAsset(([2u8; 32], 100u128).into()), + WithdrawAsset(([3u8; 32], 100u128).into()), + WithdrawAsset(([4u8; 32], 100u128).into()), + ]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(200, 200), + ); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(95, 95), XcmError::HoldingWouldOverflow)); + + // Attempt to withdraw 4 different assets and then a different 4 and then the same 4 will fail. + let message = Xcm(vec![ + WithdrawAsset(MultiAssets::from(vec![ + ([1u8; 32], 100u128).into(), + ([2u8; 32], 100u128).into(), + ([3u8; 32], 100u128).into(), + ([4u8; 32], 100u128).into(), + ([5u8; 32], 100u128).into(), + ([6u8; 32], 100u128).into(), + ([7u8; 32], 100u128).into(), + ([8u8; 32], 100u128).into(), + ])), + WithdrawAsset(([1u8; 32], 100u128).into()), + ]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(200, 200), + ); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(25, 25), XcmError::HoldingWouldOverflow)); +} diff --git a/xcm/xcm-builder/src/tests/barriers.rs b/xcm/xcm-builder/src/tests/barriers.rs new file mode 100644 index 000000000000..a7889c7e212d --- /dev/null +++ b/xcm/xcm-builder/src/tests/barriers.rs @@ -0,0 +1,278 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +use super::*; + +#[test] +fn take_weight_credit_barrier_should_work() { + let mut message = + Xcm::<()>(vec![TransferAsset { assets: (Parent, 100).into(), beneficiary: Here.into() }]); + let mut weight_credit = Weight::from_parts(10, 10); + let r = TakeWeightCredit::should_execute( + &Parent.into(), + message.inner_mut(), + Weight::from_parts(10, 10), + &mut weight_credit, + ); + assert_eq!(r, Ok(())); + assert_eq!(weight_credit, Weight::zero()); + + let r = TakeWeightCredit::should_execute( + &Parent.into(), + message.inner_mut(), + Weight::from_parts(10, 10), + &mut weight_credit, + ); + assert_eq!(r, Err(())); + assert_eq!(weight_credit, Weight::zero()); +} + +#[test] +fn computed_origin_should_work() { + let mut message = Xcm::<()>(vec![ + UniversalOrigin(GlobalConsensus(Kusama)), + DescendOrigin(Parachain(100).into()), + DescendOrigin(PalletInstance(69).into()), + WithdrawAsset((Parent, 100).into()), + BuyExecution { + fees: (Parent, 100).into(), + weight_limit: Limited(Weight::from_parts(100, 100)), + }, + TransferAsset { assets: (Parent, 100).into(), beneficiary: Here.into() }, + ]); + + AllowPaidFrom::set(vec![( + Parent, + Parent, + GlobalConsensus(Kusama), + Parachain(100), + PalletInstance(69), + ) + .into()]); + + let r = AllowTopLevelPaidExecutionFrom::>::should_execute( + &Parent.into(), + message.inner_mut(), + Weight::from_parts(100, 100), + &mut Weight::zero(), + ); + assert_eq!(r, Err(())); + + let r = WithComputedOrigin::< + AllowTopLevelPaidExecutionFrom>, + ExecutorUniversalLocation, + ConstU32<2>, + >::should_execute( + &Parent.into(), + message.inner_mut(), + Weight::from_parts(100, 100), + &mut Weight::zero(), + ); + assert_eq!(r, Err(())); + + let r = WithComputedOrigin::< + AllowTopLevelPaidExecutionFrom>, + ExecutorUniversalLocation, + ConstU32<5>, + >::should_execute( + &Parent.into(), + message.inner_mut(), + Weight::from_parts(100, 100), + &mut Weight::zero(), + ); + assert_eq!(r, Ok(())); +} + +#[test] +fn allow_unpaid_should_work() { + let mut message = + Xcm::<()>(vec![TransferAsset { assets: (Parent, 100).into(), beneficiary: Here.into() }]); + + AllowUnpaidFrom::set(vec![Parent.into()]); + + let r = AllowUnpaidExecutionFrom::>::should_execute( + &Parachain(1).into(), + message.inner_mut(), + Weight::from_parts(10, 10), + &mut Weight::zero(), + ); + assert_eq!(r, Err(())); + + let r = AllowUnpaidExecutionFrom::>::should_execute( + &Parent.into(), + message.inner_mut(), + Weight::from_parts(10, 10), + &mut Weight::zero(), + ); + assert_eq!(r, Ok(())); +} + +#[test] +fn allow_explicit_unpaid_should_work() { + let mut bad_message1 = + Xcm::<()>(vec![TransferAsset { assets: (Parent, 100).into(), beneficiary: Here.into() }]); + + let mut bad_message2 = Xcm::<()>(vec![ + UnpaidExecution { + weight_limit: Limited(Weight::from_parts(10, 10)), + check_origin: Some(Parent.into()), + }, + TransferAsset { assets: (Parent, 100).into(), beneficiary: Here.into() }, + ]); + + let mut good_message = Xcm::<()>(vec![ + UnpaidExecution { + weight_limit: Limited(Weight::from_parts(20, 20)), + check_origin: Some(Parent.into()), + }, + TransferAsset { assets: (Parent, 100).into(), beneficiary: Here.into() }, + ]); + + AllowExplicitUnpaidFrom::set(vec![Parent.into()]); + + let r = AllowExplicitUnpaidExecutionFrom::>::should_execute( + &Parachain(1).into(), + good_message.inner_mut(), + Weight::from_parts(20, 20), + &mut Weight::zero(), + ); + assert_eq!(r, Err(())); + + let r = AllowExplicitUnpaidExecutionFrom::>::should_execute( + &Parent.into(), + bad_message1.inner_mut(), + Weight::from_parts(20, 20), + &mut Weight::zero(), + ); + assert_eq!(r, Err(())); + + let r = AllowExplicitUnpaidExecutionFrom::>::should_execute( + &Parent.into(), + bad_message2.inner_mut(), + Weight::from_parts(20, 20), + &mut Weight::zero(), + ); + assert_eq!(r, Err(())); + + let r = AllowExplicitUnpaidExecutionFrom::>::should_execute( + &Parent.into(), + good_message.inner_mut(), + Weight::from_parts(20, 20), + &mut Weight::zero(), + ); + assert_eq!(r, Ok(())); + + let mut message_with_different_weight_parts = Xcm::<()>(vec![ + UnpaidExecution { + weight_limit: Limited(Weight::from_parts(20, 10)), + check_origin: Some(Parent.into()), + }, + TransferAsset { assets: (Parent, 100).into(), beneficiary: Here.into() }, + ]); + + let r = AllowExplicitUnpaidExecutionFrom::>::should_execute( + &Parent.into(), + message_with_different_weight_parts.inner_mut(), + Weight::from_parts(20, 20), + &mut Weight::zero(), + ); + assert_eq!(r, Err(())); + + let r = AllowExplicitUnpaidExecutionFrom::>::should_execute( + &Parent.into(), + message_with_different_weight_parts.inner_mut(), + Weight::from_parts(10, 10), + &mut Weight::zero(), + ); + assert_eq!(r, Ok(())); +} + +#[test] +fn allow_paid_should_work() { + AllowPaidFrom::set(vec![Parent.into()]); + + let mut message = + Xcm::<()>(vec![TransferAsset { assets: (Parent, 100).into(), beneficiary: Here.into() }]); + + let r = AllowTopLevelPaidExecutionFrom::>::should_execute( + &Parachain(1).into(), + message.inner_mut(), + Weight::from_parts(10, 10), + &mut Weight::zero(), + ); + assert_eq!(r, Err(())); + + let fees = (Parent, 1).into(); + let mut underpaying_message = Xcm::<()>(vec![ + ReserveAssetDeposited((Parent, 100).into()), + BuyExecution { fees, weight_limit: Limited(Weight::from_parts(20, 20)) }, + DepositAsset { assets: AllCounted(1).into(), beneficiary: Here.into() }, + ]); + + let r = AllowTopLevelPaidExecutionFrom::>::should_execute( + &Parent.into(), + underpaying_message.inner_mut(), + Weight::from_parts(30, 30), + &mut Weight::zero(), + ); + assert_eq!(r, Err(())); + + let fees = (Parent, 1).into(); + let mut paying_message = Xcm::<()>(vec![ + ReserveAssetDeposited((Parent, 100).into()), + BuyExecution { fees, weight_limit: Limited(Weight::from_parts(30, 30)) }, + DepositAsset { assets: AllCounted(1).into(), beneficiary: Here.into() }, + ]); + + let r = AllowTopLevelPaidExecutionFrom::>::should_execute( + &Parachain(1).into(), + paying_message.inner_mut(), + Weight::from_parts(30, 30), + &mut Weight::zero(), + ); + assert_eq!(r, Err(())); + + let r = AllowTopLevelPaidExecutionFrom::>::should_execute( + &Parent.into(), + paying_message.inner_mut(), + Weight::from_parts(30, 30), + &mut Weight::zero(), + ); + assert_eq!(r, Ok(())); + + let fees = (Parent, 1).into(); + let mut paying_message_with_different_weight_parts = Xcm::<()>(vec![ + WithdrawAsset((Parent, 100).into()), + BuyExecution { fees, weight_limit: Limited(Weight::from_parts(20, 10)) }, + DepositAsset { assets: AllCounted(1).into(), beneficiary: Here.into() }, + ]); + + let r = AllowTopLevelPaidExecutionFrom::>::should_execute( + &Parent.into(), + paying_message_with_different_weight_parts.inner_mut(), + Weight::from_parts(20, 20), + &mut Weight::zero(), + ); + assert_eq!(r, Err(())); + + let r = AllowTopLevelPaidExecutionFrom::>::should_execute( + &Parent.into(), + paying_message_with_different_weight_parts.inner_mut(), + Weight::from_parts(10, 10), + &mut Weight::zero(), + ); + assert_eq!(r, Ok(())) +} diff --git a/xcm/xcm-builder/src/tests/basic.rs b/xcm/xcm-builder/src/tests/basic.rs new file mode 100644 index 000000000000..6a821e22b66a --- /dev/null +++ b/xcm/xcm-builder/src/tests/basic.rs @@ -0,0 +1,106 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +use super::*; + +#[test] +fn basic_setup_works() { + add_reserve(Parent.into(), Wild((Parent, WildFungible).into())); + assert!( + ::IsReserve::contains(&(Parent, 100u128).into(), &Parent.into(),) + ); + + assert_eq!(to_account(Parachain(1)), Ok(1001)); + assert_eq!(to_account(Parachain(50)), Ok(1050)); + assert_eq!(to_account((Parent, Parachain(1))), Ok(2001)); + assert_eq!(to_account((Parent, Parachain(50))), Ok(2050)); + assert_eq!( + to_account(MultiLocation::new(0, X1(AccountIndex64 { index: 1, network: None }))), + Ok(1), + ); + assert_eq!( + to_account(MultiLocation::new(0, X1(AccountIndex64 { index: 42, network: None }))), + Ok(42), + ); + assert_eq!(to_account(Here), Ok(3000)); +} + +#[test] +fn weigher_should_work() { + let mut message = Xcm(vec![ + ReserveAssetDeposited((Parent, 100u128).into()), + BuyExecution { + fees: (Parent, 1u128).into(), + weight_limit: Limited(Weight::from_parts(30, 30)), + }, + DepositAsset { assets: AllCounted(1).into(), beneficiary: Here.into() }, + ]); + assert_eq!( + ::Weigher::weight(&mut message), + Ok(Weight::from_parts(30, 30)) + ); +} + +#[test] +fn code_registers_should_work() { + // we'll let them have message execution for free. + AllowUnpaidFrom::set(vec![Here.into()]); + // We own 1000 of our tokens. + add_asset(Here, (Here, 21u128)); + let mut message = Xcm(vec![ + // Set our error handler - this will fire only on the second message, when there's an error + SetErrorHandler(Xcm(vec![ + TransferAsset { + assets: (Here, 2u128).into(), + beneficiary: X1(AccountIndex64 { index: 3, network: None }).into(), + }, + // It was handled fine. + ClearError, + ])), + // Set the appendix - this will always fire. + SetAppendix(Xcm(vec![TransferAsset { + assets: (Here, 4u128).into(), + beneficiary: X1(AccountIndex64 { index: 3, network: None }).into(), + }])), + // First xfer always works ok + TransferAsset { + assets: (Here, 1u128).into(), + beneficiary: X1(AccountIndex64 { index: 3, network: None }).into(), + }, + // Second xfer results in error on the second message - our error handler will fire. + TransferAsset { + assets: (Here, 8u128).into(), + beneficiary: X1(AccountIndex64 { index: 3, network: None }).into(), + }, + ]); + // Weight limit of 70 is needed. + let limit = ::Weigher::weight(&mut message).unwrap(); + assert_eq!(limit, Weight::from_parts(70, 70)); + + let hash = fake_message_hash(&message); + + let r = XcmExecutor::::execute_xcm(Here, message.clone(), hash, limit); + assert_eq!(r, Outcome::Complete(Weight::from_parts(50, 50))); // We don't pay the 20 weight for the error handler. + assert_eq!(asset_list(AccountIndex64 { index: 3, network: None }), vec![(Here, 13u128).into()]); + assert_eq!(asset_list(Here), vec![(Here, 8u128).into()]); + assert_eq!(sent_xcm(), vec![]); + + let r = XcmExecutor::::execute_xcm(Here, message, hash, limit); + assert_eq!(r, Outcome::Complete(Weight::from_parts(70, 70))); // We pay the full weight here. + assert_eq!(asset_list(AccountIndex64 { index: 3, network: None }), vec![(Here, 20u128).into()]); + assert_eq!(asset_list(Here), vec![(Here, 1u128).into()]); + assert_eq!(sent_xcm(), vec![]); +} diff --git a/xcm/xcm-builder/src/tests/bridging/local_para_para.rs b/xcm/xcm-builder/src/tests/bridging/local_para_para.rs new file mode 100644 index 000000000000..a2ab952b16d6 --- /dev/null +++ b/xcm/xcm-builder/src/tests/bridging/local_para_para.rs @@ -0,0 +1,112 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +//! This test is when we're sending an XCM from a parachain which hosts a bridge to another +//! network's bridge parachain. The destination of the XCM is within the global consensus of the +//! remote side of the bridge. + +use super::*; + +parameter_types! { + pub UniversalLocation: Junctions = X2(GlobalConsensus(Local::get()), Parachain(1)); + pub RemoteUniversalLocation: Junctions = X2(GlobalConsensus(Remote::get()), Parachain(1)); +} +type TheBridge = + TestBridge>; +type Router = UnpaidLocalExporter, UniversalLocation>; + +/// ```nocompile +/// local | remote +/// | +/// GlobalConsensus(Local::get()) | GlobalConsensus(Remote::get()) +/// | +/// | +/// | +/// | +/// Parachain(1) ===> Parachain(1) +/// ``` +#[test] +fn sending_to_bridged_chain_works() { + let msg = Xcm(vec![Trap(1)]); + let dest = (Parent, Parent, Remote::get(), Parachain(1)).into(); + assert_eq!(send_xcm::(dest, msg).unwrap().1, (Here, 100).into()); + assert_eq!(TheBridge::service(), 1); + assert_eq!( + take_received_remote_messages(), + vec![( + Here.into(), + Xcm(vec![ + UniversalOrigin(Local::get().into()), + DescendOrigin(Parachain(1).into()), + Trap(1), + ]) + )] + ); +} + +/// ```nocompile +/// local | remote +/// | +/// GlobalConsensus(Local::get()) | GlobalConsensus(Remote::get()) +/// | +/// | +/// | +/// | +/// Parachain(1) ===> Parachain(1) ==> Parachain(1000) +/// ``` +#[test] +fn sending_to_parachain_of_bridged_chain_works() { + let msg = Xcm(vec![Trap(1)]); + let dest = (Parent, Parent, Remote::get(), Parachain(1000)).into(); + assert_eq!(send_xcm::(dest, msg).unwrap().1, (Here, 100).into()); + assert_eq!(TheBridge::service(), 1); + let expected = vec![( + (Parent, Parachain(1000)).into(), + Xcm(vec![ + UniversalOrigin(Local::get().into()), + DescendOrigin(Parachain(1).into()), + Trap(1), + ]), + )]; + assert_eq!(take_received_remote_messages(), expected); +} + +/// ```nocompile +/// local | remote +/// | +/// GlobalConsensus(Local::get()) | GlobalConsensus(Remote::get()) +/// | /\ +/// | || +/// | || +/// | || +/// Parachain(1) ===> Parachain(1) +/// ``` +#[test] +fn sending_to_relay_chain_of_bridged_chain_works() { + let msg = Xcm(vec![Trap(1)]); + let dest = (Parent, Parent, Remote::get()).into(); + assert_eq!(send_xcm::(dest, msg).unwrap().1, (Here, 100).into()); + assert_eq!(TheBridge::service(), 1); + let expected = vec![( + Parent.into(), + Xcm(vec![ + UniversalOrigin(Local::get().into()), + DescendOrigin(Parachain(1).into()), + Trap(1), + ]), + )]; + assert_eq!(take_received_remote_messages(), expected); +} diff --git a/xcm/xcm-builder/src/tests/bridging/local_relay_relay.rs b/xcm/xcm-builder/src/tests/bridging/local_relay_relay.rs new file mode 100644 index 000000000000..20b029526e9f --- /dev/null +++ b/xcm/xcm-builder/src/tests/bridging/local_relay_relay.rs @@ -0,0 +1,70 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +//! This test is when we're sending an XCM from a relay-chain which hosts a bridge to another +//! relay-chain. The destination of the XCM is within the global consensus of the +//! remote side of the bridge. + +use super::*; + +parameter_types! { + pub UniversalLocation: Junctions = X1(GlobalConsensus(Local::get())); + pub RemoteUniversalLocation: Junctions = X1(GlobalConsensus(Remote::get())); +} +type TheBridge = + TestBridge>; +type Router = UnpaidLocalExporter, UniversalLocation>; + +/// ```nocompile +/// local | remote +/// | +/// GlobalConsensus(Local::get()) ========> GlobalConsensus(Remote::get()) +/// | +/// ``` +#[test] +fn sending_to_bridged_chain_works() { + let msg = Xcm(vec![Trap(1)]); + assert_eq!( + send_xcm::((Parent, Remote::get()).into(), msg).unwrap().1, + (Here, 100).into() + ); + assert_eq!(TheBridge::service(), 1); + assert_eq!( + take_received_remote_messages(), + vec![(Here.into(), Xcm(vec![UniversalOrigin(Local::get().into()), Trap(1)]))] + ); +} + +/// ```nocompile +/// local | remote +/// | +/// GlobalConsensus(Local::get()) ========> GlobalConsensus(Remote::get()) +/// | || +/// | || +/// | || +/// | \/ +/// | Parachain(1000) +/// ``` +#[test] +fn sending_to_parachain_of_bridged_chain_works() { + let msg = Xcm(vec![Trap(1)]); + let dest = (Parent, Remote::get(), Parachain(1000)).into(); + assert_eq!(send_xcm::(dest, msg).unwrap().1, (Here, 100).into()); + assert_eq!(TheBridge::service(), 1); + let expected = + vec![(Parachain(1000).into(), Xcm(vec![UniversalOrigin(Local::get().into()), Trap(1)]))]; + assert_eq!(take_received_remote_messages(), expected); +} diff --git a/xcm/xcm-builder/src/tests/bridging/mod.rs b/xcm/xcm-builder/src/tests/bridging/mod.rs new file mode 100644 index 000000000000..0ca3733c108b --- /dev/null +++ b/xcm/xcm-builder/src/tests/bridging/mod.rs @@ -0,0 +1,194 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +//! Tests specific to the bridging primitives + +use super::mock::*; +use crate::universal_exports::*; +use frame_support::{parameter_types, traits::Get}; +use std::{cell::RefCell, marker::PhantomData}; +use xcm_executor::{ + traits::{export_xcm, validate_export}, + XcmExecutor, +}; +use SendError::*; + +mod local_para_para; +mod local_relay_relay; +mod paid_remote_relay_relay; +mod remote_para_para; +mod remote_para_para_via_relay; +mod remote_relay_relay; + +parameter_types! { + pub Local: NetworkId = ByGenesis([0; 32]); + pub Remote: NetworkId = ByGenesis([1; 32]); + pub Price: MultiAssets = MultiAssets::from((Here, 100u128)); +} + +std::thread_local! { + static BRIDGE_TRAFFIC: RefCell>> = RefCell::new(Vec::new()); +} + +struct TestBridge(PhantomData); +impl TestBridge { + fn service() -> u64 { + BRIDGE_TRAFFIC + .with(|t| t.borrow_mut().drain(..).map(|b| D::dispatch_blob(b).map_or(0, |()| 1)).sum()) + } +} +impl HaulBlob for TestBridge { + fn haul_blob(blob: Vec) -> Result<(), HaulBlobError> { + BRIDGE_TRAFFIC.with(|t| t.borrow_mut().push(blob)); + Ok(()) + } +} + +std::thread_local! { + static REMOTE_INCOMING_XCM: RefCell)>> = RefCell::new(Vec::new()); +} +struct TestRemoteIncomingRouter; +impl SendXcm for TestRemoteIncomingRouter { + type Ticket = (MultiLocation, Xcm<()>); + fn validate( + dest: &mut Option, + msg: &mut Option>, + ) -> SendResult<(MultiLocation, Xcm<()>)> { + let pair = (dest.take().unwrap(), msg.take().unwrap()); + Ok((pair, MultiAssets::new())) + } + fn deliver(pair: (MultiLocation, Xcm<()>)) -> Result { + let hash = fake_message_hash(&pair.1); + REMOTE_INCOMING_XCM.with(|q| q.borrow_mut().push(pair)); + Ok(hash) + } +} + +fn take_received_remote_messages() -> Vec<(MultiLocation, Xcm<()>)> { + REMOTE_INCOMING_XCM.with(|r| r.replace(vec![])) +} + +/// This is a dummy router which accepts messages destined for `Remote` from `Local` +/// and then executes them for free in a context simulated to be like that of our `Remote`. +struct UnpaidExecutingRouter( + PhantomData<(Local, Remote, RemoteExporter)>, +); + +fn price( + n: NetworkId, + c: u32, + s: &InteriorMultiLocation, + d: &InteriorMultiLocation, + m: &Xcm<()>, +) -> Result { + Ok(validate_export::(n, c, s.clone(), d.clone(), m.clone())?.1) +} + +fn deliver( + n: NetworkId, + c: u32, + s: InteriorMultiLocation, + d: InteriorMultiLocation, + m: Xcm<()>, +) -> Result { + export_xcm::(n, c, s, d, m).map(|(hash, _)| hash) +} + +impl, Remote: Get, RemoteExporter: ExportXcm> SendXcm + for UnpaidExecutingRouter +{ + type Ticket = Xcm<()>; + + fn validate( + destination: &mut Option, + message: &mut Option>, + ) -> SendResult> { + let expect_dest = Remote::get().relative_to(&Local::get()); + if destination.as_ref().ok_or(MissingArgument)? != &expect_dest { + return Err(NotApplicable) + } + let message = message.take().ok_or(MissingArgument)?; + Ok((message, MultiAssets::new())) + } + + fn deliver(message: Xcm<()>) -> Result { + // We now pretend that the message was delivered from `Local` to `Remote`, and execute + // so we need to ensure that the `TestConfig` is set up properly for executing as + // though it is `Remote`. + ExecutorUniversalLocation::set(Remote::get()); + let origin = Local::get().relative_to(&Remote::get()); + AllowUnpaidFrom::set(vec![origin.clone()]); + set_exporter_override(price::, deliver::); + // The we execute it: + let hash = fake_message_hash(&message); + let outcome = XcmExecutor::::execute_xcm( + origin, + message.into(), + hash, + Weight::from_parts(2_000_000_000_000, 2_000_000_000_000), + ); + match outcome { + Outcome::Complete(..) => Ok(hash), + Outcome::Incomplete(..) => Err(Transport("Error executing")), + Outcome::Error(..) => Err(Transport("Unable to execute")), + } + } +} + +/// This is a dummy router which accepts messages destined for `Remote` from `Local` +/// and then executes them in a context simulated to be like that of our `Remote`. Payment is +/// needed. +struct ExecutingRouter(PhantomData<(Local, Remote, RemoteExporter)>); +impl, Remote: Get, RemoteExporter: ExportXcm> SendXcm + for ExecutingRouter +{ + type Ticket = Xcm<()>; + + fn validate( + destination: &mut Option, + message: &mut Option>, + ) -> SendResult> { + let expect_dest = Remote::get().relative_to(&Local::get()); + if destination.as_ref().ok_or(MissingArgument)? != &expect_dest { + return Err(NotApplicable) + } + let message = message.take().ok_or(MissingArgument)?; + Ok((message, MultiAssets::new())) + } + + fn deliver(message: Xcm<()>) -> Result { + // We now pretend that the message was delivered from `Local` to `Remote`, and execute + // so we need to ensure that the `TestConfig` is set up properly for executing as + // though it is `Remote`. + ExecutorUniversalLocation::set(Remote::get()); + let origin = Local::get().relative_to(&Remote::get()); + AllowPaidFrom::set(vec![origin.clone()]); + set_exporter_override(price::, deliver::); + // Then we execute it: + let hash = fake_message_hash(&message); + let outcome = XcmExecutor::::execute_xcm( + origin, + message.into(), + hash, + Weight::from_parts(2_000_000_000_000, 2_000_000_000_000), + ); + match outcome { + Outcome::Complete(..) => Ok(hash), + Outcome::Incomplete(..) => Err(Transport("Error executing")), + Outcome::Error(..) => Err(Transport("Unable to execute")), + } + } +} diff --git a/xcm/xcm-builder/src/tests/bridging/paid_remote_relay_relay.rs b/xcm/xcm-builder/src/tests/bridging/paid_remote_relay_relay.rs new file mode 100644 index 000000000000..d31c46c734fb --- /dev/null +++ b/xcm/xcm-builder/src/tests/bridging/paid_remote_relay_relay.rs @@ -0,0 +1,124 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +//! This test is when we're sending an XCM from a parachain whose relay-chain hosts a bridge to +//! another relay-chain. The destination of the XCM is within the global consensus of the +//! remote side of the bridge. +//! +//! The Relay-chain here requires payment by the parachain for use of the bridge. This is expressed +//! under the standard XCM weight and the weight pricing. + +use super::*; + +parameter_types! { + pub UniversalLocation: Junctions = X2(GlobalConsensus(Local::get()), Parachain(100)); + pub RelayUniversalLocation: Junctions = X1(GlobalConsensus(Local::get())); + pub RemoteUniversalLocation: Junctions = X1(GlobalConsensus(Remote::get())); + pub static BridgeTable: Vec<(NetworkId, MultiLocation, Option)> + = vec![(Remote::get(), MultiLocation::parent(), Some((Parent, 200u128).into()))]; + // ^^^ 100 to use the bridge (export) and 100 for the remote execution weight (5 instructions + // x (10 + 10) weight each). +} +type TheBridge = + TestBridge>; +type RelayExporter = HaulBlobExporter; +type LocalInnerRouter = ExecutingRouter; +type LocalBridgeRouter = SovereignPaidRemoteExporter< + NetworkExportTable, + LocalInnerRouter, + UniversalLocation, +>; +type LocalRouter = (LocalInnerRouter, LocalBridgeRouter); + +/// ```nocompile +/// local | remote +/// | +/// GlobalConsensus(Local::get()) ========> GlobalConsensus(Remote::get()) +/// /\ | +/// || | +/// || | +/// || | +/// Parachain(100) | +/// ``` +#[test] +fn sending_to_bridged_chain_works() { + let dest: MultiLocation = (Parent, Parent, Remote::get()).into(); + // Routing won't work if we don't have enough funds. + assert_eq!( + send_xcm::(dest.clone(), Xcm(vec![Trap(1)])), + Err(SendError::Transport("Error executing")), + ); + + // Initialize the local relay so that our parachain has funds to pay for export. + add_asset(Parachain(100), (Here, 1000u128)); + + let msg = Xcm(vec![Trap(1)]); + assert_eq!(send_xcm::(dest, msg).unwrap().1, (Parent, 200u128).into()); + assert_eq!(TheBridge::service(), 1); + assert_eq!( + take_received_remote_messages(), + vec![( + Here.into(), + Xcm(vec![ + UniversalOrigin(Local::get().into()), + DescendOrigin(Parachain(100).into()), + Trap(1), + ]) + )] + ); + + // The export cost 50 ref time and 50 proof size weight units (and thus 100 units of balance). + assert_eq!(asset_list(Parachain(100)), vec![(Here, 800u128).into()]); +} + +/// ```nocompile +/// local | remote +/// | +/// GlobalConsensus(Local::get()) ========> GlobalConsensus(Remote::get()) +/// /\ | || +/// || | || +/// || | || +/// || | \/ +/// Parachain(100) | Parachain(100) +/// ``` +#[test] +fn sending_to_parachain_of_bridged_chain_works() { + let dest: MultiLocation = (Parent, Parent, Remote::get(), Parachain(100)).into(); + // Routing won't work if we don't have enough funds. + assert_eq!( + send_xcm::(dest.clone(), Xcm(vec![Trap(1)])), + Err(SendError::Transport("Error executing")), + ); + + // Initialize the local relay so that our parachain has funds to pay for export. + add_asset(Parachain(100), (Here, 1000u128)); + + let msg = Xcm(vec![Trap(1)]); + assert_eq!(send_xcm::(dest, msg).unwrap().1, (Parent, 200u128).into()); + assert_eq!(TheBridge::service(), 1); + let expected = vec![( + Parachain(100).into(), + Xcm(vec![ + UniversalOrigin(Local::get().into()), + DescendOrigin(Parachain(100).into()), + Trap(1), + ]), + )]; + assert_eq!(take_received_remote_messages(), expected); + + // The export cost 50 ref time and 50 proof size weight units (and thus 100 units of balance). + assert_eq!(asset_list(Parachain(100)), vec![(Here, 800u128).into()]); +} diff --git a/xcm/xcm-builder/src/tests/bridging/remote_para_para.rs b/xcm/xcm-builder/src/tests/bridging/remote_para_para.rs new file mode 100644 index 000000000000..648807763b2a --- /dev/null +++ b/xcm/xcm-builder/src/tests/bridging/remote_para_para.rs @@ -0,0 +1,124 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +//! This test is when we're sending an XCM from a parachain whose sibling parachain hosts a +//! bridge to a parachain from another global consensus. The destination of the XCM is within +//! the global consensus of the remote side of the bridge. + +use super::*; + +parameter_types! { + pub UniversalLocation: Junctions = X2(GlobalConsensus(Local::get()), Parachain(1000)); + pub ParaBridgeUniversalLocation: Junctions = X2(GlobalConsensus(Local::get()), Parachain(1)); + pub RemoteParaBridgeUniversalLocation: Junctions = X2(GlobalConsensus(Remote::get()), Parachain(1)); + pub BridgeTable: Vec<(NetworkId, MultiLocation, Option)> + = vec![(Remote::get(), (Parent, Parachain(1)).into(), None)]; +} +type TheBridge = + TestBridge>; +type RelayExporter = HaulBlobExporter; +type LocalInnerRouter = + UnpaidExecutingRouter; +type LocalBridgingRouter = + UnpaidRemoteExporter, LocalInnerRouter, UniversalLocation>; +type LocalRouter = (LocalInnerRouter, LocalBridgingRouter); + +/// ```nocompile +/// local | remote +/// | +/// GlobalConsensus(Local::get()) | GlobalConsensus(Remote::get()) +/// | +/// | +/// | +/// | +/// Parachain(1000) ===> Parachain(1) ===> Parachain(1) +/// ``` +#[test] +fn sending_to_bridged_chain_works() { + let msg = Xcm(vec![Trap(1)]); + assert_eq!( + send_xcm::((Parent, Parent, Remote::get(), Parachain(1)).into(), msg) + .unwrap() + .1, + MultiAssets::new() + ); + assert_eq!(TheBridge::service(), 1); + assert_eq!( + take_received_remote_messages(), + vec![( + Here.into(), + Xcm(vec![ + UniversalOrigin(Local::get().into()), + DescendOrigin(Parachain(1000).into()), + Trap(1) + ]) + )] + ); +} + +/// ```nocompile +/// local | remote +/// | +/// GlobalConsensus(Local::get()) | GlobalConsensus(Remote::get()) +/// | +/// | +/// | +/// | +/// Parachain(1000) ===> Parachain(1) ===> Parachain(1) ===> Parachain(1000) +/// ``` +#[test] +fn sending_to_sibling_of_bridged_chain_works() { + let msg = Xcm(vec![Trap(1)]); + let dest = (Parent, Parent, Remote::get(), Parachain(1000)).into(); + assert_eq!(send_xcm::(dest, msg).unwrap().1, MultiAssets::new()); + assert_eq!(TheBridge::service(), 1); + let expected = vec![( + (Parent, Parachain(1000)).into(), + Xcm(vec![ + UniversalOrigin(Local::get().into()), + DescendOrigin(Parachain(1000).into()), + Trap(1), + ]), + )]; + assert_eq!(take_received_remote_messages(), expected); +} + +/// ```nocompile +/// local | remote +/// | +/// GlobalConsensus(Local::get()) | GlobalConsensus(Remote::get()) +/// | /\ +/// | || +/// | || +/// | || +/// Parachain(1000) ===> Parachain(1) ===> Parachain(1) +/// ``` +#[test] +fn sending_to_relay_of_bridged_chain_works() { + let msg = Xcm(vec![Trap(1)]); + let dest = (Parent, Parent, Remote::get()).into(); + assert_eq!(send_xcm::(dest, msg).unwrap().1, MultiAssets::new()); + assert_eq!(TheBridge::service(), 1); + let expected = vec![( + Parent.into(), + Xcm(vec![ + UniversalOrigin(Local::get().into()), + DescendOrigin(Parachain(1000).into()), + Trap(1), + ]), + )]; + assert_eq!(take_received_remote_messages(), expected); +} diff --git a/xcm/xcm-builder/src/tests/bridging/remote_para_para_via_relay.rs b/xcm/xcm-builder/src/tests/bridging/remote_para_para_via_relay.rs new file mode 100644 index 000000000000..0a6e0bfb73dd --- /dev/null +++ b/xcm/xcm-builder/src/tests/bridging/remote_para_para_via_relay.rs @@ -0,0 +1,106 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +//! This test is when we're sending an XCM from a relay-chain whose child parachain hosts a +//! bridge to a parachain from another global consensus. The destination of the XCM is within +//! the global consensus of the remote side of the bridge. + +use super::*; + +parameter_types! { + pub UniversalLocation: Junctions = X1(GlobalConsensus(Local::get())); + pub ParaBridgeUniversalLocation: Junctions = X2(GlobalConsensus(Local::get()), Parachain(1)); + pub RemoteParaBridgeUniversalLocation: Junctions = X2(GlobalConsensus(Remote::get()), Parachain(1)); + pub BridgeTable: Vec<(NetworkId, MultiLocation, Option)> + = vec![(Remote::get(), Parachain(1).into(), None)]; +} +type TheBridge = + TestBridge>; +type RelayExporter = HaulBlobExporter; +type LocalInnerRouter = + UnpaidExecutingRouter; +type LocalBridgingRouter = + UnpaidRemoteExporter, LocalInnerRouter, UniversalLocation>; +type LocalRouter = (LocalInnerRouter, LocalBridgingRouter); + +/// ```nocompile +/// local | remote +/// | +/// GlobalConsensus(Local::get()) | GlobalConsensus(Remote::get()) +/// || | +/// || | +/// || | +/// \/ | +/// Parachain(1) ===> Parachain(1) +/// ``` +#[test] +fn sending_to_bridged_chain_works() { + let msg = Xcm(vec![Trap(1)]); + assert_eq!( + send_xcm::((Parent, Remote::get(), Parachain(1)).into(), msg) + .unwrap() + .1, + MultiAssets::new() + ); + assert_eq!(TheBridge::service(), 1); + assert_eq!( + take_received_remote_messages(), + vec![(Here.into(), Xcm(vec![UniversalOrigin(Local::get().into()), Trap(1)]))] + ); +} + +/// ```nocompile +/// local | remote +/// | +/// GlobalConsensus(Local::get()) | GlobalConsensus(Remote::get()) +/// || | +/// || | +/// || | +/// \/ | +/// Parachain(1) ===> Parachain(1) ===> Parachain(1000) +/// ``` +#[test] +fn sending_to_sibling_of_bridged_chain_works() { + let msg = Xcm(vec![Trap(1)]); + let dest = (Parent, Remote::get(), Parachain(1000)).into(); + assert_eq!(send_xcm::(dest, msg).unwrap().1, MultiAssets::new()); + assert_eq!(TheBridge::service(), 1); + let expected = vec![( + (Parent, Parachain(1000)).into(), + Xcm(vec![UniversalOrigin(Local::get().into()), Trap(1)]), + )]; + assert_eq!(take_received_remote_messages(), expected); +} + +/// ```nocompile +/// local | remote +/// | +/// GlobalConsensus(Local::get()) | GlobalConsensus(Remote::get()) +/// || | /\ +/// || | || +/// || | || +/// \/ | || +/// Parachain(1) ===> Parachain(1) +/// ``` +#[test] +fn sending_to_relay_of_bridged_chain_works() { + let msg = Xcm(vec![Trap(1)]); + let dest = (Parent, Remote::get()).into(); + assert_eq!(send_xcm::(dest, msg).unwrap().1, MultiAssets::new()); + assert_eq!(TheBridge::service(), 1); + let expected = vec![(Parent.into(), Xcm(vec![UniversalOrigin(Local::get().into()), Trap(1)]))]; + assert_eq!(take_received_remote_messages(), expected); +} diff --git a/xcm/xcm-builder/src/tests/bridging/remote_relay_relay.rs b/xcm/xcm-builder/src/tests/bridging/remote_relay_relay.rs new file mode 100644 index 000000000000..83cc0ac78096 --- /dev/null +++ b/xcm/xcm-builder/src/tests/bridging/remote_relay_relay.rs @@ -0,0 +1,95 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +//! This test is when we're sending an XCM from a parachain whose relay-chain hosts a bridge to +//! another relay-chain. The destination of the XCM is within the global consensus of the +//! remote side of the bridge. + +use super::*; + +parameter_types! { + pub UniversalLocation: Junctions = X2(GlobalConsensus(Local::get()), Parachain(1000)); + pub RelayUniversalLocation: Junctions = X1(GlobalConsensus(Local::get())); + pub RemoteUniversalLocation: Junctions = X1(GlobalConsensus(Remote::get())); + pub BridgeTable: Vec<(NetworkId, MultiLocation, Option)> + = vec![(Remote::get(), MultiLocation::parent(), None)]; +} +type TheBridge = + TestBridge>; +type RelayExporter = HaulBlobExporter; +type LocalInnerRouter = + UnpaidExecutingRouter; +type LocalBridgeRouter = + UnpaidRemoteExporter, LocalInnerRouter, UniversalLocation>; +type LocalRouter = (LocalInnerRouter, LocalBridgeRouter); + +/// ```nocompile +/// local | remote +/// | +/// GlobalConsensus(Local::get()) ========> GlobalConsensus(Remote::get()) +/// /\ | +/// || | +/// || | +/// || | +/// Parachain(1000) | +/// ``` +#[test] +fn sending_to_bridged_chain_works() { + let msg = Xcm(vec![Trap(1)]); + assert_eq!( + send_xcm::((Parent, Parent, Remote::get()).into(), msg).unwrap().1, + MultiAssets::new() + ); + assert_eq!(TheBridge::service(), 1); + assert_eq!( + take_received_remote_messages(), + vec![( + Here.into(), + Xcm(vec![ + UniversalOrigin(Local::get().into()), + DescendOrigin(Parachain(1000).into()), + Trap(1) + ]) + )] + ); +} + +/// ```nocompile +/// local | remote +/// | +/// GlobalConsensus(Local::get()) ========> GlobalConsensus(Remote::get()) +/// /\ | || +/// || | || +/// || | || +/// || | \/ +/// Parachain(1000) | Parachain(1000) +/// ``` +#[test] +fn sending_to_parachain_of_bridged_chain_works() { + let msg = Xcm(vec![Trap(1)]); + let dest = (Parent, Parent, Remote::get(), Parachain(1000)).into(); + assert_eq!(send_xcm::(dest, msg).unwrap().1, MultiAssets::new()); + assert_eq!(TheBridge::service(), 1); + let expected = vec![( + Parachain(1000).into(), + Xcm(vec![ + UniversalOrigin(Local::get().into()), + DescendOrigin(Parachain(1000).into()), + Trap(1), + ]), + )]; + assert_eq!(take_received_remote_messages(), expected); +} diff --git a/xcm/xcm-builder/src/tests/expecting.rs b/xcm/xcm-builder/src/tests/expecting.rs new file mode 100644 index 000000000000..b93b73224dcc --- /dev/null +++ b/xcm/xcm-builder/src/tests/expecting.rs @@ -0,0 +1,187 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +use super::*; + +#[test] +fn expect_pallet_should_work() { + AllowUnpaidFrom::set(vec![X1(Parachain(1)).into()]); + // They want to transfer 100 of our native asset from sovereign account of parachain #1 into #2 + // and let them know to hand it to account #3. + let message = Xcm(vec![ExpectPallet { + index: 1, + name: b"Balances".as_ref().into(), + module_name: b"pallet_balances".as_ref().into(), + crate_major: 1, + min_crate_minor: 42, + }]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(50, 50), + ); + assert_eq!(r, Outcome::Complete(Weight::from_parts(10, 10))); + + let message = Xcm(vec![ExpectPallet { + index: 1, + name: b"Balances".as_ref().into(), + module_name: b"pallet_balances".as_ref().into(), + crate_major: 1, + min_crate_minor: 41, + }]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(50, 50), + ); + assert_eq!(r, Outcome::Complete(Weight::from_parts(10, 10))); +} + +#[test] +fn expect_pallet_should_fail_correctly() { + AllowUnpaidFrom::set(vec![X1(Parachain(1)).into()]); + let message = Xcm(vec![ExpectPallet { + index: 1, + name: b"Balances".as_ref().into(), + module_name: b"pallet_balances".as_ref().into(), + crate_major: 1, + min_crate_minor: 60, + }]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(50, 50), + ); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(10, 10), XcmError::VersionIncompatible)); + + let message = Xcm(vec![ExpectPallet { + index: 1, + name: b"System".as_ref().into(), + module_name: b"pallet_balances".as_ref().into(), + crate_major: 1, + min_crate_minor: 42, + }]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(50, 50), + ); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(10, 10), XcmError::NameMismatch)); + + let message = Xcm(vec![ExpectPallet { + index: 1, + name: b"Balances".as_ref().into(), + module_name: b"pallet_system".as_ref().into(), + crate_major: 1, + min_crate_minor: 42, + }]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(50, 50), + ); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(10, 10), XcmError::NameMismatch)); + + let message = Xcm(vec![ExpectPallet { + index: 0, + name: b"Balances".as_ref().into(), + module_name: b"pallet_balances".as_ref().into(), + crate_major: 1, + min_crate_minor: 42, + }]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(50, 50), + ); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(10, 10), XcmError::NameMismatch)); + + let message = Xcm(vec![ExpectPallet { + index: 2, + name: b"Balances".as_ref().into(), + module_name: b"pallet_balances".as_ref().into(), + crate_major: 1, + min_crate_minor: 42, + }]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(50, 50), + ); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(10, 10), XcmError::PalletNotFound)); + + let message = Xcm(vec![ExpectPallet { + index: 1, + name: b"Balances".as_ref().into(), + module_name: b"pallet_balances".as_ref().into(), + crate_major: 2, + min_crate_minor: 42, + }]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(50, 50), + ); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(10, 10), XcmError::VersionIncompatible)); + + let message = Xcm(vec![ExpectPallet { + index: 1, + name: b"Balances".as_ref().into(), + module_name: b"pallet_balances".as_ref().into(), + crate_major: 0, + min_crate_minor: 42, + }]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(50, 50), + ); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(10, 10), XcmError::VersionIncompatible)); + + let message = Xcm(vec![ExpectPallet { + index: 1, + name: b"Balances".as_ref().into(), + module_name: b"pallet_balances".as_ref().into(), + crate_major: 1, + min_crate_minor: 43, + }]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(50, 50), + ); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(10, 10), XcmError::VersionIncompatible)); +} diff --git a/xcm/xcm-builder/src/tests/locking.rs b/xcm/xcm-builder/src/tests/locking.rs new file mode 100644 index 000000000000..f226c1bb5766 --- /dev/null +++ b/xcm/xcm-builder/src/tests/locking.rs @@ -0,0 +1,234 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +use super::*; +use LockTraceItem::*; + +#[test] +fn lock_roundtrip_should_work() { + // Account #3 and Parachain #1 can execute for free + AllowUnpaidFrom::set(vec![(3u64,).into(), (Parent, Parachain(1)).into()]); + // Account #3 owns 1000 native parent tokens. + add_asset((3u64,), (Parent, 1000u128)); + // Sending a message costs 10 parent-tokens. + set_send_price((Parent, 10u128)); + + // They want to lock 100 of the native parent tokens to be unlocked only by Parachain #1. + let message = Xcm(vec![ + WithdrawAsset((Parent, 100u128).into()), + SetAppendix( + vec![DepositAsset { assets: AllCounted(2).into(), beneficiary: (3u64,).into() }].into(), + ), + LockAsset { asset: (Parent, 100u128).into(), unlocker: (Parent, Parachain(1)).into() }, + ]); + let hash = fake_message_hash(&message); + let r = + XcmExecutor::::execute_xcm((3u64,), message, hash, Weight::from_parts(50, 50)); + assert_eq!(r, Outcome::Complete(Weight::from_parts(40, 40))); + assert_eq!(asset_list((3u64,)), vec![(Parent, 990u128).into()]); + + let expected_msg = Xcm::<()>(vec![NoteUnlockable { + owner: (Parent, Parachain(42), 3u64).into(), + asset: (Parent, 100u128).into(), + }]); + let expected_hash = fake_message_hash(&expected_msg); + assert_eq!(sent_xcm(), vec![((Parent, Parachain(1)).into(), expected_msg, expected_hash)]); + assert_eq!( + take_lock_trace(), + vec![Lock { + asset: (Parent, 100u128).into(), + owner: (3u64,).into(), + unlocker: (Parent, Parachain(1)).into(), + }] + ); + + // Now we'll unlock it. + let message = + Xcm(vec![UnlockAsset { asset: (Parent, 100u128).into(), target: (3u64,).into() }]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + (Parent, Parachain(1)), + message, + hash, + Weight::from_parts(50, 50), + ); + assert_eq!(r, Outcome::Complete(Weight::from_parts(10, 10))); +} + +#[test] +fn auto_fee_paying_should_work() { + // Account #3 and Parachain #1 can execute for free + AllowUnpaidFrom::set(vec![(3u64,).into()]); + // Account #3 owns 1000 native parent tokens. + add_asset((3u64,), (Parent, 1000u128)); + // Sending a message costs 10 parent-tokens. + set_send_price((Parent, 10u128)); + + // They want to lock 100 of the native parent tokens to be unlocked only by Parachain #1. + let message = Xcm(vec![ + SetFeesMode { jit_withdraw: true }, + LockAsset { asset: (Parent, 100u128).into(), unlocker: (Parent, Parachain(1)).into() }, + ]); + let hash = fake_message_hash(&message); + let r = + XcmExecutor::::execute_xcm((3u64,), message, hash, Weight::from_parts(50, 50)); + assert_eq!(r, Outcome::Complete(Weight::from_parts(20, 20))); + assert_eq!(asset_list((3u64,)), vec![(Parent, 990u128).into()]); +} + +#[test] +fn lock_should_fail_correctly() { + // Account #3 can execute for free + AllowUnpaidFrom::set(vec![(3u64,).into(), (Parent, Parachain(1)).into()]); + + // #3 wants to lock 100 of the native parent tokens to be unlocked only by parachain ../#1, + // but they don't have any. + let message = Xcm(vec![LockAsset { + asset: (Parent, 100u128).into(), + unlocker: (Parent, Parachain(1)).into(), + }]); + let hash = fake_message_hash(&message); + let r = + XcmExecutor::::execute_xcm((3u64,), message, hash, Weight::from_parts(50, 50)); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(10, 10), XcmError::LockError)); + assert_eq!(sent_xcm(), vec![]); + assert_eq!(take_lock_trace(), vec![]); + + // Account #3 owns 1000 native parent tokens. + add_asset((3u64,), (Parent, 1000u128)); + // But we require a price to be paid for the sending + set_send_price((Parent, 10u128)); + + // #3 wants to lock 100 of the native parent tokens to be unlocked only by parachain ../#1, + // but there's nothing to pay the fees for sending the notification message. + let message = Xcm(vec![LockAsset { + asset: (Parent, 100u128).into(), + unlocker: (Parent, Parachain(1)).into(), + }]); + let hash = fake_message_hash(&message); + let r = + XcmExecutor::::execute_xcm((3u64,), message, hash, Weight::from_parts(50, 50)); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(10, 10), XcmError::NotHoldingFees)); + assert_eq!(sent_xcm(), vec![]); + assert_eq!(take_lock_trace(), vec![]); +} + +#[test] +fn remote_unlock_roundtrip_should_work() { + // Account #3 can execute for free + AllowUnpaidFrom::set(vec![(3u64,).into(), (Parent, Parachain(1)).into()]); + // Account #3 owns 1000 native parent tokens. + add_asset((3u64,), (Parent, 1000u128)); + // Sending a message costs 10 parent-tokens. + set_send_price((Parent, 10u128)); + + // We have been told by Parachain #1 that Account #3 has locked funds which we can unlock. + let message = + Xcm(vec![NoteUnlockable { asset: (Parent, 100u128).into(), owner: (3u64,).into() }]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + (Parent, Parachain(1)), + message, + hash, + Weight::from_parts(50, 50), + ); + assert_eq!(r, Outcome::Complete(Weight::from_parts(10, 10))); + assert_eq!( + take_lock_trace(), + vec![Note { + asset: (Parent, 100u128).into(), + owner: (3u64,).into(), + locker: (Parent, Parachain(1)).into(), + }] + ); + + // Let's request those funds be unlocked. + let message = Xcm(vec![ + WithdrawAsset((Parent, 100u128).into()), + SetAppendix( + vec![DepositAsset { assets: AllCounted(2).into(), beneficiary: (3u64,).into() }].into(), + ), + RequestUnlock { asset: (Parent, 100u128).into(), locker: (Parent, Parachain(1)).into() }, + ]); + let hash = fake_message_hash(&message); + let r = + XcmExecutor::::execute_xcm((3u64,), message, hash, Weight::from_parts(50, 50)); + assert_eq!(r, Outcome::Complete(Weight::from_parts(40, 40))); + assert_eq!(asset_list((3u64,)), vec![(Parent, 990u128).into()]); + + let expected_msg = + Xcm::<()>(vec![UnlockAsset { target: (3u64,).into(), asset: (Parent, 100u128).into() }]); + let expected_hash = fake_message_hash(&expected_msg); + assert_eq!(sent_xcm(), vec![((Parent, Parachain(1)).into(), expected_msg, expected_hash)]); + assert_eq!( + take_lock_trace(), + vec![Reduce { + asset: (Parent, 100u128).into(), + owner: (3u64,).into(), + locker: (Parent, Parachain(1)).into(), + }] + ); +} + +#[test] +fn remote_unlock_should_fail_correctly() { + // Account #3 can execute for free + AllowUnpaidFrom::set(vec![(3u64,).into(), (Parent, Parachain(1)).into()]); + // But we require a price to be paid for the sending + set_send_price((Parent, 10u128)); + + // We want to unlock 100 of the native parent tokens which were locked for us on parachain. + // This won't work as we don't have any record of them being locked for us. + // No message will be sent and no lock records changed. + let message = Xcm(vec![RequestUnlock { + asset: (Parent, 100u128).into(), + locker: (Parent, Parachain(1)).into(), + }]); + let hash = fake_message_hash(&message); + let r = + XcmExecutor::::execute_xcm((3u64,), message, hash, Weight::from_parts(50, 50)); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(10, 10), XcmError::LockError)); + assert_eq!(sent_xcm(), vec![]); + assert_eq!(take_lock_trace(), vec![]); + + // We have been told by Parachain #1 that Account #3 has locked funds which we can unlock. + let message = + Xcm(vec![NoteUnlockable { asset: (Parent, 100u128).into(), owner: (3u64,).into() }]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + (Parent, Parachain(1)), + message, + hash, + Weight::from_parts(50, 50), + ); + assert_eq!(r, Outcome::Complete(Weight::from_parts(10, 10))); + let _discard = take_lock_trace(); + + // We want to unlock 100 of the native parent tokens which were locked for us on parachain. + // This won't work now as we don't have the funds to send the onward message. + // No message will be sent and no lock records changed. + let message = Xcm(vec![RequestUnlock { + asset: (Parent, 100u128).into(), + locker: (Parent, Parachain(1)).into(), + }]); + let hash = fake_message_hash(&message); + let r = + XcmExecutor::::execute_xcm((3u64,), message, hash, Weight::from_parts(50, 50)); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(10, 10), XcmError::NotHoldingFees)); + + assert_eq!(sent_xcm(), vec![]); + assert_eq!(take_lock_trace(), vec![]); +} diff --git a/xcm/xcm-builder/src/tests/mock.rs b/xcm/xcm-builder/src/tests/mock.rs new file mode 100644 index 000000000000..fa85d09a443e --- /dev/null +++ b/xcm/xcm-builder/src/tests/mock.rs @@ -0,0 +1,656 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +use crate::{barriers::AllowSubscriptionsFrom, test_utils::*}; +pub use crate::{ + AllowExplicitUnpaidExecutionFrom, AllowKnownQueryResponses, AllowTopLevelPaidExecutionFrom, + AllowUnpaidExecutionFrom, FixedRateOfFungible, FixedWeightBounds, TakeWeightCredit, +}; +use frame_support::traits::{ContainsPair, Everything}; +pub use frame_support::{ + dispatch::{ + DispatchError, DispatchInfo, DispatchResultWithPostInfo, Dispatchable, GetDispatchInfo, + Parameter, PostDispatchInfo, + }, + ensure, parameter_types, + sp_runtime::DispatchErrorWithPostInfo, + traits::{Contains, Get, IsInVec}, +}; +pub use parity_scale_codec::{Decode, Encode}; +pub use sp_io::hashing::blake2_256; +pub use sp_std::{ + cell::RefCell, + collections::{btree_map::BTreeMap, btree_set::BTreeSet}, + fmt::Debug, + marker::PhantomData, +}; +pub use xcm::latest::{prelude::*, Weight}; +pub use xcm_executor::{ + traits::{ + AssetExchange, AssetLock, ConvertOrigin, Enact, ExportXcm, FeeManager, FeeReason, + LockError, OnResponse, TransactAsset, + }, + Assets, Config, +}; + +pub enum TestOrigin { + Root, + Relay, + Signed(u64), + Parachain(u32), +} + +/// A dummy call. +/// +/// Each item contains the amount of weight that it *wants* to consume as the first item, and the actual amount (if +/// different from the former) in the second option. +#[derive(Debug, Encode, Decode, Eq, PartialEq, Clone, Copy, scale_info::TypeInfo)] +pub enum TestCall { + OnlyRoot(Weight, Option), + OnlyParachain(Weight, Option, Option), + OnlySigned(Weight, Option, Option), + Any(Weight, Option), +} +impl Dispatchable for TestCall { + type RuntimeOrigin = TestOrigin; + type Config = (); + type Info = (); + type PostInfo = PostDispatchInfo; + fn dispatch(self, origin: Self::RuntimeOrigin) -> DispatchResultWithPostInfo { + let mut post_info = PostDispatchInfo::default(); + let maybe_actual = match self { + TestCall::OnlyRoot(_, maybe_actual) | + TestCall::OnlySigned(_, maybe_actual, _) | + TestCall::OnlyParachain(_, maybe_actual, _) | + TestCall::Any(_, maybe_actual) => maybe_actual, + }; + post_info.actual_weight = maybe_actual; + if match (&origin, &self) { + (TestOrigin::Parachain(i), TestCall::OnlyParachain(_, _, Some(j))) => i == j, + (TestOrigin::Signed(i), TestCall::OnlySigned(_, _, Some(j))) => i == j, + (TestOrigin::Root, TestCall::OnlyRoot(..)) | + (TestOrigin::Parachain(_), TestCall::OnlyParachain(_, _, None)) | + (TestOrigin::Signed(_), TestCall::OnlySigned(_, _, None)) | + (_, TestCall::Any(..)) => true, + _ => false, + } { + Ok(post_info) + } else { + Err(DispatchErrorWithPostInfo { error: DispatchError::BadOrigin, post_info }) + } + } +} + +impl GetDispatchInfo for TestCall { + fn get_dispatch_info(&self) -> DispatchInfo { + let weight = *match self { + TestCall::OnlyRoot(estimate, ..) | + TestCall::OnlyParachain(estimate, ..) | + TestCall::OnlySigned(estimate, ..) | + TestCall::Any(estimate, ..) => estimate, + }; + DispatchInfo { weight, ..Default::default() } + } +} + +thread_local! { + pub static SENT_XCM: RefCell, XcmHash)>> = RefCell::new(Vec::new()); + pub static EXPORTED_XCM: RefCell< + Vec<(NetworkId, u32, InteriorMultiLocation, InteriorMultiLocation, Xcm<()>, XcmHash)> + > = RefCell::new(Vec::new()); + pub static EXPORTER_OVERRIDE: RefCell, + ) -> Result, + fn( + NetworkId, + u32, + InteriorMultiLocation, + InteriorMultiLocation, + Xcm<()>, + ) -> Result, + )>> = RefCell::new(None); + pub static SEND_PRICE: RefCell = RefCell::new(MultiAssets::new()); +} +pub fn sent_xcm() -> Vec<(MultiLocation, opaque::Xcm, XcmHash)> { + SENT_XCM.with(|q| (*q.borrow()).clone()) +} +pub fn set_send_price(p: impl Into) { + SEND_PRICE.with(|l| l.replace(p.into().into())); +} +pub fn exported_xcm( +) -> Vec<(NetworkId, u32, InteriorMultiLocation, InteriorMultiLocation, opaque::Xcm, XcmHash)> { + EXPORTED_XCM.with(|q| (*q.borrow()).clone()) +} +pub fn set_exporter_override( + price: fn( + NetworkId, + u32, + &InteriorMultiLocation, + &InteriorMultiLocation, + &Xcm<()>, + ) -> Result, + deliver: fn( + NetworkId, + u32, + InteriorMultiLocation, + InteriorMultiLocation, + Xcm<()>, + ) -> Result, +) { + EXPORTER_OVERRIDE.with(|x| x.replace(Some((price, deliver)))); +} +#[allow(dead_code)] +pub fn clear_exporter_override() { + EXPORTER_OVERRIDE.with(|x| x.replace(None)); +} +pub struct TestMessageSender; +impl SendXcm for TestMessageSender { + type Ticket = (MultiLocation, Xcm<()>, XcmHash); + fn validate( + dest: &mut Option, + msg: &mut Option>, + ) -> SendResult<(MultiLocation, Xcm<()>, XcmHash)> { + let msg = msg.take().unwrap(); + let hash = fake_message_hash(&msg); + let triplet = (dest.take().unwrap(), msg, hash); + Ok((triplet, SEND_PRICE.with(|l| l.borrow().clone()))) + } + fn deliver(triplet: (MultiLocation, Xcm<()>, XcmHash)) -> Result { + let hash = triplet.2; + SENT_XCM.with(|q| q.borrow_mut().push(triplet)); + Ok(hash) + } +} +pub struct TestMessageExporter; +impl ExportXcm for TestMessageExporter { + type Ticket = (NetworkId, u32, InteriorMultiLocation, InteriorMultiLocation, Xcm<()>, XcmHash); + fn validate( + network: NetworkId, + channel: u32, + uni_src: &mut Option, + dest: &mut Option, + msg: &mut Option>, + ) -> SendResult<(NetworkId, u32, InteriorMultiLocation, InteriorMultiLocation, Xcm<()>, XcmHash)> + { + let (s, d, m) = (uni_src.take().unwrap(), dest.take().unwrap(), msg.take().unwrap()); + let r: Result = EXPORTER_OVERRIDE.with(|e| { + if let Some((ref f, _)) = &*e.borrow() { + f(network, channel, &s, &d, &m) + } else { + Ok(MultiAssets::new()) + } + }); + let h = fake_message_hash(&m); + match r { + Ok(price) => Ok(((network, channel, s, d, m, h), price)), + Err(e) => { + *uni_src = Some(s); + *dest = Some(d); + *msg = Some(m); + Err(e) + }, + } + } + fn deliver( + tuple: (NetworkId, u32, InteriorMultiLocation, InteriorMultiLocation, Xcm<()>, XcmHash), + ) -> Result { + EXPORTER_OVERRIDE.with(|e| { + if let Some((_, ref f)) = &*e.borrow() { + let (network, channel, uni_src, dest, msg, _hash) = tuple; + f(network, channel, uni_src, dest, msg) + } else { + let hash = tuple.5; + EXPORTED_XCM.with(|q| q.borrow_mut().push(tuple)); + Ok(hash) + } + }) + } +} + +thread_local! { + pub static ASSETS: RefCell> = RefCell::new(BTreeMap::new()); +} +pub fn assets(who: impl Into) -> Assets { + ASSETS.with(|a| a.borrow().get(&who.into()).cloned()).unwrap_or_default() +} +pub fn asset_list(who: impl Into) -> Vec { + MultiAssets::from(assets(who)).into_inner() +} +pub fn add_asset(who: impl Into, what: impl Into) { + ASSETS.with(|a| a.borrow_mut().entry(who.into()).or_insert(Assets::new()).subsume(what.into())); +} + +pub struct TestAssetTransactor; +impl TransactAsset for TestAssetTransactor { + fn deposit_asset( + what: &MultiAsset, + who: &MultiLocation, + _context: &XcmContext, + ) -> Result<(), XcmError> { + add_asset(who.clone(), what.clone()); + Ok(()) + } + + fn withdraw_asset( + what: &MultiAsset, + who: &MultiLocation, + _maybe_context: Option<&XcmContext>, + ) -> Result { + ASSETS.with(|a| { + a.borrow_mut() + .get_mut(who) + .ok_or(XcmError::NotWithdrawable)? + .try_take(what.clone().into()) + .map_err(|_| XcmError::NotWithdrawable) + }) + } +} + +pub fn to_account(l: impl Into) -> Result { + Ok(match l.into() { + // Siblings at 2000+id + MultiLocation { parents: 1, interior: X1(Parachain(id)) } => 2000 + id as u64, + // Accounts are their number + MultiLocation { parents: 0, interior: X1(AccountIndex64 { index, .. }) } => index, + // Children at 1000+id + MultiLocation { parents: 0, interior: X1(Parachain(id)) } => 1000 + id as u64, + // Self at 3000 + MultiLocation { parents: 0, interior: Here } => 3000, + // Parent at 3001 + MultiLocation { parents: 1, interior: Here } => 3001, + l => { + // Is it a foreign-consensus? + let uni = ExecutorUniversalLocation::get(); + if l.parents as usize != uni.len() { + return Err(l) + } + match l.first_interior() { + Some(GlobalConsensus(Kusama)) => 4000, + Some(GlobalConsensus(Polkadot)) => 4001, + _ => return Err(l), + } + }, + }) +} + +pub struct TestOriginConverter; +impl ConvertOrigin for TestOriginConverter { + fn convert_origin( + origin: impl Into, + kind: OriginKind, + ) -> Result { + use OriginKind::*; + match (kind, origin.into()) { + (Superuser, _) => Ok(TestOrigin::Root), + (SovereignAccount, l) => Ok(TestOrigin::Signed(to_account(l)?)), + (Native, MultiLocation { parents: 0, interior: X1(Parachain(id)) }) => + Ok(TestOrigin::Parachain(id)), + (Native, MultiLocation { parents: 1, interior: Here }) => Ok(TestOrigin::Relay), + (Native, MultiLocation { parents: 0, interior: X1(AccountIndex64 { index, .. }) }) => + Ok(TestOrigin::Signed(index)), + (_, origin) => Err(origin), + } + } +} + +thread_local! { + pub static IS_RESERVE: RefCell>> = RefCell::new(BTreeMap::new()); + pub static IS_TELEPORTER: RefCell>> = RefCell::new(BTreeMap::new()); + pub static UNIVERSAL_ALIASES: RefCell> = RefCell::new(BTreeSet::new()); +} +pub fn add_reserve(from: MultiLocation, asset: MultiAssetFilter) { + IS_RESERVE.with(|r| r.borrow_mut().entry(from).or_default().push(asset)); +} +#[allow(dead_code)] +pub fn add_teleporter(from: MultiLocation, asset: MultiAssetFilter) { + IS_TELEPORTER.with(|r| r.borrow_mut().entry(from).or_default().push(asset)); +} +pub fn add_universal_alias(bridge: impl Into, consensus: impl Into) { + UNIVERSAL_ALIASES.with(|r| r.borrow_mut().insert((bridge.into(), consensus.into()))); +} +pub fn clear_universal_aliases() { + UNIVERSAL_ALIASES.with(|r| r.replace(Default::default())); +} + +pub struct TestIsReserve; +impl ContainsPair for TestIsReserve { + fn contains(asset: &MultiAsset, origin: &MultiLocation) -> bool { + IS_RESERVE + .with(|r| r.borrow().get(origin).map_or(false, |v| v.iter().any(|a| a.matches(asset)))) + } +} +pub struct TestIsTeleporter; +impl ContainsPair for TestIsTeleporter { + fn contains(asset: &MultiAsset, origin: &MultiLocation) -> bool { + IS_TELEPORTER + .with(|r| r.borrow().get(origin).map_or(false, |v| v.iter().any(|a| a.matches(asset)))) + } +} + +pub struct TestUniversalAliases; +impl Contains<(MultiLocation, Junction)> for TestUniversalAliases { + fn contains(t: &(MultiLocation, Junction)) -> bool { + UNIVERSAL_ALIASES.with(|r| r.borrow().contains(t)) + } +} + +pub enum ResponseSlot { + Expecting(MultiLocation), + Received(Response), +} +thread_local! { + pub static QUERIES: RefCell> = RefCell::new(BTreeMap::new()); +} +pub struct TestResponseHandler; +impl OnResponse for TestResponseHandler { + fn expecting_response( + origin: &MultiLocation, + query_id: u64, + _querier: Option<&MultiLocation>, + ) -> bool { + QUERIES.with(|q| match q.borrow().get(&query_id) { + Some(ResponseSlot::Expecting(ref l)) => l == origin, + _ => false, + }) + } + fn on_response( + _origin: &MultiLocation, + query_id: u64, + _querier: Option<&MultiLocation>, + response: xcm::latest::Response, + _max_weight: Weight, + _context: &XcmContext, + ) -> Weight { + QUERIES.with(|q| { + q.borrow_mut().entry(query_id).and_modify(|v| { + if matches!(*v, ResponseSlot::Expecting(..)) { + *v = ResponseSlot::Received(response); + } + }); + }); + Weight::from_parts(10, 10) + } +} +pub fn expect_response(query_id: u64, from: MultiLocation) { + QUERIES.with(|q| q.borrow_mut().insert(query_id, ResponseSlot::Expecting(from))); +} +pub fn response(query_id: u64) -> Option { + QUERIES.with(|q| { + q.borrow().get(&query_id).and_then(|v| match v { + ResponseSlot::Received(r) => Some(r.clone()), + _ => None, + }) + }) +} + +parameter_types! { + pub static ExecutorUniversalLocation: InteriorMultiLocation + = (ByGenesis([0; 32]), Parachain(42)).into(); + pub UnitWeightCost: Weight = Weight::from_parts(10, 10); +} +parameter_types! { + // Nothing is allowed to be paid/unpaid by default. + pub static AllowExplicitUnpaidFrom: Vec = vec![]; + pub static AllowUnpaidFrom: Vec = vec![]; + pub static AllowPaidFrom: Vec = vec![]; + pub static AllowSubsFrom: Vec = vec![]; + // 1_000_000_000_000 => 1 unit of asset for 1 unit of ref time weight. + // 1024 * 1024 => 1 unit of asset for 1 unit of proof size weight. + pub static WeightPrice: (AssetId, u128, u128) = + (From::from(Here), 1_000_000_000_000, 1024 * 1024); + pub static MaxInstructions: u32 = 100; +} + +pub type TestBarrier = ( + TakeWeightCredit, + AllowKnownQueryResponses, + AllowTopLevelPaidExecutionFrom>, + AllowExplicitUnpaidExecutionFrom>, + AllowUnpaidExecutionFrom>, + AllowSubscriptionsFrom>, +); + +thread_local! { + pub static IS_WAIVED: RefCell> = RefCell::new(vec![]); +} +#[allow(dead_code)] +pub fn set_fee_waiver(waived: Vec) { + IS_WAIVED.with(|l| l.replace(waived)); +} + +pub struct TestFeeManager; +impl FeeManager for TestFeeManager { + fn is_waived(_: Option<&MultiLocation>, r: FeeReason) -> bool { + IS_WAIVED.with(|l| l.borrow().contains(&r)) + } + fn handle_fee(_: MultiAssets) {} +} + +#[derive(Clone, Eq, PartialEq, Debug)] +pub enum LockTraceItem { + Lock { unlocker: MultiLocation, asset: MultiAsset, owner: MultiLocation }, + Unlock { unlocker: MultiLocation, asset: MultiAsset, owner: MultiLocation }, + Note { locker: MultiLocation, asset: MultiAsset, owner: MultiLocation }, + Reduce { locker: MultiLocation, asset: MultiAsset, owner: MultiLocation }, +} +thread_local! { + pub static NEXT_INDEX: RefCell = RefCell::new(0); + pub static LOCK_TRACE: RefCell> = RefCell::new(Vec::new()); + pub static ALLOWED_UNLOCKS: RefCell> = RefCell::new(BTreeMap::new()); + pub static ALLOWED_REQUEST_UNLOCKS: RefCell> = RefCell::new(BTreeMap::new()); +} + +pub fn take_lock_trace() -> Vec { + LOCK_TRACE.with(|l| l.replace(Vec::new())) +} +pub fn allow_unlock( + unlocker: impl Into, + asset: impl Into, + owner: impl Into, +) { + ALLOWED_UNLOCKS.with(|l| { + l.borrow_mut() + .entry((owner.into(), unlocker.into())) + .or_default() + .subsume(asset.into()) + }); +} +pub fn disallow_unlock( + unlocker: impl Into, + asset: impl Into, + owner: impl Into, +) { + ALLOWED_UNLOCKS.with(|l| { + l.borrow_mut() + .entry((owner.into(), unlocker.into())) + .or_default() + .saturating_take(asset.into().into()) + }); +} +pub fn unlock_allowed(unlocker: &MultiLocation, asset: &MultiAsset, owner: &MultiLocation) -> bool { + ALLOWED_UNLOCKS.with(|l| { + l.borrow_mut() + .get(&(owner.clone(), unlocker.clone())) + .map_or(false, |x| x.contains_asset(asset)) + }) +} +pub fn allow_request_unlock( + locker: impl Into, + asset: impl Into, + owner: impl Into, +) { + ALLOWED_REQUEST_UNLOCKS.with(|l| { + l.borrow_mut() + .entry((owner.into(), locker.into())) + .or_default() + .subsume(asset.into()) + }); +} +pub fn disallow_request_unlock( + locker: impl Into, + asset: impl Into, + owner: impl Into, +) { + ALLOWED_REQUEST_UNLOCKS.with(|l| { + l.borrow_mut() + .entry((owner.into(), locker.into())) + .or_default() + .saturating_take(asset.into().into()) + }); +} +pub fn request_unlock_allowed( + locker: &MultiLocation, + asset: &MultiAsset, + owner: &MultiLocation, +) -> bool { + ALLOWED_REQUEST_UNLOCKS.with(|l| { + l.borrow_mut() + .get(&(owner.clone(), locker.clone())) + .map_or(false, |x| x.contains_asset(asset)) + }) +} + +pub struct TestTicket(LockTraceItem); +impl Enact for TestTicket { + fn enact(self) -> Result<(), LockError> { + match &self.0 { + LockTraceItem::Lock { unlocker, asset, owner } => + allow_unlock(unlocker.clone(), asset.clone(), owner.clone()), + LockTraceItem::Unlock { unlocker, asset, owner } => + disallow_unlock(unlocker.clone(), asset.clone(), owner.clone()), + LockTraceItem::Reduce { locker, asset, owner } => + disallow_request_unlock(locker.clone(), asset.clone(), owner.clone()), + _ => {}, + } + LOCK_TRACE.with(move |l| l.borrow_mut().push(self.0)); + Ok(()) + } +} + +pub struct TestAssetLock; +impl AssetLock for TestAssetLock { + type LockTicket = TestTicket; + type UnlockTicket = TestTicket; + type ReduceTicket = TestTicket; + + fn prepare_lock( + unlocker: MultiLocation, + asset: MultiAsset, + owner: MultiLocation, + ) -> Result { + ensure!(assets(owner.clone()).contains_asset(&asset), LockError::AssetNotOwned); + Ok(TestTicket(LockTraceItem::Lock { unlocker, asset, owner })) + } + + fn prepare_unlock( + unlocker: MultiLocation, + asset: MultiAsset, + owner: MultiLocation, + ) -> Result { + ensure!(unlock_allowed(&unlocker, &asset, &owner), LockError::NotLocked); + Ok(TestTicket(LockTraceItem::Unlock { unlocker, asset, owner })) + } + + fn note_unlockable( + locker: MultiLocation, + asset: MultiAsset, + owner: MultiLocation, + ) -> Result<(), LockError> { + allow_request_unlock(locker.clone(), asset.clone(), owner.clone()); + let item = LockTraceItem::Note { locker, asset, owner }; + LOCK_TRACE.with(move |l| l.borrow_mut().push(item)); + Ok(()) + } + + fn prepare_reduce_unlockable( + locker: MultiLocation, + asset: MultiAsset, + owner: MultiLocation, + ) -> Result { + ensure!(request_unlock_allowed(&locker, &asset, &owner), LockError::NotLocked); + Ok(TestTicket(LockTraceItem::Reduce { locker, asset, owner })) + } +} + +thread_local! { + pub static EXCHANGE_ASSETS: RefCell = RefCell::new(Assets::new()); +} +pub fn set_exchange_assets(assets: impl Into) { + EXCHANGE_ASSETS.with(|a| a.replace(assets.into().into())); +} +pub fn exchange_assets() -> MultiAssets { + EXCHANGE_ASSETS.with(|a| a.borrow().clone().into()) +} +pub struct TestAssetExchange; +impl AssetExchange for TestAssetExchange { + fn exchange_asset( + _origin: Option<&MultiLocation>, + give: Assets, + want: &MultiAssets, + maximal: bool, + ) -> Result { + let mut have = EXCHANGE_ASSETS.with(|l| l.borrow().clone()); + ensure!(have.contains_assets(want), give); + let get = if maximal { + std::mem::replace(&mut have, Assets::new()) + } else { + have.saturating_take(want.clone().into()) + }; + have.subsume_assets(give); + EXCHANGE_ASSETS.with(|l| l.replace(have)); + Ok(get) + } +} + +pub struct TestConfig; +impl Config for TestConfig { + type RuntimeCall = TestCall; + type XcmSender = TestMessageSender; + type AssetTransactor = TestAssetTransactor; + type OriginConverter = TestOriginConverter; + type IsReserve = TestIsReserve; + type IsTeleporter = TestIsTeleporter; + type UniversalLocation = ExecutorUniversalLocation; + type Barrier = TestBarrier; + type Weigher = FixedWeightBounds; + type Trader = FixedRateOfFungible; + type ResponseHandler = TestResponseHandler; + type AssetTrap = TestAssetTrap; + type AssetLocker = TestAssetLock; + type AssetExchanger = TestAssetExchange; + type AssetClaims = TestAssetTrap; + type SubscriptionService = TestSubscriptionService; + type PalletInstancesInfo = TestPalletsInfo; + type MaxAssetsIntoHolding = MaxAssetsIntoHolding; + type FeeManager = TestFeeManager; + type UniversalAliases = TestUniversalAliases; + type MessageExporter = TestMessageExporter; + type CallDispatcher = TestCall; + type SafeCallFilter = Everything; +} + +pub fn fungible_multi_asset(location: MultiLocation, amount: u128) -> MultiAsset { + (AssetId::from(location), Fungibility::Fungible(amount)).into() +} + +pub fn fake_message_hash(message: &Xcm) -> XcmHash { + message.using_encoded(sp_io::hashing::blake2_256) +} diff --git a/xcm/procedural/src/v1.rs b/xcm/xcm-builder/src/tests/mod.rs similarity index 56% rename from xcm/procedural/src/v1.rs rename to xcm/xcm-builder/src/tests/mod.rs index 7774df4e9f8f..cc83d9d5ac98 100644 --- a/xcm/procedural/src/v1.rs +++ b/xcm/xcm-builder/src/tests/mod.rs @@ -1,4 +1,4 @@ -// Copyright 2021 Parity Technologies (UK) Ltd. +// Copyright 2022 Parity Technologies (UK) Ltd. // This file is part of Polkadot. // Polkadot is free software: you can redistribute it and/or modify @@ -14,4 +14,26 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -pub mod multilocation; +use super::{test_utils::*, *}; +use core::convert::TryInto; +use frame_support::{ + assert_err, + traits::{ConstU32, ContainsPair}, + weights::constants::{WEIGHT_PROOF_SIZE_PER_MB, WEIGHT_REF_TIME_PER_SECOND}, +}; +use xcm_executor::{traits::prelude::*, Config, XcmExecutor}; + +mod mock; +use mock::*; + +mod assets; +mod barriers; +mod basic; +mod bridging; +mod expecting; +mod locking; +mod origins; +mod querying; +mod transacting; +mod version_subscriptions; +mod weight; diff --git a/xcm/xcm-builder/src/tests/origins.rs b/xcm/xcm-builder/src/tests/origins.rs new file mode 100644 index 000000000000..a7454a4f423e --- /dev/null +++ b/xcm/xcm-builder/src/tests/origins.rs @@ -0,0 +1,140 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +use super::*; + +#[test] +fn universal_origin_should_work() { + AllowUnpaidFrom::set(vec![X1(Parachain(1)).into(), X1(Parachain(2)).into()]); + clear_universal_aliases(); + // Parachain 1 may represent Kusama to us + add_universal_alias(Parachain(1), Kusama); + // Parachain 2 may represent Polkadot to us + add_universal_alias(Parachain(2), Polkadot); + + let message = Xcm(vec![ + UniversalOrigin(GlobalConsensus(Kusama)), + TransferAsset { assets: (Parent, 100u128).into(), beneficiary: Here.into() }, + ]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(2), + message, + hash, + Weight::from_parts(50, 50), + ); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(10, 10), XcmError::InvalidLocation)); + + let message = Xcm(vec![ + UniversalOrigin(GlobalConsensus(Kusama)), + TransferAsset { assets: (Parent, 100u128).into(), beneficiary: Here.into() }, + ]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(50, 50), + ); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(20, 20), XcmError::NotWithdrawable)); + + add_asset((Ancestor(2), GlobalConsensus(Kusama)), (Parent, 100)); + let message = Xcm(vec![ + UniversalOrigin(GlobalConsensus(Kusama)), + TransferAsset { assets: (Parent, 100u128).into(), beneficiary: Here.into() }, + ]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(50, 50), + ); + assert_eq!(r, Outcome::Complete(Weight::from_parts(20, 20))); + assert_eq!(asset_list((Ancestor(2), GlobalConsensus(Kusama))), vec![]); +} + +#[test] +fn export_message_should_work() { + // Bridge chain (assumed to be Relay) lets Parachain #1 have message execution for free. + AllowUnpaidFrom::set(vec![X1(Parachain(1)).into()]); + // Local parachain #1 issues a transfer asset on Polkadot Relay-chain, transfering 100 Planck to + // Polkadot parachain #2. + let expected_message = Xcm(vec![TransferAsset { + assets: (Here, 100u128).into(), + beneficiary: Parachain(2).into(), + }]); + let expected_hash = fake_message_hash(&expected_message); + let message = Xcm(vec![ExportMessage { + network: Polkadot, + destination: Here, + xcm: expected_message.clone(), + }]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(50, 50), + ); + assert_eq!(r, Outcome::Complete(Weight::from_parts(10, 10))); + let uni_src = (ByGenesis([0; 32]), Parachain(42), Parachain(1)).into(); + assert_eq!( + exported_xcm(), + vec![(Polkadot, 403611790, uni_src, Here, expected_message, expected_hash)] + ); +} + +#[test] +fn unpaid_execution_should_work() { + // Bridge chain (assumed to be Relay) lets Parachain #1 have message execution for free. + AllowUnpaidFrom::set(vec![X1(Parachain(1)).into()]); + // Bridge chain (assumed to be Relay) lets Parachain #2 have message execution for free if it + // asks. + AllowExplicitUnpaidFrom::set(vec![X1(Parachain(2)).into()]); + // Asking for unpaid execution of up to 9 weight on the assumption it is origin of #2. + let message = Xcm(vec![UnpaidExecution { + weight_limit: Limited(Weight::from_parts(9, 9)), + check_origin: Some(Parachain(2).into()), + }]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message.clone(), + hash, + Weight::from_parts(50, 50), + ); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(10, 10), XcmError::BadOrigin)); + let r = XcmExecutor::::execute_xcm( + Parachain(2), + message.clone(), + hash, + Weight::from_parts(50, 50), + ); + assert_eq!(r, Outcome::Error(XcmError::Barrier)); + + let message = Xcm(vec![UnpaidExecution { + weight_limit: Limited(Weight::from_parts(10, 10)), + check_origin: Some(Parachain(2).into()), + }]); + let r = XcmExecutor::::execute_xcm( + Parachain(2), + message.clone(), + hash, + Weight::from_parts(50, 50), + ); + assert_eq!(r, Outcome::Complete(Weight::from_parts(10, 10))); +} diff --git a/xcm/xcm-builder/src/tests/querying.rs b/xcm/xcm-builder/src/tests/querying.rs new file mode 100644 index 000000000000..9bd81763fed4 --- /dev/null +++ b/xcm/xcm-builder/src/tests/querying.rs @@ -0,0 +1,119 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +use super::*; + +#[test] +fn pallet_query_should_work() { + AllowUnpaidFrom::set(vec![X1(Parachain(1)).into()]); + // They want to transfer 100 of our native asset from sovereign account of parachain #1 into #2 + // and let them know to hand it to account #3. + let message = Xcm(vec![QueryPallet { + module_name: "Error".into(), + response_info: QueryResponseInfo { + destination: Parachain(1).into(), + query_id: 1, + max_weight: Weight::from_parts(50, 50), + }, + }]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(50, 50), + ); + assert_eq!(r, Outcome::Complete(Weight::from_parts(10, 10))); + + let expected_msg = Xcm::<()>(vec![QueryResponse { + query_id: 1, + max_weight: Weight::from_parts(50, 50), + response: Response::PalletsInfo(Default::default()), + querier: Some(Here.into()), + }]); + let expected_hash = fake_message_hash(&expected_msg); + assert_eq!(sent_xcm(), vec![(Parachain(1).into(), expected_msg, expected_hash)]); +} + +#[test] +fn pallet_query_with_results_should_work() { + AllowUnpaidFrom::set(vec![X1(Parachain(1)).into()]); + // They want to transfer 100 of our native asset from sovereign account of parachain #1 into #2 + // and let them know to hand it to account #3. + let message = Xcm(vec![QueryPallet { + module_name: "pallet_balances".into(), + response_info: QueryResponseInfo { + destination: Parachain(1).into(), + query_id: 1, + max_weight: Weight::from_parts(50, 50), + }, + }]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm( + Parachain(1), + message, + hash, + Weight::from_parts(50, 50), + ); + assert_eq!(r, Outcome::Complete(Weight::from_parts(10, 10))); + + let expected_msg = Xcm::<()>(vec![QueryResponse { + query_id: 1, + max_weight: Weight::from_parts(50, 50), + response: Response::PalletsInfo( + vec![PalletInfo::new( + 1, + b"Balances".as_ref().into(), + b"pallet_balances".as_ref().into(), + 1, + 42, + 69, + ) + .unwrap()] + .try_into() + .unwrap(), + ), + querier: Some(Here.into()), + }]); + let expected_hash = fake_message_hash(&expected_msg); + assert_eq!(sent_xcm(), vec![(Parachain(1).into(), expected_msg, expected_hash)]); +} + +#[test] +fn prepaid_result_of_query_should_get_free_execution() { + let query_id = 33; + // We put this in manually here, but normally this would be done at the point of crafting the message. + expect_response(query_id, Parent.into()); + + let the_response = Response::Assets((Parent, 100u128).into()); + let message = Xcm::(vec![QueryResponse { + query_id, + response: the_response.clone(), + max_weight: Weight::from_parts(10, 10), + querier: Some(Here.into()), + }]); + let hash = fake_message_hash(&message); + let weight_limit = Weight::from_parts(10, 10); + + // First time the response gets through since we're expecting it... + let r = XcmExecutor::::execute_xcm(Parent, message.clone(), hash, weight_limit); + assert_eq!(r, Outcome::Complete(Weight::from_parts(10, 10))); + assert_eq!(response(query_id).unwrap(), the_response); + + // Second time it doesn't, since we're not. + let r = XcmExecutor::::execute_xcm(Parent, message.clone(), hash, weight_limit); + assert_eq!(r, Outcome::Error(XcmError::Barrier)); +} diff --git a/xcm/xcm-builder/src/tests/transacting.rs b/xcm/xcm-builder/src/tests/transacting.rs new file mode 100644 index 000000000000..dd1ba7b1c922 --- /dev/null +++ b/xcm/xcm-builder/src/tests/transacting.rs @@ -0,0 +1,250 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +use super::*; + +#[test] +fn transacting_should_work() { + AllowUnpaidFrom::set(vec![Parent.into()]); + + let message = Xcm::(vec![Transact { + origin_kind: OriginKind::Native, + require_weight_at_most: Weight::from_parts(50, 50), + call: TestCall::Any(Weight::from_parts(50, 50), None).encode().into(), + }]); + let hash = fake_message_hash(&message); + let weight_limit = Weight::from_parts(60, 60); + let r = XcmExecutor::::execute_xcm(Parent, message, hash, weight_limit); + assert_eq!(r, Outcome::Complete(Weight::from_parts(60, 60))); +} + +#[test] +fn transacting_should_respect_max_weight_requirement() { + AllowUnpaidFrom::set(vec![Parent.into()]); + + let message = Xcm::(vec![Transact { + origin_kind: OriginKind::Native, + require_weight_at_most: Weight::from_parts(40, 40), + call: TestCall::Any(Weight::from_parts(50, 50), None).encode().into(), + }]); + let hash = fake_message_hash(&message); + let weight_limit = Weight::from_parts(60, 60); + let r = XcmExecutor::::execute_xcm(Parent, message, hash, weight_limit); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(50, 50), XcmError::MaxWeightInvalid)); +} + +#[test] +fn transacting_should_refund_weight() { + AllowUnpaidFrom::set(vec![Parent.into()]); + + let message = Xcm::(vec![Transact { + origin_kind: OriginKind::Native, + require_weight_at_most: Weight::from_parts(50, 50), + call: TestCall::Any(Weight::from_parts(50, 50), Some(Weight::from_parts(30, 30))) + .encode() + .into(), + }]); + let hash = fake_message_hash(&message); + let weight_limit = Weight::from_parts(60, 60); + let r = XcmExecutor::::execute_xcm(Parent, message, hash, weight_limit); + assert_eq!(r, Outcome::Complete(Weight::from_parts(40, 40))); +} + +#[test] +fn paid_transacting_should_refund_payment_for_unused_weight() { + let one: MultiLocation = AccountIndex64 { index: 1, network: None }.into(); + AllowPaidFrom::set(vec![one.clone()]); + add_asset(AccountIndex64 { index: 1, network: None }, (Parent, 200u128)); + WeightPrice::set((Parent.into(), 1_000_000_000_000, 1024 * 1024)); + + let origin = one.clone(); + let fees = (Parent, 200u128).into(); + let message = Xcm::(vec![ + WithdrawAsset((Parent, 200u128).into()), // enough for 200 units of weight. + BuyExecution { fees, weight_limit: Limited(Weight::from_parts(100, 100)) }, + Transact { + origin_kind: OriginKind::Native, + require_weight_at_most: Weight::from_parts(50, 50), + // call estimated at 50 but only takes 10. + call: TestCall::Any(Weight::from_parts(50, 50), Some(Weight::from_parts(10, 10))) + .encode() + .into(), + }, + RefundSurplus, + DepositAsset { assets: AllCounted(1).into(), beneficiary: one.clone() }, + ]); + let hash = fake_message_hash(&message); + let weight_limit = Weight::from_parts(100, 100); + let r = XcmExecutor::::execute_xcm(origin, message, hash, weight_limit); + assert_eq!(r, Outcome::Complete(Weight::from_parts(60, 60))); + assert_eq!( + asset_list(AccountIndex64 { index: 1, network: None }), + vec![(Parent, 80u128).into()] + ); +} + +#[test] +fn report_successful_transact_status_should_work() { + AllowUnpaidFrom::set(vec![Parent.into()]); + + let message = Xcm::(vec![ + Transact { + origin_kind: OriginKind::Native, + require_weight_at_most: Weight::from_parts(50, 50), + call: TestCall::Any(Weight::from_parts(50, 50), None).encode().into(), + }, + ReportTransactStatus(QueryResponseInfo { + destination: Parent.into(), + query_id: 42, + max_weight: Weight::from_parts(5000, 5000), + }), + ]); + let hash = fake_message_hash(&message); + let weight_limit = Weight::from_parts(70, 70); + let r = XcmExecutor::::execute_xcm(Parent, message, hash, weight_limit); + assert_eq!(r, Outcome::Complete(Weight::from_parts(70, 70))); + let expected_msg = Xcm(vec![QueryResponse { + response: Response::DispatchResult(MaybeErrorCode::Success), + query_id: 42, + max_weight: Weight::from_parts(5000, 5000), + querier: Some(Here.into()), + }]); + let expected_hash = fake_message_hash(&expected_msg); + assert_eq!(sent_xcm(), vec![(Parent.into(), expected_msg, expected_hash)]); +} + +#[test] +fn report_failed_transact_status_should_work() { + AllowUnpaidFrom::set(vec![Parent.into()]); + + let message = Xcm::(vec![ + Transact { + origin_kind: OriginKind::Native, + require_weight_at_most: Weight::from_parts(50, 50), + call: TestCall::OnlyRoot(Weight::from_parts(50, 50), None).encode().into(), + }, + ReportTransactStatus(QueryResponseInfo { + destination: Parent.into(), + query_id: 42, + max_weight: Weight::from_parts(5000, 5000), + }), + ]); + let hash = fake_message_hash(&message); + let weight_limit = Weight::from_parts(70, 70); + let r = XcmExecutor::::execute_xcm(Parent, message, hash, weight_limit); + assert_eq!(r, Outcome::Complete(Weight::from_parts(70, 70))); + let expected_msg = Xcm(vec![QueryResponse { + response: Response::DispatchResult(vec![2].into()), + query_id: 42, + max_weight: Weight::from_parts(5000, 5000), + querier: Some(Here.into()), + }]); + let expected_hash = fake_message_hash(&expected_msg); + assert_eq!(sent_xcm(), vec![(Parent.into(), expected_msg, expected_hash)]); +} + +#[test] +fn expect_successful_transact_status_should_work() { + AllowUnpaidFrom::set(vec![Parent.into()]); + + let message = Xcm::(vec![ + Transact { + origin_kind: OriginKind::Native, + require_weight_at_most: Weight::from_parts(50, 50), + call: TestCall::Any(Weight::from_parts(50, 50), None).encode().into(), + }, + ExpectTransactStatus(MaybeErrorCode::Success), + ]); + let hash = fake_message_hash(&message); + let weight_limit = Weight::from_parts(70, 70); + let r = XcmExecutor::::execute_xcm(Parent, message, hash, weight_limit); + assert_eq!(r, Outcome::Complete(Weight::from_parts(70, 70))); + + let message = Xcm::(vec![ + Transact { + origin_kind: OriginKind::Native, + require_weight_at_most: Weight::from_parts(50, 50), + call: TestCall::OnlyRoot(Weight::from_parts(50, 50), None).encode().into(), + }, + ExpectTransactStatus(MaybeErrorCode::Success), + ]); + let hash = fake_message_hash(&message); + let weight_limit = Weight::from_parts(70, 70); + let r = XcmExecutor::::execute_xcm(Parent, message, hash, weight_limit); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(70, 70), XcmError::ExpectationFalse)); +} + +#[test] +fn expect_failed_transact_status_should_work() { + AllowUnpaidFrom::set(vec![Parent.into()]); + + let message = Xcm::(vec![ + Transact { + origin_kind: OriginKind::Native, + require_weight_at_most: Weight::from_parts(50, 50), + call: TestCall::OnlyRoot(Weight::from_parts(50, 50), None).encode().into(), + }, + ExpectTransactStatus(vec![2].into()), + ]); + let hash = fake_message_hash(&message); + let weight_limit = Weight::from_parts(70, 70); + let r = XcmExecutor::::execute_xcm(Parent, message, hash, weight_limit); + assert_eq!(r, Outcome::Complete(Weight::from_parts(70, 70))); + + let message = Xcm::(vec![ + Transact { + origin_kind: OriginKind::Native, + require_weight_at_most: Weight::from_parts(50, 50), + call: TestCall::Any(Weight::from_parts(50, 50), None).encode().into(), + }, + ExpectTransactStatus(vec![2].into()), + ]); + let hash = fake_message_hash(&message); + let weight_limit = Weight::from_parts(70, 70); + let r = XcmExecutor::::execute_xcm(Parent, message, hash, weight_limit); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(70, 70), XcmError::ExpectationFalse)); +} + +#[test] +fn clear_transact_status_should_work() { + AllowUnpaidFrom::set(vec![Parent.into()]); + + let message = Xcm::(vec![ + Transact { + origin_kind: OriginKind::Native, + require_weight_at_most: Weight::from_parts(50, 50), + call: TestCall::OnlyRoot(Weight::from_parts(50, 50), None).encode().into(), + }, + ClearTransactStatus, + ReportTransactStatus(QueryResponseInfo { + destination: Parent.into(), + query_id: 42, + max_weight: Weight::from_parts(5000, 5000), + }), + ]); + let hash = fake_message_hash(&message); + let weight_limit = Weight::from_parts(80, 80); + let r = XcmExecutor::::execute_xcm(Parent, message, hash, weight_limit); + assert_eq!(r, Outcome::Complete(Weight::from_parts(80, 80))); + let expected_msg = Xcm(vec![QueryResponse { + response: Response::DispatchResult(MaybeErrorCode::Success), + query_id: 42, + max_weight: Weight::from_parts(5000, 5000), + querier: Some(Here.into()), + }]); + let expected_hash = fake_message_hash(&expected_msg); + assert_eq!(sent_xcm(), vec![(Parent.into(), expected_msg, expected_hash)]); +} diff --git a/xcm/xcm-builder/src/tests/version_subscriptions.rs b/xcm/xcm-builder/src/tests/version_subscriptions.rs new file mode 100644 index 000000000000..4aba90c2c82f --- /dev/null +++ b/xcm/xcm-builder/src/tests/version_subscriptions.rs @@ -0,0 +1,149 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +use super::*; + +#[test] +fn simple_version_subscriptions_should_work() { + AllowSubsFrom::set(vec![Parent.into()]); + + let origin = Parachain(1000); + let message = Xcm::(vec![ + SetAppendix(Xcm(vec![])), + SubscribeVersion { query_id: 42, max_response_weight: Weight::from_parts(5000, 5000) }, + ]); + let hash = fake_message_hash(&message); + let weight_limit = Weight::from_parts(20, 20); + let r = XcmExecutor::::execute_xcm(origin, message, hash, weight_limit); + assert_eq!(r, Outcome::Error(XcmError::Barrier)); + + let origin = Parachain(1000); + let message = Xcm::(vec![SubscribeVersion { + query_id: 42, + max_response_weight: Weight::from_parts(5000, 5000), + }]); + let hash = fake_message_hash(&message); + let weight_limit = Weight::from_parts(10, 10); + let r = XcmExecutor::::execute_xcm(origin, message.clone(), hash, weight_limit); + assert_eq!(r, Outcome::Error(XcmError::Barrier)); + + let r = XcmExecutor::::execute_xcm(Parent, message, hash, weight_limit); + assert_eq!(r, Outcome::Complete(Weight::from_parts(10, 10))); + + assert_eq!( + SubscriptionRequests::get(), + vec![(Parent.into(), Some((42, Weight::from_parts(5000, 5000))))] + ); +} + +#[test] +fn version_subscription_instruction_should_work() { + let origin = Parachain(1000); + let message = Xcm::(vec![ + DescendOrigin(X1(AccountIndex64 { index: 1, network: None })), + SubscribeVersion { query_id: 42, max_response_weight: Weight::from_parts(5000, 5000) }, + ]); + let hash = fake_message_hash(&message); + let weight_limit = Weight::from_parts(20, 20); + let r = XcmExecutor::::execute_xcm_in_credit( + origin.clone(), + message, + hash, + weight_limit, + weight_limit, + ); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(20, 20), XcmError::BadOrigin)); + + let message = Xcm::(vec![ + SetAppendix(Xcm(vec![])), + SubscribeVersion { query_id: 42, max_response_weight: Weight::from_parts(5000, 5000) }, + ]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm_in_credit( + origin, + message, + hash, + weight_limit, + weight_limit, + ); + assert_eq!(r, Outcome::Complete(Weight::from_parts(20, 20))); + + assert_eq!( + SubscriptionRequests::get(), + vec![(Parachain(1000).into(), Some((42, Weight::from_parts(5000, 5000))))] + ); +} + +#[test] +fn simple_version_unsubscriptions_should_work() { + AllowSubsFrom::set(vec![Parent.into()]); + + let origin = Parachain(1000); + let message = Xcm::(vec![SetAppendix(Xcm(vec![])), UnsubscribeVersion]); + let hash = fake_message_hash(&message); + let weight_limit = Weight::from_parts(20, 20); + let r = XcmExecutor::::execute_xcm(origin, message, hash, weight_limit); + assert_eq!(r, Outcome::Error(XcmError::Barrier)); + + let origin = Parachain(1000); + let message = Xcm::(vec![UnsubscribeVersion]); + let hash = fake_message_hash(&message); + let weight_limit = Weight::from_parts(10, 10); + let r = XcmExecutor::::execute_xcm(origin, message.clone(), hash, weight_limit); + assert_eq!(r, Outcome::Error(XcmError::Barrier)); + + let r = XcmExecutor::::execute_xcm(Parent, message, hash, weight_limit); + assert_eq!(r, Outcome::Complete(Weight::from_parts(10, 10))); + + assert_eq!(SubscriptionRequests::get(), vec![(Parent.into(), None)]); + assert_eq!(sent_xcm(), vec![]); +} + +#[test] +fn version_unsubscription_instruction_should_work() { + let origin = Parachain(1000); + + // Not allowed to do it when origin has been changed. + let message = Xcm::(vec![ + DescendOrigin(X1(AccountIndex64 { index: 1, network: None })), + UnsubscribeVersion, + ]); + let hash = fake_message_hash(&message); + let weight_limit = Weight::from_parts(20, 20); + let r = XcmExecutor::::execute_xcm_in_credit( + origin.clone(), + message, + hash, + weight_limit, + weight_limit, + ); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(20, 20), XcmError::BadOrigin)); + + // Fine to do it when origin is untouched. + let message = Xcm::(vec![SetAppendix(Xcm(vec![])), UnsubscribeVersion]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm_in_credit( + origin, + message, + hash, + weight_limit, + weight_limit, + ); + assert_eq!(r, Outcome::Complete(Weight::from_parts(20, 20))); + + assert_eq!(SubscriptionRequests::get(), vec![(Parachain(1000).into(), None)]); + assert_eq!(sent_xcm(), vec![]); +} diff --git a/xcm/xcm-builder/src/tests/weight.rs b/xcm/xcm-builder/src/tests/weight.rs new file mode 100644 index 000000000000..e98ea8bd0968 --- /dev/null +++ b/xcm/xcm-builder/src/tests/weight.rs @@ -0,0 +1,183 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +use super::*; + +#[test] +fn fixed_rate_of_fungible_should_work() { + parameter_types! { + pub static WeightPrice: (AssetId, u128, u128) = + (Here.into(), WEIGHT_REF_TIME_PER_SECOND.into(), WEIGHT_PROOF_SIZE_PER_MB.into()); + } + + let mut trader = FixedRateOfFungible::::new(); + // supplies 100 unit of asset, 80 still remains after purchasing weight + assert_eq!( + trader + .buy_weight(Weight::from_parts(10, 10), fungible_multi_asset(Here.into(), 100).into()), + Ok(fungible_multi_asset(Here.into(), 80).into()), + ); + // should have nothing left, as 5 + 5 = 10, and we supplied 10 units of asset. + assert_eq!( + trader.buy_weight(Weight::from_parts(5, 5), fungible_multi_asset(Here.into(), 10).into()), + Ok(vec![].into()), + ); + // should have 5 left, as there are no proof size components + assert_eq!( + trader.buy_weight(Weight::from_parts(5, 0), fungible_multi_asset(Here.into(), 10).into()), + Ok(fungible_multi_asset(Here.into(), 5).into()), + ); + // not enough to purchase the combined weights + assert_err!( + trader.buy_weight(Weight::from_parts(5, 5), fungible_multi_asset(Here.into(), 5).into()), + XcmError::TooExpensive, + ); +} + +#[test] +fn errors_should_return_unused_weight() { + // we'll let them have message execution for free. + AllowUnpaidFrom::set(vec![Here.into()]); + // We own 1000 of our tokens. + add_asset(Here, (Here, 11u128)); + let mut message = Xcm(vec![ + // First xfer results in an error on the last message only + TransferAsset { + assets: (Here, 1u128).into(), + beneficiary: X1(AccountIndex64 { index: 3, network: None }).into(), + }, + // Second xfer results in error third message and after + TransferAsset { + assets: (Here, 2u128).into(), + beneficiary: X1(AccountIndex64 { index: 3, network: None }).into(), + }, + // Third xfer results in error second message and after + TransferAsset { + assets: (Here, 4u128).into(), + beneficiary: X1(AccountIndex64 { index: 3, network: None }).into(), + }, + ]); + // Weight limit of 70 is needed. + let limit = ::Weigher::weight(&mut message).unwrap(); + assert_eq!(limit, Weight::from_parts(30, 30)); + + let hash = fake_message_hash(&message); + + let r = XcmExecutor::::execute_xcm(Here, message.clone(), hash, limit); + assert_eq!(r, Outcome::Complete(Weight::from_parts(30, 30))); + assert_eq!(asset_list(AccountIndex64 { index: 3, network: None }), vec![(Here, 7u128).into()]); + assert_eq!(asset_list(Here), vec![(Here, 4u128).into()]); + assert_eq!(sent_xcm(), vec![]); + + let r = XcmExecutor::::execute_xcm(Here, message.clone(), hash, limit); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(30, 30), XcmError::NotWithdrawable)); + assert_eq!(asset_list(AccountIndex64 { index: 3, network: None }), vec![(Here, 10u128).into()]); + assert_eq!(asset_list(Here), vec![(Here, 1u128).into()]); + assert_eq!(sent_xcm(), vec![]); + + let r = XcmExecutor::::execute_xcm(Here, message.clone(), hash, limit); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(20, 20), XcmError::NotWithdrawable)); + assert_eq!(asset_list(AccountIndex64 { index: 3, network: None }), vec![(Here, 11u128).into()]); + assert_eq!(asset_list(Here), vec![]); + assert_eq!(sent_xcm(), vec![]); + + let r = XcmExecutor::::execute_xcm(Here, message, hash, limit); + assert_eq!(r, Outcome::Incomplete(Weight::from_parts(10, 10), XcmError::NotWithdrawable)); + assert_eq!(asset_list(AccountIndex64 { index: 3, network: None }), vec![(Here, 11u128).into()]); + assert_eq!(asset_list(Here), vec![]); + assert_eq!(sent_xcm(), vec![]); +} + +#[test] +fn weight_bounds_should_respect_instructions_limit() { + MaxInstructions::set(3); + let mut message = Xcm(vec![ClearOrigin; 4]); + // 4 instructions are too many. + assert_eq!(::Weigher::weight(&mut message), Err(())); + + let mut message = + Xcm(vec![SetErrorHandler(Xcm(vec![ClearOrigin])), SetAppendix(Xcm(vec![ClearOrigin]))]); + // 4 instructions are too many, even when hidden within 2. + assert_eq!(::Weigher::weight(&mut message), Err(())); + + let mut message = + Xcm(vec![SetErrorHandler(Xcm(vec![SetErrorHandler(Xcm(vec![SetErrorHandler(Xcm( + vec![ClearOrigin], + ))]))]))]); + // 4 instructions are too many, even when it's just one that's 3 levels deep. + assert_eq!(::Weigher::weight(&mut message), Err(())); + + let mut message = + Xcm(vec![SetErrorHandler(Xcm(vec![SetErrorHandler(Xcm(vec![ClearOrigin]))]))]); + // 3 instructions are OK. + assert_eq!( + ::Weigher::weight(&mut message), + Ok(Weight::from_parts(30, 30)) + ); +} + +#[test] +fn weight_trader_tuple_should_work() { + let para_1: MultiLocation = Parachain(1).into(); + let para_2: MultiLocation = Parachain(2).into(); + + parameter_types! { + pub static HereWeightPrice: (AssetId, u128, u128) = + (Here.into(), WEIGHT_REF_TIME_PER_SECOND.into(), WEIGHT_PROOF_SIZE_PER_MB.into()); + pub static Para1WeightPrice: (AssetId, u128, u128) = + (Parachain(1).into(), WEIGHT_REF_TIME_PER_SECOND.into(), WEIGHT_PROOF_SIZE_PER_MB.into()); + } + + type Traders = ( + // trader one + FixedRateOfFungible, + // trader two + FixedRateOfFungible, + ); + + let mut traders = Traders::new(); + // trader one buys weight + assert_eq!( + traders.buy_weight(Weight::from_parts(5, 5), fungible_multi_asset(Here.into(), 10).into()), + Ok(vec![].into()), + ); + // trader one refunds + assert_eq!( + traders.refund_weight(Weight::from_parts(2, 2)), + Some(fungible_multi_asset(Here.into(), 4)) + ); + + let mut traders = Traders::new(); + // trader one failed; trader two buys weight + assert_eq!( + traders.buy_weight(Weight::from_parts(5, 5), fungible_multi_asset(para_1, 10).into()), + Ok(vec![].into()), + ); + // trader two refunds + assert_eq!( + traders.refund_weight(Weight::from_parts(2, 2)), + Some(fungible_multi_asset(para_1, 4)) + ); + + let mut traders = Traders::new(); + // all traders fails + assert_err!( + traders.buy_weight(Weight::from_parts(5, 5), fungible_multi_asset(para_2, 10).into()), + XcmError::TooExpensive, + ); + // and no refund + assert_eq!(traders.refund_weight(Weight::from_parts(2, 2)), None); +} diff --git a/xcm/xcm-builder/src/universal_exports.rs b/xcm/xcm-builder/src/universal_exports.rs new file mode 100644 index 000000000000..7fe4e2a13cf9 --- /dev/null +++ b/xcm/xcm-builder/src/universal_exports.rs @@ -0,0 +1,382 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +//! Traits and utilities to help with origin mutation and bridging. + +use frame_support::{ensure, traits::Get}; +use parity_scale_codec::{Decode, Encode}; +use sp_std::{convert::TryInto, marker::PhantomData, prelude::*}; +use xcm::prelude::*; +use xcm_executor::traits::{validate_export, ExportXcm}; +use SendError::*; + +fn ensure_is_remote( + universal_local: impl Into, + dest: impl Into, +) -> Result<(NetworkId, InteriorMultiLocation), MultiLocation> { + let dest = dest.into(); + let universal_local = universal_local.into(); + let local_net = match universal_local.global_consensus() { + Ok(x) => x, + Err(_) => return Err(dest), + }; + let universal_destination: InteriorMultiLocation = universal_local + .into_location() + .appended_with(dest) + .map_err(|x| x.1)? + .try_into()?; + let (remote_dest, remote_net) = match universal_destination.split_first() { + (d, Some(GlobalConsensus(n))) if n != local_net => (d, n), + _ => return Err(dest), + }; + Ok((remote_net, remote_dest)) +} + +/// Implementation of `SendXcm` which uses the given `ExportXcm` implementation in order to forward +/// the message over a bridge. +/// +/// No effort is made to charge for any bridge fees, so this can only be used when it is known +/// that the message sending cannot be abused in any way. +/// +/// This is only useful when the local chain has bridging capabilities. +pub struct UnpaidLocalExporter( + PhantomData<(Exporter, UniversalLocation)>, +); +impl> SendXcm + for UnpaidLocalExporter +{ + type Ticket = Exporter::Ticket; + + fn validate( + dest: &mut Option, + xcm: &mut Option>, + ) -> SendResult { + let d = dest.take().ok_or(MissingArgument)?; + let universal_source = UniversalLocation::get(); + let devolved = match ensure_is_remote(universal_source, d) { + Ok(x) => x, + Err(d) => { + *dest = Some(d); + return Err(NotApplicable) + }, + }; + let (network, destination) = devolved; + let xcm = xcm.take().ok_or(SendError::MissingArgument)?; + validate_export::(network, 0, universal_source, destination, xcm) + } + + fn deliver(ticket: Exporter::Ticket) -> Result { + Exporter::deliver(ticket) + } +} + +pub trait ExporterFor { + /// Return the locally-routable bridge (if any) capable of forwarding `message` to the + /// `remote_location` on the remote `network`, together with the payment which is required. + /// + /// The payment is specified from the local context, not the bridge chain. This is the + /// total amount to withdraw in to Holding and should cover both payment for the execution on + /// the bridge chain as well as payment for the use of the `ExportMessage` instruction. + fn exporter_for( + network: &NetworkId, + remote_location: &InteriorMultiLocation, + message: &Xcm<()>, + ) -> Option<(MultiLocation, Option)>; +} + +#[impl_trait_for_tuples::impl_for_tuples(30)] +impl ExporterFor for Tuple { + fn exporter_for( + network: &NetworkId, + remote_location: &InteriorMultiLocation, + message: &Xcm<()>, + ) -> Option<(MultiLocation, Option)> { + for_tuples!( #( + if let Some(r) = Tuple::exporter_for(network, remote_location, message) { + return Some(r); + } + )* ); + None + } +} + +pub struct NetworkExportTable(sp_std::marker::PhantomData); +impl)>>> ExporterFor + for NetworkExportTable +{ + fn exporter_for( + network: &NetworkId, + _: &InteriorMultiLocation, + _: &Xcm<()>, + ) -> Option<(MultiLocation, Option)> { + T::get().into_iter().find(|(ref j, ..)| j == network).map(|(_, l, p)| (l, p)) + } +} + +/// Implementation of `SendXcm` which wraps the message inside an `ExportMessage` instruction +/// and sends it to a destination known to be able to handle it. +/// +/// No effort is made to make payment to the bridge for its services, so the bridge location +/// must have been configured with a barrier rule allowing unpaid execution for this message +/// coming from our origin. +/// +/// This is only useful if we have special dispensation by the remote bridges to have the +/// `ExportMessage` instruction executed without payment. +pub struct UnpaidRemoteExporter( + PhantomData<(Bridges, Router, UniversalLocation)>, +); +impl> SendXcm + for UnpaidRemoteExporter +{ + type Ticket = Router::Ticket; + + fn validate( + dest: &mut Option, + xcm: &mut Option>, + ) -> SendResult { + let d = dest.ok_or(MissingArgument)?; + let devolved = ensure_is_remote(UniversalLocation::get(), d).map_err(|_| NotApplicable)?; + let (remote_network, remote_location) = devolved; + let xcm = xcm.take().ok_or(MissingArgument)?; + let (bridge, maybe_payment) = + Bridges::exporter_for(&remote_network, &remote_location, &xcm).ok_or(NotApplicable)?; + ensure!(maybe_payment.is_none(), Unroutable); + + // We then send a normal message to the bridge asking it to export the prepended + // message to the remote chain. This will only work if the bridge will do the message + // export for free. Common-good chains will typically be afforded this. + let message = + Xcm(vec![ExportMessage { network: remote_network, destination: remote_location, xcm }]); + let (v, mut cost) = validate_send::(bridge, message)?; + if let Some(payment) = maybe_payment { + cost.push(payment); + } + Ok((v, cost)) + } + + fn deliver(validation: Router::Ticket) -> Result { + Router::deliver(validation) + } +} + +/// Implementation of `SendXcm` which wraps the message inside an `ExportMessage` instruction +/// and sends it to a destination known to be able to handle it. +/// +/// The `ExportMessage` instruction on the bridge is paid for from the local chain's sovereign +/// account on the bridge. The amount paid is determined through the `ExporterFor` trait. +pub struct SovereignPaidRemoteExporter( + PhantomData<(Bridges, Router, UniversalLocation)>, +); +impl> SendXcm + for SovereignPaidRemoteExporter +{ + type Ticket = Router::Ticket; + + fn validate( + dest: &mut Option, + xcm: &mut Option>, + ) -> SendResult { + let d = *dest.as_ref().ok_or(MissingArgument)?; + let devolved = ensure_is_remote(UniversalLocation::get(), d).map_err(|_| NotApplicable)?; + let (remote_network, remote_location) = devolved; + + let xcm = xcm.take().ok_or(MissingArgument)?; + let (bridge, maybe_payment) = + Bridges::exporter_for(&remote_network, &remote_location, &xcm).ok_or(NotApplicable)?; + + let local_from_bridge = + UniversalLocation::get().invert_target(&bridge).map_err(|_| Unroutable)?; + let export_instruction = + ExportMessage { network: remote_network, destination: remote_location, xcm }; + + let message = Xcm(if let Some(ref payment) = maybe_payment { + let fees = payment + .clone() + .reanchored(&bridge, UniversalLocation::get()) + .map_err(|_| Unroutable)?; + vec![ + WithdrawAsset(fees.clone().into()), + BuyExecution { fees, weight_limit: Unlimited }, + export_instruction, + RefundSurplus, + DepositAsset { assets: All.into(), beneficiary: local_from_bridge }, + ] + } else { + vec![export_instruction] + }); + + // We then send a normal message to the bridge asking it to export the prepended + // message to the remote chain. + let (v, mut cost) = validate_send::(bridge, message)?; + if let Some(bridge_payment) = maybe_payment { + cost.push(bridge_payment); + } + Ok((v, cost)) + } + + fn deliver(ticket: Router::Ticket) -> Result { + Router::deliver(ticket) + } +} + +pub trait DispatchBlob { + /// Dispatches an incoming blob and returns the unexpectable weight consumed by the dispatch. + fn dispatch_blob(blob: Vec) -> Result<(), DispatchBlobError>; +} + +pub trait HaulBlob { + /// Sends a blob over some point-to-point link. This will generally be implemented by a bridge. + fn haul_blob(blob: Vec) -> Result<(), HaulBlobError>; +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum HaulBlobError { + /// Represents point-to-point link failure with a human-readable explanation of the specific issue is provided. + Transport(&'static str), +} + +impl From for SendError { + fn from(err: HaulBlobError) -> Self { + match err { + HaulBlobError::Transport(reason) => SendError::Transport(reason), + } + } +} + +#[derive(Clone, Encode, Decode)] +pub struct BridgeMessage { + /// The message destination as a *Universal Location*. This means it begins with a + /// `GlobalConsensus` junction describing the network under which global consensus happens. + /// If this does not match our global consensus then it's a fatal error. + universal_dest: VersionedInteriorMultiLocation, + message: VersionedXcm<()>, +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum DispatchBlobError { + Unbridgable, + InvalidEncoding, + UnsupportedLocationVersion, + UnsupportedXcmVersion, + RoutingError, + NonUniversalDestination, + WrongGlobal, +} + +pub struct BridgeBlobDispatcher(PhantomData<(Router, OurPlace)>); +impl> DispatchBlob + for BridgeBlobDispatcher +{ + fn dispatch_blob(blob: Vec) -> Result<(), DispatchBlobError> { + let our_universal = OurPlace::get(); + let our_global = + our_universal.global_consensus().map_err(|()| DispatchBlobError::Unbridgable)?; + let BridgeMessage { universal_dest, message } = + Decode::decode(&mut &blob[..]).map_err(|_| DispatchBlobError::InvalidEncoding)?; + let universal_dest: InteriorMultiLocation = universal_dest + .try_into() + .map_err(|_| DispatchBlobError::UnsupportedLocationVersion)?; + // `universal_dest` is the desired destination within the universe: first we need to check + // we're in the right global consensus. + let intended_global = universal_dest + .global_consensus() + .map_err(|()| DispatchBlobError::NonUniversalDestination)?; + ensure!(intended_global == our_global, DispatchBlobError::WrongGlobal); + let dest = universal_dest.relative_to(&our_universal); + let message: Xcm<()> = + message.try_into().map_err(|_| DispatchBlobError::UnsupportedXcmVersion)?; + let _ = send_xcm::(dest, message).map_err(|_| DispatchBlobError::RoutingError)?; + Ok(()) + } +} + +pub struct HaulBlobExporter( + PhantomData<(Bridge, BridgedNetwork, Price)>, +); +impl, Price: Get> ExportXcm + for HaulBlobExporter +{ + type Ticket = (Vec, XcmHash); + + fn validate( + network: NetworkId, + _channel: u32, + universal_source: &mut Option, + destination: &mut Option, + message: &mut Option>, + ) -> Result<((Vec, XcmHash), MultiAssets), SendError> { + let bridged_network = BridgedNetwork::get(); + ensure!(&network == &bridged_network, SendError::NotApplicable); + // We don't/can't use the `channel` for this adapter. + let dest = destination.take().ok_or(SendError::MissingArgument)?; + let universal_dest = match dest.pushed_front_with(GlobalConsensus(bridged_network)) { + Ok(d) => d.into(), + Err((dest, _)) => { + *destination = Some(dest); + return Err(SendError::NotApplicable) + }, + }; + let (local_net, local_sub) = universal_source + .take() + .ok_or(SendError::MissingArgument)? + .split_global() + .map_err(|()| SendError::Unroutable)?; + let mut inner: Xcm<()> = vec![UniversalOrigin(GlobalConsensus(local_net))].into(); + if local_sub != Here { + inner.inner_mut().push(DescendOrigin(local_sub)); + } + inner + .inner_mut() + .extend(message.take().ok_or(SendError::MissingArgument)?.into_iter()); + let message = VersionedXcm::from(inner); + let hash = message.using_encoded(sp_io::hashing::blake2_256); + let blob = BridgeMessage { universal_dest, message }.encode(); + Ok(((blob, hash), Price::get())) + } + + fn deliver((blob, hash): (Vec, XcmHash)) -> Result { + Bridge::haul_blob(blob)?; + Ok(hash) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn ensure_is_remote_works() { + // A Kusama parachain is remote from the Polkadot Relay. + let x = ensure_is_remote(Polkadot, (Parent, Kusama, Parachain(1000))); + assert_eq!(x, Ok((Kusama, Parachain(1000).into()))); + + // Polkadot Relay is remote from a Kusama parachain. + let x = ensure_is_remote((Kusama, Parachain(1000)), (Parent, Parent, Polkadot)); + assert_eq!(x, Ok((Polkadot, Here))); + + // Our own parachain is local. + let x = ensure_is_remote(Polkadot, Parachain(1000)); + assert_eq!(x, Err(Parachain(1000).into())); + + // Polkadot's parachain is not remote if we are Polkadot. + let x = ensure_is_remote(Polkadot, (Parent, Polkadot, Parachain(1000))); + assert_eq!(x, Err((Parent, Polkadot, Parachain(1000)).into())); + + // If we don't have a consensus ancestor, then we cannot determine remoteness. + let x = ensure_is_remote((), (Parent, Polkadot, Parachain(1000))); + assert_eq!(x, Err((Parent, Polkadot, Parachain(1000)).into())); + } +} diff --git a/xcm/xcm-builder/src/weight.rs b/xcm/xcm-builder/src/weight.rs index 2ab8afde2da5..7a7c6a7cdfa8 100644 --- a/xcm/xcm-builder/src/weight.rs +++ b/xcm/xcm-builder/src/weight.rs @@ -17,7 +17,10 @@ use frame_support::{ dispatch::GetDispatchInfo, traits::{tokens::currency::Currency as CurrencyT, Get, OnUnbalanced as OnUnbalancedT}, - weights::{constants::WEIGHT_REF_TIME_PER_SECOND, WeightToFee as WeightToFeeT}, + weights::{ + constants::{WEIGHT_PROOF_SIZE_PER_MB, WEIGHT_REF_TIME_PER_SECOND}, + WeightToFee as WeightToFeeT, + }, }; use parity_scale_codec::Decode; use sp_runtime::traits::{SaturatedConversion, Saturating, Zero}; @@ -44,10 +47,10 @@ impl, C: Decode + GetDispatchInfo, M: Get> WeightBounds impl, C: Decode + GetDispatchInfo, M> FixedWeightBounds { fn weight_with_limit(message: &Xcm, instrs_limit: &mut u32) -> Result { - let mut r: Weight = 0; + let mut r: Weight = Weight::zero(); *instrs_limit = instrs_limit.checked_sub(message.0.len() as u32).ok_or(())?; for m in message.0.iter() { - r = r.checked_add(Self::instr_weight_with_limit(m, instrs_limit)?).ok_or(())?; + r = r.checked_add(&Self::instr_weight_with_limit(m, instrs_limit)?).ok_or(())?; } Ok(r) } @@ -55,14 +58,12 @@ impl, C: Decode + GetDispatchInfo, M> FixedWeightBounds instruction: &Instruction, instrs_limit: &mut u32, ) -> Result { - T::get() - .checked_add(match instruction { - Transact { require_weight_at_most, .. } => *require_weight_at_most, - SetErrorHandler(xcm) | SetAppendix(xcm) => - Self::weight_with_limit(xcm, instrs_limit)?, - _ => 0, - }) - .ok_or(()) + let instr_weight = match instruction { + Transact { require_weight_at_most, .. } => *require_weight_at_most, + SetErrorHandler(xcm) | SetAppendix(xcm) => Self::weight_with_limit(xcm, instrs_limit)?, + _ => Weight::zero(), + }; + T::get().checked_add(&instr_weight).ok_or(()) } } @@ -92,10 +93,10 @@ where Instruction: xcm::GetWeight, { fn weight_with_limit(message: &Xcm, instrs_limit: &mut u32) -> Result { - let mut r: Weight = 0; + let mut r: Weight = Weight::zero(); *instrs_limit = instrs_limit.checked_sub(message.0.len() as u32).ok_or(())?; for m in message.0.iter() { - r = r.checked_add(Self::instr_weight_with_limit(m, instrs_limit)?).ok_or(())?; + r = r.checked_add(&Self::instr_weight_with_limit(m, instrs_limit)?).ok_or(())?; } Ok(r) } @@ -104,15 +105,12 @@ where instrs_limit: &mut u32, ) -> Result { use xcm::GetWeight; - instruction - .weight() - .checked_add(match instruction { - Transact { require_weight_at_most, .. } => *require_weight_at_most, - SetErrorHandler(xcm) | SetAppendix(xcm) => - Self::weight_with_limit(xcm, instrs_limit)?, - _ => 0, - }) - .ok_or(()) + let instr_weight = match instruction { + Transact { require_weight_at_most, .. } => *require_weight_at_most, + SetErrorHandler(xcm) | SetAppendix(xcm) => Self::weight_with_limit(xcm, instrs_limit)?, + _ => Weight::zero(), + }; + instruction.weight().checked_add(&instr_weight).ok_or(()) } } @@ -128,74 +126,18 @@ impl TakeRevenue for () { fn take_revenue(_revenue: MultiAsset) {} } -/// Simple fee calculator that requires payment in a single concrete fungible at a fixed rate. -/// -/// The constant `Get` type parameter should be the concrete fungible ID and the amount of it required for -/// one second of weight. -#[deprecated = "Use `FixedRateOfFungible` instead"] -pub struct FixedRateOfConcreteFungible, R: TakeRevenue>( - Weight, - u128, - PhantomData<(T, R)>, -); -#[allow(deprecated)] -impl, R: TakeRevenue> WeightTrader - for FixedRateOfConcreteFungible -{ - fn new() -> Self { - Self(0, 0, PhantomData) - } - - fn buy_weight(&mut self, weight: Weight, payment: Assets) -> Result { - log::trace!( - target: "xcm::weight", - "FixedRateOfConcreteFungible::buy_weight weight: {:?}, payment: {:?}", - weight, payment, - ); - let (id, units_per_second) = T::get(); - let amount = units_per_second * (weight as u128) / (WEIGHT_REF_TIME_PER_SECOND as u128); - let unused = - payment.checked_sub((id, amount).into()).map_err(|_| XcmError::TooExpensive)?; - self.0 = self.0.saturating_add(weight); - self.1 = self.1.saturating_add(amount); - Ok(unused) - } - - fn refund_weight(&mut self, weight: Weight) -> Option { - log::trace!(target: "xcm::weight", "FixedRateOfConcreteFungible::refund_weight weight: {:?}", weight); - let (id, units_per_second) = T::get(); - let weight = weight.min(self.0); - let amount = units_per_second * (weight as u128) / (WEIGHT_REF_TIME_PER_SECOND as u128); - self.0 -= weight; - self.1 = self.1.saturating_sub(amount); - if amount > 0 { - Some((Concrete(id), amount).into()) - } else { - None - } - } -} -#[allow(deprecated)] -impl, R: TakeRevenue> Drop for FixedRateOfConcreteFungible { - fn drop(&mut self) { - if self.1 > 0 { - R::take_revenue((Concrete(T::get().0), self.1).into()); - } - } -} - /// Simple fee calculator that requires payment in a single fungible at a fixed rate. /// -/// The constant `Get` type parameter should be the fungible ID and the amount of it required for -/// one second of weight. -pub struct FixedRateOfFungible, R: TakeRevenue>( +/// The constant `Get` type parameter should be the fungible ID, the amount of it required for one +/// second of weight and the amount required for 1 MB of proof. +pub struct FixedRateOfFungible, R: TakeRevenue>( Weight, u128, PhantomData<(T, R)>, ); -impl, R: TakeRevenue> WeightTrader for FixedRateOfFungible { +impl, R: TakeRevenue> WeightTrader for FixedRateOfFungible { fn new() -> Self { - Self(0, 0, PhantomData) + Self(Weight::zero(), 0, PhantomData) } fn buy_weight(&mut self, weight: Weight, payment: Assets) -> Result { @@ -204,8 +146,10 @@ impl, R: TakeRevenue> WeightTrader for FixedRateOfFungib "FixedRateOfFungible::buy_weight weight: {:?}, payment: {:?}", weight, payment, ); - let (id, units_per_second) = T::get(); - let amount = units_per_second * (weight as u128) / (WEIGHT_REF_TIME_PER_SECOND as u128); + let (id, units_per_second, units_per_mb) = T::get(); + let amount = (units_per_second * (weight.ref_time() as u128) / + (WEIGHT_REF_TIME_PER_SECOND as u128)) + + (units_per_mb * (weight.proof_size() as u128) / (WEIGHT_PROOF_SIZE_PER_MB as u128)); if amount == 0 { return Ok(payment) } @@ -218,9 +162,11 @@ impl, R: TakeRevenue> WeightTrader for FixedRateOfFungib fn refund_weight(&mut self, weight: Weight) -> Option { log::trace!(target: "xcm::weight", "FixedRateOfFungible::refund_weight weight: {:?}", weight); - let (id, units_per_second) = T::get(); + let (id, units_per_second, units_per_mb) = T::get(); let weight = weight.min(self.0); - let amount = units_per_second * (weight as u128) / (WEIGHT_REF_TIME_PER_SECOND as u128); + let amount = (units_per_second * (weight.ref_time() as u128) / + (WEIGHT_REF_TIME_PER_SECOND as u128)) + + (units_per_mb * (weight.proof_size() as u128) / (WEIGHT_PROOF_SIZE_PER_MB as u128)); self.0 -= weight; self.1 = self.1.saturating_sub(amount); if amount > 0 { @@ -231,7 +177,7 @@ impl, R: TakeRevenue> WeightTrader for FixedRateOfFungib } } -impl, R: TakeRevenue> Drop for FixedRateOfFungible { +impl, R: TakeRevenue> Drop for FixedRateOfFungible { fn drop(&mut self) { if self.1 > 0 { R::take_revenue((T::get().0, self.1).into()); @@ -239,7 +185,7 @@ impl, R: TakeRevenue> Drop for FixedRateOfFungible } } -/// Weight trader which uses the `TransactionPayment` pallet to set the right price for weight and then +/// Weight trader which uses the configured `WeightToFee` to set the right price for weight and then /// places any weight bought into the right account. pub struct UsingComponents< WeightToFee: WeightToFeeT, @@ -261,13 +207,12 @@ impl< > WeightTrader for UsingComponents { fn new() -> Self { - Self(0, Zero::zero(), PhantomData) + Self(Weight::zero(), Zero::zero(), PhantomData) } fn buy_weight(&mut self, weight: Weight, payment: Assets) -> Result { log::trace!(target: "xcm::weight", "UsingComponents::buy_weight weight: {:?}, payment: {:?}", weight, payment); - let amount = - WeightToFee::weight_to_fee(&frame_support::weights::Weight::from_ref_time(weight)); + let amount = WeightToFee::weight_to_fee(&weight); let u128_amount: u128 = amount.try_into().map_err(|_| XcmError::Overflow)?; let required = (Concrete(AssetId::get()), u128_amount).into(); let unused = payment.checked_sub(required).map_err(|_| XcmError::TooExpensive)?; @@ -279,8 +224,7 @@ impl< fn refund_weight(&mut self, weight: Weight) -> Option { log::trace!(target: "xcm::weight", "UsingComponents::refund_weight weight: {:?}", weight); let weight = weight.min(self.0); - let amount = - WeightToFee::weight_to_fee(&frame_support::weights::Weight::from_ref_time(weight)); + let amount = WeightToFee::weight_to_fee(&weight); self.0 -= weight; self.1 = self.1.saturating_sub(amount); let amount: u128 = amount.saturated_into(); diff --git a/xcm/xcm-builder/tests/mock/mod.rs b/xcm/xcm-builder/tests/mock/mod.rs index 30e12a12e073..a265bff1e352 100644 --- a/xcm/xcm-builder/tests/mock/mod.rs +++ b/xcm/xcm-builder/tests/mock/mod.rs @@ -17,8 +17,10 @@ use frame_support::{ construct_runtime, parameter_types, traits::{Everything, Nothing}, + weights::Weight, }; -use sp_core::H256; +use parity_scale_codec::Encode; +use primitive_types::H256; use sp_runtime::{testing::Header, traits::IdentityLookup, AccountId32}; use sp_std::cell::RefCell; @@ -31,7 +33,7 @@ use xcm_builder::{ AccountId32Aliases, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, ChildParachainAsNative, ChildParachainConvertsVia, ChildSystemParachainAsSuperuser, CurrencyAdapter as XcmCurrencyAdapter, FixedRateOfFungible, FixedWeightBounds, - IsChildSystemParachain, IsConcrete, LocationInverter, SignedAccountId32AsNative, + IsChildSystemParachain, IsConcrete, MintLocation, SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, }; @@ -39,16 +41,27 @@ pub type AccountId = AccountId32; pub type Balance = u128; thread_local! { - pub static SENT_XCM: RefCell> = RefCell::new(Vec::new()); + pub static SENT_XCM: RefCell> = RefCell::new(Vec::new()); } -pub fn sent_xcm() -> Vec<(MultiLocation, opaque::Xcm)> { +pub fn sent_xcm() -> Vec<(MultiLocation, opaque::Xcm, XcmHash)> { SENT_XCM.with(|q| (*q.borrow()).clone()) } pub struct TestSendXcm; impl SendXcm for TestSendXcm { - fn send_xcm(dest: impl Into, msg: opaque::Xcm) -> SendResult { - SENT_XCM.with(|q| q.borrow_mut().push((dest.into(), msg))); - Ok(()) + type Ticket = (MultiLocation, Xcm<()>, XcmHash); + fn validate( + dest: &mut Option, + msg: &mut Option>, + ) -> SendResult<(MultiLocation, Xcm<()>, XcmHash)> { + let msg = msg.take().unwrap(); + let hash = fake_message_hash(&msg); + let triplet = (dest.take().unwrap(), msg, hash); + Ok((triplet, MultiAssets::new())) + } + fn deliver(triplet: (MultiLocation, Xcm<()>, XcmHash)) -> Result { + let hash = triplet.2; + SENT_XCM.with(|q| q.borrow_mut().push(triplet)); + Ok(hash) } } @@ -115,8 +128,8 @@ impl configuration::Config for Runtime { parameter_types! { pub const KsmLocation: MultiLocation = MultiLocation::here(); pub const KusamaNetwork: NetworkId = NetworkId::Kusama; - pub Ancestry: MultiLocation = Here.into(); - pub CheckAccount: AccountId = XcmPallet::check_account(); + pub UniversalLocation: InteriorMultiLocation = Here; + pub CheckAccount: (AccountId, MintLocation) = (XcmPallet::check_account(), MintLocation::Local); } pub type SovereignAccountOf = @@ -140,8 +153,8 @@ type LocalOriginConverter = ( ); parameter_types! { - pub const BaseXcmWeight: u64 = 1_000_000_000; - pub KsmPerSecond: (AssetId, u128) = (KsmLocation::get().into(), 1); + pub const BaseXcmWeight: Weight = Weight::from_parts(1_000_000_000, 1024); + pub KsmPerSecondPerByte: (AssetId, u128, u128) = (KsmLocation::get().into(), 1, 1); } pub type Barrier = ( @@ -152,10 +165,12 @@ pub type Barrier = ( ); parameter_types! { - pub const KusamaForStatemine: (MultiAssetFilter, MultiLocation) = - (MultiAssetFilter::Wild(WildMultiAsset::AllOf { id: Concrete(MultiLocation::here()), fun: WildFungible }), X1(Parachain(1000)).into()); + pub KusamaForStatemine: (MultiAssetFilter, MultiLocation) = + (Wild(AllOf { id: Concrete(Here.into()), fun: WildFungible }), Parachain(1000).into()); pub const MaxInstructions: u32 = 100; + pub const MaxAssetsIntoHolding: u32 = 4; } + pub type TrustedTeleporters = (xcm_builder::Case,); pub struct XcmConfig; @@ -166,21 +181,35 @@ impl xcm_executor::Config for XcmConfig { type OriginConverter = LocalOriginConverter; type IsReserve = (); type IsTeleporter = TrustedTeleporters; - type LocationInverter = LocationInverter; + type UniversalLocation = UniversalLocation; type Barrier = Barrier; type Weigher = FixedWeightBounds; - type Trader = FixedRateOfFungible; + type Trader = FixedRateOfFungible; type ResponseHandler = XcmPallet; type AssetTrap = XcmPallet; + type AssetLocker = (); + type AssetExchanger = (); type AssetClaims = XcmPallet; type SubscriptionService = XcmPallet; + type PalletInstancesInfo = AllPalletsWithSystem; + type MaxAssetsIntoHolding = MaxAssetsIntoHolding; + type FeeManager = (); + type MessageExporter = (); + type UniversalAliases = Nothing; + type CallDispatcher = RuntimeCall; + type SafeCallFilter = Everything; } pub type LocalOriginToLocation = SignedToAccountId32; +#[cfg(feature = "runtime-benchmarks")] +parameter_types! { + pub ReachableDest: Option = Some(Here.into()); +} + impl pallet_xcm::Config for Runtime { type RuntimeEvent = RuntimeEvent; - type LocationInverter = LocationInverter; + type UniversalLocation = UniversalLocation; type SendXcmOrigin = xcm_builder::EnsureXcmOrigin; type XcmRouter = TestSendXcm; // Anyone can execute XCM messages locally... @@ -194,6 +223,14 @@ impl pallet_xcm::Config for Runtime { type RuntimeOrigin = RuntimeOrigin; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; + type TrustedLockers = (); + type SovereignAccountOf = (); + type Currency = Balances; + type CurrencyMatcher = IsConcrete; + type MaxLockers = frame_support::traits::ConstU32<8>; + type WeightInfo = pallet_xcm::TestWeightInfo; + #[cfg(feature = "runtime-benchmarks")] + type ReachableDest = ReachableDest; } impl origin::Config for Runtime {} @@ -225,3 +262,7 @@ pub fn kusama_like_with_balances(balances: Vec<(AccountId, Balance)>) -> sp_io:: ext.execute_with(|| System::set_block_number(1)); ext } + +pub fn fake_message_hash(message: &Xcm) -> XcmHash { + message.using_encoded(sp_io::hashing::blake2_256) +} diff --git a/xcm/xcm-builder/tests/scenarios.rs b/xcm/xcm-builder/tests/scenarios.rs index d826e652c5d6..05227fbd742c 100644 --- a/xcm/xcm-builder/tests/scenarios.rs +++ b/xcm/xcm-builder/tests/scenarios.rs @@ -16,9 +16,10 @@ mod mock; +use frame_support::weights::Weight; use mock::{ - kusama_like_with_balances, AccountId, Balance, Balances, BaseXcmWeight, System, XcmConfig, - CENTS, + fake_message_hash, kusama_like_with_balances, AccountId, Balance, Balances, BaseXcmWeight, + System, XcmConfig, CENTS, }; use polkadot_parachain::primitives::Id as ParaId; use sp_runtime::traits::AccountIdConversion; @@ -36,7 +37,7 @@ fn buy_execution() -> Instruction { } /// Scenario: -/// A parachain transfers funds on the relaychain to another parachain's account. +/// A parachain transfers funds on the relay-chain to another parachain's account. /// /// Asserts that the parachain accounts are updated as expected. #[test] @@ -46,20 +47,17 @@ fn withdraw_and_deposit_works() { kusama_like_with_balances(balances).execute_with(|| { let other_para_id = 3000; let amount = REGISTER_AMOUNT; - let weight = 3 * BaseXcmWeight::get(); - let r = XcmExecutor::::execute_xcm( - Parachain(PARA_ID).into(), - Xcm(vec![ - WithdrawAsset((Here, amount).into()), - buy_execution(), - DepositAsset { - assets: All.into(), - max_assets: 1, - beneficiary: Parachain(other_para_id).into(), - }, - ]), - weight, - ); + let weight = BaseXcmWeight::get() * 3; + let message = Xcm(vec![ + WithdrawAsset((Here, amount).into()), + buy_execution(), + DepositAsset { + assets: AllCounted(1).into(), + beneficiary: Parachain(other_para_id).into(), + }, + ]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm(Parachain(PARA_ID), message, hash, weight); assert_eq!(r, Outcome::Complete(weight)); let other_para_acc: AccountId = ParaId::from(other_para_id).into_account_truncating(); assert_eq!(Balances::free_balance(para_acc), INITIAL_BALANCE - amount); @@ -78,13 +76,16 @@ fn transfer_asset_works() { kusama_like_with_balances(balances).execute_with(|| { let amount = REGISTER_AMOUNT; let weight = BaseXcmWeight::get(); + let message = Xcm(vec![TransferAsset { + assets: (Here, amount).into(), + beneficiary: AccountId32 { network: None, id: bob.clone().into() }.into(), + }]); + let hash = fake_message_hash(&message); // Use `execute_xcm_in_credit` here to pass through the barrier let r = XcmExecutor::::execute_xcm_in_credit( - AccountId32 { network: NetworkId::Any, id: ALICE.into() }, - Xcm(vec![TransferAsset { - assets: (Here, amount).into(), - beneficiary: AccountId32 { network: NetworkId::Any, id: bob.clone().into() }.into(), - }]), + AccountId32 { network: None, id: ALICE.into() }, + message, + hash, weight, weight, ); @@ -106,36 +107,31 @@ fn transfer_asset_works() { /// /// Asserts that the balances are updated correctly and the expected XCM is sent. #[test] -fn query_holding_works() { +fn report_holding_works() { use xcm::opaque::latest::prelude::*; let para_acc: AccountId = ParaId::from(PARA_ID).into_account_truncating(); let balances = vec![(ALICE, INITIAL_BALANCE), (para_acc.clone(), INITIAL_BALANCE)]; kusama_like_with_balances(balances).execute_with(|| { let other_para_id = 3000; let amount = REGISTER_AMOUNT; - let query_id = 1234; - let weight = 4 * BaseXcmWeight::get(); - let max_response_weight = 1_000_000_000; - let r = XcmExecutor::::execute_xcm( - Parachain(PARA_ID).into(), - Xcm(vec![ - WithdrawAsset((Here, amount).into()), - buy_execution(), - DepositAsset { - assets: All.into(), - max_assets: 1, - beneficiary: OnlyChild.into(), // invalid destination - }, - // is not triggered becasue the deposit fails - QueryHolding { - query_id, - dest: Parachain(PARA_ID).into(), - assets: All.into(), - max_response_weight, - }, - ]), - weight, - ); + let weight = BaseXcmWeight::get() * 4; + let response_info = QueryResponseInfo { + destination: Parachain(PARA_ID).into(), + query_id: 1234, + max_weight: Weight::from_parts(1_000_000_000, 1_000_000_000), + }; + let message = Xcm(vec![ + WithdrawAsset((Here, amount).into()), + buy_execution(), + DepositAsset { + assets: AllCounted(1).into(), + beneficiary: OnlyChild.into(), // invalid destination + }, + // is not triggered becasue the deposit fails + ReportHolding { response_info: response_info.clone(), assets: All.into() }, + ]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm(Parachain(PARA_ID), message, hash, weight); assert_eq!( r, Outcome::Incomplete( @@ -148,40 +144,32 @@ fn query_holding_works() { assert_eq!(Balances::free_balance(para_acc.clone()), INITIAL_BALANCE - amount); // now do a successful transfer - let r = XcmExecutor::::execute_xcm( - Parachain(PARA_ID).into(), - Xcm(vec![ - WithdrawAsset((Here, amount).into()), - buy_execution(), - DepositAsset { - assets: All.into(), - max_assets: 1, - beneficiary: Parachain(other_para_id).into(), - }, - // used to get a notification in case of success - QueryHolding { - query_id, - dest: Parachain(PARA_ID).into(), - assets: All.into(), - max_response_weight: 1_000_000_000, - }, - ]), - weight, - ); + let message = Xcm(vec![ + WithdrawAsset((Here, amount).into()), + buy_execution(), + DepositAsset { + assets: AllCounted(1).into(), + beneficiary: Parachain(other_para_id).into(), + }, + // used to get a notification in case of success + ReportHolding { response_info: response_info.clone(), assets: AllCounted(1).into() }, + ]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm(Parachain(PARA_ID), message, hash, weight); assert_eq!(r, Outcome::Complete(weight)); let other_para_acc: AccountId = ParaId::from(other_para_id).into_account_truncating(); assert_eq!(Balances::free_balance(other_para_acc), amount); assert_eq!(Balances::free_balance(para_acc), INITIAL_BALANCE - 2 * amount); + let expected_msg = Xcm(vec![QueryResponse { + query_id: response_info.query_id, + response: Response::Assets(vec![].into()), + max_weight: response_info.max_weight, + querier: Some(Here.into()), + }]); + let expected_hash = fake_message_hash(&expected_msg); assert_eq!( mock::sent_xcm(), - vec![( - Parachain(PARA_ID).into(), - Xcm(vec![QueryResponse { - query_id, - response: Response::Assets(vec![].into()), - max_weight: 1_000_000_000, - }]), - )] + vec![(Parachain(PARA_ID).into(), expected_msg, expected_hash,)] ); }); } @@ -206,73 +194,60 @@ fn teleport_to_statemine_works() { let teleport_effects = vec![ buy_execution(), // unchecked mock value DepositAsset { - assets: All.into(), - max_assets: 1, - beneficiary: (1, Parachain(PARA_ID)).into(), + assets: AllCounted(1).into(), + beneficiary: (Parent, Parachain(PARA_ID)).into(), }, ]; - let weight = 3 * BaseXcmWeight::get(); + let weight = BaseXcmWeight::get() * 3; // teleports are allowed to community chains, even in the absence of trust from their side. - let r = XcmExecutor::::execute_xcm( - Parachain(PARA_ID).into(), - Xcm(vec![ - WithdrawAsset((Here, amount).into()), - buy_execution(), - InitiateTeleport { - assets: All.into(), - dest: Parachain(other_para_id).into(), - xcm: Xcm(teleport_effects.clone()), - }, - ]), - weight, - ); + let message = Xcm(vec![ + WithdrawAsset((Here, amount).into()), + buy_execution(), + InitiateTeleport { + assets: All.into(), + dest: Parachain(other_para_id).into(), + xcm: Xcm(teleport_effects.clone()), + }, + ]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm(Parachain(PARA_ID), message, hash, weight); assert_eq!(r, Outcome::Complete(weight)); + let expected_msg = Xcm(vec![ReceiveTeleportedAsset((Parent, amount).into()), ClearOrigin] + .into_iter() + .chain(teleport_effects.clone().into_iter()) + .collect()); + let expected_hash = fake_message_hash(&expected_msg); assert_eq!( mock::sent_xcm(), - vec![( - Parachain(other_para_id).into(), - Xcm(vec![ReceiveTeleportedAsset((Parent, amount).into()), ClearOrigin,] - .into_iter() - .chain(teleport_effects.clone().into_iter()) - .collect()) - )] + vec![(Parachain(other_para_id).into(), expected_msg, expected_hash,)] ); // teleports are allowed from statemine to kusama. - let r = XcmExecutor::::execute_xcm( - Parachain(PARA_ID).into(), - Xcm(vec![ - WithdrawAsset((Here, amount).into()), - buy_execution(), - InitiateTeleport { - assets: All.into(), - dest: Parachain(statemine_id).into(), - xcm: Xcm(teleport_effects.clone()), - }, - ]), - weight, - ); + let message = Xcm(vec![ + WithdrawAsset((Here, amount).into()), + buy_execution(), + InitiateTeleport { + assets: All.into(), + dest: Parachain(statemine_id).into(), + xcm: Xcm(teleport_effects.clone()), + }, + ]); + let hash = fake_message_hash(&message); + let r = XcmExecutor::::execute_xcm(Parachain(PARA_ID), message, hash, weight); assert_eq!(r, Outcome::Complete(weight)); // 2 * amount because of the other teleport above assert_eq!(Balances::free_balance(para_acc), INITIAL_BALANCE - 2 * amount); + let expected_msg = Xcm(vec![ReceiveTeleportedAsset((Parent, amount).into()), ClearOrigin] + .into_iter() + .chain(teleport_effects.clone().into_iter()) + .collect()); + let expected_hash = fake_message_hash(&expected_msg); assert_eq!( mock::sent_xcm(), vec![ - ( - Parachain(other_para_id).into(), - Xcm(vec![ReceiveTeleportedAsset((Parent, amount).into()), ClearOrigin,] - .into_iter() - .chain(teleport_effects.clone().into_iter()) - .collect()), - ), - ( - Parachain(statemine_id).into(), - Xcm(vec![ReceiveTeleportedAsset((Parent, amount).into()), ClearOrigin,] - .into_iter() - .chain(teleport_effects.clone().into_iter()) - .collect()), - ) + (Parachain(other_para_id).into(), expected_msg.clone(), expected_hash,), + (Parachain(statemine_id).into(), expected_msg, expected_hash,) ] ); }); @@ -295,37 +270,32 @@ fn reserve_based_transfer_works() { let transfer_effects = vec![ buy_execution(), // unchecked mock value DepositAsset { - assets: All.into(), - max_assets: 1, - beneficiary: (1, Parachain(PARA_ID)).into(), + assets: AllCounted(1).into(), + beneficiary: (Parent, Parachain(PARA_ID)).into(), }, ]; - let weight = 3 * BaseXcmWeight::get(); - let r = XcmExecutor::::execute_xcm( - Parachain(PARA_ID).into(), - Xcm(vec![ - WithdrawAsset((Here, amount).into()), - buy_execution(), - DepositReserveAsset { - assets: All.into(), - max_assets: 1, - dest: Parachain(other_para_id).into(), - xcm: Xcm(transfer_effects.clone()), - }, - ]), - weight, - ); + let message = Xcm(vec![ + WithdrawAsset((Here, amount).into()), + buy_execution(), + DepositReserveAsset { + assets: AllCounted(1).into(), + dest: Parachain(other_para_id).into(), + xcm: Xcm(transfer_effects.clone()), + }, + ]); + let hash = fake_message_hash(&message); + let weight = BaseXcmWeight::get() * 3; + let r = XcmExecutor::::execute_xcm(Parachain(PARA_ID), message, hash, weight); assert_eq!(r, Outcome::Complete(weight)); assert_eq!(Balances::free_balance(para_acc), INITIAL_BALANCE - amount); + let expected_msg = Xcm(vec![ReserveAssetDeposited((Parent, amount).into()), ClearOrigin] + .into_iter() + .chain(transfer_effects.into_iter()) + .collect()); + let expected_hash = fake_message_hash(&expected_msg); assert_eq!( mock::sent_xcm(), - vec![( - Parachain(other_para_id).into(), - Xcm(vec![ReserveAssetDeposited((Parent, amount).into()), ClearOrigin,] - .into_iter() - .chain(transfer_effects.into_iter()) - .collect()) - )] + vec![(Parachain(other_para_id).into(), expected_msg, expected_hash,)] ); }); } diff --git a/xcm/xcm-executor/Cargo.toml b/xcm/xcm-executor/Cargo.toml index f5083eda084f..e4899608f13c 100644 --- a/xcm/xcm-executor/Cargo.toml +++ b/xcm/xcm-executor/Cargo.toml @@ -7,16 +7,18 @@ version.workspace = true [dependencies] impl-trait-for-tuples = "0.2.2" -parity-scale-codec = { version = "3.1.5", default-features = false, features = ["derive"] } +environmental = { version = "1.1.4", default-features = false } +parity-scale-codec = { version = "3.3.0", default-features = false, features = ["derive"] } xcm = { path = "..", default-features = false } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-arithmetic = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-arithmetic = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-weights = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } log = { version = "0.4.17", default-features = false } -frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.36" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.40" } [features] default = ["std"] @@ -31,6 +33,7 @@ std = [ "sp-arithmetic/std", "sp-core/std", "sp-runtime/std", + "sp-weights/std", "frame-support/std", "log/std", ] diff --git a/xcm/xcm-executor/integration-tests/Cargo.toml b/xcm/xcm-executor/integration-tests/Cargo.toml index efd2146a7bfc..bf31263f0d0b 100644 --- a/xcm/xcm-executor/integration-tests/Cargo.toml +++ b/xcm/xcm-executor/integration-tests/Cargo.toml @@ -6,20 +6,20 @@ edition.workspace = true version.workspace = true [dependencies] -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } futures = "0.3.21" pallet-xcm = { path = "../../pallet-xcm" } polkadot-test-client = { path = "../../../node/test/client" } polkadot-test-runtime = { path = "../../../runtime/test-runtime" } polkadot-test-service = { path = "../../../node/test/service" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.36" } -sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.40" } +sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } xcm = { path = "../..", default-features = false } xcm-executor = { path = ".." } -sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } [features] default = ["std"] diff --git a/xcm/xcm-executor/integration-tests/src/lib.rs b/xcm/xcm-executor/integration-tests/src/lib.rs index f038e45d3edc..a3212c798dab 100644 --- a/xcm/xcm-executor/integration-tests/src/lib.rs +++ b/xcm/xcm-executor/integration-tests/src/lib.rs @@ -17,15 +17,17 @@ #![cfg_attr(not(feature = "std"), no_std)] #![cfg(test)] +use frame_support::{codec::Encode, dispatch::GetDispatchInfo, weights::Weight}; use polkadot_test_client::{ BlockBuilderExt, ClientBlockImportExt, DefaultTestClientBuilderExt, ExecutionStrategy, InitPolkadotBlockBuilder, TestClientBuilder, TestClientBuilderExt, }; -use polkadot_test_runtime::pallet_test_notifier; +use polkadot_test_runtime::{pallet_test_notifier, xcm_config::XcmConfig}; use polkadot_test_service::construct_extrinsic; use sp_runtime::traits::Block; use sp_state_machine::InspectState; use xcm::{latest::prelude::*, VersionedResponse, VersionedXcm}; +use xcm_executor::traits::WeightBounds; #[test] fn basic_buy_fees_message_executes() { @@ -37,7 +39,7 @@ fn basic_buy_fees_message_executes() { let msg = Xcm(vec![ WithdrawAsset((Parent, 100).into()), BuyExecution { fees: (Parent, 1).into(), weight_limit: Unlimited }, - DepositAsset { assets: Wild(All), max_assets: 1, beneficiary: Parent.into() }, + DepositAsset { assets: Wild(AllCounted(1)), beneficiary: Parent.into() }, ]); let mut block_builder = client.init_polkadot_block_builder(); @@ -46,7 +48,7 @@ fn basic_buy_fees_message_executes() { &client, polkadot_test_runtime::RuntimeCall::Xcm(pallet_xcm::Call::execute { message: Box::new(VersionedXcm::from(msg)), - max_weight: 1_000_000_000, + max_weight: Weight::from_parts(1_000_000_000, 1024 * 1024), }), sp_keyring::Sr25519Keyring::Alice, 0, @@ -70,6 +72,59 @@ fn basic_buy_fees_message_executes() { }); } +#[test] +fn transact_recursion_limit_works() { + sp_tracing::try_init_simple(); + let mut client = TestClientBuilder::new() + .set_execution_strategy(ExecutionStrategy::AlwaysWasm) + .build(); + + let mut msg = Xcm(vec![ClearOrigin]); + let max_weight = ::Weigher::weight(&mut msg).unwrap(); + let mut call = polkadot_test_runtime::RuntimeCall::Xcm(pallet_xcm::Call::execute { + message: Box::new(VersionedXcm::from(msg)), + max_weight, + }); + + for _ in 0..11 { + let mut msg = Xcm(vec![ + WithdrawAsset((Parent, 1_000).into()), + BuyExecution { fees: (Parent, 1).into(), weight_limit: Unlimited }, + Transact { + origin_kind: OriginKind::Native, + require_weight_at_most: call.get_dispatch_info().weight, + call: call.encode().into(), + }, + ]); + let max_weight = ::Weigher::weight(&mut msg).unwrap(); + call = polkadot_test_runtime::RuntimeCall::Xcm(pallet_xcm::Call::execute { + message: Box::new(VersionedXcm::from(msg)), + max_weight, + }); + } + + let mut block_builder = client.init_polkadot_block_builder(); + + let execute = construct_extrinsic(&client, call, sp_keyring::Sr25519Keyring::Alice, 0); + + block_builder.push_polkadot_extrinsic(execute).expect("pushes extrinsic"); + + let block = block_builder.build().expect("Finalizes the block").block; + let block_hash = block.hash(); + + futures::executor::block_on(client.import(sp_consensus::BlockOrigin::Own, block)) + .expect("imports the block"); + + client.state_at(block_hash).expect("state should exist").inspect_state(|| { + assert!(polkadot_test_runtime::System::events().iter().any(|r| matches!( + r.event, + polkadot_test_runtime::RuntimeEvent::Xcm(pallet_xcm::Event::Attempted( + Outcome::Incomplete(_, XcmError::ExceedsStackLimit) + )), + ))); + }); +} + #[test] fn query_response_fires() { use pallet_test_notifier::Event::*; @@ -114,15 +169,16 @@ fn query_response_fires() { let mut block_builder = client.init_polkadot_block_builder(); let response = Response::ExecutionResult(None); - let max_weight = 1_000_000; - let msg = Xcm(vec![QueryResponse { query_id, response, max_weight }]); + let max_weight = Weight::from_parts(1_000_000, 1024 * 1024); + let querier = Some(Here.into()); + let msg = Xcm(vec![QueryResponse { query_id, response, max_weight, querier }]); let msg = Box::new(VersionedXcm::from(msg)); let execute = construct_extrinsic( &client, polkadot_test_runtime::RuntimeCall::Xcm(pallet_xcm::Call::execute { message: msg, - max_weight: 1_000_000_000, + max_weight: Weight::from_parts(1_000_000_000, 1024 * 1024), }), sp_keyring::Sr25519Keyring::Alice, 1, @@ -147,7 +203,7 @@ fn query_response_fires() { assert_eq!( polkadot_test_runtime::Xcm::query(query_id), Some(QueryStatus::Ready { - response: VersionedResponse::V2(Response::ExecutionResult(None)), + response: VersionedResponse::V3(Response::ExecutionResult(None)), at: 2u32.into() }), ) @@ -197,14 +253,15 @@ fn query_response_elicits_handler() { let mut block_builder = client.init_polkadot_block_builder(); let response = Response::ExecutionResult(None); - let max_weight = 1_000_000; - let msg = Xcm(vec![QueryResponse { query_id, response, max_weight }]); + let max_weight = Weight::from_parts(1_000_000, 1024 * 1024); + let querier = Some(Here.into()); + let msg = Xcm(vec![QueryResponse { query_id, response, max_weight, querier }]); let execute = construct_extrinsic( &client, polkadot_test_runtime::RuntimeCall::Xcm(pallet_xcm::Call::execute { message: Box::new(VersionedXcm::from(msg)), - max_weight: 1_000_000_000, + max_weight: Weight::from_parts(1_000_000_000, 1024 * 1024), }), sp_keyring::Sr25519Keyring::Alice, 1, diff --git a/xcm/xcm-executor/src/assets.rs b/xcm/xcm-executor/src/assets.rs index 6ecbf0e0cf44..9d5d94722aa8 100644 --- a/xcm/xcm-executor/src/assets.rs +++ b/xcm/xcm-executor/src/assets.rs @@ -23,9 +23,9 @@ use sp_std::{ use xcm::latest::{ AssetId, AssetInstance, Fungibility::{Fungible, NonFungible}, - MultiAsset, MultiAssetFilter, MultiAssets, MultiLocation, + InteriorMultiLocation, MultiAsset, MultiAssetFilter, MultiAssets, MultiLocation, WildFungibility::{Fungible as WildFungible, NonFungible as WildNonFungible}, - WildMultiAsset::{All, AllOf}, + WildMultiAsset::{All, AllCounted, AllOf, AllOfCounted}, }; /// List of non-wildcard fungible and non-fungible assets. @@ -60,7 +60,7 @@ impl From> for Assets { impl From for Assets { fn from(assets: MultiAssets) -> Assets { - assets.drain().into() + assets.into_inner().into() } } @@ -103,14 +103,14 @@ impl Assets { pub fn fungible_assets_iter(&self) -> impl Iterator + '_ { self.fungible .iter() - .map(|(id, &amount)| MultiAsset { fun: Fungible(amount), id: id.clone() }) + .map(|(id, &amount)| MultiAsset { fun: Fungible(amount), id: *id }) } /// A borrowing iterator over the non-fungible assets. pub fn non_fungible_assets_iter(&self) -> impl Iterator + '_ { self.non_fungible .iter() - .map(|(id, instance)| MultiAsset { fun: NonFungible(instance.clone()), id: id.clone() }) + .map(|(id, instance)| MultiAsset { fun: NonFungible(*instance), id: *id }) } /// A consuming iterator over all assets. @@ -210,20 +210,20 @@ impl Assets { } /// Mutate the assets to be interpreted as the same assets from the perspective of a `target` - /// chain. The local chain's `ancestry` is provided. + /// chain. The local chain's `context` is provided. /// /// Any assets which were unable to be reanchored are introduced into `failed_bin`. pub fn reanchor( &mut self, target: &MultiLocation, - ancestry: &MultiLocation, + context: InteriorMultiLocation, mut maybe_failed_bin: Option<&mut Self>, ) { let mut fungible = Default::default(); mem::swap(&mut self.fungible, &mut fungible); self.fungible = fungible .into_iter() - .filter_map(|(mut id, amount)| match id.reanchor(target, ancestry) { + .filter_map(|(mut id, amount)| match id.reanchor(target, context) { Ok(()) => Some((id, amount)), Err(()) => { maybe_failed_bin.as_mut().map(|f| f.fungible.insert(id, amount)); @@ -235,7 +235,7 @@ impl Assets { mem::swap(&mut self.non_fungible, &mut non_fungible); self.non_fungible = non_fungible .into_iter() - .filter_map(|(mut class, inst)| match class.reanchor(target, ancestry) { + .filter_map(|(mut class, inst)| match class.reanchor(target, context) { Ok(()) => Some((class, inst)), Err(()) => { maybe_failed_bin.as_mut().map(|f| f.non_fungible.insert((class, inst))); @@ -245,18 +245,42 @@ impl Assets { .collect(); } + /// Returns `true` if `asset` is contained within `self`. + pub fn contains_asset(&self, asset: &MultiAsset) -> bool { + match asset { + MultiAsset { fun: Fungible(amount), id } => + self.fungible.get(id).map_or(false, |a| a >= amount), + MultiAsset { fun: NonFungible(instance), id } => + self.non_fungible.contains(&(*id, *instance)), + } + } + + /// Returns `true` if all `assets` are contained within `self`. + pub fn contains_assets(&self, assets: &MultiAssets) -> bool { + assets.inner().iter().all(|a| self.contains_asset(a)) + } + + /// Returns `true` if all `assets` are contained within `self`. + pub fn contains(&self, assets: &Assets) -> bool { + assets + .fungible + .iter() + .all(|(k, v)| self.fungible.get(k).map_or(false, |a| a >= v)) && + self.non_fungible.is_superset(&assets.non_fungible) + } + /// Returns an error unless all `assets` are contained in `self`. In the case of an error, the first asset in /// `assets` which is not wholly in `self` is returned. pub fn ensure_contains(&self, assets: &MultiAssets) -> Result<(), TakeError> { for asset in assets.inner().iter() { match asset { - MultiAsset { fun: Fungible(ref amount), ref id } => { + MultiAsset { fun: Fungible(amount), id } => { if self.fungible.get(id).map_or(true, |a| a < amount) { - return Err(TakeError::AssetUnderflow((id.clone(), *amount).into())) + return Err(TakeError::AssetUnderflow((*id, *amount).into())) } }, - MultiAsset { fun: NonFungible(ref instance), ref id } => { - let id_instance = (id.clone(), instance.clone()); + MultiAsset { fun: NonFungible(instance), id } => { + let id_instance = (*id, *instance); if !self.non_fungible.contains(&id_instance) { return Err(TakeError::AssetUnderflow(id_instance.into())) } @@ -272,7 +296,8 @@ impl Assets { /// reducing it by assets it does not contain. In this case, the function is infallible. If `saturate` is `false` /// and `mask` references a definite asset which `self` does not contain then an error is returned. /// - /// The number of unique assets which are removed will never be any greater than `limit`. + /// The number of unique assets which are removed will respect the `count` parameter in the + /// counted wildcard variants. /// /// Returns `Ok` with the definite assets token from `self` and mutates `self` to its value minus /// `mask`. Returns `Err` in the non-saturating case where `self` did not contain (enough of) a definite asset to @@ -281,17 +306,18 @@ impl Assets { &mut self, mask: MultiAssetFilter, saturate: bool, - limit: usize, ) -> Result { let mut taken = Assets::new(); + let maybe_limit = mask.limit().map(|x| x as usize); match mask { - MultiAssetFilter::Wild(All) => - if self.fungible.len() + self.non_fungible.len() <= limit { + // TODO: Counted variants where we define `limit`. + MultiAssetFilter::Wild(All) | MultiAssetFilter::Wild(AllCounted(_)) => { + if maybe_limit.map_or(true, |l| self.len() <= l) { return Ok(self.swapped(Assets::new())) } else { let fungible = mem::replace(&mut self.fungible, Default::default()); fungible.into_iter().for_each(|(c, amount)| { - if taken.len() < limit { + if maybe_limit.map_or(true, |l| taken.len() < l) { taken.fungible.insert(c, amount); } else { self.fungible.insert(c, amount); @@ -299,22 +325,26 @@ impl Assets { }); let non_fungible = mem::replace(&mut self.non_fungible, Default::default()); non_fungible.into_iter().for_each(|(c, instance)| { - if taken.len() < limit { + if maybe_limit.map_or(true, |l| taken.len() < l) { taken.non_fungible.insert((c, instance)); } else { self.non_fungible.insert((c, instance)); } }); - }, - MultiAssetFilter::Wild(AllOf { fun: WildFungible, id }) => { - if let Some((id, amount)) = self.fungible.remove_entry(&id) { - taken.fungible.insert(id, amount); } }, + MultiAssetFilter::Wild(AllOfCounted { fun: WildFungible, id, .. }) | + MultiAssetFilter::Wild(AllOf { fun: WildFungible, id }) => + if maybe_limit.map_or(true, |l| l >= 1) { + if let Some((id, amount)) = self.fungible.remove_entry(&id) { + taken.fungible.insert(id, amount); + } + }, + MultiAssetFilter::Wild(AllOfCounted { fun: WildNonFungible, id, .. }) | MultiAssetFilter::Wild(AllOf { fun: WildNonFungible, id }) => { let non_fungible = mem::replace(&mut self.non_fungible, Default::default()); non_fungible.into_iter().for_each(|(c, instance)| { - if c == id && taken.len() < limit { + if c == id && maybe_limit.map_or(true, |l| taken.len() < l) { taken.non_fungible.insert((c, instance)); } else { self.non_fungible.insert((c, instance)); @@ -325,7 +355,7 @@ impl Assets { if !saturate { self.ensure_contains(&assets)?; } - for asset in assets.drain().into_iter() { + for asset in assets.into_inner().into_iter() { match asset { MultiAsset { fun: Fungible(amount), id } => { let (remove, amount) = match self.fungible.get_mut(&id) { @@ -350,9 +380,6 @@ impl Assets { } }, } - if taken.len() == limit { - break - } } }, } @@ -364,16 +391,7 @@ impl Assets { /// Returns `Ok` with the non-wildcard equivalence of `mask` taken and mutates `self` to its value minus /// `mask` if `self` contains `asset`, and return `Err` otherwise. pub fn saturating_take(&mut self, asset: MultiAssetFilter) -> Assets { - self.general_take(asset, true, usize::max_value()) - .expect("general_take never results in error when saturating") - } - - /// Mutates `self` to its original value less `mask` and returns `true` iff it contains at least `mask`. - /// - /// Returns `Ok` with the non-wildcard equivalence of `mask` taken and mutates `self` to its value minus - /// `mask` if `self` contains `asset`, and return `Err` otherwise. - pub fn limited_saturating_take(&mut self, asset: MultiAssetFilter, limit: usize) -> Assets { - self.general_take(asset, true, limit) + self.general_take(asset, true) .expect("general_take never results in error when saturating") } @@ -382,7 +400,7 @@ impl Assets { /// Returns `Ok` with the non-wildcard equivalence of `asset` taken and mutates `self` to its value minus /// `asset` if `self` contains `asset`, and return `Err` otherwise. pub fn try_take(&mut self, mask: MultiAssetFilter) -> Result { - self.general_take(mask, false, usize::max_value()) + self.general_take(mask, false) } /// Consumes `self` and returns its original value excluding `asset` iff it contains at least `asset`. @@ -415,47 +433,72 @@ impl Assets { /// Return the assets in `self`, but (asset-wise) of no greater value than `mask`. /// - /// Result is undefined if `mask` includes elements which match to the same asset more than once. + /// The number of unique assets which are returned will respect the `count` parameter in the + /// counted wildcard variants of `mask`. /// /// Example: /// /// ``` /// use xcm_executor::Assets; /// use xcm::latest::prelude::*; - /// let assets_i_have: Assets = vec![ (Here, 100).into(), (vec![0], 100).into() ].into(); - /// let assets_they_want: MultiAssetFilter = vec![ (Here, 200).into(), (vec![0], 50).into() ].into(); + /// let assets_i_have: Assets = vec![ (Here, 100).into(), ([0; 32], 100).into() ].into(); + /// let assets_they_want: MultiAssetFilter = vec![ (Here, 200).into(), ([0; 32], 50).into() ].into(); /// /// let assets_we_can_trade: Assets = assets_i_have.min(&assets_they_want); /// assert_eq!(assets_we_can_trade.into_assets_iter().collect::>(), vec![ - /// (Here, 100).into(), (vec![0], 50).into(), + /// (Here, 100).into(), ([0; 32], 50).into(), /// ]); /// ``` pub fn min(&self, mask: &MultiAssetFilter) -> Assets { let mut masked = Assets::new(); + let maybe_limit = mask.limit().map(|x| x as usize); + if maybe_limit.map_or(false, |l| l == 0) { + return masked + } match mask { - MultiAssetFilter::Wild(All) => return self.clone(), - MultiAssetFilter::Wild(AllOf { fun: WildFungible, id }) => { - if let Some(&amount) = self.fungible.get(&id) { - masked.fungible.insert(id.clone(), amount); + MultiAssetFilter::Wild(All) | MultiAssetFilter::Wild(AllCounted(_)) => { + if maybe_limit.map_or(true, |l| self.len() <= l) { + return self.clone() + } else { + for (&c, &amount) in self.fungible.iter() { + masked.fungible.insert(c, amount); + if maybe_limit.map_or(false, |l| masked.len() >= l) { + return masked + } + } + for (c, instance) in self.non_fungible.iter() { + masked.non_fungible.insert((*c, *instance)); + if maybe_limit.map_or(false, |l| masked.len() >= l) { + return masked + } + } } }, - MultiAssetFilter::Wild(AllOf { fun: WildNonFungible, id }) => { - self.non_fungible.iter().for_each(|(ref c, ref instance)| { + MultiAssetFilter::Wild(AllOfCounted { fun: WildFungible, id, .. }) | + MultiAssetFilter::Wild(AllOf { fun: WildFungible, id }) => + if let Some(&amount) = self.fungible.get(&id) { + masked.fungible.insert(*id, amount); + }, + MultiAssetFilter::Wild(AllOfCounted { fun: WildNonFungible, id, .. }) | + MultiAssetFilter::Wild(AllOf { fun: WildNonFungible, id }) => + for (c, instance) in self.non_fungible.iter() { if c == id { - masked.non_fungible.insert((c.clone(), instance.clone())); + masked.non_fungible.insert((*c, *instance)); + if maybe_limit.map_or(false, |l| masked.len() >= l) { + return masked + } } - }); - }, + }, MultiAssetFilter::Definite(assets) => for asset in assets.inner().iter() { match asset { - MultiAsset { fun: Fungible(ref amount), ref id } => { + MultiAsset { fun: Fungible(amount), id } => { if let Some(m) = self.fungible.get(id) { - masked.subsume((id.clone(), Fungible(*amount.min(m))).into()); + masked.subsume((*id, Fungible(*amount.min(m))).into()); } }, - MultiAsset { fun: NonFungible(ref instance), ref id } => { - let id_instance = (id.clone(), instance.clone()); + MultiAsset { fun: NonFungible(instance), id } => { + let id_instance = (*id, *instance); if self.non_fungible.contains(&id_instance) { masked.subsume(id_instance.into()); } @@ -474,12 +517,12 @@ mod tests { #[allow(non_snake_case)] /// Abstract fungible constructor fn AF(id: u8, amount: u128) -> MultiAsset { - (vec![id], amount).into() + ([id; 32], amount).into() } #[allow(non_snake_case)] /// Abstract non-fungible constructor fn ANF(class: u8, instance_id: u8) -> MultiAsset { - (vec![class], vec![instance_id]).into() + ([class; 32], [instance_id; 4]).into() } #[allow(non_snake_case)] /// Concrete fungible constructor @@ -586,11 +629,38 @@ mod tests { assert!(all_min.assets_iter().eq(assets.assets_iter())); } + #[test] + fn min_counted_works() { + let mut assets = Assets::new(); + assets.subsume(AF(1, 100)); + assets.subsume(ANF(2, 20)); + assets.subsume(CNF(40)); + assets.subsume(AF(10, 50)); + assets.subsume(ANF(2, 40)); + assets.subsume(ANF(2, 30)); + assets.subsume(CF(3000)); + assets.subsume(CNF(80)); + assets.subsume(ANF(3, 10)); + let fungible = WildMultiAsset::from(([1u8; 32], WildFungible)).counted(2).into(); + let non_fungible = WildMultiAsset::from(([2u8; 32], WildNonFungible)).counted(2).into(); + let all = WildMultiAsset::AllCounted(6).into(); + + let fungible = assets.min(&fungible); + let fungible = fungible.assets_iter().collect::>(); + assert_eq!(fungible, vec![AF(1, 100)]); + let non_fungible = assets.min(&non_fungible); + let non_fungible = non_fungible.assets_iter().collect::>(); + assert_eq!(non_fungible, vec![ANF(2, 20), ANF(2, 30)]); + let all = assets.min(&all); + let all = all.assets_iter().collect::>(); + assert_eq!(all, vec![CF(3000), AF(1, 100), AF(10, 50), CNF(40), CNF(80), ANF(2, 20),]); + } + #[test] fn min_all_abstract_works() { let assets = test_assets(); - let fungible = Wild((vec![1], WildFungible).into()); - let non_fungible = Wild((vec![2], WildNonFungible).into()); + let fungible = Wild(([1u8; 32], WildFungible).into()); + let non_fungible = Wild(([2u8; 32], WildNonFungible).into()); let fungible = assets.min(&fungible); let fungible = fungible.assets_iter().collect::>(); @@ -650,8 +720,8 @@ mod tests { #[test] fn saturating_take_all_abstract_works() { let mut assets = test_assets(); - let fungible = Wild((vec![1], WildFungible).into()); - let non_fungible = Wild((vec![2], WildNonFungible).into()); + let fungible = Wild(([1u8; 32], WildFungible).into()); + let non_fungible = Wild(([2u8; 32], WildNonFungible).into()); let fungible = assets.saturating_take(fungible); let fungible = fungible.assets_iter().collect::>(); @@ -703,4 +773,75 @@ mod tests { let assets = assets1.into_assets_iter().collect::>(); assert_eq!(assets, vec![AF(1, 50), ANF(2, 20)]); } + + #[test] + fn try_take_all_counted_works() { + let mut assets = Assets::new(); + assets.subsume(AF(1, 100)); + assets.subsume(ANF(2, 20)); + assets.subsume(CNF(40)); + assets.subsume(AF(10, 50)); + assets.subsume(ANF(2, 40)); + assets.subsume(ANF(2, 30)); + assets.subsume(CF(3000)); + assets.subsume(CNF(80)); + assets.subsume(ANF(3, 10)); + let all = assets.try_take(WildMultiAsset::AllCounted(6).into()).unwrap(); + assert_eq!( + MultiAssets::from(all).inner(), + &vec![CF(3000), AF(1, 100), AF(10, 50), CNF(40), CNF(80), ANF(2, 20),] + ); + assert_eq!(MultiAssets::from(assets).inner(), &vec![ANF(2, 30), ANF(2, 40), ANF(3, 10),]); + } + + #[test] + fn try_take_fungibles_counted_works() { + let mut assets = Assets::new(); + assets.subsume(AF(1, 100)); + assets.subsume(ANF(2, 20)); + assets.subsume(CNF(40)); + assets.subsume(AF(10, 50)); + assets.subsume(ANF(2, 40)); + assets.subsume(ANF(2, 30)); + assets.subsume(CF(3000)); + assets.subsume(CNF(80)); + assets.subsume(ANF(3, 10)); + let mask = WildMultiAsset::from(([1u8; 32], WildFungible)).counted(2).into(); + let taken = assets.try_take(mask).unwrap(); + assert_eq!(MultiAssets::from(taken).inner(), &vec![AF(1, 100)]); + assert_eq!( + MultiAssets::from(assets).inner(), + &vec![ + CF(3000), + AF(10, 50), + CNF(40), + CNF(80), + ANF(2, 20), + ANF(2, 30), + ANF(2, 40), + ANF(3, 10), + ] + ); + } + + #[test] + fn try_take_non_fungibles_counted_works() { + let mut assets = Assets::new(); + assets.subsume(AF(1, 100)); + assets.subsume(ANF(2, 20)); + assets.subsume(CNF(40)); + assets.subsume(AF(10, 50)); + assets.subsume(ANF(2, 40)); + assets.subsume(ANF(2, 30)); + assets.subsume(CF(3000)); + assets.subsume(CNF(80)); + assets.subsume(ANF(3, 10)); + let mask = WildMultiAsset::from(([2u8; 32], WildNonFungible)).counted(2).into(); + let taken = assets.try_take(mask).unwrap(); + assert_eq!(MultiAssets::from(taken).inner(), &vec![ANF(2, 20), ANF(2, 30),]); + assert_eq!( + MultiAssets::from(assets).inner(), + &vec![CF(3000), AF(1, 100), AF(10, 50), CNF(40), CNF(80), ANF(2, 40), ANF(3, 10),] + ); + } } diff --git a/xcm/xcm-executor/src/config.rs b/xcm/xcm-executor/src/config.rs index 8b15ac3b754f..9bb98055fb20 100644 --- a/xcm/xcm-executor/src/config.rs +++ b/xcm/xcm-executor/src/config.rs @@ -15,11 +15,15 @@ // along with Polkadot. If not, see . use crate::traits::{ - ClaimAssets, ConvertOrigin, DropAssets, FilterAssetLocation, InvertLocation, OnResponse, - ShouldExecute, TransactAsset, VersionChangeNotifier, WeightBounds, WeightTrader, + AssetExchange, AssetLock, CallDispatcher, ClaimAssets, ConvertOrigin, DropAssets, ExportXcm, + FeeManager, OnResponse, ShouldExecute, TransactAsset, VersionChangeNotifier, WeightBounds, + WeightTrader, }; -use frame_support::dispatch::{Dispatchable, GetDispatchInfo, Parameter, PostDispatchInfo}; -use xcm::latest::SendXcm; +use frame_support::{ + dispatch::{Dispatchable, GetDispatchInfo, Parameter, PostDispatchInfo}, + traits::{Contains, ContainsPair, Get, PalletsInfoAccess}, +}; +use xcm::prelude::*; /// The trait to parameterize the `XcmExecutor`. pub trait Config { @@ -35,14 +39,14 @@ pub trait Config { /// How to get a call origin from a `OriginKind` value. type OriginConverter: ConvertOrigin<::RuntimeOrigin>; - /// Combinations of (Location, Asset) pairs which we trust as reserves. - type IsReserve: FilterAssetLocation; + /// Combinations of (Asset, Location) pairs which we trust as reserves. + type IsReserve: ContainsPair; - /// Combinations of (Location, Asset) pairs which we trust as teleporters. - type IsTeleporter: FilterAssetLocation; + /// Combinations of (Asset, Location) pairs which we trust as teleporters. + type IsTeleporter: ContainsPair; - /// Means of inverting a location. - type LocationInverter: InvertLocation; + /// This chain's Universal Location. + type UniversalLocation: Get; /// Whether we should execute the given XCM at all. type Barrier: ShouldExecute; @@ -60,9 +64,46 @@ pub trait Config { /// end of execution. type AssetTrap: DropAssets; + /// Handler for asset locking. + type AssetLocker: AssetLock; + + /// Handler for exchanging assets. + type AssetExchanger: AssetExchange; + /// The handler for when there is an instruction to claim assets. type AssetClaims: ClaimAssets; /// How we handle version subscription requests. type SubscriptionService: VersionChangeNotifier; + + /// Information on all pallets. + type PalletInstancesInfo: PalletsInfoAccess; + + /// The maximum number of assets we target to have in the Holding Register at any one time. + /// + /// NOTE: In the worse case, the Holding Register may contain up to twice as many assets as this + /// and any benchmarks should take that into account. + type MaxAssetsIntoHolding: Get; + + /// Configure the fees. + type FeeManager: FeeManager; + + /// The method of exporting a message. + type MessageExporter: ExportXcm; + + /// The origin locations and specific universal junctions to which they are allowed to elevate + /// themselves. + type UniversalAliases: Contains<(MultiLocation, Junction)>; + + /// The call dispatcher used by XCM. + /// + /// XCM will use this to dispatch any calls. When no special call dispatcher is required, + /// this can be set to the same type as `Self::Call`. + type CallDispatcher: CallDispatcher; + + /// The safe call filter for `Transact`. + /// + /// Use this type to explicitly whitelist calls that cannot undergo recursion. This is a + /// temporary measure until we properly account for proof size weights for XCM instructions. + type SafeCallFilter: Contains; } diff --git a/xcm/xcm-executor/src/lib.rs b/xcm/xcm-executor/src/lib.rs index be2bd0c9791f..c4d3e2768aae 100644 --- a/xcm/xcm-executor/src/lib.rs +++ b/xcm/xcm-executor/src/lib.rs @@ -17,21 +17,22 @@ #![cfg_attr(not(feature = "std"), no_std)] use frame_support::{ - dispatch::{Dispatchable, GetDispatchInfo}, + dispatch::GetDispatchInfo, ensure, + traits::{Contains, ContainsPair, Get, PalletsInfoAccess}, }; -use sp_runtime::traits::Saturating; +use parity_scale_codec::{Decode, Encode}; +use sp_core::defer; +use sp_io::hashing::blake2_128; use sp_std::{marker::PhantomData, prelude::*}; -use xcm::latest::{ - Error as XcmError, ExecuteXcm, - Instruction::{self, *}, - MultiAssets, MultiLocation, Outcome, Response, SendXcm, Weight, Xcm, -}; +use sp_weights::Weight; +use xcm::latest::prelude::*; pub mod traits; use traits::{ - ClaimAssets, ConvertOrigin, DropAssets, FilterAssetLocation, InvertLocation, OnResponse, - ShouldExecute, TransactAsset, VersionChangeNotifier, WeightBounds, WeightTrader, + validate_export, AssetExchange, AssetLock, CallDispatcher, ClaimAssets, ConvertOrigin, + DropAssets, Enact, ExportXcm, FeeManager, FeeReason, OnResponse, ShouldExecute, TransactAsset, + VersionChangeNotifier, WeightBounds, WeightTrader, }; mod assets; @@ -39,94 +40,191 @@ pub use assets::Assets; mod config; pub use config::Config; +/// A struct to specify how fees are being paid. +#[derive(Copy, Clone, Debug, PartialEq, Eq)] +pub struct FeesMode { + /// If true, then the fee assets are taken directly from the origin's on-chain account, + /// otherwise the fee assets are taken from the holding register. + /// + /// Defaults to false. + pub jit_withdraw: bool, +} + +const RECURSION_LIMIT: u8 = 10; + +environmental::environmental!(recursion_count: u8); + /// The XCM executor. pub struct XcmExecutor { - pub holding: Assets, - pub origin: Option, - pub original_origin: MultiLocation, - pub trader: Config::Trader, + holding: Assets, + holding_limit: usize, + context: XcmContext, + original_origin: MultiLocation, + trader: Config::Trader, /// The most recent error result and instruction index into the fragment in which it occurred, /// if any. - pub error: Option<(u32, XcmError)>, + error: Option<(u32, XcmError)>, /// The surplus weight, defined as the amount by which `max_weight` is /// an over-estimate of the actual weight consumed. We do it this way to avoid needing the /// execution engine to keep track of all instructions' weights (it only needs to care about /// the weight of dynamically determined instructions such as `Transact`). - pub total_surplus: u64, - pub total_refunded: u64, - pub error_handler: Xcm, - pub error_handler_weight: u64, - pub appendix: Xcm, - pub appendix_weight: u64, + total_surplus: Weight, + total_refunded: Weight, + error_handler: Xcm, + error_handler_weight: Weight, + appendix: Xcm, + appendix_weight: Weight, + transact_status: MaybeErrorCode, + fees_mode: FeesMode, _config: PhantomData, } -/// The maximum recursion limit for `execute_xcm` and `execute_effects`. -pub const MAX_RECURSION_LIMIT: u32 = 8; +#[cfg(feature = "runtime-benchmarks")] +impl XcmExecutor { + pub fn holding(&self) -> &Assets { + &self.holding + } + pub fn set_holding(&mut self, v: Assets) { + self.holding = v + } + pub fn holding_limit(&self) -> &usize { + &self.holding_limit + } + pub fn set_holding_limit(&mut self, v: usize) { + self.holding_limit = v + } + pub fn origin(&self) -> &Option { + &self.context.origin + } + pub fn set_origin(&mut self, v: Option) { + self.context.origin = v + } + pub fn original_origin(&self) -> &MultiLocation { + &self.original_origin + } + pub fn set_original_origin(&mut self, v: MultiLocation) { + self.original_origin = v + } + pub fn trader(&self) -> &Config::Trader { + &self.trader + } + pub fn set_trader(&mut self, v: Config::Trader) { + self.trader = v + } + pub fn error(&self) -> &Option<(u32, XcmError)> { + &self.error + } + pub fn set_error(&mut self, v: Option<(u32, XcmError)>) { + self.error = v + } + pub fn total_surplus(&self) -> &Weight { + &self.total_surplus + } + pub fn set_total_surplus(&mut self, v: Weight) { + self.total_surplus = v + } + pub fn total_refunded(&self) -> &Weight { + &self.total_refunded + } + pub fn set_total_refunded(&mut self, v: Weight) { + self.total_refunded = v + } + pub fn error_handler(&self) -> &Xcm { + &self.error_handler + } + pub fn set_error_handler(&mut self, v: Xcm) { + self.error_handler = v + } + pub fn error_handler_weight(&self) -> &Weight { + &self.error_handler_weight + } + pub fn set_error_handler_weight(&mut self, v: Weight) { + self.error_handler_weight = v + } + pub fn appendix(&self) -> &Xcm { + &self.appendix + } + pub fn set_appendix(&mut self, v: Xcm) { + self.appendix = v + } + pub fn appendix_weight(&self) -> &Weight { + &self.appendix_weight + } + pub fn set_appendix_weight(&mut self, v: Weight) { + self.appendix_weight = v + } + pub fn transact_status(&self) -> &MaybeErrorCode { + &self.transact_status + } + pub fn set_transact_status(&mut self, v: MaybeErrorCode) { + self.transact_status = v + } + pub fn fees_mode(&self) -> &FeesMode { + &self.fees_mode + } + pub fn set_fees_mode(&mut self, v: FeesMode) { + self.fees_mode = v + } + pub fn topic(&self) -> &Option<[u8; 32]> { + &self.context.topic + } + pub fn set_topic(&mut self, v: Option<[u8; 32]>) { + self.context.topic = v; + } +} + +pub struct WeighedMessage(Weight, Xcm); +impl PreparedMessage for WeighedMessage { + fn weight_of(&self) -> Weight { + self.0 + } +} impl ExecuteXcm for XcmExecutor { - fn execute_xcm_in_credit( - origin: impl Into, + type Prepared = WeighedMessage; + fn prepare( mut message: Xcm, - weight_limit: Weight, + ) -> Result> { + match Config::Weigher::weight(&mut message) { + Ok(weight) => Ok(WeighedMessage(weight, message)), + Err(_) => Err(message), + } + } + fn execute( + origin: impl Into, + WeighedMessage(xcm_weight, mut message): WeighedMessage, + message_hash: XcmHash, mut weight_credit: Weight, ) -> Outcome { let origin = origin.into(); log::trace!( target: "xcm::execute_xcm_in_credit", - "origin: {:?}, message: {:?}, weight_limit: {:?}, weight_credit: {:?}", + "origin: {:?}, message: {:?}, weight_credit: {:?}", origin, message, - weight_limit, weight_credit, ); - let xcm_weight = match Config::Weigher::weight(&mut message) { - Ok(x) => x, - Err(()) => { - log::debug!( - target: "xcm::execute_xcm_in_credit", - "Weight not computable! (origin: {:?}, message: {:?}, weight_limit: {:?}, weight_credit: {:?})", - origin, - message, - weight_limit, - weight_credit, - ); - return Outcome::Error(XcmError::WeightNotComputable) - }, - }; - if xcm_weight > weight_limit { - log::debug!( - target: "xcm::execute_xcm_in_credit", - "Weight limit reached! weight > weight_limit: {:?} > {:?}. (origin: {:?}, message: {:?}, weight_limit: {:?}, weight_credit: {:?})", - xcm_weight, - weight_limit, - origin, - message, - weight_limit, - weight_credit, - ); - return Outcome::Error(XcmError::WeightLimitReached(xcm_weight)) - } - - if let Err(e) = - Config::Barrier::should_execute(&origin, &mut message, xcm_weight, &mut weight_credit) - { - log::debug!( + if let Err(e) = Config::Barrier::should_execute( + &origin, + message.inner_mut(), + xcm_weight, + &mut weight_credit, + ) { + log::trace!( target: "xcm::execute_xcm_in_credit", - "Barrier blocked execution! Error: {:?}. (origin: {:?}, message: {:?}, weight_limit: {:?}, weight_credit: {:?})", + "Barrier blocked execution! Error: {:?}. (origin: {:?}, message: {:?}, weight_credit: {:?})", e, origin, message, - weight_limit, weight_credit, ); return Outcome::Error(XcmError::Barrier) } - let mut vm = Self::new(origin); + let mut vm = Self::new(origin, message_hash); while !message.0.is_empty() { - let result = vm.execute(message); + let result = vm.process(message); log::trace!(target: "xcm::execute_xcm_in_credit", "result: {:?}", result); message = if let Err(error) = result { vm.total_surplus.saturating_accrue(error.weight); @@ -138,7 +236,18 @@ impl ExecuteXcm for XcmExecutor, fees: MultiAssets) -> XcmResult { + let origin = origin.into(); + if !Config::FeeManager::is_waived(Some(&origin), FeeReason::ChargeFees) { + for asset in fees.inner() { + Config::AssetTransactor::withdraw_asset(&asset, &origin, None)?; + } + Config::FeeManager::handle_fee(fees); + } + Ok(()) } } @@ -146,7 +255,7 @@ impl ExecuteXcm for XcmExecutor for frame_benchmarking::BenchmarkError { } impl XcmExecutor { - pub fn new(origin: impl Into) -> Self { + pub fn new(origin: impl Into, message_hash: XcmHash) -> Self { let origin = origin.into(); Self { holding: Assets::new(), - origin: Some(origin.clone()), + holding_limit: Config::MaxAssetsIntoHolding::get() as usize, + context: XcmContext { origin: Some(origin), message_hash, topic: None }, original_origin: origin, trader: Config::Trader::new(), error: None, - total_surplus: 0, - total_refunded: 0, + total_surplus: Weight::zero(), + total_refunded: Weight::zero(), error_handler: Xcm(vec![]), - error_handler_weight: 0, + error_handler_weight: Weight::zero(), appendix: Xcm(vec![]), - appendix_weight: 0, + appendix_weight: Weight::zero(), + transact_status: Default::default(), + fees_mode: FeesMode { jit_withdraw: false }, _config: PhantomData, } } - /// Execute the XCM program fragment and report back the error and which instruction caused it, - /// or `Ok` if there was no error. - pub fn execute(&mut self, xcm: Xcm) -> Result<(), ExecutorError> { + #[cfg(feature = "runtime-benchmarks")] + pub fn bench_process(&mut self, xcm: Xcm) -> Result<(), ExecutorError> { + self.process(xcm) + } + + fn process(&mut self, xcm: Xcm) -> Result<(), ExecutorError> { log::trace!( - target: "xcm::execute", + target: "xcm::process", "origin: {:?}, total_surplus/refunded: {:?}/{:?}, error_handler_weight: {:?}", - self.origin, + self.origin_ref(), self.total_surplus, self.total_refunded, self.error_handler_weight, @@ -195,10 +310,39 @@ impl XcmExecutor { let mut result = Ok(()); for (i, instr) in xcm.0.into_iter().enumerate() { match &mut result { - r @ Ok(()) => - if let Err(e) = self.process_instruction(instr) { - *r = Err(ExecutorError { index: i as u32, xcm_error: e, weight: 0 }); - }, + r @ Ok(()) => { + // Initialize the recursion count only the first time we hit this code in our + // potential recursive execution. + let inst_res = recursion_count::using_once(&mut 1, || { + recursion_count::with(|count| { + if *count > RECURSION_LIMIT { + return Err(XcmError::ExceedsStackLimit) + } + *count = count.saturating_add(1); + Ok(()) + }) + // This should always return `Some`, but let's play it safe. + .unwrap_or(Ok(()))?; + + // Ensure that we always decrement the counter whenever we finish processing + // the instruction. + defer! { + recursion_count::with(|count| { + *count = count.saturating_sub(1); + }); + } + + self.process_instruction(instr) + }); + if let Err(e) = inst_res { + log::trace!(target: "xcm::execute", "!!! ERROR: {:?}", e); + *r = Err(ExecutorError { + index: i as u32, + xcm_error: e, + weight: Weight::zero(), + }); + } + }, Err(ref mut error) => if let Ok(x) = Config::Weigher::instr_weight(&instr) { error.weight.saturating_accrue(x) @@ -210,15 +354,23 @@ impl XcmExecutor { /// Execute any final operations after having executed the XCM message. /// This includes refunding surplus weight, trapping extra holding funds, and returning any errors during execution. - pub fn post_execute(mut self, xcm_weight: Weight) -> Outcome { - self.refund_surplus(); + pub fn post_process(mut self, xcm_weight: Weight) -> Outcome { + // We silently drop any error from our attempt to refund the surplus as it's a charitable + // thing so best-effort is all we will do. + let _ = self.refund_surplus(); drop(self.trader); let mut weight_used = xcm_weight.saturating_sub(self.total_surplus); if !self.holding.is_empty() { - log::trace!(target: "xcm::execute_xcm_in_credit", "Trapping assets in holding register: {:?} (original_origin: {:?})", self.holding, self.original_origin); - let trap_weight = Config::AssetTrap::drop_assets(&self.original_origin, self.holding); + log::trace!( + target: "xcm::execute_xcm_in_credit", + "Trapping assets in holding register: {:?}, context: {:?} (original_origin: {:?})", + self.holding, self.context, self.original_origin, + ); + let effective_origin = self.context.origin.as_ref().unwrap_or(&self.original_origin); + let trap_weight = + Config::AssetTrap::drop_assets(effective_origin, self.holding, &self.context); weight_used.saturating_accrue(trap_weight); }; @@ -227,17 +379,40 @@ impl XcmExecutor { // TODO: #2841 #REALWEIGHT We should deduct the cost of any instructions following // the error which didn't end up being executed. Some((_i, e)) => { - log::debug!(target: "xcm::execute_xcm_in_credit", "Execution errored at {:?}: {:?} (original_origin: {:?})", _i, e, self.original_origin); + log::trace!(target: "xcm::execute_xcm_in_credit", "Execution errored at {:?}: {:?} (original_origin: {:?})", _i, e, self.original_origin); Outcome::Incomplete(weight_used, e) }, } } + fn origin_ref(&self) -> Option<&MultiLocation> { + self.context.origin.as_ref() + } + + fn cloned_origin(&self) -> Option { + self.context.origin + } + + /// Send an XCM, charging fees from Holding as needed. + fn send( + &mut self, + dest: MultiLocation, + msg: Xcm<()>, + reason: FeeReason, + ) -> Result { + let (ticket, fee) = validate_send::(dest, msg)?; + if !Config::FeeManager::is_waived(self.origin_ref(), reason) { + let paid = self.holding.try_take(fee.into()).map_err(|_| XcmError::NotHoldingFees)?; + Config::FeeManager::handle_fee(paid.into()); + } + Config::XcmSender::deliver(ticket).map_err(Into::into) + } + /// Remove the registered error handler and return it. Do not refund its weight. fn take_error_handler(&mut self) -> Xcm { let mut r = Xcm::(vec![]); sp_std::mem::swap(&mut self.error_handler, &mut r); - self.error_handler_weight = 0; + self.error_handler_weight = Weight::zero(); r } @@ -245,26 +420,45 @@ impl XcmExecutor { fn drop_error_handler(&mut self) { self.error_handler = Xcm::(vec![]); self.total_surplus.saturating_accrue(self.error_handler_weight); - self.error_handler_weight = 0; + self.error_handler_weight = Weight::zero(); } /// Remove the registered appendix and return it. fn take_appendix(&mut self) -> Xcm { let mut r = Xcm::(vec![]); sp_std::mem::swap(&mut self.appendix, &mut r); - self.appendix_weight = 0; + self.appendix_weight = Weight::zero(); r } + fn subsume_asset(&mut self, asset: MultiAsset) -> Result<(), XcmError> { + // worst-case, holding.len becomes 2 * holding_limit. + ensure!(self.holding.len() < self.holding_limit * 2, XcmError::HoldingWouldOverflow); + self.holding.subsume(asset); + Ok(()) + } + + fn subsume_assets(&mut self, assets: Assets) -> Result<(), XcmError> { + // worst-case, holding.len becomes 2 * holding_limit. + // this guarantees that if holding.len() == holding_limit and you have holding_limit more + // items (which has a best case outcome of holding.len() == holding_limit), then you'll + // be guaranteed of making the operation. + let worst_case_holding_len = self.holding.len() + assets.len(); + ensure!(worst_case_holding_len <= self.holding_limit * 2, XcmError::HoldingWouldOverflow); + self.holding.subsume_assets(assets); + Ok(()) + } + /// Refund any unused weight. - fn refund_surplus(&mut self) { + fn refund_surplus(&mut self) -> Result<(), XcmError> { let current_surplus = self.total_surplus.saturating_sub(self.total_refunded); - if current_surplus > 0 { + if current_surplus.any_gt(Weight::zero()) { self.total_refunded.saturating_accrue(current_surplus); if let Some(w) = self.trader.refund_weight(current_surplus) { - self.holding.subsume(w); + self.subsume_asset(w)?; } } + Ok(()) } /// Process a single XCM instruction, mutating the state of the XCM virtual machine. @@ -272,89 +466,104 @@ impl XcmExecutor { &mut self, instr: Instruction, ) -> Result<(), XcmError> { + log::trace!( + target: "xcm::process_instruction", + "=== {:?}", + instr + ); match instr { WithdrawAsset(assets) => { // Take `assets` from the origin account (on-chain) and place in holding. - let origin = self.origin.as_ref().ok_or(XcmError::BadOrigin)?; - for asset in assets.drain().into_iter() { - Config::AssetTransactor::withdraw_asset(&asset, origin)?; - self.holding.subsume(asset); + let origin = *self.origin_ref().ok_or(XcmError::BadOrigin)?; + for asset in assets.into_inner().into_iter() { + Config::AssetTransactor::withdraw_asset(&asset, &origin, Some(&self.context))?; + self.subsume_asset(asset)?; } Ok(()) }, ReserveAssetDeposited(assets) => { // check whether we trust origin to be our reserve location for this asset. - let origin = self.origin.as_ref().ok_or(XcmError::BadOrigin)?; - for asset in assets.drain().into_iter() { + let origin = *self.origin_ref().ok_or(XcmError::BadOrigin)?; + for asset in assets.into_inner().into_iter() { // Must ensure that we recognise the asset as being managed by the origin. ensure!( - Config::IsReserve::filter_asset_location(&asset, origin), + Config::IsReserve::contains(&asset, &origin), XcmError::UntrustedReserveLocation ); - self.holding.subsume(asset); + self.subsume_asset(asset)?; } Ok(()) }, TransferAsset { assets, beneficiary } => { // Take `assets` from the origin account (on-chain) and place into dest account. - let origin = self.origin.as_ref().ok_or(XcmError::BadOrigin)?; + let origin = self.origin_ref().ok_or(XcmError::BadOrigin)?; for asset in assets.inner() { - Config::AssetTransactor::transfer_asset(&asset, origin, &beneficiary)?; + Config::AssetTransactor::transfer_asset( + &asset, + origin, + &beneficiary, + &self.context, + )?; } Ok(()) }, TransferReserveAsset { mut assets, dest, xcm } => { - let origin = self.origin.as_ref().ok_or(XcmError::BadOrigin)?; + let origin = self.origin_ref().ok_or(XcmError::BadOrigin)?; // Take `assets` from the origin account (on-chain) and place into dest account. for asset in assets.inner() { - Config::AssetTransactor::transfer_asset(asset, origin, &dest)?; + Config::AssetTransactor::transfer_asset(asset, origin, &dest, &self.context)?; } - let ancestry = Config::LocationInverter::ancestry(); - assets.reanchor(&dest, &ancestry).map_err(|()| XcmError::MultiLocationFull)?; + let reanchor_context = Config::UniversalLocation::get(); + assets.reanchor(&dest, reanchor_context).map_err(|()| XcmError::LocationFull)?; let mut message = vec![ReserveAssetDeposited(assets), ClearOrigin]; message.extend(xcm.0.into_iter()); - Config::XcmSender::send_xcm(dest, Xcm(message)).map_err(Into::into) + self.send(dest, Xcm(message), FeeReason::TransferReserveAsset)?; + Ok(()) }, ReceiveTeleportedAsset(assets) => { - let origin = self.origin.as_ref().ok_or(XcmError::BadOrigin)?; + let origin = *self.origin_ref().ok_or(XcmError::BadOrigin)?; // check whether we trust origin to teleport this asset to us via config trait. for asset in assets.inner() { // We only trust the origin to send us assets that they identify as their // sovereign assets. ensure!( - Config::IsTeleporter::filter_asset_location(asset, origin), + Config::IsTeleporter::contains(asset, &origin), XcmError::UntrustedTeleportLocation ); // We should check that the asset can actually be teleported in (for this to be in error, there // would need to be an accounting violation by one of the trusted chains, so it's unlikely, but we // don't want to punish a possibly innocent chain/user). - Config::AssetTransactor::can_check_in(&origin, asset)?; + Config::AssetTransactor::can_check_in(&origin, asset, &self.context)?; } - for asset in assets.drain().into_iter() { - Config::AssetTransactor::check_in(origin, &asset); - self.holding.subsume(asset); + for asset in assets.into_inner().into_iter() { + Config::AssetTransactor::check_in(&origin, &asset, &self.context); + self.subsume_asset(asset)?; } Ok(()) }, - Transact { origin_type, require_weight_at_most, mut call } => { + Transact { origin_kind, require_weight_at_most, mut call } => { // We assume that the Relay-chain is allowed to use transact on this parachain. - let origin = self.origin.clone().ok_or(XcmError::BadOrigin)?; + let origin = *self.origin_ref().ok_or(XcmError::BadOrigin)?; // TODO: #2841 #TRANSACTFILTER allow the trait to issue filters for the relay-chain let message_call = call.take_decoded().map_err(|_| XcmError::FailedToDecode)?; - let dispatch_origin = Config::OriginConverter::convert_origin(origin, origin_type) + ensure!(Config::SafeCallFilter::contains(&message_call), XcmError::NoPermission); + let dispatch_origin = Config::OriginConverter::convert_origin(origin, origin_kind) .map_err(|_| XcmError::BadOrigin)?; let weight = message_call.get_dispatch_info().weight; - ensure!(weight.ref_time() <= require_weight_at_most, XcmError::MaxWeightInvalid); - let actual_weight = match message_call.dispatch(dispatch_origin) { - Ok(post_info) => post_info.actual_weight, - Err(error_and_info) => { - // Not much to do with the result as it is. It's up to the parachain to ensure that the - // message makes sense. - error_and_info.post_info.actual_weight - }, - } - .unwrap_or(weight); + ensure!(weight.all_lte(require_weight_at_most), XcmError::MaxWeightInvalid); + let maybe_actual_weight = + match Config::CallDispatcher::dispatch(message_call, dispatch_origin) { + Ok(post_info) => { + self.transact_status = MaybeErrorCode::Success; + post_info.actual_weight + }, + Err(error_and_info) => { + self.transact_status = error_and_info.error.encode().into(); + error_and_info.post_info.actual_weight + }, + }; + let actual_weight = maybe_actual_weight.unwrap_or(weight); let surplus = weight.saturating_sub(actual_weight); // We assume that the `Config::Weigher` will counts the `require_weight_at_most` // for the estimate of how much weight this instruction will take. Now that we know @@ -364,50 +573,62 @@ impl XcmExecutor { // reported back to the caller and this ensures that they account for the total // weight consumed correctly (potentially allowing them to do more operations in a // block than they otherwise would). - self.total_surplus.saturating_accrue(surplus.ref_time()); + self.total_surplus.saturating_accrue(surplus); Ok(()) }, - QueryResponse { query_id, response, max_weight } => { - let origin = self.origin.as_ref().ok_or(XcmError::BadOrigin)?; - Config::ResponseHandler::on_response(origin, query_id, response, max_weight); + QueryResponse { query_id, response, max_weight, querier } => { + let origin = self.origin_ref().ok_or(XcmError::BadOrigin)?; + Config::ResponseHandler::on_response( + origin, + query_id, + querier.as_ref(), + response, + max_weight, + &self.context, + ); Ok(()) }, DescendOrigin(who) => self + .context .origin .as_mut() .ok_or(XcmError::BadOrigin)? .append_with(who) - .map_err(|_| XcmError::MultiLocationFull), + .map_err(|_| XcmError::LocationFull), ClearOrigin => { - self.origin = None; + self.context.origin = None; Ok(()) }, - ReportError { query_id, dest, max_response_weight: max_weight } => { + ReportError(response_info) => { // Report the given result by sending a QueryResponse XCM to a previously given outcome // destination if one was registered. - let response = Response::ExecutionResult(self.error); - let message = QueryResponse { query_id, response, max_weight }; - Config::XcmSender::send_xcm(dest, Xcm(vec![message]))?; + self.respond( + self.cloned_origin(), + Response::ExecutionResult(self.error), + response_info, + FeeReason::Report, + )?; Ok(()) }, - DepositAsset { assets, max_assets, beneficiary } => { - let deposited = self.holding.limited_saturating_take(assets, max_assets as usize); + DepositAsset { assets, beneficiary } => { + let deposited = self.holding.saturating_take(assets); for asset in deposited.into_assets_iter() { - Config::AssetTransactor::deposit_asset(&asset, &beneficiary)?; + Config::AssetTransactor::deposit_asset(&asset, &beneficiary, &self.context)?; } Ok(()) }, - DepositReserveAsset { assets, max_assets, dest, xcm } => { - let deposited = self.holding.limited_saturating_take(assets, max_assets as usize); + DepositReserveAsset { assets, dest, xcm } => { + let deposited = self.holding.saturating_take(assets); for asset in deposited.assets_iter() { - Config::AssetTransactor::deposit_asset(&asset, &dest)?; + Config::AssetTransactor::deposit_asset(&asset, &dest, &self.context)?; } // Note that we pass `None` as `maybe_failed_bin` and drop any assets which cannot // be reanchored because we have already called `deposit_asset` on all assets. let assets = Self::reanchored(deposited, &dest, None); let mut message = vec![ReserveAssetDeposited(assets), ClearOrigin]; message.extend(xcm.0.into_iter()); - Config::XcmSender::send_xcm(dest, Xcm(message)).map_err(Into::into) + self.send(dest, Xcm(message), FeeReason::DepositReserveAsset)?; + Ok(()) }, InitiateReserveWithdraw { assets, reserve, xcm } => { // Note that here we are able to place any assets which could not be reanchored @@ -419,48 +640,58 @@ impl XcmExecutor { ); let mut message = vec![WithdrawAsset(assets), ClearOrigin]; message.extend(xcm.0.into_iter()); - Config::XcmSender::send_xcm(reserve, Xcm(message)).map_err(Into::into) + self.send(reserve, Xcm(message), FeeReason::InitiateReserveWithdraw)?; + Ok(()) }, InitiateTeleport { assets, dest, xcm } => { // We must do this first in order to resolve wildcards. let assets = self.holding.saturating_take(assets); for asset in assets.assets_iter() { - Config::AssetTransactor::check_out(&dest, &asset); + // We should check that the asset can actually be teleported out (for this to + // be in error, there would need to be an accounting violation by ourselves, + // so it's unlikely, but we don't want to allow that kind of bug to leak into + // a trusted chain. + Config::AssetTransactor::can_check_out(&dest, &asset, &self.context)?; + } + for asset in assets.assets_iter() { + Config::AssetTransactor::check_out(&dest, &asset, &self.context); } // Note that we pass `None` as `maybe_failed_bin` and drop any assets which cannot // be reanchored because we have already checked all assets out. let assets = Self::reanchored(assets, &dest, None); let mut message = vec![ReceiveTeleportedAsset(assets), ClearOrigin]; message.extend(xcm.0.into_iter()); - Config::XcmSender::send_xcm(dest, Xcm(message)).map_err(Into::into) + self.send(dest, Xcm(message), FeeReason::InitiateTeleport)?; + Ok(()) }, - QueryHolding { query_id, dest, assets, max_response_weight } => { + ReportHolding { response_info, assets } => { // Note that we pass `None` as `maybe_failed_bin` since no assets were ever removed // from Holding. - let assets = Self::reanchored(self.holding.min(&assets), &dest, None); - let max_weight = max_response_weight; - let response = Response::Assets(assets); - let instruction = QueryResponse { query_id, response, max_weight }; - Config::XcmSender::send_xcm(dest, Xcm(vec![instruction])).map_err(Into::into) + let assets = + Self::reanchored(self.holding.min(&assets), &response_info.destination, None); + self.respond( + self.cloned_origin(), + Response::Assets(assets), + response_info, + FeeReason::Report, + )?; + Ok(()) }, BuyExecution { fees, weight_limit } => { // There is no need to buy any weight is `weight_limit` is `Unlimited` since it // would indicate that `AllowTopLevelPaidExecutionFrom` was unused for execution // and thus there is some other reason why it has been determined that this XCM // should be executed. - if let Some(weight) = Option::::from(weight_limit) { + if let Some(weight) = Option::::from(weight_limit) { // pay for `weight` using up to `fees` of the holding register. let max_fee = self.holding.try_take(fees.into()).map_err(|_| XcmError::NotHoldingFees)?; let unspent = self.trader.buy_weight(weight, max_fee)?; - self.holding.subsume_assets(unspent); + self.subsume_assets(unspent)?; } Ok(()) }, - RefundSurplus => { - self.refund_surplus(); - Ok(()) - }, + RefundSurplus => self.refund_surplus(), SetErrorHandler(mut handler) => { let handler_weight = Config::Weigher::weight(&mut handler) .map_err(|()| XcmError::WeightNotComputable)?; @@ -482,41 +713,288 @@ impl XcmExecutor { Ok(()) }, ClaimAsset { assets, ticket } => { - let origin = self.origin.as_ref().ok_or(XcmError::BadOrigin)?; - let ok = Config::AssetClaims::claim_assets(origin, &ticket, &assets); + let origin = self.origin_ref().ok_or(XcmError::BadOrigin)?; + let ok = Config::AssetClaims::claim_assets(origin, &ticket, &assets, &self.context); ensure!(ok, XcmError::UnknownClaim); - for asset in assets.drain().into_iter() { - self.holding.subsume(asset); + for asset in assets.into_inner().into_iter() { + self.subsume_asset(asset)?; } Ok(()) }, Trap(code) => Err(XcmError::Trap(code)), SubscribeVersion { query_id, max_response_weight } => { - let origin = self.origin.as_ref().ok_or(XcmError::BadOrigin)?.clone(); + let origin = self.origin_ref().ok_or(XcmError::BadOrigin)?; // We don't allow derivative origins to subscribe since it would otherwise pose a // DoS risk. - ensure!(self.original_origin == origin, XcmError::BadOrigin); - Config::SubscriptionService::start(&origin, query_id, max_response_weight) + ensure!(&self.original_origin == origin, XcmError::BadOrigin); + Config::SubscriptionService::start( + origin, + query_id, + max_response_weight, + &self.context, + ) }, UnsubscribeVersion => { - let origin = self.origin.as_ref().ok_or(XcmError::BadOrigin)?; + let origin = self.origin_ref().ok_or(XcmError::BadOrigin)?; ensure!(&self.original_origin == origin, XcmError::BadOrigin); - Config::SubscriptionService::stop(origin) + Config::SubscriptionService::stop(origin, &self.context) + }, + BurnAsset(assets) => { + self.holding.saturating_take(assets.into()); + Ok(()) + }, + ExpectAsset(assets) => + self.holding.ensure_contains(&assets).map_err(|_| XcmError::ExpectationFalse), + ExpectOrigin(origin) => { + ensure!(self.context.origin == origin, XcmError::ExpectationFalse); + Ok(()) + }, + ExpectError(error) => { + ensure!(self.error == error, XcmError::ExpectationFalse); + Ok(()) + }, + ExpectTransactStatus(transact_status) => { + ensure!(self.transact_status == transact_status, XcmError::ExpectationFalse); + Ok(()) + }, + QueryPallet { module_name, response_info } => { + let pallets = Config::PalletInstancesInfo::infos() + .into_iter() + .filter(|x| x.module_name.as_bytes() == &module_name[..]) + .map(|x| { + PalletInfo::new( + x.index as u32, + x.name.as_bytes().into(), + x.module_name.as_bytes().into(), + x.crate_version.major as u32, + x.crate_version.minor as u32, + x.crate_version.patch as u32, + ) + }) + .collect::, XcmError>>()?; + let QueryResponseInfo { destination, query_id, max_weight } = response_info; + let response = + Response::PalletsInfo(pallets.try_into().map_err(|_| XcmError::Overflow)?); + let querier = Self::to_querier(self.cloned_origin(), &destination)?; + let instruction = QueryResponse { query_id, response, max_weight, querier }; + let message = Xcm(vec![instruction]); + self.send(destination, message, FeeReason::QueryPallet)?; + Ok(()) + }, + ExpectPallet { index, name, module_name, crate_major, min_crate_minor } => { + let pallet = Config::PalletInstancesInfo::infos() + .into_iter() + .find(|x| x.index == index as usize) + .ok_or(XcmError::PalletNotFound)?; + ensure!(pallet.name.as_bytes() == &name[..], XcmError::NameMismatch); + ensure!(pallet.module_name.as_bytes() == &module_name[..], XcmError::NameMismatch); + let major = pallet.crate_version.major as u32; + ensure!(major == crate_major, XcmError::VersionIncompatible); + let minor = pallet.crate_version.minor as u32; + ensure!(minor >= min_crate_minor, XcmError::VersionIncompatible); + Ok(()) + }, + ReportTransactStatus(response_info) => { + self.respond( + self.cloned_origin(), + Response::DispatchResult(self.transact_status.clone()), + response_info, + FeeReason::Report, + )?; + Ok(()) + }, + ClearTransactStatus => { + self.transact_status = Default::default(); + Ok(()) + }, + UniversalOrigin(new_global) => { + let universal_location = Config::UniversalLocation::get(); + ensure!(universal_location.first() != Some(&new_global), XcmError::InvalidLocation); + let origin = *self.origin_ref().ok_or(XcmError::BadOrigin)?; + let origin_xform = (origin, new_global); + let ok = Config::UniversalAliases::contains(&origin_xform); + ensure!(ok, XcmError::InvalidLocation); + let (_, new_global) = origin_xform; + let new_origin = X1(new_global).relative_to(&universal_location); + self.context.origin = Some(new_origin); + Ok(()) + }, + ExportMessage { network, destination, xcm } => { + // The actual message send to the bridge for forwarding is prepended with `UniversalOrigin` + // and `DescendOrigin` in order to ensure that the message is executed with this Origin. + // + // Prepend the desired message with instructions which effectively rewrite the origin. + // + // This only works because the remote chain empowers the bridge + // to speak for the local network. + let origin = self.context.origin.ok_or(XcmError::BadOrigin)?; + let universal_source = Config::UniversalLocation::get() + .within_global(origin) + .map_err(|()| XcmError::Unanchored)?; + let hash = (self.origin_ref(), &destination).using_encoded(blake2_128); + let channel = u32::decode(&mut hash.as_ref()).unwrap_or(0); + // Hash identifies the lane on the exporter which we use. We use the pairwise + // combination of the origin and destination to ensure origin/destination pairs will + // generally have their own lanes. + let (ticket, fee) = validate_export::( + network, + channel, + universal_source, + destination, + xcm, + )?; + self.take_fee(fee, FeeReason::Export(network))?; + Config::MessageExporter::deliver(ticket)?; + Ok(()) + }, + LockAsset { asset, unlocker } => { + let origin = *self.origin_ref().ok_or(XcmError::BadOrigin)?; + let (remote_asset, context) = Self::try_reanchor(asset.clone(), &unlocker)?; + let lock_ticket = Config::AssetLocker::prepare_lock(unlocker, asset, origin)?; + let owner = + origin.reanchored(&unlocker, context).map_err(|_| XcmError::ReanchorFailed)?; + let msg = Xcm::<()>(vec![NoteUnlockable { asset: remote_asset, owner }]); + let (ticket, price) = validate_send::(unlocker, msg)?; + self.take_fee(price, FeeReason::LockAsset)?; + lock_ticket.enact()?; + Config::XcmSender::deliver(ticket)?; + Ok(()) + }, + UnlockAsset { asset, target } => { + let origin = *self.origin_ref().ok_or(XcmError::BadOrigin)?; + Config::AssetLocker::prepare_unlock(origin, asset, target)?.enact()?; + Ok(()) + }, + NoteUnlockable { asset, owner } => { + let origin = *self.origin_ref().ok_or(XcmError::BadOrigin)?; + Config::AssetLocker::note_unlockable(origin, asset, owner)?; + Ok(()) + }, + RequestUnlock { asset, locker } => { + let origin = *self.origin_ref().ok_or(XcmError::BadOrigin)?; + let remote_asset = Self::try_reanchor(asset.clone(), &locker)?.0; + let reduce_ticket = + Config::AssetLocker::prepare_reduce_unlockable(locker, asset, origin)?; + let msg = Xcm::<()>(vec![UnlockAsset { asset: remote_asset, target: origin }]); + let (ticket, price) = validate_send::(locker, msg)?; + self.take_fee(price, FeeReason::RequestUnlock)?; + reduce_ticket.enact()?; + Config::XcmSender::deliver(ticket)?; + Ok(()) + }, + ExchangeAsset { give, want, maximal } => { + let give = self.holding.saturating_take(give); + let r = + Config::AssetExchanger::exchange_asset(self.origin_ref(), give, &want, maximal); + let completed = r.is_ok(); + let received = r.unwrap_or_else(|a| a); + for asset in received.into_assets_iter() { + self.holding.subsume(asset); + } + if completed { + Ok(()) + } else { + Err(XcmError::NoDeal) + } + }, + SetFeesMode { jit_withdraw } => { + self.fees_mode = FeesMode { jit_withdraw }; + Ok(()) + }, + SetTopic(topic) => { + self.context.topic = Some(topic); + Ok(()) + }, + ClearTopic => { + self.context.topic = None; + Ok(()) + }, + AliasOrigin(_) => Err(XcmError::NoPermission), + UnpaidExecution { check_origin, .. } => { + ensure!( + check_origin.is_none() || self.context.origin == check_origin, + XcmError::BadOrigin + ); + Ok(()) }, - ExchangeAsset { .. } => Err(XcmError::Unimplemented), HrmpNewChannelOpenRequest { .. } => Err(XcmError::Unimplemented), HrmpChannelAccepted { .. } => Err(XcmError::Unimplemented), HrmpChannelClosing { .. } => Err(XcmError::Unimplemented), } } + fn take_fee(&mut self, fee: MultiAssets, reason: FeeReason) -> XcmResult { + if Config::FeeManager::is_waived(self.origin_ref(), reason) { + return Ok(()) + } + let paid = if self.fees_mode.jit_withdraw { + let origin = self.origin_ref().ok_or(XcmError::BadOrigin)?; + for asset in fee.inner() { + Config::AssetTransactor::withdraw_asset(&asset, origin, Some(&self.context))?; + } + fee + } else { + self.holding.try_take(fee.into()).map_err(|_| XcmError::NotHoldingFees)?.into() + }; + Config::FeeManager::handle_fee(paid); + Ok(()) + } + + /// Calculates what `local_querier` would be from the perspective of `destination`. + fn to_querier( + local_querier: Option, + destination: &MultiLocation, + ) -> Result, XcmError> { + Ok(match local_querier { + None => None, + Some(q) => Some( + q.reanchored(&destination, Config::UniversalLocation::get()) + .map_err(|_| XcmError::ReanchorFailed)?, + ), + }) + } + + /// Send a bare `QueryResponse` message containing `response` informed by the given `info`. + /// + /// The `local_querier` argument is the querier (if any) specified from the *local* perspective. + fn respond( + &mut self, + local_querier: Option, + response: Response, + info: QueryResponseInfo, + fee_reason: FeeReason, + ) -> Result { + let querier = Self::to_querier(local_querier, &info.destination)?; + let QueryResponseInfo { destination, query_id, max_weight } = info; + let instruction = QueryResponse { query_id, response, max_weight, querier }; + let message = Xcm(vec![instruction]); + let (ticket, fee) = validate_send::(destination, message)?; + if !Config::FeeManager::is_waived(self.origin_ref(), fee_reason) { + let paid = self.holding.try_take(fee.into()).map_err(|_| XcmError::NotHoldingFees)?; + Config::FeeManager::handle_fee(paid.into()); + } + Config::XcmSender::deliver(ticket).map_err(Into::into) + } + + fn try_reanchor( + asset: MultiAsset, + destination: &MultiLocation, + ) -> Result<(MultiAsset, InteriorMultiLocation), XcmError> { + let reanchor_context = Config::UniversalLocation::get(); + let asset = asset + .reanchored(&destination, reanchor_context) + .map_err(|()| XcmError::ReanchorFailed)?; + Ok((asset, reanchor_context)) + } + /// NOTE: Any assets which were unable to be reanchored are introduced into `failed_bin`. fn reanchored( mut assets: Assets, dest: &MultiLocation, maybe_failed_bin: Option<&mut Assets>, ) -> MultiAssets { - assets.reanchor(dest, &Config::LocationInverter::ancestry(), maybe_failed_bin); + let reanchor_context = Config::UniversalLocation::get(); + assets.reanchor(dest, reanchor_context, maybe_failed_bin); assets.into_assets_iter().collect::>().into() } } diff --git a/xcm/xcm-executor/src/traits/asset_exchange.rs b/xcm/xcm-executor/src/traits/asset_exchange.rs new file mode 100644 index 000000000000..dd2eae23f8a2 --- /dev/null +++ b/xcm/xcm-executor/src/traits/asset_exchange.rs @@ -0,0 +1,58 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +use crate::Assets; +use xcm::prelude::*; + +/// A service for exchanging assets. +pub trait AssetExchange { + /// Handler for exchanging an asset. + /// + /// - `origin`: The location attempting the exchange; this should generally not matter. + /// - `give`: The assets which have been removed from the caller. + /// - `want`: The minimum amount of assets which should be given to the caller in case any + /// exchange happens. If more assets are provided, then they should generally be of the + /// same asset class if at all possible. + /// - `maximal`: If `true`, then as much as possible should be exchanged. + /// + /// `Ok` is returned along with the new set of assets which have been exchanged for `give`. At + /// least want must be in the set. Some assets originally in `give` may also be in this set. In + /// the case of returning an `Err`, then `give` is returned. + fn exchange_asset( + origin: Option<&MultiLocation>, + give: Assets, + want: &MultiAssets, + maximal: bool, + ) -> Result; +} + +#[impl_trait_for_tuples::impl_for_tuples(30)] +impl AssetExchange for Tuple { + fn exchange_asset( + origin: Option<&MultiLocation>, + give: Assets, + want: &MultiAssets, + maximal: bool, + ) -> Result { + for_tuples!( #( + let give = match Tuple::exchange_asset(origin, give, want, maximal) { + Ok(r) => return Ok(r), + Err(a) => a, + }; + )* ); + Err(give) + } +} diff --git a/xcm/xcm-executor/src/traits/asset_lock.rs b/xcm/xcm-executor/src/traits/asset_lock.rs new file mode 100644 index 000000000000..8d030ed1d5c1 --- /dev/null +++ b/xcm/xcm-executor/src/traits/asset_lock.rs @@ -0,0 +1,152 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +use sp_std::convert::Infallible; +use xcm::prelude::*; + +#[derive(Debug)] +pub enum LockError { + NotApplicable, + WouldClobber, + BadOrigin, + NotLocked, + NotEnoughLocked, + Unimplemented, + NotTrusted, + BadOwner, + UnknownAsset, + AssetNotOwned, + NoResources, + UnexpectedState, + InUse, +} + +impl From for XcmError { + fn from(e: LockError) -> XcmError { + use LockError::*; + match e { + NotApplicable => XcmError::AssetNotFound, + BadOrigin => XcmError::BadOrigin, + WouldClobber | NotLocked | NotEnoughLocked | Unimplemented | NotTrusted | + BadOwner | UnknownAsset | AssetNotOwned | NoResources | UnexpectedState | InUse => + XcmError::LockError, + } + } +} + +pub trait Enact { + /// Enact a lock. This should generally be infallible if called immediately after being + /// received. + fn enact(self) -> Result<(), LockError>; +} + +impl Enact for Infallible { + fn enact(self) -> Result<(), LockError> { + unreachable!() + } +} + +/// Define a handler for notification of an asset being locked and for the unlock instruction. +pub trait AssetLock { + /// `Enact` implementer for `prepare_lock`. This type may be dropped safely to avoid doing the + /// lock. + type LockTicket: Enact; + + /// `Enact` implementer for `prepare_unlock`. This type may be dropped safely to avoid doing the + /// unlock. + type UnlockTicket: Enact; + + /// `Enact` implementer for `prepare_reduce_unlockable`. This type may be dropped safely to avoid doing the + /// unlock. + type ReduceTicket: Enact; + + /// Prepare to lock an asset. On success, a `Self::LockTicket` it returned, which can be used + /// to actually enact the lock. + /// + /// WARNING: Don't call this with an undropped instance of `Self::LockTicket` or + /// `Self::UnlockTicket`. + fn prepare_lock( + unlocker: MultiLocation, + asset: MultiAsset, + owner: MultiLocation, + ) -> Result; + + /// Prepare to unlock an asset. On success, a `Self::UnlockTicket` it returned, which can be + /// used to actually enact the lock. + /// + /// WARNING: Don't call this with an undropped instance of `Self::LockTicket` or + /// `Self::UnlockTicket`. + fn prepare_unlock( + locker: MultiLocation, + asset: MultiAsset, + owner: MultiLocation, + ) -> Result; + + /// Handler for when a location reports to us that an asset has been locked for us to unlock + /// at a later stage. + /// + /// If there is no way to handle the lock report, then this should return an error so that the + /// sending chain can ensure the lock does not remain. + /// + /// We should only act upon this message if we believe that the `origin` is honest. + fn note_unlockable( + locker: MultiLocation, + asset: MultiAsset, + owner: MultiLocation, + ) -> Result<(), LockError>; + + /// Handler for when an owner wishes to unlock an asset on a remote chain. + /// + /// Returns a ticket which can be used to actually note the reduction in unlockable assets that + /// `owner` commands on `locker`. + /// + /// WARNING: Don't call this with an undropped instance of `Self::ReduceTicket`. + fn prepare_reduce_unlockable( + locker: MultiLocation, + asset: MultiAsset, + owner: MultiLocation, + ) -> Result; +} + +impl AssetLock for () { + type LockTicket = Infallible; + type UnlockTicket = Infallible; + type ReduceTicket = Infallible; + fn prepare_lock( + _: MultiLocation, + _: MultiAsset, + _: MultiLocation, + ) -> Result { + Err(LockError::NotApplicable) + } + fn prepare_unlock( + _: MultiLocation, + _: MultiAsset, + _: MultiLocation, + ) -> Result { + Err(LockError::NotApplicable) + } + fn note_unlockable(_: MultiLocation, _: MultiAsset, _: MultiLocation) -> Result<(), LockError> { + Err(LockError::NotApplicable) + } + fn prepare_reduce_unlockable( + _: MultiLocation, + _: MultiAsset, + _: MultiLocation, + ) -> Result { + Err(LockError::NotApplicable) + } +} diff --git a/xcm/xcm-executor/src/traits/conversion.rs b/xcm/xcm-executor/src/traits/conversion.rs index 8ea91b598e63..73b02bfe0adc 100644 --- a/xcm/xcm-executor/src/traits/conversion.rs +++ b/xcm/xcm-executor/src/traits/conversion.rs @@ -14,9 +14,11 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . +use frame_support::traits::{Contains, OriginTrait}; use parity_scale_codec::{Decode, Encode}; -use sp_std::{borrow::Borrow, prelude::*, result::Result}; -use xcm::latest::{MultiLocation, OriginKind}; +use sp_runtime::{traits::Dispatchable, DispatchErrorWithPostInfo}; +use sp_std::{borrow::Borrow, marker::PhantomData, prelude::*, result::Result}; +use xcm::latest::prelude::*; /// Generic third-party conversion trait. Use this when you don't want to force the user to use default /// implementations of `From` and `Into` for the types you wish to convert between. @@ -204,9 +206,43 @@ impl ConvertOrigin for Tuple { } } -/// Means of inverting a location: given a location which describes a `target` interpreted from the -/// `source`, this will provide the corresponding location which describes the `source`. -pub trait InvertLocation { - fn ancestry() -> MultiLocation; - fn invert_location(l: &MultiLocation) -> Result; +/// Defines how a call is dispatched with given origin. +/// Allows to customize call dispatch, such as adapting the origin based on the call +/// or modifying the call. +pub trait CallDispatcher { + fn dispatch( + call: Call, + origin: Call::RuntimeOrigin, + ) -> Result>; +} + +pub struct WithOriginFilter(PhantomData); +impl CallDispatcher for WithOriginFilter +where + Call: Dispatchable, + Call::RuntimeOrigin: OriginTrait, + <::RuntimeOrigin as OriginTrait>::Call: 'static, + Filter: Contains<<::RuntimeOrigin as OriginTrait>::Call> + 'static, +{ + fn dispatch( + call: Call, + mut origin: ::RuntimeOrigin, + ) -> Result< + ::PostInfo, + DispatchErrorWithPostInfo<::PostInfo>, + > { + origin.add_filter(Filter::contains); + call.dispatch(origin) + } +} + +// We implement it for every calls so they can dispatch themselves +// (without any change). +impl CallDispatcher for Call { + fn dispatch( + call: Call, + origin: Call::RuntimeOrigin, + ) -> Result> { + call.dispatch(origin) + } } diff --git a/xcm/xcm-executor/src/traits/drop_assets.rs b/xcm/xcm-executor/src/traits/drop_assets.rs index db61dd23e17b..1119f585345f 100644 --- a/xcm/xcm-executor/src/traits/drop_assets.rs +++ b/xcm/xcm-executor/src/traits/drop_assets.rs @@ -17,16 +17,15 @@ use crate::Assets; use core::marker::PhantomData; use frame_support::traits::Contains; -use sp_runtime::traits::Zero; -use xcm::latest::{MultiAssets, MultiLocation, Weight}; +use xcm::latest::{MultiAssets, MultiLocation, Weight, XcmContext}; /// Define a handler for when some non-empty `Assets` value should be dropped. pub trait DropAssets { /// Handler for receiving dropped assets. Returns the weight consumed by this operation. - fn drop_assets(origin: &MultiLocation, assets: Assets) -> Weight; + fn drop_assets(origin: &MultiLocation, assets: Assets, context: &XcmContext) -> Weight; } impl DropAssets for () { - fn drop_assets(_origin: &MultiLocation, _assets: Assets) -> Weight { + fn drop_assets(_origin: &MultiLocation, _assets: Assets, _context: &XcmContext) -> Weight { Weight::zero() } } @@ -36,9 +35,9 @@ impl DropAssets for () { pub struct FilterAssets(PhantomData<(D, A)>); impl> DropAssets for FilterAssets { - fn drop_assets(origin: &MultiLocation, assets: Assets) -> Weight { + fn drop_assets(origin: &MultiLocation, assets: Assets, context: &XcmContext) -> Weight { if A::contains(&assets) { - D::drop_assets(origin, assets) + D::drop_assets(origin, assets, context) } else { Weight::zero() } @@ -51,9 +50,9 @@ impl> DropAssets for FilterAssets { pub struct FilterOrigin(PhantomData<(D, O)>); impl> DropAssets for FilterOrigin { - fn drop_assets(origin: &MultiLocation, assets: Assets) -> Weight { + fn drop_assets(origin: &MultiLocation, assets: Assets, context: &XcmContext) -> Weight { if O::contains(origin) { - D::drop_assets(origin, assets) + D::drop_assets(origin, assets, context) } else { Weight::zero() } @@ -64,14 +63,24 @@ impl> DropAssets for FilterOrigin bool; + fn claim_assets( + origin: &MultiLocation, + ticket: &MultiLocation, + what: &MultiAssets, + context: &XcmContext, + ) -> bool; } #[impl_trait_for_tuples::impl_for_tuples(30)] impl ClaimAssets for Tuple { - fn claim_assets(origin: &MultiLocation, ticket: &MultiLocation, what: &MultiAssets) -> bool { + fn claim_assets( + origin: &MultiLocation, + ticket: &MultiLocation, + what: &MultiAssets, + context: &XcmContext, + ) -> bool { for_tuples!( #( - if Tuple::claim_assets(origin, ticket, what) { + if Tuple::claim_assets(origin, ticket, what, context) { return true; } )* ); diff --git a/xcm/xcm-executor/src/traits/export.rs b/xcm/xcm-executor/src/traits/export.rs new file mode 100644 index 000000000000..61b76addfe4c --- /dev/null +++ b/xcm/xcm-executor/src/traits/export.rs @@ -0,0 +1,146 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +use xcm::latest::prelude::*; + +/// Utility for delivering a message to a system under a different (non-local) consensus with a +/// spoofed origin. This essentially defines the behaviour of the `ExportMessage` XCM instruction. +/// +/// This is quite different to `SendXcm`; `SendXcm` assumes that the local side's location will be +/// preserved to be represented as the value of the Origin register in the messages execution. +/// +/// This trait on the other hand assumes that we do not necessarily want the Origin register to +/// contain the local (i.e. the caller chain's) location, since it will generally be exporting a +/// message on behalf of another consensus system. Therefore in addition to the message, the +/// destination must be given in two parts: the network and the interior location within it. +/// +/// We also require the caller to state exactly what location they purport to be representing. The +/// destination must accept the local location to represent that location or the operation will +/// fail. +pub trait ExportXcm { + /// Intermediate value which connects the two phaases of the export operation. + type Ticket; + + /// Check whether the given `message` is deliverable to the given `destination` on `network`, + /// spoofing its source as `universal_source` and if so determine the cost which will be paid by + /// this chain to do so, returning a `Ticket` token which can be used to enact delivery. + /// + /// The `channel` to be used on the `network`'s export mechanism (bridge, probably) must also + /// be provided. + /// + /// The `destination` and `message` must be `Some` (or else an error will be returned) and they + /// may only be consumed if the `Err` is not `NotApplicable`. + /// + /// If it is not a destination which can be reached with this type but possibly could by others, + /// then this *MUST* return `NotApplicable`. Any other error will cause the tuple + /// implementation (used to compose routing systems from different delivery agents) to exit + /// early without trying alternative means of delivery. + fn validate( + network: NetworkId, + channel: u32, + universal_source: &mut Option, + destination: &mut Option, + message: &mut Option>, + ) -> SendResult; + + /// Actually carry out the delivery operation for a previously validated message sending. + /// + /// The implementation should do everything possible to ensure that this function is infallible + /// if called immediately after `validate`. Returning an error here would result in a price + /// paid without the service being delivered. + fn deliver(ticket: Self::Ticket) -> Result; +} + +#[impl_trait_for_tuples::impl_for_tuples(30)] +impl ExportXcm for Tuple { + for_tuples! { type Ticket = (#( Option ),* ); } + + fn validate( + network: NetworkId, + channel: u32, + universal_source: &mut Option, + destination: &mut Option, + message: &mut Option>, + ) -> SendResult { + let mut maybe_cost: Option = None; + let one_ticket: Self::Ticket = (for_tuples! { #( + if maybe_cost.is_some() { + None + } else { + match Tuple::validate(network, channel, universal_source, destination, message) { + Err(SendError::NotApplicable) => None, + Err(e) => { return Err(e) }, + Ok((v, c)) => { + maybe_cost = Some(c); + Some(v) + }, + } + } + ),* }); + if let Some(cost) = maybe_cost { + Ok((one_ticket, cost)) + } else { + Err(SendError::NotApplicable) + } + } + + fn deliver(one_ticket: Self::Ticket) -> Result { + for_tuples!( #( + if let Some(validated) = one_ticket.Tuple.take() { + return Tuple::deliver(validated); + } + )* ); + Err(SendError::Unroutable) + } +} + +/// Convenience function for using a `SendXcm` implementation. Just interprets the `dest` and wraps +/// both in `Some` before passing them as as mutable references into `T::send_xcm`. +pub fn validate_export( + network: NetworkId, + channel: u32, + universal_source: InteriorMultiLocation, + dest: InteriorMultiLocation, + msg: Xcm<()>, +) -> SendResult { + T::validate(network, channel, &mut Some(universal_source), &mut Some(dest), &mut Some(msg)) +} + +/// Convenience function for using a `SendXcm` implementation. Just interprets the `dest` and wraps +/// both in `Some` before passing them as as mutable references into `T::send_xcm`. +/// +/// Returns either `Ok` with the price of the delivery, or `Err` with the reason why the message +/// could not be sent. +/// +/// Generally you'll want to validate and get the price first to ensure that the sender can pay it +/// before actually doing the delivery. +pub fn export_xcm( + network: NetworkId, + channel: u32, + universal_source: InteriorMultiLocation, + dest: InteriorMultiLocation, + msg: Xcm<()>, +) -> Result<(XcmHash, MultiAssets), SendError> { + let (ticket, price) = T::validate( + network, + channel, + &mut Some(universal_source), + &mut Some(dest), + &mut Some(msg), + )?; + let hash = T::deliver(ticket)?; + Ok((hash, price)) +} diff --git a/xcm/xcm-executor/src/traits/fee_manager.rs b/xcm/xcm-executor/src/traits/fee_manager.rs new file mode 100644 index 000000000000..b883a6d573c8 --- /dev/null +++ b/xcm/xcm-executor/src/traits/fee_manager.rs @@ -0,0 +1,59 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +use xcm::prelude::*; + +/// Handle stuff to do with taking fees in certain XCM instructions. +pub trait FeeManager { + /// Determine if a fee which would normally payable should be waived. + fn is_waived(origin: Option<&MultiLocation>, r: FeeReason) -> bool; + + /// Do something with the fee which has been paid. Doing nothing here silently burns the + /// fees. + fn handle_fee(fee: MultiAssets); +} + +/// Context under which a fee is paid. +#[derive(Copy, Clone, Eq, PartialEq)] +pub enum FeeReason { + /// When a reporting instruction is called. + Report, + /// When the `TransferReserveAsset` instruction is called. + TransferReserveAsset, + /// When the `DepositReserveAsset` instruction is called. + DepositReserveAsset, + /// When the `InitiateReserveWithdraw` instruction is called. + InitiateReserveWithdraw, + /// When the `InitiateTeleport` instruction is called. + InitiateTeleport, + /// When the `QueryPallet` instruction is called. + QueryPallet, + /// When the `ExportMessage` instruction is called (and includes the network ID). + Export(NetworkId), + /// The `charge_fees` API. + ChargeFees, + /// When the `LockAsset` instruction is called. + LockAsset, + /// When the `RequestUnlock` instruction is called. + RequestUnlock, +} + +impl FeeManager for () { + fn is_waived(_: Option<&MultiLocation>, _: FeeReason) -> bool { + true + } + fn handle_fee(_: MultiAssets) {} +} diff --git a/xcm/xcm-executor/src/traits/filter_asset_location.rs b/xcm/xcm-executor/src/traits/filter_asset_location.rs index 31b9c47a828c..ec9fecbab640 100644 --- a/xcm/xcm-executor/src/traits/filter_asset_location.rs +++ b/xcm/xcm-executor/src/traits/filter_asset_location.rs @@ -14,28 +14,21 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . +use frame_support::traits::ContainsPair; use xcm::latest::{MultiAsset, MultiLocation}; /// Filters assets/location pairs. /// /// Can be amalgamated into tuples. If any item returns `true`, it short-circuits, else `false` is returned. +#[deprecated = "Use `frame_support::traits::ContainsPair` instead"] pub trait FilterAssetLocation { /// A filter to distinguish between asset/location pairs. - fn filter_asset_location(asset: &MultiAsset, origin: &MultiLocation) -> bool; + fn contains(asset: &MultiAsset, origin: &MultiLocation) -> bool; } -#[impl_trait_for_tuples::impl_for_tuples(30)] -impl FilterAssetLocation for Tuple { - fn filter_asset_location(what: &MultiAsset, origin: &MultiLocation) -> bool { - for_tuples!( #( - if Tuple::filter_asset_location(what, origin) { return true } - )* ); - log::trace!( - target: "xcm::filter_asset_location", - "got filtered: what: {:?}, origin: {:?}", - what, - origin, - ); - false +#[allow(deprecated)] +impl> FilterAssetLocation for T { + fn contains(asset: &MultiAsset, origin: &MultiLocation) -> bool { + T::contains(asset, origin) } } diff --git a/xcm/xcm-executor/src/traits/matches_fungible.rs b/xcm/xcm-executor/src/traits/matches_fungible.rs deleted file mode 100644 index 4989f263a63d..000000000000 --- a/xcm/xcm-executor/src/traits/matches_fungible.rs +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2020 Parity Technologies (UK) Ltd. -// This file is part of Polkadot. - -// Polkadot is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Polkadot 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 Polkadot. If not, see . - -use xcm::latest::MultiAsset; - -pub trait MatchesFungible { - fn matches_fungible(a: &MultiAsset) -> Option; -} - -#[impl_trait_for_tuples::impl_for_tuples(30)] -impl MatchesFungible for Tuple { - fn matches_fungible(a: &MultiAsset) -> Option { - for_tuples!( #( - match Tuple::matches_fungible(a) { o @ Some(_) => return o, _ => () } - )* ); - log::trace!(target: "xcm::matches_fungible", "did not match fungible asset: {:?}", &a); - None - } -} diff --git a/xcm/xcm-executor/src/traits/matches_fungibles.rs b/xcm/xcm-executor/src/traits/matches_fungibles.rs deleted file mode 100644 index f5baafdcd97a..000000000000 --- a/xcm/xcm-executor/src/traits/matches_fungibles.rs +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2020 Parity Technologies (UK) Ltd. -// This file is part of Polkadot. - -// Polkadot is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Polkadot 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 Polkadot. If not, see . - -use sp_std::result; -use xcm::latest::{Error as XcmError, MultiAsset}; - -/// Errors associated with [`MatchesFungibles`] operation. -pub enum Error { - /// Asset not found. - AssetNotFound, - /// `MultiLocation` to `AccountId` conversion failed. - AccountIdConversionFailed, - /// `u128` amount to currency `Balance` conversion failed. - AmountToBalanceConversionFailed, - /// `MultiLocation` to `AssetId` conversion failed. - AssetIdConversionFailed, -} - -impl From for XcmError { - fn from(e: Error) -> Self { - use XcmError::FailedToTransactAsset; - match e { - Error::AssetNotFound => XcmError::AssetNotFound, - Error::AccountIdConversionFailed => FailedToTransactAsset("AccountIdConversionFailed"), - Error::AmountToBalanceConversionFailed => - FailedToTransactAsset("AmountToBalanceConversionFailed"), - Error::AssetIdConversionFailed => FailedToTransactAsset("AssetIdConversionFailed"), - } - } -} - -pub trait MatchesFungibles { - fn matches_fungibles(a: &MultiAsset) -> result::Result<(AssetId, Balance), Error>; -} - -#[impl_trait_for_tuples::impl_for_tuples(30)] -impl MatchesFungibles for Tuple { - fn matches_fungibles(a: &MultiAsset) -> result::Result<(AssetId, Balance), Error> { - for_tuples!( #( - match Tuple::matches_fungibles(a) { o @ Ok(_) => return o, _ => () } - )* ); - log::trace!(target: "xcm::matches_fungibles", "did not match fungibles asset: {:?}", &a); - Err(Error::AssetNotFound) - } -} diff --git a/xcm/xcm-executor/src/traits/mod.rs b/xcm/xcm-executor/src/traits/mod.rs index 1312771e719b..94fe7e98a7db 100644 --- a/xcm/xcm-executor/src/traits/mod.rs +++ b/xcm/xcm-executor/src/traits/mod.rs @@ -17,15 +17,26 @@ //! Various traits used in configuring the executor. mod conversion; -pub use conversion::{Convert, ConvertOrigin, Decoded, Encoded, Identity, InvertLocation, JustTry}; +pub use conversion::{ + CallDispatcher, Convert, ConvertOrigin, Decoded, Encoded, Identity, JustTry, WithOriginFilter, +}; mod drop_assets; pub use drop_assets::{ClaimAssets, DropAssets}; +mod asset_lock; +pub use asset_lock::{AssetLock, Enact, LockError}; +mod asset_exchange; +pub use asset_exchange::AssetExchange; +mod export; +pub use export::{export_xcm, validate_export, ExportXcm}; +mod fee_manager; +pub use fee_manager::{FeeManager, FeeReason}; mod filter_asset_location; +#[allow(deprecated)] pub use filter_asset_location::FilterAssetLocation; -mod matches_fungible; -pub use matches_fungible::MatchesFungible; -mod matches_fungibles; -pub use matches_fungibles::{Error, MatchesFungibles}; +mod token_matching; +pub use token_matching::{ + Error, MatchesFungible, MatchesFungibles, MatchesNonFungible, MatchesNonFungibles, +}; mod on_response; pub use on_response::{OnResponse, VersionChangeNotifier}; mod should_execute; @@ -34,3 +45,13 @@ mod transact_asset; pub use transact_asset::TransactAsset; mod weight; pub use weight::{WeightBounds, WeightTrader}; + +pub mod prelude { + pub use super::{ + export_xcm, validate_export, AssetExchange, AssetLock, ClaimAssets, Convert, ConvertOrigin, + Decoded, DropAssets, Enact, Encoded, Error, ExportXcm, FeeManager, FeeReason, Identity, + JustTry, LockError, MatchesFungible, MatchesFungibles, MatchesNonFungible, + MatchesNonFungibles, OnResponse, ShouldExecute, TransactAsset, VersionChangeNotifier, + WeightBounds, WeightTrader, WithOriginFilter, + }; +} diff --git a/xcm/xcm-executor/src/traits/on_response.rs b/xcm/xcm-executor/src/traits/on_response.rs index 0da0a1cb6087..dbde3f940f41 100644 --- a/xcm/xcm-executor/src/traits/on_response.rs +++ b/xcm/xcm-executor/src/traits/on_response.rs @@ -14,32 +14,45 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use sp_runtime::traits::Zero; use xcm::latest::{ - Error as XcmError, MultiLocation, QueryId, Response, Result as XcmResult, Weight, + Error as XcmError, MultiLocation, QueryId, Response, Result as XcmResult, Weight, XcmContext, }; /// Define what needs to be done upon receiving a query response. pub trait OnResponse { - /// Returns `true` if we are expecting a response from `origin` for query `query_id`. - fn expecting_response(origin: &MultiLocation, query_id: u64) -> bool; - /// Handler for receiving a `response` from `origin` relating to `query_id`. + /// Returns `true` if we are expecting a response from `origin` for query `query_id` that was + /// queried by `querier`. + fn expecting_response( + origin: &MultiLocation, + query_id: u64, + querier: Option<&MultiLocation>, + ) -> bool; + /// Handler for receiving a `response` from `origin` relating to `query_id` initiated by + /// `querier`. fn on_response( origin: &MultiLocation, query_id: u64, + querier: Option<&MultiLocation>, response: Response, max_weight: Weight, + context: &XcmContext, ) -> Weight; } impl OnResponse for () { - fn expecting_response(_origin: &MultiLocation, _query_id: u64) -> bool { + fn expecting_response( + _origin: &MultiLocation, + _query_id: u64, + _querier: Option<&MultiLocation>, + ) -> bool { false } fn on_response( _origin: &MultiLocation, _query_id: u64, + _querier: Option<&MultiLocation>, _response: Response, _max_weight: Weight, + _context: &XcmContext, ) -> Weight { Weight::zero() } @@ -50,26 +63,31 @@ pub trait VersionChangeNotifier { /// Start notifying `location` should the XCM version of this chain change. /// /// When it does, this type should ensure a `QueryResponse` message is sent with the given - /// `query_id` & `max_weight` and with a `response` of `Repsonse::Version`. This should happen + /// `query_id` & `max_weight` and with a `response` of `Response::Version`. This should happen /// until/unless `stop` is called with the correct `query_id`. /// /// If the `location` has an ongoing notification and when this function is called, then an /// error should be returned. - fn start(location: &MultiLocation, query_id: QueryId, max_weight: u64) -> XcmResult; + fn start( + location: &MultiLocation, + query_id: QueryId, + max_weight: Weight, + context: &XcmContext, + ) -> XcmResult; /// Stop notifying `location` should the XCM change. Returns an error if there is no existing /// notification set up. - fn stop(location: &MultiLocation) -> XcmResult; + fn stop(location: &MultiLocation, context: &XcmContext) -> XcmResult; /// Return true if a location is subscribed to XCM version changes. fn is_subscribed(location: &MultiLocation) -> bool; } impl VersionChangeNotifier for () { - fn start(_: &MultiLocation, _: QueryId, _: u64) -> XcmResult { + fn start(_: &MultiLocation, _: QueryId, _: Weight, _: &XcmContext) -> XcmResult { Err(XcmError::Unimplemented) } - fn stop(_: &MultiLocation) -> XcmResult { + fn stop(_: &MultiLocation, _: &XcmContext) -> XcmResult { Err(XcmError::Unimplemented) } fn is_subscribed(_: &MultiLocation) -> bool { diff --git a/xcm/xcm-executor/src/traits/should_execute.rs b/xcm/xcm-executor/src/traits/should_execute.rs index ca3283467cfb..7db8fbe4a09e 100644 --- a/xcm/xcm-executor/src/traits/should_execute.rs +++ b/xcm/xcm-executor/src/traits/should_execute.rs @@ -15,7 +15,7 @@ // along with Polkadot. If not, see . use sp_std::result::Result; -use xcm::latest::{MultiLocation, Weight, Xcm}; +use xcm::latest::{Instruction, MultiLocation, Weight}; /// Trait to determine whether the execution engine should actually execute a given XCM. /// @@ -25,14 +25,14 @@ pub trait ShouldExecute { /// Returns `true` if the given `message` may be executed. /// /// - `origin`: The origin (sender) of the message. - /// - `message`: The message itself. + /// - `instructions`: The message itself. /// - `max_weight`: The (possibly over-) estimation of the weight of execution of the message. /// - `weight_credit`: The pre-established amount of weight that the system has determined this /// message may utilize in its execution. Typically non-zero only because of prior fee /// payment, but could in principle be due to other factors. fn should_execute( origin: &MultiLocation, - message: &mut Xcm, + instructions: &mut [Instruction], max_weight: Weight, weight_credit: &mut Weight, ) -> Result<(), ()>; @@ -42,21 +42,21 @@ pub trait ShouldExecute { impl ShouldExecute for Tuple { fn should_execute( origin: &MultiLocation, - message: &mut Xcm, + instructions: &mut [Instruction], max_weight: Weight, weight_credit: &mut Weight, ) -> Result<(), ()> { for_tuples!( #( - match Tuple::should_execute(origin, message, max_weight, weight_credit) { + match Tuple::should_execute(origin, instructions, max_weight, weight_credit) { Ok(()) => return Ok(()), _ => (), } )* ); log::trace!( target: "xcm::should_execute", - "did not pass barrier: origin: {:?}, message: {:?}, max_weight: {:?}, weight_credit: {:?}", + "did not pass barrier: origin: {:?}, instructions: {:?}, max_weight: {:?}, weight_credit: {:?}", origin, - message, + instructions, max_weight, weight_credit, ); diff --git a/xcm/xcm-executor/src/traits/token_matching.rs b/xcm/xcm-executor/src/traits/token_matching.rs new file mode 100644 index 000000000000..f1bbbe68025b --- /dev/null +++ b/xcm/xcm-executor/src/traits/token_matching.rs @@ -0,0 +1,107 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +use sp_std::result; +use xcm::latest::prelude::*; + +pub trait MatchesFungible { + fn matches_fungible(a: &MultiAsset) -> Option; +} + +#[impl_trait_for_tuples::impl_for_tuples(30)] +impl MatchesFungible for Tuple { + fn matches_fungible(a: &MultiAsset) -> Option { + for_tuples!( #( + match Tuple::matches_fungible(a) { o @ Some(_) => return o, _ => () } + )* ); + log::trace!(target: "xcm::matches_fungible", "did not match fungible asset: {:?}", &a); + None + } +} + +pub trait MatchesNonFungible { + fn matches_nonfungible(a: &MultiAsset) -> Option; +} + +#[impl_trait_for_tuples::impl_for_tuples(30)] +impl MatchesNonFungible for Tuple { + fn matches_nonfungible(a: &MultiAsset) -> Option { + for_tuples!( #( + match Tuple::matches_nonfungible(a) { o @ Some(_) => return o, _ => () } + )* ); + log::trace!(target: "xcm::matches_non_fungible", "did not match non-fungible asset: {:?}", &a); + None + } +} + +/// Errors associated with [`MatchesFungibles`] operation. +#[derive(Debug, PartialEq, Eq)] +pub enum Error { + /// The given asset is not handled. (According to [`XcmError::AssetNotFound`]) + AssetNotHandled, + /// `MultiLocation` to `AccountId` conversion failed. + AccountIdConversionFailed, + /// `u128` amount to currency `Balance` conversion failed. + AmountToBalanceConversionFailed, + /// `MultiLocation` to `AssetId`/`ClassId` conversion failed. + AssetIdConversionFailed, + /// `AssetInstance` to non-fungibles instance ID conversion failed. + InstanceConversionFailed, +} + +impl From for XcmError { + fn from(e: Error) -> Self { + use XcmError::FailedToTransactAsset; + match e { + Error::AssetNotHandled => XcmError::AssetNotFound, + Error::AccountIdConversionFailed => FailedToTransactAsset("AccountIdConversionFailed"), + Error::AmountToBalanceConversionFailed => + FailedToTransactAsset("AmountToBalanceConversionFailed"), + Error::AssetIdConversionFailed => FailedToTransactAsset("AssetIdConversionFailed"), + Error::InstanceConversionFailed => FailedToTransactAsset("InstanceConversionFailed"), + } + } +} + +pub trait MatchesFungibles { + fn matches_fungibles(a: &MultiAsset) -> result::Result<(AssetId, Balance), Error>; +} + +#[impl_trait_for_tuples::impl_for_tuples(30)] +impl MatchesFungibles for Tuple { + fn matches_fungibles(a: &MultiAsset) -> result::Result<(AssetId, Balance), Error> { + for_tuples!( #( + match Tuple::matches_fungibles(a) { o @ Ok(_) => return o, _ => () } + )* ); + log::trace!(target: "xcm::matches_fungibles", "did not match fungibles asset: {:?}", &a); + Err(Error::AssetNotHandled) + } +} + +pub trait MatchesNonFungibles { + fn matches_nonfungibles(a: &MultiAsset) -> result::Result<(AssetId, Instance), Error>; +} + +#[impl_trait_for_tuples::impl_for_tuples(30)] +impl MatchesNonFungibles for Tuple { + fn matches_nonfungibles(a: &MultiAsset) -> result::Result<(AssetId, Instance), Error> { + for_tuples!( #( + match Tuple::matches_nonfungibles(a) { o @ Ok(_) => return o, _ => () } + )* ); + log::trace!(target: "xcm::matches_non_fungibles", "did not match fungibles asset: {:?}", &a); + Err(Error::AssetNotHandled) + } +} diff --git a/xcm/xcm-executor/src/traits/transact_asset.rs b/xcm/xcm-executor/src/traits/transact_asset.rs index 5b8c37bb59a0..9f4b9b5ad392 100644 --- a/xcm/xcm-executor/src/traits/transact_asset.rs +++ b/xcm/xcm-executor/src/traits/transact_asset.rs @@ -16,7 +16,7 @@ use crate::Assets; use sp_std::result::Result; -use xcm::latest::{Error as XcmError, MultiAsset, MultiLocation, Result as XcmResult}; +use xcm::latest::{Error as XcmError, MultiAsset, MultiLocation, Result as XcmResult, XcmContext}; /// Facility for asset transacting. /// @@ -26,10 +26,14 @@ use xcm::latest::{Error as XcmError, MultiAsset, MultiLocation, Result as XcmRes /// Can be amalgamated as a tuple of items that implement this trait. In such executions, if any of the transactors /// returns `Ok(())`, then it will short circuit. Else, execution is passed to the next transactor. pub trait TransactAsset { - /// Ensure that `check_in` will result in `Ok`. + /// Ensure that `check_in` will do as expected. /// /// When composed as a tuple, all type-items are called and at least one must result in `Ok`. - fn can_check_in(_origin: &MultiLocation, _what: &MultiAsset) -> XcmResult { + fn can_check_in( + _origin: &MultiLocation, + _what: &MultiAsset, + _context: &XcmContext, + ) -> XcmResult { Err(XcmError::Unimplemented) } @@ -46,7 +50,18 @@ pub trait TransactAsset { /// /// When composed as a tuple, all type-items are called. It is up to the implementer that there exists no /// value for `_what` which can cause side-effects for more than one of the type-items. - fn check_in(_origin: &MultiLocation, _what: &MultiAsset) {} + fn check_in(_origin: &MultiLocation, _what: &MultiAsset, _context: &XcmContext) {} + + /// Ensure that `check_out` will do as expected. + /// + /// When composed as a tuple, all type-items are called and at least one must result in `Ok`. + fn can_check_out( + _dest: &MultiLocation, + _what: &MultiAsset, + _context: &XcmContext, + ) -> XcmResult { + Err(XcmError::Unimplemented) + } /// An asset has been teleported out to the given destination. This should do whatever housekeeping is needed. /// @@ -58,20 +73,28 @@ pub trait TransactAsset { /// /// When composed as a tuple, all type-items are called. It is up to the implementer that there exists no /// value for `_what` which can cause side-effects for more than one of the type-items. - fn check_out(_dest: &MultiLocation, _what: &MultiAsset) {} + fn check_out(_dest: &MultiLocation, _what: &MultiAsset, _context: &XcmContext) {} /// Deposit the `what` asset into the account of `who`. /// /// Implementations should return `XcmError::FailedToTransactAsset` if deposit failed. - fn deposit_asset(_what: &MultiAsset, _who: &MultiLocation) -> XcmResult { + fn deposit_asset(_what: &MultiAsset, _who: &MultiLocation, _context: &XcmContext) -> XcmResult { Err(XcmError::Unimplemented) } /// Withdraw the given asset from the consensus system. Return the actual asset(s) withdrawn, /// which should always be equal to `_what`. /// + /// The XCM `_maybe_context` parameter may be `None` when the caller of `withdraw_asset` is + /// outside of the context of a currently-executing XCM. An example will be the `charge_fees` + /// method in the XCM executor. + /// /// Implementations should return `XcmError::FailedToTransactAsset` if withdraw failed. - fn withdraw_asset(_what: &MultiAsset, _who: &MultiLocation) -> Result { + fn withdraw_asset( + _what: &MultiAsset, + _who: &MultiLocation, + _maybe_context: Option<&XcmContext>, + ) -> Result { Err(XcmError::Unimplemented) } @@ -88,6 +111,7 @@ pub trait TransactAsset { _asset: &MultiAsset, _from: &MultiLocation, _to: &MultiLocation, + _context: &XcmContext, ) -> Result { Err(XcmError::Unimplemented) } @@ -100,12 +124,13 @@ pub trait TransactAsset { asset: &MultiAsset, from: &MultiLocation, to: &MultiLocation, + context: &XcmContext, ) -> Result { - match Self::internal_transfer_asset(asset, from, to) { - Err(XcmError::Unimplemented) => { - let assets = Self::withdraw_asset(asset, from)?; + match Self::internal_transfer_asset(asset, from, to, context) { + Err(XcmError::AssetNotFound | XcmError::Unimplemented) => { + let assets = Self::withdraw_asset(asset, from, Some(context))?; // Not a very forgiving attitude; once we implement roll-backs then it'll be nicer. - Self::deposit_asset(asset, to)?; + Self::deposit_asset(asset, to, context)?; Ok(assets) }, result => result, @@ -115,62 +140,86 @@ pub trait TransactAsset { #[impl_trait_for_tuples::impl_for_tuples(30)] impl TransactAsset for Tuple { - fn can_check_in(origin: &MultiLocation, what: &MultiAsset) -> XcmResult { + fn can_check_in(origin: &MultiLocation, what: &MultiAsset, context: &XcmContext) -> XcmResult { for_tuples!( #( - match Tuple::can_check_in(origin, what) { + match Tuple::can_check_in(origin, what, context) { Err(XcmError::AssetNotFound) | Err(XcmError::Unimplemented) => (), r => return r, } )* ); log::trace!( target: "xcm::TransactAsset::can_check_in", - "asset not found: what: {:?}, origin: {:?}", + "asset not found: what: {:?}, origin: {:?}, context: {:?}", what, origin, + context, ); Err(XcmError::AssetNotFound) } - fn check_in(origin: &MultiLocation, what: &MultiAsset) { + fn check_in(origin: &MultiLocation, what: &MultiAsset, context: &XcmContext) { for_tuples!( #( - Tuple::check_in(origin, what); + Tuple::check_in(origin, what, context); )* ); } - fn check_out(dest: &MultiLocation, what: &MultiAsset) { + fn can_check_out(dest: &MultiLocation, what: &MultiAsset, context: &XcmContext) -> XcmResult { for_tuples!( #( - Tuple::check_out(dest, what); + match Tuple::can_check_out(dest, what, context) { + Err(XcmError::AssetNotFound) | Err(XcmError::Unimplemented) => (), + r => return r, + } + )* ); + log::trace!( + target: "xcm::TransactAsset::can_check_out", + "asset not found: what: {:?}, dest: {:?}, context: {:?}", + what, + dest, + context, + ); + Err(XcmError::AssetNotFound) + } + + fn check_out(dest: &MultiLocation, what: &MultiAsset, context: &XcmContext) { + for_tuples!( #( + Tuple::check_out(dest, what, context); )* ); } - fn deposit_asset(what: &MultiAsset, who: &MultiLocation) -> XcmResult { + fn deposit_asset(what: &MultiAsset, who: &MultiLocation, context: &XcmContext) -> XcmResult { for_tuples!( #( - match Tuple::deposit_asset(what, who) { + match Tuple::deposit_asset(what, who, context) { Err(XcmError::AssetNotFound) | Err(XcmError::Unimplemented) => (), r => return r, } )* ); log::trace!( target: "xcm::TransactAsset::deposit_asset", - "did not deposit asset: what: {:?}, who: {:?}", + "did not deposit asset: what: {:?}, who: {:?}, context: {:?}", what, who, + context, ); Err(XcmError::AssetNotFound) } - fn withdraw_asset(what: &MultiAsset, who: &MultiLocation) -> Result { + fn withdraw_asset( + what: &MultiAsset, + who: &MultiLocation, + maybe_context: Option<&XcmContext>, + ) -> Result { for_tuples!( #( - match Tuple::withdraw_asset(what, who) { + match Tuple::withdraw_asset(what, who, maybe_context) { Err(XcmError::AssetNotFound) | Err(XcmError::Unimplemented) => (), r => return r, } )* ); log::trace!( target: "xcm::TransactAsset::withdraw_asset", - "did not withdraw asset: what: {:?}, who: {:?}", + "did not withdraw asset: what: {:?}, who: {:?}, maybe_context: {:?}", what, who, + maybe_context, ); Err(XcmError::AssetNotFound) } @@ -179,19 +228,21 @@ impl TransactAsset for Tuple { what: &MultiAsset, from: &MultiLocation, to: &MultiLocation, + context: &XcmContext, ) -> Result { for_tuples!( #( - match Tuple::internal_transfer_asset(what, from, to) { + match Tuple::internal_transfer_asset(what, from, to, context) { Err(XcmError::AssetNotFound) | Err(XcmError::Unimplemented) => (), r => return r, } )* ); log::trace!( target: "xcm::TransactAsset::internal_transfer_asset", - "did not transfer asset: what: {:?}, from: {:?}, to: {:?}", + "did not transfer asset: what: {:?}, from: {:?}, to: {:?}, context: {:?}", what, from, to, + context, ); Err(XcmError::AssetNotFound) } @@ -207,15 +258,35 @@ mod tests { pub struct NotFoundTransactor; impl TransactAsset for NotFoundTransactor { - fn can_check_in(_origin: &MultiLocation, _what: &MultiAsset) -> XcmResult { + fn can_check_in( + _origin: &MultiLocation, + _what: &MultiAsset, + _context: &XcmContext, + ) -> XcmResult { Err(XcmError::AssetNotFound) } - fn deposit_asset(_what: &MultiAsset, _who: &MultiLocation) -> XcmResult { + fn can_check_out( + _dest: &MultiLocation, + _what: &MultiAsset, + _context: &XcmContext, + ) -> XcmResult { Err(XcmError::AssetNotFound) } - fn withdraw_asset(_what: &MultiAsset, _who: &MultiLocation) -> Result { + fn deposit_asset( + _what: &MultiAsset, + _who: &MultiLocation, + _context: &XcmContext, + ) -> XcmResult { + Err(XcmError::AssetNotFound) + } + + fn withdraw_asset( + _what: &MultiAsset, + _who: &MultiLocation, + _context: Option<&XcmContext>, + ) -> Result { Err(XcmError::AssetNotFound) } @@ -223,6 +294,7 @@ mod tests { _what: &MultiAsset, _from: &MultiLocation, _to: &MultiLocation, + _context: &XcmContext, ) -> Result { Err(XcmError::AssetNotFound) } @@ -230,15 +302,35 @@ mod tests { pub struct OverflowTransactor; impl TransactAsset for OverflowTransactor { - fn can_check_in(_origin: &MultiLocation, _what: &MultiAsset) -> XcmResult { + fn can_check_in( + _origin: &MultiLocation, + _what: &MultiAsset, + _context: &XcmContext, + ) -> XcmResult { + Err(XcmError::Overflow) + } + + fn can_check_out( + _dest: &MultiLocation, + _what: &MultiAsset, + _context: &XcmContext, + ) -> XcmResult { Err(XcmError::Overflow) } - fn deposit_asset(_what: &MultiAsset, _who: &MultiLocation) -> XcmResult { + fn deposit_asset( + _what: &MultiAsset, + _who: &MultiLocation, + _context: &XcmContext, + ) -> XcmResult { Err(XcmError::Overflow) } - fn withdraw_asset(_what: &MultiAsset, _who: &MultiLocation) -> Result { + fn withdraw_asset( + _what: &MultiAsset, + _who: &MultiLocation, + _context: Option<&XcmContext>, + ) -> Result { Err(XcmError::Overflow) } @@ -246,6 +338,7 @@ mod tests { _what: &MultiAsset, _from: &MultiLocation, _to: &MultiLocation, + _context: &XcmContext, ) -> Result { Err(XcmError::Overflow) } @@ -253,15 +346,35 @@ mod tests { pub struct SuccessfulTransactor; impl TransactAsset for SuccessfulTransactor { - fn can_check_in(_origin: &MultiLocation, _what: &MultiAsset) -> XcmResult { + fn can_check_in( + _origin: &MultiLocation, + _what: &MultiAsset, + _context: &XcmContext, + ) -> XcmResult { Ok(()) } - fn deposit_asset(_what: &MultiAsset, _who: &MultiLocation) -> XcmResult { + fn can_check_out( + _dest: &MultiLocation, + _what: &MultiAsset, + _context: &XcmContext, + ) -> XcmResult { + Ok(()) + } + + fn deposit_asset( + _what: &MultiAsset, + _who: &MultiLocation, + _context: &XcmContext, + ) -> XcmResult { Ok(()) } - fn withdraw_asset(_what: &MultiAsset, _who: &MultiLocation) -> Result { + fn withdraw_asset( + _what: &MultiAsset, + _who: &MultiLocation, + _context: Option<&XcmContext>, + ) -> Result { Ok(Assets::default()) } @@ -269,6 +382,7 @@ mod tests { _what: &MultiAsset, _from: &MultiLocation, _to: &MultiLocation, + _context: &XcmContext, ) -> Result { Ok(Assets::default()) } @@ -280,7 +394,11 @@ mod tests { (UnimplementedTransactor, NotFoundTransactor, UnimplementedTransactor); assert_eq!( - MultiTransactor::deposit_asset(&(Here, 1).into(), &Here.into()), + MultiTransactor::deposit_asset( + &(Here, 1u128).into(), + &Here.into(), + &XcmContext::with_message_hash([0; 32]), + ), Err(XcmError::AssetNotFound) ); } @@ -289,7 +407,14 @@ mod tests { fn unimplemented_and_not_found_continue_iteration() { type MultiTransactor = (UnimplementedTransactor, NotFoundTransactor, SuccessfulTransactor); - assert_eq!(MultiTransactor::deposit_asset(&(Here, 1).into(), &Here.into()), Ok(()),); + assert_eq!( + MultiTransactor::deposit_asset( + &(Here, 1u128).into(), + &Here.into(), + &XcmContext::with_message_hash([0; 32]), + ), + Ok(()) + ); } #[test] @@ -297,7 +422,11 @@ mod tests { type MultiTransactor = (OverflowTransactor, SuccessfulTransactor); assert_eq!( - MultiTransactor::deposit_asset(&(Here, 1).into(), &Here.into()), + MultiTransactor::deposit_asset( + &(Here, 1u128).into(), + &Here.into(), + &XcmContext::with_message_hash([0; 32]), + ), Err(XcmError::Overflow) ); } @@ -306,6 +435,13 @@ mod tests { fn success_stops_iteration() { type MultiTransactor = (SuccessfulTransactor, OverflowTransactor); - assert_eq!(MultiTransactor::deposit_asset(&(Here, 1).into(), &Here.into()), Ok(()),); + assert_eq!( + MultiTransactor::deposit_asset( + &(Here, 1u128).into(), + &Here.into(), + &XcmContext::with_message_hash([0; 32]), + ), + Ok(()), + ); } } diff --git a/xcm/xcm-executor/src/traits/weight.rs b/xcm/xcm-executor/src/traits/weight.rs index 76f411e5c1f5..6e111f93e806 100644 --- a/xcm/xcm-executor/src/traits/weight.rs +++ b/xcm/xcm-executor/src/traits/weight.rs @@ -67,16 +67,29 @@ impl WeightTrader for Tuple { } fn buy_weight(&mut self, weight: Weight, payment: Assets) -> Result { + let mut too_expensive_error_found = false; let mut last_error = None; for_tuples!( #( match Tuple.buy_weight(weight, payment.clone()) { Ok(assets) => return Ok(assets), - Err(e) => { last_error = Some(e) } + Err(e) => { + if let XcmError::TooExpensive = e { + too_expensive_error_found = true; + } + last_error = Some(e) + } } )* ); - let last_error = last_error.unwrap_or(XcmError::TooExpensive); - log::trace!(target: "xcm::buy_weight", "last_error: {:?}", last_error); - Err(last_error) + + log::trace!(target: "xcm::buy_weight", "last_error: {:?}, too_expensive_error_found: {}", last_error, too_expensive_error_found); + + // if we have multiple traders, and first one returns `TooExpensive` and others fail e.g. `AssetNotFound` + // then it is more accurate to return `TooExpensive` then `AssetNotFound` + Err(if too_expensive_error_found { + XcmError::TooExpensive + } else { + last_error.unwrap_or(XcmError::TooExpensive) + }) } fn refund_weight(&mut self, weight: Weight) -> Option { diff --git a/xcm/xcm-simulator/Cargo.toml b/xcm/xcm-simulator/Cargo.toml index d680e8849f0f..673cddb980b1 100644 --- a/xcm/xcm-simulator/Cargo.toml +++ b/xcm/xcm-simulator/Cargo.toml @@ -6,12 +6,12 @@ authors.workspace = true edition.workspace = true [dependencies] -codec = { package = "parity-scale-codec", version = "3.0.0" } +codec = { package = "parity-scale-codec", version = "3.3.0" } paste = "1.0.7" -frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } xcm = { path = "../" } xcm-executor = { path = "../xcm-executor" } diff --git a/xcm/xcm-simulator/example/Cargo.toml b/xcm/xcm-simulator/example/Cargo.toml index 8e1ee791f39e..0ff39a2d3607 100644 --- a/xcm/xcm-simulator/example/Cargo.toml +++ b/xcm/xcm-simulator/example/Cargo.toml @@ -6,16 +6,19 @@ edition.workspace = true version.workspace = true [dependencies] -codec = { package = "parity-scale-codec", version = "3.0.0" } +codec = { package = "parity-scale-codec", version = "3.3.0" } scale-info = { version = "2.1.2", features = ["derive"] } +log = { version = "0.4.14", default-features = false } -frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +pallet-uniques = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } xcm = { path = "../../" } xcm-simulator = { path = "../" } @@ -25,3 +28,17 @@ pallet-xcm = { path = "../../pallet-xcm" } polkadot-core-primitives = { path = "../../../core-primitives" } polkadot-runtime-parachains = { path = "../../../runtime/parachains" } polkadot-parachain = { path = "../../../parachain" } + +[features] +default = [] +runtime-benchmarks = [ + "frame-system/runtime-benchmarks", + "frame-support/runtime-benchmarks", + "pallet-balances/runtime-benchmarks", + "pallet-uniques/runtime-benchmarks", + "pallet-xcm/runtime-benchmarks", + "xcm-builder/runtime-benchmarks", + "xcm-executor/runtime-benchmarks", + "polkadot-runtime-parachains/runtime-benchmarks", + "polkadot-parachain/runtime-benchmarks", +] diff --git a/xcm/xcm-simulator/example/src/lib.rs b/xcm/xcm-simulator/example/src/lib.rs index 1e4f96cb2282..b2bedf4c37e7 100644 --- a/xcm/xcm-simulator/example/src/lib.rs +++ b/xcm/xcm-simulator/example/src/lib.rs @@ -17,8 +17,9 @@ mod parachain; mod relay_chain; -use polkadot_parachain::primitives::Id as ParaId; -use sp_runtime::traits::AccountIdConversion; +use frame_support::sp_tracing; +use xcm::prelude::*; +use xcm_executor::traits::Convert; use xcm_simulator::{decl_test_network, decl_test_parachain, decl_test_relay_chain}; pub const ALICE: sp_runtime::AccountId32 = sp_runtime::AccountId32::new([0u8; 32]); @@ -60,8 +61,29 @@ decl_test_network! { } } -pub fn para_account_id(id: u32) -> relay_chain::AccountId { - ParaId::from(id).into_account_truncating() +pub fn parent_account_id() -> parachain::AccountId { + let location = (Parent,); + parachain::LocationToAccountId::convert(location.into()).unwrap() +} + +pub fn child_account_id(para: u32) -> relay_chain::AccountId { + let location = (Parachain(para),); + relay_chain::LocationToAccountId::convert(location.into()).unwrap() +} + +pub fn child_account_account_id(para: u32, who: sp_runtime::AccountId32) -> relay_chain::AccountId { + let location = (Parachain(para), AccountId32 { network: None, id: who.into() }); + relay_chain::LocationToAccountId::convert(location.into()).unwrap() +} + +pub fn sibling_account_account_id(para: u32, who: sp_runtime::AccountId32) -> parachain::AccountId { + let location = (Parent, Parachain(para), AccountId32 { network: None, id: who.into() }); + parachain::LocationToAccountId::convert(location.into()).unwrap() +} + +pub fn parent_account_account_id(who: sp_runtime::AccountId32) -> parachain::AccountId { + let location = (Parent, AccountId32 { network: None, id: who.into() }); + parachain::LocationToAccountId::convert(location.into()).unwrap() } pub fn para_ext(para_id: u32) -> sp_io::TestExternalities { @@ -69,12 +91,15 @@ pub fn para_ext(para_id: u32) -> sp_io::TestExternalities { let mut t = frame_system::GenesisConfig::default().build_storage::().unwrap(); - pallet_balances::GenesisConfig:: { balances: vec![(ALICE, INITIAL_BALANCE)] } - .assimilate_storage(&mut t) - .unwrap(); + pallet_balances::GenesisConfig:: { + balances: vec![(ALICE, INITIAL_BALANCE), (parent_account_id(), INITIAL_BALANCE)], + } + .assimilate_storage(&mut t) + .unwrap(); let mut ext = sp_io::TestExternalities::new(t); ext.execute_with(|| { + sp_tracing::try_init_simple(); System::set_block_number(1); MsgQueue::set_para_id(para_id.into()); }); @@ -82,18 +107,26 @@ pub fn para_ext(para_id: u32) -> sp_io::TestExternalities { } pub fn relay_ext() -> sp_io::TestExternalities { - use relay_chain::{Runtime, System}; + use relay_chain::{Runtime, RuntimeOrigin, System, Uniques}; let mut t = frame_system::GenesisConfig::default().build_storage::().unwrap(); pallet_balances::GenesisConfig:: { - balances: vec![(ALICE, INITIAL_BALANCE), (para_account_id(1), INITIAL_BALANCE)], + balances: vec![ + (ALICE, INITIAL_BALANCE), + (child_account_id(1), INITIAL_BALANCE), + (child_account_id(2), INITIAL_BALANCE), + ], } .assimilate_storage(&mut t) .unwrap(); let mut ext = sp_io::TestExternalities::new(t); - ext.execute_with(|| System::set_block_number(1)); + ext.execute_with(|| { + System::set_block_number(1); + assert_eq!(Uniques::force_create(RuntimeOrigin::root(), 1, ALICE, true), Ok(())); + assert_eq!(Uniques::mint(RuntimeOrigin::signed(ALICE), 1, 42, child_account_id(1)), Ok(())); + }); ext } @@ -105,8 +138,8 @@ mod tests { use super::*; use codec::Encode; - use frame_support::assert_ok; - use xcm::latest::prelude::*; + use frame_support::{assert_ok, weights::Weight}; + use xcm::latest::QueryResponseInfo; use xcm_simulator::TestExt; // Helper function for forming buy execution message @@ -114,6 +147,13 @@ mod tests { BuyExecution { fees: fees.into(), weight_limit: Unlimited } } + #[test] + fn remote_account_ids_work() { + child_account_account_id(1, ALICE); + sibling_account_account_id(1, ALICE); + parent_account_account_id(ALICE); + } + #[test] fn dmp() { MockNet::reset(); @@ -126,8 +166,8 @@ mod tests { Here, Parachain(1), Xcm(vec![Transact { - origin_type: OriginKind::SovereignAccount, - require_weight_at_most: INITIAL_BALANCE as u64, + origin_kind: OriginKind::SovereignAccount, + require_weight_at_most: Weight::from_parts(INITIAL_BALANCE as u64, 1024 * 1024), call: remark.encode().into(), }]), )); @@ -154,8 +194,8 @@ mod tests { Here, Parent, Xcm(vec![Transact { - origin_type: OriginKind::SovereignAccount, - require_weight_at_most: INITIAL_BALANCE as u64, + origin_kind: OriginKind::SovereignAccount, + require_weight_at_most: Weight::from_parts(INITIAL_BALANCE as u64, 1024 * 1024), call: remark.encode().into(), }]), )); @@ -182,8 +222,8 @@ mod tests { Here, (Parent, Parachain(2)), Xcm(vec![Transact { - origin_type: OriginKind::SovereignAccount, - require_weight_at_most: INITIAL_BALANCE as u64, + origin_kind: OriginKind::SovereignAccount, + require_weight_at_most: Weight::from_parts(INITIAL_BALANCE as u64, 1024 * 1024), call: remark.encode().into(), }]), )); @@ -207,13 +247,13 @@ mod tests { Relay::execute_with(|| { assert_ok!(RelayChainPalletXcm::reserve_transfer_assets( relay_chain::RuntimeOrigin::signed(ALICE), - Box::new(X1(Parachain(1)).into().into()), - Box::new(X1(AccountId32 { network: Any, id: ALICE.into() }).into().into()), + Box::new(Parachain(1).into()), + Box::new(AccountId32 { network: None, id: ALICE.into() }.into()), Box::new((Here, withdraw_amount).into()), 0, )); assert_eq!( - parachain::Balances::free_balance(¶_account_id(1)), + relay_chain::Balances::free_balance(&child_account_id(1)), INITIAL_BALANCE + withdraw_amount ); }); @@ -227,6 +267,271 @@ mod tests { }); } + #[test] + fn remote_locking() { + MockNet::reset(); + + let locked_amount = 100; + + ParaB::execute_with(|| { + let message = Xcm(vec![LockAsset { + asset: (Here, locked_amount).into(), + unlocker: (Parachain(1),).into(), + }]); + assert_ok!(ParachainPalletXcm::send_xcm(Here, Parent, message.clone())); + }); + + Relay::execute_with(|| { + use pallet_balances::{BalanceLock, Reasons}; + assert_eq!( + relay_chain::Balances::locks(&child_account_id(2)), + vec![BalanceLock { + id: *b"py/xcmlk", + amount: locked_amount, + reasons: Reasons::All + }] + ); + }); + + ParaA::execute_with(|| { + assert_eq!( + parachain::MsgQueue::received_dmp(), + vec![Xcm(vec![NoteUnlockable { + owner: (Parent, Parachain(2)).into(), + asset: (Parent, locked_amount).into() + }])] + ); + }); + } + + /// Scenario: + /// A parachain transfers an NFT resident on the relay chain to another parachain account. + /// + /// Asserts that the parachain accounts are updated as expected. + #[test] + fn withdraw_and_deposit_nft() { + MockNet::reset(); + + Relay::execute_with(|| { + assert_eq!(relay_chain::Uniques::owner(1, 42), Some(child_account_id(1))); + }); + + ParaA::execute_with(|| { + let message = Xcm(vec![TransferAsset { + assets: (GeneralIndex(1), 42u32).into(), + beneficiary: Parachain(2).into(), + }]); + // Send withdraw and deposit + assert_ok!(ParachainPalletXcm::send_xcm(Here, Parent, message)); + }); + + Relay::execute_with(|| { + assert_eq!(relay_chain::Uniques::owner(1, 42), Some(child_account_id(2))); + }); + } + + /// Scenario: + /// The relay-chain teleports an NFT to a parachain. + /// + /// Asserts that the parachain accounts are updated as expected. + #[test] + fn teleport_nft() { + MockNet::reset(); + + Relay::execute_with(|| { + // Mint the NFT (1, 69) and give it to our "parachain#1 alias". + assert_ok!(relay_chain::Uniques::mint( + relay_chain::RuntimeOrigin::signed(ALICE), + 1, + 69, + child_account_account_id(1, ALICE), + )); + // The parachain#1 alias of Alice is what must hold it on the Relay-chain for it to be + // withdrawable by Alice on the parachain. + assert_eq!( + relay_chain::Uniques::owner(1, 69), + Some(child_account_account_id(1, ALICE)) + ); + }); + ParaA::execute_with(|| { + assert_ok!(parachain::ForeignUniques::force_create( + parachain::RuntimeOrigin::root(), + (Parent, GeneralIndex(1)).into(), + ALICE, + false, + )); + assert_eq!( + parachain::ForeignUniques::owner((Parent, GeneralIndex(1)).into(), 69u32.into()), + None, + ); + assert_eq!(parachain::Balances::reserved_balance(&ALICE), 0); + + // IRL Alice would probably just execute this locally on the Relay-chain, but we can't + // easily do that here since we only send between chains. + let message = Xcm(vec![ + WithdrawAsset((GeneralIndex(1), 69u32).into()), + InitiateTeleport { + assets: AllCounted(1).into(), + dest: Parachain(1).into(), + xcm: Xcm(vec![DepositAsset { + assets: AllCounted(1).into(), + beneficiary: (AccountId32 { id: ALICE.into(), network: None },).into(), + }]), + }, + ]); + // Send teleport + let alice = AccountId32 { id: ALICE.into(), network: None }; + assert_ok!(ParachainPalletXcm::send_xcm(alice, Parent, message)); + }); + ParaA::execute_with(|| { + assert_eq!( + parachain::ForeignUniques::owner((Parent, GeneralIndex(1)).into(), 69u32.into()), + Some(ALICE), + ); + assert_eq!(parachain::Balances::reserved_balance(&ALICE), 1000); + }); + Relay::execute_with(|| { + assert_eq!(relay_chain::Uniques::owner(1, 69), None); + }); + } + + /// Scenario: + /// The relay-chain transfers an NFT into a parachain's sovereign account, who then mints a + /// trustless-backed-derivated locally. + /// + /// Asserts that the parachain accounts are updated as expected. + #[test] + fn reserve_asset_transfer_nft() { + sp_tracing::init_for_tests(); + MockNet::reset(); + + Relay::execute_with(|| { + assert_ok!(relay_chain::Uniques::force_create( + relay_chain::RuntimeOrigin::root(), + 2, + ALICE, + false + )); + assert_ok!(relay_chain::Uniques::mint( + relay_chain::RuntimeOrigin::signed(ALICE), + 2, + 69, + child_account_account_id(1, ALICE) + )); + assert_eq!( + relay_chain::Uniques::owner(2, 69), + Some(child_account_account_id(1, ALICE)) + ); + }); + ParaA::execute_with(|| { + assert_ok!(parachain::ForeignUniques::force_create( + parachain::RuntimeOrigin::root(), + (Parent, GeneralIndex(2)).into(), + ALICE, + false, + )); + assert_eq!( + parachain::ForeignUniques::owner((Parent, GeneralIndex(2)).into(), 69u32.into()), + None, + ); + assert_eq!(parachain::Balances::reserved_balance(&ALICE), 0); + + let message = Xcm(vec![ + WithdrawAsset((GeneralIndex(2), 69u32).into()), + DepositReserveAsset { + assets: AllCounted(1).into(), + dest: Parachain(1).into(), + xcm: Xcm(vec![DepositAsset { + assets: AllCounted(1).into(), + beneficiary: (AccountId32 { id: ALICE.into(), network: None },).into(), + }]), + }, + ]); + // Send transfer + let alice = AccountId32 { id: ALICE.into(), network: None }; + assert_ok!(ParachainPalletXcm::send_xcm(alice, Parent, message)); + }); + ParaA::execute_with(|| { + log::debug!(target: "xcm-exceutor", "Hello"); + assert_eq!( + parachain::ForeignUniques::owner((Parent, GeneralIndex(2)).into(), 69u32.into()), + Some(ALICE), + ); + assert_eq!(parachain::Balances::reserved_balance(&ALICE), 1000); + }); + + Relay::execute_with(|| { + assert_eq!(relay_chain::Uniques::owner(2, 69), Some(child_account_id(1))); + }); + } + + /// Scenario: + /// The relay-chain creates an asset class on a parachain and then Alice transfers her NFT into + /// that parachain's sovereign account, who then mints a trustless-backed-derivative locally. + /// + /// Asserts that the parachain accounts are updated as expected. + #[test] + fn reserve_asset_class_create_and_reserve_transfer() { + MockNet::reset(); + + Relay::execute_with(|| { + assert_ok!(relay_chain::Uniques::force_create( + relay_chain::RuntimeOrigin::root(), + 2, + ALICE, + false + )); + assert_ok!(relay_chain::Uniques::mint( + relay_chain::RuntimeOrigin::signed(ALICE), + 2, + 69, + child_account_account_id(1, ALICE) + )); + assert_eq!( + relay_chain::Uniques::owner(2, 69), + Some(child_account_account_id(1, ALICE)) + ); + + let message = Xcm(vec![Transact { + origin_kind: OriginKind::Xcm, + require_weight_at_most: Weight::from_parts(1_000_000_000, 1024 * 1024), + call: parachain::RuntimeCall::from( + pallet_uniques::Call::::create { + collection: (Parent, 2u64).into(), + admin: parent_account_id(), + }, + ) + .encode() + .into(), + }]); + // Send creation. + assert_ok!(RelayChainPalletXcm::send_xcm(Here, Parachain(1), message)); + }); + ParaA::execute_with(|| { + // Then transfer + let message = Xcm(vec![ + WithdrawAsset((GeneralIndex(2), 69u32).into()), + DepositReserveAsset { + assets: AllCounted(1).into(), + dest: Parachain(1).into(), + xcm: Xcm(vec![DepositAsset { + assets: AllCounted(1).into(), + beneficiary: (AccountId32 { id: ALICE.into(), network: None },).into(), + }]), + }, + ]); + let alice = AccountId32 { id: ALICE.into(), network: None }; + assert_ok!(ParachainPalletXcm::send_xcm(alice, Parent, message)); + }); + ParaA::execute_with(|| { + assert_eq!(parachain::Balances::reserved_balance(&parent_account_id()), 1000); + assert_eq!( + parachain::ForeignUniques::collection_owner((Parent, 2u64).into()), + Some(parent_account_id()) + ); + }); + } + /// Scenario: /// A parachain transfers funds on the relay chain to another parachain account. /// @@ -241,11 +546,7 @@ mod tests { let message = Xcm(vec![ WithdrawAsset((Here, send_amount).into()), buy_execution((Here, send_amount)), - DepositAsset { - assets: All.into(), - max_assets: 1, - beneficiary: Parachain(2).into(), - }, + DepositAsset { assets: AllCounted(1).into(), beneficiary: Parachain(2).into() }, ]); // Send withdraw and deposit assert_ok!(ParachainPalletXcm::send_xcm(Here, Parent, message.clone())); @@ -253,10 +554,13 @@ mod tests { Relay::execute_with(|| { assert_eq!( - relay_chain::Balances::free_balance(para_account_id(1)), + relay_chain::Balances::free_balance(child_account_id(1)), INITIAL_BALANCE - send_amount ); - assert_eq!(relay_chain::Balances::free_balance(para_account_id(2)), send_amount); + assert_eq!( + relay_chain::Balances::free_balance(child_account_id(2)), + INITIAL_BALANCE + send_amount + ); }); } @@ -277,16 +581,14 @@ mod tests { let message = Xcm(vec![ WithdrawAsset((Here, send_amount).into()), buy_execution((Here, send_amount)), - DepositAsset { + DepositAsset { assets: AllCounted(1).into(), beneficiary: Parachain(2).into() }, + ReportHolding { + response_info: QueryResponseInfo { + destination: Parachain(1).into(), + query_id: query_id_set, + max_weight: Weight::from_parts(1_000_000_000, 1024 * 1024), + }, assets: All.into(), - max_assets: 1, - beneficiary: Parachain(2).into(), - }, - QueryHolding { - query_id: query_id_set, - dest: Parachain(1).into(), - assets: All.into(), - max_response_weight: 1_000_000_000, }, ]); // Send withdraw and deposit with query holding @@ -297,11 +599,14 @@ mod tests { Relay::execute_with(|| { // Withdraw executed assert_eq!( - relay_chain::Balances::free_balance(para_account_id(1)), + relay_chain::Balances::free_balance(child_account_id(1)), INITIAL_BALANCE - send_amount ); // Deposit executed - assert_eq!(relay_chain::Balances::free_balance(para_account_id(2)), send_amount); + assert_eq!( + relay_chain::Balances::free_balance(child_account_id(2)), + INITIAL_BALANCE + send_amount + ); }); // Check that QueryResponse message was received @@ -311,7 +616,8 @@ mod tests { vec![Xcm(vec![QueryResponse { query_id: query_id_set, response: Response::Assets(MultiAssets::new()), - max_weight: 1_000_000_000, + max_weight: Weight::from_parts(1_000_000_000, 1024 * 1024), + querier: Some(Here.into()), }])], ); }); diff --git a/xcm/xcm-simulator/example/src/parachain.rs b/xcm/xcm-simulator/example/src/parachain.rs index d638867c281f..9801a847b712 100644 --- a/xcm/xcm-simulator/example/src/parachain.rs +++ b/xcm/xcm-simulator/example/src/parachain.rs @@ -19,7 +19,7 @@ use codec::{Decode, Encode}; use frame_support::{ construct_runtime, parameter_types, - traits::{Everything, Nothing}, + traits::{EnsureOrigin, EnsureOriginWithArg, Everything, EverythingBut, Nothing}, weights::{constants::WEIGHT_REF_TIME_PER_SECOND, Weight}, }; use sp_core::H256; @@ -37,12 +37,22 @@ use polkadot_parachain::primitives::{ }; use xcm::{latest::prelude::*, VersionedXcm}; use xcm_builder::{ - AccountId32Aliases, AllowUnpaidExecutionFrom, CurrencyAdapter as XcmCurrencyAdapter, - EnsureXcmOrigin, FixedRateOfFungible, FixedWeightBounds, IsConcrete, LocationInverter, - NativeAsset, ParentIsPreset, SiblingParachainConvertsVia, SignedAccountId32AsNative, - SignedToAccountId32, SovereignSignedViaLocation, + Account32Hash, AccountId32Aliases, AllowUnpaidExecutionFrom, ConvertedConcreteId, + CurrencyAdapter as XcmCurrencyAdapter, EnsureXcmOrigin, FixedRateOfFungible, FixedWeightBounds, + IsConcrete, NativeAsset, NoChecking, NonFungiblesAdapter, ParentIsPreset, + SiblingParachainConvertsVia, SignedAccountId32AsNative, SignedToAccountId32, + SovereignSignedViaLocation, +}; +use xcm_executor::{ + traits::{Convert, JustTry}, + Config, XcmExecutor, }; -use xcm_executor::{Config, XcmExecutor}; + +pub type SovereignAccountOf = ( + SiblingParachainConvertsVia, + AccountId32Aliases, + ParentIsPreset, +); pub type AccountId = AccountId32; pub type Balance = u128; @@ -96,21 +106,78 @@ impl pallet_balances::Config for Runtime { type ReserveIdentifier = [u8; 8]; } +#[cfg(feature = "runtime-benchmarks")] +pub struct UniquesHelper; +#[cfg(feature = "runtime-benchmarks")] +impl pallet_uniques::BenchmarkHelper for UniquesHelper { + fn collection(i: u16) -> MultiLocation { + GeneralIndex(i as u128).into() + } + fn item(i: u16) -> AssetInstance { + AssetInstance::Index(i as u128) + } +} + +impl pallet_uniques::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type CollectionId = MultiLocation; + type ItemId = AssetInstance; + type Currency = Balances; + type CreateOrigin = ForeignCreators; + type ForceOrigin = frame_system::EnsureRoot; + type CollectionDeposit = frame_support::traits::ConstU128<1_000>; + type ItemDeposit = frame_support::traits::ConstU128<1_000>; + type MetadataDepositBase = frame_support::traits::ConstU128<1_000>; + type AttributeDepositBase = frame_support::traits::ConstU128<1_000>; + type DepositPerByte = frame_support::traits::ConstU128<1>; + type StringLimit = frame_support::traits::ConstU32<64>; + type KeyLimit = frame_support::traits::ConstU32<64>; + type ValueLimit = frame_support::traits::ConstU32<128>; + type Locker = (); + type WeightInfo = (); + #[cfg(feature = "runtime-benchmarks")] + type Helper = UniquesHelper; +} + +// `EnsureOriginWithArg` impl for `CreateOrigin` which allows only XCM origins +// which are locations containing the class location. +pub struct ForeignCreators; +impl EnsureOriginWithArg for ForeignCreators { + type Success = AccountId; + + fn try_origin( + o: RuntimeOrigin, + a: &MultiLocation, + ) -> sp_std::result::Result { + let origin_location = pallet_xcm::EnsureXcm::::try_origin(o.clone())?; + if !a.starts_with(&origin_location) { + return Err(o) + } + SovereignAccountOf::convert(origin_location).map_err(|_| o) + } + + #[cfg(feature = "runtime-benchmarks")] + fn try_successful_origin(a: &MultiLocation) -> Result { + Ok(pallet_xcm::Origin::Xcm(a.clone()).into()) + } +} + parameter_types! { - pub const ReservedXcmpWeight: Weight = Weight::from_ref_time(WEIGHT_REF_TIME_PER_SECOND.saturating_div(4)); - pub const ReservedDmpWeight: Weight = Weight::from_ref_time(WEIGHT_REF_TIME_PER_SECOND.saturating_div(4)); + pub const ReservedXcmpWeight: Weight = Weight::from_parts(WEIGHT_REF_TIME_PER_SECOND.saturating_div(4), 0); + pub const ReservedDmpWeight: Weight = Weight::from_parts(WEIGHT_REF_TIME_PER_SECOND.saturating_div(4), 0); } parameter_types! { pub const KsmLocation: MultiLocation = MultiLocation::parent(); pub const RelayNetwork: NetworkId = NetworkId::Kusama; - pub Ancestry: MultiLocation = Parachain(MsgQueue::parachain_id().into()).into(); + pub UniversalLocation: InteriorMultiLocation = Parachain(MsgQueue::parachain_id().into()).into(); } pub type LocationToAccountId = ( ParentIsPreset, SiblingParachainConvertsVia, AccountId32Aliases, + Account32Hash<(), AccountId>, ); pub type XcmOriginToCallOrigin = ( @@ -120,33 +187,62 @@ pub type XcmOriginToCallOrigin = ( ); parameter_types! { - pub const UnitWeightCost: u64 = 1; - pub KsmPerSecond: (AssetId, u128) = (Concrete(Parent.into()), 1); + pub const UnitWeightCost: Weight = Weight::from_parts(1, 1); + pub KsmPerSecondPerByte: (AssetId, u128, u128) = (Concrete(Parent.into()), 1, 1); pub const MaxInstructions: u32 = 100; + pub const MaxAssetsIntoHolding: u32 = 64; + pub ForeignPrefix: MultiLocation = (Parent,).into(); } -pub type LocalAssetTransactor = - XcmCurrencyAdapter, LocationToAccountId, AccountId, ()>; +pub type LocalAssetTransactor = ( + XcmCurrencyAdapter, LocationToAccountId, AccountId, ()>, + NonFungiblesAdapter< + ForeignUniques, + ConvertedConcreteId, + SovereignAccountOf, + AccountId, + NoChecking, + (), + >, +); pub type XcmRouter = super::ParachainXcmRouter; pub type Barrier = AllowUnpaidExecutionFrom; +parameter_types! { + pub NftCollectionOne: MultiAssetFilter + = Wild(AllOf { fun: WildNonFungible, id: Concrete((Parent, GeneralIndex(1)).into()) }); + pub NftCollectionOneForRelay: (MultiAssetFilter, MultiLocation) + = (NftCollectionOne::get(), (Parent,).into()); +} +pub type TrustedTeleporters = xcm_builder::Case; +pub type TrustedReserves = EverythingBut>; + pub struct XcmConfig; impl Config for XcmConfig { type RuntimeCall = RuntimeCall; type XcmSender = XcmRouter; type AssetTransactor = LocalAssetTransactor; type OriginConverter = XcmOriginToCallOrigin; - type IsReserve = NativeAsset; - type IsTeleporter = (); - type LocationInverter = LocationInverter; + type IsReserve = (NativeAsset, TrustedReserves); + type IsTeleporter = TrustedTeleporters; + type UniversalLocation = UniversalLocation; type Barrier = Barrier; type Weigher = FixedWeightBounds; - type Trader = FixedRateOfFungible; + type Trader = FixedRateOfFungible; type ResponseHandler = (); type AssetTrap = (); + type AssetLocker = (); + type AssetExchanger = (); type AssetClaims = (); type SubscriptionService = (); + type PalletInstancesInfo = (); + type FeeManager = (); + type MaxAssetsIntoHolding = MaxAssetsIntoHolding; + type MessageExporter = (); + type UniversalAliases = Nothing; + type CallDispatcher = RuntimeCall; + type SafeCallFilter = Everything; } #[frame_support::pallet] @@ -164,7 +260,6 @@ pub mod mock_msg_queue { impl Pallet {} #[pallet::pallet] - #[pallet::generate_store(pub(super) trait Store)] #[pallet::without_storage_info] pub struct Pallet(_); @@ -219,17 +314,16 @@ pub mod mock_msg_queue { max_weight: Weight, ) -> Result { let hash = Encode::using_encoded(&xcm, T::Hashing::hash); + let message_hash = Encode::using_encoded(&xcm, sp_io::hashing::blake2_256); let (result, event) = match Xcm::::try_from(xcm) { Ok(xcm) => { - let location = (1, Parachain(sender.into())); - match T::XcmExecutor::execute_xcm(location, xcm, max_weight.ref_time()) { + let location = (Parent, Parachain(sender.into())); + match T::XcmExecutor::execute_xcm(location, xcm, message_hash, max_weight) { Outcome::Error(e) => (Err(e.clone()), Event::Fail(Some(hash), e)), - Outcome::Complete(w) => - (Ok(Weight::from_ref_time(w)), Event::Success(Some(hash))), + Outcome::Complete(w) => (Ok(w), Event::Success(Some(hash))), // As far as the caller is concerned, this was dispatched without error, so // we just report the weight used. - Outcome::Incomplete(w, e) => - (Ok(Weight::from_ref_time(w)), Event::Fail(Some(hash), e)), + Outcome::Incomplete(w, e) => (Ok(w), Event::Fail(Some(hash), e)), } }, Err(()) => (Err(XcmError::UnhandledXcmVersion), Event::BadVersion(Some(hash))), @@ -271,20 +365,18 @@ pub mod mock_msg_queue { ) -> Weight { for (_i, (_sent_at, data)) in iter.enumerate() { let id = sp_io::hashing::blake2_256(&data[..]); - let maybe_msg = VersionedXcm::::decode(&mut &data[..]) - .map(Xcm::::try_from); - match maybe_msg { + let maybe_versioned = VersionedXcm::::decode(&mut &data[..]); + match maybe_versioned { Err(_) => { Self::deposit_event(Event::InvalidFormat(id)); }, - Ok(Err(())) => { - Self::deposit_event(Event::UnsupportedVersion(id)); - }, - Ok(Ok(x)) => { - let outcome = - T::XcmExecutor::execute_xcm(Parent, x.clone(), limit.ref_time()); - >::append(x); - Self::deposit_event(Event::ExecutedDownward(id, outcome)); + Ok(versioned) => match Xcm::try_from(versioned) { + Err(()) => Self::deposit_event(Event::UnsupportedVersion(id)), + Ok(x) => { + let outcome = T::XcmExecutor::execute_xcm(Parent, x.clone(), id, limit); + >::append(x); + Self::deposit_event(Event::ExecutedDownward(id, outcome)); + }, }, } } @@ -300,6 +392,11 @@ impl mock_msg_queue::Config for Runtime { pub type LocalOriginToLocation = SignedToAccountId32; +#[cfg(feature = "runtime-benchmarks")] +parameter_types! { + pub ReachableDest: Option = Some(Parent.into()); +} + impl pallet_xcm::Config for Runtime { type RuntimeEvent = RuntimeEvent; type SendXcmOrigin = EnsureXcmOrigin; @@ -310,11 +407,19 @@ impl pallet_xcm::Config for Runtime { type XcmTeleportFilter = Nothing; type XcmReserveTransferFilter = Everything; type Weigher = FixedWeightBounds; - type LocationInverter = LocationInverter; + type UniversalLocation = UniversalLocation; type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; + type Currency = Balances; + type CurrencyMatcher = (); + type TrustedLockers = (); + type SovereignAccountOf = LocationToAccountId; + type MaxLockers = frame_support::traits::ConstU32<8>; + type WeightInfo = pallet_xcm::TestWeightInfo; + #[cfg(feature = "runtime-benchmarks")] + type ReachableDest = ReachableDest; } type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic; @@ -330,5 +435,6 @@ construct_runtime!( Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, MsgQueue: mock_msg_queue::{Pallet, Storage, Event}, PolkadotXcm: pallet_xcm::{Pallet, Call, Event, Origin}, + ForeignUniques: pallet_uniques::{Pallet, Call, Storage, Event}, } ); diff --git a/xcm/xcm-simulator/example/src/relay_chain.rs b/xcm/xcm-simulator/example/src/relay_chain.rs index 3a5d9e229621..9e095270e673 100644 --- a/xcm/xcm-simulator/example/src/relay_chain.rs +++ b/xcm/xcm-simulator/example/src/relay_chain.rs @@ -18,7 +18,8 @@ use frame_support::{ construct_runtime, parameter_types, - traits::{Everything, Nothing}, + traits::{AsEnsureOriginWithArg, Everything, Nothing}, + weights::Weight, }; use sp_core::H256; use sp_runtime::{testing::Header, traits::IdentityLookup, AccountId32}; @@ -27,12 +28,13 @@ use polkadot_parachain::primitives::Id as ParaId; use polkadot_runtime_parachains::{configuration, origin, shared, ump}; use xcm::latest::prelude::*; use xcm_builder::{ - AccountId32Aliases, AllowUnpaidExecutionFrom, ChildParachainAsNative, - ChildParachainConvertsVia, ChildSystemParachainAsSuperuser, - CurrencyAdapter as XcmCurrencyAdapter, FixedRateOfFungible, FixedWeightBounds, IsConcrete, - LocationInverter, SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, + Account32Hash, AccountId32Aliases, AllowUnpaidExecutionFrom, AsPrefixedGeneralIndex, + ChildParachainAsNative, ChildParachainConvertsVia, ChildSystemParachainAsSuperuser, + ConvertedConcreteId, CurrencyAdapter as XcmCurrencyAdapter, FixedRateOfFungible, + FixedWeightBounds, IsConcrete, NoChecking, NonFungiblesAdapter, SignedAccountId32AsNative, + SignedToAccountId32, SovereignSignedViaLocation, }; -use xcm_executor::{Config, XcmExecutor}; +use xcm_executor::{traits::JustTry, Config, XcmExecutor}; pub type AccountId = AccountId32; pub type Balance = u128; @@ -86,6 +88,27 @@ impl pallet_balances::Config for Runtime { type ReserveIdentifier = [u8; 8]; } +impl pallet_uniques::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type CollectionId = u32; + type ItemId = u32; + type Currency = Balances; + type CreateOrigin = AsEnsureOriginWithArg>; + type ForceOrigin = frame_system::EnsureRoot; + type CollectionDeposit = frame_support::traits::ConstU128<1_000>; + type ItemDeposit = frame_support::traits::ConstU128<1_000>; + type MetadataDepositBase = frame_support::traits::ConstU128<1_000>; + type AttributeDepositBase = frame_support::traits::ConstU128<1_000>; + type DepositPerByte = frame_support::traits::ConstU128<1>; + type StringLimit = frame_support::traits::ConstU32<64>; + type KeyLimit = frame_support::traits::ConstU32<64>; + type ValueLimit = frame_support::traits::ConstU32<128>; + type Locker = (); + type WeightInfo = (); + #[cfg(feature = "runtime-benchmarks")] + type Helper = (); +} + impl shared::Config for Runtime {} impl configuration::Config for Runtime { @@ -93,30 +116,44 @@ impl configuration::Config for Runtime { } parameter_types! { - pub const KsmLocation: MultiLocation = Here.into(); - pub const KusamaNetwork: NetworkId = NetworkId::Kusama; - pub const AnyNetwork: NetworkId = NetworkId::Any; - pub Ancestry: MultiLocation = Here.into(); + pub const TokenLocation: MultiLocation = Here.into_location(); + pub RelayNetwork: NetworkId = ByGenesis([0; 32]); + pub const AnyNetwork: Option = None; + pub UniversalLocation: InteriorMultiLocation = Here; pub UnitWeightCost: u64 = 1_000; } -pub type SovereignAccountOf = - (ChildParachainConvertsVia, AccountId32Aliases); +pub type LocationToAccountId = ( + ChildParachainConvertsVia, + AccountId32Aliases, + Account32Hash<(), AccountId>, +); -pub type LocalAssetTransactor = - XcmCurrencyAdapter, SovereignAccountOf, AccountId, ()>; +pub type LocalAssetTransactor = ( + XcmCurrencyAdapter, LocationToAccountId, AccountId, ()>, + NonFungiblesAdapter< + Uniques, + ConvertedConcreteId, JustTry>, + LocationToAccountId, + AccountId, + NoChecking, + (), + >, +); type LocalOriginConverter = ( - SovereignSignedViaLocation, + SovereignSignedViaLocation, ChildParachainAsNative, - SignedAccountId32AsNative, + SignedAccountId32AsNative, ChildSystemParachainAsSuperuser, ); parameter_types! { - pub const BaseXcmWeight: u64 = 1_000; - pub KsmPerSecond: (AssetId, u128) = (Concrete(KsmLocation::get()), 1); + pub const BaseXcmWeight: Weight = Weight::from_parts(1_000, 1_000); + pub TokensPerSecondPerByte: (AssetId, u128, u128) = + (Concrete(TokenLocation::get()), 1_000_000_000_000, 1024 * 1024); pub const MaxInstructions: u32 = 100; + pub const MaxAssetsIntoHolding: u32 = 64; } pub type XcmRouter = super::RelayChainXcmRouter; @@ -130,17 +167,31 @@ impl Config for XcmConfig { type OriginConverter = LocalOriginConverter; type IsReserve = (); type IsTeleporter = (); - type LocationInverter = LocationInverter; + type UniversalLocation = UniversalLocation; type Barrier = Barrier; type Weigher = FixedWeightBounds; - type Trader = FixedRateOfFungible; + type Trader = FixedRateOfFungible; type ResponseHandler = (); type AssetTrap = (); + type AssetLocker = XcmPallet; + type AssetExchanger = (); type AssetClaims = (); type SubscriptionService = (); + type PalletInstancesInfo = (); + type FeeManager = (); + type MaxAssetsIntoHolding = MaxAssetsIntoHolding; + type MessageExporter = (); + type UniversalAliases = Nothing; + type CallDispatcher = RuntimeCall; + type SafeCallFilter = Everything; } -pub type LocalOriginToLocation = SignedToAccountId32; +pub type LocalOriginToLocation = SignedToAccountId32; + +#[cfg(feature = "runtime-benchmarks")] +parameter_types! { + pub ReachableDest: Option = Some(Parachain(1).into()); +} impl pallet_xcm::Config for Runtime { type RuntimeEvent = RuntimeEvent; @@ -153,11 +204,19 @@ impl pallet_xcm::Config for Runtime { type XcmTeleportFilter = Everything; type XcmReserveTransferFilter = Everything; type Weigher = FixedWeightBounds; - type LocationInverter = LocationInverter; + type UniversalLocation = UniversalLocation; type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; + type Currency = Balances; + type CurrencyMatcher = IsConcrete; + type TrustedLockers = (); + type SovereignAccountOf = LocationToAccountId; + type MaxLockers = frame_support::traits::ConstU32<8>; + type WeightInfo = pallet_xcm::TestWeightInfo; + #[cfg(feature = "runtime-benchmarks")] + type ReachableDest = ReachableDest; } parameter_types! { @@ -188,5 +247,6 @@ construct_runtime!( ParasOrigin: origin::{Pallet, Origin}, ParasUmp: ump::{Pallet, Call, Storage, Event}, XcmPallet: pallet_xcm::{Pallet, Call, Storage, Event, Origin}, + Uniques: pallet_uniques::{Pallet, Call, Storage, Event}, } ); diff --git a/xcm/xcm-simulator/fuzzer/.gitignore b/xcm/xcm-simulator/fuzzer/.gitignore new file mode 100644 index 000000000000..ec8de6fa0531 --- /dev/null +++ b/xcm/xcm-simulator/fuzzer/.gitignore @@ -0,0 +1,5 @@ +hfuzz_target +hfuzz_workspace +cargo +coverage +ccov.zip diff --git a/xcm/xcm-simulator/fuzzer/Cargo.toml b/xcm/xcm-simulator/fuzzer/Cargo.toml index 012b146115b2..87efe3ead41f 100644 --- a/xcm/xcm-simulator/fuzzer/Cargo.toml +++ b/xcm/xcm-simulator/fuzzer/Cargo.toml @@ -6,17 +6,18 @@ authors.workspace = true edition.workspace = true [dependencies] -codec = { package = "parity-scale-codec", version = "3.0.0" } +codec = { package = "parity-scale-codec", version = "3.3.0" } honggfuzz = "0.5.55" +arbitrary = "1.2.0" scale-info = { version = "2.1.2", features = ["derive"] } -frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } -sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.36" } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.40" } xcm = { path = "../../" } xcm-simulator = { path = "../" } @@ -27,6 +28,13 @@ polkadot-core-primitives = { path = "../../../core-primitives" } polkadot-runtime-parachains = { path = "../../../runtime/parachains" } polkadot-parachain = { path = "../../../parachain" } +[features] +runtime-benchmarks = [ + "pallet-xcm/runtime-benchmarks", + "xcm-builder/runtime-benchmarks", + "frame-support/runtime-benchmarks", +] + [[bin]] path = "src/fuzz.rs" name = "xcm-fuzzer" diff --git a/xcm/xcm-simulator/fuzzer/README.md b/xcm/xcm-simulator/fuzzer/README.md new file mode 100644 index 000000000000..69e8cd377b97 --- /dev/null +++ b/xcm/xcm-simulator/fuzzer/README.md @@ -0,0 +1,38 @@ +# XCM Simulator Fuzzer + +This project will fuzz-test the XCM simulator. It can catch reachable panics, timeouts as well as integer overflows and underflows. + +## Install dependencies + +``` +cargo install honggfuzz +``` + +## Run the fuzzer + +In this directory, run this command: + +``` +cargo hfuzz run xcm-fuzzer +``` + +## Run a single input + +In this directory, run this command: + +``` +cargo hfuzz run-debug xcm-fuzzer hfuzz_workspace/xcm-fuzzer/fuzzer_input_file +``` + +## Generate coverage + +In this directory, run these four commands: + +``` +RUSTFLAGS="-Zprofile -Ccodegen-units=1 -Copt-level=0 -Clink-dead-code -Coverflow-checks=off -Zpanic_abort_tests -Cpanic=abort" CARGO_INCREMENTAL=0 SKIP_WASM_BUILD=1 CARGO_HOME=./cargo cargo build +../../../target/debug/xcm-fuzzer hfuzz_workspace/xcm-fuzzer/input/ +zip -0 ccov.zip `find ../../../target/ \( -name "*.gc*" -o -name "test-*.gc*" \) -print` +grcov ccov.zip -s ../../../ -t html --llvm --branch --ignore-not-existing -o ./coverage +``` + +The code coverage will be in `./coverage/index.html`. diff --git a/xcm/xcm-simulator/fuzzer/src/fuzz.rs b/xcm/xcm-simulator/fuzzer/src/fuzz.rs index 70ad3c1e2cc6..2965b791d401 100644 --- a/xcm/xcm-simulator/fuzzer/src/fuzz.rs +++ b/xcm/xcm-simulator/fuzzer/src/fuzz.rs @@ -18,6 +18,7 @@ mod parachain; mod relay_chain; use codec::DecodeLimit; +use polkadot_core_primitives::AccountId; use polkadot_parachain::primitives::Id as ParaId; use sp_runtime::traits::AccountIdConversion; use xcm_simulator::{decl_test_network, decl_test_parachain, decl_test_relay_chain, TestExt}; @@ -25,7 +26,8 @@ use xcm_simulator::{decl_test_network, decl_test_parachain, decl_test_relay_chai use frame_support::assert_ok; use xcm::{latest::prelude::*, MAX_XCM_DECODE_DEPTH}; -pub const ALICE: sp_runtime::AccountId32 = sp_runtime::AccountId32::new([0u8; 32]); +use arbitrary::{Arbitrary, Error, Unstructured}; + pub const INITIAL_BALANCE: u128 = 1_000_000_000; decl_test_parachain! { @@ -46,6 +48,15 @@ decl_test_parachain! { } } +decl_test_parachain! { + pub struct ParaC { + Runtime = parachain::Runtime, + XcmpMessageHandler = parachain::MsgQueue, + DmpMessageHandler = parachain::MsgQueue, + new_ext = para_ext(3), + } +} + decl_test_relay_chain! { pub struct Relay { Runtime = relay_chain::Runtime, @@ -60,10 +71,35 @@ decl_test_network! { parachains = vec![ (1, ParaA), (2, ParaB), + (3, ParaC), ], } } +// An XCM message that will be generated by the fuzzer through the Arbitrary trait +struct XcmMessage { + // Source chain + source: u32, + // Destination chain + destination: u32, + // XCM message + message: Xcm<()>, +} + +impl<'a> Arbitrary<'a> for XcmMessage { + fn arbitrary(u: &mut Unstructured<'a>) -> Result { + let source: u32 = u.arbitrary()?; + let destination: u32 = u.arbitrary()?; + let mut encoded_message: &[u8] = u.arbitrary()?; + if let Ok(message) = + DecodeLimit::decode_with_depth_limit(MAX_XCM_DECODE_DEPTH, &mut encoded_message) + { + return Ok(XcmMessage { source, destination, message }) + } + Err(Error::IncorrectFormat) + } +} + pub fn para_account_id(id: u32) -> relay_chain::AccountId { ParaId::from(id).into_account_truncating() } @@ -73,9 +109,11 @@ pub fn para_ext(para_id: u32) -> sp_io::TestExternalities { let mut t = frame_system::GenesisConfig::default().build_storage::().unwrap(); - pallet_balances::GenesisConfig:: { balances: vec![(ALICE, INITIAL_BALANCE)] } - .assimilate_storage(&mut t) - .unwrap(); + pallet_balances::GenesisConfig:: { + balances: (0..6).map(|i| ([i; 32].into(), INITIAL_BALANCE)).collect(), + } + .assimilate_storage(&mut t) + .unwrap(); let mut ext = sp_io::TestExternalities::new(t); ext.execute_with(|| { @@ -90,11 +128,13 @@ pub fn relay_ext() -> sp_io::TestExternalities { let mut t = frame_system::GenesisConfig::default().build_storage::().unwrap(); - pallet_balances::GenesisConfig:: { - balances: vec![(ALICE, INITIAL_BALANCE), (para_account_id(1), INITIAL_BALANCE)], - } - .assimilate_storage(&mut t) - .unwrap(); + let mut balances: Vec<(AccountId, u128)> = vec![]; + balances.append(&mut (1..=3).map(|i| (para_account_id(i), INITIAL_BALANCE)).collect()); + balances.append(&mut (0..6).map(|i| ([i; 32].into(), INITIAL_BALANCE)).collect()); + + pallet_balances::GenesisConfig:: { balances } + .assimilate_storage(&mut t) + .unwrap(); let mut ext = sp_io::TestExternalities::new(t); ext.execute_with(|| System::set_block_number(1)); @@ -104,46 +144,70 @@ pub fn relay_ext() -> sp_io::TestExternalities { pub type RelayChainPalletXcm = pallet_xcm::Pallet; pub type ParachainPalletXcm = pallet_xcm::Pallet; -fn run_one_input(mut data: &[u8]) { +fn run_input(xcm_messages: [XcmMessage; 5]) { MockNet::reset(); - if let Ok(m) = Xcm::decode_all_with_depth_limit(MAX_XCM_DECODE_DEPTH, &mut data) { - #[cfg(not(fuzzing))] - { - println!("Executing message {:?}", m); + + #[cfg(not(fuzzing))] + println!(); + + for xcm_message in xcm_messages { + if xcm_message.source % 4 == 0 { + // We get the destination for the message + let parachain_id = (xcm_message.destination % 3) + 1; + let destination: MultiLocation = Parachain(parachain_id).into(); + #[cfg(not(fuzzing))] + { + println!(" source: Relay Chain"); + println!(" destination: Parachain {parachain_id}"); + println!(" message: {:?}", xcm_message.message); + } + Relay::execute_with(|| { + assert_ok!(RelayChainPalletXcm::send_xcm(Here, destination, xcm_message.message)); + }) + } else { + // We get the source's execution method + let execute_with = match xcm_message.source % 4 { + 1 => ParaA::execute_with, + 2 => ParaB::execute_with, + _ => ParaC::execute_with, + }; + // We get the destination for the message + let destination: MultiLocation = match xcm_message.destination % 4 { + n @ 1..=3 => (Parent, Parachain(n)).into(), + _ => Parent.into(), + }; + #[cfg(not(fuzzing))] + { + let destination_str = match xcm_message.destination % 4 { + n @ 1..=3 => format!("Parachain {n}"), + _ => "Relay Chain".to_string(), + }; + println!(" source: Parachain {}", xcm_message.source % 4); + println!(" destination: {}", destination_str); + println!(" message: {:?}", xcm_message.message); + } + // We execute the message with the appropriate source and destination + execute_with(|| { + assert_ok!(ParachainPalletXcm::send_xcm(Here, destination, xcm_message.message)); + }); } - ParaA::execute_with(|| { - assert_ok!(ParachainPalletXcm::send_xcm(Here, Parent, m)); - }); - Relay::execute_with(|| {}); + #[cfg(not(fuzzing))] + println!(); } + Relay::execute_with(|| {}); } fn main() { #[cfg(fuzzing)] { loop { - honggfuzz::fuzz!(|data: &[u8]| { - run_one_input(data); - }); + honggfuzz::fuzz!(|xcm_messages: [XcmMessage; 5]| { + run_input(xcm_messages); + }) } } #[cfg(not(fuzzing))] { - //This code path can be used to generate a line-code coverage report in HTML - //that depicts which lines are executed by at least one input in the current fuzzing queue. - //To generate this code coverage report, run the following commands: - /* - ``` - export CARGO_INCREMENTAL=0 - export RUSTFLAGS="-Zprofile -Ccodegen-units=1 -Copt-level=0 -Clink-dead-code -Coverflow-checks=off -Zpanic_abort_tests -Cpanic=abort" - export RUSTDOCFLAGS="-Cpanic=abort" - rustup override set nightly - SKIP_WASM_BUILD=1 cargo build - ./xcm/xcm-simulator/fuzzer/target/debug/xcm-fuzzer hfuzz_workspace/xcm-fuzzer/input - zip -0 ccov.zip `find ../../target/debug \( -name "*.gc*" -o -name "test-*.gc*" \) -print` - grcov ccov.zip -s / -t html --llvm --branch --ignore-not-existing -o ../../target/debug/coverage/ - ``` - */ use std::{env, fs, fs::File, io::Read}; let args: Vec<_> = env::args().collect(); let md = fs::metadata(&args[1]).unwrap(); @@ -152,7 +216,7 @@ fn main() { .unwrap() .map(|x| x.unwrap().path().to_str().unwrap().to_string()) .collect::>(), - false => (&args[1..]).to_vec(), + false => (args[1..]).to_vec(), }; println!("All_files {:?}", all_files); for argument in all_files { @@ -160,7 +224,10 @@ fn main() { let mut buffer: Vec = Vec::new(); let mut f = File::open(argument).unwrap(); f.read_to_end(&mut buffer).unwrap(); - run_one_input(&buffer.as_slice()); + let mut unstructured = Unstructured::new(&buffer); + if let Ok(xcm_messages) = unstructured.arbitrary() { + run_input(xcm_messages); + } } } } diff --git a/xcm/xcm-simulator/fuzzer/src/parachain.rs b/xcm/xcm-simulator/fuzzer/src/parachain.rs index ce2a2698d00c..adf134124c93 100644 --- a/xcm/xcm-simulator/fuzzer/src/parachain.rs +++ b/xcm/xcm-simulator/fuzzer/src/parachain.rs @@ -38,9 +38,9 @@ use polkadot_parachain::primitives::{ use xcm::{latest::prelude::*, VersionedXcm}; use xcm_builder::{ AccountId32Aliases, AllowUnpaidExecutionFrom, CurrencyAdapter as XcmCurrencyAdapter, - EnsureXcmOrigin, FixedRateOfFungible, FixedWeightBounds, IsConcrete, LocationInverter, - NativeAsset, ParentIsPreset, SiblingParachainConvertsVia, SignedAccountId32AsNative, - SignedToAccountId32, SovereignSignedViaLocation, + EnsureXcmOrigin, FixedRateOfFungible, FixedWeightBounds, IsConcrete, NativeAsset, + ParentIsPreset, SiblingParachainConvertsVia, SignedAccountId32AsNative, SignedToAccountId32, + SovereignSignedViaLocation, }; use xcm_executor::{Config, XcmExecutor}; @@ -97,14 +97,14 @@ impl pallet_balances::Config for Runtime { } parameter_types! { - pub const ReservedXcmpWeight: Weight = Weight::from_ref_time(WEIGHT_REF_TIME_PER_SECOND.saturating_div(4)); - pub const ReservedDmpWeight: Weight = Weight::from_ref_time(WEIGHT_REF_TIME_PER_SECOND.saturating_div(4)); + pub const ReservedXcmpWeight: Weight = Weight::from_parts(WEIGHT_REF_TIME_PER_SECOND.saturating_div(4), 0); + pub const ReservedDmpWeight: Weight = Weight::from_parts(WEIGHT_REF_TIME_PER_SECOND.saturating_div(4), 0); } parameter_types! { pub const KsmLocation: MultiLocation = MultiLocation::parent(); pub const RelayNetwork: NetworkId = NetworkId::Kusama; - pub Ancestry: MultiLocation = Parachain(MsgQueue::parachain_id().into()).into(); + pub UniversalLocation: InteriorMultiLocation = Parachain(MsgQueue::parachain_id().into()).into(); } pub type LocationToAccountId = ( @@ -120,9 +120,10 @@ pub type XcmOriginToCallOrigin = ( ); parameter_types! { - pub const UnitWeightCost: u64 = 1; - pub KsmPerSecond: (AssetId, u128) = (Concrete(Parent.into()), 1); + pub const UnitWeightCost: Weight = Weight::from_parts(1, 1); + pub KsmPerSecondPerByte: (AssetId, u128, u128) = (Concrete(Parent.into()), 1, 1); pub const MaxInstructions: u32 = 100; + pub const MaxAssetsIntoHolding: u32 = 64; } pub type LocalAssetTransactor = @@ -139,14 +140,23 @@ impl Config for XcmConfig { type OriginConverter = XcmOriginToCallOrigin; type IsReserve = NativeAsset; type IsTeleporter = (); - type LocationInverter = LocationInverter; + type UniversalLocation = UniversalLocation; type Barrier = Barrier; type Weigher = FixedWeightBounds; - type Trader = FixedRateOfFungible; + type Trader = FixedRateOfFungible; type ResponseHandler = (); type AssetTrap = (); + type AssetLocker = (); + type AssetExchanger = (); type AssetClaims = (); type SubscriptionService = (); + type PalletInstancesInfo = (); + type FeeManager = (); + type MaxAssetsIntoHolding = MaxAssetsIntoHolding; + type MessageExporter = (); + type UniversalAliases = Nothing; + type CallDispatcher = RuntimeCall; + type SafeCallFilter = Everything; } #[frame_support::pallet] @@ -164,7 +174,6 @@ pub mod mock_msg_queue { impl Pallet {} #[pallet::pallet] - #[pallet::generate_store(pub(super) trait Store)] #[pallet::without_storage_info] pub struct Pallet(_); @@ -219,17 +228,16 @@ pub mod mock_msg_queue { max_weight: Weight, ) -> Result { let hash = Encode::using_encoded(&xcm, T::Hashing::hash); + let message_hash = xcm.using_encoded(sp_io::hashing::blake2_256); let (result, event) = match Xcm::::try_from(xcm) { Ok(xcm) => { let location = MultiLocation::new(1, X1(Parachain(sender.into()))); - match T::XcmExecutor::execute_xcm(location, xcm, max_weight.ref_time()) { + match T::XcmExecutor::execute_xcm(location, xcm, message_hash, max_weight) { Outcome::Error(e) => (Err(e.clone()), Event::Fail(Some(hash), e)), - Outcome::Complete(w) => - (Ok(Weight::from_ref_time(w)), Event::Success(Some(hash))), + Outcome::Complete(w) => (Ok(w), Event::Success(Some(hash))), // As far as the caller is concerned, this was dispatched without error, so // we just report the weight used. - Outcome::Incomplete(w, e) => - (Ok(Weight::from_ref_time(w)), Event::Fail(Some(hash), e)), + Outcome::Incomplete(w, e) => (Ok(w), Event::Fail(Some(hash), e)), } }, Err(()) => (Err(XcmError::UnhandledXcmVersion), Event::BadVersion(Some(hash))), @@ -281,8 +289,7 @@ pub mod mock_msg_queue { Self::deposit_event(Event::UnsupportedVersion(id)); }, Ok(Ok(x)) => { - let outcome = - T::XcmExecutor::execute_xcm(Parent, x.clone(), limit.ref_time()); + let outcome = T::XcmExecutor::execute_xcm(Parent, x.clone(), id, limit); >::append(x); Self::deposit_event(Event::ExecutedDownward(id, outcome)); }, @@ -300,6 +307,11 @@ impl mock_msg_queue::Config for Runtime { pub type LocalOriginToLocation = SignedToAccountId32; +#[cfg(feature = "runtime-benchmarks")] +parameter_types! { + pub ReachableDest: Option = Some(Parent.into()); +} + impl pallet_xcm::Config for Runtime { type RuntimeEvent = RuntimeEvent; type SendXcmOrigin = EnsureXcmOrigin; @@ -310,11 +322,19 @@ impl pallet_xcm::Config for Runtime { type XcmTeleportFilter = Nothing; type XcmReserveTransferFilter = Everything; type Weigher = FixedWeightBounds; - type LocationInverter = LocationInverter; + type UniversalLocation = UniversalLocation; type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; + type Currency = Balances; + type CurrencyMatcher = (); + type TrustedLockers = (); + type SovereignAccountOf = LocationToAccountId; + type MaxLockers = frame_support::traits::ConstU32<8>; + type WeightInfo = pallet_xcm::TestWeightInfo; + #[cfg(feature = "runtime-benchmarks")] + type ReachableDest = ReachableDest; } type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic; diff --git a/xcm/xcm-simulator/fuzzer/src/relay_chain.rs b/xcm/xcm-simulator/fuzzer/src/relay_chain.rs index 3a5d9e229621..fe08a056cdc1 100644 --- a/xcm/xcm-simulator/fuzzer/src/relay_chain.rs +++ b/xcm/xcm-simulator/fuzzer/src/relay_chain.rs @@ -19,6 +19,7 @@ use frame_support::{ construct_runtime, parameter_types, traits::{Everything, Nothing}, + weights::Weight, }; use sp_core::H256; use sp_runtime::{testing::Header, traits::IdentityLookup, AccountId32}; @@ -30,7 +31,7 @@ use xcm_builder::{ AccountId32Aliases, AllowUnpaidExecutionFrom, ChildParachainAsNative, ChildParachainConvertsVia, ChildSystemParachainAsSuperuser, CurrencyAdapter as XcmCurrencyAdapter, FixedRateOfFungible, FixedWeightBounds, IsConcrete, - LocationInverter, SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, + SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, }; use xcm_executor::{Config, XcmExecutor}; @@ -93,30 +94,30 @@ impl configuration::Config for Runtime { } parameter_types! { - pub const KsmLocation: MultiLocation = Here.into(); - pub const KusamaNetwork: NetworkId = NetworkId::Kusama; - pub const AnyNetwork: NetworkId = NetworkId::Any; - pub Ancestry: MultiLocation = Here.into(); - pub UnitWeightCost: u64 = 1_000; + pub const TokenLocation: MultiLocation = Here.into_location(); + pub const ThisNetwork: NetworkId = NetworkId::ByGenesis([0; 32]); + pub const AnyNetwork: Option = None; + pub const UniversalLocation: InteriorMultiLocation = Here; } pub type SovereignAccountOf = - (ChildParachainConvertsVia, AccountId32Aliases); + (ChildParachainConvertsVia, AccountId32Aliases); pub type LocalAssetTransactor = - XcmCurrencyAdapter, SovereignAccountOf, AccountId, ()>; + XcmCurrencyAdapter, SovereignAccountOf, AccountId, ()>; type LocalOriginConverter = ( SovereignSignedViaLocation, ChildParachainAsNative, - SignedAccountId32AsNative, + SignedAccountId32AsNative, ChildSystemParachainAsSuperuser, ); parameter_types! { - pub const BaseXcmWeight: u64 = 1_000; - pub KsmPerSecond: (AssetId, u128) = (Concrete(KsmLocation::get()), 1); + pub const BaseXcmWeight: Weight = Weight::from_parts(1_000, 1_000); + pub KsmPerSecondPerByte: (AssetId, u128, u128) = (Concrete(TokenLocation::get()), 1, 1); pub const MaxInstructions: u32 = 100; + pub const MaxAssetsIntoHolding: u32 = 64; } pub type XcmRouter = super::RelayChainXcmRouter; @@ -130,17 +131,31 @@ impl Config for XcmConfig { type OriginConverter = LocalOriginConverter; type IsReserve = (); type IsTeleporter = (); - type LocationInverter = LocationInverter; + type UniversalLocation = UniversalLocation; type Barrier = Barrier; type Weigher = FixedWeightBounds; - type Trader = FixedRateOfFungible; + type Trader = FixedRateOfFungible; type ResponseHandler = (); type AssetTrap = (); + type AssetLocker = (); + type AssetExchanger = (); type AssetClaims = (); type SubscriptionService = (); + type PalletInstancesInfo = (); + type FeeManager = (); + type MaxAssetsIntoHolding = MaxAssetsIntoHolding; + type MessageExporter = (); + type UniversalAliases = Nothing; + type CallDispatcher = RuntimeCall; + type SafeCallFilter = Everything; } -pub type LocalOriginToLocation = SignedToAccountId32; +pub type LocalOriginToLocation = SignedToAccountId32; + +#[cfg(feature = "runtime-benchmarks")] +parameter_types! { + pub ReachableDest: Option = Some(Parachain(1).into()); +} impl pallet_xcm::Config for Runtime { type RuntimeEvent = RuntimeEvent; @@ -153,11 +168,19 @@ impl pallet_xcm::Config for Runtime { type XcmTeleportFilter = Everything; type XcmReserveTransferFilter = Everything; type Weigher = FixedWeightBounds; - type LocationInverter = LocationInverter; + type UniversalLocation = UniversalLocation; type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; + type Currency = Balances; + type CurrencyMatcher = (); + type TrustedLockers = (); + type SovereignAccountOf = SovereignAccountOf; + type MaxLockers = frame_support::traits::ConstU32<8>; + type WeightInfo = pallet_xcm::TestWeightInfo; + #[cfg(feature = "runtime-benchmarks")] + type ReachableDest = ReachableDest; } parameter_types! { diff --git a/xcm/xcm-simulator/src/lib.rs b/xcm/xcm-simulator/src/lib.rs index a8d602037cd5..f87aae3f29a7 100644 --- a/xcm/xcm-simulator/src/lib.rs +++ b/xcm/xcm-simulator/src/lib.rs @@ -20,7 +20,7 @@ pub use codec::Encode; pub use paste; pub use frame_support::{traits::Get, weights::Weight}; -pub use sp_io::TestExternalities; +pub use sp_io::{hashing::blake2_256, TestExternalities}; pub use sp_std::{cell::RefCell, collections::vec_deque::VecDeque, marker::PhantomData}; pub use polkadot_core_primitives::BlockNumber as RelayBlockNumber; @@ -77,6 +77,10 @@ pub fn encode_xcm(message: Xcm<()>, message_kind: MessageKind) -> Vec { } } +pub fn fake_message_hash(message: &Xcm) -> XcmHash { + message.using_encoded(blake2_256) +} + /// The macro is implementing upward message passing(UMP) for the provided relay /// chain struct. The struct has to provide the XCM configuration for the relay /// chain. @@ -257,6 +261,7 @@ macro_rules! decl_test_network { parachains = vec![ $( ($para_id:expr, $parachain:ty), )* ], } ) => { + use $crate::Encode; pub struct $name; impl $name { @@ -293,7 +298,7 @@ macro_rules! decl_test_network { $crate::Weight::MAX, ); if let Err((id, required)) = r { - return Err($crate::XcmError::WeightLimitReached(required.ref_time())); + return Err($crate::XcmError::WeightLimitReached(required)); } }, $( @@ -343,45 +348,65 @@ macro_rules! decl_test_network { pub struct ParachainXcmRouter($crate::PhantomData); impl> $crate::SendXcm for ParachainXcmRouter { - fn send_xcm(destination: impl Into<$crate::MultiLocation>, message: $crate::Xcm<()>) -> $crate::SendResult { + type Ticket = ($crate::ParaId, $crate::MultiLocation, $crate::Xcm<()>); + fn validate( + destination: &mut Option<$crate::MultiLocation>, + message: &mut Option<$crate::Xcm<()>>, + ) -> $crate::SendResult<($crate::ParaId, $crate::MultiLocation, $crate::Xcm<()>)> { use $crate::{UmpSink, XcmpMessageHandlerT}; - let destination = destination.into(); - match destination.interior() { - $crate::Junctions::Here if destination.parent_count() == 1 => { - $crate::PARA_MESSAGE_BUS.with( - |b| b.borrow_mut().push_back((T::get(), destination, message))); - Ok(()) - }, + let d = destination.take().ok_or($crate::SendError::MissingArgument)?; + match (d.interior(), d.parent_count()) { + ($crate::Junctions::Here, 1) => {}, $( - $crate::X1($crate::Parachain(id)) if *id == $para_id && destination.parent_count() == 1 => { - $crate::PARA_MESSAGE_BUS.with( - |b| b.borrow_mut().push_back((T::get(), destination, message))); - Ok(()) - }, + ($crate::X1($crate::Parachain(id)), 1) if id == &$para_id => {} )* - _ => Err($crate::SendError::CannotReachDestination(destination, message)), + _ => { + *destination = Some(d); + return Err($crate::SendError::NotApplicable) + }, } + let m = message.take().ok_or($crate::SendError::MissingArgument)?; + Ok(((T::get(), d, m), $crate::MultiAssets::new())) + } + fn deliver( + triple: ($crate::ParaId, $crate::MultiLocation, $crate::Xcm<()>), + ) -> Result<$crate::XcmHash, $crate::SendError> { + let hash = $crate::fake_message_hash(&triple.2); + $crate::PARA_MESSAGE_BUS.with(|b| b.borrow_mut().push_back(triple)); + Ok(hash) } } /// XCM router for relay chain. pub struct RelayChainXcmRouter; impl $crate::SendXcm for RelayChainXcmRouter { - fn send_xcm(destination: impl Into<$crate::MultiLocation>, message: $crate::Xcm<()>) -> $crate::SendResult { + type Ticket = ($crate::MultiLocation, $crate::Xcm<()>); + fn validate( + destination: &mut Option<$crate::MultiLocation>, + message: &mut Option<$crate::Xcm<()>>, + ) -> $crate::SendResult<($crate::MultiLocation, $crate::Xcm<()>)> { use $crate::DmpMessageHandlerT; - let destination = destination.into(); - match destination.interior() { + let d = destination.take().ok_or($crate::SendError::MissingArgument)?; + match (d.interior(), d.parent_count()) { $( - $crate::X1($crate::Parachain(id)) if *id == $para_id && destination.parent_count() == 0 => { - $crate::RELAY_MESSAGE_BUS.with( - |b| b.borrow_mut().push_back((destination, message))); - Ok(()) - }, + ($crate::X1($crate::Parachain(id)), 0) if id == &$para_id => {}, )* - _ => Err($crate::SendError::Unroutable), + _ => { + *destination = Some(d); + return Err($crate::SendError::NotApplicable) + }, } + let m = message.take().ok_or($crate::SendError::MissingArgument)?; + Ok(((d, m), $crate::MultiAssets::new())) + } + fn deliver( + pair: ($crate::MultiLocation, $crate::Xcm<()>), + ) -> Result<$crate::XcmHash, $crate::SendError> { + let hash = $crate::fake_message_hash(&pair.1); + $crate::RELAY_MESSAGE_BUS.with(|b| b.borrow_mut().push_back(pair)); + Ok(hash) } } }; diff --git a/zombienet_tests/.set_env b/zombienet_tests/.set_env new file mode 100644 index 000000000000..f5d09f218735 --- /dev/null +++ b/zombienet_tests/.set_env @@ -0,0 +1,20 @@ +pathprepend() { + for ((i=$#; i>0; i--)); + do + ARG="$@[$i]" + if [ -d "$ARG" ] && [[ ":$PATH:" != *":$ARG:"* ]]; then + PATH="$ARG${PATH:+":$PATH"}" + fi + done +} + +# paths are prepend in order, so you can manage with version will run +# by the order of this array +CUSTOM_PATHS=( + "~/polkadot/target/release" + "~/polkadot/target/testnet" + "~/cumulus/target/release" +) + +pathprepend $CUSTOM_PATHS +export PATH=$PATH diff --git a/zombienet_tests/README.md b/zombienet_tests/README.md index 5760e203d958..021d3643e7f9 100644 --- a/zombienet_tests/README.md +++ b/zombienet_tests/README.md @@ -12,6 +12,49 @@ _The content of this directory is meant to be used by Parity's private CI/CD inf * [zombienet repo](https://github.com/paritytech/zombienet) * [zombienet book](https://paritytech.github.io/zombienet/) +## Running tests locally + +To run any test locally use the native provider (`zombienet test -p native ...`) you need first build the binaries. They are: + +* adder-collator -> polkadot/target/testnet/adder-collator +* malus -> polkadot/target/testnet/malus +* polkadot -> polkadot/target/testnet/polkadot +* polkadot-collator -> cumulus/target/release/polkadot-parachain +* undying-collator -> polkadot/target/testnet/undying-collator + +To build them use: +* adder-collator -> `cargo build --profile testnet -p test-parachain-adder-collator` +* undying-collator -> `cargo build --profile testnet -p test-parachain-undying-collator` +* malus -> cargo build --profile testnet -p polkadot-test-malus +* polkadot (in polkadot repo) and polkadot-collator (in cumulus repo) -> `cargo build --profile testnet` + +One solution is to use the `.set_env` file (from this directory) and fill the `CUSTOM_PATHS` before *source* it to patch the PATH of your system to find the binaries you just built. + +E.g.: +``` +$ cat .set_env +(...) +# by the order of this array +CUSTOM_PATHS=( + "~/polkadot/target/release" + "~/polkadot/target/testnet" + "~/cumulus/target/release" +) +(...) + +source .set_env +``` + +Then you have your `PATH` customized and ready to run `zombienet`. + **NOTE**: You should need to do this ones per terminal session, since we are patching the `PATH` and re-exporting. **Or** you can also `source` this file in your `.bashrc` file to get executed automatically in each new session. + +Example: + +You can run a test locally by executing: +```sh +zombienet test -p native 0001-parachains-pvf.zndsl +``` + ## Questions / permissions Ping in element Javier (@javier:matrix.parity.io) to ask questions or grant permission to run the test from your local setup. diff --git a/zombienet_tests/functional/0001-parachains-pvf.zndsl b/zombienet_tests/functional/0001-parachains-pvf.zndsl index 1f187498d78f..46bb8bcdf72b 100644 --- a/zombienet_tests/functional/0001-parachains-pvf.zndsl +++ b/zombienet_tests/functional/0001-parachains-pvf.zndsl @@ -2,16 +2,6 @@ Description: PVF preparation & execution time Network: ./0001-parachains-pvf.toml Creds: config -# Some sanity checks -alice: is up -bob: is up -charlie: is up -dave: is up -eve: is up -ferdie: is up -one: is up -two: is up - # Check authority status. alice: reports node_roles is 4 bob: reports node_roles is 4 @@ -32,16 +22,6 @@ eve: parachain 2005 is registered within 60 seconds one: parachain 2006 is registered within 60 seconds two: parachain 2007 is registered within 60 seconds -# Check if network is fully connected. -alice: reports peers count is at least 15 within 20 seconds -bob: reports peers count is at least 15 within 20 seconds -charlie: reports peers count is at least 15 within 20 seconds -dave: reports peers count is at least 15 within 20 seconds -ferdie: reports peers count is at least 15 within 20 seconds -eve: reports peers count is at least 15 within 20 seconds -one: reports peers count is at least 15 within 20 seconds -two: reports peers count is at least 15 within 20 seconds - # Ensure parachains made progress. alice: parachain 2000 block height is at least 10 within 300 seconds alice: parachain 2001 block height is at least 10 within 300 seconds @@ -63,23 +43,23 @@ eve: reports histogram polkadot_pvf_preparation_time has at least 1 samples in b one: reports histogram polkadot_pvf_preparation_time has at least 1 samples in buckets ["0.1", "0.5", "1", "2", "3", "10"] within 10 seconds two: reports histogram polkadot_pvf_preparation_time has at least 1 samples in buckets ["0.1", "0.5", "1", "2", "3", "10"] within 10 seconds -# Check all buckets >= 20. -alice: reports histogram polkadot_pvf_preparation_time has 0 samples in buckets ["20", "30", "60", "180", "+Inf"] within 10 seconds -bob: reports histogram polkadot_pvf_preparation_time has 0 samples in buckets ["20", "30", "60", "180", "+Inf"] within 10 seconds -charlie: reports histogram polkadot_pvf_preparation_time has 0 samples in buckets ["20", "30", "60", "180", "+Inf"] within 10 seconds -dave: reports histogram polkadot_pvf_preparation_time has 0 samples in buckets ["20", "30", "60", "180", "+Inf"] within 10 seconds -ferdie: reports histogram polkadot_pvf_preparation_time has 0 samples in buckets ["20", "30", "60", "180", "+Inf"] within 10 seconds -eve: reports histogram polkadot_pvf_preparation_time has 0 samples in buckets ["20", "30", "60", "180", "+Inf"] within 10 seconds -one: reports histogram polkadot_pvf_preparation_time has 0 samples in buckets ["20", "30", "60", "180", "+Inf"] within 10 seconds -two: reports histogram polkadot_pvf_preparation_time has 0 samples in buckets ["20", "30", "60", "180", "+Inf"] within 10 seconds +# Check all buckets >= 20. +alice: reports histogram polkadot_pvf_preparation_time has 0 samples in buckets ["20", "30", "60", "120", "+Inf"] within 10 seconds +bob: reports histogram polkadot_pvf_preparation_time has 0 samples in buckets ["20", "30", "60", "120", "+Inf"] within 10 seconds +charlie: reports histogram polkadot_pvf_preparation_time has 0 samples in buckets ["20", "30", "60", "120", "+Inf"] within 10 seconds +dave: reports histogram polkadot_pvf_preparation_time has 0 samples in buckets ["20", "30", "60", "120", "+Inf"] within 10 seconds +ferdie: reports histogram polkadot_pvf_preparation_time has 0 samples in buckets ["20", "30", "60", "120", "+Inf"] within 10 seconds +eve: reports histogram polkadot_pvf_preparation_time has 0 samples in buckets ["20", "30", "60", "120", "+Inf"] within 10 seconds +one: reports histogram polkadot_pvf_preparation_time has 0 samples in buckets ["20", "30", "60", "120", "+Inf"] within 10 seconds +two: reports histogram polkadot_pvf_preparation_time has 0 samples in buckets ["20", "30", "60", "120", "+Inf"] within 10 seconds # Check execution time. # There are two different timeout conditions: BACKING_EXECUTION_TIMEOUT(2s) and # APPROVAL_EXECUTION_TIMEOUT(6s). Currently these are not differentiated by metrics # because the metrics are defined in `polkadot-node-core-pvf` which is a level below # the relevant subsystems. -# That being said, we will take the simplifying assumption of testing only the -# 2s timeout. +# That being said, we will take the simplifying assumption of testing only the +# 2s timeout. # We do this check by ensuring all executions fall into bucket le="2" or lower. # First, check if we have at least 1 sample, but we should have many more. alice: reports histogram polkadot_pvf_execution_time has at least 1 samples in buckets ["0.1", "0.5", "1", "2"] within 10 seconds diff --git a/zombienet_tests/functional/0002-parachains-disputes.zndsl b/zombienet_tests/functional/0002-parachains-disputes.zndsl index 9386e07e209a..e17ac79399f9 100644 --- a/zombienet_tests/functional/0002-parachains-disputes.zndsl +++ b/zombienet_tests/functional/0002-parachains-disputes.zndsl @@ -2,15 +2,6 @@ Description: Disputes initiation, conclusion and lag Network: ./0002-parachains-disputes.toml Creds: config -alice: is up -bob: is up -charlie: is up -dave: is up -eve: is up -ferdie: is up -one: is up -two: is up - # Check authority status and peers. alice: reports node_roles is 4 bob: reports node_roles is 4 @@ -27,15 +18,6 @@ bob: parachain 2001 is registered within 30 seconds charlie: parachain 2002 is registered within 30 seconds dave: parachain 2003 is registered within 30 seconds -alice: reports peers count is at least 11 within 20 seconds -bob: reports peers count is at least 11 within 20 seconds -charlie: reports peers count is at least 11 within 20 seconds -dave: reports peers count is at least 11 within 20 seconds -ferdie: reports peers count is at least 1 within 20 seconds -eve: reports peers count is at least 11 within 20 seconds -one: reports peers count is at least 11 within 20 seconds -two: reports peers count is at least 11 within 20 seconds - # Ensure parachains made progress. alice: parachain 2000 block height is at least 10 within 200 seconds alice: parachain 2001 block height is at least 10 within 200 seconds @@ -48,8 +30,9 @@ eve: reports parachain_candidate_disputes_total is at least 10 within 15 seconds eve: reports parachain_candidate_dispute_concluded{validity="valid"} is at least 10 within 15 seconds eve: reports parachain_candidate_dispute_concluded{validity="invalid"} is 0 within 15 seconds -# Check there is an offence report -alice: system event contains "There is an offence reported" within 60 seconds +# As of , we don't slash on disputes +# with `valid` outcome, so there is no offence reported. +# alice: system event contains "There is an offence reported" within 60 seconds # Check lag - approval alice: reports polkadot_parachain_approval_checking_finality_lag is 0 diff --git a/zombienet_tests/functional/0003-beefy-and-mmr.zndsl b/zombienet_tests/functional/0003-beefy-and-mmr.zndsl index fad890bec9e4..c927a671658d 100644 --- a/zombienet_tests/functional/0003-beefy-and-mmr.zndsl +++ b/zombienet_tests/functional/0003-beefy-and-mmr.zndsl @@ -2,12 +2,6 @@ Description: Test BEEFY voting and finality, test MMR proofs. Assumes Rococo ses Network: ./0003-beefy-and-mmr.toml Creds: config -# Some sanity checks. -validator-0: is up -validator-1: is up -validator-2: is up -validator-3: is up - # Check authority status. validator-0: reports node_roles is 4 validator-1: reports node_roles is 4 diff --git a/zombienet_tests/functional/0003-parachains-garbage-candidate.toml b/zombienet_tests/functional/0003-parachains-garbage-candidate.toml index 8f82d30e2ac6..7c4f5a9f1bca 100644 --- a/zombienet_tests/functional/0003-parachains-garbage-candidate.toml +++ b/zombienet_tests/functional/0003-parachains-garbage-candidate.toml @@ -27,7 +27,7 @@ requests = { memory = "2G", cpu = "1" } command = "malus suggest-garbage-candidate" args = ["-lparachain=debug,MALUS=trace"] count = 1 - + {% for id in range(2000,2003) %} [[parachains]] id = {{id}} diff --git a/zombienet_tests/functional/0003-parachains-garbage-candidate.zndsl b/zombienet_tests/functional/0003-parachains-garbage-candidate.zndsl index 24be749f13e6..c4b2dbf20a17 100644 --- a/zombienet_tests/functional/0003-parachains-garbage-candidate.zndsl +++ b/zombienet_tests/functional/0003-parachains-garbage-candidate.zndsl @@ -2,11 +2,6 @@ Description: Test dispute finality lag when 1/3 of parachain validators always a Network: ./0003-parachains-garbage-candidate.toml Creds: config -honest-validator-0: is up -honest-validator-1: is up -honest-validator-2: is up -malus-validator-0: is up - # Check authority status. honest-validator-0: reports node_roles is 4 honest-validator-1: reports node_roles is 4 @@ -18,6 +13,11 @@ honest-validator-0: parachain 2000 block height is at least 2 within 180 seconds honest-validator-1: parachain 2001 block height is at least 2 within 180 seconds honest-validator-2: parachain 2002 block height is at least 2 within 180 seconds +# Check there is an offence report after dispute conclusion +honest-validator-0: system event contains "There is an offence reported" within 180 seconds +honest-validator-1: system event contains "There is an offence reported" within 180 seconds +honest-validator-2: system event contains "There is an offence reported" within 180 seconds + # Check for chain reversion after dispute conclusion. honest-validator-0: log line contains "reverted due to a bad parachain block" within 180 seconds honest-validator-1: log line contains "reverted due to a bad parachain block" within 180 seconds diff --git a/zombienet_tests/misc/0001-paritydb.toml b/zombienet_tests/misc/0001-paritydb.toml index c40e0969d084..38fa56898196 100644 --- a/zombienet_tests/misc/0001-paritydb.toml +++ b/zombienet_tests/misc/0001-paritydb.toml @@ -20,7 +20,7 @@ requests = { memory = "2G", cpu = "1" } name = "validator" count = 10 args = ["-lparachain=debug", "--db=paritydb"] - + {% for id in range(2000,2010) %} [[parachains]] id = {{id}} diff --git a/zombienet_tests/misc/0001-paritydb.zndsl b/zombienet_tests/misc/0001-paritydb.zndsl index 7340fffb477e..eede8bc11142 100644 --- a/zombienet_tests/misc/0001-paritydb.zndsl +++ b/zombienet_tests/misc/0001-paritydb.zndsl @@ -2,17 +2,6 @@ Description: Check that paritydb works without affecting finality lag and block Network: ./0001-paritydb.toml Creds: config -validator-0: is up -validator-1: is up -validator-2: is up -validator-3: is up -validator-4: is up -validator-5: is up -validator-6: is up -validator-7: is up -validator-8: is up -validator-9: is up - # Check if we are using ParityDB. validator: log line contains "Database: ParityDb" validator: run ./0001-check_paritydb.sh within 60 seconds @@ -41,18 +30,6 @@ validator-0: parachain 2007 is registered validator-0: parachain 2008 is registered validator-0: parachain 2009 is registered -# Check if network is fully connected. -validator-0: reports peers count is at least 19 within 20 seconds -validator-1: reports peers count is at least 19 within 20 seconds -validator-2: reports peers count is at least 19 within 20 seconds -validator-3: reports peers count is at least 19 within 20 seconds -validator-4: reports peers count is at least 19 within 20 seconds -validator-5: reports peers count is at least 19 within 20 seconds -validator-6: reports peers count is at least 19 within 20 seconds -validator-7: reports peers count is at least 19 within 20 seconds -validator-8: reports peers count is at least 19 within 20 seconds -validator-9: reports peers count is at least 19 within 20 seconds - # Ensure parachains made some progress. validator-0: parachain 2000 block height is at least 3 within 30 seconds validator-0: parachain 2001 block height is at least 3 within 30 seconds diff --git a/zombienet_tests/misc/0002-upgrade-node.zndsl b/zombienet_tests/misc/0002-upgrade-node.zndsl index 6d0bd643c4f9..25f87528d627 100644 --- a/zombienet_tests/misc/0002-upgrade-node.zndsl +++ b/zombienet_tests/misc/0002-upgrade-node.zndsl @@ -2,11 +2,6 @@ Description: Smoke / Upgrade Node Network: ./0002-upgrade-node.toml Creds: config -alice: is up -bob: is up -charlie: is up -dave: is up - alice: parachain 2000 block height is at least 10 within 200 seconds bob: parachain 2001 block height is at least 10 within 200 seconds diff --git a/zombienet_tests/smoke/0001-parachains-smoke-test.toml b/zombienet_tests/smoke/0001-parachains-smoke-test.toml index 4d4324822f43..d132945aeea0 100644 --- a/zombienet_tests/smoke/0001-parachains-smoke-test.toml +++ b/zombienet_tests/smoke/0001-parachains-smoke-test.toml @@ -21,7 +21,7 @@ addToGenesis = false [parachains.collator] name = "collator01" image = "{{COL_IMAGE}}" - command = "/usr/local/bin/adder-collator" + command = "adder-collator" args = [ "-lruntime=debug,parachain=trace" ] [types.Header] diff --git a/zombienet_tests/smoke/0001-parachains-smoke-test.zndsl b/zombienet_tests/smoke/0001-parachains-smoke-test.zndsl index cf5668a856d0..13d0624158f2 100644 --- a/zombienet_tests/smoke/0001-parachains-smoke-test.zndsl +++ b/zombienet_tests/smoke/0001-parachains-smoke-test.zndsl @@ -2,8 +2,5 @@ Description: Smoke Test Network: ./0001-parachains-smoke-test.toml Creds: config - -alice: is up -bob: is up alice: parachain 100 is registered within 225 seconds alice: parachain 100 block height is at least 10 within 200 seconds diff --git a/zombienet_tests/smoke/0002-parachains-upgrade-smoke-test.zndsl b/zombienet_tests/smoke/0002-parachains-upgrade-smoke-test.zndsl index ac8f35a6ce5e..fec28455f5f2 100644 --- a/zombienet_tests/smoke/0002-parachains-upgrade-smoke-test.zndsl +++ b/zombienet_tests/smoke/0002-parachains-upgrade-smoke-test.zndsl @@ -2,9 +2,6 @@ Description: Smoke Test Network: ./0002-parachains-upgrade-smoke-test.toml Creds: config - -alice: is up -bob: is up alice: parachain 100 is registered within 225 seconds alice: parachain 100 block height is at least 10 within 400 seconds alice: parachain 100 perform dummy upgrade within 200 seconds diff --git a/zombienet_tests/smoke/0003-deregister-register-validator-smoke.toml b/zombienet_tests/smoke/0003-deregister-register-validator-smoke.toml index bc1dbe6d3ed5..48c79a861bed 100644 --- a/zombienet_tests/smoke/0003-deregister-register-validator-smoke.toml +++ b/zombienet_tests/smoke/0003-deregister-register-validator-smoke.toml @@ -21,4 +21,3 @@ command = "polkadot" [[relaychain.nodes]] name = "dave" args = [ "-lruntime=debug,parachain=trace" ] - \ No newline at end of file diff --git a/zombienet_tests/smoke/0003-deregister-register-validator-smoke.zndsl b/zombienet_tests/smoke/0003-deregister-register-validator-smoke.zndsl index 6a79c4cb071d..05e83110e4fe 100644 --- a/zombienet_tests/smoke/0003-deregister-register-validator-smoke.zndsl +++ b/zombienet_tests/smoke/0003-deregister-register-validator-smoke.zndsl @@ -2,11 +2,6 @@ Description: Deregister / Register Validator Smoke Network: ./0003-deregister-register-validator-smoke.toml Creds: config -alice: is up within 30 seconds -bob: is up within 30 seconds -charlie: is up within 30 seconds -dave: is up within 30 seconds - # ensure is in the validator set dave: reports polkadot_node_is_parachain_validator is 1 within 240 secs dave: reports polkadot_node_is_active_validator is 1 within 240 secs